Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch)
authorDavid Schmidt <david__schmidt@users.sourceforge.net>
Tue, 18 Jul 2006 14:49:15 +0000 (14:49 +0000)
committerDavid Schmidt <david__schmidt@users.sourceforge.net>
Tue, 18 Jul 2006 14:49:15 +0000 (14:49 +0000)
with what was really the latest development (the v_3_0_branch branch)

272 files changed:
.gitignore
AUTHORS
ChangeLog
GNUmakefile.in
INSTALL
LICENSE
Makefile
README
acconfig.h
actionlist.h [moved from src/actionlist.h with 93% similarity]
actions.c [moved from src/actions.c with 92% similarity]
actions.h [moved from src/actions.h with 92% similarity]
amiga.c [moved from src/amiga.c with 95% similarity]
amiga.h [moved from src/amiga.h with 98% similarity]
cgi.c [moved from src/cgi.c with 87% similarity]
cgi.h [moved from src/cgi.h with 92% similarity]
cgiedit.c [moved from src/cgiedit.c with 94% similarity]
cgiedit.h [moved from src/cgiedit.h with 91% similarity]
cgisimple.c [moved from src/cgisimple.c with 93% similarity]
cgisimple.h [moved from src/cgisimple.h with 98% similarity]
config
configure.in
cygwin.h [moved from src/cygwin.h with 97% similarity]
deanimate.c [moved from src/deanimate.c with 94% similarity]
deanimate.h [moved from src/deanimate.h with 86% similarity]
debian/.gitignore [deleted file]
debian/README.Debian
debian/changelog
debian/compat
debian/control
debian/copyright
debian/doc-base.user
debian/init.d
debian/logrotate
debian/manpages
debian/patches/00list [new file with mode: 0644]
debian/patches/01_local_usermanual.dpatch [new file with mode: 0644]
debian/patches/02_linkcolor.dpatch [new file with mode: 0644]
debian/patches/04_nomultiproxy.dpatch [new file with mode: 0644]
debian/patches/05_defaut_action.dpatch [new file with mode: 0644]
debian/patches/06_8bit_manual.dpatch [new file with mode: 0644]
debian/patches/07_typos.dpatch [new file with mode: 0644]
debian/patches/08_log_pthread.dpatch [new file with mode: 0644]
debian/patches/09_no_identity.dpatch [new file with mode: 0644]
debian/patches/10_backup_doc.dpatch [new file with mode: 0644]
debian/patches/11_backup_autotools.dpatch [new file with mode: 0644]
debian/patches/12_multiple-filters.dpatch [new file with mode: 0644]
debian/patches/13_memory.dpatch [new file with mode: 0644]
debian/patches/14_config.dpatch [new file with mode: 0644]
debian/patches/15_mansection8.dpatch [new file with mode: 0644]
debian/postinst
debian/postrm
debian/rules
debian/watch [new file with mode: 0644]
default.action.master
default.filter
doc/Doxyfile [deleted file]
doc/pcrs.3
doc/pdf/privoxy-developer-manual.pdf
doc/pdf/privoxy-faq.pdf
doc/pdf/privoxy-user-manual.pdf
doc/source/GNUmakefile.in [deleted file]
doc/source/announce.sgml
doc/source/authors.sgml
doc/source/buildsource.sgml
doc/source/config.sgml
doc/source/contacting.sgml
doc/source/copyright.sgml
doc/source/developer-manual.sgml
doc/source/faq.sgml
doc/source/history.sgml
doc/source/install.sgml
doc/source/p-authors.sgml
doc/source/p-config.sgml
doc/source/privoxy-man-page.sgml
doc/source/privoxy.sgml
doc/source/readme.sgml
doc/source/supported.sgml
doc/source/user-manual.sgml
doc/source/webserver/index.sgml
doc/text/developer-manual.txt
doc/text/faq.txt
doc/text/user-manual.txt
doc/webserver/actions/index.php
doc/webserver/actions/step3.php
doc/webserver/config/index.php
doc/webserver/default_page.php [deleted file]
doc/webserver/developer-manual/coding.html
doc/webserver/developer-manual/contact.html
doc/webserver/developer-manual/copyright.html
doc/webserver/developer-manual/cvs.html
doc/webserver/developer-manual/documentation.html
doc/webserver/developer-manual/index.html
doc/webserver/developer-manual/introduction.html
doc/webserver/developer-manual/newrelease.html
doc/webserver/developer-manual/quickstart.html [new file with mode: 0644]
doc/webserver/developer-manual/seealso.html
doc/webserver/developer-manual/testing.html
doc/webserver/developer-manual/webserver-update.html
doc/webserver/faq/configuration.html
doc/webserver/faq/contact.html
doc/webserver/faq/copyright.html
doc/webserver/faq/general.html
doc/webserver/faq/index.html
doc/webserver/faq/installation.html
doc/webserver/faq/misc.html
doc/webserver/faq/trouble.html
doc/webserver/index.html
doc/webserver/man-page/privoxy-man-page.html
doc/webserver/p_doc.css
doc/webserver/p_web.css [deleted file]
doc/webserver/privoxy-index.html
doc/webserver/submit/confirmad.php [new file with mode: 0644]
doc/webserver/submit/index.php [new file with mode: 0644]
doc/webserver/team/09member.jpg [deleted file]
doc/webserver/team/09member_t.jpg [deleted file]
doc/webserver/team/10member.jpg [deleted file]
doc/webserver/team/10member_t.jpg [deleted file]
doc/webserver/team/11member.jpg [deleted file]
doc/webserver/team/11member_t.jpg [deleted file]
doc/webserver/team/12member.jpg [deleted file]
doc/webserver/team/12member_t.jpg [deleted file]
doc/webserver/team/13member.jpg [deleted file]
doc/webserver/team/13member_t.jpg [deleted file]
doc/webserver/team/14member.jpg [deleted file]
doc/webserver/team/14member_t.jpg [deleted file]
doc/webserver/team/15member.jpg [deleted file]
doc/webserver/team/15member_t.jpg [deleted file]
doc/webserver/team/16member.jpg [deleted file]
doc/webserver/team/16member_t.jpg [deleted file]
doc/webserver/team/17member.jpg [deleted file]
doc/webserver/team/17member_t.jpg [deleted file]
doc/webserver/team/18member.jpg [deleted file]
doc/webserver/team/18member_t.jpg [deleted file]
doc/webserver/team/19member.jpg [deleted file]
doc/webserver/team/19member_t.jpg [deleted file]
doc/webserver/team/index.html
doc/webserver/user-manual/actions-file.html
doc/webserver/user-manual/appendix.html
doc/webserver/user-manual/config.html
doc/webserver/user-manual/configuration.html
doc/webserver/user-manual/contact.html
doc/webserver/user-manual/copyright.html
doc/webserver/user-manual/filter-file.html
doc/webserver/user-manual/index.html
doc/webserver/user-manual/installation.html
doc/webserver/user-manual/introduction.html
doc/webserver/user-manual/quickstart.html
doc/webserver/user-manual/seealso.html
doc/webserver/user-manual/startup.html
doc/webserver/user-manual/templates.html
doc/webserver/user-manual/upgradersnote.html
encode.c [moved from src/encode.c with 97% similarity]
encode.h [moved from src/encode.h with 97% similarity]
errlog.c [moved from src/errlog.c with 91% similarity]
errlog.h [moved from src/errlog.h with 84% similarity]
filters.c [moved from src/filters.c with 91% similarity]
filters.h [moved from src/filters.h with 92% similarity]
gateway.c [moved from src/gateway.c with 92% similarity]
gateway.h [moved from src/gateway.h with 98% similarity]
icons/ico00001.ico [moved from src/icons/ico00001.ico with 100% similarity]
icons/ico00002.ico [moved from src/icons/ico00002.ico with 100% similarity]
icons/ico00003.ico [moved from src/icons/ico00003.ico with 100% similarity]
icons/ico00004.ico [moved from src/icons/ico00004.ico with 100% similarity]
icons/ico00005.ico [moved from src/icons/ico00005.ico with 100% similarity]
icons/ico00006.ico [moved from src/icons/ico00006.ico with 100% similarity]
icons/ico00007.ico [moved from src/icons/ico00007.ico with 100% similarity]
icons/ico00008.ico [moved from src/icons/ico00008.ico with 100% similarity]
icons/idle.ico [moved from src/icons/idle.ico with 100% similarity]
icons/os2.ico [moved from src/icons/os2.ico with 100% similarity]
icons/os20.ico [moved from src/icons/os20.ico with 100% similarity]
icons/os21.ico [moved from src/icons/os21.ico with 100% similarity]
icons/os22.ico [moved from src/icons/os22.ico with 100% similarity]
icons/os23.ico [moved from src/icons/os23.ico with 100% similarity]
icons/os24.ico [moved from src/icons/os24.ico with 100% similarity]
icons/os25.ico [moved from src/icons/os25.ico with 100% similarity]
icons/os26.ico [moved from src/icons/os26.ico with 100% similarity]
icons/os27.ico [moved from src/icons/os27.ico with 100% similarity]
icons/os28.ico [moved from src/icons/os28.ico with 100% similarity]
icons/privoxy.ico [moved from src/icons/privoxy.ico with 100% similarity]
jbsockets.c [moved from src/jbsockets.c with 92% similarity]
jbsockets.h [moved from src/jbsockets.h with 94% similarity]
jcc.c [moved from src/jcc.c with 71% similarity]
jcc.h [moved from src/jcc.h with 82% similarity]
killpopup.c [moved from src/killpopup.c with 98% similarity]
killpopup.h [moved from src/killpopup.h with 98% similarity]
list.c [moved from src/list.c with 93% similarity]
list.h [moved from src/list.h with 93% similarity]
loadcfg.c [moved from src/loadcfg.c with 82% similarity]
loadcfg.h [moved from src/loadcfg.h with 95% similarity]
loaders.c [moved from src/loaders.c with 87% similarity]
loaders.h [moved from src/loaders.h with 94% similarity]
miscutil.c [moved from src/miscutil.c with 98% similarity]
miscutil.h [moved from src/miscutil.h with 98% similarity]
mkinstalldirs
parsers.c [moved from src/parsers.c with 82% similarity]
parsers.h [moved from src/parsers.h with 91% similarity]
pcre/config.h
pcre/vc_dftables.dsp [moved from visualc/vc_dftables.dsp with 85% similarity, mode: 0755]
pcrs.c [moved from src/pcrs.c with 93% similarity]
pcrs.h [moved from src/pcrs.h with 98% similarity]
privoxy-generic.init
privoxy-rh.spec
privoxy-suse.spec
privoxy.1
privoxy.init
privoxy.init.suse
privoxy.logrotate
privoxy.monthly [deleted file]
privoxy.weekly [deleted file]
project.h [moved from src/project.h with 92% similarity]
src/ipc.h [deleted file]
src/java/org/privoxy/activityconsole/ActivityConsole.java [deleted file]
src/java/org/privoxy/activityconsole/ActivityConsoleGui.java [deleted file]
src/java/org/privoxy/activityconsole/ActivityConsoleGuiUtil.java [deleted file]
src/java/org/privoxy/activityconsole/ActivityConsoleResources.java [deleted file]
src/java/org/privoxy/activityconsole/BevelArrowIcon.java [deleted file]
src/java/org/privoxy/activityconsole/BlankIcon.java [deleted file]
src/java/org/privoxy/activityconsole/ColumnRef.java [deleted file]
src/java/org/privoxy/activityconsole/Copyright.java [deleted file]
src/java/org/privoxy/activityconsole/ServerThread.java [deleted file]
src/java/org/privoxy/activityconsole/SortButtonRenderer.java [deleted file]
src/java/org/privoxy/activityconsole/SortableTableModel.java [deleted file]
src/java/org/privoxy/activityconsole/Stat.java [deleted file]
src/java/org/privoxy/activityconsole/StatWidget.java [deleted file]
src/java/org/privoxy/activityconsole/StatWidgetThread.java [deleted file]
src/java/org/privoxy/activityconsole/StringUtil.java [deleted file]
src/java/org/privoxy/activityconsole/TableSorter.java [deleted file]
src/java/org/privoxy/activityconsole/acon.bat [deleted file]
src/java/org/privoxy/activityconsole/acon.cmd [deleted file]
src/java/org/privoxy/activityconsole/acon.manifest [deleted file]
src/java/org/privoxy/activityconsole/acon.sh [deleted file]
src/stats.c [deleted file]
src/stats.h [deleted file]
ssplit.c [moved from src/ssplit.c with 98% similarity]
ssplit.h [moved from src/ssplit.h with 97% similarity]
standard.action
templates/blocked
templates/cgi-error-disabled
templates/connect-failed
templates/edit-actions-add-url-form
templates/edit-actions-for-url
templates/edit-actions-for-url-filter
templates/edit-actions-list
templates/edit-actions-list-section
templates/edit-actions-list-url
templates/edit-actions-remove-url-form
templates/edit-actions-url-form
templates/mod-title
templates/no-such-domain
templates/show-status
urlmatch.c [moved from src/urlmatch.c with 89% similarity]
urlmatch.h [moved from src/urlmatch.h with 98% similarity]
user.action
user.filter [new file with mode: 0644]
utils/cvs2cl.pl [deleted file]
utils/filter2docs.pl [new file with mode: 0755]
utils/ldp_print/ldp_print
vc_config_pthreads.h [moved from visualc/vc_config_pthreads.h with 99% similarity]
vc_config_winthreads.h [moved from visualc/vc_config_winthreads.h with 73% similarity]
vc_console.dsp [moved from visualc/vc_console.dsp with 76% similarity]
vc_privoxy.dsp [moved from visualc/vc_privoxy.dsp with 76% similarity]
vc_privoxy.dsw [moved from visualc/vc_privoxy.dsw with 89% similarity]
visualc/.gitignore [deleted file]
w32.rc [moved from src/w32res.rc with 89% similarity]
w32log.c [moved from src/w32log.c with 93% similarity]
w32log.h [moved from src/w32log.h with 93% similarity]
w32res.h [moved from src/w32res.h with 95% similarity]
w32taskbar.c [moved from src/w32taskbar.c with 91% similarity]
w32taskbar.h [moved from src/w32taskbar.h with 97% similarity]
win32.c [moved from src/win32.c with 91% similarity]
win32.h [moved from src/win32.h with 90% similarity]

index b61a8d6..bff9f85 100644 (file)
@@ -29,9 +29,6 @@ core
 *.txt
 GNUmakefile
 Makefile
 *.txt
 GNUmakefile
 Makefile
-autom4te.cache
-build-stamp
-configure-stamp
 configure
 config.base
 config.cache
 configure
 config.base
 config.cache
@@ -57,3 +54,4 @@ vc_release
 vc_release_winthr
 w32.aps
 w32.res
 vc_release_winthr
 w32.aps
 w32.res
+.project
diff --git a/AUTHORS b/AUTHORS
index f0e0f89..aff9e9c 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -4,18 +4,19 @@
 Current Developement Team:
 
  Hal Burgiss (docs)
 Current Developement Team:
 
  Hal Burgiss (docs)
- Jon Foster
  Andreas Oesterhelt
  David Schmidt (OS/2, Mac OSX ports)
  
  Andreas Oesterhelt
  David Schmidt (OS/2, Mac OSX ports)
  
+
 
 Current and Former Project Contributors:
 
  Johny Agotnes 
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
 
 Current and Former Project Contributors:
 
  Johny Agotnes 
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
+ Brian Dessent
  Mattes Dolak 
  Mattes Dolak 
+ Jon Foster
  Karsten Hopp (Red Hat)
  Alexander Lazic
  Daniel Leite
  Karsten Hopp (Red Hat)
  Alexander Lazic
  Daniel Leite
index 9ddb8a4..a64af74 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,15 +1,63 @@
 --------------------------------------------------------------------
 ChangeLog for Privoxy
 --------------------------------------------------------------------
 --------------------------------------------------------------------
 ChangeLog for Privoxy
 --------------------------------------------------------------------
-*** Version 3.1.1  ***
-- Major re-write of make install target. Add uninstall and
-  install-strip targets. Add user and group testing to configure.
-- Add an INSTALL file, and remove these instructions from README.
-- Add a demoronizer filter, which fixes MS's abuse of std charsets
-  (common cases anyway).
-- Add a 'dashboard' to watch activity in real-time - implemented
-  as a GUI in Java
-- Add the ability to specify the 'blocked' image to serve
+*** Since 3.0.3 ***
+- Multiple filter files can now be specified in config.
+- Added jpeg filtering to defend against MS jpeg vulnerability MS04-028
+- Removed the "arbitrary" 1000 filter limit - addresses tracker #911950
+- Thanks to Jindrich Makovicka for a race condition fix for the log 
+  file.  The race condition remains for non-pthread implementations.
+  Reference patch #1175720.
+
+*** Version 3.0.3 ***
+
+- Fixed yet another two memory leaks. Process growth seems stopped now.
+- Further tightened security against malicious toggle-off links.
+- Excluded text/plain MIME types from filtering. This fixes a
+  couple of client-crashing, download corruption and
+  Privoxy performance issues, whose root cause lies in
+  web servers labelling content of unknown type as text/plain.
+- Assorted fixes for POSIX compliance, signal handling, graceful
+  termination, compiler warnings, OSX support, Win32 systray,
+  error logging, hostname wildcards, correct detection of NetBSD.
+- Workarounds for client (iTunes etc) and server (PHP < 4.2.3) bugs
+  including the notorious "blank page" problem.
+- Various filter improvements; most notably the unsolicited-popups
+  filter became less destructive     
+- Major revamp of the actions file
+       
+*** Version 3.0.2 ***
+
+- Fixed two memory leaks, one serious
+- Fixed bug in pcrs which could cause crashes with user-defined filters
+- Fixed bug in domain name matching
+- Assorted small fixes (Win32 menu, CGI URL editor, ..) 
+- Added basic support for the OPTIONS and TRACE http methods
+- Added workaround for Bug in Mac OSX that made Privoxy crash occasionally
+- Refined the default action file through >400 items of user feedback
+- Filter changes:
+  - Assorted refinements, optimizations and fixes in the js-annoyances,
+    img-reorder, banners-by-size, banners-by-link, webbugs, refresh-tags,
+    html-annoyances, content-cookies and fun filters
+  - Replaced filter "popups" by choice between two modes:
+    - "unsolicited-popups" tries to catch only the unsolicited ones
+    - "all-popups" tries to kill them all (as before)
+  - New filter "tiny-textforms" Help those tiny or hard-wrap textareas. 
+  - New filter "jumping-windows" that prevents windows from resizing
+    and moving themselves
+  - New filter "demoronizer" which fixes MS's abuse of std charsets
+    (common cases anyway).
+  - Replaced "nimda" with more general "ie-exploits" filter in which
+    all filters for exploits shall be collected
+- Improved cookie logging
+- Rewrote make install target. Added uninstall and install-strip
+  targets.
+- Fixed a potential (application-level, NOT OS-level!) security
+  problem involving remote toggling and action file manipulation
+  by mailicious websites.
+- Added ability to chroot (thanks to Sviatoslav Sviridov)
+- Added more action aliases for prehistoric action names
+- Add Slackware support to Makefile.
 
 *** Version 3.0  ***
 
 
 *** Version 3.0  ***
 
index 18601df..65c2b4b 100644 (file)
@@ -1,8 +1,8 @@
 # Note:  Makefile is built automatically from Makefile.in
 #
 # Note:  Makefile is built automatically from Makefile.in
 #
-# $Id: GNUmakefile.in,v 1.138 2003/10/17 17:51:58 oes Exp $
+# $Id: GNUmakefile.in,v 1.104.2.28 2004/06/10 17:06:05 hal9 Exp $
 #
 #
-# Written by and Copyright (C) 2001 the SourceForge
+# Written by and Copyright (C) 2001 - 2004 the SourceForge
 # Privoxy team. http://www.privoxy.org/
 #
 # Based on the Internet Junkbuster originally written
 # Privoxy team. http://www.privoxy.org/
 #
 # Based on the Internet Junkbuster originally written
@@ -48,23 +48,13 @@ SNAPVERSION   = $(RPM_VERSION)-$(shell date "+%Y%m%d")
 
 
 #############################################################################
 
 
 #############################################################################
-# Source directories
+# "make install" directories and variables
 #############################################################################
 #############################################################################
-DIR_PRIVOXY_ROOT     := .
-DIR_PRIVOXY_SRC      := $(DIR_PRIVOXY_ROOT)/src
-DIR_PRIVOXY_SRC_PCRE := $(DIR_PRIVOXY_ROOT)/pcre
-DIR_PRIVOXY_SRC_JAVA := $(DIR_PRIVOXY_ROOT)/src/java
-DIR_PRIVOXY_OBJ      := $(DIR_PRIVOXY_ROOT)/obj
 
 
-#############################################################################
-# "make install" settings
-#############################################################################
-
-# User and Group settings
-USER   = @USER@
-GROUP  = @GROUP@
+#User Group paras
+USER         = @USER@
+GROUP     = @GROUP@
 
 
-# PATHS set from configure
 prefix       = @prefix@
 exec_prefix  = @exec_prefix@
 CONF_BASE    = @sysconfdir@
 prefix       = @prefix@
 exec_prefix  = @exec_prefix@
 CONF_BASE    = @sysconfdir@
@@ -88,53 +78,52 @@ PIDS_DEST    = $(VAR_DEST)/run
 # finally if $prefix=/usr/local and VAR_DEST=$prefix/var it 
 # changes this to /var for storing the logs and pidfile
 
 # finally if $prefix=/usr/local and VAR_DEST=$prefix/var it 
 # changes this to /var for storing the logs and pidfile
 
-# Where to find docs. The install goes to $share_dest/doc/privoxy.
-DOK_WEB    = doc/webserver/
+# used in source dir only, the install goes to $share_dest/doc/privoxy
+DOK_WEB = doc/webserver/
 
 # Install usage should be compatible with install-sh.
 INSTALL    = @INSTALL@
 
 # Install usage should be compatible with install-sh.
 INSTALL    = @INSTALL@
-
-# Permissions used during installation.
-# Binaries (daemon, init scripts)
+# Binaries
 BIN_MODE        = 0755
 BIN_MODE        = 0755
-# Files daemon writes to: *action, trust and logs.
-RWD_MODE   = 0660
-# Misc files, docs, etc.
-RA_MODE    = 0664
+# Support files, docs, etc.
+RA_MODE   = 0664
 # Directory
 DIR_MODE   = 0755
 # Directory
 DIR_MODE   = 0755
-
+# Files daemon writes to.
+RWD_MODE   = 0660
 INSTALL_P  = -m $(BIN_MODE)  
 INSTALL_T  = -m $(RA_MODE)
 INSTALL_D  = -m $(DIR_MODE) -d
 INSTALL_R  = -m $(RWD_MODE)
 INSTALL_P  = -m $(BIN_MODE)  
 INSTALL_T  = -m $(RA_MODE)
 INSTALL_D  = -m $(DIR_MODE) -d
 INSTALL_R  = -m $(RWD_MODE)
+
 # install options for superuser install
 # install options for superuser install
-#INSTALL_S  = -g  -o  
+#INSTALL_S  = -g @GROUP@ -o @USER@ 
 
 #############################################################################
 
 #############################################################################
-# Build and Install tools
+# Build tools
 #############################################################################
 
 PROGRAM    = privoxy@EXEEXT@
 CC         = @CC@
 ECHO       = echo
 GZIP_PROG  = gzip
 #############################################################################
 
 PROGRAM    = privoxy@EXEEXT@
 CC         = @CC@
 ECHO       = echo
 GZIP_PROG  = gzip
+
 # id -u is not universal. FIXME: need to set from configure. Breaks on
 # Solaris.
 #ID         = id -u
 ID         = id
 LD         = @CC@
 RM         = rm -f
 # id -u is not universal. FIXME: need to set from configure. Breaks on
 # Solaris.
 #ID         = id -u
 ID         = id
 LD         = @CC@
 RM         = rm -f
+CP         = cp -f
 RMDIR      = rmdir
 MKDIR      = ./mkinstalldirs
 STRIP_PROG = strip
 RMDIR      = rmdir
 MKDIR      = ./mkinstalldirs
 STRIP_PROG = strip
-CP         = cp -f
 SED          = sed
 GREP       = grep
 CAT        = cat
 RPM        = rpm
 SED          = sed
 GREP       = grep
 CAT        = cat
 RPM        = rpm
-RPMBUILD   = rpm
-MV        = mv
+RPMBUILD   = rpmbuild
+MV           = mv
 TAR        = tar
 LN         = ln
 TOUCH      = touch
 TAR        = tar
 LN         = ln
 TOUCH      = touch
@@ -143,24 +132,29 @@ CHMOD      = chmod
 CHOWN      = chown
 CHGRP      = chgrp
 GROUPS     = groups
 CHOWN      = chown
 CHGRP      = chgrp
 GROUPS     = groups
-DOC_STATUS = @DOC_STATUS@
-# Note: Please make sure that -d ldp.dsl\#html stays the last option to
-#       $(JADEBIN), because for some targets "-notoc" will be appended
-#       to it (--> "ldp.dsl\#html-notoc"). 
+WDUMP      = @WDUMP@ -dump
+JADECAT    = @JADECAT@
+JADEBIN    = @JADEBIN@
+DB         = $(JADEBIN) $(JADECAT) -ihtml -t sgml  -D.. -d ldp.dsl\#html
+DB2HTML    = @DB2HTML@
+MAN2HTML   = @MAN2HTML@
+G2H_CMD    = groff -mandoc -Thtml
 TARGET_OS  = @host@
 PERL       = perl
 TARGET_OS  = @host@
 PERL       = perl
-DOC_DIR    = doc/source
+DOC_DIR         = doc/source
+DOC_TMP    = $(DOC_DIR)/tmp
+DOC_STATUS = @DOC_STATUS@
 
 # Program to do LF->CRLF
 #
 
 # Program to do LF->CRLF
 #
-# The sed version should be the most portable, but it doesn't work for me,
+# The sed version should be the most portable, but it doesn't for for me,
 # the other two do.  FIXME.
 #   - Jon
 #DOSFILTER  = $(SED) -e $$'s,$$,\r,'
 #DOSFILTER  = gawk -v ORS='\r\n' '{print $0;}'
 DOSFILTER  = $(PERL) -p -e 's/\n/\r\n/'
 CVSROOT    = :pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa
 # the other two do.  FIXME.
 #   - Jon
 #DOSFILTER  = $(SED) -e $$'s,$$,\r,'
 #DOSFILTER  = gawk -v ORS='\r\n' '{print $0;}'
 DOSFILTER  = $(PERL) -p -e 's/\n/\r\n/'
 CVSROOT    = :pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa
-TMPDIR     := $(shell mktemp -d /tmp/$(PROGRAM).XXXXXX)
+#TMPDIR     := $(shell mktemp -d /tmp/$(PROGRAM).XXXXXX)
 
 #############################################################################
 # Setup for make distribution rh and suse for now 
 
 #############################################################################
 # Setup for make distribution rh and suse for now 
@@ -183,64 +177,45 @@ DOC_FILES = AUTHORS LICENSE README ChangeLog INSTALL \
                `find doc/text/ -type f | grep -v "CVS" | grep -v "\.\#" | grep -v ".*~" | grep -v ".cvsignore" | grep -v "TAGS"` \
                `find doc/webserver/ -name "*.html" | grep -v "\(webserver\|team\)\/index\.html"` \
                `find doc/webserver/ -name "*.css"` \
                `find doc/text/ -type f | grep -v "CVS" | grep -v "\.\#" | grep -v ".*~" | grep -v ".cvsignore" | grep -v "TAGS"` \
                `find doc/webserver/ -name "*.html" | grep -v "\(webserver\|team\)\/index\.html"` \
                `find doc/webserver/ -name "*.css"` \
-                privoxy.1
+                privoxy.1 \
+               doc/pdf/*.pdf
 
 #############################################################################
 # Filenames and libraries
 #############################################################################
 
 
 #############################################################################
 # Filenames and libraries
 #############################################################################
 
-C_SRC  =          \
-  $(DIR_PRIVOXY_SRC)/actions.c   \
-  $(DIR_PRIVOXY_SRC)/cgi.c       \
-  $(DIR_PRIVOXY_SRC)/cgiedit.c   \
-  $(DIR_PRIVOXY_SRC)/cgisimple.c \
-  $(DIR_PRIVOXY_SRC)/deanimate.c \
-  $(DIR_PRIVOXY_SRC)/encode.c    \
-  $(DIR_PRIVOXY_SRC)/errlog.c    \
-  $(DIR_PRIVOXY_SRC)/filters.c   \
-  $(DIR_PRIVOXY_SRC)/gateway.c   \
-  $(DIR_PRIVOXY_SRC)/jbsockets.c \
-  $(DIR_PRIVOXY_SRC)/jcc.c       \
-  $(DIR_PRIVOXY_SRC)/killpopup.c \
-  $(DIR_PRIVOXY_SRC)/list.c      \
-  $(DIR_PRIVOXY_SRC)/loadcfg.c   \
-  $(DIR_PRIVOXY_SRC)/loaders.c   \
-  $(DIR_PRIVOXY_SRC)/miscutil.c  \
-  $(DIR_PRIVOXY_SRC)/parsers.c   \
-  $(DIR_PRIVOXY_SRC)/ssplit.c    \
-  $(DIR_PRIVOXY_SRC)/urlmatch.c
-
-C_OBJS = $(C_SRC:$(DIR_PRIVOXY_SRC)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@)
-C_HDRS = $(C_SRC:.c=.h) $(DIR_PRIVOXY_SRC)/project.h $(DIR_PRIVOXY_SRC)/actionlist.h
-
-W32_SRC   = @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.c $(DIR_PRIVOXY_SRC)/w32taskbar.c $(DIR_PRIVOXY_SRC)/win32.c
-W32_FILES = @WIN_ONLY@$(DIR_PRIVOXY_OBJ)/w32res.res
-W32_OBJS  = @WIN_ONLY@$(W32_SRC:$(DIR_PRIVOXY_SRC)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@) $(W32_FILES)
-W32_HDRS  = @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.h $(DIR_PRIVOXY_SRC)/w32taskbar.h $(DIR_PRIVOXY_SRC)/win32.h $(DIR_PRIVOXY_SRC)/w32res.h
+C_SRC  = actions.c cgi.c cgiedit.c cgisimple.c deanimate.c encode.c \
+         errlog.c filters.c gateway.c jbsockets.c jcc.c killpopup.c \
+         list.c loadcfg.c loaders.c miscutil.c parsers.c ssplit.c \
+         urlmatch.c
+
+C_OBJS = $(C_SRC:.c=.@OBJEXT@)
+C_HDRS = $(C_SRC:.c=.h) project.h actionlist.h
+
+W32_SRC   = @WIN_ONLY@w32log.c w32taskbar.c win32.c
+W32_FILES = @WIN_ONLY@w32.res
+W32_OBJS  = @WIN_ONLY@$(W32_SRC:.c=.@OBJEXT@) $(W32_FILES)
+W32_HDRS  = @WIN_ONLY@w32log.h w32taskbar.h win32.h w32res.h
 W32_LIB   = @WIN_ONLY@-lwsock32 -lcomctl32
 W32_INIS  = @WIN_ONLY@config.txt trust.txt
 
 W32_LIB   = @WIN_ONLY@-lwsock32 -lcomctl32
 W32_INIS  = @WIN_ONLY@config.txt trust.txt
 
-PCRS_SRC     = @STATIC_PCRS_ONLY@$(DIR_PRIVOXY_SRC)/pcrs.c
-PCRS_OBJS    = @STATIC_PCRS_ONLY@$(PCRS_SRC:$(DIR_PRIVOXY_SRC)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@)
+PCRS_SRC     = @STATIC_PCRS_ONLY@pcrs.c
+PCRS_OBJS    = @STATIC_PCRS_ONLY@$(PCRS_SRC:.c=.@OBJEXT@)
 PCRS_HDRS    = @STATIC_PCRS_ONLY@$(PCRS_SRC:.c=.h)
 
 PCRS_HDRS    = @STATIC_PCRS_ONLY@$(PCRS_SRC:.c=.h)
 
-PCRE_SRC     = @STATIC_PCRE_ONLY@$(DIR_PRIVOXY_SRC_PCRE)/get.c $(DIR_PRIVOXY_SRC_PCRE)/maketables.c $(DIR_PRIVOXY_SRC_PCRE)/study.c $(DIR_PRIVOXY_SRC_PCRE)/pcre.c
-PCRE_OBJS    = @STATIC_PCRE_ONLY@$(PCRE_SRC:$(DIR_PRIVOXY_SRC_PCRE)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@)
-PCRE_HDRS    = @STATIC_PCRE_ONLY@$(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/chartables.c $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h
-
-ACTIVITY_SRC  = @ACTIVITY_ONLY@$(DIR_PRIVOXY_SRC)/stats.c
-ACTIVITY_OBJS = @ACTIVITY_ONLY@$(ACTIVITY_SRC:$(DIR_PRIVOXY_SRC)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@)
-ACTIVITY_HDRS = @ACTIVITY_ONLY@$(ACTIVITY_SRC:.c=.h) $(DIR_PRIVOXY_SRC)/ipc.h
+PCRE_SRC     = @STATIC_PCRE_ONLY@pcre/get.c pcre/maketables.c pcre/study.c pcre/pcre.c
+PCRE_OBJS    = @STATIC_PCRE_ONLY@$(PCRE_SRC:.c=.@OBJEXT@)
+PCRE_HDRS    = @STATIC_PCRE_ONLY@pcre/config.h pcre/chartables.c pcre/internal.h pcre/pcre.h
 
 # No REGEX (maybe because dynamically linked pcreposix):
 REGEX_SRC    =
 
 # No REGEX (maybe because dynamically linked pcreposix):
 REGEX_SRC    =
-@STATIC_PCRE_ONLY@REGEX_SRC = $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.c
+@STATIC_PCRE_ONLY@REGEX_SRC = pcre/pcreposix.c
 
 
-REGEX_OBJS   = $(REGEX_SRC:$(DIR_PRIVOXY_SRC_PCRE)/%.c=$(DIR_PRIVOXY_OBJ)/%.@OBJEXT@)
+REGEX_OBJS   = $(REGEX_SRC:.c=.@OBJEXT@)
 REGEX_HDRS   = $(REGEX_SRC:.c=.h)
 
 # Dependencies introduced by #include "project.h".
 REGEX_HDRS   = $(REGEX_SRC:.c=.h)
 
 # Dependencies introduced by #include "project.h".
-PROJECT_H_DEPS = $(DIR_PRIVOXY_SRC)/project.h $(REGEX_HDRS) $(PCRS_HDRS) @STATIC_PCRE_ONLY@$(DIR_PRIVOXY_SRC_PCRE)/pcre.h
+PROJECT_H_DEPS = project.h $(REGEX_HDRS) $(PCRS_HDRS) @STATIC_PCRE_ONLY@pcre/pcre.h
 
 # Socket libraries for platforms that need them explicitly defined
 SOCKET_LIB   = @SOCKET_LIB@
 
 # Socket libraries for platforms that need them explicitly defined
 SOCKET_LIB   = @SOCKET_LIB@
@@ -248,9 +223,9 @@ SOCKET_LIB   = @SOCKET_LIB@
 # PThreads library, if needed.
 PTHREAD_LIB  = @PTHREAD_ONLY@@PTHREAD_LIB@
 
 # PThreads library, if needed.
 PTHREAD_LIB  = @PTHREAD_ONLY@@PTHREAD_LIB@
 
-SRCS         = $(C_SRC)  $(W32_SRC)  $(PCRS_SRC)  $(PCRE_SRC)  $(REGEX_SRC)  $(ACTIVITY_SRC)
-OBJS         = $(C_OBJS) $(W32_OBJS) $(PCRS_OBJS) $(PCRE_OBJS) $(REGEX_OBJS) $(ACTIVITY_OBJS)
-HDRS         = $(C_HDRS) $(W32_HDRS) $(PCRS_HDRS) $(PCRE_OBJS) $(REGEX_HDRS) $(ACTIVITY_HDRS)
+SRCS         = $(C_SRC)  $(W32_SRC)  $(PCRS_SRC)  $(PCRE_SRC)  $(REGEX_SRC)
+OBJS         = $(C_OBJS) $(W32_OBJS) $(PCRS_OBJS) $(PCRE_OBJS) $(REGEX_OBJS)
+HDRS         = $(C_HDRS) $(W32_HDRS) $(PCRS_HDRS) $(PCRE_OBJS) $(REGEX_HDRS)
 LIBS         = @LIBS@ $(W32_LIB) $(SOCKET_LIB) $(PTHREAD_LIB)
 
 
 LIBS         = @LIBS@ $(W32_LIB) $(SOCKET_LIB) $(PTHREAD_LIB)
 
 
@@ -279,31 +254,23 @@ LDFLAGS = $(DEBUG_CFLAGS) $(SPECIAL_CFLAGS)
 #
 # There should NOT be any targets above this line.
 #############################################################################
 #
 # There should NOT be any targets above this line.
 #############################################################################
-all: user-warned-once $(PROGRAM) default.action
+all: $(PROGRAM) default.action
 
 
 #############################################################################
 # Phony targets
 #############################################################################
 
 
 #############################################################################
 # Phony targets
 #############################################################################
-.PHONY: all inifiles redhat-dist redhat-upload redhat-test solaris-dist suse-dist \
+.PHONY: all inifiles redhat-dist redhat-upload solaris-dist suse-dist \
 suse-upload win-dist tarball-dist dok redhat-dok webserver clean clobber tags \
 suse-upload win-dist tarball-dist dok redhat-dok webserver clean clobber tags \
-install conectiva-spec conectiva-dist conectiva-upload debian-dist \
-debian-upload ensure-wdump ensure-jadebin ensure-dkprefix CONF_DEST LOG_DEST \
-PID_DEST check_doc install-strip uninstall GROUP_T java-activity-console
-
+install conectiva-spec conectiva-dist conectiva-upload CONF_DEST LOG_DEST \
+PID_DEST check_doc install-strip uninstall GROUP_T
 
 #############################################################################
 
 #############################################################################
-# Compile command
+# Define this explicitly because Solaris is broken!
 #############################################################################
 #############################################################################
-$(DIR_PRIVOXY_OBJ)/%.o: $(DIR_PRIVOXY_SRC)/%.c $(DIR_PRIVOXY_OBJ)
+%.o: %.c
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
 
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
 
-$(DIR_PRIVOXY_OBJ)/%.o: $(DIR_PRIVOXY_SRC_PCRE)/%.c $(DIR_PRIVOXY_OBJ)
-       $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
-
-$(DIR_PRIVOXY_OBJ):
-       $(CHMOD) $(DIR_MODE) $(MKDIR)
-       $(MKDIR) obj
 
 #############################################################################
 # Strip master copy comments from default.action:
 
 #############################################################################
 # Strip master copy comments from default.action:
@@ -355,40 +322,6 @@ dist-check:
            if [ "$$answer" != "yes i am sure" ]; then exit 1; fi \
          fi;
 
            if [ "$$answer" != "yes i am sure" ]; then exit 1; fi \
          fi;
 
-#############################################################################
-# One-time warning for unstable trunk version
-#############################################################################
-user-warned-once:
-       @if [ ! -f .user-has-been-warned ]; then \
-           $(ECHO) "****************************************************"; \
-           $(ECHO) "***                                              ***"; \
-           $(ECHO) "***       WARNING: LOTS OF TROUBLE AHEAD!        ***"; \
-           $(ECHO) "***       -------------------------------        ***"; \
-           $(ECHO) "***                                              ***"; \
-           $(ECHO) "*** You are about to compile the trunk (aka CVS  ***"; \
-           $(ECHO) "*** HEAD) version of Privoxy which contains a    ***"; \
-           $(ECHO) "*** zillion known bugs that are already fixed    ***"; \
-           $(ECHO) "*** in the stable branch, along with unfinished  ***"; \
-           $(ECHO) "*** features which will annoy you to death.      ***"; \
-           $(ECHO) "***                                              ***"; \
-           $(ECHO) "*** Unless you are developing or alpha-testing   ***"; \
-           $(ECHO) "*** Privoxy, THIS VERSION IS NOT FOR YOU! It is  ***"; \
-           $(ECHO) "*** UNSTABLE, LEAKY, UNDOCUMENTED, UNSUPPORTED!  ***"; \
-           $(ECHO) "***                                              ***"; \
-           $(ECHO) "*** If the latest release from www.privoxy.org   ***"; \
-           $(ECHO) "*** doesn't satisfy your bleeding-edge fetish,   ***"; \
-           $(ECHO) "*** check out the stable branch from CVS using   ***"; \
-           $(ECHO) "*** -r v_3_0_branch or use a snapshot from       ***"; \
-           $(ECHO) "*** http://www.oesterhelt.org/privoxy-snapshots/ ***"; \
-           $(ECHO) "***                                              ***"; \
-           $(ECHO) "*****************************************************"; \
-           $(ECHO) "Type \"yes i am sure\" if you are sure that you"; \
-           $(ECHO) -n "really want to proceed: "; \
-           read answer; \
-           if [ "$$answer" != "yes i am sure" ]; then exit 1; fi; \
-           touch .user-has-been-warned; \
-         fi;
-
 
 #############################################################################
 # create tar.gz from CVS:
 
 #############################################################################
 # create tar.gz from CVS:
@@ -400,6 +333,7 @@ user-warned-once:
 # This creates a tar.gz and spec-file for a Red Hat 6.x version.
 #############################################################################
 create-snapshot:
 # This creates a tar.gz and spec-file for a Red Hat 6.x version.
 #############################################################################
 create-snapshot:
+       TMPDIR=$(shell mktemp -d /tmp/$(PROGRAM).XXXXXX)
        @tag=`cvs -d $(CVSROOT) status Makefile | awk ' /Sticky Tag/ { print $$3 } '` 2> /dev/null; \
        [ x"$$tag" = x"(none)" ] && tag=HEAD; \
        echo "*** Creating package from $$tag!"; \
        @tag=`cvs -d $(CVSROOT) status Makefile | awk ' /Sticky Tag/ { print $$3 } '` 2> /dev/null; \
        [ x"$$tag" = x"(none)" ] && tag=HEAD; \
        echo "*** Creating package from $$tag!"; \
@@ -424,10 +358,10 @@ create-snapshot:
        fi; \
        $(RM) $(TMPFILE); \
        cd $(TMPDIR)/current; \
        fi; \
        $(RM) $(TMPFILE); \
        cd $(TMPDIR)/current; \
-       $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-suse.spec" \
-                -czf $(TMPDIR)/$(PROGRAM)-rh-$(VERSION).tar.gz .; \
-       $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-rh.spec" \
-                -czf $(TMPDIR)/$(PROGRAM)-suse-$(VERSION).tar.gz .
+       $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude \
+               "privoxy-suse.spec" -czf $(TMPDIR)/$(PROGRAM)-rh-$(VERSION).tar.gz .; \
+       $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude \
+               "privoxy-rh.spec" -czf $(TMPDIR)/$(PROGRAM)-suse-$(VERSION).tar.gz .
        @$(MV) -f $(TMPDIR)/$(PROGRAM)-rh-$(VERSION).tar.gz .
        @$(MV) -f $(TMPDIR)/$(PROGRAM)-suse-$(VERSION).tar.gz .
        @$(RM) -rf $(TMPDIR)
        @$(MV) -f $(TMPDIR)/$(PROGRAM)-rh-$(VERSION).tar.gz .
        @$(MV) -f $(TMPDIR)/$(PROGRAM)-suse-$(VERSION).tar.gz .
        @$(RM) -rf $(TMPDIR)
@@ -444,9 +378,8 @@ create-snapshot:
 create-archive:
        make SNAPVERSION=$(SNAPVERSION) create-snapshot
 
 create-archive:
        make SNAPVERSION=$(SNAPVERSION) create-snapshot
 
-
 #############################################################################
 #############################################################################
-# RPM specific stuff (SuSE or Redhat, ..)
+# RPM specifice stuff (SuSE or Redhat, ..)
 #############################################################################
 rpm-stuff: dist-check clean clobber 
        for dir in RPMS SRPMS BUILD SOURCES SPECS; do \
 #############################################################################
 rpm-stuff: dist-check clean clobber 
        for dir in RPMS SRPMS BUILD SOURCES SPECS; do \
@@ -493,8 +426,8 @@ conectiva-spec:
 #############################################################################
 conectiva-dist: rpm-stuff conectiva-spec
 
 #############################################################################
 conectiva-dist: rpm-stuff conectiva-spec
 
-       $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-suse.spec" --exclude="privoxy-rh.spec" --exclude="PACKAGERS" -czf $(TAR_ARCH) .
-       $(RPM) --clean -ta  $(TAR_ARCH)
+       $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude "privoxy-suse.spec" --exclude "privoxy-rh.spec" --exclude "PACKAGERS" -czf $(TAR_ARCH) .
+       $(RPMBUILD) --clean -ta  $(TAR_ARCH)
        if [ -f $(TAR_ARCH) ]; then  $(RM) $(TAR_ARCH); fi
 
 conectiva-upload: check-release
        if [ -f $(TAR_ARCH) ]; then  $(RM) $(TAR_ARCH); fi
 
 conectiva-upload: check-release
@@ -505,14 +438,14 @@ conectiva-upload: check-release
 #############################################################################
 redhat-dist: rpm-stuff
        echo $(CONFIG_FILES)
 #############################################################################
 redhat-dist: rpm-stuff
        echo $(CONFIG_FILES)
-       $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-suse.spec" --exclude="privoxy-cl.spec" --exclude="PACKAGERS" -czf $(TAR_ARCH) .
+       $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude "privoxy-suse.spec" --exclude "privoxy-cl.spec" --exclude "PACKAGERS" -czf $(TAR_ARCH) .
        $(RPMBUILD) --clean -ta  $(TAR_ARCH)
        if [ -f $(TAR_ARCH) ]; then  $(RM) $(TAR_ARCH); fi
 
 # For testing build issues only! Use redhat-dist for official releases.
 redhat-test: 
        echo $(CONFIG_FILES)
        $(RPMBUILD) --clean -ta  $(TAR_ARCH)
        if [ -f $(TAR_ARCH) ]; then  $(RM) $(TAR_ARCH); fi
 
 # For testing build issues only! Use redhat-dist for official releases.
 redhat-test: 
        echo $(CONFIG_FILES)
-       $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-suse.spec" --exclude="privoxy-cl.spec" --exclude="PACKAGERS" -czf $(TAR_ARCH) .
+       $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude "privoxy-suse.spec" --exclude "privoxy-cl.spec" --exclude "PACKAGERS" -czf $(TAR_ARCH) .
        $(RPMBUILD) --clean -tb  $(TAR_ARCH)
        if [ -f $(TAR_ARCH) ]; then  $(RM) $(TAR_ARCH); fi
        @echo "WARNING: This target is only for testing. Use redhat-dist for releases!!!"
        $(RPMBUILD) --clean -tb  $(TAR_ARCH)
        if [ -f $(TAR_ARCH) ]; then  $(RM) $(TAR_ARCH); fi
        @echo "WARNING: This target is only for testing. Use redhat-dist for releases!!!"
@@ -529,6 +462,17 @@ redhat-upload: check-release
        @$(ECHO) -------------------------------------------------------
      # w3m http://sourceforge.net/project/admin/editpackages.php?group_id=11118
 
        @$(ECHO) -------------------------------------------------------
      # w3m http://sourceforge.net/project/admin/editpackages.php?group_id=11118
 
+
+#############################################################################
+# Creates a Red Hat sourcepackage from CVS (not from the current sources
+# on disk)
+#############################################################################
+redhat-srpm: 
+       make create-archive
+       $(MV) $(PROGRAM)-rh-$(VERSION).tar.gz $(PROGRAM)-$(VERSION).tar.gz
+       $(RPMBUILD) -ts --nodeps $(PROGRAM)-$(VERSION).tar.gz
+
+
 #############################################################################
 # suse distribution. works fine. no need to be root. 
 #############################################################################
 #############################################################################
 # suse distribution. works fine. no need to be root. 
 #############################################################################
@@ -543,7 +487,7 @@ suse-dist: rpm-stuff
 #      exit 1;\
 #      fi
 
 #      exit 1;\
 #      fi
 
-       $(TAR) --exclude=".cvsignore" --exclude="CVS" --exclude="privoxy-rh.spec" --exclude="privoxy-cl.spec" --exclude="PACKAGERS" -czf $(TAR_ARCH) .
+       $(TAR) --exclude ".cvsignore" --exclude "CVS" --exclude "privoxy-rh.spec" --exclude "privoxy-cl.spec" --exclude "PACKAGERS" -czf $(TAR_ARCH) .
        $(RPM) --clean -ta  $(TAR_ARCH)
        if [ -f $(TAR_ARCH) ]; then  $(RM) $(TAR_ARCH); fi
 
        $(RPM) --clean -ta  $(TAR_ARCH)
        if [ -f $(TAR_ARCH) ]; then  $(RM) $(TAR_ARCH); fi
 
@@ -579,7 +523,6 @@ suse-clean:
        $(RM) /usr/sbin/rcprivoxy
        $(RM) /usr/share/man/man1/privoxy.1.gz
 
        $(RM) /usr/sbin/rcprivoxy
        $(RM) /usr/share/man/man1/privoxy.1.gz
 
-
 #############################################################################
 # generic distribution
 #############################################################################
 #############################################################################
 # generic distribution
 #############################################################################
@@ -591,14 +534,14 @@ gen-dist: dist-check
        $(STRIP_PROG) $(PROGRAM)
        $(LN) -s current ../privoxy-$(VERSION)-$(CODE_STATUS)
 # add program
        $(STRIP_PROG) $(PROGRAM)
        $(LN) -s current ../privoxy-$(VERSION)-$(CODE_STATUS)
 # add program
-       (cd .. && $(TAR) --exclude="PACKAGERS" -cvhf privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$(PROGRAM))
+       (cd .. && $(TAR) -cvhf --exclude "PACKAGERS" privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$(PROGRAM))
 # add config files
        for foo in $(CONFIG_FILES); do \
 # add config files
        for foo in $(CONFIG_FILES); do \
-               (cd .. && $(TAR) --exclude="PACKAGERS" -uvhf privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$$foo;) \
+               (cd .. && $(TAR) -uvhf --exclude "PACKAGERS" privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$$foo;) \
        done; 
 # add documentation
        for foo in $(DOC_FILES); do \
        done; 
 # add documentation
        for foo in $(DOC_FILES); do \
-               (cd .. && $(TAR) --exclude="PACKAGERS" -uvhf privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$$foo;) \
+               (cd .. && $(TAR) -uvhf --exclude "PACKAGERS" privoxy-$(TARGET_OS)-$(VERSION)-$(CODE_STATUS)-src.tar privoxy-$(VERSION)-$(CODE_STATUS)/$$foo;) \
        done;
 # and zip the archive
        $(RM) ../privoxy-$(VERSION)-$(CODE_STATUS)
        done;
 # and zip the archive
        $(RM) ../privoxy-$(VERSION)-$(CODE_STATUS)
@@ -642,16 +585,9 @@ hpux-upload:
 # debian distribution
 #############################################################################
 debian-dist:
 # debian distribution
 #############################################################################
 debian-dist:
-       @$(ECHO) Creating Debian package.  Will exist in parent directory.
-       dpkg-buildpackage -rfakeroot -us -uc
+       @$(ECHO) coming soon. 
 debian-upload:
 debian-upload:
-       ncftpput -u anonymous -p ijbswa-developers@lists.sourceforge.net upload.sourceforge.net /incoming ../privoxy_$(shell dpkg-parsechangelog | grep "Version" | sed "s/Version: //")_$(shell dpkg --print-architecture).deb
-       @$(ECHO) -------------------------------------------------------
-       @$(ECHO) Now goto
-       @$(ECHO) http://sourceforge.net/project/admin/editpackages.php?group_id=11118
-       @$(ECHO) ... and release the files.
-       @$(ECHO) -------------------------------------------------------
-
+       @$(ECHO) coming soon. 
 
 #############################################################################
 # macosx distribution
 
 #############################################################################
 # macosx distribution
@@ -685,10 +621,7 @@ freebsd-clean: gen-clean
 # Windows distribution
 #############################################################################
 win-dist:
 # Windows distribution
 #############################################################################
 win-dist:
-       @$(ECHO) RTFM.  You shouldn't run configure before making
-       @$(ECHO) the Windows release, so you need to start again from
-       @$(ECHO) a clean CVS export.
-       @false
+       $(ECHO) Not implemented.
 
 
 #############################################################################
 
 
 #############################################################################
@@ -700,7 +633,8 @@ tarball-dist: dist-check clean clobber
        $(LN) -s current ../privoxy-$(VERSION)-$(CODE_STATUS)
 
        for i in `find . -type f -a -not \( -path "*/CVS*" -o -name ".*" \
        $(LN) -s current ../privoxy-$(VERSION)-$(CODE_STATUS)
 
        for i in `find . -type f -a -not \( -path "*/CVS*" -o -name ".*" \
-       -o -path "*/debian/*" -o -path "*/actions/*" -o -name "*.php" -o -name "PACKAGERS" \)`; do \
+       -o -path "*/debian/*" -o -path "*/actions/*" -o -name "*.php" -o \
+       -name "PACKAGERS" -o -path "*/pdf/*" \)`; do \
           files="$$files privoxy-$(VERSION)-$(CODE_STATUS)/$$i"; \
        done &&  \
        cd .. && $(TAR) -cvhf privoxy-$(VERSION)-$(CODE_STATUS)-src.tar $$files ; \
           files="$$files privoxy-$(VERSION)-$(CODE_STATUS)/$$i"; \
        done &&  \
        cd .. && $(TAR) -cvhf privoxy-$(VERSION)-$(CODE_STATUS)-src.tar $$files ; \
@@ -722,13 +656,6 @@ tarball-upload:
 tarball-clean:
        $(RM) ../privoxy-$(VERSION)-$(CODE_STATUS)-src.tar.gz
 
 tarball-clean:
        $(RM) ../privoxy-$(VERSION)-$(CODE_STATUS)-src.tar.gz
 
-#############################################################################
-# java Activity Console 
-#############################################################################
-java-activity-console:
-       javac -classpath $(DIR_PRIVOXY_SRC_JAVA):$(CLASSPATH) $(DIR_PRIVOXY_SRC)/java/org/privoxy/activityconsole/*.java
-       jar -cvfm ActivityConsole.jar $(DIR_PRIVOXY_SRC_JAVA)/org/privoxy/activityconsole/acon.manifest -C $(DIR_PRIVOXY_SRC_JAVA) org/privoxy/activityconsole
-
 #############################################################################
 #
 # Documentation
 #############################################################################
 #
 # Documentation
@@ -737,9 +664,231 @@ java-activity-console:
 #
 #############################################################################
 
 #
 #############################################################################
 
-
-dok:
-       cd $(DOC_DIR) && $(MAKE)
+# developer manual
+dok-devel: 
+       $(RM) doc/webserver/developer-manual/*.html
+       $(RM) -r doc/source/developer-manual
+       mkdir -p doc/text doc/source/developer-manual
+       cd doc/source/developer-manual && $(DB) ../developer-manual.sgml && cd .. && cp developer-manual/*.html ../webserver/developer-manual/
+       cd doc/source && $(DB) -V nochunks developer-manual.sgml > tmp.html && $(WDUMP) tmp.html > ../text/developer-manual.txt && $(RM) -r tmp.html developer-manual
+
+# user manual
+dok-user: 
+       $(RM) doc/webserver/user-manual/*.html
+       $(RM) -r doc/source/user-manual/
+       mkdir -p doc/text doc/source/user-manual
+       cd doc/source/user-manual && $(DB) -iuser-man ../user-manual.sgml && cd .. && cp user-manual/*.html ../webserver/user-manual/
+       cd doc/source && $(DB) -iuser-man -V nochunks user-manual.sgml > tmp.html && $(WDUMP) tmp.html > ../text/user-manual.txt && $(RM) -r tmp.html user-manual
+
+# faq
+dok-faq: 
+       $(RM) doc/webserver/faq/*.html
+       $(RM) -r doc/source/faq
+       mkdir -p doc/text doc/source/faq
+       cd doc/source/faq && $(DB) ../faq.sgml && cd .. && cp faq/*.html ../webserver/faq/
+       cd doc/source && $(DB) -V nochunks faq.sgml > tmp.html && $(WDUMP) tmp.html > ../text/faq.txt && $(RM) -r tmp.html faq
+
+# man page, one variation. Try to use the next target, just 'make man'. 
+dok-man: 
+       $(RM) doc/man/* doc/webserver/man-page/*.html
+ifneq ($(MAN2HTML),false)
+       $(ECHO) "<html><head><title>Privoxy Man page</title><link rel=\"stylesheet\" type=\"text/css\" href=\"../p_web.css\"></head><body><H2>NAME</H2>" > doc/webserver/man-page/privoxy-man-page.html
+       man ./privoxy.1 | $(MAN2HTML) -bare >> doc/webserver/man-page/privoxy-man-page.html
+       $(ECHO) "</body></html>" >> doc/webserver/man-page/privoxy-man-page.html
+else
+       $(MAKE) groff2html
+endif
+
+# Build man page from sgml. This requires the SGMLSpm perl module.
+# See CPAN, or your favorite perl repository. This is the preferred 
+# target for man page generation!
+man: dok-release
+       mkdir -p doc/source/temp && cd doc/source/temp && $(RM) * ;\
+       nsgmls ../privoxy-man-page.sgml  | sgmlspl ../../../utils/docbook2man/docbook2man-spec.pl &&\
+       perl -pi.bak -e 's/ <URL:.*>//; s/\[ /\[/g' privoxy.1 ;\
+       $(DB) ../privoxy-man-page.sgml && $(MV) -f privoxy.1 ../../../privoxy.1
+
+# For those with man2html ala RH7s.
+man2html:
+       mkdir -p doc/webserver/man-page
+ifneq ($(MAN2HTML),false)
+       $(MAN2HTML) privoxy.1 |grep -v "^Content-type" > tmp.html
+       $(PERL) -pi.bak -e 's/<A .*Contents<\/A>//; s/<A .*man2html<\/A>/man2html/' tmp.html
+       $(PERL) -pi.bak -e 's/(<\/HEAD>)/<LINK REL=\"STYLESHEET\" TYPE=\"text\/css\" HREF=\"..\/p_doc.css\"><\/HEAD>/' tmp.html
+# Twice because my version of man2html is pulling in commas and periods in URLs.
+       $(PERL) -pi.bak -e 's/(<A.*),(">)/$$1$$2/g' tmp.html
+       $(PERL) -pi.bak -e 's,\.">,">,g' tmp.html
+# Get rid of spurious \a from conversion. (How to do this with perl?)
+       $(SED) -e 's/\a//g' tmp.html > doc/webserver/man-page/privoxy-man-page.html && $(RM) tmp.*
+else
+       $(MAKE) groff2html
+endif
+
+
+# Otherwise we get plain groff conversion.
+groff2html:
+       $(G2H_CMD) ./privoxy.1 | $(SED) -e 's@</head>@<link REL="STYLESHEET" TYPE="text/css" HREF="../p_doc.css"></head>@' > doc/webserver/man-page/privoxy-man-page.html
+
+
+# readme page and INSTALL file
+dok-readme: dok-release
+       cd doc/source && $(DB)-notoc -V nochunks readme.sgml > tmp.html &&\
+       $(WDUMP) tmp.html > ../../README ;\
+       $(DB)-notoc -V nochunks install.sgml > tmp.html &&\
+       $(WDUMP) tmp.html > ../../INSTALL ;\
+       $(RM) tmp.*
+
+# index.sgml is used to create both the Home Page, and a local index
+# for documentation, etc.
+#
+# index.html for webserver:
+dok-webserver: 
+       cd doc/source/webserver && $(DB)-notoc -ip-homepage -V nochunks index.sgml > ../../webserver/index.html
+       $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\
+     s/<\/HEAD/\n<meta name=\"description\" content=\"Privoxy helps consumers reduce unwanted junk email and protect their privacy from direct marketing companies.\"><\/HEAD/;\
+       s/<\/HEAD/\n<meta name="MSSmartTagsPreventParsing" content="TRUE"><\/HEAD/;\
+       s/\.\d\. //;\
+       s/__copy/&copy;/'\
+     doc/webserver/index.html && $(RM) doc/webserver/*.bak
+
+# privoxy-index.html for local documentation:
+dok-index: 
+       cd doc/source/webserver && $(DB)-notoc -ip-index -V nochunks index.sgml > ../../webserver/privoxy-index.html
+       $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\
+     s/<\/HEAD/\n<meta name=\"description\" content=\"Privoxy helps consumers reduce unwanted junk email and protect their privacy from direct marketing companies.\"><\/HEAD/;\
+       s/<\/HEAD/\n<meta name="MSSmartTagsPreventParsing" content="TRUE"><\/HEAD/;\
+       s/\.\d\. //;\
+       s/__copy/&copy;/' \
+     doc/webserver/privoxy-index.html && $(RM) doc/webserver/*.bak
+
+# Main documentation target.
+dok: dok-release dok-devel dok-user dok-faq dok-readme dok-webserver dok-authors dok-index
+       @$(ECHO) Documentation created.
+
+#
+# an alternative to the above dok. disabled man page creation for the moment
+#
+redhat-dok: dok-release dok-devel dok-user dok-faq redhat-readme dok-webserver dok-authors
+       @$(ECHO) Documentation created.
+
+## Make README
+redhat-readme: 
+       cd doc/source && $(DB)-notoc -V nochunks readme.sgml > tmp.html && $(WDUMP) \
+         tmp.html > ../../README && $(RM) -r tmp.html
+
+## Make AUTHORS file
+dok-authors: 
+       cd doc/source && $(DB) -V nochunks authors.sgml > tmp.html && $(WDUMP) \
+         tmp.html > ../../AUTHORS && $(RM) tmp.html
+
+# Set doc entities for VERSION and CODE_STATUS in sgml docs. Toggle content
+# exceptions accordingly. This needs to go before any doc building (doh).
+dok-release:
+       @$(ECHO) Setting doc version and status to $(VERSION), $(CODE_STATUS)
+       @$(PERL) -pi.bak -e 's/<!entity +p-version.*>/<!entity p-version "$(VERSION)">/;\
+     s/<!entity +p-status.*>/<!entity p-status "$(CODE_STATUS)">/' \
+     doc/source/*sgml doc/source/*/*sgml
+       $(RM) -r doc/source/*bak doc/source/*/*bak
+ifeq ($(CODE_STATUS),stable)
+       @$(ECHO) Setting docs to stable $(VERSION)
+       @$(PERL) -pi.bak -e 's/<!entity +% +p-stable.*>/<!entity % p-stable "INCLUDE">/;\
+     s/<!entity +% +p-not-stable.*>/<!entity % p-not-stable "IGNORE">/' \
+     doc/source/*sgml doc/source/*/*sgml
+       $(RM) -r doc/source/*bak doc/source/*/*bak
+else
+       @$(ECHO) Setting docs to not stable $(VERSION)
+       @$(PERL) -pi.bak -e 's/<!entity +% +p-stable.*>/<!entity % p-stable "IGNORE">/;\
+     s/<!entity +% +p-not-stable.*>/<!entity % p-not-stable "INCLUDE">/' \
+     doc/source/*sgml doc/source/*/*sgml
+       $(RM) -r doc/source/*bak doc/source/*/*bak
+endif
+
+# Generate single page html. Used only for creating pdf docs (ATM).
+# Currently using: See http://www.easysw.com/htmldoc/pdf-o-matic.php.
+# If using this generator, remember U-M has a couple of graphics in 
+# a parallel directory.
+#
+dok-shtml: dok-release 
+       mkdir -p doc/source/temp # this directory not in cvs
+       cd doc/source && $(DB) -iuser-man -V nochunks user-manual.sgml > temp/privoxy-user-manual.html
+       cd doc/source && $(DB) -V nochunks developer-manual.sgml > temp/privoxy-developer-manual.html
+       cd doc/source && $(DB) -V nochunks faq.sgml > temp/privoxy-faq.html
+# one could use html2ps and ps2pdf. well, that does not work. htmlps produces incorrect output.
+
+# Make pdf docs from single page html. Requires htmldoc, see
+# (http://www.easysw.com/htmldoc/). Note: 1.8.20 has a TOC bug.
+# PDF docs are uploaded to webserver as zip archive.
+dok-pdf: dok-shtml
+       @$(ECHO) -n "starting htmldoc version: ";
+       if htmldoc --version ; then : ; \
+          else $(ECHO) "WARNING: could not get htmldoc version" ; fi
+       cd utils/ldp_print && $(RM) *html *bak *jpg *tmp *pdf *zip
+       cp -f doc/source/temp/*html doc/webserver/images/*jpg utils/ldp_print
+       cd utils/ldp_print ;\
+       $(PERL) -pi.bak -e 's/\.\.\/images\///; s/(<\/?)SUB/$$1small/i;\
+                           s/\.\.\/user-manual\/index\.html/privoxy-user-manual.pdf/;\
+                                       s/\.\.\/developer-manual\/index\.html/privoxy-developer-manual.pdf/;\
+                                       s/\.\.\/faq\/index\.html/privoxy-faq.pdf/' *.html ;\
+       for i in developer-manual user-manual faq; do \
+               ./ldp_print privoxy-$$i.html ;\
+               $(ECHO) DONE: privoxy-$$i.pdf ;\
+       done ;\
+       $(MV) *.pdf  ../../doc/pdf ;\
+       $(RM) -r *html *bak *jpg *pdf *zip ../../doc/source/temp
+
+# Create release announcement in text and html, with short and long versions.
+# This is a standalone target, and must be invoked directly.
+# announce: dok-release
+#      mkdir -p $(DOC_TMP)
+#      cd $(DOC_TMP) && cp -f ../announce.sgml . && $(DB) -iannounce-big announce.sgml &&\
+#      mv -f index.html announce.html && $(WDUMP) announce.html > announce.txt
+#      cd $(DOC_TMP) && $(DB) announce.sgml &&\
+#      mv -f index.html announce-mini.html && $(WDUMP) announce-mini.html > announce-mini.txt &&\
+#      mv -f *html *txt ../../.. 
+#      rm -fr $(DOC_TMP)
+
+# The main Privoxy config file, generated from sgml sources. 
+# NOTE: This will require some hand editing. The new file is outputted 
+# as config.new so that problem sections can be compared to previous
+# version. This is hardcored to w3m for html/text conversion. Also, 
+# requires the shell util 'fmt'.
+config-file: dok-release
+       cd doc/source && $(DB)-notoc -iconfig-file -V nochunks config.sgml > __tmp.html &&\
+       w3m -dump __tmp.html |fmt -w 70 > ../../config.new && $(RM) -r __tmp.*
+       $(PERL) -pi.bak -e 's/^1\. \@\@TITLE\@\@/     /i;\
+                     /^\d\.\d\.\s+/ && tr/[a-z]/[A-Z]/;\
+                     $$header_len=0 unless $$hit_header;\
+                     if ($$hit_header) {\
+                        print "#  ";\
+                        for ($$i=1; $$i < $$header_len; $$i++) {print "=";}\
+                        print "\n";\
+                     };\
+                     $$hit_header=0;\
+                     $$hit_header=1 if m/^(\d\.)(\d\.)(\d\.)?\s/ && s/^(\d\.)//;\
+                     $$header_len = length($$_);\
+                                s/^/#  /;  /^#  #{12,}/ && s/^#  #/####/;\
+                     s/^.*$$// if $$hit_option;\
+                     $$hit_option=0;\
+                     s/^\n//;  s/^#\s*-{20,}//; s/ *$$//;\
+                     $$hit_option=1 if s/^#\s+@@//;'   config.new
+       $(RM) *.bak
+       @$(ECHO)  "****************************************************"
+       @$(ECHO)  "The output file is config.new."
+       @$(ECHO)  "Now -- you need to hand edit the results!!!"
+       @$(ECHO)  "In particular, check the Debug levels, the"
+       @$(ECHO)  "permit-access, forward & socks examples and the"
+       @$(ECHO)  "various user-manual examples, which all"
+       @$(ECHO)  "probably got hammered."
+       @$(ECHO)  "****************************************************"
+
+# config file, alternate verison using lynx (perl stuff unfinished). Lynx
+# does not do so good a job.
+config-file-alt: 
+       cd doc/source && $(ECHO) -e ".h2 JUSTIFY\\nJUSTIFY:FALSE" > __tmp.lynx_cfg &&\
+       $(DB)-notoc -iconfig-file -V nochunks config.sgml > __tmp.html &&\
+       lynx -cfg=__tmp.lynx_cfg -width=78 -dump __tmp.html > ../../config.new && $(RM) -r __tmp.*
+       $(PERL) -pi -e 's/^(   )//;\
+                       s/:$\/:\n/' config.new
 
 #############################################################################
 #
 
 #############################################################################
 #
@@ -781,82 +930,89 @@ web-actions: tidy
        @ssh ijbswa.sourceforge.net 'find /home/groups/i/ij/ijbswa/htdocs/actions/ -type f | xargs chmod 664 2>/dev/null'
        @ssh ijbswa.sourceforge.net 'chmod 666 /home/groups/i/ij/ijbswa/htdocs/actions/results/actions-feedback.txt 2>/dev/null'
 
        @ssh ijbswa.sourceforge.net 'find /home/groups/i/ij/ijbswa/htdocs/actions/ -type f | xargs chmod 664 2>/dev/null'
        @ssh ijbswa.sourceforge.net 'chmod 666 /home/groups/i/ij/ijbswa/htdocs/actions/results/actions-feedback.txt 2>/dev/null'
 
+## 
+dok-put:
+       tar --exclude ".cvsignore" --exclude "CVS" --exclude "source" --exclude ".htaccess" \
+            --exclude "obsolete" --exclude "actions" --exclude "*.zip" --exclude "robots.txt"\
+               doc/* INSTALL LICENSE AUTHORS README \
+               -czf $(DOC_FILE) ;\
+               $(ECHO) "Uploading doc package ..." ;\
+               scp $(DOC_FILE) ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/docs/
+               @ssh ijbswa.sourceforge.net 'chmod 775 /home/groups/i/ij/ijbswa/htdocs/docs/*gz 2>/dev/null; true'
+               $(RM) $(DOC_FILE)
+
+dok-get:
+       cd /tmp ;\
+       $(WGET) http://privoxy.org/docs/$(DOC_FILE) ;\
+       $(TAR) -zxvf $(DOC_FILE)
+
+
 #############################################################################
 # Source file dependencies
 #############################################################################
 
 #############################################################################
 # Source file dependencies
 #############################################################################
 
-$(DIR_PRIVOXY_OBJ)/actions.@OBJEXT@:   $(DIR_PRIVOXY_SRC)/actions.c   $(DIR_PRIVOXY_SRC)/actions.h   $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/jcc.h       $(DIR_PRIVOXY_SRC)/list.h    $(DIR_PRIVOXY_SRC)/loaders.h   $(DIR_PRIVOXY_SRC)/miscutil.h  $(DIR_PRIVOXY_SRC)/actionlist.h
-$(DIR_PRIVOXY_OBJ)/cgi.@OBJEXT@:       $(DIR_PRIVOXY_SRC)/cgi.c       $(DIR_PRIVOXY_SRC)/cgi.h       $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/cgiedit.h $(DIR_PRIVOXY_SRC)/cgisimple.h $(DIR_PRIVOXY_SRC)/list.h    $(DIR_PRIVOXY_SRC)/pcrs.h      $(DIR_PRIVOXY_SRC)/encode.h    $(DIR_PRIVOXY_SRC)/ssplit.h     $(DIR_PRIVOXY_SRC)/jcc.h      $(DIR_PRIVOXY_SRC)/filters.h  $(DIR_PRIVOXY_SRC)/actions.h $(DIR_PRIVOXY_SRC)/errlog.h    $(DIR_PRIVOXY_SRC)/miscutil.h
-$(DIR_PRIVOXY_OBJ)/cgiedit.@OBJEXT@:   $(DIR_PRIVOXY_SRC)/cgiedit.c   $(DIR_PRIVOXY_SRC)/cgiedit.h   $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/cgi.h     $(DIR_PRIVOXY_SRC)/list.h      $(DIR_PRIVOXY_SRC)/pcrs.h    $(DIR_PRIVOXY_SRC)/encode.h    $(DIR_PRIVOXY_SRC)/ssplit.h    $(DIR_PRIVOXY_SRC)/jcc.h        $(DIR_PRIVOXY_SRC)/filters.h  $(DIR_PRIVOXY_SRC)/actions.h  $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/miscutil.h
-$(DIR_PRIVOXY_OBJ)/cgisimple.@OBJEXT@: $(DIR_PRIVOXY_SRC)/cgisimple.c $(DIR_PRIVOXY_SRC)/cgisimple.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/cgi.h     $(DIR_PRIVOXY_SRC)/list.h      $(DIR_PRIVOXY_SRC)/pcrs.h    $(DIR_PRIVOXY_SRC)/encode.h    $(DIR_PRIVOXY_SRC)/ssplit.h    $(DIR_PRIVOXY_SRC)/jcc.h        $(DIR_PRIVOXY_SRC)/filters.h  $(DIR_PRIVOXY_SRC)/actions.h  $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/miscutil.h
-$(DIR_PRIVOXY_OBJ)/deanimate.@OBJEXT@: $(DIR_PRIVOXY_SRC)/deanimate.c $(DIR_PRIVOXY_SRC)/deanimate.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS)
-$(DIR_PRIVOXY_OBJ)/encode.@OBJEXT@:    $(DIR_PRIVOXY_SRC)/encode.c    $(DIR_PRIVOXY_SRC)/encode.h    $(DIR_PRIVOXY_SRC)/config.h
-$(DIR_PRIVOXY_OBJ)/errlog.@OBJEXT@:    $(DIR_PRIVOXY_SRC)/errlog.c    $(DIR_PRIVOXY_SRC)/errlog.h    $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.h
-$(DIR_PRIVOXY_OBJ)/filters.@OBJEXT@:   $(DIR_PRIVOXY_SRC)/filters.c   $(DIR_PRIVOXY_SRC)/filters.h   $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/encode.h    $(DIR_PRIVOXY_SRC)/gateway.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/jcc.h       $(DIR_PRIVOXY_SRC)/loadcfg.h    $(DIR_PRIVOXY_SRC)/parsers.h  $(DIR_PRIVOXY_SRC)/ssplit.h   $(DIR_PRIVOXY_SRC)/cgi.h     $(DIR_PRIVOXY_SRC)/deanimate.h @WIN_ONLY@$(DIR_PRIVOXY_SRC)/win32.h 
-$(DIR_PRIVOXY_OBJ)/gateway.@OBJEXT@:   $(DIR_PRIVOXY_SRC)/gateway.c   $(DIR_PRIVOXY_SRC)/gateway.h   $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/jcc.h     $(DIR_PRIVOXY_SRC)/loadcfg.h
-$(DIR_PRIVOXY_OBJ)/jbsockets.@OBJEXT@: $(DIR_PRIVOXY_SRC)/jbsockets.c $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/filters.h
-$(DIR_PRIVOXY_OBJ)/jcc.@OBJEXT@:       $(DIR_PRIVOXY_SRC)/jcc.c       $(DIR_PRIVOXY_SRC)/jcc.h       $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/filters.h   $(DIR_PRIVOXY_SRC)/gateway.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/killpopup.h $(DIR_PRIVOXY_SRC)/loadcfg.h    $(DIR_PRIVOXY_SRC)/loaders.h  $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/parsers.h @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.h    $(DIR_PRIVOXY_SRC)/win32.h $(DIR_PRIVOXY_SRC)/cgi.h
-$(DIR_PRIVOXY_OBJ)/killpopup.@OBJEXT@: $(DIR_PRIVOXY_SRC)/killpopup.c $(DIR_PRIVOXY_SRC)/killpopup.h $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/jcc.h     $(DIR_PRIVOXY_SRC)/loadcfg.h
-$(DIR_PRIVOXY_OBJ)/list.@OBJEXT@:      $(DIR_PRIVOXY_SRC)/list.c      $(DIR_PRIVOXY_SRC)/list.h      $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/list.h    $(DIR_PRIVOXY_SRC)/miscutil.h
-$(DIR_PRIVOXY_OBJ)/loadcfg.@OBJEXT@:   $(DIR_PRIVOXY_SRC)/loadcfg.c   $(DIR_PRIVOXY_SRC)/loadcfg.h   $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/filters.h   $(DIR_PRIVOXY_SRC)/gateway.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/jcc.h       $(DIR_PRIVOXY_SRC)/killpopup.h  $(DIR_PRIVOXY_SRC)/loaders.h  $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/parsers.h @WIN_ONLY@$(DIR_PRIVOXY_SRC)/w32log.h    $(DIR_PRIVOXY_SRC)/win32.h
-$(DIR_PRIVOXY_OBJ)/loaders.@OBJEXT@:   $(DIR_PRIVOXY_SRC)/loaders.c   $(DIR_PRIVOXY_SRC)/loaders.h   $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/encode.h    $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/gateway.h   $(DIR_PRIVOXY_SRC)/jcc.h       $(DIR_PRIVOXY_SRC)/loadcfg.h    $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/parsers.h  $(DIR_PRIVOXY_SRC)/ssplit.h
-$(DIR_PRIVOXY_OBJ)/miscutil.@OBJEXT@:  $(DIR_PRIVOXY_SRC)/miscutil.c  $(DIR_PRIVOXY_SRC)/miscutil.h  $(DIR_PRIVOXY_SRC)/config.h
-$(DIR_PRIVOXY_OBJ)/parsers.@OBJEXT@:   $(DIR_PRIVOXY_SRC)/parsers.c   $(DIR_PRIVOXY_SRC)/parsers.h   $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/encode.h    $(DIR_PRIVOXY_SRC)/filters.h $(DIR_PRIVOXY_SRC)/jbsockets.h $(DIR_PRIVOXY_SRC)/jcc.h       $(DIR_PRIVOXY_SRC)/loadcfg.h    $(DIR_PRIVOXY_SRC)/loaders.h  $(DIR_PRIVOXY_SRC)/miscutil.h $(DIR_PRIVOXY_SRC)/ssplit.h
-$(DIR_PRIVOXY_OBJ)/ssplit.@OBJEXT@:    $(DIR_PRIVOXY_SRC)/ssplit.c    $(DIR_PRIVOXY_SRC)/ssplit.h    $(DIR_PRIVOXY_SRC)/config.h                   $(DIR_PRIVOXY_SRC)/miscutil.h
-$(DIR_PRIVOXY_OBJ)/urlmatch.@OBJEXT@:  $(DIR_PRIVOXY_SRC)/urlmatch.c  $(DIR_PRIVOXY_SRC)/urlmatch.h  $(DIR_PRIVOXY_SRC)/config.h $(PROJECT_H_DEPS) $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/miscutil.h  $(DIR_PRIVOXY_SRC)/ssplit.h
+actions.@OBJEXT@:   actions.c   actions.h   config.h $(PROJECT_H_DEPS) errlog.h jcc.h list.h loaders.h miscutil.h actionlist.h ssplit.h
+cgi.@OBJEXT@:       cgi.c       cgi.h       config.h $(PROJECT_H_DEPS) cgiedit.h cgisimple.h list.h pcrs.h encode.h ssplit.h jcc.h filters.h actions.h errlog.h miscutil.h
+cgiedit.@OBJEXT@:   cgiedit.c   cgiedit.h   config.h $(PROJECT_H_DEPS) cgi.h list.h pcrs.h encode.h ssplit.h jcc.h filters.h actions.h errlog.h miscutil.h
+cgisimple.@OBJEXT@: cgisimple.c cgisimple.h config.h $(PROJECT_H_DEPS) cgi.h list.h pcrs.h encode.h ssplit.h jcc.h filters.h actions.h errlog.h miscutil.h
+deanimate.@OBJEXT@: deanimate.c deanimate.h config.h $(PROJECT_H_DEPS)
+encode.@OBJEXT@:    encode.c    encode.h    config.h
+errlog.@OBJEXT@:    errlog.c    errlog.h    config.h $(PROJECT_H_DEPS) @WIN_ONLY@w32log.h
+filters.@OBJEXT@:   filters.c   filters.h   config.h $(PROJECT_H_DEPS) errlog.h encode.h gateway.h jbsockets.h jcc.h loadcfg.h parsers.h ssplit.h cgi.h deanimate.h @WIN_ONLY@win32.h 
+gateway.@OBJEXT@:   gateway.c   gateway.h   config.h $(PROJECT_H_DEPS) errlog.h jbsockets.h jcc.h loadcfg.h
+jbsockets.@OBJEXT@: jbsockets.c jbsockets.h config.h $(PROJECT_H_DEPS) filters.h
+jcc.@OBJEXT@:       jcc.c       jcc.h       config.h $(PROJECT_H_DEPS) errlog.h filters.h gateway.h jbsockets.h killpopup.h loadcfg.h loaders.h miscutil.h parsers.h @WIN_ONLY@w32log.h win32.h cgi.h
+killpopup.@OBJEXT@: killpopup.c killpopup.h config.h $(PROJECT_H_DEPS) jcc.h loadcfg.h
+list.@OBJEXT@:      list.c      list.h      config.h $(PROJECT_H_DEPS) list.h miscutil.h
+loadcfg.@OBJEXT@:   loadcfg.c   loadcfg.h   config.h $(PROJECT_H_DEPS) errlog.h filters.h gateway.h jbsockets.h jcc.h killpopup.h loaders.h miscutil.h parsers.h @WIN_ONLY@w32log.h win32.h
+loaders.@OBJEXT@:   loaders.c   loaders.h   config.h $(PROJECT_H_DEPS) errlog.h encode.h filters.h gateway.h jcc.h loadcfg.h miscutil.h parsers.h ssplit.h
+miscutil.@OBJEXT@:  miscutil.c  miscutil.h  config.h
+parsers.@OBJEXT@:   parsers.c   parsers.h   config.h $(PROJECT_H_DEPS) errlog.h encode.h filters.h jbsockets.h jcc.h loadcfg.h loaders.h miscutil.h ssplit.h
+ssplit.@OBJEXT@:    ssplit.c    ssplit.h    config.h miscutil.h
+urlmatch.@OBJEXT@:  urlmatch.c  urlmatch.h  config.h $(PROJECT_H_DEPS) errlog.h miscutil.h ssplit.h
+
+# GNU regex
+gnu_regex.@OBJEXT@: gnu_regex.c gnu_regex.h config.h
 
 # PCRS
 
 # PCRS
-$(DIR_PRIVOXY_OBJ)/pcrs.@OBJEXT@: $(DIR_PRIVOXY_SRC)/pcrs.c $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC)/pcrs.h $(DIR_PRIVOXY_SRC)/config.h
+pcrs.@OBJEXT@: pcrs.c pcrs.h config.h pcre/pcre.h 
 
 # PCRE
 
 # PCRE
-$(DIR_PRIVOXY_OBJ)/get.@OBJEXT@:        $(DIR_PRIVOXY_SRC_PCRE)/get.c        $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h
-$(DIR_PRIVOXY_OBJ)/maketables.@OBJEXT@: $(DIR_PRIVOXY_SRC_PCRE)/maketables.c $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h
-$(DIR_PRIVOXY_OBJ)/pcre.@OBJEXT@:       $(DIR_PRIVOXY_SRC_PCRE)/pcre.c       $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC_PCRE)/chartables.c 
-$(DIR_PRIVOXY_OBJ)/pcreposix.@OBJEXT@:  $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.c  $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.h
-$(DIR_PRIVOXY_OBJ)/study.@OBJEXT@:      $(DIR_PRIVOXY_SRC_PCRE)/study.c      $(DIR_PRIVOXY_SRC_PCRE)/config.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/pcre.h
+pcre/get.@OBJEXT@:        pcre/get.c        pcre/config.h pcre/internal.h pcre/pcre.h
+pcre/maketables.@OBJEXT@: pcre/maketables.c pcre/config.h pcre/internal.h pcre/pcre.h
+pcre/pcre.@OBJEXT@:       pcre/pcre.c       pcre/config.h pcre/internal.h pcre/pcre.h pcre/chartables.c 
+pcre/pcreposix.@OBJEXT@:  pcre/pcreposix.c  pcre/config.h pcre/internal.h pcre/pcre.h pcre/pcreposix.h
+pcre/study.@OBJEXT@:      pcre/study.c      pcre/config.h pcre/internal.h pcre/pcre.h
 
 # An auxiliary program makes the PCRE default character table source
 
 
 # An auxiliary program makes the PCRE default character table source
 
-$(DIR_PRIVOXY_SRC_PCRE)/chartables.c:   $(DIR_PRIVOXY_OBJ)/dftables@EXEEXT@
-               $(DIR_PRIVOXY_SRC_PCRE)/dftables@EXEEXT@ >$(DIR_PRIVOXY_SRC_PCRE)/chartables.c
+pcre/chartables.c:   pcre/dftables@EXEEXT@
+               pcre/dftables@EXEEXT@ >pcre/chartables.c
 
 
-$(DIR_PRIVOXY_OBJ)/dftables@EXEEXT@:       $(DIR_PRIVOXY_SRC_PCRE)/dftables.c $(DIR_PRIVOXY_SRC_PCRE)/maketables.c $(DIR_PRIVOXY_SRC_PCRE)/pcre.h $(DIR_PRIVOXY_SRC_PCRE)/internal.h $(DIR_PRIVOXY_SRC_PCRE)/config.h
-               $(CC) -o $(DIR_PRIVOXY_SRC_PCRE)/dftables@EXEEXT@ $(CFLAGS) $(DIR_PRIVOXY_SRC_PCRE)/dftables.c
+pcre/dftables@EXEEXT@:       pcre/dftables.c pcre/maketables.c pcre/pcre.h pcre/internal.h pcre/config.h
+               $(CC) -o pcre/dftables@EXEEXT@ $(CFLAGS) pcre/dftables.c
 
 # Win32
 
 # Win32
-$(DIR_PRIVOXY_OBJ)/w32log.@OBJEXT@:      $(DIR_PRIVOXY_SRC)/config.h  $(DIR_PRIVOXY_SRC)/errlog.h  $(DIR_PRIVOXY_SRC)/jcc.h         $(DIR_PRIVOXY_SRC)/loadcfg.h    $(DIR_PRIVOXY_SRC)/miscutil.h  $(DIR_PRIVOXY_SRC)/pcrs.h    $(DIR_PRIVOXY_SRC)/project.h  $(DIR_PRIVOXY_SRC)/w32log.c  $(DIR_PRIVOXY_SRC)/w32log.h     $(DIR_PRIVOXY_SRC)/w32taskbar.h      $(DIR_PRIVOXY_SRC)/win32.h  $(DIR_PRIVOXY_SRC_PCRE)/pcre.h  $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.h
-$(DIR_PRIVOXY_OBJ)/win32.@OBJEXT@:       $(DIR_PRIVOXY_SRC)/config.h  $(DIR_PRIVOXY_SRC)/jcc.h     $(DIR_PRIVOXY_SRC)/loadcfg.h     $(DIR_PRIVOXY_SRC)/pcrs.h       $(DIR_PRIVOXY_SRC)/project.h   $(DIR_PRIVOXY_SRC)/w32log.h  $(DIR_PRIVOXY_SRC)/win32.c    $(DIR_PRIVOXY_SRC)/win32.h   $(DIR_PRIVOXY_SRC_PCRE)/pcre.h  $(DIR_PRIVOXY_SRC_PCRE)/pcreposix.h
-$(DIR_PRIVOXY_OBJ)/w32taskbar.@OBJEXT@:  $(DIR_PRIVOXY_SRC)/config.h  $(DIR_PRIVOXY_SRC)/w32log.h  $(DIR_PRIVOXY_SRC)/w32taskbar.c  $(DIR_PRIVOXY_SRC)/w32taskbar.h
-
-$(DIR_PRIVOXY_OBJ)/w32res.res: $(DIR_PRIVOXY_SRC)/w32res.rc \
-                $(DIR_PRIVOXY_SRC)/w32res.h \
-                $(DIR_PRIVOXY_SRC)/config.h \
-                $(DIR_PRIVOXY_SRC)/icons/ico00001.ico \
-                $(DIR_PRIVOXY_SRC)/icons/ico00002.ico \
-                $(DIR_PRIVOXY_SRC)/icons/ico00003.ico \
-                $(DIR_PRIVOXY_SRC)/icons/ico00004.ico \
-                $(DIR_PRIVOXY_SRC)/icons/ico00005.ico \
-                $(DIR_PRIVOXY_SRC)/icons/ico00006.ico \
-                $(DIR_PRIVOXY_SRC)/icons/ico00007.ico \
-                $(DIR_PRIVOXY_SRC)/icons/ico00008.ico \
-                $(DIR_PRIVOXY_SRC)/icons/idle.ico \
-                $(DIR_PRIVOXY_SRC)/icons/privoxy.ico
+w32log.@OBJEXT@: w32log.c errlog.h config.h jcc.h loadcfg.h miscutil.h pcre/pcre.h pcre/pcreposix.h pcrs.h project.h w32log.h w32taskbar.h win32.h
+w32taskbar.@OBJEXT@: w32taskbar.c config.h w32log.h w32taskbar.h
+win32.@OBJEXT@: win32.c config.h jcc.h loadcfg.h pcre/pcre.h pcre/pcreposix.h pcrs.h project.h w32log.h win32.h
+
+w32.res: w32.rc w32res.h icons/ico00001.ico icons/ico00002.ico icons/ico00003.ico icons/ico00004.ico icons/ico00005.ico icons/ico00006.ico icons/ico00007.ico icons/ico00008.ico icons/idle.ico icons/privoxy.ico config.h
        windres -D__MINGW32__=0.2 -O coff -i $< -o $@
 
 # AmigaOS
        windres -D__MINGW32__=0.2 -O coff -i $< -o $@
 
 # AmigaOS
-@AMIGAOS_ONLY@OBJS += $(DIR_PRIVOXY_OBJ)/amiga.@OBJEXT@
+@AMIGAOS_ONLY@OBJS += amiga.o
 @AMIGAOS_ONLY@CFLAGS += -D__AMIGAVERSION__=\"$(VERSION_MAJOR).$(VERSION_MINOR)$(VERSION_POINT)\" -D__AMIGADATE__=\"`date +%d.%m.%Y`\" -W -m68020 -noixemul -fbaserel -msmall-code
 @AMIGAOS_ONLY@LDFLAGS += -m68020 -noixemul -fbaserel
 @AMIGAOS_ONLY@LIBS = -lm /gg/lib/libb/libm020/libnix/swapstack.o
 @AMIGAOS_ONLY@CFLAGS += -D__AMIGAVERSION__=\"$(VERSION_MAJOR).$(VERSION_MINOR)$(VERSION_POINT)\" -D__AMIGADATE__=\"`date +%d.%m.%Y`\" -W -m68020 -noixemul -fbaserel -msmall-code
 @AMIGAOS_ONLY@LDFLAGS += -m68020 -noixemul -fbaserel
 @AMIGAOS_ONLY@LIBS = -lm /gg/lib/libb/libm020/libnix/swapstack.o
-$(DIR_PRIVOXY_OBJ)/amiga.@OBJEXT@: $(DIR_PRIVOXY_SRC)/amiga.c $(DIR_PRIVOXY_SRC)/amiga.h $(DIR_PRIVOXY_SRC)/config.h
+@AMIGAOS_ONLY@amiga.o: amiga.c amiga.h config.h
 
 
 $(PROGRAM): $(OBJS) $(W32_FILES)
        $(LD) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS)
 
 clean:
 
 
 $(PROGRAM): $(OBJS) $(W32_FILES)
        $(LD) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS)
 
 clean:
-       $(RM) a.out $(OBJS) $(W32_FILES) $(W32_INIS) $(PROGRAM) \
-       default.action `find . -name TAGS -o -name tags`
+       $(RM) a.out $(OBJS) $(W32_FILES) $(W32_INIS) $(PROGRAM) default.action `find . -name TAGS -o -name tags` 
 
 tidy:
        $(RM) `find . -name "*~"`
 
 tidy:
        $(RM) `find . -name "*~"`
@@ -864,9 +1020,9 @@ tidy:
        $(RM) `find . -name ".\#*"`
 
 clobber: tidy
        $(RM) `find . -name ".\#*"`
 
 clobber: tidy
-       $(RM) GNUmakefile configure src/config.h.in src/config.h config.cache config.status config.log logfile \
-              privoxy.log core *.tar.gz *.tar privoxy-cl.spec $(DOC_DIR)/ldp.dsl \
-                   $(DOC_DIR)/GNUmakefile
+       $(RM) GNUmakefile configure config.h.in config.h config.cache config.status config.log logfile \
+              privoxy.log core *.tar.gz *.tar privoxy-cl.spec doc/source/ldp.dsl
+       $(RM) -r autom4te.cache
 
 #
 # FIXME: What is all this? 
 
 #
 # FIXME: What is all this? 
@@ -982,8 +1138,8 @@ install: CONF_DEST LOG_DEST PID_DEST check_doc GROUP_T
        $(MV) config.updated config 
 
        @# Install the config support files. Test for root install, and abort 
        $(MV) config.updated config 
 
        @# Install the config support files. Test for root install, and abort 
-       @# if there is no privoxy user, and no other user or group was enabled
-       @# during configure.
+       @# if there is no privoxy user, and no other user was enabled during 
+       @# configure. Later, install init script if appropriate.
        @$(ECHO) Installing templates to $(CONF_DEST)/templates
        @for i in `find templates -type f`; do \
                $(INSTALL) $(INSTALL_T) $$i $(CONF_DEST)/templates ;\
        @$(ECHO) Installing templates to $(CONF_DEST)/templates
        @for i in `find templates -type f`; do \
                $(INSTALL) $(INSTALL_T) $$i $(CONF_DEST)/templates ;\
@@ -1189,172 +1345,117 @@ coffee:
 ## end:
 
 # $Log: GNUmakefile.in,v $
 ## end:
 
 # $Log: GNUmakefile.in,v $
-# Revision 1.138  2003/10/17 17:51:58  oes
-# Added a one-time warning for compiling CVS HEAD
-#
-# Revision 1.137  2003/01/18 19:04:58  david__schmidt
-# Build support for the Java Activity Console - build with 'make java-activity-console', run with 'java -jar ActivityConsole.jar'
-#
-# Revision 1.136  2002/12/28 04:10:21  david__schmidt
-# Initial drop of dashboard instrumentation - enabled with
-# --enable-activity-console
-#
-# Revision 1.135  2002/11/04 05:11:05  hal9
-# Just a clean up of overly verbose output from install/uninstall.
-#
-# Revision 1.134  2002/10/28 06:01:39  hal9
-# Make uninstall: cp -v problems on SF Solaris.
-#
-# Revision 1.133  2002/10/28 02:12:22  hal9
-# Make install/uninstall:
-# - More cleanup of variables
-# - Make the minimum requirement for root install, an available non-root GROUP.
-#   If a privoxy user exists (and no other USER is specified), then the files
-#   that require write access are installed as group owned by privoxy. FIXME:
-#   There has to be a cleaner way to do this.
-# - Uninstall now saves configuration files to /tmp.
-#
-# Revision 1.132  2002/10/24 22:24:58  hal9
-# Make install: Minor clean up for variable handling.
-#
-# Revision 1.131  2002/10/23 07:00:21  agotneja
-# added a chmod on mkinstalldirs just before using it, otherwise it
-# will fail when running make for the first time.
-#
-# Revision 1.130  2002/10/22 05:49:14  hal9
-# Make install:
-# - /bin/sh on Solaris does not handle: ! test.
-# - Remove some unused doc variables.
-# - Make configs group writable.
-#
-# Revision 1.129  2002/10/20 07:15:12  hal9
-# Getting near the end (I hope) of install target updates:
-# - Rewrite RH init script to reflect configured values.
-# - Test for USER=root as well as UID=0
-# - Test for invalid group (probably needs more work).
-# - Add /usr to /usr/local test for when to install init scripts, etc.
-# - More testing on previous changes.
-#
-# Revision 1.128  2002/10/18 05:36:32  hal9
-# More install target fixes:
-# - Quick fix of log ownership on root install (lightly tested). If this goes
-#   true to form, then the fix will break something else :(
-# - Fix what looks like was invalid user on Slack if root install and
-#   we use an existing privoxy user. No way to test this.
-# See FIXMEs.
-#
-# Revision 1.127  2002/10/18 00:58:07  hal9
-# More install/uninstall/install-strip updates:
-# - Don't install gzipped man page (Solaris again).
-# - Don't overwrite existing config files, and install new versions as *.new.
-#   Fix permissions/ownership here too.
-# - Better testing before removing directories.
-# - Some better messages during install, ie 'Preserving configs', etc.
-# - Better handling of install-strip to fix previous problem of trying to strip
-#   init scripts.
-# - Crude test for valid USER in case is set on command line.
-# - Force immediate exit on some errors (eg invalid group).
-#
-# Revision 1.126  2002/10/16 05:38:00  hal9
-# More make install/uninstall updates:
-# -Make compatible with install-sh with does not support -b flag, and can only
-#  handle one file at a time (sigh).
-# -Manually save existing config files, if they exist.
-# -Fix install-strip so does not try to strip init scripts.
-#
-# Revision 1.125  2002/10/15 05:53:34  hal9
-# A few more cleanups:
-# -use mkinstalldirs consistently.
-# -Install init script and logrotate only is prefix=/usr/local (installed to
-#  system dir /etc instead of /usr/local...)
-# -Test for directory existence before removing to avoid misleading error
-#  messages.
-#
-# Revision 1.124  2002/10/13 19:58:09  hal9
-# Hopefully, this is final updates for install and uninstall targets.
-# - Fix typo in chown syntax
-# - chmod on mkinstalldirs to make it executable (is there a better way?).
-# - Cleanup comments, and revert most of previous output cleanup changes.
-# - Include all HTML docs, since there are cross links between these.
-# - Improved group handling (still some potential problems, see FIXME).
-# - Update PHONY targets.
-# - Uninstall was not removing CONF and LOG destinations in some situations.
-# - Various other minor cleanups.
-#
-# Revision 1.123  2002/10/12 06:05:41  hal9
-# WIP: This is mostly to fix various problems encountered on SF CF Solaris
-# servers for the install target only. This did not handle /[^C]*, test -e, not
-# quoting within tests (ie [ `id $(USER)` = `id` ] needs quoting) in some
-# situations, and does not support id -u (with the id in $PATH, but there is
-# another...). Also, cleaned up output. Needs testing. I am unable to test the
-# root install stuff either. It installs now at least (not tested further).
-# A few other nits.
-#
-# Revision 1.122  2002/10/11 06:03:08  hal9
-# Really install FAQ this time, and not u-m in two locations. Include images
-# for u-m.
-#
-# Revision 1.120  2002/10/10 20:39:27  dessent
-#
-#
-# Fixes for Win32 GUI build (added "$(DIR_PRIVOXY_SRC)/" to dependencies list)
-#
-# Revision 1.119  2002/09/23 03:42:41  hal9
-# This is higuita's make install/uninstall patch. Needs testing please!!!
-#
-# Revision 1.118  2002/09/11 08:22:37  oes
-# Fixed path (C_HDRS are in src/ now)
-#
-# Revision 1.117  2002/09/06 23:33:35  hal9
-# Fix clobber for config.h and config.h.in are in src now.
-#
-# Revision 1.116  2002/09/06 05:22:57  hal9
-# Adapt make webserver target to 3.0 for pdf uploading.
-#
-# Revision 1.115  2002/09/05 19:13:04  hal9
-# Migrate Karstens make snapshot stuff (not tested).
-#
-# Revision 1.114  2002/09/05 11:58:30  oes
-# Synced in some changes fromm the stable branch:
-#   From Revision 1.104.2.14  2002/08/10 11:19:37  oes:
-#    - Add dependency: pcrs.o deps on config.h
-#   Revision 1.104.2.9  2002/07/26 15:17:02  oes
-#    - Added generation of default.action from defaul.action.master
-#    - Deleted obsolete re_filterfile.txt generation
-#
-# Revision 1.113  2002/07/30 21:50:25  hal9
-# Add redhat-test target, and migrate the RPM_PACKAGEV stuff from 3.0 branch.
-#
-# Revision 1.112  2002/06/28 18:30:10  jongfoster
-# Fixing bugs compiling PCRE
-#
-# Revision 1.111  2002/06/05 00:26:21  hal9
-# Move all doc build stuff to doc/source/GNUmakefile, leaving a 'make dok'
-# target only in toplevel. Add DOC_STATUS variable so docs can be built without
-# touching sgml source.
-#
-# Revision 1.110  2002/06/04 14:51:48  jongfoster
-# Updating for new paths:
-# - Source files in src/
-# - Object files in obj/
-#
-# Revision 1.109  2002/05/28 09:16:15  oes
-# Added comment for -notoc kludge
-#
-# Revision 1.108  2002/05/28 03:56:08  hal9
-# make dok-index target for privoxy-index.html. Fix *bak dead soldiers in
-# doc/webserver.
-#
-# Revision 1.107  2002/05/27 23:26:33  mal0rd
-# Made doc-generation configuration automatic.
-# References to DB2HTML were removed, not used.
-# --with-docbook now only needed if in odd path.
-#
-# Revision 1.106  2002/05/26 04:55:11  mal0rd
-# Added debian-dist and debian-upload targets.  Also documented usage.
-#
-# Revision 1.105  2002/05/25 22:48:19  hal9
-# Add -notoc to README build (per oes's dsl magic).
+# Revision 1.104.2.28  2004/06/10 17:06:05  hal9
+# Fix bug #959617, by moving TMPDIR var to create-snapshot target, which is the
+# only place it is used.
+#
+# Revision 1.104.2.27  2004/02/07 16:11:10  oes
+# Make clobber remove the autom4te.cache dir.
+# Closes BR #889300
+#
+# Revision 1.104.2.26  2004/01/31 16:32:25  oes
+# Adding a check for an htmldoc variant from the debian diff
+#
+# Revision 1.104.2.25  2004/01/31 01:15:33  oes
+# Fixed a typo; updated copyright notice
+#
+# Revision 1.104.2.24  2003/12/03 10:30:02  oes
+# - Added new dependency: actions.c -> ssplit.h
+# - Excluded PDF docs from src tarball
+#
+# Revision 1.104.2.23  2003/04/20 17:28:52  hal9
+# Strip trailing spaces from config-file generation, bug #724596.
+#
+# Revision 1.104.2.22  2003/03/28 03:32:01  hal9
+# Minor changes for Privoxy home page:
+#  - Handle &copy; more sanely
+#  - include link to announce.txt
+# Also, disable 'make announce' target.
+#
+# Revision 1.104.2.21  2002/11/04 07:04:03  hal9
+# Catch up with main trunk install/uninstall. Quiet output, etc.
+#
+# Revision 1.104.2.20  2002/10/25 02:44:22  hal9
+# Port of make install, etc from main trunk. Needs testing! Add Slackware
+# support, and other related changes. Update related docs.
+#
+# Revision 1.104.2.19  2002/09/26 22:50:02  hal9
+# New user-manual examples in config-file are getting wrapped. Add warning.
+#
+# Revision 1.104.2.18  2002/08/23 12:22:40  oes
+# Added warning to broken install target
+#
+# Revision 1.104.2.17  2002/08/16 03:19:34  hal9
+# More (minor) cleanup of html before pdf processing to make some relative
+# links work as pdf -> pdf. Upload pdf as zip archive now.
+#
+# Revision 1.104.2.16  2002/08/14 16:43:27  hal9
+# Added pdf docs to make webserver target.
+#
+# Revision 1.104.2.15  2002/08/11 20:02:41  hal9
+# New targets for man page (make man) and pdf (make dok-pdf) targets.
+#
+# Revision 1.104.2.14  2002/08/10 11:19:37  oes
+# - Make -Ipcre (again) conditional on STATIC_PCRE
+# - $(RPMBUILD) -> $(RPM) for SuSE
+# - Add dependency: pcrs.o deps on config.h
+#
+# Revision 1.104.2.13  2002/08/07 15:13:54  hal9
+# Remove pdf2 target, and make it dok-shtml (single page html for pdf
+# conversion).
+#
+# Revision 1.104.2.12  2002/08/06 11:29:36  oes
+# Fixed detection/inclusion of pcre.h, which is in a pcre subdir on RH
+#
+# Revision 1.104.2.11  2002/07/30 19:38:11  hal9
+# Add redhat-test target for testing purposes only. Fix RPM_PACKAGEV to what
+# *I think* it was supposed to be (was breaking upload targets since it was
+# set to RPM_VERSION).
+#
+# Revision 1.104.2.10  2002/07/27 22:56:53  kick_
+# cleanups of the redhat-srpm target
+#
+# Revision 1.104.2.9  2002/07/26 15:17:02  oes
+# - Added generation of default.action from defaul.action.master
+# - Deleted obsolete re_filterfile.txt generation
+#
+# Revision 1.104.2.8  2002/07/12 10:04:32  kick_
+# added helper targets to the makefile. They shouldn't break anything, but
+# make my life a lot easier.
+#
+# The new rpm has been splitted into two parts, one for package installation/
+# removal, one for package building.
+# Therefore rpm -ta isn't a valid command anymore and needs to be replaced
+# by rpmbuild -ta  (this is backwards compatible)
+#
+# Revision 1.104.2.7  2002/06/07 00:23:47  hal9
+# Fixing a quirk of man2html (on my system) that pulls punctuation into URLs,
+# thus breaking them completely.
+#
+# Revision 1.104.2.6  2002/06/02 03:26:25  hal9
+# Update CONFIG_FILES (ie update basic.action, etc), and also DOC_FILES (exclude
+# index.html and team/index.html)
+#
+# Revision 1.104.2.5  2002/05/30 15:35:01  hal9
+# This is more cleanup on the make config-file target. Most issues for
+# automatic generation are taken care of. There are still some problems
+# that require hand editing. Namely, some of the examples that are > 80 chars.
+#
+# Revision 1.104.2.4  2002/05/29 02:12:17  hal9
+# Ooops...forgot about perl -pi cygwin problem. Add -pi.bak. Also, the
+# new target is 'make config-file', _not_ make config.
+#
+# Revision 1.104.2.3  2002/05/29 02:05:48  hal9
+# 'make config' target added (WIP) for future generation of config file from
+# text in u-m so the two are in sync. New generated config, which requires
+# some hand editing for the time being.
+#
+# Revision 1.104.2.2  2002/05/28 02:32:55  hal9
+# New target 'make dok-index' for privoxy-index.html. Also, fixed *.bak files
+# not being cleaned up in doc/webserver.
+#
+# Revision 1.104.2.1  2002/05/26 17:19:34  hal9
+# Remove Table of Contents from readme with oes's dsl trick.
 #
 # Revision 1.104  2002/05/24 00:03:49  oes
 # Use p_doc.css for the Homepage for consistency
 #
 # Revision 1.104  2002/05/24 00:03:49  oes
 # Use p_doc.css for the Homepage for consistency
diff --git a/INSTALL b/INSTALL
index 18ec272..0ab1e84 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/doc/source/install.sgml,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/INSTALL,v $
  *
  * Purpose     :  INSTALL file to help with installing from source.
  *
  *
  * Purpose     :  INSTALL file to help with installing from source.
  *
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-This file describes installing Privoxy from source. If you are installing a
-pre-built binary installation, you should probably read the appropriate section
-in User Manual.
-
 To build Privoxy from source, autoconf, GNU make (gmake), and, of course, a C
 compiler like gcc are required.
 
 When building from a source tarball (either release version or nightly CVS
 tarball), first unpack the source:
 
 To build Privoxy from source, autoconf, GNU make (gmake), and, of course, a C
 compiler like gcc are required.
 
 When building from a source tarball (either release version or nightly CVS
 tarball), first unpack the source:
 
- tar xzvf privoxy-3.1.1-beta-src* [.tgz or .tar.gz]                            
- cd privoxy-3.1.1-beta                                                         
+ tar xzvf privoxy-3.0.3-src* [.tgz or .tar.gz]
+ cd privoxy-3.0.3
+
 
 For retrieving the current CVS sources, you'll need CVS installed. Note that
 sources from CVS are development quality, and may not be stable, or well
 tested. To download CVS source:
 
 
 For retrieving the current CVS sources, you'll need CVS installed. Note that
 sources from CVS are development quality, and may not be stable, or well
 tested. To download CVS source:
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login          
-  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co current 
-  cd current                                                                         
+  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
+  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co current
+  cd current
+
 
 This will create a directory named current/, which will contain the source
 tree.
 
 
 This will create a directory named current/, which will contain the source
 tree.
 
-You can also check out any Privoxy "branch", just exchange the current name
-with the wanted branch name (Example: v_3_0_branch for the 3.0 cvs tree).
-
-It is also strongly recommended to not run Privoxy as root, and instead it is
-suggested to create a "privoxy" user and group for this purpose. See your local
-documentation for the correct command line to do this.
-
-/etc/passwd might then look like:
-
-  privoxy:*:7777:7777:privoxy proxy:/no/home:/no/shell                         
+Then, in either case, to build from unpacked tarball or CVS source:
 
 
-And then /etc/group, like:
+ autoheader
+ autoconf
+ ./configure      # (--help to see options)
+ make             # (the make from gnu, gmake for *BSD)
+ su
+ make -n install  # (to see where all the files will go)
+ make install     # (to really install)
 
 
-  privoxy:*:7777:                                                              
 
 
-Some binary packages may do this for you.
-
-Then, to build from either unpacked tarball or CVS source:
-
- autoheader                                                                    
- autoconf                                                                      
- ./configure      # (--help to see options)                                    
- make             # (the make from GNU, sometimes called gmake)                
- su                                                                            
- make -n install  # (to see where all the files will go)                       
- make -s install  # (to really install, -s to silence output)                  
-
-If you have GNU make, you can have the first four steps automatically done for
+If you have gnu make, you can have the first four steps automatically done for
 you by just typing:
 
 you by just typing:
 
-  make                                                                         
+  make
 
 
-in the freshly downloaded or unpacked source directory.
 
 
-WARNING: If installing as root, the install will fail unless a non-root user or
-group is specified, or a privoxy user and group already exist on the system. If
-a non-root user is specified, and no group, then the installation will try to
-also use a group of the same name as "user". If a group is specified (and no
-user), then the support files will be installed as writable by that group, and
-owned by the user running the installation.
-
-configure accepts --with-user and --with-group options for setting user and
-group ownership of the configuration files (which need to be writable by the
-daemon). The specified user must already exist. When starting Privoxy, it
-should be run as this same user to insure write access to configuration and log
-files.
-
-Alternately, you can specify user and group on the make command line, but be
-sure both already exist:
-
- make -s install  USER=privoxy GROUP=privoxy                                   
-
-The default installation path for make install is /usr/local. This may of
-course be customized with the various ./configure path options. If you are
-doing a root install to anywhere else besides /usr/local, be sure to set the
-appropriate paths with the correct configure options (./configure --help).
-
-If you do install to /usr/local, the install will use sysconfdir=$prefix/etc/
-privoxy by default. All other destinations, and the direct usage of
---sysconfdir flag behave like normal, i.e. will not add the extra privoxy
-directory. This is for a safer install, as there may already exist another
-program that uses a file with the "config" name, and thus makes /usr/local/etc
-cleaner.
-
-If installing to /usr/local, the docs will go by default to $prefix/share/doc.
-But if this directory doesn't exist, it will then try $prefix/doc and install
-there before creating a new $prefix/share/doc just for Privoxy.
-
-Again, if the installs goes to /usr/local, the localstatedir (ie: var/) will
-default to /var instead of $prefix/var so the logs will go to /var/log/privoxy
-/, and the pid file will be created in /var/run/privoxy.pid.
-
-make install will attempt to set the correct values in config (main
-configuration file). You may want to check this to make sure all values are
-correct. If appropriate, an init script will be installed, but it is up to the
-user to determine how and where to start Privoxy. The init script should be
-checked for correct paths and values, if anything other than a default install
-is done.
-
-If install finds previous versions of any configuration files, these will not
-be overwritten, and the new ones will be installed with a "new" extension. You
-will then need to manually update the installed configuration files as needed.
-All template files will be overwritten. If you have customized, local
-templates, you should save these first. If a previous version of Privoxy is
-already running, you will have to restart it manually.
+in the freshly downloaded or unpacked source directory.
 
 For more detailed instructions on how to build Redhat and SuSE RPMs, Windows
 self-extracting installers, building on platforms with special requirements
 etc, please consult the developer manual.
 
 
 For more detailed instructions on how to build Redhat and SuSE RPMs, Windows
 self-extracting installers, building on platforms with special requirements
 etc, please consult the developer manual.
 
-The simplest command line to start Privoxy is $path/privoxy --user=privoxy
-$path/etc/privoxy/config. See privoxy --usage, or the man page, for other
-options, and configuration.
+For binary RPM installation, and other platforms, see the user-manual as well.
 
 
diff --git a/LICENSE b/LICENSE
index 09aa295..ddc3d60 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -1,8 +1,4 @@
-   Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>, 
-   and licensed under the GNU General Public License.
-
-
-              GNU GENERAL PUBLIC LICENSE
+                   GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991
 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
                       Version 2, June 1991
 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.
index 9b91452..e506703 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.9 2002/10/23 06:14:09 agotneja Exp $
+# $Id: Makefile,v 1.5.2.2 2002/10/25 02:44:23 hal9 Exp $
 #
 # Written by and Copyright (C) 2001 the SourceForge
 # Privoxy team. http://www.privoxy.org/
 #
 # Written by and Copyright (C) 2001 the SourceForge
 # Privoxy team. http://www.privoxy.org/
 # Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #
 # $Log: Makefile,v $
 # Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #
 # $Log: Makefile,v $
-# Revision 1.9  2002/10/23 06:14:09  agotneja
-# Added FreeBSD checks to stop people from using the default 'make'
+# Revision 1.5.2.2  2002/10/25 02:44:23  hal9
+# Port of make install, etc from main trunk. Needs testing! Add Slackware
+# support, and other related changes. Update related docs.
 #
 #
-# Revision 1.8  2002/10/23 05:41:45  agotneja
-# Added checks for Solaris 'make' command, and more extensive checks that
-# the user is running GNU make.
-#
-# Revision 1.7  2002/10/22 02:22:18  hal9
-# Look for gmake first, and fall back to make. More Solaris trouble.
-#
-# Revision 1.6  2002/09/05 14:35:17  oes
+# Revision 1.5.2.1  2002/08/05 17:46:13  oes
 # Change make to gmake to fix auto-build on Solaris
 #
 # Revision 1.5  2002/04/11 12:51:34  oes
 # Change make to gmake to fix auto-build on Solaris
 #
 # Revision 1.5  2002/04/11 12:51:34  oes
 
 #############################################################################
 
 
 #############################################################################
 
-# This script will first try to use the GNU make command, then the standard
-# make command, checking whether the command returns 'GNU' as part of its
-# version string. Amend this to point to your GNU make command if it is
-# not in your path.
-# Further tests; 
-#   GNU  'make' sets the MAKE_VERSION variable
-#   Solaris 'make' sets the HOST_ARCH variable
-#   FreeBSD 'make' sets the MACHINE_ARCH variable
-# We check if this isn't GNU but matches one of the above we error out
-
 GNU_MAKE_CMD = gmake
 MAKE_CMD     = make
 
 GNU_MAKE_CMD = gmake
 MAKE_CMD     = make
 
@@ -113,7 +97,6 @@ error:
 
 .PHONY: error
 
 
 .PHONY: error
 
-
 #############################################################################
 
 ## Local Variables:
 #############################################################################
 
 ## Local Variables:
diff --git a/README b/README
index 1a0bfc1..b2f4884 100644 (file)
--- a/README
+++ b/README
@@ -1,10 +1,10 @@
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/doc/source/readme.sgml,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/README,v $
  *
  * Purpose     :  README file to give a short intro.
  *
  *
  * Purpose     :  README file to give a short intro.
  *
- * Copyright   :  Written by and Copyright (C) 2001,2002 the SourceForge
+ * Copyright   :  Written by and Copyright (C) 2001 - 2004  the SourceForge
  *                Privoxy team. http://www.privoxy.org/
  *
  *                Based on the Internet Junkbuster originally written
  *                Privoxy team. http://www.privoxy.org/
  *
  *                Based on the Internet Junkbuster originally written
  *
  *********************************************************************/
 
  *
  *********************************************************************/
 
-This README is included with the development version of Privoxy 3.1.1, which
-will someday become Privoxy v3.2. See http://www.privoxy.org/ for more
-information. The current code level is technically alpha, but is not yet
-significantly different from the 3.0.0 stable branch at this time (other 
-than more bugs).
-
-There is not much reason to actually run this branch unless you want to help 
-chase bugs, or with development.
+This README is included with Privoxy 3.0.3. See http://www.privoxy.org/ for
+more information. The current code maturity level is "stable".
 
 -------------------------------------------------------------------------------
 
 Privoxy is a web proxy with advanced filtering capabilities for protecting
 
 -------------------------------------------------------------------------------
 
 Privoxy is a web proxy with advanced filtering capabilities for protecting
-privacy, filtering web page content, managing cookies, controlling access, and
+privacy, modifying web page content, managing cookies, controlling access, and
 removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
 very flexible configuration and can be customized to suit individual needs and
 tastes. Privoxy has application for both stand-alone systems and multi-user
 removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
 very flexible configuration and can be customized to suit individual needs and
 tastes. Privoxy has application for both stand-alone systems and multi-user
@@ -55,6 +49,16 @@ Privoxy is based on Internet Junkbuster (tm).
 
 1. IMPORTANT CHANGES
 
 
 1. IMPORTANT CHANGES
 
+MORE NEWS! January 2004, Privoxy 3.0.3 is released. This is the another
+maintenance release of Privoxy which fixes more bugs, further refines the
+configuration and works around some known third-party problems. See the
+ChangeLog for complete details. Upgrading from 3.0.2 is recommended.
+
+NEWS! March 2003, Privoxy 3.0.2 is released. This is the first maintenance
+release of Privoxy. There are no significant new features in this release. Some
+bugs are fixed, and some existing features have been enhanced. See ChangeLog
+for details. Upgrading from 3.0.0 is recommended.
+
 REALLY BIG NEWS! August 2002: The long-awaited, oft-delayed stable version of
 Privoxy 3.0 is finally released! This is way behind schedule, but better late
 than never. The developers all hope the wait was worth it.
 REALLY BIG NEWS! August 2002: The long-awaited, oft-delayed stable version of
 Privoxy 3.0 is finally released! This is way behind schedule, but better late
 than never. The developers all hope the wait was worth it.
@@ -81,7 +85,7 @@ User Manual, for other installation types.
 3. RUN
 
 privoxy [--help] [--version] [--no-daemon] [--pidfile PIDFILE] [--user USER
 3. RUN
 
 privoxy [--help] [--version] [--no-daemon] [--pidfile PIDFILE] [--user USER
-[.GROUP]] [config_file]
+[.GROUP]] [--chroot] [config_file]
 
 See the man page or User Manual for an explanation of each option, and other
 configuration and usage issues.
 
 See the man page or User Manual for an explanation of each option, and other
 configuration and usage issues.
@@ -110,29 +114,23 @@ Junkbuster v2.0.x. The User Manual has an explanation of all configuration
 options, and examples: http://www.privoxy.org/user-manual/.
 
 Be sure to set your browser(s) for HTTP/HTTPS Proxy at <IP>:<Port>, or whatever
 options, and examples: http://www.privoxy.org/user-manual/.
 
 Be sure to set your browser(s) for HTTP/HTTPS Proxy at <IP>:<Port>, or whatever
-you specify in the config file under 'listen-address'. DEFAULT is localhost:
-8118. Note that Privoxy ONLY proxies HTTP (and HTTPS) traffic. Do not try it
-with FTP or other protocols for the simple reason it does not work.
+you specify in the config file under 'listen-address'. DEFAULT is
+localhost:8118. Note that Privoxy ONLY proxies HTTP (and HTTPS) traffic. Do not
+try it with FTP or other protocols for the simple reason it does not work.
 
 The actions list can be configured via the web interface accessed via http://
 p.p/, as well other options.
 
 
 The actions list can be configured via the web interface accessed via http://
 p.p/, as well other options.
 
-All configuration files are subject to unannounced changes during the
-development process.
-
 -------------------------------------------------------------------------------
 
 5. DOCUMENTATION
 
 -------------------------------------------------------------------------------
 
 5. DOCUMENTATION
 
-There should be documentation in the 'doc' subdirectory, but it is not
-completed at this point. In particular, see the User Manual there, the FAQ, and
-those interested in Privoxy development, should look at developer-manual.
+There should be documentation in the 'doc' subdirectory. In particular, see the
+User Manual there, the FAQ, and those interested in Privoxy development, should
+look at developer-manual.
 
 
-The most up to date source of information on the current development version,
-may still be either comments in the source code, or the included configuration
-files. The source and configuration files are all well commented. The main
-configuration files are: 'config', 'default.action', and 'default.filter' in
-the toplevel source directory.
+The source and configuration files are all well commented. The main
+configuration files are: 'config', 'default.action', and 'default.filter'.
 
 Included documentation may vary according to platform and packager. All
 documentation is posted on http://www.privoxy.org, in case you don't have it,
 
 Included documentation may vary according to platform and packager. All
 documentation is posted on http://www.privoxy.org, in case you don't have it,
@@ -150,7 +148,7 @@ with the best support:
 
 6.1. Get Support
 
 
 6.1. Get Support
 
-For casual users, our support forum at SourceForge is probably best suited: 
+For casual users, our support forum at SourceForge is probably best suited:
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
@@ -173,7 +171,7 @@ debugging. If you are using your own custom configuration, please try the stock
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
-fixed in the meantime. We would appreciate if you could take the time to 
+fixed in the meantime. We would appreciate if you could take the time to
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
index 815f3f8..0bc0daa 100644 (file)
  *
  * Revisions   :
  *    $Log: acconfig.h,v $
  *
  * Revisions   :
  *    $Log: acconfig.h,v $
- *    Revision 1.30  2002/09/06 12:14:12  oes
- *    Added missing preproc symbols PCRE*_H_IN_SUBDIR
+ *    Revision 1.27.2.4  2003/12/17 16:34:40  oes
+ *    Cosmetics
  *
  *
- *    Revision 1.29  2002/09/04 12:03:18  oes
- *    re-enable build on older setups
+ *    Revision 1.27.2.3  2003/03/27 16:03:19  oes
+ *    Another shot at Bug #707467
  *
  *
+ *    Revision 1.27.2.2  2003/03/21 14:39:12  oes
+ *    Presumably fixed Bug #707467 by defining unix ifdef __unix__
+ *
+ *    Revision 1.27.2.1  2002/08/10 11:22:31  oes
+ *    - Add two AC_DEFINEs that indicate if the pcre*.h headers
+ *      are located in a pcre/ subdir to the include path.
  *
  *    Revision 1.27  2002/04/25 19:13:57  morcego
  *    Removed RPM release number declaration on configure.in
  *
  *    Revision 1.27  2002/04/25 19:13:57  morcego
  *    Removed RPM release number declaration on configure.in
  */
 #undef STATIC_PCRS
 
  */
 #undef STATIC_PCRS
 
-/* 
- * Does pcre.h need to be included as <pcre/pcre.h>?
- */
-#undef PCRE_H_IN_SUBDIR
-
-/* 
- * Does pcreposix.h need to be included as <pcre/pcre.h>?
- */
-#undef PCREPOSIX_H_IN_SUBDIR
-
 /*
  * Allows the use of an ACL to control access to the proxy by IP address.
  */
 /*
  * Allows the use of an ACL to control access to the proxy by IP address.
  */
 #undef HAVE_GETHOSTBYADDR_R_7_ARGS
 #undef HAVE_GETHOSTBYADDR_R_5_ARGS
 
 #undef HAVE_GETHOSTBYADDR_R_7_ARGS
 #undef HAVE_GETHOSTBYADDR_R_5_ARGS
 
-/* Define if you have gmtime_r and localtime_r with a signature
+/* Defined if you have gmtime_r and localtime_r with a signature
  * of (struct time *, struct tm *)
  */
 #undef HAVE_GMTIME_R
  * of (struct time *, struct tm *)
  */
 #undef HAVE_GMTIME_R
  */
 #undef socklen_t
 
  */
 #undef socklen_t
 
+/* Define if pcre.h must be included as <pcre/pcre.h>
+ */
+#undef PCRE_H_IN_SUBDIR
+
+/* Define if pcreposix.h must be included as <pcre/pcreposix.h>
+ */
+#undef PCREPOSIX_H_IN_SUBDIR
 
 @BOTTOM@
 
 
 @BOTTOM@
 
 
 /*
  * On OpenBSD and maybe also FreeBSD, gcc doesn't define the cpp
 
 /*
  * On OpenBSD and maybe also FreeBSD, gcc doesn't define the cpp
- * symbol unix; it defines __unix__
+ * symbol unix; it defines __unix__ and sometimes not even that:
  */
  */
-#if defined(__unix__) && !defined(unix)
+#if ( defined(__unix__) || defined(__NetBSD__) ) && !defined(unix)
 #define unix 1
 #endif
 
 #define unix 1
 #endif
 
similarity index 93%
rename from src/actionlist.h
rename to actionlist.h
index ce5f5fe..1e06364 100644 (file)
@@ -1,6 +1,6 @@
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/actionlist.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/actionlist.h,v $
  *
  * Purpose     :  Master list of supported actions.
  *                Not really a header, since it generates code.
  *
  * Purpose     :  Master list of supported actions.
  *                Not really a header, since it generates code.
  *
  * Revisions   :
  *    $Log: actionlist.h,v $
  *
  * Revisions   :
  *    $Log: actionlist.h,v $
- *    Revision 2.2  2002/09/12 14:05:14  oes
+ *    Revision 1.17.2.3  2004/10/03 12:53:32  david__schmidt
+ *    Add the ability to check jpeg images for invalid
+ *    lengths of comment blocks.  Defensive strategy
+ *    against the exploit:
+ *       Microsoft Security Bulletin MS04-028
+ *       Buffer Overrun in JPEG Processing (GDI+) Could
+ *       Allow Code Execution (833987)
+ *    Enabled with +inspect-jpegs in actions files.
+ *
+ *    Revision 1.17.2.2  2002/09/25 15:25:25  oes
  *    Added more aliases for prehistoric action names
  *
  *    Added more aliases for prehistoric action names
  *
- *    Revision 2.1  2002/09/04 14:52:18  oes
- *    Synced with the stable branch:
- *       Revision 1.17.2.1  2002/08/02 12:50:47  oes
- *       Consistency with docs: Change default name for action from hide-referer to hide-referrer
- *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.17.2.1  2002/08/02 12:50:47  oes
+ *    Consistency with docs: Change default name for action from hide-referer to hide-referrer
  *
  *    Revision 1.17  2002/05/14 21:25:55  oes
  *    Renamed prevent-(setting/reading)-cookies to crunch-(incoming/outgoing)-cookies
  *
  *    Revision 1.17  2002/05/14 21:25:55  oes
  *    Renamed prevent-(setting/reading)-cookies to crunch-(incoming/outgoing)-cookies
similarity index 92%
rename from src/actions.c
rename to actions.c
index 977f116..dc33b9f 100644 (file)
+++ b/actions.c
@@ -1,7 +1,7 @@
-const char actions_rcs[] = "$Id: actions.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $";
+const char actions_rcs[] = "$Id: actions.c,v 1.32.2.6 2006/01/29 23:10:56 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/actions.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/actions.c,v $
  *
  * Purpose     :  Declares functions to work with actions files
  *                Functions declared include: FIXME
  *
  * Purpose     :  Declares functions to work with actions files
  *                Functions declared include: FIXME
@@ -33,10 +33,27 @@ const char actions_rcs[] = "$Id: actions.c,v 2.0 2002/06/04 14:34:21 jongfoster
  *
  * Revisions   :
  *    $Log: actions.c,v $
  *
  * Revisions   :
  *    $Log: actions.c,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.32.2.6  2006/01/29 23:10:56  david__schmidt
+ *    Multiple filter file support
  *
  *
- *    Revision 1.33  2002/05/26 12:14:19  roro
+ *    Revision 1.32.2.5  2005/06/09 01:18:41  david__schmidt
+ *    Tweaks to conditionally include pthread.h if FEATURE_PTHREAD is enabled -
+ *    this becomes important when jcc.h gets included later down the line.
+ *
+ *    Revision 1.32.2.4  2003/12/03 10:33:11  oes
+ *    - Implemented Privoxy version requirement through
+ *      for-privoxy-version= statement in {{settings}}
+ *      block
+ *    - Fix for unchecked out-of-memory condition
+ *
+ *    Revision 1.32.2.3  2003/02/28 12:52:10  oes
+ *    Fixed memory leak reported by Dan Price in Bug #694713
+ *
+ *    Revision 1.32.2.2  2002/11/20 14:36:55  oes
+ *    Extended unload_current_actions_file() to multiple AFs.
+ *    Thanks to Oliver Stoeneberg for the hint.
+ *
+ *    Revision 1.32.2.1  2002/05/26 12:13:16  roro
  *    Change unsigned to unsigned long in actions_name struct.  This closes
  *    SourceForge Bug #539284.
  *
  *    Change unsigned to unsigned long in actions_name struct.  This closes
  *    SourceForge Bug #539284.
  *
@@ -191,6 +208,10 @@ const char actions_rcs[] = "$Id: actions.c,v 2.0 2002/06/04 14:34:21 jongfoster
 #include <assert.h>
 #include <stdlib.h>
 
 #include <assert.h>
 #include <stdlib.h>
 
+#ifdef FEATURE_PTHREAD
+#include <pthread.h>
+#endif
+
 #include "project.h"
 #include "jcc.h"
 #include "list.h"
 #include "project.h"
 #include "jcc.h"
 #include "list.h"
@@ -201,6 +222,7 @@ const char actions_rcs[] = "$Id: actions.c,v 2.0 2002/06/04 14:34:21 jongfoster
 #include "encode.h"
 #include "urlmatch.h"
 #include "cgi.h"
 #include "encode.h"
 #include "urlmatch.h"
 #include "cgi.h"
+#include "ssplit.h"
 
 const char actions_h_rcs[] = ACTIONS_H_VERSION;
 
 
 const char actions_h_rcs[] = ACTIONS_H_VERSION;
 
@@ -215,26 +237,27 @@ const char actions_h_rcs[] = ACTIONS_H_VERSION;
  * an enumerated type (well, the preprocessor equivalent).  Here are
  * the values:
  */
  * an enumerated type (well, the preprocessor equivalent).  Here are
  * the values:
  */
-#define AV_NONE       0 /**< Action type: +bool-action or -bool-action */
-#define AV_ADD_STRING 1 /**< Action type: +string-action{string} */
-#define AV_REM_STRING 2 /**< Action type: -string-action */
-#define AV_ADD_MULTI  3 /**< Action type: +multi-action{string} */
-#define AV_REM_MULTI  4 /**< Action type: -multi-action{string} or -multi-action */
-
-/**
- * A structure holding information about a single built-in action string.
+#define AV_NONE       0 /* +opt -opt */
+#define AV_ADD_STRING 1 /* +stropt{string} */
+#define AV_REM_STRING 2 /* -stropt */
+#define AV_ADD_MULTI  3 /* +multiopt{string} +multiopt{string2} */
+#define AV_REM_MULTI  4 /* -multiopt{string} -multiopt          */
+
+/*
+ * We need a structure to hold the name, flag changes,
+ * type, and string index.
  */
 struct action_name
 {
  */
 struct action_name
 {
-   const char * name;    /**< Action name */
-   unsigned long mask;   /**< A bit set to "0" = remove action */
-   unsigned long add;    /**< A bit set to "1" = add action */
-   int takes_value;      /**< An AV_... constant */
-   int index;            /**< Index into strings[] or multi[] */
+   const char * name;
+   unsigned long mask;   /* a bit set to "0" = remove action */
+   unsigned long add;    /* a bit set to "1" = add action */
+   int takes_value;      /* an AV_... constant */
+   int index;            /* index into strings[] or multi[] */
 };
 
 };
 
-/**
- * The array of all built-in action strings.
+/*
+ * And with those building blocks in place, here's the array.
  */
 static const struct action_name action_names[] =
 {
  */
 static const struct action_name action_names[] =
 {
@@ -266,15 +289,6 @@ static const struct action_name action_names[] =
 };
 
 
 };
 
 
-/**
- * The currently loaded actions files.
- */
-static struct file_list *current_actions_file[MAX_ACTION_FILES]  = {
-   NULL, NULL, NULL, NULL, NULL,
-   NULL, NULL, NULL, NULL, NULL
-};
-
-
 static int load_one_actions_file(struct client_state *csp, int fileid);
 
 
 static int load_one_actions_file(struct client_state *csp, int fileid);
 
 
@@ -868,6 +882,12 @@ void free_current_action (struct current_action_spec *src)
 }
 
 
 }
 
 
+static struct file_list *current_actions_file[MAX_AF_FILES]  = {
+   NULL, NULL, NULL, NULL, NULL,
+   NULL, NULL, NULL, NULL, NULL
+};
+
+
 #ifdef FEATURE_GRACEFUL_TERMINATION
 /*********************************************************************
  *
 #ifdef FEATURE_GRACEFUL_TERMINATION
 /*********************************************************************
  *
@@ -883,10 +903,15 @@ void free_current_action (struct current_action_spec *src)
  *********************************************************************/
 void unload_current_actions_file(void)
 {
  *********************************************************************/
 void unload_current_actions_file(void)
 {
-   if (current_actions_file)
+   int i;
+
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
    {
-      current_actions_file->unloader = unload_actions_file;
-      current_actions_file = NULL;
+      if (current_actions_file[i])
+      {
+         current_actions_file[i]->unloader = unload_actions_file;
+         current_actions_file[i] = NULL;
+      }
    }
 }
 #endif /* FEATURE_GRACEFUL_TERMINATION */
    }
 }
 #endif /* FEATURE_GRACEFUL_TERMINATION */
@@ -965,7 +990,7 @@ int load_actions_file(struct client_state *csp)
    int i;
    int result;
 
    int i;
    int result;
 
-   for (i = 0; i < MAX_ACTION_FILES; i++)
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
       if (csp->config->actions_file[i])
       {
    {
       if (csp->config->actions_file[i])
       {
@@ -985,23 +1010,6 @@ int load_actions_file(struct client_state *csp)
    return 0;
 }
 
    return 0;
 }
 
-
-/** load_one_actions_file() parser status: At start of file. */
-#define MODE_START_OF_FILE 1
-
-/** load_one_actions_file() parser status: In "{{settings}}" block. */
-#define MODE_SETTINGS      2
-
-/** load_one_actions_file() parser status: In "{{description}}" block. */
-#define MODE_DESCRIPTION   3
-
-/** load_one_actions_file() parser status: In "{{alias}}" block. */
-#define MODE_ALIAS         4
-
-/** load_one_actions_file() parser status: In "{+some-actions}" block. */
-#define MODE_ACTIONS       5
-
-
 /*********************************************************************
  *
  * Function    :  load_one_actions_file
 /*********************************************************************
  *
  * Function    :  load_one_actions_file
@@ -1024,6 +1032,11 @@ static int load_one_actions_file(struct client_state *csp, int fileid)
     * Note: Keep these in the order they occur in the file, they are
     * sometimes tested with <=
     */
     * Note: Keep these in the order they occur in the file, they are
     * sometimes tested with <=
     */
+#define MODE_START_OF_FILE 1
+#define MODE_SETTINGS      2
+#define MODE_DESCRIPTION   3
+#define MODE_ALIAS         4
+#define MODE_ACTIONS       5
 
    int mode = MODE_START_OF_FILE;
 
 
    int mode = MODE_START_OF_FILE;
 
@@ -1244,9 +1257,44 @@ static int load_one_actions_file(struct client_state *csp, int fileid)
       {
          /*
           * Part of the {{settings}} block.
       {
          /*
           * Part of the {{settings}} block.
-          * Ignore for now, but we may want to read & check permissions
-          * when we go multi-user.
+          * For now only serves to check if the file's minimum Privoxy
+          * version requirement is met, but we may want to read & check
+          * permissions when we go multi-user.
           */
           */
+         if (!strncmp(buf, "for-privoxy-version=", 20))
+         {
+            char *version_string, *fields[3];
+            int num_fields;
+
+            if ((version_string = strdup(buf + 20)) == NULL)
+            {
+               fclose(fp);
+               log_error(LOG_LEVEL_FATAL,
+                         "can't load actions file '%s': out of memory!",
+                         csp->config->actions_file[fileid]);
+               return 1; /* never get here */
+            }
+            
+            num_fields = ssplit(version_string, ".", fields, 3, TRUE, FALSE);
+
+            if (num_fields < 1 || atoi(fields[0]) == 0)
+            {
+               log_error(LOG_LEVEL_ERROR,
+                 "While loading actions file '%s': invalid line (%lu): %s",
+                  csp->config->actions_file[fileid], linenum, buf);
+            }
+            else if (                      atoi(fields[0]) > VERSION_MAJOR
+                     || (num_fields > 1 && atoi(fields[1]) > VERSION_MINOR)
+                     || (num_fields > 2 && atoi(fields[2]) > VERSION_POINT))
+            {
+               fclose(fp);
+               log_error(LOG_LEVEL_FATAL,
+                         "Actions file '%s', line %lu requires newer Privoxy version: %s",
+                         csp->config->actions_file[fileid], linenum, buf );
+               return 1; /* never get here */
+            }
+            free(version_string);
+         }
       }
       else if (mode == MODE_DESCRIPTION)
       {
       }
       else if (mode == MODE_DESCRIPTION)
       {
@@ -1309,7 +1357,14 @@ static int load_one_actions_file(struct client_state *csp, int fileid)
             return 1; /* never get here */
          }
 
             return 1; /* never get here */
          }
 
-         new_alias->name = strdup(buf);
+         if ((new_alias->name = strdup(buf)) == NULL)
+         {
+            fclose(fp);
+            log_error(LOG_LEVEL_FATAL,
+               "can't load actions file '%s': out of memory!",
+               csp->config->actions_file[fileid]);
+            return 1; /* never get here */
+         }
 
          strcpy(actions_buf, start);
 
 
          strcpy(actions_buf, start);
 
@@ -1381,6 +1436,7 @@ static int load_one_actions_file(struct client_state *csp, int fileid)
    fclose(fp);
 
    free_action(cur_action);
    fclose(fp);
 
    free_action(cur_action);
+   freez(cur_action);
 
    free_alias_list(alias_list);
 
 
    free_alias_list(alias_list);
 
similarity index 92%
rename from src/actions.h
rename to actions.h
index c0513ff..3f5c62d 100644 (file)
+++ b/actions.h
@@ -1,9 +1,9 @@
 #ifndef ACTIONS_H_INCLUDED
 #define ACTIONS_H_INCLUDED
 #ifndef ACTIONS_H_INCLUDED
 #define ACTIONS_H_INCLUDED
-#define ACTIONS_H_VERSION "$Id: actions.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define ACTIONS_H_VERSION "$Id: actions.h,v 1.12 2002/05/06 07:56:50 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/actions.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/actions.h,v $
  *
  * Purpose     :  Declares functions to work with actions files
  *                Functions declared include: FIXME
  *
  * Purpose     :  Declares functions to work with actions files
  *                Functions declared include: FIXME
@@ -35,9 +35,6 @@
  *
  * Revisions   :
  *    $Log: actions.h,v $
  *
  * Revisions   :
  *    $Log: actions.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
- *
  *    Revision 1.12  2002/05/06 07:56:50  oes
  *    Made actions_to_html independent of FEATURE_CGI_EDIT_ACTIONS
  *
  *    Revision 1.12  2002/05/06 07:56:50  oes
  *    Made actions_to_html independent of FEATURE_CGI_EDIT_ACTIONS
  *
@@ -107,14 +104,12 @@ struct client_state;
 
 
 
 
 
 
-/**
- * This structure is used to hold user-defined aliases
- */
+/* This structure is used to hold user-defined aliases */
 struct action_alias
 {
 struct action_alias
 {
-   const char * name;            /**< Alias name.  */
-   struct action_spec action[1]; /**< Alias value. */
-   struct action_alias * next;   /**< Next alias in list */
+   const char * name;
+   struct action_spec action[1];
+   struct action_alias * next;
 };
 
 
 };
 
 
similarity index 95%
rename from src/amiga.c
rename to amiga.c
index 97d9f75..ccd021e 100644 (file)
+++ b/amiga.c
@@ -1,7 +1,7 @@
-const char amiga_rcs[] = "$Id: amiga.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $";
+const char amiga_rcs[] = "$Id: amiga.c,v 1.9 2002/03/26 22:29:54 swa Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/amiga.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/amiga.c,v $
  *
  * Purpose     :  Amiga-specific declarations.
  *
  *
  * Purpose     :  Amiga-specific declarations.
  *
@@ -28,9 +28,6 @@ const char amiga_rcs[] = "$Id: amiga.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp
  *
  * Revisions   :
  *    $Log: amiga.c,v $
  *
  * Revisions   :
  *    $Log: amiga.c,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
- *
  *    Revision 1.9  2002/03/26 22:29:54  swa
  *    we have a new homepage!
  *
  *    Revision 1.9  2002/03/26 22:29:54  swa
  *    we have a new homepage!
  *
@@ -232,7 +229,7 @@ void free (void *m)
 
 void *realloc (void *old, size_t ns)
 {
 
 void *realloc (void *old, size_t ns)
 {
-   void *new_buf;
+   void *new;
    LONG osize, *o = old;
    LONG nsize = ns;
 
    LONG osize, *o = old;
    LONG nsize = ns;
 
@@ -245,9 +242,9 @@ void *realloc (void *old, size_t ns)
    {
       return old;
    }
    {
       return old;
    }
-   if ((new_buf = malloc(nsize)))
+   if ((new = malloc(nsize)))
    {
    {
-      ULONG *n = new_buf;
+      ULONG *n = new;
 
       osize >>= 2;
       while(osize--)
 
       osize >>= 2;
       while(osize--)
@@ -256,7 +253,7 @@ void *realloc (void *old, size_t ns)
       }
       free(old);
    }
       }
       free(old);
    }
-   return new_buf;
+   return new;
 }
 
 void __memCleanUp (void)
 }
 
 void __memCleanUp (void)
similarity index 98%
rename from src/amiga.h
rename to amiga.h
index b52a551..4d13690 100644 (file)
+++ b/amiga.h
@@ -4,7 +4,7 @@
 #define AMIGA_H_VERSION "$Id: amiga.h,v 1.9 2002/03/26 22:29:54 swa Exp $"
 /*********************************************************************
  *
 #define AMIGA_H_VERSION "$Id: amiga.h,v 1.9 2002/03/26 22:29:54 swa Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/amiga.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/amiga.h,v $
  *
  * Purpose     :  Amiga-specific declarations.
  *
  *
  * Purpose     :  Amiga-specific declarations.
  *
diff --git a/src/cgi.c b/cgi.c
similarity index 87%
rename from src/cgi.c
rename to cgi.c
index 034f872..1db93f8 100644 (file)
--- a/src/cgi.c
+++ b/cgi.c
@@ -1,7 +1,7 @@
-const char cgi_rcs[] = "$Id: cgi.c,v 2.3 2002/11/12 16:19:18 oes Exp $";
+const char cgi_rcs[] = "$Id: cgi.c,v 1.70.2.13 2004/02/17 13:30:23 oes Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/cgi.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/cgi.c,v $
  *
  * Purpose     :  Declares functions to intercept request, generate
  *                html or gif answers, and to compose HTTP resonses.
  *
  * Purpose     :  Declares functions to intercept request, generate
  *                html or gif answers, and to compose HTTP resonses.
@@ -38,19 +38,71 @@ const char cgi_rcs[] = "$Id: cgi.c,v 2.3 2002/11/12 16:19:18 oes Exp $";
  *
  * Revisions   :
  *    $Log: cgi.c,v $
  *
  * Revisions   :
  *    $Log: cgi.c,v $
- *    Revision 2.3  2002/11/12 16:19:18  oes
- *    Fix: g_bToggleIJB was used outside #ifdef FEATURE_TOGGLE
- *
- *    Revision 2.2  2002/09/04 15:17:28  oes
- *    Synced with the stable branch:
- *        Revision 1.70.2.1  2002/08/05 11:17:46  oes
- *        Fixed Bug #587820, i.e. added workaround for IE bug that includes fragment identifier in (cgi) query
- *
- *    Revision 2.1  2002/06/04 17:55:24  jongfoster
- *    Adding comments
- *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.70.2.13  2004/02/17 13:30:23  oes
+ *    Moved cgi_error_disabled() from cgiedit.c to
+ *    cgi.c to re-enable build with --disable-editor.
+ *    Fixes Bug #892744. Thanks to Matthew Fischer
+ *    for spotting.
+ *
+ *    Revision 1.70.2.12  2003/12/17 16:33:16  oes
+ *     - Added new function cgi_redirect to handle creation of
+ *       HTTP redirect messages formerly repeated in the code.
+ *     - Send cgi_error_disabled instead of cgi_error_404 when
+ *       referrer check fails
+ *     - Dynamic content now gets Expires header field with date
+ *       in the past
+ *
+ *    Revision 1.70.2.11  2003/10/23 12:29:26  oes
+ *    Bugfix: Transparent PNG was not transparent. Thanks to
+ *    Dan Razzell of Starfish Systems for notice and new PNG.
+ *
+ *    Revision 1.70.2.10  2003/06/06 07:54:25  oes
+ *    Security fix: dspatch_known_cgi no longer considers an empty
+ *    referrer safe for critical CGIs, since malicious links could
+ *    reside on https:// locations which browsers don't advertize as
+ *    referrers. Closes bug #749916, thanks to Jeff Epler for the
+ *    hint. Goodbye One-Click[tm] toggling :-(
+ *
+ *    Revision 1.70.2.9  2003/05/08 15:11:31  oes
+ *    Nit
+ *
+ *    Revision 1.70.2.8  2003/04/29 13:33:51  oes
+ *    Killed a compiler warning on OSX
+ *
+ *    Revision 1.70.2.7  2003/04/03 13:50:58  oes
+ *    - Don't call cgi_error_disabled ifndef FEATURE_CGI_EDIT_ACTIONS
+ *      (fixes bug #710056)
+ *    - Show toggle info only if we have it
+ *
+ *    Revision 1.70.2.6  2003/03/12 01:26:25  david__schmidt
+ *    Move declaration of struct tm dummy outside of a control block so it is
+ *    accessible later on during snprintf in get_http_time.
+ *
+ *    Revision 1.70.2.5  2003/03/11 11:53:58  oes
+ *    Cosmetic: Renamed cryptic variable
+ *
+ *    Revision 1.70.2.4  2003/03/07 03:41:03  david__schmidt
+ *    Wrapping all *_r functions (the non-_r versions of them) with mutex semaphores for OSX.  Hopefully this will take care of all of those pesky crash reports.
+ *
+ *    Revision 1.70.2.3  2002/11/28 18:14:32  oes
+ *    Disable access to critical CGIs via untrusted referrers.
+ *    This prevents users from being tricked by malicious websites
+ *    into making unintentional configuration changes:
+ *
+ *     - Added flag to each cgi_dispatcher that allows or denies
+ *       external linking
+ *     - Introduced proviorical function that greps for the
+ *       referrer header before regular header parsing happens
+ *     - Added safety check to dispatch_known_cgi. CGI is called
+ *       if (cgi harmless || no referrer || we are referrer).
+ *       Else a) toggle calls are modified not to change status and
+ *       b) all other calls are denied.
+ *
+ *    Revision 1.70.2.2  2002/11/12 16:20:37  oes
+ *    Added missing #ifdef FEATURE_TOGGLE around g_bToggleIJB; fixes bug #636651
+ *
+ *    Revision 1.70.2.1  2002/08/05 11:17:46  oes
+ *    Fixed Bug #587820, i.e. added workaround for IE bug that includes fragment identifier in (cgi) query
  *
  *    Revision 1.70  2002/05/19 11:33:20  jongfoster
  *    If a CGI error was not handled, and propogated back to
  *
  *    Revision 1.70  2002/05/19 11:33:20  jongfoster
  *    If a CGI error was not handled, and propogated back to
@@ -428,126 +480,138 @@ const char cgi_rcs[] = "$Id: cgi.c,v 2.3 2002/11/12 16:19:18 oes Exp $";
 #include "cgiedit.h"
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
 #include "loadcfg.h"
 #include "cgiedit.h"
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
 #include "loadcfg.h"
-/* loadcfg.h is for g_bToggleIJB only */
+/* loadcfg.h is for global_toggle_state only */
 #ifdef FEATURE_PTHREAD
 #include <pthread.h>
 #include "jcc.h"
 /* jcc.h is for mutex semaphore globals only */
 #endif /* def FEATURE_PTHREAD */
 #ifdef FEATURE_PTHREAD
 #include <pthread.h>
 #include "jcc.h"
 /* jcc.h is for mutex semaphore globals only */
 #endif /* def FEATURE_PTHREAD */
-
 const char cgi_h_rcs[] = CGI_H_VERSION;
 
 const char cgi_h_rcs[] = CGI_H_VERSION;
 
-/**
- * List of CGI functions: name, handler, description.
+/*
+ * List of CGI functions: name, handler, description
  * Note: Do NOT use single quotes in the description;
  *       this will break the dynamic "blocked" template!
  */
 static const struct cgi_dispatcher cgi_dispatchers[] = {
    { "",
          cgi_default,
  * Note: Do NOT use single quotes in the description;
  *       this will break the dynamic "blocked" template!
  */
 static const struct cgi_dispatcher cgi_dispatchers[] = {
    { "",
          cgi_default,
-         "Privoxy main page" },
+         "Privoxy main page",
+         TRUE },
 #ifdef FEATURE_GRACEFUL_TERMINATION
    { "die", 
          cgi_die,  
          "<b>Shut down</b> - <em class=\"warning\">Do not deploy this build in a production environment, "
 #ifdef FEATURE_GRACEFUL_TERMINATION
    { "die", 
          cgi_die,  
          "<b>Shut down</b> - <em class=\"warning\">Do not deploy this build in a production environment, "
-         "this is a one click Denial Of Service attack!!!</em>" }, 
+        "this is a one click Denial Of Service attack!!!</em>",
+         FALSE }, 
 #endif
    { "show-status", 
          cgi_show_status,  
 #endif
    { "show-status", 
          cgi_show_status,  
-         "View & change the current configuration" }, 
+#ifdef FEATURE_CGI_EDIT_ACTIONS
+        "View & change the current configuration",
+#else
+        "View the current configuration",
+#endif
+         TRUE }, 
    { "show-version", 
          cgi_show_version,  
    { "show-version", 
          cgi_show_version,  
-         "View the source code version numbers" }, 
+         "View the source code version numbers",
+          TRUE }, 
    { "show-request", 
          cgi_show_request,  
    { "show-request", 
          cgi_show_request,  
-         "View the request headers." }, 
+         "View the request headers.",
+         TRUE }, 
    { "show-url-info",
          cgi_show_url_info, 
    { "show-url-info",
          cgi_show_url_info, 
-         "Look up which actions apply to a URL and why"  },
+         "Look up which actions apply to a URL and why",
+         TRUE },
 #ifdef FEATURE_CGI_EDIT_ACTIONS
    { "toggle",
          cgi_toggle, 
 #ifdef FEATURE_CGI_EDIT_ACTIONS
    { "toggle",
          cgi_toggle, 
-         "Toggle Privoxy on or off" },
-
+         "Toggle Privoxy on or off",
+         FALSE },
    { "edit-actions", /* Edit the actions list */
          cgi_edit_actions, 
    { "edit-actions", /* Edit the actions list */
          cgi_edit_actions, 
-         NULL },
+         NULL, FALSE },
    { "eaa", /* Shortcut for edit-actions-add-url-form */
          cgi_edit_actions_add_url_form, 
    { "eaa", /* Shortcut for edit-actions-add-url-form */
          cgi_edit_actions_add_url_form, 
-         NULL },
+         NULL, FALSE },
    { "eau", /* Shortcut for edit-actions-url-form */
          cgi_edit_actions_url_form, 
    { "eau", /* Shortcut for edit-actions-url-form */
          cgi_edit_actions_url_form, 
-         NULL },
+         NULL, FALSE },
    { "ear", /* Shortcut for edit-actions-remove-url-form */
          cgi_edit_actions_remove_url_form, 
    { "ear", /* Shortcut for edit-actions-remove-url-form */
          cgi_edit_actions_remove_url_form, 
-         NULL },
+         NULL, FALSE },
+   { "eal", /* Shortcut for edit-actions-list */
+         cgi_edit_actions_list, 
+         NULL, FALSE },
    { "eafu", /* Shortcut for edit-actions-for-url */
          cgi_edit_actions_for_url, 
    { "eafu", /* Shortcut for edit-actions-for-url */
          cgi_edit_actions_for_url, 
-         NULL },
+         NULL, FALSE },
    { "eas", /* Shortcut for edit-actions-submit */
          cgi_edit_actions_submit, 
    { "eas", /* Shortcut for edit-actions-submit */
          cgi_edit_actions_submit, 
-         NULL },
+         NULL, FALSE },
    { "easa", /* Shortcut for edit-actions-section-add */
          cgi_edit_actions_section_add, 
    { "easa", /* Shortcut for edit-actions-section-add */
          cgi_edit_actions_section_add, 
-         NULL },
+         NULL, FALSE  },
    { "easr", /* Shortcut for edit-actions-section-remove */
          cgi_edit_actions_section_remove, 
    { "easr", /* Shortcut for edit-actions-section-remove */
          cgi_edit_actions_section_remove, 
-         NULL },
+         NULL, FALSE  },
    { "eass", /* Shortcut for edit-actions-section-swap */
          cgi_edit_actions_section_swap, 
    { "eass", /* Shortcut for edit-actions-section-swap */
          cgi_edit_actions_section_swap, 
-         NULL },
+         NULL, FALSE  },
    { "edit-actions-for-url",
          cgi_edit_actions_for_url, 
    { "edit-actions-for-url",
          cgi_edit_actions_for_url, 
-         NULL /* Edit the actions for (a) specified URL(s) */ },
+         NULL, FALSE  /* Edit the actions for (a) specified URL(s) */ },
    { "edit-actions-list",
          cgi_edit_actions_list, 
    { "edit-actions-list",
          cgi_edit_actions_list, 
-         NULL /* Edit the actions list */ },
+         NULL, TRUE /* Edit the actions list */ },
    { "edit-actions-submit",
          cgi_edit_actions_submit, 
    { "edit-actions-submit",
          cgi_edit_actions_submit, 
-         NULL /* Change the actions for (a) specified URL(s) */ },
+         NULL, FALSE /* Change the actions for (a) specified URL(s) */ },
    { "edit-actions-url",
          cgi_edit_actions_url, 
    { "edit-actions-url",
          cgi_edit_actions_url, 
-         NULL /* Change a URL pattern in the actionsfile */ },
+         NULL, FALSE /* Change a URL pattern in the actionsfile */ },
    { "edit-actions-url-form",
          cgi_edit_actions_url_form, 
    { "edit-actions-url-form",
          cgi_edit_actions_url_form, 
-         NULL /* Form to change a URL pattern in the actionsfile */ },
+         NULL, FALSE /* Form to change a URL pattern in the actionsfile */ },
    { "edit-actions-add-url",
          cgi_edit_actions_add_url, 
    { "edit-actions-add-url",
          cgi_edit_actions_add_url, 
-         NULL /* Add a URL pattern to the actionsfile */ },
+         NULL, FALSE /* Add a URL pattern to the actionsfile */ },
    { "edit-actions-add-url-form",
          cgi_edit_actions_add_url_form, 
    { "edit-actions-add-url-form",
          cgi_edit_actions_add_url_form, 
-         NULL /* Form to add a URL pattern to the actionsfile */ },
+         NULL, FALSE /* Form to add a URL pattern to the actionsfile */ },
    { "edit-actions-remove-url",
          cgi_edit_actions_remove_url, 
    { "edit-actions-remove-url",
          cgi_edit_actions_remove_url, 
-         NULL /* Remove a URL pattern from the actionsfile */ },
+         NULL, FALSE /* Remove a URL pattern from the actionsfile */ },
    { "edit-actions-remove-url-form",
          cgi_edit_actions_remove_url_form, 
    { "edit-actions-remove-url-form",
          cgi_edit_actions_remove_url_form, 
-         NULL /* Form to remove a URL pattern from the actionsfile */ },
+         NULL, FALSE /* Form to remove a URL pattern from the actionsfile */ },
    { "edit-actions-section-add",
          cgi_edit_actions_section_add, 
    { "edit-actions-section-add",
          cgi_edit_actions_section_add, 
-         NULL /* Remove a section from the actionsfile */ },
+         NULL, FALSE /* Remove a section from the actionsfile */ },
    { "edit-actions-section-remove",
          cgi_edit_actions_section_remove, 
    { "edit-actions-section-remove",
          cgi_edit_actions_section_remove, 
-         NULL /* Remove a section from the actionsfile */ },
+         NULL, FALSE /* Remove a section from the actionsfile */ },
    { "edit-actions-section-swap",
          cgi_edit_actions_section_swap, 
    { "edit-actions-section-swap",
          cgi_edit_actions_section_swap, 
-         NULL /* Swap two sections in the actionsfile */ },
+         NULL, FALSE /* Swap two sections in the actionsfile */ },
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
    { "robots.txt", 
          cgi_robots_txt,  
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
    { "robots.txt", 
          cgi_robots_txt,  
-         NULL /* Sends a robots.txt file to tell robots to go away. */ }, 
+         NULL, TRUE /* Sends a robots.txt file to tell robots to go away. */ }, 
    { "send-banner",
          cgi_send_banner, 
    { "send-banner",
          cgi_send_banner, 
-         NULL /* Send a built-in image */ },
+         NULL, TRUE /* Send a built-in image */ },
    { "send-stylesheet",
          cgi_send_stylesheet, 
    { "send-stylesheet",
          cgi_send_stylesheet, 
-         NULL /* Send templates/cgi-style.css */ },
+         NULL, TRUE /* Send templates/cgi-style.css */ },
    { "t",
          cgi_transparent_image, 
    { "t",
          cgi_transparent_image, 
-         NULL /* Send a transparent image (short name) */ },
+         NULL, TRUE /* Send a transparent image (short name) */ },
    { NULL, /* NULL Indicates end of list and default page */
          cgi_error_404,
    { NULL, /* NULL Indicates end of list and default page */
          cgi_error_404,
-         NULL /* Unknown CGI page */ }
+         NULL, TRUE /* Unknown CGI page */ }
 };
 
 
 };
 
 
@@ -577,17 +641,15 @@ const char image_pattern_data[] =
  */
 const char image_blank_data[] =
  "\211\120\116\107\015\012\032\012\000\000\000\015\111\110\104\122"
  */
 const char image_blank_data[] =
  "\211\120\116\107\015\012\032\012\000\000\000\015\111\110\104\122"
- "\000\000\000\004\000\000\000\004\010\006\000\000\000\251\361\236"
- "\176\000\000\000\007\164\111\115\105\007\322\003\013\020\073\070"
- "\013\025\036\203\000\000\000\011\160\110\131\163\000\000\013\022"
- "\000\000\013\022\001\322\335\176\374\000\000\000\004\147\101\115"
- "\101\000\000\261\217\013\374\141\005\000\000\000\033\111\104\101"
- "\124\170\332\143\070\161\342\304\207\377\377\377\347\302\150\006"
- "\144\016\210\146\040\250\002\000\042\305\065\221\270\027\131\110"
+ "\000\000\000\001\000\000\000\001\001\003\000\000\000\045\333\126"
+ "\312\000\000\000\003\120\114\124\105\377\377\377\247\304\033\310"
+ "\000\000\000\001\164\122\116\123\000\100\346\330\146\000\000\000"
+ "\001\142\113\107\104\000\210\005\035\110\000\000\000\012\111\104"
+ "\101\124\170\001\143\140\000\000\000\002\000\001\163\165\001\030"
  "\000\000\000\000\111\105\116\104\256\102\140\202";
 #else
 
  "\000\000\000\000\111\105\116\104\256\102\140\202";
 #else
 
-/**
+/*
  * Checkerboard pattern, as a GIF.
  */
 const char image_pattern_data[] =
  * Checkerboard pattern, as a GIF.
  */
 const char image_pattern_data[] =
@@ -597,7 +659,7 @@ const char image_pattern_data[] =
    "\054\000\000\000\000\004\000\004\000\000\002\005\104\174\147"
    "\270\005\000\073";
 
    "\054\000\000\000\000\004\000\004\000\000\002\005\104\174\147"
    "\270\005\000\073";
 
-/**
+/*
  * 1x1 transparant GIF.
  */
 const char image_blank_data[] =
  * 1x1 transparant GIF.
  */
 const char image_blank_data[] =
@@ -606,27 +668,12 @@ const char image_blank_data[] =
    "\000\001\000\000\002\002D\001\000;";
 #endif
 
    "\000\001\000\000\002\002D\001\000;";
 #endif
 
-/**
- * The size of the image_pattern, in bytes.
- */
 const size_t image_pattern_length = sizeof(image_pattern_data) - 1;
 const size_t image_pattern_length = sizeof(image_pattern_data) - 1;
-
-/**
- * The size of the image_blank, in bytes.
- */
 const size_t image_blank_length   = sizeof(image_blank_data) - 1;
 
 
 const size_t image_blank_length   = sizeof(image_blank_data) - 1;
 
 
-/**
- * The "Out of memory" CGI response.  This is statically allocated
- * and is initialized at startup, for obvious reasons.  It's
- * read-only.  finish_http_response() and free_http_response()
- * have been special-cased to do nothing if they are passed
- * this structure.
- */
 static struct http_response cgi_error_memory_response[1];
 
 static struct http_response cgi_error_memory_response[1];
 
-
 static struct http_response *dispatch_known_cgi(struct client_state * csp,
                                                 const char * path);
 static struct map *parse_cgi_parameters(char *argstring);
 static struct http_response *dispatch_known_cgi(struct client_state * csp,
                                                 const char * path);
 static struct map *parse_cgi_parameters(char *argstring);
@@ -683,7 +730,7 @@ struct http_response *dispatch_cgi(struct client_state *csp)
       else if (*path != '\0')
       {
          /*
       else if (*path != '\0')
       {
          /*
-          * wierdness: URL is /configXXX, where XXX is some string
+          * weirdness: URL is /configXXX, where XXX is some string
           * Do *NOT* intercept.
           */
          return NULL;
           * Do *NOT* intercept.
           */
          return NULL;
@@ -703,6 +750,42 @@ struct http_response *dispatch_cgi(struct client_state *csp)
 }
 
 
 }
 
 
+/*********************************************************************
+ *
+ * Function    :  grep_cgi_referrer
+ *
+ * Description :  Ugly provisorical fix that greps the value of the
+ *                referer HTTP header field out of a linked list of
+ *                strings like found at csp->headers. Will disappear
+ *                in Privoxy 3.1.
+ *
+ *                FIXME: csp->headers ought to be csp->http->headers
+ *                FIXME: Parsing all client header lines should
+ *                       happen right after the request is received!
+ *
+ * Parameters  :
+ *          1  :  csp = Current client state (buffers, headers, etc...)
+ *
+ * Returns     :  pointer to value (no copy!), or NULL if none found.
+ *
+ *********************************************************************/
+char *grep_cgi_referrer(struct client_state *csp)
+{
+   struct list_entry *p;
+
+   for (p = csp->headers->first; p != NULL; p = p->next)
+   {
+      if (p->str == NULL) continue;
+      if (strncmpic(p->str, "Referer: ", 9) == 0)
+      {
+         return ((p->str) + 9);
+      }
+   }
+   return NULL;
+
+}
+
+
 /*********************************************************************
  * 
  * Function    :  dispatch_known_cgi
 /*********************************************************************
  * 
  * Function    :  dispatch_known_cgi
@@ -731,6 +814,7 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp,
    struct http_response *rsp;
    char *query_args_start;
    char *path_copy;
    struct http_response *rsp;
    char *query_args_start;
    char *path_copy;
+   char *referrer;
    jb_err err;
 
    if (NULL == (path_copy = strdup(path)))
    jb_err err;
 
    if (NULL == (path_copy = strdup(path)))
@@ -754,7 +838,6 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp,
       return cgi_error_memory();
    }
 
       return cgi_error_memory();
    }
 
-
    /*
     * At this point:
     * path_copy        = CGI call name
    /*
     * At this point:
     * path_copy        = CGI call name
@@ -773,15 +856,45 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp,
    log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 3", 
                             csp->ip_addr_str, csp->http->cmd); 
 
    log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 3", 
                             csp->ip_addr_str, csp->http->cmd); 
 
-   /* Find and start the right CGI function*/
+   /* 
+    * Find and start the right CGI function
+    */
    d = cgi_dispatchers;
    for (;;)
    {
       if ((d->name == NULL) || (strcmp(path_copy, d->name) == 0))
       {
    d = cgi_dispatchers;
    for (;;)
    {
       if ((d->name == NULL) || (strcmp(path_copy, d->name) == 0))
       {
-         err = (d->handler)(csp, rsp, param_list);
+         /*
+          * If the called CGI is either harmless, or referred
+          * from a trusted source, start it.
+          */
+         if (d->harmless
+             || ((NULL != (referrer = grep_cgi_referrer(csp)))
+                 && (0 == strncmp(referrer, "http://config.privoxy.org/", 26)))
+             )
+         {
+            err = (d->handler)(csp, rsp, param_list);
+         }
+         else
+         {
+            /*
+             * Else, modify toggle calls so that they only display
+             * the status, and deny all other calls.
+             */
+            if (0 == strcmp(path_copy, "toggle"))
+            {
+               unmap(param_list, "set");
+               err = (d->handler)(csp, rsp, param_list);
+            }
+            else
+            {
+               err = cgi_error_disabled(csp, rsp);
+            }
+         }
+
          free(path_copy);
          free_map(param_list);
          free(path_copy);
          free_map(param_list);
+
          if (err == JB_ERR_CGI_PARAMS)
          {
             err = cgi_error_bad_param(csp, rsp);
          if (err == JB_ERR_CGI_PARAMS)
          {
             err = cgi_error_bad_param(csp, rsp);
@@ -807,8 +920,8 @@ static struct http_response *dispatch_known_cgi(struct client_state * csp,
       d++;
    }
 }
       d++;
    }
 }
-
-
+   
+        
 /*********************************************************************
  *
  * Function    :  parse_cgi_parameters
 /*********************************************************************
  *
  * Function    :  parse_cgi_parameters
@@ -1135,6 +1248,42 @@ struct http_response *error_response(struct client_state *csp,
 }
 
 
 }
 
 
+/*********************************************************************
+ *
+ * Function    :  cgi_error_disabled
+ *
+ * Description :  CGI function that is called to generate an error
+ *                response if the actions editor or toggle CGI are
+ *                accessed despite having being disabled at compile-
+ *                or run-time.
+ *
+ * Parameters  :
+ *          1  :  csp = Current client state (buffers, headers, etc...)
+ *          2  :  rsp = http_response data structure for output
+ *
+ * CGI Parameters : none
+ *
+ * Returns     :  JB_ERR_OK on success
+ *                JB_ERR_MEMORY on out-of-memory error.
+ *
+ *********************************************************************/
+jb_err cgi_error_disabled(struct client_state *csp,
+                          struct http_response *rsp)
+{
+   struct map *exports;
+
+   assert(csp);
+   assert(rsp);
+
+   if (NULL == (exports = default_exports(csp, NULL)))
+   {
+      return JB_ERR_MEMORY;
+   }
+
+   return template_fill_for_cgi(csp, "cgi-error-disabled", exports, rsp);
+}
+
+
 /*********************************************************************
  *
  * Function    :  cgi_init_error_messages
 /*********************************************************************
  *
  * Function    :  cgi_init_error_messages
@@ -1382,6 +1531,42 @@ jb_err cgi_error_bad_param(struct client_state *csp,
 }
 
 
 }
 
 
+/*********************************************************************
+ *
+ * Function    :  cgi_redirect 
+ *
+ * Description :  CGI support function to generate a HTTP redirect
+ *                message
+ *
+ * Parameters  :
+ *          1  :  rsp = http_response data structure for output
+ *          2  :  target = string with the target URL
+ *
+ * CGI Parameters : None
+ *
+ * Returns     :  JB_ERR_OK on success
+ *                JB_ERR_MEMORY on out-of-memory error.  
+ *
+ *********************************************************************/
+jb_err cgi_redirect (struct http_response * rsp, const char *target)
+{
+   jb_err err;
+
+   assert(rsp);
+   assert(target);
+
+   err = enlist_unique_header(rsp->headers, "Location", target);
+
+   rsp->status = strdup("302 Local Redirect from Privoxy");
+   if (rsp->status == NULL)
+   {
+      return JB_ERR_MEMORY;
+   }
+
+   return err;
+}
+
+
 /*********************************************************************
  *
  * Function    :  add_help_link
 /*********************************************************************
  *
  * Function    :  add_help_link
@@ -1587,7 +1772,7 @@ struct http_response *finish_http_response(struct http_response *rsp)
       get_http_time(0, buf);
       if (!err) err = enlist_unique_header(rsp->headers, "Date", buf);
       if (!err) err = enlist_unique_header(rsp->headers, "Last-Modified", buf);
       get_http_time(0, buf);
       if (!err) err = enlist_unique_header(rsp->headers, "Date", buf);
       if (!err) err = enlist_unique_header(rsp->headers, "Last-Modified", buf);
-      if (!err) err = enlist_unique_header(rsp->headers, "Expires", buf);
+      if (!err) err = enlist_unique_header(rsp->headers, "Expires", "Sat, 17 Jun 2000 12:00:00 GMT");
    }
 
 
    }
 
 
@@ -1989,7 +2174,9 @@ struct map *default_exports(const struct client_state *csp, const char *caller)
    if (!err) err = map(exports, "user-manual",   1, csp->config->usermanual ,1);
    if (!err) err = map(exports, "actions-help-prefix", 1, ACTIONS_HELP_PREFIX ,1);
 #ifdef FEATURE_TOGGLE
    if (!err) err = map(exports, "user-manual",   1, csp->config->usermanual ,1);
    if (!err) err = map(exports, "actions-help-prefix", 1, ACTIONS_HELP_PREFIX ,1);
 #ifdef FEATURE_TOGGLE
-   if (!err) err = map_conditional(exports, "enabled-display", g_bToggleIJB);
+   if (!err) err = map_conditional(exports, "enabled-display", global_toggle_state);
+#else
+   if (!err) err = map_block_killer(exports, "can-toggle");
 #endif
 
    snprintf(buf, 20, "%d", csp->config->hport);
 #endif
 
    snprintf(buf, 20, "%d", csp->config->hport);
diff --git a/src/cgi.h b/cgi.h
similarity index 92%
rename from src/cgi.h
rename to cgi.h
index 813d1e8..ebbc392 100644 (file)
--- a/src/cgi.h
+++ b/cgi.h
@@ -1,9 +1,9 @@
 #ifndef CGI_H_INCLUDED
 #define CGI_H_INCLUDED
 #ifndef CGI_H_INCLUDED
 #define CGI_H_INCLUDED
-#define CGI_H_VERSION "$Id: cgi.h,v 1.29 2002/05/19 11:33:21 jongfoster Exp $"
+#define CGI_H_VERSION "$Id: cgi.h,v 1.29.2.2 2004/02/17 13:30:23 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/cgi.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/cgi.h,v $
  *
  * Purpose     :  Declares functions to intercept request, generate
  *                html or gif answers, and to compose HTTP resonses.
  *
  * Purpose     :  Declares functions to intercept request, generate
  *                html or gif answers, and to compose HTTP resonses.
  *
  * Revisions   :
  *    $Log: cgi.h,v $
  *
  * Revisions   :
  *    $Log: cgi.h,v $
+ *    Revision 1.29.2.2  2004/02/17 13:30:23  oes
+ *    Moved cgi_error_disabled() from cgiedit.c to
+ *    cgi.c to re-enable build with --disable-editor.
+ *    Fixes Bug #892744. Thanks to Matthew Fischer
+ *    for spotting.
+ *
+ *    Revision 1.29.2.1  2003/12/17 16:33:28  oes
+ *    Added prototype of new function cgi_redirect
+ *
  *    Revision 1.29  2002/05/19 11:33:21  jongfoster
  *    If a CGI error was not handled, and propogated back to
  *    dispatch_known_cgi(), then it was assumed to be "out of memory".
  *    Revision 1.29  2002/05/19 11:33:21  jongfoster
  *    If a CGI error was not handled, and propogated back to
  *    dispatch_known_cgi(), then it was assumed to be "out of memory".
@@ -205,12 +214,16 @@ extern jb_err template_fill_for_cgi(struct client_state *csp,
 
 extern void cgi_init_error_messages(void);
 extern struct http_response *cgi_error_memory(void);
 
 extern void cgi_init_error_messages(void);
 extern struct http_response *cgi_error_memory(void);
+extern jb_err cgi_redirect (struct http_response * rsp, const char *target);
+
 extern jb_err cgi_error_no_template(struct client_state *csp,
                                     struct http_response *rsp,
                                     const char *template_name);
 extern jb_err cgi_error_bad_param(struct client_state *csp,
                                   struct http_response *rsp);
 extern jb_err cgi_error_no_template(struct client_state *csp,
                                     struct http_response *rsp,
                                     const char *template_name);
 extern jb_err cgi_error_bad_param(struct client_state *csp,
                                   struct http_response *rsp);
-jb_err cgi_error_unknown(struct client_state *csp,
+extern jb_err cgi_error_disabled(struct client_state *csp,
+                                 struct http_response *rsp);
+extern jb_err cgi_error_unknown(struct client_state *csp,
                          struct http_response *rsp,
                          jb_err error_to_report);
 
                          struct http_response *rsp,
                          jb_err error_to_report);
 
similarity index 94%
rename from src/cgiedit.c
rename to cgiedit.c
index 3f22c23..49e6cf9 100644 (file)
+++ b/cgiedit.c
@@ -1,7 +1,7 @@
-const char cgiedit_rcs[] = "$Id: cgiedit.c,v 2.1 2002/09/04 15:21:18 oes Exp $";
+const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.41.2.12 2006/01/30 15:16:25 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa//current/src/cgiedit.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/cgiedit.c,v $
  *
  * Purpose     :  CGI-based actionsfile editor.
  *
  *
  * Purpose     :  CGI-based actionsfile editor.
  *
@@ -42,16 +42,49 @@ const char cgiedit_rcs[] = "$Id: cgiedit.c,v 2.1 2002/09/04 15:21:18 oes Exp $";
  *
  * Revisions   :
  *    $Log: cgiedit.c,v $
  *
  * Revisions   :
  *    $Log: cgiedit.c,v $
- *    Revision 2.1  2002/09/04 15:21:18  oes
- *    Synced with the stable branch:
- *        Revision 1.41.2.2  2002/08/05 20:02:59  oes
- *        Bugfix: "Insert new section at top" did not work properly if first non-comment line in file was of type FILE_LINE_ACTION
+ *    Revision 1.41.2.12  2006/01/30 15:16:25  david__schmidt
+ *    Remove a little residual debugging info
  *
  *
- *        Revision 1.41.2.1  2002/08/02 12:43:14  oes
- *        Fixed bug #588514: first_time now set on a per-string basis in actions_from_radio; javascriptify now called on copies
+ *    Revision 1.41.2.11  2006/01/29 23:10:56  david__schmidt
+ *    Multiple filter file support
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.41.2.10  2005/07/04 03:13:43  david__schmidt
+ *    Undo some damaging memory leak patches
+ *
+ *    Revision 1.41.2.9  2005/07/04 00:31:04  david__schmidt
+ *    Removing a double free
+ *
+ *    Revision 1.41.2.8  2005/05/07 21:50:54  david__schmidt
+ *    A few memory leaks plugged (mostly on error paths)
+ *
+ *    Revision 1.41.2.7  2004/02/17 13:30:23  oes
+ *    Moved cgi_error_disabled() from cgiedit.c to
+ *    cgi.c to re-enable build with --disable-editor.
+ *    Fixes Bug #892744. Thanks to Matthew Fischer
+ *    for spotting.
+ *
+ *    Revision 1.41.2.6  2003/12/18 08:13:48  oes
+ *    One line lost in last commit
+ *
+ *    Revision 1.41.2.5  2003/12/17 16:33:47  oes
+ *     - All edit functions that redirect back to the list page
+ *       now use cgi_redirect
+ *     - All redirects now contain useless parameter "foo", whose
+ *       value are raw seconds since epoch, in order to force
+ *       Opera and Konqueror to properly reload the list. Closes
+ *       bug #859993
+ *
+ *    Revision 1.41.2.4  2003/03/11 11:53:59  oes
+ *    Cosmetic: Renamed cryptic variable
+ *
+ *    Revision 1.41.2.3  2002/11/12 15:01:41  oes
+ *    Fix: Don't free uninitialized struct editable_file
+ *
+ *    Revision 1.41.2.2  2002/08/05 20:02:59  oes
+ *    Bugfix: "Insert new section at top" did not work properly if first non-comment line in file was of type FILE_LINE_ACTION
+ *
+ *    Revision 1.41.2.1  2002/08/02 12:43:14  oes
+ *    Fixed bug #588514: first_time now set on a per-string basis in actions_from_radio; javascriptify now called on copies
  *
  *    Revision 1.41  2002/05/21 19:09:45  oes
  *     - Made Add/Edit/Remove URL Submit and Cancel
  *
  *    Revision 1.41  2002/05/21 19:09:45  oes
  *     - Made Add/Edit/Remove URL Submit and Cancel
@@ -297,7 +330,7 @@ const char cgiedit_rcs[] = "$Id: cgiedit.c,v 2.1 2002/09/04 15:21:18 oes Exp $";
 #include "errlog.h"
 #include "loaders.h"
 #include "loadcfg.h"
 #include "errlog.h"
 #include "loaders.h"
 #include "loadcfg.h"
-/* loadcfg.h is for g_bToggleIJB only */
+/* loadcfg.h is for global_toggle_state only */
 #include "urlmatch.h"
 
 const char cgiedit_h_rcs[] = CGIEDIT_H_VERSION;
 #include "urlmatch.h"
 
 const char cgiedit_h_rcs[] = CGIEDIT_H_VERSION;
@@ -457,8 +490,6 @@ jb_err cgi_error_file(struct client_state *csp,
 jb_err cgi_error_file_read_only(struct client_state *csp,
                                 struct http_response *rsp,
                                 const char *filename);
 jb_err cgi_error_file_read_only(struct client_state *csp,
                                 struct http_response *rsp,
                                 const char *filename);
-jb_err cgi_error_disabled(struct client_state *csp,
-                          struct http_response *rsp);
 
 /* Internal arbitrary config file support functions */
 static jb_err edit_read_file_lines(FILE *fp, struct file_line ** pfile, int *newline);
 
 /* Internal arbitrary config file support functions */
 static jb_err edit_read_file_lines(FILE *fp, struct file_line ** pfile, int *newline);
@@ -2394,40 +2425,6 @@ jb_err cgi_error_file_read_only(struct client_state *csp,
 }
 
 
 }
 
 
-/*********************************************************************
- *
- * Function    :  cgi_error_disabled
- *
- * Description :  CGI function that is called if the actions editor
- *                is called although it's disabled in config
- *
- * Parameters  :
- *          1  :  csp = Current client state (buffers, headers, etc...)
- *          2  :  rsp = http_response data structure for output
- *
- * CGI Parameters : none
- *
- * Returns     :  JB_ERR_OK on success
- *                JB_ERR_MEMORY on out-of-memory error.
- *
- *********************************************************************/
-jb_err cgi_error_disabled(struct client_state *csp,
-                          struct http_response *rsp)
-{
-   struct map *exports;
-
-   assert(csp);
-   assert(rsp);
-
-   if (NULL == (exports = default_exports(csp, NULL)))
-   {
-      return JB_ERR_MEMORY;
-   }
-
-   return template_fill_for_cgi(csp, "cgi-error-disabled", exports, rsp);
-}
-
-
 /*********************************************************************
  *
  * Function    :  cgi_edit_actions
 /*********************************************************************
  *
  * Function    :  cgi_edit_actions
@@ -2457,20 +2454,9 @@ jb_err cgi_edit_actions(struct client_state *csp,
    }
 
    /* FIXME: Incomplete */
    }
 
    /* FIXME: Incomplete */
-   rsp->status = strdup("302 Local Redirect from Privoxy");
-   if (rsp->status == NULL)
-   {
-      return JB_ERR_MEMORY;
-   }
-   if (enlist_unique_header(rsp->headers, "Location",
-      CGI_PREFIX "edit-actions-list?f=default"))
-   {
-      free(rsp->status);
-      rsp->status = NULL;
-      return JB_ERR_MEMORY;
-   }
 
 
-   return JB_ERR_OK;
+   return cgi_redirect(rsp, CGI_PREFIX "edit-actions-list?f=default");
+
 }
 
 
 }
 
 
@@ -2589,7 +2575,7 @@ jb_err cgi_edit_actions_list(struct client_state *csp,
       }
 
       buttons = strdup("");
       }
 
       buttons = strdup("");
-      for (i = 0; i < MAX_ACTION_FILES; i++)
+      for (i = 0; i < MAX_AF_FILES; i++)
       {
          if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL))
          {
       {
          if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL))
          {
@@ -2987,8 +2973,8 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp,
    struct file_line * cur_line;
    unsigned line_number;
    jb_err err;
    struct file_line * cur_line;
    unsigned line_number;
    jb_err err;
-   struct file_list *filter_file;
    struct re_filterfile_spec *filter_group;
    struct re_filterfile_spec *filter_group;
+   int i, have_filters = 0;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    {
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    {
@@ -3037,10 +3023,15 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp,
 
    if (!err) err = actions_to_radio(exports, cur_line->data.action);
 
 
    if (!err) err = actions_to_radio(exports, cur_line->data.action);
 
-   filter_file = csp->rlist;
-   filter_group = ((filter_file != NULL) ? filter_file->f : NULL);
-
-   if (!err) err = map_conditional(exports, "any-filters-defined", (filter_group != NULL));
+   for (i = 0; i < MAX_AF_FILES; i++)
+   {
+      if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL))
+      {
+         if (!err) err = map_conditional(exports, "any-filters-defined", 1);
+         have_filters = 1;
+         break;
+      }
+   }
 
    if (err)
    {
 
    if (err)
    {
@@ -3049,10 +3040,8 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp,
       return err;
    }
 
       return err;
    }
 
-   if (filter_group == NULL)
-   {
+   if (0 == have_filters)
       err = map(exports, "filter-params", 1, "", 1);
       err = map(exports, "filter-params", 1, "", 1);
-   }
    else
    {
       /* We have some entries in the filter list */
    else
    {
       /* We have some entries in the filter list */
@@ -3076,69 +3065,75 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp,
 
       result = strdup("");
 
 
       result = strdup("");
 
-      for (;(!err) && (filter_group != NULL); filter_group = filter_group->next)
+      for (i = 0; i < MAX_AF_FILES; i++)
       {
       {
-         char current_mode = 'x';
-         struct list_entry *filter_name;
-         char * this_line;
-         struct map *line_exports;
-         char number[20];
-
-         filter_name = cur_line->data.action->multi_add[ACTION_MULTI_FILTER]->first;
-         while ((filter_name != NULL)
-             && (0 != strcmp(filter_group->name, filter_name->str)))
+         if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL))
          {
          {
-              filter_name = filter_name->next;
-         }
-
-         if (filter_name != NULL)
-         {
-            current_mode = 'y';
-         }
-         else
-         {
-            filter_name = cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]->first;
-            while ((filter_name != NULL)
-                && (0 != strcmp(filter_group->name, filter_name->str)))
-            {
-                 filter_name = filter_name->next;
-            }
-            if (filter_name != NULL)
+            filter_group = csp->rlist[i]->f;
+            for (;(!err) && (filter_group != NULL); filter_group = filter_group->next)
             {
             {
-               current_mode = 'n';
-            }
-         }
+               char current_mode = 'x';
+               struct list_entry *filter_name;
+               char * this_line;
+               struct map *line_exports;
+               char number[20];
+
+               filter_name = cur_line->data.action->multi_add[ACTION_MULTI_FILTER]->first;
+               while ((filter_name != NULL)
+                   && (0 != strcmp(filter_group->name, filter_name->str)))
+               {
+                    filter_name = filter_name->next;
+               }
 
 
-         /* Generate a unique serial number */
-         snprintf(number, sizeof(number), "%x", index++);
-         number[sizeof(number) - 1] = '\0';
+               if (filter_name != NULL)
+               {
+                  current_mode = 'y';
+               }
+               else
+               {
+                  filter_name = cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]->first;
+                  while ((filter_name != NULL)
+                      && (0 != strcmp(filter_group->name, filter_name->str)))
+                  {
+                       filter_name = filter_name->next;
+                  }
+                  if (filter_name != NULL)
+                  {
+                     current_mode = 'n';
+                  }
+               }
 
 
-         line_exports = new_map();
-         if (line_exports == NULL)
-         {
-            err = JB_ERR_MEMORY;
-            freez(result);
-         }
-         else
-         {
-            if (!err) err = map(line_exports, "index", 1, number, 1);
-            if (!err) err = map(line_exports, "name",  1, filter_group->name, 1);
-            if (!err) err = map(line_exports, "description",  1, filter_group->description, 1);
-            if (!err) err = map_radio(line_exports, "this-filter", "ynx", current_mode);
+               /* Generate a unique serial number */
+               snprintf(number, sizeof(number), "%x", index++);
+               number[sizeof(number) - 1] = '\0';
 
 
-            this_line = NULL;
-            if (!err)
-            {
-               this_line = strdup(filter_template);
-               if (this_line == NULL) err = JB_ERR_MEMORY;
-            }
-            if (!err) err = template_fill(&this_line, line_exports);
-            string_join(&result, this_line);
+               line_exports = new_map();
+               if (line_exports == NULL)
+               {
+                  err = JB_ERR_MEMORY;
+                  freez(result);
+               }
+               else
+               {
+                  if (!err) err = map(line_exports, "index", 1, number, 1);
+                  if (!err) err = map(line_exports, "name",  1, filter_group->name, 1);
+                  if (!err) err = map(line_exports, "description",  1, filter_group->description, 1);
+                  if (!err) err = map_radio(line_exports, "this-filter", "ynx", current_mode);
+
+                  this_line = NULL;
+                  if (!err)
+                  {
+                     this_line = strdup(filter_template);
+                     if (this_line == NULL) err = JB_ERR_MEMORY;
+                  }
+                  if (!err) err = template_fill(&this_line, line_exports);
+                  string_join(&result, this_line);
 
 
-            free_map(line_exports);
+                  free_map(line_exports);
+               }
+            }
          }
       }
          }
       }
-
       freez(filter_template);
 
       if (!err)
       freez(filter_template);
 
       if (!err)
@@ -3196,7 +3191,7 @@ jb_err cgi_edit_actions_submit(struct client_state *csp,
    struct editable_file * file;
    struct file_line * cur_line;
    unsigned line_number;
    struct editable_file * file;
    struct file_line * cur_line;
    unsigned line_number;
-   char * target;
+   char target[1024];
    jb_err err;
    int index;
    const char * action_set_name;
    jb_err err;
    int index;
    const char * action_set_name;
@@ -3242,7 +3237,7 @@ jb_err cgi_edit_actions_submit(struct client_state *csp,
    get_string_param(parameters, "p", &action_set_name);
    if (action_set_name != NULL)
    {
    get_string_param(parameters, "p", &action_set_name);
    if (action_set_name != NULL)
    {
-      for (index = 0; index < MAX_ACTION_FILES; index++)
+      for (index = 0; index < MAX_AF_FILES; index++)
       {
          if (((fl = csp->actions_list[index]) != NULL) && ((b = fl->f) != NULL))
          {
       {
          if (((fl = csp->actions_list[index]) != NULL) && ((b = fl->f) != NULL))
          {
@@ -3384,29 +3379,12 @@ jb_err cgi_edit_actions_submit(struct client_state *csp,
       return err;
    }
 
       return err;
    }
 
-   target = strdup(CGI_PREFIX "edit-actions-list?f=");
-   string_append(&target, file->identifier);
-   string_join(&target, section_target(sectionid));
-
+   snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s#l%d",
+            (long) time(NULL), file->identifier, sectionid);
 
    edit_free_file(file);
 
 
    edit_free_file(file);
 
-   if (target == NULL)
-   {
-      /* Out of memory */
-      return JB_ERR_MEMORY;
-   }
-
-   rsp->status = strdup("302 Local Redirect from Privoxy");
-   if (rsp->status == NULL)
-   {
-      free(target);
-      return JB_ERR_MEMORY;
-   }
-   err = enlist_unique_header(rsp->headers, "Location", target);
-   free(target);
-
-   return err;
+   return cgi_redirect(rsp, target);
 }
 
 
 }
 
 
@@ -3445,9 +3423,13 @@ jb_err cgi_edit_actions_url(struct client_state *csp,
    struct file_line * cur_line;
    unsigned line_number;
    unsigned section_start_line_number = 0;
    struct file_line * cur_line;
    unsigned line_number;
    unsigned section_start_line_number = 0;
-   char * target;
+   char target[1024];
    jb_err err;
 
    jb_err err;
 
+   assert(csp);
+   assert(rsp);
+   assert(parameters);
+
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    {
       return cgi_error_disabled(csp, rsp);
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    {
       return cgi_error_disabled(csp, rsp);
@@ -3518,28 +3500,12 @@ jb_err cgi_edit_actions_url(struct client_state *csp,
       return err;
    }
 
       return err;
    }
 
-   target = strdup(CGI_PREFIX "edit-actions-list?f=");
-   string_append(&target, file->identifier);
-   string_join(&target, section_target(section_start_line_number));
+   snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s#l%d",
+            (long) time(NULL), file->identifier, section_start_line_number);
 
    edit_free_file(file);
 
 
    edit_free_file(file);
 
-   if (target == NULL)
-   {
-      /* Out of memory */
-      return JB_ERR_MEMORY;
-   }
-
-   rsp->status = strdup("302 Local Redirect from Privoxy");
-   if (rsp->status == NULL)
-   {
-      free(target);
-      return JB_ERR_MEMORY;
-   }
-   err = enlist_unique_header(rsp->headers, "Location", target);
-   free(target);
-
-   return err;
+   return cgi_redirect(rsp, target);
 }
 
 
 }
 
 
@@ -3577,7 +3543,7 @@ jb_err cgi_edit_actions_add_url(struct client_state *csp,
    struct editable_file * file;
    struct file_line * cur_line;
    unsigned line_number;
    struct editable_file * file;
    struct file_line * cur_line;
    unsigned line_number;
-   char * target;
+   char target[1024];
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
@@ -3663,28 +3629,12 @@ jb_err cgi_edit_actions_add_url(struct client_state *csp,
       return err;
    }
 
       return err;
    }
 
-   target = strdup(CGI_PREFIX "edit-actions-list?f=");
-   string_append(&target, file->identifier);
-   string_join(&target, section_target(sectionid));
+   snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s#l%d",
+            (long) time(NULL), file->identifier, sectionid);
 
    edit_free_file(file);
 
 
    edit_free_file(file);
 
-   if (target == NULL)
-   {
-      /* Out of memory */
-      return JB_ERR_MEMORY;
-   }
-
-   rsp->status = strdup("302 Local Redirect from Privoxy");
-   if (rsp->status == NULL)
-   {
-      free(target);
-      return JB_ERR_MEMORY;
-   }
-   err = enlist_unique_header(rsp->headers, "Location", target);
-   free(target);
-
-   return err;
+   return cgi_redirect(rsp, target);
 }
 
 
 }
 
 
@@ -3721,7 +3671,7 @@ jb_err cgi_edit_actions_remove_url(struct client_state *csp,
    struct file_line * prev_line;
    unsigned line_number;
    unsigned section_start_line_number = 0;
    struct file_line * prev_line;
    unsigned line_number;
    unsigned section_start_line_number = 0;
-   char * target;
+   char target[1024];
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
@@ -3790,28 +3740,12 @@ jb_err cgi_edit_actions_remove_url(struct client_state *csp,
       return err;
    }
 
       return err;
    }
 
-   target = strdup(CGI_PREFIX "edit-actions-list?f=");
-   string_append(&target, file->identifier);
-   string_join(&target, section_target(section_start_line_number));
+   snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s#l%d",
+            (long) time(NULL), file->identifier, section_start_line_number);
 
    edit_free_file(file);
 
 
    edit_free_file(file);
 
-   if (target == NULL)
-   {
-      /* Out of memory */
-      return JB_ERR_MEMORY;
-   }
-
-   rsp->status = strdup("302 Local Redirect from Privoxy");
-   if (rsp->status == NULL)
-   {
-      free(target);
-      return JB_ERR_MEMORY;
-   }
-   err = enlist_unique_header(rsp->headers, "Location", target);
-   free(target);
-
-   return err;
+   return cgi_redirect(rsp, target);
 }
 
 
 }
 
 
@@ -3848,7 +3782,7 @@ jb_err cgi_edit_actions_section_remove(struct client_state *csp,
    struct file_line * cur_line;
    struct file_line * prev_line;
    unsigned line_number;
    struct file_line * cur_line;
    struct file_line * prev_line;
    unsigned line_number;
-   char * target;
+   char target[1024];
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
@@ -3928,27 +3862,12 @@ jb_err cgi_edit_actions_section_remove(struct client_state *csp,
       return err;
    }
 
       return err;
    }
 
-   target = strdup(CGI_PREFIX "edit-actions-list?f=");
-   string_append(&target, file->identifier);
+   snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s",
+            (long) time(NULL), file->identifier);
 
    edit_free_file(file);
 
 
    edit_free_file(file);
 
-   if (target == NULL)
-   {
-      /* Out of memory */
-      return JB_ERR_MEMORY;
-   }
-
-   rsp->status = strdup("302 Local Redirect from Privoxy");
-   if (rsp->status == NULL)
-   {
-      free(target);
-      return JB_ERR_MEMORY;
-   }
-   err = enlist_unique_header(rsp->headers, "Location", target);
-   free(target);
-
-   return err;
+   return cgi_redirect(rsp, target);
 }
 
 
 }
 
 
@@ -3986,7 +3905,7 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp,
    struct editable_file * file;
    struct file_line * cur_line;
    unsigned line_number;
    struct editable_file * file;
    struct file_line * cur_line;
    unsigned line_number;
-   char * target;
+   char target[1024];
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
@@ -4112,27 +4031,12 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp,
       return err;
    }
 
       return err;
    }
 
-   target = strdup(CGI_PREFIX "edit-actions-list?f=");
-   string_append(&target, file->identifier);
+   snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s",
+            (long) time(NULL), file->identifier);
 
    edit_free_file(file);
 
 
    edit_free_file(file);
 
-   if (target == NULL)
-   {
-      /* Out of memory */
-      return JB_ERR_MEMORY;
-   }
-
-   rsp->status = strdup("302 Local Redirect from Privoxy");
-   if (rsp->status == NULL)
-   {
-      free(target);
-      return JB_ERR_MEMORY;
-   }
-   err = enlist_unique_header(rsp->headers, "Location", target);
-   free(target);
-
-   return err;
+   return cgi_redirect(rsp, target);
 }
 
 
 }
 
 
@@ -4181,7 +4085,7 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp,
    struct file_line * line_end_section2;
    struct file_line * line_after_section2;
    unsigned line_number;
    struct file_line * line_end_section2;
    struct file_line * line_after_section2;
    unsigned line_number;
-   char * target;
+   char target[1024];
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
    jb_err err;
 
    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
@@ -4316,27 +4220,12 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp,
       }
    } /* END if (section1 != section2) */
 
       }
    } /* END if (section1 != section2) */
 
-   target = strdup(CGI_PREFIX "edit-actions-list?f=");
-   string_append(&target, file->identifier);
+   snprintf(target, 1024, CGI_PREFIX "edit-actions-list?foo=%lu&f=%s",
+            (long) time(NULL), file->identifier);
 
    edit_free_file(file);
 
 
    edit_free_file(file);
 
-   if (target == NULL)
-   {
-      /* Out of memory */
-      return JB_ERR_MEMORY;
-   }
-
-   rsp->status = strdup("302 Local Redirect from Privoxy");
-   if (rsp->status == NULL)
-   {
-      free(target);
-      return JB_ERR_MEMORY;
-   }
-   err = enlist_unique_header(rsp->headers, "Location", target);
-   free(target);
-
-   return err;
+   return cgi_redirect(rsp, target);
 }
 
 
 }
 
 
@@ -4383,17 +4272,17 @@ jb_err cgi_toggle(struct client_state *csp,
    if (mode == 'E')
    {
       /* Enable */
    if (mode == 'E')
    {
       /* Enable */
-      g_bToggleIJB = 1;
+      global_toggle_state = 1;
    }
    else if (mode == 'D')
    {
       /* Disable */
    }
    else if (mode == 'D')
    {
       /* Disable */
-      g_bToggleIJB = 0;
+      global_toggle_state = 0;
    }
    else if (mode == 'T')
    {
       /* Toggle */
    }
    else if (mode == 'T')
    {
       /* Toggle */
-      g_bToggleIJB = !g_bToggleIJB;
+      global_toggle_state = !global_toggle_state;
    }
 
    if (NULL == (exports = default_exports(csp, "toggle")))
    }
 
    if (NULL == (exports = default_exports(csp, "toggle")))
similarity index 91%
rename from src/cgiedit.h
rename to cgiedit.h
index 821b528..7bb344d 100644 (file)
+++ b/cgiedit.h
@@ -1,9 +1,9 @@
 #ifndef CGIEDIT_H_INCLUDED
 #define CGIEDIT_H_INCLUDED
 #ifndef CGIEDIT_H_INCLUDED
 #define CGIEDIT_H_INCLUDED
-#define CGIEDIT_H_VERSION "$Id: cgiedit.h,v 1.7 2002/03/26 22:29:54 swa Exp $"
+#define CGIEDIT_H_VERSION "$Id: cgiedit.h,v 1.7.2.2 2004/02/17 13:30:23 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/cgiedit.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/cgiedit.h,v $
  *
  * Purpose     :  CGI-based actionsfile editor.
  *                
  *
  * Purpose     :  CGI-based actionsfile editor.
  *                
  *
  * Revisions   :
  *    $Log: cgiedit.h,v $
  *
  * Revisions   :
  *    $Log: cgiedit.h,v $
+ *    Revision 1.7.2.2  2004/02/17 13:30:23  oes
+ *    Moved cgi_error_disabled() from cgiedit.c to
+ *    cgi.c to re-enable build with --disable-editor.
+ *    Fixes Bug #892744. Thanks to Matthew Fischer
+ *    for spotting.
+ *
+ *    Revision 1.7.2.1  2002/11/28 18:15:17  oes
+ *    Added cgi_error_disabled
+ *
  *    Revision 1.7  2002/03/26 22:29:54  swa
  *    we have a new homepage!
  *
  *    Revision 1.7  2002/03/26 22:29:54  swa
  *    we have a new homepage!
  *
@@ -134,9 +143,9 @@ extern jb_err cgi_edit_actions_section_add   (struct client_state *csp,
 extern jb_err cgi_edit_actions_section_swap  (struct client_state *csp,
                                               struct http_response *rsp,
                                               const struct map *parameters);
 extern jb_err cgi_edit_actions_section_swap  (struct client_state *csp,
                                               struct http_response *rsp,
                                               const struct map *parameters);
-extern jb_err cgi_toggle(struct client_state *csp,
-                         struct http_response *rsp,
-                         const struct map *parameters);
+extern jb_err cgi_toggle        (struct client_state *csp,
+                                 struct http_response *rsp,
+                                 const struct map *parameters);
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
 
 
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
 
 
similarity index 93%
rename from src/cgisimple.c
rename to cgisimple.c
index 92d0e3f..3db9ab1 100644 (file)
@@ -1,7 +1,7 @@
-const char cgisimple_rcs[] = "$Id: cgisimple.c,v 2.2 2002/12/28 03:58:19 david__schmidt Exp $";
+const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.35.2.7 2006/01/29 23:10:56 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/cgisimple.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/cgisimple.c,v $
  *
  * Purpose     :  Simple CGIs to get information about Privoxy's
  *                status.
  *
  * Purpose     :  Simple CGIs to get information about Privoxy's
  *                status.
@@ -36,15 +36,33 @@ const char cgisimple_rcs[] = "$Id: cgisimple.c,v 2.2 2002/12/28 03:58:19 david__
  *
  * Revisions   :
  *    $Log: cgisimple.c,v $
  *
  * Revisions   :
  *    $Log: cgisimple.c,v $
- *    Revision 2.2  2002/12/28 03:58:19  david__schmidt
- *    Initial drop of dashboard instrumentation - enabled with
- *    --enable-activity-console
+ *    Revision 1.35.2.7  2006/01/29 23:10:56  david__schmidt
+ *    Multiple filter file support
  *
  *
- *    Revision 2.1  2002/07/04 14:35:05  oes
+ *    Revision 1.35.2.6  2005/07/04 03:13:43  david__schmidt
+ *    Undo some damaging memory leak patches
+ *
+ *    Revision 1.35.2.5  2005/05/07 21:50:55  david__schmidt
+ *    A few memory leaks plugged (mostly on error paths)
+ *
+ *    Revision 1.35.2.4  2005/04/04 02:21:24  david__schmidt
+ *    Another instance of:
+ *    Don't show "Edit" buttons #ifndef FEATURE_CGI_EDIT_ACTIONS
+ *    Thanks to Magnus Holmgren for the patch
+ *
+ *    Revision 1.35.2.3  2003/12/17 16:34:15  oes
+ *     - Prevent line wrap beween "View/Edit" link buttons on status page
+ *     - Some (mostly irrelevant) fixes for Out-of-mem-case handling
+ *
+ *    Revision 1.35.2.2  2003/04/03 13:48:28  oes
+ *    Don't show "Edit" buttons #ifndef FEATURE_CGI_EDIT_ACTIONS
+ *
+ *    Revision 1.35.2.1  2002/07/04 15:02:38  oes
  *    Added ability to send redirects to send-banner CGI, so that it can completely mimic the image blocking action if called with type=auto
  *
  *    Added ability to send redirects to send-banner CGI, so that it can completely mimic the image blocking action if called with type=auto
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.35.2.1  2002/07/01 17:32:04  morcego
+ *    Applying patch from Andreas as provided by Hal on the list.
+ *    Message-ID: <20020701121218.V1606@feenix.burgiss.net>
  *
  *    Revision 1.35  2002/05/12 21:44:44  jongfoster
  *    Adding amiga.[ch] revision information, if on an amiga.
  *
  *    Revision 1.35  2002/05/12 21:44:44  jongfoster
  *    Adding amiga.[ch] revision information, if on an amiga.
@@ -442,7 +460,6 @@ jb_err cgi_send_banner(struct client_state *csp,
                        const struct map *parameters)
 {
    char imagetype = lookup(parameters, "type")[0];
                        const struct map *parameters)
 {
    char imagetype = lookup(parameters, "type")[0];
-   char *image_mimetype = BUILTIN_IMAGE_MIMETYPE;
 
    /*
     * If type is auto, then determine the right thing
 
    /*
     * If type is auto, then determine the right thing
@@ -474,10 +491,6 @@ jb_err cgi_send_banner(struct client_state *csp,
          {
             imagetype = 'p';
          }
          {
             imagetype = 'p';
          }
-         else if (0 == strcmpic(p, "custom"))
-         {
-            imagetype = 'c';
-         }
 
          /*
           * If the action is to call this CGI, determine
 
          /*
           * If the action is to call this CGI, determine
@@ -530,12 +543,6 @@ jb_err cgi_send_banner(struct client_state *csp,
          rsp->body = bindup(image_blank_data, image_blank_length);
          rsp->content_length = image_blank_length;
       }
          rsp->body = bindup(image_blank_data, image_blank_length);
          rsp->content_length = image_blank_length;
       }
-      else if (imagetype == 'c')
-      {
-         rsp->body = bindup(csp->config->image_blocker_data, csp->config->image_blocker_length);
-         rsp->content_length = csp->config->image_blocker_length;
-         image_mimetype = csp->config->image_blocker_format;
-      }
       else
       {
          rsp->body = bindup(image_pattern_data, image_pattern_length);
       else
       {
          rsp->body = bindup(image_pattern_data, image_pattern_length);
@@ -546,11 +553,7 @@ jb_err cgi_send_banner(struct client_state *csp,
       {
          return JB_ERR_MEMORY;
       }
       {
          return JB_ERR_MEMORY;
       }
-      if (enlist(rsp->headers, "Content-Type: "))
-      {
-         return JB_ERR_MEMORY;
-      }
-      if (enlist(rsp->headers, image_mimetype))
+      if (enlist(rsp->headers, "Content-Type: " BUILTIN_IMAGE_MIMETYPE))
       {
          return JB_ERR_MEMORY;
       }
       {
          return JB_ERR_MEMORY;
       }
@@ -757,7 +760,7 @@ jb_err cgi_show_status(struct client_state *csp,
    switch (*(lookup(parameters, "file")))
    {
    case 'a':
    switch (*(lookup(parameters, "file")))
    {
    case 'a':
-      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_ACTION_FILES && csp->actions_list[i])
+      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->actions_list[i])
       {
          filename = csp->actions_list[i]->filename;
          file_description = "Actions File";
       {
          filename = csp->actions_list[i]->filename;
          file_description = "Actions File";
@@ -765,9 +768,9 @@ jb_err cgi_show_status(struct client_state *csp,
       break;
 
    case 'f':
       break;
 
    case 'f':
-      if (csp->rlist)
+      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->rlist[i])
       {
       {
-         filename = csp->rlist->filename;
+         filename = csp->rlist[i]->filename;
          file_description = "Filter File";
       }
       break;
          file_description = "Filter File";
       }
       break;
@@ -882,19 +885,19 @@ jb_err cgi_show_status(struct client_state *csp,
     * FIXME: Shouldn't include hardwired HTML here, use line template instead!
     */
    s = strdup("");
     * FIXME: Shouldn't include hardwired HTML here, use line template instead!
     */
    s = strdup("");
-   for (i = 0; i < MAX_ACTION_FILES; i++)
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
       if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL))
       {
          if (!err) err = string_append(&s, "<tr><td>");
          if (!err) err = string_join(&s, html_encode(csp->actions_list[i]->filename));
    {
       if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL))
       {
          if (!err) err = string_append(&s, "<tr><td>");
          if (!err) err = string_join(&s, html_encode(csp->actions_list[i]->filename));
-         snprintf(buf, 100, "</td><td class=\"buttons\"><a href=\"/show-status?file=actions&index=%d\">View</a> ", i);
+         snprintf(buf, 100, "</td><td class=\"buttons\"><a href=\"/show-status?file=actions&index=%d\">View</a>", i);
          if (!err) err = string_append(&s, buf);
 
 #ifdef FEATURE_CGI_EDIT_ACTIONS
          if (NULL == strstr(csp->actions_list[i]->filename, "standard.action") && NULL != csp->config->actions_file_short[i])
          {
          if (!err) err = string_append(&s, buf);
 
 #ifdef FEATURE_CGI_EDIT_ACTIONS
          if (NULL == strstr(csp->actions_list[i]->filename, "standard.action") && NULL != csp->config->actions_file_short[i])
          {
-            snprintf(buf, 100, "<a href=\"/edit-actions-list?f=%s\">Edit</a>", csp->config->actions_file_short[i]);
+            snprintf(buf, 100, "&nbsp;&nbsp;<a href=\"/edit-actions-list?f=%s\">Edit</a>", csp->config->actions_file_short[i]);
             if (!err) err = string_append(&s, buf);
          }
 #endif
             if (!err) err = string_append(&s, buf);
          }
 #endif
@@ -911,13 +914,29 @@ jb_err cgi_show_status(struct client_state *csp,
       if (!err) err = map(exports, "actions-filenames", 1, "<tr><td>None specified</td></tr>", 1);
    }
 
       if (!err) err = map(exports, "actions-filenames", 1, "<tr><td>None specified</td></tr>", 1);
    }
 
-   if (csp->rlist)
+   /* 
+    * List all re_filterfiles in use, together with view options.
+    * FIXME: Shouldn't include hardwired HTML here, use line template instead!
+    */
+   s = strdup("");
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
    {
-      if (!err) err = map(exports, "re-filter-filename", 1, html_encode(csp->rlist->filename), 0);
+      if (((fl = csp->rlist[i]) != NULL) && ((b = fl->f) != NULL))
+      {
+         if (!err) err = string_append(&s, "<tr><td>");
+         if (!err) err = string_join(&s, html_encode(csp->rlist[i]->filename));
+         snprintf(buf, 100, "</td><td class=\"buttons\"><a href=\"/show-status?file=filter&index=%d\">View</a>", i);
+         if (!err) err = string_append(&s, buf);
+         if (!err) err = string_append(&s, "</td></tr>\n");
+      }
+   }
+   if (*s != '\0')   
+   {
+      if (!err) err = map(exports, "re-filter-filename", 1, s, 0);
    }
    else
    {
    }
    else
    {
-      if (!err) err = map(exports, "re-filter-filename", 1, "None specified", 1);
+      if (!err) err = map(exports, "re-filter-filename", 1, "<tr><td>None specified</td></tr>", 1);
       if (!err) err = map_block_killer(exports, "have-filterfile");
    }
 
       if (!err) err = map_block_killer(exports, "have-filterfile");
    }
 
@@ -1094,6 +1113,7 @@ jb_err cgi_show_url_info(struct client_state *csp,
 
       if (err == JB_ERR_MEMORY)
       {
 
       if (err == JB_ERR_MEMORY)
       {
+         free_http_request(url_to_query);
          free_current_action(action);
          free_map(exports);
          return JB_ERR_MEMORY;
          free_current_action(action);
          free_map(exports);
          return JB_ERR_MEMORY;
@@ -1106,6 +1126,7 @@ jb_err cgi_show_url_info(struct client_state *csp,
          if (!err) err = map(exports, "final", 1, lookup(exports, "default"), 1);
 
          free_current_action(action);
          if (!err) err = map(exports, "final", 1, lookup(exports, "default"), 1);
 
          free_current_action(action);
+         free_http_request(url_to_query);
 
          if (err)
          {
 
          if (err)
          {
@@ -1125,13 +1146,14 @@ jb_err cgi_show_url_info(struct client_state *csp,
          {
             free_current_action(action);
             free_map(exports);
          {
             free_current_action(action);
             free_map(exports);
+            free_http_request(url_to_query);
             return JB_ERR_MEMORY;
          }
       }
 
       matches = strdup("<table class=\"transparent\">");
 
             return JB_ERR_MEMORY;
          }
       }
 
       matches = strdup("<table class=\"transparent\">");
 
-      for (i = 0; i < MAX_ACTION_FILES; i++)
+      for (i = 0; i < MAX_AF_FILES; i++)
       {
          if (NULL == csp->config->actions_file_short[i]
              || !strcmp(csp->config->actions_file_short[i], "standard")) continue;
       {
          if (NULL == csp->config->actions_file_short[i]
              || !strcmp(csp->config->actions_file_short[i], "standard")) continue;
@@ -1147,9 +1169,13 @@ jb_err cgi_show_url_info(struct client_state *csp,
                string_join  (&matches, html_encode(csp->config->actions_file_short[i]));
                snprintf(buf, 150, ".action <a class=\"cmd\" href=\"/show-status?file=actions&index=%d\">", i);
                string_append(&matches, buf);
                string_join  (&matches, html_encode(csp->config->actions_file_short[i]));
                snprintf(buf, 150, ".action <a class=\"cmd\" href=\"/show-status?file=actions&index=%d\">", i);
                string_append(&matches, buf);
-               string_append(&matches, "View</a> <a class=\"cmd\" href=\"/edit-actions-list?f=");
+               string_append(&matches, "View</a>");
+#ifdef FEATURE_CGI_EDIT_ACTIONS
+               string_append(&matches, " <a class=\"cmd\" href=\"/edit-actions-list?f=");
                string_join  (&matches, html_encode(csp->config->actions_file_short[i]));
                string_join  (&matches, html_encode(csp->config->actions_file_short[i]));
-               string_append(&matches, "\">Edit</a></th></tr>\n");
+               string_append(&matches, "\">Edit</a>");
+#endif
+               string_append(&matches, "</th></tr>\n");
 
                hits = 0;
                b = b->next;
 
                hits = 0;
                b = b->next;
@@ -1434,9 +1460,6 @@ static char *show_rcs(void)
    SHOW_RCS(filters_rcs)
    SHOW_RCS(gateway_h_rcs)
    SHOW_RCS(gateway_rcs)
    SHOW_RCS(filters_rcs)
    SHOW_RCS(gateway_h_rcs)
    SHOW_RCS(gateway_rcs)
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   SHOW_RCS(ipc_h_rcs)
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
    SHOW_RCS(jbsockets_h_rcs)
    SHOW_RCS(jbsockets_rcs)
    SHOW_RCS(jcc_h_rcs)
    SHOW_RCS(jbsockets_h_rcs)
    SHOW_RCS(jbsockets_rcs)
    SHOW_RCS(jcc_h_rcs)
@@ -1460,10 +1483,6 @@ static char *show_rcs(void)
    SHOW_RCS(project_h_rcs)
    SHOW_RCS(ssplit_h_rcs)
    SHOW_RCS(ssplit_rcs)
    SHOW_RCS(project_h_rcs)
    SHOW_RCS(ssplit_h_rcs)
    SHOW_RCS(ssplit_rcs)
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   SHOW_RCS(stats_h_rcs)
-   SHOW_RCS(stats_rcs)
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
    SHOW_RCS(urlmatch_h_rcs)
    SHOW_RCS(urlmatch_rcs)
 #ifdef _WIN32
    SHOW_RCS(urlmatch_h_rcs)
    SHOW_RCS(urlmatch_rcs)
 #ifdef _WIN32
similarity index 98%
rename from src/cgisimple.h
rename to cgisimple.h
index 8f36749..2bfe562 100644 (file)
@@ -3,7 +3,7 @@
 #define CGISIMPLE_H_VERSION "$Id: cgisimple.h,v 1.11 2002/04/05 15:50:53 oes Exp $"
 /*********************************************************************
  *
 #define CGISIMPLE_H_VERSION "$Id: cgisimple.h,v 1.11 2002/04/05 15:50:53 oes Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/cgisimple.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/cgisimple.h,v $
  *
  * Purpose     :  Declares functions to intercept request, generate
  *                html or gif answers, and to compose HTTP resonses.
  *
  * Purpose     :  Declares functions to intercept request, generate
  *                html or gif answers, and to compose HTTP resonses.
diff --git a/config b/config
index 5aac5a3..daee979 100644 (file)
--- a/config
+++ b/config
@@ -1,9 +1,9 @@
-#        Sample Configuration File for Privoxy v3.1.1
-#
-#  Copyright (C) 2001, 2002 Privoxy Developers http://privoxy.org
-#
-#  $Id: config,v 1.45 2003/09/22 00:33:01 david__schmidt Exp $
-#
+#        Sample Configuration File for Privoxy v3.0.x
+#  
+#  Copyright (C) 2001-2004 Privoxy Developers http://privoxy.org
+#  
+#  $Id: config,v 1.39.2.17 2006/01/31 11:52:32 david__schmidt Exp $
+#  
 ####################################################################
 #                                                                  #
 #                      Table of Contents                           #
 ####################################################################
 #                                                                  #
 #                      Table of Contents                           #
 #        6. WINDOWS GUI OPTIONS                                    #
 #                                                                  #
 ####################################################################
 #        6. WINDOWS GUI OPTIONS                                    #
 #                                                                  #
 ####################################################################
-#
-#
+#  
+#  
 #  I. INTRODUCTION
 #   ===============
 #  I. INTRODUCTION
 #   ===============
-#
+#  
 #  This file holds the Privoxy configuration. If you modify this file,
 #  you will need to send a couple of requests to the proxy before any
 #  changes take effect.
 #  This file holds the Privoxy configuration. If you modify this file,
 #  you will need to send a couple of requests to the proxy before any
 #  changes take effect.
-#
+#  
 #  When starting Privoxy on Unix systems, give the name of this file as
 #  an argument. On Windows systems, Privoxy will look for this file
 #  with the name 'config.txt' in the same directory where Privoxy
 #  is installed.
 #  When starting Privoxy on Unix systems, give the name of this file as
 #  an argument. On Windows systems, Privoxy will look for this file
 #  with the name 'config.txt' in the same directory where Privoxy
 #  is installed.
-#
-#
+#  
+#  
 #  II. FORMAT OF THE CONFIGURATION FILE
 #  ====================================
 #  II. FORMAT OF THE CONFIGURATION FILE
 #  ====================================
-#
+#  
 #  Configuration lines consist of an initial keyword followed by a
 #  list of values, all separated by whitespace (any number of spaces
 #  or tabs). For example,
 #  Configuration lines consist of an initial keyword followed by a
 #  list of values, all separated by whitespace (any number of spaces
 #  or tabs). For example,
-#
+#  
 #  actionsfile default.action
 #  actionsfile default.action
-#
+#  
 #  Indicates that the actionsfile is named 'default.action'.
 #  Indicates that the actionsfile is named 'default.action'.
-#
+#  
 #  The '#' indicates a comment. Any part of a line following a '#'
 #  is ignored, except if the '#' is preceded by a '\'.
 #  The '#' indicates a comment. Any part of a line following a '#'
 #  is ignored, except if the '#' is preceded by a '\'.
-#
+#  
 #  Thus, by placing a # at the start of an existing configuration line,
 #  you can make it a comment and it will be treated as if it weren't
 #  there. This is called "commenting out" an option and can be useful.
 #  Thus, by placing a # at the start of an existing configuration line,
 #  you can make it a comment and it will be treated as if it weren't
 #  there. This is called "commenting out" an option and can be useful.
-#
+#  
 #  Note that commenting out and option and leaving it at its default
 #  are two completely different things! Most options behave very
 #  differently when unset.  See the the "Effect if unset" explanation
 #  in each option's description for details.
 #  Note that commenting out and option and leaving it at its default
 #  are two completely different things! Most options behave very
 #  differently when unset.  See the the "Effect if unset" explanation
 #  in each option's description for details.
-#
+#  
 #  Long lines can be continued on the next line by using a `\' as the
 #  last character.
 #  Long lines can be continued on the next line by using a `\' as the
 #  last character.
-#
+#  
 
 
-#
+#  
 #  1. CONFIGURATION AND LOG FILE LOCATIONS
 #  =======================================
 #  1. CONFIGURATION AND LOG FILE LOCATIONS
 #  =======================================
-#
+#  
 #  Privoxy can (and normally does) use a number of other files for
 #  additional configuration, help and logging. This section of the
 #  configuration file tells Privoxy where to find those other files.
 #  Privoxy can (and normally does) use a number of other files for
 #  additional configuration, help and logging. This section of the
 #  configuration file tells Privoxy where to find those other files.
-#
+#  
 #  The user running Privoxy, must have read permission for all
 #  configuration files, and write permission to any files that would
 #  be modified, such as log files and actions files.
 #  The user running Privoxy, must have read permission for all
 #  configuration files, and write permission to any files that would
 #  be modified, such as log files and actions files.
-#
+#  
 
 
-#
+#  
 #  1.1. confdir
 #  ============
 #  1.1. confdir
 #  ============
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      The directory where the other configuration files are located
 #      The directory where the other configuration files are located
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      Path name
 #      Path name
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      /etc/privoxy (Unix) or Privoxy installation dir (Windows)
 #      /etc/privoxy (Unix) or Privoxy installation dir (Windows)
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Mandatory
 #      Mandatory
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      No trailing "/", please
 #      No trailing "/", please
-#
+#  
 #      When development goes modular and multi-user, the blocker,
 #      filter, and per-user config will be stored in subdirectories of
 #      "confdir". For now, the configuration directory structure is
 #      flat, except for confdir/templates, where the HTML templates
 #      for CGI output reside (e.g. Privoxy's 404 error page).
 #      When development goes modular and multi-user, the blocker,
 #      filter, and per-user config will be stored in subdirectories of
 #      "confdir". For now, the configuration directory structure is
 #      flat, except for confdir/templates, where the HTML templates
 #      for CGI output reside (e.g. Privoxy's 404 error page).
-#
+#  
 confdir .
 
 confdir .
 
-#
+#  
 #  1.2. logdir
 #  ===========
 #  1.2. logdir
 #  ===========
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      The directory where all logging takes place (i.e. where logfile
 #      and jarfile are located)
 #      The directory where all logging takes place (i.e. where logfile
 #      and jarfile are located)
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      Path name
 #      Path name
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      /var/log/privoxy (Unix) or Privoxy installation dir (Windows)
 #      /var/log/privoxy (Unix) or Privoxy installation dir (Windows)
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Mandatory
 #      Mandatory
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      No trailing "/", please
 #      No trailing "/", please
-#
+#  
 logdir .
 
 logdir .
 
-#
+#  
 #  1.3. actionsfile
 #  ================
 #  1.3. actionsfile
 #  ================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      The actions file(s) to use
 #      The actions file(s) to use
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      File name, relative to confdir, without the .action suffix
 #      File name, relative to confdir, without the .action suffix
-#
+#  
 #  Default values:
 #  Default values:
-#
+#  
 #        standard     # Internal purposes, no editing recommended
 #        standard     # Internal purposes, no editing recommended
-#
+#  
 #        default      # Main actions file
 #        default      # Main actions file
-#
+#  
 #        user         # User customizations
 #        user         # User customizations
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      No actions are taken at all. Simple neutral proxying.
 #      No actions are taken at all. Simple neutral proxying.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      Multiple actionsfile lines are permitted, and are in fact
 #      recommended!
 #      Multiple actionsfile lines are permitted, and are in fact
 #      recommended!
-#
+#  
 #      The default values include standard.action, which is used
 #      for internal purposes and should be loaded, default.action,
 #      which is the "main" actions file maintained by the developers,
 #      and user.action, where you can make your personal additions.
 #      The default values include standard.action, which is used
 #      for internal purposes and should be loaded, default.action,
 #      which is the "main" actions file maintained by the developers,
 #      and user.action, where you can make your personal additions.
-#
+#  
 #      Actions files are where all the per site and per URL
 #      configuration is done for ad blocking, cookie management,
 #      privacy considerations, etc. There is no point in using Privoxy
 #      without at least one actions file.
 #      Actions files are where all the per site and per URL
 #      configuration is done for ad blocking, cookie management,
 #      privacy considerations, etc. There is no point in using Privoxy
 #      without at least one actions file.
-#
+#  
 actionsfile standard  # Internal purpose, recommended
 actionsfile default   # Main actions file
 actionsfile user      # User customizations
 
 actionsfile standard  # Internal purpose, recommended
 actionsfile default   # Main actions file
 actionsfile user      # User customizations
 
-#
+#  
 #  1.4. filterfile
 #  ===============
 #  1.4. filterfile
 #  ===============
-#
+#  
 #  Specifies:
 #  Specifies:
-#
-#      The filter file to use
-#
+#  
+#      The filter file(s) to use
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      File name, relative to confdir
 #      File name, relative to confdir
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      default.filter (Unix) or default.filter.txt (Windows)
 #      default.filter (Unix) or default.filter.txt (Windows)
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      No textual content filtering takes place, i.e. all +filter{name}
 #      actions in the actions files are turned neutral.
 #      No textual content filtering takes place, i.e. all +filter{name}
 #      actions in the actions files are turned neutral.
-#
+#  
 #  Notes:
 #  Notes:
-#
-#      The filter file contains content modification rules that use
+#  
+#      The filter files contain content modification rules that use
 #      regular expressions. These rules permit powerful changes on the
 #      content of Web pages, e.g., you could disable your favorite
 #      JavaScript annoyances, re-write the actual displayed text,
 #      regular expressions. These rules permit powerful changes on the
 #      content of Web pages, e.g., you could disable your favorite
 #      JavaScript annoyances, re-write the actual displayed text,
-#      or just have some fun replacing "Microsoft" with "MicroSuck"
-#      wherever it appears on a Web page.
-#
+#      or just have some fun playing buzzword bingo with a web page.
+#  
 #      The +filter{name} actions rely on the relevant filter (name)
 #      The +filter{name} actions rely on the relevant filter (name)
-#      to be defined in the filter file!
-#
+#      to be defined in a filter file!
+#  
 #      A pre-defined filter file called default.filter that contains
 #      a bunch of handy filters for common problems is included in the
 #      distribution. See the section on the filter action for a list.
 #      A pre-defined filter file called default.filter that contains
 #      a bunch of handy filters for common problems is included in the
 #      distribution. See the section on the filter action for a list.
+#      When adding your own, it is recommended you add them to the
+#      user.filter file.
 #
 filterfile default.filter
 #
 filterfile default.filter
+#filterfile user.filter
 
 
-#
+#  
 #  1.5. logfile
 #  ============
 #  1.5. logfile
 #  ============
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      The log file to use
 #      The log file to use
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      File name, relative to logdir
 #      File name, relative to logdir
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      logfile (Unix) or privoxy.log (Windows)
 #      logfile (Unix) or privoxy.log (Windows)
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      No log file is used, all log messages go to the console (STDERR).
 #      No log file is used, all log messages go to the console (STDERR).
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
+#      The windows version will additionally log to the console.
+#  
 #      The logfile is where all logging and error messages are
 #      written. The level of detail and number of messages are set with
 #      the debug option (see below).  The logfile can be useful for
 #      tracking down a problem with Privoxy (e.g., it's not blocking
 #      an ad you think it should block) but in most cases you probably
 #      will never look at it.
 #      The logfile is where all logging and error messages are
 #      written. The level of detail and number of messages are set with
 #      the debug option (see below).  The logfile can be useful for
 #      tracking down a problem with Privoxy (e.g., it's not blocking
 #      an ad you think it should block) but in most cases you probably
 #      will never look at it.
-#
+#  
 #      Your logfile will grow indefinitely, and you will probably
 #      want to periodically remove it. On Unix systems, you can do
 #      this with a cron job (see "man cron"). For Red Hat, a logrotate
 #      script has been included.
 #      Your logfile will grow indefinitely, and you will probably
 #      want to periodically remove it. On Unix systems, you can do
 #      this with a cron job (see "man cron"). For Red Hat, a logrotate
 #      script has been included.
-#
+#  
 #      On SuSE Linux systems, you can place a line like
 #      "/var/log/privoxy.* +1024k 644 nobody.nogroup" in /etc/logfiles,
 #      with the effect that cron.daily will automatically archive,
 #      gzip, and empty the log, when it exceeds 1M size.
 #      On SuSE Linux systems, you can place a line like
 #      "/var/log/privoxy.* +1024k 644 nobody.nogroup" in /etc/logfiles,
 #      with the effect that cron.daily will automatically archive,
 #      gzip, and empty the log, when it exceeds 1M size.
-#
+#  
 #      Any log files must be writable by whatever user Privoxy is
 #      being run as (default on UNIX, user id is "privoxy").
 #      Any log files must be writable by whatever user Privoxy is
 #      being run as (default on UNIX, user id is "privoxy").
-#
+#  
 logfile logfile
 
 logfile logfile
 
-#
+#  
 #  1.6. jarfile
 #  ============
 #  1.6. jarfile
 #  ============
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      The file to store intercepted cookies in
 #      The file to store intercepted cookies in
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      File name, relative to logdir
 #      File name, relative to logdir
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      jarfile (Unix) or privoxy.jar (Windows)
 #      jarfile (Unix) or privoxy.jar (Windows)
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Intercepted cookies are not stored at all.
 #      Intercepted cookies are not stored at all.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      The jarfile may grow to ridiculous sizes over time.
 #      The jarfile may grow to ridiculous sizes over time.
-#
+#  
 jarfile jarfile
 
 jarfile jarfile
 
-#
+#  
 #  1.7. trustfile
 #  ==============
 #  1.7. trustfile
 #  ==============
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      The trust file to use
 #      The trust file to use
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      File name, relative to confdir
 #      File name, relative to confdir
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Unset (commented out). When activated: trust (Unix) or trust.txt
 #      (Windows)
 #      Unset (commented out). When activated: trust (Unix) or trust.txt
 #      (Windows)
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
-#      The whole trust mechanism is turned off.
-#
+#  
+#      The entire trust mechanism is turned off.
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      The trust mechanism is an experimental feature for building
 #      white-lists and should be used with care. It is NOT recommended
 #      for the casual user.
 #      The trust mechanism is an experimental feature for building
 #      white-lists and should be used with care. It is NOT recommended
 #      for the casual user.
-#
+#  
 #      If you specify a trust file, Privoxy will only allow access to
 #      If you specify a trust file, Privoxy will only allow access to
-#      sites that are named in the trustfile. You can also mark sites
-#      as trusted referrers (with +), with the effect that access
-#      to untrusted sites will be granted, if a link from a trusted
-#      referrer was used. The link target will then be added to the
-#      "trustfile". Possible applications include limiting Internet
-#      access for children.
-#
-#      If you use + operator in the trust file, it may grow considerably
-#      over time.
-#
+#      sites that are specified in the trustfile. Sites can be listed
+#      in one of two ways:
+#  
+#      Prepending a ~ character limits access to this site only (and
+#      any sub-paths within this site), e.g. ~www.example.com.
+#  
+#      Or, you can designate sites as trusted referrers, by prepending
+#      the name with a + character. The effect is that access to
+#      untrusted sites will be granted -- but only if a link from this
+#      trusted referrer was used. The link target will then be added
+#      to the "trustfile" so that future, direct accesses will be
+#      granted. Sites added via this mechanism do not become trusted
+#      referrers themselves (i.e. they are added with a ~ designation).
+#  
+#      If you use the + operator in the trust file, it may grow
+#      considerably over time.
+#  
+#      It is recommended that Privoxy be compiled with the
+#      --disable-force, --disable-toggle and --disable-editor options,
+#      if this feature is to be used.
+#  
+#      Possible applications include limiting Internet access for
+#      children.
+#  
 #trustfile trust
 
 #trustfile trust
 
-#
-#  1.8. image-blocker-custom-file
-#  ==============
-#
-#  Specifies:
-#
-#      The custom image to display for blocked images when
-#      +set-image-blocker{custom} is in effect in an action file
-#
-#  Type of value:
-#
-#      File name, relative to confdir; can be a jpeg, png or gif image
-#
-#  Default value:
-#
-#      Unset
-#
-#  Effect if unset:
-#
-#      If a custom image is called for and it is unset, the "pattern"
-#      built-in image will be sent instead.  I.e. it is as if you had
-#      specified "+set-image-blocker{pattern}" instead of
-#      "+set-image-blocker{custom}".
-#
-#  Notes:
-#
-#      If the specified file signature is not found to be jpeg, png
-#      or gif, the the built-in "pattern" image will be sent instead.
-#
-#image-blocker-custom-file my-custom-image.jpg
-
-#
+#  
 #  2. LOCAL SET-UP DOCUMENTATION
 #  =============================
 #  2. LOCAL SET-UP DOCUMENTATION
 #  =============================
-#
+#  
 #  If you intend to operate Privoxy for more users than just yourself,
 #  it might be a good idea to let them know how to reach you, what
 #  you block and why you do that, your policies, etc.
 #  If you intend to operate Privoxy for more users than just yourself,
 #  it might be a good idea to let them know how to reach you, what
 #  you block and why you do that, your policies, etc.
-#
+#  
 
 
-#
+#  
 #  2.1. user-manual
 #  ================
 #  2.1. user-manual
 #  ================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Location of the Privoxy User Manual.
 #      Location of the Privoxy User Manual.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      A fully qualified URI
 #      A fully qualified URI
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Unset
 #      Unset
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      http://www.privoxy.org/version/user-manual/ will be used,
 #      where version is the Privoxy version.
 #      http://www.privoxy.org/version/user-manual/ will be used,
 #      where version is the Privoxy version.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      The User Manual URI is used for help links from some of the
 #      internal CGI pages. The manual itself is normally packaged
 #      with the binary distributions, so you probably want to set this
 #      to a locally installed copy. For multi-user setups, you could
 #      provide a copy on a local webserver for all your users and use
 #      the corresponding URL here.
 #      The User Manual URI is used for help links from some of the
 #      internal CGI pages. The manual itself is normally packaged
 #      with the binary distributions, so you probably want to set this
 #      to a locally installed copy. For multi-user setups, you could
 #      provide a copy on a local webserver for all your users and use
 #      the corresponding URL here.
-#
+#  
 #      Examples:
 #      Examples:
-#
+#  
 #      Unix, in local filesystem:
 #      Unix, in local filesystem:
-#
-#      user-manual  file:///usr/share/doc/privoxy-2.9.18/user-manual/
-#
+#  
+#       user-manual file:///usr/share/doc/privoxy-3.0.1/user-manual/index.html
+#  
+#      Windows, in local filesystem, must use forward slash notation,
+#      and %20 to denote spaces in path names:
+#  
+#       user-manual file:///c:/some%20dir/privoxy/user-manual/index.html
+#  
+#      Windows, UNC notation (forward slashes required again):
+#  
+#       user-manual file://///some-server/some-path/privoxy/user-manual/index.html
+#  
 #      Any platform, on local webserver (called "local-webserver"):
 #      Any platform, on local webserver (called "local-webserver"):
-#
-#      user-manual  http://local-webserver/privoxy-user-manual/
-#
+#  
+#       user-manual  http://local-webserver/privoxy-user-manual/
+#  
 #      WARNING!!!
 #      WARNING!!!
-#
+#  
 #          If set, this option should be the first option in the config
 #          file, because it is used while the config file is being read.
 #          If set, this option should be the first option in the config
 #          file, because it is used while the config file is being read.
-#
+#  
 #user-manual http://www.privoxy.org/user-manual/
 
 #user-manual http://www.privoxy.org/user-manual/
 
-#
+#  
 #  2.2. trust-info-url
 #  ===================
 #  2.2. trust-info-url
 #  ===================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      A URL to be displayed in the error page that users will see if
 #      access to an untrusted page is denied.
 #      A URL to be displayed in the error page that users will see if
 #      access to an untrusted page is denied.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      URL
 #      URL
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Two example URL are provided
 #      Two example URL are provided
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      No links are displayed on the "untrusted" error page.
 #      No links are displayed on the "untrusted" error page.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      The value of this option only matters if the experimental trust
 #      mechanism has been activated. (See trustfile above.)
 #      The value of this option only matters if the experimental trust
 #      mechanism has been activated. (See trustfile above.)
-#
+#  
 #      If you use the trust mechanism, it is a good idea to write
 #      up some on-line documentation about your trust policy and to
 #      specify the URL(s) here. Use multiple times for multiple URLs.
 #      If you use the trust mechanism, it is a good idea to write
 #      up some on-line documentation about your trust policy and to
 #      specify the URL(s) here. Use multiple times for multiple URLs.
-#
+#  
 #      The URL(s) should be added to the trustfile as well, so users
 #      don't end up locked out from the information on why they were
 #      locked out in the first place!
 #      The URL(s) should be added to the trustfile as well, so users
 #      don't end up locked out from the information on why they were
 #      locked out in the first place!
-#
+#  
 trust-info-url  http://www.example.com/why_we_block.html
 trust-info-url  http://www.example.com/what_we_allow.html
 
 trust-info-url  http://www.example.com/why_we_block.html
 trust-info-url  http://www.example.com/what_we_allow.html
 
-#
+#  
 #  2.3. admin-address
 #  ==================
 #  2.3. admin-address
 #  ==================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      An email address to reach the proxy administrator.
 #      An email address to reach the proxy administrator.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      Email address
 #      Email address
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Unset
 #      Unset
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      No email address is displayed on error pages and the CGI user
 #      interface.
 #      No email address is displayed on error pages and the CGI user
 #      interface.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      If both admin-address and proxy-info-url are unset, the whole
 #      "Local Privoxy Support" box on all generated pages will not
 #      be shown.
 #      If both admin-address and proxy-info-url are unset, the whole
 #      "Local Privoxy Support" box on all generated pages will not
 #      be shown.
-#
+#  
 #admin-address privoxy-admin@example.com
 
 #admin-address privoxy-admin@example.com
 
-#
+#  
 #  2.4. proxy-info-url
 #  ===================
 #  2.4. proxy-info-url
 #  ===================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      A URL to documentation about the local Privoxy setup,
 #      configuration or policies.
 #      A URL to documentation about the local Privoxy setup,
 #      configuration or policies.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      URL
 #      URL
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Unset
 #      Unset
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      No link to local documentation is displayed on error pages and
 #      the CGI user interface.
 #      No link to local documentation is displayed on error pages and
 #      the CGI user interface.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      If both admin-address and proxy-info-url are unset, the whole
 #      "Local Privoxy Support" box on all generated pages will not
 #      be shown.
 #      If both admin-address and proxy-info-url are unset, the whole
 #      "Local Privoxy Support" box on all generated pages will not
 #      be shown.
-#
+#  
 #      This URL shouldn't be blocked ;-)
 #      This URL shouldn't be blocked ;-)
-#
+#  
 #proxy-info-url http://www.example.com/proxy-service.html
 
 #proxy-info-url http://www.example.com/proxy-service.html
 
-#
+#  
 #  3. DEBUGGING
 #  ============
 #  3. DEBUGGING
 #  ============
-#
+#  
 #  These options are mainly useful when tracing a problem. Note that
 #  you might also want to invoke Privoxy with the --no-daemon command
 #  line option when debugging.
 #  These options are mainly useful when tracing a problem. Note that
 #  you might also want to invoke Privoxy with the --no-daemon command
 #  line option when debugging.
-#
+#  
 
 
-#
+#  
 #  3.1. debug
 #  ==========
 #  3.1. debug
 #  ==========
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Key values that determine what information gets logged to
 #      the logfile.
 #      Key values that determine what information gets logged to
 #      the logfile.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      Integer values
 #      Integer values
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      12289 (i.e.: URLs plus informational and warning messages)
 #      12289 (i.e.: URLs plus informational and warning messages)
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Nothing gets logged.
 #      Nothing gets logged.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      The available debug levels are:
 #      The available debug levels are:
-#
-#          debug         1 # show each GET/POST/CONNECT request
-#          debug         2 # show each connection status
-#          debug         4 # show I/O status
-#          debug         8 # show header parsing
-#          debug        16 # log all data into the logfile
-#          debug        32 # debug force feature
+#  
+#          debug         1 # show each GET/POST/CONNECT request 
+#          debug         2 # show each connection status 
+#          debug         4 # show I/O status 
+#          debug         8 # show header parsing 
+#          debug        16 # log all data into the logfile 
+#          debug        32 # debug force feature 
 #          debug        64 # debug regular expression filter
 #          debug        64 # debug regular expression filter
-#          debug       128 # debug fast redirects
-#          debug       256 # debug GIF de-animation
+#          debug       128 # debug fast redirects 
+#          debug       256 # debug GIF de-animation 
 #          debug       512 # Common Log Format
 #          debug       512 # Common Log Format
-#          debug      1024 # debug kill pop-ups
-#          debug      2048 # CGI user interface
+#          debug      1024 # debug kill pop-ups 
+#          debug      2048 # CGI user interface 
 #          debug      4096 # Startup banner and warnings.
 #          debug      8192 # Non-fatal errors
 #          debug      4096 # Startup banner and warnings.
 #          debug      8192 # Non-fatal errors
-#
+#  
 #      To select multiple debug levels, you can either add them or
 #      use multiple debug lines.
 #      To select multiple debug levels, you can either add them or
 #      use multiple debug lines.
-#
+#  
 #      A debug level of 1 is informative because it will show you each
 #      request as it happens. 1, 4096 and 8192 are highly recommended
 #      so that you will notice when things go wrong. The other levels
 #      are probably only of interest if you are hunting down a specific
 #      problem. They can produce a hell of an output (especially 16).
 #      A debug level of 1 is informative because it will show you each
 #      request as it happens. 1, 4096 and 8192 are highly recommended
 #      so that you will notice when things go wrong. The other levels
 #      are probably only of interest if you are hunting down a specific
 #      problem. They can produce a hell of an output (especially 16).
-#
+#  
 #      The reporting of fatal errors (i.e. ones which crash Privoxy)
 #      is always on and cannot be disabled.
 #      The reporting of fatal errors (i.e. ones which crash Privoxy)
 #      is always on and cannot be disabled.
-#
+#  
 #      If you want to use CLF (Common Log Format), you should set
 #      "debug 512" ONLY and not enable anything else.
 #      If you want to use CLF (Common Log Format), you should set
 #      "debug 512" ONLY and not enable anything else.
-#
+#  
 debug   1    # show each GET/POST/CONNECT request
 debug   4096 # Startup banner and warnings
 debug   8192 # Errors - *we highly recommended enabling this*
 
 debug   1    # show each GET/POST/CONNECT request
 debug   4096 # Startup banner and warnings
 debug   8192 # Errors - *we highly recommended enabling this*
 
-#
+#  
 #  3.2. single-threaded
 #  ====================
 #  3.2. single-threaded
 #  ====================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Whether to run only one server thread
 #      Whether to run only one server thread
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      None
 #      None
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Unset
 #      Unset
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Multi-threaded (or, where unavailable: forked) operation,
 #      i.e. the ability to serve multiple requests simultaneously.
 #      Multi-threaded (or, where unavailable: forked) operation,
 #      i.e. the ability to serve multiple requests simultaneously.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      This option is only there for debug purposes and you should
 #      never need to use it. It will drastically reduce performance.
 #      This option is only there for debug purposes and you should
 #      never need to use it. It will drastically reduce performance.
-#
+#  
 #single-threaded
 
 #single-threaded
 
-#
+#  
 #  4. ACCESS CONTROL AND SECURITY
 #  ==============================
 #  4. ACCESS CONTROL AND SECURITY
 #  ==============================
-#
+#  
 #  This section of the config file controls the security-relevant
 #  aspects of Privoxy's configuration.
 #  This section of the config file controls the security-relevant
 #  aspects of Privoxy's configuration.
-#
+#  
 
 
-#
+#  
 #  4.1. listen-address
 #  ===================
 #  4.1. listen-address
 #  ===================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      The IP address and TCP port on which Privoxy will listen for
 #      client requests.
 #      The IP address and TCP port on which Privoxy will listen for
 #      client requests.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      [IP-Address]:Port
 #      [IP-Address]:Port
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      127.0.0.1:8118
 #      127.0.0.1:8118
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Bind to 127.0.0.1 (localhost), port 8118. This is suitable and
 #      recommended for home users who run Privoxy on the same machine
 #      as their browser.
 #      Bind to 127.0.0.1 (localhost), port 8118. This is suitable and
 #      recommended for home users who run Privoxy on the same machine
 #      as their browser.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      You will need to configure your browser(s) to this proxy address
 #      and port.
 #      You will need to configure your browser(s) to this proxy address
 #      and port.
-#
+#  
 #      If you already have another service running on port 8118, or
 #      if you want to serve requests from other machines (e.g. on your
 #      local network) as well, you will need to override the default.
 #      If you already have another service running on port 8118, or
 #      if you want to serve requests from other machines (e.g. on your
 #      local network) as well, you will need to override the default.
-#
+#  
 #      If you leave out the IP address, Privoxy will bind to all
 #      interfaces (addresses) on your machine and may become reachable
 #      from the Internet. In that case, consider using access control
 #      lists (ACL's, see below), and/or a firewall.
 #      If you leave out the IP address, Privoxy will bind to all
 #      interfaces (addresses) on your machine and may become reachable
 #      from the Internet. In that case, consider using access control
 #      lists (ACL's, see below), and/or a firewall.
-#
+#  
 #      If you open Privoxy to untrusted users, you will also want
 #      to turn off the enable-edit-actions and enable-remote-toggle
 #      options!
 #      If you open Privoxy to untrusted users, you will also want
 #      to turn off the enable-edit-actions and enable-remote-toggle
 #      options!
-#
+#  
 #  Example:
 #  Example:
-#
+#  
 #      Suppose you are running Privoxy on a machine which has the
 #      address 192.168.0.1 on your local private network (192.168.0.0)
 #      and has another outside connection with a different address. You
 #      want it to serve requests from inside only:
 #      Suppose you are running Privoxy on a machine which has the
 #      address 192.168.0.1 on your local private network (192.168.0.0)
 #      and has another outside connection with a different address. You
 #      want it to serve requests from inside only:
-#
+#  
 #        listen-address  192.168.0.1:8118
 #        listen-address  192.168.0.1:8118
-#
-listen-address  127.0.0.1:8118
+#  
+listen-address  :8118
 
 
-#
+#  
 #  4.2. toggle
 #  ===========
 #  4.2. toggle
 #  ===========
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Initial state of "toggle" status
 #      Initial state of "toggle" status
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      1 or 0
 #      1 or 0
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      1
 #      1
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Act as if toggled on
 #      Act as if toggled on
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      If set to 0, Privoxy will start in "toggled off" mode,
 #      i.e. behave like a normal, content-neutral proxy where all ad
 #      blocking, filtering, etc are disabled. See enable-remote-toggle
 #      below. This is not really useful anymore, since toggling is
 #      much easier via the web interface than via editing the conf file.
 #      If set to 0, Privoxy will start in "toggled off" mode,
 #      i.e. behave like a normal, content-neutral proxy where all ad
 #      blocking, filtering, etc are disabled. See enable-remote-toggle
 #      below. This is not really useful anymore, since toggling is
 #      much easier via the web interface than via editing the conf file.
-#
+#  
 #      The windows version will only display the toggle icon in the
 #      system tray if this option is present.
 #      The windows version will only display the toggle icon in the
 #      system tray if this option is present.
-#
+#  
 toggle  1
 
 toggle  1
 
-#
+#  
 #  4.3. enable-remote-toggle
 #  =========================
 #  4.3. enable-remote-toggle
 #  =========================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Whether or not the web-based toggle feature may be used
 #      Whether or not the web-based toggle feature may be used
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      0 or 1
 #      0 or 1
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      1
 #      1
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      The web-based toggle feature is disabled.
 #      The web-based toggle feature is disabled.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      When toggled off, Privoxy acts like a normal, content-neutral
 #      proxy, i.e.  it acts as if none of the actions applied to
 #      any URL.
 #      When toggled off, Privoxy acts like a normal, content-neutral
 #      proxy, i.e.  it acts as if none of the actions applied to
 #      any URL.
-#
+#  
 #      For the time being, access to the toggle feature can not be
 #      controlled separately by "ACLs" or HTTP authentication, so that
 #      everybody who can access Privoxy (see "ACLs" and listen-address
 #      above) can toggle it for all users. So this option is not
 #      recommended for multi-user environments with untrusted users.
 #      For the time being, access to the toggle feature can not be
 #      controlled separately by "ACLs" or HTTP authentication, so that
 #      everybody who can access Privoxy (see "ACLs" and listen-address
 #      above) can toggle it for all users. So this option is not
 #      recommended for multi-user environments with untrusted users.
-#
+#  
 #      Note that you must have compiled Privoxy with support for this
 #      feature, otherwise this option has no effect.
 #      Note that you must have compiled Privoxy with support for this
 #      feature, otherwise this option has no effect.
-#
+#  
 enable-remote-toggle  1
 
 enable-remote-toggle  1
 
-#
+#  
 #  4.4. enable-edit-actions
 #  ========================
 #  4.4. enable-edit-actions
 #  ========================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Whether or not the web-based actions file editor may be used
 #      Whether or not the web-based actions file editor may be used
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      0 or 1
 #      0 or 1
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      1
 #      1
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      The web-based actions file editor is disabled.
 #      The web-based actions file editor is disabled.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      For the time being, access to the editor can not be controlled
 #      separately by "ACLs" or HTTP authentication, so that everybody
 #      who can access Privoxy (see "ACLs" and listen-address above)
 #      can modify its configuration for all users. So this option is
 #      not recommended for multi-user environments with untrusted users.
 #      For the time being, access to the editor can not be controlled
 #      separately by "ACLs" or HTTP authentication, so that everybody
 #      who can access Privoxy (see "ACLs" and listen-address above)
 #      can modify its configuration for all users. So this option is
 #      not recommended for multi-user environments with untrusted users.
-#
+#  
 #      Note that you must have compiled Privoxy with support for this
 #      feature, otherwise this option has no effect.
 #      Note that you must have compiled Privoxy with support for this
 #      feature, otherwise this option has no effect.
-#
+#  
 enable-edit-actions 1
 
 enable-edit-actions 1
 
-#
+#  
 #  4.5. ACLs: permit-access and deny-access
 #  ========================================
 #  4.5. ACLs: permit-access and deny-access
 #  ========================================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Who can access what.
 #      Who can access what.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      src_addr[/src_masklen] [dst_addr[/dst_masklen]]
 #      src_addr[/src_masklen] [dst_addr[/dst_masklen]]
-#
+#  
 #      Where src_addr and dst_addr are IP addresses in dotted decimal
 #      notation or valid DNS names, and src_masklen and dst_masklen are
 #      subnet masks in CIDR notation, i.e. integer values from 2 to 30
 #      representing the length (in bits) of the network address. The
 #      masks and the whole destination part are optional.
 #      Where src_addr and dst_addr are IP addresses in dotted decimal
 #      notation or valid DNS names, and src_masklen and dst_masklen are
 #      subnet masks in CIDR notation, i.e. integer values from 2 to 30
 #      representing the length (in bits) of the network address. The
 #      masks and the whole destination part are optional.
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Unset
 #      Unset
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Don't restrict access further than implied by listen-address
 #      Don't restrict access further than implied by listen-address
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      Access controls are included at the request of ISPs and systems
 #      administrators, and are not usually needed by individual
 #      users. For a typical home user, it will normally suffice to
 #      ensure that Privoxy only listens on the localhost (127.0.0.1)
 #      or internal (home) network address by means of the listen-address
 #      option.
 #      Access controls are included at the request of ISPs and systems
 #      administrators, and are not usually needed by individual
 #      users. For a typical home user, it will normally suffice to
 #      ensure that Privoxy only listens on the localhost (127.0.0.1)
 #      or internal (home) network address by means of the listen-address
 #      option.
-#
+#  
 #      Please see the warnings in the FAQ that this proxy is not
 #      intended to be a substitute for a firewall or to encourage
 #      anyone to defer addressing basic security weaknesses.
 #      Please see the warnings in the FAQ that this proxy is not
 #      intended to be a substitute for a firewall or to encourage
 #      anyone to defer addressing basic security weaknesses.
-#
+#  
 #      Multiple ACL lines are OK. If any ACLs are specified, then
 #      the Privoxy talks only to IP addresses that match at least one
 #      permit-access line and don't match any subsequent deny-access
 #      line. In other words, the last match wins, with the default
 #      being deny-access.
 #      Multiple ACL lines are OK. If any ACLs are specified, then
 #      the Privoxy talks only to IP addresses that match at least one
 #      permit-access line and don't match any subsequent deny-access
 #      line. In other words, the last match wins, with the default
 #      being deny-access.
-#
+#  
 #      If Privoxy is using a forwarder (see forward below) for a
 #      particular destination URL, the dst_addr that is examined is
 #      the address of the forwarder and NOT the address of the ultimate
 #      target. This is necessary because it may be impossible for the
 #      local Privoxy to determine the IP address of the ultimate target
 #      (that's often what gateways are used for).
 #      If Privoxy is using a forwarder (see forward below) for a
 #      particular destination URL, the dst_addr that is examined is
 #      the address of the forwarder and NOT the address of the ultimate
 #      target. This is necessary because it may be impossible for the
 #      local Privoxy to determine the IP address of the ultimate target
 #      (that's often what gateways are used for).
-#
+#  
 #      You should prefer using IP addresses over DNS names, because
 #      the address lookups take time. All DNS names must resolve! You
 #      can not use domain patterns like "*.org" or partial domain
 #      names. If a DNS name resolves to multiple IP addresses, only
 #      the first one is used.
 #      You should prefer using IP addresses over DNS names, because
 #      the address lookups take time. All DNS names must resolve! You
 #      can not use domain patterns like "*.org" or partial domain
 #      names. If a DNS name resolves to multiple IP addresses, only
 #      the first one is used.
-#
+#  
 #      Denying access to particular sites by ACL may have undesired
 #      side effects if the site in question is hosted on a machine
 #      which also hosts other sites.
 #      Denying access to particular sites by ACL may have undesired
 #      side effects if the site in question is hosted on a machine
 #      which also hosts other sites.
-#
+#  
 #  Examples:
 #  Examples:
-#
+#  
 #      Explicitly define the default behavior if no ACL and
 #      listen-address are set: "localhost" is OK. The absence of a
 #      dst_addr implies that all destination addresses are OK:
 #      Explicitly define the default behavior if no ACL and
 #      listen-address are set: "localhost" is OK. The absence of a
 #      dst_addr implies that all destination addresses are OK:
-#
+#  
 #        permit-access  localhost
 #        permit-access  localhost
-#
+#  
 #      Allow any host on the same class C subnet as www.privoxy.org
 #      access to nothing but www.example.com:
 #      Allow any host on the same class C subnet as www.privoxy.org
 #      access to nothing but www.example.com:
-#
+#  
 #        permit-access  www.privoxy.org/24 www.example.com/32
 #        permit-access  www.privoxy.org/24 www.example.com/32
-#
+#  
 #      Allow access from any host on the 26-bit subnet 192.168.45.64
 #      to anywhere, with the exception that 192.168.45.73 may not
 #      access www.dirty-stuff.example.com:
 #      Allow access from any host on the 26-bit subnet 192.168.45.64
 #      to anywhere, with the exception that 192.168.45.73 may not
 #      access www.dirty-stuff.example.com:
-#
-#        permit-access  192.168.45.64/26
+#  
+#        permit-access  192.168.45.64/26 
 #        deny-access    192.168.45.73     www.dirty-stuff.example.com
 #        deny-access    192.168.45.73     www.dirty-stuff.example.com
-#
+#  
 
 
-#
+#  
 #  4.6. buffer-limit
 #  =================
 #  4.6. buffer-limit
 #  =================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Maximum size of the buffer for content filtering.
 #      Maximum size of the buffer for content filtering.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      Size in Kbytes
 #      Size in Kbytes
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      4096
 #      4096
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Use a 4MB (4096 KB) limit.
 #      Use a 4MB (4096 KB) limit.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      For content filtering, i.e. the +filter and +deanimate-gif
 #      actions, it is necessary that Privoxy buffers the entire document
 #      body. This can be potentially dangerous, since a server could
 #      just keep sending data indefinitely and wait for your RAM to
 #      exhaust -- with nasty consequences.  Hence this option.
 #      For content filtering, i.e. the +filter and +deanimate-gif
 #      actions, it is necessary that Privoxy buffers the entire document
 #      body. This can be potentially dangerous, since a server could
 #      just keep sending data indefinitely and wait for your RAM to
 #      exhaust -- with nasty consequences.  Hence this option.
-#
+#  
 #      When a document buffer size reaches the buffer-limit, it is
 #      flushed to the client unfiltered and no further attempt to filter
 #      the rest of the document is made. Remember that there may be
 #      multiple threads running, which might require up to buffer-limit
 #      Kbytes each, unless you have enabled "single-threaded" above.
 #      When a document buffer size reaches the buffer-limit, it is
 #      flushed to the client unfiltered and no further attempt to filter
 #      the rest of the document is made. Remember that there may be
 #      multiple threads running, which might require up to buffer-limit
 #      Kbytes each, unless you have enabled "single-threaded" above.
-#
+#  
 buffer-limit 4096
 
 buffer-limit 4096
 
-#
+#  
 #  5. FORWARDING
 #  =============
 #  5. FORWARDING
 #  =============
-#
+#  
 #  This feature allows routing of HTTP requests through a chain
 #  of multiple proxies. It can be used to better protect privacy
 #  and confidentiality when accessing specific domains by routing
 #  This feature allows routing of HTTP requests through a chain
 #  of multiple proxies. It can be used to better protect privacy
 #  and confidentiality when accessing specific domains by routing
@@ -900,191 +896,179 @@ buffer-limit 4096
 #  proxy to speed up browsing. Or chaining to a parent proxy may be
 #  necessary because the machine that Privoxy runs on has no direct
 #  Internet access.
 #  proxy to speed up browsing. Or chaining to a parent proxy may be
 #  necessary because the machine that Privoxy runs on has no direct
 #  Internet access.
-#
+#  
 #  Also specified here are SOCKS proxies. Privoxy supports the SOCKS
 #  4 and SOCKS 4A protocols.
 #  Also specified here are SOCKS proxies. Privoxy supports the SOCKS
 #  4 and SOCKS 4A protocols.
-#
+#  
 
 
-#
+#  
 #  5.1. forward
 #  ============
 #  5.1. forward
 #  ============
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      To which parent HTTP proxy specific requests should be routed.
 #      To which parent HTTP proxy specific requests should be routed.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      target_pattern http_parent[:port]
 #      target_pattern http_parent[:port]
-#
+#  
 #      where target_pattern is a URL pattern that specifies to which
 #      requests (i.e. URLs) this forward rule shall apply. Use /
 #      to denote "all URLs".  http_parent[:port] is the DNS name or
 #      IP address of the parent HTTP proxy through which the requests
 #      should be forwarded, optionally followed by its listening port
 #      (default: 8080). Use a single dot (.) to denote "no forwarding".
 #      where target_pattern is a URL pattern that specifies to which
 #      requests (i.e. URLs) this forward rule shall apply. Use /
 #      to denote "all URLs".  http_parent[:port] is the DNS name or
 #      IP address of the parent HTTP proxy through which the requests
 #      should be forwarded, optionally followed by its listening port
 #      (default: 8080). Use a single dot (.) to denote "no forwarding".
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Unset
 #      Unset
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Don't use parent HTTP proxies.
 #      Don't use parent HTTP proxies.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      If http_parent is ".", then requests are not forwarded to
 #      another HTTP proxy but are made directly to the web servers.
 #      If http_parent is ".", then requests are not forwarded to
 #      another HTTP proxy but are made directly to the web servers.
-#
+#  
 #      Multiple lines are OK, they are checked in sequence, and the
 #      last match wins.
 #      Multiple lines are OK, they are checked in sequence, and the
 #      last match wins.
-#
+#  
 #  Examples:
 #  Examples:
-#
+#  
 #      Everything goes to an example anonymizing proxy, except SSL on
 #      port 443 (which it doesn't handle):
 #      Everything goes to an example anonymizing proxy, except SSL on
 #      port 443 (which it doesn't handle):
-#
-#        forward   /      anon-proxy.example.org:8080
+#  
+#        forward   /      anon-proxy.example.org:8080 
 #        forward   :443   .
 #        forward   :443   .
-#
+#  
 #      Everything goes to our example ISP's caching proxy, except for
 #      requests to that ISP's sites:
 #      Everything goes to our example ISP's caching proxy, except for
 #      requests to that ISP's sites:
-#
+#  
 #        forward   /                  caching-proxy.example-isp.net:8000
 #        forward   .example-isp.net   .
 #        forward   /                  caching-proxy.example-isp.net:8000
 #        forward   .example-isp.net   .
-#
+#  
 
 
-#
+#  
 #  5.2. forward-socks4 and forward-socks4a
 #  =======================================
 #  5.2. forward-socks4 and forward-socks4a
 #  =======================================
-#
+#  
 #  Specifies:
 #  Specifies:
-#
+#  
 #      Through which SOCKS proxy (and to which parent HTTP proxy)
 #      specific requests should be routed.
 #      Through which SOCKS proxy (and to which parent HTTP proxy)
 #      specific requests should be routed.
-#
+#  
 #  Type of value:
 #  Type of value:
-#
+#  
 #      target_pattern socks_proxy[:port] http_parent[:port]
 #      target_pattern socks_proxy[:port] http_parent[:port]
-#
+#  
 #      where target_pattern is a URL pattern that specifies to which
 #      requests (i.e. URLs) this forward rule shall apply. Use / to
 #      denote "all URLs".  http_parent and socks_proxy are IP addresses
 #      in dotted decimal notation or valid DNS names (http_parent may
 #      be "." to denote "no HTTP forwarding"), and the optional port
 #      parameters are TCP ports, i.e. integer values from 1 to 64535
 #      where target_pattern is a URL pattern that specifies to which
 #      requests (i.e. URLs) this forward rule shall apply. Use / to
 #      denote "all URLs".  http_parent and socks_proxy are IP addresses
 #      in dotted decimal notation or valid DNS names (http_parent may
 #      be "." to denote "no HTTP forwarding"), and the optional port
 #      parameters are TCP ports, i.e. integer values from 1 to 64535
-#
+#  
 #  Default value:
 #  Default value:
-#
+#  
 #      Unset
 #      Unset
-#
+#  
 #  Effect if unset:
 #  Effect if unset:
-#
+#  
 #      Don't use SOCKS proxies.
 #      Don't use SOCKS proxies.
-#
+#  
 #  Notes:
 #  Notes:
-#
+#  
 #      Multiple lines are OK, they are checked in sequence, and the
 #      last match wins.
 #      Multiple lines are OK, they are checked in sequence, and the
 #      last match wins.
-#
+#  
 #      The difference between forward-socks4 and forward-socks4a
 #      is that in the SOCKS 4A protocol, the DNS resolution of the
 #      target hostname happens on the SOCKS server, while in SOCKS 4
 #      it happens locally.
 #      The difference between forward-socks4 and forward-socks4a
 #      is that in the SOCKS 4A protocol, the DNS resolution of the
 #      target hostname happens on the SOCKS server, while in SOCKS 4
 #      it happens locally.
-#
+#  
 #      If http_parent is ".", then requests are not forwarded to another
 #      HTTP proxy but are made (HTTP-wise) directly to the web servers,
 #      albeit through a SOCKS proxy.
 #      If http_parent is ".", then requests are not forwarded to another
 #      HTTP proxy but are made (HTTP-wise) directly to the web servers,
 #      albeit through a SOCKS proxy.
-#
+#  
 #  Examples:
 #  Examples:
-#
+#  
 #      From the company example.com, direct connections are made to all
 #      "internal" domains, but everything outbound goes through their
 #      ISP's proxy by way of example.com's corporate SOCKS 4A gateway
 #      to the Internet.
 #      From the company example.com, direct connections are made to all
 #      "internal" domains, but everything outbound goes through their
 #      ISP's proxy by way of example.com's corporate SOCKS 4A gateway
 #      to the Internet.
-#
-#        forward-socks4a   /              socks-gw.example.com:1080   www-cache.example-isp.net:8080
+#  
+#        forward-socks4a   /              socks-gw.example.com:1080   www-cache.example-isp.net:8080 
 #        forward           .example.com   .
 #        forward           .example.com   .
-#
+#  
 #      A rule that uses a SOCKS 4 gateway for all destinations but no
 #      HTTP parent looks like this:
 #      A rule that uses a SOCKS 4 gateway for all destinations but no
 #      HTTP parent looks like this:
-#
+#  
 #        forward-socks4   /               socks-gw.example.com:1080  .
 #        forward-socks4   /               socks-gw.example.com:1080  .
-#
+#  
 
 
-#
+#  
 #  6. WINDOWS GUI OPTIONS
 #  ======================
 #  6. WINDOWS GUI OPTIONS
 #  ======================
-#
+#  
 #  Privoxy has a number of options specific to the Windows GUI
 #  interface:
 #  Privoxy has a number of options specific to the Windows GUI
 #  interface:
-#
+#  
 
 #  If "activity-animation" is set to 1, the Privoxy icon will animate
 #  when "Privoxy" is active. To turn off, set to 0.
 
 #  If "activity-animation" is set to 1, the Privoxy icon will animate
 #  when "Privoxy" is active. To turn off, set to 0.
-#
+#  
 #activity-animation   1
 
 #  If "log-messages" is set to 1, Privoxy will log messages to the
 #  console window:
 #activity-animation   1
 
 #  If "log-messages" is set to 1, Privoxy will log messages to the
 #  console window:
-#
+#  
 #log-messages   1
 
 #  If "log-buffer-size" is set to 1, the size of the log buffer,
 #  i.e. the amount of memory used for the log messages displayed in
 #  the console window, will be limited to "log-max-lines" (see below).
 #log-messages   1
 
 #  If "log-buffer-size" is set to 1, the size of the log buffer,
 #  i.e. the amount of memory used for the log messages displayed in
 #  the console window, will be limited to "log-max-lines" (see below).
-#
+#  
 #  Warning: Setting this to 0 will result in the buffer to grow
 #  infinitely and eat up all your memory!
 #  Warning: Setting this to 0 will result in the buffer to grow
 #  infinitely and eat up all your memory!
-#
+#  
 #log-buffer-size 1
 
 #  log-max-lines is the maximum number of lines held in the log
 #  buffer. See above.
 #log-buffer-size 1
 
 #  log-max-lines is the maximum number of lines held in the log
 #  buffer. See above.
-#
+#  
 #log-max-lines 200
 
 #  If "log-highlight-messages" is set to 1, Privoxy will highlight
 #  portions of the log messages with a bold-faced font:
 #log-max-lines 200
 
 #  If "log-highlight-messages" is set to 1, Privoxy will highlight
 #  portions of the log messages with a bold-faced font:
-#
+#  
 #log-highlight-messages 1
 
 #  The font used in the console window:
 #log-highlight-messages 1
 
 #  The font used in the console window:
-#
+#  
 #log-font-name Comic Sans MS
 
 #  Font size used in the console window:
 #log-font-name Comic Sans MS
 
 #  Font size used in the console window:
-#
+#  
 #log-font-size 8
 
 #  "show-on-task-bar" controls whether or not Privoxy will appear as
 #  a button on the Task bar when minimized:
 #log-font-size 8
 
 #  "show-on-task-bar" controls whether or not Privoxy will appear as
 #  a button on the Task bar when minimized:
-#
+#  
 #show-on-task-bar 0
 
 #  If "close-button-minimizes" is set to 1, the Windows close button
 #  will minimize Privoxy instead of closing the program (close with
 #  the exit option on the File menu).
 #show-on-task-bar 0
 
 #  If "close-button-minimizes" is set to 1, the Windows close button
 #  will minimize Privoxy instead of closing the program (close with
 #  the exit option on the File menu).
-#
+#  
 #close-button-minimizes 1
 
 #  The "hide-console" option is specific to the MS-Win console version
 #  of Privoxy.  If this option is used, Privoxy will disconnect from
 #  and hide the command console.
 #close-button-minimizes 1
 
 #  The "hide-console" option is specific to the MS-Win console version
 #  of Privoxy.  If this option is used, Privoxy will disconnect from
 #  and hide the command console.
-#
+#  
 #hide-console
 
 #hide-console
 
-#  The experimental "activity-console-address" option is used to
-#  specify where statistical information should be sent for monitoring
-#  by the activity console.
-#
-#activity-console-address 127.0.0.1:8119
-
-#  The experimental "activity-console-update-freq" option is used to
-#  specify how often (in seconds) statistics should be forwarded to the
-#  activity console.
-#
-#activity-console-update-freq 5
-
-#
+#  
index e36526a..e9130b3 100644 (file)
@@ -1,8 +1,8 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl 
 dnl Process this file with autoconf to produce a configure script.
 dnl 
-dnl $Id: configure.in,v 1.88 2003/03/23 02:15:51 hal9 Exp $
+dnl $Id: configure.in,v 1.68.2.20 2004/01/31 16:31:46 oes Exp $
 dnl 
 dnl 
-dnl Written by and Copyright (C) 2001, 2002 the SourceForge
+dnl Written by and Copyright (C) 2001 - 2004 the SourceForge
 dnl Privoxy team. http://www.privoxy.org/
 dnl
 dnl Based on the Internet Junkbuster originally written
 dnl Privoxy team. http://www.privoxy.org/
 dnl
 dnl Based on the Internet Junkbuster originally written
@@ -28,78 +28,69 @@ dnl or write to the Free Software Foundation, Inc., 59
 dnl Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 dnl 
 dnl $Log: configure.in,v $
 dnl Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 dnl 
 dnl $Log: configure.in,v $
-dnl Revision 1.88  2003/03/23 02:15:51  hal9
-dnl Apply Docbook/FreeBSD patch from a.go at tiscali.nl. Thanks!
+dnl Revision 1.68.2.20  2004/01/31 16:31:46  oes
+dnl Resetting version info to 0.0.0 UNRELEASED
 dnl
 dnl
-dnl Revision 1.87  2002/12/28 04:10:22  david__schmidt
-dnl Initial drop of dashboard instrumentation - enabled with
-dnl --enable-activity-console
+dnl Revision 1.68.2.19  2004/01/30 09:26:03  oes
+dnl Added docbook paths for debian sarge; set status for release
 dnl
 dnl
-dnl Revision 1.86  2002/12/13 23:47:10  hal9
-dnl Add openbsd special flags per gunner at styx2002.no-ip.org
+dnl Revision 1.68.2.18  2003/12/08 15:10:29  oes
+dnl Bugfix: --with-docbook now correctly accepts its path parameter. Thanks, Roland!
 dnl
 dnl
-dnl Revision 1.85  2002/11/27 12:40:54  oes
-dnl Fixed broken handling of pre-set CFLAGS
+dnl Revision 1.68.2.17  2003/10/18 18:41:26  david__schmidt
+dnl Update to remain buildable on OS/2 - remove the failures
+dnl due to missing unixisms
 dnl
 dnl
-dnl Revision 1.84  2002/10/24 22:24:57  hal9
-dnl Make install: Minor clean up for variable handling.
+dnl Revision 1.68.2.16  2003/03/26 16:05:14  oes
+dnl Marked as 0.0.0 UNRELEASED
 dnl
 dnl
-dnl Revision 1.83  2002/10/24 16:32:41  hal9
-dnl echo -n does not work with true /bin/sh. Use AC_MSG_CHECKING for docbook stuff.
+dnl Revision 1.68.2.15  2003/03/26 00:25:00  oes
+dnl Bump version for 3.0.2
 dnl
 dnl
-dnl Revision 1.82  2002/09/27 04:24:07  hal9
-dnl Minor change of "! test" to "test -ne" for Solaris.
+dnl Revision 1.68.2.14  2003/03/25 13:27:12  hal9
+dnl Manually apply Docbook/FreeBSD patch #708081 from a.go at tiscali.nl.
 dnl
 dnl
-dnl Revision 1.81  2002/09/27 00:38:44  hal9
-dnl Some general cleanup of the user/group stuff. Including remove up to ':' to
-dnl make Linux (?) compatible with other *nix. Better AC output stuff.
+dnl Revision 1.68.2.13  2003/03/18 19:38:57  oes
+dnl Set version info for 3.0.1 release
 dnl
 dnl
-dnl Revision 1.80  2002/09/26 18:47:46  hal9
-dnl This is most of Al's patch for --with-user and --with-group which tests that
-dnl these are valid values, if specified. If not specified, they are left empty.
+dnl Revision 1.68.2.12  2003/03/07 03:41:04  david__schmidt
+dnl Wrapping all *_r functions (the non-_r versions of them) with mutex semaphores for OSX.  Hopefully this will take care of all of those pesky crash reports.
 dnl
 dnl
-dnl Revision 1.79  2002/09/07 02:11:06  hal9
-dnl Remove some testing stuff inadvertantly left in.
+dnl Revision 1.68.2.11  2003/03/06 15:22:37  oes
+dnl Fixed minor shell syntax bug
 dnl
 dnl
-dnl Revision 1.78  2002/09/06 23:18:08  hal9
-dnl Migrate PCRE_H_IN_SUBDIR from 3.0 branch for pcre/pcre.h on RH, etc.
+dnl Revision 1.68.2.10  2003/01/08 16:39:41  oes
+dnl Changing default to exclude FEATURE_IMAGE_DETECT_MSIE because of problem reports with recent IEs
 dnl
 dnl
-dnl Revision 1.77  2002/09/06 13:23:03  oes
-dnl Removed non-functional test for gcc support for -pthread
+dnl Revision 1.68.2.9  2002/12/13 23:47:45  hal9
+dnl Add openbsd $specialflags per gunner at styx2002.no-ip.org
 dnl
 dnl
-dnl Revision 1.76  2002/09/05 14:52:17  oes
-dnl Synced in some changes fromm the stable branch:
-dnl Fixed detection/inclusion of pcre.h, which is in a pcre subdir on RH
+dnl Revision 1.68.2.8  2002/11/27 12:55:26  oes
+dnl Fixed broken handling of pre-set CFLAGS
 dnl
 dnl
-dnl Revision 1.75  2002/09/04 12:19:33  oes
-dnl Resurrected acconfig.h and removed double quotes from AC_DEFINE params to enable build on older systems
+dnl Revision 1.68.2.7  2002/10/25 02:44:22  hal9
+dnl Port of make install, etc from main trunk. Needs testing! Add Slackware
+dnl support, and other related changes. Update related docs.
 dnl
 dnl
-dnl Revision 1.74  2002/09/03 17:31:33  oes
-dnl Added workaround for very strange behaviour of AC_PROG_CC, which sets CFLAGS to -g -O2 if empty
+dnl Revision 1.68.2.6  2002/09/25 15:35:15  oes
+dnl Marking as non-release
 dnl
 dnl
-dnl Revision 1.73  2002/06/05 00:26:21  hal9
-dnl Move all doc build stuff to doc/source/GNUmakefile, leaving a 'make dok'
-dnl target only in toplevel. Add DOC_STATUS variable so docs can be built without
-dnl touching sgml source.
+dnl Revision 1.68.2.5  2002/08/25 23:37:00  hal9
+dnl Getting ready for 3.0 release.
 dnl
 dnl
-dnl Revision 1.72  2002/06/04 15:52:25  jongfoster
-dnl Removing need for acconfig.h (apparently using acconfig.h is an
-dnl obsolete coding style).
-dnl Moving the DocBook stuff together
+dnl Revision 1.68.2.4  2002/08/10 11:21:57  oes
+dnl - Set Version to 2.9.20 (beta)
+dnl - Add two AC_DEFINEs that indicate if the pcre*.h headers
+dnl   are located in a pcre/ subdir to the include path.
 dnl
 dnl
-dnl Revision 1.71  2002/06/04 14:51:49  jongfoster
-dnl Updating for new paths:
-dnl - Source files in src/
-dnl - Object files in obj/
+dnl Revision 1.68.2.3  2002/08/06 11:29:36  oes
+dnl Fixed detection/inclusion of pcre.h, which is in a pcre subdir on RH
 dnl
 dnl
-dnl Revision 1.70  2002/05/27 23:26:34  mal0rd
-dnl Made doc-generation configuration automatic.
-dnl References to DB2HTML were removed, not used.
-dnl --with-docbook now only needed if in odd path.
+dnl Revision 1.68.2.2  2002/07/30 19:36:09  hal9
+dnl Bump version to 2.9.17.
 dnl
 dnl
-dnl Revision 1.69  2002/05/25 18:11:49  jongfoster
-dnl Wahay!!! 3.0.x has branched!
-dnl New development version is 3.1.1 alpha
+dnl Revision 1.68.2.1  2002/07/26 15:21:12  oes
+dnl  Bumped version number for 2.9.16 freeze
 dnl
 dnl Revision 1.68  2002/05/25 16:54:54  jongfoster
 dnl Detect if the compiler supports -pthread.
 dnl
 dnl Revision 1.68  2002/05/25 16:54:54  jongfoster
 dnl Detect if the compiler supports -pthread.
@@ -443,9 +434,10 @@ dnl =================================================================
 dnl AutoConf Initialization
 dnl =================================================================
 
 dnl AutoConf Initialization
 dnl =================================================================
 
-AC_REVISION($Revision: 1.88 $)
-AC_INIT(src/jcc.c)
-if test ! -f src/config.h.in; then
+AC_REVISION($Revision: 1.68.2.20 $)
+AC_INIT(jcc.c)
+
+if test ! -f config.h.in; then
    echo "You need to run autoheader first. "
    echo -n "Shall I do this for you now? (y/n) "
    read answer
    echo "You need to run autoheader first. "
    echo -n "Shall I do this for you now? (y/n) "
    read answer
@@ -456,21 +448,44 @@ if test ! -f src/config.h.in; then
   fi
 fi  
 
   fi
 fi  
 
-AC_CONFIG_HEADER([src/config.h])
+AC_CONFIG_HEADER([config.h])
 AC_CANONICAL_HOST
 
 AC_CANONICAL_HOST
 
+dodk=auto
+DKPREFIX=none
+AC_ARG_WITH(docbook, dnl
+  --with-docbook=[[yes|no|directory]]  
+                           Enable docbook documentation creation 
+                          (default = yes, for gnu and linux),[dnl
+case "$with_docbook" in
+yes) dodk=yes;;
+no) dodk=no;;
+*) 
+       dodk=yes
+       DKPREFIX=$withval
+       ;;
+esac
+])
+DB2HTML=false
+AC_ARG_WITH(db2html, dnl
+  --with-db2html=<path/executable>
+                          Set the location of the docbook to html converter
+                          (default = search),[dnl
+DB2HTML=$withval
+])
 
 dnl =================================================================
 dnl Application version number
 dnl =================================================================
 
 
 dnl =================================================================
 dnl Application version number
 dnl =================================================================
 
-VERSION_MAJOR=3
-VERSION_MINOR=1
-VERSION_POINT=1
-CODE_STATUS="alpha"
+VERSION_MAJOR=0
+VERSION_MINOR=0
+VERSION_POINT=0
+CODE_STATUS="UNRELEASED"
 
 dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be
 
 dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be
-dnl used for CGI output
+dnl used for CGI output. Set version to 0.0.0 and status to "UNRELEASED"
+dnl whenever CVS in a stable branch differs from the last release.
 
 dnl =================================================================
 dnl Substitute the version numbers
 
 dnl =================================================================
 dnl Substitute the version numbers
@@ -480,19 +495,13 @@ AC_SUBST(VERSION_MAJOR)
 AC_SUBST(VERSION_MINOR)
 AC_SUBST(VERSION_POINT)
 AC_SUBST(CODE_STATUS)
 AC_SUBST(VERSION_MINOR)
 AC_SUBST(VERSION_POINT)
 AC_SUBST(CODE_STATUS)
-AC_SUBST(SYSCONFDIR)
 
 dnl
 
 dnl
-AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR},
-  [Version number - Major (X._._).])
-AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR},
-  [Version number - Minor (_.X._).])
-AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT},
-  [Version number - Point (_._.X).])
-AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}",
-  [Version number, as a string.])
-AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}",
-  [Status of the code: "alpha", "beta" or "stable".])
+AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
+AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR})
+AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT})
+AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}")
+AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}")
 
 dnl =================================================================
 dnl Checks for programs needed to build.
 
 dnl =================================================================
 dnl Checks for programs needed to build.
@@ -500,7 +509,7 @@ dnl =================================================================
 
 dnl Keep AC_PROG_CC from setting its own defaults:
 if test "X$CFLAGS" = "X"; then
 
 dnl Keep AC_PROG_CC from setting its own defaults:
 if test "X$CFLAGS" = "X"; then
-   CFLAGS = " "
+   CFLAGS=" "
 fi
 
 AC_PROG_CC
 fi
 
 AC_PROG_CC
@@ -551,17 +560,23 @@ dnl =================================================================
 dnl Check for user and group validity
 dnl =================================================================
 
 dnl Check for user and group validity
 dnl =================================================================
 
-$ID privoxy >/dev/null 2>/dev/null
-if test $? -ne 0 ; then
- AC_MSG_WARN(There is no user 'privoxy' on this system)
-fi
-AC_MSG_CHECKING([for user])
-AC_ARG_WITH(user,
+
+if test "$EMXOS2" = yes; then
+  echo "Skipping user and group validity stuff.";
+
+else
+
+  $ID privoxy >/dev/null 2>/dev/null
+  if test $? -ne 0 ; then
+   AC_MSG_WARN(There is no user 'privoxy' on this system)
+  fi
+  AC_MSG_CHECKING([for user])
+  AC_ARG_WITH(user,
         [  --with-user=privoxy          Set user under which privoxy will run],
         [
                 if test "x$withval" != "xyes"; then
                   if test $ID = no ; then
         [  --with-user=privoxy          Set user under which privoxy will run],
         [
                 if test "x$withval" != "xyes"; then
                   if test $ID = no ; then
-                    AC_MSG_WARN(There is no 'id' program on this system)
+                    AC_MSG_ERROR(There is no 'id' program on this system)
                   else
                     AC_MSG_RESULT($with_user)
                     $ID $with_user 2>/dev/null >/dev/null
                   else
                     AC_MSG_RESULT($with_user)
                     $ID $with_user 2>/dev/null >/dev/null
@@ -577,17 +592,17 @@ AC_ARG_WITH(user,
         ],
         [
           if test $ID = no ; then
         ],
         [
           if test $ID = no ; then
-            AC_MSG_WARN(There is no 'id' program on this system)
+            AC_MSG_ERROR(There is no 'id' programm on this system)
           else
             AC_MSG_RESULT(none specified)
             USER=$with_user
           fi
         ]
           else
             AC_MSG_RESULT(none specified)
             USER=$with_user
           fi
         ]
-)
-AC_SUBST(USER)
+  )
+  AC_SUBST(USER)
 
 
-AC_MSG_CHECKING([for group])
-AC_ARG_WITH(group,
+  AC_MSG_CHECKING([for group])
+  AC_ARG_WITH(group,
         [  --with-group=privoxy         Set group for privoxy],
         [ 
                 if test "x$withval" != "xyes"; then
         [  --with-group=privoxy         Set group for privoxy],
         [ 
                 if test "x$withval" != "xyes"; then
@@ -614,14 +629,16 @@ AC_ARG_WITH(group,
         ],
         [
           if test $BGROUPS = no ; then
         ],
         [
           if test $BGROUPS = no ; then
-            AC_MSG_WARN(There is no 'groups' program on this system)
+            AC_MSG_ERROR(There is no 'groups' programm on this system)
           else
             AC_MSG_RESULT(none specified)
             GROUP=$with_group;
           fi
         ]
           else
             AC_MSG_RESULT(none specified)
             GROUP=$with_group;
           fi
         ]
-)
-AC_SUBST(GROUP)
+  )
+  AC_SUBST(GROUP)
+
+fi
 
 dnl =================================================================
 dnl additional gcc flags
 
 dnl =================================================================
 dnl additional gcc flags
@@ -658,6 +675,17 @@ else
   fi
 fi
 
   fi
 fi
 
+if test $dodk = auto; then
+       dodk=no
+       if test $target_type = unix; then
+               case "$host_os" in
+               linux* | gnu*)
+                       dodk=yes
+               ;;
+               esac
+       fi
+fi
+
 dnl Decide what to do based on target_type
 dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
 dnl This is because we don't know yet whether pthread is enabled.
 dnl Decide what to do based on target_type
 dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
 dnl This is because we don't know yet whether pthread is enabled.
@@ -686,6 +714,90 @@ else
 fi
 AC_SUBST(WIN_ONLY)
 
 fi
 AC_SUBST(WIN_ONLY)
 
+dnl Checking which text html browser we have avaliable
+if test $dodk != no; then
+       AC_CHECK_PROGS(WDUMP,w3m lynx links,false)
+       if test "$WDUMP" = false; then
+               AC_MSG_WARN(You need some kind of text browser to build documentation \(w3m, lynx and links are supported\))
+       fi
+       if test $DB2HTML = false; then
+               dnl We need to clean the variable, otherwise AC_CHECK_PROGS
+               dnl will fail   
+               DB2HTML=""
+               AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
+       fi
+fi
+AC_SUBST(WDUMP)
+AC_SUBST(DB2HTML)
+
+dnl If we use rpm, we need to check where %_topdir is
+AC_CHECK_PROGS(RPMBIN,rpm,false)
+if test $RPMBIN != false; then
+               RPM_BASE=`rpm --eval "%{_topdir}"`
+               if test "$RPM_BASE" = ""; then
+                       RPM_BASE=/usr/src/redhat
+               fi
+fi
+AC_SUBST(RPM_BASE)
+
+dnl Check for jade, so we can build the documentation
+AC_CHECK_PROGS(JADEBIN,jade openjade,false)
+AC_SUBST(JADEBIN)
+
+dnl Check for man2html for docs.
+AC_CHECK_PROGS(MAN2HTML,man2html,false)
+AC_SUBST(MAN2HTML)
+
+dnl Set doc status flag for conditional content inclusions
+DOC_STATUS=p-not-stable
+if  test $CODE_STATUS = stable; then
+     DOC_STATUS="p-stable"
+fi
+AC_SUBST(DOC_STATUS)
+
+dnl Checking for the docbook.dsl stylesheet file
+dnl It is still not portable (directory slash)
+JADECAT=""
+if test $dodk = yes; then
+  if test $DKPREFIX = none; then
+    for i in /usr/share/sgml/docbook/dsssl-stylesheets \
+             /usr/share/sgml/docbkdsl /usr/share/sgml/docbook-dsssl \
+             /usr/local/share/sgml/docbook/dsssl/modular \
+             /usr/share/sgml/docbook/stylesheet/dsssl/modular/ \
+             ; do
+dnl  echo -n does not fly with /bin/sh.
+dnl      echo -n "checking for $i/html/docbook.dsl..."
+      AC_MSG_CHECKING([for $i])
+      if test -f $i/html/docbook.dsl; then
+        echo "yes"
+        DKPREFIX=$i
+        break
+      else
+        echo "no"
+      fi
+    done
+# where are the catalogs?
+    for i in /usr/share/sgml/CATALOG.docbk30 \
+             /usr/share/sgml/CATALOG.docbk31 \
+             /usr/share/sgml/CATALOG.docbk31 \
+             /usr/local/share/sgml/docbook/3.0/docbook.cat \
+             /usr/local/share/sgml/docbook/3.1/docbook.cat \
+             /usr/share/sgml/docbook/dtd/3.1/docbook.cat \
+             ; do
+dnl     echo -n "checking for $i..."
+      AC_MSG_CHECKING([for $i])
+      if test -f $i; then
+        echo "yes"
+        JADECAT="$JADECAT -c $i"
+      else
+        echo "no"
+      fi
+    done
+  fi
+fi
+AC_SUBST(JADECAT)
+AC_SUBST(DKPREFIX)
+
 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
 old_CFLAGS_nospecial=$CFLAGS
 CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
 old_CFLAGS_nospecial=$CFLAGS
 CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
@@ -713,16 +825,22 @@ fi])
 
 if test $have_pthread = yes; then
   PTHREAD_ONLY=
 
 if test $have_pthread = yes; then
   PTHREAD_ONLY=
-  AC_DEFINE(FEATURE_PTHREAD,1,
-  [Define to use POSIX threads instead of native threads.])
+  AC_DEFINE(FEATURE_PTHREAD)
   echo Using POSIX threads
   if test "$GCC" = "yes"; then
     # Set a GCC specific switch:
     if test "$target_type" = "unix"; then
   echo Using POSIX threads
   if test "$GCC" = "yes"; then
     # Set a GCC specific switch:
     if test "$target_type" = "unix"; then
-      # This compiler switch makes GCC on Linux thread-safe
-      # However, it's not supported on most other OS.
-      PTHREAD_LIB=
-      SPECIAL_CFLAGS="-pthread"
+      ac_jgf_save_CFLAGS=$CFLAGS
+      CFLAGS="$CFLAGS -pthread"
+      AC_TRY_LINK([#include <pthread.h>],
+        [void *p = pthread_create;],
+        [
+          # This compiler switch makes GCC on Linux thread-safe
+          # However, it's not supported on most other OS.
+          PTHREAD_LIB=
+          SPECIAL_CFLAGS="-pthread"
+        ])
+      CFLAGS=$ac_jgf_save_CFLAGS
     fi
   fi
 else
     fi
   fi
 else
@@ -750,8 +868,7 @@ AC_CHECK_FUNC(gethostbyaddr_r, [
     int l, bl, t, e;
     (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e)
   ], [
     int l, bl, t, e;
     (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e)
   ], [
-    AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS,1,
-      [Define if gethostbyaddr_r() exists and takes 8 arguments])
+    AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS)
     AC_MSG_RESULT([8 args])
   ], [
     AC_TRY_COMPILE([
     AC_MSG_RESULT([8 args])
   ], [
     AC_TRY_COMPILE([
@@ -762,8 +879,7 @@ AC_CHECK_FUNC(gethostbyaddr_r, [
       int l, bl, t, e;
       (void) gethostbyaddr_r(a, l, t, h, b, bl, &e)
     ], [
       int l, bl, t, e;
       (void) gethostbyaddr_r(a, l, t, h, b, bl, &e)
     ], [
-      AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS,1,
-      [Define if gethostbyaddr_r() exists and takes 7 arguments])
+      AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS)
       AC_MSG_RESULT([7 args])
     ], [
       AC_TRY_COMPILE([
       AC_MSG_RESULT([7 args])
     ], [
       AC_TRY_COMPILE([
@@ -775,8 +891,7 @@ AC_CHECK_FUNC(gethostbyaddr_r, [
         int l, t;
         (void) gethostbyaddr_r(a, l, t, h, d)
       ], [
         int l, t;
         (void) gethostbyaddr_r(a, l, t, h, d)
       ], [
-        AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS,1,
-      [Define if gethostbyaddr_r() exists and takes 5 arguments])
+        AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS)
         AC_MSG_RESULT([5 args])
       ], [
         AC_MSG_RESULT(unrecognised)
         AC_MSG_RESULT([5 args])
       ], [
         AC_MSG_RESULT(unrecognised)
@@ -797,8 +912,7 @@ AC_CHECK_FUNC(gethostbyname_r, [
     int bl, e;
     (void) gethostbyname_r(n, h, b, bl, &r, &e)
   ], [
     int bl, e;
     (void) gethostbyname_r(n, h, b, bl, &r, &e)
   ], [
-    AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS,1,
-      [Define if gethostbyname_r() exists and takes 6 arguments])
+    AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS)
     AC_MSG_RESULT([6 args])
   ], [
     AC_TRY_COMPILE([
     AC_MSG_RESULT([6 args])
   ], [
     AC_TRY_COMPILE([
@@ -809,8 +923,7 @@ AC_CHECK_FUNC(gethostbyname_r, [
       int bl, e;
       (void) gethostbyname_r(n, h, b, bl, &e)
     ], [
       int bl, e;
       (void) gethostbyname_r(n, h, b, bl, &e)
     ], [
-      AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS,1,
-      [Define if gethostbyname_r() exists and takes 5 arguments])
+      AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS)
       AC_MSG_RESULT([5 args])
     ], [
       AC_TRY_COMPILE([
       AC_MSG_RESULT([5 args])
     ], [
       AC_TRY_COMPILE([
@@ -821,8 +934,7 @@ AC_CHECK_FUNC(gethostbyname_r, [
         char *n,
         (void) gethostbyname_r(n, h, d)
       ], [
         char *n,
         (void) gethostbyname_r(n, h, d)
       ], [
-        AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS,1,
-      [Define if gethostbyname_r() exists and takes 3 arguments])
+        AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS)
         AC_MSG_RESULT([3 args])
       ], [
         AC_MSG_RESULT(unrecognised)
         AC_MSG_RESULT([3 args])
       ], [
         AC_MSG_RESULT(unrecognised)
@@ -843,8 +955,7 @@ AC_CHECK_FUNC(gmtime_r, [
     (void) gmtime_r(t, tm)
   ], [
     AC_MSG_RESULT(ok)
     (void) gmtime_r(t, tm)
   ], [
     AC_MSG_RESULT(ok)
-    AC_DEFINE(HAVE_GMTIME_R,1,
-      [Define if gmtime_r(struct time *, struct tm *) exists])
+    AC_DEFINE(HAVE_GMTIME_R)
   ], [
     AC_MSG_RESULT(unrecognised)
   ])
   ], [
     AC_MSG_RESULT(unrecognised)
   ])
@@ -862,8 +973,7 @@ AC_CHECK_FUNC(localtime_r, [
     (void) localtime_r(t, tm)
   ], [
     AC_MSG_RESULT(ok)
     (void) localtime_r(t, tm)
   ], [
     AC_MSG_RESULT(ok)
-    AC_DEFINE(HAVE_LOCALTIME_R,1,
-      [Define if localtime_r(struct time *, struct tm *) exists])
+    AC_DEFINE(HAVE_LOCALTIME_R)
   ], [
     AC_MSG_RESULT(unrecognised)
   ])
   ], [
     AC_MSG_RESULT(unrecognised)
   ])
@@ -875,9 +985,9 @@ dnl =================================================================
 dnl Solaris specific
 dnl FIXME: Not tested on Solaris yet...
 dnl ISFIXED: Have tested it on Solaris, but there are other ways to
 dnl Solaris specific
 dnl FIXME: Not tested on Solaris yet...
 dnl ISFIXED: Have tested it on Solaris, but there are other ways to
-dnl     make these checks generic, e.g.:
+dnl    make these checks generic, e.g.:
 dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt))
 dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt))
-dnl     (Moritz Barsnick <moritz@barsnick.net>)
+dnl    (Moritz Barsnick <moritz@barsnick.net>)
 dnl =================================================================
 
 
 dnl =================================================================
 
 
@@ -885,8 +995,7 @@ SOCKET_LIB=
 
 case "$host" in
 *-solaris*) SOCKET_LIB="-lsocket -lnsl"
 
 case "$host" in
 *-solaris*) SOCKET_LIB="-lsocket -lnsl"
-            AC_DEFINE(__EXTENSIONS__,1,
-              [Define to 1 on Solaris.  Do not define on other platforms.])
+            AC_DEFINE(__EXTENSIONS__)
             if test "$GCC" = "yes"; then
               # Set a GCC specific switch:
               # This compiler switch makes Solaris thread-safe
             if test "$GCC" = "yes"; then
               # Set a GCC specific switch:
               # This compiler switch makes Solaris thread-safe
@@ -907,9 +1016,9 @@ dnl =================================================================
 
 AC_MSG_CHECKING([for socklen_t])
 AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
 
 AC_MSG_CHECKING([for socklen_t])
 AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
-        AC_MSG_RESULT([no])
-        AC_DEFINE(socklen_t,int,
-                [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
+       AC_MSG_RESULT([no])
+       AC_DEFINE(socklen_t,int,
+               [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
 
 
 dnl =================================================================
 
 
 dnl =================================================================
@@ -1025,8 +1134,7 @@ dnl =================================================================
 dnl Always defined
 dnl =================================================================
 
 dnl Always defined
 dnl =================================================================
 
-AC_DEFINE(__MT__,1,
-  [Always define this, for thread safety on some platforms.])
+AC_DEFINE(__MT__)
 
 dnl =================================================================
 dnl Features
 
 dnl =================================================================
 dnl Features
@@ -1034,161 +1142,86 @@ dnl =================================================================
 
 AC_ARG_ENABLE(toggle,
 [  --disable-toggle         Don't support temporary disable],
 
 AC_ARG_ENABLE(toggle,
 [  --disable-toggle         Don't support temporary disable],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_TOGGLE,1,
-    [ Allow Privoxy to be "disabled" so it is just a normal non-blocking
-      non-anonymizing proxy.  This is useful if you're trying to access a
-      blocked or broken site - just change the setting in the config file,
-      or use the handy "Disable" menu option in the Windows GUI. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_TOGGLE)
+fi],AC_DEFINE(FEATURE_TOGGLE))
 
 AC_ARG_ENABLE(force,
 [  --disable-force          Don't allow single-page disable],
 
 AC_ARG_ENABLE(force,
 [  --disable-force          Don't allow single-page disable],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_FORCE_LOAD,1,
-    [ Bypass filtering for 1 page only. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_FORCE_LOAD)
+fi],AC_DEFINE(FEATURE_FORCE_LOAD))
 
 AC_ARG_ENABLE(fast-redirects,
 [  --disable-fast-redirects Don't support fast redirects],
 
 AC_ARG_ENABLE(fast-redirects,
 [  --disable-fast-redirects Don't support fast redirects],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_FAST_REDIRECTS,1,
-    [ Locally redirect remote script-redirect URLs. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_FAST_REDIRECTS)
+fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
 
 AC_ARG_ENABLE(killpopup,
 [  --disable-killpopup      Never block popups],
 
 AC_ARG_ENABLE(killpopup,
 [  --disable-killpopup      Never block popups],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_KILL_POPUPS,1,
-    [ Kills JavaScript popups - window.open, onunload, etc. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_KILL_POPUPS)
+fi],AC_DEFINE(FEATURE_KILL_POPUPS))
 
 AC_ARG_ENABLE(stats,
 [  --disable-stats          Don't keep statistics],
 
 AC_ARG_ENABLE(stats,
 [  --disable-stats          Don't keep statistics],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_STATISTICS,1,
-    [ Enables statistics function. ])
-fi
-
-AC_ARG_ENABLE(activity-console,
-[  --enable-activity-console    Gather and send extended statistics to the activity console],
-[enableval2=$enableval],
-[enableval2=no])
-if test $enableval2 = yes; then
-  ACTIVITY_ONLY=
-  AC_DEFINE(FEATURE_ACTIVITY_CONSOLE,1,
-    [ Enables sending statistics to the activity console. This is currently
-      experimental, and will require some porting work for a few more platforms. ])
-  else
-    ACTIVITY_ONLY=#
-fi
-AC_SUBST(ACTIVITY_ONLY)
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_STATISTICS)
+fi],AC_DEFINE(FEATURE_STATISTICS))
 
 AC_ARG_ENABLE(ie-images,
 
 AC_ARG_ENABLE(ie-images,
-[  --enable-ie-images      Don't auto-detect whether a request from MS Internet
-                           Explorer is for an image or HTML.],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE,1,
-    [ Detect image requests automatically for MSIE.  Will fall back to
-      other image-detection methods (i.e. ´´+image´´ action) for other
-      browsers.
-
-      You must also define FEATURE_IMAGE_BLOCKING to use this feature.
-
-      It detects the following header pair as an image request:
-      ´´User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)´´,
-      ´´Accept: * / *´´.
-
-      And the following as a HTML request:
-      User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0),
-      Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, * / *.
-
-      And no, I haven't got that backwards - IE is being wierd.
-
-      Known limitations: 
-      1) If you press shift-reload on a blocked HTML page, you get
-         the image blocked page, not the HTML ´´blocked´´ page.
-      2) Once an image ´´blocked´´ page has been sent, viewing it 
-         in it's own browser window *should* bring up the HTML
-         ´´blocked´´ page, but it doesn't.  You need to clear the 
-         browser cache to get the HTML version again.
-
-      These limitations are due to IE making inconsistent choices
-      about which ´´Accept:´´ header to send. ])
-fi
+[  --enable-ie-images       Enable a quick but not always reliable auto-detect whether requests from
+                           MS Internet Explorer are for an image or not.],
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE)
+fi],)
 
 AC_ARG_ENABLE(image-blocking,
 [  --disable-image-blocking Don't try to figure out whether a request is 
                            for an image or HTML - assume HTML.],
 
 AC_ARG_ENABLE(image-blocking,
 [  --disable-image-blocking Don't try to figure out whether a request is 
                            for an image or HTML - assume HTML.],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_IMAGE_BLOCKING,1,
-    [ Allow blocking using images as well as HTML.
-      If you do not define this then everything is blocked as HTML.
-      Note that this is required if you want to use FEATURE_IMAGE_DETECT_MSIE. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_IMAGE_BLOCKING)
+fi],
+AC_DEFINE(FEATURE_IMAGE_BLOCKING))
 
 AC_ARG_ENABLE(acl-files,
 [  --disable-acl-files      Prevents the use of ACL files to control access to
                            the proxy by IP address.],
 
 AC_ARG_ENABLE(acl-files,
 [  --disable-acl-files      Prevents the use of ACL files to control access to
                            the proxy by IP address.],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_ACL,1,
-    [ Define to 1 to allow the use of an ACL to control access to the proxy by IP address. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_ACL)
+fi],
+AC_DEFINE(FEATURE_ACL))
 
 AC_ARG_ENABLE(trust-files,
 [  --disable-trust-files    Prevents the use of trust files.],
 
 AC_ARG_ENABLE(trust-files,
 [  --disable-trust-files    Prevents the use of trust files.],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_TRUST,1,
-    [ Define to 1 to allow the use of trust files. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_TRUST)
+fi],
+AC_DEFINE(FEATURE_TRUST))
 
 AC_ARG_ENABLE(jar-files,
 [  --disable-jar-files      Prevents the use of jar files to capture cookies.],
 
 AC_ARG_ENABLE(jar-files,
 [  --disable-jar-files      Prevents the use of jar files to capture cookies.],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_COOKIE_JAR,1,
-    [ Define to 1 to allow the user to capture cookies. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_COOKIE_JAR)
+fi],
+AC_DEFINE(FEATURE_COOKIE_JAR))
 
 AC_ARG_ENABLE(editor,
 [  --disable-editor         Prevents the use of the web-based actions file
                            editor and web-based temporary disable setting.],
 
 AC_ARG_ENABLE(editor,
 [  --disable-editor         Prevents the use of the web-based actions file
                            editor and web-based temporary disable setting.],
-[enableval2=$enableval],
-[enableval2=yes])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS,1,
-    [ Define to 1 to enable the web-based configuration (actions file) editor.
-      If you have a shared proxy, you might want to turn this off. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
+fi],
+AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
 
 AC_ARG_ENABLE(no-gifs,
 [  --enable-no-gifs         Use politically correct PNG format instead of GIF
                            for built-in images. May not work with all browsers.],
 
 AC_ARG_ENABLE(no-gifs,
 [  --enable-no-gifs         Use politically correct PNG format instead of GIF
                            for built-in images. May not work with all browsers.],
-[enableval2=$enableval],
-[enableval2=no])
-if test $enableval2 = yes; then
-  AC_DEFINE(FEATURE_NO_GIFS,1,
-    [ Define to 1 to use PNG instead of GIF for built-in images. ])
-fi
+[if test $enableval = yes; then
+  AC_DEFINE(FEATURE_NO_GIFS)
+fi])
+
 
 dnl pcre/pcrs is needed for CGI anyway, so
 dnl the choice is only between static and
 
 dnl pcre/pcrs is needed for CGI anyway, so
 dnl the choice is only between static and
@@ -1217,12 +1250,7 @@ if test $have_pcre = "yes"; then
 else
   echo "using built-in static pcre"
   pcre_dyn=no
 else
   echo "using built-in static pcre"
   pcre_dyn=no
-  AC_DEFINE(STATIC_PCRE,1,
-    [Define to 1 if PCRE should be statically built in instead of linking
-     with libpcre.
-     (This is determined by configure depending on the availiability of
-     libpcre and user preferences). The name is ugly, but pcre needs it.
-     Don't try to change this here! Use configure instead.])
+  AC_DEFINE(STATIC_PCRE)
   STATIC_PCRE_ONLY=
 fi
 
   STATIC_PCRE_ONLY=
 fi
 
@@ -1236,129 +1264,13 @@ if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
   LIBS="$LIBS -lpcrs"
 else
   echo "using built-in static pcrs"
   LIBS="$LIBS -lpcrs"
 else
   echo "using built-in static pcrs"
-  AC_DEFINE(STATIC_PCRS,1,
-    [Define to 1 if PCRS should be statically built in instead of linking
-     with libpcrs.
-     (This is determined by configure depending on the availiability of
-     libpcrs and user preferences).
-     Don't try to change this here! Use configure instead.])
+  AC_DEFINE(STATIC_PCRS)
   STATIC_PCRS_ONLY=
 fi
 
 AC_SUBST(STATIC_PCRE_ONLY)
 AC_SUBST(STATIC_PCRS_ONLY)
 
   STATIC_PCRS_ONLY=
 fi
 
 AC_SUBST(STATIC_PCRE_ONLY)
 AC_SUBST(STATIC_PCRS_ONLY)
 
-dnl =================================================================
-dnl DocBook stuff
-dnl =================================================================
-
-AC_ARG_WITH(docbook, dnl
-  --with-docbook=<directory>    
-                           Set the location of the dsssl stylesheet
-                           (default = search),[dnl
-DKPREFIX=$withval
-])
-
-dnl Check for jade, so we can build the documentation
-dnl Openjade is preferred according to docs, but jade
-dnl is *much* faster.
-AC_CHECK_PROGS(JADEBIN,jade openjade,false)
-AC_SUBST(JADEBIN)
-
-dnl Checking for the docbook.dsl stylesheet file
-dnl It is still not portable (directory slash)
-dnl   ^ Why not?  All systems use / don't they?
-dnl   Windows certainly can.  Is this a Mac or
-dnl   Amiga issue?  -- Jon  /dsssl/docbook/html/docbook.dsl
-DKPREFIXCOPY=$DKPREFIX
-DKPREFIX=false
-for i in $DKPREFIXCOPY /usr/share/sgml/docbook/stylesheet/dsssl/modular \
-        /usr/share/sgml/docbook/dsssl-stylesheets /usr/share/sgml/docbkdsl \
-        /usr/share/sgml/docbook-dsssl /usr/local/share/sgml/docbook/dsssl/modular; do
-dnl  echo -n does not fly with /bin/sh.
-dnl      echo -n "checking for $i/html/docbook.dsl..."
-      AC_MSG_CHECKING([for $i])
-        if test -f $i/html/docbook.dsl; then
-                echo "yes"
-                DKPREFIX=$i
-                break 
-        else
-                echo "no"
-        fi
-done
-AC_SUBST(DKPREFIX)
-
-JADECAT=""
-dnl where are the catalogs?
-for i in /usr/share/sgml/CATALOG.docbk30 \
-         /usr/share/sgml/CATALOG.docbk31 \
-        /usr/local/share/sgml/docbook/3.0/docbook.cat \
-        /usr/local/share/sgml/docbook/3.1/docbook.cat \
-        ; do
-dnl     echo -n "checking for $i..."
-      AC_MSG_CHECKING([for $i])
-        if test -f $i; then
-                echo "yes"
-                JADECAT="$JADECAT -c $i"
-        else
-                echo "no"
-        fi
-done
-AC_SUBST(JADECAT)
-
-dnl NOT USED?
-dnl DB2HTML=false
-dnl AC_ARG_WITH(db2html, dnl
-dnl  --with-db2html=<path/executable>
-dnl                          Set the location of the docbook to html converter
-dnl                           (default = search),[dnl
-dnl DB2HTML=$withval
-dnl ])
-dnl if ! test -x $DB2HTML; then
-dnl     DB2HTML=""
-dnl fi
-dnl 
-dnl Check for a docbook -> HTML converter
-dnl AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
-dnl AC_SUBST(DB2HTML)
-
-dnl Check for a text browser that supports -dump
-AC_CHECK_PROGS(WDUMP,w3m lynx links,false)
-AC_SUBST(WDUMP)
-
-dnl Check for man2html for docs.
-AC_CHECK_PROGS(MAN2HTML,man2html,false)
-AC_SUBST(MAN2HTML)
-
-dnl Set doc status, used for conditional content inclusions
-DOC_STATUS=""
-if  test $CODE_STATUS = alpha; then
-     DOC_STATUS="-ip-alpha -ip-not-stable"
-fi
-if  test $CODE_STATUS = beta; then
-     DOC_STATUS="-ip-beta -ip-not-stable"
-fi
-if  test $CODE_STATUS = stable; then
-     DOC_STATUS="-ip-stable"
-fi
-echo "checking for doc status flags... $DOC_STATUS"
-AC_SUBST(DOC_STATUS)
-
-dnl =================================================================
-dnl RPM stuff
-dnl =================================================================
-
-dnl If we use rpm, we need to check where %_topdir is
-AC_CHECK_PROGS(RPMBIN,rpm,false)
-if test $RPMBIN != false; then
-                RPM_BASE=`rpm --eval "%{_topdir}"`
-                if test "$RPM_BASE" = ""; then
-                        RPM_BASE=/usr/src/redhat
-                fi
-fi
-AC_SUBST(RPM_BASE)
-
-
 dnl =================================================================
 dnl Final cleanup and output
 dnl =================================================================
 dnl =================================================================
 dnl Final cleanup and output
 dnl =================================================================
@@ -1370,5 +1282,4 @@ AC_SUBST(SPECIAL_CFLAGS)
 
 AC_SUBST(PTHREAD_LIB)
 
 
 AC_SUBST(PTHREAD_LIB)
 
-AC_OUTPUT(GNUmakefile doc/source/ldp.dsl doc/source/GNUmakefile)
-
+AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)
similarity index 97%
rename from src/cygwin.h
rename to cygwin.h
index 1ed69f6..c57602e 100644 (file)
+++ b/cygwin.h
@@ -3,7 +3,7 @@
 #define CYGWIN_H_VERSION "$Id: cygwin.h,v 1.4 2002/03/26 22:29:54 swa Exp $"
 /*********************************************************************
  *
 #define CYGWIN_H_VERSION "$Id: cygwin.h,v 1.4 2002/03/26 22:29:54 swa Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/cygwin.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/cygwin.h,v $
  *
  * Purpose     :  The windows.h file seems to be a *tad* different, so I
  *                will bridge the gaps here.  Perhaps I should convert the
  *
  * Purpose     :  The windows.h file seems to be a *tad* different, so I
  *                will bridge the gaps here.  Perhaps I should convert the
similarity index 94%
rename from src/deanimate.c
rename to deanimate.c
index b411f90..b9592e8 100644 (file)
@@ -1,7 +1,7 @@
-const char deanimate_rcs[] = "$Id: deanimate.c,v 2.1 2002/08/26 11:06:27 sarantis Exp $";
+const char deanimate_rcs[] = "$Id: deanimate.c,v 1.12.2.1 2004/10/03 12:53:32 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/deanimate.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/deanimate.c,v $
  *
  * Purpose     :  Declares functions to manipulate binary images on the
  *                fly.  High-level functions include:
  *
  * Purpose     :  Declares functions to manipulate binary images on the
  *                fly.  High-level functions include:
@@ -40,11 +40,14 @@ const char deanimate_rcs[] = "$Id: deanimate.c,v 2.1 2002/08/26 11:06:27 saranti
  *
  * Revisions   :
  *    $Log: deanimate.c,v $
  *
  * Revisions   :
  *    $Log: deanimate.c,v $
- *    Revision 2.1  2002/08/26 11:06:27  sarantis
- *    Fix typo failiure -> failure
- *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.12.2.1  2004/10/03 12:53:32  david__schmidt
+ *    Add the ability to check jpeg images for invalid
+ *    lengths of comment blocks.  Defensive strategy
+ *    against the exploit:
+ *       Microsoft Security Bulletin MS04-028
+ *       Buffer Overrun in JPEG Processing (GDI+) Could
+ *       Allow Code Execution (833987)
+ *    Enabled with +inspect-jpegs in actions files.
  *
  *    Revision 1.12  2002/05/12 21:36:29  jongfoster
  *    Correcting function comments
  *
  *    Revision 1.12  2002/05/12 21:36:29  jongfoster
  *    Correcting function comments
@@ -139,7 +142,7 @@ void buf_free(struct binbuffer *buf)
  *          2  :  length = Desired minimum size
  *                
  *
  *          2  :  length = Desired minimum size
  *                
  *
- * Returns     :  0 on success, 1 on failure.
+ * Returns     :  0 on success, 1 on failiure.
  *
  *********************************************************************/
 int buf_extend(struct binbuffer *buf, size_t length)
  *
  *********************************************************************/
 int buf_extend(struct binbuffer *buf, size_t length)
@@ -180,7 +183,7 @@ int buf_extend(struct binbuffer *buf, size_t length)
  *          2  :  dst = Pointer to the destination binbuffer
  *          3  :  length = Number of bytes to be copied
  *
  *          2  :  dst = Pointer to the destination binbuffer
  *          3  :  length = Number of bytes to be copied
  *
- * Returns     :  0 on success, 1 on failure.
+ * Returns     :  0 on success, 1 on failiure.
  *
  *********************************************************************/
 int buf_copy(struct binbuffer *src, struct binbuffer *dst, size_t length)
  *
  *********************************************************************/
 int buf_copy(struct binbuffer *src, struct binbuffer *dst, size_t length)
@@ -226,7 +229,7 @@ int buf_copy(struct binbuffer *src, struct binbuffer *dst, size_t length)
  *          1  :  src = Pointer to the source binbuffer
  *          2  :  offset = Offset to the desired byte
  *
  *          1  :  src = Pointer to the source binbuffer
  *          2  :  offset = Offset to the desired byte
  *
- * Returns     :  The byte on success, or 0 on failure
+ * Returns     :  The byte on success, or 0 on failiure
  *
  *********************************************************************/
 unsigned char buf_getbyte(struct binbuffer *src, size_t offset)
  *
  *********************************************************************/
 unsigned char buf_getbyte(struct binbuffer *src, size_t offset)
@@ -255,7 +258,7 @@ unsigned char buf_getbyte(struct binbuffer *src, size_t offset)
  * Parameters  :
  *          1  :  buf = Pointer to the binbuffer
  *
  * Parameters  :
  *          1  :  buf = Pointer to the binbuffer
  *
- * Returns     :  0 on success, or 1 on failure
+ * Returns     :  0 on success, or 1 on failiure
  *
  *********************************************************************/
 int gif_skip_data_block(struct binbuffer *buf)
  *
  *********************************************************************/
 int gif_skip_data_block(struct binbuffer *buf)
@@ -294,7 +297,7 @@ int gif_skip_data_block(struct binbuffer *buf)
  *          1  :  src = Pointer to the source binbuffer
  *          2  :  dst = Pointer to the destination binbuffer
  *
  *          1  :  src = Pointer to the source binbuffer
  *          2  :  dst = Pointer to the destination binbuffer
  *
- * Returns     :  0 on success, or 1 on failure
+ * Returns     :  0 on success, or 1 on failiure
  *
  *********************************************************************/
 int gif_extract_image(struct binbuffer *src, struct binbuffer *dst)
  *
  *********************************************************************/
 int gif_extract_image(struct binbuffer *src, struct binbuffer *dst)
@@ -359,7 +362,7 @@ int gif_extract_image(struct binbuffer *src, struct binbuffer *dst)
  *          3  :  get_first_image = Flag: If set, get the first image
  *                                        If unset (default), get the last
  *
  *          3  :  get_first_image = Flag: If set, get the first image
  *                                        If unset (default), get the last
  *
- * Returns     :  0 on success, or 1 on failure
+ * Returns     :  0 on success, or 1 on failiure
  *
  *********************************************************************/
 int gif_deanimate(struct binbuffer *src, struct binbuffer *dst, int get_first_image)
  *
  *********************************************************************/
 int gif_deanimate(struct binbuffer *src, struct binbuffer *dst, int get_first_image)
@@ -525,7 +528,7 @@ write:
  * Parameters  :
  *          1  :  src = Pointer to the image binbuffer
  *
  * Parameters  :
  *          1  :  src = Pointer to the image binbuffer
  *
- * Returns     :  0 on success, or 1 on failure
+ * Returns     :  0 on success, or 1 on failiure
  *
  *********************************************************************/
 int jpeg_inspect(struct binbuffer *src, struct binbuffer *dst)
  *
  *********************************************************************/
 int jpeg_inspect(struct binbuffer *src, struct binbuffer *dst)
similarity index 86%
rename from src/deanimate.h
rename to deanimate.h
index f0aed46..71cb547 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef DEANIMATE_H_INCLUDED
 #define DEANIMATE_H_INCLUDED
 #ifndef DEANIMATE_H_INCLUDED
 #define DEANIMATE_H_INCLUDED
-#define DEANIMATE_H_VERSION "$Id: deanimate.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define DEANIMATE_H_VERSION "$Id: deanimate.h,v 1.8.2.1 2004/10/03 12:53:32 david__schmidt Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/deanimate.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/deanimate.h,v $
  *
  * Purpose     :  Declares functions to manipulate binary images on the
  *                fly.  High-level functions include:
  *
  * Purpose     :  Declares functions to manipulate binary images on the
  *                fly.  High-level functions include:
  *
  * Revisions   :
  *    $Log: deanimate.h,v $
  *
  * Revisions   :
  *    $Log: deanimate.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.8.2.1  2004/10/03 12:53:32  david__schmidt
+ *    Add the ability to check jpeg images for invalid
+ *    lengths of comment blocks.  Defensive strategy
+ *    against the exploit:
+ *       Microsoft Security Bulletin MS04-028
+ *       Buffer Overrun in JPEG Processing (GDI+) Could
+ *       Allow Code Execution (833987)
+ *    Enabled with +inspect-jpegs in actions files.
  *
  *    Revision 1.8  2002/03/26 22:29:54  swa
  *    we have a new homepage!
  *
  *    Revision 1.8  2002/03/26 22:29:54  swa
  *    we have a new homepage!
diff --git a/debian/.gitignore b/debian/.gitignore
deleted file mode 100644 (file)
index 0bf51c7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-files
-privoxy
-privoxy.postinst.debhelper
-privoxy.postrm.debhelper
-privoxy.prerm.debhelper
-privoxy.substvars
-
index 1e13c06..738b98a 100644 (file)
@@ -7,5 +7,16 @@ privoxy for Debian
   want to use these features, you can enable them in
   /etc/privoxy/config and do a "/etc/init.d/privoxy restart".
 
   want to use these features, you can enable them in
   /etc/privoxy/config and do a "/etc/init.d/privoxy restart".
 
+- A patch was applied to access the local copy of the user manual
+  (/usr/share/doc/privoxy/user-manual/*) was applied.  With the option
+   user-manual /usr/share/doc/privoxy/user-manual
+  in /etc/privoxy/config this is activated and the manual can be
+  accessed as http://config.privoxy.org/user-manual
+
+- A patch was applied to use multiple filter files.  So you can leave
+  /etc/privoxy/default.filter untouched and use a local file like
+  /etc/privoxy/user.filter for your local changes (you have to enable
+  this file using a second filterfile directive in /etc/privoxy/config).
+
 Roland Rosenfeld <roland@debian.org>
 Roland Rosenfeld <roland@debian.org>
-$Id$
+$Id: README.Debian,v 1.1.2.3 2006/07/02 11:06:24 roro Exp $
index 4865bc2..804eefc 100644 (file)
-privoxy (3.1.1-3) unstable; urgency=low
-
-  * New build based on CVS as of 2003-03-01.
+privoxy (3.0.3-2-1) unstable; urgency=low
+
+  * New upstream version 3.0.3-2.
+  * Add debian/watch file.
+  * Remove parts of 13_memory.dpatch, which seem to be free too much
+    memory (Closes: #353110, #354611).
+
+ -- Roland Rosenfeld <roland@debian.org>  Mon, 27 Feb 2006 23:28:52 +0100
+
+privoxy (3.0.3-6) unstable; urgency=low
+
+  * Now hopefully really redirect all output of logrotate to /dev/null
+    (Closes: #314868).
+  * Migrate all patches to dpatch mechanism.
+  * Upgrade to debhelper 5.
+  * Call htmldoc with parameter --no-embedfonts to keep PDF files small.
+  * Build-Depends on htmldoc (>= 1.8.25-1), because older versions caused
+    broken PDF documentation on 64bit systems.
+  * Fix some typos in user-manual.
+  * Add multiple filter file support (from CVS) (Closes: #201177).
+  * Fix some memory leaks, mallocs, double frees (from CVS).
+  * Remove CVS $-tags from config files to make it easier for users to
+    keep the configuration in a VCS (Closes: #350799).
+  * Remove trailing spaces from all config files now.
+  * Build man page (and HTML version of it) at build time.
+
+ -- Roland Rosenfeld <roland@debian.org>  Sat, 11 Feb 2006 21:27:14 +0100
+
+privoxy (3.0.3-5) unstable; urgency=low
+
+  * Redirect output of restart script in logrotate to /dev/null
+    (Closes: #314868).
+  * Upgrade to Standards-Version 3.6.2:
+    - Recommends: doc-base
+  * Build-Depends on autotools-dev and copy config.guess and config.sub
+    from there on every build (Closes: #332767).
+  * After dechunking remove the "chunked"-header instead of replacing it
+    by an d"identity" header. Thanks to Michael Shields for reporting this
+    (Closes: #318683).
+  * Update address of FSF in copyright file.
+
+ -- Roland Rosenfeld <roland@debian.org>  Sun,  9 Oct 2005 13:44:55 +0200
+
+privoxy (3.0.3-4) unstable; urgency=low
+
+  * Stop converting entities to 8bit chars in the documentation 
+    (Closes: #203697).
+  * Fix typos ('persistant' and 'Januar') in man page and man page sources
+    (Closes: #302145).
+  * Restart privoxy in logrotate script instead of sendig a kill -HUP, to
+    triggering reopen of log files (Closes: #285059).
+  * Apply patch by Jindrich Makovicka to fix race conditions in log
+    writing functions (Closes: #299662).
+  * Stop hiding referrer for www.petitiononline.com/mod_perl/signed.cgi,
+    because this site does not work otherwise (Closes: #250407).
+
+ -- Roland Rosenfeld <roland@debian.org>  Sun, 15 May 2005 15:28:56 +0200
+
+privoxy (3.0.3-3) unstable; urgency=low
+
+  * Now really remove multiproxy.org from all documentation, not only from
+    the config file (Closes: #198953). 
+
+ -- Roland Rosenfeld <roland@debian.org>  Sun, 15 Feb 2004 23:11:29 +0100
+
+privoxy (3.0.3-2) unstable; urgency=low
+
+  * no banners-by-side on "/valid-" images, because that's usually from
+    validator.w3.org (Closes: #221009).
+  * Upgrade to Standards-Version 3.6.1 (no changes).
+  * Add Homepage URL to the package description.
+  * If the privoxy user is already existing as a non-system user in
+    postinst, this no longer fails, but deletes the non-system user before
+    adding it again as a system user (Closes: #232724).
+  * Use deluser instead of userdel in postrm.
+  * Redirect stderr of privoxy to /var/log/privoxy/errfile to avoid
+    problems with kept open file descriptors (Closes: #200712).
+  * Remove comment from config file, which points to list of open proxies
+    at multiproxy.org (Closes: #198953).
+
+ -- Roland Rosenfeld <roland@debian.org>  Sun, 15 Feb 2004 15:13:27 +0100
+
+privoxy (3.0.3-1) unstable; urgency=low
+
+  * New upstream version 3.0.3.
+    - This introduces workarounds for server (PHP <4.2.3) bugs including
+      the "blank page" problem (Closes: #215231).
+    - Avoid the conversion of "open" in scripts to "PrivoxyWindowOpen"
+      (Closes: #197995). 
+    - "advocancy" is no longer blocked (Closes: #202042).
+    - Fixed yet another two memory leaks (Closes: #215911).
+  * Stop backup of pdf directory, because it is no longer contained in the
+    upstream package.
+  * Create doc/pdf, which is missing upstream.
+  * disable filter{unsolicited-popups} for www.perl.com/language/newdocs/pod/ 
+    to avoid problems with "PrivoxyWindowOpen" in Perl manuals
+    (Closes: #195311).
+  * Apply patch make privoxy compilable on woody where htmldoc --version
+    doesn't exist (Closes: #216524).
+
+ -- Roland Rosenfeld <roland@debian.org>  Sat, 31 Jan 2004 11:25:53 +0100
+
+privoxy (3.0.2-5) unstable; urgency=low
+
+  * Merge corrections from upstream default.action 1.7.
+    - demoronizer filter (which caused trouble on non latin1 charsets) is
+      now switched off by default (Closes: #202234).
+
+ -- Roland Rosenfeld <roland@debian.org>  Tue,  9 Sep 2003 21:31:51 +0200
+
+privoxy (3.0.2-4) unstable; urgency=low
+
+  * Add a versioned build dependency on htmldoc (>= 1.8.20), because there
+    seem to be some options mission in the old 1.8.17 (Closes: #192457).
+  * Merge rotation of logfile and jarfile in logrotate script.
+  * Test whether /var/run/privoxy.pid is existing and don't bother when no
+    privoxy is running in logrotate script (Closes: #191838).
+  * Remove /var/run/privoxy.pid on privoxy stop in init.d script.
+  * Mention apt-get instead of dpkg in user-manual (Closes: #189239).
+  * Remove trailing whitespace from text versions of user-manual,
+    developer-manual and faq (Closes: #192566).
+
+ -- Roland Rosenfeld <roland@debian.org>  Fri,  9 May 2003 08:21:30 +0200
+
+privoxy (3.0.2-3) unstable; urgency=low
+
+  * Stop filtering favicon.ico, which may cause trouble (Closes: #188947).
+  * Send SIGHUP to privoxy instead of touching /etc/provoxy/config in
+    logrotate script to tell privoxy that the logfiles were rotated
+    (Closes: #189240).
+  * Remove trailing spaces from config file (Closes: #189240).
+  * Install man page as privoxy(8) instead of privoxy(1), because this is
+    a system binary.
   * Build HTML, text, and PDF versions of the documentation from source.
   * Build HTML, text, and PDF versions of the documentation from source.
+  * Fix setting of dodk in configure.in.
+  * Add option "--linkcolor #0000ff" to htmldoc call in ldp_print to be
+    independent of ~/.htmldocrc color setting.
   * Mention PDF and text version of the documentation in doc-base files.
   * Install PDF version of the documentation, too.
   * Install HTML version of the man page, too.
 
   * Mention PDF and text version of the documentation in doc-base files.
   * Install PDF version of the documentation, too.
   * Install HTML version of the man page, too.
 
- -- Roland Rosenfeld <roland@debian.org>  Sat,  1 Mar 2003 13:54:32 +0100
+ -- Roland Rosenfeld <roland@debian.org>  Mon, 21 Apr 2003 11:11:31 +0200
+
+privoxy (3.0.2-2) unstable; urgency=low
 
 
-privoxy (3.1.1-2) unstable; urgency=low
+  * Don't apply any filters to {bugs|lists}.debian.org (Closes: #186537).
+  * Prepend "http://config.privoxy.org" before "/user-manual/" to always
+    get a correct URL for the local user-manual (also on 404 error pages).
+    (Closes SF-719724).
 
 
-  * Stop creating documentation, it's usually available upstream and can
-    be used as is without depending on docbook and the like.
-  * Added LICENSE, pdfs, privoxy-index and HTMLized man-page from package.
-    The LICENSE is already mentioned in debian/copyright (adding a
-    separate file conflicts with the policy), the man page is available in
-    nroff format and the PDFs are not better than the HTML version.
+ -- Roland Rosenfeld <roland@debian.org>  Sun, 13 Apr 2003 12:49:15 +0200
 
 
- -- Roland Rosenfeld <roland@debian.org>  Fri,  6 Sep 2002 18:37:19 +0200
+privoxy (3.0.2-1) unstable; urgency=low
 
 
-privoxy (3.1.1-1) unstable; urgency=low
+  * New upstream version 3.0.2.
+  * Update Standards-Version to 3.5.9 (no changes).
 
 
-  * Removed build dependency on w3m.
-  * Removed ./configure argument for docbook, moving the path to the
-    configure.in.
-  * Added LICENSE, pdfs, privoxy-index and HTMLized man-page
+ -- Roland Rosenfeld <roland@debian.org>  Wed, 26 Mar 2003 19:45:07 +0100
 
 
- -- Devin Bayer <devin@elektrono.com>  Tue, 28 May 2002 21:21:48 -0400
+privoxy (3.0.0-6) unstable; urgency=low
 
 
-privoxy (3.1.1-0) unstable; urgency=low
+  * Fixed a bug in local user-manual patch, which failed when accessing
+    http://config.privoxy.org/user-manual/ (without a file name).
 
 
-  * Added debian-dist and debian-upload targets to the top level makefile.
-    debian-dist runs "dpkg-buildpackage -rfakeroot -us -uc" so that
-    any debian user can build it.
-  * Removed build dependency on docbook, leaving generation of docs to
-    another target or makefile.
-  
- -- Devin Bayer <devin@elektrono.com>  Sat, 25 May 2002 22:49:30 -0400
+ -- Roland Rosenfeld <roland@debian.org>  Sun,  2 Mar 2003 13:40:48 +0100
 
 privoxy (3.0.0-5) unstable; urgency=low
 
 
 privoxy (3.0.0-5) unstable; urgency=low
 
index b8626c4..7ed6ff8 100644 (file)
@@ -1 +1 @@
-4
+5
index f7e81ea..cd43c6c 100644 (file)
@@ -2,12 +2,13 @@ Source: privoxy
 Section: web
 Priority: optional
 Maintainer: Roland Rosenfeld <roland@debian.org>
 Section: web
 Priority: optional
 Maintainer: Roland Rosenfeld <roland@debian.org>
-Build-Depends: debhelper (>= 4.0.0), autoconf, libpcre3-dev, jade, docbook-dsssl, w3m, sp, sgmlspl, groff, htmldoc
-Standards-Version: 3.5.8
+Build-Depends: debhelper (>= 5.0.0), autoconf, autotools-dev, libpcre3-dev, jade, docbook-dsssl, w3m, sp, sgmlspl, groff, htmldoc (>= 1.8.25-1), man2html, dpatch
+Standards-Version: 3.6.2
 
 Package: privoxy
 Architecture: any
 
 Package: privoxy
 Architecture: any
-Depends: ${shlibs:Depends}, logrotate, adduser
+Depends: ${shlibs:Depends}, ${misc:Depends}, logrotate, adduser
+Recommends: doc-base
 Description: Privacy enhancing HTTP Proxy
  Privoxy is a web proxy with advanced filtering capabilities for
  protecting privacy, filtering web page content, managing cookies,
 Description: Privacy enhancing HTTP Proxy
  Privoxy is a web proxy with advanced filtering capabilities for
  protecting privacy, filtering web page content, managing cookies,
@@ -17,3 +18,5 @@ Description: Privacy enhancing HTTP Proxy
  has application for both stand-alone systems and multi-user networks.
  .
  Privoxy is based on Internet Junkbuster (tm).
  has application for both stand-alone systems and multi-user networks.
  .
  Privoxy is based on Internet Junkbuster (tm).
+ .
+  Homepage: http://www.privoxy.org/
index 2ae2775..4b0ed5e 100644 (file)
@@ -1,19 +1,18 @@
+
 This package was debianized by Roland Rosenfeld <roland@debian.org> on
 Fri, 29 Mar 2002 11:52:03 +0100.
 
 This package was debianized by Roland Rosenfeld <roland@debian.org> on
 Fri, 29 Mar 2002 11:52:03 +0100.
 
-It was downloaded from http://privoxy.org/ and
+It was downloaded from http://www.privoxy.org/ and
 http://sourceforge.net/project/showfiles.php?group_id=11118
 
 Upstream Authors: ijbswa-developers@lists.sourceforge.net
 
 http://sourceforge.net/project/showfiles.php?group_id=11118
 
 Upstream Authors: ijbswa-developers@lists.sourceforge.net
 
-Current Project developers:
+Current Development Team:
 
 
- Stefan Waldherr
- Andreas Oesterhelt
+ Hal Burgiss (docs)
  Jon Foster
  Jon Foster
-
- Markus Breitenbach
- Thomas Steudten
+ Andreas Oesterhelt
+ David Schmidt (OS/2, Mac OSX ports)
 
 Originally developed by:
 
 
 Originally developed by:
 
@@ -42,8 +41,8 @@ Copyright:     Written by and Copyright (C) 2001 the SourceForge
                The GNU General Public License should be included with
                this file.  If not, you can view it at
                http://www.gnu.org/copyleft/gpl.html
                The GNU General Public License should be included with
                this file.  If not, you can view it at
                http://www.gnu.org/copyleft/gpl.html
-               or write to the Free Software Foundation, Inc., 59
-               Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+               or write to the Free Software Foundation, Inc., 
+               51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 
 The complete GNU General Public License can be found at
 /usr/share/common-licenses/GPL
 
 The complete GNU General Public License can be found at
 /usr/share/common-licenses/GPL
index 4d21c6e..1828834 100644 (file)
@@ -14,4 +14,3 @@ Files: /usr/share/doc/privoxy/user-manual.txt.gz
 
 Format: pdf
 Files: /usr/share/doc/privoxy/privoxy-user-manual.pdf
 
 Format: pdf
 Files: /usr/share/doc/privoxy/privoxy-user-manual.pdf
-
index 012668d..9fc1a8f 100644 (file)
@@ -17,13 +17,14 @@ case "$1" in
        echo -n "Starting $DESC: "
        start-stop-daemon --oknodo --start --quiet --pidfile $PIDFILE \
            --exec $DAEMON -- --pidfile $PIDFILE --user $OWNER $CONFIGFILE \
        echo -n "Starting $DESC: "
        start-stop-daemon --oknodo --start --quiet --pidfile $PIDFILE \
            --exec $DAEMON -- --pidfile $PIDFILE --user $OWNER $CONFIGFILE \
-           2>/dev/null
+           2>> /var/log/privoxy/errorfile
        echo "$NAME."
        ;;
   stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
                --exec $DAEMON
        echo "$NAME."
        ;;
   stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
                --exec $DAEMON
+       rm -f $PIDFILE
        echo "$NAME."
        ;;
   #reload)
        echo "$NAME."
        ;;
   #reload)
@@ -44,12 +45,14 @@ case "$1" in
        #       option to the "reload" entry above. If not, "force-reload" is
        #       just the same as "restart".
        #
        #       option to the "reload" entry above. If not, "force-reload" is
        #       just the same as "restart".
        #
-       echo "Restarting $DESC: "
+       echo -n "Restarting $DESC: "
        start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
                --exec $DAEMON
        sleep 1
        start-stop-daemon --oknodo --start --quiet --pidfile $PIDFILE \
        start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \
                --exec $DAEMON
        sleep 1
        start-stop-daemon --oknodo --start --quiet --pidfile $PIDFILE \
-           --exec $DAEMON -- --pidfile $PIDFILE --user $OWNER $CONFIGFILE
+           --exec $DAEMON -- --pidfile $PIDFILE --user $OWNER $CONFIGFILE \
+           2>> /var/log/privoxy/errorfile
+       echo "$NAME."
        ;;
   *)
        N=/etc/init.d/$NAME
        ;;
   *)
        N=/etc/init.d/$NAME
index d230a8b..a110e93 100644 (file)
@@ -1,21 +1,17 @@
-/var/log/privoxy/logfile {
+/var/log/privoxy/logfile /var/log/privoxy/jarfile /var/log/privoxy/errorfile {
        create 0640 privoxy adm
        missingok
        weekly
        rotate 7
        compress
        create 0640 privoxy adm
        missingok
        weekly
        rotate 7
        compress
+       sharedscripts
        postrotate
        postrotate
-               touch /etc/privoxy/config
-       endscript
-}
-
-/var/log/privoxy/jarfile {
-       create 0640 privoxy adm
-       missingok
-       weekly
-       rotate 7
-       compress
-       postrotate
-               touch /etc/privoxy/config
+               if [ -x /usr/sbin/invoke-rc.d ]; then
+                       invoke-rc.d privoxy restart > /dev/null
+               else
+                       if [ -f /var/run/privoxy.pid ]; then
+                               /etc/init.d/privoxy restart > /dev/null
+                       fi
+               fi
        endscript
 }
        endscript
 }
index 6670965..51ec110 100644 (file)
@@ -1 +1 @@
-privoxy.1
+privoxy.8
diff --git a/debian/patches/00list b/debian/patches/00list
new file mode 100644 (file)
index 0000000..6c2fb3f
--- /dev/null
@@ -0,0 +1,14 @@
+01_local_usermanual.dpatch
+02_linkcolor.dpatch
+04_nomultiproxy.dpatch
+05_defaut_action.dpatch
+06_8bit_manual.dpatch
+07_typos.dpatch
+08_log_pthread.dpatch
+09_no_identity.dpatch
+10_backup_doc.dpatch
+11_backup_autotools.dpatch
+12_multiple-filters.dpatch
+13_memory.dpatch
+14_config.dpatch
+15_mansection8.dpatch
diff --git a/debian/patches/01_local_usermanual.dpatch b/debian/patches/01_local_usermanual.dpatch
new file mode 100644 (file)
index 0000000..a5c51fa
--- /dev/null
@@ -0,0 +1,211 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 01_local_usermanual.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Add new "cgi" user-manual, which sends the user manual to the client
+## DP: and activate it in config file (Closes: #148128).
+
+@DPATCH@
+diff -urNad privoxy~/cgi.c privoxy/cgi.c
+--- privoxy~/cgi.c     2006-02-11 23:44:26.000000000 +0100
++++ privoxy/cgi.c      2006-02-11 23:44:34.000000000 +0100
+@@ -609,6 +609,9 @@
+    { "t",
+          cgi_transparent_image, 
+          NULL, TRUE /* Send a transparent image (short name) */ },
++   { "user-manual",
++         cgi_send_user_manual,
++         NULL, TRUE /* Send user-manual */ },
+    { NULL, /* NULL Indicates end of list and default page */
+          cgi_error_404,
+          NULL, TRUE /* Unknown CGI page */ }
+@@ -821,21 +824,28 @@
+    {
+       return cgi_error_memory();
+    }
+-
+    query_args_start = path_copy;
+-   while (*query_args_start && *query_args_start != '?')
++   while (*query_args_start && *query_args_start != '?' && *query_args_start != '/')
+    {
+       query_args_start++;
+    }
+-   if (*query_args_start == '?')
++   if (*query_args_start == '/') 
+    {
+       *query_args_start++ = '\0';
+-   }
+-
+-   if (NULL == (param_list = parse_cgi_parameters(query_args_start)))
+-   {
+-      free(path_copy);
+-      return cgi_error_memory();
++      if ((param_list = new_map()))
++      {
++         map(param_list, "file", 1, url_decode(query_args_start), 0);
++      }
++   } else {
++      if (*query_args_start == '?')
++      {
++         *query_args_start++ = '\0';
++      }
++      if (NULL == (param_list = parse_cgi_parameters(query_args_start)))
++      {
++         free(path_copy);
++         return cgi_error_memory();
++      }
+    }
+    /*
+@@ -1597,7 +1607,13 @@
+    if (!item) return NULL;
+    result = strdup("<a href=\"");
+-   string_append(&result, config->usermanual);
++   if (config->usermanual[0] == '/') {
++      string_append(&result, "http://");
++      string_append(&result, CGI_SITE_2_HOST);
++      string_append(&result, "/user-manual/");
++   } else {
++      string_append(&result, config->usermanual);
++   }
+    string_append(&result, ACTIONS_HELP_PREFIX);
+    string_join  (&result, string_toupper(item));
+    string_append(&result, "\">");
+@@ -2171,7 +2187,11 @@
+    if (!err) err = map(exports, "default-cgi",   1, html_encode(CGI_PREFIX), 0);
+    if (!err) err = map(exports, "menu",          1, make_menu(caller), 0);
+    if (!err) err = map(exports, "code-status",   1, CODE_STATUS, 1);
+-   if (!err) err = map(exports, "user-manual",   1, csp->config->usermanual ,1);
++   if (csp->config->usermanual[0] == '/') {
++      if (!err) err = map(exports, "user-manual",   1, "http://"CGI_SITE_2_HOST"/user-manual/" ,1);
++   } else {
++      if (!err) err = map(exports, "user-manual",   1, csp->config->usermanual ,1);
++   }
+    if (!err) err = map(exports, "actions-help-prefix", 1, ACTIONS_HELP_PREFIX ,1);
+ #ifdef FEATURE_TOGGLE
+    if (!err) err = map_conditional(exports, "enabled-display", global_toggle_state);
+diff -urNad privoxy~/cgisimple.c privoxy/cgisimple.c
+--- privoxy~/cgisimple.c       2006-02-11 23:44:26.000000000 +0100
++++ privoxy/cgisimple.c        2006-02-11 23:44:34.000000000 +0100
+@@ -642,6 +642,89 @@
+    return JB_ERR_OK;
+ }
++/*********************************************************************
++ *
++ * Function    :  cgi_send_user_manual
++ *
++ * Description :  CGI function that sends a user manual HTML file
++ *
++ * Parameters  :
++ *          1  :  csp = Current client state (buffers, headers, etc...)
++ *          2  :  rsp = http_response data structure for output
++ *          3  :  parameters = map of cgi parameters
++ *
++ * CGI Parameters : file=name.html, the mane of the HTML file
++ *                  (relative to user-manual from config)
++ *
++ * Returns     :  JB_ERR_OK on success
++ *                JB_ERR_MEMORY on out-of-memory error.  
++ *
++ *********************************************************************/
++jb_err cgi_send_user_manual(struct client_state *csp,
++                            struct http_response *rsp,
++                            const struct map *parameters)
++{
++   const char * filename;
++   char *full_path;
++   FILE *fp;
++   char buf[BUFFER_SIZE];
++
++   assert(csp);
++   assert(rsp);
++   assert(parameters);
++
++   get_string_param(parameters, "file", &filename);
++   /* Check paramter for hack attempts */
++   if (filename && strchr(filename, '/')) {
++      return JB_ERR_CGI_PARAMS;
++   }
++   if (filename && strstr(filename, "..")) {
++      return JB_ERR_CGI_PARAMS;
++   }
++
++   full_path = make_path(csp->config->usermanual, 
++                         filename?filename:"index.html");
++   if (full_path == NULL)
++   {
++      return JB_ERR_MEMORY;
++   }
++
++   /* Allocate buffer */
++   rsp->body = strdup("");
++   if (rsp->body == NULL)
++   {
++      free(full_path);
++      return JB_ERR_MEMORY;
++   }
++
++   /* Open user-manual file */
++   if (NULL == (fp = fopen(full_path, "r")))
++   {
++      log_error(LOG_LEVEL_ERROR, "Cannot open user-manual file %s: %E", full_path);
++      free(full_path);
++      free(rsp->body);
++      return JB_ERR_FILE;
++   }
++   free(full_path);
++
++   /* Read file and write it out */
++   while (fgets(buf, BUFFER_SIZE, fp))
++   {
++      if (string_append(&rsp->body, buf))
++      {
++         fclose(fp);
++         return JB_ERR_MEMORY;
++      }
++   }
++   fclose(fp);
++
++   if (enlist(rsp->headers, "Content-Type: text/html"))
++   {
++      return JB_ERR_MEMORY;
++   }
++
++   return JB_ERR_OK;
++}
+ /*********************************************************************
+diff -urNad privoxy~/cgisimple.h privoxy/cgisimple.h
+--- privoxy~/cgisimple.h       2006-02-11 23:44:26.000000000 +0100
++++ privoxy/cgisimple.h        2006-02-11 23:44:34.000000000 +0100
+@@ -128,6 +128,9 @@
+ extern jb_err cgi_send_stylesheet(struct client_state *csp,
+                                   struct http_response *rsp,
+                                   const struct map *parameters);
++extern jb_err cgi_send_user_manual(struct client_state *csp,
++                                   struct http_response *rsp,
++                                   const struct map *parameters);
+ #ifdef FEATURE_GRACEFUL_TERMINATION
+ extern jb_err cgi_die (struct client_state *csp,
+diff -urNad privoxy~/loadcfg.c privoxy/loadcfg.c
+--- privoxy~/loadcfg.c 2006-02-11 23:44:26.000000000 +0100
++++ privoxy/loadcfg.c  2006-02-11 23:44:34.000000000 +0100
+@@ -1579,7 +1579,13 @@
+     * link to it's section in the user-manual
+     */
+    buf = strdup("\n<br><a href=\"");
+-   string_append(&buf, config->usermanual);
++   if (config->usermanual[0] == '/') {
++      string_append(&buf, "http://");
++      string_append(&buf, CGI_SITE_2_HOST);
++      string_append(&buf, "/user-manual/");
++   } else {
++      string_append(&buf, config->usermanual);
++   }
+    string_append(&buf, CONFIG_HELP_PREFIX);
+    string_join  (&buf, string_toupper(command));
+    string_append(&buf, "\">");
diff --git a/debian/patches/02_linkcolor.dpatch b/debian/patches/02_linkcolor.dpatch
new file mode 100644 (file)
index 0000000..160778d
--- /dev/null
@@ -0,0 +1,19 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 02_linkcolor.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Run htmldoc with --linkcolor #0000ff and --no-embedfonts
+
+@DPATCH@
+diff -urNad privoxy~/utils/ldp_print/ldp_print privoxy/utils/ldp_print/ldp_print
+--- privoxy~/utils/ldp_print/ldp_print 2006-02-05 22:03:58.000000000 +0100
++++ privoxy/utils/ldp_print/ldp_print  2006-02-05 22:12:43.000000000 +0100
+@@ -54,7 +54,7 @@
+ my($cmd) = "htmldoc --size universal --bodyfont helvetica --fontsize 8 " .
+            "-t pdf -f ${fname_wo_ext}.pdf --firstpage p1 --titlefile title.html" .
+-           " body.html --footer c.1";
++           " body.html --footer c.1 --linkcolor #0000ff --no-embedfonts";
+ # For postscript output; append onto the above cmd string:
+ #
diff --git a/debian/patches/04_nomultiproxy.dpatch b/debian/patches/04_nomultiproxy.dpatch
new file mode 100644 (file)
index 0000000..2a451a1
--- /dev/null
@@ -0,0 +1,59 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 04_multiproxy.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: emove comment from config file and FAQ, which points to list of
+## DP: open proxies at multiproxy.org (Closes: #198953).
+
+@DPATCH@
+diff -urNad privoxy~/config privoxy/config
+--- privoxy~/config    2006-02-05 16:23:12.000000000 +0100
++++ privoxy/config     2006-02-05 16:25:45.000000000 +0100
+@@ -889,11 +889,10 @@
+ #  This feature allows routing of HTTP requests through a chain
+ #  of multiple proxies. It can be used to better protect privacy
+ #  and confidentiality when accessing specific domains by routing
+-#  requests to those domains through an anonymous public proxy (see
+-#  e.g. http://www.multiproxy.org/anon_list.htm) Or to use a caching
+-#  proxy to speed up browsing. Or chaining to a parent proxy may be
+-#  necessary because the machine that Privoxy runs on has no direct
+-#  Internet access.
++#  requests to those domains through an anonymous public proxy 
++#  or to use a caching proxy to speed up browsing. Or chaining to
++#  a parent proxy may be necessary because the machine that Privoxy
++#  runs on has no direct Internet access.
+ #  
+ #  Also specified here are SOCKS proxies. Privoxy supports the SOCKS
+ #  4 and SOCKS 4A protocols.
+diff -urNad privoxy~/doc/source/faq.sgml privoxy/doc/source/faq.sgml
+--- privoxy~/doc/source/faq.sgml       2006-02-05 16:23:12.000000000 +0100
++++ privoxy/doc/source/faq.sgml        2006-02-05 16:25:45.000000000 +0100
+@@ -1255,13 +1255,6 @@
+  on (those suspicious) people with a more than average preference for privacy.
+ </para>
+ <para>
+- You can find a list of anonymous public proxies at <ulink
+- url="http://www.multiproxy.org/anon_list.htm">multiproxy.org</ulink> and many
+- more through Google. A particularly interesting project is the JAP service
+- offered by the Technical University of Dresden (<ulink
+- url="http://anon.inf.tu-dresden.de/index_en.html">http://anon.inf.tu-dresden.de/index_en.html</ulink>).
+-</para>
+-<para>
+  There is, however, even in the single-machine case the possibility to make the
+  server believe that your machine is in fact a shared proxy serving a whole big
+  LAN, and we are looking into that.
+diff -urNad privoxy~/doc/source/p-config.sgml privoxy/doc/source/p-config.sgml
+--- privoxy~/doc/source/p-config.sgml  2006-02-05 16:23:12.000000000 +0100
++++ privoxy/doc/source/p-config.sgml   2006-02-05 16:25:45.000000000 +0100
+@@ -1519,9 +1519,8 @@
+  multiple proxies.
+  It can be used to better protect privacy and confidentiality when
+  accessing specific domains by routing requests to those domains
+- through an anonymous public proxy (see e.g. <ulink
+- url="http://www.multiproxy.org/anon_list.htm">http://www.multiproxy.org/anon_list.htm</ulink>)
+- Or to use a caching proxy to speed up browsing. Or chaining to a parent
++ through an anonymous public proxy
++ or to use a caching proxy to speed up browsing. Or chaining to a parent
+  proxy may be necessary because the machine that <application>Privoxy</application>
+  runs on has no direct Internet access.
+ </para>
diff --git a/debian/patches/05_defaut_action.dpatch b/debian/patches/05_defaut_action.dpatch
new file mode 100644 (file)
index 0000000..cf779e0
--- /dev/null
@@ -0,0 +1,37 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 05_default_action.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Serveral changes/additons to default.action.
+
+@DPATCH@
+diff -urNad privoxy~/default.action.master privoxy/default.action.master
+--- privoxy~/default.action.master     2006-02-05 16:23:12.000000000 +0100
++++ privoxy/default.action.master      2006-02-05 16:25:47.000000000 +0100
+@@ -1444,6 +1444,8 @@
+ .microsoft.com
+ #MASTER# PROBLEM-URL: http://javabog.dk/ijk/
+ javabog.dk/ijk/
++#MASTER# PROBLEM-URL: http://validator.w3.org/
++/valid-
+ #----------------------------------------------------------------------------
+ # These don't work without the referrer information:
+@@ -1464,6 +1466,8 @@
+ #MASTER# PROBLEM-URL: http://www.mandrakelinux.com/en/ftp.php3
+ #MASTER# REMARKS: Link to download page breaks
+ www.mandrakelinux.com/en/ftp.php3
++#MASTER# PROBLEM-URL: http://www.petitiononline.com/mod_perl/signed.cgi?eldred&2901
++www.petitiononline.com/mod_perl/signed.cgi
+ #----------------------------------------------------------------------------
+ # These animated gifs are either useful or nice:
+@@ -1601,6 +1605,8 @@
+ cf.nbc4.com/
+ #MASTER# PROBLEM-URL: http://www.hh.schule.de/ak/nt/
+ www.hh.schule.de/ak/nt/
++#MASTER# PROBLEM-URL: http://www.perl.com/language/newdocs/pod/perlop.html#Regexp_Quote_Like_Operators
++www.perl.com/language/newdocs/pod/
+ {+fast-redirects -block}
+ #MASTER# PROBLEM-URL: http://isbn.nu/0596001088/price/2.html
diff --git a/debian/patches/06_8bit_manual.dpatch b/debian/patches/06_8bit_manual.dpatch
new file mode 100644 (file)
index 0000000..3ddc586
--- /dev/null
@@ -0,0 +1,36 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 06_8bit_manual.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Stop converting 8bit chars in the documentation (#203697)
+
+@DPATCH@
+diff -urNad privoxy-dpatch~/doc/source/ldp.dsl.in privoxy-dpatch/doc/source/ldp.dsl.in
+--- privoxy-dpatch~/doc/source/ldp.dsl.in      2006-02-05 16:17:43.000000000 +0100
++++ privoxy-dpatch/doc/source/ldp.dsl.in       2006-02-05 16:17:46.000000000 +0100
+@@ -47,9 +47,9 @@
+ ;; this is necessary because right now jadetex does not understand
+ ;; symbolic entities, whereas things work well with numeric entities.
+-(declare-characteristic preserve-sdata?
+-  "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
+-  #f)
++;(declare-characteristic preserve-sdata?
++;  "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
++;  #f)
+ ;; put the legal notice in a separate file
+ (define %generate-legalnotice-link%
+@@ -257,9 +257,9 @@
+ ;; this is necessary because right now jadetex does not understand
+ ;; symbolic entities, whereas things work well with numeric entities.
+-(declare-characteristic preserve-sdata?
+-  "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
+-  #f)
++;(declare-characteristic preserve-sdata?
++;  "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
++;  #f)
+ ;; put the legal notice in a separate file
+ (define %generate-legalnotice-link%
diff --git a/debian/patches/07_typos.dpatch b/debian/patches/07_typos.dpatch
new file mode 100644 (file)
index 0000000..32669d1
--- /dev/null
@@ -0,0 +1,50 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 07_typos.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: s/persistant/persistent/, s/Januar/January/ in man page.
+## DP: Several typos in user-manual fixed.
+
+@DPATCH@
+diff -urNad privoxy~/doc/source/privoxy-man-page.sgml privoxy/doc/source/privoxy-man-page.sgml
+--- privoxy~/doc/source/privoxy-man-page.sgml  2006-02-05 22:03:58.000000000 +0100
++++ privoxy/doc/source/privoxy-man-page.sgml   2006-02-11 18:32:40.000000000 +0100
+@@ -333,7 +333,7 @@
+  
+  # Set personal exceptions to the policies in default.action #######
+- # Sites where we want persistant cookies, so allow *all* cookies
++ # Sites where we want persistent cookies, so allow *all* cookies
+  {-crunch-cookies -session-cookies-only}
+   .redhat.com
+   .sun.com
+diff -urNad privoxy~/doc/source/user-manual.sgml privoxy/doc/source/user-manual.sgml
+--- privoxy~/doc/source/user-manual.sgml       2004-01-31 10:49:48.000000000 +0100
++++ privoxy/doc/source/user-manual.sgml        2006-02-11 18:34:24.000000000 +0100
+@@ -368,7 +368,7 @@
+ </para>
+ <para>
+- In order not to loose your personal changes and adjustments when updating
++ In order not to lose your personal changes and adjustments when updating
+  to the latest <literal>default.action</literal> file we <emphasis>strongly
+  recommend</emphasis> that you use <literal>user.action</literal> for your
+  customization of <application>Privoxy</application>. See the <link
+@@ -1720,7 +1720,7 @@
+ <para>
+  To determine which actions apply to a request, the URL of the request is
+- compared to all patterns in each action file file. Every time it matches, the list of
++ compared to all patterns in each <quote>action file</quote> file. Every time it matches, the list of
+  applicable actions for the URL is incrementally updated, using the heading
+  of the section in which the pattern is located. If multiple matches for
+  the same URL set the same action differently, the last match wins. If not, 
+@@ -5251,7 +5251,7 @@
+  blocks of HTML code disappear when a specific symbol is set. We use this
+  for many purposes, one of them being to include the beta warning in all
+  our user interface (CGI) pages when <application>Privoxy</application>
+- in in an alpha or beta development stage:
++ is in an alpha or beta development stage:
+ </para>
+ <para>
diff --git a/debian/patches/08_log_pthread.dpatch b/debian/patches/08_log_pthread.dpatch
new file mode 100644 (file)
index 0000000..dc1b07f
--- /dev/null
@@ -0,0 +1,259 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 08_log_pthread.dpatch by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix race conditions in log writing functions (Closes: #299662).
+
+@DPATCH@
+diff -urNad privoxy-dpatch~/errlog.c privoxy-dpatch/errlog.c
+--- privoxy-dpatch~/errlog.c   2006-02-05 16:17:43.000000000 +0100
++++ privoxy-dpatch/errlog.c    2006-02-05 16:18:06.000000000 +0100
+@@ -292,6 +292,30 @@
+ static char *os2_socket_strerr(int errcode, char *tmp_buf);
+ #endif
++#ifdef FEATURE_PTHREAD
++static inline void lock_logfile()
++{
++    pthread_mutex_lock(&log_mutex);
++}
++static inline void unlock_logfile()
++{
++    pthread_mutex_unlock(&log_mutex);
++}
++static inline void lock_loginit()
++{
++    pthread_mutex_lock(&log_init_mutex);
++}
++static inline void unlock_loginit()
++{
++    pthread_mutex_unlock(&log_init_mutex);
++}
++#else /* ! FEATURE_PTHREAD */
++static inline void lock_logfile() {}
++static inline void unlock_logfile() {}
++static inline void lock_loginit() {}
++static inline void unlock_loginit() {}
++#endif
++
+ /*********************************************************************
+  *
+  * Function    :  fatal_error
+@@ -346,7 +370,7 @@
+ {
+    FILE *fp;
+-   /* FIXME RACE HAZARD: should start critical section error_log_use here */
++   lock_loginit();
+    /* set the logging detail level */
+    debug = debuglevel | LOG_LEVEL_MINIMUM;
+@@ -354,9 +378,13 @@
+    if ((logfp != NULL) && (logfp != stderr))
+    {
+       log_error(LOG_LEVEL_INFO, "(Re-)Open logfile %s", logfname ? logfname : "none");
++      lock_logfile();
+       fclose(logfp);
++   } else {
++      lock_logfile();
+    }
+    logfp = stderr;
++   unlock_logfile();
+    /* set the designated log file */
+    if( logfname )
+@@ -369,7 +397,9 @@
+       /* set logging to be completely unbuffered */
+       setbuf(fp, NULL);
++      lock_logfile();
+       logfp = fp;
++      unlock_logfile();
+    }
+    log_error(LOG_LEVEL_INFO, "Privoxy version " VERSION);
+@@ -378,7 +408,7 @@
+       log_error(LOG_LEVEL_INFO, "Program name: %s", prog_name);
+    }
+-   /* FIXME RACE HAZARD: should end critical section error_log_use here */
++   unlock_loginit();
+ } /* init_error_log */
+@@ -428,6 +458,9 @@
+       return;
+    }
++   /* protect the whole function because of the static buffer (outbuf) */
++   lock_logfile();
++
+    /* FIXME get current thread id */
+ #ifdef FEATURE_PTHREAD
+    this_thread = (long)pthread_self();
+@@ -480,41 +513,41 @@
+    switch (loglevel)
+    {
+       case LOG_LEVEL_ERROR:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Error: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Error: ", this_thread);
+          break;
+       case LOG_LEVEL_FATAL:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Fatal error: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Fatal error: ", this_thread);
+          break;
+       case LOG_LEVEL_GPC:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Request: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Request: ", this_thread);
+          break;
+       case LOG_LEVEL_CONNECT:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Connect: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Connect: ", this_thread);
+          break;
+       case LOG_LEVEL_LOG:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Writing: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Writing: ", this_thread);
+          break;
+       case LOG_LEVEL_HEADER:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Header: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Header: ", this_thread);
+          break;
+       case LOG_LEVEL_INFO:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Info: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Info: ", this_thread);
+          break;
+       case LOG_LEVEL_RE_FILTER:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Re-Filter: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Re-Filter: ", this_thread);
+          break;
+ #ifdef FEATURE_FORCE_LOAD
+       case LOG_LEVEL_FORCE:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Force: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Force: ", this_thread);
+          break;
+ #endif /* def FEATURE_FORCE_LOAD */
+ #ifdef FEATURE_FAST_REDIRECTS
+       case LOG_LEVEL_REDIRECTS:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Redirect: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Redirect: ", this_thread);
+          break;
+ #endif /* def FEATURE_FAST_REDIRECTS */
+       case LOG_LEVEL_DEANIMATE:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Gif-Deanimate: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Gif-Deanimate: ", this_thread);
+          break;
+       case LOG_LEVEL_CLF:
+          outbuf = outbuf_save;
+@@ -523,14 +556,14 @@
+          break;
+ #ifdef FEATURE_KILL_POPUPS
+       case LOG_LEVEL_POPUPS:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) Kill-Popups: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) Kill-Popups: ", this_thread);
+          break;
+ #endif /* def FEATURE_KILL_POPUPS */
+       case LOG_LEVEL_CGI:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) CGI: ", this_thread);
++         outc = sprintf(outbuf, "Privoxy(%08lx) CGI: ", this_thread);
+          break;
+       default:
+-         outc = sprintf(outbuf, "Privoxy(%05ld) UNKNOWN LOG TYPE(%d): ", this_thread, loglevel);
++         outc = sprintf(outbuf, "Privoxy(%08lx) UNKNOWN LOG TYPE(%d): ", this_thread, loglevel);
+          break;
+    }
+    
+@@ -605,16 +638,14 @@
+             else
+             {
+                /* Error */
+-               sprintf(outbuf, "Privoxy(%ld) Error: log_error(): Bad format string:\n"
++               sprintf(outbuf, "Privoxy(%08lx) Error: log_error(): Bad format string:\n"
+                                "Format = \"%s\"\n"
+                                "Exiting.", this_thread, fmt);
+-               /* FIXME RACE HAZARD: should start critical section error_log_use here */
+                if( !logfp )
+                {
+                   logfp = stderr;
+                }
+                fputs(outbuf, logfp);
+-               /* FIXME RACE HAZARD: should end critical section error_log_use here */
+                fatal_error(outbuf);
+                /* Never get here */
+                break;
+@@ -768,16 +799,15 @@
+             }
+             break;
+          default:
+-            sprintf(outbuf, "Privoxy(%ld) Error: log_error(): Bad format string:\n"
++            sprintf(outbuf, "Privoxy(%08lx) Error: log_error(): Bad format string:\n"
+                             "Format = \"%s\"\n"
+                             "Exiting.", this_thread, fmt);
+-            /* FIXME RACE HAZARD: should start critical section error_log_use here */
+             if( !logfp )
+             {
+                logfp = stderr;
+             }
+             fputs(outbuf_save, logfp);
+-            /* FIXME RACE HAZARD: should end critical section error_log_use here */
++            unlock_logfile();
+             fatal_error(outbuf_save);
+             /* Never get here */
+             break;
+@@ -814,8 +844,6 @@
+       outbuf[outc] = '\0';
+    }
+-   /* FIXME RACE HAZARD: should start critical section error_log_use here */
+-
+    /* deal with glibc stupidity - it won't let you initialize logfp */
+    if( !logfp )
+    {
+@@ -830,7 +858,7 @@
+       /* Never get here */
+    }
+-   /* FIXME RACE HAZARD: should end critical section error_log_use here */
++   unlock_logfile();
+ #if defined(_WIN32) && !defined(_WIN_CONSOLE)
+    /* Write to display */
+diff -urNad privoxy-dpatch~/jcc.c privoxy-dpatch/jcc.c
+--- privoxy-dpatch~/jcc.c      2006-02-05 16:17:43.000000000 +0100
++++ privoxy-dpatch/jcc.c       2006-02-05 16:18:06.000000000 +0100
+@@ -722,6 +722,10 @@
+ pthread_mutex_t gethostbyaddr_mutex;
+ pthread_mutex_t gethostbyname_mutex;
+ #endif /* def OSX_DARWIN */
++#ifdef FEATURE_PTHREAD
++pthread_mutex_t log_mutex;
++pthread_mutex_t log_init_mutex;
++#endif /* FEATURE_PTHREAD */
+ #if defined(unix) || defined(__EMX__)
+ const char *basedir = NULL;
+@@ -1923,7 +1927,10 @@
+    pthread_mutex_init(&gethostbyaddr_mutex,0);
+    pthread_mutex_init(&gethostbyname_mutex,0);
+ #endif /* def OSX_DARWIN */
+-
++#ifdef FEATURE_PTHREAD
++      pthread_mutex_init(&log_mutex,0);
++      pthread_mutex_init(&log_init_mutex,0);
++#endif /* FEATURE_PTHREAD */
+    /*
+     * Unix signal handling
+     *
+diff -urNad privoxy-dpatch~/jcc.h privoxy-dpatch/jcc.h
+--- privoxy-dpatch~/jcc.h      2006-02-05 16:17:43.000000000 +0100
++++ privoxy-dpatch/jcc.h       2006-02-05 16:18:06.000000000 +0100
+@@ -127,6 +127,10 @@
+ extern pthread_mutex_t gethostbyaddr_mutex;
+ extern pthread_mutex_t gethostbyname_mutex;
+ #endif /* def OSX_DARWIN */
++#ifdef FEATURE_PTHREAD
++extern pthread_mutex_t log_mutex;
++extern pthread_mutex_t log_init_mutex;
++#endif /* FEATURE_PTHREAD */
+ /* Functions */
diff --git a/debian/patches/09_no_identity.dpatch b/debian/patches/09_no_identity.dpatch
new file mode 100644 (file)
index 0000000..95129c7
--- /dev/null
@@ -0,0 +1,38 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 09_no_identity.dpatch by Michael Shields <shields@msrl.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: After dechunking remove the "chunked"-header instead of replacing it
+## DP: by an "identity" header. (#318683).
+
+@DPATCH@
+diff -urNad privoxy~/parsers.c privoxy/parsers.c
+--- privoxy~/parsers.c 2006-02-05 16:23:12.000000000 +0100
++++ privoxy/parsers.c  2006-02-05 16:25:49.000000000 +0100
+@@ -871,8 +871,7 @@
+  *
+  * Description :  - Prohibit filtering (CT_TABOO) if transfer coding compresses
+  *                - Raise the CSP_FLAG_CHUNKED flag if coding is "chunked"
+- *                - Change from "chunked" to "identity" if body was chunked
+- *                  but has been de-chunked for filtering.
++ *                - Remove if chunked body was de-chunked for filtering.
+  *
+  * Parameters  :
+  *          1  :  csp = Current client state (buffers, headers, etc...)
+@@ -904,13 +903,13 @@
+       /*
+        * If the body was modified, it has been
+-       * de-chunked first, so adjust the header:
++       * de-chunked first, so remove the header.
++       * Don't use "identity" encoding, which was included in
++       * RFC 2616 by mistake (http://purl.org/NET/http-errata#identity).
+        */
+       if (csp->flags & CSP_FLAG_MODIFIED)
+       {
+          freez(*header);
+-         *header = strdup("Transfer-Encoding: identity");
+-         return (header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;
+       }
+    }
diff --git a/debian/patches/10_backup_doc.dpatch b/debian/patches/10_backup_doc.dpatch
new file mode 100644 (file)
index 0000000..c28a7df
--- /dev/null
@@ -0,0 +1,21 @@
+#! /bin/sh -e
+## 10_backup_doc.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Backup the upstream versions of all generated documentation
+
+dpatch_patch ()
+{
+    tar cf debian/patched/doc.bak.tar \
+       doc/source doc/text doc/webserver \
+       INSTALL README AUTHORS privoxy.1
+}
+
+dpatch_unpatch ()
+{
+       tar xf debian/patched/doc.bak.tar
+}
+
+DPATCH_LIB_NO_DEFAULT=1
+
+. /usr/share/dpatch/dpatch.lib.sh
diff --git a/debian/patches/11_backup_autotools.dpatch b/debian/patches/11_backup_autotools.dpatch
new file mode 100644 (file)
index 0000000..b3aa917
--- /dev/null
@@ -0,0 +1,25 @@
+#! /bin/sh -e
+## 11_backup_autotools.dpatch by Ralf Treinen <treinen@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: replace all config.{guess,sub} by the vesion installed in
+## DP: /usr/share/misc
+
+dpatch_patch ()
+{
+       find . -name config.guess -o -name config.sub \
+               | tar cf debian/patched/config.guess+sub.tar -T -
+       find . -name config.guess \
+               -exec ln -sf /usr/share/misc/config.guess '{}' \;
+       find . -name config.sub \
+               -exec ln -sf /usr/share/misc/config.sub '{}' \;
+}
+
+dpatch_unpatch ()
+{
+       tar xf debian/patched/config.guess+sub.tar
+}
+
+DPATCH_LIB_NO_DEFAULT=1
+
+. /usr/share/dpatch/dpatch.lib.sh
diff --git a/debian/patches/12_multiple-filters.dpatch b/debian/patches/12_multiple-filters.dpatch
new file mode 100644 (file)
index 0000000..b926bca
--- /dev/null
@@ -0,0 +1,755 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 12_multiple-filters.dpatch 
+## by David Schmidt <david__schmidt@users.sourceforge.net>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Multiple filter file support
+
+@DPATCH@
+diff -urNad privoxy~/actions.c privoxy/actions.c
+--- privoxy~/actions.c 2006-02-11 23:44:25.000000000 +0100
++++ privoxy/actions.c  2006-02-11 23:44:37.000000000 +0100
+@@ -871,7 +871,7 @@
+ }
+-static struct file_list *current_actions_file[MAX_ACTION_FILES]  = {
++static struct file_list *current_actions_file[MAX_AF_FILES]  = {
+    NULL, NULL, NULL, NULL, NULL,
+    NULL, NULL, NULL, NULL, NULL
+ };
+@@ -894,7 +894,7 @@
+ {
+    int i;
+-   for (i = 0; i < MAX_ACTION_FILES; i++)
++   for (i = 0; i < MAX_AF_FILES; i++)
+    {
+       if (current_actions_file[i])
+       {
+@@ -979,7 +979,7 @@
+    int i;
+    int result;
+-   for (i = 0; i < MAX_ACTION_FILES; i++)
++   for (i = 0; i < MAX_AF_FILES; i++)
+    {
+       if (csp->config->actions_file[i])
+       {
+diff -urNad privoxy~/cgiedit.c privoxy/cgiedit.c
+--- privoxy~/cgiedit.c 2006-02-11 23:44:25.000000000 +0100
++++ privoxy/cgiedit.c  2006-02-11 23:44:37.000000000 +0100
+@@ -2560,7 +2560,7 @@
+       }
+       buttons = strdup("");
+-      for (i = 0; i < MAX_ACTION_FILES; i++)
++      for (i = 0; i < MAX_AF_FILES; i++)
+       {
+          if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL))
+          {
+@@ -2958,8 +2958,8 @@
+    struct file_line * cur_line;
+    unsigned line_number;
+    jb_err err;
+-   struct file_list *filter_file;
+    struct re_filterfile_spec *filter_group;
++   int i, have_filters = 0;
+    if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))
+    {
+@@ -3008,10 +3008,15 @@
+    if (!err) err = actions_to_radio(exports, cur_line->data.action);
+-   filter_file = csp->rlist;
+-   filter_group = ((filter_file != NULL) ? filter_file->f : NULL);
+-
+-   if (!err) err = map_conditional(exports, "any-filters-defined", (filter_group != NULL));
++   for (i = 0; i < MAX_AF_FILES; i++)
++   {
++      if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL))
++      {
++         if (!err) err = map_conditional(exports, "any-filters-defined", 1);
++         have_filters = 1;
++         break;
++      }
++   }
+    if (err)
+    {
+@@ -3020,10 +3025,8 @@
+       return err;
+    }
+-   if (filter_group == NULL)
+-   {
++   if (0 == have_filters)
+       err = map(exports, "filter-params", 1, "", 1);
+-   }
+    else
+    {
+       /* We have some entries in the filter list */
+@@ -3047,69 +3050,76 @@
+       result = strdup("");
+-      for (;(!err) && (filter_group != NULL); filter_group = filter_group->next)
++      for (i = 0; i < MAX_AF_FILES; i++)
+       {
+-         char current_mode = 'x';
+-         struct list_entry *filter_name;
+-         char * this_line;
+-         struct map *line_exports;
+-         char number[20];
+-
+-         filter_name = cur_line->data.action->multi_add[ACTION_MULTI_FILTER]->first;
+-         while ((filter_name != NULL)
+-             && (0 != strcmp(filter_group->name, filter_name->str)))
+-         {
+-              filter_name = filter_name->next;
+-         }
+-
+-         if (filter_name != NULL)
+-         {
+-            current_mode = 'y';
+-         }
+-         else
++         if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL))
+          {
+-            filter_name = cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]->first;
+-            while ((filter_name != NULL)
+-                && (0 != strcmp(filter_group->name, filter_name->str)))
+-            {
+-                 filter_name = filter_name->next;
+-            }
+-            if (filter_name != NULL)
++            filter_group = csp->rlist[i]->f;
++            for (;(!err) && (filter_group != NULL); filter_group = filter_group->next)
+             {
+-               current_mode = 'n';
+-            }
+-         }
++               char current_mode = 'x';
++               struct list_entry *filter_name;
++               char * this_line;
++               struct map *line_exports;
++               char number[20];
+-         /* Generate a unique serial number */
+-         snprintf(number, sizeof(number), "%x", index++);
+-         number[sizeof(number) - 1] = '\0';
++               filter_name = cur_line->data.action->multi_add[ACTION_MULTI_FILTER]->first;
++               while ((filter_name != NULL)
++                   && (0 != strcmp(filter_group->name, filter_name->str)))
++               {
++                    filter_name = filter_name->next;
++               }
+-         line_exports = new_map();
+-         if (line_exports == NULL)
+-         {
+-            err = JB_ERR_MEMORY;
+-            freez(result);
+-         }
+-         else
+-         {
+-            if (!err) err = map(line_exports, "index", 1, number, 1);
+-            if (!err) err = map(line_exports, "name",  1, filter_group->name, 1);
+-            if (!err) err = map(line_exports, "description",  1, filter_group->description, 1);
+-            if (!err) err = map_radio(line_exports, "this-filter", "ynx", current_mode);
++               if (filter_name != NULL)
++               {
++                  current_mode = 'y';
++               }
++               else
++               {
++                  filter_name = cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]->first;
++                  log_error(LOG_LEVEL_CGI, "cgiedit: filter_group->name: [%s]",filter_group->name);
++                  while ((filter_name != NULL)
++                      && (0 != strcmp(filter_group->name, filter_name->str)))
++                  {
++                       filter_name = filter_name->next;
++                  }
++                  if (filter_name != NULL)
++                  {
++                     current_mode = 'n';
++                  }
++               }
+-            this_line = NULL;
+-            if (!err)
+-            {
+-               this_line = strdup(filter_template);
+-               if (this_line == NULL) err = JB_ERR_MEMORY;
+-            }
+-            if (!err) err = template_fill(&this_line, line_exports);
+-            string_join(&result, this_line);
++               /* Generate a unique serial number */
++               snprintf(number, sizeof(number), "%x", index++);
++               number[sizeof(number) - 1] = '\0';
+-            free_map(line_exports);
++               line_exports = new_map();
++               if (line_exports == NULL)
++               {
++                  err = JB_ERR_MEMORY;
++                  freez(result);
++               }
++               else
++               {
++                  if (!err) err = map(line_exports, "index", 1, number, 1);
++                  if (!err) err = map(line_exports, "name",  1, filter_group->name, 1);
++                  if (!err) err = map(line_exports, "description",  1, filter_group->description, 1);
++                  if (!err) err = map_radio(line_exports, "this-filter", "ynx", current_mode);
++
++                  this_line = NULL;
++                  if (!err)
++                  {
++                     this_line = strdup(filter_template);
++                     if (this_line == NULL) err = JB_ERR_MEMORY;
++                  }
++                  if (!err) err = template_fill(&this_line, line_exports);
++                  string_join(&result, this_line);
++
++                  free_map(line_exports);
++               }
++            }
+          }
+       }
+-
+       freez(filter_template);
+       if (!err)
+@@ -3213,7 +3223,7 @@
+    get_string_param(parameters, "p", &action_set_name);
+    if (action_set_name != NULL)
+    {
+-      for (index = 0; index < MAX_ACTION_FILES; index++)
++      for (index = 0; index < MAX_AF_FILES; index++)
+       {
+          if (((fl = csp->actions_list[index]) != NULL) && ((b = fl->f) != NULL))
+          {
+diff -urNad privoxy~/cgisimple.c privoxy/cgisimple.c
+--- privoxy~/cgisimple.c       2006-02-11 23:44:37.000000000 +0100
++++ privoxy/cgisimple.c        2006-02-11 23:44:37.000000000 +0100
+@@ -829,7 +829,7 @@
+    switch (*(lookup(parameters, "file")))
+    {
+    case 'a':
+-      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_ACTION_FILES && csp->actions_list[i])
++      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->actions_list[i])
+       {
+          filename = csp->actions_list[i]->filename;
+          file_description = "Actions File";
+@@ -837,9 +837,9 @@
+       break;
+    case 'f':
+-      if (csp->rlist)
++      if (!get_number_param(csp, parameters, "index", &i) && i < MAX_AF_FILES && csp->rlist[i])
+       {
+-         filename = csp->rlist->filename;
++         filename = csp->rlist[i]->filename;
+          file_description = "Filter File";
+       }
+       break;
+@@ -954,7 +954,7 @@
+     * FIXME: Shouldn't include hardwired HTML here, use line template instead!
+     */
+    s = strdup("");
+-   for (i = 0; i < MAX_ACTION_FILES; i++)
++   for (i = 0; i < MAX_AF_FILES; i++)
+    {
+       if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL))
+       {
+@@ -983,13 +983,29 @@
+       if (!err) err = map(exports, "actions-filenames", 1, "<tr><td>None specified</td></tr>", 1);
+    }
+-   if (csp->rlist)
++   /* 
++    * List all re_filterfiles in use, together with view options.
++    * FIXME: Shouldn't include hardwired HTML here, use line template instead!
++    */
++   s = strdup("");
++   for (i = 0; i < MAX_AF_FILES; i++)
+    {
+-      if (!err) err = map(exports, "re-filter-filename", 1, html_encode(csp->rlist->filename), 0);
++      if (((fl = csp->rlist[i]) != NULL) && ((b = fl->f) != NULL))
++      {
++         if (!err) err = string_append(&s, "<tr><td>");
++         if (!err) err = string_join(&s, html_encode(csp->rlist[i]->filename));
++         snprintf(buf, 100, "</td><td class=\"buttons\"><a href=\"/show-status?file=filter&index=%d\">View</a>", i);
++         if (!err) err = string_append(&s, buf);
++         if (!err) err = string_append(&s, "</td></tr>\n");
++      }
++   }
++   if (*s != '\0')   
++   {
++      if (!err) err = map(exports, "re-filter-filename", 1, s, 0);
+    }
+    else
+    {
+-      if (!err) err = map(exports, "re-filter-filename", 1, "None specified", 1);
++      if (!err) err = map(exports, "re-filter-filename", 1, "<tr><td>None specified</td></tr>", 1);
+       if (!err) err = map_block_killer(exports, "have-filterfile");
+    }
+@@ -1206,7 +1222,7 @@
+       matches = strdup("<table class=\"transparent\">");
+-      for (i = 0; i < MAX_ACTION_FILES; i++)
++      for (i = 0; i < MAX_AF_FILES; i++)
+       {
+          if (NULL == csp->config->actions_file_short[i]
+              || !strcmp(csp->config->actions_file_short[i], "standard")) continue;
+diff -urNad privoxy~/config privoxy/config
+--- privoxy~/config    2006-02-11 23:44:37.000000000 +0100
++++ privoxy/config     2006-02-11 23:44:37.000000000 +0100
+@@ -182,7 +182,7 @@
+ #  
+ #  Specifies:
+ #  
+-#      The filter file to use
++#      The filter file(s) to use
+ #  
+ #  Type of value:
+ #  
+@@ -199,21 +199,23 @@
+ #  
+ #  Notes:
+ #  
+-#      The filter file contains content modification rules that use
++#      The filter files contain content modification rules that use
+ #      regular expressions. These rules permit powerful changes on the
+ #      content of Web pages, e.g., you could disable your favorite
+ #      JavaScript annoyances, re-write the actual displayed text,
+-#      or just have some fun replacing "Microsoft" with "MicroSuck"
+-#      wherever it appears on a Web page.
++#      or just have some fun playing buzzword bingo with a web page.
+ #  
+ #      The +filter{name} actions rely on the relevant filter (name)
+-#      to be defined in the filter file!
++#      to be defined in a filter file!
+ #  
+ #      A pre-defined filter file called default.filter that contains
+ #      a bunch of handy filters for common problems is included in the
+ #      distribution. See the section on the filter action for a list.
+-#  
++#      When adding your own, it is recommended you add them to the
++#      user.filter file.
++#
+ filterfile default.filter
++#filterfile user.filter
+ #  
+ #  1.5. logfile
+diff -urNad privoxy~/filters.c privoxy/filters.c
+--- privoxy~/filters.c 2006-02-11 23:44:25.000000000 +0100
++++ privoxy/filters.c  2006-02-11 23:44:37.000000000 +0100
+@@ -1290,6 +1290,8 @@
+    struct re_filterfile_spec *b;
+    struct list_entry *filtername;
++   int i, found_filters = 0;
++
+    /* 
+     * Sanity first
+     */
+@@ -1299,10 +1301,26 @@
+    }
+    size = csp->iob->eod - csp->iob->cur;
+-   if ( ( NULL == (fl = csp->rlist) ) || ( NULL == fl->f) )
++   /*
++    * Need to check the set of re_filterfiles...
++    */
++   for (i = 0; i < MAX_AF_FILES; i++)
++   {
++      fl = csp->rlist[i];
++      if (NULL != fl)
++      {
++         if (NULL != fl->f)
++         {
++           found_filters = 1;
++           break;
++         }
++      }
++   }
++
++   if (0 == found_filters)
+    {
+       log_error(LOG_LEVEL_ERROR, "Unable to get current state of regexp filtering.");
+-      return(NULL);
++         return(NULL);
+    }
+    /*
+@@ -1320,6 +1338,11 @@
+       csp->flags |= CSP_FLAG_MODIFIED;
+    }
++   for (i = 0; i < MAX_AF_FILES; i++)
++   {
++     fl = csp->rlist[i];
++     if ((NULL == fl) || (NULL == fl->f))
++       break;
+    /*
+     * For all applying +filter actions, look if a filter by that
+     * name exists and if yes, execute it's pcrs_joblist on the
+@@ -1356,6 +1379,7 @@
+          }
+       }
+    }
++   }
+    /*
+     * If there were no hits, destroy our copy and let
+@@ -1536,7 +1560,7 @@
+    init_current_action(csp->action);
+-   for (i = 0; i < MAX_ACTION_FILES; i++)
++   for (i = 0; i < MAX_AF_FILES; i++)
+    {
+       if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL))
+       {
+diff -urNad privoxy~/loadcfg.c privoxy/loadcfg.c
+--- privoxy~/loadcfg.c 2006-02-11 23:44:37.000000000 +0100
++++ privoxy/loadcfg.c  2006-02-11 23:44:37.000000000 +0100
+@@ -65,7 +65,7 @@
+  *     - savearg now embeds option names in help links
+  *
+  *    Revision 1.45  2002/04/24 02:11:54  oes
+- *    Jon's multiple AF patch: Allow up to MAX_ACTION_FILES actionsfile options
++ *    Jon's multiple AF patch: Allow up to MAX_AF_FILES actionsfile options
+  *
+  *    Revision 1.44  2002/04/08 20:37:13  swa
+  *    fixed JB spelling
+@@ -510,7 +510,7 @@
+    freez(config->haddr);
+    freez(config->logfile);
+-   for (i = 0; i < MAX_ACTION_FILES; i++)
++   for (i = 0; i < MAX_AF_FILES; i++)
+    {
+       freez(config->actions_file_short[i]);
+       freez(config->actions_file[i]);
+@@ -530,7 +530,11 @@
+    list_remove_all(config->trust_info);
+ #endif /* def FEATURE_TRUST */
+-   freez(config->re_filterfile);
++   for (i = 0; i < MAX_AF_FILES; i++)
++   {
++      freez(config->re_filterfile[i]);
++   }
++
+    freez(config);
+ }
+@@ -694,16 +698,16 @@
+  * *************************************************************************/
+          case hash_actions_file :
+             i = 0;
+-            while ((i < MAX_ACTION_FILES) && (NULL != config->actions_file[i]))
++            while ((i < MAX_AF_FILES) && (NULL != config->actions_file[i]))
+             {
+                i++;
+             }
+-            if (i >= MAX_ACTION_FILES)
++            if (i >= MAX_AF_FILES)
+             {
+                log_error(LOG_LEVEL_FATAL, "Too many 'actionsfile' directives in config file - limit is %d.\n"
+-                  "(You can increase this limit by changing MAX_ACTION_FILES in project.h and recompiling).",
+-                  MAX_ACTION_FILES);
++                  "(You can increase this limit by changing MAX_AF_FILES in project.h and recompiling).",
++                  MAX_AF_FILES);
+             }
+             config->actions_file_short[i] = strdup(arg);
+             p = malloc(strlen(arg) + sizeof(".action"));
+@@ -860,15 +864,27 @@
+  * In confdir by default.
+  * *************************************************************************/
+          case hash_filterfile :
+-            if(config->re_filterfile)
++            i = 0;
++            while ((i < MAX_AF_FILES) && (NULL != config->re_filterfile[i]))
+             {
+-               log_error(LOG_LEVEL_ERROR, "Ignoring extraneous directive 'filterfile %s' "
+-                  "in line %lu in configuration file (%s).", arg, linenum, configfile);
+-               string_append(&config->proxy_args, 
+-                  " <b><font color=\"red\">WARNING: extraneous directive, ignored</font></b>");
+-               continue;
++               i++;
+             }
+-            config->re_filterfile = make_path(config->confdir, arg);
++
++            if (i >= MAX_AF_FILES)
++            {
++               log_error(LOG_LEVEL_FATAL, "Too many 'filterfile' directives in config file - limit is %d.\n"
++                  "(You can increase this limit by changing MAX_AF_FILES in project.h and recompiling).",
++                  MAX_AF_FILES);
++            }
++            config->re_filterfile_short[i] = strdup(arg);
++            p = malloc(strlen(arg));
++            if (p == NULL)
++            {
++               log_error(LOG_LEVEL_FATAL, "Out of memory");
++            }
++            strcpy(p, arg);
++            config->re_filterfile[i] = make_path(config->confdir, p);
++            free(p);
+             continue;
+ /* *************************************************************************
+diff -urNad privoxy~/loaders.c privoxy/loaders.c
+--- privoxy~/loaders.c 2006-02-11 23:44:25.000000000 +0100
++++ privoxy/loaders.c  2006-02-11 23:44:37.000000000 +0100
+@@ -329,7 +329,12 @@
+ static struct file_list *current_trustfile      = NULL;
+ #endif /* def FEATURE_TRUST */
+-static struct file_list *current_re_filterfile  = NULL;
++static int load_one_re_filterfile(struct client_state *csp, int fileid);
++
++static struct file_list *current_re_filterfile[MAX_AF_FILES]  = {
++   NULL, NULL, NULL, NULL, NULL,
++   NULL, NULL, NULL, NULL, NULL
++};
+@@ -388,7 +393,7 @@
+          /* 
+           * Actions files
+           */
+-         for (i = 0; i < MAX_ACTION_FILES; i++)
++         for (i = 0; i < MAX_AF_FILES; i++)
+          {
+             if (csp->actions_list[i])     
+             {
+@@ -397,11 +402,14 @@
+          }
+          /*
+-          * Filter file
++          * Filter files
+           */
+-         if (csp->rlist)
++         for (i = 0; i < MAX_AF_FILES; i++)
+          {
+-            csp->rlist->active = 1;
++            if (csp->rlist[i])     
++            {
++               csp->rlist[i]->active = 1;
++            }
+          }
+          /*
+@@ -1247,10 +1255,15 @@
+  *********************************************************************/
+ void unload_current_re_filterfile(void)
+ {
+-   if (current_re_filterfile)
++   int i;
++
++   for (i = 0; i < MAX_AF_FILES; i++)
+    {
+-      current_re_filterfile->unloader = unload_re_filterfile;
+-      current_re_filterfile = NULL;
++      if (current_re_filterfile[i])
++      {
++         current_re_filterfile[i]->unloader = unload_re_filterfile;
++         current_re_filterfile[i] = NULL;
++      }
+    }
+ }
+ #endif
+@@ -1273,6 +1286,46 @@
+  *********************************************************************/
+ int load_re_filterfile(struct client_state *csp)
+ {
++   int i;
++   int result;
++
++   for (i = 0; i < MAX_AF_FILES; i++)
++   {
++      if (csp->config->re_filterfile[i])
++      {
++         result = load_one_re_filterfile(csp, i);
++         if (result)
++         {
++            return result;
++         }
++      }
++      else if (current_re_filterfile[i])
++      {
++         current_re_filterfile[i]->unloader = unload_re_filterfile;
++         current_re_filterfile[i] = NULL;
++      }
++   }
++
++   return 0;
++}
++
++/*********************************************************************
++ *
++ * Function    :  load_one_re_filterfile
++ *
++ * Description :  Load a re_filterfile. 
++ *                Generate a chained list of re_filterfile_spec's from
++ *                the "FILTER: " blocks, compiling all their substitutions
++ *                into chained lists of pcrs_job structs.
++ *
++ * Parameters  :
++ *          1  :  csp = Current client state (buffers, headers, etc...)
++ *
++ * Returns     :  0 => Ok, everything else is an error.
++ *
++ *********************************************************************/
++int load_one_re_filterfile(struct client_state *csp, int fileid)
++{
+    FILE *fp;
+    struct re_filterfile_spec *new_bl, *bl = NULL;
+@@ -1286,11 +1339,12 @@
+    /*
+     * No need to reload if unchanged
+     */
+-   if (!check_file_changed(current_re_filterfile, csp->config->re_filterfile, &fs))
++   log_error(LOG_LEVEL_RE_FILTER, "load_one_re_filterfile: checking: %s\n",csp->config->re_filterfile[fileid]);
++   if (!check_file_changed(current_re_filterfile[fileid], csp->config->re_filterfile[fileid], &fs))
+    {
+       if (csp)
+       {
+-         csp->rlist = current_re_filterfile;
++         csp->rlist[fileid] = current_re_filterfile[fileid];
+       }
+       return(0);
+    }
+@@ -1302,7 +1356,7 @@
+    /* 
+     * Open the file or fail
+     */
+-   if ((fp = fopen(csp->config->re_filterfile, "r")) == NULL)
++   if ((fp = fopen(csp->config->re_filterfile[fileid], "r")) == NULL)
+    {
+       goto load_re_filterfile_error;
+    }
+@@ -1397,9 +1451,9 @@
+    /* 
+     * Schedule the now-obsolete old data for unloading
+     */
+-   if ( NULL != current_re_filterfile )
++   if ( NULL != current_re_filterfile[fileid] )
+    {
+-      current_re_filterfile->unloader = unload_re_filterfile;
++      current_re_filterfile[fileid]->unloader = unload_re_filterfile;
+    }
+    /*
+@@ -1407,18 +1461,18 @@
+     */
+    fs->next    = files->next;
+    files->next = fs;
+-   current_re_filterfile = fs;
++   current_re_filterfile[fileid] = fs;
+    if (csp)
+    {
+-      csp->rlist = fs;
++      csp->rlist[fileid] = fs;
+    }
+    return( 0 );
+ load_re_filterfile_error:
+    log_error(LOG_LEVEL_FATAL, "can't load re_filterfile '%s': %E",
+-             csp->config->re_filterfile);
++             csp->config->re_filterfile[fileid]);
+    return(-1);
+ }
+diff -urNad privoxy~/project.h privoxy/project.h
+--- privoxy~/project.h 2006-02-11 23:44:25.000000000 +0100
++++ privoxy/project.h  2006-02-11 23:44:37.000000000 +0100
+@@ -1010,10 +1010,10 @@
+ #define RC_FLAG_BLOCKED   0x20
+ /**
+- * Maximum number of actions files.  This limit is arbitrary - it's just used
++ * Maximum number of actions/filter files.  This limit is arbitrary - it's just used
+  * to size an array.
+  */
+-#define MAX_ACTION_FILES 10
++#define MAX_AF_FILES 10
+ /**
+  * The state of a Privoxy processing thread.
+@@ -1069,10 +1069,10 @@
+    char   *x_forwarded;
+    /** Actions files associated with this client */
+-   struct file_list *actions_list[MAX_ACTION_FILES];
++   struct file_list *actions_list[MAX_AF_FILES];
+-   /** pcrs job file. */
+-   struct file_list *rlist;
++   /** pcrs job files. */
++   struct file_list *rlist[MAX_AF_FILES];
+    /** Length after content modification. */
+    size_t content_length;
+@@ -1328,10 +1328,10 @@
+    const char *logdir;
+    /** The full paths to the actions files. */
+-   const char *actions_file[MAX_ACTION_FILES];
++   const char *actions_file[MAX_AF_FILES];
+    /** The short names of the actions files. */
+-   const char *actions_file_short[MAX_ACTION_FILES];
++   const char *actions_file_short[MAX_AF_FILES];
+    /** The administrator's email address */
+    char *admin_address;
+@@ -1342,8 +1342,11 @@
+    /** URL to the user manual (on our website or local copy) */
+    char *usermanual;
+-   /** The file name of the pcre filter file */
+-   const char *re_filterfile;
++   /** The file names of the pcre filter files. */
++   const char *re_filterfile[MAX_AF_FILES];
++
++   /** The short names of the pcre filter files. */
++   const char *re_filterfile_short[MAX_AF_FILES];
+ #ifdef FEATURE_COOKIE_JAR
+diff -urNad privoxy~/templates/show-status privoxy/templates/show-status
+--- privoxy~/templates/show-status     2006-02-11 23:44:25.000000000 +0100
++++ privoxy/templates/show-status      2006-02-11 23:44:37.000000000 +0100
+@@ -149,17 +149,12 @@
+             </tr>
+               @actions-filenames@
+            <tr>
+-              <th colspan="2"><a href="@user-manual@filter-file.html">Filter File:</a></th>
++              <th colspan="2"><a href="@user-manual@filter-file.html">Filter Files:</a></th>
+            </tr>
+            <tr>
+              <td>
+                @re-filter-filename@
+              </td>
+-             <td class="buttons">
+-               <!-- @if-have-filterfile-start -->
+-               <a href="show-status?file=filter">View</a>
+-               <!-- if-have-filterfile-end@ -->
+-             </td>
+            </tr>
+ <!-- @if-trust-support-start -->
+            <tr>
diff --git a/debian/patches/13_memory.dpatch b/debian/patches/13_memory.dpatch
new file mode 100644 (file)
index 0000000..40d7f55
--- /dev/null
@@ -0,0 +1,91 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 13_memory.dpatch by David Schmidt <david__schmidt@users.sourceforge.net>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: A few memory leaks plugged (mostly on error paths)
+## DP: Removing a double free
+## DP: Don't forget to malloc space for the null terminator...
+
+@DPATCH@
+#diff -urNad privoxy~/cgisimple.c privoxy/cgisimple.c
+#--- privoxy~/cgisimple.c      2006-02-11 18:55:17.000000000 +0100
+#+++ privoxy/cgisimple.c       2006-02-11 18:55:27.000000000 +0100
+#@@ -880,12 +880,13 @@
+#             string_join  (&s, html_encode(buf));
+#          }
+#          fclose(fp);
+#-
+#          if (map(exports, "contents", 1, s, 0))
+#          {
+#+            freez(s);
+#             free_map(exports);
+#             return JB_ERR_MEMORY;
+#          }
+#+         freez(s);
+#       }
+# 
+#       return template_fill_for_cgi(csp, "show-status-file", exports, rsp);
+#@@ -898,7 +899,7 @@
+#       if (!err) err = string_append(&s, " ");
+#    }
+#    if (!err) err = map(exports, "invocation", 1, s, 0);
+#-
+#+   freez(s);
+#    if (!err) err = map(exports, "options", 1, csp->config->proxy_args, 1);
+#    if (!err) err = show_defines(exports);
+# 
+diff -urNad privoxy~/filters.c privoxy/filters.c
+--- privoxy~/filters.c 2006-02-11 18:55:17.000000000 +0100
++++ privoxy/filters.c  2006-02-11 18:55:27.000000000 +0100
+@@ -966,6 +966,7 @@
+       string_append(&p, buf);
+    }
+    err = map(exports, "trusted-referrers", 1, p, 0);
++   freez(p);
+    if (err)
+    {
+@@ -988,6 +989,7 @@
+          string_append(&p, buf);
+       }
+       err = map(exports, "trust-info", 1, p, 0);
++      freez(p);
+    }
+    else
+    {
+diff -urNad privoxy~/jbsockets.c privoxy/jbsockets.c
+--- privoxy~/jbsockets.c       2004-01-31 10:27:50.000000000 +0100
++++ privoxy/jbsockets.c        2006-02-11 18:55:27.000000000 +0100
+@@ -434,7 +434,7 @@
+       return 0;
+    }
+-   if (len < 0)
++   if (len < 0) /* constant condition - size_t isn't ever negative */ 
+    {
+       return 1;
+    }
+diff -urNad privoxy~/loadcfg.c privoxy/loadcfg.c
+--- privoxy~/loadcfg.c 2006-02-11 18:55:17.000000000 +0100
++++ privoxy/loadcfg.c  2006-02-11 18:55:37.000000000 +0100
+@@ -877,7 +877,7 @@
+                   MAX_AF_FILES);
+             }
+             config->re_filterfile_short[i] = strdup(arg);
+-            p = malloc(strlen(arg));
++            p = malloc(strlen(arg) + 1);
+             if (p == NULL)
+             {
+                log_error(LOG_LEVEL_FATAL, "Out of memory");
+diff -urNad privoxy~/pcrs.c privoxy/pcrs.c
+--- privoxy~/pcrs.c    2004-01-31 10:27:51.000000000 +0100
++++ privoxy/pcrs.c     2006-02-11 18:55:27.000000000 +0100
+@@ -744,7 +744,7 @@
+ int pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, char **result, size_t *result_length)
+ {
+    pcrs_job *job;
+-   char *old, *new;
++   char *old, *new = NULL;
+    int hits, total_hits;
+  
+    old = subject;
diff --git a/debian/patches/14_config.dpatch b/debian/patches/14_config.dpatch
new file mode 100644 (file)
index 0000000..b1b9695
--- /dev/null
@@ -0,0 +1,72 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 14_config.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Several Debian specific changes to config file
+
+@DPATCH@
+diff -urNad privoxy~/config privoxy/config
+--- privoxy~/config    2006-02-11 20:29:59.000000000 +0100
++++ privoxy/config     2006-02-11 20:30:28.000000000 +0100
+@@ -1,4 +1,4 @@
+-#        Sample Configuration File for Privoxy v3.0.x
++#        Sample Configuration File for Privoxy
+ #  
+ #  Copyright (C) 2001-2004 Privoxy Developers http://privoxy.org
+ #  
+@@ -104,7 +104,7 @@
+ #      flat, except for confdir/templates, where the HTML templates
+ #      for CGI output reside (e.g. Privoxy's 404 error page).
+ #  
+-confdir .
++confdir /etc/privoxy
+ #  
+ #  1.2. logdir
+@@ -131,7 +131,7 @@
+ #  
+ #      No trailing "/", please
+ #  
+-logdir .
++logdir /var/log/privoxy
+ #  
+ #  1.3. actionsfile
+@@ -406,7 +406,7 @@
+ #          If set, this option should be the first option in the config
+ #          file, because it is used while the config file is being read.
+ #  
+-#user-manual http://www.privoxy.org/user-manual/
++user-manual /usr/share/doc/privoxy/user-manual
+ #  
+ #  2.2. trust-info-url
+@@ -442,8 +442,8 @@
+ #      don't end up locked out from the information on why they were
+ #      locked out in the first place!
+ #  
+-trust-info-url  http://www.example.com/why_we_block.html
+-trust-info-url  http://www.example.com/what_we_allow.html
++#trust-info-url  http://www.example.com/why_we_block.html
++#trust-info-url  http://www.example.com/what_we_allow.html
+ #  
+ #  2.3. admin-address
+@@ -730,7 +730,7 @@
+ #      Note that you must have compiled Privoxy with support for this
+ #      feature, otherwise this option has no effect.
+ #  
+-enable-remote-toggle  1
++enable-remote-toggle  0
+ #  
+ #  4.4. enable-edit-actions
+@@ -763,7 +763,7 @@
+ #      Note that you must have compiled Privoxy with support for this
+ #      feature, otherwise this option has no effect.
+ #  
+-enable-edit-actions 1
++enable-edit-actions 0
+ #  
+ #  4.5. ACLs: permit-access and deny-access
diff --git a/debian/patches/15_mansection8.dpatch b/debian/patches/15_mansection8.dpatch
new file mode 100644 (file)
index 0000000..8311c66
--- /dev/null
@@ -0,0 +1,96 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 15_mansection8.dpatch by Roland Rosenfeld <roland@debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Move man page from man section 1 to man section 8.
+
+@DPATCH@
+diff -urNad privoxy~/doc/source/privoxy-man-page.sgml privoxy/doc/source/privoxy-man-page.sgml
+--- privoxy~/doc/source/privoxy-man-page.sgml  2006-02-11 23:44:40.000000000 +0100
++++ privoxy/doc/source/privoxy-man-page.sgml   2006-02-11 23:44:40.000000000 +0100
+@@ -57,7 +57,7 @@
+ </refentryinfo>
+ <refmeta>
+  <refentrytitle>privoxy</refentrytitle> 
+- <manvolnum>1</manvolnum>
++ <manvolnum>8</manvolnum>
+  <refmiscinfo>
+   Privoxy &p-version;<![%p-not-stable;[ &p-status;]]>
+  </refmiscinfo>
+diff -urNad privoxy~/GNUmakefile.in privoxy/GNUmakefile.in
+--- privoxy~/GNUmakefile.in    2006-02-11 23:44:25.000000000 +0100
++++ privoxy/GNUmakefile.in     2006-02-11 23:44:40.000000000 +0100
+@@ -177,7 +177,7 @@
+               `find doc/text/ -type f | grep -v "CVS" | grep -v "\.\#" | grep -v ".*~" | grep -v ".cvsignore" | grep -v "TAGS"` \
+               `find doc/webserver/ -name "*.html" | grep -v "\(webserver\|team\)\/index\.html"` \
+               `find doc/webserver/ -name "*.css"` \
+-                privoxy.1 \
++                privoxy.8 \
+               doc/pdf/*.pdf
+ #############################################################################
+@@ -520,7 +520,7 @@
+       $(RM) /etc/init.d/privoxy
+       $(RM) /usr/sbin/privoxy
+       $(RM) /usr/sbin/rcprivoxy
+-      $(RM) /usr/share/man/man1/privoxy.1.gz
++      $(RM) /usr/share/man/man1/privoxy.8.gz
+ #############################################################################
+ # generic distribution
+@@ -692,7 +692,7 @@
+       $(RM) doc/man/* doc/webserver/man-page/*.html
+ ifneq ($(MAN2HTML),false)
+       $(ECHO) "<html><head><title>Privoxy Man page</title><link rel=\"stylesheet\" type=\"text/css\" href=\"../p_web.css\"></head><body><H2>NAME</H2>" > doc/webserver/man-page/privoxy-man-page.html
+-      man ./privoxy.1 | $(MAN2HTML) -bare >> doc/webserver/man-page/privoxy-man-page.html
++      man ./privoxy.8 | $(MAN2HTML) -bare >> doc/webserver/man-page/privoxy-man-page.html
+       $(ECHO) "</body></html>" >> doc/webserver/man-page/privoxy-man-page.html
+ else
+       $(MAKE) groff2html
+@@ -704,14 +704,14 @@
+ man: dok-release
+       mkdir -p doc/source/temp && cd doc/source/temp && $(RM) * ;\
+       nsgmls ../privoxy-man-page.sgml  | sgmlspl ../../../utils/docbook2man/docbook2man-spec.pl &&\
+-      perl -pi.bak -e 's/ <URL:.*>//; s/\[ /\[/g' privoxy.1 ;\
+-      $(DB) ../privoxy-man-page.sgml && $(MV) -f privoxy.1 ../../../privoxy.1
++      perl -pi.bak -e 's/ <URL:.*>//; s/\[ /\[/g' privoxy.8 ;\
++      $(DB) ../privoxy-man-page.sgml && $(MV) -f privoxy.8 ../../../privoxy.8
+ # For those with man2html ala RH7s.
+ man2html:
+       mkdir -p doc/webserver/man-page
+ ifneq ($(MAN2HTML),false)
+-      $(MAN2HTML) privoxy.1 |grep -v "^Content-type" > tmp.html
++      $(MAN2HTML) privoxy.8 |grep -v "^Content-type" > tmp.html
+       $(PERL) -pi.bak -e 's/<A .*Contents<\/A>//; s/<A .*man2html<\/A>/man2html/' tmp.html
+       $(PERL) -pi.bak -e 's/(<\/HEAD>)/<LINK REL=\"STYLESHEET\" TYPE=\"text\/css\" HREF=\"..\/p_doc.css\"><\/HEAD>/' tmp.html
+ # Twice because my version of man2html is pulling in commas and periods in URLs.
+@@ -726,7 +726,7 @@
+ # Otherwise we get plain groff conversion.
+ groff2html:
+-      $(G2H_CMD) ./privoxy.1 | $(SED) -e 's@</head>@<link REL="STYLESHEET" TYPE="text/css" HREF="../p_doc.css"></head>@' > doc/webserver/man-page/privoxy-man-page.html
++      $(G2H_CMD) ./privoxy.8 | $(SED) -e 's@</head>@<link REL="STYLESHEET" TYPE="text/css" HREF="../p_doc.css"></head>@' > doc/webserver/man-page/privoxy-man-page.html
+ # readme page and INSTALL file
+@@ -1122,8 +1122,8 @@
+               $(INSTALL) $(INSTALL_T) $(DOK_WEB)/p_doc.css $$DOC;\
+       fi
+       @# Not all platforms support gzipped man pages.
+-      @$(ECHO) Installing man page to $(MAN_DEST)/privoxy.1
+-      -$(INSTALL) $(INSTALL_T) privoxy.1  $(MAN_DEST)/privoxy.1
++      @$(ECHO) Installing man page to $(MAN_DEST)/privoxy.8
++      -$(INSTALL) $(INSTALL_T) privoxy.8  $(MAN_DEST)/privoxy.8
+       @# Change the config file default directories according to the configured ones
+       @$(ECHO) Rewriting config for this installation
+@@ -1273,7 +1273,7 @@
+       @# man page and docs
+       @$(ECHO) Removing $(PROGRAM) docs
+-      -$(RM) $(MAN_DEST)/privoxy.1*
++      -$(RM) $(MAN_DEST)/privoxy.8*
+       -$(RM) -r $(DOC_DEST) || $(RM) -r $(prefix)/doc/privoxy
+       @# Log and jarfile and pidfile
index 1c1f126..5bc965b 100644 (file)
@@ -25,8 +25,15 @@ set -e
 
 case "$1" in
     configure)
 
 case "$1" in
     configure)
-        adduser --quiet --system --home /etc/privoxy --ingroup nogroup \
-                --disabled-password privoxy
+        if ! adduser --quiet --system --home /etc/privoxy --no-create-home \
+                    --ingroup nogroup --disabled-password privoxy
+        then
+           # user privoxy seems to exist
+           # -> remove him before newly adding him.
+           deluser --quiet privoxy
+           adduser --quiet --system --home /etc/privoxy --no-create-home \
+                   --ingroup nogroup --disabled-password privoxy
+       fi
         chown -R privoxy.adm /var/log/privoxy
         chmod 750 /var/log/privoxy
        chown privoxy /etc/privoxy/*.action /etc/privoxy/trust
         chown -R privoxy.adm /var/log/privoxy
         chmod 750 /var/log/privoxy
        chown privoxy /etc/privoxy/*.action /etc/privoxy/trust
index b3cb9f7..b79c8ec 100644 (file)
@@ -20,7 +20,7 @@ set -e
 
 case "$1" in
     purge)
 
 case "$1" in
     purge)
-        userdel privoxy || echo "WARNING: Problem removing user privoxy."
+        deluser --quiet privoxy
         rm -rf /var/log/privoxy /etc/privoxy
         ;;
 
         rm -rf /var/log/privoxy /etc/privoxy
         ;;
 
index 5490b5d..815f2ae 100755 (executable)
@@ -1,6 +1,8 @@
 #!/usr/bin/make -f
 #!/usr/bin/make -f
+#
+# (C) 2002-2006 Roland Rosenfeld <roland@debian.org>, based on
 # Sample debian/rules that uses debhelper.
 # Sample debian/rules that uses debhelper.
-# GNU copyright 1997 to 1999 by Joey Hess.
+# This file is public domain software, originally written by Joey Hess. 
 
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
 
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
@@ -19,72 +21,54 @@ else
         OPTIMIZE=-O2
 endif
 
         OPTIMIZE=-O2
 endif
 
-configure: configure-stamp
-configure-stamp:
+build: build-stamp
+build-stamp: patch-stamp
        dh_testdir
 
        autoheader
        autoconf
        env CFLAGS="$(OPTIMIZE) -g" \
                ./configure --prefix=/usr --sysconfdir=/etc \
        dh_testdir
 
        autoheader
        autoconf
        env CFLAGS="$(OPTIMIZE) -g" \
                ./configure --prefix=/usr --sysconfdir=/etc \
-               --mandir=/usr/share/man $(WITHDEBUG)
-
-       touch configure-stamp
-
-build: build-stamp
-build-stamp: configure-stamp 
-       dh_testdir
-
+               --mandir=/usr/share/man $(WITHDEBUG) \
+               --with-docbook=/usr/share/sgml/docbook/stylesheet/dsssl/modular
        $(MAKE)
        $(MAKE)
-
-#      backup formatted upstream documentation:
-       for x in text webserver pdf; do \
-               if [ ! -d doc/$$x.dist ]; then \
-                       cp -a doc/$$x doc/$$x.dist; \
-               fi; \
+#       create missing doc/pdf directory if necessary:
+       [ -d doc/pdf ] || mkdir doc/pdf
+       $(MAKE) dok-pdf
+       $(MAKE) dok
+       env -u LANG $(MAKE) man
+       $(MAKE) man2html
+
+#      remove trailing whitespaces:
+       for x in developer-manual user-manual faq; do \
+               sed -e 's/[     ]*$$//' < doc/text/$$x.txt > doc/text/$$x.nws;\
+               mv -f doc/text/$$x.nws doc/text/$$x.txt; \
        done
        done
-       for x in INSTALL README privoxy.1; do \
-               if [ ! -f $$x.dist ]; then \
-                       cp -a $$x $$x.dist; \
-               fi; \
-       done
-
-       (cd doc/source; $(MAKE) pdf)
-       (cd doc/source; $(MAKE) all)
 
        touch build-stamp
 
 
        touch build-stamp
 
-clean:
+clean: clean1 unpatch
+clean1:
        dh_testdir
        dh_testroot
        rm -f build-stamp configure-stamp
 
        -$(MAKE) clean
        -$(MAKE) distclean
        dh_testdir
        dh_testroot
        rm -f build-stamp configure-stamp
 
        -$(MAKE) clean
        -$(MAKE) distclean
-       rm -f privoxy 
-       rm -f configure config.h GNUmakefile 
-       rm -f doc/source/ldp.dsl
+       rm -f configure config.h GNUmakefile
+       rm -f privoxy.8
+
        rm -rf obj
        rm -f ActivityConsole.jar
        rm -f src/java/org/privoxy/activityconsole/*.class
 
        rm -rf obj
        rm -f ActivityConsole.jar
        rm -f src/java/org/privoxy/activityconsole/*.class
 
-#      restore formatted upstream documentation:
-       for x in text webserver pdf; do \
-               if [ -d doc/$$x.dist ]; then \
-                       rm -rf doc/$$x; \
-                       mv doc/$$x.dist doc/$$x; \
-               fi; \
-       done
-       for x in INSTALL README privoxy.1; do \
-               if [ -f $$x.dist ]; then \
-                       rm -f $$x; \
-                       mv $$x.dist $$x; \
-               fi; \
-       done
+       rm -f doc/source/ldp.dsl
+       rm -rf doc/source/temp
+       rm -rf doc/pdf
 
        dh_clean
 
 
        dh_clean
 
-install: build
+install: build-stamp
        dh_testdir
        dh_testroot
        dh_clean -k
        dh_testdir
        dh_testroot
        dh_clean -k
@@ -92,14 +76,7 @@ install: build
 
        install -m 0755 privoxy $(DEBDIR)/usr/sbin/privoxy
 
 
        install -m 0755 privoxy $(DEBDIR)/usr/sbin/privoxy
 
-       sed -e 's/^\(\(trust\|proxy\)-info-url\|admin-address\)/#\1/'  \
-           -e 's/^\(enable-\(edit-actions\|remote-toggle\)\)[  ]*1/\1 0/' \
-           -e 's#^confdir .*#confdir /etc/privoxy#' \
-           -e 's#^logdir .*#logdir /var/log/privoxy#' \
-           -e 's%^#\(user-manual\).*%\1 /usr/share/doc/privoxy/user-manual%' \
-           -e 's/\(Sample Configuration File for Privoxy\).*/\1/' \
-           -e 's/Id: config,v.*/Id: config,v $$/' \
-               < config > $(DEBDIR)/etc/privoxy/config
+       install -m 644 config $(DEBDIR)/etc/privoxy/config
        install -m 0644 default.action $(DEBDIR)/etc/privoxy/default.action
        install -m 0644 standard.action $(DEBDIR)/etc/privoxy/standard.action
        install -m 0644 user.action $(DEBDIR)/etc/privoxy/user.action
        install -m 0644 default.action $(DEBDIR)/etc/privoxy/default.action
        install -m 0644 standard.action $(DEBDIR)/etc/privoxy/standard.action
        install -m 0644 user.action $(DEBDIR)/etc/privoxy/user.action
@@ -110,13 +87,23 @@ install: build
        rm -f $(DEBDIR)/etc/privoxy/templates/*~
        rm -rf $(DEBDIR)/etc/privoxy/templates/CVS
 
        rm -f $(DEBDIR)/etc/privoxy/templates/*~
        rm -rf $(DEBDIR)/etc/privoxy/templates/CVS
 
+#      Remove CVS tags and trailing spaces from config files:
+       find $(DEBDIR)/etc/privoxy -type f \
+       | xargs grep -l '\$$[A-Z][^$$]*:[^$$]*\$$' \
+       | while read f; do \
+           sed -e 's/\$$\(Id: [^$$]*,v\)[^$$]*\$$/\1/' \
+               -e 's/\$$\(Source: [^$$]*\)\$$/\1/' \
+               -e 's/\$$\(Log: [^$$]*\)\$$/\1/' \
+               -e 's/ *$$//' < $$f > $$f.new; \
+           mv -f $$f.new $$f; \
+       done
 
 # Build architecture-independent files here.
 
 # Build architecture-independent files here.
-binary-indep: build install
+binary-indep: build-stamp install
 # We have nothing to do by default.
 
 # Build architecture-dependent files here.
 # We have nothing to do by default.
 
 # Build architecture-dependent files here.
-binary-arch: build install
+binary-arch: build-stamp install
        dh_testdir
        dh_testroot
 #      dh_installdebconf       
        dh_testdir
        dh_testroot
 #      dh_installdebconf       
@@ -147,5 +134,17 @@ binary-arch: build install
        dh_md5sums
        dh_builddeb
 
        dh_md5sums
        dh_builddeb
 
+patch: patch-stamp
+patch-stamp:
+       dpatch apply-all
+       touch patch-stamp
+       #dpatch call-all -a=pkg-info >patch-stamp
+
+unpatch:
+       dpatch deapply-all
+       rm -rf patch-stamp debian/patched
+
 binary: binary-indep binary-arch
 binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
+
+.PHONY: build clean binary-indep binary-arch binary install patch unpatch \
+       clean1
diff --git a/debian/watch b/debian/watch
new file mode 100644 (file)
index 0000000..abc7f3f
--- /dev/null
@@ -0,0 +1,8 @@
+# See uscan(1) for format
+
+# Compulsory line, this is a version 3 file
+version=3
+
+#http://sourceforge.net/project/showfiles.php?group_id=11118 http://prdownloads.sourceforge.net/ijbswa/privoxy-(.*)-stable-src.tar.gz\?download
+
+http://prdownloads.sourceforge.net/ijbswa/privoxy-(.*)-stable-src.tar.gz
index a218c6d..a22f606 100644 (file)
@@ -2,18 +2,14 @@
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/default.action.master,v $
 # 
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/default.action.master,v $
 # 
-#  $Id: default.action.master,v 1.8 2003/09/22 00:33:01 david__schmidt Exp $
+#  $Id: default.action.master,v 1.1.2.39 2004/10/03 14:03:33 david__schmidt Exp $
 #
 #  Purpose     :  Default actions file, see
 #                 http://www.privoxy.org/user-manual/actions-file.html
 #
 #
 #  Purpose     :  Default actions file, see
 #                 http://www.privoxy.org/user-manual/actions-file.html
 #
-#  Copyright   :  Written by and Copyright
+#  Copyright   :  Written by and Copyright (C) 2001 - 2004 the
 #                 Privoxy team. http://www.privoxy.org/
 #
 #                 Privoxy team. http://www.privoxy.org/
 #
-#                 Based on the Internet Junkbuster originally written
-#                 by and Copyright (C) 1997 Anonymous Coders and
-#                 Junkbusters Corporation.  http://www.junkbusters.com
-# 
 # Note: Updated versions of this file will be made available from time
 #       to time. Check http://sourceforge.net/project/showfiles.php?group_id=11118
 #       for updates and/or subscribe to the announce mailing list
 # Note: Updated versions of this file will be made available from time
 #       to time. Check http://sourceforge.net/project/showfiles.php?group_id=11118
 #       for updates and/or subscribe to the announce mailing list
 # Syntax
 #############################################################################
 # 
 # Syntax
 #############################################################################
 # 
+# A much better explanation can be found in the user manual which is
+# part of the distribution and can be found at http://www.privoxy.org/user-manual
+#
 # To determine which actions apply to a request, the URL of the request is
 # compared to all patterns in this file. Every time it matches, the list of
 # applicable actions for this URL is incrementally updated. You can trace
 # To determine which actions apply to a request, the URL of the request is
 # compared to all patterns in this file. Every time it matches, the list of
 # applicable actions for this URL is incrementally updated. You can trace
-# this process by visiting http://i.j.b/show-url-info
+# this process by visiting http://config.privoxy.org/show-url-info
 #
 # There are 4 types of lines in this file: comments (like this line),
 # actions, aliases and patterns, all of which are explained below.
 #
 # There are 4 types of lines in this file: comments (like this line),
 # actions, aliases and patterns, all of which are explained below.
@@ -70,7 +69,7 @@
 # can be left out:
 # 
 # www.example.com 
 # can be left out:
 # 
 # www.example.com 
-#   is a domain-only pattern and will match any request to www.yahoo.com
+#   is a domain-only pattern and will match any request to www.example.com
 # 
 # www.example.com/
 #   means exactly the same (but is slightly less efficient)
 # 
 # www.example.com/
 #   means exactly the same (but is slightly less efficient)
 #    Filters predefined in the supplied default.action include:
 #
 #     js-annoyances:       Get rid of particularly annoying JavaScript abuse
 #    Filters predefined in the supplied default.action include:
 #
 #     js-annoyances:       Get rid of particularly annoying JavaScript abuse
+#     js-events:           Kill all JS event bindings (Radically destructive! Use only on real suckers)
 #     html-annoyances:     Get rid of particularly annoying HTML abuse
 #     content-cookies:     Kill cookies that come in the HTML or JS content
 #     html-annoyances:     Get rid of particularly annoying HTML abuse
 #     content-cookies:     Kill cookies that come in the HTML or JS content
-#     webbugs:             Squish WebBugs (1x1 invisible GIFs used for user tracking)
-#     popups:              Kill all popups in JS and HTML
-#     frameset-borders:    Give frames a border
 #     refresh-tags:        Kill automatic refresh tags (for dial-on-demand setups)
 #     refresh-tags:        Kill automatic refresh tags (for dial-on-demand setups)
+#     unsolicited-popups:  Disable only unsolicited pop-up windows
+#     all-popups:          Kill all popups in JavaScript and HTML
 #     img-reorder:         Reorder attributes in <img> tags to make the banners-by-* filters more effective
 #     banners-by-size:     Kill banners by size (very efficient!)
 #     banners-by-link:     Kill banners by their links to known clicktrackers 
 #     img-reorder:         Reorder attributes in <img> tags to make the banners-by-* filters more effective
 #     banners-by-size:     Kill banners by size (very efficient!)
 #     banners-by-link:     Kill banners by their links to known clicktrackers 
-#     fun:                 Text replacements  for subversive browsing fun!
-#     nimda:               Remove Nimda (virus) code.
+#     webbugs:             Squish WebBugs (1x1 invisible GIFs used for user tracking)
+#     tiny-textforms:      Extend those tiny textareas up to 40x80 and kill the hard wrap
+#     jumping-windows:     Prevent windows from resizing and moving themselves
+#     frameset-borders:    Give frames a border
+#     demoronizer:         Fix MS's non-standard use of standard charsets
 #     shockwave-flash:     Kill embedded Shockwave Flash objects
 #     quicktime-kioskmode: Make Quicktime movies saveable
 #     shockwave-flash:     Kill embedded Shockwave Flash objects
 #     quicktime-kioskmode: Make Quicktime movies saveable
-#     js-events:           Kill all JS event bindings (Radically destructive! Use only on real suckers)
+#     fun:                 Text replacements  for subversive browsing fun!
 #     crude-parental:      Kill all web pages that contain the words "sex" or "warez"
 #     crude-parental:      Kill all web pages that contain the words "sex" or "warez"
+#     ie-exploits:         Disable some known Internet Explorer bug exploits
+#     site-specifics       Cure for site-specific problems. Don't apply generally!
 #
 # +hide-forwarded-for-headers
 #    Block any existing X-Forwarded-for header, and do not add a new one.
 #
 # +hide-forwarded-for-headers
 #    Block any existing X-Forwarded-for header, and do not add a new one.
 #
 # +set-image-blocker{blank}
 # +set-image-blocker{pattern}
 #
 # +set-image-blocker{blank}
 # +set-image-blocker{pattern}
-# +set-image-blocker{custom}
 # +set-image-blocker{<URL>} with <url> being any valid image URL
 #    Decides what to do with URLs that end up tagged with {+block +handle-as-image}.
 # +set-image-blocker{<URL>} with <url> being any valid image URL
 #    Decides what to do with URLs that end up tagged with {+block +handle-as-image}.
-#    There are 5 options:
+#    There are 4 options:
 #      * "-set-image-blocker" will send a HTML "blocked" page, usually
 #         resulting in a "broken image" icon.
 #      * "+set-image-blocker{blank}" will send a 1x1 transparent image
 #      * "+set-image-blocker{pattern}" will send a 4x4 grey/white pattern
 #      * "-set-image-blocker" will send a HTML "blocked" page, usually
 #         resulting in a "broken image" icon.
 #      * "+set-image-blocker{blank}" will send a 1x1 transparent image
 #      * "+set-image-blocker{pattern}" will send a 4x4 grey/white pattern
-#        which is easier to recognize than the transparent one.
-#      * "+set-image-blocker{custom}" will send an image file as specified
-#        in the config file (see image-blocker-custom-file within config).
+#        which is less intrusive than the logo but easier to recognize
+#        than the transparent one.
 #      * "+set-image-blocker{<URL>}" will send a HTTP temporary redirect
 #        to the specified image URL.
 #
 #      * "+set-image-blocker{<URL>}" will send a HTTP temporary redirect
 #        to the specified image URL.
 #
 # +crunch-incoming-cookies
 #    Prevent the website from setting cookies
 #
 # +crunch-incoming-cookies
 #    Prevent the website from setting cookies
 #
-# +kill-popups
+# +kill-popups (deprecated)
 #    Filter the website through a built-in filter to disable
 #    window.open() etc.  The two alternative spellings are
 #    equivalent.
 #    Filter the website through a built-in filter to disable
 #    window.open() etc.  The two alternative spellings are
 #    equivalent.
 #############################################################################
 {{settings}}
 #############################################################################
 #############################################################################
 {{settings}}
 #############################################################################
-for-privoxy-version=3.0
+for-privoxy-version=3.0.3
 
 #############################################################################
 # Aliases
 
 #############################################################################
 # Aliases
@@ -393,7 +395,7 @@ for-privoxy-version=3.0
 +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
  allow-all-cookies  = -crunch-all-cookies -session-cookies-only
 +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
  allow-all-cookies  = -crunch-all-cookies -session-cookies-only
- allow-popups       = -filter{popups} -kill-popups
+ allow-popups       = -filter{all-popups} -kill-popups
 +block-as-image     = +block +handle-as-image
 -block-as-image     = -block
 
 +block-as-image     = +block +handle-as-image
 -block-as-image     = -block
 
@@ -405,7 +407,7 @@ shop        = -crunch-all-cookies allow-popups
 
 # Your favourite blend of filters:
 #
 
 # Your favourite blend of filters:
 #
-myfilters   = +filter{html-annoyances} +filter{js-annoyances} +filter{popups}\
+myfilters   = +filter{html-annoyances} +filter{js-annoyances} +filter{all-popups}\
               +filter{webbugs} +filter{nimda} +filter{banners-by-size} #+filter{fun}
 
 # Allow ads for selected useful free sites:
               +filter{webbugs} +filter{nimda} +filter{banners-by-size} #+filter{fun}
 
 # Allow ads for selected useful free sites:
@@ -426,27 +428,32 @@ allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}
 -downgrade-http-version \
 -fast-redirects \
 +filter{js-annoyances} \
 -downgrade-http-version \
 -fast-redirects \
 +filter{js-annoyances} \
+-filter{js-events} \
 +filter{html-annoyances} \
 +filter{html-annoyances} \
-+filter{content-cookies} \
-+filter{webbugs} \
-+filter{popups} \
--filter{frameset-borders} \
--filter{refresh-tags} \
--filter{img-reorder} \
+-filter{content-cookies} \
++filter{refresh-tags} \
++filter{unsolicited-popups} \
+-filter{all-popups} \
++filter{img-reorder} \
 +filter{banners-by-size} \
 -filter{banners-by-link} \
 +filter{banners-by-size} \
 -filter{banners-by-link} \
--filter{fun} \
-+filter{nimda} \
++filter{webbugs} \
+-filter{tiny-textforms} \
++filter{jumping-windows} \
+-filter{frameset-borders} \
+-filter{demoronizer} \
 -filter{shockwave-flash} \
 -filter{shockwave-flash} \
-+filter{quicktime-kioskmode} \
--filter{js-events} \
+-filter{quicktime-kioskmode} \
+-filter{fun} \
 -filter{crude-parental} \
 -filter{crude-parental} \
++filter{ie-exploits} \
+-filter{site-specifics} \
 -handle-as-image \
 +hide-forwarded-for-headers \
 +hide-from-header{block} \
 +hide-referrer{forge} \
 -hide-user-agent \
 -handle-as-image \
 +hide-forwarded-for-headers \
 +hide-from-header{block} \
 +hide-referrer{forge} \
 -hide-user-agent \
-+inspect-jpegs \
+-inspect-jpegs \
 -kill-popups \
 -limit-connect \
 +prevent-compression \
 -kill-popups \
 -limit-connect \
 +prevent-compression \
@@ -460,41 +467,86 @@ allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}
 #############################################################################
 # Needed for automatic feedback evaluation; Please don't change or delete!
 #############################################################################
 #############################################################################
 # Needed for automatic feedback evaluation; Please don't change or delete!
 #############################################################################
-{+add-header{X-Actions-File-Version: 1.5} -filter -kill-popups}
+{+add-header{X-Actions-File-Version: 1.8} -filter -kill-popups}
 .privoxy.org
 .oesterhelt.org/actions
 
 #############################################################################
 # These extensions belong to images:
 #############################################################################
 .privoxy.org
 .oesterhelt.org/actions
 
 #############################################################################
 # These extensions belong to images:
 #############################################################################
-{+handle-as-image}
+{+handle-as-image -filter}
 #############################################################################
 /.*\.(gif|jpe?g|png|bmp|ico)($|\?)
 
 #############################################################################
 #############################################################################
 /.*\.(gif|jpe?g|png|bmp|ico)($|\?)
 
 #############################################################################
-# Generic block patterns (the most effective!):
+# These don't:
+#############################################################################
+{-handle-as-image}
+/.*\.(js|php|css|.?html)
+
+#############################################################################
+# Generic block patterns by host:
 #############################################################################
 {+block}
 #MASTER# DONT-VERIFY (generic)
 #############################################################################
 {+block}
 #MASTER# DONT-VERIFY (generic)
-
-# By hostname:
-#
 ad*.
 .*ads.
 ad*.
 .*ads.
+.ad.
 *banner*.
 count*.
 *banner*.
 count*.
+*counter.
 
 
-# By path:
-#
-/(.*/)?(ads(erver?|tream)?|.*?ads/|ad/|adv(iew|ert(s|enties|is(ing|e?ments)?)?)?|(ad|all|nn)?[-_]?banner(s|ads?|farm)?)
-/(.*/)?(publicite|werbung|rekla(ma|me|am)|annonse|maino(kset|nta|s)?/)
-/.*(count|track)(er|run)?\.(pl|cgi|exe|dll|asp|php[34]?)
-/.*promo.gif
+#############################################################################
+# Generic unblockers by host:
+#############################################################################
+{-block}
+#MASTER# DONT-VERIFY (generic)
+adsl.
+ad[udmw]*.
+adbl*.
+adam*.
+adv[oia]*.
+.*road*.
+.olympiad*.
+.*load*.
+.*[epu]ad*.
+county*.
+countr*.
 
 #############################################################################
 
 #############################################################################
-# Site-specific block patterns;
+# Generic block patterns by path:
 #############################################################################
 #############################################################################
+{+block}
+#MASTER# DONT-VERIFY (generic)
+/(.*/)?ad(/|s|v|images|cycle|rotate|mentor|click|frame)
+/.*ads/
+/(.*/)?(ad|all|nn|db|promo(tion)?)?[-_]?banner
+/(.*/)?(publicite|werbung|reklaa?m|annonse|maino(kset|nta|s)?/)
+/.*(count|track|compteur|adframe|banner)(er|run)?(\?|\.(pl|cgi|exe|dll|asp|php|cpt))
 
 
+#############################################################################
+# Generic unblockers by path:
+#############################################################################
+{-block}
+#MASTER# DONT-VERIFY (generic)
+/.*ad(sl|v(i[cs]|o|an|ertencia|ent|.*search)) # advice/advisories/advan*/advertencia (spanish)
+/.*(lo|thre|he|d|gr|l|ro|re|squ)ads
+/.*account
+
+#############################################################################
+# Exceptions for academia
+#############################################################################
+.edu
+.ac.*/
+.uni-*.de
+.tu-*.de
+
+.gov
+
+#############################################################################
+# Site-specific block patterns;
+#############################################################################
+{+block}
 #MASTER# BLOCK-REFERRER: http://www.brooksbrothers.com/
 #MASTER# BLOCK-REFERRER: http://www.autodesk.com/
 .hitbox.com 
 #MASTER# BLOCK-REFERRER: http://www.brooksbrothers.com/
 #MASTER# BLOCK-REFERRER: http://www.autodesk.com/
 .hitbox.com 
@@ -504,6 +556,9 @@ www.the-gadgeteer.com/cgi-bin/getimage.cgi/
 www.stern.de/bilder/poweredby
 #MASTER# BLOCK-REFERRER: http://www.gmx.net/de/cgi/logoutpage?CN=sJywqKCElHw%3D%3D
 images.gmx.net/images/bs/
 www.stern.de/bilder/poweredby
 #MASTER# BLOCK-REFERRER: http://www.gmx.net/de/cgi/logoutpage?CN=sJywqKCElHw%3D%3D
 images.gmx.net/images/bs/
+#MASTER# BLOCK-REFERRER: http://www.gmx.de/
+www.gmx.de/promo
+images.gmx.net/images/.*/promo/
 #MASTER# BLOCK-REFERRER: http://www.max.de/
 .akamaitech.net/.*/img/e-commerce
 www.max.de/_teaser/partner/
 #MASTER# BLOCK-REFERRER: http://www.max.de/
 .akamaitech.net/.*/img/e-commerce
 www.max.de/_teaser/partner/
@@ -523,8 +578,6 @@ www.beseen.com/images/website3.gif
 #MASTER# BLOCK-REFERRER: http://www.planetspiele.de/
 .planetspiele.de/gfx/partner
 #MASTER# BLOCK-REFERRER: http://www.hot.ee/toptools/
 #MASTER# BLOCK-REFERRER: http://www.planetspiele.de/
 .planetspiele.de/gfx/partner
 #MASTER# BLOCK-REFERRER: http://www.hot.ee/toptools/
-#MASTER# REMARKS: Yes, block *all* their graphics.
-www.hot.ee/.*\.(gif|jpe?g)
 top.ultraseek.net/top_sit.*\.gif
 #MASTER# BLOCK-REFERRER: http://kickme.to/FOSI
 fosi.ural.net/.*\.jpg
 top.ultraseek.net/top_sit.*\.gif
 #MASTER# BLOCK-REFERRER: http://kickme.to/FOSI
 fosi.ural.net/.*\.jpg
@@ -543,17 +596,20 @@ cobolreport.com/images/Acucorp1.gif
 cobolreport.com/images/netcobol.jpg
 cobolreport.com/images/NetCOBOL-banner.gif
 objectz.com/images/Landmark%20120x240.gif
 cobolreport.com/images/netcobol.jpg
 cobolreport.com/images/NetCOBOL-banner.gif
 objectz.com/images/Landmark%20120x240.gif
-#MASTER# BLOCK-REFERRER: http://www.theregister.co.uk/
-www.theregister.co.uk/media
 #MASTER# BLOCK-REFERRER: http://www.dpreview.com/reviews/canons40/
 tribalfusion.speedera.net
 .tribalfusion.com/media/
 #MASTER# BLOCK-REFERRER: http://www.dpreview.com/reviews/canons40/
 tribalfusion.speedera.net
 .tribalfusion.com/media/
+#MASTER# BLOCK-REFERRER: http://www.stuff.co.nz
+#MASTER# REMARKS: http://www.speedera.com/primary/newsroom/apr292002-arch.htm
+engage.speedera.net/
 #MASTER# BLOCK-REFERRER: http://www.portalofevil.com/
 b*.portalofevil.com/shlv
 #MASTER# BLOCK-REFERRER: http://us.imdb.com/Quotes?0110912
 i.imdb.com/Vpics/
 #MASTER# BLOCK-REFERRER: http://us.imdb.com/Title?0110912
 #MASTER# BLOCK-REFERRER: http://www.portalofevil.com/
 b*.portalofevil.com/shlv
 #MASTER# BLOCK-REFERRER: http://us.imdb.com/Quotes?0110912
 i.imdb.com/Vpics/
 #MASTER# BLOCK-REFERRER: http://us.imdb.com/Title?0110912
-i.imdb.com/Photos/CMSIcons
+#MASTER# BLOCK-REFERRER: http://www.imdb.com/help/boards/markup
+#MASTER# REMARKS: 2nd is for emoticons exception
+i.imdb.com/Photos/CMSIcons/(?!buttons|emoticons)
 rcm.amazon.com
 #MASTER# BLOCK-REFERRER: http://us.imdb.com/Trivia?0110116
 i.imdb.com/Icons/apix/
 rcm.amazon.com
 #MASTER# BLOCK-REFERRER: http://us.imdb.com/Trivia?0110116
 i.imdb.com/Icons/apix/
@@ -564,6 +620,65 @@ www.salon.com/Creatives
 images.salon.com/plus/gear/src/
 #MASTER# BLOCK-REFERRER: http://www.sourceforge.net/
 images.sourceforge.net/images/DB2powered.gif
 images.salon.com/plus/gear/src/
 #MASTER# BLOCK-REFERRER: http://www.sourceforge.net/
 images.sourceforge.net/images/DB2powered.gif
+#MASTER# BLOCK-REFERRER: http://www.planetgamecube.com/media.cfm?action=shot&id=250&seq=2
+/.*paypal-smad\.gif
+www.planetgamecube.com/images/PGC_Q_Edit.gif
+#MASTER# BLOCK-REFERRER: http://www.samachar.com/
+.samachar.com/banimages/
+#MASTER# BLOCK-REFERRER: http://www.weatherbug.com/aws/index.asp
+.weatherbug.com/popups/
+#MASTER# BLOCK-REFERRER: http://portale.web.de/Film/
+.web.de/.*/EIGENWERBUNG/
+#MASTER# BLOCK-REFERRER: http://www.aintitcool.com/
+www.aintitcool.com/.*\.swf
+#MASTER# BLOCK-REFERRER: http://www.hispasexo.net/fotos/index.php?currDir=./Negras&pageType=image&image=bla001.jpg
+www.hispasexo.net/.*/sxb
+#MASTER# BLOCK-REFERRER: http://www.nytimes.com/2002/09/05/technology/05CODE.html
+graphics.nytimes.com/nytstore/images/ctx
+#MASTER# BLOCK-REFERRER: http://www.macfixit.com/
+spinbox.techtracker.com
+#MASTER# BLOCK-REFERRER: http://www.javaworld.com/javaworld/jw-11-2003/jw-1114-toolbox.html?
+spinbox.macworld.com/
+#MASTER# BLOCK-REFERRER: http://www.sharereactor.com/
+#MASTER# BLOCK-REFERRER: http://www.popupad.net/
+www.popupad.net/ats/
+#MASTER# BLOCK-REFERRER: http://www.gamespot.com/
+www.gamespot.com/promos/
+#MASTER# BLOCK-REFERRER: http://www.famousbabes.com/gabrielleR/grpics1.htm
+#MASTER# BLOCK-REFERRER: http://www.hit-now.com/
+hit-now.com
+#MASTER# BLOCK-REFERRER: http://www.pgpi.org/
+[a-v]*.valueclick.com
+#MASTER# BLOCK-REFERRER: http://astalavista.box.sk/
+www.crazypopups.com
+#MASTER# DONT-VERIFY: Opera's list of banners to load (XML)
+/scripts/cms/xcms.asp
+#MASTER# BLOCK-REFERRER: http://www.searchking.com/servlet/SearchKing?at=search&keyword=google+owns+you&but1.x=0&but1.y=0
+www.searchking.com/skbanners/
+www.searchking.com:443
+#MASTER# BLOCK-REFERRER: http://www.dshield.org/dshieldmovie.php
+www.dshield.org/.*anner.gif
+#MASTER# REMARKS: #MASTER# BLOCK-REFERRER: http://www.msnbc.com/news/880835.asp?cp1=1
+#MASTER# REMARKS: di.image.eshop.msn.com
+#MASTER# BLOCK-REFERRER: http://www.nytimes.com/2003/12/18/politics/campaigns/18BRAU.html?hp
+xlonhcld.xlontech.net/
+
+#----------------------------------------------------------------------------
+# JavaScripts for ad and popup generation
+#----------------------------------------------------------------------------
+#MASTER# BLOCK-REFERRER: http://www.britannica.com/
+www.britannica.com/marketing/
+#MASTER# BLOCK-REFERRER: http://www.planetgamecube.com/
+mediamgr.ugo.com
+#MASTER# BLOCK-REFERRER: http://www.ebookers.fr
+#MASTER# REMARKS: Unanimis Advertising
+awrz.net/
+#MASTER# BLOCK-REFERRER: http://www.chip.de/artikel/c_artikelunterseite_10423683.html
+pagead*.googlesyndication.com/.*\.js
+a.tfag.de/js.ng/
+#MASTER# BLOCK-REFERRER: http://www.nbc4.com/news/2672416/detail.html
+y.nbc4.com/js.ng
+y.ibsys.com/event.ng/
 
 #############################################################################
 # Generic block-as-image patterns:
 
 #############################################################################
 # Generic block-as-image patterns:
@@ -571,10 +686,24 @@ images.sourceforge.net/images/DB2powered.gif
 {+block-as-image}
 #MASTER# BLOCK-REFERRER: http://experts-exchange.com/os2gen/
 /.*adimage\.(php|cgi)
 {+block-as-image}
 #MASTER# BLOCK-REFERRER: http://experts-exchange.com/os2gen/
 /.*adimage\.(php|cgi)
+#MASTER# BLOCK-REFERRER: http://flashhentai.com/Tgp/28-09-2002/index4.html
+#MASTER# BLOCK-REFERRER: http://www.thughosting.com/www/ixix/a912/912s2.html
+#MASTER# BLOCK-REFERRER: http://www.fantasiegirl.com/cumshots/3/spunkpatrolgirl302.htm
+#MASTER# BLOCK-REFERRER: http://www.asianuncut.com/asian2/sep5628.html
+#MASTER# BLOCK-REFERRER: http://www.tatgirls.com/gals/redhot-2/kitty-carl/lb10.html
+#MASTER# BLOCK-REFERRER: http://www.cream-porn.com/1/hard/29/02.html
+/.*recips?/
+#MASTER# BLOCK-REFERRER: http://www.paroles.net/texte/10818
+/bandeaux/
+#MASTER# BLOCK-REFERRER: http://www.usatoday.com/
+/sponsors/.*\.gif
 
 #############################################################################
 # Site-specific block-as-image patterns:
 #############################################################################
 
 #############################################################################
 # Site-specific block-as-image patterns:
 #############################################################################
+#----------------------------------------------------------------------------
+# Banner farms:
+#----------------------------------------------------------------------------
 #MASTER# BLOCK-REFERRER: http://www.cnn.com/
 #MASTER# BLOCK-REFERRER: http://www.aol.com/
 ar.atwola.com 
 #MASTER# BLOCK-REFERRER: http://www.cnn.com/
 #MASTER# BLOCK-REFERRER: http://www.aol.com/
 ar.atwola.com 
@@ -585,27 +714,24 @@ ar.atwola.com
 #MASTER# BLOCK-REFERRER: http://www.theinquirer.net/
 netcomm.spinbox.net
 #MASTER# BLOCK-REFERRER: http://www.joecartoon.com/
 #MASTER# BLOCK-REFERRER: http://www.theinquirer.net/
 netcomm.spinbox.net
 #MASTER# BLOCK-REFERRER: http://www.joecartoon.com/
-servedby.advertising.com
-#MASTER# BLOCK-REFERRER: http://hwww.yahoo.com/
+.*servedby.advertising.com
+#MASTER# BLOCK-REFERRER: http://www.yahoo.com/
 .a.yimg.com/(?:(?!/i/).)*$
 .a[0-9].yimg.com/(?:(?!/i/).)*$
 .a.yimg.com/(?:(?!/i/).)*$
 .a[0-9].yimg.com/(?:(?!/i/).)*$
-.yimg.com/.*/a/
-.yimg.com/.*/flash/promotions
+.yimg.com/(.*/)?a/
+.yimg.com/.*/(flash|java)/promotions
+.yimg.com/a/.*/flash/
+#MASTER# BLOCK-REFERRER: http://freeshells.linuxhelpnetwork.net/
+.yimg.com/.*/justdeals
 #MASTER# BLOCK-REFERRER: http://www.kostenlos.de/
 werbung.guj.de
 #MASTER# DONT-VERIFY
 bs*.gsanet.com
 bs*.einets.com
 #MASTER# BLOCK-REFERRER: http://www.kostenlos.de/
 werbung.guj.de
 #MASTER# DONT-VERIFY
 bs*.gsanet.com
 bs*.einets.com
-#MASTER# DONT-VERIFY (Opera browser built-in ads)
+#MASTER# DONT-VERIFY 
 .qkimg.net
 .qkimg.net
-/scripts/cms/xcms.asp
 #MASTER# BLOCK-REFERRER: http://www.sevac.com/
 .sexcounter.
 #MASTER# BLOCK-REFERRER: http://www.sevac.com/
 .sexcounter.
-#MASTER# BLOCK-REFERRER: http://www.asahi.com/
-www.asahi.com/(.*/)?ad/
-#MASTER# BLOCK-REFERRER: http://www.travelocity.com/Vacations/0,,TRAVELOCITY||Y,00.html?HPTRACK=mpc_vac
-#MASTER# BLOCK-REFERRER: http://dest.travelocity.com/DestGuides/geo_frontdoor/0,,TRAVELOCITY,00.html?HPTRACK=icon_dest
-.travelocity./Sponsor_gifs/
 #MASTER# DONT-VERIFY
 #MASTER# REMARKS: Bannerfarms used by grokster and others:
 james.adbutler.de
 #MASTER# DONT-VERIFY
 #MASTER# REMARKS: Bannerfarms used by grokster and others:
 james.adbutler.de
@@ -616,8 +742,6 @@ gkas.de/affilinet
 cashformel.com/web-sponsor
 www.cash4banner.com/web-sponsor
 213.221.106.162
 cashformel.com/web-sponsor
 www.cash4banner.com/web-sponsor
 213.221.106.162
-#MASTER# BLOCK-REFERRER: http://www.ebay.com
-pics.ebay.com/aw/pics/homepage/big8
 #MASTER# BLOCK-REFERRER: http://www.falk-online.de/index.jsp
 #MASTER# REMARKS: ad*.adsolution.de
 62.26.220.2
 #MASTER# BLOCK-REFERRER: http://www.falk-online.de/index.jsp
 #MASTER# REMARKS: ad*.adsolution.de
 62.26.220.2
@@ -627,57 +751,256 @@ pics.ebay.com/aw/pics/homepage/big8
 #MASTER# REMARKS: both exist and are banner farms
 www.bannermania.nom.pl
 magic.koti.com.pl/cgi-magic/banner_img.cgi
 #MASTER# REMARKS: both exist and are banner farms
 www.bannermania.nom.pl
 magic.koti.com.pl/cgi-magic/banner_img.cgi
-#MASTER# BLOCK-REFERRER: http://www.linuxdot.org/cgi-bin/columns.cgi?id=26
-naturalismedicina.com/cgibin/linswap
-#MASTER# BLOCK-REFERRER: http://www.dhtmlplanet.com/
-statse.webtrendslive.com
-#MASTER# BLOCK-REFERRER: http://www.versiontracker.com/
-#MASTER# REMARKS: 1) Used on many sites 2) URLs don't _end_ in .gif, hence +imageblock
-spinbox.versiontracker.com/.*\.gif
 #MASTER# BLOCK-REFERRER: http://educ8search.tripod.com/hacksoft.html
 #MASTER# REMARKS: Counter
 .netscape.com/c\.cgi\?
 #MASTER# BLOCK-REFERRER: http://educ8search.tripod.com/hacksoft.html
 #MASTER# REMARKS: Counter
 .netscape.com/c\.cgi\?
-#MASTER# BLOCK-REFERRER: http://privacy.net/analyze/
-a.consumer.net
 #MASTER# BLOCK-REFERRER: http://mycroft.mozdev.org/
 #MASTER# REMARKS: Counter
 m[0-9].nedstatbasic.net
 #MASTER# BLOCK-REFERRER: http://salon.com/
 #MASTER# BLOCK-REFERRER: http://mycroft.mozdev.org/
 #MASTER# REMARKS: Counter
 m[0-9].nedstatbasic.net
 #MASTER# BLOCK-REFERRER: http://salon.com/
+#MASTER# BLOCK-REFERRER: http://maps.yahoo.com/
 #MASTER# REMARKS: Banner farms; just exclude their corp. info
 #MASTER# REMARKS: Banner farms; just exclude their corp. info
-[a-v,x-z]*.atdmt.com/
+[a-vx-z]*.atdmt.com/
+#MASTER# BLOCK-REFERRER: http://f1.racing-live.com/en/
+.akamai.net/.*f1-live\.com/.*pub
+#MASTER# BLOCK-REFERRER: http://www.melodysoft.com/cgi-bin/foro.cgi
+tracker.tradedoubler.com
+#MASTER# BLOCK-REFERRER: http://dlh.net/german.html
+imp*.tradedoubler.com
+#MASTER# BLOCK-REFERRER: http://www.physlink.com/Education/AskExperts/ae353.cfm
+/.*affiliate.*120x90
+#MASTER# BLOCK-REFERRER:  http://www.amayita.com/imagenes/index.php?currDir=./Hall_of_Fame&pageType=image&image=img_0265.jpg
+www.spanishbanner.com/cgi/bserve.cgi
+#MASTER# BLOCK-REFERRER: http://www.macgamer.com/
+.qksrv.net
+#MASTER# BLOCK-REFERRER: http://www.drudgereport.com/
+#MASTER# BLOCK-REFERRER: http://www.rpmseek.com/index.html
+#MASTER# BLOCK-REFERRER: http://www.funnyjunk.com/pages/cooties.htm
+.instacontent.net/fastclick/
+#MASTER# BLOCK-REFERRER: http://www.macnn.com/
+kermit.macnn.com/
+#MASTER# BLOCK-REFERRER: http://www.sdtimes.com/news/
+www.sdtimes.com/phpads
+#MASTER# BLOCK-REFERRER: http://www.pagesjaunes.fr/pj.cgi?
+www.pagesjaunes.fr/EDITO/FR/images/barre_partenaires.gif
+#MASTER# BLOCK-REFERRER: http://www.allocine.fr/
+.allocine.fr/.*/logo_partenaire/
+#MASTER# BLOCK-REFERRER: http://www.virtual-hideout.net/guides/psu_relay_timer_mod/index.shtml
+www.virtual-hideout.net/sponsors/
+#MASTER# BLOCK-REFERRER: http://www.the-underdogs.org/featured.php
+?.websponsors.com/
+#MASTER# BLOCK-REFERRER: http://www.globalseeker.com/freesamples/
+quinst.com/images
+#MASTER# BLOCK-REFERRER: http://www.newsmax.com/archives/articles/2003/11/20/185048.shtml
+ad*.fameleads.com
+#MASTER# BLOCK-REFERRER: http://www.imdb.com/
+ia.imdb.com/.*(\.swf|[0-9]\.(gif|jpg))
+#MASTER# BLOCK-REFERRER: http://www.paroles.net/texte/10818
+.[a-vx-z]*.comclick.com/
+#MASTER# BLOCK-REFERRER: http://freemail.web.de/
+#MASTER# BLOCK-REFERRER: http://www.nytimes.com/2003/11/19/politics/19DEAN.html?ex=1069822800&en=dc82dfff0502faeb&ei=5062&partner=GOOGLE
+.as*.falkag.
+#MASTER# BLOCK-REFERRER: http://www.macnn.com/news/18944
+a.tribalfusion.com/
+#MASTER# BLOCK-REFERRER: http://reviews.infosyncworld.com/palmos/featured/index.html?start=1&offset=10
+.instacontent.net/adcouncil/
+.adserver.com/
+#MASTER# BLOCK-REFERRER: http://computers.cnet.com/hardware/0-1027-404-20857400.html?tag=rev
+#MASTER# REMARKS: Pointdexter
+.ru4.com/
+#MASTER# BLOCK-REFERRER: http://arstechnica.com/
+content.ad-flow.com/
+#MASTER# BLOCK-REFERRER: http://www.boursorama.com/infos/actualites/detail_actu_marches.phtml?news=1510287
+www.smartadserver.com/
+#MASTER# BLOCK-REFERRER: http://www.dn.se/hund
+www.flashbanner.no/
+#MASTER# BLOCK-REFERRER: http://abcnews.go.com/sections/us/GoodMorningAmerica/scottpeterson030509.html
+.akamai.net/.*/adinterax.com/
+#MASTER# BLOCK-REFERRER: http://www.chez.tiscali.fr/
+admedia.tiscali.
+pub.chez.com/
+#MASTER# DONT-VERIFY
+#MASTER# REMARKS: Bannerfarm used by Morpheus file sharing software
+jmcms.cydoor.com/
+#MASTER# BLOCK-REFERRER: http://www.ecranbureau.com/
+www.allosponsor.com/images/ban
+#MASTER# BLOCK-REFERRER: http://www.tech-report.com/etc/2003q2/3dmurk03/index.x?pg=7
+#MASTER# REMARKS: Netshelter.com farm
+.adtrix.com
+#MASTER# BLOCK-REFERRER: http://discussion.brighthand.com/forumdisplay.php?s=fee44a5b2a6fc2e9e79d6472bc8fbe94&forumid=197
+*[0-9].tribalfusion.com/
+#MASTER# BLOCK-REFERRER: http://www.sf.net/
+ads.osdn.com/?ad
+#MASTER# BLOCK-REFERRER: http://www.nytimes.com/
+kt*.kliptracker.com/
+gfx.dvlabs.com/klipmart/
+
+#----------------------------------------------------------------------------
+# Cross-site user tracking
+#----------------------------------------------------------------------------
+#MASTER# BLOCK-REFERRER: http://os2.ru/
+.*.*.spylog.com/
+#MASTER# BLOCK-REFERRER: http://www.dhtmlplanet.com/
+statse.webtrendslive.com
+#MASTER# BLOCK-REFERRER: http://www.versiontracker.com/
+#MASTER# REMARKS: 1) Used on many sites 2) URLs don't _end_ in .gif, hence +imageblock
+spinbox.versiontracker.com/.*\.(gif|jpg)
+#MASTER# BLOCK-REFERRER: http://mycroft.mozdev.org/
+stat.onestat.com
+#MASTER# BLOCK-REFERRER: http://www.global.net.uk/
+.[a-vx-z]*.tradedoubler.com
+#MASTER# BLOCK-REFERRER: http://www.sharepoint.boo.pl/
+stat.webmedia.pl/
+#MASTER# BLOCK-REFERRER: http://www.asp-php.net/index.php
+log*.xiti.com/
+log*.hit-parade.com/
+#MASTER# BLOCK-REFERRER: http://www.msnbc.com/news/884810.asp?0si=-&cp1=1
+www.xml.eshop.msn.com/tracksponsorimpression.asp
+#MASTER# BLOCK-REFERRER: http://www.washingtonpost.com/
+stats.surfaid.ihost.com/(crc/)?images/(bounce/)?uc.GIF
+#MASTER# BLOCK-REFERRER: http://www.planetgamecube.com/
+.imrworldwide.com
+
+#----------------------------------------------------------------------------
+# Specific counters (see above for generic patterns)
+#----------------------------------------------------------------------------
+#MASTER# BLOCK-REFERRER: http://www.distrowatch.com/table.php?distribution=linex
+s*.sitemeter.com/meter\.asp
+#MASTER# BLOCK-REFERRER: http://personales.mundivia.es/lbouza/
+fastcounter.bcentral.com/
+#MASTER# BLOCK-REFERRER: http://osnews.com/
+bilbo.counted.com/
+#MASTER# BLOCK-REFERRER: http://www.slovio.com/
+ww2.fce.vutbr.cz/bin/counter.gif
+#MASTER# BLOCK-REFERRER: http://enciclopedia.us.es/
+p[0-9].nedstatbasic.net/
+#MASTER# BLOCK-REFERRER: http://www.vencor.narod.ru/films/inolv.htm
+bs.yandex.ru/count/
+
+#----------------------------------------------------------------------------
+# On-site ads and other single sources:
+#----------------------------------------------------------------------------
+#MASTER# BLOCK-REFERRER: http://www.fotw.net/flags/
+www.fotw.net/images/linea2.gif
+#MASTER# BLOCK-REFERRER: http://www.asahi.com/
+www.asahi.com/(.*/)?ad/
+#MASTER# BLOCK-REFERRER: http://www.travelocity.com/Vacations/0,,TRAVELOCITY||Y,00.html?HPTRACK=mpc_vac
+#MASTER# BLOCK-REFERRER: http://dest.travelocity.com/DestGuides/geo_frontdoor/0,,TRAVELOCITY,00.html?HPTRACK=icon_dest
+.travelocity./Sponsor_gifs/
+#MASTER# BLOCK-REFERRER: http://www.ebay.com
+pics.ebay.com/aw/pics/homepage/big8
+#MASTER# BLOCK-REFERRER: http://www.linuxdot.org/cgi-bin/columns.cgi?id=26
+naturalismedicina.com/cgibin/linswap
+#MASTER# BLOCK-REFERRER: http://privacy.net/analyze/
+a.consumer.net
 #MASTER# BLOCK-REFERRER: http://www.deviantart.com/
 images.deviantart.com/affiliates/
 images.deviantart.com/shared/(winzip|trillian)\.gif
 #MASTER# BLOCK-REFERRER: http://www.deviantart.com/
 images.deviantart.com/affiliates/
 images.deviantart.com/shared/(winzip|trillian)\.gif
+#MASTER# BLOCK-REFERRER: http://www.happypuppy.com/
+www.happypuppy.com/newstuff/netsys\.swf
+www.happypuppy.com/images/[^/]+\.gif
+www.happypuppy.com/images/sav_creative/savage_01.jpg
+www.happypuppy.com/images/site/cnb_but_nav.gif
 #MASTER# DONT-VERIFY
 #MASTER# REMARKS: Referenced from HTML-Emails
 .weather.com/creatives/
 .weather.com/web/services/email/
 #MASTER# DONT-VERIFY
 #MASTER# REMARKS: Referenced from HTML-Emails
 .weather.com/creatives/
 .weather.com/web/services/email/
-
-#############################################################################
-# Generic unblockers to narrow the side effects of the generic blockers:
-#############################################################################
-{-block}
-#MASTER# DONT-VERIFY (generic)
-
-# By host:
-#
-adsl.
-ad[ud]*.
-advice.
-.edu
-.ac.uk
-.uni-*.de
-.*load*.
-
-# By path:
-#
-/.*ad(sl|v(i[cs]|an|ertencia|entu)) # advice/advisories/advan*/advertencia (spanish)
-/.*((up|down)lo|p?thre|he|d|gr|l|ro)ads
-/.*account
+#MASTER# BLOCK-REFERRER: http://www.mapblast.com/
+:81/feeds/
+x.mycity.com
+#MASTER# BLOCK-REFERRER: http://gamespot.com/gamespot/filters/0,10850,6013548,00.html
+/.*/topslots/topslot_
+#MASTER# BLOCK-REFERRER: http://maccentral.macworld.com/
+maccentral.macworld.com/images/subsad
+#MASTER# BLOCK-REFERRER: http://bigcharts.marketwatch.com/
+a.mktw.net
+#MASTER# BLOCK-REFERRER: http://www.happypuppy.com/win/
+www.happypuppy.com/images/sav_creative
+#MASTER# BLOCK-REFERRER: http://www.wral.com/
+images.ibsys.com/.*/sponsors/
+#MASTER# BLOCK-REFERRER: http://www.usatoday.com/money/economy/fed/2002-09-23-bubble-debate_x.htm
+www.usatoday.com/sponsors/
+#MASTER# BLOCK-REFERRER: http://www.jpost.com/
+ads.jpost.com
+#MASTER# BLOCK-REFERRER: http://www.jpost.com/servlet/Satellite?pagename=JPost/A/JPArticle/ShowFull&cid=1038889003183
+/.*/images/\d+/promos/
+#MASTER# BLOCK-REFERRER: http://astalavista.box.sk/
+www.subteran.ro/adult/adult20.jpg
+#MASTER# BLOCK-REFERRER: http://www.kuro5hin.org/
+#www.kuro5hin.org/images/[^/]+\.gif
+#MASTER# BLOCK-REFERRER: http://www.uolsinectis.com.ar/
+ad.uol.com.br
+#MASTER# BLOCK-REFERRER: http://www.spammimic.com/credits.shtml
+www.anonymizer.com/images/affiliate/
+#MASTER# BLOCK-REFERRER: http://cracks.thebugs.ws/pages/H/7.shtml
+img.thebugs.ws
+#MASTER# BLOCK-REFERRER: http://www.kinghost.com/fetish/xworx/Azian/nextdoor/06/realm.html
+www.kinghost.com/ban/
+#MASTER# BLOCK-REFERRER: http://www.infoempleo.com/
+www.infoempleo.com/(pop-up|images(/Nueva/banner_|/motor))
+#MASTER# BLOCK-REFERRER: http://www.hardocp.com/
+hera.hardocp.com/
+#MASTER# BLOCK-REFERRER: http://www.slovio.com/
+www.slovio.com/1/signs/(66|120)
+#MASTER# BLOCK-REFERRER: http://www.usatoday.com/
+images.usatoday.com/.*promo
+images.usatoday.com/shop 
+#MASTER# BLOCK-REFERRER: http://www.free.fr/
+www.free.fr/img_une
+www.free.fr/promos
+#MASTER# BLOCK-REFERRER: http://people.aol.com/
+i.timeinc.net/sponsors
+#MASTER# BLOCK-REFERRER: http://www.watch.impress.co.jp/akiba/hotline/20021221/ballpc.html
+ngs.impress.co.jp/image.ng
+#MASTER# BLOCK-REFERRER: http://forums2.warcry.com/forum.phtml?f=69
+ims.warcry.com/scripts/ims/skyscrapers
+#MASTER# BLOCK-REFERRER: http://www.mapquest.com/directions/main.adp?go=1&do=nw&ct=NA&1y=US&1a=255+w+88+st&1p=&1c=&1s=&1z=10024&2y=US&2a=20+milltown+rd&2p=&2c=&2s=&2z=10509&lr=2
+cdn.mapquest.com/mqhome/toy_
+www.sunbelt-software.com/cfbanners/
+#MASTER# BLOCK-REFERRER: http://www.chip.de/
+195.27.236.226/
+#MASTER# BLOCK-REFERRER: http://astalavista.box.sk/
+astalavista.box.sk/adult.*\.jpg
+.box.sk/(468x60|120x600|hbb)
+#MASTER# BLOCK-REFERRER: http://www.investorguide.com
+www.investorguide.com/ad_
+#MASTER# BLOCK-REFERRER: http://www.ig.com.br/
+image.ig.com.br/gn/modulos/
+image.ig.com.br/v5/flash/ig_br/flash\.swf
+#MASTER# BLOCK-REFERRER: http://www.bol.com.br/
+b.i.bol.com.br/b/catho/a_
+#MASTER# BLOCK-REFERRER: http://news.independent.co.uk/world/australasia/story.jsp?story=381080
+www.independent.co.uk/img/commercial/
+#MASTER# BLOCK-REFERRER: http://groups.yahoo.com/group/epdf/
+a.rn11.com/
+#MASTER# BLOCK-REFERRER: http://www.planetgamecube.com/
+www.planetgamecube.com/ad.swf
+#MASTER# BLOCK-REFERRER: http://www.dinside.no/
+www.dinside.no/annonsorer/
+#MASTER# BLOCK-REFERRER: http://www.computrabajo.es/
+www.computrabajo.es/imagenes/publicidad/
+#MASTER# BLOCK-REFERRER: http://www.boursorama.com/
+www.boursorama.com/pub/
+#MASTER# BLOCK-REFERRER: http://www.baquia.com/com/20020416/art00010.html
+www.baquia.com/imagenes/pub/
+#MASTER# BLOCK-REFERRER: http://www.aint-it-cool-news.com/display.cgi?id=15348
+www.aintitcool.com/foxsearchlight/
+#MASTER# BLOCK-REFERRER: http://www.diabloii.net
+etype.adbureau.net/
+rcm-images.amazon.com/
+#MASTER# BLOCK-REFERRER: http://millionaire.itv.com/millionaire/game/freegame/nq-anytime/anytimeset.html
+millionaire.itv.com/.*/assets/
+www.digitoday.fi/services/
+#MASTER# BLOCK-REFERRER: http://www.heise.de/
+#MASTER# BLOCK-REFERRER: http://www.spiegel.de/
+/RealMedia/ads/
 
 #############################################################################
 # Site-specific unblockers:
 #############################################################################
 
 #############################################################################
 # Site-specific unblockers:
 #############################################################################
+{-block}
+#MASTER# UNBLOCK-REFERRER: http://www.faqs.org/
+www.faqs.org/banner\.html
 #MASTER# UNBLOCK-REFERRER: http://bannerblind.mozdev.org/
 bannerblind.mozdev.org
 #MASTER# UNBLOCK-REFERRER: http://advogato.org/
 #MASTER# UNBLOCK-REFERRER: http://bannerblind.mozdev.org/
 bannerblind.mozdev.org
 #MASTER# UNBLOCK-REFERRER: http://advogato.org/
@@ -715,6 +1038,125 @@ www.gnome.org
 .nycsubway.org/img/banner
 #MASTER# UNBLOCK-REFERRER: http://www.hellug.gr
 ads.hellug.gr
 .nycsubway.org/img/banner
 #MASTER# UNBLOCK-REFERRER: http://www.hellug.gr
 ads.hellug.gr
+#MASTER# UNBLOCK-REFERRER: http://www.ebgames.com/ebx/ads/promos/bargainbin/pc/
+www.ebgames.com/ebx/ads/promos/
+#MASTER# UNBLOCK-REFERRER: http://www.forgotten-ny.com/ADS/manhattanads/moremahnattan.html
+www.forgotten-ny.com/ADS/
+#MASTER# UNBLOCK-REFERRER: http://bricolage.thepirtgroup.com/docs/Bric/AdvTemplates.html
+/.*/AdvTemplates.html
+#MASTER# UNBLOCK-REFERRER: http://counter.li.org
+counter.li.org
+#MASTER# UNBLOCK-REFERRER: http://adrian.adrian.org/
+adrian.adrian.org
+#MASTER# UNBLOCK-REFERRER: http://www.tompaine.com/op_ads/
+www.tompaine.com/op_ads/
+#MASTER# UNBLOCK-REFERRER: http://adela.karlin.mff.cuni.cz/
+adela.karlin.mff.cuni.cz
+#MASTER# UNBLOCK-REFERRER: http://www.swcp.com/rtoads/printmag/issue3/neg_data.html
+www.swcp.com/rtoads/
+#MASTER# UNBLOCK-REFERRER: http://www.privoxy.org/actions/index.php
+#MASTER# REMARKS: Don't block our own feedback process, even if the
+#MASTER# REMARKS: parameters contain block patterns
+www.privoxy.org
+#MASTER# UNBLOCK-REFERRER: http://sourceforge.net/help/tracker.php
+sourceforge.net/.*tracker
+#MASTER# UNBLOCK-REFERRER: http://www.brawnylads.com/
+www.brawnylads.com
+#MASTER# UNBLOCK-REFERRER: http://www.artbrokerage.com/ads/ads2.htm
+www.artbrokerage.com/ads/
+#MASTER# UNBLOCK-REFERRER: http://www.tivoli.com/support/storage_mgr/
+www.tivoli.com/support/storage_mgr/adsercli.htm
+#MASTER# UNBLOCK-REFERRER: http://www.acm.org/siggroup/
+www.acm.org
+#MASTER# UNBLOCK-REFERRER: http://www.motel6.com/
+www.motel6.com/maps/detailmap_tracker.asp
+#MASTER# UNBLOCK-REFERRER: http://adzapper.sourceforge.net/
+adzapper.
+#MASTER# UNBLOCK-REFERRER: http://de.altavista.com/web/adv
+.altavista.com/web/adv
+#MASTER# UNBLOCK-REFERRER: http://rads.mcafee.com/rads/scripts/RADS.dll?QueryProduct2
+rads.mcafee.com/rads/
+#MASTER# UNBLOCK-REFERRER: http://linuxfromscratch.org/cgi-bin/lfscounter.cgi
+linuxfromscratch.org/cgi-bin/lfscounter.cgi
+#MASTER# UNBLOCK-REFERRER: http://www.wholetomato.com/
+www.wholetomato.com/images/banner.jpg
+#MASTER# UNBLOCK-REFERRER: http://dv411.com/advc50.html
+dv411.com/advc50.html
+#MASTER# UNBLOCK-REFERRER: http://www.freeswan.org/freeswan_trees/freeswan-1.98b/doc/adv_config.html
+www.freeswan.org/freeswan_trees/freeswan-1.98b/doc/adv_config.html
+#MASTER# UNBLOCK-REFERRER: http://www.percom.org/
+www.percom.org/banner.html
+#MASTER# UNBLOCK-REFERRER: http://www.aaai.org/Magazine/Departments/calendar.html
+www.aaai.org/Graphics/Banners/
+#MASTER# UNBLOCK-REFERRER: http://www.arm.com/support/ads_faq?OpenDocument&ExpandSection=11
+www.arm.com/.*ads
+#MASTER# UNBLOCK-REFERRER: http://www.anybrowser.org/campaign/
+www.anybrowser.org/.*banner
+#MASTER# UNBLOCK-REFERRER: http://www.tads.org/
+www.tads.org/
+#MASTER# UNBLOCK-REFERRER: http://www.mbe.com/redir/packtrack.asp
+www.mbe.com/redir/packtrack.asp
+www.iship.com/trackit/
+#MASTER# UNBLOCK-REFERRER: http://www.newegg.com/
+www.newegg.com/track.asp
+#MASTER# UNBLOCK-REFERRER: http://kt.aspseek.org/
+kt.aspseek.org/adv.html
+#MASTER# UNBLOCK-REFERRER: http://www.esis.com.au/AdvSerialCards/Firewire.htm
+www.esis.com.au/AdvSerialCards
+#MASTER# UNBLOCK-REFERRER: http://www.familysearch.org/
+www.familysearch.org/.*banner
+#MASTER# UNBLOCK-REFERRER: http://coder.com/
+coder.com/creations/banner/
+#MASTER# UNBLOCK-REFERRER: http://arnolds.dhs.org/static/adv_tools.html
+arnolds.dhs.org/static/adv_tools.html
+#MASTER# UNBLOCK-REFERRER: http://www.ibm.com/
+www-3.ibm.com/software/ad/
+#MASTER# UNBLOCK-REFERRER: http://www.gpl.org/
+www.gpl.org/TLCimages2/banner2.gif
+#MASTER# UNBLOCK-REFERRER: http://europa.eu.int/yourvoice/
+europa.eu.int
+#MASTER# UNBLOCK-REFERRER: http://www.schooner.com/~loverso/no-ads/
+www.schooner.com/~loverso/no-ads/
+#MASTER# UNBLOCK-REFERRER: http://www.debka.com/
+ad.debka.com/(css|images)
+#MASTER# UNBLOCK-REFERRER: http://www.directv.com/DTVAPP/index.jsp
+#MASTER# REMARKS: Yuck!
+realmedia*./.*/DIRECTV/
+www.directv.com/includes/jvs/BannerHome.js
+oascentral.directv.com/
+#MASTER# UNBLOCK-REFERRER: http://source.bungie.org/
+source.bungie.org/
+#MASTER# UNBLOCK-REFERRER: http://adonthell.linuxgames.com/
+adonthell.linuxgames.com/
+#MASTER# UNBLOCK-REFERRER: http://www.meine-erste-homepage.com/bannergenerator/formbanner.php
+www.meine-erste-homepage.com/bannergenerator/
+#MASTER# UNBLOCK-REFERRER: http://www.france-histoire.com/russie/visarussie.htm
+www.france-histoire.com/russie/ad/uts.htm
+#MASTER# UNBLOCK-REFERRER: http://news.bbc.co.uk/furniture/chinese/banner/bbccantonese_600.gif
+#MASTER# REMARKS: Banner-free site(s).
+.bbc.co.uk/
+#MASTER# UNBLOCK-REFERRER: http://www.eclipse.org
+www.eclipse.org/banner\.html
+#MASTER# UNBLOCK-REFERRER: http://www.egads.com/
+.egads.com/
+#MASTER# UNBLOCK-REFERRER: http://adc.netlabs.org/
+adc.netlabs.org/
+#MASTER# UNBLOCK-REFERRER: http://www.tela.bc.ca/tads/authoring/multimedia-tads-docs/latin2.htm
+www.tela.bc.ca/tads/
+#MASTER# UNBLOCK-REFERRER: http://adbusters.org/information/
+adbusters.org/
+#MASTER# UNBLOCK-REFERRER: http://www.eads.com/
+#MASTER# UNBLOCK-REFERRER: http://www.eads.net/
+#MASTER# UNBLOCK-REFERRER: http://www.eads.de/
+.eads.*/
+#MASTER# UNBLOCK-REFERRER: http://www.qualcomm.com/brew/developer/resources/ad/documentation.html 
+www.qualcomm.com/brew/developer/resources/ad/
+#MASTER# UNBLOCK-REFERRER: http://www.tomshardware.com/storage/20031001/index.html
+www.ad.tomshardware.com/cgi-bin/logo2.m?
+#MASTER# UNBLOCK-REFERRER:  http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=2959829594&category=30018#ebayphotohosting
+.ebayimg.com/
+#MASTER# UNBLOCK-REFERRER: http://www.baycitybaptist.org/
+www.baycitybaptist.org/images/Banner.jpg
 
 #############################################################################
 # Site-specific special rules:
 
 #############################################################################
 # Site-specific special rules:
@@ -727,6 +1169,7 @@ ads.hellug.gr
 {fragile}
 .office.microsoft.com
 .windowsupdate.microsoft.com
 {fragile}
 .office.microsoft.com
 .windowsupdate.microsoft.com
+.apple.com
 
 #----------------------------------------------------------------------------
 # Shopping and banking sites - allow cookies and pop-ups
 
 #----------------------------------------------------------------------------
 # Shopping and banking sites - allow cookies and pop-ups
@@ -740,11 +1183,24 @@ ads.hellug.gr
 .overclockers.co.uk
 .deutsche-bank-24.de
 .db24.de
 .overclockers.co.uk
 .deutsche-bank-24.de
 .db24.de
+.deutsche-bank.de
 .ebay.
 .mobile.de
 .ebay.
 .mobile.de
+www.fondationlejeu.com
+www.techtv.com
+.mywebgrocer.com
 
 #----------------------------------------------------------------------------
 
 #----------------------------------------------------------------------------
-# These sites require pop-ups
+# Subscription sites (with credible privacy policy) - allow permanent cookies
+#----------------------------------------------------------------------------
+{-session-cookies-only}
+#MASTER# PROBLEM-URL: http://www.nytimes.com/auth/login
+.nytimes.com/
+#MASTER# PROBLEM-URL: http://www.volkskrant.nl/
+.volkskrant.nl/
+
+#----------------------------------------------------------------------------
+# These sites require pop-ups, so don't use the unconditional filters.
 #----------------------------------------------------------------------------
 {allow-popups}
 #MASTER# PROBLEM-URL: http://www.aprilbarrows.com/discography.html
 #----------------------------------------------------------------------------
 {allow-popups}
 #MASTER# PROBLEM-URL: http://www.aprilbarrows.com/discography.html
@@ -765,8 +1221,6 @@ www.reuters.com/news_article.jhtml
 www.xmms.org
 #MASTER# PROBLEM-URL: http://www.bild.de/
 .bild.t-online.de
 www.xmms.org
 #MASTER# PROBLEM-URL: http://www.bild.de/
 .bild.t-online.de
-#MASTER# PROBLEM-URL: http://klubwakacyjny.interia.pl/pytanie.html
-klubwakacyjny.interia.pl/pytanie.html
 #MASTER# PROBLEM-URL: http://www.m-w.com/cgi-bin/dictionary?book=Dictionary&va=cupel
 www.m-w.com
 #MASTER# PROBLEM-URL: http://www.pcbox.es/boxshop/catalogo/entrada.asp?centro=53
 #MASTER# PROBLEM-URL: http://www.m-w.com/cgi-bin/dictionary?book=Dictionary&va=cupel
 www.m-w.com
 #MASTER# PROBLEM-URL: http://www.pcbox.es/boxshop/catalogo/entrada.asp?centro=53
@@ -777,8 +1231,23 @@ www.hola.com/club/
 www.infoempleo.com
 #MASTER# PROBLEM-URL: http://www.netflix.com/
 www.netflix.com
 www.infoempleo.com
 #MASTER# PROBLEM-URL: http://www.netflix.com/
 www.netflix.com
+#MASTER# PROBLEM-URL: http://amnistiapornigeria.org/
+amnistiapornigeria.org
+#MASTER# PROBLEM-URL: http://ponteensupiel.org/index2.html
+ponteensupiel.org
+#MASTER# PROBLEM-URL: http://www.ifilm.com/ifilm/aicn
+www.ifilm.com/ifilm
+#MASTER# PROBLEM-URL: http://www.pogo.com/
+.pogo.com
+#MASTER# PROBLEM-URL: http://my.aol.com/
+my.aol.com
+#MASTER# PROBLEM-URL: http://www.cnn.com/
+#MASTER# REMARKS: Re-enable "Story Tools" i.e. printing, emailing etc.
+i.cnn.net/cnn/.*/clickability/button
+#MASTER# PROBLEM-URL: http://www.rosettaproject.org:8080/live/search/contribute/swadesh/view?ethnocode=SPN
+www.rosettaproject.org
 
 
-##----------------------------------------------------------------------------
+#----------------------------------------------------------------------------
 # Sometimes (i.e. often!) fast-redirects catches things by mistake
 #----------------------------------------------------------------------------
 {-fast-redirects}
 # Sometimes (i.e. often!) fast-redirects catches things by mistake
 #----------------------------------------------------------------------------
 {-fast-redirects}
@@ -807,50 +1276,94 @@ login.passport.com/logout\.(asp|srf)\?
 #MASTER# PROBLEM-URL: http://www.fileplanet.com
 download.com.com/redir\?
 www.fileplanet.com/redir\.asp\?
 #MASTER# PROBLEM-URL: http://www.fileplanet.com
 download.com.com/redir\?
 www.fileplanet.com/redir\.asp\?
-#MASTER# PROBLEM-URL: http://www.washingtonpost.com/
-.washingtonpost.com
+#MASTER# PROBLEM-URL: http://web.archive.org/web/19970715180251/http://www.gmd.de/
+web.archive.org
+#MASTER# PROBLEM-URL: http://cyber.law.harvard.edu/filtering/china/test/
+.edu
+#MASTER# PROBLEM-URL: http://web.archive.org
+.archive.org
+#MASTER# PROBLEM-URL: http://www.guenstiger.de/gt/link.asp?url=http://www.edv-supermarkt.de&source=produkt=238284&USID=00086443917155&hnr=2199&pnr=238284&ppr=158,00
+www.guenstiger.de
+#MASTER# PROBLEM-URL: http://anon.free.anonymizer.com/http://www.privoxy.org/
+.anonymizer.com
+#MASTER# PROBLEM-URL: http://www.mailtothefuture.com/public/logon?http://www.mailtothefuture.com/
+www.mailtothefuture.com
+#MASTER# PROBLEM-URL: http://support.microsoft.com/default.aspx?scid=KB;en-us;q219110
+support.microsoft.com/
+#MASTER# PROBLEM-URL: http://www.alexa.com/data/details/traffic_details?q=blogspot&url=http://www.blogalia.com
+www.alexa.com
+#MASTER# PROBLEM-URL: http://www.translate.ru/url/tran_url.asp?lang=es&url=http%3A%2F%2Fos2progg.by.ru%2Findex.shtml&direction=rs&template=General&cp1=NO&cp2=NO&autotranslate=on&transliterate=on&psubmit2.x=68&psubmit2.y=12
+www.translate.ru/url/
 
 #----------------------------------------------------------------------------
 
 #----------------------------------------------------------------------------
-# No filtering for sourcecode
+# No filtering for sourcecode or other automatically parsed content
 #----------------------------------------------------------------------------
 {-filter}
 #MASTER# PROBLEM-URL: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/current/
 cvs.
 #----------------------------------------------------------------------------
 {-filter}
 #MASTER# PROBLEM-URL: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/current/
 cvs.
+/.*(cvs(view|web)|viewcvs)
 #MASTER# PROBLEM-URL: http://liveupdate.symantec.com/ennlu.x86
 #MASTER# PROBLEM-URL: http://liveupdate.symantec.com/ennlu.x86
+#MASTER# REMARKS: Jeez, could you please stay with one of them?
 liveupdate.symantec.com
 liveupdate.symantec.com
+liveupdate.liveupdatesymantec.com
+liveupdate.symantecliveupdate.com
+#MASTER# PROBLEM-URL: http://www.bookmarklets.com/
+www.bookmarklets.com
+#MASTER# PROBLEM-URL: http://www.squarefree.com/bookmarklets/
+www.squarefree.com/bookmarklets/
+#MASTER# DONT-VERIFY
+#MASTER# REMARKS: Used by Mac OSX's automatic software update feature
+swquery.apple.com
+swscan.apple.com
+#MASTER# PROBLEM-URL: http://atl.speakeasy.net/300k
+#MASTER# REMARKS: These are various US DSL speed tests sites, where MIME is wrong
+.speakeasy.net/\d+k
+#MASTER# PROBLEM-URL: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=185033
+.debian.org
+#MASTER# DONT-VERIFY
+#MASTER# REMARKS: Popular bug-tracking system - likely to contain code
+bugzilla.
+.tldp.org
 
 #----------------------------------------------------------------------------
 # These sites suffer from a bug in PHP < 4.2.3 (ob_gzhandler broken;
 # workaround is to use zlib.output_compression):
 
 #----------------------------------------------------------------------------
 # These sites suffer from a bug in PHP < 4.2.3 (ob_gzhandler broken;
 # workaround is to use zlib.output_compression):
+# (Section obsolete as of Privoxy 3.0.3, which has workaround)
 #----------------------------------------------------------------------------
 #----------------------------------------------------------------------------
-{-prevent-compression}
+#{-prevent-compression}
 #MASTER# PROBLEM-URL: http://www.powie.de/
 #MASTER# PROBLEM-URL: http://www.powie.de/
-www.powie.de
+#www.powie.de
 #MASTER# PROBLEM-URL: http://www.phpcenter.de/
 #MASTER# PROBLEM-URL: http://www.phpcenter.de/
-www.phpcenter.de
-#MASTER# PROBLEM-URL: http://www.debianhelp.org/
-www.debianhelp.org
+#www.phpcenter.de
 #MASTER# PROBLEM-URL: http://www.timeanddate.com
 #MASTER# PROBLEM-URL: http://www.timeanddate.com
-www.timeanddate.com
+#www.timeanddate.com
 #MASTER# PROBLEM-URL: http://www.pclinuxonline.com/
 #MASTER# PROBLEM-URL: http://pclinuxonline.com/
 #MASTER# PROBLEM-URL: http://www.pclinuxonline.com/
 #MASTER# PROBLEM-URL: http://pclinuxonline.com/
-.pclinuxonline.com
-#MASTER# PROBLEM-URL: http://www.dhd24.com/
-www.dhd24.com
-#MASTER# PROBLEM-URL: http://www.linuxandmain.com/
-.linuxandmain.com
-#MASTER# PROBLEM-URL: http://www.ofb.biz/
-.ofb.biz
+#.pclinuxonline.com
 #MASTER# PROBLEM-URL: http://www.dungeoncrawl.org/
 #MASTER# PROBLEM-URL: http://www.dungeoncrawl.org/
-.dungeoncrawl.org
-#MASTER# PROBLEM-URL: http://www.deviantart.com/
-.deviantart.com
-#MASTER# PROBLEM-URL: http://www.planetspiele.de/wbboard/
-www.planetspiele.de/wbboard/
+#.dungeoncrawl.org
 #MASTER# PROBLEM-URL: http://www.digitalspy.co.uk/
 #MASTER# PROBLEM-URL: http://www.digitalspy.co.uk/
-www.digitalspy.co.uk
-#MASTER# PROBLEM-URL: http://www.dealnews.com/
-.dealnews.com   
+#www.digitalspy.co.uk
+#MASTER# PROBLEM-URL: http://www.audio-illumination.org/forums/
+#www.audio-illumination.org/forums/
+#MASTER# PROBLEM-URL: http://www.catchword.com/
+#www.catchword.com
+#MASTER# PROBLEM-URL: http://www.ubernet.org
+#www.ubernet.org
+#MASTER# PROBLEM-URL: http://www.ooodocs.org/
+#www.ooodocs.org
+#MASTER# PROBLEM-URL: http://www.ntcompatible.com/
+#www.ntcompatible.com
+#MASTER# PROBLEM-URL: http://www.winehq.com/
+#.winehq.com
+#MASTER# PROBLEM-URL: http://www.dotcomtod.de/
+#.dotcomtod.de/
+#MASTER# PROBLEM-URL: http://www.tweakers.net
+#.tweakers.net
+#MASTER# PROBLEM-URL: http://www.troublesathome.nl
+#.troublesathome.nl
+#MASTER# PROBLEM-URL: http://www.art.softshape.com
+#.art.softshape.com
 
 #----------------------------------------------------------------------------
 # The first frame of the gif animation is more useful here:
 
 #----------------------------------------------------------------------------
 # The first frame of the gif animation is more useful here:
@@ -868,6 +1381,73 @@ www.digitalspy.co.uk
 .max.de
 #MASTER# PROBLEM-URL: http://www.unmuseum.org/pirate.htm
 www.unmuseum.org
 .max.de
 #MASTER# PROBLEM-URL: http://www.unmuseum.org/pirate.htm
 www.unmuseum.org
+#MASTER# PROBLEM-URL: http://www.connected-media.com/riven/hints.htm
+www.connected-media.com/.*/hints\.htm
+#MASTER# PROBLEM-URL: http://www.pricegrabber.com/search_getprod.php?masterid=580330&zip_code=92840&found=1&ut=40a6c41f2c9d1244
+www.pricegrabber.com/search_getprod.php
+#MASTER# PROBLEM-URL: http://www.ebgames.com/ebx/categories/products/product.asp?pf_id=158422
+www.ebgames.com/ebx/.*/product.asp\?
+#MASTER# PROBLEM-URL: http://www.cnn.com/WORLD/
+#MASTER# REMARKS: URL-based filtering is enough here. 120x90 content images
+.cnn.com
+#MASTER# PROBLEM-URL: http://gamespot.com/gamespot/filters/0,10850,6013054,00.html
+#MASTER# REMARKS: 120x90 content images
+.gamespot.com/gamespot
+.cnet.com
+#MASTER# PROBLEM-URL: http://www.connected-media.com/riven/hint.htm
+www.connected-media.com/riven/
+#MASTER# PROBLEM-URL: http://www.wral.com/
+www.wral.com
+#MASTER# PROBLEM-URL: http://www.canada.com/calgary/
+www.canada.com
+#MASTER# PROBLEM-URL: http://www.theonionavclub.com
+www.theonionavclub.com
+#MASTER# PROBLEM-URL: http://www.lowermybills.com/servlet/LMBServlet?the_action=NavigateLongDistanceResults&sourceid=meweapu7att203500227&areacode=770&prefix=650&Go.x=23&Go.y=9
+#MASTER# REMARKS: Actually needs banners
+www.lowermybills.com
+#MASTER# PROBLEM-URL: http://www.theonionavclub.com
+www.theonionavclub.com
+#MASTER# PROBLEM-URL: http://www.care2.com/send/catbirthd1.html
+www.care2.com
+#MASTER# PROBLEM-URL: http://www.cartoonnetwork.com/
+www.cartoonnetwork.com/
+#MASTER# PROBLEM-URL: http://www.anybrowser.org/campaign/
+www.anybrowser.org
+#MASTER# PROBLEM-URL: http://images.google.de/images?q=cookie+monster&svnum=10&hl=de&lr=&ie=UTF-8&oe=UTF-8&start=40&sa=N
+images.google.
+#MASTER# PROBLEM-URL: http://www.local6.com/news/1821238/detail.html
+www.local6.com/
+#MASTER# PROBLEM-URL: http://www.pbs.org/wgbh/pages/roadshow/series/highlights/2003/albuquerque/index.html
+www.pbs.org/wgbh/pages/roadshow/series
+#MASTER# PROBLEM-URL: http://objects.povworld.org/cat/Toys/for_Adults/
+objects.povworld.org/cat/
+#MASTER# PROBLEM-URL: http://www.xach.com/gimp/tutorials/tiles.html
+www.xach.com/gimp/
+#MASTER# PROBLEM-URL: http://www.mapquest.com/directions/main.adp?go=1&do=nw&ct=NA&1y=US&1a=255+w+88+st&1p=&1c=&1s=&1z=10024&2y=US&2a=20+milltown+rd&2p=&2c=&2s=&2z=10509&lr=2
+#MASTER# REMARKS: The destination map at the bottom of the page.
+www.mapquest.com/directions/
+#MASTER# PROBLEM-URL: http://www.theonion.com/
+www.theonion.com/
+#MASTER# PROBLEM-URL: http://www.bookofratings.com/dangersymbols2.html
+www.bookofratings.com
+#MASTER# PROBLEM-URL: http://www.pattilupone.net/gallery.html
+www.pattilupone.net/gallery.html
+#MASTER# PROBLEM-URL: http://www.animositisomina.com/discog/present.php4
+www.animositisomina.com/discog/
+#MASTER# PROBLEM-URL: http://www.gamespot.com/pc/rpg/deusexinvisiblewar/screenindex.html
+www.gamespot.com/.*/screenindex\.html
+#MASTER# PROBLEM-URL: http://www.ambrosiasw.com/games/evn/desktops.html
+www.ambrosiasw.com/
+#MASTER# PROBLEM-URL: http://www.capitalnews9.com/
+www.capitalnews9.com
+#MASTER# PROBLEM-URL: http://www.golitestore.com/store/products.asp?dept=1003
+www.golitestore.com/store
+#MASTER# PROBLEM-URL: http://www.thinkgeek.com/
+www.thinkgeek.com/
+#MASTER# PROBLEM-URL: http://oca.microsoft.com/en/Welcome.asp
+.microsoft.com
+#MASTER# PROBLEM-URL: http://javabog.dk/ijk/
+javabog.dk/ijk/
 
 #----------------------------------------------------------------------------
 # These don't work without the referrer information:
 
 #----------------------------------------------------------------------------
 # These don't work without the referrer information:
@@ -883,6 +1463,11 @@ printerfriendly.abcnews.com
 www.amazon.de/exec/obidos/clipserve/
 #MASTER# PROBLEM-URL: http://www.lufthansa.de/  http://www.lufthansa.com/  http://cms.lufthansa.com/ 
 .lufthansa.
 www.amazon.de/exec/obidos/clipserve/
 #MASTER# PROBLEM-URL: http://www.lufthansa.de/  http://www.lufthansa.com/  http://cms.lufthansa.com/ 
 .lufthansa.
+#MASTER# REMARKS: These are movie clips, linked from http://us.imdb.com
+.totaleclips.com
+#MASTER# PROBLEM-URL: http://www.mandrakelinux.com/en/ftp.php3
+#MASTER# REMARKS: Link to download page breaks
+www.mandrakelinux.com/en/ftp.php3
 
 #----------------------------------------------------------------------------
 # These animated gifs are either useful or nice:
 
 #----------------------------------------------------------------------------
 # These animated gifs are either useful or nice:
@@ -895,16 +1480,57 @@ www.amazon.de/exec/obidos/clipserve/
 #MASTER# PROBLEM-URL: http://www.ameritrade.com
 #MASTER# REMARKS: Animated link texts
 www.ameritrade.com
 #MASTER# PROBLEM-URL: http://www.ameritrade.com
 #MASTER# REMARKS: Animated link texts
 www.ameritrade.com
+#MASTER# PROBLEM-URL: http://www.myrealbox.com/a?B.KL.U6wQ.d
+#MASTER# REMARKS: Bogus web server doesn't close connection -> deanimation doesn't terminate
+www.myrealbox.com
+#MASTER# PROBLEM-URL: http://weather.chicagotribune.com/radar/station.asp?ID=LOT19&type=loop
+#MASTER# REMARKS: These are weather radar images.
+.wunderground.com
+#MASTER# PROBLEM-URL: http://www.freewarepalm.com/games/spacetrader.shtml
+#MASTER# REMARKS: Alternating screenshots
+www.freewarepalm.com/images/products
+#MASTER# PROBLEM-URL: http://www.capitalnews9.com/
+images.newsx.cc/news9albany_media/weather/
+#MASTER# PROBLEM-URL: http://www.wunderground.com/radar/station.asp?ID=MPX19&type=loop&clutter=1
+66.28.250.180/data/
+#MASTER# PROBLEM-URL: http://www.stanford.edu/group/pandegroup/folding/
+www.stanford.edu/group/pandegroup/folding/villin/
+#MASTER# PROBLEM-URL: http://www.teamquest.com/html/gunther/laquiz.shtml
+www.teamquest.com/gifs/gunther/
 
 #----------------------------------------------------------------------------
 # These sites are so abusive that we need to kill all JS event bindings (and
 # probably a break a lot along the way)
 #----------------------------------------------------------------------------
 
 #----------------------------------------------------------------------------
 # These sites are so abusive that we need to kill all JS event bindings (and
 # probably a break a lot along the way)
 #----------------------------------------------------------------------------
-{+filter{js-events}}
-#MASTER# PROBLEM-URL: http://www..planetspiele.de/
+{+filter{js-radical}}
+#MASTER# PROBLEM-URL: http://www.planetspiele.de/
 .planetspiele.de
 216.12.219.40
 
 .planetspiele.de
 216.12.219.40
 
+#----------------------------------------------------------------------------
+# The "site-specifics" filter has special cures for problems found here:
+#----------------------------------------------------------------------------
+{+filter{site-specifics}}
+#MASTER# PROBLEM-URL: http://www.spiegel.de/static/js/flash-plugin.js
+www.spiegel.de/static/js/flash-plugin\.js
+#MASTER# PROBLEM-URL: http://www.quelle-bausparkasse.de/
+www.quelle-bausparkasse.de/$
+#MASTER# PROBLEM-URL: http://de.groups.yahoo.com/group/die-spinner/interrupt?st=2&ln=die-spinner&m=1&done=%2Fgroup%2Fdie-spinner%2Fmessage%2F416
+.groups.yahoo.com/group/
+#MASTER PROBLEM-URL: http://www.nytimes.com/
+www.nytimes.com/
+
+#----------------------------------------------------------------------------
+# Content under these TLDs is most probably in character sets which the
+# demoronizer filter would mess up
+#----------------------------------------------------------------------------
+{-filter{demoronizer}}
+.jp
+.cn
+.tw
+.ru
+.kr
+
 #----------------------------------------------------------------------------
 # Misc special rules:
 #----------------------------------------------------------------------------
 #----------------------------------------------------------------------------
 # Misc special rules:
 #----------------------------------------------------------------------------
@@ -912,8 +1538,11 @@ www.ameritrade.com
 #MASTER# PROBLEM-URL: http://www.friendscout24.de/
 #MASTER# REMARKS: Needs content-cookies for cookie test on index page; needs webbugs for storing profile(!)
 www.friendscout24.de
 #MASTER# PROBLEM-URL: http://www.friendscout24.de/
 #MASTER# REMARKS: Needs content-cookies for cookie test on index page; needs webbugs for storing profile(!)
 www.friendscout24.de
+#MASTER# PROBLEM-URL:  http://www.webreference.com/js/column8/property.html
+#MASTER# REMARKS: Explains how content cookies work
+www.webreference.com/js/column8/property.html
 
 
-{-deanimate-gifs -filter{popups} -kill-popups}
+{-deanimate-gifs -filter{all-popups} -kill-popups}
 #MASTER# PROBLEM-URL: http://www.valueclick.com/html/
 #MASTER# REMARKS: Know your enemy ;-)
 www.valueclick.com
 #MASTER# PROBLEM-URL: http://www.valueclick.com/html/
 #MASTER# REMARKS: Know your enemy ;-)
 www.valueclick.com
@@ -929,6 +1558,9 @@ realguide.real.com/games
 #MASTER# PROBLEM-URL: http://www.linuxtoday.com/
 #MASTER# REMARKS: /adi has HTML snipplets for use in IFRAMEs
 .doubleclick.net/adi
 #MASTER# PROBLEM-URL: http://www.linuxtoday.com/
 #MASTER# REMARKS: /adi has HTML snipplets for use in IFRAMEs
 .doubleclick.net/adi
+#MASTER# PROBLEM-URL: http://maps.yahoo.com/
+#MASTER# REMARKS: /AVE/iview has HTML snipplets for use in IFRAMEs
+view.atdmt.com/(.*/)?iview/
 
 {+block}
 #MASTER# BLOCK-REFERRER: http://www.geocities.com/the_sockman1/index.html
 
 {+block}
 #MASTER# BLOCK-REFERRER: http://www.geocities.com/the_sockman1/index.html
@@ -944,3 +1576,71 @@ www.geocities.com/js_source
 #MASTER# PROBLEM-URL: http://www.dn.se/
 #MASTER# REMARKS: Can't catch by size or location
 www.dn.se
 #MASTER# PROBLEM-URL: http://www.dn.se/
 #MASTER# REMARKS: Can't catch by size or location
 www.dn.se
+
+{-filter{js-annoyances}}
+#MASTER# PROBLEM-URL: http://www.munichre.com/
+#MASTER# REMARKS: Endless reload loop if referrer info supressed
+www.munichre.com
+#MASTER# PROBLEM-URL: http://www.sfgate.com
+.sfgate.com
+#MASTER# PROBLEM-URL: http://www.nasa.gov
+#MASTER# REMARKS: No progress past main page without js-annoyances
+.nasa.gov
+
+{-filter{unsolicited-popups}}
+#MASTER# DONT-VERIFY
+#MASTER# REMARKS: Breaks Movable Type's admin interface (http://www.movabletype.org/)
+/.*mt.cgi$
+#MASTER# PROBLEM-URL: http://www.discovery.de/
+.discovery.de
+#MASTER# PROBLEM-URL: http://www.bankrate.com/yclc/calc/mortgage-calculator/mortgage-calculator.asp?
+www.bankrate.com/brm/
+#MASTER# PROBLEM-URL: http://www.ukoln.ac.uk/cgi-bin/dcdot.pl?mode=auto&url=http://www.skripczynski.de/people/skripi/bookmark.shtml
+www.ukoln.ac.uk/cgi-bin/dcdot.pl
+#MASTER# PROBLEM-URL: http://www.metrolounge.de
+www.metrolounge.de
+#MASTER# PROBLEM-URL: http://www.mcmaster.com
+www.mcmaster.com/products.html
+#MASTER# PROBLEM-URL: http://www.nbc4.com/news/2672416/detail.html
+cf.nbc4.com/
+#MASTER# PROBLEM-URL: http://www.hh.schule.de/ak/nt/
+www.hh.schule.de/ak/nt/
+
+{+fast-redirects -block}
+#MASTER# PROBLEM-URL: http://isbn.nu/0596001088/price/2.html
+www.commission-junction.com/track/
+#MASTER# PROBLEM-URL: http://uk.rd.yahoo.com/M=200059723.200849546.202365062.200414073/D=ukhmpg/S=15426100:TEAR/A=200396897/R=1119/id=img1_nocap_dial/*http://ad.uk.doubleclick.net/clk;5982435;8261020;g?http://www.lunnpoly.com
+#MASTER# REMARKS: Basically all of Yahoo's outbound links
+.*rd.yahoo.com/
+
+{-filter{webbugs}}
+#MASTER# REMARKS: Has nasty webbugs-in-JS-string syntaxy problem
+www.meteo.fr
+
+{+block}
+#MASTER# PROBLEM-URL: http://www.anti-leech.com/theft_example.html
+#MASTER# REMARKS: Lame attempt at banning ad-blockers. Used by other websites as well.
+/antitheft\.php
+
+{+filter{tiny-textforms}}
+.sourceforge.net/tracker
+
+{+downgrade-http-version}
+#MASTER# REMARKS: This is work-around for CUPS http configuration.
+:631
+#MASTER# PROBLEM-URL: http://cr.yp.to/
+cr.yp.to/
+#MASTER# PROBLEM-URL: http://www.canada.com/vancouver/
+www.canada.com/
+
+{ -crunch-outgoing-cookies \
+  -crunch-incoming-cookies \
+  +session-cookies-only \
+}
+www.versiontracker.com/
+
+# The JS abuse hall of shame:
+#
+{ +filter{js-events} }
+#MASTER# PROBLEM-URL: http://www.pharmcast.com/WarningLetters/Yr2002/December2002/J&J1202.htm
+www.pharmcast.com/
index b127c02..f4d1b1a 100644 (file)
@@ -2,11 +2,11 @@
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/default.filter,v $
 # 
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/default.filter,v $
 # 
-#  $Id: default.filter,v 1.17 2002/11/12 16:16:49 oes Exp $
+#  $Id: default.filter,v 1.11.2.23 2004/02/17 13:34:01 oes Exp $
 #
 #  Purpose     :  Rules to process the content of web pages
 # 
 #
 #  Purpose     :  Rules to process the content of web pages
 # 
-#  Copyright   :  Written by and Copyright
+#  Copyright   :  Written by and Copyright (C) 2001 - 2004 the
 #                 Privoxy team. http://www.privoxy.org/
 #
 # We value your feedback. However, to provide you with the best support,
 #                 Privoxy team. http://www.privoxy.org/
 #
 # We value your feedback. However, to provide you with the best support,
@@ -78,16 +78,16 @@ FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse
 # Get rid of Javascript referrer tracking. 
 # Test page: http://www.javascript-page.com/referrer.html
 #
 # Get rid of Javascript referrer tracking. 
 # Test page: http://www.javascript-page.com/referrer.html
 #
-s|document\.referrer|"Not Your Business!"|gisU
+s|(?:\w+\.)+referrer|"Not Your Business!"|gisU
 
 # The status bar is for displaying link targets, not pointless blahblah
 
 # The status bar is for displaying link targets, not pointless blahblah
-#
-s/(([\n =;{}]|window\.)(default)?status)\s*=\s*((['"]).*?\5)/if(typeof(this.href) != 'undefined') $1 = $4 + ' URL: ' + this.href;else return false/ig
+# 
+s/(\W\s*)((this|window)\.(default)?status)\s*=\s*((['"]).*?\6)/$1if(typeof(this.href) != 'undefined') $2 = $5 + ' URL: ' + this.href;else return false/ig
 
 # Kill OnUnload popups. Yummy.
 # Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
 #
 
 # Kill OnUnload popups. Yummy.
 # Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
 #
-s/(<body\s+[^>]*)onunload(.*>)/$1never$2/siU
+s/(<body\s+[^>]*)onunload/$1never/siU
 s|(<script.*)window\.onunload(?=.*</script>)|$1never|sigU
 
 # If we allow window.open, we want normal window features: 
 s|(<script.*)window\.onunload(?=.*</script>)|$1never|sigU
 
 # If we allow window.open, we want normal window features: 
@@ -102,11 +102,24 @@ s/(open\s*\([^\)]+toolbar=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
 s/(open\s*\([^\)]+directories=)(["']?)(?:no|0)\2/$1$2yes$2/sigU 
 s/(open\s*\([^\)]+fullscreen=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
 s/(open\s*\([^\)]+always(?:raised|lowered)=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
 s/(open\s*\([^\)]+directories=)(["']?)(?:no|0)\2/$1$2yes$2/sigU 
 s/(open\s*\([^\)]+fullscreen=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
 s/(open\s*\([^\)]+always(?:raised|lowered)=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
-s/(open\s*\([^\)]+zlock=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
+s/(open\s*\([^\)]+z-?lock=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
 s/(open\s*\([^\)]+hotkeys=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
 s/(open\s*\([^\)]+hotkeys=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
-s/(open\s*\([^\)]+titlebar=)(["']?)(?:yes|1)\2/$1$2yes$2/sigU
+s/(open\s*\([^\)]+titlebar=)(["']?)(?:no|0)\2/$1$2yes$2/sigU
+s/(open\s*\([^\)]+always(?:raised|lowered)=)(["']?)(?:yes|1)\2/$1$2no$2/sigU
 
 
 
 
+#################################################################################
+#
+# js-events: Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites)
+#
+#################################################################################
+FILTER: js-events Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites)
+
+s/(on|event\.)((mouse(over|out|down|up|move))|(un)?load|contextmenu|selectstart)/never/ig
+# Not events, but abused on the same type of sites:
+s/(alert|confirm)\s*\(/concat(/ig
+s/settimeout\(/concat(/ig
+
 #################################################################################
 #
 # html-annoyances: Get rid of particularly annoying HTML abuse
 #################################################################################
 #
 # html-annoyances: Get rid of particularly annoying HTML abuse
@@ -123,9 +136,9 @@ s/(<a\s+href[^>]+status=)(['"]?)(?:no|0)\2/$1$2yes1$2/igU
 s/(<a\s+href[^>]+scrolling=)(['"]?)(?:no|0)\2/$1$2auto$2/igU
 s/(<a\s+href[^>]+menubar=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
 
 s/(<a\s+href[^>]+scrolling=)(['"]?)(?:no|0)\2/$1$2auto$2/igU
 s/(<a\s+href[^>]+menubar=)(['"]?)(?:no|0)\2/$1$2yes$2/igU
 
-# The <BLINK> tag was a crime!
+# The <BLINK> and <MARQUEE> tags were crimes!
 #
 #
-s*<blink>|</blink>**ig
+s-</?(blink|marquee).*>--sigU
 
 
 #################################################################################
 
 
 #################################################################################
@@ -135,9 +148,9 @@ s*<blink>|</blink>**ig
 #################################################################################
 FILTER: content-cookies Kill cookies that come in the HTML or JS content
 
 #################################################################################
 FILTER: content-cookies Kill cookies that come in the HTML or JS content
 
-# JS cookies, like found on privacy.net:
+# JS cookies, except those used by antiadbuster.com to detect us:
 #
 #
-s|document\.cookie(?=[ \t\r\n]*=)|ZappedCookie|ig
+s|(\w+\.)+cookie(?=[ \t\r\n]*=)(?!='aab)|ZappedCookie|ig
 
 # HTML cookies:
 #
 
 # HTML cookies:
 #
@@ -146,53 +159,41 @@ s|<meta\s+http-equiv=['"]?set-cookie.*>|<!-- ZappedCookie -->|igU
 
 #################################################################################
 #
 
 #################################################################################
 #
-# webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking)
+# refresh-tags: Kill automatic refresh tags (for dial-on-demand setups)
 #
 #################################################################################
 #
 #################################################################################
-FILTER: webbugs Squish WebBugs (1x1 invisible GIFs used for user tracking)
-
-s/<img\s+[^>]*(?:width|height)\s*=\s*['"]?1(?=\D)[^>]*(?:width|height)\s*=\s*['"]?1(?=\D)[^>]*?>//siUg
-
+FILTER: refresh-tags Kill automatic refresh tags (for dial-on-demand setups)
 
 
-##################################################################################
-#
-# popups: Kill all popups in JS and HTML
+# Note: Only deactivates refreshes with more than 9 seconds delay to
+#       preserve monster-stupid but common redirections via meta tags.
 #
 #
-#################################################################################
-FILTER: popups Kill all popups in JS and HTML
-
-s/([\n =;{}]|window\.)open\s*\\?\(/$1concat(/ig      # JavaScript
-s/ target\s*=\s*(['"]?)(_blank|_new)\1?/ notarget/ig # HTML
+s/<meta\s+http-equiv\s*=\s*(['"]?)refresh\1\s+content\s*=\s*(['"]?)\d{2,}\s*(;\s*url\s*=\s*([^>\2]*))?\2/<link rev="x-refresh" href="$4"/iU
 
 
 #################################################################################
 #
 
 
 #################################################################################
 #
-# frameset-borders: Give frames a border, make them resizable and scrollable
+# unsolicited-popups: Disable unsolicited pop-up windows
 #
 #################################################################################
 #
 #################################################################################
-FILTER: frameset-borders Give frames a border and make them resizable
+FILTER: unsolicited-popups Disable only unsolicited pop-up windows
 
 
-s/(<frameset\s+[^>]*)framespacing=(['"]?)(no|0)\2/$1/igU
-s/(<frameset\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU
-s/(<frameset\s+[^>]*)border=(['"]?)(no|0)\2/$1/igU
-s/(<frame\s+[^>]*)noresize/$1/igU
-s/(<frame\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU 
-s/(<frame\s+[^>]*)scrolling=(['"]?)(no|0)\2/$1/igU
+s+([^'"]\s*<head.*>)(?=\s*[^'"])+$1<script>function PrivoxyWindowOpen(){return(null);}</script>+isU
+s+([^\w\s.]\s*)((window|this|parent)\.)?open\s*\(+$1PrivoxyWindowOpen(+ig
+s+([^'"]\s*</html>)(?!\s*(\\n|'|"))+$1<script>function PrivoxyWindowOpen(a, b, c){return(window.open(a, b, c));}</script>+iU     
 
 
 
 
-#################################################################################
+##################################################################################
 #
 #
-# refresh-tags: Kill automatic refresh tags (for dial-on-demand setups)
+# all-popups: Kill all popups in JavaScript and HTML
 #
 #################################################################################
 #
 #################################################################################
-FILTER: refresh-tags Kill automatic refresh tags (for dial-on-demand setups)
+FILTER: all-popups Kill all popups in JavaScript and HTML
 
 
-# Note: Only deactivates refreshes with more than 9 seconds delay to
-#       preserve monster-stupid but common redirections via meta tags.
-#
-s/<meta\s+http-equiv\s*=\s*(['"]?)refresh\1\s+content\s*=\s*(['"]?)\d{2,}\s*(;\s*url\s*=\s*([^>\2]*))?\2/<link rev="x-refresh" href="$4"/iU
+s/((\W\s*)(window|this|parent)\.)open\s*\\?\(/$1concat(/ig  # JavaScript
+s/\starget\s*=\s*(['"]?)_?(blank|new)\1?/ notarget/ig        # HTML
 
 
-#################################################################################
+
+##################################################################################
 #
 # img-reorder: Reorder attributes in <img> tags to make the banners-by-* filters more effective
 #
 #
 # img-reorder: Reorder attributes in <img> tags to make the banners-by-* filters more effective
 #
@@ -202,12 +203,12 @@ FILTER: img-reorder Reorder attributes in <img> tags to make the banners-by-* fi
 # In the first step src is moved to the start, then width is moved to the second
 # place to guarantee an order of src, width, height.
 # This makes banners-by-size more effective and allows both banners-by-size
 # In the first step src is moved to the start, then width is moved to the second
 # place to guarantee an order of src, width, height.
 # This makes banners-by-size more effective and allows both banners-by-size
-# and banners-by-link to preserve the original image URL in the alt attribute.
+# and banners-by-link to preserve the original image URL in the title attribute.
 
 s|<img\s+?([^>]*) src\s*=\s*(['"])([^>\\\2]+)\2|<img src=$2$3$2 $1|siUg
 s|<img\s+?([^>]*) src\s*=\s*([^'">\\\s]+)|<img src=$2 $1|sig
 
 
 s|<img\s+?([^>]*) src\s*=\s*(['"])([^>\\\2]+)\2|<img src=$2$3$2 $1|siUg
 s|<img\s+?([^>]*) src\s*=\s*([^'">\\\s]+)|<img src=$2 $1|sig
 
-s|<img (src=(?:(['"])[^>\\\\2]+\2\|[^'">\\\s]+?))([^>]*)width\s*=\s*(["']?)(\d+?)|<img $1 width=$4$5$4$3|siUg
+s|<img (src=(?:(['"])[^>\\\\2]+\2\|[^'">\\\s]+?))([^>]*)width\s*=\s*(["']?)(\d+?)\4|<img $1 width=$4$5$4$3|siUg
 
 
 #################################################################################
 
 
 #################################################################################
@@ -220,7 +221,6 @@ s|<img (src=(?:(['"])[^>\\\\2]+\2\|[^'">\\\s]+?))([^>]*)width\s*=\s*(["']?)(\d+?
 #
 # Note: Use http://config.privoxy.org/send-banner?type=trans for a transparent 1x1 image
 #       Use http://config.privoxy.org/send-banner?type=pattern for a grey/white pattern image
 #
 # Note: Use http://config.privoxy.org/send-banner?type=trans for a transparent 1x1 image
 #       Use http://config.privoxy.org/send-banner?type=pattern for a grey/white pattern image
-#       Use http://config.privoxy.org/send-banner?type=custom for the image specified in config
 #       Use http://config.privoxy.org/send-banner?type=auto  to auto-select.
 #
 # Note2: Use img-reorder before this filter to ensure maximum matching success
 #       Use http://config.privoxy.org/send-banner?type=auto  to auto-select.
 #
 # Note2: Use img-reorder before this filter to ensure maximum matching success
@@ -229,32 +229,32 @@ s|<img (src=(?:(['"])[^>\\\\2]+\2\|[^'">\\\s]+?))([^>]*)width\s*=\s*(["']?)(\d+?
 FILTER: banners-by-size Kill banners by size
 
 # 88*31
 FILTER: banners-by-size Kill banners by size
 
 # 88*31
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)88\4)[^>]*?(height=(['"]?)31\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)88\4)[^>]*?(height=(['"]?)31\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 # 120*60, 120*90, 120*240, 120*600
 # 120*60, 120*90, 120*240, 120*600
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)120\4)[^>]*?(height=(['"]?)(?:600?|90|240)\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)120\4)[^>]*?(height=(['"]?)(?:600?|90|240)\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 # 125*125
 # 125*125
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)125\4)[^>]*?(height=(['"]?)125\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)125\4)[^>]*?(height=(['"]?)125\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 # 160*600
 # 160*600
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)160\4)[^>]*?(height=(['"]?)600\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)160\4)[^>]*?(height=(['"]?)600\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 # 180*150
 # 180*150
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)180\4)[^>]*?(height=(['"]?)150\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)180\4)[^>]*?(height=(['"]?)150\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 # 234*60, 468*60 (Most Banners!)
 # 234*60, 468*60 (Most Banners!)
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:234|468)\4)[^>]*?(height=(['"]?)60\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:234|468)\4)[^>]*?(height=(['"]?)60\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 # 240*400
 # 240*400
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)240\4)[^>]*?(height=(['"]?)400\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)240\4)[^>]*?(height=(['"]?)400\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 # 250*250, 300*250
 # 250*250, 300*250
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:250|300)\4)[^>]*?(height=(['"]?)250\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)(?:250|300)\4)[^>]*?(height=(['"]?)250\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 # 336*280
 # 336*280
-s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)336\4)[^>]*?(height=(['"]?)280\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)336\4)[^>]*?(height=(['"]?)280\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 
 # Note: 200*50 was also proposed, but it probably causes too much collateral damage:
 #
 
 # Note: 200*50 was also proposed, but it probably causes too much collateral damage:
 #
-#s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)200\4)[^>]*?(height=(['"]?)50\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed-$2-by-size$1 $3 $5>@sig
+#s@<img\s+(?:src\s*=\s*(['"]?)([^>\\\1\s]+)\1)?[^>]*?(width=(['"]?)200\4)[^>]*?(height=(['"]?)50\6)[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed-$2-by-size$1 $3 $5>@sig
 
 
 #################################################################################
 #
 
 
 #################################################################################
 #
-# banners-by-link: Kill banners by their links to known clicktrackers
+# banners-by-link: Kill banners by their links to known clicktrackers (Experimental)
 #
 #################################################################################
 FILTER: banners-by-link Kill banners by their links to known clicktrackers
 #
 #################################################################################
 FILTER: banners-by-link Kill banners by their links to known clicktrackers
@@ -268,92 +268,58 @@ s@<a\s+href\s*=\s*(['"]?)([^>\1\s]*?(?:\
 | tracker | counter                   # common \
 | adlog\.pl                           # see sf.net \
 )[^>\1\s]*)\1[^>]*>\s*<img\s+(?:src\s*=\s*(['"]?)([^>\\\3\s]+)\3)?[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\6)[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\8)[^>]*>\
 | tracker | counter                   # common \
 | adlog\.pl                           # see sf.net \
 )[^>\1\s]*)\1[^>]*>\s*<img\s+(?:src\s*=\s*(['"]?)([^>\\\3\s]+)\3)?[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\6)[^>]*((?:width|height)\s*=\s*(['"]?)\d+?\8)[^>]*>\
-@<img $5 $7 src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed $4 by link to $2$1>@sigx
+@<img $5 $7 src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed $4 by link to $2$1>@sigx
 
 # Rare case w/o explicit dimensions:
 #
 
 # Rare case w/o explicit dimensions:
 #
-s@<a\s+href\s*=\s*(['"]?)([^>\1\s]*?(?:adclick|atwola\.com/(?:link|redir)|doubleclick\.net/jump/|tracker|counter|adlog\.pl)[^>\1\s]*)\1[^>]*>\s*<img\s+(?:src\s*=\s*(['"]?)([^>\\\3\s]+)\3)?[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 alt=$1Killed $4 by link to $2$1>@sig
+s@<a\s+href\s*=\s*(['"]?)([^>\1\s]*?(?:adclick|atwola\.com/(?:link|redir)|doubleclick\.net/jump/|tracker|counter|adlog\.pl)[^>\1\s]*)\1[^>]*>\s*<img\s+(?:src\s*=\s*(['"]?)([^>\\\3\s]+)\3)?[^>]*>@<img src=$1http://config.privoxy.org/send-banner?type=auto$1 border=$1\\0$1 title=$1Killed $4 by link to $2$1>@sig
 
 
-#################################################################################
-#
-# fun: Text replacements for subversive browsing fun!
-#
-#################################################################################
-FILTER: fun Text replacements for subversive browsing fun!
 
 
-s/microsoft(?!.com)/MicroSuck/ig
-
-# Buzzword Bingo (example for extended regex syntax)
+################################################################################
 #
 #
-s* industry[ -]leading \
-|  cutting[ -]edge \
-|  customer[ -]focused \
-|  market[ -]driven \
-|  award[ -]winning # Comments are OK, too! \
-|  high[ -]performance \
-|  solutions[ -]based \
-|  unmatched \
-|  unparalleled \
-|  unrivalled \
-*<font color="red"><b>BINGO!</b></font> \
-*igx
-
-
-#################################################################################
-#
-# nimda: Remove Nimda (virus) code
+# webbugs: Squish WebBugs (1x1 invisible GIFs used for user tracking)
 #
 #################################################################################
 #
 #################################################################################
-FILTER: nimda Remove Nimda (virus) code
+FILTER: webbugs Squish WebBugs (1x1 invisible GIFs used for user tracking)
 
 
-s%<script language="JavaScript">(window\.open|1;''\.concat)\("readme\.eml", null, "resizable=no,top=6000,left=6000"\)</script>%<br><font size="7"> WARNING: This Server is infected with <a href="http://www.cert.org/advisories/CA-2001-26.html">Nimda</a>!</font>%g
+s/<img\s+[^>]*(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*(?:width|height)\s*=\s*['"]?[01](?=\D)[^>]*?>//siUg
 
 
 #################################################################################
 #
 
 
 #################################################################################
 #
-# shockwave-flash: Kill embedded Shockwave Flash objects
+# tiny-textforms: Extend those tiny textareas up to 40x80 and kill the hard wrap
 #
 #################################################################################
 #
 #################################################################################
-FILTER: shockwave-flash Kill embedded Shockwave Flash objects
+FILTER: tiny-textforms Extend those tiny textareas up to 40x80 and kill the hard wrap
 
 
-s|<embed [^>]*application/x-shockwave-flash.*</embed>|<!-- Squished Shockwave Flash Embed -->|sigU
+s/(<textarea[^>]*?)(?:\s*(?:rows|cols)=(['"]?)\d+\2)+/$1 rows=$2\40$2 cols=$2\80$2/ig 
+s/(<textarea[^>]*?)wrap=(['"]?)hard\2/$1/ig
 
 
 #################################################################################
 #
 
 
 #################################################################################
 #
-# quicktime-kioskmode: Make Quicktime movies saveable
+# jumping-windows: Prevent windows from resizing and moving themselves
 #
 #################################################################################
 #
 #################################################################################
-FILTER: quicktime-kioskmode Make Quicktime movies saveable
+FILTER: jumping-windows Prevent windows from resizing and moving themselves
 
 
-s/(<embed\s+[^>]*)kioskmode\s*=\s*(["']?)true\2/$1/ig 
+s/(?:window|this|self)\.(?:move|resize)(?:to|by)\(/''.concat(/ig
 
 
 #################################################################################
 #
 
 
 #################################################################################
 #
-# js-events: Kill all JS event bindings (Radically destructive! Only for extra nasty sites)
+# frameset-borders: Give frames a border, make them resizable and scrollable
 #
 #################################################################################
 #
 #################################################################################
-FILTER: js-events Kill all JS event bindings (Radically destructive! Only for extra nasty sites)
-
-s/(on|event\.)((mouse(over|out|down|up|move))|(un)?load|contextmenu|selectstart)/never/ig
-# Not events, but abused on the same type of sites:
-s/(alert|confirm)\s*\(/concat(/ig
-
+FILTER: frameset-borders Give frames a border and make them resizable
 
 
-#################################################################################
-#
-# crude-parental: Crude parental filtering?  (Use along with a suitable blocklist).
-#                 Shows how to deny access to whole page based on a keyword.
-#
-#################################################################################
-FILTER: crude-parental Crude parental filtering (demo only)
+s/(<frameset\s+[^>]*)framespacing=(['"]?)(no|0)\2/$1/igU
+s/(<frameset\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU
+s/(<frameset\s+[^>]*)border=(['"]?)(no|0)\2/$1/igU
+s/(<frame\s+[^>]*)noresize/$1/igU
+s/(<frame\s+[^>]*)frameborder=(['"]?)(no|0)\2/$1/igU 
+s/(<frame\s+[^>]*)scrolling=(['"]?)(no|0)\2/$1/igU
 
 
-# (Note: Middlesex, Sussex and Essex are counties in the UK, not rude words)
-# (Note #2: Is 'sex' a rude word?!)
-
-s%^.*(?<!middle)(?<!sus)(?<!es)sex.*$%<html><head><title>Blocked</title></head><body><h3>Blocked due to possible adult content. Please see <a href="http://dmoz.org/Kids_and_Teens/">this site</a>.</h3></body></html>%is
-s+^.*warez.*$+<html><head><title>No Warez</title></head><body><h3>You're not searching for illegal stuff, are you?</h3></body></html>+is
 
 
 #################################################################################
 
 
 #################################################################################
@@ -366,7 +332,7 @@ s+^.*warez.*$+<html><head><title>No Warez</title></head><body><h3>You're not sea
 #         John Walker -- January 1998, http://www.fourmilab.ch/webtools/demoroniser
 #
 #################################################################################
 #         John Walker -- January 1998, http://www.fourmilab.ch/webtools/demoroniser
 #
 #################################################################################
-FILTER: demoronizer fixing MS's non-standard use of std charsets.
+FILTER: demoronizer Fix MS's non-standard use of standard charsets
 
 s/(&\#[0-2]\d\d)\s/$1; /g
 # per Robert Lynch: http://slate.msn.com//?id=2067547, just a guess.
 
 s/(&\#[0-2]\d\d)\s/$1; /g
 # per Robert Lynch: http://slate.msn.com//?id=2067547, just a guess.
@@ -392,47 +358,244 @@ s/\x97/--/g
 # per Robert Lynch.
 s/\x9B/>/g                  # 155
 
 # per Robert Lynch.
 s/\x9B/>/g                  # 155
 
+
+#################################################################################
+#
+# shockwave-flash: Kill embedded Shockwave Flash objects
+#                  Note: Better just block "/.*\.swf$"!
+#
+#################################################################################
+FILTER: shockwave-flash Kill embedded Shockwave Flash objects
+
+s|<object [^>]*macromedia.*</object>|<!-- Squished Shockwave Object -->|sigU
+s|<embed [^>]*(application/x-shockwave-flash\|\.swf).*>(.*</embed>)?|<!-- Squished Shockwave Flash Embed -->|sigU
+
+
+#################################################################################
+#
+# quicktime-kioskmode: Make Quicktime movies saveable
+#
+#################################################################################
+FILTER: quicktime-kioskmode Make Quicktime movies saveable
+
+s/(<embed\s+[^>]*)kioskmode\s*=\s*(["']?)true\2/$1/ig 
+
+
+#################################################################################
+#
+# fun: Text replacements for subversive browsing fun!
+#
+#################################################################################
+FILTER: fun Text replacements for subversive browsing fun!
+
+# SCNR
+#
+s/microsoft(?!.com)/MicroSuck/ig
+
+# Buzzword Bingo (example for extended regex syntax)
+#
+s* (?:industry|world)[ -]leading \
+|  cutting[ -]edge \
+|  customer[ -]focused \
+|  market[ -]driven \
+|  award[ -]winning # Comments are OK, too! \
+|  high[ -]performance \
+|  solutions[ -]based \
+|  unmatched \
+|  unparalleled \
+|  unrivalled \
+*$0<sup><font color="red"><b>Bingo!</b></font></sup> \
+*igx
+
+# For Germans only
+#
+s/(M|m)edien(?![^<]*>)/$1&auml;dchen/Ug
+
+#################################################################################
+#
+# crude-parental: Crude parental filtering?  (Use along with a suitable blocklist).
+#                 Shows how to deny access to whole page based on a keyword.
+#
+#################################################################################
+FILTER: crude-parental Crude parental filtering (demo only)
+
+# (Note: Middlesex, Sussex and Essex are counties in the UK, not rude words)
+# (Note #2: Is 'sex' a rude word?!)
+
+s%^.*(?<!middle)(?<!sus)(?<!es)sex.*$%<html><head><title>Blocked</title></head><body><h3>Blocked due to possible adult content. Please see <a href="http://dmoz.org/Kids_and_Teens/">this site</a>.</h3></body></html>%is
+s+^.*warez.*$+<html><head><title>No Warez</title></head><body><h3>You're not searching for illegal stuff, are you?</h3></body></html>+is
+
+
+#################################################################################
+#
+# IE-Exploits: Disable some known Internet Explorer bug exploits
+#
+#################################################################################
+FILTER: ie-exploits Disable some known Internet Explorer bug exploits
+
+# Note: This is basically a demo and waits for someone more interested in IE
+# security (sic!) to take over.
+
+# Cross-site-scripting:
+#
+s%f\("javascript:location.replace\('mk:@MSITStore:C:'\)"\);%alert\("This page looks like it tries to use a vulnerability described here:\n http://online.securityfocus.com/archive/1/298748/2002-11-02/2002-11-08/2"\);%siU
+
+# Address bar spoofing (http://www.secunia.com/advisories/10395/):
+#
+s/(<a[^>]*href[^>]*)(\x01|\x02|\x03|%0[012])/$1MALICIOUS-LINK/ig
+
+# Nimda:
+#
+s%<script language="JavaScript">(window\.open|1;''\.concat)\("readme\.eml", null, "resizable=no,top=6000,left=6000"\)</script>%<br><font size="7"> WARNING: This Server is infected with <a href="http://www.cert.org/advisories/CA-2001-26.html">Nimda</a>!</font>%g
+
+
+#################################################################################
+#
+#
+# site-specifics: Cure for site-specific problems. Don't apply generally!
+#
+#   Note: The fixes contained here are so specific to the problems of the
+#         particular web sites they are designed for that they would be a
+#         waste of CPU cycles (or even destructive!) on 99.9% of the web
+#         sites where they don't apply.
+#
+#################################################################################
+FILTER: site-specifics Cure for site-specific problems. Don't apply generally!
+
+# www.spiegel.de excludes X11 users from viewing Flash5 objects - shame.
+# Apply to: www.spiegel.de/static/js/flash-plugin.js 
+#
+s/indexOf\("x11"\)/indexOf("x13")/
+
+# www.quelle-bausparkasse.de uses a very stupid redirect mechanism that
+# relies on a webbug being present. Can we tolerate that? No!
+# Apply to: www.quelle-bausparkasse.de/$
+#
+s/mylogfunc()//g
+
+# groups.yahoo.com has splash pages that one needs to click through in
+# order to access the actual messages. Let the browser do that. Thanks
+# to Paul Jobson for this one:
+#
+s|<a href="(.+?)">(?:Continue to message\|Weiter zu Nachricht)</a>|<meta http-equiv="refresh" content="0; URL=$1">|ig
+
+# monster.com has two very similar gimmicks:
+#
+s|<input type="hidden" name="REDIRECT" value="(.+?)">|<meta http-equiv="refresh" content="0; URL=$1">|i
+s|<IMG SRC="http://media.monster.com/mm/usen/my/no_thanks_211x40.gif".+?>|<meta http-equiv="refresh" content="0; URL=http://my.monster.com/resume.asp">|i 
+
+# nytimes.com triggers popups through the onload handler of dummy images
+# to fool popup-blockers.  
+#
+s|(<img [^>]*)onload|$1never|sig
+
+# Pre-check all the "Discard" buttons in GNU Mailman's web interface.
+# (This saves a lot of mouse aiming practice when flushing spamtraps)
+#
+s|(<INPUT name="\d{2,4}" type="RADIO" value="0") CHECKED |$1|g
+s|<INPUT name="\d{2,4}" type="RADIO" value="3" |$0 checked|g
+
+
+
 ############################################################################## 
 #
 #  Revisions   :
 #     $Log: default.filter,v $
 ############################################################################## 
 #
 #  Revisions   :
 #     $Log: default.filter,v $
-#     Revision 1.17  2002/11/12 16:16:49  oes
+#     Revision 1.11.2.23  2004/02/17 13:34:01  oes
+#     - Beefed up the protection of the unsolicited-popups
+#       filter against matching in JavaScript string constants.
+#     - Extended the fun filter with a German joke
+#     - Extended the site-specifics filter with a convenience
+#       reeplacement for managing mailing lists at SourceForge
+#
+#     Revision 1.11.2.22  2004/01/30 15:29:29  oes
+#     Updated the copyright note
+#
+#     Revision 1.11.2.21  2004/01/20 15:15:01  oes
+#     Detail enhancement in all-popups
+#
+#     Revision 1.11.2.20  2004/01/06 16:46:14  oes
+#     Fixed a JS syntax problem in jumping-windows
+#
+#     Revision 1.11.2.19  2003/12/17 17:09:25  oes
+#     Added remedy against IE address bar spoofing
+#
+#     Revision 1.11.2.18  2003/12/02 11:25:27  oes
+#     Fixed a line trashed in previous commit
+#
+#     Revision 1.11.2.17  2003/12/01 21:58:46  oes
+#     Assorted tuning:
+#
+#      - unsolicited-popups no longer matches at start or end of quoted
+#        strings, and is now activated earlier and deactivated later in
+#        the page.
+#      - replacement images in banners-by-* now without border
+#      - more effective shockwave flash flattening
+#      - Custom annoyance filtering for Yahoo Groups, Monster.com, NY Times.
+#
+#     Revision 1.11.2.16  2003/05/08 09:44:56  oes
+#     Allow extra parameters in blink,marquee tags. Fixes bug #734012
+#
+#     Revision 1.11.2.15  2003/03/30 13:57:08  oes
+#     Making unsolicited-popups safe for use on <html> tags enclosed in JS strings
+#
+#     Revision 1.11.2.14  2003/03/19 13:17:50  oes
+#     - Added filter "site-specifics" to address site specific problems
+#     - Fixed a small problem in the img-reorder filter
+#
+#     Revision 1.11.2.13  2003/03/18 19:28:59  oes
+#     Fixed a minor problem in the img-reorder filter
+#
+#     Revision 1.11.2.12  2003/03/15 14:06:58  oes
+#      - Assorted refinements, optimizations and fixes in the js-annoyances,
+#        img-reorder, banners-by-size, banners-by-link, webbugs, refresh-tags,
+#        html-annoyances, content-cookies and fun filters
+#      - Replaced filter "popups" by choice between two modes:
+#        - "unsolicited-popups" tries to catch only the unsolicited ones
+#        - "all-popups" tries to kill them all (as before)
+#      - New filter "tiny-textforms" Help those tiny or hard-wrap textareas.
+#      - New filter "jumping-windows" that prevents windows from resizing
+#        and moving themselves
+#      - Replaced "nimda" with more general "ie-exploits" filter in which
+#        all filters for exploits shall be collected
+#
+#     Revision 1.11.2.11  2002/11/12 16:14:43  oes
 #     Exchanged js-annoyance filter against status bar rewrites with improved version by Don Libes
 #
 #     Exchanged js-annoyance filter against status bar rewrites with improved version by Don Libes
 #
-#     Revision 1.16  2002/11/11 13:40:38  oes
+#     Revision 1.11.2.10  2002/11/11 13:39:47  oes
 #     Make refresh-tags filter work even on incorrect refresh tags like found on usatoday.com
 #
 #     Make refresh-tags filter work even on incorrect refresh tags like found on usatoday.com
 #
-#     Revision 1.15  2002/11/08 16:40:56  oes
+#     Revision 1.11.2.9  2002/11/08 16:39:17  oes
 #     Made img-reorder more cautious. Fixes bug #632715
 #
 #     Made img-reorder more cautious. Fixes bug #632715
 #
-#     Revision 1.14  2002/10/13 21:58:20  hal9
-#     Add demoronizer filter to sync with 3.0.1.
+#     Revision 1.11.2.8  2002/10/13 21:56:52  hal9
+#     Adding demoronizer filter. This should include all the common abuses. I have
+#     left a few of the rare cases commented out (never found these in the wild).
 #
 #
-#     Revision 1.13  2002/09/11 16:04:20  oes
+#     Revision 1.11.2.7  2002/09/25 15:09:39  oes
 #     Preserve original quoting style in <img> tags wherever possible. Fixes Bug #605956
 #
 #     Preserve original quoting style in <img> tags wherever possible. Fixes Bug #605956
 #
-#     Revision 1.12  2002/09/05 14:55:38  oes
-#     Synced with the stable branch:
-#         Revision 1.11.2.6  2002/08/23 14:12:26  oes
-#         Proofed frameset-borders against "fremaborder=0 border=0"
+#     Revision 1.11.2.6  2002/08/23 14:12:26  oes
+#     Proofed frameset-borders against "fremaborder=0 border=0"
 #
 #
-#         Revision 1.11.2.5  2002/08/22 15:05:20  oes
-#         Added Filter to make Quicktime movies saveable (thanks to aaron@linville.org for the idea)
+#     Revision 1.11.2.5  2002/08/22 15:05:20  oes
+#     Added Filter to make Quicktime movies saveable (thanks to aaron@linville.org for the idea)
 #
 #
-#         Revision 1.11.2.4  2002/08/10 11:32:29  oes
-#         Attribute values in replacement tags of banners-by-size filter now undelimited. (Fixes bug #592493)
+#     Revision 1.11.2.4  2002/08/10 11:32:29  oes
+#     Attribute values in replacement tags of banners-by-size filter now undelimited. (Fixes bug #592493)
 #
 #
-#         Revision 1.11.2.3  2002/08/05 11:43:56  oes
-#         Fixed a bug in the popups filter that was introduced with the last fix :-(
+#     Revision 1.11.2.3  2002/08/05 11:43:56  oes
+#     Fixed a bug in the popups filter that was introduced with the last fix :-(
 #
 #
-#         Revision 1.11.2.2  2002/08/01 11:20:13  oes
-#         Fixed bugs 587802, 577802 and an unreported one
+#     Revision 1.11.2.2  2002/08/01 11:20:13  oes
+#     Fixed bugs 587802, 577802 and an unreported one
 #
 #
-#         Revision 1.11.2.1  2002/07/26 15:18:26  oes
-#         - All filters reviewed and many shorcomings fixed
-#         - New filters: img-reorder, banners-by-link and js-events
-#         - Jobs reorderd because they are now executed in order of
-#           appearance
+#     Revision 1.11.2.1  2002/07/26 15:18:26  oes
+#     - All filters reviewed and many shorcomings fixed
+#     - New filters: img-reorder, banners-by-link and js-events
+#     - Jobs reorderd because they are now executed in order of
+#       appearance
 #
 #     Revision 1.11  2002/05/24 00:57:18  oes
 #     Made WeBugs job ungreedy; Fixes bug 559190
 #
 #     Revision 1.11  2002/05/24 00:57:18  oes
 #     Made WeBugs job ungreedy; Fixes bug 559190
@@ -530,3 +693,5 @@ s/\x9B/>/g                  # 155
 #
 #
 # 
 #
 #
 # 
+
+
diff --git a/doc/Doxyfile b/doc/Doxyfile
deleted file mode 100644 (file)
index 1805258..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-# Doxyfile 1.2.13-20020210
-
-#---------------------------------------------------------------------------
-# General configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME           = "Privoxy 3.1.1"
-PROJECT_NUMBER         = 
-OUTPUT_DIRECTORY       = dox
-OUTPUT_LANGUAGE        = English
-EXTRACT_ALL            = NO
-EXTRACT_PRIVATE        = NO
-EXTRACT_STATIC         = YES
-EXTRACT_LOCAL_CLASSES  = YES
-HIDE_UNDOC_MEMBERS     = NO
-HIDE_UNDOC_CLASSES     = NO
-BRIEF_MEMBER_DESC      = NO
-REPEAT_BRIEF           = YES
-ALWAYS_DETAILED_SEC    = YES
-INLINE_INHERITED_MEMB  = NO
-FULL_PATH_NAMES        = NO
-STRIP_FROM_PATH        = 
-INTERNAL_DOCS          = NO
-STRIP_CODE_COMMENTS    = NO
-CASE_SENSE_NAMES       = YES
-SHORT_NAMES            = NO
-HIDE_SCOPE_NAMES       = NO
-VERBATIM_HEADERS       = YES
-SHOW_INCLUDE_FILES     = NO
-JAVADOC_AUTOBRIEF      = YES
-INHERIT_DOCS           = YES
-INLINE_INFO            = YES
-SORT_MEMBER_DOCS       = YES
-DISTRIBUTE_GROUP_DOC   = NO
-TAB_SIZE               = 8
-GENERATE_TODOLIST      = YES
-GENERATE_TESTLIST      = YES
-GENERATE_BUGLIST       = YES
-ALIASES                = 
-ENABLED_SECTIONS       = 
-MAX_INITIALIZER_LINES  = 30
-OPTIMIZE_OUTPUT_FOR_C  = YES
-SHOW_USED_FILES        = YES
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET                  = YES
-WARNINGS               = YES
-WARN_IF_UNDOCUMENTED   = YES
-WARN_FORMAT            = "$file:$line: $text"
-WARN_LOGFILE           = 
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT                  = ../src/
-FILE_PATTERNS          = *.c \
-                         *.h
-RECURSIVE              = NO
-EXCLUDE                = 
-EXCLUDE_SYMLINKS       = NO
-EXCLUDE_PATTERNS       = config.h \
-                         actionlist.h \
-                         w32res.h \
-                         pcrs.c \
-                         pcrs.h
-EXAMPLE_PATH           = 
-EXAMPLE_PATTERNS       = 
-EXAMPLE_RECURSIVE      = NO
-IMAGE_PATH             = 
-INPUT_FILTER           = 
-FILTER_SOURCE_FILES    = NO
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER         = NO
-INLINE_SOURCES         = NO
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION    = YES
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX     = YES
-COLS_IN_ALPHA_INDEX    = 1
-IGNORE_PREFIX          = 
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML          = YES
-HTML_OUTPUT            = html
-HTML_FILE_EXTENSION    = .html
-HTML_HEADER            = 
-HTML_FOOTER            = 
-HTML_STYLESHEET        = 
-HTML_ALIGN_MEMBERS     = YES
-GENERATE_HTMLHELP      = NO
-GENERATE_CHI           = NO
-BINARY_TOC             = NO
-TOC_EXPAND             = NO
-DISABLE_INDEX          = NO
-ENUM_VALUES_PER_LINE   = 4
-GENERATE_TREEVIEW      = YES
-TREEVIEW_WIDTH         = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX         = NO
-LATEX_OUTPUT           = latex
-LATEX_CMD_NAME         = latex
-MAKEINDEX_CMD_NAME     = makeindex
-COMPACT_LATEX          = NO
-PAPER_TYPE             = a4wide
-EXTRA_PACKAGES         = 
-LATEX_HEADER           = 
-PDF_HYPERLINKS         = NO
-USE_PDFLATEX           = NO
-LATEX_BATCHMODE        = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF           = NO
-RTF_OUTPUT             = rtf
-COMPACT_RTF            = NO
-RTF_HYPERLINKS         = NO
-RTF_STYLESHEET_FILE    = 
-RTF_EXTENSIONS_FILE    = 
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN           = NO
-MAN_OUTPUT             = man
-MAN_EXTENSION          = .3
-MAN_LINKS              = NO
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML           = NO
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF   = NO
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING   = YES
-MACRO_EXPANSION        = NO
-EXPAND_ONLY_PREDEF     = NO
-SEARCH_INCLUDES        = YES
-INCLUDE_PATH           = 
-INCLUDE_FILE_PATTERNS  = 
-PREDEFINED             = 
-EXPAND_AS_DEFINED      = 
-SKIP_FUNCTION_MACROS   = YES
-#---------------------------------------------------------------------------
-# Configuration::addtions related to external references   
-#---------------------------------------------------------------------------
-TAGFILES               = 
-GENERATE_TAGFILE       = 
-ALLEXTERNALS           = NO
-EXTERNAL_GROUPS        = YES
-PERL_PATH              = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS         = YES
-HAVE_DOT               = NO
-CLASS_GRAPH            = YES
-COLLABORATION_GRAPH    = YES
-TEMPLATE_RELATIONS     = YES
-HIDE_UNDOC_RELATIONS   = YES
-INCLUDE_GRAPH          = YES
-INCLUDED_BY_GRAPH      = YES
-GRAPHICAL_HIERARCHY    = YES
-DOT_IMAGE_FORMAT       = gif
-DOT_PATH               = 
-DOTFILE_DIRS           = 
-MAX_DOT_GRAPH_WIDTH    = 1024
-MAX_DOT_GRAPH_HEIGHT   = 1024
-GENERATE_LEGEND        = YES
-DOT_CLEANUP            = YES
-#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine   
-#---------------------------------------------------------------------------
-SEARCHENGINE           = NO
-CGI_NAME               = search.cgi
-CGI_URL                = 
-DOC_URL                = 
-DOC_ABSPATH            = 
-BIN_ABSPATH            = /usr/local/bin/
-EXT_DOC_PATHS          = 
index 2a96d5a..59e0f22 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2001 Andreas S. Oesterhelt <oes@oesterhelt.org>
+.\" Copyright (c) 2001-2003 Andreas S. Oesterhelt <oes@oesterhelt.org>
 .\"
 .\" This is free documentation; you can redistribute it and/or
 .\" modify it under the terms of the GNU General Public License as
 .\"
 .\" This is free documentation; you can redistribute it and/or
 .\" modify it under the terms of the GNU General Public License as
@@ -20,7 +20,7 @@
 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 .\" MA 02111, USA.
 .\"
 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 .\" MA 02111, USA.
 .\"
-.TH PCRS 3 "4 March 2002" "pcrs-0.0.1"
+.TH PCRS 3 "2 December 2003" "pcrs-0.0.3"
 .SH NAME
 pcrs - Perl-compatible regular substitution.
 .SH SYNOPSIS
 .SH NAME
 pcrs - Perl-compatible regular substitution.
 .SH SYNOPSIS
@@ -251,21 +251,26 @@ Unsupported options are silently ignored.
 
 .RI "The first " subject_length " bytes following " subject " are processed, so"
 .RI  "a " subject_length " that exceeds the actual " subject " is dangerous."
 
 .RI "The first " subject_length " bytes following " subject " are processed, so"
 .RI  "a " subject_length " that exceeds the actual " subject " is dangerous."
-Note that if you want to get your zero-terminated C strings back including their
-.RI "termination, you must let " subject_length " include the binary zero, i.e."
-set it to
-.BI strlen( subject ") + 1."
+.RI "Note that for zero-terminated C strings, you should set " subject_length " to"
+.BI strlen( subject ) \fR,
+so that the dollar metacharacter matches at the end of the string, not after
+the string-terminating null byte. For convenience, an extra null byte is
+appended to the result so it can again be used as a string.
 
 .RI "The " subject " itself is left untouched, and the " *result " is dynamically"
 .RB "allocated, so it is the caller's responsibility to " free() " it when it's"
 no longer needed.
 
 
 .RI "The " subject " itself is left untouched, and the " *result " is dynamically"
 .RB "allocated, so it is the caller's responsibility to " free() " it when it's"
 no longer needed.
 
-.RI "The result's length is written to " *result_length "."
+.RI "The result's length (excluding the extra null byte) is written to " *result_length "."
 
 .RB "If the job matched, the " PCRS_SUCCESS " flag in"
 .IB job ->flags
 is set.
 
 
 .RB "If the job matched, the " PCRS_SUCCESS " flag in"
 .IB job ->flags
 is set.
 
+
+.SS String subjects
+If your 
+
 .SS Return value and diagnostics
 
 .RB "On success, " pcrs_execute() " returns the number of substitutions that"
 .SS Return value and diagnostics
 
 .RB "On success, " pcrs_execute() " returns the number of substitutions that"
@@ -419,9 +424,9 @@ int main(int Argc, char **Argv)
       fprintf(stderr, "%s: compile error:  %s (%d).\\n", Argv[0], pcrs_strerror(err), err);
    }
 
       fprintf(stderr, "%s: compile error:  %s (%d).\\n", Argv[0], pcrs_strerror(err), err);
    }
 
-   if (0 > (err = pcrs_execute(job, Argv[2], strlen(Argv[2]) + 1, &result, &newsize)))
+   if (0 > (err = pcrs_execute(job, Argv[2], strlen(Argv[2]), &result, &newsize)))
    {
    {
-      fprintf(stderr, "%s: Exec error:  %s (%d).\\n", Argv[0], pcrs_strerror(err), err);
+      fprintf(stderr, "%s: exec error:  %s (%d).\\n", Argv[0], pcrs_strerror(err), err);
    }
    else
    {
    }
    else
    {
@@ -446,6 +451,10 @@ The number of capturing subpatterns is currently limited to 33, which
 is a Bad Thing[tm]. It should be dynamically expanded until it reaches the
 .SM PCRE
 limit of 99.
 is a Bad Thing[tm]. It should be dynamically expanded until it reaches the
 .SM PCRE
 limit of 99.
+.br
+This limitation is particularly embarassing since
+.SM PCRE
+3.5 has raised the capturing subpattern limit to 65K.
 
 All of the above values can be adjusted in the "Capacity" section
 .RB "of " pcrs.h "."
 
 All of the above values can be adjusted in the "Capacity" section
 .RB "of " pcrs.h "."
@@ -459,8 +468,8 @@ and should be considered high risk.
 
 .SH HISTORY
 .SM PCRS
 
 .SH HISTORY
 .SM PCRS
-was originally written for the Internet Junkbuster project
-(http://sourceforge.net/projects/ijbswa/).
+was originally written for the Privoxy project
+(http://www.privoxy.org/).
 
 .SH SEE ALSO
 .B PCRE(3), perl(1), perlre(1)
 
 .SH SEE ALSO
 .B PCRE(3), perl(1), perlre(1)
@@ -468,7 +477,7 @@ was originally written for the Internet Junkbuster project
 .SH AUTHOR
 
 .SM PCRS
 .SH AUTHOR
 
 .SM PCRS
-is Copyright 2000, 2001 by Andreas Oesterhelt <andreas@oesterhelt.org> and is
+is Copyright 2000 - 2003 by Andreas Oesterhelt <andreas@oesterhelt.org> and is
 licensed under the terms of the GNU Lesser General Public License (LGPL),
 version 2.1, which should be included in this distribution, with the exception
 that the permission to replace that license with the GNU General Public
 licensed under the terms of the GNU Lesser General Public License (LGPL),
 version 2.1, which should be included in this distribution, with the exception
 that the permission to replace that license with the GNU General Public
index f1b8961..df8319e 100644 (file)
@@ -1,71 +1,86 @@
 %PDF-1.3
 %âãÏÓ
 %PDF-1.3
 %âãÏÓ
-1 0 obj<</Producer(htmldoc 1.8.21 Copyright 1997-2002 Easy Software Products, All Rights Reserved.)/CreationDate(D:20020905171830+0400)/Title(Privoxy Developer Manual)/Creator(Modular DocBook HTML Stylesheet Version 1.76b+)>>endobj
+1 0 obj<</Producer(htmldoc 1.8.23 Copyright 1997-2002 Easy Software Products, All Rights Reserved.)/CreationDate(D:20040131004423-0100)/Title(Privoxy Developer Manual)/Creator(Modular DocBook HTML Stylesheet Version 1.7)>>endobj
 2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
 3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
 2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
 3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
-4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Oblique/Encoding 2 0 R>>endobj
-5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
-6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
-7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj
-8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
-9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
-10 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
-11 0 obj<</Subtype/Link/Rect[72.0 601.7 104.4 611.7]/Border[0 0 0]/Dest[432 0 R/XYZ 0 734 0]>>endobj
-12 0 obj<</S/URI/URI(http://www.privoxy.org)>>endobj
-13 0 obj<</Subtype/Link/Rect[160.5 601.7 226.3 611.7]/Border[0 0 0]/A 12 0 R>>endobj
-14 0 obj<</S/URI/URI(http://www.privoxy.org/developer-manual/)>>endobj
-15 0 obj<</Subtype/Link/Rect[326.8 468.2 522.1 481.2]/Border[0 0 0]/A 14 0 R>>endobj
-16 0 obj<</Subtype/Link/Rect[86.0 455.0 173.1 468.0]/Border[0 0 0]/Dest[428 0 R/XYZ 0 734 0]>>endobj
-17 0 obj[11 0 R
-13 0 R
-15 0 R
-16 0 R]endobj
-18 0 obj<</Subtype/Link/Rect[72.0 684.0 142.9 697.0]/Border[0 0 0]/Dest[354 0 R/XYZ 0 734 0]>>endobj
-19 0 obj<</Subtype/Link/Rect[108.0 670.8 284.0 683.8]/Border[0 0 0]/Dest[354 0 R/XYZ 0 589 0]>>endobj
-20 0 obj<</Subtype/Link/Rect[72.0 644.4 180.2 657.4]/Border[0 0 0]/Dest[356 0 R/XYZ 0 734 0]>>endobj
-21 0 obj<</Subtype/Link/Rect[108.0 631.2 193.9 644.2]/Border[0 0 0]/Dest[356 0 R/XYZ 0 655 0]>>endobj
-22 0 obj<</Subtype/Link/Rect[108.0 618.0 168.2 631.0]/Border[0 0 0]/Dest[356 0 R/XYZ 0 553 0]>>endobj
-23 0 obj<</Subtype/Link/Rect[108.0 604.8 237.9 617.8]/Border[0 0 0]/Dest[356 0 R/XYZ 0 346 0]>>endobj
-24 0 obj<</Subtype/Link/Rect[72.0 578.4 208.0 591.4]/Border[0 0 0]/Dest[360 0 R/XYZ 0 734 0]>>endobj
-25 0 obj<</Subtype/Link/Rect[108.0 565.2 279.4 578.2]/Border[0 0 0]/Dest[360 0 R/XYZ 0 127 0]>>endobj
-26 0 obj<</Subtype/Link/Rect[108.0 552.0 258.0 565.0]/Border[0 0 0]/Dest[362 0 R/XYZ 0 254 0]>>endobj
-27 0 obj<</Subtype/Link/Rect[108.0 538.8 235.4 551.8]/Border[0 0 0]/Dest[364 0 R/XYZ 0 256 0]>>endobj
-28 0 obj<</Subtype/Link/Rect[72.0 512.4 170.1 525.4]/Border[0 0 0]/Dest[368 0 R/XYZ 0 734 0]>>endobj
-29 0 obj<</Subtype/Link/Rect[108.0 499.2 181.6 512.2]/Border[0 0 0]/Dest[368 0 R/XYZ 0 696 0]>>endobj
-30 0 obj<</Subtype/Link/Rect[108.0 486.0 204.0 499.0]/Border[0 0 0]/Dest[368 0 R/XYZ 0 555 0]>>endobj
-31 0 obj<</Subtype/Link/Rect[126.0 472.8 294.7 485.8]/Border[0 0 0]/Dest[368 0 R/XYZ 0 521 0]>>endobj
-32 0 obj<</Subtype/Link/Rect[126.0 459.6 265.6 472.6]/Border[0 0 0]/Dest[368 0 R/XYZ 0 140 0]>>endobj
-33 0 obj<</Subtype/Link/Rect[126.0 446.4 304.7 459.4]/Border[0 0 0]/Dest[370 0 R/XYZ 0 367 0]>>endobj
-34 0 obj<</Subtype/Link/Rect[126.0 433.2 273.0 446.2]/Border[0 0 0]/Dest[372 0 R/XYZ 0 489 0]>>endobj
-35 0 obj<</Subtype/Link/Rect[126.0 420.0 314.5 433.0]/Border[0 0 0]/Dest[372 0 R/XYZ 0 311 0]>>endobj
-36 0 obj<</Subtype/Link/Rect[126.0 406.8 482.8 419.8]/Border[0 0 0]/Dest[372 0 R/XYZ 0 147 0]>>endobj
-37 0 obj<</Subtype/Link/Rect[108.0 393.6 221.1 406.6]/Border[0 0 0]/Dest[374 0 R/XYZ 0 443 0]>>endobj
-38 0 obj<</Subtype/Link/Rect[126.0 380.4 224.7 393.4]/Border[0 0 0]/Dest[374 0 R/XYZ 0 409 0]>>endobj
-39 0 obj<</Subtype/Link/Rect[126.0 367.2 225.9 380.2]/Border[0 0 0]/Dest[374 0 R/XYZ 0 192 0]>>endobj
-40 0 obj<</Subtype/Link/Rect[126.0 354.0 251.9 367.0]/Border[0 0 0]/Dest[376 0 R/XYZ 0 641 0]>>endobj
-41 0 obj<</Subtype/Link/Rect[126.0 340.8 276.0 353.8]/Border[0 0 0]/Dest[376 0 R/XYZ 0 404 0]>>endobj
-42 0 obj<</Subtype/Link/Rect[126.0 327.6 196.9 340.6]/Border[0 0 0]/Dest[378 0 R/XYZ 0 734 0]>>endobj
-43 0 obj<</Subtype/Link/Rect[108.0 314.4 182.5 327.4]/Border[0 0 0]/Dest[378 0 R/XYZ 0 433 0]>>endobj
-44 0 obj<</Subtype/Link/Rect[126.0 301.2 307.8 314.2]/Border[0 0 0]/Dest[378 0 R/XYZ 0 399 0]>>endobj
-45 0 obj<</Subtype/Link/Rect[126.0 288.0 348.4 301.0]/Border[0 0 0]/Dest[380 0 R/XYZ 0 587 0]>>endobj
-46 0 obj<</Subtype/Link/Rect[126.0 274.8 353.4 287.8]/Border[0 0 0]/Dest[380 0 R/XYZ 0 234 0]>>endobj
-47 0 obj<</Subtype/Link/Rect[126.0 261.6 329.7 274.6]/Border[0 0 0]/Dest[382 0 R/XYZ 0 718 0]>>endobj
-48 0 obj<</Subtype/Link/Rect[126.0 248.4 367.5 261.4]/Border[0 0 0]/Dest[382 0 R/XYZ 0 505 0]>>endobj
-49 0 obj<</Subtype/Link/Rect[126.0 235.2 341.1 248.2]/Border[0 0 0]/Dest[382 0 R/XYZ 0 279 0]>>endobj
-50 0 obj<</Subtype/Link/Rect[126.0 222.0 270.5 235.0]/Border[0 0 0]/Dest[384 0 R/XYZ 0 613 0]>>endobj
-51 0 obj<</Subtype/Link/Rect[108.0 208.8 175.5 221.8]/Border[0 0 0]/Dest[384 0 R/XYZ 0 243 0]>>endobj
-52 0 obj<</Subtype/Link/Rect[126.0 195.6 248.8 208.6]/Border[0 0 0]/Dest[384 0 R/XYZ 0 209 0]>>endobj
-53 0 obj<</Subtype/Link/Rect[108.0 182.4 170.6 195.4]/Border[0 0 0]/Dest[386 0 R/XYZ 0 639 0]>>endobj
-54 0 obj<</Subtype/Link/Rect[126.0 169.2 379.3 182.2]/Border[0 0 0]/Dest[386 0 R/XYZ 0 605 0]>>endobj
-55 0 obj<</Subtype/Link/Rect[126.0 156.0 345.3 169.0]/Border[0 0 0]/Dest[386 0 R/XYZ 0 445 0]>>endobj
-56 0 obj<</Subtype/Link/Rect[126.0 142.8 407.4 155.8]/Border[0 0 0]/Dest[386 0 R/XYZ 0 347 0]>>endobj
-57 0 obj<</Subtype/Link/Rect[126.0 129.6 313.9 142.6]/Border[0 0 0]/Dest[388 0 R/XYZ 0 585 0]>>endobj
-58 0 obj<</Subtype/Link/Rect[126.0 116.4 267.2 129.4]/Border[0 0 0]/Dest[388 0 R/XYZ 0 407 0]>>endobj
-59 0 obj<</Subtype/Link/Rect[126.0 103.2 252.8 116.2]/Border[0 0 0]/Dest[388 0 R/XYZ 0 270 0]>>endobj
-60 0 obj<</Subtype/Link/Rect[126.0 90.0 317.6 103.0]/Border[0 0 0]/Dest[390 0 R/XYZ 0 654 0]>>endobj
-61 0 obj<</Subtype/Link/Rect[126.0 76.8 306.7 89.8]/Border[0 0 0]/Dest[390 0 R/XYZ 0 444 0]>>endobj
-62 0 obj<</Subtype/Link/Rect[126.0 63.6 454.4 76.6]/Border[0 0 0]/Dest[390 0 R/XYZ 0 196 0]>>endobj
-63 0 obj[18 0 R
+4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
+5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
+6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Oblique/Encoding 2 0 R>>endobj
+7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
+8 0 obj<</Subtype/Link/Rect[72.0 644.2 95.8 651.8]/Border[0 0 0]/Dest[393 0 R/XYZ 0 734 0]>>endobj
+9 0 obj<</S/URI/URI(http://www.privoxy.org)>>endobj
+10 0 obj<</Subtype/Link/Rect[138.2 644.2 187.6 651.8]/Border[0 0 0]/A 9 0 R>>endobj
+11 0 obj<</S/URI/URI(http://www.privoxy.org/developer-manual/)>>endobj
+12 0 obj<</Subtype/Link/Rect[193.4 556.6 344.8 566.6]/Border[0 0 0]/A 11 0 R>>endobj
+13 0 obj<</Subtype/Link/Rect[388.8 556.6 459.5 566.6]/Border[0 0 0]/Dest[391 0 R/XYZ 0 734 0]>>endobj
+14 0 obj[8 0 R
+10 0 R
+12 0 R
+13 0 R]endobj
+15 0 obj<</Subtype/Link/Rect[72.0 698.8 127.6 708.8]/Border[0 0 0]/Dest[339 0 R/XYZ 0 734 0]>>endobj
+16 0 obj<</Subtype/Link/Rect[108.0 689.2 246.3 699.2]/Border[0 0 0]/Dest[339 0 R/XYZ 0 648 0]>>endobj
+17 0 obj<</Subtype/Link/Rect[72.0 670.0 157.8 680.0]/Border[0 0 0]/Dest[341 0 R/XYZ 0 734 0]>>endobj
+18 0 obj<</Subtype/Link/Rect[108.0 660.4 176.9 670.4]/Border[0 0 0]/Dest[341 0 R/XYZ 0 677 0]>>endobj
+19 0 obj<</Subtype/Link/Rect[108.0 650.8 157.4 660.8]/Border[0 0 0]/Dest[341 0 R/XYZ 0 613 0]>>endobj
+20 0 obj<</Subtype/Link/Rect[108.0 641.2 209.8 651.2]/Border[0 0 0]/Dest[341 0 R/XYZ 0 443 0]>>endobj
+21 0 obj<</Subtype/Link/Rect[72.0 622.0 182.2 632.0]/Border[0 0 0]/Dest[343 0 R/XYZ 0 734 0]>>endobj
+22 0 obj<</Subtype/Link/Rect[108.0 612.4 242.7 622.4]/Border[0 0 0]/Dest[343 0 R/XYZ 0 369 0]>>endobj
+23 0 obj<</Subtype/Link/Rect[108.0 602.8 225.8 612.8]/Border[0 0 0]/Dest[345 0 R/XYZ 0 693 0]>>endobj
+24 0 obj<</Subtype/Link/Rect[108.0 593.2 208.0 603.2]/Border[0 0 0]/Dest[345 0 R/XYZ 0 236 0]>>endobj
+25 0 obj<</Subtype/Link/Rect[72.0 574.0 151.6 584.0]/Border[0 0 0]/Dest[349 0 R/XYZ 0 734 0]>>endobj
+26 0 obj<</Subtype/Link/Rect[108.0 564.4 165.4 574.4]/Border[0 0 0]/Dest[349 0 R/XYZ 0 707 0]>>endobj
+27 0 obj<</Subtype/Link/Rect[108.0 554.8 184.9 564.8]/Border[0 0 0]/Dest[349 0 R/XYZ 0 624 0]>>endobj
+28 0 obj<</Subtype/Link/Rect[126.0 545.2 261.2 555.2]/Border[0 0 0]/Dest[349 0 R/XYZ 0 601 0]>>endobj
+29 0 obj<</Subtype/Link/Rect[126.0 535.6 238.0 545.6]/Border[0 0 0]/Dest[349 0 R/XYZ 0 330 0]>>endobj
+30 0 obj<</Subtype/Link/Rect[126.0 526.0 268.3 536.0]/Border[0 0 0]/Dest[351 0 R/XYZ 0 684 0]>>endobj
+31 0 obj<</Subtype/Link/Rect[126.0 516.4 244.7 526.4]/Border[0 0 0]/Dest[351 0 R/XYZ 0 280 0]>>endobj
+32 0 obj<</Subtype/Link/Rect[126.0 506.8 273.2 516.8]/Border[0 0 0]/Dest[351 0 R/XYZ 0 180 0]>>endobj
+33 0 obj<</Subtype/Link/Rect[126.0 497.2 415.9 507.2]/Border[0 0 0]/Dest[353 0 R/XYZ 0 734 0]>>endobj
+34 0 obj<</Subtype/Link/Rect[108.0 487.6 197.8 497.6]/Border[0 0 0]/Dest[353 0 R/XYZ 0 488 0]>>endobj
+35 0 obj<</Subtype/Link/Rect[126.0 478.0 205.1 488.0]/Border[0 0 0]/Dest[353 0 R/XYZ 0 465 0]>>endobj
+36 0 obj<</Subtype/Link/Rect[126.0 468.4 206.5 478.4]/Border[0 0 0]/Dest[353 0 R/XYZ 0 305 0]>>endobj
+37 0 obj<</Subtype/Link/Rect[126.0 458.8 226.5 468.8]/Border[0 0 0]/Dest[353 0 R/XYZ 0 137 0]>>endobj
+38 0 obj<</Subtype/Link/Rect[126.0 449.2 247.8 459.2]/Border[0 0 0]/Dest[355 0 R/XYZ 0 647 0]>>endobj
+39 0 obj<</Subtype/Link/Rect[126.0 439.6 184.3 449.6]/Border[0 0 0]/Dest[355 0 R/XYZ 0 428 0]>>endobj
+40 0 obj<</Subtype/Link/Rect[108.0 430.0 168.9 440.0]/Border[0 0 0]/Dest[355 0 R/XYZ 0 217 0]>>endobj
+41 0 obj<</Subtype/Link/Rect[126.0 420.4 274.5 430.4]/Border[0 0 0]/Dest[355 0 R/XYZ 0 193 0]>>endobj
+42 0 obj<</Subtype/Link/Rect[126.0 410.8 303.0 420.8]/Border[0 0 0]/Dest[357 0 R/XYZ 0 519 0]>>endobj
+43 0 obj<</Subtype/Link/Rect[126.0 401.2 308.5 411.2]/Border[0 0 0]/Dest[357 0 R/XYZ 0 271 0]>>endobj
+44 0 obj<</Subtype/Link/Rect[126.0 391.6 291.4 401.6]/Border[0 0 0]/Dest[357 0 R/XYZ 0 141 0]>>endobj
+45 0 obj<</Subtype/Link/Rect[126.0 382.0 322.7 392.0]/Border[0 0 0]/Dest[359 0 R/XYZ 0 655 0]>>endobj
+46 0 obj<</Subtype/Link/Rect[126.0 372.4 299.0 382.4]/Border[0 0 0]/Dest[359 0 R/XYZ 0 490 0]>>endobj
+47 0 obj<</Subtype/Link/Rect[126.0 362.8 243.4 372.8]/Border[0 0 0]/Dest[359 0 R/XYZ 0 251 0]>>endobj
+48 0 obj<</Subtype/Link/Rect[108.0 353.2 158.7 363.2]/Border[0 0 0]/Dest[361 0 R/XYZ 0 655 0]>>endobj
+49 0 obj<</Subtype/Link/Rect[126.0 343.6 221.6 353.6]/Border[0 0 0]/Dest[361 0 R/XYZ 0 632 0]>>endobj
+50 0 obj<</Subtype/Link/Rect[108.0 334.0 158.2 344.0]/Border[0 0 0]/Dest[361 0 R/XYZ 0 457 0]>>endobj
+51 0 obj<</Subtype/Link/Rect[126.0 324.4 331.9 334.4]/Border[0 0 0]/Dest[361 0 R/XYZ 0 433 0]>>endobj
+52 0 obj<</Subtype/Link/Rect[126.0 314.8 298.5 324.8]/Border[0 0 0]/Dest[361 0 R/XYZ 0 316 0]>>endobj
+53 0 obj<</Subtype/Link/Rect[126.0 305.2 346.5 315.2]/Border[0 0 0]/Dest[361 0 R/XYZ 0 245 0]>>endobj
+54 0 obj<</Subtype/Link/Rect[126.0 295.6 280.7 305.6]/Border[0 0 0]/Dest[363 0 R/XYZ 0 623 0]>>endobj
+55 0 obj<</Subtype/Link/Rect[126.0 286.0 241.2 296.0]/Border[0 0 0]/Dest[363 0 R/XYZ 0 514 0]>>endobj
+56 0 obj<</Subtype/Link/Rect[126.0 276.4 226.5 286.4]/Border[0 0 0]/Dest[363 0 R/XYZ 0 423 0]>>endobj
+57 0 obj<</Subtype/Link/Rect[126.0 266.8 275.8 276.8]/Border[0 0 0]/Dest[363 0 R/XYZ 0 228 0]>>endobj
+58 0 obj<</Subtype/Link/Rect[126.0 257.2 270.0 267.2]/Border[0 0 0]/Dest[365 0 R/XYZ 0 734 0]>>endobj
+59 0 obj<</Subtype/Link/Rect[126.0 247.6 389.7 257.6]/Border[0 0 0]/Dest[365 0 R/XYZ 0 551 0]>>endobj
+60 0 obj<</Subtype/Link/Rect[108.0 238.0 214.7 248.0]/Border[0 0 0]/Dest[365 0 R/XYZ 0 370 0]>>endobj
+61 0 obj<</Subtype/Link/Rect[126.0 228.4 210.0 238.4]/Border[0 0 0]/Dest[365 0 R/XYZ 0 346 0]>>endobj
+62 0 obj<</Subtype/Link/Rect[126.0 218.8 315.0 228.8]/Border[0 0 0]/Dest[365 0 R/XYZ 0 275 0]>>endobj
+63 0 obj<</Subtype/Link/Rect[126.0 209.2 344.8 219.2]/Border[0 0 0]/Dest[367 0 R/XYZ 0 634 0]>>endobj
+64 0 obj<</Subtype/Link/Rect[126.0 199.6 266.4 209.6]/Border[0 0 0]/Dest[367 0 R/XYZ 0 496 0]>>endobj
+65 0 obj<</Subtype/Link/Rect[126.0 190.0 261.8 200.0]/Border[0 0 0]/Dest[367 0 R/XYZ 0 406 0]>>endobj
+66 0 obj<</Subtype/Link/Rect[126.0 180.4 318.1 190.4]/Border[0 0 0]/Dest[367 0 R/XYZ 0 325 0]>>endobj
+67 0 obj<</Subtype/Link/Rect[126.0 170.8 244.7 180.8]/Border[0 0 0]/Dest[369 0 R/XYZ 0 734 0]>>endobj
+68 0 obj<</Subtype/Link/Rect[126.0 161.2 394.9 171.2]/Border[0 0 0]/Dest[369 0 R/XYZ 0 605 0]>>endobj
+69 0 obj<</Subtype/Link/Rect[126.0 151.6 322.3 161.6]/Border[0 0 0]/Dest[369 0 R/XYZ 0 419 0]>>endobj
+70 0 obj<</Subtype/Link/Rect[126.0 142.0 388.3 152.0]/Border[0 0 0]/Dest[369 0 R/XYZ 0 329 0]>>endobj
+71 0 obj<</Subtype/Link/Rect[108.0 132.4 336.1 142.4]/Border[0 0 0]/Dest[369 0 R/XYZ 0 142 0]>>endobj
+72 0 obj<</Subtype/Link/Rect[72.0 113.2 152.5 123.2]/Border[0 0 0]/Dest[375 0 R/XYZ 0 734 0]>>endobj
+73 0 obj<</Subtype/Link/Rect[108.0 103.6 198.3 113.6]/Border[0 0 0]/Dest[375 0 R/XYZ 0 686 0]>>endobj
+74 0 obj<</Subtype/Link/Rect[108.0 94.0 166.2 104.0]/Border[0 0 0]/Dest[375 0 R/XYZ 0 517 0]>>endobj
+75 0 obj[15 0 R
+16 0 R
+17 0 R
+18 0 R
 19 0 R
 20 0 R
 21 0 R
 19 0 R
 20 0 R
 21 0 R
 59 0 R
 60 0 R
 61 0 R
 59 0 R
 60 0 R
 61 0 R
-62 0 R]endobj
-64 0 obj<</Subtype/Link/Rect[72.0 684.0 170.1 697.0]/Border[0 0 0]/Dest[368 0 R/XYZ 0 734 0]>>endobj
-65 0 obj<</Subtype/Link/Rect[108.0 670.8 239.7 683.8]/Border[0 0 0]/Dest[392 0 R/XYZ 0 595 0]>>endobj
-66 0 obj<</Subtype/Link/Rect[126.0 657.6 231.7 670.6]/Border[0 0 0]/Dest[392 0 R/XYZ 0 562 0]>>endobj
-67 0 obj<</Subtype/Link/Rect[126.0 644.4 360.3 657.4]/Border[0 0 0]/Dest[392 0 R/XYZ 0 464 0]>>endobj
-68 0 obj<</Subtype/Link/Rect[126.0 631.2 400.4 644.2]/Border[0 0 0]/Dest[394 0 R/XYZ 0 679 0]>>endobj
-69 0 obj<</Subtype/Link/Rect[126.0 618.0 302.3 631.0]/Border[0 0 0]/Dest[394 0 R/XYZ 0 475 0]>>endobj
-70 0 obj<</Subtype/Link/Rect[126.0 604.8 295.7 617.8]/Border[0 0 0]/Dest[394 0 R/XYZ 0 337 0]>>endobj
-71 0 obj<</Subtype/Link/Rect[126.0 591.6 365.2 604.6]/Border[0 0 0]/Dest[394 0 R/XYZ 0 226 0]>>endobj
-72 0 obj<</Subtype/Link/Rect[126.0 578.4 276.3 591.4]/Border[0 0 0]/Dest[396 0 R/XYZ 0 560 0]>>endobj
-73 0 obj<</Subtype/Link/Rect[126.0 565.2 461.7 578.2]/Border[0 0 0]/Dest[396 0 R/XYZ 0 385 0]>>endobj
-74 0 obj<</Subtype/Link/Rect[126.0 552.0 373.6 565.0]/Border[0 0 0]/Dest[398 0 R/XYZ 0 734 0]>>endobj
-75 0 obj<</Subtype/Link/Rect[126.0 538.8 454.5 551.8]/Border[0 0 0]/Dest[398 0 R/XYZ 0 596 0]>>endobj
-76 0 obj<</Subtype/Link/Rect[108.0 525.6 397.0 538.6]/Border[0 0 0]/Dest[398 0 R/XYZ 0 296 0]>>endobj
-77 0 obj<</Subtype/Link/Rect[72.0 499.2 170.7 512.2]/Border[0 0 0]/Dest[406 0 R/XYZ 0 734 0]>>endobj
-78 0 obj<</Subtype/Link/Rect[108.0 486.0 218.3 499.0]/Border[0 0 0]/Dest[406 0 R/XYZ 0 668 0]>>endobj
-79 0 obj<</Subtype/Link/Rect[108.0 472.8 179.5 485.8]/Border[0 0 0]/Dest[406 0 R/XYZ 0 421 0]>>endobj
-80 0 obj<</Subtype/Link/Rect[72.0 446.4 199.4 459.4]/Border[0 0 0]/Dest[408 0 R/XYZ 0 734 0]>>endobj
-81 0 obj<</Subtype/Link/Rect[108.0 433.2 202.7 446.2]/Border[0 0 0]/Dest[408 0 R/XYZ 0 575 0]>>endobj
-82 0 obj<</Subtype/Link/Rect[108.0 420.0 245.5 433.0]/Border[0 0 0]/Dest[410 0 R/XYZ 0 734 0]>>endobj
-83 0 obj<</Subtype/Link/Rect[108.0 406.8 290.4 419.8]/Border[0 0 0]/Dest[410 0 R/XYZ 0 196 0]>>endobj
-84 0 obj<</Subtype/Link/Rect[126.0 393.6 274.8 406.6]/Border[0 0 0]/Dest[412 0 R/XYZ 0 580 0]>>endobj
-85 0 obj<</Subtype/Link/Rect[126.0 380.4 218.6 393.4]/Border[0 0 0]/Dest[414 0 R/XYZ 0 639 0]>>endobj
-86 0 obj<</Subtype/Link/Rect[126.0 367.2 305.1 380.2]/Border[0 0 0]/Dest[414 0 R/XYZ 0 384 0]>>endobj
-87 0 obj<</Subtype/Link/Rect[126.0 354.0 176.1 367.0]/Border[0 0 0]/Dest[416 0 R/XYZ 0 665 0]>>endobj
-88 0 obj<</Subtype/Link/Rect[126.0 340.8 184.1 353.8]/Border[0 0 0]/Dest[416 0 R/XYZ 0 275 0]>>endobj
-89 0 obj<</Subtype/Link/Rect[126.0 327.6 195.7 340.6]/Border[0 0 0]/Dest[418 0 R/XYZ 0 679 0]>>endobj
-90 0 obj<</Subtype/Link/Rect[126.0 314.4 185.3 327.4]/Border[0 0 0]/Dest[418 0 R/XYZ 0 411 0]>>endobj
-91 0 obj<</Subtype/Link/Rect[126.0 301.2 197.8 314.2]/Border[0 0 0]/Dest[418 0 R/XYZ 0 179 0]>>endobj
-92 0 obj<</Subtype/Link/Rect[126.0 288.0 194.4 301.0]/Border[0 0 0]/Dest[420 0 R/XYZ 0 522 0]>>endobj
-93 0 obj<</Subtype/Link/Rect[126.0 274.8 208.9 287.8]/Border[0 0 0]/Dest[420 0 R/XYZ 0 253 0]>>endobj
-94 0 obj<</Subtype/Link/Rect[126.0 261.6 205.8 274.6]/Border[0 0 0]/Dest[422 0 R/XYZ 0 734 0]>>endobj
-95 0 obj<</Subtype/Link/Rect[126.0 248.4 178.5 261.4]/Border[0 0 0]/Dest[422 0 R/XYZ 0 598 0]>>endobj
-96 0 obj<</Subtype/Link/Rect[108.0 235.2 303.2 248.2]/Border[0 0 0]/Dest[422 0 R/XYZ 0 329 0]>>endobj
-97 0 obj<</Subtype/Link/Rect[108.0 222.0 203.6 235.0]/Border[0 0 0]/Dest[424 0 R/XYZ 0 652 0]>>endobj
-98 0 obj<</Subtype/Link/Rect[72.0 195.6 188.7 208.6]/Border[0 0 0]/Dest[426 0 R/XYZ 0 734 0]>>endobj
-99 0 obj<</Subtype/Link/Rect[72.0 169.2 384.9 182.2]/Border[0 0 0]/Dest[428 0 R/XYZ 0 734 0]>>endobj
-100 0 obj<</Subtype/Link/Rect[108.0 156.0 180.7 169.0]/Border[0 0 0]/Dest[428 0 R/XYZ 0 631 0]>>endobj
-101 0 obj<</Subtype/Link/Rect[108.0 142.8 182.6 155.8]/Border[0 0 0]/Dest[428 0 R/XYZ 0 516 0]>>endobj
-102 0 obj<</Subtype/Link/Rect[108.0 129.6 226.2 142.6]/Border[0 0 0]/Dest[428 0 R/XYZ 0 282 0]>>endobj
-103 0 obj<</Subtype/Link/Rect[108.0 116.4 338.5 129.4]/Border[0 0 0]/Dest[428 0 R/XYZ 0 207 0]>>endobj
-104 0 obj<</Subtype/Link/Rect[108.0 103.2 152.3 116.2]/Border[0 0 0]/Dest[430 0 R/XYZ 0 734 0]>>endobj
-105 0 obj[64 0 R
+62 0 R
+63 0 R
+64 0 R
 65 0 R
 66 0 R
 67 0 R
 65 0 R
 66 0 R
 67 0 R
 71 0 R
 72 0 R
 73 0 R
 71 0 R
 72 0 R
 73 0 R
-74 0 R
-75 0 R
-76 0 R
+74 0 R]endobj
+76 0 obj<</Subtype/Link/Rect[72.0 698.8 175.6 708.8]/Border[0 0 0]/Dest[377 0 R/XYZ 0 734 0]>>endobj
+77 0 obj<</Subtype/Link/Rect[108.0 689.2 184.0 699.2]/Border[0 0 0]/Dest[377 0 R/XYZ 0 619 0]>>endobj
+78 0 obj<</Subtype/Link/Rect[108.0 679.6 221.4 689.6]/Border[0 0 0]/Dest[377 0 R/XYZ 0 238 0]>>endobj
+79 0 obj<</Subtype/Link/Rect[108.0 670.0 256.1 680.0]/Border[0 0 0]/Dest[379 0 R/XYZ 0 588 0]>>endobj
+80 0 obj<</Subtype/Link/Rect[126.0 660.4 244.3 670.4]/Border[0 0 0]/Dest[379 0 R/XYZ 0 402 0]>>endobj
+81 0 obj<</Subtype/Link/Rect[126.0 650.8 200.3 660.8]/Border[0 0 0]/Dest[381 0 R/XYZ 0 664 0]>>endobj
+82 0 obj<</Subtype/Link/Rect[126.0 641.2 269.6 651.2]/Border[0 0 0]/Dest[381 0 R/XYZ 0 476 0]>>endobj
+83 0 obj<</Subtype/Link/Rect[126.0 631.6 166.5 641.6]/Border[0 0 0]/Dest[381 0 R/XYZ 0 210 0]>>endobj
+84 0 obj<</Subtype/Link/Rect[126.0 622.0 172.7 632.0]/Border[0 0 0]/Dest[383 0 R/XYZ 0 614 0]>>endobj
+85 0 obj<</Subtype/Link/Rect[126.0 612.4 180.7 622.4]/Border[0 0 0]/Dest[383 0 R/XYZ 0 416 0]>>endobj
+86 0 obj<</Subtype/Link/Rect[126.0 602.8 173.6 612.8]/Border[0 0 0]/Dest[383 0 R/XYZ 0 238 0]>>endobj
+87 0 obj<</Subtype/Link/Rect[126.0 593.2 182.5 603.2]/Border[0 0 0]/Dest[385 0 R/XYZ 0 734 0]>>endobj
+88 0 obj<</Subtype/Link/Rect[126.0 583.6 181.1 593.6]/Border[0 0 0]/Dest[385 0 R/XYZ 0 497 0]>>endobj
+89 0 obj<</Subtype/Link/Rect[126.0 574.0 190.7 584.0]/Border[0 0 0]/Dest[385 0 R/XYZ 0 299 0]>>endobj
+90 0 obj<</Subtype/Link/Rect[126.0 564.4 189.1 574.4]/Border[0 0 0]/Dest[385 0 R/XYZ 0 199 0]>>endobj
+91 0 obj<</Subtype/Link/Rect[126.0 554.8 165.6 564.8]/Border[0 0 0]/Dest[387 0 R/XYZ 0 734 0]>>endobj
+92 0 obj<</Subtype/Link/Rect[108.0 545.2 265.4 555.2]/Border[0 0 0]/Dest[387 0 R/XYZ 0 535 0]>>endobj
+93 0 obj<</Subtype/Link/Rect[108.0 535.6 185.4 545.6]/Border[0 0 0]/Dest[387 0 R/XYZ 0 318 0]>>endobj
+94 0 obj<</Subtype/Link/Rect[72.0 516.4 165.4 526.4]/Border[0 0 0]/Dest[389 0 R/XYZ 0 734 0]>>endobj
+95 0 obj<</Subtype/Link/Rect[72.0 497.2 327.2 507.2]/Border[0 0 0]/Dest[391 0 R/XYZ 0 734 0]>>endobj
+96 0 obj<</Subtype/Link/Rect[108.0 487.6 166.7 497.6]/Border[0 0 0]/Dest[391 0 R/XYZ 0 677 0]>>endobj
+97 0 obj<</Subtype/Link/Rect[108.0 478.0 168.0 488.0]/Border[0 0 0]/Dest[391 0 R/XYZ 0 613 0]>>endobj
+98 0 obj<</Subtype/Link/Rect[108.0 468.4 205.4 478.4]/Border[0 0 0]/Dest[391 0 R/XYZ 0 472 0]>>endobj
+99 0 obj<</Subtype/Link/Rect[108.0 458.8 291.9 468.8]/Border[0 0 0]/Dest[391 0 R/XYZ 0 418 0]>>endobj
+100 0 obj<</Subtype/Link/Rect[108.0 449.2 143.6 459.2]/Border[0 0 0]/Dest[391 0 R/XYZ 0 325 0]>>endobj
+101 0 obj<</Subtype/Link/Rect[72.0 430.0 230.3 440.0]/Border[0 0 0]/Dest[393 0 R/XYZ 0 734 0]>>endobj
+102 0 obj<</Subtype/Link/Rect[108.0 420.4 151.1 430.4]/Border[0 0 0]/Dest[393 0 R/XYZ 0 657 0]>>endobj
+103 0 obj<</Subtype/Link/Rect[108.0 410.8 148.5 420.8]/Border[0 0 0]/Dest[393 0 R/XYZ 0 497 0]>>endobj
+104 0 obj<</Subtype/Link/Rect[72.0 391.6 117.8 401.6]/Border[0 0 0]/Dest[395 0 R/XYZ 0 734 0]>>endobj
+105 0 obj[76 0 R
 77 0 R
 78 0 R
 79 0 R
 77 0 R
 78 0 R
 79 0 R
 102 0 R
 103 0 R
 104 0 R]endobj
 102 0 R
 103 0 R
 104 0 R]endobj
-106 0 obj<</Subtype/Link/Rect[72.0 684.0 270.3 697.0]/Border[0 0 0]/Dest[432 0 R/XYZ 0 734 0]>>endobj
-107 0 obj<</Subtype/Link/Rect[108.0 670.8 161.5 683.8]/Border[0 0 0]/Dest[432 0 R/XYZ 0 628 0]>>endobj
-108 0 obj<</Subtype/Link/Rect[108.0 657.6 160.2 670.6]/Border[0 0 0]/Dest[432 0 R/XYZ 0 381 0]>>endobj
-109 0 obj<</Subtype/Link/Rect[72.0 631.2 125.5 644.2]/Border[0 0 0]/Dest[434 0 R/XYZ 0 734 0]>>endobj
-110 0 obj[106 0 R
-107 0 R
-108 0 R
-109 0 R]endobj
-111 0 obj<</S/URI/URI(http://sourceforge.net/)>>endobj
-112 0 obj<</Subtype/Link/Rect[186.4 542.6 242.9 555.6]/Border[0 0 0]/A 111 0 R>>endobj
-113 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
-114 0 obj<</Subtype/Link/Rect[441.8 542.6 474.2 555.6]/Border[0 0 0]/A 113 0 R>>endobj
-115 0 obj[112 0 R
-114 0 R]endobj
-116 0 obj<</S/URI/URI(http://sourceforge.net/)>>endobj
-117 0 obj<</Subtype/Link/Rect[255.5 608.6 317.2 621.6]/Border[0 0 0]/A 116 0 R>>endobj
-118 0 obj<</S/URI/URI(http://sourceforge.net/docman/?group_id=1)>>endobj
-119 0 obj<</Subtype/Link/Rect[484.9 608.6 524.2 621.6]/Border[0 0 0]/A 118 0 R>>endobj
-120 0 obj<</S/URI/URI(http://sourceforge.net/docman/?group_id=1)>>endobj
-121 0 obj<</Subtype/Link/Rect[72.0 595.4 137.4 608.4]/Border[0 0 0]/A 120 0 R>>endobj
-122 0 obj<</S/URI/URI(http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/)>>endobj
-123 0 obj<</Subtype/Link/Rect[72.0 480.6 310.7 493.6]/Border[0 0 0]/A 122 0 R>>endobj
-124 0 obj<</Subtype/Link/Rect[72.0 361.8 149.9 374.8]/Border[0 0 0]/Dest[408 0 R/XYZ 0 575 0]>>endobj
-125 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?atid=311118&group_id=11118&func=browse)>>endobj
-126 0 obj<</Subtype/Link/Rect[167.0 75.4 226.8 88.4]/Border[0 0 0]/A 125 0 R>>endobj
-127 0 obj[117 0 R
+106 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
+107 0 obj<</Subtype/Link/Rect[163.2 614.8 245.6 624.8]/Border[0 0 0]/A 106 0 R>>endobj
+108 0 obj[107 0 R]endobj
+109 0 obj<</S/URI/URI(http://sourceforge.net/)>>endobj
+110 0 obj<</Subtype/Link/Rect[218.9 643.6 269.6 653.6]/Border[0 0 0]/A 109 0 R>>endobj
+111 0 obj<</S/URI/URI(http://sourceforge.net/docman/?group_id=1)>>endobj
+112 0 obj<</Subtype/Link/Rect[407.5 643.6 494.8 653.6]/Border[0 0 0]/A 111 0 R>>endobj
+113 0 obj<</S/URI/URI(http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/)>>endobj
+114 0 obj<</Subtype/Link/Rect[353.0 570.2 542.2 580.2]/Border[0 0 0]/A 113 0 R>>endobj
+115 0 obj<</Subtype/Link/Rect[352.1 503.0 416.1 513.0]/Border[0 0 0]/Dest[377 0 R/XYZ 0 619 0]>>endobj
+116 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?atid=311118&group_id=11118&func=browse)>>endobj
+117 0 obj<</Subtype/Link/Rect[515.3 256.7 537.1 266.7]/Border[0 0 0]/A 116 0 R>>endobj
+118 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?atid=311118&group_id=11118&func=browse)>>endobj
+119 0 obj<</Subtype/Link/Rect[108.0 247.1 132.4 257.1]/Border[0 0 0]/A 118 0 R>>endobj
+120 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=311118)>>endobj
+121 0 obj<</Subtype/Link/Rect[108.0 151.1 324.6 161.1]/Border[0 0 0]/A 120 0 R>>endobj
+122 0 obj[110 0 R
+112 0 R
+114 0 R
+115 0 R
+117 0 R
 119 0 R
 119 0 R
-121 0 R
-123 0 R
-124 0 R
-126 0 R]endobj
-128 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=311118)>>endobj
-129 0 obj<</Subtype/Link/Rect[108.0 589.0 381.6 602.0]/Border[0 0 0]/A 128 0 R>>endobj
-130 0 obj[129 0 R]endobj
-131 0 obj<</S/URI/URI(http://www.docbook.org)>>endobj
-132 0 obj<</Subtype/Link/Rect[112.6 670.6 155.7 683.6]/Border[0 0 0]/A 131 0 R>>endobj
-133 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-134 0 obj<</Subtype/Link/Rect[72.0 644.2 131.4 657.2]/Border[0 0 0]/A 133 0 R>>endobj
-135 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-faq.pdf)>>endobj
-136 0 obj<</Subtype/Link/Rect[134.1 644.2 158.3 657.2]/Border[0 0 0]/A 135 0 R>>endobj
-137 0 obj[132 0 R
-134 0 R
-136 0 R]endobj
-138 0 obj<</S/URI/URI(http://www.bureau-cornavin.com/opensource/crash-course/)>>endobj
-139 0 obj<</Subtype/Link/Rect[167.5 270.0 428.3 283.0]/Border[0 0 0]/A 138 0 R>>endobj
-140 0 obj[139 0 R]endobj
-141 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=add&group_id=11118&atid=395005)>>endobj
-142 0 obj<</Subtype/Link/Rect[244.9 375.0 287.1 388.0]/Border[0 0 0]/A 141 0 R>>endobj
+121 0 R]endobj
+123 0 obj<</S/URI/URI(http://www.docbook.org)>>endobj
+124 0 obj<</Subtype/Link/Rect[479.1 697.8 512.9 707.8]/Border[0 0 0]/A 123 0 R>>endobj
+125 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+126 0 obj<</Subtype/Link/Rect[256.1 678.6 304.8 688.6]/Border[0 0 0]/A 125 0 R>>endobj
+127 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-faq.pdf)>>endobj
+128 0 obj<</Subtype/Link/Rect[307.0 678.6 325.6 688.6]/Border[0 0 0]/A 127 0 R>>endobj
+129 0 obj[124 0 R
+126 0 R
+128 0 R]endobj
+130 0 obj<</S/URI/URI(http://www.bureau-cornavin.com/opensource/crash-course/)>>endobj
+131 0 obj<</Subtype/Link/Rect[145.1 704.8 349.4 714.8]/Border[0 0 0]/A 130 0 R>>endobj
+132 0 obj[131 0 R]endobj
+133 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=add&group_id=11118&atid=395005)>>endobj
+134 0 obj<</Subtype/Link/Rect[211.2 483.8 244.5 493.8]/Border[0 0 0]/A 133 0 R>>endobj
+135 0 obj[134 0 R]endobj
+136 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
+137 0 obj<</Subtype/Link/Rect[374.3 387.6 398.8 397.6]/Border[0 0 0]/A 136 0 R>>endobj
+138 0 obj<</S/URI/URI(http://www.xworkplace.org/)>>endobj
+139 0 obj<</Subtype/Link/Rect[416.1 111.4 458.4 121.4]/Border[0 0 0]/A 138 0 R>>endobj
+140 0 obj[137 0 R
+139 0 R]endobj
+141 0 obj<</S/URI/URI(http://www.cygwin.com/)>>endobj
+142 0 obj<</Subtype/Link/Rect[294.3 385.0 380.1 395.0]/Border[0 0 0]/A 141 0 R>>endobj
 143 0 obj[142 0 R]endobj
 143 0 obj[142 0 R]endobj
-144 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
-145 0 obj<</Subtype/Link/Rect[316.5 235.6 350.2 248.6]/Border[0 0 0]/A 144 0 R>>endobj
-146 0 obj[145 0 R]endobj
-147 0 obj<</S/URI/URI(http://www.xworkplace.org/)>>endobj
-148 0 obj<</Subtype/Link/Rect[362.2 516.5 416.3 529.5]/Border[0 0 0]/A 147 0 R>>endobj
-149 0 obj[148 0 R]endobj
-150 0 obj<</S/URI/URI(http://www.cygwin.com/)>>endobj
-151 0 obj<</Subtype/Link/Rect[351.9 636.2 464.6 649.2]/Border[0 0 0]/A 150 0 R>>endobj
-152 0 obj[151 0 R]endobj
-153 0 obj<</S/URI/URI(ftp://upload.sourceforge.net/incoming)>>endobj
-154 0 obj<</Subtype/Link/Rect[154.8 243.5 324.3 256.5]/Border[0 0 0]/A 153 0 R>>endobj
-155 0 obj<</S/URI/URI(http://sourceforge.net/project/admin/editpackages.php?group_id=11118)>>endobj
-156 0 obj<</Subtype/Link/Rect[163.0 164.3 481.8 177.3]/Border[0 0 0]/A 155 0 R>>endobj
-157 0 obj[154 0 R
-156 0 R]endobj
-158 0 obj<</S/URI/URI(mailto:ijbswa-announce@lists.sourceforge.net)>>endobj
-159 0 obj<</Subtype/Link/Rect[500.9 606.2 545.8 619.2]/Border[0 0 0]/A 158 0 R>>endobj
-160 0 obj<</S/URI/URI(mailto:ijbswa-announce@lists.sourceforge.net)>>endobj
-161 0 obj<</Subtype/Link/Rect[72.0 593.0 121.8 606.0]/Border[0 0 0]/A 160 0 R>>endobj
-162 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
-163 0 obj<</Subtype/Link/Rect[446.4 593.0 530.7 606.0]/Border[0 0 0]/A 162 0 R>>endobj
-164 0 obj[159 0 R
+144 0 obj<</S/URI/URI(ftp://upload.sourceforge.net/incoming)>>endobj
+145 0 obj<</Subtype/Link/Rect[144.5 483.3 278.3 493.3]/Border[0 0 0]/A 144 0 R>>endobj
+146 0 obj<</S/URI/URI(http://sourceforge.net/project/admin/editpackages.php?group_id=11118)>>endobj
+147 0 obj<</Subtype/Link/Rect[145.8 425.7 401.3 435.7]/Border[0 0 0]/A 146 0 R>>endobj
+148 0 obj<</S/URI/URI(mailto:ijbswa-announce@lists.sourceforge.net)>>endobj
+149 0 obj<</Subtype/Link/Rect[421.1 285.0 498.0 295.0]/Border[0 0 0]/A 148 0 R>>endobj
+150 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
+151 0 obj<</Subtype/Link/Rect[290.7 275.4 356.9 285.4]/Border[0 0 0]/A 150 0 R>>endobj
+152 0 obj[145 0 R
+147 0 R
+149 0 R
+151 0 R]endobj
+153 0 obj<</S/URI/URI(http://www.privoxy.org/)>>endobj
+154 0 obj<</Subtype/Link/Rect[160.0 493.7 212.5 503.7]/Border[0 0 0]/A 153 0 R>>endobj
+155 0 obj[154 0 R]endobj
+156 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=211118)>>endobj
+157 0 obj<</Subtype/Link/Rect[147.1 643.6 256.1 653.6]/Border[0 0 0]/A 156 0 R>>endobj
+158 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=211118)>>endobj
+159 0 obj<</Subtype/Link/Rect[340.1 643.6 558.9 653.6]/Border[0 0 0]/A 158 0 R>>endobj
+160 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-users)>>endobj
+161 0 obj<</Subtype/Link/Rect[290.3 624.4 351.6 634.4]/Border[0 0 0]/A 160 0 R>>endobj
+162 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=111118)>>endobj
+163 0 obj<</Subtype/Link/Rect[253.9 579.8 472.7 589.8]/Border[0 0 0]/A 162 0 R>>endobj
+164 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=add&group_id=11118&atid=111118)>>endobj
+165 0 obj<</Subtype/Link/Rect[526.9 560.6 552.7 570.6]/Border[0 0 0]/A 164 0 R>>endobj
+166 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=add&group_id=11118&atid=111118)>>endobj
+167 0 obj<</Subtype/Link/Rect[72.0 551.0 88.0 561.0]/Border[0 0 0]/A 166 0 R>>endobj
+168 0 obj<</S/Launch/F(toggle?mini=y&set=disabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
+169 0 obj<</Subtype/Link/Rect[390.4 531.8 431.7 541.8]/Border[0 0 0]/A 168 0 R>>endobj
+170 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/appendix.html#ACTIONSANAT)>>endobj
+171 0 obj<</Subtype/Link/Rect[117.8 522.2 221.0 532.2]/Border[0 0 0]/A 170 0 R>>endobj
+172 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/installation.html)>>endobj
+173 0 obj<</Subtype/Link/Rect[109.4 483.8 212.5 493.8]/Border[0 0 0]/A 172 0 R>>endobj
+174 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?atid=361118&group_id=11118)>>endobj
+175 0 obj<</Subtype/Link/Rect[72.0 429.5 288.6 439.5]/Border[0 0 0]/A 174 0 R>>endobj
+176 0 obj<</S/Launch/F(actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
+177 0 obj<</Subtype/Link/Rect[337.1 375.3 447.8 385.3]/Border[0 0 0]/A 176 0 R>>endobj
+178 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-announce)>>endobj
+179 0 obj<</Subtype/Link/Rect[72.0 336.9 134.0 346.9]/Border[0 0 0]/A 178 0 R>>endobj
+180 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
+181 0 obj<</Subtype/Link/Rect[240.7 336.9 284.8 346.9]/Border[0 0 0]/A 180 0 R>>endobj
+182 0 obj<</S/URI/URI(http://sf.net/projects/ijbswa/)>>endobj
+183 0 obj<</Subtype/Link/Rect[307.4 336.9 353.7 346.9]/Border[0 0 0]/A 182 0 R>>endobj
+184 0 obj<</S/URI/URI(http://sourceforge.net/mail/?group_id=11118)>>endobj
+185 0 obj<</Subtype/Link/Rect[72.0 273.1 229.2 283.1]/Border[0 0 0]/A 184 0 R>>endobj
+186 0 obj[157 0 R
+159 0 R
 161 0 R
 161 0 R
-163 0 R]endobj
-165 0 obj<</S/URI/URI(http://www.privoxy.org/)>>endobj
-166 0 obj<</Subtype/Link/Rect[185.4 366.1 249.5 379.1]/Border[0 0 0]/A 165 0 R>>endobj
-167 0 obj[166 0 R]endobj
-168 0 obj<</S/URI/URI(http://sourceforge.net/)>>endobj
-169 0 obj<</Subtype/Link/Rect[239.1 584.6 298.1 597.6]/Border[0 0 0]/A 168 0 R>>endobj
-170 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=211118)>>endobj
-171 0 obj<</Subtype/Link/Rect[72.0 571.4 345.6 584.4]/Border[0 0 0]/A 170 0 R>>endobj
-172 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-users)>>endobj
-173 0 obj<</Subtype/Link/Rect[341.1 545.0 419.1 558.0]/Border[0 0 0]/A 172 0 R>>endobj
-174 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=111118)>>endobj
-175 0 obj<</Subtype/Link/Rect[72.0 456.6 345.6 469.6]/Border[0 0 0]/A 174 0 R>>endobj
-176 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=add&group_id=11118&atid=111118)>>endobj
-177 0 obj<</Subtype/Link/Rect[165.2 417.0 222.0 430.0]/Border[0 0 0]/A 176 0 R>>endobj
-178 0 obj<</S/Launch/F(toggle?mini=y&set=disabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
-179 0 obj<</Subtype/Link/Rect[474.4 390.6 529.4 403.6]/Border[0 0 0]/A 178 0 R>>endobj
-180 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/appendix.html#ACTIONSANAT)>>endobj
-181 0 obj<</Subtype/Link/Rect[268.4 377.4 395.8 390.4]/Border[0 0 0]/A 180 0 R>>endobj
-182 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/installation.html)>>endobj
-183 0 obj<</Subtype/Link/Rect[244.0 311.4 370.8 324.4]/Border[0 0 0]/A 182 0 R>>endobj
-184 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?atid=361118&group_id=11118)>>endobj
-185 0 obj<</Subtype/Link/Rect[147.7 223.0 424.1 236.0]/Border[0 0 0]/A 184 0 R>>endobj
-186 0 obj<</S/Launch/F(actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
-187 0 obj<</Subtype/Link/Rect[72.0 134.6 213.8 147.6]/Border[0 0 0]/A 186 0 R>>endobj
-188 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-announce)>>endobj
-189 0 obj<</Subtype/Link/Rect[182.6 81.8 262.4 94.8]/Border[0 0 0]/A 188 0 R>>endobj
-190 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
-191 0 obj<</Subtype/Link/Rect[397.5 81.8 453.1 94.8]/Border[0 0 0]/A 190 0 R>>endobj
-192 0 obj<</S/URI/URI(http://sf.net/projects/ijbswa/)>>endobj
-193 0 obj<</Subtype/Link/Rect[482.4 81.8 539.2 94.8]/Border[0 0 0]/A 192 0 R>>endobj
-194 0 obj[169 0 R
+163 0 R
+165 0 R
+167 0 R
+169 0 R
 171 0 R
 173 0 R
 175 0 R
 171 0 R
 173 0 R
 175 0 R
 179 0 R
 181 0 R
 183 0 R
 179 0 R
 181 0 R
 183 0 R
-185 0 R
-187 0 R
-189 0 R
-191 0 R
-193 0 R]endobj
-195 0 obj<</S/URI/URI(http://sourceforge.net/mail/?group_id=11118)>>endobj
-196 0 obj<</Subtype/Link/Rect[319.0 661.0 520.1 674.0]/Border[0 0 0]/A 195 0 R>>endobj
-197 0 obj[196 0 R]endobj
-198 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
-199 0 obj<</Subtype/Link/Rect[293.5 683.8 438.7 696.8]/Border[0 0 0]/A 198 0 R>>endobj
-200 0 obj<</S/URI/URI(http://www.gnu.org/copyleft/gpl.html)>>endobj
-201 0 obj<</Subtype/Link/Rect[246.4 476.6 379.0 489.6]/Border[0 0 0]/A 200 0 R>>endobj
-202 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
-203 0 obj<</Subtype/Link/Rect[207.6 335.4 295.0 348.4]/Border[0 0 0]/A 202 0 R>>endobj
-204 0 obj<</S/URI/URI(http://www.junkbusters.com/)>>endobj
-205 0 obj<</Subtype/Link/Rect[420.6 335.4 531.2 348.4]/Border[0 0 0]/A 204 0 R>>endobj
-206 0 obj<</S/URI/URI(http://www.junkbusters.com/ijbdist.html#release)>>endobj
-207 0 obj<</Subtype/Link/Rect[379.7 269.4 413.0 282.4]/Border[0 0 0]/A 206 0 R>>endobj
-208 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
-209 0 obj<</Subtype/Link/Rect[479.6 269.4 534.2 282.4]/Border[0 0 0]/A 208 0 R>>endobj
-210 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
-211 0 obj<</Subtype/Link/Rect[72.0 256.2 125.2 269.2]/Border[0 0 0]/A 210 0 R>>endobj
-212 0 obj<</S/URI/URI(http://www.gnu.org/licenses/gpl.html)>>endobj
-213 0 obj<</Subtype/Link/Rect[344.5 256.2 368.0 269.2]/Border[0 0 0]/A 212 0 R>>endobj
-214 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
-215 0 obj<</Subtype/Link/Rect[259.3 216.6 408.1 229.6]/Border[0 0 0]/A 214 0 R>>endobj
-216 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/copyright.html#AUTHORS)>>endobj
-217 0 obj<</Subtype/Link/Rect[123.3 137.4 173.7 150.4]/Border[0 0 0]/A 216 0 R>>endobj
-218 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/introduction.html#FEATURES)>>endobj
-219 0 obj<</Subtype/Link/Rect[219.6 124.2 278.2 137.2]/Border[0 0 0]/A 218 0 R>>endobj
-220 0 obj[199 0 R
-201 0 R
-203 0 R
-205 0 R
-207 0 R
-209 0 R
+185 0 R]endobj
+187 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
+188 0 obj<</Subtype/Link/Rect[250.1 697.8 355.7 707.8]/Border[0 0 0]/A 187 0 R>>endobj
+189 0 obj<</S/URI/URI(http://www.gnu.org/copyleft/gpl.html)>>endobj
+190 0 obj<</Subtype/Link/Rect[212.1 557.2 316.6 567.2]/Border[0 0 0]/A 189 0 R>>endobj
+191 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
+192 0 obj<</Subtype/Link/Rect[181.4 464.6 252.1 474.6]/Border[0 0 0]/A 191 0 R>>endobj
+193 0 obj<</S/URI/URI(http://www.junkbusters.com/)>>endobj
+194 0 obj<</Subtype/Link/Rect[353.0 464.6 442.4 474.6]/Border[0 0 0]/A 193 0 R>>endobj
+195 0 obj<</S/URI/URI(http://www.junkbusters.com/ijbdist.html#release)>>endobj
+196 0 obj<</Subtype/Link/Rect[151.6 416.6 180.0 426.6]/Border[0 0 0]/A 195 0 R>>endobj
+197 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
+198 0 obj<</Subtype/Link/Rect[232.1 416.6 321.4 426.6]/Border[0 0 0]/A 197 0 R>>endobj
+199 0 obj<</S/URI/URI(http://www.gnu.org/licenses/gpl.html)>>endobj
+200 0 obj<</Subtype/Link/Rect[498.8 416.6 517.1 426.6]/Border[0 0 0]/A 199 0 R>>endobj
+201 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
+202 0 obj<</Subtype/Link/Rect[222.7 387.8 340.6 397.8]/Border[0 0 0]/A 201 0 R>>endobj
+203 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/copyright.html#AUTHORS)>>endobj
+204 0 obj<</Subtype/Link/Rect[114.2 339.8 155.6 349.8]/Border[0 0 0]/A 203 0 R>>endobj
+205 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/introduction.html#FEATURES)>>endobj
+206 0 obj<</Subtype/Link/Rect[91.6 330.2 139.6 340.2]/Border[0 0 0]/A 205 0 R>>endobj
+207 0 obj[188 0 R
+190 0 R
+192 0 R
+194 0 R
+196 0 R
+198 0 R
+200 0 R
+202 0 R
+204 0 R
+206 0 R]endobj
+208 0 obj<</S/URI/URI(http://www.privoxy.org/)>>endobj
+209 0 obj<</Subtype/Link/Rect[73.4 677.2 154.3 687.2]/Border[0 0 0]/A 208 0 R>>endobj
+210 0 obj<</S/URI/URI(http://www.privoxy.org/faq/)>>endobj
+211 0 obj<</Subtype/Link/Rect[73.4 655.1 167.7 665.1]/Border[0 0 0]/A 210 0 R>>endobj
+212 0 obj<</S/URI/URI(http://sourceforge.net/projects/ijbswa/)>>endobj
+213 0 obj<</Subtype/Link/Rect[73.4 633.0 205.9 643.0]/Border[0 0 0]/A 212 0 R>>endobj
+214 0 obj<</S/URI/URI(http://sourceforge.net)>>endobj
+215 0 obj<</Subtype/Link/Rect[320.7 633.0 369.1 643.0]/Border[0 0 0]/A 214 0 R>>endobj
+216 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
+217 0 obj<</Subtype/Link/Rect[73.4 611.0 158.4 621.0]/Border[0 0 0]/A 216 0 R>>endobj
+218 0 obj<</S/URI/URI(http://p.p/)>>endobj
+219 0 obj<</Subtype/Link/Rect[448.9 611.0 484.5 621.0]/Border[0 0 0]/A 218 0 R>>endobj
+220 0 obj<</S/Launch/F(actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
+221 0 obj<</Subtype/Link/Rect[73.4 588.9 181.9 598.9]/Border[0 0 0]/A 220 0 R>>endobj
+222 0 obj<</S/URI/URI(http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/)>>endobj
+223 0 obj<</Subtype/Link/Rect[73.4 566.9 286.6 576.9]/Border[0 0 0]/A 222 0 R>>endobj
+224 0 obj<</S/URI/URI(http://www.junkbusters.com/ht/en/cookies.html)>>endobj
+225 0 obj<</Subtype/Link/Rect[73.4 544.8 237.9 554.8]/Border[0 0 0]/A 224 0 R>>endobj
+226 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
+227 0 obj<</Subtype/Link/Rect[73.4 522.7 198.8 532.7]/Border[0 0 0]/A 226 0 R>>endobj
+228 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
+229 0 obj<</Subtype/Link/Rect[73.4 500.7 198.8 510.7]/Border[0 0 0]/A 228 0 R>>endobj
+230 0 obj<</S/URI/URI(http://privacy.net/analyze/)>>endobj
+231 0 obj<</Subtype/Link/Rect[73.4 478.6 164.1 488.6]/Border[0 0 0]/A 230 0 R>>endobj
+232 0 obj<</S/URI/URI(http://www.squid-cache.org/)>>endobj
+233 0 obj<</Subtype/Link/Rect[73.4 456.5 174.1 466.5]/Border[0 0 0]/A 232 0 R>>endobj
+234 0 obj<</S/URI/URI(http://www.privoxy.org/developer-manual/)>>endobj
+235 0 obj<</Subtype/Link/Rect[73.4 434.5 222.6 444.5]/Border[0 0 0]/A 234 0 R>>endobj
+236 0 obj[209 0 R
 211 0 R
 213 0 R
 215 0 R
 217 0 R
 211 0 R
 213 0 R
 215 0 R
 217 0 R
-219 0 R]endobj
-221 0 obj<</S/URI/URI(http://www.privoxy.org/)>>endobj
-222 0 obj<</Subtype/Link/Rect[73.4 656.0 181.0 669.0]/Border[0 0 0]/A 221 0 R>>endobj
-223 0 obj<</S/URI/URI(http://www.privoxy.org/faq/)>>endobj
-224 0 obj<</Subtype/Link/Rect[73.4 626.7 198.1 639.7]/Border[0 0 0]/A 223 0 R>>endobj
-225 0 obj<</S/URI/URI(http://sourceforge.net/projects/ijbswa/)>>endobj
-226 0 obj<</Subtype/Link/Rect[73.4 597.4 240.6 610.4]/Border[0 0 0]/A 225 0 R>>endobj
-227 0 obj<</S/URI/URI(http://sourceforge.net)>>endobj
-228 0 obj<</Subtype/Link/Rect[384.5 597.4 443.4 610.4]/Border[0 0 0]/A 227 0 R>>endobj
-229 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
-230 0 obj<</Subtype/Link/Rect[73.4 568.2 185.3 581.2]/Border[0 0 0]/A 229 0 R>>endobj
-231 0 obj<</S/URI/URI(http://p.p/)>>endobj
-232 0 obj<</Subtype/Link/Rect[73.4 555.0 116.5 568.0]/Border[0 0 0]/A 231 0 R>>endobj
-233 0 obj<</S/Launch/F(actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
-234 0 obj<</Subtype/Link/Rect[73.4 525.7 215.2 538.7]/Border[0 0 0]/A 233 0 R>>endobj
-235 0 obj<</S/URI/URI(http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/)>>endobj
-236 0 obj<</Subtype/Link/Rect[73.4 496.4 346.4 509.4]/Border[0 0 0]/A 235 0 R>>endobj
-237 0 obj<</S/URI/URI(http://www.junkbusters.com/ht/en/cookies.html)>>endobj
-238 0 obj<</Subtype/Link/Rect[73.4 467.2 283.4 480.2]/Border[0 0 0]/A 237 0 R>>endobj
-239 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
-240 0 obj<</Subtype/Link/Rect[73.4 437.9 236.3 450.9]/Border[0 0 0]/A 239 0 R>>endobj
-241 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
-242 0 obj<</Subtype/Link/Rect[73.4 408.6 235.4 421.6]/Border[0 0 0]/A 241 0 R>>endobj
-243 0 obj<</S/URI/URI(http://privacy.net/analyze/)>>endobj
-244 0 obj<</Subtype/Link/Rect[73.4 366.2 188.6 379.2]/Border[0 0 0]/A 243 0 R>>endobj
-245 0 obj<</S/URI/URI(http://www.squid-cache.org/)>>endobj
-246 0 obj<</Subtype/Link/Rect[73.4 323.7 201.8 336.7]/Border[0 0 0]/A 245 0 R>>endobj
-247 0 obj<</S/URI/URI(http://www.privoxy.org/developer-manual/)>>endobj
-248 0 obj<</Subtype/Link/Rect[73.4 294.5 266.0 307.5]/Border[0 0 0]/A 247 0 R>>endobj
-249 0 obj[222 0 R
-224 0 R
-226 0 R
-228 0 R
-230 0 R
-232 0 R
-234 0 R
-236 0 R
-238 0 R
-240 0 R
-242 0 R
-244 0 R
-246 0 R
-248 0 R]endobj
-250 0 obj<</Dests 251 0 R>>endobj
-251 0 obj<</Kids[252 0 R]>>endobj
-252 0 obj<</Limits[(aen1170)(webserver-update)]/Names[(aen1170)253 0 R(aen1186)254 0 R(aen2)255 0 R(aen233)256 0 R(aen9)257 0 R(afterrelease)258 0 R(beforerelease)259 0 R(body.html)260 0 R(coding)261 0 R(contact)262 0 R(contact-ads)263 0 R(contact-bugs)264 0 R(contact-feature)265 0 R(contact-other)266 0 R(contact-support)267 0 R(copyright)268 0 R(cvs)269 0 R(cvsaccess)270 0 R(cvsbranches)271 0 R(cvscommit)272 0 R(docstyle)273 0 R(documentation)274 0 R(introduction)275 0 R(newrelease)276 0 R(newrelease-aix)277 0 R(newrelease-amiga)278 0 R(newrelease-debian)279 0 R(newrelease-freebsd)280 0 R(newrelease-hpux)281 0 R(newrelease-macosx)282 0 R(newrelease-os2)283 0 R(newrelease-rpm)284 0 R(newrelease-solaris)285 0 R(newrelease-tarball)286 0 R(newrelease-windows)287 0 R(pack-guidelines)288 0 R(quickstart)289 0 R(releasing)290 0 R(s1)291 0 R(s10)292 0 R(s11)293 0 R(s12)294 0 R(s13)295 0 R(s14)296 0 R(s15)297 0 R(s16)298 0 R(s17)299 0 R(s18)300 0 R(s19)301 0 R(s2)302 0 R(s20)303 0 R(s21)304 0 R(s22)305 0 R(s23)306 0 R(s24)307 0 R(s25)308 0 R(s26)309 0 R(s27)310 0 R(s28)311 0 R(s29)312 0 R(s3)313 0 R(s30)314 0 R(s31)315 0 R(s32)316 0 R(s33)317 0 R(s34)318 0 R(s35)319 0 R(s36)320 0 R(s37)321 0 R(s38)322 0 R(s39)323 0 R(s4)324 0 R(s40)325 0 R(s41)326 0 R(s42)327 0 R(s43)328 0 R(s44)329 0 R(s45)330 0 R(s46)331 0 R(s5)332 0 R(s6)333 0 R(s7)334 0 R(s8)335 0 R(s9)336 0 R(seealso)337 0 R(sgml)338 0 R(testing)339 0 R(testing-plan)340 0 R(testing-report)341 0 R(therelease)342 0 R(versionnumbers)343 0 R(webserver-update)344 0 R]>>endobj
-253 0 obj<</D[432 0 R/XYZ 0 628 0]>>endobj
-254 0 obj<</D[432 0 R/XYZ 0 381 0]>>endobj
-255 0 obj<</D[346 0 R/XYZ 0 689 0]>>endobj
-256 0 obj<</D[364 0 R/XYZ 0 256 0]>>endobj
-257 0 obj<</D[346 0 R/XYZ 0 560 0]>>endobj
-258 0 obj<</D[424 0 R/XYZ 0 652 0]>>endobj
-259 0 obj<</D[410 0 R/XYZ 0 734 0]>>endobj
-260 0 obj<</D[354 0 R/XYZ 0 734 0]>>endobj
-261 0 obj<</D[368 0 R/XYZ 0 734 0]>>endobj
-262 0 obj<</D[428 0 R/XYZ 0 734 0]>>endobj
-263 0 obj<</D[428 0 R/XYZ 0 207 0]>>endobj
-264 0 obj<</D[428 0 R/XYZ 0 516 0]>>endobj
-265 0 obj<</D[428 0 R/XYZ 0 282 0]>>endobj
-266 0 obj<</D[430 0 R/XYZ 0 734 0]>>endobj
-267 0 obj<</D[428 0 R/XYZ 0 631 0]>>endobj
-268 0 obj<</D[432 0 R/XYZ 0 734 0]>>endobj
-269 0 obj<</D[356 0 R/XYZ 0 734 0]>>endobj
-270 0 obj<</D[356 0 R/XYZ 0 655 0]>>endobj
-271 0 obj<</D[356 0 R/XYZ 0 553 0]>>endobj
-272 0 obj<</D[356 0 R/XYZ 0 346 0]>>endobj
-273 0 obj<</D[362 0 R/XYZ 0 254 0]>>endobj
-274 0 obj<</D[360 0 R/XYZ 0 734 0]>>endobj
-275 0 obj<</D[354 0 R/XYZ 0 734 0]>>endobj
-276 0 obj<</D[408 0 R/XYZ 0 734 0]>>endobj
-277 0 obj<</D[422 0 R/XYZ 0 598 0]>>endobj
-278 0 obj<</D[422 0 R/XYZ 0 734 0]>>endobj
-279 0 obj<</D[418 0 R/XYZ 0 411 0]>>endobj
-280 0 obj<</D[420 0 R/XYZ 0 522 0]>>endobj
-281 0 obj<</D[420 0 R/XYZ 0 253 0]>>endobj
-282 0 obj<</D[418 0 R/XYZ 0 179 0]>>endobj
-283 0 obj<</D[416 0 R/XYZ 0 665 0]>>endobj
-284 0 obj<</D[414 0 R/XYZ 0 384 0]>>endobj
-285 0 obj<</D[416 0 R/XYZ 0 275 0]>>endobj
-286 0 obj<</D[414 0 R/XYZ 0 639 0]>>endobj
-287 0 obj<</D[418 0 R/XYZ 0 679 0]>>endobj
-288 0 obj<</D[412 0 R/XYZ 0 580 0]>>endobj
-289 0 obj<</D[354 0 R/XYZ 0 589 0]>>endobj
-290 0 obj<</D[422 0 R/XYZ 0 329 0]>>endobj
-291 0 obj<</D[368 0 R/XYZ 0 696 0]>>endobj
-292 0 obj<</D[374 0 R/XYZ 0 409 0]>>endobj
-293 0 obj<</D[374 0 R/XYZ 0 192 0]>>endobj
-294 0 obj<</D[376 0 R/XYZ 0 641 0]>>endobj
-295 0 obj<</D[376 0 R/XYZ 0 404 0]>>endobj
-296 0 obj<</D[378 0 R/XYZ 0 734 0]>>endobj
-297 0 obj<</D[378 0 R/XYZ 0 433 0]>>endobj
-298 0 obj<</D[378 0 R/XYZ 0 399 0]>>endobj
-299 0 obj<</D[380 0 R/XYZ 0 587 0]>>endobj
-300 0 obj<</D[380 0 R/XYZ 0 234 0]>>endobj
-301 0 obj<</D[382 0 R/XYZ 0 718 0]>>endobj
-302 0 obj<</D[368 0 R/XYZ 0 555 0]>>endobj
-303 0 obj<</D[382 0 R/XYZ 0 505 0]>>endobj
-304 0 obj<</D[382 0 R/XYZ 0 279 0]>>endobj
-305 0 obj<</D[384 0 R/XYZ 0 613 0]>>endobj
-306 0 obj<</D[384 0 R/XYZ 0 243 0]>>endobj
-307 0 obj<</D[384 0 R/XYZ 0 209 0]>>endobj
-308 0 obj<</D[386 0 R/XYZ 0 639 0]>>endobj
-309 0 obj<</D[386 0 R/XYZ 0 605 0]>>endobj
-310 0 obj<</D[386 0 R/XYZ 0 445 0]>>endobj
-311 0 obj<</D[386 0 R/XYZ 0 347 0]>>endobj
-312 0 obj<</D[388 0 R/XYZ 0 585 0]>>endobj
-313 0 obj<</D[368 0 R/XYZ 0 521 0]>>endobj
-314 0 obj<</D[388 0 R/XYZ 0 407 0]>>endobj
-315 0 obj<</D[388 0 R/XYZ 0 270 0]>>endobj
-316 0 obj<</D[390 0 R/XYZ 0 654 0]>>endobj
-317 0 obj<</D[390 0 R/XYZ 0 444 0]>>endobj
-318 0 obj<</D[390 0 R/XYZ 0 196 0]>>endobj
-319 0 obj<</D[392 0 R/XYZ 0 595 0]>>endobj
-320 0 obj<</D[392 0 R/XYZ 0 562 0]>>endobj
-321 0 obj<</D[392 0 R/XYZ 0 464 0]>>endobj
-322 0 obj<</D[394 0 R/XYZ 0 679 0]>>endobj
-323 0 obj<</D[394 0 R/XYZ 0 475 0]>>endobj
-324 0 obj<</D[368 0 R/XYZ 0 140 0]>>endobj
-325 0 obj<</D[394 0 R/XYZ 0 337 0]>>endobj
-326 0 obj<</D[394 0 R/XYZ 0 226 0]>>endobj
-327 0 obj<</D[396 0 R/XYZ 0 560 0]>>endobj
-328 0 obj<</D[396 0 R/XYZ 0 385 0]>>endobj
-329 0 obj<</D[398 0 R/XYZ 0 734 0]>>endobj
-330 0 obj<</D[398 0 R/XYZ 0 596 0]>>endobj
-331 0 obj<</D[398 0 R/XYZ 0 296 0]>>endobj
-332 0 obj<</D[370 0 R/XYZ 0 367 0]>>endobj
-333 0 obj<</D[372 0 R/XYZ 0 489 0]>>endobj
-334 0 obj<</D[372 0 R/XYZ 0 311 0]>>endobj
-335 0 obj<</D[372 0 R/XYZ 0 147 0]>>endobj
-336 0 obj<</D[374 0 R/XYZ 0 443 0]>>endobj
-337 0 obj<</D[434 0 R/XYZ 0 734 0]>>endobj
-338 0 obj<</D[360 0 R/XYZ 0 127 0]>>endobj
-339 0 obj<</D[406 0 R/XYZ 0 734 0]>>endobj
-340 0 obj<</D[406 0 R/XYZ 0 668 0]>>endobj
-341 0 obj<</D[406 0 R/XYZ 0 421 0]>>endobj
-342 0 obj<</D[410 0 R/XYZ 0 196 0]>>endobj
-343 0 obj<</D[408 0 R/XYZ 0 575 0]>>endobj
-344 0 obj<</D[426 0 R/XYZ 0 734 0]>>endobj
-345 0 obj<</Type/Pages/Count 45/Kids[346 0 R
-348 0 R
-350 0 R
-352 0 R
-354 0 R
-356 0 R
-358 0 R
-360 0 R
-362 0 R
-364 0 R
-366 0 R
-368 0 R
-370 0 R
-372 0 R
-374 0 R
-376 0 R
-378 0 R
-380 0 R
-382 0 R
-384 0 R
-386 0 R
-388 0 R
-390 0 R
-392 0 R
-394 0 R
-396 0 R
-398 0 R
-400 0 R
-402 0 R
-404 0 R
-406 0 R
-408 0 R
-410 0 R
-412 0 R
-414 0 R
-416 0 R
-418 0 R
-420 0 R
-422 0 R
-424 0 R
-426 0 R
-428 0 R
-430 0 R
-432 0 R
-434 0 R
+219 0 R
+221 0 R
+223 0 R
+225 0 R
+227 0 R
+229 0 R
+231 0 R
+233 0 R
+235 0 R]endobj
+237 0 obj<</Dests 238 0 R>>endobj
+238 0 obj<</Kids[239 0 R]>>endobj
+239 0 obj<</Limits[(aen1177)(webserver-update)]/Names[(aen1177)240 0 R(aen1193)241 0 R(aen2)242 0 R(aen233)243 0 R(aen9)244 0 R(afterrelease)245 0 R(beforerelease)246 0 R(body.html)247 0 R(coding)248 0 R(contact)249 0 R(contact-ads)250 0 R(contact-bugs)251 0 R(contact-feature)252 0 R(contact-other)253 0 R(contact-support)254 0 R(copyright)255 0 R(cvs)256 0 R(cvsaccess)257 0 R(cvsbranches)258 0 R(cvscommit)259 0 R(docstyle)260 0 R(documentation)261 0 R(introduction)262 0 R(newrelease)263 0 R(newrelease-aix)264 0 R(newrelease-amiga)265 0 R(newrelease-debian)266 0 R(newrelease-freebsd)267 0 R(newrelease-hpux)268 0 R(newrelease-macosx)269 0 R(newrelease-os2)270 0 R(newrelease-rpm)271 0 R(newrelease-solaris)272 0 R(newrelease-tarball)273 0 R(newrelease-windows)274 0 R(pack-guidelines)275 0 R(quickstart)276 0 R(releasing)277 0 R(s1)278 0 R(s10)279 0 R(s11)280 0 R(s12)281 0 R(s13)282 0 R(s14)283 0 R(s15)284 0 R(s16)285 0 R(s17)286 0 R(s18)287 0 R(s19)288 0 R(s2)289 0 R(s20)290 0 R(s21)291 0 R(s22)292 0 R(s23)293 0 R(s24)294 0 R(s25)295 0 R(s26)296 0 R(s27)297 0 R(s28)298 0 R(s29)299 0 R(s3)300 0 R(s30)301 0 R(s31)302 0 R(s32)303 0 R(s33)304 0 R(s34)305 0 R(s35)306 0 R(s36)307 0 R(s37)308 0 R(s38)309 0 R(s39)310 0 R(s4)311 0 R(s40)312 0 R(s41)313 0 R(s42)314 0 R(s43)315 0 R(s44)316 0 R(s45)317 0 R(s46)318 0 R(s5)319 0 R(s6)320 0 R(s7)321 0 R(s8)322 0 R(s9)323 0 R(seealso)324 0 R(sgml)325 0 R(testing)326 0 R(testing-plan)327 0 R(testing-report)328 0 R(therelease)329 0 R(versionnumbers)330 0 R(webserver-update)331 0 R]>>endobj
+240 0 obj<</D[393 0 R/XYZ 0 657 0]>>endobj
+241 0 obj<</D[393 0 R/XYZ 0 497 0]>>endobj
+242 0 obj<</D[333 0 R/XYZ 0 708 0]>>endobj
+243 0 obj<</D[345 0 R/XYZ 0 236 0]>>endobj
+244 0 obj<</D[333 0 R/XYZ 0 614 0]>>endobj
+245 0 obj<</D[387 0 R/XYZ 0 318 0]>>endobj
+246 0 obj<</D[377 0 R/XYZ 0 238 0]>>endobj
+247 0 obj<</D[339 0 R/XYZ 0 734 0]>>endobj
+248 0 obj<</D[349 0 R/XYZ 0 734 0]>>endobj
+249 0 obj<</D[391 0 R/XYZ 0 734 0]>>endobj
+250 0 obj<</D[391 0 R/XYZ 0 418 0]>>endobj
+251 0 obj<</D[391 0 R/XYZ 0 613 0]>>endobj
+252 0 obj<</D[391 0 R/XYZ 0 472 0]>>endobj
+253 0 obj<</D[391 0 R/XYZ 0 325 0]>>endobj
+254 0 obj<</D[391 0 R/XYZ 0 677 0]>>endobj
+255 0 obj<</D[393 0 R/XYZ 0 734 0]>>endobj
+256 0 obj<</D[341 0 R/XYZ 0 734 0]>>endobj
+257 0 obj<</D[341 0 R/XYZ 0 677 0]>>endobj
+258 0 obj<</D[341 0 R/XYZ 0 613 0]>>endobj
+259 0 obj<</D[341 0 R/XYZ 0 443 0]>>endobj
+260 0 obj<</D[345 0 R/XYZ 0 693 0]>>endobj
+261 0 obj<</D[343 0 R/XYZ 0 734 0]>>endobj
+262 0 obj<</D[339 0 R/XYZ 0 734 0]>>endobj
+263 0 obj<</D[377 0 R/XYZ 0 734 0]>>endobj
+264 0 obj<</D[387 0 R/XYZ 0 734 0]>>endobj
+265 0 obj<</D[385 0 R/XYZ 0 199 0]>>endobj
+266 0 obj<</D[383 0 R/XYZ 0 238 0]>>endobj
+267 0 obj<</D[385 0 R/XYZ 0 497 0]>>endobj
+268 0 obj<</D[385 0 R/XYZ 0 299 0]>>endobj
+269 0 obj<</D[385 0 R/XYZ 0 734 0]>>endobj
+270 0 obj<</D[381 0 R/XYZ 0 210 0]>>endobj
+271 0 obj<</D[381 0 R/XYZ 0 476 0]>>endobj
+272 0 obj<</D[383 0 R/XYZ 0 614 0]>>endobj
+273 0 obj<</D[381 0 R/XYZ 0 664 0]>>endobj
+274 0 obj<</D[383 0 R/XYZ 0 416 0]>>endobj
+275 0 obj<</D[379 0 R/XYZ 0 402 0]>>endobj
+276 0 obj<</D[339 0 R/XYZ 0 648 0]>>endobj
+277 0 obj<</D[387 0 R/XYZ 0 535 0]>>endobj
+278 0 obj<</D[349 0 R/XYZ 0 707 0]>>endobj
+279 0 obj<</D[353 0 R/XYZ 0 465 0]>>endobj
+280 0 obj<</D[353 0 R/XYZ 0 305 0]>>endobj
+281 0 obj<</D[353 0 R/XYZ 0 137 0]>>endobj
+282 0 obj<</D[355 0 R/XYZ 0 647 0]>>endobj
+283 0 obj<</D[355 0 R/XYZ 0 428 0]>>endobj
+284 0 obj<</D[355 0 R/XYZ 0 217 0]>>endobj
+285 0 obj<</D[355 0 R/XYZ 0 193 0]>>endobj
+286 0 obj<</D[357 0 R/XYZ 0 519 0]>>endobj
+287 0 obj<</D[357 0 R/XYZ 0 271 0]>>endobj
+288 0 obj<</D[357 0 R/XYZ 0 141 0]>>endobj
+289 0 obj<</D[349 0 R/XYZ 0 624 0]>>endobj
+290 0 obj<</D[359 0 R/XYZ 0 655 0]>>endobj
+291 0 obj<</D[359 0 R/XYZ 0 490 0]>>endobj
+292 0 obj<</D[359 0 R/XYZ 0 251 0]>>endobj
+293 0 obj<</D[361 0 R/XYZ 0 655 0]>>endobj
+294 0 obj<</D[361 0 R/XYZ 0 632 0]>>endobj
+295 0 obj<</D[361 0 R/XYZ 0 457 0]>>endobj
+296 0 obj<</D[361 0 R/XYZ 0 433 0]>>endobj
+297 0 obj<</D[361 0 R/XYZ 0 316 0]>>endobj
+298 0 obj<</D[361 0 R/XYZ 0 245 0]>>endobj
+299 0 obj<</D[363 0 R/XYZ 0 623 0]>>endobj
+300 0 obj<</D[349 0 R/XYZ 0 601 0]>>endobj
+301 0 obj<</D[363 0 R/XYZ 0 514 0]>>endobj
+302 0 obj<</D[363 0 R/XYZ 0 423 0]>>endobj
+303 0 obj<</D[363 0 R/XYZ 0 228 0]>>endobj
+304 0 obj<</D[365 0 R/XYZ 0 734 0]>>endobj
+305 0 obj<</D[365 0 R/XYZ 0 551 0]>>endobj
+306 0 obj<</D[365 0 R/XYZ 0 370 0]>>endobj
+307 0 obj<</D[365 0 R/XYZ 0 346 0]>>endobj
+308 0 obj<</D[365 0 R/XYZ 0 275 0]>>endobj
+309 0 obj<</D[367 0 R/XYZ 0 634 0]>>endobj
+310 0 obj<</D[367 0 R/XYZ 0 496 0]>>endobj
+311 0 obj<</D[349 0 R/XYZ 0 330 0]>>endobj
+312 0 obj<</D[367 0 R/XYZ 0 406 0]>>endobj
+313 0 obj<</D[367 0 R/XYZ 0 325 0]>>endobj
+314 0 obj<</D[369 0 R/XYZ 0 734 0]>>endobj
+315 0 obj<</D[369 0 R/XYZ 0 605 0]>>endobj
+316 0 obj<</D[369 0 R/XYZ 0 419 0]>>endobj
+317 0 obj<</D[369 0 R/XYZ 0 329 0]>>endobj
+318 0 obj<</D[369 0 R/XYZ 0 142 0]>>endobj
+319 0 obj<</D[351 0 R/XYZ 0 684 0]>>endobj
+320 0 obj<</D[351 0 R/XYZ 0 280 0]>>endobj
+321 0 obj<</D[351 0 R/XYZ 0 180 0]>>endobj
+322 0 obj<</D[353 0 R/XYZ 0 734 0]>>endobj
+323 0 obj<</D[353 0 R/XYZ 0 488 0]>>endobj
+324 0 obj<</D[395 0 R/XYZ 0 734 0]>>endobj
+325 0 obj<</D[343 0 R/XYZ 0 369 0]>>endobj
+326 0 obj<</D[375 0 R/XYZ 0 734 0]>>endobj
+327 0 obj<</D[375 0 R/XYZ 0 686 0]>>endobj
+328 0 obj<</D[375 0 R/XYZ 0 517 0]>>endobj
+329 0 obj<</D[379 0 R/XYZ 0 588 0]>>endobj
+330 0 obj<</D[377 0 R/XYZ 0 619 0]>>endobj
+331 0 obj<</D[389 0 R/XYZ 0 734 0]>>endobj
+332 0 obj<</Type/Pages/Count 32/Kids[333 0 R
+335 0 R
+337 0 R
+339 0 R
+341 0 R
+343 0 R
+345 0 R
+347 0 R
+349 0 R
+351 0 R
+353 0 R
+355 0 R
+357 0 R
+359 0 R
+361 0 R
+363 0 R
+365 0 R
+367 0 R
+369 0 R
+371 0 R
+373 0 R
+375 0 R
+377 0 R
+379 0 R
+381 0 R
+383 0 R
+385 0 R
+387 0 R
+389 0 R
+391 0 R
+393 0 R
+395 0 R
 ]>>endobj
 ]>>endobj
-346 0 obj<</Type/Page/Parent 345 0 R/Contents 347 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 17 0 R>>endobj
-347 0 obj<</Filter/FlateDecode/Length 661       >>stream
-x\ 1uTËnÛ0\10¼û+¶@\ e\ e\10S"õ²|l\9a\149\14HS]
-øÂJÔ#\95DU¤¥øﻤ$¿\8a"\bÁ%wgf\87+ÿY¹$öà¼ô\ 5¸ø\17Ä\ 1D1\83^@¾¢ö\88BÄÀ\v!m°ÆÅ$³P³¼}5'\10\84!\89 \ 1\8f\11\7f\ ejø±ÚnIpº£4 ñÅåeÜ\0\r|â]Ü2\8c·à{\1ea\88ë\a.¡sd\80©\8f¤>3ÔHêbÎ\14\98»\8b°\810ºº»\b\91Ò¥\ 6Ô¢\98Âskvgì0,ÔÂo#Ü3ü·¶|NVÎs\fÌ\85$G\87\87$³¶àIº~í«A~\1cá\8b\18D-;ÑÃ7Þ\1ex}\9f¼_°X\ 3\91Åyöa;\ 1mÐG\ f¡Ö\8f²;öUQêë\92\1aö, ÈïÒ\a³2øu¼Î\À×ð\8f\18u\9d¹`\1a\19\94Î:X\84o\85:î^²\1ddK\e\9bƶATÑÔ\ f\ 3ÚáYrÇ\8d\1d7\0\97íX´\vb(y\1dÃÓG\aw\96  6^LB\83\96\94â\f\ 6\13\18\1cªL((\ eUÆÛT\80l!\95\16\ f \85ÒvÓñô7/ì6\93é¡\11­æºÂLÞf u\89\1eWJ\1d\10Fæ3+5³\83¬UÓÉ^[d-A\97R        ¨ÚAÖ\83È`¬ty²hnÔ\80\13\88hDf\Ëþ\bûµ¡*EÝå\87úÓþ\1e'\81\e\91\90Ë\1eU\1ce+n\88ÇRÂÈ[­\0yßeÕ"¹À\96xCæL\16â÷\82\12_kÁQU+5Þ\97\82ÜK£FG*[\85=èú\bÂHGb\ 2\89ÉJqTPK×\v\85º\91\v90\15\91,\8eÀ»   ]æ0\88^¡i7:=\82\1f\ 2\81\9fò\0)o!¯°O\83R#\88ÒK\11\1akO­´ùíøÍ|\9e§®ÔºÛ9Î8\8e¤\9b¾\ 6"û¹\1d%ÇJ9ý¦,³¸&0Yr£T\89ÉãSÁ\99Ð\b~\948\15©\ 6%R3\eÿÁ6óUÊÑ<
-ºj\vLñI\9a²¯ó\94¬¾¯þ\ 2(\90n\9fendstream
+333 0 obj<</Type/Page/Parent 332 0 R/Contents 334 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 4 0 R/F9 5 0 R>>/XObject<<>>>>/Annots 14 0 R>>endobj
+334 0 obj<</Filter/FlateDecode/Length 620       >>stream
+x\ 1eRÁr\9b0\10½û+¶3983±\8c\84ÁÆǦi'\87Τ-\97Îä¢\82\f¤\80(\92!þû>ÉØ¡Í\18k´Zí{ûÞêÏ"`IHoK_P\80_\94D´M\ 4õ\8a\ e\vî\8f8m\ 5\851e\rj\ 2\º.ß¿¸\13\8a\83\84     jH\84l7\ 55ýXÄ1N/¹]Ä\92Yn\166ÄyÄâY\92\vÎ6\14a\8d\1dêV\0ö\1c\90Ç׸¡0\fÀ2ËÎbd£\ 4´³ì,Fv·eÑ,û&Ìï\9c#P\17\ 5\eô±ÁÝ\80\ 4þÞ\99\8fébý9!î\14§\aØ\14G;Æ·1¥¹÷' 4[>õÕ _OôI\rªÖ\9dêé«l\8f²¾M_P\rMÀõÅ«Í\96%\e\81âå½îN}U\94\96\9eEÄI\ 4\ 1¿s« _'z\ah.PS\17+\11°\8dð@7\8fù\9eò\vóªñÌÌ\14M}7\10üÅp\18÷\ 4bÍñq\88Ùs±ç\11\95²Nèáµ£\e\a\1fÐJì\9cÌ|\99\96ê\r\92Î\90Ôõz¨re¨8V¹l3Eº¥LçU[Ü\91UÆúM'³ß²ðÛ\gÇFµVÚ
+7e\9b\93¶%Ì©\8c9\ 2F\1f¨j:Ý[\8fe5ÙR\eEU;èzPùÔRâ¼Ë\97ceË«-\93Z\87ÍèÑ\ 2Ðõ\98K«û\13=/\1dS©êîp¬?<ßb\8eÒõH\aÝ£\89\93n\15\8d¥¦Q¶Ö\10h_tÕ\82[A\83lØDËÝK\aïS­$\9ajµE¾\94\16\vØ.Ê\1cs¦[\ 3     ¶>\91r\9d\83\8aQêne\181Ø»^\19t
+.pà*\90<\8e\8c\ e'\ 6Õ\eçRÈ\ 2\162ú©\8f\94É\96\ e\15´ î_3j`\18{­A¹oßqN³\ 2Aim·_¯ÇqdÝù}2Ý\17ëÿ_Ê\9aѤÑ('QѽÆÈ2KFe~pèªÔ£s
+R}æ]CWPãý{H\17ß\16\7f\ 1þêL\19endstream
 endobj
 endobj
-348 0 obj<</Type/Page/Parent 345 0 R/Contents 349 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 63 0 R>>endobj
-349 0 obj<</Filter/FlateDecode/Length 4353      >>stream
-x\ 1Í\[s\eÇÑ}ׯØr\1eâT\85ÔÞ/\8f²d9ªX)Y¢\9dW/Á¥\88\18ÀÒ¸H\96\7f}NwÏt÷b!GJ\91\94¿TÉ88\98\99¾Îôô.¿_\1f¥ç]\91Ø?Û·I\8aÿU]\954]\9el\87äúQÆ_eI\93'E\9d\18\93âGôOFÿ¼þ\8e¾Iê²Ã¿ë¤=ÏÃçUòæ\91¡uÒ`\1dG\155\8d*ªó\16£ªü¼
-\80\869¸N²4;Ï\1cé1Ø,?/=ë0Ø\8aeãUhb\8f×I\8eßF\19\88åߦ\1dæ\vzðgÕ#0yw^$µR\ eB\8f\92DUÎAÒ\83­¡$\e êj\18,\18@\80\1a rm\r\89\8csp\9dtÍyã8\a±`\9eÁâ6P\16l\vö\13\9b¸b`\v\ 6\8ee2NÆÕ\9dyªb`ã\ 2×Ôçub\9c\83ä§
-.6Òc°uE¢ê´ä\89ª,Ô\13ò9zB\99\ 2Öv\94AÌ(Ró\1c4N`\91:k30%\ 2'áU)é1©AáæX\87ÁV¬¤\8du\18lCÑáÆ:\8c`L\9bÉÌ"pÖ8o10\81\ 3×¥4«r\ ebÉ:¥øPÒc°\b%ØYYY2-\9c£\19Ø\92\81\935\94s\10\93æ\rÉ£¤Ç$\109ÕXrtÙ\90æ\92\99\16¤d\89LY) ÊAd@\8bål\18ëPÖ¥ùY\80ê\10¹\f\89X'FÊÀ
-{ZLÇ\92\81\r\f\\9b!\90\8ds\10ê\15´£\18\89\r\0°hØ¢M\8bÿ\b I\1d\14«A\1aþ%\91\88Á"\95°¦±\ e#rò\1cN6V\16ÍKL\80]\97\17e`\8b\ 6\ e¦Ã\1aÊ9H\9aPX\19é1X¸\0KêP\8fÁvÅdb\11(ËØË"\10\ 3\13(pYZÒ´Jz\8ci\91M\10ÉX\87ÁÖ-¶\10Ç:L"ed|\eë0\1d\ 4\ 5ÙWY\8fÁ©^*V§\80µhãfu\ 4¨:\91Ë`\9f.1Òc\88TRX8Öa°m
-\91\1cë0m\16\14§Æ\8aHmÅÁ+"10\91\ 2\17DPÒc\12)\83¦\85±\ e\93H,°±\ e\92Îp\e+"5döh%\ 6&Rà\82\bJz\8cEqv×Ia¬Ã`\91\93°¡±\ e\83EÉQzÖaR'ÇAîÆ:,!\81\8aGg¦\90\88\18,RÎKå1Ø\82\92Î\8du\18,¶}øÎfv\18lK\87\84c\1d^'\ 5W\ fÆz\f¶ Jɱ\ e\83E\85\ 6çêº\1e\83E|y\8d<^#5Ò\89F¼Y\16\15í\1f¡v\11@ÎåÊ"r8\1a°&ÿ\908\aá\0\b\ 4q\95\94\88ÁÎB\87\81\ 41\ 3\8b\98Àe\19Õh\85\92\1eSLPº\1a+Ó"\87-]\19Ø´\81Ër6\81\92\1eÓ´\ 5%³²2-$¡óB¤e`Ó\ 6.Cä Î\94ô\18Ób\9f\85´Æ:\f¶éhQeeÑT\8afY\94\81-\1a\90a"%=Æ´8\1f\11\82Æ:\8c\10Ä.ìY^4ï(â\83¦\ 2tÑÈIæ\1aÉQ\92C\ 5r(\87\85\0\1aè N~:R\8ds\10²"ô<)ÒÔR6³        r\ 6&Mà¸\8a5ÎAL\8aã5M\8cô\18lIÑîX\87\89\90g\r\83­©"w¬Ã`¡Úd¬Ã´o\90cm¬¨\8a¸Ó\10Ë\19\98ª\81ËÒ\1cab¤ÇX\14~À´:Ôc\12\89\8a@Ç:\f\912*¯\8cõ\18\87Ú³\ e\13Û!çÜX\87Á¢\86\81)T*Q¶\90[\86ø\95\81)\e¸\8e\ eÕ\9\a¡\f\8ep¨ª¤Ç¤*ÍîX\87!\10b¢p¬Ç`ÅS:³\88\9bÓ\8d'&\ 5\ 3\137p\UåÊ9\b\81rv¸\92\1e\83eÛØP\8fI\19\ e%\eë0Ä\85ß`%e=\16Ua\bc¡zÄ`QgNÆ:\f¶â\0×±b\bìqºkÓQY&f\88ÀeØn\90ÈJzL¦à\106Öa2\ 5U£n¬Ã`q\81\80çl¬Ãd
-ÚÖ\8dõ\98Ôá\88ѱ\1e\83í¦2\8b²©Ü"%H\19\98²\81ËRªØs%=\16e±I\18Ë\15¼`°²Ý\18ë0Xl(PÖX\87É\14\9csÆ:\f\16¹\rÏ\1aë0\94\85OýÌ\1e\93¡¨\²±\1e\83ÅÕ\1d\ eÒ\99ÙPT0êÖ%@\r\15\aã\1c\84¸0b\a¡i\16\1aè1Xl'\13Öa°\98©rcù,Ê\1a\15@óòY\14¹\f7W\fä_2I\87\9b\ 5\98&\81\93rÁH\8f!OQ")\1cë0Xl\86­cEZ\\bôä¤Û\82$\95H\e\97q,,¦ÖZ\87ÖÍ-\19\ 5bAt\e° \92\1e\83ERÀ\ 6Æ:LÂRÉâX\87ÁvTf:ÖaÄ      w9\8cõ\18lI{»c\1d¦\bäpP©<¦\b,'2{L\853e\8dÍ,ñ\89\ 6\99Å'\ 3ójà¨O\95aw¢_\12é1\94EÌÕ\9eu\98ÌÈ\8bÚX\87Á"ù \92±\ e\93¡Z\8a;e=\ 6\9bs\90\1aë0XÔý¹\1fë0X\84¶_WLÁñ\10N2 \ 63E਼Ã@Fl
-\87¡\ e:;ð»±\ e\8b²0\94±P6b\88\84í\17\ 2+ë1XD|ü-­ë1X\94{^*\8fÁ¢lEDÙÌ\ eÓ\85\89ªdcÙ\14((4Õù³\1a"0Ò\11TÊAè\89R½I\8c3\b\ ez\94\8e3HÖ«\11f6Π8þÚ8\83Ð\ f\15WgãX\ 1.\ 4\82+ù³*\10\18\91X)\a£\ 2Ʊ\ 2q\1cKl\9cÁ¨\80q¬@\1c\87S4§"?l`´I¡;£{\14\7fV!\ 3C\9dÖð3¢\1cÄb\88\19\ 4WÑI¤S:\b\ e\97ÜÖ8¶\16\9a\aðg\15$0\94ñè¡ÒÏD\10\85´\18í\ eÆ\19\ 4\87½9w\9cAr\eu5t\1c\v\ 2Oj«\84?« \81á½^\19CX
-·Rê_a\ 2\16Ñ \88\88NªrX4@pð    uÅâ8\83\10\11û,u½\ 2Ç"ærá\97Â\87\88\81¡Ë\1a
-ÉH9H\82ÐEÆ8\83à\9a|2Π\ 4A  h\89s:\18Ãß8\88\e~
-\ e7>·\9e\83\94ø|©\8cs:\b\ e\8d,\L\943\b\ e="Ç}sá\9e\86¡\95\9d&x\82öø9\95XÉÅ5\87b\8açZM\99\\ñ#3|½øú¢¿\\rÉx\9d<\1d7ûa³ßýíâ?n\1e\9c4a\1e\1cÁ\19ÍsFA\8c\89Îr\9aèëì\9c\ 6 ¸*<\9a\ 3N^löÛñê°Ø/Ç\rQÔô\ fÜù\9fñÿ2\12òñsì¼¢^Q@E:\ 1X9Q/£úYÔûá°\ü²Û÷Û=\8dÃí»jê@íGú
-\97¾"mÃW¯¶Ëwão\1fè{Ü[ª¶    ß?\eÞ\r«ñv\r\83\13\a\8b¢á ÜýÛ(h¬\ eÍÑÇ\83ûÎPq³Kóc\97\f$%\1dðªÁÓ\9fÞðwÈËh\9a×Ãí¸[îÇ-ë\8b\8c*3<Ï%;Þ¿N\9f´BN\12;W£û\bµ£³óó\99³\9f,\16Ã\8e3¢@¿-Í\83÷N8:\9a\ 3\95PùgÑ\99Õ=C\87\9c\9ckZ\8a{]H\7f³í7\8b\9b\81õÄ\9e\15\93Lú@?\12Uè²?Q¥àHuªD7 m]Æ°|:®×KN3ê|g!Í\92ï\ eË«aµÜ\ 4½Q)µ!\91\1fH'·L\bLÍHz\ 2í3Rôt\9bì³qq Í£\8f»,Úöm\155\9eªF=\ 5¼Cñå\13±<J¿®³°ÄÓòc_~ÞN\v\8b\\8eã/´\ 4\1e³§º)÷\9b\ e\1d¨º\b\99\99¼ùîå÷ô%*\932}8§³þgtauA\8c\93æXñ\8f\1e\1a3§c&UôÍþÃJ¶i´\15\8apи\18»ï\8f\15\8cúÑ\13íf)ú1í\9e\1evûqÍnÁͺ\8d{í·\9býr¿\94\vRA¯\0}\99#¥&á\1e?wYJ\85®\1e\9båñ±ùt¼ZnÞÎ4\9aeg^\87rá¾]ô\19󷢫VE¨â\9c[±½\1e\aíqÙ\177£ÏXó>\7fÊú\9cM\ f|ô¢\8eµøq\17<\86\17©Ò<\1e\15t\82ÄÒ\18Ý­®ùr1èm\14t¢¦°\1eï¤\93ø\ 6×P­Ì\82\ 2\7f'§"Aõ8@ÑÏ\9a}\94à\ 1h¥<\88¢\ f5\1f|ÁB\1a\89\9f¼F?îx¯CCÀ\8e½ËÕ\88Ò\9có\r·û(sr=né;zåK7ËÅÔ£i÷À\19\18TEAâ\v\1aRUöK¯ê?\87á\96\14Àã\99.^5|Dâé\ 3Þ}   ¥©Ü¹Pì©ï÷7Ã\92\r@Ï0bA\9e\8cï7<'\1e\99áÝJ¹ÚP1Ä\96B\99Uß»Ç;Z
-§a3ó¶l¤Þ\ 4A]\1aQ¢5¥¥ÝÐ/nX\r¨¦Õùj|»\ô+ú\1e\a¼©·Û\8b\1dñ\86Ù\ 3¨g\89\9a¥¢)ÚÇÇq]ñþó)\9a>Y±B(u[½\>?lø\96-\85»·ËÅ͸\1d\ fooVr\13C³?ZÇĺ»OQÁ\96\vÔÉVT\7f²\82=WèôtLã\11\91K\96\83Î\99~7\9c(çÆkþ\19º-\1aÞ\97Û\1e77\ e\ 1ô\80Ê\98\1dKþ%^\ 1ÐÍáÔ\1a\vé\84ðhtÔ´l\ò\84\10ÑnÁëq+5Wu^Ä\13/Ùßôóä\1aCnù:t·Ø\ e\ 3ÿ\14\1d \93r5lÞî%®!jþÇ\99\18\8c_ ­ã,?«ºþÕ¯c-\82gèjN4}ÞádC«\86uÃÛ/iõÀ[á4\ e3nN\9c¡«<Ý\18ãýÀçÊOývIÝ+r\14\9eJÖyè6$P68\1f\87aþ𥰩\14ÕAïgê\9eù\89\16³\99µÁ\95­\8e{½i\83 i¿dwá£ÚÌ\ f­\7f\fýÕÀÇ\ e:·U\1aû^×Kq\17ö`m\ e%·Ûq?î?Ü\86\9bx{\8e\16ÜC×ø\19_ÁÏðÎÃÔOó³èÛ\rnÞ[¾xï¸nB½R£\1f*gè©ëæ_®\86ëØgÀ+\e\ fxøD­ð ð8\9dN\1d=\eô5C\a\18\8f\ 4`\8a\87ö\82%\8e
\88³¶õ\8e\11·¸ÆÏéÂýÍ-\8e\ 1\1a\8e\ 6zó?6R[ñ\ 1>\ 5¥ð\fy\1apñbå·¹W\a9\1a\912Zæ}ä|\9bW\7f=i\8f··õ\10Ó"\8f\12´\97\&\1c\15\8dëÝ°z7ìø\0dzµê\9eKä`\11<\14\9búy¾Q>ùþ{v)l¥ZÑ\91½\1d¥æC§Vë\0\ 4ô~°»\e\1eÆéÑ·»\19\ f\r¡J´\13ý¦\7f'\11\83Nn\16Ûø3+òU\83¥Àc\9d<\14Ðw\157\994\8arôÛ\8f£c¾Ñ>\93\87\ e¾FÚ\8c\120¾V¼\1cVýå¸}\fÁß\9f\1dø>\81\agi\1a\8a\8b\ 4½³Õ e\v=¨Ð\8bÒðÛí\16-p-\10ÐÔ\8fÇìݨ«ÊÖG[\14\8aÖYñxêÖ÷þf¹\17\8fáO=Ì»\9aùø¶\8dZ^£Þ\92\9a\18\e\82ÖÄÉå°è\ fr¡$åë¸\99\18÷e=\8bO\94\804'E\ 2½\9bxOUv&½µ\1cÓ»\1a\ fçêÌ@ÏÆÍ_Ùùx\96ÓÄr(¨69s?Çj=î\12Rvã)HÞų|·ßâ)ßA
-`znPÄ~ÉxK\aä¸å\9a\12O,ë;Û;¢%PîM\ ej¼%1³ÅËþ\97\18\17\8d
-}ªÞ_õ;I\18$\84ö|x\87\r\19n\11qâª1Û\e®Ãµ\8c\ 6㸷:\87NWÞpè&¯7\901lï¨xñ'\8dw}âF\83aG\9c\84N33שÜâ£×=vXÜô¸Xí¥°£6{|Ø\95,7Wî\1e\81\1eSQþñ½ånv\8f0KÆ­Ù³¬F«h\12\17\92!®Nx±A7¹_-\7f\ f·!TF\7f\8e2'Ú#¨RNÊ\1dÜBgþRM8ÈéÕ\b½\80ö¡Yàº@ïÂ]IRò\v=\11\8anBöNÝ$ÉëÜ\14/C"î\97¼óD¿øÿf\råö\19ÿ\8d\91Ë*\9cÁ3/Ñå\8dw\11ô\93µ\9c\88;\84h\87?OÓc\v­\ 3Ù\8a\u¶\1d°Énf\93Ìö\9d\8f\1dá=/\83×\12¬,\9a\8dýõ0ì¨\vÀò#\96Òì.²"Ø\89Þb\9ed%ªÞ\99¡\9e¬Þ÷\1fXR¼nj½\94Ýí°X^s}J\17I5áL\83\8fX\89®\95l:ßè<Õ\11\9eM\18\9d\14MRÜmÝ\83x\8aæAåpd\9ey\99÷r¹Y®\97¿K®£\93­çT\14\93\94\9c\9c6h\81®Ø\9e\93¾ïû\ei8¡>°"\ f\ 5\14ÎëØ\1fòGÖüfpÐ'$\98\ 6\99n/è\90ÕÿÿÛ,Ñ,x!f\92\órðU//g@C{åæÔ\rüµ¦Ð¤#<×\ eý0©\ 5¨>ÔÛÖëázØ\ e\e¹JÒ[Àå\1dWü~sA¹J¾<ËðâÆQXÌë½»·ÀOýê \19\83¶Fv÷\ 5ÉDÕ)\88\8aÏ\9e\8a@\92Ù~a]1_\93\9e¨Ï\96\9bÅêpÅ*áù±]\19©\15%;#ÞÜ\7fÀ·\0¢ÎQÛã\93p^\99½Ú\8eïð®
-g8\1e\8dkå¸>¬öË[i¨Qêk¼²Êtg£!T¦i\9eR«mÐWóð,¥¹ÇgÏYxÄÓeÓDngÎ<U{þ<ü\86m\89U\98¼|õÕÓ¯~&½è¯TòØ#=¹­õ·P÷\16=b¹\1f¢\89\81?¼¾ó
-;ú\93þ\e5\9e61à³\99Æÿ¾Á\8eÂ\1eEóA/\9c¯F\µÑÑæ¾"Ê\vü?i\b}ÅS\16z>nß÷[¾Q ¢²òâ\r_ÌØFþ)ö³a±Bù\1eß\18¢whuá\17Øöбe\81ü1{"\9f^H>ÉQ\8d?)¨?¹Y+Öá7Sí\1f~G\15\7fü!/_Òßì\94\ 5½¥\8ax¦×<ÂÛ"IxarØ&/ûÍ!<ÝÃßpå%.6MÚÑo\97$þ·\17\8f~xô_Ý"È endstream
+335 0 obj<</Type/Page/Parent 332 0 R/Contents 336 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 4 0 R/F9 5 0 R>>/XObject<<>>>>/Annots 75 0 R>>endobj
+336 0 obj<</Filter/FlateDecode/Length 6100      >>stream
+x\ 1Õ]Ûr\eG\92}×Wtx\1fä\8dXRh4®ûæÑÅë\18kC#Ñ\9e}\eC`SÄ\1a@sp\91d\7fý\9e̬Ê<ÍnÚô¬LA3\116\ f\ eª«2+++3«\1aþç£Áù¼*â\1f»wÅ\0ÿ\1fÏÇÅt>,vuqõ¨Ô\8fÊb:,ªI±Ü Í\0\7f¼þV>)&\93ê|Vl\8aÉù4ý½.Þ<
+´)Æãó  QÕDZ\8dGçC´\1aÍÏ«\ 4¤\19ÁM1\9bJ;ý¢p\ 47Å|r>&\8eà¦(\87£ó9\91\8cÁNG­.U\86j\8c1%\19ôo\97!1Ãê¼,&N\11\84\f%\14\10\1cAÈ0nq&ûp|>rÙ\15\84ì\89\9b\95\89s\ 4ñÌ       T\17\1cAH7PÙ½¡uXÊ(²²\15D\87\89Ã@Ñ¡sÖn =åv
+¢]â&3\99\bb\92¦"¼s\ 41ЪMÊ4\8c1Åy\1aìï<\rÎL1\rD\ 5Ä\13Ë\ 1F\e¤\8a0VÍ%\11\f¸\b\99
+\8e`²³àÔÎr»²\1aÀ\92\82d\8cá\8cDéÄ\12\ 6;\1d\ 4k\83\9d\88Nò`\15Ä`\13\ayðTç\b\8aNe)\ 6É\18ì¸ÍZ\97ãYLñXAt\998ëÃ9\82xè@\16i4d,\ 3\92µ\1e¬Nr5\8fIÖ¿}\92\13\83F£bì\14Á\r¼\93\1c\9e?\9cÇz2\102$n^É3\15\bgã*ç¤n\ 5Ñ.qÓ¡\bà\1cAHW\ eág\82\84§\92ï\8a\15\ 1ä¡\ 4¥¡x\13û¦\90\8cÁ\8e\87bVú\1ce    \83\9dÍÅÊ\9dµN\a\ 3¨%wª :MÜ|\0\8f9v\8e \fHV\7f\90\8cÁ\ e'"§7e\fv¢sì¬\ eh4/u\92Ul\ 3> ÌÍÅS\ 5G\10\ f\85§\9d\11É\18ìH\ 6\14M\19Ë\80FXZÄ\12\ 6;+¡*b        \83Å\ 2¯\885að\15ñ×&\8c\82\10&qâ|0$'\19ã±ð\14cf   \83Å\ 69b\960XØ\1cÄñ'Û\90¦²çä!)\88!%.\rÁIÆxìP,{\14,a\19ÒLÄ       \96ð¦\18\ eJØ`°6¤É0\f\7f¤ \86\94¸4\ 4'\19£S]fÑ\941X87t\1am   \83\1dÍDKÁ\12\16qÄK\11K\18ìL\1c\84Áb¥\94Ì\12\16U\88c\89\8cÁV¥¨ÑGÅXØù-60Ø\89ì.Ô\960Øé¬5*Æ`áîX\e\8c7E\ 5=ó¨\18\83\1dUmV\96÷\b>H\1c\8cÆg\ 6dr       Â\16ç2"ý¢N|@(\11\ 1   Tì¤Y\fz\92íÞÖ\95\82°\98Ä\95\ 3       \1eGN2Æca\ 3èÓY{,>\8c媠\1e\9b¸\12A Tà$cyìH\96«³öXÄ|±ä\14Äc\13W\ e\86ÒÐIÆxl©\1e/XÂ`Ñ\v·µNñ\15ßMF
+¢ÓÄ\95C          \82d\8cÇB90PoÊ\18ìTçÅYë\141¤ï&#\ 5Ñiâdï\83u:©\ej5·0ZÍÂ\804$\88É\16·\13\1cA\r¶æÄé`*\rL\93\91\18ðÁdn&1Lp\ 4Méc"e\122\ 6\v»\9c0K\18l%BÆ\83\19\83Õ]\88XÂ`ÕÅ\10K\18\vT\r%X\13U'#\8bª DM\9c\95s\ 4Ñe)YW\90\8ce@â1\88%\fV}\1e±\84e¸bDÁ2\ 6\8b½\8f\9fÌ\18,| fÜ\87l¢"hp»®\14\84¨\89C^\83\89r\8e ,E"·à\bB\94\89\r\19\83Ed\82\19\ f\96°\f¶Ý©\rv<\89õP)\88Á&Î&Â9\82è²\94ø!\1a2\ 6\vg\ 3«÷¦\8cÁâsÌi°\84Áj0H,a°X\8e­~   û\9cú\93Ó\9c*\969\95\98:\9el\8a\18Y~¦\ e»R\10\8aH\1cÂ8\8c×9\82\18Ð@§ÍIÆ`\11\14qSÆ`1\ 2,òhK\18¬\86\12\16\83b\fvÜî×DEzê\9bH¥ DM\1cÔ        #t\8e \89\8a5á¤\88\9a1XÝ\ 3\88%\f\16\8e\ 4+&Ú\12\ 6\8bñÁ^\82%\f\16Æ\ fó\ e\960X\18{«-aQSÕjË\18\19\1e\95©I÷\9eì²\14\84\9a\12gkÁ9\82Z!\80V\82\93|Þ \ 6\vï\v{p\921XĦ0Pgm\ 3*)\9b­\14Èpl\ 3J\1cü\b\9eê\9c\891\98Ñ
+W\10b$N"\ f\fÎIÆ\18\8efPÄ\12\ 6\8b\11`V¼­\ ev\b¯%á\8f\8eÎ\80\ f6sZÛ        N\a;Ä"wÓ4à\83Í\1cJ-\93"8\82¢WÉ\1d\82d,C\15Ã'\960X\94-ÆÌ\12\16v\8a5Jm     Ã\80P*\98\13ËX\8coÖz2c1¾qëÉ\8cÁ\8e\8d~MM\88G=^\e*\b5%®D"\ 3=9É\18â\f%§ \960X¤¨PT´%\f\16»+\14\15,aQ\94¸\ eb        \83E\ 5ªõdÂ`áRKnKX\14%\eX<9©\82j\12CLÙ° U\18'\85\e\19R&\19£ÓJÊ|Ä\12\ 6\8bM£b\960XX\81\9fL\18\ 3Æ¢à¶\8cÁb\eâ~\19\83\1dI\8a\14Of\f\16Û\94¨"÷kª@\16å±­¤X\13REâ Pôé\1cA\b\ 3?\ ea\9cd,jÒy\r\960Xøq\f(XÂ`'·\9eLØÔ\ 4[ô¶&Ì\98ª,C\ 5\89³Ñ;GÐ\85q2     \93Z&a\825a2k\83\ f\96°   \ 3Oà¬\r\17\95ñp\
+b¸\89K+ÐIÆx,"Mh0XÂ`Í(\83%\f\16cà¶6$õ\85iÿ\92HuFæ\90¸R\83ß \19\92\82\12K\18,âLtê\ ff,\93*)e°6$\14b<4\1e*\b-%N÷Ðà\b¢ËR\97\9b7dlÃ\85«\f\16ÃÍ\18,*OXPÁ\12\ 6;W'à¬\r\17\89`,(\ 51ÜÄix>t\8e \fH§ÅIÆ2 )«ESÆ`g\92n\13KX´+¹]°\8cÁ¢@\ 4Q½_Æ`§\13\99\99`  \83ENÚz2a)¯LeÛð¶¶Ùcªc³W j²½?q3)\8f\8bM\fÔ\b     BT­³\aÉ\18ìHB¥`ufJ­y'Û6à3\93¹¹´\v\8e t)Ö\19$c°º¸\82µ.5kÌ]*\88.\13gËÇòM!\19ã±XÑ\ 3L¬t­,aéT6\1ab        \83Õº)±\84Áâ̤õdÂ`5T¡¶\84Å\94$N\b\96±\98\92LY°¦
+ì>¾\8cåÌ\91ö\\83zÀ   \ 5;\87m>C­\85`f\9cC]:C\f\16±\12:t\921X8À!³\84EPq¡Ô\960XØ\f\ 4\8d'\13\165\fáë\82e,¬\84\ 6\ 6\vGãb\f\16u ,»L»©\10\85{w-RÕ§½Ú Ô¤Ò8GPÔ$Î#\1a2\ 6;\94À\80XÂ`1§°4\7f0c°H> j°\84ÁbåB\89Á\12\ 6\8b-xD¬\89
+SõR¨Ø±¹\0Ì\ 3æ9qh\87>\9d#\88\87",Áp\9dd\f\16\99\14º\f\960XxÂÜ\8b.9Â`q¢\v{\89\84Á"\17Á¼9kÂà¤Ó÷y9\ 6\1dŦj\10\r͹8É\18,òa\f8XÂ`q\90 ý\ 6K\18,â&Ìk°\84Á"ã\85°Á\12v\ 3w6\19¸b°péPr°\84Áâp\91ûe\f\16á\11\96\8e·5EiD\95Ý¥\ 2\99\0\9bõÄ\99E;G\10ÂÀ\acn\9cd\fV\ f\8e\82µ.\91\1f\84[R\10]&\ e}@EÎ\11\94\11\18,\f\ 1ó\16,a\19\90DÇÄ\12\16Ý\8b\8f\f\96±é¾ÅB÷\19\83EvÅý2\ 6\v\17Ç\ 21Ævm\96ècf\f\16Ñ\ e|\88³¦D\14ZÃ1)\b%&Î&Ê9\82P\ 4ü7\1eê$c°ZÓ \960XóæÑ\96°¨XÊëÔ\96°¨X§ÇÛ2\ 6\v\aÈ£b,¬T\1dâÉ\8cÁ"NÃÒð'\9b\9a\10³¨SS+U j
+(ª¯t\921XÔ±`àÁ\12\ 6\8b\92:ÖT°\84Á"\18\84*\82%\8c\ 1£$\bq\9ce,ª÷\ f\96°\b«QS°\84Ábùò\98\19\83\85Ã\84ï\8a\84%tÔøÆY\r\1d\11oª¡¢þ-J\f\84=P¢`g\ 2\89vŵ;EPt+#   . hV¼Up\ 1Áa¯ãv\ 1!\1dâ¤y´#\b\ esGc!\b\ e{%õ'Ë\15ç\9bâ§ÄÛè\9f\ 3hj
+{s"\10\82*\89\b\82\91R*¶,Y®ª3ýÛ5\98\18\98\ 6nTÉ·\84 \ 4ÝJ êL Ñ­Ì\95S:U¨Cy\90¯\7f{G\89\89\8b\1fò-\95Ç\11:\12ïçÌ_.n߶Ã\r½'/°<e<\17W°nT#\8724äÔeY\\êͼAq±üúbñv]\17ÍUñ´Ù\1eêíaÿï\17ÿûH\1ak˳Üô\fÆ6\9eÍÑôëò\¾\ 2§\86»~xÄå×ÅwÛî¹<.\ f«f+\1cb\82Y&Ï¿ìÿ\95¦\8eYVÇü|<\1a\15\1aT\15¦\f(ºÂǦ\8d¿\1d\9f÷\87Åî m±ë\ e«¬¨C#\1fA;óIúò«Ýê}óñ\17ù\18Ëo4\9a¥Ï\9fÕïëus³Á\8c\b\a\8d\8er\9bÓQhR\8eÛÊ\14\81X9)ÎP\87\e\8az\86\1dK¹¸®E\1c\18S\88úôÇ7ú\19VT6\9aâu}ÓìW\87\9aAÂ:\99\9e\8eô÷\1dÉP¤{ò"\9b\90\18JJ&\84$IµÔ2¡o\96Ëz¯+Q|ò \eE×|BwÃá\97¦ ÕË\19\bÓ\1eê0£i©ã/»Åvy]«B\10¿â:\81­\92ûÎÀé|Ïdî\98@Õ5\81\98ÙX\15O\9bÍf¥þ\0ñÕt\9a}È·ÇÕe½^m\93\82P\18À"T_t:\82wF\92V\85û\ eÌë\ 4\86î¾ÃT»̳fy\14\7f¸ÈÛ\fêÛáEÚJ@\9c\9b\16M§ãÓü j;  Dâ¸Y\9f\17\ 5\8aÆ]\ 3ùCÛ\ft÷¶i~\96NPZ\91[û¶W-¶\97ê{ÇçãIö2o¾}ù½|\880\16       Ûé\19\92ªêLÊ\14s\8c9tÔã8îÜ]o\9b\12bÖAv Å\9bÃ/kÛ¦°ÛÏN×­\8ed\96Τd\1f\11        \ 2\91®©Ü¥\86§Çý¡Ùè\Ã\9fdI\8bçÛÃê°2o"ûO\ e_Nsåè¨T\15\14µÞö&#U
+{\93§Íåjû.Ë~\87/\85\e©Nq      Ü{&&" Å\1e¨Db\9aó\9aA\1eÕ5\96N0\8f²b\8e@îÝïI|Q\85?C\9e_\8dÃ\97"sêÊüÃ>Û\ 2"M\ fBe»Í\19\11\12^É N}W%½»ô%%,"½Í9J)\83\1c& ÷SIÿC¬E%MÛÃï|®_G\9e}B\8a1©õZ\ËÐ\91³ë´·ÄþaßÍFÞ®\edoê\17F\94§]5;ù\f\97ó\10»ÛÞ¹dó\90\134\8e¤\ e9ùn/\ 1Û%ZÚøk]ߨܨì\rr2Ëk\0\17("qµL\1fúÈÁxq¸®W¦$\1ciúfÒ|تâpD\9a\13ØBbUý\10®åD¶×©\8cçLê¥\13JÎd¹ØÖÑÒTR\8a4A%'äª\17Ëk\95\vq\83\87SëæÝj¹XËçxÕ0¾¼?\98ºå-º¼\10iù~î?\93B\10\\94\14\89\8aBÆÝ\85t\97B¾Y«Üb%n&/\8e[-\14Y6\87\9bõÙ\ 4\8a\8bëf×\1cß]¯-éG£¼-\7f^edÛ@\99\13c\8dÍ\13{ÅýU±Ð¼\8dK?X/j,\;ª{âñæJ¾Æ-ßî\16¨\ f¨Eá\80&\87gÅJ¿\88O<\92íëbiu>m\8dÜ;×U\8a\95>0'\ 1\9bf§£\83ÝG\8eu¸^ØbÆ\ 2÷\14¢Ik\99S\88ýrW×úU9\vñ\ 1®ëí»\83®\10\1c\94À!}\ 2\879\139Î*¼¡ÑÚåz\82àÿ^lò&ÏÁ.Ê\9eï±É£r©òãÌíK        øLt\1cW\8df\91\ 6áuå¾\rþÇÅn%\85\16î\17\85w\82V\92%aþNc¹ýÎbObÃ/E\11M¤îÙß³«Q©\91.º§      ©a7y\ 5üN¿\9f\95NBãܾ\15Õäl¯µ;ýW½¸¬u#\96\8a²\87+W«\94ÔbKó2óÍ®94\87_nRé\bß?Ý\18×t\80û`ì\83Qqîúàç[\14\8avZ'ÚkL«/3[ÔÖWñø·ËúÊËg\88\14³Î>ë\94sçsõrå\10ÑI[øÞ½x\8bÃ\87t\90\83³®/,m1QqØßN[l\96[Uáþ¤íÍ\röFQ\17ÊW'7\8f<§wým
+@ *î8\82\8d\9c«·\96ú«£F\15òF\9eo²w\ 4\aÝx}!Zâ\92\b\85å\91\ 4¿Õ`\f       D|\84¨b³¯×ïë½.½\11®\1aåèî.¡\1eäó´JP]¯\90\91²êzö\86o¾ÿ^ä\97\93¨l&\85\84F»ÆBu\8e\9e\ eµ\97\ 2¤(\94\83\97b\7fÝ\1c×ZCÅK\a\11\14]/Þ[pÇ\99@Gá\9akê(pÅã3%Ñå@\ 6p&×m¤\1eÀZëÉ\11\9fé\ 1&®ÓÄ\16²mÌ\ 69\8c}[¯\17o\9bÝ\13\bøáì¨Y%^-\92\15mN\18µèum±$Þã\9a ~±Ïë\8f7;\1c|y0&ùágØ\90²Np\.cc\9dôì6}U\84\ f׫C\8e\9f)åkù¦,ô\15beKyàß#q~[/\17G+PÈ\r¼\1c¥\14v\0ÄQ~;r\97Ç©MáÎJθ\1fdùÝê$+Q~ñ\aã`%öìZÏ\9aícµ#ø·I\9eó"É\8f\149;\98â\8fhv\81\12\8aò}°Ø\1fv¸«p´\ 4\aÇ!qtßÜHØÐì,7ET\99»½%Û\9f\ 4K=PÇ\11\18Ö"ü9«¬'Ó|¹øÙL\8c­¦/ã[/öy\9b\b'®Û\84Ø\89ÜÐ÷Í£\9bkv\9cÖUÊߥ-\16¯ç\9a\12t\98#Äx";L;\14²\92¼úÿ$åÝùجU¹áØ*e`ßêÆ\8e}«¹\12Yy§\^/\90\82\1f,ÊÆYCäS«í%e\93¸ü!É\99:·;Ç÷ÐDÖ\87\9c¤·ôa˲\15c}·ÅIÐb½ú5¥ÎrwêKÉ\8foéµÔ\13ç3øR:5Äí»¾tÙÅÖ\ 5\86\84\81b\91*Z0|·ü÷)¹6¯\81°3[ÿ­\11\9c\ 2LZÐ_#j\95\84ÍÁ´&?§Ï&\17\14\95µp
+\82ü\911ä©G©\ 4±^¸U\14ôº\ e@j\ 3ê\17#\7f(²ÏËû\82O=*bæZÙ\aìjl.Ûô\8c¬³¢ãHï
+\82\16ÚK+âî´ýç±ÞKÍJ\87\ f\93ÎgV\7fD+ÿÚw\93.åõ!       YY\99}QöúÃâ\17\95\a;°ÇÙû\9bz¹ºÒÄB7æ\14ýu¤ìW¤\94+D¹(MÇÎÝs>Óy\\9eES\1a\8eDr=è_ÓÄÿ£U^\85ò:MË\eá\96h×"_®¶«ÍêWóE¸½\91Ëtn\96¢\rÞ\8aqÜ°6#ÂåC·Õ\ fש$\8bü%ïÅ\88&µPb'á\1a\8bç\10½\9b÷\1dý\94\94\9fpÛû}\92²îoê6\9b üêD+²D.×ÕÞ«EºI\87\ 3Ï|\8e]ôU\81^Dzåä¯'\ 1FÍØ"*¹"\93¯Ò¼®¯ê]½µâ\83Ô]>÷\81`Y\89]\9cÉ/Ä\89ÉðJí    Àÿ\ 45ý¸X\1fÍ\95"\7fy8\ fõ\9b¶CdÖ\ fª'|\91\bo\8eõ\9dëDÉ\98\1cY7\^m\97ëã¥I-_ô$\ fÕW[\92'|À\904r«Ä\8a\ 3þ\9eUµkÞãÖ¡nr¨J»?Ù\1c×\87Õ\8dU\9aå\92¢\9f\ 3«b$³WgÅI\97Ô k¿;\8e¨4·¡¹zè?³mtjI8îí*£/gø©þ\bתÒò\1e÷ÕÓ¯~\12\rÈ»\e®´^ϼ¸\81bnplc\85\ 4¹\ 3\9dÝ×Ck£Õ_92·\82w\1e\11\9cäv5ó÷køD5\12TÇò¼\16¯\1aÔxp\1a¥µy¼Òí«¤O\91/\9aÝ\87ÅN3K=¹JûÓ\eMâõÑä\84\9fÕË5R³|CT\94\96WàwðÙ8\19Ñ\16|îÙ]ÃßÙ\1aÖå\8a-Q\ e}?i\ 6\974(¿»1mÅà¶ÎZ1ø·õ\16\e´\96$yw¦Ûkìe^IVºJgêØSK>ûLI~\82\8d#Iì\9d]KºH!5Þ\86\8b"F·¨\rSÙ"Wµ¹Cù0G?­~O\b$[\90WØ[\15\1fü6NW\a¯îpº\9dH\17çY\v8bµuÄ2¹ìº\¤\vOr\99-­£¾À¹'ÇÝ\7fX\1dìr\v.±Dñ÷Ve\1c¿\8dõàÕ\81ì\8f`Eè;¢\1cd\a]\r\v%Xb\11EwߪX¼oV¹\94\15
+Qu¾A@.çp­\97VT×Ø ýd@\94­fÈAâj+ß\83ûñ\12ggî~OÓ*\94ü\9eÂ\ 3,ír,Ã=\e"ÕÂK÷-åöDÚ}ÞûñºÙ¾{¬ÊAö\9dlÎîÒAYÙX\8aÇ8GÙ\1dì{ø}\ 4/vßßi?^m­=\ e'f\ f¡\9b{8\91¤>yyrtku÷Dàý%ðÍê£h\ fAª¿\ 2\91\fþÃV7\19b_NÓ \1elW\ 1¬ö¡ûXá\aþ(¶\8f³'¸\87<\7fîW\[\88Ç[·\1cp·²»\92m§Ï\ 1\16½wðr\8e*\9a\94DÙëÝ}:³ã\ 15Y®¬w÷\9a\95½,\89JM$Ùw]wT\ 1p\8eQ=tm0kUÞ)¿¥Õ\9e°¾o  oà÷\9aå\93_õ_¢\16\ 4Å\91IïoPýܾ³\ 3¬\a­DÝÓ\1aË|\a\16aE«Ü\8d÷¤ºfuá/(\86\88Øvßí\16¸!­+      ¿Í\10\ 1È߯í@\94\83\12èÐü>\96\9c»ùǦEópØ©²\19ܺv÷ºÞß ¸ Á±j\9a\9e\8dúùv\7f\14å«Yók=\8få\10\92p)ïÿ÷TØo\7f-©s(ïíáÁ¼ßöÄÿß\ê>Ú:e_7r?ÉT\84\87xU°»\ f÷\1dfý$÷\98þ±^íÍÛc5Ï|·¸û`¯o\9dw÷âf\97.N¡²\94\1fúÛÚøTl6ÒÎÉ\1f\8cv`V\8a°+\8f©øê\aÔ\99v\87Åjû\95\9a   .õûVº­?ÈgPy\1c</\eKÕ!W\94\93\13Ë\7f\ 2%'9\ 5ζ¶ïÒ}0>wîNOý\11³\90#".\ 2Hw\9aÛÉ\81¶[ú1\ 5\9ft\98ûâ»ÿyù\F\8bk¢øí\98O\9cfÙÂï¦Y¶ì[i\16ì\14Wo\8f\9bÿTubSuu^Ô\9b\9buÊÁ['}=ëQLSíZìÝ\97~\9fíåR´t'\eR\8e\8cÒ;\ 5ú1éÉ^JÐÁá\9a\89;\8fOe}w=Ǭ2^«\1aâ·é+)%æ\17¼-\8aa\87x!ç\12QMÎU¿âÖë\99È˳1ßÕùé~^êE#z«ÊÞ\90Ê®0\9f\f\ 2;ÚêÌòUÔ\1e3ÚÕ¸\1c\936\11JúOW!22SÊ\19²0¾\8e\8c\1fbµÈ\87\v\vÑ\ 3²\8a\88Ûvxã\7fg\ 1\95Ü\19Ï+â´\85n\8f.ìB~cãJþsNó   ~õ\ 3ñÒ|:\95\1fDH/b\16é×\1dê]ñr±=æò\ e\94\8a³é@\7ffc%*z~ñèo\8fþ\ f2ifAendstream
 endobj
 endobj
-350 0 obj<</Type/Page/Parent 345 0 R/Contents 351 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 105 0 R>>endobj
-351 0 obj<</Filter/FlateDecode/Length 3942      >>stream
-x\ 1Í[Év\e×\11Ýë+úd#ç\9c\90êyÈN\8a\ 6{!K!©ØY9\10Ø$\11\ 3\r\1a\ 3eûësoÕ\eª\ 1X\fEItr\8e¬\8bÛo¨z5½êÖ/\8fÒã®Hâ\1f«Ë$Åÿ«®J\9a.OV}rñ(\93\9f²¤É\93¢N¦\v\8c\10ÿÈøÇÉ+þ\92Ôe\87?\17I{\9c»¿Ï\93ÓG\11-\92²\1aQ\ 6.\92®=ÎÌ°¢æ\8cEuÜbÆ*?®\1cà\94\ 6b\Êqò 9\ 3\17I\96Ë\82\81´\18\1c7fhUrÉ<?®±dÓbe\ 5\9cÖ@\fLóãÎ\90\16\83ÍjÌ\10\87Z\f¶ê¸¨¬"²È¢iw\\86E\ 5ÄE\1d\97e\15\a\ 6ÒbL\9b\17\98Á°\ 6sÑz<Ö`°\10®°c\r\ 6Û\15\146®kð"ÉSÑa`-\ 6[t<\9cÈ\1a\f\1d¯+ú¯º\1a6âô¯ ¨Âs]\ 3Y#g ¶\9b\105\92\16\83\85)t\965\18,\fÂNl1E-¡¦8³Å\145\1d³\ 6\83-3Ø\84\19k0Ù\ e2[6b°m:\92ÈâERäíhϪĶ\10O\14«­\ 4D%:\ eþ\86\1d\ 5Î@("/©¦@ZL%Öð\rÃ\1aL%VpVÃ\1a\faRF\8aÈZ\f6ËFëZ\fVU\1av¥¢Ö\9d\84\b\15U@\14ÕqY*[
-¤Å\14¶âÉEÖ`°UAa#k0Ø&§ö#k0XX&l1²\ 6C\1c¸¨eU\1cxf\b?\95\80(\8eãÔó#i1\16-ä`ÃP\8b¹a9»È\1aÌ\rW\14\ 6\f\8d\91µ\98§S\8fÆZ\f\16&\ e«\b3[\f¶Éè\0\915\18,"\8eeUQ%\ 3\9e\8f\13\ 2¢¢\1c§6\1d8\ 3!j\9dR\98@Z\8c%Õ×\ 3«KÂþbh\12\10\97t\9c®\118\ 3±$ä\83¡\ 5Òb°psh(²\ 6ë\86°ÝÀr\83\1e\83E8±3[\f¶Êx2q¬Á\b \88àðõÀZÌðR\8cve1Xøöh¬Á`[¦º8³*1kLh\12\10\95è¸\fA\ 2\e\ e¤ÅP\14b6BHd\r\ 6[\8a\92#k0Ø\9a\95\84\19k°*Ù²T²ÇT2\13p\1ck1ØZ²CX×b°ÍÎX\83y\ 4\92\1dÂXUTÊÀ\83jª¤ñ\v ¢\f¤*:\9e{ -¦°¢ÆÈ\1a\f\16q\14g\17Y\83±á¬dØ\v¬Å`\11\ 4q\ 4\9158¨"²ª\1aÁ*¬]\97Â{\f\16é,33[\f\16G\0«\ f3[\f\95Ã\8d,KÈ\12\ 5!\ 3ªÔ\8c
-¨F\ 3¡
-¸@î\9e$i1X¸KeY\83©ä\ 6\e\8e\13[L%³\8c4¬ÁP\14Ö-\rk1XX®\1dk1XÈewe1ÕH\1f\89ë2é\968\ 6\86/\16äúw±§\80¤<Ç\82ò\18)(ÛC)Ï\eÃIy^B\13,øU\99\ 2¢n\1d\87Ø\rõ\ 4Î@ê\9dµZ$-\ 6+\9e\eY]²h°)¿¤\80¸¤ã\1aÊY\ 6Î@.ÙPm\81\14Å ê`*\11ÅÈß\83b\1c\83À\8d\19\ 3\ 2W\16N\188\ 31cK½\aÎ@ì$\97Ã\ f¤\88W að\8c
-\82x\9e\93\e\fĤ\bãM\12I\9d´¥1øI\ 5ÄI\1d\87ÿàr\178\ 3©3ê'\92\16\83\19±\ 6\83m\98?âXÝ\10Ò{8ÄB@Ü\90ã`(m\129\ 31iƪ+\92\16\83­Z.\19¦µ\98\e*©¡È\1a\f¯ÊXMGV"q\81     CM¦\80Û\95\8aÓsz\ 5\8c¤ÅÜ0«:Ã\1aÌ\rÓ`\rk0\83DNMÈ\1eDK¼02ð\85êGAÜ\92ã¨\15ÿ$I\8b±(¼\v[\92gã´E.槢      \88Ó:N\9d´\b¤Å\94¥\86¿\eÖ`°5\1d°\ 6\83\85\7f@ùqf\83©\a\ 6ÚÈZ\f¶`\9c\89¬\1e\r  \15G@\14Çq\19r<\ 6\ 6R\aâÂ@\ 3Õ\81\ 2â@ÇQ\9d\18\18H\19\98w¦{  \fô\1c¯ê\râ7\9f\ 3\eÓ\ 1È\ 5Ä\81\8e˲\ 2Ù>\92:°6÷å\@\1cè8:l\8a
-\85O\92´\18jG®h\r«ÓJFw\1aÐt\1f§u\\86û@éj\ 1\92:\10%I([xÿoeI)[\14rE\1eV$-\ 6\8b\18Ñ\19V§Íõ^¤ó\bà\92\ 6b ¼
-\ 3\ 3i1§eD\89¬N\v\95Jè§\aæ\ 2â´\8eËÒ\1añ$\92\12Âxo\r\81Z\81¨\80\15\88ç¨f\1c´<IÒb*\81\r\ 3Ã\1a\f\16\87åg\92±\ 6\83í\18@ÍX\83é\v¼MEV6\9cµZwKfQ\106ì9\98{\ 5\83ä\fDþgØ\8c\9c\81T-ë×H2©ê}J\93ªþ\9dS2»y\ 6¡Ç\ 3R\ 6"©Ò9â0\ 3±\1a\8e\19[\91û\e\aÊjE¬m2ù{XÍ1\98¢ÃFù\18)\ 3±GÖÉ\913\90²±\8a\8c¤Å`+Þð\rk0C\16\8bÙÈZ\f\16¥.\84\f\18¬\84\1a\8cú\ eÁÇ\8a£\9bÌM9\96   ¨zâ\8eCÞÃ\8e\ 2\84\91r,\92:)ÂnÈÕ¬\9eÔ\9fuRÇIµ\109\ 3yZ¬¿#)\93ÂzBM.\7f\ fût\f\8a\9a\86\112"ÎÇ#\f\94\81<\8d\11'KµZÛÉ~åïa)ÇÈn\ 3\13\11õÁK[ \fä6\1al.r\11\82\93¤\1a¹\byèÌ°\813\90GN\9f\ f\9cl\1f§\1eÂ\8cü=lß10Vônù\14\99gg¦7\ fÇH\13ôó\9f¼DTL\93³\v(\b     \11\9dô¦LÎÎ¥\81\8f\9f§ß\9cMÞÏûdy\91üc9lúa³þëÙ\7fÍ<Òã\97y\10\1d2Îsä&:Ê9Ñ7å1\a`\ f\15^\14\0c\9eóÙpÉ\1f!D×æîçWÛÙy?\9f\r½,ðä%\9cN§C»³È1+û<2_#3ÂÑý\8c¯ú¡_Mæ2%*øÚÿnVª\8e¡x·ÒÛÕdº\99Mu¡\12\8a(\958þÊÿËSîø(C\95\ få\8c\ 4ÌDD4Z\e¿é³íjàãø\r~ï$YÊOÐLxìÃd5@»¢C\88VÔõÃÈ\ 6UzñÒb,[¾'ÛÛÕò\ 6\87ïM¢á+%ZÊ\84¿À\95\82¼çýÅd;ßÈ\830\87®q\ fN'k\19\8dÐU·~ôÅrÅ\añf¤j\9c\16\92É\¬Äjlýa¶\99\94\88\ 6aíõf²é\17ÞÞK\94\97ÎP?\87\918ÕÀ®÷N¾ØÓÎÙê7\91\ 3     !(b³\94\9fÐØK[¯¬\9båì\9c¿âê\98áå\9cªð\ 2\12{o³âm®VËí¥\8a\r/\fbS\93b<¨û:¯µ\99\9aÙh5®d\8fæ65\8aXlZ¤î|>I\8fyÆu\8fr¹8\8e<FÃ\8cõ\98wj\13(ÞÛÊ{Ñãùr¸|,ZB½[{Ý9KA¯)ÃëN±½Çë«åj£\8f¢\11á\8dê»a½é'¢gäæ*\v3\pRx²\99a6èxFªÆÍûIRÿ?\83\9cfx\83Ý\89\9eE=_\ e\8fÅ\89P\rû\8d%\8bÙ¯"\ 2Ôå\83\9eýÞÿ¤Oâö\15t3\19D\ 1¸\ eG\8b\n®zñ7¾       úÞüv\1dÌ)¯>£\aý\81\16ên\1csê}\1dôÓùd\15bNÙ¹sï'\1a\f\90\8a»Ô{ÑÍd5c\1a¤\82ð\ 6%\v\90\9bÕvªJ³\9e¸\1f«g\9aK\11\8cbnZ~\10_c \v>̤¨ûGWÏ«ö\ f\14p\87\9f½/¡Ý\85ô1r&Í°·9Ó\ 2±e9}ò»ü\87ªAÝ\9c\ 6\8fX_CiÃå\\82\17Þ\95 ¥¥*¾Ã\16?ñÑ<çn\8e2¼VÚ\95¬Ý3\84³+9ÖQ\98@Bº\M\16\vµh\96í\85·\8f\1f®$ô\8eÒ0"\8dÆL\9b\9b\1f«z$\82 Ð©½õ'3y\16\95oÚúüuÒ¯¯\97ÃzæL\fm\91\v\1eJc/\86õ\96Ê¥\98%îÙ!<=¾Xõ½\ 6-\9c\85÷í[ÔèÔU »\8c¬ ÛÓÕÓsÍ0#ë\NÎû\95È4\8a\88\aR\14B\ 4w\8cx\18\13Ô\7f.fóþ§ùl­±\12Ò¤©\17]=i«^\8aÎ!\9a\ 2ÎK\ fùÝ\81,µ\ak\\12ÇU¸\1cp\8b2n£óBl\výö±²p\9e$ø¦Ì'\9b¿¼\e¦ýj3\99\r\7f!U¡ÑÚy\ 1\86þ\83ì\vås(N¦K­\81øV-¸\11$}¢é     SÇD6½\9a\f\97ju£\80t@ëý¯P®¯\ 1P\1e\a«ãz\7f\93]Ø\¸ui\13\rè\10ð_~÷ãë\17"\1ej\ 5_Gߦ)\1c\17\87\1c\15Èú£ø¢>hêw\98U?\9co\17\7fçó¸¦ÅÐwÖ/®ç(ÄH\94¸¿\85\8aï\90\92Ä\ eGÑó\90©\l\aÜ\04"£\v\15\ 5\9d.áô\83\ 4o\84¬¸\8f÷\bt?¯e\7f¼\92W÷º1¨^\9e¼\f\17¦B#í\11Ò±\\994c\9b+ÓY\7fø\ 4Çw¦
-\97éúK×\19·\9eúÎ\ 3yó3×9´f\8c5à^&~c¬\81ÂâÐ\a9s\88\14\8aÞCg¾êç½/Y\91È|ÔÜÙÄ×\82*,nti\f\ ehd\1d\92\90Ò\8dìtÕ_£àÔ8Ê<ï*˯µõ\8f¯ãO1\98,;ãÌ­ÞdµÀ2&{"\aãs\14¾"\b9JnuæÉï](´Qï_È(Þ?Q}×÷¹3|\²;°y»cÊl=\19[FZÛ=i+\aBo\bõÃvñÞ'MÄ\1ftJäÖq\87Í|þGU¼#¼L\eÉ´g½Ïz8¢Dd\_ãuûPrW#è%n²Ñ\12²ÚK\94)¿Ë\1c9>R¨\Vüü2}lƼãq¢âQKöý%|!²{\8a϶³¹ïY±\fñæ\98\1cÊ-cÃ\87M\84øuHCo'Ó\9f'.\91£öi\9a¯¡
-/y½sÔ(ÒEt[ø\7f¿Ôì;*x÷ï2oW³\9bå¯Rë#\fÇ\1aCåóa\0×ͯ" \1e{áúke\13£1Ow¿\ 1uºÜ®¦jÒ¶­t6Y½w\1d\1fêª\87Í­\85ö>p-\fU:¥Ùo\18\9dnO_h]×ÅM³}Û£è¹\91ð\8b~V¼¤\1fè~\9côZèãÝG\88ÛßN¤.\1aÝúOÞ¾\96D\86\8b\ fÚÆ_4\869ñ³\ 6Y~\14 ð\92nÏjß\9c>\91; Ji_\8e\7f,\14|E®Ð»iÙ\8eOq¿IsºD\7f\8ax\83öy./\9fEN'\ 1¿sÙ9\87ý.Ë\ f³á|ùA\8a\1aD·?\89\10\85ÞKðmÖ®\0û}\8fçýû\99\96¢R÷\7fY\13¿Ãñ8\19\909GÁ`¿½ñz2\15\ fE§9\\9eÞ\9cþè~{è\98æ%vâ4¦nflÛï@°pxvú\9cÛÿ\13\19TÉý\1c\1d\ 3]\81\1e½\13õãÞÞ\86\16{&Á\1dýãö~wK¯Ð{ý·PyÐå\1c\19\17vG9m\8bãébv)  \85¥`hX¾9åsxñ\12ÞNÜk;÷\1c\Tr:ø`a×Ýñ\9e|O ïÔ5xIý¢éìnB9\19ð*w|áÐÌg.Ïï®çèÇùz\vÿÀ&\1cÊÝjÕ\7f£"¢nFÝ|W¬\8aÎÐÑl¿´\8a\9cÔ\90a|%Ñdi¤~z± /\1f\82K\1d*·Ý\85D$À7ÌÈÂ\ f\7fÈEÍí\98vP\86;\112«¿ZkR2\17æw×ç®%Æ\17è¡>óòÚÆÝ\ fýûu¿ºq}lÔ÷Ùý\ fÞ±øB\1a\95à;
-#­f0#-?;àûzív\8fº\83\87$>ïoúùò\1a\97k)\81Ñt­ñQ\83\9cròl+\1ds´]\1a¼\94ÖßN¤íâgG½\e\9a\9eÎaðåU\19>RxÙO6®\1f;axAtÒÿ²EÛJ\v\1d|þ~ÿZ¸Øm6à_     Äp\8cwP\12º\8c\ f¼ê÷ËóÓí5\9bJÎa\1fòc\80\9dÃ\aT\ 1\8fð\91ÑH®½v\83\1e\90\88`s\fÎR´\8d\0\95þ\99ze^,v\89íyí5\15\9cÉ\88`8Î\10§\ fµÃ\9cÙ\89À\ fÝåt\ 2ÒoG\ 2?8¸§çznöjyà\ 6ú\ 6έ\19\boßBåúTÚöë#Äq\84@¹£âߨ5þ-<ÞÛá\15ÚBÝ\10o\92ü¸}ëûô_\9cüü o|Â{YÉ\8að¥Så§ÉSH\vL>\ 5\8b\7fÈÇ\­ûúªC{.ã?¯æ·ºø&Çõy\92ç>Ì&¯'ÃÖ}{Å\8fÑñyÇQ\837xxv6£q¿8{ôÏGÿ\ 3s\1e\0Þendstream
+337 0 obj<</Type/Page/Parent 332 0 R/Contents 338 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 4 0 R/F9 5 0 R>>/XObject<<>>>>/Annots 105 0 R>>endobj
+338 0 obj<</Filter/FlateDecode/Length 2316      >>stream
+x\ 1ÝZÛr\1c¹\r}×WðÑ©Ê´ûƾäÍ^¯×©\8a×\8aFÎ&\8f-©¥\9dd.Ú¹x³ùú\1c\0$\81\99\91í\8dËe\8dbWÙ:}\1a \ 1\82 \88Ö/gyÖWNÿYß¹\1c\7f}ï]Û\97n=ºÛ³\82\1f\15®-]Õ¸ë\ 5dr¼\94þ¹ø\81\9e¸¦©²Î-\\93µáç¹\9b\9e)Z¸Z\ 1Q\ 6.\9c¯²Ú\88\19¸ÀÀI=É\19¸pE^e\8d\11¬\1az××Y\89©Ô}V\ 5À\ 3*\84Ò\8eæÉ/²R\85PZð\88\89\14¥u\8d\91¢R\ 6ª4p­Ï
+×$ÎÀ\85ëºÌ\eÎ@\fX\964Ó$h1XØ\ 1ç$V¦SyX\1a§Ã@§\13¸\8e×%q\ 6.\ïÉo\893\10\ 3\1a\89´\98¦Ã먬Á`»\9a|\90X8\11\vRzX\0§+`§+Ä\84*\92ã\17\893\10\9aü\93H\8biº%­¥²\ 6\83E¼XY\99Pá9XeB\ftB\81\82\\94H\8b¡¶ìHmbEmÞpà\89Z\ 6ª6p}\97õ®I\9c\81d        »6\91\16\83\85£áKe\r\ 6Û\94{\8a-\ 6Û¶d\8cÊ\1a\f¶ßgÙ\18ß7\1cðl\8c\80dLäú\1a\9cÈu-G¦È1P¹À\15y\8e\89\14AÌ)E\89\82\81+rÚ¨J\8a`Óêjz\ 6*\188Y=%EÐwº^\9e\81
+\ 6®/0)å\f\84ß\8a\9cìO\82¢´î\8cß\18¨ÒÀ\15y\8f\89\14Áª\17ÇQ¦ð\fXP!FÌi¥\94´\98æÃÞI¢¢¶¤ôÁ\19\ fj\19¨ÚÀQ\1a\85\95\89´\98Ô¶4ÛÄ\8aÚ¢\17§óô\18¨ÚÀa\13\89ãÄåá³\94\9c\ 5\90\1cçêÈ!.H\8e^$Î@ò@\85ÇJZ\f¶ÆafY\83Á69\19\92\14[\f\16Ó\85\13\12+ÓE¤¦´ï\19èt\ 3×°\v\12g Ò~\ 1\9c\81\18°à\ 1\93 ¥ë\1aoÐjQ"\90\9fi8E\v\1cÂé5¢\fÄ1J.S1\ 39ÁÖ\86ãÁ\903h-X=ÿ\9c\ 6\v\f4`\1e\892\10R5\­\9c\81d\1a%O%-\ 6Ë¡dX\83Á6\14°\865\18lG©Û°\ 6/\Y4{\93²\18¬÷ä\9fd\8eøÎ\97ºÂ5\83´Â\ 2ÙTï\94\83©\11¯5¹(É\89κâ­ÌQ]3P\9d\81Cu\0\ f%Î@èä5N\9cèäS9\9cø5\ 3Õ\198\ e\1eå\f\84Î\9eÆKr\ 6©üXI\19°\94\8aN\8c\ 3\ 6Nf\9d8\ 3\87\fÄ\80\bz\ 4O"-\ 6\8bçX'e\r¦\b y\19Ö`\8a\80~O³\98R\98\8a°f ¦\ 4®åé&\8eöG\85²\88\8a\1fò3I)Âf¤\93G)\ 3±õU\ 5\89\19\b\e¸ÄTA\8bÉ~Ê(\865\18\9bÊ°la\85m@y\83\17K@²0r-\1d\89\1c\96\8cÊv\91c r\81k\e\9aMâØ,/Å\ 1¶9T2 1\ 3±\12\94Å\953\10ÃѨʽ¼<¼Uà&òüu\8fÀÄ{\97·¼ëá\15×PH\17\85»¼á\eHî.¯\9f]\ eWóÑ­nÝw«åv\n7\7f¸üç\19   ³ä\84\12\ 6\89N\90\1a|×CôY\93Ñ+°\0w\1a¨¸yæ.Æù8lfË;"pfäE\13\98áðÕ\1fÇ_é\11\8eZ\15ÿÛ¸ÞÌVKz^!\ 5Gáì\89ü)s\9aùó×]pY\83\86Ç(c°»
+v\18\16£ªëà\17c2²·>_î\16\ 6»¢Ìj\1füø\14<!n\98 Ð\v\98©Ö\97ÇÖ¿\1coWë\91\8cĵ\83®Ê\12\9fùÙ\9e£$´Æ?±G*óòëõ8þGt \14;Qq\82~
+n¡\14ÕûÒø¥zÀ/»Ùü&l#ì\84h\95\e\967d?®K>=ÛÛsÈ\9c\9fvãùpý¯án\94À\82\9a.\ 4â)8¬,ȸ      ß       \8b}\ fÉÎ)mFùqµ\95(A:\8e\81\83Òg|r¾\9e}Xýû7\ e±.«±\1d%ÄÄ\ fÑÅ`ºS\8b\9cè\rº5`gè>¡Î\11³ç\8déj·¾\96\9aà¸\1cÖWÃ|ÎæKþfóOaµ?:\87²ä0@á=\88\ 2Ù)ûvï¦ßÿ\91ÍC\19\9dǬ\8a#l¼ÞÎ>𩳷'Vkz\19\99\16M¸xfÉ\9ej²®\8fÏÞ\f[z\rU\8c\1eN\17çoùY\97Åa>jÁ7!\82\9b\8a\1a\ 5\17\8e\a\e\1fõq|¼\9b>g·¢¬K¦\7f\93i~¥A\82µ¸\93W\aÉÓ\1f\e;]Í\87õ\8cs\\89+@~j[ûs>)+\8a´        5¦J{\82¢\ fplìO³åÍê×X)ÄcásC\9c\ 6\1f\f¥[\1fö\9e\ráöØÐWãÕlX\92gþÏ\16µ;¶õípÍɦÕÝêÞMÿ\1e\9e¥Ãÿ4Vñ3³(k\8ef´»\ e\8e±þØn*æ^N_\91@e\12úgF8\rú£v¢\15F\ 6\95uV7ñ\84zs>yÏË\89ª?\15+\ 5\17@Ô9«Býr\1a\96}b\16Áhúj\85ë\9aÝÁ¨Â\8e¬~±\98Ýñ\99\f_èiûnJ/¢.~:fãbGs\9e4Eæ\ f¢\1av\1cÛýgÙº°úäêÌO,n¤JÏÆzd£½ÃWê\8c½kÚûûùjHW\17|\17\88\ 1ÿ¿]]þ\81r\96\83Âì\8epu¡Ç\15*üx\85\8e\93|¬ÿ\83s
+j\8a¢ÒÐ- \85É\9ew^ÜnÇ#»>qÛ\r¶>¡Û¿xô\8dÈ~\14%\13\14\9e%uAä`·M£÷÷7\83\å¨\ 3\92êòè\16´\1cS\10ý4^mÆõ\añ!úº1s>ÖÚ\7fɸeÃ\9b   _Ix3E¿H\11`ýB}¸\ 1·\98ÐM\8b\eé!¿Ü\8c\1fÆùê\1e\r\v¡plb\9eq/wÜ\8dÃ5²mãýæb¼_­\93fú]\ 5êÞÅ-Ú\98{òëqØî¤EC\9b.^«/Æ_vãFz\84h\80\85ov±,[r ¶ÙJ\98fÚl]ö@\9bí\87Q.tt\a\ eÖNw÷ä\ 4Ò\85¾ðÓÌËì\89ÉA^FÒå\13h/óÈ\8a³±èJÆò\82\82C®I!\ 6¾$ \1fIFÂ`âûÌ#®cÚEOÿ!ã9ZÉzüR\836¥µ\a­)&\ 4¼Ü§pºÇ=óHVþ\9ea\83\95Å\94`hi=ä\88\14ò6
+^Ü°¹è짻²;n\94¼CæáÃ\v¿f£\11ô\ 2\19jµÜLÐ\86D\16çV
+>\ fÓuN\92Êùz\85ï
+\vñ'~S%và~\8fa_û\9dà¨\ 2_?¨úÔ\98yà¨Vk\8b¬}Z·êC·Å\84\19?åà\13\1dºÐz$Ë=Ì\1e=¦kÊY?vM¿[Ýÿ¶\9eÝý¼\95c\ 6q\90\8eæ¿Ì®Çå\86;\90{{ì¡CåÍl³]­¥)\8b#?\84Êá´\1f\19\97Ýþ1S\94\88\1asΠ2=Þ`Æ\v8TN¥Dý\ 2O\8aõ\134\17[|"\88;\ 55ܱÍv5\91U\9eÚW;ë\9c¸æi§Ð\87\16Ý(á"o¿/LGù\b\81\9a)Vén\98oV\14;ȧ\140߬0²\96\9fË>î\aúp\8coÉhÐt=}¶.²ªm©\82\fiý\8aå¨{;,w\ 3\7f~¨ò2ëòÂMÚ\9c?\1eÏf¤îû˳¿\9eý\17N\80À\ 3endstream
 endobj
 endobj
-352 0 obj<</Type/Page/Parent 345 0 R/Contents 353 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 110 0 R>>endobj
-353 0 obj<</Filter/FlateDecode/Length 488       >>stream
-x\ 1ÍTMoÛ0\f½ûWðØ\ 1³"êÓº®[¶Ã\ 6l«ÿ\80\97\v\7ftNV¬ÿ~¤¬ÄjO=\ 5K\0!ä#)>>*¿\v)\82\86õ\98ï@Ò×\ 6\v>(\98\17\18]\b^\81\e(GR\10\1fÈÇÏÏì\ 1g\ 2\9d\ 3TB¥ß=Ü\14«5\80ñÂgPf\ e\80\12\85ÉÀÜ&T\aár4³        uR`\8ef6¡¡\12:Cµãfµ\15\155k\95°Éàn3\93\88\84\17Ø\92§\145rÊ\8bÆ\9a\97°*r>c<\e\e\1cM\85yЭ\8bÁi\999\80V4\80\15ËLºNS++ö¡Î4\88B\90n\9bm\0%¡Þ\ 3ZR\82hy\ 3õm\14\8aÜ»«ºùÕ·0íáz\1a\8fíx<¼«\1f²:QËXÇ\ 2"×)S¡Rq¡« 8\81ÈYZ\b²áûÜ=M\7f\9fÙKz\18¤E\8aþëéñyîîî\8fï\19¢Þ½\ f        úÚíÚñÐÆ\94J ­Ø\92Ò\8c·ìSR\98êäûÒ\1d\8eÓ¼\94§Xm\96Xq\81\8f\91ÜÍfkÎ\93p\8ay\97¤\98Zf\81q\1aèH\98\85BNÍ
-\9fÜ\17höÍW,¬JZò\97TÔk*ùäÿg*\9bíyUùÑ\91>ÊÑ#¢ÝD¹p¢Ý;ésÓƵÃJ¸Ó*AÓ\1f¦´w\88îrûõfÉò@\83Üj|îë\11\1fl\95Ö\14\89~\85<\13¤ÿ\19\1aCz¡ð±}jûé±\9dá[3þiz.¤¥\14Ú\ 6\f\1cÛu\1d»?ÕÅ\8fâ\1fµëDlendstream
+339 0 obj<</Type/Page/Parent 332 0 R/Contents 340 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 4 0 R/F9 5 0 R>>/XObject<<>>>>/Annots 108 0 R>>endobj
+340 0 obj<</Filter/FlateDecode/Length 929       >>stream
+x\ 1mTMoã6\10½ûWÌ­\ eà¨\92¿ulÑnÚ¢h²]÷PÀ\17\9a\1aË\8c%RKRöúß÷\råÔqZ\18\16$r>Þ¼y3_GyVÎèöð5åø-Ê\ 5­Ê)y¦ý¨HG\ 5­¦4[\92\93Ãèß\87ød9-\8b\15\9eóµ<§ø'ß\9bUzûóiT\16Ù\94\16«2[SKÅl\ eËá«¡/£÷߸]\16Ùòýí»oÜ®fw·\82a^.pö\ 1Ã\8f\9bÑ÷\9fJäBÊÍ\1eÅ,×ó¬X-iS¥*rÚèq\91ѯ6zWõ:\1ag\1f6¯pZÓÕãq\9ag³å\ 2\1eã\17oNîÛeB*\90²t`ã):ú­·Ç]\1f"û       \99tóܱ¥/®÷\9a©óî\95u\84CE\8dÑl\ 3WÔÛ\8aá{`zzù=£\1f\ 2\85^\1f&tÍ@\15\9f¸q]Ë6JÈÎE¼\19Õ4\17A\97Óc\89Z\81ÈI"@Pöâ,Óùàè\0p\128\9a\96't´îÜpUãU\0T\1c\f\9a\ 3\ fíP²Ùõ\91ÉXñ'­:¥M¼dôÜ{ª\9djP\v\8c\83i»æòæcl\ f\7fÄoM\b`k\82\8b{L0÷îÄoµ\f\89\91±UGä\ 2\11'e\1aµk\12\f\80=\9b\8a\ 1\80T_\19¶`\fg\9dCp\98d×ÐE    å Þg\14Y9\ ed]D¥È\82À;¸\b͵Wm+´¾¯.£\17¥\8fª6¶\ 6T\ e\b\17\9dó×\ f\14  j       Àq¤@ù«Û¡v@ã¦I\10\92\88\8a\f*\10\11=Nç\19&\ 2x\8a\fâùÜ\e}\fQù(©ßZøÓ­\85\1f\15\85jÊ|.þ\e\10¹7>D\82|:i5"¼:tD(¾ª\80ýw\ 1ì\99\ 6Ð!¡\103úÛõè\97\85jv-(½@j\ 4\1aU\98\90ó\84Ì\16¬D(\92:\15õ\81\83Ð\90^RKwàáê\e¡FäDºû.\ eêÝ;_\83c\ f
+\11+p¤¾#\1cÂ^dÙ{4
\82\8c\12\1ct"\88d\87\80    k²ö|2|ƱûØP)äl@>ÔæÈò\80&uV\91>!Gê\9e\88\14\f7\90ò\ 4*7ú0x!\19x\11%\b7!\1cnvoý£íxp\bÌmâ7éÅó×\1e£\90&Ìíÿ¯öORûö\ 13mAj\9aW\f\9aÖ\1c\86\ 1\13t\9eA\80\89Îcj~\19@Hã\9eþø\v\9c\98F¨u\18
+R_\8dÎÖÂ\ e ÜÔ¶\1d\8eÑ}£|#Û¥\8f\ eã¹\97\89½\a\fm\1f>\92\b¤I/2ò\b-9¶cÏ
+\¥>\ 5ì\1f\8cªÀ\18\16\ f¢\87è\87u'\15B?©\7f        ¤çý0DR  \7fÃæ     \ 6\83¦\1d\86ËF\143\883\fëM»\8ae\7fÒ^é8¹\87+\10\b$v\ 2Àó\10¨B§\11iX<a\18tÙºEq\9d±E>ËÊ5\96°LÙ\7f\16ô|\9dgëõ\1cÃ(÷\92öçÍèóè\1fqn'3endstream
 endobj
 endobj
-354 0 obj<</Type/Page/Parent 345 0 R/Contents 355 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 115 0 R>>endobj
-355 0 obj<</Filter/FlateDecode/Length 884       >>stream
-x\ 1eTÁnÛ8\10½û+æ¶\ eàª\92íØò±\8bnº]´\9b´u\ f\ 5|¡)Zb,\91*IÙõß÷\r¥D\89\8b \86DÍpÞ\9byo~NÒd³ ñÇ\95\94âïvsKëÍ\9c\9c¢Ã$\8bG\19­ç´X\91l\90\93"èù\87s\12äÜn\92\9c\96ù\1aÏsüÇÜ1*ãø¯\1f&Y¶L\96t\9b®\93\155\94­Q{x«éÛd±âK\9e¾.ò\15_\1ccã×\17ï\r-Óy2\7fñ\95A,6|v\ 5âïíäíÝ\86æ)m\ fà²Zç´-"\ 1\9cÈi\96ÐG\13\9c-:\19´57ÛG\84/)Ëúð7ó\1cWn\8bé\83Ó'ûë2#áI\18ª\94v\14,ý×\99ã¾óA¹\19éøå¾U\86¾ÙÎIE­³\8fJ\ 6$\14Tk©\8cW\ 5u¦PÈ­\14}xø\94Ð;O¾\93Õ\8c\86
-\8c ¥7Ù¢¯[¨\93ªmÛ(\13¸@k\ 3\9e´¨ë\v\ 4\fÂ\¬Qt®,U@Ç7\aݨ\19\1d\8d=ת(ñÈ\b
-å5æ\82\fiAYï» H\eο**E+¤\ e\97\84î;G¥\155¨!Õë¦Eáá\ 6m:Ü\86j\8dö\1e½\9bñ\aD8{ROlúÊ8oÄ\11ÅÐ\8a\93еØ×\11\87ðW\85ϺPÀC¢+´2è ø´\16·#!\19bç+H\b\13¹\açÂ*OÆ\ 6\10GM\94Ù#\85Û^:Ñ4Üæ\97d\13z\10ò(JmJ`U>Ä\anMkÝð\ 2\96h.ÓÀ\91\1fí\1eäÿ\0ªê:\ 2bmeëA,\vV7 e    dõ¥Óòè\83p\81Q\fÓ¥÷ã<\99Ïk­±-\90þÃv\7f\ 1\83QP\v7CJÛ\ 1I¯Î+SÁ\7fÓAn\aëJ\15\9bôìÎ\18\1cC\0Áw-\93"h\13Zx\96UB\9f1\12ºðñÇ÷Àúú\8ahÝþ
-\8cºÖ>¼þ>\96àF\9e\ 5f\f°¸PĸQÉOfh\84\11%FÃZ\15E\ 1\8e(}=\´\80Î\1aM\80ôlß        0\88S\16$OPE\9c\17-®¡ò\19\f eÕgÁ#Ì       ñ\181y_\8dq,©3¦G»i\9fà\95j®Ç\8bZQINýìà\99è>{\18ú|Ç}ÞÝÀð\86¬\8bf\86  ¥T¾7\1fÃs
-²ÕÁ:xèß\1eEtüÿßißéº@\9b-LÅ+\ 3\ 4¯:UZFÝc\18\85¸\9b¶Ð\92\96]-\Í\8b¨\v\16F>Do\97ì¯ÝÍu\e\ 1õy\1f\80\11\9b:%ЭP¡¸Çv\82s\19G¿\96\ f®ß\85L±­\95ð
-t\ e½\99\98\84ú\85\1dä5\f'-Lf\ 2x`\11U½öÆ\81û~    J[ôÞ}{\97\8f{u\99.z§ü±~\97y\9aäù\12»\9a\9dÄ­ùg;ù2ù\r_C\b\18endstream
+341 0 obj<</Type/Page/Parent 332 0 R/Contents 342 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 4 0 R/F9 5 0 R/Fa 6 0 R/Fc 7 0 R>>/XObject<<>>>>/Annots 122 0 R>>endobj
+342 0 obj<</Filter/FlateDecode/Length 2669      >>stream
+x\ 1¥X]\8fÛÆ\15}ß_që\87Z\ e´\}¯\14 -â$\ eÒ\a§ÍnS\14\18\91#rl\92ÃpÈ\95Õ_ßsï\fIQ\96\91\ 4NìõJÃ\99¹\1fç\9e{.\7f»\99E»%\r\94\7f½[ÓýnAµ¦ÃÍ\¾\9aÓý\82\96\e\8a\vì\99á¡þ\aï\89f´Y­£-­¶÷ø}\81¿²wxJ~ûåÇ\9bùj\13íh3ÛF\e*h¾»Ç¿þSN\ f7Ëå:Z÷«Ëõ2Z\9d¯\9e}.`Ì6\9a\9f¯\9e}.hµXÀ\9cád6q½eÃ.L\lç¼\84\8b\170hu?ÿþ\13\e´ØÎpÉ
+GÏ°º\9cí`\9eÿ$æ\9e}ÆêjÕ?Ë«|åj¾\80\83\17W®VËhI\8bÅ<ºç+7kló\9fäÐ\rö-°o\8eÅÍ\f\11ð\1fúµù|#k\8b5\9fí?u÷ívlÂ8   ¯\1foîÞìh¾D@\1e\ fÈæf\vCï7ô\98H\1a\18O\16\11=f\9a¾ûõ\81\95u¦±õéÕã{lÝRØw»\98EËÍ\1aû&?\1dèd[ÚëØ\16\9a*U7d\ fÔà\ 4\157æYS¢\9fun«B\97\r5Z\15Syþhò\9c°R6­Êó\13\95Z't¬MÃûbí\1c5\96l[Sf±\9aÖÊäS9\95íª{»"ú¹ÔáB¶qF·;\84\ 2vñUTèb¯kGr\9b\\81S\9d\86!\99qÔVt°5\9b\13Ñ?s­\9cÆÉ*ñ\8bq¦ªF×\ 4·ª\7\1aVì5\1eïì3eJÏFq\9c"\1f\1d\ 4v\ ePH`o\17«\be\ 2;\90½\88¾í]Âã\97±\9cï¢ÝlÅÏrÜ«Ú¾×qóÒI\ 6\ 6\ 6gÖ5\b\93\ 1¡\89õ\e[§úÌö\ 3ì\85\83\1cü`¾£\r©2¡{2Øô\ 6§"\9fÈ\89\8d[N\88j\f\ eã ð\9eFÇYib\95\8f#\19ò\91è\ 6Ip]Èj²\95®q\0âàN°«\88\bö\10\ 2\vÀð)\1cLgK7äÍéú\19\13,ç:ñ\91P\1eU\13\8a\9f]dÞïÝQENü\83að¯ÔÍ(d\13\7fà(4c\8b¯\9eîO¾<\89\83þû\v©©µ¦Â&m®?of[×\88Ýø¤ßÁ\0\8aêu­Ê8Ón´\ fx\1dÒÿ\1f\ 3X\96\18åâ0#\ f\7f½qN²º\ fG\ 2`\ eX/9\9b:ñáñ\ eá9ìñ\87ú\8b\87h_s\83^øó_ °\10\96z¸®Ö¼\7f¨¯ªÖ\ e7
+\1cª\5ÈUA®Ò±9\98\18±s­vÂ$|?Ì £Þ?\e}ìØ\81\f\10TÇÙ\89TCYÓT_ßÝ1\b\7f\17§ævoÊ;ÞÏëø|çÓy7\1d[uÌL\9cQaÒ\f\aê¼Bå7\19êÔ\81eÌÿ\18«\99=r\84\95Ñ \1a:\18Ð\81M5»+Yô9\91âír&Ql\1dj\ få\ 5O?À\1f×îoϹ­R¸éPÛB\12X(\ e\96\1f"\1aòú\87R\10àw\84=¨É\1e\9b\92Ê\ e       F`4dCåGuÂ\13\r1\8f\81\82Á\8a/<<^\3\8aYÙ2\97À\1f¸Ò¨=\0_kO\82(S\13\92G\83\1f\9cEoÓ5bW\1f\a\93\0\8a\18ª!pK©?6Ý=þ|z\9aè(\8dh\19\8fO¯"p\1a½oa{U\eÞdI+ä2Øv¹gÆ{¦°Ý;)Å
+¾a\97ä\10¾w´u\8c\93àª\e\8cà\1e}û7XÃm>ü²\98\92nb¶íç\12¾p.Li\1a\ 3\b\19Z\9e*OÝ·Á¦L¡\8b!0%I,8w\88aoð\ 5\18l\89\16Ã\18\e\8eìÛô`>^P\ahУ=Sè²\19úV\b\9cvBÊ¡[í5£\1e]¬0MH8·,8þ\0ªû\15Ý\91[ÀÛÖ7Ê=ZõQ\92ÖÑ=\16ÁÙü\10Î\89\9e^\ 5ëÀZR!\8fì\92´WðA\9b7Ì5=
+\9b#ÐåU\80÷Z£\19\84\12ÕªDt\ 4ã\85âÞJ6\8e\15ßÃ_ã\88ZÿÖ\9a®\ 2\14´ÅÓ\84sj
+\93«úé\15¡\8f¡Ô,ï\ 4­Æ\1f.\ 3gJ,ò\1f\18\91\98\ 3z#Ó\95d\82Ó®ÀP\ 5\87Æ4ÌN>Ī¬\13\98\16>ÊjI{\8bÂ\96:ôeÂ-£-\ 3\0¸a8F\88\ 4BåÎ\82\88½kð\ 1Á°u"]y\9cUÉÙ tü\15|ÔÔ_'\11\95\87F\1eB\11¡\8a4T\16\90\9e\9f"ú7x\f¦]@   \1cI·µÿ2h¶        \1dr\95r<$XrPW<@y\94~}å\8cØ\86c\86ª~~·|7{\170\1c_k!¿Ó   \97\91\b\9bï\ 4\90ôck\12\9d\9bò\ 2Û¸oh\8b\8f=\ 5úö\fÀq62\1d´&Td\8dÒ³\87æÈÍ.\b¨\88~\90ïõ\ 1\15ÔPÁÌ\ 2¨\14*AÄÀ-¥k\ 5\\9c%üq"ý\98\ 6§"ù\02¦DÎu\fHBÔ\84\96?\84\ 2;¡b¨1ÅÐéØ\0\ f6\ 6OÚ{×ó`\80M\b`§>\84\9b\89t\ eÐ\e®?Â
+\87\86S\9e\98Ô¥\9fqïìÁ3\ 6\96k ½\1a0\89J|ÿðrð`s\14öØ&ɸ\8f´ov¨¾ø,#S1\9a\8aWv`ôãäÈ\96·\1c{\14\13ËæK\0\95¼\ 6háç\18\89¨]$\ 2Õ\v}-\rÈ\93\93¯zWð\85P¯eê\9deÄ7\81Ò¸Sg¶¶m\9aÁÃ\83©]\83î\9a\81`\8fú%"\1fç\96ë\ 1¤3\ eJÕîs¸\16H\1faåxÒAsLºùD\8a\14\8f\88FÁH\0å/F¸\80çØ«ÔÛu´ÙR\981\9e\16\9b{\1a9'«}xþ+Çx¤\ 3$NÁ'\97Ù6O(åÑH1¶b\ 3\9b\14Ô\91\97iGæB\9e°¼9A3÷Uý4)A\81&\85\e\11\\80æ\933NçG\0ð#£'ô\ f®\ e!\ 6^\18 \ e\91÷llËâR¬÷ê?µ6!ýQñ`ô%áùÞ\96/\enyRÏ\8e\8b\12ºN\81nbp\ 3ò\8ck¦ \üã¸XÑ\18\0\12@¼ªr\b\15I8\17"Æ£ðôµ\9ca¸M&\9fËXH¨\1ffûÔCϪO\ré\8a6¶ \92£øPóô[ÁÎÎÊ\ 1Ä"ÛÎúoP=PR¥O)\17e ð!ðΤ¥j\98¡XYС-ÑFmÉ\92\aÏb§\a\15_#á\11Á§\ e<°ª\12ý\8a+\8f©\82«'·¸\ 1\ 2\11\r\9b£ÖeDp¶d\ 5ìT}\9a\826¹­H*Æ\18\b\bà\ 6\9f<c\96Ñ×¢Ü1Ãç\ 2½Øò»\87dòÚÏÒ\ 2j\1f\ 1üt<Ú\82ܦ é\ f(\95\9e¡Ïë±\9bh¸kx:änÀã>¦ÛT\97\18)@ àl¦x9QJ(ÔÝþb\8cI@ª×üø\83\15þ\16"\1a\19A\89\96hGÈT¡ÞC¥\\12\ e8\1c\ 3\ 6\86)&)Õ"\95íh8òê\9dýÀ\v\17gö&7Í\89q\8d!\ 3º\rçbº\80\18Æ7ò\10\7f\18g©©\15$\10fk\b\13\90ñ\9frév\89·9\vºíróàuNÇú\12ppa\82\89Ý\a<øQ£Wj\19ù|9
+üؾN$\7f\15}\ 5U=Ðnèf\b\82ht\ 6£([\9e\1eã'FV\ 2}\r\14xOÇ>ª=hR
+\0 fêî\b@¤s\88͸Á>M\82F\ 1]À2>ïîMÏ­çbÆ/õ¼ê\9d\7fzõIËûÞ\12
+,\14àÅyèÑ<Á§\17g\ 5æ\12\10C\9d Å\bdè.\10îh\ 4{\14$z\18\93\18Z\1dV¥·IQB·B\89\9f\1a\14é¥zxË\16äÎÅ\1c\f\fÊÁ~$@\9c\8c²\18ïáY\11â\145¯¹ú\82ñoïD\8dP\ eáó§°4n\80èÍH¶Ç4+«n\90\11aÓE ¯ÌÎyà\82Qt]\14umÿñúè \13\7fàR\99º ð8m\aLÇFD\1esc\9a}\81oßæ`[\904t8'ê"­1\1a\aT\8e¯_Î(fA©a߯ؿPÒ¡p\81ù\87á¥\97÷²Sh\81\8cÂ\e\92Ë·#¡ôïþ\9eB\19UïLòÍ\1cÿmÿ\8awsÉ7Kù]^Ä º {x\9e¬4\98ÂK\9d/\b\ 4\b\97)¡©öÜoº*\80D\88u\ 5Õ\1d¦×\88Þ¢vð\ 6\bIàÖæþâëd¤¬>íÒó9¿Rí8j>»\8fÖË\9d\7f³ú\99\17Õ+¼ªßnWx¿Íï_ù\92\1f\1eoþuó\7f=\rÄ®endstream
 endobj
 endobj
-356 0 obj<</Type/Page/Parent 345 0 R/Contents 357 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>/Annots 127 0 R>>endobj
-357 0 obj<</Filter/FlateDecode/Length 2054      >>stream
-x\ 1¥XÛ\8eã6\12}ï¯(ÌËx\0·|¿åa\81\9dl:Ø}\98ìf\1a       \16è\17Z¢$vK¤"Rö8_¿§H]lu÷ Àb¦mË"YU§N\9d\8f»ytXÑðRg4Ç¿ÍaC»Ã\92jIéÝÂ\7fµ Ý\92V[\8a\99cQÿÂ{¢9m\97\9bhOëý\ e\9f\97øó{\87U\v^ÿëÏw\8bý*ÚÐf·\8a¶TÒr½\89\96íUA_ïÖ\8betèï®Wëhq}÷꺤õfy³\97\9dØlçÑ\1açn7x\v\17|¬¿µ\cùkÿh\r\1f¼/«}´k¯ºM«å\16A\95\ 4Ã{
-\17|ë겤Ý\ e.\ f÷ØÖjÁ(\8cl\1d6ü]ðo±\\0\ 5\7fÁç]]\96´Ø°±þÞçÇ»ÙÃ\81\96szL\91\89ínO\8f\89\87\1fßÄ\93eD\8f¹¤\1f\7fûJ¿ÊÊXåL}ùôø\8cMkZ,¦ûå\1e±?&\93\7f¦t1\r)í¤NÈ\19ÊeQQcé¬\NUm²Z\94¥ÒÙ\94\12\137¥ÔN8e4\99\9a*\11¿\88\f÷ü\11gU\14¤¥Lè\+'Iı´\96\8f4MÍöçt¿X\ 5«¹).\84\93U1%×:[÷ÎFôïB
-+Á\18\ 1\9fre)ÎEådM±)«B:\89íG\99\1aP*\98a'NJpÔQ\88õ@\8b]\e+\92³æX\97Ñ"¢¿÷naíkXvÈ<\962\82\bþYÆî£õX\ eî\11üÉ\8du\88Ôh\1fXÏ|ÏiÐ\7fB_\11t,\1fL\9dIïÐÀ{ÿɯé£L\11\19pb$Ú@-mI !;dæ]\13\ fp\ré\95\0îM\9en7\ f\81\9d·çd\9ck\15\8b¢ËW"\1dÒb\89\17\80\195\99JÖH9\0\17\ 4]F\84¨\bI\ 1¯üFdÉ\1amûL\8eܱ²>!>N¢(
-\80Æ÷g\ fó\96\8b\93ød#õ|´g\11Y\ f\1a,\ 34-]XØ\91v\12\fÜæáí#Ãq¯¶3 \8cq0C®\96cèJ\934\85ü\8e¯M]£\ 2F'\7f\8fq¨ÆϵÐq.íí.Tò%Ûï(5¥½k\µC\84>bæ8þ\82kÖ³âØ\9e\b6[â\92DAÊ$à\13\82Ã:ìi\ f\r\86\aÀß
-âª8?\ 4S\1f\ 5\83e\9cXÕÒÂ\9egGU\b\87\\95d+\19«TÅÀÍ6Òzýaëp\82ÎòxRòL&íãË\15\bUÇù\85\84Gr(\8d®|®\9cÉ\9d«~\98Í\98$#vÌâLÝ\1f\95\9eñù|\1f׳\90ù\19G<\1cÛ³~Jç\Å9\95*Ë]P:/s'e\eQ¨?\99ä¹9³§P\9fJI(\18¥*x9\14\983\99ddBa#\8fÛ /]¢=ö\8d\ 5ÕQÔ@è\ 58Øæx\9fÈ\93,LÅ     \83vB^ÓÚ\94\1e\96RpªêF¿DtÅ\86¿\92¸I\9b\1f\84&ë1\9f\a¶{Bt|âÌ\14gqÁ\9b#\96Z\a%\93ô!ðêÃ[~\11\9c7,y\b  Ñ8qD\9dÔ2è4J\!ï\1eõ\ 1¦G\94Ú\10\18ÓÁ»\b¡qê$ùÀ\1e\r'^\804\b\15c¾h\95IËo®3\14\fÐÓDFYDh"Ñ·§O`?
-Ú/\97\96\ 5jdÿØd©úÆ\19lOl½n½¥\7f5\88»ª\15ß5$\ 5\88q³b07gsSÄ\1d\0òú\0Õc8\9eù\106\10\8e\hýnq²×'\82ã\7fC$sÌ3í\87å\94¤\8b9®_4pàÜ)­\9c\826\8fðF1 }é¾m\9dÊ\ 5\9a-p\fýbH\83G\953\8f\ 4ôþ\afm;\rFúÑQ=e9\96\ e¹°êJ\80Cùä\ 2éËÑ\9a\ 2ú]C>J.#4êR¹\96\95\11û×Vo_µË«zÿMÖ\96Ç\8b/MyÄG\8fg¿¾/dØ*P§ìkׯ°\am\86÷Â|ôô)øþæ\14°\8a|GÿÑ»H?7*\91\85Òß\11hfòUÓàüsvr)jTNJ`r\8dt\98Ô\9dYvÛÁ!¢\9fü÷2\85\9f\8eJfÊ\91K"ArA8m\e,v9jPá¿õã\ e×ÕÔG=d\90\87\1e\8aã\16\16£Ù¢û²\8a`+z*9U\ e²Ë\1e$*ÅLÁyÈúèÆeÐr¡k\8a\©#»7\15Êâ\84\12\80ý3\1a\92\85¦é\v\8b\86\17Pn[üg\1d\ 6\ 3\aB\89\845\89\83e¸RS i·NýÐ\9aì%TXô\91!%Sï5Ç\18Ü\95ÖïÀcG¯º_\18\8b\87E\7fsö0ðZóMÔ\15^\ 3!z2?}âd`\9eÁ\éU-06äÃ\96l\12³\98ÎB\84¦qXëU\86\93årS\9b\11cªjëÆÒ÷{.5pú\88àã \97xÕ¬\9ac\81èZ5\0\98\8c\92aéä0L\82µôMÓÏ_Á\8b ®³\87¸-Ùû]´_P7O?-·»v®ê\ 2ô÷{\90þË\93\\e!¸b\ 5â²¹i\8a\842\16cÁ¬\8a\15<5\80ªíØ\ 1±\ 1Ì3S\95\9f\16\82\bQä@\e:ª¬«I@\f¾¼>Å?\8dÜ_\15ýÕ\99@w|¬×i\f\v\8f\1f'eðtÒÆ\10´=3&!ùMð£Áÿ\89Ó?\8cþèX\b=c­(Q¯-\\10\98²)\9c\82\11$\1d\96¦Ôh¼Y&\84ü\ 3\ 3\ 43¾ª
-´B\9fo.L<'´«=EÆùÃ\ 3[2y7y]vÃ3\1aòçù\88\99¿\12¯}éê86\90\97³\ f£\96A9dçè@j?\ e\f\90_å£í³h×:\18å¢å\12¶*Ó±lq\v¢´ÑèåFssÄm,\ e\92Êv<D~¬\10)?¹ m°\ 4µÈ\82ÁåT\98W\1d\e:ÌC        f¡£tg)uD\88\18fE}\99rþ+Ö7öå\96Í~\97HN\18µÃ\ 3×\18êNaÞE{u\b\8f~\9fÃs¥\a\8dW\8bH¸iL!ß/À¡Wîë\12ífnn&A\17ÙO'E\89\aµLj\8c½Å\biÖrn\ 4þ|__mUB\9b\12Èë\9b¬éxñn(]¬_0±\ 1+T­F«BÂJñ\8c\969Ö!\b:\ 6\91,W¢AF\9b\9b!>\8c\8a\1c\v~N°ê¨
-å.Lq\fµhò\1cÒu5\v\1en1L\ 5Ù÷\ 1÷\1d¼\9bð'Ý\9a\1a¿!\ 4m~c^\a\13ÐçDòWQØwâ\88_7\16\aºÇï&þiþÝ\9fDÖûy´ß¯ñ+
-ÿ<À®þôx÷\9f»ÿ\ 1_\91Á©endstream
+343 0 obj<</Type/Page/Parent 332 0 R/Contents 344 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>/Annots 129 0 R>>endobj
+344 0 obj<</Filter/FlateDecode/Length 3018      >>stream
+x\ 1\9dYkoÛÊ\11ýî_1×(P'\90hYRü(Ò\14¾±ó\0\928\89Õ\8b\16u?¬È\95Äk\92Ëp\97vt\7f}ÏÌ.I\91~\ ÈÃ\12¹;;\8f3gfÖ?ö&ÑÙ\8cºÿª5MðçÕÙ+:9\9bR¥iµw$\8f\8eèdJ³c\8a\99`Qûß÷÷{óÉItDÇÇÓè\94r\9aÏ!0|ËèzïètÎoç³è\18o§3^å¿ñÛéìU4éÞ¾âUÝÛî\18ùÄúaõlv\8aUóÓ\13|\9eâ\9fèùëbïðÝ\19\1dÍ ~±\82ÒÇ|îÉ1-\12ÑvB\8bø`\16Ñ\85\89ë\\17N¹Ô\14ô¾N\13\9d¥\85¶/\16¿CÀ)\85Ýãé$\9a\1d¿Âî\83ó,£\95©r\95Q\126[R84W)ä`sBiÁ\82\97ÆÜÒõûÏ\9fH\15     e&Vοs\e\80\89\0\92\ e­©«X\1f¾ì\1d}@IZéØ\99j\eÑ¿MM÷)Î/4\ 4\85\13F\ 4q¼gBã38\ 2*6g_,.þ
+Ýp8\9fØ<ÍMRgª"ë¶\99\e­\9d¥\9b\ 3SQlòRUj\99iR\99ÓU\ 1§Üi{ób$2t
+)\15ý®\12MXmJ]Èç\9b\ 3(hrx1ÑÉÍ\v\18o\9dÊ2\9dô\95\82OL\95@\803´¬Ó,a÷YZU&'ozDoëªB0²-+\f\97¦!\ e\89j««q®\8aZe}7\8dü×vá»óo\83\ 5\88Ì
+fÖ\95Õ8!µ­ï\ eßµ;\13}§3\18÷ø9\1cZÞé!à"Zxç·\ 2º(|¿<¿ø|9Ðb æù?\17\1f®¾_SY¥wæç6:ê/G\`,\95j­C\14\ 6ûcS¬Òõ`Ó*E\\ 5\92\86
+s¿\8bMe[$06Å\ 2¸C6\8dè~£\v    \8f\eyS\aÐr¦\1cgì¡\10³\ e\9eràZ\17º\12\98\8b¼_è\1c\1a\88\97é«7q\0ü\14 ù\19m\>\88',gÜ*ºSUê\93\13ùé=\ fóF\ 3\7fã§Ä   <ºÐäZ\15\8eC\b\e㬶\9cû÷\807C\12Þ\8eoáp\8fû~^Ãw>\9f-Ýë,\8b\ 6Ѹ¸¢/W\vÒIê\18ÀðªOÞlÛ\8fPD\97a\89\17çá\ fpr\ e\82CbÇë;u­Éµ)\90\ eÅ\9dÉî:\ e\81¶;ä\ 5\8f9\0       Ç¶\ f*»y\11ô\v$\ 3yGgÑ\94       âQØTúG\r®±\88l®É\96:NÁq\e\84\ 1\8c¸\16\9c\80[\95\85¯`\1fR`\87ð$0÷jË\8f\ 1\81\0é\9fN\17\16,ÂäÂ<k\ 3ª\ 4o\94§U\ 5£ÝÆÀWiÑsggþ\93I\1fѯµ?\a\ 6ÝéJâXV&ÖÖBÕ`ÎÚ@}Ï3\12<ðÏ\87\ 5H\19?\1dôã\9f\8d±ÂëÎñú°=\11\94\88)ùR'`¸~h\1a³"ºf¯\81\15\89\81\1f\vãÈÖÕ\1d\9b\ f§\bbè2\9c\ 5\8e\13\ ev\94ÊKN[q\1d\97\93Ì\14kfK\ 4\80N'\14o@Í1XÙúHx
+\rÆöub\·\99B¦ve\r¿ÃLïߦæx\10D\85¾÷ÏC±;`\12\rÙ\8d©ÁÒK\r_Ü¥ú\1e¸cÉ\9aCæ«J\9eÚqç²\88®\8a\18\96"[í*Åj1ÅC%6 ö\18\9c\ 2O2|ú
+w'1Ú\0\95R¶?®p_Y\81ø\ e²¯p@5"x2Pôn\95¾9Ð\11\80Üwç\8fo/¿\\ fyz°èã\97ëÅù§Oý³Që\ 6u\1füPfh\ 1<°<\ fKÁ@¹y\928#:wPXYa¤¾g\18x.\ 5°\96\9as0¼lÒø«g*\8e\ 6\0£\v®l`.xÞxbC¥\ epÜ!\8a\88Þµ9Ǥ\a\80pXH-Ó,u(½M}æ\87R£¹uɲ-¢Çù\12\12Í2ص\ 2Ppx_ë[]\82 
+zûÛuäs­ÝÃ\8a¶UI\8c¢\9dÕT£\1cT\ 3ßC\85Ã{½Då\87\94a{4t   L{Ø\99q®8OðlÓgu«96äTµæî\a\86øÈ6©\91c\ 5L¿õO»Ä\80ß\9aÎH#\81\1fÙTé\ 4Ü7~°7¢\8f+Ú¢\7fÛ(°\ 1Ò\16]VÎýGµ¥¥q\9bÆ\8eÐÁ- f/ùóar\90\88\béï\96\ eaÕ¾6쵦£\1c:\8dC\\97   ê4ÌÉ\ 6`}(\86£~Øw\85o*{R\98SyQÇÛMyzB».¦}Ù\8d+\1a\94_ôªÜ}\952    6ì\ 4ÎT¨\1d\120pmç\1e\eügë\98ËÁª\ 6\80\91E +_\8bROóð\ 4P\8a^gE¥±6EX\86ç\7f@ÿ\94\18     ^p\1a\87¡Õ\1e\9dJ\1aéHbÃ\8d\1aà\84\8e-ôs¦Zß¼ø\aÛ\87i©-¿ïÒÊ\82\v}\80CL¡ï\96ªº(¸øx\87<\8fFß³ÿ\9fpDo ,ðõâ\9d¤ø\88-|üÔq\99¬\1e        Ðø4:=;Æ`\85vâÈsª\7fÒ\f!ßëâ1\89­ßú2CÍ\11ê\a\9d\ 1\95\9e=e<è+Öã\83\81\14\84\93ýé\81\8fX¯w\ 3u\97*²q)ñÝU\7fêÕ\1fO1·Næ»a*RÌGaPé\8a\94\89cÅ­\ 6s"
+ü2\a\96\ 2J\bË3ê\1e¾<|\19=ìvQIº®\89{¡?ãå\9cÏè2­%ha\17%\88ç$\87/r\86\8b:áÆ\ 1ý\19þê®    IóÒT\8eÛáßkT \0\97\8b\83\8dÆ\0\95_òë\17úêó\f\82â-lG&µBJ\ e#1\98\8b\ eè/¿]~¿þxõe°\10\15¿o\fØ\10\9cì[³U\1a\13èJqQñÛ\9bÜðM\f\12?jÚÇ\86­Á´È)\8dvÃgm\82ÈH1\84ý      wÓÏØ۶θA8\8a0öó\rÂx:\8f\ 1¼Ï" þ[\9dÆ·\98t+é AR2îsÿÂ]fÏHß\9f\9c\ 1\1cê\0\17Bn\10W*GÙÅ8.ó\ao\ 5\19I{­ÀjÕm]R¦\8au\rf!\9bb-\96"<̶h\1cb\87I\98+3\8bò\e`n·\ 3c,YLKKÔxÕ=F1\198\1d"\13\14E¸ep(ÚÍ\8f\ 5´äæMÚf¸\ f\1d©\1f\83Ê2Kq«\81\@+\8e¸Á\bd.¤Ó¾Sk»Ï\9a"\vs\9e\ 6¸u`ïøð"n\98\f0?û\96\1c\8b)VE\1f\bè<ó\1aýEÎ\9cÍs Æ\0Ï"V\99þÉLíí\ 2&eY褭B»t\8bAPê:"^¬CËÌ*É\90µ\ fTË0²\ fy\3Ør¹÷\0¾X!i±ñ\ 2\16¦¯\94Õ\8eö\11ö"QUb÷a\0FHf\19\91\84Q\12ô\1dÀ\80³j\ 4\8bmãSü\94Óö÷ÞÝ请Íú\88>³¹°c\83\92Ã<\ 6µÀ@ÌоäûÌëò\1e\97\97À=\8ci\8d$Ìåú  "y7Ôlox è\82\89±{Òm\90ã¤\93\83®$\1d\91«Ta3\19ä\ 3ØÄq>v>¢vX'\17l(\1cؤ\82DVnª \ 2±T\19\ 6DKûq\ 6\86\102\ 1°\1dIe\15àdé-·UÍ%B\1850-ûáèo>©ZÚyíR\97é7\9f·´à\ f¯\ fý÷^ê\1d\88Ý[    \0÷\9dý`\82Ç5î\f01Û\94ïº< \10Kë*\8c_Bïk\94t\aLs`¹.eæ\1eIÅ;Y4\1c\7f«u ôòå\99KC\ f-Éü\9fà\89ÿÒ¿\0©prÓÕ\\ 1\1aM\­O\19\8b         ©\84´\81\87%\82¹aJ\ 6Å\0fá¥O1¸3\8c~\1cü"Ä\886\1a\97sh\8eü 3p×fx¹\84S\ 6KX\83Á*î\14\18\96¾ÿváÔ¦> \a\ 2\80JÒç·ÁdD.$É\0ð·>ýeFóC\ 4|\81\ 1\12NY\½åKK$\f§\1a\8b\ 1RKp\8bäw¥áöϸ¾A8þ\ùQoI\977lçÔ¿kÊ\850Koù\ 1\14\88ݬ¿Ì»_Ê,\14ÅÌå@K`\15\10ì#\9bç\8fm\ 6æ\ 1i\1e\9cX>_=µW\15j # | %°\97çBP«\9f\1d\86»ù6÷M\7f³\ 4Ó3\9b\1cÖù$Cqqìä\95ÜW\ 4Õä®o7­}\8aø¨rÿã6\b\8d\ 3\96¶^¡Z§|\aÅ(f\ 6
+½µ~@\18rcÂ\17(pAÃÈ\90\a\8bxP
+dÐÀª\9füGÑ|6EE\9eDÇø\89ªúZl}}ø\88É#Πµ®T       &Åí>ÌÔ\15@Ĺ%U\899JîG >'.8¬ÛÑ*ÆÝ\ 3ßI\v2ù®Gÿ\8c\81KNض]\bÔ4æ\82?\8dæþ\17\ 6¯u^¢\17\9b×\87íÇ~Tä^¤GÎ2Ðøv\ 5\97éiì\9d·{˼s\0·Ê\ 5Ê\1e\ eh?\ e\ fðí4WÏæ\17
+À­\90Ò\13B90X\ e\99ͧ¡Èð¼½»zN\1an\16p1\9ce
+¡u\90Ùÿ>\94̱÷Ï:²ÇÍæ\0Ë#ß\19\0e|ÝóÜé8<Oÿиȴ|xïëó\81\váï%fF\\ f<'\98\ 5²4±(|\1c
+Ì5n\ e\91  |5\bø,Í\9d\1f1\9fð»\8d\91P\ 5\ 4\86\ fCqþq¸ÖC¯\88kCDrè­çüû\9cA5îzo©®²¿ï\87\b\87:òæA\ 48RÒ\17\ e\15\18\12\ f÷AÏ\1dü£6\8e\ 1ì\7f\ e\8d\ 6\95ð\88º\19\11¿çRÌ\99\eä\9d¢Iç\16}\1cX\ 1¿C<:\99ùF\9dëÖÎ\1dyÿ\17|óÓItz:÷C¬\10ýåbïÛÞÿ\0\ 1 endstream
 endobj
 endobj
-358 0 obj<</Type/Page/Parent 345 0 R/Contents 359 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/Fc 10 0 R>>/XObject<<>>>>/Annots 130 0 R>>endobj
-359 0 obj<</Filter/FlateDecode/Length 903       >>stream
-x\ 1¥UÛ\8eÛ6\10}÷WL^
-'XË\92åk\80¢h»M\91\87\16MÖh_\16XPâØâF"U\92²×\7fßCJÎzÝ\rP 6LPÔp.gÎ\19ÿ=J\93MNÏ\8bÝS\8aïb³ ÕfF\96i7ÊâQF«\19åK*\eÜIa\14\96,,\9f\7f\1dåË\ 4\97\16\råé&Y\ eO5Ý]\98Ç;!D°Nç°\9a¯WØÏð\8b¡~Ú\8e¦\1fæ\94e´Ý!êr½¢­\8c¡RÚ\96ã;/\8a\9a©°B\97\15;\12¸T        -k\96tT¾"É¥\92\135\ 6ïJ\18Ü\10»\16ǢƩØy¶ä+&¥\95Ç\19½KÞÅà5\v\a[8£#GÇ\8f\9dóo·\8f£\94&Y\9eÌ\90ÈXi*ºýN=Á½ä\84>j\12\91ÑäMô+
-s\80\9f\10¢àÚ\1cI´m­\90«Ñ\88?\18¹Ë:è~\vÖ²öÁ â«\98\87\87ü!}èKn\8dÒ~(ÿþíû`\89\8eLfËd\1eÒ»5ádúa9\08&m<\95¦i\94Ge'_)½ïMÎ\18\8f\ 1ÄkIÝP§kv\8eTÓ°TÂ3\92+x\17P\15¤ù\88~EÈÞжb\1cjfé®R\87ã\82ɳó\88KÒè\80It\81|*å\1dýüç]\8f9LY»\ e\8e|%\90l]S\89Îî\87&\ 3DkZ\eò Ð\97\0$Úp\15ï\88«|\18\1a\8c\vàJCÊ%}Éå\80Êd\95¬3:cv?[®è%&ñý$\ f$\ 6¨\7fÅòZã\9c\82¿\9b\81\0!/På\9c£«LWËsµ`#\98\12\bl$rªMÛ Ãäm§¿ uë|Ò#wUC#\ 2ÎdÊR8ÐÊÑ1ÆGëÐ\v\17\eº\ 3Uû\<Âî«Wë;Sö\9bõ\9d\ 1ø±\86$tlð\r\ 5\94\8dCþçÂJ\ 1Ê3¹®\0\87<^\bG­ðQ}\ 3oâ#
-\13å\17@\ f\99Î\96¡Ï{L\8fPi$êÕÐÀ\14\98\(«ò¾}?\9dºç«\89f?\1d¼N\7fØ[Óµ\ fJ~\9fá³þNxló¸\8fø}\1dHç       3\8eèB\9e\ eh\eK-#7Ë\aÅÇÿ\a×­¹\10\9bg¹}Kc\83\96N¨îß\10\10\1a\83\a´\ fr\ 1Î\118°íD\ 6D²ÔpS°½V\98ÙE\9a¡m\8f\ú^JÑ\1f´\82ª£l\ e\98r/í\bÊ\95pF0)Á± <<ô¾"[©V h_ÞKÝüg^\r@\81ûA
-
-¬Çhì\9eç\10ñSÉ-¦Y\1c¨ì\12ú\1dÐb°\80Þ\1e\83À½y-<þ\ 6äø\82ÓëAÔÙ"K²Ù\82²MÞËö\ f«\ eæéD·½ø\80àoBw¢\ eN'Ùj\93äÙ\82&«t\13\1cÎ"[Â4¢Ï\f\ 1(oì)XÎ×i²^ÏñW\ 4«<\9cü²\1d}\1aý\ 3Û\87,üendstream
+345 0 obj<</Type/Page/Parent 332 0 R/Contents 346 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R/Fc 7 0 R>>/XObject<<>>>>/Annots 132 0 R>>endobj
+346 0 obj<</Filter/FlateDecode/Length 2241      >>stream
+x\ 1­XÛnÛH\12}÷WÔèÉ\ 6,êb]3Z\ 3I\1c'YØ»³¶\82`\0¿´É\96Ô#\92Ía\93\925_¿§ªI\89RìÝ`±1"\88d³».§Î©Ò\9fgÝ`zE\87\8f|I]ü\r§C\1a\94kZ\9cõäV\8fÆ}º\1aQ\98à\9d.\16í?\1e>\9f\8d¯\82\1e\8dFÓ`B M'A·º\88éñ¬q\99Po88zؼÆÓñ(\187^m^'Ôïõ\82Aãió\9a\9fN\82«£§\87k<í\ fa\9b·\90\8dj^ãé`z¼sã\1aOÇ㣧\aÏå\e\87L|êcÕ`2Æ÷>þKèøA¿;ÄçÉ\83\ fó³Îí\84&4_ º£i\97æ\91\84\14_Âó;kפ
+Ré\8eì\82\8a\95&ýb\aÒ%E6t´°9î¨$\8bµã\15*\8ey\95Óx%¢Äæ:¸\98ÿqÖ¥vo\1aô±÷ùﶤÄ,WØ4v\96\16\ 6ëZßs#{ÞØ°LtZ¨ÂØ\94¾9>\a÷>°\19mzO\1fsåVôÑ\96¹Ó-*\9d^\94±\1cй\9d\12²2ôn´û\83\0 ÁiWA? ßr³±/;Þ©±ûc±\8b5\e×ð\9f­\9cv\aüæ×\82\ 6Þ<Ãeå\8cÎÉ,Hot¾³)ÀhãØn\1d)r&1±Êi[¹àxÛ\80æ+ãè\8fÒ\15\94¨5bc\8az\9bÂ"%*¢í
+\81u6Ѽ\9f\8e\11²\95r²M¡S>\f¯`\ f\8ehÄKLZEr\1a\8cØÀÃÑ\v\ 4\ 5ñ:\8dô\17\8dÔË&ïøM\94Ì>   ï9MjéÈ­l\19Gì$Ü\81\8f¡r>c\9dÛÐ\83¢=\fF\13@\ 3'>õGc:\8a\98<kW\ 6ÍyÃHÇ\b\88$Sù¥ÊïsNϱ\r×G¯\9f\v¨ôKAOç\bmJ.awe¡{ºhX\a4\0V&'»M)6)"|gÖZ\1cëÜvküî\1d¤Y¦ruͧ\ 1{\95\81D\8f\b7\15|àÒ")+DH¢Ön,\9au^}\95ä\9fø\98¨|ÍÈ\ 4tÍÆD¥\8aikóÈ]\12ªa¡·õÕ!¸&m³Ñ\95¹U¹ñ¡uU\10ý\9d±\ 2lÌt\92\ 1\bÆ]W_þÒ³ÎþÞ¥ æ5\17N\126\1aûr{+g\93\11H\ 29\15\87\ e\86¦Ú\15:\92âÅ\97\8c]D9â\ e\17ºäÅ\9f\1dsð9k/¡Î\80\9f`êéÂç¸JÊ\91\97\87¬4#N3SèÄü¥£\18Ü"I;züF2\89\9eß}å\1d¤ë\95lÃR\ 2{\0B\88vE\uÝìQ\82Wg\9dÿ°õ\e\b\99u~pã§aÅlñ
+Q\b;2ë
+fUbÓ%£\84op±ýÚ®\83}T¬=\10½PÄ[Éïõ\86\1e\1dßÀ:Û\15Ì&\97©\10»Zr\9aá\8f;±]\9a\10Ðf\8c\v¸É\14+ÄO1õ\v\91^"\8ek\rö(¶\9a«W\87ÌÛ. \872M¹B\84/ù¥%¶^j\18\9e\1f\97d\88åH\ 50\16ï\ e\ 1X©<\ 2\19ÕLÉR\82\ 2[SÅq'P¯òö¦³\95ðÜXJm\81\9aw\ 6ú"¾rÄ)´   K\ e¬þX}\ 3\v¦¤á,l\80ÆH¼gÕ²kPµæõRì\9c\89Ù/í6µÛ×$Ì_oG\v\ 5]0êÄßEn\13ú2¿¿\vP<ÿ°0\ 3\ 1\85.=³Âm\ 6Á\v\1d\ e\ 2$r\9dÅÈ\v\bzG³\3ñ\\a¯æü'\83ð\9dUfÃê\8c\83\v\9d§¢´È²*#£Ó\10¼ú \17¹\82Ubª\8b\14W?¥K\94Ä\8aLd¬Û¥!\94Ø\80B\9fÎ\vk\9194\bH\97\94Õ»§\8b\80¾\94\10\7f\11S-B\7f\9cù"W)vG\ 4\1a\9cÏBX\98D;©Æÿ-Ãó\\8cXk\10\97\85\960íR¬Óe±\82\b\ 3£¨~\0}a¸a\81Å\93.\85\80\9b
+\11\ft0`\ 6í|[c\9f\96\9c\ 3å\ 4Ô"éH
+£HÅ[µs\94YçÌs¬/¥6ØÁ\ 6qùSwôíáÎïhRW(\8e±'È£\9aýÉüý\13ÜUW\1fz\ 3\b¼Ú(ô\1f°\81½\8bÌb¡s.7ðu¢\18Ô\ fÒk¥v{É8ÞÉ;Ò\97\0Yx\83\89å\92\0ÈK!ýßnn/é¹,È2ú«\13¼¯"ç\aB[\94E\89ã}\ 4\80ôb\17Ð\aT\13lBS&ñð\9e?\9dÏJda}ýtáÏP\ek"\18Ã\94\87ÚG\r\8a.6Ôð~\87òÙXtT &þÀR¿ \95yü·Öª(²w\9dNÍß(ÍÖ5kù¬ãOÚkz-¯\92:içr\rE\ 30\1dµ^;\85wi!\9b+\13\ 2ê>×\0@\fÚ\88\v!S\9e\8d\91\ 6ö¸\0p<\r²Gÿ\ fO\1an\1d9tR\14ÿMá1 «\8fι×;@æ õ.ãº\vW:\\83`l\88Ö\ fä\8d\9aA"Uõ\104!\vèñóý\9dÏ)páá»ïëÚ_ü\8dª­AS\97±\f\19¿ÏWÎvºF½Ù×Ùë´½<4óí«npÕ§fG\7fuèè?¢i\ 2¡~JÑ\ 5\80\8d\8eìðxªºùz\ 4¨\ 3á\a\f\94\19CQZ&ÏH$F\98Pöän\84ZàyÙ¸ÅT±P!ã\9c)ëx\9b\ 4\85\ 4       Û\97v\ 3Éà[.Òú\14§QY\vj=[ðO\8e
+,0Æx.bq¥¥NQ¾aU\95\ 5O\bb£W\80¤\8c\v\83I\8b\8fGe{P«\1d\bT\14\8b'\10Ô\v\13©(®\ 5Õø\8ac\113'ü\viÑ8>\82îòÑ\165\ feðJ\rÎkûÝXà\9c\f¡f\95\16^\15¦`\82\84ë\ 1}Åd\14ù¦ß\95(\1c%>]\9201*&á!Ï{\83\91§\1e9N`Tù~\94Ãó\93Þl^E\84ÍÊÊ\1cä£\7f\85Ç<å°fc\8c\81«\11\17éFå;vFì~)|óÂNª\88-e c<\ 5_¢ÇñM\v\1fücædHõé\93\81í¦ÒjtF18¤\12Ñ\98öHá¼Èü\8b´Kw\ 4K\fó³ÈO\96Ûe®\12\ 4d\19Ðw\14 7ô9\83" [¨O-\11  J©Oë\r&VZ\91µ\91\ 2®Ùã\90yS \84\1c+v\1f)\82Ô!ba\99\83þ\8aý<\½\8eÆ\85%# \1eÍ\19­¸F£     ` !\80\ª%B
+üW­\90´\8c<ZÖâ\17øFÛ.ª\bVæáD,­T\14\9båúÏÒà5`\v\13¢`^+ &GW\85Ñ\13\94!³.Ú\1d\1eÚÀÕÁ\rÅ{Æa\ 6!Y\1e\8at\1fu1\9b\9b\ f.\14\8dQ\166iîrøg\8b\1fÌB»\ 2\84p\11\1dý~!XkNÉ\ fº}RªÒ\86ש\96C#\18\98âT\19\88|"*bl`iö\8b¼³#Wf\19Ò\8dõ\8f¿?Î?ÝSk\7f'pË$nÉ sBôµ\88\1d5¸½\1eÿÔÑ\eL\82)~"\e\rð«Ò@è¾fº\eôÞ±ÍP¤÷*Å\88ʶµ{ãipÕ\eR{Ü\9d²6\80J\ 1èÆ\8f"\9f\13<Æ@^?\98t\83Édà§ÿ\ 1ßù4?û×Ù¿\ 1\ 2L\ 6Fendstream
 endobj
 endobj
-360 0 obj<</Type/Page/Parent 345 0 R/Contents 361 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 137 0 R>>endobj
-361 0 obj<</Filter/FlateDecode/Length 2067      >>stream
-x\ 1\9dX]oÛ¸\12}ϯ\98\ 5.p\9dÂ\96¿\12Ç~ºÈ6I\e mÚÄ»À\ 5òBK´ÍF\12µ¤d×ÿþ\9e!%Kf\92]à"\8dëHâpæÌ\993Cýu6\8a\16Sj?Ì\86Fø¹\\ÒÕbBFÒúlì.\8déjBÓ\19Å\19Ö\8cð\10\7f\8cùãñÓÙÅ(\9aÑlz\89Ï\8cæÓèªþ#¥'~\9af£E4Á­ËEtQÿÁ·f\93h|¼7\9fEÓνv\13÷\8d\1d\83¡ÅU4§\8bù\15¾Nðëüû}y6¼[ÐdDË5\\9d]Íi\998ÿp%îM#ºÑq\95ɼ\14¥Ò9}ªT"S\95K{¾ü\89¥\174\1eû¥\83É\1cn.\93Þu\9aÒZ\9b\94Ôk-     ì\96      \ 53X\9b\90ÊÙîJë\17zúôõ\v\89<¡TÇ¢ô÷Ê­$o\1f09û=\98\1aZ]\99X\ e?\9cnÝ£D\19\19\97Ú\1c"ú¯®øî\88\ 6ã©wg¯àO.eâ®\9f¢\ f`z\8d#§·\eÜz}bg\1ago\967ÿF0ð¶{5ÓI\95
-C¶<¤Òn¥,-=÷´¡Xg\850b\95J\12i)M\ e\10wÒ>\9f÷\ 3'Ù¢T°iè§H$a­.dî¾?÷\10\9dÎ\90\83D&ÏçÀÎ\96"M=RÚ$XSjZU*M\18pKk£3òXEô±2\ 6ÙK\ fì1\92 \âZ\828\16\ 2\87áݬMe\83]e¥\19d"¯Dú6<-\ 1z>¤Wø¶v{twýã\9fÍ0º}Òk\80W\19+ᶲ.  ¼´k-\91;\99\ 2¥®\87\1d\7f\98c¼Ös±\8c\95¡\89ÇÛë\9b¯·þjÃd\1fHw£ë?\96\9f\1f\1e\9f\9cë-¯
-£vú×!\1a\aË\91y F\85ØHä\99£     w\8du¾V\9bpÙZ\81;®NDj5åzß-\18a\8f\1cä\82\0\1c·¨Oû­Ì\1d\ 3Ê>Â\ e\1c\96º\18¤\8c\8b¶dÜ\8e\e\99\8aÏ\19ü\8d®á\82gþw\1ffX\8e
-dü\15mËÌ\11£\vûs\8fÉ,h'\8cò\9a\ 1ÙàD\ 4nñNýÐl\rêà]ó}ʤÈKN*"\8dÓʲ*íQ:Ì} \1e¿\0x®°Pr\80 \97\1aK{\99¦ÑiV:\82qó@ß\1e\96$\13UrÍ\0e¯/é!HYD·õ3Þ²/9p\97\v\1fJ\17\97@;\93:GÕå;\9dîZq\83¯\1dQ\ 5de\80Na°1âü,ÒçóÚ×F\váëd\86^\0­}\9bJFþUA\12­Û\9el!c\ 51Þ"/Pî\8dã\ eÔ_X \87\18Q"\1dev%³\17\a¾\f\1a\96[áP ù«\94¹\85z\ 5\8eze\82à¹ró\8c¤L\19\ 3\14Ê­\ 6z\9e\90Ý\82
-d¥Ã\9e\88~¯ü~\88l'\8dËnat,­\85ËuX\e\8d0¼Ì¹\94\96:pêó\12=\ 5¢XÂkþ¿\81Àµ¥²äÕµ±Ä1\89KDf+\99@aY´¹ßÙ\88\9e\90=V"\87\ 1\91ÓÊì\80\ 3Р       vu´¢Ûz3(.g߯\87ù_"+¸Â\1d¢Ü\ eS\9doX»\91\17\9a\8f(Þ¢SÄh\12Ø\18RU\vz\13;óÝ«\19Ê&ØWWeQ!\ 3\b\94ï\fï\1a¢Ôô\88r¹÷7Z\8d\83d¨xKv«+´\8d\95\ 4\1e;%÷\b\9fw\92\9c>ßç2e\a-l\11=ä1BGaÛµÂÓ.\1aG¢À©X£ïÄÐ#`ëhÖnÅD\ 4Ê\85[ÿ\8eÏ\81¿®\ 2\7f\80UÓ'àYë{wÖxîÉ\b,\ f°ørÿñöÛÓ+±\ f\1f»ÿö´¼þò%Ø\1fm7\98` 'E\8aaÆsÌ\8bw]\ 2\r ñúÐJoD×%B\10ÖË\19\93°T`ÌJr\95Ö\8b\9bJÿî\95\8d³\ 2îÈ\9c»#\94\ e\19Ð^\b15Ô<íHKDwÇ:d\91\ 4U8!$V*U%f\82fpà\8b<<\ 4.óL\96¦\ad\91+©.HË\9c\96\ 2ôaW^d\ 1\rÉéã\9fO\11¹Â;>Æ·\8fÍÌEÕ}\9a\10ã\81n\18Û\91ax3ÜË\15&\10Ø{5ó\85ð Ì×\ 3'ÏD¥o\ e\1cßWñ"9QT
-³á\19\ra\9cn\8fÎýÂ8¼øË\9dr\ 1\8aÍ\ 4'QÙo-32\81X\ e\8eè~Í\v\1dt\ 5=\86\88 ¾1\1df<á\98\ 3­t¹}«ú!\98,\1c.E®ot\e\8e\93ÞÀ!\ 6¯\99\96_a\87¬\aîTE\82î\8f\bÓ\80Îo\98e&\fýõ#>~"ÖÔ±ã\98д¹÷\ló\e\18\fÓ{sÒ/÷F±N6ê\ 5Y\15è3.w\10ç\16%[\8b¨­bn ë
-TFuAΤSyå[\ 1\8a\0äÅä\14f©ÐÖ*¤'ôæ3f³D\13\8e\98ss\f\ 6\13 \8a\12Æc \88\86\1e\17µÙ<\9fÿ\87ÃÅyðØÇï\94±ÐJ?Ä7µH«\ 3\99*Ϲ]\ 5\89x\87§þÔñ\7f\13\15\93\86Ó\8bï7wN\fúø<ÝxÐápãàH\1cpÝ6Ϋ\ 68¹5\a\89±\97c\9\86üXåoFu\84ÑïÜrÌw,×7 \82 ª\17]wÚ9õÒ\1d\16ßµ\83t3¾<À\85MØO\8f+i§\ 4Ù¸pùï\863ñá\f&\974\98.ppÇ(v§r\85³_}\ 6\9d\8ecÁc\fë(f\87U\ 6ÖyÙ\ 6é\90°¿s}øaøá­!\eí¨\9dÍ0c±\8dNfþIé3wÖvºîDH¸òàf\0`2Ô\81;/Ë\84¥\bc þÉv¨QY¡MÉ3øÏ
-\9d\v¼ÖNÄ;ûÃ\90\80\89=\86
-W\9a¿Ñw_¢(\1aîQ>äæ¼Ù#±F9û\8bmº9G\ 16ÿúóöñéþá[ø(Ï\13PN\f\86~à[«\98 k\82»S`ÉÏÍÐ\8a¨\99\8d·"ì\82+\89\11ÆWz\82\8c¹6\vP\12\9eì[\10\18¿\93°\8f\83û\82ÆWõK\92é\85\1fܧ\11JâG¥â\17\1cæ\8d\eR¡qî\85\bGÃcíi\94\80wrå\99v¿vÒÃÝ\95çѵÈÐÌñúÁ\9d\82x%¤Ì\8dõ\ 2\9ah^ª\82R\91o*(\11Y\85gñ(\e\81Æ\ 4\12\978Üs\87gS~\ 1Bå½;    =®Çi\9b,\8em+Ì\11¢5\8bþä\ 6\91\ 4ý\15\98\ 4»b ½Ïá&O\83®-\0;̼þ4V\14©Â{\1f\14\88«²áݼ}\r1\9d6`ñá·s`:}\vu1\1fEóù\ 5^_¡\f/ØõÛåÙ\8f³ÿ\ 1ºDï¨endstream
+347 0 obj<</Type/Page/Parent 332 0 R/Contents 348 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/Fa 6 0 R/Fc 7 0 R>>/XObject<<>>>>>>endobj
+348 0 obj<</Filter/FlateDecode/Length 704       >>stream
+x\ 1}TM\8fÚ0\10½ó+¦9T¬D¼ù\0B¶·vÛª\87JmÅ\91\8b7\99\80·ÁNc\avÿ}\9f\1dØ-hU!\928\9eyóÞøMþL\12Qæôzé·\94à·(\17T\94\19õLÍ$\r¯R*2Ê\97\91\93 èåâs\ 4r\96©(h¾*ð\9cá\1fr?®'·_V´¢uã\93\97eBë:äâ¡\9a~ÓävÊ\12?É}×ò\f+¦ÊhÇÚY2MX7Êïܬ\1f\ 1\95\8cPS;t\9dé\1d×Ân÷í¸w*3%\0Ê\83T­|hÁßô¤tÕ\ eV\19MR?\1fw\fjÊWfªM%hmh/\7fóHe'»\8eõÌC&\14\97b        ÂÓÇÁ:\bj\90©+\1fȤÍ\91jn\94æ\9aÀV¹ç»\91\86<Q¤÷/$?\\11ÜL­\93=\14\1e\95Û\81\13A=÷Vê\1a\v\ fW\9f·Èò^Å\95i\8dÞÜÌÂî¿-ºdyTmK\ f\105\0®\86DgN\rÔÊîð\ 6jI:¼Ã¥3Ø\17\1e ~ÕùÉì÷F·Ï4X\84G\88à^Ëv\14¨ØF\97\1aS1Ï3\8a³D,qG\9fºø\0\1dhô¥à»@ãG¯\ eæé\99N!d]¯ôvF,¶\82¢\$"\8f\ 2¡Û/§\1ezfi&æËÅ\b\8e®¹Á¾\85Ýõæ\91+\aL\1f\ 1L4\96{\8adÛíd4£è\81\9d¿Ã\f\11b`\8c«RW\95´qñ\18w]\r\9d\15\95\83RÙ¢]Á`56øÉykEÈ÷\|\1dø¦eiÙÒf:J\r\67\97\b¼]<øÐ\eÀÀþV9þ/\86gsM?\8c\9b÷\ 1\86$\9cô\96\12\93\ 6þ'Èj´q\\884ͨHļLý)l²eq\1aÆÓÀÅ9N\ e6(S\91fs\1f³\ e#&1fÆ\1f\83õ-9È^\99ÁR×Ê
\b\1eô\11ç\19òs*Év\©FUÔ\r=\14² _,ë`\1fk\86¾âwgA)Ø4\94\16¥ÈÓ\ 5¥ùJ\94\8b\9fmvÏ\an\ræ\8a¾K=Èð\91\88Ïñq\91\94>8\17toªa\8f        \96þ4éë jn1ÕÁfóU"V«9>\80\88]øÒ\9f×\93\9f\93¿Uð\8bªendstream
 endobj
 endobj
-362 0 obj<</Type/Page/Parent 345 0 R/Contents 363 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>/Annots 140 0 R>>endobj
-363 0 obj<</Filter/FlateDecode/Length 1799      >>stream
-x\ 1}Wmoã6\12þ\9e_1ð\97º\80­Øòû!·@7íî\16H°½[\17w\87Û~ %ÊfC\89^R\8aãþú>CJ\8e$\a\9b \8ed\92óòÌÌ3Ão7\93h3£×\ f»§   ~\17\9b\ 5­61YIÙÍÔ\7f5¥UL³%%9ÎL°\89?¦üñï\8f7\9bE´ x¶\88&\94Ó4ÞDëúMÓ\97\9bö{Nñd\12ÍZ«íw¬âì¼½ÚzÇêjÞ=ÛzÇêz\16Åí³­w¬nfѦ½ÚzÏi\16Ç\1dÉíw¬.\96\9dÕW\0ü\13\83\ 6Ïãx\ 1ýóõ\8a\9fñçÁ{¿½¹ý0§é\94\19p\®W´M=x\13Ú&Ã÷¦<ÐIiM\95\934(ÅÞ\r¨4\94\19\9b\8b\92JùR\92(RÂ6i)1E)\8b2¢/\1f\1f\1f\887S"
-ÚIÊ«ä@¹\81Êga\95LGþT¦å\8bÚi9¢]Uþ¸ýófBã)\83´M\87© \87LF\90MNä\92\9eT\91:òߨbï"Úb\85Õ\8cÈX\1aH-s¨w\ 3H\87¦Tfª\10\10Oªð\16ùýXP\8e
-CNöU\ e\ _\84\0.¨"\91t\92^Tå \8f~6ÉÎ\98'(«lð\8eÕ\94\a\ 3\ 3à¸h\95)íÎÍþ\88\1eÙ{\98}0'v¦ç)¬Tî@©I*6\9fͳ²H¥\85\14<§²\946WE\90ÉXÀγ\96î %|\r ´¾y=àõI\ 1ÝÀ\88öØÝÓ\ZQ8-J\88FL?m\1f\1f<\90!\98!Ä.ªÏÄK$>â²å¨\ 2Ð\1a\8c\10êB\ 6\11\88´Ð'qv4H4`IaÞ¯\19Ð.Gt6UÈ$­\9e¤>Ã\9eBZè&i­±\bæ//"?jù\ fVxû\ 1Å[çä%%îJUjùîñL[~¸»\rïa\7f\93ÃC\ fÈÙÇBhg\90\81N\8eUádáT©\9eC²q`]iM±\87%®Úï¥+\91â\1ce\81d×æ$m\ f,\96ò\11\92')\8fHm\93\1fE©vJ«ò\f×P)ÿ¯Qù\83þûøÐGî3²¦    ²\võädR*S ¦\80¶ÏóÜÀ\90£°\Dõb@\rÐ\1e­I¤\ 3ªÀ¿\8e\17\1d¤@¦8ú:\94Ñ>¢.vÃô\a\ eëéîi\95\1c[Ó?ðõÇ\90`M¸Û\89\ 5$%\97\80\ 1v\0ü\12XÎÕ­/@äþ}à\ 6ç=õI     ,"\ 2(=\9c·\9fï\7fp>|¨P/\14\19}\ 4¸¾î­D\10\1e¥(8T]O\86oÙ?zkSÜC%°Ñ\eÒf½\8d!\14\añ\fÇ>ß\13ª\15d\ 6ö\ 1}½¥gÞ=Þ\82ÚC\87²@Ös}Öy\80ºÿV)+á~_\\9dû]\81Cª)/8\0\ 6ÒR \7fL!¯Î#§Ä»Þq\1fÚ@\88\82´Ê\15\8ef\94¡H\1a\8bø@Ël-\9f¥n\97\7fp=D\£\94Ê\ 3\ 2Dî`*\r
-ÄS\95e*QLk\9cáL\9cÇÊ\1eA\rWÄòÅ\80áQS¹)\1a·\ Uf\8e\9a4\9a\94«IbY\93Ä4\9aÏb\1aÇ«h\8dÿ`©;ïîÝí[^\8f¸¾ÄÞ\8a#HWz·¥ERqåù\86Æl\ 6Õ\86\1dà²\ 6Û½\9eh\9a\f*\ eù\rð\98ô\1dlïA%_\12d-\177J(àÞX;fD\97Ñd¹ð¦Êüx\10N¹ww·\97Ç^ F\9e\eÚµ\97\8b'n: #U
\92\0çí\87FGWE¦´,ÐA¡âòx¥\82W\90yèæ)r0)\rçvÏô®X\8e\16öCjót%´^ \19Èýûò@¤h       Z\v\84Ôîû\95\89ë<·²\9fæ£0y ÿàà÷-\80\ 1¹úK¦Z96 óú\86~d\8cçý]¥5Úk\ f¬^\9cY&\vô\8eÕ\8fW2s\99ï0Iy®Cní̳ìIí\86À%(¸\ 2\87+\81á{T^y¬Ð\85\15Z,Âz\ 5Ûw¡îYÐó«Òªx¢Êê\7f\ eê(G\88ú\0\95ëhø¸ñ´qeÅ\15CñäÒÓÞõÿ[eJNëðÿÊ{\90Î\bM÷0"ÞÀ=\83+ÜK\1c_\91Æ\ 3\86;â1®87\ 1À|\8a\18\9aUݺêDæ\1d<*\84ÞÇUÃã­\97\f\v\9b\7f ®\í\ f\10Ê­\11£^J\ 3¶òuD÷w\14\8cèÃÿXÌ'P\85\a\16 Âß\9bÑó=[7¦\9fèÞ
-\8c\8b÷àR\17HçrÝi¦ýá\80Ç\8b¬Ò5t\e\9ab¬çù~<\9b\871\ eSvD¿Yõl^ü ÚÒø\85§Ë.\92ìÑ*Z2]ýÊ)\ f¿Á\8dè5
-¹ª2B[°gî:\99Ñ\98\9d¸\7f\13-,\9dj¯<yÕóÓ\9f\15
-\87\19\8cÙ«\11\ 3¾µ\18fèÄ\934\13*ËC·é\13+¸Ò\vÅM\83UC\0H\90#\91ò\ 1põ«î\f@\ 1Ã~P>1mûs¾\8dàÒx\89×O\1cQ\9ep_[\98\9f\ 5ý\14\99ÔMg\8cnÃwO\80ò5^®êdnæP¿x\19]ýÔ\7\e\8e±\bø6l=¤\9d6ÉS\17ô¡OB¾aa¸{\86·.g7ýN4\95\96\89H\13¤¡\ 2m\9c
-tÊ\ 2\ 3¸±7IsÙ6yI¡AúL|½s\11ù&ì\9bàÞ :Üà\1aô\9a\8b\19µº*$^¾¦ðã=Í\85Å]m\8fh¤êY¥\95Ðt2¸WùëE&OÍÛ\ 5åày\17٥Ϸ\16´ë¦Û/¦Ñ4^Ðr:\8fâ9_X\87\97\ 1Å\1c\91\95\8f¢\80Z\96;\9e®6Ñlº ñj²áͳ¨Wc\1f+ű)¤¿ Í×\93\9e\87È.XÂ/Û\9b\7fÝü\r\1dãÜÕendstream
+349 0 obj<</Type/Page/Parent 332 0 R/Contents 350 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+350 0 obj<</Filter/FlateDecode/Length 1465      >>stream
+x\ 1ÍWQoÛF\f~ϯàü²4H\14[v\1c{E\v´]3´\18°\ eóú\94\97³DÙj¤;õN²ã\rûïûHI\8e\9d\ 5Û
+\14Ø\12ıÎ<\1eùñãÇóç\93a4\1fÓÃ\8b\10¿Wó+º\9eÇä\99²\93\91.\8dè:¦ñ\94\92\12{\860Ú¿È\9e\8c£)Mf×x\1fãO÷\ e£Ù\f\9fö/\9déx8\8dâÎt\14ÇѼ7~Êo<\9fG\93\7féw\1cÍz·Ó½Û×\8b'"¾¼\99ÓHÌ\17\19Ò\9bÎ&ÑèzJ\8b\1aÒ"9\9dDôÆ¥¹]Ñ\ fM\9er\91[\ eÏ\16\9fNtç(ºjw^Äp2ÃC\8a\r£\88ÞÙÚ»´IêÜÙÖzFÝ!\17£y4\1fNÄt±Î\ 3\ 5®Ée\14jcSãÓ@XK9ä+Ë)Õ\8eJsÇä\1aOE¾á@lBÎ\1e'Ô­á\86\vWÁr\9b×kª×L!/«\82iåL!~×\T\12}\13è\8e¹R\93\81å-á8\82©w\eN%Ä!]ÌQ9\84õÁç\ew¿\ePâlÈCͶVk\8fìͲà\88\16k¸C`â¸4¹\85\89± wÁµ®mâ%VX$kù0h\96M\82wúVbÅé\9f8©£î| \13K\0¯\10Z½6\8aK\82Ô\ 3#\94\12\1e\96\13Lpº\ 1P6Í7yÚ\98"\0\8f\8c¶03\16Ëzr\v
+PÙç\80\13¥,ÄY\96'9[ü\ 5ÁÄö»\83+6L¥ó|\f
\94\88=\7fn8Ô\949¯y­8\v(Ê\19\88K`µ´bË\1e\15È\98\vÔÂ¥d\96®AF\92\rN@ÄÏ/^¶Ô\0\ 5\ f\884\89ÐaÊ£8¢_\15À7®Tç½¹ÖI\b{\11ccË¥I\14\vñ:Óó¿¼i÷\9aC\16^é9oï«ÂX#Lý®5:¢ªÚt^\ 5ô²IÖò¿r!ä \83\12O2C\85$H)¸\0å\96\9bÜ5Hó\ 6Hñ½QR¦\8e¬Û\9bÒÀ|4^)%\\ 6²\0\fÕ]ö«\ 3i$ðÏ<"(KÈ\0y»ÞÑ\83\8b°vM\91Ò\124ì=I {o\11½oP¹%'¦\ 1£\f\83³Ê\19P5E\ 6)Sê@\b       ²dp     \ evÈ°(¨±)Ì¥IõXç\ 5«\87\9eÙ
+]\91Ä\92\ 5\80ÔYtÉ+°Å`\17ZdG¡bl5T\88\8bê¼\84¬æ«ÆË\ eA°÷±rº"ù\81\97¦ïè\ e`R<÷5£­f½6\9bG\84­<¨\8fÎ\94V\ 2$÷µ7\88'°ñÉ:¢\ f\ 5\9a\93U\1dh'ê²ô\ ev\9eÞ½\7fý-\12\95\80¾éRìÛr\ 1?]\10¡\ 5\ 5\9dçZ\1f\9f\0m\9eíô,Õ\ 3m^9YPÕöl\1f\94$"p\89Ï\97\80: ±ëµ\82\96g\19{iTô¾$\ fD{\aªu
+\vVTQ\1f \aº¨9ÊéÝÊ\9b²\14_ì=`B=\\924^\10V\8d¹¼9j\80\8eÿÊÍ\8eû\18\ 2ѵhú(\9a\8cc\12±Æä\91~¼<£<£Ê¬Db\7f\83À¢¸5\0Ó`Gw\14E\11\9d]v\90AëÓS\98ß\9eÒ\aìø\91íª^ß\9eÞ>£\974\1aÆ\13º}vhùûá\ 3áG\9c\r\96\85\ 6\8a\81\1eÛT²~húG÷0RÝ~\1c\ f¥)\8a\18Q%\10Ô\92:\rÿq¤:øR.1_@Ë\1a4\88Ñ\86\ 1ÿ!³\ 3­¼´ ´ u\10\ 1Ì\ei\15´\9f\94Ô\1c"0\b;[\9bû\9e\97½q`Ì.¤\fëþ#)TýÐÞ\19à\90\83\ e\9d\89yRC\85\8aÝa#\8b\89\8cûNv/:j`äϧ
+¼h¯\8a5ÔFj\16Úñp¤ÚGÄûbå\rªR2Ë¥ýÑ\ 3;]H\8a¦\ 6\ae cE?VÍP\ 3\ 3\91\9eÊ\81rJ\99w¥òI¥N­úN\8cè'˸càeßã­\w\bu\97\ 3'M*ã\13s\e\17\12P«2(!¦\a «·\fÅ\82ßÞ\87\8eÃöYTൠC¸FaNd¸Æà¦ãÎi uD\93:H¬ônoÞ^iP?H\95?\87dd¹\95ëÇq<\95\11\ 4ìWhﳯðsÈ&:CY@)\1d\1fíäÐ9)é\80`èE\15^)E¯´*\eô\15â8{J\89 ³¡\1f­ôâ\ 5\806õþùï\ 5é{÷K¯Ó\1fÙïÞ\95\95ó\98\85µHÚóä{E\82ĵ\9aÙX\\95ê\ 6\17\f.vç8\13\88È<\94þþ\7f\ 4ÙÊô?\80C\10×£Ø\19÷m4Âq
+\8fuüË`»¼\99á&(ç\97\98ñ4ºê\14æéo!\93\99\9aà*\b´§R\88·\8b\93\9f\ 4V-%ðendstream
 endobj
 endobj
-364 0 obj<</Type/Page/Parent 345 0 R/Contents 365 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>>>endobj
-365 0 obj<</Filter/FlateDecode/Length 1744      >>stream
-x\ 1¥WÛnã6\10}ÏWLóä\0¶lçf;ë\ 6h7\9bn\8bM/».\8a\ 2y¡%Jæ\9a\12µ$eÇýú\9e!%'ñ&-Ð&\88aH\9cá\Î93ùr4Jfgôøa\v\1aá÷bvA\93Ù)YIùÑ8<\1aÓä\94Î.)-a3¡ý\aÛ$#:=\9d$çt>\9dðwü\ 5Ûï\17GÃÛ\11\8dÇ´ÈÙúr:¡E\16\8cG´H{ª\1ahUÉ«\93Åg\1c<o\ f\8ehpz        g\8b¬GôSã<yCsYÖ+á\94»n¿ü%çÃý³>9SJòòÁSa¤£\95´2a·O\9c-DáÈ­L£3ZJª¤ó2#Qe\84/5©*\93\15\8d¥¥6é:úÓj-¯è¾'\1fRY{\1c\v1\93\87·û\93\18y\97âàÉm4¯\85\15×m\fã³ä4&4W^\96ê/\99iåüׯ_3#\9a³\ 1\e¿`DD\9f¾.\0b%ÓXbC\92\ f¢¬õ¾(\8f\ 1Áv>ü\aßóá+\89\f¿Ê\84óß;~Í\ e÷ág±R\8eJ±F¯\14\82Cg¥å>çh\ 3ùUÛKQ\9aª`\0ð\ 3\9bAWó´EË`\92LÇ4>¿\88\ 5¾?½\9cÐs<\85\ 3\83ñÅ4bêw'i»Bìäj\91¯!'9E<ѦP©Ð\94©\8drÊT\8e¶Ê¯PFA\99I\9b\12\0é£\9ck     \0ù­\94\15LSÏ\a\13úØT\95ª\8a\83\86Ë\8d´;vQà¢B"\11K)Σ%p¦w\8f5X        \9bÅ\1aX)".·Æ®ÉT\ 1ÈÃÛ\83\8c[D½\9apÇ¡\eC\95ñ`\84S\9esD¾\wDQr>\88ümû\8dRQ\91\b£A\95¸êóöØ5I-cþ GxóÍ`p\90ì`p\r.íôÞ9å¢TZ K¹5%½_Ü}H@¥\9f\râ@UoLº4fM\9bóäáÉM@\86\95µFs@ÔÝÁ\1ds+Ka××ÉË@è²~µ,g³ä\92\99ø\87¤\95ØHð\1f\91xi+Á}DïE\93)Y¥\12\1d\95¹\15\b3Äî´¨\8a>!ùwU\ 1º¬Heʸ]\95Z\ 6¯CZÞpi«\1d\978pîêþ¤\13¡\8e\16ï\9b\12.\84v\ 6\88\82\15·Æ[QÁ=j²\95Z\a)óª\94îÿõ}aC k m3@¡\80kV[Ò²*ü
\ 3z!\ f @®4BAÔÓ\11¥À¡HQ\10ǹâ¹\v\82h\96\ee\1an\8cp\ 1î\81Àè\14\12\90Ð[±sT\eçÔRË~àP{ë\8e~ÿø!zT\95ó\82ëÌæÿ\19Ý¿@ß:j:\12\18;b#\94\16¸\98\13ÌT\9eKËì\83ª\97\82ÑþQ\15+\8f°·}\86ñ.Ø|æ)\ 3ÄÁ\82gH\9f\0Ô~\18\r¿ÞÜö\ fò[6\9e\f\93¤½/¦+(o|\83ûcÞ@½ß%ô=¨\80 òFÇ*\84ìï{ó\ 6\9dX_ß\9fÄKÄÆ(V=\96D\b\ 3Ø\19\93ir·\ 3\95\ 6Ùâ\ f\1c\8dN¨±úÛã\95÷õÕpØ\89<H{|Í3p>\8c7u0ìè\11º·U\80\84\95\98{@¤£ã\97.a'ÇháJ¥@|Ä+0 ¡'ºæ´P2\11\a%ÚÀ       {`'j$'\14\12y:\17_ºäß2y\92Ö³\84\ eQ3;\8d\12ÿ*ùÇ£\8bÈþï\90ù#l\1e\97\ 2W3\ 3Ó\95\10\1f\93¦à6«\82F/Eû\12\8a\11\ eЧ\1fî>Ķ²\1eF\18w«@oð>>è¶\9a\1e\99\9a\15¦ëD'\b÷=\15ýþÈ\0¨°t\18ó\8a¶íM\1e\8cÆX©rlLÓd<£Áù$æw\96\9c%ô«U\eó°£·@7Ô÷]\85õ\ 1Jõ<.\ 6YkÔ\9dï
-\13\14\91\9bÞ8f\90 ª)\97h®É)\r.y\8d¡c\f\91à÷\98\15$\17)C\9fÅì¹\9b\12äÂÈÛ3þ   ¸!ÅLÜî\16'Á¯\9c\8e\97\ 6²dÁJ/\8f[\89âiL\85¬@é´eª_       ,e\1cc\98\16T6Ú+,:|=Ø\1e\81.v\90Ö0Þ¶L¡\ 3Bóîȵ/0kSè\15¯\84<ÿ°\98`\ e\9faPóÝ\ 6ÔÇÔ\88Ó\1c/\aÁ]\18\87N`\ 1Ådç±\1eô6¸aá%Q ÷\84\ fî\95\19ê\86[]\ 3nA?\90n\9f\82^\83Te\\8489ÿ¸µÆÞ]¶»O¯«Åó\96ö8íX\15\ 6fÝXh\92|\ 3µg_<ä±þ\86\9e\8d°;\ 4q\10ZHäÁÇý\87³\16\19\a\e\ 6di ªX\93âÞÓ\1avÂÒö2\f¸ØÐ-\87rÓNz,W\1aJÓN\M{ìpÈ\125g \84\ 5\vq)Vñ0§jk
-+JÔ¤Hè\ fP\94\17~{8xL\9eÐ-\86V7Y [í\90\7f\81\9fõ\0­ar\1fÔ.\86\84ÑÉas\19Ð;ÌFÔ1m,ÄÒïiÕÚcãá\ 1\93Ð\9f¦áð\ f*\89·Øa\81\1fì\14\98¶¢\0\93v¿
-»($v?-\93¸È\ 3ÿ¸\12oÛ¹\v{+¿4
-'\81:0$\0'ÐA
- Çb;\13îðîû^f0ð\97\9c\8d¤;Ì\15Æ\18\96\12ú\8e\80×\1aC\b\98ïؼoFÛ\84ðïÑRj³EP\92\1d\1ffWLæ@0\1e«\a  ·bÝm/Ó\16«ãÉ,9\e_ÐådÊëW§57X\90µ©Á\92;Q5B³³Awv0\19Íø0´\f\0
-ëwÔ¤\1f\1a\95I^f\82\98\9dOGÉtz\8e\7fTqö\92=¼[\1cývô7¸Þ éendstream
+351 0 obj<</Type/Page/Parent 332 0 R/Contents 352 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+352 0 obj<</Filter/FlateDecode/Length 1549      >>stream
+x\ 1µWmoÛ6\10þ\9e_qÈ>,ÍlÅï/-\8a¡]\93¡ØÚm\98QìC\80\82\96h\9b©$ª$\15Ç\18úß÷\1cIÉv\9av+Ö&\88bKäñî¹çî\1e½?é%ó!í/fM=ü\8eçc\9aÎ\ad$­NúþV\9f¦\ 3\1aN(-°§\87\85÷$=\9a\8c\aÉ\8cF³)>\ fðç÷ö\92Ù\fO\9bK\:\18O° .\9d\8e\92y³ø!»\83Ñ<\194\8b÷v{ÔÇ\83áC\ f\86ó\8f\1dy¾8¹¸\124£Å
+áLæ=Zd>\ 6|HÏ.ïRY9¥ËÇ\8f\167X8k\16vû|ø";{¹¢\9d®I *gvª\\93Ó$²\8c\ 4ÙBä9åz­RJuQÈÒ\91(3Ê4\95ÚÑVÙ\r/>Í\945uåNÉm\0k®·¤Wþsª3Ù¡\95\94\8cÄ\ 1\9aj+a¹O¹*ekt»Qé\86\94e\1f\9d'\13öìõo\vÒ¥7dE!Ã\16a[ËI\biN~=Gß\1dp¦°u\94\f\92aB¿HYÑOÁs\em)Cz[zca\7f\8b\1dC2ö\98\ÞU¹(Åçqs´ÖÒÒR¤ï80\8eý}--oâø\8d\14\99Xª\¹]B\0\99\9f7 ªÆ\19z00R\f. _JÚ\b\93\a°AX\11\ 1\91Æ\14n¸cØ\82qåpF\8cÓ\ 3\ 5t\9a\94/6\12Ùö\19ßpZdC\12\81À\82©sd.äÅnt\9dgìÌ­Ò¹p2óÙÌw\9e\fzådù\98²Úxî ÊL®T©\1a\1cn\85Qb\99KÛ!á<
+\12\14\ 2@i®-¶\1c;¿4"å¥Û\8d,\99+\88X·°UÂ\80\aN\1a\eS\7f\94º\989QT¹\8clG=$S.\8c~2\1a\ e\ 2\0ó9\13äâüküDß=åè\9c\16\8c\9cO\9cu\'ºv\88R
+\ 3¨TÉef\10\vJâÞ¾çXÇô°2ÕØ&ï|\f´Õå÷®É]<ãkx}qx¼ZÑõ\99Ïù\9b\98(zú\14ß\85k¿_?:Üð÷á\17"z¡ÿÔHÊ\ 6©|#ÍîeQi\83èÝõÙõ£'\87k?Ä/}_Üÿé\º8OÁwîO\16<-ä\8fçGÎ\7f\91/0Æ]K
+«òݱ\9dƵÁè\9bq\ 39îDö§à\81X\83Úûºó|E\85~³,£s×&·o}\13AÖè)õ\9eð\7f Bßq9òãÐc~À¿\e\99r\9d\1fäöVâóOY¹¿ý0ç}&Ø_ô\95Y\15R\87VeÜg(yÈGÄ\1e\96¯\94±Î÷\96NÀÃÈÊH\8bigÉ6ܾ\aE»¹\94wa/îx0\1fÜ,s\8c½ó\8b\7f      :I\12n\ fÄí\19\9f\8fêåC°Þ½|ý¢ûÉ\0£\93\17WíLìÆÎ7\18\89/<\1e\8d£¤\99\8a(\aL^?âENÖÉ\8aO=\10\14_6\14\7f\10\r\ 1¼vpÄi\15ÚùFæ\15i4<ci¥sÖ\vÜýÀ.\16\18Q:l\8drøîû¥\9f3ÑDl°\85x\a9áG*\0+4æY\18¸¹lq;\168\eq+i0ö\83\1f£\11ó\87¡Þ*\a'!k\9a!Ó Ý&x^\19½ÄìÚaÒ\879\ f\1f5Og\¹!aJá`nO+mÖh.¸_Á\9a.?òâ\95\8eN±ì´C§\98«¹ä\ f\99ÆUº\14ÙF\12teémsæ[*%ðj\1d\19&­!H2ßHXGáðÚÖ¸³£BÜhÓjµÒ    è«vN¶t¸'\91Æ{\1e<\83ܸªË\94ǶÅ$ÓF×ëM¾û_txæ\93\ 2§cR=ä{V°,`È\10ù»F\1c´i¾©\ 1Xe\14¢Â\12NõR®UY²Ê\809A«èm\90¤Ê¦Ò\ 4i\ 4"Xh0`\8dTÝÓ\94òN\81äe
+ð0i\ 3\81J+!ÜpÏÓ¢fQ\82\8d      @\b¤\82ÿÑg\9e\1f\9eGð(Ê1\ fÓ\9e\89x\90±B)XÞbÆ    Z«[иu\16
\8a\95\8cµ\1d\95.»*°Ñ*\83\94\84ÃA\85
+\87«\12Ï\v¯FqP\93\18`ã{\14s$È\a\90Óè¬ö)¼\a\11;®KÐÄ¢
+ ò\14ä4\1fjëe\bþ\9e\86,@\1fÀ$\18(,Ëä²^\ 3üu\87Éï«M5s\1eF\85Ê,\v\1c\9f^#Yâ/q\97+\9b±\14\1c\91Ïâ\1e\1aF\9eqpAD\8aªÊÑ8\82\ö¾\97\9eyàk\ 3Q\93mv\9bws\9dä²àà¡\893\94\87ÅIÀ¤Î}\13±5\1aÛR\96\10£\8eµ'øÝ$¡íL\90[\(ÞÞ!Ê{hãC¼\ fAµÖÅqÚ ×\1a\95ëEs¦Ó\9a_\92¢:\9dQ¿ïÅç\14¯sý1M&x_\fsêw£nõÝ\8e^È[\99û$¿\12%
+\99íwûq}wÚóZÕwë\8c\91ü¹V\99ä7'ÏêÑ\8cß?Gxï\81 \9dòÖËÅÉ\1f'ÿ\0½·yBendstream
 endobj
 endobj
-366 0 obj<</Type/Page/Parent 345 0 R/Contents 367 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/Fc 10 0 R>>/XObject<<>>>>>>endobj
-367 0 obj<</Filter/FlateDecode/Length 789       >>stream
-x\ 1\85TÁnÛ8\10½û+¦:\14\ e\92,[VZôÐMwÑC\81ÝV\97\ 5|a$ÚfB\93Z\91r\92¿ï#%»µR`aزÈ\997ófÞÌ\7f³\84\95KúùÓí)ÁgU®¨(3ê\ 4ífi8J©Èh¹¦ú\b\9f\ 4F\97\1fïÃ\12ÊW       +(ß\14ø\9fá\e|?U³w\7fæ\94¦Tí¼÷zSPÕ\ 4ç\84ªzþMÄ\14Ý\e©D×*îDDN<;\12ÚI'\85%\ e\94Fì¤\16\r)ù(noª\a &#b\9cP\9c­Y\ eÌù\877Áë\85l߶¦sðøþï÷êóW\8a.'Ìî\8f*ú8\80\9cÓú\15ä\8b&w\90\96Ä3?¶J,ð&¨6Ú\ 1Û\92Ù\85÷\1dÒ]Ðu&óë\18×\11æ\ 4H~âRñ{\85\92\9a\8e¤®Uo¥ÑÄõËÓA\80§ÔÞ\v\8cÒ%Ë<#\1f»15£ÊÐ\91?\8a\ 3o[¡\17ôÐ[\87"ïàªk\7f'H\9b§Kµ\86bÜNÓ|{Éóý4ÇíÜ:Þ\81æ\93t\a¤5É\ 6\ 5\11\9dåºÁU\83\ e5gC²â(ãÚ(£·7\8bp{Uµ'©\14Ý\83J\ f\84\ 64\9d\19˨¥=à\ 4\1c\89;\9cq7\89Ù\1aX³!ÑúÜó\82mR*³¡ëÛl]\8c\1cÏý\f÷q\9a¬ØÚWñ\ fs<\1a­^¨·\88\15\ 1Pt\9a«\8bÆ¢QSë\11?eù2\83¬\0\83'\0Úø\ 4âhÕ¤`·\81Åß\9d<\99ç\17\1amȺNêý\82\ 4Û3\8a\96,ei428Gð-^³d½\1aÐQu×Ûß\82·\9dy\10µ\ 3¨7\ 1(:#:\8a¸j\ f<Z`t\84óO\b*\82\rÄõ?±´qñ`ø*\1eÊCè\fÄÞ`ö\fJ\84\9a\ 5\996¸ðS)5E\0ðÙøH\10\9f\12ÜbJ·ó\81mÈf{3¡ëçkÂ\17î¯â\a={á\18\8c¯\95NL`&(>£W\18av½\9c0o¡ç{¡E\87½\ 2ÑÚ@b\ 4½\88©dY\9ey5%%vT3ÿ\8d\9eâlÃÒ\12\1cÒ\92\95YØ5U\18X¿\9c\8co\88õ¥9ñN\9aÞ\12öX\8d\9ax5_­/?õ\9cl+j¹\935µ}\a\9a\82Ñ7Á\9b $kú®\16o\ 6R\9b³\1a\8b\92\15eyÁVCð³âîÄI(\83¡¤¯\÷\yÇ8\1díã")=\9f%£;S÷G¬\ 3î»J\7fõ²\11
-\v5(.ß$l³É±áa[x\84ÏÕì\9fÙ\ f4[ÇBendstream
+353 0 obj<</Type/Page/Parent 332 0 R/Contents 354 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+354 0 obj<</Filter/FlateDecode/Length 1193      >>stream
+x\ 1íWMoÛF\10½ûWÌ-²c­I\8a\92¨\14>¤þh|\88Ñ"jÐ\83\0cE®ÄmH®Ê]I\16\8aþ÷¾Y\92²\94º©[äP \85\ 1B$gçÍ<¾y»þå$\10\93\ 1=]ê%\ 5ø\eN\864\9eDT+Z\9c\84þQHã\88\ 6#JK¬I\12¬é.¼F\ 4\14\8fb\11S\9c\8cñ;\fFbÒ¬Æ+dÜ_ºàáX\8cÚà\b\v<ÐSJÿ«\r\1dDÁ>4D¥]l@Q·\1dâÁ\9bg\0£q,Â\97\ 1\86£?\ 3\fÃè     0ù2 Sð\aÀo§'\17·\13\9a ¡é\ 2´\8e\92\ 4\9cM3OP@Ó´\17\8bH\8c\ 4]\99²T\95#éÈå\8aT\95\91Yм\96©²¤\17þaj*Ç1ÚRi@ ËeE¦RdÓZ©\8a
+U-]~:ý\19\98\92\92\ 6±\1fNÄ0\ 2dïæqUÈJ:mª7MPr\18ÔÄÈ4§´0VWË\ 6\9dlnÖEFs(Ã\14\85Ù*TVùz¬,\15\15\1a\ 5Ìw$)m[@Y\8e2\85¢ô\1cÅs;¦ÖKÝ@s[üÈ·ÖuÖ¾/º§\96ë\v¨ïyËzf±è\96\9e##\19¤©·Ú¢0Y\93ÜÊ\1d-jSúìG-\b\9aæàl«\8b\82¬.W\85^ì|T¦æë%
+[\9eS)5\93+«T\9d\93\ 4ûµ\92\99\9cëB»]\87\9d\9aL\89¶2°ê {kѹE\16e\99X:§5
\ 6\e\98ÇE!\97àÁ\0äSó®£\8a\81´³mÛþ£6¸\85ò\9f\b\14t@\9cö)%Ø>üHoè7º8£þÍýu\1f\9cÎz³Sfh\9bëBQw§\*\84 ³\8bg\14Ò
+D\82\9c\ 6ùâ\16b\15cÖP(âAÔ\142\99°\90 ÇY\8fBº¼¤\9fhvÚ2\ 2½e½_\ fo\88èÚ|0¥r9hø¨êÝ]¹2µ\93\95ã\9a¾ù,\16ÅY\ 4SaÀY¡­cÞ\99)°dñò0ü¨]zä\91\bÛÎ\983L\eTSï9ô÷ÿº²\ f\7f\96        \85¡\182ïý\96øh\bçõ\1dÄb è^\96,ª+Sm`\ 6Ð\9c\1f\96#\97éGH\11°ÏÀ^\ 6"\14ôQÖZÎ!\ 6¬Ví\82\7fh\11?B\88\12\93ÄVP§Ò¶óbÕJÖÒ)Ú\9a:³´Ñ\12cDë*SµMÙ­f½W\ f¯f§\ 2\9a Ê8²NÖð»\8atÆ},´\82`µË\8f\97        ¬{{ÿá\8e®0\91\9bÆQü0Ô­"Z\97à  \81\11ñìA5+H\1f®\80\ 1³;ëTI9\ 6\1aµ\b\8cF[\ 1/x\ 2\87\1aî'Qk\v\85ᬨA\7fý\9a\11KAH\ 6#uè;-¤µçäê5n\16²`. T4y\\99·\1fH\14Ù\980ÚÂà7¨.S)ðÙ\19x,èûZoÌ#:0t\ 5<Îñ\99\91ÿ½1ÅVQÚ\a­íð!\97é'º¤ÀÏÜ>é^a\81\18\8c¼Âî*p%yïi·\88\80OÏÙ÷ÉÑ CÞáÙ»cÀý\16¸\87\1c\88I\ 3É
+\8d\ 4Ý®«Ô;èÿ
+ýO)´02{`ß\7fX`ba\89\16ã\94\96\86-<À%à)g©]µ;Í×\13/#3ðËp±­ø\1d\8e%Î+y_»}aÅ\7f¡~\98ú;oNĥЪ6θÝêkøt{\ e[9½Ab\1846c\18OÅ'7¸\91?§t\83·Çå7\8d\82¬ ö|\8eõ'¾çÓ\1c,@(N\80;³æ³Ð±\13\98©OüB\87K°#úsÈx"\ 6á\10gèX$\11\8e&Y¯sÌkØiaVè콬ֲ`Ð~ØÆ÷Ç\81?¶Ä|ÊÎxïün\rÛå\83«ß      cüW\91$1NçÈ\98ðÒ\9béÉ\ f'¿\ 3 7Õßendstream
 endobj
 endobj
-368 0 obj<</Type/Page/Parent 345 0 R/Contents 369 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-369 0 obj<</Filter/FlateDecode/Length 1225      >>stream
-x\ 1ÍVËnã6\14Ýç+n½i2\18+\96ìøÑ\ 2\ 3Ì\14I1\83.RÀí*\eZ¤,&\12é!%;nÑ\7fï¹W\92ãºí¢»Î ~Ð÷qxxÎ¥¾^M\92Õ\94Þ^Â\96\7f·º£Å*£`¨¸Je)¥EFÓ9å5r&\b:½pN\82\9cl\9ed4[.ð9Ã\9fäN\92å\12¿\ e/}h\9a®\92»>4\9dÏ\92Õ\10üOuÓ\14ð.ë~Z_Ý>¬(\9bк\0¼ùbIk-\98°\92\12úÁkë¶ôckµ©¬3ñfý,9é¢Ë\19OgÀ»Ö\bN\13úì\9aàu\9b7Ö».rFiÚGf\8b\91ëÒF\8a¦!_Pl\94Ó*èHXÓ&Ú­3\9a\1aOµz1äÛ@\95Ý\9bHFEk\ 2\1a4]àÞT~\87È\83mJjJCÑÖ»ÊÐÖ«\8aë\96¦Ú1ðV\0Oh\9cN;\98/Æì$aäÌ\81Ð\9c\90\18ü\1eµ\1e\83Ýû×ã\88rï¢\8d\8dq\8d\ 4\ 4ì\m*\93кl##ãʵ²\ e!Êå¦G×Usy`°nËû?k\9c\97\1c\1aeÓm\8e\91¡£ý³É\9b¤O\80\0fLÓG`kJ%4å`"\1a\0«Qa£ò\17¦\bX\14xsÚî­nU\15AOA\a\84)\87eÁÑq¨\8dðU\ f;BG>¤\v\84¦(ln\8dÃ_d\8aÜP+újo¨öÐ"¨eÈÁ|mMl¨ð\81xc[\13o{\1e¹   \80\8e¶Æ\99\80\13)\8c©p6^\93Úøö²±l\ e\81ïÇ\1f:ݬè\aB\b\84\96Ð/L-dYK\9fS,\ 2XÁãé¤Ó\18ÇB\8f}Üû¿}è\12ççâdÎï_w\95r\8aåû]\17r®ßþ`ú¢L~Ýæ%¿ï|\8c\16\12\11=b\83|R\f\90±2_~³·¾Åþ\1e@\98yU¢UíÉùS(\8dÔ¯*\88Рqn~&\1eÐ\r\16\9b!fÄf\83F\95F=\80\ 6Ù\87òHo5béÛJÓ\ 6ê\1c\92\19É©@B_Z\9càÆäª\85´\14íL\88\9d\1a³\94 g\8d\riCÚC\19\8c¹6XG¹#6\UÔ:\8dd¶²\80À\1e\ f,\Xzc\98\ 2í\1dÜóQ*\99\0ë\1c\f¢\15U\\rʺØpck\fM»m\ 3ç3£CÅ­\97\15Þ.\14ª\ 6ã÷\84\93ð{:D:\b   ¥\82~w\ 1.\80eÙU åµ   ê¢i0Ѩ\90\97        =Vð°\91)BG\9eB\9bà\91\15èó\97Oßb«\8cè\9b>{ðë\1aU{\14±£\ 5\96ô]\8dgPm\8b£t\96±!®f\1cÌ«ø¶û"ªáA\98\a»\ 1Ù\11\8eoJáÐ\16\85       ì`\f\ 5\19®gÇ$ä\fådB
-KXqÌ6D\80ó\r~\eT]s1\13\ 2\88Âùø<o\ 3s,ÓçöáÜ\11½Üï;¹ö~\98Ð\8a­\96&³iFãì.Yâ\1dι}G¶ \9dÚò(þ\r\83\18ªi@\18\83¥ô\85\92$¡w·\ 3á¸Ë8 \19O×ô\88¤\9f\8cÛ6åÓõÓ\r} t\92Íèéæ"ø÷\8bï\84\7f\u´©|þ2\12\7f»ãõ\8bè?úïYÚ\r\88K¼|%ÕªªÞãfâÙ\ 5õ:\92Êñ\7f\85[.Omj\Q\10p\ 3\89d\98÷\11ï\18Í#Ñ\ 1\e\14£B{Ì\b\Yì#\98\93Oû$ø\9eÿQ<ºF½\ e²\1dâ£Á\r\b\ e\900üÄçؼù¿\0?Üë\82dÎÈ\e\8cªêxî|\8eâç\8cT¦ô¸×Î4\13\rA\ 6<¬e´c<ñYÆî^ùË\8c?\17&\1e=þÛ¨\8er%ò3\ 1Ï\a¸â(\vyÕ6Ð(ßëX\91\9fe¨H\80Âm§\aÏY0­©\b¾\16\99É0\94¨Á©½}\96o\17Êt\8egÂ;Fúo\8fQ³%?ÒÍpm!hÉ$ݯ¯~¾ú\13f\90% endstream
+355 0 obj<</Type/Page/Parent 332 0 R/Contents 356 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+356 0 obj<</Filter/FlateDecode/Length 1301      >>stream
+x\ 1¥WmoÓH\10þÞ_1\12\1f.Edk;Î\8b9\81T\8a\83"\15\8ekRÝé\14ÉÚØëÆ`{ÍzÓ6\87øï÷ìÚn\9b(W
\92³\89çõ\99gf¶_\8e\1c\16\fèþ¡®ÈÁß0\18Ò8ðH   J\8f\93Kc\8f\ 6#\8a\vèL&Ðé\1eF\8794\1a\aÌ%\7f2ÆÙ\9d° Q¶o¼\ 1\e¶o¼Ñ\837pÅ\9cöÑYqGlÜÉÂ\92\8dàÞ\97=µ¢CÇ¿\13Ýuèã\8d×\1añ½Ç\1d\ e\82\9fæÐ\eùlÔ\8aºÀ¬\v\ eù\ 6\ 3ÄÚäþ=\87îdt\17\9c÷x\86\ 3\9fMZ«8¶þÞ,P\80\ e5{\ 2\1e'S\14\0h,Rr\99?ðh4        XิH,Æ\ e-âÞ²ÇÖËc\12·Z¨\92²RS.y\12ñ8O³\,{Tkµ\895Åy&J\1dÕ\9akAÏ㺢åñïÇ\8bOG\ eõ'°h\fÅ0ôc\16\8c\81\93)'XH©ßDÙ÷\1c6\18\8d\8cÍYYkÁ\13\92éËFr/¡¾\e0/\bZ÷?\91\87I\82¤¢½D\1eµdTöä\7f\80\ 2\90çaê\ 3\164©ûlÀ|Fa¹)\84â:\93\82x\99гD¤Y)ê\1dèP\ 4@1ô\f\12ám\95óÒª´¨M\1a|\e!+sY\vâyN1¯2ÍsÊ\85Fýáá&ÓkÚ\94    ¾ÄR\89\9aVBß\b\8dTIÍè­¤Rj\90\82+\8dp(KÀ\8a\84jTñÓ½6£eïôÃ|Fgè\8aZ¨kØÓk\9c(\ 5æ\e|®¶-\92\16\87¤\87·\14Ë¢\ 2õ\94ͶÞ\82\ 1\ 5­Á\ 2\84Ä\96Ç\aÒn³æE\95\8b'ðDÜC
+¾¾$ó\9dÞH\99\v\ 4ÿ\95¦§çóð\ 5-..Cú¶Çð\16{«Ö\9eém8=½<_DóÙ?!¹\8ecU\1eáô\a©»(Ûºôè/Ak~\8d\92\18\84«\84J^då\15ÕñZ\14\r^]á\ 1!פåÕUn4RÁõ\ 6\131+\r¶T)Q)\19\8bº\96ê%MÃÓÅåE\18½Fe×\ 2R¯)«\8d\9bµTz\17úe\ fª)¸¶Ê·ä\9a¦ðlÑ\91l"êXe\95!!ûUü;غȦ\7f\\9c\ 1·6\16׶ý³,\ 5Éï\82·"­\80\1d5w6\8cnôñ"\9cÎþ¦UÎ×;B¢L²\94N\9e#ü=[ôü¤Iã;ý7dt\86¾CIô¯µÛ¼\12¦ÙdQȶ\93Hn4\98§3%\0÷²\974}¥D!Á\83ky#òzylÑÞk[YBá\ 6}\97\9fKySR"\v\8eêóXÉr[ ¼\98\12|µRâ:k\ 6\aÒhú<û·iû¶Ý1WM\ f·\8a\87\9cÝ÷2b\8c@\ 5\16\15ÇD\82¥ä\13\8f\91Cgà ç\ fâ\1a­\8cá\ 2:[%ÃlqhX4%iwÁ\83¤ÃÛ§uvÇ\8aËy\18ÍÞ\9f¾\v£óÙ|ÑPë\91\81\1d³ëá]tnÌï¯\8fN(Ú\8f\ 3\82;ülæ8í\8aEÿo\10ó2Ê
+~%¢<«µ\95;h¯\163#un\85:\9e».n[\ f\17Í\10W5Ûl¾Y3\97µ\19
+õì4ÚÍ\84BxÐu|³Z\8c¬Ëè#¸»R\90­        |æ\94c\1fa\94\9bùSÔ"Ç\98?4&\9e¾\9d\16\98cÖ>\95B$Ø\19\12\81+³¹à.Óp\96¾°\vÉLDh¡ç\r©ÍÑÞT
\13ìß(ôL\e1Fß&O\9a\987UCD#\1f\9bN·W\9df¾®Åö7eÑ\0\ 4ízâ\98ª1\9aJ$V\8fÑb\8dqZ\ 1
+\9dÅ\82
\19\90dhl^\9b\8d\88¸Ûýh±!Y\89Òàl\1a4Υż\8dÊ,D\8e\19&ãÏ\87°û¡\15\87©\87{\9b6¡½z\85O`ÓìM$bçç×\87¼!"ƺ޷¯¿5\14\98\90\8b«"î\8eã1¸2À]\1e÷³±¹=ö>ªìZÞné-\9a;GV\8aÞórÃs£Øwqç\1f¸Cê\8f\1d{3\ 3½Îdbò~·1c«»¼ø\13sq÷ñ\8f\ 4,\ 6F5\\1cýyô\1fó´\8eXendstream
 endobj
 endobj
-370 0 obj<</Type/Page/Parent 345 0 R/Contents 371 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-371 0 obj<</Filter/FlateDecode/Length 947       >>stream
-x\ 1ÝVÁ\8eÛ6\10½ïWLséîÂ\96-ɶì\14A\81m²AP´iQ#§½ÐÒÈbK\89\ eIÙk\14ù÷<Ò\92\8cx\81 @÷ÐÖ\ 6\9ay\9cy\9cyäÇ«i´Jé<\98-Mñ\9d¯æ\94­\122LåU\1cþ\8a)K(]P^Ãg¹\84O?x\9fhJ³8\8db\9a-3<'ñ2Z\9d¼ñ
-\88ÃÐ\19§é2\9a÷Æp\b\v\9d!ÃSg\9a$\1e<ÀƳ¬\87½[#\8cKäÉý\8câ\98Ö%"^,3Z\17aå)­óë÷\r\93\92\18r]×Ü8K\85¦F;ÒeÉ\86\18cîä\9eÉòN\18á¤nhÃîÀÜ\90«\ 67\12MÑÍ\v\8eèNéü/\92\ 5\0e)ÙxÔÑÍúÏ«)\8dÁG\82\10®7G²­1ºm
-Ùl\ag:HW\91 \±0#*¸\94\8dØ(¦\9dp\8eM\13y\98ÉýbÈh\9c\99\a|ó(ê\9dâ\97'\83)­|Æq4K\13\1a'óh\89_XMn\9fãÓç\82\1dñ tKëJZÄ®\14YçÉЭ;å \8e$\e:êÖ\80ã\82¿{âú\1cñL.PeI\ f×àTÚ\ fÂÈÀß«W\98\v\1fn.|þ¾\98\13Ñký\87®\190Íö\ 3\9bã»z§\r²s\ f×\ f7?\\98\7fêæirÚ\8eÉ-µM        û¶\11\8eÕq\14¡Z\1cC}Ýþ\vCþ&Ö\b\89yb\87L\18\ 5\8bVy\92Ðsðy.ôq_ÉY¨èPï9ï|Cv\15\7fnò¡%Þ\95¾ðH@G\9c9\866Ó$\8a\ 2ýek\81ZUz+ó¾÷C\13\7f\90¶"§éE!­iwî\ 5r\86ê)}\802\84g_Ì#*\99\15\95\86±\80î\v¢kðÖ2Ö\89¿\90\17:T2¯\bìýú~MÐ\12\8fjEÝ\89\90°\ 3t×ç+\8aÑÜ^¹Æ)\18ðÍ6\8b\92(\8dègæ\1dýÔ«Ö      J\1aÒ\87&¬è\83\a÷Ä\v\1fDb§\ 4
-òë´9Új¶´\11P1\90à\83üز\rê\87ô\r\8bBl¤\92î\18\118öï;ýô©}--\92î¤\12\e¦J\98\ 2\85ó\848\ f\ fLñ¥ÂúæíÐ%dºÏ3ðäÓëTp\8dZ\ 4ï~Ç+¿-üØU ¨õ\99 >Ó*ìÜi'l¥[U@Òi/µB£\16a7!ZAÄJÇÍK*ZÓKtÐcÙ\11q±áûNjì\88\10ª'\85½\10\96ÐAm=ÀÆ\88\9cñöPáô@y K=\10ç\8f\17h\r\ e\8bÿºÄ\ f'Ýùt¸Ãià ±\9ckp§£\8a\ eºùÞõ;\18\ fæÿ³\13!\89£\85ï½o\95×\1c\95ïeË¢|kþñ\1f\v+\14ÛßhXX©\8eOй5¹_v\17\8a8Ëp\85Ki\91­¢é*hÆoFîõã\91\9e\95Þ¡e\7f\11M+\94/ÿq\f»4\9eÓ8\9bâÂáÕ       ¢\14n4o[\\80üÝÊzÃÙÒßÞf\102\18­ü?oÖW¿_}\ 6\1cñéJendstream
+357 0 obj<</Type/Page/Parent 332 0 R/Contents 358 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+358 0 obj<</Filter/FlateDecode/Length 1264      >>stream
+x\ 1¥VïoÛ6\10ý\9e¿âà/sÚ\9a¶l9¶VdÀÖ¦]\81vèÐì[\80\81\96N1[ZÔH)\8e\7fß#õîë&Å\86\ 4\8eC\1e\8fw÷Þ½ã?g\13\91Ìhÿaoi\82\9fy2§E2%Ë\94\9fEa)¢Å\94f\17\94npf¹Ä\99îÃ\9f\11\13\8a\93¹\88(^.ð}¾\14Is\18;pØ\7ft¶Ë¥\98µ¶SØ\87\1e÷Öt6\9f\8a¸5\8d§\ f»\9dÆ!\90\10Â#n£eìc\ e¦\11òïB8\15m\ 4\83ζwûÛõÙø\95¤%]ç¨ÏE2¡ë,$\8a/éðMá*\96\19\99üçóë\8f°\v\96£(\11\ eUN7CªÖÊÑå%þÊ\8anÎé3 !è\8b?4¡ÞÖØ£\85G\ f\1fÄÖ{ùÃTüu8CzSàj&Wrª¤¦T:nbñ«*\1f¹JV¼á¢"Ä©
+§2&IÚ\98ò\19É"#\156*«îpü\19)Á¯Uì*G¹±0NM\91©J\19\7f\13\92\84\1f³ºS¦Æ¾5\9bp}YÛÒ8n\93\85/\90ÉÃÞJ\9bôÓ32\ 5\8f´*Ø:\92ø]\99\8dÜ\91)+\95J­wTZvl±ìC÷\11\92«l\9dV5ØåCÝÈOH©"\96N±¥Ê\0s\99\89\ 6\9f\1eɾZ\1f\90\8eë\95ñ\1dkS²\1deÊ¥\96}^ßuqu/7¥fâû\94\11¦)Zoà\8bXxâD"\9eM\e\98\93Äç¼]+Ø\83\17\e\83¨}¾È\15ß|¤ G[ \90.\e~>ü\87\88ÆOè½FnL\99\0Ù¶©÷\18%/L\15 Ø\84\rï\98Ö\fÇOÆGn\1af©ê'\\fè\1a{\10\13(Vª¨ùyk\1f\ 5\8cpofþvfàrq\8bÀ\83ë\9bóÎ,\84\1aè<~\95P@6GÂMÞÓ\99H.\82\9fXÄb*è×·oÃEÖh\80×2Ï\91[\9bZg´\96\0WR \84\8fâ\88ãóÐVW÷¥\96\85<¨ö·­÷\97C¬´²2EyÁ\83À\8cÖ1m\95ÖÍÊÎÔ\16á\80ñ\ 1\r\8f\81\\ 1\1eO&ÍÎ\81q`¥wÀÖ\1a\8bðqÒ×éÇÂG\7f·LÏ8\a ß§bË£GÙsR\15\ eñ=æÌKóa\ fÝ\11h\80ö`ûJ;¾\19\1e\99´¸¶½Ó£:\11³\ 6Õÿ¬\82\a\17\87K\1f\8a¤ÓÓ\1fÔÈc×'\88\14xtJ,¯!,¹²\ e\1aÒv¶*h°ÏrÐ\90\87ï9­+hM\ 1¶nd\ 1Ñ"\ 3Q\82æ¬e«\82hôt\1d\94ªW\14ÊØ)Ëèó!ô\ 5§3Èn ò͹ \86³\9e\8d- -wZ\16\1d\ 2\1d¼ÃI8
+Ãe\903\84Ìò@\90\8f\7fÀû\ 6\19\ 4*c¥\95§Á\81"\e\ 5ÍodVjgH\96¥VìZ­ë[\19$\9eNEèrßÃ3\ 1¨\82جXã´\1d£[·£º¤\951P§\ 2\95ó:í \86îDé»\1e\ eºù(ß{}\1fý\92kyK\97^9÷ã¦ek/\13ÿ\83 \87N1£¿½8zN_\88Ñ$'w'Ø=\91íÃD3vãià\82ø÷Â\83HRå0e=\98\1a\12\19L¶Æf»f \17\9cç*U`\80è\ 6\82t\ e\ 3Á³\ f\90\16;\10­\1dbTðÖë\17ÈéÅì#§\15T\16Ê_}M2?Wüü\18Ü\1a\93\rèSa¶\9a³[Æû\86^\8c_<}*Pùß1\16é\ræAÀßä9C'W»æZí\1dtãÄ?q\96£f\9c\1d\8c\85#.Å\9eôLè\14ô\92+!Ö '3&ý\8aSYc«y|øÅ\13Åí¨ôø8x×>\f:\81oj\8b\89\19\8aÞw\87/T\1d\89\90\0\93VxóáEÔ¼¨
+¾¯è¶Æ{ÉOÄÇ\9e\bý3#\8a»`\91\88Y4§\8bE$fóØ\8fû÷xb\99û\1d½ì±{'\8bZj\9fù(jíG\8bIxF t/Læ\87Üë.\82Ðmñ"\16\8b\v<Þ½ÇhâÏ^]\9fýyö/Oj\82@endstream
 endobj
 endobj
-372 0 obj<</Type/Page/Parent 345 0 R/Contents 373 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-373 0 obj<</Filter/FlateDecode/Length 1179      >>stream
-x\ 1­VÛnã6\10}÷W\fÒ\97$udËww\91\87l\93\14\vt\8b\165\8a>\ 4\bh\89²\99\96¤rA±ÿÞ3\94l\aJ\13,Ðu\0G\16çræÌ\99\91¾ô\86ÉrL\87/·¡!þ¦Ë)Í\97#r\92\8a^\1ao¥4\1fÑxFY      \9fÅ\ 2>»/öI\864\99-\921M\16s\\8fFËdÞxã\b\11÷_;ã)\e´Æp\88\898Êh1J¦ÿu\90¦\8b×\a\1fW½Áõ\90\96´*(M&ã\11ÍfÓd9[Ð*\8fI\87´Ê\8e\a§ßãs²ºë\ré,Eá\88~L§ô±\ e}
-[IÒd¶vb#s\92O\99¬\82²ÆÿôÊá{ \18t¢*\13¨vÚß:)râÏ9\r\8bÁ)ý@¶\88Ç \18Ç?âß\9dÌ\ 2p\9e¾\13¨5y+P7Â(MfÌ\88*èæ\98R:?§¿éæ¤\ 3ô\9fÎo@¼´\7fÚR\86­2\9b¿¤{þTVÖ\ 5aÂÍñÍÉ\87\8eù×ö÷x\94L8\99ßÂö\9d\b\1dwdk<
-å|¨\84\13e\1f÷@\91\93\95\93^\9aàÉïмfgïoäSã\8e;oûKí%\82|\13\vI\92d6\97´\95Nâº\ 5¾#õk\93åìê·Ë³7Ëmñ\ e®\97\94\82\9d\ 2*\8dÃpÆla(À×$ÁeB?Û²D­$E¶%m7*\13\9a|\90\15§\1d\Ï(MÙ\1f:\1fÍÙíê©ÒÂ\b\16tÔóàzòÂdÖôâ×\17qÀâÖÖ:§µ¤¬I\ 6µ\ 5\8bòtE\16Óâ<\15Vkû\18G\aúe<\90)\ fÒ£S\ 1¿á        B\84Éw!<=*­w=\1d'±¤RÜËè\15­K\8b\1dÂ*\17k-÷,¶\b?\15ôlkÚ\8a\aI£)ie¤ç\9cÑóQ\ 5@\ e$vÙúѸ­£rv\8d\90Ï´±´\16Ù=\ 1±%\15¸&/\ 1\99û\16\1d
-ë66t@ªBlk^aúl} #8\1dõéèq«´ä\8bÜâ[\86\fJ@\7flåév\87à\96\8c\ 4\97{\98        ]\14A:\12ZÇ5\ 4É      @©}\8d;ÏT\8a\9a\1ew0eÖ\ 4\ 1
-\9c\8f<\1dd\83\8f¡\9c\9d\a½\hM×µÉâf£\15\86ÏÖ\9b­~þ?²¹\88íB\ 1móc3\ eêá>2É`á\9e\ 4ø\86>ZEyº«A^å\14*\84    \1f­åF\19\83UÂá\ 4\15-XVQ§ü\ùL:\13½ \18o\r\ 4éÐR\8fí­0\f&kÄ×d4^~©ù^TLí9\85
-       Hhô\86\ 2ZÐÆ\86Fb\80ÄJìä\rÛHÚA²0Ë%:X¢\17\84í)h£\1e þ=v\85i\12\ 5\9eÁ\80'`ë\95\83\0j/\9bì\10F\85ìÊà¼\8c3\8aØ/;Ã\8f«vXÚ%Çúi¨\84\8c\9dÍëØÑ\ ee\\875\90\90Ǽx
-ªl øzÝp\11 ®8¸\82©\ 2¸\®ë\røßôAM§ì8\98j·Û\11U¨Ü\ 3t3|N¢\1cZã.¯\ 4æVp\81±­\a\13ÌD\80\1d\82¨*\8d͵VZá\ e÷ÛD%¾¨wÏ!sÇî<EZ\96\1610<\1e©°úk\1d×\8f¯±\11×ÒÈ\ 2Bè3\9c}\1fö;­\1d\9c\18ï\ 5ë\9d\82\ fT£HN-ò\\9a¼.±/ötã©ç)·YÍëøý1\9c\1dÆ°í\1d¢qÕk'X\95P\ egap¼J\117R\1eP&ï\9d\1dºYóÞâ3'¡1-Í&lùì\9b¶þ¢Ýúé|\99\8cÓ)ͦ\93d1\9bò¦øÝ©\aûôL\97òAê(ÈÏÂ`\ 5qì³\9dýÙ|\88\974~\fá\11\94s\9b\7f©U.ã"fÃÉ|\92ÌñÚ\86÷µü8\1dò­«Uï\8fÞ¿¤Ó(aendstream
+359 0 obj<</Type/Page/Parent 332 0 R/Contents 360 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+360 0 obj<</Filter/FlateDecode/Length 1351      >>stream
+x\ 1¥WmOÜF\10þί\98Þ\97\ 2ÅËÙ÷êVD"\rTH\ 4µå\92¨*U´ØkÎÁçu¼6/\8aøï}f½ö\99ËåE­8\1d¾Û\99Ùgf\9ey\ 6\fE8¢õ[yCCüL      ÍÂ\80JEÉ\8eo¿òi\16ÐhJÑ
+>ó9|Ú7ö\11C\9a\8e|áÓx>ãç©\b\eg\9c `÷ÖÚ\ 6c1r¶\ 1ìí=ë\88öÉ\99\8eç\13\11´¦ß\b;\9e\84kÛ¯\87\1d\ 5£Î4Dþ-\84mh\83`(Æ-\84¯\87\r8\9b¦\ 6þ\90\81ÛÌ^.P³ÍÈ\87§¨\93\98Ñ"!_\8cG\ 1Mç¡\b\87>-b[°!-¢Ý4¯(IKS½\95\88è\88\86¿ì->ì\fÉ\9bÃÒ\1a\18½RíùV\ 3\99ëj©ÊÆf[\84j\99\9a·²Låu¦ú\11ü©½#¡«]zns\84Ï\12¨\9cÏÕ\9e\ 3Õxô \1f\91Îâææ\9f8\f^k¼\1e=\83vµG\1eÝ#®ºS%51\ fOC
+\ 5p$ä5uòкpj\91\8dÅXL\ 4½Òù\8f\15ÕFÁ9­\14\99BF\8ad©ë<&S\95uTÕh\84.T)+]\1aÆzx* \15L@nÏ\ fÅ$àLO\1e\8aLæ²Juþsc4ï\eY\e¯\17±Ðh\10 ¶\91\81÷b\0ìÈd¥V×\9b\87Â\9d%u\1eñ5\ 6\15\88©\90¥ÊÑ"£,¶\ 6\92½í¬¢\146t£r\80Ï(Òq\9aßPQJ¸#ÉJSQWä\80\98\ 3\10.Q\b\16)<sèö¢þ\1d\94«\87\8a]s¹RFл´Z6E\83\13\96<W\16\1f]«ê^©Üµ×v"Þe\e\ 1\8e;G\83Ãî2\ eÌÀA<\92\86¢LÉRl)»«º\\15\99r\15ß\98
+nN\10\86Ü\1dyi[é½\90¯me\9f\r\82;\14ÛÎN]±/\80êj÷jÏ:v\ 4èh5\14£\86Vg¹©\94\8cI'ÏY°Kî\16ò^P{Q÷\9dX\7fÕ¿\10\9cènì¨\8c\ eC*ì\ 43\87§\82^Ë[t\13uͤ©è\1aýE\89\13t¾«©©¸\9fº®¶Ô±¥ï÷\15Òª\8a«\89\ fÊ
+!Ü´µ²òÉõÛ"\84ìÀ\ 2ÌSøµqP*\8cV\8e\18\15\16\88Ó¶¥\91\82'x\1fî\93wrñÊërñiÿÐ\ 5
+Æ­\8cµ\89\ 6ßF´5hà\82þ\87Æö\ 6n{mèS¯\ 4\9cëgIÓ\13õ]×IÀõiKÇ,ó/tÕÒÞ        Í.½\81\8cùt\r\1dº¥,Í\15&0ÑP/;\97\996<þ\r=\98\ e\81µ\81B$С{YÆ\82\16\10sZ\81NÆú(&MÒ\95\1eê\ 5\88ç\9fc®4ø\16ISC]îRu¯\9aAEIÜ°\1fgÕR×7Ëu\88H¯VÐ+CK\95\15d\14ä\v\9aÝ\9d[\11\ 1\ 6¼L\95f\19Ë\97Öñ¦v        :Ë)\81\8e\1dÐ\19%:Ëô=\ 3Búe\9d\ 1üýRå\10u\9bo¦£[\ 4Ü\90¡\ 1
+38 \ 1T?Sü\10ë\ 1eZ\17Nû2\8dZ¥   }zâ¬+Õ\80®´\16tÌõ"  pve4\e\ 3\80\93\1f¾Ô®K\ 4©Í¦&ÄØV\19o\0/NM\ 4n@Ö       /.n^7+ é5\14\82{\92\ 3y¤b.\11\9bmö¨-°\93Ì/ÉÆLX¶\8c(Z¢\ 3\11g\94æ1:Ã\8beK\12­J|{É\9d%vKÛ\9d\85_\1c¿l6\16ïp{Ú¿\9c\ 5\ 2)\88dÎݸ¥}¬óÇ}*åÍ\8d\ 2A/õg\9ekب\ö\bj$N\1f\1c        \1fu\r¦³D6ÎÍU\854\86pT2·xD°òAT\88f\9aq5L\1dá\93¡\81z(xZ¼j4hç)Zªè\96É\95æë\10ÿ{G1ÏÒ\88\17(O\15ÚBûîC]fï\19åû\95\ e\7fèÈ¥hEvSq/Þ\9c\9f\1f°èô\8d\9eZmý\5¿OÇ1\fPW\7fCí!Ñ\9b×ã«Nå\8eÏß\1dÿuù~ñç\9b\93\9e¼·«Á\89Û\9c|üé\8a¿eg3üg0¢)ÿ\9e\8c\7f/Ó;ýðH¯ÚAÁ²Ë!7\9c\99çÏB1ò'äÍ\86\8f\ 5a\8fp_~«ÓX±\ 2Z*\8fgc1\9bâÿ\ e\8eèûì{²Øùcç_oº«\9dendstream
 endobj
 endobj
-374 0 obj<</Type/Page/Parent 345 0 R/Contents 375 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-375 0 obj<</Filter/FlateDecode/Length 998       >>stream
-x\ 1íV]oâF\14}çWÜ·%»0`\e0l\95\87mBºyh´«¥«> E\83=\86é\8e=tÆ@PÕÿÞsý\ 1\84¶R\1f«ª\8aDlÏý<÷\9ckÿÚ\19\8aYDç\1f·¦!þƳ1ų\90\9c¢¬\13T\8f\ 2\8aC\8a&\94äð\99NáÓþ°\8f\18Ò(\fEL£i\8cë`\14\89¨öÆ\11"\9e~Zã`$\82Æ8\84C\95è\1c²ºjLÃpt\8e\eá²±E\968\10£6ãåÉ_$\f\98^'ü~Ñ\19<\8c(\bh\91¡ÉÉ4¦EZ\15;¤EÒ\9dËdC\89±^\17kZ9\99\e»3)­\80\8b\1eTJ¶ r\83\13\99+2ºP´:\92¤Äæ¹*J\1cÉ\92\13§WÊW\96Öéµ.d©ái3~t³ø¥3¤~\10\89\10\ 5tëTº:¢ÆÚ4\ 5h\ f\9f¬ñ#\84UªèÁ\88,â¸\83ö¨L:\92\ay¤ÌÙ¼Êøª\aA\8b\r¢\1c´1äu¾5:;^\15Àý¤jµ[£Îu\8f\8bR\15²HT\8fd\91b\ 22\95+mtyl+IlªD\13&\9c`,èã\83\a\10\1eQ\94¯\9aíÑ\ eåqð\1a<\8653r\rX,\92|«ÏZä8\91.}Ówn1ö:¯Qï¯\12qØsH\80\7f9³÷ô;\rÞR\7fþtß'\9d-»Ë\eÆë°ÑFQ{§ÊD\bAo\a\1cyð09q¢ß63\7f\91ÀªN=x\18Ò\8c9\ 3þE!õñ\98â?ZÆÐ\96]
-èö\96~¦åM\8b+ø̧¿]Ý\13ѽýbsUn\80ÅWå\8e\8fùÖºR\16%\17öÝ\9fÍQ¤\87=\19\vì\8cö%ãÏ\88\ 1-\8fÃ+\8fW\9dÓ\vaîAÓ$ø\16\ 6bÂeYw\ 2´yò¯nã\12àÓÄfØ\ 6<\91~3\92h\\8d\ 6Ý\8dD$èIæ̶;[ì¡J(Ï3R\83\a¸\81ª,þ~4¬Ñ`û@ÐWé´\\81"pU\8dõ%-xUtç/[#k)W\10^n\93\13s~\ 2;%ÄÆëÂ%Ò7"òj+\9d,\15\1d¬K=íµ\84¶hW¤Êù\84Ù¾ì¾y~³¼\11à\b\15¶$_JW²\8d\87L+°X\97\9b×n'
-4ËdÙýðôå\91î \1e¯Ü¾ÞA\95^\%Gl+V$8´\85 °9 ;\7fô¥Êi\ 3\99£\18\ 1Á4%°ÐÎÙ±D6\1a+RVÒ¬¢§-\ 1\9b캠:ý»w\ 2\rÍÅZ\10B\ 3µ\120$FzߣÒíp\93IÃÐ\80ÄÜsµ£@W\ 4`Èè HíQ^ª\12\14À\v\83\85B\9f\9cÞÛ\17´`é\ e)ê¡^\8e©YEÿP½Xع\7fÖÚ\8f\9f72ùF·4¬DxÞ\b-¿Â¸å×c\ 1°$Þ\ 3YC\81¿Ý\rUt\ e~\8a\8dö8ã#\9e}|\9d¯%f\9b/
-Û|ÌÏPÐîHª­ú??ÿsü\9c\9f \9e\89(\18Ó$\ eÅlV½S[ÂßC\rÆn¡\88\1f\93\86\99ßoíûñ\10¯'^}Øx)/¾\1fvP\r\7f\9dT\9bl\14ã\93j\82o86
-\ 2ö\9d/:\9f;\7f\0J¡èlendstream
+361 0 obj<</Type/Page/Parent 332 0 R/Contents 362 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+362 0 obj<</Filter/FlateDecode/Length 1549      >>stream
+x\ 1¥W[sÓF\14~ϯ8\93§ÐÆ\8b%_UÚ\a NÈL\b\94\980\9dÂdÖÒÚÞFÚ5Ò*Ætúßû\9dÕű   ¥-Î\8c/ÚsÛï|ç\92\8f\a]\11õhû\96\8b¿A4 Q\14R®h~\10øG\ 1\8d\r)Π3\1eC§yc\1dÑ¥a/\10\ 1õÇ#þ>\14\8c\13\18\1aÙ°/zµl\byïgkÑ\7f«EûcD×\88~Ãl?\1c¶!|Ãl\18\85Û\b¾a6\1c\ fÄ         a\em\97 /ú_\1e4ÀÜ¿F4\84b\ 5N¯ß\80ól
+,֖y|
+üÄ\88¦s
+D¿\17Òp\1c\89¨\eÐ4ñ@vi\1a\1f\11\91J\võhúÇA\97:c\9cñ£?÷~ãQ®\\99\9b÷GôâÕ»\9b\93ó\93\9bß^½½9\9bLo^LÞLèý£'{*\7fÕ¿\83am³5p9¹\9e¼aÕ«}ÝJÖk>>\8d(\b\80\16¢ïTáwÂ\ 1¨âÍõÅ@йÑNËT\7fÖfÁÎX%\128\9f\83g\9d\10ÊÝ>ûfáà\9e¸"\99¦t's-g©**UI¸»W\f"1\bYoòi\95J#\9d¶æ§Jh|_ÈË\9cX2Ö\91,\8a2Sä\96ÒáMm\8dS¢âTæ*¡µ\86S\96\9d)*\v<(\8dÓ)ɹS9ëlh)ï\14N\95asza #a)-\15\156Së¥\ 2»9Y¤\8d÷\12ÛD\89\1af\7fñäè\8dÊ,¬p\fñR\9aX\91\9d\93\8cc\9d(ãpí\r|\ 3.\92\ 6þ[7\r\16ÞØãÓ\1d,j(d¶JU\rÃ\1e­:@,\8c"\86¬XÚ\1ch\98+ÿù\vuwX1O-ð\91§þ\83öO\v\97\97±£\1fV.ÇÙåÛ\8b\v¯Ü\86Ó² +zCÏ\82\9a\90êÌ\1cѹ#]PVÆKR²Ð\8c­E\12f%îLWçgW\93³kÒs\8f\8aB.\80®Ü\14´±%!Qäò\r\ 3\ 4\ 6\ 1Ê\0i¾!\99$9ÿìÖ/Ü2á|îâ\1f\84ÑéÓn\10>!\9bÃ\.7¯]þ{Øý@±DÖ\8b&\88kº+ÄV ûá«Ð_9éÊb\97\80G¸Ñ\9dJíJå\9dD\171J\v$åkqPÖ Íõ\15\9bÌ2(mº\eV\1dútAØ\93ð°æª'|\1dζ\ 6¹¢ú\ 2\9dÛ\17ÔPÐiiböZ×Ï×J\ f}TÐ¥DqÌ\e\ 5`\ f\1a\0x̬M\15ø(\19\9c\8f¥*ØêCpüûª¼®\8afiË4áz[-sÉ%·ã¢
+cíeR»Ð±/\ fHKS¬Qjµ8X\89"Êi.¹ò
+dCe¨¥\aºÆ\7fª\14T\b\82\9e¥6¾\9d.uñþh¯\87>·¨Xm\8a§æ<\ 3K¿8?/Þ©Ùk\9c<C\97ºm\8fïuÁ¶bz"ª*¦/\86"\14ô4]3å\8b\95\8aõ\1céo\92á6+ä\89\99Ûfëû\121E\1fJÔ\\96i\9bð]ó\9e\97`®q\82¦(¹;«\81{6Ó\8bR»Í1\81Ú\0|\eá\9e6zbÕ
+k6-}\86We¾²\85:öÕÐXØ­Sï§Vò·®ë¥!)%\16ÅÊíÚ(0\ 1Ý á«Ù¸%\1aD[ ÷&N(üüd\90{\82^j£3ýyK|´\804-ÈǬÑõQhh4³¦%7¥ú}\ 3©ê\7fh}\e\ ez\9dÃ\91ïus\9b¦vÍ\ eyjTÐH\8aQyܧ\16\98^Æ!@Ãå\92ÉäÞ,cyNSc³4\89ÊQ\a\9bÒÿ\1f\17\9cMl\14\ 5\81wDÀCÁ\7fù\99f\\19\17ºp\17Ê,ÜÒ\13Ü\1fýø#Ö\8d:\9d\1eðýmEàuÿ¼^(ê8ÛªøÇ9òÖ 8\87\19éT
+\1e\98\ 4òÖwð\96$\9cP_/JbÞpïE[Ƭ¨³\8b6F\Ú 7³\90Û?\ ff\fè|©dÒ\8cñUn\17¹Ì\8e\ 1½\1f\12,´ËÖØf+\9db\961¿\91ÖÔÚ[*WUbë¶\8aü \ 6§3$×Ç¥]\95å\86¸Õ*!èD­\94I\98       \18\19knÅ6\8eË\9c£ô\ 6\1fÀÝ\e<Ƶ(Ó\8båÞÈÃ\95=k|¡±YÆ!A\eÏ­\9f¤Õ\/1<±\ 39\1eË\88³Eè\98!cǶ\౩\8ec\80Åî\80\1dß\1d«\1aì\1e\82 \87|}\ 6±à\91â\97£c\ f({Ý\ 5\8da\16\84\85He3¿\ 6XêTÎÀ{N\1c,=tWøܶ¿úæ>ðÖm\93À\86d¼ÿð\<7\85ã¼b媷¬¶\8dV\1e\93Ò_\84\rµ\0\14È\92_÷üµªu\ f\91ñ\8c®\16Ô*\8b\8a\15V\96ÙD#P·¢1öe¿ë\8f\v\ 64\1c\8dÅ`\8cõ?9z\9dë;ûi\83Ô×[\ 3½\94¦\94)\ 3Ö jùΨëw¸¾ çÖóã¬ÄÚ\98jSíÈý\11æÿ\10ÿ¯±Å dÝÉôà×\83¿\ 1\1e£&\9eendstream
 endobj
 endobj
-376 0 obj<</Type/Page/Parent 345 0 R/Contents 377 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-377 0 obj<</Filter/FlateDecode/Length 944       >>stream
-x\ 1­VÛnÛF\10}×W\f\90\17Ú\88Ö¼\93J\80\0\8e\ 6\924µi´(\ 4\bkri± vYre[(úï=K\91ºX\80ã&\85\0\8a\12\9c\9993Ë¿F6\9bx´»4÷dã\13L\ 2\8a&.5\82\8a\91ÓýåPä\92\17\84O\1cÃg¸\18\1ffS\18ûÌ#?\8epïx,Ú8wO\{ûÄõY°}\82PÌî/\ 3\8aãÀu\83â\ 2©c°\8bÕÝõ¦~\103w0Ý\87%/ö¶\ 1½\0·=Ê\10«\8bÚ£x\91ÿÚ\80®ëla\ fò 8Ø2    B6y)^\14²p =ä÷1\1d\9dMm\9aPZ\90Ã|ÏE1#\16\841¥yW"\9bÒÌ*¥¦Jñ|Þª¥\98\17e%f\16µºYe\9a²ª\14RÏ[͵ Ó¬­ivr\92þ      Ø\90\1cÇà\8e7Àc7ê\ 2¤¹u%[-xNªx·1=`0v\ 3\16\83 \f\87À&îëÂÚ\b\87Ví;ßÀyúJÎ\13rü}Î\9e;p\86Äð¡\9fÁ[4dÈPÝ(­ôº\16íaÂààF\86AòTW\r]*Ù'ê÷51&!C¨Üºm\ 5qÊE\9b5e­Ë\aàò\86/\85F\18\89o*%é\ 5Æa%3\83´\vk\9e,v|ZF\ 6ËضÆï\bÆ°4õñ \19\ 46\86{îpä\9aÖjE+ ôA³.Sv\9c_O>yâ˺\12ßhãÌb\8bÙ  \89'ä$\ 1Ý«\89gÕ·\9bú~`Ýw\15X\19°þ\eÈ!ÿ\1f\10ä÷e\82\91xOª¡ãT^,\8bñ:vùÞì_\96¶Ï(\91«¥h:µ¶o\89Ë\9cÞä\98:ù?È»ª(ãu©yE\95ÐP\ 1\ 2<\96zA+\89ij3Õ\88\96î\84~\14BÒ£jrhùR\91T\1ak\867\1al¨Ì±gÊ¢ÄXt®økçÍhf\9d\7f¹¹¢\8b¡`½È\ 1,\9a\a Cí\90u\81.\18yß­»9ÉÔ²Æ$7]¶í\1a[iÙ\8f\9e¯±½\91}­êÅ®¢\90ì;2¿é£R\95\0ù¿izþé&yKéõmBÿ\1c뼯~çÙßÓe2=¿ý\94Îo®þHȱíÎë¥UûEéa:\87ÝcÑo\18|\8eEÃMueÎ\9bÜl\9aRÞS\9b-\ 4V\87)ÓÐüÍ^Ðêþ\1e+\8fS!¸^áTë\17\b¬ÁL´­jº-°·`¦Éyz{\9dÌ? Ù\v\ 1\9f\ fT¶&èB¡¥3\v¾\ 5\ 4wW­É1ãáv­G¾Ûe¨ä\8f®\9e¡p\ 3\97é/×\17¨\¯\12\1c«¡Y\85\ 2\ 3£AHýÞÙ\ 2\19\80ù×ëdzõ;ÝU|ñÜNȼ,èì\14Y<C¤Ó3c|6\8dûSÀ\89"¼Ëx\14â5%\b:&_\9bòA=­éR<\88\90æg.W¼2\8ec'\9a0Ï h\1cÙ8±s\vC{¡rÓ·\9fV\18\8fj\98Uß¼Yà\fÇá\9d[\8ek|\93tôëè_«ó©åendstream
+363 0 obj<</Type/Page/Parent 332 0 R/Contents 364 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+364 0 obj<</Filter/FlateDecode/Length 1595      >>stream
+x\ 1­WmsÓF\10þ\9e_±¸\1fê\18çbËï@;SBhÓá%\ 5·\9dNÃxÎÒ)\16\96tâî\94ÄeúßûìI~\ 3\ 3eZ`\8c¬ÛÛ}v÷Ù\17¿;ê\88I\8f\1fæ\9a:ø;\98\fh4    È(\8a\8fºþU\97F\ 1õ\86\14f¸3\1eãÎú\83ï\88\ e\r\83\91\98P\7f<Âó\0\1a«Ë8\81ÂÍG-;\98\ 4¢WË\ 6\90÷vXI\7f\1c\88ñ¡\83\1en\f>>XcðhjåÁ\88­W@ºã\1d \14\ 4=\11\1c:9\0±;\19mdw \1e2\bo»µÖ^\7fÇÞ\ 1­ýÞÇ~?\9e\1e\9d>\954¦i\8cH\ f'\1d\9aF>dx\b\9bçw2+Rõàxú\16b8\17#\16ì\8a~/ \93îD\ 4\93 .4mò\97\9a9JUNßÑ<ÕáòYbÝ3\95_»ÅUóêø!+èàÆ\90¥cmèªIõ¥0w¸ÔyHüð\88uT\8f÷ïÓÕq}\ fð¢æûÝ/D$ðg÷ÕßüeãÌI\r\88ÞÐ\9b=¿\v\12\9dÛÚ\9fqåv\93\92\98ÜBÑ\8dLKE:>ä\ 1µ2¹jQ¸\90ù5d\f\85ºL#j\15Ú©Ü%2M7§mV\96ÓJ\97\94\95ÖA2R^\7f\æ!Û§\10â\94äü²v`"Ö\919½]$©¢TëÂ{wútBþ\94ós\120C\11\8b¾\18\8a¾ Ki-É<¢WÊ\95&§ù\8aÎà\9fÃ÷X\19\95\87^ÿ&&\9c\81\89\18\ 4¬áü®He.\19Ï~8*!/3]$P\9f¦ú\16ÿQ¤nTª\veÈi|\89\93\ámèí\15\1dN\18\8b÷\ eÞ\eZ;,è"æxlßP¤\95¥\;ZÈ\9b*:\95¢¥ZÝj\13µéV\11"îEæ\1fDIÎ\11 `(­Ú×*¼÷I\ 4 Ö\990+Ú\9cÚÄA\19\8a¼\82\1c\91´\ f\ 1m\8e\1c¸Z\12|Dn\rµl·½~
+@À\rsÁu\ eÛE\9dx\9fbÆÏ `\ 1pB\9d\15\12v¤¹¾ùÖr~3\99ä\ f¼\11~\82        ¶\87ã\10&|Ø*\93|áÏ70Fï·hüËÎ\9b65
+\93Üè»U\83Ñ\90'ùN\8a\1ek·`\1e\ 1E\9d\ 3¤
+ ZÞ@ë\1eG\1eÇ\14\92)ÁÓ\fÌJæF\9a\95\aç\0K\19\8b\a\1fs»ð¼vZ\7f\81}\83\83ìû\8dKh¯\ e¿\96sÏ5è\8bì\95!\18\r\8e\842ç0Ç\88±Î\11e       J\98\90\91á\92P|ðåª\99\b%ØÑ\95÷\9eoôQ\r\ e
+P«©²öêXÐ\ f\86\825-Á\880\95Æ×\0²TU®R-£\99\fÓ\18uxÕÜ/Ð
+\18\85i\ 2Ã3@p\b­-¶\9d\8a{"óäÖ\87\91q\80ÎKA¯5Ú\82¦9Ä\91y4GÜß\rx\ 5\ 5äAg(\8cvÚ­
+\80¿M\90ÞFÁe\8eÚö\rªq\be\1d±}`­-²Ow\91¡ \172ã8¡Rò0-ѬØsû\9f²ø\a\17ûZ\9d\ fS\ 6\87-ÕôB\f\98z\9e\99l\8cr@ðÎê\12\15B\85t\vASð\96\9fÖ·\10¼\94#\17A³¿ú\.Ñ\86RÕF\15&ù5\9d\ ¸9|!\12®Í~ê¢Ä(´_î6\9a¬\92\85\ 3]Q\12"\8f\91·eÁ\92\1cí¡\1e\15,ë¸\v\ 4\ 2\1e^V\ 3-Ì 2\95ãZ²:v·\vn!Ñ\12\\92b rÏDCàáP¹áô\87\88¬\ 3ì2±\1eIbh¡$7/\1f\7f\8a\8dÎÈ®àpÆ$F¡ãhW¢®ÐÍôö\ 3¹êíÿnl\7f³ÎУ\ 4Ug\94ÌÄâ{LV¢Ó\16¢\ f·ñ\8f9,1\8fÐÖ7\19m\9dÖ\9eøa´QÓ@^ãäZ,\1a^ÉVÍÅëO¨Ø\8c¦Ï\8cë/n\1f\9f\aÛ¦98eÔ»\12\ 4¨r\ 2J©T1#\ 5µNé /\8f\10ùSN\ 4W\aÂÂB\9f\ 2{Àþ\1cmÒeª¤U÷¸»ú F\115N.D£"\95¢5}w\88?»Qf5£k­#@\96Vç\\ 6ÈBT\16©§©õÌß\86\9c!rÀç
+\934Ñæ\vm{\84¶mô\rf$\96\93Ô%ØZ^L¸óp\91è|Ïݯíá\97\ 6«\ 2\97;\8fDà«ö\82\97xTÆh\8c\1cä\82í£j=Ï\8dòã9ñû\11·"°Þz_v\86ÝïF\16¤$
+w§\fª\1eÉ3.Ö¼ª°J»B\7f¹ã8\17\15\94\ 3Îú\8eç¯q\ 4ée\f´¥±h&Fa5
+\15]¾zùóùÙtöSe¢Z` \ó¥ÞÙ¸u¡\93ûF\8dÜ\9eù\r1bÛ\8dY\ 3ã\ 6\eQ\86>ÅKBY`{
\89ÿ¡rã\1c\ 1ÛB\9c]¼8{öë\93ó'{d®·´\8d#\a¥x\91Þ»¥Ð\11cn\ 1\9f0\81\9a©è1¦n×ÿ\1e\18\8dð\83¬GÃÁPtG=nA\97ÕÒBO6Kãs\99\97\8b'ÝÑDôº\ 3:\19uüÏ\al²g:âÄýX\82\99 J5~ú£¾\18\rñs\8f5v{|÷|zôËÑ?O+Cvendstream
 endobj
 endobj
-378 0 obj<</Type/Page/Parent 345 0 R/Contents 379 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-379 0 obj<</Filter/FlateDecode/Length 991       >>stream
-x\ 1\95VËnÛ8\14Ýû+.0\8bq\80\98µdù5@\17óp\83\0iÑA\9c\9d\ 1\83\96è\98\8dDjDÊ\89[̿Ϲ\94d'\81ÓN\91@¡­sßç\æ\9fÞPÌGtzT÷4ÄÏx>¦é<¦JѶ\17\85¯"\9aÆ4\9aPZÀf6\83M÷`\e\ 1\9bá\D\94̦8G#1m\8cùM\12Åøؼ\19OÄüø\ 6¡Ä°}´^\92arô\12Ã6dp\8a\15N-4\9aÅ"nÝ&\13X\ 5ì\1fKä×9\r'Àß}\98S\94Ðr\8bR&3\1c²\10yHË´\9f\88\91\18\vúÓ\1aç¥ñîbù¥÷îÃ\84¢¨Á\ fâ)ðýÅS\99K#½¶æ·\ 6\92<\83L\ 4;íß\96*Ï)µEa\r=Ú*sdkOÊx]©ü@«~fÉX\8fT\v»W´·\8f*w«\vÁ\1e\874\88[?wN\9150xÔ\19ì\ 6\ fÆ>\1aÊl!µ!\99\1c
-GÒd$7\9bJíuÈË¡
-Yj/sýU\91D&¹ò^UHb\vpgx.Xm2àR\8b\16®úëÕ\ 5yKN\95²\92\1e\9e²/2E\r\9d\83³\91?©½ª\bÑ
-\8d\88\8c,\14
-ð;Änë\ 3/bîÓ)\Hæe»Û\1e,\9edQæªmö\90æ<\8eH$£\18}\1a\8b\19þÂÓ/\99Új£èîv±¾þøûÕb}s}»¤èå\14\a\9dÝ4ØÃî\1aÓV2Cg~*ÀÕú\86½\93­¨+       \94|\9eÈúu&À¾\ 1}\89\\7f×míÔZ\17ò^­sí|\80¾åÕ©k\ 6Þ\ 4\a°\1f$ÞR×\87ѸëC"\12AwN\9b{º-1å#¾UË`4\14\13®\8f\81\91 Ï ó¦\ 2\10¤\ 2£(çæo\ eäwªp*ß+wf¢ÿ_@Ë\1d¼±{2JA= á\86¥ÐEbR#\9aö\88µ½\fR\92\9e\83Cc<Ìp\84\8e½*@Xè¡® ¢6a·³u\9e5)×e f×Ã\96\97ì(åEPÕ)»m|\1f~\85,¤s6\85ÎT\16\f\ 5-wÚQ\89\½Fº\85|@K4´.\9df!X\82t¡ûmè\rÙR\19n2k6Í-7üUì6É-¨%i\93ÛôáL'\7fJ\ez\v
-äùþ}SÍê¢\8bÚÒöÛ«ÏD$D\b\8cu\14µ \7f\19t\12iÇ¢øm5\9dÙ\8dg³¡o\1c\8eB\80gûï(\99n!þÐø\94Ý37\9f¬ïöG\97P\9f®MC\92Ra\9c\12»¶\9b4éíàÈ\1eBß´q\18#³ÏÚò2L\ f\v_ilÝü\92´P\82çî\95ó\8e\9aé\81B\99æ\9b¢q¬Ã\9dÂýlif7{mk +[\84dʺ*-ïü\86Àaú\97 ½\1a°¾°À%~7|c\14ò\0.\81rPÂ\ 1ôSNUø\9a\89Ë)RCÝ\9a    k²n¶mXæèK\8aVX\81-Ëfím\16Mçb\14\8dqMÆb>\ f·ÚgÔj\9f\ eô\17V|\ e"WôQ\9aZæì~Ðá\aÓ!64ï     \¥\19SýªæË\vù\87ò\93i"¦\13üßÀ hĶ\8beïïÞ\7fnøpoendstream
+365 0 obj<</Type/Page/Parent 332 0 R/Contents 366 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+366 0 obj<</Filter/FlateDecode/Length 1311      >>stream
+x\ 1­WßSÛF\10~ç¯Ø\92\a\fÁgK6¶Õ¼\95\ 6\86\87\89;Lg\98!\87tB×ÈwêIò\8fvú¿÷Û\93dd\92\ 6\ 3F\96n÷v¿ýöÛóïGc\11MèéÍ=Ò\18?\17Ñ\ 5Í£\90\9c¢ô(ð·\ 2\9a\874\99\82Íb\ 1\9bî\8dm\ 4\99XÐt1Çõ"\14Qc\8c'p¸\7fÛ¯e\8bfm\88+¿Ï\93G\7fÕ.\9dD\131k\97NÿÅíd²Ø\87Ðs;¦p:\15\93¯Û/dÃ&² \8cD\8bÁ\ fKdý<\93ÑUD\11\82[¦@h¶X\88)-\13\9fì\98\96ñ`*\0\88 _JE\1fÕ¶RÎÐñåñGÚdÊ\90,
+g\v§e¥N\97¿\1d\8d®$-\1aGà\12\17!<\rÞn\8b\\1aYik¾o\16\8bü\9a\9b\94lí(S2Q®$       $µ\89ó:Q  ¥Î®èòõësª2µ£U]V\94¨8çEl\94Ö&fç0+\ fB\14´ÌtI\19n\e\85\9d6tyN\ f5_ÅNÉR\95ì\95
+[)Si\99s\80c\1az<\92\81Sú\94\ f:×Õ\8el\13cl\13\90l\9b«\\15¹jó\ 4\9cbÎp\ 4b: \89!      £\881y¥ÓD¥t\7f\1f\17y]ò_»1ÐK\ 6O0÷ïþÙÿðJ\99D§4:\ 3\14\a~èlÔ®\vPÒd \84Ø#ÄkµÑ\rX\99\ 2~xz°ú\9fãúë¿DУհÍ?\9c\88hæ£bRE\82n}\10ïmYê\87\\9d{\92]Y·\91\ f\95«ã\8a\95öì¡\eSV`\bWâ¦a\87\87í\7f³\ e\9c\9c\11¯Ê¤§\ 63\ f¤Ð\ 6|\aC,Y°ÄQéc:)\ 5½³\80_Ç>.¿@mcU\82l\9eÁ\94ê\1cÌZÉ\1dŲFç\18¥\12Ü)ÁÂUÁϾ\99A£³\97\vJgt«N@
+¹¶:Ñæ\91¤éº\10\99£ÅWè\11dèÔw\87v/\11IÇZß\0\rÎ\1eÅû\\97Õ\9bþ~mw0Äþ!\9dmw\7fø\15{"ì        7\16\93\86p?¡Á\ fÕg@\10\9d\9d­÷Zrüä\91\1d\1eÓÝ`£«ÌB,\1a\89ðl¸;õ:Ô!Ã0ù§\90A\10¤W~\82ô\18Ť\90n'ºÍ¬Éw´\91À\11¤\82vV¶Ú\15\80¼M°Õ\9d\96\94Ù\8dZ+ç·|î¼6OîÙ|\9f\8b\95\86»ÿ\ 3ÊV\97Ï\13g-çÔ(Ñ%T\90õ åcDA .Z\ 5\ f§\ 2Ã\12^ð_е2ÊÉ\9c.Á|$ýÞI¨.Òk¶î\8d\90a\b\17c\1e"Þ0\80\f×\18\1aÖ og`ûUMÛ¸ý|R\6\räöÎü°X©\16ÒLå\85¯*\84.\81Ð?¢W\7fE\91KÔ1O¨j#ÁHXI³ã\89Q´ê\ 35bH®/1 ¸¢%\10\8a3®âñðVæù1òp°\80ÛTo\ fëÕ¹ë\12<ðû\ 5\80BÌ÷\16\9eP\0J»ÖÐ\eÉú,ë¼\82h B©u\84}»@ö\1døUð\1d\96¼Ç\88[V8¦}\95\89Ó{¬¥\ 3zP¨\86²à\eN2Øy×{ijTÑZæµ\82eë"±æ\84\9b\83\1d±KV9æu\9c©Ø»f\1c­i-J»R     \14\91Ô\83?/<MÚB\96¥J\ 4}°@¿é\f\ 5õ\87WWª<m\ e\ 1ì®6\9f\8cÝ\98s@³\91;\9eîë>r\18\10\ 5\vºü\f¶oVÜ\86\10w\ 3>Pd÷\90(P\19\9fâUBw§øm)á+{0«\89\9a\82z;î\1a\9cUîYlÈW     x\e\8bç5\1f1z£¹÷ô\ 1\85ùÔ©a3àaãéâ½ÇÖ¤\89v/å¸ãã\17âÌíã½rÎ:@À1ß\9dvaõÂå\aÒØ\95\ 4\97|R\8f\16cñÙÉ£·\1eáWÚÔê\r\8d¨I\15\17j«+l\12ð\16ü±\8a;lFW\vè\95?`Íç8ÈOh6\8bðMÀ\8bÖ{§×v»Ã\ 1b­r/Î朗\9b\13Þ0\98Gb\12\Ðp>ö籩ètíºF+æÚ4Â6\9dCûfø\9aÀí\1aL¹Äo\97G?\1fý\r\8a\88endstream
 endobj
 endobj
-380 0 obj<</Type/Page/Parent 345 0 R/Contents 381 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-381 0 obj<</Filter/FlateDecode/Length 1033      >>stream
-x\ 1¥Vm\8fÚF\10þί\18ñ¥\90\88\ 5Û\80¡ÑUj/wm¤´J\15ú\r©Zì1lÎxé®}\1c\8aòßûìÚ\ 6\ 4§\12©:       öìÙÙÙy^\86\7f:#1\8fèôaÖ4Âßd>¡x\1e\92aÊ:\81\7f\14P\1cR4¥d\8b\19ö´\1fn\8fÀ\9eéTÄ4\9eÅXÇ31©7ã\r\12\1e?ÚØÉL\ 4Ml\88x\7fÎ)£_5¡Q\1c\8a¨  \9dLż\8d}-m8\9a\1cco¤\rÂ\99\986i\83\b\85û\12~Yàr\97\99\87\8fS
-\ 2ZdèÃt\16Ó"õ\17\1aÑ"é}.eYÙ\1fû\8b/\9dá㸠  ëQÊÏ\9cë\1d\9bAªlb¸Tº\10uÐ)× \9c\8a1²õ\1e^äv\973ñKÂ;\17Úä\eÑÜ\9d\1a\88q\14Ò \9c\88\19¾\11¿ß(D/{´Õ¨:W\ 5[\92X\19\96)-ûî\9c\11\r\ 2tÑE\7f½ø\9f\88\86oèSÎÒ2¥:©¶\\94´ßÈ\92\94\1d*K\85.IR¢·þ\85KO\eFú7ÃëL*su¨ò\aTpܲìcY\94ª¨ø]³%\fÐm\14\83ÃSý·Õ[.7ªXc¯Ï¿ì·\81mÕßÜÆáã\9c\ 2´(Ãmê&D¡ÿF¦±\18\8bPÐÏ\1f?úÃ\8cÎÉ\ 2\fvE[²\e]å)mä3£°U®\93§:áyû\1d\94hþ.\97\85<k{\v#zØ"ô\97E±´22A«KM[ùtÌK{\95çõ\93\83®\fªI¹FÆá!W\80J\16)ål-í\8cF7\91\80\8dÑ\ 6Õc§k\15ªo{\e \8fñ\7fß\ 5\ 4Ë\80Kz\93S7\98\a(,ÝÝQé8ð=üy¯?\9f\10¼Æ\ e \9fE<ä\96\97½ë¨\ 6á\16\90\16á0n\11þPØÒ1Zg\17ú:\ 3æÕ\v\9c\9fîO>\7fpYN\v±6-U\eU~_êkV5ÛÿÐ%_ÔÝ£Å\ 6\86ª\8c-¡õZóª îé¢Ý\9aLüÂIU2á¥\ 4³\8a\82\ré\12"t\10\155N0\81d\83%4Ü\9a\rVV\19N/¨´ìÁ\88\90+\852<Ï\97}A5£=W\eZïO\8aÙ\19¤,JN\91\1fÔèf\f\97\15þ\ 2]>I¦ë¹\8d'\8dsu/ÎÎ\8cÞú"wZÁeäJ;AæV\93ÜírŶap«s@\eAêN\98\91\0\90V\9c\19BÊûAµ£\95Öp°\ 2}D±ÖÂ4í5\14\8dÀ}§o(Á\96¦JÜ%\a?e¹\Ó\9dó5H3UÎ\19 
-oP§Qð\7fèz\9e\96¾Â¶.\8f\ eÞÑ7bèæÕ·#¼½¾ëMÚi³u4°~L\1cm       µ$Êr\8dl\ eÿô!{mÒ\83\87\16.\93e*Q \83h\87\86´\16C£¦¡,\ e'\ 2^\80_ðÞy\9dã(\8cï\v'%\f\19\83¢\84\19Jh@Rw­uÚ¥§BïsN×\f­Óýðþí[\81öÿ\86\ 1J\1f0/<\ 1t\961ltu¨ÏÍ]\82vF áiä\86^c\9f³AícÃÇY3\94\83x.¢`\82  \8ei?÷\fûdÔ³~9Ðû£\80~\97E%½\15\ fÚøA<Â\14vt¤{\9dº1ðk¥RöS×Ýw\1c\8fE<Åï!\17\14\8cÝ£\87EçÏοR"¨Ëendstream
+367 0 obj<</Type/Page/Parent 332 0 R/Contents 368 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+368 0 obj<</Filter/FlateDecode/Length 1802      >>stream
+x\ 1¥WkoÛ6\14ý\9e_q\91/N\ 2[ñ+~¬\18\86vI\8b\fXÚ5.º\ 1\ 1:Z¢dv\12é\92\92\1d\ fØ\7fß¹¤äGã \1d\86\16F+S\97ç\9esîÃ_NºÑt@»\ f\9bQ\17\7f®¦W4\9eöÉJJOzþQ\8fÆ}\1a\8c(.ðÎd\82w\9a\ f~'êÒh2\8ez4Äg\97z\88\18^Æ7\b¸ýhÎv\aÑU}¶\8fóþ\1e\ e2\1c]Eýc_\fÆC\84\fÑ\ fÞèO\87ÇÞhÀy\98õ­½É \9a41Fß@ØÛ\1dm\0¾\9a\9d\¾F¢Ñ\98f)õ¢á \8f¬§Ñ´Û£Yâ³ìÒ,>û\87./Hê\84ÜZ\95ñâá\8c\16Â->¹Ò*\9dá\7fq\91ÐÃ9ÿ½¸<\9f}FPA\13\ eÙ     1;ýn4\18\8d\10óìÎ\94ò\87pf\12Î\9cÑmJ\eS\91È­\14É\ 6±W\92\ 4%2\15U^Rlt¢Jet;\9c\ 2µf¾R¦rù\86ä£,\96%¥Ö\14T.\94£¥Qº\8cèmJ\1a7µ©0®$\93âKI\1f\90`l\12I±ÈsÇ0ºÔ\99F\1eÙ\9f×2ý¨tbÖï¬\89[$ÒRZÿ^È\9a\)JYH\ e?ã«^¾»õqèÂ-L\95'\174\97¤t\9cW\89\8f½\1c\1eÐ\83Ë{S\88\r^^\ 2î\ 2÷\1dãÇß\86\vq\84\9c¡¢\8a\17\88Íd\89¹ÊU¹!å\\ 5Î\1c?6ó
+)/­É¬(
+\b\14¾eÐ\92N\856\85\0q\9e\85ÌHG¸U\9eR!6\f_#¼±ò\90\99r!8\99%Ô.©4\9e\93ûÙõÍû÷à\ 40
+z8ÃÝÈ87"ù\ 4ÁR\95=\9cC\ 5Kªô¡q*Ç­¸\ 1¡^¾º¹»Þé\1a=ÇÉ=\b¯Ü×n\81:>3\90\95(\17[ÉÞ@\8e$\92\95r2©ÃMÉë\9a¢Ö;ý>¼\ f\92\87Ñ8\1a\80\b»á4Äʨ\84R\0c\92Ê\855U¶\80¢\ e¤xõ\9eè~\ 4è\95Wïæq\99\v-\18É!Ü=\85o5eRK+ò`äµÊsZ\8b@iíùÖ\1cDýÕÚY\8dPp\v\80\91\ 2\9a·\18[\8bÝ,êJÜ\1d¬=\89dÌÚQj\82s½ÊH\15¼?\955\18(gI\12ªt"-lªá©\1cuÃÏÒʲ'ùMТa\0¹\82ýq\96aÃ㮲0\85ç+\853\vi´$\99;I9JÅ"ßÒ\11\14\ 21\Ò\bY\98\15Øåbdh\876\13\10@\aùöhc×\82Û¬\12\19B\84ô¸[ +æÜÇb\r·\ 2ú^À@\98­\1dA^ñºÈ\9c*\96ìÆ\r\99B\95e\90_\92'\7fï\8d\9a{ =\ 4z\18¸f>E\96\15\88J|Mq\v\9bCíT\95®Mó
+\85ë{\ 4\19\1dÊ \82SÙeVxrÁaDû\ eÁ÷PùkD¬«·\ 2C8\ 4uØbö\b¬»k¼0\ 61Ù÷L¢÷}ÃY0d\8d06\ 579\9a£!ÕìÆÛ\16zÀ4\v
+q\1dÊo½Øøî\9cJtlÔü\1aý@ËX:'ìæ\e\159\8cè\ 3\90µr£3¸ÛR\vHlÙ\ 2\1f®D\93c÷ÐzZÿ«üÞj\1aô;s`\83mJ\10Y@\18nh\95«À\b\8f\9d`L\v³aĤhf:C\ fÓÔ\e\1d{ïÉy\8fú?63³\94ºS\9aN"ç¨\18o\ 1_\1cl]@ðÓëõýknç\9fe\8cjz8\v\13\86=ûûå\9b»\ f\9d\9bBÄîá¼ÍZÁKì§r³\94\18\9fÈÇp\8aC\9fèÄ\7föFmÄ0öÐ<òK¥V"\97:\96\14E\80Á\1d\ 4Õëõ\97\8f\ 2\ 6ØÆÔfͽý>øy\8d\e\93\84Ï\ 5sÝþò
+Cd\8d\a\ 2.\90Í0?\rC\ 1\ 5rJèÙjYþ\14Ô|®M_Etmt\vÓC=\92S\7fËO¥o aJ2\18?¾·\9bF0ü÷wã\19Ú
+Ga\96ëð+a\15\9a\93\88­qX$\1a\970\10?z\vñ\17\92ŤÅÆ\81F\8f\93s\83Â^/$3Ï®Ç\10r*Ó¨l¸¸ÒáßmþO8º\01ìªp\96\ 3\1fÊÀ\ 3\1eå·d\rÑâë¬3¡P\bÈ>äÎ0¹G3rlI*M!;O\11Î\86¥%îÒ$\9a×xÐrc/±\9eqGcÌh\1f¾ëq\9bD\18à'È_q\13
+Ãñ\10W\98\94\95cÓÕ¨TØÙ0\16¾QÝ#¤)ã\9c\9dk\v\9f»\aÖ\87\8a\9b\væ7¼mÖØ \94\96Çjèû\95½åô4\8f<lkP\8ag»Á6\190\80VéeFÚ\r\14(\89ù\ 1\10L\87\a\10¼w\fG=î\ 5\ 6H³Ç~µ@û\95n:å}Ãk-èG꾨       õk\88\7f<?þ8Þ>ÞZûé\12½k\8cÏn\eáj\8c\9e6Åþòm¸½ÑðìÚrF\1d6\ 54\83¥ýü·\ 6\e6\8f\9fz<@­0{±1«\95JÐC÷øì@k§P\14<nÐ\1e´\ï}Û¸°Àx`yª¥w ±*SZä\87Þ\83&\ ehPe\1aÒ     \ec\1dÊør±\8dÈ·¤ÀáMÄeÐôB\80Ïq\aa%/ý2oè\14;¢ï÷§XT\14Öc´]¾ð8=±\f¥~HóY@Ã[H³¿íì5¯4V5¸+7f¹\85\bº,Õ½Ë\82¯}¶^P*e\8eß0Ò\8fç&\14ø/8Ï^mÉ?p]\18ÑíC\86DÎE\9d-Ú<% \ 5÷\8eÌ\98¤\91ªVJY,t:ö­ëYg\1f\13t\94\1c£Êvv\ew\1dbB=üVÄ\8fÇñ4\1aô®h4\98D\93®wÿ;$j\1e7(ÿúmúUhpÏè;ÍùÎ8\1cÆ\12ð³IXÚ7\15Rà*ô\r~\88\9fÉã\11~\9ds=õ®øÝ\9bÙÉo'ÿ\ 21\11ð¢endstream
 endobj
 endobj
-382 0 obj<</Type/Page/Parent 345 0 R/Contents 383 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-383 0 obj<</Filter/FlateDecode/Length 875       >>stream
-x\ 1¥VMsÛ6\10½ëWìäR9)!~\93jÇ>¤¶39Ä\93NÕô¢\vD®,&\14É\92 £L¦ÿ½\ f\10 É_­;\1dI\14\ 5ì¾}Ø}»Ô\9f\13_Ì#:^ú[òñJæ eó\90z¦õ$0K\ 1e!E)\15[øø0:\´\8fð)Íç"¦8Ïp\1fâc|}\91çØu\17k\1aç±\88¬)¼"gû\14l\9c%"{\19l\98'"°¦QòÏ°aâ\1flÿ\85m\9a\1cÎ\15\84\ 1È\98\93½]<\91\87Ùõ\9c\82\98\16k¤,Ms\91Ó¢4\99òiQLc¡_ôûÀôuS)¦¡\93\ 52Ü3×ßhÅ\85\1c±U)ª\ 6³x¶ø<\99\14\ 4{D/Ì\807½Úuµl¤ªÚ槽I|b\92\82,\8c>È/\ 6ªgYÊUÍ\82\16\e¦¦Uú\añ®àN\ 3\90ji\1cªæö)F QW\83â\92*\18jwÞ)º\1d«\92ëªañ\98\9f\r\93Û®fËΧ¹æ\1f\888
\v\13\91ã\e\14«FѺê\aõIÖ#\13Ñ9ù?kL\9f¼\0\9aq6C»egò\9c\8dÄÉ6ÜïÍ\9eÁQ\9bjø$ûÊdàÄ\ 65MM¬5-§8ç©Õ9~K\10´^Ë3ËÏù\9cð?§¶.÷\ 4Þh ¼\8fÌ=ºÇpyF\1e2.\15ßqO{Ô£v<\9bª(4)Cª´n\12A\97\83B½îëGöíØ\944¨~,Ô\b\1d÷Rµýð¸@/\17\90w\ 2ص¨\15\88:`}¶WÞÅ+0Ç9¶¼]=Ü\14vo=6\85ÖÙ\80ó\97ÔÉ\9e\eÔi`C\ru\ e­bÞ\eÑKºå\ 6Ük*ÚR\8b²ë%ÜÑ#\90i7*²D\86\1fÑ\83k\ 6XÁ¸×Ð.Ði\8c½^áÚÈ-\ f\82þ¨ÔÆé+\12F\83¦\ 3\ 1¡Õ]´MÃ\86-zQ}eÞ\8b¾]}ƪ        rgu0;DÓȺ]!?\92\ 3\155Ëþÿö\85üÍTÒ»\90\1fLf\1fö\84Ý\17Ïl_Û\94ß\80Úrº<3îÇ1âÄ\15fN\ï\eô¸,©]?\18'S²¡È» \17í°&\8eK§!¡\8dCÌã0ô"hZ7\99Vr*È\8c'\9dôZ\ e\8aV(3d»&y¬ã tYÛQ=+â\17Ï\18\9b\90\0ª\15BØv;\19\9d(ìÐÁ(\82\1d$Èøz¼×3º¬\ 1\18n~\81\11\0]\89ÜXø\v\10³×ä]Ý\z\87#\ 5ôzfÑtg»ñæ´\14¾\94Þ\93à¡\ 5ÿO\85Îís#Èð\10\ e\12<²2\91Í\r³\8f}u×î¾Ñ%&T­û\1e%kFYë\ 3xÎÞË|\8cv]TB"tþs\ f\aÓàq\16\8b\1f\0m\14$Ú÷j1ùuò7
-ÛXÓendstream
+369 0 obj<</Type/Page/Parent 332 0 R/Contents 370 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+370 0 obj<</Filter/FlateDecode/Length 1796      >>stream
+x\ 1­WksÚF\14ýî_q\87\84Á\ 2\ 16àN?$©Ýñ4\ f7!Ó¤uÇ^¤\15l,í*Z\89@;ýï=wW`ðc\92Lk{\84\91öqî¹ç\9e»ú¼×\rÆ}º½\143êâ÷h|DÃq\8f
+IÉ^èn\854ìQÿ\98¢\fsF#ÌY_xN\809£0èÑ`4Äÿá(\18ûÉx\82\ 57\97õØá \18Ôc{\18ïö¹]ÑýW\ f\1d\1cõ\82Ñ7.Û\1f\8d\1eZ¶K½ñ(\bïï\a a¸Yý+@züÜ\877èa\e\87ùù\ 4\8d°s6¦qpL\93\ 4Ì\1d;L\93Ø\91Ð¥IÔ\1c\ 4CüÒ{+)\13ij¢Î_î\83l.
+¥géêéäÓ^çLÐÈ/q\18\8e\83£\1eMâæé2O\85\16¥2úÄ\ f\1am\ frc^\14R\94\92\ 4ae\91\92-\8b**é²i4\95s\89ï"º¹|J*q_\17ØRLSI_T\9a\16\98©c\8a\15ß)çÊO\8a\8c.å²$\93\90ÑÐD¥#Æ@Ø \r\18H\97\18¤Ûÿ\8dNWÔð\915\0ã.\80¹\14ùýý\ f,6Oj\18ØJ\ 2ÄT®\f>\18õW\ 1Ü¡«fKdy*k¦\90\8a\84\86Á ßóxÇcfõ<\ 1ÌÛ\98\1c\7fö\169óaKSH¾\97\e\ 5*
+*\r©\92@\8f¨ÃG®âfªlÙfÀ\9a\9fÚ¹©Rp)\13¥U)AË\14ìrÆ\91 \98\16JеçéÀ\91¸¥\9bÃ\1a\1f\8c\8f¡¤Ø©f\14Ð\ 4d\\14fV\88,\ 3\8cßæ\86\85dé ^\88\94¥·ÒæF[ÅiMLA§ÚV,,:H
+)\ fþ\93ºÀÕÊT4\17\10
+8¸Í3"ÖÐ\96\8e\8d\10¨\ f\ 3\ 4#<\90r.J\97×õ\1c\86}íÐÅm\92\væÏë3\965a,7~PR\82;¶VgM¾«¶¸iM&É\80þ\82ò\rGPVdb\19ÐGàfT"µæ\1e\ 3-\96©t\ 2\a¬Re\9cºË¦
\886\0n\fYct{ó-EB/\9frv0\ 1\7f7Ú|Ñ»Ø\84¥Fj¾\1cF¦ÊS$\ 3¥\ 1]a¬ ÆÌ\18\969§è²Yf\97O\e\1em&V¤%¤\ 2¦M\92 ,è\14)ìT:5"îÄÒ\17\17r\®ò­ºÄx\11E&ËLÌ^\80¥m­°\1dSù®*\81îa)"¾*äU¢R\14\ 1®ò²¹.ð(UÈÎ\154\80\1d[\91Í    Uþ7\ 5A@ÿl×\b\ fP\11-\8c\8aÉÇqoE÷¬\95ÜY`Sâ\9bâè\ 6}_\1c§ËHæ\9c0û¨-ráÄ\10Pjrð\18  Í\99D=Êe.#.Gp\ 6Ñ,T,k%r:Ö®`]!½ ¢Ò\87,\b\98Õ´\10Åjk\0\aj«hNÈô5ò\12Wùº¬ï\93þ\ e$TwÀ6oñ\1dÆÊF\85\93 /yÔ\99Ò\rªÐ3àÁ\9c\ e\ 1\89Âi\88«|]'@ÍÊb\9dp\ 4\10ÀÚ\83+¶°Ë&t\ 1W\\12æh\bHÆP®÷\84­¶u\88vç,\8d»Õ8 gqì²/\vT\84qµ{Íù¿bË;¨5\80\r¼ª5\16\8feáWÝ\89þÛûع7\19·\10Ò\83ð|è\92\1aSXè\8d,\1aÄ\b\u3&$\93ý8ÍçÂo\1fÐ9,Ú\92\14V!ç\\14\81½Ç\bü\vÕ«ÀJدÙÕ¼\16Pd\91,J\10^/ó@\18®r^\9brÝ\ê6Üä\1d¹jE\9eK\81-×>·\85\8a\11M\v\1e§   ý<BV¦+ºxsñþ\82Jd\84\r+ãÜM%\12\v¿\7fñö\9d\7f\10Ðó
+}EÁeýx\f\15\1c3\1cm*ë*«Í°\900\8cÂ\v\e\92üåüåK·\85m»Î\85\99é\ 6âm³ÂÎð\11UØò+\9a\b»\ 1\ 3\88cªá\18e\9fe\ 1t ­h.ô\f\91\81\84F8\1e~Þv">;ÿðêô\ 1^¿C\1e[\8dHjSÍæX^'(_&\aÌr\8a\1d \ 6³ó\ 4©ÞàkÓ\14\8cr[`?h}®Ð¨[¨cÜp\85ÆM\f\86\11UÖ²½´YB®þ\9cÑl\1d{:-rA\9døêt;ÏÁ;\9fÃfð;ä\ 2@ÐÄ\90ñ\12iÍèÃÇßÛÔ"Q\962\83y\81\1fp\95¨%µ:ôD%86ÐÅËg\93³7o_±\8bzBc\1f\13Z\9cdÃy\82s\92JêįO`¦x\1cÜ9ÃÓ7¸"ÀBÍ\94Æ\19QTå\1càP\19):]&\ 5¬Þõ\fì\00\8f\1d»nrá
\85
+i¡\ 6¤¸A\1fÍ$#\9a\91\vÉo¸\99QGú\80V\1e¯A/\8dLÜ@\bå¶Î\9dqr}"Z×\}\ f\ 5»2q§bî\12\e\va\81\95*A\89sûÖQZAó\90\e\13\8aþñ  Í\84\ fÛÎû \8fº\18\ 5¬\93\ f\12réç$\85ɶgm¹0^J\8eê£\7f\ fþë\ 2\1d\ 48ýÁ\85\91ð*;¡       4ç\ e×\97Ø\ 6¡4výÍÉ\1cÍ\9f\ fKÎäÖ\8d\89ÇÝ\81\7f¥p\87äÍ:Ð\97\9b¹\9eóø±\191Y°;\87Ï\9d\9d¿<}ýìÕéU\11Ù?þ¤\1f©±\7f\1e\9flõ³LèJ¤\81\9dei{Á'ðã \17\84!õºÝ^'Ä_Haÿ$ì\9d\84G°ýtLxÓ¡ýÆ\ fµÆ\'ê´þ\8f\9fí\15©µû\8dθ\9fÔ?'Dûïà\14\91Üß\1dÅß:g#¼;º·\89á\10oÂ}¼ç!Sx¯ÀQý¢P\v³\ÑO\9bãÆ+\17>O<\f\87ã \8f(\ f\87]÷ò1\bè\85\89¹\0~® -\1c\r¥å\81\ 3¼"\ f\8fñ\9eÍ+\86Ç|ët²÷ëÞ¿º'·Ûendstream
 endobj
 endobj
-384 0 obj<</Type/Page/Parent 345 0 R/Contents 385 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-385 0 obj<</Filter/FlateDecode/Length 1128      >>stream
-x\ 1¥V[oâF\14~ϯ8å)\e\85      ¶\ 1CWû\90mÈn¤4Û&¤«U·B\83\19c7\83\87\10\1aå¿÷;¾\10J\90
-ñeæÜÏw¾ñ_G\1d1\fèå\92Ï©\83¿Þ°GáЧ\Q|ä\95K\1e\85>\ 5}\8a\16Ðé@h{a\1d\ 1\9d\ 6Ô\1d\84xöñ_êvÄ`\80ÝæR\8bú¾/ÂFÔ\e\88a#|È®ïu\85×\b¿e\17ûu\ 4CÑ«¬~\1c\1f\bøì²K\9e\18¹õ\a!\8dgeB\1d\1aGÇiæ(.²È¥&ó¾\1f\93\10\82¾¿£'~\88ÌLñ{®\\91gØÄÃOX\83À{z¦]U\7fWõùÝøÏ£³ËþÖiÛï\8b\1eß\18§~¬v\9b\90\8eéÞ*òhªeö@:Í\14MUlPP\97(\8a´±i6§i.#E2\9b\91_ÊX\92±SùZæ3Aã$µ´\90\ fÊ\96:
-R&ÞfEÖAÏ\14\8eýv¨í\ 5ÂçX\9c\17Æ:\8a¤-¤¦UªÖ*\17t®]b\8ayòb#2\8b\85Ê\9c¥Dé%Yµ\94¹tÀK]9{
-[\b\ 2?ëR­IÒÜ\98\19¡\82\88~Ïñ\12¹¸4R\82®2\8añ|JW\14\e­Í\9a#B5òB#\97u¢2*ªôµ\89\1e`>£\16JÓ:¥Ö:Iµâ\87\99i\916f\89\10¸<Ú ZiLOÏ\9c·SeÔ{\ 18c\90\8f$b\85)§ì\92\v\8cøã\©\1fª\16\1d\1dl\16öU\vgj¥´Yª¼=Km\ 4\98\0M\84\1f·0+\16SxBG^Zl\ 5\8d2d\12©\19ûd±ý®5\15\17U,Cò\80 Fp;ð*0uEW\84¢\84O@Q\82\8eD\9cR\9aÍÐ)\ 4`_gÁØ?\1e=.\815É"{\89Àx\83Ô«\98¬Y(Ô_Ñ`Çúøü#°\87Boww}ó.C\ 1Àå9\89dƽy \93\95Ê7'\94Ëù\\ 1°w¦´\eìõåP\ e¨¢Þ\0)1mL\ 1è?`.*íÊ×RZË[yåÑ%y   \Iqª¹\1a\88\12\92\96ZêqÉa·]Ъ\aì\95w\15=ð¬\ 1e[\83\ f aô(\17KÝLs\87\86Ü\1dt&ðQÄ\9e\18à\8eZ3\ 6Ó\b±e<eè\11\9dÔ/E®'\¤ÉB.\7f÷{ý?èC\13\10(\94u\9föÞ\89èæþúú\94©ioëù}½\10ø\156v¹é\85Öö´\ e8Àä\80É<0Ü\9e,\9c\1f\10Çê\96\1cϯ¿\9e\7f»\9b\8coïGL\90¯õKZd\ 2ªó\83²ÒV½\16|ÃÑç/_'\17W\17\93o_î'\9fFãÉçÑí\e\1e}Oô¹¢»áÞ\8c~\eݲþݾ\81Fº¦qL\1eÆ&FÜUs\83^y\87¹®è1\87¥.\95:ý»&º³ËÝQíT\8eYÒÛ\91\ 5\95\83xV2Oå\14TÇ%ø÷yñß\aõÂPf\1c n\v\8c«K¤+çok\9bf*Ò2\aѬ\99\98YvZ\8eõ\8c
\ 4¨º$BÌì\86\12¹âÓ\a´\vsé<\83\92D\94ºØ6©>;xøAÏ8¤¸\83<1ÍÌ\vºU\v\ 33åB"3°*¨OFQÊ´\84´75§\83\e\8alë§\89÷\7f\ f\brT#»+ï\1f¨³\ fÄX\e\94H^\967j\ 4Î.\aõií\85!¾`\ 2ê\87\ 3Ñ\1f\96}ø%OWæqC\17\rËÓÏ2ÃyÉmk{áP\ 4^\8fÚa\a\14À  |#0\8f|*\902\1fèe\7f»!غ\8fï#\16òú¬;\1a\1fýzô\ f­2¾nendstream
+371 0 obj<</Type/Page/Parent 332 0 R/Contents 372 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+372 0 obj<</Filter/FlateDecode/Length 1476      >>stream
+x\ 1íX[OãF\14~çW\9c²H\85UâØ\ e\9b`P\1f\ 2\15·&¦ÛU©Ø\89=vf±gR_\12"õÇ÷\9bq.\84î\ 6UZõ      \83,{.gÎå;ç|ñ_;¶å5i}Ëb²ñ÷Áû@mÏ¥\8cS´ã\98!\87Ú.5[\14¤Øst\84\9bÞcÙÔô\1cˡã¶~¶[\96WíÖS®\8b[5ã\1e¹V»\9a9õ!ÉÆq«\e$5z6µ°Â\8fȱ\ e\9b\8e<˳\1dòC³Ð&?ا÷t[f\13\95sÒ×1Ñý~O$        ¥\9c\84¤\99(ÆÄ(V*¤\90çA&&\85\87û\83\ 3ÿË\8eMõ#H\83\90Í7:S\93y&âqQ\89ü\98\89¢à\92Fsb2|6{¿\7fv\7f\r¥\8a1§¡*³\80÷T\16ó\17\ 2\8drëÛm&¦êiN\ 5g©Eã¢\98\1c7\1a³ÙÌ\9aT\13\16D46El¾­EUO§,ç!)iÔèË\82g\92\17ôK)\1fGe\8e7R0GH\96$s\9aUÖl\17ø\rS\1dÏkSG*9OU\99Ã\13!Ïrí\94íÒÖ\8aè=\bWÆt\18,znû\97\95¶¹\15¨tSâæÛKóý±Èi\92©8c)á1Ê8§\EÅ\8c\84檤\80I`-\14y\91\89QY\0\1dÅv\990ª¡2JU(¢9VS)a¬q0\1c\9aæ¤"ór~}Gç\ò\8c\ 5Þ\96£D\ 4t)\ 2.\ 1W\ 6\8dõH>Fäàn\r \9eÖ{¸Ð{»´\9e\82\8b\81r¨6E,àUr\97ª-\8eª!úH\vö\8aÁð\12pbò\ 3 frN        ÓÐY\88µ6õÙ|{- k¿\87:-µ­c5áx`\85öí\f)»]â\88S\99ó¨Lj\84ðÑǾ\7fqsçSçú\13\f\ 6\9dkÿÓ\89Iw\85Y>E¶â\90í"E:I\ 4\9c\ f\90dL\16sí¶«îàì\ 2Â:§ý˾ÿI{®×÷¯»Ã!õn\ 6ÔÙ.ñ¶3ðûgw\97\9d\ 1ÝÞ\rno\86]@|\88\98j\83\9f\ 1\ 55Kca»°%P"\83BÔß\90\17L$ù\7f\fÄ×\ e^\810\1f«2\ 1üt±\f\922ÔÞ\0\98¶+Vèl\8bDÂa\?"©\8aÚ*Ŧ\82Ït@_\ 3Û³\9a\17ËÒÔ»\0E7áQÑ\88'\895.ÒW\0\ 1¯èJ\ 6ß*ãÞ\8dÜ¡uzÔ¨/\ 3«\86F¶Ý*\9f\ 3\ e\9cn\13\16pªÓ°Ô²\9bM»F§*/\94¬ÑU\87Èv\1dÇ©;M»]£»ag{,\ 6|*tFæH\8fã\7f\9f¾w©â½ÍáÍ·÷ßáZ¶\11÷Pwºw\8b0Ón d$bk¼»8Òi\99NHdY\96ä\ 1Ïs\96¡ìU¨0ÑFÌásT}8<T¤«ÅLe\8fX¿!\ 2\82ó\82\82\99sÙ½î\u\1fÆ\ fY\90ÿñ'ý´\1eºxø­;\18öo®OôîF\8f\11ZqDõªÕ×]Ûj¶\8cJתàÆy\8dÞQµf\9f\ fy\90 ¼C\1f$\17äÓ\94e\82\8d\123\82²²Æ6\v\178ÙÅø¬\8efñ4¯³,ÎwiÂb@\19H6À\ 6\19\8dP\10B\92Àr\90qSeu\89F\85¬\90\8ec\176{\96QÒ4\1c\1c\0³e\¥ûî\8aDìRÎ\ 3Ýï´
+\19\9f@g.\8bJmM2r\93=3t\ 2½ eB"Ï¥ñêÊ/ *\8eg¹:F_w\bè\99ÊÒ\88ÃPí{\16èÒ]\95\1a«#+Nâj\8e\13ÚlªU\89\125Ãò\91zÒÝ\136\84s\13ìûýßÿFÙº?è¦\f\ eF\ 1\87\8eù£\98\18ýÑ\eF\ 2îÛô\86ö]\fþ\81\95¦Òs\96\15Ë\9e\14\80\19M\ 5£ÏÐ\18µ7¬ë\0üh¨Õç\11\v\1e×c÷\a\16\12\92\83ܬ\90\88Ú"¢e¹ù¦\8fºOÌd³F¬®T4æLwï\85Áù\ 2P/\b¦q±çU\89\12¡ÝGô°ÂðÅÂFÃ\18ßaNHþÚôzó\12í´»×\ f\8fQʧ<A\ 3Ìê)\93%K¬<N\93ÚT\13Ý\96åZ\8e£I¥Ûpðï\90Ó<vÜcç\ 3\ 2\93xÔ}\9aÐÞ2k\8d2\8dïP&Þ¿ ÀÏ\8d\ 5Ç\ 6¥®\b¶®dD{\15ÓÝZ¼Þx9|õÆËßxù\92@¿ñò7^¾ú\9dä\7fõ\aÁ\e/G¯yqý\1f¼\SK4Zý¥©ÝÆ׬&¾5\1d\82\80\1aμüXóó²gÓ\95éÙºEÖ\9d¶g5Ñ\9aëmÛð\86CK\7f\14\112¦óR\84<\ 1IÈõÂÃö¡Õná[\99&\17N[\ f\9d_wþ\ 1ó]_\16endstream
 endobj
 endobj
-386 0 obj<</Type/Page/Parent 345 0 R/Contents 387 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-387 0 obj<</Filter/FlateDecode/Length 1314      >>stream
-x\ 1\9dVMoÛF\10½ûW\f|R\1a\8b!©ï¦9$©\1d\18p\f·Q\92C\1d\14+r%nMî2»K+jÑÿÞ7KRr\14\17H+\ 1\ 2)Îμ\99÷f\86\9fOâh1¢Ã\8fÝP\8cïd1¡Ù"%+i}\92\84¿\12\9a¥4\9aRVáÌ|\8e\ f\9f\89b\9aÎÇÑ\88Æó\19®\93Q4k\ fã     \1cî\7fzÛx\ 1\83Ö6\85}\88\18®:Óq:\89\92Ît4A\84Îö1·ãd\1aM¾u\eÓ(\99?ö Ïàa¼d2\8d¦\9d\8fñ\14¡C¼WKd}\1còÙEL\vZ®)\89Æ£\14\ 5\98E\93é\9c\96yH8¦e6pÞ6\99§\1fjoé\ 5]¿¿ºzþdùÇɳ\8b)%      \1f\1d¶g\87é,øXæ\83kãå\8f­Ñ¸3\1aÐ¥'å¨j²\82¤pJZò\86r¹j6$èÝå\9bwço>\90Z\93/$UÒ9±\91äÄÎÑÎ4$\90\82·;¥7|Jd\19\f`U\19»#\91ç\16·\1c/\ 6\98Q\94\ 2ÿ î>$tNÚxJÒÅÅË8I\9f\93±ðgÅîÆÛßÒø\13e¢qÒõ(>н\8b\ e\ 6ñ§èët\11#\9dFc\8eñÎ\v߸o2Íå½,M-í0W.³Ò+£93Fbt¹ë³¼\17V\89U)¹.Â9µÑ2\a\8a{Q6\92N]a¬\87±X{iOQ©¬\14V°¯\ eÐ\82\92\19×\1f\80\16Ð8\9aFtÑè\8cÍBE\9e\f`[³\18º\0n6K"º\16\15\9a£·Fá\85\87T|c5P¬\8c)¥À\15\17æs#Ý\83È=ó\
-@È\aç_êRè\0î¨\1a\ fªõ!ä\85´\9a\95¤º°ÂqÆ\ f#´(¶Á¦4\e\95\89\125\80µÐn+mo\ eMJæq-J\a\99\80\aYIíÿ\95©ó/¢ªË^\94_i~\88î\9cCûÌgÀöQ¾*Mv·,\94»\1dÜ>      jG\1a     Z\8c\8d^\eí\85Ò¬ ÑÇL.ÝG¹ºÁÃW¨ÊÝÞâÀEß2£´o\19¦$\8dèe¹eÉ»Zfj\rî{>ü®\ 6U,Ü=a\8fÈòû¹X¢Ér¹\16M¹§ükïA\93P­ö\11-Ñq÷F\81©j¥6\8dò»3\82¬Qó\ 3À£ÓÛBêÐÉ­\9e\8e\b\94×\8d­\8d\93g¡/öþB N\85!ën$ô:¥Ü W¹¡µ\84\1a0\rzÉê\9d/0 \ eݱ\97=\ 6T/ûQDo\95V\95úó }\f\80²t\140+4\et\8c9³ÚQãø¢oÓ®\9fþ\9føÛé\87Á·cÈ[\8b8¡>kS\96fËa2\93\10\94¡õxHm\1aV5ðin\81Jä|\b]Ê3\92í\99¥Þg£siÑ   :ïZð!Ðn`}_\e0\97·\ 3r¨Ñï\b\ e\0/(~\1e.~¢\15÷Æ\95rþJê\8d/\82¸Ã£§OéöIOt×+\7f\1dÝ\13Q\84ÏÑ¿\7fóý\7fÞ'ï5pú\ 6SG\96\10$¸ÇF\10wa\90ïÅÂÌ\86¾\91\ 2{\87\a0f3vFG3f)q\9fCç,@Þ\ 2\Z\ 3\9bB\8a\1c\7fó}\ f·Û,µ5\e+ª3P\126GÇFU«\12K\8dµ\r\86Kcó=\9a\0«
-<\a`Ê·âï\15Ü\8eþ\88~\96µÔ9\8bÂè£à[¦ßdYc\19tpÿ\b#Áý\19²¤Jm
-ÏI\a\ 5\85.c¿\\89\1c\9a°SÛ\1dß`\8dÒVy^ÐYq\14x_±³Ö\9bǬÜ\14\8c!d\95¡x\1c\ fµÌLUc³!Ê)´sÊÕà¢:Þ6a·\9d\85\ 2\a\f\88~Åð®Vá\8dÀÐð(pÀ\8e\96`&áê±l\11ô0\17»ÜC\1eû¸=£½ôú\r\9dg¢Íºkö#?\947!\13v´¯\80\ 3ka]\87¼Úu\rd¼¹Û\85Þ²*ù  \ fÉv\8c|+¤Þ¼\9bXóîU)\99-¢Q2¡ét\1e-\16arÝXuo¾ì \8cîÍ\82Þ
\88\92K5ìí\87³\18¯r¼Ýéµ       êyÓ¨\\96JË0ºÆ³q4ÃË\1dÞêòA2ã³çË\93_Nþ\ 1°\ 2^'endstream
+373 0 obj<</Type/Page/Parent 332 0 R/Contents 374 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+374 0 obj<</Filter/FlateDecode/Length 834       >>stream
+x\ 1µUßoÛ6\10~÷_ñÍíCjÄ´$Ë\96\95¡\ 3¶4Þ\ 2¤é6x{Y\86\80¡(\9b\9dLj$\95¸\18ú¿ï(ÙµÕmyêhX¶x÷\1dïÇwÇ?\a\11˧8>ì\1a\11}fù\fY\9eÀJ\94\83¸Ý\8a\91%\98Î!¶\84Y,\bsx\ 4\f\8b\90Îf,FºÈè\7f\92&,ïÐA\94d1\9bíEñ,=\11Ña,Ú?öv\92töI9!pëÃw«Ád\19aÎ2¬JÄ,\9d&\98/r\96G1VEk$ÂJ\9ca\ 4Z/oÌúå«ÕûA\84ñ\82ä´Ý\7f\e}\81\9bLÒpÂ\v¥EÕ\14\12ÃÚ\9a÷Rx¶\19î\15ây§P\16²Äý½¨«Æ\85ï©Krç¥Õ\18^\ eñ×éþ\v©\v\fQ|\8c1\94\8d\16^\19\8d\8dä\85´\8e~)S$Ù+wnMFøY>*\17\14\85ÑÞ\9a
+Î[¥×\ e¥5[ø\8d
+Ð`\ 2\\17àÎ\19¡¸\97\ 5\98@©*\89Ñ!Ò6\95{OÉ\98ó\10\en±¼¾¹ºýöíÕ½\15î·ß¿>uÿ\19åM_ý\90Åç\92ô\11\14ÎI¦ú\8eýKªº­\80Òmî?yúÃ1¨®:\93>Apc\ 4¯ð+·\8a?TÒ]\9c\ 6\ 5xþ0~R\85ß\`Ú\97P¹zº\9d\8b\93%\a%¯Ä¸cî8\89ØtÞÒâjÇ·5%¹4öXRa¶[©}wì?x?\8es\96äy Õä\vðxÔ\ fý³7,\ f<#Þ]\0Ë_n/W×ïnïCÅ{±\7f\ e|#\9d°ªn9JÀ»³¥ª*l%\94Æ\93ò\e\8d)P\1cõ¾º{õ¬É\9a\95Ô)\8e|ék\86¶ïVÜúÙªÆx\8dÚ(M\bxCü\86ÚÖÆz®} ¾^ÿ\97\8d¤µ±ë\föl8C\ e\ 4(dåd\1fß\7f£Æó\8dÕä*-J@\84×ßàÝ\1fç\90\8fÒ~8Ú\05 y&­5öмÿûÐj\ f Äôëyw\86
+\8cºì\9d\87\91qèòÑ\ eýêôæ\14\85x\1c=\9d÷ É\1d\12@F#\82\1eæB×o\1f\9ei\8b[ãe[áÉrѵÎ\19®K<Ip"QiªÊ<u³«¶\9cæ \90çAè6¦©
+<\90\1aµm¨9Eâ$Lc)\16\9aδ#¬¤ñFì\e:Y\95ãÂ\88&4\e\95tH&\1e\b±\96m\1dÂÑ1]/tßd9\9bÆt\83\85+.i;ïG«\1eÍî\ 3ÞP5+S\13ÁÞrÝð*Ä5>è\8f³¨UN\19.M\11Hó}£
+Y)-Ûé\9ff)Ëæt\97\86^\8e\17\ 1\1aü4ø\e³fö;endstream
 endobj
 endobj
-388 0 obj<</Type/Page/Parent 345 0 R/Contents 389 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-389 0 obj<</Filter/FlateDecode/Length 1226      >>stream
-x\ 1¥VkoÛ6\14ý\9e_q\97}Xâ:\8cå·ÛnÀ\1eí\10 \1dºÕ\180,EÁPTÄY\125\92\8aã\15ûï;\97\92ìÖM\87\ 2\8d\ 3[\12ïãÜs_úûd$V\13:|¹[\1aá3[Íh±\1a\93Ó\94\9d$ñQB\8b1Mæ¤Jè,\97Ðé¿XG\8ch>\9a\88\15M\97\v¾^\88\8c\13\18Ü\7fu²³Ù\f\ 2­ì\18òÑ\ f\e\99,\96böÐÁx
-\90\1f\1fô\18"\9a\1eH"\92^r
-kÑø\ fkÀ>\86rù|NIBë\f\11Î\97\v\11ê\88ÖêìÙ½,ëB?>_ÿurù|D+\16KÄt2¦\8bñL,ñ»NϼùG¿\r\8a¾¥\9bªÍ\vãÃ\v\86üúìúü    «\8f \91\889ËgÖÑõ\19ujª
-P\e=!¾xÊVÚËG\8fèú¼ÓL\10\1ak¾;º'"\81¿£§ÿòý!¬\8b\1eð"\ 2\87\99g÷J×ÁØÊw\91M;\ 6ÎÈd\14rMw²h4Ùì¡phPÊÝ\80T.«[È8R¶)R\1aÔ6è*\18Y\14ûÓ!\e«hg\e*\e\1fz\9c\13\11yS6ÕÑ[ÖT\8aá\90\822\99ª}hÝå67\85¦ÂÚ:Æxù|EÉ´MÕÅ\ 4a1'S1\17SA¯¤÷$«\94~Ó¡q\15ÝìèG\ 4\18p\9fi§+¥?d\85óÁÉ\ 6\19u!+Éþ\8fØ`\11Øf¡un`½(ì\16?\94ê;]ØZ;
-\167\99©4\9eªè®¶¦
-8a(1\1c\ 4ï¨\8fPÐUÆt\1c\9ePjµ§Ê\ 6Êå]¤ã#\968\8a\8dÞm­K\87´Õ\ 4ú£Â\r¼Þ\80\1f\80h¼þЬ\88Ñ\9b\14H|pª¬\87\9cZ\13 \8fVh1§$ýcÒ÷\80[\81õãô´z(TdÚÑÀ'Ãþj\8cÊÜ\17uÇÐUW\ 6\1c\ eC\82?\80S¶¬%¼Jw{÷\8dçü\96ÒT\8fÙe¼\82\v¾Ä±\82\8bÈbë\92\15þ|\ 3gô®\8b\ 2¢ñáèÍð\88¦ÓÚ\99;{¿;el\14[à½üý`CÎU\ 5L]\82\90G@\1aDw\83¯8-\÷\8a\\83\1a.QtæÆI·\8b\0\ 3àjç\91*D\14SàóXóÁÚÿ/ÌÙ\83\85ù;w×\97\94ãK\8b\92@~\1a\85ZGù(Y1å\19ø¶\15\18\97¨\ f\ 22Rm\bm\89H®Ï\8cÐ\82ÃÜÅØYc\8a>     0\80..´÷×ç\82¾ßÈ!\fô\15{DsªU!]ì\16P´Ñm\16\v+Ó·R\15\19Ú\95'[DFª0ðü\16\18\ 2\98õõa\9eõmµ\8d,2\10\14÷FÐk\8b\89a  \85ÍyÁ\10\85þû|·ÞQI\18\13µ³Á\86]\rô[\83ì\9eÖ<\ 1Ðöqv\9d>\ 4ì(\96\87`\ e\ e8?9mæ\82~\91\86\8eªTÑ`\8cqäþKRú\a\ f\85ÞZ¤¬Dð\9eºJ\ 3\1f\\85ídä¡X\ 1A\fÜ6h\1dªeÈ\ 5­QÂ|Õk\81È\82YLa\99U\8f\bx)7\18^\85\1e¢YMuK\17W\98\bL¬B- $Rã4\ 63\8f%K^K§b\13ÁXj\14\92\9aFg\1e5Sa\8ct;\85e\ 3\8fË6¹\80ÀûÎÛòØ;ü guà.ó6\v[nÈ\90K\8c\8e`
-ìT\1eµ\18\1c¼RÚ¨`9E8\80Ú\18\1f¡\18\96<åb\ 2(s¶$¿CÈ%×4º\1eG­ÄQìQ¾kÞÃ\vÀ~à\7fÞæÿºOØS\83\8etZ\96"ÿ\ eK\99èr\80d\80\ 4üsyK,1l\83}\82\a\97=\9cn³ï-\9d\99¹\15ùi´s°tõú\13V>kÓw«mÙ-úd±\12\93d\86w´±H&¼á^µã\93~Úï¶\97²jdÁ8/zñ\8bÅ\b¯@¼s±^R.\99\9f\eì\98\ 2ã1\16ÿt1\15\8b\vY(Y²î³õɯ'ÿ\ 1ô©\1c\92endstream
+375 0 obj<</Type/Page/Parent 332 0 R/Contents 376 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 4 0 R/F9 5 0 R/Fc 7 0 R>>/XObject<<>>>>/Annots 135 0 R>>endobj
+376 0 obj<</Filter/FlateDecode/Length 922       >>stream
+x\ 1¥UMoÛ8\10½ûWÌ1YÔ´õ-õR´H[,°\87nâc.²4\96ÙH¢\96¤âøßï#å¯Ôm\81ÝÀ° \89\9a7\8f3o\1eÿ\99-E\11Ñù¢\e\97\14      eEH\9ai3\vü«\80²\90¢\94ª\ e1K|tº¸\18±¤4IDLq\9eá>ÄßǺ\858OýõÇ\85K\8cû¯³ *DHq\9c\8b\9c:
+\92XD\87§\96\1ef\97ÏXÍB\91\¬º4Q\1e\87ü\9fV³Å\97\82\ 2·´Ú`#i\1e\8b KiUû\1d,iUÝ$\82Vl¬ì\eú:Ê\9a[Ù³¹]}GhN\87¸y¸\14Q\9a îf¥h\8dºÈ¶åZL\9f!C\0B>Ã<\8c\ 5J\85\ f\13\11LÈC[ö´Q\1a5i¹4×àA!\8aeìb>¿àcÙ\1f¿¤~ìÖ¬\8d ®ü®ô;êd¯´ \9a\9f¹U\ 3\9f!\ 5±­<\1d4i\ e@Oá\9e;õÌTö{â\179íQ\ f\1dí¤Ý\92»\99³ÛÁ\1cE/R\94\a\fÀÙ½\9aÞÌ\vájus\81\83\8d3ÙmiiW\1ajyc    )Àiµ\95\86d_µcÍ\86\1eoÖ£%¼é\95¥VvÒrMV=Þ:ðK\8a\8bçR/ZÕ,\ 6-\9fÕË~ªh5\15\1eÄ\96a<\11{\f\93¥§vjË´xä¸@\ 1Þ\ e2\1a½0kÙ¿\1dÉÑ\91½´¢~;\96cU«Óöþø\ fE\9aG©È!È$\9bZ\19¾êo\9aMBù³7¶l[4\96\9d.\ 4}t\92Ñ\1a¢íØ\98²aóÁ%½TJô
+é \14ÀhûÎX5àRÚÑз©¯\93æ\1c¾\19¸\92\eY\91©´\1c,¤Â¢\11äû§+\94ËUíX3rP\8f·\82îy­ ¥½\1aA©¬¶\18RAw
+R+G«|ZÚ)ýtE3þ\19Í\aG\93ÖZí\fæþ\0tbê`è/Õx­ï´´\96û+\Ø\86«ÈO\aåwe¤\8f¨³C6\98r7\9eõ\15t:A{ë:\18Ë<ÌD\0\8f¸´\17´Ò\19\17`\ 6¥í\95e\9d\9b·\1d\1asHö"\86TßîÏ­ñKpª\8e\ 6¥®\18O\r*½ÚjFëd7`ü\8dåÁ¼w»¿\9cä\a¸[e©*-7Jïß{1Õp\1d\ 5Rõ®ySvÕ\1f\9có8ç\89Hóã\98§Ùë1÷kÇ)?$i´\1a\87)\ 3ÌÇ8pµ9Im²'ø\1e\ e¡r­`DV\1d-õÿ&þ\ 2Ã÷;z\18»®Ô{\98jMwlKtÒÝLbvD¼¹\1aÕ±\85H\eX¢å¶\95\r÷NêOÌ\ 3¡   f\8b\96y\8cAc\1c\fC㯧úw%\99G8\8e³Ïß)ï³\1dȸ­:ù¹{\97¾E\ 3\90wÇhLïÌØ3°º¬\9eÐ|8´\19¡DDè3\85\1cçÙá4\8b\8aP\ 4©?\9b~yNÆ\19\8e¼cÿ\82Âmãójö÷ì_D§`\11endstream
 endobj
 endobj
-390 0 obj<</Type/Page/Parent 345 0 R/Contents 391 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-391 0 obj<</Filter/FlateDecode/Length 1057      >>stream
-x\ 1­VMsÛ6\10½ëWlåCÝÄ\82D\8a"¥N§\87*vëN㨭29*0   \9ah(\80\ 1HY\9aNÿ{\1f@R\8e4n\93\99vlsø±Ø}ûöí®?\ e&l1¥§\8by         ~f\8b\19%\8b\90\8c |\10øW\ 1%!McJ·83\9fãL\7fqgØ\84âdÊf\14Í\13Ü\87\11nýa|\81Ã㥷\rglÚÛ¾3í=zß\9di\14NÙ¢3\8db\16ô¶Ï¹\8d\82/v\e$3\16un\83\0\ 4ü\9bß \8eÙü\1cî\ fëÁøfB\v\14°h\1aR\8cÜgñ\9cÖ\99ÏxBëôrü\82Ö\85´\84_¥kâTê\94\97$UZ6\99¸¢û¦Fä\8f\8d4ÂâkÅë\82D)¶BÕ\8c^\8cé\9bõ\1f\83     \8d\80Ðù½¼è\ eÒwö`ǹ,Å\1dß
-V|ïìÆ71\ 5\81Ã3j\ 1\8dÂÄ\ 3ÃÁ;]\8bo[£¨3º¤U)¸\15_Q¦[pYFÃÑ-\eR­©.\ 4½æ\1f\84\8bA\8f².4\90rÚì\849lèAë\f¸¹Õ\8aµ    fMUÊ\94×HÃ\1dí\81öø§,tø\87Î\1d+\86t/
\93Ú°\16Ó\82\82È\ 1GªS`w¦\11\8bYÂheôNf\82¶MYË
-X<\ 3VjE\95ARi\8dÛÓìá$L\9c\8bë}UrÅ\9dÅYîÎ$nã¬\8cØ\81mK©ÞV@g\88«\8cJ©>àV\18£\8dE¦Ö\85W\ f\94\e½Åc\ 6^\94t\8eIç$k±µ>\93Oü¾3¼"ÁÓ\82
-Á3ø:2é ÊuYêGçÒ\1eTÍ÷\8eóª\85òL®Ö\85q¼zþèM\ e´\8d±\10\90\11È1\15g<¯~{óóõr½ùÉ\97\8e\ e0nã+Èåª}9D¡\97\ 5W\ f"sÁ\87\9bá\95O}\8bª#%jªJ\98\14\ 2éjÔ\8bë\93\1c¯÷|\8b\9a\9e\b->GS \f\172W \8c\8e 6·wË_Þ¾º~Õ£îÕíi\15\9f7$Æzº\8f\9d!T&sB¿ýC,tÓ©Öú&\99\86}\938ÉÍ\19½µ\82Þ\8b}-\8c¢árø\9e\1e\v¡\88WÐ[e$$þ_äv\9b\93+F«     ´<F_×ÓY+®åË\97W®Ô\aÈÀÖ\94\89´tF¾\82\8dòrÇ1{\82°ëÁ\ 2¯\95\864pN*Z^õüvÝç\86\r\82¹¾íÚ´B\a©Zb"\191j,¿\97¥¬\ fNl.^ª³ÿ£ø®ö\9bMZ\95\8du\7f=¨®èOD\9f}øóìùâXá3\87]e\9d.\ 3\16;ÅA\1e\94wd\81Á¾W-h\a\95Oâéí¡Ð3\9fg±ÿ:{þ\1c\96ñM?Ñ\9e\82Ñ;\8fe¥­\95÷%zÒ©îF\9bGn2ú½6MZÓ+_{?¿èVÙ\1as\ 4¥é¡¸\9d\84\oÛUâi}Ú\0\8e\8c/\9f\81\88\9d7n+\1duY\17ÜkÅm)ª´Tè\ 6LvM\1aÒ4d=À¯-£×\1a\ 6?f¡7\10ûTXÇôqèYÚò\ 3¥¼±çcJ     \91\95κ\9b½í\10=Í¢\eÓ§£fÞí° Y°i0Ã?\1f!\9b-üÞX\19¹Óû\ 3ÈÛ\89Rc\84a\8d©\86\97\8e¶Qo?J&XÜnÉÐ\12  `
-ÿØ`Ë`ê\vOd\94D,Á*Ç\ eÏ.\83\85;{½\1eü:ø\eð3\9fÆendstream
+377 0 obj<</Type/Page/Parent 332 0 R/Contents 378 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R/Fc 7 0 R>>/XObject<<>>>>>>endobj
+378 0 obj<</Filter/FlateDecode/Length 3185      >>stream
+x\ 1\9dYkoÛÈ\15ý\9e_1  
+Di$Ú\92ß.ZÀÛÄÛ\14H6M¼Ïº\bFäHbLÎpù°¬]ì\7fï9wf$\91În\81"\88-Só¸\8fsÏ}ðç'\87ÉÅ\91Úý¨\97ê\10ÿN.NÔÙÅLÕF-\9eLåÑT\9dÍÔÑ©JKì9Ä¢í\ fîI°çü<\99©ãó3|\9eá¿ìå\17³Ã³äôñ\17ççØ\16\7fà\8c£S¬=\9f%Su|x\92\¨)¤ò\87|uó\85+\ f®±ä(9W7\vÈwz~\9cLÏNÕM&\82\1dª\9btt\9a¨\ f¦0ºÉíRiõάÕw¦nrg_Ü|~rp}®ÂæÉì09:=ÁæÑ÷+cÕÚà^n4êÞoh\94[¨÷u~ï\1e6cåºZ­]}§°æÞà;ü\9dº_6ª1imZUè¹Ò6S+ݨÖù¥¹UíÊ`Y\91A*]|ïê"ûw[þ'QßØÔ¨¼Uy\13¯ÍÆ\94ðPM.`8H\85\9d°&¾·8Moxhª\8b\82\9bæ:½\e«Æ\85\ 3 ïFåeåêVÛ\16WêV-k\83\9f©öG´ú\ e\ 4c\9b\ e\8fd\89á¾vECÕ\9dmÔ"·f,:X\87Spºmk\97u©é\vVÕn^\98²Á÷¢\9e\_è¦Uen»Ö$aùô\ 2Ð\80"\1f!?-ìÍëýbá\97`汪¼Ùu&\1a\9b\a\9d\85èKãá¶Ôd\14Úum\ 1\113\7f/\f\93®tÕ\9azxß\rv-\Q¸5ïÂþe­!-MQ\9b\9f»¼Æ\11ÐÎ/\81\ 68I.i\9aKåA\ 2H\12a#\9b.ÚªêZÿ4@g¤ný\17·/Æ\83õMZÁ-ÍêÑz<{¼zYÂ+\8f\96~ýîÛçM´\r\11ÈUØÌ\85;pè®u©³\8b±Jï\e1\80\84Æ4\ 1 \19\1a\93Ùq\82Ð\85õO\93i\12C@Ù®\9c\ 3ܽK±\18\9eº8<æêë¼\86\1f7®SÖx3e\ 6&\86c\r\9c\98§«­dþ(\ 1@\8c\9bu\ e\10\1dI\f\9bÁj¸ÌÙ&Ç\rЫ]ÕÆD\89`6SéZ·¸t¾éë\9a¹¶\19«"¿C4XõCòcò\13\`\92\8e\12p\r-\v\80Õæ\92ûÀVÔGtÿa\1c\ 1J\ 2\80%?»z,!\a0\0b\8c\0¢È.M\96¨7\12\8d¹E8\83\ 5(\87rP;\87¨]m=n3l)\U\1aÄÙ¼Ö\16\ 6A\948Õ´\1a\9an\8eO¶Í\11¨\ 3-ü5à\ 6¢³³i\v\89t\91· \96®\81\188ÆÔ\v\rVp$\16»È\97\1dìA¹\9b\8dmõC¢ÞRþFM%Fg`, ú\9f\9d½\9bw\röúÐ=Râ\859c\1c\17\89;½p4Îd\87 @l\91}\ 2\86R\8füÉIrz®¢\19og§g\ 1é!\ 6äëÉì\9cL\9c\8d~\1c\989·4smªÚ40\94×9Xk\9d\93qD8qGDH¢®ZèµQ\95\83%$Äó\12t\ 4- %c·]»`r°ïÜÀ\1f}\98\94\1a\eñßd\97\8a\14\10\âï\ 5Bp1. Ï\81\ 4/b£aýÙ;@\ 2ü/è\ 6×ö\9cC°È]Jg\190A\86w\16Ð\99wËÉ"\7f\80(\90m(H\16xtöîåÔÛæ1nö.õ\90¨©ªÚ_¸K?\8a\ 4\ e\9a*\80\8f\ 4ÚA*c\89¸\ 6à!\99\11¡´ÕÀÉ©Ë\8cêª&ǯ̭­È\9f#\ 4ñ7è\94q\93\ 3¶È\14\94¡Ñ%Ì\f³\93\ fïóL \ f\85£e}\b\ 4»\ 6ö¦4ÆÛÓç²\ 6¹\10\ 2ýbj×7ËíÈ\e\ fdÆpÝÇ\0Ô\91°cX1\12%!ë\9e-\ 2|\98]K\rm=9Qj\ f\18!\0æÃ\14>&úa\10¬ap\ elâå÷nabîá\ 4\1aË\9c(é*ðL\9eÀâ\80EáÀ\12õÖ\16&#íðþ\85«Ë\81ã\82°t?dI]     ?q)²^ß&û_Î|\14k.ý\92þ8ò\88\ 2ºÊ@½/\ 5í   ë.\ 4åï\ 5íé\99çÆ\9f¼ôÞz \1cPW\8cÅ^ìêÈ\10\9e³\81\12·h×\fÈ\10Ê:De$P(Z\e\18\85l\r*õ>EyR\9a,\a¿3väë\81[\8c\ 6\97
+^\17È\v¿Àèoì\17,`\90
+$\0iO\89e¯A\80#3L\rÚ©\1cp\v\18¢\94èt\11UÀ^\ fxnv\19CÙH2ÜÑbfPüxò4÷®¸'æá%<\92\94Eõ»:\85?ÁË\7fÿî#\99cnÚµ1Vô÷E\ 5½\8d\98úI<%×ĵûáíQ\82£J'\19q`\10ÊÈ`\94\b«Á(\0÷Ò\80Mw\19\8a
+\ 6F\véø±\99Q\ 4ïYÕÃ+Æ\9b¤9\7f\b­áÏè#T/A©=ï\89\7fõ\82\85Wd"Ö\94Açy\97\17\19jÉÚ\95¢scuÕ¬\90Á\85ÃY\97\ 3\0\19J\0\18¶Ë\9b\15bTÖ\86\1a"\8b\18ôEÍ^¾º\819z®~D7{¬Bz\ f\89Ý\1fä\8b\1c_\8eúT½µ¾\14õ\1aõEÛ\82
+³|±\0~-*PÔ$0µ`\ 1`\86\12\1dØ\ 2Ô\12VÂn \85}\87¢\1cEX\1210YÓ\ 1Ïñ\126%¥aí%uÜ\9eZ1\99H.\11xb\e\13gW\82ßÑ]økYU¡´\ 2[\81LTkÄ~!\90ð\8bw\82fJè@þü8T\91\85\19üf¥:㧼î»9\84\ f\93\b&ºP$êP
+³ÃJ\ e¹iÛC\8dÆ
+u9¯\16´W¦Î\1d\r$Ñ°\r\95\907öòi@\10ð\bknCOÒ\11\9e\11·}1ó¡TìTÀ5ñ¶¾|\129Èy\9e|c\95j\8d®A\ 40BÄ\1a\914ïÊ\8aj§à\ f&¾KÅ\ 2Ó\9f·µ\ 1ËÍ©\9aüÍ\e\83\1fød6¸ÕÿÙ«¤.~\87\92'GhBg(X§'\9e\95Áyð|©k \8f\122õJ\1cµhÑî((\9fî\83\1a\9fÿ\985\16hü$\1ew¶&Ä¡\1c(\8b¶â    Ö<´1ó¡úÌMã]AÙwd\18À§\va(] \re9D\97Â\8f"\1f©\v$\9bߣ\92\1dV)\\ 4\89Ã>x\95}\1ej\7f\14ÕýÄ'\fÀãDË1M\8fØZûöö±\ fúö\1etF¾\8eõ\12Y(­%\ f\87{c¶\b}8¯Îmβ]ýY¦\18¾#\8d\94¿\1fNÒàÏÁ÷(¨Ø/c¯@\fy²+ð7¯í[\11¥¢¯\14%L¶\91\!\à\8c\10Ê;zÙƱÔu\90¬g«\9dÄ0.=\8c|Õ-Á4ÛK\9cú\8c~ _lÀüÄCP}`&ª\1c\83^Ôd\f\84\86\ 6.ó¬¿\97¿_?è\12}ú¥o¹"ô%\18$\ 6à´6\15\81\b"\87«C:Ø+ýû*õÍu\84\86õ\81¸I;dr\12±G\1a#!à\83\85¤Ç \907p}\94Ìü&\14Êd¤P)¿Y AnÔÏ\1d­\8cÖs;k¨\88[p\ eÍ Ñ\ 4VoB\9f¿\r÷]\9d²ã¼H³¸¤/6ÓhÔÛ\eòiX\10Û¨W¾wDÿ\1dY\9dÕ\11\93\ 2$¡(\88\106\9b+³  ·àDï×(jÏnÄ\1eÌ$ý^Éz\v'Xé\93a²0é L¡±f\85WæM\1c\85í¢<\98A¨&\18x\9bø0\r#ȶgì3O\8b:\8d×KC\87Z\b\ 5ÐBF\aÜAÇÐ\11ðÍܵ«\10'^`I¤[\ 1#- ¿ë[t{iº2é\1dû\95Æ×ã\9e\15½¨Ürp½u\19\90á\9fl\875ôp\1f\8e\ 1ç1Ù>Ê)÷\9f\8e>\1d~ò>\1c\1c&\99      ¬\8c$lÛÛ\17ÿcð2KÔW¾\12¦\10\1fütñR]K}Û;Ù\97'a\ 6s\83ÅÛùÕ@¿\12¡M\ 6&÷Ä\ 1E`©à\9aáxg\84jB\88\ 6Ã?\96Ø{\94 âïÏKÞ¢Ë\ 4L<\94Z\19\8flæ.Û Ø\9cðÞ.\91P#©+\19\95ø,ó¿Ôuà\b\193\ 5\9b5Ö,¨@\81LVRNm\fèá\99uO\9f±HJ9nÅva̽ªHH\12µ\94´ ¡v8ð$êïËkUå\95á<\10\99ëÊ\82\ 4\86r\92í\ 3§£\12QÖy\rX\ 2ù\19\vÓ\92L\ 3öf\96½bñàº\9f¼ÿ¸¡\8aáý&²¥Ø#rk¨ËoG¾v\95LÇZ\e¦\90î\ 5êìÇ\94G\9di\9e¢IÆWÞûq\1c\19§B&Ém\ f\ 4\81ñáý[ÕT&ÅÐ\87s\ 1¡\ 5\ eñ¸²\17ì\80Ï~g\ 6'­á\94äö\85?óÿÒ}1\1053\vÝ\15mÂÒ`0z\1f   .¼SQÏJ\89-\9e\889:ôÜÛ>3>G¶D ÛL£\15\a-ÉÉ\9cZ\ 3qa     [r\16rìÜóVjÅ=PE\97äv\ 1l8u\95|E\e\v'\11H2><¸Æ{\85ä\8cSÔir,µ\19\86\89\17\17\95úõ%Æ@\93\95Ñ\99©\7fýaråe\98\C\86Éwþ­Á%ÏýMa8T ER\13ë&\95«0\83ù­ç²I8]ÞBHu\88°G@È0²\87 \11\970qéÁÚÌQ­A\91\83 þAn3ó\90T+\f\9eE\aõüOqÈý)¬ùD\13}\8aÚÿU=\83\80Ïþòü\vÞ>\86ªþ\95ÈïM\ fN0òó+®\10O\10©#\13\861å¶Cª\8d´\81JºÄ\9e2ôN¢®QlIë\87\ 3¶É\10°\ 4\13Èð¦W\ 2±Ë¾\1dùÂÕ5\83\86\80q\8cÄ wèyÎy*]ë¯Çq\r¦Mè\87Ø4É]%^¤ÄÌ\83é*'nnÞ Ò\b/\1a\90\1eÙÏ8W\80\85úÑ×s": \1c\81tdU¥\97\ 6b²2Á#®ÚÅܪ-\8b~±µÛCÈ\86Mêý«k/åBÞó\ 4\18>,]½A\ fùúêí«×ý;ÇêêÛ\9b\7f|óá£?ÆSD¨/úRðL]\80\16aèG\ 6¦y\91¦a\8e
\96 K-\r\81\9fn¡*\1e8
+4ï\10\ 3Bc´À\16\97°5\86ú|ôÑì\85~\8fSâظ\87±é\94!\17û¡\93ãäÜÇÜ\1f¿Ï;>Ãk\ eLªñê/\eͤ=}}óä_Oþ\väÝUwendstream
 endobj
 endobj
-392 0 obj<</Type/Page/Parent 345 0 R/Contents 393 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-393 0 obj<</Filter/FlateDecode/Length 1260      >>stream
-x\ 1­V]o\e7\10|÷¯Øú%²`\9dtú´\9a\1f\81\1fâº\89
\80\ 1\97ºãI¬ïH\95äÉR\8bþ÷Îòî\14EJТ\88\92\8e\9cáÎîÎò\8f\93^4\1dÐç\17» \1e~GÓ\11M¦}²\92²\938|\15Ó¤O\831%\ 5ö\\`OóÂ{¢\1e\8d\87q\14Óðb\82÷£q4­6ã  \0w/õÚÑx\1c\8dêµ}¬\ f<\f2\1c\f±³\ 2Ù{ÐP\ 5Ò\1a#\8e';¾x2\8a&\15Ê»\19ÎwÈÙ½íÑ\94f\19ÅÑpЧ1\ e9\1a_Ð,\rGëÑ,iuÛßãçlöûI\8f:1\ e
\16µéQ¾AtbmTªô\82\84\93¼L%9/¼,¤ö´\94Vþp´õ{\9c§{\80ê¼-\13O\99Êås®\9c\7f{ð\n¼´úósjo¶\7f\86EÝÛ1Å1kØ©Dìô'AL\84yo¼ü\91\91º·ÃzQ\8bî2Ú\9a\92R\99ä\ 2
-\9cî8\89!Oé©õªüÒ\94\9eüRÒÊ(\r꧳sþØ\88Ä\8a\85§Ö¬¤\85N"Å?F"åHËD:'ì6\ 2Y\13È ê³òLmt¾¥W\ 1\81½¡\955Þøí
-¹hÈÎii^åZÚÀy\88^êÏøUl\8d\0Hp\7f\1c\r\99æ\13rXº£Ø\7fq\928:J\95K¬ôÊè¨Â\98R<a\11\81\81R\ f\18Ãh\12Ñ{©¥\159]\99P&\ fV$^!¼Ý.,­võ¢13ó®8¢Y\89t\19\8d\86Zõúý\93\82.mÝlV¹Ð\82\ fR!6yÚ\8båÊ\14+(kwXÄy+d-àRæ«\90ÑLé\94æåÂEô+TvÈa\9e\92¯\ f"\1c\15Bo       ÿWÆ95ÏeD\8f¬Åû«« 4\1f\80{¤Î\94\83\92óyÚy\14y~\8a ,ö\83$S\eÆ      xM\80_\0\1f«\83ÚlÔéGô`ÍZ¡Õ\ 4Ê0\13eî)\11HMf,\81\89jê]#þ\aõ\ eR½'ßãRø \8f_*ýÂñ,Ja!\9e\94iU­¨4x\14\88·{\8f\10\7f-òR¢Ôk\88Ôè7Ü\17\fÄ\95¬\19\ 3E\9c,eÂÐ\a\12r\8b\18]ïw¦\90©@á+D8Gg  çd\1aÑ'\ 3õ«>\90°\0ÀZ'ó\8c2k\8aÐd¥~ÑæU\9fC\9aW±u´\14ë}å\9c\97+x\17\89\ 3òC\11ëBß/ÁºYn6¢Xå\8dS|áÈ\9dþ(º\803£T+¼§\16øÝò\19\86\85²Æ§¤Héé\f\7f\r}m±\7f\1d|&ªr\1cvs\13\19í\9e\83c\84Ôqá5æ\8c¥DQ\14QbP#xs\f\85\ 5s¤ì¥ñÉ~\u\1f¾\ f\95\14X\12£³TYúÎ\ 4MÉ~\1d67\8bgi­±Ð\86cx:kÎx\1c\9fЦ\10¨º\10çÂHä\16\13ç\9b\11#\1e¯t)ßR·\8e\1eoäFyPÅLÄ\1f}²·¿\91åoê¶I¢sÿ-\89Ô\ e\93éÿ\ e\15\91#)éö°DqðTqÆÏC×°}\99ùZ\99Ò!x¹\91Å
-£¯*w´g\189\11ý\94\91Æü:§Â8O&ã^h
-¡¶¨Ç»{ÔfP/Aû:úíZf\8f°Aó
-\87\90È0»B\13\1du\ 3Ú\e\\97\ fw(\184d»²Ë6wf}\11\80;\1cwU\93ü\9d7}»­.q|ä\93¾:\85\ 3;\ e\80\f\15%¬V°\v¥b®rå·p\13\aë\81Íâk3/¡\ 1FåÂ\8a¢àé\e\9eV\1euzTF\a2qQ\9d­·\1c\9c\ 6\99A\ 2ài\88\ e\98\98ïì?ìU\9ff×7\1f\ 2\84s\14¸\b\80\1c\12äF¤ÏÜKjñt\86¼XR> a\15{&@\ 1uùîæþ\9a\89»·\17õ]#\9eL£A<µ®\1fÅ\ 3ö\90\a«Öf³¥kL÷<\\1d>\b]\8a\9c÷u\9aå\9dI\ fwB\9e¤ÍÔ}_bXäJWcw8Á\8cÅ-\11×ôÕïñÞ\9bÙÉÏ'ÿ\0Øÿ2âendstream
+379 0 obj<</Type/Page/Parent 332 0 R/Contents 380 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R/Fc 7 0 R>>/XObject<<>>>>>>endobj
+380 0 obj<</Filter/FlateDecode/Length 2718      >>stream
+x\ 1¥YkoÛÆ\12ýî_1ɽÀ\95ﵨ§%Ë\9fn\9aG\e qÒØ       \9a@@°"W\12c\8aË\90KÉê¯ï\99Ù%%ÒÎ\ 3-\9aº)ÉÝ\9dÇ\993gÖ_OúÁlD\87\1fù\8aúøç|vNÓÙ\90rMË\93\81<\1aÐtH£       \85\e¬éã£ú\a¯       °æ|\12\Ðøb\8a¿\ fñ¯¬í\a\17\17x[ýð\9f\8eG\93`à?\1d\8d\83YõíCÛ\8e¦\83`ÚÞö\97\9b\93Þ\8b\vº \9b%Û4\99õé&\12\93ð\97°óø}\16)\e§+²kM;½(t¾Õùc\8aS<\89\vÚ¨´T   -MN\91¶*N\8aàôæËI\9fº³`\82­:7kÍ\ fz/\94;¤Cï±\a½\96\8d?¾CØO%\85¡²Ð\91l\19\9aÔê;K\85N\8bØÆ[Mk\9d\8aíyúëKÒQlM\1eÐ\r[\83?°®\88MzXrFØÑ®\95\15\17°uN»8Ih¥mÓR\95e¹ÉòXÙ£c°ko\8d%¹N´*t@×\ 6Ëí\9a´
+×ÕSR´Ìu±>\1c¾6e\12ÑBS\99%FEpDz\11G!¤yG\ 2ÈV§-C"øÄ>ø5\eå¾ø©\18&qz\vkÌF\8eã¥\94©\95¦"NC>\9eRí¬¹Õ:óé+$¢[\95Ǧ¬#\88\l\91OµHôü\94ã+y<$\96\83Ï;\17.\9cr.\f.ÌFÃ1 &\89oÛ©_[\9b]öz\bòÖÜí\ 3\93¯zÿ\9ew><\7fwýòÍÕü´ÇÙé:Hõ\9aØð  \96ÌU\1eHx\ 1O\ f\16ÉHªwÍ`Ö\89\83\ 3($\84;5@ß­^Æ\89&«ràÀ\ 3
\ 4%ø¯\8d7úÑ£GôÒJ¼ðÀp6#\93j\1f³d/@ï½\b\1d®»çÁä\82F\17Á\98Q?\1fN¦Ôð@^wÇ(´¨ó\ 4ð\8bôV'&\ 3Z©phI\8c¹u\ 6h¿´ïKæéZ¥+ýʬ\1a;vH¥\11¬¹ErK¸\96\1a«w&·ë=\85²\0îàq®\97p\1cÉ\8f\1e2\98ËýØZ_¥ÎZ_ÂOÍf\13[\94\1cAC0¸\9av\1cNwPäè@\93Z\18ÔhauV<r¶6¢Ó>Ì\17~ã°\eµ::      è}úáÚU\1c\97OUÝi¹YH!£\12\1f»\93f>Xá\16\ 6b\93íç?>\7füü©\19²Ç\ 1=3é\7f,S\f\833ÞÔ}\8b¿~þ#ø\18|Bqîä3Äóv~JÚ\86?\13¼\87üy¹\94Bô0¤\9dâz\aaøüotji\91«4\\9fáE\983ËÈ\8aÌÄxU9,\15\rÈ\b)\98(\82\85lé¼óé\7f\83ù)LT+.uüq\ e\ 1\83\15à\11T\1câ\8d<\142£(t)Þ\9b2÷9}È_\8f\87o\81{0\v\86\f§7Ü\e\8e¨î\fÛg{y&ôë{\ 6JJ¡ºv¨­¬\9bp9P\14ç:\ 4\9d\ 3Á@\eêºé\8cä¦\99\vè\ fðÑ#Sz\ 4ó\11x­"B°\15\1eÜ\16î:£Ý:\ 6\91¯\15p{\f0¤IQ\86Ú\89ïð\8dô\v\83èzFÎãÕú\90\eãRìÜ
+H2δÎ[ÜOsÕ4ÎØ\9e\839Òø\8aýFxô¾ÛHt\17\89n:ϬtÿÓ\16ä\85\7få\91ó£\r=\fê\16=ïÄ\ 1º`d,\9a\82[Ü(ñ
+\ 3G\18\99Ñ`\10\9c³Àè\8eúÁhHÝñ(\80$\ 2R&Á( _Ê8\89¸a0\10ßI\9f­\ 4Ç[\15Þr\8biX\89\98á\94Y_\88öÊ\0?\0[\9cFñ6\8eX\8bd~\110\942i/°?Ø\v\9bû"\8c\ 2º\ 2Wb\1dh\8c\95˯o_á\9d*LÊ\b\82R\8bóÂVûxê¯Ö:\91²S{÷i\81\8a    [\9d\11Me\ 1øJx\9c±âì\v\93;?j%\84\8f\1a\9euÈî3 \18\80ª\9c\10RHJ\89\ f\9bæÎã¾ÅG\b\86\8ed\ 1ê\976%l?t\ 5q\92\9fs\18 ª¸ Bh\19($1½ Å\9eô]\86ÆQE]ÐÍ\86\1dÐÙ !fd)\ 5l¢7\99Ý\1fê¶åμó\85­A\1d\15\ 5"lË<EÁ\81ÄTqë»6ªL\15\ 5x6\9a\9f^ºå}\9a\ 2/\83`ÌpaLÍf\8c\17¢Í-8\ 2ça×\7f¡¸\12\8d<"\83áÚ\18ðf\14/¥Ù¡k«\r@±$é[ÈmÄNb\95@     ~I\1f&
+#ÙË;[=D\aéF\97\99Óº\97*5é~\ 3\7f´\96 þ²(v*pÁ\ 3xV:Hµ½ìá]n\8cí¹÷\94\98U-ë\8e·ýsô\8f·vÉ¢n^µ8
\1c\1d^äl\r\86®\ fÞ\10%7\11%þÌÐÕ\9b\eOï­D)Ö\87+\b¢El\8f w\ 6Ô \96ÆBÌA\ 28áXa!Náþ\ 6Ó\ 1\94ªZZ´co\99`\f 9\88rðT\v\91\0oU\8e>ø¾¹\1c\80Ï\15+R\e¸ß\9c9QP\ 2B\Ñ+,fÈ\16\ fÐ4#\82\1dúN\856q½¦`\b\84&ÒíB|+R\1eU\8e\ 3\94×Úà\8d8-l^\86ì\8f\13Ä÷ëMX\84\1f\1fÓM¢,\a\ 2hÌt\1aI?\8fS\85\1e\ 2\12JÌ. '8Ï\ fIl+öiº~-\ 5)\98ªb\83Ò1!\17\8fl!\8cåYwF\12°%FÊîp\88yÑÓéÀ\93\e\ exëd6½\15BD~\eIwÌt.Ôä#"#\ 1ÌB%­tªs\ 4eUƨ²8\ 5+A[l8dRÀYi\1d_\18èg\1e\90D:x\8f9ñ¼  &*Î\85qç~\87ö2\1f\1a1\87JͳKÞ\87Ö\ e¹þZB*4ûB\87v90J*\94\88Ys)\98qK+=ôß\0\0A\86\e¡è8]ë0\86Ê\15\95\8bÿ\83³ð­Õb\81\91Â\97\15yA@\1fÁ²\8d\ 1\ 5ÉÖ9bæ¤ÅB\83´Ð8|@\ eä\1añh\bµ\80Ìû0úpøT7\1aìOj0\9fQ(J4\ f\1e\8dñ¬\84Ö\1d\96¬:¥p\ 1J´FÔ\ f\8a\b\86Æ\9brS\930 US0Xd\ 2*FB^½|úüêúy+~\18\8b¸J®øسö\ 2\13h\81¨óîù\93g¯ÿÎ6\8d]\9e¼¿ùíÍ»ë\7fl\r´\eÊu%\ 5\87txF¿ïÖ\19½Oã».\8f·T\ 3\17\ 5\9dì[\ e7,EE|çæcÞAZzõýJc\10níÚ\fã\8b'¿ßs¾¹ÕR}í¹-\8eZ\82\13¾m)Ê\15$\16Èý²\85ôgÕ\88úðmMÛæz¢õ\13<\ f%¨ g^U\7fß\1ae\1f\8c4ß;4\97ßw×\17)\7fv$î\9d\16w\ 3ðo7¯_1ê\v¡%\0\9dÁ.r[î\96|;\13~k\1eÆqäOZW\11~d\bå\8a\aóU¨ã-nIönO\bN_tnÞ\ 6\b*MÌ\10À\9e\87êÃØÁÌ\ e=\14é"^¥èaE\89i¤¾­:v\83\a\ 3×\80å¢Ã\80\99r'ç2\ 5¦N\8eƧXs_DìýÍ¢Õh<M3»ñ ¯öí0û\v\9a.è^ß\ 5k»iëT\96Ö\12Â#wåD~!º       \12\ fIJ4\18äÈ\8d²Lo\9c\ 6ùÎ\99ï\864³le\ fâ\12\97\v`Ëy\87½ÈLQÄ\1c`\88\1côt¹Kkfê[vº\8b+Pk\1d\bÔ©&7l\82\13ëñÐ\aºB\88\8cn2\89\89\93Ò¬cé6G\18c¾`V\85Ç\f±øOXVi£ÃH(´\82}ñÝÖÄ\11\8d1·p$\98ñ¡´,Ï\13謬©\95ïg¾V\80\1c\fÄ\ 37ÀÖ.\9f]]£q¹É\83\a\12Õ\82A\rM$Ï`âªä\95¿Óª+\84ýgjP\1cæ\83\1d!\84Ha÷¸\ 2Zkmý´í§¬
+ôâÜB[Ö\83¬û«NÓ&\97ì3¼
+°£ËdÕJ9\ 3\8d|!6Ü\83\1d®\aØð\ 6\ 4\ e\b»g@\95Ì°ßCB=Ñ \94\1e\1et\87£i0Ãm<ZÙѬëSçn´\86ãipî>á{\8f\87\95\a\9c­\8b\9fq\91¸\8a©oí\90\13¾­tW|"\13"\ 3\9a\9co.qß\96³ì±:ý»7no\84\8b"§çÝ=ß¡jX\e3Ç@0»¹\97ïm"½TeÂ\1a\9c§\ 4VôHø\96ï\90\87\15ßݹ  0\ 1\f~Á Ç, [ËL0É5R\90Ì\92+cøÒ3\85<-è²[5Ç\1fj¤Á@äÌø"\98áW2\93  FÌ\19\86ÌZaÒCÝ®;\98Î\82Ñà\9cºÓ¾\f \93àè\86\15¢ðÁýÂ\81\1d\19OÇÁ\14·ÀrÏ9\1cð£ç7'¿\9fü\ 5\11\14\ f\90endstream
 endobj
 endobj
-394 0 obj<</Type/Page/Parent 345 0 R/Contents 395 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-395 0 obj<</Filter/FlateDecode/Length 1249      >>stream
-x\ 1¥VaoÛ6\10ý\9e_qè\17;\80­X\96\e\86\ 1Ý\92"\ 3¶u\88\vìC\80\81\96(\8b­Dº$eÇûõ{GÉJêºA\81!\88,\88<Þ»{ïîøùj\12­\12z~Ø-Mð7_Íi±\9a\92\95T\ÅáSL\8b)%)e5l&ØÔ?Ø&\9aP:[EK\9a-\17x\9fâ?ØòÂl\96FÓK\vÉd\19¥\97\16âÕ"\9a}½°\ÂÑéÑyÅÙI·3\99ã5x}»¾\80ñænFqLë\ 2á¤Ë\ 5­ó\10Ã\84ÖÙ03:W^\19\1d]¯?^ÝÜ¥ýÎñ4\ 5\94u>|ðÂ7î\87výtÒ\90Þ[³µ¢®¥¥\¹ÌJ>\85\94#\91ï\95\93ywà\8ab\9c®ÇIÜ\1e8\8b\16Q\12ÑÚ\1eÉ\e\12{£r*DU)½%_ZÓlKÊ\84\93\8e\94&Aî |V\92\ 3\fYKí/ å\98\86·O»JhÁ0ÎÀÂ÷)\98{M[©¥\15Õ\88\8e¦¡\83ª*:\bí\19J)ö\12\ e\a\e+ŧÁ³Gìò%°H\ 1\1c\ 3\866 S\\82\923PUæà¨0\96\93\ 6ïq\ 2\1d\0¢/%e&\97ìl#©6 \r¾r±©àXçÔè\ZDªÃ§QøV4\16v6lÎ\84¦\9d\95\ 1{\19·ÌÉ5vg\91rä« gji´<s,+'©B\ 2-Â÷\8e@\17\12ÅÑÂimö°í±    0 [ú^$n\rèHï¶\11[Xµ\ 1r\ 2\11    §=\983\89=\83\8555\ 1I òE.\99rm8"rªÞUGÚ\1cÉÔÊû\96ÿsè\81\8c\17ö\1d\17\ 1.\98x^\81¢8ù\ 5"k\90×Ü ¨Àè\ 6\84\17Ê»\11m\1aO®4M\95\ 3\19{\96Ô@ª¬3+ì¹ç Á\88^J\ 6»Aû9$\10Ýj\83-^\0êHèµW\ 4Ée¥1ØÆyà4\ 6é\9f²Ö\8a²\83\98\19T\17\88Þ []~3ÏÂãØ¿È5³\bF\1d
-ðP\1eÙË\19ÿ\85¬<)\ f¥;Ò2\93Π    {|½Bg\11}\0ÌAeô\16r·4\0\aÈ\87óÐ,\ 3\19\aìêËÆñýåø§¦d:Þ\0\19\91Ç\1a,áPÐÒ ;G\10Ø*ÓBz\92]2\9c\88`\17§\97ì¾Ú\1f@_h\19¯77³\93zìÍ8\97\e\14MÐ@/8\80¨\8dót÷p\87Z4\1fe\86\82z\1c*\9dUMÎ\1aþûæÝ\1f\1fÆ·µÈÜãõ\88Ù\82\1c!/òÇ\9dÌe\81\88Ì\19?\by\16\ 2_\86g\9c\8ep"«ês£ö¢\92:\93\14EÀÁM\ 5\15\1c\9f\ 4ôÐ\1fªÍáñ:¢\87\a¸ÌsÞ×jíþ··\84\1dø  \83s©w\9dï\rÆA¡¶(\9f7\84\96®vþç\96ÝotñyD¿\1a=ðT«'Tó¿ò\1f\1f:J[Þ\8cÌý\1fu¬¡s>\84yïNß\v«P×"³Æ¹gÑ0\ e\84\a â\13\ 2w®©w<\b°scPô\87R2\r\\ 2h\11Nm5ª\1eùmtû>:ã\ 3K­a\89\94±äZËÞ\rJsÇ\8cb:uQo\85B]ô­\8dq\86®\ eè\ 2\ 3²( \ 2\9e2\1cNK-\9a8\89\93Ù\99\7fðÀSÀ?^\87ÙÃ! ·\84\ eÉ-\15\87"\1c\822\1aéÎ&iãX\83\1d,\f\ 4\18\e¯\17{\8aÈdVqHaÈõð¹³8o\en<\98îPº9h¨\96\17jêûëþ\9eãÑÜ\7f1ÓÁ\14O~Cy\a\ 1Y\95\81fÄyB\12¦*càø\83ÿVz\17`t¥}û$0^dw\17\98Ð\8a¯!¸\82$S\\aæÑ\12¿\18É\81\A?ÑäÇ\13\a¸jõ+\9bo®dýÊÍݲ»5Å\8b\ 5®i      ¥ó\15ü$|Ê{«öæé\88ôîe\85¶béw¡ÑÛØÙ8^¬¢$\9eÓx1\ 1º|\88\9eû\8b      =ä]£rÉa\86\ 2\9a-pgJq äMÓ\98mo×W\7f\aû\ 1Kkendstream
+381 0 obj<</Type/Page/Parent 332 0 R/Contents 382 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R/Fc 7 0 R>>/XObject<<>>>>/Annots 140 0 R>>endobj
+382 0 obj<</Filter/FlateDecode/Length 1907      >>stream
+x\ 1ÕXmoÛF\12þî_1ð\87FE¥µDêÕÀ\ 1×äâ4@\93Kc%½\1e\ 2\ 4+r%nMry\R²î×ß3»¤hÚBcÜ\87;\14Ad\89û6ó̳ÏÌð_\17
+©û(w4Æ¿ÙjF\8bU@¥¢íÅÄ=\9aÐ" pNQ\865cL:}ð\1a1¦y\18\8a9M\97\v|\ fðß­\1d\8bå\12£íG3u6ç\ 5~êd)Ví\\1c\1c\8cÅ´\1d\81YÝÈt9\16\8bs#gL\99NgbòÔ\94\9eÕ\1fß\\84ã@\84\14Î\ 2Ø\9dQ8\99\8aeó+¥Û\8b\87¿1\1aÌ{£\9dOî[ãX°\9avFö\1c\vf³Îå\9ecÁdvÞå3\8eM\16+Xñ,\8c'p'x\82W8\9d\ 2\99Å\1c'§%ÿu?Øa\8eI8?\ 179Yùr}&äW7KZÒzË\9c\98¯Æ´\8e\1d%ð%\1a|H\95´\8a¢DEwT¤²Ú\9a2#[¨HouD¹©\94%\9dS\95hK±\89\86¤·t45%r¯ò\17\15\9eå\8a.?\94zoî\8f\97TÈèNît¾£\8dÂV ¥)ÉT\89*\9fîþýú÷\8b1\8dV\88é:\1ehkke\ 5½2ù^\95V¥Ç!\968ëd\1c\93Ì\8f\8d5U"+gÂ]n\ e$q\86Î
+SV2¯Üi°îÁa_\ 60 2y%£\8aØV³\853\8a}¡Lj<×9\8eëÛR\19\8c{\9f\ew#    g¿|/xÞÕMäñ\1cÍÄ|I\93\15¢\a\a¾\ 4ó\ 5ùñ\ 6o7<
+\96 \ 2Æ?8hp\16ÙÄÔiÌGHº\8càc~  \8cm%Ó´1OÃ\ 3?\9dä¶\ 2x\9bZ§1ê+A·X\b8\8aRíµ©9>níiã\8dÂeÌÌ^Å´Õ¥­¨2}ÿTnkàÆ8\0\ 1µ+uul\81ÉÕ!=ºóªÖ\ 6AëDåTÖÌ\ 3Õ>u`K:$:ÅV\ 6hÞ)j÷Åî\1c\99Ü\90Ùx#\8bÒlR\95Ùaß\94\86&u\91\1aÉ\ e>\13á\159Úli\14\8eE\18Ðhêb0\17¡\b\18 º\8c\14­e¹\ 1¦½\98\80p\bØÌ;ap\9c=W7Ò\87tÐs£!\1as\9d¶¥² \90Q÷L6@ËP\94z\97TÄ|Õ&g,92¤²\ 2xƺTQeÊcïü\81 /\83[\85;ó²\r©ÌcÄ\8b©Î\ 1nân/In\10Â\86sÝ=iCqí·\85\9aCÇp¹'bÊ80\eW+æ\eQ\14ST\97¥Ê«\ 6sÇC"YW&Q2\ 6¯¾ûÎýÂ\ 5ÙòwqÅßô\ eìèY=jv\87æ\87sw]\9d\19±y\86\15\8e\17\95\ fÅ(ÖÖ\19sÒ¤3;\eòlè\91\rÈú¨BPvjH\16\97\1eÑpªñm$z6øÝ¿áß\eÜ\7f\96\0(\85\10Æ#"þéãÏ\bo\e,\7f\7f¶Ìþ¢Þ¤:\829 Á\ 3+\ 5Ý@|x\8f(\91ùNQjv¸\91*\8d\87TCuy\84\ 3¿gé² \v\93ÈëSë\92Óí.ø¯Ü>?\9b]Ïú\ 16MUssN7\ 3«\82ÀK\ f_\8b\10×¢¾}=d\81å£ö\92`ÜG¸õ\13hþñûÞ\96\ f¯ÉÛ\1cW=MÍ\81éY©ûj\b«\ 1IÔpätu\9e\ 4w@\a]%¤ð\ 1®]\96É¥\13\8döP\9c\7fi\ 1\84\7fÊÖ9\1füÙ\7fÂ\eÚf\82\1f­\v­É\9d\Dªp\81\ 5\9d\90N=\15\18IH8²*\7fq
+ïu\ 52c2zõùv\88É\a\88\8dÌ\90\9fÜv\8ei=^\f
+\9fvGþi\e\87.\fãFÔ\ 4'ô^|\a\8eÈ\ f%\e$@\94xRG·NØpë2éÜà\vÀÄ\ 5c\1aÕ\82Ì×Ù\ 6\ 1\8f\f\ 4'B\92Z\9f\9dc\1d\ 1\94\8c\92\93j"w\95\15áxðRÐO*\87\8a²\1a\89kóÈ h°âtæ29R³+KP\99°A>Õ±Y0¶\8f\bßá¾ì\80\99\89\86\11XË©\15\95\ 3ãÞúû\ fñ\9bø'J\11W\15ù½qËSlÂåOí²§ ×©\85\10u¦â
+;ÛxA\82Ä ü\99\1d\9c2-¡ºG\92{©S\89lx\ eD\18\ fw\0GkL\91"Å36MlZ\96\ 1`\97\93\9f!Áÿ\83\ 1ÿ£läÈÖÆ¥IZ\83.0§¥\83ÿk\92x\96\81M~z<·,²¯MúFiæG\9bRði\9a;@\12\1f\vè\1fl0`ª2³ÎÝ;\94æ
+U"K\ 5*e.\e\ 4ý·    \8cÍî(ÛËf\9f\1eä,î\1a|wÀ\82ð0¿ñEbC­/Â\9aÌßÖ5ßÈRSA\7f¿½
+zØù|ðg/Ùv,\ e\80\85Ý£[UÕ\ 5e&®Sõ\9cû»·4úwH£øº°ª\842\ËÜäÇ\fÕÿ_£½\15ú÷\8d=Há!\87\82ì\94ÈUu}\85±Ò\98êÊ\8fC\9cÉØ\02U\17=\84\9f²ó7´x\a\8d~$WL)Êô=W&±Ú«Ô\14\19JJ¨°IѯA\86\#\85ͳ\ 2²æs\1dz\ 1Ë\1d\1f´Ü\95\0o_¾£ÏÚÖ2¥\1fQ\b½úá\a®Ò3t    y\84cdy¤\83)ï¨ê\16ö\89èvyóþ\93?vø@C½rËÒµB\1e\ 1\v­F3\92\98Í\ 6-e\9eÙZ¨¸Æ\89M_«Ñ\15 ½ä>¶sÒ#Ҧ̮Fî!5\186-ÞÃy\3÷g¹ìÚßÐ&\8f¦xüøawÝ\18L¯ ®ÖêÀð(þ*Ëâíûo9\8f\9c\94GiÝ´\8b\160\0çBîÔ5Ý3È.,\8f³\89¯,»¦¥­~ûN\9ceÏ [\85¤\18#!2Ï1Õ5­"ʸ\rõ=¢Ë\90\18Üê\1cLP÷*ª+\97\byB.3èÖ\rò\1f\97=èý\9bÖì\94\19δ8Mëûú^½Ç꿼h*"\1cþÕÑü«Oå8éE\vÿdâÚ¥Å\ 2ïºB\9a/Æb2qÅfó\12\83þæI\8e\82æ\9dÌÁX^8â÷9ádF£ÅØuWs\81Ú¹íÙ$½W\aúìÛ@\9e>]àí\12Þ\rðË\96Aàäìõúâ\97\8bÿ\0¥=åèendstream
 endobj
 endobj
-396 0 obj<</Type/Page/Parent 345 0 R/Contents 397 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-397 0 obj<</Filter/FlateDecode/Length 1276      >>stream
-x\ 1¥V]o"7\14}ϯ¸â%d\15&ÀðÙ}k\9a­ö¡Úm\97ªª\84´qf<à®Ç\9e\8e=\ 1Zõ¿÷\3\ 6
-ÙÝVU\92A\81ëëãsÏ9æ÷«~2Oéø¨WÔÇÏx>¦é|Hµ¤âj\10Þ\1aÐtHé\84²\12kú(:<xM\82\0ÏÑl\8aç\10\7fam?\99Íði|´¥éd\94¤±t\94\8ccíKmÓñ8\99ÆÚ/·\1d\8cçÉ \96~¥íh\94ÌciìúíâêîÍ\84\ 6\ 3Z\148ód6¥E\1e\ eÚ§EÖ}k\9c\97"'[|s³ø\r¥£Cio8IF(îjkV$néé\96²×ûªcÃCÕöÒÂ\b¯¬9kÕ¥\1eùµ\ 4wÊQiñZ[[RakÊlYJã\1dYÃ%¤L®\9e\bMÏ¢VâIK\87ÕR8%kò\96D\9e\93\91\9bã§\8c§O½A\9a\f\19ëFùµm<\95Ò9\ 5ØM\15úÚZ­\94AWkBÃÍZ\1arRÔÙ\9a«°»8´äm
-\0!\ 5\~WÉÛ#zÀq\94éÆû\0çlóγr\80®w\1d\92Z\95ØÐË/ð\95É\8aÙr\17t\ 5t;ÛÐF\18Ïpr\99i\ 1Þ\ 4=5&[cZ¤­­\ e\90Á_M\969&_\83ÀSú^S!¥¦¢\96ò¤Õ\19r,-\99\85\ 1iedB¿bs\a"u~KB3¥«õ-UµÅp\18ÆÊÚ<\ e¯\9d\9dª©\0¸p¢ä³§þà\85o.O\9cËg©m%ë^®\VKîÒ6\99Ó\0*díö`Æ ÈQ2Å\ fýì$\95 Ûfw\7f\84\17r\15DcVzw¹?˾ûy\8d¢{\94û}-17\1c\12\8dA¤óu\93yZv[\89:/²OË\eREPV\94)m\94Ö`ï\19\9d\I¼ã¡®P\95YãåÖóà À\ 3Q\84\rt8çÉþï\8cÞQg\7f°\ e`\9c\ 3XKQ]î\7fí°yÁ\9b\ 2\ 6\92\0ñ$w\16/l¬¯\ 28\r\89\ 3\15\ f[QVZ¶\ 2íÓ\9c\a\81!¤CÐ5Nfx\ 5«o\v \8c³'L\ fô¹#p¦ÃyØ\9eß«¬\ 2\13ÁÊÊÃî$¢\12\11¨!l\94óÁp\ 6þk5\býÃ\90ÊK\10ó\ 4~yäØ#'(\9d\1e÷L]\9fÉ¥×ÂL\87\ 1.`²jf    -ÀÆûÚ®j\81è©é\97µe!9ºnûpHý$]\ 5c*ÄO\88©\aã\1a\16VÄ:Ùc½fS]ÿ\1f­\81:öùZ@6ðùqê8=\92Y\98\féÃ\15ì~0ø\ f\b¨0`\81\98\bñ¹_Ãgx\fàà_X\vÝ\82Z#þ6,sÙR ·\852O\ 5ÞqQ¹Î\96²\8d\15X¿e\fBËlÞfD\b%íì\ 56y\8aíb[\1d\fÎ(½*yªË®JÐÒX\8e;KÎZs{øOcÖË\e\9e\1c\16à÷\93±\e\bÇQGÛM/³M\85ÐZÁ*\10\1a>\16Ô       ñÄæ[¡³/\977\9dh²xOpÀ\95b\87»\ 42\ 2ó¶( \ 6È\18\13½k\8c¶"¿ËåÞzÈV¾\ 6\8e\12G½Èøê²9'\ 56r­ú^¼\17ÿ\8d\87à
\8dÈ?Öòc¡4,\82§\v£û3­pO~Äx±á«ÌU\84\bø\93\92$¡¿"½­\83¸FeôlUNû\93\4\r\9f½*Îz\1c\9ag8\8dæyØ~æ¶:        .vÖ!È\11m\86Ç       ¿Êm%3¶+x\8bWÈ^\9d\18\1c.8í\9eêÆôX\15\88³§ZÔ»\93\ 2>­kpÿ \17ÏÜ*ù\11\93Ê\9b*\86À\vcøð\1f.\9e\90\11ð¢2\1djpÉ µyÆ\98\ 5$&ê 2þö\12Ý\83S°öX;|"\88"¦v\ 3Ï\9eA]v¡\1c\84ê\96ïl|\e\ 11\107\17ݽ\99µ_¾\ 6Óy\92\ eÆ4\19§I\9ar,¾Çµn·;ú.^\94ô\830ø®Áëz±¼7í#¡9éèÞæ\fåû\ 6÷5_é\ 1Åh\8a\f\9cà»+\17\r\87¼öaqõãÕß\91Öi«endstream
+383 0 obj<</Type/Page/Parent 332 0 R/Contents 384 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>/Annots 143 0 R>>endobj
+384 0 obj<</Filter/FlateDecode/Length 1647      >>stream
+x\ 1ÕXÛnÛ8\10}ÏW\fòк@DÛ\92¯\ 1\16Ø6½ {   º\8d»½À@@K´¤V\16U\91²ã~ý\1e\92\92cÅIk\14}Y´0d\89â\1c\9e\99sf\9c¯'=6\rèö£\8c©\87\7fÃé\90ÆS\9fJAË\93¾½Õ§±OÁ\88Â\15Þ\99LðNóaÞa=\1a\8dÆlJ\83É\18×}ìè^¶Oü       \vî{\82P¬W\7fÔ»\f'\ 1ë×k}ìd\11ÜƲWÍR\7f¼[Ú\ e8\18MÙ¤    8Ù\872\bzÌo\9eì\83¼\aJ0\19\ 2\80\1e\94\ 6°\85þöÕ\89ïû8]04']QÐ\9b\0\94û\96ÑÕ\ 3\ùÓ\1e\eÝ\a\83ü\81\7fËâ>ô{\0ú½ñ\8e×=\80M^ö¹ê\ fúl|oÀ~Ï\7f\80Å¡\7f\ f¨\1a\8c\ e\99z6;é¾\9cÐ\84fK\14ÐhÚ£Ydó\8d\8b°s)nô\19\89(Õ¤\13AOf\9f±ºçVw^ÿñ\8cmRånÖ[th\99f\82\94´ëK\91   ®\ 4åÕj!JZq\1d&BQ\9aß³Û\9b§\17\7f>}õâõó;û)\11êTæçMì\11\18\ 2Ö>\e\ 4>yý)ó§S`î\10ívøíôM\99®åÍ\96f\82¯æóúÛî\82Þðð\v\8fÅ|þa>ÿ8\9f\7f:mÅôê½ý\1e\vF#³÷GY=F\89çr\83JçÑ\96´¤E\95f\11£·Õ1Фòíú\1fÇ¡M\9ae 1\8f,GïyY¼¾ôÒ\i\9ee|\ 1\8d\b+m/ï%\92uM
+î¦%JK\10)Ë-£wE&¹Ù>UÄs\99oW²R\999TÃq]\rÞ\14å\8fãWö\ 5Å\94¬ÊP,e\19\v\96\vÝMóP®Ò<n\9dªsF!HÒ\828ÈrùÇ+\94¢\908Nµu\F2\17\80\82â0\85Õ,Ì¥F}\98e\17      ÏcA\7fÉ\98\96¥\\99U&L\8f\1aP\ e\fi^.À\f\15.¥Ìa\99\92\85nJÚ\83ðq\9e¨3b\ 1\e\92\19/ïT-V¡\90\86¾Y\86\88\86V\89\85»Ó>V\84\93\16 uÉË\15­SNJ%G\94$VQ¸¼K\\8b¯Ãj»H¤lxIãD\93,DÉ5\88&µUZ¬hÞ\ 1Q\96¸çb\91ò\9c@æü  £÷\89È)\93q,"\88ìÌÅáµ\!¿/Pf\85BÖ        ×&\11\94ð5zG)T\82ü\8b\9bB\96\1a¯Ú\8cØÈkQ*\88\ f\9b¹â¸¥\1fAŪÐ[Ú\15VëT\1d\ 6\90WBÐé3£\13\83ÝdÕåÙ|«ó¥N\89/äÚ¢\9f\19ôåQz
+#
+«²\14¹6Q\81Êf\98\88WZ&P(ÌæÑ#û-\94ùÒ\³®¹Jc\1c¿\ 5ô\90þ\ 6\86[\ 6O|ÐpbǨ+(/J\95E³³Óí7I\1a¢ ¬<Pæ\14\7fK\8bÇ\86p^\12/Ã$]C\13W<ʶg6=!ÏM¢+Uc\9e¶SY\avòl\9dª\83\8a°iÜ+bä\1f\11ra«\87òp©\8b¢Ò¦l`oÆÛj*kÑÛÒ\80\fV<¯ °-¹0v×\1aë¡J°')Q¢löÒí$nûBQ-²4Ì\8c 5\15Þ´\88\87\94ßFeJó§\94?\82:`ªrÓ6Æ}å\e\1aT"«,"\91[\9dì$bÂfð4¥©\91\84\ÒÅ6ÞÀ+æ\1dëP\89ÖÅy·»ÙlXh\1f0xF×ð\8b\1eai[Ê,\93x#6n\ 2^#å¼m\93Â\8bsâí£Ö»/8<D%"ˬ·9ÀÖ©^¦¥Ò¿XäHÛ¯ÖuûTV]±pîUg\ 4%£«\82V2ª2q\84«\86kEÞ·\80È\8bÎ\vWnç»Fö;\9e²ôóBmø]ß=ïâY)%:\97}\8e4 Ýæ6ºAù\1dåZئ\1c I×úmF\9b®C3ÓLñ\7fY\19©\18\e°#"×òp\1fæ£K¤\1fb_lïÌQ\r\84î«ËwÆQ\8cRZp`¦OÑâLø\\18»\90\14ID;\86ª¨uÂ[§4\81ZA\ eÝê\12ãNsä\9d\vÀsùêî$X¸qëÚ2É0 ´vî\18ÀîN3:¶^¸þpýñúÓák\8e¼ÚvÌ\ 4Úôä\97v\ 2qÝn×QL\0\1c¯v/#Ø:9Æ
+\9d\rÚ÷Î\8c\9dÚä\1d5tü\9cÛ\8c\19¹ÎÜ"bßlþ¿âåQ\84Ö\85)\ 3.©K;\v·\93\eÙ\99¤\eÚ        \ eëZ\1c`<L\97\18\ 6\8dXLoãY=Q'¢\14gd&EqÃW\ 5\ 6]\b\ 5Ó@\ e¿<¢Ð\11Ô\ 5$oM\ 1ÃèîadƼìõéôRlо\94F(Lon¦ùÑÌo\14\7fvä8\12\15_bÏ\ eøMÍyå\12\ 23^C^\ 5·ªBò\16-"\ eõf=Ä\8eÿõ\0ݦ\95±n#\9böù®Ó`2b  µ\7f\87êiÃ\18\96¨»·À/\96\99Üoå\rà\9d¸\90\81\18\89P)r°5;Þ\8a*Uªª¥ý½±ÈNE®\b¼ölÒïÛ\9fnã1þ*\11Ðh\18°Á\0·¢Ný\v\r¢Y\8bÌ\8c»ô·\1d;L|¯?\9e² ?$oܳ¿ôÐÊßÚ©ÁN\95d\92û¯Ë©Y>\18\ fØx\84¿|\98}ýÀÜz1;ùçä?a½   +endstream
 endobj
 endobj
-398 0 obj<</Type/Page/Parent 345 0 R/Contents 399 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-399 0 obj<</Filter/FlateDecode/Length 1284      >>stream
-x\ 1­VmoÛ6\10þ\9e_qs\ 3Ì1bÙ\92ß=ìCÚÅ\83·¤õZ\17ë6\ f\1d#Q\96\12ItI*\8eÿý\9e£ü\92Úë\86\ 2s\109!ï\8eÏÝ=ÏQ\9fÎÚÞ¨C\87\87^R\e?½Q\8f\ 6£\80´¤øÌwK>\r\ 2êô)ÌáÓ\86ÑþÁ>\1e\ 3<»C~\ 6øu¾¼\11`£{º1\1cÂm÷ØÆ\bرçû^\8füÞ\10^.ÈËù?\1cÙ\9a\8cÈïÒ<\ 6ºþ\10\7fD\ eR\9bæa½ë\r¼\91GWQD\99\12\91Ô\86¬"\9bHú+N3ù1K\8dý\96\8cÕehK\1c!\8a\88Ò\82\94\86éÅüþ¬5é\93ïW±\9bÁ\0±ë×O«L\14¦ª\18W&Ýg&}@\85Ñ\94\12ñ(«82"\91e¤bwní.Sá\83Ô5b\0\14ªH2¤;Éç\8al\95\88ÊË£©¥Ô\90\14&\95\9aMD\14µ´\14\11\15rMÛ(\86Ö\89,\18F\9b\9a\vøð\8d*I>­dhIP(µ\15»\94¼Ó\9c\80_++\8fÒ©3\82\lH¬VR\0B"¬Ká\19JFx§Õ\83,\18>
-\13J,lhöfö~FV\1ak\90b\9e\16Kd\18+Txöêí»jã\97¥=\82nÒ"\84\r{ÃQpE\8c+\8e\96±Ô\1a¥äB\18úyzsSY]Rêê\14f{\8cX0\89\88\8f\ 6oSmì6ó\ 3S\9a\1d¿j\15SÄo{T{\8f£]­j®Â®3àCKi
-\13Q,\91\19\ e\97\fçÃû\97T\1a¹K¡ï\r¹ú\93é\87ÛëÓ:\7f\ 5wbâ\ e:\ 2ÉB\95Ë\ 4g\15q\1a\rÊÌýwè\18Ùg;ðÛ\83½¤»\12\ 4\ve©ñ©L­l\90a\96WTÜáÞ²FË\95Ôai\f\88m.\99mhvj\1c)@®`K\94V\83\\86c·[áHÐ\11\ 1\81\90Ð%ÀR\8e\f\16\1dÏéÃo¿_R\83\84µ2_¹Ò¡\8cqúD\8d\16½HãHÆ4»¹\9aOÞ¼½%ÏóªZGGè\¾\89Ô\12\16ôB\16Q\1ao-vÀ\94þ2Ô)\83-\1e\1c{\95N\97i!2\12¥M\0\15\92ʲ\råR\14LïÔð  \80v\80²M²:ü+NÝ÷É)§\ 1)5 \16)\1eÈ\80\97\8chI23.¥êÀ½Ç6S>ìó\11ô¯r­\88\93\8b\aÐÄÒ3EpZNÊÈ\97\15Í\8cÀÄ\11T[*åú\f(\8bºÍ\17\175'¨u\8a\89\ 5\8bÃôaúÙ4Æ4(\8e{\ 3Íf%Æ\18¨É\93u¥Õ=Ï\9eE½âç#¦®D\85åSe\16k\95?7\\\1cÄ  \95ð\18ovº;q\ eÝôFÃË|Ls0(\13\16\9aFh\9e\9fà\1d&v\\16!Ïc4*Ï\ 1s×£v\15ÄÍÊ\8aÈ\9f\17sàõ«\89.\10ö\10t\17fçÒ¦\11üè\ 4\10\eâ\eJ\87ö\fÊ\9c`6N¦7ׯ¯n¯?êÐüñ'}Oµói4¦H>ÊLAWÍ\\14¥È<³Ì³ËGÜ\8a\1d
-Úí Õ\1eµÚ=j\aã`0î\8d ùlD¸`è¼öÝ6     \8c&7VZ\8dÿãs\14\94\1a'\v4ákiû\19\13\9d¿ÃL       åù\89áÉ\ 2ÍJ½R¦r\86ç¢\8eP\19\84ÅÄX§6\ 1ß\1cÝ"iB\9db\14¨â\9bÅÅI\9c\93\ 5z¥V\e¨6±\80\85À¿ê\14³¤à{\86»\7fØ]Ô_-.¸°¾ãW\85|¢ôr?£·ÅÄ8:úÌtú¨\9e\99DîQbíjÜj­×koUmx\88Ò:Av²p\14\95^
-\83;\vÌdaL\v+u!-ýT\16\ fw¥Á\7f¸ë«i\ 4}¬«´þ3æ\17ÒöG£\ 1]\15ªØäª4¨\8a{Ûy¦Ö/æ~\80Ãnè¡vo7\1e=¯Ãý\1e³ñ ³\13\94¼Ð\9a\f·¯Bþ`\80\ eõ\a#¨¦ÃjÙUø\87\9d&èÖi\82\1d\9b>ì:~\8f\9a\83\16á½\8d\13à\ 1ùc\89É\93¥\854lØ\1dàºîã}\91\8d\82\ e/]ÏÏ~9û\eÒ"\12Pendstream
+385 0 obj<</Type/Page/Parent 332 0 R/Contents 386 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>>>endobj
+386 0 obj<</Filter/FlateDecode/Length 1308      >>stream
+x\ 1íWmoÛ6\10þ\9e_qÈ\87Æ\ 5lÚò»òiKÚ`\ 5\96-[Ü-\ 3
+\14´DKl%R#)'ʯß\1d%9\91ã!É\80\r\e0\ 40ìðx÷ÜÝs\ fÉß\8fF,\9cÀÃ\87I`\84\7f³p\ 6\8bp\fFÀæ(ðÿ
+`1\86É\1c¢\1c÷,\97¸§ý =l\ 4óÉ\82\8daº\à÷\0\9bie¶\fÙ¼]YvVF\ 1þ<°\aA°QóÑø\9fÎçlÒØ\8eÑ«Çö\80Â\7fkM1~kÚ\852\99Mpk\13°\ 3e\12LØ´]y\fÿ\0\94ñ|¹Kõ\19(A8=\9cû\ 1·\ 1ºmëô\8cÛpv8\8d\ 3^çáÎtçôlu4¼\b\81Ú²Ú`{çË%&¿\8a}ÕG°\8azXk¶dpÉ#øñúæíê\vnX²6\1f\ 4!\9b\8dѾw!\8duýz\99×Ë=ÈùW\ 1¶Ä\ 6¹\94;¨t   )ß"\95\8c°iV\81¸+´q"Æe\ 1F&©\83­0Vj\ 5R9\r\\81È\vWA,\8d\88\9c6U'~\8fÁ§Þµ\10p|VÊ,\96\1d1ò!\13ÜÒ¯\82G_y"ì1ðµÞ\8aOo\19í\1fÁÀç\e÷V©P\90\bçã7\19\82\15®, ×q\99\89Ó:\1eÖ\85-(ã\80M'c ¬ÇaHi\ 3D[\v\83û        \fâÓÂ
+\83øO¹ÒªÊui¿ÁE&¿¬í-gV\97&\12\em\12Á\94p§C\3Z»a½\ e\91\ 6mï|ðN\92\83\18\99<Ç.5¨M©^\ 2.î8Å̱q\84zM\ 5{6\8e´p+³\f0\18´\95ð\9dïñÒéTðX\98\8e\93^ÿ\80]¤Õ¦kåÛÔuHF2Aªì["\ 4\81\10¸ÝóLÜêÚ2¸\90\8agYÕ\aéjà\91.*ÀÎ\eßa%"a-7\15ld&, Ã\90xää\81\12lØvaX\eí¨\aØ;Ø\94\ 6·\18(\8c&_D²uµ\87ìªfÝ%\ 2Ü«NK?â\ fõáÌ\90\ 3dÛã-\88Ü¥\1eï\95\91[}W5\8b¬Èm\ 1±ØH%\1d\8d\báë\13Qå¦òö\rÝAñ\1c'Nãø¹¨öT\8f\ 4ZÓ|¤X\1d\1a¸ãs#¸ÛË¿ñq\8c\fqN+\ 6\1f6~nm!"\8aÃ\86\r*V|ÅqÃ"¢']º¢tí¸ùø}¿+  F\ 3\ 5\91\ få\8dci\9d\91è\9e¯3\ 1÷²ð\89ì²î¶#Òy\8e\98_@ur4 Æø\9aa\13?ûYú|Ç*vÏhõ\11ð\ eq\9eNØo(T;èe\91i\1eïõøÏÃt\÷°à\8d\16 ÜaKêÕQ#\90µk»¯\rC©0o¤F×W¿­"o$n¯uÄOéê\1e£Ô\9e ìÆZ       \ 6\1f-     0*¬\17F\ 1J;d?Qá<å*\11ð½NP\93uî­j¡\ 2ÇÍ\1a\87©mª§nç¨\18\8cÇÌ«     \9d\10!\ e\9f\11âìú]\a3ÎÕî\84À \12Ù áúA        O,ê^^ \91\a\enrØJ\ eÖ¦/h7ZA´Ù¯\'øÓ¾\9e§Z·µð§\8d.\84á\8e\86ÐVÖ\89\9cÁ¯ÄÖL'   \9eJRýã\a\1a%ð F¯=Ý`Eè_|4D¥1B¹&fs2<(;¼y\ 3ô\8b¤\99¾³áa\91~ZçWÀHü\1d\ 1/\ 4bmã\ 1iÃ3=¼M%\8aZ­'HbHp´Oè
\rp\13¥r\8b\8c¿æ1\1d\ 3táÀ9F¾Ci\9bÓ"ì\NÚÀõ$vB÷\05\96Ææ\11_QR1\82\12xïP\1aT´q\ 5
+\1fÞ+\80$CéÛnÿüeÇ\v±*é`B©÷ZB^\e¬O\a\ 2\1d\84.\12~DÛ¡¥=¤øP\94ëLFYõ\8a¹î¢"O\7fiÈñ\ 6\rß]\r>Þ@\10tJõxÌÿ»\17Á\7fÉÜÄ\1a.>Ü\¾\7fFq\83\80Á·¹L8^ËÿoÆß%b{ÍX"óý;`\11²I0çnÀf!>\râ^s»\80wb+2:WðÉDSO½\19\ 4\8dý`1òÏ\869\83\9f\14\ e?\88[ø¥~ø\90ùt1e\8b9¾¬ÉïxJÿz¿:úéè\ f{&\8eTendstream
 endobj
 endobj
-400 0 obj<</Type/Page/Parent 345 0 R/Contents 401 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R>>/XObject<<>>>>>>endobj
-401 0 obj<</Filter/FlateDecode/Length 1455      >>stream
-x\ 1ÝW]oâF\14}ϯ¸e#\95D`l\13 $ê\ 3IaC\95¯\ 2évUªì`\8fa6ö\f\1d\e\bR\7f\8c!¤°\11QµO%\92\ 3óqçÜ{Ï=wü×\81ë4«´yè1¹ø«5kÔhú¤9E\a\9e\1dò¨áSµNA\82=§§Ø³~\98=\8eKÕSÏiRÍó\9c\1aU½ºãå»Í\94ïãQs]§A¾w\82§µ{1\80%\17ǽ<`©Òq©I\83\88<ç¤êSý´áÔê§4\bí2\97\ 6A\91\8eië3\98\88\94¦Z\8d5K\b_#Í9¥*Ê\16LósZª\19\ 5LâÔP¤\99\16£YÆIdG\83¯\a.\95=x\ 2ûß0ËdXQ\9a\12\15\8ah\89\r4\93\94M8e\')©Èþøxû@\1f¹ä\9aÅ{mÞÏF±\bèZ\ 4\9c\18p\9b\91tÂC\1a-­¹\8eAß_¡ßk°£\80\8aeBÉsâ\ 2Ø4͹Nñ\9bü5ÀÕi%\827Ã"Ûï9"¦IM\8dÕá\111¹¤\98Áåµeg\aÕÎÀV\86h;E\9bL\84$¤õ{¢¦\bì\84e&Ô\v\11ï\ fæ\88Ó,åÑ,.\11rJ\9fº\83«»\87\ 1µn?Ó§V¯×º\1d|>\87¥l¢0ËçÜ\9e³\17ªH¦±@:@\1eÍd¶4Q¼i÷.¯`¯uѽî\ e>\9b@vº\83Ûv¿O\9d»\1eµö\1a½oõ\ 6ÝË\87ëV\8fî\1fz÷wý¶CÔG¢\r\9b^\11\88r\82ìµ·&Pd      \8az
-yÆD\9cþ§Ô|\vÁ\vESD/\ 69Q22\88\89\f\17af\8a2\121\87£Ý\88¤ÊJ/\958\17|a²ü\ e*N²lzV©,\16\vg,g\8eÒãJ ¦Ë\98GYe<\8d\9dI\96ì'
-\82´Ð\ 2U\9f©Ý\12£M    \95¨+\ 3§\ 4ýÛëÞ\80\83&\9cîc\16p*S\7ffÌW«n\89.T\9a)Y¢\9b\16\91ë{\9eWöªn£D\ fýÖ{²ÓãsaÊ7E       \9d}\13Æáµ\1a\1fîÌì\f\1c\7f\87Oeeµê;'F$?¬8@\85@ÉH\8c\9dIaµÂ÷\9cº\95Q"Çq$\ fx\9a2\rÙÌIc\99\0\13³Ô¤!TdDf¡ô\13Öo\19\81ñ4£`ÂL\99]·o[7íÇÉ£\ eÒ?þ¤\9f6CW\8f¿µ{ýîÝí¹Ù_éÔÉóLï(çÍ£ì7l\13\ 1î[\95q\eÌJçdµ¨\98kRÈ\83\18]\ 2\98P\888\81æL\v6\8aí\b´hC\7f\16\1aî¯\18TÀø¢\8c\9eó¼,3=N\v4ecP\1dL·Ä\a÷\19\8d \1fáÊ5¯êø&>\12Ì\ f\8am\14\1fR\9b×\ 5\8d\v'Às9ε¡p     ¶k1\9ed\ 5Jy`$Ù`Ð|
-Ð\f9n3\9fÚòZ \97`ÁÖ©       \13\12ú m 7\81Bûóëyfß\88\100)\9dD\1c\9e\9bt°À´\81\¤MËÍ!XxÄ¢|\8e\92Ä@\8bbµÀò\91z6]\19>\85\80añ÷¿¡yãvÂ\82t\v*\14][\86¤Obj½C?\e D\17\8d(¤1\87Ëy\15O8ÓÙºÇ\ 5*ähnsÁè\v C¼Ã²IÉ\8f\97\11\v\9e6cÃ#\a\95ËYÊ·\ e\15Ú$¢µ\½\1d´ö3³*`hm¤\8e\0É\\11V\ 1HW\94û×\95¦ì×\9cS\ml5E¸QDôøBò«5\9eÕ¥ä\ 3¦\85äïX±1±.
-*\1cvÃ34\869\8fÑZu9arÆb'\1d'qiN¾S%ßuý\8aÛ¬¸5(Õ\99ß8«5\91¦¸Iíç)\1d®K{}Cª|\aA9>Þò\90v\a¨cB¹ú\9c\11\1dö¡\14\ 1\7f\87ä¡{ê©Â½Ê|°sX\84©\98\12Ó»l×BQ\8e\95
-\11\944ÐÂ^p~\18\1e½\ 3ÒK\15æ\86\9bd¸O \80\r)7³Ãâ%nL\88«g©\9b#ï k½0íÍëæ½\16sÈ  î\96,qèUß\9bæ\13¶÷½\ 3ªu~ó¸\0ËC2ª\ 1\81ëJÔ¨D ý2\93O£Yj*V¡|\85dq¼´M\12\1c²±\96\7f{Ãm¯ÙlPK*¹L\14\12%\89R~¥\81oú¾\81c¶!\87Ú
-$®\ e¯âðõ\ 5sê ÂvPî\flÃÞ¾\84þÏÞ\13*\9dÓUoó\1a\r¼\9e\8eÿ.r\ 2­Y³ëçµ\1cÐ\8d\95\ 3\13´²×h:U¯Få\86\8b\97¯°xâ\98ä       9¦\8f3\11ò\18\12deú¤\81·7¼\8eá=,,ú'fo{pðëÁ?N=æÎendstream
+387 0 obj<</Type/Page/Parent 332 0 R/Contents 388 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R/Fc 7 0 R>>/XObject<<>>>>/Annots 152 0 R>>endobj
+388 0 obj<</Filter/FlateDecode/Length 1824      >>stream
+x\ 1\9dWk\8fÛ¶\12ý¾¿bj\14­\ 3ز-¿\ 3\14m\92\0½IîÚé\v\v\14´DÛÌJ¤JJëõýõ÷\f\96Ó¢\8f\ 4ðZ"9\9c9sæÌø÷\9b\1cÓùÃîh\88ÿÓå\94æË\98¬¤íÍÈ¿\1aÑ<¦ñ\8c\92\1cg\16\v\9ci>øL4¤Ùd\16-h²\98ãû\b\16Ãa^\99.\96ѬYY´V&K<þÁ\198\11\rë\8fÚþt8\89æõÞ\18V½oç]þÛÝw7ó8\9aÒd²\88Æ\94S<\9cáoxÊhu3\1fÃÅñr\bC9\8dã%\16Ã\13/²«1ÜÇ\ 1\1fÄé\92\1cQ<å\r\98E\93ú\89\8f]>ç4\19\8cßË«\97ÏX\8dg­Õx´\80+ñd\b\8bðv:å{ü\13\9f½|Æêb\ 2¬Î«ÞÝx\8c\93Wî¾\ß\fn\97Ä\98¯·ÈÝl±À¦uê!\1dÒ:é\ 2\94h\14GôâÍÏÏÖ\1f±{A\8b°·?ZFÓ\18\9b»?\98\9dÒT\1aZ\99Ê&rkìN~é(1y¡2¹\156§G%ȹýó`\ 3\17!\16Ü8\8a\98ØR¼\²)â]\94l#w6\15iY¶îî×Çâa4\9eÁó´ûjo\8c\93Tî%YµÛ\97d
+iE©ô\8eÜÑ\952\8f觽Ô\94\99ÝN¦¤t/\18\14!\98.åâA\92«@\94r/J:\9a\8aöâ\11\94¶Òí³#ɧÂØ\12GÏW<Jë\94Ñ0\86È\85&\99\17å\91ReeR\1a{lyÜ\8døqH}\8ftڽﮤ¤ÎËJe);)t
+\92fR8~*Dò vÒuHlÌ£¼\7f\16Ñ\9a½·\95þ\e\0&)%\95µR{Ðp'òÅÀ\8aª4{)Rié\8b/üSbô\96¿G\ 3þ¦v\b¿åõ§8ÿ\ 37<¢B=õSåþ*}\87½J\90u+E)\1d      ÚýO\15_2ØÂ\92°É^=Ê\88V"Í\8e=\9f\9aDhmJª\íï²\95F¾´*2#ÒV4]B²8}\17,EÞa]KºïjC:Ù\96EQ\95\fø/`\806\87À\82Ò´Ó\97\v]\89\f´\b×x«µ\9f\9f\96\ 1l\92\93\16t¹Hsàê\16åAEµÉT\92\1d#úÐPØ3Aâ~\ f\a¸ñj/ôN\12
+\r\8c49_Øö(\94\v\ 3\81c\r\83<ë¸ÀG#(\9d¯ð~\fiôU\v\95\1e§\86\82w'
+"|Kï\ 3\ f[(\82O¨Öå\90U¢ûb["*Æ´¦,)\a\1e\8b\14yR%?\94*G¨¦\ 1
+/O2qË2Ñó\98ì\f\8cXSíöÞX¨\ 4Ôc)\vç¹\7f:ï(5H\17ËÉíú½¯\ 64\1a/ ìP\b\aw<'Àþ|0\b       ºV\93\81Ò\10'D\1dBK\ 2}úÓh\86fÅvîãÙ\9cZqûµ¦|A<[WâIA\84\98\9bÊýK\9b\85pî`lzmW}ܸ\83è§òQf¬jî\9b\f\ 5å®Cúû·öÇ\90ÍZt9Öw\96\v©¡\14³Å\v|ÐÄ\16\ 6]æ×N\96(QäAºÄª\rªÔ\8bT#p,åÞªNØ&(à\13Æ\196´/}R®´}PXó\11¢9\10)r2\90©*\e\ 5\8c\8a}ñõ\ eÌ(~SéW#ü[ôX«\99°^­Y¨\ 5Tû$ì\11Ý*\14\fÞ[öý,¹Áu*2Q¢Aå\90mÏ5'¡}PL\93\ elLP\8e\ f!ðSv_¤)\85êhKd7(ÅA¡èP\a\9a´dÝ2µ\98AË´<ÔÒ\8enb¬÷¬)\97\1e\90çP>)gö\10mÈl¯ÜøüÇ×w«7ïÞB¯>\7fõîÛ׿­Ö/Ö\1fV÷ÏÚyê\91\8cvuñ\9fB\18GÈ;\ end)®\ f\gï-\94ïcåJx\9ceøîK\1cÂS\80xô²é\94h{\80Eè#\89\ 29,¬\82~70\ 5õ
+𸽩²\14*(CøMW\rÕ À\9a|sV:+\94\8dKuÇä\ 4ÜB.\1d­\rº!xU§£\13A\1deòà}¼ôcc\9eî»Ò±\98ßÉ\æ\e\16à\92$\14ß+\8b'$\v\12ä«s'½O\83UµÉUÙ¡MU\96F»Ï|\1f¨ÝG;hSê\1c\ f\1c»ïâ*âÚD<\bÃG1f:\82\1a¦
+÷p^\1d\1dT\19\84îÒ]¥CÒy¤8ó¤fk\8f6òÄy.$øÝùP¤À»ãwû¨¸\9d\ÁöfËùaÉ\ 4b¹Ñ
+£      \eâú8ÕB\8f\92\13\82\1d\99\v\95\ 1\0óÄh18è\G<\ 3\104\1etISªí\91Wr\10Ôï`\8e×)d¹ÆU5d©A\1fø¬F­\91\ 6øÄeëç«\1có\bIk\8du=Bu4åã§\87Äw=,ðvô|ºè\13Ò9L8ÊwavÒ    4\1aß0\80\15ÐvheI=w\9cJà5¤¥áÍuÅ(\8dÓ"½®¹³\80ü¹\ 4\ 4S\7fÖe§\18\9eO}ò\8f4¤ÕRý\98Ê-ü¾kìs¤\fE\18P\ 6»Neâ±ÛHèÍ©\84x\84ôh\8aG$Pl2ôV@Äõ\89Ñ\14¯8w\8c\14ÏN\15«3¿d.0g{\ 4æ³\bûös\ eºóc=åþ\1cý\12ýJ'Û\9et©9h\1e³P\82\17\9a\80Þ\9aUÈ*ßÕì\80>'\18Ç\r\14\96_7\rþ<àðÛ0ä@É\ 1XæL\8f
+\ e^èvÑU\9eõ)½\95\a\ar1        \83\92×]\ 4 aRº\98ñ\82¨\87cþöï\r¨âw1f©I\1c Ð\ f(Ûf¶¢ó\16\945Tk\83Þ{\80\92\19\8dü¯\979~\15\8eð\13r>\8fF3ßöÞ[õh\9e\8eômÓ®é?~Vä\83ýQ½¿?\1fú\1f;3V¦fè\17\1c\11ÕpóöÉ\1c\93Z3\90ÄS~õz}óß\9bÿ\ 3«m¨\84endstream
 endobj
 endobj
-402 0 obj<</Type/Page/Parent 345 0 R/Contents 403 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F6 7 0 R/F8 8 0 R>>/XObject<<>>>>>>endobj
-403 0 obj<</Filter/FlateDecode/Length 1093      >>stream
-x\ 1­VïoâF\10ý\9e¿â5¹\ f       \ 2ã\1f\80!ÑUâr\90 \11BÁé)jªÈ±×°wÆK×ë\10\7fï¬Áá\ eG%ª\8e(\ eÙÝy\9ey3ófÿ:2\8d\8e\83ÝCÎ`ÒO³Ó\84Û±!\19¢#+_²àÚpZ\b\16dÓn\93MñÐ6\86       «Ó6\1c4MÓpÑètè\99[ë-Û¦G£íêSN«Øùä\11\92I¯{}\10R½o¢\ 3/\82e4\1c\e-2j¶ÚðÂü\98 /8E\ 5{\9f¾È\92ÐW\$\17`\Í\99Ä3\93\ f\e"\ 2­`È\ 3\96¤¬
-!ñpê«3ïë\91\89\9aEq\10ú\e k\91I\88¥F}8\83\9f¬\11ûj\87l\94\0J\v{^Â\9bó\14K)fÒ_\80¾\86<U\92?e\8a\85àIîå\,\19\15¸Â\8aÇñAÐ'\86,eQ\16WAHø2ð®oï<tG÷øÒ\9dLº#ïþ\82\90Ô\Ð.{fù{\ e¢òÅ2æäÖÊ\97ÒOÔZ³xÓ\9b\^\13^÷Ó`8ðî5\91ý\817êM§èßNÐ=\b:îN¼ÁåÝ°;Áøn2¾\9dö\f`ÊtÀ\fW£;\±\84I?Æ8{\8ayp\10o\9bRDäÉBPµ\85Lù<NÿWjÞò (\1a¤Ä^\1c\82¸æI\10g¡f\86(=è¡Ò\19\8fxÌ(ÐA\84D¨*¨®\10ø \9e9[é,¿£\14çJ-ÏëõÕjeÌ\92Ì\10rV\ fÄr\1d³HÕgËØ\98«ÅáB!\92V\92+b[ä\84÷%1?\15\91¢\1c3ìZ¨\8aA\12\18\80\83áy\8cÊ\84a\1cû\ 1C\rÓLÃ;\8eYÅ'\91*\91TqÓ\ 5LÛ²¬\9aå\98n\15wÓî{²3aÏ\·oJ-tþ¦\e\1f\86bö¡´SZ¨ü\84O}\8bêØFCKÅɶ\ 6pL½ü\95\ 5Ê\98\1fo\8fØ\96ÑÚ\1c\89B\16áñ1XÆYª\7f÷<c/$% \8e/\8fñ÷ÞÖ KB\1eí\ 1\12\ f\86a Ê\92@\v\12æÌ\ fIáè/å\8ev¶Ç\v\17ë\15\14\14"\10\89\92"\86Ö\9adFå(Å\82
-\80
-s\ 3\16ÂOS\11pÒ·\10F\90W,*EÜ\85Dn}&¼T!\98ûºý\87½Q÷¦÷(\83ô\8f?/ö\ 2ù\8fóó\1f-
-·Oø\ 1Úþ\ 1\1dw%\1fß$o³¨M\93<+¯n_ï\82,2W¯ìE\ 1\fE@\9aô»/¹ÿ\14³´T\8fPþSmÅC5?\87S²¦lî[l¼®÷[°,=êj\9bYW³Ý|æQ\89õ^ü¼³´²½æ<\10\8b\ 5KÔÆ\81½9Y³\9bF\9bæ%ÙÖ\7fBÉWJ,\94\17Ð/\8aQ7)п\e]z\83ÛÑ£®\88}\1aÞ0ÿÌÒ@ò|¾jó\87Ó>\8d;,´Äæâ
-\1f3!B\12õ×s¿<\9c½\ 3xéÓ|eÔ_¤\1eûÔ\7f\7fw°r·óÓ\16>b)x¢ç;É#©3\r@!\15\8d>Ý*ɬôÚÝl·s\98\97ÍÂ\ f0© 7´5X\9c²\12Di\81zVe2\17½\1cÓÄÇ_qû­ªÇ¶\ï\90ôÝ\81\dR
-Yt~ѤÈ\99®÷ÛÛÚ²\\97.j\ eZnÇht\] cÉ\9fÅË\1a\9f      6¦û\86Ä\8d\9fd~>Aj\16\9ds¬&j®I×°ð´aàR\84:\86«\8c\87,æ     Ëµ¬á6\f\97.ft#\vOí¦\8e¥ç\1dývô/C\95©uendstream
+389 0 obj<</Type/Page/Parent 332 0 R/Contents 390 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>/Annots 155 0 R>>endobj
+390 0 obj<</Filter/FlateDecode/Length 1112      >>stream
+x\ 1\9dVÛnã6\10}÷WL·\ fq\166}\8d/})Ú¢Y\14hÓK¼Ý\87º\ f´HÙ¬%RKJqü÷=CÉv\94\ 4é\ 5\ 6d\9bä\f\9c3£Ï\9d¡XNèòð[\1aâs³¼¡ùrL^SÚ\19Å¥\11ÍÇ4\99Q\92Ãf±\80ÍéÁ6bH³ÑX,iº\98ã÷\b\1ekcÞ\99ÎçbòÚ\ e®\12ÃæñÛ\87ÎbÁ\87o\16bN9\\8cÄ´ù\97Ñ}çé\7fìN\87âæÉîÅOüÕ\844\1d\8fùT\fi\fß1\9doW\9dÁí\92F\13± U\8aÜf\8b©\18Íg´R1\9c\92î\ÐÇBÉRS¹ÓôIo\82ö\ fÚ_¯þ\82ñ\82\1aËþx(&³\eXvW8v8\1d£°sU¦h£©\8a^\14É\922-CI\aSîHËdG¡\94\9bL#(ÞÐ\82>í´­Ï\e»íQ\11\97)uYæ\ e\1cFÐ0ÑE ÒQ.÷øW!¡r\a×ÖqdCê/\ 5çÑÝx·\87³ÌØ}è\91±\89³ÁÀØ\96\84\9fü\1dÈy*´ÏM\bÆY*¼C0y@|YF.I*Oë®\fdJÚá+\97öH¥É5Vl\ 4¥@6_¬¯¿jn\1e\98¯þ!¥£«`ó )ÙI»ÕHÞ\1eË\1d\92:\99Ö\99÷7^Zà \Rå\bI\96\1cHp\95O4Ý\7føéGJM¦\11¿rñ\92Á-j\ 5n h ÆdL}¾s¹ä[©FD¹=Nïû\85JéKÄ\8f\1c¯"T^+àÔ\7f²\7fE&m6±z\ 53\1dì\15êãü\1e {Îb}Ý*x¿¹6V=â¼bð#b[mµg¾Ô\16Ã\9a"]ä68ÓbP\81E} Yɬå¸Û{ÓLé\a\9d9\14ë\7fئòó?_\ 5¸\ 6ï\ 5\9e­£\17:I«Þ\fÐX¥\1fÅ®Ì\9f¥E²*]\8eº&2Ë\8e\82½Ãé3¦\9cHÂB«±¡BnÁîH\ 4\94ÿ_A\vË>\9b
+o\1eÜã\91¡\8a\v¯\85µ9\92¯¬eF¾«S^6õ\8ad\81i\v\88î»Sè\8d¼Ö\90»\81\10\ 2I
\90±ð¥ô[]\92ª IGJ\17\1a¨ØÄ@1\91Ö¹&·     Ð\95fÝe\14\12o
+èð\ f\vyCSßý~ߣMÅb\ 6§4TXjHVý)è^CK.g\91°üêà\1a\8a]ªôáî#\87Ï¢i\87/j\1e¿\84þ Ñ\10\10¬T\8a¬>Ôzã\ 5®Å\99¶=J¼nZaN\99\8bÅ<I¹\15Ë3º¿o\87AÊx\9d\94Î\1fke6^ùâÓ\ e\83U\ 1¶¦Ñ¾H±%§¶÷õõ©H'~ÝéÇ\12±\ 37ô0n_5Ó\ 2¥Þå1E¹qèRç¦\8a
+\bú\ 6À\a]~MhduÓ\95¨\18.>7¾¦o×Ý«Ç\87ì\7fhQgX[á¿ÖZ@¯ØZT]\8fªÈ\9cT/ª\ 3,\ f\87\83hh/\9cß®¯\91­"mã|\80ò\9aºòâS \1182ãì¶ÞU\ 5\1d¼\89\13é9\8e¿Ô\83\19\95\8dTèîçU+\87.¡¿E \1d»¦\K\vî\ 3Fôù\90jïYp±§¿Ì\82Yøà\8czm&qQ\82;ODàÁ\12iðàÊp\18\17\1dÄò6=\93%Cu¥X\87\9e0ÄyÞ\ 5A+p¼¨6\99I²#\15\8e¥V\97ù2¼¡Êp´I=³\91\13e<Á]\9a\9aÄÈì<¹O(\8c\vE\7f:á·£8\ eßx\91\98Χb>Ã\9b\14\ f°ñ\8c½|¿êüÚù\e\8b\rëNendstream
 endobj
 endobj
-404 0 obj<</Type/Page/Parent 345 0 R/Contents 405 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R>>/XObject<<>>>>>>endobj
-405 0 obj<</Filter/FlateDecode/Length 408       >>stream
-x\ 1­\92Mo\9c0\10\86ïü\8aW9\91Uðb¾\fí©I³U\ eÙ6\12½EªX0»D^¼5f\93\7fï\98°©\94\cK#{æ\99\97\991¿½\90\15\e³EH;-R\88"\82\91h=>¹8D\848C½§\9c\9c\93q9,DÆ\v\96\ 5\9dENÇ)\99"$øjf6\15\9cÅ3\e\11\97¥·\\85(P¶à,\89#d$\96f9Êf\92\bQÖ>\16\1f±\96çå\83\17"àÔ\ 6Éû]o±ú¹¾*o¾¯\7f­¿Ü^ßû8ê®ÁâP\99jÏ/Pë~°¨w\95Áâ  ÷ço\ 4\9eßÜ\ 10ÆÞ;\8d´£éI=$\8dÏs<â,sUüu÷å*\ 3çn\bÁË\14\82HLÓ `­­üô\ 2%3äã¦Å£D¥\14\94~\84Ýu\ 3\ e¦ªmWË\v\17\1cvzT\r6\84m\94\84Õ ¶\ 6      =\1a\99\91\95%\0g\83TmÐèzÜËÞvýö\8c$6§Vb\16¹R\ fÕVNí-Wù\      \17\ 5\8by
-\1ee,ÏRGý0ÝQ?ýÁWy\94J\1f¤ÁmÕ\8f\95rbÁ\89\ fDHoÞø     Ã\95nè{ø6v\8dT]/\a\a&"a\82þ\ 2zþÆ\8f2çº.½;ï\1f*\83­\83endstream
+391 0 obj<</Type/Page/Parent 332 0 R/Contents 392 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>/Annots 186 0 R>>endobj
+392 0 obj<</Filter/FlateDecode/Length 1913      >>stream
+x\ 1¥WaoÛF\12ýî_1ýR¸\80MK$EI\ 1\8aCR\9c{÷åÚK\8c+\ e(p È¥´1Ée¹¤\15ÿû{oHQ\94\82ÆÀ]\9a:\1aíÎî\9b7ofÇ\7fÜ,\82m$ç\1fí^\16øoµ]Éz\eJk¤¸YêWKY\87\12%\92UðY`Óô\83>ÁB\92x\15l$Þ¬ñ9Äÿê{Þ¥\9f>þ|³^\ 5KI\16\9b \91J\96\8b\98\9ej\95òéfnc5L\82õ|ufc5Zá\8c\99ïÌÆê&\9eîáÉa²\99ì
+(\93`;ó\r\97\9b \92Õf\eÄ@\15Æ\vì\1d\9dÙXMÖ¸w¶:³±ºÞ^¬\92\99Õ\86|\1³Ü,\ 1a\15Ç \r\80\16\v\84:X¼2^Å\\r\19"áêªZ\ÕC\97    \ eE üg¥?¹\14!\92Xâm¢ÇF1y\1e,]\9dÙ\95D«-.=¯N        \fq.®\)æPè93±F\9e\18ϸv6\81g\11òÐiqnc5¼<vnc5Þ\8eD\r\aGkÞ\ 3̤\b Ü\8e\ 6\ 1ÍÌJÖkJO7rmfV²]\ 2æymfâÂeÈ('ǹM8
+vZ%íq¼\1cc¿T¹DÛ\18GA\0HE2ZÄB§\bl,\95\93\99S\98°\12\11Á-B]lFkr[P"\88\9cò\89ÔàÒ\12¡¯G\e 7+Ä7[\9dÙD\13òØÉ7D\91Ä\93o\98\93xòÜ\86/\14zºç\ 4)Ô(¯¤Ì\10Ã\88õ\ 58+ªb°&§\88ò½rúðtóð¸E\15\ 3ßS\81\16\93°b×\89<åÚ[\16ò\94Ýn\ 2ùÉÕ]\9au¶ÞKw0\92\9b\17SºÆ´þN>ô{ùh\1a×êjZçòhÒ®Gãùhþè\8dïü\ fO\9fqËFÆ+(Yá\8aÛß\8c¼¤eoäÕõ­\14Æä»4{\ eäïµ\14¸îN\8e\ 6\1d¬|\15W\8bí¤sb«¦u/F~mí\8bûò*¼Ïv^2W\17vß·ig]\1dÈßÜ\11\10Û;iJ\93z#µë\8c"/\Yº#ã8غ\ 3|ïp \11\9eM\ 3¨²´\16Þbs\ 5&GÛ\1dÔy\87hÄ÷\r\83}7D\ 5î\96P\9crw\1fÆ\ 1Ú3N@\16\ 2ùÙtòiØ|ÍÀr\el\171w>ºV²Ô÷i)½W>ÉÄx\87\14®í+Iq\ e¾Í\f\8dXOt»t\a^FD¶3ù;9t]óîáÁë^¸îMP\9bî¡kÁ©i\1fþ²o]ßüÇæ?.ñgó=¨Ê\7f\fõó\18?`)ü÷å\88FR¤Ñ\15`·oÁâÑ\94\99«@¤\93Üú¬÷\9e´Ø\16\90<2Í,Q\1d\1a\88T©-Ési=\13y08êR;\92\96`ÿ\90bS
+hu\1e|\9bÓ0\18\85FÍ}¥ª3§¿\ e9oU\94¸¤\94Ý´?\1dTx\v¬åëEZn\81\ e\aa\ 6à!#qÿ\e±ä\15¯À\15³\1f\fò\82úqdÆ»I\9fUúl\90\bé&ODpH=¥\8b\18Z\93æL·©±mWÙ\ e\19Wñ»\1dd\83\82 K\9aç\96ú\87\98TÝT\ e¿ï\Ã,òãà<¢\1aõ\ eHÕ5Ð\91î}e¶QJ¶À§\ 3\ eD\1dB\81éT\81Ày§H\14¨ìZw\ 4"\81®=d©a\14¶õ\1dªº\90¾f\90\96çî÷ª\10W\14§Ó\86\93¼\81Ê\a¼TziªKÀl<P\95\ fä\89Q7\8d©sûå\14\aõÕ¬©Qa^\ e¦l\8a¾\14[3Zí\12\94+{\1aþÉ\r¢Ø#'
+\12ÍH\85ß{fI[\93\ 2½wî
+ÉEÛ\99²©Ñ\91ìÎeÏckB©8ù:0ryq\bû]\8aä^'\ 4ä\91à\ 1\133É]hGH\8dG\bw\92¡\902\14!KV\13ÅM'\11©p
\98¦ª°_ \1f;\94keÒº³\95       \ 4íøèú\12{\9a¦5\99Å\rÌ\ 3ù@\aÀ÷\1ddz\99
+^BgF×7û6EÏÄǯ\ 1Êï·\90\ 4\9aòpé\88þ§\7f}\12\8d?¸î÷\1f\14Û¨5¥]µµë©bð\84¿¤ Å³b[àG&a\8c\e½#bïÐçHþa\8e§'ê\eMäߣ\bf=o¨\1dÁ³\80²\84jj\1cT\fo\1dlH\1eQ·ìÍ\8dó\10\9eâ\eß«ÊÔ\fâÜ_F?\r\86i\1c{\r\92ß·zº6ñ(a¯ùþ²¿¿AH<5Ó÷¹¢ÿEÑ¿×\82ð÷\1f\a\15¢.µþ¾AÔØ)<jpzÁµ´p¬êÐ\97\16\15
\fáßAwµËH\88­Ò=\14«»\8e|\1fv%
+ÆäC\17Hk¼û'JÙ\ 4üP\e,ÊAb¤êáq1\r\16c?ËM\91öe\17\fÅ=l\1a§\8f[)lÉú8gbØ\85l\8dÓ\87T\86¥d}%@ÃRd\e\1dóp<\1e\83f\18=\ 2\ f£óC ¿P×Ph\83\90î´d\8e\16/\ f\eÐeF\vË"\94\9dsÏUÚ>ãe´Ù\ 13\ 66³¼Ô\95S\10\8e#%Eë0\ 1\80\8a\ e\90ÁB>´UÎ=ZL(Ô{Ä\ 4gT"{Ûwãu§Ç\1cr\aåÃØ\94Ë\ 5e·o2å\a`.Ã\8c¢\ f\8bÎ\1cè®(óô\ 5/<¦\10¤\r#VÎ\9c\9e\88ÔîÌ©\81èvØ\8f´÷hQº\13h/i±\9f\98Þ\9f6éØ ýà|\8dRÁÇYCE\1e=\1aêÐÀñºq\ 1µ÷\19ßh\12ÞÐÿ
+)#Ã\ 3!çáô<F<¢¤Ï\1a\1cF\9c;ʤDRðB±ã!<\82\99Ï:|\95  Úf\98<^!ö\ e\94Ñ0\171s\8dq\18L\91z\f\9fÖc¸t|\ 4ºÖ¢×Mýó\14\f\1aú%Uú¨\9dú\12X'\82óD®Ì}'ì_\1cd\a¹Õ\82¡¹}±èX \8a#Ñ8@ß\8fÏÍe\b¬Ñ¬ìs\96\1aç7<*ÙÁ¾\18ÌËé0ù\9e§å?éP¤äzä\1cS²ÁÌ|\9a\98#ü®¹\85Å\99ùÿÿ-#^c\ 2O6ø=\ 6\a\86kÒöק\9b\7fÞü\17Áé+\85endstream
 endobj
 endobj
-406 0 obj<</Type/Page/Parent 345 0 R/Contents 407 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>/Annots 143 0 R>>endobj
-407 0 obj<</Filter/FlateDecode/Length 935       >>stream
-x\ 1­UÁ\8eÛ6\10½û+æè-bÚ\92lËÊ¥H±IP \87dWG_d\89\96\99\95D\95¤Öë¿Ï\eJ\96\9c`S´èÂ0!\89\9cÇÇ\997\8f\7fÏV"\89h\1aLI+ü6É\86â$$#é8\vü§\80â\90¢-å5bVX4\ e\1c#V´\8d\12\8cë]\8c1ÄßÇòD\94\84"|ebÀ\b\18èáó,\88C\91P´æ\90\9a\82\ 4ß\87·\8a\1eg·ï5\85ÁF\ 4\1c\13n8â§ýÿHgËO    \85+J\8f8Æ6ÞQZxîø\92Ï7\82Ri\9djJúÜ©BVª\91ö.ý\86 5\ 5A\1f´\b\9f\16óTÓ\ 1        QU%\vѯJ(\88\87UÑZ¬y\15\98õ¨m\955tÔ\ 6\99¨df_\ 3\8eÅ\96C>¾`­j®\v©éê\834VP\9d}Óæ\1dÕªÑFP!\9fe¥[9!
-\92.÷TP\99E¸í\19<ÈZ?KÊ\9a\vÉ\17Õ\1fÏ´5\9d\95;\11?,$³_à\80ÈB1\a_~Çë"\88ú£Þ@à¼\92Ü)stÎ,Uòè\bè \93\9e\94%ÕäUWHKûù¡s\84/\8dvT©Z9Y\90Óû;\86¾e·|Î̲Òå²5êY¿\úDæCºAJ¬"H\92\89íÃÍÊS\9bÊ1L\8fD\97\e!uÖ,íA5o\ 4ÇÄT£\9c\b\90ù\15z<íoÿ-q\8bh#\92m\8c¶î+\1cNEG\7fzåþÙX\97U\15\8a-Y&\82\82\8c\81\84kimVJû;o:
-'\9a0®Â\ 1\82qï¬Ó-\86Ìu\96¾ôeîÕÇж\95¹:ª\9clnTë \1c)JA¾\92&Gº8k×\9c\11Cíï\ 4\83\86².º3Ìa5iµÎò\13úVн\86\ e³ÎiO\82ÎÚ<\8d|¯üÖ\13åk»<2e:\18}¶0\82\ 1fdÍ ô\97.}\e\9c\8drN6#ªW)L\84\19½Ò>ÿ\94\80L3¨EÛs¿\16?¢n{Tv¯Þb\16á\86\16\93É ~l]\bnµq¯\98Öà-_¼÷\90í\ ehIr7!¤\9bê2\96Å'uôtoÊ0öy\1f\ 1\17«\7f\\0Ç\85Åó\ 2\18\83EQr\89E%ª\90\9e\8cD\91UÝÂ7¬\93­}Ï¡·\16ð\b\1då\99\93¥6\97÷^q\ 5\9cÊ(\98\88Ò\r\97¹ßY7\83Ó\8e\ 6\11\8bÝà[û\10zfìÉ\1eüäh\ eÃ>¥Ñ]Ûo\ 2ã²\8c¯\8f£.{k\83]âÂÊ\ e\1a&æôÕ\89ÿÇÞ\9fpMøs=vu\9d\99\v츠{é2\94\9c\1fzñ3\17oËV×ÒAÆ%\1cÕɪR¥l¸5\9e¤l      \85³'TÙc´\ 6íc%z¢?ú¿K\f_bA2Ý\11÷Ú\eu\r:|^V*?3\81
-\85ÀÎg\89\ 25ìæ\9e\833Yþ\ 4ÉÀâm\aÑ"ÂL$v7·å6\10|Ëþúr]Çk\11ow½Ç\871\1fãc:û:û\ ePïgKendstream
+393 0 obj<</Type/Page/Parent 332 0 R/Contents 394 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R/Fa 6 0 R>>/XObject<<>>>>/Annots 207 0 R>>endobj
+394 0 obj<</Filter/FlateDecode/Length 1743      >>stream
+x\ 1¥W]oÛÈ\15}÷¯¸\8f^@bø!Q\12R\14UÒ8q\91M\\8bn\10 /#r(MMr¸3¤µü÷=wHI\94êÝ\ 6(\12;\1aÍÌý8÷Üs'¿ÝøÞ*¢ó/³#\1f\7fæ«9-V!\19IùMà¾
+h\11R\14SZâ\8e\8fC§_\8f\1fo\82ÅÒ\v(\8eCoI%\85ËÈ[\f«\826×çÙ\87çS\1cÆ^L³å\ 2\9fCüô¾f>\fÍÃÐ\va(\88Ï+64^cwåÃ]\7fÖí\8eÖ\b"\98\8e×Ø\9dÍàü|\97\ 3\9aÅ1n\\a䯼\19ÍÂ\15\8eÃe´ä#nå\\8eÖØ]r¸çÝp\19°Ùán\84|\8f\96øîx]R´ð/v\17ì0\82\ 1çÖ_ÂP¿:ãpÜ\rý9®\9ewÇkÎ\94\138ïÎ\10Æòdy6\9b#äón0÷QºhÞ\172Xνհr~GkF8ºØ\1d¯±\8b\1aÂ\8f³ÄwÇkìF1û=ï\8eÖØ\8d\97\9cýiwÆt\88|.hI \17öÜÂÅÄ@\85«¹#\f¬Ì\87\ 5ï\8d\96\8bÓAÞã\8a÷~®*þ.¹ys·B©á-ÉÁýx9ó\82ELIæHïS\92Þ®<z0êEÿÞÑ{]wFíöÍ\84>«TVV\92¨2ú¤l£M÷Kòo\98[Ò`k\1aú^\14Ïaëöt\8f~\84ó\80\ fhÊÿÌhÛ\9d¬ÿ]¾ÈB×ÒXêMù½©Û¿d§\9d¿Õ}(\9e6»¿^;\fV@\ 6î6º\94dukRI©Î$)K[aeFºê¿¸
+(X­\16\1cɺÒUWêÖ"Ó\8cãàìþÑVÏÛÖ6XOè¾J=÷mÑç\9fQ[á$5{ÙG#\86\98éã\97'þƧ)W\rQ}\94\954¢ \87v\8bËG\0/r¸õú%J\12 º®$ÓpæA\8e``å\ 5Þ«×à\ 3©¯\80&N\1dk\85\9cs#\19\87¼9\b#ßR§[JE\ 5õÉP0£¶m\ 3h\1a\8d6TêLå\1d\7fqJ\89\90tiIç¯çG?\93Ò\84^\80\9c\ 2òá\84\84½Ä¤f,ì\1e\95\ 1úÀ\90î8äÍ\102Ýi\84"\1a\vÀôy:,\92=ò«\8dÞ\19QryÏ\19e¤*gj\ f\83h8¥\83*
+ÚJj­ÌÛbBÈ\9d¾Ý'\9f¾>%´þò\9d¾­\1f\1f×_\92ïoq²Ùkì\82\1d\85B\84\0Ñ\88ªé\0Çe\12¿~x|ÿ     \97×ïî?ß'ß        XÞÝ'_>l6t÷õ\91Öô°~Lîß?}^?ÒÃÓãÃ×Í\a\8f6ÈóUÒü\14¨\94»\82a\8e\11ª\03\ f{\95î\ 1Åelâ\ 5»b[`¸\19]þ)Ä\8eÜ\13ÌCJ$R\96ôP\b\94\ 2Q¢È\9fÐ;\8dN¯&ôë\9aü0\b\82i\10ù\8b  =mÖ×\ 5ú\ e²Y\0Yd´\17/\12¤K¥z\ 1\8c\ 2\1dX3\88ÿOú¢ÐÕÎ\95
+VÎLxK*§JC\9e\ e\86cnôÑÉ\88:\97\1c»\84kĸ¡×ÿ\ 4\8e««¯bsu\ 6@\rÚöG-\1ez\7f$§ç\16¿ï\89¹\95;UUªÚM8Kpá ,\7f\82H¡o+Ù\8c¤\v\8cÿßò\ 6Õ3µ6}ÃÑ}C\16\95˨\14\8dÃzH\85nþ«\ 1j\81\96\eºN
+St\94\89ÎÉÆAnId\10\80FY\ 4ê\94\93-QcDú\8co®ió\ e\9dÇ)àâ\ 4}ëz¼Ñ©.z-¶\rÄJ\98\f|giæ^Å)\97?´*ÝWê·VBøÐ\1døIÙe\1f8\98\90êʶ\18\f\82oïÀEjk\12-ø¬Kð\11A²ge.K¶5úÀ¡÷\ eÙ°­;¶\vAÃñrBϲfµÐÅ\vçCO\15\ e5m%\1aYt}d¯Ô\ 3\82\951S=ú×Q\1d\83B\9e\15\11\80b.-ÁåkÕüqËÉ+ûã\17\87U!,×$W©Âx1²\90\98utÕù£)vYæ»q´Pʽ\80\18Khß`h4áx¦ÑÇ\87Ï\83Ø\\ 2%\8aB\1fÀ\96¼5ÀÅ@\98Ü4/eÕ0÷4\7fi¯Ë½Ñ´id\8e¡ôM\14\19N\0ÞF\98ƱNU\906æ7jMPa\83\1ae§iÒ\vÈi¼\ 1i=h +wÓ"\9e\ e|­Úr\8bhpº\96\9aU\r4\18f_FµhÒ½<E5\fj\10?uÂ%
+#EÖ\ 1\89ÚIáVT\18ᶧ\9d`\ eW¶ÆhE\86ª\14;Ùs\84\ 1\14\94+\83ª\1cG\1f»×õ\14\84{Æ rtâ      Ä\83      =k\e\9eN8ÛQZh\vÞ\9c\9e+\97\18\ 3CL\17\85\17\98a\8eýHÓõI¡JÕ¸Î\ 5»m\8bQ0\88\ 1"\7fæô?%ÉÃ\9b\0/QÛÖhr4M^Èß\15\8f\ 6<¹¦\96õ\12Øäj×ö
+0áAÆhq~îq ÒA\1a\12ÄÁ¬»\8cîȼaÒ@\96eνàr<"\81ÿþxá4À,¹`:Þ\82þ59à\ 5£Æòcîü\0¤Z¥Ï \ 1 d4\9a=\97¨\aþÈ\9c¦5\8e\7f|ý@\9e¬ÂK\10\93}\82»îs¦\ f°Ï­\84\93Ìwa­,\ 1\bz\v§D\96¡P\97):)¬ä\81r)à\ 6RÓO"vu\10Ý+\19À¬m\vîOx\ 1$ø;¼Ð¸\8b\81)\b\9eK1À4¡È\ 3DL\8eS\e®Û\1d\13~6\87Î\11¿µ\83àøJ\ÄÞ*\8eúwâÑÅO<Øg\v</ã%Þþx;\86KN÷CróÏ\9bÿ\0\86Ò\81öendstream
 endobj
 endobj
-408 0 obj<</Type/Page/Parent 345 0 R/Contents 409 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>>>endobj
-409 0 obj<</Filter/FlateDecode/Length 1976      >>stream
-x\ 1}XÁrÛ6\10½û+¶¹Ô\9dÈ\8c%9\92\9cCgÚNÓIg\9a\89\9b6iz\80HPBL\ 2\f\0ZV¾¾o\17 -Ñn'cG&\ 1ìîÛ÷v\17ú|r^\Îéþ\97ßÐ9þ=¿|NËË\19yMõÉT\1eMi9£ù\82Ê\16{αèî\17ï)°çbQ,èbµÄç\19~d/¿X>/.ÆÏ¿¿:yöò\92fçtUãøÅrEW\95\9c\89'å颠7ºÑ*\18»!E¯õ\8eÞi\1f\8c³ß\}ÂÎ\v\9aNÓγ٪\98aïé\9f[mi§a\96÷iºIë\ 3¹\9a~óæÆÝî'äzO;篠kn4ÞáïÒ}ÙSÐ¥×\91\1aµ&e+Úª@Ñ¥¥ÆRÜj,k*6~NgÓy2ùF«æOç\9bêïØþSЯ¶Ôd"\9908QMx+\80À#\8bãÔ\9eO-UÓðºµ*¯'\14\ 3\87÷dÚÎù¨lÄF\15iã5~\97J\8e\18Y\8fê\1a\11ã<mC\8f\ 5²Aó)qË°ùÞ\ 6ª\8dÕ\13       É:\9c     [6zWõð´ónÝè6à\91\ 4\e\15"µÆöQ\17ÙÞl\81ô\ 1à·\b\801N\0§ÄX$&\ 3=¡.\ 1¯*      Yߪ26\12\ak¥®ØO×Ç\ 6^UÉ.\90)·ª\8bÚ\8fí]aWí\9aÆíØ\16öo¼\82·\8c\85×\9f{ãq\ 4\ 2JK\10\ 1N\12#!¼ Ä\92óÌ\92S[Ö±ëú\98\1e\ fä9¥\8féÍÇo&ã\1d¡ì\90\9a°}¸\ 3\ f\1fY¿i\91\8dãÅ\aDùxúÓë?¾\ e\ 3TLI^Ïç¨>ºÒÙzBåM\10\bX\17Óef÷ü"\81¿(¦Å \ 1²}»\ 6»\1f\98\9b-!@dê¥ñÈâÞõdu\ 2©Ò\0\18iÕH¡)·w\8e¤\93\83nv\ 6ìÜB\1dÅ \9bÑj$ÌÙ``ÁÕìÂA\9cqëµ\1eÜ\ 3~ºS^E¸°ÞSåb\98Pc®¡\ 6K\7f\15ï\8b\ fÀ_\17\9b\82æ\ 5Ê\ 4\83\ 1~yý\82\ fE¡9\e\88÷\97¨èÎ\8bV}r~"*\ 3\17À0æ<\93ÈntUÐ+\11 ±Ð3Ê\80\98v\88ÛÔ\14{o\13m+li\×jèlí\95-%Ïg\a\91@&\8eBTP\b\85~\8dO6\1aèv\9f\r¡<0={[F\14\98\88êÒ\a8\82\9dÚ×
-\ 2s\[lm6=@À*
-{\eÕmA¿p\ 4\81¦#ô¸ðÌPÂ@ð\9f{{½î\ 3NJâ\9d\93¤eÍ*\87YÉoö.׶¡äd
-\95\99úgËb5¥\ 1É\8f³Å23}\10\81¼?\9b_&æ¼\1fAm,Cíuçu\0X)ê\84\18<â:#\ eIJ\86\ 4\15ô]DÅÙSç\80\85¨Ü´(Bð\1c\91!e£°ãÎå$  ¯5g¨UØ\89\1f]½ .\ 39Ôd\184\81eXàÄ[.VìcPHÀì5x\81\1c·ndè([Ì\9fdLU\15hÂà;\8bü®ûÍYmná\vW\9aVU¹~Î^?\9d&t\1e²\87­\8e\8c%\1f\12I<\87N\87Ûî{\12q\19GåjÀ\98\ 2ÁÂ-m\99v\ 1tâúƬ\15\90KWiê»`ð_åvbð\90²\1c\81\81\1a%\96Åd@^´\ fv"¨\16ÜA\1e¸FÞ\98Jt\80\r\ 3ÒI\17\19ç\ÑÙ\1d Àø¦\9e\16´TÐ\ 3\99À¿/Ú;\b\87\92Æ">d\ 5\ 2\121²ØX\9fÒ§Õ\11\1a\99PÜt[\85xSÍ\82Û#L\13¡¤HpÏ,A\ 1V\ 4\0Â\8e\ 3Ŧ4¡_\1f\13\aôà86\86iÓwpÚ\14À\1c\8d¹q¨\1d~dm\80FW\\9a\18ÄÚùv\94Èì:\93\ 3¾\94®EÞx)7Æ#ÖÂøÓY\12³â·#c\87ä¸?sÎþºN#¾Gu==\7f\9e\9fÂ\9eNW\ 5\8f\1fR\b      B$\14Em\10ì\91ÀÕPH¸Iq$ÁÕqÇRÈzWY¬C¥Å\1a¯\81Ì8Y\aIÇTÓêÊ \13°¾d1i\856$\94®Ñ3¾ \ f¯ì#¤Ðè\19"KvEô.\11\8cÐË\84åÎäQ©:\af\83\9a\18@zÕ\f\ 1á¤$        >ÊU,w$«Ò\18\8cRYÕ7®¹a! qxt\17\7fïK,L£ç\ 1÷\7f\16¤C<q§µ\158Ò,Â\f\80ì>HòÄ\ eåµ\ f³\8c\83['­TÀf\85\8aì<ª\8e\19«m£Q\81ï;\eG\98\8b`îã\8fà¬\ eANü\e\14)í1\1d\ 28F\90æ\13Õ\ 6eø(\7f\92oUóÀ6\94+\1e?sÐëÞ4\15ÆNïZ   :XÕ\85-Z¿TS\1eè\9býÈR\85Q\ 2¨÷&l!cÙ\99g\91j`hH¥(\917'û®$q¦¥\bÝ\17\1e)Yi"\18fªã\86¸¼L\13ü#ºá\vÅô\12Cþ -ð2ôm«<\1a\fS\87ë\82Ä\161a_³\eüôaj¹\10B6\    jLñ\82\11ë(u\1d¾\85 \L\ 5Ð\ e\9f0BÅêÛ8T\10\8c\15F\v\ 60\ 64{T6Õ\boT\83K\ 5w²lM\1cdB\81ûæ\ 6Sɸ¿°K8%ï\ 3Myh\1f\13\8d\a¦ãê%iáÃ%è       anCáÜå«\v\ 68\11\17$\8d³E¯\98\85D\83ÃXyÜZ\10\8cÜ\96\1eÆm¬áA\8bä\ 2\99.\14\83\10Ó4vÐ,ÖÐ\1dZ!ßpp\90\ f\94¯¾ÁßC+O\9d\ôÈ3-\ 6Û
-\1dÐ0äZh7\82\v<QË[\13yx\ 5¿8ò#@dÈ\91c\85\94,V\ e\9ds\82\1a÷\ 4Ã(TàêúÉ} \0\9eÓ\8fzÓodÞ<¨%\18:²§\8e>aî3õ\1e¡0u2~\89z\ 3õ\ 5\11\98ËXp>\93NyêM\8d\96~¼U-nd/ÒtMgßÊ\87)>\8cBæé\e\9dIÇRüãËi\ e5ÛÎr>\98÷FPÌq9¹åðË\1eå×Ê­o\10\v\8f\a¢\87\91\8cC\ 4¸Q§#0\ eq        ÎóЫZ&ÉÏ='\v·\8e»KfÇ\1cÏ\89\11éáf\91hüìåb¸öå^Ã&ï¿28\1d2Ëf¸úåhG\8e%h¿J{W÷_7¬\16©rüÿ7\14\17Ë\8bb¹Xá\9b\r´ÞÙ\8aOùñêä÷\93\7f\ 1Ñ\97¨\81endstream
+395 0 obj<</Type/Page/Parent 332 0 R/Contents 396 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 4 0 R/F9 5 0 R>>/XObject<<>>>>/Annots 236 0 R>>endobj
+396 0 obj<</Filter/FlateDecode/Length 881       >>stream
+x\ 1\95\8eã6\f}ÏW\10ûÒ-0\91ï·yk\81N//ÝÝ   ÐgÙ\96cMlË#Éñ¤__Rv<\8b`²@\11  u(\1eò\90ÔëÎgE\ 4ï_ú\b>~\92"\81¬\bA\vhv\81;
\v!J¡êñ\8e\8fNÛ×·ßw\ 1\8b!\8dC\16B\ fyÈ¢Õèày\81B\9f\ 5\b\15   Ë uÆ\15J\8a\9cù\b\ 5
+ä%\8b°0ÎÑ÷\8a\86E\86\ 1ÞQâK²ÔÝÌÓÍ \8b\11\1e\15\8c\83\90%«µQ&D\85\94~A\9eÎÚ°(pX\18Ä,\85ÄY\e\86þ9ÝK\13ºç¬+\16ç\19¦\8bX\98¢Ïbm\18ú\7f\879kÃâ\byP\99\10ë\8b\9d±Aa\80©S\9a\ e\15\8b\8a\12\1f¯/\16a¿\1en\9b\83\rõ\9e
+\94\17Ó:4ØÉ4\8fY\90¥p¨]\v}8T\9f\ 3\9fÁ³\10À;£~>¼ì¼§\1cV÷=v+J\13tÿü·m\85Æ\91h\84\16C%\fð¡\ 6#-þS\rÈÁâ¹±`\15|Ñò¬Þ.0\19¡Í#EÄ\86E!P°\14\7f1Xkíøèyó<³qñfJ\1f½\a@\92íþ\1fª\170ò£`\14cïc\80\90ùK6w\ 24üõ&ÈÓ/_Ýõ\8fn\e5éJ4È,Ø ¬7jõ"*k<ùR\9a\99o\91Ü)|ÁL\0\9d·üÔ\0Ï.Â\93\8b@I~ÄR©¡\91Ç\ fê\9cE¹/¹\11µSj\91°á\95`\eC?¡¢¥\0=\r\83\1c\8e\8eݶÒ\90ʳÒ'ì[«´­&û\b«"#\e½{\99ÜÊÍ++Õ`¨N\ 5f*{iáS/\8d\11æ\13\1dQ3jq\16\9d\1a±\93we¬Î\86ÝJY\1då¾\94\83w\96b&\1cí«ª¨\87Õ²DÖJ©Î\8dQ3\r kÁ\r4Zõ[ùn\80îÒR5/Óp*Q$J¯R½×ZO\f\1eÆ=IaXkûî\ 1     @¼\8d\1d\1f8U\v­\9a\89\98\1c\80ã\v\87$µ+Vóê\ 4Ø\93enÿ\17-ÎËJF\92)-\8f\1düIK\81\83\ 5\7fmiþ0ìÌ»\1a\97L»]x/\r\95z¶¢Á:þY\1d~2pÆ\92©\1cܽ÷è\ f\8b~s+«vSqFYk\81[&jÇþá"Ñ\16òêâÖ\0\95ê.ÿ
+¤å¤E3unÏI¤ª\15$RË-\8e+îB¿hÊK5Y¸¨   p6;ÁO()&Ñ       wVj5\eᦠåý¡\ 2æu\92õ¾âȳ>\b\9c*½À¨Æ©ã\1a\b¢MÀU}»<\10        V\8a¤ª±b¸öò(Ü[5K»©p¿òÛ¥Ø\ 6~ßóaâ\1dmÇw\8fÒ\ 6Ã\ 2»Àôb\ 6\ 1½°ûõ©\8b}\9fÅiFoÝíó\1ag1ËÒ\1c\1fc\ 4Ã\82\96õ·Ãîëî?T/?.endstream
 endobj
 endobj
-410 0 obj<</Type/Page/Parent 345 0 R/Contents 411 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>>>endobj
-411 0 obj<</Filter/FlateDecode/Length 2176      >>stream
-x\ 1¥XïOãH\12ýÎ_Q \95&h±C\ 2$0§ûÀü`\ fig\86\85Ìhw\14   uìNâÅq{Ýí\84Üjÿ÷}Uí\ eN\80»\93NÃ@ätwU½zõªÚ\7fì\1dÇ\17'ôô«\9aÑ1þ\9d]\9cÑð¢O\95¦é^O\1eõhا\93\ 1%\vì9?Ç\9eð\v{N\ 616õÎã!\9d\1e\9fÅ\17Ô;ÁGÙ}\1c\1fãÄÍ/6\80µ½Á\0«NÏ\87øÜÇ\7fYún´×½ÂÞ!\8d¦°98ïÑ(\95½Ç4J:\83¸\1fÓ;=5Xìæ\9anu®\95ÕoéªÒúßúpô;¶\9fR\ f»x{Ô\1fÆ\ 3\1cÐ\19aíÔä¹YeÅ̯\1a4«:´¨­£\89¦Ô\14\9a&kâ?f*ç§z©sSêÊn\1fÝ¡²ÊLEÎ\90\9c
\82ÿâKÌ+\ 1\1fħlû\93zÐdkñX9Â\89ÕzbÒ5­æ\86æÊÒÊT\ f:\85Y1\99\98TSæ?ç
-\9e%¦.sñ(Uk+;æ*%EÉ\\15     p0l1B´@¼Ï\16×:Ïé 0û\a|P\ 2\80øä5¶.5\95ºH\ 1\82ì\9e\9df\8fÚ6\ 6³\8aʬÔyVh\eÓeQ\98Z,0z\ 20Y\83£\94c\8b-\83\85ñ\ 1\9b\15NWS\8dpW\99\9b\93\84°È\8aÚé`R\10ê^%M\ 2¢a\8c,\a´ÆýÁ\90¶Á\96ï£\93\v\9fÊë"©ôB\17\ 2\986\ 3rE½\98è\8aÆ\9dÒÀ\ 1xk\16dÒT\12´Ô\ 5Ç×äR¶N*@7×v\7f|\88¯¼902Ð&\0\99\98b\9aÍ\90º8,
-ÜêÄ°u{ó\89\13\9af90\qø\85F*A\vð)\v\9eâ   §\19Y\89Ç\87ÞØvðÁÞ«Á\at®§\r6ÁÙNª§ªÎ]¬\12\a\1c\81ë\bY\98&3¸`á\8föùh¨\8a\10²XÇHêÔ­\142\16\9e\83ÙÖ©"U9×\82?ÚJ\94\95øfÃøð\88&õ¢¤º¤ÌY
-YÉ\8a)øbè2~Ç\19póÌ\12\93ëm@ü\82ë´\17\9f\9eôQ/gñ9þ\82¿D\7fþ¨Ò4\9ak\95êêÏ_£K     ÎFWÀ9úæSþ\96\8b"`\ fÂQT\98¨4e]Ú¿¶A\88ÂñC1ãÅ\0U!¨lqH¼e¢\98¤»Ò\13«+ÄÑm¢ïfEª\1fãr^\1e=\85ÐBâÍ\ f\95þ£Î*\9dÞ7;î\99\15÷\ 1\8a\7fÒ\ 1ü=øÇ\eïÝvþ\87àöà\8cC\7f\95\ 1\17ýøÜ/¹\ 4ËàbÍDV\9ct²sSç)S®Ò\93:ÃG5eLX!\83}NOLWY\91Ù9È\80\ 3lk\1fV\16Ø¿\93ÝÄ,\16\99s\9eÐï¿Ý\81/P^\1ck (\ݦöU¨&Y\9e¹µð^ìã<«Ç\87\99\ 5\v+\8c\1aî      DT),¨v¬\99\89MX%ËÊ$Ú\82­3\9cgr\b\91\87lCy_\95þá¦\1e\8f\85*¨T3\rOA_y4w\8b|\83B#ëa\19ó¶Y·ãÌÍ\87+ïöT\89¦á(p7QNÏLµ\8eéöãå§\ f\1f·\8d\1eÑå×Ñ¿¾ÜÞùC½\9b\ 1d>Få\90O\8fr[®\9fÁÌ \eF\b±$\ f\b§\ 2\b#iaÕBIöÛÉC{0(\14\91\1dì\82Ð4Ü\ 5üZ¤\7f'¸;-õD\a\14\fb ÛÛ¤kH¼À©\86=ö'ÕNeH\86\87}\9b¾\ 3鱯R\17ì\96²F\ 4~÷Sëý\8a"£ObÅ\7fµÉ'\ 1nÁ«¶\88\8c=\0\9eN?:²º°\99ËÐÊæ:/å+vÿýOפÓÌ\99\8a±Ânü\ 4òo¶\1cí Ñ´3\89\1f\86*¯á3íH\95à!\9a<2þd\aÇv9-¡Õ\83Þ¾ËÉ\10\10ÔSq³´ó`}×ä¦X_Í\eØ+ðs\10\ 5A    \11.O\aÜ{5
-)4£ÿ   Gèí\83ï\87íÍ-å\92zñÍa¥7ýëAë\12¦8ÿP~À¿T\98\r¦ÈÎ\12\84P\93\1c¹\95\fðaM'\14Ã~8iY³\10\ 4\ 4\aÎå\19æ"\9fõMiÏ\9d+ßv»À}i\1e×±©fÝ\1fÆ\9do\1fo﮿|\1e\1fv9G\91÷ª»C\98&ë;M\98\17µk­fÆ7\84z6¹q\8dA\80\0{aÀÊ\aÍ
-NNUL\bÆ@²\82\19Nþºl¡÷÷÷éÚ   hVÔÏO\91;)÷\ eçë\17\8b'TÇ«å\ 3å\979Rt\7f3\8f\ 6\8dy qé\19\98ï¥Åýl\9a\81÷©´Xò\16\9b©´0Nc\ 4uóu\18ÐÈÏ\ 2<ÄadH_t\eãøV·
-\ôÃZ\18hÞK\aA!CDdFâá\11\ 2\ 5\94ÃX"s\ 1\86\8c\89AE[§K»ï3»­1»öB4ÛöFjÖ2\86£¹kÉ\1cÊä\ f\f\8bòüÀ\e;\v·\81d\89\94åý¯÷¿Ý\7f÷ß\ 6c\9d\83\98>\98â\8d#\10\91\96²B$¥M1Xñ{\8fø\90ø·ø;êy%»xÒÇÄ©]ò"¦\ 1µW©Ð\1a\ 39\9e 8+L\97,\14/\8c¸G~
-m®\0ä§ã\80\83LÉ`\94H\vOËã\ eû;î|ÿ±7>ô£j«tÕ\fÊÃ\86<(\9b¢ý\ fS²tWßßhmj\88¸pòÿ\8bþ\8b¿\1cmÚÜ\11ZC\89á\ 3\88\88\86ûrãrTr1s¦\8cr.\1cJ1\9f\10`:(        \19Ø\89D²µ\93òFWÐt0\9c\80\eÏo?Ò\86Xí \94|ï`G¸\e\89\16\1eá\9a\97á\86(w¯6     \913\85Y\a\1aó\885|u\98\19\80Û\88|\95ÍænCX?¶°c­tø0cÂ\9d t\8b\97\18\10X\82¡\84Ç\ f»^\880¿\10\1e!ï;ñ3\8e/,Þ­\fÎôö²\96«-Vý÷Ó\erlj\ e¬\94[Jj\1c&J¿\7f[\eÂÕ°U7á\15BÔ?\8f{\17\14\rEB\añ       ^\1fð\84Ê\r\88eðV.ía\ 4ºñãÖÎe\1f\81\84÷\b\9fÍJÒ\8bË@¶ÌR\1e\8e\9a\11\8d\87C\1e¡q\ fÂ\85DÎnÊ3\8dé3$V\98#]ä§\9b\9f\91\14eMÁtÂÕ:«pÍoÎñ]\84£lá\17NòCÑ\8a_\ 3ðF\8b\8aâ\17\0ª\9a\80Î\ 2\rûÚ¼w¸22aw¯\824wX\1a\9fá¿.Áj\10,Ä!\8a\91×\82Ðs#¢ví#QÕþ\ 5ÊSC\11\8dççþ."5\91àÝ\b.*â°ÀÛ\8a\ e¯\ôc\89\ e\14Ò°M~ÙÏ:.Å\81Sô¢Ä]cSË»\11\8d;¿ó\v\1d\94\96µÀÙÕU\81\1a\84È)˯Y¸\8f«\1d|Ke-´9\1d\1f67Óó¦\1dôÐ\9dOzg48Ã\fë¯_7~6¡\ f¡\15·æ×(¬\8f\86Ǹڦx_Õb\98¢ÏxMôÍ__Ù\83Óái<\1cà=\1a/í_ð£\8f£½_öþ\ 6¼`ñ\86endstream
-endobj
-412 0 obj<</Type/Page/Parent 345 0 R/Contents 413 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>>>endobj
-413 0 obj<</Filter/FlateDecode/Length 1717      >>stream
-x\ 1­WÛnÛ8\10}ÏWÌb_\92E$[¾;O\9bm\13t\816½Ä-¶\8b\0\ 1-Ñ6\eYTIÊNúõ{\86\94|KÒ\16»\8b N,\91Ã\993gÎ\f¿\1eµãq\97\1ffNmüôÇ}\1a\8e;d$Í\8e\12ÿ(¡a\87º\ 3J\97Ø3\1aaOóÁ{â6\rúI<¦~w\18÷©7\88\93°\19o`póQ¯í÷q$õFCìëà×\9fóÇä¨uÙ¦1Mf\94Ľn\87\ 6\1f\8ch\92y\13m\9a¤ÇDË»L\19Ê\94uô+e2\97N\926\94.´¶\12Ïg3idá¨\10KIjFÊ\91È\8d\14Ù\ 3É{ì²'\93/Gm\8a\12\84\0Ó°\98fÞÜãç+KQvVZiVÒ\9c\89B\17\ fK]ÙßÓ\95\8dÕ\97©]\8bØêʤr¦Í\Æ\85tg-¼3Z»VxO¹\9e«âiËߺÿÙº¼/µq\14\19ZÝþuûùöoJ+ÃÑó\89­Ë\ 1% Ã\19\ 5<£ÎÐã\8a _jºz;\ 1\98Ë°¸W/>&AV\15ó\ÒT¹SRE\9aW\19\1e\9cÒ´\ 2¬ÚQ®\96ÊÉ\8c\9c&\0c\95
-\18,\85ãÿÅÌI\ 3°½o3£\97ôâÓuL\93\85²¤6ðwã\ eÃ\ f\eKq'ÉV`\81[\bÎV\ eFäR \9d¥HïÄ\ÚS\12EFkå\16X#\97ø\8aE³Êñ¦i5Çz>\8c\97ñ\ 3ìÌ\b\8eÈ{\91ºü\81·\90\ 5\1d\9a<ÔG§:\93qý¬3\88{ìλpîLá8\91e\8a\ 3\129³ÎT)\7f³\84H\83I\9f{rÂLÙ\1dö\90OÂVµRY\85me.\1cã\ 2\9e\96²È\98\96SU\bópàI\13&Me®×1\9dÃT&\9dP¹å8Øêõ\96h[t\8cN¥µa\17V çÃi]\8e)A43TnÔEî9°AÜ\8d\93\98®4\97KAï\8cZéû\a\ 1Fv÷I\80\8d\9dá\ e\1ewR\96ì\ 6R2\97\854\88m^)T\9f*$\92\92\ 1[/dAeå\1cì\81\1cs\89\1d\86\1eày\93Hf\ 1\e\11eÉyÑáÔ\86§ ^\9e?r$©ÓÕ\80i\7fá%Тh\93´\10Ì¡1#¿VÊHϸÖå\96ßk\ 3ö\92H=vN\9fy2\85Íí¦\b~\8bA\1dd{ß\9bc\9a©Ü³\11ùFi7ßêÌ\1fØ\0cl]\89ÛÃyKL\9fu\ 56ÃH!eÆÛ"V¤mI ùÒ\0S.     \10ZBìÖ\82\ 1£Lã\11
-\89I\18\90­9V§>mj~\18\8f\12jLÞt\ 6\8fÅ¿ßB\18x\1f\8a]R\85lã,\ 1\9c2\9dVK0××6¨\89\ 2E\85¡Ìà\9eZV˳ý¨·R3\82\84\83x¯ÿ|qqu}±\7fø1Ý òË(\97+\99C}\8dL\9d6\ f7'ûÆ\98\86ã¸3賡\ f\17ç/ßü\ fvÎ?N^½ýpý¯\1câ4m=Z
\1dòôS¦Néc¡î£\Aì6TF)æß\8f\1aõB\1fÑ\81è\8d( )\8f\8fB~Zk9\rMªUáo\ 4¿°´u\88æ¾ó\97çï\7fdl&¾ÖFv:H\9dÖóÜj\88ö\1câ\8cVpV\93kS?/9±ºüi¿³f}íüÍ\89×ÓàáÆê\v߯^ëÇjµ!úÓ´\8a\ fý{"úF¿\ 3zÖ·\92W\937¯¹\ 2¬\17.\90\9e\89/8t'ï]ÓýX\ 1÷=Ý©fÎ\ f/n\1d¢½^¨tA©®ò\f\9fE*ÕJL¡\8aÞü\94û\b7^\99ùÂfÞÕ-\8a\19±W\94´\10Ü\ 3 ½\99´j^ ùÙ
-¦}7eýØ\8d\b\8a}\17\14X£ñÞ\90oÒ¥\80¬çÒSl×ÿº8UÓ\85í»\f\ fë¶Åm\ f}\e\ 2õ\bæ2(s\84î ïã\85[>"p\8a\1a:\8cا\1e/\18±]aô\1c'\ 4\7f)÷W­ÐRY
-9G~[\b\88£DëÄôW@HY>o\8e9¿¥¶V1È\18\920\10ø\11f?sÇϺzsÒd¢!\9b\9fh¶phÈu\104ȧ\87t\aü\86@\90n\81\ 1ª¸\vQûî\8eg,#,¹@\839§¾\85¶°\93\87fÒBPµY¿ v±k¥UF½v¯\9eM\14&!̽<o\15<|\ 1³ý(wì2?·ú\ 1ªDìK«É\óà©ä\85©l\v@ÃX\84¦1\ 1ð¸ÆÇî\1cö\f \P\82R\8c2Ö= Á.¤t6°\8aù±S\f>À©t<a\96HlÓ\98\1e Py\8bÀb\98\f\81o\1að\ fr\b¼ØG\9e\16·m)\f\9eû\b\1e7\0\97SpNÅhöOòâ\0\98\9b#Ql5ÝZ\97û\1d½;hÇ]ܽÐ\10w\9a\90¡©w\87ݸ\1fÖp?xf\94\ 1;6zÁ%\94\87\922Ò_ 0\1cÅè9ÛÉ\9c\97k\f{|\ 1ÀdG\1a\84äIÊÉÂ\ fd\87\8e⺶çb\93\81àbSBo\816.oº\98©yeÂýÁOU´K+ëX\990\913)$\86¦5\\9f\89\91\9fo%<\7f\83\ e+\85ë\19ª\9bÇu¿ã\0åï\9fãù\84«\9e?g\8aÁ¸*½îs\19\82a\8eæZg,§\18\81-\9dEM\87ÝOQ\13ÛN~FõT\96à\96\9ctú¸-\8fâ^¿Ë\105\93øS\1d3J\86ã¸\9bô)\1a¶q1æ)\9e>ø«\11\82®\0ħp\ 3ãH{Ã^<Ä\85ÙCßmó£\8bÉÑû£\7f\0uQÛ\1fendstream
-endobj
-414 0 obj<</Type/Page/Parent 345 0 R/Contents 415 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>/Annots 146 0 R>>endobj
-415 0 obj<</Filter/FlateDecode/Length 1392      >>stream
-x\ 1ÕWMoÛF\10½ëW\ftH\19\90Ô\a¥Þ\9a4N
-$\85k«A[ø²"WâÖ$W%\97\92õïûfɵ$Ç\81{i\81°LqgwfÞ¼y³þk\10\8aå\84N\1fõ\96BüÌ\963J\96\8a6\83Ƚ\8a(\89i2§´Ä\9e\10F\8f\1f¼G\844\8fB\11Ót\91à9ƯÛ\e\8aÅ\ 2«þ£7\9d\85K1ó¦S<ö¶!Mgs1éW¢\89HÎV    \ eí\8e¿Xy&\94Él*\16þüS(>ê\88C¿ù0\88§ì;\ eC1§\92â9GÝ}+èvpþ\1d«É\ 2Ù\9dVO9¹§>±(\8e\1d_$6_\88åWÑ¿]=\83å\9b«)E\11­6\8cö|\91Ð*s`\87´J\83ëBÉFQ\9a«ô\9ev\85´\eS\97ÔìTª7:¥ÊXÕ\90®È溡̤#Ò\e:\9a\96r¹WÕw\16ï*EÃëZïÍÃqH;\99ÞË­®¶´V8
-å6õëÕ\9f\83\90Æ\09\86ïÀØ\ÕÏøÒMÓªFÐ;SíUݨâ8\82\95\vOf\19ÉêØ\87csi]\f÷\959\90\84\13]îLmeeÙ\1d/=õù\98Ù]\0\83ÔTV¦\968t³An\8aS£Rj¼×\15\9c\935xÕeÝ'\9cJ¤{÷Zp6o®Ò\1eÒq"\16\11J-¦\9cÚ]<O¨3ð\98»õñd     JÀàÚÁÃ\ e\9aÜ´EÆN$\rS¤Y\r\81sceQô1i\80Ô\99\93ÜX@¶nu\911´Ú
-ºÅF ²«Õ^\9b\96käöú\83\9f`¾V ~iö*£\8d®\eËù©ªi\81\1dg\8f¼Õ¶Ööèá¨Ô¡8:\87Ö\a!h\95«\8aê\96É ü[\a¸¤C®\võÄ'\\94ò^\91÷\ 2_\«Ê\90Yw1ïj³.TÙ\8c<YÚ]a$§øOQ^R\ 4à74\8e\17"ZÒx\ 6¸\19g4½\88\19¤¶N\15­d½\ 6®\97\85\ 1#cî\85à\8a\ 1\19u\8bó¾¬ÁEè=Ý\98ò´©U\93\ 3\eõÀ\94\ 3\9e\fF­·¹%f­6\15£ÉÅ!Uî\80h¦k\95ZS\1f\a\82î\82[\85ÞyëË*«ì \84µbþsÉ{&4C\92k\94\11<|,Ç÷ÝÁ!-\19\89HL'1R\9b\89\ 5þ"=¢4£´­kUY\7f<$¦[\92­5¹\92\19Øõê\15ñ7ôÆ\86\9fÅ\e~Ò[Pä2ð±÷\908Oðàx\91\99\17ãpl°]-Æ\99n\8'uzæ`C\1d#.\18\ap»º¢×·jD\rº\1f\ 5qòñ\12\14\17!tg¿\94Ý\aÈ\0+\ 14B7Ð\91#jþëÍ'\148COuúÄ«\et\0íÚu¡SD\ 3\1a\9c\ 5
-²ÃVi.«­¢Âl±A\15Ù\88ZÈ/V|iz\91ä\93÷,h\rÈäêuÊ'Ø  zðÎ\1d÷Él/³\b\4}\13ù\1e\ 1á'¨\9do\8f Ú£½}?b½e\1f{I\88ñ\ 6Ù}\ 4ßo®?_\1eùØ.?Uèù¢0\a¦¥U\ fv\ 4\18\80\vú¬Û\11û\1eúºÄ\ 1\1d´ÍIá\ 3\8c\eÖùÐé\87w
-ÿÃ\ 6xto9:\97\ 2»î\ 5ö\7fÚ«\fÌY\16?`¾\80\v¦r:\92ª\9d«0X\86qÛ1\84±\85¼cêò\83SÿNp ?¦¤w_nG0>@\85d\89\81å\8ec\ 2v\15\bû
-À¥\1fº»n@\8f¿Y"¿'\10<ü;3?Ã\ 2Gös1\aC8\83\93â¡\17KéÒà¾à50è±?ª¶\£à,ÿ©\81\12¥Ö\17ÖÇ·zvGãè¡d\9a?ºÂ\94«-Á?X+裪À;m©l1ÔÜ\94k\94\9bn<Û1¹Ý½\ 5W\17\8e¨\9b|=³Ï°á;Ã7q9a\80\19\878p\16ÏaÜ4¸\10\1e\80ßÄïâ\ f\]Ü5
-¾ø¸Ó\85ÖÝ\ fq£ëÚ\92\8a^úN\ 6îÉ\19 äÖÍeAï\8b\ 6êv\96[\9f\19§\92cà¨N@Ï\12\91E\r-?\92ÜK]H\8cÖç\8aÀÙº\e\94\8f}WàúÀhº O½\86\92¸qÿ¢®ÿGó¥+Ñ·Ç\9c㧯£\9b\85ÁI\81úmÁ¿:w\16}ßEÉRL¢\19ÍçS1\89\9dâö\17dúQíUavh\86ϲj¥»\93\8c½ý8        \117ß^ Ã~òKúY\1dèKw·àô¦ÉT$sü\17Ħ\93\88_½_\r~\19ü\ráýðÆendstream
-endobj
-416 0 obj<</Type/Page/Parent 345 0 R/Contents 417 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 4 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 149 0 R>>endobj
-417 0 obj<</Filter/FlateDecode/Length 1440      >>stream
-x\ 1µWioÛ8\10ý\9e_1È\87FEcÚ²|\ 6(°M\9a\ 4Ùm³ÙÄ=a  %Úb+\89ª(9ñþú}$e;¶st±X$0ds8Ç\9b7\87~îµØ0 õG1£\16þºÃ.õ\87m*\ 4M÷|û\93Oý6\ 5=
-SÜ\19\fpgùaî°\16õ\ 6\1d\16PgÐdz\1f°¾»\8c\13(\},e\83\1eókÙ6ä­\9dµFûT\8bv;½'ÕúF÷õù^{Øbm¨ôY\97R
-:Î\19ó-¡\e¸Ü¢\ e¼\1a<ä ÂjAî\ 1×)hõ\9f´n#«=mwºløkAù½¡uv\a+\1aúk\1d\1d8U#Ó¢`\0H·]<\1e\99ȶ\0n\9eµhH£)ù¬\13´\91\97>ëö\ 64\8al\1eZ4
-=¢\94ÿ\10ôrô}¯yÖvÒ^$ué~©ï{\8d*O\14\8f¶ä\8a\96óð\a\9f\89BÌÝ\8d\ eù¾1Ùp6\eí¾µ=\8a¼Û\18R+\rNÊ{J\85GRS\19\vº¾z\8fð\13Áµ ¬J'¢ ®)\12¥(R\99\89\88øDÍ\ 5£sE%þq\ 3\11ä    _àèÃõ;âYd\9ckÁ©\0\97¥6#;\95\89 ¼\9a$2L\16¤2ºQU\11\8a©*fÐù\ 16\8dÔòF¦J¡\8dF
-c\9eÍ\ 4%jFÓB¥VJÛ«TòbÂ\93\84jp\98\83fH~Ç@\ 3?\ 2 cü\0£Y\87Ñ\9f7Íö&|\90\8dÄ\99,tyè\ e{5¶\9eK\9a®\80g\19ó\92\16ª¢\98Ï\11K!t\8c(Ä]®\8a\12á[×å,.i.
--\11\9dÌ\80\11ÏH¤y¹\0P\85\bKU,6Í{\8cÆÞ\8d\10´\7f\É$\92ÙìQ\10ÍY\1d§Þw\99\18¿d4\8aEF3QZ\ fL|t#Ê*§TEU"\8e\9c¹\rz6Ú]6\0M\114Q8×Ôø; Ft\94kQÀù#\9e©l\91ªJÿ\86C&¿Oô-g\ ep\97«L\94GM\9c\15J\95MwN¡"¥ÛÚ\98Þ\8cp\97\9f_\0â­DÖ2a(E©¼#5\ 5Íæ"Qy*2Ä¢T¢mlÈ\80Ì =ÍeÂK\83k\89\ 4Ö\85\ 2\98.\8eßÓG©+\9eÐ\eðääÕ+Ë\83{,¼Q©\0®!\8còbA·ªø±«æüò\83³{H|Îam\ 2ºZÂÍy!\ 1\a9\f4%\12\95\1c«ÉDh\96¥ºb"ªvLæ"\94S\19JÐsqh\89³\8ey\99\94º6yUªXðH\14\9bÐy\87u\15£½ÛZ÷\8cd¨²é\96\9c-\93-¥:Þ\16º\aªã\91aÔ6\9aæÒ=ä>ñ"¿¸|\ e\91C\90=L*K_Yj`\ 3¼st+K¿u¿´\93\ 3½Û£;\93\ 3\9bCkp§£zK<Û=WÀ'®     ¬ÊhÙ\80¶¢~\98\83Þºü\18\9d\15\vd'¦èX\98F®9¡`Á`[IS\99\81OâN\84\98\80î\95ñT,\1d[v¸3U@\8c§y"êîñx±ÉL\97àÃé\9d¸\84¦×\ay!çên\ 1G¾ÙÊùö\99}a_\19¬\1el&o·\88.Å]yHb\19Ë\16\f\17¿\1f³[©7\95x.Hí:÷ªÏº>\9fò2\8cQW(6Óʶô]½9ùãÍùéÅÛm\8d\1aM\rEùl\9bY)x½\7få\82¦\91àéx\\7f[=Ð\95\9bsãñçñøËxüu\7fÓä.\12h'\aèÏ\99ºÅìàÑÂ0Ãå\95®«ç=[²à\17̸®\ 5f¸vïj£Q'Õ\92ä\1e_\1e\ 6\92\14ÜIÌ\8aÖ\98\83n\ 1(cÌäU'Ƥ)ÕfNî\15©Û\19ôv\8fn¢(\15æöl34t\95\10@\95è\88«a\8b¾N\12|2ã\163Îà\19©ì±©lôÝ3o.Õåùî¿Îè.ÃV\80&½Í]\98sc\1a\16\f²êþòp ë\ 1!¦¼Hi.9i\1d?ËIÈP8ÝFm\13¬]º\9dÄJ-W\15;ïU.
-L&ôR½Ð¥H1б»Ø*z+&\12\e\0\904\93ú\93\99ÔØbf\98z2û·«Æ\16èÿÏâQ\13â©U£ø\85\9a
-±´UE\81I¾ô\1aï\17nßXÏ:zñ\82\96óÌ<³¦\99lr\86eë¹\1cØ\9d\a\8e8¹ÇûíÌîÜÚ\11ª±Þ¶\aõ<õû}¼S\ 5Ôëáµ`Ð3\1e.»Ó[·\8d`\ 3~Ï3¬\16ÆTÃï\ fYàw©ÑoaÝ7[%]ÛuÙ\0ÆéRÜÒG·ý\19ñN¿Ãúx\rÀþ\1fy\81Ý;OG{\7fíý\ 3\17Ü\f<endstream
-endobj
-418 0 obj<</Type/Page/Parent 345 0 R/Contents 419 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 152 0 R>>endobj
-419 0 obj<</Filter/FlateDecode/Length 1278      >>stream
-x\ 1ÝWMsÛ6\10½ûWìø\12fF\84DR")\9fÚ¤u.\8dÛÚJ\9bt<ã\81HPDB\ 1,\ 1Jf~}\17\0)\99\8aRw2½´c[¶ÅÅ~¼·û°úóbF\96\11\1c_\9a\rÌðk±\@²\f¡aP\\ 4ö­\0\92\10¢\18²-\9e\99¡ÑáÅ\9c!3\88çK\92Â<Mðï\10\7fìÙ£U`ìoß\\84É\92,!\9e\ 5$\84-DË\90Äý\7f\15Ü¡ë4EoÃKïz\11ÎHÔ»\ e"\92\1c|Ã|\1e\91`\b:'\8bÃ\933      Fi\80G¿Hp\88e£ö\ 1Ã$Å´\9cé8`\18\92J°H±°3gΤ\12,\8e\ 5=Áê\*ñ\8cÌ¿ðúju\86\84éõ\1c\82\0V\ 5ò\15§  ¬rKÒ\fV\99·/yVBÖ0ª\99\ 2
-\9bϼ~Árд\ 1Úd%ß1\ 2w4¯º    t²\85\8c
-!5´\8a½\}¼\98^/zÏ\1elé'\ 6JV´áÊoëJÒÜ\99\fÁ=\90\ 2tÉàN¶MÆ
-Ùl\18\9eÂ\18Â:\9b\81\8f\90\86\98\9ewï              "+t]·úþ%\81\ f\18ZÈ=\94tÇ@K<&ZZU\1d¸@Öm\9f®yü$Â\v\ 5è\ 6\14kv\fK\129vBŨB7\98JÁ«ÓØu»®xVu\ 4ÞõFÃ\ 1,Ü`\84.^\97T`ò?É\r\14\8dÜZWÊVe\80[cfPÓì\13Ý0â0XB0w\ 4øQ\80¼a\8d1\89HLàw.r¹Wc¨\10\8aÐðä\99ºU)Û*\a&T\8b£cHp(`ú\95aM\ 3V¦8\82+\vxÝmö\À½gò2NO\ 6\rûØ\83Rëúj:Ýï÷$³ö$\93ÛéØÚ\9e\ 6þÛÖ1WȪ\92è\7fcm\8f|áqd$G¨\r\1a\91Sl¦>\995U%VÁªÊ¢a\8a\8b\1d\ 6×¼Qzâj\8fO:É\14«Kª\8f\15\17\rS%rÎ\1ekÙhÓ¤\bAÃ7å\11\ 1.\90}*\80mkÝAÎ\e\96iÙt.¡\11   âsÇ\18\¾jy\95c9\86Ô\93\92\1céæYϤº\ 4º\96;fðX\95\86i\9bAÏ ¶\98nkØʼ­Ø\95\8b8\83¥a\1d\19\8fB¬zARü\8d´\ 2d;\ 5þç\bÀϯj×\9cWTHÑme«¾Ã§\84\7f\«=%®­ì°\10ÁôÕ\14\9f5Rê©{\ e\99\85\8d=®Ò\1f¢&6:FµY÷C\fkSºÍ\7fèT¬\8a+Àï¢5\93E[-·Ø_ùĶ<¾\9f\eì\0D~ÝÁP¡S\16oHbúææ\9d\91\82\8eâã\rì\ fSþ=\8e\89IG0Ã¥\84\bôç\91ËG\ 5\eÕ@\85\9aÀÏ¡p\8322\80p\90\91\86 ºe§5Õ\rßÉÇîÁ¢KØã\89oÏ$}\ 2ÃèÈÃû\87\ f\ f\7f\9c9è íµ\8bkãã\89ú\1d\ 4ìÚH$J\84é¶c?\9a®ï93\8aê´Î\9aN\8c.»©è5îo%ë$ì·\bXBà\a¶æT\8cQ?è×\7fzÀi\9e£\88U(ò\f\e¿;Ãvnk\9ffö:@Ã1
\ 4x\ 1\\9b\992\97&­ð\9aÍÑOÉ\1a6\ 1\9cé\13\ 6Ø#ÝÖ\153ÓÕ´B ø<;\r\98\81\8b\ eþ\ epå!\81O«º¤~\0\977l\8f÷£Ò\18u;Ü\11\97ã\14Ï\8bÄÄ\84\7f>týiã[\19\19ºÑo
-\1c@£Nà·¨om\ 6þúù\80\bÏ\9e£\16¸-ät¢\b\99\ eC5ªï\81GiL°þq\0\ fú\95\ 6o\815ë÷\ 3\96£fË'Ë       ðC\ 1\87ɳz;\ 1Å\91\8f\ eùSm?û_Wt»ÿ¸\86\18­?ÃÕ?@\1d\85\83\1e\9b\r %ð\96fðóÝûq\19ÿ\8f     \1a®È¾Äo»"ÿ\85\eRªÇ\7f~C\1e{?íW\92\0?\9a\ 2â$$        îâx\97þâ®\ 6T¿\1d«d\8d«å[»\92\1a\16ýÁÞOfxÿ\9bU\ fn­ ÛU\ 3Ì\þæV6c>Oæ$\89ñÓ\8d1\8d"óÖ\8f«\8b_/þ\ 2a\88ï\8fendstream
-endobj
-420 0 obj<</Type/Page/Parent 345 0 R/Contents 421 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-421 0 obj<</Filter/FlateDecode/Length 1188      >>stream
-x\ 1ÕVMoÛF\10½ëW\f|\88\15@ZI¤>{´\13¡\ 1\9aÀ­\956\ 5\f\ 4+rInMî²»KÙʯïÌ\92´$Ê®{ð¥\10@Pä|¾\99÷\96\7f÷Æl\15ÂábR\18ão¶\9aÁb\15\80\11\90ô&þÑ\ 4\16\ 1\84s\88
-ôY.ѧ½\90\ f\eÃ|\11²\19L\97\v¼\ f¦xë\9déÍl6eaóf\12²ÅÓ\eLÅÆÍ¥\892]\ 5lÕFAß&H\9bËgmM's\16<\17\16Âpy\brRJ°\9caþºÈ×J °\8b¶ìàßK\99\ 4!\9b·U\1f'|¦Ãåò`ÚF½ÚôFë1¬`\93À\84\0æ\88ãl¾\84Mì1\1aÃ&ê\ 3D1hûh\85«Ê÷\9b¿zc\18N\10\114ÂwÛJæ1=\1d­§0\99P¨a\1dk\18,|L4ÛdÒÂ\83Ìs0\95\82ÚzÜX÷yåt&x,Ìi\98þà9ËH«¤c\a\Å]S2\93ieÄ\99-\16\10n».\ 5¿ïZ3XKÅó|?\0éê\ 6"]îAï\84\ 1\97ysB#Ä\8dÀ6\95\88\84µÜì!\91¹°à4\19\ 1\eµè\8dêç±4"r\9aì´\81¤2he 4\9aÜ¥Ja»ï\16wã{\9e\8aÏXc\17&F-b\15Á\9c\8a+C!ª\12\8e}°x\97ùjn\8cÜéÇ}ó\92\95\85-!\16\89TÒI­|å\ 3(t,\93½·/ëÌ x!¨£\82»ÈGjÒ¶Í\e\91\vnÅÀO#C¸¨õ\8bk#¸\13Ð\ 4¹ÀuqN+\ 6\9f\12Øë
-l)"JÄFMY¬¼Oi6ä¬+WV®õõ\ 5\f¼WÄU'9\9a+\88ê\ä\1a\8cÄd|\9b\vø!Kß×\ 1\84H\17\ 5nÍOõv\9cP`\18ÌØ\12©à·\9b<\874\1a\8f\19\8eñ»gÁ÷G¶g?\18½=ª»\ eö2\vþÄ\86±têMá|rÍÏÖöåD§Áû\88²VûBW6Ç1é¶\8f\9a\80G+Y§±ÌêÊD\ 2×-\15L 7\92
-!À=é\84\1d´ r\94@?O¿¢ÒÕcÅ\91]¢4ÆZ      \ 6_-î\ 3\1a\84¥xGé\89\99×\19\80_t
-\89Ñ\85÷©Ë\ 1ÇÍ\16éÕ\8eØoòh½\82    .r\82ú?\fQJh\12s\16²\15²Ñ\bquûá´h4\v\16d\84\19$¢«áöÐì¥\ 5l´D:\ e\13n
-ØI\ eÖf¯\ e\1em Jº°\9d&>×¹ëLë\16\15\99f\ et)\fwÄG»·N\14\fþ áç:ME\fR\rê\88óV\v\91\ 2\16ÂÄ\9dßö\8cïð<4Âf8jñXjãÐ×#O9:\88£2Yâ±T\b\ 4.\9b(J·G>4\8asÚA\9fÁ]ÿV O¯HÆ©N\9aX=Qú×ðÖ^\0ߢèݽg°¡\ 6PÆ_\85\10O\8d¨2F¨§\12\9f\ e\8d\83äûw@ÿH¯é\9e\8d^Pîs°ÿs!©\a\15\11\14[\e\ fI\1aNQ8\ fý\90IÔ¸ZO,pH\91é\97\ 4:7ÀM\94É\1dîÿ-\8fé` \19CVãöCe\9b\ 3dv:Ï6uMÆÓä}ÀaÑ0\8f\96\16·\0s¨îñr×W\1aT\94¸\12e\91FA\82¢ô\ 3ø\rñÒ¬*:­Zq¡°M¹ç´À0`\85¡\93ì0ó\9aÑtJuÖª¬¶¹\8còý\v´÷!Þ\8aèøq\ 1\f¿~C\14OÁz¢úZ\1aëÞ\80\ 6té õ?"O¬aýéÛç\8f\8dî.\9b­\9d,V,\9cÌ`>^±\19~\ 2£´6§\1c|\10;\91\93¨ÁgN»F½\ f[ûáb\8c\9f\92$Öð\9b?<¼\9eÀ\17ñ\0¿×ªDæÓÅ\94\13\13¿-ã~8¥G\1f7½_{ÿ\0)e\82dendstream
-endobj
-422 0 obj<</Type/Page/Parent 345 0 R/Contents 423 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>/Annots 157 0 R>>endobj
-423 0 obj<</Filter/FlateDecode/Length 1518      >>stream
-x\ 1ÕWÛnÛF\10}÷WL\85 Q\0\8b\12©{\80¢u\12«0ÐÄ©¥¤)` X\91+r\13\92ËrIÛê×÷Ì.)Úr\80´E^\9a\0\9d\9dÛ\9993úódä-ÇÔ}\941\8dð\7fº\9cÒ|\19P)iwâÛW>Í\ 3\1aÏ(Ìpg±À\9dö\83ïx#\9a\8dÆÞ\92&\8b9\9e\83\897u\97q\ 2\85\87\8fFv:[t²\90·v:\8dö©\11\9d,\ 3oܨõÇÞ¼\95\1dÑÄ\9fâêW\fÂM\1f\82îäÁ\9d¯¸2\1e\8d\ eú\83Î\95Ök\9f]¿úåd\11x\v
-F\vÄ\95Q0e\9fÜ·\94Ö'KH\91\1f,ñ2£Éh        Q÷\8d\ f_nN\86«%ù\13Úì\90ÉÙ\ 2\ f\91\886a\7fæ\8d=ß÷è,S± ËõóÍgÈOÈ÷\9dü \98C¾¿R¥©NÝá¬9ìS&¾H25ÒW%¢¢½®)\117\0­\94&I÷$ï
-]V2±¤RÅIE7²4Jç¤òJ\93ÈIfEµ§H\952¬t¹\7fh¾ïÑu\7f-%õ^Ö*\8dT\1eãJÄ2#\1a ³\ 1»VÊT
-Ãg\85\b¿\88X\9a\1e\89­¾\91×Ï=Ú$2§²Î_8Å#ZrX¾7\19\a4\b¦Þ\ 2\7f¡\83(\8c(¬ËRæU«\1e\8eD]éD\8aH\96ôô)ñ·Pç;~ö\86ü¤bdà¡ã\83ÖÂÜZ\82\ 5ëH¤iuññ͹ç¤;T\ 6c\`k\16\8e\0p\||¨\11\ 1;$~ձʠ      É[ëº\fåN\97±|f(ÔY¡R¹\13eF7J\901É7c\86\f\85;Ït\8a¼\Úø»
-x\1cÉ«DkÃ\88·\90êB\96¢b\0ÌÞT2óèwÎzªã\18Ыü;\94M\8bI\ 3ùw("ôñÿ¦lþIýÚV\14ên\10)óM\bo\13\15\ 2úR\8aJ\1a\12\14ÿ¥\8agܦ¢$Q\86\89º\91\1e­E\94îOmS\87"ÏuEµiÊ|ú\90\ 1Øl]¤ZØÖìj§Oht®\93
\80þ\¢±s}\ 4k\1e¨+nÜ?À%¹¾u|\82jÏD^\8b\14\9câ\f\8d«\8f\9b\ 1jÈÈ\12eÂ|Ñ@íJv\87&92[ÔÛT\85éÞ£÷m]ÛÚ\90pÀæ\a*^%"\8f%¡ù@n:³æ]ßpÒ¶ð¬e\9f®·A\9c̸\83ñ¤íí  LØ<5LFW\87"D¼%½s\ 4ö\95Î÷fÌ\ e
-!qF\eª#e\10\9d\88\80\93ªøK¥2Ä©Û,áå\81)VÌ\14§6!±\86\92R×qb\95¹V\0\93W²0\963\9bûG\89\82þH\ 3\97Õæ\9då\17\8cäA0s\ 1ºØ`Ñ\9etS×\ e1ÌÓ>\ 1\98\17á\83ð\98w\86*\a\89!3Öêad[5¸<\\85\ræÞ\82\97\ 2$ä:\98Íéaºìáa8 dË\17\8d\ 4\1dj}\91ë|\9féÚ¸\9bÿEo!\8c¹ÕeôH·ú¼5·b\10É\e\9921\9a\9fS4¤9\ eößX\1e\ 4\vÏ_vi¾,¹\13\199§åa7>ÌF\9fË3\96\15º\1càI\13\96j\8bF·óÑV*Ï\95\ 6¾Ë<d­-Ê\$®C\ fXt@&\95Eòht\f\8bR\7fÆ \1f\8a\b@\ ee¤ªv&{ERü\14£æ\8aO*úÑÇ¿\ 5\15I\8bsÿ\94×
-;M\9a±zoÖó\86!°n\1cf\8bG+\85öÄ{ô\85\8d\94\8aTT\98\8a\19&\8f­n#1¤1ÝuZg¹«ÿ\10ýþå¸*΢¨éÇ£a\8e-\84ÙèV¡É\91ôÜúÝí\1f¹dæÔ\r\9d\82Msy{ \1c\9ckòp
-è86îav\12[\93Þ\1d{òäÃùÕúâò-8òÉ«Ë×ç\9fÖ\9b³Íûõõó#lOIzqÃ7íRv/YXì<\1f:¶²\12\8fî\1e\83ÿ\16\û¹6\15¼JS<[\92\ 1Ó\15¨]zÙnyXÙ\90%\91ïI\14Àº(\15&H\9b5G\97.Y&Ñu\1a\81\84¥\v¿Ù\b\8f\88\0ék«\841ë­ACÄ;\10L­@×\866\1a\8b\1cêÒÑ¥ìyàc  \ 4ÙÉû\8elõÝu_\1a\9e\1fW2\93Ù\96\a@E\12#çÈ2S\1d\83\960CBKïJZ\17\87ëz\9b©ªGÛºªtn~°Ð7Ñð<ê"\82g×}Ø"npÄ\0×­çc®I\94\8a®\9dj\86Ù2Í=hnUå¨÷¾÷*w\15ÁëqW7M5\9fÒV¶MÑ:Þ{_DÈ\7fÏJs\90ÄÓÍ£\8b\1dCÄL­\1a\8aÃ\ f\ 2K}þ\1c?\12ü)ÿ
\82)vá¨ÿ®T7únO¯[Æ¢7vÔrÂ\ 6­ü`>²Â3Nl»7     z\8bJÿà\16z\16\9fÌ'Þ|\86ßf¬w<åWç\9b\93ßNþ\ 6±<\fcendstream
-endobj
-424 0 obj<</Type/Page/Parent 345 0 R/Contents 425 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 164 0 R>>endobj
-425 0 obj<</Filter/FlateDecode/Length 744       >>stream
-x\ 1}T]\8fÛ6\10|÷¯\98Þ\93\ fð)ú°-;oI\9b´}hÑæ\8c¤-î\85\96Ö²r\12é\92\94/÷ï;¤å³\13´\85aAäÎpwg\87ú{\92\ 2\97\87m\90ò·X/P®sXÁn\92Å­\fe\8eb\89ª''%èå\118I\8ae^$sÌW%ßsþ#÷\82Ê\ 2þÃ\8f\93y¾JÖX\94Y\92£Ç¼,\92Õ¸êp\1f\8eÆb±â³GQ$Ëq\11BWKòÖ\81\16\811VÎ\99ûL\9cçi²¸\8a^¯I%«¼\8aÆ\94yÆó¾©ýífòêý\1cY\86Í\8e\12,W%6uì;Ŧ\9aöF·ÞØV7x6\83Å¡S~gl?Cµ\97ê\11~/¸\91^µÝ\r¶æ\v\94\8f[G±Ï\{ozx\ 3m|»{\ e\91\1ef\17\11Z\9epPÕ£j$ÁfߺÛÍçI\8a»¬ d\9bzêöfèjÔ\ 6­ÿn\8cåKöÏØÏ»P\föê(èU-\10k\8du3\18\v-R\87\94½z\14Ö¨t#\f\ 4x¥4\1aÃäÖ\fÍ\1eâ\9chߪ®\8b\85Á©^à¼\1c\bß\ e\1eN:©|Èüê}ú¢ÏK}ïêÖã\ 31ÊÉ      t\16q:C«y\90ªC¯_\1f0}S×ÿÁJNÈ52N \8câ®\bãf»Ëd\91àÍÎ\8b\8dÊýkRÂó\92N"üÓ^4Ø\16\1e¦Æ¾Fo\9c\1fE\7f¸=KîNâm\85ÐáÐ\19\8aXCéú$§:r\9ejÛÉ\8c*p\93ÂÅ\11\a]9ÃPè7\96çí\98\12¦Í «Sü2É`\8eà\9f®uQÎ\v\ 5ê\f÷Ãö3å~\8d\9b\8fb]k4þHþLþÂK) ëè\86'\1d\8a½Ið\96Ã\1axûXR««n \vþ§´3\11\9d©\94çñ_÷pUÈù\90Kýö4ä`bqQ$bð}´Vg\1a\8e¦sf\86\99J\r\87Zyªù«<9z78^ǹ\1d¬     -r\ 4\8dà\9e\97©\12öÔPd
-\1fë¹ä<\1d\12i?\19ú2rÂ|jS9*©\1f\99agÃíb-\17ÈÃÔ\89`+\9dyz¸\1d\1dµ\1aÍ\9b\95ë¤È\16ô×x\8d~³íÑ|yÆ\ fr$á@{ý¢ô ºPËÝ\19}W¦ë\93      Gß\86QªÐ\1dÆI\ 5ø\9c\9f¦r¹¢kiÀb\19¶Þm&¿Oþ\ 1\f\94\8c¹endstream
-endobj
-426 0 obj<</Type/Page/Parent 345 0 R/Contents 427 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 167 0 R>>endobj
-427 0 obj<</Filter/FlateDecode/Length 1144      >>stream
-x\ 1\8dVM\93â6\10½ó+:\9bÃ0[ À|\18rI%©ÌÖV%\93\8f\87\90\83°Ûà`K^É\1e\86\7f\9f'ÙfÀ;\99\9a¢Ê\80¥Vw¿~¯[_zc±\9aÒóÃìh\8cÏ|5§p\15\90aJz\13ÿjBa@Ó\ 5E9l\96KØ´\ fg#`³\bÅ\8a\10¿'S\11ÖÆne:_\88éK+p%ÆØí\1e\7f~èM`6£ét"&\94Ó$X\89Eó/£\87Þå\7f¬\86¡\98_¬ú\83\9e\1fMLÁ|~ö\1c \12\9fÏ\8fëÞènEÁ\98Ö      R[\84KZÇ>\12¼\89ú¡ OE,K¦rÏô\99·\96Í#\9bÛõ¿0\9bÑdR\9b\r\83¥\b`Ø_c×±ÝEv¯«,¦-Så\ f\89I\96\94±´%\1dÓrO,£=ÙRn3F4n\81\ 5}Þ³ª÷§j7 Â¿¦Dg\99>º(,Ã\84\vëb\18Ó\100yÏ¥¦\\1e°V!¯r\ fGJÓÖè\ 3NËRu°\ 3JU¤\95Ma­JÂO÷mI\e*Ø䩵©VT\18\8dhr\8b\0³\8ct\14U\866}i)-i\8f¯\ªS×s\9a\95\87¨@rßln¿kö\ 4\v\14\11¸|Lè¤+\9cðÈ\14í¥Ú1°P§r\8f\1c\1a\88áÖH\ 5Xb\1dU9\ 2\94¥\vËêÊDL\ f\1f\85\924cd\13kïdt7¦\95«ÂD̦\ 1\r\83¹Xâ\e\ 6\aì=\f\8b8¡o\91\vò½ñH\19\8e\ 1Óðbý\86Ò¤YÄÛ\e\98±U7(\966\aTÀ¸\1c6·×Å\1f¶~Cïßs\0à{øv¬Ø8òÔ& ·çK\1f¹\8dÎ,\19UàÔ\10¸V2»>º?xÝ0æGÎ4\8a÷?Ö×^/¸rí?\91_Þâ\17ø\8dÞ\v<;\9bQÇøõ8S\15ó\93Ø\97y7?\92U©sT8\92Yv\12î`DÙáLK\17\1a%*ä\ e\94\0\11Z\94ß\98\18º\ 3F\85I\1fõÓÉ\81ç_¼\18áöD¦RÊÑô]í`ÞVÑ\93\bÆ\1d<Þ \90l½O!   K²É©U©åBzF\94Ò츤¸\82X5Å\0@RQ
-%yºçLzk¡>vêÌÈF&- Ö¿\15º\0´öÓ_\ f\ 3ÚVNå \eC«%CØñ?\82\1e\98;^#\9d;)y\91ÖÑ\9e©øáþ\93ËÃiª\93\87¨\99þuA\8e\12í\ 3AË8&ÅÇZ\8fî\85«Ð\99Ö\ 3\8a\f7\8d3§Lû\12·Rï\ 4qÍÇ÷\9d@(N\rG¥6'¯^·zÁåÆ\8b\v¤Ýç@¬\0§y\95\96\1d/\9bÛ.ÿîù©D\16À\ e½\ fͪi\\96\12£s\9f¬Üjô3ß\8d]þ¨\89 \1fP
-Ëå÷\84\96Wwk\89\1a"Ãs\8bl\1a~Ýç\ 6n\93§ÐENommg°¯sy©%\81\8b¾%Åu\99ª"Ó2FÐ\1eM7r\9f\87/Æeÿº\96×\9büN¿iÓ?\1e\8f¢Ñ\91Ðf·¹õÝ\80\95\9fB\10uC\ e×".«\83\9c\ 1
-\80ñ'?\ f±\9dÑUAG\93ú\99Ø-Èïõ(\8c}У»E+Dºÿm}\8d@\9fÐT}Í´sE9K\ 5a¡"\18.6ac\9c ý ù\8a¸î\85|ÔiüÒXtõµzР     »\99ÑÀÖ©±ÁÖ\97ÜS¥éÓN\82\98Ènº9\95\eÂEÂÍ\+h\rå\14Õ6K£ìD\85vB®)ó|\83\80æíIE\1dÏþ\1a\81\14)s\97
-\9d$i\94Êì|\99¨QY^ÜS\16\v1\ eÝt|åf3\vg"\àVçöMCwÈÏëÞ\1f½ÿ\0LX\a>endstream
-endobj
-428 0 obj<</Type/Page/Parent 345 0 R/Contents 429 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 194 0 R>>endobj
-429 0 obj<</Filter/FlateDecode/Length 1839      >>stream
-x\ 1µWÛnã6\10}ÏWL_
-\17Hdëâ[\81¢Ø-ºm_ºÛ$hQ @A[\94Í\8d$º¢\14oþ¾g\86\94%{\93´}è^\8c0C\ egÎÌ9\1cÿu5\8bÖ)\r\1fÍ\8efø;_Ïi¹N¨ÑT\Åò«\98\96 ¥\vÚV83æÓ\a\9f\89\98ÅÑ\8a²Õ\12?'ø/g\87]1ï¿ýá*^,£\98æÙ:ZPEI²8­Jºc×4O\17Qƶe\8a=~Ŷd±æ½1ï\81u\9dEó°\12ëh]Q\9a\91\865\93\18ÄS\7f«\ füóð)Kb\1fª\84ãW|h\9dF\0dÅ©V\14'sÜçWl\1c¯a\9d\835\9b%È0\9dÏÅq\961p~ÅgÇë\8a²ùò´W<¯\19\9d4c\ f@!]\ 3\ 5¿bëx\rë<>í\15ëh\r+*±\18\9f\1d­a]­¢åØ:Z\ 3Á$å\98%
-\89jÉ8$ËP9 \9b\84\95Ü;ZÃ3\0\9d\8f­£5¬é\12÷zO>£aÍ1sO\8c¬£5¬ë\15¢\1a¬\8cz2O\81ÁE]\97\11##®]:OÐW~Å7ò©x¹B\ 6\17§Ø°ö}\eKÍd!é#Á\ 5e\vÜ\8ej¯g|#/Ø\96¢5æ½ÍwÞ`\93F\fçÒU\8c8N¶\f>\83\etA\96"âÁ6,aCÝ\10k\7f\9f´\1a\93ð"ú·÷WÓwkJft_\80Ñ\8bå\8aîs¡1~³\9d¬"úÎÖ­Ú¶¦ÞQ»×\94ëG]Ú\83nÜ5½ívt«\ f\11«ªó¯î?^Íè&ÉàdòN«¶\ 3ßoõ_\9dv­cãô]FqìïºI\18MlüMÓ£*;MO¶k¨Ð:ߨíCD?ÕTàæk:jèFùD¶&ÓRkÉT\87Æ>júÐ\98Gûé\89p5,\8e¶¶.Ì®kTkl\1dÑ\8fö\88h\9bk:\94Z9Mµmu\b1f\9eânN©°ei\8f\9càÞÔ-òr\96¯Üª\9aø\1a\93Kdt4í^ Ø \e\81\13ÿÚgµFo\84¬Ò\f\ 5\82çU\14\83néÎïü<}&\1aãd\eÜå:URç\ 4W\86!øGpMW\91j%î\93º\8anBb't\87Í[\r\1f;\9fÚi\v*\ e¹å-Æq\1e\eµ\ 1\84!vÓê\B\97]òÑ»Dýzpöm{øz:ur\ 5\ 2Ùé¨Öí´mP\1eÝL¿Ý5¶;üiòobüY}      Ôóo\12ùù<Ú>\14n\rÖ\ 2$ý¦\fÙ\92B\8bØ\ 2¥ë\1a\94è¨Ë­­4\1797nÛ9Ç\90\9b\ 6I8t\11·\0ÖçîûÈ'\1e\94\9a¥q\17°õ\81LÐS{\8d\8bÏ;\9aTé¬ø\1ea àI!Ñ:\8fØÄly¦ÖI\14\98À¤x¦ÕC­?øFl\844¸®¤Íiû"0c\82$Ë'\7f\96      "E\f»=qoà\f\85"ü?Eä\1aÆ«s\94OØ  \f£R¾Õh\r\b\83\9d=±­R\ f\1am,(+Ð\16LãÀ÷Ê1\11\91|£UÎ\1d©klÛT¦ES
-\95í\ 6<\0½ù\88ÊsÃlVåea\98« \86ìjí\81\9bè\95Öð70\9dª\7f\99W¨UÛ<q7BGL\81\9fö¸\11"\ 4\93ü ­k    \ò¢Mc\8fH\80Àk\a¢IÖ\85i\\vI+¨«\19\93k\14Pj,°ÊÇÐÆ­Ýí¤\83mQ<\1fì\88¤A\ 3}\0Nk2\82\83P¾Ô\15±T\83\b.¢û\97\89£\ e\a]çæS\0Q\88\ 4\1eÕ\10¥ç\ 3\98\b\98{]\1e\8a®$S3¸"½èà\8b\v\ 2îæ\1aXíÐ(\ 2\ 5ô^èß9n\1dQ\7f{¬        ¬omu.槮\92r /°eû\10ö@#,\r©_\ÍÚÇ@ dgï\ 3¿)
--wÙϨ\11×Ñ\aÅ-È» øè\0\87\1c®i»Wõ\16ZÄÊ%ýÀ\9búÖ\96v.X.¤#
-ó      MmDµ¨ÒªnM¥#Â\93w´]Ù?\98½à¢\f\8dÞ\1aÜÇUdx \8beN-S\89oáÓHö¼&Cãt\87]£ð\\ 1\8eÏ\ 3??t¢3ý1A£â\9dô1\86d¿ûõ\8e\ enoÛ?¾âT.P\r|\90¢Iÿo:¦"@Æ?ƯÁ³o\1a$\8f®À"L       ¯ihÊ\1a\ 2ý¬\8f\14æ\87\97Åô÷Ð>£7#°\1cO6T\ 6ýVÃOáç\10¬AIÀÒ05\ eÖAì%¶0LTºæ\ 4\ 6\95\rç.òæ´¸\e\82þ¾ò2ÿÓë)Ïeº`¥ýòü%}¡R¯a\97\9dÞ\9f7¹dú^2}#´s7·¾Õ¡XÂ\85\971\r¢ç \ 6§I\8c\81Tð*½îJ\ 3­@Kz¤®ÑÛµÝ2v¦R;°Bv\1dùqÝ\94 ¨Î½2©\1aó[\8f>óQb\18é\98°\91u 4/\830}\87¡[ÆÅI®\vÕ\95\85Ä\e\87×±0%\13d(\9eß\86\ 2\87i\12ÜcÚ\1aW\11¢bÚ¿X¹QL¡\84Çã1:øQ3Â\144\rΧ/Õ\89Þ3\97À\83\ 3\10¹\16\1e\1f\rÞz\1e/¨0,\r´±ö¡RÍ\ 3\ 6\11³Ýc¸\84]hάçù\17\1e\0¢\1L#E\ 3ad([¤
-\14sÿÂðü+\f\86\0\v¸\82\1c\7f\11\1côs\17\88\85\92ùñ9'\ fã\7fÀØù@í\16\ 3«<Ê2Râ¥\80è¨GÌ]\182Qx\fÛ9w\8d¨C_\ 2y\80ÜeF\92ø\ 6§ÑF\1ddUÎ!úsl\a\893\1f7î¨núíçÛ\ 6QãÙO\ 4x\88J°ãñé\15ïÜG\ eO\89Ðæ%ß\184àæÜ:\ 4\b\88óRûó=§è\ 2\91WÃW!|ãã/^ÿõûV¯\91½n
-§²e\16-\17+|\9b\83ÃT¦¸ïï¯~¹ú\e\12S\ f5endstream
-endobj
-430 0 obj<</Type/Page/Parent 345 0 R/Contents 431 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 197 0 R>>endobj
-431 0 obj<</Filter/FlateDecode/Length 465       >>stream
-x\ 1]RM\8f\9b0\10½ó+¦·TJ\f&\84\8f\95ªJÛ6=UmS.=U®\19\82W\ efm\93tÿ}gP¢m
-b,\867óÞ\9bá9ÉD³\85×à\8f\90ѽkvP59x\84>\91KJB\95ö\ 4\9a\8c@\1c$\87Ãç$/*\91A\99\97\14OP\14µ\90×7\v?þÁ/EÌÁhY\8a\1c\8a\9a+sz\16®Ç6I÷\rÈ
\9ehËZBÛ-\\19´zU\8b\9d\80¯q@ÿ¶}"d\ 1\92\0\8cÜä\95(       »Ú;\ fj|\ 1Ç(0!Ì\18ÖÐ#Zè="D\as c@8)cÍx\ 4kB\f\ 2ZÔÃh´²ö\ 5Ì\18Ñc\88Ø1Ú\ajÙÁ\84\b\97ÁÁÅ\84\81
\96[rBÜÚ\8dÑ\9bßs\h\98bòî     u\ 4\94\rT\88\13\82\e\17  \1d\9eѺ\89\19\eøéfÐj\84Þ\10!\9dî\8cþlð\ 2®§\ 6ö?ÂoÞ\9cÝ\9f\97\8dG«Xë\9d£5¹Ðvîn\16I\84\1eÌ\99Ç¡âÃÒé~\91´\98\15\f1N\ fi\1aÜì5öÎ\1fQ\8c\18\9c¾?z7O¿L÷NÒUß·¸ív%8\9fîëëndÕ\88­ÜA½\8cèª\18\8cÃ\175Îj1¶¹A7UÖð<k\ 1\1fh¤JGöÀó|\9d×\1a\1eç#\1cpr~ùÊ\vÚ£\8a3Mú\80Ï´õ\18XHQ\15¢*kúE¨á¶áÔ§6ù\9eü\ 5\15öÝýendstream
-endobj
-432 0 obj<</Type/Page/Parent 345 0 R/Contents 433 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 220 0 R>>endobj
-433 0 obj<</Filter/FlateDecode/Length 1853      >>stream
-x\ 1¥X]oÛ:\12}ϯ\98Ç\ÀQôáOt±X·Û´Yô¶ÙXÙ¢@_h\89²¹\91D]\91\8a¯ÿý\9e¡dKVÓ\8b\ 2\8b \86\903gfÎ\8cüÇ\95ï­"ê?ê\1dùø\9b­f´X\85TKÊ®\ 2÷( EHÑ\9c\92\ 2:>\84ø#à\8fÇ\ fWa\18x3\9aO\97Þ\92
-HͽE·Êi3\90wJ|\87Çw¬¼)M\97\v|\ fñßÞµ\98òÃiàÍqPèûç\15\1f4\c7Zya'ëv\akì.|\18Ñ\9eäv\ak\98èóµý.\e\14ÍBÜ:6(\9aáaä\f)(X°H»âC\87k\\19F|\8c\93åÝ\bx\9c¤\v\9aú\91\17\rv\87kìÎØ\99\81.\f\ÀE\86\ 3æ\ 2\10 äV|ò\14»óóît\1eB·ßeg8"!4g\11o¹E\8bB\88@\9d6ÃÕü,êÜA0"
-\96\1dú\11\1fÛ®\9cî`\rg罬Û\1d¬\19}vg ;Xcw5\83[\83ÝÁ\1aÎFs/\18ìÎ\ 2\ f\1d\12\81\1f\0\97våL\9e2\12\rá\993ànáöú%îôç\909ï¹\fäp\8dâý6¾º½[A\9aâ\fy?_,)N]²ãIr½òè¡V/úÏ#½ÓÕ±V»½\9dÐ'\95ÈÒH\12eJ\1f\95±º>þ\16ÿ\17\aÁÉ =è&\âú8½>«Ñ÷p\16p\8a\a\13þ\fi{<\9fýOù"s]ÉÚP{\10\1dtý7^Ãøa\ 1¢ ®Ó³Æ?ªÖ@O×»Ka§ÆÂ\7fÿѺ9Ð\85u\e]H2º©\13I\89N%)C[adJºl\1f\8cì\ f\ 5[¾.uy,tc\80KÊv3\16ÿjÊçmc,Ö\13º/\13\8f\9f:\9bè&àÄÄ\8dy\8b]JM       =²{Ù\1a7?yL\1f>?Ñ\aYÊZäôÐl¡p\ 2üÒ\8dk¯]¯P¦\1dè®`pÉÊ\v¼×\95|º  9\83 t
-,\ÎjÉ0dö jù\86\8eº¡D\94 ¨\14Ñ­Õ¶±@Ʋ7·º¦B§*;ò\83³\ f\ 4\9f\vC:û5\87F\98tù4roB/\0R!\10á\84\84¡\8a±0{Ä\ 6ø\ 37ºc«7\9dÕt§a\8d°\90w¸°£]\90ã=\¬j½«EÁ\ 1î\9dJI\95î¨=\92\ f_\84\ e*Ïi+©12kò Á}úz\1f\7füò\14Óúó7úº~|\\7f\8e¿½\81¤ÝëÆ\8eÜAj¶§ª¢Ê\15ì\ 5ªµ(í\91ñùýýã»\8fÐ^¿½ÿt\1f\7f#àyw\1f\7f~¿ÙÐÝ\97GZÓÃú1¾\7f÷ôiýH\ fO\8f\ f_6ï=ÚH\97%ðé\94FÿOÞPæ\82\88\ 6\94J+T\8ed=ìU²glÄ\v\1e\88m\8eFXëâ/av)>\19ù>[Q,ᶤ\87\ ¨nhÓ(dO\14ù\13z«Á\15å\84~_\93\1f\ 6A\0oüÅ\84\9e6ëqȾ!\ 3\r ÍSÚ\8b\17\89LL¤z\ 1\94\ 2UY9 ;\ 4\86Û»_­¥^÷D\15=\85]\93Èu¹s!\ 6\f}\ 6½!\95Q©A\83\87\9a=³z\ 4ÁÉ°>\ 1/3u$>HÜ\8e\ 2ñî«\88\8e\85\80oG«¯REèý\9cÄ;ª¸oóy+wª,U¹\9bpb \7f\ e\93»?r4(\10´PJ; FgÛYô\ 4û5\8aìuN½\94\173úàDfàºÒµ+ýKñóñ\1eÝ\8f\8bÔ ­R*Dyä:g\ 2§\[®ÐJ\80\14:^\90¢Î\8f\94\8a£ã¶\83Ü\92HÁJV\19 à8\9f\95ÉÖ"yÆ\93q\1a¿\ 5s\0\1f\82â\ 4ÌâXÈêDçm¿0\16\8c\14\ 5Èí\83Ù\ 4R\ e\\10j²/Õ\1f\8d\ 4;£\ñ\9fð\95­­V£\fJÓ y      ÖÞ¡6¨©F\81\17\rªM\17¨\16\98Ìv¨\9a¶µ>°íí\8d|²©\8e|0h\16\12Å\84\9eeeI¾èü\85\1d¢§\12B¶)\85\95ù±5ígaíÙ)U)\97\88Gÿ91¸ç{`ñ\9eÂ\81/Zé\12E\84\14ú~Íî+óý7\87V.\f\a"S\89\12ùeDû\ 4¨e.Ѩ/·Ï\ 1\1fñØ¥T\7fÈ a\8f°û\95\9cº\e\ 2\83¾±\17hM\12ÜßÙ6èñÜÔ\7f\87\87O\97[g/N¼,ò\\1f\90­YS#F5hÛ\8dK\85,-êfd¹f\113ÎÄ\8d¦\8d\95\19\9aúW\91§\90@à­¨­«\ 1\rp]#\r/Mé¡B/«\91Gé¹)·½þ<5\ê\r\@®¶Ý\85Û¢màË\11µV6Å\16\9eèld}%57\ fdw7w¤¨G\9bì¥á\1aÆsn     "¯¥H\8fÀ¹rMf+J\8cK¦- ÁÕX\9a
-\93\fàQ\85ØÉ6Ù9<\822U#»ºÉbt9\17¿®n\9a\8a\9e1\ 2¸*áÞÏ#\ 1²ÔX\9e\v y¤$×\ 6åÐ\8f\8aÀ\1c\9d\\81\1e\ 5\ 6\ 6WÈpÔ\95
-e\1d9¡PM\83\92&Áôç\1f\ 1ø\18Ç\ f·\ 1^\bLS\81ÕÀ\ 6Y.ÿTÜ\911\1fß\18n9@'S»¦¥¼      \8f\10\8c\17»ëF3\95´c\10Å°Ê\15S\97\90§\9e\8ef&3.ë\91ÿìe\87\f¿¢záM\80®}Q´\98Üýqná\1a4u\83Qú2        úäé§õK\89s\9a\92g$\17 g(í\9e\ 3Ü\86í\94¦¶©]\8aòþiT\ 5M\e\85©\1d\ 4ºî{ª\ f°\ 6\842r\ ez\\99Â\18Y\0\rtD\9arÚs\e¸´¬·½\94\aʤÀõÒ\ÊôÖ·£\ 2[v\10ÇWàÁ½¦É]wq£\ 4\ 2ÐMß\âÈ¥.-á+\aº\v×\84ðÂÖ2ä\99QÖÍ\ e/\18í\e\94»èönÙ¿tÍ#ü áæÿÓù¿ðÚ6Åo\10\8bù\12o\7fÐ\9cúìãûøêßWÿ\ 3e\0ç\83endstream
-endobj
-434 0 obj<</Type/Page/Parent 345 0 R/Contents 435 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 249 0 R>>endobj
-435 0 obj<</Filter/FlateDecode/Length 956       >>stream
-x\ 1¥Vßo£8\10~Ï_1Ú\97ëI\8d\ 1C\bìÛ\9e\1f/·{\8d\ 6Lp\ 3\98Ú&4÷×ßØ\ 4ÒF¥·Õª\12d\18\8fç\9bo>\8fû´òI\1aÂõ¡\ eàãß&ÝÀ6¥ 8\94«À}
-`K!\8c!o0ÆÇEö\11ØÇß¿­\ 2\12ALÑ\82\ 6\ 2?Å÷hÕðà|\9b4 [ë£1       pwk;\98b4úâ\84Ä°q\96õ\85\ 1%\9b\8bÝ@¸µ9®^g\85!¡62\bI\b\egÍ»R\ 4\88¾(²\9b8crE©?\82\89løh;ØnÜ\0ÝFø\8e\9c5ûBêÒÑÀ®\89\9c5û|JRWD\84P"gM¾p\eba¶À\10ãFkö\85Á¥\84\18×\84Î\9a|4I.¤¥$\81Ñ\9a}\9b\14ëÂ=Ó\bˤβ¾_ö/ºãZ\84\1dõv)P\1fö%62Þ&°/\÷ðK~\17ø\ 4\1e8\aVkùóþqåí"äs\»¦  \82Û\17w\7f\99\8a+\14\15os®\81µ\ 5hað\97,A´\ 6¿k\ 3FÂW%Nòù\f½æJ\7f\eÞ\88\ 5á {!\85\92\ 4߸}eL÷Ùó\86a Ý\18O¤:x¯£§bîî\ 1ÑÌ\89~\97\r\87\8e\1d8y½Ü)Ó©yMSBãÍ;\89Jöô}Év_¾} \8d\96½Êy\89¥pÒrãuJ>òÜhO<fz`ÿ\97Ò-\86¯X\1aà\1esÁ²}»Ð;xpùv6ßë%3u\và×>vã\96¤\¶¥8|\7fC\ 6\9e­3¦yáz?\8a¢d9'3ò¦G\8dd\1cT߶¢=¸ªL%´ÕÍ Õ\11\85XIeòÞ,\b\aaâI\7f)\99\8et#\8do\14p+'\96\e![ý\ eí\12t\9f5ÂÀ§FhÍõ'\8bÌ\8a­à'^Ë\ e%ý!\ 6O\9aÜj ?\88u&Zï$ø\90£\1fíI\ eH¸Q"[Æ\97KY»\93Wö-\88\823\r¥\92Í̯;s\v\0ßê°%è±o\8f\19öÅ\96\96ËÆ«\8cÇ[\ f3\1d\ 5פ2M½ ¥{D\ 2ü¹«YË,¯PÉ\ 1.qÀðÞ@4\85ãO±ü\b¨\8eq&ü ><:í\92J\1cDËjøÃN&<zðç\æ\aó\ f¬.pö)7\90®d-7éÁð\12\99ùç\12÷\93\86\13rk    ÂIy\85q?¶n¨D^Í\r\1c\98¶lÛã8é¼à8\10\80úÍ\83kG(ËÏnä`sêó¿|\19.³])ûÚMsÛ®¼â¶]\153x\84qî4cwY&{\ 3\ 3\9e×\9a³#6\17Á×Ü}Ë\94\1c4·GÅ©å
-\1fÛ¾\0}I\90ú©\17Å:g\88ãýK\80YbÏÐÉ®¯\99\ 2\ea\87
-\ eÙçó½Å\86Ä"VY\1aÞNb<p\84¨`\10f&ý\83ð^ÞOóTX7¬íY½Ì²\15åt3ÎQ0F9\0Þ.¹Üºëév\8c}\12mb{kÝ^Ñ\11þo²\8d\13¼ÌÑ\19\ 5\96ò_÷«o«ÿ\0\bÖ³|endstream
-endobj
-436 0 obj<</Count 11/First 437 0 R/Last 526 0 R>>endobj
-437 0 obj<</Parent 436 0 R/Title(Table of Contents)/Dest[348 0 R/XYZ 0 756 0]/Next 438 0 R>>endobj
-438 0 obj<</Parent 436 0 R/Count -1/First 439 0 R/Last 439 0 R/Title(1. Introduction)/Dest[354 0 R/XYZ 0 786 0]/Prev 437 0 R/Next 440 0 R>>endobj
-439 0 obj<</Parent 438 0 R/Title(1.1. Quickstart to Privoxy Development)/Dest[354 0 R/XYZ 0 641 0]>>endobj
-440 0 obj<</Parent 436 0 R/Count -3/First 441 0 R/Last 443 0 R/Title(2. The CVS Repository)/Dest[356 0 R/XYZ 0 786 0]/Prev 438 0 R/Next 444 0 R>>endobj
-441 0 obj<</Parent 440 0 R/Title(2.1. Access to CVS)/Dest[356 0 R/XYZ 0 707 0]/Next 442 0 R>>endobj
-442 0 obj<</Parent 440 0 R/Title(2.2. Branches)/Dest[356 0 R/XYZ 0 606 0]/Prev 441 0 R/Next 443 0 R>>endobj
-443 0 obj<</Parent 440 0 R/Title(2.3. CVS Commit Guidelines)/Dest[356 0 R/XYZ 0 399 0]/Prev 442 0 R>>endobj
-444 0 obj<</Parent 436 0 R/Count -3/First 445 0 R/Last 447 0 R/Title(3. Documentation Guidelines)/Dest[360 0 R/XYZ 0 786 0]/Prev 440 0 R/Next 448 0 R>>endobj
-445 0 obj<</Parent 444 0 R/Title(3.1. Quickstart to Docbook and SGML)/Dest[360 0 R/XYZ 0 179 0]/Next 446 0 R>>endobj
-446 0 obj<</Parent 444 0 R/Title(3.2. Privoxy Documentation Style)/Dest[362 0 R/XYZ 0 307 0]/Prev 445 0 R/Next 447 0 R>>endobj
-447 0 obj<</Parent 444 0 R/Title(3.3. Privoxy Custom Entities)/Dest[364 0 R/XYZ 0 309 0]/Prev 446 0 R>>endobj
-448 0 obj<</Parent 436 0 R/Count -8/First 449 0 R/Last 494 0 R/Title(4. Coding Guidelines)/Dest[368 0 R/XYZ 0 786 0]/Prev 444 0 R/Next 495 0 R>>endobj
-449 0 obj<</Parent 448 0 R/Title(4.1. Introduction)/Dest[368 0 R/XYZ 0 762 0]/Next 450 0 R>>endobj
-450 0 obj<</Parent 448 0 R/Count -6/First 451 0 R/Last 456 0 R/Title(4.2. Using Comments)/Dest[368 0 R/XYZ 0 608 0]/Prev 449 0 R/Next 457 0 R>>endobj
-451 0 obj<</Parent 450 0 R/Title(4.2.1. Comment, Comment, Comment)/Dest[368 0 R/XYZ 0 587 0]/Next 452 0 R>>endobj
-452 0 obj<</Parent 450 0 R/Title(4.2.2. Use blocks for comments)/Dest[368 0 R/XYZ 0 193 0]/Prev 451 0 R/Next 453 0 R>>endobj
-453 0 obj<</Parent 450 0 R/Title(4.2.3. Keep Comments on their own line)/Dest[370 0 R/XYZ 0 420 0]/Prev 452 0 R/Next 454 0 R>>endobj
-454 0 obj<</Parent 450 0 R/Title(4.2.4. Comment each logical step)/Dest[372 0 R/XYZ 0 541 0]/Prev 453 0 R/Next 455 0 R>>endobj
-455 0 obj<</Parent 450 0 R/Title(4.2.5. Comment All Functions Thoroughly)/Dest[372 0 R/XYZ 0 364 0]/Prev 454 0 R/Next 456 0 R>>endobj
-456 0 obj<</Parent 450 0 R/Title(4.2.6. Comment at the end of braces if the content is more than one screen length)/Dest[372 0 R/XYZ 0 200 0]/Prev 455 0 R>>endobj
-457 0 obj<</Parent 448 0 R/Count -5/First 458 0 R/Last 462 0 R/Title(4.3. Naming Conventions)/Dest[374 0 R/XYZ 0 496 0]/Prev 450 0 R/Next 463 0 R>>endobj
-458 0 obj<</Parent 457 0 R/Title(4.3.1. Variable Names)/Dest[374 0 R/XYZ 0 475 0]/Next 459 0 R>>endobj
-459 0 obj<</Parent 457 0 R/Title(4.3.2. Function Names)/Dest[374 0 R/XYZ 0 245 0]/Prev 458 0 R/Next 460 0 R>>endobj
-460 0 obj<</Parent 457 0 R/Title(4.3.3. Header file prototypes)/Dest[376 0 R/XYZ 0 693 0]/Prev 459 0 R/Next 461 0 R>>endobj
-461 0 obj<</Parent 457 0 R/Title(4.3.4. Enumerations, and #defines)/Dest[376 0 R/XYZ 0 456 0]/Prev 460 0 R/Next 462 0 R>>endobj
-462 0 obj<</Parent 457 0 R/Title(4.3.5. Constants)/Dest[378 0 R/XYZ 0 786 0]/Prev 461 0 R>>endobj
-463 0 obj<</Parent 448 0 R/Count -7/First 464 0 R/Last 470 0 R/Title(4.4. Using Space)/Dest[378 0 R/XYZ 0 486 0]/Prev 457 0 R/Next 471 0 R>>endobj
-464 0 obj<</Parent 463 0 R/Title(4.4.1. Put braces on a line by themselves.)/Dest[378 0 R/XYZ 0 465 0]/Next 465 0 R>>endobj
-465 0 obj<</Parent 463 0 R/Title(4.4.2. ALL control statements should have a block)/Dest[380 0 R/XYZ 0 640 0]/Prev 464 0 R/Next 466 0 R>>endobj
-466 0 obj<</Parent 463 0 R/Title(4.4.3. Do not belabor/blow-up boolean expressions)/Dest[380 0 R/XYZ 0 287 0]/Prev 465 0 R/Next 467 0 R>>endobj
-467 0 obj<</Parent 463 0 R/Title(4.4.4. Use white space freely because it is free)/Dest[382 0 R/XYZ 0 771 0]/Prev 466 0 R/Next 468 0 R>>endobj
-468 0 obj<</Parent 463 0 R/Title(4.4.5. Don't use white space around structure operators)/Dest[382 0 R/XYZ 0 557 0]/Prev 467 0 R/Next 469 0 R>>endobj
-469 0 obj<</Parent 463 0 R/Title(4.4.6. Make the last brace of a function stand out)/Dest[382 0 R/XYZ 0 332 0]/Prev 468 0 R/Next 470 0 R>>endobj
-470 0 obj<</Parent 463 0 R/Title(4.4.7. Use 3 character indentions)/Dest[384 0 R/XYZ 0 665 0]/Prev 469 0 R>>endobj
-471 0 obj<</Parent 448 0 R/Count -1/First 472 0 R/Last 472 0 R/Title(4.5. Initializing)/Dest[384 0 R/XYZ 0 296 0]/Prev 463 0 R/Next 473 0 R>>endobj
-472 0 obj<</Parent 471 0 R/Title(4.5.1. Initialize all variables)/Dest[384 0 R/XYZ 0 275 0]>>endobj
-473 0 obj<</Parent 448 0 R/Count -9/First 474 0 R/Last 482 0 R/Title(4.6. Functions)/Dest[386 0 R/XYZ 0 691 0]/Prev 471 0 R/Next 483 0 R>>endobj
-474 0 obj<</Parent 473 0 R/Title(4.6.1. Name functions that return a boolean as a question.)/Dest[386 0 R/XYZ 0 671 0]/Next 475 0 R>>endobj
-475 0 obj<</Parent 473 0 R/Title(4.6.2. Always specify a return type for a function.)/Dest[386 0 R/XYZ 0 498 0]/Prev 474 0 R/Next 476 0 R>>endobj
-476 0 obj<</Parent 473 0 R/Title(4.6.3. Minimize function calls when iterating by using variables)/Dest[386 0 R/XYZ 0 400 0]/Prev 475 0 R/Next 477 0 R>>endobj
-477 0 obj<</Parent 473 0 R/Title(4.6.4. Pass and Return by Const Reference)/Dest[388 0 R/XYZ 0 637 0]/Prev 476 0 R/Next 478 0 R>>endobj
-478 0 obj<</Parent 473 0 R/Title(4.6.5. Pass and Return by Value)/Dest[388 0 R/XYZ 0 460 0]/Prev 477 0 R/Next 479 0 R>>endobj
-479 0 obj<</Parent 473 0 R/Title(4.6.6. Names of include files)/Dest[388 0 R/XYZ 0 323 0]/Prev 478 0 R/Next 480 0 R>>endobj
-480 0 obj<</Parent 473 0 R/Title(4.6.7. Provide multiple inclusion protection)/Dest[390 0 R/XYZ 0 707 0]/Prev 479 0 R/Next 481 0 R>>endobj
-481 0 obj<</Parent 473 0 R/Title(4.6.8. Use `extern "C"` when appropriate)/Dest[390 0 R/XYZ 0 497 0]/Prev 480 0 R/Next 482 0 R>>endobj
-482 0 obj<</Parent 473 0 R/Title(4.6.9. Where Possible, Use Forward Struct Declaration Instead of Includes)/Dest[390 0 R/XYZ 0 249 0]/Prev 481 0 R>>endobj
-483 0 obj<</Parent 448 0 R/Count -10/First 484 0 R/Last 493 0 R/Title(4.7. General Coding Practices)/Dest[392 0 R/XYZ 0 648 0]/Prev 473 0 R/Next 494 0 R>>endobj
-484 0 obj<</Parent 483 0 R/Title(4.7.1. Turn on warnings)/Dest[392 0 R/XYZ 0 628 0]/Next 485 0 R>>endobj
-485 0 obj<</Parent 483 0 R/Title(4.7.2. Provide a default case for all switch statements)/Dest[392 0 R/XYZ 0 517 0]/Prev 484 0 R/Next 486 0 R>>endobj
-486 0 obj<</Parent 483 0 R/Title(4.7.3. Try to avoid falling through cases in a switch statement.)/Dest[394 0 R/XYZ 0 731 0]/Prev 485 0 R/Next 487 0 R>>endobj
-487 0 obj<</Parent 483 0 R/Title(4.7.4. Use 'long' or 'short' Instead of 'int')/Dest[394 0 R/XYZ 0 528 0]/Prev 486 0 R/Next 488 0 R>>endobj
-488 0 obj<</Parent 483 0 R/Title(4.7.5. Don't mix size_t and other types)/Dest[394 0 R/XYZ 0 390 0]/Prev 487 0 R/Next 489 0 R>>endobj
-489 0 obj<</Parent 483 0 R/Title(4.7.6. Declare each variable and struct on its own line.)/Dest[394 0 R/XYZ 0 279 0]/Prev 488 0 R/Next 490 0 R>>endobj
-490 0 obj<</Parent 483 0 R/Title(4.7.7. Use malloc/zalloc sparingly)/Dest[396 0 R/XYZ 0 613 0]/Prev 489 0 R/Next 491 0 R>>endobj
-491 0 obj<</Parent 483 0 R/Title(4.7.8. The Programmer Who Uses 'malloc' is Responsible for Ensuring 'free')/Dest[396 0 R/XYZ 0 437 0]/Prev 490 0 R/Next 492 0 R>>endobj
-492 0 obj<</Parent 483 0 R/Title(4.7.9. Add loaders to the `file_list' structure and in order)/Dest[398 0 R/XYZ 0 786 0]/Prev 491 0 R/Next 493 0 R>>endobj
-493 0 obj<</Parent 483 0 R/Title(4.7.10. "Uncertain" new code and/or changes to existing code, use FIXME)/Dest[398 0 R/XYZ 0 649 0]/Prev 492 0 R>>endobj
-494 0 obj<</Parent 448 0 R/Title(4.8. Addendum: Template for files and function comment blocks:)/Dest[398 0 R/XYZ 0 349 0]/Prev 483 0 R>>endobj
-495 0 obj<</Parent 436 0 R/Count -2/First 496 0 R/Last 497 0 R/Title(5. Testing Guidelines)/Dest[406 0 R/XYZ 0 786 0]/Prev 448 0 R/Next 498 0 R>>endobj
-496 0 obj<</Parent 495 0 R/Title(5.1. Testplan for releases)/Dest[406 0 R/XYZ 0 721 0]/Next 497 0 R>>endobj
-497 0 obj<</Parent 495 0 R/Title(5.2. Test reports)/Dest[406 0 R/XYZ 0 474 0]/Prev 496 0 R>>endobj
-498 0 obj<</Parent 436 0 R/Count -5/First 499 0 R/Last 515 0 R/Title(6. Releasing a New Version)/Dest[408 0 R/XYZ 0 786 0]/Prev 495 0 R/Next 516 0 R>>endobj
-499 0 obj<</Parent 498 0 R/Title(6.1. Version numbers)/Dest[408 0 R/XYZ 0 628 0]/Next 500 0 R>>endobj
-500 0 obj<</Parent 498 0 R/Title(6.2. Before the Release: Freeze)/Dest[410 0 R/XYZ 0 786 0]/Prev 499 0 R/Next 501 0 R>>endobj
-501 0 obj<</Parent 498 0 R/Count -12/First 502 0 R/Last 513 0 R/Title(6.3. Building and Releasing the Packages)/Dest[410 0 R/XYZ 0 249 0]/Prev 500 0 R/Next 514 0 R>>endobj
-502 0 obj<</Parent 501 0 R/Title(6.3.1. Note on Privoxy Packaging)/Dest[412 0 R/XYZ 0 633 0]/Next 503 0 R>>endobj
-503 0 obj<</Parent 501 0 R/Title(6.3.2. Source Tarball)/Dest[414 0 R/XYZ 0 692 0]/Prev 502 0 R/Next 504 0 R>>endobj
-504 0 obj<</Parent 501 0 R/Title(6.3.3. SuSE, Conectiva or Red Hat RPM)/Dest[414 0 R/XYZ 0 437 0]/Prev 503 0 R/Next 505 0 R>>endobj
-505 0 obj<</Parent 501 0 R/Title(6.3.4. OS/2)/Dest[416 0 R/XYZ 0 718 0]/Prev 504 0 R/Next 506 0 R>>endobj
-506 0 obj<</Parent 501 0 R/Title(6.3.5. Solaris)/Dest[416 0 R/XYZ 0 328 0]/Prev 505 0 R/Next 507 0 R>>endobj
-507 0 obj<</Parent 501 0 R/Title(6.3.6. Windows)/Dest[418 0 R/XYZ 0 731 0]/Prev 506 0 R/Next 508 0 R>>endobj
-508 0 obj<</Parent 501 0 R/Title(6.3.7. Debian)/Dest[418 0 R/XYZ 0 463 0]/Prev 507 0 R/Next 509 0 R>>endobj
-509 0 obj<</Parent 501 0 R/Title(6.3.8. Mac OSX)/Dest[418 0 R/XYZ 0 232 0]/Prev 508 0 R/Next 510 0 R>>endobj
-510 0 obj<</Parent 501 0 R/Title(6.3.9. FreeBSD)/Dest[420 0 R/XYZ 0 575 0]/Prev 509 0 R/Next 511 0 R>>endobj
-511 0 obj<</Parent 501 0 R/Title(6.3.10. HP-UX 11)/Dest[420 0 R/XYZ 0 306 0]/Prev 510 0 R/Next 512 0 R>>endobj
-512 0 obj<</Parent 501 0 R/Title(6.3.11. Amiga OS)/Dest[422 0 R/XYZ 0 786 0]/Prev 511 0 R/Next 513 0 R>>endobj
-513 0 obj<</Parent 501 0 R/Title(6.3.12. AIX)/Dest[422 0 R/XYZ 0 651 0]/Prev 512 0 R>>endobj
-514 0 obj<</Parent 498 0 R/Title(6.4. Uploading and Releasing Your Package)/Dest[422 0 R/XYZ 0 382 0]/Prev 501 0 R/Next 515 0 R>>endobj
-515 0 obj<</Parent 498 0 R/Title(6.5. After the Release)/Dest[424 0 R/XYZ 0 705 0]/Prev 514 0 R>>endobj
-516 0 obj<</Parent 436 0 R/Title(7. Update the Webserver)/Dest[426 0 R/XYZ 0 786 0]/Prev 498 0 R/Next 517 0 R>>endobj
-517 0 obj<</Parent 436 0 R/Count -5/First 518 0 R/Last 522 0 R/Title(8. Contacting the developers, Bug Reporting and Feature Requests)/Dest[428 0 R/XYZ 0 786 0]/Prev 516 0 R/Next 523 0 R>>endobj
-518 0 obj<</Parent 517 0 R/Title(8.1. Get Support)/Dest[428 0 R/XYZ 0 683 0]/Next 519 0 R>>endobj
-519 0 obj<</Parent 517 0 R/Title(8.2. Report Bugs)/Dest[428 0 R/XYZ 0 569 0]/Prev 518 0 R/Next 520 0 R>>endobj
-520 0 obj<</Parent 517 0 R/Title(8.3. Request New Features)/Dest[428 0 R/XYZ 0 335 0]/Prev 519 0 R/Next 521 0 R>>endobj
-521 0 obj<</Parent 517 0 R/Title(8.4. Report Ads or Other Actions-Related Problems)/Dest[428 0 R/XYZ 0 260 0]/Prev 520 0 R/Next 522 0 R>>endobj
-522 0 obj<</Parent 517 0 R/Title(8.5. Other)/Dest[430 0 R/XYZ 0 786 0]/Prev 521 0 R>>endobj
-523 0 obj<</Parent 436 0 R/Count -2/First 524 0 R/Last 525 0 R/Title(9. Privoxy Copyright, License and History)/Dest[432 0 R/XYZ 0 786 0]/Prev 517 0 R/Next 526 0 R>>endobj
-524 0 obj<</Parent 523 0 R/Title(9.1. License)/Dest[432 0 R/XYZ 0 681 0]/Next 525 0 R>>endobj
-525 0 obj<</Parent 523 0 R/Title(9.2. History)/Dest[432 0 R/XYZ 0 434 0]/Prev 524 0 R>>endobj
-526 0 obj<</Parent 436 0 R/Title(10. See also)/Dest[434 0 R/XYZ 0 786 0]/Prev 523 0 R>>endobj
-527 0 obj<</Type/Catalog/Pages 345 0 R/PageLayout/SinglePage/Outlines 436 0 R/OpenAction[346 0 R/XYZ null null 0]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</S/r>>4<</S/D/St 1/P()>>5<</S/D/St 2/P()>>7<</S/D/St 4/P()>>11<</S/D/St 8/P()>>30<</S/D/St 27/P()>>31<</S/D/St 28/P()>>40<</S/D/St 37/P()>>41<</S/D/St 38/P()>>43<</S/D/St 40/P()>>44<</S/D/St 41/P()>>]>>>>endobj
+397 0 obj<</Count 11/First 398 0 R/Last 487 0 R>>endobj
+398 0 obj<</Parent 397 0 R/Title(Table of Contents)/Dest[335 0 R/XYZ 0 756 0]/Next 399 0 R>>endobj
+399 0 obj<</Parent 397 0 R/Count -1/First 400 0 R/Last 400 0 R/Title(1. Introduction)/Dest[339 0 R/XYZ 0 772 0]/Prev 398 0 R/Next 401 0 R>>endobj
+400 0 obj<</Parent 399 0 R/Title(1.1. Quickstart to Privoxy Development)/Dest[339 0 R/XYZ 0 686 0]>>endobj
+401 0 obj<</Parent 397 0 R/Count -3/First 402 0 R/Last 404 0 R/Title(2. The CVS Repository)/Dest[341 0 R/XYZ 0 772 0]/Prev 399 0 R/Next 405 0 R>>endobj
+402 0 obj<</Parent 401 0 R/Title(2.1. Access to CVS)/Dest[341 0 R/XYZ 0 715 0]/Next 403 0 R>>endobj
+403 0 obj<</Parent 401 0 R/Title(2.2. Branches)/Dest[341 0 R/XYZ 0 651 0]/Prev 402 0 R/Next 404 0 R>>endobj
+404 0 obj<</Parent 401 0 R/Title(2.3. CVS Commit Guidelines)/Dest[341 0 R/XYZ 0 482 0]/Prev 403 0 R>>endobj
+405 0 obj<</Parent 397 0 R/Count -3/First 406 0 R/Last 408 0 R/Title(3. Documentation Guidelines)/Dest[343 0 R/XYZ 0 772 0]/Prev 401 0 R/Next 409 0 R>>endobj
+406 0 obj<</Parent 405 0 R/Title(3.1. Quickstart to Docbook and SGML)/Dest[343 0 R/XYZ 0 408 0]/Next 407 0 R>>endobj
+407 0 obj<</Parent 405 0 R/Title(3.2. Privoxy Documentation Style)/Dest[345 0 R/XYZ 0 732 0]/Prev 406 0 R/Next 408 0 R>>endobj
+408 0 obj<</Parent 405 0 R/Title(3.3. Privoxy Custom Entities)/Dest[345 0 R/XYZ 0 274 0]/Prev 407 0 R>>endobj
+409 0 obj<</Parent 397 0 R/Count -8/First 410 0 R/Last 455 0 R/Title(4. Coding Guidelines)/Dest[349 0 R/XYZ 0 772 0]/Prev 405 0 R/Next 456 0 R>>endobj
+410 0 obj<</Parent 409 0 R/Title(4.1. Introduction)/Dest[349 0 R/XYZ 0 755 0]/Next 411 0 R>>endobj
+411 0 obj<</Parent 409 0 R/Count -6/First 412 0 R/Last 417 0 R/Title(4.2. Using Comments)/Dest[349 0 R/XYZ 0 663 0]/Prev 410 0 R/Next 418 0 R>>endobj
+412 0 obj<</Parent 411 0 R/Title(4.2.1. Comment, Comment, Comment)/Dest[349 0 R/XYZ 0 649 0]/Next 413 0 R>>endobj
+413 0 obj<</Parent 411 0 R/Title(4.2.2. Use blocks for comments)/Dest[349 0 R/XYZ 0 368 0]/Prev 412 0 R/Next 414 0 R>>endobj
+414 0 obj<</Parent 411 0 R/Title(4.2.3. Keep Comments on their own line)/Dest[351 0 R/XYZ 0 722 0]/Prev 413 0 R/Next 415 0 R>>endobj
+415 0 obj<</Parent 411 0 R/Title(4.2.4. Comment each logical step)/Dest[351 0 R/XYZ 0 318 0]/Prev 414 0 R/Next 416 0 R>>endobj
+416 0 obj<</Parent 411 0 R/Title(4.2.5. Comment All Functions Thoroughly)/Dest[351 0 R/XYZ 0 218 0]/Prev 415 0 R/Next 417 0 R>>endobj
+417 0 obj<</Parent 411 0 R/Title(4.2.6. Comment at the end of braces if the content is more than one screen length)/Dest[353 0 R/XYZ 0 772 0]/Prev 416 0 R>>endobj
+418 0 obj<</Parent 409 0 R/Count -5/First 419 0 R/Last 423 0 R/Title(4.3. Naming Conventions)/Dest[353 0 R/XYZ 0 527 0]/Prev 411 0 R/Next 424 0 R>>endobj
+419 0 obj<</Parent 418 0 R/Title(4.3.1. Variable Names)/Dest[353 0 R/XYZ 0 513 0]/Next 420 0 R>>endobj
+420 0 obj<</Parent 418 0 R/Title(4.3.2. Function Names)/Dest[353 0 R/XYZ 0 343 0]/Prev 419 0 R/Next 421 0 R>>endobj
+421 0 obj<</Parent 418 0 R/Title(4.3.3. Header file prototypes)/Dest[353 0 R/XYZ 0 175 0]/Prev 420 0 R/Next 422 0 R>>endobj
+422 0 obj<</Parent 418 0 R/Title(4.3.4. Enumerations, and #defines)/Dest[355 0 R/XYZ 0 686 0]/Prev 421 0 R/Next 423 0 R>>endobj
+423 0 obj<</Parent 418 0 R/Title(4.3.5. Constants)/Dest[355 0 R/XYZ 0 467 0]/Prev 422 0 R>>endobj
+424 0 obj<</Parent 409 0 R/Count -7/First 425 0 R/Last 431 0 R/Title(4.4. Using Space)/Dest[355 0 R/XYZ 0 255 0]/Prev 418 0 R/Next 432 0 R>>endobj
+425 0 obj<</Parent 424 0 R/Title(4.4.1. Put braces on a line by themselves.)/Dest[355 0 R/XYZ 0 241 0]/Next 426 0 R>>endobj
+426 0 obj<</Parent 424 0 R/Title(4.4.2. ALL control statements should have a block)/Dest[357 0 R/XYZ 0 557 0]/Prev 425 0 R/Next 427 0 R>>endobj
+427 0 obj<</Parent 424 0 R/Title(4.4.3. Do not belabor/blow-up boolean expressions)/Dest[357 0 R/XYZ 0 309 0]/Prev 426 0 R/Next 428 0 R>>endobj
+428 0 obj<</Parent 424 0 R/Title(4.4.4. Use white space freely because it is free)/Dest[357 0 R/XYZ 0 179 0]/Prev 427 0 R/Next 429 0 R>>endobj
+429 0 obj<</Parent 424 0 R/Title(4.4.5. Don't use white space around structure operators)/Dest[359 0 R/XYZ 0 693 0]/Prev 428 0 R/Next 430 0 R>>endobj
+430 0 obj<</Parent 424 0 R/Title(4.4.6. Make the last brace of a function stand out)/Dest[359 0 R/XYZ 0 528 0]/Prev 429 0 R/Next 431 0 R>>endobj
+431 0 obj<</Parent 424 0 R/Title(4.4.7. Use 3 character indentions)/Dest[359 0 R/XYZ 0 289 0]/Prev 430 0 R>>endobj
+432 0 obj<</Parent 409 0 R/Count -1/First 433 0 R/Last 433 0 R/Title(4.5. Initializing)/Dest[361 0 R/XYZ 0 693 0]/Prev 424 0 R/Next 434 0 R>>endobj
+433 0 obj<</Parent 432 0 R/Title(4.5.1. Initialize all variables)/Dest[361 0 R/XYZ 0 680 0]>>endobj
+434 0 obj<</Parent 409 0 R/Count -9/First 435 0 R/Last 443 0 R/Title(4.6. Functions)/Dest[361 0 R/XYZ 0 495 0]/Prev 432 0 R/Next 444 0 R>>endobj
+435 0 obj<</Parent 434 0 R/Title(4.6.1. Name functions that return a boolean as a question.)/Dest[361 0 R/XYZ 0 481 0]/Next 436 0 R>>endobj
+436 0 obj<</Parent 434 0 R/Title(4.6.2. Always specify a return type for a function.)/Dest[361 0 R/XYZ 0 355 0]/Prev 435 0 R/Next 437 0 R>>endobj
+437 0 obj<</Parent 434 0 R/Title(4.6.3. Minimize function calls when iterating by using variables)/Dest[361 0 R/XYZ 0 283 0]/Prev 436 0 R/Next 438 0 R>>endobj
+438 0 obj<</Parent 434 0 R/Title(4.6.4. Pass and Return by Const Reference)/Dest[363 0 R/XYZ 0 661 0]/Prev 437 0 R/Next 439 0 R>>endobj
+439 0 obj<</Parent 434 0 R/Title(4.6.5. Pass and Return by Value)/Dest[363 0 R/XYZ 0 552 0]/Prev 438 0 R/Next 440 0 R>>endobj
+440 0 obj<</Parent 434 0 R/Title(4.6.6. Names of include files)/Dest[363 0 R/XYZ 0 462 0]/Prev 439 0 R/Next 441 0 R>>endobj
+441 0 obj<</Parent 434 0 R/Title(4.6.7. Provide multiple inclusion protection)/Dest[363 0 R/XYZ 0 266 0]/Prev 440 0 R/Next 442 0 R>>endobj
+442 0 obj<</Parent 434 0 R/Title(4.6.8. Use `extern "C"` when appropriate)/Dest[365 0 R/XYZ 0 772 0]/Prev 441 0 R/Next 443 0 R>>endobj
+443 0 obj<</Parent 434 0 R/Title(4.6.9. Where Possible, Use Forward Struct Declaration Instead of Includes)/Dest[365 0 R/XYZ 0 589 0]/Prev 442 0 R>>endobj
+444 0 obj<</Parent 409 0 R/Count -10/First 445 0 R/Last 454 0 R/Title(4.7. General Coding Practices)/Dest[365 0 R/XYZ 0 408 0]/Prev 434 0 R/Next 455 0 R>>endobj
+445 0 obj<</Parent 444 0 R/Title(4.7.1. Turn on warnings)/Dest[365 0 R/XYZ 0 394 0]/Next 446 0 R>>endobj
+446 0 obj<</Parent 444 0 R/Title(4.7.2. Provide a default case for all switch statements)/Dest[365 0 R/XYZ 0 313 0]/Prev 445 0 R/Next 447 0 R>>endobj
+447 0 obj<</Parent 444 0 R/Title(4.7.3. Try to avoid falling through cases in a switch statement.)/Dest[367 0 R/XYZ 0 673 0]/Prev 446 0 R/Next 448 0 R>>endobj
+448 0 obj<</Parent 444 0 R/Title(4.7.4. Use 'long' or 'short' Instead of 'int')/Dest[367 0 R/XYZ 0 534 0]/Prev 447 0 R/Next 449 0 R>>endobj
+449 0 obj<</Parent 444 0 R/Title(4.7.5. Don't mix size_t and other types)/Dest[367 0 R/XYZ 0 444 0]/Prev 448 0 R/Next 450 0 R>>endobj
+450 0 obj<</Parent 444 0 R/Title(4.7.6. Declare each variable and struct on its own line.)/Dest[367 0 R/XYZ 0 363 0]/Prev 449 0 R/Next 451 0 R>>endobj
+451 0 obj<</Parent 444 0 R/Title(4.7.7. Use malloc/zalloc sparingly)/Dest[369 0 R/XYZ 0 772 0]/Prev 450 0 R/Next 452 0 R>>endobj
+452 0 obj<</Parent 444 0 R/Title(4.7.8. The Programmer Who Uses 'malloc' is Responsible for Ensuring 'free')/Dest[369 0 R/XYZ 0 644 0]/Prev 451 0 R/Next 453 0 R>>endobj
+453 0 obj<</Parent 444 0 R/Title(4.7.9. Add loaders to the `file_list' structure and in order)/Dest[369 0 R/XYZ 0 458 0]/Prev 452 0 R/Next 454 0 R>>endobj
+454 0 obj<</Parent 444 0 R/Title(4.7.10. "Uncertain" new code and/or changes to existing code, use FIXME)/Dest[369 0 R/XYZ 0 367 0]/Prev 453 0 R>>endobj
+455 0 obj<</Parent 409 0 R/Title(4.8. Addendum: Template for files and function comment blocks:)/Dest[369 0 R/XYZ 0 181 0]/Prev 444 0 R>>endobj
+456 0 obj<</Parent 397 0 R/Count -2/First 457 0 R/Last 458 0 R/Title(5. Testing Guidelines)/Dest[375 0 R/XYZ 0 772 0]/Prev 409 0 R/Next 459 0 R>>endobj
+457 0 obj<</Parent 456 0 R/Title(5.1. Testplan for releases)/Dest[375 0 R/XYZ 0 725 0]/Next 458 0 R>>endobj
+458 0 obj<</Parent 456 0 R/Title(5.2. Test reports)/Dest[375 0 R/XYZ 0 555 0]/Prev 457 0 R>>endobj
+459 0 obj<</Parent 397 0 R/Count -5/First 460 0 R/Last 476 0 R/Title(6. Releasing a New Version)/Dest[377 0 R/XYZ 0 772 0]/Prev 456 0 R/Next 477 0 R>>endobj
+460 0 obj<</Parent 459 0 R/Title(6.1. Version numbers)/Dest[377 0 R/XYZ 0 657 0]/Next 461 0 R>>endobj
+461 0 obj<</Parent 459 0 R/Title(6.2. Before the Release: Freeze)/Dest[377 0 R/XYZ 0 277 0]/Prev 460 0 R/Next 462 0 R>>endobj
+462 0 obj<</Parent 459 0 R/Count -12/First 463 0 R/Last 474 0 R/Title(6.3. Building and Releasing the Packages)/Dest[379 0 R/XYZ 0 626 0]/Prev 461 0 R/Next 475 0 R>>endobj
+463 0 obj<</Parent 462 0 R/Title(6.3.1. Note on Privoxy Packaging)/Dest[379 0 R/XYZ 0 441 0]/Next 464 0 R>>endobj
+464 0 obj<</Parent 462 0 R/Title(6.3.2. Source Tarball)/Dest[381 0 R/XYZ 0 703 0]/Prev 463 0 R/Next 465 0 R>>endobj
+465 0 obj<</Parent 462 0 R/Title(6.3.3. SuSE, Conectiva or Red Hat RPM)/Dest[381 0 R/XYZ 0 514 0]/Prev 464 0 R/Next 466 0 R>>endobj
+466 0 obj<</Parent 462 0 R/Title(6.3.4. OS/2)/Dest[381 0 R/XYZ 0 249 0]/Prev 465 0 R/Next 467 0 R>>endobj
+467 0 obj<</Parent 462 0 R/Title(6.3.5. Solaris)/Dest[383 0 R/XYZ 0 652 0]/Prev 466 0 R/Next 468 0 R>>endobj
+468 0 obj<</Parent 462 0 R/Title(6.3.6. Windows)/Dest[383 0 R/XYZ 0 454 0]/Prev 467 0 R/Next 469 0 R>>endobj
+469 0 obj<</Parent 462 0 R/Title(6.3.7. Debian)/Dest[383 0 R/XYZ 0 276 0]/Prev 468 0 R/Next 470 0 R>>endobj
+470 0 obj<</Parent 462 0 R/Title(6.3.8. Mac OSX)/Dest[385 0 R/XYZ 0 772 0]/Prev 469 0 R/Next 471 0 R>>endobj
+471 0 obj<</Parent 462 0 R/Title(6.3.9. FreeBSD)/Dest[385 0 R/XYZ 0 535 0]/Prev 470 0 R/Next 472 0 R>>endobj
+472 0 obj<</Parent 462 0 R/Title(6.3.10. HP-UX 11)/Dest[385 0 R/XYZ 0 337 0]/Prev 471 0 R/Next 473 0 R>>endobj
+473 0 obj<</Parent 462 0 R/Title(6.3.11. Amiga OS)/Dest[385 0 R/XYZ 0 238 0]/Prev 472 0 R/Next 474 0 R>>endobj
+474 0 obj<</Parent 462 0 R/Title(6.3.12. AIX)/Dest[387 0 R/XYZ 0 772 0]/Prev 473 0 R>>endobj
+475 0 obj<</Parent 459 0 R/Title(6.4. Uploading and Releasing Your Package)/Dest[387 0 R/XYZ 0 574 0]/Prev 462 0 R/Next 476 0 R>>endobj
+476 0 obj<</Parent 459 0 R/Title(6.5. After the Release)/Dest[387 0 R/XYZ 0 356 0]/Prev 475 0 R>>endobj
+477 0 obj<</Parent 397 0 R/Title(7. Update the Webserver)/Dest[389 0 R/XYZ 0 772 0]/Prev 459 0 R/Next 478 0 R>>endobj
+478 0 obj<</Parent 397 0 R/Count -5/First 479 0 R/Last 483 0 R/Title(8. Contacting the developers, Bug Reporting and Feature Requests)/Dest[391 0 R/XYZ 0 772 0]/Prev 477 0 R/Next 484 0 R>>endobj
+479 0 obj<</Parent 478 0 R/Title(8.1. Get Support)/Dest[391 0 R/XYZ 0 715 0]/Next 480 0 R>>endobj
+480 0 obj<</Parent 478 0 R/Title(8.2. Report Bugs)/Dest[391 0 R/XYZ 0 651 0]/Prev 479 0 R/Next 481 0 R>>endobj
+481 0 obj<</Parent 478 0 R/Title(8.3. Request New Features)/Dest[391 0 R/XYZ 0 510 0]/Prev 480 0 R/Next 482 0 R>>endobj
+482 0 obj<</Parent 478 0 R/Title(8.4. Report Ads or Other Actions-Related Problems)/Dest[391 0 R/XYZ 0 456 0]/Prev 481 0 R/Next 483 0 R>>endobj
+483 0 obj<</Parent 478 0 R/Title(8.5. Other)/Dest[391 0 R/XYZ 0 364 0]/Prev 482 0 R>>endobj
+484 0 obj<</Parent 397 0 R/Count -2/First 485 0 R/Last 486 0 R/Title(9. Privoxy Copyright, License and History)/Dest[393 0 R/XYZ 0 772 0]/Prev 478 0 R/Next 487 0 R>>endobj
+485 0 obj<</Parent 484 0 R/Title(9.1. License)/Dest[393 0 R/XYZ 0 696 0]/Next 486 0 R>>endobj
+486 0 obj<</Parent 484 0 R/Title(9.2. History)/Dest[393 0 R/XYZ 0 536 0]/Prev 485 0 R>>endobj
+487 0 obj<</Parent 397 0 R/Title(10. See also)/Dest[395 0 R/XYZ 0 772 0]/Prev 484 0 R>>endobj
+488 0 obj<</Type/Catalog/Pages 332 0 R/PageLayout/SinglePage/Outlines 397 0 R/OpenAction[333 0 R/XYZ null null 0]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</S/r>>3<</S/D/St 1/P()>>4<</S/D/St 2/P()>>5<</S/D/St 3/P()>>8<</S/D/St 6/P()>>21<</S/D/St 19/P()>>22<</S/D/St 20/P()>>28<</S/D/St 26/P()>>29<</S/D/St 27/P()>>30<</S/D/St 28/P()>>31<</S/D/St 29/P()>>]>>>>endobj
 xref
 xref
-0 528 
+0 489 
 0000000000 65535 f 
 0000000015 00000 n 
 0000000000 65535 f 
 0000000015 00000 n 
-0000000247 00000 n 
-0000001813 00000 n 
-0000001887 00000 n 
-0000001969 00000 n 
-0000002047 00000 n 
-0000002124 00000 n 
-0000002203 00000 n 
-0000002279 00000 n 
-0000002360 00000 n 
-0000002419 00000 n 
-0000002520 00000 n 
-0000002573 00000 n 
-0000002658 00000 n 
-0000002729 00000 n 
-0000002814 00000 n 
-0000002915 00000 n 
-0000002959 00000 n 
-0000003060 00000 n 
-0000003162 00000 n 
-0000003263 00000 n 
-0000003365 00000 n 
-0000003467 00000 n 
-0000003569 00000 n 
-0000003670 00000 n 
-0000003772 00000 n 
-0000003874 00000 n 
-0000003976 00000 n 
-0000004077 00000 n 
-0000004179 00000 n 
-0000004281 00000 n 
-0000004383 00000 n 
-0000004485 00000 n 
-0000004587 00000 n 
-0000004689 00000 n 
-0000004791 00000 n 
-0000004893 00000 n 
-0000004995 00000 n 
-0000005097 00000 n 
-0000005199 00000 n 
-0000005301 00000 n 
-0000005403 00000 n 
-0000005505 00000 n 
-0000005607 00000 n 
-0000005709 00000 n 
-0000005811 00000 n 
-0000005913 00000 n 
-0000006015 00000 n 
-0000006117 00000 n 
-0000006219 00000 n 
-0000006321 00000 n 
-0000006423 00000 n 
-0000006525 00000 n 
-0000006627 00000 n 
-0000006729 00000 n 
-0000006831 00000 n 
-0000006933 00000 n 
-0000007035 00000 n 
-0000007137 00000 n 
-0000007239 00000 n 
-0000007340 00000 n 
-0000007440 00000 n 
-0000007540 00000 n 
-0000007871 00000 n 
-0000007972 00000 n 
-0000008074 00000 n 
-0000008176 00000 n 
-0000008278 00000 n 
-0000008380 00000 n 
-0000008482 00000 n 
-0000008584 00000 n 
-0000008686 00000 n 
-0000008788 00000 n 
-0000008890 00000 n 
-0000008992 00000 n 
-0000009094 00000 n 
-0000009196 00000 n 
-0000009297 00000 n 
-0000009399 00000 n 
-0000009501 00000 n 
-0000009602 00000 n 
-0000009704 00000 n 
-0000009806 00000 n 
-0000009908 00000 n 
-0000010010 00000 n 
-0000010112 00000 n 
-0000010214 00000 n 
-0000010316 00000 n 
-0000010418 00000 n 
-0000010520 00000 n 
-0000010622 00000 n 
-0000010724 00000 n 
-0000010826 00000 n 
-0000010928 00000 n 
-0000011030 00000 n 
-0000011132 00000 n 
-0000011234 00000 n 
-0000011336 00000 n 
-0000011437 00000 n 
-0000011538 00000 n 
-0000011641 00000 n 
-0000011744 00000 n 
-0000011847 00000 n 
-0000011950 00000 n 
-0000012053 00000 n 
-0000012362 00000 n 
-0000012464 00000 n 
-0000012567 00000 n 
-0000012670 00000 n 
-0000012772 00000 n 
-0000012821 00000 n 
-0000012876 00000 n 
-0000012963 00000 n 
-0000013024 00000 n 
-0000013111 00000 n 
-0000013144 00000 n 
-0000013199 00000 n 
-0000013286 00000 n 
-0000013359 00000 n 
-0000013446 00000 n 
-0000013519 00000 n 
-0000013605 00000 n 
-0000013691 00000 n 
-0000013777 00000 n 
-0000013879 00000 n 
-0000013981 00000 n 
-0000014066 00000 n 
-0000014131 00000 n 
-0000014221 00000 n 
-0000014308 00000 n 
-0000014333 00000 n 
-0000014387 00000 n 
-0000014474 00000 n 
-0000014550 00000 n 
-0000014636 00000 n 
-0000014704 00000 n 
-0000014791 00000 n 
+0000000244 00000 n 
+0000001810 00000 n 
+0000001884 00000 n 
+0000001960 00000 n 
+0000002041 00000 n 
+0000002125 00000 n 
+0000002183 00000 n 
+0000002282 00000 n 
+0000002334 00000 n 
+0000002418 00000 n 
+0000002489 00000 n 
+0000002574 00000 n 
+0000002676 00000 n 
+0000002719 00000 n 
+0000002820 00000 n 
+0000002922 00000 n 
+0000003023 00000 n 
+0000003125 00000 n 
+0000003227 00000 n 
+0000003329 00000 n 
+0000003430 00000 n 
+0000003532 00000 n 
+0000003634 00000 n 
+0000003736 00000 n 
+0000003837 00000 n 
+0000003939 00000 n 
+0000004041 00000 n 
+0000004143 00000 n 
+0000004245 00000 n 
+0000004347 00000 n 
+0000004449 00000 n 
+0000004551 00000 n 
+0000004653 00000 n 
+0000004755 00000 n 
+0000004857 00000 n 
+0000004959 00000 n 
+0000005061 00000 n 
+0000005163 00000 n 
+0000005265 00000 n 
+0000005367 00000 n 
+0000005469 00000 n 
+0000005571 00000 n 
+0000005673 00000 n 
+0000005775 00000 n 
+0000005877 00000 n 
+0000005979 00000 n 
+0000006081 00000 n 
+0000006183 00000 n 
+0000006285 00000 n 
+0000006387 00000 n 
+0000006489 00000 n 
+0000006591 00000 n 
+0000006693 00000 n 
+0000006795 00000 n 
+0000006897 00000 n 
+0000006999 00000 n 
+0000007101 00000 n 
+0000007203 00000 n 
+0000007305 00000 n 
+0000007407 00000 n 
+0000007509 00000 n 
+0000007611 00000 n 
+0000007713 00000 n 
+0000007815 00000 n 
+0000007917 00000 n 
+0000008019 00000 n 
+0000008121 00000 n 
+0000008223 00000 n 
+0000008325 00000 n 
+0000008427 00000 n 
+0000008529 00000 n 
+0000008630 00000 n 
+0000008732 00000 n 
+0000008833 00000 n 
+0000009269 00000 n 
+0000009370 00000 n 
+0000009472 00000 n 
+0000009574 00000 n 
+0000009676 00000 n 
+0000009778 00000 n 
+0000009880 00000 n 
+0000009982 00000 n 
+0000010084 00000 n 
+0000010186 00000 n 
+0000010288 00000 n 
+0000010390 00000 n 
+0000010492 00000 n 
+0000010594 00000 n 
+0000010696 00000 n 
+0000010798 00000 n 
+0000010900 00000 n 
+0000011002 00000 n 
+0000011104 00000 n 
+0000011205 00000 n 
+0000011306 00000 n 
+0000011408 00000 n 
+0000011510 00000 n 
+0000011612 00000 n 
+0000011714 00000 n 
+0000011817 00000 n 
+0000011919 00000 n 
+0000012022 00000 n 
+0000012125 00000 n 
+0000012227 00000 n 
+0000012452 00000 n 
+0000012513 00000 n 
+0000012600 00000 n 
+0000012625 00000 n 
+0000012680 00000 n 
+0000012767 00000 n 
+0000012840 00000 n 
+0000012927 00000 n 
+0000013013 00000 n 
+0000013100 00000 n 
+0000013203 00000 n 
+0000013305 00000 n 
+0000013392 00000 n 
+0000013494 00000 n 
+0000013581 00000 n 
+0000013671 00000 n 
+0000013758 00000 n 
+0000013831 00000 n 
+0000013885 00000 n 
+0000013972 00000 n 
+0000014048 00000 n 
+0000014135 00000 n 
+0000014203 00000 n 
+0000014290 00000 n 
+0000014331 00000 n 
+0000014418 00000 n 
+0000014505 00000 n 
+0000014530 00000 n 
+0000014629 00000 n 
+0000014716 00000 n 
+0000014741 00000 n 
 0000014832 00000 n 
 0000014919 00000 n 
 0000014832 00000 n 
 0000014919 00000 n 
-0000015006 00000 n 
-0000015031 00000 n 
-0000015130 00000 n 
-0000015217 00000 n 
-0000015242 00000 n 
-0000015333 00000 n 
-0000015420 00000 n 
-0000015445 00000 n 
-0000015503 00000 n 
-0000015590 00000 n 
-0000015615 00000 n 
-0000015669 00000 n 
-0000015756 00000 n 
-0000015781 00000 n 
-0000015850 00000 n 
-0000015937 00000 n 
-0000016037 00000 n 
-0000016124 00000 n 
-0000016157 00000 n 
-0000016233 00000 n 
-0000016320 00000 n 
-0000016396 00000 n 
-0000016482 00000 n 
-0000016573 00000 n 
-0000016660 00000 n 
-0000016701 00000 n 
-0000016756 00000 n 
-0000016843 00000 n 
-0000016868 00000 n 
-0000016923 00000 n 
-0000017010 00000 n 
-0000017100 00000 n 
-0000017186 00000 n 
-0000017274 00000 n 
-0000017361 00000 n 
+0000014977 00000 n 
+0000015064 00000 n 
+0000015097 00000 n 
+0000015151 00000 n 
+0000015238 00000 n 
+0000015263 00000 n 
+0000015332 00000 n 
+0000015419 00000 n 
+0000015519 00000 n 
+0000015606 00000 n 
+0000015682 00000 n 
+0000015769 00000 n 
+0000015860 00000 n 
+0000015947 00000 n 
+0000015996 00000 n 
+0000016051 00000 n 
+0000016138 00000 n 
+0000016163 00000 n 
+0000016253 00000 n 
+0000016340 00000 n 
+0000016430 00000 n 
+0000016517 00000 n 
+0000016605 00000 n 
+0000016692 00000 n 
+0000016782 00000 n 
+0000016869 00000 n 
+0000016968 00000 n 
+0000017055 00000 n 
+0000017154 00000 n 
+0000017239 00000 n 
 0000017451 00000 n 
 0000017451 00000 n 
-0000017537 00000 n 
-0000017636 00000 n 
-0000017723 00000 n 
-0000017935 00000 n 
-0000018022 00000 n 
-0000018114 00000 n 
-0000018201 00000 n 
-0000018285 00000 n 
-0000018372 00000 n 
-0000018462 00000 n 
-0000018549 00000 n 
-0000018746 00000 n 
-0000018832 00000 n 
-0000018923 00000 n 
-0000019008 00000 n 
-0000019099 00000 n 
-0000019184 00000 n 
-0000019246 00000 n 
-0000019331 00000 n 
-0000019452 00000 n 
-0000019527 00000 n 
-0000019614 00000 n 
-0000019639 00000 n 
-0000019700 00000 n 
-0000019787 00000 n 
-0000019855 00000 n 
-0000019942 00000 n 
-0000020009 00000 n 
-0000020096 00000 n 
-0000020155 00000 n 
-0000020242 00000 n 
-0000020321 00000 n 
-0000020408 00000 n 
-0000020466 00000 n 
-0000020553 00000 n 
-0000020611 00000 n 
-0000020697 00000 n 
-0000020765 00000 n 
-0000020852 00000 n 
-0000020919 00000 n 
-0000021006 00000 n 
-0000021095 00000 n 
+0000017538 00000 n 
+0000017630 00000 n 
+0000017717 00000 n 
+0000017801 00000 n 
+0000017888 00000 n 
+0000017978 00000 n 
+0000018064 00000 n 
+0000018261 00000 n 
+0000018348 00000 n 
+0000018439 00000 n 
+0000018525 00000 n 
+0000018616 00000 n 
+0000018703 00000 n 
+0000018765 00000 n 
+0000018852 00000 n 
+0000018927 00000 n 
+0000019013 00000 n 
+0000019150 00000 n 
+0000019211 00000 n 
+0000019298 00000 n 
+0000019366 00000 n 
+0000019453 00000 n 
+0000019520 00000 n 
+0000019607 00000 n 
+0000019666 00000 n 
+0000019753 00000 n 
+0000019832 00000 n 
+0000019919 00000 n 
+0000019977 00000 n 
+0000020064 00000 n 
+0000020132 00000 n 
+0000020219 00000 n 
+0000020286 00000 n 
+0000020373 00000 n 
+0000020462 00000 n 
+0000020549 00000 n 
+0000020642 00000 n 
+0000020728 00000 n 
+0000020825 00000 n 
+0000020880 00000 n 
+0000020966 00000 n 
+0000021025 00000 n 
+0000021111 00000 n 
 0000021182 00000 n 
 0000021182 00000 n 
-0000021275 00000 n 
-0000021362 00000 n 
+0000021268 00000 n 
+0000021322 00000 n 
+0000021409 00000 n 
 0000021467 00000 n 
 0000021467 00000 n 
-0000021522 00000 n 
-0000021608 00000 n 
-0000021667 00000 n 
-0000021753 00000 n 
-0000021824 00000 n 
-0000021910 00000 n 
-0000021964 00000 n 
-0000022051 00000 n 
-0000022109 00000 n 
-0000022195 00000 n 
-0000022238 00000 n 
-0000022324 00000 n 
-0000022521 00000 n 
-0000022607 00000 n 
-0000022701 00000 n 
-0000022787 00000 n 
-0000022864 00000 n 
-0000022950 00000 n 
-0000023017 00000 n 
-0000023103 00000 n 
-0000023170 00000 n 
-0000023256 00000 n 
-0000023315 00000 n 
-0000023401 00000 n 
-0000023460 00000 n 
-0000023546 00000 n 
-0000023618 00000 n 
-0000023704 00000 n 
-0000023833 00000 n 
-0000023867 00000 n 
-0000023901 00000 n 
-0000025444 00000 n 
-0000025487 00000 n 
-0000025530 00000 n 
-0000025573 00000 n 
-0000025616 00000 n 
-0000025659 00000 n 
-0000025702 00000 n 
-0000025745 00000 n 
-0000025788 00000 n 
-0000025831 00000 n 
-0000025874 00000 n 
-0000025917 00000 n 
-0000025960 00000 n 
-0000026003 00000 n 
-0000026046 00000 n 
-0000026089 00000 n 
-0000026132 00000 n 
-0000026175 00000 n 
-0000026218 00000 n 
-0000026261 00000 n 
-0000026304 00000 n 
-0000026347 00000 n 
-0000026390 00000 n 
-0000026433 00000 n 
-0000026476 00000 n 
-0000026519 00000 n 
-0000026562 00000 n 
-0000026605 00000 n 
-0000026648 00000 n 
-0000026691 00000 n 
-0000026734 00000 n 
-0000026777 00000 n 
-0000026820 00000 n 
-0000026863 00000 n 
-0000026906 00000 n 
-0000026949 00000 n 
-0000026992 00000 n 
-0000027035 00000 n 
-0000027078 00000 n 
-0000027121 00000 n 
-0000027164 00000 n 
-0000027207 00000 n 
-0000027250 00000 n 
-0000027293 00000 n 
-0000027336 00000 n 
-0000027379 00000 n 
-0000027422 00000 n 
-0000027465 00000 n 
-0000027508 00000 n 
-0000027551 00000 n 
-0000027594 00000 n 
-0000027637 00000 n 
-0000027680 00000 n 
-0000027723 00000 n 
-0000027766 00000 n 
-0000027809 00000 n 
-0000027852 00000 n 
-0000027895 00000 n 
-0000027938 00000 n 
-0000027981 00000 n 
-0000028024 00000 n 
-0000028067 00000 n 
-0000028110 00000 n 
-0000028153 00000 n 
-0000028196 00000 n 
-0000028239 00000 n 
-0000028282 00000 n 
-0000028325 00000 n 
-0000028368 00000 n 
-0000028411 00000 n 
-0000028454 00000 n 
-0000028497 00000 n 
-0000028540 00000 n 
-0000028583 00000 n 
-0000028626 00000 n 
-0000028669 00000 n 
-0000028712 00000 n 
-0000028755 00000 n 
-0000028798 00000 n 
-0000028841 00000 n 
-0000028884 00000 n 
-0000028927 00000 n 
-0000028970 00000 n 
-0000029013 00000 n 
-0000029056 00000 n 
-0000029099 00000 n 
-0000029142 00000 n 
-0000029185 00000 n 
-0000029228 00000 n 
-0000029271 00000 n 
-0000029314 00000 n 
-0000029357 00000 n 
-0000029400 00000 n 
-0000029807 00000 n 
-0000029986 00000 n 
-0000030721 00000 n 
-0000030909 00000 n 
-0000035336 00000 n 
-0000035525 00000 n 
-0000039541 00000 n 
-0000039730 00000 n 
-0000040292 00000 n 
-0000040472 00000 n 
-0000041430 00000 n 
-0000041638 00000 n 
-0000043766 00000 n 
-0000043956 00000 n 
-0000044933 00000 n 
-0000045131 00000 n 
-0000047272 00000 n 
-0000047480 00000 n 
-0000049353 00000 n 
-0000049546 00000 n 
-0000051364 00000 n 
-0000051548 00000 n 
-0000052411 00000 n 
-0000052594 00000 n 
-0000053893 00000 n 
-0000054076 00000 n 
-0000055097 00000 n 
-0000055280 00000 n 
-0000056533 00000 n 
-0000056716 00000 n 
-0000057788 00000 n 
-0000057971 00000 n 
-0000058989 00000 n 
-0000059172 00000 n 
-0000060237 00000 n 
-0000060420 00000 n 
-0000061527 00000 n 
-0000061710 00000 n 
-0000062659 00000 n 
-0000062842 00000 n 
-0000064044 00000 n 
-0000064227 00000 n 
-0000065615 00000 n 
-0000065798 00000 n 
-0000067098 00000 n 
-0000067281 00000 n 
-0000068412 00000 n 
-0000068595 00000 n 
-0000069929 00000 n 
-0000070112 00000 n 
-0000071435 00000 n 
-0000071618 00000 n 
-0000072968 00000 n 
-0000073151 00000 n 
-0000074509 00000 n 
-0000074683 00000 n 
-0000076212 00000 n 
-0000076377 00000 n 
-0000077544 00000 n 
-0000077718 00000 n 
-0000078200 00000 n 
-0000078390 00000 n 
-0000079399 00000 n 
-0000079592 00000 n 
-0000081642 00000 n 
-0000081844 00000 n 
-0000084094 00000 n 
-0000084287 00000 n 
-0000086078 00000 n 
-0000086295 00000 n 
-0000087761 00000 n 
-0000087968 00000 n 
-0000089482 00000 n 
-0000089689 00000 n 
-0000091041 00000 n 
-0000091233 00000 n 
-0000092495 00000 n 
-0000092712 00000 n 
-0000094304 00000 n 
-0000094493 00000 n 
-0000095311 00000 n 
-0000095518 00000 n 
-0000096736 00000 n 
-0000096934 00000 n 
-0000098847 00000 n 
-0000099027 00000 n 
-0000099566 00000 n 
-0000099764 00000 n 
-0000101691 00000 n 
-0000101880 00000 n 
-0000102910 00000 n 
-0000102966 00000 n 
-0000103065 00000 n 
-0000103211 00000 n 
-0000103318 00000 n 
-0000103470 00000 n 
-0000103570 00000 n 
-0000103678 00000 n 
-0000103786 00000 n 
-0000103944 00000 n 
-0000104061 00000 n 
-0000104188 00000 n 
-0000104298 00000 n 
-0000104449 00000 n 
-0000104548 00000 n 
-0000104698 00000 n 
-0000104812 00000 n 
-0000104937 00000 n 
-0000105070 00000 n 
-0000105197 00000 n 
-0000105331 00000 n 
-0000105494 00000 n 
-0000105648 00000 n 
-0000105751 00000 n 
-0000105867 00000 n 
-0000105991 00000 n 
-0000106119 00000 n 
-0000106217 00000 n 
-0000106364 00000 n 
-0000106488 00000 n 
-0000106632 00000 n 
-0000106776 00000 n 
-0000106919 00000 n 
-0000107069 00000 n 
-0000107214 00000 n 
-0000107329 00000 n 
-0000107477 00000 n 
-0000107577 00000 n 
-0000107722 00000 n 
-0000107862 00000 n 
-0000108008 00000 n 
-0000108167 00000 n 
-0000108303 00000 n 
-0000108429 00000 n 
-0000108553 00000 n 
-0000108692 00000 n 
-0000108827 00000 n 
-0000108982 00000 n 
-0000109143 00000 n 
-0000109248 00000 n 
-0000109398 00000 n 
-0000109557 00000 n 
-0000109697 00000 n 
-0000109831 00000 n 
-0000109982 00000 n 
-0000110111 00000 n 
-0000110280 00000 n 
-0000110435 00000 n 
-0000110588 00000 n 
-0000110732 00000 n 
-0000110884 00000 n 
-0000110992 00000 n 
-0000111091 00000 n 
-0000111248 00000 n 
-0000111350 00000 n 
-0000111476 00000 n 
-0000111648 00000 n 
-0000111762 00000 n 
-0000111878 00000 n 
-0000112010 00000 n 
-0000112116 00000 n 
-0000112225 00000 n 
-0000112334 00000 n 
-0000112442 00000 n 
-0000112551 00000 n 
-0000112660 00000 n 
-0000112771 00000 n 
-0000112882 00000 n 
-0000112975 00000 n 
-0000113111 00000 n 
-0000113215 00000 n 
-0000113333 00000 n 
-0000113528 00000 n 
-0000113626 00000 n 
-0000113737 00000 n 
-0000113857 00000 n 
-0000114001 00000 n 
-0000114093 00000 n 
-0000114265 00000 n 
-0000114359 00000 n 
-0000114453 00000 n 
-0000114547 00000 n 
+0000021553 00000 n 
+0000021596 00000 n 
+0000021683 00000 n 
+0000021880 00000 n 
+0000021966 00000 n 
+0000022060 00000 n 
+0000022146 00000 n 
+0000022223 00000 n 
+0000022309 00000 n 
+0000022376 00000 n 
+0000022462 00000 n 
+0000022529 00000 n 
+0000022615 00000 n 
+0000022674 00000 n 
+0000022760 00000 n 
+0000022819 00000 n 
+0000022905 00000 n 
+0000022977 00000 n 
+0000023063 00000 n 
+0000023192 00000 n 
+0000023226 00000 n 
+0000023260 00000 n 
+0000024803 00000 n 
+0000024846 00000 n 
+0000024889 00000 n 
+0000024932 00000 n 
+0000024975 00000 n 
+0000025018 00000 n 
+0000025061 00000 n 
+0000025104 00000 n 
+0000025147 00000 n 
+0000025190 00000 n 
+0000025233 00000 n 
+0000025276 00000 n 
+0000025319 00000 n 
+0000025362 00000 n 
+0000025405 00000 n 
+0000025448 00000 n 
+0000025491 00000 n 
+0000025534 00000 n 
+0000025577 00000 n 
+0000025620 00000 n 
+0000025663 00000 n 
+0000025706 00000 n 
+0000025749 00000 n 
+0000025792 00000 n 
+0000025835 00000 n 
+0000025878 00000 n 
+0000025921 00000 n 
+0000025964 00000 n 
+0000026007 00000 n 
+0000026050 00000 n 
+0000026093 00000 n 
+0000026136 00000 n 
+0000026179 00000 n 
+0000026222 00000 n 
+0000026265 00000 n 
+0000026308 00000 n 
+0000026351 00000 n 
+0000026394 00000 n 
+0000026437 00000 n 
+0000026480 00000 n 
+0000026523 00000 n 
+0000026566 00000 n 
+0000026609 00000 n 
+0000026652 00000 n 
+0000026695 00000 n 
+0000026738 00000 n 
+0000026781 00000 n 
+0000026824 00000 n 
+0000026867 00000 n 
+0000026910 00000 n 
+0000026953 00000 n 
+0000026996 00000 n 
+0000027039 00000 n 
+0000027082 00000 n 
+0000027125 00000 n 
+0000027168 00000 n 
+0000027211 00000 n 
+0000027254 00000 n 
+0000027297 00000 n 
+0000027340 00000 n 
+0000027383 00000 n 
+0000027426 00000 n 
+0000027469 00000 n 
+0000027512 00000 n 
+0000027555 00000 n 
+0000027598 00000 n 
+0000027641 00000 n 
+0000027684 00000 n 
+0000027727 00000 n 
+0000027770 00000 n 
+0000027813 00000 n 
+0000027856 00000 n 
+0000027899 00000 n 
+0000027942 00000 n 
+0000027985 00000 n 
+0000028028 00000 n 
+0000028071 00000 n 
+0000028114 00000 n 
+0000028157 00000 n 
+0000028200 00000 n 
+0000028243 00000 n 
+0000028286 00000 n 
+0000028329 00000 n 
+0000028372 00000 n 
+0000028415 00000 n 
+0000028458 00000 n 
+0000028501 00000 n 
+0000028544 00000 n 
+0000028587 00000 n 
+0000028630 00000 n 
+0000028673 00000 n 
+0000028716 00000 n 
+0000028759 00000 n 
+0000029062 00000 n 
+0000029232 00000 n 
+0000029926 00000 n 
+0000030096 00000 n 
+0000036270 00000 n 
+0000036441 00000 n 
+0000038831 00000 n 
+0000039002 00000 n 
+0000040005 00000 n 
+0000040194 00000 n 
+0000042937 00000 n 
+0000043126 00000 n 
+0000046218 00000 n 
+0000046416 00000 n 
+0000048731 00000 n 
+0000048905 00000 n 
+0000049683 00000 n 
+0000049857 00000 n 
+0000051396 00000 n 
+0000051570 00000 n 
+0000053193 00000 n 
+0000053367 00000 n 
+0000054634 00000 n 
+0000054808 00000 n 
+0000056183 00000 n 
+0000056357 00000 n 
+0000057695 00000 n 
+0000057869 00000 n 
+0000059294 00000 n 
+0000059468 00000 n 
+0000061091 00000 n 
+0000061265 00000 n 
+0000062934 00000 n 
+0000063108 00000 n 
+0000064493 00000 n 
+0000064667 00000 n 
+0000066543 00000 n 
+0000066717 00000 n 
+0000068587 00000 n 
+0000068752 00000 n 
+0000070302 00000 n 
+0000070467 00000 n 
+0000071375 00000 n 
+0000071555 00000 n 
+0000072551 00000 n 
+0000072734 00000 n 
+0000075993 00000 n 
+0000076176 00000 n 
+0000078968 00000 n 
+0000079166 00000 n 
+0000081147 00000 n 
+0000081336 00000 n 
+0000083057 00000 n 
+0000083231 00000 n 
+0000084613 00000 n 
+0000084811 00000 n 
+0000086709 00000 n 
+0000086898 00000 n 
+0000088084 00000 n 
+0000088273 00000 n 
+0000090260 00000 n 
+0000090449 00000 n 
+0000092266 00000 n 
+0000092446 00000 n 
+0000093401 00000 n 
+0000093457 00000 n 
+0000093556 00000 n 
+0000093702 00000 n 
+0000093809 00000 n 
+0000093961 00000 n 
+0000094061 00000 n 
+0000094169 00000 n 
+0000094277 00000 n 
+0000094435 00000 n 
+0000094552 00000 n 
+0000094679 00000 n 
+0000094789 00000 n 
+0000094940 00000 n 
+0000095039 00000 n 
+0000095189 00000 n 
+0000095303 00000 n 
+0000095428 00000 n 
+0000095561 00000 n 
+0000095688 00000 n 
+0000095822 00000 n 
+0000095985 00000 n 
+0000096139 00000 n 
+0000096242 00000 n 
+0000096358 00000 n 
+0000096482 00000 n 
+0000096610 00000 n 
+0000096708 00000 n 
+0000096855 00000 n 
+0000096979 00000 n 
+0000097123 00000 n 
+0000097267 00000 n 
+0000097410 00000 n 
+0000097560 00000 n 
+0000097705 00000 n 
+0000097820 00000 n 
+0000097968 00000 n 
+0000098068 00000 n 
+0000098213 00000 n 
+0000098353 00000 n 
+0000098499 00000 n 
+0000098658 00000 n 
+0000098794 00000 n 
+0000098920 00000 n 
+0000099044 00000 n 
+0000099183 00000 n 
+0000099318 00000 n 
+0000099473 00000 n 
+0000099634 00000 n 
+0000099739 00000 n 
+0000099889 00000 n 
+0000100048 00000 n 
+0000100188 00000 n 
+0000100322 00000 n 
+0000100473 00000 n 
+0000100602 00000 n 
+0000100771 00000 n 
+0000100926 00000 n 
+0000101079 00000 n 
+0000101223 00000 n 
+0000101375 00000 n 
+0000101483 00000 n 
+0000101582 00000 n 
+0000101739 00000 n 
+0000101841 00000 n 
+0000101967 00000 n 
+0000102139 00000 n 
+0000102253 00000 n 
+0000102369 00000 n 
+0000102501 00000 n 
+0000102607 00000 n 
+0000102716 00000 n 
+0000102825 00000 n 
+0000102933 00000 n 
+0000103042 00000 n 
+0000103151 00000 n 
+0000103262 00000 n 
+0000103373 00000 n 
+0000103466 00000 n 
+0000103602 00000 n 
+0000103706 00000 n 
+0000103824 00000 n 
+0000104019 00000 n 
+0000104117 00000 n 
+0000104228 00000 n 
+0000104348 00000 n 
+0000104492 00000 n 
+0000104584 00000 n 
+0000104756 00000 n 
+0000104850 00000 n 
+0000104944 00000 n 
+0000105038 00000 n 
 trailer
 trailer
-<</Size 528/Root 527 0 R/Info 1 0 R/ID[<6750eed934b4b51d10590b7355a06df5><6750eed934b4b51d10590b7355a06df5>]>>
+<</Size 489/Root 488 0 R/Info 1 0 R/ID[<04b4774cc3dfeec612ef5046ac002262><04b4774cc3dfeec612ef5046ac002262>]>>
 startxref
 startxref
-114928
+105418
 %%EOF
 %%EOF
index e7bd2db..ba021f4 100644 (file)
@@ -1,79 +1,96 @@
 %PDF-1.3
 %âãÏÓ
 %PDF-1.3
 %âãÏÓ
-1 0 obj<</Producer(htmldoc 1.8.21 Copyright 1997-2002 Easy Software Products, All Rights Reserved.)/CreationDate(D:20020905171831+0400)/Title(Privoxy Frequently Asked Questions)/Creator(Modular DocBook HTML Stylesheet Version 1.76b+)>>endobj
+1 0 obj<</Producer(htmldoc 1.8.23 Copyright 1997-2002 Easy Software Products, All Rights Reserved.)/CreationDate(D:20040131004424-0100)/Title(Privoxy Frequently Asked Questions)/Creator(Modular DocBook HTML Stylesheet Version 1.7)>>endobj
 2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
 3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
 4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Bold/Encoding 2 0 R>>endobj
 2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
 3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
 4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Bold/Encoding 2 0 R>>endobj
-5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
-6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
-7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj
-8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
-9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
-10 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
-11 0 obj<</Subtype/Link/Rect[72.0 601.7 104.4 611.7]/Border[0 0 0]/Dest[541 0 R/XYZ 0 734 0]>>endobj
-12 0 obj<</S/URI/URI(http://www.privoxy.org)>>endobj
-13 0 obj<</Subtype/Link/Rect[160.5 601.7 226.3 611.7]/Border[0 0 0]/A 12 0 R>>endobj
-14 0 obj<</S/URI/URI(http://www.privoxy.org/)>>endobj
-15 0 obj<</Subtype/Link/Rect[366.2 534.2 403.8 547.2]/Border[0 0 0]/A 14 0 R>>endobj
-16 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-17 0 obj<</Subtype/Link/Rect[72.0 521.0 130.4 534.0]/Border[0 0 0]/A 16 0 R>>endobj
-18 0 obj<</S/URI/URI(http://www.privoxy.org/faq/)>>endobj
-19 0 obj<</Subtype/Link/Rect[319.2 389.0 446.6 402.0]/Border[0 0 0]/A 18 0 R>>endobj
-20 0 obj<</Subtype/Link/Rect[513.2 389.0 550.1 402.0]/Border[0 0 0]/Dest[537 0 R/XYZ 0 734 0]>>endobj
-21 0 obj<</Subtype/Link/Rect[72.0 375.8 103.2 388.8]/Border[0 0 0]/Dest[537 0 R/XYZ 0 734 0]>>endobj
-22 0 obj[11 0 R
-13 0 R
-15 0 R
-17 0 R
-19 0 R
-20 0 R
-21 0 R]endobj
-23 0 obj<</Subtype/Link/Rect[72.0 684.0 181.1 697.0]/Border[0 0 0]/Dest[497 0 R/XYZ 0 734 0]>>endobj
-24 0 obj<</Subtype/Link/Rect[108.0 670.8 290.4 683.8]/Border[0 0 0]/Dest[497 0 R/XYZ 0 696 0]>>endobj
-25 0 obj<</Subtype/Link/Rect[108.0 657.6 321.7 670.6]/Border[0 0 0]/Dest[497 0 R/XYZ 0 400 0]>>endobj
-26 0 obj<</Subtype/Link/Rect[108.0 644.4 348.7 657.4]/Border[0 0 0]/Dest[497 0 R/XYZ 0 183 0]>>endobj
-27 0 obj<</Subtype/Link/Rect[108.0 631.2 325.9 644.2]/Border[0 0 0]/Dest[499 0 R/XYZ 0 441 0]>>endobj
-28 0 obj<</Subtype/Link/Rect[108.0 618.0 374.1 631.0]/Border[0 0 0]/Dest[499 0 R/XYZ 0 237 0]>>endobj
-29 0 obj<</Subtype/Link/Rect[108.0 604.8 414.4 617.8]/Border[0 0 0]/Dest[501 0 R/XYZ 0 705 0]>>endobj
-30 0 obj<</Subtype/Link/Rect[108.0 591.6 474.0 604.6]/Border[0 0 0]/Dest[501 0 R/XYZ 0 567 0]>>endobj
-31 0 obj<</Subtype/Link/Rect[108.0 578.4 413.5 591.4]/Border[0 0 0]/Dest[501 0 R/XYZ 0 426 0]>>endobj
-32 0 obj<</Subtype/Link/Rect[108.0 565.2 298.3 578.2]/Border[0 0 0]/Dest[501 0 R/XYZ 0 302 0]>>endobj
-33 0 obj<</Subtype/Link/Rect[72.0 538.8 136.8 551.8]/Border[0 0 0]/Dest[505 0 R/XYZ 0 734 0]>>endobj
-34 0 obj<</Subtype/Link/Rect[108.0 525.6 317.6 538.6]/Border[0 0 0]/Dest[505 0 R/XYZ 0 696 0]>>endobj
-35 0 obj<</Subtype/Link/Rect[108.0 512.4 305.7 525.4]/Border[0 0 0]/Dest[505 0 R/XYZ 0 611 0]>>endobj
-36 0 obj<</Subtype/Link/Rect[108.0 499.2 296.2 512.2]/Border[0 0 0]/Dest[505 0 R/XYZ 0 447 0]>>endobj
-37 0 obj<</Subtype/Link/Rect[108.0 486.0 421.5 499.0]/Border[0 0 0]/Dest[505 0 R/XYZ 0 323 0]>>endobj
-38 0 obj<</Subtype/Link/Rect[108.0 472.8 295.9 485.8]/Border[0 0 0]/Dest[505 0 R/XYZ 0 238 0]>>endobj
-39 0 obj<</Subtype/Link/Rect[108.0 459.6 509.0 472.6]/Border[0 0 0]/Dest[507 0 R/XYZ 0 679 0]>>endobj
-40 0 obj<</Subtype/Link/Rect[72.0 433.2 149.6 446.2]/Border[0 0 0]/Dest[509 0 R/XYZ 0 734 0]>>endobj
-41 0 obj<</Subtype/Link/Rect[108.0 420.0 300.8 433.0]/Border[0 0 0]/Dest[509 0 R/XYZ 0 696 0]>>endobj
-42 0 obj<</Subtype/Link/Rect[108.0 406.8 259.8 419.8]/Border[0 0 0]/Dest[509 0 R/XYZ 0 585 0]>>endobj
-43 0 obj<</Subtype/Link/Rect[108.0 393.6 239.5 406.6]/Border[0 0 0]/Dest[509 0 R/XYZ 0 474 0]>>endobj
-44 0 obj<</Subtype/Link/Rect[108.0 380.4 440.3 393.4]/Border[0 0 0]/Dest[509 0 R/XYZ 0 310 0]>>endobj
-45 0 obj<</Subtype/Link/Rect[108.0 367.2 430.3 380.2]/Border[0 0 0]/Dest[509 0 R/XYZ 0 221 0]>>endobj
-46 0 obj<</Subtype/Link/Rect[108.0 354.0 426.4 367.0]/Border[0 0 0]/Dest[511 0 R/XYZ 0 734 0]>>endobj
-47 0 obj<</Subtype/Link/Rect[108.0 340.8 383.6 353.8]/Border[0 0 0]/Dest[511 0 R/XYZ 0 569 0]>>endobj
-48 0 obj<</Subtype/Link/Rect[108.0 327.6 496.5 340.6]/Border[0 0 0]/Dest[511 0 R/XYZ 0 412 0]>>endobj
-49 0 obj<</Subtype/Link/Rect[108.0 314.4 514.6 327.4]/Border[0 0 0]/Dest[513 0 R/XYZ 0 649 0]>>endobj
-50 0 obj<</Subtype/Link/Rect[108.0 301.2 344.9 314.2]/Border[0 0 0]/Dest[513 0 R/XYZ 0 429 0]>>endobj
-51 0 obj<</Subtype/Link/Rect[108.0 288.0 382.3 301.0]/Border[0 0 0]/Dest[513 0 R/XYZ 0 225 0]>>endobj
-52 0 obj<</Subtype/Link/Rect[108.0 274.8 473.5 287.8]/Border[0 0 0]/Dest[515 0 R/XYZ 0 692 0]>>endobj
-53 0 obj<</Subtype/Link/Rect[108.0 261.6 385.1 274.6]/Border[0 0 0]/Dest[515 0 R/XYZ 0 537 0]>>endobj
-54 0 obj<</Subtype/Link/Rect[108.0 248.4 520.1 261.4]/Border[0 0 0]/Dest[515 0 R/XYZ 0 426 0]>>endobj
-55 0 obj<</Subtype/Link/Rect[108.0 235.2 216.5 248.2]/Border[0 0 0]/Dest[515 0 R/XYZ 0 426 0]>>endobj
-56 0 obj<</Subtype/Link/Rect[108.0 222.0 330.4 235.0]/Border[0 0 0]/Dest[515 0 R/XYZ 0 193 0]>>endobj
-57 0 obj<</Subtype/Link/Rect[108.0 208.8 403.4 221.8]/Border[0 0 0]/Dest[517 0 R/XYZ 0 734 0]>>endobj
-58 0 obj<</Subtype/Link/Rect[108.0 195.6 510.4 208.6]/Border[0 0 0]/Dest[517 0 R/XYZ 0 662 0]>>endobj
-59 0 obj<</Subtype/Link/Rect[108.0 182.4 318.9 195.4]/Border[0 0 0]/Dest[517 0 R/XYZ 0 573 0]>>endobj
-60 0 obj<</Subtype/Link/Rect[72.0 156.0 149.0 169.0]/Border[0 0 0]/Dest[519 0 R/XYZ 0 734 0]>>endobj
-61 0 obj<</Subtype/Link/Rect[108.0 142.8 526.9 155.8]/Border[0 0 0]/Dest[519 0 R/XYZ 0 696 0]>>endobj
-62 0 obj<</Subtype/Link/Rect[108.0 129.6 505.3 142.6]/Border[0 0 0]/Dest[519 0 R/XYZ 0 542 0]>>endobj
-63 0 obj<</Subtype/Link/Rect[108.0 116.4 143.7 129.4]/Border[0 0 0]/Dest[519 0 R/XYZ 0 542 0]>>endobj
-64 0 obj<</Subtype/Link/Rect[108.0 103.2 369.2 116.2]/Border[0 0 0]/Dest[519 0 R/XYZ 0 361 0]>>endobj
-65 0 obj<</Subtype/Link/Rect[108.0 90.0 286.5 103.0]/Border[0 0 0]/Dest[521 0 R/XYZ 0 734 0]>>endobj
-66 0 obj<</Subtype/Link/Rect[108.0 76.8 249.1 89.8]/Border[0 0 0]/Dest[521 0 R/XYZ 0 662 0]>>endobj
-67 0 obj<</Subtype/Link/Rect[108.0 63.6 264.7 76.6]/Border[0 0 0]/Dest[521 0 R/XYZ 0 590 0]>>endobj
-68 0 obj[23 0 R
+5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
+6 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
+7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Oblique/Encoding 2 0 R>>endobj
+8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-BoldOblique/Encoding 2 0 R>>endobj
+9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
+10 0 obj<</Subtype/Link/Rect[72.0 644.2 95.8 651.8]/Border[0 0 0]/Dest[577 0 R/XYZ 0 734 0]>>endobj
+11 0 obj<</S/URI/URI(http://www.privoxy.org)>>endobj
+12 0 obj<</Subtype/Link/Rect[138.3 644.2 187.7 651.8]/Border[0 0 0]/A 11 0 R>>endobj
+13 0 obj<</S/URI/URI(http://www.privoxy.org/)>>endobj
+14 0 obj<</Subtype/Link/Rect[308.1 595.0 336.6 605.0]/Border[0 0 0]/A 13 0 R>>endobj
+15 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+16 0 obj<</Subtype/Link/Rect[449.5 595.0 497.0 605.0]/Border[0 0 0]/A 15 0 R>>endobj
+17 0 obj<</S/URI/URI(http://www.privoxy.org/faq/)>>endobj
+18 0 obj<</Subtype/Link/Rect[187.6 508.6 284.1 518.6]/Border[0 0 0]/A 17 0 R>>endobj
+19 0 obj<</Subtype/Link/Rect[341.5 508.6 398.8 518.6]/Border[0 0 0]/Dest[575 0 R/XYZ 0 734 0]>>endobj
+20 0 obj[10 0 R
+12 0 R
+14 0 R
+16 0 R
+18 0 R
+19 0 R]endobj
+21 0 obj<</Subtype/Link/Rect[72.0 698.8 156.9 708.8]/Border[0 0 0]/Dest[543 0 R/XYZ 0 734 0]>>endobj
+22 0 obj<</Subtype/Link/Rect[108.0 689.2 251.6 699.2]/Border[0 0 0]/Dest[543 0 R/XYZ 0 707 0]>>endobj
+23 0 obj<</Subtype/Link/Rect[108.0 679.6 277.3 689.6]/Border[0 0 0]/Dest[543 0 R/XYZ 0 511 0]>>endobj
+24 0 obj<</Subtype/Link/Rect[108.0 670.0 297.9 680.0]/Border[0 0 0]/Dest[543 0 R/XYZ 0 363 0]>>endobj
+25 0 obj<</Subtype/Link/Rect[108.0 660.4 278.6 670.4]/Border[0 0 0]/Dest[545 0 R/XYZ 0 734 0]>>endobj
+26 0 obj<</Subtype/Link/Rect[108.0 650.8 320.5 660.8]/Border[0 0 0]/Dest[545 0 R/XYZ 0 605 0]>>endobj
+27 0 obj<</Subtype/Link/Rect[108.0 641.2 353.4 651.2]/Border[0 0 0]/Dest[545 0 R/XYZ 0 447 0]>>endobj
+28 0 obj<</Subtype/Link/Rect[108.0 631.6 303.2 641.6]/Border[0 0 0]/Dest[545 0 R/XYZ 0 357 0]>>endobj
+29 0 obj<</Subtype/Link/Rect[108.0 622.0 400.1 632.0]/Border[0 0 0]/Dest[545 0 R/XYZ 0 276 0]>>endobj
+30 0 obj<</Subtype/Link/Rect[108.0 612.4 355.7 622.4]/Border[0 0 0]/Dest[545 0 R/XYZ 0 196 0]>>endobj
+31 0 obj<</Subtype/Link/Rect[108.0 602.8 261.4 612.8]/Border[0 0 0]/Dest[547 0 R/XYZ 0 734 0]>>endobj
+32 0 obj<</Subtype/Link/Rect[72.0 583.6 123.1 593.6]/Border[0 0 0]/Dest[549 0 R/XYZ 0 734 0]>>endobj
+33 0 obj<</Subtype/Link/Rect[108.0 574.0 275.6 584.0]/Border[0 0 0]/Dest[549 0 R/XYZ 0 707 0]>>endobj
+34 0 obj<</Subtype/Link/Rect[108.0 564.4 269.0 574.4]/Border[0 0 0]/Dest[549 0 R/XYZ 0 655 0]>>endobj
+35 0 obj<</Subtype/Link/Rect[108.0 554.8 262.3 564.8]/Border[0 0 0]/Dest[549 0 R/XYZ 0 555 0]>>endobj
+36 0 obj<</Subtype/Link/Rect[108.0 545.2 257.4 555.2]/Border[0 0 0]/Dest[549 0 R/XYZ 0 465 0]>>endobj
+37 0 obj<</Subtype/Link/Rect[108.0 535.6 356.6 545.6]/Border[0 0 0]/Dest[549 0 R/XYZ 0 384 0]>>endobj
+38 0 obj<</Subtype/Link/Rect[108.0 526.0 257.8 536.0]/Border[0 0 0]/Dest[549 0 R/XYZ 0 323 0]>>endobj
+39 0 obj<</Subtype/Link/Rect[108.0 516.4 427.5 526.4]/Border[0 0 0]/Dest[549 0 R/XYZ 0 165 0]>>endobj
+40 0 obj<</Subtype/Link/Rect[108.0 506.8 448.5 516.8]/Border[0 0 0]/Dest[551 0 R/XYZ 0 734 0]>>endobj
+41 0 obj<</Subtype/Link/Rect[72.0 487.6 133.3 497.6]/Border[0 0 0]/Dest[553 0 R/XYZ 0 734 0]>>endobj
+42 0 obj<</Subtype/Link/Rect[108.0 478.0 263.2 488.0]/Border[0 0 0]/Dest[553 0 R/XYZ 0 707 0]>>endobj
+43 0 obj<</Subtype/Link/Rect[108.0 468.4 228.1 478.4]/Border[0 0 0]/Dest[553 0 R/XYZ 0 627 0]>>endobj
+44 0 obj<</Subtype/Link/Rect[108.0 458.8 211.5 468.8]/Border[0 0 0]/Dest[553 0 R/XYZ 0 555 0]>>endobj
+45 0 obj<</Subtype/Link/Rect[108.0 449.2 377.3 459.2]/Border[0 0 0]/Dest[553 0 R/XYZ 0 456 0]>>endobj
+46 0 obj<</Subtype/Link/Rect[108.0 439.6 366.8 449.6]/Border[0 0 0]/Dest[553 0 R/XYZ 0 404 0]>>endobj
+47 0 obj<</Subtype/Link/Rect[108.0 430.0 363.1 440.0]/Border[0 0 0]/Dest[553 0 R/XYZ 0 342 0]>>endobj
+48 0 obj<</Subtype/Link/Rect[108.0 420.4 322.7 430.4]/Border[0 0 0]/Dest[553 0 R/XYZ 0 242 0]>>endobj
+49 0 obj<</Subtype/Link/Rect[108.0 410.8 436.5 420.8]/Border[0 0 0]/Dest[553 0 R/XYZ 0 136 0]>>endobj
+50 0 obj<</Subtype/Link/Rect[108.0 401.2 435.7 411.2]/Border[0 0 0]/Dest[555 0 R/XYZ 0 674 0]>>endobj
+51 0 obj<</Subtype/Link/Rect[108.0 391.6 291.5 401.6]/Border[0 0 0]/Dest[555 0 R/XYZ 0 536 0]>>endobj
+52 0 obj<</Subtype/Link/Rect[108.0 382.0 323.6 392.0]/Border[0 0 0]/Dest[555 0 R/XYZ 0 407 0]>>endobj
+53 0 obj<</Subtype/Link/Rect[108.0 372.4 403.5 382.4]/Border[0 0 0]/Dest[555 0 R/XYZ 0 199 0]>>endobj
+54 0 obj<</Subtype/Link/Rect[108.0 362.8 331.7 372.8]/Border[0 0 0]/Dest[555 0 R/XYZ 0 108 0]>>endobj
+55 0 obj<</Subtype/Link/Rect[108.0 353.2 528.2 363.2]/Border[0 0 0]/Dest[557 0 R/XYZ 0 712 0]>>endobj
+56 0 obj<</Subtype/Link/Rect[108.0 343.6 284.1 353.6]/Border[0 0 0]/Dest[557 0 R/XYZ 0 553 0]>>endobj
+57 0 obj<</Subtype/Link/Rect[108.0 334.0 339.2 344.0]/Border[0 0 0]/Dest[557 0 R/XYZ 0 482 0]>>endobj
+58 0 obj<</Subtype/Link/Rect[108.0 324.4 427.3 334.4]/Border[0 0 0]/Dest[557 0 R/XYZ 0 430 0]>>endobj
+59 0 obj<</Subtype/Link/Rect[108.0 314.8 276.9 324.8]/Border[0 0 0]/Dest[557 0 R/XYZ 0 388 0]>>endobj
+60 0 obj<</Subtype/Link/Rect[108.0 305.2 335.6 315.2]/Border[0 0 0]/Dest[557 0 R/XYZ 0 307 0]>>endobj
+61 0 obj<</Subtype/Link/Rect[108.0 295.6 307.6 305.6]/Border[0 0 0]/Dest[557 0 R/XYZ 0 255 0]>>endobj
+62 0 obj<</Subtype/Link/Rect[108.0 286.0 328.1 296.0]/Border[0 0 0]/Dest[557 0 R/XYZ 0 155 0]>>endobj
+63 0 obj<</Subtype/Link/Rect[72.0 266.8 135.6 276.8]/Border[0 0 0]/Dest[561 0 R/XYZ 0 734 0]>>endobj
+64 0 obj<</Subtype/Link/Rect[108.0 257.2 440.1 267.2]/Border[0 0 0]/Dest[561 0 R/XYZ 0 707 0]>>endobj
+65 0 obj<</Subtype/Link/Rect[108.0 247.6 459.5 257.6]/Border[0 0 0]/Dest[561 0 R/XYZ 0 617 0]>>endobj
+66 0 obj<</Subtype/Link/Rect[108.0 238.0 310.1 248.0]/Border[0 0 0]/Dest[561 0 R/XYZ 0 498 0]>>endobj
+67 0 obj<</Subtype/Link/Rect[108.0 228.4 247.6 238.4]/Border[0 0 0]/Dest[561 0 R/XYZ 0 331 0]>>endobj
+68 0 obj<</Subtype/Link/Rect[108.0 218.8 221.4 228.8]/Border[0 0 0]/Dest[561 0 R/XYZ 0 279 0]>>endobj
+69 0 obj<</Subtype/Link/Rect[108.0 209.2 234.3 219.2]/Border[0 0 0]/Dest[561 0 R/XYZ 0 227 0]>>endobj
+70 0 obj<</Subtype/Link/Rect[108.0 199.6 270.7 209.6]/Border[0 0 0]/Dest[563 0 R/XYZ 0 703 0]>>endobj
+71 0 obj<</Subtype/Link/Rect[108.0 190.0 410.8 200.0]/Border[0 0 0]/Dest[563 0 R/XYZ 0 545 0]>>endobj
+72 0 obj<</Subtype/Link/Rect[108.0 180.4 353.8 190.4]/Border[0 0 0]/Dest[563 0 R/XYZ 0 340 0]>>endobj
+73 0 obj<</Subtype/Link/Rect[108.0 170.8 307.6 180.8]/Border[0 0 0]/Dest[563 0 R/XYZ 0 288 0]>>endobj
+74 0 obj<</Subtype/Link/Rect[108.0 161.2 430.8 171.2]/Border[0 0 0]/Dest[563 0 R/XYZ 0 236 0]>>endobj
+75 0 obj<</Subtype/Link/Rect[108.0 151.6 292.9 161.6]/Border[0 0 0]/Dest[563 0 R/XYZ 0 117 0]>>endobj
+76 0 obj<</Subtype/Link/Rect[108.0 142.0 438.3 152.0]/Border[0 0 0]/Dest[565 0 R/XYZ 0 626 0]>>endobj
+77 0 obj<</Subtype/Link/Rect[108.0 132.4 265.8 142.4]/Border[0 0 0]/Dest[565 0 R/XYZ 0 526 0]>>endobj
+78 0 obj<</Subtype/Link/Rect[108.0 122.8 312.4 132.8]/Border[0 0 0]/Dest[565 0 R/XYZ 0 474 0]>>endobj
+79 0 obj<</Subtype/Link/Rect[108.0 113.2 434.6 123.2]/Border[0 0 0]/Dest[565 0 R/XYZ 0 422 0]>>endobj
+80 0 obj<</Subtype/Link/Rect[108.0 103.6 380.6 113.6]/Border[0 0 0]/Dest[565 0 R/XYZ 0 351 0]>>endobj
+81 0 obj<</Subtype/Link/Rect[108.0 94.0 393.5 104.0]/Border[0 0 0]/Dest[567 0 R/XYZ 0 734 0]>>endobj
+82 0 obj<</Subtype/Link/Rect[108.0 84.4 370.8 94.4]/Border[0 0 0]/Dest[567 0 R/XYZ 0 691 0]>>endobj
+83 0 obj<</Subtype/Link/Rect[108.0 74.8 487.7 84.8]/Border[0 0 0]/Dest[567 0 R/XYZ 0 384 0]>>endobj
+84 0 obj[21 0 R
+22 0 R
+23 0 R
 24 0 R
 25 0 R
 26 0 R
 24 0 R
 25 0 R
 26 0 R
 64 0 R
 65 0 R
 66 0 R
 64 0 R
 65 0 R
 66 0 R
-67 0 R]endobj
-69 0 obj<</Subtype/Link/Rect[72.0 684.0 149.0 697.0]/Border[0 0 0]/Dest[519 0 R/XYZ 0 734 0]>>endobj
-70 0 obj<</Subtype/Link/Rect[108.0 670.8 309.0 683.8]/Border[0 0 0]/Dest[521 0 R/XYZ 0 321 0]>>endobj
-71 0 obj<</Subtype/Link/Rect[108.0 657.6 483.2 670.6]/Border[0 0 0]/Dest[523 0 R/XYZ 0 734 0]>>endobj
-72 0 obj<</Subtype/Link/Rect[108.0 644.4 414.5 657.4]/Border[0 0 0]/Dest[523 0 R/XYZ 0 407 0]>>endobj
-73 0 obj<</Subtype/Link/Rect[108.0 631.2 357.6 644.2]/Border[0 0 0]/Dest[523 0 R/XYZ 0 323 0]>>endobj
-74 0 obj<</Subtype/Link/Rect[108.0 618.0 503.0 631.0]/Border[0 0 0]/Dest[523 0 R/XYZ 0 251 0]>>endobj
-75 0 obj<</Subtype/Link/Rect[108.0 604.8 344.2 617.8]/Border[0 0 0]/Dest[525 0 R/XYZ 0 718 0]>>endobj
-76 0 obj<</Subtype/Link/Rect[108.0 591.6 517.8 604.6]/Border[0 0 0]/Dest[525 0 R/XYZ 0 528 0]>>endobj
-77 0 obj<</Subtype/Link/Rect[108.0 578.4 309.0 591.4]/Border[0 0 0]/Dest[525 0 R/XYZ 0 360 0]>>endobj
-78 0 obj<</Subtype/Link/Rect[108.0 565.2 369.0 578.2]/Border[0 0 0]/Dest[525 0 R/XYZ 0 275 0]>>endobj
-79 0 obj<</Subtype/Link/Rect[108.0 552.0 518.9 565.0]/Border[0 0 0]/Dest[525 0 R/XYZ 0 191 0]>>endobj
-80 0 obj<</Subtype/Link/Rect[108.0 538.8 450.1 551.8]/Border[0 0 0]/Dest[527 0 R/XYZ 0 734 0]>>endobj
-81 0 obj<</Subtype/Link/Rect[108.0 525.6 437.0 538.6]/Border[0 0 0]/Dest[527 0 R/XYZ 0 500 0]>>endobj
-82 0 obj<</Subtype/Link/Rect[72.0 499.2 160.6 512.2]/Border[0 0 0]/Dest[531 0 R/XYZ 0 734 0]>>endobj
-83 0 obj<</Subtype/Link/Rect[108.0 486.0 455.5 499.0]/Border[0 0 0]/Dest[531 0 R/XYZ 0 696 0]>>endobj
-84 0 obj<</Subtype/Link/Rect[108.0 472.8 446.8 485.8]/Border[0 0 0]/Dest[531 0 R/XYZ 0 555 0]>>endobj
-85 0 obj<</Subtype/Link/Rect[108.0 459.6 430.9 472.6]/Border[0 0 0]/Dest[531 0 R/XYZ 0 414 0]>>endobj
-86 0 obj<</Subtype/Link/Rect[108.0 446.4 454.8 459.4]/Border[0 0 0]/Dest[533 0 R/XYZ 0 734 0]>>endobj
-87 0 obj<</Subtype/Link/Rect[108.0 433.2 428.5 446.2]/Border[0 0 0]/Dest[533 0 R/XYZ 0 355 0]>>endobj
-88 0 obj<</Subtype/Link/Rect[108.0 420.0 509.6 433.0]/Border[0 0 0]/Dest[533 0 R/XYZ 0 283 0]>>endobj
-89 0 obj<</Subtype/Link/Rect[108.0 406.8 139.2 419.8]/Border[0 0 0]/Dest[533 0 R/XYZ 0 283 0]>>endobj
-90 0 obj<</Subtype/Link/Rect[108.0 393.6 535.4 406.6]/Border[0 0 0]/Dest[533 0 R/XYZ 0 168 0]>>endobj
-91 0 obj<</Subtype/Link/Rect[108.0 380.4 374.6 393.4]/Border[0 0 0]/Dest[533 0 R/XYZ 0 168 0]>>endobj
-92 0 obj<</Subtype/Link/Rect[108.0 367.2 431.7 380.2]/Border[0 0 0]/Dest[535 0 R/XYZ 0 692 0]>>endobj
-93 0 obj<</Subtype/Link/Rect[108.0 354.0 253.6 367.0]/Border[0 0 0]/Dest[535 0 R/XYZ 0 692 0]>>endobj
-94 0 obj<</Subtype/Link/Rect[72.0 327.6 384.9 340.6]/Border[0 0 0]/Dest[537 0 R/XYZ 0 734 0]>>endobj
-95 0 obj<</Subtype/Link/Rect[108.0 314.4 180.7 327.4]/Border[0 0 0]/Dest[537 0 R/XYZ 0 631 0]>>endobj
-96 0 obj<</Subtype/Link/Rect[108.0 301.2 182.6 314.2]/Border[0 0 0]/Dest[537 0 R/XYZ 0 516 0]>>endobj
-97 0 obj<</Subtype/Link/Rect[108.0 288.0 226.2 301.0]/Border[0 0 0]/Dest[537 0 R/XYZ 0 282 0]>>endobj
-98 0 obj<</Subtype/Link/Rect[108.0 274.8 338.5 287.8]/Border[0 0 0]/Dest[537 0 R/XYZ 0 207 0]>>endobj
-99 0 obj<</Subtype/Link/Rect[108.0 261.6 152.3 274.6]/Border[0 0 0]/Dest[539 0 R/XYZ 0 734 0]>>endobj
-100 0 obj<</Subtype/Link/Rect[72.0 235.2 270.3 248.2]/Border[0 0 0]/Dest[541 0 R/XYZ 0 734 0]>>endobj
-101 0 obj<</Subtype/Link/Rect[108.0 222.0 161.5 235.0]/Border[0 0 0]/Dest[541 0 R/XYZ 0 589 0]>>endobj
-102 0 obj<</Subtype/Link/Rect[108.0 208.8 160.2 221.8]/Border[0 0 0]/Dest[541 0 R/XYZ 0 342 0]>>endobj
-103 0 obj[69 0 R
+67 0 R
+68 0 R
+69 0 R
 70 0 R
 71 0 R
 72 0 R
 70 0 R
 71 0 R
 72 0 R
 80 0 R
 81 0 R
 82 0 R
 80 0 R
 81 0 R
 82 0 R
-83 0 R
-84 0 R
-85 0 R
+83 0 R]endobj
+85 0 obj<</Subtype/Link/Rect[72.0 698.8 144.0 708.8]/Border[0 0 0]/Dest[569 0 R/XYZ 0 734 0]>>endobj
+86 0 obj<</Subtype/Link/Rect[108.0 689.2 386.7 699.2]/Border[0 0 0]/Dest[569 0 R/XYZ 0 707 0]>>endobj
+87 0 obj<</Subtype/Link/Rect[108.0 679.6 378.4 689.6]/Border[0 0 0]/Dest[569 0 R/XYZ 0 627 0]>>endobj
+88 0 obj<</Subtype/Link/Rect[108.0 670.0 362.8 680.0]/Border[0 0 0]/Dest[569 0 R/XYZ 0 536 0]>>endobj
+89 0 obj<</Subtype/Link/Rect[108.0 660.4 378.3 670.4]/Border[0 0 0]/Dest[569 0 R/XYZ 0 331 0]>>endobj
+90 0 obj<</Subtype/Link/Rect[108.0 650.8 365.9 660.8]/Border[0 0 0]/Dest[569 0 R/XYZ 0 106 0]>>endobj
+91 0 obj<</Subtype/Link/Rect[108.0 641.2 447.0 651.2]/Border[0 0 0]/Dest[571 0 R/XYZ 0 645 0]>>endobj
+92 0 obj<</Subtype/Link/Rect[108.0 631.6 516.4 641.6]/Border[0 0 0]/Dest[571 0 R/XYZ 0 574 0]>>endobj
+93 0 obj<</Subtype/Link/Rect[108.0 622.0 246.3 632.0]/Border[0 0 0]/Dest[571 0 R/XYZ 0 574 0]>>endobj
+94 0 obj<</Subtype/Link/Rect[108.0 612.4 527.1 622.4]/Border[0 0 0]/Dest[571 0 R/XYZ 0 482 0]>>endobj
+95 0 obj<</Subtype/Link/Rect[108.0 602.8 251.4 612.8]/Border[0 0 0]/Dest[571 0 R/XYZ 0 482 0]>>endobj
+96 0 obj<</Subtype/Link/Rect[108.0 593.2 534.8 603.2]/Border[0 0 0]/Dest[571 0 R/XYZ 0 418 0]>>endobj
+97 0 obj<</Subtype/Link/Rect[108.0 583.6 180.0 593.6]/Border[0 0 0]/Dest[571 0 R/XYZ 0 418 0]>>endobj
+98 0 obj<</Subtype/Link/Rect[108.0 574.0 380.5 584.0]/Border[0 0 0]/Dest[571 0 R/XYZ 0 262 0]>>endobj
+99 0 obj<</Subtype/Link/Rect[108.0 564.4 364.4 574.4]/Border[0 0 0]/Dest[571 0 R/XYZ 0 201 0]>>endobj
+100 0 obj<</Subtype/Link/Rect[108.0 554.8 509.4 564.8]/Border[0 0 0]/Dest[571 0 R/XYZ 0 120 0]>>endobj
+101 0 obj<</Subtype/Link/Rect[108.0 545.2 258.5 555.2]/Border[0 0 0]/Dest[573 0 R/XYZ 0 722 0]>>endobj
+102 0 obj<</Subtype/Link/Rect[108.0 535.6 379.2 545.6]/Border[0 0 0]/Dest[573 0 R/XYZ 0 660 0]>>endobj
+103 0 obj<</Subtype/Link/Rect[108.0 526.0 291.5 536.0]/Border[0 0 0]/Dest[573 0 R/XYZ 0 599 0]>>endobj
+104 0 obj<</Subtype/Link/Rect[108.0 516.4 366.2 526.4]/Border[0 0 0]/Dest[573 0 R/XYZ 0 422 0]>>endobj
+105 0 obj<</Subtype/Link/Rect[72.0 497.2 327.2 507.2]/Border[0 0 0]/Dest[575 0 R/XYZ 0 734 0]>>endobj
+106 0 obj<</Subtype/Link/Rect[108.0 487.6 166.7 497.6]/Border[0 0 0]/Dest[575 0 R/XYZ 0 677 0]>>endobj
+107 0 obj<</Subtype/Link/Rect[108.0 478.0 168.0 488.0]/Border[0 0 0]/Dest[575 0 R/XYZ 0 613 0]>>endobj
+108 0 obj<</Subtype/Link/Rect[108.0 468.4 205.4 478.4]/Border[0 0 0]/Dest[575 0 R/XYZ 0 472 0]>>endobj
+109 0 obj<</Subtype/Link/Rect[108.0 458.8 291.9 468.8]/Border[0 0 0]/Dest[575 0 R/XYZ 0 418 0]>>endobj
+110 0 obj<</Subtype/Link/Rect[108.0 449.2 143.6 459.2]/Border[0 0 0]/Dest[575 0 R/XYZ 0 325 0]>>endobj
+111 0 obj<</Subtype/Link/Rect[72.0 430.0 230.3 440.0]/Border[0 0 0]/Dest[577 0 R/XYZ 0 734 0]>>endobj
+112 0 obj<</Subtype/Link/Rect[108.0 420.4 151.1 430.4]/Border[0 0 0]/Dest[577 0 R/XYZ 0 638 0]>>endobj
+113 0 obj<</Subtype/Link/Rect[108.0 410.8 148.5 420.8]/Border[0 0 0]/Dest[577 0 R/XYZ 0 478 0]>>endobj
+114 0 obj[85 0 R
 86 0 R
 87 0 R
 88 0 R
 86 0 R
 87 0 R
 88 0 R
 99 0 R
 100 0 R
 101 0 R
 99 0 R
 100 0 R
 101 0 R
-102 0 R]endobj
-104 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
-105 0 obj<</Subtype/Link/Rect[207.6 653.8 295.0 666.8]/Border[0 0 0]/A 104 0 R>>endobj
-106 0 obj<</S/URI/URI(http://www.junkbusters.com/)>>endobj
-107 0 obj<</Subtype/Link/Rect[420.6 653.8 531.2 666.8]/Border[0 0 0]/A 106 0 R>>endobj
-108 0 obj<</S/URI/URI(http://www.junkbusters.com/ijbdist.html#release)>>endobj
-109 0 obj<</Subtype/Link/Rect[379.7 587.8 413.0 600.8]/Border[0 0 0]/A 108 0 R>>endobj
-110 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
-111 0 obj<</Subtype/Link/Rect[479.6 587.8 534.2 600.8]/Border[0 0 0]/A 110 0 R>>endobj
-112 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
-113 0 obj<</Subtype/Link/Rect[72.0 574.6 125.2 587.6]/Border[0 0 0]/A 112 0 R>>endobj
-114 0 obj<</S/URI/URI(http://www.gnu.org/licenses/gpl.html)>>endobj
-115 0 obj<</Subtype/Link/Rect[344.5 574.6 368.0 587.6]/Border[0 0 0]/A 114 0 R>>endobj
-116 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
-117 0 obj<</Subtype/Link/Rect[259.3 535.0 408.1 548.0]/Border[0 0 0]/A 116 0 R>>endobj
-118 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/copyright.html#AUTHORS)>>endobj
-119 0 obj<</Subtype/Link/Rect[123.3 455.8 173.7 468.8]/Border[0 0 0]/A 118 0 R>>endobj
-120 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/introduction.html#FEATURES)>>endobj
-121 0 obj<</Subtype/Link/Rect[219.6 442.6 278.2 455.6]/Border[0 0 0]/A 120 0 R>>endobj
-122 0 obj<</S/URI/URI(http://junkbusters.com/)>>endobj
-123 0 obj<</Subtype/Link/Rect[72.0 318.2 179.9 331.2]/Border[0 0 0]/A 122 0 R>>endobj
-124 0 obj<</S/URI/URI(http://junkbusters.com/)>>endobj
-125 0 obj<</Subtype/Link/Rect[174.6 265.4 285.2 278.4]/Border[0 0 0]/A 124 0 R>>endobj
-126 0 obj<</S/Launch/F(upgradersnote.html)>>endobj
-127 0 obj<</Subtype/Link/Rect[363.9 61.8 443.0 74.8]/Border[0 0 0]/A 126 0 R>>endobj
-128 0 obj[105 0 R
+102 0 R
+103 0 R
+104 0 R
+105 0 R
+106 0 R
 107 0 R
 107 0 R
+108 0 R
 109 0 R
 109 0 R
+110 0 R
 111 0 R
 111 0 R
-113 0 R
-115 0 R
-117 0 R
-119 0 R
-121 0 R
-123 0 R
-125 0 R
-127 0 R]endobj
-129 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
-130 0 obj<</Subtype/Link/Rect[372.9 694.6 487.5 707.6]/Border[0 0 0]/A 129 0 R>>endobj
-131 0 obj<</S/URI/URI(http://p.p/)>>endobj
-132 0 obj<</Subtype/Link/Rect[108.0 681.4 151.1 694.4]/Border[0 0 0]/A 131 0 R>>endobj
-133 0 obj<</S/Launch/F(#AF-PATTERNS)>>endobj
-134 0 obj<</Subtype/Link/Rect[159.4 129.0 221.7 142.0]/Border[0 0 0]/A 133 0 R>>endobj
-135 0 obj[130 0 R
+112 0 R
+113 0 R]endobj
+115 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
+116 0 obj<</Subtype/Link/Rect[181.4 676.7 252.1 686.7]/Border[0 0 0]/A 115 0 R>>endobj
+117 0 obj<</S/URI/URI(http://www.junkbusters.com/)>>endobj
+118 0 obj<</Subtype/Link/Rect[353.0 676.7 442.4 686.7]/Border[0 0 0]/A 117 0 R>>endobj
+119 0 obj<</S/URI/URI(http://www.junkbusters.com/ijbdist.html#release)>>endobj
+120 0 obj<</Subtype/Link/Rect[151.6 628.7 180.0 638.7]/Border[0 0 0]/A 119 0 R>>endobj
+121 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
+122 0 obj<</Subtype/Link/Rect[232.1 628.7 321.4 638.7]/Border[0 0 0]/A 121 0 R>>endobj
+123 0 obj<</S/URI/URI(http://www.gnu.org/licenses/gpl.html)>>endobj
+124 0 obj<</Subtype/Link/Rect[498.8 628.7 517.1 638.7]/Border[0 0 0]/A 123 0 R>>endobj
+125 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
+126 0 obj<</Subtype/Link/Rect[222.7 599.9 340.6 609.9]/Border[0 0 0]/A 125 0 R>>endobj
+127 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/copyright.html#AUTHORS)>>endobj
+128 0 obj<</Subtype/Link/Rect[114.2 551.9 155.6 561.9]/Border[0 0 0]/A 127 0 R>>endobj
+129 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/introduction.html#FEATURES)>>endobj
+130 0 obj<</Subtype/Link/Rect[91.6 542.3 139.6 552.3]/Border[0 0 0]/A 129 0 R>>endobj
+131 0 obj<</S/URI/URI(http://junkbusters.com/)>>endobj
+132 0 obj<</Subtype/Link/Rect[72.0 452.0 159.1 462.0]/Border[0 0 0]/A 131 0 R>>endobj
+133 0 obj<</S/URI/URI(http://junkbusters.com/)>>endobj
+134 0 obj<</Subtype/Link/Rect[72.0 413.6 159.1 423.6]/Border[0 0 0]/A 133 0 R>>endobj
+135 0 obj<</S/Launch/F(upgradersnote.html)>>endobj
+136 0 obj<</Subtype/Link/Rect[99.6 284.9 164.5 294.9]/Border[0 0 0]/A 135 0 R>>endobj
+137 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
+138 0 obj<</Subtype/Link/Rect[317.9 246.5 405.0 256.5]/Border[0 0 0]/A 137 0 R>>endobj
+139 0 obj<</S/URI/URI(http://p.p/)>>endobj
+140 0 obj<</Subtype/Link/Rect[440.6 246.5 476.2 256.5]/Border[0 0 0]/A 139 0 R>>endobj
+141 0 obj[116 0 R
+118 0 R
+120 0 R
+122 0 R
+124 0 R
+126 0 R
+128 0 R
+130 0 R
 132 0 R
 132 0 R
-134 0 R]endobj
-136 0 obj<</Subtype/Link/Rect[130.1 583.4 301.2 596.4]/Border[0 0 0]/Dest[531 0 R/XYZ 0 414 0]>>endobj
-137 0 obj<</S/URI/URI(http://www.gnu.org/copyleft/gpl.html)>>endobj
-138 0 obj<</Subtype/Link/Rect[199.7 383.8 362.5 396.8]/Border[0 0 0]/A 137 0 R>>endobj
-139 0 obj<</Subtype/Link/Rect[325.6 370.6 372.9 383.6]/Border[0 0 0]/Dest[541 0 R/XYZ 0 734 0]>>endobj
-140 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
-141 0 obj<</Subtype/Link/Rect[248.6 206.6 313.4 219.6]/Border[0 0 0]/A 140 0 R>>endobj
-142 0 obj[136 0 R
+134 0 R
+136 0 R
 138 0 R
 138 0 R
-139 0 R
-141 0 R]endobj
-143 0 obj<</S/URI/URI(https://sourceforge.net/account/register.php)>>endobj
-144 0 obj<</Subtype/Link/Rect[208.0 681.4 363.2 694.4]/Border[0 0 0]/A 143 0 R>>endobj
-145 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
-146 0 obj<</Subtype/Link/Rect[465.8 681.4 552.6 694.4]/Border[0 0 0]/A 145 0 R>>endobj
-147 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
-148 0 obj<</Subtype/Link/Rect[72.0 668.2 85.5 681.2]/Border[0 0 0]/A 147 0 R>>endobj
-149 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-developer-manual.pdf)>>endobj
-150 0 obj<</Subtype/Link/Rect[151.4 668.2 242.6 681.2]/Border[0 0 0]/A 149 0 R>>endobj
-151 0 obj<</S/URI/URI(http://sourceforge.net/cvs/?group_id=11118)>>endobj
-152 0 obj<</Subtype/Link/Rect[371.5 641.8 443.0 654.8]/Border[0 0 0]/A 151 0 R>>endobj
-153 0 obj[144 0 R
+140 0 R]endobj
+142 0 obj<</S/Launch/F(#AF-PATTERNS)>>endobj
+143 0 obj<</Subtype/Link/Rect[361.0 535.8 410.4 545.8]/Border[0 0 0]/A 142 0 R>>endobj
+144 0 obj<</Subtype/Link/Rect[399.7 368.6 537.6 378.6]/Border[0 0 0]/Dest[569 0 R/XYZ 0 536 0]>>endobj
+145 0 obj<</S/URI/URI(http://www.gnu.org/copyleft/gpl.html)>>endobj
+146 0 obj<</Subtype/Link/Rect[173.8 164.9 301.9 174.9]/Border[0 0 0]/A 145 0 R>>endobj
+147 0 obj<</Subtype/Link/Rect[177.8 155.3 214.3 165.3]/Border[0 0 0]/Dest[577 0 R/XYZ 0 734 0]>>endobj
+148 0 obj[143 0 R
+144 0 R
 146 0 R
 146 0 R
-148 0 R
-150 0 R
-152 0 R]endobj
-154 0 obj<</S/Launch/F(upgradersnote.html)>>endobj
-155 0 obj<</Subtype/Link/Rect[376.9 378.6 456.0 391.6]/Border[0 0 0]/A 154 0 R>>endobj
-156 0 obj<</S/Launch/F(installation.html)>>endobj
-157 0 obj<</Subtype/Link/Rect[474.7 378.6 526.3 391.6]/Border[0 0 0]/A 156 0 R>>endobj
-158 0 obj<</S/Launch/F(installation.html)>>endobj
-159 0 obj<</Subtype/Link/Rect[72.0 365.4 104.4 378.4]/Border[0 0 0]/A 158 0 R>>endobj
-160 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-161 0 obj<</Subtype/Link/Rect[131.9 365.4 188.1 378.4]/Border[0 0 0]/A 160 0 R>>endobj
-162 0 obj<</S/Launch/F(#LISTEN-ADDRESS)>>endobj
-163 0 obj<</Subtype/Link/Rect[333.2 156.2 399.0 169.2]/Border[0 0 0]/A 162 0 R>>endobj
-164 0 obj[155 0 R
-157 0 R
-159 0 R
-161 0 R
-163 0 R]endobj
-165 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
-166 0 obj<</Subtype/Link/Rect[420.9 593.0 535.5 606.0]/Border[0 0 0]/A 165 0 R>>endobj
-167 0 obj<</S/Launch/F(#LOGFILE)>>endobj
-168 0 obj<</Subtype/Link/Rect[490.9 540.2 525.1 553.2]/Border[0 0 0]/A 167 0 R>>endobj
-169 0 obj[166 0 R
-168 0 R]endobj
-170 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
-171 0 obj<</Subtype/Link/Rect[72.0 640.6 124.9 653.6]/Border[0 0 0]/A 170 0 R>>endobj
-172 0 obj<</S/URI/URI(http://sf.net/projects/ijbswa/)>>endobj
-173 0 obj<</Subtype/Link/Rect[154.2 640.6 211.0 653.6]/Border[0 0 0]/A 172 0 R>>endobj
-174 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-announce/)>>endobj
-175 0 obj<</Subtype/Link/Rect[72.0 601.0 239.7 614.0]/Border[0 0 0]/A 174 0 R>>endobj
-176 0 obj<</S/Launch/F(actions-file.html)>>endobj
-177 0 obj<</Subtype/Link/Rect[72.0 431.4 127.9 444.4]/Border[0 0 0]/A 176 0 R>>endobj
-178 0 obj<</S/Launch/F(#ACTIONS)>>endobj
-179 0 obj<</Subtype/Link/Rect[208.9 431.4 242.8 444.4]/Border[0 0 0]/A 178 0 R>>endobj
-180 0 obj<</S/Launch/F(#AF-PATTERNS)>>endobj
-181 0 obj<</Subtype/Link/Rect[194.5 378.6 252.5 391.6]/Border[0 0 0]/A 180 0 R>>endobj
-182 0 obj<</S/Launch/F(actions-file.html)>>endobj
-183 0 obj<</Subtype/Link/Rect[395.8 250.6 482.3 263.6]/Border[0 0 0]/A 182 0 R>>endobj
-184 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-185 0 obj<</Subtype/Link/Rect[509.8 250.6 530.8 263.6]/Border[0 0 0]/A 184 0 R>>endobj
-186 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-187 0 obj<</Subtype/Link/Rect[72.0 237.4 104.4 250.4]/Border[0 0 0]/A 186 0 R>>endobj
-188 0 obj<</S/Launch/F(#ACTIONS)>>endobj
-189 0 obj<</Subtype/Link/Rect[163.7 237.4 239.4 250.4]/Border[0 0 0]/A 188 0 R>>endobj
-190 0 obj<</S/Launch/F(#ACT-EXAMPLES)>>endobj
-191 0 obj<</Subtype/Link/Rect[271.2 237.4 357.1 250.4]/Border[0 0 0]/A 190 0 R>>endobj
-192 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
-193 0 obj<</Subtype/Link/Rect[363.9 149.0 478.5 162.0]/Border[0 0 0]/A 192 0 R>>endobj
-194 0 obj<</S/URI/URI(http://p.p/)>>endobj
-195 0 obj<</Subtype/Link/Rect[72.0 135.8 115.1 148.8]/Border[0 0 0]/A 194 0 R>>endobj
-196 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
-197 0 obj<</Subtype/Link/Rect[194.1 135.8 375.3 148.8]/Border[0 0 0]/A 196 0 R>>endobj
-198 0 obj[171 0 R
+147 0 R]endobj
+149 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
+150 0 obj<</Subtype/Link/Rect[472.6 674.1 526.0 684.1]/Border[0 0 0]/A 149 0 R>>endobj
+151 0 obj<</S/URI/URI(https://sourceforge.net/account/register.php)>>endobj
+152 0 obj<</Subtype/Link/Rect[519.7 574.1 544.2 584.1]/Border[0 0 0]/A 151 0 R>>endobj
+153 0 obj<</S/URI/URI(https://sourceforge.net/account/register.php)>>endobj
+154 0 obj<</Subtype/Link/Rect[72.0 564.5 172.9 574.5]/Border[0 0 0]/A 153 0 R>>endobj
+155 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
+156 0 obj<</Subtype/Link/Rect[253.9 564.5 334.8 574.5]/Border[0 0 0]/A 155 0 R>>endobj
+157 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-developer-manual.pdf)>>endobj
+158 0 obj<</Subtype/Link/Rect[389.0 564.5 461.7 574.5]/Border[0 0 0]/A 157 0 R>>endobj
+159 0 obj<</S/URI/URI(http://sourceforge.net/cvs/?group_id=11118)>>endobj
+160 0 obj<</Subtype/Link/Rect[315.4 545.3 371.4 555.3]/Border[0 0 0]/A 159 0 R>>endobj
+161 0 obj[150 0 R
+152 0 R
+154 0 R
+156 0 R
+158 0 R
+160 0 R]endobj
+162 0 obj<</Subtype/Link/Rect[525.4 515.3 558.8 525.3]/Border[0 0 0]/Dest[557 0 R/XYZ 0 307 0]>>endobj
+163 0 obj<</Subtype/Link/Rect[72.0 505.7 219.6 515.7]/Border[0 0 0]/Dest[557 0 R/XYZ 0 307 0]>>endobj
+164 0 obj<</S/Launch/F(upgradersnote.html)>>endobj
+165 0 obj<</Subtype/Link/Rect[83.1 415.3 148.0 425.3]/Border[0 0 0]/A 164 0 R>>endobj
+166 0 obj<</S/Launch/F(installation.html)>>endobj
+167 0 obj<</Subtype/Link/Rect[163.6 415.3 232.5 425.3]/Border[0 0 0]/A 166 0 R>>endobj
+168 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+169 0 obj<</Subtype/Link/Rect[254.3 415.3 300.6 425.3]/Border[0 0 0]/A 168 0 R>>endobj
+170 0 obj<</S/Launch/F(#LISTEN-ADDRESS)>>endobj
+171 0 obj<</Subtype/Link/Rect[416.6 273.1 470.6 283.1]/Border[0 0 0]/A 170 0 R>>endobj
+172 0 obj<</S/URI/URI(http://p.p/)>>endobj
+173 0 obj<</Subtype/Link/Rect[117.3 115.6 152.9 125.6]/Border[0 0 0]/A 172 0 R>>endobj
+174 0 obj<</S/Launch/F(#LOGFILE)>>endobj
+175 0 obj<</Subtype/Link/Rect[179.6 86.8 205.0 96.8]/Border[0 0 0]/A 174 0 R>>endobj
+176 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/startup.html)>>endobj
+177 0 obj<</Subtype/Link/Rect[457.1 86.8 554.0 96.8]/Border[0 0 0]/A 176 0 R>>endobj
+178 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/)>>endobj
+179 0 obj<</Subtype/Link/Rect[91.6 77.2 137.8 87.2]/Border[0 0 0]/A 178 0 R>>endobj
+180 0 obj[162 0 R
+163 0 R
+165 0 R
+167 0 R
+169 0 R
+171 0 R
 173 0 R
 175 0 R
 177 0 R
 173 0 R
 175 0 R
 177 0 R
-179 0 R
-181 0 R
-183 0 R
-185 0 R
-187 0 R
-189 0 R
-191 0 R
+179 0 R]endobj
+181 0 obj<</S/URI/URI(http://p.p/)>>endobj
+182 0 obj<</Subtype/Link/Rect[325.9 702.9 361.5 712.9]/Border[0 0 0]/A 181 0 R>>endobj
+183 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/startup.html)>>endobj
+184 0 obj<</Subtype/Link/Rect[72.0 693.3 166.7 703.3]/Border[0 0 0]/A 183 0 R>>endobj
+185 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/)>>endobj
+186 0 obj<</Subtype/Link/Rect[188.5 693.3 234.7 703.3]/Border[0 0 0]/A 185 0 R>>endobj
+187 0 obj<</S/URI/URI(http://p.p/)>>endobj
+188 0 obj<</Subtype/Link/Rect[94.2 674.1 129.8 684.1]/Border[0 0 0]/A 187 0 R>>endobj
+189 0 obj[182 0 R
+184 0 R
+186 0 R
+188 0 R]endobj
+190 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
+191 0 obj<</Subtype/Link/Rect[456.2 676.7 500.2 686.7]/Border[0 0 0]/A 190 0 R>>endobj
+192 0 obj<</S/URI/URI(http://sf.net/projects/ijbswa/)>>endobj
+193 0 obj<</Subtype/Link/Rect[522.9 676.7 549.1 686.7]/Border[0 0 0]/A 192 0 R>>endobj
+194 0 obj<</S/URI/URI(http://sf.net/projects/ijbswa/)>>endobj
+195 0 obj<</Subtype/Link/Rect[72.0 667.1 89.8 677.1]/Border[0 0 0]/A 194 0 R>>endobj
+196 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-announce/)>>endobj
+197 0 obj<</Subtype/Link/Rect[430.4 647.9 554.4 657.9]/Border[0 0 0]/A 196 0 R>>endobj
+198 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-announce/)>>endobj
+199 0 obj<</Subtype/Link/Rect[72.0 638.3 81.8 648.3]/Border[0 0 0]/A 198 0 R>>endobj
+200 0 obj<</S/Launch/F(actions-file.html)>>endobj
+201 0 obj<</Subtype/Link/Rect[72.0 524.9 114.7 534.9]/Border[0 0 0]/A 200 0 R>>endobj
+202 0 obj<</S/Launch/F(#ACTIONS)>>endobj
+203 0 obj<</Subtype/Link/Rect[180.5 524.9 208.0 534.9]/Border[0 0 0]/A 202 0 R>>endobj
+204 0 obj<</S/Launch/F(#AF-PATTERNS)>>endobj
+205 0 obj<</Subtype/Link/Rect[170.7 496.1 216.1 506.1]/Border[0 0 0]/A 204 0 R>>endobj
+206 0 obj<</S/Launch/F(actions-file.html)>>endobj
+207 0 obj<</Subtype/Link/Rect[335.7 424.9 404.6 434.9]/Border[0 0 0]/A 206 0 R>>endobj
+208 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+209 0 obj<</Subtype/Link/Rect[426.4 424.9 472.6 434.9]/Border[0 0 0]/A 208 0 R>>endobj
+210 0 obj<</S/Launch/F(#ACTIONS)>>endobj
+211 0 obj<</Subtype/Link/Rect[519.8 424.9 550.9 434.9]/Border[0 0 0]/A 210 0 R>>endobj
+212 0 obj<</S/Launch/F(#ACTIONS)>>endobj
+213 0 obj<</Subtype/Link/Rect[72.0 415.3 97.3 425.3]/Border[0 0 0]/A 212 0 R>>endobj
+214 0 obj<</S/Launch/F(#ACT-EXAMPLES)>>endobj
+215 0 obj<</Subtype/Link/Rect[124.0 415.3 190.3 425.3]/Border[0 0 0]/A 214 0 R>>endobj
+216 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
+217 0 obj<</Subtype/Link/Rect[211.2 363.4 298.3 373.4]/Border[0 0 0]/A 216 0 R>>endobj
+218 0 obj<</S/URI/URI(http://p.p/)>>endobj
+219 0 obj<</Subtype/Link/Rect[335.2 363.4 370.8 373.4]/Border[0 0 0]/A 218 0 R>>endobj
+220 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
+221 0 obj<</Subtype/Link/Rect[435.0 363.4 528.8 373.4]/Border[0 0 0]/A 220 0 R>>endobj
+222 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
+223 0 obj<</Subtype/Link/Rect[72.0 353.8 117.8 363.8]/Border[0 0 0]/A 222 0 R>>endobj
+224 0 obj<</S/Launch/F(actions-file.html)>>endobj
+225 0 obj<</Subtype/Link/Rect[394.3 292.3 464.1 302.3]/Border[0 0 0]/A 224 0 R>>endobj
+226 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+227 0 obj<</Subtype/Link/Rect[485.9 292.3 532.2 302.3]/Border[0 0 0]/A 226 0 R>>endobj
+228 0 obj<</S/Launch/F(#CRUNCH-INCOMING-COOKIES)>>endobj
+229 0 obj<</Subtype/Link/Rect[85.4 157.1 177.4 165.7]/Border[0 0 0]/A 228 0 R>>endobj
+230 0 obj<</S/Launch/F(#CRUNCH-OUTGOING-COOKIES)>>endobj
+231 0 obj<</Subtype/Link/Rect[185.4 157.1 277.4 165.7]/Border[0 0 0]/A 230 0 R>>endobj
+232 0 obj<</S/Launch/F(#SESSION-COOKIES-ONLY)>>endobj
+233 0 obj<</Subtype/Link/Rect[285.4 157.1 365.4 165.7]/Border[0 0 0]/A 232 0 R>>endobj
+234 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
+235 0 obj<</Subtype/Link/Rect[164.9 96.0 296.8 106.0]/Border[0 0 0]/A 234 0 R>>endobj
+236 0 obj<</S/Launch/F(actions-file.html)>>endobj
+237 0 obj<</Subtype/Link/Rect[328.8 96.0 376.4 106.0]/Border[0 0 0]/A 236 0 R>>endobj
+238 0 obj[191 0 R
 193 0 R
 195 0 R
 193 0 R
 195 0 R
-197 0 R]endobj
-199 0 obj<</S/Launch/F(actions-file.html)>>endobj
-200 0 obj<</Subtype/Link/Rect[393.1 651.4 478.3 664.4]/Border[0 0 0]/A 199 0 R>>endobj
-201 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-202 0 obj<</Subtype/Link/Rect[505.8 651.4 526.9 664.4]/Border[0 0 0]/A 201 0 R>>endobj
-203 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-204 0 obj<</Subtype/Link/Rect[72.0 638.2 104.4 651.2]/Border[0 0 0]/A 203 0 R>>endobj
-205 0 obj<</S/Launch/F(#CRUNCH-INCOMING-COOKIES)>>endobj
-206 0 obj<</Subtype/Link/Rect[89.6 440.0 213.8 451.0]/Border[0 0 0]/A 205 0 R>>endobj
-207 0 obj<</S/Launch/F(#CRUNCH-OUTGOING-COOKIES)>>endobj
-208 0 obj<</Subtype/Link/Rect[224.6 440.0 348.8 451.0]/Border[0 0 0]/A 207 0 R>>endobj
-209 0 obj<</S/Launch/F(#SESSION-COOKIES-ONLY)>>endobj
-210 0 obj<</Subtype/Link/Rect[359.6 440.0 467.6 451.0]/Border[0 0 0]/A 209 0 R>>endobj
-211 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
-212 0 obj<</Subtype/Link/Rect[317.7 339.7 486.8 352.7]/Border[0 0 0]/A 211 0 R>>endobj
-213 0 obj[200 0 R
-202 0 R
-204 0 R
-206 0 R
-208 0 R
-210 0 R
-212 0 R]endobj
-214 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-215 0 obj<</Subtype/Link/Rect[104.1 665.3 160.3 678.3]/Border[0 0 0]/A 214 0 R>>endobj
-216 0 obj<</S/Launch/F(#ENABLE-EDIT-ACTIONS)>>endobj
-217 0 obj<</Subtype/Link/Rect[286.1 497.7 411.5 510.7]/Border[0 0 0]/A 216 0 R>>endobj
-218 0 obj<</S/Launch/F(#ENABLE-REMOTE-TOGGLE)>>endobj
-219 0 obj<</Subtype/Link/Rect[76.5 484.5 208.5 497.5]/Border[0 0 0]/A 218 0 R>>endobj
-220 0 obj<</S/Launch/F(config.html)>>endobj
-221 0 obj<</Subtype/Link/Rect[253.7 484.5 357.9 497.5]/Border[0 0 0]/A 220 0 R>>endobj
-222 0 obj<</S/Launch/F(filter-file.html)>>endobj
-223 0 obj<</Subtype/Link/Rect[91.9 386.5 184.3 399.5]/Border[0 0 0]/A 222 0 R>>endobj
-224 0 obj<</S/Launch/F(#FILTER)>>endobj
-225 0 obj<</Subtype/Link/Rect[434.9 346.9 504.2 359.9]/Border[0 0 0]/A 224 0 R>>endobj
-226 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
-227 0 obj<</Subtype/Link/Rect[408.6 241.3 540.7 254.3]/Border[0 0 0]/A 226 0 R>>endobj
-228 0 obj<</S/Launch/F(config.html)>>endobj
-229 0 obj<</Subtype/Link/Rect[248.6 169.7 352.8 182.7]/Border[0 0 0]/A 228 0 R>>endobj
-230 0 obj<</S/Launch/F(#LISTEN-ADDRESS)>>endobj
-231 0 obj<</Subtype/Link/Rect[416.0 169.7 508.4 182.7]/Border[0 0 0]/A 230 0 R>>endobj
-232 0 obj[215 0 R
+197 0 R
+199 0 R
+201 0 R
+203 0 R
+205 0 R
+207 0 R
+209 0 R
+211 0 R
+213 0 R
+215 0 R
 217 0 R
 219 0 R
 221 0 R
 217 0 R
 219 0 R
 221 0 R
 225 0 R
 227 0 R
 229 0 R
 225 0 R
 227 0 R
 229 0 R
-231 0 R]endobj
-233 0 obj<</S/Launch/F(#ACCESS-CONTROL)>>endobj
-234 0 obj<</Subtype/Link/Rect[483.9 721.0 548.7 734.0]/Border[0 0 0]/A 233 0 R>>endobj
-235 0 obj<</S/Launch/F(#ACCESS-CONTROL)>>endobj
-236 0 obj<</Subtype/Link/Rect[72.0 707.8 125.5 720.8]/Border[0 0 0]/A 235 0 R>>endobj
-237 0 obj<</S/Launch/F(#SET-IMAGE-BLOCKER)>>endobj
-238 0 obj<</Subtype/Link/Rect[352.4 632.6 494.3 645.6]/Border[0 0 0]/A 237 0 R>>endobj
-239 0 obj<</S/Launch/F(#HANDLE-AS-IMAGE)>>endobj
-240 0 obj<</Subtype/Link/Rect[131.6 593.0 230.6 606.0]/Border[0 0 0]/A 239 0 R>>endobj
-241 0 obj<</S/Launch/F(#BLOCK)>>endobj
-242 0 obj<</Subtype/Link/Rect[252.6 593.0 285.6 606.0]/Border[0 0 0]/A 241 0 R>>endobj
-243 0 obj<</S/Launch/F(#SET-IMAGE-BLOCKER)>>endobj
-244 0 obj<</Subtype/Link/Rect[264.5 566.6 406.3 579.6]/Border[0 0 0]/A 243 0 R>>endobj
-245 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
-246 0 obj<</Subtype/Link/Rect[293.6 553.4 425.7 566.4]/Border[0 0 0]/A 245 0 R>>endobj
-247 0 obj<</Subtype/Link/Rect[139.5 495.0 334.9 508.0]/Border[0 0 0]/Dest[499 0 R/XYZ 0 237 0]>>endobj
-248 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=11118)>>endobj
-249 0 obj<</Subtype/Link/Rect[72.0 97.4 465.6 110.4]/Border[0 0 0]/A 248 0 R>>endobj
-250 0 obj[234 0 R
-236 0 R
-238 0 R
-240 0 R
+231 0 R
+233 0 R
+235 0 R
+237 0 R]endobj
+239 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+240 0 obj<</Subtype/Link/Rect[403.3 724.0 450.8 734.0]/Border[0 0 0]/A 239 0 R>>endobj
+241 0 obj<</S/Launch/F(#ENABLE-EDIT-ACTIONS)>>endobj
+242 0 obj<</Subtype/Link/Rect[153.6 576.1 225.2 586.1]/Border[0 0 0]/A 241 0 R>>endobj
+243 0 obj<</S/Launch/F(#ENABLE-REMOTE-TOGGLE)>>endobj
+244 0 obj<</Subtype/Link/Rect[255.3 576.1 335.3 586.1]/Border[0 0 0]/A 243 0 R>>endobj
+245 0 obj<</S/Launch/F(config.html)>>endobj
+246 0 obj<</Subtype/Link/Rect[366.6 576.1 446.7 586.1]/Border[0 0 0]/A 245 0 R>>endobj
+247 0 obj<</S/Launch/F(filter-file.html)>>endobj
+248 0 obj<</Subtype/Link/Rect[88.0 505.0 155.2 515.0]/Border[0 0 0]/A 247 0 R>>endobj
+249 0 obj<</S/Launch/F(#FILTER)>>endobj
+250 0 obj<</Subtype/Link/Rect[72.0 476.2 110.7 486.2]/Border[0 0 0]/A 249 0 R>>endobj
+251 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
+252 0 obj<</Subtype/Link/Rect[213.5 418.6 319.1 428.6]/Border[0 0 0]/A 251 0 R>>endobj
+253 0 obj<</S/Launch/F(config.html)>>endobj
+254 0 obj<</Subtype/Link/Rect[124.5 366.6 204.5 376.6]/Border[0 0 0]/A 253 0 R>>endobj
+255 0 obj<</S/Launch/F(#LISTEN-ADDRESS)>>endobj
+256 0 obj<</Subtype/Link/Rect[251.2 366.6 305.2 376.6]/Border[0 0 0]/A 255 0 R>>endobj
+257 0 obj<</S/Launch/F(#PERMIT-ACCESS)>>endobj
+258 0 obj<</Subtype/Link/Rect[153.1 248.9 207.1 258.9]/Border[0 0 0]/A 257 0 R>>endobj
+259 0 obj<</S/Launch/F(#ACCESS-CONTROL)>>endobj
+260 0 obj<</Subtype/Link/Rect[398.2 210.5 496.9 220.5]/Border[0 0 0]/A 259 0 R>>endobj
+261 0 obj<</S/Launch/F(#SET-IMAGE-BLOCKER)>>endobj
+262 0 obj<</Subtype/Link/Rect[294.3 168.2 387.7 178.2]/Border[0 0 0]/A 261 0 R>>endobj
+263 0 obj<</S/Launch/F(#HANDLE-AS-IMAGE)>>endobj
+264 0 obj<</Subtype/Link/Rect[325.4 149.0 391.2 159.0]/Border[0 0 0]/A 263 0 R>>endobj
+265 0 obj<</S/Launch/F(#BLOCK)>>endobj
+266 0 obj<</Subtype/Link/Rect[406.8 149.0 427.7 159.0]/Border[0 0 0]/A 265 0 R>>endobj
+267 0 obj<</S/Launch/F(#SET-IMAGE-BLOCKER)>>endobj
+268 0 obj<</Subtype/Link/Rect[225.0 129.8 318.4 139.8]/Border[0 0 0]/A 267 0 R>>endobj
+269 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
+270 0 obj<</Subtype/Link/Rect[117.4 120.2 223.0 130.2]/Border[0 0 0]/A 269 0 R>>endobj
+271 0 obj<</Subtype/Link/Rect[127.1 77.9 281.6 87.9]/Border[0 0 0]/Dest[545 0 R/XYZ 0 605 0]>>endobj
+272 0 obj[240 0 R
 242 0 R
 244 0 R
 246 0 R
 242 0 R
 244 0 R
 246 0 R
-247 0 R
-249 0 R]endobj
-251 0 obj<</S/Launch/F(#FORWARDING)>>endobj
-252 0 obj<</Subtype/Link/Rect[72.0 677.8 156.0 690.8]/Border[0 0 0]/A 251 0 R>>endobj
-253 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-254 0 obj<</Subtype/Link/Rect[183.5 677.8 239.7 690.8]/Border[0 0 0]/A 253 0 R>>endobj
-255 0 obj<</S/Launch/F(#FORWARDING)>>endobj
-256 0 obj<</Subtype/Link/Rect[461.3 491.4 548.0 504.4]/Border[0 0 0]/A 255 0 R>>endobj
-257 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-258 0 obj<</Subtype/Link/Rect[96.8 478.2 153.0 491.2]/Border[0 0 0]/A 257 0 R>>endobj
-259 0 obj<</S/URI/URI(http://www.transproxy.nlc.net.au/)>>endobj
-260 0 obj<</Subtype/Link/Rect[75.7 465.0 224.2 478.0]/Border[0 0 0]/A 259 0 R>>endobj
-261 0 obj[252 0 R
+248 0 R
+250 0 R
+252 0 R
 254 0 R
 256 0 R
 258 0 R
 254 0 R
 256 0 R
 258 0 R
-260 0 R]endobj
-262 0 obj<</S/Launch/F(#FILTER)>>endobj
-263 0 obj<</Subtype/Link/Rect[189.1 571.0 228.7 584.0]/Border[0 0 0]/A 262 0 R>>endobj
-264 0 obj<</S/Launch/F(#DEANIMATE-GIFS)>>endobj
-265 0 obj<</Subtype/Link/Rect[243.4 571.0 335.8 584.0]/Border[0 0 0]/A 264 0 R>>endobj
-266 0 obj<</S/Launch/F(#FILTER)>>endobj
-267 0 obj<</Subtype/Link/Rect[137.4 482.6 177.0 495.6]/Border[0 0 0]/A 266 0 R>>endobj
-268 0 obj<</S/Launch/F(#DEANIMATE-GIFS)>>endobj
-269 0 obj<</Subtype/Link/Rect[452.9 482.6 545.3 495.6]/Border[0 0 0]/A 268 0 R>>endobj
-270 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
-271 0 obj<</Subtype/Link/Rect[72.0 318.6 183.8 331.6]/Border[0 0 0]/A 270 0 R>>endobj
-272 0 obj<</S/URI/URI(http://p.p/)>>endobj
-273 0 obj<</Subtype/Link/Rect[423.0 318.6 468.8 331.6]/Border[0 0 0]/A 272 0 R>>endobj
-274 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
-275 0 obj<</Subtype/Link/Rect[440.4 252.6 555.0 265.6]/Border[0 0 0]/A 274 0 R>>endobj
-276 0 obj<</S/Launch/F(actions-file.html)>>endobj
-277 0 obj<</Subtype/Link/Rect[350.7 173.4 406.3 186.4]/Border[0 0 0]/A 276 0 R>>endobj
-278 0 obj[263 0 R
-265 0 R
-267 0 R
-269 0 R
-271 0 R
-273 0 R
-275 0 R
-277 0 R]endobj
-279 0 obj<</S/Launch/F(actions-file.html)>>endobj
-280 0 obj<</Subtype/Link/Rect[375.7 691.0 431.3 704.0]/Border[0 0 0]/A 279 0 R>>endobj
-281 0 obj<</Subtype/Link/Rect[207.3 619.4 278.2 632.4]/Border[0 0 0]/Dest[537 0 R/XYZ 0 734 0]>>endobj
-282 0 obj<</S/URI/URI(http://www.multiproxy.org/anon_list.htm)>>endobj
-283 0 obj<</Subtype/Link/Rect[294.7 402.6 363.8 415.6]/Border[0 0 0]/A 282 0 R>>endobj
-284 0 obj<</S/URI/URI(http://anon.inf.tu-dresden.de/index_en.html)>>endobj
-285 0 obj<</Subtype/Link/Rect[75.7 376.2 269.5 389.2]/Border[0 0 0]/A 284 0 R>>endobj
-286 0 obj[280 0 R
-281 0 R
-283 0 R
-285 0 R]endobj
-287 0 obj<</S/URI/URI(http://www.squid-cache.org/)>>endobj
-288 0 obj<</Subtype/Link/Rect[350.7 365.0 379.1 378.0]/Border[0 0 0]/A 287 0 R>>endobj
-289 0 obj<</S/Launch/F(#FORWARDING)>>endobj
-290 0 obj<</Subtype/Link/Rect[371.5 351.8 458.3 364.8]/Border[0 0 0]/A 289 0 R>>endobj
-291 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
-292 0 obj<</Subtype/Link/Rect[485.8 351.8 542.0 364.8]/Border[0 0 0]/A 291 0 R>>endobj
-293 0 obj[288 0 R
-290 0 R
-292 0 R]endobj
-294 0 obj<</S/Launch/F(#ACCESS-CONTROL)>>endobj
-295 0 obj<</Subtype/Link/Rect[288.0 402.6 444.1 415.6]/Border[0 0 0]/A 294 0 R>>endobj
-296 0 obj<</S/URI/URI(http://config.privoxy.org/toggle)>>endobj
-297 0 obj<</Subtype/Link/Rect[72.0 304.6 211.3 317.6]/Border[0 0 0]/A 296 0 R>>endobj
-298 0 obj<</S/Launch/F(#BOOKMARKLETS)>>endobj
-299 0 obj<</Subtype/Link/Rect[248.9 304.6 347.3 317.6]/Border[0 0 0]/A 298 0 R>>endobj
-300 0 obj<</S/URI/URI(http://config.privoxy.org)>>endobj
-301 0 obj<</Subtype/Link/Rect[228.0 105.0 339.5 118.0]/Border[0 0 0]/A 300 0 R>>endobj
-302 0 obj[295 0 R
+260 0 R
+262 0 R
+264 0 R
+266 0 R
+268 0 R
+270 0 R
+271 0 R]endobj
+273 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=11118)>>endobj
+274 0 obj<</Subtype/Link/Rect[72.0 512.6 380.2 522.6]/Border[0 0 0]/A 273 0 R>>endobj
+275 0 obj<</S/Launch/F(#FORWARDING)>>endobj
+276 0 obj<</Subtype/Link/Rect[460.2 451.1 528.7 461.1]/Border[0 0 0]/A 275 0 R>>endobj
+277 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+278 0 obj<</Subtype/Link/Rect[72.0 441.5 116.0 451.5]/Border[0 0 0]/A 277 0 R>>endobj
+279 0 obj<</S/Launch/F(#FORWARDING)>>endobj
+280 0 obj<</Subtype/Link/Rect[381.0 328.1 449.5 338.1]/Border[0 0 0]/A 279 0 R>>endobj
+281 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+282 0 obj<</Subtype/Link/Rect[471.3 328.1 517.5 338.1]/Border[0 0 0]/A 281 0 R>>endobj
+283 0 obj<</S/URI/URI(http://www.transproxy.nlc.net.au/)>>endobj
+284 0 obj<</Subtype/Link/Rect[321.4 318.5 437.5 328.5]/Border[0 0 0]/A 283 0 R>>endobj
+285 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=detail&atid=211118&aid=629518&group_id=11118)>>endobj
+286 0 obj<</Subtype/Link/Rect[72.0 166.6 380.2 176.6]/Border[0 0 0]/A 285 0 R>>endobj
+287 0 obj[274 0 R
+276 0 R
+278 0 R
+280 0 R
+282 0 R
+284 0 R
+286 0 R]endobj
+288 0 obj<</S/Launch/F(#FILTER)>>endobj
+289 0 obj<</Subtype/Link/Rect[160.4 638.3 177.7 648.3]/Border[0 0 0]/A 288 0 R>>endobj
+290 0 obj<</S/Launch/F(#DEANIMATE-GIFS)>>endobj
+291 0 obj<</Subtype/Link/Rect[187.1 638.3 243.8 648.3]/Border[0 0 0]/A 290 0 R>>endobj
+292 0 obj<</S/Launch/F(#FILTER)>>endobj
+293 0 obj<</Subtype/Link/Rect[121.8 586.4 139.1 596.4]/Border[0 0 0]/A 292 0 R>>endobj
+294 0 obj<</S/Launch/F(#DEANIMATE-GIFS)>>endobj
+295 0 obj<</Subtype/Link/Rect[359.9 586.4 416.6 596.4]/Border[0 0 0]/A 294 0 R>>endobj
+296 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
+297 0 obj<</Subtype/Link/Rect[72.0 467.3 156.9 477.3]/Border[0 0 0]/A 296 0 R>>endobj
+298 0 obj<</S/URI/URI(http://p.p/)>>endobj
+299 0 obj<</Subtype/Link/Rect[348.1 467.3 383.7 477.3]/Border[0 0 0]/A 298 0 R>>endobj
+300 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
+301 0 obj<</Subtype/Link/Rect[362.8 419.3 449.9 429.3]/Border[0 0 0]/A 300 0 R>>endobj
+302 0 obj<</S/Launch/F(actions-file.html)>>endobj
+303 0 obj<</Subtype/Link/Rect[186.5 371.3 230.5 381.3]/Border[0 0 0]/A 302 0 R>>endobj
+304 0 obj<</S/Launch/F(actions-file.html)>>endobj
+305 0 obj<</Subtype/Link/Rect[313.4 300.1 357.5 310.1]/Border[0 0 0]/A 304 0 R>>endobj
+306 0 obj<</Subtype/Link/Rect[183.6 248.2 241.0 258.2]/Border[0 0 0]/Dest[575 0 R/XYZ 0 734 0]>>endobj
+307 0 obj<</S/URI/URI(http://www.multiproxy.org/anon_list.htm)>>endobj
+308 0 obj<</Subtype/Link/Rect[247.6 90.7 300.1 100.7]/Border[0 0 0]/A 307 0 R>>endobj
+309 0 obj<</S/URI/URI(http://anon.inf.tu-dresden.de/index_en.html)>>endobj
+310 0 obj<</Subtype/Link/Rect[285.4 81.1 439.5 91.1]/Border[0 0 0]/A 309 0 R>>endobj
+311 0 obj[289 0 R
+291 0 R
+293 0 R
+295 0 R
 297 0 R
 299 0 R
 297 0 R
 299 0 R
-301 0 R]endobj
-303 0 obj<</S/Launch/F(#BLOCK)>>endobj
-304 0 obj<</Subtype/Link/Rect[392.8 661.0 425.8 674.0]/Border[0 0 0]/A 303 0 R>>endobj
-305 0 obj<</S/URI/URI(http://www.privoxy.org/)>>endobj
-306 0 obj<</Subtype/Link/Rect[73.4 412.8 181.0 425.8]/Border[0 0 0]/A 305 0 R>>endobj
-307 0 obj<</S/URI/URI(http://www.privoxy.org/faq/)>>endobj
-308 0 obj<</Subtype/Link/Rect[73.4 383.5 198.1 396.5]/Border[0 0 0]/A 307 0 R>>endobj
-309 0 obj<</S/URI/URI(http://sourceforge.net/projects/ijbswa/)>>endobj
-310 0 obj<</Subtype/Link/Rect[73.4 354.2 240.6 367.2]/Border[0 0 0]/A 309 0 R>>endobj
-311 0 obj<</S/URI/URI(http://sourceforge.net)>>endobj
-312 0 obj<</Subtype/Link/Rect[384.5 354.2 443.4 367.2]/Border[0 0 0]/A 311 0 R>>endobj
-313 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
-314 0 obj<</Subtype/Link/Rect[73.4 325.0 185.3 338.0]/Border[0 0 0]/A 313 0 R>>endobj
-315 0 obj<</S/URI/URI(http://p.p/)>>endobj
-316 0 obj<</Subtype/Link/Rect[73.4 311.8 116.5 324.8]/Border[0 0 0]/A 315 0 R>>endobj
-317 0 obj<</S/Launch/F(actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
-318 0 obj<</Subtype/Link/Rect[73.4 282.5 215.2 295.5]/Border[0 0 0]/A 317 0 R>>endobj
-319 0 obj<</S/URI/URI(http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/)>>endobj
-320 0 obj<</Subtype/Link/Rect[73.4 253.2 346.4 266.2]/Border[0 0 0]/A 319 0 R>>endobj
-321 0 obj<</S/URI/URI(http://www.junkbusters.com/ht/en/cookies.html)>>endobj
-322 0 obj<</Subtype/Link/Rect[73.4 224.0 283.4 237.0]/Border[0 0 0]/A 321 0 R>>endobj
-323 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
-324 0 obj<</Subtype/Link/Rect[73.4 194.7 236.3 207.7]/Border[0 0 0]/A 323 0 R>>endobj
-325 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
-326 0 obj<</Subtype/Link/Rect[73.4 165.4 235.4 178.4]/Border[0 0 0]/A 325 0 R>>endobj
-327 0 obj<</S/URI/URI(http://privacy.net/analyze/)>>endobj
-328 0 obj<</Subtype/Link/Rect[73.4 123.0 188.6 136.0]/Border[0 0 0]/A 327 0 R>>endobj
-329 0 obj<</S/URI/URI(http://www.squid-cache.org/)>>endobj
-330 0 obj<</Subtype/Link/Rect[73.4 80.5 201.8 93.5]/Border[0 0 0]/A 329 0 R>>endobj
-331 0 obj[304 0 R
+301 0 R
+303 0 R
+305 0 R
 306 0 R
 308 0 R
 306 0 R
 308 0 R
-310 0 R
-312 0 R
-314 0 R
-316 0 R
-318 0 R
-320 0 R
+310 0 R]endobj
+312 0 obj<</S/URI/URI(http://www.squid-cache.org/)>>endobj
+313 0 obj<</Subtype/Link/Rect[290.8 309.0 313.4 319.0]/Border[0 0 0]/A 312 0 R>>endobj
+314 0 obj<</S/Launch/F(#FORWARDING)>>endobj
+315 0 obj<</Subtype/Link/Rect[196.5 299.4 265.0 309.4]/Border[0 0 0]/A 314 0 R>>endobj
+316 0 obj<</S/GoToR/D[0/XYZ null null 0]/F(privoxy-user-manual.pdf)>>endobj
+317 0 obj<</Subtype/Link/Rect[286.8 299.4 333.0 309.4]/Border[0 0 0]/A 316 0 R>>endobj
+318 0 obj[313 0 R
+315 0 R
+317 0 R]endobj
+319 0 obj<</S/Launch/F(#FILTER-CONTENT-COOKIES)>>endobj
+320 0 obj<</Subtype/Link/Rect[385.0 656.8 465.7 666.8]/Border[0 0 0]/A 319 0 R>>endobj
+321 0 obj<</S/Launch/F(#ACCESS-CONTROL)>>endobj
+322 0 obj<</Subtype/Link/Rect[179.2 556.9 305.9 566.9]/Border[0 0 0]/A 321 0 R>>endobj
+323 0 obj<</S/URI/URI(http://config.privoxy.org/toggle)>>endobj
+324 0 obj<</Subtype/Link/Rect[384.1 495.4 493.1 505.4]/Border[0 0 0]/A 323 0 R>>endobj
+325 0 obj<</S/Launch/F(#BOOKMARKLETS)>>endobj
+326 0 obj<</Subtype/Link/Rect[72.0 485.8 148.0 495.8]/Border[0 0 0]/A 325 0 R>>endobj
+327 0 obj<</S/URI/URI(http://config.privoxy.org)>>endobj
+328 0 obj<</Subtype/Link/Rect[72.0 372.3 154.7 382.3]/Border[0 0 0]/A 327 0 R>>endobj
+329 0 obj<</S/Launch/F(#BLOCK)>>endobj
+330 0 obj<</Subtype/Link/Rect[209.4 310.8 230.3 320.8]/Border[0 0 0]/A 329 0 R>>endobj
+331 0 obj[320 0 R
 322 0 R
 324 0 R
 326 0 R
 328 0 R
 330 0 R]endobj
 322 0 R
 324 0 R
 326 0 R
 328 0 R
 330 0 R]endobj
-332 0 obj<</S/URI/URI(http://www.privoxy.org/developer-manual/)>>endobj
-333 0 obj<</Subtype/Link/Rect[73.4 719.6 266.0 732.6]/Border[0 0 0]/A 332 0 R>>endobj
-334 0 obj[333 0 R]endobj
-335 0 obj<</S/Launch/F(#LISTEN-ADDRESS)>>endobj
-336 0 obj<</Subtype/Link/Rect[386.3 584.2 509.6 597.2]/Border[0 0 0]/A 335 0 R>>endobj
-337 0 obj<</S/Launch/F(config.html)>>endobj
-338 0 obj<</Subtype/Link/Rect[113.1 571.0 217.3 584.0]/Border[0 0 0]/A 337 0 R>>endobj
-339 0 obj<</S/URI/URI(http://config.privoxy.org/show-url-info)>>endobj
-340 0 obj<</Subtype/Link/Rect[147.8 429.8 327.9 442.8]/Border[0 0 0]/A 339 0 R>>endobj
-341 0 obj<</S/URI/URI(http://config.privoxy.org/toggle)>>endobj
-342 0 obj<</Subtype/Link/Rect[72.0 358.2 211.3 371.2]/Border[0 0 0]/A 341 0 R>>endobj
-343 0 obj<</S/URI/URI(http://config.privoxy.org/show-url-info)>>endobj
-344 0 obj<</Subtype/Link/Rect[173.4 318.6 353.6 331.6]/Border[0 0 0]/A 343 0 R>>endobj
-345 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
-346 0 obj<</Subtype/Link/Rect[72.0 279.0 238.3 292.0]/Border[0 0 0]/A 345 0 R>>endobj
-347 0 obj<</S/Launch/F(#ACTIONSANAT)>>endobj
-348 0 obj<</Subtype/Link/Rect[325.0 94.2 427.7 107.2]/Border[0 0 0]/A 347 0 R>>endobj
-349 0 obj<</S/Launch/F(#ACT-EXAMPLES)>>endobj
-350 0 obj<</Subtype/Link/Rect[502.6 94.2 536.5 107.2]/Border[0 0 0]/A 349 0 R>>endobj
-351 0 obj<</S/Launch/F(#ACT-EXAMPLES)>>endobj
-352 0 obj<</Subtype/Link/Rect[72.0 81.0 103.8 94.0]/Border[0 0 0]/A 351 0 R>>endobj
-353 0 obj[336 0 R
-338 0 R
-340 0 R
-342 0 R
-344 0 R
-346 0 R
-348 0 R
-350 0 R
-352 0 R]endobj
-354 0 obj<</S/URI/URI(http://sourceforge.net/)>>endobj
-355 0 obj<</Subtype/Link/Rect[239.1 584.6 298.1 597.6]/Border[0 0 0]/A 354 0 R>>endobj
-356 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=211118)>>endobj
-357 0 obj<</Subtype/Link/Rect[72.0 571.4 345.6 584.4]/Border[0 0 0]/A 356 0 R>>endobj
-358 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-users)>>endobj
-359 0 obj<</Subtype/Link/Rect[341.1 545.0 419.1 558.0]/Border[0 0 0]/A 358 0 R>>endobj
-360 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=111118)>>endobj
-361 0 obj<</Subtype/Link/Rect[72.0 456.6 345.6 469.6]/Border[0 0 0]/A 360 0 R>>endobj
-362 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=add&group_id=11118&atid=111118)>>endobj
-363 0 obj<</Subtype/Link/Rect[165.2 417.0 222.0 430.0]/Border[0 0 0]/A 362 0 R>>endobj
-364 0 obj<</S/Launch/F(toggle?mini=y&set=disabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
-365 0 obj<</Subtype/Link/Rect[474.4 390.6 529.4 403.6]/Border[0 0 0]/A 364 0 R>>endobj
-366 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/appendix.html#ACTIONSANAT)>>endobj
-367 0 obj<</Subtype/Link/Rect[268.4 377.4 395.8 390.4]/Border[0 0 0]/A 366 0 R>>endobj
-368 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/installation.html)>>endobj
-369 0 obj<</Subtype/Link/Rect[244.0 311.4 370.8 324.4]/Border[0 0 0]/A 368 0 R>>endobj
-370 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?atid=361118&group_id=11118)>>endobj
-371 0 obj<</Subtype/Link/Rect[147.7 223.0 424.1 236.0]/Border[0 0 0]/A 370 0 R>>endobj
-372 0 obj<</S/Launch/F(actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
-373 0 obj<</Subtype/Link/Rect[72.0 134.6 213.8 147.6]/Border[0 0 0]/A 372 0 R>>endobj
-374 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-announce)>>endobj
-375 0 obj<</Subtype/Link/Rect[182.6 81.8 262.4 94.8]/Border[0 0 0]/A 374 0 R>>endobj
-376 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
-377 0 obj<</Subtype/Link/Rect[397.5 81.8 453.1 94.8]/Border[0 0 0]/A 376 0 R>>endobj
-378 0 obj<</S/URI/URI(http://sf.net/projects/ijbswa/)>>endobj
-379 0 obj<</Subtype/Link/Rect[482.4 81.8 539.2 94.8]/Border[0 0 0]/A 378 0 R>>endobj
-380 0 obj[355 0 R
+332 0 obj<</S/URI/URI(http://www.privoxy.org/)>>endobj
+333 0 obj<</Subtype/Link/Rect[73.4 639.9 154.3 649.9]/Border[0 0 0]/A 332 0 R>>endobj
+334 0 obj<</S/URI/URI(http://www.privoxy.org/faq/)>>endobj
+335 0 obj<</Subtype/Link/Rect[73.4 617.9 167.7 627.9]/Border[0 0 0]/A 334 0 R>>endobj
+336 0 obj<</S/URI/URI(http://sourceforge.net/projects/ijbswa/)>>endobj
+337 0 obj<</Subtype/Link/Rect[73.4 595.8 205.9 605.8]/Border[0 0 0]/A 336 0 R>>endobj
+338 0 obj<</S/URI/URI(http://sourceforge.net)>>endobj
+339 0 obj<</Subtype/Link/Rect[320.7 595.8 369.1 605.8]/Border[0 0 0]/A 338 0 R>>endobj
+340 0 obj<</S/URI/URI(http://config.privoxy.org/)>>endobj
+341 0 obj<</Subtype/Link/Rect[73.4 573.7 158.4 583.7]/Border[0 0 0]/A 340 0 R>>endobj
+342 0 obj<</S/URI/URI(http://p.p/)>>endobj
+343 0 obj<</Subtype/Link/Rect[448.9 573.7 484.5 583.7]/Border[0 0 0]/A 342 0 R>>endobj
+344 0 obj<</S/Launch/F(actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
+345 0 obj<</Subtype/Link/Rect[73.4 551.7 181.9 561.7]/Border[0 0 0]/A 344 0 R>>endobj
+346 0 obj<</S/URI/URI(http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/)>>endobj
+347 0 obj<</Subtype/Link/Rect[73.4 529.6 286.6 539.6]/Border[0 0 0]/A 346 0 R>>endobj
+348 0 obj<</S/URI/URI(http://www.junkbusters.com/ht/en/cookies.html)>>endobj
+349 0 obj<</Subtype/Link/Rect[73.4 507.5 237.9 517.5]/Border[0 0 0]/A 348 0 R>>endobj
+350 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
+351 0 obj<</Subtype/Link/Rect[73.4 485.5 198.8 495.5]/Border[0 0 0]/A 350 0 R>>endobj
+352 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
+353 0 obj<</Subtype/Link/Rect[73.4 463.4 198.8 473.4]/Border[0 0 0]/A 352 0 R>>endobj
+354 0 obj<</S/URI/URI(http://privacy.net/analyze/)>>endobj
+355 0 obj<</Subtype/Link/Rect[73.4 441.3 164.1 451.3]/Border[0 0 0]/A 354 0 R>>endobj
+356 0 obj<</S/URI/URI(http://www.squid-cache.org/)>>endobj
+357 0 obj<</Subtype/Link/Rect[73.4 419.3 174.1 429.3]/Border[0 0 0]/A 356 0 R>>endobj
+358 0 obj<</S/URI/URI(http://www.privoxy.org/developer-manual/)>>endobj
+359 0 obj<</Subtype/Link/Rect[73.4 397.2 222.6 407.2]/Border[0 0 0]/A 358 0 R>>endobj
+360 0 obj[333 0 R
+335 0 R
+337 0 R
+339 0 R
+341 0 R
+343 0 R
+345 0 R
+347 0 R
+349 0 R
+351 0 R
+353 0 R
+355 0 R
 357 0 R
 357 0 R
-359 0 R
-361 0 R
-363 0 R
-365 0 R
-367 0 R
-369 0 R
-371 0 R
-373 0 R
-375 0 R
-377 0 R
-379 0 R]endobj
-381 0 obj<</S/URI/URI(http://sourceforge.net/mail/?group_id=11118)>>endobj
-382 0 obj<</Subtype/Link/Rect[319.0 661.0 520.1 674.0]/Border[0 0 0]/A 381 0 R>>endobj
-383 0 obj[382 0 R]endobj
-384 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
-385 0 obj<</Subtype/Link/Rect[293.5 683.8 438.7 696.8]/Border[0 0 0]/A 384 0 R>>endobj
-386 0 obj<</S/URI/URI(http://www.gnu.org/copyleft/gpl.html)>>endobj
-387 0 obj<</Subtype/Link/Rect[246.4 437.0 379.0 450.0]/Border[0 0 0]/A 386 0 R>>endobj
-388 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
-389 0 obj<</Subtype/Link/Rect[207.6 295.8 295.0 308.8]/Border[0 0 0]/A 388 0 R>>endobj
-390 0 obj<</S/URI/URI(http://www.junkbusters.com/)>>endobj
-391 0 obj<</Subtype/Link/Rect[420.6 295.8 531.2 308.8]/Border[0 0 0]/A 390 0 R>>endobj
-392 0 obj<</S/URI/URI(http://www.junkbusters.com/ijbdist.html#release)>>endobj
-393 0 obj<</Subtype/Link/Rect[379.7 229.8 413.0 242.8]/Border[0 0 0]/A 392 0 R>>endobj
-394 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
-395 0 obj<</Subtype/Link/Rect[479.6 229.8 534.2 242.8]/Border[0 0 0]/A 394 0 R>>endobj
-396 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
-397 0 obj<</Subtype/Link/Rect[72.0 216.6 125.2 229.6]/Border[0 0 0]/A 396 0 R>>endobj
-398 0 obj<</S/URI/URI(http://www.gnu.org/licenses/gpl.html)>>endobj
-399 0 obj<</Subtype/Link/Rect[344.5 216.6 368.0 229.6]/Border[0 0 0]/A 398 0 R>>endobj
-400 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
-401 0 obj<</Subtype/Link/Rect[259.3 177.0 408.1 190.0]/Border[0 0 0]/A 400 0 R>>endobj
-402 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/copyright.html#AUTHORS)>>endobj
-403 0 obj<</Subtype/Link/Rect[123.3 97.8 173.7 110.8]/Border[0 0 0]/A 402 0 R>>endobj
-404 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/introduction.html#FEATURES)>>endobj
-405 0 obj<</Subtype/Link/Rect[219.6 84.6 278.2 97.6]/Border[0 0 0]/A 404 0 R>>endobj
-406 0 obj[385 0 R
-387 0 R
+359 0 R]endobj
+361 0 obj<</S/Launch/F(#LISTEN-ADDRESS)>>endobj
+362 0 obj<</Subtype/Link/Rect[111.6 638.3 189.6 648.3]/Border[0 0 0]/A 361 0 R>>endobj
+363 0 obj<</S/Launch/F(config.html)>>endobj
+364 0 obj<</Subtype/Link/Rect[232.0 638.3 312.1 648.3]/Border[0 0 0]/A 363 0 R>>endobj
+365 0 obj<</S/URI/URI(http://config.privoxy.org/show-url-info)>>endobj
+366 0 obj<</Subtype/Link/Rect[72.0 548.0 206.7 558.0]/Border[0 0 0]/A 365 0 R>>endobj
+367 0 obj<</S/URI/URI(http://config.privoxy.org/toggle)>>endobj
+368 0 obj<</Subtype/Link/Rect[343.2 505.7 452.2 515.7]/Border[0 0 0]/A 367 0 R>>endobj
+369 0 obj<</S/URI/URI(http://config.privoxy.org/show-url-info)>>endobj
+370 0 obj<</Subtype/Link/Rect[150.3 476.9 287.2 486.9]/Border[0 0 0]/A 369 0 R>>endobj
+371 0 obj<</S/URI/URI(http://config.privoxy.org/show-status)>>endobj
+372 0 obj<</Subtype/Link/Rect[89.8 457.7 221.6 467.7]/Border[0 0 0]/A 371 0 R>>endobj
+373 0 obj<</S/Launch/F(#ACTIONSANAT)>>endobj
+374 0 obj<</Subtype/Link/Rect[274.8 342.5 358.1 352.5]/Border[0 0 0]/A 373 0 R>>endobj
+375 0 obj<</S/Launch/F(#ACT-EXAMPLES)>>endobj
+376 0 obj<</Subtype/Link/Rect[419.5 342.5 473.3 352.5]/Border[0 0 0]/A 375 0 R>>endobj
+377 0 obj[362 0 R
+364 0 R
+366 0 R
+368 0 R
+370 0 R
+372 0 R
+374 0 R
+376 0 R]endobj
+378 0 obj<</S/URI/URI(http://www.php.net/)>>endobj
+379 0 obj<</Subtype/Link/Rect[236.1 376.2 254.8 386.2]/Border[0 0 0]/A 378 0 R>>endobj
+380 0 obj[379 0 R]endobj
+381 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
+382 0 obj<</Subtype/Link/Rect[449.1 681.7 497.6 691.7]/Border[0 0 0]/A 381 0 R>>endobj
+383 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
+384 0 obj<</Subtype/Link/Rect[247.7 610.6 296.1 620.6]/Border[0 0 0]/A 383 0 R>>endobj
+385 0 obj[382 0 R
+384 0 R]endobj
+386 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=211118)>>endobj
+387 0 obj<</Subtype/Link/Rect[147.1 643.6 256.1 653.6]/Border[0 0 0]/A 386 0 R>>endobj
+388 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=211118)>>endobj
+389 0 obj<</Subtype/Link/Rect[340.1 643.6 558.9 653.6]/Border[0 0 0]/A 388 0 R>>endobj
+390 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-users)>>endobj
+391 0 obj<</Subtype/Link/Rect[290.3 624.4 351.6 634.4]/Border[0 0 0]/A 390 0 R>>endobj
+392 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?group_id=11118&atid=111118)>>endobj
+393 0 obj<</Subtype/Link/Rect[253.9 579.8 472.7 589.8]/Border[0 0 0]/A 392 0 R>>endobj
+394 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=add&group_id=11118&atid=111118)>>endobj
+395 0 obj<</Subtype/Link/Rect[526.9 560.6 552.7 570.6]/Border[0 0 0]/A 394 0 R>>endobj
+396 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?func=add&group_id=11118&atid=111118)>>endobj
+397 0 obj<</Subtype/Link/Rect[72.0 551.0 88.0 561.0]/Border[0 0 0]/A 396 0 R>>endobj
+398 0 obj<</S/Launch/F(toggle?mini=y&set=disabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
+399 0 obj<</Subtype/Link/Rect[390.4 531.8 431.7 541.8]/Border[0 0 0]/A 398 0 R>>endobj
+400 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/appendix.html#ACTIONSANAT)>>endobj
+401 0 obj<</Subtype/Link/Rect[117.8 522.2 221.0 532.2]/Border[0 0 0]/A 400 0 R>>endobj
+402 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/installation.html)>>endobj
+403 0 obj<</Subtype/Link/Rect[109.4 483.8 212.5 493.8]/Border[0 0 0]/A 402 0 R>>endobj
+404 0 obj<</S/URI/URI(http://sourceforge.net/tracker/?atid=361118&group_id=11118)>>endobj
+405 0 obj<</Subtype/Link/Rect[72.0 429.5 288.6 439.5]/Border[0 0 0]/A 404 0 R>>endobj
+406 0 obj<</S/Launch/F(actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no'\).focus\(\)\);)>>endobj
+407 0 obj<</Subtype/Link/Rect[337.1 375.3 447.8 385.3]/Border[0 0 0]/A 406 0 R>>endobj
+408 0 obj<</S/URI/URI(http://lists.sourceforge.net/lists/listinfo/ijbswa-announce)>>endobj
+409 0 obj<</Subtype/Link/Rect[72.0 336.9 134.0 346.9]/Border[0 0 0]/A 408 0 R>>endobj
+410 0 obj<</S/URI/URI(http://sourceforge.net/project/showfiles.php?group_id=11118)>>endobj
+411 0 obj<</Subtype/Link/Rect[240.7 336.9 284.8 346.9]/Border[0 0 0]/A 410 0 R>>endobj
+412 0 obj<</S/URI/URI(http://sf.net/projects/ijbswa/)>>endobj
+413 0 obj<</Subtype/Link/Rect[307.4 336.9 353.7 346.9]/Border[0 0 0]/A 412 0 R>>endobj
+414 0 obj<</S/URI/URI(http://sourceforge.net/mail/?group_id=11118)>>endobj
+415 0 obj<</Subtype/Link/Rect[72.0 273.1 229.2 283.1]/Border[0 0 0]/A 414 0 R>>endobj
+416 0 obj[387 0 R
 389 0 R
 391 0 R
 393 0 R
 389 0 R
 391 0 R
 393 0 R
 399 0 R
 401 0 R
 403 0 R
 399 0 R
 401 0 R
 403 0 R
-405 0 R]endobj
-407 0 obj<</Dests 408 0 R>>endobj
-408 0 obj<</Kids[409 0 R]>>endobj
-409 0 obj<</Limits[(actionss)(yahoo)]/Names[(actionss)410 0 R(aen136)411 0 R(aen2)412 0 R(aen209)413 0 R(aen266)414 0 R(aen285)415 0 R(aen293)416 0 R(aen328)417 0 R(aen431)418 0 R(aen447)419 0 R(aen45)420 0 R(aen465)421 0 R(aen482)422 0 R(aen487)423 0 R(aen528)424 0 R(aen588)425 0 R(aen599)426 0 R(aen610)427 0 R(aen620)428 0 R(aen626)429 0 R(aen631)430 0 R(aen642)431 0 R(aen755)432 0 R(aen768)433 0 R(aen891)434 0 R(aen9)435 0 R(aen907)436 0 R(badsite)437 0 R(blankpage)438 0 R(blocklist)439 0 R(body.html)440 0 R(browseconfig)441 0 R(browsers2)442 0 R(configfiles)443 0 R(configuration)444 0 R(configurl)445 0 R(contact)446 0 R(contact-ads)447 0 R(contact-bugs)448 0 R(contact-feature)449 0 R(contact-other)450 0 R(contact-support)451 0 R(copyright)452 0 R(crunch)453 0 R(differs)454 0 R(downloads)455 0 R(dun)456 0 R(ftp)457 0 R(general)458 0 R(getupdates)459 0 R(installation)460 0 R(ip)461 0 R(jointeam)462 0 R(jointeam-money)463 0 R(jointeam-software)464 0 R(jointeam-work)465 0 R(license)466 0 R(loadingtimes)467 0 R(localhost)468 0 R(misc)469 0 R(newads)470 0 R(newconfig)471 0 R(newinstall)472 0 R(newjb)473 0 R(nothing)474 0 R(osxie)475 0 R(osxuninstall)476 0 R(otherproxy)477 0 R(port-80)478 0 R(proxymoron)479 0 R(reallyoff)480 0 R(seealso)481 0 R(srvany)482 0 R(transparent)483 0 R(trouble)484 0 R(turnoff)485 0 R(whatsanad)486 0 R(whichbrowsers)487 0 R(whichos)488 0 R(yahoo)489 0 R]>>endobj
-410 0 obj<</D[509 0 R/XYZ 0 310 0]>>endobj
-411 0 obj<</D[501 0 R/XYZ 0 705 0]>>endobj
-412 0 obj<</D[491 0 R/XYZ 0 689 0]>>endobj
-413 0 obj<</D[505 0 R/XYZ 0 323 0]>>endobj
-414 0 obj<</D[509 0 R/XYZ 0 474 0]>>endobj
-415 0 obj<</D[509 0 R/XYZ 0 221 0]>>endobj
-416 0 obj<</D[511 0 R/XYZ 0 734 0]>>endobj
-417 0 obj<</D[511 0 R/XYZ 0 313 0]>>endobj
-418 0 obj<</D[513 0 R/XYZ 0 429 0]>>endobj
-419 0 obj<</D[513 0 R/XYZ 0 225 0]>>endobj
-420 0 obj<</D[497 0 R/XYZ 0 400 0]>>endobj
-421 0 obj<</D[515 0 R/XYZ 0 692 0]>>endobj
-422 0 obj<</D[515 0 R/XYZ 0 537 0]>>endobj
-423 0 obj<</D[515 0 R/XYZ 0 426 0]>>endobj
-424 0 obj<</D[519 0 R/XYZ 0 696 0]>>endobj
-425 0 obj<</D[521 0 R/XYZ 0 321 0]>>endobj
-426 0 obj<</D[523 0 R/XYZ 0 734 0]>>endobj
-427 0 obj<</D[523 0 R/XYZ 0 407 0]>>endobj
-428 0 obj<</D[523 0 R/XYZ 0 323 0]>>endobj
-429 0 obj<</D[523 0 R/XYZ 0 251 0]>>endobj
-430 0 obj<</D[525 0 R/XYZ 0 718 0]>>endobj
-431 0 obj<</D[525 0 R/XYZ 0 528 0]>>endobj
-432 0 obj<</D[531 0 R/XYZ 0 696 0]>>endobj
-433 0 obj<</D[531 0 R/XYZ 0 555 0]>>endobj
-434 0 obj<</D[541 0 R/XYZ 0 589 0]>>endobj
-435 0 obj<</D[491 0 R/XYZ 0 560 0]>>endobj
-436 0 obj<</D[541 0 R/XYZ 0 342 0]>>endobj
-437 0 obj<</D[531 0 R/XYZ 0 414 0]>>endobj
-438 0 obj<</D[535 0 R/XYZ 0 692 0]>>endobj
-439 0 obj<</D[521 0 R/XYZ 0 734 0]>>endobj
-440 0 obj<</D[497 0 R/XYZ 0 734 0]>>endobj
-441 0 obj<</D[513 0 R/XYZ 0 649 0]>>endobj
-442 0 obj<</D[501 0 R/XYZ 0 567 0]>>endobj
-443 0 obj<</D[511 0 R/XYZ 0 412 0]>>endobj
-444 0 obj<</D[509 0 R/XYZ 0 734 0]>>endobj
-445 0 obj<</D[519 0 R/XYZ 0 361 0]>>endobj
-446 0 obj<</D[537 0 R/XYZ 0 734 0]>>endobj
-447 0 obj<</D[537 0 R/XYZ 0 207 0]>>endobj
-448 0 obj<</D[537 0 R/XYZ 0 516 0]>>endobj
-449 0 obj<</D[537 0 R/XYZ 0 282 0]>>endobj
-450 0 obj<</D[539 0 R/XYZ 0 734 0]>>endobj
-451 0 obj<</D[537 0 R/XYZ 0 631 0]>>endobj
-452 0 obj<</D[541 0 R/XYZ 0 734 0]>>endobj
-453 0 obj<</D[525 0 R/XYZ 0 191 0]>>endobj
-454 0 obj<</D[497 0 R/XYZ 0 183 0]>>endobj
-455 0 obj<</D[527 0 R/XYZ 0 734 0]>>endobj
-456 0 obj<</D[533 0 R/XYZ 0 734 0]>>endobj
-457 0 obj<</D[533 0 R/XYZ 0 355 0]>>endobj
-458 0 obj<</D[497 0 R/XYZ 0 734 0]>>endobj
-459 0 obj<</D[509 0 R/XYZ 0 696 0]>>endobj
-460 0 obj<</D[505 0 R/XYZ 0 734 0]>>endobj
-461 0 obj<</D[521 0 R/XYZ 0 590 0]>>endobj
-462 0 obj<</D[501 0 R/XYZ 0 302 0]>>endobj
-463 0 obj<</D[501 0 R/XYZ 0 272 0]>>endobj
-464 0 obj<</D[501 0 R/XYZ 0 191 0]>>endobj
-465 0 obj<</D[503 0 R/XYZ 0 734 0]>>endobj
-466 0 obj<</D[501 0 R/XYZ 0 426 0]>>endobj
-467 0 obj<</D[519 0 R/XYZ 0 542 0]>>endobj
-468 0 obj<</D[505 0 R/XYZ 0 238 0]>>endobj
-469 0 obj<</D[519 0 R/XYZ 0 734 0]>>endobj
-470 0 obj<</D[521 0 R/XYZ 0 662 0]>>endobj
-471 0 obj<</D[509 0 R/XYZ 0 585 0]>>endobj
-472 0 obj<</D[505 0 R/XYZ 0 447 0]>>endobj
-473 0 obj<</D[497 0 R/XYZ 0 696 0]>>endobj
-474 0 obj<</D[507 0 R/XYZ 0 679 0]>>endobj
-475 0 obj<</D[533 0 R/XYZ 0 283 0]>>endobj
-476 0 obj<</D[533 0 R/XYZ 0 168 0]>>endobj
-477 0 obj<</D[517 0 R/XYZ 0 734 0]>>endobj
-478 0 obj<</D[517 0 R/XYZ 0 662 0]>>endobj
-479 0 obj<</D[499 0 R/XYZ 0 441 0]>>endobj
-480 0 obj<</D[525 0 R/XYZ 0 275 0]>>endobj
-481 0 obj<</D[527 0 R/XYZ 0 500 0]>>endobj
-482 0 obj<</D[515 0 R/XYZ 0 193 0]>>endobj
-483 0 obj<</D[517 0 R/XYZ 0 573 0]>>endobj
-484 0 obj<</D[531 0 R/XYZ 0 734 0]>>endobj
-485 0 obj<</D[525 0 R/XYZ 0 360 0]>>endobj
-486 0 obj<</D[499 0 R/XYZ 0 237 0]>>endobj
-487 0 obj<</D[505 0 R/XYZ 0 696 0]>>endobj
-488 0 obj<</D[505 0 R/XYZ 0 611 0]>>endobj
-489 0 obj<</D[511 0 R/XYZ 0 569 0]>>endobj
-490 0 obj<</Type/Pages/Count 27/Kids[491 0 R
-493 0 R
-495 0 R
-497 0 R
-499 0 R
-501 0 R
-503 0 R
-505 0 R
-507 0 R
-509 0 R
-511 0 R
-513 0 R
-515 0 R
-517 0 R
-519 0 R
-521 0 R
-523 0 R
-525 0 R
-527 0 R
-529 0 R
-531 0 R
-533 0 R
-535 0 R
-537 0 R
+405 0 R
+407 0 R
+409 0 R
+411 0 R
+413 0 R
+415 0 R]endobj
+417 0 obj<</S/URI/URI(mailto:developers@privoxy.org)>>endobj
+418 0 obj<</Subtype/Link/Rect[250.1 697.8 355.7 707.8]/Border[0 0 0]/A 417 0 R>>endobj
+419 0 obj<</S/URI/URI(http://www.gnu.org/copyleft/gpl.html)>>endobj
+420 0 obj<</Subtype/Link/Rect[212.1 538.0 316.6 548.0]/Border[0 0 0]/A 419 0 R>>endobj
+421 0 obj<</S/URI/URI(http://www.junkbusters.com/ijb.html)>>endobj
+422 0 obj<</Subtype/Link/Rect[181.4 445.4 252.1 455.4]/Border[0 0 0]/A 421 0 R>>endobj
+423 0 obj<</S/URI/URI(http://www.junkbusters.com/)>>endobj
+424 0 obj<</Subtype/Link/Rect[353.0 445.4 442.4 455.4]/Border[0 0 0]/A 423 0 R>>endobj
+425 0 obj<</S/URI/URI(http://www.junkbusters.com/ijbdist.html#release)>>endobj
+426 0 obj<</Subtype/Link/Rect[151.6 397.4 180.0 407.4]/Border[0 0 0]/A 425 0 R>>endobj
+427 0 obj<</S/URI/URI(http://www.junkbusters.com)>>endobj
+428 0 obj<</Subtype/Link/Rect[232.1 397.4 321.4 407.4]/Border[0 0 0]/A 427 0 R>>endobj
+429 0 obj<</S/URI/URI(http://www.gnu.org/licenses/gpl.html)>>endobj
+430 0 obj<</Subtype/Link/Rect[498.8 397.4 517.1 407.4]/Border[0 0 0]/A 429 0 R>>endobj
+431 0 obj<</S/URI/URI(http://www.waldherr.org/junkbuster/)>>endobj
+432 0 obj<</Subtype/Link/Rect[222.7 368.6 340.6 378.6]/Border[0 0 0]/A 431 0 R>>endobj
+433 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/copyright.html#AUTHORS)>>endobj
+434 0 obj<</Subtype/Link/Rect[114.2 320.6 155.6 330.6]/Border[0 0 0]/A 433 0 R>>endobj
+435 0 obj<</S/URI/URI(http://www.privoxy.org/user-manual/introduction.html#FEATURES)>>endobj
+436 0 obj<</Subtype/Link/Rect[91.6 311.0 139.6 321.0]/Border[0 0 0]/A 435 0 R>>endobj
+437 0 obj[418 0 R
+420 0 R
+422 0 R
+424 0 R
+426 0 R
+428 0 R
+430 0 R
+432 0 R
+434 0 R
+436 0 R]endobj
+438 0 obj<</Dests 439 0 R>>endobj
+439 0 obj<</Kids[440 0 R]>>endobj
+440 0 obj<</Limits[(actionss)(yahoo)]/Names[(actionss)441 0 R(aen1014)442 0 R(aen1030)443 0 R(aen136)444 0 R(aen143)445 0 R(aen2)446 0 R(aen226)447 0 R(aen312)448 0 R(aen331)449 0 R(aen339)450 0 R(aen404)451 0 R(aen420)452 0 R(aen446)453 0 R(aen45)454 0 R(aen463)455 0 R(aen468)456 0 R(aen537)457 0 R(aen598)458 0 R(aen609)459 0 R(aen620)460 0 R(aen630)461 0 R(aen636)462 0 R(aen641)463 0 R(aen656)464 0 R(aen801)465 0 R(aen814)466 0 R(aen9)467 0 R(allow-cookies)468 0 R(badsite)469 0 R(blankpage)470 0 R(blocklist)471 0 R(body.html)472 0 R(browseconfig)473 0 R(browsers2)474 0 R(configfiles)475 0 R(configuration)476 0 R(configurl)477 0 R(contact)478 0 R(contact-ads)479 0 R(contact-bugs)480 0 R(contact-feature)481 0 R(contact-other)482 0 R(contact-support)483 0 R(copyright)484 0 R(crunch)485 0 R(demoronizer)486 0 R(demoronizer2)487 0 R(demoronizer3)488 0 R(differs)489 0 R(downloads)490 0 R(downloads2)491 0 R(dun)492 0 R(email-client)493 0 R(error503)494 0 R(ftp)495 0 R(general)496 0 R(getupdates)497 0 R(installation)498 0 R(inuse)499 0 R(ip)500 0 R(jointeam)501 0 R(jointeam-money)502 0 R(jointeam-software)503 0 R(jointeam-work)504 0 R(license)505 0 R(loadingtimes)506 0 R(localhost)507 0 R(microsuck)508 0 R(misc)509 0 R(newads)510 0 R(newconfig)511 0 R(newinstall)512 0 R(newjb)513 0 R(nohostname)514 0 R(nothing)515 0 R(notused)516 0 R(osxie)517 0 R(osximages)518 0 R(osxuninstall)519 0 R(otherproxy)520 0 R(outlook)521 0 R(outlook-more)522 0 R(port-80)523 0 R(proxymoron)524 0 R(reallyoff)525 0 R(seealso)526 0 R(srvany)527 0 R(transparent)528 0 R(trouble)529 0 R(turnoff)530 0 R(whatsanad)531 0 R(whichbrowsers)532 0 R(whichos)533 0 R(windowopen)534 0 R(yahoo)535 0 R]>>endobj
+441 0 obj<</D[553 0 R/XYZ 0 456 0]>>endobj
+442 0 obj<</D[577 0 R/XYZ 0 638 0]>>endobj
+443 0 obj<</D[577 0 R/XYZ 0 478 0]>>endobj
+444 0 obj<</D[545 0 R/XYZ 0 447 0]>>endobj
+445 0 obj<</D[545 0 R/XYZ 0 357 0]>>endobj
+446 0 obj<</D[537 0 R/XYZ 0 708 0]>>endobj
+447 0 obj<</D[549 0 R/XYZ 0 384 0]>>endobj
+448 0 obj<</D[553 0 R/XYZ 0 555 0]>>endobj
+449 0 obj<</D[553 0 R/XYZ 0 404 0]>>endobj
+450 0 obj<</D[553 0 R/XYZ 0 342 0]>>endobj
+451 0 obj<</D[555 0 R/XYZ 0 536 0]>>endobj
+452 0 obj<</D[555 0 R/XYZ 0 407 0]>>endobj
+453 0 obj<</D[555 0 R/XYZ 0 199 0]>>endobj
+454 0 obj<</D[543 0 R/XYZ 0 511 0]>>endobj
+455 0 obj<</D[555 0 R/XYZ 0 108 0]>>endobj
+456 0 obj<</D[557 0 R/XYZ 0 712 0]>>endobj
+457 0 obj<</D[561 0 R/XYZ 0 707 0]>>endobj
+458 0 obj<</D[563 0 R/XYZ 0 703 0]>>endobj
+459 0 obj<</D[563 0 R/XYZ 0 545 0]>>endobj
+460 0 obj<</D[563 0 R/XYZ 0 340 0]>>endobj
+461 0 obj<</D[563 0 R/XYZ 0 288 0]>>endobj
+462 0 obj<</D[563 0 R/XYZ 0 236 0]>>endobj
+463 0 obj<</D[563 0 R/XYZ 0 117 0]>>endobj
+464 0 obj<</D[565 0 R/XYZ 0 626 0]>>endobj
+465 0 obj<</D[569 0 R/XYZ 0 707 0]>>endobj
+466 0 obj<</D[569 0 R/XYZ 0 627 0]>>endobj
+467 0 obj<</D[537 0 R/XYZ 0 614 0]>>endobj
+468 0 obj<</D[557 0 R/XYZ 0 155 0]>>endobj
+469 0 obj<</D[569 0 R/XYZ 0 536 0]>>endobj
+470 0 obj<</D[571 0 R/XYZ 0 418 0]>>endobj
+471 0 obj<</D[561 0 R/XYZ 0 331 0]>>endobj
+472 0 obj<</D[543 0 R/XYZ 0 734 0]>>endobj
+473 0 obj<</D[555 0 R/XYZ 0 674 0]>>endobj
+474 0 obj<</D[545 0 R/XYZ 0 276 0]>>endobj
+475 0 obj<</D[553 0 R/XYZ 0 136 0]>>endobj
+476 0 obj<</D[553 0 R/XYZ 0 734 0]>>endobj
+477 0 obj<</D[561 0 R/XYZ 0 498 0]>>endobj
+478 0 obj<</D[575 0 R/XYZ 0 734 0]>>endobj
+479 0 obj<</D[575 0 R/XYZ 0 418 0]>>endobj
+480 0 obj<</D[575 0 R/XYZ 0 613 0]>>endobj
+481 0 obj<</D[575 0 R/XYZ 0 472 0]>>endobj
+482 0 obj<</D[575 0 R/XYZ 0 325 0]>>endobj
+483 0 obj<</D[575 0 R/XYZ 0 677 0]>>endobj
+484 0 obj<</D[577 0 R/XYZ 0 734 0]>>endobj
+485 0 obj<</D[565 0 R/XYZ 0 422 0]>>endobj
+486 0 obj<</D[573 0 R/XYZ 0 722 0]>>endobj
+487 0 obj<</D[573 0 R/XYZ 0 660 0]>>endobj
+488 0 obj<</D[573 0 R/XYZ 0 599 0]>>endobj
+489 0 obj<</D[543 0 R/XYZ 0 363 0]>>endobj
+490 0 obj<</D[565 0 R/XYZ 0 351 0]>>endobj
+491 0 obj<</D[567 0 R/XYZ 0 734 0]>>endobj
+492 0 obj<</D[569 0 R/XYZ 0 331 0]>>endobj
+493 0 obj<</D[549 0 R/XYZ 0 555 0]>>endobj
+494 0 obj<</D[571 0 R/XYZ 0 262 0]>>endobj
+495 0 obj<</D[569 0 R/XYZ 0 106 0]>>endobj
+496 0 obj<</D[543 0 R/XYZ 0 734 0]>>endobj
+497 0 obj<</D[553 0 R/XYZ 0 707 0]>>endobj
+498 0 obj<</D[549 0 R/XYZ 0 734 0]>>endobj
+499 0 obj<</D[571 0 R/XYZ 0 120 0]>>endobj
+500 0 obj<</D[561 0 R/XYZ 0 227 0]>>endobj
+501 0 obj<</D[547 0 R/XYZ 0 734 0]>>endobj
+502 0 obj<</D[547 0 R/XYZ 0 712 0]>>endobj
+503 0 obj<</D[547 0 R/XYZ 0 662 0]>>endobj
+504 0 obj<</D[547 0 R/XYZ 0 603 0]>>endobj
+505 0 obj<</D[545 0 R/XYZ 0 196 0]>>endobj
+506 0 obj<</D[561 0 R/XYZ 0 617 0]>>endobj
+507 0 obj<</D[549 0 R/XYZ 0 323 0]>>endobj
+508 0 obj<</D[567 0 R/XYZ 0 384 0]>>endobj
+509 0 obj<</D[561 0 R/XYZ 0 734 0]>>endobj
+510 0 obj<</D[561 0 R/XYZ 0 279 0]>>endobj
+511 0 obj<</D[553 0 R/XYZ 0 627 0]>>endobj
+512 0 obj<</D[549 0 R/XYZ 0 465 0]>>endobj
+513 0 obj<</D[543 0 R/XYZ 0 707 0]>>endobj
+514 0 obj<</D[571 0 R/XYZ 0 201 0]>>endobj
+515 0 obj<</D[549 0 R/XYZ 0 165 0]>>endobj
+516 0 obj<</D[551 0 R/XYZ 0 734 0]>>endobj
+517 0 obj<</D[571 0 R/XYZ 0 645 0]>>endobj
+518 0 obj<</D[571 0 R/XYZ 0 482 0]>>endobj
+519 0 obj<</D[571 0 R/XYZ 0 574 0]>>endobj
+520 0 obj<</D[557 0 R/XYZ 0 482 0]>>endobj
+521 0 obj<</D[557 0 R/XYZ 0 307 0]>>endobj
+522 0 obj<</D[557 0 R/XYZ 0 255 0]>>endobj
+523 0 obj<</D[557 0 R/XYZ 0 430 0]>>endobj
+524 0 obj<</D[545 0 R/XYZ 0 734 0]>>endobj
+525 0 obj<</D[565 0 R/XYZ 0 474 0]>>endobj
+526 0 obj<</D[567 0 R/XYZ 0 691 0]>>endobj
+527 0 obj<</D[557 0 R/XYZ 0 553 0]>>endobj
+528 0 obj<</D[557 0 R/XYZ 0 388 0]>>endobj
+529 0 obj<</D[569 0 R/XYZ 0 734 0]>>endobj
+530 0 obj<</D[565 0 R/XYZ 0 526 0]>>endobj
+531 0 obj<</D[545 0 R/XYZ 0 605 0]>>endobj
+532 0 obj<</D[549 0 R/XYZ 0 707 0]>>endobj
+533 0 obj<</D[549 0 R/XYZ 0 655 0]>>endobj
+534 0 obj<</D[573 0 R/XYZ 0 422 0]>>endobj
+535 0 obj<</D[553 0 R/XYZ 0 242 0]>>endobj
+536 0 obj<</Type/Pages/Count 21/Kids[537 0 R
 539 0 R
 541 0 R
 543 0 R
 539 0 R
 541 0 R
 543 0 R
+545 0 R
+547 0 R
+549 0 R
+551 0 R
+553 0 R
+555 0 R
+557 0 R
+559 0 R
+561 0 R
+563 0 R
+565 0 R
+567 0 R
+569 0 R
+571 0 R
+573 0 R
+575 0 R
+577 0 R
 ]>>endobj
 ]>>endobj
-491 0 obj<</Type/Page/Parent 490 0 R/Contents 492 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 22 0 R>>endobj
-492 0 obj<</Filter/FlateDecode/Length 916       >>stream
-x\ 1}UM\8fâ8\10½ó+ê0Ò2\12\ 4ò\ 5¤o³³ÃªWZiz\97=\8cÔ\17'qÀ\83\13§m\a\9aùõûì\10\1aèÙU\84\15ÛU¯^½ª
-/£y\90Åô¶è-Íñ¤YJË,"Í©\1a\85þ(¤eDñ\82\8a\1a>s\18¹%tË_¿»\13J\17\8b`I5ÅQ\90\9c7\92þ\1e­VAz¹\vÃ4È®.¯÷5\85i\12ÄW·Q\96\ 4\11%Y\86\15¸q\18¬Î;\aìb&«\ 5Ö\9a¢\10\8d»ºÚÖ\94®nï\92%àb\84r\8eñ2        \16ç\9dóL\92ðê6Y®\82ðêÖ\85\8c\939hÀÓ\eúÍ\99ÍY\13/\8cÓÑ\19Ãʱ\b\8dðózþº\19ÍÖ\19EsÚT\90v\11'´)½\9e8)Æ_µ8¨×\13­5\7féxcå\89>\99=/é©ãÆ
\98\8f\9bï÷5@¼Ù:¡U\ f9E)b\80\8e?«ö¤Åvgo]\ 6\8acz\8eÒ\10LæáÄ­\11å§[K_`\80\8fi õ\e?p©Z®ïh\f\98\8eF\18\9eyDK\94\e<><\96\ f\97Àlk99@\8bÈÇ\9bͳÙ<¥yò\10¥\ fxÙ1\99Ñ\97×\96>x\1a4\8d3\94\a\0\9b\9d0´þôD[qà\86^:Qì\89\b\1ed\15Uob1/\16¤ëÅ"\96«î.ÿwYÝ&=¤2\ eèÑRÁ\9a_,b\95T*nÜ»æ­d\ 5'»ã·\8e\ 3îl½xÓ \8c\91,RøÇpM\7f²¦còÖk\b÷¦Ü88§\1f-лð\1dÄ\87\b\8c\8e<§V»\169
-»#V\1eXS ?*!-×¢Ù\82rËr!\85\15ЪRÚ\99[^Xw×¢½Xq\9a\\99{@¶åT¨Æ¢ã&çè\ 3ó\9a5lëq\95Ú\ 3\rµ\92Ò\1d²¢à\ 6gN!Íkuð\87%NrÖ4¨Ï\84ZÕN»\16Üa¢ \9a&\957êU¨ÎÐ#Bê\86[úÞ5û!ï!ò\90÷\8e¹Ä\ f\\9f¨\92üUäÒ\93­Ä¶ÓÌÍ\84\87F¥(ÇEg¬ªÅ\ fH\82Î0\9d°$\9aR\1cD     é©á¼ì\99Xf,7ÁÐÙwIû\90m+EÑ\ap2æ OÆ"\8d)\93ªádN\80¨{¸º\93VL;We¤sTzo\86t~RÆ\9c\19ð\ 3ñKþ\7f ÿ\1cÔáÿ<¶õóÇwÞ\92Ã\89\1a\94\12­Ç,\16ôC©\8a®FÑ\bï¨\9fcç>\19ü ¤«D@~t
-|\b\ßjn`\8b\91Ù\81¼e@ò8\1cw=ºª\9cÌ\ 6\92Þé\11\a!\1eú¦:7\11è\1eÔÒ¡H\80\18;8\11üÝé\85\15ûÏÑÛYÛ>ÌfÇã1p=\89~\ e\94ÞÎð\95\98ùÐ\97?\99a>0\8e_{\92\86ÿÏð\8dé3Ú\98\15}`\9a\ e½dÜ\0\9cÓz\8fM¢¢\13r;B>×6n\14\80Ñ'sùäù\92\8c\9eFÿ\ 2%`\ fÀendstream
+537 0 obj<</Type/Page/Parent 536 0 R/Contents 538 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 20 0 R>>endobj
+538 0 obj<</Filter/FlateDecode/Length 862       >>stream
+x\ 1}TM\8fÛ6\10½ûWÌ!@\1dÀ¦õeÉÚ[\9af\8b-P Ûº\87\0{¡$Êf,\89Z\92²×ýõ}#Ù^'\ 5
\ 4É\99yóæÍP¯³@ä1½/vG\ 1~ë|MY\1e\91UTÏÂñ*¤,¢8¥²EL\0§Ûòç¯|Ci\90\8b\88Z\8ab±¹\1c\1aúk\96¦"¾Ù6©\bïlwÇ\96Âp-²;c\14³ó:el ¦\89H/'\86\8d³L¬oÖ8O¿·Þ\9d[J¢50&$\8eåL)%Y\8c\15Èa\84\89­Q\9a\ 3ùfÍsð¿³Þ\9d[\8a£\14ž[ßE\19w¬&2'Р¢d\93a\1fá?ªúóv¶zÌ)dµ¶5$N×\e\11f)m«QÛ\80¶åü\ f«\8fæíL\8f\ eªóÍ\99\83ªèyPÎkÓ¹\8fÛoÀÙ\10W4Â,\93LäI\ 4\98ùgÓ\9f­Þí=½Dë\90¢ \b\97X\12*ÎtEþE\1dUczeoH\17\14I4â|xª\1e¨\96¯ÂíÚfq¤P¤¡\88D\82j\80
+ÂU\1cP\98=\ 4ÁC\1c\93Q\8e¾¼õô\81©\ 5´\8c6\a5ßîµ£ÇOÏ´ÓG¸¼\ eº<\90ìÜ   ¹É\eªßk\94c\8d¨xª\91da\ 6\7f¥,èÉS)»\9f<¢+ª\90\8f÷Võ\8d,\15ù½\9a4\914V2§¿\9d²ô»ì\ 6Ù\Õ\9a,âÂ0äÁ\ 5ë&à)é¤
+ê-\8b\7fÒ~O²:Ê®\84òµn¼²ºÛ\81C/\vÝh¯QNm,»{Uz¶õh\9c\vjM¥ë3_\8d\80r§¨4\9dG/a\93\9dÜ\8d\1c\0²¸ðɹ\97Õ\9cý¬i\1aö\90\9c[\8c\15\9aãxYá¦\90]\a\ 5\17Ô\9b~9ô \ eQ\fT°d\8aμi38zBFÛ)Oß\86î ®JÒ^r¥GeÏT7êM\17ÍȮֻÁJ\1e/\ 6û\81\94ì¨\80×à¼iõ?\10\ 4­s\83ö¤»J\1fu\ 5\95©Sª\9a\88xé¼r?dìûF\97\13>ËV\80-9\8fTKÙ\98N\91;#¨\9d\0Ú¡ñz9p\vÁÿdìÁýOÛ
+éÀ\b¼o\ 5ÿ\86\82\v\90EüËÜ·/\1fÿ\13Ý(\ 4Q\87Öav¤Ç\82þW¦\1cZ4\89°G\1f\98\1d?>u4\rK/h\9cæ\12\ f\8c\aÏ*\a_Lñ\1eä½\ 4Ò\88£`\9bÐMÍ*;V4\16\81\88\ 5}5\ 3\ f1Æ      íºÌ,\1eË¥õ\r0\9c¿Å \9c¡o¤\80¾÷¾\7fX­N§\93àYÃ\9c
+cw+¼Ò\15Ô\9e²:5>\aú\8cA\92¥'Çà 
+º¦3Ò\9fP\13w\8fç\8cÍc\8aÛç`ÔéËvö<û\17Y³×¢endstream
 endobj
 endobj
-493 0 obj<</Type/Page/Parent 490 0 R/Contents 494 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 68 0 R>>endobj
-494 0 obj<</Filter/FlateDecode/Length 6822      >>stream
-x\ 1Í\9d]s[Éq\86ï÷W tc§*¢ðý\91\9bÔÆÎÚëd]þPÕ&\97\10   \89°H\80\ 6@Éú÷yºg¦û=Ä¡Ì¥Vvì²
-/^Ì\9c\99î\9eî\9e\9e9ô_¿\19^¬&\83üçðn0俳Õl°X\8d\a\87Íàí7#ÿj4X\8c\a\93ùàò\966C~dÿ\8cì\9f?ýƾ\19̧+þ½\1d,/ÆõóÍàÏß$º\1dL\97\17\ 4Þ\ eFÃÕÅHÈÉܺ\9cÌ.\96t9\e_Ì*°>\ 5Þ2Lkç?4N CYÙX\82\13h\ f\Ðw\92\8aaÇ>Öhª\18v>\8dÑÙC\15Ã.f6Ïl+øv0\1eM:\93Qlìòb*m\8b\18Æã\8by\88ÁA\8a¡r\8b9?\99\a'Ð&319\ 4©¸L\15   
-»4\89Ö~G\b»ÓV0mg+\13\15\f»\9cÛd\92\15ÌTÇÃ\8b\89°\8aa'Ø\96²\82a±µ\85°EL\98Ð4Ää ÅT¹"\97à\ 4Þ\ eV+SLp\ 2\99ÊdaB       R1,öÀT\92\15lbp\9d&+\98©\f§¦¹`\15\9b\90F&Âd\ 5Ã2~Ä\10¬\8b\9a£±ºh
-\b14ÎWIr\ 2ë¢IÎ\17MkG×K\9c\83=Àú\14h"\9aòu\92\8a\8dµuªlb\13 Y¨°\82M\80ón[Á&¢    Bȶ\8aag\13\16c²EDË\89»*w$3\a)¢Ê¹i$'°ZJrn)\ 5ÚDÍR\92Tl\135K\11V°Mt\89      
-+\18\80\15ÌDG#\13CLF±        i\81\95     +\18vj\1a\15V0ìÂ\16ª°\82a\97C,TXÁ·\83ÉpÜ\91F\11ÿܼF³P\a)þÊ-LC³à\ 4"\88ÑÐ&\13¤bØ¢\80d\ 5\9b\88'6\99d\ 53\99á¬Ó³bX\82\ 2ê\89\8aa§³NÏ\8aa\17®øl+\18\96\95¤3R\8c\10§c\13q´-B\9cY\93&D\a)ÄÊ¡(Æ\e\9c@\ 41\\9a½\ 4©Ø\84\ 1%+\18vj±SXÁ°(\vkʶ\82\99*\16¡m\15Ã\8e¦\9dQ)\86eÁ¢¼èY±±3³5a\13ÃâätT\8a\111«G{Vlì¢3*Å°Dz}®bØŸÛV0,æ\87jcÌ\8aI\98\90\15« YK\8afSkÒ\14ï \15_¹â>\83\13\88\7f_\98C\f\8em\19\ f°>\ 5\9aÁÌl"ÑP±\19\8c%LÂ
-\86\9d\91b*+Ø\ffÔe\ 5Ã\167\97Ï\15\8cZÇÝQ)\86\9døj\8f\8aaqU(.YÁ¨f:²Õ\13lYu\93!VÔ\84ï \85ß8\97Dr   [p\r®\ 4×ÚÎV ¶\10¤bÄ0²\94GXÁ°\f¶ÓV0,\ 6Ða\ 5Ãb\ 2L4\9f+\18!\r}e\ 4«ØX_\19Â&\86\1dÏmU\ 5\84ÙpâÎß6\ 6å³  0Ñ-\9b\0s\10þ3£\îÓ\95¹ü*÷\ 2\8d[Z"\95\9c@æH¼\e
-©Ø¤g\1e+\9b*6ùX^)¬`\93À\ 4#JV1ìt\88Ö\84\15\85\9bdËT\17\v\1eצꠧZ¹2·à\ 4ÚTÍà¦A*\86\9dÏQ¶°\82mª¶Ó\10V0Ãe51\99è¹\f\17\8a\98:ÈáVΣwr\ 2}ÿ\86\1d^ºA\86Cf\8bÖ\82T\fK\96Â`\93\15l\13u1$+\98©°z&ÒV1ìØæ\94=\97\89ÎlGÒôâ 'Ú8\7ffr  \99¨e`Óà\ 42X\ 2\8c\92\8aa  l\f'\9a*6Ö\1cº²\89\8b\18:=#\86\86aWæ\18¤­`Ó·¯¨x®bØy>Ç\ 4¡\18Öó\9bìY1ìÊ\12\ba\ 5ãyQ;K*\9e«\18\96ý¤ÎW±ymÛÅI[\v\99SRÀH8\vHÕUÎ÷@É ¬^;9÷Ú­O\v\83\88Ð{±N\15#`\96\f\13MV°)Ç\a\9b¬`Ø¥ùti+\18\11bÁmf.~Á°l\8a\10Rô\,\18³N'ê ÅÐ87Ùä\126\v\ e®XpmW-6HÅL¥Xp²\82\8duK\1261¬o½¦É
-61¸5\ 4«¸\88\ 1!%\8bX\1a\86-6\9a¬`ØÕȬ0YÁf£\vs Á*6\eµ\18&¬`³QË\86\84\15\fË
-EíÙ³`K -\1c\18\16\85·ù\99j-àNÈ\97ÌAÛ¿å³1\89ª^\93r[\99,g´­Þ®\80°\95ÆyØIN Z#u\9d\93ÞZ/ÖP±±f¼Ê&\86%§c¬ÙV0ìÜ6\10Â
-\86e3¾PV°ÙòӶL\95t3¼ÃÄANµr\1e²\92\13X#\98p\16Á
-$¡¶\82Ir\ 2\19*\95@D\14\ fT\fKÖÔúq\ 1
-6!\98\19H[Á°dpúØ2Í\99yþ¦Q\a9Íʹ×\9b\ 4'°:ÁäÜ      \16È\ 3Ñ6Ã\89\86\8aaIsÐg²\82m*\96~&[\ 6ËO"      \9a8ÈÁV\8e\8d\14\ 2
-N \9d\8eü\91A*\86õ"f6U\fëAPXÁ\98\10\ eG\1f«\18Ö3Él«\18\96òh§­`X\f¾Ã
-\86%D"â\98\91bs8¶ËLV±¹\14Ë3\85\15\\1c\8eö\\140±ºo³\16\a©\80ʹ#\9e\ 4'\10Ã÷E\1a\9c@\ 4̶\80Á\ 6©\18\96s\ 1Ä\90¬`Ä@º­m\15òH\98J´U\f\8b\9fÕ\9e\15Ãú6[Ú
-\86¥\14\87\b³gÁ\88\10\7f¦£RlʱÌ1Û*\86%Ëb±FÏ\8aaY5:£¢\1c\8fõM9\ eR9\95c/»¢pa~Õ8\81(ÇJ\94É    Dü^hOR1,Þ
-1D·\8a\11\12Õ\e\96\8aa½$ ¬`Xl²ÓV°\89ߪ\9bÒV0,3ÐÉ*6\11NMí1ª"BÒ¶tú\ eR\84\95+\ 6\1d\9c@DhuªIp\ 2\11\121\1aù\ 6©\18ÖK¯Â
-\86\9dú`³­`&*È\86«¸\b [\89¶&´\86\11\ 3%.T\17¬\8baÌÂ\8c P@\88¡q¸¡      "¶\1fº%%,S\9d       iSmØ&céc6U\fË\12Ò\8e\153\19ÎEZO>UÁ°$\90ÚV±±VÇÊç*F\10¤n#a\15ÃzA)Û*\86eC¬=+&ý"iÓ1\17\11\13E#\94YÕqêbô³\87\ 2I!l'\9b\9cÀjiɹ¥µvŲ\92T\8c\80)L2Øx¤bXöWce\ 5#B\92\13e\15ÃÒ3\13\8d\9e\15Ã\12\ 4\11\82a9½éô,¸X©ölVÛ0,þ})=+\86¥\f­bT\f\8bëÒQ)¶¼ÚÊá9fÅ°Tà;=Û®rLéÄC¤\e\9b\ 3_;    I\9alÇU~èk'aSl´+\8a­}Ú\91\ 6+'HŨÎ3Ge-\93lã±Ê\ak#Û
-¦­WÒ\84\15lj_\98r¢­bX\U\87\15\fK Ó1+\86e\14Mf¾\9e\ 5Ã\92½iÛ²r8»ó=\88·t\90\ 2®\1cë\11¥\ 6'\90©\ e­X\9b¤bc}ÑESÅ°Älì.YÁ°Ø?"NV0l\99\82\89Ψ\ 4ò_Á³­`Ää\87|É*6Ö\8aZÊ&\86eu`áѳbXJÂ\9d\82a½2.m\ 5Û\9aµ¬+Ù¢<\ e|=Àºò\1c¤ò*GLAÆÁ D\10øû©\90\8aa}{\9cM\15ÃR d@ѱbX\/\82HV0,v\89%&+\18\16׬CV\8c\98Èh\94U\fKy\81U\1a=+6\11[\92(¬`DLØÖ\19)\86\1d[Tɶ\8aa½æ,¬`X\8a/:fÅæ\16}\19Ä\98\8bjÉß=ipÕ:HÕV®,Äà\ 4"DßBÙá@É(\14\9bzlÕ\v\14à.(Û
-\86õ\ 3si+\18\11\17!F[Å°^Iʶ\8a\8bò0\8bl\8b2\eF\888dÜP°EL|é\81ßÅä ÅT9ÊÓ(.8\81Ä\ e\8fÏÁ      d¢ä08\91 \15ÃrúÃp\92\15\f\8bEcKÉ
-6!uYÅ°ì3QN´Ul¬m\83\94M\f[²Ál+\18\16\13Áñ%+\18\96èØa\ 5\9bø=ZF[Å°Åý&+Ø,ÜWV°\8aa\99\11«#YÁ\96\16ØU©d\8bÚ=ê°9swëÀÕ\9e\90|Ï*»ãà\ 4z5\ eÃJζ6\ 5\80ô\83C\b\r\9aIØ^/IŰܶjýØp\14\9bÁxâ\1a\1dûD¬\8a\14á·\80°ßÆ-Ìá%'\90NGvm'IÅ°Tµ©b\e\90ÕB¤­`Xw Â
-\86%¡\i[ÁX\12\93\\b«\18\96\9d\83\b\82r_\842»Ý°,\19¼­ë\ 2\96\87$'\90\ 1¹\\93Tl¬ùAe\13Ã"&íX1,W:\98L\fI1,åÆN[ÁLÕ¯\1af[Å°äìÚ³bX\14\8d\88ã¹\8aa©8ës\15³\1cÝKf[Å°\94\1fP@ô\\140¯§¿.q\ai\89\95\17\9c@ÏÂ\19mp$\\r\9aøÝ\ e\83T\f\8b\90°Òd\ 5ÃR"b¢É
-\86¥°ÉT\92\15\fË(\96Ê
-F\84î\95²­bX¯e\b+\18\96C\0T\17ÏU\f\8b\85wXp\e\a,\9bý&\e\13±bS\8e%\89Ù³bó³\96+\b+\18_In¤Ò(\8a%'\8d\10\8aêÞØõ\¹¢Éà\ 4\9az\\ 1A*\86-.&YÁ°Å¥$+\18¶¸\94d\ 5\9b\ 2\95\ 3V\f\89\10£­\9dÂØ~Â\9c©\9d»\94Ï&ÞDî÷ÛÏ\8c*ò!ÌG\95ªÜPv÷¼¹ÀZ;HÎk\a\8d3cF¹Þ\8b5TÌ\1cY\89\98\82aIFPv²\82a       \ eÌ1YÁH\80ä]{VlòqS\88\8aaÙ[`(É
-ÆÈ8iÐ\9e\15Ã\12å\90o´Ulæë\ 6\9a¬`Xî$±\98\93\15\fK¾§\92T\fë%Ti+ØR\8cî|\15ÃR\9eTIºâ\89ìQ\96óÏ¡öÆ\98\ 3N&PÍ\11\82áðüÎlÚ\8e.\82\12hú´zOr        áüëä\12¢-\1câ(Û     \84Ã\1dÊ \ 5"1,³\ eÌ­=!\1ceäIö)\10\8e
-ÐL¸\84p¬8m\97ÐtÐi'Ð\\93¹µ\98\9f+\80\1c\13.la\89xñKÎ\90-ÇÁ\88\7f\ eÕT\86º\17WÅíWÆ$B5\96j\ 6\93¨\88\91\8bô­\91\89±B8ü9\17Ó\83K\b\87¡q=¿q>@J£qrë\9fc\80\95áçvó\93_\19\93\bïd\8b:\98\0ë®OÖF\ 2áXÏvÏ´q  áð\1av\91´q mÒ\96u\ 6ç\83\12\ eÏ?Çà+ãþ-\98\9e\16\fêä®Ré­\94E\83\12È\0Q>GõöC{\94@8\96¦r      áØxr= µóÁsº\1c«Ö?Çà+ãÃ\r&Q\1d|0>øÚ¦Öt­k\1f \1f.4\8eí\18Û¢à\12ÚÄV4I.¡MÌËfÑ.!\1ce\186q\8dû\8f×ò¾\ f\91l8à\1d¡WßÙ^bðú-=±ëÀ:\17ÓÁë+\7f)\88¯/\7fùzýæf3Ø¿\1düj¿;mv§ã¿¼þ\8bôC,¬ý\10ÇFÖÏËÚÑ˱uôËÑ\855À¬g¼|\ 4\1eüf³Û\1cÖ7ö-å\8bùdZ¿ÿ~÷v\7f¸]\9f¶û\9dq$3óѼp\17ÿ?þ3²q½ú\8e\90V&êYÑK\12\88q\99h\99*\89L\9bê\8f×ë\93µ!\1aÏ\16u.\83­K\90}îp¹¨S?]×/\99ó´5Þm>z[$\1cm?l\ eÇ*\1fê\94¼\97Q;Ø¿µ\9fRR\\8dx\aÌÅü\87ÃöÃþo\9fì{s3íYÿî_\¬\96ã\7f\88h]d/íþÓ\fÃ\bI\8dÝ(:\92ò\91R\vÌI½¨SxaC&\11\9bÍëÜ|\ e¬çe\9bþ\8f×ç­×Ö\8aS\84\90Ñn}»±ï:ʸ¼^ïÞù×8\8fÕ°
-ePÔ\86\8eæ¼:Wä¹¾¹ñç2èÅÄ^¤Ã\96¿\86Y\16\89y9¸#²ÉC\91ýv_ìCEvµß¸uá=þ®%\f®¶oßn\ e.\12\1cà²Îiðö°¿õ/µãÓµ\vÉ\92ô\90ÈþæÊ~ÇwËá²Jéw÷»÷oî\8f§ÍÁ\85Eª½\1cþìª"Â\râTĪ¦\ fEôÔõwf+/î\ e¬\1d7<\16Ïd¹*Ó;3¼/ÖÁÇýá½÷jÕ¨éWswcSÔK?\ 2êHlöPb_<¡÷»j\96\98TXÊÇæ\aÕ¤züàzç\ 6E\9d$Víúê_ý;Îøc¹¯wÅðð\96ñ»§>b·?\95e\8c¼«Ñ~ñ*®Ò\9d\18ç\ fEû«2;ö5ÓE[k\8f8éÁíúý¹¯ºÝ\1eO|\7f,VÈJ\8cÉ¿®ñ\83e?\89¥Øë\v\98þÙ\9a=îï\8b@±Áá¸\9aú\80PS\9c\87V-P\1d/·¤\0Û·ÛK\9f\1dµÆù¸r?]\8a\137J;ÿè.ãÅCÉýà\ 3!\91Îѽ9ì?\1e\8bó¢\1a\91ΫwÒ}ÎëØ¢\ 1\89ü¬\85\âðî]q d\\11\89×%b?!ºúÈIºZ\87}\81éx½¿/\9e\93\8bB\99\ 3|oÒà-Û\bà÷Çâr)¥Äw\8fÙËçâ\15\87\0³ªÔÏé¨j\83»:\8c^\9cêò¡6¾/ÒÐØ\88\80\ fÅ^IÕ'Í\82ú\16¸MR\83òÍör³+\13%\0§¡í=.u\12\9a·\9b\94$Dó\14pO\86µ~³¿/y\97:¡3'ÿq}8¬w§Om=-Æ-\8aýió\8eµvð\ÔYîdr\97ð¹A¿\8aöÌÐWg¢}h\ 3\1fÃT¨\86´9ßl\8bs T\18ß\9döÖ\14yåú¿ÞÜÜÙ\97\94«2\8bù´¿w\7f:niM¯ß¼*½Q7nÏ<³Î«½\vÆ\16eÍÂ>g\_ʹ\ 4_}\17[\f\7f7\f3%\97óMFÉ'e\93ñý\ e_ys\93»       w2_-iûÒùÑ~fº\92Í\ 5\172d\1d²É{h,?^o/¯­\91¹\91Ø!TÇèkÔ^6m»\8euY \96ÀE¦w¼¿»Û\1fN\e\8f¦$Ø\19\14\8f+\ 6ð\88ç)kçb2ú\9aÛ      \17ÍËñp\95~\89 ô4yìïØl\9epë&)âUº\98ã'ÒÔ[\17\94n\90\ 6\9f\95T\99/\89\a\83ùÊÖTf=¢¶¤á\91\bÿpâ}\89ÅÙzÝ\96\ 5á\ eAcÛ#z\1dì\89ÿþc\rÿ\99Ý\eEU5"\93Ë\85J:Å\83¯,\96¶TØT.Ô\1eÎ\92ÿ3\11ü\85}\89\8d\e\9f\95±½Ê¥®\ 1\91\0="\19\97¾\84ø'\87Ãõî\93ç\176\ 4\8aMáº\8fw\9bËm©\87tBàÙø¯×\1fJ\90å\98kÔBU\8fã?÷Þää® Þ\99Y>%\17èsgÅ\1cí<^ó\ 3\8e/\1e\9aãS7]}Y\99o»Ü쨳GÖ³¾º:l\8e\92\9eD\82ñÓ«\1eÏ\8fá}"y仺p»æy¶\1d8SïÏc\9e%ºgàîÛ+±   °D×äL±s2o1¢'a»^ßÝmvüص̽RÎxË
-\1f|{ã5¼Îö¿O§ë+×\1c×\11E£=ÑÈ\93ȲºøiÛr\ fÌ\9c~QtO\85\12\92\8f\87ýî]ñ:ÜÍá\8f\1cõº\9d¹ÍQò\86)\17\eÍ|[ÞP|©ä\r\149ßnßÝ[È(eÈùW÷ó\8fXÑßýzQæ\16ÕÈâS"sg\13}¾2k\9an\19C¤Ð\97u×M&\17^åÌ8ßmÚ¾1wõ÷wWë\9a<X\0\8d\14äÛK\13^Q\19ÇF±Ùýn{S7¯\94¤\17íù\7fw\9eÏÿ\81Kè¥UÁ%\93b\97ñP.O
- }Û±Û\92&i\ 1¬¯(véFåË\8dKϱÛ|\9bòà¨þ\1fT\90\15iVñØeñ\8e\12\8c§zô\9eòÍ\8bu1\86RÃe\ 1Ǻ¶Ù\97 DÐ¥tÒ»~e´_éc\15\ 2¥\8f®\10ÎÒ\89×µ\ 2Ê]ØÐàã³Cå\97\9b;_3¸ØUó\99f    \18\92¯\r\11Ên7Å(9ý\9d¶­Ù\1fn6ëº5V³¹akj¶\84ãå\95©ê\8c\8fûZÜÆ\92bÁõÄG\9c\92w#²îñè<|P¤y-)z²\12\8aX9âÍ\14\8d¬åáÂë«6ö¥ßÕ\88|\ 5\8fÄÀW\90}ÛÙã\96åv\7fØ\¹}q*É\8b
-UNO5å¾@\86\9b"ûÎ\96ëãº\14Êô æIi\19\14ó¬\¿xF ©Rfö\9a\93\91\86?\144Æ[\v4äUyÊÑ\13\85\8f\e\12ÿÈFóD¤\1c\16Pü3q۹ݸ\99Þ£Æ3põøP8×áÅ\8bÏé Oí}Jh㸬¡\84\83ÜÉüY\9bÏ¥ÍäåÄ\96QÇý\9d\95\1fû¬ôIA³¿\8a{\1e3þw}½ß¿úíþt»ÞÞ¼úÍ\ fÿc#ãm\814ôõå%EÚ3w¢§\aóÅÏQÎ.B\19wÍé¬\ 4øHNöy}¹áp\982i\86ófsú¸Ùìì{\8erÒ,ûºyñ«õ=YÅýÑ\ 3   ;Ïe3§\87  ï\8b\1f6WÛûÛ\12p(hs¤í¡eÐ\97     ¿øöêÃ\1aO}Uº%\19nFzµy»¾¿9Õb;\v¬U\83û\`5%nYt\ 5wVàë«\a\94\1e9§ì\13Us\7f\99Â\92íEf÷q{ò¢Qç¨à¬4Z«Hî?¹>\9aÉâ¯Û\ 1£\86\8fS=ÞÑ\82dßAÃa½­ÁGw°ÇÍåýa{òeÑÉ#·Çã}]åv½«\7fãºòU<å\96Zw\15³O5&ê\9c?ÕñK ®¦p\81;ã\ÓzÅéÌ£\8a\96\89\8c\96J\9eú¼3Ñ¿(\8fq\83¤\1eÀU\ 37ߢ
-6þ\ 5öYá3¿+\12\1c\93¦tÜ µä\8e\0\9fí\ 5\8fuëÀݸÈLî½2Í}\0ÖKY\9d\8fT[\ 6=\81\94lÀFÆß\ 5È=GÏ\11Í\99\8b\v\:9ë­'¯ÿïo\7f_²UN\9b¦Ï\bÕçÊ©rç\15\86\a\96[ö'a¹VÊÞ¬½FËî5+?=Ù\1d[íâ\ e¹ÿØ.K\fÚ\81¬\1e\ 3<i\7fw&ÀËëÍåûÍáÍ~}ðáp*²\8aÔön}buìÜhì
-Õ´\9d\19\9e=ëj¿û\85k\90¬\80\97ñ«\ 1|ä(Æ\r\88\7fÜ\94c1®aıd+­ùÃÉ«§íäù\êñÍhhO{9ANºg.\9b\9f\10~\9fÃî=\94a\boöWîÄ:·\9a¾hZ6B=-{\8a\ 2ÜJQ\0o\96~±«¨2z\90\ ep×Ï\15ÕBå\99\82ûTÔ»AÙÞ®ß\95Í\90ݾi\ 3\1e¼ÙÔê\14g Yn8lînÖ\84j{6"\1e\ e\9b\81\9d\1fV\9cYîió·â3äÈÌ*¿m]éÓ{ÖUo\98ýÜbð\89\95¥@Á>..ôYSMK^Nìo\93\10ãÂ\18\a×õ&\85.ÜóÚî\99ôûJ5\87­\8b\rÍ¥\ fî\9dgnHø+\v_l?±Ø\9eó¡\1a\9fßOíF¦²\8f\8c5ÚW¾y,\9c\1cîwf?Ýbd©Oêñþ\99\ 1q×à\ 3GÕÖÖL5¶P¥H¨\81ìÇínü_¯~ÿÚ×!{Ï\96î>G\ 4\9f\96&w7ÃbÈ\16ÊÎ/Dóì Ý»uyL¨¶\rq\8f Iao¢Iá¹\1e+éO-0³³váê­Æ¾\83î?ÿõ¾Ø25DþHC1Ñâó8æ®ÛüÏÈíQjTo\95qa÷A<.\eÂ\90i\9f¹\9d-ÂÞb~_&ô\98L{"__\ 5ÒÎo]ôz«hé¡M\8d²oïsº¾w\91Ûë,ívè`ýa_Å«®w»»Ú~Ø^Ý×[»lââÌà±\8b8\9d]\88ë\87¿D0lÙlG\vUòå\ 5e5æ²ïü¬à\1f\13ßs×ù\vn}ì\8ewT#v'OÁy÷j¶ª\9e\19d16NB\96_\1e`;r\10PD"\a\17ü}Ñ<µ(ñWN-~Ø\1e/7ÜvØmØ!\9b9Ø_}xäHD\9eòÏù8\1aÛ\bå¦\83¿j\1fz'ýóÀ\89+k{\83>/v{_.?tR\84ÞÛ_\8f\99Èñ¦ÆW6£­¾9èÉüÝÂÛ\ 5\ 2jk-·\1c\í?î\8a\ 5\8c×}wñ®ëþDÏÀzV8\a\9d&\e\8e»}d.\a\ fGdËyôyÚÖz¯Þøëé±\rÞEÊkq³\a\eÈ¢\8c\97\ 3¢\81³\13\923ÿÆö\9epè£í\DgÙ\1f·WT\10yiÀ¦Â-þÉ´zéÁÕæfý©¸y-hoKHÖ»Kwä\85Ö\9c\ 3ëÜð\1c6\7f¥\1eP^@Àf2ý¿ÜßÚ\8a-\99!\99o\94&{\ 4Ò\97Êõ\9dÙäU\a\17\1d\17\99sG\95å/¶\ fT6u\v\83É\7fn\ 2õ\99å]ÕNn"Z\7fÚ¹O_¡öÅõét÷o¯^\15§\7fqW^=¸Ø\1fÞ½r'jÿ7%q{¿¿\10W{¸»¸{õÂ\17\15\ fÛí¥ÏÌäiT\9d¯½1+©$ª{èj~]n¾aD±Ì¹2ç\8b\ eÇÓ¶\1e~óå¼]æ¥z»;ñ?ûµ^ðè3¹77ûË÷v\92S\v\8c\84Ôvªô´\19=ûW£\89\8dï%\7fîDuÿ¤£\99'U*\8f÷on·\9e\93pH²\88\ 3ª¾·Y(W¸ªÉ@¦Ã/HÝ\9e+\8b&
-v\93\9aòQÜ{h\16}\11èIÒ¸Æ\19º#ÓM\O\90ùþ\ fnc\9cTG(ª·^J\84ám¾\7f°\84\8apl\9f\ f¢ü\93¿0Æ˳åý'óü8÷¹ÿy0^\87©\91\9d{êÝéæÓàÛãûÍÕà\8fæ·ãN\0\v6P/\17Ü¡£ÕÖfþ\9f¯¿ùã7ÿ\a5ÁÞQendstream
+539 0 obj<</Type/Page/Parent 536 0 R/Contents 540 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R>>/XObject<<>>>>/Annots 84 0 R>>endobj
+540 0 obj<</Filter/FlateDecode/Length 10125     >>stream
+x\ 1Õ\9d_s\G\92Ýßõ)Ú|\99Ù\b\13Ä\9fF\ 3ð\8bC\9e]ÍÈ\1e­µ#:ä\8dØ\97&Ð$z\ 5 1Ý\808úöþefUæ¹¼·)\90¢(y\1d»æÁéª[\95\99\95\95\99U÷êï_\1c\1e\\9cÌêÿlßÌ\ eù\7f§\17§³³\8bãÙv5{ýÅ\91ÿéhvv<;YÌ.oisÈ\8fòÿüíÏö\97Ùbqrp>»\9d-\ eÎÚ¿ofß}Qèvvr> \ 4ÞÎÎç\a\17Òìda=\9eÎ\ f\8eéq~qpÒ\80u)ðvvvÈOâ\87Æ   \84;\1fr\ 5og\17Çö<\7f\80µ\13x;;:¼`&E*\86=9\e²\82aç>ãìX1ìÙé`H\8a\8d½8XÈsC\bó9\7fìBpPBhÜâÌÚ%'\90N\ f\8fLêI*6vqp4`\vÃ\1eÏ\ fæÊ
+\86=92%UÏ\82aOOLkÅ
+\86=\7fgT\82a/\ e\a\13R|;;><\1dô\1cb:9e0]L\ eJL\8d\v¹$'\10û;39$'\90á\1c\9dÚp\92T\fËß\a¬`X¦\8d-U[Á°\8c\ 1ó-V0ìùá`P\8a\11Ãñ©\99\r1ðÇy\8aÁA\89¡q±F\92\13Ø\97Lq¾dZ»X¢É  d¨GÇf)I*6vaB\10¶0¬OAXÁ°,%Ä[m\ 5Ã\9e\9f\98\88\8a\15l\96²\18´\r\11¡MóSáF\1c\94\88\1a\17¦\91\9cÀn)É\85¥´vÍ2\92Tl\13]\1c\9cÎ\16Å
\89º\1d\15+\18\16ï\8a\18\8a\15\f{6·E^¬`Øós\13\82MHÃ\9e\15\9b\95\1d\9bê²­bØ\93Ã!+\18v~>\98o\88\1f\9d\94SwPâoÜÂ~²HN \8eÛg\9a\9c@&\8a\9d!à$\15Ãb9\b©XÁ&ÂcófÅ
+\86½82ñ\17+ØDhΧXÅ&Â\8b!+Ø\84´0o\96=+\86Å/²®\92u\11\9e^\98Y7\v\ e\90"ìÜÂ<wq\ 2Ù¡Ïq\1cÂ\15ĺMeÅ        Dôg\83>\ 5\93ãACÅ°\vB\féV1ì¹­Èz¨b\13ý!\ 2\12Vp\88^'j¢ïØD\7f8\18\95bX6¬cé9\84Ë\82Î\8däÔA   ·q\8bck\97\9cÀ\16X\14ç\81E@¦\82\97DºÙP1,^\f1\14+\18vn\9b¼°\82aÏ|*ÕV0,V4èY0b8r\ 1g[ÅÆ\ eǬØDxÈ\9aªQ)\86=µõ(¬`Ø\85Å\ fÂ
+\86=³HDXÁ\84\92\87óAÏ\8aa\8f\brF\8aa\8fÍ\1d
+k±æé\99\19w_S\ e\8d;µÀ/~h\9cÀ¶q\16ç¡gïóÜÜYq\ 2»¹äóÂ\Úó\8e°Þ>2{ b3\97\v\9bd6U\1cæ¢\ f5óé\18\16\17\80\bª­`ØXaÅ
+6Ö\16\88´\15l\ 61·Õ\9am\15ò=c.ÉÆ\8ac{µ\rÙ#£S\a.^\v\9c\ 2ÂY "\A\\96¹Èâ\ 4"^ÛS\8b\13ÈDÂ\86ò\81\8aa\8f\14+\18öäb0 Å°\f\17!T[Á°\vW\±\82aÏNÌU\16+\18ö|ØÖ\r\84mÖ¶\ 3K<Nýß&¾BHïÈ´\9dTH\9d\19\94\9fs`Í<*:m\1c\8fF\ 5É       d$\87¾S$©\18\96°\ 1\85\15+\18\96í\0\13*V0,\11)3)V0ì\85K¾XÁ\18\98\a3Õ6¦ê+¥¯m\a5ÕÆÅÜ\92\13È#É\a±°$\15ÃÎ}o+V0¬\a\19ÒV°MÆ×R¶\8dá\1eYúÙ\87ë \86Û8\ f\89N\93\13è)1âK.¤×ÚÅN\9b\9c@\ 6säK7IÅ°áé\8b\15\f;· ²\1eª\18\96ð\ 3\9b®¶\82aý$Û\84`\89}
\80\b!¸6ëΠ      L!t®    !Ú]øîÀ®\17}
+d0±Ì\93T\f\8bÙÙ4{SÅ°äk6Íd\ 5\eë\91I²1ÍCËtû4\1dÔ4\e\17~19\81\1eʱÁ&\87\eï\90\aògVY\92\8a\ 5ûoí\91\8aaC»ÕV°±¾\ 6\85-\f{êB*V0,[\1cΨXÁ¬_¬\0¿\91¬bØc·²b\ 5Ãb\83\83\82aO\87ÏU\fK:5h+\18\96\\17µçs]usR\80\ 1Ru\9dÃì\8eI4í\87Æ   l\11\83p¶¥õv\9e]\14'\10\ 1zpS¤bX
+.\87òHŦ\1a+{I[Á°¾u
++ØX\vO\8b\r!øO\9aýÎ\1d\94\10\1aç\ 6[\9cÀf¿Å¹ý\ 6ä\81È\9b©d§\8aaÝ~\85\15\fëö*¬`XϹ\84\15\fëɳ°\82\8fÙ\9d\84\15\8c¥P!;\15V1,\95\r\18\96½Wç«\18\16\9fy¤=\v\86%¤B±)+Å\16-\9b\97)V±Åö          +\18\962\84Î(ÔNz\91[ÔÜA©½q¡çä\ 4¢v«¶U;\81¬\v\v:\8a\13\88ðÉî´¡bXVÆ\80\15\f{¼`\17¯\8e\15Ã\12\1d±þr¸\8aaY¹\b°XÁ°\84 \83ç
+F5¸4e\15ò\ 2\11~ö¬\18\96\1d\ 4á\17+ØXsáÊ\16FqG\96Ñ\14«\18\96|\1d\83É\9e\15\9bÒ­T"¬`XR1}®/SæÑ\83йÿÛ\fÂ\82Ð@èü\88\98¸¨°#\tùP\aeG\8d£d\8eø\92\13Hxïþ59\81p>\85â
+¢1\82\9e¤bXßÞ\84\15\f\8bµb\vÕV°Ù\82%âÅÆ4O,âè^ÒAM³q\1e½Ì\93\13Ø\82\99â0>ÄÚÚ\85WÎv\ 2\11\81\1d¸T;\81\fôÈ*ZE*6\11ØA\85°\82aÉãÑI>4&Éf\>ÁAM²q±\ 1&'°ï\87Åùzlí<ë\99''\90Á\90Z0\91$\15ÛD.ÌV\93\8d¡\12éfp9wPCmÜ¢µâ\ 4º\yb¶C®\1dÚpÎÍ\7f\18\96¸\ 2É\15+\18\96²AïÉ\ 6¤\98åîç\1eÕV1,Ë\9dõ\95=+\86E\fú\Å°8?\96\15\fK~ª3R\8c3 ãÒ¶\8a\8dµ³\9aê9ÄOâ\9dAïÜA\89¿q±¨\92\13Ø\12þjç\9b^@DÈÊƯeCŦ\1c×j±\82M9\96çI[Á°\9e¦\b+ØXKù\95-lÊñÅ\96ÏU\1cÊa±\15\eþÆ1¬\9f\ 3\b\94ã\ 1\15\f\8b·Ä\ 3\14+\18\16\17\89b\93\9cP#I\97\1c \95Ó9J㧳â\ 4¢\1c+v\15'\10!aa'B*\86\9d\9brª©bX_\eÂ
+6ñ\9bõ\v+\98\89\1e\993)V1,[ᡲ\82a\19\95ö¬ØDh¥\95ê9Dè\99^s÷'\ eJ\84\8ds\83.N "´\b³8\81p\169      W\10!¸í\17©\18Ö3[a\ 5\9b\0\17¬\ea\ 53MBB\ 4\98SQ\f{j\eR±!\ 4L-·\83\13\a%\84ÆùÿW\9c@&j\ e«8\816\15\v@\8aT\f\8d©ä#\15Ãb­è³XÁL\85\85ÊT\92Ul¬%WÊ\16\ e1hÏ&\96\8eaÙAtT\8añ\93\94\80Î¥gÅ°¾¨ë¹!`\ f\11º\959(\ 17.Ì*9\81ÝÊ\92\v+kíÂÊ\8as+k\\9ci\9e$©ØTãÂ/V°   ßR\ri+\18Ö+1Â
+F\80$1XDö¬\18Ö\ 3\14a\ 5\9bj,`\11V0,Q0J¯\9e\ 5Ãbõ:fŶÁÙ^Vm\15ÃR\rÇ¥eÏ\8aM­V\r\17Ö\ e"N\18\9am\8e\9e/\ 5
+$T²X¶8\81]­Þ\89µ\vµ¶>YÓý\ 1Æ  ô\98\ 6cÍv¾\9dõ±D\99«HŨ\8dF¬Ælª8T\8e\b\8aõâ\7föì.EXÁf\10\11V0\8aáPZYÅÆZàWmcÍp
+b\9b[HÓA ·qø\ 3\84\94\9cÀî}\93\8beÒÚy\91¦Ú     d"X     \83É\86\8aa\99\b6T¬`X¯è\b+\18Ö+8Â
+\86ÅéàVªgÁ°\9eÇ    +\18\96³\1a|~µ\15\8cx     ìTL\8aMøn\12ÙV1¬×»«gÅ°\9cV¨4Bq\²²\f*\14ç \14×8L\1d\vNN ÖmYYq\ 2\99¨\9fd\14©\18ÖCDa\ 5\eë~;\1fª\18\96$Q\1f«ØØ\vÛ\11ª­`\13°¥þÅ*\ e\11j[\13aÇ°~\b'm\ 5\9b\80Ýíäs\15Ãbð\98\82a       ¶q=Å
+\86Å£\fÚ
+6gx4\98Q(\96ÈÂÂ\84\83Rlãb    &'\10ź\ fHN )Ç2u+o\9d{ùU±\89ߪ\13Â
+\86õ([XÁ°\9e\82\v+ØX3Ve\v#$vDÜV\8eJ1,År\1dU\bÉã×.$\a%¤Îy\88[\A/©1\9eä(©uØ\ 5\98\\b°õyDÚ\8cý&©Ø\ 4h§:Â
+\ e!`\vÕ\16¡t\fë¥+a\ 5Ã2\8aÁs\ 5#"\8ePXèÙ³bX®\95\ eXÁ°¸$íY1,ç\90\18Lõ,\18û%6Ô\9e\15\9bu\9f\99ug[Å°\98\ fj-V0,\ 1Ç gÁ°ÈFǬ\18\96bã ­`\82C²s}®bXj\ 6\98b\8eJ1,\86ªÏU\fË|\am\ 5òßkÛ0c\1cm\856\ eÊ\8c\e\17\v)9\81\98ª§\ 4É    Äd¸¦\821&©\18\16CF±Å
+\86åp\0\11\16+\18Öïy\b+\18\96#\8bÁs\ 5\9b©z\0\93\18\8e\19x\ 6!\ 1R\f\9ds\1fW\9cÀ\16\84\14çAHoçQGq\ 2\19ª\1f\1c\15©\18vn%}a\ 5Û4íhSXÁ°îð\84\15\fK.>èY0"b?UV±­W\vú«gŶ^-S\16V°±¶Ö\8b\rá{í°¹Òc\a%üƹÑ\15'\10Wjû\8dp\ 5Q\8cÅ\ 2Å     D\b\87>Ô| bX¿\89VM\15Ã"\84CéX1,®\84iVÏ\82aq%\ 3V0¬\aIÒV0,\8aBéÕ³`ÄK\94ª=+\86\v\18\16\83V1*Æ¥!+\15¤bXæw"=\87Z¹:\9faı\83RkãB\8fÉ    l®¥Ú¹k  \88\18ܵ\14©\18Ö]\89°\82\95\b+\18ÖkXÂ
+FH$\r\88?\aÜ&jG\1eÝ~\99CÜaððéØ!6j\19L\0\13\82Àî<²]8\8fÖ.¼Er\ 2m\9a\16-U§\8aaÃ沩bXòßA[Á°\84\90h»Ú
+\86õDTXÁ\88Èc©b\15Ã\12Ka¡Ù³bX²o,4Ù\10¯ïø]¼\ eÊ\8e\1a\17òLN`\17or!ÞÖ.ä\99\9c@¦IlÁP\93T\fKduª¬`X?   \96\82a±)\84_=\v\86õ"¶°\82\11\91×k\8bU\fK\89\ 5\ 1fÏ!@²·ÚÜ\1c\94\0\e\17\12KN`\17`r!ÀÖ.$\96\9c@&Â"Åè\93T\fKV\8c\0\8b\15\f\e\16W¬`\13\91\85ËÒV0Bàj6Þ(Û*6\11Ùá\88°\82a      \92ð\82ÙÖ½<;\8192_1þo\13_!\187Û¤Bê~½\8e°ËbA»¢/·¥\ 2ú\99;ÚJÎk\81\9ds\17_\9c@æOô\82\eÊ\86\8aa=\15\14V0,~A\1fª\18Ö¯{H[Á&Yß1ó¹\8aaYùh´XÁ°\14íñ)Å
+\86õ\8bÆÂ
+6ÖRie\vÃz\81JXÁ¶sÙ\11\8aa\19\8f\8eJ1,*e¡æ\98\15Ã"\el¥X+åYx\99\ai\ 1ÌZÂ
+\1a\17;\83\83Z\88\8d\v;ON Êñ"MuªØ\14k%Ha\ 5\9bb-o\14V0¬\17\92\84\15\8c\80)\1d\1c\94bX¦\83r\8a\15lªs\ 1\17+\18Öo\90K[Á°\18}\97¨        J±)Ç$]m\15òÑh[Å°81L5G\15\8f\8auPªk\9coMv£Un\8f\ 5ÄOÚÉCq\ 2\110\13CHÙP1,ETl´XÁ\88\81t\19ñ'ë\83\r\17Ø\ 6\e \aÛ9ÖÐyó\95Æ   $ ±ñT;\81D^vvT\9c@\86J,u$¤bXÆvª¬`\13\82¹\9eê8&\82©å¡\94Ùa\14\86\ 4l~²8÷\93\9d#<f°ÙN`Û¹\84³ô¸·\8b\90±HÅ6M\v^\85\15\fËèæÂÆD¨ùç\r\ 6»°&\ e?`\9fHr1\91Ö.F\9e\9cÀ>\91â|"­]\14®ë\81\8a\19ª_9\12V°MÓò1a\ 5òVO\84\8di\12ʤ\83³8gQ·\80\ 32M«4\14'\10ã2/U\9c@\1eè7 \8aTl¬Õì\94-\fë'\9eÂ
+\86%FÕÇÆTØ
+ó\ÝöÁXÔaz\8d#7Ãf\92\13ÈT¬¾Q\9c@\1eèåö"\15ÛT|8Ù­bXO\b¥­à\98
+Z©¶\1e~\aÆYxv^¬bcÝp³­bXj\ 4:!Å°l«\ 3V0\1eõðÌ\ 4\9c=+6_m7p\84µ­2.\13t\17æ7\rÊ\85\96\94\XRãÂt\92\13\88\90\18\ e®&IÅ°\94×\10\82a¹0ÊD\8b\15\fKp\8d\15\16+\18\96e\8bé\17+\18\96ø\18k*V0\ 2öób\15Ã\92íiÏ\8aa9ÖÐ\9e\15\9bê|'Èç\86õ\93+d~n\97ËÂñzp\12\90\17kr\ 2±~ßA\92\13ÈDCüI*\86õ\1c¦\1e©\18\96ab+ÕV0¬×\93\84\15\f\8b@\11\15l\ 2vûNV1,\7fÇd\92\r!¹Ô[òi        ¶äö\ 1á¬&+\A\ 4hu¶â\ 4"À!'\90\89øM\90j¨ØDäË8\87£\186TX¬`Xì\95-ºXÁ&"\17\8aMD¾n\8a\15\fËâWA(\86¥h2`\ 5òzYUÕ³`Ü\aeRVd²\8aa=\86\17V°¹\1e_7ÕV0,ÊS\ 5\85ÒñÝY\14\1d[\\88±q\9e!\17'°ïÖÙÎ\13æø)â÷\83äj¨\1866Àlª8UWl¨®\8dè\b\91áÔ\8a\15\8c\80yq\11\11&\e\13e\99feÀÖhl\801ÑÆ\85\ 3KN \ 3ò×\ 1ª¡b\9bªÇ\91ÙT±±¾{\v[\18\96C!¬´XÁÆÚ\89\9c²\85a       «\98\15\f\8bX°Ãb\ 5#&2\e\15Ã\920`-ÙV±\89ت Â
+6¶ÆhÛ\9cbXf4èY0,VªóU\fKðÎnZ£\12\f\e{L±\82me¹·JV1,û­ÎÈ\8d\ 6?\95Çþþo\9b\8d\9bLc|-$S¨-\8cd|]´6\fj\11/³[o\85Ð\97_iÎF\ 2MÓfÔÅ\15\84ó\8aIq\ 5Í\ 6,ÍHΧÅhr7ô\7fç´\1aã)R2\85è\8eýla×\0Û\99vA8\9c\91r\ 5á(3\1d\82p\1eÝW\9f\ 5áøó©´+\bÇ><\17® ¦à\1fÑÉ>\ 5Â\117J;\17   eɬkû¿S$\8dÁ<Îâ\93\14BÓV\11Ë6\85\18 ß»IJ \9c»¿â
+ÂqD~R]
+´IÛ!qµ+h\93¶´<9\81\14\8b+\b\87\ f,\99\blr\ 2MXv9»¸\82p¤Dsá
+Ây*]í
+ÚJ´%\90\9c@ãìõ=á\12ÂùÎV\A8\ fM\8a+\bGà¤}\9a\ f¡ \95û\9eÿ;\15Þ\18Ê\1f|®Ã~eL!\82\19;\b\10Êq©&%Ð\14nΤ¸\82p~mª¸\82Æ\rÛ\15\84cqó\11\9e>H\81(\0\a\14h\9c\85\ 2ÙN )Õ2áâ
\11È\88P\ 4"d?fÎv¾ª¼0Õ"Jÿw
+¹3fsÅ$òS$ûd\a\9arñ[úÙÚDF\93\94@\ 4âùKq\ 5á8Ræ=êÞ¥@8n¦ñ²jr\ 5áü­§â
+"\10Ü\8c´\13\bçAv¶\13\bÇ\11
+¯¡öç   \84C\86Ê\15\84ã\89À\ 4Âù5\95ê³ ­\1c»ü\94\9c\ 3ë¦\1cÿw*§1(\9b×A,üv\15$b\ 5\94L¡¶6\8añ×>¬\aÄè\99PR\ 2á¸!&\1d
+\84cûá\15\9a>\f\81p^ê(® âðúNr\ 2áæ\16Ü\14W\10.^»èÏ\13h"ö·k:çbäm\89ÜLýß)ÆÆ ?î¢Ø¯\8c)\84°,\O¦\90    Ë²Ø¤\ 4±}I3\81&,+\11\82\fÞßGLN \1c{5÷)û \ 5\9a@üÒRr\ 5\8d3YT»\82pØ*·^²]As\16\16\93\13\bç\81{q\ 5áØb¸öÓû\14\bGÆ)s\10\85TDäò?^¾û\15A¾<øâ+"i\v\96^¾fÍs³âØ\$ã<:\9a½¼ò/\ e\1eÎ^^þñåòÕÍj¶y=ûÓæîau÷°û§\97ÿù\85\96Ï{Óç\8cûôü\82¦\7f<:°\9f\90\rCº¸úãìÏ«»Õvyc\7ffã?<Z´¿\7f}÷z³½]>¬7wÆQ\ e8[\9c\awðÿÝÿ\1c\85\9b`\88\1c¸\975{n~Ä\85\12bAä'óy\9bÿ÷×Ë\akÅ>z~Ñ\85²v   71Ì\1e®\ 3\99ò¼[½µf\88¼\9aý¸Úî\9a\1c9\9d;<ì\1dl^ÛOYÈù\80o·ë\1f7ÿøÉ\1fÌ çí\97ÿÝÿppvØF÷{Q\80Ëõ¹ß\98ZÌE\9eÇnfïÈÓge\99Ïq\97ñ³6Ýg6=\1c¯Ù¹[¥Ï\97\88®Ï\7föýõ¸õÒZ©)ß-oW.(²É\93\97×Ë»7ñg\ 4Ê(ÃìC¹*úåÍ\8d?\96QóÁOÿÕo)æ&Z\9côéé±\88öd,Ú¿lÂäT´W\9b\95Ûª]þïëv¶ÇºfWëׯW[\17\1dGïi\9e¯·\9b[ûã@g\ f×.Ì\81n77Wþ;¶²´äÿùx÷ëÇÝÃj\eÊäâÆÑo'Ö&M»\\8b4jáÏÇÒ|ÂÂ\1fYÞ³û-«ÖÍ\98½>­ldÆ¿XSo7Û\1f¼W¢¨ùy[-¿¥\99\1e\9bâÙ`Þ5ÓÓ±`\7fñä\7f¸\vC\1f¸ä·ÍOÛÇ\ 5ú\9a\1fºéå\9d\e'\89\97WÿÕÿ¤þ~y\176ÌG\1er½ü|ßw\9b\87p\1a$rì(\9f×k\84ìíÖ÷9k¶\8cz1\96ý\9f\9a\10tWÚç\rn\97?\84¿ä\1aÆy÷\97·ëÝ\ 3\7fßùl)@\97\83}ÙwA^<å³Èá^'Ý\ fÂ\1a\89}·y\fÁ\93\1fUðÁ\86\19þ^ûÜ]®\89qÖ¯×\97>?*TçÝ\9dÿz+ ÉØ\92¤\81ã8\eËøûõ\8d\87Qv Ô7êÙ×6cÝÉ®\97?\86\ 3UÇü°±\9fént¹¹{½~ó¸õß\92¾åÖ¸×\89¿Z\11°\85â8IÛ?\80Ëf
+ÖgÓÖã.\86$\7fZ\87]³eþf^¦¹\16
+\vf\18eÞçcÑ\7f\13ÖÂþÓG;{µÝ¼ÝŦÆUÓ\8aÏ&-sjSÛõhB\97\ 1!ßÝ\eßX¹\91Q\8eb\19{­>gÏêò±\13\9fd\f4\15Ùì®7\8f±¥R̶Ï\8fÇ¢\1aÙÒ\84Þö<vöÞxgÞ£¥O²\8eÚ\92¡ÌvNT\z»\18ëíë\88§%ÐC\13Í\88©\8cv\8f:{Ç¡ÛbÑÀïf}¹º\v\efûM³Þlí\87Ü\ 4L·ôzµ
+wͱy\8aurÃ_¾Ú<Fü\8f²º\13\1cíûo\97Ûíòîá§ð\8a8«L\1fþ¶z\83ÇÜzþä¬U+{\92ðIÄ<ÕI÷V\1c 0½\12=[\84\89\82Ã\9f\9aöÈ\9aÞ¦ÑqªÝmîf\1d\9b\ 19NÙìØ]]¯nîÛ\13J\ 6?m\1ec\9fUÁLí©Wîþ(4äcG\83»Ú\84âÄ\13N  à3ÿíÄ欠77DÙ2\9f\13\8c\1c[f\19y\90\9aê×wì£77\95W³7tûúÌ\83ÿô\8f\9b\878z\9aÍFxH>ÐÍ\90"ðØ\ 3|\7f½¾¼¶fìÿ\95î5çíÞ\81¼°¼÷2\9c\ 3ÙG\85&»ÇûûÍöaåñ\eµì\9e]¿\8aMá        N9\96/;üg\ eà¦4à2$ f        \93\r\97ì&Sê)Ùmî©ç<°M\99T\89\1cNÏzP¶û\89tì6\84J\11¶ÿù½2\rßÅ\81_÷lScþ\9c\7fkò¡\80¼\90\12\ e\a\ 5\9a
+zG\8eå\ 3öзë\a7Uj;eª·ãÐcu»\{$H\92V{Ïå\8d\85¯.O\8bu»ø?§ìö<«\8b\94\93\rs^­*ÆåØ\8f\14é:|\9c¯j\8e»ú®·7rÝ\10îÛ\8fm{Ê\84£ê\aFq`rB\19Äã ¶ZOû\ 6¾gV\9f÷ÏM\86ìò§D\e\89<xd\82ÿI\99Äç¯\9e® ±y5[®Ý¯í        ñ\Y\1aY>5¸ZÞýäa­\r\81\12pV/f»ûÕå:JÃ\1aV\8dÆÿÄ\94f¼Ë\93Ï»2-wïÓûÕÔ\16\1aòÿª\80ÄFØçØÊ'#Âa\f:\951x\11ȤȺ/C^^]mW»ðºìE]\8b\1fVû%"û½8`WÐ>s\9fH\8bGæòiÌÝ#K5÷©\ 2\ e\15\aKØ\'Zý\1dêòzy\7f¿ºãwn       öºo\96@¿l)=¡iƦSª_^¹\82-õï\91óÔ¶êÙM,T\f¯\9b\82\99Û\1f¼=×\b2\1a\9c½ÝnîÞÄ~ÁùM÷~\1f½>BeöñËÁ¾9\91M\8f4öf\15þiP/3¡jdÛ\8bùîF¸Ï\98\99øPØSE W«®$\16Nwë3væ«(©â\94R#W\8f·±år\92R»ðý²Õø©_÷0n¶¼y \91~ã{¶]jIÕìñ ï¤\99ÛÇ;3\8af<UQ\992´ý3\bmó.`ß\ 6?P\81§öüJ1âÛW\99`DÔ£jà(Ð\vG\99apIì\93¦÷\1f8þOöóE\b¢'\17Ô_.Ä\8fã §üx/&PFÉÈb¢\0ö$\8b\7f¼¿Zö,\ 3\7f\90E\85//í\904Ö/6Ù\ 3»ÙWë\9bV/µ8ð\17¯ßO&È\ 3\97äs¿é#ñ\1e\8d%ø±!ôDT<uH\14UN_aZN{]\92£
+ôë\17y?V´M\90\84/\v\1eô±ÞÆ\82|BH1>§x¶\fÓ\8aóQ\14\94ç¡&¡\b\9d¸ýýû¯\1f4AqÕâ\1c_T\82\9aÈ0^¶óE\ eTÒçï\97\ 3\ 6t¹º÷Ý\89*o\17ÄÌì\8aí#\82.*W½\80
+ÍØ!O+ª~{³Z¶Ò!n´oÉ7\14ïÌ,sËØmÚÙ²\86\18\8e\r¾u¦;ÙÞñÇh\ e~­T&Än·¸\16\ 3±O$%S\87sS\11L³H_²\16It\81ù\92u\89ir\1cë\9bS\8c+7VNQ\ eS\17OX\11S\91\16ÚZ¯B9$%5\80·ËHÄõñã:å8\a!@\8cC-\ 2£ó¾¾>Ö!¼¯]S\ 6\97&í ¼ÖÀDþÁ\1ahEp©ÄNic·"un\19\9a^,\89\ 3\r¦\11»RÛ/VÌö\9aâÌ5\18\ 6\89½ôh\85\9b\17\13÷`¦Æ2¥¬>\8e˶\11ò¾ÔYß7ß'«\8fçº\9494\92\e)<vì\92§Lþ)±Áôùè¸\fôïËëÍæÅ_6\ fV\ ezñçoþ¯)Ã>\9bÓ%0[^^rü9ò^zÈÿ«\9aä\94\98\9b\0©°\1e\ e|ÆD\9e°'oy¿!¸Er Ðã¡Ù«ÕÃÛÕêÎÿ®Õ\87©n\9eýiùH°õ¸\8b\1d\91\e\7fÝNGéà³oVWëÇÛø!ÅÔ|ÞTøþìË«\1fY-8*óóÞ\867õ/rÕ\­^/\1fo\1eÚé7©[ÛP¦\ 4ø³\7f\v      Û\r\84ÆãÆ&:u8ø\14\13ÝséiJ¤ÝEg¾`\aUé¤'K\9e£c°V®w\1fïgÕmoýçv        ipaã¡_ØÐ\9b\16SYáv¹nçÒvT޺ܭ.\1f·ë\a_mönOFõëÝî±\87ÛÌ ßCúYmLýàÌ\8cñùXCSÇh\93þq\98òv±Ë\84\9bA\1dàt¹!e\8fÓ
+§ûâ\bïôÂÆ\13\1e5Rͳx\82\9b4)S&ÇÞ;çå=Æ\9a\12ïÿ·\10´\7fvF\ e\8aØôZ2§ç\95\1fë®w­x¡\97Ó\1eã°R\ e\1c÷\95\ 4Æ!\ 4\11\90éË^JëF6\9b8ÿ\1fibº:È\9d\rïMÎc&r§¿~ù¯¡0\ 2è_âz>\£¡!ÿ¤\99\94\8d,,        o¥\1a²³ÍÕÒ\8fá¬8Ó\9d$\17\94m\8a\85rÙød¸Ýî\1aÜ\9c}Rb>\12õåõêò\87ÕöÕf¹õÑðQ\82E\96£î\97\ f,¹;\1f>\1e¤6\86ѳ®6w\7f\b]ó³^Ö{Ëy¿kLî\9b\8d\8d\1aݨéev\7f0\87\9a}Cúp\9d\8cZ4%ñ\9aÅ`Ëf\ f÷\91ª\8e¦v\94É\83\7f\86ûjså~vp(ðñó·±h¥ê)Z
+«ç\92}\97ÿhî¿Â\1f\9a8©ÚX\ 4P\91:w Fò\1c\19Í\84æ'sÇõ-%Ë^4ªTwº\90¸]Ýß,/ÛY\10\95̼Ý5qÆ=Z\r\ f«\7f\84ÅJqÚN\97j©æ®0±Tû極ß÷jÎ'\16«\8b\97JºÞ¦opÇÕ?ªæ\95Ç]·Ë̺ñ\8d³¶\91اJÔÛu\éÔâýØ\17U\ 2Èë¾=\9f\15«:7\9d?\9fSä±ë\86b\r-\8bÖÕ5U.Û·³P^vkÒ«\fOÙG¸Ôö#÷\9d¬­'À-0\8a×4ô\ eÍ÷ë»ãÿõâ__ú\1aâ½¢\1eÍÊÜ>ï?C\92ö="+Y\89$[
\92üØÝ~29Û§\ 2K´\\aøò¬ôL\86¼\9c\ 5ùªðÚ\96N1ÂU¡é÷䥩ïþþ\18öh/#·²I¨æàs\ 5\0ÿoÕ\ f\15вcUÀ\94)\8fVÝäQÞTÀµO\ 3ã\9dsâ>\86Ýîq5iMðüÐÿ$!ÜTb÷pýè꡸S÷Ò\96?n\9a&¨Ë÷cÕÙúîjýãúê±½\v¥>iß]ÒAî亴Ï\1fuå~ôâ
+5½sRGÈÕRð\9fÓÒ>Y\7f¬ÃyÆ5Æ»Ý=5\9f»\aÏ#È\10ù
+_ó;\1eÖÆ6Í\97\8aZ\94ôÑSÿ\ 4\r\9b\97\8d\ 4Ä×òk\15ßÇz\99®x÷ÂOº\9d=\11çOXú¤ïùß\8f\ f7\9b\8d;*Ëx»\8cgÿò\8fû¼XPËÀUÁlû­¯O Ñ\9fé¢y\15ê\19ü÷\10Å­\93õû\12ý\14\ 2\9f¼b²[a\94\1cÉÙSx\e "ùí#'oþl©\1cLúª µüåå7\7fµ¶Y\ 3±ò\9dKõ³\S\99\16v3jûxÆ \b!Fýd2æZj¾_#'ë+Þ\ 2½k¥dû\E¦u\97\18eßýH\90Ò\91NÈt"¥}ØÚËa\91,ÊÁËnýЫ8¼?Ü+¥ÓBùÄ\7fu\19×I»}HÉ^¸Ì³ö\88þ5\83ùf½»\q\99÷nEIÒô@\93Ó.\87O<ºÏØÝ\91o­/¾Ê£vâxy\ 3\83WaÂè4%\98ò¤·\8fíj¯\9e\99\7f±oËÚ5\8b\1c¼\818aL¾A·»\1a¤Ö\95u\mÞÞõÍ©<çË©W\96®[ð-YÒ8:á2\97¯7\8d\ eH¯¶\9etáð*\91{XÇ\81¡E\1eÝ\8c\ eûÈ]¢ì$Ýë|°ºCiÏO8\ 6µô°G×\bc¬¬Q\1c\95\94"\16#\81lÞ a\9fÛ­¯8bâ=s\9b·}\ fªo,³«ÕÍò§\b~)<t³'\8e²_þìå\9cíêïÔkã\95\9c\93)íåæÖb\r\1f\f·¹KkcáMå¦S×\fê.©Ë\82\9aÅ\9eC\f¹|Ź`/ô=U+]\19\84\83rG\85/\85\8du1YÔ\9d:_{výðpÿß^¼\88Øãà>Þ\14?Ølß¼ð¨\8c\ faf\95d6\15\v÷\ eî\ fî_<óEa\9f&ìu±§Ní\13ü®Iç\98ë\0v'«Luâ:À?Ç«!\1c\fõ³Ù\19¯\95´5\989Ûî¡¿{G6\9d\ 6ÊÆ}÷ÀÿÚ¯­\86\95\87\bSvóêfsù\83\1dû·C\1e¾³ø\9b'ÌïȺÉÍ?ß3ðÇO<Ï\7fÊÉÑîñÕíÚ³-{õ¬\17\9bgS_5 \88\9baQ÷pï\8cø÷\0»Ô¨X_Ps-k\9b8x\9fÚÅ\9e"µk\9c¤Û¤¦\99\13ûÔ×ßÚ¯ôتÝ\ evA\9a\eü\1d$Pc¥u\11Ú{\v\1c¸\96\b'NÕ§ê\ 6û¶÷7\8fÄï|¹$"x^*Î5>Ú¡\96ñ%\ 2B\8enjø¸ÍÝO·D^áËxñ¯\1d\12\8e\19ÿrÔ?ÜÀQM\15\8fùï\v\8f]ÿ7ë7×±Ô4@\9a¬\16û5æØkõ¢Ü«íj\19\89!å½,µ¾Z].[r9(Ý_SñmU,{K²gðëw¾ô¢7\97ƯP²ýاfÌ\8e\a\87<Ã#Ïé26\17r¹Ø\12w\81ì¿ÿÒ÷ü_¦\9e&qûr\8fÞ\bå%è±È?Ä:?ö ïÙåòÒn\9dû®LH\97w\14fÓG\80ã¸\86\17/Z0¦/Å\8f\ f-ß®^¹×ÑZy\ f(ãð\1d¢¾ëý2!ïoÝÄï\1f\ e£*TÎáɧåÓïÚF\ 2¯oï\8dN6^¯·«·ý»-\sêS\9d}\88\9aQÊÃ*Ît)ad]ë6ïW.>Wyv ãîGÞIùI¾&Rþ\91»\9c¬\97Ü,·uK¾Oj¶º½o×)0¶ü+õ>.mù*×[v/ì/ú¦æH'ï=\ejg¯­ÛrASG¿oó\12\9c\8ekâE\v\]$eïÿ¢Â«v÷S³VNC}\9dPFùe\17­º\ f²\8f\97!CY\ 4\13çäO\8c2öí\9augd\90[~g7c|'\1dÜ\8bü\8f?þååËo¿û\8f\7f2¡S%«ðøÿüí¯±u\12é\9d÷¥3°ÁÏ\ 3º¥ó\9fî\18d\ 3SÇ×ûdBm;ü\ 5  c\ 6­O9M{fÇi«møjþ\13{}Wô­C_/\9aR\9a_F
+\91ëQçp+l_ÒÀ\eÖ¥Ê\89¬f´\84ïú\1e ¯´\8c÷
+û*\8b©vxÂq\17×\11¥\96±çe>JÈ\ 4\vþ\ 2C\84Qv\7f6Jû\1f®ý£øþ\0/.\9b\1f\95E0qp>%ϧ\84Ú¼ÁÌyÐr»¾ñ)rmª\14~µÞõJÅ`\rì±\9a\98ðÁa\8f:?|Â\9f´E\93\9e\7feUîq°*&N\9a¿¿\8e+\93ö\1f\86éWS\9eµùÇ[SÔN\16½nñÎ\9bM{äAyʾM\10wë¤ßö%\fÖcUy¦ÎÑÃ\ eõW÷ëK»T\19±\b\ 1_OÍ?©ÜÞÛY\13ª}\80ØîÝ\8aMN\1c:\7f\13«\86BJ¯\8aÌn6ñ¹\97Á­$¾ÏòÖ÷0ý6à>¡>»Ä9±+Æ\9dU*è\95ÀLÝ\82z\15\9f\1d\19\b{y³\8b2\88\ 6zë¨\9dáWò\ 5\90\19ÕN÷\ 5ú»?ýÙ]Ëà¥u{]n\17.\ eÇÕß\8e\98,E\r\9dÙh»o³\vÿ\19õ\9czI\9b\82×/\bñÓ\9b\f/Ê¢È'\1eWïÓÈ\8a¯Ýµ\80Os\1d¿\0ßÄWÕ¦Éëª#gmuæ\9bMÜ}ã[¬uH2ù\r½\91\14  äc\1f
+\97¤)ÞW/½f0Øêå·ø¹_¡dÐW\rß\9a¶È@VÍÄ\19ôH\18\93'm]B\11«Qy¬e`2×c\95oWÛ\9b\91\1ev\97ÛõýC\ó6ù´ãç©Bç>½·ôÓºÖH\7fýð_ìOZ±þw¾z\137\14­ä\91AñÛ~uYîþ\r×\87\97\8d½;\1a^|ZwwtbÃ|~L\9c¤5\98©smv\87\16
+j\11ï)Ûëk®A¸ì%t¸íß\15ãô¯ï\95\94ù9ç\93ïÃêJ\9aLèöj%\1fX\97À¶\1c-L\1c\ e\ eïx\7fÂ\v\94\83-¤Ë\99ÿr\9b\JFè\13çÙ_ÿ¡}ÍM>ã3Ûw\9a2éJö\89%®ð{P;(â<ûf}¹Ýì6¯Û]\fö\93.\88\89ã¥øõw\8f\97\87fÙuo\1fF*{ÇÔÍЩs\88\89ò;\aÄëûGû¨Q¼.=8&\9a(\83\ ek\14¼Üþ\94²g¨ÅN%í+ȯgÏý¿ÇÁÜ\17\õà?¼mß[jÂ\9c}å§Kw\ f7?;Üý°º\9aý\9b\9d5õ·tOì\1aÅ!kèìÐ?\8a¼6\83ÿ\97\97_üÛ\17ÿ\ f©H\1fendstream
 endobj
 endobj
-495 0 obj<</Type/Page/Parent 490 0 R/Contents 496 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 103 0 R>>endobj
-496 0 obj<</Filter/FlateDecode/Length 5290      >>stream
-x\ 1Í\9b]s\eÇ\95\86ïõ+¦t³NÕ\92Â÷GÊ\95-GkÙ®\8acGbÖ{\91\e\10\1c\92\88@\f\ 3\80Rôï÷9§§û¼C\fU\92ÊÙ8©(|ñ¢{ºÏw\9fiüãÙà|9®â\9fýM5à¿Óå´\9a/GÕ¾®®\9f\rý£a5\1fUãYµ¾cÌ\80/Ù?CûçõwöI5\9b,ù÷®Z\9c\8fÚ¿·Õ\9bg\81îªù¼|ͨñÌàxz¾`Ôtt>m\81q\ 2\197._4Nà]5\1c\ eÎg2P1ìtv>TV0ì¬ûPÅ°óÅù\Ç
-¾«Fcß\8c¯>63\1a±\98¼\19\a±\99\96[\8clE\85\13È#\a\8b\ e©\18\96G.d¨bÛÌä|©¬`\96;ð­\96Ç*¶ÍLL\88Á
-\86],ÏÇÊ
-¾«Æ\83¡)¼\8cU\f\8b\92u¬bØÉì|¢c\ 5âh]\95â»j2|ô\·¦Á\92 ³\ 2\1c\84\ 2Z.\99\ 4"ÄdM\85T\f;rk
-V°©gaf\1a¬`ØÉÔ¬)XÁ°Ë¡m5XÁ(`äþUXŦ¼¡\898XÁ°Ó¥\99\82aç#3\9a`\ 5Ã.'\9d\1d)6å¹I\95±îÎÓå\fk@\ 1&\8b\ 4\\ 1\ 1  \10flÁ    D\10hu!¤bØÑ\18!ÆPÅ°¾qa\ 5âè\91\8e\15\f»4[\93±\82\93\88\89<cX<m*c\15Ã.¦\9d\99\93\98\16\16Ò²\98\1c\84\98Z\8eY'ÈѾh\9c@D8GmÁ     d+Ã\91    ©\fT\f\8bÖt¨b\13R÷¡\8aa\17\ 3ÛvÌ,ØX\v\ 6F\fd\ae\15\9b\90ÆXi\8cU\8c¥\r&\9d±\8aa        V*(Å°S7¨²fÅ°ìWW¥\18vaþ\1e«RL\0"ð©$\15Ãb"x@<×ÂÓtfBÈjw\10jo9O\bé\8bÆ  DÄ\ 3W@\19¨\18\96ü\80â\83\15\f;óå\ 6+\18\16WÇþ\83\15\8cz\be(¾°\8aa    \1aÊ&\v'Óz*tÏw\10[m¹¥{Fá\ 4² á\9c¨6-¤bØÑÒ\1e\19¬`XV\80V\83\15\f;\9f\9a½\ 4+ØXߪ°\81Ù*iTW¥ØÄä!¦\8cU\f;yÄ
-\86\9dZ=\11«R\f\9b\82UÌ,ØØ¥)OØÀXñÀ}«°\8aa\87î=Á
-\86¥¾!´\ 5+\18v:1ÿ\bV0,ñ@å¬\18ÿ ÿ©\8e\92Ñ \12Oßn4\ eÂhZ.9Dá\ 4¢¼ä\1f\85Tl¬\99äTØÀ°3+$\85\15\f\9bü!Æ
-F\ 1c+êb¬bc]µelÚêØ\9\87\ 2\a±Õ\96C\80\98\ 4² 4\81t\v©\18\16颷`\ 5æh\e¬`\96;\1c[\+¬bÛÌÀô\16¬`X²\v!(XÁ°T\ 5\9d\99\ 5Ã.»ÛMb"\fD¢t\10bj¹¹\87Ö      ¼«\98\13Å\14N b \9aPR1,úg+e¨b\16K\9d\82\80\v«\18\96à¯c\15ÃN\16ݱ\82ag.¤\98Y0l²÷`\ 5ãr¸:Ê)¬bØ\91\e\82Í\99»bTlÎl'\e\99Y0ìÒÕ\1e3\v¶D9° YXÅ\16\bFfåÁ
-6vf&SØd\14¾Íì;\ eÂ(Z\8e0\8e~
-'\10Õ\ e\17R1,\8e\8a\10\83\15lfáB\fV0,Ålg¬`Xªz²V\8c\15lFã\19¯°\8aÍ,Üà\82\15l¬Uù1³bS¼§þ2V1,ûCµÁ
-\86Er:³+`²´XÙ* \81¢\80Ìñ\95a\15\9c@\ 4áçÜ \15Ã\92\82¦2T1,\81o ¬`X¼v¬¬`Ä4ì\8eU\f\8bå\8dd¬bX\92ìBYÁ°Ë\ 5á8v¤\18!\12\ fT\18\8aa1!Ý\91\1dö&\94û\96\1e¬øH\7f\9b\80\ 3Á,PAPI/\14»\1e-íd6qàz   è:[*gÑ&}Õ\e4ÌYÆѯÉ\10ÉbD¬¥\90\8aM+Ë2\8f=R1,±\85ýÇXÁ°ô\13\90\82M+Ö×\bV1,\ e¦[U\8cdÉøè¬Ì¬Ø´bÇ[a\ 5ÃN§\9d5+\86%eês\93øñàÒË\9a8\bñgÎå\1d\À,þÂ%ñ·ãRñ\12\93*F\84¸\fÊ)C\15\9br¦æ\14Á
-6åØaRXÁ°\9c\90æÊ
-\86Å­;c\ 5£\1cê\0}®bS¬\15{ñ\Å°S\17pY³bX\8e\1c(6XÁIí\98[aMí\19Ãzå)¬`X?\11
-kYq2²Ó\11¾ã\8eä \14ÛrTä8Ká\ 4â«\963\82\13\88\býH\11¤bXü
-\11\96i\15Ã\92\ 4ô¡\8aa\93oÄXÁ\88\90ã«Î¬\18\96Ö\96ά\18\96\8a\ 5µ\97\99\15ÃrlÖí*6¶»#Å\88\9f\b­3+\86å\80Õa\ 5\9bbÝÜʪ\14Ãz±\19kN\1eK\19\85ÖQ\9cx¯%é¹å¼t\bN "¦í\89ß\95\81\8aaéµa¥Á
-6å¹5\ 5+ØX\17±°\81a)°ð\9d`\ 5#br9>[XÅ°t\13QO°\82aIU\888XÁ°ì\0w\bV0ìÂM*XÁÆZt\94±\82Q\8f÷\11\83U\f\8a±\96\99\15\9bj»kV\fK©ªÏuÅ\8fÉ×~ü2\1d$P<ºp&qá\ 2r®°D\e\9c@\94\80\1a¤bX÷ha\ 5Ãzð\15V0¬\1fô\85\15\8c\80i\93Íå¹\8aa½º\89±\8aaç&Ba\ 5\9bê¬u!¬`Xz¾ce\ 5#~ÂðLXŦ:\8b\151sR\ e\ 1²\941c\a¡\9c\96óvhp\ 2     ·3\93C\19'\10\11\fR1,¾ÀbËPÅ°d,\9dX1¬Wd2V0B¢¸Ð±\8a\93ø;,âÏ\18!ÑÑE9eU\8aa  x('XÁ°\13K\11Â
-\86Å\80:c\ 5ÃbÖC\1d\8euv^\89\99\15Ã&µÇª,\8f\8eÙ\96\15H³¹=Õ\81)6)\9dø\r¬\ 5ëY\84â\ 4\19g½ªà\ 4\97qIéí\9c­\92\v©¸(=Ød\ 4y,ÿ¿\90\87\ e\ 53\96æ!û\8a±\82Q+\8a\85U\f\9bT\11¬`X\92\10J\ fV0¬\1fø\84\15\fËÛ\v\ 4\1cc\ 5£Vâ\ 4>WXÅ°\14m\1dV0,kTi(\86%ÔvÆ
-\86¥g\869Ås\ 5c0C\8bÈÁ*6sêª^1ìÌJÉ\18\9b\f\8aºÎs»µ\80¬èks{@\7f³\8c   \17\8e¢-C¸¥¹`p\ 1Q;"Dí\85Tl\ 6571\ 4+ØLÆE\18¬`TG«\ 3µ\17V1¬÷¹\85\15\fK6Öç*\86Å4uC\8aQ\ ee(¦Z\9e\9bDH_3²¤\83\bÄ\99ó´\18\@DhG¨qá\ 4â¯Ö2
-N "JÚ.\ 3\15ÃzÕ\eC\15Ã\12rô¡\8aayÉ\80ýÆÌ\82Møne\85U\f˱  \v\rV0ì̳`°\82M¼n0\85U\fË~1¼`\ 5âV\15URÍ0ݶ°÷\15\91éF±      Ã£\7fa­µ0¢V´@kî\96þ¶q\81\b³\16y\82\12Ȩ\ 1~\14\9c@\9eæ+\vR1,¥Ì\\86*F|Þ\12\8a±\8aaG\96\ f\84\15l¢·÷\ 5Â
-F|\9e=\83M\8bÄ»Káo­\1d\13Äz-û\ 5'\90Í°\6S\ 6¦IQyq\17³\87Q¤°\ 4\91\9fÙPp\ 2\99Ôo\1f\ 4\99&å \\8a!;\ 5§×Á~DI\90jÔZÕÁ     ´I­<\bR±)¥Ë¦GR\92\96>ÆÈAqû\ 4ó>
-\97öÑ\8e\e\ e,ÒÄ@Ŷ +\b\85\15\fë\11HXÁf\a\16\90\82Ulv`Åd°i3~\92mÏîé\18\e\9bi9¬xÌÜvä5νÄ_%µ^â\7f\17/i\99\89\9b\ 4²\v\ e׸I!\15Ã"'$\10¬`XZ\96Ø]°\82a9¸°ÖÂú\1eíÕ{±\91\ 4Ê\1e3DZ{J<°/\1a\97Æ\91ð\8a¢í\82Ä"\f6A\ 4`\91!¸?^Èõ/\ 45¨¸2öâ\15ñbP]\û\91wÀE®ù¤º¸ò;b|¼þêbu¹­«æºzÙì\8eõîxøÝÅße\1e¿Fæó°Ä¡Ísfgg&:\eÙD_MÎm\0+\99r\17\r\ý¸9¬ëívµ«\9b\a\9fìÅ«I;\94d;g o±FièÜ\aÓóÏ\83_®v6\1deÞdn\97ÛlÂ\9f÷\9bwÍ??ØçT®Óżýüæaµ_±æÚ\18lq:ÈÌ\ fö     ÷\97\86Ü\9fó)Vwö\89½[àæ\ûÑ®Ù}¸c\89ÿe\14\95Ï`\91\98ó\7fÉ\7f\86c{Ì\99YGW\ 4\8bÇ"øqss{´/S@Ì&Y0\87æÎ÷Éi{Y$s¼Ýìn\Æ\9dï^îëÕ[\9f\81\82j\91ÅxY¯W\ f\a\9fÄÄ8Ë3ßÖ««zo_'É\rÊÇ\9bÝu³¿[\1d7\8dk\84`4+²küë\1cù\97EÂëd=>\rY~<iżñå\11=\aEo\975«ÎË+s®¶Çz__¹6ð\80I»ì'\941\9cØ\ 4\ 4Õ\9c\96\8feù9æ´Z»ÔérMç³l$iõºÑ\95=\980Yvø|½Z\9b\1e\9e\e\81\19\89\99Lì~ß\9a-)1lñØØ\17\11Þ8[\u¸¯ë+ûÔ\1cd\99­øáÞ¿ÈÁ6«ê}}éßÂ)Ë\12/÷Íû\ 3\8f\11éhÚ}\99\1dg\91\92!ðeqR\94çOÍ\9eóËí*Ù'n[\96±ºl\1eÒ§Ø\(õ\13äw½Ù×ïWÛmÚ\0\ 5ø$ÛÎçh\ fY\1fë¤A»êQ\84xWû¼\9c`\96\8bV/O\98Ôç}ÜJk\84Ä»Â\1av\85u\12\8anWï\92#ÓD\1f¶!§Ú®ö7éSZ\11ãV\81U}w\7fLa\8f\v Ù\ 6\ e÷«uíb¥ý7ɦöÂ4Dý\LêÄL×·õúm½¿lV{75*õå2\ f¿_\1dñ>wô\8eôvÍûÖàÂùßßâ§þ)ñiT"ìUR5\17KJL Ú$«¦h-\1fö\98ÿe\9dü\96õ/²î\7f¹ýà\8aÃ#8ÿô[t¶X;Bw\950ê*áûv\e\1cr\8bÛ®S¦Á0\ 6E\rOe\9aë\8d\ 5'ß³Nñ¦^?$Q\109g%Ðþí«ï/.~~ó·ßÙ\0{c[Üᯯÿ\94Ò\rª\9b\ eÚ­~\9eÝ}ìÛé=ñÌî6us\f    ×\17\9f=ø©}î\1fv®EÞ'Æ¢W\9fàÃÏ\ fõþ]½÷\10È\85´é2Ç \7fl\ 4°>E\1cB\8aÜ_)Îß\9386ÇäË\12\11ÿ;\ 5SMì'\1e·ËÁU=®Ç\f\8f«·É®5¼®vî\81\98ID|Âõz³ÚÚÞ:Þr¿·\14k\19³\14\15ãÑ\89í¶Z\9aÐU\7f¤¥TJå\11U\9f°ú¬ödÃG\ 2G³_í7[_;©;ÒÅÕæ`\ 5_»öpË'L"\ 5ås®!÷»àÇÌñÓ¹l¸'Å\11ɸc¸¿ÜÖ;ÿ\80
-´xíóvOW)\ 3S\84ç\14\18Ñ\13\e­\8eÍ\91$\94Ãíb\96Cc\9bÖ¨\1d#¸6׶\88Nýs¼u\99vJÌûÍúH\80p\19Ò\90\98ýZ\ e\9fÅEÑÚ\r{³®´~̦;\18å\94²mÚz\11\e/\ 5Ùá¶\8d\8fZ[>%§çk¢\ 4ÉäàÒ\9eâ²9ª¬®\ eÿéÊá\904Ëyá2U\ 5\1dñ­¶\awÛN\95¿I'\ fB\15ç̶\80jÞ'mk8zù\9dÛ{'Dݯnê\83ïÝ:¢\93\@õ\16*=&q\92+Û=&{âáÓvƤÉóyÎRaáO;u:â\14§þ\9c\9a¦¾¾nK\1a«\vsùR\91\8dR\ 1Ð\91Á±­Êh(\95Zá$2\!Ñm³ò¬Ìõ­È\86×ûÆ\8fH¼ \88\ fOäBý\99\ 2½\v\82>Çb\9cõüêâg×=/G\ 6ù3ù.qr\9cm"¤öä_Ã\99MvF\v»S\88¦³R\91%Ñ ¤ß8¸|R\88¼ÞìRi¢\aÍ»¦-lx£9Í6ø±sP\7fÑû\94ç¬Ò#;©d_oWÇT%uj\88ÍáðP·µ\ 2\17X''YäIÑ9\91ä÷âU9³#|¯\91h¤ø©=ÅU9µ_ì\9b\aò\ 2¡ 9¶Ç³\85ýÜ\8c\ 3øÇ\1fõÿË\ e\17f\18ÑQ8Ã\bµöãèéq\80x\93\15\ 4\7f\7f\93\1e\84\9a\87û\9b=çàä\19Ôl¥\9aëÓZO;á¦>f¹\99­\97:ü9\aã\1d^\9c\8fÑ֦ȩe__[\89\9cª&\8aiú+éàø~s¼uoâJ{\99©¦Àò\80N0\88S}ß\91С{(ßä2÷'j1\89\16\9f\95ã\1f\87Á/\13èêª\95\89ÈÕ'!eWç\13FÔ(û\87m\9d2        e5\9d¦$\94¾LÒ\97u\ ft\84vo7\9e9èÞÅq$\85=K0å\10Ð\93\f\ eÇÍÖK;\v¤³¬\91§Ô{¼ÅonnSî¡ \eå\ 1\14oI\ 5\1cýÇ\9fª\ 2|)kÁ~ÖÑQC*áÅ®\7fÚ\9dV«=\85É]*\ 2´|¹^½kö\9bc*\ 2¹Ä\9bíñÀg©þW»»jÊ\87Q.î\9aäB:íûf\9fºN\1a>{Mù\89\béRäÝSÖxoþþ¤ð~Õ¸ði_Orîþô8\95U@zÕ\ 2\9d·\94\8f\9bë|,¤rÊRÜì\ eVI¶AÔî%\94\84øľ\93­Ç¾O"VoÏ ç\ 4Cuga£Sl%Gè´\9bú#ÉqÓv\18Uù'KaoûÔçÑ¢ì\87o\93hº'ø\9e6ÑÍæ]NkTjË\8f7ùBeÃe[\ f<\8aM)\8d\89S\9c¬\17simÕº\9b¥]ÕFe\9b\95fcÑ]\8f\ e\80½Å\8e9O²`î\1dLsgç       \95W\87º¾K¾Fà/ñ¨çù\97é\¡QërÛ¬ p®k^ú\97rï®í£`õ\9f\13rZ1g\19\ f\97\1aýÓ\91B%¼s\13Ó\96è\8f«µ}f/\80Jßí§7ÿ\9bÌÚúc)\80÷éæ?\92-ñêl\9aý\aÕ\onÚÆ\8aÝ0Îí\1fÞ,¬÷Í¡¹ö1\9dòõ\a^\ 3ìwµ\13ªÏoÿy¿¥¨óÖ\8dIª´Öz\ 4ÝöÆ-f\94fÕSÚëé\89ô¥"ë\ 3%Ãå\råx4\ fÁVÞ\evsáÈ\925\18\ 6ÿÛù+\9b\85¯RÊ\82\93W7?üz\86qµ_ÝÜ´U1¿q(µX\9f\8c\9fRÑu³m_kt
-\90\1eÅ÷Ízܯ\ e©\ 4Ó\ 3QO,möù)\92\ 2z\1eò°kó\82Ù\ 3·a£òÜ\1cÝ\f\88гaö\81?÷4,û\96\98dÝgvQ\8fÿ\89\89\1dy\v\97ÛyqØOA\1e\87\8e\89c^5»Ö1y\ 5½È¡¬7\v\1d\1e®¯7ë\r/\ e}c|¿\84\80{ÞÛqTåhî\94\1e7{\ 4ÔÛìîÛ³«ÆEÆa\95ßË|byûq\8f\9cß\87\87\0IfI3\1f9KP\17Úæ:â<©q×ÍÝý¶F\1d^\8aq#6\ 2þ%ïISѤ¯M¬\80·iù\15\¼#HÙÔî!\94~r\93JÀÎ\89Ò\8a¸$\1dÞ4ÎsßçùÿlR¡Mçy\90\e\9bæa¿®ÓùÃ:\f9R[CÈ\95&±©jvÛ\ f¿·U\9dÙ/h¸2\1c\92ª¾¾=Þmÿðõesõá\ f_¿hÿÏ?sép¿u\91_UøÚè\10M\7f­nØÇ\15«ìh`«\91S1\97vy\8dÝ\1e\89\93#ñK^iòR°M´\9d\17 Ù.5W\QVm\9bûz\9fº`üF%Î.\7f|H/<µ;òº¦I[f§\ fQ²N{ä´öXi®½ªWÖK´\rØ¡¦äÄ×õ?h\14¤Þ\19µæ¯ðRa4LRÊ/íϸ\8d\16ªÆ\8b\1f;Åw­\ fh\8büÍýíÎ\97Ëå«ÜMUmüÛþN\e<#%wöurÎM
-ò-p\ e-N\87.ST\952ï߶\17ypÞ\16!¸³¯\93\83ck2¾1²kÙØ\9fÛ£¸\ 6\9dÖìR0àåò¿ô5\80l¦ïÏv\83C{C¯\ 6yr,{BqߤW\94\9d®sÏM\86\9fpîô®O_Æ\7fã-\9cÃÙëhØñkæyÎ\8d\eºg©¢·_Éæ$Ø·\8f/ý¬Ý¿]¸ëjøä\14¤[ø\8cÞÃ\97\vÆ\8dF)È\94\ 6%ÍÆ\12\89Si)\91Xk<íè¼lî?ìíº\8c\1f\80\17  ïO\9bu½ko»¨\91÷ÅÖï7\87c\93zk´]Jwè\v¶õÙCFã$\87\12lí§Gª]Ê\82ÇñV·Æm¾ß \82Ó®\1e÷f      \1f\8f·¢\92ÿ-oÅoÓÅ?~\1fnÑ^jãfã\8c\96î\94\8bÁ~«­5ÖêÕÞRóî¸ýP}sx[_U\7f±Dm/\87SJA\1c³êlÎ\9bUzì\9b\8d}øíų¿<û?ñÔÁÒendstream
+541 0 obj<</Type/Page/Parent 536 0 R/Contents 542 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R>>/XObject<<>>>>/Annots 114 0 R>>endobj
+542 0 obj<</Filter/FlateDecode/Length 4868      >>stream
+x\ 1Õ\]\93ÛÖ\91}ׯ@éÅRU\86&H\82\1f[®¤\14G\8aUµ¶\14i\1cí\83^8Cp\861IL@\8eÆÚ_¿§»ïí>\108\8e¬\95ì$©r|xp\ 1Üþî¾\98üóÁp°\18\17ñ\8föª\18â¿Õ¢*f\8bQÑÖÅúA©?\95ÅlT\8c§Åå\ ek\86¸Èÿñê¯òK1\9d\8e\aóbWL\a³ôïÛâõ\83@;ÜÀ/\13j<\15XM\ 6\9a,\ 6ã\ 4\84#¸+*¹±](\1cA<m>¨\88#¸+Êá¤C2\ 6;\1a\ eJZÊ\18ìx<\980K\18\18L\99%¼+FÃîZÆ`ÇUç¹\8cÁVeçÎ\8cÁÎ>¸3a°\8baG\88\8cwŸ\9c\88fTÞ!þÉ\ 4\8fËâW\10âO\9cÉÛ9\82YüÎ\99øÓºÅh°(¦Î\11Ü\15\v\95_p\ 1!Ür*js\92±(f"\9b\f\960ØÉLÄ\17,a°ÓRL.XÂ`\17ã.K\18Â\851Á\|-c°å¨Ë\12\ 6;ª:¢`\f¶ú`-a°ó±¨-\9eK\18J\1dNÅL\9d5\9f\82\85\r
+B©\89\9bªc:G\10~Z\89\f\9d#¸+æêoÎ\11\84\0¡8hÜIÆ`ñ;ß\961تB\1c µ\84Á\9a\9d       \83\9d«Ò\83%\f\ 1\9aâ\9ce\fv<\12c\v\96°°ê3Ä\ 6\ 6\8b\1d1\ 6;\e\8aµ\84\85íî\971Xx2¯5µÂ\8a&®V\ 5¡ÖÄ\99\\9c#\b1\rK¹©\93\8cÁ\8e5x\ 4KXX\15\13±\81\85\13\e\18l¥þ\1c,a°SÙ\15½\15a°³¹x{¬%\fv®V\1c,a\bq¨¶ê,c°ø\1dÆ\1a,a°´{\112c°\93¹x{¬%\f\89%XÂ`ç\1a\83\82%lþÌû5Å\97\15\14\97\83´\82P|â,*;G\10>«éÙ9\82\10a©jw\92±°\vñJb\ 3\83µÐ\e,a°\96É\82%\f\16Å\0ü.XÂ\10\12L\15\81ÚYÆ`GS1ä`   \83\85ÇÁ+\83%\fvòÁZÂ`ͼb-a°H\b0\19gM9\88ÀQÀ(\bå$®\9a\8b\14\9d#\98\83­s\16lÓº\85º\91s\ 4!@\88\b~ã$c°(nø\91\8cE5ês±\960X\ 4\1f\b?XÂ\10\ 2L\82\9fË\18,\94Üa   \83\85'ÀºýÎ\8cÁbï\9dµ\84Å3Tø¾\96±\1570§`Qìd\fv4\13Å\ 5K\18\91÷Ë\18,Þ¢ÃJÕZA\15^6\19p¥gNµ\1c\1cÁ¤ôàTéy\9dj98\82YéA\9aÒóJ       Ò\8bônò:\8c±\16\96>f\96\99d6º3a1\89\99ïZïL\18\8a\eJ(\8dµ\8cÁj\f!\960رD\14\83EùÆoÅ\18,ÒÛ\94×\12\ 6;\9bÁ\ 4èÎ\84¡Öᢳ#Æ`ËîZÆ`\11Qø­\18\83\92-DdÅ\18ì¬ìh\811XT.\9d;\13\87Ë\97´#ÆÂV\9dý2\ 6;\9a f\864\18\83E\ 19!V#[\85\87K\199]ÈJ\ 5²\1f\82b\90\92\9a\82d\fV[\ eb        \83\1dÏe³~cÆ`Q\ 5C\8cÁ\12\ 6\vó\841;k/\f\r{\81T)\90\17Ö^Ò zI   ÅÁ\11Ì^éëÌ+Ó=\17ê\1eÎ\11ÄË@¶°\7f'\19ËF$è\11KX6"\ 5\ e±\84Á.>`       ÃÂ\91»!|\7f.ca¥©b60رzt¬%\f\16\8d\11ï\88±°\1aIb-aØðPmØYÆ`é9ê\1d\84ÁNGb\87±\960X­ \89%\fVkfb       \8bý«ïø\9d\19\83Ew\ fS\f\960X¤Gø\9d³flÓ\19\84\9f½CAxGâPi!\ 29G\10\1d°tòÁ\11\14\83RUùBÆbP\1aB\82%,\ 6%ù9nl/«v\8e\9dÈ\94¥R\10\9e\918-\19\83#\88MÎD\0¾\8e ¼F¦3Á\11ÄËÀáù\81\8cÁje\16K\19Ë6¥\8e#\960Ø©$xb      \83\85¨ù\85\19\83µìåÛal~\ 3\ 1:k\ 5\8e\10!o\971XË\9a±\960X(¹³\960t3\1cuXÆÂJ\19\12\18¬VÞÄ\12\ 6\v/âç\9aI g\89\12FA\98\10ê!    ç\bÂ~\87â1Î\11\84\80Ñyáe\9d´\a"³K:1ÃR \ f$\b\98ï\1cAt1R\1d\11\ 4§J   . ^\ 6S   ¼\8c\93\8cÁ\8e\8f`      \83E\8a\82ý\ 6K\18,ôÜa    CÛpK¤\1a\18,tÂk\19\83\9dË°\89Ö\12F¤ÓÆ6X\13/b\86$?\93§\82\10oâtÊS9G\10"\1c\8b·9G\10\eÕAj\90\8cE\84\9a\ e|)c\11\92ôè´\960XtûüXÆ`\91\f\91\86âÎ\84Á.d\9eA,a\88\10Bâç2\ 6\vÛä;3\16å¨\ 1ùs\19\83Å$\13\96è¬\89\1fÙVÒ\81\89_A\88?q3iç*ç\bBüÒ7\ 5G\10®&­rp\ 4!\ 4m\ 3\83d\f\16\8d\ e\1fÉ\18¬EÔ`       \v+      \8eÖ\12\ 6\ek        \83µÚ)XÂ`uLCw&,\8aÓnÂ×2\16ÅiN\r\960XÌáY\8c\8cÁZj\8cµ\84Á¢\98ì¬%\f\9fC×ÏÊc\f\16\15 ¼ÙïÌ\18ìD}=XÂ`1\91ï¬%\f\16ï\b\a\89µ\84\11Ù­ v\96±d\85î\8e\92¡ÊdÀ\rU\0\19ªqp3¸\ eªKã\bÂ\18µ\16r\8e \14\8bà\89Pë$c°\139Ú \960X\18\9f\88??\94±\99\8cø@fm+Ã!n\98·¢ ¶\928K!Î\11Ô\8c\ 2\ 3w\ e\19%C<\10ýaFrSÆ`-äùRÆ`\11\86`  \83E\96\80t\83%\f\16©\fb\b\960lTÇ\86Á2\ 6\8b\8e\9eïÌX¬_&δ\96°Xÿ¸Ë\12\86\15¢¦çµ*þ        â­'t\ 3.þÌiý\13\1cA\88_2op\ 4ae\92³\83#hâ\9d\10)âÎ\18,
+A^ÊXÄ;ôkU­\84\85\8d;\19\e\18,\9a¾)?\970\ 4\b\885\11i\1cO\16:Q\10"J\9c\9adp\ 45)\97EpÐI\86àäÐ\83¸\80xUÕW\90\8cÁê\9c\88XÂØ\bF\87\10§¿,ca%q2\e\18\b\10~¬%\f\16ýÚ\88YÂ`!Nfe\b)\95«\ 4+±kûw\11_ HVÊР\bb\95´åÁ\11\84\fJ  FA2\ 6«É\9dXÂ`µ\10&\960X\8d\12Æ.õ\8c,XÆ`\11\ 4!\ 3ݵìÔ\8c\b\93\ f¯Ô'
+\84Ó^Πn\15Æç\9c6C\99ÓYEpvÏ\89\9cu"EHC8Q\10÷L\9cæìà\bfÿôuvO="Ï÷T\10÷L\9cZ\86\13Í:\ 4qOÉtÁ\11\84PuI\90öÀ\91}q`\9bP\10\ fL\9c½µs\ 4ñ@5\ 1ç\bâ\81\88À0\1e'\19\83ÅïÐS°\84Å\ 2ä½\88%,\16°èÜÙ¶\82Dî§\b\92Å-óÚÎ\12\87É!äã\9cøÇ\18éWGtp\ 2ûw\11\80øGfP\ 2Ì\89"\88\b\12·\90e\ 4±\a\1c`çû\vÉXö/GkñDÆ`µ\ f
+Vw8Ö\86-Y\87\ 1WVæPÛ\94\98\81J! \9c­\83ÊüðK\86ñsåT2\ 6Ñ6Ê\ 1cp\7f>ÿð\13\15|Öòõ³\ 5¬\b«Ï×ê¢xe|<\82ª»,\8bó\95~Î2,Î/\1f\9d//¶uѬ\8bo\9bý±Þ\1f\ f\8fÏÿñ@\16ëÊ3ñnYz&\1f\17Xú¨\1aÈ%8\10À\a2¸ÅêQqÞ6·¸Ëáºi\8e\9bý\95Ò\18°N\8c\1eüGþ§\9c\98 æI\10\98ÝÀ&\8a3qZ\15B©b\80\88Çy£ÅsY"\e\9f'Áüãöp\94ß`Ä!­Û\9b«v¹ªWB\88ÊGINÅr¯¿¡ò®¦ù\ eË\9d®ÇSð-\92Iûª>f)£,óÕ\ f/\9bý¾¾<n\9a½¾\ 6&|UVP[¯o\ fõê¡>²\1cÌü\8dï6Çk}\0>«ð·®ßÕí{ù\153ÄÙ<¿Ý]}\91®\9c/ò«Ü,¯ê?é\95\88\ fÙ\1c>\9bºM\ 5gz°!&è¢\1f}ªè\97«$wô/\93iÞÙRvÀö¼¯ïz[mo·õ\1fôW\8c{](\17·¦_¶\82ãu­×ño\87c]ï\7fÚ¨fP}\fË,Á¥©\1cÃÚ¬«\8dz`Öÿá¸ÙnÓíf³¼ê\1e\138^Ã\11¯®U:ãrPùõß5w¦&ùò-Ý䳩In\94U%'Rcö\92q_U/ö&\9f\19yN³\96\aaZ;µ@Dåù<Ëb½|×´\9b£®F@\9eTY\1c\aü¨R+ñøl\86ŪI?¢Pu\7fÚ7}\85Ý5íO*b\84cWÃIÏxÙnÞ5?\9b\ 5²Çè\1eQ¹¹/¾¹^êcPZÆ\8e.\97ª~¸·?¤\170V\8dêI\ 2wÞÝgÕSºYV\17¦7C¸AxÖ¤¯®'ëcÝfñ¸\91î\ fÇåv\9b\82=\8a\95\b\82÷ÈH}\87eÔÛûõò\9d\19\ 6ëëØ|h\18ÛF\13\8cX\86Ç!s,ÒHq:\86\1d7;·½ì\aý¨\8d­µf%ìêÏ\9f\9alà½Ãl\91'õ|µyW\1frTÌAæ³j1«¯çm\96\9a\7f9'Á\f\93\13pöHÉC\84\8dO\81Ü\90ûâ_îÍ1É\8a\9f\9d¿Tû\80C»PÕ%Í/Ø\aî1\8eâP×;õ`4ü\11]ûO¿0õQ¸¼Ø6\97\b¬j\13\12óÜÓwµé\v/\9aãàgU\82Þ,k\ 2³ÂªS\1d\8eô|ÿ¡)\7f¿¼ì  îÅëÿ1WÁ¡\97§é\9e¯@\89_\99\89"fzÄ\83\12×\9b«ÛV\85$\ 5\v²¦Õ\fßo.ÛæЬu\r\ eK"J>GÕ×îk\v\8e¼fxúóͶiÍõ%e¹Ñ÷µ\82ÚB÷A6q\9f¢\97\16§1Èò·>\95/¿;7\9bB\9f\11!ù¦Eì5\9bÂ\848çà_§Ô²\927=\93cYI\8f\11ùf_Va«vyu\95j>Î̧6\7f\9fìÖÍveúÀÜ\11\1fr&Ýöõqê¦ÇvyÐR\ f9)tÙ\ f\9cM\9b\9fÁ~Û\7fÆí~c9@äÙq¼ÍQEÉÑø\87Æ
+*|\8c\10¡åD\99´ÞìóÓ;;¬·[³\e.SS(çÒ¸ç'«&û       L;\v,'\9a³1æ_s¼P¶\82âp»^o.7h\83tW(¡ñG\ 1æA7Hý\9bm}e5\85Ôí¿à\10õîæhU\ 2æCqÝ\89\1d«Z̦áð9xý:\9bþrW'o)e°\8e\925Ë      MéÿÃ[4T ÔÊ\92}¹ÜÃ`µÄàÔóö\11¦ßã·\8f-\1aV\14\r7;´\1d\96-0xvñ"ºÕ{¹¹X¸\17ØëåÆêg\1cbåz­è\9bó¶I\958W¥hȾnôÅä\8b\97\17zVVÿ|S·°\9aK\r\83\18óG\14mq\8fF{8\8cÔ" ¯êíò}Nxñsß\1d¥ÃêíI^\16)OuÀ"{þ\95u\8b\98\9fåw½=¤Üx6ÆW\03j£
+$Îåöº9ômýD\90>Q\8e_´ÍÝ¡n¿ÒmÀ!²>5Lë;sûx°®ÕL\1d³\84\9c\9a¾\9cñþ\9a;gC\87îæ\9d\82xqÂÐeoÜå£\e\93\9f:eW¯§¼lv7ÛúXo5.à\14\97\8bír¯\r\búí°\85\93\9a·¶\82û¤&uS<4\90âËÞ\e\1fÿz\91üðï\eëk\91=²y¼nnÛËÚæ\ 2x%÷%\8crîÌ<ñ\19\9dß¡Ùoßÿ\97n\95Ü÷\9bëãnûÇo.\9aÕû?~óuú\1fýM¯Ä±t^oº§\14ð\ 6Ó\87Æ:è\8ewP\ 2\84Ùâ£\ 3\94\95\14§\92ÛIY\89\97Ø\1eX¬H1^\18.rtÿ5¦òû]\9b\8c\14§\bS\884\v\ 4E×Ð\94\rÿÎ\e*Þ\[\99Î\19÷Ä,©\17Êî\99,ô̹\1a\8eU½lvOÛ6EKù\9b:\19\f¾}ôæõ\93§ß¾øá\87WO\9fýøúé_Þ>\96U8Ñ\8f®ÞÆU8\9eð\84pºw\8bY\13ÎÑ>­øûeÕ%ñêß± ù&ù¦Q\1fË÷{\13/o\ 4\8d©\9a\e&¥á2âH²åÎ$`\97\9a¨Î|íá\8f{\19ÅÊÅ\88éá\8aý\u*Þ\9c\88ÏÍÝ^Uį#á~¿Ü\99Ç#\b\95n0èåë\83y(\17~°#keQ´f\ 5ý²\18?\89Ͳ\97ó Ì{HöiÖDz\7fs\9dò<\9a\83\9ctz\86\11¦Ø\95\17åvy»¿´²\18\8d§\v\83\ 2\90\f\9arÝð¯g\18§T\93Æ>làÙQp4\12o·«\ f\87\94í¥CË­ÛÃ\9b&M#\10öó\9bàû\99r\9eì*j\9dîèp¹mëåÊÊPl"Ï\93\8a~\91\81þMS\0¾\ 2ϱ\1a®k¾ìÂ;lv\9bíÒª!Tc9\7f\17\98\9eI1òö±\1a\8fv\9dÉûÉvð\17Söcß:\92êÇ8ÿ\92í\91êÓì\90UÿÒ+?.ÈNÎê~<\7fvf"b\a\94ü\94§LKk\99\91Á=²\14\16î¸2\97\80\9er3ÞßÁoþK9\15Õ\9fÉ\87\0\15¥Fd\824¿c\91\9dÌ\ 4'ö{±Ù/ÓØ\9f\9b\965\9a\9e\1cÖÜ\11`\1d\87Ûä7\ä\9d(\1c­X·¸\8f¸\16mÿeÓ¶·7Ç8\añ\92ý.û7çí{\²èÚ¼\9crøè-\17Á\9fS?Iô'\92D\9a½uE\7fb\fÜ}áSÕÌÃU½kÚf¿ùߺU¿Ä9wö\9f\93\87Dw)ÙswÜ}ÌF+TÔèÜ~·qvó%Dõ±bÏÖ\8cÃIÉ\9b\14\0Ò\10­+Ò~]³Ò\191W\10½lðS]ßh2d¯ÇÐ15G2uôàÿ0\99Ú\e\f#\9a»\177õþí£·\8fU\11ò\89\9cÏ­úq´]Ú\98\ 3\8e\18aS+l\rÕ\10¿Ï .\9b\95K\7f\9c\8f\95ØÇ_g²\8dã\ù$[\a\95È<#)ÑLÄ|ø%çÀK\1c#ÚH5G=/»qTï6´B¥¶mÐû\1e43âs¬©\1fÖüùÖÆôP^\1e¿\16¯jÉeùιHÌÇ\9el½Ïêå1Ï1)q¾ªÿy[\1f,\80£ã¬ò°òã\ 5òéW\963Qâ×Ïò\81ð\bÙ\92òÕtpâ@ø¯©3¤ÁèëÛ\9b\9cÐQZx\19üéïõÛ¯4I\9caæ-s\8e쯰nÍ\95\9d6Ø4Þ³~\18\87æ\94\81ß~\ f\9füļy\ 4\12\9a\1fã\8bðS\9bWk\95ÝwÎ|\7fHÇËÜ\9b%\83W©ðÑí'¿ç\97_\98$!_ÄFÔ\86\13\9f\12\84\9b<ÇÀ'Ö\9e£_¢!\9e\16\98\18\95yÂ{\91\87\83\9d¡÷\13ýÐápö
+\83´TCà\8fm¥/¶ÎóeÛ z³3%TÓÃ\8\7fy±ô\9f\90\ 4U~\90à\10¿ú¢\8aÝ¢®Ê=@ÿ\96ÿ      ¿Ø¶#÷à{.I\8bg9õØ\89\v§\1eªñà\ 3qzõmsó¾Ý\]\1f-Íð)ò\7fo.ë½\1d?u|ìTRùns86©Ä\85\85ÝÛ\91ü®Âµ¶.ÒL\89!\ 1÷EøË´¾Õ\90\14´_½¯×ú]wö1\ f·Ý\9fa\f+\8dXN-ø\18»¿gÖ&¢Jî\1e>æ)ÿn×\84Îåã¼5þ¯¨\ 6£\ 5¾i\84E\97³\99\94iÉ3\8ag­T@ûãö}ñäðS½*þ&õ\10>ù²Ä!\7fþ\82X<\eê\87z\9b\8d¤\9e§ç\ fþöàÿ\0Ò|ÿÏendstream
 endobj
 endobj
-497 0 obj<</Type/Page/Parent 490 0 R/Contents 498 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 128 0 R>>endobj
-498 0 obj<</Filter/FlateDecode/Length 2132      >>stream
-x\ 1\8dXÛr\e7\12}×WtñI©¢h\ e¯âSÊIÅ\8eS[[Þ5³yÉ\v8\ 3\92°0Àd\80\11Í¿ÏéÆÜD[Y\97¥±À\ 6\1a}9Ý}\86\7fÝÍg»%\r\8fúDsü[ïÖ´Ý-¨Öt¼Ëä£\8c\vZn(/qf\8eMüÈøñß÷wÙr=ÛÐ&{\9c=RIÙvѯ,}º\e¯KZ,\96³y»\97¥ËÕc¿»¤Õ|9[\8e¤ã5¤ëÝl1\92.çÛÙ\96Öë\85Ü»\Á\9e\9aW\90nzéj³ÀÙ´\97¥p\80ÖË\1dv\94ø\9fE²`Ñ\ 2\ e¬{áb·é·²4{ÜÂÄõ\9c\15À\9d¥¨\95\95\9c\1d­!Ý\f{E:ZCºew\92¦tï°\86\9e­ÆÒѺ¤år3ËFÒu\ 6£V\8byÊÀ<C\ÒJL^q$R<\90\9f\rG<­D:ZãÚù\ 6F\rÒ!Ûò\17#\ 4\8e\19\8c[!\14sZàW\90Â\82Å#Ç\12!Íf»vÁw\8c\960\0\89\19\v³9\ 3\9cC%¤k\8eYZ\89y£5ÌËXÿ å;³õ\8a\1dziÌb'\16l\124p
-7ð\82U.\87%"¹X±5½lXB\ 67áS'ûi\7f÷æ\1döÎi\7fDUl¶\8f´/¤\14ðI~\9fÍè½vºV\96>¸£¯K\15\8dw?ì?Ë©l\95N=,3x°/°\1d\aþ8«H&P<ãáô\85\9eu\1dp\8aü\91>ÖæÙ\7f¹þ\984¬(ËZ\r\8b-\9fÿàpJÓA\9f\8c\9d¦¼D".\8aÕi>%)\93\87\94*\92w\ fÓ¢®\9d\8eô[ã\9e\ eMÀêåVÙÏ[§t¸Ò[çݵôM \9f}\ 1ÛH¹âåþAõ \91\95¯û\b\f\96ôêgô!\8a&z\90¤Â¥ \9euA¥rWj\82\FÖG\8e\8c#ü°ÇZÕöJ\85º\ 6\96\81T\81°E\13\10\ 5¶O\ eS¬Uþ\84Ofí%H#RPÜÿÔDQ\83\83S21PUûèsoÅ7
-\11\1aT]\84©¨º\98xÆ.   .E\9d\9f\9dù«Ñ\81\90_þÍùÊdkô\94{\17\9a\1e\9c>\99gMMuã¢j¢w¾¼\92\87Él\87©éPû\vÛ\9endÍ¡º²bà\0;Ê)=é*\92~öö\99\1d¢ß\19^±q*j{M¦½\96Ö!¸\85)Èù8£ÿµ\10CáÎ\16\9a\83\8cÀ#¾Ùn÷8\15\býyÏ\914áÏ\1f$ZV\ 5NÄÑäFÙ×\0Pk«U¸\81^\9fpRÏÊXu°\18+µ/_S2BÑMì¾\aSïÆ\811\91Ϊ@\89h\87\16\ 1\1c\ e8\16\9fÞÿû÷×\8cxÿñ_/E½\17\88ÎÙägRÖú\v\82vlj䨦B?kë«R»\88º¹±Üó\96p\8bÄO\9e>E}T\8eþP¶À\ e$>ª:J\r\18\17\81yF\81\92\1e2TÐPp¦\ 4v¹dF]\ 37QðÇxQõk\89\0b|ë\ 5\8c\81/WRä\9aò\0OüñÆúJû
-I\ 3ºcm\ e\rÛW©\98\9f\1aÆç\8d-\10\8fZ«â\8a8WVåèKÊ¡\17\ 6\92\ 2R\\8d.T°    á1¥:é\ 4vN\8f¢£©\81®Ö\89\9b˹ø}õÐTôd¬\95*\81  (IAi\88ø\90O^)·> \1cpq\80\81©tÈ×\ 6íQYd\8d\v\19\8eJÉ[S\9a(Í  \85\1a\1aN§4M\82éO_\aà×ýþã\eôkl­ÐÕÐ\r\8eV\7f1\8cäJ×\ fÁD\89ÎÑ\9c\9aÔò¦¸XâÅî\96¾0¨\e¹nF{äG\8a©\ 5¤Ô\ 2à\88þ¯\8f\Ö7þs;ïÒ+\15û\90Ío\8av1\aÿh\8fu]\ e×8¸æË\e\10\fài\ 1\8b\1cÉÑ\9eÕõH§ÊäO\b%BÏ \8agNpJ[\aÓØÔ\ 2Ñ1èÐF\82)4ù\ 6qj*ù»ð\17\8d\8e¡'á\1c
-A\97\88\rΨ¢`Øó\18xiÙ`;OÊ£V¸^¿j½²\1eZز\8bº~#<¸74V¦\8bD\1f  h'.\978°ÔÂ\12¾r¢ÛtM ü5uȾ£¼mN\98£S\10\ 30\196\99YÂxÞËÜÁØçy\7f¥I{ÍäGY¢î\14fF~Vî\84Ñ\11\19¤¯Íüödb\f\9a&é²MK\rîY¬ò+ýâ LFÓÇ\1a\f"íê\bÄýdFomðiøqQß\82T\ 6ßgÐ\ 3Á;Â$\8cD\1a\1e]}\83î!y\19Ò(\ 3L³¬þʦ\8am\8a\82Â7ïz\eH\17\86ÙÑ\84G¸äH\1fR\8ez\1c\9eÓC\aêÑhø\ e\82!\ 5h\1cOkô;Ì®~àv]¡/¬Ö\88o\fQ®¡nD2*áâ\8dó\83Q\ f\18,\18úEß\7fG³&p\8e\fóÄ\15\8e\r\aö\eÐ\ 4\8b\ 4\10ønÏùÁÐ%«Ox澬lÛM@C0H%~\9cGöUÈO\17ÔÁ4¹º\e]@ººq¢\ 6\8bd*ȶժХªû>øUFîGÜñû\98Þ^\98)|\9aÒ\19S\13ýl
-.BþðYç\f\83Ö\91ÁÞTÕ\ 3ÂF£\9f\83Ç\88éj\ 1#\90µp_×ö\98ú\13äàEà3G\95£0Ó\94\bg\ e*c\14í  ±\15\98\9f<þúF
-ºyÎ#LòpÐÖÀpÄ\87);.h\93\84\14   aMõ;ÊH\ f²\1cÄ\99I\1a3ý4µ¢\ 1\18àF©\9e\90å\9bTäà)\ e\9cP«§!½\15Ó/&déHBRâà\90è®\84Aw\86«:T\9a)\1a\ 6¡ó\974õ8Z\95vÒU»©óÕ\90ïf\fÚÛ?õ°å\8c~\85Þ£ªº\f`¼qmõXô \ 3C*ÿ_/ã)\13xÈ\$¦ÃA\0þ(\9c\93û\95\95\9c³æ®ï£#\97`Hi¢ò@èÌIÙ>XÏzAÅ¿1wZrÒ!\ 3      \ 4#      ¨-ÿdtËü\93\9a³¶UzE`\8cI\87\93\8e\96_g\847       !ß\18\15©\-i鼺\1d\93\ 2\f\98v\93áÞ\833Þw\12;ÅÌ\93CÌOÒ[\8e4\8cg\r\aÛÓ]\13Ü#\9b¨ö\81l\80ãÂt\19\1fh=æä\84m¸È\9c\ eüK[Ë1BÑã\87    \ 1¦\9d\fFà1½¹\\98CáÕÀ\80¶       \8c¸YJ¼\ f\8cÙ[:ØT'´\bÖ!\19\1f%\8cùÉ\97\94\90\89Ä\1f/\16qB\93\14WYLi"ô/I\ 4ÑL¿J\8frb?\84«£Ç\1d\8cÓéEsh\ 2 Ä©ô'¨jî\1a\13\8chËùjI¦ôFÍ/E\94\93-\Á¤aÕ'Í\1cæU:\ 4ÿ¥&\93wÿÀ\8aøý¬Ð çmßxóîqüj\8eï\18äåþµï\ 2V\8fø\92æq\85ï\ fx\eçö\97ýÝ\7fîþ\ 6w\86Õ²endstream
+543 0 obj<</Type/Page/Parent 536 0 R/Contents 544 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R/Fa 7 0 R/Fc 9 0 R>>/XObject<<>>>>/Annots 141 0 R>>endobj
+544 0 obj<</Filter/FlateDecode/Length 2810      >>stream
+x\ 1¥XÛrÛ8\12}÷Wtée\9c*\89Öý\92\97©d+N<5ÙõÆÎf\1fü\ 2\91\90\84\98$8\ 4(Yóõ{ºAR¢\13ïNykb\8d(\10@_N\9f\1f\17Ãh5¡ÓG¹¥!þ\9b­f´X\8d©Ô´¹\18ÉO#Z\8ci2§8Ã\9c!^j?¾|¼\18\r\94æÓQ´ \8cF\93e´¬\9fRº»8\7fÆèr\18\8dÎFÇËQ4lçNÆóv%\9e\9cÑd1ì\8c.VÑ\1cÆN¶Ã%\16
+O²í\9c7jFÇÃ\19¦\9e\9f3\1a\81Óè\14f,Û¹Óé¬]IV\9e\r±ãl>\8dVìîr\86ÿ\87'\19={ÆÊ£Igôü\19£ã1ï#+ñÜóg\8cNæ¼ïiôì\19£ó%{ß\8eNÇÑ\98f£¹\18µ\9cð\98<\88M\12¨á"\9aÀ`¬2£\99<ðØÙcFó\ 5ÏkÇNY\96o\f\ fÄx\8a\14.ð¹À÷1þ\ 4&20â\9f2\9aN`÷T\1ex\87³Ç\8c0ë|\8c§M\16ìI=-<´Ó\9a1\99v\1a\93i\13\ eÞ33Æì\0§\93S\83¼Më\aYðô\98Ñl\8a`\84\17yìì1£Õ\18\11:\8d\8d±Î
+\99\1cáW\84o2a¿å\89gN$\ fÍèt8E\1a\12\16\14Øs;ßß_\]¯P+pá~\83\12\9b/§Ñh1§ûDjkH÷ñå(¢\8f:×¥Jé&ßØ2SÞØüÍýw\99Ë9\95©\83ñ(ZÍg\98\8a\19\98óm§<\19G~\87\8f\\1fh¯K\87\89d7t[\9a½}:þ\1a\16YR½û`´\8afc^á&Ç<Mk½5ynòm\9f\1f\91á\83â\ 55\fñºÌµ§ßªüq]9<õi}¤w¹Í\8f\99­\1cýÍ&Ø\8fT\9e\9c½Ã?\97\85\83\88n<9µ×     e*?Råd\ 2¥ÖÃF6mH\ 3q/¹,\94É   ÿxo­ÊôH\89::vå ×¤\12øæ\8d\83¡²!¯D¾Tñ#~\89ê\95à\9b¸ö¾ò²\f&öÉxGEi½\8dm\1a\8cu\1e&«2q}Yê`ü\ eo\89ÿäu¼ËÍ\1f\95v\84<ð_Ì[\ 6ý¥Øæ®Ê4ìÁì­Ùkª
+R\95·¹Í\8eda$ïlÊ®oëÒ\1eØô°!/ì\8a\8b\áõ¬O\8fºð¤÷6ݳ?ô\95Qà«\y\9d\1e\83e?É\a%&¡Üú\88þU'\1eU\1a\8dûTTëÔ¸\1dÂ\8e\80\8eV«e\9fÓÚµéá\92\13gÜÃ\e\89\1cçdcb\ 3\14\96:ÕÊÁͽ2©Z§è\ f¥Í^Nóõ¹µÆÓN%@\96Î\9b\85\12ªr\80Evúø÷¯ôñöw\98´3ñ®k\94JS{\80Ù\9bªD\JJô^§¶Ètî\19{\96\7ftÏÓ}géÎë\8dÊé\9bJ\13¼\81ðzUzA\9dÉ=\80űƸÉ\80\ 4FãY¡`Irvã\ fªÔ\88´\rf!\17س\82=GR\94\1aÖ\0\8b\85\ 5¢\ 1\18øÒ¬+Þ£P>ÞéÖª\1aÎ\0~l«4!\95\96Z%GD¢HU\8c\82S9*Ý\91ÀN1\86sW`oxh2µ\85\r\9c\17\ e ¢\8d)\91\953c\v[\f\0¸G\93¦\ 2'X\0èJÍ:\8f\1fùÝ#Å©uÀ\r¶r°/\10É©ÐØa[\1a\94½J\91\ 4F?Ü\94:IMf¼T.Ðíª\18#\81\f`ù#»ÿéþþö
\83Á\ 2E\8e¢Ù¤úÉ0@
+]\ e\9cñ\12\9b\8dÙV\81\ 1úØJ¢Åþe61\0XM\r÷°\83Q×E@\83\9b\10\9bÞp-\88\8fM$\ 4æ\83Ñð\19ÒÇÃáð98°K\ e_,j¶\ 6\13\a¿0ñ#B\83Pr4ü\8eS\14\ 2ß ÇW¥ \86Ç\e\9a\9cI\10½
+\8eW\85|Oì\ 1ësÊð&ã]9§3\ 4\ 4µ\85·T\92 Q]\17\85
+\99®7Za\eP\8dJ-\0Ê[\1dÔñ'\1e`YW¥\\9fx      \\8f\7f5¿s\15!Ù5R`<§¢\ eS\9fÐÀ¤òOeø®Ú\82Êû\84P\8de#nNg\r\86;­´\97\97#õê}z¿Ê#JA!\92ñNå[°\83gä¼Üb깡Eiêq\18®®UèE\97<ªâ#}ȱ\9a°ìm\89\8e\15\eÖe/¢w©³\81ƹê\9eãHBÿ\1d-J \898I\ 3\14\1e¡£­¸ \85}5?\95Ïm(Ø\ 6¯»{\92N\f÷ß\1eâÝÍ\9cdH¯\9fgèÔ!;ÝOporî%°\ 2ÜÚ4\87¶ü\9aL\85ľÐs\9d\9cY\8c\9d8í7\0©¢ %]3[¼\9eH×qÚ$w\8cÌÐÈ6\15Çê¹3÷¢\ 2@HÈ-om9äÜ\13R½Ågl³"­k\18=\92»\ 2G\85S\80FÁ©>³S¶®\19\9fá \80È­aMÁÖ\94\99*\99\8e\9c\1cí\ 46¢ÖÈ>íÐ0\0ø>\1a!Ùõw\1dsêjË^\98Ïþ³Ñ\r\14x\1eS N7m5£ñ¢}nTìû]³\ 2Õº\1d\a\89ó\ 1N@¬\ 4\89[\8bo?     é9ùH\×:5°\9bi\ 3e\ 4k8àøCÈ\85\1fB\89\9dE¸¡l\84:áF%Ú/Т7H.|ÊÔ#\16\ 1ýkôº5¨èñ\94 â\a¦eΪg\b0\82ö2hs\að\98Ùîü\7f%\88ID\9fì\81\12\vx7\81\ 4½3È[TXô¿S\ eþ7Q0-;få\83Äã4\15àÛ\88<a:H%y¼vK %ðcrÁ\85\báÆ \90©ujy]h6ÉQÝ\81Ñ\15¤e"Üh»ÏÔQlí£ÑµB\fïítZ\ 4)ÉX\116\11ú\88\8f\11Aq\8aJcÉ$\95\93\92\16ZÓu[ù\91ów\90ÅA#¡GÈkÜ\84\83þ\95jÝkxT\ 3¯Q¶À=\97Ú©¿B(¸\9a\8e\13rf\9bK\83Í=Ë\16h\f\9d¦\1c\94Ð2¸   ¢}H§\ 1æ\82¦=°j\80\864\90&\92t&*    ð\9a\ f\17\edc\8búäYÏ$`·&¸%?\85\ 4ô$Þ\10 ¾G½\10HyèSO\14N\18\11ø±ÄÈ,"Æn\88`\ 4¿¬M\8eº\80p\vUÚC\ 1rI÷ÐäRNI­\9c\84\894\vdè`Æ\1d·\ 6w\84Þ{jÂVk±;Í=\1eü\a.ã:   .±\ e`)\9eh(Ä\1f\8b\86Ð/ádÕ"ÍäqZ%ú-{\8fk\12>OÕÇ)¯\11(\16\84¡ß\94µüê¦\8b½f®,mJ\15àg<\12\ 5½ì}ñöê*¼\e1¬Ð        #[n¯èáÒí \7fâÊ¿m^+¢âêá\rPÇÇ
+È.ÑyÝtðÑHÚÅ\86Ê
+\92\80÷Eø@¸\ 4=\ 5\0»\88¾è,\ 4d»e5YW{\1cÚó`\16Í\97A\19$\97\ fãù\82x\83«ëº1Ëhëü7\9cÐ
+\14\91¸Æi\b\ 1\ f\97¨Mhn¤·\16¾\8d*\ 5\ÿ\ 4\91\99|\8fc\1dË\96\1eÎk\83uµu½>ý\86\93Ç]\\1a\9c\8aØôO÷\9f\7fÇ\97Ü\1e!\15\18\ 3A\bw}>\98\1cj\f\83ÚÇÑÃ\9b`ïkÜùl\93*U%Ì\93d\9dU\9b°®\88\8b\80\9dæ(IN{ô¿m \189\9c¶¿\0p\90\eQÝNCë\ 3%\r\96\81És,%¢¾ëSU$\82©º\ 6Â4:Øü\17Ð!ÚÞ¡dÉ\rÇÍÞ$8®HU·Öü\1f)m\95~hø
+I}¸äã\ 6\8a\v¶àªÄ\8e|\1chËCZX8\eè\ 4\18ýI\12\86,0_BTS±a        ©Ï[]¦¸TÈpÎ\12\98|Ñ[Î\ e}x*j¹\aA\1cx³[k5]0~¶ávE\ esÂ7Î\16`E°^\88.WG}\90éÆ¿»b`\97pÌÇæ{Ã× µÚ\ e]ÿêú5\80»iÎ¥\81-Y\ 1 \9aäÔÛFöáRG¸\19pµÂ\rUT·©×\aúãÍ5\bp r03çóµ        {\7f\84Àpµt\81>|\1c4\973ä¤\8c\1dà£öÖ \a\87\1fP\14\89)\83\{½ý\9fq,2\83p\80Cµ>\ÞþãîæßÂ\19¸<áû\990\86k\8e׺ö\95)6Æ©ÉfæO9_   \ey\r!\fô\ 4"@íò-ÓÓq\10 \16.\ 6 +`\92ä-4E\9dô\84(_oÍ;Ü5Aõã\9e\8aÓ%\8e\96zÀç×\9aî\ 3b\85(jaðSdþ\95*laÉÂ\ 2\95\8esZ\12î\1d¸¦øî¢Â©Z\81ßs>Ûkøú57O¯wî\ 3jéØ\90        \98æÐôÊp\aÅþ\9eî\19кùÎ\ 1ÚN\90ËíÖ\80ü»\15+Å^à\88PnªT¢Åå\8a        è7Ì\9f\ 3$îµÀøÌW\9a
+èªÝó|Ptg×)²5÷6À\9eÛasÛ ã
+\f~Ä)\ 6Ò\ 6I{ÒÉ_3g4â;áÁd\18MÆ4À=øx\86_øb\98^¸JæÛüår\8a+h~\8diîÃýÅ?/þ\ 3ÄÁ\13£endstream
 endobj
 endobj
-499 0 obj<</Type/Page/Parent 490 0 R/Contents 500 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R/Fc 10 0 R>>/XObject<<>>>>/Annots 135 0 R>>endobj
-500 0 obj<</Filter/FlateDecode/Length 2221      >>stream
-x\ 1¥X]oÛ¸\12}ϯ\98\9b\97u\81\1dÇ\1fû²h/\9a6\8b\16·Û¸Øûà\17Z¢lÖ²¨%)+Þ_¿g\86\92\9d¸)°@P4qD\8a\9c9sæÌ\8cÿº\18\e:ýpk\1aàßíü\96¦ó\119MùÅP\1e\ri:¢\9b     ¥;¼3À&þ1ä\1f_?\Ü\fp\ 4MnçÉ\84v4\1eÞ&·í_\ 5=\ÜL\92\ 1\93d\8cÅé<\19\7fðÚé,ùÄ÷cóx8JF4\9eMñy\84ÿb\a/\8c\ 63\q¶\80mc\9a\8f±¼£!Þ\1cÆ?øø'\7fbm<O¦§µw\8b\8bë»1Þ E\ e\17'³)-2ñk@\8b´÷Å\99½}<üâ©Ô\råZ\85ÚiO¦L\8b:Ó¿¾Y|\87\1f±[\8b¬w_\ 6½v*è\8cVÎ6^;Z)\8f¿R[æf]cÉØ\92T)O\82³\ 5ÕÁ\14&\1cH\ 5\84\84 
-$z´    ¡úõú:\1e\91TѢĺõõó7:ìz´ìù\8du!­\83Xøã¡\ 3ê\ fo\0.LnO¯\92êgÇ-ß$ô.zÓ\8fÞ\ 4§RS®ÉæäêB\8b?¹)\ 2ÜÕy®Óà\13úªw6h
-v½.°7a[¯ïÒ\16éþ4\99\r©³a9\9aL)nèB!ëG\ÿÔ+ªÔZ3\8eA\97\81âmlòçpÓ\1eAY©²Ô\8e\7f\80Ù\9b¿õ\15bµ7Þ¬`æe£WýU½ö\97Wô»Ú«\87Ô\99*°õ\ 2ä  \93\8f\8bÏ\9fð¸´\aU¦Ú_Qe«~]QcÊ\fQ½"\1dÒdùæU.}¶Y](\a\13ÏÙ\116
-F\15\ 5n¢Ü:ò\ 1\16*\97\91×!Àe/x×L®ã\93`\91\1eÞd\1aîâi¥\98\84g^\ 13öÅ[\92\eL\89\83\v\8e\rÕU&\9cU)Ó\13·òNjlùK @ë\1ag\10J8oö&«\15Hûôò×\85öãbñåz\88tMí®*\8cBp\97½U\1d¨´\82\ 2Ù\8a\8dÂ¥¼é\98\81
-jàëª\ 2Íu\ 6\86¾\14\vdpÖû)·:ò=ÄS\ 4ê/Ú\15ô_\18\82<eÆ|Õk\ e\12½\7f¬\0¯\17p\0\b\13\9fdt\8b-'öZ\83\85\0\16)M;ëΣàmµ1>\984"\8e\17òB?ÊmÏEÂ\1fÊ \1e\ 5\7fÂí{ckO\b\86Xñ¢¿\9dG?uù(S»Ê!®L<»5\9avªDrí$±:\89[öt²NÀ%qû(c¼ß¿
\ f÷w\94é¾*ÍNÔðEWþ]èÞ\1d*å=\9b\7f ´0é¶ÏÊ´eJ{Ém\ f.©½5\99o\1f K2ã P\b嫼ø\\17ÁôÃÆi\95\ 1ÈeïËÿ\1eîÿ/\99Y­=\94OÖ^\87Õ7äY?­}°;ó·bF\8a4\ 5\8dT\ 1\7f¢>\80\bªT?R\8f«\ f\8b%;/1¼\\156ÝêìR\1e¿Êí·u°ýL\87\88 ¸ët\9fA`ÐQ\ f"\87EA(ݨ\12f¼"À÷\1dQ½Y³\ 4àÀ\8c\15ëJnV\14\­)S(\0%r\rê·ì}+Íã«\|\8f\1c;tB\ 3\15j¤è T\17\12\0.ßT!,\9e5\11òÌ\9f\81o¬ì¨=\ 6\1aû<\93Y\ 5PB\1aíòº`ËÏ\84\99\93\1a¯#º,¶}ÄóEÈþuz\7fæ|ð;\9c\83\12ñ¬oQ\19ÈzE\85Ù\99 \ 6ÇZÂ5\11\99Áe\14«,b^§5Dÿ@\eË¥ 7\8f:{ѨóD\9d£ÁâVª?\9a%Ã9õo\86±3¯\84þäÊfp']
-a/\7f£\8fÀ7³¸¢í´PuÜö·¨æ]/\80neÄmYï-¡\82G®Çc\90\1e{\93¢È\1fk¾B}ËC\13ËCº!u<ù*\96\ 4t\8esÃ$:éÚ4¤)¥ªäÂ\86\ 3\b\r6\9fÅ  Q-\99ø`z\14\11h<
-/W\ 3\8b\8dáþ\ 3\fáGÜ\vºR\87\84\16\.Úk±\ 2\ 2ù­l\11\10ø\88\1c\rÅF\1eÙÕwî\9føóáìúR\8bÐ\b\ 4\9cÞhmvñ7\ 2\aUæ®\ 4nÄë\r:O½QE\1eãÙðµlU¼r\ 3X2[¢\84Z\9c\12$¯äNî" lþìê\15Tµs5z"dàÀ´\9d/|\ 4É\19vQc(\82çN\ 2¾1¤]Ø`%\1a\90:Æåȱe/\87&7à+ ]¾A{\95ç&E\98Ò\ 3Â\94ªt#Ï\85\98\16N8\1còc\16ñB´à;\ 4\93\ 3/\96d\ 6\1d©ãÒÆ®3L°I¥è6 \18ÐP ba!\83\e\95ê\89S\1d'\85²m°Z
-{ä\ 5Â\9f[¨3Â\ 2й1W°\18û\9eÊã÷ºÜ\92æ\8cãº`Ë\84\1e\8c´q\88Oh4Âr°µ;Ç;¶Ûèã\11PÎG\ e]G(\89\18LB#"JÄ\r\ 5z\84ã\85\15·uXÙ\1a/C¡\10\fȧ)ÑOƪ\8b\13\91\8b|u\97\ 2g&à\82B+®¥\0\eÍ F\95ÁoSÆ3Ù­\84î\ 3\87\97\13z\8fVVC/P\ 2àý¦4\7fÕ\11ê\8c\13\845\91Ë\14V\9b\8dáð#T0\rúô\82÷È3\19\8dö\ 6
-\ fÇùln~\9e«jlR\19\9cØ!vu¦S Äñ$>·É\8fJ³emo:I\ 2\98­öu\8fÐ\80þL\88Zb`,T\15â\r\862îRfY\1d\14ú\rà\17\1a\9bÛ"\8b3Ø)Uî\8có\81Õ¨ãkª]P\88&ºN\96\f\89,V9 ×w\93vbêQWd$9OC+\8f{ß¾~b¦\0Þ8\ 4µÊÀÒÃÜ­ÐXÇh¬\90?\82)îÚàE \7f\16÷ÆÖEÆ\8dÿ\1a\ 1ôÐÿ&æ\91(\1cJ\1e:)Ö9>\84\9d¹rgw`A\94E\8bú\99rõÉè²Ýpù\9f'DFÂÅa÷4q¡åç\1e\85Áã\88¯Ìºó\847óãVêÁJ³EÍ·5º¡tËM_\ 2\91\ 5»¸  A½ÒEÅ|,l@\17p¬*Am\99¦Ù\1eó\ 54óÌg&-\ 3\95c\0¢Õ\ 1\9cÆ\8d²çù\97\1c2\8e\ 3ëc¤\9eï9\rà \83ÇdBHAI_qN<s\9a\13\ 3\ 2Ï\93]\vι\96>h0\1ddìÀÅÄ\v\ 5°àÿNæ»\96/|ùS~ð¸{Î\rLî0\ 1Qæê\86 \ 6NcF\9873_Pó¤\8a°Û\ 6f±w\8d\81&Öç!Âä[\1666z\ 6üåÌ3¹\9c\9dI\15A6\ 4k\89\eS¶Ö+°\ 4.d\8dÉÂFª Óð\1aÕºÓUU`\18E¹­º\92'ííYp<4
-C¸hGû5\0ähÃí\12\1cÁ\94\ 5)a»ºÖÅiôÆü\ 2ncáç\8f0'ÖJñí4QG\84\ 5\f|op^p³z·;<9æ4;?ÕMi_\18Û6´l\15r¡<HÛ×N\8b(p¨IbXÛFÍÚ¼\1eÞ\8e\93Ùí\ 4ß<I+ÕAs'§\95\ 15æ­GïN\7f0mx\0exúÝ[ýé`Î\9dÑ0¡\ fqîD\998\8a<o\1dÏ\ 6Él6Æw[Ø6â'ï\17\17\7f\ 3\9e¤5%endstream
-endobj
-501 0 obj<</Type/Page/Parent 490 0 R/Contents 502 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 142 0 R>>endobj
-502 0 obj<</Filter/FlateDecode/Length 1894      >>stream
-x\ 1uWMoÛ8\10½çWÌ\9eê\ 2¶jùÛØC\90\16m\11 í¦­\17½äBK´ÍF\12]R\8aãýõûf¨¯¸\r\828¡)\ egÞ¼y3úu5\8eÖSê>Ü\9eÆø\99¯ç´\OÈiÚ]ÅòULË       M\17\94ä83ÆCí\a\9f\89Æ´X.¢       ÍVKü?Á¯\9cí\9e\8aùùo\1f¯æ«(¦ùl\15Í(§å4Z×\8b\8c¾_õ\969­Çí\83¼×[æ\14/æÑ¢w°¿Æîz\1dÍû»½uN\93É\1a~\ 6\ fØ0û>\9f®`ïwßiº^ÂÑ\8b\8d\8c\964E\f\10ÏgÑ´^±½þ\9a}\89\11bxVv{köeÒZâÝþ\1a»óõóÝÞ\1a»@dÞ³<\99O\11ÃtÊÈä4\1d#©õª\89r\ 2|Ç¿\ 5\83´-(^Ær,@\17VÁ]\86²Ù\9dÄ\9cØn·¿\86C1»ÛßíÖØ\9dÅ@²ÛeØãE\f\b/Ðå\8dÕ\18Þ\|ÿvsõæ\ 3,Ä´Ù\81\91\8bÕ\926©ÐpL\9bdðÖ\96\a²;*\ fÆ\93)\1emö¨=)J´+\95)Hå¶*J~b_iïOÖ=\90*R2~È_&¶r^\ fiç´ÎÎX\16;³¯\9cÚf:z½ù\89«×\14ÏÂÕ£)\87²I\aÀ,¢wª ;g\1eíÓ\99rõ )7¾Ä_\7fM\eö%µð£°%y8\90Ò£vgò\89ÑEiv&©\8dwq\8d&\1c×à&)+\95eç!\99ò\15DZÍT\ 2\8f]I\7f\8fî_Ó\rL\9d5|7%B \95\9dÔÙÓÑzoà2\95\96\ eêQó9gUJ®Â\97*IL\8a{Ù.ìYس\8e\92\83\9ac\1cÓ(\9e¢6p½·¹\ 6\92Å\9e\88*\ 4\14!\1e\8dªæëhom*G\13Mg[!ò3.)\80<®öUrÀ3Þ \86ÒX\80ÏÑç\1aþa?¢[ñ¹t&y8_\|r¦äkÙaÏa$\16\88\91\16Ø\90\95D\9bGNJ\1dªÉL       \8c8\91\f±M\12åq¡D¸×%íTæåYX\ 5\1f\ 4m\849Y\84\ 4¾­Ê@\18\7f°U\16ll\ 55³g\ e\80<\ 5ÂÀ_<¦Û4·ì\90à\80\87x·Ëô\13\83\1fÜÁ¡¬J%\ 6\9bI$\a\9d\1d\95t\98Ý\99­ÃÏò|Ä\ 1°±EÎ\ 3\ 4#A3v-M\1dè«SR`\95Ö©Nq_\96Ù\13£Æ\99`Ì*_ÚÜü'©q\97w\16 g\96Ib"º\1fÈv+æ"ÓPôÁw\1dbÞ8[!(\0d%1^'\12õVãÎçgEìùltÿ\9aw^¨\99eD\9fÁ?gO\1e\99\95ò`p½\ 2A\84\97\8eèÇ\ 1õ\12ÒsK\95o\99º\80t\80©Mé\81b\88ê:Üû[9}¶)§²¾\94\8b\12LM\ 1\9f\94I8\ 4\15\14m\19\bW\9f\e\1a\ 4i©½ÜU\85\80 \98\9cý¬ÎHRР\84\91ê_¨\04QÔ\19rÓЯ©2¦_ã?X\94sÙä\16%\ 6>y$\88k\16Ì>Ú\93v»*\vÄb"À}EE\95o\ 1`мb\ f\8e\1d\0B\eâO\90\80Yóªl®mX\7f\8b\82LST\84-`\92\8e\8e¥\v÷×5m\rènvB&à\r·²Ò\1cáKc\1a\82é\1ayùtó\85N\ 6ÒÛ>\95ØüX\95\b ¹¶\89\102ÅybNw"Û\94\11\16(WH]]ELèÔ"\86p\1f¸\9d\83 £Jr\93)(X#Öb\aXsîzbV«"ËsÑ\12/¸÷\ 2EWÐ(Ƴ\95»\f\98\14À\ 2\81ï´¾\ 6)\99o[\8b\ 4*:)çTQ\9e¯é\9bÞC+\9dÔÖKTì%¼¶\9a\12\1a\ 32\89ûÄóß\8b\91>~ù\97>êB;\95Ñ\1dêÑ$ô©vé~ðñîS(8)ÀîCJ±\16[îk,\r\10\80\1d!\9a¹MYz\10RÊN\9b-²v\81\1cê\903p2þÐùHHn.2%<¯\83\88è.Ó
-\10ù \1c/Eò\ ew;³?\94Ï\1f\ 3ç\83ÀpÍH1\98\ 2ÿæ¡\91 \974(uͪö@j\85C\13ó\11ý#\88\12ßóæ\ 3\86\8d\9fnß½ÿòý}ø¶Ñ\89\ 1í¸Ø¤\80j­A\19×\12\9e6DnêgSó"Øèd£°-\15.Í£H\99{\ f\10\9d!é§cÐptïü\98\19¨\10bÅü¢\1d\90ÖÜgÁ.\14\85ų\93ô¨Ä¢®\9dV\19ßÑcy\8eÒ9\87á q\10=\11Ov\94$\8d\ e©ªç\156\83YÀøËP\98.\971 :C\e\86óG$é¯ðÀ\1fç¢5
-\88\82¿\99ÁL\ 4æqûc6\réÄáAÂnñQW \8cÔs]=ÿ`j\8eb4
-       ª÷ùÜ©^+ÿ\ 1^÷æ¸\93ΠD\9aÅC\98\ 31\86\92bÊC\97\17Q\13Ã̱Բ¤Ô8i\876:¤muævêí®Dq\8bû¥ö\81²\1dï\1a\14YÿD\9b\9fyÀ¶\ 1
-\85i3KG'´{ÂT2*->\91\b\8fö{Püsÿ\1a\80\ 5ÉÕÅO+\ 3Aw=\ç¸{É\86\be$È2¬ìkå\83\ e«6ä!q\v\90\83\7fP\94ÔÙ#\1fB\1f±uÝ·OµÅ(Ì\17\8dl³Ã/n2úâ-*¢ï5B/¦¥\ e\8aAThkEÊLG1ÐIoGNc\f\ 1û[\9c%"\99Yy6\0\16zàx\ 2Ä9iT¡     ö¨\85\18À.¨så.åKª¦É\12¦STT\8e\0ÊKÏ\ 2\eÅjZ%åP\94.geâ\86â\91+\87AöxÌ\84
-\1d¼¬0ìM«{?.¯\95¦;¤\ 3Ú6<\1fâ\85Cq\7f\10]\ 4óO\1a·£\ 5îÌ\93´Â#ðÇË\0\94\9d['غ\95©\16Uéñ¦Âã\85\ 2\91<ºp\9d\8eU],ü¦¹\9a/h\11/ñºÔ\9b\85>8Ì\1d°\898oü\ 3\0þ
-CÜ\1c¥ÎG͹Ñr¼\ e¹l{Ëm§µ\9cÒ\19^ÄV«\19^·`}Êß¼ß\}½ú\1fqLàéendstream
-endobj
-503 0 obj<</Type/Page/Parent 490 0 R/Contents 504 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 153 0 R>>endobj
-504 0 obj<</Filter/FlateDecode/Length 629       >>stream
-x\ 1\85SYo\9b@\10~çW|oq%{Ã}<U½\1cõ¡jS£F}ÜÂ\1aS/¬³@¨ÿ}f7> RTY\ 6\86\99Ùï\98áÑqY\16àzÑ\15\úEY\84$ó¡\ 5\8eg_yH|\ 41\8a\86z\*2\17Ï\~Þ9^\103\17q\18³\10\r¼Ègþ)\92Ø8Ó\98²qÄ\82iv\127ð]\7f\96\9dÆ\94õ®8æäiLÙÌ\9bá\ 6YÀÒ\v«0\fgÙiÜ L]\16OX\91<ÄA@\1dÄ8`Ñ)0 IF*¯¹Ððµ\95Vkp\8d©3±§^²~\96\99£Ü\98x5\bü\80%§ÈôNcÊ&äî${uÝ>\99IQ>J\8dÆ0MèÙ§¿\9dØÇܹ]gð<ä[\1a^\9c&ÈK;1\17y±ðXÆ\ 2\86ßjÀÈÛ\1e½Â¨ô\1ecÝï0tïßå\7f©?¼ô¯|3×¼\<\b)\97Ø      y¨Û
-ýN \17¼AÝ\81Ë\91\1fé\86\12u)8Ã\83À(d¡\1a\81V\8c\93\90ê t·Ä\81\17{^\99CªA\ f\1d\946\98.Vdµo\90JU\f\8dh{ÞתŨë\9eú\186us\90G[;ßArc\81Jôà-xQ¨\81dQãF\rº\10k¥+ÁZÑÏ\eÏ6.¨©DÃk\89\13\b©\9b\97Û]·8W%¶\8bd¼b/ëî-,\86|'Z\1a\13'\94·!>\9fͺéð\8d·\ 3\97s2\17îì\ 4}\1eÑ÷¶0¶cÇ\9f\ 4xY\8aÒ\88:       ²ãZ\9a\177R¾\94Xk\8de¢ëþ#ûÓ¯\rñ>¨®î\95~5\84\v\9f¥5³W4\8b\9dÐÄÄ mk2\98¿2©\eê\9eÿ\91´C¼Ûc«´áeåÜ®ÓÓîyQÈÒ(¦(|ÙÀ\1fº~Rÿ\8eXkñ8Ð~È#>t{\12y?\88ÎìJgPVç¾Uâff\9d<\86
-Í%¾¶\ 4Õؽ2¥æ»OÓ\90¾\12*\vÍ\9b/¹sï<\ 3\10»P|endstream
-endobj
-505 0 obj<</Type/Page/Parent 490 0 R/Contents 506 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 164 0 R>>endobj
-506 0 obj<</Filter/FlateDecode/Length 1799      >>stream
-x\ 1}WÛrÛ6\10}÷Wlõ\12g\86¦u³-õ¥cçVwrQ#u\9cÎø\ 5"!  1       (\0(Yýú\9e\ 5HIfì\8c\13Ù\14\80ÝÅÙ³g\97?Nºéx@\87\ f»¤.~.Æ\17t5î\93\95´8é\85¯ztÕ§Á%e%Ît±iÿÁgR\9c\19õÓK\1a\8e®ðw\1fÿÃY^\18öFÏ.Ô6zlèë\87\93Aw\98\8ei0\1c`sI\83þ%~ǧ\82¦'ÇÏX\1d\í÷\86Õ£g¬\8e\86p{8;ìöÓ«½åáÅ0\1d\1c­r\88\83A7\1d\ 6¯ø\15\1fØìÅ\98½Ôk# t´vôXR¯w\99ö\8e\16Ùf\7f<LûÏáÑï\8eá¥\ 5Tÿ²\87ݽ>\7fòí\19ÅøÄ\81ÜÌNÎß\8f©ß¥Ù\ 2Ù¸¼\1aÑ,\ f)À7Ùi?¥[í¼(
\95ѯgßÃöÞ0n?\e°ÕY\8e\94îV*[ÑÜ\9a­\93Ö\91@\9e\µ^\eëeNó\1dM¬Ú\98ÇÝ\1fÑÊ\10w«­ô¯ØƵÞ5\87ɯ\84§Lh\9a\8c^¨eeaÄ\eª\9c$Ak\vC        m\83G·2U\ 1\ f\926Êú
-Áî\b\1f\8d1\97Ò[eeæ\9b\7f\97Îz\83\18{\1d#)GÚxÒ2\93Π      »#§t&\9b¨ÉV\1awÂ?rr-¬ð\88c½.T\16\90\11\9e(\1e\1c\aéW²qFJócÛ§Ç~asõ\1fnõçl6á\ey\93\99"¡ï\95óT¨\a¾çVÎáÎn¤¥ÜH\97>\97\0ä\82\13\80\ 4\98µDtJ/Éí\9c\97e+\13/Âï\11\83tRûd\7fg@ò Í\1670|\7f2\9aî\94Î\91àûÓñEBãQB\9fÞ% O·\9bзÉýë\84>*]=ÒýéW\99ÿ)`kZM±ã­\9c\93\16\fo\fÐöj#\12ú\0ÇÆ`{!²\87-¸Ã¶>\89\8c¾L¿%ø8ï't]ª¥ø2MèFòç{+åÍômB\9f¥\ f¿§¦\10V¹$$£4¶\8dú¢\10\e\ 3f\9a\ 5ý£Õc@\13D\80 \ 4\fo*\8f\93;j\ 3\18Ù\18ò?{39¿\9d$\81\9aàe&\11û\1c\82Ó\95o\84öb)ÙAMvN¿\0§üÖØ\a\99·îï\14èÊ\85\ 5&K\94Ksh\e\bÍ\88×\84\v\fÀ6A\1f¯?Ó\12äÛ\8a]J³\95ä¤p\0`\§þ¾\ 3\7f2\ fD\9c·!\80MÍÔ\0ð\1c%\1f\13s³ÁC\9b5mt¦¦²(\87Ìä\92Ke\ 1ð¹Î6B\15\80@&ä\fq­³uÐÅÀ´ýÙ*\1f\15\ 5\82çBZ\eçÔ\\15Êï~ÅìAJo \ 5·À2HÑ\1e&Ämé¯J?ÌQ2Ò¾Äì;\89\96\91\99²\94¨Ñ\9d©¨Òg\8d©ÃiZ(\8bÂCè¥ÒªDe\ 6åA\81\8a\93¬C\95C²Rú\17FJ±£-òÍ'\9cØ´\81\86\1f\\1f²ÔÈWÌóB\15\12à\19K\8bÊCÓ\10Ù\ 2\99\a\93B6\9fÝÍÎÝ\ eÌz¤\15\1cATçÀA{ÅJ×bT¶\12z)ó\90\r¾êVA\b\99\ eábBGuä<1\121µð@OC'§RîÅjß\85C\eE+>eyÄ:4x½´"\87Æ\açû\8dèMhμ\11\11?]:ب\81\ f\1cû\1a\81<=y0z$¤{\97\a»è\v\16\v¾d\80QÏ¥\a\90\1e\95þgÜìw\9a\9a\12Ü\8e\ eÆ)\16\957%¢ÍB[y\969   ©E£\9d¿±sî¨Ç-²Vè!\9aiT÷ÆGÞP\19+¨× \ 1P ¿
-ê½\96\19R\8c3!ëÀ=7HÁö%\9a_\1fµ<*¹\89 #z¦ §\fm³Q\97 )¡\83rWvìf±\ve\v\8c\r½2®\8b<GO\88ü\ f¤ÑU9¯Stè 13Ü\ e­Y[Å­ñ)ë!ç"\90\9eõ¦\1e\10"Ûæ²0ÛXPu\e\17\ 5\84dQTn\15\19Zo\7f\15ÉvpZJ(<ò\83âÈ\95{\80$g0\8e«.¥'«r\967Vóð}\ eÜõ\ 3)n\87¿\92\9a\v\18= R\1cêS\10\ eªþR
-n\17A_\1c"¨ÖÁB\839âª\e\85\18­+P=ì\8e\17\84 \9a\12m\13­\9b\85\13\ 3\90\8e÷¿\9dN^¹f\b\0\83\1dHÚ*\9c}{9\18nz\ 5wÑÃM\82\1a\80\15X\8d<Å(\18\86°Ó\1eÏ\85øéÅï\9báì\14\11±C¯JÈVЪz\ e\ 3\89:\85AU¬\8có\9dvc\8f\83Y\8db`\18\88¬\ 5Ê\vD\fà\84v#9\r\10\88\88üլD\80\8fñbeä?\94w²XÜ¿\ e¹\ e\97aùjî2êõF-<îO+\r\99u\ 1ÞP<?§A\805\8b ½\98{¢=¿â\18\82­g\ 4¦Pè1ú¬®\88§»\ e"\15y\8f¾Ç]ýþu»\89ÞqÃnj\83K.\88ð\9eâ5áÀ\1fn£1~¿[×â\83  )0C\12\86\89ü\18~\ 2/\ 2|\13\f!¡b[\88töùíÔ\ 3)ÍÍ#Rªåc\0»ÃCh' Ü\99Ê\f\9d©\83Ôó\97Ó\ 3ð1GQ\ 2¨ÃÀwBUw\18À\ e70Õ®R/\8b"ÜÃ6uÏ\19Å\94\99\87\11\9dç[+\7fTÒ¡Éb¡É\13\v¤\14¡\86ó0»ó\88\13çê\86"mh\9b£üÖ\104\ 4<\ fdùXǬÿ\18 \98´tÍ\8a\84¹\91Ç2~Ç\ 1|`k&\1c\ 6\99\90\938\82EÈ¥\ 2¸\rÂ-d\e\85¬\87)\1eϸ"Z\ 3\1d\93WÒä
-·ÆðXÀC8ÀÅ\91Ò\84\99(0\15-5¦\15X©ßlØéùûÑÑ+Ó8å7µç^Ð\86x\81\1c\8d\86x\9bÃú\ 5\9f|7;ùûä\7fë4Òhendstream
-endobj
-507 0 obj<</Type/Page/Parent 490 0 R/Contents 508 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 169 0 R>>endobj
-508 0 obj<</Filter/FlateDecode/Length 867       >>stream
-x\ 1]T]\8fÚ:\10}çW\8cö¥T\ 2\93\84\ 4B_ª½{KµR[uw©®®Ô\17\938\1fݬMmg·üû\1e;      \10\84\120\1eÏ\9c\8c\7fO\ 2¶YÒù¥K
-ðI6    ­7\11iAÅ$ô\7f\85´\8eh¹¢ì\ 5g\ 2\ 4\9d\f\vh\15oXJqºÆï\b\8f?{\8e
-]üãçÉ2NÙ\86\92$EÈ\vÅ«%KúUCO\938ô»AÂ"·»LØ\9a\12¿ò»\17kì&K\16^ì:\10ñ&añ5\88\7fv\93Å6¦0¤]\ 1.«tM»Ü\13\bh\97M\r\7f\11Ä\rñ½z\15\8c¾)+ÈVÜÒw]¿ª?GÊ\95\9d¥¦6VHR\92¸<Ò\97ÛoTK+tÁ3ah\8f8Qð¶±ìýî×$ y´\ 2\94]>½LCRYÊZ­\85´Í\91*.óFÐA+«2Õ\182mV9,ÛÝ÷\19=}uïû¯x\1eïðº{\98\91Ò¤l%4Ý»ÒRØóa_w±ÝP\88²\8eè|\19v\b"¶btO¿Zc\ 1ÙXÞ4"\1fèÍÀ&w¸ªZ\96T\e\80:\1c\84Ä\82ÑmÓ@
\93C\1e-zbá
-\8d\ 61\87\ 3\82ý\a­Þ\19zÓJ\96\1f]È¥ØóÈ\89=ý·Îé¨ZÊ\94,ê²\857°Ò´×êÍ\80\8c\1a1 òÍp¼þ\1c?Ò½õú{á\8cj\ 1µ©\9f\ 5Õ\96Ñ\93\0²®iÿ#÷K]Vv\80¸\84\81P\977F\91ÕG*\9aÖx\82\8eN_\16 3\9eUh\1eê\17JgHGE\vÎZ̵à¹\13D\15tà¥0\8c\\8d\8cKz\15º.\8ec\8bÔ檰n¥\93°\13\15
-g
-\ 6È\9c\ 1NzäÎ@0\ 5r£¨\ 3i\ e"«yC?\1e¿|ðÉO\ 3çG        S7¥ÊÚÃ\87Å¢ËÂ\ e\9d_\99Òåb|Â\8f¡;1x3ìõÙU\80c*Õ69Y\ e]\ 1Õ©Á=i²µuN¹ña\88ì­ÌØ\r½Õ\16NÍ`}/_¿\ 3IýLH\0\1f¸q[+ ÿ\15\95L\ 6-\84ñÌÌQ\96¾:|F¥RÀ£ð=\9cCK2Q¿º\ e¹v\90áG'ÔÍ0\\0çF«\97ý¦ÏwÑl8ûª¶\8b7\18 ö0øÏ÷é\94±\e\94\11ú3
-yìæE4ðíÏ)̺ç{4t\98#\\1f\98²\9fïgp*\94\80¾WÕ\ 5ô\83ó÷ý]3FÚ¹½Ãv2\8b\1fþÑÅ4&M]MFw\95È\9e\9d c\13\9cmÓ¨\92\8aº¹Ú\1f\9bd±Mû\e3Lb\96&+\8a\82¨\9bûA¡­\16¿Ûî"»5ÏðÉC+\8ck¶Wz>\9c\9b¯\83\8d\9bÅ\b½¼ÐÔ\81\8bÓ\80¥i\8c»
-û+÷ϧÝäaò\17\10\e\ 2gendstream
-endobj
-509 0 obj<</Type/Page/Parent 490 0 R/Contents 510 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 198 0 R>>endobj
-510 0 obj<</Filter/FlateDecode/Length 1931      >>stream
-x\ 1\85XMsä¶\11½ëWtö\90ÈU³Ô\90\9cO_\1coÊJ\9c\1c[\89/¾`HÌ\fW$A\ 3 Fú÷y\r\80$8Ò$µµ³\82\1aht¿~ýг¿ß-\93}NÓ\87\12\7fÖû5m÷\19iIÇ»Ôý*¥mFù\86\8a\ 6g\96ØÄ\1f)\7füüWþ\rm\96ëdC\r¥»d\1f\165ýr\17-\eZg3Û.K²é\ºNÖñÁh\r¯ù~¼\83Ýò\8dëÍ\ 6\9f\r­R\1cô\v6EËpãds\ 1\fç¶Ë$\8fÎEKÜ\87Û³È\18¯a]ϯ\8c×°n¶É6:;áå~b\8c9úõ\ 67¬v[ü\9cá¯Ã\9a\r«Õ\9a\eòý&Y!ß|\85\83~ÁùFKä»\ 6Â\93-Í7ã\1a\81!Å]lÍ2 \97¯r_¸Õ\96ýº\95«\´ÆÙÝrÜ;\14 Û\81\0×\91æY\8eK2àÇlÈ×\8c\85_¹`£5¬Ûu\92ÆÖhÍuå\ 2MgWù6ò¼ZïÆÕ\18Ð2ó\bñ?\99[°i\9fr\fÁ\96\80d2Æk¤\99îÙëx4^Ã\9aç\0!²FkXQ÷øÚt¿\a Ã½\19ö"×Ñs¼n([3¼\915Zús8\8dg\99&é>\ 3ÂW4É\90ê\1eI¬°\ 1\0.7pêW\ 3\929\0\e\17lJA\85a\8dL@A¸q[\9d5ZÃ\8a\1aæ±5ZÃ\8a\10²Ø\1a­\91 Ð_EÖx\r+z7ö\1c¯Á\96e>³2
-pþ\8e\81_\9eî\1e\1e¹Äôt\84vm¶;z*\9d`á7Å}\9eÐ_T{¬N½\16¶Rí7O_Ýþtå÷\7fÎ9\81§\12\eÓ\84~=Ktf!Zú\91NÒRß\95ÂÊ\92¾/ø¬¡Çª\96æ;ï\ 3\89¥ÁG¶e\ f_\84ÁVÕÒ\9bê5\1d¥,\ f¢x&Ñ\96dÏðªZ[µ}Õ\9e¨\94/²V]#[»\18ï\10á\8e#ßA\97ª®é ©\11¥$ñ"ªZ\1cjÉÞá\8b\ 3\0\1e±.;-ÿ\9cæ>\19ïÃHçr¾Û\9dÃî{RGB s«Óxgí´ú\8aóÔ\89ÓÕ}£\87Ä\9d¥Ï\19+\15\0øñÈ©#ts&« q\85¬^\10}K²A\ 2Ô*[\1d«ÂÕ\81.gÙ\ 2\ 6M\17\89\9dµ\ 4x\ 1
\91ý¤«\17õúFJ;ðbp\16\1f\87¼¤1}Ó\1fL¡+À\87\18¢mUß\16\fgUs\ 5êÊع\9b\ 5U_\ fæ">\ f\87þÌ\9bMbà¨\90G¥O2i¥uÉ3ób&9\18P\ 3\90Îq¨GR\r\92¨K.?XH®2·\18ô\ 4\9a\98·Ö\8a×\ 5µ}s\90záèÓõºSp\ 5\9b@fï\8dÎÂ\10§l\ 5\18&êú\8d\8a³hO ãQ«\86þÞ·Ï\87ÞX`Í\\94\95ôu\9f C%\8c£ø\84}B\1c\ fÇî\82^\0´gI\8cÚÃ#\14É\91ÿþP«ây@óáqh\8a{O`T\9c.J£    ,!°\84\ 2E\ 4º¬ïNZ\94\\f\17¥àw1y\r\94\1a\88\1cÂZ\ 4b¡'Zô\15\97µSÚúN\9bC\82\86\15\96\85P°FØ\84þ©,èpF `\9dë"PÛ\ 2\946@Î0^Ý\1e\ 3ýÀGæ÷ø\16s¡óU\98u\92W\1aQtí;\84
-\1e\8aRt\10\12\94Ó\ùñõþàò\83Ä\9dpøFM_\9c©jéX«\vÿ;Ýg¤®¤ù_T\84þýÊIW\86ûðSè£O®¤\8e\86ïudª"ZÊKÛ \7f\e}C\Tt5>_\84®TïÑ|'S÷\14\82¸åÇ\15ièÿ¦:\9d-Y\ 1æ]ÎPF\82.\15Ò\18æ\8d Bj+\80\88\96¿÷Ò@L\11Ãu\r\83úË\12|~ë ?h\90À'Õ\83Ü¥<V-*D\ 6\82\ föc-ú\1a|\rzìÂ\11]\87\ 2­p\9aþýó?Ì\82«Ð¢®h¨×Bvþ}°êêvlBß\ 6\97Pu\a\ fó\ 2á\84­\83z\ e\18óë\ 3Æø°Ü{"æHM\1a\8d@\ 6\12Ï·\8cbF\aa*\ 4[%2áV \ 6\ e\14.g\85\9f\80_[\89m'­ú\ eú«áV[Ã9j©\8eWII[$ã\93Èá\8aÚ(\8eÙ\1d\89Ç\13G\9dÞx\9c\80\e7ÔÊ@\8bmqæ:*À\8f+\e\ 5ê\84\9e4N|Þ\15\93\88ö\rÝ\ f
\83\92'ËT+l<á\ 5B\87#=\84ìz@¾\8a¦«%0ñÏ\15ût*Æ¡\14J=££Ð¦W9»\18Ý\ 1=\94s¸{A\87Þ\8eº$
-fÃè(hÛ\14FL½A \ 6
-¶W\97\8eÌr¥³g41gÂ\1a\10Ç3`\10dºÓò(5Æ\857ÞÈ.#½Æ\8b¤\13\7fÀ[>|ÀV^û'¹\80ö\85´Ú#\ xÀó'ÿj³ú\93Q\8d{\9f\1cá\8746\18>1\17\8cn\82P\r\8fÄ(/\8f¨>\9aY5\b\1d]exj(+Sô(2&\1e4%Ü\ ep³~r,\vB\15yjpé\ 6Éw7ß\96\1c'{ü:B\8c¯&\9f©e¼ÂÞòÄ\0\ eù\85i\v\8cìE=?0ºÃ\9b\aõm\8bº/\99Wó]S+;\10\91(ëK¨ç|ëèÐ5\95ðTù\7f\99ÚÞ*\8d\91à\96+\b\1a\8f¹<µazÐx¡B\89>dÅ:¡¿á\ 5â\86\99Q\8e+â&lY~7¾6\1\94\aÍ\84\11@8í,Gu\fÄ`Fß\9a\85¾\9f\8dÃ|çWÌ0då«\rc\ fê\ 4Ñîd\81\ 4\877\9c\a\9c  ²D«\94\98\19ûÜ9þ\95Ò     }A¿â\1d\1e\89\ 2u0M3\11\87\8d\96cÕGS\e3\f¥\7f2Ä,@UÁ¢£ÀXé.qc?\8béA«\vÛÅÕ\889Uûlm÷íÃ\83Ç-éü¬\9b`´|¸U©ßî\7f9câ)zûí|Ëà4\1a\7f\83÷.én¹ûí\9bI\9a\r\86oÌù\9f>v{ÿ\9f
-CÔ\1fÃDéú°èµÆ7\97±êã÷*GÑé\83¿F`Ðà\11\941Æ·\9d>°k7}uJ\97©\17\89\8f¾¨­ðß\10»Ý
-_ë "[\ eð\87§»\7fÝý\17\r\89C\1fendstream
-endobj
-511 0 obj<</Type/Page/Parent 490 0 R/Contents 512 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 213 0 R>>endobj
-512 0 obj<</Filter/FlateDecode/Length 2453      >>stream
-x\ 1µZMsã6\12½ûW \94C¼U\16-\92ú\9cË\96w6\9e\99­LÕdâTv\8f\14  I\S¤Â\ fi\94­ýïû\1a\0%\b\92l¹,\9blô{\8d×\8d\ 6Lú·»I°\8aÅõ£Þ\8a      ¾f«\99X¬"QK±¹\vÕ­P,"\11ÏEº\87Ï\ 4\83è#¤\8f¯\1fîâ(\fB1\ fçÁTìE\1c/\82Ø\\15âç;û\1aÖE\18D¶ÕºÞ\8béd~ã;\8dã`yA\9eΦÁÊòE\10b>\89\81\aÜ\bäú\82H¯Aªßhb\18<\9bN\82¹\98.\17ø=·\9aà$X.aí?ÌÐx\15\82K\ f\9dÎ1=-Æ\82ü'3øîE8\r\11\9c¾"Îp\16YÖh1¿±F`½úÆ«ÙåÊ\1f\8c!\87\13o4\9d\ 5\v\11O¦ø\84\144úÊ\0\89\b\19\98\890\8að9Á(3MÌ\19\89Ò·\90«¥\99\12î-X\v)¦=\1c¨\10.K\9eÅ\98\18\9eh\1a\83Û\17\ 1à\94\8fÃd\9c¸ùøñâù\f%Á1Ù>\ e\93\98üx&3Ìlm\1f\87É+«2 ¶¦*io2ÄX®\1e\ e\87\9d\ 6ÞÄ \19u\18\8b\81S\16\an@R?\9eQ\87a²}\1c¦\ 1Iýx&C\f\93íã0ye%C¸\aMÒ²r3ÄY®\1e\ eÇ\80¤ÚÄ¡iu8\8bíã0\rHêÇÓêpL¶\8fÃ4 ©\1fOg\88c²}\1c&¯¬Ê° ®Éf\88±\=\1c\8e\ 1I\8d\89A3ê0\16ÛÇa\1a\90Ô\8fgÔa\98l\1f\87i@R?\9eÉ\10Ãdû8L^Y\95a¶@\87f3ÄX®\1e\ eÇ\80¤ÆÄ \19u\18\8bíã0\rHêÇ3ê0L¶\8fÃ4 ©\1fÏd\88a²}\1c&¯¬Ê\80³\rN~\\97c,W\ f\87c@RcbÐ\8c:\8cÅöq\98\ 6$õã\19u\18&ÛÇa\1a\90Ô\8fg2Ä0Ù>\ e\93WVe\88\f1\96«\87Ã1 ©11hF\1dÆbû8L\ 3\92úñ\8c:\f\93íã0\rHêÇ3\19b\98l\1f\87É+«2LV8/°k\88±\=\1c\8e\ 1I\8d\89A3ê0\16ÛÇa\1a\90Ô\8fgÔa\98l\1f\87i@R?\9eÉ\10Ãdû8L^YÉ°\8a=       b\f\97ñ\ eÁ\80\9eÚÄ`ie\18\83åáÐ\f\88éEÓ²04\96\87C3 ¤\17\85¡±<\1c\1a\9f\98t\1f\7f7¯ØUÃ\18\1d|¿\8eÚÂ@iM\18\83åá°øeô\82iI\18\16ËÃañ«è\ 5Ó\19aX,\ f\87ŧ$Ý\9fãé\b\9b\11Æp\19ïàûUÔ\16\ 6JKÂ\18,\ f\87ů¢\17LK°X\1e\ e\8b_E/\98Î\bÃby8,>%éþ\94\1eúp;\v\8cwðý*j\v\ 3¥%a\f\96\87ÃâWÑ\v¦%aX,\ f\87ů¢\17Lg\84a±<\1c\16\9f\92t?Zâ¬Ìe\841\Æ;ø~\15µ\85\81Ò\920\ 6ËÃañ«è\ 5Ó\920,\96\87ÃâWÑ\v¦3°X\1e\ eËß^î\1e\9fWx\12+^6xN=_â\97\fi\98àÁôKz\1f\aó@¼ì$\1e\80&ønäQÖI!²|³Á½²\15£$móªlFb\93\17²    Ä¯»¤UcÛ\9d¼\8cKeó׿¼ü\eTS\11\86\9aj\1c-@uÿÔ\88j#¾Ôù±úv\16Ç(X\ 5áìA´»Z\82S\83kl\85º\96\15y\99\16]&3\8c«ÄZ\8a®\91\99ØTõ\85°\15\87®>T\8dlÞQø\8d
-_G\80\aP}\ 4!=ùF\f\99Ü$]Ñ\ 6\9aî6Ð{\8aE\8aÑ>ÉËÑM@â´ËÓ\9dÈ\eu÷(\8b³ A-¾\11Íú¬üú\89eP®¨\ e²n\1e¼a`\16µ/\86\93Ê\ 1\8d\0\1d2!Ë´êêd\v&H°O^%Ñåµ8@ɤ\95\9a¶Úç¿'*=\ f")3/qÓÂ\9aÔ\99\9fÜL\94\fe]¢\bú©!(Q\95Å9\10_
-\99à¢\91\92¨¨\88T%é×\1cx-p¯$é\93\9aî\92\ 3 n\87*'54/iô­U½/QVRBÙĸÏâ>)»¤¸u¸ÂQè\89ØWÐ.\93ÈQ\ 1åä·C\91\94J¡À\80
-\ 6%ñCR\17¹¬\ 5꽡ú¾\94\1c\82¢Ê¼®\80Ë\b\941U
-\ 1=>÷U6\[ª°Õ\ 2\13¥<\89&ÝÉ=Jµ(ªSCõìÌp[K¤¶\16\9bB~Ë×y\91·gZ<E\95"\1diUnò-j\82\12®ò­Vĺ\ 6\16|ÖÈL\86Ô\14R­)ò;Ôr\8cÒWå:J¶@o\9aü(Kü\18\ 5\95o£D²ÛÅ8\ eµ\q°\bÄÇê$Ò¤\14\9ft=îÏâ_É®ª\1e?V-\16Fñøáó?±TP·è\e§ª~õµ\84\17ê\1czIÞÎJ4»ª+²òûVäû\ 3êH  Þ5ÉU\8b¤T\92 \11ª\10ëc\8eÞ\13\88O`Ì\8bâAìª\13õ°\a\1d"\94v&\9aVÕk.\eÑÊý¡ª\93úü \9a
-4hjg,8ÑËIh¤ïV\1aCQmQ±i-3´Å<)¨bÐ\9aÚ\93\94øi\92\80~¤ª       \ 1m\bÏ!?ÑìD\91c1\97\15&W\89]rÄ®\90bjz\b\9aJ\1c\8dF&è<m\8eb\ 1
-\89
-`D\89\86'NrÝä­l\108DÂض«K¤{Cu\ 5=i~\ eï\ eË¿ ¾J\8b\ 4Òí\89\8b©e\7f\832\85üTbM%`Å{O@\9d)ýb\9fow-fP½ª©½#rZ +Ú\aP?q$Æxh°ÄO,¼ïÄ\13\95¿\15¬Z     º\94H\87¼T\b\13,|:U\93K?\1d\1f1VwÞö\9f´îÊt7Æö\81ÖXnÇ&Û4ú^;Ý\9b!U×n+Ï\10\93ÅÞ{LÍOCü÷\96·ï>V¬\81\9a\94       \10\ 59\WÔØÈAïbµ\1cx{«÷Ôï)¿×¾\93ÊKqÑíÑû¤Ãºï\9aÑ\83\18}\96YÞí±Yé\96Oìô²\12J\8d\9e²cR¦2\eõ\vÌ»/¿7í\84Ê¢ïôØê¨.©ÀkÚîZì5(u40Tª,\ eª\18iE`C©[Ú\9eO\12]¦:æ\99.ÔSÞ¢l\9d\ 6j\96º\92îÚÍõ.!FXæ¯ØæpÀ05\89ú6ͬßHèä!0ç\96Z|{\9b\82ë\8e±kÛûÇGÝ&\ 3Ú&qà\b°\82\1fÑUNc\84ÜvÍ­s\9f¿{Ý¢7\15U&\ 4qBm\935\ 2 \94\86\14À¬ÕÁÀì\aûªQíªª±Ë¶b\83\16Þ¡Ó\9a]\9c\3\9a\9aZÑ7=Ü,\14¼\87îÏ+ñ
-¯¼\91Æ\17E\18\ 6âï¦KöÉÒ\9b=\85ׯ«E¿®\9e5¯²áuë\ 2o±     ª¯\e÷þ'Úå÷I\96cÃqm}\11Ñýë\89\ e\993Ul\93ù\8cÀ\9f²ñ\1a\9bÓ+Õ\10ÎC¿|ýÑ\85:K%9\9dµû\88ü·x\ 6d\1f¡\1a\8a&ÿýM¸~@\86\96áøðé\19«e\9c\94ù^éëΡ¬Ü;~F\ 6þ«¤£46u\94¢©-;®?\88þ^õ{ì#ºÃ»\91\96UùF¯¾½õmÍ\8eæ\15Û\1ea0óøR\1dÆÝAÐ\88?\7f\1aÏ  \16\11öVô\9d´}S2o5z{Çä\84       üãËç\1fE\9bÐ\86àÊãO¤-\8a\1fú\1fÉ1ù9­ó\ 36óÿ\vÁ¯r=^w[\9fê\7f4þç\ eç\0ù\8d¤ÇI9Åá´ü³Õÿ´Gw\87:[pTu¦V²\9b\86·Ù|{ÇLõñyiúå8
-ñO6Ñ\Ìñ\18o¾P§ú~#{®åo\1dæ\82=ì©yE\ 3þ©\93\8dúCI\15w\88\7f\93ZÎæb¼\98à\90\92á¯`qÓaiÐtIÿñ\84ÿ4¡\ 1KºóÃËÝOwÿ\ 3£.#\99endstream
+545 0 obj<</Type/Page/Parent 536 0 R/Contents 546 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 148 0 R>>endobj
+546 0 obj<</Filter/FlateDecode/Length 2668      >>stream
+x\ 1}X]oÛ¸\12}ϯàö¥)\90hmÇv\92{\1f\8a¶h»\ 1ÒÞnëÅb\81¼Ð\12\15³\91D\97\94âz\7fý=gHùCi\8bí&\91H\ eçãÌ\99\19};\19\17jÿÃß«\11þ\9b]ÏÔåõDy£Ê\93±¼\1a«Ë\89º\98«¼Æ\99\116í~ðL\863\97Ól¬¦W\97ø{\82ÿåì~\97üõùýÉäê\9a\9bG£ìJÕêbt\99MÒS¥¾\9c\1c>cõâ*\9b\1e¬ò\9aéx\9eÍ\87×\L.³Kl¿À\12\8eMÇÙuz\12¡\aÏX\9dͲ\8bÃÕ\83ç\1aâ§Gg\ f\9f±:\9d@¡x\ f%\1f>cu>ÃýûUª{1\99ÃÀ§^Q\93é,\9býha<\9fÂ5\83\13ãÑ\18\93k(Wã÷þ\89j\1c>cu6\81ä¸WV\ f\9e±z9?^=x®Õd4\87sög\ f\9f±*÷ïWÇ£\99h5Â\19H\86sx\96\97æ\ 3\13O\8c|½8ùýݵº\86¯\16%°5¿b\94\17\85@j¤\16ùé8\9bfêï\95n\95\rJ«gkï¾o\9f½T\7f¸\8d*\9c  ê\93·\8fx¥6Î?¼|±ø
+\81Wê*\8a;\1f_g³     ä\9d¾R\e³Tr8
+
+Æ?ÚÜ\9c©¥\ e¦P®\81ðàÊv£\ 1ÖÐå+¥w²ÏTK\ 5òÊ\9a¦\rêîÔf&SKï6\90\12î^¨\7ª\vFÙ&´FCZ©r×4&oms¯
+ëñWµU­\83 C\1dGê\l.N©\16u\81 *\81uuÓ´Æ7¦ÍÔ\ 2Oý­X\81\8eáA¶DC ¯4-Tå)·ü\8a[\ 2ÿÞªÆÀ¦;\11¾Ö÷&\9c)[Çßµ{´ð\1a\8eAïx¡õÇ*-ÍJWå\99ÒM¡6¼\95âã\8d+8¥p\r<ä ²U+ì\91+\91â¡«pýRçPQ\fMªgI:b!¡X¬\f\L7׺Ùâ \ e®\81\10'.ìÃ\ 4%Ïvq\b&ï¼m·0©\8437ºªàØ»\17\94¥Í\11\96\9ck¹ÎWò^TwPÛC\bÍà\9fñί]h\19ZÞ}lvaË\12»\9aVl¥\93 \92ÎsW׮Э\81\10\87\18ÓµahS\ fBÁh
+NÂlp\95AìK\97\ 3!\ 2´5\10«¡0öµ\84\b±\a\1d¿vÍ\832\95­m£ù2S_l+\0Z\9avc\10\87­ë|\ f»»S\ 2/Ù¶\83\8c\ 4Å\86cÃ,±½6¾Äejí\82\95+  \1e[\ 1iÊuíÒuÐ\0{\10
+]\ 1Ç¥óµh\ 1«\ 1ýÃ\9b\99?\95Ñ\ fð4\9c\e\90XUÅ߶\89RhG¦nZ\86\93)û¨½5\88\9d+\8fÕ\82í«Æ~뢣\vBÆ2\\90\86üÙ¬,s\10Q\83fPR4@RµÞUêÑj\86TD».0ÙJ{ßù¨1ÌâÅ0È­ij\8cÖ\11Ï\9cO&`+ðÂ8\9beO¹ä¡\ 1»lzÒ\81û\8a\b£þUãÚ\9fSMÂÂs¨°F\88\81I\ 2iY¹\9c.\83
+ØÚ¸ÒUÅ\7f\ 6ÉñÎúÐ\92oz¼æÆ·\1a\11\96¬@7s\95Ç~\7f§#Ñ\9d*\b\17Û%ò;\ 2<ENüõù\96@\81G\97\1a\8cä\13\11\90[\bÖõ\1a¤&H_"_Ä©¸i\85\83p88µ«\8aæy«î\11¥ VðÊÓ¼\11\ 6³-¤\b\8fQ\86\ 5L嶠Jïj\80 r ó[peU!\ f\9e¥\rÏ~;\801\12¬ÅÕ;_1ÆK{ß«Îeº0q7`h\1f\ 6tZ¸nY\99ü¡²ùC\ 6\ e\ 5\9c@0ÅV­Lµ&\1a+×Þ½ÈvU£Õ\ fÄJñ¨\9b\16\ 4I?\11\86ªÔÈ\95å\16\18æ\85pâ>\0\bfp¾eÚ\bÈD[ñ\9c7D3H\10Ùs\8cõdì\90\18 \17Øê\9dÕ\1ar\95\ 3\9ek\16\13\95\82?\bv°ÿ\9aA 3õ\1aÚ0d(E\88\9c¤÷¸\97F¡@I\ 5 M\16\1aÒ¢\8d\ 5£áXá6MåtAK-ÀÇ̱¥H+\84æ\9f\ f\b¥uNUÂ\88p\85~D\8cpdc\8bv%%Ë\eØ\8fÊÚ\93¢®\82\835aÝ×'õÇâÃ-\9cØù\1cÎg²³6³>1í+2-j\18s\9fj\99\94|Þ¬+\8d\ 3Ç\9eÅe$m
+\82ãb\95\13ËTh¡\95öE\8f\1eq\eí/ººfÝé\ f¢Î\90|\864Çî\82¾LQ¥R@r³­a\ÊB0(ÒõX!Qr\18è×L®\1e[¶ytÕ#a×\a\1a\ 4\fH\951ÓØËÄ0\80\10ñ2\87«\ 2<ZzÃZ²£;@]nú\19·Í3õ\ 6\91ï\ 3Q\ 3쪶p\f@ÿ22\80ôPà3\86\ 3qG\1f²U\81\15µµ¨¬Iú\8f\1aª¼í\90É[V\1cR\1d\b\8e\95_#1þ{\8e\94~\ 5a[i<bçVmô6°ú\ 4\v­\19«\15\91\83s ÈBù\ e/Qlm\81\9b)7\12¦r^åh2\90\99\ 19\81Ô\ 4F\11ÂdD¦þ!KÙª:\8e\81®j2Iè<Ýå;\80¿aÚ²­Cùë"W*D\9c\15\96¥d\91\98\ 3í$ú\r^FÅ\ 4\83o\94\11\a!\0¹A\11§%Ñ$[¡=\89©Cgº<×\ 1¥\87\96\1c«v\ fN*\91\11r\10W\0\a\82\9c\14\12
+HϪP\14¸\14W\81
+åjßÀ\f¨@LC\85\94wX"ª\96\95ùN\8f§´nòª+Ä W\89YäE%^·%:Ô\95\81fív\8d-Ãz}à8É\17¤(û^jV\14hÿØÝ \r`\7f$)[UnC\ f\92\95Èih¼\M:Â\v\94!´Êð\8eD"\ 3ç\7f\9a\85\17\ 6\87é.q}ì\90\96\ 6â²»\17ôæÏà~\89I\ 1XP7\11[¼45\ 6{/-\85\9c°e׳ÿ¢\94\7f\ 4ýÑû(!\b¤\90\9b*L©Ñé\1e\19 R¤î\11N±W«{ç
+R\90\17+\ 4a1\ 4R.¢\15»òM´ÆW)ÓNÑõlP\92àR\98\80²Ðþ\b$ô,ÁßÓÈ\11Ö÷0G\ f\ fÆBhñ\93¤:\80\1f\18ÆKW\12q&\19Æf\ 5w÷¤\88ª\8f\99\ 2\8e N\ff0\18\80\13        \83
+\fà3íE7\81o*bLiÓ\98\12S\ 3\12¸G\ 3oÛ7L}¸b\1f\87{\84
+}7\8e£!Eþ&ô\14öÑ\16` }>gÂ9\e\13»\96ã¬C\81\0èXà©\17\ 4§v\93!E¦àßÎI\12ldõ\86\9dqÙ+\87\84ß~\ 5¾«L}\80\89q(\8c£)³3h\10\8cð\16Hr7Qr¤\ 5ÏÆü¾\91Á§'i\90\12Àöóöò\83C;\8c´KÓ'-±è\90\11-\12ê\0X¤·\ 1°¤
+%½Ê®\91ìÒd¯#õ>è-\12[X\bÎA\11þ\ 6Ò\ 4t\0\15x0¶\e½ÆØP\93Y\19¬c·\83\81\ 2bIjG9\10\9f\96]\15ó\80ù\aݵjºz\19}\9dÜ$¨ÛÙ'\ 3\e6?\7f\92\ 2À\1f\98\19\88Ü\ f÷\92zùÊa¼ïû\18\ eç5²Ö®¡K/Z\80\9fªÐí«\8f±kØíB\ f¶îÐr\87\84\11Ô/\99M\18Ôc\9cþ`Þâ\88,\8d\95 ÃØ\8cfB®#°ÑÓK_\8f¯\ e\98ø*\8d:w<ÄÀÓ©Z\12ù\18\94\7fYñ¯\91\96àuÉu\ 6\ e¸ÍM\ 3ë!®4æeü\94¢1©\ 1fHgï\91ÑÛ\97ê³¹G_\10\a¨\9fcï âIn\91Æ3zåýÇ¿Ô{¤¸GV~B\ensu\9bn¿;}ÿé\96}7ÆB¨Å>\86Y\88°\9cÁî5*'fl\16 ¨YP\11»\84ï\89HºncÃêà\1e\ 4¥\1et\81\ 2j\bNZ¡¿Ç\84
+«ÁSt\86z\83;¼½_¡à§\89\9bHN\9d\1cþL³nú\0\93¤\b\9d\9cÌÔÿ¼È\8aù4J£×íÍ\9b·\1f¿¼\1d$\19GPlf\83\11s|9È\fTo\16âbHë\8b\14¹(oW \1a·\8bÕà&XNp`´D\9bl¾¯c!FWVs²Ã\b\f\16#\1càCPö"Í´ûfJ\94\949\ f\81@ÏÄR\aÇ4¨îÒÇõ
+\81þyóþÃ\95?@\8c2\18%\8cß\8fU±`"Ô\ 3;\18ø\81\ 1\18sbS\ 5Í9!$\92Å\17Î1?â\8d\ 4:\9b«9>\9e\8eåûQ\ fÂwÒ\987ü°ö*°ZýÉá\8bó>o8ï\ f\9e_\8e®ã¤¿\ 3çÍþó\ 6·N¯ð\ 1új\8aÏ\8fø 0á\9b·\8b\93?Oþ\ f\×c¥endstream
 endobj
 endobj
-513 0 obj<</Type/Page/Parent 490 0 R/Contents 514 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 232 0 R>>endobj
-514 0 obj<</Filter/FlateDecode/Length 2255      >>stream
-x\ 1\95\92Û6\12}\9f¯èÒ¾ÈU#\8exÑ-/.{7\13Ï\96\9drbmåÅ/\10\ 5JÜ!\ 1\86\97Ñèï÷t\83¤(Zö&e[e\b@÷éÓWèÏ»¹·  éòQ\1eh\8e?\8bÍ\82V\9b\80JMÉ\9d/_ù´
-(\R\9cãÎ\1c\87ú\ f¾ãÍi¹YãÓ\ f\ 2o\81õÊÝ\95\8dµïmä+\7fé­[\99\81\8f\e;\97\e#Q>®¬oki·nH\v¢\10pné\19Þ\19ij/ݲçûòÂåÂ\vnj\1aÞ\19ij/ÝÒô}yÑzÅtß°vxg¤éâ.\9f\1d÷û/waàù´\fç^H9-B\ 6/\8b\8c¾Ü\r\969­×8rÙ\13\a\ 5sÐê\80\ 4\0#q\12ø\11$FË\0\9eÍ)\f7|DV,2âUÄßåä\87Ë~Å{>lYõ»Á|éEí\8aw\87ë\9c\82åúzw°Æîz\81Xszø.\83\8dæsÆ%¬õ`ý\rÎ\85\vßáñ\ 3\98èV|+\ 4jìú\1c·9îsH»\15ï\ e×Ø\ 5\8fH\f9+waÛ\92\18\1a\82¼M»\92ÝÁ\1aw\91,ëÁîp\8dÝh\ eÉN\92è\1d¬±\v»W\83]¶Ôß\b¯#KW\fÈ\ f#qK0÷\ 1Ì­XèpÍä\86 w°;X3¹sÀ½ì\86QÄJ[É\11\f\1fÞÅÙ5²¾ûèªÄª÷\85\1f\ 2\91DÎûí\8d\9aòð\bi>m\13ò=\90\8c\80_x\8bå\9a¶{.7\88ám<}·\9f%iVë25\aÚ\9d)KÍó\9bí\7fï8¹W(C8<5öÿ\7f\15\1f\9a\85Kpµ\ eh\16¬¼5tâú\1fG\r\8cõQÓ^'ªÉê\8a\14¾ÈÒg\9d\9d©¶´+µz¦Êæ\9aª´ÖÕ=é×X\17ujME\89-éÙØ\93¡Â\16M¦J\9a\14¥Ýe:\9f¸Ó",5qÖìõþ\9eAÌi\ 6fD÷®©)5tÐF\97\17\14¹\85vu8\94ºªÒ\17MgÛ\94\1d4ªt]\83
-\8188>\0\84ãtJ³\8c\8e
-\97\ 1?WÏ°F\81Co¤ý\8b\16»åÛ¾ØKõ\80/§ÔTºÄmÓ¨ìú\b{\87ä\b[¯H\10ﵪÓLïi\9fVq\ 3èÖ\88¾\87Ç\rù\11{\19v\87ð4s\1ez\e\8fþ8\9e)V\86\9e(>*sp>\88­IÒCSB\9850¤>BÁ®´'\80yKÿ²º\ 2Iª&cëÎ\1aî9\90Yª´\82\87\94i}¦´ª\1a]½åC\97@\ 3\84\87\9fjXvÆi\9dSU\97­zÈ-õA¼ÈÆW\ 2OïÓZ\1cã \11â\11 \ 4\19\82&-;t\88\v\95ÕGÛ\1c\8erüt´\99\91C\12ç\ 3Ï?è:~(Êôž\9e¯1Né\98"\1aÊ\18ôìtfÙÛp#\a¨x\ 4ñ%·&÷\ e\845\bÓe\14Q¡Ë\1cVsXv\9e\ e8c]\8c\e\ e$\96 \92ZFg;UÁel¢-ïé³\93Li]é,\ 1\85t\ 2\97\9cz-\80!\ 5\1e½×±b\81ý5ɱ\81\91ec\fßVì´oá\83\7f\11\9drâJ~ëßÎ\86§D,\80Ì^!\87_\8e\8cM\8b\fÒM]6U\rs\9cï¾Nµwð8½\14}|÷ë×7÷r_r\83STíÀÛI\198\17ì6¥\11\ 4'½s¤´Ú»Lu\14\912{\84Hn\19¯=\1c 6AÜ7ÈU²IÂ\15ªÍP\9a\88\80oÒêá±\v\86©6\80 g,y¦b)'×w.y6ç\8dK\18O'\fd\84ð/+tøg\ eÿ_×\b"áÄëó\97b\91+ì_'/'ÊõñÞ q|þ*\84r^;-}½»\92xO\12ë\99\8dUÖ;9õ´\a`\16q\88\821\91M¬êÉ×7\12]\90`t,Nnãô\1eµ|Ä]}D¬ã/ª
-}EC)s\95egHP\97\82Ò\96õ\1f\155\7fÎU\8d­p\ 1ÏZ\1e\1eý¶þMÛþâ¹\8eæ6»â8\95ºò¶¿®hâ\8eM¾W¶Ȩkz;o\fbì[\95â\83Ë\aÊø ®\ 4\84ä=7E\87\10£\85\14/A\88."I>¼ÃÝ\12zR\83þF§c\1a\1f\85ø\9d\9e³+·û49\13²\95cïEã\98ÞQ¡\ e.>.ý\10Ϊ52\12\9eä\82\91dg\8f\1e¥ÿ£ã\15\85ôã1*eÎp\9f9¸ï»\91bÚE\12k\81Ã\9b2\86\87¹$}Ø~úHµ:pÕFNÿ[½¨/q\99\16µG¿»\16 Ü^ é×B:27}¶\18EFlSqló"K+®úiå\11üÂ\r\9cÿ\91\1d\9a¨M\b\97g-IL2óÈÌ kf®\8cCJnÍH©2Æ\9e\95\89µ\93Ûßdé\92\v\9d\89yÀÂÂ\17\8b~\ förWï\8cv8»Ê/\1a~T\96\86ÑyaÓ\15¨ëË}:3×Ö\0R2ÂÏNlK\9b\84\16Ìpîd\17 ITSÛ\1c­\1e      \rßbrà\8a¸\97¡*5pxiÑì¸9|zúô3Õç\ 2D´*Fm\81\19IT\9ef)F0iÎ]'\1f8Îù\9a]ï¸áî\93YûLHY\86
-}/)Æ4É«\1ffÑ%þ\aí®\9dVjýZ·-UbËùÈÍq<(¶îçHqU§@õ3u*\1c(zÑå\19ÃäI\97I\93uíå\9exT,õ\9fMʽ\86\87Ñ\11Õ0S\975\8f@pÆÎbnºA\80àaû\1f>l·\9fÇT~\86h\0ÉÎ2Y\82\88ôË\7f\9e:s¬L½â\1f)\99\85*\91¬\89\907*Õ\8c\97'\ eæ¸uì\83ëx|z\ 4þE\95©mª\9b\8aïFè¿ã\eWTûYM\94~\13úS.Fí 4\8cÕÖæëK}Èÿ°\rø\1e}°'1ý\89\a\ 2\8c8ýÌ\82\1c\85\16\1e\89\14ÇÛëYØÌÏ<£|¯Ô¿Gn¸·ÉeF\93ô\87Ã
-köRJ88t\85×KRÚ|Ì\92\8f÷\ e°{>\9bs        Þ)º]ß1¿¾AHZ÷nÀhÖ£Ä$\8c\98\14\98jä7£ë\93-\9f9^8VPj\ 4
-J¿\eé÷\1c\8c\9d»o0ÿ7§\ 6úÈÉÊS\1fgëµgn4?\14e$ÖLí÷\¹¯\8fw\8e\1crá¢{üFs\1d\8d_\vl\16ª4R\ 4%Â"¾Û\84\9fü\ 3o½s¾³\99G\9føµUa Ä\10ÍùÓ\98þ\8a«>
-\13úÁð.ÛÐb»]9\11\11t@õ;Aw
-¥e¢¸\89q¿*,\12¯í.\88(\14w\8fÞáÅ\93sa\95\17#_î¤\ 3\87¿Á¯AøEÁÇë\9c\ 5¸gbu\1c9\14²\86\ 36ú°hZûþºu2^à0\10Ï\9clïj'?\94\7fb1\07\97çü,XtOlÂkzè
-\1aÂù\89\85»û]»\99¹\1f\ 4ø\91Î?\fà\ 1óE\1e³ \fų¥\0>­¹ü´S\9dGÿl\9f\8e`\15Ïßö\85\83¹ÜÍ\12m¨2ëøB(ÃÿÁLGRGë\88\11Gr\9bîøqÄý`±\88¼õbIËÕÆ\vC\ 6ؽ\81\1e%\r¹\88Â\1fÏ\88\93ß8)ùMÆrg~{q¶\9a\83*~\b÷°åÅË\87\15f\1d¹\1f76üÍÏÛ»ßîþ\a©²:Ïendstream
+547 0 obj<</Type/Page/Parent 536 0 R/Contents 548 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R>>/XObject<<>>>>/Annots 161 0 R>>endobj
+548 0 obj<</Filter/FlateDecode/Length 1011      >>stream
+x\ 1}UÛ\8eÛF\f}÷Wðm7\80­JòMz*zÛ \ fA\9b®Ñ @^ÆÒØ\9eÝÑ\8c2\97Uü÷=\1cß´\8b&0,\8b&\87<<<\94¾Nò¬\9eÓíâö\94㳬\97´®Kr\92v\93"ýUк¤ù\8a\9a\ egr\ 4]/\7f¿\9f,ò<[Ñj^g\ 5u´(ª¬>[\9a\1e'c\eÞ²¾Æ&ïÈ\86w¾ÊÊñÙ\91\rïr\91å#ï\rDºcôÉ_dkZTkÜ\97ø¦.ر\\97\0øƱX¬\11½¼`_\15\b9Y     ÝÈF}$(GÞ\94\14ø\97躬¸B2øàÈì(%¿ùFfG\ 5¸«G\a\8bª¸ÚÈZιâ-íÈ\86w\99gÕØ;²á]\95¯¼ó\82\19\ 2&t6Î<¶á­jfåVw1Ï\16´,òlν"3XJVjvdÃ[××Xö&\96ò\12]½¡þ×Íä§\87\9aX\ f\9b\1dT¶ª*\1cÜ´I\9m\9a{\f#Ïè\ 3\r\96´z\96\14,\1d¤îéhã\94\86\83\bÔZD´öçw\9b§\94¯:e\9b\15\18L\89t§,EF\1f­\91Çñõt¢¢Ñ\89tà³\9c\92ÝQc£ó¸\1d¤nl'QÃ\88 ¬ñ$LË^`\8a^R\97òî¬CD'\94\81âöÊ\aé\94ÙOi\e\8fø%owa\10Ð"\1a\bÒ\aúË©\17ûíH\83
+\87)g|U\13Ù\18]N³DO{\8f\9cQ\v\a*\9cng\83j%íe\98\ 5\8bëA:O_î\ f\82?_Þ\81±\1dóCÒ<Ù#Á}«ÎÈwRê\13\99Ì$\83\8b>Á qíqJO\11 [g{ö
+26Èì-Å%kèÂp\99Ñã¹Éï\11{ÆÅ4\bz\91¦\ 5g Z\80âíÌI-\82loXÓ¼\ 5m\9d\1d¼t<\87-áæEâ\90£Þ\81½DÜX\1eÀ
+\82¥ñ\91©fy\xv\11\83ó\9dµá \8f¯¹å\110a)i\e\9b0Môuj\7f\b\98³ñ`Û\91\8f}¯Ó,ot5¶?2\18­\1aÔ\94\19}\96Ô\bs\87\f\a;H@\9dÒ>
+'L\90g<\83\ 4×ZÓN}#\81ß\1eÄ\9a \84~\8d \8a롶­Ò*\1cIy\1f%ÆÀ\93pÒG\1d~<\8byFÿB\0\ 3ê2\1f\10ÍóiÂÑ\9f÷äÿT¯5`\9f%Áª       Rt(\r\98\838ré½µ-\81\f\91\1a½ì\85\91\ 3µèUÛ\1eB\9cR/\9ag±g]í£\ 3Wi1\9aØ¡Í´?48\85íðÐ\8bê@)\v\19\vðº\7fÑ`Á\80Þ\1a¨*ºF>X·\97\99I¡-aÏôidªM+\ 5¸7\fÉÍ\04ö0£ÍAòR
+D"ì÷\vÔ;O\1f\85\89B'.±jxb$9ÿi\1a\fIÒA¼@¨m\vQò:ñæ\9eYI\ 2¹ÃôRHê\87\80Xú$?\8eúí\9fG\94ì­WÁº³N/Ë\8aÜ|v§°\8c\ 2ºRAl5è\16þ\99ø1\82bçñVT\14ü8+ðæ«\96+*j¼­\12Æ\8b¬\1f\9cü\1aÁ,hüÅ?\ 3é'\b%=¥\98ÏÙåàl\9dקM¥÷ÒH'4}0¨Õ¥\89pè¢ÂˤZà9\8c\85\9eó?\7fl&\9f&ÿ\ 1Ú\18U¯endstream
 endobj
 endobj
-515 0 obj<</Type/Page/Parent 490 0 R/Contents 516 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F5 6 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 250 0 R>>endobj
-516 0 obj<</Filter/FlateDecode/Length 2194      >>stream
-x\ 1¥XÛ\8eÛF\12}\9f¯¨Ì\83W\ 3\8c(Qw\ 50\ 2Û\9bI\8c\e[\8b À\0\8b\16Ù\12\99\15vsdýý\9eª&EJöl\1e\16Adµ\8a¬Ë©ªSÕóçÍ8ZO©û¨ö4Æ\7fóõ\9c\96ë U\9av7±ü\14ÓrBÓ\ 5%%Þ\19ã!þ\88ùãÓO7³8\8eÖ´X-¢1\954\9bM¢Us*èóMÿ\fér\11-{R(¢Å\92ß()\9e³\1a\8b½cIói4ïÉ:'ä\e\8a\16S|ÎVK|Nð¿\ 40Y\8d£\19bZF\vØ\98®'ø7\9cØHÿ\fï&\93\93Î×üð|\ 5]ìÞê|\12ÿ ¸\93Nâéù$R\18\9aÃí\18¿Âìx\86°ÃIÌöÎ\90NglV\9eeédÂoÍã\15\1c/i²\9cÁ~8\89´wfÍK ÖIûgH'sÖ,\9aÄnï\f)P\85Wg)c8\1fs\94W\18.\96\88e¶`yIkv+\1cXeï\b\8c&\8cU'ì\9f\19Á%ìõ¤½3¤°r!í\9d!\ 5Úëþ»½3¤kƨ§¹w\ 6\821'½\93öÏ\90¢`§}iï\fébra\971\98¢\98\0Áe\9d± F\ 1®¾%\80\12NåtÍE"\a\86.èúZÕÛÍÍèaFqL\9b\1dÚo±ZÒ&\95\9e\eÓ&\19¼ßÑÉÖTÕ\86þUåÏöË\89¬!E\1fÞ|¤cî3ª\8d¯jçuJµÓ\95»§£F/$¶,µIÉgÊ\8b\82ÔÖÛB\ f\93L'OøUßmþ¸în4Ö\80T\92hç(±Pk\vy\8a\86(÷   ¼\1a(ht:©«Ü\9f.\15 :´ +°\a\9f[ã¾cùèaMñ,\ 46DÅãk:\98\10½7ðY¥dw¤Rxmì\91ÞÓ^{Ä&NêjkU\95ÒAy¯+\837(µæo\9e\8eÊxò\16\8e\84 àÞ\ 2\89\10÷N>ËÍ>
-¶;P\87\13\ 6u°É\18\9a\12\rp<ílEÛÂ&O\0//Õ^#neh«Ûð\v\b\ 4d\0F\97\ 1\v\1f"àÑ\ 3*Ar7pÚ\ fEÍ0(­.Ý`l\19\9aK=gà"ú\1dyÎÔ³>§§\ 3>Él\9eh\ 1ë\9bèÜ\ 35_)ã\ eªâÈâ/1ýôþ!DE\8f\ 3õ¤èv[(ótûxwO\88[\ 1\894G¡\b\96À\1c5dËð\82\19G\8aP\82\15\f³\13\11\9e}Da\ 1m@Öøf\8a\13Üw¤w;ÖÊà6 \1e³<É\b\9e\9dÑÆcAvOy\ 4\95ÇÌ:MÿþôÁ]Ù.\95Ç«[\8bBW\7f\9d\81\f\ 5\8a"W.äáÛH\8f\1e\16\bÏ_>ôuZ\99\8bæË\ 5Z\13\15$\89½|£M`×Äm¢¥\f\87íûÃÉ"Ô\7fÓѽ2FñKÝÞsæ\r\0Uf/Uð×\11ÿ\7f5ÇmÔ\94ED\eIf¨\7ft\1a\92\15z¼+\ 4\14\8cG{±\97âY¯öS½SuᣮÄûxìòBKÕ\81Sê}Æ
-.Ala\1f\80½¶Ã­rh¼ Ê\11¿LlÚJC ÞÝ\asNÓïßæ\9aiD¿e':Úº\80NsÚÚ\14§\8eC^à\9b\1fØÁ.\8615\1cò ÔQnu\85\18\94\7f)\b¯\8b\82\81
-\85/\95\14`\vÆc\12m\ 4\ e|v©£­¦\ 1\1aÃQi\9dGWíkPòÑVO\1c
\ 1\8aÏìáÜ\84g\1elhÚyØ`î\ 4\8bïò}])æ\1dV\88o\19|w¥ª<,xá;q(/
-*Õ\13\90®*[9.\aРO\8b\96\88Ïa<ç®V\ 5üJu\ 2²¹\97\bº*ÙÖ\9e5»Ì\1e\9d\8c\1e¡\8a\10µ\ 6\a´¤Àß\eöÅÐ\12\8ahØ÷YW \12]\1cvuA9\1a\ 2õ@Î\96\9a\8czÎ÷!\1a\95\87Öí\f\83pÐGº:æx<7ƲwÁ\1c\12\ ebªÀ\90ÚÖ\ e®7\86#úÌj\ fÚ\1e\0k\99ï3Ì\9fÂYÒæ\ f\11ÃiD$ÀÆ\·ÃV\19\83\89ËÕ,¢>±È¨º,¡ACî2¹¢ÿY³3\9ev0\1e\82n\0Û\8a/ÍüJÑ\9dÌùú\v"ìF)\i³ÑÌįS\18ú\81óÁq¥¶\19»U.Ã\98)ý¥Ú\17\86ÈÔá \8dCÆ@U°G-\fÌï 2âöHS\1e©Aþóæ\1f\1fP\89©\8c/~á\80I\8b
-qºØÝ\93T\8b\98\
-s\85\9fnChÊùqàêíã]j\93\9aÇ6\ 3\8eÙÃæ
\82!ðØã \7f¼ÛUªÄ\14G%ȱP'Y\898XXFY\0/,\13ª\10;\b¾UÙ\eN\92\19ô{»ô¼\15Ü\8d5a¨\84|˦r\99\v8é|îë&\88\10fÓpð\98\97¶Þ#\92Ô¦î¯â\15ª\92M\a-O\16íäu\92\99<ᦻ'\97\e¬\ 2\82|\85\16C;ë/\aL\æ\17fÍD\1fðÝò8\16è%QhH\9eÍ\95þ\13\ÂË¢2WVåÙ\16\90\16\83vfm\90\9eó\92A\95*6\ 4èÙ\17õ¬òBaÅ$ì ð\8f}     \14\102M°®Ða&W¾FêüÑ\ eÁ\91ð>ß]ä\11ÜT\ï\9d!­2A@      \ 5ïWG\1363E\85ªPOØfèöí\87\7f¾ûåÇ¿ß65ɪ\eo
-¼á®£j&ñ¡Ò;!ô®\96\11\14¶À\86$¸ÕB\ fÞ\v\9f\95X\95¤;ñ\14p\95jd\b.\10Ä\82\ 3\ f\85Õ »¦\ e.·s\9f´\8dsæ¤wE\9e\83öö3xà\98\9dn     p¡\1c°]q¬Ms]'åÈ<θ\8b§bÿ*ÏU\8d\1cµ\91±Û\9cÌ\88ÞìÐ\18aõh-Ë\93\9cÇÚ\84\8d\15\\ 6*[\vm\9bZ\14\a<øÛÛ+Ãܬ¡T\12\8fùqÎQX¼\9b\16Å%\86e\ 2\92\8d\8aÒÇ\ 1Ï<Îÿé»Ç;z\ 2F@ArúÒ=c\1eÑ;4^{qâK\94\94!\9aæYöiC¿åfòËèãæ%Îû]ãrÒ\fÊîý\13z¨D\r\ 455ZrÏÑ\8e\1eæçÕÒUÏ\18\19\91þ"\8cÜm\12\830Z¥?\13Ùn1\97\9b\1aÂ7  5¬Ðù³æ!\9b;i+¤ê
-Ð6¬\1cc\9ew|d
-½FàÈ\9a\ 1j*Ä+÷´UU¸^ð\80\95+\ 6ïw`IοÌÌ@ÄLßa×nv{\9fc:~ÿ8h,÷è\0\ 5\fo\15F§I9E;\1dúºa\18Yÿy\96Ю6ríQ\ 5.\8d\98·¨f¶\8a°påp¼\97¼´Gõ88óþðýhäp\rI4n\16¨X£ý\bW\1eÞOF?°\91שöà WX\ fÒ×ÓE\1cÇ«WX\12^ÏVóE¼|µÇêyø\ fÎ\10Ä+    èüÇ­ÞÖÅ×\96 \bygHÕ\15êN\95¼+\¬VM\11®\9aäÇóY\ 4£´À\1f\91äbÚfêAÐ1¼Ó½q|ëü\95Ù\98¯Ëldؾ7\\8e×á¦Lïú\e\1c?4Ã\1f\84\96\8b\8eÄcþéÇÍͯ7ÿ\ 5\9a\8bÏòendstream
+549 0 obj<</Type/Page/Parent 536 0 R/Contents 550 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 180 0 R>>endobj
+550 0 obj<</Filter/FlateDecode/Length 2776      >>stream
+x\ 1\85YÛrÛ¶\16}÷Wàè¥Î\8c¢èjK}éäÒ4î$\8d\e¹\93v&/\10   I¨HB!AË:_\7fÖÚ $J¶s&\89,\18ľ¬½ö\ 5Ì÷\8b~o6RÇ\8fr¥úø3\99MÔõl¨J£\96\17\ 3ùÕ@]\ fÕèJ%9ÎôñÐá\83gz}u5\1c÷®Õxz\8dïCü\93³Ü\98`cúÄF[Æ\97ß.Æ\93Qo\8cÇú½\91ÊÕøz Ò¸ÊÔü¢½ÆîôJDÆ]ª\19_÷q"\87îaó\9dç\8e«\\8d®©@\1eãVk\99«« \ 5\1eöZË\M\8fBx®µÌÕ`@_\8f\aÛkì\8eG'Ö´×ܽî]µÎ\8a\17£qor\ eÖ`Ð\e¨Q\83ÌpÚ\9b5\vqð¸\14\ f§­=x\18\97¹º¾\82¡A\bÏÍ\ 6Ð\1de\ e\157ÛkØyÕ\87MÇ£\ 3 0:\9c\1döû\aëÄ Ö\1aÑ\80¹Q\ fwéã\b\91~\92\99 }J¡Ñx\f        ÃÑ\14Zàá\8còÂ*Ê\e\0³GòÆ\13Ø\bÈ®p\b?fá»8×'ì\93\ 1°\81oCú&\vÙ;.±7\1aÁÚÃÞh:\81  Í¹ñ`ÜÞk-ÁÎááAÊl-±\aß[úZK²\9a\:è\eÌ`æ\98\88Dêò;%\ 6æ\86\9dÀÔ¸#ð>\91noî.^½\9fÁ#8}·DB_MǽÁõ\95ºK%\93ûê.¹\1cöÔMQy\9deÚ[W¼¸ûW\ eÑ\f9ór8èÍ®&8\83G\a=õum\93µZ\94nW\99²R\1a\19_ÕÛ­+½IÕb¯nK{ï\1eö¿\ 4ASÕ¨~     Ç&CJy]ìãqå×Ú«D\17jaTâ\8a¥]Õ%Äx§êÊ(­¶%DuÕNtVkWgÐaÔ½-}\r\8b÷
+\1fQXÕSïli\12\1f\7f\11íR¶R\85óª0\89©*]îUe\8bÄÐÀ¾z)\8e¦\97\8dÙª¬\v8\85¿ª2[]j\ f3¶ÛÌ&\82\8eÒ\ 5¬ÓÙ¦¢\8d~m\ eºl!K\0Y¤ºLí\7fáÆ\87»»[ºà]â²®ú·®¼Êì\86\8eíÌ\ 2
+Ê{SªÔ\99ª÷\ 4ìCF\8d #B\ 1t·50È\16+Uí+oò3ô\7f\0¹\87\19¦2\85ïÆø\10\94Máv0ÛÑiå
+õÕ\16)Âúír6éªÙ´«>ýÚUÈô~Wý}ûíEW}´Eý ¾]~1é\a\rYóz\8e\99\85ÕEW½u@ØÛ{ÝU¿A\95sx ÓÉf\a\8eàô)Þ\9ft¢>ÏÿîâãÕ°«^çv¥?Ï»ê\8dáçûÒ\987ów]õ\87ñòóóÖ\14òeî2]Úª+\91È5¸\94;6\9dLß;ÐÑ-Õ_\85}\10<\11\\90N8÷¦ö8°Wç\b\ 6\ 2JÌïÞÞ¾º¹í
+\eAÅÄÀ\91\ 5\18æ5\ 3\96ÞëÂë\95¡\82H\15\84\\83T~çÊ\r¢]Yp\92)\ 4º\1a\98\14\1fÛ     k¡ã\14\80\86cB\ 1\9cÑêãë?Ô
+|Ûé}OÝ­\rCBý Y§ù}\aêL*ÜC\16@dA2\0v\9aÅ\aõÂÝcqÎ\93s8æ®.\13f\jÈ\83%Ðf.Ýk\9bÁgÓU\95SÌhJ\a=\1cD\97\8f¥ò¨Î`.³eëªÊ.lfýþ\87d\1eõÔ[äû\8d\ 1"ë×*ß+\93Ã\ 2\95d\16ôù\ 1\9b+\959X\ 6\ 4i\98¸P¹Ü(\98Bs+\83`\1f\92ïa¯\96®\14t\82à.¿\17jo\84Dp»\95ÞM)BñIYu\8c8n==­|i\13\ f\98ª­Ñ\e"£O\ 3ÚijbGA\1dê\r\83èêÕ\1aêp<\87m,B\88\e\84â\aj\ 14\97\9aÒÀÔè\8cRwÄBÜib\9a¸<'A\16°J\bþáîÓG\ 5ò   Z=57F}p;\12÷Ô \9bcI=\92\91Ò?×>sn£~}`U¨~\815\19\ 4Ð
+I&h£Íç¬y\ 3~1\97±\89ª-V\84\80\854(ê|A®,U]Øï5z\83\12¤\90|Ý¢7èd\8f)\11Í\ 6)c«ªf\18\ em 4ßkÔð\90o   \93jc³\8c\84?u\r,/\81\8b\91D\ 1t÷p\0¤¯ \99p\19\1aE~uÂ(Òå¹v\83\8c\87ÈÆ+ph\9biVtóà#{Ð\8fJ£+Wü¸X\8f#¿mhª\aäi²ú½.6\88£7åóôþJEÑ\8b½«\81äË(ìx^-m     
+ÁÔÜ\166G¿\91h£QyÄ\ 1þ³\9d\ 2\ 3WôÔ?\10BþíPÃ$A4\8a\ 4$#Nè§|\90}7Ô®¥ÍÀ2Pá\14ðeíÑ\99\12   \87â\18\80\7fê(uW{\14Ë\aµ¦\9eª^°)z+ý:YëbÅäB\85¡o;\84W\8a\9a\8bÐÕY{\8e\ 6\a\9dT?5\8b©\84¬\ 2%11lW¥Ne&\81 \rbÁ)hÝB\ 4\93\86'\90H`º(kRÏ£î<âû\1f\10ü³\9a³²4Ò(\9c@êÚ»\1c¢\13ñéÉøt\95]Ʀû\1f\1aÍI¬5T\1dºû\ 4óW\18\r¢\924r\ 6;±Ä¡y!%AhT\9f\ 4\8c \v¿S\a\bvÏóéukDR9g\10Ö F\9e \81Ö±
+KG\92\89\8bs\9c(Zî©\93\98\94Ù*ìë4eå\bIÍ`5yß\0,\85\rÉ\8e$?\8d×)aPKtL¯8H\85z&\ 5)\10·\99út\ 6Æ,³ºZ\ab4Åö'\ 4Ä h\85ú\92Új\83:\98À^ø¶B\1f(mÊbÄÞ/¿O\ 1u±95Êr\94
+\ 3E     Yà,\1f¯<æ
+f\87ÛØÿ3 ]q@CeA\99'T§\10A{\ 3ðó!ºYJ2°qÕ[\91\11c\ 27\9aá,\ 4!ßÖ$2S' \80æír\8cdH_6iT8´6¦öÍü\16à43&*»´\94ã´\82\ 2\13DÅÙãÑ\84vtE\92\14¤\89·\ 3\1d\86úKÜ£pïÇ\9fA x3ì_Â\1cjó6G)\91\92Ñ\fõ`X'sÈ\9aµ«|'Îõ\rl\91Ù\85F±\ 3\93\85¨ì\88mÛX\9auS° \0­ó¾ Ê\18{ë+\93-¿½\10\86\8a'ditd:\18Lad] ÖU\ 2¦$ÓcеJíRJ\1e&è \ 1ý\93ò2\8b*^¼\8c\89\10\88\8d\19\89\ 3à·\17ç­ó+'\8eH~¦\94\84èÈá@\19Ä\9f#W°Èï·M}Á0$\91Å\80ãÊ´\8d '\rÁã\16\1d3ddç\10\93N,w\v÷\808\14ìeçxuxEé\bH\9d9;µé\0\17þr~Ä.\14Í&Ã;Ä®#YÛ!"\1dv\ 2FаO·Ýb\18påHå\8eÆû\ e\9b\1e<ëbJHa5:=MH¤L*79\8e¿á\9a\15#~\ el\f\19\a7)\11 ©p\aç\ 2¨\9cj0\\93uê5\v\ e®\14\9cØQ\Ã\98\83ÂPaä\15Óì\1e\07\18\95\1aÜo\8eøÂ6"Îa\9d$\ e³þ©ùÑ& Ò\8cèÝ\18(\8e7÷:\83\ 29Mª÷Ô-\89¥1>¯
+L.\10\19¯¹\153\81U\99S}O±\1f1Áý\ 1=^\1d\8b\9fx©$\19y\85\82\ 6Y\12h©qûeJ¥f©ëÌ?\87$eʤ
+6 ÕsâEMI³P\15ÃU\0ÈÊ\9d\16õ¥Æø
+\13ßßáê4ÿÄÏ\9bOø÷å->ÞþÙUÆ'¢é¹öwý|û\v%\19í]\1a\1fÐD\17Ç5\10\19ÒSlj\8c\83Æm(\8c¤\98KB\19FÕÛ\95¸\1f<_nß¡) Ü\87\84l\86¡&\1dI¹§Ûâ/êÆËu]ð©\\rrË}ÞbØç\18Þ\ 4ê\1fÎ[vµFTÙµ<*\98t®ØK\ fy\7f\1a&iP\92\1dà,®gè\8d5Ü,ÍKÐ6åa\90o\8bK(&!ª çQ\1eí\92\97Ä\16+Ú¼ã4&Ì\8eÎa³iå\bl¬HM­%M\1a\eO-\8b¥ù¯/\1f\7fVkï·?¿zµím_5¹ß´h¹)\13W\0\88\v!oËÞú\fÂ;R" ºI\8d\13î9:á+\99VA@ð\84­\ 5²5Z'3\1ch\12\9bäÙL\ 1\15\82w:('\eVÎÉt³r\87c\18^p£'¨bX¥e²é´r\15D\8bù\8aÖ\ 4r\85º×\ 2\8e\1e\1d8"Ð62N!kÏ\9f\8f\8d\88Ó\9cÉ0\7f}»D>-äeC$;¢\89Ñ\92¯\pùL¤\1e\88³\e\83Mò?mÚ!¼MÕ92ãÌÂ\90æñ-BP\89ÛËÚ$\e\11\9f¹\15n\19\19Òê=j(\1d*k¼ßÁ\r\88\95\ 6C}xA\10!$Õ¢E'¡Ã°\8fÜ Áq\ e\7fâø\99m\8f\ 6õ¦\88Lñî½y/\89·ì\83k,ø\8aìÑ+Lþ\8fÂt:Æ;Oì\8f)ü×»\8b?/þ\a5ýÔVendstream
 endobj
 endobj
-517 0 obj<</Type/Page/Parent 490 0 R/Contents 518 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 261 0 R>>endobj
-518 0 obj<</Filter/FlateDecode/Length 905       >>stream
-x\ 1¥UMoã6\10½ûW\föä\ 5Ö\8cõaIî¥Ø\ 6ݶ\97¢Ûø\98\v\11×2é%©hýïû\86²ü\91¢Û\ 2E\10!äp\86oÞ{Ã|\9d-Å:£ëǽÐ\12?«õ\8aÊuJNÑn\96Ä­\84Ê\94²\82ê\ 3r\96\9f\84?\7fþÂ;T䩨è@y%ÖçEGO³\9bå\81ªür\90cI\92\88Õ%1ÉRQÜdÞ®\ f\94\14¥(o¢W\10ñ/\ 6ε³\fß¼*ñMñ\e\eàÀ*ÏQüM «Ö"£|U\88\9c\81çàá¼\8aÈoÖ\88\96\ 5W\8eg9\9aæè6Ï3\91rêê²\88\99×%z\ 6\83\1cËÐE\9e1$ô´J\91>®8Æ»yºä½û\ e~ÚÌ\1e>­)Éi³\83\1aE\85?\9a\926õ<\13I!èW;P-\rýF\a¹Wô\87Ó¯öÛ\89\ 6ëö4èÐ\92\r­rttö\9bV\9e:\8dCO_{Ýüø~ó\ 5õsJ\92±þ"-Q\7f¾iµ\8f\15·\8a\1ak\14\10¶ì.(C½W»¾£`©¶\87­F\18åi«\8cÚéÀ\87®\bøòÐZ¯xW¢dÝjó\12\91\9c\ 4\98Ê @À­³¢\e\17     s\f8;ë\ 6é\1aά[y\fÊݧÄd¤ÌI\eÆr\1f\8dV\8dQ\0w Èô²»?r-0´ºn©Q¾vz\v®ZP\8bF\e\8bºÚ\vN»Õc\91%p\10 B\88RÐc\14áKï\ 3y\15.4 \0®¦£u\81ªe$3´½'ùj5x5\8d~ÕÍ\ 4\8a\16\90´â\9a[g\aF\[³Ó/½\93A[óO\92ýn?\10³\7f°p>t9vº\96A5À\r\ 4AQVkºÑ\1a\86?ªZË\8eöÀ\11Å\9bl²7v0$=½\vN\1a\7f\94N\99ð.\12\a\8cgi¦ÃÏs\ f1·ª³ÃóûïÒT\8d4M&u}¼CÞß2:ä{½Nùuï\18\17zj,ô26P+_ÙWð«ÜêN\87Ó\a¬lÿÒ\82 vñ±\93Æ\80\19Ø
-\9eÜõ¡\aeNuJz\ 5\92®ÍN\13ó¦g§0;H\99\98\ 3ÁMÇæ\84Çy\128®`\81VÉF9\ fVN\16ó3@\83\8b%\0\ 3ôb \8erÛñtDÎ\96´HùI\82ø\8f­Ô\86\8bN\8dn\15\81y®Ã|\8aº¢_\7f×.ytÛáB\9eÿ±ó\7f\99µ9sñ\9fF\f\b'éÿﬠú\b\85èÆ\£ê<oxw01£D\18ù\91\89\81©\85µ\ f
-<\8c2áE;½Qçy\1e7þö\9eÌÛ\10\8e?<<\fàÆ;9Y\98®\16F\ 5\87û¼Ë\9bpñsu~&\93\15þ\ 3¬
-JË8¦\93@\9f¢îÑ\8a\1fý\1eà?³\v\9e\v/¦¬E¹\\8f/\ 6\ e6\1fÊË\\94E\85\87\1e\ eH\12Þúy3û<û\vu       0§endstream
+551 0 obj<</Type/Page/Parent 536 0 R/Contents 552 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 189 0 R>>endobj
+552 0 obj<</Filter/FlateDecode/Length 769       >>stream
+x\ 1mTMoÛ8\10½ûW<ä\92\14°\19K¶di\ f\vdÛ¦è¡Åv×\97\1ei\89²¸\96H\97¤âº¿~gè\8fÈAaXÐ\90óñÞ\9b\19ý\98ÌE¹ÀëÃm1§_VfX\95)\9cB3IâQ\82U\8aE\8eª§\9899]\1fÿ|\9a¤ÙB\94Èó\15={¤E)²³Õá_öG\9e\15bÁw¹X\9d\r¾\1a\99=\16+Q\8cîFfOÙ(ü\94\84ãFf\8fry\933Ir.\7f.\98,\967\91c»G\92§7±i*Rä\8bR$\845\8bx¢q¦1¦ÍR\11±¬XP\86e±¢÷\94þQ²¿Ö\93Çç\12¥È±nH¾¼(Ä\12ë:ª6ǺzHE!ð\19[\15 q÷·Ó/öç\11ÚÃØ\80\8dÒf\8bÁ«ú\ eõÐ÷GìåVAv¡µÃ¶ÅÈÝ\rÆ°³4õ(L¼[ÿG\b
+\14§ú³\84:\92\12\80\87gí|\98¢\97;\ 5?\10ØÐÊ0Jx
+\94§À\ab#»îx\93\8d\ e\7f[\13\9b#^´×\81á´!ìÿx|Ü\8bý£Àw;À\13ò®\86W\Q]\vöR\9bH\8eÄh\98ûôâÂ5ç\98E  ë\87ª\95û \1c¬\81\ fÒÅ\1aW\15LLIr9âe\ 6ÙEú\14L¬#é¯ö\0Ý\8cAá`ÝΣ±\ eG;L±\19\ 2,\ 1s\ 4Æ\ 5\ fÛ\ Þ{\1cÔ\ 6ÚPùFV¤ZKÙ\98Ãkg¦\9cÄaãì\81A´Ò£\92U«jê­Sµvª
+\9a ëpËJ\99Ê\ e\9c\98<7\8aÀ¼
+s \1c¯cpÒÐ(ò\v\16U§dÄ}-I cA\81¯6\9c{ê[Ý\84\99S\9d\955·ä\162       `îßÀiU·'ýµ!\96<\16÷]G\82wGâÐ8åÛ7)¦qV9í\98c\9c'\ 2X³&\1cáÔÛv¬)dïl¥j\1e@îAdt\ 1\19\99àE:­¨CÎöWa\89ûYc\81'O3\ fõSöûNMñÅþÒ]'yi\1cu,\ e[Õéj\87\8fµ\ e\98Íþ¤\86ª\86Ð\10;Ïöm+\9eê\17I7uô|ÏÍ\8b+Eø\r¡ã<\e\9a\ fܽ\8fÚ\7fQ½uGD¿»èx¾ø ýî||ÝÁ$á%L²¥(²\1cüu¢/+­âe~\9f\9dú1(\13Hè'¿#\bß\ 6åy^<C\9c]\ 2g«yÉa)­\8a¡% ¶ìÄ>Ëb.\8abI\1f\1aºÏøäãzòmò?Ëñ¾\8dendstream
 endobj
 endobj
-519 0 obj<</Type/Page/Parent 490 0 R/Contents 520 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 278 0 R>>endobj
-520 0 obj<</Filter/FlateDecode/Length 1771      >>stream
-x\ 1\95WÛnÛF\10}÷W\fô\12\a\90)SÔÍy P nÝ6½$.ò\92\97\15¹\926!w\99Ý¥eõë{fHJ\16ã´)l\v¦ö2·sÎ\f¿\\'7\19\9d\96®ñ3¿\99ÓòfJ^Óæ"\95¯RZN)[P^áÌ56ñGÊ\1fï~¼HÓe\92Ò<[$×TQ:_$Ë÷\17é2MfÇÕé"KVOVO·É\7fì\ 1n\99§\19>g«%>§ø\13O\16sÜ3\9b-\93\ 5\9eó\ eyb+Ù
-a\1cWgË,É\9e¬ò\9dY6M¦Ã;yaºÊÚ+Ó\14®µOrå\1c\ 1\1e\9bÅùêb\ 5\b\9dÝ\99á\ eì\95'>;]®\90\844ã=\15\14»Ú'¹ùÉ3V³\19\9c=­²OË9\8c\râÿáþbr{CÓkºß (\8bå\8aî\v©\ 4¾É/g  ½5!×e©¬vMxyÿIö§³vÿU\96"þû\ 2\eÓ\84~r{ª\9a|G\85Ó\81þðæÁ=\1e(\94üõ\81ÖÞí\83±[¬îíkºß\99@;\15(:REÁ7_ÓUÊ      Á}ú1zEÑT\9a×û£Ik\7fFiÚÙ\9f.y÷]¤°sMY\90\97\r\1e\#\86\ 3\19\8b\92¢öU\18ã«\82*u \95ÇF\95å\81vº¬)ÔZ\17\14wp1P\83gcs\r×p`­¬Õ>ðÁÞϬ\8dÛÅ\9döô©±\9fI\ 1Pl~­%H\13êR\1dt\91 R\#¦¨ö.×A² ±yý¥1\1e\87c¾L\fºÜÐÆyÒ
-ɬÕV\8fÉHî9C\9de¯K\15Í\83\86û¡B\14\1c$\9c!÷ =?\86\91=·éBjÃÞ©ºÖ6\106\1d\b¶óÏå\81=D-ð\e\ fµÉ%#\95C4q§,.Ø\ 4\1d\aaÃ]ñ?¨\a8ÏQsQK§
-\8e\9dóëµ-´\97§\82L\85\18\82T\ f\11L\17\00ª6º5%*\82=#Ê\9d\8dÚFz0¨:¢\10{ç¢\0\1aOn!\10RúË\8d\9c\ 6\90\83Ö¼­GÈ%!\8bç\9bD`Îï*´²p1ê«­Ù´y>\9a~îN\14Ó8$\911\94«& ¼Tk\9fk\94£\10øq6Æ-\82\ 6\99ãà\10(\8a\8e\94åMÅA[\0Ox°Ö´n6\e-\88Ð@\06µ8B\92\12z¯±®\81î\8e\a\94\87\92ÓY2Mè\8e+brø\82´\ 6\83:¨u\89«\80\98\ 3êl\ 5R¨Ð\97F\87\18°©ª\ 1^`ßµ\b*\8f(ïØø3ð½n\ 2\8a\95Ð\87\9d\8a/\ 2í½³Û×\1cÜ)Û\Û\96\8f\eá\9fd\ 6ôûÏ\ 2|o1ÛÄ#±,2\90\8eö\1c\83¬g(\80\19ÌßàË^¯¯Ö\r\98¬c>f\14|\17ªþ\1f\12\9e°±÷ì¹òVÈ\1cêFL\ fdÙXä¹Ò`\98\b\93ó¨\8f°\9dÏ\9e"ªt\ eú\99PqYöÎ\7f\16\ 2\ fÐ\84:³^1w\ 3#©« è%n-\1aa ö\0^ÐÒ!\ 3ïa±'­ðY\84\9béÌr        ea\17¶ú¨\9f¶©ÖÐA\bb\ 3[ì®Öeg¿0\ 2\\e±ª[VT\8e\ 3gÙÇ¡\81ç¬\96\82\1c¢òl²W\f\b/ Yê¨{]\18ÓÖ<°!6
-Xy0®·\r\85\e\99()
-£NË4|É#§ECÖsÃÁ\f\1ch)".8Ûö\8c\ 2û ü \8dÅi¦ø0a·½bñÕª\89\ eªÑ)&\88Ê\97\15RJc¡³ÞÕÞ@UèíÝÛ7¬­\9d\ 4rÃ}\86¸YË-é#£]\8cõ«É\ 4®lÌ6Á=ÜJ\13ç·\93\91Èk¿¡NêÉHh(B%\1f'\85ëeðHÌo_{ÎÑ^õ.¥+ çèÐ\1e\8d\8bÛI×ס\ 1ë\ 6é¸\82\9eHE\80kí7*\aùú>yTÑÞ¥Kê<`¿ÿŤâ~îc\ e\98q\1f4qX\88÷Ò\9c\8f#\ 6z&P\17÷Z[V\1eÏôï\91'ùbÜܱ\83V\ 3 \80K\8eÖ\16\fPÆ$Ä÷¹®\19\82\9d$²Q\1c    z\0\9a.\r\98n¸Ç)\eö\80"6V´7q\87{\9f$eÄ>\0ªhµ£¡ûÒpU\19 \ 4ê3nc{\8a¶ÎA\84¡Éò,qôLn\81ÐxÀÍÙWt·á&ÒöW\ eí¯w¿\9egó«\84?\83¤ó\13\9f\88Z\14ßx\92\ 2IÑâÐÄ)¨\ 3ópÔ\8f\f]  \92d4&ÍSÅQ\90~ÿ\ 5\9d¨m\ 4[\1d\87çûÒ\81G`â Í,w°2BiÐtT1æ\1cw\95í3R\98¾\88\f½\1e\91\925ÎFWÆ1æ:\1eá¸ÚÇá\10:|¬·ÆÅ=TO\83\15Ç»Ã\\83\99\8dg5î\8b;ÁÁä\16óv;}\88>²Ó§æw)\98\v\ 6|WlpHÜ!\ 4>0`¼ÎY¶\91· \13Å\89^ôñ²û\16/+7É£\0\ e\13\9fö\1f_J:\ 6¤\83\1cªØ\80£\b\ fhb]\82¬áW\12ÒØA\86Ûé-â\bÔ\9c·\9c\ 1¬\9d\15QN\8b²\1d\v\13\81Ó\8e\eçè9á­\1f\8eÐÉô7f©Ëa.~sÈ\1a¦Í¶©\1c\r\ 2Õ \86w\15\ 6a_\1aPíi¢NC      Mz\b\8c\aavj£\1f\15÷\93\ 4me\ 2aÙ_A\9b\1f\ fWÊc>`"wÛLò)YO\10<z\93\8cè}\1eÃF]C\8bx\92ïà\1c¢Á\80ÍÈk\a\11äù42uãyçéX\ 6¡îå¤oªÝP\86\97\8c­o'fð+Ã\eT*\89\99Ü®N/8«\ 5Þòä\ 5ëë7±Ùr\96,\17+¼·aC:åØßÜ_üyñ\ fÄm¹µendstream
+553 0 obj<</Type/Page/Parent 536 0 R/Contents 554 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 238 0 R>>endobj
+554 0 obj<</Filter/FlateDecode/Length 2899      >>stream
+x\ 1}XkoÜÆ\15ý®_1Ý\0\8d\ 2¬¨%¹O\7fImÃN\ÔE\1a+u\väË,9»K\8bK2|h¥\16ýï=çÎÌ\92\[B\10É£;3÷uî¹wøÇÕ,ØĪÿQïÕ\fÿ-6\vµÚDª6jw\15Ê\9f\8aT¼TÉ\11gfØtþñëOWñz\1eDj9\ f\83\95:ªùl\86ßv\95«OWÃ5¤Ñú¼W¤\v¨ïÏ®VA88\v5j\19GøÛQ\85«`í\16<\18/ÖÁ\-Ã\bÇ\8f*ÞÌ)\95\95H\ak\9a\14Ó¤³t¸\86\147/\86ÒÁ\1aÒÅ\9c\ 6ög\akH×ÑÙ
\15\83¡-\86M\eZ$ÿv\92\18j8\87Pãöùz\85\7fGø_B.\82\88\ e}C0_oÄãh\89\ 5¯\1f,aU\ 4w{Y8[ÃA\7f0\8c\97PÔK7kn^\866Èð\1dBYñÚp°F
+æsìê¥4t\ eC¿ò Z2à±7u\13ÂV»\12[\ak¤N\92ÓK\87kH\91ýåàl\8cðÏÏ7Ç«htóp\8d0\0\89óó9!ä­\9a/\98 ^ïp\8d³K\86\1d¬!]­át/e âõLÒ\1e-ðË.èì\82iõ²ÕF\fâFÊ\ 6KÀ¥ßHÙ`\89À\87ëÑ¥¢\ f¾\7f\15ø0Þ0 (²9\10\18\ 1\15°EV\12x¤e Eæ\11\80³4\86\14¦º³Öä\81TÜë¥+\ 6 ?\v\ 4û5Â\13.\99¤³t¸\864Ú0´½t°\86\1cY%®Âý5ü\99/(\92\ 5ݱ¢\10ª.ê$\8e\1d-VøI\b- Ï®xl¸\86Tb2\90\ eÖ\90"\ráàì<\8c᧿y\1e\93òú³Ã5¬]Î\10í^Js£0\94R¼¨÷õ\1a\7f8j\bA9±ó,f\8dY:\8eán\bÿ\84\12g\8bó\8a\9e\85°®\97F\17Òh,Ýô{]0¿ÁO!î u\8cìELÈ\88p\87\10³Ä\8b\ 5o\89${^¶"¹ÉBdý\12\81\9d±\8eϲ7wW·ï7
+\16®ÕÝ\ e-g\89\9e\12®\96ê.\95^3SwÉu\1c¨·e±Ëö]­Û¬,~¸û"§XTrè&
+\83Ír\81\e\ 6êóÁ h\89\aµ7­êªT·&U¯\13\1eoÔû,7Í\8fö\9aµr\9aoÂM°\88\eÝ`sY¨§²«ÕÎ\98\93\8b\aÜ[\16mVtY±W©y0yY\1dMÑNÏZ´Ó²£\16uÊò\m\8d:êÔ(ý ³\osÃÛy\97ÝÓ\189¢Ê\9d¢Æª.¿à/´o¦nÄËôºÒ{\13¸?ÁR1ôÃ\8e&BEsPm       $&{\80\96B\99#\14©¢l³]\96HÐÔé`
+\98\93ÁÎÜÀIgrCÅ¿ÔÙCùø¤ÊZ\f\e:1UM·m\92:\83\ePC\13uQ\94]\91Э,G$ƶæY\83xd_¶ÍIßø­\7fá_\9b ÁñÄìÊ\1aî\14¦\15\97\b\81A2#\82\81©\8c\90xIb\a[\8f°-O\19} Á\ 6îù\14Þ!¶ÍSÑêÇ©*ºãÖÔSÉ_ÕÕU\89Ëà°½ÈAÊ%â \eñµÕH±Îó'\95\1c\a\1avuyT\7fí\8aûm×´\b"Á`t\9dgø7\82Ú\b®ú0\ 6
+\16\8c\83Bã%ÝS\95g÷FQzû~fáw½ÍËä\9e\11²\7fv¨¼¶ðA\1eÕ©¬\ 1ÁVÁª@¹Äk ¼«öµN   F1Qs\9c\b\1e½MS\a\10\0\8e\99¾ª¬[\8bìq\ 4P"\9arÀrlxaN
+ù:ê6P\7f/[`à\0;\0%\váJ·\bHá­\18B\17´?©wÜ4Vc\11/¶²\0@)½µ®Z¼¥\80\9bNu\85ÊEò\9a±QãKmªE÷Ö@%2ò¤\8e]rPY¡vyyâï^]cêÌ4/B\ f\9có\99nf\rËiâÊa"\19|\1ev\9e\93L\ fª\ e?\1ft\9d\95\1d®rÔ \11ô\15wÌö\87\1a\988\1dÀ\19¬ÿÄ4\rsªUbêVÃúÚüÑ\19\96\15oõÞ\9b\14@{ªPâÀªËuÙåé8V©Ùe\ 5\1ap!0\8aµîr@ih\8d®*À\1dùÇUê·_ÿÖL\19°\ 2\19\0Ð\1f\13SYê´\0A\ 5¹K\90\909\835N±'(\1f\ fR1²i\r\11jÕÔ¡<v¶ºÉ 0\vL@¨)ú\8e@X3N\87\12ÿ>\99-þÜ\1alÛ×eW\81´À\94ºn\eÚY\eøeÚ$8s<Uê¼)¡w\1c\r9-¥\80Ö\80\93RÊÖU\84 ³Eâ¢Ý\80ßÚäÀL\94\88 4\1eK\84ß\99ÝH\95\94\1c\84ÚBÚHï£ÐÚ\ 4÷\ 1.\9e.,\ 2i£~à\1cÌ\17¼\99G}¬r\83\88X\86§\ 2a\bZ\92\94å=à\8b\92°FÉ\96Ú'Ä«\9eªm×\9e\8b^'Ìàù¨£\8aýY±`glÕ\89@:_à1\84ÖâÁ \99j\ f¨\10\9aÎ
+\93\189s|\ 4\1cåUµÙ\99\1a­ï\89\e©©ç>°{\1dØýVàÙïÅ
+\9d\a¥\89¢pN\16;\\89Ü!\9e¿ØFGfUMy\14æG²\ 1àsM;-ß\18\ 4Þ#á¨Àò\bëQ\v\r\9bk\9a5I\87\81\ 3r¸Ê\a\9cEIýS\85̱¹\8aÇ\8e\9b\18\ eò#X­ö¤Dÿ\89\9fN\93ÚÁ9E\92w)3\8cN\ 1»¡\aE9Î\8e\ f\10\91>\989TÛµe\8döEÝ\1c\7f8#4-JÅ\15èsív\11¨\9fA\95\ 4Ûð>ð¹\9b¾Lúã\99\15é9Ü\ 4\10Ñ\9b´0GÊæ\91½0X½\1eX        ï ç\vº©jÍcë\1a\ 1\9aªLBó\1d«ÓEG &\ 5ÒR4Åö\80}r\8e\7f*ë@½\ 1ÚA\9c[\81Ø¥qÀ(\99\rEÐ4~Òùþ¢£H\16²\ 2yÙi\f6¢C\ 6@2϶.OÌ\12:¡m«W··6&AeǦ\0óÌ­úýúÓ\ 1Ý5éÚW~[\15T·¿ÿÐsL\83É+iÕä\9f\19ºê\9f\14\18%]]c\8e\1c§ÙG^F8t\1fN!t\ e\13g÷bu,\87ÜÔpîC@Ól\87"\84\92\1eü6î®Ù1#¼ÝïC¸^èu£±ñ\81\8d<\°iÔæ\12?B_\86Üå \8d\86\8e| # è\98\8aPf^%\92hG´æ\15G(\94\11\ f\8fùµ\9eoR\86t-5ÁXZLÆ¡\1cB\9a\8d\96Ã\ 1@\bHb\86Ç´\80\13l´°g\v4#
+¾?»!\1fCÞôÂ\10\19+lWä\ 6\vtS$\18|1ÃË\fvd³\87\8e\8cÃ~ö\80ÇÉØV0L[\1e³ÿHÚ¡\96%0\8e\ 1ê¹Hu\9d>«ÞùÇØ
\väß{\ 4³ÀÕùÓ\99\1e\e¤\8c\18=OP\92,=¶Vzbj\10½\1cî\99Ç*×\85X~9\ e¼»\1c\98=\1c\1cjz\10\fGj\1a6vþ%\0\b mkààÚ$\a\ 3Ö\a\7f¢\80Åø}m\10o¼ëró\98mñziñ°Ø)Ìßú\82cGÅg\93Àpz.ÀÐ\ 2wmA»v\80>qã\87\9c\89ÞC\15:\ 5\9a;~MT\8e*Ì_\9e:W\96\81Év\1f\80H\80\ 4¯\9e\7fëCYÞþ\¶|kÝþôñ_$2¼¾ì\9bàù\ 2½c%»Qoä\8aj\ eìíÅ÷h5Ç
+9\97Üw\8dî£Áaƶ7@\ 5 ~ÈÀ\ 5Ò\9cø\9e\9dªCy"§L­\91\1c\19ýTÒ\9a#^\18ºÆ8\8aáK\ 6]²è\181>\84ò8FL]\97ª\91\85=Z@Rc\98\94\17\1e¹5í\89S½?\85Þ.ï­ó;È\8e*òªâS       ÔrÐhÕø\8dûx\83m®¨r£Qöm\ 6DÀ¨±M®;´\a¾\ fÁùnØl\10"\ eÆ\1d\9e8åN:±ó\15J\8a\94\8f_7\b\99#U}\8dÖgYÂAõ5g*\99÷ä¢'¦[Ù\991Ǩ'¯ÅW¾\0\96øð\84o\1eøø\15G\8a\9f,¢Í\86\8fåïÔkB\¦w\9f
+\82UÀcÃ*wà\83\82<®¿sÎËâ¿ê\86Ëë¤Æ\9bþp\83ª\ 4ù\14û\ew\91ÈÆ[Ê®Ý\97Ïlqéñ§oÈ4ö\8aÿ\r\95\ 6\92ë@Ü\r \90²Ádrã\\8cðámÉïAø\1e°¶}ê{\19ùÏ-\ 3ÍÚ#\84Á\9f¼Õ\1dÞ*]3\99ªÉG\8c\aÝq"\ 4:y\9d¢\14\91HÃApâkã\85\16÷ÖÍ=̱çNô\fb\8cðÄW\14\0\ 3ü\8da\ 5\8c\ 3Ô\99¼\92i\8bxv\13×\94ß[0\98<døþÃIL\ 6\vÛ%{¾óuj        XMp@\ 6ç\89\87\14\0é\82ç¾\aYöñ\84-c¥\1d\85^\9eQPú§\e\98Öv(çO\96ömäµû\12¡~ã óQÆQ+ñã¸åþ~&µÓ\9c%F\+Ð÷\8ex\aÆF³\97ã\11\17\13\92ÉsÇmÏdA3Â\98\14ÀÙ÷v~wey~\85XR¿/ÊS\81çWÕåº\96ðá\15\86¼Ën\19!|«±ï"\14ê\1e´\8c¡È\ e\flaÞÙ0t_\15c|L\£Ü\b½¯¿@Îña|½\9eã\9b%6,yøÝÝÕ?®þ\ fðá.nendstream
 endobj
 endobj
-521 0 obj<</Type/Page/Parent 490 0 R/Contents 522 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 286 0 R>>endobj
-522 0 obj<</Filter/FlateDecode/Length 1960      >>stream
-x\ 1}W]oã¶\12}ϯ\98ö¥i\11+ñwÜ\97\8bìö¦MÑ.Ò»..
-,pAI´Í\86"]\92²×ÿþ\9e\19J±£b\8b \86-QóqæÌ\99Ñ_WwÅjJç\8f°¥;üÍWsZ®&\144m®ÆriLË     M\17T5xæ\ e\87øcÌ\1fÿùñjz7-\96´\98/\8a;jh:]\16\8bî\97¥\8fW\97¿qw¾*¦\17wÏÖä\eG\0+\8bé\14\9f³û%>'øÏ\91Lçxt~?+fp3^N^\7f±\9bËß\r\16Ť;ËwÙè|1Æ\93\ 3£\93É\ 4±O\17\1c3\1e[\8d\8bûî\97ÄÎ÷fc\98\82ÃÕ²\98w¿z\93ùüÀ$û\9aÝÃÞàú»õÕíã\8aÆ3Zo\0êâ\1e_jAò\8eÖÕ5Ò*è\aO'ßRLÆZj\94q        ÿ\94v\9aJë«\17kb\8aÿúvý',Íh<Î\96F\93%,]\7fð\ 5­qr¯RÒÁEÚø\90\1f3nKÎ\1f\ 1c4µ¦Oתñ¸äa7À8nÇOßRvÄÆ¥\14ò!%FQ®IUÉx6j¬\8eo\ fÉI>tCÇ\9d©v¤P/>\7fÐö$Gi4\9e\ 2D\ 4Ùç¤kø\8bI«º \8fZ\93Ó\9f\13ýÕjdî\1d\15E\91\93<Ã5\9arõ`aVÌ\vú  ÙTÊÑ\13ŶlLÂóGRõ\17±ùCÇ\eReô¶M\bê+z¶ZEM\11®\81ÂÛ|ÎI¿÷(@\95pL²\7f{ì5m\ 1z\87\88\92§ÚÃ\9eJEïÀùÄ\1eT\92º~ºNºÚ9S)kO\80ÜiàÐû?\83dU\ 2\10ô\1cÌÁ\7f>ÑA\87Ȩp=Q­È~\8e>¼ü\13F\8bK\8cv\õæDOÏÀ¨\ 6\v¾\88ÓÓFâ\f­£\12ôàب\fþ\18A\14å$VÚ\a\ e
-tä$nä<J\81DIü\80¿áÂ\13\1d\rìô© \ 3åN\99y\ 3fD¿IG0'\93\18\ e\91\0$ù¾0\7f\87¦\81CÔ]TÊÅ#p¢RU/\f\10Î
->w4\9a,2s\1e}H­\ 3¶öÄ\891Iñßp@û¶´¦Âõ6ªÒâ\86óîÔø6J¶FGòmÊ\ fõ$\a\97\ eB\1e>\82g\1a*\87\8d\83©¹û\14mÚÀ>Éjt\ 5ù\rè_\9b\90yE¥NG­\9d`ÙÃ|Ô%²c\14n(î\10i\r\a]´Úï­\ 6¡%÷6·ã\ 5}tJìTà
-Zº*Ò×5êè¾æ6G\97\82\95Î\et\0"i]ÐL¹\1a\ 2Ñ\1dVht\85ZE\0Â\1a\11\80*\9b\ 4ù*ï*È\8b®\87ðþêÁY\98C\9a\rªní\r¡)\90.\12°¾\vçLA\89¾Q/\9aоê \8c\15äQ:&\9djÓÎ\a\93\18zD\q³"\1fô0\ 2   \95\ 6ôÉ\153é$mR\ 5Ó\18§,
-\eö>êXÐ\13\1a\88{\99­\80¯ß$Bh\8eB\8brçâ¢I£o\ 4\12ÉÁ;\10B\7f\86æ2¡¾«¼µ¨×w\ 3ÇÆ¡/\e\85&E\8bïà\10º\14÷¦2 \10ú|/\ 5Ë­ ¨ñ \1dRpH[\aµ\85d\a½\ 1\1f\ 1¬D¿Gã«ê4\ 4ø\8f\1c9$\18uWÄÃ\80ñ¾àª°ø\95²\1dFoçµ\88yÓÚd¤\8f\v\1f¶_\92\97tG\17pðívG?z¿µèÒ\87\ 1\ e{\15\92©Z«\ 2PÃàB>\10sp\ 6\ 4\1d®ìÏ\ fÏÂk\83\86Ó\16bó­u/\8eô»Ãð\80ê¡\9cÈð\a\98ªµ\e8ütý6ðWÙÞ¥´ÿþö\96q)P\9d"µ#\16=X(j}\vðôçÿáû.5ö­\85WE\1f"¿\16µ0\98\8c\16òä\91I\11iZ=jT\85Yª3Y9\1f0/\9aÒXN\ 3\f\12²óõNÜJm\rÌ\b\9b¥Y\a    öö\0\1c\1c   yU/\ 5\8c£ÈËqçÁãÒlé\97\87\ fY\19\8eY߬÷¹u\9d´\16f\13»¹ÜD.Fë² ÷àe/×ÛV\ 5\85Rj\f\9c\99öO+\bX\1a¨\ 2»+VÍ\r4\85g>\13áLTÖÝmÐ*1U\1a\96I]ßP   \89m\1dÖ\8b\98[\9d\ 5Ú¡\ 1÷:\80è\18öL*§\87\9d\8fáÜB)`)a,¶\16t\ 2ÄjÃ#\14\18[4µÌ`\16£\93,<â\ 1Ã\1af¹"ÿ\85Øò>\81'Yë\98\92_\9e#=:ü\0²CðtP\81[\1du:\8b\81*YV 7¹\1c\98\96\98£\19ûE·»]óí|©_箳<l\ 2V\ 3ßp\ 2µ®x~çÕ
--\ 1X»§0Ûú½\8acI¡\8d©«=o\1cµÆöh3\98G\94\91\8d\ 5@ lAï\10\9aIßÄnÕÌL\ 5\83\ 4&\19\88Í\8aÜp*à\98ÀÆCz@Õ\9fÐÆ0æÁþ£âéÊ\83\ 2ÏîÔ~\8fVëN÷\83ø\816X׺½"RmbeY3¹\12<o`\89IcûmE&\0HÀ»0\0hElÑ\8c±åe3"0\b9êæ"ä$\bÕdOå\81ù¸~îÝ÷Xõõ«= ä½\ 5;-\98%G©Û\80ºÍ\fil@Ó6`Úòî\ 2J¾Î?Ì¢n)@g#XP¾¶0\ 3Σ>X½óÞ4@ªK\96\83\94So\12ÍÛTc¶»Ä~x[\ f¬\9fu[%\94ªK÷ÃÇ÷Ø^ÿ\86ê»ì/^\fS\99`\0¨Ä,\f<J+é\ f\1e¡\10ÇQL\bY\85\9avØÃyy\ 2\10^\99\87¼\16\19Å9u5=ä\85ùÌ>U¡Ùùñï!I¹\8e\18\1c-K\16 ãzb»Ò\ en\15Ú^7ÚaC~bú¡ûE$\99zèU\87\11\ 2Ã\9d_óXÄ\88\96A\1dNÀSC`\ 1ï\0ÑnZfêfì|\ 5IèÞ\86\82\87\12ðþÌë*^\8e@\13oÄ6ÈÒ\17é\12\15Q?\8c§Êר{©+\ 5Ä\ 6^_CåJ\ 2\e\ 3[z§\ e\ 64\ 1kðva4\87À=)ÄÎ6oè\97öE\7fÅÆn\1fï;\19\18ÏgÅý\1c/ͳ\15^\eñ\8eÓ3ôQ\162Ç2ù\10_ J¿uoH¢#£þ¹Ñòn\95_\8dèWô\92¶V9\r9b/³å¬X.îñ        »ã)_ú÷úê·«ÿ\ 3\8d³\14\0endstream
+555 0 obj<</Type/Page/Parent 536 0 R/Contents 556 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 272 0 R>>endobj
+556 0 obj<</Filter/FlateDecode/Length 3099      >>stream
+x\ 1\9d\8eÛF\12}\9f¯è\9d\18\18Ñ"uÏKàdãx\16vàØ\13\ 4\vø¥Eµ$î\90l¥I\8e¬¿ßsª\9b\ e²Á`\ 6jõ­êTÕ©ª\9eßo¦Ñf¦ú?î ¦øYl\16jµI\943j\7f\13ËW±Z%j¶Ti\81=S,êþ|øéf6\8b£\99Z®7ÑT\15\98Fó0ÊÕÇ\9bá\18³«u´\1eÌö\aÉ'J\80S\96óY\94¨ùz\85Ï      ~E\92u\1c-Õb\1eG1n\89\17\áG¼%^Ï C;\9b\11g\93Í|°w\16ÏG{\87cH¸LƳ\83\9fG«Á½\94v1\9dG\9bkiã%fæ+Î\17
+ÂA\1d\19P\1c~9\87"\89(\ 2}ü@ôXtC\¶Æ]\839lYàË\19t\ 1\ 2ë9\90ô#\8f@?.T\12'°B?;\1cc6é×
+>\831fç+\bÑ兩³Õ\92*\8c-²H(\ f¬OyV4\94\1fðÈÁ\10²&S\9e(+EÖÁ\18³³þ\1c\99]mpW{n2#xýÞi´^ÃIÚ?Ác\92M\f}½|1<Ú»\f%Oäôë\198S\f\90fXI\ 1\88º\1fQ\80YBeãÕ\ 2êÁ
+pµY\18Éì`L\87Ø`\95_+³\831f7<y0;\18\17j\ eØ7\83Y\88;\f­ Z¼\ã\8c\93$¡P\82\r,¶Ix\8d\8c(Äp\f\ 5üh0\v\ 5æ*F\14H¼ÆDÛ\8fD\81\19\9b]È^YËYÆÝT!\9cÖ@\86B¬ý@ní\87t¢%.\91\85\9c\9b/0Z/p\13¢\81n-\9f\8f`\bDͬ\9f\1a\féC£m\83\161¤ê\8e¤ÙW+\88v\ 5\1at\ 1\90\89Ø\1c<\ 4\7fæg
\8f\94þÓM\r\86\14BB½Ý6\18b\ e\8e6Ü×\ f17'Øý\99ý\10s\10k Ê`\889p\ 6( »¯\1fbnC3ösý\10èO7\bÊnîûÇ\9b\97¯×j­\1e÷ óåfª\1ewÂáø\90ÞéÃÁ\99ªÊ\9e\8dºØÆ©\9dÙë&¯Ueê:+\ f\95ÒÎÜ«úhTaÁÄæsjNufË\8aËÕ9ËsuÔØ\[Uè'£r]\e\17©\8f\ 6_\1dÍ\8bÇÿârí/¿S¿VÆ©wºltîg\82Xwjo\9dÒþ\8a\9dÑu\96\9b\1dWLÕ\84º<îîvY\956\90Ó\96Q\98\10×ÅÌ\ 3\84=Ú&ß©­Q¥­Í\ e7ëZd¾}µ{6eÝ@E[\98[urv\8f³Õ§;\X\18\97_ÔSiÏ¥ÒU·^\97©ÙuK?½PYÅc\95-±Z@è1»WÛ¦V:¯ìXÚ¬Lófg*µopv¹»\apµ3\85QM¥\ fFÙ=Nªpæ^½wÙ³ý|ù\ 6k¡8%\8d\88\93\82\ 6b\10Jç²êé\1f\1e±\8d\12@hÊ\89\84\1c\10\0\91Eê·ãE¥ºT\ f*=ê\12wÐf©-÷Ù¡q@Ô\96°V}\ 4Ê[gÏ0Äwê_\16\12
+VÔÏé\f×V&m\V_ uÕ\98ê;\7fkç>\13 ¾Hh\10À^è\vÖ\9bBUµ\vWBjg\ e\1d45®\12\91Ì.óæðâ(\9a òÒ@È̵\12\80²\86-\ fG\91þ|´°\95\97\0\11N\a¾{iêôåÉc6\92íN\1d3ã´K\81ÃÖä\16¾ËùÞ\83à¡\84\84b©ÛpÂí½\17Cl»\9cÏÕɸ\ 2\9aÓÁ¯ýì·£)Åéq\82\9c\14p\9clu\ 5\9f£\92ÖÝ·öTY]\99|Oç9\ 3O\84\12C¤·\89\a!Rß\9bTóÀà\ 6\9a²äúà\93×\ 2gõX/\1a½9í\10w\7f<>¬ìBe/
\82î>\ 6^\81\80ÏN\80º)k×T\8c ^Z!LLt\88T\ 6\1fVo_ýüéÅ}\1fõ\b¥­Þ"$κ\84u¡[ãJ\91àl¶#L\18\0ð\8a\ 2¡\89u\87C.´Ð\e¦õ{DÃ^méRB=êÖÛ·e\ fSâ:3!Î\13\9dz\ e\9aú%-\8dÜÊU_Þç\ 5\98x\ 1Ô\1f6BG\1a§Ðø0\8e\1azëµ/ü,º\90e¾\966G[ï=gä6Õy\87h\16\99\bWYØ\1c!y+\93\18Õ·`\1a\9a\12'\94&\15D\83OÜ«\8a\9e\ 3Ï\bLôé®\ 4{é<¿`\8fîBvì\16´On
+\91üåë/Ó\ 6\8a\ 6µðôçÑ\8c[\8a¹\vZE\80\0¬îg»\93@Ú@æ»î\0­nýºÛ¯\93Æ# öÇ´ñü¥+ZsÊ\ 5\12AGã®s\89¿Kb¼KowÌVLaYiÀ¹çc\96\1e\ 5Td\ 6x4\12\ 3²\94Ýeû\8b\82ÛÓ#\9e\91Üà¯êDV\ 6ô5²\ 5íB_Øç\97\16Õ\91\ 6O§ü2F¸\16Ò\1f¤7]^`¦òà5ì´\b."WTȱ)îô  \82QþæñÝ[Uë\ 3É\ fqòoý¬?¦.;Õ\91ú\10\98Ô|>I\8efÖ¥\82­*:Mmqʳ\8at\99!o\0^Ls\89\1e\8bZ6Å\16´\87t\83\93&\ 1 Â\v³Âô\16\98ÁE%?àÈ\ 2\0è²´\17¦B\7f\96\87\v\87ðJ\14\b\16*=[\14\0@®ð4Q\1a\8f8Äå·\1e\95\10Í\83è\1føV\a\99\8fo\ 6\97-%[Ò\1emÐClJå-C\bὺ©m\81,\87H\ 3%¡X W줬ÈJØÎY0>)òÝû\1fU}9á\84\0Ñ\159RÁ½.²<C\ e\13\8460\83·\15MçUeàæÖ>1kSTÜ÷\9cí \80Wú/9{ÈÎ5*\85\90LÄ!<ÎR\v\8cmÊ X\90\96÷ôp\ 21\95u&(hõlÜE\9dìÙ¸}\93·õ\85¯Y\9cù½ÉàUà\16T%P͸\9aù\1f\90o-Ê\84/(-âPç\97o\1e\1fß_Ã÷\1e\87áêü"Õ"@\14²R?ýúÐjc¥p\14\9b\b\9b\9d´\93
+\88\80]ñ&«*Ö\97Ä5\18ó¥ç\7f\81÷Y»Ì6Õ\17\9d\19>\1e\9c­÷±P\8eý_æ \97u5
+9"ä´¡\17\ 6Íþ\9ccãH½±gQå\81¹\rɺ˾\b\e\9cÇL¯é3\9f/\82Nqa¶ý:\8b~\ f\ f÷ez_nHLÂ\ 4'[î$¢i`SÕ(+\9d-F±w\87N\ 6\8f\89ý÷]Ø}ºëÒѧ\17p*ëk{To\9d\94¨\vàU¡^/M}¶î\89\16§µ\11ïrõö*Áû\82tGߢ­¿\96cÕ[F\10\v\92\ 1µ\82äàØ\13½Û\91   ¯Äö\8eÕò=«Rð=y\fþ\88\18´p¦\10\·ÿ¼UÕ¥ØÚ<B\1f\ 2¶ªPp£T\eG\16tiÊn¿\8fu\8d¢ðPb©¨\10ä ¡R#XK\1dÀ.g\\9dáN·×$yòùÉÂÉ\ 3ýÂÚàÂH½Bi]\90¸¤Àçæö¼ìªf\8dÙÛó     \0½+Oó=\17ùÞ²Lìü\b\84-\17­ãx\1d¬\91#\a\8d\91PS\9e=\99o=rh\ 3ÑY¢\9cÆ»É,Q,ê\93Í\86U½Rc¤\15:ÍN\84oyü\bûI8\0O:³¥ôi\1f¥\19\ 4&\8c\1f\ f\ 1,V3ÔC9\13©\1fBW\ 2JGû\18ÊèªM»Á©\b,üE Ãgؤ\ 5é
+Ök"zŤVÂ\1a¤¢\96D¤Gmkl¯"ïãýH¸YÎtÑ\9b®ú\e8)õWày\ 5#\8abL\8aA\1e´~Òv°¬E¾í\1aA*\9fg\ 5\.Ô\84Ò\95¨W\80ÖÁÕ º\ 4\14\90©²ºñ-\1e\ 6Îx×eú\ 1±\9cM\9e_Cô\bûè-\8a\1ftnæ\84ý]ÿLo®42\824äåE=þð\1e\81\1dÂ\1cIA»\1d²/\8cµW\16RãVøquÁ9¾Ô\ 4é^%Ô+?\95NÂÇãU»ÁJ¬\97\1e0!\99Ò~;Û°ðO\8f&}"x #\81\89å\9a³0 0íÚVÏ\ 5Õ\9fvËx\1eU\ f%DÖ \87
\17^\ 1Ð:\1f\1a\r4n2nk¡,*Ã\9aþ\84\1d\10¤ü\ 6T\12ú\1dt¾¸ÚW|!\ 3\ 4\18ø6\99P;sÊA\b¤#Áu\v\96}\82\ 2U§o\91\85°D\1d\96-ÂVÐÔÇZÛ\01yLdÏÄ\9f\10\8e¾}j\8aÔ\7f\0\9a\7f\94ÁåéÑf©ÔPcÅÆ\94\17´DÀ*öò\15r3¥\8d?Çê§\87×^R´\83ú     Uþ6×å\13Ú\15´7|´qèÈàsÒ±à
\8f\b\e\0.\fè\82\f\91êÛ&        èV4>¬\1cáªf¿Ç9cÁè\87\ 1'_γ>k\ 1Ä\1e?\87\82\9am\15\1e\f\10V¿~x[!ÉÔ¨ý¥\94\91Zx\90Kð<\ 2\1f\9eèÊ\83)þ#'\8e¨\r½\844\99×±óà{è¡\17àõ\84e¿\14>hàºç\97¿e>F}\808\94u,\82à\1fð>h~\91\9a\83AÇHð7\\97\97^ð+m\84\8fù]_\161Óºþµåï\9783ÿüt\96W8ÄÄÖîúw\ 1\89\93/ÆÔ×+\9c\ f\b\16éXüK\1e(\8c\1a{\a\10\8b\ fþ\ 6Å!úÃD\85ð\84'Àøè§áS\a\14@\15\v\14\8a\9cQG°\96§\16â\87ÄTî\18å£ú\93G\80ÙÐÙ\8cñª
+¤1\\0B\86Iäb¾\7fÊ»§qκÐ+\8dø£\13÷9«ðîÉîĤ\88-_\86ã,\90ïÙ¿¦\8a²^\1föq­Ûósðøû±@^ïà\1f\1fM~b­\8fÌ\90âYÊW÷¥~ÎP\9eð    Pg <4\82TîìëýÒR\9c\10±g\86¡\ 3\ 3\18Ô×\90\8b\a]¶ 'cùLTd\87cÿêÉî;\8e¥\9aXà_\ 3\8b%þÃ7\8ff\89Ô\13mÊ}-å(Û\ 3T?ä¾_X\9c2¡Q£I\1cvNVSÙ\ 6\87j\8b\ 4\91\9b\8bækþãg\8e\87OÔ)+~óããÍ/7ÿ\ 3<|\9dlendstream
 endobj
 endobj
-523 0 obj<</Type/Page/Parent 490 0 R/Contents 524 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 293 0 R>>endobj
-524 0 obj<</Filter/FlateDecode/Length 2010      >>stream
-x\ 1}W]sÛF\12|ׯ\98ÒKè*\12\16?DJ\95\87\94ã³\12§.\17Çb*uU~Y\ 2\v\ 2Ñ\ 2\8bì\ 2¢y¿þº\a DÁ§+\97m\ 2û13===\83¿/®\92Û¥<ÿ\13ör\85?׷ײ¹]H°\92_ÌõÕ\6\vY®%­pæ
-\9b\9eþá\99äJ\96\9b\9bd-«\9b\r~/ðWÏ>ï\9asÿç\9f.\16ض\91å\92G*Y^m\92ùðääþbq{\9b\Ër¾Nn¸z=çª>qõü\19«7ëdy¶º\9a/qêtvµ\==ñìùs%«\8dºüt3\9f\16·<ÿm\0²X,\92ÅxáÇíÅÛ»[\99¯d\9b\ 3 õ\r~d\8aÊ\95lÓ       \8c'òk¹/Z\89¾²Ò\16\8f²\vÖ<ÈΦ¦\8bV
-k2\e¤¬s\1f\96¾\16\1f$õukëVÊøfû×Å\95ÌÔËm6ÙYÜ!Ƶ6Øì\a.¾½[É|Þ{0[làÁä\1f6/ë²µî\bû\1eI0u&\15\7f\8dB»?o·\9fNÆOÖZ/\99MËÌÊ¡0­ð±\8c\8d3G½ ð\87óWe\9b\9c|[\ 2\1a\98Ý\16p
-.Keê£\1cÌ1"dÞSà]jjÄ,\ 5\q6\9b\ 2\11ü~d0\85 \99\1aÈMl%tÎÆ)oiC\99>\1cOF\16ë\84èN.ÿ\886ÌÞí\81Î%P\93Æ\84¶L;g\80a\14\9f\ 3\97qM\rÃ\ fº\8d¨ê¶Ìñ»°H\81\9a©\9a5Ù_\1d\f\9f@0iêC\ 6Ç\80Þ(À÷ð~O\97õâ\1ax|\99 >géxí[É»\80ë\ 3Ö\11\95×\0iñ·ûó\14\7fyCgy"ØÔW\95­3Ť¬SäÈ\8fÌ*\9c}æ2/Îû\a\ 1Y\ 4     \90\7fû\ eh\1feo[épI,\83Ù9\8bkcçZpí(é¹Ó§\88NhÞñ\9e\ 6\86§Èv\9e#\85àÝ\0PO\95ç׶N=¡!Ðò¹\8b±D\9c$×ûÿØ´ ©`RP\13    Lmh\rrp°;\ 1Ô\8fx9
-\v\80ãm\8b\fîÁI_Ï\80Ó,w Û)\ 3Ì\eÁcÊES>06\91\9fJ\85Ö\88ò¡_¼\94\16\10\1fÙó\8d\r(0¤/\1eck+ÖÙ\10'\19Ûåp½\v°¤\85\19û\9aíaW.YT\8d\ 3\ 1\17®\81Î{\13\0wö½Üw\ 1Ð\81´ãä}\07l¨åC\17à\0àêo\8c\85ï\Ö'\a5£ÅF\91P\8d\90Ôy\84\9cÈ;@\v\0p\88úA \b\8e\8d('ßA!`ðà\ 3Ää8\8a\95$a¤Z}V.?[&6\\ eø}Ï[\8fÊ\9cÜ\94®G\82ªTæ \91yÄ;Ò(\91-Ð?X\83Ý\ 1»\eÍûG\18v®LIz\94°\1d\99ÞYø»s>}@\11\82\7f8[\86\81\ 2Ð\15,ÖþÌ!\15;8«ÂÑ\ 4T\8c\96\ 2Êà>h×~5UCg¾L~ìZ9\82ò\14\13\94Àþ\eÛ81\84\bd@\ 6\8f\ 3û\9e
-k 
-_ÞhxTGüÕ\1aëí\rÂ¥4§¡½\17¥Sï|\e\8eX\19Å\f2äÞ;1gt\1f\97Ú}Y\ 1Uj\83ïÐ\12\10\80ì8Z¡¦rÞ*¿\0úû4\94M«Ò4åª\81¾D\16@f÷Á¢J\7fÞþúO±ÎB5Ú8¶ò1W\80\98\17\ 1\9aHbÕ#\81{ȼ©.\1fJç4wj ×?àª}'/÷\1dë\ 4\8dè©\10ÙHÞ\93R(T¢Å\9bA\90\90.\ 4\ 3Z¸ò\ 1ÍGze¥\9f\88\1aT¤R¡h\82ý»+Ѿ¦²Cz@\11\10¢Bi°]X\b\ 1NúÚjdçíu¶\9c÷-`\95ÜÂ\1ddæS(\1fýW
-F+\ 6\9eÉejR6ÙKz\88\ 5À\17\e\v\1ev\8dfFË\1dë¯5Î\7fyt\9eV2\8f8©Î
\8a½Ù\95®la
-\96\9cë\85÷`\10ØsÑ2håÅÓT¤ó\ e\89Ü#âìå¢\8eEºH1§\11­w$\88ýogñÖj²L|\98\8eøv
-\9côLýÌ~-\ 1º\8a_OaÔ~¦µJ\18\984úÖ;\91Ƚå(òª«°{@G&\1d¡ç\rDæ5¿{U|¹ú\1c2\9a05£î\8c{¹åEà£À2\8b¦ázV¿\92ûùU"\7f\92MfÇêÖ¼ç Ó\ 1yùá\ 5-\10|kA\8dʾ\9eo\8cX\9c\13 rà&¥\85D\9cR\10ÏÞ\eÌ"\1dÆàÁ
-å'y"\1fsPX×\90rjN\v©\ 15Mzì)\ e*\8dâ<Û+yð\15¬ÁDÔ¢kÑ\9b\1aT¶|äü\a_rª}\88¨]t°\1c\11¡@\1a\8fæËNÏî{6D\90ò@\9eæÞÞ­\87Áp";ð¢\7fw\1a\16'ÿ¯¾æsXïÙ\ fÉBסGGÔ\92\91·¨´´°\10ø°ó\1cÞ\1a\ 3\9fÑã8\11Aá)©ÙS·ç\18\8f¹Mg28·\83\90ÿY\1c\bb>hg\84N\0Í¢F\9fqçñZ\a\1d­M«\1c\96\9d©kvA$\vÚËI\8fÌÈ¡\93*&l<)\1e\98qp\ 6ûTéѼ´ÊÆ
-\96\1e\16\87\9bûFÆwZ]yÉÁ\9bãi\820N®pY)Tx$¤¬Ø¦\836\LU±Ï/×U¸uÚ\19±\81\13\18>\ 3\98ig[\1dQ°¿\12ø|\84Ëý\98ª-õdª\9fïøD1Ep0£*\82Ùv\80\847Dë\1eí7=\82]TE­G\1asXì0^ð\7f4ß~\80|ÿé\ f\\1dÁ;\840\1dr2È:ÆÌ6xíì\18\88\96\9e\9cöþW\84\87¢Ä|\18Ø\14ÐW\bÆÉÍÞ:#\ 1©\86\99ÑT\9cnxé\90=%^\ fCï³N-Hf/wC6\95z#hiêü\12ÎÝ\88\8b\ 3i&6Ù':¢pØáÀq\ 4\85 Â.¢\ fTF'¨s_ñ5\84¦mÑÄO³\85\91Ç2Bá \10(\8d\91mLö\rç$~r\ 1°\8eF
\99ßqÛ¾Ç\8c\ 1\ròõwè(]ÓxÌÅ\9a¢A\852\9b\e\fôÌÑs\7fîÅ\85¢E\rz\92      \f
-øüC\r6P\19è\10y?\10\97
-\a!qùPü7\83@̯ñ­z½\96õ\ 6\1f®ÙäÔ^î\94\5õæ]ä8÷;©\ 6\91Òâ\9e\9dNÍ6W·<¶â×nL1\1c\9aÚúN7­6«d³¾Á×16ÌWDèÃöâ÷\8bÿ\ 2\9aMHFendstream
+557 0 obj<</Type/Page/Parent 536 0 R/Contents 558 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 287 0 R>>endobj
+558 0 obj<</Filter/FlateDecode/Length 2526      >>stream
+x\ 1\95XmoãÆ\11þ~¿bê\ f\17\e°hQï
+\10\ 4¹«¯g$Í%=¡A\ 1\ 3Å\92\\89{&¹:îÒ²\10ä¿÷\99YR\12\15Ûm\11Ä'rßf\9e\99Y~}3\8c\96c:þ©74Ä\7fÓå\94æË\11Õ\9aÖoby\15Ó|Dã\19¥%Ö\f1éð\87×DC\9a-âhF\93Å\1c¿Gø_ÖòÀt4\8a\f\9cîñ\8f¿ñ®4\99ϱGIãá\82\97ÈSA\9fÃØ4æ\19ýýÇ\v\99\18Ï¢\18Ë&£y´ \89<ñ²Óg\8cNgÑüdT\ e\1c΢)VÆS¶]\1exáÉ#ÖMøÜÃ\18/\e/\978ðÌ\16\19À\19°àÌÈá\12kF˱\189\9e,pVxâ³N\9fá9|\9e\9e\8eâ¤ñaí$\9ec\8fãÚÓg6tÚ[;\9a,£   \8d\16cqq<\93Qyê0\1dÍ\19¸3sÙ\8fÑhòlÌ(\1es\94»\b\85§n·øùE\8b\ 5øÑýiÉ2\8a£e{n¼ÀO!Ë»Õ3Ôºù° \ 5­Ö ál9¤U&ÌÃ\8fôRW_ì\9e\9cÖ¦ÚPnwTªjO\89ª*];ò¹Þ_­¾¼¹ù Â\ 6\97\94Ùê\e\1fÞµ\9b^R®\1e5yËÛDQ\18\12\91\ 3p\17§g\97\88Ý$¢;\9e\96\9aL©6ÚQ"\87×z[¨Tg\94ìI\91×O\9eLå¼V\19Ù5[Bi®Ó\a]'VÕYX\eÑo9fW\99\98\9eYl¾ÑbÝ\90\ 6q\1cMG|nmÚ-\8cû¾g9OZ¶\93V¹qpd»Õ\95£]®+9²\ 3B\ 1ÜÊzÒe¢³\fF\9a0þqõ÷\9f\99îlÜÂ#2Þéb}MIÃ>Àß­ª\95×$³ï/]\93Ü_e6mJ]y\ 6YyÂ\ 1l\1a,\12ܲ˪p\ ep½¿4÷WëZ\95\0ËÖá±P{DèZ\9c\a8N\13\10Óu¥\8apÌq\7f¶=), Ë"z'XW¶\1a´às\88\194Ðç\14\7fØè¼ñ\8d?3K\\10'áQ®k¶¾B¼\8eóCd®\81¡IsÚÙ¦ÈÀ\18ü¨\1fÈ\ 2\10¯Ó¼2©*\8aý59S¥ \ e\82\9bÔvç°\9f~Úê\14¨pPU\9aê-~ÛªØ\a¯80}\9c\8c\1c¬ÿÚh°\ 5\8bª>\0\10iaÃ
+\87\9dX+¾¨Lñ9\80\9aMQ\8fÊ\14*)0o\vF\8a)\ e¹áÚÀ\12ÎST\9aÊ(ß\0\¿³\83 aȬé4n®\84\97\14\ 2\91[7E1@,v\15í\8cÏû\9e(*T\röÔpââÝO\9fÞÿxû×\8b6\15yçÖ\98\ 2ËݹSwkÚÛ\86¶µ^KL\80g\97Â\16ùÕÅ\9fs+ÄýZæ\97\8dó\92\8eð\1c@
+\13\19\ 1\89ò\91Aàp\88\90npù\90\ambô=9°í}aÒ\aV\16Þôâ3ò~\97ï/\b`\81\vk\98z̤ó\90ì\f cÔÅÐp|Ý &íæ²%\a\1fÖ >ÔAU\9bî,\99      
+õíj*\ 6ÿhQßÍkÙ²ã¡\9cïë=\93\82c*\83\r\12,`ÛÉ\173\95ýk\1c\8f        ¼ÁH6F¶¹¿ÌíVsð÷\7f¹¿êÛô\0\84 \12¯Ëæ4¢÷àõ/µy´O{ª\e¤\1cs\10    óhÀP[Ño¦\1aýxóóêe\85û\97\86\ Ê)v:î°GÒ\94\87\8d\1a\86\r¼ù°ì\14ßÕ\8f¨  \91~\12)8Ô\92Ë\888 ìyf\Ú8g`\86êÔ·\95±Üûí·77Î6uª×\16ü\8e*ío|­XÊo¾_7Uú]¦=2î­ò&ûn<\8bãxñVáçd1\9dÅó·\9bÚ6Û\7fã\19\ 3ñâ\9a°\v\85\15­ü\ 1\aUnA\8dÔVk³i L0å<Eþ ¹d\vÇÑ\10õzm\9e ¦lü¶¶Hõ\925\9fs\19o\fö\91¤\87>7í{\16ÿ£.´êï\95{H\14Ò\1a\16\1f\8dcBvø=[\ 1g\11}\ 4©9\bw(¶\ fú\10UQH\96\ 5²°¢fÃ\9e\f\8c,\f&}þÚ\98ìåØJõâ=\91ë¨ÐA³`\90EjT0\8bÉÇLNm\99@©ÄÍDWz\8dRÅ¥«c\96\1cïs\8br\82·
+f¦9Ó\98\1f\ 3\ e\87w(Â<\82´Ûrú\ 5HúÜƹ57\14\9c\17!\833íÒÚ$ð\8a3\e\ 6¡f3r¯c6\ fô¿£/A¯üÁ^ì\80ChkkO\8b¡\ 4Íç\rRãÑ¢è\9b*3\8f&\93\94mËK\8f"/ãù³åTqTZp\ 2 m!d¨à\9cè\0\99u2"Á\J\13G\ eM\ 3\87Ρz\19¸\vÕË\ 4Ù.\8a\ f\15«>²ö\ 2ܯ å5\8aÿÅ!Èè
+\90L\89\86¸ß_½\8eÆâ\ 51øóÆû×\1dì\82\9e65\e\83\1a\9bYD\86©\1e::¦´JLa<J5XÑlr\16\10¼E«\80\ e1\13æ+\94\83µ.´r\10äÕÑÃ\83\83\rÀì\0\ 2\8e\19êÀ\ 6\93\863°­æ\94£ûã>4Ñ{\v\95Ýq§ÔY\r+\0)\18º\95Rm×ç        ÿ>W(Ñ8¡[\91hp\99\e\84c~AÞyOî $\81[o¹ð o  MKpü\7f ?S±ã;ª\12°;óì\f\16©-HX,\vH"\97\82Å;\86\0´\83\0e-\9a\9c\80èüZ=ÝívQà\91$fU¤,«\91jnþ\e{\96§úÓeÃQ\84XÊ8£\84Ì\9f\1a_Xû@·Oh,Ü+ÍóÙDÞÁÑ]Åý(:K,/\90G(ÑH$\88\934½hK\10\ 6¸Y!ÂÒp\84^v­=ÚF¾\84|\­~é\98ÐvÉ¥ÂÝä¤û\80訪\ f²Ôt]¢\9e b\96eF?â\0î\8e\84Ô\1d\19\ e®#§m\b´ø|wËT\a¹º    RL:B¨ÆÛ\12o¤}eS\\8eDÎ^MØÑð\14r1âp#à>Å\ 5YcäÅx¶ýåÄ]!=ÀNè\1dTd\aÏ\fª {\aõÿ\ 6ªÔùÇ\94®à\18\10\83\92³úp*\ 4\15\86øÀ\85\ 6í&áÂ#ÒÆ\95\91«\11w\15mö¡;\97~\18I+¹&{yÛ\87\e¥ßcãƸ\1c\9dF¹Ùé\84¸3Ã^ ïÁ§£m"ã      ²?\83æt\ 2É­r{²Ã-1ܯRè      Û\7fN° \97\8fúþê\9a>Ýö­
+ü»e\1a\ 1\80Ã%©ç     ãÝ\81\ 5\ 6\bK\10P\11\13.LÏ8\ 6i*\91\83\15V¦¢\ f\9e\98ì·Øá\biß*>Qä\ 6\fBj´\99zr5ù\80     \8a6Öf§-\15Ü\97Û2þem4Îá¦\83Úöh\8bG\b\a.\87UZ4R\8c·h\10U\1anÄNCסÜí\ 2\86        %¦oÑÿÝ\9d\8d¤\a\93îl6ZNѨõ»³×\13!>M\ 4Ä\eò½Õ5\1a\ 4H\ 2\10µ\ fÜî0J%¤±F­\87{Îxý\8aò \1d\10\858\8e */zt\90¹\15\f\94$¾x#\9eíö\¶Ñ"éµj
+\ fÆ"\1d\r\ e\ 4Á1'\98$%ý\ 2
+&íb»î¢»Ð\96\1ay'\81è\fæù}X\v\85kU\88\87P]\ f\17Üvã¶\7fÐ\85ÁE\126r¯\81U\87¾A%,ÃÁ~\91¨\83\ 3ïø\12-n·rÈI"ß,\80\ 2*ÇNUgMxg)\dÓÎ\våJØ.Äç$\f³;\1c[\15@\91ìva°\ 5)D§©P\18|mR\84
+ß;XÑE\93ñÁ¥ñÒª32'\9f\8fô\93´ê\11JA\18é>"}\e\1eñ\85
+\1f\18ñÝ(\8e\91|\9f\19-\97ü\15\87~§A\8a{K\9a\ f@x\vÔ6\83Τn\0\87nlo E»\9b9\90à\ eÖ¦@\ 2þ\ e\89G{ì»Á?è\8f6\8eò¹\8a\bw\9e?Y\eÇbÝt\1cMF\13\9dDã¹Ø×iÉ\a\111i§~pøæB¿ò\87       ¦$o>\88§\93\b÷\1a\1aÌ\87²l\8cnîôÚÂ\93&\vþØ7Áç:ø½à7·«7¿¾ù\ fÀO\12Gendstream
 endobj
 endobj
-525 0 obj<</Type/Page/Parent 490 0 R/Contents 526 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 302 0 R>>endobj
-526 0 obj<</Filter/FlateDecode/Length 1960      >>stream
-x\ 1}WËrÛF\10¼ë+¦x±\%A\ 2\1f \98KJNâDUvbGtåâË\12X\80\e\ 1»\b°0Í¿OÏ,@B°å²L        \ 4v\1e===\83ÿ.n£Í\82Î\1fMA·ø·Ú¬h½\99S£)¿\88å«\98ÖsZ$\94V8s\8b\87N\1f|&º¥än\13-iy·Æßsü\97³|c¹Ùðç77z\e1\eúû÷\8by\9cà±E²\8e\12ªh¾L¢»þª¤Ç\8bñ5îÞÝ>¿;ºÆ]8\\8eÏ\8e®+Z,8Âà\87-\8f¯qw=\8fâÑ]N`±\88¿\9fÙ<ÙH°ñb\13-(\±Éx\9dD\9bþ\9aSáãç»ãkÜ]¯\9e\9de\87\9c\1dÄ(Nbä=\812^1pk>\b\ fµã\v\8e\84\7f/9ßÉ\99\8b\9b·\e\8a\97´ÍQÞ$¹\83Ým&U½¥mz¹\8câyD\7f¸\ 3¥ÊÒ\87Æ|q_\8f\94\9bÒë\86\1euÚ¡¼\9f/ÿØn?<~~M\9fþ~×þüzû/\8c.)\8e\83Ñëù\1a&/\1f\8dM5µá\b\1f ÔY«So\9cmIÁ\8e¶is¬½Îèññ\1d\9el[¹µÓþ µ¥£ë\1aÚ5îе²\19ùýÉ^k¼¾\92/a\88\ 3¸¥ëx\11ÍÙq¥\95õä\1dí4ÈX\1aµ+\8f!Ƥ\8fñ²\ fëyä\97\ 1q\99\96Jã}©q­ü   \ 4\ 6$\83ÕÎÓ~\b§Q\a*Ìn§\eÓî)S^á\8cë\8a\8d«ÈÙip\9aóp\92\8acoÔÙºq)r×YÔ'2OÀ\e$²E¾Î\96GÒ_S]3ná(âÃÏ®té\93±\ 5í\8e´w­§Zy\14ɶÀ¥\15\aii4\90°Zgø\ 2NuY\9e²a0­ªà!ç\87'\186ºr\9eÑn¾èæ\8aZ\8ex\ 2\85n=\90å´ÙÔ¹¶\11=°E<-æ+åÓ½FÁ%Èkɧ\8f\9e8>Û¡\83A¸¨¡$ú-:÷-å
\80éì\f\ 6\80\81\89\14\8cí\a¬JàË\89*\10¢õ\8d\11\12r\90\96\8c§J\1d\91©®\90§p\16öZp\ fE\11\9aºÜk;   Ód@ÖäÌ-\ 4x\14\b¤\b\9cs ¦\1c\93\e;\ 5Þ7R\ 2¤S\97*\ 5å\8d\ 5}G-P«\82QDA:{j\8c\89W\v>\ 1lÉ&w\ré<7)j\9c\1e\91\97jÑWWtØ\9bt\ fÆÔ\ e\rÅî«\81oy\a<kw\0é\0EßÚ¯\9eÁ'\f\1c\vĵH ¸\b]XDÃ!j:naüÐ,Pd\164£ïv\ 6ÝÿL¿:z\10öI\ 4êI#céDnV\96yØmk\9d\1a\85¸\1a\9dªN´á%AÙJs²pXGOÖ\1d\0ß׺tÆs\9eà[e\8a½'\95ç\10\99\88þ²ôÉ\9a¯×¥A\0í±õº\ 2L\83²qS#\eIæ[´¯k\b )u\81\82uÈt\80\17       î!\91\a\16\18Ô¬â®\ 6\91Xp:\eÑ}Ùº+¦E¦sÕ\95§`B7£g@(¡C£ÿë@ÈvâY´c\86þV%\93j&ç"\ 2\0}G"\àæGudE°Î#\8aV\979e\ 6\81y\91\ e&ÂIs\1e,K\84ÆsÐ\124ÇÄ1Z'7E×(.\8442D\98\ e½\9eîÕ\17}\ 2\1e8ðîþOÔ\ fs¢o8i\y8\88°«5º\91º\9ay Ê\12È\81½\13×ld\80\ 3\9eCx\18B-Úé _e#¤9&áM~\f\88\82åÄç\våõ\ 1ͬ²\f}\8e*ë¨\88(Þ`´cÐÅQ|\85¼'~ùl¥\0Ç\89\11c\fxò1m3\82\88¥O\1c½\9c?-A²Å`\13º$\95²\8a³úøÆ\95rFÚÁxD)ê\1dÐ>\1dÅ\8cƶ\84£L\98R\12àjÃ\ 48\89°¦\91\82\80R3\ 6\1d·M\13@\1f²\r%\85\1aõ\13S*Âá\9c+
-Nbx\r\89J\99\983\81\90\80\92û\13\14Q!ÏóT5Ì\9c\1cÒÕ"Ü_Þ\85(AxPÜpuYϲÌ0q\82þu\10Ó\ 2
-\91\83\8a\aàÆ\fU%ÊÓRá\1c3ÒEôFóÌ¢Vå2l-\84·i\8e?\94¡åy=yÀH«jרÆ\80ê\99iE\8eûü~ #\ 4±4è;0ûÈa1-CõÎØøýó\ 5\ 4Ý\1c2bÂôãÑ»¢\0\ 5ýô}V\8c\92½÷õO77¡\1eQ\1d\16«È5ÅM°òÜÀ\88\e\8f\9a¡     \ 3úÄ\9d3íÞ8÷T©æ©Ô`\ e\bÇ\ 5xÁÖhÔß¼=ïB\9fÐÊô^Ù.Ôü¼Ê]r\9b\82\13\f×Q°:\ 1%\1eÎä\909\9bkå±\1eþ°x«\88þ\ 1³iÖ\17+\9b\ 3êÞy\10\ 5í\ 2\96\86µ\84jÌj\18\98\7fBgÅù¿\1dÊÉ\9b\1f\93¬ì\17V! zW\8d\96ÎÁñy\98!\80Öó®Á\8f1ey®õzÆý"¦¹O2\87Û\93̹cúP\11\87-úQ4dtp]\99A\98\9bJ\12C¿`d¡HA\913tÀ\ 3´ø\14\0Í*\93e¥¾®\94\ 52"\ 3ø\85\16  )L\9c¿¸)\1fô\ e»\8cG¯ò\89\97\ 6z\12Ñû#\95\ eA·<Î\86 g)¦\18/m3´4T\94AP\18i<\\88Çî/¿?`Û,zó£iþ\ f\8f\83½ Ø\98½T¸ûÓ\13\b´ªQôP¼!\ 6I\9a·^\9d\85\14Î|m±$       ÖáÆðâ\81õ\1d\1aPå@Cú\8b÷¶À\ e\84dl\86=\98\13"\90º_É®¦\80\8eä\11r+:\vqÂRVé\14Û¢i+頠ߨºfOÃÄ\92o\ax$v(h\8f\11½\85Cc±.c/\856\ e\87&¾¹×úì±\94=Óm1DÊ¿ 2\97ô¢¸\88\8f\93j\9cT\ 5s\90\11\ 1¯\ 2Äx¥3\11 Ã\ e\939¤Íl/\9cô!Z\9e\15ï\15\96\86ϯ§x\r¯A¹ª\f\1aaÆóÐá¨Ñha\9e\11½­~B\851ÁÆAAN¸åmÈòÖ"£I8yfROå»þ\1d.^-£»UBÉ*\ e¯}\ 3sÞJMÄÌ}û\ 4¯\1f\82*Êø½\1eÎ]¯o7¼\80b\9c¼7m\8aW#eµëä¡åz\19­\93;¼ ã\81xÅ þ¶½øxñ?Ó\86U4endstream
+559 0 obj<</Type/Page/Parent 536 0 R/Contents 560 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/Fa 7 0 R>>/XObject<<>>>>>>endobj
+560 0 obj<</Filter/FlateDecode/Length 362       >>stream
+x\ 1\8dQËnÛ0\10¼ë+æè\ 26Cù¡Ç1-\9ac\90\0ú\ 1JZÙL(Ò\11É8úû,¥¤\ 5z*\b\98\99\9dY¾eRÔ\aü-Ó\19\92ש>¡¬÷\98\bC\96/W9Ê=\ e\ 5º\919\92A\7f\b\89¢Üs=V%×´[¸?\9bìî¡B\85f`\95¢\96\85Ê\9bnódTG\b\17\82jÝ;A[üh^\98!WÆ&z\9a\84ê\82vv}ø\92Ú\b<º@ðn$¸!Ix¨f´é< \9dÑÓ ¢    Pv¾©yËX\86i\8fQ\9f/!á&ê£í\95\r[´1$\r¶Ì\0ëpQÓ\98\1aJìjQ°çMKÚ\9eA\1fW£;\1d\92ÓÛE\ 5Ì.âÆ\12\b\89\92\15ÿ\e\815:\13{òì\10Êhå1¸iõèu\88*¥Þ¢SÆP¿¦W_ca¸q·]çÜ«&ÿÏd¾\8fy\9e\86\9e\9f\8e¢:\15ØWk\8e§I¿»\8f\19\ f\13½E²Á̸÷¯Ôã9\92O\1d\17¹Ý7mWÊ:Å?\bürvÐç8-¾R\93c%EU\1dù_\19\9bßMö\9c}\ 2ª§«fendstream
 endobj
 endobj
-527 0 obj<</Type/Page/Parent 490 0 R/Contents 528 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 331 0 R>>endobj
-528 0 obj<</Filter/FlateDecode/Length 1649      >>stream
-x\ 1\95WÉrÛ8\10½û+º|\19¥Ê¢D\89ÚrIe\16M2US\93LT\95\8b/    I°)\80\ 6@3Ê×ÏkpQ¼ÈãT\12EXûu÷ë×ÐÝÅ8ZMéôaw4Æ\9fÙjF\8bÕ\84¬¤íE\1c¦bZLh:§ì\803clâ\8f\98?þýób:\19GK\9aOæÑ\98\ e4\9dMûQA_~Ø\1f\ e±\rìK\168MÉr\81Ï   þ5¶¢\84¦\8b\ 5\8e\1f(\1e¯0Ý\8cø\9a\98×\92e4ã5\98\8aÛQ¿\16¯¢       ¯Í\97Ñ\9c¦aÄkÓx\82\18à`\16÷ô«<\9a¬\18\10NÆÓhÚ\8eº['\8by@\93$¸¤\19ôKÉ¢\ 1\93Lax\12FýZ¼\f`&\8b\84\r\84\16/Ù±\ 3fÙx3ê×f«h\11\9cH\0%\ e£~m:Æ~vpÊç¨[[.[\ fæð=\fº\95dÖFl\ 5\80W~Ý\\8cÖ+\8a\13Úl\91ßù\12\90Ô1m²A\12Å\8b\88~\13\9a>Yuo¾\1dIn·2ó´U\85tä÷ÂÓGÊM­\v#rÚZs AµL\9d´÷Ò¾£õæÓ\9bÍÍÅ\98\861Ço\93\ fÚ\15\9e\1d­\ 1?n,\ f'\v^]ó\r~/Owüâ¨\94Ö\95°ªîå\15/\82\916\94+ ±Rg\92Rék)5Ý+Y+½\ 3\8aÜdÕAjO×\ 3\15É\b3¥ØÉë7W$tÞ\81â\8cÁlçAs\92\9d\8bh\ 3\14N\1c\82-o+IfÛE!¢\8fÛ\13\10A\aá³=m\8d\85\91póÃÊ\0ÓGkTIpu\90\16&»}¸««\87S@\ 6\0ë½´ú\8a\94§Z\15\ 5\9f©|\ 4=\'óà\15CÌLe\9d\ 4:\84\b\7fMz¯Lå"Z«\ 2÷±\83\98-\8dGd\94(\8a#\1d\fâ\89\83\ 2G\11I«É)\8e(gÁJW\15Þ\91À\16mü#Ó¢¨ÅÑ\91\95v\ 3ª\92y4èHs«MÍl\91?d\fètK#\91eÆæ\fÍ\9b°ëò÷.w\9bc)/I8 )\8dõ2§ô\18¶ô\1cks¡Ü#pð²?\ 3\ 3\95\15^ÂÛë\81\8cv\11]\8a²,T&¼2zô]\95\97möð\15Îf{P\8d\99\ 2È'ê·^\18R;Í1Ã"\ 2]3\1f\1fÙÆåÖ\94VÁ$àù&âΩ´\0\81÷¦\96¨\r¾\1cÕÓ±´-&\ e4çBS¥Ù\9e&\8f\b\0õNjiC¾\84sàuαzB\86K/¿ùQY\b¥/¯ß4¼I!Þ!÷\81\99ô{\13H\ 2\ 4\aµÛ{\\85\r\16u\860õ¡{6Ü®\ 2ÝEÈ\1e|{ì|¯\a\0É¥Ô8ÊtÔ`]ÞAGqÝ7ßsånÛX\v}d\1a2;\9bc\rº=¶\ 2"\92!\98Å8\96\1e\1f\99m|\ 4\89®z·;\ 3æ*d·É×õ\0¹IE
-'\91\ 5x\8a\90#T\99pÒEí\9d\8fù\9b\e\88\1dø\ fÏXÑ\bQC*®ÈhÜòa\83\19ÜéMf\8aæ\8a\1f%u8euG1@K\97\11}\rò\95\1f\11\1c\9d7å§4Ä\ 3*\ 26\92HMå;¥a­B2
-0©×¬VH\15x Ý;\86\r\bm#¤ÿÀ[\8b\93­>¢\84q\91S\1e\8e\80_\9c   Ô6blzK\15\94Ù½\r\11x"_pa:á«£%þ\873{ïË·£Q]×\11\9d!2v7zxº\93µAHnoè\83\81¨²\167á~b\8c}@\v\9fÏ^0´\15w¯3¶~ÿù'Ì8\88g&\91\v\80Ó\12\95\r
\8dÔMêjñ\7f&Ãfú\ 4×\ 2á:ù3úa\Âs       Ma@_\82½5Û{¸¥\ fÝ\19ðÃç\82\84ÂÙªÝë\13\ 2\r\1d¦à}N\9cû\86\14[\91A³:ä\87
-\1c\814ØJkÖgnq¡³\807µ±·\11}ÙC\96³Ê\9f!\ e7þ¶Ç¶\94)£²   ã+²,Ðó\8dv/\84Ý\90«Ò\ 3Zäå\ 1õ Ýe×BrhlaøåðS\11¼wÑc\ ed;5L\95\1eñË"Ã:Æ\1d\1dX©¬JÏãË\8c)Båm+M*\97hdá\8dÔÅ7ÔÜ\19\80Ïe\98ëí\ 6\9d!E^صÌ\1cF{?\92z\ 4
-
-¶÷\87â\f\95ø\89\eº\83n\94\ 6\9d\bb\eÎ\85\ e\ f4¡­x+²[~\81\ 5^\9c\vàkñ¡t^F\ 5¥"cÕNiQÐGV&\94\1eýÕ»ù\93ñ©E\91Cûl\10¤S°Î'é\8b\97[Dæk{\ e\ fN4\ 6ÇR\f¥<Á@\13áÇi½Wh~]\ 2k\11Ú\1f\97cÇó\1c¯,4¶3¨\9f\12'Dv\f\92\83ä\14Çïò<\ÁYÙVx\10\99îÙ^rºø5ñ´\8f\1cMÅÏ\8fB\8a[$\17àÑ\8fy.µx\92\857L`Ë   >Ò~\ 6ú¹\84»»JåÃL\0ÇËM@4\1d·4eU\b\8b\96\8bw\16D\ 5"ûí\88®\1d\ 2\v¬f\8böÏN2\19w24²Zù>è\ 1Þh½l\1fÔ1~f&\93\84æóI\94\84\9f\18]rÖVÞUxI I¿wìþg4Ì (ìó0\9e%Ñr6§áb¼j\1a4ý­\&\v\14\88Ä\9b\997%øݶ\98/ñÓ\bM/\9eóÔ\1f\9b\8bÏ\17ÿ\ 1Je|íendstream
+561 0 obj<</Type/Page/Parent 536 0 R/Contents 562 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 311 0 R>>endobj
+562 0 obj<</Filter/FlateDecode/Length 2670      >>stream
+x\ 1\8dXÛrÜ6\12}×WôÎKäÔ\88s¿å%\95lâDÙuÖ\e+\95J\95ª¶0$f\b\8b\ 4Æ\0¨Ñì×ïé\ 697Ù©-[¶H\90èÛéÓ\aüt3ÌV\13:ýã·4Ä\9fÙjF\8bÕ\98¼¦ÍÍHn\8dh1¦É\9cò\1aï\fñÐñ\9fß~ºY.³)Í\87\93lB5\8d\86³lÑ^Uôáf4\9ae£Óêb\94-ÏVOûÈoì@\ 6\a\96sì5].ðû\18?âÈt\857g³\11lÕ4_`ÓtÁFÆxtu\\9cL§Ùül\95·\9câ\8dñõ\96²0\19\8bßË)v\98Ê\85ì¸\98ÃBº®i2\1a!¨³ÕÕ\10ÎLð\ e\87<Y°õt\95B\9ef3\9aL8\b$d:ÆNéJVÏ®±:[\1e\9fåUvi2\1c²íËðÇS\8e|<çlÖø\7fŹ\91+q÷ì\1a«Ë\196=­ò¦ãéòõ¦#Ä5§ñh\82Ü°§bB®\92§§k¬&\13ÇUÞt´\9a¿Îêh1\93ô#cpeÌfg\8c        ñ\13¯OQ\f  b\82\9aÌÒ\ 5¯}ÿp3x»"<±¤\87\r`7G~G\8b9=\14\82·!=ä·Ó\8cÞ\99\90ëªRV»&¼yø(o­`R^º\e\8f²Õ|\86\97ðì(£\9fÝ\9eê&/©p:Ð{o\9eÝË\81BÅ·\ f´ön\1f\8cÝbuo¿¥\87Ò\ 4*U èH\15\ 5é\97è\15ESk¾Ó=\9c%£Kjý¼\e­²Ù\98-ÞG
+¥kª\82¬Ã¯läà\1aÙ\9c\94=\90±À²ª(j_\87>n\15\ 3©<6ªª\ eTêjGa§uA±\84[\81\1a\\e\9b\83\17ÖÊZí\83¼èb©=}lì\13)4\b\e\k¼ÃÎ\réN\12\16&ì*uÐE\86à°\8b\9d\ e\12¸\ 4çõ§ÆxX]\1f\8e)21èjC\eçI+äo§¶ºOÈ\8f×\95\8aæYÃßPÃm\8e
\90\9e/C^j$ÌmÚ\18$ÎK¯JµÛi\e\bo\1c\b¦ó§êÀ\ ebwü\8d\87\9dÉ%\1fµCd±T\16»m\82F\84\87T\8d \9eá-ÇÌ\85«\9c\88\9cO¯m¡½\\15dj8\1d¤^H    Ê$Uê½5\15*\80gz\94;\eµ\8dôlPçR§ÊªTÙ[ÚÈ\83\17å¾%ç¯\9e*´²°\14õÝÖlZD¶à¸å\8c\e\87P¹Î¹j\ 2j@;ís\8d\f\16\ 2\11\8e ßV\99ó\bwP\v\ 4\9675»f\ 1\aAäZÜ;ÕvÝl6Zª¦Q%¼\91j\8d¸2ú 5à\0\0¶`]ÑY\87\8c¹Ã¸?Æ\19Ýs\16M\ e_\90\8a`\90;µ®°\17\8a|@5¬Ô\1dYýÔè\10\ 3\1eªw\80\eðéRÑ\81õ_\80Áu\13\90Ò\8cþ(Uü*ÐÞ;»ýö"q©\0m\9fl¤/$\eöp\95ÎÏ&=¥\11iâVF\83¦\87¸Ì]O\0\1aÁü\17\10ÝëõݺAïè\98÷Q­ÏÔõÿ¨X_»®E\8d0\91WöøT\a\86\1f2b,rRk`V\1aÝyäRÚ\87\8bzò·Ö9\0mBÍ)Ü;ÿ\94x\0\8e\a®z\9b\1cìS4\82i<\ 3(\80\8f®1ý\0\e]\eHK\vÝq\830á UÙèV\1f\19È6õ\1aL\ 2Ji`\8b\1dÔºjí\17Fpe#VuÂlí8n&K¡\1f\80MP\ 2'CT\9e\8d´]w\99\190\17ðR騻FëÓÖ<³\1d\89ú{´Cg\1a\8cÑ3Qr\12z-\1d\92\8a\ 6/æFbI\88\15\ f\9cM4[`\ 5\f[<Ï\1dw\9d¡·]Óófª\89\ e\1dÛÒ\f\1a\877+¤ZÆ\82\9c¼Ûy\83\8e¦w÷ï~dB\ 2\8bÐ÷H\15L\v#Á%æ7ÍhCÁ<\98\8cj\13î¼Þ9\8f>á¥ã»\82%Û¥à2E`·\8b¡±î°¢\8b>ÞàY²ÖÙ\91\95\9dE-\9f,
+A%¦\v
+p¬\96ø\9bp&©é¨­«¡\10ò\99WÜFÉ]D¾\96.<a\9aýOaI\v\9dí\11\1cÈ\1d{o̶ñH!W@Ç\98j\8aX´eëaÐ&õ¬Uÿ\92\8a&\89;d\96õÊ\18\f\ 6ÉJ\86RðÐÎ\9cß\ ezBòÝ\ 3»l7è}\99f¾¼\8d\8c\19\84\88!ï1\byXµÒ\0äµn\0\95;P\9fà\13m­ýFå`\16\9e\9elY\80Ä\ 3ßÇ\1cÐàIiâ5ì>Èô>ê\ eLUÔ3L\81^ðÓ59ïÏ\89¿g\93V£ÿÐ\ e9¦_0è"f\15ÜÏõ\8eû­åc6\8aWx¬¤P rx\e\1e\90ÄRM{\13ËKÐ\89\17]\94½\13\84{×ÞËHVU\0±©'lÍæ\14m\9d\83£\98\ar-at!\\0ã\eºßð8Kó\98#ûý·\7fv\19üLq)\8a\11\96L\06æ$¦7\ 5u\0¶.ýïuR¡Ëk\96e½>iÖ\13G\1aý×?0ÝÒ ÙB:\lG½îM\90\ 1³$\131Ìô\90c\f2\85Þ\83»m\89ºØ
+Sد"£¢\ 3\vÇ\7fé\19\aÙ\16§\ f9ÇÊ\8dkxÔ\84hïc\15¹Ã¹V\1co    A\ 3­Àª\8c\87ë+%Â,Î\96\ 6o\8fÊBÊf@Ghº×ɼ®ä\1f\0\ 1<Ëy¶ MADÉ      öôxÛÞÅ\89k\95½\88cÐyÚ?¾I£ð²\19@Ú*6è\1d\84\83$0\97\82\bðW\12Ðà\7f\16Í\18\ e±Á\90á\9b\17Èè_f\8d³\80âY\14éØ|º0\11hk\ 1~ÔQ ¸×\8aî×#+³¥ã\16@\e ë]\r\ 5ë+\83~8\8fü$[hÐ\15\145KÔ£_\14\ f®\fók\80\ eßßa$¼\1cî\94\87®`oÛÇLö1[\ fPFLDë.\83ª \81`24;\1e        ¬À[4\86\93\19FIÍ o`ùÖµ¾À¡=Et³»Uf8\rl}\92ºè\8fI6Ì&\7fÉ©8,ýàÒ~b²VÀ\1e\1eëÊAv\e\88º/\13è¯\8eÇ°F#Ff¤Ôÿò"Ó=¦\10\10Å\9a\11èQ5Â¥t(\91\16\f\8fo\80\r1Õi`©\1d\ 4ZiXı\88À¨\96\83\99È(iÀ$a-N`\97Y\15Þc¬¡åSC|^ÚÎÒÑ\8fÙó\1ey^×hC«÷|\8eúr¼\7fj>\95­\83«\9a\88óÍßè}¥\15×    j\9a\91õw\9c\16à3®Ec\b8»1ÌzXELêôÊI(p{?ÞFÈ>\9bô\ 6\12Ã\9a^vä\16\ 3\8fvlÔõàgx\85\85_\12\8c\7f\19÷ü<î\92k\83cîýûn<|9ö\16\9c\1e½»F\19Å»\8eù\18ñ\1c¿4\ 1\9cÎ\12R\91`æO±$\93àdK\ 6Ï14\9e\1c8\ 2'\84\ 4·\89{  Á«ÕOrй¬6"f±\93FåÙθ\ f\95\9c\9c\ ecUåO\9c"xqM~oÑ\80\8dEª1D\11\a#\ f?5û³kÖ\95Éq¿\11\r\b\1f\9d=Ôø² Á\1a\10\9cK
+ÙóÑB\90\vx\80¬Û|@ëÔ|,Ej\9eM:\85Ò¦ñl\85*pZ\ 5mq\19\93±\ 5Îw        @gR@h\857=\8dc\1cwJ8*Çòä¬v ¥45b       \1f!­EyIæ\8f¢ W@©[\9eeì1&\84u\ 6(\ 6Û7VNﺸtéø&\9f¬\14
+\85\ f\ f¬Íñõ#ç±ÈJ\aü\9d³*)®\93û\8eÏ\ 6I\²Ö¨*\90¨Ûó,î\ 3*ÛWµc0±\9aàÁ¨\9e\95©D­¢p\1c<\84\94\89\9c\9fs÷q\ 3)\1c0[á\9d*dâAÚ/÷¦\86d\97áx\92¯»Æï\`Ñ~o\11\11Z\967\ 1V1¿eÐø\ 6\87ÜTYÖ߬i»\10Dbë\170#£éëÜU\15ªõõõ CK\970\ 1n      ø\a\80\18ôõN
+\94\80¯\88?_\&Z¾e`Ô{V6;¯ùüÎ\1a\81§Ü\ e2Wå\87ëôþ\99\1cÇ   \12ySÄ\8cÍ®\9eáT\10|\84+©\9b*\1aéUÖÌ\ 2,\81Oû9Å»f[ÒOÎm1àè;°»ÇI¨©0#[\8d     Jâªc\8b\8f\b½\15Ë\97\91üòÝ{´ \7fƧ\ 3¸Ó~\87\90î¢\87\8eêèw\vz\87Ö@­àò\ f\18\16\ 5\86üãm;=9\86\fú!\8bÍ\1dëp,f\85\1e Pýò\1fü^ƺz|ÓÒÝ\92F£ö\13ß\14\1f\86W¸àO\18¯?\aN\17Ól1_â\ 3"\1e\18\rÙí\1f\1fnþ}ó?yáX·endstream
 endobj
 endobj
-529 0 obj<</Type/Page/Parent 490 0 R/Contents 530 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R>>/XObject<<>>>>/Annots 334 0 R>>endobj
-530 0 obj<</Filter/FlateDecode/Length 273       >>stream
-x\ 1M\8fÛN\840\14Eßù\8aý\88\89\1c\14|ÓD|2q´?0\81Î\fÊm¸\fÎßÛ2¢¤éém¯³wÏN@i\84ÿÒ\1f\11\98!R\ 1\99\86è5\ e\ e\18d\88(F^\e&0"[\98-ï/\ e#\8e\14£\ 6K9\ 5¿§
-\1f\eõ\82X\aû.#\8aÀ\13iö¡\99\8bÓ\93Ú¨\97ÞFíg\1c\8cA\1d\8c\e\8fBÓY\90\88\13¨bÉ\10@åîi\1c»\aß\9fç\99º¾¼´ßWjû£_è\8b®ÚN÷^½o¦}åß©Ï\8dÃ\9aǽÇxÒx»\91ø£p£ÈR~\96¬)DD<ä\bÍbâ¨Â]Á¬×çI7cuÅãð¥\vì&=\8c\f\83Ç\ 4§DÄðd\90Z\8c\13^Ë!×Uµot;-".9Ió9ó«ÂeÒrÏÊÙ9?E,kÝendstream
+563 0 obj<</Type/Page/Parent 536 0 R/Contents 564 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 318 0 R>>endobj
+564 0 obj<</Filter/FlateDecode/Length 2848      >>stream
+x\ 1}\98[o\eG\12\85ßõ+zõ\12\a\90h\91Öuó\108Þ8ñÂñ:\96\82`\ 1¿4gzÈ\8eæÂÌE4÷×ïwª\87\14)_\10@1g¦«»N\9d:UÕ\7f\1f\9dMn^¸Ç?íÂ\9dñßÅÍ\85»º\99¹6¸âhj\8f¦îjæ^\º¬bÍ\19\1fíþhÍäÌ]^Íø{~}Å_ýËÖêÅÅô|rñ¥\17/În¾¸bßø\87_\8efÓëɵ\9b]\9dóqåfçÓÉùø«t·GÓ\99¬Ï.ÏyZ¹)ÿ\9f\8e¿ìíÞoÞÞ¼ÀFúVog\9c\fËãÚÙ\8bÙärÿíÞoö½\9c\1e¬\95\v\ 5\97gg\17\1cã\v/®/?_ðÓÝÑó××îÚÝ\15 }ysæîr\83\97\7fdÏî\96\ 1$cwâ\96Í:<\84öÄñ·v±vý2¸.Ö\8b2\9cV>[Æ:¸ÌwÁ\9e¯\9a®\8bóXÆ~ãúÆUþ>=ïB\8b\r7\ f\f\9fúÞm\9a¡å\8bd!v2]ø¬wÞuKß\86Ü­ÚæÓæû»¿\8eÎÜé\r\18ÝåÏd\87­ùf½lÊàæqáÞ¾|wâ|\9d»up¬seÓÜë\9bXs\ 2í4\91\8dç¯o\9c\19\91·§³\19\11ÀÞùäjâ^ùÚ½oã\ 3»¹Åà[_÷!¸7ÎW\98mêMÕ\fÝ\8fÉÆ\ e¯ÓéÍäb&\13ï\9a\89û¯\É\96¾ÎBç\9a\ 2\12V>ÖvЭ\ 1;Ú¢\r¾/7.Vøö\10ò\137\1fz7Ôeè:áa\1fq\9aði\15ÚÞ5µ{ÃYÚ:ô®\vÙÐ
+ÖØ»u3\949`ºÎ\17¡ëAú\10%ßuC5¢¬Ømz¢´°\ròFV\15Â?Ã\9c¸Õ2Ó·>\ 3ï¹Ïî\155\ eb\90\81\13^\9a\93[x´\0ç8»{ðm\ 4\18`.\9a¶ò}Ä®\9f7øÃú\14\10_\96ͺKÈùÄ´gz{\80å3W5JÚ6\84¼©´\7f\1e²\98\a"\1c³%LëÁTØhï¾\1dº~\8c¶8\94\87ÞÇÒ¶x$\89>^\13DÙjñß\97\13÷\13ç\8aýw\9dëúX\96\14\ 2\19\13×@\91öÑ\1eE\84\ 3\8aÙÆ\90jâ~%\1fXÞÀöµ\87ÜK\18«¯\97
+õS¼^º"¬Ý¼ÅýÐv.\8f]V6c\8e\f\92(R:\9fç­\82\ fù3B\ ekt\92Áà$ùº\ 1\b|ÇQÈ=ÂTwEhÛ\94\ 1ET\ 2lÜë»÷\93\1d\7fó\ 6´ê¦Ç\8b\12æ\1cò¾|S\98S5p'/
+89´áÄ5­ñ/k 1\9cËÇp\8a,vVø\9d\97d1\ 4\ab²9¹·õn¤X{èÙ\89íVÅŲwXî\88ì\93S\91
\90õ\84ftöÝí«2øÏ0ýi\8b¦\7f\09?Çû¦&\99\80g\1e\88ç\99e\ 6\b\83A}Úõ\9cØ·¹[\ 6϶\9d\b±\88pWÑõ5¹´Ç]ÜÜ\8c\11å\v\9f\91ÊZðO2O4        \87PV¾\1e¤V\0§`\961\v5»z2<T¡î'î\8dØF¢\9b"\8ai\r[ö1\8b+ßó!\1c[\89\9cÐÔR\144\ 3Z(pWh\91ÏÄ1\18\9e\90k2²\7fâî\b\ 5p\91ô\1déFz=\91Ç\95Ä«\89f\1a¢l#Ô¹GÈ@«#x\19¢Ýä\ 4}\1e2/¼vgS\18q7J­\97þ!Â
\1e|\17\83\ 4ÔûÑÊ\89{;Ü\87\7f¤\8cþ²Â^OÜo\16þ®1Qb\ 3"\86·÷»ÍS|\ eÂÁ¶Ð¥\17>l?\ fÆyQ:ä_×â\7f\ 5\92\17Á(7ì)U\11Ì&/)½åè¯wwïGBìvØ\17\1d0×ÏØ­Jò\\ 6¨\80û\8f"Á%\10V\1eI\fh\84 @\15EK²pH\14i\ 4\12\9br\aÁï\1aþm5\8c"G\8aa¿ð@Ú\ e\14\81\13ùÚ·1»ß<U\94ã?\90\8dÓ\97\v\09\96Z\10jÈ4\94ÞÂÓ\14 åp/×;\13'S©Æ\91o°®\10\9bP\8b\94B£:ç\7f)\96[\94a|ÓæÀ,ð^qÞEb\ 2\ 1àã3Ü#-Y\81¼\1cúX\f-Ö[A0\96\87´4¸ÿÜî\aõã÷òOêÔ\86¬©È\93\5\90f\ 2:\ 2\8c\81\99"E\9dR\1d\16tÛ*,¯©Ï\94Â\81e]lM\ 1\10Ï¡D;æO2AÅxçÀS,_Ëh-uÈÈ\80<\16ä\8a\88¶Ókñäñq¨I\15<²Òþa ÷pS\81{õ¿@Ʋ\15õ\13f\12¾­\86[E±\9eG\9aTS\83{"¶PwP\9f\82Õiñ4uwð\8bj\8a\95âí,Þ#['î\9786?F\86ôòØ­c¿´\15ë¶!w\eZ\aÊ\aÿê6]\1f*ÉúV©÷U\v­ÃM©\ 1Yi \1f\ 6Õx\14\0¢\ 4ÉÁÎÎÉ ò·hoþ\83»\1dZ\803Uý\19^P3ÜÏCËþÀ\93¢Ø-M\8f-\18t\93\96YÚ/õ#V\12Ñ\94\97@\89Ç,ÒQ\ 4Ó(¿\87\aBÛÕ\fQ\f\9b\16éØì\1a=Ë»à\8e?\ 4ű=\1eñúAF7Æ\9aB¥Öp\90êÄ\ 2
\141©ê\9a"(
+W~eaVßU¢êâ;ùJê\ 4\ e8/\9bì>ä\87çâ$,E/  \98\9a\«Õu³w\1evÎÔ\94ª¡\96~?\90\94ð\9e\1f¨µm\e>ùjUÒf||¦NeÛîÀ~À\98óÍ®\84)Ú*_Ô1Åx¯\82\1d\9eÊ\93ÿ\1f¿ß*\95úbË®´Ý(XÆi  Ô¢q\89<c\9f±\91i¢]4\r-
+\8d\919÷4\93ncE)Væ7\ 3\15\1e\87V+J2K+R¦0;ÿ\ 6êÛ¬\8d«Ô¸\9dè­GJ:\11<\ fª\98'¨òoo](­vvOw\19[\16\8b\ 3ðÁ¾
+\16\88öÌ
+È}ê1Öjìì\em\90ÄÍú\14\12°\88\8bAY¡\1eõ@ç,,\1c\e|d\19MIJY5\ 4¾\8c÷\94\92Ñ\96ªú!Ä©>#J$E\eþ\1e"µ)uôP\ 2\ 2T$\82êÂاÐ:\9ac_\9bDn\ e'\11\e\858\99;ÎlFZ\1cë\84\8c(x×­Ô½\r+\8b\8c%7\ 1ûzY|×@6\9aåmo\98@R\aëÇY\8d\14¢\9bH2k­óc\96
+\ 4w\8bw\14*\88¬Úb)\vè*XóÀÓ`\8cõÝýÉ®\11\15­²æ4|\8a\0i±2ê\1d\9c\96[ºÉ3õo\8f\9bMÜmê»´ë\9aR)J"$+$ Õ¸ z§\8c­\a_ÚÙÆià\9b(OÏ&îO\95ê4«Ð\ eyzå6¬ñÿÇ\83Q\90\81
+ßB\96ö$ÍSª·Ê[EÝzé½ç^\83\v3θ\8fÚÌÇ\96]H-C¹RxmC#íØ\ 4&>©dî½eXbRb¾¥\19\83Ò\87\98ú\1eÑ_õ\ 4é\8dZ'\8eR\10\88¡íH\13JC\81Kpz×\96ª\8eíUc±\vXeòùëÝÌ&\ 5J\8fÆ\ 1øÙ·1\9e²yJEÄ\ 1\ 5Ó\81\961³sÏA<[\ 6\84´\9d\81h\88­x¨Í@\80`\93\87\15\9c\82² \8a£\80\1e\ 3ÜÜ\rÄà·¬Qm:ãG\17¹t¨\18\10èº\95\8bs_ת"\84\ae#h\96Æ\1a?-W¥ã\19?\18Âi\10XÃw¦\9cºã\10ß7ä\91¸È\1e£­T\16xv\18\b#}\1aÃX\17'ø±=\89Öë,é\12#V*y­U/»A°ð꽩bê\eÔ¯0Å(\9aeè­¾óEÅ<\8b\v\11Æ)\90V\9f¶ÆSkôÙ±¤T¸Ö\8dÙü\b\88Ìu¡|\b\9fé¯JRê)S9g\8cÓý\ 2ºjã\9c5b¯Þÿ\81\vi´ÀÝ\14\91Q@i×ú¶IÂJS­ò\85\e\86ªJKr0\8dû­\ 4w¼¡\18#u\88ª6\1d\b§î\80¶Ý\96ç\86\86ö\r\9b\8ci     \92t\10k\0\88d*\7fc(\13×\84óþ2\95e\1cQ¹Ë]\98,&
+y/\1f\91\8az\ 3c\8cû\8f×\r\ e}åªk\vü\96\10º\1c <n\8b¶w\ f±\93\8d\v\0Rôa«n8\0\1e˦Qp·{l/`n©Ð𥩿ã*hX­\1a\1aJ\vɨ2y(<\8d°bòXë\92xH\94¤1;\1d è2&\91e+4\ 5\9d\11ËG\9eJÁP\8a²øv~ϸ\ f!Yeu{3\94\f Ú\fª\816FcÖ-\rÿ\1f\1fÞ~ãòì6µþi\91Mf8P#QÈ\1apc\89æ»Ý ú¹»½}K\17b\93¯\ 6Â~­$5­Ü¶·J\ 1\v\97Z\ 3=´ö\a\ 6Ôªu\19\ fdî1¢v×6jàVðh[¶3\1f·\9býöêhë¾ `fÑu\9eF=;Fë×´ióyhc·t¹ï)\ 3Ö'%ýÖU\12\13\904N\87\1cjb¢«\87\90\8f!¸vÓ©îh§\17Ü\1a_\ºËËËñæq»÷kKéZ²þ²£=u¿+Á\85 ü;Ý.<½:»Iw\9eÌã]F{ëëÀ\r\9e>:ç\9aûêò\9a«Qn4§S=úùîè÷£ÿ\ 3ÁÜÍÞendstream
 endobj
 endobj
-531 0 obj<</Type/Page/Parent 490 0 R/Contents 532 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 353 0 R>>endobj
-532 0 obj<</Filter/FlateDecode/Length 1984      >>stream
-x\ 1­W]oÛF\16}÷¯¸\9b\97(\80L\8b¢¾Ü\97"\ 5âÝ.\8at7qQ\14ðË\88\1cJS\93\1cffhE(ö¿ï¹wHI¦ã¢\ fE`EÔÌÜ\8fsÏ=sùåj\96Üftþp;\9aáßòvIëÛ99MåU*?¥´\9eS¶¢¼Æ\99\196ñGÊ\1f\9fþy\95¥\8b$£åâ6\99SM\8bÙ*Y÷O\15}¾º|Æj¶NV\97«i\92Ò2[%3\1c]-\93MÿÀ'/\1ekJçëäöbñò\19«\8b%\87 vøè9HùÆ\89ÁÃr¾B\88\8bÍ\1aßçø\93\ 4×ì4»]೦ùr  /ñ©·CÙf\89½£Sl.\9bg\92q\9aÝÂy|âCé,M\164ßdÈ\14&7)þ\8fO\83Éùb\81ó\b{µÂÉøÄkóe\86ß\97\11È,\9d3\90üÀk\17\8f5e\88óbm\91Í\18Õ¾\0«E²<\9fãH\17\11ß,E\92ò}\b\ 4\80½\0ä\87û«\9b»[\9aÏè¾DñWë\rÝ\17Rqü\92O\96   Ý;Ûm+í÷Ö\ 6ÓìÞÝÿ.'ÒE<q\r?s\9cÁÖ4¡\1fé÷Î\aêÚ\9dS\85.H5ø«i§\ 3\9f¥7¹m\1a\9d\ac\eÔ£ì¼.ÞÐÁ\84=é'í\8etÐ[¶?£ët\85èaµU;ý}ô¹ 4í}Î×¼ö\ 1\aµ£ÿ8ód¿\1eÉxjl ×5\r|MÉ::ÚÎÑÖÙ\83Ç>¬Ã}iv\9dCd%\96\15\15¦,µÓM Öº@a¯\1a:ìU¸4Úy\98Kú¸@*$^Lî÷\9alU\9cö=L$ÕÊ[úw×<n\81\82v\ fï\88S\8c¶734ÐöH\85.UW\ 5\0»GD{åi«uC9\ï°7Ø~{\9an\90Ïa:\0Âô\83ã¢Ó¼GI.\95ÉCÄïãûÏô0ù¨ÃÁºGzß\15ÆÒgí\9e\1fÞM\91\93É÷\1c\8c?\a\83j\95\8c\10bxÒÍÛ0\95\87FK\10#¯1ºçx"
-àO\8d>D\9bMWoµ\13ÜU\85ì\e\15tuì\13\93­bô¹¢ Yoî .RÙIe\0[s­\8aÂiïyûÍÝPö    Ù\96\89óÜÈÐñ\132q\ 5Ôé\91êyñVìÈ>ù\10!\83Û     ÕÊ\0÷\9e\12JHY\9aJ¿â@\18À½rÉ|áÂ2\99\9f\98\8fÐ\81\9f\12T\Wé)m;æ\95&d¦\9bGxT\ 5\aSU§Æ\b{tÙn?°l`ÿ¿ìá5ò£vl\15Æöø\13
-\15Æ·\95:ÂÿV\83ÞZê\19\ 32ÁÓ/\9f~\9a\92a¾ÀqëìVmQ\9e­¦½\ 6\91\11\18Ûë\9bå-zEåx\86\1dÁã\f«·5\18hj¤\ 6²\ fö`æì\9e;Úöi\v\9f¤Ù\9a#zþK§¡\ f=uÐ\95hû©¨ÄÐÅ\12\1d÷1,Æ\98Fþ[p\1e\1dÌý\83pÅÚ\9eµ\ 56\vÄã)@Hʪóñ×\97\84ÞC\96\90-RÆ^µ\ 3\ f\ 6ä\87þ\16xa¬°Ú£7\18£66È      9n\e\84NÚ9hI\8f\1f×<âÞ¶\95Ñ\ 5ëç\91Z\85rs\8c\8ch\aøQ\v²RÁQv\16\14¼\97\ 4û\9c\8dgòîCh¿»¹\89ôMÚ¨\81\89\e(õáºsÕµiÊÑñs·°Zy\r\88K.¡Óª\ 2\17j\15Ps\1fÛ\9cû\9a³ù3Þg     ýÜ@\b\81¹z²Î\ 40\1d\1f\119\11dQ$\11ù¾Æ       ýÊ\12\9b\ 3»\1f\ 1ðk\f¿3\ eT\ 1ALy\ 4r8\81HQ\12Ó\14¬Qꤽ\\91J×h5ì³»]Åð\ 1ÈÓ\86¾»¾\r%_6½b¼\8e©\98}M\19"\81\85O ]\19®\9d®¬\92"rÁûð@\82\9d\86F\9b\ 4ÜÝãîà(\v{\88}'\aéQ\1fG|\80p\83P9\84\1eÒ±C¡Ø2\bÜ\v¬y\82ÄN#Ý\9f©3\1a\18ýø(­UëÚ\82\84ÒÐþáÝ7¨\1eÅH\r¡Ni\am\1fqço¥\1e7\ 4Täe;D\94^h¹È\ 6O\rÜ\12r\ e¨Ö-nÑÏ q¼Ý\94Ì\15\9e\14\94o«¥\85b\ f\ er#\ 2ÈÄ\8fû\a¶£så\87\11ò\83\12¢QÜI­m¼\ 1Ùd|`N&ô\11w4|Ö ¤\90<ðµÎ­çà\0!ÿ)\98\7f\89|ÒÐ>¨Ð\8d®²q;W\18­\ 4\1cÕ\ 2\1eh\ 2n`z\9e\a+±.\f«Ñ\98\a¿a\14à\9eÄÐA:\8eV\95µ\8fý¤äû±-b\anáö\0.\ÂÁ\83ô(\ f\14¾ó­\84ba\10CÇP0îRfä\18é\82»¹U\81\87\ 6q's\eË\b\9ft¸i\10\1e5\ 6K\99|ê¶Ò2\°H\r\91qj§\83¸\90qÓâÊÉ\95Çy\98\199u:·u\r­åº)\99\1eù\ 6\89y\91\87\9c\e@Äu×'4íûïY>ÜÖQ\ 1ä\10\ 45\9e\13M\1a9mµó\18qüôä\b\9dÉ\97HAñKOá®Át ×\88\2¦À\84jJ\'b;ï*\84\ 5êqÅjÄ.è\1c£Ø*̲Ü"\9dkFÎ9,\8b\ f̽½\eôS¼üè\93\86H`zã£rw\8eÅ$\8a\ax\8dÖ
-\a\1eX\19\ßaª\8c³¡ÿGïn¸A\a\89\12\81\ 2*L\fnMÀ\8eJ\ 5¦Ol\18EA\7f\rÂJ\8ba\80÷1\rU\8e\9d¸Cý^\92ö\8aÇ\ e¹Ó!ó=\85ye\94åkÔOp\eô#\ f\ 3¡\957<;pé¹î¸\0c4\92R/Ù\1eÂ\80L\a\8b!]¦7\1cÁ`5r}"\1f[TÄ«\17³í\1fT:µc5ÿ_\9\ f\ 3\83\81îè\10\9aÇ%±\£CÃL\ f±a°*\83\17   i@®¼\97믶HðMÁï\15\98\e¶p!8=\vâ\84Êføå¥2\8f<´#\ 1¶Ó\9ba\8aö\94\ 1vP\bÜ¿º\18®½ÎSe\ fà\8eä\ ff>©\1cS\15\80\ 2\8c!ÊÆȵ\90\1dѲ©\1c\93¾rÇá=g Ïèµó\14\0\ 2E\93æ\9dç\17+\0
-\1d\14\1a\ 6\8f\ 3!^¼eLøíÇ]תéPj°\84Ǭ¯\12×iïIOe¸DÖ\ 3**öÒiãù.ìq\19å\17º\80QHU¯\99çßoî6ç\17Ú\85¼Ð~ûm{±^$ëÕ\ 6oçxýK7|öÃýÕ\7f¯þ\ f\1d÷vÊendstream
+565 0 obj<</Type/Page/Parent 536 0 R/Contents 566 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 331 0 R>>endobj
+566 0 obj<</Filter/FlateDecode/Length 3203      >>stream
+x\ 1}\99KsÛÆ\12\85÷ú\15SÜX©\92 ñ¡\977)ŹJ\94ò#\89\95ÊÆ\9b!0$Ç\ 20\b\0\8afnÝÿ~¿î\ 1HB¶\Q\"1\98éÇ9§»Gÿ\1c\9d'7S³ÿ§^\9asþ»¸¹0W7\13S;³8\1aëWcs51ÓK\93\16¼s΢Ý?\7fþr4\1dO\93ss9\19'צ0Ó\9birÕ}ÊÍÇçëå\fVsF21³ë+~\9fð\7f<ëü\8a//Øè\86\8dÆÓY2í>ÉF\87\9fyzy\9e\\1c>=øÌÓ«Ëd|øôàsa&ç\17\9c\10Ï\91\9d\ f?ót:\1d<\15sg\98;}nît<á\90\19\aÏ0w\86Ùý§Îo3»8×\98Ì®±5~\90G\a\1f\v\83eì¯\vw¯Í¦lù,8bÆôfüÂ\83é\15ö\15æzBì§ú¡ßl:9ÿÚô1Kffru¡æ\8d/®Y\12?í^»\16³\86ùùéáèìîÚ\\9b\87\ 5¨¸¼97\ f\99B\81_Òã\87\953¡Ì·Æ}I]ÕúP\9a6\98\eÃÏ<\ fé£/\97f¾5«Ð´¦²mëê²91¶a\953iî]Ù\9aÒ¹\8c/xÓå¹ù½öOáËV\17\94¶à\84\85þ^»"´Î4®~rõ\89iä ÛöË\7fxø|tnNo\92K,<Nmi\ÓÚyî\9bU<*\94¥KÅÄÄÜË\86¼ª»\17¶MW®1Vm<Uw:CO\9e½i6\1eûæ.z沤;t|\ 3\869õ¶1\v[\8bs6Û{O$ÒP¦8î2Ù1\ 6'wM#\9eYxдµWÓĬÒøÖ\14v\8b£®ÀMÏ«²_\13Öu*vÂ\9b°h\1dë2\82ç\17\1e/1)\ 6Lã,~\9d\f\ 3bˬ{Kâ>·\ 4£Ö\90ãM\95ÛÔeÆ\97F¢V¦õ¶jù\Ù%\19
+$`]î¿-CéØBÍ_\84ڸŧd1Ýâ\88m\82dw³òé
+LT¡Á`V\17$wh\8fX±X\13Í*l\-\81èÒþj\10¼ç\11\1e½        %®·Ø\15\1e½kFæÓq\8bÏN"×jl\1wY\16ý\91SlÚ®mn~}x÷Ö`ïo\1f{Çt#\ 2ì\9c\98vvg#Ê\8fÍÂçÀô¿$M\8e\8eú_\ÕqáøÓ\ f']Ä>~|kÚÚ\96\r'\ 1¯¡\9f=b|A0\1a/\99\ 2çÊ\fÂ\9aá:6b>\87e^^o\12s\17êv]ZÈ°íð\92\ 5âX\86V1¡\eà\97\81\ 6[IP\ 1í\9aÔ\95¶ö¡ÃK!të\f\1f\1a¤        \15°Ô6\1eHl
+\87õ\1aê³»\e£\14\12\9fN&h\ 5¸\9e%È}\9f S¯KrÄ\8f\19E.\8e\12ókØ`[º\ 6\9b\ 2ïöGós0÷Jlåµ}Äà\12LW.õ\9cXÕ.µkõ÷ÇA\9\156](\9d\1eV\8eý\ 4ïe0\8f\80Î/U\1e|+ "Ý\85_®Húb\ 1±{ó\12ó¡4\7f\95þËiî9´Ù6­+Àd¯*¢\fx\10\1d\0̧\15rãs·\ 41küéÑ\8b\e+\9cÚ(8öÂ\82Ý\ 4ÜÁ&X
+wØ*1·y\13N\84\81\99[Øu¾³%j#\12\ 4\8e\94lµûg\rÛ\91\89:\14f\84>Ú\\18\95\89ÁcÂ(ú\86}\84ª= \86\ 4\80÷._\f\93\9ayìjU\87\85s\99Æ\9c½îA0²ÃK\b³\b\ f0[ø庶;!Ü\86µÙX\18\ 5,WöÉí\ 2¥vÄ0½½}OÆÐä\ e\8e
+j],XF\8e*\87\99uÅ&CÃl\9e\13DÑ   Ù£w\1f\ 5îí±\8d#âîUÆÃ>²b\92\ 2\8d\11\14\1aËûK8±A\19m\96!\9a$Õ%ËÄ\8co¨É\97×        µX))«\v\8bÇ]Ê\87\16\r" T\17`f\86\12\90>\1aÌE/PY\8dT[\a>òP\91í[¬Ñ\1a\aEoY(\16IòX\v¦8µ\14\0Å8Çúæë\18¶Þà\98\ 6ä·\ e\eÂ;4L\ 3<L\10\98ZïÁ¤Q\17\ 4D@\11\1a¥\94û"9\86S^\92½@Êž7o£Yd\aPzI\8fè{\169O\ 1Æ­5µe        \8d\17 g#®\ 3\10\9b\13àfhÙ2\ 4ATHÌON
+¸iìB\ 5\17Ù        u½ý¾rÌ¢:H\8cî)ðè`\8dP\81ÕÌ7Z¹º4}W\a\f¥\ 5¹o\81êVÌ\ 4w]\9ez^o|»2 §î£+|\8c\1e
+ ºæ¡\rË%\19ÿëÏ·¯Íªm«×gg\11\10\89È\0\bOB½<\8b«\12óÑ\89\9bÏ\14à'*OaëÇÜ\91y\90!L\12\9av\v\ fêÈ_äؼ³%åG\ 2ºë£¨0\10Bj­m¶êÑÞ\1deéÂÙ\16)ý~\/\12ó·`nÔÅ1\eI`úp´¡%£ \16\0uýSE\8fÁ®/Çù="¦ç\7f^\13i-
\88X\ f\15+ &V9\90\82.÷Gï\8b\ 3&4­tI²LÐ%u¢Ó\ e\ 1³n- ÎBÜ\10\13c{ÇÉå²\13öÎ\8b!\f7a\9dgH`]¨g \9bj@ü£ÜeÀó\1e¡Û\9doF\85ϲÜ\9d\16¶$4ÊÐÈ\91è\ 1ÂÕn\1c\ 1\1c\80Fx±qsÊh\v\8fbÚ^(\89\97\89y·5yÀèFJE\1fúQJQ\90\96r\ 4ß\10)qÛR!D¹\8d\14±7¿Ük\ f\ 2Oÿ\962\86ÍÔÒøÖèåôÜîÖ`]Q\91Ü\98¢þ\å¿´á.\8b\1a\9a\86&NÃ;\84á\89Ô\13\89º)\ 2h3\1f´«T\ 4`\92§;!´¸ mS×1\ e\15 ¹\93\84Q³h8\87É*\J+ë\9bB±N³QUrP_\ 1ôÛ>\1ej¸(\98t\9c\ 4\85þ\87ÓéÞé|Qªþ%}§s\96.q(äÚ¬ÚöõÐ\8a\17)N¡\10\ f\11³\180ÚH\9f\10\ 2\8aú®×Z\ 6e\ fÜ\14\17_QF¥ç\13\80Èç\85-|îéö%\9bC[غvPMD·{»Süo4å²\17\18\92-\1aé\ eJ)ã*õ
+ª=0¾\ fƫļAQz,Ð\95K÷ å­£Ô=\8emÊ<0Ihóa\ 5æ±×øÑÜ=üÞõ\1d/ÃïNZ\16±v÷\1e\98"\84\83þ\89Lñ0ö\7f´k\99Ç\82\9a±\80j×ñìÉ»\8dr\1eKÒ5=TÛG\1d\85 ó}t{;ãZq¡k\8cd\16ôÏjS[¯u@ì\1cïf»Î\ eK\1fÀp\17åö\19\ 5\1fò\ 1+t>\ 5\1c\14\1a\11±(e(\8d®\96ñMÒ\8f\14\9a¾Ö\93î0\7fòa\1dõ"v°ÚÀÞé !~°¦bxe\Sí\12¾É6VÒ.\93a׶Kxélh!£¾\8a\8a,ãnwÊ\1e\831Ë:F\1eh4[ÇLlV2©é\84¡H\18r\ 3\93:\19\91Ä\88oЮ\8f=³­¹ÅÕC£\ f·Ãl\1dÃd\13\99\10ü\f_$\ 4è\ 5Ýkëÿu\92`Ýó]\9d\98ß|QlÁKN\a×´gKFEùehQ\9cp     IæÌgLÊE\92ºP³S©!Ã#\ 2ÏüЬ\vÚ\aí\ 6FsKõëmÒÑ`Cq
+å+i\18Ä\8c\9eµè\1d\ 1Áê\9145ßzgh\92¼=(n\(\88\0DMØ\83\1c\99\97#¤ÉÑ\v\ 4
\94¿µÜ>èQ\91tjg7©cî¾\15\az5ðF\8f\14ß\aMD\1c@\ ez\87%\\ 3 *\a\a\99/sR\14å\ 3ë\90ºN\vè\9aB\9d    $;\1fF?÷d|ØV\8e\92%âE\8f&eµ³tGø\8e]\84\8f\9fÝ*¶\94\81\82i\15>KG>\fá\béÏ}ª\13ÇÙ¿¾\1aE:\1a\87HW¸#Ì'1{ùê\9c d.©÷\8ag\92\ e\0ù\9díêPÕ\9e\13÷\999Ä©$!Ò!\ eýx\ 4\96r<\e\1aƵ\87t\ 5ôÏ;A"\8dÍzþY¤\93ð¼\94¡½\0ô£_/h\9dÖÆ+\1a\10Á\88\1fçÖ\96Ø\12\9d%sR­
+`\eð«õah\14Z3\12\93ÎԺѧ\1f\14S|\e=R       Â\1f\11§\83{\8f8\b³\8aË":rì'\19»\ 4}3\8dÍ\1aa\94Þ\9fv\98\ 3êÇ/\95FÏåVJ&}\812\80ã\1a\ 6\1d¼?v9\941\7f@Åh\9c\8e\8bs鷬ܮDtíT\8b\19°»Zë·¤\17\95.9ÒýÓ19\9f\19\1eÀ\vQ¡÷è\91Öß¿½\97ûAµ\e\rjä2E\ 5Gv!\17ÜXsM\97\ 5óþÃC\ f\90>qF\12¤Bz\18\97\18!t÷\80£'Yæ©¢*îú`\87\1fÝæ¹U÷¨û
+BáÐa=\18}xO[J\rÀ\e¼ä¤+\8aÂÃïÒPóµg\81\0è@0СøM\7fSeæÝ     C<\ 3CQ
+Jݧc|¤\ fÍ\99G\9eIò®\19\92N_gyO\17$õضÈ92$w\16°\12\b\v»ô)Ù\97»9à¿\8d\8c%|\rc[ßXvÒ\e%9j\89
+¸ôïì)±\18\19eÜÒ\ 3\87tÁ&n-*î\1f¤zQ.¿
+þBúû\1d¸#Ý\ 5ôdS\1eìp\ 5.¤ÚÆ«\10­1\98\1d\12Ýút\9dÛZªN\1cZz ãÆAõÒ²\17KMZs«Ç-OO\89Þ¾î\9eú£^êò\90\92§]º/\80á\8eÎ\ 5e\84«3ô\fï~³O¶a¿j×7I¨¸`\87\81ûÛ0¹\8b\81ÍU¨N¹\8f¡á¢¤KÆâl´»d\89´\95&\155{v\9b´\87©\1cÛ·\ 4q$\ 2\8b\83Ü[\13´\ 3iÕXkq\94p\8b2Æ¡¼chÇJÎqÄÕ»\1a¬¢Ê2\93E\14\9f÷\7f{è¯öå\92.Ù_µ\1eTF9*¶-2nEýÐKGf9\81\87Î\b\11\92\85\95?L|Å\9cí3æÈ\fÃH"ä\10¤©\ e(:ûæ'bÄ>\ 5îâ¿úsÀN-úÛ[0&\9dvÜM:\1a\80ôë\ 3ß\80Â6¤!\97ú\13\88\1eDìû\17÷D>ÛÝ%˵\19\8fåo1ã\8bYr}qi./'ñ/\1eýaw:bé\14qÛ<\92æ?äÆQ´P|;íß;½:¿\89W»æ\9dçò8ÏméèßdÑìj\96\]^s\ 3ÌÝïx"_ýçáè\8f£ÿ\ 3q}0vendstream
 endobj
 endobj
-533 0 obj<</Type/Page/Parent 490 0 R/Contents 534 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-534 0 obj<</Filter/FlateDecode/Length 1805      >>stream
-x\ 1\85WÛVÛF\14}ç+Ny ¬\85\15ÛøÆSW\9a@C[\b)î"Y¥\ fcidO,i\94\19     ã¿ï>s±AÐfq3\1aÍ\9c}öÙç2ß\ fúÉÙ)í\7f\99%õñ5>\eÓôlHFR~0p\8f\ 64\1dÒé\84Ò\12{úxi÷\8b÷$}:\1d\8e\93\19\8dfS|\1eâÇíå\85áx\94\f_[\18\9c\9e%£îÂ/ó\83·\17g4\18Ñ<\87áÉ\f\1f2g­Oóôh\9c\8c\12z\97\90ªl#\8aBUKº1êA?nOè\92VâAR£©ÐK¼AòA\9a-5ª\94XÃû¦¡Ëó\84îV¢9\9e\7f;èSo0\ 1ìyv´T\ fÒþÌ\ fß^\8ch0ðö{Ã)/ÎWÊ\12¾\ 5}o\95YS\83ý$ó\¦\8dÅ?2\82\11\8dÒ\15é|\8f\b\18R]}k«Ô-mT³¢Ë
-ø+ÙÐùc]h\ 3_D\95í\9eF\§`\r¦ßëª\82\19>÷v%\f»\8b\8fwªÊôÆÒ°\8fXðîøàËMBs\0²Û²nti©\14[\12u-\85aZ\16\12p\8ciëFf¤MÇ\96ª\1eD¡2úð×5YÙ40fOð\1aÕÂÚ\8d6\99\8eá\ 4¡\ 3º»\95¬â«ÔÖ\80B×sZ\b\8bã#$»µ\8d,ɹ\1e"E[Ý:d9üðl6+¶F\99¦J78\12;\1cÞ\ eÄL3\ 3\eæ\9fÏ\90\8f5Èá\80\ 2\a?\0lþk@\80³
-Lüx£\8a\82\17bQl½HøM¬î\82±'ºc2Ò~\7ftùþöþØ;òA\89\82·_Ë\ 6Ĭ\19Ôý\11xãuÆ\ 2ý-Á\ 1Âïü\16Y©*e\e#\1a¦\13zU\85\J\9bÐ×\80®cô9ÖRdP5\8b\90C\ 3AEI\88\a¡
-øä4¯¡Dh)Mu[9]\ 6\92X\ 2./àr\ f\98¡\1f¦¨cÑ\13\96Ðy²Lèª-9î\1f\8c\94e\1eHeÁ\95b-\91\10Ñ\98mUã¸\ 5¸\-[\ 3çs\9cÀ»ÖêÇÂ\89Â\0aÎOY=(£«RV>Ð.\801¹EÁ\ 5\80\8f\ 6M\8f[\86èüÊ÷ÑÜ¥\16¢v~\7fÜñ5"³P\8fÊUÚ¥\15\fmV*]\ 5íØ\15k±µ2æõ\13ÁA°\ e\81>bî\0OÇæB¦º\ 4e8\ 6ê\f\86\13 öû]9«R¹\97+r\0¹@\99B\9d1\92\97TîVÓ\95¨\96¬\aÙÅÝV\99'¦c;\84\89m#Ýt$\8c\8b\8f\ 5Ó+\98Ó&:\97\e]"·½À\9c\ 3»¤ÂC\ 5h®"â¼\8eá\8e\=r\94LíôCÏä{x%!Íb{¸O
-\12\85Õ´/\12l5\8aÀ"\93\1c  \1d\93±V\91'C
-\841r\88\8c\aû?\85\1d±\88ÍA\83\91Â"ê^\18¾Øû"ÏÛyÓ\e\eYãw.Ϲ\1d8&ö¡<çw\83\16;\8esÆ0\92\ eÖ?Þ=Ëf\88\1f\aï\1cã³\\r\9c#Î"j&êGÖ¢ûmÑ\r\ 1¬\85á\906@\97Beûw:&c~ºVe       \ 5\89\8b\ 6|åFU\96à@W\\97>:űBrelã{(ó\ f\bè\83]ÿ\K6²·ÐÐCµì\18ž]EV\8d«ü\åki\0\17ʲN×¾\98\9f¸~\86ÄF\ 3s\8f}L\90ë¡   %ô[\v@ Ç½i]Ç\7f¡¼ø6\89¥\0¯\1c\0ðEv¥Û"ã>øé÷n3û{\ e\16ÖN\9d\7f¢dþj\90yܯ=\0ÄÛ¶\8bRY\8b^\9cüÃ\1e>\9dTz§\ 3ß\12ÇÉ\18YM©¨ØÅ\90^¬xQméb~CV5Lp¬xÜê\9cM`Z\14:u½¤\94\ eÜ+£HÜ\16Î\17)XàÁÄWB\86Ê6Ðh\80==!¤Oh©1ð®Â\18Z\18Ì\ f\1cùg\85Í\9d\11\9d\bºãÃh!0M\81\8dÆ´\10\a\f²cXotª\vò5Âééã\1cH°Î\7fo\83?ûÑî   a\13W\ 6¯DJ\9fn¿ð\14\açÞ8î|+¡+\95\1amu\8eéíÅìä\1d\88pÃ4\17Y\ 25,a\87Ä»àãöbÂû?\v÷G\10\10ê"\aÞR¡Ö\92ÆÉ\0\9dÞHN~´Gß\17{\e\856\8dÁ\8e'\82]ò:ß0;y®}\ 5\8c\8c÷\1c"&®\1a\13Ä­\1f`n\8c\få\1f£\18«8-Tºæ\1eλÂøA
-Ñu\86øá®lÔ¢
-\95\9eú¤cùÙa7h¦
\ 3\8d\1cc@eÑÄ\9d\91Ã;¹\80\¹ÓÞ\1f1\95÷Ç\87\94®dº^èGV\82û\8cÎâª\1c\a\88<Ëý0G\1f\r\86¸\16àkð\9cý#\9e\8f\80¸\ 3
-=\1fC{®d\911\8e\9b\r\ 6³×\8f¢\e\8d\19\9d\83\8cJ>>)^ñ
-pB(C¡\16\80à\ 2Qd (m\98\80[¤§?ýUµN»jÍ\8c\1es\1f\85\97ë"D\9c\9f"\1d1CÀÙ¨\83èq\90k[\85Û\f`%t­7\8ewî{¬\1aY\14\98ãù\ 6\93\v?˵\9cà\8aç£z7N"\9b;'KTQ\\80"\86ÿª*®¢:?x\92ý¡#Ö\ré²ÒíÒ\8dF\99,d\83¢\0ð\91\0ÛÖuÁjBcÙ¹\97p\8b\81J"È ÿ\1cÃ0\8cb\mÜT\99
-(\ f·(à@D2Ù`ÈEÅüÄi±så\84\18¯ûÿÅù\10\0NÔm\13N      \ 1xi9Ó-\86çÞ.\rØ\83¯a"ç&\81\9a\ 1\ 2Ã,ë*¨)ý%\8fµÎX\9eLö|G\8bm'\10=\v\190À%x6\9eÐd:õ׺HÓ\85\91ß[\ 4\11·\92wv\rC\9f¡>¾íYæ¨\17÷õ¦ý3¾o¡µÌ\8dÃ\fñî:íh:J¦\93\19îËxepÆ;Ïç\a\9f\ fþ\ 5K\9e-\83endstream
+567 0 obj<</Type/Page/Parent 536 0 R/Contents 568 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 360 0 R>>endobj
+568 0 obj<</Filter/FlateDecode/Length 1365      >>stream
+x\ 1}VMoÛ8\10½çWL|i
+IJ$˲ÝË¢\vlv»@±ÉÆ@Q \17\9a¢,Æ\92è\88\94\15ï¯ß7\94-\ai\\ 4±4\1arÞÌã|ðù*\f\96S:ÿ4\e
+ñ7[Îh¾\8c©Q\94_EþSDó\98¦)É
+{B,\1a~xO\10R\9a\86Á\8c\92Å\1cï1þýÞó*ÿöï\9fWQ\90P\1a\92*ZÄÁô(\94ôèU3|cÕr\16Ì©\17\ 6\15\0\16PEÓ)\96̼ĺ8YðÚ£6^Î\83è\95\96ñfS^\ 1¼t\10xãt\9e²¡£2\89bøßK\ 3d\94ú\8dQ¸ä\95^:é\92e\12¤0\1aGüì¥A7g[p5\9da_â¥A7c\9e \8bS\84\93xiÐÅ\vx8è¼4èÂ\14l\81\99\18ñ%^8©¦\8bÄ«¢\90u½4èÒ8\88Ù$\80R\1c K¬ã#\9bΦ\80ûùÈ(^\840øFñûêjr·¤%̬räDº`gW\99O\85\90Vò&       ¢E@_詵\8e2ÓÕ¥\11\99ÊHнjJ²²Ñ;wK¢Îè¾Ñ{ór Q:Õ`\89v×ô]o\95½¥®\10\8e´¥®1õæúãê    °\vZô ãh\19Ìb ÞÜ\97JX\854\13\0X\9b½
+ú¥¯<\1cÇ1(ÆZ8¶\fè[\ 1(\92¢\86\8b¹\86\13\95\81¬ëÜ4\95pÚÔl§ugß°¤Q¥pì\9fµ­²¿]ôæ\1f\aãX\9d\ 3¢\96Êú ­vx3908J\90âÌ`½µª±\9fØ Rt\1aÓ8Æ\ 1á    w\vçv\9f&\93®ë\82]ÏS`\9aÍä\96\02ìÿËT\8avbÓÇ=\ ea\0e\97Î~a \17Ïo\8cÜ}~ð´½·Û\9a\91
\0¢Vn²kÌ\93\92ÎNôÓÚvb°ä¿Ò=<!,\1eü\ 3\9d\8fÞÂ\9d·À\81¾\87"M\9dëÍ;qvj=^ã\843b¦z
+s!U0 T\9cfk¤@[׺ÞxtW sÀrg\9am@\8f\85i\9clÝ':Rº\vv\93K\9e¼¥[HΠËq\1a²íºÒ\8eF\15\12\11\7fâÃÈÔ^\95f\87\93¼H£ÜÛà-\95r£Çk]OöZu¬\87|b\15|¸F¯\81*\8d)}\1aåmM:C¶SÞ\98j\bß'ÐEX\8eæ©­·k\90ÄîISM
+7Qõ\ 4v·ZÙ pUÉÅHêeW\8aº¯\80Ât\fÌ\vH :\0\92ù`\e\843ñ§q9Ú÷`\91/G0¦Ì4z£kQÒ\17.
+$\16ý=¸ùËh:Qf(²Æ×Â940õèT\8e\1d\17|°´GÈ\Ш½³õÛ\9e¿®Ð²\18Xì@k¦Pe*óèï\16\12\90\a_\ 6`ª<ü§\0+\98\8b¼EcC\9d3I²PL\92ï_?u\95\83i¹«¡kmA)\9c(\15ñ·uc:ô1¦\ 6ôþ\92\ 1ûÜêl,\ 5p\8e\rAp¤\aÚ\99][\8a\ 6½M\16\      (Õ\97\ 3wR\8e\14 &wª>\9dåF\ 1«¡N»\81\85Ë\91¿-\8a!áÇ\95¨[Qru¼jJ\83\9azµ7üjj\8cO½.    â¾×á%ÄÌø°WT\e§%§\e\13x\1a\10²\10õ\ 6É8úªec,"ñÅ×\8b\8f­Ü\8e®ÑØ1H\90¬L'p5\93á\98\87êp,ö(:N\rÏ6T\97;ù7õ\ 1¦àK@+DæÔ\8bãê·N»Ö7\84Þ?ÆbL«\14#ñk¦­X\97\b\9e\94\f\96\ eõÄ-®m\8e\92-ôn\87|£ï0R\b\84®p\188\93\9e´òäµ\1fµÙ\r7¢½\9fBLõ\88C\9aÜ\89~"Þ 9ô\1f\8e#òf\84ÙÆCõ|ú\12\94\a*ÅZ±{£\15ÇÔ(T½T\95ª\1d\1a\v\1a7\82ôe\ 3wN,\11¬_\8f\9eZï©®v¥\96ÚÁÞÙ/tÆõ\e§ea\8cef¼Ï\9f³=pZÌ@L­\11ç'\9cäÙëÕçV¯2í\80öã\ 6\ eU¸3\1ch[ã\1eA(R¶\ 33\ 2Ó5;\19øññ\98`\v\8a"¾ D³$XÌp\1dCRÅxò=áxÓ¸kÔs\v'`ó³å\12|À@÷\aÊü\8dO;ÇópÙ_\19諶R\95h\8dÊ´\96\17%ó$\98§\vÜ}`7\9aò§?VW\ fWÿ\ 3ÿâp1endstream
 endobj
 endobj
-535 0 obj<</Type/Page/Parent 490 0 R/Contents 536 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>>>endobj
-536 0 obj<</Filter/FlateDecode/Length 800       >>stream
-x\ 1\85TÁnã6\10½û+\ 6éÅ\v¬\19I\96%{\e\ 2\et\ f\ 5²¨ÑÓ^h\89\92XK¤\97¤\9c\18Åþ{ßÐRÒf\vÄqh\9b\9cy|óæ\8d¾-\12±[ÓËâZJð·Ùm¨Üeä\145\8b4n¥Tf´.¨\1a\90\93 èyá\1c\91PQ¬±æÛ\12k\86ÿ\98\9b\88í\16§ó2\85æ\9bRì¦Ð¼\10é\1cû\7f°y¾\13ë×°¿î\17·÷9¥)í\e°+¶%íëH)¡}µÜw\8a\82\93¾£A^È\aÝ÷$O'%\1d5#\7fo\82r\14:í©²Ã Mý3©á\14.Ú´Ø\9e\93\eg\87ø³Vþ\18ì\89|gǾ\ 6èQ\91\ e\13ä»ý_\8b\84VéZd ±\8c8$[©\8dà£Ûû\1d¥ù\95çj\9d
-|­\97\e±\15ô\99Z\ 5\10¦pêUPý\85\ e½4G:ÉV\91\fd\8d\83\12tó§V\8fô\87\1d]¥n\98Æ£Çi\7fù0_^\88-ãÞuaè?Þ\1dl}ùxw;}Ľ\89Ë\8b\8c5\83T\10\ 1o\vIL,Ö)?ö¸¼\ 1µGuðÊ\9d!ÖèY\9b\87ß\1e\10\ 3j\83ö\1d\95\9f\8dÊ\azpúl\9f ¹25N,\19\eb}\0õ3×I(Ö¹²\ 6×\ 6úº\94\11û0¶_ßEªP4+®b}6`R«F2-d4º\1d\9d\fÚ\9a÷Ï\17:\15  x\92ho-\83¤\ 3´cè\9bÑ°ÀL@Õ7\82æ\829C;UScÙ
-*ªþ\8ab£{\18\85\vG­d\11åÐüVW\Ú£uG4Ñ\90·\83"'á÷JzåßG´\83C\8f\10Î\89/*B66Üht%\ 3z\8cC\80¾ºuj\0\9a"qO@Eÿ6\ 6W\80Òƶ\85à Ï4H:;\ 2\v) æU¯ª Ïl¨0:\83V6¸\ 6\87\8d\92ØÀL£d6\167O\86W׫§N\1fàn?V\1dTìäY['èÓ\93d\9b\ 2\1dØÖD\fμ½O¦9\\8e(XÈx|=\99ݶ\8c>åÈ\1d\ f\ 2\86`\9d¡¿\98\ 2\84\13ýÎS¥\9e*ub|\90\ 5I\fî*R@¡\91ð\a\84¾ý\9a\83ç\19þí¬7#~\84ý{\ 5c\9da³Õì1Pÿþ&Ð\7f\ 3~\84%¡®j\vÀ^¥ÜN"§\9bµÈ³\9c²¼\9cÕ\9b\87î>\ e\81     hû/þ\bžðL²\96\f±J7¹Øn
-Z\95     ºÀÏ ÚÃ6\aÌpgm\80Ë9,/sQ\16xfsH\96ðÖ§ýâËâ\1fÌ<à   endstream
+569 0 obj<</Type/Page/Parent 536 0 R/Contents 570 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 377 0 R>>endobj
+570 0 obj<</Filter/FlateDecode/Length 2919      >>stream
+x\ 1\8dY]sÛÈ\11|ׯ\98èåä*      â§(å%å\9cå;]î|\8eÅ+ç*ÊÃ\12X\92°\0,\ f\v\88f¥òßÓ=» \ 5ÚrR\89\1d\83ûÕ3Ó3Ó»ùãd\90Ü\8cåðW½\92\ 1þ3½\99Êìf$µ\95åÉP\7f\1aÊl$ã+IK¬\19`Òþ¯\ f?\9c\8co\92\1a\8c\93±\94r3Þ\7f\14r\7fòì³\94ápÖ\e\1c^a\9fýÊáì°\ f\97>ÿ.e4ê¯}þ\8dÑÉ \19Æ\9d¸ö\80OÿEÃp\12\fKndr=ÿGø£\ 6êÀp\8cO\0\1cO\92\99Lõ+n#ÓÁ\14 \8f\16\8dfÃd$\93Ù\0ÓK\19_\ fö_\6»\86+&\93!\ e\ 3´á\94\83ú\15ÌJ®e2\1aéÊá\846\87/\ e\8e\ 6#\8c\8e\a³dÊ¥Óa2\89_:úì\e£×W°9ÌåèxÂUÝÚñlÚ\1f}ö]Êd0\ 4ÄÃZ:a< \ f\8f\få\0\9c¾×þ:?¹|{\ 3\87\ 1î| \8e\]O\92áìJæ\99\92c óôl\9aȼví¢°~í\\93W«WóOº\8eVë²\8b\11¼t5Å2Ì\1e&r'\9fZßH»YÕ&³\99\98
+\7fJYÙ\86Ëå4uUeÓ&w\15¢·l½ÍNe\9b7k±O¶ÞÉÖ.dcVö/á k\89è.\867ÉtÄSn1ÙÖò¾Î\9fÜç\9dä^*×HÝV\15ö?\17WËεµ,j·õ\98\87q\1c¹ÌWm\r4K\f\eÉòåÒÖ¶jdãêF\9aµ©d»6ÍóM[\8fí\12¢\18\b\ f׳çk+®Èöó\1eÎÔ¼Â;ù©­\1e\17°ÜÖ\ f¯\84f\85½¯\aH¶ÅN2»4mÑÀ\9fk Z\e/\vk+Iqô
+s\e\17§\ f\87×°g{.Ykù«QôE\9e6ÁKï^ßGL\1a\81ììáì\9dm¶®~\94×m\96;¹·õS\9eÚ\87Wç0)O×Äâ\ fX\10 %\1d\ 4\bO¶ú®9×\8fÊ\ 6\f\ 1\81\0\ 1\87Ke·a\97ª-\17¶VG\9b\ 2æV¦±Å®\ f\83u!\8c&\84ñL\8a\1c\1eª.L\96ÕÖû0\18c|&n£´È«Î¿ßy)\r\0\1a\1d\85ÕÀ\90¿ÏxÈÄS\16\8eö,Ä90Ì(øº-ì¹,ZÆÛ
+`Øê\11{\9b\8c\14ñM^\14{\926k\90~µNäG·}\99\88p$wÂ\ 6küÑpf¹ß\14f\873\17\16T³êÜ\0"o¼üöáçsÉ\19I\1c¶©ÝÂ,\8a\1d¦ÊÚ\82T\0Ãý"qa{jR|\93²Þ\95`C^Â\0P­Ûa¡Þ\ 5=#\15\ e§3¡\´Tc«¼¯vH¹?Z\8bô\8cAE\82 ëÎ5I»\84RpL)à\8a\90\1fÒ\87ä\ 5>]¿f2c\97\fp¼4ÈÜeÑúðk\88ú\ 1×\91E>\91×(
\15\ 6c¡Y!ÆÇ\99¦ÎÅÎ\99³\1e\876\81«{¿\91Á@.¶®á¢\b\95Q\ e^ßl\8aÜf,`;T\14\ 4\98\80éÏ\16ÎG$Ä\85ø9Ô\82*ã(©P5®OåuÓlþ|y\19(\98lBÕI\½ºDIÜ^´uq\91WK$*Lò\16.[2>µ5\ 5B[\9a\ 6!ô!¡\98A\84÷Mî\8e\13ùµB\91YJ   \97\9a'Wç\rØ\8a¿\82/´ØiºkÑ\8cAKä#ËW
+oÜÁe/söm^#ú\88y¾ÜÁ\eX\ 3°ps^e,\ 1¦Ë<egaK$\fæ¹Õª \83àªý\84\98#ò²\7ft\19\18KÏh°A\8fesQÛÂ\19õ7~ìû\9a¡Å¡Ú\0äá,O@¹5ê-ÏÎÜ6ä\87î"\8f\16½b\8dJ )\8a#\12y\ 5\9fsc\90+V¥ü     ué<ð²WÒ\90ZH\95G\ 5VÚÒ\81 \9ajþáÕWh\18J\839xd\85\82è¾a÷\97¼ ý\90¿_!\1f[\1d©«YÉ\9eH\ 2êLø¢Ü _Ü\83SZÈû®2ÚB½\18\14\99\85\ 6Âw©­µ\86®\ f] c"Î
+?t\e°\9a\86mP\917®ò9B E\87ôHä\1d\9b\91©K°C\19×°\7f\91ñ5¶\ 4âó>®ÿË9¾1M\8bC5e
\ 1µØl`3\12\fýDúèX½l\963\85\8f\ 3ô;Z\19i\8f\9e)6(\83¹ÇØè}T\1aÁd\ 4\1d\ 5\17Ö2\12Ý     \9a\ 4l\88¾õ\e\85â°!\9af\17\ 5e$¡¢\8e#A6¦aÓÓ\ 3Th07û>Àö5x\ fÐ¥y´\90BÚÅËMaÙ)µ\19uÀhÙ~\17´-ô#TéÔx¬'ÊÚ¦®,Q\9fè~£j\87E7\18"®Âv\9c\ 6¯¡AD\vÎc&|\ 1ª£°æWÈKÝ\ 1%+l\12³ÏÖ\1emÚC\83Äs\90"¬´\99\84\7fDêµ\15\9a¦ÖZ­Äy\ 6A\95/Qsu·´-\80
+\ 4b\84J@Ww\1cé\ 4\99­\81\ e#é[x\958\1cþ\82J\8b§ 'B\83\90\ f\16É
+éÁÉÚl\8e\93:$1Ói\ 1IDyEgú\16"(\b\12ÿ§è\93NÏu¥B\v\ 5Ü@\1e0£àtD¦![\ 2ë\8d4ös£$tè\97\9c\99\143ÑgüZ\91{Ã6­M\10e32VG^âv\82z\1a\97ѲÆçìµ\8c;\83\8e\96\12À¨E±Vz¤3\fíαP\94*i°\84\8cݳ\8b{\18\9erùv/Çþ-ËÚ¬XEÿ\13FöZ¬#(\9c\19F\ 6QÂ!3ê$\ 4§¿¤Ó\9b(\ f¦âÐA\0\98"\87àÕLc\94½6\92ÒÁ¶Ó\8cú\17\9fv\11\ f\1a\8d»PV\17ù#s\ 6Ø\95\1fì@=\12\82+H~ô.\9bu\9d\ 6\95¥p[ðDM\a   \9fL
+\95Qe}Pp`\13Ë\83î\bxÜ)\85.5õ®+k\1dS\8e®A\1dXöNdIÚz*~8K·Êlc\90\1aø$\9fé±\8bÒT-â\a\1ePl|V)\ 5¢uf*\97XNᦶAÓ7Å7eÂ\ 4mn\89:\843PL\víÎï\8369\87\ 4Ð\84\84Ï
+·"\8apµ¢~Ä\18æãÎsw\e
+mÒ¿,\18ôºB\94hQ9.\19\1aD\vÉ\94BÏÒº\b HsÈ\96=
+\9c\vÑô©­ÂeO\9bÇ]ÅÚi\e¹ý¼)PT\90æ ëþ×ï\ fwÃûµ©ÙÕ\90þ\1f!Np\97ëGoÄ{\15\17ÇQùÇû Oý\ e\95¼9 èp·Ñ\82\ 11\9bººn7\râ\84R\94WO`e&o~{\aÙ¦wS\14<\f W{è«Ì\1fw\9a\8fdZ\9cª5½\92wsY T\1f\1d\1a}\19²4:Bk\ 5±,aFÌ\ 1V\bÊ9\15s\10\8d\r\84\99£Éz\13e\85±\9fÙ\90\18'{\94P\1c\ 5\94\98ÜáP´\19þÜ¿[(\118\13£ßróÃÙÝ÷÷¸¸j\94Þ\80}\\10/\96Äôp\ 6Gq\9cN\0«xgÍ\8f@éZ\93\95y\85îQ\e°\98}é      Õee¡ù\7fÿ:¸\12¯\ 4p\v(ÆP\801Ýë\80yB\ ei\ 5\86\9e\90:t\9dXJh-\1dÛÙx\ 1Èî\b\13æàö¤\ eJä6Y%òK[2Ìo öá\17O;Iã\1892\8aM\e\84Gi׳|\9b³\11 +÷\9f\11¸ê1ÿß<éx Õ\0fÚê)¯]\85¦®ñ\v\ 1ë\12VoÔ
+\bå     ¯\e\80¨f-\ fÑÛ§\ ebv\8b\90PB¨\ 5 \vÚoJ?öså\99S\91NA\v\ 5ª°o9\16¨.m\ 3Ù\94H §\86\85{\83\1c\10Î\82ª\ 4>be\13ª&\9e«êEWhI¨Òp\ fS>\82ã}H\15ELx\84Á¼Øy\ f¯\ 6Ç\h!\80\82\951,<\1aÙä:\a\11äÁL½¸³è\ 5¾ÒÖÎ\9a%du\1f\8a\81\b¡àPc\82[pAÄ\8fxE\81\apEâæGä\8cz\82\bTãõÈzú\vD\f¤Ùé3Òk3;\94\0\9eÓÅÜ#STmöqu\85H\82ñ\16\8f\ 1{\9f!\9fáúc53\aN\<=\82\1cH\ 1¶á¿¡ds9\17áò\13IÅ9w·\9c¡¦\1fâx˹qÒ\91ÝÌ\ fEòóë^²\82ÜØJ-é[Aßa+Jw¯¨tµ\1e\88z\88ê\90¡-\16;´3à¢RS\ 6YÞ/Ð\89Qcº9ûôÓNã\ 5\ 5\86QÓ®M\8d\f£]Å:ó£%õxîR/»Úöàï>. @O;¶N[jm/\16á±³W_qQfµ¡dÝØ\1aøJ\81¨a C\9d\ eò\ 3i\8bþ£?\87\18@\9cÇ\8e\92à\8d\10\92\aÞøR\8cx¾e\10s79\88^ípð\8fàNÙâ\89\b=â׿%Ñ\92N\9aüs\ eåò\888;ù\0\80?àn¿ä\83j8\1fáõí¢Ì½\87ºHþŵ/½\9báµ÷\8e²\96&Ædâ¦\14ÑoçïÃ#\ 4\ 5kxxeßÒC\ 1jQ¸p\a/»×\8d¯<Üv\vã  Ð\90t ^¬Qé\88\96§ s\0\ f]±Cî\vo\88G÷²\vh\8cb·-÷ªt\v-\9dQ\rP\913\aj<§â\88`þ^ÿ´>-(
+]ê\8aØp\94]?Î\ 1\vèø¿úøzù¶\93É\1a
+~\ e\87ñ5|<L®ùÁ×ð¯½\9dOfø?(®®ñÞ\8e)à  O¿\9d\9füýä¿ëýeiendstream
 endobj
 endobj
-537 0 obj<</Type/Page/Parent 490 0 R/Contents 538 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 380 0 R>>endobj
-538 0 obj<</Filter/FlateDecode/Length 1838      >>stream
-x\ 1µWÛnã6\10}ÏWL_
-\17Hdëâ[\81¢Ø-ºm_ºÛ$hQ @A[\94Í\8d$º¢\14oþ¾g\86\94%{\93´}è^\8c0ÃËÌ\99s\ eé¿®fÑ:¥á£ÙÑ\f\7fçë9-×   5\9a\8a«X~\15Ó2¡tAÛ
-kf\98túà5Ñ\8c\16³8ZQ¶Zâç\ 4ÿeí0+æù·?\Å\8be\14Ó<[G\vª(I\16§QIw¼5ÍÓE\94ql\99b\8e\1fq,Y¬ynÌs\10]gÑ<\8c$:\1aW\94¦¨i\14\1d\8f\11Í$\aÙ©?Õ'þyú\94%±OUÒñ#^´N#\0²âR+\8a\939Îó#\ e\8eÇ\88Î9ç!\9aÍ\12T\98Îç²q\961p~ÄkÇã\8a²ùò4Wv^3:iÆ;\0\85t\r\14ü\88£ã1¢óø4W¢£1¢èÄb¼v4Ftµ\8a\96ãèh\f\ 4\93\94s\96,$«%ã\90,Cç\80l\12Frîh\8c\9d\ 1è|\1c\1d\8d\11M\978×ïä+\1aÆ\9c3sb\14\1d\8d\11\90Õ\10\93y
-\f.úº\9cã\8c\18\15qïÒy\ 2\11\9fÈ«âå
-\15\¬âÀÚó6\96\9eÉ@ÊG\81\vÊ\168\1dÝ^ÏøD\1ep,\ 55æ}Ì3o\88   \11út\15#\8fS,Ã\9ea\e° K\91ñ\10\e\86\88¡oȵ?O¨Æ"¼ÈþíýÕôÝ\9a\92\19Ý\17Pôb¹¢û\d\8cßl'\8b\88¾³u«¶­©wÔî5åúQ\97ö \ewMo»\1dÝê\83m$ªêü«û\8fW3ºI2l2y§UÛAï·ú¯N»Öqpú.£8ögÝ$\8c&&þ¦éQ\95\9d¦'Û5Th\9doÔö!¢\9fj*pò5\1d5|£|"[\93i©µdªCc\1f5}hÌ£ýôD8\1a\11G[[\17f×5ª5¶\8eèG{D¶Í5\1d\9c¦Ú¶:¤\18³Nq6\97Tز´G.poê\16u9ËGnUM|\8cÉ%3:\9av/\10lP\r¹îÀ\85\7fí«Z\83\e¡ª4C\83°3,,¢\1ftKw~æçå³Ð\18'Ûà,ש\92:'¸2\fa\7f$×t\15©Vò>¹«ø&,vBw\98¼ÕØcçK;MAÇa·<Å8®c£6\800änZ\9dKê2K>ú-Ñ¿\1e\9c\1e¾\9eN\9d\1c\81Dv:ªu;m\e´G7Óow\8dí\ e\7f\9aü\9b\18\7fV_\ 2õü\9bD~>϶O\85©Á^\80¢ß\94¡ZR \88-к®A\8b\8eºÜÚJs\93sã¶\9ds\f¹iP\84\ 3\8b\98\ 2\18\9foßg>ñøQ¥LÉÝ,\8d»\80­Od\ 2Ní5\ e>g4©ÒYÙ{\84\81ÂN
-\85ÖyÄ!VË3½N¢ \ 4\16Å3T\ f½þà\89Ø\88hp\I\9bÓôEPÆ\ 4E\96Oþ¬^-\13d\8a\1cv{bn`\r\85&ü?Mä\1eÆ«s\94OØ      \f£V¾Õ \ 6\8cÁ2æÎ\9eÔV©\a\r\1a\vÊ
\85Ò8ñ½r,D\14ßh\953#u\8di\9bÊ´ ¥HÙn \ 3È\9b\97¨<7¬fU^6\86µ
-aȬÖ\1e\98D¯PÃ\9fÀrªþe]¡WmóÄl\84\8f\98\ 2?íq"L\b\9aR'ûAY×\92¸ÔE\9bÆ\1eQ\0\ eB\93ª\vÓ¸\16\96VPW3&×h ôX`\95\8f\81Æ­Ýí\84Á¶(\9eOv$Òà\81>\ 1§5\19ÁA$_ê\8aت!\ 4\17ÑýËÂQ\87\83®só)\80(B\82\8ej\98Òó  LD+Ò̽.\ fEW\92©\19\±^0ø¢[|\83@»¹\ 6V;\10\80ß\8bü;ÇÔ\11÷·Ç\9a úÖVçf~b\95´\ 3¼À\94íC\98\ 3\8f°4\94~q4{\1f\ 3\81\96\9dÝ\ f|§(Pî\92Ïè\11÷Ñ'Å\14äYp|0À¡\86kÚîU½\85\17±s     \1fxROm¡sÁv!\8c(Ì'\90Ú\88kQ¥UÝ\9aJG\84+ïh»²¿0{ÃE\e\1a½58\8f»ÈðÀ\16Ë\9cZ\96\12\9f«QìyO\ 6ât\87]£p]\ 1\8eÏ\13?_t\923ý1\ 1QqOú\1cC±ßýzG®V\a··í\1f_q)\17¨\ 6=HÓ\84ÿ\9b\8e¥\b\90ñ\8fñkpí\9b\ 6Å\83\15\18\84WÂk\1e\9a²\87Ê[\81~ÖG
\87\97Íô÷@\9fÑ\9d\11T\8e+\e.\ 3¾Õاðï\10\8c!IÀÒ°4\ eÖÁì%·ð\98¨tÍ\ 5\f.\eÖ]ÔÍe1\e\82ÿ¾r3ÿÓí)×eº`§ýòü&}¡S¯a\97\9dî\9f7¹Tú^*}#²s7·\9eêp,ÑÂË\98\ 6Ósp\83ÓK\8c\81TØU¸îJ\ 3¯\0%=R×àvm·\8c\9d©Ô\ eª\90YG¾\7%$ªsïLªÆû­G\9fõ(9\8c|LÔÈ>\10ÈË LßáÑ-ÏÅI®\vÕ\95\8dÄ\a\87Û±0%\vdh\9e\9f\86\ 6\87×$´Ç²5®"dŲ\7f±s£\9cB\v\8fÇctðOÍ\b¯ iØ|úR\9fè=k :8\0\91kÑñÑà®çç\ 5\15\86­\816Ö>TªyÀCÄl÷x\".2gÕóû\17;\0D9bx\8d\14\r\8c\91¡lQ*PÌý\rÃï_Q0ìã\ 6X`+\98\ 5Ûñ\17a\83þÝ\ 5a¡eþù\9c\93\87ñ?`ì|¢v\8b\a«\Êò¤ÄM\ 1ÓQ\8fxwá\91\89Æã±\9d3kÄ\1dú\16È\ 5ä.+\92Â7X\r\1au°UY\87ìϱ\1d,Î|ܸ£ºé§\9fO\eL\8dß~bÀCV\82\1d?\9f\9dyäp\95\88l^Ú\e\ f\rls\1e\1d\12\84¹|Äzéýù\9cSvAÈ«á«\10¾ññ\17¯ÿú}«÷ÈÞ7ESÙ2\8b\96\8b\15¾ÍaÃ$æ\1c¾¿¿úåêo´+\ f!endstream
+571 0 obj<</Type/Page/Parent 536 0 R/Contents 572 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R/Fb 8 0 R>>/XObject<<>>>>/Annots 380 0 R>>endobj
+572 0 obj<</Filter/FlateDecode/Length 2758      >>stream
+x\ 1\85XmsÛÆ\11þ®_±U>\98\9e!!\81o"]O2®#×êÔ¶bÑU\9bÑLæ\b\1cH\84\0\ eÁ\ 1¢\90Nÿ{\9fÝÃA¢,ÙñD¢\bÜݾ<ûì³÷ÇÑi°\9cÐý\8fjC§ø7[Îèl9¦JSr\14ÊW!\9d\8di2§(Ç\9aS¼Ôÿà5Á)ÍÃi0¥éâ\f\9fÇø_Öò\83Ùt\12L\9ez0\9d\85xüÄ\8a   6\99?ñàá©\9fÿ~\14ΧAH\93i\18\8c)§p1\ e\16Ý_\19]ÁÊÅ\ 2\86ù\1f\9d\95ãùYoÌd\1a,{3\1fîíß\9d\84ÁÙ\13fPxv\8a#\9f0|±\ff\8f¿ÿÛêèäÝ\82\16´J\10Èùò\94V±D\ f\1f¢Á\ackZWfoue©)büªU\11Ó»Õ%)K{\9deüûýju\19ÐEB­i(2E¡£\9ajC\8alZë!íÓz\8b?¾|þ'eéN¿\ý\8eS\95;u@I]¾:9ÁÏ@ß©¼Ìt\10\99ܽÓY6\18òÎ\957\85RK¹Ú¥Å\86ß:¥Ñ\12       YÅ\ 3U\88a\9d\ 1©)\86ÄÆ\16¦Æál£·\r\8f\ 2º2´ß¦\99>Ü:W-ÙR«\1do5¤Ë*½5w-ÅF[ÞÈí\18©\827-+~d\9bhKu¥\92$\8d\82Πp\89\14À¢\95Á\91p)\8dT­as]#\82C²&×d[[ë\9c=ii«n5lÜèBWiDDzó1Y]×ð\12\ 1ܦ8d\9f\16&\17\92.Ô:{\1c˵©·\87¡s\8eû¤ÉÆØò/ì~Z#\92\87!,\8dµ)¶\95ìEQ\1aã,\95õ§I|ý\1e\94\16ToµÕ\14)«m@o\10l\93À㦲Èz\9aà1RµUe©\v¸í\83)~¤@\93\8e±´Á\ 6Ø\12\87"\186-"\rÃ\ e­òѧ]aölÃã8_sdüöúVW]n\18§]j~¢/\ 5\83/k\ 3Zm5\bà÷\ 6è\86}\9cÊ\9c\93Xie=hà\18íMµã@\0k\bȽ+\82?\83\1dê- \87(
+h´ÎŬ\93wK\12@rE\8dÆ\÷@Â,\98£B
+ú "útõï!]ÀõâEÍ\90LÒM\83Ý>¤Qe¬Ij¼\a\9c\14º¦ó»2ÃA\15[Áqò.¢æØ@Á´¤£;¹¯ä\11\108\13\b~k×\9b\ 1R\88hY\14\84\95Ò¤Y\10Þ¼D$P\ 3Q\8d|\bHG{\0\81`\90D¤C%\12\ e\7fL\ 5R`ó"ÄbÃ!yhÖ\90\fR\7f\98Ì+Ù\12®è\ 4Y@º\81\f\86g\84\91\11LÑÇî¬\14á\91sx_\7f0\95ª\90àsôr\14fS\ e\ f\97_¢2S<¨Õ: óÂrxy\87ãk½ÆÉ(ÛC\9bn\ 6\1cÊ\9b\97ÇpCG»µ¹ã\1cËg`\94­C\1dè\8a\17= ®p\8cv\82\7f¡ûÞ\93UW\17¼¤j)Iu\16³\11_¯_\84áâé¥\97¦ªýÊ\15ì.ô\1d\b5\ 5k0Ã\82\83ñøâ\1c%V\93Ý\9a&\8b\ fÝAh3¡`©Î[\955(OwÒÓØ<{\8c͸R\9b\r\ç yÐ%&ërÍߢ¬ì\96\11Ð\14i\ 1ÓP\89i\1dÐGT*¿\97\ 3!h\15à:M\17\9d©aØ\ 146\\ 6Â\80¶a\12M\118Ôoz\v¦Ûp\12\r鼬[ÙN\8e}\1eíÿà\9a\16ãArß·Þ\15¿.L³\ 1\87\e\8au¦AÔl¿÷Ú6%ø\ef Ô{\ f¹Cå\f\8b\84\e\bh\0Ù\ 1I\02
+H\ 3\aÂs+Ü|ß\9db]«4CÕ|BIÜû2\14såïg¶7MÝmÙ\ 5\9d\ f\8eM\ 3Æ\1cõEÃ&ÿ\aØ\10n]\v£"fÈ`b*Ç1\15Ú\ fê\9cÑ|\88\16Î\92\8aó´H-¢+ï\94ÊZÔz,\81\86\v}?ë\13/\94W3í2»«\8a\92\86?'@9|áâq\11ú«Ë\9dÏ\86CMR\99\<\8eµÝÕ¦ì@ì\88\16\98î¶tYW\e\95\16ßDïâ!zéR\15ð¨¢\9bAx\1aLn^¢JrÅ8\ 2³"ð   \92À©Î\8c\92Ê>A|.Hß\95è¼ÌFT!@0\ fPP­e\80\97\18´¼\1a>áà\179\98\19\1f]y­=õ\ fp@¤²-\14\94\17Þ\80\15SÞz1óÂz\1dá\9aýóؾִÖ\80\82D\18A\8e\e|\86Î*èâòv>ª`3ç|ÝlØpé3k Ç\95\18g¨}¨â8ñ©µØ£Õ\80\ fØ\\15­4sÐ)Ó¹Ï\9a´\18O¿8ÐyÔ     ¸{\84\87P:\88¶I\ e\16~\15¢\9e@¹Í à*\ 3É)8\81\ 1¬\ f¾\89\82%<\80\82b­'\9a\v\85\f\99*v\92BB\91\1aô\r\96¤\ 1\1dÿ+Õ{\88 ¦\8a4\84Ö\16\1a\17O³ö\15½ÞÖyöãëµ\89Û\1f_\9ft¿ä»¾\1a<u]C×ruz®à\802Z\ 4\\96©O?\9fη\880\9a\1fÜô\f\82Õl\1c\14e\82Ö\88õ\&Êgóò=ô¨\13\82hÏM\86î\8c\1c»\1aáC-ÐÁ      ³L\9f¢½ Ì\0\17ü\ 5t£¹¦¬\1a\a\9a\ 1Öª\82\93q\9f¼¦à¨ag\v\0ñ~C'\b¼o¬ÁX9\ 1u\f¯-@¼Ö\Oé\1d\16À\12ØGÓ`\1cLú0Ý\8b`n\ 2Ä\91ò\9a\10»`I¢xN`·%\ f\9eåºl\ fAw-\98\89\vͽÅÁa¸?\82Ñ\bfßÂÏ\91÷\04ç^é\11\ e\99üp¨{rÚM\1fPUU\03¾ZòÊ¿7Ç\98\85é(\f¦\93±cÂå\92\15\1d\11ý\09\ai¨ï"]ò\ eH\19Ø\ 4¤8Zknh±äӾ«ßÿ\8fÏC:D-âí\1f¾¿âûo<Úó¿OEê\7fßßæà\8dG{Ò³SÛ¨\vÙ\184<\97\ 1\r\13¢ôJ©o\99éD:«Ìb\16\ 3msr+]²ø\91RrUÏß
+H\90~°å^¯s\ 5BáA\8aUE\87\ e4\14§\91ÿÌÒu\0¬\95MýÛ\ 3@ õ\ f\1eøfýÛæOÔb\9c¡i\0\1f8*­\ 4ÍhC2¹Ifo\ 6lµã$(dä¹)7\95\82.ƹ=öù{æ`n?¨\8c\9b\97]ý÷ì\8fsïG\ 24(ºÞ\ 2ã¹£.\1eöPð³Ó   \9dW\15¶º\19\_½9\7fûéãÇÏçï¾\\9dÿÌ'£è¡Ù[)Ò\9f\1cJ\9fÒýý\80â¦\1eøÅE\87Â÷Ó\96\eË9²½²¯U´\vèWÐä\9bLUù}\95»¬\0ÐpÖ\8d\9dm!2@R£\11Û\84òJd\9aª\9a\ 2Zpã\89 \eÏWRèYã
+Ñé:\10(b\85\ 1hëRþë\e'V0\10\89\12Á\0\81@÷²·Ì\8d\f\ 4\ 4\89\1a\16!|k´Qlé\v\10      MÁve¦"°þ'>®\ 3pgU\92VzÏ¢µnK\91MqÃ\83\ fë\eç¨Mó\14Áè\9f»Aµó´\9fÞ0¿\98ª\ 2Ë`¾t9y&åa@\1fZ4\88\r\86+t\1d\1c\84\9e{üE\86y\8e.w0¨\ 3³/\88ÅC¡rô'\80\9cÙ\17Xy>á\9e¨kè\18      .ï\ 4\7fûm<½º\99NÂÒ%\8a1Õk²\v\íÄ17\82Ç\vx\84\ 1e³>f ­]{6\fu/è\9cë\9e\]t\1e\ füW·\17\19\14¨.FÝñ\aë\ 6^~ ¤ø¦\89\1dë\1céncD¨ó\90 ½\ 5Dìôîýµ\83Ä\\1eî8e\18z\84öú¶-qU\ 3\99\ 4já}ö<[\ 1K\fJ\8b\19¸B\ 5àRËM°>÷N2k.X\98Ö_)(´7LC$\ f\84$º»$d\9d\vx\88>ê®\ e\;gîQî"Âfxå\11NñR   #0Pq¬}²;\ 1øóÇ+\19\ fA{ß\1eôÂ1£\bUs!Í\15\14:ÿÖoÈ÷\12¢¡@2Â@\18¯-+\9acae\9eX\85C2Ü\95Ä-\9b\8c\ 6z\f\ 4 L»Bá´\81åúù\8eç\b\14&çíÛøeÚ÷\a\81îc\9d(\88\1dZ½½¤c\a\10ìvLl\ fô\88O\98Ë\97·Öå-×\10Æn8\93\v\1f&¿Îp\16\822­²âǼÖ\9d×ÙÞ!´«\ eÇ5<x³T\83VhäF\fâ\84ù\ 6!tó8p¡\19X~/.*A)*X¬õêMF4¾tâ\86\12Ð{\90\0Ot{4\ 2\ 1].lènÍ\ e\rºURÛ\82\00ZÍ g\ 3üg\a)¶´à»5<\91+\fwÃÙ\rçý\10èÌ\1e5%÷\83HǸ#ñØYP\18\8aæ\99M\83ÅlNó\ 5î²\17SV=\1exïDHÊEä\e»Ãa¿°¬äNÉ&\8fÂnåèìTÄÒ\f©\82\9c\aw\82ô\f÷9~mz6\rÎæ¸\bç\9dÃ\19\7fu¾:úåèÿ±5\85\fendstream
 endobj
 endobj
-539 0 obj<</Type/Page/Parent 490 0 R/Contents 540 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 383 0 R>>endobj
-540 0 obj<</Filter/FlateDecode/Length 472       >>stream
-x\ 1]RÁ\8e\9b0\10½ó\15Ó[*%\ 6\13\ 2d¥ªêV¥Çv³\zª¨\19\82·\ efmC\9a¿ï\fJ´MA\8cÅðæ½\997¼F\89Øoá-¸#$tïö;(ö)8\84.\92KJB\91Â6\a\9a\84@\1c$\87Ã×(Í
-\91@\9eæ\14O\90\90×7\ 3Ïÿà\97"Ö`´ÌE
-YÉ\95)=\8bÖc\1dÅÕ\1ed\ 1uG²y)¡n\17­\ 4jµÊÅNÀ·Ð£{_¿\102\ 3I\0FnÒBä\84]UÖA3\À2
-´÷\13ú5t\88\ 6:\87\bÁÂäéè\11N\8d6z8\82Ñ>x\ 15ª~Ъ1æ\ 2z\bèÐ\al\19í<Q¶0¢\1d\r¹·pÖ¾'*î\82´å\96&!me\87àô¯),2,1:û\82*@CÓ5ÆS!\1aeO\bvXZhqFcGVà.ÞÁ\ f;\81j\ 6è4        Òigt³Æ3Ø\8e\bÌ\7f\82ß\9d\9eí\9fËÆ¡i¸×»\89Ö4\852S{\e\91\9a\9eÙ\8e&<,L÷\8b¤Å¬ \ fa|\88co'§°³î\88\103süñèì4þÔí\aIWyOqÛíJp>®Êënä.\13å.\87r±èÚ1T\ e_'\1c\ 2yýÉÿ¦Ö\9fhOAÛÁsõæV´)\92=;\9b\vøLæ6*ð4ìì\9bskx\9c\8epÀѺå+¯ªÂ&Läù\81Uh»L\9a\15\99\92~\16"LSN}©£§è/FÊáõendstream
+573 0 obj<</Type/Page/Parent 536 0 R/Contents 574 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 385 0 R>>endobj
+574 0 obj<</Filter/FlateDecode/Length 1590      >>stream
+x\ 1µWÛn\e7\10}÷W\fôR\19\906º_\9e\8a&\88Û\145\9cÔ*\82\ 2z¡v)\89ñ.¹!¹\96Õ¯ï\19\92º:     úRÄ\11$-\87s9gÎ\8c¾Þô²ù\90N/vC=ü\eÏÇ4\9d\ fÈJZßôÃW}\9a\ eh8¡¼\82M\ f\87\8e/l\93õh2ïg\ 3\1aͦx?Àÿ`{:\15ÞýùëÍp:Íú4\19M²)U4\1a\8c³IúTÒ#_M\93Á\1cÏ®.êOÇør\8c×    Ì\ 6\83\11.\89\9f\ efãÉì\9bþi\88ÀF×÷±£a¯\8f\1c½]ܼ¹\9bÓ\1c~\16kd>\99\19-\8a\90p\8f\16y{\9cõ\87\19}\14\eéh§ü\96þZÜug´6Ú;\12H{#ìª\94Ev»ø\82»f\ 4s¾©Û\9f\ 1®j/¶Ê\11þrÑ8YÐjO~+©UÈÊX£Õ?Ò¶h­J/m\87v[\95oi'` ½5E\93ÃBiz\96Ö)£i\98õ²A\87\84.Ò!Q×ÖÔV    /K\ÜX\r\ 3\1c\84\97B®ESú\8cþ6\r\a\87\98B\9eEÛmMS\16$\91\8e´ÔÔ\e+
+I\1f­z6/û\ e\19KÂS)\85óÇ\87Þ\84¨+\83ï¬Ì¥ö\14\13îÅ\84Û\ao"÷\bô¢\18mNO\92x\16ª\14¨\15­­©èÑ46\97wÆndF\ f\96ö¦A\89\82åY¤ªª\91W¡\0äÂ\9dÕ-\95-\95þ\fÆî`\10`dôF\19}Þî\ 3T+¥\85Ý\87h\1c-Û®A­¹Ô\15£»¼¥ÜXÛÔ\1e\15Üm¥>\14\84±cä~¾Hê\15Â\95\80\93Ò\19ZÉÿ\ 45PÍ\8dþÒèP°È-A;¹"'-ðF½\81\ 2|WÊYY\eë\95Þ\90\88µôû\1aU{{\9e\ f¸x\89²|\91UH&\94;¡û\93KEãË\96íF\97Ò¹\0í\99g\90\aN½x\92äÄ>>\ e\10"\1aAu)\10»\97/>IJ¼Íèý÷\99´\ 1q\ 2w.\83û\9f\88\14\ e\13ÆÌ\84XÓ×\1d\18Z
+<A\8aÊsA¬ü\11à\12]¢6¨\7fyAHî\A\1f¥-ÉåVÕ|\13<æh&n̦¦ß\16÷\7fP\1då$6;<Qn%:\18¼c\85É¥õ\â{\95[ãÌÚ\13z\1cRà]F÷\8f´\85\ fæãeA£\f\ 4\a4R³^\0:C\0R\17Â\16P\9a\16I\9d\9b\ 2\ 4à&øðø@³ÙxÞí/o\ fúÃ\1e\92ZáZtl\ 5Ö@\15bØ!#V¾g%w)æËX´ÑÝ×ÁÃ\19\17\99-åK-A{P\90ã\93Ð\86c\94øèɬ£À2·\16W=ÏM
+c8\ 6H\ ewYk¬#4\1e\83\1a\8c\ 6â\ 1Êîa\90LË=\ 4=\8a\1d­p\9bá,B\93x\96ê\b\ç¨ÀǶ\83BÓJ°\86C`ÙÙ·(p¨!·\bÔ\18>Yj\93çËÀ.âOW®\11\:\85\ 1\12æÇÛ\86Yļtp\f5ÔR\16\b\ 2\1e\9c©Ð¢Ê7\82E×¥Á Ê2ÂÇJ¢Lã\98?\11Å\83\8d\81o{fyíóÃ:è1cÕ8.Àk8;áDaH\e\1fBBßd\94\f9DÆ\96)r`;S;\ eÏ|+,æ\ 4\99
+¿Û[\ 4®r\1e?ï¶J\ 3[0òUÅ4·çî\94bÒl\1e\8e`\r£\12Fs,\85ß6\8eoxs'Ò\98¢4û8h\bõõ¤º®ÃC\ 2:\94k\vú\82\16±4è@dþ-\9eG×<ÎL\9e\vnCQ2jÆ«\"tiÁ\87S\ 5\10x m¬g¥6[ä'0_Y6Ñ̨ê\15!ÂB\117\86ëU!èÇŲÀU9Nö rhnø<-\bL¤ÐÓÉ\ e \86¹cÖk~\84àÉ5+'¿6<õÓ!F.\ e\8f+\84Î7\10F\ 3u²hã\88Âw\84y\12G4¸ô\81\9e¤¬Y\12\98\14øg¥\v³{¨¥^¶\97·-\8eÊ\8a\1dØÏ\e\ 4z«ø\81T\1f\1a\1dÍ#¼ç\89\98dç°ST\ 2¤\v]ò;6\94¤Ú¡$0\ 1~\12\1dÍÔE2WTj´3l\v-êÖ¦nêĵ´\ 3\86µ\a$?\89\rÖ\eæ\1d\92ë¸Ç´Ç»ÖÆ\98¢uYFÎ\89\9cVu-±f\ 6mj­DÑ
\1e\1f\\13#5\1f\vj\14\f\1dÇM,Ô¡%¢HòNŲ\18·Z\ 3\8d9\88D\87SeJDÉáè¢i©\9e\f¢\83\98\80L`aªg\\84O\eÜuLج *èáPÝ(.Ø)¢@uÀ´¸\93        \ 2âº4XL\v~\8a\15µ:\a\1e)RnµÔÖ<<\84Æ|É%\80\ 6Íylq&\97å\85d²z\87Æ\8b.C\ 30_±wË\8dU~\7f\90\13nN\9e\14³\ 2º\15z'l¤a4\0ÂØ\8cø\94x>£~\9f\7f\ 6ôÇ£l6\9eàGÉ<\eñï\8aö\81\8ew6ö\13êù\8b{B\8e\9f\1aé\82\88s¤Ý\83awÚ\9b³\19V\97\855\rD\1c\89BHô\86\8f\8d¦£l:\99á×\ 6\8eô'üÕûÅͧ\9b\7f\ 1\8c\89|¬endstream
 endobj
 endobj
-541 0 obj<</Type/Page/Parent 490 0 R/Contents 542 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 5 0 R/F6 7 0 R/F8 8 0 R/F9 9 0 R>>/XObject<<>>>>/Annots 406 0 R>>endobj
-542 0 obj<</Filter/FlateDecode/Length 1881      >>stream
-x\ 1¥Xk\8f\9bÈ\12ý>¿¢´\9f\1cÉÃððS¹ººNn\9cÌ*\9b8cf£HùÒ\86Æî;@³<ÆË¿¿§\1a\f\98$«¬VÑ 7UÝ]uêÔ\83üqc[k\8fúG~$\eÿæë9-×.å\92¢\eǼrhé\92·  Á\1e\eJüpøñðöÆu\1dkN\8bÙÊZQ\ 2­\85µlW1í\aúf\13ßaá\8eù\1aÚ³Õ\12¿]ü5w-gÖ\8cf6¿HȵínÅ\a\r×\90zkËmu\8d\86tiÃ\88æ$#\1d¬a¢Í×öR6Ès<~72È\9b[\vr\17¶ñÌYºÝ\8a\ f\1d®q¥Ë\a4º,õ\80G¿wf{\967\90\ e×    Í\80\86;\90²\81KrÖ³\ 6Ñ\19\90nW|ò\fÒE'\9d-\ìmtYÊÎ8+\a\1a    Í=\16\99\ 5\8b\80ï\84îzÑ©²Ô\81ï\1e\16\1ckVfï`\rg\17½®\91\ eÖ\8c>»Ó\9cÔÜÛ¯!]Ï\11×\81t°Fl¼\85å\f¤s\aFÁE¦\96c;L-^\18\83g\8cÃlm\u\16\f·Y\18Y¿Ä\8dö\ 2öt²WþÍÝv\8d·äG`÷b¹"?4\94Æ\9b`²´h\97«gýgM¯uVçêx*§ô^\ 52-$\894¤wª(u^¿ðÿ\87\83à\8aÓ\1ctë®p\8d\1fNºmôÕ\9d;LdgÊO\97\ euwö\7få³\8cu&ó\82\9a\83\106sÐä_¼6Éb\1e\906\93°Ûñ\9f¬1ÐÒùñZÙì`å\7f\7f\ 2°Ãº½N$\15ºÊ\ 3I\81\ e\82\ e¢\90!é´y1²ßY¯\97lù&Õi\9dèª\0.!ÛÍXüZ¥O\87ª(±\9eÒ}\1aXüÖØD·H)\83GÜ`\17R\95b\1f\95\18\a\127\1eÓÛ\ f\8fôV¦2\171íª\ 36\\0¿vcbµG»­3;\9d\97\ 5é\bçÂ\93P\aU"Ó\92\ 4JÊ/\a\9dçú,Ã_(ÊuÂ7\93F@U\8a{zËéë¤L¾¾ íæÓÔ8\95èPE
-\88\b8\99\ 6Þ¢4VÛ½[\91Î/Ñ4f1©\9c\ 5\8fK\19Ð^Z\8eõ}_p\92Ë\ 4\86Ò\85o°?Ê%G'*Ïpà%Õº¢@¤¨\8f!H\97«CU"`ð.\rïp½1´æ\17\1d´\84P$-\1e?\81ó(T-ÍG¨Oé\19ñ\ 5Îä\ 2 \822\ eQq\ 2\ 5\83ºe«÷­Õ´Õ°Fp\Æáò9DÀó\98\8b\84y×;\15\92JÍQ'ä\ 4~\88\92½:«8¦\83¤ª\90Q\15O    îÓç{ÿÝÇG\9f6\1f¾ÐçÍÃÃæ\83ÿå%4Ë\93®Ê\91\98æT\95d1\a\14¨æ"-kæËoo\1e^¿ÃîÍ«û÷÷þ\170\83¶÷þ\877û=m?>Ð\86v\9b\aÿþõãûÍ\ 3í\1e\1fv\1f÷o,ÚË1\rþ        \9d\899\94hP5\94¥P1rè|RÁ\89±\11Ïx!\ e1ºð\85»?\82ÙdÞtäû|M¾\84Û\92v±@®ßÒ¾R`\8fçÙSz¥QÂÒ)ý¶!Ûu\1c\a¹j/§ô¸ß\8c\ 5\f,\0m\1cÒI<K01\90ê\99s\ 3Å"3@¶\b|[²î¶?\9bâýÞK\ 5ë+ë\84D¬Ó£       1\98Ñ3è%©\88R\8dê|ÎÙ³R\8f ¸\18\86LkëÅ5SGê\ 3ⶵì/0\1cïý.¢c%àÛVûï\96
-×úqoiKÅ}Ãç\83D\11KUz\9c\80?g¤åÅÝë    \8d»\ 1*3ÊB*ËAÕ3¶uª\17Ø'H²ï\97úký®+\rNäÆ\90g:7©\7f­Þ\1doÑý8I\vÐ*¤D¤5ç9÷\15\8a\19\9a   \14\85¶.H\91Ç5\85¢6µí,\ f$BT¥R\15@ÁTmÞLe.\82\19Óø\15*\að!l\9c¢²\98*Tê@ÇM\e+JTT\91\87H@îj\M eÀEA\rN©ú£\92¨ÎHWü\ 5|eck©\91\ 6i\81\9e\ 3{°û\88Ü *\e\ 5^TÈ6\9d [`2Û¡r: 3±íÍ\8d|r\91Õ|0Ê,4\92)=ɬ$ù¬ãgv\88\1eS(\95U\8aN\14×\8di?
-kߤB\15r\8aXôû¥\82\85\97\8b\ e¿B\12\81B_'ì¾*Ð\r\19­X\14\1c\88H\ 5JÄ×\11í        \90ËXb~¸\16w\ 1\1fÕ±k­þ\90¾\e\17#ì~\86SÛ!0è\e'\81Ö$Qû[Û\ 6£\aÏ\1a?2âíîýµ¨óâR\97E\1có<AQ\95\ 3\9f\1ceÛLqfâ8\98\89p0 hV)ÆLÜkÚ\972BSÿ,â\10\1a\b|)òÒä\80\ 68¯AÃkSz¨ÐËrð(ì\9a²\99}ú©ázßÀ\ 5pµé.Ü\16Ë
-¾Ôȵ´J\ eðDGf_Ï\9cLjn\1e`w;w\84ÈÇ28É\82s\18ï¹%\888\97\81sf\9aÌA¤\98â\8a&\81\ 4gcZd\98d0\90©D\1ceCv\ e\8f Hå`W;Y\8c.çä×Ùm\95Ñ\13F\0\93%Üûy$\0K\8b\92ç\ 2ì¬)\88u\81tè'X¦íeÆCÔ8\91á¨IùX%ª4Å \89ZTh³MÑ\ 4Í\83§o\ 1xçû»;\a_#E\95¡ª¡\1aD±üSqGÆØ~[pË\ 1:\91:VMÉ\9bò\bÁx±»Í\f\194c\10ù\97dj yééhf2â´\1eùÏ^¶Èð÷±åÞ:èÚWI\8b\ f
-{Ì-\\83¦^`¿&AO\9eþ#âZ££   e*x\ 2¹\0=CY\9e8ÀMØ.4-«ÜP\94å\97Q\15eºPø\98À\f6Å^ó;ÔgX\83\822r\ eû83EQÈ\ 4h¢Þ`\8f\bC¦=·\81kËzÛSy¦H
-\/\9b"ñm÷jG\ 5¶ì,j\ 3ÏÝvÕ\7f¢Íífâþ[\1fy3ü¿Är±Â·"fu×cóÞø7\9f\ f\94«ò\97endstream
+575 0 obj<</Type/Page/Parent 536 0 R/Contents 576 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 416 0 R>>endobj
+576 0 obj<</Filter/FlateDecode/Length 1914      >>stream
+x\ 1¥\8fÛ6\12ý¾\7fÅôK±\ 5¼Zë\87e;@pH\82Û¶_Ú^²¸â\80\ 2\aZ¢lf%Q\15¥uö¿ï\9b!-Ë\ e\9a\ 5îÒtã19ä\9b7o\86³\7fÞ,£mJç\1fý\9e\96øoµ]Ñz\9bP¯©º\89å«\98Ö       ¥9\15\r|\96Ø4ý`\9fhIy¶\8a6\94mÖø\9cà\7fñ=ï\92O\1f\7f¼Y¯¢\98òå&Ê©¡x\99±§X5}º\99ÛXMòh=_\9dÙXMW8cæ;³±ºÉ¦{øä$ßLv\ 3\94\9dù&ñ&JiµÙF\19P%Ù\12{½%¾3\e«ù\1a÷ÎVg6V×Û\8bUffµa>®\98\8971 ¬²\f¤\ 1Ðr\89P½ÅWf«\8cW\13\ e\91áʪX¼*\87Æ9\ eE üÏJ~òR\8aH2ʶ¹\1c\9bf̳·duf7\94®¶¸ô¼:%0Á¹¸r%\98\13\99\89\89ã   kg\13x\96   \1f:-Îm¬&\97ÇÎm¬fÛ@\94?8]ó=ÀÌ\14!\81Û`0 \99ÙÐzÍÒ\93\8d¼63\eÚÆ\80y^\9b\99¸0N8ÊÉqn3\1c\ 1;­2íY\16\87Ø/UNé6ÃQ\10\0R\91\a\8b±°S
+6bádæ\94ä\       )îHá\96¢.6Á\9aÜ\96,\11DÎòIÅà¥\18¡¯\83\r\90\9b\15â\9b­ÎlF\93ð±\93o\82"É&ß$\8f§\93øä¹\r_(ôtÏ      R"Q^I\99CLR®/ÀY±*¼59¥,ß+§÷\8f\ f[T1ð=Vh19Wì:§ÇRzË\92\1e\8bÛ<¢\ f\1dT1\98vOÃAS©\9fum;Ý»\ 5½\1f÷ôQw¶\97\96ô Õ0¢ñ|Ô\7f\8eÚ\rî\87ÇϸeCá\8a;¨/ÍW¸âöwMϪ\1e5½Ø±§Jër§\8a§\88~n©Âu\v:jt°ú\85lKf Á\92iºÞ>kú­7ÏöË\vñ}fpTض2û±W\83±mD?Ù# ö\vêj­\9c¦Ö\ eZ\90W¶®í\91ã8\98v\0|gq        #\Ò\1d7\r *TK|\8b)\ 5\18\1dÍp\10ç\1d¢!7v\1cì\e\1f\15¸\8b¡8áî.É"´g\9c\90GqD?ê\81>ùÍ×\fÄÛh»Ìxç\83í©PnT5\8dNød&Â\1dTÙ~lHá\1c|[hlÞk2\8eÑíÔ\ e¼\ 4DfÐå\e:\fC÷æþÞÉ^¸îuÔêá~èÁ©îïÿ±ïíØý×\94ocüÙ|\ fªÊ·\89|\ eñ\ 3\96À\7fW\a\90F[\81ݱ\a\8bG]\17\ 1\91\96\8aÑ9¦Åô\80ä\90\12«C\ 2¡F\99\9a\8dãD\1e4\8eºÔ\ e©\1aì\1f\146)@kËèÛ\9c&Q\10\1akî+U\9d9ýÍç¼\17\92\9avÓ~åUx\v¬õËEZn\81\ e\aâ\fÀ\83\ 2qÿ\e±Ì+^\81+fßkä\ 5õc\99\19g'}6êI#ëB\11ÒÍ<1\82\83r,]ÄÐkUrºu\8bm»Æ\fȸ\88ßî \e\14\ 4»¨²4¬\7f\88IÔÍÊáï\aÛq\16ù£w\ e¨\82Þ\ 1©¹\ 6\1a8\1cú\17Î6JÉTøtÀ\81¨C(PM\15\b\9c\vA"@i×Û#\10\11tí K £2½\e\15\8d-\a¹\0µ|î~/
+±Uu:Í\9fä4Tîñ²ÒkÝ\\ 2æÆ\ 3\88\1e9ê®Ómi¾\9cBdùA}-×TP\98£\83®»j¬É´\1c­t  \96+÷4üSjD±GN\ 4$\9a\91\b\7ft\9c%iMöØ\12ô>Ø+$\17mgʦDÇd\ f¶x
+­      ¥béëÀ\98Ë\8bC¸ß)$÷:! \8f      ö\988\93¼\ví\b©q\baA\ 5
+©@\11rÉJ¢xÓID"\9c\8akLRU\99/\90\8fñåÚhÕ\ e¦Ñ\11¡\1d\1fíXcO×õº0¸\81óÀ| \ 3àû\ 12½L\ 5_ÂÎ\1cÝØí{\85\9e\89\8f_\ 3¤?n!     4e\7fi@ÿáß\9fȵªs\a;üñ\83`\vZ\13ÚE[»\91U\f\9eð\97)èñ¬\98\1eø\91I\18áåy¥w¤Ü;ä9¢_ôñôD}£\89ü'\88`Öó|í\10\9e\ 5\94%TÓâ Ê¿u°!yDÝsoî¬\83ð\ 4_x¯\1aÝr\10çþ\12ü$\18Ncè5¨ØK~_ëéÒÄÓ\9c{Í÷\97ýý\15B²©\99¾+\ 5ý¯\82þ\9d\14\84»ûèU\88º\94úû\ 6Q¡S8Ôàô\82KiáXÑ¡«\r*\14âñá/ »Ö\16L\88\1e\8a\95]G~\1fv5
+F\97¾\v¨\16ïþ\89Rn\ 2Î×\ 6\17¥\97\18Suÿ°\9c\ 6\8bÐÏJ]©±\1e"_Ü~S\98>n©25×Ç9\13~\17²\15¦\ fj4\97\92q\r\ 1\r\97"·Ñ\90\87ãñ\18u~ô\88ðÀÞ\açû\88~e]C¡\1dBZHÉ\1c\r^\1en@\97\19­\f\17!í¬}jTÿ\84\97Ñ\14\aÌ\18ØÌå%®<\ 5á8¦¤ê-&\0P1\02X(}[å¹G\8a       \85z\87\98à\8cJäÞö]¸îô\98Cî Ü\8fM%]Pvû*SÎ\ 3³\ 5f\14yXdæ@wE\99«g¼ð\98B\906\8cX%ç\\8aöD¤tg\9e\1a\18Ý\ eû\91ö\11-Jv\ 2í%-æóÎ\1dÕÝi\93\8c\rÒ\ fÎ×\b\15ü8K¨È£CCõ\r\1c¯\e/ ö>ã\eIÂ+ú_!eÌ°'ä<\9c\9eÇ\88\a\94ôY\83~ÄY°Lj$\ 5/\14w<\84Ç`æ³\ e¿JPPk
+L\1e/\10û\804:\96\91\9f\8b8s\9d\18L\91z\f\9fÆa¸´ü\b\f½A¯\9búç)\184ôKªäQ;õ%°Î\bÎ\13¹0÷\1dqÿâAÖË­%\fÍý³AÇ\ 2U<\12\85\ 1ú.<7\97!p\8d\16õXr©ñü\86G¥8\98g\8dyYùÉ÷<-ÿM\87bJ®GÎ\90\92\rfæÓÄ\9câwÍ-,\9e\99ÿÿß2²5&ð|\83ßcp`¼fÚþùxó¯\9b¿\0bN+vendstream
 endobj
 endobj
-543 0 obj<</Type/Page/Parent 490 0 R/Contents 544 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F4 5 0 R/F8 8 0 R>>/XObject<<>>>>>>endobj
-544 0 obj<</Filter/FlateDecode/Length 245       >>stream
-x\ 1E\8fÍNÃ0\10\84ï~\8a9\16)u\1dçÇɱ "\ e\1c¨ä\17\b\8d\93\18BBm\aÈÛ³©\1aÐZ{\18Ï·³{a\82\97  þ\9bë ¨²2\83*%\9cAËâ«\14CI$9Î\1fì^\13&È÷×\b;T)â\18º%w^(èæú/ Ï;Ý\e\1aåç!`j\11zëAïÅÙ¯ég\89ðÝO\9e\82¬ó\ 1>Ô¯Ãê\1eLíM\84\84\v2Ô~S\1a\1cçnö!\82\14Bò;ýÆ\ eUqK\8e³\94\17Y\ e))~w\9b\8fÊ\99ËlÆ0,8úwÓà4\e\1fì4ú\95ÞoÐ^\89\14ß6ÃÃô¹8Ûõ\94ölÏf¤-ë±Á\93õarËJ§*å*/èf"eºJ\8f\9a\9dØ/\97é`\8cendstream
+577 0 obj<</Type/Page/Parent 536 0 R/Contents 578 0 R/MediaBox[0 0 595 792]/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F8 5 0 R/F9 6 0 R/Fa 7 0 R>>/XObject<<>>>>/Annots 437 0 R>>endobj
+578 0 obj<</Filter/FlateDecode/Length 1808      >>stream
+x\ 1¥WÛnÛF\10}÷W\fúä\ 2\12Ã\8bDJHQTIãDE\9a¨\16Ý @^VäRÚ\9aä2KÒ*ÿ¾g\96Ôµn\e H,{¹Ë\9933gά¾Þ¸Î< Ó\87Ù\92\8b\7fÓù\94¢¹OFRvãÙG\1eE>\ 5!%\ 5ÞqqèøqÿöÆ\8bf\8eGaè;3*È\9f\ 5N4¬rZ_\9fg\1f\8e\e9\13\9aÌ"üíã§÷5qahê\ 6xP\90\17\9eVlè|\8dݹ\vwýY»{¶\ 6\bor±{¾Æîdâ\84gï2 É$³k@î\9cQz.>á2\98Áh¿².ÏÖØ\9d1ÜÓ®?óØìðnà\87GKüîùº  b\ f§w£9°\ 4H¨uëÎ`¨_\9dòpØõÝ)N\9dvÏ×\1c)\a\9d\0Æìhy2\99\ 2òi×\9bº(]\10\ 4ðÎ\ 1M\9dù°²~ÏÖ\9cáàb÷|\8d]\9fÉÐ[âwÏ×Ø\rBökýØݳ5vÃ\19G\7fÜ\9dø\8e\ fVM-(\90+\1c\16\16\13\8fBK\18X\99\ e\vÞ;[\16\14ruû\83¼÷*¾yq7GE\812Î@ñp6q¼(¤8µÜv)Nn#\87VF=é?;z­«Î¨í®\19Ñ{\95Ȳ\96\94Þ©ºÑ¦û>þ\ 3æf4Ø\1aû®\13\84Sغ=¾G_ü©G¾ëz4æ_\13ÚtGë?Ë'\99ëJ\9a\9azSnoêö\87ô¸óSÕCq´ÙþxíÐ\9b#Ep·Ö\85¤Z·&\91\94èT\92ªi#j\99\92\aW\80¼ù<b$\8bR\97]¡Û\1a\91¦\8c\83£û¥-\1f7mÝ`=¢e\998öiÞÇ\9fR[â$5;Ù£\11\ 3fzûá\81\9f¸4æâ\0Õ[YJ#rZµ\e¼|HàE\f·ÎðÊ!\92\956\8dÒeM:\83\v\84\91ê¤-dÙ\90\80T|·ÑÆè½L¿£Ìè\82A\90F}T    7'Øôå¶)¾|Ow\8bßF\16{¡S\95)¤C Âª2\1aI\15\rdN\9bC1,\10Ë\r\ fl²Ü\18û\13\aò\87H"Çs\9eÅ\8f`\81|\8e²âÔ\814@\9d\19É\ 5É\9a=`¿¤N·\94\88\12j\97\829FmZ8W\88©L_\0\82\85×ñ\83cn  Ù/\86,<\93\96Ü\8eè    %D6ÉG\1aêËâT\\94z\87\9c\80\ 6\9cÇ;\86¼\1e Ó\9d\ 6\14Á¥¸®PÌUA
+·F\14̳SD)©Ò\9aÚ\81ÓøC4\1cÒ^å9m$µµÌÚ|D\88\9d>-ãw\1f\1fbZ|øL\9f\16÷÷\8b\ fñç\978Ùì4vÁýÞ\8e\9c«\86$\1aQ6\1dHq\19įoî_¿ÃË\8bWË÷Ëø3¸@wËøÃ\9bõ\9aî>ÞÓ\82V\8bûxùúáýâ\9eV\ f÷«\8fë7\ e­\11ç³ìý¦¤ZÎ\14\1adLe#T\8e\16ÙïT²C*.±\89\8aM\ e\96\1d¨úO)¶]6Âü¥X"dI«\ \93Ç´n\15\88\12\ 4î\88^iHN9¢_\17äú\9eç\8d½À\8dFô°^\\17è3ÈV#\91yJ;ñ$AºDª'&?¤ â$þ\9fðE®Ë­-\15¬\9c\98ð\92TF¥\86\rcnôÁIß"¶\8d.9v\99®3Æ\r¢ó/é¸zõÙÜ\\9d\ 6\91\85ü?Ûâ¾óOº~jñeOÌ\8d\84ä\94ªÜ\8e8Jpa\ faá&Z\96èÛR6gb\ 4Æÿ·ÎB~M¥Mßp´l¨FåR*DÙqã°0S®\9b¿5@%ÐrC×Iaò\8eRÑYÙØË\r\89\14\ 2Ш\1a\f²%j\8cH\1eñä\9a6¯Ðy\1c\ 2^\1c¡om\8f7:Ñy?\14ê\ 6b%L
+¾ó\8cà^Å)\e?´*Ù\95êk+!|hAü$ì²\a\ e&$\10t\888ðàí-¸HmE¢\ 5\9fu\ 1>\ 2${Væ²d\e(=Cï\1d²áºêØ.\ 4\rÇ\8b\11\8aÕBçO\1c\ f=\948Ô´%\94=ïzdÏÔ\ 3\82\952S\1dúý \8e\8eë@!O\8a\88\84b@ÎÀåkÕürËÁ«\1aÃ\85s\95\8b\9ak\92©Da\0\19\99K\f]ºêüÓ\â){Væ»s´PÊ\9d\80\18Khß`èlÔòp¥·«÷\83Ø\&Jä9ÏDÊZ\ 3P\ 6Âd¯\15vj\82{\9a\1fÖ×å^kZ72ÃPú$ò\14'\90ÞF\98ƲN\95\906æ7jMPa\83\1a¥ÇiÒ\vÈq¼!ÓzÐ@Vî¦\ 5\9e\ e|-Ûb\ 348]Iͪ\ 6\1a\f³/¥J4ÉN\1eQ\r7\ 6\10?±Â%r#EÚ!\13\95\95Â\8d(q\97¨{Ú æpYW\18­¸\17¨BleÏ\11N  L\19Tå0úؽ®Æ Ü#\ 6\91¥\13\1eLèÙºáé\84³\1d%¹®Á\9bã½é2Ç\íÃM\ 3E`ö#LÛ'¹*Tc;\17ì®[\8c\82A\f\80ü\91Ã\7f\17Ç«\17\1en¾u[¡ÉÑ4Y.ÿT<\1a\e׬\97ÈM¦¶m¯\0#\1ed\9c-\8e¯¿»$\83\ 3ë.Ñ\1d\987L\1aȲ̸\17l\8c\87Làë\96ã\8f\92\v¦ãRê^\93\ 3^0jj¾U\9en¢T©ä\114@*9\eÍ\8eKÔ'þÀ\9c¦5\96\7f¸ý@\9ej\85+)&û\bïÚ¿S½\87}n%\9c\8bº\96\ 5\12\82ÞÂ)\91¦(Ôe\88V
+K¹§L
\81Ôô\93\88]íE÷L\ 40[·9÷'¼ %ø?Üи\8b\81)\0Ï¥\18Ò4"|\vµ\9d\7fjÃE»ÅuxÄ÷wß:âK¿ç\1dn\89ÓÈ\89 ¿'\1e\|Ã7\87I\84ëe8Ã\97\10Ü\1d½\19\87û&¾ùíæ/Ì\1a«xendstream
 endobj
 endobj
-545 0 obj<</Count 8/First 546 0 R/Last 617 0 R>>endobj
-546 0 obj<</Parent 545 0 R/Title(Table of Contents)/Dest[493 0 R/XYZ 0 756 0]/Next 547 0 R>>endobj
-547 0 obj<</Parent 545 0 R/Count -9/First 548 0 R/Last 556 0 R/Title(1. General Information)/Dest[497 0 R/XYZ 0 786 0]/Prev 546 0 R/Next 557 0 R>>endobj
-548 0 obj<</Parent 547 0 R/Title(1.1. What is this new version of Privoxy?)/Dest[497 0 R/XYZ 0 762 0]/Next 549 0 R>>endobj
-549 0 obj<</Parent 547 0 R/Title(1.2. Why "Privoxy"? Why a name change at all?)/Dest[497 0 R/XYZ 0 453 0]/Prev 548 0 R/Next 550 0 R>>endobj
-550 0 obj<</Parent 547 0 R/Title(1.3. How does Privoxy differ from the old Junkbuster?)/Dest[497 0 R/XYZ 0 236 0]/Prev 549 0 R/Next 551 0 R>>endobj
-551 0 obj<</Parent 547 0 R/Title(1.4. What is a "proxy"? How does Privoxy work?)/Dest[499 0 R/XYZ 0 494 0]/Prev 550 0 R/Next 552 0 R>>endobj
-552 0 obj<</Parent 547 0 R/Title(1.5. How does Privoxy know what is an ad, and what is not?)/Dest[499 0 R/XYZ 0 290 0]/Prev 551 0 R/Next 553 0 R>>endobj
-553 0 obj<</Parent 547 0 R/Title(1.6. Can Privoxy make mistakes? This does not sound very scientific.)/Dest[501 0 R/XYZ 0 758 0]/Prev 552 0 R/Next 554 0 R>>endobj
-554 0 obj<</Parent 547 0 R/Title(1.7. My browser does the same things as Privoxy. Why should I use Privoxy at all?)/Dest[501 0 R/XYZ 0 620 0]/Prev 553 0 R/Next 555 0 R>>endobj
-555 0 obj<</Parent 547 0 R/Title(1.8. Is there is a license or fee? What about a warranty? Registration?)/Dest[501 0 R/XYZ 0 479 0]/Prev 554 0 R/Next 556 0 R>>endobj
-556 0 obj<</Parent 547 0 R/Title(1.9. I would like to help you, what do I do?)/Dest[501 0 R/XYZ 0 355 0]/Prev 555 0 R>>endobj
-557 0 obj<</Parent 545 0 R/Count -6/First 558 0 R/Last 563 0 R/Title(2. Installation)/Dest[505 0 R/XYZ 0 786 0]/Prev 547 0 R/Next 564 0 R>>endobj
-558 0 obj<</Parent 557 0 R/Title(2.1. Which browsers are supported by Privoxy?)/Dest[505 0 R/XYZ 0 762 0]/Next 559 0 R>>endobj
-559 0 obj<</Parent 557 0 R/Title(2.2. Which operating systems are supported?)/Dest[505 0 R/XYZ 0 664 0]/Prev 558 0 R/Next 560 0 R>>endobj
-560 0 obj<</Parent 557 0 R/Title(2.3. Can I install Privoxy over Junkbuster?)/Dest[505 0 R/XYZ 0 500 0]/Prev 559 0 R/Next 561 0 R>>endobj
-561 0 obj<</Parent 557 0 R/Title(2.4. I just installed Privoxy. Is there anything special I have to do now?)/Dest[505 0 R/XYZ 0 376 0]/Prev 560 0 R/Next 562 0 R>>endobj
-562 0 obj<</Parent 557 0 R/Title(2.5. What is the proxy address of Privoxy?)/Dest[505 0 R/XYZ 0 291 0]/Prev 561 0 R/Next 563 0 R>>endobj
-563 0 obj<</Parent 557 0 R/Title(2.6. I just installed Privoxy, and nothing is happening. All the ads are there. What's wrong?)/Dest[507 0 R/XYZ 0 731 0]/Prev 562 0 R>>endobj
-564 0 obj<</Parent 545 0 R/Count -18/First 565 0 R/Last 582 0 R/Title(3. Configuration)/Dest[509 0 R/XYZ 0 786 0]/Prev 557 0 R/Next 583 0 R>>endobj
-565 0 obj<</Parent 564 0 R/Title(3.1. Where can I get updated Actions Files?)/Dest[509 0 R/XYZ 0 762 0]/Next 566 0 R>>endobj
-566 0 obj<</Parent 564 0 R/Title(3.2. Can I use my old config files?)/Dest[509 0 R/XYZ 0 638 0]/Prev 565 0 R/Next 567 0 R>>endobj
-567 0 obj<</Parent 564 0 R/Title(3.3. What is an "actions" file?)/Dest[509 0 R/XYZ 0 527 0]/Prev 566 0 R/Next 568 0 R>>endobj
-568 0 obj<</Parent 564 0 R/Title(3.4. The "actions" concept confuses me. Please list some of these "actions".)/Dest[509 0 R/XYZ 0 363 0]/Prev 567 0 R/Next 569 0 R>>endobj
-569 0 obj<</Parent 564 0 R/Title(3.5. How are actions files configured? What is the easiest way to do this?)/Dest[509 0 R/XYZ 0 274 0]/Prev 568 0 R/Next 570 0 R>>endobj
-570 0 obj<</Parent 564 0 R/Title(3.6. There are several different "actions" files. What are the differences?)/Dest[511 0 R/XYZ 0 786 0]/Prev 569 0 R/Next 571 0 R>>endobj
-571 0 obj<</Parent 564 0 R/Title(3.7. How can I make my Yahoo/Hotmail/GMX account work?)/Dest[511 0 R/XYZ 0 622 0]/Prev 570 0 R/Next 572 0 R>>endobj
-572 0 obj<</Parent 564 0 R/Title(3.8. What's the difference between the "Cautious", "Medium" and "Advanced" defaults?)/Dest[511 0 R/XYZ 0 465 0]/Prev 571 0 R/Next 573 0 R>>endobj
-573 0 obj<</Parent 564 0 R/Title(3.9. Why can I change the configuration with a browser? Does that not raise security issues?)/Dest[513 0 R/XYZ 0 702 0]/Prev 572 0 R/Next 574 0 R>>endobj
-574 0 obj<</Parent 564 0 R/Title(3.10. What is the default.filter file? What is a "filter"?)/Dest[513 0 R/XYZ 0 482 0]/Prev 573 0 R/Next 575 0 R>>endobj
-575 0 obj<</Parent 564 0 R/Title(3.11. How can I set up Privoxy to act as a proxy for my LAN?)/Dest[513 0 R/XYZ 0 278 0]/Prev 574 0 R/Next 576 0 R>>endobj
-576 0 obj<</Parent 564 0 R/Title(3.12. Instead of ads, now I get a checkerboard pattern. I don't want to see anything.)/Dest[515 0 R/XYZ 0 745 0]/Prev 575 0 R/Next 577 0 R>>endobj
-577 0 obj<</Parent 564 0 R/Title(3.13. Why would anybody want to see a checkerboard pattern?)/Dest[515 0 R/XYZ 0 590 0]/Prev 576 0 R/Next 578 0 R>>endobj
-578 0 obj<</Parent 564 0 R/Title(3.14. I see some images being replaced by a text instead of the checkerboard image. Why and how do I get rid of this?)/Dest[515 0 R/XYZ 0 479 0]/Prev 577 0 R/Next 579 0 R>>endobj
-579 0 obj<</Parent 564 0 R/Title(3.15. Can Privoxy run as a service on Win2K/NT?)/Dest[515 0 R/XYZ 0 245 0]/Prev 578 0 R/Next 580 0 R>>endobj
-580 0 obj<</Parent 564 0 R/Title(3.16. How can I make Privoxy work with other proxies like Squid?)/Dest[517 0 R/XYZ 0 786 0]/Prev 579 0 R/Next 581 0 R>>endobj
-581 0 obj<</Parent 564 0 R/Title(3.17. Can I just set Privoxy to use port 80 and thus avoid individual browser configuration?)/Dest[517 0 R/XYZ 0 715 0]/Prev 580 0 R/Next 582 0 R>>endobj
-582 0 obj<</Parent 564 0 R/Title(3.18. Can Privoxy run as a "transparent" proxy?)/Dest[517 0 R/XYZ 0 626 0]/Prev 581 0 R>>endobj
-583 0 obj<</Parent 545 0 R/Count -18/First 584 0 R/Last 601 0 R/Title(4. Miscellaneous)/Dest[519 0 R/XYZ 0 786 0]/Prev 564 0 R/Next 602 0 R>>endobj
-584 0 obj<</Parent 583 0 R/Title(4.1. How much does Privoxy slow my browsing down? This has to add extra time to browsing.)/Dest[519 0 R/XYZ 0 762 0]/Next 585 0 R>>endobj
-585 0 obj<</Parent 583 0 R/Title(4.2. I noticed considerable delays in page requests compared to the old Junkbuster. What's wrong?)/Dest[519 0 R/XYZ 0 595 0]/Prev 584 0 R/Next 586 0 R>>endobj
-586 0 obj<</Parent 583 0 R/Title(4.3. What are "http://config.privoxy.org/" and "http://p.p/"?)/Dest[519 0 R/XYZ 0 414 0]/Prev 585 0 R/Next 587 0 R>>endobj
-587 0 obj<</Parent 583 0 R/Title(4.4. Do you still maintain the blocklists?)/Dest[521 0 R/XYZ 0 786 0]/Prev 586 0 R/Next 588 0 R>>endobj
-588 0 obj<</Parent 583 0 R/Title(4.5. How can I submit new ads?)/Dest[521 0 R/XYZ 0 715 0]/Prev 587 0 R/Next 589 0 R>>endobj
-589 0 obj<</Parent 583 0 R/Title(4.6. How can I hide my IP address?)/Dest[521 0 R/XYZ 0 643 0]/Prev 588 0 R/Next 590 0 R>>endobj
-590 0 obj<</Parent 583 0 R/Title(4.7. Can Privoxy guarantee I am anonymous?)/Dest[521 0 R/XYZ 0 373 0]/Prev 589 0 R/Next 591 0 R>>endobj
-591 0 obj<</Parent 583 0 R/Title(4.8. Might some things break because header information or content is being altered?)/Dest[523 0 R/XYZ 0 786 0]/Prev 590 0 R/Next 592 0 R>>endobj
-592 0 obj<</Parent 583 0 R/Title(4.9. Can Privoxy act as a "caching" proxy to speed up web browsing?)/Dest[523 0 R/XYZ 0 460 0]/Prev 591 0 R/Next 593 0 R>>endobj
-593 0 obj<</Parent 583 0 R/Title(4.10. What about as a firewall? Can Privoxy protect me?)/Dest[523 0 R/XYZ 0 375 0]/Prev 592 0 R/Next 594 0 R>>endobj
-594 0 obj<</Parent 583 0 R/Title(4.11. I have large empty spaces / a checkerboard pattern now where ads used to be. Why?)/Dest[523 0 R/XYZ 0 304 0]/Prev 593 0 R/Next 595 0 R>>endobj
-595 0 obj<</Parent 583 0 R/Title(4.12. How can Privoxy filter Secure \(HTTPS\) URLs?)/Dest[525 0 R/XYZ 0 771 0]/Prev 594 0 R/Next 596 0 R>>endobj
-596 0 obj<</Parent 583 0 R/Title(4.13. Privoxy runs as a "server". How secure is it? Do I need to take any special precautions?)/Dest[525 0 R/XYZ 0 581 0]/Prev 595 0 R/Next 597 0 R>>endobj
-597 0 obj<</Parent 583 0 R/Title(4.14. How can I temporarily disable Privoxy?)/Dest[525 0 R/XYZ 0 413 0]/Prev 596 0 R/Next 598 0 R>>endobj
-598 0 obj<</Parent 583 0 R/Title(4.15. When "disabled" is Privoxy totally out of the picture?)/Dest[525 0 R/XYZ 0 328 0]/Prev 597 0 R/Next 599 0 R>>endobj
-599 0 obj<</Parent 583 0 R/Title(4.16. My logs show Privoxy "crunches" ads, but also its own CGI pages. What is a "crunch"?)/Dest[525 0 R/XYZ 0 243 0]/Prev 598 0 R/Next 600 0 R>>endobj
-600 0 obj<</Parent 583 0 R/Title(4.17. Can Privoxy effect files that I download from a webserver? FTP server?)/Dest[527 0 R/XYZ 0 786 0]/Prev 599 0 R/Next 601 0 R>>endobj
-601 0 obj<</Parent 583 0 R/Title(4.18. Where can I find more information about Privoxy and related issues?)/Dest[527 0 R/XYZ 0 553 0]/Prev 600 0 R>>endobj
-602 0 obj<</Parent 545 0 R/Count -8/First 603 0 R/Last 610 0 R/Title(5. Troubleshooting)/Dest[531 0 R/XYZ 0 786 0]/Prev 583 0 R/Next 611 0 R>>endobj
-603 0 obj<</Parent 602 0 R/Title(5.1. I just upgraded and am getting "connection refused" with every web page?)/Dest[531 0 R/XYZ 0 762 0]/Next 604 0 R>>endobj
-604 0 obj<</Parent 602 0 R/Title(5.2. I just added a new rule, but the steenkin ad is still getting through. How?)/Dest[531 0 R/XYZ 0 608 0]/Prev 603 0 R/Next 605 0 R>>endobj
-605 0 obj<</Parent 602 0 R/Title(5.3. One of my favorite sites does not work with Privoxy. What can I do?)/Dest[531 0 R/XYZ 0 467 0]/Prev 604 0 R/Next 606 0 R>>endobj
-606 0 obj<</Parent 602 0 R/Title(5.4. After installing Privoxy, I have to log in every time I start IE. What gives?)/Dest[533 0 R/XYZ 0 786 0]/Prev 605 0 R/Next 607 0 R>>endobj
-607 0 obj<</Parent 602 0 R/Title(5.5. I cannot connect to any FTP sites. Privoxy seems to be blocking me.)/Dest[533 0 R/XYZ 0 407 0]/Prev 606 0 R/Next 608 0 R>>endobj
-608 0 obj<</Parent 602 0 R/Title(5.6. In Mac OSX, I can't configure Microsoft Internet Explorer to use Privoxy as the HTTP proxy.)/Dest[533 0 R/XYZ 0 336 0]/Prev 607 0 R/Next 609 0 R>>endobj
-609 0 obj<</Parent 602 0 R/Title(5.7. In Mac OSX, I dragged the Privoxy folder to the trash in order to uninstall it. Now the finder tells me I don't have sufficient privileges to empty the trash.)/Dest[533 0 R/XYZ 0 221 0]/Prev 608 0 R/Next 610 0 R>>endobj
-610 0 obj<</Parent 602 0 R/Title(5.8. I get a completely blank page at one site. "View Source" shows only: <html><body></body></html>.)/Dest[535 0 R/XYZ 0 745 0]/Prev 609 0 R>>endobj
-611 0 obj<</Parent 545 0 R/Count -5/First 612 0 R/Last 616 0 R/Title(6. Contacting the developers, Bug Reporting and Feature Requests)/Dest[537 0 R/XYZ 0 786 0]/Prev 602 0 R/Next 617 0 R>>endobj
-612 0 obj<</Parent 611 0 R/Title(6.1. Get Support)/Dest[537 0 R/XYZ 0 683 0]/Next 613 0 R>>endobj
-613 0 obj<</Parent 611 0 R/Title(6.2. Report Bugs)/Dest[537 0 R/XYZ 0 569 0]/Prev 612 0 R/Next 614 0 R>>endobj
-614 0 obj<</Parent 611 0 R/Title(6.3. Request New Features)/Dest[537 0 R/XYZ 0 335 0]/Prev 613 0 R/Next 615 0 R>>endobj
-615 0 obj<</Parent 611 0 R/Title(6.4. Report Ads or Other Actions-Related Problems)/Dest[537 0 R/XYZ 0 260 0]/Prev 614 0 R/Next 616 0 R>>endobj
-616 0 obj<</Parent 611 0 R/Title(6.5. Other)/Dest[539 0 R/XYZ 0 786 0]/Prev 615 0 R>>endobj
-617 0 obj<</Parent 545 0 R/Count -2/First 618 0 R/Last 619 0 R/Title(7. Privoxy Copyright, License and History)/Dest[541 0 R/XYZ 0 786 0]/Prev 611 0 R>>endobj
-618 0 obj<</Parent 617 0 R/Title(7.1. License)/Dest[541 0 R/XYZ 0 641 0]/Next 619 0 R>>endobj
-619 0 obj<</Parent 617 0 R/Title(7.2. History)/Dest[541 0 R/XYZ 0 395 0]/Prev 618 0 R>>endobj
-620 0 obj<</Type/Catalog/Pages 490 0 R/PageLayout/SinglePage/Outlines 545 0 R/OpenAction[491 0 R/XYZ null null 0]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</S/r>>3<</S/D/St 1/P()>>7<</S/D/St 5/P()>>9<</S/D/St 7/P()>>14<</S/D/St 12/P()>>20<</S/D/St 18/P()>>23<</S/D/St 21/P()>>25<</S/D/St 23/P()>>]>>>>endobj
+579 0 obj<</Count 8/First 580 0 R/Last 667 0 R>>endobj
+580 0 obj<</Parent 579 0 R/Title(Table of Contents)/Dest[539 0 R/XYZ 0 756 0]/Next 581 0 R>>endobj
+581 0 obj<</Parent 579 0 R/Count -10/First 582 0 R/Last 591 0 R/Title(1. General Information)/Dest[543 0 R/XYZ 0 772 0]/Prev 580 0 R/Next 592 0 R>>endobj
+582 0 obj<</Parent 581 0 R/Title(1.1. What is this new version of Privoxy?)/Dest[543 0 R/XYZ 0 755 0]/Next 583 0 R>>endobj
+583 0 obj<</Parent 581 0 R/Title(1.2. Why "Privoxy"? Why a name change at all?)/Dest[543 0 R/XYZ 0 550 0]/Prev 582 0 R/Next 584 0 R>>endobj
+584 0 obj<</Parent 581 0 R/Title(1.3. How does Privoxy differ from the old Junkbuster?)/Dest[543 0 R/XYZ 0 402 0]/Prev 583 0 R/Next 585 0 R>>endobj
+585 0 obj<</Parent 581 0 R/Title(1.4. What is a "proxy"? How does Privoxy work?)/Dest[545 0 R/XYZ 0 772 0]/Prev 584 0 R/Next 586 0 R>>endobj
+586 0 obj<</Parent 581 0 R/Title(1.5. How does Privoxy know what is an ad, and what is not?)/Dest[545 0 R/XYZ 0 643 0]/Prev 585 0 R/Next 587 0 R>>endobj
+587 0 obj<</Parent 581 0 R/Title(1.6. Can Privoxy make mistakes? This does not sound very scientific.)/Dest[545 0 R/XYZ 0 486 0]/Prev 586 0 R/Next 588 0 R>>endobj
+588 0 obj<</Parent 581 0 R/Title(1.7. Will I have to configure Privoxy before I can use it?)/Dest[545 0 R/XYZ 0 395 0]/Prev 587 0 R/Next 589 0 R>>endobj
+589 0 obj<</Parent 581 0 R/Title(1.8. My browser does the same things as Privoxy. Why should I use Privoxy at all?)/Dest[545 0 R/XYZ 0 315 0]/Prev 588 0 R/Next 590 0 R>>endobj
+590 0 obj<</Parent 581 0 R/Title(1.9. Is there is a license or fee? What about a warranty? Registration?)/Dest[545 0 R/XYZ 0 234 0]/Prev 589 0 R/Next 591 0 R>>endobj
+591 0 obj<</Parent 581 0 R/Title(1.10. I would like to help you, what do I do?)/Dest[547 0 R/XYZ 0 772 0]/Prev 590 0 R>>endobj
+592 0 obj<</Parent 579 0 R/Count -8/First 593 0 R/Last 600 0 R/Title(2. Installation)/Dest[549 0 R/XYZ 0 772 0]/Prev 581 0 R/Next 601 0 R>>endobj
+593 0 obj<</Parent 592 0 R/Title(2.1. Which browsers are supported by Privoxy?)/Dest[549 0 R/XYZ 0 755 0]/Next 594 0 R>>endobj
+594 0 obj<</Parent 592 0 R/Title(2.2. Which operating systems are supported?)/Dest[549 0 R/XYZ 0 694 0]/Prev 593 0 R/Next 595 0 R>>endobj
+595 0 obj<</Parent 592 0 R/Title(2.3. Can I use Privoxy with my email client?)/Dest[549 0 R/XYZ 0 594 0]/Prev 594 0 R/Next 596 0 R>>endobj
+596 0 obj<</Parent 592 0 R/Title(2.4. Can I install Privoxy over Junkbuster?)/Dest[549 0 R/XYZ 0 504 0]/Prev 595 0 R/Next 597 0 R>>endobj
+597 0 obj<</Parent 592 0 R/Title(2.5. I just installed Privoxy. Is there anything special I have to do now?)/Dest[549 0 R/XYZ 0 423 0]/Prev 596 0 R/Next 598 0 R>>endobj
+598 0 obj<</Parent 592 0 R/Title(2.6. What is the proxy address of Privoxy?)/Dest[549 0 R/XYZ 0 361 0]/Prev 597 0 R/Next 599 0 R>>endobj
+599 0 obj<</Parent 592 0 R/Title(2.7. I just installed Privoxy, and nothing is happening. All the ads are there. What's wrong?)/Dest[549 0 R/XYZ 0 204 0]/Prev 598 0 R/Next 600 0 R>>endobj
+600 0 obj<</Parent 592 0 R/Title(2.8. I get a "Privoxy is not being used" dummy page although Privoxy is running and being used.)/Dest[551 0 R/XYZ 0 772 0]/Prev 599 0 R>>endobj
+601 0 obj<</Parent 579 0 R/Count -21/First 602 0 R/Last 622 0 R/Title(3. Configuration)/Dest[553 0 R/XYZ 0 772 0]/Prev 592 0 R/Next 623 0 R>>endobj
+602 0 obj<</Parent 601 0 R/Title(3.1. Where can I get updated Actions Files?)/Dest[553 0 R/XYZ 0 755 0]/Next 603 0 R>>endobj
+603 0 obj<</Parent 601 0 R/Title(3.2. Can I use my old config files?)/Dest[553 0 R/XYZ 0 665 0]/Prev 602 0 R/Next 604 0 R>>endobj
+604 0 obj<</Parent 601 0 R/Title(3.3. What is an "actions" file?)/Dest[553 0 R/XYZ 0 594 0]/Prev 603 0 R/Next 605 0 R>>endobj
+605 0 obj<</Parent 601 0 R/Title(3.4. The "actions" concept confuses me. Please list some of these "actions".)/Dest[553 0 R/XYZ 0 494 0]/Prev 604 0 R/Next 606 0 R>>endobj
+606 0 obj<</Parent 601 0 R/Title(3.5. How are actions files configured? What is the easiest way to do this?)/Dest[553 0 R/XYZ 0 442 0]/Prev 605 0 R/Next 607 0 R>>endobj
+607 0 obj<</Parent 601 0 R/Title(3.6. There are several different "actions" files. What are the differences?)/Dest[553 0 R/XYZ 0 381 0]/Prev 606 0 R/Next 608 0 R>>endobj
+608 0 obj<</Parent 601 0 R/Title(3.7. How can I make my Yahoo/Hotmail/GMX account work?)/Dest[553 0 R/XYZ 0 281 0]/Prev 607 0 R/Next 609 0 R>>endobj
+609 0 obj<</Parent 601 0 R/Title(3.8. What's the difference between the "Cautious", "Medium" and "Adventuresome" defaults?)/Dest[553 0 R/XYZ 0 175 0]/Prev 608 0 R/Next 610 0 R>>endobj
+610 0 obj<</Parent 601 0 R/Title(3.9. Why can I change the configuration with a browser? Does that not raise security issues?)/Dest[555 0 R/XYZ 0 712 0]/Prev 609 0 R/Next 611 0 R>>endobj
+611 0 obj<</Parent 601 0 R/Title(3.10. What is the default.filter file? What is a "filter"?)/Dest[555 0 R/XYZ 0 574 0]/Prev 610 0 R/Next 612 0 R>>endobj
+612 0 obj<</Parent 601 0 R/Title(3.11. How can I set up Privoxy to act as a proxy for my LAN?)/Dest[555 0 R/XYZ 0 445 0]/Prev 611 0 R/Next 613 0 R>>endobj
+613 0 obj<</Parent 601 0 R/Title(3.12. Instead of ads, now I get a checkerboard pattern. I don't want to see anything.)/Dest[555 0 R/XYZ 0 237 0]/Prev 612 0 R/Next 614 0 R>>endobj
+614 0 obj<</Parent 601 0 R/Title(3.13. Why would anybody want to see a checkerboard pattern?)/Dest[555 0 R/XYZ 0 147 0]/Prev 613 0 R/Next 615 0 R>>endobj
+615 0 obj<</Parent 601 0 R/Title(3.14. I see some images being replaced by a text instead of the checkerboard image. Why and how do I get rid of this?)/Dest[557 0 R/XYZ 0 751 0]/Prev 614 0 R/Next 616 0 R>>endobj
+616 0 obj<</Parent 601 0 R/Title(3.15. Can Privoxy run as a service on Win2K/NT?)/Dest[557 0 R/XYZ 0 591 0]/Prev 615 0 R/Next 617 0 R>>endobj
+617 0 obj<</Parent 601 0 R/Title(3.16. How can I make Privoxy work with other proxies like Squid?)/Dest[557 0 R/XYZ 0 520 0]/Prev 616 0 R/Next 618 0 R>>endobj
+618 0 obj<</Parent 601 0 R/Title(3.17. Can I just set Privoxy to use port 80 and thus avoid individual browser configuration?)/Dest[557 0 R/XYZ 0 468 0]/Prev 617 0 R/Next 619 0 R>>endobj
+619 0 obj<</Parent 601 0 R/Title(3.18. Can Privoxy run as a "transparent" proxy?)/Dest[557 0 R/XYZ 0 426 0]/Prev 618 0 R/Next 620 0 R>>endobj
+620 0 obj<</Parent 601 0 R/Title(3.19. How can I configure Privoxy for use with Outlook Express?)/Dest[557 0 R/XYZ 0 345 0]/Prev 619 0 R/Next 621 0 R>>endobj
+621 0 obj<</Parent 601 0 R/Title(3.20. How can I have separate rules just for HTML mail?)/Dest[557 0 R/XYZ 0 293 0]/Prev 620 0 R/Next 622 0 R>>endobj
+622 0 obj<</Parent 601 0 R/Title(3.21. How can I allow permanent cookies for my trusted sites?)/Dest[557 0 R/XYZ 0 193 0]/Prev 621 0 R>>endobj
+623 0 obj<</Parent 579 0 R/Count -20/First 624 0 R/Last 643 0 R/Title(4. Miscellaneous)/Dest[561 0 R/XYZ 0 772 0]/Prev 601 0 R/Next 644 0 R>>endobj
+624 0 obj<</Parent 623 0 R/Title(4.1. How much does Privoxy slow my browsing down? This has to add extra time to browsing.)/Dest[561 0 R/XYZ 0 755 0]/Next 625 0 R>>endobj
+625 0 obj<</Parent 623 0 R/Title(4.2. I noticed considerable delays in page requests compared to the old Junkbuster. What's wrong?)/Dest[561 0 R/XYZ 0 655 0]/Prev 624 0 R/Next 626 0 R>>endobj
+626 0 obj<</Parent 623 0 R/Title(4.3. What are "http://config.privoxy.org/" and "http://p.p/"?)/Dest[561 0 R/XYZ 0 536 0]/Prev 625 0 R/Next 627 0 R>>endobj
+627 0 obj<</Parent 623 0 R/Title(4.4. Do you still maintain the blocklists?)/Dest[561 0 R/XYZ 0 369 0]/Prev 626 0 R/Next 628 0 R>>endobj
+628 0 obj<</Parent 623 0 R/Title(4.5. How can I submit new ads?)/Dest[561 0 R/XYZ 0 317 0]/Prev 627 0 R/Next 629 0 R>>endobj
+629 0 obj<</Parent 623 0 R/Title(4.6. How can I hide my IP address?)/Dest[561 0 R/XYZ 0 265 0]/Prev 628 0 R/Next 630 0 R>>endobj
+630 0 obj<</Parent 623 0 R/Title(4.7. Can Privoxy guarantee I am anonymous?)/Dest[563 0 R/XYZ 0 741 0]/Prev 629 0 R/Next 631 0 R>>endobj
+631 0 obj<</Parent 623 0 R/Title(4.8. Might some things break because header information or content is being altered?)/Dest[563 0 R/XYZ 0 584 0]/Prev 630 0 R/Next 632 0 R>>endobj
+632 0 obj<</Parent 623 0 R/Title(4.9. Can Privoxy act as a "caching" proxy to speed up web browsing?)/Dest[563 0 R/XYZ 0 378 0]/Prev 631 0 R/Next 633 0 R>>endobj
+633 0 obj<</Parent 623 0 R/Title(4.10. What about as a firewall? Can Privoxy protect me?)/Dest[563 0 R/XYZ 0 326 0]/Prev 632 0 R/Next 634 0 R>>endobj
+634 0 obj<</Parent 623 0 R/Title(4.11. I have large empty spaces / a checkerboard pattern now where ads used to be. Why?)/Dest[563 0 R/XYZ 0 274 0]/Prev 633 0 R/Next 635 0 R>>endobj
+635 0 obj<</Parent 623 0 R/Title(4.12. How can Privoxy filter Secure \(HTTPS\) URLs?)/Dest[563 0 R/XYZ 0 155 0]/Prev 634 0 R/Next 636 0 R>>endobj
+636 0 obj<</Parent 623 0 R/Title(4.13. Privoxy runs as a "server". How secure is it? Do I need to take any special precautions?)/Dest[565 0 R/XYZ 0 664 0]/Prev 635 0 R/Next 637 0 R>>endobj
+637 0 obj<</Parent 623 0 R/Title(4.14. How can I temporarily disable Privoxy?)/Dest[565 0 R/XYZ 0 564 0]/Prev 636 0 R/Next 638 0 R>>endobj
+638 0 obj<</Parent 623 0 R/Title(4.15. When "disabled" is Privoxy totally out of the picture?)/Dest[565 0 R/XYZ 0 512 0]/Prev 637 0 R/Next 639 0 R>>endobj
+639 0 obj<</Parent 623 0 R/Title(4.16. My logs show Privoxy "crunches" ads, but also its own CGI pages. What is a "crunch"?)/Dest[565 0 R/XYZ 0 461 0]/Prev 638 0 R/Next 640 0 R>>endobj
+640 0 obj<</Parent 623 0 R/Title(4.17. Can Privoxy effect files that I download from a webserver? FTP server?)/Dest[565 0 R/XYZ 0 389 0]/Prev 639 0 R/Next 641 0 R>>endobj
+641 0 obj<</Parent 623 0 R/Title(4.18. I just downloaded a Perl script, and Privoxy altered it! Yikes, what is wrong!)/Dest[567 0 R/XYZ 0 772 0]/Prev 640 0 R/Next 642 0 R>>endobj
+642 0 obj<</Parent 623 0 R/Title(4.19. Where can I find more information about Privoxy and related issues?)/Dest[567 0 R/XYZ 0 730 0]/Prev 641 0 R/Next 643 0 R>>endobj
+643 0 obj<</Parent 623 0 R/Title(4.20. I've noticed that Privoxy changes "Microsoft" to "MicroSuck"! Why are you manipulating my browsing?)/Dest[567 0 R/XYZ 0 422 0]/Prev 642 0 R>>endobj
+644 0 obj<</Parent 579 0 R/Count -16/First 645 0 R/Last 660 0 R/Title(5. Troubleshooting)/Dest[569 0 R/XYZ 0 772 0]/Prev 623 0 R/Next 661 0 R>>endobj
+645 0 obj<</Parent 644 0 R/Title(5.1. I just upgraded and am getting "connection refused" with every web page?)/Dest[569 0 R/XYZ 0 755 0]/Next 646 0 R>>endobj
+646 0 obj<</Parent 644 0 R/Title(5.2. I just added a new rule, but the steenkin ad is still getting through. How?)/Dest[569 0 R/XYZ 0 665 0]/Prev 645 0 R/Next 647 0 R>>endobj
+647 0 obj<</Parent 644 0 R/Title(5.3. One of my favorite sites does not work with Privoxy. What can I do?)/Dest[569 0 R/XYZ 0 575 0]/Prev 646 0 R/Next 648 0 R>>endobj
+648 0 obj<</Parent 644 0 R/Title(5.4. After installing Privoxy, I have to log in every time I start IE. What gives?)/Dest[569 0 R/XYZ 0 369 0]/Prev 647 0 R/Next 649 0 R>>endobj
+649 0 obj<</Parent 644 0 R/Title(5.5. I cannot connect to any FTP sites. Privoxy seems to be blocking me.)/Dest[569 0 R/XYZ 0 144 0]/Prev 648 0 R/Next 650 0 R>>endobj
+650 0 obj<</Parent 644 0 R/Title(5.6. In Mac OSX, I can't configure Microsoft Internet Explorer to use Privoxy as the HTTP proxy.)/Dest[571 0 R/XYZ 0 684 0]/Prev 649 0 R/Next 651 0 R>>endobj
+651 0 obj<</Parent 644 0 R/Title(5.7. In Mac OSX, I dragged the Privoxy folder to the trash in order to uninstall it. Now the finder tells me I don't have sufficient privileges to empty the trash.)/Dest[571 0 R/XYZ 0 612 0]/Prev 650 0 R/Next 652 0 R>>endobj
+652 0 obj<</Parent 644 0 R/Title(5.8. In Mac OSX Panther \(10.3\), images often fail to load and/or I experience random delays in page loading. I'm using localhost as my browser's proxy setting.)/Dest[571 0 R/XYZ 0 520 0]/Prev 651 0 R/Next 653 0 R>>endobj
+653 0 obj<</Parent 644 0 R/Title(5.9. I get a completely blank page at one site. "View Source" shows only: <html><body></body></html>. Without Privoxy the page loads fine.)/Dest[571 0 R/XYZ 0 457 0]/Prev 652 0 R/Next 654 0 R>>endobj
+654 0 obj<</Parent 644 0 R/Title(5.10. Why am I getting a 503 Error \(WSAECONNREFUSED\) on every page?)/Dest[571 0 R/XYZ 0 301 0]/Prev 653 0 R/Next 655 0 R>>endobj
+655 0 obj<</Parent 644 0 R/Title(5.11. My logs show many "Unable to get my own hostname" lines. Why?)/Dest[571 0 R/XYZ 0 239 0]/Prev 654 0 R/Next 656 0 R>>endobj
+656 0 obj<</Parent 644 0 R/Title(5.12. When I try to launch Privoxy, I get an error message "port 8118 is already in use" \(or similar wording\). Why?)/Dest[571 0 R/XYZ 0 159 0]/Prev 655 0 R/Next 657 0 R>>endobj
+657 0 obj<</Parent 644 0 R/Title(5.13. Pages with UTF-8 fonts are garbled.)/Dest[573 0 R/XYZ 0 760 0]/Prev 656 0 R/Next 658 0 R>>endobj
+658 0 obj<</Parent 644 0 R/Title(5.14. Why are binary files \(such as images\) corrupted when Privoxy is used?)/Dest[573 0 R/XYZ 0 699 0]/Prev 657 0 R/Next 659 0 R>>endobj
+659 0 obj<</Parent 644 0 R/Title(5.15. What is the "demoronizer" and why is it there?)/Dest[573 0 R/XYZ 0 637 0]/Prev 658 0 R/Next 660 0 R>>endobj
+660 0 obj<</Parent 644 0 R/Title(5.16. Why do I keep seeing "PrivoxyWindowOpen\(\)" in raw source code?)/Dest[573 0 R/XYZ 0 461 0]/Prev 659 0 R>>endobj
+661 0 obj<</Parent 579 0 R/Count -5/First 662 0 R/Last 666 0 R/Title(6. Contacting the developers, Bug Reporting and Feature Requests)/Dest[575 0 R/XYZ 0 772 0]/Prev 644 0 R/Next 667 0 R>>endobj
+662 0 obj<</Parent 661 0 R/Title(6.1. Get Support)/Dest[575 0 R/XYZ 0 715 0]/Next 663 0 R>>endobj
+663 0 obj<</Parent 661 0 R/Title(6.2. Report Bugs)/Dest[575 0 R/XYZ 0 651 0]/Prev 662 0 R/Next 664 0 R>>endobj
+664 0 obj<</Parent 661 0 R/Title(6.3. Request New Features)/Dest[575 0 R/XYZ 0 510 0]/Prev 663 0 R/Next 665 0 R>>endobj
+665 0 obj<</Parent 661 0 R/Title(6.4. Report Ads or Other Actions-Related Problems)/Dest[575 0 R/XYZ 0 456 0]/Prev 664 0 R/Next 666 0 R>>endobj
+666 0 obj<</Parent 661 0 R/Title(6.5. Other)/Dest[575 0 R/XYZ 0 364 0]/Prev 665 0 R>>endobj
+667 0 obj<</Parent 579 0 R/Count -2/First 668 0 R/Last 669 0 R/Title(7. Privoxy Copyright, License and History)/Dest[577 0 R/XYZ 0 772 0]/Prev 661 0 R>>endobj
+668 0 obj<</Parent 667 0 R/Title(7.1. License)/Dest[577 0 R/XYZ 0 677 0]/Next 669 0 R>>endobj
+669 0 obj<</Parent 667 0 R/Title(7.2. History)/Dest[577 0 R/XYZ 0 517 0]/Prev 668 0 R>>endobj
+670 0 obj<</Type/Catalog/Pages 536 0 R/PageLayout/SinglePage/Outlines 579 0 R/OpenAction[537 0 R/XYZ null null 0]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</S/r>>3<</S/D/St 1/P()>>6<</S/D/St 4/P()>>8<</S/D/St 6/P()>>12<</S/D/St 10/P()>>16<</S/D/St 14/P()>>19<</S/D/St 17/P()>>20<</S/D/St 18/P()>>]>>>>endobj
 xref
 xref
-0 62
+0 67
 0000000000 65535 f 
 0000000015 00000 n 
 0000000000 65535 f 
 0000000015 00000 n 
-0000000257 00000 n 
-0000001823 00000 n 
-0000001897 00000 n 
-0000001976 00000 n 
-0000002054 00000 n 
-0000002131 00000 n 
-0000002210 00000 n 
-0000002286 00000 n 
-0000002367 00000 n 
-0000002426 00000 n 
-0000002527 00000 n 
-0000002580 00000 n 
-0000002665 00000 n 
-0000002719 00000 n 
-0000002804 00000 n 
-0000002879 00000 n 
-0000002963 00000 n 
-0000003021 00000 n 
-0000003106 00000 n 
-0000003208 00000 n 
-0000003309 00000 n 
-0000003374 00000 n 
-0000003475 00000 n 
-0000003577 00000 n 
-0000003679 00000 n 
-0000003781 00000 n 
-0000003883 00000 n 
-0000003985 00000 n 
-0000004087 00000 n 
-0000004189 00000 n 
-0000004291 00000 n 
-0000004393 00000 n 
-0000004494 00000 n 
-0000004596 00000 n 
-0000004698 00000 n 
-0000004800 00000 n 
-0000004902 00000 n 
-0000005004 00000 n 
-0000005106 00000 n 
-0000005207 00000 n 
-0000005309 00000 n 
-0000005411 00000 n 
-0000005513 00000 n 
-0000005615 00000 n 
-0000005717 00000 n 
-0000005819 00000 n 
-0000005921 00000 n 
-0000006023 00000 n 
-0000006125 00000 n 
-0000006227 00000 n 
-0000006329 00000 n 
-0000006431 00000 n 
-0000006533 00000 n 
-0000006635 00000 n 
-0000006737 00000 n 
-0000006839 00000 n 
-0000006941 00000 n 
-0000007043 00000 n 
-0000007145 00000 n 
-0000007246 00000 n 
-0000007348 00000 n 
-0000007450 00000 n 
-0000007552 00000 n 
-0000007654 00000 n 
-0000007755 00000 n 
-0000007855 00000 n 
-0000007955 00000 n 
-0000008286 00000 n 
-0000008387 00000 n 
-0000008489 00000 n 
-0000008591 00000 n 
-0000008693 00000 n 
-0000008795 00000 n 
-0000008897 00000 n 
-0000008999 00000 n 
-0000009101 00000 n 
-0000009203 00000 n 
-0000009305 00000 n 
-0000009407 00000 n 
-0000009509 00000 n 
-0000009611 00000 n 
-0000009712 00000 n 
-0000009814 00000 n 
-0000009916 00000 n 
-0000010018 00000 n 
-0000010120 00000 n 
-0000010222 00000 n 
-0000010324 00000 n 
-0000010426 00000 n 
-0000010528 00000 n 
-0000010630 00000 n 
-0000010732 00000 n 
-0000010834 00000 n 
-0000010935 00000 n 
-0000011037 00000 n 
-0000011139 00000 n 
-0000011241 00000 n 
-0000011343 00000 n 
-0000011445 00000 n 
-0000011547 00000 n 
-0000011650 00000 n 
-0000011753 00000 n 
-0000012011 00000 n 
-0000012078 00000 n 
-0000012165 00000 n 
-0000012224 00000 n 
-0000012311 00000 n 
-0000012390 00000 n 
-0000012477 00000 n 
-0000012535 00000 n 
-0000012622 00000 n 
-0000012680 00000 n 
-0000012766 00000 n 
-0000012834 00000 n 
-0000012921 00000 n 
-0000012988 00000 n 
-0000013075 00000 n 
-0000013164 00000 n 
-0000013251 00000 n 
+0000000254 00000 n 
+0000001820 00000 n 
+0000001894 00000 n 
+0000001973 00000 n 
+0000002049 00000 n 
+0000002130 00000 n 
+0000002214 00000 n 
+0000002302 00000 n 
+0000002360 00000 n 
+0000002460 00000 n 
+0000002513 00000 n 
+0000002598 00000 n 
+0000002652 00000 n 
+0000002737 00000 n 
+0000002812 00000 n 
+0000002897 00000 n 
+0000002955 00000 n 
+0000003040 00000 n 
+0000003142 00000 n 
+0000003200 00000 n 
+0000003301 00000 n 
+0000003403 00000 n 
+0000003505 00000 n 
+0000003607 00000 n 
+0000003709 00000 n 
+0000003811 00000 n 
+0000003913 00000 n 
+0000004015 00000 n 
+0000004117 00000 n 
+0000004219 00000 n 
+0000004321 00000 n 
+0000004422 00000 n 
+0000004524 00000 n 
+0000004626 00000 n 
+0000004728 00000 n 
+0000004830 00000 n 
+0000004932 00000 n 
+0000005034 00000 n 
+0000005136 00000 n 
+0000005238 00000 n 
+0000005339 00000 n 
+0000005441 00000 n 
+0000005543 00000 n 
+0000005645 00000 n 
+0000005747 00000 n 
+0000005849 00000 n 
+0000005951 00000 n 
+0000006053 00000 n 
+0000006155 00000 n 
+0000006257 00000 n 
+0000006359 00000 n 
+0000006461 00000 n 
+0000006563 00000 n 
+0000006665 00000 n 
+0000006767 00000 n 
+0000006869 00000 n 
+0000006971 00000 n 
+0000007073 00000 n 
+0000007175 00000 n 
+0000007277 00000 n 
+0000007379 00000 n 
+0000007481 00000 n 
+0000007582 00000 n 
+0000007684 00000 n 
+0000007786 00000 n 
+0000007888 00000 n 
+0000007990 00000 n 
+0000008092 00000 n 
+0000008194 00000 n 
+0000008296 00000 n 
+0000008398 00000 n 
+0000008500 00000 n 
+0000008602 00000 n 
+0000008704 00000 n 
+0000008806 00000 n 
+0000008908 00000 n 
+0000009010 00000 n 
+0000009112 00000 n 
+0000009214 00000 n 
+0000009316 00000 n 
+0000009417 00000 n 
+0000009517 00000 n 
+0000009617 00000 n 
+0000010074 00000 n 
+0000010175 00000 n 
+0000010277 00000 n 
+0000010379 00000 n 
+0000010481 00000 n 
+0000010583 00000 n 
+0000010685 00000 n 
+0000010787 00000 n 
+0000010889 00000 n 
+0000010991 00000 n 
+0000011093 00000 n 
+0000011195 00000 n 
+0000011297 00000 n 
+0000011399 00000 n 
+0000011501 00000 n 
+0000011603 00000 n 
+0000011706 00000 n 
+0000011809 00000 n 
+0000011912 00000 n 
+0000012015 00000 n 
+0000012118 00000 n 
+0000012220 00000 n 
+0000012323 00000 n 
+0000012426 00000 n 
+0000012529 00000 n 
+0000012632 00000 n 
+0000012735 00000 n 
+0000012837 00000 n 
+0000012940 00000 n 
+0000013043 00000 n 
+0000013277 00000 n 
 0000013344 00000 n 
 0000013431 00000 n 
 0000013344 00000 n 
 0000013431 00000 n 
-0000013486 00000 n 
-0000013572 00000 n 
-0000013627 00000 n 
-0000013714 00000 n 
-0000013765 00000 n 
-0000013850 00000 n 
-0000013963 00000 n 
-0000014021 00000 n 
-0000014108 00000 n 
-0000014151 00000 n 
-0000014238 00000 n 
-0000014283 00000 n 
-0000014370 00000 n 
-0000014411 00000 n 
-0000014514 00000 n 
-0000014582 00000 n 
-0000014669 00000 n 
-0000014772 00000 n 
-0000014833 00000 n 
-0000014920 00000 n 
-0000014969 00000 n 
-0000015045 00000 n 
-0000015132 00000 n 
-0000015193 00000 n 
-0000015280 00000 n 
-0000015341 00000 n 
-0000015426 00000 n 
-0000015507 00000 n 
-0000015594 00000 n 
-0000015668 00000 n 
-0000015755 00000 n 
-0000015812 00000 n 
-0000015863 00000 n 
-0000015950 00000 n 
-0000016000 00000 n 
-0000016087 00000 n 
-0000016137 00000 n 
-0000016223 00000 n 
-0000016299 00000 n 
-0000016386 00000 n 
-0000016434 00000 n 
-0000016521 00000 n 
-0000016578 00000 n 
-0000016636 00000 n 
-0000016723 00000 n 
-0000016764 00000 n 
-0000016851 00000 n 
-0000016884 00000 n 
-0000016975 00000 n 
-0000017061 00000 n 
-0000017123 00000 n 
-0000017210 00000 n 
-0000017302 00000 n 
-0000017388 00000 n 
-0000017438 00000 n 
-0000017524 00000 n 
-0000017565 00000 n 
-0000017652 00000 n 
-0000017697 00000 n 
-0000017784 00000 n 
-0000017834 00000 n 
-0000017921 00000 n 
-0000017997 00000 n 
-0000018084 00000 n 
-0000018160 00000 n 
-0000018246 00000 n 
-0000018287 00000 n 
-0000018374 00000 n 
-0000018420 00000 n 
-0000018507 00000 n 
-0000018565 00000 n 
-0000018652 00000 n 
-0000018695 00000 n 
-0000018781 00000 n 
-0000018850 00000 n 
-0000018937 00000 n 
-0000019066 00000 n 
-0000019116 00000 n 
-0000019203 00000 n 
-0000019279 00000 n 
-0000019366 00000 n 
-0000019442 00000 n 
-0000019528 00000 n 
-0000019585 00000 n 
-0000019671 00000 n 
-0000019728 00000 n 
-0000019815 00000 n 
-0000019869 00000 n 
-0000019956 00000 n 
-0000020025 00000 n 
-0000020112 00000 n 
-0000020185 00000 n 
-0000020261 00000 n 
-0000020348 00000 n 
-0000020401 00000 n 
-0000020488 00000 n 
-0000020542 00000 n 
-0000020628 00000 n 
-0000020672 00000 n 
-0000020759 00000 n 
-0000020808 00000 n 
-0000020894 00000 n 
-0000020934 00000 n 
-0000021021 00000 n 
-0000021090 00000 n 
-0000021177 00000 n 
-0000021221 00000 n 
-0000021308 00000 n 
-0000021356 00000 n 
-0000021443 00000 n 
-0000021532 00000 n 
-0000021580 00000 n 
-0000021667 00000 n 
-0000021715 00000 n 
-0000021801 00000 n 
+0000013490 00000 n 
+0000013577 00000 n 
+0000013656 00000 n 
+0000013743 00000 n 
+0000013801 00000 n 
+0000013888 00000 n 
+0000013956 00000 n 
+0000014043 00000 n 
+0000014110 00000 n 
+0000014197 00000 n 
+0000014286 00000 n 
+0000014373 00000 n 
+0000014466 00000 n 
+0000014552 00000 n 
+0000014607 00000 n 
+0000014693 00000 n 
+0000014748 00000 n 
+0000014834 00000 n 
+0000014885 00000 n 
+0000014971 00000 n 
+0000015029 00000 n 
+0000015116 00000 n 
+0000015159 00000 n 
+0000015246 00000 n 
+0000015367 00000 n 
+0000015412 00000 n 
+0000015499 00000 n 
+0000015602 00000 n 
+0000015670 00000 n 
+0000015757 00000 n 
+0000015860 00000 n 
+0000015909 00000 n 
+0000015970 00000 n 
+0000016057 00000 n 
+0000016133 00000 n 
+0000016220 00000 n 
+0000016296 00000 n 
+0000016382 00000 n 
+0000016443 00000 n 
+0000016530 00000 n 
+0000016611 00000 n 
+0000016698 00000 n 
+0000016772 00000 n 
+0000016859 00000 n 
+0000016924 00000 n 
+0000017027 00000 n 
+0000017129 00000 n 
+0000017180 00000 n 
+0000017266 00000 n 
+0000017316 00000 n 
+0000017403 00000 n 
+0000017479 00000 n 
+0000017566 00000 n 
+0000017614 00000 n 
+0000017701 00000 n 
+0000017744 00000 n 
+0000017831 00000 n 
+0000017872 00000 n 
+0000017957 00000 n 
+0000018036 00000 n 
+0000018121 00000 n 
+0000018188 00000 n 
+0000018272 00000 n 
+0000018369 00000 n 
+0000018412 00000 n 
+0000018499 00000 n 
+0000018578 00000 n 
+0000018664 00000 n 
+0000018731 00000 n 
+0000018818 00000 n 
+0000018861 00000 n 
+0000018947 00000 n 
+0000018996 00000 n 
+0000019087 00000 n 
+0000019174 00000 n 
+0000019236 00000 n 
+0000019323 00000 n 
+0000019385 00000 n 
+0000019470 00000 n 
+0000019562 00000 n 
+0000019649 00000 n 
+0000019741 00000 n 
+0000019826 00000 n 
+0000019876 00000 n 
+0000019962 00000 n 
+0000020003 00000 n 
+0000020090 00000 n 
+0000020135 00000 n 
+0000020222 00000 n 
+0000020272 00000 n 
+0000020359 00000 n 
+0000020435 00000 n 
+0000020522 00000 n 
+0000020563 00000 n 
+0000020650 00000 n 
+0000020691 00000 n 
+0000020776 00000 n 
+0000020822 00000 n 
+0000020909 00000 n 
+0000020967 00000 n 
+0000021054 00000 n 
+0000021097 00000 n 
+0000021184 00000 n 
+0000021253 00000 n 
+0000021340 00000 n 
+0000021409 00000 n 
+0000021495 00000 n 
+0000021545 00000 n 
+0000021632 00000 n 
+0000021708 00000 n 
+0000021795 00000 n 
 0000021852 00000 n 
 0000021852 00000 n 
-0000021939 00000 n 
-0000021988 00000 n 
-0000022075 00000 n 
-0000022114 00000 n 
-0000022201 00000 n 
-0000022252 00000 n 
-0000022339 00000 n 
-0000022408 00000 n 
-0000022495 00000 n 
-0000022598 00000 n 
-0000022711 00000 n 
-0000022796 00000 n 
-0000022885 00000 n 
-0000022929 00000 n 
-0000023015 00000 n 
-0000023091 00000 n 
-0000023178 00000 n 
-0000023222 00000 n 
-0000023309 00000 n 
-0000023385 00000 n 
-0000023471 00000 n 
-0000023536 00000 n 
-0000023622 00000 n 
-0000023679 00000 n 
-0000023719 00000 n 
-0000023806 00000 n 
-0000023854 00000 n 
-0000023941 00000 n 
+0000021938 00000 n 
+0000021995 00000 n 
+0000022082 00000 n 
+0000022136 00000 n 
+0000022223 00000 n 
+0000022292 00000 n 
+0000022378 00000 n 
+0000022428 00000 n 
+0000022514 00000 n 
+0000022723 00000 n 
+0000022799 00000 n 
+0000022886 00000 n 
+0000022939 00000 n 
+0000023026 00000 n 
+0000023080 00000 n 
+0000023167 00000 n 
+0000023211 00000 n 
+0000023298 00000 n 
+0000023347 00000 n 
+0000023433 00000 n 
+0000023473 00000 n 
+0000023559 00000 n 
+0000023628 00000 n 
+0000023715 00000 n 
+0000023759 00000 n 
+0000023846 00000 n 
+0000023894 00000 n 
 0000023981 00000 n 
 0000023981 00000 n 
-0000024068 00000 n 
-0000024116 00000 n 
-0000024203 00000 n 
-0000024261 00000 n 
-0000024347 00000 n 
-0000024390 00000 n 
-0000024477 00000 n 
-0000024535 00000 n 
-0000024622 00000 n 
-0000024672 00000 n 
-0000024759 00000 n 
-0000024840 00000 n 
-0000024890 00000 n 
-0000024977 00000 n 
-0000025080 00000 n 
-0000025151 00000 n 
-0000025238 00000 n 
-0000025313 00000 n 
-0000025399 00000 n 
-0000025448 00000 n 
-0000025507 00000 n 
-0000025594 00000 n 
-0000025638 00000 n 
-0000025725 00000 n 
-0000025801 00000 n 
-0000025888 00000 n 
-0000025929 00000 n 
-0000025977 00000 n 
-0000026064 00000 n 
-0000026128 00000 n 
-0000026214 00000 n 
-0000026260 00000 n 
-0000026347 00000 n 
-0000026404 00000 n 
-0000026491 00000 n 
-0000026540 00000 n 
-0000026579 00000 n 
-0000026666 00000 n 
-0000026721 00000 n 
-0000026807 00000 n 
-0000026866 00000 n 
-0000026952 00000 n 
-0000027023 00000 n 
-0000027109 00000 n 
-0000027163 00000 n 
-0000027250 00000 n 
-0000027308 00000 n 
-0000027394 00000 n 
-0000027437 00000 n 
-0000027523 00000 n 
-0000027720 00000 n 
-0000027806 00000 n 
-0000027900 00000 n 
-0000027986 00000 n 
-0000028063 00000 n 
-0000028149 00000 n 
-0000028216 00000 n 
-0000028302 00000 n 
-0000028369 00000 n 
-0000028455 00000 n 
-0000028514 00000 n 
-0000028600 00000 n 
-0000028659 00000 n 
-0000028743 00000 n 
-0000028872 00000 n 
-0000028944 00000 n 
-0000029030 00000 n 
-0000029055 00000 n 
-0000029103 00000 n 
-0000029190 00000 n 
-0000029234 00000 n 
-0000029321 00000 n 
-0000029392 00000 n 
-0000029479 00000 n 
-0000029543 00000 n 
-0000029629 00000 n 
-0000029700 00000 n 
-0000029787 00000 n 
-0000029856 00000 n 
-0000029942 00000 n 
-0000029987 00000 n 
-0000030073 00000 n 
-0000030119 00000 n 
-0000030205 00000 n 
-0000030251 00000 n 
-0000030335 00000 n 
-0000030424 00000 n 
-0000030479 00000 n 
-0000030566 00000 n 
-0000030656 00000 n 
-0000030742 00000 n 
-0000030830 00000 n 
-0000030917 00000 n 
-0000031007 00000 n 
-0000031093 00000 n 
-0000031192 00000 n 
-0000031279 00000 n 
-0000031491 00000 n 
-0000031578 00000 n 
-0000031670 00000 n 
-0000031757 00000 n 
-0000031841 00000 n 
-0000031928 00000 n 
-0000032018 00000 n 
-0000032105 00000 n 
-0000032302 00000 n 
+0000024028 00000 n 
+0000024115 00000 n 
+0000024163 00000 n 
+0000024250 00000 n 
+0000024301 00000 n 
+0000024388 00000 n 
+0000024437 00000 n 
+0000024524 00000 n 
+0000024563 00000 n 
+0000024650 00000 n 
+0000024701 00000 n 
+0000024788 00000 n 
+0000024857 00000 n 
+0000024944 00000 n 
+0000025045 00000 n 
+0000025198 00000 n 
+0000025311 00000 n 
+0000025397 00000 n 
+0000025441 00000 n 
+0000025528 00000 n 
+0000025604 00000 n 
+0000025690 00000 n 
+0000025734 00000 n 
+0000025821 00000 n 
+0000025897 00000 n 
+0000025984 00000 n 
+0000026049 00000 n 
+0000026136 00000 n 
+0000026249 00000 n 
+0000026335 00000 n 
+0000026408 00000 n 
+0000026448 00000 n 
+0000026535 00000 n 
+0000026583 00000 n 
+0000026670 00000 n 
+0000026710 00000 n 
+0000026797 00000 n 
+0000026845 00000 n 
+0000026932 00000 n 
+0000026990 00000 n 
+0000027076 00000 n 
+0000027119 00000 n 
+0000027206 00000 n 
+0000027264 00000 n 
+0000027351 00000 n 
+0000027401 00000 n 
+0000027488 00000 n 
+0000027538 00000 n 
+0000027625 00000 n 
+0000027728 00000 n 
+0000027799 00000 n 
+0000027885 00000 n 
+0000027960 00000 n 
+0000028045 00000 n 
+0000028158 00000 n 
+0000028217 00000 n 
+0000028304 00000 n 
+0000028348 00000 n 
+0000028435 00000 n 
+0000028511 00000 n 
+0000028598 00000 n 
+0000028639 00000 n 
+0000028695 00000 n 
+0000028782 00000 n 
+0000028830 00000 n 
+0000028917 00000 n 
+0000028981 00000 n 
+0000029068 00000 n 
+0000029114 00000 n 
+0000029200 00000 n 
+0000029257 00000 n 
+0000029343 00000 n 
+0000029382 00000 n 
+0000029469 00000 n 
+0000029534 00000 n 
+0000029589 00000 n 
+0000029675 00000 n 
+0000029734 00000 n 
+0000029820 00000 n 
+0000029891 00000 n 
+0000029977 00000 n 
+0000030031 00000 n 
+0000030118 00000 n 
+0000030176 00000 n 
+0000030262 00000 n 
+0000030305 00000 n 
+0000030392 00000 n 
+0000030589 00000 n 
+0000030675 00000 n 
+0000030769 00000 n 
+0000030855 00000 n 
+0000030932 00000 n 
+0000031018 00000 n 
+0000031085 00000 n 
+0000031171 00000 n 
+0000031238 00000 n 
+0000031324 00000 n 
+0000031383 00000 n 
+0000031469 00000 n 
+0000031528 00000 n 
+0000031614 00000 n 
+0000031686 00000 n 
+0000031772 00000 n 
+0000031901 00000 n 
+0000031949 00000 n 
+0000032036 00000 n 
+0000032080 00000 n 
+0000032167 00000 n 
+0000032238 00000 n 
+0000032324 00000 n 
 0000032388 00000 n 
 0000032388 00000 n 
-0000032479 00000 n 
-0000032564 00000 n 
-0000032655 00000 n 
-0000032740 00000 n 
-0000032802 00000 n 
-0000032887 00000 n 
-0000033008 00000 n 
-0000033083 00000 n 
-0000033170 00000 n 
-0000033195 00000 n 
-0000033256 00000 n 
-0000033343 00000 n 
-0000033411 00000 n 
-0000033498 00000 n 
-0000033565 00000 n 
-0000033652 00000 n 
-0000033711 00000 n 
-0000033798 00000 n 
-0000033877 00000 n 
-0000033964 00000 n 
-0000034022 00000 n 
-0000034109 00000 n 
-0000034167 00000 n 
-0000034253 00000 n 
-0000034321 00000 n 
-0000034408 00000 n 
-0000034475 00000 n 
-0000034562 00000 n 
-0000034651 00000 n 
-0000034737 00000 n 
-0000034830 00000 n 
-0000034915 00000 n 
-0000035020 00000 n 
-0000035054 00000 n 
-0000035088 00000 n 
-0000036496 00000 n 
-0000036539 00000 n 
-0000036582 00000 n 
-0000036625 00000 n 
-0000036668 00000 n 
-0000036711 00000 n 
-0000036754 00000 n 
-0000036797 00000 n 
-0000036840 00000 n 
-0000036883 00000 n 
-0000036926 00000 n 
-0000036969 00000 n 
-0000037012 00000 n 
-0000037055 00000 n 
-0000037098 00000 n 
-0000037141 00000 n 
-0000037184 00000 n 
-0000037227 00000 n 
-0000037270 00000 n 
-0000037313 00000 n 
-0000037356 00000 n 
-0000037399 00000 n 
+0000032475 00000 n 
+0000032546 00000 n 
+0000032633 00000 n 
+0000032702 00000 n 
+0000032788 00000 n 
+0000032833 00000 n 
+0000032920 00000 n 
+0000032966 00000 n 
+0000033053 00000 n 
+0000033134 00000 n 
+0000033185 00000 n 
+0000033272 00000 n 
+0000033297 00000 n 
+0000033388 00000 n 
+0000033475 00000 n 
+0000033566 00000 n 
+0000033653 00000 n 
+0000033686 00000 n 
+0000033776 00000 n 
+0000033863 00000 n 
+0000033953 00000 n 
+0000034040 00000 n 
+0000034128 00000 n 
+0000034215 00000 n 
+0000034305 00000 n 
+0000034392 00000 n 
+0000034491 00000 n 
+0000034578 00000 n 
+0000034677 00000 n 
+0000034762 00000 n 
+0000034974 00000 n 
+0000035061 00000 n 
+0000035153 00000 n 
+0000035240 00000 n 
+0000035324 00000 n 
+0000035411 00000 n 
+0000035501 00000 n 
+0000035587 00000 n 
+0000035784 00000 n 
+0000035871 00000 n 
+0000035962 00000 n 
+0000036048 00000 n 
+0000036139 00000 n 
+0000036226 00000 n 
+0000036288 00000 n 
+0000036375 00000 n 
+0000036450 00000 n 
+0000036536 00000 n 
+0000036673 00000 n 
+0000036734 00000 n 
+0000036821 00000 n 
+0000036889 00000 n 
+0000036976 00000 n 
+0000037043 00000 n 
+0000037130 00000 n 
+0000037189 00000 n 
+0000037276 00000 n 
+0000037355 00000 n 
 0000037442 00000 n 
 0000037442 00000 n 
-0000037485 00000 n 
-0000037528 00000 n 
-0000037571 00000 n 
-0000037614 00000 n 
-0000037657 00000 n 
-0000037700 00000 n 
-0000037743 00000 n 
-0000037786 00000 n 
-0000037829 00000 n 
-0000037872 00000 n 
-0000037915 00000 n 
-0000037958 00000 n 
-0000038001 00000 n 
-0000038044 00000 n 
-0000038087 00000 n 
-0000038130 00000 n 
-0000038173 00000 n 
-0000038216 00000 n 
-0000038259 00000 n 
-0000038302 00000 n 
-0000038345 00000 n 
-0000038388 00000 n 
-0000038431 00000 n 
-0000038474 00000 n 
-0000038517 00000 n 
-0000038560 00000 n 
-0000038603 00000 n 
-0000038646 00000 n 
-0000038689 00000 n 
-0000038732 00000 n 
-0000038775 00000 n 
-0000038818 00000 n 
-0000038861 00000 n 
-0000038904 00000 n 
-0000038947 00000 n 
-0000038990 00000 n 
-0000039033 00000 n 
-0000039076 00000 n 
-0000039119 00000 n 
-0000039162 00000 n 
-0000039205 00000 n 
-0000039248 00000 n 
-0000039291 00000 n 
-0000039334 00000 n 
-0000039377 00000 n 
-0000039420 00000 n 
-0000039463 00000 n 
-0000039506 00000 n 
-0000039549 00000 n 
-0000039592 00000 n 
-0000039635 00000 n 
-0000039678 00000 n 
-0000039721 00000 n 
-0000039764 00000 n 
-0000039807 00000 n 
-0000039850 00000 n 
-0000039893 00000 n 
-0000039936 00000 n 
-0000040199 00000 n 
-0000040387 00000 n 
-0000041377 00000 n 
-0000041565 00000 n 
-0000048461 00000 n 
-0000048650 00000 n 
-0000054014 00000 n 
-0000054203 00000 n 
-0000056409 00000 n 
-0000056608 00000 n 
-0000058903 00000 n 
-0000059101 00000 n 
-0000061069 00000 n 
-0000061249 00000 n 
-0000061952 00000 n 
-0000062141 00000 n 
-0000064014 00000 n 
-0000064194 00000 n 
-0000065135 00000 n 
-0000065324 00000 n 
-0000067329 00000 n 
-0000067527 00000 n 
-0000070054 00000 n 
-0000070261 00000 n 
-0000072590 00000 n 
-0000072797 00000 n 
-0000075065 00000 n 
-0000075245 00000 n 
-0000076224 00000 n 
-0000076422 00000 n 
-0000078267 00000 n 
-0000078456 00000 n 
-0000080490 00000 n 
-0000080679 00000 n 
-0000082763 00000 n 
-0000082952 00000 n 
-0000084986 00000 n 
-0000085175 00000 n 
-0000086898 00000 n 
-0000087078 00000 n 
-0000087425 00000 n 
-0000087614 00000 n 
-0000089672 00000 n 
-0000089846 00000 n 
-0000091725 00000 n 
-0000091899 00000 n 
-0000092773 00000 n 
-0000092971 00000 n 
-0000094883 00000 n 
-0000095063 00000 n 
-0000095609 00000 n 
-0000095807 00000 n 
-0000097762 00000 n 
-0000097918 00000 n 
-0000098237 00000 n 
-0000098292 00000 n 
-0000098391 00000 n 
-0000098544 00000 n 
-0000098667 00000 n 
-0000098807 00000 n 
-0000098955 00000 n 
-0000099096 00000 n 
-0000099249 00000 n 
-0000099412 00000 n 
-0000099588 00000 n 
-0000099754 00000 n 
-0000099880 00000 n 
-0000100026 00000 n 
-0000100153 00000 n 
-0000100291 00000 n 
-0000100429 00000 n 
-0000100598 00000 n 
-0000100735 00000 n 
-0000100910 00000 n 
-0000101058 00000 n 
-0000101183 00000 n 
-0000101313 00000 n 
-0000101439 00000 n 
-0000101610 00000 n 
-0000101779 00000 n 
-0000101949 00000 n 
-0000102098 00000 n 
-0000102277 00000 n 
-0000102464 00000 n 
-0000102617 00000 n 
-0000102772 00000 n 
-0000102952 00000 n 
-0000103106 00000 n 
-0000103318 00000 n 
-0000103460 00000 n 
-0000103619 00000 n 
-0000103806 00000 n 
-0000103935 00000 n 
-0000104083 00000 n 
-0000104254 00000 n 
-0000104446 00000 n 
-0000104602 00000 n 
-0000104739 00000 n 
-0000104864 00000 n 
-0000104993 00000 n 
-0000105130 00000 n 
-0000105309 00000 n 
-0000105471 00000 n 
-0000105621 00000 n 
-0000105803 00000 n 
-0000105949 00000 n 
-0000106138 00000 n 
-0000106277 00000 n 
-0000106432 00000 n 
-0000106617 00000 n 
-0000106788 00000 n 
-0000106943 00000 n 
-0000107092 00000 n 
-0000107251 00000 n 
-0000107426 00000 n 
-0000107593 00000 n 
-0000107770 00000 n 
-0000107937 00000 n 
-0000108128 00000 n 
-0000108386 00000 n 
-0000108569 00000 n 
-0000108764 00000 n 
-0000108862 00000 n 
-0000108973 00000 n 
-0000109093 00000 n 
-0000109237 00000 n 
-0000109329 00000 n 
-0000109488 00000 n 
-0000109582 00000 n 
-0000109676 00000 n 
+0000037500 00000 n 
+0000037587 00000 n 
+0000037655 00000 n 
+0000037742 00000 n 
+0000037809 00000 n 
+0000037896 00000 n 
+0000037985 00000 n 
+0000038072 00000 n 
+0000038165 00000 n 
+0000038251 00000 n 
+0000038348 00000 n 
+0000038382 00000 n 
+0000038416 00000 n 
+0000040108 00000 n 
+0000040151 00000 n 
+0000040194 00000 n 
+0000040237 00000 n 
+0000040280 00000 n 
+0000040323 00000 n 
+0000040366 00000 n 
+0000040409 00000 n 
+0000040452 00000 n 
+0000040495 00000 n 
+0000040538 00000 n 
+0000040581 00000 n 
+0000040624 00000 n 
+0000040667 00000 n 
+0000040710 00000 n 
+0000040753 00000 n 
+0000040796 00000 n 
+0000040839 00000 n 
+0000040882 00000 n 
+0000040925 00000 n 
+0000040968 00000 n 
+0000041011 00000 n 
+0000041054 00000 n 
+0000041097 00000 n 
+0000041140 00000 n 
+0000041183 00000 n 
+0000041226 00000 n 
+0000041269 00000 n 
+0000041312 00000 n 
+0000041355 00000 n 
+0000041398 00000 n 
+0000041441 00000 n 
+0000041484 00000 n 
+0000041527 00000 n 
+0000041570 00000 n 
+0000041613 00000 n 
+0000041656 00000 n 
+0000041699 00000 n 
+0000041742 00000 n 
+0000041785 00000 n 
+0000041828 00000 n 
+0000041871 00000 n 
+0000041914 00000 n 
+0000041957 00000 n 
+0000042000 00000 n 
+0000042043 00000 n 
+0000042086 00000 n 
+0000042129 00000 n 
+0000042172 00000 n 
+0000042215 00000 n 
+0000042258 00000 n 
+0000042301 00000 n 
+0000042344 00000 n 
+0000042387 00000 n 
+0000042430 00000 n 
+0000042473 00000 n 
+0000042516 00000 n 
+0000042559 00000 n 
+0000042602 00000 n 
+0000042645 00000 n 
+0000042688 00000 n 
+0000042731 00000 n 
+0000042774 00000 n 
+0000042817 00000 n 
+0000042860 00000 n 
+0000042903 00000 n 
+0000042946 00000 n 
+0000042989 00000 n 
+0000043032 00000 n 
+0000043075 00000 n 
+0000043118 00000 n 
+0000043161 00000 n 
+0000043204 00000 n 
+0000043247 00000 n 
+0000043290 00000 n 
+0000043333 00000 n 
+0000043376 00000 n 
+0000043419 00000 n 
+0000043462 00000 n 
+0000043505 00000 n 
+0000043548 00000 n 
+0000043591 00000 n 
+0000043634 00000 n 
+0000043677 00000 n 
+0000043720 00000 n 
+0000043763 00000 n 
+0000043806 00000 n 
+0000043849 00000 n 
+0000043892 00000 n 
+0000043935 00000 n 
+0000043978 00000 n 
+0000044021 00000 n 
+0000044064 00000 n 
+0000044107 00000 n 
+0000044150 00000 n 
+0000044193 00000 n 
+0000044408 00000 n 
+0000044587 00000 n 
+0000045523 00000 n 
+0000045693 00000 n 
+0000055892 00000 n 
+0000056063 00000 n 
+0000061005 00000 n 
+0000061194 00000 n 
+0000064078 00000 n 
+0000064267 00000 n 
+0000067009 00000 n 
+0000067180 00000 n 
+0000068265 00000 n 
+0000068445 00000 n 
+0000071295 00000 n 
+0000071475 00000 n 
+0000072318 00000 n 
+0000072507 00000 n 
+0000075480 00000 n 
+0000075678 00000 n 
+0000078851 00000 n 
+0000079040 00000 n 
+0000081640 00000 n 
+0000081805 00000 n 
+0000082241 00000 n 
+0000082421 00000 n 
+0000085165 00000 n 
+0000085345 00000 n 
+0000088267 00000 n 
+0000088456 00000 n 
+0000091733 00000 n 
+0000091922 00000 n 
+0000093361 00000 n 
+0000093550 00000 n 
+0000096543 00000 n 
+0000096741 00000 n 
+0000099573 00000 n 
+0000099762 00000 n 
+0000101426 00000 n 
+0000101615 00000 n 
+0000103603 00000 n 
+0000103792 00000 n 
+0000105674 00000 n 
+0000105729 00000 n 
+0000105828 00000 n 
+0000105982 00000 n 
+0000106105 00000 n 
+0000106245 00000 n 
+0000106393 00000 n 
+0000106534 00000 n 
+0000106687 00000 n 
+0000106850 00000 n 
+0000107003 00000 n 
+0000107179 00000 n 
+0000107345 00000 n 
+0000107472 00000 n 
+0000107618 00000 n 
+0000107745 00000 n 
+0000107883 00000 n 
+0000108022 00000 n 
+0000108160 00000 n 
+0000108329 00000 n 
+0000108466 00000 n 
+0000108654 00000 n 
+0000108831 00000 n 
+0000108979 00000 n 
+0000109104 00000 n 
+0000109234 00000 n 
+0000109360 00000 n 
+0000109531 00000 n 
+0000109700 00000 n 
+0000109870 00000 n 
+0000110019 00000 n 
+0000110203 00000 n 
+0000110390 00000 n 
+0000110543 00000 n 
+0000110698 00000 n 
+0000110878 00000 n 
+0000111032 00000 n 
+0000111244 00000 n 
+0000111386 00000 n 
+0000111545 00000 n 
+0000111732 00000 n 
+0000111874 00000 n 
+0000112032 00000 n 
+0000112182 00000 n 
+0000112325 00000 n 
+0000112473 00000 n 
+0000112644 00000 n 
+0000112836 00000 n 
+0000112992 00000 n 
+0000113129 00000 n 
+0000113254 00000 n 
+0000113383 00000 n 
+0000113520 00000 n 
+0000113699 00000 n 
+0000113861 00000 n 
+0000114011 00000 n 
+0000114193 00000 n 
+0000114339 00000 n 
+0000114528 00000 n 
+0000114667 00000 n 
+0000114822 00000 n 
+0000115007 00000 n 
+0000115178 00000 n 
+0000115357 00000 n 
+0000115525 00000 n 
+0000115712 00000 n 
+0000115862 00000 n 
+0000116021 00000 n 
+0000116196 00000 n 
+0000116363 00000 n 
+0000116540 00000 n 
+0000116707 00000 n 
+0000116898 00000 n 
+0000117156 00000 n 
+0000117412 00000 n 
+0000117645 00000 n 
+0000117809 00000 n 
+0000117971 00000 n 
+0000118183 00000 n 
+0000118319 00000 n 
+0000118491 00000 n 
+0000118638 00000 n 
+0000118790 00000 n 
+0000118985 00000 n 
+0000119083 00000 n 
+0000119194 00000 n 
+0000119314 00000 n 
+0000119458 00000 n 
+0000119550 00000 n 
+0000119709 00000 n 
+0000119803 00000 n 
+0000119897 00000 n 
 trailer
 trailer
-<</Size 621/Root 620 0 R/Info 1 0 R/ID[<a5a4c996b23bdf065500f25eef59df0f><a5a4c996b23bdf065500f25eef59df0f>]>>
+<</Size 671/Root 670 0 R/Info 1 0 R/ID[<c22b0ab6c92409dcb17a0726cce374a7><c22b0ab6c92409dcb17a0726cce374a7>]>>
 startxref
 startxref
-109998
+120219
 %%EOF
 %%EOF
index b0056d1..cba3056 100644 (file)
Binary files a/doc/pdf/privoxy-user-manual.pdf and b/doc/pdf/privoxy-user-manual.pdf differ
diff --git a/doc/source/GNUmakefile.in b/doc/source/GNUmakefile.in
deleted file mode 100644 (file)
index 5565963..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-# Note:  Makefile is built automatically from Makefile.in
-#
-# $Id: GNUmakefile.in,v 1.8 2002/09/26 22:51:16 hal9 Exp $
-#
-# Location: doc/source/Makefile.in 
-# Purpose: Build documentation
-#
-# Written by and Copyright (C) 2002 the Privoxy
-# team. http://www.privoxy.org/
-#
-# This program is free software; you can redistribute it 
-# and/or modify it under the terms of the GNU General
-# Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at
-# your option) any later version.
-#
-# This program is distributed in the hope that it will
-# be useful, but WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.  See the GNU General Public
-# License for more details.
-#
-# The GNU General Public License should be included with
-# this file.  If not, you can view it at
-# http://www.gnu.org/copyleft/gpl.html
-# or write to the Free Software Foundation, Inc., 59
-# Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#
-
-#############################################################################
-# Set make command correctly
-#############################################################################
-@SET_MAKE@
-
-#############################################################################
-# Version number (for RPM)
-#############################################################################
-
-VERSION_MAJOR = @VERSION_MAJOR@
-VERSION_MINOR = @VERSION_MINOR@
-VERSION_POINT = @VERSION_POINT@
-CODE_STATUS   = @CODE_STATUS@
-VERSION       = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_POINT)
-# Whatever the most recent stable version is.
-STABLE     =  3.0.0
-
-#############################################################################
-# Build tools
-#############################################################################
-
-PROGRAM    = privoxy@EXEEXT@
-ECHO       = echo
-INSTALL    = @INSTALL@
-RM         = rm -fr
-SED          = sed
-CAT        = cat
-MV           = mv -f
-WDUMP      = @WDUMP@ -dump
-JADECAT    = @JADECAT@
-JADEBIN    = @JADEBIN@
-DOC_STATUS = @DOC_STATUS@
-MAN2HTML   = @MAN2HTML@
-DKPREFIX   = @DKPREFIX@
-# Note: Please make sure that -d ldp.dsl\#html stays the last option to
-#       $(JADEBIN), because for some targets "-notoc" will be appended
-#       to it (--> "ldp.dsl\#html-notoc"). 
-DB         = $(JADEBIN) $(JADECAT) $(DOC_STATUS) -ihtml -t sgml  -D.. -d ldp.dsl\#html
-G2H_CMD    = groff -mandoc -Thtml
-TARGET_OS  = @host@
-PERL       = perl
-DOC_DIR    = .
-DOC_TMP    = $(DOC_DIR)/tmp
-ROOT            = ../..
-UTILS   = $(ROOT)/utils
-DOK_WEB_USEM=$(ROOT)/webserver/user-manual
-
-DOC_FILES = $(ROOT)/AUTHORS $(ROOT)/LICENSE $(ROOT)/README $(ROOT)/INSTALL $(ROOT)/ChangeLog \
-               `find ../text/ -type f | grep -v "CVS" | grep -v "\.\#" | grep -v ".*~" | grep -v ".cvsignore" | grep -v "TAGS"` \
-               `find ../webserver/ -name "*.html" | grep -v "\(webserver\|team\)\/index\.html"` \
-               `find ../webserver/ -name "*.css"` \
-                $(ROOT)/privoxy.1
-
-#############################################################################
-# Phony targets
-#############################################################################
-.PHONY: all dok webserver doc-webserver clean doc-clean clobber ensure-wdump \
-ensure-jadebin ensure-dkprefix user doc-user devel doc-devel faq doc-faq \
-readme doc-readme authors doc-authors index doc-index webserver doc-webserver \
-man doc-man man2html manuals doc-release doc-pdf doc-shtml announce config-file
-#############################################################################
-#
-# Documentation
-#
-# converts *.sgml into html, pdf, text and man pages
-#
-#############################################################################
-
-#############################################################################
-# Build the Manuals, etc            #########################################
-# This does not build _all_ targets #########################################
-all: $(DOC_DIR)/doc_version.tmp doc-user doc-devel doc-faq doc-webserver doc-index doc-readme doc-authors doc-man doc-clean
-       @$(ECHO) Documentation created.
-
-#############################################################################
-# Shortcuts. Use these targets if building docs selectively (ie not 'all').
-#
-# Both index pages (index.html and privoxy-index.html)
-index: $(DOC_DIR)/doc_version.tmp doc-webserver doc-index doc-clean
-
-# Just index.html
-webserver: $(DOC_DIR)/doc_version.tmp doc-webserver doc-clean
-
-# User Manual html and text
-user: $(DOC_DIR)/doc_version.tmp doc-user doc-clean
-
-# Developer Manual html and text
-devel: $(DOC_DIR)/doc_version.tmp doc-devel doc-clean
-
-# FAQ html and text
-faq: $(DOC_DIR)/doc_version.tmp doc-faq doc-clean
-
-# All formal manuals (html and text).
-manuals: $(DOC_DIR)/doc_version.tmp doc-user doc-devel doc-faq doc-clean
-
-# README and INSTALL
-readme: $(DOC_DIR)/doc_version.tmp doc-readme doc-clean
-
-# man page and html man page
-man: $(DOC_DIR)/doc_version.tmp doc-man doc-clean
-
-# AUTHORS file only.
-authors: $(DOC_DIR)/doc_version.tmp doc-authors doc-clean
-
-# PDF version of manuals.
-pdf: $(DOC_DIR)/doc_version.tmp doc-pdf
-
-# doh.
-clean: doc-clean
-
-# backward compatibility targets
-dok-user: user
-dok-faq: faq
-dok-devel: devel
-dok-index: index
-dok-man: man
-dok-readme: readme
-dok: all
-
-# 3 checks to make sure docs will be generated
-ensure-wdump:
-ifeq (@WDUMP@,false)
-       @$(ECHO)
-       @$(ECHO) "Cannot build docs; one of w3m, links, or lynx must be installed."
-       @$(ECHO) "You should install the appropriate package and rerun ./configure"
-       @exit 1
-endif
-
-ensure-jadebin:
-ifeq (@JADEBIN@,false)
-       @$(ECHO)
-       @$(ECHO) "Cannot build docs; one of openjade or jade must be installed"
-       @$(ECHO) "You should install the appropriate package and rerun ./configure"
-       @exit 1
-endif
-
-ensure-dkprefix:
-ifeq (@DKPREFIX@,false)
-       @$(ECHO)
-       @$(ECHO) "Cannot build docs; cannot find docbook-dsssl stylesheets"
-       @$(ECHO) "You should install the appropriate package and rerun ./configure"
-       @exit 1
-endif
-
-# Update release info, so it can be read by Docbook/jade, and run other
-# checks.
-$(DOC_DIR)/doc_version.tmp: ensure-dkprefix ensure-jadebin ensure-wdump doc-release
-       
-# Write VERSION and CODE_STATUS to tmp files so they can be read into the doc
-# processing. This needs to go before any doc building (doh).
-doc-release:
-       @$(ECHO) Setting doc version and status to $(VERSION), $(CODE_STATUS)
-       $(MAKE) doc-clean
-       mkdir -p $(DOC_TMP)
-       $(ECHO) -n $(VERSION) > $(DOC_DIR)/doc_version.tmp
-       $(ECHO) -n $(CODE_STATUS) > $(DOC_DIR)/doc_status.tmp
-       $(ECHO) -n $(STABLE) > $(DOC_DIR)/doc_stable.tmp
-
-# user manual
-doc-user:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       cd $(DOC_TMP) && $(RM) * && $(DB) -iuser-man ../user-manual.sgml && cd .. && \
-       $(RM) ../webserver/user-manual/*.html && cp $(DOC_TMP)/*.html ../webserver/user-manual/
-       $(DB) -iuser-man -V nochunks user-manual.sgml > tmp.html && $(WDUMP) tmp.html > ../text/user-manual.txt
-
-# developer manual
-doc-devel:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       cd $(DOC_TMP) && $(RM) * && $(DB) ../developer-manual.sgml && cd .. && \
-       $(RM) ../webserver/developer-manual/*.html && cp -f $(DOC_TMP)/*.html ../webserver/developer-manual/
-       $(DB) -V nochunks developer-manual.sgml > tmp.html && $(WDUMP) tmp.html > ../text/developer-manual.txt
-
-# faq
-doc-faq:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       cd $(DOC_TMP) && $(RM) * && $(DB) ../faq.sgml && cd .. && \
-       $(RM) ../webserver/faq/*.html && cp $(DOC_TMP)/*.html ../webserver/faq/
-       $(DB) -V nochunks faq.sgml > tmp.html && $(WDUMP) tmp.html > ../text/faq.txt 
-
-# Build README and INSTALL files.
-doc-readme:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       $(DB)-notoc -V nochunks readme.sgml > tmp.html &&\
-       $(WDUMP) tmp.html > $(ROOT)/README ;\
-       $(DB)-notoc -V nochunks install.sgml > tmp.html &&\
-       $(WDUMP) tmp.html > $(ROOT)/INSTALL ;\
-       $(RM) tmp.*
-
-# index.sgml is used to create both the Home Page, and a local index
-# for documentation (privoxy-index.html), etc.
-#
-# index.html for webserver:
-doc-webserver:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       cd webserver && $(DB)-notoc -ip-homepage -V nochunks index.sgml > index.html ;\
-       $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\
-     s/<\/HEAD/\n<meta name=\"description\" content=\"Privoxy helps consumers reduce unwanted junk email and protect their privacy from direct marketing companies.\"><\/HEAD/;\
-       s/<\/HEAD/\n<meta name="MSSmartTagsPreventParsing" content="TRUE"><\/HEAD/;\
-       s/\.\d\. //' index.html ;\
-       $(MV) index.html ../../webserver ;\
-       $(RM) *.html *.bak
-
-# privoxy-index.html for bundling with locally installed documentation:
-doc-index:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       cd webserver && $(DB)-notoc -ip-index -V nochunks index.sgml > privoxy-index.html ;\
-       $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\
-     s/<\/HEAD/\n<meta name=\"description\" content=\"Privoxy helps consumers reduce unwanted junk email and protect their privacy from direct marketing companies.\"><\/HEAD/;\
-       s/<\/HEAD/\n<meta name="MSSmartTagsPreventParsing" content="TRUE"><\/HEAD/;\
-       s/\.\d\. //' privoxy-index.html ;\
-       $(MV) privoxy-index.html ../../webserver ;\
-       $(RM) *.html *.bak
-
-## Make AUTHORS file
-doc-authors:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       $(DB) -V nochunks authors.sgml > tmp.html && $(WDUMP) \
-         tmp.html > ../../AUTHORS
-
-# Make a man page, and then HTML version. Uses docbook2man (short perl script)
-# in utils dir. 
-doc-man:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       cd $(DOC_TMP) && $(RM) * &&\
-       nsgmls $(DOC_STATUS) ../privoxy-man-page.sgml  | sgmlspl ../../../utils/docbook2man/docbook2man-spec.pl &&\
-       perl -pi.bak -e 's/ <URL:.*>//; s/\[ /\[/g' privoxy.1
-#      cd $(DOC_TMP) && $(DB) ../privoxy-man-page.sgml &&\
-#      $(MV) -f index.html privoxy-man-page.html
-     # This html is not used. See make man2html.
-       $(MV) -f $(DOC_TMP)/privoxy.1 $(ROOT)/privoxy.1
-       $(MAKE) man2html
-       $(MAKE) clean
-
-# For those with man2html ala RH7s.
-man2html:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       mkdir -p ../webserver/man-page
-ifneq ($(MAN2HTML),false)
-       $(MAN2HTML) $(ROOT)/privoxy.1 |grep -v "^Content-type" > tmp.html
-       $(PERL) -pi.bak -e 's/<A .*Contents<\/A>//; s/<A .*man2html<\/A>/man2html/' tmp.html
-       $(PERL) -pi.bak -e 's/(<\/HEAD>)/<LINK REL=\"STYLESHEET\" TYPE=\"text\/css\" HREF=\"..\/p_doc.css\"><\/HEAD>/' tmp.html
-# Twice because my version of man2html is pulling in commas and periods in URLs.
-       $(PERL) -pi.bak -e 's/(<A.*),(">)/$$1$$2/g' tmp.html
-       $(PERL) -pi.bak -e 's,\.">,">,g' tmp.html
-# Get rid of spurious \a from conversion. (How to do this with perl?)
-       $(SED) -e 's/\a//g' tmp.html > ../webserver/man-page/privoxy-man-page.html && $(RM) tmp.*
-else
-       $(MAKE) groff2html
-endif
-
-# Otherwise we get plain groff conversion.
-groff2html:
-       $(G2H_CMD) $(ROOT)/privoxy.1 | $(SED) -e 's@</head>@<link REL="STYLESHEET" TYPE="text/css" HREF="../p_doc.css"></head>@' >\
-       ../webserver/man-page/privoxy-man-page.html
-
-# Make pdf docs from single page html. Requires htmldoc, see
-# (http://www.easysw.com/htmldoc/). Note: 1.8.20 has a TOC bug.
-# PDF docs are uploaded to webserver as zip archive.
-doc-pdf: doc-shtml
-       @$(ECHO) -n "starting htmldoc version: "; htmldoc --version
-       cd $(UTILS)/ldp_print && $(RM) *html *bak *jpg *tmp *pdf *zip
-       cp -f $(DOC_TMP)/*html ../webserver/images/*jpg  $(UTILS)/ldp_print
-       cd $(UTILS)/ldp_print ;\
-       $(PERL) -pi.bak -e 's/\.\.\/images\///; s/(<\/?)SUB/$$1small/i;\
-                           s/\.\.\/user-manual\/index\.html/privoxy-user-manual.pdf/;\
-                                       s/\.\.\/developer-manual\/index\.html/privoxy-developer-manual.pdf/;\
-                                       s/\.\.\/faq\/index\.html/privoxy-faq.pdf/' *.html ;\
-       for i in developer-manual user-manual faq; do \
-               ./ldp_print privoxy-$$i.html ;\
-               $(ECHO) DONE: privoxy-$$i.pdf ;\
-       done ;\
-       $(MV) *.pdf  ../../doc/pdf ;\
-       $(RM) *html *bak *jpg *pdf *zip 
-       $(RM)  $(DOC_TMP)
-
-
-# Generate single page html. Used only for creating pdf docs (ATM).
-doc-shtml:
-       test -f $(DOC_DIR)/doc_version.tmp || exit 1
-       $(DB) -iuser-man -V nochunks user-manual.sgml > $(DOC_TMP)/privoxy-user-manual.html
-       $(DB) -V nochunks developer-manual.sgml > $(DOC_TMP)/privoxy-developer-manual.html
-       $(DB) -V nochunks faq.sgml > $(DOC_TMP)/privoxy-faq.html
-
-# Create release announcement in text and html, with short and long versions.
-# This is a standalone target, and must be invoked directly.
-announce: $(DOC_DIR)/doc_version.tmp
-       cd $(DOC_TMP) && $(DB) -iannounce-big ../announce.sgml &&\
-       mv -f index.html announce.html && $(WDUMP) announce.html > announce.txt
-       cd $(DOC_TMP) && $(DB) ../announce.sgml &&\
-       mv -f index.html announce-mini.html && $(WDUMP) announce-mini.html > announce-mini.txt &&\
-       mv -f *html *txt $(ROOT) 
-       $(MAKE) doc-clean
-       @$(ECHO) Announce texts are done. Please check them. Some hand editing
-       @$(ECHO) may be required.
-
-# The main Privoxy config file, generated from sgml sources. 
-# NOTE: This will require some hand editing. The new file is outputted 
-# as config.new so that problem sections can be compared to previous
-# version. This is hardcored to w3m for html/text conversion. Also, 
-# requires the shell util 'fmt'.
-config-file: $(DOC_DIR)/doc_version.tmp
-       $(DB)-notoc -iconfig-file -V nochunks config.sgml > tmp.html &&\
-       w3m -dump tmp.html |fmt -w 70 > $(ROOT)/config.new && $(RM) tmp.*
-       $(PERL) -pi.bak -e 's/^1\. \@\@TITLE\@\@/     /i;\
-                     /^\d\.\d\.\s+/ && tr/[a-z]/[A-Z]/;\
-                     $$header_len=0 unless $$hit_header;\
-                     if ($$hit_header) {\
-                        print "#  ";\
-                        for ($$i=1; $$i < $$header_len; $$i++) {print "=";}\
-                        print "\n";\
-                     };\
-                     $$hit_header=0;\
-                     $$hit_header=1 if m/^(\d\.)(\d\.)(\d\.)?\s/ && s/^(\d\.)//;\
-                     $$header_len = length($$_);\
-                                s/^/#  /;  /^#  #{12,}/ && s/^#  #/####/;\
-                     s/^.*$$// if $$hit_option;\
-                     $$hit_option=0;\
-                     s/^\n//;  s/^#\s*-{20,}//; s/ *$$//;\
-                     $$hit_option=1 if s/^#\s+@@//;'   $(ROOT)/config.new
-       $(RM) $(ROOT)/*.bak *.tmp tmp.* $(DOC_TMP)
-       @$(ECHO)  "****************************************************"
-       @$(ECHO)  "The output file is config.new."
-       @$(ECHO)  "Now -- you need to hand edit the results!!!"
-       @$(ECHO)  "In particular, check the Debug levels, the"
-       @$(ECHO)  "permit-access, forward & socks examples and the"
-       @$(ECHO)  "various user-manual examples, which all"
-       @$(ECHO)  "probably got hammered."
-       @$(ECHO)  "****************************************************"
-
-# config file, alternate verison using lynx (perl stuff unfinished). Lynx
-# does not do so good a job.
-config-file-alt: doc-release ensure-wdump
-       $(ECHO) -e ".h2 JUSTIFY\\nJUSTIFY:FALSE" > tmp.lynx_cfg &&\
-       $(DB)-notoc -iconfig-file -V nochunks config.sgml > tmp.html &&\
-       lynx -cfg=tmp.lynx_cfg -width=78 -dump tmp.html > ../../config.new && $(RM) tmp.*
-       $(PERL) -pi -e 's/^(   )//;\
-                       s/:$\/:\n/' $(ROOT)/config.new
-
-# This is mostly to catch cruft from build failures
-doc-clean:
-       $(RM) $(DOC_TMP) *.html `find $(ROOT) -name "tmp.*" -o -name "*.tmp" -o -name "*.bak" -o -name "*.fot"`
-
-tidy:
-       $(RM) doc_* `find . -name "*~"` `find . -name ".\#*"`
-
-clobber: tidy clean
-       $(RM) GNUmakefile ldp.dsl
-
-distclean: clobber
-
-coffee:
-        @perl -e 'print pack "C*", (31,139,8,8,153,63,226,60,2,3,99,111,102,102,101,101,0,109,143,205,13,192,32,8,133,\
-                  239,78,241,110,234,1,28,160,171,152,208,53,26,117,247,22,165,73,137,125,9,1,62,126,2,128,169,5,243,143,\
-                  13,139,49,164,65,100,149,152,102,73,141,88,73,178,116,205,100,69,253,36,102,81,49,83,236,19,225,171,131,\
-                  214,172,163,73,4,168,123,115,71,126,247,122,94,128,178,227,95,154,12,86,215,122,197,249,146,187,54,220,125,\
-                  193,51,228,11,1,0,0);'|zcat
-
-#############################################################################
-
-# $Log: GNUmakefile.in,v $
-# Revision 1.8  2002/09/26 22:51:16  hal9
-# New user-manual examples in config-file are wrapping now. Add warning.
-#
-# Revision 1.7  2002/09/16 06:04:34  hal9
-# Improved $(VERSION) handling, and related cleanups, with minor changes to most
-# targets. Renamed all dok-* targets to doc-*, and added some backward
-# compatibility targets.
-#
-# Revision 1.6  2002/09/06 01:58:28  hal9
-# Create a separate INSTALL file, and remove install instructions from README.
-# INSTALL is built from dok-readme target.
-#
-# Revision 1.5  2002/09/05 23:12:04  hal9
-# Updated Makefile with 3.0 changes (pdf and man targets, etc). Revise comments
-# in privoxy-man-page.sgml to remove out of date comments.
-#
-# Revision 1.4  2002/08/08 01:02:26  hal9
-# Update pdf2 target to dok-shtml (for single page html)
-#
-# Revision 1.3  2002/06/07 00:27:04  hal9
-# Fixing man2html quirk that pulls in punctuation, and breaks URLs.
-#
-# Revision 1.2  2002/06/05 04:17:19  hal9
-# Add dok-man-test target as temp workaround for docbook2man ignoring -i command
-# line option.
-#
-# Revision 1.1  2002/06/05 00:28:28  hal9
-# Moving all doc building to doc/source. Rewrite all targets (not well tested).
-# Docs are now built without touching sgml source.
-#
index 4d262c9..549d6b4 100644 (file)
@@ -5,10 +5,10 @@
 <!entity contacting SYSTEM "../contacting.sgml">
 <!entity history SYSTEM "../history.sgml">
 <!entity newfeatures SYSTEM "../newfeatures.sgml">
 <!entity contacting SYSTEM "../contacting.sgml">
 <!entity history SYSTEM "../history.sgml">
 <!entity newfeatures SYSTEM "../newfeatures.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
+<!entity p-version "3.0.0">
+<!entity p-status "stable">
 <!entity % p-not-stable "IGNORE">
 <!entity % p-not-stable "IGNORE">
-<!entity % p-stable "IGNORE">
+<!entity % p-stable "INCLUDE">
 <!entity % p-supp-userman "IGNORE">
 <!entity % p-text "INCLUDE">       <!-- define we are a text only doc    -->
 <!entity % p-doc "IGNORE">         <!-- and never a text doc             -->
 <!entity % p-supp-userman "IGNORE">
 <!entity % p-text "INCLUDE">       <!-- define we are a text only doc    -->
 <!entity % p-doc "IGNORE">         <!-- and never a text doc             -->
index d9df232..c2a1ba3 100644 (file)
@@ -26,9 +26,9 @@
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
 <!entity % dummy "IGNORE"> 
 <!entity authors SYSTEM "p-authors.sgml">
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
 <!entity % dummy "IGNORE"> 
 <!entity authors SYSTEM "p-authors.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
-<!entity % p-not-stable "IGNORE">
+<!entity p-version "2.9.15">
+<!entity p-status "beta">
+<!entity % p-not-stable "INCLUDE">
 <!entity % p-stable "IGNORE">
 <!entity % p-text "INCLUDE">           <!-- define we are a text only doc -->
 <!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
 <!entity % p-stable "IGNORE">
 <!entity % p-text "INCLUDE">           <!-- define we are a text only doc -->
 <!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
index a24da21..963760a 100644 (file)
@@ -3,7 +3,7 @@
 
  Purpose     :  Entity included in other project documents.
                 
 
  Purpose     :  Entity included in other project documents.
                 
- $Id: buildsource.sgml,v 2.3 2002/09/06 01:58:28 hal9 Exp $
+ $Id: buildsource.sgml,v 1.9.2.3 2003/11/06 13:36:37 oes Exp $
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
@@ -18,7 +18,7 @@
  This file is included into:
 
   user-manual
  This file is included into:
 
   user-manual
-  INSTALL
+  README
 
 -->
 
 
 -->
 
@@ -34,7 +34,7 @@
 <para>
  When building from a source tarball (either release version or
  <ulink
 <para>
  When building from a source tarball (either release version or
  <ulink
- url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz">nightly CVS
+ url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2">nightly CVS
  tarball</ulink>), first unpack the source: 
 </para>
 
  tarball</ulink>), first unpack the source: 
 </para>
 
 </para>
 
 <para>
 </para>
 
 <para>
- You can also check out any <application>Privoxy</application>
- <quote>branch</quote>, just exchange the <application>current</application>
- name with the wanted branch name (Example: v_3_0_branch for the 3.0 cvs
- tree).
-</para>
-
-<para>
- It is also recommended to not run <application>Privoxy</application> as 
- root, and instead it is suggested to create a <quote>privoxy</quote> user for
- this purpose.
-</para>
-
-<para>
- <filename>/etc/passwd</filename> might then look like:
-</para>
-
-<para>
- <screen>  privoxy:*:7777:7777:privoxy proxy:/no/home:/no/shell</screen>
-</para>
-
-<para>
- And then <filename>/etc/group</filename>, like:
-</para>
-
-<para>
- <screen>  privoxy:*:7777:privoxy</screen>
-</para>
-
-<para>
- Some binary packages may do this for you.
-</para>
-
-<para>
- Then, to build from either unpacked tarball or CVS source:
+ Then, in either case, to build from unpacked tarball or CVS source:
 </para>
 
 <para>
 </para>
 
 <para>
  make install     # (to really install)
 </screen>
 </para>
  make install     # (to really install)
 </screen>
 </para>
-<!--
-/we hope this is fixed! 09/24/02
-<warning>
- <para> 
-  The <quote>make install</quote> target is temporary quite broken! It is
-  recommended to use a binary package, or do a source build, and manually 
-  install the components. Sorry.
- </para>
-</warning>
--->
+
 <para>
 <para>
-  If you have GNU <command>make</command>, you can have the first four steps
+  If you have gnu make, you can have the first four steps 
   automatically done for you by just typing:
 </para>
 
   automatically done for you by just typing:
 </para>
 
   in the freshly downloaded or unpacked source directory.
 </para>
 
   in the freshly downloaded or unpacked source directory.
 </para>
 
-<para>
- The default installation path for <command>make install</command> is 
- <filename>/usr/local</filename>. This may of course be customized with 
- the various <command>./configure</command> path options.
- <command>configure</command> also accepts a <literal>--with-user</literal> and
- <literal>--with-group</literal> options for setting user and group
- ownership.
-</para>
-
-<para>
- If you do install to <filename>/usr/local</filename>, the install will use
- <literal>sysconfdir=$prefix/etc/privoxy</literal> by default. All other
- destinations, and the direct usage of <literal>--sysconfdir</literal> flag
- behave like normal, i.e. will not add the extra <filename>privoxy</filename>
- directory. This is for a safer install, as there may already exist another
- program that uses a file with the <quote>config</quote> name, and thus makes
- <filename>/usr/local/etc</filename> cleaner.
-</para>
-
-<para>
- If installing to <filename>/usr/local</filename>, the docs will go by default
- to <filename>$prefix/share/doc</filename>. But if this directory doesn't
- exist, it will then try <filename>$prefix/doc</filename> and install there before
- creating a new <filename>$prefix/share/doc</filename> just for
- <application>Privoxy</application>.
-</para>
-
-<para>
- Again, if the installs goes to <filename>/usr/local</filename>, the
- <literal>localstatedir</literal> (ie: var/) will default to
- <filename>/var</filename> instead of <literal>$prefix/var</literal> so the
- logs will go to <filename>/var/log/privoxy/</filename>, and the pid file will
- be created in <filename>/var/run/privoxy.pid</filename>. 
-</para>
-
-<para>
- <command>make install</command> will attempt to set the correct values 
- in <filename>config</filename> (main configuration file). If appropriate,
- an init script will be installed, but it is up to the user to determine 
- how and where to start <application>Privoxy</application>.
-</para>
-
 <para>
  For more detailed instructions on how to build Redhat and SuSE RPMs,
  Windows self-extracting installers, building on platforms with
 <para>
  For more detailed instructions on how to build Redhat and SuSE RPMs,
  Windows self-extracting installers, building on platforms with
 </para>
 
 <!-- print for README only -->
 </para>
 
 <!-- print for README only -->
-<!-- Actually this is now in INSTALL -->
  <![%p-readme;[
  <para>
  <![%p-readme;[
  <para>
-  For binary RPM installation, and other platforms, see the User Manual
+  For binary RPM installation, and other platforms, see the user-manual 
   as well.
  </para>
 ]]>
   as well.
  </para>
 ]]>
index 28920ae..1b6de2d 100644 (file)
@@ -1,14 +1,14 @@
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[
 <!entity % dummy "IGNORE"> 
 <!entity config SYSTEM "p-config.sgml">
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[
 <!entity % dummy "IGNORE"> 
 <!entity config SYSTEM "p-config.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
-<!entity % p-not-stable "IGNORE">
+<!entity p-version "2.9.15">
+<!entity p-status "beta">
+<!entity % p-not-stable "INCLUDE">
 <!entity % user-man "IGNORE">
 <!entity % config-file "IGNORE">
 ]>
 <!--
 <!entity % user-man "IGNORE">
 <!entity % config-file "IGNORE">
 ]>
 <!--
- File        :  $Source: /cvsroot/ijbswa/current/doc/source/Attic/config.sgml,v $
+ File        :  $Source: /cvsroot/ijbswa/current/doc/source/config.sgml,v $
 
  Purpose     :  config file generation
                 
 
  Purpose     :  config file generation
                 
index 98bc8a9..8e6dfe8 100644 (file)
@@ -3,9 +3,9 @@
 
  Purpose     :  Entity included in other project documents.
                 
 
  Purpose     :  Entity included in other project documents.
                 
- $Id: contacting.sgml,v 1.15.2.2 2002/07/26 15:21:33 oes Exp $
+ $Id: contacting.sgml,v 1.15.2.3 2004/01/30 12:34:33 oes Exp $
 
 
- Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
+ Copyright (C) 2001 - 2004 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  ======================================================================
  See LICENSE.
 
  ======================================================================
@@ -35,8 +35,8 @@
 
 <sect2 id="contact-support"><title>Get Support</title>
 <para>
 
 <sect2 id="contact-support"><title>Get Support</title>
 <para>
- For casual users, our support forum at
- <ulink url="http://sourceforge.net/">SourceForge</ulink>
+ For casual users, our 
+ <ulink url="http://sourceforge.net/tracker/?group_id=11118&#38;atid=211118">support forum at SourceForge</ulink>
  is probably best suited:
  <ulink url="http://sourceforge.net/tracker/?group_id=11118&#38;atid=211118">http://sourceforge.net/tracker/?group_id=11118&#38;atid=211118</ulink>
 </para>
  is probably best suited:
  <ulink url="http://sourceforge.net/tracker/?group_id=11118&#38;atid=211118">http://sourceforge.net/tracker/?group_id=11118&#38;atid=211118</ulink>
 </para>
index 5ab7eaa..671335a 100644 (file)
@@ -3,9 +3,9 @@
 
  Purpose     :  Entity included in other project documents.
                 
 
  Purpose     :  Entity included in other project documents.
                 
- $Id: copyright.sgml,v 1.7 2002/05/10 01:48:19 hal9 Exp $
+ $Id: copyright.sgml,v 1.7.2.2 2004/01/29 22:41:02 hal9 Exp $
 
 
- Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
+ Copyright (C) 2001-2004 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  ======================================================================
  See LICENSE.
 
  ======================================================================
@@ -36,7 +36,7 @@
 -->
 
 <para>
 -->
 
 <para>
- Copyright &my-copy; 2001, 2002 by Privoxy Developers <email>developers@privoxy.org</email>
+ Copyright &my-copy; 2001 - 2004 by Privoxy Developers <email>developers@privoxy.org</email>
 </para>
 
 <para>
 </para>
 
 <para>
index bcf2e9f..93f2383 100644 (file)
@@ -8,10 +8,10 @@
 <!entity contacting SYSTEM "contacting.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
 <!entity contacting SYSTEM "contacting.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
+<!entity p-version "3.0.0">
+<!entity p-status "stable">
 <!entity % p-not-stable "IGNORE">
 <!entity % p-not-stable "IGNORE">
-<!entity % p-stable "IGNORE">
+<!entity % p-stable "INCLUDE">
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity  my-copy "&copy;">        <!-- kludge for docbook2man            -->
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity  my-copy "&copy;">        <!-- kludge for docbook2man            -->
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
                 
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
                 
- $Id: developer-manual.sgml,v 2.5 2002/09/26 21:50:39 hal9 Exp $
+ $Id: developer-manual.sgml,v 1.46.2.11 2002/12/11 13:12:15 hal9 Exp $
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  ========================================================================
  NOTE: Please read developer-manual/documentation.html before touching 
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  ========================================================================
  NOTE: Please read developer-manual/documentation.html before touching 
- anything in this, or other Privoxy documentation. 
+ anything in this, or other Privoxy documentation. You have been warned!
+ Failure to abide by this rule will result in the revocation of your license 
+ to live a peaceful existence!
  ========================================================================
 
 -->
  ========================================================================
 
 -->
@@ -48,7 +50,7 @@
     </pubdate>
 
 
     </pubdate>
 
 
-    <pubdate>$Id: developer-manual.sgml,v 2.5 2002/09/26 21:50:39 hal9 Exp $</pubdate>
+    <pubdate>$Id: developer-manual.sgml,v 1.46.2.11 2002/12/11 13:12:15 hal9 Exp $</pubdate>
 
 <!--
 
 
 <!--
 
@@ -93,9 +95,8 @@ Hal.
 <!-- end boilerplate -->
 
 <para>
 <!-- end boilerplate -->
 
 <para>
- <![%p-stable;[
  Please note that this document is constantly evolving. This copy represents
  Please note that this document is constantly evolving. This copy represents
- the state at the release of version &p-version;. ]]>
+ the state at the release of version &p-version;.
  You can find the latest version of the this manual at <ulink
  url="http://www.privoxy.org/developer-manual/">http://www.privoxy.org/developer-manual/</ulink>.
  Please see <link linkend="contact">the Contact section</link> 
  You can find the latest version of the this manual at <ulink
  url="http://www.privoxy.org/developer-manual/">http://www.privoxy.org/developer-manual/</ulink>.
  Please see <link linkend="contact">the Contact section</link> 
@@ -201,12 +202,11 @@ Hal.
        is always at least one <quote>branch</quote> from the main trunk
        devoted to a stable release series. The main trunk is where active
        development takes place for the next stable series (e.g. 3.2.x).
        is always at least one <quote>branch</quote> from the main trunk
        devoted to a stable release series. The main trunk is where active
        development takes place for the next stable series (e.g. 3.2.x).
-       And for testing bugfixes for the stable series. Just prior to each
-       stable series (e.g. 3.0.x), a branch is created just for stable series
-       releases (e.g. 3.0.0 -> 3.0.1 -> 3.0.2, etc). Once the initial stable
-       release of any stable branch has taken place, this branch is
-       <emphasis>only used for bugfixes</emphasis>, which have had prior
-       testing before being committed to CVS. (See <link
+       So just prior to each stable series (e.g. 3.0.x), a branch is created
+       just for stable series releases (e.g. 3.0.0 -> 3.0.1 -> 3.0.2, etc).
+       Once the initial stable release of any stable branch has taken place,
+       this branch is <emphasis>only used for bugfixes</emphasis>, which have
+       had prior testing before being committed to CVS. (See <link
        linkend="versionnumbers">Version Numbers</link> below for details on
        versioning.)
      </para>
        linkend="versionnumbers">Version Numbers</link> below for details on
        versioning.)
      </para>
@@ -272,10 +272,10 @@ Hal.
       </para>
       
       <para>
       </para>
       
       <para>
-       Stable branches are handled with decidedly more care, especially after
-       the initial *.*.0 release, and we are just in bugfix mode. In addition
-       to the above, the below applies only to the stable branch (currently
-       the <literal>v_3_0_branch</literal> branch):
+       Stable branches are handled with more care, especially after the 
+       initial *.*.0 release, and we are just in bugfix mode. In addition to 
+       the above, the below applies only to the stable branch (currently the 
+       <literal>v_3_0_branch</literal> branch):
       </para>
       
       <para>
       </para>
       
       <para>
@@ -1857,7 +1857,7 @@ static void unload_re_filterfile( void *f ) { ... }</programlisting>
 
     <para><emphasis>Example for file comments:</emphasis></para>
 <programlisting>
 
     <para><emphasis>Example for file comments:</emphasis></para>
 <programlisting>
-const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.5 2002/09/26 21:50:39 hal9 Exp $";
+const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 1.46.2.11 2002/12/11 13:12:15 hal9 Exp $";
 /*********************************************************************
  *
  * File        :  $S<!-- Break CVS Substitution -->ource$
 /*********************************************************************
  *
  * File        :  $S<!-- Break CVS Substitution -->ource$
@@ -1917,7 +1917,7 @@ const char FILENAME_h_rcs[] = FILENAME_H_VERSION;
 <programlisting>
 #ifndef _FILENAME_H
 #define _FILENAME_H
 <programlisting>
 #ifndef _FILENAME_H
 #define _FILENAME_H
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.5 2002/09/26 21:50:39 hal9 Exp $"
+#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 1.46.2.11 2002/12/11 13:12:15 hal9 Exp $"
 /*********************************************************************
  *
  * File        :  $S<!-- Break CVS Substitution -->ource$
 /*********************************************************************
  *
  * File        :  $S<!-- Break CVS Substitution -->ource$
@@ -2095,7 +2095,7 @@ at sourceforge. Three simple steps:
     <para>
       First you need to determine which version number the release will have. 
       <application>Privoxy</application> version numbers consist of three numbers,
     <para>
       First you need to determine which version number the release will have. 
       <application>Privoxy</application> version numbers consist of three numbers,
-      separated by dots, like in X.Y.Z (e.g. <literal>3.0.0</literal>), where:
+      separated by dots, like in X.Y.Z (e.g. 3.0.0), where:
         <itemizedlist>
           <listitem>
             <para>
         <itemizedlist>
           <listitem>
             <para>
@@ -3029,22 +3029,16 @@ at sourceforge. Three simple steps:
   Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
   $Log: developer-manual.sgml,v $
   Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
   $Log: developer-manual.sgml,v $
-  Revision 2.5  2002/09/26 21:50:39  hal9
+  Revision 1.46.2.11  2002/12/11 13:12:15  hal9
+  Rewrite cvs write access give-away section.
+
+  Revision 1.46.2.10  2002/09/26 21:53:45  hal9
   Changes to reflect recent change in stable branch commit policy (hopefully
   clearer now).
 
   Changes to reflect recent change in stable branch commit policy (hopefully
   clearer now).
 
-  Revision 2.4  2002/09/26 05:57:14  hal9
-  Conditionally exclude 'this doc is evolving' comment in intro for non release
-  situations.
-
-  Revision 2.3  2002/09/05 02:27:59  hal9
-  Mention tested stable branch fixes in main trunk, as alternate to posting
-  patches.
-
-  Revision 2.2  2002/09/04 01:55:44  hal9
-  Migrating developer manual, and related sgml files from 3.0. Add additional
-  commentary on cvs, versioning, stable branches, and how to handle stable
-  branches in cvs.
+  Revision 1.46.2.9  2002/09/26 01:21:40  hal9
+  Porting 3.1.1 changes: more on cvs and branches, more on versions and
+  releases.
 
   Revision 1.46.2.8  2002/08/17 00:16:10  hal9
   Add note on updating webserver for User-manual/CGI editor, which is version
 
   Revision 1.46.2.8  2002/08/17 00:16:10  hal9
   Add note on updating webserver for User-manual/CGI editor, which is version
index af9d6d6..dfdd88c 100644 (file)
@@ -8,10 +8,10 @@
 <!entity history SYSTEM "history.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
 <!entity history SYSTEM "history.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
+<!entity p-version "3.0.3">
+<!entity p-status "stable">
 <!entity % p-not-stable "IGNORE">
 <!entity % p-not-stable "IGNORE">
-<!entity % p-stable "IGNORE">
+<!entity % p-stable "INCLUDE">
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity % p-supp-userman "INCLUDE"> <!-- Include all from supported.sgml -->
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity % p-supp-userman "INCLUDE"> <!-- Include all from supported.sgml -->
@@ -24,9 +24,9 @@
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
                 
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
                 
- $Id: faq.sgml,v 2.9 2002/10/29 03:22:22 hal9 Exp $
+ $Id: faq.sgml,v 1.61.2.41 2004/04/05 13:44:05 oes Exp $
 
 
- Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
+ Copyright (C) 2001-2004 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  Based partially on the Internet Junkbuster FAQ originally written by and
  See LICENSE.
 
  Based partially on the Internet Junkbuster FAQ originally written by and
 
  ========================================================================
  NOTE: Please read developer-manual/documentation.html before touching 
 
  ========================================================================
  NOTE: Please read developer-manual/documentation.html before touching 
- anything in this, or other Privoxy documentation. You have been warned!
- Failure to abide by this rule will result in the revocation of your license 
- to live a peaceful existence!
+ this file!
+
+ Please we keep the info in this file as version independent as possible 
+ so we only have to maintain one FAQ. Where significant changes are 
+ made to Privoxy configuration, please note the change in such a way that 
+ it makes sense to both users of older and newer versions.
  ========================================================================
 
 
  ========================================================================
 
 
  <subscript>
 <!-- Completely the wrong markup, but very little is allowed  -->
 <!-- in this part of an article. FIXME -->
  <subscript>
 <!-- Completely the wrong markup, but very little is allowed  -->
 <!-- in this part of an article. FIXME -->
- <link linkend="copyright">Copyright</link> &my-copy; 2001, 2002 by 
+ <link linkend="copyright">Copyright</link> &my-copy; 2001-2004 by 
  <ulink url="http://www.privoxy.org">Privoxy Developers</ulink>
  </subscript>
 </pubdate>
 
  <ulink url="http://www.privoxy.org">Privoxy Developers</ulink>
  </subscript>
 </pubdate>
 
-<pubdate>$Id: faq.sgml,v 2.9 2002/10/29 03:22:22 hal9 Exp $</pubdate>
+<pubdate>$Id: faq.sgml,v 1.61.2.41 2004/04/05 13:44:05 oes Exp $</pubdate>
 
 <!--
 
 
 <!--
 
@@ -126,9 +129,8 @@ Hal.
 <!-- end boilerplate -->
 
  <para>
 <!-- end boilerplate -->
 
  <para>
-  <![%p-stable;[
   Please note that this document is constantly evolving. This copy represents
   Please note that this document is constantly evolving. This copy represents
-  the state at the release of version &p-version;. ]]>
+  the state at the release of version &p-version;.
   You can find the latest version of the document at <ulink
   url="http://www.privoxy.org/faq/">http://www.privoxy.org/faq/</ulink>.
   Please see the <link linkend="contact">Contact section</link> if you want to
   You can find the latest version of the document at <ulink
   url="http://www.privoxy.org/faq/">http://www.privoxy.org/faq/</ulink>.
   Please see the <link linkend="contact">Contact section</link> if you want to
@@ -274,8 +276,8 @@ an ad, and what is not?</title>
 This does not sound very scientific.</title>
 <para>
  Actually, it's a black art ;-) And yes, it is always possible to have a broad
 This does not sound very scientific.</title>
 <para>
  Actually, it's a black art ;-) And yes, it is always possible to have a broad
- rule accidentally block or change something by mistake. There is a good chance
you may run into such a situation at some point. It is tricky writing rules to
+ rule accidentally block or change something by mistake. You will almost surely
run into such situations at some point. It is tricky writing rules to
  cover every conceivable possibility, and not occasionally get false positives.
 </para>
 
  cover every conceivable possibility, and not occasionally get false positives.
 </para>
 
@@ -290,6 +292,24 @@ This does not sound very scientific.</title>
 </sect2>
 
 
 </sect2>
 
 
+<sect2 renderas="sect3">
+<title id="configornot">Will I have to configure <application>Privoxy</application>
+ before I can use it?</title>
+<para>
+ No, not really. The default installation should give you a good starting
+ point, and block <emphasis>most</emphasis> unwanted content.
+</para>
+<para>
+ But you will certainly run into situations where there are false positives,
+ or ads not being blocked that you may not want to see. In these cases, you
+ would certainly benefit by customizing <application>Privoxy's</application>
+ configuration to more closely match your individual situation. And we would
+ encourage you to do this. This is where the real power of
+ <application>Privoxy</application> lies!
+</para>
+
+</sect2>
+
 <sect2 renderas="sect3" id="browsers2"><title>My browser does the same things as
 <application>Privoxy</application>. Why should I use
 <application>Privoxy</application> at all?</title>
 <sect2 renderas="sect3" id="browsers2"><title>My browser does the same things as
 <application>Privoxy</application>. Why should I use
 <application>Privoxy</application> at all?</title>
@@ -397,12 +417,13 @@ Include supported.sgml here:
 <sect2 renderas="sect3" id="email-client">
 <title>Can I use <application>Privoxy</application> with my email client?</title>
 <para>
 <sect2 renderas="sect3" id="email-client">
 <title>Can I use <application>Privoxy</application> with my email client?</title>
 <para>
- As long as there is some way to set a HTTP proxy for the client, then yes, 
+ As long as there is some way to set a HTTP proxy for the client, then yes,
  any application can be used, whether it is strictly speaking a
  <quote>browser</quote> or not. Though this may not be the best approach for
  dealing with some of the common abuses of HTML in email. See <link
  any application can be used, whether it is strictly speaking a
  <quote>browser</quote> or not. Though this may not be the best approach for
  dealing with some of the common abuses of HTML in email. See <link
- linkend="outlook">How can I configure <application>Privoxy</application> with
- <application>Outlook Express</application>?</link> below for more on this. 
+ linkend="outlook">How can I configure <application>Privoxy</application>
+ with <application>Outlook Express</application>?</link> below for more on
+ this. 
 </para>
 <para>
  Be aware that HTML email presents a number of unique security and privacy
 </para>
 <para>
  Be aware that HTML email presents a number of unique security and privacy
@@ -440,7 +461,7 @@ special I have to do now?</title>
  as a proxy by specifying the correct proxy address and port number 
  in the appropriate configuration area for the browser. See below.
  You should also flush your browser's memory and disk cache to get rid of any
  as a proxy by specifying the correct proxy address and port number 
  in the appropriate configuration area for the browser. See below.
  You should also flush your browser's memory and disk cache to get rid of any
- cached junk items, and any stored cookies.
+ cached junk items, and remove any stored cookies.
 
 </para>
 
 
 </para>
 
@@ -476,8 +497,7 @@ special I have to do now?</title>
  </para>
  <para>
   <application>Privoxy</application> does not currently handle
  </para>
  <para>
   <application>Privoxy</application> does not currently handle
-  protocols such as FTP, SMTP, IM, IRC, ICQ, or other Internet
-  protocols. 
+  any other protocols such as FTP, SMTP, IM, IRC, ICQ, etc. 
  </para>
 </sect2>
 
  </para>
 </sect2>
 
@@ -491,7 +511,9 @@ All the ads are there. What's wrong?</title>
  the browser's caches to force a full re-reading of pages. You can verify 
  that <application>Privoxy</application> is running, and your browser 
  is correctly configured by entering the special URL: 
  the browser's caches to force a full re-reading of pages. You can verify 
  that <application>Privoxy</application> is running, and your browser 
  is correctly configured by entering the special URL: 
- <ulink url="http://config.privoxy.org/">http://config.privoxy.org/</ulink>.
+ <ulink url="http://p.p/">http://p.p/</ulink>. 
+ <!-- Use http://p.p/ instead of http://config.privoxy.org/ here because
+      of potential redirect caching problem (see next Q). -->
  This should take you to a page titled <quote>This is Privoxy..</quote> with
  access to <application>Privoxy's</application> internal configuration.
  If you see this, then you are good to go. If you receive a page saying 
  This should take you to a page titled <quote>This is Privoxy..</quote> with
  access to <application>Privoxy's</application> internal configuration.
  If you see this, then you are good to go. If you receive a page saying 
@@ -500,11 +522,47 @@ All the ads are there. What's wrong?</title>
  If you receive anything else (probably nothing at all), it could either
  be that the browser is not set up correctly, or that
  <application>Privoxy</application> is not running at all. Check the <ulink
  If you receive anything else (probably nothing at all), it could either
  be that the browser is not set up correctly, or that
  <application>Privoxy</application> is not running at all. Check the <ulink
- url="../user-manual/config.html#LOGFILE">log file</ulink>.
+ url="../user-manual/config.html#LOGFILE">log file</ulink>. For instructions
+ on starting <application>Privoxy</application> and browser configuration,
+ see the <ulink url="http://www.privoxy.org/user-manual/startup.html">chapter
+ on starting <application>Privoxy</application></ulink> in the
+ <ulink url="http://www.privoxy.org/user-manual/">user manual</ulink>.
 </para>
 
 </sect2>
 
 </para>
 
 </sect2>
 
+<sect2 renderas="sect3" id="notused">
+<title>I get a <quote>Privoxy is not being used</quote> dummy page although
+<application>Privoxy</application> is running and being used.</title>
+
+<para>
+ First, make sure that Privoxy is <emphasis>really</emphasis> running and
+ being used by visiting <ulink url="http://p.p/">http://p.p/</ulink>. You
+ should see the <application>Privoxy</application> main page. If not, see
+ the <ulink url="http://www.privoxy.org/user-manual/startup.html">chapter
+ on starting <application>Privoxy</application></ulink> in the
+ <ulink url="http://www.privoxy.org/user-manual/">user manual</ulink>.
+</para>
+
+<para>
+ Now if <ulink url="http://p.p/">http://p.p/</ulink> works for you, but
+ other parts of <application>Privoxy</application>'s web interface show
+ the dummy page, your browser has cached a redirection it encountered before
+ <application>Privoxy</application> was being used. You need to clear your
+ browser's cache. Note that shift-reloading the dummy page won't help, since
+ that'll only refresh the dummy page, not the redirection that lead you there.
+</para>
+
+<para>
+ The procedure for clearing the cache varies from browser to browser. As an
+ example, <application>Mozilla</application> users would click 
+ <guibutton>Edit</guibutton> --> <guibutton>Preferences</guibutton> -->
+ <guibutton>Advanced</guibutton> --> <guibutton>Cache</guibutton> and
+ then click both <quote><guibutton>Clear Memory Cache</guibutton></quote>
+ and <quote><guibutton>Clear Disk Cache</guibutton></quote>.
+</para>
+</sect2>
+
 </sect1>
 
 
 </sect1>
 
 
@@ -597,7 +655,6 @@ way to do this?</title>
 </sect2>
 
 
 </sect2>
 
 
-<!--   ~~~~~       New section      ~~~~~     -->
 <sect2 renderas="sect3">
 <title>There are several different <quote>actions</quote> files. What are
 the differences?</title>
 <sect2 renderas="sect3">
 <title>There are several different <quote>actions</quote> files. What are
 the differences?</title>
@@ -643,152 +700,29 @@ the differences?</title>
 </sect2>
 
 <sect2 renderas="sect3" id="configfiles"> <title>What's the difference between the
 </sect2>
 
 <sect2 renderas="sect3" id="configfiles"> <title>What's the difference between the
-<quote>Cautious</quote>, <quote>Medium</quote> and <quote>Radical</quote> defaults?</title>
+<quote>Cautious</quote>, <quote>Medium</quote> and <quote>Adventuresome</quote> defaults?</title>
  <para>
   Configuring <application>Privoxy</application> is not entirely trivial. To
   help you get started, we provide you with three different default action
   <quote>profiles</quote> in the web based actions file editor at <ulink
   url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
  <para>
   Configuring <application>Privoxy</application> is not entirely trivial. To
   help you get started, we provide you with three different default action
   <quote>profiles</quote> in the web based actions file editor at <ulink
   url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
-  The following table shows you, which of the most important features are
-  enabled in each configuration:
+  See the <ulink url="../user-manual/actions-file.html"><citetitle>User
+  Manual</citetitle></ulink> for a list of actions, and how the default 
+  profiles are set.
  </para>
  </para>
- <para>
-<table frame=all><title>Default Configurations</title>
-<tgroup cols=4 align=left colsep=1 rowsep=1>
-<colspec colname=c1>
-<colspec colname=c2>
-<colspec colname=c3>
-<colspec colname=c4>
-<thead>
-<row>
-  <entry>Feature</entry>
-  <entry>Cautious</entry>
-  <entry>Intermadiate</entry>
-  <entry>Radical</entry>
-</row>
-</thead>
-<!--  <tfoot> -->
-<!--  <row> -->
-<!--    <entry>f1</entry> -->
-<!--    <entry>f2</entry> -->
-<!--    <entry>f3</entry> -->
-<!--    <entry>f4</entry> -->
-<!--  </row> -->
-<!--  </tfoot> -->
-<tbody>
-
-<row>
-  <entry>Ad-blocking by URL</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Ad-filtering by size</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>GIF de-animation</entry>
-  <entry>no</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Referer forging</entry>
-  <entry>no</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Cookie handling</entry>
-  <entry>none</entry>
-  <entry>session-only</entry>
-  <entry>kill</entry>
-</row>
-
-<row>
-  <entry>Pop-up killing</entry>
-  <entry>no</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Fast redirects</entry>
-  <entry>no</entry>
-  <entry>no</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>HTML taming</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>JavaScript taming</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Web-bug killing</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Fun text replacements</entry>
-  <entry>no</entry>
-  <entry>no</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Image tag reordering</entry>
-  <entry>no</entry>
-  <entry>no</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Ad-filtering by link</entry>
-  <entry>no</entry>
-  <entry>no</entry>
-  <entry>yes</entry>
-</row>
-
-<row>
-  <entry>Demoronizer</entry>
-  <entry>no</entry>
-  <entry>no</entry>
-  <entry>yes</entry>
-</row>
-
-</tbody>
-</tgroup>
-</table>
-</para>
+
 <para>
  Where the defaults are likely to break some sites, exceptions for
  known popular <quote>problem</quote> sites are included, but in
 <para>
  Where the defaults are likely to break some sites, exceptions for
  known popular <quote>problem</quote> sites are included, but in
- general, the more aggressive your default settings are, the more
exceptions you will have to make later. See the <ulink
- url="../user-manual/index.html">user manual</ulink> for a more
- deatiled discussion.
+ general, the more aggressive your default settings are, the more exceptions
+ you will have to make later. See the <ulink
+ url="../user-manual/index.html"><citetitle>User Manual</citetitle></ulink>
for a more deatiled discussion.
 </para>
 </para>
+
 <para>
 <para>
- It should be noted that the <quote>Radical</quote> profile is not only more
+ It should be noted that the <quote>Adventuresome</quote> profile (formerly known 
+ as the <quote>Advanced</quote> profile) is not only more
  aggressive, but also includes fun and, extreme usage of most of
  <application>Privoxy's</application> features. Use at your own risk!
 </para>
  aggressive, but also includes fun and, extreme usage of most of
  <application>Privoxy's</application> features. Use at your own risk!
 </para>
@@ -868,7 +802,7 @@ with a browser? Does that not raise security issues?</title>
  url="../user-manual/config.html#LISTEN-ADDRESS">listen-address</ulink></literal>
  option, which may be commented out with a <quote>#</quote> symbol. Make sure
  it is uncommented, and assign it the address of the LAN gateway interface,
  url="../user-manual/config.html#LISTEN-ADDRESS">listen-address</ulink></literal>
  option, which may be commented out with a <quote>#</quote> symbol. Make sure
  it is uncommented, and assign it the address of the LAN gateway interface,
- and port number to use. Assuming your server's LAN address is 192.168.1.1 and you
+ and port number to use. Assuming your LAN address is 192.168.1.1 and you
  wish to run <application>Privoxy</application> on port 8118, this line
  should look like:
 </para>
  wish to run <application>Privoxy</application> on port 8118, this line
  should look like:
 </para>
@@ -908,7 +842,7 @@ with a browser? Does that not raise security issues?</title>
 
 <para>
  If you run <application>Privoxy</application> on a LAN with untrusted users,
 
 <para>
  If you run <application>Privoxy</application> on a LAN with untrusted users,
- we recommend that you double-check all <ulink
+ we recommend that you double-check the <ulink
  url="../user-manual/config.html#ACCESS-CONTROL">access control and security</ulink>
  options!
 </para>
  url="../user-manual/config.html#ACCESS-CONTROL">access control and security</ulink>
  options!
 </para>
@@ -1073,6 +1007,7 @@ on Win2K/NT?</title>
 </para>
 </sect2>
 
 </para>
 </sect2>
 
+
 <sect2 renderas="sect3" id="otherproxy">
 <title>How can I make <application>Privoxy</application> work with other 
 proxies like <application>Squid</application>?</title>
 <sect2 renderas="sect3" id="otherproxy">
 <title>How can I make <application>Privoxy</application> work with other 
 proxies like <application>Squid</application>?</title>
@@ -1139,8 +1074,8 @@ and thus avoid individual browser configuration?</title>
  <application>Privoxy</application> just blindly proxies all requests. In the
  case of <application>Outlook Express</application> (see above), OE uses 
  IE anyway, and there is no way for <application>Privoxy</application> to ever 
  <application>Privoxy</application> just blindly proxies all requests. In the
  case of <application>Outlook Express</application> (see above), OE uses 
  IE anyway, and there is no way for <application>Privoxy</application> to ever 
- be able to distinguish between them (nor could any other proxy type
application for that matter).
+ be able to distinguish between them (nor could any other proxy type application for
+ that matter).
 </para>
 <para>
  For a good discussion of some of the issues involved (including privacy and 
 </para>
 <para>
  For a good discussion of some of the issues involved (including privacy and 
@@ -1172,7 +1107,7 @@ and thus avoid individual browser configuration?</title>
  be off by default anyway, so this might be redundant, but there is no harm
  being explicit in what you want to happen. <filename>user.action</filename>
  includes an alias for this situation, called
  be off by default anyway, so this might be redundant, but there is no harm
  being explicit in what you want to happen. <filename>user.action</filename>
  includes an alias for this situation, called
- <literal>allow-cookies</literal>.
+ <literal>allow-all-cookies</literal>.
 </para>
 </sect2>
 
 </para>
 </sect2>
 
@@ -1226,7 +1161,12 @@ delays in page requests compared to the old Junkbuster. What's wrong?</title>
  noticeable on slow dialup connections.
  </para>
 <para>
  noticeable on slow dialup connections.
  </para>
 <para>
- Filtering is automatically disabled for inappropriate MIME types.
+ Filtering is automatically disabled for inappropriate MIME types. But note 
+ that if the web server mis-reports the MIME type, then content that should
+ not be filtered, could be. <application>Privoxy</application> only knows how
+ to differentiate filterable content because of the MIME type as reported by
+ the server, or because of some configuration setting that enables/disables
+ filtering.
 
 </para>
 </sect2>
 
 </para>
 </sect2>
@@ -1577,24 +1517,65 @@ from a webserver? FTP server?</title>
  viewing a document (i.e. a page), and downloading a file. The same is true of
  <application>Privoxy</application>. If there is a match for a <literal><ulink
  url="../user-manual/actions-file.html#BLOCK">block</ulink></literal> pattern,
  viewing a document (i.e. a page), and downloading a file. The same is true of
  <application>Privoxy</application>. If there is a match for a <literal><ulink
  url="../user-manual/actions-file.html#BLOCK">block</ulink></literal> pattern,
- it will still be blocked, and of course this is obvious. Filtering is
- potentially more of a concern since the results are not always so obvious.
+ it will still be blocked, and of course this is obvious. 
+ </para>
+ <para>
+ Filtering is potentially more of a concern since the results are not always
+ so obvious, and the effects of filtering are there whether the file is simply
+ viewed, or downloaded. And potentially whether the content is some obnoxious
+ advertizement, or Mr. Jimmy's latest/greatest source code jewel. Of course,
+ one of these presumably is <quote>bad</quote> content that we don't want, and
+ the other is <quote>good</quote> content that we do want.
+ <application>Privoxy</application> is blind to the differences, and can only
+ distinguish <quote>good from bad</quote> by the configuration parameters
+ <emphasis>we</emphasis> give it.
 </para>
 <para>
  <application>Privoxy</application> knows the differences in files according
  to the <quote>Document Type</quote> as reported by the webserver. If this is
  reported accurately (e.g. <quote>application/zip</quote> for a zip archive),
  then <application>Privoxy</application> knows to ignore these where
 </para>
 <para>
  <application>Privoxy</application> knows the differences in files according
  to the <quote>Document Type</quote> as reported by the webserver. If this is
  reported accurately (e.g. <quote>application/zip</quote> for a zip archive),
  then <application>Privoxy</application> knows to ignore these where
- appropriate. It is possible, however, that documents that are of an unknown
- type (generally assumed to be <quote>text/plain</quote>) will be filtered, as
- will those that might be incorrectly reported by the webserver. If such a
- file is a downloaded file that is intended to be saved to disk, then any
- content that might have been altered by filtering, will be saved too, for
- these (probably very rare) cases.
+ appropriate. <application>Privoxy</application> potentially can filter HTML
+ as well as plain text documents, subject to configuration parameters of
+ course. Also, documents that are of an unknown type (generally assumed to be
+ <quote>text/plain</quote>) can be filtered, as will those that might be
+ incorrectly reported by the webserver. If such a file is a downloaded file
+ that is intended to be saved to disk, then any content that might have been
+ altered by filtering, will be saved too, for these (probably rare) cases.
+</para>
+<para>
+ Note that versions later than 3.0.2 do NOT filter document types of
+ <quote>text/plain</quote>. Prior to this, <application>Privoxy</application>
+ did filter this document type.
+</para>
+<para>
+ In short, filtering is <quote>ON</quote> if a) the Document Type as reported
+ by the webserver is appropriate <emphasis>and</emphasis> b) the configuration
+ allows it (or at least does not disallow it). That's it. There is no magic
+ cookie anywhere to say this is <quote>good</quote> and this is
+ <quote>bad</quote>. It's the configuration that let's it all happen or not.
+</para>
+<para>
+ If you download text files, you probably do not want these to be filtered,
+ particularly if the content is source code, or other critical content. Source
+ code sometimes might be mistaken for Javascript (i.e. the kind that might
+ open a pop-up window). It is recommended to turn off filtering for download
+ sites (particularly if the content may be plain text files and you are using
+ version 3.0.2 or earlier) in your <filename>user.action</filename> file. And
+ also, for any site or page where making <emphasis>any</emphasis> changes at
+ all to the content is to be avoided.
 </para>
 <para>
  <application>Privoxy</application> does not do FTP at all, only HTTP 
 </para>
 <para>
  <application>Privoxy</application> does not do FTP at all, only HTTP 
-  protocols.
+  protocols, so please don't even try.
+</para>
+</sect2>
+
+<sect2 renderas="sect3" id="downloads2">
+<title>I just downloaded a Perl script, and <application>Privoxy</application>
+altered it! Yikes, what is wrong!</title>
+<para>
+ Please read above.
 </para>
 </sect2>
 
 </para>
 </sect2>
 
@@ -1625,7 +1606,8 @@ and related issues?</title>
  activated the <quote><literal>fun</literal></quote> filter which
  is clearly labeled <quote>Text replacements for subversive browsing
  fun!</quote> or you have implicitly activated it by choosing the
  activated the <quote><literal>fun</literal></quote> filter which
  is clearly labeled <quote>Text replacements for subversive browsing
  fun!</quote> or you have implicitly activated it by choosing the
- <quote>Radical</quote> profile in the web-based editor.
+ <quote>Adventuresome</quote> profile in the web-based editor (formerly known 
+ as the <application>Advanced</application> profile).
 </para>
 </sect2>
 
 </para>
 </sect2>
 
@@ -1787,7 +1769,8 @@ every time I start IE. What gives?</title>
  <para>
   <application>Privoxy</application> cannot act as a proxy for FTP traffic, 
   so do not configure your browser to use <application>Privoxy</application>
  <para>
   <application>Privoxy</application> cannot act as a proxy for FTP traffic, 
   so do not configure your browser to use <application>Privoxy</application>
-  as an FTP proxy. The same is true for any protocol other than HTTP or HTTPS.
+  as an FTP proxy. The same is true for <emphasis>any protocol other than HTTP
+  or HTTPS</emphasis>. 
  </para>
  <para>
   Most browsers understand FTP as well as HTTP. If you connect to a site, with
  </para>
  <para>
   Most browsers understand FTP as well as HTTP. If you connect to a site, with
@@ -1796,6 +1779,18 @@ every time I start IE. What gives?</title>
   speak FTP, <application>Privoxy</application> does not, and cannot proxy 
   such traffic.
  </para>
   speak FTP, <application>Privoxy</application> does not, and cannot proxy 
   such traffic.
  </para>
+ <para>
+  To complicate matters, some systems may have a generic <quote>proxy</quote>
+  setting, which will silently enable <emphasis>both</emphasis> HTTP and FTP
+  proxying! So it is possible to accidentally enable FTP proxying in these
+  cases. And of course, if this happens, <application>Privoxy</application>
+  will indeed cause problems since it does not know FTP.
+ </para>
+ <para>
+  Will <application>Privoxy</application> ever proxy FTP traffic? Unlikely.
+  There just is not much reason, and the work to make this happen is more than
+  it may seem.
+ </para>
 </sect2>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 </sect2>
 
 <!--   ~~~~~       New section      ~~~~~     -->
@@ -1833,6 +1828,19 @@ every time I start IE. What gives?</title>
 </sect2>
 
 
 </sect2>
 
 
+<!--   ~~~~~       New section      ~~~~~     -->
+<sect2 renderas="sect3" id="osximages">
+<title>In Mac OSX Panther (10.3), images often fail to load and/or I
+ experience random delays in page loading. I'm using
+ <literal>localhost</literal> as my browser's proxy setting.</title>
+ <para>
+  We believe this is due to an IPv6-related bug in OSX, but don't fully
+  understand the issue yet. In any case, changing the proxy setting to 
+  <literal>127.0.0.1</literal> instead of <literal>localhost</literal>
+  works around the problem.
+ </para>
+</sect2>
+
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect2 renderas="sect3" id="blankpage">
 <title>I get a completely blank page at one site. <quote>View Source</quote>
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect2 renderas="sect3" id="blankpage">
 <title>I get a completely blank page at one site. <quote>View Source</quote>
@@ -1875,20 +1883,123 @@ every time I start IE. What gives?</title>
  </para>
 </sect2>
 
  </para>
 </sect2>
 
-</sect1>
-<!--
-</sect1>
--->
+<sect2 renderas="sect3" id="nohostname">
+<title>My logs show many <quote>Unable to get my own hostname</quote> lines.
+Why?</title>
+<para>
+ <application>Privoxy</application> tries to get the hostname of the system
+ its running on from the IP address of the system interface it is bound to
+ (from the <filename>config</filename> file
+ <emphasis>listen-address</emphasis> setting). If the system cannot supply
+ this information, <application>Privoxy</application> logs this condition. 
+</para>
+<para>
+ Typically, this would be considered a system configuration error. It is not a
+ fatal error to <application>Privoxy</application> however, but may result in 
+ a much slower response from <application>Privoxy</application> due to DNS
+ timeouts.
+</para>
+</sect2>
 
 
-<!--   ~~~~~       New section      ~~~~~     -->
-<!--
-FIXME: Commented out until we have something to put here. HB 03/18/02.
-<sect1 id="knownissues"><title>Known Issues</title>
+<sect2 renderas="sect3" id="inuse">
+<title>When I try to launch <application>Privoxy</application>, I get an 
+error message <quote>port 8118 is already in use</quote> (or similar wording).
+Why?</title>
 <para>
 <para>
-   Fill me.
+ Port 8118 is <application>Privoxy's</application> default TCP 
+ <quote>listening</quote> port. Typically this message would mean that there
+ is already one instance of <application>Privoxy</application> running, and
+ you are actually trying to start a second <application>Privoxy</application> 
+ on the same port, which will not work. How and why this might happen varies
+ from platform to platform, but you need to check your installation and
+ start-up procedures.
+</para>
+</sect2>
+
+<sect2 renderas="sect3" id="demoronizer">
+<title>
+ Pages with UTF-8 fonts are garbled.
+</title>
+<para>
+ This is caused by the <quote>demoronizer</quote> filter, which was introduced 
+ in version 3.0.2, and was inappropriately turned on by default. You should 
+ either upgrade <application>Privoxy</application>, or at least upgrade to the most 
+ recent <filename>default.action</filename> file available from 
+ <ulink url="http://sourceforge.net/project/showfiles.php?group_id=11118">SourceForge</ulink>.
+ Or you can simply disable the demoronizer filter.
 </para>
 </para>
+</sect2>
+
+<sect2 renderas="sect3" id="demoronizer2">
+<title>
+ Why are binary files (such as images) corrupted when <application>Privoxy</application>
+ is used?
+</title>
+<para>
+ This may also be caused by the <quote>demoronizer</quote> filter, 
+ in conjunction with a web server that is misreporting a file type. Binary 
+ files are exempted from <application>Privoxy's</application> filtering
+ (unless the web server by mistake says the file is a plain text file). Either
+ upgrade <application>Privoxy</application>, or go to the most recent
+ <filename>default.action</filename> file available from <ulink
+ url="http://sourceforge.net/project/showfiles.php?group_id=11118">SourceForge</ulink>.
+</para>
+</sect2>
+
+<sect2 renderas="sect3" id="demoronizer3">
+<title>
+ What is the <quote>demoronizer</quote> and why is it there?
+</title>
+<para>
+ The original demoronizer was a Perl script that cleaned up HTML pages which 
+ were created with certain Microsoft products. MS has used proprietary extensions 
+ to standardized font encodings (ISO 8859-1), which has caused problems for pages
+ that are viewed with non-Microsoft products (and are expecting to see a
+ standard set of fonts). The demoronizer corrected these errors so the pages
+ displayed correctly. <application>Privoxy</application> borrowed from this
+ script, introducing a filter based on the original demoronizer, which in turn could
+ correct these errors on the fly. 
+</para>
+<para>
+ But this is only needed in some situations, and will cause serious problems in some 
+ other situations.
+</para>
+<para>
+ If you are using Microsoft products, you do not need it. If you need to view 
+ pages with UTF-8 characters (such as Cyrillic or Chinese), then it will 
+ cause corruption of the fonts, and thus <emphasis>should not be on</emphasis>.
+</para>
+<para>
+ On the other hand, if you use non-Microsoft products, and you occasionally 
+ notice wierd characters on pages, you might want to try it.
+</para>
+<para>
+ This filter was introduced with version 3.0.2 of <application>Privoxy</application>,
+ and was on by default in that version. It is off in all subsequent versions 
+ (unless turned on by the user).
+</para>
+</sect2>
+
+<sect2 renderas="sect3" id="windowopen">
+<title>
+ Why do I keep seeing <quote>PrivoxyWindowOpen()</quote> in raw source code?
+</title>
+<para>
+ <application>Privoxy</application> is attempting to disable malicious 
+ Javascript in this case, with the <literal>unsolicited-popups</literal>
+ filter. <application>Privoxy</application> cannot tell very well 
+ <quote>good</quote> code snippets from <quote>bad</quote> code snippets.
+</para>
+<para>
+ If you see this in HTML source, and the page displays without problems, then 
+ this is good, and likely some pop-up window was disabled. If you see this 
+ where it is causing a problem, such as a downloaded program source code file, 
+ then you should set an exception for this site or page such that the
+ integrity of the page stays in tact by disabling all filtering.
+</para>
+</sect2>
+
 </sect1>
 </sect1>
--->
 
   <!--   ~~~~~       New section      ~~~~~     -->
   <sect1 id="contact"><title>Contacting the developers, Bug Reporting and Feature Requests</title>
 
   <!--   ~~~~~       New section      ~~~~~     -->
   <sect1 id="contact"><title>Contacting the developers, Bug Reporting and Feature Requests</title>
@@ -1904,6 +2015,7 @@ FIXME: Commented out until we have something to put here. HB 03/18/02.
   &copyright;
  <!-- end -->
   
   &copyright;
  <!-- end -->
   
+
   <para>
    Portions of this document are <quote>borrowed</quote> from the original
    <application>Junkbuster</application> (tm) FAQ, and modified as 
   <para>
    Portions of this document are <quote>borrowed</quote> from the original
    <application>Junkbuster</application> (tm) FAQ, and modified as 
@@ -1946,8 +2058,6 @@ FIXME: Commented out until we have something to put here. HB 03/18/02.
  <!--
  Tue 09/11/01 06:38:14 PM EST: Test SGML doc by Hal Burgiss.
  
  <!--
  Tue 09/11/01 06:38:14 PM EST: Test SGML doc by Hal Burgiss.
  
- Last modified: Mon Sep 10 19:22:09 CEST 2001
  This program is free software; you can redistribute it 
  and/or modify it under the terms of the GNU General
  Public License as published by the Free Software
  This program is free software; you can redistribute it 
  and/or modify it under the terms of the GNU General
  Public License as published by the Free Software
@@ -1967,32 +2077,78 @@ FIXME: Commented out until we have something to put here. HB 03/18/02.
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 $Log: faq.sgml,v $
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 $Log: faq.sgml,v $
-Revision 2.9  2002/10/29 03:22:22  hal9
-Add 3 FAQs relating to HTML in email. Other minor touch ups.
+Revision 1.61.2.41  2004/04/05 13:44:05  oes
+Fixed allow-all-cookies alias name; closes SR #929746
 
 
-Revision 2.8  2002/10/15 12:47:23  oes
-Added Microsuck faq; more detail for PHP problem
+Revision 1.61.2.40  2004/01/30 17:00:33  oes
+Added OSX Panther problem
+
+Revision 1.61.2.39  2004/01/29 22:53:08  hal9
+Minor changes for exempting docs of text/plain. Change copyright date.
+
+Revision 1.61.2.38  2003/12/10 03:39:45  hal9
+Added FAQs for: demoronizer, related problems and why its included. Also,
+port 8118 already in use questions, and PrivoxyWindowOpen() questions. All in
+troubleshooting section.
+
+Revision 1.61.2.37  2003/10/17 11:01:50  oes
+Added Q&A for "not being used" page problem
 
 
-Revision 2.7  2002/10/12 01:14:42  hal9
-Updates for demoronizer filter, Radical profile, and the srvany.exe/icon
-win32 fix.
+Revision 1.61.2.36  2003/06/26 23:49:20  hal9
+More on the filter/source code problem.
 
 
-Revision 2.6  2002/10/10 04:10:38  hal9
-s/Advanced/Radical/ for standard.action change.
+Revision 1.61.2.35  2003/06/26 13:38:08  hal9
+Add FAQ on whether configuring Privoxy is necessary or not.
 
 
-Revision 2.5  2002/09/26 05:57:14  hal9
-Conditionally exclude 'this doc is evolving' comment in intro for non release
-situations.
+Revision 1.61.2.34  2003/06/26 03:00:03  hal9
+Sorry, found another copyright date.
+
+Revision 1.61.2.33  2003/06/26 02:57:05  hal9
+Fix typo (finally!) and very minor modifications.
+
+Revision 1.61.2.32  2003/06/26 02:52:04  hal9
+Test, no changes.
+
+Revision 1.61.2.31  2003/06/25 01:27:51  hal9
+Fix copyright, and a few nits.
+
+Revision 1.61.2.30  2003/06/25 01:13:52  hal9
+Add:
+
+ - FAQ on "Unable to get my own hostname"
+ - Another one on filtering effects on text files.
+
+Revision 1.61.2.29  2003/06/15 21:32:58  hal9
+Add to the 4.17 (filtering effects on downloaded files).
+
+Revision 1.61.2.28  2003/03/18 19:37:21  oes
+s/Advanced|Radical/Adventuresome/g to avoid complaints re fun filter
+
+Revision 1.61.2.27  2002/12/01 06:31:58  hal9
+Add faq on win32 error 503 due to ZoneAlarm.
+
+Revision 1.61.2.26  2002/11/17 06:41:06  hal9
+Move default profiles table from FAQ to U-M, and other minor related changes.
+Add faq on cookies.
+
+Revision 1.61.2.25  2002/10/29 03:21:50  hal9
+Add 3 Q/A's relating to HTML in email. Other minor touchups.
+
+Revision 1.61.2.24  2002/10/15 12:50:22  oes
+s/Advanced/Radical/ (stupid me)
+
+Revision 1.61.2.23  2002/10/15 12:38:56  oes
+Added Microsuck faq; more detail for PHP problem
 
 
-Revision 2.4  2002/09/26 00:14:42  hal9
-Small additions for content-cookies/SSL, LAN configuration, and FTP (non)
-support.
+Revision 1.61.2.22  2002/10/12 01:13:13  hal9
+Updates for demoronizer, more commentary on Radical profile, and update on
+the srvany.exe/icon fix.
 
 
-Revision 2.3  2002/09/13 11:50:55  oes
-Added MicroSuck topic; Updated PHP bug topic
+Revision 1.61.2.21  2002/10/10 04:09:35  hal9
+s/Advanced/Radical/ and added very brief note.
 
 
-Revision 2.2  2002/09/05 04:25:05  hal9
-Sync with 3.0 branch. No new content.
+Revision 1.61.2.20  2002/09/26 01:22:45  hal9
+Small additions for LAN setup, content-cookies/SSL, and FTP non-support.
 
 Revision 1.61.2.19  2002/08/25 23:31:56  hal9
 Fix one grammatical error. Add brief FAQ relating to tranparent proxies (ie
 
 Revision 1.61.2.19  2002/08/25 23:31:56  hal9
 Fix one grammatical error. Add brief FAQ relating to tranparent proxies (ie
index 2621f36..43da20b 100644 (file)
@@ -3,7 +3,7 @@
 
  Purpose     :  Entity included in other project documents.
                 
 
  Purpose     :  Entity included in other project documents.
                 
- $Id: history.sgml,v 2.2 2002/07/30 21:54:50 hal9 Exp $
+ $Id: history.sgml,v 1.7.2.4 2003/03/20 14:58:41 oes Exp $
 
   Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
   See LICENSE.
 
   Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
   See LICENSE.
@@ -67,7 +67,7 @@
 
 <para>
  The result of this is <application>Privoxy</application>, whose first
 
 <para>
  The result of this is <application>Privoxy</application>, whose first
- stable release, 3.0, was released August, 2002. 
+ stable version, 3.0, was released August, 2002. 
  <!-- Cautious!!!!!!!!! ;) -->
 </para>
 
  <!-- Cautious!!!!!!!!! ;) -->
 </para>
 
index 7b0f8b8..afd630f 100644 (file)
@@ -1,10 +1,10 @@
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
 <!entity % dummy "IGNORE"> 
 <!entity buildsource SYSTEM "buildsource.sgml">
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
 <!entity % dummy "IGNORE"> 
 <!entity buildsource SYSTEM "buildsource.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
+<!entity p-version "0.0.0">
+<!entity p-status "UNRELEASED">
 <!entity % p-stable "IGNORE">
 <!entity % p-stable "IGNORE">
-<!entity % p-not-stable "IGNORE">  <!-- beta or alpha -->
+<!entity % p-not-stable "INCLUDE">
 <!entity % p-alpha "IGNORE">
 <!entity % p-beta "IGNORE">
 <!entity % p-text "INCLUDE">       <!-- define we are a text only doc    -->
 <!entity % p-alpha "IGNORE">
 <!entity % p-beta "IGNORE">
 <!entity % p-text "INCLUDE">       <!-- define we are a text only doc    -->
@@ -16,7 +16,7 @@
 
  Purpose     :  INSTALL file for Privoxy
                 
 
  Purpose     :  INSTALL file for Privoxy
                 
- $Id: install.sgml,v .0 2002/09/05 17:58:29 hal9 Exp $
+ $Id: install.sgml,v 2.1.2.1 2002/10/24 22:07:39 hal9 Exp $
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
  dok-readme'.
  ===================================================================
 
  dok-readme'.
  ===================================================================
 
- READ:
-
- ======================================================================
- NOTE: The left margin spacing is *important* when using 'literallayout'
- WYSISWYG!!! Don't mess this up!!! Careful with linebreaks too, ie 
- the para tag forces a linebreak. Tags need to be carefully placed as a result
- to avoid extra blank lines, etc. 
- ======================================================================
-
- For stable releases, change 
-  entity % p-not-stable "INCLUDE" 
- to 
-  entity % p-not-stable "IGNORE" 
-  
- in the DTD at the top. This will toggle various text 'off'. BOTH
- MUST be toggled in this case or you will get both text referencing 
- stable and unstable versions. You only want one or the other!
-
 -->
 <article id="index">
 <artheader>
 -->
 <article id="index">
 <artheader>
index 226d4cb..7919c5c 100644 (file)
@@ -3,7 +3,7 @@
 
  Purpose     :  Entity included in other project documents.
                 
 
  Purpose     :  Entity included in other project documents.
                 
- $Id: p-authors.sgml,v 2.7 2002/11/30 02:35:16 hal9 Exp $
+ $Id: p-authors.sgml,v 1.8.2.14 2003/12/03 13:02:51 hal9 Exp $
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
@@ -30,7 +30,6 @@
 
 <literallayout>
  Hal Burgiss (docs)
 
 <literallayout>
  Hal Burgiss (docs)
- Jon Foster
  Andreas Oesterhelt
  David Schmidt (OS/2, Mac OSX ports)
 <![%p-authors-formal;[
  Andreas Oesterhelt
  David Schmidt (OS/2, Mac OSX ports)
 <![%p-authors-formal;[
@@ -48,7 +47,9 @@
  Johny Agotnes 
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
  Johny Agotnes 
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
+ Brian Dessent
  Mattes Dolak 
  Mattes Dolak 
+ Jon Foster
  Karsten Hopp (Red Hat)
  Alexander Lazic
  Daniel Leite
  Karsten Hopp (Red Hat)
  Alexander Lazic
  Daniel Leite
index 4a63d80..ceefe6c 100644 (file)
@@ -3,7 +3,7 @@
 
  Purpose     :  Used with other docs and files only.
 
 
  Purpose     :  Used with other docs and files only.
 
- $Id: p-config.sgml,v 2.3 2002/10/09 01:45:05 hal9 Exp $
+ $Id: p-config.sgml,v 1.1.2.10 2003/02/20 13:50:37 hal9 Exp $
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
@@ -95,7 +95,7 @@
  Sample Configuration File for Privoxy v&p-version;
 </title>
 <para>
  Sample Configuration File for Privoxy v&p-version;
 </title>
 <para>
- $Id: p-config.sgml,v 2.3 2002/10/09 01:45:05 hal9 Exp $
+ $Id: p-config.sgml,v 1.1.2.10 2003/02/20 13:50:37 hal9 Exp $
 </para>
 <para>
 Copyright (C) 2001, 2002 Privoxy Developers http://privoxy.org
 </para>
 <para>
 Copyright (C) 2001, 2002 Privoxy Developers http://privoxy.org
@@ -468,12 +468,13 @@ actionsfile
  <varlistentry>
   <term>Notes:</term>
   <listitem>
  <varlistentry>
   <term>Notes:</term>
   <listitem>
-<!--  HB removed per bug report 688728 02/20/03
-
+ <!--
+  removed per bug report 688728 02/20/03 HB
+  
    <para>
     The windows version will additionally log to the console.
    </para>
    <para>
     The windows version will additionally log to the console.
    </para>
--->   
+  --> 
    <para>
     The logfile is where all logging and error messages are written. The level
     of detail and number of messages are set with the <literal>debug</literal>
    <para>
     The logfile is where all logging and error messages are written. The level
     of detail and number of messages are set with the <literal>debug</literal>
@@ -578,7 +579,7 @@ actionsfile
   <term>Effect if unset:</term>
   <listitem>
    <para>
   <term>Effect if unset:</term>
   <listitem>
    <para>
-    The whole trust mechanism is turned off.
+    The entire trust mechanism is turned off.
    </para>
   </listitem>
  </varlistentry>
    </para>
   </listitem>
  </varlistentry>
@@ -621,6 +622,7 @@ actionsfile
    <para>
     Possible applications include limiting Internet access for children.
    </para>
    <para>
     Possible applications include limiting Internet access for children.
    </para>
+   
   </listitem>
  </varlistentry>
 </variablelist>
   </listitem>
  </varlistentry>
 </variablelist>
@@ -687,31 +689,29 @@ actionsfile
    <para>
     Examples:
    </para>
    <para>
     Examples:
    </para>
-  <!-- The below needs checking after a rebuild due to long file names -->
   <para>
    Unix, in local filesystem:
   </para>
   <para>
   <para>
    Unix, in local filesystem:
   </para>
   <para>
-   <screen>&nbsp;user-manual&nbsp;&nbsp;file:///usr/share/doc/privoxy-&p-version;/user-manual/index.html</screen>
+   <screen>&nbsp;&nbsp;user-manual&nbsp;&nbsp;file:///usr/share/doc/privoxy-&p-version;/user-manual/</screen>
   </para>
   <para>
   </para>
   <para>
-   Windows, in local filesystem, <emphasis>must</emphasis> use forward slash notation, and <literal>%20</literal> to denote
-   spaces in path names:
+   Windows, in local filesystem, <emphasis>must</emphasis> use forward slash notation:
   </para>
   <para>
   </para>
   <para>
-   <screen>&nbsp;user-manual&nbsp;&nbsp;file:///c:/some%20dir/privoxy/user-manual/index.html</screen>
+   <screen>&nbsp;&nbsp;user-manual&nbsp;&nbsp;file:/c:/some-dir/privoxy-&p-version;/user-manual/</screen>
   </para>
   <para>
   </para>
   <para>
-   Windows, UNC notation (forward slashes required again):
+   Windows, UNC notation (with forward slashes):
   </para>
   <para>
   </para>
   <para>
-   <screen>&nbsp;user-manual&nbsp;&nbsp;file://///some-server/some-path/privoxy/user-manual/index.html</screen>
+   <screen>&nbsp;&nbsp;user-manual&nbsp;&nbsp;file://///some-server/some-path/privoxy-&p-version;/user-manual/</screen>
   </para>
   <para>
    Any platform, on local webserver (called <quote>local-webserver</quote>):
   </para>
   <para>
   </para>
   <para>
    Any platform, on local webserver (called <quote>local-webserver</quote>):
   </para>
   <para>
-   <screen>&nbsp;user-manual&nbsp;&nbsp;http://local-webserver/privoxy-user-manual/</screen>
+   <screen>&nbsp;&nbsp;user-manual&nbsp;&nbsp;http://local-webserver/privoxy-user-manual/</screen>
   </para>
   <![%user-man;[
    <!-- this gets hammered in conversion to config. Text repeated below. -->
   </para>
   <![%user-man;[
    <!-- this gets hammered in conversion to config. Text repeated below. -->
index faabc56..53781f2 100644 (file)
@@ -5,7 +5,7 @@
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
                 
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
                 
- $Id: privoxy-man-page.sgml,v 2.3 2002/09/05 05:45:30 hal9 Exp $
+ $Id: privoxy-man-page.sgml,v 1.13.2.7 2003/03/26 02:06:21 hal9 Exp $
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
  The 'replaceable' and 'command' tags are used here somewhat unconventionally,
  since it seems to generate the proper formatting (at least for me :).
 
  The 'replaceable' and 'command' tags are used here somewhat unconventionally,
  since it seems to generate the proper formatting (at least for me :).
 
+ Create man page: 'make man'
+
+ Requires docbook2man (short perl script), see CVS
+ http://sources.redhat.com/docbook-tools/. Also requires openjade and SGMLSpm
+ perl module. 
  For man page references, see:
  http://www.linuxdoc.org/HOWTO/mini/DocBook-Install/using.html
  http://docbook.org/tdg/en/html/ch02.html#making-refentry
  For man page references, see:
  http://www.linuxdoc.org/HOWTO/mini/DocBook-Install/using.html
  http://docbook.org/tdg/en/html/ch02.html#making-refentry
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
 <!entity authors SYSTEM "p-authors.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
 <!entity authors SYSTEM "p-authors.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
+<!entity p-version "3.0.2">
+<!entity p-status "stable">
 <!entity % p-not-stable "IGNORE">
 <!entity % p-not-stable "IGNORE">
-<!entity % p-stable "IGNORE">
-<!entity % p-alpha "IGNORE">
-<!entity % p-beta "IGNORE">
+<!entity % p-stable "INCLUDE">
 <!entity % p-text "IGNORE">           <!-- define we are not a text only doc -->
 <!entity % p-authors-formal "IGNORE"> <!-- exclude additional formating      -->
 <!entity my-copy "(C)">               <!-- db2man barfs on copyright symbol  -->
 <!entity % p-text "IGNORE">           <!-- define we are not a text only doc -->
 <!entity % p-authors-formal "IGNORE"> <!-- exclude additional formating      -->
 <!entity my-copy "(C)">               <!-- db2man barfs on copyright symbol  -->
@@ -72,6 +76,7 @@
   <arg><option>--no-daemon</option></arg>
   <arg><option>--pidfile </option><replaceable class="parameter">pidfile</replaceable></arg>  
   <arg><option>--user </option><replaceable class="parameter">user[.group]</replaceable></arg> 
   <arg><option>--no-daemon</option></arg>
   <arg><option>--pidfile </option><replaceable class="parameter">pidfile</replaceable></arg>  
   <arg><option>--user </option><replaceable class="parameter">user[.group]</replaceable></arg> 
+  <arg><option>--chroot</option></arg>
   <arg><replaceable class="parameter">configfile</replaceable></arg>        
   <command>&nbsp;(UNIX)</command>
  </cmdsynopsis>
   <arg><replaceable class="parameter">configfile</replaceable></arg>        
   <command>&nbsp;(UNIX)</command>
  </cmdsynopsis>
      </para>
     </listitem>
   </varlistentry>
      </para>
     </listitem>
   </varlistentry>
+  <varlistentry>
+    <term>--chroot</term>
+     <listitem>
+      <para>
+       Before changing to the user ID given in the --user option, chroot to
+       that user's home directory, i.e. make the kernel pretend to the
+       <command>Privoxy</command> process that the directory tree starts
+       there. If set up carefully, this can limit the impact of possible
+       vulnerabilities in <command>Privoxy</command> to the files contained in
+       that hierarchy. 
+      </para>
+    </listitem>
+  </varlistentry>
  </variablelist>
  </variablelist>
+
  <para>
   If the <filename>configfile</filename> is not specified on  the  command  line,
   <command>Privoxy</command>  will  look for a file named
  <para>
   If the <filename>configfile</filename> is not specified on  the  command  line,
   <command>Privoxy</command>  will  look for a file named
index f0cb4b2..e6902ac 100644 (file)
@@ -3,9 +3,9 @@
 
  Purpose     :  Entity included in other project documents.
                 
 
  Purpose     :  Entity included in other project documents.
                 
- $Id: privoxy.sgml,v 1.7 2002/05/10 01:48:20 hal9 Exp $
+ $Id: privoxy.sgml,v 1.7.2.1 2004/01/30 13:13:40 oes Exp $
 
 
- Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
+ Copyright (C) 2001 - 2004 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  ======================================================================
  See LICENSE.
 
  ======================================================================
@@ -28,7 +28,7 @@
 
 <para>
  <application>Privoxy</application> is a web proxy with advanced filtering
 
 <para>
  <application>Privoxy</application> is a web proxy with advanced filtering
- capabilities for protecting privacy, filtering web page content, managing
+ capabilities for protecting privacy, modifying web page content, managing
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <application>Privoxy</application> has a very
  flexible configuration and can be customized to suit individual needs and
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <application>Privoxy</application> has a very
  flexible configuration and can be customized to suit individual needs and
index e97c209..8a6ae66 100644 (file)
@@ -4,12 +4,10 @@
 <!entity p-intro SYSTEM "privoxy.sgml">
 <!entity contacting SYSTEM "contacting.sgml">
 <!entity buildsource SYSTEM "buildsource.sgml">
 <!entity p-intro SYSTEM "privoxy.sgml">
 <!entity contacting SYSTEM "contacting.sgml">
 <!entity buildsource SYSTEM "buildsource.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
-<!entity % p-stable "IGNORE">
-<!entity % p-not-stable "IGNORE">  <!-- beta or alpha -->
-<!entity % p-alpha "IGNORE">
-<!entity % p-beta "IGNORE">
+<!entity p-version "3.0.3">
+<!entity p-status "stable">
+<!entity % p-not-stable "IGNORE">
+<!entity % p-stable "INCLUDE">
 <!entity % p-text "INCLUDE">       <!-- define we are a text only doc    -->
 <!entity % p-doc "IGNORE">         <!-- and never a text doc             -->
 <!entity % p-readme "INCLUDE">     <!-- all your README belong to us     -->
 <!entity % p-text "INCLUDE">       <!-- define we are a text only doc    -->
 <!entity % p-doc "IGNORE">         <!-- and never a text doc             -->
 <!entity % p-readme "INCLUDE">     <!-- all your README belong to us     -->
@@ -19,9 +17,9 @@
 
  Purpose     :  README for Privoxy
                 
 
  Purpose     :  README for Privoxy
                 
- $Id: readme.sgml,v 2.3 2002/09/05 17:58:29 hal9 Exp $
+ $Id: readme.sgml,v 1.16.2.9 2004/01/30 14:09:59 oes Exp $
 
 
- Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
+ Copyright (C) 2001 - 2004 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  ========================================================================
  See LICENSE.
 
  ========================================================================
@@ -82,7 +80,7 @@
  *
  * Purpose     :  README file to give a short intro.
  *
  *
  * Purpose     :  README file to give a short intro.
  *
- * Copyright   :  Written by and Copyright (C) 2001,2002 the SourceForge
+ * Copyright   :  Written by and Copyright (C) 2001 - 2004  the SourceForge
  *                Privoxy team. http://www.privoxy.org/
  *
  *                Based on the Internet Junkbuster originally written
  *                Privoxy team. http://www.privoxy.org/
  *
  *                Based on the Internet Junkbuster originally written
 <para>
  <!-- include some conditional text -->
  This README is included with <![%p-not-stable;[ the development version of]]>
 <para>
  <!-- include some conditional text -->
  This README is included with <![%p-not-stable;[ the development version of]]>
- Privoxy &p-version;<![%p-not-stable;[, which will someday become Privoxy
- v3.2]]>. See http://www.privoxy.org/ for more information. The current code
- level is technically &p-status;<![%p-not-stable;[, but is not yet
- significantly different from the 3.0.0 stable branch at this time.]]>.
+ Privoxy &p-version;<![%p-not-stable;[, which will eventually become Privoxy v3.0 (and soon we
+ hope!)]]>. See http://www.privoxy.org/ for more information. The current code maturity
+ level is <quote>&p-status;</quote><![%p-not-stable;[, and seems stable to us :)]]>.
 </para>
 </abstract>
 </artheader>
 </para>
 </abstract>
 </artheader>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect1 id="importantchanges" ><title>IMPORTANT CHANGES</title>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect1 id="importantchanges" ><title>IMPORTANT CHANGES</title>
+<para>
+ MORE NEWS! January 2004, Privoxy 3.0.3 is released. This is the another 
+ maintenance release of Privoxy which fixes more bugs, further refines
+ the configuration and works around some known third-party problems. See the
+ ChangeLog for complete details. Upgrading from 3.0.2 is recommended.
+</para>
+<para>
+ NEWS! March 2003, Privoxy 3.0.2 is released. This is the first maintenance
+ release of Privoxy. There are no significant new features in this release.
+ Some bugs are fixed, and some existing features have been enhanced. See 
+ ChangeLog for details. Upgrading from 3.0.0 is recommended.
+</para>
 <para>
  REALLY BIG NEWS! August 2002: The long-awaited, oft-delayed  stable version
  of Privoxy 3.0 is finally released! This is way behind schedule, but better
 <para>
  REALLY BIG NEWS! August 2002: The long-awaited, oft-delayed  stable version
  of Privoxy 3.0 is finally released! This is way behind schedule, but better
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect1 id="install" ><title>INSTALL</title>
 
 <!--   ~~~~~       New section      ~~~~~     -->
 <sect1 id="install" ><title>INSTALL</title>
-<!-- Install instructions are now in INSTALL -->
-<para>
- See the INSTALL file in this directory, for installing from source, and 
- the User Manual, for other installation types.
+<para> 
+ See the <filename>INSTALL</filename> file in this directory, for installing
+ from source, and the <citetitle>User Manual</citetitle>, for other
+ installation types. 
 </para>
 </sect1>
 
 </para>
 </sect1>
 
 <para>
  privoxy [&mdash;&mdash;help] [&mdash;&mdash;version]
  [&mdash;&mdash;no-daemon] [&mdash;&mdash;pidfile PIDFILE] [&mdash;&mdash;user
 <para>
  privoxy [&mdash;&mdash;help] [&mdash;&mdash;version]
  [&mdash;&mdash;no-daemon] [&mdash;&mdash;pidfile PIDFILE] [&mdash;&mdash;user
- USER[.GROUP]] [config_file]
+ USER[.GROUP]] [&mdash;&mdash;chroot] [config_file]
 </para>
 <para>
  See the man page or User Manual for an explanation of each option, and 
 </para>
 <para>
  See the man page or User Manual for an explanation of each option, and 
 <!-- </LiteralLayout> -->
 <!-- </para> -->
 <!-- <para> -->
 <!-- </LiteralLayout> -->
 <!-- </para> -->
 <!-- <para> -->
-<!--  $Id: readme.sgml,v 2.3 2002/09/05 17:58:29 hal9 Exp $ -->
+<!--  $Id: readme.sgml,v 1.16.2.9 2004/01/30 14:09:59 oes Exp $ -->
 <!-- </para> -->
 
 </article>
 <!-- </para> -->
 
 </article>
index 14c5319..e7bcfdc 100644 (file)
@@ -3,7 +3,7 @@
 
  Purpose     :  Entity included in other project documents.
                 
 
  Purpose     :  Entity included in other project documents.
                 
- $Id: supported.sgml,v 2.3 2002/09/05 05:45:30 hal9 Exp $
+ $Id: supported.sgml,v 1.10.2.4 2002/12/14 04:04:32 hal9 Exp $
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
@@ -25,9 +25,9 @@
 -->
 <para>
  At present, <application>Privoxy</application> is known to run on
 -->
 <para>
  At present, <application>Privoxy</application> is known to run on
- Windows(95, 98, ME, 2000, XP), Linux (RedHat, SuSE, Debian, Conectiva, Gentoo,
+ Windows(95, 98, ME, 2000, XP), Linux (RedHat, SuSE, Debian, Conectiva, Gentoo, 
  Slackware), Mac OSX, OS/2, AmigaOS, BeOS, FreeBSD, NetBSD, OpenBSD, Solaris,
  Slackware), Mac OSX, OS/2, AmigaOS, BeOS, FreeBSD, NetBSD, OpenBSD, Solaris,
- and more flavors of Unix.
+ and many more flavors of Unix.
 </para>
 
 <![%p-supp-userman;[
 </para>
 
 <![%p-supp-userman;[
index 582af7f..6a28302 100644 (file)
 <!entity license SYSTEM "license.sgml">
 <!entity p-authors SYSTEM "p-authors.sgml">
 <!entity config SYSTEM "p-config.sgml">
 <!entity license SYSTEM "license.sgml">
 <!entity p-authors SYSTEM "p-authors.sgml">
 <!entity config SYSTEM "p-config.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
+<!entity p-version "3.0.3">
+<!entity p-status "stable">
 <!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
 <!entity % p-not-stable "IGNORE">
 <!entity % p-authors-formal "INCLUDE"> <!-- include additional text, etc  -->
 <!entity % p-not-stable "IGNORE">
-<!entity % p-stable "IGNORE">
+<!entity % p-stable "INCLUDE">
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity % p-readme "IGNORE">
 <!entity % p-text "IGNORE">        <!-- define we are not a text only doc -->
 <!entity % p-doc "INCLUDE">        <!-- and we are a formal doc           -->
 <!entity % p-readme "IGNORE">
@@ -32,9 +32,9 @@
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
 
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
 
- $Id: user-manual.sgml,v 2.9 2003/04/11 03:14:53 hal9 Exp $
+ $Id: user-manual.sgml,v 1.123.2.43 2005/05/23 09:59:10 hal9 Exp $
 
 
- Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
+ Copyright (C) 2001- 2003 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  ========================================================================
  See LICENSE.
 
  ========================================================================
  <subscript>
 <!-- Completely the wrong markup, but very little is allowed  -->
 <!-- in this part of an article. FIXME -->
  <subscript>
 <!-- Completely the wrong markup, but very little is allowed  -->
 <!-- in this part of an article. FIXME -->
- <link linkend="copyright">Copyright</link> &my-copy; 2001, 2002 by 
+ <link linkend="copyright">Copyright</link> &my-copy; 2001 - 2004 by 
  <ulink url="http://www.privoxy.org/">Privoxy Developers</ulink>
  </subscript>
 </pubdate>
 
  <ulink url="http://www.privoxy.org/">Privoxy Developers</ulink>
  </subscript>
 </pubdate>
 
-<pubdate>$Id: user-manual.sgml,v 2.9 2003/04/11 03:14:53 hal9 Exp $</pubdate>
+<pubdate>$Id: user-manual.sgml,v 1.123.2.43 2005/05/23 09:59:10 hal9 Exp $</pubdate>
 
 <!--
 
 
 <!--
 
@@ -69,17 +69,6 @@ copyright/license declarations will be in their own sgml.
 
 Hal.
 
 
 Hal.
 
-<copyright>
-  <year>2001</year>
-  <year>2002</year>
-  <holder>Privoxy Developers</holder>
-</copyright>
-
-<legalnotice id="legalnotice"> 
- <para>
-  text goes here ........
- </para>
-</legalnotice>
 
 -->
 
 
 -->
 
@@ -125,10 +114,12 @@ Hal.
 <para>
  This documentation is included with the current &p-status; version of
  <application>Privoxy</application>, v.&p-version;<![%p-not-stable;[, 
 <para>
  This documentation is included with the current &p-status; version of
  <application>Privoxy</application>, v.&p-version;<![%p-not-stable;[, 
- and is mostly complete at this point. 
- Development of version 3.2 is just beginning,
- and will include many significant changes and enhancements over
- earlier versions]]>.
+ and is mostly complete at this point. The most up to date reference for the
+ time being is still the comments in the source files and in the individual
+ configuration files. Development of version 3.0 is currently nearing
+ completion, and includes many significant changes and enhancements over
+ earlier versions. The target release date for
+ stable v3.0 is <quote>soon</quote> ;-)]]>.
 </para>
 
 <!-- include only in non-stable versions -->
 </para>
 
 <!-- include only in non-stable versions -->
@@ -137,7 +128,7 @@ Hal.
  Since this is a &p-status; version, not all new features are well tested. This
  documentation may be slightly out of sync as a result (especially with 
  CVS sources). And there <emphasis>may be</emphasis> bugs, though hopefully
  Since this is a &p-status; version, not all new features are well tested. This
  documentation may be slightly out of sync as a result (especially with 
  CVS sources). And there <emphasis>may be</emphasis> bugs, though hopefully
- not many! Please find them!
+ not many! 
 </para>
 ]]>
 
 </para>
 ]]>
 
@@ -232,8 +223,7 @@ automatically start Privoxy in the boot process.
 <para>
  Just double-click the installer, which will guide you through
  the installation process. You will find the configuration files
 <para>
  Just double-click the installer, which will guide you through
  the installation process. You will find the configuration files
- in the same directory as you installed Privoxy in. We do not
- use the registry of Windows. 
+ in the same directory as you installed Privoxy in. 
 </para>
 </sect3>
 
 </para>
 </sect3>
 
@@ -350,7 +340,7 @@ automatically start Privoxy in the boot process.
  possibly unstable development versions, you can check out the up-to-the-minute
  version directly from <ulink url="http://sourceforge.net/cvs/?group_id=11118">the
  CVS repository</ulink> or simply download <ulink
  possibly unstable development versions, you can check out the up-to-the-minute
  version directly from <ulink url="http://sourceforge.net/cvs/?group_id=11118">the
  CVS repository</ulink> or simply download <ulink
- url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz">the nightly CVS
+ url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2">the nightly CVS
  tarball.</ulink>
 </para>
 
  tarball.</ulink>
 </para>
 
@@ -377,7 +367,7 @@ automatically start Privoxy in the boot process.
 </para>
 
 <para>
 </para>
 
 <para>
- In order not to loose your personal changes and adjustments when updating
+ In order not to lose your personal changes and adjustments when updating
  to the latest <literal>default.action</literal> file we <emphasis>strongly
  recommend</emphasis> that you use <literal>user.action</literal> for your
  customization of <application>Privoxy</application>. See the <link
  to the latest <literal>default.action</literal> file we <emphasis>strongly
  recommend</emphasis> that you use <literal>user.action</literal> for your
  customization of <application>Privoxy</application>. See the <link
@@ -547,7 +537,7 @@ automatically start Privoxy in the boot process.
    linkend="quickstart-ad-blocking">next section</link> for a quick
    introduction to how <application>Privoxy</application> blocks ads and
    banners.]]>
    linkend="quickstart-ad-blocking">next section</link> for a quick
    introduction to how <application>Privoxy</application> blocks ads and
    banners.]]>
-  </para>
+</para>
  </listitem> 
 
  <listitem>
  </listitem> 
 
  <listitem>
@@ -565,6 +555,14 @@ automatically start Privoxy in the boot process.
   </para>
  </listitem> 
 
   </para>
  </listitem> 
 
+ <listitem>
+  <para>
+   For easy access to Privoxy's most important controls, drag the provided
+   <link linkend="bookmarklets">Bookmarklets</link> into your browser's
+   personal toolbar.
+  </para>
+ </listitem> 
+
  <listitem>
   <para>
    Please see the section <link linkend="contact">Contacting the
  <listitem>
   <para>
    Please see the section <link linkend="contact">Contacting the
@@ -1050,7 +1048,7 @@ Example Unix startup command:
 
 <para>
  See the section <link linkend="cmdoptions">Command line options</link> for
 
 <para>
  See the section <link linkend="cmdoptions">Command line options</link> for
- furher info.
+ further info.
 </para>
 
 must find a better place for this paragraph
 </para>
 
 must find a better place for this paragraph
@@ -1204,7 +1202,20 @@ must find a better place for this paragraph
    <emphasis>USER</emphasis>, and if included the GID of GROUP.  Exit if the
    privileges are not sufficient to do so. Unix only.
   </para>
    <emphasis>USER</emphasis>, and if included the GID of GROUP.  Exit if the
    privileges are not sufficient to do so. Unix only.
   </para>
- </listitem> 
+ </listitem>
+  <listitem>
+  <para>
+   <emphasis>--chroot</emphasis>
+  
+  </para>
+  <para>
+   Before changing to the user ID given in the <emphasis>--user</emphasis> option, 
+   chroot to that user's home directory, i.e. make the kernel pretend to the Privoxy
+   process that the directory tree starts there. If set up carefully, this can limit 
+   the impact of possible vulnerabilities in Privoxy to the files contained in that hierarchy.
+   Unix only.
+  </para>
+ </listitem>
  <listitem>
   <para>
     <emphasis>configfile</emphasis>
  <listitem>
   <para>
     <emphasis>configfile</emphasis>
@@ -1444,9 +1455,9 @@ must find a better place for this paragraph
  <application>Privoxy</application> takes for which URLs, and thus determine
  how ad images, cookies and various other aspects of HTTP content and
  transactions are handled, and on which sites (or even parts thereof). There 
  <application>Privoxy</application> takes for which URLs, and thus determine
  how ad images, cookies and various other aspects of HTTP content and
  transactions are handled, and on which sites (or even parts thereof). There 
- are three such files included with <application>Privoxy</application>, with
- differing purposes: 
-</para>
+ are three such files included with <application>Privoxy</application>
+ with differing purposes:
+ </para>
  
  <para>
   <itemizedlist>
  
  <para>
   <itemizedlist>
@@ -1478,14 +1489,149 @@ must find a better place for this paragraph
      you select them explicitly in the editor</emphasis>. It is not recommend
      to edit this file.
     </para>
      you select them explicitly in the editor</emphasis>. It is not recommend
      to edit this file.
     </para>
+    <para>
+     The default profiles, and their associated actions, as pre-defined in
+     <filename>standard.action</filename> are:
+    </para>
+    <para>
+    <table frame=all><title>Default Configurations</title>
+    <tgroup cols=4 align=left colsep=1 rowsep=1>
+    <colspec colname=c1>
+    <colspec colname=c2>
+    <colspec colname=c3>
+    <colspec colname=c4>
+    <thead>
+    <row>
+      <entry>Feature</entry>
+      <entry>Cautious</entry>
+      <entry>Medium</entry>
+      <entry>Adventuresome</entry>
+    </row>
+    </thead>
+    <!--  <tfoot> -->
+    <!--  <row> -->
+    <!--    <entry>f1</entry> -->
+    <!--    <entry>f2</entry> -->
+    <!--    <entry>f3</entry> -->
+    <!--    <entry>f4</entry> -->
+    <!--  </row> -->
+    <!--  </tfoot> -->
+    <tbody>
+
+    <row>
+      <entry>Ad-blocking by URL</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>Ad-filtering by size</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>GIF de-animation</entry>
+      <entry>no</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>Referer forging</entry>
+      <entry>no</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>Cookie handling</entry>
+      <entry>none</entry>
+      <entry>session-only</entry>
+      <entry>kill</entry>
+    </row>
+
+    <row>
+      <entry>Pop-up killing</entry>
+      <entry>unsolicited</entry>
+      <entry>unsolicited</entry>
+      <entry>all</entry>
+    </row>
+
+    <row>
+      <entry>Fast redirects</entry>
+      <entry>no</entry>
+      <entry>no</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>HTML taming</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>JavaScript taming</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>Web-bug killing</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>Fun text replacements</entry>
+      <entry>no</entry>
+      <entry>no</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>Image tag reordering</entry>
+      <entry>no</entry>
+      <entry>no</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>Ad-filtering by link</entry>
+      <entry>no</entry>
+      <entry>no</entry>
+      <entry>yes</entry>
+    </row>
+
+    <row>
+      <entry>Demoronizer</entry>
+      <entry>no</entry>
+      <entry>no</entry>
+      <entry>yes</entry>
+    </row>
+
+
+    </tbody>
+    </tgroup>
+    </table>
+    </para>
+
    </listitem> 
   </itemizedlist>
  </para> 
 
 <para>
  The list of actions files to be used are defined in the main configuration 
    </listitem> 
   </itemizedlist>
  </para> 
 
 <para>
  The list of actions files to be used are defined in the main configuration 
- file, and are processed in the order they are defined. The content of these
- can all be viewed and edited from <ulink
+ file, and are processed in the order they are defined (e.g.
+ <filename>default.action</filename> is typically process before
+ <filename>user.action</filename>). The content of these can all be viewed and
+ edited from <ulink
  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
 </para>
 
  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
 </para>
 
@@ -1523,10 +1669,10 @@ must find a better place for this paragraph
  certainly a matter of personal taste. In general, it can be said that the more
  <quote>aggressive</quote> your default settings (in the top section of the
  actions file) are, the more exceptions for <quote>trusted</quote> sites you
  certainly a matter of personal taste. In general, it can be said that the more
  <quote>aggressive</quote> your default settings (in the top section of the
  actions file) are, the more exceptions for <quote>trusted</quote> sites you
- will have to make later. If, for example, you want to kill popup windows per
+ will have to make later. If, for example, you want to crunch all cookies per
  default, you'll have to make exceptions from that rule for sites that you
  default, you'll have to make exceptions from that rule for sites that you
- regularly use and that require popups for actually useful content, like maybe
- your bank, favorite shop, or newspaper.
+ regularly use and that require cookies for actually useful puposes, like maybe
+ your bank, favorite shop, or newspaper. 
 </para>
 
 <para>
 </para>
 
 <para>
@@ -1546,8 +1692,8 @@ must find a better place for this paragraph
  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
  The editor allows both fine-grained control over every single feature on a
  per-URL basis, and easy choosing from wholesale sets of defaults like
  url="http://config.privoxy.org/show-status">http://config.privoxy.org/show-status</ulink>.
  The editor allows both fine-grained control over every single feature on a
  per-URL basis, and easy choosing from wholesale sets of defaults like
- <quote>Cautious</quote>, <quote>Medium</quote> or <quote>Radical</quote>.
- Warning: the <quote>Radical</quote> setting is not only more aggressive, 
+ <quote>Cautious</quote>, <quote>Medium</quote> or <quote>Adventuresome</quote>.
+ Warning: the <quote>Adventuresome</quote> setting is not only more aggressive, 
  but includes settings that are fun and subversive, and which some may find of 
  dubious merit!
 </para>
  but includes settings that are fun and subversive, and which some may find of 
  dubious merit!
 </para>
@@ -1573,7 +1719,7 @@ must find a better place for this paragraph
 
 <para>
  To determine which actions apply to a request, the URL of the request is
 
 <para>
  To determine which actions apply to a request, the URL of the request is
- compared to all patterns in each action file file. Every time it matches, the list of
+ compared to all patterns in each <quote>action file</quote> file. Every time it matches, the list of
  applicable actions for the URL is incrementally updated, using the heading
  of the section in which the pattern is located. If multiple matches for
  the same URL set the same action differently, the last match wins. If not, 
  applicable actions for the URL is incrementally updated, using the heading
  of the section in which the pattern is located. If multiple matches for
  the same URL set the same action differently, the last match wins. If not, 
@@ -1682,7 +1828,7 @@ must find a better place for this paragraph
   <listitem>
    <para>
     matches any domain that <emphasis>ENDS</emphasis> in
   <listitem>
    <para>
     matches any domain that <emphasis>ENDS</emphasis> in
-    <literal>.example.com</literal> (e.g. <literal>www.example.com</literal>)
+    <literal>.example.com</literal>
    </para>
   </listitem>
  </varlistentry>
    </para>
   </listitem>
  </varlistentry>
@@ -2447,9 +2593,12 @@ problem-host.example.com</screen>
   <term>Effect:</term>
   <listitem>
    <para>
   <term>Effect:</term>
   <listitem>
    <para>
-    Text documents, including HTML and JavaScript, to which this action
-    applies, are filtered on-the-fly through the specified regular expression
-    based substitutions.
+    All files of text-based type, most notably HTML and JavaScript, to which this
+    action applies, are filtered on-the-fly through the specified regular expression
+    based substitutions. (Note: as of version 3.0.3 plain text documents 
+    are exempted from filtering, because web servers often use the
+    <literal>text/plain</literal> MIME type for all files whose type they
+    don't know.)
    </para>
   </listitem>
  </varlistentry>
    </para>
   </listitem>
  </varlistentry>
@@ -2469,8 +2618,8 @@ problem-host.example.com</screen>
     The name of a filter, as defined in the <link linkend="filter-file">filter file</link>
     (typically <filename>default.filter</filename>, set by the
     <literal><link linkend="filterfile">filterfile</link></literal>
     The name of a filter, as defined in the <link linkend="filter-file">filter file</link>
     (typically <filename>default.filter</filename>, set by the
     <literal><link linkend="filterfile">filterfile</link></literal>
-    option in the <link linkend="config">config file</link>). Filtering 
-    can be completely disabled without the use of parameters.
+    option in the <link linkend="config">config file</link>). When used in its negative form,
+    and without parameters, filtering is completely disabled.
    </para>
   </listitem>
  </varlistentry>
    </para>
   </listitem>
  </varlistentry>
@@ -2483,10 +2632,6 @@ problem-host.example.com</screen>
     in the distribution filter file that you can use. See the examples below for
     a list.
    </para>
     in the distribution filter file that you can use. See the examples below for
     a list.
    </para>
-   <para>
-    This is potentially a very powerful feature!  But <quote>rolling your own</quote>
-    filters requires a knowledge of regular expressions and HTML.
-   </para>
    <para>
     Filtering requires buffering the page content, which may appear to
     slow down page rendering since nothing is displayed until all content has
    <para>
     Filtering requires buffering the page content, which may appear to
     slow down page rendering since nothing is displayed until all content has
@@ -2494,6 +2639,10 @@ problem-host.example.com</screen>
     since the page is not incrementally displayed.) This effect will be more
     noticeable on slower connections.
    </para>
     since the page is not incrementally displayed.) This effect will be more
     noticeable on slower connections.
    </para>
+   <para>
+    This is very powerful feature, but <quote>rolling your own</quote>
+    filters requires a knowledge of regular expressions and HTML.
+   </para>
    <para>
     The amount of data that can be filtered is limited to the 
     <literal><link linkend="buffer-limit">buffer-limit</link></literal>
    <para>
     The amount of data that can be filtered is limited to the 
     <literal><link linkend="buffer-limit">buffer-limit</link></literal>
@@ -2502,9 +2651,12 @@ problem-host.example.com</screen>
     data, and all pending data, is passed through unfiltered. 
    </para>
    <para>
     data, and all pending data, is passed through unfiltered. 
    </para>
    <para>
-    Inappropriate MIME types, such as zipped files, are not filtered at all.
-    Encrypted SSL data (from HTTPS servers) cannot be filtered either since
-    this would violate the integrity of the secure transaction.
+    Inadequate MIME types, such as zipped files, are not filtered at all.
+    (Again, only text-based types except plain text). Encrypted SSL data
+    (from HTTPS servers) cannot be filtered either, since this would violate
+    the integrity of the secure transaction. In some situations it might
+    be necessary to protect certain text, like source code, from filtering
+    by defining appropriate <literal>-filter</literal> sections.
    </para>
    <para>
     At this time, <application>Privoxy</application> cannot (yet!) uncompress compressed
    </para>
    <para>
     At this time, <application>Privoxy</application> cannot (yet!) uncompress compressed
@@ -2525,75 +2677,99 @@ problem-host.example.com</screen>
     <link linkend="contact">Feedback</link> with suggestions for new or
     improved filters is particularly welcome!
    </para>
     <link linkend="contact">Feedback</link> with suggestions for new or
     improved filters is particularly welcome!
    </para>
+   <para>
+    The below list has only the names and a one-line description of each
+    predefined filter. There are <link linkend="predefined-filters">more
+    verbose explanations</link> of what these filters do in the <link
+    linkend="filter-file">filter file chapter</link>.
+   </para>
   </listitem>
  </varlistentry>
 
  <varlistentry>
   </listitem>
  </varlistentry>
 
  <varlistentry>
-  <term>Example usage (with filters from the distribution <filename>default.filter</filename> file):</term>
+  <term>Example usage (with filters from the distribution <filename>default.filter</filename> file).
+  See <link linkend="PREDEFINED-FILTERS">the Predefined Filters section</link> for 
+  more explanation on each:</term>
   <listitem>
   <listitem>
+   <para>
+    <anchor id="filter-js-annoyances">
+    <screen>+filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse</screen>
+   </para>
+   <para>
+    <anchor id="filter-js-events">
+    <screen>+filter{js-events}           # Kill all JS event bindings (Radically destructive! Only for extra nasty sites)</screen>
+   </para>
    <para>
     <anchor id="filter-html-annoyances">
    <para>
     <anchor id="filter-html-annoyances">
-    <screen>+filter{html-annoyances}     # Get rid of particularly annoying HTML abuse.</screen>
+    <screen>+filter{html-annoyances}     # Get rid of particularly annoying HTML abuse</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-js-annoyances">
-    <screen>+filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse</screen>
+    <anchor id="filter-content-cookies">
+    <screen>+filter{content-cookies}     # Kill cookies that come in the HTML or JS content</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-banners-by-size">
-    <screen>+filter{banners-by-size}     # Kill banners based on their size for this page (<emphasis>very</emphasis> efficient!)</screen>
+    <anchor id="filter-refresh-tags">
+    <screen>+filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-banners-by-link">
-    <screen>+filter{banners-by-link}     # Kill banners based on the link they are contained in (experimental)</screen>
+    <anchor id="filter-unsolicited-popups">
+    <screen>+filter{unsolicited-popups}  # Disable only unsolicited pop-up windows</screen>
+   </para>
+   <para>
+    <anchor id="filter-all-popups">
+    <screen>+filter{all-popups}          # Kill all popups in JavaScript and HTML</screen>
    </para>
    <para>
     <anchor id="filter-img-reorder">
     <screen>+filter{img-reorder}         # Reorder attributes in &lt;img&gt; tags to make the banners-by-* filters more effective</screen>
    </para>
    <para>
    </para>
    <para>
     <anchor id="filter-img-reorder">
     <screen>+filter{img-reorder}         # Reorder attributes in &lt;img&gt; tags to make the banners-by-* filters more effective</screen>
    </para>
    <para>
-    <anchor id="filter-content-cookies">
-    <screen>+filter{content-cookies}     # Kill cookies that come sneaking in the HTML or JS content</screen>
+    <anchor id="filter-banners-by-size">
+    <screen>+filter{banners-by-size}     # Kill banners by size</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-popups">
-    <screen>+filter{popups}              # Kill all popups in JS and HTML</screen>
+    <anchor id="filter-banners-by-link">
+    <screen>+filter{banners-by-link}     # Kill banners by their links to known clicktrackers</screen>
    </para>
    <para>
     <anchor id="filter-webbugs">
     <screen>+filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)</screen>
    </para>
    <para>
    </para>
    <para>
     <anchor id="filter-webbugs">
     <screen>+filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)</screen>
    </para>
    <para>
-    <anchor id="filter-fun">
-    <screen>+filter{fun}                 # Text replacements for subversive browsing fun!</screen>
+    <anchor id="filter-tiny-textforms">
+    <screen>+filter{tiny-textforms}      # Extend those tiny textareas up to 40x80 and kill the hard wrap</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-frameset-borders">
-    <screen>+filter{frameset-borders}    # Give frames a border and make them resizeable</screen> 
+    <anchor id="filter-jumping-windows">
+    <screen>+filter{jumping-windows}     # Prevent windows from resizing and moving themselves</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-refresh-tags">
-    <screen>+filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)</screen>
+    <anchor id="filter-frameset-borders">
+    <screen>+filter{frameset-borders}    # Give frames a border and make them resizable</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-nimda">
-    <screen>+filter{nimda}               # Remove Nimda (virus) code.</screen>
+    <anchor id="filter-demoronizer">
+    <screen>+filter{demoronizer}         # Fix MS's non-standard use of standard charsets</screen>
    </para>
    <para>
     <anchor id="filter-shockwave-flash">
     <screen>+filter{shockwave-flash}     # Kill embedded Shockwave Flash objects</screen>
    </para>
    <para>
    </para>
    <para>
     <anchor id="filter-shockwave-flash">
     <screen>+filter{shockwave-flash}     # Kill embedded Shockwave Flash objects</screen>
    </para>
    <para>
-    <anchor id="filter-crude-parental">
-    <screen>+filter{crude-parental}      # Kill all web pages that contain the words "sex" or "warez"</screen>
+    <anchor id="filter-quicktime-kioskmode">
+    <screen>+filter{quicktime-kioskmode} # Make Quicktime movies saveable</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-js-events">
-    <screen>+filter{js-events}           # Kill all JS event bindings (<emphasis>Radically destructive!</emphasis> Only for extra nasty sites) </screen>
+    <anchor id="filter-fun">
+    <screen>+filter{fun}                 # Text replacements for subversive browsing fun!</screen>
    </para>
    <para>
    </para>
    <para>
-    <anchor id="filter-demoronizer">
-    <screen>+filter{demoronizer}         # Fix non-standard MS font extensions for non-MS browsers</screen>
+    <anchor id="filter-crude-parental">
+    <screen>+filter{crude-parental}      # Crude parental filtering (demo only)</screen>
+   </para>
+   <para>
+    <anchor id="filter-ie-exploits">
+    <screen>+filter{ie-exploits}         # Disable some known Internet Explorer bug exploits</screen>
    </para>
   </listitem>
  </varlistentry>
    </para>
   </listitem>
  </varlistentry>
@@ -2998,7 +3174,7 @@ ad.doubleclick.net
  <varlistentry>
   <term>Typical use:</term>
   <listitem>
  <varlistentry>
   <term>Typical use:</term>
   <listitem>
-   <para>Eliminate those annoying pop-up windows</para>
+   <para>Eliminate those annoying pop-up windows (deprecated)</para>
   </listitem>
  </varlistentry>
 
   </listitem>
  </varlistentry>
 
@@ -3033,13 +3209,15 @@ ad.doubleclick.net
   <term>Notes:</term>
   <listitem>
    <para>
   <term>Notes:</term>
   <listitem>
    <para>
-    This action is easily confused with the built-in, hardwired <literal><link linkend="filter">filter</link></literal>
+    This action is basically a built-in, hardwired special-purpose filter
     action, but there are important differences: For <literal>kill-popups</literal>,
     the document need not be buffered, so it can be incrementally rendered while
     downloading. But <literal>kill-popups</literal> doesn't catch as many pop-ups as
     <literal><link
     action, but there are important differences: For <literal>kill-popups</literal>,
     the document need not be buffered, so it can be incrementally rendered while
     downloading. But <literal>kill-popups</literal> doesn't catch as many pop-ups as
     <literal><link
-    linkend="filter">filter</link>{<replaceable>popups</replaceable>}</literal>
-    does. 
+    linkend="FILTER-ALL-POPUPS">filter{<replaceable>all-popups</replaceable>}</link></literal>
+    does and is not as smart as <literal><link
+    linkend="FILTER-UNSOLICITED-POPUPS">filter{<replaceable>unsolicited-popups</replaceable>}</link>
+    </literal>is.
    </para>
    <para>
     Think of it as a fast and efficient replacement for a filter that you
    </para>
    <para>
     Think of it as a fast and efficient replacement for a filter that you
@@ -3050,9 +3228,12 @@ ad.doubleclick.net
     the <literal>kill-popups</literal> action over its filter equivalent.
    </para>
    <para>
     the <literal>kill-popups</literal> action over its filter equivalent.
    </para>
    <para>
-    Killing all pop-ups is a dangerous business. Many shops and banks rely on
-    pop-ups to display forms, shopping carts etc, and killing only the unwanted pop-ups 
-    would require artificial intelligence in <application>Privoxy</application>.
+    Killing all pop-ups unconditionally is problematic. Many shops and banks rely on
+    pop-ups to display forms, shopping carts etc, and the <literal><link
+    linkend="FILTER-UNSOLICITED-POPUPS">filter{<replaceable>unsolicited-popups</replaceable>}</link>
+    </literal> does a fairly good job of catching only the unwanted ones.
+   </para>
+   <para>
     If the only kind of pop-ups that you want to kill are exit consoles (those
     <emphasis>really nasty</emphasis> windows that appear when you close an other
     one), you might want to use
     If the only kind of pop-ups that you want to kill are exit consoles (those
     <emphasis>really nasty</emphasis> windows that appear when you close an other
     one), you might want to use
@@ -3391,7 +3572,8 @@ my-internal-testing-server.void</screen>
   <term>Typical use:</term>
   <listitem>
    <para>
   <term>Typical use:</term>
   <listitem>
    <para>
-    Allow only temporary <quote>session</quote> cookies (for the current browser session <emphasis>only</emphasis>).
+    Allow only temporary <quote>session</quote> cookies (for the current
+    browser session <emphasis>only</emphasis>). 
    </para>
   </listitem>
  </varlistentry>
    </para>
   </listitem>
  </varlistentry>
@@ -3400,8 +3582,9 @@ my-internal-testing-server.void</screen>
   <term>Effect:</term>
   <listitem>
    <para>
   <term>Effect:</term>
   <listitem>
    <para>
-    Deletes the <quote>expires</quote> field from <quote>Set-Cookie:</quote> server headers.
-    Most browsers will not store such cookies permanently and forget them in between sessions.
+    Deletes the <quote>expires</quote> field from <quote>Set-Cookie:</quote>
+    server headers. Most browsers will not store such cookies permanently and
+    forget them in between sessions.
    </para>
   </listitem>
  </varlistentry>
    </para>
   </listitem>
  </varlistentry>
@@ -3530,7 +3713,8 @@ my-internal-testing-server.void</screen>
      <para>
       <quote><replaceable class="parameter">target-url</replaceable></quote> to
       send a redirect to <replaceable class="parameter">target-url</replaceable>. You can redirect
      <para>
       <quote><replaceable class="parameter">target-url</replaceable></quote> to
       send a redirect to <replaceable class="parameter">target-url</replaceable>. You can redirect
-      to any image anywhere, even in your local filesystem (via <quote>file:///</quote> URL).
+      to any image anywhere, even in your local filesystem via <quote>file:///</quote> URL. 
+      (But note that not all browsers support redirecting to a local file system).
      </para>
      <para>
       A good application of redirects is to use special <application>Privoxy</application>-built-in
      </para>
      <para>
       A good application of redirects is to use special <application>Privoxy</application>-built-in
@@ -3660,16 +3844,16 @@ my-internal-testing-server.void</screen>
  # These aliases just save typing later:
  # (Note that some already use other aliases!)
  #
  # These aliases just save typing later:
  # (Note that some already use other aliases!)
  #
- +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
- -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
+ +crunch-all-cookies = +<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> +<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
+ -crunch-all-cookies = -<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> -<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
  block-as-image      = +block +handle-as-image
  block-as-image      = +block +handle-as-image
- mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
+ mercy-for-cookies   = -crunch-all-cookies -<link linkend="SESSION-COOKIES-ONLY">session-cookies-only</link> -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link>
 
  # These aliases define combinations of actions
  # that are useful for certain types of sites:
  #
 
  # These aliases define combinations of actions
  # that are useful for certain types of sites:
  #
- fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
- shop        = -crunch-all-cookies -filter{popups} -kill-popups
+ fragile     = -<link linkend="BLOCK">block</link> -<link linkend="FILTER">filter</link> -crunch-all-cookies -<link linkend="FAST-REDIRECTS">fast-redirects</link> -<link linkend="HIDE-REFERER">hide-referrer</link> -<link linkend="KILL-POPUPS">kill-popups</link>
+ shop        = -crunch-all-cookies -<link linkend="FILTER-ALL-POPUPS">filter{all-popups}</link> -<link linkend="KILL-POPUPS">kill-popups</link>
 
  # Short names for other aliases, for really lazy people ;-)
  #
 
  # Short names for other aliases, for really lazy people ;-)
  #
@@ -3703,7 +3887,7 @@ my-internal-testing-server.void</screen>
 
  # These shops require pop-ups:
  #
 
  # These shops require pop-ups:
  #
- {shop -kill-popups -filter{popups}}
+ {shop -kill-popups -filter{all-popups}}
   .dabs.com
   .overclockers.co.uk</screen>
 </para>
   .dabs.com
   .overclockers.co.uk</screen>
 </para>
@@ -3767,19 +3951,19 @@ that also explains why and how aliases are used:
 ##########################################################################
 {{alias}}
 
 ##########################################################################
 {{alias}}
 
-# These aliases just save typing later:
-# (Note that some already use other aliases!)
-#
-+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
--crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
-block-as-image      = +block +handle-as-image
-mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
+ # These aliases just save typing later:
+ # (Note that some already use other aliases!)
+ #
+ +crunch-all-cookies = +<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> +<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
+ -crunch-all-cookies = -<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> -<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
+ block-as-image      = +block +handle-as-image
+ mercy-for-cookies   = -crunch-all-cookies -<link linkend="SESSION-COOKIES-ONLY">session-cookies-only</link> -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link>
 
 
-# These aliases define combinations of actions
-# that are useful for certain types of sites:
-#
-fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
-shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
+ # These aliases define combinations of actions
+ # that are useful for certain types of sites:
+ #
+ fragile     = -<link linkend="BLOCK">block</link> -<link linkend="FILTER">filter</link> -crunch-all-cookies -<link linkend="FAST-REDIRECTS">fast-redirects</link> -<link linkend="HIDE-REFERER">hide-referrer</link> -<link linkend="KILL-POPUPS">kill-popups</link>
+ shop        = -crunch-all-cookies -<link linkend="FILTER-ALL-POPUPS">filter{all-popups}</link> -<link linkend="KILL-POPUPS">kill-popups</link></screen>
 </para>
 
 <para>
 </para>
 
 <para>
@@ -3822,20 +4006,26 @@ shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
  +<link linkend="DEANIMATE-GIFS">deanimate-gifs</link> \
  -<link linkend="DOWNGRADE-HTTP-VERSION">downgrade-http-version</link> \
  +<link linkend="FAST-REDIRECTS">fast-redirects</link> \
  +<link linkend="DEANIMATE-GIFS">deanimate-gifs</link> \
  -<link linkend="DOWNGRADE-HTTP-VERSION">downgrade-http-version</link> \
  +<link linkend="FAST-REDIRECTS">fast-redirects</link> \
- +<link linkend="FILTER-HTML-ANNOYANCES">filter{html-annoyances}</link> \
  +<link linkend="FILTER-JS-ANNOYANCES">filter{js-annoyances}</link> \
  +<link linkend="FILTER-JS-ANNOYANCES">filter{js-annoyances}</link> \
+ -<link linkend="FILTER-JS-EVENTS">filter{js-events}</link> \
+ +<link linkend="FILTER-HTML-ANNOYANCES">filter{html-annoyances}</link> \
  -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link> \
  -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link> \
- +<link linkend="FILTER-POPUPS">filter{popups}</link> \
- +<link linkend="FILTER-WEBBUGS">filter{webbugs}</link> \
- -<link linkend="FILTER-REFRESH-TAGS">filter{refresh-tags}</link> \
- -<link linkend="FILTER-FUN">filter{fun}</link> \
- +<link linkend="FILTER-NIMDA">filter{nimda}</link> \
+ +<link linkend="FILTER-REFRESH-TAGS">filter{refresh-tags}</link> \
+ +<link linkend="FILTER-UNSOLICITED-POPUPS">filter{unsolicited-popups}</link> \
+ -<link linkend="FILTER-ALL-POPUPS">filter{all-popups}</link> \
+ +<link linkend="FILTER-IMG-REORDER">filter{img-reorder}</link> \
  +<link linkend="FILTER-BANNERS-BY-SIZE">filter{banners-by-size}</link> \
  -<link linkend="FILTER-BANNERS-BY-LINK">filter{banners-by-link}</link> \
  +<link linkend="FILTER-BANNERS-BY-SIZE">filter{banners-by-size}</link> \
  -<link linkend="FILTER-BANNERS-BY-LINK">filter{banners-by-link}</link> \
- -<link linkend="FILTER-IMG-REORDER">filter{img-reorder}</link> \
+ +<link linkend="FILTER-WEBBUGS">filter{webbugs}</link> \
+ -<link linkend="FILTER-TINY-TEXTFORMS">filter{tiny-textforms}</link> \
+ +<link linkend="FILTER-JUMPING-WINDOWS">filter{jumping-windows}</link> \
+ -<link linkend="FILTER-FRAMESET-BORDERS">filter{frameset-borders}</link> \
+ -<link linkend="FILTER-DEMORONIZER">filter{demoronizer}</link> \
  -<link linkend="FILTER-SHOCKWAVE-FLASH">filter{shockwave-flash}</link> \
  -<link linkend="FILTER-SHOCKWAVE-FLASH">filter{shockwave-flash}</link> \
+ -<link linkend="FILTER-QUICKTIME-KIOSKMODE">filter{quicktime-kioskmode}</link> \
+ -<link linkend="FILTER-FUN">filter{fun}</link> \
  -<link linkend="FILTER-CRUDE-PARENTAL">filter{crude-parental}</link> \
  -<link linkend="FILTER-CRUDE-PARENTAL">filter{crude-parental}</link> \
- -<link linkend="FILTER-JS-EVENTS">filter{js-events}</link> \
+ +<link linkend="FILTER-IE-EXPLOITS">filter{ie-exploits}</link> \     
  -<link linkend="HANDLE-AS-IMAGE">handle-as-image</link> \
  +<link linkend="HIDE-FORWARDED-FOR-HEADERS">hide-forwarded-for-headers</link> \
  +<link linkend="HIDE-FROM-HEADER">hide-from-header{block}</link> \
  -<link linkend="HANDLE-AS-IMAGE">handle-as-image</link> \
  +<link linkend="HIDE-FORWARDED-FOR-HEADERS">hide-forwarded-for-headers</link> \
  +<link linkend="HIDE-FROM-HEADER">hide-from-header{block}</link> \
@@ -3859,8 +4049,6 @@ shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
  like not blocking (which is <emphasis>understandably</emphasis> the
  default!) need exceptions, i.e. we need to specify explicitly what we
  want to block in later sections.
  like not blocking (which is <emphasis>understandably</emphasis> the
  default!) need exceptions, i.e. we need to specify explicitly what we
  want to block in later sections.
- We will also want to make exceptions from our general pop-up-killing,
- and use our defined aliases for that.
 </para>
 
 <para>
 </para>
 
 <para>
@@ -3902,13 +4090,15 @@ shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
 .scan.co.uk</screen>
 </para>
 
 .scan.co.uk</screen>
 </para>
 
+<!-- No longer needed BEGIN OF COMMENTED OUT BLOCK 
+
 <para>
  Then, there are sites which rely on pop-up windows (yuck!) to work.
  Since we made pop-up-killing our default above, we need to make exceptions
  now. <ulink url="http://www.mozilla.org/">Mozilla</ulink> users, who
  can turn on smart handling of unwanted pop-ups in their browsers, can
  safely choose
 <para>
  Then, there are sites which rely on pop-up windows (yuck!) to work.
  Since we made pop-up-killing our default above, we need to make exceptions
  now. <ulink url="http://www.mozilla.org/">Mozilla</ulink> users, who
  can turn on smart handling of unwanted pop-ups in their browsers, can
  safely choose
- -<literal><link linkend="FILTER-POPUPS">filter{popups}</link></literal> (and
+ -<literal><link linkend="FILTER-ALL-POPUPS">filter{popups}</link></literal> (and
  -<literal><link linkend="KILL-POPUPS">kill-popups</link></literal>) above
  and hence don't need this section. Anyway, disabling an already disabled
  action doesn't hurt, so we'll define our exceptions regardless of what was
  -<literal><link linkend="KILL-POPUPS">kill-popups</link></literal>) above
  and hence don't need this section. Anyway, disabling an already disabled
  action doesn't hurt, so we'll define our exceptions regardless of what was
@@ -3919,12 +4109,14 @@ shop        = mercy-for-cookies -filter{popups} -kill-popups</screen>
  <screen>
 # These sites require pop-ups too :( 
 #
  <screen>
 # These sites require pop-ups too :( 
 #
-{ -<link linkend="KILL-POPUPS">kill-popups</link> -<link linkend="FILTER-POPUPS">filter{popups}</link> }
+{ -<link linkend="KILL-POPUPS">kill-popups</link> -<link linkend="FILTER-ALL-POPUPS">filter{popups}</link> }
 .dabs.com
 .overclockers.co.uk
 .deutsche-bank-24.de</screen>
 </para>
 
 .dabs.com
 .overclockers.co.uk
 .deutsche-bank-24.de</screen>
 </para>
 
+ END OF COMMENTED OUT BLOCK -->
+
 <para>
  The <literal><link linkend="FAST-REDIRECTS">fast-redirects</link></literal>
  action, which we enabled per default above,  breaks some sites. So disable
 <para>
  The <literal><link linkend="FAST-REDIRECTS">fast-redirects</link></literal>
  action, which we enabled per default above,  breaks some sites. So disable
@@ -4115,6 +4307,7 @@ www.ugu.com/sui/ugu/adv</screen>
 </sect3>
 
 <sect3><title>user.action</title>
 </sect3>
 
 <sect3><title>user.action</title>
+
 <para>
  So far we are painting with a broad brush by setting general policies,
  which would be a reasonable starting point for many people. Now, 
 <para>
  So far we are painting with a broad brush by setting general policies,
  which would be a reasonable starting point for many people. Now, 
@@ -4162,14 +4355,14 @@ www.ugu.com/sui/ugu/adv</screen>
 +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
  allow-all-cookies  = -crunch-all-cookies -session-cookies-only
 +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
  allow-all-cookies  = -crunch-all-cookies -session-cookies-only
- allow-popups       = -filter{popups} -kill-popups
+ allow-popups       = -filter{all-popups} -kill-popups
 +block-as-image     = +block +handle-as-image
 -block-as-image     = -block
 
 # These aliases define combinations of actions that are useful for
 # certain types of sites:
 #
 +block-as-image     = +block +handle-as-image
 -block-as-image     = -block
 
 # These aliases define combinations of actions that are useful for
 # certain types of sites:
 #
-fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
+fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referrer -kill-popups
 shop        = -crunch-all-cookies allow-popups
 
 # Allow ads for selected useful free sites:
 shop        = -crunch-all-cookies allow-popups
 
 # Allow ads for selected useful free sites:
@@ -4191,43 +4384,40 @@ allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}</screen>
 <para>
  <screen>
 { allow-all-cookies }
 <para>
  <screen>
 { allow-all-cookies }
+sourceforge.net
 sunsolve.sun.com
 sunsolve.sun.com
-slashdot.org
+.slashdot.org
 .yahoo.com
 .msdn.microsoft.com
 .redhat.com</screen>
 </para>
 
 <para>
 .yahoo.com
 .msdn.microsoft.com
 .redhat.com</screen>
 </para>
 
 <para>
- Your bank needs popups and is allergic to some filter, but you don't
- know which, so you disable them all:
+ Your bank is allergic to some filter, but you don't know which, so you disable them all:
 </para>
 
 <para>
  <screen>
 </para>
 
 <para>
  <screen>
-{ -<link linkend="FILTER">filter</link> -<link linkend="KILL-POPUPS">kill-popups</link> }
+{ -<link linkend="FILTER">filter</link> }
 .your-home-banking-site.com</screen>
 </para>
 
 <para>
 .your-home-banking-site.com</screen>
 </para>
 
 <para>
- Some hosts and some file types you may not want to filter.
- <application>Privoxy</application> makes no distinctions between regular web
- pages and downloads done via your web browser if it is an html or text type
- document.
+ Some file types you may not want to filter for various reasons:
 </para>
 
 <para>
  <screen>
 </para>
 
 <para>
  <screen>
-{ -<link linkend="FILTER">filter</link> }
-localhost
-apache_server.mylan
-
-# A list of common file extensions that are likely to indicate raw text, and best
-# if unfiltered.
-/(.*/)?.*\.(pl|(s|p)?h|c(c|xx|pp)?|tcl|am|init?|cfg?|conf(ig)?|txt|rc|bat)$
+# Technical documentation is likely to contain strings that might
+# erroneously get altered by the JavaScript-oriented filters:
+#
+.tldp.org
+/(.*/)?selfhtml/
 
 
-# Documentation should not need filtering (at least on some sites).
-.tldp.org</screen>
+# And this stupid host sends streaming video with a wrong MIME type,
+# so that Privoxy thinks it is getting HTML and starts filtering:
+#
+stupid-server.example.com/</screen>
 </para>
 
 <para>
 </para>
 
 <para>
@@ -4245,30 +4435,27 @@ apache_server.mylan
  <screen>
 { +<link linkend="BLOCK">block</link> }
 www.example.com/nasty-ads/sponsor.gif
  <screen>
 { +<link linkend="BLOCK">block</link> }
 www.example.com/nasty-ads/sponsor.gif
-another.popular.site.net/more/junk/here/
-
-#  Here we found one that is not in <application>Privoxy's</application> default blocked list:
-.adfactory.net</screen>
+another.popular.site.net/more/junk/here/</screen>
 </para>
 
 <para>
 </para>
 
 <para>
- To force URLs that tend to have ad images, but it is difficult for
- <application>Privoxy</application> to know this since the ultimate returned
- object is obscured for one reason or another, we can try to force these to be
- treated as images (and thus avoid <application>Privoxy's</application>
- <quote>BLOCKED</quote> banner page). Note that if what is returned by the
- server turns out NOT to be an image, then your browser typically will display
- a broken icon image. Use cautiously.
+ The URLs of dynamically generated banners, especially from large banner
+ farms, often don't use the well-known image file name extensions, which
+ makes it impossible for <application>Privoxy</application> to guess
+ the file type just by looking at the URL. 
+ You can use the <literal>+block-as-image</literal> alias defined above for
+ these cases.
+ Note that objects which match this rule but then turn out NOT to be an
+ image are typically rendered as a <quote>broken image</quote> icon by the
+ browser. Use cautiously.
 </para>
 
 <para>
  <screen>
 { +block-as-image }
 </para>
 
 <para>
  <screen>
 { +block-as-image }
-# A shockwave ad, very annoying.
-.trip.com/.*\.swf
 .doubleclick.net
 /Realmedia/ads/
 .doubleclick.net
 /Realmedia/ads/
-adremote.</screen>
+ar.atwola.com/</screen>
 </para>
 
 <para>
 </para>
 
 <para>
@@ -4381,11 +4568,11 @@ adremote.</screen>
 </para>
 
 <para>
 </para>
 
 <para>
- Filtering works on any text-based document type, including plain
text, HTML, JavaScript, CSS etc. (all <literal>text/*</literal>
- MIME types). Substitutions are made at the source level, so if
- you want to <quote>roll your own</quote> filters, you should be
- familiar with HTML syntax.
+ Filtering works on any text-based document type, including 
+ HTML, JavaScript, CSS etc. (all <literal>text/*</literal>
+ MIME types, <emphasis>except</emphasis> <literal>text/plain</literal>).
+ Substitutions are made at the source level, so if you want to <quote>roll
your own</quote> filters, you should be familiar with HTML syntax.
 </para>
 
 <para>
 </para>
 
 <para>
@@ -4442,6 +4629,7 @@ adremote.</screen>
  The below examples might also help to get you started.
 </para>
 
  The below examples might also help to get you started.
 </para>
 
+
 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
 
 <sect2><title>Filter File Tutorial</title>
 <!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
 
 <sect2><title>Filter File Tutorial</title>
@@ -4668,6 +4856,349 @@ s* industry[ -]leading \
 <para>
  You get the idea?
 </para>
 <para>
  You get the idea?
 </para>
+</sect2>
+
+<!--   ~~~~~~~~       New section Header    ~~~~~~~~~     -->
+
+<sect2 id="predefined-filters"><title>The Pre-defined Filters</title>
+
+<!-- 
+
+ Note each filter is also listed in the +filter action section above. Please
+ keep these listings in sync.
+-->
+
+<para>
+The distribution <filename>default.filter</filename> file contains a selection of
+pre-defined filters for your convenience:
+</para>
+
+<variablelist>
+ <varlistentry>
+  <term><emphasis>js-annoyances</emphasis></term>
+  <listitem>
+   <para>
+    The purpose of this filter is to get rid of particularly annoying JavaScript abuse.
+    To that end, it
+   <itemizedlist>
+    <listitem>
+     <para>
+      replaces JavaScript references to the browser's referrer information
+      with the string "Not Your Business!". This compliments the <literal><link
+      linkend="hide-referrer">hide-referrer</link></literal> action on the content level.
+     </para>
+    </listitem>
+    <listitem>
+     <para>
+      removes the bindings to the DOM's
+      <ulink url="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-htmlevents">unload
+      event</ulink> which we feel has no right to exist and is responsible for most <quote>exit consoles</quote>, i.e.
+      nasty windows that pop up when you close another one.
+     </para>
+    </listitem>
+    <listitem>
+     <para>
+      removes code that causes new windows to be opened with undesired properties, such as being
+      full-screen, non-resizable, without location, status or menu bar etc.
+     </para>
+    </listitem>
+   </itemizedlist>
+   </para>
+  </listitem>
+ </varlistentry>
+ <varlistentry>
+  <term><emphasis>js-events</emphasis></term>
+  <listitem>
+   <para>
+    This is a very radical measure. It removes virtually all JavaScript event bindings, which
+    means that scripts can not react to user actions such as mouse movements or clicks, window
+    resizing etc, anymore. 
+   </para>
+   <para>
+    We <emphasis>strongly discourage</emphasis> using this filter as a default since it breaks
+    many legitimate scripts. It is meant for use only on extra-nasty sites (should you really
+    need to go there).
+   </para>
+  </listitem>
+ </varlistentry>
+
+<varlistentry>
+  <term><emphasis>html-annoyances</emphasis></term>
+  <listitem>
+   <para>
+    This filter will undo many common instances of HTML based abuse.
+   </para>
+   <para>
+    The <literal>BLINK</literal> and <literal>MARQUEE</literal> tags 
+    are neutralized (yeah baby!), and browser windows will be created as
+    resizable (as of course they should be!), and will have location,
+    scroll and menu bars -- even if specified otherwise.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>content-cookies</emphasis></term>
+  <listitem>
+   <para>
+    Most cookies are set in the HTTP dialogue, where they can be intercepted
+    by the
+    <literal><link linkend="crunch-incoming-cookies">crunch-incoming-cookies</link></literal>
+    and <literal><link linkend="crunch-outgoing-cookies">crunch-outgoing-cookies</link></literal>
+    actions. But web sites increasingly make use of HTML meta tags and JavaScript
+    to sneak cookies to the browser on the content level.
+   </para>
+   <para>
+    This filter disables HTML and JavaScript code that reads or sets cookies. Use
+    it wherever you would also use the cookie crunch actions.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>refresh tags</emphasis></term>
+  <listitem>
+   <para>
+    Disable any refresh tags if the interval is greater than nine seconds (so 
+    that redirections done via refresh tags are not destroyed). This is useful 
+    for dial-on-demand setups, or for those who find this HTML feature
+    annoying.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>unsolicited-popups</emphasis></term>
+  <listitem>
+   <para>
+    This filter attempts to prevent only <quote>unsolicited</quote> pop-up 
+    windows from opening, yet still allow pop-up windows that the user 
+    has explicitly chosen to open. It was added in version 3.0.1, 
+    as an improvement over earlier such filters.
+   </para>
+   <para>
+    Technical note: The filter works by redefining the window.open JavaScript
+    function to a dummy function during the loading and rendering phase of each
+    HTML page access, and restoring the function afterwards.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>all-popups</emphasis></term>
+  <listitem>
+   <para>
+    Attempt to prevent <emphasis>all</emphasis> pop-up windows from opening.
+    Note this should be used with more discretion than the above, since it is
+    more likely to break some sites that require pop-ups for normal usage. Use 
+    with caution.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>img-reorder</emphasis></term>
+  <listitem>
+   <para>
+    This is a helper filter that has no value if used alone. It makes the
+    <literal>banners-by-size</literal> and <literal>banners-by-link</literal>
+    (see below) filters more effective and should be enabled together with them.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>banners-by-size</emphasis></term>
+  <listitem>
+   <para>
+    This filter removes image tags purely based on what size they are. Fortunately 
+    for us, many ads and banner images tend to conform to certain standardized
+    sizes, which makes this filter quite effective for ad stripping purposes.
+   </para>
+   <para>
+    Occasionally this filter will cause false positives on images that are not ads,
+    but just happen to be of one of the standard banner sizes.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>banners-by-link</emphasis></term>
+  <listitem>
+   <para>
+    This is an experimental filter that attempts to kill any banners if 
+    their URLs seem to point to known or suspected click trackers. It is currently
+    not of much value and is not recommended for use by default.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>webbugs</emphasis></term>
+  <listitem>
+   <para>
+    Webbugs are small, invisible images (technically 1X1 GIF images), that 
+    are used to track users across websites, and collect information on them.
+    As an HTML page is loaded by the browser, an embedded image tag causes the
+    browser to contact a third-party site, disclosing the tracking information
+    through the requested URL and/or cookies for that third-party domain, without
+    the use ever becoming aware of the interaction with the third-party site.
+    HTML-ized spam also uses a similar technique to verify email addresses.
+   </para>
+   <para>
+    This filter removes the HTML code that loads such <quote>webbugs</quote>.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>tiny-textforms</emphasis></term>
+  <listitem>
+   <para>
+    A rather special-purpose filter that can be used to enlarge textareas (those
+    multi-line text boxes in web forms) and turn off hard word wrap in them. 
+    It was written for the sourceforge.net tracker system where such boxes are
+    a nuisance, but it can be handy on other sites, too.
+   </para>
+   <para>
+    It is not recommended to use this filter as a default.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>jumping-windows</emphasis></term>
+  <listitem>
+   <para>
+    Many consider windows that move, or resize themselves to be abusive. This filter
+    neutralizes the related JavaScript code. Note that some sites might not display
+    or behave as intended when using this filter.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>frameset-borders</emphasis></term>
+  <listitem>
+   <para>
+    Some web designers seem to assume that everyone in the world will view their
+    web sites using the same browser brand and version, screen resolution etc,
+    because only that assumption could explain why they'd use static frame sizes,
+    yet prevent their frames from being resized by the user, should they be too
+    small to show their whole content.
+   </para>
+   <para>
+    This filter removes the related HTML code. It should only be applied to sites
+    which need it.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>demoronizer</emphasis></term>
+  <listitem>
+   <para>
+    Many Microsoft products that generate HTML use non-standard extensions (read:
+    violations) of the ISO 8859-1 aka Latin-1 character set. This causes those
+    HTML documents to display with errors on standard-compliant platforms. 
+   </para>
+   <para>
+    This filter translates the MS-only characters into Latin-1 equivalents. 
+    It is not necessary when using MS products, and will cause corruption of  
+    all documents that use 8-bit character sets other than Latin-1. It's mostly
+    worthwhile for Europeans on non-MS platforms, if wierd garbage characters
+    sometimes appear on some pages.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>shockwave-flash</emphasis></term>
+  <listitem>
+   <para>
+    A filter for shockwave haters. As the name suggests, this filter strips code
+    out of web pages that is used to embed shockwave flash objects. 
+   </para>
+   <para>
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>quicktime-kioskmode</emphasis></term>
+  <listitem>
+   <para>
+    Change HTML code that embeds Quicktime objects so that kioskmode, which
+    prevents saving, is disabled.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>fun</emphasis></term>
+  <listitem>
+   <para>
+    Text replacements for subversive browsing fun. Make fun of your favorite
+    Monopolist or play buzzword bingo.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>crude-parental</emphasis></term>
+  <listitem>
+   <para>
+    A demonstration-only filter that shows how <application>Privoxy</application>
+    can be used to delete web content on a keyword basis.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>ie-exploits</emphasis></term>
+  <listitem>
+   <para>
+    A collection of text replacements to disable malicious HTML and JavaScript
+    code that exploits known security holes in Internet Explorer.
+   </para>
+   <para>
+    Presently, it only protects against Nimda and a cross-site scripting bug, and
+    would need active maintenance to provide more substantial protection.
+   </para>
+  </listitem>
+ </varlistentry>
+
+ <varlistentry>
+  <term><emphasis>site-specifics</emphasis></term>
+  <listitem>
+   <para>
+    Some web sites have very specific problems, the cure for which doesn't apply
+    anywhere else, or could even cause damage on other sites.
+   </para>
+   <para>
+    This is a collection of such site-specific cures which should only be applied
+    to the sites they were intended for, which is what the supplied
+    <filename>default.action</filename> file does. Users shouldn't need to change
+    anything regarding this filter.
+   </para>
+  </listitem>
+ </varlistentry>
+
+<!--
+ <varlistentry>
+  <term><emphasis> </emphasis></term>
+  <listitem>
+   <para>
+   </para>
+   <para>
+   </para>
+  </listitem>
+ </varlistentry>
+-->
+</variablelist>
+
 </sect2>
 </sect1>
 
 </sect2>
 </sect1>
 
@@ -4720,7 +5251,7 @@ s* industry[ -]leading \
  blocks of HTML code disappear when a specific symbol is set. We use this
  for many purposes, one of them being to include the beta warning in all
  our user interface (CGI) pages when <application>Privoxy</application>
  blocks of HTML code disappear when a specific symbol is set. We use this
  for many purposes, one of them being to include the beta warning in all
  our user interface (CGI) pages when <application>Privoxy</application>
- in in an alpha or beta development stage:
+ is in an alpha or beta development stage:
 </para>
 
 <para>
 </para>
 
 <para>
@@ -5764,32 +6295,88 @@ In file: user.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibut
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
  $Log: user-manual.sgml,v $
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
  $Log: user-manual.sgml,v $
- Revision 2.9  2003/04/11 03:14:53  hal9
- Add small note about one filter file may be defined.
+ Revision 1.123.2.43  2005/05/23 09:59:10  hal9
+ Fix typo 'loose'
+
+ Revision 1.123.2.42  2004/12/04 14:39:57  hal9
+ Fix two minor typos per bug SF report.
+
+ Revision 1.123.2.41  2004/03/23 12:58:42  oes
+ Fixed an inaccuracy
+
+ Revision 1.123.2.40  2004/02/27 12:48:49  hal9
+ Add comment re: redirecting to local file system for set-image-blocker may
+ is dependent on browser.
+
+ Revision 1.123.2.39  2004/01/30 22:31:40  oes
+ Added a hint re bookmarklets to Quickstart section
+
+ Revision 1.123.2.38  2004/01/30 16:47:51  oes
+ Some minor clarifications
+
+ Revision 1.123.2.37  2004/01/29 22:36:11  hal9
+ Updates for no longer filtering text/plain, and demoronizer default settings,
+ and copyright notice dates.
+
+ Revision 1.123.2.36  2003/12/10 02:26:26  hal9
+ Changed the demoronizer filter description.
+
+ Revision 1.123.2.35  2003/11/06 13:36:37  oes
+ Updated link to nightly CVS tarball
+
+ Revision 1.123.2.34  2003/06/26 23:50:16  hal9
+ Add a small bit on filtering and problems re: source code being corrupted.
+
+ Revision 1.123.2.33  2003/05/08 18:17:33  roro
+ Use apt-get instead of dpkg to install Debian package, which is more
+ solid, uses the correct and most recent Debian version automatically.
+
+ Revision 1.123.2.32  2003/04/11 03:13:57  hal9
+ Add small note about only one filterfile (as opposed to multiple actions
+ files).
+
+ Revision 1.123.2.31  2003/03/26 02:03:43  oes
+ Updated hard-coded copyright dates
+
+ Revision 1.123.2.30  2003/03/24 12:58:56  hal9
+ Add new section on Predefined Filters.
+
+ Revision 1.123.2.29  2003/03/20 02:45:29  hal9
+ More problems with \-\-chroot causing markup problems :(
+
+ Revision 1.123.2.28  2003/03/19 00:35:24  hal9
+ Manual edit of revision log because 'chroot' (even inside a comment) was
+ causing Docbook to hang here (due to double hyphen and the processor thinking
+ it was a comment).
+
+ Revision 1.123.2.27  2003/03/18 19:37:14  oes
+ s/Advanced|Radical/Adventuresome/g to avoid complaints re fun filter
+
+ Revision 1.123.2.26  2003/03/17 16:50:53  oes
+ Added documentation for new chroot option
 
 
- Revision 2.8  2002/10/21 02:46:09  hal9
- Port changes to user.action examples section from 3.0.
+ Revision 1.123.2.25  2003/03/15 18:36:55  oes
+ Adapted to the new filters
 
 
- Revision 2.7  2002/10/12 01:14:42  hal9
- Updates for demoronizer filter, Radical profile, and the srvany.exe/icon
win32 fix.
+ Revision 1.123.2.24  2002/11/17 06:41:06  hal9
+ Move default profiles table from FAQ to U-M, and other minor related changes.
Add faq on cookies.
 
 
- Revision 2.6  2002/10/10 04:10:38  hal9
s/Advanced/Radical/ for standard.action change.
+ Revision 1.123.2.23  2002/10/21 02:32:01  hal9
Updates to the user.action examples section. A few new ones.
 
 
- Revision 2.5  2002/10/10 03:50:38  hal9
- Update cookie sections for pre-existing condition, and content cookies not
- effected by session-cookies setting.
+ Revision 1.123.2.22  2002/10/12 00:51:53  hal9
+ Add demoronizer to filter section.
 
 
- Revision 2.4  2002/09/26 05:58:07  hal9
Change development status from working on 3.0 to 3.2.
+ Revision 1.123.2.21  2002/10/10 04:09:35  hal9
s/Advanced/Radical/ and added very brief note.
 
 
- Revision 2.3  2002/09/26 00:12:17  hal9
- Additional notes on Privoxy patterns, and filtering vs SSL.
+ Revision 1.123.2.20  2002/10/10 03:49:21  hal9
+ Add notes to session-cookies-only and Quickstart about pre-existing
+ cookies. Also, note content-cookies work differently.
 
 
- Revision 2.2  2002/09/05 05:45:30  hal9
- Syncing with 3.0. This should be it for doc sources. Not all builds tested
- yet. No new content, just catching up.
+ Revision 1.123.2.19  2002/09/26 01:25:36  hal9
+ More explanation on Privoxy patterns, more on content-cookies and SSL.
 
  Revision 1.123.2.18  2002/08/22 23:47:58  hal9
  Add 'Documentation' to Privoxy Menu shot in Configuration section to match
 
  Revision 1.123.2.18  2002/08/22 23:47:58  hal9
  Add 'Documentation' to Privoxy Menu shot in Configuration section to match
index 46fa09b..9e0fbad 100644 (file)
@@ -1,14 +1,14 @@
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
-<!entity % dummy "INCLUDE"> 
+<!entity % dummy "IGNORE"> 
 <!entity p-intro SYSTEM "privoxy.sgml">
 <!entity contacting SYSTEM "contacting.sgml">
 <!entity history SYSTEM "history.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
 <!entity p-intro SYSTEM "privoxy.sgml">
 <!entity contacting SYSTEM "contacting.sgml">
 <!entity history SYSTEM "history.sgml">
 <!entity copyright SYSTEM "copyright.sgml">
 <!entity license SYSTEM "license.sgml">
-<!entity p-version SYSTEM "doc_version.tmp">
-<!entity p-status SYSTEM "doc_status.tmp">
+<!entity p-version "3.0.3">
+<!entity p-status "stable">
 <!entity % p-not-stable "IGNORE">
 <!entity % p-not-stable "IGNORE">
-<!entity % p-stable "IGNORE">
+<!entity % p-stable "INCLUDE">
 <!entity  my-copy "&copy;">        <!-- kludge for docbook2man            -->
 <!entity % p-homepage "IGNORE">    <!-- toggle for webserver index.html   -->
 <!entity % p-index "IGNORE">       <!-- toggle for local doc index        -->
 <!entity  my-copy "&copy;">        <!-- kludge for docbook2man            -->
 <!entity % p-homepage "IGNORE">    <!-- toggle for webserver index.html   -->
 <!entity % p-index "IGNORE">       <!-- toggle for local doc index        -->
@@ -20,9 +20,9 @@
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
                 
                 This file belongs into
                 ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
                 
- $Id: index.sgml,v 1.16.2.8 2002/08/16 03:05:42 hal9 Exp $
+ $Id: index.sgml,v 1.16.2.12 2004/01/30 14:33:41 oes Exp $
 
 
- Copyright (C) 2001, 2002 Privoxy Developers <developers@privoxy.org>
+ Copyright (C) 2001 - 2004 Privoxy Developers <developers@privoxy.org>
  See LICENSE.
 
  ========================================================================
  See LICENSE.
 
  ========================================================================
 
  <abstract>
 
 
  <abstract>
 
+<![%dummy;[
+  <para>
+   <comment>
+    This is here to keep vim syntax file from breaking :/
+    If I knew enough to fix it, I would.
+    PLEASE DO NOT REMOVE! HB: hal@foobox.net
+   </comment>
+  </para>
+]]>
 
 <!-- Include privoxy.sgml boilerplate: -->
   &p-intro;
 
 <!-- Include privoxy.sgml boilerplate: -->
   &p-intro;
@@ -66,7 +75,7 @@
 
 <![%p-homepage;[
   <para>
 
 <![%p-homepage;[
   <para>
-   The most recent release is &p-version; (&p-status;)
+   The most recent release is <ulink url="announce.txt">&p-version; (&p-status;)</ulink>
   </para>
 ]]>
 
   </para>
 ]]>
 
@@ -86,7 +95,7 @@
   </listitem>
   <listitem>
    <para>
   </listitem>
   <listitem>
    <para>
-    <ulink url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz">Download the latest CVS snapshot (source tarball)</ulink>
+    <ulink url="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2">Download the latest CVS snapshot (source tarball)</ulink>
    </para>
   </listitem>
   <listitem>
    </para>
   </listitem>
   <listitem>
    </para>
   </listitem>
 <![%p-homepage;[
    </para>
   </listitem>
 <![%p-homepage;[
-<!-- not included for local installation index page -->
+<!-- not included for local index page -->
   <listitem>
    <para>
     <ulink url="pdf/privoxy-pdf-docs.zip">The above docs as PDF in Zip archive</ulink>
   <listitem>
    <para>
     <ulink url="pdf/privoxy-pdf-docs.zip">The above docs as PDF in Zip archive</ulink>
 ]]>
 
 <!-- Formal copyright markup does not work here. HB. -->
 ]]>
 
 <!-- Formal copyright markup does not work here. HB. -->
+<!-- NOTE: I could not get docbook to completely ignore &copy; -->
+<!-- GNUMakefile is inserting this now -->
 <para>
  <subscript>
 <para>
  <subscript>
-  Copyright &copy; 2001, 2002 by Privoxy Developers
+  Copyright __copy 2001 - 2004 by Privoxy Developers
  </subscript>
 </para>
 
  </subscript>
 </para>
 
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
  $Log: index.sgml,v $
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
  $Log: index.sgml,v $
+ Revision 1.16.2.12  2004/01/30 14:33:41  oes
+ Vi(m) syntax voodoo now hidden; copyright updated
+
+ Revision 1.16.2.11  2003/08/16 12:16:30  hal9
+ Update cvs tarball URL (to bz2)
+
+ Revision 1.16.2.10  2003/03/28 03:33:09  hal9
+ Include link for announce.txt, and change handling of &copy;.
+
+ Revision 1.16.2.9  2003/03/26 02:03:45  oes
+ Updated hard-coded copyright dates
+
  Revision 1.16.2.8  2002/08/16 03:05:42  hal9
  Put all pdf docs in a zip archive now.
 
  Revision 1.16.2.8  2002/08/16 03:05:42  hal9
  Put all pdf docs in a zip archive now.
 
index c65e06f..9b7c46e 100644 (file)
@@ -1,8 +1,8 @@
 Privoxy Developer Manual
 
 Privoxy Developer Manual
 
-Copyright © 2001, 2002 by Privoxy Developers
+[ Copyright © 2001, 2002 by Privoxy Developers ]
 
 
-$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $
+$Id: developer-manual.txt,v 1.32.2.7 2004/01/30 23:46:56 oes Exp $
 
 The developer manual provides guidance on coding, testing, packaging,
 documentation and other issues of importance to those involved with Privoxy
 
 The developer manual provides guidance on coding, testing, packaging,
 documentation and other issues of importance to those involved with Privoxy
@@ -10,7 +10,7 @@ development. It is mandatory (and helpful!) reading for anyone who wants to
 join the team.
 
 Please note that this document is constantly evolving. This copy represents the
 join the team.
 
 Please note that this document is constantly evolving. This copy represents the
-state at the release of version 3.1.1. You can find the latest version of the
+state at the release of version 3.0.3. You can find the latest version of the
 this manual at http://www.privoxy.org/developer-manual/. Please see the Contact
 section on how to contact the developers.
 
 this manual at http://www.privoxy.org/developer-manual/. Please see the Contact
 section on how to contact the developers.
 
@@ -18,26 +18,26 @@ section on how to contact the developers.
 
 Table of Contents
 1. Introduction
 
 Table of Contents
 1. Introduction
-   
+
     1.1. Quickstart to Privoxy Development
     1.1. Quickstart to Privoxy Development
-   
+
 2. The CVS Repository
 2. The CVS Repository
-   
+
     2.1. Access to CVS
     2.2. Branches
     2.3. CVS Commit Guidelines
     2.1. Access to CVS
     2.2. Branches
     2.3. CVS Commit Guidelines
-   
+
 3. Documentation Guidelines
 3. Documentation Guidelines
-   
+
     3.1. Quickstart to Docbook and SGML
     3.2. Privoxy Documentation Style
     3.3. Privoxy Custom Entities
     3.1. Quickstart to Docbook and SGML
     3.2. Privoxy Documentation Style
     3.3. Privoxy Custom Entities
-   
+
 4. Coding Guidelines
 4. Coding Guidelines
-   
+
     4.1. Introduction
     4.2. Using Comments
     4.1. Introduction
     4.2. Using Comments
-       
+
         4.2.1. Comment, Comment, Comment
         4.2.2. Use blocks for comments
         4.2.3. Keep Comments on their own line
         4.2.1. Comment, Comment, Comment
         4.2.2. Use blocks for comments
         4.2.3. Keep Comments on their own line
@@ -45,17 +45,17 @@ Table of Contents
         4.2.5. Comment All Functions Thoroughly
         4.2.6. Comment at the end of braces if the content is more than one
             screen length
         4.2.5. Comment All Functions Thoroughly
         4.2.6. Comment at the end of braces if the content is more than one
             screen length
-       
+
     4.3. Naming Conventions
     4.3. Naming Conventions
-       
+
         4.3.1. Variable Names
         4.3.2. Function Names
         4.3.3. Header file prototypes
         4.3.4. Enumerations, and #defines
         4.3.5. Constants
         4.3.1. Variable Names
         4.3.2. Function Names
         4.3.3. Header file prototypes
         4.3.4. Enumerations, and #defines
         4.3.5. Constants
-       
+
     4.4. Using Space
     4.4. Using Space
-       
+
         4.4.1. Put braces on a line by themselves.
         4.4.2. ALL control statements should have a block
         4.4.3. Do not belabor/blow-up boolean expressions
         4.4.1. Put braces on a line by themselves.
         4.4.2. ALL control statements should have a block
         4.4.3. Do not belabor/blow-up boolean expressions
@@ -63,13 +63,13 @@ Table of Contents
         4.4.5. Don't use white space around structure operators
         4.4.6. Make the last brace of a function stand out
         4.4.7. Use 3 character indentions
         4.4.5. Don't use white space around structure operators
         4.4.6. Make the last brace of a function stand out
         4.4.7. Use 3 character indentions
-       
+
     4.5. Initializing
     4.5. Initializing
-       
+
         4.5.1. Initialize all variables
         4.5.1. Initialize all variables
-       
+
     4.6. Functions
     4.6. Functions
-       
+
         4.6.1. Name functions that return a boolean as a question.
         4.6.2. Always specify a return type for a function.
         4.6.3. Minimize function calls when iterating by using variables
         4.6.1. Name functions that return a boolean as a question.
         4.6.2. Always specify a return type for a function.
         4.6.3. Minimize function calls when iterating by using variables
@@ -80,9 +80,9 @@ Table of Contents
         4.6.8. Use `extern "C"` when appropriate
         4.6.9. Where Possible, Use Forward Struct Declaration Instead of
             Includes
         4.6.8. Use `extern "C"` when appropriate
         4.6.9. Where Possible, Use Forward Struct Declaration Instead of
             Includes
-       
+
     4.7. General Coding Practices
     4.7. General Coding Practices
-       
+
         4.7.1. Turn on warnings
         4.7.2. Provide a default case for all switch statements
         4.7.3. Try to avoid falling through cases in a switch statement.
         4.7.1. Turn on warnings
         4.7.2. Provide a default case for all switch statements
         4.7.3. Try to avoid falling through cases in a switch statement.
@@ -94,20 +94,20 @@ Table of Contents
             'free'
         4.7.9. Add loaders to the `file_list' structure and in order
         4.7.10. "Uncertain" new code and/or changes to existing code, use FIXME
             'free'
         4.7.9. Add loaders to the `file_list' structure and in order
         4.7.10. "Uncertain" new code and/or changes to existing code, use FIXME
-       
+
     4.8. Addendum: Template for files and function comment blocks:
     4.8. Addendum: Template for files and function comment blocks:
-   
+
 5. Testing Guidelines
 5. Testing Guidelines
-   
+
     5.1. Testplan for releases
     5.2. Test reports
     5.1. Testplan for releases
     5.2. Test reports
-   
+
 6. Releasing a New Version
 6. Releasing a New Version
-   
+
     6.1. Version numbers
     6.2. Before the Release: Freeze
     6.3. Building and Releasing the Packages
     6.1. Version numbers
     6.2. Before the Release: Freeze
     6.3. Building and Releasing the Packages
-       
+
         6.3.1. Note on Privoxy Packaging
         6.3.2. Source Tarball
         6.3.3. SuSE, Conectiva or Red Hat RPM
         6.3.1. Note on Privoxy Packaging
         6.3.2. Source Tarball
         6.3.3. SuSE, Conectiva or Red Hat RPM
@@ -120,24 +120,24 @@ Table of Contents
         6.3.10. HP-UX 11
         6.3.11. Amiga OS
         6.3.12. AIX
         6.3.10. HP-UX 11
         6.3.11. Amiga OS
         6.3.12. AIX
-       
+
     6.4. Uploading and Releasing Your Package
     6.5. After the Release
     6.4. Uploading and Releasing Your Package
     6.5. After the Release
-   
+
 7. Update the Webserver
 8. Contacting the developers, Bug Reporting and Feature Requests
 7. Update the Webserver
 8. Contacting the developers, Bug Reporting and Feature Requests
-   
+
     8.1. Get Support
     8.2. Report Bugs
     8.3. Request New Features
     8.4. Report Ads or Other Actions-Related Problems
     8.5. Other
     8.1. Get Support
     8.2. Report Bugs
     8.3. Request New Features
     8.4. Report Ads or Other Actions-Related Problems
     8.5. Other
-   
+
 9. Privoxy Copyright, License and History
 9. Privoxy Copyright, License and History
-   
+
     9.1. License
     9.2. History
     9.1. License
     9.2. History
-   
+
 10. See also
 
 1. Introduction
 10. See also
 
 1. Introduction
@@ -155,24 +155,27 @@ porting, are all important jobs as well.
 
 1.1. Quickstart to Privoxy Development
 
 
 1.1. Quickstart to Privoxy Development
 
-You'll need an account on Sourceforge to support our development. Mail your ID
-to the list and wait until a project manager has added you.
+The first step is to join the developer's mailing list. You can submit your
+ideas, or even better patches. Patches are best submitted to the Sourceforge
+tracker set up for this purpose, but can be sent to the list for review too.
 
 You will also need to have a cvs package installed, which will entail having
 ssh installed as well (which seems to be a requirement of SourceForge), in
 order to access the cvs repository. Having the GNU build tools is also going to
 be important (particularly, autoconf and gmake).
 
 
 You will also need to have a cvs package installed, which will entail having
 ssh installed as well (which seems to be a requirement of SourceForge), in
 order to access the cvs repository. Having the GNU build tools is also going to
 be important (particularly, autoconf and gmake).
 
-For the time being (read, this section is under construction), please refer to
-the extensive comments in the source code.
+For the time being (read, this section is under construction), you can also
+refer to the extensive comments in the source code. In fact, reading the code
+is recommended in any case.
 
 -------------------------------------------------------------------------------
 
 2. The CVS Repository
 
 
 -------------------------------------------------------------------------------
 
 2. The CVS Repository
 
-If you intend to help us with programming, documentation or packaging you will
-need write access to our holy grail, the CVS repository. Please read this
-chapter completely before accessing via CVS.
+If you become part of the active development team, you will eventually need
+write access to our holy grail, the CVS repository. One of the team members
+will need to set this up for you. Please read this chapter completely before
+accessing via CVS.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -197,13 +200,19 @@ visualizing how these pieces fit together.
 Branches are used to fork a sub-development path from the main trunk. Within
 the current module where the sources are, there is always at least one "branch"
 from the main trunk devoted to a stable release series. The main trunk is where
 Branches are used to fork a sub-development path from the main trunk. Within
 the current module where the sources are, there is always at least one "branch"
 from the main trunk devoted to a stable release series. The main trunk is where
-active development takes place for the next stable series (e.g. 3.2.x). And for
-testing bugfixes for the stable series. Just prior to each stable series (e.g.
-3.0.x), a branch is created just for stable series releases (e.g. 3.0.0 ->
-3.0.1 -> 3.0.2, etc). Once the initial stable release of any stable branch has
-taken place, this branch is only used for bugfixes, which have had prior
-testing before being committed to CVS. (See Version Numbers below for details
-on versioning.)
+active development takes place for the next stable series (e.g. 3.2.x). So just
+prior to each stable series (e.g. 3.0.x), a branch is created just for stable
+series releases (e.g. 3.0.0 -> 3.0.1 -> 3.0.2, etc). Once the initial stable
+release of any stable branch has taken place, this branch is only used for
+bugfixes, which have had prior testing before being committed to CVS. (See
+Version Numbers below for details on versioning.)
+
+This will result in at least two active branches, which means there may be
+occasions that require the same (or similar) item to be checked into to two
+different places (assuming its a bugfix and needs fixing in both the stable and
+unstable trees). This also means that in order to have access to both trees,
+both will have to be checked out separately. Use the cvs -r flag to check out a
+branch, e.g: cvs co -r v_3_0_branch current.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -220,49 +229,43 @@ Basic Guidelines, for all branches:
   * Never (read: never, ever) be tempted to commit that small change without
     testing it thoroughly first. When we're close to a public release, ask a
     fellow developer to review your changes.
   * Never (read: never, ever) be tempted to commit that small change without
     testing it thoroughly first. When we're close to a public release, ask a
     fellow developer to review your changes.
-   
+
   * Your commit message should give a concise overview of what you changed (no
     big details) and why you changed it Just check previous messages for good
     examples.
   * Your commit message should give a concise overview of what you changed (no
     big details) and why you changed it Just check previous messages for good
     examples.
-   
+
   * Don't use the same message on multiple files, unless it equally applies to
     all those files.
   * Don't use the same message on multiple files, unless it equally applies to
     all those files.
-   
+
   * If your changes span multiple files, and the code won't recompile unless
     all changes are committed (e.g. when changing the signature of a function),
     then commit all files one after another, without long delays in between. If
     necessary, prepare the commit messages in advance.
   * If your changes span multiple files, and the code won't recompile unless
     all changes are committed (e.g. when changing the signature of a function),
     then commit all files one after another, without long delays in between. If
     necessary, prepare the commit messages in advance.
-   
+
   * Before changing things on CVS, make sure that your changes are in line with
     the team's general consensus on what should be done.
   * Before changing things on CVS, make sure that your changes are in line with
     the team's general consensus on what should be done.
-   
+
   * Note that near a major public release, we get more cautious. There is
     always the possibility to submit a patch to the patch tracker instead.
   * Note that near a major public release, we get more cautious. There is
     always the possibility to submit a patch to the patch tracker instead.
-   
-Stable branches are handled with decidedly more care, especially after the
-initial *.*.0 release, and we are just in bugfix mode. In addition to the
-above, the below applies only to the stable branch (currently the
-v_3_0_branchpoint branch):
-
-  * Do not commit anything into the stable branch, unless immediately before a
-    new release! There needs to be testing done before it hits CVS, and to
-    ensure that all changes are appropriate just to fix whatever the problem
-    is.
-   
+
+Stable branches are handled with more care, especially after the initial *.*.0
+release, and we are just in bugfix mode. In addition to the above, the below
+applies only to the stable branch (currently the v_3_0_branch branch):
+
+  * Do not commit anything unless your proposed changes have been well tested
+    first, preferably by other members of the project, or have prior approval
+    of the project leaders or consensus of the devel list.
+
   * Where possible, bugfixes and changes should be tested in the main
     development trunk first. There may be occasions where this is not feasible,
     though.
   * Where possible, bugfixes and changes should be tested in the main
     development trunk first. There may be occasions where this is not feasible,
     though.
-   
+
   * Alternately, proposed changes can be submitted as patches to the patch
     tracker on Sourceforge first: http://sourceforge.net/tracker/?group_id=
     11118&atid=311118. Then ask for peer review.
   * Alternately, proposed changes can be submitted as patches to the patch
     tracker on Sourceforge first: http://sourceforge.net/tracker/?group_id=
     11118&atid=311118. Then ask for peer review.
-   
-  * Do not commit anything unless your proposed changes have been well tested
-    first, by other members of the project, and have prior approval of the
-    project leaders or consensus of the devel list.
-   
+
   * Do not even think about anything except bugfixes. No new features!
   * Do not even think about anything except bugfixes. No new features!
-   
+
 -------------------------------------------------------------------------------
 
 3. Documentation Guidelines
 -------------------------------------------------------------------------------
 
 3. Documentation Guidelines
@@ -270,7 +273,7 @@ v_3_0_branchpoint branch):
 All formal documents are maintained in Docbook SGML and located in the doc/
 source/* directory. You will need Docbook, the Docbook DTD's and the Docbook
 modular stylesheets (or comparable alternatives), and either jade or openjade
 All formal documents are maintained in Docbook SGML and located in the doc/
 source/* directory. You will need Docbook, the Docbook DTD's and the Docbook
 modular stylesheets (or comparable alternatives), and either jade or openjade
-(recommended) installed in order to build docs from source. Currently there is 
+(recommended) installed in order to build docs from source. Currently there is
 user-manual, FAQ, and, of course this, the developer-manual in this format. The
 README, AUTHORS privoxy.1 (man page), and config files are also now maintained
 as Docbook SGML. These files, when built, in the top-level source directory are
 user-manual, FAQ, and, of course this, the developer-manual in this format. The
 README, AUTHORS privoxy.1 (man page), and config files are also now maintained
 as Docbook SGML. These files, when built, in the top-level source directory are
@@ -307,10 +310,10 @@ How do you update the webserver (i.e. the pages on privoxy.org)?
 
  1. First, build the docs by running make dok (or alternately make redhat-dok).
     For PDF docs, do make dok-pdf.
 
  1. First, build the docs by running make dok (or alternately make redhat-dok).
     For PDF docs, do make dok-pdf.
-   
+
  2. Run make webserver which copies all files from doc/webserver to the
     sourceforge webserver via scp.
  2. Run make webserver which copies all files from doc/webserver to the
     sourceforge webserver via scp.
-   
+
 Finished docs should be occasionally submitted to CVS (doc/webserver/*/*.html)
 so that those without the ability to build them locally, have access to them if
 needed. This is especially important just prior to a new release! Please do
 Finished docs should be occasionally submitted to CVS (doc/webserver/*/*.html)
 so that those without the ability to build them locally, have access to them if
 needed. This is especially important just prior to a new release! Please do
@@ -346,17 +349,17 @@ sufficient for our purposes.
 
 Some common elements that you likely will use:
 
 
 Some common elements that you likely will use:
 
-<para></para>, paragraph delimiter. Most text needs to be within paragraph     
-elements (there are some exceptions).                                          
-<emphasis></emphasis>, the stylesheets make this italics.                      
-<filename></filename>, files and directories.                                  
-<command></command>, command examples.                                         
-<literallayout></literallayout>, like <pre>, more or less.                     
-<itemizedlist></itemizedlist>, list with bullets.                              
-<listitem></listitem>, member of the above.                                    
-<screen></screen>, screen output, implies <literallayout>.                     
-<ulink url="example.com"></ulink>, like HTML <a> tag.                          
-<quote></quote>, for, doh, quoting text.                                       
+<para></para>, paragraph delimiter. Most text needs to be within paragraph
+elements (there are some exceptions).
+<emphasis></emphasis>, the stylesheets make this italics.
+<filename></filename>, files and directories.
+<command></command>, command examples.
+<literallayout></literallayout>, like <pre>, more or less.
+<itemizedlist></itemizedlist>, list with bullets.
+<listitem></listitem>, member of the above.
+<screen></screen>, screen output, implies <literallayout>.
+<ulink url="example.com"></ulink>, like HTML <a> tag.
+<quote></quote>, for, doh, quoting text.
 
 Look at any of the existing docs for examples of all these and more.
 
 
 Look at any of the existing docs for examples of all these and more.
 
@@ -374,23 +377,23 @@ fashion.
 Here it is:
 
   * All tags should be lower case.
 Here it is:
 
   * All tags should be lower case.
-   
+
   * Tags delimiting a block of text (even small blocks) should be on their own
     line. Like:
   * Tags delimiting a block of text (even small blocks) should be on their own
     line. Like:
-   
+
      <para>
       Some text goes here.
      </para>
            
      <para>
       Some text goes here.
      </para>
            
-   
+
     Tags marking individual words, or few words, should be in-line:
     Tags marking individual words, or few words, should be in-line:
-   
+
       Just to <emphasis>emphasize</emphasis>, some text goes here.
            
       Just to <emphasis>emphasize</emphasis>, some text goes here.
            
-   
+
   * Tags should be nested and step indented for block text like: (except
     in-line tags)
   * Tags should be nested and step indented for block text like: (except
     in-line tags)
-   
+
      <para>
       <itemizedlist>
        <para>
      <para>
       <itemizedlist>
        <para>
@@ -401,39 +404,39 @@ Here it is:
       </itemizedlist>
      </para>
            
       </itemizedlist>
      </para>
            
-   
+
     This makes it easier to find the text amongst the tags ;-)
     This makes it easier to find the text amongst the tags ;-)
-   
+
   * Use white space to separate logical divisions within a document, like
     between sections. Running everything together consistently makes it harder
     to read and work on.
   * Use white space to separate logical divisions within a document, like
     between sections. Running everything together consistently makes it harder
     to read and work on.
-   
+
   * Do not hesitate to make comments. Comments can either use the <comment>
     element, or the <!-- --> style comment familiar from HTML. (Note in Docbook
     v4.x <comment> is replaced by <remark>.)
   * Do not hesitate to make comments. Comments can either use the <comment>
     element, or the <!-- --> style comment familiar from HTML. (Note in Docbook
     v4.x <comment> is replaced by <remark>.)
-   
+
   * We have an international audience. Refrain from slang, or English
     idiosyncrasies (too many to list :). Humor also does not translate well
     sometimes.
   * We have an international audience. Refrain from slang, or English
     idiosyncrasies (too many to list :). Humor also does not translate well
     sometimes.
-   
+
   * Try to keep overall line lengths in source files to 80 characters or less
     for obvious reasons. This is not always possible, with lengthy URLs for
     instance.
   * Try to keep overall line lengths in source files to 80 characters or less
     for obvious reasons. This is not always possible, with lengthy URLs for
     instance.
-   
+
   * Our documents are available in differing formats. Right now, they are just
     plain text, TML, and PDF, but others are always a future possibility. Be
     careful with URLs (<ulink>), and avoid this mistake:
   * Our documents are available in differing formats. Right now, they are just
     plain text, TML, and PDF, but others are always a future possibility. Be
     careful with URLs (<ulink>), and avoid this mistake:
-   
+
     My favorite site is <ulink url="http://example.com">here</ulink>.
     My favorite site is <ulink url="http://example.com">here</ulink>.
-   
+
     This will render as "My favorite site is here", which is not real helpful
     in a text doc. Better like this:
     This will render as "My favorite site is here", which is not real helpful
     in a text doc. Better like this:
-   
+
     My favorite site is <ulink url="http://example.com">example.com</ulink>.
     My favorite site is <ulink url="http://example.com">example.com</ulink>.
-   
+
   * All documents should be spell checked occasionally. aspell can check SGML
     with the -H option. (ispell I think too.)
   * All documents should be spell checked occasionally. aspell can check SGML
     with the -H option. (ispell I think too.)
-   
+
 -------------------------------------------------------------------------------
 
 3.3. Privoxy Custom Entities
 -------------------------------------------------------------------------------
 
 3.3. Privoxy Custom Entities
@@ -455,24 +458,24 @@ re-setting with each release (done by the Makefile). A sampling of custom
 entities are listed below. See any of the main docs for examples.
 
   * Re- "boilerplate" text entities are defined like:
 entities are listed below. See any of the main docs for examples.
 
   * Re- "boilerplate" text entities are defined like:
-   
+
     <!entity supported SYSTEM "supported.sgml">
     <!entity supported SYSTEM "supported.sgml">
-   
+
     In this example, the contents of the file, supported.sgml is available for
     inclusion anywhere in the doc. To make this happen, just reference the now
     defined entity: &supported; (starts with an ampersand and ends with a
     semi-colon), and the contents will be dumped into the finished doc at that
     point.
     In this example, the contents of the file, supported.sgml is available for
     inclusion anywhere in the doc. To make this happen, just reference the now
     defined entity: &supported; (starts with an ampersand and ends with a
     semi-colon), and the contents will be dumped into the finished doc at that
     point.
-   
+
   * Commonly used "internal entities":
   * Commonly used "internal entities":
-   
-    p-version: the Privoxy version string, e.g. "3.1.1".                       
-    p-status: the project status, either "alpha", "beta", or "stable".         
-    p-not-stable: use to conditionally include text in "not stable" releases   
-    (e.g. "beta").                                                             
-    p-stable: just the opposite.                                               
-    p-text: this doc is only generated as text.                                
-   
+
+    p-version: the Privoxy version string, e.g. "3.0.3".
+    p-status: the project status, either "alpha", "beta", or "stable".
+    p-not-stable: use to conditionally include text in "not stable" releases
+    (e.g. "beta").
+    p-stable: just the opposite.
+    p-text: this doc is only generated as text.
+
 There are others in various places that are defined for a specific purpose.
 Read the source!
 
 There are others in various places that are defined for a specific purpose.
 Read the source!
 
@@ -512,21 +515,22 @@ programming error is occurring.
 
 Example:
 
 
 Example:
 
-/* if page size greater than 1k ... */                                         
-if ( PageLength() > 1024 )                                                     
-{                                                                              
-    ... "block" the page up ...                                                
-}                                                                              
-                                                                               
-/* if page size is small, send it in blocks */                                 
-if ( PageLength() > 1024 )                                                     
-{                                                                              
-    ... "block" the page up ...                                                
-}                                                                              
-                                                                               
-This demonstrates 2 cases of "what not to do".  The first is a                 
-"syntax comment".  The second is a comment that does not fit what              
-is actually being done.                                                        
+/* if page size greater than 1k ... */
+if ( PageLength() > 1024 )
+{
+    ... "block" the page up ...
+}
+
+/* if page size is small, send it in blocks */
+if ( PageLength() > 1024 )
+{
+    ... "block" the page up ...
+}
+
+This demonstrates 2 cases of "what not to do".  The first is a
+"syntax comment".  The second is a comment that does not fit what
+is actually being done.
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -541,26 +545,27 @@ surrounding the code with a clear, definable pattern.
 
 Example:
 
 
 Example:
 
-/*********************************************************************         
- * This will stand out clearly in your code!                                   
- *********************************************************************/        
-if ( thisVariable == thatVariable )                                            
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
-                                                                               
-                                                                               
-/* unfortunately, this may not */                                              
-if ( thisVariable == thatVariable )                                            
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
-                                                                               
-                                                                               
-if ( thisVariable == thatVariable ) /* this may not either */                  
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
+/*********************************************************************
+ * This will stand out clearly in your code!
+ *********************************************************************/
+if ( thisVariable == thatVariable )
+{
+   DoSomethingVeryImportant();
+}
+
+
+/* unfortunately, this may not */
+if ( thisVariable == thatVariable )
+{
+   DoSomethingVeryImportant();
+}
+
+
+if ( thisVariable == thatVariable ) /* this may not either */
+{
+   DoSomethingVeryImportant();
+}
+
 
 Exception:
 
 
 Exception:
 
@@ -583,40 +588,41 @@ used to comment parameters.
 
 Example:
 
 
 Example:
 
-/*********************************************************************         
- * This will stand out clearly in your code,                                   
- * But the second example won't.                                               
- *********************************************************************/        
-if ( thisVariable == thatVariable )                                            
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
-                                                                               
-if ( thisVariable == thatVariable ) /*can you see me?*/                        
-{                                                                              
-   DoSomethingVeryImportant(); /*not easily*/                                  
-}                                                                              
-                                                                               
-                                                                               
-/*********************************************************************         
- * But, the encouraged exceptions:                                             
- *********************************************************************/        
-int urls_read     = 0;     /* # of urls read + rejected */                     
-int urls_rejected = 0;     /* # of urls rejected */                            
-                                                                               
-if ( 1 == X )                                                                  
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-}                                                                              
-                                                                               
-                                                                               
-short DoSomethingVeryImportant(                                                
-   short firstparam,   /* represents something */                              
-   short nextparam     /* represents something else */ )                       
-{                                                                              
-   ...code here...                                                             
-                                                                               
-}   /* -END- DoSomethingVeryImportant */                                       
+/*********************************************************************
+ * This will stand out clearly in your code,
+ * But the second example won't.
+ *********************************************************************/
+if ( thisVariable == thatVariable )
+{
+   DoSomethingVeryImportant();
+}
+
+if ( thisVariable == thatVariable ) /*can you see me?*/
+{
+   DoSomethingVeryImportant(); /*not easily*/
+}
+
+
+/*********************************************************************
+ * But, the encouraged exceptions:
+ *********************************************************************/
+int urls_read     = 0;     /* # of urls read + rejected */
+int urls_rejected = 0;     /* # of urls rejected */
+
+if ( 1 == X )
+{
+   DoSomethingVeryImportant();
+}
+
+
+short DoSomethingVeryImportant(
+   short firstparam,   /* represents something */
+   short nextparam     /* represents something else */ )
+{
+   ...code here...
+
+}   /* -END- DoSomethingVeryImportant */
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -669,19 +675,20 @@ use following a closing brace: } /* -END- if() or while () or etc... */
 
 Example:
 
 
 Example:
 
-if ( 1 == X )                                                                  
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-   ...some long list of commands...                                            
-} /* -END- if x is 1 */                                                        
-                                                                               
-or:                                                                            
-                                                                               
-if ( 1 == X )                                                                  
-{                                                                              
-   DoSomethingVeryImportant();                                                 
-   ...some long list of commands...                                            
-} /* -END- if ( 1 == X ) */                                                    
+if ( 1 == X )
+{
+   DoSomethingVeryImportant();
+   ...some long list of commands...
+} /* -END- if x is 1 */
+
+or:
+
+if ( 1 == X )
+{
+   DoSomethingVeryImportant();
+   ...some long list of commands...
+} /* -END- if ( 1 == X ) */
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -699,11 +706,13 @@ port Privoxy to C++.
 
 Example:
 
 
 Example:
 
-int ms_iis5_hack = 0;                                                          
+int ms_iis5_hack = 0;
+
 
 Instead of:
 
 
 Instead of:
 
-int msiis5hack = 0; int msIis5Hack = 0;                                        
+int msiis5hack = 0; int msIis5Hack = 0;
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -719,12 +728,14 @@ port Privoxy to C++.
 
 Example:
 
 
 Example:
 
-int load_some_file( struct client_state *csp )                                 
+int load_some_file( struct client_state *csp )
+
 
 Instead of:
 
 
 Instead of:
 
-int loadsomefile( struct client_state *csp )                                   
-int loadSomeFile( struct client_state *csp )                                   
+int loadsomefile( struct client_state *csp )
+int loadSomeFile( struct client_state *csp )
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -737,14 +748,16 @@ the same parameter name in the header file that you use in the c file.
 
 Example:
 
 
 Example:
 
-(.h) extern int load_aclfile( struct client_state *csp );                      
-(.c) int load_aclfile( struct client_state *csp )                              
+(.h) extern int load_aclfile( struct client_state *csp );
+(.c) int load_aclfile( struct client_state *csp )
+
 
 Instead of:
 
 
 Instead of:
 
-(.h) extern int load_aclfile( struct client_state * ); or                      
-(.h) extern int load_aclfile();                                                
-(.c) int load_aclfile( struct client_state *csp )                              
+(.h) extern int load_aclfile( struct client_state * ); or
+(.h) extern int load_aclfile();
+(.c) int load_aclfile( struct client_state *csp )
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -758,8 +771,9 @@ and system headers.)
 
 Example:
 
 
 Example:
 
-(enumeration) : enum Boolean { FALSE, TRUE };                                  
-(#define) : #define DEFAULT_SIZE 100;                                          
+(enumeration) : enum Boolean { FALSE, TRUE };
+(#define) : #define DEFAULT_SIZE 100;
+
 
 Note: We have a standard naming scheme for #defines that toggle a feature in
 the preprocessor: FEATURE_>, where > is a short (preferably 1 or 2 word)
 
 Note: We have a standard naming scheme for #defines that toggle a feature in
 the preprocessor: FEATURE_>, where > is a short (preferably 1 or 2 word)
@@ -767,11 +781,12 @@ description.
 
 Example:
 
 
 Example:
 
-#define FEATURE_FORCE 1                                                        
-                                                                               
-#ifdef FEATURE_FORCE                                                           
-#define FORCE_PREFIX blah                                                      
-#endif /* def FEATURE_FORCE */                                                 
+#define FEATURE_FORCE 1
+
+#ifdef FEATURE_FORCE
+#define FORCE_PREFIX blah
+#endif /* def FEATURE_FORCE */
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -789,15 +804,17 @@ terminate a name with an underscore.
 
 Example:
 
 
 Example:
 
-#define USE_IMAGE_LIST 1                                                       
+#define USE_IMAGE_LIST 1
+
 
 Instead of:
 
 
 Instead of:
 
-#define USE_IMG_LST 1 or                                                       
-#define _USE_IMAGE_LIST 1 or                                                   
-#define USE_IMAGE_LIST_ 1 or                                                   
-#define use_image_list 1 or                                                    
-#define UseImageList 1                                                         
+#define USE_IMG_LST 1 or
+#define _USE_IMAGE_LIST 1 or
+#define USE_IMAGE_LIST_ 1 or
+#define use_image_list 1 or
+#define UseImageList 1
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -814,10 +831,11 @@ block.
 
 Example:
 
 
 Example:
 
-if ( this == that )                                                            
-{                                                                              
-   ...                                                                         
-}                                                                              
+if ( this == that )
+{
+   ...
+}
+
 
 Instead of:
 
 
 Instead of:
 
@@ -836,13 +854,14 @@ Status: developer-discretion.
 
 Example exception:
 
 
 Example exception:
 
-while ( more lines are read )                                                  
-{                                                                              
-   /* Please document what is/is not a comment line here */                    
-   if ( it's a comment ) continue;                                             
-                                                                               
-   do_something( line );                                                       
-}                                                                              
+while ( more lines are read )
+{
+   /* Please document what is/is not a comment line here */
+   if ( it's a comment ) continue;
+
+   do_something( line );
+}
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -855,11 +874,12 @@ to error. All control statements should have a block defined.
 
 Example:
 
 
 Example:
 
-if ( this == that )                                                            
-{                                                                              
-   DoSomething();                                                              
-   DoSomethingElse();                                                          
-}                                                                              
+if ( this == that )
+{
+   DoSomething();
+   DoSomethingElse();
+}
+
 
 Instead of:
 
 
 Instead of:
 
@@ -880,7 +900,8 @@ above also applies.
 
 Example:
 
 
 Example:
 
-structure->flag = ( condition );                                               
+structure->flag = ( condition );
+
 
 Instead of:
 
 
 Instead of:
 
@@ -901,14 +922,15 @@ in the next guideline.
 
 Example:
 
 
 Example:
 
-int firstValue   = 0;                                                          
-int someValue    = 0;                                                          
-int anotherValue = 0;                                                          
-int thisVariable = 0;                                                          
-                                                                               
-if ( thisVariable == thatVariable )                                            
-                                                                               
-firstValue = oldValue + ( ( someValue - anotherValue ) - whatever )            
+int firstValue   = 0;
+int someValue    = 0;
+int anotherValue = 0;
+int thisVariable = 0;
+
+if ( thisVariable == thatVariable )
+
+firstValue = oldValue + ( ( someValue - anotherValue ) - whatever )
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -925,9 +947,10 @@ variable/function name is not as clear.
 
 Example:
 
 
 Example:
 
-aStruct->aMember;                                                              
-aStruct.aMember;                                                               
-FunctionName();                                                                
+aStruct->aMember;
+aStruct.aMember;
+FunctionName();
+
 
 Instead of: aStruct -> aMember; aStruct . aMember; FunctionName ();
 
 
 Instead of: aStruct -> aMember; aStruct . aMember; FunctionName ();
 
@@ -937,17 +960,18 @@ Instead of: aStruct -> aMember; aStruct . aMember; FunctionName ();
 
 Example:
 
 
 Example:
 
-int function1( ... )                                                           
-{                                                                              
-   ...code...                                                                  
-   return( retCode );                                                          
-                                                                               
-}   /* -END- function1 */                                                      
-                                                                               
-                                                                               
-int function2( ... )                                                           
-{                                                                              
-}   /* -END- function2 */                                                      
+int function1( ... )
+{
+   ...code...
+   return( retCode );
+
+}   /* -END- function1 */
+
+
+int function2( ... )
+{
+}   /* -END- function2 */
+
 
 Instead of:
 
 
 Instead of:
 
@@ -968,32 +992,34 @@ of function comments.
 
 Explanation:
 
 
 Explanation:
 
-If some use 8 character TABs and some use 3 character TABs, the code can look *
-very* ragged. So use 3 character indentions only. If you like to use TABs, pass
-your code through a filter such as "expand -t3" before checking in your code.
+If some use 8 character TABs and some use 3 character TABs, the code can look
+*very* ragged. So use 3 character indentions only. If you like to use TABs,
+pass your code through a filter such as "expand -t3" before checking in your
+code.
 
 Example:
 
 
 Example:
 
-static const char * const url_code_map[256] =                                  
-{                                                                              
-   NULL, ...                                                                   
-};                                                                             
-                                                                               
-                                                                               
-int function1( ... )                                                           
-{                                                                              
-   if ( 1 )                                                                    
-   {                                                                           
-      return( ALWAYS_TRUE );                                                   
-   }                                                                           
-   else                                                                        
-   {                                                                           
-      return( HOW_DID_YOU_GET_HERE );                                          
-   }                                                                           
-                                                                               
-   return( NEVER_GETS_HERE );                                                  
-                                                                               
-}                                                                              
+static const char * const url_code_map[256] =
+{
+   NULL, ...
+};
+
+
+int function1( ... )
+{
+   if ( 1 )
+   {
+      return( ALWAYS_TRUE );
+   }
+   else
+   {
+      return( HOW_DID_YOU_GET_HERE );
+   }
+
+   return( NEVER_GETS_HERE );
+
+}
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1009,9 +1035,10 @@ accidentally using an unassigned variable.
 
 Example:
 
 
 Example:
 
-short anShort = 0;                                                             
-float aFloat  = 0;                                                             
-struct *ptr = NULL;                                                            
+short anShort = 0;
+float aFloat  = 0;
+struct *ptr = NULL;
+
 
 Note: It is much easier to debug a SIGSEGV if the message says you are trying
 to access memory address 00000000 and not 129FA012; or arrayPtr[20] causes a
 
 Note: It is much easier to debug a SIGSEGV if the message says you are trying
 to access memory address 00000000 and not 129FA012; or arrayPtr[20] causes a
@@ -1033,9 +1060,10 @@ true or false statement
 
 Example:
 
 
 Example:
 
-ShouldWeBlockThis();                                                           
-ContainsAnImage();                                                             
-IsWebPageBlank();                                                              
+ShouldWeBlockThis();
+ContainsAnImage();
+IsWebPageBlank();
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1058,10 +1086,11 @@ the code is easy to understand:
 
 Example:
 
 
 Example:
 
-for ( size_t cnt = 0; cnt < blockListLength(); cnt ++ )                        
-{                                                                              
-   ....                                                                        
-}                                                                              
+for ( size_t cnt = 0; cnt < blockListLength(); cnt ++ )
+{
+   ....
+}
+
 
 Note: Unfortunately, this makes a function call for each and every iteration.
 This increases the overhead in the program, because the compiler has to look up
 
 Note: Unfortunately, this makes a function call for each and every iteration.
 This increases the overhead in the program, because the compiler has to look up
@@ -1076,15 +1105,16 @@ variable, and evaluate using the variable.
 
 Example:
 
 
 Example:
 
-size_t len = blockListLength();                                                
-                                                                               
-for ( size_t cnt = 0; cnt < len; cnt ++ )                                      
-{                                                                              
-   ....                                                                        
-}                                                                              
+size_t len = blockListLength();
+
+for ( size_t cnt = 0; cnt < len; cnt ++ )
+{
+   ....
+}
 
 
-Exceptions: if the value of blockListLength() *may* change or could *
-potentially* change, then you must code the function call in the for/while
+
+Exceptions: if the value of blockListLength() *may* change or could
+*potentially* change, then you must code the function call in the for/while
 loop.
 
 -------------------------------------------------------------------------------
 loop.
 
 -------------------------------------------------------------------------------
@@ -1131,13 +1161,15 @@ other header files.
 
 Example:
 
 
 Example:
 
-#include <iostream.h>     /* This is not a local include */                    
-#include "config.h"       /* This IS a local include */                        
+#include <iostream.h>     /* This is not a local include */
+#include "config.h"       /* This IS a local include */
+
 
 Exception:
 
 
 Exception:
 
-/* This is not a local include, but requires a path element. */                
-#include <sys/fileName.h>                                                      
+/* This is not a local include, but requires a path element. */
+#include <sys/fileName.h>
+
 
 Note: Please! do not add "-I." to the Makefile without a _very_ good reason.
 This duplicates the #include "file.h" behavior.
 
 Note: Please! do not add "-I." to the Makefile without a _very_ good reason.
 This duplicates the #include "file.h" behavior.
@@ -1156,10 +1188,11 @@ to "_", and make it uppercase.
 
 Example:
 
 
 Example:
 
-#ifndef PROJECT_H_INCLUDED                                                     
-#define PROJECT_H_INCLUDED                                                     
- ...                                                                           
-#endif /* ndef PROJECT_H_INCLUDED */                                           
+#ifndef PROJECT_H_INCLUDED
+#define PROJECT_H_INCLUDED
+ ...
+#endif /* ndef PROJECT_H_INCLUDED */
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1173,16 +1206,17 @@ of our code.
 
 Example:
 
 
 Example:
 
-#ifdef __cplusplus                                                             
-extern "C"                                                                     
-{                                                                              
-#endif /* def __cplusplus */                                                   
-                                                                               
-... function definitions here ...                                              
-                                                                               
-#ifdef __cplusplus                                                             
-}                                                                              
-#endif /* def __cplusplus */                                                   
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* def __cplusplus */
+
+... function definitions here ...
+
+#ifdef __cplusplus
+}
+#endif /* def __cplusplus */
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1195,11 +1229,12 @@ excess header files may cause needless compiles.
 
 Example:
 
 
 Example:
 
-/*********************************************************************         
- * We're avoiding an include statement here!                                   
- *********************************************************************/        
-struct file_list;                                                              
-extern file_list *xyz;                                                         
+/*********************************************************************
+ * We're avoiding an include statement here!
+ *********************************************************************/
+struct file_list;
+extern file_list *xyz;
+
 
 Note: If you declare "file_list xyz;" (without the pointer), then including the
 proper header file is necessary. If you only want to prototype a pointer,
 
 Note: If you declare "file_list xyz;" (without the pointer), then including the
 proper header file is necessary. If you only want to prototype a pointer,
@@ -1232,22 +1267,23 @@ statement.
 
 Example:
 
 
 Example:
 
-switch( hash_string( cmd ) )                                                   
-{                                                                              
-   case hash_actions_file :                                                    
-      ... code ...                                                             
-      break;                                                                   
-                                                                               
-   case hash_confdir :                                                         
-      ... code ...                                                             
-      break;                                                                   
-                                                                               
-   default :                                                                   
-      log_error( ... );                                                        
-      ... anomaly code goes here ...                                           
-      continue; / break; / exit( 1 ); / etc ...                                
-                                                                               
-} /* end switch( hash_string( cmd ) ) */                                       
+switch( hash_string( cmd ) )
+{
+   case hash_actions_file :
+      ... code ...
+      break;
+
+   case hash_confdir :
+      ... code ...
+      break;
+
+   default :
+      log_error( ... );
+      ... anomaly code goes here ...
+      continue; / break; / exit( 1 ); / etc ...
+
+} /* end switch( hash_string( cmd ) ) */
+
 
 Note: If you already have a default condition, you are obviously exempt from
 this point. Of note, most of the WIN32 code calls `DefWindowProc' after the
 
 Note: If you already have a default condition, you are obviously exempt from
 this point. Of note, most of the WIN32 code calls `DefWindowProc' after the
@@ -1314,9 +1350,10 @@ It can be tempting to declare a series of variables all on one line. Don't.
 
 Example:
 
 
 Example:
 
-long a = 0;                                                                    
-long b = 0;                                                                    
-long c = 0;                                                                    
+long a = 0;
+long b = 0;
+long c = 0;
+
 
 Instead of:
 
 
 Instead of:
 
@@ -1347,8 +1384,9 @@ the context of one function call.
 
 Example:
 
 
 Example:
 
-If a function creates a struct and stores a pointer to it in a                 
-list, then it should definitely be allocated via `malloc'.                     
+If a function creates a struct and stores a pointer to it in a
+list, then it should definitely be allocated via `malloc'.
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1365,8 +1403,9 @@ function to accommodate this.
 
 Example:
 
 
 Example:
 
-int load_re_filterfile( struct client_state *csp ) { ... }                     
-static void unload_re_filterfile( void *f ) { ... }                            
+int load_re_filterfile( struct client_state *csp ) { ... }
+static void unload_re_filterfile( void *f ) { ... }
+
 
 Exceptions:
 
 
 Exceptions:
 
@@ -1420,49 +1459,53 @@ from the project).
 
 Example for file comments:
 
 
 Example for file comments:
 
-const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $"; 
-/*********************************************************************                         
- *                                                                                             
- * File        :  $Source$                                                                     
- *                                                                                             
- * Purpose     :  (Fill me in with a good description!)                                        
- *                                                                                             
- * Copyright   :  Written by and Copyright (C) 2001 the SourceForge                            
- *                Privoxy team. http://www.privoxy.org/                                        
- *                                                                                             
- *                Based on the Internet Junkbuster originally written                          
- *                by and Copyright (C) 1997 Anonymous Coders and                               
- *                Junkbusters Corporation.  http://www.junkbusters.com                         
- *                                                                                             
- *                This program is free software; you can redistribute it                       
- *                and/or modify it under the terms of the GNU General                          
- *                Public License as published by the Free Software                             
- *                Foundation; either version 2 of the License, or (at                          
- *                your option) any later version.                                              
- *                                                                                             
- *                This program is distributed in the hope that it will                         
- *                be useful, but WITHOUT ANY WARRANTY; without even the                        
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A                         
- *                PARTICULAR PURPOSE.  See the GNU General Public                              
- *                License for more details.                                                    
- *                                                                                             
- *                The GNU General Public License should be included with                       
- *                this file.  If not, you can view it at                                       
- *                http://www.gnu.org/copyleft/gpl.html                                         
- *                or write to the Free Software Foundation, Inc., 59                           
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.                       
- *                                                                                             
- * Revisions   :                                                                               
- *    $Log$                                                                                    
- *                                                                                             
- *********************************************************************/                        
-                                                                                               
-                                                                                               
-#include "config.h"                                                                            
-                                                                                               
-   ...necessary include files for us to do our work...                                         
-                                                                                               
-const char FILENAME_h_rcs[] = FILENAME_H_VERSION;                                              
+const char FILENAME_rcs[] = "$Id: developer-manual.txt,v 1.32.2.7 2004/01/30 23:46:56 oes Exp $";
+/*********************************************************************
+ *
+ * File        :  $Source: /cvsroot/ijbswa/current/doc/text/developer-manual.txt,v $
+ *
+ * Purpose     :  (Fill me in with a good description!)
+ *
+ * Copyright   :  Written by and Copyright (C) 2001 the SourceForge
+ *                Privoxy team. http://www.privoxy.org/
+ *
+ *                Based on the Internet Junkbuster originally written
+ *                by and Copyright (C) 1997 Anonymous Coders and
+ *                Junkbusters Corporation.  http://www.junkbusters.com
+ *
+ *                This program is free software; you can redistribute it
+ *                and/or modify it under the terms of the GNU General
+ *                Public License as published by the Free Software
+ *                Foundation; either version 2 of the License, or (at
+ *                your option) any later version.
+ *
+ *                This program is distributed in the hope that it will
+ *                be useful, but WITHOUT ANY WARRANTY; without even the
+ *                implied warranty of MERCHANTABILITY or FITNESS FOR A
+ *                PARTICULAR PURPOSE.  See the GNU General Public
+ *                License for more details.
+ *
+ *                The GNU General Public License should be included with
+ *                this file.  If not, you can view it at
+ *                http://www.gnu.org/copyleft/gpl.html
+ *                or write to the Free Software Foundation, Inc., 59
+ *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * Revisions   :
+ *    $Log: developer-manual.txt,v $
+ *    Revision 1.32.2.7  2004/01/30 23:46:56  oes
+ *    Re-generated from sgml source
+ *
+ *
+ *********************************************************************/
+
+
+#include "config.h"
+
+   ...necessary include files for us to do our work...
+
+const char FILENAME_h_rcs[] = FILENAME_H_VERSION;
+
 
 Note: This declares the rcs variables that should be added to the
 "show-proxy-args" page. If this is a brand new creation by you, you are free to
 
 Note: This declares the rcs variables that should be added to the
 "show-proxy-args" page. If this is a brand new creation by you, you are free to
@@ -1475,93 +1518,98 @@ can.
 
 Example for file header comments:
 
 
 Example for file header comments:
 
-#ifndef _FILENAME_H                                                                          
-#define _FILENAME_H                                                                          
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $" 
-/*********************************************************************                       
- *                                                                                           
- * File        :  $Source$                                                                   
- *                                                                                           
- * Purpose     :  (Fill me in with a good description!)                                      
- *                                                                                           
- * Copyright   :  Written by and Copyright (C) 2001 the SourceForge                          
- *                Privoxy team. http://www.privoxy.org/                                      
- *                                                                                           
- *                Based on the Internet Junkbuster originally written                        
- *                by and Copyright (C) 1997 Anonymous Coders and                             
- *                Junkbusters Corporation.  http://www.junkbusters.com                       
- *                                                                                           
- *                This program is free software; you can redistribute it                     
- *                and/or modify it under the terms of the GNU General                        
- *                Public License as published by the Free Software                           
- *                Foundation; either version 2 of the License, or (at                        
- *                your option) any later version.                                            
- *                                                                                           
- *                This program is distributed in the hope that it will                       
- *                be useful, but WITHOUT ANY WARRANTY; without even the                      
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A                       
- *                PARTICULAR PURPOSE.  See the GNU General Public                            
- *                License for more details.                                                  
- *                                                                                           
- *                The GNU General Public License should be included with                     
- *                this file.  If not, you can view it at                                     
- *                http://www.gnu.org/copyleft/gpl.html                                       
- *                or write to the Free Software Foundation, Inc., 59                         
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.                     
- *                                                                                           
- * Revisions   :                                                                             
- *    $Log$                                                                                  
- *                                                                                           
- *********************************************************************/                      
-                                                                                             
-                                                                                             
-#include "project.h"                                                                         
-                                                                                             
-#ifdef __cplusplus                                                                           
-extern "C" {                                                                                 
-#endif                                                                                       
-                                                                                             
-   ... function headers here ...                                                             
-                                                                                             
-                                                                                             
-/* Revision control strings from this header and associated .c file */                       
-extern const char FILENAME_rcs[];                                                            
-extern const char FILENAME_h_rcs[];                                                          
-                                                                                             
-                                                                                             
-#ifdef __cplusplus                                                                           
-} /* extern "C" */                                                                           
-#endif                                                                                       
-                                                                                             
-#endif /* ndef _FILENAME_H */                                                                
-                                                                                             
-/*                                                                                           
-  Local Variables:                                                                           
-  tab-width: 3                                                                               
-  end:                                                                                       
-*/                                                                                           
+#ifndef _FILENAME_H
+#define _FILENAME_H
+#define FILENAME_H_VERSION "$Id: developer-manual.txt,v 1.32.2.7 2004/01/30 23:46:56 oes Exp $"
+/*********************************************************************
+ *
+ * File        :  $Source: /cvsroot/ijbswa/current/doc/text/developer-manual.txt,v $
+ *
+ * Purpose     :  (Fill me in with a good description!)
+ *
+ * Copyright   :  Written by and Copyright (C) 2001 the SourceForge
+ *                Privoxy team. http://www.privoxy.org/
+ *
+ *                Based on the Internet Junkbuster originally written
+ *                by and Copyright (C) 1997 Anonymous Coders and
+ *                Junkbusters Corporation.  http://www.junkbusters.com
+ *
+ *                This program is free software; you can redistribute it
+ *                and/or modify it under the terms of the GNU General
+ *                Public License as published by the Free Software
+ *                Foundation; either version 2 of the License, or (at
+ *                your option) any later version.
+ *
+ *                This program is distributed in the hope that it will
+ *                be useful, but WITHOUT ANY WARRANTY; without even the
+ *                implied warranty of MERCHANTABILITY or FITNESS FOR A
+ *                PARTICULAR PURPOSE.  See the GNU General Public
+ *                License for more details.
+ *
+ *                The GNU General Public License should be included with
+ *                this file.  If not, you can view it at
+ *                http://www.gnu.org/copyleft/gpl.html
+ *                or write to the Free Software Foundation, Inc., 59
+ *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * Revisions   :
+ *    $Log: developer-manual.txt,v $
+ *    Revision 1.32.2.7  2004/01/30 23:46:56  oes
+ *    Re-generated from sgml source
+ *
+ *
+ *********************************************************************/
+
+
+#include "project.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+   ... function headers here ...
+
+
+/* Revision control strings from this header and associated .c file */
+extern const char FILENAME_rcs[];
+extern const char FILENAME_h_rcs[];
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* ndef _FILENAME_H */
+
+/*
+  Local Variables:
+  tab-width: 3
+  end:
+*/
+
 
 Example for function comments:
 
 
 Example for function comments:
 
-/*********************************************************************         
- *                                                                             
- * Function    :  FUNCTION_NAME                                                
- *                                                                             
- * Description :  (Fill me in with a good description!)                        
- *                                                                             
- * parameters  :                                                               
- *          1  :  param1 = pointer to an important thing                       
- *          2  :  x      = pointer to something else                           
- *                                                                             
- * Returns     :  0 => Ok, everything else is an error.                        
- *                                                                             
- *********************************************************************/        
-int FUNCTION_NAME( void *param1, const char *x )                               
-{                                                                              
-   ...                                                                         
-   return( 0 );                                                                
-                                                                               
-}                                                                              
+/*********************************************************************
+ *
+ * Function    :  FUNCTION_NAME
+ *
+ * Description :  (Fill me in with a good description!)
+ *
+ * parameters  :
+ *          1  :  param1 = pointer to an important thing
+ *          2  :  x      = pointer to something else
+ *
+ * Returns     :  0 => Ok, everything else is an error.
+ *
+ *********************************************************************/
+int FUNCTION_NAME( void *param1, const char *x )
+{
+   ...
+   return( 0 );
+
+}
+
 
 Note: If we all follow this practice, we should be able to parse our code to
 create a "self-documenting" web page.
 
 Note: If we all follow this practice, we should be able to parse our code to
 create a "self-documenting" web page.
@@ -1579,28 +1627,28 @@ To be filled.
 Explain release numbers. major, minor. developer releases. etc.
 
  1. Remove any existing rpm with rpm -e
 Explain release numbers. major, minor. developer releases. etc.
 
  1. Remove any existing rpm with rpm -e
-   
+
  2. Remove any file that was left over. This includes (but is not limited to)
  2. Remove any file that was left over. This includes (but is not limited to)
-   
+
       + /var/log/privoxy
       + /var/log/privoxy
-       
+
       + /etc/privoxy
       + /etc/privoxy
-       
+
       + /usr/sbin/privoxy
       + /usr/sbin/privoxy
-       
+
       + /etc/init.d/privoxy
       + /etc/init.d/privoxy
-       
+
       + /usr/doc/privoxy*
       + /usr/doc/privoxy*
-       
+
  3. Install the rpm. Any error messages?
  3. Install the rpm. Any error messages?
-   
+
  4. start,stop,status Privoxy with the specific script (e.g. /etc/rc.d/init/
     privoxy stop). Reboot your machine. Does autostart work?
  4. start,stop,status Privoxy with the specific script (e.g. /etc/rc.d/init/
     privoxy stop). Reboot your machine. Does autostart work?
-   
+
  5. Start browsing. Does Privoxy work? Logfile written?
  5. Start browsing. Does Privoxy work? Logfile written?
-   
+
  6. Remove the rpm. Any error messages? All files removed?
  6. Remove the rpm. Any error messages? All files removed?
-   
+
 -------------------------------------------------------------------------------
 
 5.2. Test reports
 -------------------------------------------------------------------------------
 
 5.2. Test reports
@@ -1609,12 +1657,12 @@ Please submit test reports only with the test form at sourceforge. Three simple
 steps:
 
   * Select category: the distribution you test on.
 steps:
 
   * Select category: the distribution you test on.
-   
+
   * Select group: the version of Privoxy that we are about to release.
   * Select group: the version of Privoxy that we are about to release.
-   
+
   * Fill the Summary and Detailed Description with something intelligent (keep
     it short and precise).
   * Fill the Summary and Detailed Description with something intelligent (keep
     it short and precise).
-   
+
 Do not mail to the mailing list (we cannot keep track on issues there).
 
 -------------------------------------------------------------------------------
 Do not mail to the mailing list (we cannot keep track on issues there).
 
 -------------------------------------------------------------------------------
@@ -1644,7 +1692,7 @@ version numbers consist of three numbers, separated by dots, like in X.Y.Z
     turning a development branch into stable substantially changes the
     functionality, user interface or configuration syntax. Majors 1 and 2 were
     Junkbuster, and 3 will be the first stable Privoxy release.
     turning a development branch into stable substantially changes the
     functionality, user interface or configuration syntax. Majors 1 and 2 were
     Junkbuster, and 3 will be the first stable Privoxy release.
-   
+
   * Y, the version minor, represents the branch within the major version. At
     any point in time, there are two branches being maintained: The stable
     branch, with an even minor, say, 2N, in which no functionality is being
   * Y, the version minor, represents the branch within the major version. At
     any point in time, there are two branches being maintained: The stable
     branch, with an even minor, say, 2N, in which no functionality is being
@@ -1656,7 +1704,7 @@ version numbers consist of three numbers, separated by dots, like in X.Y.Z
     point where it can be turned into stable, the old stable branch 2N is given
     up (i.e. no longer maintained), the former development branch 2N+1 becomes
     the new stable branch 2N+2, and a new development branch 2N+3 is opened.
     point where it can be turned into stable, the old stable branch 2N is given
     up (i.e. no longer maintained), the former development branch 2N+1 becomes
     the new stable branch 2N+2, and a new development branch 2N+3 is opened.
-   
+
   * Z, the point or sub version, represents a release of the software within a
     branch. It is therefore incremented immediately before each code freeze. In
     development branches, only the even point versions correspond to actual
   * Z, the point or sub version, represents a release of the software within a
     branch. It is therefore incremented immediately before each code freeze. In
     development branches, only the even point versions correspond to actual
@@ -1667,19 +1715,33 @@ version numbers consist of three numbers, separated by dots, like in X.Y.Z
     thereafter. This ensures that builds from CVS snapshots are easily
     distinguished from released versions. The point version is reset to zero
     when the minor changes.
     thereafter. This ensures that builds from CVS snapshots are easily
     distinguished from released versions. The point version is reset to zero
     when the minor changes.
-   
+
+    Stable branches work a little differently, since there should be little to
+    no development happening in such branches. Remember, only bugfixes, which
+    presumably should have had some testing before being committed. Stable
+    branches will then have their version reported as 0.0.0, during that period
+    between releases when changes are being added. This is to denote that this
+    code is not for release. Then as the release nears, the version is bumped
+    according: e.g. 3.0.1 -> 0.0.0 -> 3.0.2.
+
 In summary, the main CVS trunk is the development branch where new features are
 being worked on for the next stable series. This should almost always be where
 the most activity takes place. There is always at least one stable branch from
 the trunk, e.g now it is 3.0, which is only used to release stable versions.
 In summary, the main CVS trunk is the development branch where new features are
 being worked on for the next stable series. This should almost always be where
 the most activity takes place. There is always at least one stable branch from
 the trunk, e.g now it is 3.0, which is only used to release stable versions.
-Once the initial .0 release of the stable branch has been done, then as a rule,
-only bugfixes that have had prior testing should be committed to the stable
-branch. At that point, it is mostly "hands off". Once there are enough bugfixes
-to justify a new release, the version of this branch is again incremented
-Example: 3.0.0 -> 3.0.1 -> 3.0.2, etc are all stable releases from within the
-stable branch. 3.1.x is currently the main trunk, and where work on 3.2.x is
-taking place. If any questions, please post to the devel list before committing
-to a stable branch!
+Once the initial *.0 release of the stable branch has been done, then as a
+rule, only bugfixes that have had prior testing should be committed to the
+stable branch. Once there are enough bugfixes to justify a new release, the
+version of this branch is again incremented Example: 3.0.0 -> 3.0.1 -> 3.0.2,
+etc are all stable releases from within the stable branch. 3.1.x is currently
+the main trunk, and where work on 3.2.x is taking place. If any questions,
+please post to the devel list before committing to a stable branch!
+
+Developers should remember too that if they commit a bugfix to the stable
+branch, this will more than likely require a separate submission to the main
+trunk, since these are separate development trees within CVS. If you are
+working on both, then this would require at least two separate check outs (i.e
+main trunk, and the stable release branch, which is v_3_0_branch at the
+moment).
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1691,20 +1753,21 @@ The following must be done by one of the developers prior to each new release.
     days has had a chance to yell "no!" in case they have pending changes/fixes
     in their pipelines. Announce the freeze so that nobody will interfere with
     last minute changes.
     days has had a chance to yell "no!" in case they have pending changes/fixes
     in their pipelines. Announce the freeze so that nobody will interfere with
     last minute changes.
-   
+
   * Increment the version number (point from odd to even in development
     branches!) in configure.in. (RPM spec files will need to be incremented as
     well.)
   * Increment the version number (point from odd to even in development
     branches!) in configure.in. (RPM spec files will need to be incremented as
     well.)
-   
+
   * If default.action has changed since last release (i.e. software release or
     standalone actions file release), bump up its version info to A.B in this
     line:
   * If default.action has changed since last release (i.e. software release or
     standalone actions file release), bump up its version info to A.B in this
     line:
-   
-      {+add-header{X-Actions-File-Version: A.B} -filter -no-popups}    
-   
+
+      {+add-header{X-Actions-File-Version: A.B} -filter -no-popups}
+
+
     Then change the version info in doc/webserver/actions/index.php, line:
     '$required_actions_file_version = "A.B";'
     Then change the version info in doc/webserver/actions/index.php, line:
     '$required_actions_file_version = "A.B";'
-   
+
   * All documentation should be rebuild after the version bump. Finished docs
     should be then be committed to CVS (for those without the ability to build
     these). Some docs may require rather obscure processing tools. config, the
   * All documentation should be rebuild after the version bump. Finished docs
     should be then be committed to CVS (for those without the ability to build
     these). Some docs may require rather obscure processing tools. config, the
@@ -1713,7 +1776,7 @@ The following must be done by one of the developers prior to each new release.
     committed to CVS for other packagers. The formal docs should be uploaded to
     the webserver. See the Section "Updating the webserver" in this manual for
     details.
     committed to CVS for other packagers. The formal docs should be uploaded to
     the webserver. See the Section "Updating the webserver" in this manual for
     details.
-   
+
   * The User Manual is also used for context sensitive help for the CGI editor.
     This is version sensitive, so that the user will get appropriate help for
     his/her release. So with each release a fresh version should be uploaded to
   * The User Manual is also used for context sensitive help for the CGI editor.
     This is version sensitive, so that the user will get appropriate help for
     his/her release. So with each release a fresh version should be uploaded to
@@ -1722,24 +1785,24 @@ The following must be done by one of the developers prior to each new release.
     The CGI pages will link to something like http://privoxy.org/$(VERSION)/
     user-manual/. This will need to be updated for each new release. There is
     no Makefile target for this at this time!!! It needs to be done manually.
     The CGI pages will link to something like http://privoxy.org/$(VERSION)/
     user-manual/. This will need to be updated for each new release. There is
     no Makefile target for this at this time!!! It needs to be done manually.
-   
+
   * All developers should look at the ChangeLog and make sure noteworthy
     changes are referenced.
   * All developers should look at the ChangeLog and make sure noteworthy
     changes are referenced.
-   
+
   * Commit all files that were changed in the above steps!
   * Commit all files that were changed in the above steps!
-   
+
   * Tag all files in CVS with the version number with "cvs tag v_X_Y_Z". Don't
     use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work) etc.
   * Tag all files in CVS with the version number with "cvs tag v_X_Y_Z". Don't
     use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work) etc.
-   
+
   * If the release was in a development branch, increase the point version from
     even to odd (X.Y.(Z+1)) again in configure.in and commit your change.
   * If the release was in a development branch, increase the point version from
     even to odd (X.Y.(Z+1)) again in configure.in and commit your change.
-   
+
   * On the webserver, copy the user manual to a new top-level directory called
     X.Y.Z. This ensures that help links from the CGI pages, which have the
     version as a prefix, will go into the right version of the manual. If this
     is a development branch release, also symlink X.Y.(Z-1) to X.Y.Z and X.Y.
     (Z+1) to . (i.e. dot).
   * On the webserver, copy the user manual to a new top-level directory called
     X.Y.Z. This ensures that help links from the CGI pages, which have the
     version as a prefix, will go into the right version of the manual. If this
     is a development branch release, also symlink X.Y.(Z-1) to X.Y.Z and X.Y.
     (Z+1) to . (i.e. dot).
-   
+
 -------------------------------------------------------------------------------
 
 6.3. Building and Releasing the Packages
 -------------------------------------------------------------------------------
 
 6.3. Building and Releasing the Packages
@@ -1751,11 +1814,12 @@ For all types of packages, including the source tarball, you must make sure
 that you build from clean sources by exporting the right version from CVS into
 an empty directory (just press return when asked for a password):
 
 that you build from clean sources by exporting the right version from CVS into
 an empty directory (just press return when asked for a password):
 
-  mkdir dist # delete or choose different name if it already exists                                
-  cd dist                                                                                          
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login                        
+  mkdir dist # delete or choose different name if it already exists
+  cd dist
+  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
 
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa export -r v_X_Y_Z current
 
+
 Do NOT change a single bit, including, but not limited to version information
 after export from CVS. This is to make sure that all release packages, and with
 them, all future bug reports, are based on exactly the same code.
 Do NOT change a single bit, including, but not limited to version information
 after export from CVS. This is to make sure that all release packages, and with
 them, all future bug reports, are based on exactly the same code.
@@ -1774,26 +1838,26 @@ package. These apply to all platforms!
   * Privoxy requires write access to: all *.action files, all logfiles, and the
     trust file. You will need to determine the best way to do this for your
     platform.
   * Privoxy requires write access to: all *.action files, all logfiles, and the
     trust file. You will need to determine the best way to do this for your
     platform.
-   
+
   * Please include up to date documentation. At a bare minimum:
   * Please include up to date documentation. At a bare minimum:
-   
+
     LICENSE (top-level directory)
     LICENSE (top-level directory)
-   
+
     README (top-level directory)
     README (top-level directory)
-   
+
     AUTHORS (top-level directory)
     AUTHORS (top-level directory)
-   
+
     man page (top-level directory, Unix-like platforms only)
     man page (top-level directory, Unix-like platforms only)
-   
+
     The User Manual (doc/webserver/user-manual/)
     The User Manual (doc/webserver/user-manual/)
-   
+
     FAQ (doc/webserver/faq/)
     FAQ (doc/webserver/faq/)
-   
+
     Also suggested: Developer Manual (doc/webserver/developer-manual) and
     ChangeLog (top-level directory). FAQ and the manuals are HTML docs. There
     are also text versions in doc/text/ which could conceivably also be
     included.
     Also suggested: Developer Manual (doc/webserver/developer-manual) and
     ChangeLog (top-level directory). FAQ and the manuals are HTML docs. There
     are also text versions in doc/text/ which could conceivably also be
     included.
-   
+
     The documentation has been designed such that the manuals are linked to
     each other from parallel directories, and should be packaged that way.
     privoxy-index.html can also be included and can serve as a focal point for
     The documentation has been designed such that the manuals are linked to
     each other from parallel directories, and should be packaged that way.
     privoxy-index.html can also be included and can serve as a focal point for
@@ -1805,24 +1869,24 @@ package. These apply to all platforms!
     included for better presentation: p_doc.css. This should be in the same
     directory with privoxy-index.html, (i.e. one level up from the manual
     directories).
     included for better presentation: p_doc.css. This should be in the same
     directory with privoxy-index.html, (i.e. one level up from the manual
     directories).
-   
+
   * user.action is designed for local preferences. Make sure this does not get
     overwritten!
   * user.action is designed for local preferences. Make sure this does not get
     overwritten!
-   
+
   * Other configuration files should be installed as the new defaults, but all
     previously installed configuration files should be preserved as backups.
     This is just good manners :-)
   * Other configuration files should be installed as the new defaults, but all
     previously installed configuration files should be preserved as backups.
     This is just good manners :-)
-   
+
   * Please check platform specific notes in this doc, if you haven't done
     "Privoxy" packaging before for other platform specific issues. Conversely,
     please add any notes that you know are important for your platform (or
     contact one of the doc maintainers to do this if you can't).
   * Please check platform specific notes in this doc, if you haven't done
     "Privoxy" packaging before for other platform specific issues. Conversely,
     please add any notes that you know are important for your platform (or
     contact one of the doc maintainers to do this if you can't).
-   
+
   * Packagers should do a "clean" install of their package after building it.
     So any previous installs should be removed first to ensure the integrity of
     the newly built package. Then run the package for a while to make sure
     there are no obvious problems, before uploading.
   * Packagers should do a "clean" install of their package after building it.
     So any previous installs should be removed first to ensure the integrity of
     the newly built package. Then run the package for a while to make sure
     there are no obvious problems, before uploading.
-   
+
 -------------------------------------------------------------------------------
 
 6.3.2. Source Tarball
 -------------------------------------------------------------------------------
 
 6.3.2. Source Tarball
@@ -1830,16 +1894,19 @@ package. These apply to all platforms!
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then do:
 
 
 Then do:
 
-  make tarball-dist                                                            
+  make tarball-dist
+
 
 To upload the package to Sourceforge, simply issue
 
 
 To upload the package to Sourceforge, simply issue
 
-  make tarball-upload                                                          
+  make tarball-upload
+
 
 Go to the displayed URL and release the file publicly on Sourceforge. For the
 change log field, use the relevant section of the ChangeLog file.
 
 Go to the displayed URL and release the file publicly on Sourceforge. For the
 change log field, use the relevant section of the ChangeLog file.
@@ -1864,16 +1931,19 @@ that version plus one.
 
 Then run:
 
 
 Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then do
 
 
 Then do
 
-  make dist-dist                                                               
+  make dist-dist
+
 
 To upload the package to Sourceforge, simply issue
 
 
 To upload the package to Sourceforge, simply issue
 
-  make dist-upload rpm_packagerev                                              
+  make dist-upload rpm_packagerev
+
 
 where rpm_packagerev is the RPM release number as determined above. Go to the
 displayed URL and release the file publicly on Sourceforge. Use the release
 
 where rpm_packagerev is the RPM release number as determined above. Go to the
 displayed URL and release the file publicly on Sourceforge. Use the release
@@ -1889,6 +1959,7 @@ Setup module:
 
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co os2setup
 
 
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co os2setup
 
+
 You will need a mix of development tools. The main compilation takes place with
 IBM Visual Age C++. Some ancillary work takes place with GNU tools, available
 from various sources like hobbes.nmsu.edu. Specificially, you will need
 You will need a mix of development tools. The main compilation takes place with
 IBM Visual Age C++. Some ancillary work takes place with GNU tools, available
 from various sources like hobbes.nmsu.edu. Specificially, you will need
@@ -1898,16 +1969,19 @@ available from various sources, including its home page: xworkplace.
 Change directory to the os2setup directory. Edit the os2build.cmd file to set
 the final executable filename. For example,
 
 Change directory to the os2setup directory. Edit the os2build.cmd file to set
 the final executable filename. For example,
 
-  installExeName='privoxyos2_setup_X.Y.Z.exe'                                  
+  installExeName='privoxyos2_setup_X.Y.Z.exe'
+
 
 Next, edit the IJB.wis file so the release number matches in the PACKAGEID
 section:
 
 
 Next, edit the IJB.wis file so the release number matches in the PACKAGEID
 section:
 
-  PACKAGEID="Privoxy Team\Privoxy\Privoxy Package\X\Y\Z"                       
+  PACKAGEID="Privoxy Team\Privoxy\Privoxy Package\X\Y\Z"
+
 
 You're now ready to build. Run:
 
 
 You're now ready to build. Run:
 
-  os2build                                                                     
+  os2build
+
 
 You will find the WarpIN-installable executable in the ./files directory.
 Upload this anonymously to uploads.sourceforge.net/incoming, create a release
 
 You will find the WarpIN-installable executable in the ./files directory.
 Upload this anonymously to uploads.sourceforge.net/incoming, create a release
@@ -1920,18 +1994,21 @@ tarball package.
 
 Login to Sourceforge's compilefarm via ssh:
 
 
 Login to Sourceforge's compilefarm via ssh:
 
-  ssh cf.sourceforge.net                                                       
+  ssh cf.sourceforge.net
+
 
 Choose the right operating system (not the Debian one). When logged in, make
 sure that you have freshly exported the right version into an empty directory.
 (See "Building and releasing packages" above). Then run:
 
 
 Choose the right operating system (not the Debian one). When logged in, make
 sure that you have freshly exported the right version into an empty directory.
 (See "Building and releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then run
 
 
 Then run
 
-  gmake solaris-dist                                                           
+  gmake solaris-dist
+
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make solaris-upload
 on the Sourceforge machine (no ncftpput). You now have to manually upload the
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make solaris-upload
 on the Sourceforge machine (no ncftpput). You now have to manually upload the
@@ -1951,11 +2028,13 @@ setup module:
 
   cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co winsetup
 
 
   cvs -z3  -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co winsetup
 
+
 Then you can build the package. This is fully automated, and is controlled by
 winsetup/GNUmakefile. All you need to do is:
 
 Then you can build the package. This is fully automated, and is controlled by
 winsetup/GNUmakefile. All you need to do is:
 
-  cd winsetup                                                                  
-  make                                                                         
+  cd winsetup
+  make
+
 
 Now you can manually rename privoxy_setup.exe to privoxy_setup_X_Y_Z.exe, and
 upload it to SourceForge. When releasing the package on SourceForge, use the
 
 Now you can manually rename privoxy_setup.exe to privoxy_setup_X_Y_Z.exe, and
 upload it to SourceForge. When releasing the package on SourceForge, use the
@@ -1969,16 +2048,19 @@ First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then add a log entry
 to debian/changelog, if it is not already there, for example by running:
 
 directory. (See "Building and releasing packages" above). Then add a log entry
 to debian/changelog, if it is not already there, for example by running:
 
-  debchange -v 3.1.1-alpha-1 "New upstream version"                            
+  debchange -v 3.0.3-stable-1 "New upstream version"
+
 
 Then, run:
 
 
 Then, run:
 
-  dpkg-buildpackage -rfakeroot -us -uc -b                                      
+  dpkg-buildpackage -rfakeroot -us -uc -b
 
 
-This will create ../privoxy_3.1.1-alpha-1_i386.deb which can be uploaded. To
+
+This will create ../privoxy_3.0.3-stable-1_i386.deb which can be uploaded. To
 upload the package to Sourceforge, simply issue
 
 upload the package to Sourceforge, simply issue
 
-  make debian-upload                                                           
+  make debian-upload
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1990,10 +2072,12 @@ setup module:
 
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co osxsetup
 
 
   cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co osxsetup
 
+
 Then run:
 
 Then run:
 
-  cd osxsetup                                                                  
-  build                                                                        
+  cd osxsetup
+  build
+
 
 This will run autoheader, autoconf and configure as well as make. Finally, it
 will copy over the necessary files to the ./osxsetup/files directory for
 
 This will run autoheader, autoconf and configure as well as make. Finally, it
 will copy over the necessary files to the ./osxsetup/files directory for
@@ -2004,7 +2088,8 @@ package name to match the release, and hit the "Create package" button. If you
 specify ./Privoxy.pkg as the output package name, you can then create the
 distributable zip file with the command:
 
 specify ./Privoxy.pkg as the output package name, you can then create the
 distributable zip file with the command:
 
-  zip -r privoxyosx_setup_x.y.z.zip Privoxy.pkg                                
+  zip -r privoxyosx_setup_x.y.z.zip Privoxy.pkg
+
 
 You can then upload privoxyosx_setup_x.y.z.zip anonymously to
 uploads.sourceforge.net/incoming, create a release for it, and you're done. Use
 
 You can then upload privoxyosx_setup_x.y.z.zip anonymously to
 uploads.sourceforge.net/incoming, create a release for it, and you're done. Use
@@ -2016,18 +2101,21 @@ the release notes and Change Log from the source tarball package.
 
 Login to Sourceforge's compile-farm via ssh:
 
 
 Login to Sourceforge's compile-farm via ssh:
 
-  ssh cf.sourceforge.net                                                       
+  ssh cf.sourceforge.net
+
 
 Choose the right operating system. When logged in, make sure that you have
 freshly exported the right version into an empty directory. (See "Building and
 releasing packages" above). Then run:
 
 
 Choose the right operating system. When logged in, make sure that you have
 freshly exported the right version into an empty directory. (See "Building and
 releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then run:
 
 
 Then run:
 
-  gmake freebsd-dist                                                           
+  gmake freebsd-dist
+
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make freebsd-upload
 on the Sourceforge machine (no ncftpput). You now have to manually upload the
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make freebsd-upload
 on the Sourceforge machine (no ncftpput). You now have to manually upload the
@@ -2041,8 +2129,9 @@ release notes and Change Log from the source tarball package.
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then do FIXME.
 
 
 Then do FIXME.
 
@@ -2053,8 +2142,9 @@ Then do FIXME.
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
 First, make sure that you have freshly exported the right version into an empty
 directory. (See "Building and releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then do FIXME.
 
 
 Then do FIXME.
 
@@ -2064,18 +2154,21 @@ Then do FIXME.
 
 Login to Sourceforge's compilefarm via ssh:
 
 
 Login to Sourceforge's compilefarm via ssh:
 
-  ssh cf.sourceforge.net                                                       
+  ssh cf.sourceforge.net
+
 
 Choose the right operating system. When logged in, make sure that you have
 freshly exported the right version into an empty directory. (See "Building and
 releasing packages" above). Then run:
 
 
 Choose the right operating system. When logged in, make sure that you have
 freshly exported the right version into an empty directory. (See "Building and
 releasing packages" above). Then run:
 
-  cd current                                                                   
-  autoheader && autoconf && ./configure                                        
+  cd current
+  autoheader && autoconf && ./configure
+
 
 Then run:
 
 
 Then run:
 
-  make aix-dist                                                                
+  make aix-dist
+
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make aix-upload on
 the Sourceforge machine (no ncftpput). You now have to manually upload the
 
 which creates a gzip'ed tar archive. Sadly, you cannot use make aix-upload on
 the Sourceforge machine (no ncftpput). You now have to manually upload the
@@ -2090,18 +2183,18 @@ After the package is ready, it is time to upload it to SourceForge, and go
 through the release steps. The upload is done via FTP:
 
   * Upload to: ftp://upload.sourceforge.net/incoming
 through the release steps. The upload is done via FTP:
 
   * Upload to: ftp://upload.sourceforge.net/incoming
-   
+
   * user: anonymous
   * user: anonymous
-   
+
   * password: ijbswa-developers@lists.sourceforge.net
   * password: ijbswa-developers@lists.sourceforge.net
-   
+
 Or use the make targets as described above.
 
 Once this done go to http://sourceforge.net/project/admin/editpackages.php?
 group_id=11118, making sure you are logged in. Find your target platform in the
 second column, and click Add Release. You will then need to create a new
 release for your package, using the format of $VERSION ($CODE_STATUS), e.g.
 Or use the make targets as described above.
 
 Once this done go to http://sourceforge.net/project/admin/editpackages.php?
 group_id=11118, making sure you are logged in. Find your target platform in the
 second column, and click Add Release. You will then need to create a new
 release for your package, using the format of $VERSION ($CODE_STATUS), e.g.
-3.1.1 (beta).
+3.0.3 (beta).
 
 Now just follow the prompts. Be sure to add any appropriate Release notes. You
 should see your freshly uploaded packages in "Step 2. Add Files To This
 
 Now just follow the prompts. Be sure to add any appropriate Release notes. You
 should see your freshly uploaded packages in "Step 2. Add Files To This
@@ -2139,6 +2232,7 @@ files, do:
 
   make dok dok-pdf # (or 'make redhat-dok dok-pdf' if 'make dok' doesn't work for you)
 
 
   make dok dok-pdf # (or 'make redhat-dok dok-pdf' if 'make dok' doesn't work for you)
 
+
 That will generate doc/webserver/user-manual, doc/webserver/developer-manual,
 doc/webserver/faq, doc/pdf/*.pdf and doc/webserver/index.html automatically.
 
 That will generate doc/webserver/user-manual, doc/webserver/developer-manual,
 doc/webserver/faq, doc/pdf/*.pdf and doc/webserver/index.html automatically.
 
@@ -2153,7 +2247,8 @@ webserver/* directory (or create new directories under doc/webserver).
 Next, commit any changes from the above steps to CVS. All set? If these are
 docs in the stable branch, then do:
 
 Next, commit any changes from the above steps to CVS. All set? If these are
 docs in the stable branch, then do:
 
-  make webserver                                                               
+  make webserver
+
 
 This will do the upload to the webserver (www.privoxy.org) and ensure all files
 and directories there are group writable.
 
 This will do the upload to the webserver (www.privoxy.org) and ensure all files
 and directories there are group writable.
@@ -2175,7 +2270,7 @@ with the best support:
 
 8.1. Get Support
 
 
 8.1. Get Support
 
-For casual users, our support forum at SourceForge is probably best suited: 
+For casual users, our support forum at SourceForge is probably best suited:
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
@@ -2198,7 +2293,7 @@ debugging. If you are using your own custom configuration, please try the stock
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
-fixed in the meantime. We would appreciate if you could take the time to 
+fixed in the meantime. We would appreciate if you could take the time to
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
@@ -2238,7 +2333,7 @@ group_id=11118.
 
 9. Privoxy Copyright, License and History
 
 
 9. Privoxy Copyright, License and History
 
-Copyright © 2001, 2002 by Privoxy Developers <developers@privoxy.org>
+Copyright © 2001 - 2004 by Privoxy Developers <developers@privoxy.org>
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
@@ -2269,7 +2364,7 @@ this program; if not, write to the
 
 9.2. History
 
 
 9.2. History
 
-In the beginning, there was the Internet Junkbuster, by Anonymous Coders and 
+In the beginning, there was the Internet Junkbuster, by Anonymous Coders and
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
@@ -2292,7 +2387,7 @@ Then, some developers picked up the thread, and started turning the software
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
-The result of this is Privoxy, whose first stable release, 3.0, was released
+The result of this is Privoxy, whose first stable version, 3.0, was released
 August, 2002.
 
 -------------------------------------------------------------------------------
 August, 2002.
 
 -------------------------------------------------------------------------------
@@ -2305,30 +2400,30 @@ http://www.privoxy.org/, the Privoxy Home page.
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
-http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on       
-SourceForge.                                                                   
+http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on
+SourceForge.
 
 
-http://config.privoxy.org/, the web-based user interface. Privoxy must be      
-running for this to work. Shortcut: http://p.p/                                
+http://config.privoxy.org/, the web-based user interface. Privoxy must be
+running for this to work. Shortcut: http://p.p/
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
-http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun   
-ideas from Privoxy users.                                                      
+http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun
+ideas from Privoxy users.
 
 
-http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are  
-used to track web users.                                                       
+http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are
+used to track web users.
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
-http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,  
-from which Privoxy was derived.                                                
+http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,
+from which Privoxy was derived.
 
 
-http://privacy.net/analyze/, a useful site to check what information about you 
-is leaked while you browse the web.                                            
+http://privacy.net/analyze/, a useful site to check what information about you
+is leaked while you browse the web.
 
 
-http://www.squid-cache.org/, a very popular caching proxy, which is often used 
-together with Privoxy.                                                         
+http://www.squid-cache.org/, a very popular caching proxy, which is often used
+together with Privoxy.
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
index 05ac4b5..91eb9e8 100644 (file)
@@ -1,14 +1,14 @@
 Privoxy Frequently Asked Questions
 
 Privoxy Frequently Asked Questions
 
-Copyright © 2001, 2002 by Privoxy Developers
+[ Copyright © 2001-2004 by Privoxy Developers ]
 
 
-$Id: faq.sgml,v 2.2 2002/09/05 04:25:05 hal9 Exp $
+$Id: faq.txt,v 1.42.2.7 2004/01/30 23:46:57 oes Exp $
 
 This FAQ gives quick answers to frequently asked questions about Privoxy. It
 can't and doesn't replace the User Manual.
 
 Privoxy is a web proxy with advanced filtering capabilities for protecting
 
 This FAQ gives quick answers to frequently asked questions about Privoxy. It
 can't and doesn't replace the User Manual.
 
 Privoxy is a web proxy with advanced filtering capabilities for protecting
-privacy, filtering web page content, managing cookies, controlling access, and
+privacy, modifying web page content, managing cookies, controlling access, and
 removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
 very flexible configuration and can be customized to suit individual needs and
 tastes. Privoxy has application for both stand-alone systems and multi-user
 removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
 very flexible configuration and can be customized to suit individual needs and
 tastes. Privoxy has application for both stand-alone systems and multi-user
@@ -17,7 +17,7 @@ networks.
 Privoxy is based on Internet Junkbuster (tm).
 
 Please note that this document is constantly evolving. This copy represents the
 Privoxy is based on Internet Junkbuster (tm).
 
 Please note that this document is constantly evolving. This copy represents the
-state at the release of version 3.1.1. You can find the latest version of the
+state at the release of version 3.0.3. You can find the latest version of the
 document at http://www.privoxy.org/faq/. Please see the Contact section if you
 want to contact the developers.
 
 document at http://www.privoxy.org/faq/. Please see the Contact section if you
 want to contact the developers.
 
@@ -25,34 +25,38 @@ want to contact the developers.
 
 Table of Contents
 1. General Information
 
 Table of Contents
 1. General Information
-   
+
     1.1. What is this new version of Privoxy?
     1.2. Why "Privoxy"? Why a name change at all?
     1.3. How does Privoxy differ from the old Junkbuster?
     1.4. What is a "proxy"? How does Privoxy work?
     1.5. How does Privoxy know what is an ad, and what is not?
     1.6. Can Privoxy make mistakes? This does not sound very scientific.
     1.1. What is this new version of Privoxy?
     1.2. Why "Privoxy"? Why a name change at all?
     1.3. How does Privoxy differ from the old Junkbuster?
     1.4. What is a "proxy"? How does Privoxy work?
     1.5. How does Privoxy know what is an ad, and what is not?
     1.6. Can Privoxy make mistakes? This does not sound very scientific.
-    1.7. My browser does the same things as Privoxy. Why should I use Privoxy
+    1.7. Will I have to configure Privoxy before I can use it?
+    1.8. My browser does the same things as Privoxy. Why should I use Privoxy
         at all?
         at all?
-    1.8. Is there is a license or fee? What about a warranty? Registration?
-    1.9. I would like to help you, what do I do?
-       
-        1.9.1. Money Money Money
-        1.9.2. Software
-        1.9.3. You want to work with us?
-       
+    1.9. Is there is a license or fee? What about a warranty? Registration?
+    1.10. I would like to help you, what do I do?
+
+        1.10.1. Money Money Money
+        1.10.2. Software
+        1.10.3. You want to work with us?
+
 2. Installation
 2. Installation
-   
+
     2.1. Which browsers are supported by Privoxy?
     2.2. Which operating systems are supported?
     2.1. Which browsers are supported by Privoxy?
     2.2. Which operating systems are supported?
-    2.3. Can I install Privoxy over Junkbuster?
-    2.4. I just installed Privoxy. Is there anything special I have to do now?
-    2.5. What is the proxy address of Privoxy?
-    2.6. I just installed Privoxy, and nothing is happening. All the ads are
+    2.3. Can I use Privoxy with my email client?
+    2.4. Can I install Privoxy over Junkbuster?
+    2.5. I just installed Privoxy. Is there anything special I have to do now?
+    2.6. What is the proxy address of Privoxy?
+    2.7. I just installed Privoxy, and nothing is happening. All the ads are
         there. What's wrong?
         there. What's wrong?
-   
+    2.8. I get a "Privoxy is not being used" dummy page although Privoxy is
+        running and being used.
+
 3. Configuration
 3. Configuration
-   
+
     3.1. Where can I get updated Actions Files?
     3.2. Can I use my old config files?
     3.3. What is an "actions" file?
     3.1. Where can I get updated Actions Files?
     3.2. Can I use my old config files?
     3.3. What is an "actions" file?
@@ -61,8 +65,8 @@ Table of Contents
     3.5. How are actions files configured? What is the easiest way to do this?
     3.6. There are several different "actions" files. What are the differences?
     3.7. How can I make my Yahoo/Hotmail/GMX account work?
     3.5. How are actions files configured? What is the easiest way to do this?
     3.6. There are several different "actions" files. What are the differences?
     3.7. How can I make my Yahoo/Hotmail/GMX account work?
-    3.8. What's the difference between the "Cautious", "Medium" and "Advanced"
-        defaults?
+    3.8. What's the difference between the "Cautious", "Medium" and
+        "Adventuresome" defaults?
     3.9. Why can I change the configuration with a browser? Does that not raise
         security issues?
     3.10. What is the default.filter file? What is a "filter"?
     3.9. Why can I change the configuration with a browser? Does that not raise
         security issues?
     3.10. What is the default.filter file? What is a "filter"?
@@ -77,9 +81,12 @@ Table of Contents
     3.17. Can I just set Privoxy to use port 80 and thus avoid individual
         browser configuration?
     3.18. Can Privoxy run as a "transparent" proxy?
     3.17. Can I just set Privoxy to use port 80 and thus avoid individual
         browser configuration?
     3.18. Can Privoxy run as a "transparent" proxy?
-   
+    3.19. How can I configure Privoxy for use with Outlook Express?
+    3.20. How can I have separate rules just for HTML mail?
+    3.21. How can I allow permanent cookies for my trusted sites?
+
 4. Miscellaneous
 4. Miscellaneous
-   
+
     4.1. How much does Privoxy slow my browsing down? This has to add extra
         time to browsing.
     4.2. I noticed considerable delays in page requests compared to the old
     4.1. How much does Privoxy slow my browsing down? This has to add extra
         time to browsing.
     4.2. I noticed considerable delays in page requests compared to the old
@@ -104,10 +111,14 @@ Table of Contents
         is a "crunch"?
     4.17. Can Privoxy effect files that I download from a webserver? FTP
         server?
         is a "crunch"?
     4.17. Can Privoxy effect files that I download from a webserver? FTP
         server?
-    4.18. Where can I find more information about Privoxy and related issues?
-   
+    4.18. I just downloaded a Perl script, and Privoxy altered it! Yikes, what
+        is wrong!
+    4.19. Where can I find more information about Privoxy and related issues?
+    4.20. I've noticed that Privoxy changes "Microsoft" to "MicroSuck"! Why are
+        you manipulating my browsing?
+
 5. Troubleshooting
 5. Troubleshooting
-   
+
     5.1. I just upgraded and am getting "connection refused" with every web
         page?
     5.2. I just added a new rule, but the steenkin ad is still getting through.
     5.1. I just upgraded and am getting "connection refused" with every web
         page?
     5.2. I just added a new rule, but the steenkin ad is still getting through.
@@ -121,27 +132,38 @@ Table of Contents
     5.7. In Mac OSX, I dragged the Privoxy folder to the trash in order to
         uninstall it. Now the finder tells me I don't have sufficient
         privileges to empty the trash.
     5.7. In Mac OSX, I dragged the Privoxy folder to the trash in order to
         uninstall it. Now the finder tells me I don't have sufficient
         privileges to empty the trash.
-    5.8. I get a completely blank page at one site. "View Source" shows only:
-        <html><body></body></html>.
-   
+    5.8. In Mac OSX Panther (10.3), images often fail to load and/or I
+        experience random delays in page loading. I'm using localhost as my
+        browser's proxy setting.
+    5.9. I get a completely blank page at one site. "View Source" shows only:
+        <html><body></body></html>. Without Privoxy the page loads fine.
+    5.10. Why am I getting a 503 Error (WSAECONNREFUSED) on every page?
+    5.11. My logs show many "Unable to get my own hostname" lines. Why?
+    5.12. When I try to launch Privoxy, I get an error message "port 8118 is
+        already in use" (or similar wording). Why?
+    5.13. Pages with UTF-8 fonts are garbled.
+    5.14. Why are binary files (such as images) corrupted when Privoxy is used?
+    5.15. What is the "demoronizer" and why is it there?
+    5.16. Why do I keep seeing "PrivoxyWindowOpen()" in raw source code?
+
 6. Contacting the developers, Bug Reporting and Feature Requests
 6. Contacting the developers, Bug Reporting and Feature Requests
-   
+
     6.1. Get Support
     6.2. Report Bugs
     6.3. Request New Features
     6.4. Report Ads or Other Actions-Related Problems
     6.5. Other
     6.1. Get Support
     6.2. Report Bugs
     6.3. Request New Features
     6.4. Report Ads or Other Actions-Related Problems
     6.5. Other
-   
+
 7. Privoxy Copyright, License and History
 7. Privoxy Copyright, License and History
-   
+
     7.1. License
     7.2. History
     7.1. License
     7.2. History
-   
+
 1. General Information
 
 1.1. What is this new version of Privoxy?
 
 1. General Information
 
 1.1. What is this new version of Privoxy?
 
-In the beginning, there was the Internet Junkbuster, by Anonymous Coders and 
+In the beginning, there was the Internet Junkbuster, by Anonymous Coders and
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
@@ -164,7 +186,7 @@ Then, some developers picked up the thread, and started turning the software
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
-The result of this is Privoxy, whose first stable release, 3.0, was released
+The result of this is Privoxy, whose first stable version, 3.0, was released
 August, 2002.
 
 -------------------------------------------------------------------------------
 August, 2002.
 
 -------------------------------------------------------------------------------
@@ -185,7 +207,7 @@ project itself, and they, in fact, still share our ideals and goals.
 
 The developers also believed that there are so many changes from the original
 code, that it was time to make a clean break from the past and make a name in
 
 The developers also believed that there are so many changes from the original
 code, that it was time to make a clean break from the past and make a name in
-their own right, especially now with the pending release of version 3.0.
+their own right.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -207,41 +229,41 @@ Privoxy's new features include:
   * Integrated browser based configuration and control utility at http://
     config.privoxy.org/ (shortcut: http://p.p/). Browser-based tracing of rule
     and filter effects. Remote toggling.
   * Integrated browser based configuration and control utility at http://
     config.privoxy.org/ (shortcut: http://p.p/). Browser-based tracing of rule
     and filter effects. Remote toggling.
-   
+
   * Web page content filtering (removes banners based on size, invisible
     "web-bugs", JavaScript and HTML annoyances, pop-up windows, etc.)
   * Web page content filtering (removes banners based on size, invisible
     "web-bugs", JavaScript and HTML annoyances, pop-up windows, etc.)
-   
+
   * Modularized configuration that allows for standard settings and user
     settings to reside in separate files, so that installing updated actions
     files won't overwrite individual user settings.
   * Modularized configuration that allows for standard settings and user
     settings to reside in separate files, so that installing updated actions
     files won't overwrite individual user settings.
-   
+
   * HTTP/1.1 compliant (but not all optional 1.1 features are supported).
   * HTTP/1.1 compliant (but not all optional 1.1 features are supported).
-   
+
   * Support for Perl Compatible Regular Expressions in the configuration files,
     and generally a more sophisticated and flexible configuration syntax over
     previous versions.
   * Support for Perl Compatible Regular Expressions in the configuration files,
     and generally a more sophisticated and flexible configuration syntax over
     previous versions.
-   
+
   * Improved cookie management features (e.g. session based cookies).
   * Improved cookie management features (e.g. session based cookies).
-   
+
   * GIF de-animation.
   * GIF de-animation.
-   
+
   * Bypass many click-tracking scripts (avoids script redirection).
   * Bypass many click-tracking scripts (avoids script redirection).
-   
+
   * Multi-threaded (POSIX and native threads).
   * Multi-threaded (POSIX and native threads).
-   
+
   * User-customizable HTML templates for all proxy-generated pages (e.g.
     "blocked" page).
   * User-customizable HTML templates for all proxy-generated pages (e.g.
     "blocked" page).
-   
+
   * Auto-detection and re-reading of config file changes.
   * Auto-detection and re-reading of config file changes.
-   
+
   * Improved signal handling, and a true daemon mode (Unix).
   * Improved signal handling, and a true daemon mode (Unix).
-   
+
   * Every feature now controllable on a per-site or per-location basis,
     configuration more powerful and versatile over-all.
   * Every feature now controllable on a per-site or per-location basis,
     configuration more powerful and versatile over-all.
-   
+
   * Many smaller new features added, limitations and bugs removed, and security
     holes fixed.
   * Many smaller new features added, limitations and bugs removed, and security
     holes fixed.
-   
+
 -------------------------------------------------------------------------------
 
 1.4. What is a "proxy"? How does Privoxy work?
 -------------------------------------------------------------------------------
 
 1.4. What is a "proxy"? How does Privoxy work?
@@ -291,9 +313,9 @@ configurable.
 1.6. Can Privoxy make mistakes? This does not sound very scientific.
 
 Actually, it's a black art ;-) And yes, it is always possible to have a broad
 1.6. Can Privoxy make mistakes? This does not sound very scientific.
 
 Actually, it's a black art ;-) And yes, it is always possible to have a broad
-rule accidentally block or change something by mistake. There is a good chance
-you may run into such a situation at some point. It is tricky writing rules to
-cover every conceivable possibility, and not occasionally get false positives.
+rule accidentally block or change something by mistake. You will almost surely
+run into such situations at some point. It is tricky writing rules to cover
+every conceivable possibility, and not occasionally get false positives.
 
 But this should not be a big concern since the Privoxy configuration is very
 flexible, and includes tools to help identify these types of situations so they
 
 But this should not be a big concern since the Privoxy configuration is very
 flexible, and includes tools to help identify these types of situations so they
@@ -302,7 +324,20 @@ the Troubleshooting section below.)
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-1.7. My browser does the same things as Privoxy. Why should I use Privoxy at
+1.7. Will I have to configure Privoxy before I can use it?
+
+No, not really. The default installation should give you a good starting point,
+and block most unwanted content.
+
+But you will certainly run into situations where there are false positives, or
+ads not being blocked that you may not want to see. In these cases, you would
+certainly benefit by customizing Privoxy's configuration to more closely match
+your individual situation. And we would encourage you to do this. This is where
+the real power of Privoxy lies!
+
+-------------------------------------------------------------------------------
+
+1.8. My browser does the same things as Privoxy. Why should I use Privoxy at
 all?
 
 Modern browsers do indeed have some of the same functionality as Privoxy. Maybe
 all?
 
 Modern browsers do indeed have some of the same functionality as Privoxy. Maybe
@@ -315,7 +350,7 @@ you don't have to maintain a similar configuration for possibly many browsers.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-1.8. Is there is a license or fee? What about a warranty? Registration?
+1.9. Is there is a license or fee? What about a warranty? Registration?
 
 Privoxy is licensed under the GNU General Public License (GPL). It is free to
 use, copy, modify or distribute as you wish under the terms of this license.
 
 Privoxy is licensed under the GNU General Public License (GPL). It is free to
 use, copy, modify or distribute as you wish under the terms of this license.
@@ -328,9 +363,9 @@ Privoxy really is free in every respect!
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-1.9. I would like to help you, what do I do?
+1.10. I would like to help you, what do I do?
 
 
-1.9.1. Money Money Money
+1.10.1. Money Money Money
 
 We, of course, welcome donations and could use money for domain registering,
 buying software to test Privoxy with, and, of course, for regular world-wide
 
 We, of course, welcome donations and could use money for domain registering,
 buying software to test Privoxy with, and, of course, for regular world-wide
@@ -339,7 +374,7 @@ a donation, just drop us a note.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-1.9.2. Software
+1.10.2. Software
 
 If you are a vendor of a web-related software like a browser, web server or
 proxy, and would like us to ensure that Privoxy runs smoothly with your
 
 If you are a vendor of a web-related software like a browser, web server or
 proxy, and would like us to ensure that Privoxy runs smoothly with your
@@ -349,11 +384,11 @@ result.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-1.9.3. You want to work with us?
+1.10.3. You want to work with us?
 
 Well, helping the team is always a good idea. We welcome new developers,
 packaging gurus or documentation writers. Simply get an account on
 
 Well, helping the team is always a good idea. We welcome new developers,
 packaging gurus or documentation writers. Simply get an account on
-SourceForge.net and mail your id to the developers mailing list. Then read the 
+SourceForge.net and mail your id to the developers mailing list. Then read the
 Developer's Manual.
 
 Once we have added you to the team, you'll have write access to the CVS
 Developer's Manual.
 
 Once we have added you to the team, you'll have write access to the CVS
@@ -376,7 +411,7 @@ protocol, just like a web server does.
 
 At present, Privoxy is known to run on Windows(95, 98, ME, 2000, XP), Linux
 (RedHat, SuSE, Debian, Conectiva, Gentoo, Slackware), Mac OSX, OS/2, AmigaOS,
 
 At present, Privoxy is known to run on Windows(95, 98, ME, 2000, XP), Linux
 (RedHat, SuSE, Debian, Conectiva, Gentoo, Slackware), Mac OSX, OS/2, AmigaOS,
-BeOS, FreeBSD, NetBSD, Solaris, and more flavors of Unix.
+BeOS, FreeBSD, NetBSD, OpenBSD, Solaris, and many more flavors of Unix.
 
 But any operating system that runs TCP/IP, can conceivably take advantage of
 Privoxy in a networked situation where Privoxy would run as a server on a LAN
 
 But any operating system that runs TCP/IP, can conceivably take advantage of
 Privoxy in a networked situation where Privoxy would run as a server on a LAN
@@ -388,7 +423,22 @@ always a possibility.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-2.3. Can I install Privoxy over Junkbuster?
+2.3. Can I use Privoxy with my email client?
+
+As long as there is some way to set a HTTP proxy for the client, then yes, any
+application can be used, whether it is strictly speaking a "browser" or not.
+Though this may not be the best approach for dealing with some of the common
+abuses of HTML in email. See How can I configure Privoxy with Outlook Express?
+below for more on this.
+
+Be aware that HTML email presents a number of unique security and privacy
+related issues, that can require advanced skills to overcome. The developers
+recommend using email clients that can be configured to convert HTML to plain
+text for these reasons.
+
+-------------------------------------------------------------------------------
+
+2.4. Can I install Privoxy over Junkbuster?
 
 We recommend you un-install Junkbuster first to minimize conflicts and
 confusion. You may want to save your old configuration files for future
 
 We recommend you un-install Junkbuster first to minimize conflicts and
 confusion. You may want to save your old configuration files for future
@@ -400,16 +450,16 @@ Note: Some installers may automatically un-install Junkbuster, if present!
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-2.4. I just installed Privoxy. Is there anything special I have to do now?
+2.5. I just installed Privoxy. Is there anything special I have to do now?
 
 All browsers must be told to use Privoxy as a proxy by specifying the correct
 proxy address and port number in the appropriate configuration area for the
 browser. See below. You should also flush your browser's memory and disk cache
 
 All browsers must be told to use Privoxy as a proxy by specifying the correct
 proxy address and port number in the appropriate configuration area for the
 browser. See below. You should also flush your browser's memory and disk cache
-to get rid of any cached junk items
+to get rid of any cached junk items, and remove any stored cookies.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-2.5. What is the proxy address of Privoxy?
+2.6. What is the proxy address of Privoxy?
 
 If you set up the Privoxy to run on the computer you browse from (rather than
 your ISP's server or some networked computer on a LAN), the proxy will be on
 
 If you set up the Privoxy to run on the computer you browse from (rather than
 your ISP's server or some networked computer on a LAN), the proxy will be on
@@ -428,24 +478,45 @@ would enter either the IP address of the LAN host where Privoxy is running, or
 the equivalent hostname. Port assignment would be same as above. Note that
 Privoxy doesn't listen on any LAN interfaces by default.
 
 the equivalent hostname. Port assignment would be same as above. Note that
 Privoxy doesn't listen on any LAN interfaces by default.
 
-Privoxy does not currently handle protocols such as FTP, SMTP, IM, IRC, ICQ, or
-other Internet protocols.
+Privoxy does not currently handle any other protocols such as FTP, SMTP, IM,
+IRC, ICQ, etc.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-2.6. I just installed Privoxy, and nothing is happening. All the ads are there.
+2.7. I just installed Privoxy, and nothing is happening. All the ads are there.
 What's wrong?
 
 Did you configure your browser to use Privoxy as a proxy? It does not sound
 like it. See above. You might also try flushing the browser's caches to force a
 full re-reading of pages. You can verify that Privoxy is running, and your
 What's wrong?
 
 Did you configure your browser to use Privoxy as a proxy? It does not sound
 like it. See above. You might also try flushing the browser's caches to force a
 full re-reading of pages. You can verify that Privoxy is running, and your
-browser is correctly configured by entering the special URL: http://
-config.privoxy.org/. This should take you to a page titled "This is Privoxy.."
-with access to Privoxy's internal configuration. If you see this, then you are
-good to go. If you receive a page saying "Privoxy is not running", then the
-browser is not set up to use your Privoxy installation. If you receive anything
-else (probably nothing at all), it could either be that the browser is not set
-up correctly, or that Privoxy is not running at all. Check the log file.
+browser is correctly configured by entering the special URL: http://p.p/. This
+should take you to a page titled "This is Privoxy.." with access to Privoxy's
+internal configuration. If you see this, then you are good to go. If you
+receive a page saying "Privoxy is not running", then the browser is not set up
+to use your Privoxy installation. If you receive anything else (probably
+nothing at all), it could either be that the browser is not set up correctly,
+or that Privoxy is not running at all. Check the log file. For instructions on
+starting Privoxy and browser configuration, see the chapter on starting Privoxy
+in the user manual.
+
+-------------------------------------------------------------------------------
+
+2.8. I get a "Privoxy is not being used" dummy page although Privoxy is running
+and being used.
+
+First, make sure that Privoxy is really running and being used by visiting
+http://p.p/. You should see the Privoxy main page. If not, see the chapter on
+starting Privoxy in the user manual.
+
+Now if http://p.p/ works for you, but other parts of Privoxy's web interface
+show the dummy page, your browser has cached a redirection it encountered
+before Privoxy was being used. You need to clear your browser's cache. Note
+that shift-reloading the dummy page won't help, since that'll only refresh the
+dummy page, not the redirection that lead you there.
+
+The procedure for clearing the cache varies from browser to browser. As an
+example, Mozilla users would click Edit --> Preferences --> Advanced --> Cache
+and then click both "Clear Memory Cache" and "Clear Disk Cache".
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -487,13 +558,13 @@ then applied to requests matching one or more patterns. There are many possible
 actions that might apply to any given site. As an example, if you are blocking
 cookies as one of your default actions, but need to accept cookies from a given
 site, you would need to define an exception for this site in one of your
 actions that might apply to any given site. As an example, if you are blocking
 cookies as one of your default actions, but need to accept cookies from a given
 site, you would need to define an exception for this site in one of your
-actions files, preferably in user.action
+actions files, preferably in user.action.
 
 -------------------------------------------------------------------------------
 
 3.4. The "actions" concept confuses me. Please list some of these "actions".
 
 
 -------------------------------------------------------------------------------
 
 3.4. The "actions" concept confuses me. Please list some of these "actions".
 
-For a comprehensive discussion of the actions concept, please refer to the 
+For a comprehensive discussion of the actions concept, please refer to the
 actions file chapter in the user manual. It includes a list of all actions and
 an actions file tutorial to get you started.
 
 actions file chapter in the user manual. It includes a list of all actions and
 an actions file tutorial to get you started.
 
@@ -532,62 +603,30 @@ like not to have to log in manually each time you access those websites, simply
 turn off all cookie handling for them in the user.action file. An example for
 yahoo might look like:
 
 turn off all cookie handling for them in the user.action file. An example for
 yahoo might look like:
 
-# Allow all cookies for Yahoo login:                                           
-#                                                                              
-{ -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only }    
-.login.yahoo.com                                                               
+# Allow all cookies for Yahoo login:
+#
+{ -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only }
+.login.yahoo.com
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-3.8. What's the difference between the "Cautious", "Medium" and "Advanced"
+3.8. What's the difference between the "Cautious", "Medium" and "Adventuresome"
 defaults?
 
 Configuring Privoxy is not entirely trivial. To help you get started, we
 defaults?
 
 Configuring Privoxy is not entirely trivial. To help you get started, we
-provide you with three different default action "packages" in the web based
-actions file editor at http://config.privoxy.org/show-status. The following
-table shows you, which of the most important features are enabled in each
-configuration:
-
-Table 1. Default Configurations
-
-+-----------------------------------------------------------------------------+
-|Feature            |Cautious          |Intermadiate       |Advanced          |
-|-------------------+------------------+-------------------+------------------|
-|Ad-blocking by URL |yes               |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Ad-filtering by    |yes               |yes                |yes               |
-|size               |                  |                   |                  |
-|-------------------+------------------+-------------------+------------------|
-|GIF de-animation   |no                |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Referer forging    |no                |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Cookie handling    |none              |session-only       |kill              |
-|-------------------+------------------+-------------------+------------------|
-|Pop-up killing     |no                |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Fast redirects     |no                |no                 |yes               |
-|-------------------+------------------+-------------------+------------------|
-|HTML taming        |yes               |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|JavaScript taming  |yes               |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Web-bug killing    |yes               |yes                |yes               |
-|-------------------+------------------+-------------------+------------------|
-|Fun text           |no                |no                 |yes               |
-|replacements       |                  |                   |                  |
-|-------------------+------------------+-------------------+------------------|
-|Image tag          |no                |no                 |yes               |
-|reordering         |                  |                   |                  |
-|-------------------+------------------+-------------------+------------------|
-|Ad-filtering by    |no                |no                 |yes               |
-|link               |                  |                   |                  |
-+-----------------------------------------------------------------------------+
+provide you with three different default action "profiles" in the web based
+actions file editor at http://config.privoxy.org/show-status. See the User
+Manual for a list of actions, and how the default profiles are set.
 
 Where the defaults are likely to break some sites, exceptions for known popular
 "problem" sites are included, but in general, the more aggressive your default
 
 Where the defaults are likely to break some sites, exceptions for known popular
 "problem" sites are included, but in general, the more aggressive your default
-settings are, the more exceptions you will have to make later. See the user
-manual for a more deatiled discussion.
+settings are, the more exceptions you will have to make later. See the User
+Manual for a more deatiled discussion.
+
+It should be noted that the "Adventuresome" profile (formerly known as the
+"Advanced" profile) is not only more aggressive, but also includes fun and,
+extreme usage of most of Privoxy's features. Use at your own risk!
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -644,11 +683,23 @@ of the LAN gateway interface, and port number to use. Assuming your LAN address
 is 192.168.1.1 and you wish to run Privoxy on port 8118, this line should look
 like:
 
 is 192.168.1.1 and you wish to run Privoxy on port 8118, this line should look
 like:
 
-  listen-address  192.168.1.1:8118                                             
+  listen-address  192.168.1.1:8118
+
 
 Save the file, and restart Privoxy. Configure all browsers on the network then
 to use this address and port number.
 
 
 Save the file, and restart Privoxy. Configure all browsers on the network then
 to use this address and port number.
 
+Alternately, you can have Privoxy listen on all available interfaces:
+
+  listen-address    :8118
+
+
+And then use Privoxy's permit-access feature to limit connections. A firewall
+in this situation is recommended as well.
+
+The above steps should be the same for any TCP network, regardless of operating
+system.
+
 If you run Privoxy on a LAN with untrusted users, we recommend that you
 double-check the access control and security options!
 
 If you run Privoxy on a LAN with untrusted users, we recommend that you
 double-check the access control and security options!
 
@@ -664,7 +715,7 @@ this choice only has effect for images which are blocked as images, i.e. whose
 URLs match both a handle-as-image and block action.
 
 If you want to see nothing, then change the set-image-blocker action to
 URLs match both a handle-as-image and block action.
 
 If you want to see nothing, then change the set-image-blocker action to
-"blank". This can be done by editing the default.action file, or trough the 
+"blank". This can be done by editing the default.action file, or trough the
 web-based actions file editor.
 
 -------------------------------------------------------------------------------
 web-based actions file editor.
 
 -------------------------------------------------------------------------------
@@ -705,13 +756,12 @@ will try to load the actual banner images and the usual image blocking will
 
 3.15. Can Privoxy run as a service on Win2K/NT?
 
 
 3.15. Can Privoxy run as a service on Win2K/NT?
 
-Yes, it can run as a system service using srvany.exe. The only catch is that
-this will effectively disable the Privoxy icon (and its menu!) in the taskbar.
-You can have one or the other, but not both at this time :(
+Yes, it can run as a system service using srvany.exe. See the discussion at
+http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=
+11118, for details, and a sample configuration.
 
 
-There is a pending feature request for this functionality. See the discussion
-at http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=
-11118, for details, and a sample configuration. 
+Version 3.0.1 fixes the problem where the icon and menu where not available in
+the taskbar for this usage.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -743,6 +793,51 @@ used for chaining we recommend Transproxy (http://www.transproxy.nlc.net.au/).
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
+3.19. How can I configure Privoxy for use with Outlook Express?
+
+Outlook Express uses Internet Explorer components to both render HTML, and
+fetch any HTTP requests that may be embedded in an HTML email. So however you
+have Privoxy configured to work with IE, this configuration should
+automatically be shared.
+
+-------------------------------------------------------------------------------
+
+3.20. How can I have separate rules just for HTML mail?
+
+The short answer is, you can't. Privoxy has no way of knowing which particular
+application makes a request, so there is no way to distinguish between web
+pages and HTML mail. Privoxy just blindly proxies all requests. In the case of
+Outlook Express (see above), OE uses IE anyway, and there is no way for Privoxy
+to ever be able to distinguish between them (nor could any other proxy type
+application for that matter).
+
+For a good discussion of some of the issues involved (including privacy and
+security issues), see http://sourceforge.net/tracker/?func=detail&atid=211118&
+aid=629518&group_id=11118.
+
+-------------------------------------------------------------------------------
+
+3.21. How can I allow permanent cookies for my trusted sites?
+
+There are several actions that relate to cookies. The default behavior is to
+allow only "session cookies", which means the cookies only last for the current
+browser session. This eliminates most kinds of abuse related to cookies. But
+there may be cases where we want cookies to last.
+
+To disable all cookie actions, so that cookies are allowed unrestricted, both
+in and out, for example.com:
+
+ { -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only -filter{content-cookies} }
+  .example.com
+
+
+Place the above in user.action. Note some of these may be off by default
+anyway, so this might be redundant, but there is no harm being explicit in what
+you want to happen. user.action includes an alias for this situation, called
+allow-cookies.
+
+-------------------------------------------------------------------------------
+
 4. Miscellaneous
 
 4.1. How much does Privoxy slow my browsing down? This has to add extra time to
 4. Miscellaneous
 
 4.1. How much does Privoxy slow my browsing down? This has to add extra time to
@@ -773,7 +868,11 @@ different, because most browsers are able to start rendering incomplete
 content, giving the user a feeling of "it works". This effect is especially
 noticeable on slow dialup connections.
 
 content, giving the user a feeling of "it works". This effect is especially
 noticeable on slow dialup connections.
 
-Filtering is automatically disabled for inappropriate MIME types. 
+Filtering is automatically disabled for inappropriate MIME types. But note that
+if the web server mis-reports the MIME type, then content that should not be
+filtered, could be. Privoxy only knows how to differentiate filterable content
+because of the MIME type as reported by the server, or because of some
+configuration setting that enables/disables filtering.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -787,10 +886,11 @@ intercept requests for these addresses and answer them with its built-in "web
 server".
 
 This also makes for a good test for your browser configuration: If entering the
 server".
 
 This also makes for a good test for your browser configuration: If entering the
-URL http://config.privoxy.org/ takes you to a page saying "This is Privoxy..",
-everything is OK. If you get a page saying "Privoxy is not working" instead,
-then your browser didn't use Privoxy for the request, hence it could not be
-intercepted, and you have accessed the real web site at config.privoxy.org.
+URL http://config.privoxy.org/ takes you to a page saying "This is Privoxy
+...", everything is OK. If you get a page saying "Privoxy is not working"
+instead, then your browser didn't use Privoxy for the request, hence it could
+not be intercepted, and you have accessed the real web site at
+config.privoxy.org.
 
 With recent versions of Privoxy (version 2.9.x and later), the user interface
 features information on the run time status, the configuration, and even a
 
 With recent versions of Privoxy (version 2.9.x and later), the user interface
 features information on the run time status, the configuration, and even a
@@ -799,7 +899,7 @@ built-in editor for the actions files.
 Note that the built-in URLs from earlier versions of Junkbuster / Privoxy,
 http://example.com/show-proxy-args and http://i.j.b/, are no longer supported.
 If you still use such an old version, you should really consider upgrading to
 Note that the built-in URLs from earlier versions of Junkbuster / Privoxy,
 http://example.com/show-proxy-args and http://i.j.b/, are no longer supported.
 If you still use such an old version, you should really consider upgrading to
-3.1.1.
+3.0.3.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -836,7 +936,7 @@ can't even rule out that some of them only exist to *collect* information on
 You can find a list of anonymous public proxies at multiproxy.org and many more
 through Google. A particularly interesting project is the JAP service offered
 by the Technical University of Dresden (http://anon.inf.tu-dresden.de/
 You can find a list of anonymous public proxies at multiproxy.org and many more
 through Google. A particularly interesting project is the JAP service offered
 by the Technical University of Dresden (http://anon.inf.tu-dresden.de/
-index_en.html.
+index_en.html).
 
 There is, however, even in the single-machine case the possibility to make the
 server believe that your machine is in fact a shared proxy serving a whole big
 
 There is, however, even in the single-machine case the possibility to make the
 server believe that your machine is in fact a shared proxy serving a whole big
@@ -955,6 +1055,11 @@ banners to be placed in an encrypted page come unencrypted nonetheless for
 efficiency reasons, which exposes them to the full power of Privoxy's ad
 blocking.
 
 efficiency reasons, which exposes them to the full power of Privoxy's ad
 blocking.
 
+"Content cookies" (those that are embedded in the actual HTML or JS page
+content, see filter{content-cookies}), in an SSL transaction will be impossible
+to block under these conditions. Fortunately, this does not seem to be a very
+common scenario since most cookies come by traditional means.
+
 -------------------------------------------------------------------------------
 
 4.13. Privoxy runs as a "server". How secure is it? Do I need to take any
 -------------------------------------------------------------------------------
 
 4.13. Privoxy runs as a "server". How secure is it? Do I need to take any
@@ -1009,23 +1114,55 @@ browser, and the log consequently will show a "crunch".
 From the webserver's perspective, there is no difference between viewing a
 document (i.e. a page), and downloading a file. The same is true of Privoxy. If
 there is a match for a block pattern, it will still be blocked, and of course
 From the webserver's perspective, there is no difference between viewing a
 document (i.e. a page), and downloading a file. The same is true of Privoxy. If
 there is a match for a block pattern, it will still be blocked, and of course
-this is obvious. Filtering is potentially more of a concern since the results
-are not always so obvious.
+this is obvious.
+
+Filtering is potentially more of a concern since the results are not always so
+obvious, and the effects of filtering are there whether the file is simply
+viewed, or downloaded. And potentially whether the content is some obnoxious
+advertizement, or Mr. Jimmy's latest/greatest source code jewel. Of course, one
+of these presumably is "bad" content that we don't want, and the other is
+"good" content that we do want. Privoxy is blind to the differences, and can
+only distinguish "good from bad" by the configuration parameters we give it.
 
 Privoxy knows the differences in files according to the "Document Type" as
 reported by the webserver. If this is reported accurately (e.g. "application/
 zip" for a zip archive), then Privoxy knows to ignore these where appropriate.
 
 Privoxy knows the differences in files according to the "Document Type" as
 reported by the webserver. If this is reported accurately (e.g. "application/
 zip" for a zip archive), then Privoxy knows to ignore these where appropriate.
-It is possible, however, that documents that are of an unknown type (generally
-assumed to be "text/plain") will be filtered, as will those that might be
-incorrectly reported by the webserver. If such a file is a downloaded file that
-is intended to be saved to disk, then any content that might have been altered
-by filtering, will be saved too, for these (probably very rare) cases.
+Privoxy potentially can filter HTML as well as plain text documents, subject to
+configuration parameters of course. Also, documents that are of an unknown type
+(generally assumed to be "text/plain") can be filtered, as will those that
+might be incorrectly reported by the webserver. If such a file is a downloaded
+file that is intended to be saved to disk, then any content that might have
+been altered by filtering, will be saved too, for these (probably rare) cases.
+
+Note that versions later than 3.0.2 do NOT filter document types of "text/
+plain". Prior to this, Privoxy did filter this document type.
+
+In short, filtering is "ON" if a) the Document Type as reported by the
+webserver is appropriate and b) the configuration allows it (or at least does
+not disallow it). That's it. There is no magic cookie anywhere to say this is
+"good" and this is "bad". It's the configuration that let's it all happen or
+not.
+
+If you download text files, you probably do not want these to be filtered,
+particularly if the content is source code, or other critical content. Source
+code sometimes might be mistaken for Javascript (i.e. the kind that might open
+a pop-up window). It is recommended to turn off filtering for download sites
+(particularly if the content may be plain text files and you are using version
+3.0.2 or earlier) in your user.action file. And also, for any site or page
+where making any changes at all to the content is to be avoided.
+
+Privoxy does not do FTP at all, only HTTP protocols, so please don't even try.
+
+-------------------------------------------------------------------------------
+
+4.18. I just downloaded a Perl script, and Privoxy altered it! Yikes, what is
+wrong!
 
 
-Privoxy does not do FTP at all, only HTTP protocols.
+Please read above.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-4.18. Where can I find more information about Privoxy and related issues?
+4.19. Where can I find more information about Privoxy and related issues?
 
 Other references and sites of interest to Privoxy users:
 
 
 Other references and sites of interest to Privoxy users:
 
@@ -1033,35 +1170,46 @@ http://www.privoxy.org/, the Privoxy Home page.
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
-http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on       
-SourceForge.                                                                   
+http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on
+SourceForge.
 
 
-http://config.privoxy.org/, the web-based user interface. Privoxy must be      
-running for this to work. Shortcut: http://p.p/                                
+http://config.privoxy.org/, the web-based user interface. Privoxy must be
+running for this to work. Shortcut: http://p.p/
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
-http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun   
-ideas from Privoxy users.                                                      
+http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun
+ideas from Privoxy users.
 
 
-http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are  
-used to track web users.                                                       
+http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are
+used to track web users.
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
-http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,  
-from which Privoxy was derived.                                                
+http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,
+from which Privoxy was derived.
 
 
-http://privacy.net/analyze/, a useful site to check what information about you 
-is leaked while you browse the web.                                            
+http://privacy.net/analyze/, a useful site to check what information about you
+is leaked while you browse the web.
 
 
-http://www.squid-cache.org/, a very popular caching proxy, which is often used 
-together with Privoxy.                                                         
+http://www.squid-cache.org/, a very popular caching proxy, which is often used
+together with Privoxy.
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
 -------------------------------------------------------------------------------
 
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
 -------------------------------------------------------------------------------
 
+4.20. I've noticed that Privoxy changes "Microsoft" to "MicroSuck"! Why are you
+manipulating my browsing?
+
+We're not. The text substitutions that you are seeing are disabled in the
+default configuration as shipped. You have either manually activated the "fun"
+filter which is clearly labeled "Text replacements for subversive browsing fun!
+" or you have implicitly activated it by choosing the "Adventuresome" profile
+in the web-based editor (formerly known as the Advanced profile).
+
+-------------------------------------------------------------------------------
+
 5. Troubleshooting
 
 5.1. I just upgraded and am getting "connection refused" with every web page?
 5. Troubleshooting
 
 5.1. I just upgraded and am getting "connection refused" with every web page?
@@ -1072,7 +1220,7 @@ port than what Privoxy is using.
 The old Privoxy (and also Junkbuster) used port 8000 by default. This has been
 changed to port 8118 now, due to a conflict with NAS (Network Audio Service),
 which uses port 8000. If you haven't, you need to change your browser to the
 The old Privoxy (and also Junkbuster) used port 8000 by default. This has been
 changed to port 8118 now, due to a conflict with NAS (Network Audio Service),
 which uses port 8000. If you haven't, you need to change your browser to the
-new port number, or alternately change the listen-address option in Privoxy's 
+new port number, or alternately change the listen-address option in Privoxy's
 main configuration file.
 
 -------------------------------------------------------------------------------
 main configuration file.
 
 -------------------------------------------------------------------------------
@@ -1166,6 +1314,19 @@ Privoxy cannot act as a proxy for FTP traffic, so do not configure your browser
 to use Privoxy as an FTP proxy. The same is true for any protocol other than
 HTTP or HTTPS.
 
 to use Privoxy as an FTP proxy. The same is true for any protocol other than
 HTTP or HTTPS.
 
+Most browsers understand FTP as well as HTTP. If you connect to a site, with a
+URL like ftp://ftp.example.com, your browser is making an FTP connection, and
+not a HTTP connection. So while your browser may speak FTP, Privoxy does not,
+and cannot proxy such traffic.
+
+To complicate matters, some systems may have a generic "proxy" setting, which
+will silently enable both HTTP and FTP proxying! So it is possible to
+accidentally enable FTP proxying in these cases. And of course, if this
+happens, Privoxy will indeed cause problems since it does not know FTP.
+
+Will Privoxy ever proxy FTP traffic? Unlikely. There just is not much reason,
+and the work to make this happen is more than it may seem.
+
 -------------------------------------------------------------------------------
 
 5.6. In Mac OSX, I can't configure Microsoft Internet Explorer to use Privoxy
 -------------------------------------------------------------------------------
 
 5.6. In Mac OSX, I can't configure Microsoft Internet Explorer to use Privoxy
@@ -1195,22 +1356,129 @@ desktop should make it appear empty again.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
-5.8. I get a completely blank page at one site. "View Source" shows only:
-<html><body></body></html>.
+5.8. In Mac OSX Panther (10.3), images often fail to load and/or I experience
+random delays in page loading. I'm using localhost as my browser's proxy
+setting.
+
+We believe this is due to an IPv6-related bug in OSX, but don't fully
+understand the issue yet. In any case, changing the proxy setting to 127.0.0.1
+instead of localhost works around the problem.
+
+-------------------------------------------------------------------------------
+
+5.9. I get a completely blank page at one site. "View Source" shows only:
+<html><body></body></html>. Without Privoxy the page loads fine.
+
+Chances are that the site suffers from a bug in PHP, which results in empty
+pages being sent if the client explicitly requests an uncompressed page, like
+Privoxy does. This bug has been fixed in PHP 4.2.3.
+
+To find out if this is in fact the source of the problem, try adding the site
+to a -prevent-compression section in user.action:
+
+   # Make exceptions for ill-behaved sites:
+   #
+   {-prevent-compression}
+    .example.com
+
+
+If that works, you may also want to report the problem to the site's
+webmasters, telling them to use zlib.output_compression instead of ob_gzhandler
+in their PHP applications (workaround) or upgrade to PHP 4.2.3 or later (fix).
+
+-------------------------------------------------------------------------------
+
+5.10. Why am I getting a 503 Error (WSAECONNREFUSED) on every page?
+
+More than likely this is a problem with the network stack. ZoneAlarm has been
+reported to cause this symptom -- even if not running. The solution is to
+either fight the ZA configuration, or uninstall ZoneAlarm, and then find
+something better behaved in its place. Other firewall type products may cause
+similar type problems if not configured correctly.
+
+-------------------------------------------------------------------------------
+
+5.11. My logs show many "Unable to get my own hostname" lines. Why?
+
+Privoxy tries to get the hostname of the system its running on from the IP
+address of the system interface it is bound to (from the config file
+listen-address setting). If the system cannot supply this information, Privoxy
+logs this condition.
+
+Typically, this would be considered a system configuration error. It is not a
+fatal error to Privoxy however, but may result in a much slower response from
+Privoxy due to DNS timeouts.
+
+-------------------------------------------------------------------------------
+
+5.12. When I try to launch Privoxy, I get an error message "port 8118 is
+already in use" (or similar wording). Why?
+
+Port 8118 is Privoxy's default TCP "listening" port. Typically this message
+would mean that there is already one instance of Privoxy running, and you are
+actually trying to start a second Privoxy on the same port, which will not
+work. How and why this might happen varies from platform to platform, but you
+need to check your installation and start-up procedures.
+
+-------------------------------------------------------------------------------
+
+5.13. Pages with UTF-8 fonts are garbled.
+
+This is caused by the "demoronizer" filter, which was introduced in version
+3.0.2, and was inappropriately turned on by default. You should either upgrade
+Privoxy, or at least upgrade to the most recent default.action file available
+from SourceForge. Or you can simply disable the demoronizer filter.
+
+-------------------------------------------------------------------------------
+
+5.14. Why are binary files (such as images) corrupted when Privoxy is used?
+
+This may also be caused by the "demoronizer" filter, in conjunction with a web
+server that is misreporting a file type. Binary files are exempted from
+Privoxy's filtering (unless the web server by mistake says the file is a plain
+text file). Either upgrade Privoxy, or go to the most recent default.action
+file available from SourceForge.
+
+-------------------------------------------------------------------------------
+
+5.15. What is the "demoronizer" and why is it there?
+
+The original demoronizer was a Perl script that cleaned up HTML pages which
+were created with certain Microsoft products. MS has used proprietary
+extensions to standardized font encodings (ISO 8859-1), which has caused
+problems for pages that are viewed with non-Microsoft products (and are
+expecting to see a standard set of fonts). The demoronizer corrected these
+errors so the pages displayed correctly. Privoxy borrowed from this script,
+introducing a filter based on the original demoronizer, which in turn could
+correct these errors on the fly.
+
+But this is only needed in some situations, and will cause serious problems in
+some other situations.
+
+If you are using Microsoft products, you do not need it. If you need to view
+pages with UTF-8 characters (such as Cyrillic or Chinese), then it will cause
+corruption of the fonts, and thus should not be on.
+
+On the other hand, if you use non-Microsoft products, and you occasionally
+notice wierd characters on pages, you might want to try it.
+
+This filter was introduced with version 3.0.2 of Privoxy, and was on by default
+in that version. It is off in all subsequent versions (unless turned on by the
+user).
+
+-------------------------------------------------------------------------------
 
 
-This is often the result of a webserver using PHP that mishandles the request
-Privoxy sends to not compress the content (a PHP bug).
+5.16. Why do I keep seeing "PrivoxyWindowOpen()" in raw source code?
 
 
-In a default configuration, Privoxy requests all data be sent "uncompressed".
-This is required for the page filtering and other magic to work. In some rare
-cases, the browser and webserver miscommunicate and the result is a totally
-blank page. The suggested work around is to selectively turn off this feature
-for sites that exhibit such behavior. Example section for user.action:
+Privoxy is attempting to disable malicious Javascript in this case, with the
+unsolicited-popups filter. Privoxy cannot tell very well "good" code snippets
+from "bad" code snippets.
 
 
-   # Make exceptions for ill-behaved sites:                                      
-   #                                                                             
-   {-prevent-compression}                                                        
-    .example.com                                                                 
+If you see this in HTML source, and the page displays without problems, then
+this is good, and likely some pop-up window was disabled. If you see this where
+it is causing a problem, such as a downloaded program source code file, then
+you should set an exception for this site or page such that the integrity of
+the page stays in tact by disabling all filtering.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1224,7 +1492,7 @@ with the best support:
 
 6.1. Get Support
 
 
 6.1. Get Support
 
-For casual users, our support forum at SourceForge is probably best suited: 
+For casual users, our support forum at SourceForge is probably best suited:
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
@@ -1247,7 +1515,7 @@ debugging. If you are using your own custom configuration, please try the stock
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
-fixed in the meantime. We would appreciate if you could take the time to 
+fixed in the meantime. We would appreciate if you could take the time to
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
@@ -1287,7 +1555,7 @@ group_id=11118.
 
 7. Privoxy Copyright, License and History
 
 
 7. Privoxy Copyright, License and History
 
-Copyright © 2001, 2002 by Privoxy Developers <developers@privoxy.org>
+Copyright © 2001 - 2004 by Privoxy Developers <developers@privoxy.org>
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
@@ -1321,7 +1589,7 @@ this program; if not, write to the
 
 7.2. History
 
 
 7.2. History
 
-In the beginning, there was the Internet Junkbuster, by Anonymous Coders and 
+In the beginning, there was the Internet Junkbuster, by Anonymous Coders and
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
@@ -1344,6 +1612,6 @@ Then, some developers picked up the thread, and started turning the software
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
-The result of this is Privoxy, whose first stable release, 3.0, was released
+The result of this is Privoxy, whose first stable version, 3.0, was released
 August, 2002.
 
 August, 2002.
 
index 2e5302c..f229e88 100644 (file)
@@ -1,14 +1,14 @@
-Privoxy 3.1.1 User Manual
+Privoxy 3.0.3 User Manual
 
 
-Copyright © 2001, 2002 by Privoxy Developers
+[ Copyright © 2001 - 2004 by Privoxy Developers ]
 
 
-$Id: user-manual.sgml,v 2.2 2002/09/05 05:45:30 hal9 Exp $
+$Id: user-manual.txt,v 1.60.2.7 2004/01/30 23:46:57 oes Exp $
 
 
-The User Manual gives users information on how to install, configure and use 
+The User Manual gives users information on how to install, configure and use
 Privoxy.
 
 Privoxy is a web proxy with advanced filtering capabilities for protecting
 Privoxy.
 
 Privoxy is a web proxy with advanced filtering capabilities for protecting
-privacy, filtering web page content, managing cookies, controlling access, and
+privacy, modifying web page content, managing cookies, controlling access, and
 removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
 very flexible configuration and can be customized to suit individual needs and
 tastes. Privoxy has application for both stand-alone systems and multi-user
 removing ads, banners, pop-ups and other obnoxious Internet junk. Privoxy has a
 very flexible configuration and can be customized to suit individual needs and
 tastes. Privoxy has application for both stand-alone systems and multi-user
@@ -23,13 +23,13 @@ user-manual/. Please see the Contact section on how to contact the developers.
 
 Table of Contents
 1. Introduction
 
 Table of Contents
 1. Introduction
-   
+
     1.1. Features
     1.1. Features
-   
+
 2. Installation
 2. Installation
-   
+
     2.1. Binary Packages
     2.1. Binary Packages
-       
+
         2.1.1. Red Hat, SuSE and Conectiva RPMs
         2.1.2. Debian
         2.1.3. Windows
         2.1.1. Red Hat, SuSE and Conectiva RPMs
         2.1.2. Debian
         2.1.3. Windows
@@ -38,17 +38,17 @@ Table of Contents
         2.1.6. Mac OSX
         2.1.7. AmigaOS
         2.1.8. Gentoo
         2.1.6. Mac OSX
         2.1.7. AmigaOS
         2.1.8. Gentoo
-       
+
     2.2. Building from Source
     2.3. Keeping your Installation Up-to-Date
     2.2. Building from Source
     2.3. Keeping your Installation Up-to-Date
-   
+
 3. Note to Upgraders
 4. Quickstart to Using Privoxy
 3. Note to Upgraders
 4. Quickstart to Using Privoxy
-   
+
     4.1. Quickstart to Ad Blocking
     4.1. Quickstart to Ad Blocking
-   
+
 5. Starting Privoxy
 5. Starting Privoxy
-   
+
     5.1. Red Hat and Conectiva
     5.2. Debian
     5.3. SuSE
     5.1. Red Hat and Conectiva
     5.2. Debian
     5.3. SuSE
@@ -59,16 +59,16 @@ Table of Contents
     5.8. AmigaOS
     5.9. Gentoo
     5.10. Command Line Options
     5.8. AmigaOS
     5.9. Gentoo
     5.10. Command Line Options
-   
+
 6. Privoxy Configuration
 6. Privoxy Configuration
-   
+
     6.1. Controlling Privoxy with Your Web Browser
     6.2. Configuration Files Overview
     6.1. Controlling Privoxy with Your Web Browser
     6.2. Configuration Files Overview
-   
+
 7. The Main Configuration File
 7. The Main Configuration File
-   
+
     7.1. Configuration and Log File Locations
     7.1. Configuration and Log File Locations
-       
+
         7.1.1. confdir
         7.1.2. logdir
         7.1.3. actionsfile
         7.1.1. confdir
         7.1.2. logdir
         7.1.3. actionsfile
@@ -76,48 +76,48 @@ Table of Contents
         7.1.5. logfile
         7.1.6. jarfile
         7.1.7. trustfile
         7.1.5. logfile
         7.1.6. jarfile
         7.1.7. trustfile
-       
+
     7.2. Local Set-up Documentation
     7.2. Local Set-up Documentation
-       
+
         7.2.1. user-manual
         7.2.2. trust-info-url
         7.2.3. admin-address
         7.2.4. proxy-info-url
         7.2.1. user-manual
         7.2.2. trust-info-url
         7.2.3. admin-address
         7.2.4. proxy-info-url
-       
+
     7.3. Debugging
     7.3. Debugging
-       
+
         7.3.1. debug
         7.3.2. single-threaded
         7.3.1. debug
         7.3.2. single-threaded
-       
+
     7.4. Access Control and Security
     7.4. Access Control and Security
-       
+
         7.4.1. listen-address
         7.4.2. toggle
         7.4.3. enable-remote-toggle
         7.4.4. enable-edit-actions
         7.4.5. ACLs: permit-access and deny-access
         7.4.6. buffer-limit
         7.4.1. listen-address
         7.4.2. toggle
         7.4.3. enable-remote-toggle
         7.4.4. enable-edit-actions
         7.4.5. ACLs: permit-access and deny-access
         7.4.6. buffer-limit
-       
+
     7.5. Forwarding
     7.5. Forwarding
-       
+
         7.5.1. forward
         7.5.2. forward-socks4 and forward-socks4a
         7.5.3. Advanced Forwarding Examples
         7.5.1. forward
         7.5.2. forward-socks4 and forward-socks4a
         7.5.3. Advanced Forwarding Examples
-       
+
     7.6. Windows GUI Options
     7.6. Windows GUI Options
-   
+
 8. Actions Files
 8. Actions Files
-   
+
     8.1. Finding the Right Mix
     8.2. How to Edit
     8.3. How Actions are Applied to URLs
     8.4. Patterns
     8.1. Finding the Right Mix
     8.2. How to Edit
     8.3. How Actions are Applied to URLs
     8.4. Patterns
-       
+
         8.4.1. The Domain Pattern
         8.4.2. The Path Pattern
         8.4.1. The Domain Pattern
         8.4.2. The Path Pattern
-       
+
     8.5. Actions
     8.5. Actions
-       
+
         8.5.1. add-header
         8.5.2. block
         8.5.3. crunch-incoming-cookies
         8.5.1. add-header
         8.5.2. block
         8.5.3. crunch-incoming-cookies
@@ -139,102 +139,94 @@ Table of Contents
         8.5.19. session-cookies-only
         8.5.20. set-image-blocker
         8.5.21. Summary
         8.5.19. session-cookies-only
         8.5.20. set-image-blocker
         8.5.21. Summary
-       
+
     8.6. Aliases
     8.7. Actions Files Tutorial
     8.6. Aliases
     8.7. Actions Files Tutorial
-       
+
         8.7.1. default.action
         8.7.2. user.action
         8.7.1. default.action
         8.7.2. user.action
-       
+
 9. The Filter File
 9. The Filter File
-   
+
     9.1. Filter File Tutorial
     9.1. Filter File Tutorial
-   
+    9.2. The Pre-defined Filters
+
 10. Templates
 11. Contacting the Developers, Bug Reporting and Feature Requests
 10. Templates
 11. Contacting the Developers, Bug Reporting and Feature Requests
-   
+
     11.1. Get Support
     11.2. Report Bugs
     11.3. Request New Features
     11.4. Report Ads or Other Actions-Related Problems
     11.5. Other
     11.1. Get Support
     11.2. Report Bugs
     11.3. Request New Features
     11.4. Report Ads or Other Actions-Related Problems
     11.5. Other
-   
+
 12. Privoxy Copyright, License and History
 12. Privoxy Copyright, License and History
-   
+
     12.1. License
     12.2. History
     12.3. Authors
     12.1. License
     12.2. History
     12.3. Authors
-   
+
 13. See Also
 14. Appendix
 13. See Also
 14. Appendix
-   
+
     14.1. Regular Expressions
     14.2. Privoxy's Internal Pages
     14.1. Regular Expressions
     14.2. Privoxy's Internal Pages
-       
+
         14.2.1. Bookmarklets
         14.2.1. Bookmarklets
-       
+
     14.3. Chain of Events
     14.4. Anatomy of an Action
     14.3. Chain of Events
     14.4. Anatomy of an Action
-   
-1. Introduction
 
 
-This documentation is included with the current alpha version of Privoxy,
-v.3.1.1, and is mostly complete at this point. The most up to date reference
-for the time being is still the comments in the source files and in the
-individual configuration files. Development of version 3.0 is currently nearing
-completion, and includes many significant changes and enhancements over earlier
-versions. The target release date for stable v3.0 is "soon" ;-).
+1. Introduction
 
 
-Since this is a alpha version, not all new features are well tested. This
-documentation may be slightly out of sync as a result (especially with CVS
-sources). And there may be bugs, though hopefully not many!
+This documentation is included with the current stable version of Privoxy,
+v.3.0.3.
 
 -------------------------------------------------------------------------------
 
 1.1. Features
 
 In addition to Internet Junkbuster's traditional features of ad and banner
 
 -------------------------------------------------------------------------------
 
 1.1. Features
 
 In addition to Internet Junkbuster's traditional features of ad and banner
-blocking and cookie management, Privoxy provides new features, some of them
-currently under development:
+blocking and cookie management, Privoxy provides new features:
 
   * Integrated browser based configuration and control utility at http://
     config.privoxy.org/ (shortcut: http://p.p/). Browser-based tracing of rule
     and filter effects. Remote toggling.
 
   * Integrated browser based configuration and control utility at http://
     config.privoxy.org/ (shortcut: http://p.p/). Browser-based tracing of rule
     and filter effects. Remote toggling.
-   
+
   * Web page content filtering (removes banners based on size, invisible
     "web-bugs", JavaScript and HTML annoyances, pop-up windows, etc.)
   * Web page content filtering (removes banners based on size, invisible
     "web-bugs", JavaScript and HTML annoyances, pop-up windows, etc.)
-   
+
   * Modularized configuration that allows for standard settings and user
     settings to reside in separate files, so that installing updated actions
     files won't overwrite individual user settings.
   * Modularized configuration that allows for standard settings and user
     settings to reside in separate files, so that installing updated actions
     files won't overwrite individual user settings.
-   
+
   * HTTP/1.1 compliant (but not all optional 1.1 features are supported).
   * HTTP/1.1 compliant (but not all optional 1.1 features are supported).
-   
+
   * Support for Perl Compatible Regular Expressions in the configuration files,
     and generally a more sophisticated and flexible configuration syntax over
     previous versions.
   * Support for Perl Compatible Regular Expressions in the configuration files,
     and generally a more sophisticated and flexible configuration syntax over
     previous versions.
-   
+
   * Improved cookie management features (e.g. session based cookies).
   * Improved cookie management features (e.g. session based cookies).
-   
+
   * GIF de-animation.
   * GIF de-animation.
-   
+
   * Bypass many click-tracking scripts (avoids script redirection).
   * Bypass many click-tracking scripts (avoids script redirection).
-   
+
   * Multi-threaded (POSIX and native threads).
   * Multi-threaded (POSIX and native threads).
-   
+
   * User-customizable HTML templates for all proxy-generated pages (e.g.
     "blocked" page).
   * User-customizable HTML templates for all proxy-generated pages (e.g.
     "blocked" page).
-   
+
   * Auto-detection and re-reading of config file changes.
   * Auto-detection and re-reading of config file changes.
-   
+
   * Improved signal handling, and a true daemon mode (Unix).
   * Improved signal handling, and a true daemon mode (Unix).
-   
+
   * Every feature now controllable on a per-site or per-location basis,
     configuration more powerful and versatile over-all.
   * Every feature now controllable on a per-site or per-location basis,
     configuration more powerful and versatile over-all.
-   
+
   * Many smaller new features added, limitations and bugs removed, and security
     holes fixed.
   * Many smaller new features added, limitations and bugs removed, and security
     holes fixed.
-   
+
 -------------------------------------------------------------------------------
 
 2. Installation
 -------------------------------------------------------------------------------
 
 2. Installation
@@ -259,7 +251,7 @@ How to install the binary packages depends on your operating system:
 
 2.1.1. Red Hat, SuSE and Conectiva RPMs
 
 
 2.1.1. Red Hat, SuSE and Conectiva RPMs
 
-RPMs can be installed with rpm -Uvh privoxy-3.1.1-1.rpm, and will use /etc/
+RPMs can be installed with rpm -Uvh privoxy-3.0.3-1.rpm, and will use /etc/
 privoxy for the location of configuration files.
 
 Note that on Red Hat, Privoxy will not be automatically started on system boot.
 privoxy for the location of configuration files.
 
 Note that on Red Hat, Privoxy will not be automatically started on system boot.
@@ -267,7 +259,7 @@ You will need to enable that using chkconfig, ntsysv, or similar methods. Note
 that SuSE will automatically start Privoxy in the boot process.
 
 If you have problems with failed dependencies, try rebuilding the SRC RPM: rpm
 that SuSE will automatically start Privoxy in the boot process.
 
 If you have problems with failed dependencies, try rebuilding the SRC RPM: rpm
---rebuild privoxy-3.1.1-1.src.rpm. This will use your locally installed
+--rebuild privoxy-3.0.3-1.src.rpm. This will use your locally installed
 libraries and RPM version.
 
 Also note that if you have a Junkbuster RPM installed on your system, you need
 libraries and RPM version.
 
 Also note that if you have a Junkbuster RPM installed on your system, you need
@@ -278,8 +270,8 @@ remove Junkbuster automatically, before installing Privoxy.
 
 2.1.2. Debian
 
 
 2.1.2. Debian
 
-DEBs can be installed with dpkg -i privoxy_3.1.1-1.deb, and will use /etc/
-privoxy for the location of configuration files.
+DEBs can be installed with apt-get install privoxy, and will use /etc/privoxy
+for the location of configuration files.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -302,7 +294,7 @@ most part, you'll have to figure out where things go.
 
 First, make sure that no previous installations of Junkbuster and / or Privoxy
 are left on your system. Check that no Junkbuster or Privoxy objects are in
 
 First, make sure that no previous installations of Junkbuster and / or Privoxy
 are left on your system. Check that no Junkbuster or Privoxy objects are in
-your startup folder. 
+your startup folder.
 
 Then, just double-click the WarpIN self-installing archive, which will guide
 you through the installation process. A shadow of the Privoxy executable will
 
 Then, just double-click the WarpIN self-installing archive, which will guide
 you through the installation process. A shadow of the Privoxy executable will
@@ -326,8 +318,9 @@ automatically, remove or rename the folder /Library/StartupItems/Privoxy.
 To start Privoxy by hand, double-click on StartPrivoxy.command in the /Library/
 Privoxy folder. Or, type this command in the Terminal:
 
 To start Privoxy by hand, double-click on StartPrivoxy.command in the /Library/
 Privoxy folder. Or, type this command in the Terminal:
 
-  /Library/Privoxy/StartPrivoxy.command                                        
-                                                                               
+  /Library/Privoxy/StartPrivoxy.command
+
+
 
 You will be prompted for the administrator password.
 
 
 You will be prompted for the administrator password.
 
@@ -352,7 +345,7 @@ latest changes from the Portage tree. With emerge privoxy you install the
 latest version.
 
 Configuration files are in /etc/privoxy, the documentation is in /usr/share/doc
 latest version.
 
 Configuration files are in /etc/privoxy, the documentation is in /usr/share/doc
-/privoxy-3.1.1 and the Log directory is in /var/log/privoxy.
+/privoxy-3.0.3 and the Log directory is in /var/log/privoxy.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -371,42 +364,38 @@ compiler like gcc are required.
 When building from a source tarball (either release version or nightly CVS
 tarball), first unpack the source:
 
 When building from a source tarball (either release version or nightly CVS
 tarball), first unpack the source:
 
- tar xzvf privoxy-3.1.1-beta-src* [.tgz or .tar.gz]                            
- cd privoxy-3.1.1-beta                                                         
+ tar xzvf privoxy-3.0.3-src* [.tgz or .tar.gz]
+ cd privoxy-3.0.3
+
 
 For retrieving the current CVS sources, you'll need CVS installed. Note that
 sources from CVS are development quality, and may not be stable, or well
 tested. To download CVS source:
 
 
 For retrieving the current CVS sources, you'll need CVS installed. Note that
 sources from CVS are development quality, and may not be stable, or well
 tested. To download CVS source:
 
-  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login          
-  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co current 
-  cd current                                                                         
+  cvs -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa login
+  cvs -z3 -d:pserver:anonymous@cvs.ijbswa.sourceforge.net:/cvsroot/ijbswa co current
+  cd current
+
 
 This will create a directory named current/, which will contain the source
 tree.
 
 Then, in either case, to build from unpacked tarball or CVS source:
 
 
 This will create a directory named current/, which will contain the source
 tree.
 
 Then, in either case, to build from unpacked tarball or CVS source:
 
- autoheader                                                                    
- autoconf                                                                      
- ./configure      # (--help to see options)                                    
- make             # (the make from gnu, gmake for *BSD)                        
- su                                                                            
- make -n install  # (to see where all the files will go)                       
- make install     # (to really install)                                        
-
-+-----------------------------------------------------------------------------+
-|                                   Warning                                   |
-|-----------------------------------------------------------------------------|
-|The "make install" target is temporary quite broken! It is recommended to use|
-|a binary package, or do a source build, and manually install the components. |
-|Sorry.                                                                       |
-+-----------------------------------------------------------------------------+
+ autoheader
+ autoconf
+ ./configure      # (--help to see options)
+ make             # (the make from gnu, gmake for *BSD)
+ su
+ make -n install  # (to see where all the files will go)
+ make install     # (to really install)
+
 
 If you have gnu make, you can have the first four steps automatically done for
 you by just typing:
 
 
 If you have gnu make, you can have the first four steps automatically done for
 you by just typing:
 
-  make                                                                         
+  make
+
 
 in the freshly downloaded or unpacked source directory.
 
 
 in the freshly downloaded or unpacked source directory.
 
@@ -458,67 +447,71 @@ A quick list of things to be aware of before upgrading:
 
   * The default listening port is now 8118 due to a conflict with another
     service (NAS).
 
   * The default listening port is now 8118 due to a conflict with another
     service (NAS).
-   
+
   * Some installers may remove earlier versions completely. Save any important
     configuration files!
   * Some installers may remove earlier versions completely. Save any important
     configuration files!
-   
+
   * Privoxy is controllable with a web browser at the special URL: http://
     config.privoxy.org/ (Shortcut: http://p.p/). Many aspects of configuration
     can be done here, including temporarily disabling Privoxy.
   * Privoxy is controllable with a web browser at the special URL: http://
     config.privoxy.org/ (Shortcut: http://p.p/). Many aspects of configuration
     can be done here, including temporarily disabling Privoxy.
-   
+
   * The primary configuration files for cookie management, ad and banner
     blocking, and many other aspects of Privoxy configuration are the actions
     files. It is strongly recommended to become familiar with the new actions
     concept below, before modifying these files. Locally defined rules should
     go into user.action.
   * The primary configuration files for cookie management, ad and banner
     blocking, and many other aspects of Privoxy configuration are the actions
     files. It is strongly recommended to become familiar with the new actions
     concept below, before modifying these files. Locally defined rules should
     go into user.action.
-   
+
   * Some installers may not automatically start Privoxy after installation.
   * Some installers may not automatically start Privoxy after installation.
-   
+
 -------------------------------------------------------------------------------
 
 4. Quickstart to Using Privoxy
 
   * If upgrading, from versions before 2.9.16, please back up any configuration
     files. See the Note to Upgraders Section.
 -------------------------------------------------------------------------------
 
 4. Quickstart to Using Privoxy
 
   * If upgrading, from versions before 2.9.16, please back up any configuration
     files. See the Note to Upgraders Section.
-   
+
   * Install Privoxy. See the Installation Section below for platform specific
     information.
   * Install Privoxy. See the Installation Section below for platform specific
     information.
-   
+
   * Advanced users and those who want to offer Privoxy service to more than
   * Advanced users and those who want to offer Privoxy service to more than
-    just their local machine should check the main config file, especially the 
+    just their local machine should check the main config file, especially the
     security-relevant options. These are off by default.
     security-relevant options. These are off by default.
-   
+
   * Start Privoxy, if the installation program has not done this already (may
     vary according to platform). See the section Starting Privoxy.
   * Start Privoxy, if the installation program has not done this already (may
     vary according to platform). See the section Starting Privoxy.
-   
-  * Set your browser to use Privoxy as HTTP and HTTPS proxy by setting the
-    proxy configuration for address of 127.0.0.1 and port 8118. (Junkbuster and
-    earlier versions of Privoxy used port 8000.) See the section Starting
+
+  * Set your browser to use Privoxy as HTTP and HTTPS (SSL) proxy by setting
+    the proxy configuration for address of 127.0.0.1 and port 8118. (Junkbuster
+    and earlier versions of Privoxy used port 8000.) See the section Starting
     Privoxy below for more details on this.
     Privoxy below for more details on this.
-   
+
   * Flush your browser's disk and memory caches, to remove any cached ad
   * Flush your browser's disk and memory caches, to remove any cached ad
-    images.
-   
+    images. If using Privoxy to manage cookies, you should remove any currently
+    stored cookies too.
+
   * A default installation should provide a reasonable starting point for most.
     There will undoubtedly be occasions where you will want to adjust the
     configuration, but that can be dealt with as the need arises. Little to no
     initial configuration is required in most cases.
   * A default installation should provide a reasonable starting point for most.
     There will undoubtedly be occasions where you will want to adjust the
     configuration, but that can be dealt with as the need arises. Little to no
     initial configuration is required in most cases.
-   
+
     See the Configuration section for more configuration options, and how to
     customize your installation.
     See the Configuration section for more configuration options, and how to
     customize your installation.
-   
+
   * If you experience ads that slipped through, innocent images that are
     blocked, or otherwise feel the need to fine-tune Privoxy's behaviour, take
     a look at the actions files. As a quick start, you might find the richly
     commented examples helpful. You can also view and edit the actions files
     through the web-based user interface. The Appendix "Anatomy of an Action"
     has hints how to debug actions that "misbehave".
   * If you experience ads that slipped through, innocent images that are
     blocked, or otherwise feel the need to fine-tune Privoxy's behaviour, take
     a look at the actions files. As a quick start, you might find the richly
     commented examples helpful. You can also view and edit the actions files
     through the web-based user interface. The Appendix "Anatomy of an Action"
     has hints how to debug actions that "misbehave".
-   
+
+  * For easy access to Privoxy's most important controls, drag the provided
+    Bookmarklets into your browser's personal toolbar.
+
   * Please see the section Contacting the Developers on how to report bugs or
     problems with websites or to get help.
   * Please see the section Contacting the Developers on how to report bugs or
     problems with websites or to get help.
-   
+
   * Now enjoy surfing with enhanced comfort and privacy!
   * Now enjoy surfing with enhanced comfort and privacy!
-   
+
 -------------------------------------------------------------------------------
 
 4.1. Quickstart to Ad Blocking
 -------------------------------------------------------------------------------
 
 4.1. Quickstart to Ad Blocking
@@ -544,7 +537,7 @@ Secondly, a brief explanation of Privoxy's "actions". "Actions" in this
 context, are the directives we use to tell Privoxy to perform some task
 relating to HTTP transactions (i.e. web browsing). We tell Privoxy to take some
 "action". Each action has a unique name and function. While there are many
 context, are the directives we use to tell Privoxy to perform some task
 relating to HTTP transactions (i.e. web browsing). We tell Privoxy to take some
 "action". Each action has a unique name and function. While there are many
-potential actions in Privoxy's arsenal, only a few are used for ad blocking. 
+potential actions in Privoxy's arsenal, only a few are used for ad blocking.
 Actions, and action configuration files, are explained in depth below.
 
 Actions are specified in Privoxy's configuration, followed by one or more URLs
 Actions, and action configuration files, are explained in depth below.
 
 Actions are specified in Privoxy's configuration, followed by one or more URLs
@@ -571,7 +564,7 @@ and set-image-blocker:
     itself, it simply stops any communication with the remote server and sends
     Privoxy's own built-in BLOCKED page instead to let you now what has
     happened.
     itself, it simply stops any communication with the remote server and sends
     Privoxy's own built-in BLOCKED page instead to let you now what has
     happened.
-   
+
   * handle-as-image - tells Privoxy to treat this URL as an image. Privoxy's
     default configuration already does this for all common image types (e.g.
     GIF), but there are many situations where this is not so easy to determine.
   * handle-as-image - tells Privoxy to treat this URL as an image. Privoxy's
     default configuration already does this for all common image types (e.g.
     GIF), but there are many situations where this is not so easy to determine.
@@ -581,25 +574,25 @@ and set-image-blocker:
     page (which would only result in a "broken image" icon). There are some
     limitations to this though. For instance, you can't just brute-force an
     image substitution for an entire HTML page in most situations.
     page (which would only result in a "broken image" icon). There are some
     limitations to this though. For instance, you can't just brute-force an
     image substitution for an entire HTML page in most situations.
-   
+
   * set-image-blocker - tells Privoxy what to display in place of an ad image
     that has hit a block rule. For this to come into play, the URL must match a
   * set-image-blocker - tells Privoxy what to display in place of an ad image
     that has hit a block rule. For this to come into play, the URL must match a
-    block action somewhere in the configuration, and, it must also match an 
+    block action somewhere in the configuration, and, it must also match an
     handle-as-image action.
     handle-as-image action.
-   
+
     The configuration options on what to display instead of the ad are:
     The configuration options on what to display instead of the ad are:
-   
-       pattern - a checkerboard pattern, so that an ad replacement is obvious. 
-    This is the default.                                                       
-   
+
+       pattern - a checkerboard pattern, so that an ad replacement is obvious.
+    This is the default.
+
        blank - A very small empty GIF image is displayed. This is the so-called
        blank - A very small empty GIF image is displayed. This is the so-called
-    "invisible" configuration option.                                          
-   
-       http://<URL> - A redirect to any image anywhere of the user's choosing  
-    (advanced usage).                                                          
-   
+    "invisible" configuration option.
+
+       http://<URL> - A redirect to any image anywhere of the user's choosing
+    (advanced usage).
+
 The quickest way to adjust any of these settings is with your browser through
 The quickest way to adjust any of these settings is with your browser through
-the special Privoxy editor at http://config.privoxy.org/show-status (shortcut: 
+the special Privoxy editor at http://config.privoxy.org/show-status (shortcut:
 http://p.p/show-status). This is an internal page, and does not require
 Internet access. Select the appropriate "actions" file, and click "Edit". It is
 best to put personal or local preferences in user.action since this is not
 http://p.p/show-status). This is an internal page, and does not require
 Internet access. Select the appropriate "actions" file, and click "Edit". It is
 best to put personal or local preferences in user.action since this is not
@@ -612,28 +605,28 @@ A quick and simple step by step example:
 
   * Right click on the ad image to be blocked, then select "Copy Link Location"
     from the pop-up menu.
 
   * Right click on the ad image to be blocked, then select "Copy Link Location"
     from the pop-up menu.
-   
+
   * Set your browser to http://config.privoxy.org/show-status
   * Set your browser to http://config.privoxy.org/show-status
-   
+
   * Find user.action in the top section, and click on "Edit":
   * Find user.action in the top section, and click on "Edit":
-   
+
     Figure 1. Actions Files in Use
     Figure 1. Actions Files in Use
-   
+
     [files-in-u]
     [files-in-u]
-   
+
   * You should have a section with only block listed under "Actions:". If not,
     click a "Insert new section below" button, and in the new section that just
     appeared, click the Edit button right under the word "Actions:". This will
     bring up a list of all actions. Find block near the top, and click in the
     "Enabled" column, then "Submit" just below the list.
   * You should have a section with only block listed under "Actions:". If not,
     click a "Insert new section below" button, and in the new section that just
     appeared, click the Edit button right under the word "Actions:". This will
     bring up a list of all actions. Find block near the top, and click in the
     "Enabled" column, then "Submit" just below the list.
-   
+
   * Now, in the block actions section, click the "Add" button, and paste the
     URL the browser got from "Copy Link Location". Remove the http:// at the
     beginning of the URL. Then, click "Submit" (or "OK" if in a pop-up window).
   * Now, in the block actions section, click the "Add" button, and paste the
     URL the browser got from "Copy Link Location". Remove the http:// at the
     beginning of the URL. Then, click "Submit" (or "OK" if in a pop-up window).
-   
+
   * Now go back to the original page, and press SHIFT-Reload (or flush all
     browser caches). The image should be gone now.
   * Now go back to the original page, and press SHIFT-Reload (or flush all
     browser caches). The image should be gone now.
-   
+
 This is a very crude and simple example. There might be good reasons to use a
 wildcard pattern match to include potentially similar images from the same
 site. For a more extensive explanation of "patterns", and the entire actions
 This is a very crude and simple example. There might be good reasons to use a
 wildcard pattern match to include potentially similar images from the same
 site. For a more extensive explanation of "patterns", and the entire actions
@@ -701,7 +694,8 @@ We use a script. Note that Red Hat does not start Privoxy upon booting per
 default. It will use the file /etc/privoxy/config as its main configuration
 file.
 
 default. It will use the file /etc/privoxy/config as its main configuration
 file.
 
- # /etc/rc.d/init.d/privoxy start                                              
+ # /etc/rc.d/init.d/privoxy start
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -710,7 +704,8 @@ file.
 We use a script. Note that Debian starts Privoxy upon booting per default. It
 will use the file /etc/privoxy/config as its main configuration file.
 
 We use a script. Note that Debian starts Privoxy upon booting per default. It
 will use the file /etc/privoxy/config as its main configuration file.
 
- # /etc/init.d/privoxy start                                                   
+ # /etc/init.d/privoxy start
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -719,7 +714,8 @@ will use the file /etc/privoxy/config as its main configuration file.
 We use a script. It will use the file /etc/privoxy/config as its main
 configuration file. Note that SuSE starts Privoxy upon booting your PC.
 
 We use a script. It will use the file /etc/privoxy/config as its main
 configuration file. Note that SuSE starts Privoxy upon booting your PC.
 
- # rcprivoxy start                                                             
+ # rcprivoxy start
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -735,7 +731,8 @@ Note that Windows will automatically start Privoxy upon booting you PC.
 
 Example Unix startup command:
 
 
 Example Unix startup command:
 
- # /usr/sbin/privoxy /etc/privoxy/config                                       
+ # /usr/sbin/privoxy /etc/privoxy/config
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -754,8 +751,9 @@ system restarts. To start Privoxy by hand, double-click on the
 StartPrivoxy.command icon in the /Library/Privoxy folder. Or, type this command
 in the Terminal:
 
 StartPrivoxy.command icon in the /Library/Privoxy folder. Or, type this command
 in the Terminal:
 
-  /Library/Privoxy/StartPrivoxy.command                                        
-                                                                               
+  /Library/Privoxy/StartPrivoxy.command
+
+
 
 You will be prompted for the administrator password.
 
 
 You will be prompted for the administrator password.
 
@@ -763,8 +761,8 @@ You will be prompted for the administrator password.
 
 5.8. AmigaOS
 
 
 5.8. AmigaOS
 
-Start Privoxy (with RUN <>NIL:) in your startnet script (AmiTCP), in s:
-user-startup (RoadShow), as startup program in your startup script (Genesis),
+Start Privoxy (with RUN <>NIL:) in your startnet script (AmiTCP), in
+s:user-startup (RoadShow), as startup program in your startup script (Genesis),
 or as startup action (Miami and MiamiDx). Privoxy will automatically quit when
 you quit your TCP/IP stack (just ignore the harmless warning your TCP/IP stack
 may display that Privoxy is still running).
 or as startup action (Miami and MiamiDx). Privoxy will automatically quit when
 you quit your TCP/IP stack (just ignore the harmless warning your TCP/IP stack
 may display that Privoxy is still running).
@@ -776,14 +774,16 @@ may display that Privoxy is still running).
 A script is again used. It will use the file /etc/privoxy/config as its main
 configuration file.
 
 A script is again used. It will use the file /etc/privoxy/config as its main
 configuration file.
 
- /etc/init.d/privoxy start                                                     
-                                                                               
+ /etc/init.d/privoxy start
+
+
 
 Note that Privoxy is not automatically started at boot time by default. You can
 change this with the rc-update command.
 
 
 Note that Privoxy is not automatically started at boot time by default. You can
 change this with the rc-update command.
 
- rc-update add privoxy default                                                 
-                                                                               
+ rc-update add privoxy default
+
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -792,37 +792,45 @@ change this with the rc-update command.
 Privoxy may be invoked with the following command-line options:
 
   * --version
 Privoxy may be invoked with the following command-line options:
 
   * --version
-   
+
     Print version info and exit. Unix only.
     Print version info and exit. Unix only.
-   
+
   * --help
   * --help
-   
+
     Print short usage info and exit. Unix only.
     Print short usage info and exit. Unix only.
-   
+
   * --no-daemon
   * --no-daemon
-   
+
     Don't become a daemon, i.e. don't fork and become process group leader, and
     don't detach from controlling tty. Unix only.
     Don't become a daemon, i.e. don't fork and become process group leader, and
     don't detach from controlling tty. Unix only.
-   
+
   * --pidfile FILE
   * --pidfile FILE
-   
+
     On startup, write the process ID to FILE. Delete the FILE on exit. Failure
     to create or delete the FILE is non-fatal. If no FILE option is given, no
     PID file will be used. Unix only.
     On startup, write the process ID to FILE. Delete the FILE on exit. Failure
     to create or delete the FILE is non-fatal. If no FILE option is given, no
     PID file will be used. Unix only.
-   
+
   * --user USER[.GROUP]
   * --user USER[.GROUP]
-   
+
     After (optionally) writing the PID file, assume the user ID of USER, and if
     included the GID of GROUP. Exit if the privileges are not sufficient to do
     so. Unix only.
     After (optionally) writing the PID file, assume the user ID of USER, and if
     included the GID of GROUP. Exit if the privileges are not sufficient to do
     so. Unix only.
-   
+
+  * --chroot
+
+    Before changing to the user ID given in the --user option, chroot to that
+    user's home directory, i.e. make the kernel pretend to the Privoxy process
+    that the directory tree starts there. If set up carefully, this can limit
+    the impact of possible vulnerabilities in Privoxy to the files contained in
+    that hierarchy. Unix only.
+
   * configfile
   * configfile
-   
+
     If no configfile is included on the command line, Privoxy will look for a
     file named "config" in the current directory (except on Win32 where it will
     look for "config.txt" instead). Specify full path to avoid confusion. If no
     config file is found, Privoxy will fail to start.
     If no configfile is included on the command line, Privoxy will look for a
     file named "config" in the current directory (except on Win32 where it will
     look for "config.txt" instead). Specify full path to avoid confusion. If no
     config file is found, Privoxy will fail to start.
-   
+
 -------------------------------------------------------------------------------
 
 6. Privoxy Configuration
 -------------------------------------------------------------------------------
 
 6. Privoxy Configuration
@@ -837,16 +845,16 @@ easily with a web browser.
 
 Privoxy's user interface can be reached through the special URL http://
 config.privoxy.org/ (shortcut: http://p.p/), which is a built-in page and works
 
 Privoxy's user interface can be reached through the special URL http://
 config.privoxy.org/ (shortcut: http://p.p/), which is a built-in page and works
-without Internet access. You will see the following section: 
+without Internet access. You will see the following section:
+
+     Privoxy Menu
+        ?  View & change the current configuration
+        ?  View the source code version numbers
+        ?  View the request headers.
+        ?  Look up which actions apply to a URL and why
+        ?  Toggle Privoxy on or off
+        ?  Documentation
 
 
-     Privoxy Menu                                                              
-        ?  View & change the current configuration                             
-        ?  View the source code version numbers                                
-        ?  View the request headers.                                           
-        ?  Look up which actions apply to a URL and why                        
-        ?  Toggle Privoxy on or off                                            
-        ?  Documentation                                                       
-                                                                               
 
 This should be self-explanatory. Note the first item leads to an editor for the
 actions files, which is where the ad, banner, cookie, and URL blocking magic is
 
 This should be self-explanatory. Note the first item leads to an editor for the
 actions files, which is where the ad, banner, cookie, and URL blocking magic is
@@ -867,9 +875,7 @@ you can toggle Privoxy with one click from your browser.
 
 For Unix, *BSD and Linux, all configuration files are located in /etc/privoxy/
 by default. For MS Windows, OS/2, and AmigaOS these are all in the same
 
 For Unix, *BSD and Linux, all configuration files are located in /etc/privoxy/
 by default. For MS Windows, OS/2, and AmigaOS these are all in the same
-directory as the Privoxy executable. The name and number of configuration files
-has changed from previous versions, and is subject to change as development
-progresses.
+directory as the Privoxy executable.
 
 The installed defaults provide a reasonable starting point, though some
 settings may be aggressive by some standards. For the time being, the principle
 
 The installed defaults provide a reasonable starting point, though some
 settings may be aggressive by some standards. For the time being, the principle
@@ -877,30 +883,31 @@ configuration files are:
 
   * The main configuration file is named config on Linux, Unix, BSD, OS/2, and
     AmigaOS and config.txt on Windows. This is a required file.
 
   * The main configuration file is named config on Linux, Unix, BSD, OS/2, and
     AmigaOS and config.txt on Windows. This is a required file.
-   
+
   * default.action (the main actions file) is used to define which "actions"
     relating to banner-blocking, images, pop-ups, content modification, cookie
     handling etc should be applied by default. It also defines many exceptions
     (both positive and negative) from this default set of actions that enable
     Privoxy to selectively eliminate the junk, and only the junk, on as many
     websites as possible.
   * default.action (the main actions file) is used to define which "actions"
     relating to banner-blocking, images, pop-ups, content modification, cookie
     handling etc should be applied by default. It also defines many exceptions
     (both positive and negative) from this default set of actions that enable
     Privoxy to selectively eliminate the junk, and only the junk, on as many
     websites as possible.
-   
+
     Multiple actions files may be defined in config. These are processed in the
     order they are defined. Local customizations and locally preferred
     exceptions to the default policies as defined in default.action (which you
     will most probably want to define sooner or later) are probably best
     applied in user.action, where you can preserve them across upgrades.
     standard.action is for Privoxy's internal use.
     Multiple actions files may be defined in config. These are processed in the
     order they are defined. Local customizations and locally preferred
     exceptions to the default policies as defined in default.action (which you
     will most probably want to define sooner or later) are probably best
     applied in user.action, where you can preserve them across upgrades.
     standard.action is for Privoxy's internal use.
-   
+
     There is also a web based editor that can be accessed from http://
     config.privoxy.org/show-status (Shortcut: http://p.p/show-status) for the
     various actions files.
     There is also a web based editor that can be accessed from http://
     config.privoxy.org/show-status (Shortcut: http://p.p/show-status) for the
     various actions files.
-   
+
   * default.filter (the filter file) can be used to re-write the raw page
     content, including viewable text as well as embedded HTML and JavaScript,
     and whatever else lurks on any given web page. The filtering jobs are only
     pre-defined here; whether to apply them or not is up to the actions files.
   * default.filter (the filter file) can be used to re-write the raw page
     content, including viewable text as well as embedded HTML and JavaScript,
     and whatever else lurks on any given web page. The filtering jobs are only
     pre-defined here; whether to apply them or not is up to the actions files.
-   
+    Only one filter file may be defined.
+
 All files use the "#" character to denote a comment (the rest of the line will
 be ignored) and understand line continuation through placing a backslash ("\")
 as the very last character in a line. If the # is preceded by a backslash, it
 All files use the "#" character to denote a comment (the rest of the line will
 be ignored) and understand line continuation through placing a backslash ("\")
 as the very last character in a line. If the # is preceded by a backslash, it
@@ -917,11 +924,6 @@ however, that it may take one or two additional requests for the change to take
 effect. When changing the listening address of Privoxy, these "wake up"
 requests must obviously be sent to the old listening address.
 
 effect. When changing the listening address of Privoxy, these "wake up"
 requests must obviously be sent to the old listening address.
 
-While under development, the configuration content is subject to change. The
-below documentation may not be accurate by the time you read this. Also, what
-constitutes a "default" setting, may change, so please check all your
-configuration files on important issues.
-
 -------------------------------------------------------------------------------
 
 7. The Main Configuration File
 -------------------------------------------------------------------------------
 
 7. The Main Configuration File
@@ -960,229 +962,239 @@ files and actions files.
 7.1.1. confdir
 
 Specifies:
 7.1.1. confdir
 
 Specifies:
-   
+
     The directory where the other configuration files are located
     The directory where the other configuration files are located
-   
+
 Type of value:
 Type of value:
-   
+
     Path name
     Path name
-   
+
 Default value:
 Default value:
-   
+
     /etc/privoxy (Unix) or Privoxy installation dir (Windows)
     /etc/privoxy (Unix) or Privoxy installation dir (Windows)
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Mandatory
     Mandatory
-   
+
 Notes:
 Notes:
-   
+
     No trailing "/", please
     No trailing "/", please
-   
+
     When development goes modular and multi-user, the blocker, filter, and
     per-user config will be stored in subdirectories of "confdir". For now, the
     configuration directory structure is flat, except for confdir/templates,
     where the HTML templates for CGI output reside (e.g. Privoxy's 404 error
     page).
     When development goes modular and multi-user, the blocker, filter, and
     per-user config will be stored in subdirectories of "confdir". For now, the
     configuration directory structure is flat, except for confdir/templates,
     where the HTML templates for CGI output reside (e.g. Privoxy's 404 error
     page).
-   
+
 -------------------------------------------------------------------------------
 
 7.1.2. logdir
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.1.2. logdir
 
 Specifies:
-   
+
     The directory where all logging takes place (i.e. where logfile and jarfile
     are located)
     The directory where all logging takes place (i.e. where logfile and jarfile
     are located)
-   
+
 Type of value:
 Type of value:
-   
+
     Path name
     Path name
-   
+
 Default value:
 Default value:
-   
+
     /var/log/privoxy (Unix) or Privoxy installation dir (Windows)
     /var/log/privoxy (Unix) or Privoxy installation dir (Windows)
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Mandatory
     Mandatory
-   
+
 Notes:
 Notes:
-   
+
     No trailing "/", please
     No trailing "/", please
-   
+
 -------------------------------------------------------------------------------
 
 7.1.3. actionsfile
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.1.3. actionsfile
 
 Specifies:
-   
+
     The actions file(s) to use
     The actions file(s) to use
-   
+
 Type of value:
 Type of value:
-   
+
     File name, relative to confdir, without the .action suffix
     File name, relative to confdir, without the .action suffix
-   
+
 Default values:
 Default values:
-   
+
       standard     # Internal purposes, no editing recommended
       standard     # Internal purposes, no editing recommended
-                                                              
-      default      # Main actions file                        
-                                                              
-      user         # User customizations                      
-   
+
+      default      # Main actions file
+
+      user         # User customizations
+
 Effect if unset:
 Effect if unset:
-   
+
     No actions are taken at all. Simple neutral proxying.
     No actions are taken at all. Simple neutral proxying.
-   
+
 Notes:
 Notes:
-   
+
     Multiple actionsfile lines are permitted, and are in fact recommended!
     Multiple actionsfile lines are permitted, and are in fact recommended!
-   
+
     The default values include standard.action, which is used for internal
     purposes and should be loaded, default.action, which is the "main" actions
     file maintained by the developers, and user.action, where you can make your
     personal additions.
     The default values include standard.action, which is used for internal
     purposes and should be loaded, default.action, which is the "main" actions
     file maintained by the developers, and user.action, where you can make your
     personal additions.
-   
+
     Actions files are where all the per site and per URL configuration is done
     for ad blocking, cookie management, privacy considerations, etc. There is
     no point in using Privoxy without at least one actions file.
     Actions files are where all the per site and per URL configuration is done
     for ad blocking, cookie management, privacy considerations, etc. There is
     no point in using Privoxy without at least one actions file.
-   
+
 -------------------------------------------------------------------------------
 
 7.1.4. filterfile
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.1.4. filterfile
 
 Specifies:
-   
+
     The filter file to use
     The filter file to use
-   
+
 Type of value:
 Type of value:
-   
+
     File name, relative to confdir
     File name, relative to confdir
-   
+
 Default value:
 Default value:
-   
+
     default.filter (Unix) or default.filter.txt (Windows)
     default.filter (Unix) or default.filter.txt (Windows)
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     No textual content filtering takes place, i.e. all +filter{name} actions in
     the actions files are turned neutral.
     No textual content filtering takes place, i.e. all +filter{name} actions in
     the actions files are turned neutral.
-   
+
 Notes:
 Notes:
-   
+
     The filter file contains content modification rules that use regular
     expressions. These rules permit powerful changes on the content of Web
     pages, e.g., you could disable your favorite JavaScript annoyances,
     re-write the actual displayed text, or just have some fun replacing
     "Microsoft" with "MicroSuck" wherever it appears on a Web page.
     The filter file contains content modification rules that use regular
     expressions. These rules permit powerful changes on the content of Web
     pages, e.g., you could disable your favorite JavaScript annoyances,
     re-write the actual displayed text, or just have some fun replacing
     "Microsoft" with "MicroSuck" wherever it appears on a Web page.
-   
+
     The +filter{name} actions rely on the relevant filter (name) to be defined
     in the filter file!
     The +filter{name} actions rely on the relevant filter (name) to be defined
     in the filter file!
-   
+
     A pre-defined filter file called default.filter that contains a bunch of
     handy filters for common problems is included in the distribution. See the
     section on the filter action for a list.
     A pre-defined filter file called default.filter that contains a bunch of
     handy filters for common problems is included in the distribution. See the
     section on the filter action for a list.
-   
+
 -------------------------------------------------------------------------------
 
 7.1.5. logfile
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.1.5. logfile
 
 Specifies:
-   
+
     The log file to use
     The log file to use
-   
+
 Type of value:
 Type of value:
-   
+
     File name, relative to logdir
     File name, relative to logdir
-   
+
 Default value:
 Default value:
-   
+
     logfile (Unix) or privoxy.log (Windows)
     logfile (Unix) or privoxy.log (Windows)
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     No log file is used, all log messages go to the console (STDERR).
     No log file is used, all log messages go to the console (STDERR).
-   
+
 Notes:
 Notes:
-   
-    The windows version will additionally log to the console.
-   
+
     The logfile is where all logging and error messages are written. The level
     of detail and number of messages are set with the debug option (see below).
     The logfile can be useful for tracking down a problem with Privoxy (e.g.,
     it's not blocking an ad you think it should block) but in most cases you
     probably will never look at it.
     The logfile is where all logging and error messages are written. The level
     of detail and number of messages are set with the debug option (see below).
     The logfile can be useful for tracking down a problem with Privoxy (e.g.,
     it's not blocking an ad you think it should block) but in most cases you
     probably will never look at it.
-   
+
     Your logfile will grow indefinitely, and you will probably want to
     periodically remove it. On Unix systems, you can do this with a cron job
     (see "man cron"). For Red Hat, a logrotate script has been included.
     Your logfile will grow indefinitely, and you will probably want to
     periodically remove it. On Unix systems, you can do this with a cron job
     (see "man cron"). For Red Hat, a logrotate script has been included.
-   
+
     On SuSE Linux systems, you can place a line like "/var/log/privoxy.* +1024k
     644 nobody.nogroup" in /etc/logfiles, with the effect that cron.daily will
     automatically archive, gzip, and empty the log, when it exceeds 1M size.
     On SuSE Linux systems, you can place a line like "/var/log/privoxy.* +1024k
     644 nobody.nogroup" in /etc/logfiles, with the effect that cron.daily will
     automatically archive, gzip, and empty the log, when it exceeds 1M size.
-   
+
     Any log files must be writable by whatever user Privoxy is being run as
     (default on UNIX, user id is "privoxy").
     Any log files must be writable by whatever user Privoxy is being run as
     (default on UNIX, user id is "privoxy").
-   
+
 -------------------------------------------------------------------------------
 
 7.1.6. jarfile
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.1.6. jarfile
 
 Specifies:
-   
+
     The file to store intercepted cookies in
     The file to store intercepted cookies in
-   
+
 Type of value:
 Type of value:
-   
+
     File name, relative to logdir
     File name, relative to logdir
-   
+
 Default value:
 Default value:
-   
+
     jarfile (Unix) or privoxy.jar (Windows)
     jarfile (Unix) or privoxy.jar (Windows)
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Intercepted cookies are not stored at all.
     Intercepted cookies are not stored at all.
-   
+
 Notes:
 Notes:
-   
+
     The jarfile may grow to ridiculous sizes over time.
     The jarfile may grow to ridiculous sizes over time.
-   
+
 -------------------------------------------------------------------------------
 
 7.1.7. trustfile
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.1.7. trustfile
 
 Specifies:
-   
+
     The trust file to use
     The trust file to use
-   
+
 Type of value:
 Type of value:
-   
+
     File name, relative to confdir
     File name, relative to confdir
-   
+
 Default value:
 Default value:
-   
+
     Unset (commented out). When activated: trust (Unix) or trust.txt (Windows)
     Unset (commented out). When activated: trust (Unix) or trust.txt (Windows)
-   
+
 Effect if unset:
 Effect if unset:
-   
-    The whole trust mechanism is turned off.
-   
+
+    The entire trust mechanism is turned off.
+
 Notes:
 Notes:
-   
+
     The trust mechanism is an experimental feature for building white-lists and
     should be used with care. It is NOT recommended for the casual user.
     The trust mechanism is an experimental feature for building white-lists and
     should be used with care. It is NOT recommended for the casual user.
-   
+
     If you specify a trust file, Privoxy will only allow access to sites that
     If you specify a trust file, Privoxy will only allow access to sites that
-    are named in the trustfile. You can also mark sites as trusted referrers
-    (with +), with the effect that access to untrusted sites will be granted,
-    if a link from a trusted referrer was used. The link target will then be
-    added to the "trustfile". Possible applications include limiting Internet
-    access for children.
-   
-    If you use + operator in the trust file, it may grow considerably over
+    are specified in the trustfile. Sites can be listed in one of two ways:
+
+    Prepending a ~ character limits access to this site only (and any sub-paths
+    within this site), e.g. ~www.example.com.
+
+    Or, you can designate sites as trusted referrers, by prepending the name
+    with a + character. The effect is that access to untrusted sites will be
+    granted -- but only if a link from this trusted referrer was used. The link
+    target will then be added to the "trustfile" so that future, direct
+    accesses will be granted. Sites added via this mechanism do not become
+    trusted referrers themselves (i.e. they are added with a ~ designation).
+
+    If you use the + operator in the trust file, it may grow considerably over
     time.
     time.
-   
+
+    It is recommended that Privoxy be compiled with the --disable-force,
+    --disable-toggle and --disable-editor options, if this feature is to be
+    used.
+
+    Possible applications include limiting Internet access for children.
+
 -------------------------------------------------------------------------------
 
 7.2. Local Set-up Documentation
 -------------------------------------------------------------------------------
 
 7.2. Local Set-up Documentation
@@ -1196,40 +1208,52 @@ that, your policies, etc.
 7.2.1. user-manual
 
 Specifies:
 7.2.1. user-manual
 
 Specifies:
-   
+
     Location of the Privoxy User Manual.
     Location of the Privoxy User Manual.
-   
+
 Type of value:
 Type of value:
-   
+
     A fully qualified URI
     A fully qualified URI
-   
+
 Default value:
 Default value:
-   
+
     Unset
     Unset
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     http://www.privoxy.org/version/user-manual/ will be used, where version is
     the Privoxy version.
     http://www.privoxy.org/version/user-manual/ will be used, where version is
     the Privoxy version.
-   
+
 Notes:
 Notes:
-   
+
     The User Manual URI is used for help links from some of the internal CGI
     pages. The manual itself is normally packaged with the binary
     distributions, so you probably want to set this to a locally installed
     copy. For multi-user setups, you could provide a copy on a local webserver
     for all your users and use the corresponding URL here.
     The User Manual URI is used for help links from some of the internal CGI
     pages. The manual itself is normally packaged with the binary
     distributions, so you probably want to set this to a locally installed
     copy. For multi-user setups, you could provide a copy on a local webserver
     for all your users and use the corresponding URL here.
-   
+
     Examples:
     Examples:
-   
+
     Unix, in local filesystem:
     Unix, in local filesystem:
-   
-    user-manual  file:///usr/share/doc/privoxy-3.1.1/user-manual/      
-   
+
+      user-manual  file:///usr/share/doc/privoxy-3.0.3/user-manual/
+
+
+    Windows, in local filesystem, must use forward slash notation:
+
+      user-manual  file:/c:/some-dir/privoxy-3.0.3/user-manual/
+
+
+    Windows, UNC notation (with forward slashes):
+
+      user-manual  file://///some-server/some-path/privoxy-3.0.3/user-manual/
+
+
     Any platform, on local webserver (called "local-webserver"):
     Any platform, on local webserver (called "local-webserver"):
-   
-    user-manual  http://local-webserver/privoxy-user-manual/           
-   
+
+      user-manual  http://local-webserver/privoxy-user-manual/
+
+
     +-----------------------------------------------------------------+
     |                             Warning                             |
     |-----------------------------------------------------------------|
     +-----------------------------------------------------------------+
     |                             Warning                             |
     |-----------------------------------------------------------------|
@@ -1242,89 +1266,89 @@ Notes:
 7.2.2. trust-info-url
 
 Specifies:
 7.2.2. trust-info-url
 
 Specifies:
-   
+
     A URL to be displayed in the error page that users will see if access to an
     untrusted page is denied.
     A URL to be displayed in the error page that users will see if access to an
     untrusted page is denied.
-   
+
 Type of value:
 Type of value:
-   
+
     URL
     URL
-   
+
 Default value:
 Default value:
-   
+
     Two example URL are provided
     Two example URL are provided
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     No links are displayed on the "untrusted" error page.
     No links are displayed on the "untrusted" error page.
-   
+
 Notes:
 Notes:
-   
+
     The value of this option only matters if the experimental trust mechanism
     has been activated. (See trustfile above.)
     The value of this option only matters if the experimental trust mechanism
     has been activated. (See trustfile above.)
-   
+
     If you use the trust mechanism, it is a good idea to write up some on-line
     documentation about your trust policy and to specify the URL(s) here. Use
     multiple times for multiple URLs.
     If you use the trust mechanism, it is a good idea to write up some on-line
     documentation about your trust policy and to specify the URL(s) here. Use
     multiple times for multiple URLs.
-   
+
     The URL(s) should be added to the trustfile as well, so users don't end up
     locked out from the information on why they were locked out in the first
     place!
     The URL(s) should be added to the trustfile as well, so users don't end up
     locked out from the information on why they were locked out in the first
     place!
-   
+
 -------------------------------------------------------------------------------
 
 7.2.3. admin-address
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.2.3. admin-address
 
 Specifies:
-   
+
     An email address to reach the proxy administrator.
     An email address to reach the proxy administrator.
-   
+
 Type of value:
 Type of value:
-   
+
     Email address
     Email address
-   
+
 Default value:
 Default value:
-   
+
     Unset
     Unset
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     No email address is displayed on error pages and the CGI user interface.
     No email address is displayed on error pages and the CGI user interface.
-   
+
 Notes:
 Notes:
-   
+
     If both admin-address and proxy-info-url are unset, the whole "Local
     Privoxy Support" box on all generated pages will not be shown.
     If both admin-address and proxy-info-url are unset, the whole "Local
     Privoxy Support" box on all generated pages will not be shown.
-   
+
 -------------------------------------------------------------------------------
 
 7.2.4. proxy-info-url
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.2.4. proxy-info-url
 
 Specifies:
-   
+
     A URL to documentation about the local Privoxy setup, configuration or
     policies.
     A URL to documentation about the local Privoxy setup, configuration or
     policies.
-   
+
 Type of value:
 Type of value:
-   
+
     URL
     URL
-   
+
 Default value:
 Default value:
-   
+
     Unset
     Unset
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     No link to local documentation is displayed on error pages and the CGI user
     interface.
     No link to local documentation is displayed on error pages and the CGI user
     interface.
-   
+
 Notes:
 Notes:
-   
+
     If both admin-address and proxy-info-url are unset, the whole "Local
     Privoxy Support" box on all generated pages will not be shown.
     If both admin-address and proxy-info-url are unset, the whole "Local
     Privoxy Support" box on all generated pages will not be shown.
-   
+
     This URL shouldn't be blocked ;-)
     This URL shouldn't be blocked ;-)
-   
+
 -------------------------------------------------------------------------------
 
 7.3. Debugging
 -------------------------------------------------------------------------------
 
 7.3. Debugging
@@ -1338,81 +1362,82 @@ debugging.
 7.3.1. debug
 
 Specifies:
 7.3.1. debug
 
 Specifies:
-   
+
     Key values that determine what information gets logged to the logfile.
     Key values that determine what information gets logged to the logfile.
-   
+
 Type of value:
 Type of value:
-   
+
     Integer values
     Integer values
-   
+
 Default value:
 Default value:
-   
+
     12289 (i.e.: URLs plus informational and warning messages)
     12289 (i.e.: URLs plus informational and warning messages)
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Nothing gets logged.
     Nothing gets logged.
-   
+
 Notes:
 Notes:
-   
+
     The available debug levels are:
     The available debug levels are:
-   
-      debug         1 # show each GET/POST/CONNECT request             
-      debug         2 # show each connection status                    
-      debug         4 # show I/O status                                
-      debug         8 # show header parsing                            
-      debug        16 # log all data into the logfile                  
-      debug        32 # debug force feature                            
-      debug        64 # debug regular expression filter                
-      debug       128 # debug fast redirects                           
-      debug       256 # debug GIF de-animation                         
-      debug       512 # Common Log Format                              
-      debug      1024 # debug kill pop-ups                             
-      debug      2048 # CGI user interface                             
-      debug      4096 # Startup banner and warnings.                   
-      debug      8192 # Non-fatal errors                               
-   
+
+      debug         1 # show each GET/POST/CONNECT request
+      debug         2 # show each connection status
+      debug         4 # show I/O status
+      debug         8 # show header parsing
+      debug        16 # log all data into the logfile
+      debug        32 # debug force feature
+      debug        64 # debug regular expression filter
+      debug       128 # debug fast redirects
+      debug       256 # debug GIF de-animation
+      debug       512 # Common Log Format
+      debug      1024 # debug kill pop-ups
+      debug      2048 # CGI user interface
+      debug      4096 # Startup banner and warnings.
+      debug      8192 # Non-fatal errors
+
+
     To select multiple debug levels, you can either add them or use multiple
     debug lines.
     To select multiple debug levels, you can either add them or use multiple
     debug lines.
-   
+
     A debug level of 1 is informative because it will show you each request as
     it happens. 1, 4096 and 8192 are highly recommended so that you will notice
     when things go wrong. The other levels are probably only of interest if you
     are hunting down a specific problem. They can produce a hell of an output
     (especially 16).
     A debug level of 1 is informative because it will show you each request as
     it happens. 1, 4096 and 8192 are highly recommended so that you will notice
     when things go wrong. The other levels are probably only of interest if you
     are hunting down a specific problem. They can produce a hell of an output
     (especially 16).
-   
+
     The reporting of fatal errors (i.e. ones which crash Privoxy) is always on
     and cannot be disabled.
     The reporting of fatal errors (i.e. ones which crash Privoxy) is always on
     and cannot be disabled.
-   
+
     If you want to use CLF (Common Log Format), you should set "debug 512" ONLY
     and not enable anything else.
     If you want to use CLF (Common Log Format), you should set "debug 512" ONLY
     and not enable anything else.
-   
+
 -------------------------------------------------------------------------------
 
 7.3.2. single-threaded
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.3.2. single-threaded
 
 Specifies:
-   
+
     Whether to run only one server thread
     Whether to run only one server thread
-   
+
 Type of value:
 Type of value:
-   
+
     None
     None
-   
+
 Default value:
 Default value:
-   
+
     Unset
     Unset
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Multi-threaded (or, where unavailable: forked) operation, i.e. the ability
     to serve multiple requests simultaneously.
     Multi-threaded (or, where unavailable: forked) operation, i.e. the ability
     to serve multiple requests simultaneously.
-   
+
 Notes:
 Notes:
-   
+
     This option is only there for debug purposes and you should never need to
     use it. It will drastically reduce performance.
     This option is only there for debug purposes and you should never need to
     use it. It will drastically reduce performance.
-   
+
 -------------------------------------------------------------------------------
 
 7.4. Access Control and Security
 -------------------------------------------------------------------------------
 
 7.4. Access Control and Security
@@ -1425,256 +1450,260 @@ Privoxy's configuration.
 7.4.1. listen-address
 
 Specifies:
 7.4.1. listen-address
 
 Specifies:
-   
+
     The IP address and TCP port on which Privoxy will listen for client
     requests.
     The IP address and TCP port on which Privoxy will listen for client
     requests.
-   
+
 Type of value:
 Type of value:
-   
+
     [IP-Address]:Port
     [IP-Address]:Port
-   
+
 Default value:
 Default value:
-   
+
     127.0.0.1:8118
     127.0.0.1:8118
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Bind to 127.0.0.1 (localhost), port 8118. This is suitable and recommended
     for home users who run Privoxy on the same machine as their browser.
     Bind to 127.0.0.1 (localhost), port 8118. This is suitable and recommended
     for home users who run Privoxy on the same machine as their browser.
-   
+
 Notes:
 Notes:
-   
+
     You will need to configure your browser(s) to this proxy address and port.
     You will need to configure your browser(s) to this proxy address and port.
-   
+
     If you already have another service running on port 8118, or if you want to
     serve requests from other machines (e.g. on your local network) as well,
     you will need to override the default.
     If you already have another service running on port 8118, or if you want to
     serve requests from other machines (e.g. on your local network) as well,
     you will need to override the default.
-   
+
     If you leave out the IP address, Privoxy will bind to all interfaces
     (addresses) on your machine and may become reachable from the Internet. In
     that case, consider using access control lists (ACL's, see below), and/or a
     firewall.
     If you leave out the IP address, Privoxy will bind to all interfaces
     (addresses) on your machine and may become reachable from the Internet. In
     that case, consider using access control lists (ACL's, see below), and/or a
     firewall.
-   
-    If you open Privoxy to untrusted users, you will also want to turn off the 
+
+    If you open Privoxy to untrusted users, you will also want to turn off the
     enable-edit-actions and enable-remote-toggle options!
     enable-edit-actions and enable-remote-toggle options!
-   
+
 Example:
 Example:
-   
+
     Suppose you are running Privoxy on a machine which has the address
     192.168.0.1 on your local private network (192.168.0.0) and has another
     outside connection with a different address. You want it to serve requests
     from inside only:
     Suppose you are running Privoxy on a machine which has the address
     192.168.0.1 on your local private network (192.168.0.0) and has another
     outside connection with a different address. You want it to serve requests
     from inside only:
-   
-      listen-address  192.168.0.1:8118                                 
-   
+
+      listen-address  192.168.0.1:8118
+
+
 -------------------------------------------------------------------------------
 
 7.4.2. toggle
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.4.2. toggle
 
 Specifies:
-   
+
     Initial state of "toggle" status
     Initial state of "toggle" status
-   
+
 Type of value:
 Type of value:
-   
+
     1 or 0
     1 or 0
-   
+
 Default value:
 Default value:
-   
+
     1
     1
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Act as if toggled on
     Act as if toggled on
-   
+
 Notes:
 Notes:
-   
+
     If set to 0, Privoxy will start in "toggled off" mode, i.e. behave like a
     normal, content-neutral proxy where all ad blocking, filtering, etc are
     disabled. See enable-remote-toggle below. This is not really useful
     anymore, since toggling is much easier via the web interface than via
     editing the conf file.
     If set to 0, Privoxy will start in "toggled off" mode, i.e. behave like a
     normal, content-neutral proxy where all ad blocking, filtering, etc are
     disabled. See enable-remote-toggle below. This is not really useful
     anymore, since toggling is much easier via the web interface than via
     editing the conf file.
-   
+
     The windows version will only display the toggle icon in the system tray if
     this option is present.
     The windows version will only display the toggle icon in the system tray if
     this option is present.
-   
+
 -------------------------------------------------------------------------------
 
 7.4.3. enable-remote-toggle
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.4.3. enable-remote-toggle
 
 Specifies:
-   
+
     Whether or not the web-based toggle feature may be used
     Whether or not the web-based toggle feature may be used
-   
+
 Type of value:
 Type of value:
-   
+
     0 or 1
     0 or 1
-   
+
 Default value:
 Default value:
-   
+
     1
     1
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     The web-based toggle feature is disabled.
     The web-based toggle feature is disabled.
-   
+
 Notes:
 Notes:
-   
+
     When toggled off, Privoxy acts like a normal, content-neutral proxy, i.e.
     it acts as if none of the actions applied to any URL.
     When toggled off, Privoxy acts like a normal, content-neutral proxy, i.e.
     it acts as if none of the actions applied to any URL.
-   
+
     For the time being, access to the toggle feature can not be controlled
     separately by "ACLs" or HTTP authentication, so that everybody who can
     access Privoxy (see "ACLs" and listen-address above) can toggle it for all
     users. So this option is not recommended for multi-user environments with
     untrusted users.
     For the time being, access to the toggle feature can not be controlled
     separately by "ACLs" or HTTP authentication, so that everybody who can
     access Privoxy (see "ACLs" and listen-address above) can toggle it for all
     users. So this option is not recommended for multi-user environments with
     untrusted users.
-   
+
     Note that you must have compiled Privoxy with support for this feature,
     otherwise this option has no effect.
     Note that you must have compiled Privoxy with support for this feature,
     otherwise this option has no effect.
-   
+
 -------------------------------------------------------------------------------
 
 7.4.4. enable-edit-actions
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.4.4. enable-edit-actions
 
 Specifies:
-   
+
     Whether or not the web-based actions file editor may be used
     Whether or not the web-based actions file editor may be used
-   
+
 Type of value:
 Type of value:
-   
+
     0 or 1
     0 or 1
-   
+
 Default value:
 Default value:
-   
+
     1
     1
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     The web-based actions file editor is disabled.
     The web-based actions file editor is disabled.
-   
+
 Notes:
 Notes:
-   
+
     For the time being, access to the editor can not be controlled separately
     by "ACLs" or HTTP authentication, so that everybody who can access Privoxy
     (see "ACLs" and listen-address above) can modify its configuration for all
     users. So this option is not recommended for multi-user environments with
     untrusted users.
     For the time being, access to the editor can not be controlled separately
     by "ACLs" or HTTP authentication, so that everybody who can access Privoxy
     (see "ACLs" and listen-address above) can modify its configuration for all
     users. So this option is not recommended for multi-user environments with
     untrusted users.
-   
+
     Note that you must have compiled Privoxy with support for this feature,
     otherwise this option has no effect.
     Note that you must have compiled Privoxy with support for this feature,
     otherwise this option has no effect.
-   
+
 -------------------------------------------------------------------------------
 
 7.4.5. ACLs: permit-access and deny-access
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.4.5. ACLs: permit-access and deny-access
 
 Specifies:
-   
+
     Who can access what.
     Who can access what.
-   
+
 Type of value:
 Type of value:
-   
+
     src_addr[/src_masklen] [dst_addr[/dst_masklen]]
     src_addr[/src_masklen] [dst_addr[/dst_masklen]]
-   
+
     Where src_addr and dst_addr are IP addresses in dotted decimal notation or
     valid DNS names, and src_masklen and dst_masklen are subnet masks in CIDR
     notation, i.e. integer values from 2 to 30 representing the length (in
     bits) of the network address. The masks and the whole destination part are
     optional.
     Where src_addr and dst_addr are IP addresses in dotted decimal notation or
     valid DNS names, and src_masklen and dst_masklen are subnet masks in CIDR
     notation, i.e. integer values from 2 to 30 representing the length (in
     bits) of the network address. The masks and the whole destination part are
     optional.
-   
+
 Default value:
 Default value:
-   
+
     Unset
     Unset
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Don't restrict access further than implied by listen-address
     Don't restrict access further than implied by listen-address
-   
+
 Notes:
 Notes:
-   
+
     Access controls are included at the request of ISPs and systems
     administrators, and are not usually needed by individual users. For a
     typical home user, it will normally suffice to ensure that Privoxy only
     listens on the localhost (127.0.0.1) or internal (home) network address by
     means of the listen-address option.
     Access controls are included at the request of ISPs and systems
     administrators, and are not usually needed by individual users. For a
     typical home user, it will normally suffice to ensure that Privoxy only
     listens on the localhost (127.0.0.1) or internal (home) network address by
     means of the listen-address option.
-   
+
     Please see the warnings in the FAQ that this proxy is not intended to be a
     substitute for a firewall or to encourage anyone to defer addressing basic
     security weaknesses.
     Please see the warnings in the FAQ that this proxy is not intended to be a
     substitute for a firewall or to encourage anyone to defer addressing basic
     security weaknesses.
-   
+
     Multiple ACL lines are OK. If any ACLs are specified, then the Privoxy
     talks only to IP addresses that match at least one permit-access line and
     don't match any subsequent deny-access line. In other words, the last match
     wins, with the default being deny-access.
     Multiple ACL lines are OK. If any ACLs are specified, then the Privoxy
     talks only to IP addresses that match at least one permit-access line and
     don't match any subsequent deny-access line. In other words, the last match
     wins, with the default being deny-access.
-   
+
     If Privoxy is using a forwarder (see forward below) for a particular
     destination URL, the dst_addr that is examined is the address of the
     forwarder and NOT the address of the ultimate target. This is necessary
     because it may be impossible for the local Privoxy to determine the IP
     address of the ultimate target (that's often what gateways are used for).
     If Privoxy is using a forwarder (see forward below) for a particular
     destination URL, the dst_addr that is examined is the address of the
     forwarder and NOT the address of the ultimate target. This is necessary
     because it may be impossible for the local Privoxy to determine the IP
     address of the ultimate target (that's often what gateways are used for).
-   
+
     You should prefer using IP addresses over DNS names, because the address
     lookups take time. All DNS names must resolve! You can not use domain
     patterns like "*.org" or partial domain names. If a DNS name resolves to
     multiple IP addresses, only the first one is used.
     You should prefer using IP addresses over DNS names, because the address
     lookups take time. All DNS names must resolve! You can not use domain
     patterns like "*.org" or partial domain names. If a DNS name resolves to
     multiple IP addresses, only the first one is used.
-   
+
     Denying access to particular sites by ACL may have undesired side effects
     if the site in question is hosted on a machine which also hosts other
     sites.
     Denying access to particular sites by ACL may have undesired side effects
     if the site in question is hosted on a machine which also hosts other
     sites.
-   
+
 Examples:
 Examples:
-   
+
     Explicitly define the default behavior if no ACL and listen-address are
     set: "localhost" is OK. The absence of a dst_addr implies that all
     destination addresses are OK:
     Explicitly define the default behavior if no ACL and listen-address are
     set: "localhost" is OK. The absence of a dst_addr implies that all
     destination addresses are OK:
-   
-      permit-access  localhost                                         
-   
+
+      permit-access  localhost
+
+
     Allow any host on the same class C subnet as www.privoxy.org access to
     nothing but www.example.com:
     Allow any host on the same class C subnet as www.privoxy.org access to
     nothing but www.example.com:
-   
-      permit-access  www.privoxy.org/24 www.example.com/32             
-   
+
+      permit-access  www.privoxy.org/24 www.example.com/32
+
+
     Allow access from any host on the 26-bit subnet 192.168.45.64 to anywhere,
     with the exception that 192.168.45.73 may not access
     www.dirty-stuff.example.com:
     Allow access from any host on the 26-bit subnet 192.168.45.64 to anywhere,
     with the exception that 192.168.45.73 may not access
     www.dirty-stuff.example.com:
-   
-      permit-access  192.168.45.64/26                                  
-      deny-access    192.168.45.73    www.dirty-stuff.example.com      
-   
+
+      permit-access  192.168.45.64/26
+      deny-access    192.168.45.73    www.dirty-stuff.example.com
+
+
 -------------------------------------------------------------------------------
 
 7.4.6. buffer-limit
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.4.6. buffer-limit
 
 Specifies:
-   
+
     Maximum size of the buffer for content filtering.
     Maximum size of the buffer for content filtering.
-   
+
 Type of value:
 Type of value:
-   
+
     Size in Kbytes
     Size in Kbytes
-   
+
 Default value:
 Default value:
-   
+
     4096
     4096
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Use a 4MB (4096 KB) limit.
     Use a 4MB (4096 KB) limit.
-   
+
 Notes:
 Notes:
-   
+
     For content filtering, i.e. the +filter and +deanimate-gif actions, it is
     necessary that Privoxy buffers the entire document body. This can be
     potentially dangerous, since a server could just keep sending data
     indefinitely and wait for your RAM to exhaust -- with nasty consequences.
     Hence this option.
     For content filtering, i.e. the +filter and +deanimate-gif actions, it is
     necessary that Privoxy buffers the entire document body. This can be
     potentially dangerous, since a server could just keep sending data
     indefinitely and wait for your RAM to exhaust -- with nasty consequences.
     Hence this option.
-   
+
     When a document buffer size reaches the buffer-limit, it is flushed to the
     client unfiltered and no further attempt to filter the rest of the document
     is made. Remember that there may be multiple threads running, which might
     require up to buffer-limit Kbytes each, unless you have enabled
     "single-threaded" above.
     When a document buffer size reaches the buffer-limit, it is flushed to the
     client unfiltered and no further attempt to filter the rest of the document
     is made. Remember that there may be multiple threads running, which might
     require up to buffer-limit Kbytes each, unless you have enabled
     "single-threaded" above.
-   
+
 -------------------------------------------------------------------------------
 
 7.5. Forwarding
 -------------------------------------------------------------------------------
 
 7.5. Forwarding
@@ -1695,105 +1724,109 @@ Also specified here are SOCKS proxies. Privoxy supports the SOCKS 4 and SOCKS
 7.5.1. forward
 
 Specifies:
 7.5.1. forward
 
 Specifies:
-   
+
     To which parent HTTP proxy specific requests should be routed.
     To which parent HTTP proxy specific requests should be routed.
-   
+
 Type of value:
 Type of value:
-   
+
     target_pattern http_parent[:port]
     target_pattern http_parent[:port]
-   
+
     where target_pattern is a URL pattern that specifies to which requests
     (i.e. URLs) this forward rule shall apply. Use / to denote "all URLs".
     http_parent[:port] is the DNS name or IP address of the parent HTTP proxy
     through which the requests should be forwarded, optionally followed by its
     listening port (default: 8080). Use a single dot (.) to denote "no
     forwarding".
     where target_pattern is a URL pattern that specifies to which requests
     (i.e. URLs) this forward rule shall apply. Use / to denote "all URLs".
     http_parent[:port] is the DNS name or IP address of the parent HTTP proxy
     through which the requests should be forwarded, optionally followed by its
     listening port (default: 8080). Use a single dot (.) to denote "no
     forwarding".
-   
+
 Default value:
 Default value:
-   
+
     Unset
     Unset
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Don't use parent HTTP proxies.
     Don't use parent HTTP proxies.
-   
+
 Notes:
 Notes:
-   
+
     If http_parent is ".", then requests are not forwarded to another HTTP
     proxy but are made directly to the web servers.
     If http_parent is ".", then requests are not forwarded to another HTTP
     proxy but are made directly to the web servers.
-   
+
     Multiple lines are OK, they are checked in sequence, and the last match
     wins.
     Multiple lines are OK, they are checked in sequence, and the last match
     wins.
-   
+
 Examples:
 Examples:
-   
+
     Everything goes to an example anonymizing proxy, except SSL on port 443
     (which it doesn't handle):
     Everything goes to an example anonymizing proxy, except SSL on port 443
     (which it doesn't handle):
-   
-      forward   /      anon-proxy.example.org:8080                     
-      forward   :443   .                                               
-   
+
+      forward   /      anon-proxy.example.org:8080
+      forward   :443   .
+
+
     Everything goes to our example ISP's caching proxy, except for requests to
     that ISP's sites:
     Everything goes to our example ISP's caching proxy, except for requests to
     that ISP's sites:
-   
-      forward   /                  caching-proxy.example-isp.net:8000  
-      forward   .example-isp.net   .                                   
-   
+
+      forward   /                  caching-proxy.example-isp.net:8000
+      forward   .example-isp.net   .
+
+
 -------------------------------------------------------------------------------
 
 7.5.2. forward-socks4 and forward-socks4a
 
 Specifies:
 -------------------------------------------------------------------------------
 
 7.5.2. forward-socks4 and forward-socks4a
 
 Specifies:
-   
+
     Through which SOCKS proxy (and to which parent HTTP proxy) specific
     requests should be routed.
     Through which SOCKS proxy (and to which parent HTTP proxy) specific
     requests should be routed.
-   
+
 Type of value:
 Type of value:
-   
+
     target_pattern socks_proxy[:port] http_parent[:port]
     target_pattern socks_proxy[:port] http_parent[:port]
-   
+
     where target_pattern is a URL pattern that specifies to which requests
     (i.e. URLs) this forward rule shall apply. Use / to denote "all URLs".
     http_parent and socks_proxy are IP addresses in dotted decimal notation or
     valid DNS names (http_parent may be "." to denote "no HTTP forwarding"),
     and the optional port parameters are TCP ports, i.e. integer values from 1
     to 64535
     where target_pattern is a URL pattern that specifies to which requests
     (i.e. URLs) this forward rule shall apply. Use / to denote "all URLs".
     http_parent and socks_proxy are IP addresses in dotted decimal notation or
     valid DNS names (http_parent may be "." to denote "no HTTP forwarding"),
     and the optional port parameters are TCP ports, i.e. integer values from 1
     to 64535
-   
+
 Default value:
 Default value:
-   
+
     Unset
     Unset
-   
+
 Effect if unset:
 Effect if unset:
-   
+
     Don't use SOCKS proxies.
     Don't use SOCKS proxies.
-   
+
 Notes:
 Notes:
-   
+
     Multiple lines are OK, they are checked in sequence, and the last match
     wins.
     Multiple lines are OK, they are checked in sequence, and the last match
     wins.
-   
+
     The difference between forward-socks4 and forward-socks4a is that in the
     SOCKS 4A protocol, the DNS resolution of the target hostname happens on the
     SOCKS server, while in SOCKS 4 it happens locally.
     The difference between forward-socks4 and forward-socks4a is that in the
     SOCKS 4A protocol, the DNS resolution of the target hostname happens on the
     SOCKS server, while in SOCKS 4 it happens locally.
-   
+
     If http_parent is ".", then requests are not forwarded to another HTTP
     proxy but are made (HTTP-wise) directly to the web servers, albeit through
     a SOCKS proxy.
     If http_parent is ".", then requests are not forwarded to another HTTP
     proxy but are made (HTTP-wise) directly to the web servers, albeit through
     a SOCKS proxy.
-   
+
 Examples:
 Examples:
-   
+
     From the company example.com, direct connections are made to all "internal"
     domains, but everything outbound goes through their ISP's proxy by way of
     example.com's corporate SOCKS 4A gateway to the Internet.
     From the company example.com, direct connections are made to all "internal"
     domains, but everything outbound goes through their ISP's proxy by way of
     example.com's corporate SOCKS 4A gateway to the Internet.
-   
-      forward-socks4a   /              socks-gw.example.com:1080  www-cache.example-isp.net:8080 
-      forward           .example.com   .                                                         
-   
+
+      forward-socks4a   /              socks-gw.example.com:1080  www-cache.example-isp.net:8080
+      forward           .example.com   .
+
+
     A rule that uses a SOCKS 4 gateway for all destinations but no HTTP parent
     looks like this:
     A rule that uses a SOCKS 4 gateway for all destinations but no HTTP parent
     looks like this:
-   
-      forward-socks4   /               socks-gw.example.com:1080  .    
-   
+
+      forward-socks4   /               socks-gw.example.com:1080  .
+
+
 -------------------------------------------------------------------------------
 
 7.5.3. Advanced Forwarding Examples
 -------------------------------------------------------------------------------
 
 7.5.3. Advanced Forwarding Examples
@@ -1809,13 +1842,15 @@ look like this:
 
 host-a:
 
 
 host-a:
 
-  forward    /           .                                                     
-  forward    .isp-b.net  host-b:8118                                           
+  forward    /           .
+  forward    .isp-b.net  host-b:8118
+
 
 host-b:
 
 
 host-b:
 
-  forward    /           .                                                     
-  forward    .isp-a.net  host-a:8118                                           
+  forward    /           .
+  forward    .isp-a.net  host-a:8118
+
 
 Now, your users can set their browser's proxy to use either host-a or host-b
 and be able to browse the internal content of both isp-a and isp-b.
 
 Now, your users can set their browser's proxy to use either host-a or host-b
 and be able to browse the internal content of both isp-a and isp-b.
@@ -1826,17 +1861,18 @@ squid -> privoxy is the recommended way.
 Assuming that Privoxy and squid run on the same box, your squid configuration
 could then look like this:
 
 Assuming that Privoxy and squid run on the same box, your squid configuration
 could then look like this:
 
-  # Define Privoxy as parent proxy (without ICP)                               
-  cache_peer 127.0.0.1 parent 8118 7 no-query                                  
-                                                                               
-  # Define ACL for protocol FTP                                                
-  acl ftp proto FTP                                                            
-                                                                               
-  # Do not forward FTP requests to Privoxy                                     
-  always_direct allow ftp                                                      
-                                                                               
-  # Forward all the rest to Privoxy                                            
-  never_direct allow all                                                       
+  # Define Privoxy as parent proxy (without ICP)
+  cache_peer 127.0.0.1 parent 8118 7 no-query
+
+  # Define ACL for protocol FTP
+  acl ftp proto FTP
+
+  # Do not forward FTP requests to Privoxy
+  always_direct allow ftp
+
+  # Forward all the rest to Privoxy
+  never_direct allow all
+
 
 You would then need to change your browser's proxy settings to squid's address
 and port. Squid normally uses port 3128. If unsure consult http_port in
 
 You would then need to change your browser's proxy settings to squid's address
 and port. Squid normally uses port 3128. If unsure consult http_port in
@@ -1845,8 +1881,9 @@ squid.conf.
 You could just as well decide to only forward requests for Windows executables
 through a virus-scanning parent proxy, say, on antivir.example.com, port 8010:
 
 You could just as well decide to only forward requests for Windows executables
 through a virus-scanning parent proxy, say, on antivir.example.com, port 8010:
 
-  forward   /                          .                                       
-  forward   /.*\.(exe|com|dll|zip)$    antivir.example.com:8010                
+  forward   /                          .
+  forward   /.*\.(exe|com|dll|zip)$    antivir.example.com:8010
+
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -1923,29 +1960,67 @@ console.
 The actions files are used to define what actions Privoxy takes for which URLs,
 and thus determine how ad images, cookies and various other aspects of HTTP
 content and transactions are handled, and on which sites (or even parts
 The actions files are used to define what actions Privoxy takes for which URLs,
 and thus determine how ad images, cookies and various other aspects of HTTP
 content and transactions are handled, and on which sites (or even parts
-thereof). There are three such files included with Privoxy (as of version
-2.9.15), with differing purposes:
+thereof). There are three such files included with Privoxy with differing
+purposes:
 
   * default.action - is the primary action file that sets the initial values
     for all actions. It is intended to provide a base level of functionality
     for Privoxy's array of features. So it is a set of broad rules that should
     work reasonably well for users everywhere. This is the file that the
     developers are keeping updated, and making available to users.
 
   * default.action - is the primary action file that sets the initial values
     for all actions. It is intended to provide a base level of functionality
     for Privoxy's array of features. So it is a set of broad rules that should
     work reasonably well for users everywhere. This is the file that the
     developers are keeping updated, and making available to users.
-   
+
   * user.action - is intended to be for local site preferences and exceptions.
     As an example, if your ISP or your bank has specific requirements, and need
     special handling, this kind of thing should go here. This file will not be
     upgraded.
   * user.action - is intended to be for local site preferences and exceptions.
     As an example, if your ISP or your bank has specific requirements, and need
     special handling, this kind of thing should go here. This file will not be
     upgraded.
-   
+
   * standard.action - is used by the web based editor, to set various
     pre-defined sets of rules for the default actions section in
     default.action. These have increasing levels of aggressiveness and have no
     influence on your browsing unless you select them explicitly in the editor.
     It is not recommend to edit this file.
   * standard.action - is used by the web based editor, to set various
     pre-defined sets of rules for the default actions section in
     default.action. These have increasing levels of aggressiveness and have no
     influence on your browsing unless you select them explicitly in the editor.
     It is not recommend to edit this file.
-   
+
+    The default profiles, and their associated actions, as pre-defined in
+    standard.action are:
+
+    Table 1. Default Configurations
+
+    +------------------------------------------------------------+
+    |       Feature       | Cautious  |   Medium   |Adventuresome|
+    |---------------------+-----------+------------+-------------|
+    |Ad-blocking by URL   |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Ad-filtering by size |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |GIF de-animation     |no         |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Referer forging      |no         |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Cookie handling      |none       |session-only|kill         |
+    |---------------------+-----------+------------+-------------|
+    |Pop-up killing       |unsolicited|unsolicited |all          |
+    |---------------------+-----------+------------+-------------|
+    |Fast redirects       |no         |no          |yes          |
+    |---------------------+-----------+------------+-------------|
+    |HTML taming          |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |JavaScript taming    |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Web-bug killing      |yes        |yes         |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Fun text replacements|no         |no          |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Image tag reordering |no         |no          |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Ad-filtering by link |no         |no          |yes          |
+    |---------------------+-----------+------------+-------------|
+    |Demoronizer          |no         |no          |yes          |
+    +------------------------------------------------------------+
+
 The list of actions files to be used are defined in the main configuration
 The list of actions files to be used are defined in the main configuration
-file, and are processed in the order they are defined. The content of these can
-all be viewed and edited from http://config.privoxy.org/show-status.
+file, and are processed in the order they are defined (e.g. default.action is
+typically process before user.action). The content of these can all be viewed
+and edited from http://config.privoxy.org/show-status.
 
 An actions file typically has multiple sections. If you want to use "aliases"
 in an actions file, you have to place the (optional) alias section at the top
 
 An actions file typically has multiple sections. If you want to use "aliases"
 in an actions file, you have to place the (optional) alias section at the top
@@ -1972,10 +2047,10 @@ some sites unusable that rely on these techniques to work properly. Finding the
 right mix of actions is not always easy and certainly a matter of personal
 taste. In general, it can be said that the more "aggressive" your default
 settings (in the top section of the actions file) are, the more exceptions for
 right mix of actions is not always easy and certainly a matter of personal
 taste. In general, it can be said that the more "aggressive" your default
 settings (in the top section of the actions file) are, the more exceptions for
-"trusted" sites you will have to make later. If, for example, you want to kill
-popup windows per default, you'll have to make exceptions from that rule for
-sites that you regularly use and that require popups for actually useful
-content, like maybe your bank, favorite shop, or newspaper.
+"trusted" sites you will have to make later. If, for example, you want to
+crunch all cookies per default, you'll have to make exceptions from that rule
+for sites that you regularly use and that require cookies for actually useful
+puposes, like maybe your bank, favorite shop, or newspaper.
 
 We have tried to provide you with reasonable rules to start from in the
 distribution actions files. But there is no general rule of thumb on these
 
 We have tried to provide you with reasonable rules to start from in the
 distribution actions files. But there is no general rule of thumb on these
@@ -1991,7 +2066,9 @@ The easiest way to edit the actions files is with a browser by using our
 browser-based editor, which can be reached from http://config.privoxy.org/
 show-status. The editor allows both fine-grained control over every single
 feature on a per-URL basis, and easy choosing from wholesale sets of defaults
 browser-based editor, which can be reached from http://config.privoxy.org/
 show-status. The editor allows both fine-grained control over every single
 feature on a per-URL basis, and easy choosing from wholesale sets of defaults
-like "Cautious", "Medium" or "Advanced".
+like "Cautious", "Medium" or "Adventuresome". Warning: the "Adventuresome"
+setting is not only more aggressive, but includes settings that are fun and
+subversive, and which some may find of dubious merit!
 
 If you prefer plain text editing to GUIs, you can of course also directly edit
 the the actions files. Look at default.action which is richly commented.
 
 If you prefer plain text editing to GUIs, you can of course also directly edit
 the the actions files. Look at default.action which is richly commented.
@@ -2025,33 +2102,41 @@ More detail on this is provided in the Appendix, Anatomy of an Action.
 
 8.4. Patterns
 
 
 8.4. Patterns
 
-Generally, a pattern has the form <domain>/<path>, where both the <domain> and
-<path> are optional. (This is why the pattern / matches all URLs).
+As mentioned, Privoxy uses "patterns" to determine what actions might apply to
+which sites and pages your browser attempts to access. These "patterns" use
+wild card type pattern matching to achieve a high degree of flexibility. This
+allows one expression to be expanded and potentially match against many similar
+patterns.
+
+Generally, a Privoxy pattern has the form <domain>/<path>, where both the
+<domain> and <path> are optional. (This is why the special / pattern matches
+all URLs). Note that the protocol portion of the URL pattern (e.g. http://)
+should not be included in the pattern. This is assumed already!
 
 www.example.com/
 
 www.example.com/
-   
+
     is a domain-only pattern and will match any request to www.example.com,
     regardless of which document on that server is requested.
     is a domain-only pattern and will match any request to www.example.com,
     regardless of which document on that server is requested.
-   
+
 www.example.com
 www.example.com
-   
+
     means exactly the same. For domain-only patterns, the trailing / may be
     omitted.
     means exactly the same. For domain-only patterns, the trailing / may be
     omitted.
-   
+
 www.example.com/index.html
 www.example.com/index.html
-   
+
     matches only the single document /index.html on www.example.com.
     matches only the single document /index.html on www.example.com.
-   
+
 /index.html
 /index.html
-   
+
     matches the document /index.html, regardless of the domain, i.e. on any web
     server.
     matches the document /index.html, regardless of the domain, i.e. on any web
     server.
-   
+
 index.html
 index.html
-   
+
     matches nothing, since it would be interpreted as a domain name and there
     is no top-level domain called .html.
     matches nothing, since it would be interpreted as a domain name and there
     is no top-level domain called .html.
-   
+
 -------------------------------------------------------------------------------
 
 8.4.1. The Domain Pattern
 -------------------------------------------------------------------------------
 
 8.4.1. The Domain Pattern
@@ -2060,18 +2145,18 @@ The matching of the domain part offers some flexible options: if the domain
 starts or ends with a dot, it becomes unanchored at that end. For example:
 
 .example.com
 starts or ends with a dot, it becomes unanchored at that end. For example:
 
 .example.com
-   
+
     matches any domain that ENDS in .example.com
     matches any domain that ENDS in .example.com
-   
+
 www.
 www.
-   
+
     matches any domain that STARTS with www.
     matches any domain that STARTS with www.
-   
+
 .example.
 .example.
-   
+
     matches any domain that CONTAINS .example. (Correctly speaking: It matches
     any FQDN that contains example as a domain.)
     matches any domain that CONTAINS .example. (Correctly speaking: It matches
     any FQDN that contains example as a domain.)
-   
+
 Additionally, there are wild-cards that you can use in the domain names
 themselves. They work pretty similar to shell wild-cards: "*" stands for zero
 or more arbitrary characters, "?" stands for any single character, you can
 Additionally, there are wild-cards that you can use in the domain names
 themselves. They work pretty similar to shell wild-cards: "*" stands for zero
 or more arbitrary characters, "?" stands for any single character, you can
@@ -2079,23 +2164,23 @@ define character classes in square brackets and all of that can be freely
 mixed:
 
 ad*.example.com
 mixed:
 
 ad*.example.com
-   
+
     matches "adserver.example.com", "ads.example.com", etc but not
     "sfads.example.com"
     matches "adserver.example.com", "ads.example.com", etc but not
     "sfads.example.com"
-   
+
 *ad*.example.com
 *ad*.example.com
-   
+
     matches all of the above, and then some.
     matches all of the above, and then some.
-   
+
 .?pix.com
 .?pix.com
-   
+
     matches www.ipix.com, pictures.epix.com, a.b.c.d.e.upix.com etc.
     matches www.ipix.com, pictures.epix.com, a.b.c.d.e.upix.com etc.
-   
+
 www[1-9a-ez].example.c*
 www[1-9a-ez].example.c*
-   
+
     matches www1.example.com, www4.example.cc, wwwd.example.cy,
     wwwz.example.com etc., but not wwww.example.com.
     matches www1.example.com, www4.example.cc, wwwd.example.cy,
     wwwz.example.com etc., but not wwww.example.com.
-   
+
 -------------------------------------------------------------------------------
 
 8.4.2. The Path Pattern
 -------------------------------------------------------------------------------
 
 8.4.2. The Path Pattern
@@ -2127,7 +2212,7 @@ somewhere in an actions file. Actions are turned on if preceded with a "+", and
 turned off if preceded with a "-". So a +action means "do that action", e.g.
 +block means "please block URLs that match the following patterns", and -block
 means "don't block URLs that match the following patterns, even if +block
 turned off if preceded with a "-". So a +action means "do that action", e.g.
 +block means "please block URLs that match the following patterns", and -block
 means "don't block URLs that match the following patterns, even if +block
-previously applied." 
+previously applied."
 
 Again, actions are invoked by placing them on a line, enclosed in curly braces
 and separated by whitespace, like in {+some-action -some-other-action
 
 Again, actions are invoked by placing them on a line, enclosed in curly braces
 and separated by whitespace, like in {+some-action -some-other-action
@@ -2138,39 +2223,42 @@ a section of the actions file.
 There are three classes of actions:
 
   * Boolean, i.e the action can only be "enabled" or "disabled". Syntax:
 There are three classes of actions:
 
   * Boolean, i.e the action can only be "enabled" or "disabled". Syntax:
-   
-      +name        # enable action name                                
-      -name        # disable action name                               
-   
+
+      +name        # enable action name
+      -name        # disable action name
+
+
     Example: +block
     Example: +block
-   
+
   * Parameterized, where some value is required in order to enable this type of
     action. Syntax:
   * Parameterized, where some value is required in order to enable this type of
     action. Syntax:
-   
-      +name{param}  # enable action and set parameter to param,             
-                   # overwriting parameter from previous match if necessary 
-      -name         # disable action. The parameter can be omitted          
-   
+
+      +name{param}  # enable action and set parameter to param,
+                   # overwriting parameter from previous match if necessary
+      -name         # disable action. The parameter can be omitted
+
+
     Note that if the URL matches multiple positive forms of a parameterized
     action, the last match wins, i.e. the params from earlier matches are
     simply ignored.
     Note that if the URL matches multiple positive forms of a parameterized
     action, the last match wins, i.e. the params from earlier matches are
     simply ignored.
-   
+
     Example: +hide-user-agent{ Mozilla 1.0 }
     Example: +hide-user-agent{ Mozilla 1.0 }
-   
+
   * Multi-value. These look exactly like parameterized actions, but they behave
     differently: If the action applies multiple times to the same URL, but with
     different parameters, all the parameters from all matches are remembered.
     This is used for actions that can be executed for the same request
     repeatedly, like adding multiple headers, or filtering through multiple
     filters. Syntax:
   * Multi-value. These look exactly like parameterized actions, but they behave
     differently: If the action applies multiple times to the same URL, but with
     different parameters, all the parameters from all matches are remembered.
     This is used for actions that can be executed for the same request
     repeatedly, like adding multiple headers, or filtering through multiple
     filters. Syntax:
-   
-      +name{param}   # enable action and add param to the list of parameters                 
-      -name{param}   # remove the parameter param from the list of parameters                
-                    # If it was the last one left, disable the action.                       
+
+      +name{param}   # enable action and add param to the list of parameters
+      -name{param}   # remove the parameter param from the list of parameters
+                    # If it was the last one left, disable the action.
       -name          # disable this action completely and remove all parameters from the list
       -name          # disable this action completely and remove all parameters from the list
-   
+
+
     Examples: +add-header{X-Fun-Header: Some text} and +filter{html-annoyances}
     Examples: +add-header{X-Fun-Header: Some text} and +filter{html-annoyances}
-   
+
 If nothing is specified in any actions file, no "actions" are taken. So in this
 case Privoxy would just be a normal, non-blocking, non-anonymizing proxy. You
 must specifically enable the privacy and blocking features you need (although
 If nothing is specified in any actions file, no "actions" are taken. So in this
 case Privoxy would just be a normal, non-blocking, non-anonymizing proxy. You
 must specifically enable the privacy and blocking features you need (although
@@ -2191,57 +2279,58 @@ The list of valid Privoxy actions are:
 8.5.1. add-header
 
 Typical use:
 8.5.1. add-header
 
 Typical use:
-   
+
     Confuse log analysis, custom applications
     Confuse log analysis, custom applications
-   
+
 Effect:
 Effect:
-   
+
     Sends a user defined HTTP header to the web server.
     Sends a user defined HTTP header to the web server.
-   
+
 Type:
 Type:
-   
+
     Multi-value.
     Multi-value.
-   
+
 Parameter:
 Parameter:
-   
+
     Any string value is possible. Validity of the defined HTTP headers is not
     checked. It is recommended that you use the "X-" prefix for custom headers.
     Any string value is possible. Validity of the defined HTTP headers is not
     checked. It is recommended that you use the "X-" prefix for custom headers.
-   
+
 Notes:
 Notes:
-   
+
     This action may be specified multiple times, in order to define multiple
     headers. This is rarely needed for the typical user. If you don't know what
     "HTTP headers" are, you definitely don't need to worry about this one.
     This action may be specified multiple times, in order to define multiple
     headers. This is rarely needed for the typical user. If you don't know what
     "HTTP headers" are, you definitely don't need to worry about this one.
-   
+
 Example usage:
 Example usage:
-   
-    +add-header{X-User-Tracking: sucks}                                
-   
+
+    +add-header{X-User-Tracking: sucks}
+
+
 -------------------------------------------------------------------------------
 
 8.5.2. block
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.2. block
 
 Typical use:
-   
+
     Block ads or other obnoxious content
     Block ads or other obnoxious content
-   
+
 Effect:
 Effect:
-   
+
     Requests for URLs to which this action applies are blocked, i.e. the
     requests are not forwarded to the remote server, but answered locally with
     Requests for URLs to which this action applies are blocked, i.e. the
     requests are not forwarded to the remote server, but answered locally with
-    a substitute page or image, as determined by the handle-as-image and 
+    a substitute page or image, as determined by the handle-as-image and
     set-image-blocker actions.
     set-image-blocker actions.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     Privoxy sends a special "BLOCKED" page for requests to blocked pages. This
     page contains links to find out why the request was blocked, and a
     click-through to the blocked content (the latter only if compiled with the
     Privoxy sends a special "BLOCKED" page for requests to blocked pages. This
     page contains links to find out why the request was blocked, and a
     click-through to the blocked content (the latter only if compiled with the
@@ -2249,501 +2338,558 @@ Notes:
     space -- it displays full-blown if space allows, or miniaturized and
     text-only if loaded into a small frame or window. If you are using Privoxy
     right now, you can take a look at the "BLOCKED" page.
     space -- it displays full-blown if space allows, or miniaturized and
     text-only if loaded into a small frame or window. If you are using Privoxy
     right now, you can take a look at the "BLOCKED" page.
-   
+
     A very important exception occurs if both block and handle-as-image, apply
     A very important exception occurs if both block and handle-as-image, apply
-    to the same request: it will then be replaced by an image. If 
+    to the same request: it will then be replaced by an image. If
     set-image-blocker (see below) also applies, the type of image will be
     determined by its parameter, if not, the standard checkerboard pattern is
     sent.
     set-image-blocker (see below) also applies, the type of image will be
     determined by its parameter, if not, the standard checkerboard pattern is
     sent.
-   
+
     It is important to understand this process, in order to understand how
     Privoxy deals with ads and other unwanted content.
     It is important to understand this process, in order to understand how
     Privoxy deals with ads and other unwanted content.
-   
+
     The filter action can perform a very similar task, by "blocking" banner
     images and other content through rewriting the relevant URLs in the
     document's HTML source, so they don't get requested in the first place.
     Note that this is a totally different technique, and it's easy to confuse
     the two.
     The filter action can perform a very similar task, by "blocking" banner
     images and other content through rewriting the relevant URLs in the
     document's HTML source, so they don't get requested in the first place.
     Note that this is a totally different technique, and it's easy to confuse
     the two.
-   
+
 Example usage (section):
 Example usage (section):
-   
-    {+block}      # Block and replace with "blocked" page              
-    .nasty-stuff.example.com                                           
-                                                                       
-    {+block +handle-as-image} # Block and replace with image           
-    .ad.doubleclick.net                                                
-    .ads.r.us                                                          
-   
+
+    {+block}      # Block and replace with "blocked" page
+    .nasty-stuff.example.com
+
+    {+block +handle-as-image} # Block and replace with image
+    .ad.doubleclick.net
+    .ads.r.us
+
+
 -------------------------------------------------------------------------------
 
 8.5.3. crunch-incoming-cookies
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.3. crunch-incoming-cookies
 
 Typical use:
-   
+
     Prevent the web server from setting any cookies on your system
     Prevent the web server from setting any cookies on your system
-   
+
 Effect:
 Effect:
-   
+
     Deletes any "Set-Cookie:" HTTP headers from server replies.
     Deletes any "Set-Cookie:" HTTP headers from server replies.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     This action is only concerned with incoming cookies. For outgoing cookies,
     use crunch-outgoing-cookies. Use both to disable cookies completely.
     This action is only concerned with incoming cookies. For outgoing cookies,
     use crunch-outgoing-cookies. Use both to disable cookies completely.
-   
-    It makes no sense at all to use this action in conjunction with the 
+
+    It makes no sense at all to use this action in conjunction with the
     session-cookies-only action, since it would prevent the session cookies
     session-cookies-only action, since it would prevent the session cookies
-    from being set.
-   
+    from being set. See also filter-content-cookies.
+
 Example usage:
 Example usage:
-   
-    +crunch-incoming-cookies                                           
-   
+
+    +crunch-incoming-cookies
+
+
 -------------------------------------------------------------------------------
 
 8.5.4. crunch-outgoing-cookies
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.4. crunch-outgoing-cookies
 
 Typical use:
-   
+
     Prevent the web server from reading any cookies from your system
     Prevent the web server from reading any cookies from your system
-   
+
 Effect:
 Effect:
-   
+
     Deletes any "Cookie:" HTTP headers from client requests.
     Deletes any "Cookie:" HTTP headers from client requests.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     This action is only concerned with outgoing cookies. For incoming cookies,
     use crunch-incoming-cookies. Use both to disable cookies completely.
     This action is only concerned with outgoing cookies. For incoming cookies,
     use crunch-incoming-cookies. Use both to disable cookies completely.
-   
-    It makes no sense at all to use this action in conjunction with the 
+
+    It makes no sense at all to use this action in conjunction with the
     session-cookies-only action, since it would prevent the session cookies
     from being read.
     session-cookies-only action, since it would prevent the session cookies
     from being read.
-   
+
 Example usage:
 Example usage:
-   
-    +crunch-outgoing-cookies                                           
-   
+
+    +crunch-outgoing-cookies
+
+
 -------------------------------------------------------------------------------
 
 8.5.5. deanimate-gifs
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.5. deanimate-gifs
 
 Typical use:
-   
+
     Stop those annoying, distracting animated GIF images.
     Stop those annoying, distracting animated GIF images.
-   
+
 Effect:
 Effect:
-   
+
     De-animate GIF animations, i.e. reduce them to their first or last image.
     De-animate GIF animations, i.e. reduce them to their first or last image.
-   
+
 Type:
 Type:
-   
+
     Parameterized.
     Parameterized.
-   
+
 Parameter:
 Parameter:
-   
+
     "last" or "first"
     "last" or "first"
-   
+
 Notes:
 Notes:
-   
+
     This will also shrink the images considerably (in bytes, not pixels!). If
     the option "first" is given, the first frame of the animation is used as
     the replacement. If "last" is given, the last frame of the animation is
     used instead, which probably makes more sense for most banner animations,
     but also has the risk of not showing the entire last frame (if it is only a
     delta to an earlier frame).
     This will also shrink the images considerably (in bytes, not pixels!). If
     the option "first" is given, the first frame of the animation is used as
     the replacement. If "last" is given, the last frame of the animation is
     used instead, which probably makes more sense for most banner animations,
     but also has the risk of not showing the entire last frame (if it is only a
     delta to an earlier frame).
-   
+
     You can safely use this action with patterns that will also match non-GIF
     objects, because no attempt will be made at anything that doesn't look like
     a GIF.
     You can safely use this action with patterns that will also match non-GIF
     objects, because no attempt will be made at anything that doesn't look like
     a GIF.
-   
+
 Example usage:
 Example usage:
-   
-    +deanimate-gifs{last}                                              
-   
+
+    +deanimate-gifs{last}
+
+
 -------------------------------------------------------------------------------
 
 8.5.6. downgrade-http-version
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.6. downgrade-http-version
 
 Typical use:
-   
+
     Work around (very rare) problems with HTTP/1.1
     Work around (very rare) problems with HTTP/1.1
-   
+
 Effect:
 Effect:
-   
+
     Downgrades HTTP/1.1 client requests and server replies to HTTP/1.0.
     Downgrades HTTP/1.1 client requests and server replies to HTTP/1.0.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     This is a left-over from the time when Privoxy didn't support important
     HTTP/1.1 features well. It is left here for the unlikely case that you
     experience HTTP/1.1 related problems with some server out there. Not all
     (optional) HTTP/1.1 features are supported yet, so there is a chance you
     might need this action.
     This is a left-over from the time when Privoxy didn't support important
     HTTP/1.1 features well. It is left here for the unlikely case that you
     experience HTTP/1.1 related problems with some server out there. Not all
     (optional) HTTP/1.1 features are supported yet, so there is a chance you
     might need this action.
-   
+
 Example usage (section):
 Example usage (section):
-   
-    {+downgrade-http-version}                                          
-    problem-host.example.com                                           
-   
--------------------------------------------------------------------------------
+
+    {+downgrade-http-version}
+    problem-host.example.com
+
+
+-------------------------------------------------------------------------------
 
 8.5.7. fast-redirects
 
 Typical use:
 
 8.5.7. fast-redirects
 
 Typical use:
-   
+
     Fool some click-tracking scripts and speed up indirect links
     Fool some click-tracking scripts and speed up indirect links
-   
+
 Effect:
 Effect:
-   
+
     Cut off all but the last valid URL from requests.
     Cut off all but the last valid URL from requests.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     Many sites, like yahoo.com, don't just link to other sites. Instead, they
     will link to some script on their own servers, giving the destination as a
     parameter, which will then redirect you to the final target. URLs resulting
     from this scheme typically look like: http://some.place/click-tracker.cgi?
     target=http://some.where.else.
     Many sites, like yahoo.com, don't just link to other sites. Instead, they
     will link to some script on their own servers, giving the destination as a
     parameter, which will then redirect you to the final target. URLs resulting
     from this scheme typically look like: http://some.place/click-tracker.cgi?
     target=http://some.where.else.
-   
+
     Sometimes, there are even multiple consecutive redirects encoded in the
     URL. These redirections via scripts make your web browsing more traceable,
     since the server from which you follow such a link can see where you go to.
     Apart from that, valuable bandwidth and time is wasted, while your browser
     ask the server for one redirect after the other. Plus, it feeds the
     advertisers.
     Sometimes, there are even multiple consecutive redirects encoded in the
     URL. These redirections via scripts make your web browsing more traceable,
     since the server from which you follow such a link can see where you go to.
     Apart from that, valuable bandwidth and time is wasted, while your browser
     ask the server for one redirect after the other. Plus, it feeds the
     advertisers.
-   
+
     This feature is currently not very smart and is scheduled for improvement.
     It is likely to break some sites. You should expect to need possibly many
     exceptions to this action, if it is enabled by default in default.action.
     Some sites just don't work without it.
     This feature is currently not very smart and is scheduled for improvement.
     It is likely to break some sites. You should expect to need possibly many
     exceptions to this action, if it is enabled by default in default.action.
     Some sites just don't work without it.
-   
+
 Example usage:
 Example usage:
-   
-    {+fast-redirects}                                                  
-   
+
+    {+fast-redirects}
+
+
 -------------------------------------------------------------------------------
 
 8.5.8. filter
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.8. filter
 
 Typical use:
-   
+
     Get rid of HTML and JavaScript annoyances, banner advertisements (by size),
     do fun text replacements, etc.
     Get rid of HTML and JavaScript annoyances, banner advertisements (by size),
     do fun text replacements, etc.
-   
+
 Effect:
 Effect:
-   
-    Text documents, including HTML and JavaScript, to which this action
-    applies, are filtered on-the-fly through the specified regular expression
-    based substitutions.
-   
+
+    All files of text-based type, most notably HTML and JavaScript, to which
+    this action applies, are filtered on-the-fly through the specified regular
+    expression based substitutions. (Note: as of version 3.0.3 plain text
+    documents are exempted from filtering, because web servers often use the
+    text/plain MIME type for all files whose type they don't know.)
+
 Type:
 Type:
-   
+
     Parameterized.
     Parameterized.
-   
+
 Parameter:
 Parameter:
-   
+
     The name of a filter, as defined in the filter file (typically
     The name of a filter, as defined in the filter file (typically
-    default.filter, set by the filterfile option in the config file). Filtering
-    can be completely disabled without the use of parameters.
-   
+    default.filter, set by the filterfile option in the config file). When used
+    in its negative form, and without parameters, filtering is completely
+    disabled.
+
 Notes:
 Notes:
-   
+
     For your convenience, there are a number of pre-defined filters available
     in the distribution filter file that you can use. See the examples below
     for a list.
     For your convenience, there are a number of pre-defined filters available
     in the distribution filter file that you can use. See the examples below
     for a list.
-   
-    This is potentially a very powerful feature! But "rolling your own" filters
-    requires a knowledge of regular expressions and HTML.
-   
+
     Filtering requires buffering the page content, which may appear to slow
     down page rendering since nothing is displayed until all content has passed
     the filters. (It does not really take longer, but seems that way since the
     page is not incrementally displayed.) This effect will be more noticeable
     on slower connections.
     Filtering requires buffering the page content, which may appear to slow
     down page rendering since nothing is displayed until all content has passed
     the filters. (It does not really take longer, but seems that way since the
     page is not incrementally displayed.) This effect will be more noticeable
     on slower connections.
-   
+
+    This is very powerful feature, but "rolling your own" filters requires a
+    knowledge of regular expressions and HTML.
+
     The amount of data that can be filtered is limited to the buffer-limit
     option in the main config file. The default is 4096 KB (4 Megs). Once this
     limit is exceeded, the buffered data, and all pending data, is passed
     The amount of data that can be filtered is limited to the buffer-limit
     option in the main config file. The default is 4096 KB (4 Megs). Once this
     limit is exceeded, the buffered data, and all pending data, is passed
-    through unfiltered. Inappropriate MIME types are not filtered.
-   
+    through unfiltered.
+
+    Inadequate MIME types, such as zipped files, are not filtered at all.
+    (Again, only text-based types except plain text). Encrypted SSL data (from
+    HTTPS servers) cannot be filtered either, since this would violate the
+    integrity of the secure transaction. In some situations it might be
+    necessary to protect certain text, like source code, from filtering by
+    defining appropriate -filter sections.
+
     At this time, Privoxy cannot (yet!) uncompress compressed documents. If you
     want filtering to work on all documents, even those that would normally be
     sent compressed, use the prevent-compression action in conjunction with
     filter.
     At this time, Privoxy cannot (yet!) uncompress compressed documents. If you
     want filtering to work on all documents, even those that would normally be
     sent compressed, use the prevent-compression action in conjunction with
     filter.
-   
+
     Filtering can achieve some of the same effects as the block action, i.e. it
     can be used to block ads and banners. But the mechanism works quite
     differently. One effective use, is to block ad banners based on their size
     (see below), since many of these seem to be somewhat standardized.
     Filtering can achieve some of the same effects as the block action, i.e. it
     can be used to block ads and banners. But the mechanism works quite
     differently. One effective use, is to block ad banners based on their size
     (see below), since many of these seem to be somewhat standardized.
-   
+
     Feedback with suggestions for new or improved filters is particularly
     welcome!
     Feedback with suggestions for new or improved filters is particularly
     welcome!
-   
-Example usage (with filters from the distribution default.filter file):
-   
-    +filter{html-annoyances}     # Get rid of particularly annoying HTML abuse.
-   
+
+    The below list has only the names and a one-line description of each
+    predefined filter. There are more verbose explanations of what these
+    filters do in the filter file chapter.
+
+Example usage (with filters from the distribution default.filter file). See the
+    Predefined Filters section for more explanation on each:
+
     +filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse
     +filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse
-   
-    +filter{banners-by-size}     # Kill banners based on their size for this page (very efficient!)
-   
-    +filter{banners-by-link}     # Kill banners based on the link they are contained in (experimental)
-   
+
+
+    +filter{js-events}           # Kill all JS event bindings (Radically destructive! Only for extra nasty sites)
+
+
+    +filter{html-annoyances}     # Get rid of particularly annoying HTML abuse
+
+
+    +filter{content-cookies}     # Kill cookies that come in the HTML or JS content
+
+
+    +filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)
+
+
+    +filter{unsolicited-popups}  # Disable only unsolicited pop-up windows
+
+
+    +filter{all-popups}          # Kill all popups in JavaScript and HTML
+
+
     +filter{img-reorder}         # Reorder attributes in <img> tags to make the banners-by-* filters more effective
     +filter{img-reorder}         # Reorder attributes in <img> tags to make the banners-by-* filters more effective
-   
-    +filter{content-cookies}     # Kill cookies that come sneaking in the HTML or JS content
-   
-    +filter{popups}              # Kill all popups in JS and HTML      
-   
+
+
+    +filter{banners-by-size}     # Kill banners by size
+
+
+    +filter{banners-by-link}     # Kill banners by their links to known clicktrackers
+
+
     +filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)
     +filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)
-   
-    +filter{fun}                 # Text replacements for subversive browsing fun!
-   
-    +filter{frameset-borders}    # Give frames a border and make them resizeable
-   
-    +filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)
-   
-    +filter{nimda}               # Remove Nimda (virus) code.          
-   
+
+
+    +filter{tiny-textforms}      # Extend those tiny textareas up to 40x80 and kill the hard wrap
+
+
+    +filter{jumping-windows}     # Prevent windows from resizing and moving themselves
+
+
+    +filter{frameset-borders}    # Give frames a border and make them resizable
+
+
+    +filter{demoronizer}         # Fix MS's non-standard use of standard charsets
+
+
     +filter{shockwave-flash}     # Kill embedded Shockwave Flash objects
     +filter{shockwave-flash}     # Kill embedded Shockwave Flash objects
-   
-    +filter{crude-parental}      # Kill all web pages that contain the words "sex" or "warez"
-   
-    +filter{js-events}           # Kill all JS event bindings (Radically destructive! Only for extra nasty sites) 
-   
+
+
+    +filter{quicktime-kioskmode} # Make Quicktime movies saveable
+
+
+    +filter{fun}                 # Text replacements for subversive browsing fun!
+
+
+    +filter{crude-parental}      # Crude parental filtering (demo only)
+
+
+    +filter{ie-exploits}         # Disable some known Internet Explorer bug exploits
+
+
 -------------------------------------------------------------------------------
 
 8.5.9. handle-as-image
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.9. handle-as-image
 
 Typical use:
-   
+
     Mark URLs as belonging to images (so they'll be replaced by images if they
     get blocked)
     Mark URLs as belonging to images (so they'll be replaced by images if they
     get blocked)
-   
+
 Effect:
 Effect:
-   
+
     This action alone doesn't do anything noticeable. It just marks URLs as
     images. If the block action also applies, the presence or absence of this
     mark decides whether an HTML "blocked" page, or a replacement image (as
     determined by the set-image-blocker action) will be sent to the client as a
     substitute for the blocked content.
     This action alone doesn't do anything noticeable. It just marks URLs as
     images. If the block action also applies, the presence or absence of this
     mark decides whether an HTML "blocked" page, or a replacement image (as
     determined by the set-image-blocker action) will be sent to the client as a
     substitute for the blocked content.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     The below generic example section is actually part of default.action. It
     marks all URLs with well-known image file name extensions as images and
     should be left intact.
     The below generic example section is actually part of default.action. It
     marks all URLs with well-known image file name extensions as images and
     should be left intact.
-   
+
     Users will probably only want to use the handle-as-image action in
     conjunction with block, to block sources of banners, whose URLs don't
     reflect the file type, like in the second example section.
     Users will probably only want to use the handle-as-image action in
     conjunction with block, to block sources of banners, whose URLs don't
     reflect the file type, like in the second example section.
-   
+
     Note that you cannot treat HTML pages as images in most cases. For
     instance, (in-line) ad frames require an HTML page to be sent, or they
     won't display properly. Forcing handle-as-image in this situation will not
     replace the ad frame with an image, but lead to error messages.
     Note that you cannot treat HTML pages as images in most cases. For
     instance, (in-line) ad frames require an HTML page to be sent, or they
     won't display properly. Forcing handle-as-image in this situation will not
     replace the ad frame with an image, but lead to error messages.
-   
+
 Example usage (sections):
 Example usage (sections):
-   
-    # Generic image extensions:                                        
-    #                                                                  
-    {+handle-as-image}                                                 
-    /.*\.(gif|jpg|jpeg|png|bmp|ico)$                                   
-                                                                       
-    # These don't look like images, but they're banners and should be  
-    # blocked as images:                                               
-    #                                                                  
-    {+block +handle-as-image}                                          
-    some.nasty-banner-server.com/junk.cgi?output=trash                 
-                                                                       
-    # Banner source! Who cares if they also have non-image content?    
-    ad.doubleclick.net                                                 
-   
+
+    # Generic image extensions:
+    #
+    {+handle-as-image}
+    /.*\.(gif|jpg|jpeg|png|bmp|ico)$
+
+    # These don't look like images, but they're banners and should be
+    # blocked as images:
+    #
+    {+block +handle-as-image}
+    some.nasty-banner-server.com/junk.cgi?output=trash
+
+    # Banner source! Who cares if they also have non-image content?
+    ad.doubleclick.net
+
+
 -------------------------------------------------------------------------------
 
 8.5.10. hide-forwarded-for-headers
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.10. hide-forwarded-for-headers
 
 Typical use:
-   
+
     Improve privacy by hiding the true source of the request
     Improve privacy by hiding the true source of the request
-   
+
 Effect:
 Effect:
-   
+
     Deletes any existing "X-Forwarded-for:" HTTP header from client requests,
     and prevents adding a new one.
     Deletes any existing "X-Forwarded-for:" HTTP header from client requests,
     and prevents adding a new one.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     It is fairly safe to leave this on.
     It is fairly safe to leave this on.
-   
+
     This action is scheduled for improvement: It should be able to generate
     forged "X-Forwarded-for:" headers using random IP addresses from a
     specified network, to make successive requests from the same client look
     like requests from a pool of different users sharing the same proxy.
     This action is scheduled for improvement: It should be able to generate
     forged "X-Forwarded-for:" headers using random IP addresses from a
     specified network, to make successive requests from the same client look
     like requests from a pool of different users sharing the same proxy.
-   
+
 Example usage:
 Example usage:
-   
-    +hide-forwarded-for-headers                                        
-   
+
+    +hide-forwarded-for-headers
+
+
 -------------------------------------------------------------------------------
 
 8.5.11. hide-from-header
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.11. hide-from-header
 
 Typical use:
-   
+
     Keep your (old and ill) browser from telling web servers your email address
     Keep your (old and ill) browser from telling web servers your email address
-   
+
 Effect:
 Effect:
-   
+
     Deletes any existing "From:" HTTP header, or replaces it with the specified
     string.
     Deletes any existing "From:" HTTP header, or replaces it with the specified
     string.
-   
+
 Type:
 Type:
-   
+
     Parameterized.
     Parameterized.
-   
+
 Parameter:
 Parameter:
-   
+
     Keyword: "block", or any user defined value.
     Keyword: "block", or any user defined value.
-   
+
 Notes:
 Notes:
-   
+
     The keyword "block" will completely remove the header (not to be confused
     with the block action).
     The keyword "block" will completely remove the header (not to be confused
     with the block action).
-   
+
     Alternately, you can specify any value you prefer to be sent to the web
     server. If you do, it is a matter of fairness not to use any address that
     is actually used by a real person.
     Alternately, you can specify any value you prefer to be sent to the web
     server. If you do, it is a matter of fairness not to use any address that
     is actually used by a real person.
-   
+
     This action is rarely needed, as modern web browsers don't send "From:"
     headers anymore.
     This action is rarely needed, as modern web browsers don't send "From:"
     headers anymore.
-   
+
 Example usage:
 Example usage:
-   
-    +hide-from-header{block}                                           
-   
+
+    +hide-from-header{block}
+
+
     or
     or
-   
-    +hide-from-header{spam-me-senseless@sittingduck.example.com}       
-   
+
+    +hide-from-header{spam-me-senseless@sittingduck.example.com}
+
+
 -------------------------------------------------------------------------------
 
 8.5.12. hide-referrer
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.12. hide-referrer
 
 Typical use:
-   
+
     Conceal which link you followed to get to a particular site
     Conceal which link you followed to get to a particular site
-   
+
 Effect:
 Effect:
-   
+
     Deletes the "Referer:" (sic) HTTP header from the client request, or
     replaces it with a forged one.
     Deletes the "Referer:" (sic) HTTP header from the client request, or
     replaces it with a forged one.
-   
+
 Type:
 Type:
-   
+
     Parameterized.
     Parameterized.
-   
+
 Parameter:
 Parameter:
-   
+
       + "block" to delete the header completely.
       + "block" to delete the header completely.
-       
+
       + "forge" to pretend to be coming from the homepage of the server we are
         talking to.
       + "forge" to pretend to be coming from the homepage of the server we are
         talking to.
-       
+
       + Any other string to set a user defined referrer.
       + Any other string to set a user defined referrer.
-       
+
 Notes:
 Notes:
-   
+
     "forge" is the preferred option here, since some servers will not send
     images back otherwise, in an attempt to prevent their valuable content from
     being embedded elsewhere (and hence, without being surrounded by their
     banners).
     "forge" is the preferred option here, since some servers will not send
     images back otherwise, in an attempt to prevent their valuable content from
     being embedded elsewhere (and hence, without being surrounded by their
     banners).
-   
+
     hide-referer is an alternate spelling of hide-referrer and the two can be
     can be freely substituted with each other. ("referrer" is the correct
     English spelling, however the HTTP specification has a bug - it requires it
     to be spelled as "referer".)
     hide-referer is an alternate spelling of hide-referrer and the two can be
     can be freely substituted with each other. ("referrer" is the correct
     English spelling, however the HTTP specification has a bug - it requires it
     to be spelled as "referer".)
-   
+
 Example usage:
 Example usage:
-   
-    +hide-referrer{forge}                                              
-   
+
+    +hide-referrer{forge}
+
+
     or
     or
-   
-    +hide-referrer{http://www.yahoo.com/}                              
-   
+
+    +hide-referrer{http://www.yahoo.com/}
+
+
 -------------------------------------------------------------------------------
 
 8.5.13. hide-user-agent
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.13. hide-user-agent
 
 Typical use:
-   
+
     Conceal your type of browser and client operating system
     Conceal your type of browser and client operating system
-   
+
 Effect:
 Effect:
-   
+
     Replaces the value of the "User-Agent:" HTTP header in client requests with
     the specified value.
     Replaces the value of the "User-Agent:" HTTP header in client requests with
     the specified value.
-   
+
 Type:
 Type:
-   
+
     Parameterized.
     Parameterized.
-   
+
 Parameter:
 Parameter:
-   
+
     Any user-defined string.
     Any user-defined string.
-   
+
 Notes:
 Notes:
-   
+
     +-----------------------------------------------------------------+
     |                             Warning                             |
     |-----------------------------------------------------------------|
     +-----------------------------------------------------------------+
     |                             Warning                             |
     |-----------------------------------------------------------------|
@@ -2751,7 +2897,7 @@ Notes:
     |in order to customize their content for different browsers       |
     |(which, by the way, is NOT a smart way to do that!).             |
     +-----------------------------------------------------------------+
     |in order to customize their content for different browsers       |
     |(which, by the way, is NOT a smart way to do that!).             |
     +-----------------------------------------------------------------+
-   
+
     Using this action in multi-user setups or wherever different types of
     browsers will access the same Privoxy is not recommended. In single-user,
     single-browser setups, you might use it to delete your OS version
     Using this action in multi-user setups or wherever different types of
     browsers will access the same Privoxy is not recommended. In single-user,
     single-browser setups, you might use it to delete your OS version
@@ -2761,332 +2907,352 @@ Notes:
     reason in some cases). Example of this: some MSN sites will not let Mozilla
     enter, yet forging to a Netscape 6.1 user-agent works just fine. (Must be
     just a silly MS goof, I'm sure :-).
     reason in some cases). Example of this: some MSN sites will not let Mozilla
     enter, yet forging to a Netscape 6.1 user-agent works just fine. (Must be
     just a silly MS goof, I'm sure :-).
-   
+
     This action is scheduled for improvement.
     This action is scheduled for improvement.
-   
+
 Example usage:
 Example usage:
-   
-    +hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}         
-   
+
+    +hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)}
+
+
 -------------------------------------------------------------------------------
 
 8.5.14. kill-popups
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.14. kill-popups
 
 Typical use:
-   
-    Eliminate those annoying pop-up windows
-   
+
+    Eliminate those annoying pop-up windows (deprecated)
+
 Effect:
 Effect:
-   
+
     While loading the document, replace JavaScript code that opens pop-up
     windows with (syntactically neutral) dummy code on the fly.
     While loading the document, replace JavaScript code that opens pop-up
     windows with (syntactically neutral) dummy code on the fly.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
-    This action is easily confused with the built-in, hardwired filter action,
-    but there are important differences: For kill-popups, the document need not
-    be buffered, so it can be incrementally rendered while downloading. But
-    kill-popups doesn't catch as many pop-ups as filter{popups} does.
-   
+
+    This action is basically a built-in, hardwired special-purpose filter
+    action, but there are important differences: For kill-popups, the document
+    need not be buffered, so it can be incrementally rendered while
+    downloading. But kill-popups doesn't catch as many pop-ups as filter
+    {all-popups} does and is not as smart as filter{unsolicited-popups} is.
+
     Think of it as a fast and efficient replacement for a filter that you can
     use if you don't want any filtering at all. Note that it doesn't make sense
     to combine it with any filter action, since as soon as one filter applies,
     the whole document needs to be buffered anyway, which destroys the
     advantage of the kill-popups action over its filter equivalent.
     Think of it as a fast and efficient replacement for a filter that you can
     use if you don't want any filtering at all. Note that it doesn't make sense
     to combine it with any filter action, since as soon as one filter applies,
     the whole document needs to be buffered anyway, which destroys the
     advantage of the kill-popups action over its filter equivalent.
-   
-    Killing all pop-ups is a dangerous business. Many shops and banks rely on
-    pop-ups to display forms, shopping carts etc, and killing only the unwanted
-    pop-ups would require artificial intelligence in Privoxy. If the only kind
-    of pop-ups that you want to kill are exit consoles (those really nasty
-    windows that appear when you close an other one), you might want to use 
-    filter{js-annoyances} instead.
-   
+
+    Killing all pop-ups unconditionally is problematic. Many shops and banks
+    rely on pop-ups to display forms, shopping carts etc, and the filter
+    {unsolicited-popups} does a fairly good job of catching only the unwanted
+    ones.
+
+    If the only kind of pop-ups that you want to kill are exit consoles (those
+    really nasty windows that appear when you close an other one), you might
+    want to use filter{js-annoyances} instead.
+
 Example usage:
 Example usage:
-   
-    +kill-popups                                                       
-   
+
+    +kill-popups
+
+
 -------------------------------------------------------------------------------
 
 8.5.15. limit-connect
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.15. limit-connect
 
 Typical use:
-   
+
     Prevent abuse of Privoxy as a TCP proxy relay
     Prevent abuse of Privoxy as a TCP proxy relay
-   
+
 Effect:
 Effect:
-   
+
     Specifies to which ports HTTP CONNECT requests are allowable.
     Specifies to which ports HTTP CONNECT requests are allowable.
-   
+
 Type:
 Type:
-   
+
     Parameterized.
     Parameterized.
-   
+
 Parameter:
 Parameter:
-   
+
     A comma-separated list of ports or port ranges (the latter using dashes,
     with the minimum defaulting to 0 and the maximum to 65K).
     A comma-separated list of ports or port ranges (the latter using dashes,
     with the minimum defaulting to 0 and the maximum to 65K).
-   
+
 Notes:
 Notes:
-   
+
     By default, i.e. if no limit-connect action applies, Privoxy only allows
     HTTP CONNECT requests to port 443 (the standard, secure HTTPS port). Use
     limit-connect if more fine-grained control is desired for some or all
     destinations.
     By default, i.e. if no limit-connect action applies, Privoxy only allows
     HTTP CONNECT requests to port 443 (the standard, secure HTTPS port). Use
     limit-connect if more fine-grained control is desired for some or all
     destinations.
-   
+
     The CONNECT methods exists in HTTP to allow access to secure websites
     ("https://" URLs) through proxies. It works very simply: the proxy connects
     to the server on the specified port, and then short-circuits its
     connections to the client and to the remote server. This can be a big
     security hole, since CONNECT-enabled proxies can be abused as TCP relays
     very easily.
     The CONNECT methods exists in HTTP to allow access to secure websites
     ("https://" URLs) through proxies. It works very simply: the proxy connects
     to the server on the specified port, and then short-circuits its
     connections to the client and to the remote server. This can be a big
     security hole, since CONNECT-enabled proxies can be abused as TCP relays
     very easily.
-   
+
     If you don't know what any of this means, there probably is no reason to
     change this one, since the default is already very restrictive.
     If you don't know what any of this means, there probably is no reason to
     change this one, since the default is already very restrictive.
-   
+
 Example usages:
 Example usages:
-   
-    +limit-connect{443}                   # This is the default and need not be specified.        
-    +limit-connect{80,443}                # Ports 80 and 443 are OK.                              
-    +limit-connect{-3, 7, 20-100, 500-}   # Ports less than 3, 7, 20 to 100 and above 500 are OK. 
-    +limit-connect{-}                     # All ports are OK (gaping security hole!)              
-   
+
+    +limit-connect{443}                   # This is the default and need not be specified.
+    +limit-connect{80,443}                # Ports 80 and 443 are OK.
+    +limit-connect{-3, 7, 20-100, 500-}   # Ports less than 3, 7, 20 to 100 and above 500 are OK.
+    +limit-connect{-}                     # All ports are OK (gaping security hole!)
+
+
 -------------------------------------------------------------------------------
 
 8.5.16. prevent-compression
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.16. prevent-compression
 
 Typical use:
-   
+
     Ensure that servers send the content uncompressed, so it can be passed
     through filters
     Ensure that servers send the content uncompressed, so it can be passed
     through filters
-   
+
 Effect:
 Effect:
-   
+
     Adds a header to the request that asks for uncompressed transfer.
     Adds a header to the request that asks for uncompressed transfer.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     More and more websites send their content compressed by default, which is
     More and more websites send their content compressed by default, which is
-    generally a good idea and saves bandwidth. But for the filter, 
+    generally a good idea and saves bandwidth. But for the filter,
     deanimate-gifs and kill-popups actions to work, Privoxy needs access to the
     uncompressed data. Unfortunately, Privoxy can't yet(!) uncompress, filter,
     and re-compress the content on the fly. So if you want to ensure that all
     websites, including those that normally compress, can be filtered, you need
     to use this action.
     deanimate-gifs and kill-popups actions to work, Privoxy needs access to the
     uncompressed data. Unfortunately, Privoxy can't yet(!) uncompress, filter,
     and re-compress the content on the fly. So if you want to ensure that all
     websites, including those that normally compress, can be filtered, you need
     to use this action.
-   
+
     This will slow down transfers from those websites, though. If you use any
     of the above-mentioned actions, you will typically want to use
     prevent-compression in conjunction with them.
     This will slow down transfers from those websites, though. If you use any
     of the above-mentioned actions, you will typically want to use
     prevent-compression in conjunction with them.
-   
+
     Note that some (rare) ill-configured sites don't handle requests for
     uncompressed documents correctly (they send an empty document body). If you
     use prevent-compression per default, you'll have to add exceptions for
     those sites. See the example for how to do that.
     Note that some (rare) ill-configured sites don't handle requests for
     uncompressed documents correctly (they send an empty document body). If you
     use prevent-compression per default, you'll have to add exceptions for
     those sites. See the example for how to do that.
-   
+
 Example usage (sections):
 Example usage (sections):
-   
-    # Set default:                                                     
-    #                                                                  
-    {+prevent-compression}                                             
-    / # Match all sites                                                
-                                                                       
-    # Make exceptions for ill sites:                                   
-    #                                                                  
-    {-prevent-compression}                                             
-    www.debianhelp.org                                                 
-    www.pclinuxonline.com                                              
-   
+
+    # Set default:
+    #
+    {+prevent-compression}
+    / # Match all sites
+
+    # Make exceptions for ill sites:
+    #
+    {-prevent-compression}
+    www.debianhelp.org
+    www.pclinuxonline.com
+
+
 -------------------------------------------------------------------------------
 
 8.5.17. send-vanilla-wafer
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.17. send-vanilla-wafer
 
 Typical use:
-   
+
     Feed log analysis scripts with useless data.
     Feed log analysis scripts with useless data.
-   
+
 Effect:
 Effect:
-   
+
     Sends a cookie with each request stating that you do not accept any
     copyright on cookies sent to you, and asking the site operator not to track
     you.
     Sends a cookie with each request stating that you do not accept any
     copyright on cookies sent to you, and asking the site operator not to track
     you.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     The vanilla wafer is a (relatively) unique header and could conceivably be
     used to track you.
     The vanilla wafer is a (relatively) unique header and could conceivably be
     used to track you.
-   
+
     This action is rarely used and not enabled in the default configuration.
     This action is rarely used and not enabled in the default configuration.
-   
+
 Example usage:
 Example usage:
-   
-    +send-vanilla-wafer                                                
-   
+
+    +send-vanilla-wafer
+
+
 -------------------------------------------------------------------------------
 
 8.5.18. send-wafer
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.18. send-wafer
 
 Typical use:
-   
+
     Send custom cookies or feed log analysis scripts with even more useless
     data.
     Send custom cookies or feed log analysis scripts with even more useless
     data.
-   
+
 Effect:
 Effect:
-   
+
     Sends a custom, user-defined cookie with each request.
     Sends a custom, user-defined cookie with each request.
-   
+
 Type:
 Type:
-   
+
     Multi-value.
     Multi-value.
-   
+
 Parameter:
 Parameter:
-   
+
     A string of the form "name=value".
     A string of the form "name=value".
-   
+
 Notes:
 Notes:
-   
+
     Being multi-valued, multiple instances of this action can apply to the same
     request, resulting in multiple cookies being sent.
     Being multi-valued, multiple instances of this action can apply to the same
     request, resulting in multiple cookies being sent.
-   
+
     This action is rarely used and not enabled in the default configuration.
     This action is rarely used and not enabled in the default configuration.
-   
+
 Example usage (section):
 Example usage (section):
-   
-    {+send-wafer{UsingPrivoxy=true}}                                   
-    my-internal-testing-server.void                                    
-   
+
+    {+send-wafer{UsingPrivoxy=true}}
+    my-internal-testing-server.void
+
+
 -------------------------------------------------------------------------------
 
 8.5.19. session-cookies-only
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.19. session-cookies-only
 
 Typical use:
-   
+
     Allow only temporary "session" cookies (for the current browser session
     only).
     Allow only temporary "session" cookies (for the current browser session
     only).
-   
+
 Effect:
 Effect:
-   
+
     Deletes the "expires" field from "Set-Cookie:" server headers. Most
     browsers will not store such cookies permanently and forget them in between
     sessions.
     Deletes the "expires" field from "Set-Cookie:" server headers. Most
     browsers will not store such cookies permanently and forget them in between
     sessions.
-   
+
 Type:
 Type:
-   
+
     Boolean.
     Boolean.
-   
+
 Parameter:
 Parameter:
-   
+
     N/A
     N/A
-   
+
 Notes:
 Notes:
-   
+
     This is less strict than crunch-incoming-cookies / crunch-outgoing-cookies
     and allows you to browse websites that insist or rely on setting cookies,
     without compromising your privacy too badly.
     This is less strict than crunch-incoming-cookies / crunch-outgoing-cookies
     and allows you to browse websites that insist or rely on setting cookies,
     without compromising your privacy too badly.
-   
+
     Most browsers will not permanently store cookies that have been processed
     by session-cookies-only and will forget about them between sessions. This
     makes profiling cookies useless, but won't break sites which require
     cookies so that you can log in for transactions. This is generally turned
     on for all sites, and is the recommended setting.
     Most browsers will not permanently store cookies that have been processed
     by session-cookies-only and will forget about them between sessions. This
     makes profiling cookies useless, but won't break sites which require
     cookies so that you can log in for transactions. This is generally turned
     on for all sites, and is the recommended setting.
-   
-    It makes no sense at all to use session-cookies-only together with 
+
+    It makes no sense at all to use session-cookies-only together with
     crunch-incoming-cookies or crunch-outgoing-cookies. If you do, cookies will
     be plainly killed.
     crunch-incoming-cookies or crunch-outgoing-cookies. If you do, cookies will
     be plainly killed.
-   
+
     Note that it is up to the browser how it handles such cookies without an
     "expires" field. If you use an exotic browser, you might want to try it out
     to be sure.
     Note that it is up to the browser how it handles such cookies without an
     "expires" field. If you use an exotic browser, you might want to try it out
     to be sure.
-   
+
+    This setting also has no effect on cookies that may have been stored
+    previously by the browser before starting Privoxy. These would have to be
+    removed manually.
+
+    Privoxy also uses the content-cookies filter to block some types of
+    cookies. Content cookies are not effected by session-cookies-only.
+
 Example usage:
 Example usage:
-   
-    +session-cookies-only                                              
-   
+
+    +session-cookies-only
+
+
 -------------------------------------------------------------------------------
 
 8.5.20. set-image-blocker
 
 Typical use:
 -------------------------------------------------------------------------------
 
 8.5.20. set-image-blocker
 
 Typical use:
-   
+
     Choose the replacement for blocked images
     Choose the replacement for blocked images
-   
+
 Effect:
 Effect:
-   
-    This action alone doesn't do anything noticeable. If both block and 
+
+    This action alone doesn't do anything noticeable. If both block and
     handle-as-image also apply, i.e. if the request is to be blocked as an
     image, then the parameter of this action decides what will be sent as a
     replacement.
     handle-as-image also apply, i.e. if the request is to be blocked as an
     image, then the parameter of this action decides what will be sent as a
     replacement.
-   
+
 Type:
 Type:
-   
+
     Parameterized.
     Parameterized.
-   
+
 Parameter:
 Parameter:
-   
+
       + "pattern" to send a built-in checkerboard pattern image. The image is
         visually decent, scales very well, and makes it obvious where banners
         were busted.
       + "pattern" to send a built-in checkerboard pattern image. The image is
         visually decent, scales very well, and makes it obvious where banners
         were busted.
-       
+
       + "blank" to send a built-in transparent image. This makes banners
         disappear completely, but makes it hard to detect where Privoxy has
         blocked images on a given page and complicates troubleshooting if
         Privoxy has blocked innocent images, like navigation icons.
       + "blank" to send a built-in transparent image. This makes banners
         disappear completely, but makes it hard to detect where Privoxy has
         blocked images on a given page and complicates troubleshooting if
         Privoxy has blocked innocent images, like navigation icons.
-       
+
       + "target-url" to send a redirect to target-url. You can redirect to any
         image anywhere, even in your local filesystem (via "file:///" URL).
       + "target-url" to send a redirect to target-url. You can redirect to any
         image anywhere, even in your local filesystem (via "file:///" URL).
-       
+
         A good application of redirects is to use special Privoxy-built-in
         URLs, which send the built-in images, as target-url. This has the same
         visual effect as specifying "blank" or "pattern" in the first place,
         but enables your browser to cache the replacement image, instead of
         requesting it over and over again.
         A good application of redirects is to use special Privoxy-built-in
         URLs, which send the built-in images, as target-url. This has the same
         visual effect as specifying "blank" or "pattern" in the first place,
         but enables your browser to cache the replacement image, instead of
         requesting it over and over again.
-       
+
 Notes:
 Notes:
-   
+
     The URLs for the built-in images are "http://config.privoxy.org/
     send-banner?type=type", where type is either "blank" or "pattern".
     The URLs for the built-in images are "http://config.privoxy.org/
     send-banner?type=type", where type is either "blank" or "pattern".
-   
+
     There is a third (advanced) type, called "auto". It is NOT to be used in
     set-image-blocker, but meant for use from filters. Auto will select the
     type of image that would have applied to the referring page, had it been an
     image.
     There is a third (advanced) type, called "auto". It is NOT to be used in
     set-image-blocker, but meant for use from filters. Auto will select the
     type of image that would have applied to the referring page, had it been an
     image.
-   
+
 Example usage:
 Example usage:
-   
+
     Built-in pattern:
     Built-in pattern:
-   
-    +set-image-blocker{pattern}                                        
-   
+
+    +set-image-blocker{pattern}
+
+
     Redirect to the BSD devil:
     Redirect to the BSD devil:
-   
-    +set-image-blocker{http://www.freebsd.org/gifs/dae_up3.gif}        
-   
+
+    +set-image-blocker{http://www.freebsd.org/gifs/dae_up3.gif}
+
+
     Redirect to the built-in pattern for better caching:
     Redirect to the built-in pattern for better caching:
-   
+
     +set-image-blocker{http://config.privoxy.org/send-banner?type=pattern}
     +set-image-blocker{http://config.privoxy.org/send-banner?type=pattern}
-   
+
+
 -------------------------------------------------------------------------------
 
 8.5.21. Summary
 -------------------------------------------------------------------------------
 
 8.5.21. Summary
@@ -3129,57 +3295,59 @@ Privoxy.
 
 Now let's define some aliases...
 
 
 Now let's define some aliases...
 
- # Useful custom aliases we can use later.                                                   
- #                                                                                           
- # Note the (required!) section header line and that this section                            
- # must be at the top of the actions file!                                                   
- #                                                                                           
- {{alias}}                                                                                   
-                                                                                             
- # These aliases just save typing later:                                                     
- # (Note that some already use other aliases!)                                               
- #                                                                                           
- +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies                     
- -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies                     
- block-as-image      = +block +handle-as-image                                               
- mercy-for-cookies   = -crunch-all-cookies -session-cookies-only                             
-                                                                                             
- # These aliases define combinations of actions                                              
- # that are useful for certain types of sites:                                               
- #                                                                                           
- fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups 
- shop        = -crunch-all-cookies -filter{popups} -kill-popups                              
-                                                                                             
- # Short names for other aliases, for really lazy people ;-)                                 
- #                                                                                           
- c0 = +crunch-all-cookies                                                                    
- c1 = -crunch-all-cookies                                                                    
+ # Useful custom aliases we can use later.
+ #
+ # Note the (required!) section header line and that this section
+ # must be at the top of the actions file!
+ #
+ {{alias}}
+
+ # These aliases just save typing later:
+ # (Note that some already use other aliases!)
+ #
+ +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
+ -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
+ block-as-image      = +block +handle-as-image
+ mercy-for-cookies   = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
+
+ # These aliases define combinations of actions
+ # that are useful for certain types of sites:
+ #
+ fragile     = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups
+ shop        = -crunch-all-cookies -filter{all-popups} -kill-popups
+
+ # Short names for other aliases, for really lazy people ;-)
+ #
+ c0 = +crunch-all-cookies
+ c1 = -crunch-all-cookies
+
 
 ...and put them to use. These sections would appear in the lower part of an
 actions file and define exceptions to the default actions (as specified further
 up for the "/" pattern):
 
 
 ...and put them to use. These sections would appear in the lower part of an
 actions file and define exceptions to the default actions (as specified further
 up for the "/" pattern):
 
- # These sites are either very complex or very keen on                         
- # user data and require minimal interference to work:                         
- #                                                                             
- {fragile}                                                                     
- .office.microsoft.com                                                         
- .windowsupdate.microsoft.com                                                  
- .nytimes.com                                                                  
-                                                                               
- # Shopping sites:                                                             
- # Allow cookies (for setting and retrieving your customer data)               
- #                                                                             
- {shop}                                                                        
- .quietpc.com                                                                  
- .worldpay.com   # for quietpc.com                                             
- .scan.co.uk                                                                   
-                                                                               
- # These shops require pop-ups:                                                
- #                                                                             
- {shop -kill-popups -filter{popups}}                                           
-  .dabs.com                                                                    
-  .overclockers.co.uk                                                          
+ # These sites are either very complex or very keen on
+ # user data and require minimal interference to work:
+ #
+ {fragile}
+ .office.microsoft.com
+ .windowsupdate.microsoft.com
+ .nytimes.com
+
+ # Shopping sites:
+ # Allow cookies (for setting and retrieving your customer data)
+ #
+ {shop}
+ .quietpc.com
+ .worldpay.com   # for quietpc.com
+ .scan.co.uk
+
+ # These shops require pop-ups:
+ #
+ {shop -kill-popups -filter{all-popups}}
+  .dabs.com
+  .overclockers.co.uk
+
 
 Aliases like "shop" and "fragile" are often used for "problem" sites that
 require some actions to be disabled in order to function properly.
 
 Aliases like "shop" and "fragile" are often used for "problem" sites that
 require some actions to be disabled in order to function properly.
@@ -3199,40 +3367,43 @@ and user.action file and see how all these pieces come together:
 
 Every config file should start with a short comment stating its purpose:
 
 
 Every config file should start with a short comment stating its purpose:
 
-# Sample default.action file <developers@privoxy.org>                          
+# Sample default.action file <developers@privoxy.org>
+
 
 Then, since this is the default.action file, the first section is a special
 section for internal use that you needn't change or worry about:
 
 
 Then, since this is the default.action file, the first section is a special
 section for internal use that you needn't change or worry about:
 
-##########################################################################     
-# Settings -- Don't change! For internal Privoxy use ONLY.                     
-##########################################################################     
-                                                                               
-{{settings}}                                                                   
-for-privoxy-version=3.0                                                        
+##########################################################################
+# Settings -- Don't change! For internal Privoxy use ONLY.
+##########################################################################
+
+{{settings}}
+for-privoxy-version=3.0
+
 
 After that comes the (optional) alias section. We'll use the example section
 from the above chapter on aliases, that also explains why and how aliases are
 used:
 
 
 After that comes the (optional) alias section. We'll use the example section
 from the above chapter on aliases, that also explains why and how aliases are
 used:
 
-##########################################################################                  
-# Aliases                                                                                   
-##########################################################################                  
-{{alias}}                                                                                   
-                                                                                            
-# These aliases just save typing later:                                                     
-# (Note that some already use other aliases!)                                               
-#                                                                                           
-+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies                     
--crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies                     
-block-as-image      = +block +handle-as-image                                               
-mercy-for-cookies   = -crunch-all-cookies -session-cookies-only                             
-                                                                                            
-# These aliases define combinations of actions                                              
-# that are useful for certain types of sites:                                               
-#                                                                                           
-fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups 
-shop        = mercy-for-cookies -filter{popups} -kill-popups                                
+##########################################################################
+# Aliases
+##########################################################################
+{{alias}}
+
+ # These aliases just save typing later:
+ # (Note that some already use other aliases!)
+ #
+ +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
+ -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
+ block-as-image      = +block +handle-as-image
+ mercy-for-cookies   = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
+
+ # These aliases define combinations of actions
+ # that are useful for certain types of sites:
+ #
+ fragile     = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups
+ shop        = -crunch-all-cookies -filter{all-popups} -kill-popups
+
 
 Now come the regular sections, i.e. sets of actions, accompanied by URL
 patterns to which they apply. Remember all actions are disabled when matching
 
 Now come the regular sections, i.e. sets of actions, accompanied by URL
 patterns to which they apply. Remember all actions are disabled when matching
@@ -3251,53 +3422,58 @@ complete listing for your reference. (Remember: a "+" preceding the action name
 enables the action, a "-" disables!). Also note how this long line has been
 made more readable by splitting it into multiple lines with line continuation.
 
 enables the action, a "-" disables!). Also note how this long line has been
 made more readable by splitting it into multiple lines with line continuation.
 
-##########################################################################     
-# "Defaults" section:                                                          
-##########################################################################     
- { \                                                                           
- -add-header \                                                                 
- -block \                                                                      
- -crunch-incoming-cookies \                                                    
- -crunch-outgoing-cookies \                                                    
- +deanimate-gifs \                                                             
- -downgrade-http-version \                                                     
- +fast-redirects \                                                             
- +filter{html-annoyances} \                                                    
- +filter{js-annoyances} \                                                      
- -filter{content-cookies} \                                                    
- +filter{popups} \                                                             
- +filter{webbugs} \                                                            
- -filter{refresh-tags} \                                                       
- -filter{fun} \                                                                
- +filter{nimda} \                                                              
- +filter{banners-by-size} \                                                    
- -filter{banners-by-link} \                                                    
- -filter{img-reorder} \                                                        
- -filter{shockwave-flash} \                                                    
- -filter{crude-parental} \                                                     
- -filter{js-events} \                                                          
- -handle-as-image \                                                            
- +hide-forwarded-for-headers \                                                 
- +hide-from-header{block} \                                                    
- +hide-referrer{forge} \                                                       
- -hide-user-agent \                                                            
- -kill-popups \                                                                
- -limit-connect \                                                              
- +prevent-compression \                                                        
- -send-vanilla-wafer \                                                         
- -send-wafer \                                                                 
- +session-cookies-only \                                                       
- +set-image-blocker{pattern} \                                                 
- }                                                                             
- / # forward slash will match *all* potential URL patterns.                    
+##########################################################################
+# "Defaults" section:
+##########################################################################
+ { \
+ -add-header \
+ -block \
+ -crunch-incoming-cookies \
+ -crunch-outgoing-cookies \
+ +deanimate-gifs \
+ -downgrade-http-version \
+ +fast-redirects \
+ +filter{js-annoyances} \
+ -filter{js-events} \
+ +filter{html-annoyances} \
+ -filter{content-cookies} \
+ +filter{refresh-tags} \
+ +filter{unsolicited-popups} \
+ -filter{all-popups} \
+ +filter{img-reorder} \
+ +filter{banners-by-size} \
+ -filter{banners-by-link} \
+ +filter{webbugs} \
+ -filter{tiny-textforms} \
+ +filter{jumping-windows} \
+ -filter{frameset-borders} \
+ -filter{demoronizer} \
+ -filter{shockwave-flash} \
+ -filter{quicktime-kioskmode} \
+ -filter{fun} \
+ -filter{crude-parental} \
+ +filter{ie-exploits} \
+ -handle-as-image \
+ +hide-forwarded-for-headers \
+ +hide-from-header{block} \
+ +hide-referrer{forge} \
+ -hide-user-agent \
+ -kill-popups \
+ -limit-connect \
+ +prevent-compression \
+ -send-vanilla-wafer \
+ -send-wafer \
+ +session-cookies-only \
+ +set-image-blocker{pattern} \
+ }
+ / # forward slash will match *all* potential URL patterns.
+
 
 The default behavior is now set. Note that some actions, like not hiding the
 user agent, are part of a "general policy" that applies universally and won't
 get any exceptions defined later. Other choices, like not blocking (which is
 understandably the default!) need exceptions, i.e. we need to specify
 
 The default behavior is now set. Note that some actions, like not hiding the
 user agent, are part of a "general policy" that applies universally and won't
 get any exceptions defined later. Other choices, like not blocking (which is
 understandably the default!) need exceptions, i.e. we need to specify
-explicitly what we want to block in later sections. We will also want to make
-exceptions from our general pop-up-killing, and use our defined aliases for
-that.
+explicitly what we want to block in later sections.
 
 The first of our specialized sections is concerned with "fragile" sites, i.e.
 sites that require minimum interference, because they are either very complex
 
 The first of our specialized sections is concerned with "fragile" sites, i.e.
 sites that require minimum interference, because they are either very complex
@@ -3305,53 +3481,41 @@ or very keen on tracking you (and have mechanisms in place that make them
 unusable for people who avoid being tracked). We will simply use our
 pre-defined fragile alias instead of stating the list of actions explicitly:
 
 unusable for people who avoid being tracked). We will simply use our
 pre-defined fragile alias instead of stating the list of actions explicitly:
 
-##########################################################################     
-# Exceptions for sites that'll break under the default action set:             
-##########################################################################     
-                                                                               
-# "Fragile" Use a minimum set of actions for these sites (see alias above):    
-#                                                                              
-{ fragile }                                                                    
-.office.microsoft.com           # surprise, surprise!                          
-.windowsupdate.microsoft.com                                                   
+##########################################################################
+# Exceptions for sites that'll break under the default action set:
+##########################################################################
+
+# "Fragile" Use a minimum set of actions for these sites (see alias above):
+#
+{ fragile }
+.office.microsoft.com           # surprise, surprise!
+.windowsupdate.microsoft.com
+
 
 Shopping sites are not as fragile, but they typically require cookies to log
 in, and pop-up windows for shopping carts or item details. Again, we'll use a
 pre-defined alias:
 
 
 Shopping sites are not as fragile, but they typically require cookies to log
 in, and pop-up windows for shopping carts or item details. Again, we'll use a
 pre-defined alias:
 
-# Shopping sites:                                                              
-#                                                                              
-{ shop }                                                                       
-.quietpc.com                                                                   
-.worldpay.com   # for quietpc.com                                              
-.jungle.com                                                                    
-.scan.co.uk                                                                    
-
-Then, there are sites which rely on pop-up windows (yuck!) to work. Since we
-made pop-up-killing our default above, we need to make exceptions now. Mozilla
-users, who can turn on smart handling of unwanted pop-ups in their browsers,
-can safely choose -filter{popups} (and -kill-popups) above and hence don't need
-this section. Anyway, disabling an already disabled action doesn't hurt, so
-we'll define our exceptions regardless of what was chosen in the defaults
-section:
-
-# These sites require pop-ups too :(                                           
-#                                                                              
-{ -kill-popups -filter{popups} }                                               
-.dabs.com                                                                      
-.overclockers.co.uk                                                            
-.deutsche-bank-24.de                                                           
+# Shopping sites:
+#
+{ shop }
+.quietpc.com
+.worldpay.com   # for quietpc.com
+.jungle.com
+.scan.co.uk
+
 
 The fast-redirects action, which we enabled per default above, breaks some
 sites. So disable it for popular sites where we know it misbehaves:
 
 
 The fast-redirects action, which we enabled per default above, breaks some
 sites. So disable it for popular sites where we know it misbehaves:
 
-{ -fast-redirects }                                                            
-login.yahoo.com                                                                
-edit.*.yahoo.com                                                               
-.google.com                                                                    
-.altavista.com/.*(like|url|link):http                                          
-.altavista.com/trans.*urltext=http                                             
-.nytimes.com                                                                   
+{ -fast-redirects }
+login.yahoo.com
+edit.*.yahoo.com
+.google.com
+.altavista.com/.*(like|url|link):http
+.altavista.com/trans.*urltext=http
+.nytimes.com
+
 
 It is important that Privoxy knows which URLs belong to images, so that if they
 are to be blocked, a substitute image can be sent, rather than an HTML page.
 
 It is important that Privoxy knows which URLs belong to images, so that if they
 are to be blocked, a substitute image can be sent, rather than an HTML page.
@@ -3361,15 +3525,16 @@ advertisers (in terms of money and information). We can mark any URL as an
 image with the handle-as-image action, and marking all URLs that end in a known
 image file extension is a good start:
 
 image with the handle-as-image action, and marking all URLs that end in a known
 image file extension is a good start:
 
-##########################################################################     
-# Images:                                                                      
-##########################################################################     
-                                                                               
-# Define which file types will be treated as images, in case they get          
-# blocked further down this file:                                              
-#                                                                              
-{ +handle-as-image }                                                           
-/.*\.(gif|jpe?g|png|bmp|ico)$                                                  
+##########################################################################
+# Images:
+##########################################################################
+
+# Define which file types will be treated as images, in case they get
+# blocked further down this file:
+#
+{ +handle-as-image }
+/.*\.(gif|jpe?g|png|bmp|ico)$
+
 
 And then there are known banner sources. They often use scripts to generate the
 banners, so it won't be visible from the URL that the request is for an image.
 
 And then there are known banner sources. They often use scripts to generate the
 banners, so it won't be visible from the URL that the request is for an image.
@@ -3380,17 +3545,18 @@ chosen by the set-image-blocker action. Since all URLs have matched the default
 section with its +set-image-blocker{pattern} action before, it still applies
 and needn't be repeated:
 
 section with its +set-image-blocker{pattern} action before, it still applies
 and needn't be repeated:
 
-# Known ad generators:                                                         
-#                                                                              
-{ block-as-image }                                                             
-ar.atwola.com                                                                  
-.ad.doubleclick.net                                                            
-.ad.*.doubleclick.net                                                          
-.a.yimg.com/(?:(?!/i/).)*$                                                     
-.a[0-9].yimg.com/(?:(?!/i/).)*$                                                
-bs*.gsanet.com                                                                 
-bs*.einets.com                                                                 
-.qkimg.net                                                                     
+# Known ad generators:
+#
+{ block-as-image }
+ar.atwola.com
+.ad.doubleclick.net
+.ad.*.doubleclick.net
+.a.yimg.com/(?:(?!/i/).)*$
+.a[0-9].yimg.com/(?:(?!/i/).)*$
+bs*.gsanet.com
+bs*.einets.com
+.qkimg.net
+
 
 One of the most important jobs of Privoxy is to block banners. A huge bunch of
 them are already "blocked" by the filter{banners-by-size} action, which we
 
 One of the most important jobs of Privoxy is to block banners. A huge bunch of
 them are already "blocked" by the filter{banners-by-size} action, which we
@@ -3405,23 +3571,24 @@ typical domain and path name components of banners. Then comes a list of
 individual patterns for specific sites, which is omitted here to keep the
 example short:
 
 individual patterns for specific sites, which is omitted here to keep the
 example short:
 
-##########################################################################     
-# Block these fine banners:                                                    
-##########################################################################     
-{ +block }                                                                     
-                                                                               
-# Generic patterns:                                                            
-#                                                                              
-ad*.                                                                           
-.*ads.                                                                         
-banner?.                                                                       
-count*.                                                                        
-/.*count(er)?\.(pl|cgi|exe|dll|asp|php[34]?)                                   
-/(?:.*/)?(publicite|werbung|rekla(ma|me|am)|annonse|maino(kset|nta|s)?)/       
-                                                                               
-# Site-specific patterns (abbreviated):                                        
-#                                                                              
-.hitbox.com                                                                    
+##########################################################################
+# Block these fine banners:
+##########################################################################
+{ +block }
+
+# Generic patterns:
+#
+ad*.
+.*ads.
+banner?.
+count*.
+/.*count(er)?\.(pl|cgi|exe|dll|asp|php[34]?)
+/(?:.*/)?(publicite|werbung|rekla(ma|me|am)|annonse|maino(kset|nta|s)?)/
+
+# Site-specific patterns (abbreviated):
+#
+.hitbox.com
+
 
 You wouldn't believe how many advertisers actually call their banner servers
 ads.company.com, or call the directory in which the banners are stored simply
 
 You wouldn't believe how many advertisers actually call their banner servers
 ads.company.com, or call the directory in which the banners are stored simply
@@ -3440,37 +3607,39 @@ exception to the general non-blocking policy, and suddenly +block applies. And
 now, it'll match .*loads., where -block applies, so (unless it matches again
 further down) it ends up with no block action applying.
 
 now, it'll match .*loads., where -block applies, so (unless it matches again
 further down) it ends up with no block action applying.
 
-##########################################################################     
-# Save some innocent victims of the above generic block patterns:              
-##########################################################################     
-                                                                               
-# By domain:                                                                   
-#                                                                              
-{ -block }                                                                     
-adv[io]*.  # (for advogato.org and advice.*)                                   
-adsl.      # (has nothing to do with ads)                                      
-ad[ud]*.   # (adult.* and add.*)                                               
-.edu       # (universities don't host banners (yet!))                          
-.*loads.   # (downloads, uploads etc)                                          
-                                                                               
-# By path:                                                                     
-#                                                                              
-/.*loads/                                                                      
-                                                                               
-# Site-specific:                                                               
-#                                                                              
-www.globalintersec.com/adv # (adv = advanced)                                  
-www.ugu.com/sui/ugu/adv                                                        
+##########################################################################
+# Save some innocent victims of the above generic block patterns:
+##########################################################################
+
+# By domain:
+#
+{ -block }
+adv[io]*.  # (for advogato.org and advice.*)
+adsl.      # (has nothing to do with ads)
+ad[ud]*.   # (adult.* and add.*)
+.edu       # (universities don't host banners (yet!))
+.*loads.   # (downloads, uploads etc)
+
+# By path:
+#
+/.*loads/
+
+# Site-specific:
+#
+www.globalintersec.com/adv # (adv = advanced)
+www.ugu.com/sui/ugu/adv
+
 
 Filtering source code can have nasty side effects, so make an exception for our
 friends at sourceforge.net, and all paths with "cvs" in them. Note that -filter
 disables all filters in one fell swoop!
 
 
 Filtering source code can have nasty side effects, so make an exception for our
 friends at sourceforge.net, and all paths with "cvs" in them. Note that -filter
 disables all filters in one fell swoop!
 
-# Don't filter code!                                                           
-#                                                                              
-{ -filter }                                                                    
-/.*cvs                                                                         
-.sourceforge.net                                                               
+# Don't filter code!
+#
+{ -filter }
+/.*cvs
+.sourceforge.net
+
 
 The actual default.action is of course more comprehensive, but we hope this
 example made clear how it works.
 
 The actual default.action is of course more comprehensive, but we hope this
 example made clear how it works.
@@ -3492,84 +3661,147 @@ and you'll probably want to install updated versions from time to time.
 So let's look at a few examples of things that one might typically do in
 user.action:
 
 So let's look at a few examples of things that one might typically do in
 user.action:
 
-# My user.action file. <fred@foobar.com>                                       
+# My user.action file. <fred@foobar.com>
+
 
 As aliases are local to the actions file that they are defined in, you can't
 use the ones from default.action, unless you repeat them here:
 
 
 As aliases are local to the actions file that they are defined in, you can't
 use the ones from default.action, unless you repeat them here:
 
-# (Re-)define aliases for this file:                                                        
-#                                                                                           
-{{alias}}                                                                                   
--crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies                     
-mercy-for-cookies   = -crunch-all-cookies -session-cookies-only                             
-fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups 
-shop        = mercy-for-cookies -filter{popups} -kill-popups                                
-allow-ads   = -block -filter{banners-by-size} # (see below)                                 
+# Aliases are local to the file they are defined in.
+# (Re-)define aliases for this file:
+#
+{{alias}}
+#
+# These aliases just save typing later, and the alias names should
+# be self explanatory.
+#
++crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
+-crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
+ allow-all-cookies  = -crunch-all-cookies -session-cookies-only
+ allow-popups       = -filter{all-popups} -kill-popups
++block-as-image     = +block +handle-as-image
+-block-as-image     = -block
+
+# These aliases define combinations of actions that are useful for
+# certain types of sites:
+#
+fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referrer -kill-popups
+shop        = -crunch-all-cookies allow-popups
+
+# Allow ads for selected useful free sites:
+#
+allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}
+
 
 Say you have accounts on some sites that you visit regularly, and you don't
 want to have to log in manually each time. So you'd like to allow persistent
 
 Say you have accounts on some sites that you visit regularly, and you don't
 want to have to log in manually each time. So you'd like to allow persistent
-cookies for these sites. The mercy-for-cookies alias defined above does exactly
-that, i.e. it disables crunching of cookies in any direction, and processing of
-cookies to make them temporary.
+cookies for these sites. The allow-all-cookies alias defined above does exactly
+that, i.e. it disables crunching of cookies in any direction, and the
+processing of cookies to make them only temporary.
+
+{ allow-all-cookies }
+sourceforge.net
+sunsolve.sun.com
+.slashdot.org
+.yahoo.com
+.msdn.microsoft.com
+.redhat.com
+
+
+Your bank is allergic to some filter, but you don't know which, so you disable
+them all:
+
+{ -filter }
+.your-home-banking-site.com
+
+
+Some file types you may not want to filter for various reasons:
+
+# Technical documentation is likely to contain strings that might
+# erroneously get altered by the JavaScript-oriented filters:
+#
+.tldp.org
+/(.*/)?selfhtml/
 
 
-{ mercy-for-cookies }                                                          
-sunsolve.sun.com                                                               
-slashdot.org                                                                   
-.yahoo.com                                                                     
-.msdn.microsoft.com                                                            
-.redhat.com                                                                    
+# And this stupid host sends streaming video with a wrong MIME type,
+# so that Privoxy thinks it is getting HTML and starts filtering:
+#
+stupid-server.example.com/
 
 
-Your bank needs popups and is allergic to some filter, but you don't know
-which, so you disable them all:
 
 
-{ -filter -kill-popups }                                                       
-.your-home-banking-site.com                                                    
+Example of a simple block action. Say you've seen an ad on your favourite page
+on example.com that you want to get rid of. You have right-clicked the image,
+selected "copy image location" and pasted the URL below while removing the
+leading http://, into a { +block } section. Note that { +handle-as-image } need
+not be specified, since all URLs ending in .gif will be tagged as images by the
+general rules as set in default.action anyway:
 
 
-While browsing the web with Privoxy you noticed some ads that sneaked through,
-but you were too lazy to report them through our fine and easy feedback system,
-so you have added them here:
+{ +block }
+www.example.com/nasty-ads/sponsor.gif
+another.popular.site.net/more/junk/here/
 
 
-{ +block }                                                                     
-www.a-popular-site.com/some/unobvious/path                                     
-another.popular.site.net/more/junk/here/                                       
 
 
-Note that, assuming the banners in the above example have regular image
-extensions (most do), +handle-as-image need not be specified, since all URLs
-ending in these extensions will already have been tagged as images in the
-relevant section of default.action by now.
+The URLs of dynamically generated banners, especially from large banner farms,
+often don't use the well-known image file name extensions, which makes it
+impossible for Privoxy to guess the file type just by looking at the URL. You
+can use the +block-as-image alias defined above for these cases. Note that
+objects which match this rule but then turn out NOT to be an image are
+typically rendered as a "broken image" icon by the browser. Use cautiously.
 
 
-Then you noticed that the default configuration breaks Forbes Magazine, but you
+{ +block-as-image }
+.doubleclick.net
+/Realmedia/ads/
+ar.atwola.com/
+
+
+Now you noticed that the default configuration breaks Forbes Magazine, but you
 were too lazy to find out which action is the culprit, and you were again too
 lazy to give feedback, so you just used the fragile alias on the site, and --
 were too lazy to find out which action is the culprit, and you were again too
 lazy to give feedback, so you just used the fragile alias on the site, and --
-whoa! -- it worked:
+whoa! -- it worked. The fragile aliases disables those actions that are most
+likely to break a site. Also, good for testing purposes to see if it is Privoxy
+that is causing the problem or not.
+
+{ fragile }
+.forbes.com
 
 
-{ fragile }                                                                    
-.forbes.com                                                                    
 
 You like the "fun" text replacements in default.filter, but it is disabled in
 the distributed actions file. (My colleagues on the team just don't have a
 sense of humour, that's why! ;-). So you'd like to turn it on in your private,
 update-safe config, once and for all:
 
 
 You like the "fun" text replacements in default.filter, but it is disabled in
 the distributed actions file. (My colleagues on the team just don't have a
 sense of humour, that's why! ;-). So you'd like to turn it on in your private,
 update-safe config, once and for all:
 
-{ +filter{fun} }                                                               
-/ # For ALL sites!                                                             
+{ +filter{fun} }
+/ # For ALL sites!
+
 
 Note that the above is not really a good idea: There are exceptions to the
 filters in default.action for things that really shouldn't be filtered, like
 code on CVS->Web interfaces. Since user.action has the last word, these
 exceptions won't be valid for the "fun" filtering specified here.
 
 
 Note that the above is not really a good idea: There are exceptions to the
 filters in default.action for things that really shouldn't be filtered, like
 code on CVS->Web interfaces. Since user.action has the last word, these
 exceptions won't be valid for the "fun" filtering specified here.
 
-Finally, you might think about how your favourite free websites are funded, and
+You might also worry about how your favourite free websites are funded, and
 find that they rely on displaying banner advertisements to survive. So you
 might want to specifically allow banners for those sites that you feel provide
 value to you:
 
 find that they rely on displaying banner advertisements to survive. So you
 might want to specifically allow banners for those sites that you feel provide
 value to you:
 
-{ allow-ads }                                                                  
-.sourceforge.net                                                               
-.slashdot.org                                                                  
-.osdn.net                                                                      
+{ allow-ads }
+.sourceforge.net
+.slashdot.org
+.osdn.net
+
+
+Note that allow-ads has been aliased to -block, -filter{banners-by-size}, and -
+filter{banners-by-link} above.
+
+user.action is generally the best place to define exceptions and additions to
+the default policies of default.action. Some actions are safe to have their
+default policies set here though. So let's set a default policy to have a
+"blank" image as opposed to the checkerboard pattern for ALL sites. "/" of
+course matches all URL paths and patterns:
+
+{ +set-image-blocker{blank} }
+/ # ALL sites
 
 
-Note that allow-ads has been aliased to -block -filter{banners-by-size} above.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -3585,17 +3817,17 @@ without navigation tools, the infamous <BLINK> tag etc, to suppress images with
 certain width and height attributes (standard banner sizes or web-bugs), or
 just to have fun. The possibilities are endless.
 
 certain width and height attributes (standard banner sizes or web-bugs), or
 just to have fun. The possibilities are endless.
 
-Filtering works on any text-based document type, including plain text, HTML,
-JavaScript, CSS etc. (all text/* MIME types). Substitutions are made at the
-source level, so if you want to "roll your own" filters, you should be familiar
-with HTML syntax.
+Filtering works on any text-based document type, including HTML, JavaScript,
+CSS etc. (all text/* MIME types, except text/plain). Substitutions are made at
+the source level, so if you want to "roll your own" filters, you should be
+familiar with HTML syntax.
 
 Just like the actions files, the filter file is organized in sections, which
 are called filters here. Each filter consists of a heading line, that starts
 with the keyword FILTER:, followed by the filter's name, and a short (one line)
 description of what it does. Below that line come the jobs, i.e. lines that
 define the actual text substitutions. By convention, the name of a filter
 
 Just like the actions files, the filter file is organized in sections, which
 are called filters here. Each filter consists of a heading line, that starts
 with the keyword FILTER:, followed by the filter's name, and a short (one line)
 description of what it does. Below that line come the jobs, i.e. lines that
 define the actual text substitutions. By convention, the name of a filter
-should describe what the filter eliminates. The comment is used in the 
+should describe what the filter eliminates. The comment is used in the
 web-based user interface.
 
 Once a filter called name has been defined in the filter file, it can be
 web-based user interface.
 
 Once a filter called name has been defined in the filter file, it can be
@@ -3603,7 +3835,8 @@ invoked by using an action of the form +filter{name} in any actions file.
 
 A filter header line for a filter called "foo" could look like this:
 
 
 A filter header line for a filter called "foo" could look like this:
 
-FILTER: foo Replace all "foo" with "bar"                                       
+FILTER: foo Replace all "foo" with "bar"
+
 
 Below that line, and up to the next header line, come the jobs that define what
 text replacements the filter executes. They are specified in a syntax that
 
 Below that line, and up to the next header line, come the jobs that define what
 text replacements the filter executes. They are specified in a syntax that
@@ -3612,7 +3845,7 @@ this to be quite intuitive, and may want to look at the PCRS man page for the
 subtle differences to Perl behaviour. Most notably, the non-standard option
 letter U is supported, which turns the default to ungreedy matching.
 
 subtle differences to Perl behaviour. Most notably, the non-standard option
 letter U is supported, which turns the default to ungreedy matching.
 
-If you are new to regular expressions, you might want to take a look at the 
+If you are new to regular expressions, you might want to take a look at the
 Appendix on regular expressions, and see the Perl manual for the s///
 operator's syntax and Perl-style regular expressions in general. The below
 examples might also help to get you started.
 Appendix on regular expressions, and see the Perl manual for the s///
 operator's syntax and Perl-style regular expressions in general. The below
 examples might also help to get you started.
@@ -3625,28 +3858,32 @@ Now, let's complete our "foo" filter. We have already defined the heading, but
 the jobs are still missing. Since all it does is to replace "foo" with "bar",
 there is only one (trivial) job needed:
 
 the jobs are still missing. Since all it does is to replace "foo" with "bar",
 there is only one (trivial) job needed:
 
-s/foo/bar/                                                                     
+s/foo/bar/
+
 
 But wait! Didn't the comment say that all occurrences of "foo" should be
 replaced? Our current job will only take care of the first "foo" on each page.
 For global substitution, we'll need to add the g option:
 
 
 But wait! Didn't the comment say that all occurrences of "foo" should be
 replaced? Our current job will only take care of the first "foo" on each page.
 For global substitution, we'll need to add the g option:
 
-s/foo/bar/g                                                                    
+s/foo/bar/g
+
 
 Our complete filter now looks like this:
 
 
 Our complete filter now looks like this:
 
-FILTER: foo Replace all "foo" with "bar"                                       
-s/foo/bar/g                                                                    
+FILTER: foo Replace all "foo" with "bar"
+s/foo/bar/g
+
 
 Let's look at some real filters for more interesting examples. Here you see a
 filter that protects against some common annoyances that arise from JavaScript
 abuse. Let's look at its jobs one after the other:
 
 
 Let's look at some real filters for more interesting examples. Here you see a
 filter that protects against some common annoyances that arise from JavaScript
 abuse. Let's look at its jobs one after the other:
 
-FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse                         
-                                                                                                
-# Get rid of JavaScript referrer tracking. Test page: http://www.randomoddness.com/untitled.htm 
-#                                                                                               
-s|(<script.*)document\.referrer(.*</script>)|$1"Not Your Business!"$2|Usg                       
+FILTER: js-annoyances Get rid of particularly annoying JavaScript abuse
+
+# Get rid of JavaScript referrer tracking. Test page: http://www.randomoddness.com/untitled.htm
+#
+s|(<script.*)document\.referrer(.*</script>)|$1"Not Your Business!"$2|Usg
+
 
 Following the header line and a comment, you see the job. Note that it uses |
 as the delimiter instead of /, because the pattern contains a forward slash,
 
 Following the header line and a comment, you see the job. Note that it uses |
 as the delimiter instead of /, because the pattern contains a forward slash,
@@ -3677,8 +3914,8 @@ parentheses: The portions of the page matched by sub-patterns that are enclosed
 in parentheses, will be remembered and be available through the variables $1,
 $2, ... in the substitute. The U option switches to ungreedy matching, which
 means that the first .* in the pattern will only "eat up" all text in between "
 in parentheses, will be remembered and be available through the variables $1,
 $2, ... in the substitute. The U option switches to ungreedy matching, which
 means that the first .* in the pattern will only "eat up" all text in between "
-<script" and the first occurrence of "document.referrer", and that the second .
-* will only span the text up to the first "</script>" tag. Furthermore, the s
+<script" and the first occurrence of "document.referrer", and that the second
+.* will only span the text up to the first "</script>" tag. Furthermore, the s
 option says that the match may span multiple lines in the page, and the g
 option again means that the substitution is global.
 
 option says that the match may span multiple lines in the page, and the g
 option again means that the substitution is global.
 
@@ -3703,9 +3940,10 @@ referrer information anymore.
 We'll show you two other jobs from the JavaScript taming department, but this
 time only point out the constructs of special interest:
 
 We'll show you two other jobs from the JavaScript taming department, but this
 time only point out the constructs of special interest:
 
-# The status bar is for displaying link targets, not pointless blahblah        
-#                                                                              
-s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig                                  
+# The status bar is for displaying link targets, not pointless blahblah
+#
+s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig
+
 
 \s stands for whitespace characters (space, tab, newline, carriage return, form
 feed), so that \s* means: "zero or more whitespace". The ? in .*? makes this
 
 \s stands for whitespace characters (space, tab, newline, carriage return, form
 feed), so that \s* means: "zero or more whitespace". The ? in .*? makes this
@@ -3722,9 +3960,10 @@ scripts). Thus, it catches many cases where e.g. pointless descriptions are
 displayed in the status bar instead of the link target when you move your mouse
 over links.
 
 displayed in the status bar instead of the link target when you move your mouse
 over links.
 
-# Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html 
-#                                                                                    
-s/(<body [^>]*)onunload(.*>)/$1never$2/iU                                            
+# Kill OnUnload popups. Yummy. Test: http://www.zdnet.com/zdsubs/yahoo/tree/yfs.html
+#
+s/(<body [^>]*)onunload(.*>)/$1never$2/iU
+
 
 Including the OnUnload event binding in the HTML DOM was a CRIME. When I close
 a browser window, I want it to close and die. Basta. This job replaces the
 
 Including the OnUnload event binding in the HTML DOM was a CRIME. When I close
 a browser window, I want it to close and die. Basta. This job replaces the
@@ -3737,31 +3976,33 @@ content does.
 
 The last example is from the fun department:
 
 
 The last example is from the fun department:
 
-FILTER: fun Fun text replacements                                              
-                                                                               
-# Spice the daily news:                                                        
-#                                                                              
-s/microsoft(?!\.com)/MicroSuck/ig                                              
+FILTER: fun Fun text replacements
+
+# Spice the daily news:
+#
+s/microsoft(?!\.com)/MicroSuck/ig
+
 
 Note the (?!\.com) part (a so-called negative lookahead) in the job's pattern,
 which means: Don't match, if the string ".com" appears directly following
 "microsoft" in the page. This prevents links to microsoft.com from being
 trashed, while still replacing the word everywhere else.
 
 
 Note the (?!\.com) part (a so-called negative lookahead) in the job's pattern,
 which means: Don't match, if the string ".com" appears directly following
 "microsoft" in the page. This prevents links to microsoft.com from being
 trashed, while still replacing the word everywhere else.
 
-# Buzzword Bingo (example for extended regex syntax)                           
-#                                                                              
-s* industry[ -]leading \                                                       
-|  cutting[ -]edge \                                                           
-|  customer[ -]focused \                                                       
-|  market[ -]driven \                                                          
-|  award[ -]winning # Comments are OK, too! \                                  
-|  high[ -]performance \                                                       
-|  solutions[ -]based \                                                        
-|  unmatched \                                                                 
-|  unparalleled \                                                              
-|  unrivalled \                                                                
-*<font color="red"><b>BINGO!</b></font> \                                      
-*igx                                                                           
+# Buzzword Bingo (example for extended regex syntax)
+#
+s* industry[ -]leading \
+|  cutting[ -]edge \
+|  customer[ -]focused \
+|  market[ -]driven \
+|  award[ -]winning # Comments are OK, too! \
+|  high[ -]performance \
+|  solutions[ -]based \
+|  unmatched \
+|  unparalleled \
+|  unrivalled \
+*<font color="red"><b>BINGO!</b></font> \
+*igx
+
 
 The x option in this job turns on extended syntax, and allows for e.g. the
 liberal use of (non-interpreted!) whitespace for nicer formatting.
 
 The x option in this job turns on extended syntax, and allows for e.g. the
 liberal use of (non-interpreted!) whitespace for nicer formatting.
@@ -3770,6 +4011,194 @@ You get the idea?
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
+9.2. The Pre-defined Filters
+
+The distribution default.filter file contains a selection of pre-defined
+filters for your convenience:
+
+js-annoyances
+
+    The purpose of this filter is to get rid of particularly annoying
+    JavaScript abuse. To that end, it
+
+      + replaces JavaScript references to the browser's referrer information
+        with the string "Not Your Business!". This compliments the
+        hide-referrer action on the content level.
+
+      + removes the bindings to the DOM's unload event which we feel has no
+        right to exist and is responsible for most "exit consoles", i.e. nasty
+        windows that pop up when you close another one.
+
+      + removes code that causes new windows to be opened with undesired
+        properties, such as being full-screen, non-resizable, without location,
+        status or menu bar etc.
+
+js-events
+
+    This is a very radical measure. It removes virtually all JavaScript event
+    bindings, which means that scripts can not react to user actions such as
+    mouse movements or clicks, window resizing etc, anymore.
+
+    We strongly discourage using this filter as a default since it breaks many
+    legitimate scripts. It is meant for use only on extra-nasty sites (should
+    you really need to go there).
+
+html-annoyances
+
+    This filter will undo many common instances of HTML based abuse.
+
+    The BLINK and MARQUEE tags are neutralized (yeah baby!), and browser
+    windows will be created as resizable (as of course they should be!), and
+    will have location, scroll and menu bars -- even if specified otherwise.
+
+content-cookies
+
+    Most cookies are set in the HTTP dialogue, where they can be intercepted by
+    the crunch-incoming-cookies and crunch-outgoing-cookies actions. But web
+    sites increasingly make use of HTML meta tags and JavaScript to sneak
+    cookies to the browser on the content level.
+
+    This filter disables HTML and JavaScript code that reads or sets cookies.
+    Use it wherever you would also use the cookie crunch actions.
+
+refresh tags
+
+    Disable any refresh tags if the interval is greater than nine seconds (so
+    that redirections done via refresh tags are not destroyed). This is useful
+    for dial-on-demand setups, or for those who find this HTML feature
+    annoying.
+
+unsolicited-popups
+
+    This filter attempts to prevent only "unsolicited" pop-up windows from
+    opening, yet still allow pop-up windows that the user has explicitly chosen
+    to open. It was added in version 3.0.1, as an improvement over earlier such
+    filters.
+
+    Technical note: The filter works by redefining the window.open JavaScript
+    function to a dummy function during the loading and rendering phase of each
+    HTML page access, and restoring the function afterwards.
+
+all-popups
+
+    Attempt to prevent all pop-up windows from opening. Note this should be
+    used with more discretion than the above, since it is more likely to break
+    some sites that require pop-ups for normal usage. Use with caution.
+
+img-reorder
+
+    This is a helper filter that has no value if used alone. It makes the
+    banners-by-size and banners-by-link (see below) filters more effective and
+    should be enabled together with them.
+
+banners-by-size
+
+    This filter removes image tags purely based on what size they are.
+    Fortunately for us, many ads and banner images tend to conform to certain
+    standardized sizes, which makes this filter quite effective for ad
+    stripping purposes.
+
+    Occasionally this filter will cause false positives on images that are not
+    ads, but just happen to be of one of the standard banner sizes.
+
+banners-by-link
+
+    This is an experimental filter that attempts to kill any banners if their
+    URLs seem to point to known or suspected click trackers. It is currently
+    not of much value and is not recommended for use by default.
+
+webbugs
+
+    Webbugs are small, invisible images (technically 1X1 GIF images), that are
+    used to track users across websites, and collect information on them. As an
+    HTML page is loaded by the browser, an embedded image tag causes the
+    browser to contact a third-party site, disclosing the tracking information
+    through the requested URL and/or cookies for that third-party domain,
+    without the use ever becoming aware of the interaction with the third-party
+    site. HTML-ized spam also uses a similar technique to verify email
+    addresses.
+
+    This filter removes the HTML code that loads such "webbugs".
+
+tiny-textforms
+
+    A rather special-purpose filter that can be used to enlarge textareas
+    (those multi-line text boxes in web forms) and turn off hard word wrap in
+    them. It was written for the sourceforge.net tracker system where such
+    boxes are a nuisance, but it can be handy on other sites, too.
+
+    It is not recommended to use this filter as a default.
+
+jumping-windows
+
+    Many consider windows that move, or resize themselves to be abusive. This
+    filter neutralizes the related JavaScript code. Note that some sites might
+    not display or behave as intended when using this filter.
+
+frameset-borders
+
+    Some web designers seem to assume that everyone in the world will view
+    their web sites using the same browser brand and version, screen resolution
+    etc, because only that assumption could explain why they'd use static frame
+    sizes, yet prevent their frames from being resized by the user, should they
+    be too small to show their whole content.
+
+    This filter removes the related HTML code. It should only be applied to
+    sites which need it.
+
+demoronizer
+
+    Many Microsoft products that generate HTML use non-standard extensions
+    (read: violations) of the ISO 8859-1 aka Latin-1 character set. This causes
+    those HTML documents to display with errors on standard-compliant
+    platforms.
+
+    This filter translates the MS-only characters into Latin-1 equivalents. It
+    is not necessary when using MS products, and will cause corruption of all
+    documents that use 8-bit character sets other than Latin-1. It's mostly
+    worthwhile for Europeans on non-MS platforms, if wierd garbage characters
+    sometimes appear on some pages.
+
+shockwave-flash
+
+    A filter for shockwave haters. As the name suggests, this filter strips
+    code out of web pages that is used to embed shockwave flash objects.
+
+quicktime-kioskmode
+
+    Change HTML code that embeds Quicktime objects so that kioskmode, which
+    prevents saving, is disabled.
+
+fun
+
+    Text replacements for subversive browsing fun. Make fun of your favorite
+    Monopolist or play buzzword bingo.
+
+crude-parental
+
+    A demonstration-only filter that shows how Privoxy can be used to delete
+    web content on a keyword basis.
+
+ie-exploits
+
+    A collection of text replacements to disable malicious HTML and JavaScript
+    code that exploits known security holes in Internet Explorer.
+
+    Presently, it only protects against Nimda and a cross-site scripting bug,
+    and would need active maintenance to provide more substantial protection.
+
+site-specifics
+
+    Some web sites have very specific problems, the cure for which doesn't
+    apply anywhere else, or could even cause damage on other sites.
+
+    This is a collection of such site-specific cures which should only be
+    applied to the sites they were intended for, which is what the supplied
+    default.action file does. Users shouldn't need to change anything regarding
+    this filter.
+
+-------------------------------------------------------------------------------
+
 10. Templates
 
 All Privoxy built-in pages, i.e. error pages such as the "404 - No Such Domain"
 10. Templates
 
 All Privoxy built-in pages, i.e. error pages such as the "404 - No Such Domain"
@@ -3798,17 +4227,19 @@ HTML code disappear when a specific symbol is set. We use this for many
 purposes, one of them being to include the beta warning in all our user
 interface (CGI) pages when Privoxy in in an alpha or beta development stage:
 
 purposes, one of them being to include the beta warning in all our user
 interface (CGI) pages when Privoxy in in an alpha or beta development stage:
 
-<!-- @if-unstable-start -->                                                    
-                                                                               
-  ... beta warning HTML code goes here ...                                     
-                                                                               
-<!-- if-unstable-end@ -->                                                      
+<!-- @if-unstable-start -->
+
+  ... beta warning HTML code goes here ...
+
+<!-- if-unstable-end@ -->
+
 
 If the "unstable" symbol is set, everything in between and including
 @if-unstable-start and if-unstable-end@ will disappear, leaving nothing but an
 empty comment:
 
 
 If the "unstable" symbol is set, everything in between and including
 @if-unstable-start and if-unstable-end@ will disappear, leaving nothing but an
 empty comment:
 
-<!--  -->                                                                      
+<!--  -->
+
 
 There's also an if-then-else construct and an #include mechanism, but you'll
 sure find out if you are inclined to edit the templates ;-)
 
 There's also an if-then-else construct and an #include mechanism, but you'll
 sure find out if you are inclined to edit the templates ;-)
@@ -3829,7 +4260,7 @@ with the best support:
 
 11.1. Get Support
 
 
 11.1. Get Support
 
-For casual users, our support forum at SourceForge is probably best suited: 
+For casual users, our support forum at SourceForge is probably best suited:
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
 http://sourceforge.net/tracker/?group_id=11118&atid=211118
 
 All users are of course welcome to discuss their issues on the users mailing
@@ -3852,7 +4283,7 @@ debugging. If you are using your own custom configuration, please try the stock
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
 configs to see if the problem is configuration related.
 
 If not using the latest version, chances are that the bug has been found and
-fixed in the meantime. We would appreciate if you could take the time to 
+fixed in the meantime. We would appreciate if you could take the time to
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
 upgrade to the latest version (or even the latest CVS snapshot) and verify your
 bug, but this is not required for reporting.
 
@@ -3892,7 +4323,7 @@ group_id=11118.
 
 12. Privoxy Copyright, License and History
 
 
 12. Privoxy Copyright, License and History
 
-Copyright © 2001, 2002 by Privoxy Developers <developers@privoxy.org>
+Copyright © 2001 - 2004 by Privoxy Developers <developers@privoxy.org>
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
 
 Some source code is based on code Copyright © 1997 by Anonymous Coders and
 Junkbusters, Inc. and licensed under the GNU General Public License.
@@ -3923,7 +4354,7 @@ this program; if not, write to the
 
 12.2. History
 
 
 12.2. History
 
-In the beginning, there was the Internet Junkbuster, by Anonymous Coders and 
+In the beginning, there was the Internet Junkbuster, by Anonymous Coders and
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
 Junkbusters Corporation. It saved many users a lot of pain in the early days of
 web advertising and user tracking.
 
@@ -3946,37 +4377,44 @@ Then, some developers picked up the thread, and started turning the software
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
 inside out, upside down, and then reassembled it, adding many new features
 along the way.
 
-The result of this is Privoxy, whose first stable release, 3.0, was released
+The result of this is Privoxy, whose first stable version, 3.0, was released
 August, 2002.
 
 -------------------------------------------------------------------------------
 
 12.3. Authors
 
 August, 2002.
 
 -------------------------------------------------------------------------------
 
 12.3. Authors
 
-Current Project Developers:
+Current Developement Team:
 
 
- Jon Foster
+ Hal Burgiss (docs)
  Andreas Oesterhelt
  Andreas Oesterhelt
- Stefan Waldherr
+ David Schmidt (OS/2, Mac OSX ports)
  
  
- Thomas Steudten
- Rodney Stromlund
 
 
-Current Project Contributors:
 
 
+Current and Former Project Contributors:
+
+ Johny Agotnes 
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
- Hal Burgiss (docs)
+ Brian Dessent
+ Mattes Dolak 
+ Jon Foster
  Karsten Hopp (Red Hat)
  Alexander Lazic
  Karsten Hopp (Red Hat)
  Alexander Lazic
+ Daniel Leite
  Gábor Lipták
  Gábor Lipták
- Guy
+ Adam Lock (Win32)
+ Guy Laroche
  Haroon Rafique
  Roland Rosenfeld (Debian)
  Georg Sauthoff (Gentoo)
  Haroon Rafique
  Roland Rosenfeld (Debian)
  Georg Sauthoff (Gentoo)
- David Schmidt (OS/2, Mac OSX ports)
+ Thomas Steudten
  Joerg Strohmayer (Amiga)
  Joerg Strohmayer (Amiga)
+ Rodney Stromlund
+ Sviatoslav Sviridov
  Sarantis Paskalis
  Sarantis Paskalis
+ Stefan Waldherr
 
 Based in part on code originally developed by:
 
 
 Based in part on code originally developed by:
 
@@ -3992,12 +4430,14 @@ suggestions. These include (in alphabetical order):
  Andrew J. Caines
  Clifford Caoile
  Michael T. Davis
  Andrew J. Caines
  Clifford Caoile
  Michael T. Davis
+ Brian Dessent
  Peter E
  Aaron Hamid
  Magnus Holmgren
  Peter E
  Aaron Hamid
  Magnus Holmgren
- Daniel Leite
+ Don Libes  
  Paul Lieverse
  David Mediavilla 
  Paul Lieverse
  David Mediavilla 
+ Oliver Stoeneberg
  Roberto Ragusa
  Maynard Riley
  Bart Schelstraete
  Roberto Ragusa
  Maynard Riley
  Bart Schelstraete
@@ -4014,30 +4454,30 @@ http://www.privoxy.org/, the Privoxy Home page.
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
 
 http://www.privoxy.org/faq/, the Privoxy FAQ.
 
-http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on       
-SourceForge.                                                                   
+http://sourceforge.net/projects/ijbswa/, the Project Page for Privoxy on
+SourceForge.
 
 
-http://config.privoxy.org/, the web-based user interface. Privoxy must be      
-running for this to work. Shortcut: http://p.p/                                
+http://config.privoxy.org/, the web-based user interface. Privoxy must be
+running for this to work. Shortcut: http://p.p/
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
 
 http://www.privoxy.org/actions/, to submit "misses" to the developers.
 
-http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun   
-ideas from Privoxy users.                                                      
+http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ijbswa/contrib/, cool and fun
+ideas from Privoxy users.
 
 
-http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are  
-used to track web users.                                                       
+http://www.junkbusters.com/ht/en/cookies.html, an explanation how cookies are
+used to track web users.
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
 
 http://www.junkbusters.com/ijb.html, the original Internet Junkbuster.
 
-http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,  
-from which Privoxy was derived.                                                
+http://www.waldherr.org/junkbuster/, Stefan Waldherr's version of Junkbuster,
+from which Privoxy was derived.
 
 
-http://privacy.net/analyze/, a useful site to check what information about you 
-is leaked while you browse the web.                                            
+http://privacy.net/analyze/, a useful site to check what information about you
+is leaked while you browse the web.
 
 
-http://www.squid-cache.org/, a very popular caching proxy, which is often used 
-together with Privoxy.                                                         
+http://www.squid-cache.org/, a very popular caching proxy, which is often used
+together with Privoxy.
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
 
 http://www.privoxy.org/developer-manual/, the Privoxy developer manual.
 
@@ -4078,7 +4518,7 @@ examples:
 . - Matches any single character, e.g. "a", "A", "4", ":", or "@".
 
 ? - The preceding character or expression is matched ZERO or ONE times. Either/
 . - Matches any single character, e.g. "a", "A", "4", ":", or "@".
 
 ? - The preceding character or expression is matched ZERO or ONE times. Either/
-or.                                                                            
+or.
 
 + - The preceding character or expression is matched ONE or MORE times.
 
 
 + - The preceding character or expression is matched ONE or MORE times.
 
@@ -4086,29 +4526,29 @@ or.
 
 \ - The "escape" character denotes that the following character should be taken
 literally. This is used where one of the special characters (e.g. ".") needs to
 
 \ - The "escape" character denotes that the following character should be taken
 literally. This is used where one of the special characters (e.g. ".") needs to
-be taken literally and not as a special meta-character. Example: "example      
-\.com", makes sure the period is recognized only as a period (and not expanded 
-to its meta-character meaning of any single character).                        
+be taken literally and not as a special meta-character. Example: "example
+\.com", makes sure the period is recognized only as a period (and not expanded
+to its meta-character meaning of any single character).
 
 
-[] - Characters enclosed in brackets will be matched if any of the enclosed    
-characters are encountered. For instance, "[0-9]" matches any numeric digit    
-(zero through nine). As an example, we can combine this with "+" to match any  
-digit one of more times: "[0-9]+".                                             
+[] - Characters enclosed in brackets will be matched if any of the enclosed
+characters are encountered. For instance, "[0-9]" matches any numeric digit
+(zero through nine). As an example, we can combine this with "+" to match any
+digit one of more times: "[0-9]+".
 
 
-() - parentheses are used to group a sub-expression, or multiple               
-sub-expressions.                                                               
+() - parentheses are used to group a sub-expression, or multiple
+sub-expressions.
 
 
-| - The "bar" character works like an "or" conditional statement. A match is   
-successful if the sub-expression on either side of "|" matches. As an example: 
-"/(this|that) example/" uses grouping and the bar character and would match    
-either "this example" or "that example", and nothing else.                     
+| - The "bar" character works like an "or" conditional statement. A match is
+successful if the sub-expression on either side of "|" matches. As an example:
+"/(this|that) example/" uses grouping and the bar character and would match
+either "this example" or "that example", and nothing else.
 
 These are just some of the ones you are likely to use when matching URLs with
 Privoxy, and is a long way from a definitive list. This is enough to get us
 started with a few simple examples which may be more illuminating:
 
 
 These are just some of the ones you are likely to use when matching URLs with
 Privoxy, and is a long way from a definitive list. This is enough to get us
 started with a few simple examples which may be more illuminating:
 
-/.*/banners/.* - A simple example that uses the common combination of "." and "
-*" to denote any character, zero or more times. In other words, any string at
+/.*/banners/.* - A simple example that uses the common combination of "." and
+"*" to denote any character, zero or more times. In other words, any string at
 all. So we start with a literal forward slash, then our regular expression
 pattern (".*") another literal forward slash, the string "banners", another
 forward slash, and lastly another ".*". We are building a directory path here.
 all. So we start with a literal forward slash, then our regular expression
 pattern (".*") another literal forward slash, the string "banners", another
 forward slash, and lastly another ".*". We are building a directory path here.
@@ -4180,48 +4620,48 @@ Since Privoxy proxies each requested web page, it is easy for Privoxy to trap
 certain special URLs. In this way, we can talk directly to Privoxy, and see how
 it is configured, see how our rules are being applied, change these rules and
 other configuration options, and even turn Privoxy's filtering off, all with a
 certain special URLs. In this way, we can talk directly to Privoxy, and see how
 it is configured, see how our rules are being applied, change these rules and
 other configuration options, and even turn Privoxy's filtering off, all with a
-web browser. 
+web browser.
 
 The URLs listed below are the special ones that allow direct access to Privoxy.
 Of course, Privoxy must be running to access these. If not, you will get a
 friendly error message. Internet access is not necessary either.
 
   * Privoxy main page:
 
 The URLs listed below are the special ones that allow direct access to Privoxy.
 Of course, Privoxy must be running to access these. If not, you will get a
 friendly error message. Internet access is not necessary either.
 
   * Privoxy main page:
-   
+
         http://config.privoxy.org/
         http://config.privoxy.org/
-       
+
     There is a shortcut: http://p.p/ (But it doesn't provide a fall-back to a
     real page, in case the request is not sent through Privoxy)
     There is a shortcut: http://p.p/ (But it doesn't provide a fall-back to a
     real page, in case the request is not sent through Privoxy)
-   
+
   * Show information about the current configuration, including viewing and
     editing of actions files:
   * Show information about the current configuration, including viewing and
     editing of actions files:
-   
+
         http://config.privoxy.org/show-status
         http://config.privoxy.org/show-status
-       
+
   * Show the source code version numbers:
   * Show the source code version numbers:
-   
+
         http://config.privoxy.org/show-version
         http://config.privoxy.org/show-version
-       
+
   * Show the browser's request headers:
   * Show the browser's request headers:
-   
+
         http://config.privoxy.org/show-request
         http://config.privoxy.org/show-request
-       
+
   * Show which actions apply to a URL and why:
   * Show which actions apply to a URL and why:
-   
+
         http://config.privoxy.org/show-url-info
         http://config.privoxy.org/show-url-info
-       
+
   * Toggle Privoxy on or off. In this case, "Privoxy" continues to run, but
     only as a pass-through proxy, with no actions taking place:
   * Toggle Privoxy on or off. In this case, "Privoxy" continues to run, but
     only as a pass-through proxy, with no actions taking place:
-   
+
         http://config.privoxy.org/toggle
         http://config.privoxy.org/toggle
-       
+
     Short cuts. Turn off, then on:
     Short cuts. Turn off, then on:
-   
+
         http://config.privoxy.org/toggle?set=disable
         http://config.privoxy.org/toggle?set=disable
-       
+
         http://config.privoxy.org/toggle?set=enable
         http://config.privoxy.org/toggle?set=enable
-       
-These may be bookmarked for quick reference. See next. 
+
+These may be bookmarked for quick reference. See next.
 
 -------------------------------------------------------------------------------
 
 
 -------------------------------------------------------------------------------
 
@@ -4241,18 +4681,18 @@ bar (IE) or the "Personal Toolbar" (Netscape), and run them with a single
 click.
 
   * Privoxy - Enable
 click.
 
   * Privoxy - Enable
-   
+
   * Privoxy - Disable
   * Privoxy - Disable
-   
+
   * Privoxy - Toggle Privoxy (Toggles between enabled and disabled)
   * Privoxy - Toggle Privoxy (Toggles between enabled and disabled)
-   
+
   * Privoxy- View Status
   * Privoxy- View Status
-   
+
   * Privoxy - Submit Actions File Feedback
   * Privoxy - Submit Actions File Feedback
-   
+
   * Privoxy - Why?
   * Privoxy - Why?
-   
-Credit: The site which gave us the general idea for these bookmarklets is 
+
+Credit: The site which gave us the general idea for these bookmarklets is
 www.bookmarklets.com. They have more information about bookmarklets.
 
 -------------------------------------------------------------------------------
 www.bookmarklets.com. They have more information about bookmarklets.
 
 -------------------------------------------------------------------------------
@@ -4265,40 +4705,40 @@ requested by your browser and Privoxy is on duty:
   * First, your web browser requests a web page. The browser knows to send the
     request to Privoxy, which will in turn, relay the request to the remote web
     server after passing the following tests:
   * First, your web browser requests a web page. The browser knows to send the
     request to Privoxy, which will in turn, relay the request to the remote web
     server after passing the following tests:
-   
+
   * Privoxy traps any request for its own internal CGI pages (e.g http://p.p/)
     and sends the CGI page back to the browser.
   * Privoxy traps any request for its own internal CGI pages (e.g http://p.p/)
     and sends the CGI page back to the browser.
-   
+
   * Next, Privoxy checks to see if the URL matches any "+block" patterns. If
     so, the URL is then blocked, and the remote web server will not be
     contacted. "+handle-as-image" is then checked and if it does not match, an
     HTML "BLOCKED" page is sent back. Otherwise, if it does match, an image is
     returned. The type of image depends on the setting of "+set-image-blocker"
     (blank, checkerboard pattern, or an HTTP redirect to an image elsewhere).
   * Next, Privoxy checks to see if the URL matches any "+block" patterns. If
     so, the URL is then blocked, and the remote web server will not be
     contacted. "+handle-as-image" is then checked and if it does not match, an
     HTML "BLOCKED" page is sent back. Otherwise, if it does match, an image is
     returned. The type of image depends on the setting of "+set-image-blocker"
     (blank, checkerboard pattern, or an HTTP redirect to an image elsewhere).
-   
+
   * Untrusted URLs are blocked. If URLs are being added to the trust file, then
     that is done.
   * Untrusted URLs are blocked. If URLs are being added to the trust file, then
     that is done.
-   
+
   * If the URL pattern matches the "+fast-redirects" action, it is then
     processed. Unwanted parts of the requested URL are stripped.
   * If the URL pattern matches the "+fast-redirects" action, it is then
     processed. Unwanted parts of the requested URL are stripped.
-   
+
   * Now the rest of the client browser's request headers are processed. If any
     of these match any of the relevant actions (e.g. "+hide-user-agent", etc.),
     headers are suppressed or forged as determined by these actions and their
     parameters.
   * Now the rest of the client browser's request headers are processed. If any
     of these match any of the relevant actions (e.g. "+hide-user-agent", etc.),
     headers are suppressed or forged as determined by these actions and their
     parameters.
-   
+
   * Now the web server starts sending its response back (i.e. typically a web
     page and related data).
   * Now the web server starts sending its response back (i.e. typically a web
     page and related data).
-   
+
   * First, the server headers are read and processed to determine, among other
     things, the MIME type (document type) and encoding. The headers are then
   * First, the server headers are read and processed to determine, among other
     things, the MIME type (document type) and encoding. The headers are then
-    filtered as determined by the "+crunch-incoming-cookies", 
+    filtered as determined by the "+crunch-incoming-cookies",
     "+session-cookies-only", and "+downgrade-http-version" actions.
     "+session-cookies-only", and "+downgrade-http-version" actions.
-   
+
   * If the "+kill-popups" action applies, and it is an HTML or JavaScript
     document, the popup-code in the response is filtered on-the-fly as it is
     received.
   * If the "+kill-popups" action applies, and it is an HTML or JavaScript
     document, the popup-code in the response is filtered on-the-fly as it is
     received.
-   
+
   * If a "+filter" or "+deanimate-gifs" action applies (and the document type
     fits the action), the rest of the page is read into memory (up to a
     configurable limit). Then the filter rules (from default.filter) are
   * If a "+filter" or "+deanimate-gifs" action applies (and the document type
     fits the action), the rest of the page is read into memory (up to a
     configurable limit). Then the filter rules (from default.filter) are
@@ -4307,17 +4747,17 @@ requested by your browser and Privoxy is on duty:
     are reduced to either the first or last frame, depending on the action
     setting.The entire page, which is now filtered, is then sent by Privoxy
     back to your browser.
     are reduced to either the first or last frame, depending on the action
     setting.The entire page, which is now filtered, is then sent by Privoxy
     back to your browser.
-   
+
     If neither "+filter" or "+deanimate-gifs" matches, then Privoxy passes the
     raw data through to the client browser as it becomes available.
     If neither "+filter" or "+deanimate-gifs" matches, then Privoxy passes the
     raw data through to the client browser as it becomes available.
-   
+
   * As the browser receives the now (probably filtered) page content, it reads
     and then requests any URLs that may be embedded within the page source,
     e.g. ad images, stylesheets, JavaScript, other HTML documents (e.g.
     frames), sounds, etc. For each of these objects, the browser issues a new
     request. And each such request is in turn processed as above. Note that a
     complex web page may have many such embedded URLs.
   * As the browser receives the now (probably filtered) page content, it reads
     and then requests any URLs that may be embedded within the page source,
     e.g. ad images, stylesheets, JavaScript, other HTML documents (e.g.
     frames), sounds, etc. For each of these objects, the browser issues a new
     request. And each such request is in turn processed as above. Note that a
     complex web page may have many such embedded URLs.
-   
+
 -------------------------------------------------------------------------------
 
 14.4. Anatomy of an Action
 -------------------------------------------------------------------------------
 
 14.4. Anatomy of an Action
@@ -4352,50 +4792,51 @@ and grab the URL.
 
 Let's try an example, google.com, and look at it one section at a time:
 
 
 Let's try an example, google.com, and look at it one section at a time:
 
- Matches for http://google.com:                                                
-                                                                               
- In file: default.action [ View ] [ Edit ]                                     
-                                                                               
-{-add-header                                                                   
- -block                                                                        
- -crunch-outgoing-cookies                                                      
- -crunch-incoming-cookies                                                      
- +deanimate-gifs{last}                                                         
- -downgrade-http-version                                                       
- +fast-redirects                                                               
- -filter{popups}                                                               
- -filter{fun}                                                                  
- -filter{shockwave-flash}                                                      
- -filter{crude-parental}                                                       
- +filter{html-annoyances}                                                      
- +filter{js-annoyances}                                                        
- +filter{content-cookies}                                                      
- +filter{webbugs}                                                              
- +filter{refresh-tags}                                                         
- +filter{nimda}                                                                
- +filter{banners-by-size}                                                      
- +hide-forwarded-for-headers                                                   
- +hide-from-header{block}                                                      
- +hide-referer{forge}                                                          
- -hide-user-agent                                                              
- -handle-as-image                                                              
- -kill-popups                                                                  
- -limit-connect                                                                
- +prevent-compression                                                          
- -send-vanilla-wafer                                                           
- -send-wafer                                                                   
- +session-cookies-only                                                         
- +set-image-blocker{pattern} }                                                 
-/                                                                              
-                                                                               
- { -session-cookies-only }                                                     
- .google.com                                                                   
-                                                                               
- { -fast-redirects }                                                           
- .google.com                                                                   
-                                                                               
-In file: user.action [ View ] [ Edit ]                                         
-(no matches in this file)                                                      
+ Matches for http://google.com:
+
+ In file: default.action [ View ] [ Edit ]
+
+{-add-header
+ -block
+ -crunch-outgoing-cookies
+ -crunch-incoming-cookies
+ +deanimate-gifs{last}
+ -downgrade-http-version
+ +fast-redirects
+ -filter{popups}
+ -filter{fun}
+ -filter{shockwave-flash}
+ -filter{crude-parental}
+ +filter{html-annoyances}
+ +filter{js-annoyances}
+ +filter{content-cookies}
+ +filter{webbugs}
+ +filter{refresh-tags}
+ +filter{nimda}
+ +filter{banners-by-size}
+ +hide-forwarded-for-headers
+ +hide-from-header{block}
+ +hide-referer{forge}
+ -hide-user-agent
+ -handle-as-image
+ -kill-popups
+ -limit-connect
+ +prevent-compression
+ -send-vanilla-wafer
+ -send-wafer
+ +session-cookies-only
+ +set-image-blocker{pattern} }
+/
+
+ { -session-cookies-only }
+ .google.com
+
+ { -fast-redirects }
+ .google.com
+
+In file: user.action [ View ] [ Edit ]
+(no matches in this file)
+
 
 This tells us how we have defined our "actions", and which ones match for our
 example, "google.com". The first listing is any matches for the standard.action
 
 This tells us how we have defined our "actions", and which ones match for our
 example, "google.com". The first listing is any matches for the standard.action
@@ -4421,54 +4862,56 @@ actions defined somewhere in the lower part of our default.action file, and
 Then, for our user.action file, we again have no hits.
 
 And finally we pull it all together in the bottom section and summarize how
 Then, for our user.action file, we again have no hits.
 
 And finally we pull it all together in the bottom section and summarize how
-Privoxy is applying all its "actions" to "google.com": 
-
- Final results:                                                                
-                                                                               
- -add-header                                                                   
- -block                                                                        
- -crunch-outgoing-cookies                                                      
- -crunch-incoming-cookies                                                      
- +deanimate-gifs{last}                                                         
- -downgrade-http-version                                                       
- -fast-redirects                                                               
- -filter{popups}                                                               
- -filter{fun}                                                                  
- -filter{shockwave-flash}                                                      
- -filter{crude-parental}                                                       
- +filter{html-annoyances}                                                      
- +filter{js-annoyances}                                                        
- +filter{content-cookies}                                                      
- +filter{webbugs}                                                              
- +filter{refresh-tags}                                                         
- +filter{nimda}                                                                
- +filter{banners-by-size}                                                      
- +hide-forwarded-for-headers                                                   
- +hide-from-header{block}                                                      
- +hide-referer{forge}                                                          
- -hide-user-agent                                                              
- -handle-as-image                                                              
- -kill-popups                                                                  
- -limit-connect                                                                
- +prevent-compression                                                          
- -send-vanilla-wafer                                                           
- -send-wafer                                                                   
- -session-cookies-only                                                         
- +set-image-blocker{pattern}                                                   
+Privoxy is applying all its "actions" to "google.com":
+
+ Final results:
+
+ -add-header
+ -block
+ -crunch-outgoing-cookies
+ -crunch-incoming-cookies
+ +deanimate-gifs{last}
+ -downgrade-http-version
+ -fast-redirects
+ -filter{popups}
+ -filter{fun}
+ -filter{shockwave-flash}
+ -filter{crude-parental}
+ +filter{html-annoyances}
+ +filter{js-annoyances}
+ +filter{content-cookies}
+ +filter{webbugs}
+ +filter{refresh-tags}
+ +filter{nimda}
+ +filter{banners-by-size}
+ +hide-forwarded-for-headers
+ +hide-from-header{block}
+ +hide-referer{forge}
+ -hide-user-agent
+ -handle-as-image
+ -kill-popups
+ -limit-connect
+ +prevent-compression
+ -send-vanilla-wafer
+ -send-wafer
+ -session-cookies-only
+ +set-image-blocker{pattern}
+
 
 Notice the only difference here to the previous listing, is to "fast-redirects"
 and "session-cookies-only".
 
 Now another example, "ad.doubleclick.net":
 
 
 Notice the only difference here to the previous listing, is to "fast-redirects"
 and "session-cookies-only".
 
 Now another example, "ad.doubleclick.net":
 
- { +block +handle-as-image }                                                   
-  .ad.doubleclick.net                                                          
-                                                                               
- { +block +handle-as-image }                                                   
-  ad*.                                                                         
-                                                                               
- { +block +handle-as-image }                                                   
-  .doubleclick.net                                                             
+ { +block +handle-as-image }
+  .ad.doubleclick.net
+
+ { +block +handle-as-image }
+  ad*.
+
+ { +block +handle-as-image }
+  .doubleclick.net
+
 
 We'll just show the interesting part here, the explicit matches. It is matched
 three different times. Each as an "+block +handle-as-image", which is the
 
 We'll just show the interesting part here, the explicit matches. It is matched
 three different times. Each as an "+block +handle-as-image", which is the
@@ -4480,55 +4923,57 @@ Any one of these would have done the trick and blocked this as an unwanted
 image. This is unnecessarily redundant since the last case effectively would
 also cover the first. No point in taking chances with these guys though ;-)
 Note that if you want an ad or obnoxious URL to be invisible, it should be
 image. This is unnecessarily redundant since the last case effectively would
 also cover the first. No point in taking chances with these guys though ;-)
 Note that if you want an ad or obnoxious URL to be invisible, it should be
-defined as "ad.doubleclick.net" is done here -- as both a "+block" and an 
+defined as "ad.doubleclick.net" is done here -- as both a "+block" and an
 "+handle-as-image". The custom alias "+imageblock" just simplifies the process
 and make it more readable.
 
 One last example. Let's try "http://www.rhapsodyk.net/adsl/HOWTO/". This one is
 giving us problems. We are getting a blank page. Hmmm ...
 
 "+handle-as-image". The custom alias "+imageblock" just simplifies the process
 and make it more readable.
 
 One last example. Let's try "http://www.rhapsodyk.net/adsl/HOWTO/". This one is
 giving us problems. We are getting a blank page. Hmmm ...
 
- Matches for http://www.rhapsodyk.net/adsl/HOWTO/:                             
-                                                                               
- In file: default.action [ View ] [ Edit ]                                     
-                                                                               
- {-add-header                                                                  
-  -block                                                                       
-  -crunch-incoming-cookies                                                     
-  -crunch-outgoing-cookies                                                     
-  +deanimate-gifs                                                              
-  -downgrade-http-version                                                      
-  +fast-redirects                                                              
-  +filter{html-annoyances}                                                     
-  +filter{js-annoyances}                                                       
-  +filter{kill-popups}                                                         
-  +filter{webbugs}                                                             
-  +filter{nimda}                                                               
-  +filter{banners-by-size}                                                     
-  +filter{hal}                                                                 
-  +filter{fun}                                                                 
-  +hide-forwarded-for-headers                                                  
-  +hide-from-header{block}                                                     
-  +hide-referer{forge}                                                         
-  -hide-user-agent                                                             
-  -handle-as-image                                                             
-  +kill-popups                                                                 
-  +prevent-compression                                                         
-  -send-vanilla-wafer                                                          
-  -send-wafer                                                                  
-  +session-cookies-only                                                        
-  +set-image-blocker{blank} }                                                  
-   /                                                                           
-                                                                               
- { +block +handle-as-image }                                                   
-  /ads                                                                         
+ Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
+
+ In file: default.action [ View ] [ Edit ]
+
+ {-add-header
+  -block
+  -crunch-incoming-cookies
+  -crunch-outgoing-cookies
+  +deanimate-gifs
+  -downgrade-http-version
+  +fast-redirects
+  +filter{html-annoyances}
+  +filter{js-annoyances}
+  +filter{kill-popups}
+  +filter{webbugs}
+  +filter{nimda}
+  +filter{banners-by-size}
+  +filter{hal}
+  +filter{fun}
+  +hide-forwarded-for-headers
+  +hide-from-header{block}
+  +hide-referer{forge}
+  -hide-user-agent
+  -handle-as-image
+  +kill-popups
+  +prevent-compression
+  -send-vanilla-wafer
+  -send-wafer
+  +session-cookies-only
+  +set-image-blocker{blank} }
+   /
+
+ { +block +handle-as-image }
+  /ads
+
 
 Ooops, the "/adsl/" is matching "/ads"! But we did not want this at all! Now we
 see why we get the blank page. We could now add a new action below this that
 explicitly does not block ("{-block}") paths with "adsl". There are various
 ways to handle such exceptions. Example:
 
 
 Ooops, the "/adsl/" is matching "/ads"! But we did not want this at all! Now we
 see why we get the blank page. We could now add a new action below this that
 explicitly does not block ("{-block}") paths with "adsl". There are various
 ways to handle such exceptions. Example:
 
- { -block }                                                                    
-  /adsl                                                                        
+ { -block }
+  /adsl
+
 
 Now the page displays ;-) Be sure to flush your browser's caches when making
 such changes. Or, try using Shift+Reload.
 
 Now the page displays ;-) Be sure to flush your browser's caches when making
 such changes. Or, try using Shift+Reload.
@@ -4536,8 +4981,9 @@ such changes. Or, try using Shift+Reload.
 But now what about a situation where we get no explicit matches like we did
 with:
 
 But now what about a situation where we get no explicit matches like we did
 with:
 
- { +block +handle-as-image }                                                   
- /ads                                                                          
+ { +block +handle-as-image }
+ /ads
+
 
 That actually was very telling and pointed us quickly to where the problem was.
 If you don't get this kind of match, then it means one of the default rules in
 
 That actually was very telling and pointed us quickly to where the problem was.
 If you don't get this kind of match, then it means one of the default rules in
@@ -4547,18 +4993,20 @@ cause would be one of the "{+filter}" actions. These tend to be harder to
 troubleshoot. Try adding the URL for the site to one of aliases that turn off
 "+filter":
 
 troubleshoot. Try adding the URL for the site to one of aliases that turn off
 "+filter":
 
- {shop}                                                                        
- .quietpc.com                                                                  
- .worldpay.com   # for quietpc.com                                             
- .jungle.com                                                                   
- .scan.co.uk                                                                   
- .forbes.com                                                                   
+ {shop}
+ .quietpc.com
+ .worldpay.com   # for quietpc.com
+ .jungle.com
+ .scan.co.uk
+ .forbes.com
+
 
 "{shop}" is an "alias" that expands to "{ -filter -session-cookies-only }". Or
 
 "{shop}" is an "alias" that expands to "{ -filter -session-cookies-only }". Or
-you could do your own exception to negate filtering: 
+you could do your own exception to negate filtering:
+
+ {-filter}
+ .forbes.com
 
 
- {-filter}                                                                     
- .forbes.com                                                                   
 
 This would turn off all filtering for that site. This would probably be most
 appropriately put in user.action, for local site exceptions.
 
 This would turn off all filtering for that site. This would probably be most
 appropriately put in user.action, for local site exceptions.
index 65ca715..c6ba857 100755 (executable)
@@ -2,15 +2,36 @@
 <html>
  <!--
 
 <html>
  <!--
 
-  File :  $Source: /cvsroot/ijbswa//current/doc/webserver/actions/index.php,v $
+  File :  $Source: /cvsroot/ijbswa/current/doc/webserver/actions/index.php,v $
 
   Purpose  :  Submit form for actions file feedback (step 1)
               This file belongs in
               ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
 
 
   Purpose  :  Submit form for actions file feedback (step 1)
               This file belongs in
               ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
 
-  $Id: index.php,v 1.25 2002/04/29 17:30:20 oes Exp $
+  $Id: index.php,v 1.25.2.7 2004/01/30 17:16:44 oes Exp $
 
   $Log: index.php,v $
 
   $Log: index.php,v $
+  Revision 1.25.2.7  2004/01/30 17:16:44  oes
+  Require AF 1.8
+
+  Revision 1.25.2.6  2003/11/30 11:39:52  oes
+  Fixed typo
+
+  Revision 1.25.2.5  2003/09/01 15:20:45  oes
+  Require AF 1.7
+
+  Revision 1.25.2.4  2003/03/19 14:00:20  oes
+  Require AF 1.6
+
+  Revision 1.25.2.3  2002/08/27 16:33:39  oes
+  Require AF 1.5 & Privoxy 3.0
+
+  Revision 1.25.2.2  2002/08/06 08:39:09  oes
+  Require AF 1.4; link to new AF download location
+
+  Revision 1.25.2.1  2002/07/27 18:47:49  oes
+  Require Privoxy 2.9.16 and AF 1.3
+
   Revision 1.25  2002/04/29 17:30:20  oes
   Fixed BML link text
 
   Revision 1.25  2002/04/29 17:30:20  oes
   Fixed BML link text
 
 /*
  * Config:
  */
 /*
  * Config:
  */
-$required_actions_file_version = "1.5";
+$required_actions_file_version = "1.8";
 $required_privoxy_version = "3.0";
 $required_privoxy_version = "3.0";
-$actions_file_download = "http://sourceforge.net/project/showfiles.php?group_id=11118&release_id=107430";
+$actions_file_download = "http://sourceforge.net/project/showfiles.php?group_id=11118&release_id=147447";
 $submit_target = "http://www.oesterhelt.org/actions/step2.php";
 
 
 $submit_target = "http://www.oesterhelt.org/actions/step2.php";
 
 
@@ -199,16 +220,17 @@ $headers = getallheaders();
 if (!isset($headers["X-Actions-File-Version"]) || $headers["X-Actions-File-Version"] != $required_actions_file_version)
 {
 
 if (!isset($headers["X-Actions-File-Version"]) || $headers["X-Actions-File-Version"] != $required_actions_file_version)
 {
 
-   error_abort("invalid", "<p>As much as we welcome your feedback, please note that
-               we can only accept problem reports based on:
+   error_abort("invalid", "<p><b>Thank you for using <a href=\"http://www.privoxy.org/\" target=\"_blank\">Privoxy</a>'s
+               feedback reporting mechanism!</b> However, in order to make optimal use of our limited development resources,
+               we regret that we can at this time only accept problem reports based on:
                </p>
                <ul>
                 <li><a href=\"http://www.privoxy.org/\" target=\"_blank\">Privoxy</a> version $required_privoxy_version or later</li>
                </p>
                <ul>
                 <li><a href=\"http://www.privoxy.org/\" target=\"_blank\">Privoxy</a> version $required_privoxy_version or later</li>
-                <li><a href=\"$actions_file_download\">Actionsfile</a> version $required_actions_file_version</li>
+                <li><a href=\"$actions_file_download\">Actionsfile</a> version version $required_actions_file_version</li>
                </ul>
                <p>We hope you will understand that we feel unable to maintain concurrent versions of the file.</p>
                </ul>
                <p>We hope you will understand that we feel unable to maintain concurrent versions of the file.</p>
-               <p><i>Hint: To upgrade your actions file, follow the above link, then save as default.action, overwriting 
-                  the old copy in your Privoxy config directory</i>
+               <p><i>Hint: To upgrade your actions file, follow the above link to download the file, then save as
+                  default.action in your Privoxy config directory</i>
                </p>");
 }
 
                </p>");
 }
 
@@ -262,7 +284,7 @@ if (!isset($headers["X-Actions-File-Version"]) || $headers["X-Actions-File-Versi
         <option selected value="INVALID">Please select...</option>
         <option value="P1">An advertisment was NOT blocked</option>
         <option value="P2">An innocent image WAS blocked</option>
         <option selected value="INVALID">Please select...</option>
         <option value="P1">An advertisment was NOT blocked</option>
         <option value="P2">An innocent image WAS blocked</option>
-        <option value="P3">The whole page was erraneously blocked</option>
+        <option value="P3">The whole page was erroneously blocked</option>
         <option value="P4">The page needs popups but they don't work</option>
         <option value="P5">Other problem</option>
        </select>
         <option value="P4">The page needs popups but they don't work</option>
         <option value="P5">Other problem</option>
        </select>
index 5949a7e..e75678c 100644 (file)
@@ -2,7 +2,7 @@
 <html>
  <!--
 
 <html>
  <!--
 
-  File :  $Source: /cvsroot/ijbswa//current/doc/webserver/actions/step3.php,v $
+  File :  $Source: /cvsroot/ijbswa/current/doc/webserver/actions/step3.php,v $
 
   Purpose  :  Submit form for actions file feedback (step 1)
               This file belongs in
 
   Purpose  :  Submit form for actions file feedback (step 1)
               This file belongs in
   $Id: step3.php,v 1.16.2.2 2002/08/23 16:46:05 oes Exp $
 
   $Log: step3.php,v $
   $Id: step3.php,v 1.16.2.2 2002/08/23 16:46:05 oes Exp $
 
   $Log: step3.php,v $
+  Revision 1.16.2.2  2002/08/23 16:46:05  oes
+  Adapt to master file format
+
+  Revision 1.16.2.1  2002/08/23 12:25:31  oes
+  Fixed Typo
+
   Revision 1.16  2002/04/13 14:34:59  oes
   Include unique ID in tracker and log; Include URL in tracker summary; add more newlines in tracker
 
   Revision 1.16  2002/04/13 14:34:59  oes
   Include unique ID in tracker and log; Include URL in tracker summary; add more newlines in tracker
 
index f7ef30e..0ae60c5 100644 (file)
@@ -8,7 +8,7 @@
                  This file belongs in
                  ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
 
                  This file belongs in
                  ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
 
-  $Id: index.php,v 1.3 2002/04/03 19:41:11 swa Exp $
+  $Id: index.php,v 1.4.2.3 2003/10/16 13:40:52 oes Exp $
 
   Written by and Copyright (C) 2001 the SourceForge
   Privoxy team. http://www.privoxy.org/
 
   Written by and Copyright (C) 2001 the SourceForge
   Privoxy team. http://www.privoxy.org/
 
 -->
 
 
 -->
 
-<html><head>
-<title>Privoxy not running</title>
-    <link rel="stylesheet" type="text/css" href="../p_web.css">
+<html>
+<head>
+  <title>Privoxy is not being used</title>
+  <link rel="stylesheet" type="text/css" href="../p_web.css">
+  <meta http-equiv="cache-control" content="no-cache">
+  <meta http-equiv="expires" content="0">
 </head>
 
 <body>
 
 </head>
 
 <body>
 
-<h1>Privoxy isn't working</h1>
-
-<p>If you were redirected to this page, it means that you aren't using
-<a href="http://privoxy.org/">Privoxy</a>. &nbsp; Please check your browser settings.</p>
-
-<p>Until version 2.9.13, Privoxy was also known as Internet
+<h1><a href="http://privoxy.org/">Privoxy</a> is not being used</h1>
+
+<p>The fact that you are reading this page shows that Privoxy was
+not used in the process of accessing it. Had the request been
+made through Privoxy, it would have been intercepted and you
+would be looking at Privoxy's web-based user interface now.</p>
+
+<p><b>So what went wrong?</b> Chances are (in this order) that:</p>
+
+<ul>
+<li><p>this page is in your browser's cache. You've once been here
+before starting to use Privoxy, and now your browser thinks that
+it already knows the content of this page. Hence it doesn't request
+a fresh copy.</p>
+<p>Force your browser to do that. With most browsers, clicking "reload"
+while holding down the shift key (shift-reloading) should suffice, but
+you might need to manually clear the browser's cache (both memory and
+disk cache).</p>
+
+<li><p>your browser is not set up to use Privoxy.</p>
+<p> Check your browser's proxy settings and make sure that it uses
+127.0.0.1, port 8118 (or, if you did a custom configuration, whatever
+different values you used).</p></li>
+
+<li><p>when using multiple proxies in a chain, that either the chain
+is broken at some point before Privoxy, or that an earlier proxy 
+serves this page from its cache.</p>
+<p>Shift-reload, clear all caches, and if the problem still persists,
+trace the proxy chain starting with your browser's settings. Please
+refer to the
+<a href="http://www.privoxy.org/user-manual/config.html#FORWARDING">forwarding
+chapter</a> of the <a href="http://www.privoxy.org/user-manual/">user
+manual</a> for details.</p></li>
+</ul>
+
+<p><small>Until version 2.9.13, Privoxy was also known as Internet
 Junkbuster. If you recently upgraded, then the web-based interface has
 moved - it is now at <a
 href="http://config.privoxy.org/">http://config.privoxy.org/</a>
 (Short form: <a href="http://ijbswa.sourceforge.net/config/">p.p</a>
 Junkbuster. If you recently upgraded, then the web-based interface has
 moved - it is now at <a
 href="http://config.privoxy.org/">http://config.privoxy.org/</a>
 (Short form: <a href="http://ijbswa.sourceforge.net/config/">p.p</a>
-[Privoxy Proxy]).</p>
+[Privoxy Proxy]).</small></p>
 
 
-<p>Please see the <a href="http://privoxy.org/">Privoxy home page</a>.</p>
+<p>If you have read the <a href="http://www.privoxy.org/user-manual/">user
+manual</a> and still have trouble, feel free to <a
+href="http://sourceforge.net/tracker/?group_id=11118&atid=211118">submit
+a support request</a> to get help.</p>
 
 </body>
 </html>
 
 </body>
 </html>
-
diff --git a/doc/webserver/default_page.php b/doc/webserver/default_page.php
deleted file mode 100644 (file)
index 75a4fdc..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-// Default Web Page for groups that haven't setup their page yet
-// Please replace this file with your own website
-//
-// $Id: default_page.php,v 1.2 2000/01/07 18:11:56 precision Exp $
-//
-$headers = getallheaders();
-?>
-<HTML>
-<HEAD>
-<TITLE>SourceForge: Welcome</TITLE>
-<LINK rel="stylesheet" href="http://sourceforge.net/sourceforge.css" type="text/css">
-</HEAD>
-
-<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
-
-<!-- top strip -->
-<TABLE width="100%" border=0 cellspacing=0 cellpadding=2 bgcolor="737b9c">
-  <TR>
-    <TD><SPAN class=maintitlebar>&nbsp;&nbsp;
-      <A class=maintitlebar href="http://sourceforge.net/"><B>Home</B></A> | 
-      <A class=maintitlebar href="http://sourceforge.net/about.php"><B>About</B></A> | 
-      <A class=maintitlebar href="http://sourceforge.net/partners.php"><B>Partners</B></a> |
-      <A class=maintitlebar href="http://sourceforge.net/contact.php"><B>Contact Us</B></A></SPAN></TD>
-    </TD>
-  </TR>
-</TABLE>
-<!-- end top strip -->
-
-<!-- top title table -->
-<TABLE width="100%" border=0 cellspacing=0 cellpadding=0 bgcolor="" valign="center">
-  <TR valign="top" bgcolor="#eeeef8">
-    <TD>
-      <A href="http://sourceforge.net/"><IMG src="http://sourceforge.net/images/sflogo2-steel.png" vspace="0" border=0 width="143" height="70"></A>
-    </TD>
-    <TD width="99%"><!-- right of logo -->
-      <a href="http://www.valinux.com"><IMG src="http://sourceforge.net/images/valogo3.png" align="right" alt="VA Linux Systems" hspace="5" vspace="0" border=0 width="117" height="70"></A>
-    </TD><!-- right of logo -->
-  </TR>
-  <TR><TD bgcolor="#543a48" colspan=2><IMG src="http://sourceforge.net/images/blank.gif" height=2 vspace=0></TD></TR>
-</TABLE>
-<!-- end top title table -->
-
-<!-- center table -->
-<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="#FFFFFF" align="center">
-  <TR>
-    <TD>
-      <CENTER><BR>
-      <H1>Welcome to http://<?php print $headers[Host]; ?>/</H1>
-      <P>We're Sorry but this Project hasn't yet uploaded their personal webpage yet.<BR>
-      Please check back soon for updates or visit <A href="http://sourceforge.net/">SourceForge</A></P><BR>
-      </CENTER>
-    </TD>
-  </TR>
-</TABLE>
-<!-- end center table -->
-
-<!-- footer table -->
-<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c">
-  <TR>
-    <TD align="center"><FONT color="#ffffff"><SPAN class="titlebar">
-      All trademarks and copyrights on this page are properties of their respective owners. Forum comments are owned by the poster. The rest is copyright ©1999-2000 VA Linux Systems, Inc.</SPAN></FONT>
-    </TD>
-  </TR>
-</TABLE>
-
-<!-- end footer table -->
-</BODY>
-</HTML>
index ca973e3..fead798 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Coding Guidelines</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Coding Guidelines</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,13 +73,17 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="CODING">4. Coding Guidelines</H1
+NAME="CODING"
+>4. Coding Guidelines</A
+></H1
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
-NAME="S1">4.1. Introduction</H2
+NAME="S1"
+>4.1. Introduction</A
+></H2
 ><P
 >This set of standards is designed to make our lives easier.  It is
     developed with the simple goal of helping us keep the "new and improved
 ><P
 >This set of standards is designed to make our lives easier.  It is
     developed with the simple goal of helping us keep the "new and improved
@@ -100,13 +104,17 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="S2">4.2. Using Comments</H2
+NAME="S2"
+>4.2. Using Comments</A
+></H2
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S3">4.2.1. Comment, Comment, Comment</H3
+NAME="S3"
+>4.2.1. Comment, Comment, Comment</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -168,7 +176,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S4">4.2.2. Use blocks for comments</H3
+NAME="S4"
+>4.2.2. Use blocks for comments</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -240,7 +250,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S5">4.2.3. Keep Comments on their own line</H3
+NAME="S5"
+>4.2.3. Keep Comments on their own line</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -317,7 +329,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S6">4.2.4. Comment each logical step</H3
+NAME="S6"
+>4.2.4. Comment each logical step</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -344,7 +358,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S7">4.2.5. Comment All Functions Thoroughly</H3
+NAME="S7"
+>4.2.5. Comment All Functions Thoroughly</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -372,8 +388,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S8">4.2.6. Comment at the end of braces if the
-    content is more than one screen length</H3
+NAME="S8"
+>4.2.6. Comment at the end of braces if the
+    content is more than one screen length</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -433,13 +451,17 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="S9">4.3. Naming Conventions</H2
+NAME="S9"
+>4.3. Naming Conventions</A
+></H2
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S10">4.3.1. Variable Names</H3
+NAME="S10"
+>4.3.1. Variable Names</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -503,7 +525,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S11">4.3.2. Function Names</H3
+NAME="S11"
+>4.3.2. Function Names</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -568,7 +592,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S12">4.3.3. Header file prototypes</H3
+NAME="S12"
+>4.3.3. Header file prototypes</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -631,7 +657,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S13">4.3.4. Enumerations, and #defines</H3
+NAME="S13"
+>4.3.4. Enumerations, and #defines</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -705,7 +733,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S14">4.3.5. Constants</H3
+NAME="S14"
+>4.3.5. Constants</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -775,13 +805,17 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="S15">4.4. Using Space</H2
+NAME="S15"
+>4.4. Using Space</A
+></H2
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S16">4.4.1. Put braces on a line by themselves.</H3
+NAME="S16"
+>4.4.1. Put braces on a line by themselves.</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -885,8 +919,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S17">4.4.2. ALL control statements should have a
-    block</H3
+NAME="S17"
+>4.4.2. ALL control statements should have a
+    block</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -955,8 +991,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S18">4.4.3. Do not belabor/blow-up boolean
-    expressions</H3
+NAME="S18"
+>4.4.3. Do not belabor/blow-up boolean
+    expressions</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1005,8 +1043,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S19">4.4.4. Use white space freely because it is
-    free</H3
+NAME="S19"
+>4.4.4. Use white space freely because it is
+    free</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1051,8 +1091,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S20">4.4.5. Don't use white space around structure
-    operators</H3
+NAME="S20"
+>4.4.5. Don't use white space around structure
+    operators</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1106,8 +1148,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S21">4.4.6. Make the last brace of a function stand
-    out</H3
+NAME="S21"
+>4.4.6. Make the last brace of a function stand
+    out</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1178,7 +1222,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S22">4.4.7. Use 3 character indentions</H3
+NAME="S22"
+>4.4.7. Use 3 character indentions</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1238,13 +1284,17 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="S23">4.5. Initializing</H2
+NAME="S23"
+>4.5. Initializing</A
+></H2
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S24">4.5.1. Initialize all variables</H3
+NAME="S24"
+>4.5.1. Initialize all variables</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1307,14 +1357,18 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="S25">4.6. Functions</H2
+NAME="S25"
+>4.6. Functions</A
+></H2
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S26">4.6.1. Name functions that return a boolean as a
-    question.</H3
+NAME="S26"
+>4.6.1. Name functions that return a boolean as a
+    question.</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1354,8 +1408,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S27">4.6.2. Always specify a return type for a
-    function.</H3
+NAME="S27"
+>4.6.2. Always specify a return type for a
+    function.</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1375,8 +1431,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S28">4.6.3. Minimize function calls when iterating by
-    using variables</H3
+NAME="S28"
+>4.6.3. Minimize function calls when iterating by
+    using variables</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1472,7 +1530,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S29">4.6.4. Pass and Return by Const Reference</H3
+NAME="S29"
+>4.6.4. Pass and Return by Const Reference</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1500,7 +1560,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S30">4.6.5. Pass and Return by Value</H3
+NAME="S30"
+>4.6.5. Pass and Return by Value</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1523,7 +1585,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S31">4.6.6. Names of include files</H3
+NAME="S31"
+>4.6.6. Names of include files</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1599,8 +1663,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S32">4.6.7. Provide multiple inclusion
-    protection</H3
+NAME="S32"
+>4.6.7. Provide multiple inclusion
+    protection</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1646,7 +1712,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S33">4.6.8. Use `extern "C"` when appropriate</H3
+NAME="S33"
+>4.6.8. Use `extern "C"` when appropriate</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1694,8 +1762,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S34">4.6.9. Where Possible, Use Forward Struct
-    Declaration Instead of Includes</H3
+NAME="S34"
+>4.6.9. Where Possible, Use Forward Struct
+    Declaration Instead of Includes</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1758,13 +1828,17 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="S35">4.7. General Coding Practices</H2
+NAME="S35"
+>4.7. General Coding Practices</A
+></H2
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S36">4.7.1. Turn on warnings</H3
+NAME="S36"
+>4.7.1. Turn on warnings</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1783,8 +1857,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S37">4.7.2. Provide a default case for all switch
-    statements</H3
+NAME="S37"
+>4.7.2. Provide a default case for all switch
+    statements</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1869,8 +1945,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S38">4.7.3. Try to avoid falling through cases in a
-    switch statement.</H3
+NAME="S38"
+>4.7.3. Try to avoid falling through cases in a
+    switch statement.</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1901,8 +1979,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S39">4.7.4. Use 'long' or 'short' Instead of
-    'int'</H3
+NAME="S39"
+>4.7.4. Use 'long' or 'short' Instead of
+    'int'</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1932,7 +2012,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S40">4.7.5. Don't mix size_t and other types</H3
+NAME="S40"
+>4.7.5. Don't mix size_t and other types</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -1954,8 +2036,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S41">4.7.6. Declare each variable and struct on its
-    own line.</H3
+NAME="S41"
+>4.7.6. Declare each variable and struct on its
+    own line.</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -2036,7 +2120,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S42">4.7.7. Use malloc/zalloc sparingly</H3
+NAME="S42"
+>4.7.7. Use malloc/zalloc sparingly</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -2078,8 +2164,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S43">4.7.8. The Programmer Who Uses 'malloc' is
-    Responsible for Ensuring 'free'</H3
+NAME="S43"
+>4.7.8. The Programmer Who Uses 'malloc' is
+    Responsible for Ensuring 'free'</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -2145,8 +2233,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S44">4.7.9. Add loaders to the `file_list' structure
-    and in order</H3
+NAME="S44"
+>4.7.9. Add loaders to the `file_list' structure
+    and in order</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -2176,8 +2266,10 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="S45">4.7.10. "Uncertain" new code and/or changes to
-    existing code, use FIXME</H3
+NAME="S45"
+>4.7.10. "Uncertain" new code and/or changes to
+    existing code, use FIXME</A
+></H3
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -2222,8 +2314,10 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="S46">4.8. Addendum: Template for files and function
-    comment blocks:</H2
+NAME="S46"
+>4.8. Addendum: Template for files and function
+    comment blocks:</A
+></H2
 ><P
 ><SPAN
 CLASS="emphasis"
 ><P
 ><SPAN
 CLASS="emphasis"
@@ -2240,10 +2334,10 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="PROGRAMLISTING"
 ><TD
 ><PRE
 CLASS="PROGRAMLISTING"
->const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $";
+>const char FILENAME_rcs[] = "$Id: coding.html,v 1.19.2.7 2004/01/31 00:05:44 oes Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source$
+ * File        :  $Source: /cvsroot/ijbswa/current/doc/webserver/developer-manual/coding.html,v $
  *
  * Purpose     :  (Fill me in with a good description!)
  *
  *
  * Purpose     :  (Fill me in with a good description!)
  *
@@ -2273,7 +2367,10 @@ CLASS="PROGRAMLISTING"
  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  * Revisions   :
  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  * Revisions   :
- *    $Log$
+ *    $Log: coding.html,v $
+ *    Revision 1.19.2.7  2004/01/31 00:05:44  oes
+ *    Regenerated from sgml source
+ *
  *
  *********************************************************************/
 
  *
  *********************************************************************/
 
@@ -2327,10 +2424,10 @@ WIDTH="100%"
 CLASS="PROGRAMLISTING"
 >#ifndef _FILENAME_H
 #define _FILENAME_H
 CLASS="PROGRAMLISTING"
 >#ifndef _FILENAME_H
 #define _FILENAME_H
-#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $"
+#define FILENAME_H_VERSION "$Id: coding.html,v 1.19.2.7 2004/01/31 00:05:44 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source$
+ * File        :  $Source: /cvsroot/ijbswa/current/doc/webserver/developer-manual/coding.html,v $
  *
  * Purpose     :  (Fill me in with a good description!)
  *
  *
  * Purpose     :  (Fill me in with a good description!)
  *
@@ -2360,7 +2457,10 @@ CLASS="PROGRAMLISTING"
  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  * Revisions   :
  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  * Revisions   :
- *    $Log$
+ *    $Log: coding.html,v $
+ *    Revision 1.19.2.7  2004/01/31 00:05:44  oes
+ *    Regenerated from sgml source
+ *
  *
  *********************************************************************/
 
  *
  *********************************************************************/
 
index 7365991..31383e6 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Contacting the developers, Bug Reporting and Feature Requests</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Contacting the developers, Bug Reporting and Feature Requests</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="CONTACT">8. Contacting the developers, Bug Reporting and Feature Requests</H1
+NAME="CONTACT"
+>8. Contacting the developers, Bug Reporting and Feature Requests</A
+></H1
 ><P
 > We value your feedback. In fact, we rely on it to improve
  <SPAN
 ><P
 > We value your feedback. In fact, we rely on it to improve
  <SPAN
@@ -87,13 +89,15 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-SUPPORT">8.1. Get Support</H2
+NAME="CONTACT-SUPPORT"
+>8.1. Get Support</A
+></H2
 ><P
 ><P
-> For casual users, our support forum at
+> For casual users, our 
  <A
  <A
-HREF="http://sourceforge.net/"
+HREF="http://sourceforge.net/tracker/?group_id=11118&atid=211118"
 TARGET="_top"
 TARGET="_top"
->SourceForge</A
+>support forum at SourceForge</A
 >
  is probably best suited:
  <A
 >
  is probably best suited:
  <A
@@ -114,7 +118,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-BUGS">8.2. Report Bugs</H2
+NAME="CONTACT-BUGS"
+>8.2. Report Bugs</A
+></H2
 ><P
 > Please report all bugs <SPAN
 CLASS="emphasis"
 ><P
 > Please report all bugs <SPAN
 CLASS="emphasis"
@@ -177,7 +183,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-FEATURE">8.3. Request New Features</H2
+NAME="CONTACT-FEATURE"
+>8.3. Request New Features</A
+></H2
 ><P
 > You are welcome to submit ideas on new features or other proposals
  for improvement through our feature request tracker at
 ><P
 > You are welcome to submit ideas on new features or other proposals
  for improvement through our feature request tracker at
@@ -192,7 +200,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-ADS">8.4. Report Ads or Other Actions-Related Problems</H2
+NAME="CONTACT-ADS"
+>8.4. Report Ads or Other Actions-Related Problems</A
+></H2
 ><P
 > Please send feedback on ads that slipped through, innocent images that were blocked,
  and any other problems relating to the <TT
 ><P
 > Please send feedback on ads that slipped through, innocent images that were blocked,
  and any other problems relating to the <TT
@@ -233,7 +243,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-OTHER">8.5. Other</H2
+NAME="CONTACT-OTHER"
+>8.5. Other</A
+></H2
 ><P
 >For any other issues, feel free to use the mailing lists. Technically interested users
 and people who wish to contribute to the project are also welcome on the developers list!
 ><P
 >For any other issues, feel free to use the mailing lists. Technically interested users
 and people who wish to contribute to the project are also welcome on the developers list!
index e425e34..aae2883 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Copyright, License and History</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Copyright, License and History</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,14 +73,16 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="COPYRIGHT">9. Privoxy Copyright, License and History</H1
+NAME="COPYRIGHT"
+>9. Privoxy Copyright, License and History</A
+></H1
 ><P
 ><P
-> Copyright © 2001, 2002 by Privoxy Developers <TT
+> Copyright © 2001 - 2004 by Privoxy Developers <CODE
 CLASS="EMAIL"
 >&#60;<A
 HREF="mailto:developers@privoxy.org"
 >developers@privoxy.org</A
 CLASS="EMAIL"
 >&#60;<A
 HREF="mailto:developers@privoxy.org"
 >developers@privoxy.org</A
->&#62;</TT
+>&#62;</CODE
 ></P
 ><P
 > Some source code is based on code Copyright © 1997 by Anonymous Coders
 ></P
 ><P
 > Some source code is based on code Copyright © 1997 by Anonymous Coders
@@ -94,7 +96,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN1170">9.1. License</H2
+NAME="AEN1177"
+>9.1. License</A
+></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -154,7 +158,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN1186">9.2. History</H2
+NAME="AEN1193"
+>9.2. History</A
+></H2
 ><P
 > In the beginning, there was the
  <A
 ><P
 > In the beginning, there was the
  <A
@@ -231,7 +237,7 @@ TARGET="_top"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, whose first
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, whose first
- stable release, 3.0, was released August, 2002. 
+ stable version, 3.0, was released August, 2002. 
  </P
 ></DIV
 ></DIV
  </P
 ></DIV
 ></DIV
index 7986499..f864f0e 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >The CVS Repository</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >The CVS Repository</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,18 +73,23 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="CVS">2. The CVS Repository</H1
+NAME="CVS"
+>2. The CVS Repository</A
+></H1
 ><P
 ><P
->      If you intend to help us with programming, documentation or packaging
-      you will need write access to our holy grail, the CVS repository.
-      Please read this chapter completely before accessing via CVS.
+>      If you become part of the active development team, you will eventually
+      need write access to our holy grail, the CVS repository. One of the 
+      team members will need to set this up for you. Please read
+      this chapter completely before accessing via CVS.
     </P
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
     </P
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CVSACCESS">2.1. Access to CVS</H2
+NAME="CVSACCESS"
+>2.1. Access to CVS</A
+></H2
 ><P
 >        The project's CVS repository is hosted on
         <A
 ><P
 >        The project's CVS repository is hosted on
         <A
@@ -100,17 +105,17 @@ TARGET="_top"
         documentation</A
 > for the technical access details for your
         operating system. For historical reasons, the CVS server is
         documentation</A
 > for the technical access details for your
         operating system. For historical reasons, the CVS server is
-        called <TT
+        called <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->cvs.ijbswa.sourceforge.net</TT
+>cvs.ijbswa.sourceforge.net</VAR
 >, the repository is
 >, the repository is
-        called <TT
+        called <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->ijbswa</TT
+>ijbswa</VAR
 >, and the source tree module is called
 >, and the source tree module is called
-        <TT
+        <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->current</TT
+>current</VAR
 >.
       </P
 ></DIV
 >.
       </P
 ></DIV
@@ -119,12 +124,14 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CVSBRANCHES">2.2. Branches</H2
+NAME="CVSBRANCHES"
+>2.2. Branches</A
+></H2
 ><P
 >       Within the CVS repository, there are modules and branches. As
 ><P
 >       Within the CVS repository, there are modules and branches. As
-       mentioned, the sources are in the <TT
+       mentioned, the sources are in the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->current</TT
+>current</VAR
 >
        <SPAN
 CLASS="QUOTE"
 >
        <SPAN
 CLASS="QUOTE"
@@ -139,9 +146,9 @@ TARGET="_top"
      </P
 ><P
 >       Branches are used to fork a sub-development path from the main trunk.
      </P
 ><P
 >       Branches are used to fork a sub-development path from the main trunk.
-       Within the <TT
+       Within the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->current</TT
+>current</VAR
 > module where the sources are, there
        is always at least one <SPAN
 CLASS="QUOTE"
 > module where the sources are, there
        is always at least one <SPAN
 CLASS="QUOTE"
@@ -149,30 +156,46 @@ CLASS="QUOTE"
 > from the main trunk
        devoted to a stable release series. The main trunk is where active
        development takes place for the next stable series (e.g. 3.2.x).
 > from the main trunk
        devoted to a stable release series. The main trunk is where active
        development takes place for the next stable series (e.g. 3.2.x).
-       And for testing bugfixes for the stable series. Just prior to each
-       stable series (e.g. 3.0.x), a branch is created just for stable series
-       releases (e.g. 3.0.0 -&#62; 3.0.1 -&#62; 3.0.2, etc). Once the initial stable
-       release of any stable branch has taken place, this branch is
-       <SPAN
+       So just prior to each stable series (e.g. 3.0.x), a branch is created
+       just for stable series releases (e.g. 3.0.0 -&#62; 3.0.1 -&#62; 3.0.2, etc).
+       Once the initial stable release of any stable branch has taken place,
+       this branch is <SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 >only used for bugfixes</I
 ></SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 >only used for bugfixes</I
 ></SPAN
->, which have had prior
-       testing before being committed to CVS. (See <A
+>, which have
+       had prior testing before being committed to CVS. (See <A
 HREF="newrelease.html#VERSIONNUMBERS"
 >Version Numbers</A
 > below for details on
        versioning.)
      </P
 HREF="newrelease.html#VERSIONNUMBERS"
 >Version Numbers</A
 > below for details on
        versioning.)
      </P
+><P
+>       This will result in at least two active branches, which means there may
+       be occasions that require the same (or similar) item to be 
+       checked into to two different places (assuming its a bugfix and needs 
+       fixing in both the stable and unstable trees). This also means that in
+       order to have access to both trees, both will have to be checked out 
+       separately. Use the <VAR
+CLASS="LITERAL"
+>cvs -r</VAR
+> flag to check out a 
+       branch, e.g: <VAR
+CLASS="LITERAL"
+>cvs co -r v_3_0_branch current</VAR
+>.
+     </P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CVSCOMMIT">2.3. CVS Commit Guidelines</H2
+NAME="CVSCOMMIT"
+>2.3. CVS Commit Guidelines</A
+></H2
 ><P
 >        The source tree is the heart of every software project. Every effort must
         be made to ensure that it is readable, compilable and consistent at all
 ><P
 >        The source tree is the heart of every software project. Every effort must
         be made to ensure that it is readable, compilable and consistent at all
@@ -255,10 +278,13 @@ TARGET="_top"
 >
       </P
 ><P
 >
       </P
 ><P
->       Stable branches are handled with decidedly more care, especially after
-       the initial *.*.0 release, and we are just in bugfix mode. In addition
-       to the above, the below applies only to the stable branch (currently
-       the v_3_0_branchpoint branch):
+>       Stable branches are handled with more care, especially after the 
+       initial *.*.0 release, and we are just in bugfix mode. In addition to 
+       the above, the below applies only to the stable branch (currently the 
+       <VAR
+CLASS="LITERAL"
+>v_3_0_branch</VAR
+> branch):
       </P
 ><P
 >       <P
       </P
 ><P
 >       <P
@@ -266,17 +292,17 @@ TARGET="_top"
 ><UL
 ><LI
 ><P
 ><UL
 ><LI
 ><P
->          Do <SPAN
+>           Do not commit <SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
->not commit anything</I
+>anything</I
 ></SPAN
 ></SPAN
-> into the stable branch,
-          unless immediately before a new release! There needs to be testing 
-          done before it hits CVS, and to ensure that all changes are
-          appropriate just to fix whatever the problem is.
-        </P
+> unless your proposed
+           changes have been well tested first, preferably by other members of the
+           project, or have prior approval of the project leaders or consensus
+           of the devel list.
+         </P
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
@@ -298,20 +324,6 @@ TARGET="_top"
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
->           Do not commit <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->anything</I
-></SPAN
-> unless your proposed
-           changes have been well tested first, by other members of the
-           project, and have prior approval of the project leaders or consensus
-           of the devel list.
-         </P
-></LI
-><LI
-><P
 >          Do not even think about anything except bugfixes. No new features!
          </P
 ></LI
 >          Do not even think about anything except bugfixes. No new features!
          </P
 ></LI
index 0db87be..ffa5138 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Documentation Guidelines</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Documentation Guidelines</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,12 +73,14 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="DOCUMENTATION">3. Documentation Guidelines</H1
+NAME="DOCUMENTATION"
+>3. Documentation Guidelines</A
+></H1
 ><P
 >    All formal documents are maintained in Docbook SGML and located in the
 ><P
 >    All formal documents are maintained in Docbook SGML and located in the
-    <TT
+    <SAMP
 CLASS="COMPUTEROUTPUT"
 CLASS="COMPUTEROUTPUT"
->doc/source/*</TT
+>doc/source/*</SAMP
 > directory. You will need
     <A
 HREF="http://www.docbook.org"
 > directory. You will need
     <A
 HREF="http://www.docbook.org"
@@ -197,26 +199,26 @@ CLASS="FILENAME"
     </P
 ><P
 >     Formal documents are built with the Makefile targets of
     </P
 ><P
 >     Formal documents are built with the Makefile targets of
-     <TT
+     <SAMP
 CLASS="COMPUTEROUTPUT"
 CLASS="COMPUTEROUTPUT"
->make dok</TT
+>make dok</SAMP
 >, or alternately
 >, or alternately
-     <TT
+     <SAMP
 CLASS="COMPUTEROUTPUT"
 CLASS="COMPUTEROUTPUT"
->make redhat-dok</TT
+>make redhat-dok</SAMP
 >. If you have problems,
      try both. The build process uses the document SGML sources in
 >. If you have problems,
      try both. The build process uses the document SGML sources in
-     <TT
+     <SAMP
 CLASS="COMPUTEROUTPUT"
 CLASS="COMPUTEROUTPUT"
->doc/source/*/*</TT
+>doc/source/*/*</SAMP
 > to update all text files in
 > to update all text files in
-     <TT
+     <SAMP
 CLASS="COMPUTEROUTPUT"
 CLASS="COMPUTEROUTPUT"
->doc/text/</TT
+>doc/text/</SAMP
 > and to update all HTML
 > and to update all HTML
-     documents in <TT
+     documents in <SAMP
 CLASS="COMPUTEROUTPUT"
 CLASS="COMPUTEROUTPUT"
->doc/webserver/</TT
+>doc/webserver/</SAMP
 >.
     </P
 ><P
 >.
     </P
 ><P
@@ -232,30 +234,30 @@ CLASS="COMPUTEROUTPUT"
 TYPE="1"
 ><LI
 ><P
 TYPE="1"
 ><LI
 ><P
->        First, build the docs by running <TT
+>        First, build the docs by running <SAMP
 CLASS="COMPUTEROUTPUT"
 >make
 CLASS="COMPUTEROUTPUT"
 >make
-        dok</TT
-> (or alternately <TT
+        dok</SAMP
+> (or alternately <SAMP
 CLASS="COMPUTEROUTPUT"
 >make
 CLASS="COMPUTEROUTPUT"
 >make
-        redhat-dok</TT
->). For PDF docs, do <TT
+        redhat-dok</SAMP
+>). For PDF docs, do <SAMP
 CLASS="COMPUTEROUTPUT"
 >make
 CLASS="COMPUTEROUTPUT"
 >make
-        dok-pdf</TT
+        dok-pdf</SAMP
 >.
       </P
 ></LI
 ><LI
 ><P
 >.
       </P
 ></LI
 ><LI
 ><P
->        Run <TT
+>        Run <SAMP
 CLASS="COMPUTEROUTPUT"
 CLASS="COMPUTEROUTPUT"
->make webserver</TT
+>make webserver</SAMP
 > which copies all
 > which copies all
-        files from <TT
+        files from <SAMP
 CLASS="COMPUTEROUTPUT"
 CLASS="COMPUTEROUTPUT"
->doc/webserver</TT
+>doc/webserver</SAMP
 > to the
         sourceforge webserver via scp.
       </P
 > to the
         sourceforge webserver via scp.
       </P
@@ -277,9 +279,9 @@ CLASS="emphasis"
 CLASS="EMPHASIS"
 >after</I
 ></SPAN
 CLASS="EMPHASIS"
 >after</I
 ></SPAN
-> the <TT
+> the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$VERSION</TT
+>$VERSION</VAR
 > and
    other release specific data in <TT
 CLASS="FILENAME"
 > and
    other release specific data in <TT
 CLASS="FILENAME"
@@ -292,7 +294,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="SGML">3.1. Quickstart to Docbook and SGML</H2
+NAME="SGML"
+>3.1. Quickstart to Docbook and SGML</A
+></H2
 ><P
 > If you are not familiar with SGML, it is a markup language similar to HTML. 
  Actually, not a mark up language per se, but a language used to define 
 ><P
 > If you are not familiar with SGML, it is a markup language similar to HTML. 
  Actually, not a mark up language per se, but a language used to define 
@@ -329,10 +333,10 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"closed"</SPAN
 >. If not, you
 CLASS="QUOTE"
 >"closed"</SPAN
 >. If not, you
- will likely generate errors. Example: <TT
+ will likely generate errors. Example: <VAR
 CLASS="LITERAL"
 >&#60;title&#62;My
 CLASS="LITERAL"
 >&#60;title&#62;My
- Title&#60;/title&#62;</TT
+ Title&#60;/title&#62;</VAR
 >. They are also case-insensitive, but we
  strongly suggest using all lower case. This keeps compatibility with
  [Docbook] <SPAN
 >. They are also case-insensitive, but we
  strongly suggest using all lower case. This keeps compatibility with
  [Docbook] <SPAN
@@ -344,40 +348,40 @@ CLASS="APPLICATION"
 CLASS="QUOTE"
 >"sections"</SPAN
 > for the most part. Sections
 CLASS="QUOTE"
 >"sections"</SPAN
 > for the most part. Sections
- will be processed into HTML headers (e.g. <TT
+ will be processed into HTML headers (e.g. <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->h1</TT
+>h1</VAR
 > for 
 > for 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->sect1</TT
+>sect1</VAR
 >). The <SPAN
 CLASS="APPLICATION"
 >Docbook</SPAN
 > stylesheets
  will use these to also generate the Table of Contents for each doc. Our 
 >). The <SPAN
 CLASS="APPLICATION"
 >Docbook</SPAN
 > stylesheets
  will use these to also generate the Table of Contents for each doc. Our 
- TOC's are set to a depth of three. Meaning <TT
+ TOC's are set to a depth of three. Meaning <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->sect1</TT
+>sect1</VAR
 >, 
 >, 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->sect2</TT
->, and <TT
+>sect2</VAR
+>, and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->sect3</TT
+>sect3</VAR
 > will have TOC 
 > will have TOC 
- entries, but <TT
+ entries, but <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->sect4</TT
+>sect4</VAR
 > will not. Each section requires 
 > will not. Each section requires 
- a <TT
+ a <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;title&#62;</TT
+>&#60;title&#62;</VAR
 > element, and at least one 
 > element, and at least one 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;para&#62;</TT
+>&#60;para&#62;</VAR
 >. There is a limit of five section 
  levels in Docbook, but generally three should be sufficient for our 
  purposes.</P
 >. There is a limit of five section 
  levels in Docbook, but generally three should be sufficient for our 
  purposes.</P
@@ -444,9 +448,9 @@ CLASS="EMPHASIS"
 >&#60;literallayout&#62;&#60;/literallayout&#62;</I
 ></SPAN
 >, like 
 >&#60;literallayout&#62;&#60;/literallayout&#62;</I
 ></SPAN
 >, like 
-      <TT
+      <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;pre&#62;</TT
+>&#60;pre&#62;</VAR
 >, more or less.
     </TD
 ></TR
 >, more or less.
     </TD
 ></TR
@@ -481,9 +485,9 @@ CLASS="EMPHASIS"
 >&#60;screen&#62;&#60;/screen&#62;</I
 ></SPAN
 >, screen output, implies 
 >&#60;screen&#62;&#60;/screen&#62;</I
 ></SPAN
 >, screen output, implies 
-      <TT
+      <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;literallayout&#62;</TT
+>&#60;literallayout&#62;</VAR
 >.
     </TD
 ></TR
 >.
     </TD
 ></TR
@@ -496,9 +500,9 @@ CLASS="EMPHASIS"
 >&#60;ulink url="example.com"&#62;&#60;/ulink&#62;</I
 ></SPAN
 >, like 
 >&#60;ulink url="example.com"&#62;&#60;/ulink&#62;</I
 ></SPAN
 >, like 
-      HTML <TT
+      HTML <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;a&#62;</TT
+>&#60;a&#62;</VAR
 > tag.
     </TD
 ></TR
 > tag.
     </TD
 ></TR
@@ -536,10 +540,12 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="DOCSTYLE">3.2. <SPAN
+NAME="DOCSTYLE"
+>3.2. <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> Documentation Style</H2
+> Documentation Style</A
+></H2
 ><P
 >    It will be easier if everyone follows a similar writing style. This 
     just makes it easier to read what someone else has written if it 
 ><P
 >    It will be easier if everyone follows a similar writing style. This 
     just makes it easier to read what someone else has written if it 
@@ -659,9 +665,9 @@ CLASS="QUOTE"
 CLASS="APPLICATION"
 >aspell</SPAN
 > can check SGML with the
 CLASS="APPLICATION"
 >aspell</SPAN
 > can check SGML with the
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->-H</TT
+>-H</VAR
 > option. (<SPAN
 CLASS="APPLICATION"
 >ispell</SPAN
 > option. (<SPAN
 CLASS="APPLICATION"
 >ispell</SPAN
@@ -678,7 +684,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN233">3.3. Privoxy Custom Entities</H2
+NAME="AEN233"
+>3.3. Privoxy Custom Entities</A
+></H2
 ><P
 >  <SPAN
 CLASS="APPLICATION"
 ><P
 >  <SPAN
 CLASS="APPLICATION"
@@ -717,9 +725,9 @@ CLASS="QUOTE"
 >"internal entities"</SPAN
 >. These are like variables in 
   programming. Well, sort of. For instance, we have the
 >"internal entities"</SPAN
 >. These are like variables in 
   programming. Well, sort of. For instance, we have the
-  <TT
+  <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->p-version</TT
+>p-version</VAR
 > entity that contains the current 
   <SPAN
 CLASS="APPLICATION"
 > entity that contains the current 
   <SPAN
 CLASS="APPLICATION"
@@ -741,9 +749,9 @@ CLASS="QUOTE"
 > text entities are defined like:
    </P
 ><P
 > text entities are defined like:
    </P
 ><P
->    <TT
+>    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;!entity supported SYSTEM "supported.sgml"&#62;</TT
+>&#60;!entity supported SYSTEM "supported.sgml"&#62;</VAR
 >
    </P
 ><P
 >
    </P
 ><P
@@ -753,9 +761,9 @@ CLASS="FILENAME"
 >supported.sgml</TT
 > is available for inclusion anywhere 
      in the doc. To make this happen, just reference the now defined 
 >supported.sgml</TT
 > is available for inclusion anywhere 
      in the doc. To make this happen, just reference the now defined 
-     entity: <TT
+     entity: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#38;supported;</TT
+>&#38;supported;</VAR
 > (starts with an ampersand 
      and ends with a semi-colon), and the contents will be dumped into 
      the finished doc at that point.
 > (starts with an ampersand 
      and ends with a semi-colon), and the contents will be dumped into 
      the finished doc at that point.
@@ -787,7 +795,7 @@ CLASS="APPLICATION"
 > 
     version string, e.g. <SPAN
 CLASS="QUOTE"
 > 
     version string, e.g. <SPAN
 CLASS="QUOTE"
->"3.1.1"</SPAN
+>"3.0.3"</SPAN
 >.
    </TD
 ></TR
 >.
    </TD
 ></TR
index 2da3157..64faeb3 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Developer Manual</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Developer Manual</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="NEXT"
 TITLE="Introduction"
 HREF="introduction.html"><LINK
 REL="NEXT"
 TITLE="Introduction"
 HREF="introduction.html"><LINK
@@ -26,7 +26,9 @@ CLASS="TITLEPAGE"
 ><H1
 CLASS="TITLE"
 ><A
 ><H1
 CLASS="TITLE"
 ><A
-NAME="AEN2">Privoxy Developer Manual</H1
+NAME="AEN2"
+>Privoxy Developer Manual</A
+></H1
 ><P
 CLASS="PUBDATE"
 >     <SUB
 ><P
 CLASS="PUBDATE"
 >     <SUB
@@ -46,13 +48,15 @@ TARGET="_top"
     <BR></P
 ><P
 CLASS="PUBDATE"
     <BR></P
 ><P
 CLASS="PUBDATE"
->$Id: developer-manual.sgml,v 2.3 2002/09/05 02:27:59 hal9 Exp $<BR></P
+>$Id: index.html,v 1.19.2.7 2004/01/31 00:05:44 oes Exp $<BR></P
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
-><A
-NAME="AEN9"><P
+><P
 ></P
 ></P
+><A
+NAME="AEN9"
+></A
 ><P
 > The developer manual provides guidance on coding, testing, packaging, documentation
  and other issues of importance to those involved with
 ><P
 > The developer manual provides guidance on coding, testing, packaging, documentation
  and other issues of importance to those involved with
@@ -63,7 +67,7 @@ CLASS="APPLICATION"
  for anyone who wants to join the team.</P
 ><P
 > Please note that this document is constantly evolving. This copy represents
  for anyone who wants to join the team.</P
 ><P
 > Please note that this document is constantly evolving. This copy represents
- the state at the release of version 3.1.1.
+ the state at the release of version 3.0.3.
  You can find the latest version of the this manual at <A
 HREF="http://www.privoxy.org/developer-manual/"
 TARGET="_top"
  You can find the latest version of the this manual at <A
 HREF="http://www.privoxy.org/developer-manual/"
 TARGET="_top"
@@ -598,12 +602,12 @@ HREF="copyright.html"
 ><DL
 ><DT
 >9.1. <A
 ><DL
 ><DT
 >9.1. <A
-HREF="copyright.html#AEN1170"
+HREF="copyright.html#AEN1177"
 >License</A
 ></DT
 ><DT
 >9.2. <A
 >License</A
 ></DT
 ><DT
 >9.2. <A
-HREF="copyright.html#AEN1186"
+HREF="copyright.html#AEN1193"
 >History</A
 ></DT
 ></DL
 >History</A
 ></DT
 ></DL
index c14a8b0..13c2e7f 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Introduction</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Introduction</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="INTRODUCTION">1. Introduction</H1
+NAME="INTRODUCTION"
+>1. Introduction</A
+></H1
 ><P
 >     <SPAN
 CLASS="APPLICATION"
 ><P
 >     <SPAN
 CLASS="APPLICATION"
@@ -104,20 +106,19 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="QUICKSTART">1.1. Quickstart to Privoxy Development</H2
+NAME="QUICKSTART"
+>1.1. Quickstart to Privoxy Development</A
+></H2
 ><P
 ><P
->      You'll need an account on <A
-HREF="http://sourceforge.net/"
-TARGET="_top"
->Sourceforge</A
-> to support our
-      development.  Mail your ID to <A
+>    The first step is to join the <A
 HREF="mailto:developers@privoxy.org"
 TARGET="_top"
 HREF="mailto:developers@privoxy.org"
 TARGET="_top"
->the list</A
-> and wait until a
-      project manager has added you.
-    </P
+>developer's mailing list</A
+>.
+    You can submit your ideas, or even better patches. Patches are best 
+    submitted to the Sourceforge tracker set up for this purpose, but 
+    can be sent to the list for review too.
+   </P
 ><P
 >     You will also need to have a cvs package installed, which will 
      entail having ssh installed as well (which seems to be a requirement of
 ><P
 >     You will also need to have a cvs package installed, which will 
      entail having ssh installed as well (which seems to be a requirement of
@@ -125,8 +126,9 @@ TARGET="_top"
      tools is also going to be important (particularly, autoconf and gmake).
     </P
 ><P
      tools is also going to be important (particularly, autoconf and gmake).
     </P
 ><P
->      For the time being (read, this section is under construction), please
-      refer to the extensive comments in the source code.
+>      For the time being (read, this section is under construction), you can 
+      also refer to the extensive comments in the source code. In fact, 
+      reading the code is recommended in any case.
     </P
 ></DIV
 ></DIV
     </P
 ></DIV
 ></DIV
index 0f9882f..a9c3b3e 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Releasing a New Version</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Releasing a New Version</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="NEWRELEASE">6. Releasing a New Version</H1
+NAME="NEWRELEASE"
+>6. Releasing a New Version</A
+></H1
 ><P
 >        When we release versions of <SPAN
 CLASS="APPLICATION"
 ><P
 >        When we release versions of <SPAN
 CLASS="APPLICATION"
@@ -108,7 +110,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="VERSIONNUMBERS">6.1. Version numbers</H2
+NAME="VERSIONNUMBERS"
+>6.1. Version numbers</A
+></H2
 ><P
 >      First you need to determine which version number the release will have. 
       <SPAN
 ><P
 >      First you need to determine which version number the release will have. 
       <SPAN
@@ -165,6 +169,29 @@ CLASS="APPLICATION"
               This ensures that builds from CVS snapshots are easily distinguished from released versions.
               The point version is reset to zero when the minor changes.
             </P
               This ensures that builds from CVS snapshots are easily distinguished from released versions.
               The point version is reset to zero when the minor changes.
             </P
+><P
+>              Stable branches work a little differently, since there should be
+              little to no development happening in such branches. Remember,
+              only bugfixes, which presumably should have had some testing
+              before being committed. Stable branches will then have their 
+              version reported as <VAR
+CLASS="LITERAL"
+>0.0.0</VAR
+>, during that period 
+              between releases when changes are being added. This is to denote 
+              that this code is <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>not for release</I
+></SPAN
+>. Then 
+              as the release nears, the version is bumped according: e.g. 
+              <VAR
+CLASS="LITERAL"
+>3.0.1 -&#62; 0.0.0 -&#62; 3.0.2</VAR
+>.
+            </P
 ></LI
 ></UL
 >
 ></LI
 ></UL
 >
@@ -173,18 +200,18 @@ CLASS="APPLICATION"
 >     In summary, the main CVS trunk is the development branch where new
      features are being worked on for the next stable series. This should
      almost always be where the most activity takes place. There is always at
 >     In summary, the main CVS trunk is the development branch where new
      features are being worked on for the next stable series. This should
      almost always be where the most activity takes place. There is always at
-     least one stable branch from the trunk, e.g now it is 3.0, which is only
-     used to release stable versions. Once the initial .0 release of the
-     stable branch has been done, then as a rule, only bugfixes that have had
-     prior testing should be committed to the stable branch. At that point, it
-     is mostly <SPAN
-CLASS="QUOTE"
->"hands off"</SPAN
->. Once there are enough bugfixes to
-     justify a new release, the version of this branch is again incremented 
-     Example: 3.0.0 -&#62; 3.0.1 -&#62; 3.0.2, etc are all stable releases from within
-     the stable branch. 3.1.x is currently the main trunk, and where work on
-     3.2.x is taking place. If any questions, please post to the devel list
+     least one stable branch from the trunk, e.g now it is
+     <VAR
+CLASS="LITERAL"
+>3.0</VAR
+>, which is only used to release stable versions.
+     Once the initial *.0 release of the stable branch has been done, then as a
+     rule, only bugfixes that have had prior testing should be committed to
+     the stable branch. Once there are enough bugfixes to justify a new
+     release, the version of this branch is again incremented Example: 3.0.0
+     -&#62; 3.0.1 -&#62; 3.0.2, etc are all stable releases from within the stable
+     branch. 3.1.x is currently the main trunk, and where work on 3.2.x is
+     taking place. If any questions, please post to the devel list
      <SPAN
 CLASS="emphasis"
 ><I
      <SPAN
 CLASS="emphasis"
 ><I
@@ -192,7 +219,23 @@ CLASS="EMPHASIS"
 >before</I
 ></SPAN
 > committing to a stable branch!
 >before</I
 ></SPAN
 > committing to a stable branch!
-
+    </P
+><P
+>     Developers should remember too that if they commit a bugfix to the stable 
+     branch, this will more than likely require a separate submission to the 
+     main trunk, since these are separate development trees within CVS. If you 
+     are working on both, then this would require at least two separate check
+     outs (i.e main trunk, <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>and</I
+></SPAN
+> the stable release branch,
+     which is <VAR
+CLASS="LITERAL"
+>v_3_0_branch</VAR
+> at the moment).
     </P
 ></DIV
 ><DIV
     </P
 ></DIV
 ><DIV
@@ -200,7 +243,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="BEFORERELEASE">6.2. Before the Release: Freeze</H2
+NAME="BEFORERELEASE"
+>6.2. Before the Release: Freeze</A
+></H2
 ><P
 >       The following <SPAN
 CLASS="emphasis"
 ><P
 >       The following <SPAN
 CLASS="emphasis"
@@ -298,9 +343,9 @@ CLASS="CITETITLE"
 >
          link from the main page since we need to keep manuals for various 
          versions available). The CGI pages will link to something like 
 >
          link from the main page since we need to keep manuals for various 
          versions available). The CGI pages will link to something like 
-         <TT
+         <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->http://privoxy.org/$(VERSION)/user-manual/</TT
+>http://privoxy.org/$(VERSION)/user-manual/</VAR
 >. This
          will need to be updated for each new release. There is no Makefile
          target for this at this time!!! It needs to be done manually.
 >. This
          will need to be updated for each new release. There is no Makefile
          target for this at this time!!! It needs to be done manually.
@@ -383,7 +428,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="THERELEASE">6.3. Building and Releasing the Packages</H2
+NAME="THERELEASE"
+>6.3. Building and Releasing the Packages</A
+></H2
 ><P
 >      Now the individual packages can be built and released. Note that for
       GPL reasons the first package to be released is always the source tarball.
 ><P
 >      Now the individual packages can be built and released. Note that for
       GPL reasons the first package to be released is always the source tarball.
@@ -446,7 +493,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="PACK-GUIDELINES">6.3.1. Note on Privoxy Packaging</H3
+NAME="PACK-GUIDELINES"
+>6.3.1. Note on Privoxy Packaging</A
+></H3
 ><P
 >      Please keep these general guidelines in mind when putting together 
       your package. These apply to <SPAN
 ><P
 >      Please keep these general guidelines in mind when putting together 
       your package. These apply to <SPAN
@@ -692,7 +741,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-TARBALL">6.3.2. Source Tarball</H3
+NAME="NEWRELEASE-TARBALL"
+>6.3.2. Source Tarball</A
+></H3
 ><P
 >      First, <SPAN
 CLASS="emphasis"
 ><P
 >      First, <SPAN
 CLASS="emphasis"
@@ -770,13 +821,13 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-RPM">6.3.3. SuSE, Conectiva or Red Hat RPM</H3
+NAME="NEWRELEASE-RPM"
+>6.3.3. SuSE, Conectiva or Red Hat RPM</A
+></H3
 ><P
 ><P
->        In following text, replace <TT
+>        In following text, replace <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dist</I
-></TT
+>dist</VAR
 >
         with either <SPAN
 CLASS="QUOTE"
 >
         with either <SPAN
 CLASS="QUOTE"
@@ -802,11 +853,9 @@ CLASS="EMPHASIS"
         now examine the file <TT
 CLASS="FILENAME"
 >privoxy-</TT
         now examine the file <TT
 CLASS="FILENAME"
 >privoxy-</TT
-><TT
+><VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dist</I
-></TT
+>dist</VAR
 ><TT
 CLASS="FILENAME"
 >.spec</TT
 ><TT
 CLASS="FILENAME"
 >.spec</TT
@@ -814,11 +863,9 @@ CLASS="FILENAME"
         and make sure that the version information and the RPM release number are
         correct. The RPM release numbers for each version start at one. Hence it must
         be reset to one if this is the first RPM for
         and make sure that the version information and the RPM release number are
         correct. The RPM release numbers for each version start at one. Hence it must
         be reset to one if this is the first RPM for
-        <TT
+        <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dist</I
-></TT
+>dist</VAR
 > which is built from version
         X.Y.Z. Check the
         <A
 > which is built from version
         X.Y.Z. Check the
         <A
@@ -860,11 +907,9 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="PROGRAMLISTING"
 ><TD
 ><PRE
 CLASS="PROGRAMLISTING"
->  make <TT
+>  make <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dist</I
-></TT
+>dist</VAR
 >-dist</PRE
 ></TD
 ></TR
 >-dist</PRE
 ></TD
 ></TR
@@ -883,16 +928,12 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="PROGRAMLISTING"
 ><TD
 ><PRE
 CLASS="PROGRAMLISTING"
->  make <TT
+>  make <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dist</I
-></TT
->-upload <TT
+>dist</VAR
+>-upload <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->rpm_packagerev</I
-></TT
+>rpm_packagerev</VAR
 ></PRE
 ></TD
 ></TR
 ></PRE
 ></TD
 ></TR
@@ -900,11 +941,9 @@ CLASS="REPLACEABLE"
 >
        </P
 ><P
 >
        </P
 ><P
->        where <TT
+>        where <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->rpm_packagerev</I
-></TT
+>rpm_packagerev</VAR
 > is the
         RPM release number as determined above.
        Go to the displayed URL and release the file publicly on Sourceforge.
 > is the
         RPM release number as determined above.
        Go to the displayed URL and release the file publicly on Sourceforge.
@@ -916,7 +955,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-OS2">6.3.4. OS/2</H3
+NAME="NEWRELEASE-OS2"
+>6.3.4. OS/2</A
+></H3
 ><P
 >      First, <SPAN
 CLASS="emphasis"
 ><P
 >      First, <SPAN
 CLASS="emphasis"
@@ -1051,7 +1092,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-SOLARIS">6.3.5. Solaris</H3
+NAME="NEWRELEASE-SOLARIS"
+>6.3.5. Solaris</A
+></H3
 ><P
 >      Login to Sourceforge's compilefarm via ssh:
        </P
 ><P
 >      Login to Sourceforge's compilefarm via ssh:
        </P
@@ -1132,7 +1175,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-WINDOWS">6.3.6. Windows</H3
+NAME="NEWRELEASE-WINDOWS"
+>6.3.6. Windows</A
+></H3
 ><P
 >        You should ensure you have the latest version of Cygwin (from
         <A
 ><P
 >        You should ensure you have the latest version of Cygwin (from
         <A
@@ -1210,7 +1255,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-DEBIAN">6.3.7. Debian</H3
+NAME="NEWRELEASE-DEBIAN"
+>6.3.7. Debian</A
+></H3
 ><P
 >        First, <SPAN
 CLASS="emphasis"
 ><P
 >        First, <SPAN
 CLASS="emphasis"
@@ -1236,7 +1283,7 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="PROGRAMLISTING"
 ><TD
 ><PRE
 CLASS="PROGRAMLISTING"
->  debchange -v 3.1.1-alpha-1 "New upstream version"</PRE
+>  debchange -v 3.0.3-stable-1 "New upstream version"</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -1264,7 +1311,7 @@ CLASS="PROGRAMLISTING"
 >        This will create
         <TT
 CLASS="FILENAME"
 >        This will create
         <TT
 CLASS="FILENAME"
->../privoxy_3.1.1-alpha-1_i386.deb</TT
+>../privoxy_3.0.3-stable-1_i386.deb</TT
 >
         which can be uploaded.  To upload the package to Sourceforge, simply
        issue
 >
         which can be uploaded.  To upload the package to Sourceforge, simply
        issue
@@ -1290,7 +1337,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-MACOSX">6.3.8. Mac OSX</H3
+NAME="NEWRELEASE-MACOSX"
+>6.3.8. Mac OSX</A
+></H3
 ><P
 >      First, <SPAN
 CLASS="emphasis"
 ><P
 >      First, <SPAN
 CLASS="emphasis"
@@ -1396,7 +1445,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-FREEBSD">6.3.9. FreeBSD</H3
+NAME="NEWRELEASE-FREEBSD"
+>6.3.9. FreeBSD</A
+></H3
 ><P
 >      Login to Sourceforge's compile-farm via ssh:
        </P
 ><P
 >      Login to Sourceforge's compile-farm via ssh:
        </P
@@ -1477,7 +1528,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-HPUX">6.3.10. HP-UX 11</H3
+NAME="NEWRELEASE-HPUX"
+>6.3.10. HP-UX 11</A
+></H3
 ><P
 >      First, <SPAN
 CLASS="emphasis"
 ><P
 >      First, <SPAN
 CLASS="emphasis"
@@ -1514,7 +1567,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-AMIGA">6.3.11. Amiga OS</H3
+NAME="NEWRELEASE-AMIGA"
+>6.3.11. Amiga OS</A
+></H3
 ><P
 >      First, <SPAN
 CLASS="emphasis"
 ><P
 >      First, <SPAN
 CLASS="emphasis"
@@ -1551,7 +1606,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="NEWRELEASE-AIX">6.3.12. AIX</H3
+NAME="NEWRELEASE-AIX"
+>6.3.12. AIX</A
+></H3
 ><P
 >      Login to Sourceforge's compilefarm via ssh:
        </P
 ><P
 >      Login to Sourceforge's compilefarm via ssh:
        </P
@@ -1633,7 +1690,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="RELEASING">6.4. Uploading and Releasing Your Package</H2
+NAME="RELEASING"
+>6.4. Uploading and Releasing Your Package</A
+></H2
 ><P
 >      After the package is ready, it is time to upload it 
       to SourceForge, and go through the release steps. The upload
 ><P
 >      After the package is ready, it is time to upload it 
       to SourceForge, and go through the release steps. The upload
@@ -1654,17 +1713,17 @@ TARGET="_top"
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
->         user: <TT
+>         user: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->anonymous</TT
+>anonymous</VAR
 >
        </P
 ></LI
 ><LI
 ><P
 >
        </P
 ></LI
 ><LI
 ><P
->         password: <TT
+>         password: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->ijbswa-developers@lists.sourceforge.net</TT
+>ijbswa-developers@lists.sourceforge.net</VAR
 >
        </P
 ></LI
 >
        </P
 ></LI
@@ -1684,19 +1743,19 @@ TARGET="_top"
 >http://sourceforge.net/project/admin/editpackages.php?group_id=11118</A
 >, 
      making sure you are logged in. Find your target platform in the 
 >http://sourceforge.net/project/admin/editpackages.php?group_id=11118</A
 >, 
      making sure you are logged in. Find your target platform in the 
-     second column, and click <TT
+     second column, and click <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->Add Release</TT
+>Add Release</VAR
 >. You will 
      then need to create a new release for your package, using the format 
 >. You will 
      then need to create a new release for your package, using the format 
-     of <TT
+     of <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$VERSION ($CODE_STATUS)</TT
+>$VERSION ($CODE_STATUS)</VAR
 >, e.g. <SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 >, e.g. <SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
->3.1.1
+>3.0.3
      (beta)</I
 ></SPAN
 >.
      (beta)</I
 ></SPAN
 >.
@@ -1727,13 +1786,13 @@ CLASS="QUOTE"
     </P
 ><P
 >     If you have made errors, or need to make changes, you can go through 
     </P
 ><P
 >     If you have made errors, or need to make changes, you can go through 
-     essentially the same steps, but select <TT
+     essentially the same steps, but select <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->Edit Release</TT
+>Edit Release</VAR
 >, 
 >, 
-     instead of <TT
+     instead of <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->Add Release</TT
+>Add Release</VAR
 >.
     </P
 ></DIV
 >.
     </P
 ></DIV
@@ -1742,7 +1801,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AFTERRELEASE">6.5. After the Release</H2
+NAME="AFTERRELEASE"
+>6.5. After the Release</A
+></H2
 ><P
 >      When all (or: most of the) packages have been uploaded and made available,
       send an email to the <A
 ><P
 >      When all (or: most of the) packages have been uploaded and made available,
       send an email to the <A
diff --git a/doc/webserver/developer-manual/quickstart.html b/doc/webserver/developer-manual/quickstart.html
new file mode 100644 (file)
index 0000000..ba84f13
--- /dev/null
@@ -0,0 +1,150 @@
+<HTML
+><HEAD
+><TITLE
+>Quickstart to Privoxy Development</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="Privoxy Developer Manual"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Introduction"
+HREF="introduction.html"><LINK
+REL="NEXT"
+TITLE="The CVS Repository"
+HREF="cvs.html"><LINK
+REL="STYLESHEET"
+TYPE="text/css"
+HREF="../p_doc.css"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#EEEEEE"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>Privoxy Developer Manual</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="introduction.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="cvs.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="QUICKSTART"
+>3. Quickstart to Privoxy Development</A
+></H1
+><P
+>      You'll need an account on <A
+HREF="http://sourceforge.net/"
+TARGET="_top"
+>Sourceforge</A
+> to support our
+      development.  Mail your ID to <A
+HREF="mailto:developers@privoxy.org"
+TARGET="_top"
+>the list</A
+> and wait until a
+      project manager has added you.
+    </P
+><P
+>      For the time being (read, this section is under construction), please
+      refer to the extensive comments in the source code.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="introduction.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="cvs.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Introduction</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>The CVS Repository</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
index d18d3ec..c644099 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >See also</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >See also</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -66,7 +66,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="SEEALSO">10. See also</H1
+NAME="SEEALSO"
+>10. See also</A
+></H1
 ><P
 > Other references and sites of interest to <SPAN
 CLASS="APPLICATION"
 ><P
 > Other references and sites of interest to <SPAN
 CLASS="APPLICATION"
index 9c25ac8..79bb5cc 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Testing Guidelines</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Testing Guidelines</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="TESTING">5. Testing Guidelines</H1
+NAME="TESTING"
+>5. Testing Guidelines</A
+></H1
 ><P
 >To be filled.</P
 ><DIV
 ><P
 >To be filled.</P
 ><DIV
@@ -81,7 +83,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="TESTING-PLAN">5.1. Testplan for releases</H2
+NAME="TESTING-PLAN"
+>5.1. Testplan for releases</A
+></H2
 ><P
 >       Explain release numbers. major, minor. developer releases. etc.
 
 ><P
 >       Explain release numbers. major, minor. developer releases. etc.
 
@@ -154,7 +158,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="TESTING-REPORT">5.2. Test reports</H2
+NAME="TESTING-REPORT"
+>5.2. Test reports</A
+></H2
 ><P
 >Please submit test reports only with the <A
 HREF="http://sourceforge.net/tracker/?func=add&group_id=11118&atid=395005"
 ><P
 >Please submit test reports only with the <A
 HREF="http://sourceforge.net/tracker/?func=add&group_id=11118&atid=395005"
index c437189..ae80c36 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Update the Webserver</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Update the Webserver</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Developer Manual"
 HREF="index.html"><LINK
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="WEBSERVER-UPDATE">7. Update the Webserver</H1
+NAME="WEBSERVER-UPDATE"
+>7. Update the Webserver</A
+></H1
 ><P
 >    The webserver should be updated at least with each stable release. When
     updating, please follow these steps to make sure that no broken links,
 ><P
 >    The webserver should be updated at least with each stable release. When
     updating, please follow these steps to make sure that no broken links,
index 2703bd3..73ff78c 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Configuration</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Configuration</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
@@ -73,13 +73,17 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="CONFIGURATION">3. Configuration</H1
+NAME="CONFIGURATION"
+>3. Configuration</A
+></H1
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="GETUPDATES">3.1. Where can I get updated Actions Files?</H3
+NAME="GETUPDATES"
+>3.1. Where can I get updated Actions Files?</A
+></H3
 ><P
 >   Based on your feedback and the continuing development, updated actions files will be
    made available on the <A
 ><P
 >   Based on your feedback and the continuing development, updated actions files will be
    made available on the <A
@@ -111,7 +115,9 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="NEWCONFIG">3.2. Can I use my old config files?</H3
+NAME="NEWCONFIG"
+>3.2. Can I use my old config files?</A
+></H3
 ><P
 >   The syntax, number, and purpose of configuration files has substantially
    changed from <SPAN
 ><P
 >   The syntax, number, and purpose of configuration files has substantially
    changed from <SPAN
@@ -137,10 +143,12 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN266">3.3. What is an <SPAN
+NAME="AEN312"
+>3.3. What is an <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
-> file?</H3
+> file?</A
+></H3
 ><P
 > <A
 HREF="../user-manual/actions-file.html"
 ><P
 > <A
 HREF="../user-manual/actions-file.html"
@@ -172,21 +180,23 @@ TARGET="_top"
  site in one of your actions files, preferably in <TT
 CLASS="FILENAME"
 >user.action</TT
  site in one of your actions files, preferably in <TT
 CLASS="FILENAME"
 >user.action</TT
-></P
+>.</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="ACTIONSS">3.4. The <SPAN
+NAME="ACTIONSS"
+>3.4. The <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
 > concept confuses me. Please list 
 some of these <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
 > concept confuses me. Please list 
 some of these <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
->.</H3
+>.</A
+></H3
 ><P
 > For a comprehensive discussion of the actions concept, please refer
  to the <A
 ><P
 > For a comprehensive discussion of the actions concept, please refer
  to the <A
@@ -216,8 +226,10 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN285">3.5. How are actions files configured? What is the easiest
-way to do this?</H3
+NAME="AEN331"
+>3.5. How are actions files configured? What is the easiest
+way to do this?</A
+></H3
 ><P
 > Actions files are just text files in a special syntax and can be edited
  with a text editor. But probably the easiest way is to access
 ><P
 > Actions files are just text files in a special syntax and can be edited
  with a text editor. But probably the easiest way is to access
@@ -250,11 +262,13 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN293">3.6. There are several different <SPAN
+NAME="AEN339"
+>3.6. There are several different <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
 > files. What are
 CLASS="QUOTE"
 >"actions"</SPAN
 > files. What are
-the differences?</H3
+the differences?</A
+></H3
 ><P
 > As of <SPAN
 CLASS="APPLICATION"
 ><P
 > As of <SPAN
 CLASS="APPLICATION"
@@ -313,7 +327,9 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="YAHOO">3.7. How can I make my Yahoo/Hotmail/GMX account work?</H3
+NAME="YAHOO"
+>3.7. How can I make my Yahoo/Hotmail/GMX account work?</A
+></H3
 ><P
 >  The default configuration shouldn't impact the usability of any of these services.
   It will, however, make all cookies temporary, so that your browser will forget your
 ><P
 >  The default configuration shouldn't impact the usability of any of these services.
   It will, however, make all cookies temporary, so that your browser will forget your
@@ -361,7 +377,8 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="CONFIGFILES">3.8. What's the difference between the
+NAME="CONFIGFILES"
+>3.8. What's the difference between the
 <SPAN
 CLASS="QUOTE"
 >"Cautious"</SPAN
 <SPAN
 CLASS="QUOTE"
 >"Cautious"</SPAN
@@ -370,372 +387,74 @@ CLASS="QUOTE"
 >"Medium"</SPAN
 > and <SPAN
 CLASS="QUOTE"
 >"Medium"</SPAN
 > and <SPAN
 CLASS="QUOTE"
->"Advanced"</SPAN
-> defaults?</H3
+>"Adventuresome"</SPAN
+> defaults?</A
+></H3
 ><P
 >  Configuring <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 ><P
 >  Configuring <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> is not entirely trivial. To help you get
-  started, we provide you with three different default action <SPAN
+> is not entirely trivial. To
+  help you get started, we provide you with three different default action
+  <SPAN
 CLASS="QUOTE"
 CLASS="QUOTE"
->"packages"</SPAN
-> in
-  the web based actions file editor at <A
+>"profiles"</SPAN
+> in the web based actions file editor at <A
 HREF="http://config.privoxy.org/show-status"
 TARGET="_top"
 >http://config.privoxy.org/show-status</A
 >.
 HREF="http://config.privoxy.org/show-status"
 TARGET="_top"
 >http://config.privoxy.org/show-status</A
 >.
-  The following table shows you, which of the most important features are enabled in each
-  configuration:
+  See the <A
+HREF="../user-manual/actions-file.html"
+TARGET="_top"
+><I
+CLASS="CITETITLE"
+>User
+  Manual</I
+></A
+> for a list of actions, and how the default 
+  profiles are set.
  </P
 ><P
  </P
 ><P
-><DIV
-CLASS="TABLE"
-><A
-NAME="AEN328"><P
-><B
->Table 1. Default Configurations</B
-></P
-><TABLE
-BORDER="1"
-CLASS="CALSTABLE"
-><THEAD
-><TR
-><TH
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Feature</TH
-><TH
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Cautious</TH
-><TH
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Intermadiate</TH
-><TH
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Advanced</TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Ad-blocking by URL</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Ad-filtering by size</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->GIF de-animation</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Referer forging</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Cookie handling</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->none</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->session-only</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->kill</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Pop-up killing</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Fast redirects</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->HTML taming</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->JavaScript taming</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Web-bug killing</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Fun text replacements</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Image tag reordering</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-><TR
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Ad-filtering by link</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->no</TD
-><TD
-WIDTH="25%"
-ALIGN="LEFT"
-VALIGN="TOP"
->yes</TD
-></TR
-></TBODY
-></TABLE
-></DIV
-></P
-><P
 > Where the defaults are likely to break some sites, exceptions for
  known popular <SPAN
 CLASS="QUOTE"
 >"problem"</SPAN
 > sites are included, but in
 > Where the defaults are likely to break some sites, exceptions for
  known popular <SPAN
 CLASS="QUOTE"
 >"problem"</SPAN
 > sites are included, but in
- general, the more aggressive your default settings are, the more
exceptions you will have to make later. See the <A
+ general, the more aggressive your default settings are, the more exceptions
+ you will have to make later. See the <A
 HREF="../user-manual/index.html"
 TARGET="_top"
 HREF="../user-manual/index.html"
 TARGET="_top"
->user manual</A
-> for a more
- deatiled discussion.</P
+><I
+CLASS="CITETITLE"
+>User Manual</I
+></A
+>
+ for a more deatiled discussion.</P
+><P
+> It should be noted that the <SPAN
+CLASS="QUOTE"
+>"Adventuresome"</SPAN
+> profile (formerly known 
+ as the <SPAN
+CLASS="QUOTE"
+>"Advanced"</SPAN
+> profile) is not only more
+ aggressive, but also includes fun and, extreme usage of most of
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy's</SPAN
+> features. Use at your own risk!</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="BROWSECONFIG">3.9. Why can I change the configuration 
-with a browser? Does that not raise security issues?</H3
+NAME="BROWSECONFIG"
+>3.9. Why can I change the configuration 
+with a browser? Does that not raise security issues?</A
+></H3
 ><P
 >  It may seem strange that regular users can edit the config files with their
   browsers, although the whole <TT
 ><P
 >  It may seem strange that regular users can edit the config files with their
   browsers, although the whole <TT
@@ -770,25 +489,25 @@ CLASS="APPLICATION"
   a LAN), you will probably want to turn the web-based editor and remote toggle
   features off by setting <SPAN
 CLASS="QUOTE"
   a LAN), you will probably want to turn the web-based editor and remote toggle
   features off by setting <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/config.html#ENABLE-EDIT-ACTIONS"
 TARGET="_top"
 >enable-edit-actions</A
 >
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/config.html#ENABLE-EDIT-ACTIONS"
 TARGET="_top"
 >enable-edit-actions</A
 >
-  0</TT
+  0</VAR
 >"</SPAN
 > and <SPAN
 CLASS="QUOTE"
 >"</SPAN
 > and <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/config.html#ENABLE-REMOTE-TOGGLE"
 TARGET="_top"
 >enable-remote-toggle</A
 >
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/config.html#ENABLE-REMOTE-TOGGLE"
 TARGET="_top"
 >enable-remote-toggle</A
 >
-  0</TT
+  0</VAR
 >"</SPAN
 > in the <A
 HREF="../user-manual/config.html"
 >"</SPAN
 > in the <A
 HREF="../user-manual/config.html"
@@ -813,13 +532,15 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN431">3.10. What is the <TT
+NAME="AEN404"
+>3.10. What is the <TT
 CLASS="FILENAME"
 >default.filter</TT
 > file? What is a <SPAN
 CLASS="QUOTE"
 >"filter"</SPAN
 CLASS="FILENAME"
 >default.filter</TT
 > file? What is a <SPAN
 CLASS="QUOTE"
 >"filter"</SPAN
->?</H3
+>?</A
+></H3
 ><P
 > The <A
 HREF="../user-manual/filter-file.html"
 ><P
 > The <A
 HREF="../user-manual/filter-file.html"
@@ -849,9 +570,9 @@ CLASS="EMPHASIS"
  <A
 HREF="../user-manual/actions-file.html#FILTER"
 TARGET="_top"
  <A
 HREF="../user-manual/actions-file.html#FILTER"
 TARGET="_top"
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->filter</TT
+>filter</VAR
 >
  action</A
 > in one of the actions files. Filtering is automatically
 >
  action</A
 > in one of the actions files. Filtering is automatically
@@ -881,32 +602,34 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN447">3.11. How can I set up <SPAN
+NAME="AEN420"
+>3.11. How can I set up <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > to act as a proxy for my 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > to act as a proxy for my 
- LAN?</H3
+ LAN?</A
+></H3
 ><P
 > By default, <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > only responds to requests 
 ><P
 > By default, <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > only responds to requests 
- from <TT
+ from <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->127.0.0.1</TT
+>127.0.0.1</VAR
 > (localhost). To have it act as a server for
  a network, this needs to be changed in the <A
 HREF="../user-manual/config.html"
 TARGET="_top"
 >main configuration file</A
 >. Look for
 > (localhost). To have it act as a server for
  a network, this needs to be changed in the <A
 HREF="../user-manual/config.html"
 TARGET="_top"
 >main configuration file</A
 >. Look for
- the <TT
+ the <VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/config.html#LISTEN-ADDRESS"
 TARGET="_top"
 >listen-address</A
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/config.html#LISTEN-ADDRESS"
 TARGET="_top"
 >listen-address</A
-></TT
+></VAR
 >
  option, which may be commented out with a <SPAN
 CLASS="QUOTE"
 >
  option, which may be commented out with a <SPAN
 CLASS="QUOTE"
@@ -940,6 +663,41 @@ CLASS="APPLICATION"
 >. Configure 
  all browsers on the network then to use this address and port number.</P
 ><P
 >. Configure 
  all browsers on the network then to use this address and port number.</P
 ><P
+> Alternately, you can have <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> listen on 
+ all available interfaces:</P
+><P
+> <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>  listen-address    :8118</PRE
+></TD
+></TR
+></TABLE
+></P
+><P
+> And then use <SPAN
+CLASS="APPLICATION"
+>Privoxy's</SPAN
+> 
+ <A
+HREF="../user-manual/config.html#PERMIT-ACCESS"
+TARGET="_top"
+>permit-access</A
+> 
+ feature to limit connections. A firewall in this situation is recommended 
+ as well.</P
+><P
+> The above steps should be the same for any TCP network, regardless of
+ operating system.</P
+><P
 > If you run <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > If you run <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -956,14 +714,16 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN465">3.12. Instead of ads, now I get a checkerboard pattern. I don't want to see anything.</H3
+NAME="AEN446"
+>3.12. Instead of ads, now I get a checkerboard pattern. I don't want to see anything.</A
+></H3
 ><P
 > The replacement for blocked images can be controlled with the <A
 HREF="../user-manual/actions-file.html#SET-IMAGE-BLOCKER"
 TARGET="_top"
 ><P
 > The replacement for blocked images can be controlled with the <A
 HREF="../user-manual/actions-file.html#SET-IMAGE-BLOCKER"
 TARGET="_top"
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->set-image-blocker</TT
+>set-image-blocker</VAR
 >
  action</A
 >. You have the choice of a checkerboard pattern, a transparent 1x1 GIF
 >
  action</A
 >. You have the choice of a checkerboard pattern, a transparent 1x1 GIF
@@ -972,13 +732,13 @@ CLASS="QUOTE"
 >"blank"</SPAN
 >), or a redirect to a custom image of your choice.
  Note that this choice only has effect for images which are blocked as images, i.e.
 >"blank"</SPAN
 >), or a redirect to a custom image of your choice.
  Note that this choice only has effect for images which are blocked as images, i.e.
- whose URLs match both a <TT
+ whose URLs match both a <VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#HANDLE-AS-IMAGE"
 TARGET="_top"
 >handle-as-image</A
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#HANDLE-AS-IMAGE"
 TARGET="_top"
 >handle-as-image</A
-></TT
+></VAR
 >
  <SPAN
 CLASS="emphasis"
 >
  <SPAN
 CLASS="emphasis"
@@ -986,21 +746,21 @@ CLASS="emphasis"
 CLASS="EMPHASIS"
 >and</I
 ></SPAN
 CLASS="EMPHASIS"
 >and</I
 ></SPAN
-> <TT
+> <VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#BLOCK"
 TARGET="_top"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#BLOCK"
 TARGET="_top"
 >block</A
-></TT
+></VAR
 > action.</P
 ><P
 > If you want to see nothing, then change the <A
 HREF="../user-manual/actions-file.html#SET-IMAGE-BLOCKER"
 TARGET="_top"
 > action.</P
 ><P
 > If you want to see nothing, then change the <A
 HREF="../user-manual/actions-file.html#SET-IMAGE-BLOCKER"
 TARGET="_top"
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->set-image-blocker</TT
+>set-image-blocker</VAR
 >
  action</A
 > to <SPAN
 >
  action</A
 > to <SPAN
@@ -1021,7 +781,9 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN482">3.13. Why would anybody want to see a checkerboard pattern?</H3
+NAME="AEN463"
+>3.13. Why would anybody want to see a checkerboard pattern?</A
+></H3
 ><P
 > Remember that <A
 HREF="general.html#WHATSANAD"
 ><P
 > Remember that <A
 HREF="general.html#WHATSANAD"
@@ -1045,8 +807,10 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN487">3.14. I see some images being replaced by a text
-instead of the checkerboard image. Why and how do I get rid of this?</H3
+NAME="AEN468"
+>3.14. I see some images being replaced by a text
+instead of the checkerboard image. Why and how do I get rid of this?</A
+></H3
 ><P
 > This happens when the banners are not embedded in the HTML code of the
  page itself, but in separate HTML (sub)documents that are loaded into (i)frames
 ><P
 > This happens when the banners are not embedded in the HTML code of the
  page itself, but in separate HTML (sub)documents that are loaded into (i)frames
@@ -1074,44 +838,43 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="SRVANY">3.15. Can <SPAN
+NAME="SRVANY"
+>3.15. Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > run as a service 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > run as a service 
-on Win2K/NT?</H3
+on Win2K/NT?</A
+></H3
 ><P
 > Yes, it can run as a system service using <B
 CLASS="COMMAND"
 >srvany.exe</B
 >.
 ><P
 > Yes, it can run as a system service using <B
 CLASS="COMMAND"
 >srvany.exe</B
 >.
- The only catch is that this will effectively disable the
- <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
-> icon (and its menu!) in the taskbar. You can have 
- one or the other, but not both at this time :( </P
-><P
-> There is a pending feature request for this functionality. See the discussion
- at <A
+ See the discussion at <A
 HREF="http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=11118"
 TARGET="_top"
 >http://sourceforge.net/tracker/?func=detail&#38;atid=361118&#38;aid=485617&#38;group_id=11118</A
 HREF="http://sourceforge.net/tracker/?func=detail&atid=361118&aid=485617&group_id=11118"
 TARGET="_top"
 >http://sourceforge.net/tracker/?func=detail&#38;atid=361118&#38;aid=485617&#38;group_id=11118</A
->, 
- for details, and a sample configuration.&#13;</P
+>,
+ for details, and a sample configuration.</P
+><P
+> Version 3.0.1 fixes the problem where the icon and menu where not available
+ in the taskbar for this usage.</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="OTHERPROXY">3.16. How can I make <SPAN
+NAME="OTHERPROXY"
+>3.16. How can I make <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > work with other 
 proxies like <SPAN
 CLASS="APPLICATION"
 >Squid</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > work with other 
 proxies like <SPAN
 CLASS="APPLICATION"
 >Squid</SPAN
->?</H3
+>?</A
+></H3
 ><P
 > This can be done and is often useful to combine the benefits of
  <SPAN
 ><P
 > This can be done and is often useful to combine the benefits of
  <SPAN
@@ -1135,11 +898,13 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="PORT-80">3.17. Can I just set <SPAN
+NAME="PORT-80"
+>3.17. Can I just set <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > to use port 80
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > to use port 80
-and thus avoid individual browser configuration?</H3
+and thus avoid individual browser configuration?</A
+></H3
 ><P
 > No, its more complicated than that. This only works with special kinds 
  of proxies known as <SPAN
 ><P
 > No, its more complicated than that. This only works with special kinds 
  of proxies known as <SPAN
@@ -1152,13 +917,15 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="TRANSPARENT">3.18. Can <SPAN
+NAME="TRANSPARENT"
+>3.18. Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > run as a <SPAN
 CLASS="QUOTE"
 >"transparent"</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > run as a <SPAN
 CLASS="QUOTE"
 >"transparent"</SPAN
-> proxy?</H3
+> proxy?</A
+></H3
 ><P
 > No, <SPAN
 CLASS="APPLICATION"
 ><P
 > No, <SPAN
 CLASS="APPLICATION"
@@ -1193,6 +960,127 @@ TARGET="_top"
 >http://www.transproxy.nlc.net.au/</A
 >).</P
 ></DIV
 >http://www.transproxy.nlc.net.au/</A
 >).</P
 ></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="OUTLOOK"
+>3.19. How can I configure <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> for use with <SPAN
+CLASS="APPLICATION"
+>Outlook
+ Express</SPAN
+>?</A
+></H3
+><P
+> <SPAN
+CLASS="APPLICATION"
+>Outlook Express</SPAN
+> uses <SPAN
+CLASS="APPLICATION"
+>Internet Explorer</SPAN
+> 
+ components to both render HTML, and fetch any HTTP requests that may be embedded in an HTML email.
+ So however you have <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> configured to work
+ with IE, this configuration should automatically be shared.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="OUTLOOK-MORE"
+>3.20. How can I have separate rules just for HTML mail?</A
+></H3
+><P
+> The short answer is, you can't. <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> has no way
+ of knowing which particular application makes a request, so there is no way to
+ distinguish between web pages and HTML mail.
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> just blindly proxies all requests. In the
+ case of <SPAN
+CLASS="APPLICATION"
+>Outlook Express</SPAN
+> (see above), OE uses 
+ IE anyway, and there is no way for <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> to ever 
+ be able to distinguish between them (nor could any other proxy type application for
+ that matter).</P
+><P
+> For a good discussion of some of the issues involved (including privacy and 
+ security issues), see 
+ <A
+HREF="http://sourceforge.net/tracker/?func=detail&atid=211118&aid=629518&group_id=11118"
+TARGET="_top"
+>http://sourceforge.net/tracker/?func=detail&#38;atid=211118&#38;aid=629518&#38;group_id=11118</A
+>.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="ALLOW-COOKIES"
+>3.21. How can I allow permanent cookies for my trusted sites?</A
+></H3
+><P
+>  There are several actions that relate to cookies. The default behavior is to 
+  allow only <SPAN
+CLASS="QUOTE"
+>"session cookies"</SPAN
+>, which means the cookies only last
+  for the current browser session. This eliminates most kinds of abuse related 
+  to cookies. But there may be cases where we want cookies to last.</P
+><P
+>  To disable all cookie actions, so that cookies are allowed unrestricted,
+  both in and out, for <VAR
+CLASS="LITERAL"
+>example.com</VAR
+>: </P
+><P
+> <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+> { -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only -filter{content-cookies} }
+  .example.com</PRE
+></TD
+></TR
+></TABLE
+></P
+><P
+> Place the above in <TT
+CLASS="FILENAME"
+>user.action</TT
+>. Note some of these may
+ be off by default anyway, so this might be redundant, but there is no harm
+ being explicit in what you want to happen. <TT
+CLASS="FILENAME"
+>user.action</TT
+>
+ includes an alias for this situation, called
+ <VAR
+CLASS="LITERAL"
+>allow-cookies</VAR
+>.</P
+></DIV
 ></DIV
 ><DIV
 CLASS="NAVFOOTER"
 ></DIV
 ><DIV
 CLASS="NAVFOOTER"
index 4b3ec76..9cb5f10 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Contacting the developers, Bug Reporting and Feature Requests</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Contacting the developers, Bug Reporting and Feature Requests</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="CONTACT">6. Contacting the developers, Bug Reporting and Feature Requests</H1
+NAME="CONTACT"
+>6. Contacting the developers, Bug Reporting and Feature Requests</A
+></H1
 ><P
 > We value your feedback. In fact, we rely on it to improve
  <SPAN
 ><P
 > We value your feedback. In fact, we rely on it to improve
  <SPAN
@@ -87,13 +89,15 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-SUPPORT">6.1. Get Support</H2
+NAME="CONTACT-SUPPORT"
+>6.1. Get Support</A
+></H2
 ><P
 ><P
-> For casual users, our support forum at
+> For casual users, our 
  <A
  <A
-HREF="http://sourceforge.net/"
+HREF="http://sourceforge.net/tracker/?group_id=11118&atid=211118"
 TARGET="_top"
 TARGET="_top"
->SourceForge</A
+>support forum at SourceForge</A
 >
  is probably best suited:
  <A
 >
  is probably best suited:
  <A
@@ -114,7 +118,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-BUGS">6.2. Report Bugs</H2
+NAME="CONTACT-BUGS"
+>6.2. Report Bugs</A
+></H2
 ><P
 > Please report all bugs <SPAN
 CLASS="emphasis"
 ><P
 > Please report all bugs <SPAN
 CLASS="emphasis"
@@ -177,7 +183,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-FEATURE">6.3. Request New Features</H2
+NAME="CONTACT-FEATURE"
+>6.3. Request New Features</A
+></H2
 ><P
 > You are welcome to submit ideas on new features or other proposals
  for improvement through our feature request tracker at
 ><P
 > You are welcome to submit ideas on new features or other proposals
  for improvement through our feature request tracker at
@@ -192,7 +200,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-ADS">6.4. Report Ads or Other Actions-Related Problems</H2
+NAME="CONTACT-ADS"
+>6.4. Report Ads or Other Actions-Related Problems</A
+></H2
 ><P
 > Please send feedback on ads that slipped through, innocent images that were blocked,
  and any other problems relating to the <TT
 ><P
 > Please send feedback on ads that slipped through, innocent images that were blocked,
  and any other problems relating to the <TT
@@ -233,7 +243,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-OTHER">6.5. Other</H2
+NAME="CONTACT-OTHER"
+>6.5. Other</A
+></H2
 ><P
 >For any other issues, feel free to use the mailing lists. Technically interested users
 and people who wish to contribute to the project are also welcome on the developers list!
 ><P
 >For any other issues, feel free to use the mailing lists. Technically interested users
 and people who wish to contribute to the project are also welcome on the developers list!
index 1694148..e26f35d 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Copyright, License and History</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Copyright, License and History</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
@@ -66,14 +66,16 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="COPYRIGHT">7. Privoxy Copyright, License and History</H1
+NAME="COPYRIGHT"
+>7. Privoxy Copyright, License and History</A
+></H1
 ><P
 ><P
-> Copyright © 2001, 2002 by Privoxy Developers <TT
+> Copyright © 2001 - 2004 by Privoxy Developers <CODE
 CLASS="EMAIL"
 >&#60;<A
 HREF="mailto:developers@privoxy.org"
 >developers@privoxy.org</A
 CLASS="EMAIL"
 >&#60;<A
 HREF="mailto:developers@privoxy.org"
 >developers@privoxy.org</A
->&#62;</TT
+>&#62;</CODE
 ></P
 ><P
 > Some source code is based on code Copyright © 1997 by Anonymous Coders
 ></P
 ><P
 > Some source code is based on code Copyright © 1997 by Anonymous Coders
@@ -101,7 +103,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN891">7.1. License</H2
+NAME="AEN1014"
+>7.1. License</A
+></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -161,7 +165,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN907">7.2. History</H2
+NAME="AEN1030"
+>7.2. History</A
+></H2
 ><P
 > In the beginning, there was the
  <A
 ><P
 > In the beginning, there was the
  <A
@@ -238,7 +244,7 @@ TARGET="_top"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, whose first
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, whose first
- stable release, 3.0, was released August, 2002. 
+ stable version, 3.0, was released August, 2002. 
  </P
 ></DIV
 ></DIV
  </P
 ></DIV
 ></DIV
index 7240c99..693fc3b 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >General Information</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >General Information</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
@@ -73,16 +73,20 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="GENERAL">1. General Information</H1
+NAME="GENERAL"
+>1. General Information</A
+></H1
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="NEWJB">1.1. What is this new version of <SPAN
+NAME="NEWJB"
+>1.1. What is this new version of <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
->?</H3
+>?</A
+></H3
 ><P
 > In the beginning, there was the
  <A
 ><P
 > In the beginning, there was the
  <A
@@ -159,7 +163,7 @@ TARGET="_top"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, whose first
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, whose first
- stable release, 3.0, was released August, 2002. 
+ stable version, 3.0, was released August, 2002. 
  </P
 ></DIV
 ><DIV
  </P
 ></DIV
 ><DIV
@@ -167,10 +171,12 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN45">1.2. Why <SPAN
+NAME="AEN45"
+>1.2. Why <SPAN
 CLASS="QUOTE"
 >"Privoxy"</SPAN
 CLASS="QUOTE"
 >"Privoxy"</SPAN
->? Why a name change at all?</H3
+>? Why a name change at all?</A
+></H3
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -233,21 +239,22 @@ CLASS="APPLICATION"
 ><P
 > The developers also believed that there are so many changes from the original 
  code, that it was time to make a clean break from the past and make 
 ><P
 > The developers also believed that there are so many changes from the original 
  code, that it was time to make a clean break from the past and make 
- a name in their own right, especially now with the pending
- release of version 3.0.</P
+ a name in their own right.</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="DIFFERS">1.3. How does <SPAN
+NAME="DIFFERS"
+>1.3. How does <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > differ
 from the old <SPAN
 CLASS="APPLICATION"
 >Junkbuster?</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > differ
 from the old <SPAN
 CLASS="APPLICATION"
 >Junkbuster?</SPAN
+></A
 ></H3
 ><P
 > <SPAN
 ></H3
 ><P
 > <SPAN
@@ -398,14 +405,16 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="PROXYMORON">1.4. What is a <SPAN
+NAME="PROXYMORON"
+>1.4. What is a <SPAN
 CLASS="QUOTE"
 >"proxy"</SPAN
 >? How does
 <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="QUOTE"
 >"proxy"</SPAN
 >? How does
 <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> work?</H3
+> work?</A
+></H3
 ><P
 >  A web proxy is a service, based on a software such as <SPAN
 CLASS="APPLICATION"
 ><P
 >  A web proxy is a service, based on a software such as <SPAN
 CLASS="APPLICATION"
@@ -438,11 +447,13 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="WHATSANAD">1.5. How does <SPAN
+NAME="WHATSANAD"
+>1.5. How does <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > know what is
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > know what is
-an ad, and what is not?</H3
+an ad, and what is not?</A
+></H3
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -497,15 +508,17 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN136">1.6. Can <SPAN
+NAME="AEN136"
+>1.6. Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > make mistakes? 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > make mistakes? 
-This does not sound very scientific.</H3
+This does not sound very scientific.</A
+></H3
 ><P
 > Actually, it's a black art ;-) And yes, it is always possible to have a broad
 ><P
 > Actually, it's a black art ;-) And yes, it is always possible to have a broad
- rule accidentally block or change something by mistake. There is a good chance
you may run into such a situation at some point. It is tricky writing rules to
+ rule accidentally block or change something by mistake. You will almost surely
run into such situations at some point. It is tricky writing rules to
  cover every conceivable possibility, and not occasionally get false positives.</P
 ><P
 > But this should not be a big concern since the
  cover every conceivable possibility, and not occasionally get false positives.</P
 ><P
 > But this should not be a big concern since the
@@ -525,7 +538,43 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="BROWSERS2">1.7. My browser does the same things as
+NAME="AEN143"
+>1.7. Will I have to configure <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+ before I can use it?</A
+></H3
+><P
+> No, not really. The default installation should give you a good starting
+ point, and block <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>most</I
+></SPAN
+> unwanted content.</P
+><P
+> But you will certainly run into situations where there are false positives,
+ or ads not being blocked that you may not want to see. In these cases, you
+ would certainly benefit by customizing <SPAN
+CLASS="APPLICATION"
+>Privoxy's</SPAN
+>
+ configuration to more closely match your individual situation. And we would
+ encourage you to do this. This is where the real power of
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> lies!</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="BROWSERS2"
+>1.8. My browser does the same things as
 <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -533,7 +582,8 @@ CLASS="APPLICATION"
 <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> at all?</H3
+> at all?</A
+></H3
 ><P
 >  Modern browsers do indeed have <SPAN
 CLASS="emphasis"
 ><P
 >  Modern browsers do indeed have <SPAN
 CLASS="emphasis"
@@ -564,8 +614,10 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="LICENSE">1.8. Is there is a license or fee? What about a 
-warranty? Registration?</H3
+NAME="LICENSE"
+>1.9. Is there is a license or fee? What about a 
+warranty? Registration?</A
+></H3
 ><P
 >  <SPAN
 CLASS="APPLICATION"
 ><P
 >  <SPAN
 CLASS="APPLICATION"
@@ -613,13 +665,17 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="JOINTEAM">1.9. I would like to help you, what do I do?</H3
+NAME="JOINTEAM"
+>1.10. I would like to help you, what do I do?</A
+></H3
 ><DIV
 CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><DIV
 CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
-NAME="JOINTEAM-MONEY">1.9.1. Money Money Money</H4
+NAME="JOINTEAM-MONEY"
+>1.10.1. Money Money Money</A
+></H4
 ><P
 > We, of course, welcome donations and could use money for domain registering,
  buying software to test <SPAN
 ><P
 > We, of course, welcome donations and could use money for domain registering,
  buying software to test <SPAN
@@ -638,7 +694,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="JOINTEAM-SOFTWARE">1.9.2. Software</H4
+NAME="JOINTEAM-SOFTWARE"
+>1.10.2. Software</A
+></H4
 ><P
 > If you are a vendor of a web-related software like a browser, web server
  or proxy, and would like us to ensure that <SPAN
 ><P
 > If you are a vendor of a web-related software like a browser, web server
  or proxy, and would like us to ensure that <SPAN
@@ -654,7 +712,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="JOINTEAM-WORK">1.9.3. You want to work with us?</H4
+NAME="JOINTEAM-WORK"
+>1.10.3. You want to work with us?</A
+></H4
 ><P
 >   Well, helping the team is always a good idea. We welcome new developers,
    packaging gurus or documentation writers. Simply <A
 ><P
 >   Well, helping the team is always a good idea. We welcome new developers,
    packaging gurus or documentation writers. Simply <A
index 114f8c0..12170be 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Frequently Asked Questions</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Frequently Asked Questions</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="NEXT"
 TITLE="General Information"
 HREF="general.html"><LINK
 REL="NEXT"
 TITLE="General Information"
 HREF="general.html"><LINK
@@ -26,14 +26,16 @@ CLASS="TITLEPAGE"
 ><H1
 CLASS="TITLE"
 ><A
 ><H1
 CLASS="TITLE"
 ><A
-NAME="AEN2">Privoxy Frequently Asked Questions</H1
+NAME="AEN2"
+>Privoxy Frequently Asked Questions</A
+></H1
 ><P
 CLASS="PUBDATE"
 > <SUB
 > <A
 HREF="copyright.html"
 >Copyright</A
 ><P
 CLASS="PUBDATE"
 > <SUB
 > <A
 HREF="copyright.html"
 >Copyright</A
-> © 2001, 2002 by 
+> © 2001-2004 by 
  <A
 HREF="http://www.privoxy.org"
 TARGET="_top"
  <A
 HREF="http://www.privoxy.org"
 TARGET="_top"
@@ -43,13 +45,15 @@ TARGET="_top"
 ><BR></P
 ><P
 CLASS="PUBDATE"
 ><BR></P
 ><P
 CLASS="PUBDATE"
->$Id: faq.sgml,v 2.2 2002/09/05 04:25:05 hal9 Exp $<BR></P
+>$Id: index.html,v 1.15.2.10 2004/01/31 00:05:43 oes Exp $<BR></P
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
-><A
-NAME="AEN9"><P
+><P
 ></P
 ></P
+><A
+NAME="AEN9"
+></A
 ><P
 > This FAQ gives quick answers to frequently asked  questions about
  <A
 ><P
 > This FAQ gives quick answers to frequently asked  questions about
  <A
@@ -73,7 +77,7 @@ CLASS="CITETITLE"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is a web proxy with advanced filtering
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is a web proxy with advanced filtering
- capabilities for protecting privacy, filtering web page content, managing
+ capabilities for protecting privacy, modifying web page content, managing
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <SPAN
 CLASS="APPLICATION"
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <SPAN
 CLASS="APPLICATION"
@@ -96,7 +100,7 @@ CLASS="APPLICATION"
 > (tm).</P
 ><P
 >  Please note that this document is constantly evolving. This copy represents
 > (tm).</P
 ><P
 >  Please note that this document is constantly evolving. This copy represents
-  the state at the release of version 3.1.1.
+  the state at the release of version 3.0.3.
   You can find the latest version of the document at <A
 HREF="http://www.privoxy.org/faq/"
 TARGET="_top"
   You can find the latest version of the document at <A
 HREF="http://www.privoxy.org/faq/"
 TARGET="_top"
@@ -187,6 +191,15 @@ This does not sound very scientific.</A
 ></DT
 ><DT
 >1.7. <A
 ></DT
 ><DT
 >1.7. <A
+HREF="general.html#AEN143"
+>Will I have to configure <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+ before I can use it?</A
+></DT
+><DT
+>1.8. <A
 HREF="general.html#BROWSERS2"
 >My browser does the same things as
 <SPAN
 HREF="general.html#BROWSERS2"
 >My browser does the same things as
 <SPAN
@@ -199,30 +212,30 @@ CLASS="APPLICATION"
 > at all?</A
 ></DT
 ><DT
 > at all?</A
 ></DT
 ><DT
->1.8. <A
+>1.9. <A
 HREF="general.html#LICENSE"
 >Is there is a license or fee? What about a 
 warranty? Registration?</A
 ></DT
 ><DT
 HREF="general.html#LICENSE"
 >Is there is a license or fee? What about a 
 warranty? Registration?</A
 ></DT
 ><DT
->1.9. <A
+>1.10. <A
 HREF="general.html#JOINTEAM"
 >I would like to help you, what do I do?</A
 ></DT
 ><DD
 ><DL
 ><DT
 HREF="general.html#JOINTEAM"
 >I would like to help you, what do I do?</A
 ></DT
 ><DD
 ><DL
 ><DT
->1.9.1. <A
+>1.10.1. <A
 HREF="general.html#JOINTEAM-MONEY"
 >Money Money Money</A
 ></DT
 ><DT
 HREF="general.html#JOINTEAM-MONEY"
 >Money Money Money</A
 ></DT
 ><DT
->1.9.2. <A
+>1.10.2. <A
 HREF="general.html#JOINTEAM-SOFTWARE"
 >Software</A
 ></DT
 ><DT
 HREF="general.html#JOINTEAM-SOFTWARE"
 >Software</A
 ></DT
 ><DT
->1.9.3. <A
+>1.10.3. <A
 HREF="general.html#JOINTEAM-WORK"
 >You want to work with us?</A
 ></DT
 HREF="general.html#JOINTEAM-WORK"
 >You want to work with us?</A
 ></DT
@@ -252,6 +265,14 @@ HREF="installation.html#WHICHOS"
 ></DT
 ><DT
 >2.3. <A
 ></DT
 ><DT
 >2.3. <A
+HREF="installation.html#EMAIL-CLIENT"
+>Can I use <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> with my email client?</A
+></DT
+><DT
+>2.4. <A
 HREF="installation.html#NEWINSTALL"
 >Can I install  
  <SPAN
 HREF="installation.html#NEWINSTALL"
 >Can I install  
  <SPAN
@@ -263,8 +284,8 @@ CLASS="APPLICATION"
 >?</A
 ></DT
 ><DT
 >?</A
 ></DT
 ><DT
->2.4. <A
-HREF="installation.html#AEN209"
+>2.5. <A
+HREF="installation.html#AEN226"
 >I just installed <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >I just installed <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -272,7 +293,7 @@ CLASS="APPLICATION"
 special I have to do now?</A
 ></DT
 ><DT
 special I have to do now?</A
 ></DT
 ><DT
->2.5. <A
+>2.6. <A
 HREF="installation.html#LOCALHOST"
 >What is the proxy address of <SPAN
 CLASS="APPLICATION"
 HREF="installation.html#LOCALHOST"
 >What is the proxy address of <SPAN
 CLASS="APPLICATION"
@@ -280,7 +301,7 @@ CLASS="APPLICATION"
 >?</A
 ></DT
 ><DT
 >?</A
 ></DT
 ><DT
->2.6. <A
+>2.7. <A
 HREF="installation.html#NOTHING"
 >I just installed <SPAN
 CLASS="APPLICATION"
 HREF="installation.html#NOTHING"
 >I just installed <SPAN
 CLASS="APPLICATION"
@@ -288,6 +309,18 @@ CLASS="APPLICATION"
 >, and nothing is happening.
 All the ads are there. What's wrong?</A
 ></DT
 >, and nothing is happening.
 All the ads are there. What's wrong?</A
 ></DT
+><DT
+>2.8. <A
+HREF="installation.html#NOTUSED"
+>I get a <SPAN
+CLASS="QUOTE"
+>"Privoxy is not being used"</SPAN
+> dummy page although
+<SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> is running and being used.</A
+></DT
 ></DL
 ></DD
 ><DT
 ></DL
 ></DD
 ><DT
@@ -309,7 +342,7 @@ HREF="configuration.html#NEWCONFIG"
 ></DT
 ><DT
 >3.3. <A
 ></DT
 ><DT
 >3.3. <A
-HREF="configuration.html#AEN266"
+HREF="configuration.html#AEN312"
 >What is an <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
 >What is an <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
@@ -329,13 +362,13 @@ CLASS="QUOTE"
 ></DT
 ><DT
 >3.5. <A
 ></DT
 ><DT
 >3.5. <A
-HREF="configuration.html#AEN285"
+HREF="configuration.html#AEN331"
 >How are actions files configured? What is the easiest
 way to do this?</A
 ></DT
 ><DT
 >3.6. <A
 >How are actions files configured? What is the easiest
 way to do this?</A
 ></DT
 ><DT
 >3.6. <A
-HREF="configuration.html#AEN293"
+HREF="configuration.html#AEN339"
 >There are several different <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
 >There are several different <SPAN
 CLASS="QUOTE"
 >"actions"</SPAN
@@ -359,7 +392,7 @@ CLASS="QUOTE"
 >"Medium"</SPAN
 > and <SPAN
 CLASS="QUOTE"
 >"Medium"</SPAN
 > and <SPAN
 CLASS="QUOTE"
->"Advanced"</SPAN
+>"Adventuresome"</SPAN
 > defaults?</A
 ></DT
 ><DT
 > defaults?</A
 ></DT
 ><DT
@@ -370,7 +403,7 @@ with a browser? Does that not raise security issues?</A
 ></DT
 ><DT
 >3.10. <A
 ></DT
 ><DT
 >3.10. <A
-HREF="configuration.html#AEN431"
+HREF="configuration.html#AEN404"
 >What is the <TT
 CLASS="FILENAME"
 >default.filter</TT
 >What is the <TT
 CLASS="FILENAME"
 >default.filter</TT
@@ -381,7 +414,7 @@ CLASS="QUOTE"
 ></DT
 ><DT
 >3.11. <A
 ></DT
 ><DT
 >3.11. <A
-HREF="configuration.html#AEN447"
+HREF="configuration.html#AEN420"
 >How can I set up <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >How can I set up <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -390,17 +423,17 @@ CLASS="APPLICATION"
 ></DT
 ><DT
 >3.12. <A
 ></DT
 ><DT
 >3.12. <A
-HREF="configuration.html#AEN465"
+HREF="configuration.html#AEN446"
 >Instead of ads, now I get a checkerboard pattern. I don't want to see anything.</A
 ></DT
 ><DT
 >3.13. <A
 >Instead of ads, now I get a checkerboard pattern. I don't want to see anything.</A
 ></DT
 ><DT
 >3.13. <A
-HREF="configuration.html#AEN482"
+HREF="configuration.html#AEN463"
 >Why would anybody want to see a checkerboard pattern?</A
 ></DT
 ><DT
 >3.14. <A
 >Why would anybody want to see a checkerboard pattern?</A
 ></DT
 ><DT
 >3.14. <A
-HREF="configuration.html#AEN487"
+HREF="configuration.html#AEN468"
 >I see some images being replaced by a text
 instead of the checkerboard image. Why and how do I get rid of this?</A
 ></DT
 >I see some images being replaced by a text
 instead of the checkerboard image. Why and how do I get rid of this?</A
 ></DT
@@ -445,6 +478,28 @@ CLASS="QUOTE"
 >"transparent"</SPAN
 > proxy?</A
 ></DT
 >"transparent"</SPAN
 > proxy?</A
 ></DT
+><DT
+>3.19. <A
+HREF="configuration.html#OUTLOOK"
+>How can I configure <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> for use with <SPAN
+CLASS="APPLICATION"
+>Outlook
+ Express</SPAN
+>?</A
+></DT
+><DT
+>3.20. <A
+HREF="configuration.html#OUTLOOK-MORE"
+>How can I have separate rules just for HTML mail?</A
+></DT
+><DT
+>3.21. <A
+HREF="configuration.html#ALLOW-COOKIES"
+>How can I allow permanent cookies for my trusted sites?</A
+></DT
 ></DL
 ></DD
 ><DT
 ></DL
 ></DD
 ><DT
@@ -456,7 +511,7 @@ HREF="misc.html"
 ><DL
 ><DT
 >4.1. <A
 ><DL
 ><DT
 >4.1. <A
-HREF="misc.html#AEN528"
+HREF="misc.html#AEN537"
 >How much does <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >How much does <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -492,7 +547,7 @@ HREF="misc.html#IP"
 ></DT
 ><DT
 >4.7. <A
 ></DT
 ><DT
 >4.7. <A
-HREF="misc.html#AEN588"
+HREF="misc.html#AEN598"
 >Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -500,13 +555,13 @@ CLASS="APPLICATION"
 ></DT
 ><DT
 >4.8. <A
 ></DT
 ><DT
 >4.8. <A
-HREF="misc.html#AEN599"
+HREF="misc.html#AEN609"
 >Might some things break because header information or
 content is being altered?</A
 ></DT
 ><DT
 >4.9. <A
 >Might some things break because header information or
 content is being altered?</A
 ></DT
 ><DT
 >4.9. <A
-HREF="misc.html#AEN610"
+HREF="misc.html#AEN620"
 >Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -518,7 +573,7 @@ speed up web browsing?</A
 ></DT
 ><DT
 >4.10. <A
 ></DT
 ><DT
 >4.10. <A
-HREF="misc.html#AEN620"
+HREF="misc.html#AEN630"
 >What about as a firewall? Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >What about as a firewall? Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -526,13 +581,13 @@ CLASS="APPLICATION"
 ></DT
 ><DT
 >4.11. <A
 ></DT
 ><DT
 >4.11. <A
-HREF="misc.html#AEN626"
+HREF="misc.html#AEN636"
 >I have large empty spaces / a checkerboard pattern now where
 ads used to be. Why?</A
 ></DT
 ><DT
 >4.12. <A
 >I have large empty spaces / a checkerboard pattern now where
 ads used to be. Why?</A
 ></DT
 ><DT
 >4.12. <A
-HREF="misc.html#AEN631"
+HREF="misc.html#AEN641"
 >How can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >How can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -540,7 +595,7 @@ CLASS="APPLICATION"
 ></DT
 ><DT
 >4.13. <A
 ></DT
 ><DT
 >4.13. <A
-HREF="misc.html#AEN642"
+HREF="misc.html#AEN656"
 ><SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 ><SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -596,6 +651,15 @@ from a webserver? FTP server?</A
 ></DT
 ><DT
 >4.18. <A
 ></DT
 ><DT
 >4.18. <A
+HREF="misc.html#DOWNLOADS2"
+>I just downloaded a Perl script, and <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+altered it! Yikes, what is wrong!</A
+></DT
+><DT
+>4.19. <A
 HREF="misc.html#SEEALSO"
 >Where can I find more information about <SPAN
 CLASS="APPLICATION"
 HREF="misc.html#SEEALSO"
 >Where can I find more information about <SPAN
 CLASS="APPLICATION"
@@ -603,6 +667,18 @@ CLASS="APPLICATION"
 >
 and related issues?</A
 ></DT
 >
 and related issues?</A
 ></DT
+><DT
+>4.20. <A
+HREF="misc.html#MICROSUCK"
+>I've noticed that Privoxy changes <SPAN
+CLASS="QUOTE"
+>"Microsoft"</SPAN
+> to 
+<SPAN
+CLASS="QUOTE"
+>"MicroSuck"</SPAN
+>! Why are you manipulating my browsing?</A
+></DT
 ></DL
 ></DD
 ><DT
 ></DL
 ></DD
 ><DT
@@ -614,7 +690,7 @@ HREF="trouble.html"
 ><DL
 ><DT
 >5.1. <A
 ><DL
 ><DT
 >5.1. <A
-HREF="trouble.html#AEN755"
+HREF="trouble.html#AEN801"
 >I just upgraded and am getting <SPAN
 CLASS="QUOTE"
 >"connection refused"</SPAN
 >I just upgraded and am getting <SPAN
 CLASS="QUOTE"
 >"connection refused"</SPAN
@@ -623,7 +699,7 @@ with every web page?</A
 ></DT
 ><DT
 >5.2. <A
 ></DT
 ><DT
 >5.2. <A
-HREF="trouble.html#AEN768"
+HREF="trouble.html#AEN814"
 >I just added a new rule, but the steenkin ad is 
 still getting through. How?</A
 ></DT
 >I just added a new rule, but the steenkin ad is 
 still getting through. How?</A
 ></DT
@@ -672,6 +748,16 @@ HREF="trouble.html#OSXUNINSTALL"
 ></DT
 ><DT
 >5.8. <A
 ></DT
 ><DT
 >5.8. <A
+HREF="trouble.html#OSXIMAGES"
+>In Mac OSX Panther (10.3), images often fail to load and/or I
+ experience random delays in page loading. I'm using
+ <VAR
+CLASS="LITERAL"
+>localhost</VAR
+> as my browser's proxy setting.</A
+></DT
+><DT
+>5.9. <A
 HREF="trouble.html#BLANKPAGE"
 >I get a completely blank page at one site. <SPAN
 CLASS="QUOTE"
 HREF="trouble.html#BLANKPAGE"
 >I get a completely blank page at one site. <SPAN
 CLASS="QUOTE"
@@ -680,7 +766,68 @@ CLASS="QUOTE"
  shows only: <SPAN
 CLASS="MARKUP"
 >&#60;html&#62;&#60;body&#62;&#60;/body&#62;&#60;/html&#62;</SPAN
  shows only: <SPAN
 CLASS="MARKUP"
 >&#60;html&#62;&#60;body&#62;&#60;/body&#62;&#60;/html&#62;</SPAN
->.</A
+>. Without
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> the page loads fine.</A
+></DT
+><DT
+>5.10. <A
+HREF="trouble.html#ERROR503"
+>Why am I getting a 503 Error (WSAECONNREFUSED) on every page?</A
+></DT
+><DT
+>5.11. <A
+HREF="trouble.html#NOHOSTNAME"
+>My logs show many <SPAN
+CLASS="QUOTE"
+>"Unable to get my own hostname"</SPAN
+> lines.
+Why?</A
+></DT
+><DT
+>5.12. <A
+HREF="trouble.html#INUSE"
+>When I try to launch <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>, I get an 
+error message <SPAN
+CLASS="QUOTE"
+>"port 8118 is already in use"</SPAN
+> (or similar wording).
+Why?</A
+></DT
+><DT
+>5.13. <A
+HREF="trouble.html#DEMORONIZER"
+>Pages with UTF-8 fonts are garbled.</A
+></DT
+><DT
+>5.14. <A
+HREF="trouble.html#DEMORONIZER2"
+>Why are binary files (such as images) corrupted when <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+ is used?</A
+></DT
+><DT
+>5.15. <A
+HREF="trouble.html#DEMORONIZER3"
+>What is the <SPAN
+CLASS="QUOTE"
+>"demoronizer"</SPAN
+> and why is it there?</A
+></DT
+><DT
+>5.16. <A
+HREF="trouble.html#WINDOWOPEN"
+>Why do I keep seeing <SPAN
+CLASS="QUOTE"
+>"PrivoxyWindowOpen()"</SPAN
+> in raw source code?</A
 ></DT
 ></DL
 ></DD
 ></DT
 ></DL
 ></DD
@@ -727,12 +874,12 @@ HREF="copyright.html"
 ><DL
 ><DT
 >7.1. <A
 ><DL
 ><DT
 >7.1. <A
-HREF="copyright.html#AEN891"
+HREF="copyright.html#AEN1014"
 >License</A
 ></DT
 ><DT
 >7.2. <A
 >License</A
 ></DT
 ><DT
 >7.2. <A
-HREF="copyright.html#AEN907"
+HREF="copyright.html#AEN1030"
 >History</A
 ></DT
 ></DL
 >History</A
 ></DT
 ></DL
index 06fff2b..463419a 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Installation</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Installation</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
@@ -73,16 +73,20 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="INSTALLATION">2. Installation</H1
+NAME="INSTALLATION"
+>2. Installation</A
+></H1
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="WHICHBROWSERS">2.1. Which browsers are supported by <SPAN
+NAME="WHICHBROWSERS"
+>2.1. Which browsers are supported by <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
->?</H3
+>?</A
+></H3
 ><P
 > Any browser that can be configured to use a proxy, which 
  should be virtually all browsers. Direct browser support is not necessary
 ><P
 > Any browser that can be configured to use a proxy, which 
  should be virtually all browsers. Direct browser support is not necessary
@@ -98,15 +102,17 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="WHICHOS">2.2. Which operating systems are supported?</H3
+NAME="WHICHOS"
+>2.2. Which operating systems are supported?</A
+></H3
 ><P
 > At present, <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is known to run on
 ><P
 > At present, <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is known to run on
- Windows(95, 98, ME, 2000, XP), Linux (RedHat, SuSE, Debian, Conectiva, Gentoo,
- Slackware), Mac OSX, OS/2, AmigaOS, BeOS, FreeBSD, NetBSD, Solaris, and more 
- flavors of Unix.</P
+ Windows(95, 98, ME, 2000, XP), Linux (RedHat, SuSE, Debian, Conectiva, Gentoo, 
+ Slackware), Mac OSX, OS/2, AmigaOS, BeOS, FreeBSD, NetBSD, OpenBSD, Solaris,
and many more flavors of Unix.</P
 ><P
 > But any operating system that runs TCP/IP, can conceivably take advantage of
  <SPAN
 ><P
 > But any operating system that runs TCP/IP, can conceivably take advantage of
  <SPAN
@@ -131,14 +137,52 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="NEWINSTALL">2.3. Can I install  
+NAME="EMAIL-CLIENT"
+>2.3. Can I use <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> with my email client?</A
+></H3
+><P
+> As long as there is some way to set a HTTP proxy for the client, then yes,
+ any application can be used, whether it is strictly speaking a
+ <SPAN
+CLASS="QUOTE"
+>"browser"</SPAN
+> or not. Though this may not be the best approach for
+ dealing with some of the common abuses of HTML in email. See <A
+HREF="configuration.html#OUTLOOK"
+>How can I configure <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+ with <SPAN
+CLASS="APPLICATION"
+>Outlook Express</SPAN
+>?</A
+> below for more on
+ this. </P
+><P
+> Be aware that HTML email presents a number of unique security and privacy
+ related issues, that can require advanced skills to overcome. The developers
+ recommend using email clients that can be configured to convert HTML to plain
+ text for these reasons.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="NEWINSTALL"
+>2.4. Can I install  
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > over <SPAN
 CLASS="APPLICATION"
 >Junkbuster</SPAN
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > over <SPAN
 CLASS="APPLICATION"
 >Junkbuster</SPAN
->?</H3
+>?</A
+></H3
 ><P
 >   We recommend you un-install <SPAN
 CLASS="APPLICATION"
 ><P
 >   We recommend you un-install <SPAN
 CLASS="APPLICATION"
@@ -177,11 +221,13 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN209">2.4. I just installed <SPAN
+NAME="AEN226"
+>2.5. I just installed <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >. Is there anything 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >. Is there anything 
-special I have to do now?</H3
+special I have to do now?</A
+></H3
 ><P
 > All browsers must be told to use <SPAN
 CLASS="APPLICATION"
 ><P
 > All browsers must be told to use <SPAN
 CLASS="APPLICATION"
@@ -190,26 +236,28 @@ CLASS="APPLICATION"
  as a proxy by specifying the correct proxy address and port number 
  in the appropriate configuration area for the browser. See below.
  You should also flush your browser's memory and disk cache to get rid of any
  as a proxy by specifying the correct proxy address and port number 
  in the appropriate configuration area for the browser. See below.
  You should also flush your browser's memory and disk cache to get rid of any
- cached junk items.&#13;</P
+ cached junk items, and remove any stored cookies.&#13;</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="LOCALHOST">2.5. What is the proxy address of <SPAN
+NAME="LOCALHOST"
+>2.6. What is the proxy address of <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
->?</H3
+>?</A
+></H3
 ><P
 >  If you set up the <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > to run on
   the computer you browse from (rather than your ISP's server or some
 ><P
 >  If you set up the <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > to run on
   the computer you browse from (rather than your ISP's server or some
-  networked computer on a LAN), the proxy will be on <TT
+  networked computer on a LAN), the proxy will be on <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->127.0.0.1</TT
+>127.0.0.1</VAR
 > 
   (sometimes referred to as <SPAN
 CLASS="QUOTE"
 > 
   (sometimes referred to as <SPAN
 CLASS="QUOTE"
@@ -277,8 +325,7 @@ CLASS="APPLICATION"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > does not currently handle
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > does not currently handle
-  protocols such as FTP, SMTP, IM, IRC, ICQ, or other Internet
-  protocols. 
+  any other protocols such as FTP, SMTP, IM, IRC, ICQ, etc. 
  </P
 ></DIV
 ><DIV
  </P
 ></DIV
 ><DIV
@@ -286,11 +333,13 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="NOTHING">2.6. I just installed <SPAN
+NAME="NOTHING"
+>2.7. I just installed <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, and nothing is happening.
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, and nothing is happening.
-All the ads are there. What's wrong?</H3
+All the ads are there. What's wrong?</A
+></H3
 ><P
 > Did you configure your browser to use <SPAN
 CLASS="APPLICATION"
 ><P
 > Did you configure your browser to use <SPAN
 CLASS="APPLICATION"
@@ -304,10 +353,11 @@ CLASS="APPLICATION"
 > is running, and your browser 
  is correctly configured by entering the special URL: 
  <A
 > is running, and your browser 
  is correctly configured by entering the special URL: 
  <A
-HREF="http://config.privoxy.org/"
+HREF="http://p.p/"
 TARGET="_top"
 TARGET="_top"
->http://config.privoxy.org/</A
->.
+>http://p.p/</A
+>. 
  This should take you to a page titled <SPAN
 CLASS="QUOTE"
 >"This is Privoxy.."</SPAN
  This should take you to a page titled <SPAN
 CLASS="QUOTE"
 >"This is Privoxy.."</SPAN
@@ -334,6 +384,122 @@ CLASS="APPLICATION"
 HREF="../user-manual/config.html#LOGFILE"
 TARGET="_top"
 >log file</A
 HREF="../user-manual/config.html#LOGFILE"
 TARGET="_top"
 >log file</A
+>. For instructions
+ on starting <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> and browser configuration,
+ see the <A
+HREF="http://www.privoxy.org/user-manual/startup.html"
+TARGET="_top"
+>chapter
+ on starting <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+></A
+> in the
+ <A
+HREF="http://www.privoxy.org/user-manual/"
+TARGET="_top"
+>user manual</A
+>.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="NOTUSED"
+>2.8. I get a <SPAN
+CLASS="QUOTE"
+>"Privoxy is not being used"</SPAN
+> dummy page although
+<SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> is running and being used.</A
+></H3
+><P
+> First, make sure that Privoxy is <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>really</I
+></SPAN
+> running and
+ being used by visiting <A
+HREF="http://p.p/"
+TARGET="_top"
+>http://p.p/</A
+>. You
+ should see the <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> main page. If not, see
+ the <A
+HREF="http://www.privoxy.org/user-manual/startup.html"
+TARGET="_top"
+>chapter
+ on starting <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+></A
+> in the
+ <A
+HREF="http://www.privoxy.org/user-manual/"
+TARGET="_top"
+>user manual</A
+>.</P
+><P
+> Now if <A
+HREF="http://p.p/"
+TARGET="_top"
+>http://p.p/</A
+> works for you, but
+ other parts of <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>'s web interface show
+ the dummy page, your browser has cached a redirection it encountered before
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> was being used. You need to clear your
+ browser's cache. Note that shift-reloading the dummy page won't help, since
+ that'll only refresh the dummy page, not the redirection that lead you there.</P
+><P
+> The procedure for clearing the cache varies from browser to browser. As an
+ example, <SPAN
+CLASS="APPLICATION"
+>Mozilla</SPAN
+> users would click 
+ <SPAN
+CLASS="GUIBUTTON"
+>Edit</SPAN
+> --&#62; <SPAN
+CLASS="GUIBUTTON"
+>Preferences</SPAN
+> --&#62;
+ <SPAN
+CLASS="GUIBUTTON"
+>Advanced</SPAN
+> --&#62; <SPAN
+CLASS="GUIBUTTON"
+>Cache</SPAN
+> and
+ then click both <SPAN
+CLASS="QUOTE"
+>"<SPAN
+CLASS="GUIBUTTON"
+>Clear Memory Cache</SPAN
+>"</SPAN
+>
+ and <SPAN
+CLASS="QUOTE"
+>"<SPAN
+CLASS="GUIBUTTON"
+>Clear Disk Cache</SPAN
+>"</SPAN
 >.</P
 ></DIV
 ></DIV
 >.</P
 ></DIV
 ></DIV
index abaf42b..13dfb88 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Miscellaneous</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Miscellaneous</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
@@ -73,17 +73,21 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="MISC">4. Miscellaneous</H1
+NAME="MISC"
+>4. Miscellaneous</A
+></H1
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN528">4.1. How much does <SPAN
+NAME="AEN537"
+>4.1. How much does <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > slow my browsing down? This 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > slow my browsing down? This 
-has to add extra time to browsing.</H3
+has to add extra time to browsing.</A
+></H3
 ><P
 > It should not slow you down any in real terms, and may actually help 
  speed things up since ads, banners and other junk are not being displayed.
 ><P
 > It should not slow you down any in real terms, and may actually help 
  speed things up since ads, banners and other junk are not being displayed.
@@ -98,21 +102,21 @@ CLASS="APPLICATION"
 > <SPAN
 CLASS="QUOTE"
 >"Filtering"</SPAN
 > <SPAN
 CLASS="QUOTE"
 >"Filtering"</SPAN
-> content via the <TT
+> content via the <VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#FILTER"
 TARGET="_top"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#FILTER"
 TARGET="_top"
 >filter</A
-></TT
+></VAR
 > or
 > or
- <TT
+ <VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#DEANIMATE-GIFS"
 TARGET="_top"
 >deanimate-gifs</A
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#DEANIMATE-GIFS"
 TARGET="_top"
 >deanimate-gifs</A
-></TT
+></VAR
 >
  actions may cause a perceived slowdown, since the entire document needs to be buffered
  before displaying. See below.</P
 >
  actions may cause a perceived slowdown, since the entire document needs to be buffered
  before displaying. See below.</P
@@ -122,24 +126,26 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="LOADINGTIMES">4.2. I noticed considerable
-delays in page requests compared to the old Junkbuster. What's wrong?</H3
+NAME="LOADINGTIMES"
+>4.2. I noticed considerable
+delays in page requests compared to the old Junkbuster. What's wrong?</A
+></H3
 ><P
 ><P
-> If you use any <TT
+> If you use any <VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#FILTER"
 TARGET="_top"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#FILTER"
 TARGET="_top"
 >filter</A
-></TT
+></VAR
 > action,
 > action,
- such as filtering banners by size, web-bugs etc, or the <TT
+ such as filtering banners by size, web-bugs etc, or the <VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#DEANIMATE-GIFS"
 TARGET="_top"
 >deanimate-gifs</A
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#DEANIMATE-GIFS"
 TARGET="_top"
 >deanimate-gifs</A
-></TT
+></VAR
 >
  action, the entire document must be loaded into memory in order for the filtering 
  mechanism to work, and nothing is sent to the browser during this time.</P
 >
  action, the entire document must be loaded into memory in order for the filtering 
  mechanism to work, and nothing is sent to the browser during this time.</P
@@ -150,15 +156,25 @@ TARGET="_top"
  noticeable on slow dialup connections.
  </P
 ><P
  noticeable on slow dialup connections.
  </P
 ><P
-> Filtering is automatically disabled for inappropriate MIME types.&#13;</P
+> Filtering is automatically disabled for inappropriate MIME types. But note 
+ that if the web server mis-reports the MIME type, then content that should
+ not be filtered, could be. <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> only knows how
+ to differentiate filterable content because of the MIME type as reported by
+ the server, or because of some configuration setting that enables/disables
+ filtering.&#13;</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="CONFIGURL">4.3. What are "http://config.privoxy.org/" and
-"http://p.p/"?</H3
+NAME="CONFIGURL"
+>4.3. What are "http://config.privoxy.org/" and
+"http://p.p/"?</A
+></H3
 ><P
 > <A
 HREF="http://config.privoxy.org/"
 ><P
 > <A
 HREF="http://config.privoxy.org/"
@@ -193,7 +209,7 @@ TARGET="_top"
 >
  takes you to a page saying <SPAN
 CLASS="QUOTE"
 >
  takes you to a page saying <SPAN
 CLASS="QUOTE"
->"This is Privoxy.."</SPAN
+>"This is Privoxy ..."</SPAN
 >, everything is OK.
  If you get a page saying <SPAN
 CLASS="QUOTE"
 >, everything is OK.
  If you get a page saying <SPAN
 CLASS="QUOTE"
@@ -232,14 +248,16 @@ CLASS="APPLICATION"
 >Privoxy</SPAN
 >, http://example.com/show-proxy-args and http://i.j.b/,
  are no longer supported. If you still use such an old version, you should really consider
 >Privoxy</SPAN
 >, http://example.com/show-proxy-args and http://i.j.b/,
  are no longer supported. If you still use such an old version, you should really consider
- upgrading to 3.1.1.</P
+ upgrading to 3.0.3.</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="BLOCKLIST">4.4. Do you still maintain the blocklists?</H3
+NAME="BLOCKLIST"
+>4.4. Do you still maintain the blocklists?</A
+></H3
 ><P
 >  No. The patterns for blocking now reside (among other things) in the <A
 HREF="../user-manual/actions-file.html"
 ><P
 >  No. The patterns for blocking now reside (among other things) in the <A
 HREF="../user-manual/actions-file.html"
@@ -253,7 +271,9 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="NEWADS">4.5. How can I submit new ads?</H3
+NAME="NEWADS"
+>4.5. How can I submit new ads?</A
+></H3
 ><P
 >Yes, absolutely! Please see the <A
 HREF="contact.html"
 ><P
 >Yes, absolutely! Please see the <A
 HREF="contact.html"
@@ -270,7 +290,9 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="IP">4.6. How can I hide my IP address?</H3
+NAME="IP"
+>4.6. How can I hide my IP address?</A
+></H3
 ><P
 > If you run both the browser and the proxy locally, you cannot hide your IP
  address with <SPAN
 ><P
 > If you run both the browser and the proxy locally, you cannot hide your IP
  address with <SPAN
@@ -299,7 +321,7 @@ TARGET="_top"
 HREF="http://anon.inf.tu-dresden.de/index_en.html"
 TARGET="_top"
 >http://anon.inf.tu-dresden.de/index_en.html</A
 HREF="http://anon.inf.tu-dresden.de/index_en.html"
 TARGET="_top"
 >http://anon.inf.tu-dresden.de/index_en.html</A
->.</P
+>).</P
 ><P
 > There is, however, even in the single-machine case the possibility to make the
  server believe that your machine is in fact a shared proxy serving a whole big
 ><P
 > There is, however, even in the single-machine case the possibility to make the
  server believe that your machine is in fact a shared proxy serving a whole big
@@ -310,10 +332,12 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN588">4.7. Can <SPAN
+NAME="AEN598"
+>4.7. Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> guarantee I am anonymous?</H3
+> guarantee I am anonymous?</A
+></H3
 ><P
 > No. Your chances of remaining anonymous are greatly improved, but unless you
  are an expert on Internet security it would be safest to assume that
 ><P
 > No. Your chances of remaining anonymous are greatly improved, but unless you
  are an expert on Internet security it would be safest to assume that
@@ -357,8 +381,10 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN599">4.8. Might some things break because header information or
-content is being altered?</H3
+NAME="AEN609"
+>4.8. Might some things break because header information or
+content is being altered?</A
+></H3
 ><P
 > Definitely. More and more sites use HTTP header content to decide what to
  display and how to display it. There is many ways that this can be handled, 
 ><P
 > Definitely. More and more sites use HTTP header content to decide what to
  display and how to display it. There is many ways that this can be handled, 
@@ -405,14 +431,16 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN610">4.9. Can <SPAN
+NAME="AEN620"
+>4.9. Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > act as a <SPAN
 CLASS="QUOTE"
 >"caching"</SPAN
 > proxy to 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > act as a <SPAN
 CLASS="QUOTE"
 >"caching"</SPAN
 > proxy to 
-speed up web browsing?</H3
+speed up web browsing?</A
+></H3
 ><P
 > No, it does not have this ability at all. You want something like 
  <A
 ><P
 > No, it does not have this ability at all. You want something like 
  <A
@@ -445,10 +473,12 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN620">4.10. What about as a firewall? Can <SPAN
+NAME="AEN630"
+>4.10. What about as a firewall? Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> protect me?</H3
+> protect me?</A
+></H3
 ><P
 > Not in the way you mean, or in the way a true firewall can. 
  <SPAN
 ><P
 > Not in the way you mean, or in the way a true firewall can. 
  <SPAN
@@ -469,8 +499,10 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN626">4.11. I have large empty spaces / a checkerboard pattern now where
-ads used to be. Why?</H3
+NAME="AEN636"
+>4.11. I have large empty spaces / a checkerboard pattern now where
+ads used to be. Why?</A
+></H3
 ><P
 > It would be technically possible eliminate the banners in a way that frees
  their screen estate in many cases, by doing all banner blocking with filters,
 ><P
 > It would be technically possible eliminate the banners in a way that frees
  their screen estate in many cases, by doing all banner blocking with filters,
@@ -492,10 +524,12 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN631">4.12. How can <SPAN
+NAME="AEN641"
+>4.12. How can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> filter Secure (HTTPS) URLs?</H3
+> filter Secure (HTTPS) URLs?</A
+></H3
 ><P
 > Since secure HTTP connections are encrypted SSL sessions between your browser
  and the secure site, and are meant to be reliably <SPAN
 ><P
 > Since secure HTTP connections are encrypted SSL sessions between your browser
  and the secure site, and are meant to be reliably <SPAN
@@ -530,20 +564,38 @@ CLASS="APPLICATION"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >'s ad blocking.</P
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >'s ad blocking.</P
+><P
+> <SPAN
+CLASS="QUOTE"
+>"Content cookies"</SPAN
+> (those that are embedded in the actual HTML or
+ JS page content, see <VAR
+CLASS="LITERAL"
+><A
+HREF="../user-manual/actions-file.html#FILTER-CONTENT-COOKIES"
+TARGET="_top"
+>filter{content-cookies}</A
+></VAR
+>), 
+ in an SSL transaction will be impossible to block under these conditions. 
+ Fortunately, this does not seem to be a very common scenario since most 
+ cookies come by traditional means.</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN642">4.13. <SPAN
+NAME="AEN656"
+>4.13. <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > runs as a <SPAN
 CLASS="QUOTE"
 >"server"</SPAN
 >. How 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > runs as a <SPAN
 CLASS="QUOTE"
 >"server"</SPAN
 >. How 
-secure is it? Do I need to take any special precautions?</H3
+secure is it? Do I need to take any special precautions?</A
+></H3
 ><P
 > There are no known exploits that might affect
  <SPAN
 ><P
 > There are no known exploits that might affect
  <SPAN
@@ -595,10 +647,12 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="TURNOFF">4.14. How can I temporarily disable <SPAN
+NAME="TURNOFF"
+>4.14. How can I temporarily disable <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
->?</H3
+>?</A
+></H3
 ><P
 > The easiest way is to access <SPAN
 CLASS="APPLICATION"
 ><P
 > The easiest way is to access <SPAN
 CLASS="APPLICATION"
@@ -625,14 +679,16 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="REALLYOFF">4.15. When <SPAN
+NAME="REALLYOFF"
+>4.15. When <SPAN
 CLASS="QUOTE"
 >"disabled"</SPAN
 > is <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > totally 
 CLASS="QUOTE"
 >"disabled"</SPAN
 > is <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > totally 
-out of the picture?</H3
+out of the picture?</A
+></H3
 ><P
 > No, this just means all filtering and actions are disabled.
  <SPAN
 ><P
 > No, this just means all filtering and actions are disabled.
  <SPAN
@@ -654,7 +710,8 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="CRUNCH">4.16. My logs show <SPAN
+NAME="CRUNCH"
+>4.16. My logs show <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > <SPAN
@@ -664,7 +721,8 @@ CLASS="QUOTE"
 ads, but also its own CGI pages. What is a <SPAN
 CLASS="QUOTE"
 >"crunch"</SPAN
 ads, but also its own CGI pages. What is a <SPAN
 CLASS="QUOTE"
 >"crunch"</SPAN
->?</H3
+>?</A
+></H3
 ><P
 > A <SPAN
 CLASS="QUOTE"
 ><P
 > A <SPAN
 CLASS="QUOTE"
@@ -705,27 +763,57 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="DOWNLOADS">4.17. Can <SPAN
+NAME="DOWNLOADS"
+>4.17. Can <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > effect files that I download
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > effect files that I download
-from a webserver? FTP server?</H3
+from a webserver? FTP server?</A
+></H3
 ><P
 > From the webserver's perspective, there is no difference between
  viewing a document (i.e. a page), and downloading a file. The same is true of
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 ><P
 > From the webserver's perspective, there is no difference between
  viewing a document (i.e. a page), and downloading a file. The same is true of
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
->. If there is a match for a <TT
+>. If there is a match for a <VAR
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#BLOCK"
 TARGET="_top"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="../user-manual/actions-file.html#BLOCK"
 TARGET="_top"
 >block</A
-></TT
+></VAR
 > pattern,
 > pattern,
- it will still be blocked, and of course this is obvious. Filtering is
- potentially more of a concern since the results are not always so obvious.</P
+ it will still be blocked, and of course this is obvious. 
+ </P
+><P
+> Filtering is potentially more of a concern since the results are not always
+ so obvious, and the effects of filtering are there whether the file is simply
+ viewed, or downloaded. And potentially whether the content is some obnoxious
+ advertizement, or Mr. Jimmy's latest/greatest source code jewel. Of course,
+ one of these presumably is <SPAN
+CLASS="QUOTE"
+>"bad"</SPAN
+> content that we don't want, and
+ the other is <SPAN
+CLASS="QUOTE"
+>"good"</SPAN
+> content that we do want.
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> is blind to the differences, and can only
+ distinguish <SPAN
+CLASS="QUOTE"
+>"good from bad"</SPAN
+> by the configuration parameters
+ <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>we</I
+></SPAN
+> give it.</P
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -743,32 +831,102 @@ CLASS="QUOTE"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > knows to ignore these where
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > knows to ignore these where
- appropriate. It is possible, however, that documents that are of an unknown
- type (generally assumed to be <SPAN
+ appropriate. <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> potentially can filter HTML
+ as well as plain text documents, subject to configuration parameters of
+ course. Also, documents that are of an unknown type (generally assumed to be
+ <SPAN
+CLASS="QUOTE"
+>"text/plain"</SPAN
+>) can be filtered, as will those that might be
+ incorrectly reported by the webserver. If such a file is a downloaded file
+ that is intended to be saved to disk, then any content that might have been
+ altered by filtering, will be saved too, for these (probably rare) cases.</P
+><P
+> Note that versions later than 3.0.2 do NOT filter document types of
+ <SPAN
 CLASS="QUOTE"
 >"text/plain"</SPAN
 CLASS="QUOTE"
 >"text/plain"</SPAN
->) will be filtered, as
- will those that might be incorrectly reported by the webserver. If such a
- file is a downloaded file that is intended to be saved to disk, then any
- content that might have been altered by filtering, will be saved too, for
- these (probably very rare) cases.</P
+>. Prior to this, <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+ did filter this document type.</P
+><P
+> In short, filtering is <SPAN
+CLASS="QUOTE"
+>"ON"</SPAN
+> if a) the Document Type as reported
+ by the webserver is appropriate <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>and</I
+></SPAN
+> b) the configuration
+ allows it (or at least does not disallow it). That's it. There is no magic
+ cookie anywhere to say this is <SPAN
+CLASS="QUOTE"
+>"good"</SPAN
+> and this is
+ <SPAN
+CLASS="QUOTE"
+>"bad"</SPAN
+>. It's the configuration that let's it all happen or not.</P
+><P
+> If you download text files, you probably do not want these to be filtered,
+ particularly if the content is source code, or other critical content. Source
+ code sometimes might be mistaken for Javascript (i.e. the kind that might
+ open a pop-up window). It is recommended to turn off filtering for download
+ sites (particularly if the content may be plain text files and you are using
+ version 3.0.2 or earlier) in your <TT
+CLASS="FILENAME"
+>user.action</TT
+> file. And
+ also, for any site or page where making <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>any</I
+></SPAN
+> changes at
+ all to the content is to be avoided.</P
 ><P
 > <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > does not do FTP at all, only HTTP 
 ><P
 > <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > does not do FTP at all, only HTTP 
-  protocols.</P
+  protocols, so please don't even try.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="DOWNLOADS2"
+>4.18. I just downloaded a Perl script, and <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+altered it! Yikes, what is wrong!</A
+></H3
+><P
+> Please read above.</P
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="SEEALSO">4.18. Where can I find more information about <SPAN
+NAME="SEEALSO"
+>4.19. Where can I find more information about <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >
-and related issues?</H3
+and related issues?</A
+></H3
 ><P
 > Other references and sites of interest to <SPAN
 CLASS="APPLICATION"
 ><P
 > Other references and sites of interest to <SPAN
 CLASS="APPLICATION"
@@ -1054,6 +1212,45 @@ CLASS="APPLICATION"
 ></P
 ></P
 ></DIV
 ></P
 ></P
 ></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="MICROSUCK"
+>4.20. I've noticed that Privoxy changes <SPAN
+CLASS="QUOTE"
+>"Microsoft"</SPAN
+> to 
+<SPAN
+CLASS="QUOTE"
+>"MicroSuck"</SPAN
+>! Why are you manipulating my browsing?</A
+></H3
+><P
+> We're not. The text substitutions that you are seeing are disabled
+ in the default configuration as shipped. You have either manually
+ activated the <SPAN
+CLASS="QUOTE"
+>"<VAR
+CLASS="LITERAL"
+>fun</VAR
+>"</SPAN
+> filter which
+ is clearly labeled <SPAN
+CLASS="QUOTE"
+>"Text replacements for subversive browsing
+ fun!"</SPAN
+> or you have implicitly activated it by choosing the
+ <SPAN
+CLASS="QUOTE"
+>"Adventuresome"</SPAN
+> profile in the web-based editor (formerly known 
+ as the <SPAN
+CLASS="APPLICATION"
+>Advanced</SPAN
+> profile).</P
+></DIV
 ></DIV
 ><DIV
 CLASS="NAVFOOTER"
 ></DIV
 ><DIV
 CLASS="NAVFOOTER"
index 89b9143..6f2375e 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Troubleshooting</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Troubleshooting</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
 REL="HOME"
 TITLE="Privoxy Frequently Asked Questions"
 HREF="index.html"><LINK
@@ -73,17 +73,21 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="TROUBLE">5. Troubleshooting</H1
+NAME="TROUBLE"
+>5. Troubleshooting</A
+></H1
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><DIV
 CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN755">5.1. I just upgraded and am getting <SPAN
+NAME="AEN801"
+>5.1. I just upgraded and am getting <SPAN
 CLASS="QUOTE"
 >"connection refused"</SPAN
 >
 CLASS="QUOTE"
 >"connection refused"</SPAN
 >
-with every web page?</H3
+with every web page?</A
+></H3
 ><P
 > Either <SPAN
 CLASS="APPLICATION"
 ><P
 > Either <SPAN
 CLASS="APPLICATION"
@@ -109,9 +113,9 @@ CLASS="APPLICATION"
  change the <A
 HREF="../user-manual/config.html#LISTEN-ADDRESS"
 TARGET="_top"
  change the <A
 HREF="../user-manual/config.html#LISTEN-ADDRESS"
 TARGET="_top"
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->listen-address</TT
+>listen-address</VAR
 >
  option</A
 > in <SPAN
 >
  option</A
 > in <SPAN
@@ -128,8 +132,10 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="AEN768">5.2. I just added a new rule, but the steenkin ad is 
-still getting through. How?</H3
+NAME="AEN814"
+>5.2. I just added a new rule, but the steenkin ad is 
+still getting through. How?</A
+></H3
 ><P
 > If the ad had been displayed before you added its URL, it will probably be
  held in the browser's cache for some time, so it will be displayed without
 ><P
 > If the ad had been displayed before you added its URL, it will probably be
  held in the browser's cache for some time, so it will be displayed without
@@ -153,11 +159,13 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="BADSITE">5.3. One of my favorite sites does not work with <SPAN
+NAME="BADSITE"
+>5.3. One of my favorite sites does not work with <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >.
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >.
-What can I do?</H3
+What can I do?</A
+></H3
 ><P
 > First verify that it is indeed a <SPAN
 CLASS="APPLICATION"
 ><P
 > First verify that it is indeed a <SPAN
 CLASS="APPLICATION"
@@ -200,9 +208,9 @@ TARGET="_top"
 > Alternately, if you are comfortable with a text editor, you can accomplish 
  the same thing by editing the appropriate actions file. Probably the easiest 
  way to deal with such problems when editing by hand is to add your
 > Alternately, if you are comfortable with a text editor, you can accomplish 
  the same thing by editing the appropriate actions file. Probably the easiest 
  way to deal with such problems when editing by hand is to add your
- site to a <TT
+ site to a <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->{ fragile }</TT
+>{ fragile }</VAR
 > section in <TT
 CLASS="FILENAME"
 >user.action</TT
 > section in <TT
 CLASS="FILENAME"
 >user.action</TT
@@ -230,11 +238,13 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="DUN">5.4. After installing <SPAN
+NAME="DUN"
+>5.4. After installing <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, I have to log in
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, I have to log in
-every time I start IE. What gives?</H3
+every time I start IE. What gives?</A
+></H3
 ><P
 > This is a quirk that effects the installation of
  <SPAN
 ><P
 > This is a quirk that effects the installation of
  <SPAN
@@ -286,11 +296,13 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="FTP">5.5. I cannot connect to any FTP sites. <SPAN
+NAME="FTP"
+>5.5. I cannot connect to any FTP sites. <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >
- seems to be blocking me.</H3
+ seems to be blocking me.</A
+></H3
 ><P
 >  <SPAN
 CLASS="APPLICATION"
 ><P
 >  <SPAN
 CLASS="APPLICATION"
@@ -300,7 +312,54 @@ CLASS="APPLICATION"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >
-  as an FTP proxy. The same is true for any protocol other than HTTP or HTTPS.
+  as an FTP proxy. The same is true for <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>any protocol other than HTTP
+  or HTTPS</I
+></SPAN
+>. 
+ </P
+><P
+>  Most browsers understand FTP as well as HTTP. If you connect to a site, with
+  a URL like <VAR
+CLASS="LITERAL"
+>ftp://ftp.example.com</VAR
+>, your browser is making
+  an FTP connection, and not a HTTP connection. So while your browser may 
+  speak FTP, <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> does not, and cannot proxy 
+  such traffic.
+ </P
+><P
+>  To complicate matters, some systems may have a generic <SPAN
+CLASS="QUOTE"
+>"proxy"</SPAN
+>
+  setting, which will silently enable <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>both</I
+></SPAN
+> HTTP and FTP
+  proxying! So it is possible to accidentally enable FTP proxying in these
+  cases. And of course, if this happens, <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+  will indeed cause problems since it does not know FTP.
+ </P
+><P
+>  Will <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> ever proxy FTP traffic? Unlikely.
+  There just is not much reason, and the work to make this happen is more than
+  it may seem.
  </P
 ></DIV
 ><DIV
  </P
 ></DIV
 ><DIV
@@ -308,23 +367,25 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="OSXIE">5.6. In Mac OSX, I can't configure Microsoft Internet Explorer to use 
+NAME="OSXIE"
+>5.6. In Mac OSX, I can't configure Microsoft Internet Explorer to use 
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> as the HTTP proxy.</H3
+> as the HTTP proxy.</A
+></H3
 ><P
 >  Microsoft Internet Explorer (in versions like 5.1) respects system-wide
   network settings.  In order to change the HTTP proxy, open System
   Preferences, and click on the Network icon.  In the settings pane that
   comes up, click on the Proxies tab.  Ensure the "Web Proxy (HTTP)" checkbox 
 ><P
 >  Microsoft Internet Explorer (in versions like 5.1) respects system-wide
   network settings.  In order to change the HTTP proxy, open System
   Preferences, and click on the Network icon.  In the settings pane that
   comes up, click on the Proxies tab.  Ensure the "Web Proxy (HTTP)" checkbox 
-  is checked and enter <TT
+  is checked and enter <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->127.0.0.1</TT
+>127.0.0.1</VAR
 > in the entry field.  
 > in the entry field.  
-  Enter <TT
+  Enter <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->8118</TT
+>8118</VAR
 > in the Port field.  The next time you start
   IE, it should reflect these values.
  </P
 > in the Port field.  The next time you start
   IE, it should reflect these values.
  </P
@@ -334,9 +395,11 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="OSXUNINSTALL">5.7. In Mac OSX, I dragged the Privoxy folder to the trash in order to 
+NAME="OSXUNINSTALL"
+>5.7. In Mac OSX, I dragged the Privoxy folder to the trash in order to 
  uninstall it.  Now the finder tells me I don't have sufficient privileges to
  uninstall it.  Now the finder tells me I don't have sufficient privileges to
- empty the trash.</H3
+ empty the trash.</A
+></H3
 ><P
 >  Just dragging the <SPAN
 CLASS="APPLICATION"
 ><P
 >  Just dragging the <SPAN
 CLASS="APPLICATION"
@@ -367,42 +430,70 @@ CLASS="SECT2"
 ><H3
 CLASS="SECT2"
 ><A
 ><H3
 CLASS="SECT2"
 ><A
-NAME="BLANKPAGE">5.8. I get a completely blank page at one site. <SPAN
+NAME="OSXIMAGES"
+>5.8. In Mac OSX Panther (10.3), images often fail to load and/or I
+ experience random delays in page loading. I'm using
+ <VAR
+CLASS="LITERAL"
+>localhost</VAR
+> as my browser's proxy setting.</A
+></H3
+><P
+>  We believe this is due to an IPv6-related bug in OSX, but don't fully
+  understand the issue yet. In any case, changing the proxy setting to 
+  <VAR
+CLASS="LITERAL"
+>127.0.0.1</VAR
+> instead of <VAR
+CLASS="LITERAL"
+>localhost</VAR
+>
+  works around the problem.
+ </P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="BLANKPAGE"
+>5.9. I get a completely blank page at one site. <SPAN
 CLASS="QUOTE"
 >"View Source"</SPAN
 >
  shows only: <SPAN
 CLASS="MARKUP"
 >&#60;html&#62;&#60;body&#62;&#60;/body&#62;&#60;/html&#62;</SPAN
 CLASS="QUOTE"
 >"View Source"</SPAN
 >
  shows only: <SPAN
 CLASS="MARKUP"
 >&#60;html&#62;&#60;body&#62;&#60;/body&#62;&#60;/html&#62;</SPAN
->.</H3
+>. Without
+ <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> the page loads fine.</A
+></H3
 ><P
 ><P
->  This is often the result of a webserver using
-  <SPAN
+>  Chances are that the site suffers from a bug in
+  <A
+HREF="http://www.php.net/"
+TARGET="_top"
+><SPAN
 CLASS="APPLICATION"
 >PHP</SPAN
 CLASS="APPLICATION"
 >PHP</SPAN
-> that mishandles the request
-  <SPAN
+></A
+>,
+  which results in empty pages being sent if the client explicitly requests
+  an uncompressed page, like <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> sends to not compress the content 
-  (a <SPAN
-CLASS="APPLICATION"
->PHP</SPAN
-> bug).
+> does.
+  This bug has been fixed in PHP 4.2.3.
  </P
 ><P
  </P
 ><P
->  In a default configuration, <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
-> requests all
-  data be sent <SPAN
-CLASS="QUOTE"
->"uncompressed"</SPAN
->. This is required for the page 
-  filtering and other magic to work. In some rare cases, the browser and 
-  webserver miscommunicate and the result is a totally blank page. The 
-  suggested work around is to selectively turn off this feature for sites 
-  that exhibit such behavior. Example section for <TT
+>  To find out if this is in fact the source of the problem, try adding
+  the site to a <VAR
+CLASS="LITERAL"
+>-prevent-compression</VAR
+> section in
+  <TT
 CLASS="FILENAME"
 >user.action</TT
 >:
 CLASS="FILENAME"
 >user.action</TT
 >:
@@ -422,6 +513,260 @@ CLASS="SCREEN"
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
+><P
+>  If that works, you may also want to report the problem to the
+  site's webmasters, telling them to use zlib.output_compression
+  instead of ob_gzhandler in their PHP applications (workaround)
+  or upgrade to PHP 4.2.3 or later (fix).
+ </P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="ERROR503"
+>5.10. Why am I getting a 503 Error (WSAECONNREFUSED) on every page?</A
+></H3
+><P
+>  More than likely this is a problem with the network stack. ZoneAlarm has
+  been reported to cause this symptom -- even if not running. The solution is
+  to either fight the ZA configuration, or uninstall ZoneAlarm, and then find
+  something better behaved in its place. Other firewall type products may
+  cause similar type problems if not configured correctly.
+ </P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="NOHOSTNAME"
+>5.11. My logs show many <SPAN
+CLASS="QUOTE"
+>"Unable to get my own hostname"</SPAN
+> lines.
+Why?</A
+></H3
+><P
+> <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> tries to get the hostname of the system
+ its running on from the IP address of the system interface it is bound to
+ (from the <TT
+CLASS="FILENAME"
+>config</TT
+> file
+ <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>listen-address</I
+></SPAN
+> setting). If the system cannot supply
+ this information, <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> logs this condition. </P
+><P
+> Typically, this would be considered a system configuration error. It is not a
+ fatal error to <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> however, but may result in 
+ a much slower response from <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> due to DNS
+ timeouts.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="INUSE"
+>5.12. When I try to launch <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>, I get an 
+error message <SPAN
+CLASS="QUOTE"
+>"port 8118 is already in use"</SPAN
+> (or similar wording).
+Why?</A
+></H3
+><P
+> Port 8118 is <SPAN
+CLASS="APPLICATION"
+>Privoxy's</SPAN
+> default TCP 
+ <SPAN
+CLASS="QUOTE"
+>"listening"</SPAN
+> port. Typically this message would mean that there
+ is already one instance of <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> running, and
+ you are actually trying to start a second <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> 
+ on the same port, which will not work. How and why this might happen varies
+ from platform to platform, but you need to check your installation and
+ start-up procedures.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="DEMORONIZER"
+>5.13. Pages with UTF-8 fonts are garbled.</A
+></H3
+><P
+> This is caused by the <SPAN
+CLASS="QUOTE"
+>"demoronizer"</SPAN
+> filter, which was introduced 
+ in version 3.0.2, and was inappropriately turned on by default. You should 
+ either upgrade <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>, or at least upgrade to the most 
+ recent <TT
+CLASS="FILENAME"
+>default.action</TT
+> file available from 
+ <A
+HREF="http://sourceforge.net/project/showfiles.php?group_id=11118"
+TARGET="_top"
+>SourceForge</A
+>.
+ Or you can simply disable the demoronizer filter.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="DEMORONIZER2"
+>5.14. Why are binary files (such as images) corrupted when <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+ is used?</A
+></H3
+><P
+> This may also be caused by the <SPAN
+CLASS="QUOTE"
+>"demoronizer"</SPAN
+> filter, 
+ in conjunction with a web server that is misreporting a file type. Binary 
+ files are exempted from <SPAN
+CLASS="APPLICATION"
+>Privoxy's</SPAN
+> filtering
+ (unless the web server by mistake says the file is a plain text file). Either
+ upgrade <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>, or go to the most recent
+ <TT
+CLASS="FILENAME"
+>default.action</TT
+> file available from <A
+HREF="http://sourceforge.net/project/showfiles.php?group_id=11118"
+TARGET="_top"
+>SourceForge</A
+>.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="DEMORONIZER3"
+>5.15. What is the <SPAN
+CLASS="QUOTE"
+>"demoronizer"</SPAN
+> and why is it there?</A
+></H3
+><P
+> The original demoronizer was a Perl script that cleaned up HTML pages which 
+ were created with certain Microsoft products. MS has used proprietary extensions 
+ to standardized font encodings (ISO 8859-1), which has caused problems for pages
+ that are viewed with non-Microsoft products (and are expecting to see a
+ standard set of fonts). The demoronizer corrected these errors so the pages
+ displayed correctly. <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> borrowed from this
+ script, introducing a filter based on the original demoronizer, which in turn could
+ correct these errors on the fly. </P
+><P
+> But this is only needed in some situations, and will cause serious problems in some 
+ other situations.</P
+><P
+> If you are using Microsoft products, you do not need it. If you need to view 
+ pages with UTF-8 characters (such as Cyrillic or Chinese), then it will 
+ cause corruption of the fonts, and thus <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>should not be on</I
+></SPAN
+>.</P
+><P
+> On the other hand, if you use non-Microsoft products, and you occasionally 
+ notice wierd characters on pages, you might want to try it.</P
+><P
+> This filter was introduced with version 3.0.2 of <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>,
+ and was on by default in that version. It is off in all subsequent versions 
+ (unless turned on by the user).</P
+></DIV
+><DIV
+CLASS="SECT2"
+><H3
+CLASS="SECT2"
+><A
+NAME="WINDOWOPEN"
+>5.16. Why do I keep seeing <SPAN
+CLASS="QUOTE"
+>"PrivoxyWindowOpen()"</SPAN
+> in raw source code?</A
+></H3
+><P
+> <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> is attempting to disable malicious 
+ Javascript in this case, with the <VAR
+CLASS="LITERAL"
+>unsolicited-popups</VAR
+>
+ filter. <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> cannot tell very well 
+ <SPAN
+CLASS="QUOTE"
+>"good"</SPAN
+> code snippets from <SPAN
+CLASS="QUOTE"
+>"bad"</SPAN
+> code snippets.</P
+><P
+> If you see this in HTML source, and the page displays without problems, then 
+ this is good, and likely some pop-up window was disabled. If you see this 
+ where it is causing a problem, such as a downloaded program source code file, 
+ then you should set an exception for this site or page such that the
+ integrity of the page stays in tact by disabling all filtering.</P
 ></DIV
 ></DIV
 ><DIV
 ></DIV
 ></DIV
 ><DIV
index d564094..c03b8ad 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy - Home Page</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy - Home Page</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><META
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><META
 NAME="KEYWORD"
 CONTENT="privoxy"><META
 NAME="KEYWORD"
 NAME="KEYWORD"
 CONTENT="privoxy"><META
 NAME="KEYWORD"
@@ -71,19 +71,23 @@ CLASS="TITLEPAGE"
 ><H1
 CLASS="TITLE"
 ><A
 ><H1
 CLASS="TITLE"
 ><A
-NAME="AEN2">Privoxy - Home Page</H1
+NAME="AEN2"
+>Privoxy - Home Page</A
+></H1
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
-><A
-NAME="AEN28"><P
+><P
 ></P
 ></P
+><A
+NAME="AEN28"
+></A
 ><P
 > <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is a web proxy with advanced filtering
 ><P
 > <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is a web proxy with advanced filtering
- capabilities for protecting privacy, filtering web page content, managing
+ capabilities for protecting privacy, modifying web page content, managing
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <SPAN
 CLASS="APPLICATION"
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <SPAN
 CLASS="APPLICATION"
@@ -105,7 +109,11 @@ CLASS="APPLICATION"
  Junkbuster</SPAN
 > (tm).</P
 ><P
  Junkbuster</SPAN
 > (tm).</P
 ><P
->   The most recent release is 3.1.1 (alpha). 
+>   The most recent release is <A
+HREF="announce.txt"
+TARGET="_top"
+>3.0.3 (stable)</A
+>. 
   </P
 ><P
 ></P
   </P
 ><P
 ></P
@@ -117,7 +125,9 @@ CLASS="SECT1"
 ><H3
 CLASS="SECT1"
 ><A
 ><H3
 CLASS="SECT1"
 ><A
-NAME="DOWNLOAD">Download</H3
+NAME="DOWNLOAD"
+>Download</A
+></H3
 ><P
 > <P
 ></P
 ><P
 > <P
 ></P
@@ -134,7 +144,7 @@ TARGET="_top"
 ><LI
 ><P
 >    <A
 ><LI
 ><P
 >    <A
-HREF="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz"
+HREF="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2"
 TARGET="_top"
 >Download the latest CVS snapshot (source tarball)</A
 >
 TARGET="_top"
 >Download the latest CVS snapshot (source tarball)</A
 >
@@ -157,7 +167,9 @@ CLASS="SECT1"
 ><HR><H3
 CLASS="SECT1"
 ><A
 ><HR><H3
 CLASS="SECT1"
 ><A
-NAME="DOCS">Documentation</H3
+NAME="DOCS"
+>Documentation</A
+></H3
 ><P
 > <P
 ></P
 ><P
 > <P
 ></P
@@ -215,7 +227,9 @@ CLASS="SECT1"
 ><HR><H3
 CLASS="SECT1"
 ><A
 ><HR><H3
 CLASS="SECT1"
 ><A
-NAME="MOREINFO">More information</H3
+NAME="MOREINFO"
+>More information</A
+></H3
 ><P
 > <P
 ></P
 ><P
 > <P
 ></P
@@ -288,30 +302,35 @@ CLASS="SECT1"
 ><HR><H2
 CLASS="SECT1"
 ><A
 ><HR><H2
 CLASS="SECT1"
 ><A
-NAME="AEN92"></H2
+NAME="AEN93"
+></A
+></H2
 ><P
 ><DIV
 CLASS="INFORMALTABLE"
 ><P
 ><DIV
 CLASS="INFORMALTABLE"
-><A
-NAME="AEN95"><P
+><P
 ></P
 ></P
+><A
+NAME="AEN96"
+></A
 ><TABLE
 BORDER="0"
 ><TABLE
 BORDER="0"
+FRAME="void"
+RULES="all"
 WIDTH="100%"
 CLASS="CALSTABLE"
 WIDTH="100%"
 CLASS="CALSTABLE"
-><TBODY
+><COL
+WIDTH="100%"
+ALIGN="CENTER"
+TITLE="C1"><TBODY
 ><TR
 ><TD
 ><TR
 ><TD
-WIDTH="100%"
 ALIGN="CENTER"
 ALIGN="CENTER"
-VALIGN="TOP"
 >Privoxy is developed on:</TD
 ></TR
 ><TR
 ><TD
 >Privoxy is developed on:</TD
 ></TR
 ><TR
 ><TD
-WIDTH="100%"
 ALIGN="CENTER"
 ALIGN="CENTER"
-VALIGN="TOP"
 >     <A
 HREF="http://sourceforge.net/"
 TARGET="_top"
 >     <A
 HREF="http://sourceforge.net/"
 TARGET="_top"
@@ -329,7 +348,7 @@ SRC="http://sourceforge.net/sflogo.php?group_id=11118&type=1&dummy=.gif">
 ></P
 ><P
 > <SUB
 ></P
 ><P
 > <SUB
->  Copyright © 2001, 2002 by Privoxy Developers
+>  Copyright &copy; 2001 - 2004 by Privoxy Developers
  </SUB
 ></P
 ></DIV
  </SUB
 ></P
 ></DIV
index 8a2afd0..71e5180 100644 (file)
@@ -2,7 +2,7 @@
 <HTML><HEAD><TITLE>Manpage of PRIVOXY</TITLE>
 <LINK REL="STYLESHEET" TYPE="text/css" HREF="../p_doc.css"></HEAD><BODY>
 <H1>PRIVOXY</H1>
 <HTML><HEAD><TITLE>Manpage of PRIVOXY</TITLE>
 <LINK REL="STYLESHEET" TYPE="text/css" HREF="../p_doc.css"></HEAD><BODY>
 <H1>PRIVOXY</H1>
-Section:  (1)<BR>Updated: 05 September 2002<BR><A HREF="#index">Index</A>
+Section:  (1)<BR>Updated: 25 March 2003<BR><A HREF="#index">Index</A>
 <HR>
 
 <A NAME="lbAB">&nbsp;</A>
 <HR>
 
 <A NAME="lbAB">&nbsp;</A>
@@ -13,7 +13,7 @@ privoxy - Privacy Enhancing Proxy
 <H2>SYNOPSIS</H2>
 
 <P>
 <H2>SYNOPSIS</H2>
 
 <P>
-<B>privoxy</B> [<B>--help</B> ] [<B>--version</B> ] [<B>--no-daemon</B> ] [<B>--pidfile </B><I>pidfile</I><B></B> ] [<B>--user </B><I>user[.group]</I><B></B> ] [<B></B><I>configfile</I><B></B> ]<B> (UNIX)</B>
+<B>privoxy</B> [<B>--help</B> ] [<B>--version</B> ] [<B>--no-daemon</B> ] [<B>--pidfile </B><I>pidfile</I><B></B> ] [<B>--user </B><I>user[.group]</I><B></B> ] [<B>--chroot</B> ] [<B></B><I>configfile</I><B></B> ]<B> (UNIX)</B>
 <P>
 <P>
 <B>privoxy.exe</B> [<B></B><I>configfile</I><B></B> ]<B> (Windows)</B>
 <P>
 <P>
 <B>privoxy.exe</B> [<B></B><I>configfile</I><B></B> ]<B> (Windows)</B>
@@ -45,6 +45,13 @@ After (optionally) writing the PID file, assume the user ID of
 <I>group</I> was not given, the default group of
 <I>user</I>. Exit if the privileges are not
 sufficient to do so.
 <I>group</I> was not given, the default group of
 <I>user</I>. Exit if the privileges are not
 sufficient to do so.
+<DT><B>--chroot</B><DD>
+Before changing to the user ID given in the --user option, chroot to
+that user's home directory, i.e. make the kernel pretend to the
+<B>Privoxy</B> process that the directory tree starts
+there. If set up carefully, this can limit the impact of possible
+vulnerabilities in <B>Privoxy</B> to the files contained in
+that hierarchy. 
 </DL>
 <P>
 
 </DL>
 <P>
 
@@ -113,8 +120,7 @@ executable.
 <P>
 
 The name and number of configuration files has changed from previous
 <P>
 
 The name and number of configuration files has changed from previous
-versions, and is subject to change as development
-progresses. In fact, the configuration itself is changed  and  much more
+versions. In fact, the configuration itself is changed  and  much more
 sophisticated. See the user-manual for a complete
 explanation of all configuration options and general usage, and notes for 
 upgrading from <B>Junkbuster</B> and earlier <B>Privoxy</B>
 sophisticated. See the user-manual for a complete
 explanation of all configuration options and general usage, and notes for 
 upgrading from <B>Junkbuster</B> and earlier <B>Privoxy</B>
@@ -266,10 +272,6 @@ automatically.
 
 <P>
 
 
 <P>
 
-This is a alpha version of <B>Privoxy</B>. Not 
-all features are well tested.
-<P>
-
 Please see the <I>User Manual</I> on how to contact the
 developers for feature requests, reporting problems, and other questions.
 <A NAME="lbAL">&nbsp;</A>
 Please see the <I>User Manual</I> on how to contact the
 developers for feature requests, reporting problems, and other questions.
 <A NAME="lbAL">&nbsp;</A>
@@ -324,24 +326,30 @@ the <B>Privoxy</B> developer manual.
 
 <P>
 <PRE>
 
 <P>
 <PRE>
+ Hal Burgiss (docs)
  Jon Foster
  Andreas Oesterhelt
  Jon Foster
  Andreas Oesterhelt
- Stefan Waldherr
- Thomas Steudten
- Rodney Stromlund
+ David Schmidt (OS/2, Mac OSX ports)
+
+ Johny Agotnes 
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
- Hal Burgiss (docs)
+ Mattes Dolak 
  Karsten Hopp (Red Hat)
  Alexander Lazic
  Karsten Hopp (Red Hat)
  Alexander Lazic
+ Daniel Leite
  G&#225;bor Lipt&#225;k
  G&#225;bor Lipt&#225;k
- Guy
+ Adam Lock (Win32)
+ Guy Laroche
  Haroon Rafique
  Roland Rosenfeld (Debian)
  Georg Sauthoff (Gentoo)
  Haroon Rafique
  Roland Rosenfeld (Debian)
  Georg Sauthoff (Gentoo)
- David Schmidt (OS/2, Mac OSX ports)
+ Thomas Steudten
  Joerg Strohmayer (Amiga)
  Joerg Strohmayer (Amiga)
+ Rodney Stromlund
+ Sviatoslav Sviridov
  Sarantis Paskalis
  Sarantis Paskalis
+ Stefan Waldherr
 </PRE>
 
 <A NAME="lbAN">&nbsp;</A>
 </PRE>
 
 <A NAME="lbAN">&nbsp;</A>
@@ -352,7 +360,7 @@ the <B>Privoxy</B> developer manual.
 
 <P>
 
 
 <P>
 
-Copyright (C) 2001, 2002 by Privoxy Developers &lt;<A HREF="mailto:developers@privoxy.org">developers@privoxy.org</A>&gt;
+Copyright (C) 2001 - 2003 by Privoxy Developers &lt;<A HREF="mailto:developers@privoxy.org">developers@privoxy.org</A>&gt;
 <P>
 
 Some source code is based on code Copyright (C) 1997 by Anonymous Coders
 <P>
 
 Some source code is based on code Copyright (C) 1997 by Anonymous Coders
@@ -409,6 +417,6 @@ USA
 This document was created by
 man2html,
 using the manual pages.<BR>
 This document was created by
 man2html,
 using the manual pages.<BR>
-Time: 23:23:42 GMT, September 05, 2002
+Time: 02:05:48 GMT, March 26, 2003
 </BODY>
 </HTML>
 </BODY>
 </HTML>
index 84459e6..7ab1ef4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * CSS for Privoxy documentation
  *
 /*
  * CSS for Privoxy documentation
  *
- * $Id: p_doc.css,v 1.2 2002/05/23 23:20:48 oes Exp $
+ * $Id: p_doc.css,v 1.2.2.1 2002/05/28 02:31:38 hal9 Exp $
  */
 
 /*
  */
 
 /*
diff --git a/doc/webserver/p_web.css b/doc/webserver/p_web.css
deleted file mode 100644 (file)
index 8eb2159..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-hr { width: 95% }
-body { background: #EEEEEE; }
-h1, h2, h3, h4 { font-family: arial, helvetica, sans-serif }
-code { color: green }
-pre { margin-left: 2% }
-# p { margin-left:20px }
-body { margin-left:20px }
-h1 { color: #404; font-size: 175%; margin-left:0px }
-h2 { color: #606; margin-left:0px }
-h3, h4 { color: #806; margin-left:0px }
-ul { list-style-type: square }
index f353f5f..85fe9d3 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy - The Privacy Enhancing Proxy</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy - The Privacy Enhancing Proxy</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><META
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><META
 NAME="KEYWORD"
 CONTENT="privoxy"><META
 NAME="KEYWORD"
 NAME="KEYWORD"
 CONTENT="privoxy"><META
 NAME="KEYWORD"
@@ -71,22 +71,26 @@ CLASS="TITLEPAGE"
 ><H1
 CLASS="TITLE"
 ><A
 ><H1
 CLASS="TITLE"
 ><A
-NAME="AEN2">Privoxy - The Privacy Enhancing Proxy</H1
+NAME="AEN2"
+>Privoxy - The Privacy Enhancing Proxy</A
+></H1
 ><H2
 CLASS="SUBTITLE"
 ><H2
 CLASS="SUBTITLE"
->Project Index Page v3.1.1</H2
+>Project Index Page v3.0.3</H2
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
-><A
-NAME="AEN29"><P
+><P
 ></P
 ></P
+><A
+NAME="AEN29"
+></A
 ><P
 > <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is a web proxy with advanced filtering
 ><P
 > <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is a web proxy with advanced filtering
- capabilities for protecting privacy, filtering web page content, managing
+ capabilities for protecting privacy, modifying web page content, managing
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <SPAN
 CLASS="APPLICATION"
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <SPAN
 CLASS="APPLICATION"
@@ -117,7 +121,9 @@ CLASS="SECT1"
 ><H3
 CLASS="SECT1"
 ><A
 ><H3
 CLASS="SECT1"
 ><A
-NAME="DOWNLOAD">Download</H3
+NAME="DOWNLOAD"
+>Download</A
+></H3
 ><P
 > <P
 ></P
 ><P
 > <P
 ></P
@@ -134,7 +140,7 @@ TARGET="_top"
 ><LI
 ><P
 >    <A
 ><LI
 ><P
 >    <A
-HREF="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz"
+HREF="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2"
 TARGET="_top"
 >Download the latest CVS snapshot (source tarball)</A
 >
 TARGET="_top"
 >Download the latest CVS snapshot (source tarball)</A
 >
@@ -157,7 +163,9 @@ CLASS="SECT1"
 ><HR><H3
 CLASS="SECT1"
 ><A
 ><HR><H3
 CLASS="SECT1"
 ><A
-NAME="DOCS">Documentation</H3
+NAME="DOCS"
+>Documentation</A
+></H3
 ><P
 > <P
 ></P
 ><P
 > <P
 ></P
@@ -206,7 +214,9 @@ CLASS="SECT1"
 ><HR><H3
 CLASS="SECT1"
 ><A
 ><HR><H3
 CLASS="SECT1"
 ><A
-NAME="MOREINFO">More information</H3
+NAME="MOREINFO"
+>More information</A
+></H3
 ><P
 > <P
 ></P
 ><P
 > <P
 ></P
@@ -279,10 +289,12 @@ CLASS="SECT1"
 ><HR><H2
 CLASS="SECT1"
 ><A
 ><HR><H2
 CLASS="SECT1"
 ><A
-NAME="AEN89"></H2
+NAME="AEN89"
+></A
+></H2
 ><P
 > <SUB
 ><P
 > <SUB
->  Copyright © 2001, 2002 by Privoxy Developers
+>  Copyright &copy; 2001 - 2004 by Privoxy Developers
  </SUB
 ></P
 ></DIV
  </SUB
 ></P
 ></DIV
diff --git a/doc/webserver/submit/confirmad.php b/doc/webserver/submit/confirmad.php
new file mode 100644 (file)
index 0000000..48d7e9f
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+//  File :  $Source: /cvsroot/ijbswa/current/doc/webserver/submit/Attic/confirmad.php,v $
+//
+//  Purpose  :  Confirms ad submission.
+//              This file belongs in
+//              ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
+//
+//  $Id: confirmad.php,v 1.2 2002/03/29 09:55:21 swa Exp $
+//
+//  Written by and Copyright (C) 2001 the SourceForge
+//  Privoxy team. http://www.privoxy.org/
+//
+//  Based on the Internet Junkbuster originally written
+//  by and Copyright (C) 1997 Anonymous Coders and
+//  Junkbusters Corporation.  http://www.junkbusters.com
+//
+//  This program is free software; you can redistribute it
+//  and/or modify it under the terms of the GNU General
+//  Public License as published by the Free Software
+//  Foundation; either version 2 of the License, or (at
+//  your option) any later version.
+//
+//  This program is distributed in the hope that it will
+//  be useful, but WITHOUT ANY WARRANTY; without even the
+//  implied warranty of MERCHANTABILITY or FITNESS FOR A
+//  PARTICULAR PURPOSE.  See the GNU General Public
+//  License for more details.
+//
+//  The GNU General Public License should be included with
+//  this file.  If not, you can view it at
+//  http://www.gnu.org/copyleft/gpl.html
+//  or write to the Free Software Foundation, Inc., 59
+//  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+//
+$headers = getallheaders();
+?>
+<html>
+  <head>
+    <title>Privoxy|Confirm ad submission</title>
+    <link rel="stylesheet" type="text/css" href="../p_web.css">
+</head>
+
+<h1>Privoxy Feedback</h1>
+
+<h2>Confirm Ad Submission</h2>
+
+<p>We have detemined that ...</p>
+
+</body>
+</html>
+
+<!--
+       $Log: confirmad.php,v $
+       Revision 1.2  2002/03/29 09:55:21  swa
+       .
+       
+       Revision 1.1  2002/03/29 09:38:52  swa
+       2nd page
+       
+-->
\ No newline at end of file
diff --git a/doc/webserver/submit/index.php b/doc/webserver/submit/index.php
new file mode 100644 (file)
index 0000000..a000fb3
--- /dev/null
@@ -0,0 +1,210 @@
+<?php
+//  File :  $Source: /cvsroot/ijbswa/current/doc/webserver/submit/Attic/index.php,v $
+//
+//  Purpose  :  Submit form for ads and such
+//              This file belongs in
+//              ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
+//
+//  $Id: index.php,v 1.5 2002/03/29 21:03:56 swa Exp $
+//
+//  Written by and Copyright (C) 2001 the SourceForge
+//  Privoxy team. http://www.privoxy.org/
+//
+//  Based on the Internet Junkbuster originally written
+//  by and Copyright (C) 1997 Anonymous Coders and
+//  Junkbusters Corporation.  http://www.junkbusters.com
+//
+//  This program is free software; you can redistribute it
+//  and/or modify it under the terms of the GNU General
+//  Public License as published by the Free Software
+//  Foundation; either version 2 of the License, or (at
+//  your option) any later version.
+//
+//  This program is distributed in the hope that it will
+//  be useful, but WITHOUT ANY WARRANTY; without even the
+//  implied warranty of MERCHANTABILITY or FITNESS FOR A
+//  PARTICULAR PURPOSE.  See the GNU General Public
+//  License for more details.
+//
+//  The GNU General Public License should be included with
+//  this file.  If not, you can view it at
+//  http://www.gnu.org/copyleft/gpl.html
+//  or write to the Free Software Foundation, Inc., 59
+//  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+//
+$headers = getallheaders();
+?>
+<html>
+  <head>
+    <title>Privoxy|Submit</title>
+    <link rel="stylesheet" type="text/css" href="../p_web.css">
+</head>
+
+<h1>Privoxy Feedback</h1>
+
+<p>Compared to <a
+href="http://sourceforge.net/tracker/?group_id=11118&atid=111118">bug
+reports</a> or <a
+href="http://sourceforge.net/tracker/?atid=361118&group_id=11118&func=browse">feature
+requests</a>, this page is intended to optimize the blocking behavior
+of Privoxy. Therefor we need your feedback.</p><p> If you have
+observed and advertisement, that was not blocked or an image that was
+incorrectly blocked, please use the forms below to report this.</p>
+
+<h2>New Advertisement</h2>
+
+<!-- testing mail sending
+// <?
+//$ret_val=mail("stefan@waldherr.org", "Subject", "Message"); echo $ret_val;
+?>
+-->
+
+
+<?
+$cfile  = "counter-data.inc";
+$localip = "127.0.0.1";
+$serverip = "127.0.0.1";
+# Enter information on the next line, but only after you read
+# the "c-readme.txt" file.
+$browser_id = "";
+if (file_exists ($cfile)) {
+       $fp = fopen ($cfile,"r+");
+       $data = fgets ($fp,25);
+       $ip = chop (substr($data,0,15));
+       $count = substr($data,15);
+# Unremark the second "if" statement and remark the first one if
+# your site is on a hosted server and you have a dynamic IP, but
+# only after you read "c-readme.txt" file.
+       if ($REMOTE_ADDR == $localip or $REMOTE_ADDR == $serverip)
+#       if ($REMOTE_ADDR == substr_count($HTTP_USER_AGENT,$browser_id) > 0)
+               $np = $ip;
+       else
+               $np = $REMOTE_ADDR;
+       if ($np != $ip)
+               $count += 1;
+       rewind ($fp);
+       fputs ($fp,substr($np."        ",0,15).$count);
+       fclose ($fp);
+       echo $count;
+}
+else {
+       $fp = fopen($cfile,"w");
+       $np = $REMOTE_ADDR;
+       $count = "1";
+       fputs ($fp,substr($np."        ",0,15).$count);
+       fclose ($fp);
+       echo $count;
+}
+?>
+
+
+<p>
+<form action="http://privox.org/submit/confirmad.php" method="post">
+<table border="0" cellpadding="0" cellspacing="4">
+
+<tr>
+<td align="right">Your name:</td>
+<td>
+<input name="submit_name" value="anonymous" type="text" size="30" maxlength="30">
+</td>
+<td>optional</td>
+</tr>
+
+<tr>
+<td align="right">Your email address:</td>
+<td>
+<input name="submit_email" value="anonymous" type="text" size="30" maxlength="30">
+</td>
+<td>optional</td>
+</tr>
+
+<tr>
+<td align="right">Website, where I observed an ad:</td>
+<td>
+<input name="submit_url" value="prefilled" type="text" size="45" maxlength="255">
+</td>
+<td>Please change, if necessary</td>
+</tr>
+
+<tr>
+<td align="right">How annoying is the ad:</td>
+<td>
+<select name="submit_annoy" size="1">
+<option value="A0">Nice, not to have</option>
+<option selected value="A1">Should be removed</option>
+<option value="A2">Must be removed</option>
+</select>
+</td>
+<td>Please select one</td>
+</tr>
+
+<tr>
+<td align="right">Privoxy Version:</td>
+<td>
+<input name="submit_pversion" value="prefilled" readonly type="text" size="30" maxlength="30">
+</td>
+<td>Automatically determined</td>
+</tr>
+
+<tr>
+<td align="right">Action File:</td>
+<td>
+<input name="submit_actionfile" value="prefilled" readonly type="text" size="30" maxlength="30">
+</td>
+<td>Automatically determined</td>
+</tr>
+
+<tr>
+<td align="right">Action File Version:</td>
+<td>
+<input name="submit_actionversion" value="prefilled" readonly type="text" size="30" maxlength="30">
+</td>
+<td>Automatically determined</td>
+</tr>
+
+<tr>
+<td align="right">Remarks:</td>
+<td>
+<textarea name="submit_remarks" cols="35" rows="3">
+None.
+</textarea>
+</td>
+<td>Please change, if necessary</td>
+</tr>
+
+<tr>
+<td align="right"></td>
+<td>
+<input type="hidden" name="submit_targeturl" value="/submit/confirmad.php">
+<input type=submit value="Submit">
+</td>
+<td></td>
+</tr>
+
+</table>
+</form>
+</p>
+
+<h2>Incorrect blocking</h2>
+<p>We soon present a form where you can submit websites, where the
+default action file was too agressive.</p>
+
+<h2>Misc</h2>
+<p>Bla bla bla</p>
+
+</body>
+</html>
+
+<!--
+       $Log: index.php,v $
+       Revision 1.5  2002/03/29 21:03:56  swa
+       further testing for email and file operations
+       
+       Revision 1.4  2002/03/29 09:55:21  swa
+       .
+       
+       Revision 1.3  2002/03/29 09:39:48  swa
+       added form
+       
+-->
\ No newline at end of file
diff --git a/doc/webserver/team/09member.jpg b/doc/webserver/team/09member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/09member.jpg and /dev/null differ
diff --git a/doc/webserver/team/09member_t.jpg b/doc/webserver/team/09member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/09member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/10member.jpg b/doc/webserver/team/10member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/10member.jpg and /dev/null differ
diff --git a/doc/webserver/team/10member_t.jpg b/doc/webserver/team/10member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/10member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/11member.jpg b/doc/webserver/team/11member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/11member.jpg and /dev/null differ
diff --git a/doc/webserver/team/11member_t.jpg b/doc/webserver/team/11member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/11member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/12member.jpg b/doc/webserver/team/12member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/12member.jpg and /dev/null differ
diff --git a/doc/webserver/team/12member_t.jpg b/doc/webserver/team/12member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/12member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/13member.jpg b/doc/webserver/team/13member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/13member.jpg and /dev/null differ
diff --git a/doc/webserver/team/13member_t.jpg b/doc/webserver/team/13member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/13member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/14member.jpg b/doc/webserver/team/14member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/14member.jpg and /dev/null differ
diff --git a/doc/webserver/team/14member_t.jpg b/doc/webserver/team/14member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/14member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/15member.jpg b/doc/webserver/team/15member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/15member.jpg and /dev/null differ
diff --git a/doc/webserver/team/15member_t.jpg b/doc/webserver/team/15member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/15member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/16member.jpg b/doc/webserver/team/16member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/16member.jpg and /dev/null differ
diff --git a/doc/webserver/team/16member_t.jpg b/doc/webserver/team/16member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/16member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/17member.jpg b/doc/webserver/team/17member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/17member.jpg and /dev/null differ
diff --git a/doc/webserver/team/17member_t.jpg b/doc/webserver/team/17member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/17member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/18member.jpg b/doc/webserver/team/18member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/18member.jpg and /dev/null differ
diff --git a/doc/webserver/team/18member_t.jpg b/doc/webserver/team/18member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/18member_t.jpg and /dev/null differ
diff --git a/doc/webserver/team/19member.jpg b/doc/webserver/team/19member.jpg
deleted file mode 100644 (file)
index 97042aa..0000000
Binary files a/doc/webserver/team/19member.jpg and /dev/null differ
diff --git a/doc/webserver/team/19member_t.jpg b/doc/webserver/team/19member_t.jpg
deleted file mode 100644 (file)
index c9ffd9b..0000000
Binary files a/doc/webserver/team/19member_t.jpg and /dev/null differ
index fe12d90..2903bcf 100644 (file)
@@ -1,83 +1,26 @@
-<html>\r
-<head>\r
-\r
-<meta http-equiv="Content-Type"content="text/html; charset=iso-8859-1">\r
-<meta name="GENERATOR" content="IrfanView">\r
-\r
-<title>Privoxy - Team page</title>\r
-<LINK\r
-REL="STYLESHEET"\r
-TYPE="text/css"\r
-HREF="../p_web.css">\r
-<meta name="description" content="Privoxy helps consumers reduce unwanted junk email and protect their privacy from direct marketing companies.">\r
-<meta name="MSSmartTagsPreventParsing" content="TRUE">\r
-</HEAD>\r
-<center>\r
-<h1>Privoxy - Team page</h1>\r
-<hr>\r
-\r
-<TABLE>\r
-\r
-\r
-<TR>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="01stefanw.jpg" target="ImageWindow">\r
-<IMG SRC="01stefanw_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="01stefanw.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="02jon.jpg" target="ImageWindow">\r
-<IMG SRC="02jon_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="02jon.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="03andreas.jpg" target="ImageWindow">\r
-<IMG SRC="03andreas_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="03andreas.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="04rodney.jpg" target="ImageWindow">\r
-<IMG SRC="04rodney_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="04rodney.jpg"></A></FONT></TD>\r
-</TR>\r
-\r
-<TR>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="05david.jpg" target="ImageWindow">\r
-<IMG SRC="05david_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="05david.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="06member.jpg" target="ImageWindow">\r
-<IMG SRC="06member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="06member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="07member.jpg" target="ImageWindow">\r
-<IMG SRC="07member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="07member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="08member.jpg" target="ImageWindow">\r
-<IMG SRC="08member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="08member.jpg"></A></FONT></TD>\r
-</TR>\r
-\r
-<TR>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="09member.jpg" target="ImageWindow">\r
-<IMG SRC="09member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="09member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="10member.jpg" target="ImageWindow">\r
-<IMG SRC="10member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="10member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="11member.jpg" target="ImageWindow">\r
-<IMG SRC="11member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="11member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="12member.jpg" target="ImageWindow">\r
-<IMG SRC="12member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="12member.jpg"></A></FONT></TD>\r
-</TR>\r
-\r
-<TR>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="13member.jpg" target="ImageWindow">\r
-<IMG SRC="13member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="13member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="14member.jpg" target="ImageWindow">\r
-<IMG SRC="14member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="14member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="15member.jpg" target="ImageWindow">\r
-<IMG SRC="15member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="15member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="16member.jpg" target="ImageWindow">\r
-<IMG SRC="16member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="16member.jpg"></A></FONT></TD>\r
-</TR>\r
-\r
-<TR>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="17member.jpg" target="ImageWindow">\r
-<IMG SRC="17member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="17member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="18member.jpg" target="ImageWindow">\r
-<IMG SRC="18member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="18member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="19member.jpg" target="ImageWindow">\r
-<IMG SRC="19member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="19member.jpg"></A></FONT></TD>\r
-<TD ALIGN=CENTER VALIGN=BOTTOM><FONT face="Verdana, Arial, Helvetica, Sans-Serif" size="-2"><A HREF="20member.jpg" target="ImageWindow">\r
-<IMG SRC="20member_t.jpg"  WIDTH="80" HEIGHT="80" BORDER="0" ALT="20member.jpg"></A></FONT></TD>\r
-</TR>\r
-\r
-</TABLE>\r
-\r
-<hr>\r
-<b><A HREF="http://www.irfanview.com">Created by IrfanView</A></b>\r
-</center>\r
-</body>\r
-</html>\r
+<html>
+ <head>
+  <meta http-equiv="Content-Type"content="text/html; charset=iso-8859-1">
+  <title>Privoxy - Team Photos</title>
+  <link rel="stylesheet" type="text/css" href="../p_doc.css">
+ </head>
+ <body>
+  <h1 style="margin-left: 0%">Privoxy - Team Photos</h1>
+  <hr>
+  <p>In our day jobs, we're all models ;-)</p>
+  <table align="center">
+   <tr>
+    <td><a href="01stefanw.jpg"><img src="01stefanw_t.jpg"  width="80" height="80" border="0" title="Stefan Waldherr"></a></td>
+    <td><a href="02jon.jpg"><img src="02jon_t.jpg"  width="80" height="80" border="0" title="Jon Foster"></a></td>
+    <td><a href="03andreas.jpg"><img src="03andreas_t.jpg"  width="80" height="80" border="0" title="Andreas Oesterhelt"></a></td>
+    <td><a href="04rodney.jpg"><img src="04rodney_t.jpg"  width="80" height="80" border="0" title="Rodney Stromlund"></a></td>
+   </tr>
+   <tr>
+    <td><a href="05david.jpg"><img src="05david_t.jpg"  width="80" height="80" border="0" title="David Schmidt"></a></td>
+    <td><a href="06member.jpg"><img src="06member_t.jpg"  width="80" height="80" border="0" title="N/A"></a></td>
+    <td><a href="07member.jpg"><img src="07member_t.jpg"  width="80" height="80" border="0" title="N/A"></a></td>
+    <td><a href="08member.jpg"><img src="08member_t.jpg"  width="80" height="80" border="0" title="N/A"></a></td>
+   </tr>
+  </table>
+ </body>
+</html>
index 9162118..a08da89 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Actions Files</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Actions Files</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="The Main Configuration File"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="The Main Configuration File"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="ACTIONS-FILE">8. Actions Files</H1
+NAME="ACTIONS-FILE"
+>8. Actions Files</A
+></H1
 ><P
 > The actions files are used to define what actions
  <SPAN
 ><P
 > The actions files are used to define what actions
  <SPAN
@@ -85,8 +87,8 @@ CLASS="APPLICATION"
  are three such files included with <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
  are three such files included with <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> (as of 
version 2.9.15), with differing purposes:
+>
+ with differing purposes:
  </P
 ><P
 >  <P
  </P
 ><P
 >  <P
@@ -143,14 +145,210 @@ CLASS="EMPHASIS"
 >. It is not recommend
      to edit this file.
     </P
 >. It is not recommend
      to edit this file.
     </P
+><P
+>     The default profiles, and their associated actions, as pre-defined in
+     <TT
+CLASS="FILENAME"
+>standard.action</TT
+> are:
+    </P
+><P
+>    <DIV
+CLASS="TABLE"
+><A
+NAME="AEN1654"
+></A
+><P
+><B
+>Table 1. Default Configurations</B
+></P
+><TABLE
+BORDER="1"
+FRAME="border"
+RULES="all"
+CLASS="CALSTABLE"
+><COL
+WIDTH="1*"
+TITLE="C1"><COL
+WIDTH="1*"
+TITLE="C2"><COL
+WIDTH="1*"
+TITLE="C3"><COL
+WIDTH="1*"
+TITLE="C4"><THEAD
+><TR
+><TH
+>Feature</TH
+><TH
+>Cautious</TH
+><TH
+>Medium</TH
+><TH
+>Adventuresome</TH
+></TR
+></THEAD
+><TBODY
+><TR
+><TD
+>Ad-blocking by URL</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>Ad-filtering by size</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>GIF de-animation</TD
+><TD
+>no</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>Referer forging</TD
+><TD
+>no</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>Cookie handling</TD
+><TD
+>none</TD
+><TD
+>session-only</TD
+><TD
+>kill</TD
+></TR
+><TR
+><TD
+>Pop-up killing</TD
+><TD
+>unsolicited</TD
+><TD
+>unsolicited</TD
+><TD
+>all</TD
+></TR
+><TR
+><TD
+>Fast redirects</TD
+><TD
+>no</TD
+><TD
+>no</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>HTML taming</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>JavaScript taming</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>Web-bug killing</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>Fun text replacements</TD
+><TD
+>no</TD
+><TD
+>no</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>Image tag reordering</TD
+><TD
+>no</TD
+><TD
+>no</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>Ad-filtering by link</TD
+><TD
+>no</TD
+><TD
+>no</TD
+><TD
+>yes</TD
+></TR
+><TR
+><TD
+>Demoronizer</TD
+><TD
+>no</TD
+><TD
+>no</TD
+><TD
+>yes</TD
+></TR
+></TBODY
+></TABLE
+></DIV
+>
+    </P
 ></LI
 ></UL
 >
  </P
 ><P
 > The list of actions files to be used are defined in the main configuration 
 ></LI
 ></UL
 >
  </P
 ><P
 > The list of actions files to be used are defined in the main configuration 
- file, and are processed in the order they are defined. The content of these
- can all be viewed and edited from <A
+ file, and are processed in the order they are defined (e.g.
+ <TT
+CLASS="FILENAME"
+>default.action</TT
+> is typically process before
+ <TT
+CLASS="FILENAME"
+>user.action</TT
+>). The content of these can all be viewed and
+ edited from <A
 HREF="http://config.privoxy.org/show-status"
 TARGET="_top"
 >http://config.privoxy.org/show-status</A
 HREF="http://config.privoxy.org/show-status"
 TARGET="_top"
 >http://config.privoxy.org/show-status</A
@@ -211,7 +409,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN1645">8.1. Finding the Right Mix</H2
+NAME="AEN1753"
+>8.1. Finding the Right Mix</A
+></H2
 ><P
 > Note that some <A
 HREF="actions-file.html#ACTIONS"
 ><P
 > Note that some <A
 HREF="actions-file.html#ACTIONS"
@@ -228,10 +428,10 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"trusted"</SPAN
 > sites you
 CLASS="QUOTE"
 >"trusted"</SPAN
 > sites you
- will have to make later. If, for example, you want to kill popup windows per
+ will have to make later. If, for example, you want to crunch all cookies per
  default, you'll have to make exceptions from that rule for sites that you
  default, you'll have to make exceptions from that rule for sites that you
- regularly use and that require popups for actually useful content, like maybe
- your bank, favorite shop, or newspaper.</P
+ regularly use and that require cookies for actually useful puposes, like maybe
+ your bank, favorite shop, or newspaper. </P
 ><P
 > We have tried to provide you with reasonable rules to start from in the
  distribution actions files. But there is no general rule of thumb on these
 ><P
 > We have tried to provide you with reasonable rules to start from in the
  distribution actions files. But there is no general rule of thumb on these
@@ -243,7 +443,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN1652">8.2. How to Edit</H2
+NAME="AEN1760"
+>8.2. How to Edit</A
+></H2
 ><P
 > The easiest way to edit the actions files is with a browser by
  using our browser-based editor, which can be reached from <A
 ><P
 > The easiest way to edit the actions files is with a browser by
  using our browser-based editor, which can be reached from <A
@@ -261,8 +463,14 @@ CLASS="QUOTE"
 >"Medium"</SPAN
 > or <SPAN
 CLASS="QUOTE"
 >"Medium"</SPAN
 > or <SPAN
 CLASS="QUOTE"
->"Advanced"</SPAN
->.</P
+>"Adventuresome"</SPAN
+>.
+ Warning: the <SPAN
+CLASS="QUOTE"
+>"Adventuresome"</SPAN
+> setting is not only more aggressive, 
+ but includes settings that are fun and subversive, and which some may find of 
+ dubious merit!</P
 ><P
 > If you prefer plain text editing to GUIs, you can of course also directly edit the
  the actions files. Look at <TT
 ><P
 > If you prefer plain text editing to GUIs, you can of course also directly edit the
  the actions files. Look at <TT
@@ -276,7 +484,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="ACTIONS-APPLY">8.3. How Actions are Applied to URLs</H2
+NAME="ACTIONS-APPLY"
+>8.3. How Actions are Applied to URLs</A
+></H2
 ><P
 > Actions files are divided into sections. There are special sections,
  like the <SPAN
 ><P
 > Actions files are divided into sections. There are special sections,
  like the <SPAN
@@ -297,21 +507,21 @@ HREF="actions-file.html#ALIASES"
  of the section in which the pattern is located. If multiple matches for
  the same URL set the same action differently, the last match wins. If not, 
  the effects are aggregated. E.g. a URL might match a regular section with 
  of the section in which the pattern is located. If multiple matches for
  the same URL set the same action differently, the last match wins. If not, 
  the effects are aggregated. E.g. a URL might match a regular section with 
- a heading line of <TT
+ a heading line of <VAR
 CLASS="LITERAL"
 >{ 
  +<A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 CLASS="LITERAL"
 >{ 
  +<A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-> }</TT
+> }</VAR
 >,
 >,
- then later another one with just <TT
+ then later another one with just <VAR
 CLASS="LITERAL"
 >{
  +<A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 >{
  +<A
 HREF="actions-file.html#BLOCK"
 >block</A
-> }</TT
+> }</VAR
 >, resulting
  in <SPAN
 CLASS="emphasis"
 >, resulting
  in <SPAN
 CLASS="emphasis"
@@ -337,83 +547,124 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AF-PATTERNS">8.4. Patterns</H2
+NAME="AF-PATTERNS"
+>8.4. Patterns</A
+></H2
+><P
+> 
+ As mentioned, <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> uses <SPAN
+CLASS="QUOTE"
+>"patterns"</SPAN
+>
+ to determine what actions might apply to which sites and pages your browser 
+ attempts to access. These <SPAN
+CLASS="QUOTE"
+>"patterns"</SPAN
+> use wild card type 
+ <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>pattern</I
+></SPAN
+> matching to achieve a high degree of 
+ flexibility. This allows one expression to be expanded and potentially match
+ against many similar patterns.</P
 ><P
 ><P
-> Generally, a pattern has the form <TT
+> Generally, a <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> pattern has the form
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;domain&#62;/&#60;path&#62;</TT
->,
- where both the <TT
+>&#60;domain&#62;/&#60;path&#62;</VAR
+>, where both the
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;domain&#62;</TT
-> and <TT
+>&#60;domain&#62;</VAR
+> and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;path&#62;</TT
->
- are optional. (This is why the pattern <TT
+>&#60;path&#62;</VAR
+> are
+ optional. (This is why the special <VAR
+CLASS="LITERAL"
+>/</VAR
+> pattern matches all
+ URLs). Note that the protocol portion of the URL pattern (e.g.
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/</TT
-> matches all URLs).</P
+>http://</VAR
+>) should <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>not</I
+></SPAN
+> be included in
+ the pattern. This is assumed already!</P
 ><P
 ></P
 ><DIV
 CLASS="VARIABLELIST"
 ><DL
 ><DT
 ><P
 ></P
 ><DIV
 CLASS="VARIABLELIST"
 ><DL
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.example.com/</TT
+>www.example.com/</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
->    is a domain-only pattern and will match any request to <TT
+>    is a domain-only pattern and will match any request to <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.example.com</TT
+>www.example.com</VAR
 >,
     regardless of which document on that server is requested.
    </P
 ></DD
 ><DT
 >,
     regardless of which document on that server is requested.
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.example.com</TT
+>www.example.com</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
->    means exactly the same. For domain-only patterns, the trailing <TT
+>    means exactly the same. For domain-only patterns, the trailing <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/</TT
+>/</VAR
 > may
     be omitted.
    </P
 ></DD
 ><DT
 > may
     be omitted.
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.example.com/index.html</TT
+>www.example.com/index.html</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
->    matches only the single document <TT
+>    matches only the single document <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/index.html</TT
+>/index.html</VAR
 >
 >
-    on <TT
+    on <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.example.com</TT
+>www.example.com</VAR
 >.
    </P
 ></DD
 ><DT
 >.
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/index.html</TT
+>/index.html</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
->    matches the document <TT
+>    matches the document <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/index.html</TT
+>/index.html</VAR
 >, regardless of the domain,
     i.e. on <SPAN
 CLASS="emphasis"
 >, regardless of the domain,
     i.e. on <SPAN
 CLASS="emphasis"
@@ -425,16 +676,16 @@ CLASS="EMPHASIS"
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->index.html</TT
+>index.html</VAR
 ></DT
 ><DD
 ><P
 >    matches nothing, since it would be  interpreted as a domain name and
 ></DT
 ><DD
 ><P
 >    matches nothing, since it would be  interpreted as a domain name and
-    there is no top-level domain called <TT
+    there is no top-level domain called <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.html</TT
+>.html</VAR
 >.
    </P
 ></DD
 >.
    </P
 ></DD
@@ -445,7 +696,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="AEN1716">8.4.1. The Domain Pattern</H3
+NAME="AEN1833"
+>8.4.1. The Domain Pattern</A
+></H3
 ><P
 > The matching of the domain part offers some flexible options: if the
  domain starts or ends with a dot, it becomes unanchored at that end. 
 ><P
 > The matching of the domain part offers some flexible options: if the
  domain starts or ends with a dot, it becomes unanchored at that end. 
@@ -456,9 +709,9 @@ NAME="AEN1716">8.4.1. The Domain Pattern</H3
 CLASS="VARIABLELIST"
 ><DL
 ><DT
 CLASS="VARIABLELIST"
 ><DL
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.example.com</TT
+>.example.com</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
@@ -469,16 +722,16 @@ CLASS="EMPHASIS"
 >ENDS</I
 ></SPAN
 > in
 >ENDS</I
 ></SPAN
 > in
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.example.com</TT
+>.example.com</VAR
 >
    </P
 ></DD
 ><DT
 >
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.</TT
+>www.</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
@@ -489,16 +742,16 @@ CLASS="EMPHASIS"
 >STARTS</I
 ></SPAN
 > with
 >STARTS</I
 ></SPAN
 > with
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.</TT
+>www.</VAR
 >
    </P
 ></DD
 ><DT
 >
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.example.</TT
+>.example.</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
@@ -508,13 +761,13 @@ CLASS="emphasis"
 CLASS="EMPHASIS"
 >CONTAINS</I
 ></SPAN
 CLASS="EMPHASIS"
 >CONTAINS</I
 ></SPAN
-> <TT
+> <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.example.</TT
+>.example.</VAR
 >
 >
-    (Correctly speaking: It matches any FQDN that contains <TT
+    (Correctly speaking: It matches any FQDN that contains <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->example</TT
+>example</VAR
 > as a domain.)
    </P
 ></DD
 > as a domain.)
    </P
 ></DD
@@ -538,9 +791,9 @@ CLASS="QUOTE"
 CLASS="VARIABLELIST"
 ><DL
 ><DT
 CLASS="VARIABLELIST"
 ><DL
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->ad*.example.com</TT
+>ad*.example.com</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
@@ -558,9 +811,9 @@ CLASS="QUOTE"
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->*ad*.example.com</TT
+>*ad*.example.com</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
@@ -568,46 +821,46 @@ CLASS="LITERAL"
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.?pix.com</TT
+>.?pix.com</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
->    matches <TT
+>    matches <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.ipix.com</TT
+>www.ipix.com</VAR
 >,
 >,
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->pictures.epix.com</TT
->, <TT
+>pictures.epix.com</VAR
+>, <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->a.b.c.d.e.upix.com</TT
+>a.b.c.d.e.upix.com</VAR
 > etc. 
    </P
 ></DD
 ><DT
 > etc. 
    </P
 ></DD
 ><DT
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www[1-9a-ez].example.c*</TT
+>www[1-9a-ez].example.c*</VAR
 ></DT
 ><DD
 ><P
 ></DT
 ><DD
 ><P
->     matches <TT
+>     matches <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www1.example.com</TT
+>www1.example.com</VAR
 >, 
 >, 
-     <TT
+     <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www4.example.cc</TT
->, <TT
+>www4.example.cc</VAR
+>, <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->wwwd.example.cy</TT
+>wwwd.example.cy</VAR
 >, 
 >, 
-     <TT
+     <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->wwwz.example.com</TT
+>wwwz.example.com</VAR
 > etc., but <SPAN
 CLASS="emphasis"
 ><I
 > etc., but <SPAN
 CLASS="emphasis"
 ><I
@@ -615,9 +868,9 @@ CLASS="EMPHASIS"
 >not</I
 ></SPAN
 > 
 >not</I
 ></SPAN
 > 
-     <TT
+     <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->wwww.example.com</TT
+>wwww.example.com</VAR
 >.
    </P
 ></DD
 >.
    </P
 ></DD
@@ -629,7 +882,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="AEN1778">8.4.2. The Path Pattern</H3
+NAME="AEN1895"
+>8.4.2. The Path Pattern</A
+></H3
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -652,9 +907,9 @@ HREF="http://www.pcre.org/man.txt"
 TARGET="_top"
 >http://www.pcre.org/man.txt</A
 >.
 TARGET="_top"
 >http://www.pcre.org/man.txt</A
 >.
- You might also find the Perl man page on regular expressions (<TT
+ You might also find the Perl man page on regular expressions (<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->man perlre</TT
+>man perlre</VAR
 >)
  useful, which is available on-line at <A
 HREF="http://www.perldoc.com/perl5.6/pod/perlre.html"
 >)
  useful, which is available on-line at <A
 HREF="http://www.perldoc.com/perl5.6/pod/perlre.html"
@@ -683,13 +938,13 @@ CLASS="EMPHASIS"
  <SPAN
 CLASS="QUOTE"
 >"(?-i)"</SPAN
  <SPAN
 CLASS="QUOTE"
 >"(?-i)"</SPAN
-> switch: <TT
+> switch: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->www.example.com/(?-i)PaTtErN.*</TT
+>www.example.com/(?-i)PaTtErN.*</VAR
 > will match
 > will match
- only documents whose path starts with <TT
+ only documents whose path starts with <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->PaTtErN</TT
+>PaTtErN</VAR
 > in
  <SPAN
 CLASS="emphasis"
 > in
  <SPAN
 CLASS="emphasis"
@@ -705,7 +960,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="ACTIONS">8.5. Actions</H2
+NAME="ACTIONS"
+>8.5. Actions</A
+></H2
 ><P
 > All actions are disabled by default, until they are explicitly enabled
  somewhere in an actions file. Actions are turned on if preceded with a
 ><P
 > All actions are disabled by default, until they are explicitly enabled
  somewhere in an actions file. Actions are turned on if preceded with a
@@ -716,29 +973,29 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"-"</SPAN
 >. So a
 CLASS="QUOTE"
 >"-"</SPAN
 >. So a
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+action</TT
+>+action</VAR
 > means <SPAN
 CLASS="QUOTE"
 >"do that action"</SPAN
 >, e.g.
 > means <SPAN
 CLASS="QUOTE"
 >"do that action"</SPAN
 >, e.g.
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+block</TT
+>+block</VAR
 > means <SPAN
 CLASS="QUOTE"
 >"please block URLs that match the
  following patterns"</SPAN
 > means <SPAN
 CLASS="QUOTE"
 >"please block URLs that match the
  following patterns"</SPAN
->, and <TT
+>, and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->-block</TT
+>-block</VAR
 > means <SPAN
 CLASS="QUOTE"
 >"don't
 > means <SPAN
 CLASS="QUOTE"
 >"don't
- block URLs that match the following patterns, even if <TT
+ block URLs that match the following patterns, even if <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+block</TT
+>+block</VAR
 >
  previously applied."</SPAN
 >&#13;</P
 >
  previously applied."</SPAN
 >&#13;</P
@@ -746,9 +1003,9 @@ CLASS="LITERAL"
 > 
  Again, actions are invoked by placing them on a line, enclosed in curly braces and
  separated by whitespace, like in 
 > 
  Again, actions are invoked by placing them on a line, enclosed in curly braces and
  separated by whitespace, like in 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->{+some-action -some-other-action{some-parameter}}</TT
+>{+some-action -some-other-action{some-parameter}}</VAR
 >,
  followed by a list of URL patterns, one per line, to which they apply.
  Together, the actions line and the following pattern lines make up a section
 >,
  followed by a list of URL patterns, one per line, to which they apply.
  Together, the actions line and the following pattern lines make up a section
@@ -781,27 +1038,19 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->  +<TT
+>  +<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->        # enable action <TT
+>name</VAR
+>        # enable action <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
+>name</VAR
 >
 >
-  -<TT
+  -<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->        # disable action <TT
+>name</VAR
+>        # disable action <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
+>name</VAR
 ></PRE
 ></TD
 ></TR
 ></PRE
 ></TD
 ></TR
@@ -810,9 +1059,9 @@ CLASS="REPLACEABLE"
   </P
 ><P
 >  
   </P
 ><P
 >  
-   Example: <TT
+   Example: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+block</TT
+>+block</VAR
 >
   </P
 ></LI
 >
   </P
 ></LI
@@ -831,28 +1080,20 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->  +<TT
+>  +<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->{<TT
+>name</VAR
+>{<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->param</I
-></TT
->}  # enable action and set parameter to <TT
+>param</VAR
+>}  # enable action and set parameter to <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->param</I
-></TT
+>param</VAR
 >,
                # overwriting parameter from previous match if necessary
 >,
                # overwriting parameter from previous match if necessary
-  -<TT
+  -<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
+>name</VAR
 >         # disable action. The parameter can be omitted</PRE
 ></TD
 ></TR
 >         # disable action. The parameter can be omitted</PRE
 ></TD
 ></TR
@@ -865,9 +1106,9 @@ CLASS="REPLACEABLE"
   </P
 ><P
 >  
   </P
 ><P
 >  
-   Example: <TT
+   Example: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+hide-user-agent{ Mozilla 1.0 }</TT
+>+hide-user-agent{ Mozilla 1.0 }</VAR
 >
   </P
 ></LI
 >
   </P
 ></LI
@@ -902,44 +1143,30 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->  +<TT
+>  +<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->{<TT
+>name</VAR
+>{<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->param</I
-></TT
->}   # enable action and add <TT
+>param</VAR
+>}   # enable action and add <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->param</I
-></TT
+>param</VAR
 > to the list of parameters
 > to the list of parameters
-  -<TT
+  -<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->{<TT
+>name</VAR
+>{<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->param</I
-></TT
->}   # remove the parameter <TT
+>param</VAR
+>}   # remove the parameter <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->param</I
-></TT
+>param</VAR
 > from the list of parameters
                 # If it was the last one left, disable the action.
 > from the list of parameters
                 # If it was the last one left, disable the action.
-  <TT
+  <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->-name</I
-></TT
+>-name</VAR
 >          # disable this action completely and remove all parameters from the list</PRE
 ></TD
 ></TR
 >          # disable this action completely and remove all parameters from the list</PRE
 ></TD
 ></TR
@@ -948,13 +1175,13 @@ CLASS="REPLACEABLE"
   </P
 ><P
 >  
   </P
 ><P
 >  
-   Examples: <TT
+   Examples: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+add-header{X-Fun-Header: Some text}</TT
+>+add-header{X-Fun-Header: Some text}</VAR
 > and
 > and
-   <TT
+   <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+filter{html-annoyances}</TT
+>+filter{html-annoyances}</VAR
 >
   </P
 ></LI
 >
   </P
 ></LI
@@ -994,7 +1221,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="ADD-HEADER">8.5.1. add-header</H4
+NAME="ADD-HEADER"
+>8.5.1. add-header</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1026,9 +1255,9 @@ CLASS="VARIABLELIST"
 >    Any string value is possible. Validity of the defined HTTP headers is not checked.
     It is recommended that you use the <SPAN
 CLASS="QUOTE"
 >    Any string value is possible. Validity of the defined HTTP headers is not checked.
     It is recommended that you use the <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->X-</TT
+>X-</VAR
 >"</SPAN
 > prefix
     for custom headers.
 >"</SPAN
 > prefix
     for custom headers.
@@ -1074,7 +1303,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="BLOCK">8.5.2. block</H4
+NAME="BLOCK"
+>8.5.2. block</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1092,19 +1323,19 @@ CLASS="VARIABLELIST"
 ><P
 >    Requests for URLs to which this action applies are blocked, i.e. the requests are not
     forwarded to the remote server, but answered locally with a substitute page or image,
 ><P
 >    Requests for URLs to which this action applies are blocked, i.e. the requests are not
     forwarded to the remote server, but answered locally with a substitute page or image,
-    as determined by the <TT
+    as determined by the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-></TT
+></VAR
 >
 >
-    and <TT
+    and <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
-></TT
+></VAR
 > actions.
    </P
 ></DD
 > actions.
    </P
 ></DD
@@ -1162,23 +1393,23 @@ CLASS="EMPHASIS"
 >both</I
 ></SPAN
 > 
 >both</I
 ></SPAN
 > 
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->block</TT
-> and <TT
+>block</VAR
+> and <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-></TT
+></VAR
 >,
     apply to the same request: it will then be replaced by an image. If 
 >,
     apply to the same request: it will then be replaced by an image. If 
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
-></TT
+></VAR
 >
     (see below) also applies, the type of image will be determined by its parameter,
     if not, the standard checkerboard pattern is sent.
 >
     (see below) also applies, the type of image will be determined by its parameter,
     if not, the standard checkerboard pattern is sent.
@@ -1192,12 +1423,12 @@ CLASS="APPLICATION"
     ads and other unwanted content.
    </P
 ><P
     ads and other unwanted content.
    </P
 ><P
->    The <TT
+>    The <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
-></TT
+></VAR
 >
     action can perform a very similar task, by <SPAN
 CLASS="QUOTE"
 >
     action can perform a very similar task, by <SPAN
 CLASS="QUOTE"
@@ -1240,7 +1471,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="CRUNCH-INCOMING-COOKIES">8.5.3. crunch-incoming-cookies</H4
+NAME="CRUNCH-INCOMING-COOKIES"
+>8.5.3. crunch-incoming-cookies</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1294,12 +1527,12 @@ CLASS="EMPHASIS"
 >outgoing</I
 ></SPAN
 > cookies, use
 >outgoing</I
 ></SPAN
 > cookies, use
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
 >crunch-outgoing-cookies</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
 >crunch-outgoing-cookies</A
-></TT
+></VAR
 >.
     Use <SPAN
 CLASS="emphasis"
 >.
     Use <SPAN
 CLASS="emphasis"
@@ -1317,14 +1550,21 @@ CLASS="EMPHASIS"
 >no sense at all</I
 ></SPAN
 > to use this action in conjunction
 >no sense at all</I
 ></SPAN
 > to use this action in conjunction
-    with the <TT
+    with the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SESSION-COOKIES-ONLY"
 >session-cookies-only</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SESSION-COOKIES-ONLY"
 >session-cookies-only</A
-></TT
+></VAR
 > action,
 > action,
-    since it would prevent the session cookies from being set.
+    since it would prevent the session cookies from being set. See also 
+    <VAR
+CLASS="LITERAL"
+><A
+HREF="actions-file.html#FILTER-CONTENT-COOKIES"
+>filter-content-cookies</A
+></VAR
+>.
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
@@ -1354,7 +1594,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="CRUNCH-OUTGOING-COOKIES">8.5.4. crunch-outgoing-cookies</H4
+NAME="CRUNCH-OUTGOING-COOKIES"
+>8.5.4. crunch-outgoing-cookies</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1408,12 +1650,12 @@ CLASS="EMPHASIS"
 >incoming</I
 ></SPAN
 > cookies, use
 >incoming</I
 ></SPAN
 > cookies, use
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
 >crunch-incoming-cookies</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
 >crunch-incoming-cookies</A
-></TT
+></VAR
 >.
     Use <SPAN
 CLASS="emphasis"
 >.
     Use <SPAN
 CLASS="emphasis"
@@ -1431,12 +1673,12 @@ CLASS="EMPHASIS"
 >no sense at all</I
 ></SPAN
 > to use this action in conjunction
 >no sense at all</I
 ></SPAN
 > to use this action in conjunction
-    with the <TT
+    with the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SESSION-COOKIES-ONLY"
 >session-cookies-only</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SESSION-COOKIES-ONLY"
 >session-cookies-only</A
-></TT
+></VAR
 > action,
     since it would prevent the session cookies from being read.
    </P
 > action,
     since it would prevent the session cookies from being read.
    </P
@@ -1468,7 +1710,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="DEANIMATE-GIFS">8.5.5. deanimate-gifs</H4
+NAME="DEANIMATE-GIFS"
+>8.5.5. deanimate-gifs</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1556,7 +1800,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="DOWNGRADE-HTTP-VERSION">8.5.6. downgrade-http-version</H4
+NAME="DOWNGRADE-HTTP-VERSION"
+>8.5.6. downgrade-http-version</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1630,7 +1876,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="FAST-REDIRECTS">8.5.7. fast-redirects</H4
+NAME="FAST-REDIRECTS"
+>8.5.7. fast-redirects</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1725,7 +1973,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="FILTER">8.5.8. filter</H4
+NAME="FILTER"
+>8.5.8. filter</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1741,9 +1991,15 @@ CLASS="VARIABLELIST"
 >Effect:</DT
 ><DD
 ><P
 >Effect:</DT
 ><DD
 ><P
->    Text documents, including HTML and JavaScript, to which this action
-    applies, are filtered on-the-fly through the specified regular expression
-    based substitutions.
+>    All files of text-based type, most notably HTML and JavaScript, to which this
+    action applies, are filtered on-the-fly through the specified regular expression
+    based substitutions. (Note: as of version 3.0.3 plain text documents 
+    are exempted from filtering, because web servers often use the
+    <VAR
+CLASS="LITERAL"
+>text/plain</VAR
+> MIME type for all files whose type they
+    don't know.)
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
@@ -1764,18 +2020,18 @@ HREF="filter-file.html"
 CLASS="FILENAME"
 >default.filter</TT
 >, set by the
 CLASS="FILENAME"
 >default.filter</TT
 >, set by the
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="config.html#FILTERFILE"
 >filterfile</A
 CLASS="LITERAL"
 ><A
 HREF="config.html#FILTERFILE"
 >filterfile</A
-></TT
+></VAR
 >
     option in the <A
 HREF="config.html"
 >config file</A
 >
     option in the <A
 HREF="config.html"
 >config file</A
->). Filtering 
-    can be completely disabled without the use of parameters.
+>). When used in its negative form,
+    and without parameters, filtering is completely disabled.
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
@@ -1787,13 +2043,6 @@ HREF="config.html"
     a list.
    </P
 ><P
     a list.
    </P
 ><P
->    This is potentially a very powerful feature!  But <SPAN
-CLASS="QUOTE"
->"rolling your own"</SPAN
->
-    filters requires a knowledge of regular expressions and HTML.
-   </P
-><P
 >    Filtering requires buffering the page content, which may appear to
     slow down page rendering since nothing is displayed until all content has
     passed the filters. (It does not really take longer, but seems that way
 >    Filtering requires buffering the page content, which may appear to
     slow down page rendering since nothing is displayed until all content has
     passed the filters. (It does not really take longer, but seems that way
@@ -1801,21 +2050,38 @@ CLASS="QUOTE"
     noticeable on slower connections.
    </P
 ><P
     noticeable on slower connections.
    </P
 ><P
+>    This is very powerful feature, but <SPAN
+CLASS="QUOTE"
+>"rolling your own"</SPAN
+>
+    filters requires a knowledge of regular expressions and HTML.
+   </P
+><P
 >    The amount of data that can be filtered is limited to the 
 >    The amount of data that can be filtered is limited to the 
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="config.html#BUFFER-LIMIT"
 >buffer-limit</A
 CLASS="LITERAL"
 ><A
 HREF="config.html#BUFFER-LIMIT"
 >buffer-limit</A
-></TT
+></VAR
 >
     option in the main <A
 HREF="config.html"
 >config file</A
 >. The 
     default is 4096 KB (4 Megs). Once this limit is exceeded, the buffered
 >
     option in the main <A
 HREF="config.html"
 >config file</A
 >. The 
     default is 4096 KB (4 Megs). Once this limit is exceeded, the buffered
-    data, and all pending data, is passed through unfiltered. Inappropriate 
-    MIME types are not filtered.
+    data, and all pending data, is passed through unfiltered. 
+   </P
+><P
+>    Inadequate MIME types, such as zipped files, are not filtered at all.
+    (Again, only text-based types except plain text). Encrypted SSL data
+    (from HTTPS servers) cannot be filtered either, since this would violate
+    the integrity of the secure transaction. In some situations it might
+    be necessary to protect certain text, like source code, from filtering
+    by defining appropriate <VAR
+CLASS="LITERAL"
+>-filter</VAR
+> sections.
    </P
 ><P
 >    At this time, <SPAN
    </P
 ><P
 >    At this time, <SPAN
@@ -1824,26 +2090,26 @@ CLASS="APPLICATION"
 > cannot (yet!) uncompress compressed
     documents. If you want filtering to work on all documents, even those that
     would normally be sent compressed, use the
 > cannot (yet!) uncompress compressed
     documents. If you want filtering to work on all documents, even those that
     would normally be sent compressed, use the
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#PREVENT-COMPRESSION"
 >prevent-compression</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#PREVENT-COMPRESSION"
 >prevent-compression</A
-></TT
+></VAR
 >
 >
-    action in conjunction with <TT
+    action in conjunction with <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->filter</TT
+>filter</VAR
 >.
    </P
 ><P
 >    Filtering can achieve some of the same effects as the 
 >.
    </P
 ><P
 >    Filtering can achieve some of the same effects as the 
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 >
     action, i.e. it can be used to block ads and banners. But the mechanism 
     works quite differently. One effective use, is to block ad banners 
 >
     action, i.e. it can be used to block ads and banners. But the mechanism 
     works quite differently. One effective use, is to block ad banners 
@@ -1857,16 +2123,32 @@ HREF="contact.html"
 > with suggestions for new or
     improved filters is particularly welcome!
    </P
 > with suggestions for new or
     improved filters is particularly welcome!
    </P
+><P
+>    The below list has only the names and a one-line description of each
+    predefined filter. There are <A
+HREF="filter-file.html#PREDEFINED-FILTERS"
+>more
+    verbose explanations</A
+> of what these filters do in the <A
+HREF="filter-file.html"
+>filter file chapter</A
+>.
+   </P
 ></DD
 ><DT
 >Example usage (with filters from the distribution <TT
 CLASS="FILENAME"
 >default.filter</TT
 ></DD
 ><DT
 >Example usage (with filters from the distribution <TT
 CLASS="FILENAME"
 >default.filter</TT
-> file):</DT
+> file).
+  See <A
+HREF="filter-file.html#PREDEFINED-FILTERS"
+>the Predefined Filters section</A
+> for 
+  more explanation on each:</DT
 ><DD
 ><P
 >    <A
 ><DD
 ><P
 >    <A
-NAME="FILTER-HTML-ANNOYANCES"
+NAME="FILTER-JS-ANNOYANCES"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -1877,7 +2159,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{html-annoyances}     # Get rid of particularly annoying HTML abuse.</PRE
+>+filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -1885,7 +2167,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-JS-ANNOYANCES"
+NAME="FILTER-JS-EVENTS"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -1896,7 +2178,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{js-annoyances}       # Get rid of particularly annoying JavaScript abuse</PRE
+>+filter{js-events}           # Kill all JS event bindings (Radically destructive! Only for extra nasty sites)</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -1904,7 +2186,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-BANNERS-BY-SIZE"
+NAME="FILTER-HTML-ANNOYANCES"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -1915,13 +2197,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{banners-by-size}     # Kill banners based on their size for this page (<SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->very</I
-></SPAN
-> efficient!)</PRE
+>+filter{html-annoyances}     # Get rid of particularly annoying HTML abuse</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -1929,7 +2205,7 @@ CLASS="EMPHASIS"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-BANNERS-BY-LINK"
+NAME="FILTER-CONTENT-COOKIES"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -1940,7 +2216,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{banners-by-link}     # Kill banners based on the link they are contained in (experimental)</PRE
+>+filter{content-cookies}     # Kill cookies that come in the HTML or JS content</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -1948,7 +2224,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-IMG-REORDER"
+NAME="FILTER-REFRESH-TAGS"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -1959,7 +2235,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{img-reorder}         # Reorder attributes in &#60;img&#62; tags to make the banners-by-* filters more effective</PRE
+>+filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -1967,7 +2243,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-CONTENT-COOKIES"
+NAME="FILTER-UNSOLICITED-POPUPS"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -1978,7 +2254,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{content-cookies}     # Kill cookies that come sneaking in the HTML or JS content</PRE
+>+filter{unsolicited-popups}  # Disable only unsolicited pop-up windows</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -1986,7 +2262,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-POPUPS"
+NAME="FILTER-ALL-POPUPS"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -1997,7 +2273,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{popups}              # Kill all popups in JS and HTML</PRE
+>+filter{all-popups}          # Kill all popups in JavaScript and HTML</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -2005,7 +2281,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-WEBBUGS"
+NAME="FILTER-IMG-REORDER"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -2016,7 +2292,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)</PRE
+>+filter{img-reorder}         # Reorder attributes in &#60;img&#62; tags to make the banners-by-* filters more effective</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -2024,7 +2300,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-FUN"
+NAME="FILTER-BANNERS-BY-SIZE"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -2035,7 +2311,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{fun}                 # Text replacements for subversive browsing fun!</PRE
+>+filter{banners-by-size}     # Kill banners by size</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -2043,7 +2319,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-FRAMESET-BORDERS"
+NAME="FILTER-BANNERS-BY-LINK"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -2054,15 +2330,15 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{frameset-borders}    # Give frames a border and make them resizeable</PRE
+>+filter{banners-by-link}     # Kill banners by their links to known clicktrackers</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
-> 
+>
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-REFRESH-TAGS"
+NAME="FILTER-WEBBUGS"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -2073,7 +2349,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups)</PRE
+>+filter{webbugs}             # Squish WebBugs (1x1 invisible GIFs used for user tracking)</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -2081,7 +2357,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-NIMDA"
+NAME="FILTER-TINY-TEXTFORMS"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -2092,7 +2368,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{nimda}               # Remove Nimda (virus) code.</PRE
+>+filter{tiny-textforms}      # Extend those tiny textareas up to 40x80 and kill the hard wrap</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -2100,7 +2376,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-SHOCKWAVE-FLASH"
+NAME="FILTER-JUMPING-WINDOWS"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -2111,7 +2387,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{shockwave-flash}     # Kill embedded Shockwave Flash objects</PRE
+>+filter{jumping-windows}     # Prevent windows from resizing and moving themselves</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -2119,7 +2395,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-CRUDE-PARENTAL"
+NAME="FILTER-FRAMESET-BORDERS"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -2130,7 +2406,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{crude-parental}      # Kill all web pages that contain the words "sex" or "warez"</PRE
+>+filter{frameset-borders}    # Give frames a border and make them resizable</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -2138,7 +2414,7 @@ CLASS="SCREEN"
    </P
 ><P
 >    <A
    </P
 ><P
 >    <A
-NAME="FILTER-JS-EVENTS"
+NAME="FILTER-DEMORONIZER"
 ></A
 >
     <TABLE
 ></A
 >
     <TABLE
@@ -2149,28 +2425,119 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->+filter{js-events}           # Kill all JS event bindings (<SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->Radically destructive!</I
-></SPAN
-> Only for extra nasty sites) </PRE
+>+filter{demoronizer}         # Fix MS's non-standard use of standard charsets</PRE
 ></TD
 ></TR
 ></TABLE
 >
    </P
 ></TD
 ></TR
 ></TABLE
 >
    </P
-></DD
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="SECT3"
+><P
+>    <A
+NAME="FILTER-SHOCKWAVE-FLASH"
+></A
+>
+    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="90%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>+filter{shockwave-flash}     # Kill embedded Shockwave Flash objects</PRE
+></TD
+></TR
+></TABLE
+>
+   </P
+><P
+>    <A
+NAME="FILTER-QUICKTIME-KIOSKMODE"
+></A
+>
+    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="90%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>+filter{quicktime-kioskmode} # Make Quicktime movies saveable</PRE
+></TD
+></TR
+></TABLE
+>
+   </P
+><P
+>    <A
+NAME="FILTER-FUN"
+></A
+>
+    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="90%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>+filter{fun}                 # Text replacements for subversive browsing fun!</PRE
+></TD
+></TR
+></TABLE
+>
+   </P
+><P
+>    <A
+NAME="FILTER-CRUDE-PARENTAL"
+></A
+>
+    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="90%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>+filter{crude-parental}      # Crude parental filtering (demo only)</PRE
+></TD
+></TR
+></TABLE
+>
+   </P
+><P
+>    <A
+NAME="FILTER-IE-EXPLOITS"
+></A
+>
+    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="90%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>+filter{ie-exploits}         # Disable some known Internet Explorer bug exploits</PRE
+></TD
+></TR
+></TABLE
+>
+   </P
+></DD
+></DL
+></DIV
+></DIV
+><DIV
+CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="HANDLE-AS-IMAGE">8.5.9. handle-as-image</H4
+NAME="HANDLE-AS-IMAGE"
+>8.5.9. handle-as-image</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -2193,12 +2560,12 @@ CLASS="EMPHASIS"
 ><DD
 ><P
 >    This action alone doesn't do anything noticeable. It just marks URLs as images.
 ><DD
 ><P
 >    This action alone doesn't do anything noticeable. It just marks URLs as images.
-    If the <TT
+    If the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > action <SPAN
 CLASS="emphasis"
 ><I
 > action <SPAN
 CLASS="emphasis"
 ><I
@@ -2210,12 +2577,12 @@ CLASS="EMPHASIS"
 CLASS="QUOTE"
 >"blocked"</SPAN
 >
 CLASS="QUOTE"
 >"blocked"</SPAN
 >
-    page, or a replacement image (as determined by the <TT
+    page, or a replacement image (as determined by the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
-></TT
+></VAR
 > action) will be sent to the
     client as a substitute for the blocked content.
    </P
 > action) will be sent to the
     client as a substitute for the blocked content.
    </P
@@ -2246,21 +2613,21 @@ CLASS="FILENAME"
    </P
 ><P
 >    Users will probably only want to use the handle-as-image action in conjunction with
    </P
 ><P
 >    Users will probably only want to use the handle-as-image action in conjunction with
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 >, to block sources of banners, whose URLs don't
     reflect the file type, like in the second example section.
    </P
 ><P
 >    Note that you cannot treat HTML pages as images in most cases. For instance, (in-line) ad
     frames require an HTML page to be sent, or they won't display properly.
 >, to block sources of banners, whose URLs don't
     reflect the file type, like in the second example section.
    </P
 ><P
 >    Note that you cannot treat HTML pages as images in most cases. For instance, (in-line) ad
     frames require an HTML page to be sent, or they won't display properly.
-    Forcing <TT
+    Forcing <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->handle-as-image</TT
+>handle-as-image</VAR
 > in this situation will not replace the
     ad frame with an image, but lead to error messages.
    </P
 > in this situation will not replace the
     ad frame with an image, but lead to error messages.
    </P
@@ -2304,7 +2671,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="HIDE-FORWARDED-FOR-HEADERS">8.5.10. hide-forwarded-for-headers</H4
+NAME="HIDE-FORWARDED-FOR-HEADERS"
+>8.5.10. hide-forwarded-for-headers</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -2383,7 +2752,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="HIDE-FROM-HEADER">8.5.11. hide-from-header</H4
+NAME="HIDE-FROM-HEADER"
+>8.5.11. hide-from-header</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -2430,12 +2801,12 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"block"</SPAN
 > will completely remove the header 
 CLASS="QUOTE"
 >"block"</SPAN
 > will completely remove the header 
-    (not to be confused with the <TT
+    (not to be confused with the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 >
     action).
    </P
 >
     action).
    </P
@@ -2492,7 +2863,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="HIDE-REFERRER">8.5.12. hide-referrer</H4
+NAME="HIDE-REFERRER"
+>8.5.12. hide-referrer</A
+></H4
 ><A
 NAME="HIDE-REFERER"
 ></A
 ><A
 NAME="HIDE-REFERER"
 ></A
@@ -2570,13 +2943,13 @@ CLASS="EMPHASIS"
    </P
 ><P
 >  
    </P
 ><P
 >  
-   <TT
+   <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->hide-referer</TT
+>hide-referer</VAR
 > is an alternate spelling of
 > is an alternate spelling of
-   <TT
+   <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->hide-referrer</TT
+>hide-referrer</VAR
 > and the two can be can be freely
    substituted with each other. (<SPAN
 CLASS="QUOTE"
 > and the two can be can be freely
    substituted with each other. (<SPAN
 CLASS="QUOTE"
@@ -2629,7 +3002,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="HIDE-USER-AGENT">8.5.13. hide-user-agent</H4
+NAME="HIDE-USER-AGENT"
+>8.5.13. hide-user-agent</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -2765,9 +3140,11 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="KILL-POPUPS">8.5.14. kill-popups<A
+NAME="KILL-POPUPS"
+>8.5.14. kill-popups<A
 NAME="KILL-POPUP"
 ></A
 NAME="KILL-POPUP"
 ></A
+></A
 ></H4
 ><P
 ></P
 ></H4
 ><P
 ></P
@@ -2778,7 +3155,7 @@ CLASS="VARIABLELIST"
 >Typical use:</DT
 ><DD
 ><P
 >Typical use:</DT
 ><DD
 ><P
->Eliminate those annoying pop-up windows</P
+>Eliminate those annoying pop-up windows (deprecated)</P
 ></DD
 ><DT
 >Effect:</DT
 ></DD
 ><DT
 >Effect:</DT
@@ -2805,67 +3182,77 @@ CLASS="VARIABLELIST"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    This action is easily confused with the built-in, hardwired <TT
+>    This action is basically a built-in, hardwired special-purpose filter
+    action, but there are important differences: For <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
-><A
-HREF="actions-file.html#FILTER"
->filter</A
-></TT
->
-    action, but there are important differences: For <TT
-CLASS="LITERAL"
->kill-popups</TT
+>kill-popups</VAR
 >,
     the document need not be buffered, so it can be incrementally rendered while
 >,
     the document need not be buffered, so it can be incrementally rendered while
-    downloading. But <TT
+    downloading. But <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->kill-popups</TT
+>kill-popups</VAR
 > doesn't catch as many pop-ups as
 > doesn't catch as many pop-ups as
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 CLASS="LITERAL"
 ><A
-HREF="actions-file.html#FILTER"
->filter</A
->{<TT
+HREF="actions-file.html#FILTER-ALL-POPUPS"
+>filter{<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->popups</I
-></TT
->}</TT
+>all-popups</VAR
+>}</A
+></VAR
+>
+    does and is not as smart as <VAR
+CLASS="LITERAL"
+><A
+HREF="actions-file.html#FILTER-UNSOLICITED-POPUPS"
+>filter{<VAR
+CLASS="REPLACEABLE"
+>unsolicited-popups</VAR
+>}</A
 >
 >
-    does. 
+    </VAR
+>is.
    </P
 ><P
 >    Think of it as a fast and efficient replacement for a filter that you
     can use if you don't want any filtering at all. Note that it doesn't make
    </P
 ><P
 >    Think of it as a fast and efficient replacement for a filter that you
     can use if you don't want any filtering at all. Note that it doesn't make
-    sense to combine it with any <TT
+    sense to combine it with any <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
-></TT
+></VAR
 > action,
 > action,
-    since as soon as one <TT
+    since as soon as one <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
-></TT
+></VAR
 > applies,
     the whole document needs to be buffered anyway, which destroys the advantage of
 > applies,
     the whole document needs to be buffered anyway, which destroys the advantage of
-    the <TT
+    the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->kill-popups</TT
+>kill-popups</VAR
 > action over its filter equivalent.
    </P
 ><P
 > action over its filter equivalent.
    </P
 ><P
->    Killing all pop-ups is a dangerous business. Many shops and banks rely on
-    pop-ups to display forms, shopping carts etc, and killing only the unwanted pop-ups 
-    would require artificial intelligence in <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
->.
-    If the only kind of pop-ups that you want to kill are exit consoles (those
+>    Killing all pop-ups unconditionally is problematic. Many shops and banks rely on
+    pop-ups to display forms, shopping carts etc, and the <VAR
+CLASS="LITERAL"
+><A
+HREF="actions-file.html#FILTER-UNSOLICITED-POPUPS"
+>filter{<VAR
+CLASS="REPLACEABLE"
+>unsolicited-popups</VAR
+>}</A
+>
+    </VAR
+> does a fairly good job of catching only the unwanted ones.
+   </P
+><P
+>    If the only kind of pop-ups that you want to kill are exit consoles (those
     <SPAN
 CLASS="emphasis"
 ><I
     <SPAN
 CLASS="emphasis"
 ><I
@@ -2874,17 +3261,15 @@ CLASS="EMPHASIS"
 ></SPAN
 > windows that appear when you close an other
     one), you might want to use
 ></SPAN
 > windows that appear when you close an other
     one), you might want to use
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
->{<TT
+>{<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->js-annoyances</I
-></TT
->}</TT
+>js-annoyances</VAR
+>}</VAR
 >
     instead. 
    </P
 >
     instead. 
    </P
@@ -2915,7 +3300,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="LIMIT-CONNECT">8.5.15. limit-connect</H4
+NAME="LIMIT-CONNECT"
+>8.5.15. limit-connect</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -2955,18 +3342,18 @@ CLASS="APPLICATION"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    By default, i.e. if no <TT
+>    By default, i.e. if no <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->limit-connect</TT
+>limit-connect</VAR
 > action applies,
     <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > only allows HTTP CONNECT
     requests to port 443 (the standard, secure HTTPS port). Use 
 > action applies,
     <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > only allows HTTP CONNECT
     requests to port 443 (the standard, secure HTTPS port). Use 
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->limit-connect</TT
+>limit-connect</VAR
 > if more fine-grained control is desired
     for some or all destinations.
    </P
 > if more fine-grained control is desired
     for some or all destinations.
    </P
@@ -3016,7 +3403,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="PREVENT-COMPRESSION">8.5.16. prevent-compression</H4
+NAME="PREVENT-COMPRESSION"
+>8.5.16. prevent-compression</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -3027,12 +3416,12 @@ CLASS="VARIABLELIST"
 ><DD
 ><P
 >    Ensure that servers send the content uncompressed, so it can be
 ><DD
 ><P
 >    Ensure that servers send the content uncompressed, so it can be
-    passed through <TT
+    passed through <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
-></TT
+></VAR
 >s
    </P
 ></DD
 >s
    </P
 ></DD
@@ -3061,25 +3450,25 @@ HREF="actions-file.html#FILTER"
 ><DD
 ><P
 >    More and more websites send their content compressed by default, which
 ><DD
 ><P
 >    More and more websites send their content compressed by default, which
-    is generally a good idea and saves bandwidth. But for the <TT
+    is generally a good idea and saves bandwidth. But for the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
-></TT
->, <TT
+></VAR
+>, <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#DEANIMATE-GIFS"
 >deanimate-gifs</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#DEANIMATE-GIFS"
 >deanimate-gifs</A
-></TT
+></VAR
 >
 >
-    and <TT
+    and <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#KILL-POPUPS"
 >kill-popups</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#KILL-POPUPS"
 >kill-popups</A
-></TT
+></VAR
 > actions to work,
     <SPAN
 CLASS="APPLICATION"
 > actions to work,
     <SPAN
 CLASS="APPLICATION"
@@ -3094,17 +3483,17 @@ CLASS="APPLICATION"
    </P
 ><P
 >    This will slow down transfers from those websites, though. If you use any of the above-mentioned
    </P
 ><P
 >    This will slow down transfers from those websites, though. If you use any of the above-mentioned
-    actions, you will typically want to use <TT
+    actions, you will typically want to use <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->prevent-compression</TT
+>prevent-compression</VAR
 > in conjunction
     with them.
    </P
 ><P
 >    Note that some (rare) ill-configured sites don't handle requests for uncompressed
 > in conjunction
     with them.
    </P
 ><P
 >    Note that some (rare) ill-configured sites don't handle requests for uncompressed
-    documents correctly (they send an empty document body). If you use <TT
+    documents correctly (they send an empty document body). If you use <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->prevent-compression</TT
+>prevent-compression</VAR
 >
     per default, you'll have to add exceptions for those sites. See the example for how to do that.
    </P
 >
     per default, you'll have to add exceptions for those sites. See the example for how to do that.
    </P
@@ -3145,7 +3534,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="SEND-VANILLA-WAFER">8.5.17. send-vanilla-wafer</H4
+NAME="SEND-VANILLA-WAFER"
+>8.5.17. send-vanilla-wafer</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -3216,7 +3607,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="SEND-WAFER">8.5.18. send-wafer</H4
+NAME="SEND-WAFER"
+>8.5.18. send-wafer</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -3248,16 +3641,12 @@ CLASS="VARIABLELIST"
 ><P
 >    A string of the form <SPAN
 CLASS="QUOTE"
 ><P
 >    A string of the form <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->=<TT
+>name</VAR
+>=<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->value</I
-></TT
+>value</VAR
 >"</SPAN
 >.
    </P
 >"</SPAN
 >.
    </P
@@ -3301,7 +3690,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="SESSION-COOKIES-ONLY">8.5.19. session-cookies-only</H4
+NAME="SESSION-COOKIES-ONLY"
+>8.5.19. session-cookies-only</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -3314,13 +3705,14 @@ CLASS="VARIABLELIST"
 >    Allow only temporary <SPAN
 CLASS="QUOTE"
 >"session"</SPAN
 >    Allow only temporary <SPAN
 CLASS="QUOTE"
 >"session"</SPAN
-> cookies (for the current browser session <SPAN
+> cookies (for the current
+    browser session <SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 >only</I
 ></SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 >only</I
 ></SPAN
->).
+>). 
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
@@ -3333,8 +3725,9 @@ CLASS="QUOTE"
 > field from <SPAN
 CLASS="QUOTE"
 >"Set-Cookie:"</SPAN
 > field from <SPAN
 CLASS="QUOTE"
 >"Set-Cookie:"</SPAN
-> server headers.
-    Most browsers will not store such cookies permanently and forget them in between sessions.
+>
+    server headers. Most browsers will not store such cookies permanently and
+    forget them in between sessions.
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
@@ -3354,27 +3747,27 @@ CLASS="QUOTE"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    This is less strict than <TT
+>    This is less strict than <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
 >crunch-incoming-cookies</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
 >crunch-incoming-cookies</A
-></TT
+></VAR
 > / 
 > / 
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
 >crunch-outgoing-cookies</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
 >crunch-outgoing-cookies</A
-></TT
+></VAR
 > and allows you to browse
     websites that insist or rely on setting cookies, without compromising your privacy too badly.
    </P
 ><P
 >    Most browsers will not permanently store cookies that have been processed by
 > and allows you to browse
     websites that insist or rely on setting cookies, without compromising your privacy too badly.
    </P
 ><P
 >    Most browsers will not permanently store cookies that have been processed by
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->session-cookies-only</TT
+>session-cookies-only</VAR
 > and will forget about them between sessions.
     This makes profiling cookies useless, but won't break sites which require cookies so
     that you can log in for transactions. This is generally turned on for all 
 > and will forget about them between sessions.
     This makes profiling cookies useless, but won't break sites which require cookies so
     that you can log in for transactions. This is generally turned on for all 
@@ -3387,23 +3780,23 @@ CLASS="emphasis"
 CLASS="EMPHASIS"
 >no sense at all</I
 ></SPAN
 CLASS="EMPHASIS"
 >no sense at all</I
 ></SPAN
-> to use <TT
+> to use <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->session-cookies-only</TT
+>session-cookies-only</VAR
 >
 >
-    together with <TT
+    together with <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
 >crunch-incoming-cookies</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
 >crunch-incoming-cookies</A
-></TT
+></VAR
 > or
 > or
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
 >crunch-outgoing-cookies</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
 >crunch-outgoing-cookies</A
-></TT
+></VAR
 >. If you do, cookies
     will be plainly killed.
    </P
 >. If you do, cookies
     will be plainly killed.
    </P
@@ -3414,6 +3807,29 @@ CLASS="QUOTE"
 >
     field. If you use an exotic browser, you might want to try it out to be sure.
    </P
 >
     field. If you use an exotic browser, you might want to try it out to be sure.
    </P
+><P
+>    This setting also has no effect on cookies that may have been stored
+    previously by the browser before starting <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>.
+    These would have to be removed manually.
+   </P
+><P
+>     <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> also uses  
+     the <A
+HREF="actions-file.html#FILTER-CONTENT-COOKIES"
+>content-cookies filter</A
+> 
+     to block some types of cookies. Content cookies are not effected by 
+     <VAR
+CLASS="LITERAL"
+>session-cookies-only</VAR
+>.
+   </P
 ></DD
 ><DT
 >Example usage:</DT
 ></DD
 ><DT
 >Example usage:</DT
@@ -3442,7 +3858,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="SET-IMAGE-BLOCKER">8.5.20. set-image-blocker</H4
+NAME="SET-IMAGE-BLOCKER"
+>8.5.20. set-image-blocker</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -3465,24 +3883,24 @@ CLASS="EMPHASIS"
 >both</I
 ></SPAN
 >
 >both</I
 ></SPAN
 >
-     <TT
+     <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > <SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 >and</I
 ></SPAN
 > <SPAN
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 >and</I
 ></SPAN
-> <TT
+> <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-></TT
+></VAR
 > <SPAN
 CLASS="emphasis"
 ><I
 > <SPAN
 CLASS="emphasis"
 ><I
@@ -3543,18 +3961,14 @@ CLASS="APPLICATION"
 ><P
 >      <SPAN
 CLASS="QUOTE"
 ><P
 >      <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->target-url</I
-></TT
+>target-url</VAR
 >"</SPAN
 > to
 >"</SPAN
 > to
-      send a redirect to <TT
+      send a redirect to <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->target-url</I
-></TT
+>target-url</VAR
 >. You can redirect
       to any image anywhere, even in your local filesystem (via <SPAN
 CLASS="QUOTE"
 >. You can redirect
       to any image anywhere, even in your local filesystem (via <SPAN
 CLASS="QUOTE"
@@ -3566,11 +3980,9 @@ CLASS="QUOTE"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >-built-in
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >-built-in
-      URLs, which send the built-in images, as <TT
+      URLs, which send the built-in images, as <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->target-url</I
-></TT
+>target-url</VAR
 >.
       This has the same visual effect as specifying <SPAN
 CLASS="QUOTE"
 >.
       This has the same visual effect as specifying <SPAN
 CLASS="QUOTE"
@@ -3591,17 +4003,13 @@ CLASS="QUOTE"
 ><P
 >    The URLs for the built-in images are <SPAN
 CLASS="QUOTE"
 ><P
 >    The URLs for the built-in images are <SPAN
 CLASS="QUOTE"
->"http://config.privoxy.org/send-banner?type=<TT
+>"http://config.privoxy.org/send-banner?type=<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->type</I
-></TT
+>type</VAR
 >"</SPAN
 >"</SPAN
->, where <TT
+>, where <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->type</I
-></TT
+>type</VAR
 > is
     either <SPAN
 CLASS="QUOTE"
 > is
     either <SPAN
 CLASS="QUOTE"
@@ -3622,9 +4030,9 @@ CLASS="EMPHASIS"
 >NOT</I
 ></SPAN
 > to be
 >NOT</I
 ></SPAN
 > to be
-    used in <TT
+    used in <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->set-image-blocker</TT
+>set-image-blocker</VAR
 >, but meant for use from <A
 HREF="filter-file.html"
 >filters</A
 >, but meant for use from <A
 HREF="filter-file.html"
 >filters</A
@@ -3698,7 +4106,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="AEN2706">8.5.21. Summary</H3
+NAME="AEN2855"
+>8.5.21. Summary</A
+></H3
 ><P
 > Note that many of these actions have the potential to cause a page to
  misbehave, possibly even not to display at all. There are many ways 
 ><P
 > Note that many of these actions have the potential to cause a page to
  misbehave, possibly even not to display at all. There are many ways 
@@ -3716,7 +4126,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="ALIASES">8.6. Aliases</H2
+NAME="ALIASES"
+>8.6. Aliases</A
+></H2
 ><P
 > Custom <SPAN
 CLASS="QUOTE"
 ><P
 > Custom <SPAN
 CLASS="QUOTE"
@@ -3844,16 +4256,55 @@ CLASS="SCREEN"
  # These aliases just save typing later:
  # (Note that some already use other aliases!)
  #
  # These aliases just save typing later:
  # (Note that some already use other aliases!)
  #
- +crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
- -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
+ +crunch-all-cookies = +<A
+HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
+>crunch-incoming-cookies</A
+> +<A
+HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
+>crunch-outgoing-cookies</A
+>
+ -crunch-all-cookies = -<A
+HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
+>crunch-incoming-cookies</A
+> -<A
+HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
+>crunch-outgoing-cookies</A
+>
  block-as-image      = +block +handle-as-image
  block-as-image      = +block +handle-as-image
- mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
+ mercy-for-cookies   = -crunch-all-cookies -<A
+HREF="actions-file.html#SESSION-COOKIES-ONLY"
+>session-cookies-only</A
+> -<A
+HREF="actions-file.html#FILTER-CONTENT-COOKIES"
+>filter{content-cookies}</A
+>
 
  # These aliases define combinations of actions
  # that are useful for certain types of sites:
  #
 
  # These aliases define combinations of actions
  # that are useful for certain types of sites:
  #
- fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
- shop        = -crunch-all-cookies -filter{popups} -kill-popups
+ fragile     = -<A
+HREF="actions-file.html#BLOCK"
+>block</A
+> -<A
+HREF="actions-file.html#FILTER"
+>filter</A
+> -crunch-all-cookies -<A
+HREF="actions-file.html#FAST-REDIRECTS"
+>fast-redirects</A
+> -<A
+HREF="actions-file.html#HIDE-REFERER"
+>hide-referrer</A
+> -<A
+HREF="actions-file.html#KILL-POPUPS"
+>kill-popups</A
+>
+ shop        = -crunch-all-cookies -<A
+HREF="actions-file.html#FILTER-ALL-POPUPS"
+>filter{all-popups}</A
+> -<A
+HREF="actions-file.html#KILL-POPUPS"
+>kill-popups</A
+>
 
  # Short names for other aliases, for really lazy people ;-)
  #
 
  # Short names for other aliases, for really lazy people ;-)
  #
@@ -3897,7 +4348,7 @@ CLASS="SCREEN"
 
  # These shops require pop-ups:
  #
 
  # These shops require pop-ups:
  #
- {shop -kill-popups -filter{popups}}
+ {shop -kill-popups -filter{all-popups}}
   .dabs.com
   .overclockers.co.uk</PRE
 ></TD
   .dabs.com
   .overclockers.co.uk</PRE
 ></TD
@@ -3923,7 +4374,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="ACT-EXAMPLES">8.7. Actions Files Tutorial</H2
+NAME="ACT-EXAMPLES"
+>8.7. Actions Files Tutorial</A
+></H2
 ><P
 > The above chapters have shown <A
 HREF="actions-file.html"
 ><P
 > The above chapters have shown <A
 HREF="actions-file.html"
@@ -3957,7 +4410,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="AEN2758">8.7.1. default.action</H3
+NAME="AEN2920"
+>8.7.1. default.action</A
+></H3
 ><P
 >Every config file should start with a short comment stating its purpose:</P
 ><P
 ><P
 >Every config file should start with a short comment stating its purpose:</P
 ><P
@@ -4021,19 +4476,58 @@ CLASS="SCREEN"
 ##########################################################################
 {{alias}}
 
 ##########################################################################
 {{alias}}
 
-# These aliases just save typing later:
-# (Note that some already use other aliases!)
-#
-+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
--crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
-block-as-image      = +block +handle-as-image
-mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
+ # These aliases just save typing later:
+ # (Note that some already use other aliases!)
+ #
+ +crunch-all-cookies = +<A
+HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
+>crunch-incoming-cookies</A
+> +<A
+HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
+>crunch-outgoing-cookies</A
+>
+ -crunch-all-cookies = -<A
+HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
+>crunch-incoming-cookies</A
+> -<A
+HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
+>crunch-outgoing-cookies</A
+>
+ block-as-image      = +block +handle-as-image
+ mercy-for-cookies   = -crunch-all-cookies -<A
+HREF="actions-file.html#SESSION-COOKIES-ONLY"
+>session-cookies-only</A
+> -<A
+HREF="actions-file.html#FILTER-CONTENT-COOKIES"
+>filter{content-cookies}</A
+>
 
 
-# These aliases define combinations of actions
-# that are useful for certain types of sites:
-#
-fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
-shop        = mercy-for-cookies -filter{popups} -kill-popups</PRE
+ # These aliases define combinations of actions
+ # that are useful for certain types of sites:
+ #
+ fragile     = -<A
+HREF="actions-file.html#BLOCK"
+>block</A
+> -<A
+HREF="actions-file.html#FILTER"
+>filter</A
+> -crunch-all-cookies -<A
+HREF="actions-file.html#FAST-REDIRECTS"
+>fast-redirects</A
+> -<A
+HREF="actions-file.html#HIDE-REFERER"
+>hide-referrer</A
+> -<A
+HREF="actions-file.html#KILL-POPUPS"
+>kill-popups</A
+>
+ shop        = -crunch-all-cookies -<A
+HREF="actions-file.html#FILTER-ALL-POPUPS"
+>filter{all-popups}</A
+> -<A
+HREF="actions-file.html#KILL-POPUPS"
+>kill-popups</A
+></PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -4053,9 +4547,9 @@ CLASS="EMPHASIS"
 > The first regular section is probably the most important. It has only
  one pattern, <SPAN
 CLASS="QUOTE"
 > The first regular section is probably the most important. It has only
  one pattern, <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/</TT
+>/</VAR
 >"</SPAN
 >, but this pattern
  <A
 >"</SPAN
 >, but this pattern
  <A
@@ -4129,38 +4623,38 @@ HREF="actions-file.html#DOWNGRADE-HTTP-VERSION"
  +<A
 HREF="actions-file.html#FAST-REDIRECTS"
 >fast-redirects</A
  +<A
 HREF="actions-file.html#FAST-REDIRECTS"
 >fast-redirects</A
-> \
- +<A
-HREF="actions-file.html#FILTER-HTML-ANNOYANCES"
->filter{html-annoyances}</A
 > \
  +<A
 HREF="actions-file.html#FILTER-JS-ANNOYANCES"
 >filter{js-annoyances}</A
 > \
  -<A
 > \
  +<A
 HREF="actions-file.html#FILTER-JS-ANNOYANCES"
 >filter{js-annoyances}</A
 > \
  -<A
-HREF="actions-file.html#FILTER-CONTENT-COOKIES"
->filter{content-cookies}</A
-> \
- +<A
-HREF="actions-file.html#FILTER-POPUPS"
->filter{popups}</A
+HREF="actions-file.html#FILTER-JS-EVENTS"
+>filter{js-events}</A
 > \
  +<A
 > \
  +<A
-HREF="actions-file.html#FILTER-WEBBUGS"
->filter{webbugs}</A
+HREF="actions-file.html#FILTER-HTML-ANNOYANCES"
+>filter{html-annoyances}</A
 > \
  -<A
 > \
  -<A
+HREF="actions-file.html#FILTER-CONTENT-COOKIES"
+>filter{content-cookies}</A
+> \
+ +<A
 HREF="actions-file.html#FILTER-REFRESH-TAGS"
 >filter{refresh-tags}</A
 HREF="actions-file.html#FILTER-REFRESH-TAGS"
 >filter{refresh-tags}</A
+> \
+ +<A
+HREF="actions-file.html#FILTER-UNSOLICITED-POPUPS"
+>filter{unsolicited-popups}</A
 > \
  -<A
 > \
  -<A
-HREF="actions-file.html#FILTER-FUN"
->filter{fun}</A
+HREF="actions-file.html#FILTER-ALL-POPUPS"
+>filter{all-popups}</A
 > \
  +<A
 > \
  +<A
-HREF="actions-file.html#FILTER-NIMDA"
->filter{nimda}</A
+HREF="actions-file.html#FILTER-IMG-REORDER"
+>filter{img-reorder}</A
 > \
  +<A
 HREF="actions-file.html#FILTER-BANNERS-BY-SIZE"
 > \
  +<A
 HREF="actions-file.html#FILTER-BANNERS-BY-SIZE"
@@ -4169,24 +4663,48 @@ HREF="actions-file.html#FILTER-BANNERS-BY-SIZE"
  -<A
 HREF="actions-file.html#FILTER-BANNERS-BY-LINK"
 >filter{banners-by-link}</A
  -<A
 HREF="actions-file.html#FILTER-BANNERS-BY-LINK"
 >filter{banners-by-link}</A
+> \
+ +<A
+HREF="actions-file.html#FILTER-WEBBUGS"
+>filter{webbugs}</A
 > \
  -<A
 > \
  -<A
-HREF="actions-file.html#FILTER-IMG-REORDER"
->filter{img-reorder}</A
+HREF="actions-file.html#FILTER-TINY-TEXTFORMS"
+>filter{tiny-textforms}</A
+> \
+ +<A
+HREF="actions-file.html#FILTER-JUMPING-WINDOWS"
+>filter{jumping-windows}</A
+> \
+ -<A
+HREF="actions-file.html#FILTER-FRAMESET-BORDERS"
+>filter{frameset-borders}</A
+> \
+ -<A
+HREF="actions-file.html#FILTER-DEMORONIZER"
+>filter{demoronizer}</A
 > \
  -<A
 HREF="actions-file.html#FILTER-SHOCKWAVE-FLASH"
 >filter{shockwave-flash}</A
 > \
  -<A
 > \
  -<A
 HREF="actions-file.html#FILTER-SHOCKWAVE-FLASH"
 >filter{shockwave-flash}</A
 > \
  -<A
-HREF="actions-file.html#FILTER-CRUDE-PARENTAL"
->filter{crude-parental}</A
+HREF="actions-file.html#FILTER-QUICKTIME-KIOSKMODE"
+>filter{quicktime-kioskmode}</A
 > \
  -<A
 > \
  -<A
-HREF="actions-file.html#FILTER-JS-EVENTS"
->filter{js-events}</A
+HREF="actions-file.html#FILTER-FUN"
+>filter{fun}</A
 > \
  -<A
 > \
  -<A
+HREF="actions-file.html#FILTER-CRUDE-PARENTAL"
+>filter{crude-parental}</A
+> \
+ +<A
+HREF="actions-file.html#FILTER-IE-EXPLOITS"
+>filter{ie-exploits}</A
+> \     
+ -<A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 > \
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 > \
@@ -4255,9 +4773,7 @@ CLASS="EMPHASIS"
 ></SPAN
 > the
  default!) need exceptions, i.e. we need to specify explicitly what we
 ></SPAN
 > the
  default!) need exceptions, i.e. we need to specify explicitly what we
- want to block in later sections.
- We will also want to make exceptions from our general pop-up-killing,
- and use our defined aliases for that.</P
+ want to block in later sections.</P
 ><P
 > The first of our specialized sections is concerned with <SPAN
 CLASS="QUOTE"
 ><P
 > The first of our specialized sections is concerned with <SPAN
 CLASS="QUOTE"
@@ -4266,9 +4782,9 @@ CLASS="QUOTE"
  sites, i.e. sites that require minimum interference, because they are either
  very complex or very keen on tracking you (and have mechanisms in place that
  make them unusable for people who avoid being tracked). We will simply use
  sites, i.e. sites that require minimum interference, because they are either
  very complex or very keen on tracking you (and have mechanisms in place that
  make them unusable for people who avoid being tracked). We will simply use
- our pre-defined <TT
+ our pre-defined <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->fragile</TT
+>fragile</VAR
 > alias instead of stating the list
  of actions explicitly:</P
 ><P
 > alias instead of stating the list
  of actions explicitly:</P
 ><P
@@ -4318,64 +4834,12 @@ CLASS="SCREEN"
 ></TABLE
 ></P
 ><P
 ></TABLE
 ></P
 ><P
-> Then, there are sites which rely on pop-up windows (yuck!) to work.
- Since we made pop-up-killing our default above, we need to make exceptions
- now. <A
-HREF="http://www.mozilla.org/"
-TARGET="_top"
->Mozilla</A
-> users, who
- can turn on smart handling of unwanted pop-ups in their browsers, can
- safely choose
- -<TT
-CLASS="LITERAL"
-><A
-HREF="actions-file.html#FILTER-POPUPS"
->filter{popups}</A
-></TT
-> (and
- -<TT
-CLASS="LITERAL"
-><A
-HREF="actions-file.html#KILL-POPUPS"
->kill-popups</A
-></TT
->) above
- and hence don't need this section. Anyway, disabling an already disabled
- action doesn't hurt, so we'll define our exceptions regardless of what was
- chosen in the defaults section:</P
-><P
-> <TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="SCREEN"
-># These sites require pop-ups too :( 
-#
-{ -<A
-HREF="actions-file.html#KILL-POPUPS"
->kill-popups</A
-> -<A
-HREF="actions-file.html#FILTER-POPUPS"
->filter{popups}</A
-> }
-.dabs.com
-.overclockers.co.uk
-.deutsche-bank-24.de</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
-> The <TT
+> The <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FAST-REDIRECTS"
 >fast-redirects</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FAST-REDIRECTS"
 >fast-redirects</A
-></TT
+></VAR
 >
  action, which we enabled per default above,  breaks some sites. So disable
  it for popular sites where we know it misbehaves:</P
 >
  action, which we enabled per default above,  breaks some sites. So disable
  it for popular sites where we know it misbehaves:</P
@@ -4424,12 +4888,12 @@ CLASS="EMPHASIS"
 >and</I
 ></SPAN
 >
 >and</I
 ></SPAN
 >
- information). We can mark any URL as an image with the <TT
+ information). We can mark any URL as an image with the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-></TT
+></VAR
 > action,
  and marking all URLs that end in a known image file extension is a
  good start:</P
 > action,
  and marking all URLs that end in a known image file extension is a
  good start:</P
@@ -4469,11 +4933,11 @@ CLASS="EMPHASIS"
 ></SPAN
 >
  mark them as images in one go, with the help of our
 ></SPAN
 >
  mark them as images in one go, with the help of our
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->block-as-image</TT
+>block-as-image</VAR
 > alias defined above. (We could of
 > alias defined above. (We could of
- course just as well use <TT
+ course just as well use <VAR
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#BLOCK"
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#BLOCK"
@@ -4482,23 +4946,23 @@ HREF="actions-file.html#BLOCK"
  +<A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
  +<A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-></TT
+></VAR
 > here.)
  Remember that the type of the replacement image is chosen by the
 > here.)
  Remember that the type of the replacement image is chosen by the
- <TT
+ <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
-></TT
+></VAR
 >
  action. Since all URLs have matched the default section with its
 >
  action. Since all URLs have matched the default section with its
- <TT
+ <VAR
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
->{pattern}</TT
+>{pattern}</VAR
 >
  action before, it still applies and needn't be repeated:</P
 ><P
 >
  action before, it still applies and needn't be repeated:</P
 ><P
@@ -4534,24 +4998,24 @@ CLASS="APPLICATION"
 CLASS="QUOTE"
 >"blocked"</SPAN
 >
 CLASS="QUOTE"
 >"blocked"</SPAN
 >
- by the <TT
+ by the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
->{banners-by-size}</TT
+>{banners-by-size}</VAR
 >
  action, which we enabled above, and which deletes the references to banner
  images from the pages while they are loaded, so the browser doesn't request
  them anymore, and hence they don't need to be blocked here. But this naturally
  doesn't catch all banners, and some people choose not to use filters, so we
  need a comprehensive list of patterns for banner URLs here, and apply the
 >
  action, which we enabled above, and which deletes the references to banner
  images from the pages while they are loaded, so the browser doesn't request
  them anymore, and hence they don't need to be blocked here. But this naturally
  doesn't catch all banners, and some people choose not to use filters, so we
  need a comprehensive list of patterns for banner URLs here, and apply the
- <TT
+ <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > action to them.</P
 ><P
 > First comes a bunch of generic patterns, which do most of the work, by
 > action to them.</P
 ><P
 > First comes a bunch of generic patterns, which do most of the work, by
@@ -4593,11 +5057,9 @@ count*.
 ></P
 ><P
 > You wouldn't believe how many advertisers actually call their banner
 ></P
 ><P
 > You wouldn't believe how many advertisers actually call their banner
- servers ads.<TT
+ servers ads.<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->company</I
-></TT
+>company</VAR
 >.com, or call the directory
  in which the banners are stored simply <SPAN
 CLASS="QUOTE"
 >.com, or call the directory
  in which the banners are stored simply <SPAN
 CLASS="QUOTE"
@@ -4606,9 +5068,9 @@ CLASS="QUOTE"
  generic patterns are surprisingly effective.</P
 ><P
 > But being very generic, they necessarily also catch URLs that we don't want
  generic patterns are surprisingly effective.</P
 ><P
 > But being very generic, they necessarily also catch URLs that we don't want
- to block. The pattern <TT
+ to block. The pattern <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*ads.</TT
+>.*ads.</VAR
 > e.g. catches 
  <SPAN
 CLASS="QUOTE"
 > e.g. catches 
  <SPAN
 CLASS="QUOTE"
@@ -4640,12 +5102,12 @@ CLASS="EMPHASIS"
 ></SPAN
 >l.some-provider.net."</SPAN
 > So here come some
 ></SPAN
 >l.some-provider.net."</SPAN
 > So here come some
- well-known exceptions to the <TT
+ well-known exceptions to the <VAR
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 >
  section above.</P
 ><P
 >
  section above.</P
 ><P
@@ -4655,34 +5117,34 @@ CLASS="QUOTE"
 >"downloads.sourcefroge.net"</SPAN
 >: Initially, all actions are deactivated,
  so it wouldn't get blocked. Then comes the defaults section, which matches the
 >"downloads.sourcefroge.net"</SPAN
 >: Initially, all actions are deactivated,
  so it wouldn't get blocked. Then comes the defaults section, which matches the
- URL, but just deactivates the <TT
+ URL, but just deactivates the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 >
 >
- action once again. Then it matches <TT
+ action once again. Then it matches <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*ads.</TT
+>.*ads.</VAR
 >, an exception to the
  general non-blocking policy, and suddenly
 >, an exception to the
  general non-blocking policy, and suddenly
- <TT
+ <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >+block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >+block</A
-></TT
+></VAR
 > applies. And now, it'll match
 > applies. And now, it'll match
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*loads.</TT
->, where <TT
+>.*loads.</VAR
+>, where <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >-block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >-block</A
-></TT
+></VAR
 >
  applies, so (unless it matches <SPAN
 CLASS="emphasis"
 >
  applies, so (unless it matches <SPAN
 CLASS="emphasis"
@@ -4691,12 +5153,12 @@ CLASS="EMPHASIS"
 >again</I
 ></SPAN
 > further down) it ends up
 >again</I
 ></SPAN
 > further down) it ends up
- with no <TT
+ with no <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > action applying.</P
 ><P
 > <TABLE
 > action applying.</P
 ><P
 > <TABLE
@@ -4742,12 +5204,12 @@ www.ugu.com/sui/ugu/adv</PRE
 CLASS="QUOTE"
 >"cvs"</SPAN
 > in them. Note that
 CLASS="QUOTE"
 >"cvs"</SPAN
 > in them. Note that
- <TT
+ <VAR
 CLASS="LITERAL"
 >-<A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 >-<A
 HREF="actions-file.html#FILTER"
 >filter</A
-></TT
+></VAR
 >
  disables <SPAN
 CLASS="emphasis"
 >
  disables <SPAN
 CLASS="emphasis"
@@ -4789,7 +5251,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="AEN2915">8.7.2. user.action</H3
+NAME="AEN3086"
+>8.7.2. user.action</A
+></H3
 ><P
 > So far we are painting with a broad brush by setting general policies,
  which would be a reasonable starting point for many people. Now, 
 ><P
 > So far we are painting with a broad brush by setting general policies,
  which would be a reasonable starting point for many people. Now, 
@@ -4860,29 +5324,46 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
-># (Re-)define aliases for this file:
+># Aliases are local to the file they are defined in.
+# (Re-)define aliases for this file:
 #
 {{alias}}
 #
 {{alias}}
+# 
+# These aliases just save typing later, and the alias names should 
+# be self explanatory.
+#
++crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
 -crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
-mercy-for-cookies   = -crunch-all-cookies -session-cookies-only
-fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referer -kill-popups
-shop        = mercy-for-cookies -filter{popups} -kill-popups
-allow-ads   = -block -filter{banners-by-size} # (see below)</PRE
+ allow-all-cookies  = -crunch-all-cookies -session-cookies-only
+ allow-popups       = -filter{all-popups} -kill-popups
++block-as-image     = +block +handle-as-image
+-block-as-image     = -block
+
+# These aliases define combinations of actions that are useful for
+# certain types of sites:
+#
+fragile     = -block -crunch-all-cookies -filter -fast-redirects -hide-referrer -kill-popups
+shop        = -crunch-all-cookies allow-popups
+
+# Allow ads for selected useful free sites:
+#
+allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}</PRE
 ></TD
 ></TR
 ></TABLE
 >
 ></TD
 ></TR
 ></TABLE
 >
+
  </P
 ><P
 > Say you have accounts on some sites that you visit regularly, and
  you don't want to have to log in manually each time. So you'd like
  to allow persistent cookies for these sites. The
  </P
 ><P
 > Say you have accounts on some sites that you visit regularly, and
  you don't want to have to log in manually each time. So you'd like
  to allow persistent cookies for these sites. The
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->mercy-for-cookies</TT
+>allow-all-cookies</VAR
 > alias defined above does exactly
 > alias defined above does exactly
- that, i.e. it disables crunching of cookies in any direction, and
- processing of cookies to make them temporary.</P
+ that, i.e. it disables crunching of cookies in any direction, and the 
+ processing of cookies to make them only temporary.</P
 ><P
 > <TABLE
 BORDER="0"
 ><P
 > <TABLE
 BORDER="0"
@@ -4892,9 +5373,10 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->{ mercy-for-cookies }
+>{ allow-all-cookies }
+sourceforge.net
 sunsolve.sun.com
 sunsolve.sun.com
-slashdot.org
+.slashdot.org
 .yahoo.com
 .msdn.microsoft.com
 .redhat.com</PRE
 .yahoo.com
 .msdn.microsoft.com
 .redhat.com</PRE
@@ -4903,8 +5385,7 @@ slashdot.org
 ></TABLE
 ></P
 ><P
 ></TABLE
 ></P
 ><P
-> Your bank needs popups and is allergic to some filter, but you don't
- know which, so you disable them all:</P
+> Your bank is allergic to some filter, but you don't know which, so you disable them all:</P
 ><P
 > <TABLE
 BORDER="0"
 ><P
 > <TABLE
 BORDER="0"
@@ -4917,9 +5398,6 @@ CLASS="SCREEN"
 >{ -<A
 HREF="actions-file.html#FILTER"
 >filter</A
 >{ -<A
 HREF="actions-file.html#FILTER"
 >filter</A
-> -<A
-HREF="actions-file.html#KILL-POPUPS"
->kill-popups</A
 > }
 .your-home-banking-site.com</PRE
 ></TD
 > }
 .your-home-banking-site.com</PRE
 ></TD
@@ -4927,16 +5405,54 @@ HREF="actions-file.html#KILL-POPUPS"
 ></TABLE
 ></P
 ><P
 ></TABLE
 ></P
 ><P
-> While browsing the web with <SPAN
-CLASS="APPLICATION"
->Privoxy</SPAN
-> you
- noticed some ads that sneaked through, but you were too lazy to
- report them through our fine and easy <A
-HREF="contact.html"
->feedback</A
+> Some file types you may not want to filter for various reasons:</P
+><P
+> <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+># Technical documentation is likely to contain strings that might
+# erroneously get altered by the JavaScript-oriented filters:
+#
+.tldp.org
+/(.*/)?selfhtml/
+
+# And this stupid host sends streaming video with a wrong MIME type,
+# so that Privoxy thinks it is getting HTML and starts filtering:
+#
+stupid-server.example.com/</PRE
+></TD
+></TR
+></TABLE
+></P
+><P
+> Example of a simple <A
+HREF="actions-file.html#BLOCK"
+>block</A
+> action. Say you've
+ seen an ad on your favourite page on example.com that you want to get rid of.
+ You have right-clicked the image, selected <SPAN
+CLASS="QUOTE"
+>"copy image location"</SPAN
 >
 >
- system, so you have added them here:</P
+ and pasted the URL below while removing the leading http://, into a 
+ <VAR
+CLASS="LITERAL"
+>{ +block }</VAR
+> section. Note that <VAR
+CLASS="LITERAL"
+>{ +handle-as-image
+ }</VAR
+> need not be specified, since all URLs ending in
+ <VAR
+CLASS="LITERAL"
+>.gif</VAR
+> will be tagged as images by the general rules as set
+ in default.action anyway:</P
 ><P
 > <TABLE
 BORDER="0"
 ><P
 > <TABLE
 BORDER="0"
@@ -4950,40 +5466,75 @@ CLASS="SCREEN"
 HREF="actions-file.html#BLOCK"
 >block</A
 > }
 HREF="actions-file.html#BLOCK"
 >block</A
 > }
-www.a-popular-site.com/some/unobvious/path
+www.example.com/nasty-ads/sponsor.gif
 another.popular.site.net/more/junk/here/</PRE
 ></TD
 ></TR
 ></TABLE
 ></P
 ><P
 another.popular.site.net/more/junk/here/</PRE
 ></TD
 ></TR
 ></TABLE
 ></P
 ><P
-> Note that, assuming the banners in the above example have regular image
- extensions (most do),
- <TT
+> The URLs of dynamically generated banners, especially from large banner
+ farms, often don't use the well-known image file name extensions, which
+ makes it impossible for <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> to guess
+ the file type just by looking at the URL. 
+ You can use the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+<A
-HREF="actions-file.html#HANDLE-AS-IMAGE"
->handle-as-image</A
-></TT
->
- need not be specified, since all URLs ending in these extensions will
- already have been tagged as images in the relevant section of 
- <TT
-CLASS="FILENAME"
->default.action</TT
-> by now.</P
+>+block-as-image</VAR
+> alias defined above for
+ these cases.
+ Note that objects which match this rule but then turn out NOT to be an
+ image are typically rendered as a <SPAN
+CLASS="QUOTE"
+>"broken image"</SPAN
+> icon by the
+ browser. Use cautiously.</P
 ><P
 ><P
-> Then you noticed that the default configuration breaks Forbes Magazine,
+> <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>{ +block-as-image }
+.doubleclick.net
+/Realmedia/ads/
+ar.atwola.com/</PRE
+></TD
+></TR
+></TABLE
+></P
+><P
+> Now you noticed that the default configuration breaks Forbes Magazine,
  but you were too lazy to find out which action is the culprit, and you
  were again too lazy to give <A
 HREF="contact.html"
 >feedback</A
 >, so
  but you were too lazy to find out which action is the culprit, and you
  were again too lazy to give <A
 HREF="contact.html"
 >feedback</A
 >, so
- you just used the <TT
+ you just used the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->fragile</TT
+>fragile</VAR
 > alias on the site, and
 > alias on the site, and
- -- whoa! -- it worked:</P
+ -- <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>whoa!</I
+></SPAN
+> -- it worked. The <VAR
+CLASS="LITERAL"
+>fragile</VAR
+>
+ aliases disables those actions that are most likely to break a site. Also,
+ good for testing purposes to see if it is <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+ that is causing the problem or not.</P
 ><P
 ><TABLE
 BORDER="0"
 ><P
 ><TABLE
 BORDER="0"
@@ -5044,7 +5595,7 @@ CLASS="QUOTE"
 >"fun"</SPAN
 > filtering specified here.</P
 ><P
 >"fun"</SPAN
 > filtering specified here.</P
 ><P
-> Finally, you might think about how your favourite free websites are
+> You might also worry about how your favourite free websites are
  funded, and find that they rely on displaying banner advertisements
  to survive. So you might want to specifically allow banners for those
  sites that you feel provide value to you:</P
  funded, and find that they rely on displaying banner advertisements
  to survive. So you might want to specifically allow banners for those
  sites that you feel provide value to you:</P
@@ -5066,25 +5617,75 @@ CLASS="SCREEN"
 ></TABLE
 >   </P
 ><P
 ></TABLE
 >   </P
 ><P
-> Note that <TT
+> Note that <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->allow-ads</TT
+>allow-ads</VAR
 > has been aliased to 
 > has been aliased to 
- <TT
+ <VAR
 CLASS="LITERAL"
 >-<A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 >-<A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
->
- <TT
+></VAR
+>
+ <VAR
 CLASS="LITERAL"
 >-<A
 HREF="actions-file.html#FILTER-BANNERS-BY-SIZE"
 >filter{banners-by-size}</A
 CLASS="LITERAL"
 >-<A
 HREF="actions-file.html#FILTER-BANNERS-BY-SIZE"
 >filter{banners-by-size}</A
-></TT
->
- above.</P
+></VAR
+>, and 
+ <VAR
+CLASS="LITERAL"
+>-<A
+HREF="actions-file.html#FILTER-BANNERS-BY-LINK"
+>filter{banners-by-link}</A
+></VAR
+> above.</P
+><P
+> <TT
+CLASS="FILENAME"
+>user.action</TT
+> is generally the best place to define
+ exceptions and additions to the default policies of
+ <TT
+CLASS="FILENAME"
+>default.action</TT
+>. Some actions are safe to have their
+ default policies set here though. So let's set a default policy to have a
+ <SPAN
+CLASS="QUOTE"
+>"blank"</SPAN
+> image as opposed to the checkerboard pattern for
+ <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>ALL</I
+></SPAN
+> sites. <SPAN
+CLASS="QUOTE"
+>"/"</SPAN
+> of course matches all URL
+ paths and patterns:</P
+><P
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>{ +<A
+HREF="actions-file.html#SET-IMAGE-BLOCKER"
+>set-image-blocker{blank}</A
+> }
+/ # ALL sites</PRE
+></TD
+></TR
+></TABLE
+></P
 ></DIV
 ></DIV
 ></DIV
 ></DIV
 ></DIV
 ></DIV
index 4a9c95b..8cc189f 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Appendix</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Appendix</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="See Also"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="See Also"
@@ -34,7 +34,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -66,13 +66,17 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="APPENDIX">14. Appendix</H1
+NAME="APPENDIX"
+>14. Appendix</A
+></H1
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
-NAME="REGEX">14.1. Regular Expressions</H2
+NAME="REGEX"
+>14.1. Regular Expressions</A
+></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -131,17 +135,17 @@ CLASS="QUOTE"
 CLASS="COMMAND"
 >dir</B
 > command in DOS. 
 CLASS="COMMAND"
 >dir</B
 > command in DOS. 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->*.*</TT
+>*.*</VAR
 > matches all filenames. The <SPAN
 CLASS="QUOTE"
 >"special"</SPAN
 >
  character here is the asterisk which matches any and all characters. We can be
 > matches all filenames. The <SPAN
 CLASS="QUOTE"
 >"special"</SPAN
 >
  character here is the asterisk which matches any and all characters. We can be
- more specific and use <TT
+ more specific and use <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->?</TT
+>?</VAR
 > to match just individual
  characters. So <SPAN
 CLASS="QUOTE"
 > to match just individual
  characters. So <SPAN
 CLASS="QUOTE"
@@ -424,9 +428,9 @@ CLASS="APPLICATION"
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/.*/banners/.*</TT
+>/.*/banners/.*</VAR
 ></I
 ></SPAN
 > - A  simple example
 ></I
 ></SPAN
 > - A  simple example
@@ -481,9 +485,9 @@ CLASS="QUOTE"
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/.*/adv((er)?ts?|ertis(ing|ements?))?/</TT
+>/.*/adv((er)?ts?|ertis(ing|ements?))?/</VAR
 ></I
 ></SPAN
 > - 
 ></I
 ></SPAN
 > - 
@@ -605,9 +609,9 @@ CLASS="QUOTE"
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
 CLASS="emphasis"
 ><I
 CLASS="EMPHASIS"
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/.*/advert[0-9]+\.(gif|jpe?g)</TT
+>/.*/advert[0-9]+\.(gif|jpe?g)</VAR
 ></I
 ></SPAN
 > - Again 
 ></I
 ></SPAN
 > - Again 
@@ -740,10 +744,12 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN3474">14.2. <SPAN
+NAME="AEN3815"
+>14.2. <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
->'s Internal Pages</H2
+>'s Internal Pages</A
+></H2
 ><P
 > Since <SPAN
 CLASS="APPLICATION"
 ><P
 > Since <SPAN
 CLASS="APPLICATION"
@@ -787,7 +793,9 @@ CLASS="APPLICATION"
    Privoxy main page: 
   </P
 ><A
    Privoxy main page: 
   </P
 ><A
-NAME="AEN3489"><BLOCKQUOTE
+NAME="AEN3830"
+></A
+><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
 ><P
 > 
 CLASS="BLOCKQUOTE"
 ><P
 > 
@@ -818,7 +826,9 @@ CLASS="APPLICATION"
     editing of actions files:
   </P
 ><A
     editing of actions files:
   </P
 ><A
-NAME="AEN3497"><BLOCKQUOTE
+NAME="AEN3838"
+></A
+><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
 ><P
 > 
 CLASS="BLOCKQUOTE"
 ><P
 > 
@@ -836,7 +846,9 @@ TARGET="_top"
     Show the source code version numbers:
   </P
 ><A
     Show the source code version numbers:
   </P
 ><A
-NAME="AEN3502"><BLOCKQUOTE
+NAME="AEN3843"
+></A
+><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
 ><P
 > 
 CLASS="BLOCKQUOTE"
 ><P
 > 
@@ -854,7 +866,9 @@ TARGET="_top"
    Show the browser's request headers:
   </P
 ><A
    Show the browser's request headers:
   </P
 ><A
-NAME="AEN3507"><BLOCKQUOTE
+NAME="AEN3848"
+></A
+><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
 ><P
 > 
 CLASS="BLOCKQUOTE"
 ><P
 > 
@@ -872,7 +886,9 @@ TARGET="_top"
    Show which actions apply to a URL and why:
   </P
 ><A
    Show which actions apply to a URL and why:
   </P
 ><A
-NAME="AEN3512"><BLOCKQUOTE
+NAME="AEN3853"
+></A
+><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
 ><P
 > 
 CLASS="BLOCKQUOTE"
 ><P
 > 
@@ -894,7 +910,9 @@ CLASS="QUOTE"
    to run, but only as a pass-through proxy, with no actions taking place:
   </P
 ><A
    to run, but only as a pass-through proxy, with no actions taking place:
   </P
 ><A
-NAME="AEN3518"><BLOCKQUOTE
+NAME="AEN3859"
+></A
+><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
 ><P
 > 
 CLASS="BLOCKQUOTE"
 ><P
 > 
@@ -909,7 +927,9 @@ TARGET="_top"
 >   Short cuts. Turn off, then on: 
   </P
 ><A
 >   Short cuts. Turn off, then on: 
   </P
 ><A
-NAME="AEN3522"><BLOCKQUOTE
+NAME="AEN3863"
+></A
+><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
 ><P
 > 
 CLASS="BLOCKQUOTE"
 ><P
 > 
@@ -921,7 +941,9 @@ TARGET="_top"
    </P
 ></BLOCKQUOTE
 ><A
    </P
 ></BLOCKQUOTE
 ><A
-NAME="AEN3525"><BLOCKQUOTE
+NAME="AEN3866"
+></A
+><BLOCKQUOTE
 CLASS="BLOCKQUOTE"
 ><P
 > 
 CLASS="BLOCKQUOTE"
 ><P
 > 
@@ -942,7 +964,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="BOOKMARKLETS">14.2.1. Bookmarklets</H3
+NAME="BOOKMARKLETS"
+>14.2.1. Bookmarklets</A
+></H3
 ><P
 > Below are some <SPAN
 CLASS="QUOTE"
 ><P
 > Below are some <SPAN
 CLASS="QUOTE"
@@ -1056,7 +1080,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CHAIN">14.3. Chain of Events</H2
+NAME="CHAIN"
+>14.3. Chain of Events</A
+></H2
 ><P
 > Let's take a quick look at the basic sequence of events when a web page is 
  requested by your browser and <SPAN
 ><P
 > Let's take a quick look at the basic sequence of events when a web page is 
  requested by your browser and <SPAN
@@ -1280,7 +1306,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="ACTIONSANAT">14.4. Anatomy of an Action</H2
+NAME="ACTIONSANAT"
+>14.4. Anatomy of an Action</A
+></H2
 ><P
 > The way <SPAN
 CLASS="APPLICATION"
 ><P
 > The way <SPAN
 CLASS="APPLICATION"
@@ -1791,9 +1819,9 @@ CLASS="SCREEN"
 ></P
 ><P
 > Now the page displays ;-) Be sure to flush your browser's caches when 
 ></P
 ><P
 > Now the page displays ;-) Be sure to flush your browser's caches when 
- making such changes. Or, try using <TT
+ making such changes. Or, try using <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->Shift+Reload</TT
+>Shift+Reload</VAR
 >.</P
 ><P
 > But now what about a situation where we get no explicit matches like 
 >.</P
 ><P
 > But now what about a situation where we get no explicit matches like 
index 06b0042..6e6354c 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >The Main Configuration File</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >The Main Configuration File</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Privoxy Configuration"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Privoxy Configuration"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="CONFIG">7. The Main Configuration File</H1
+NAME="CONFIG"
+>7. The Main Configuration File</A
+></H1
 ><P
 > Again, the main configuration file is named <TT
 CLASS="FILENAME"
 ><P
 > Again, the main configuration file is named <TT
 CLASS="FILENAME"
@@ -87,7 +89,7 @@ CLASS="FILENAME"
  values, all separated by whitespace (any number of spaces or tabs). For
  example:</P
 ><P
  values, all separated by whitespace (any number of spaces or tabs). For
  example:</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -99,29 +101,29 @@ CLASS="EMPHASIS"
 ></SPAN
 ></P
 >
 ></SPAN
 ></P
 >
- </TT
+ </VAR
 > </P
 ><P
 > </P
 ><P
-> Assigns the value <TT
+> Assigns the value <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/etc/privoxy</TT
+>/etc/privoxy</VAR
 > to the option
 > to the option
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->confdir</TT
+>confdir</VAR
 > and thus indicates that the configuration
  directory is named <SPAN
 CLASS="QUOTE"
 >"/etc/privoxy/"</SPAN
 >.</P
 ><P
 > and thus indicates that the configuration
  directory is named <SPAN
 CLASS="QUOTE"
 >"/etc/privoxy/"</SPAN
 >.</P
 ><P
-> All options in the config file except for <TT
+> All options in the config file except for <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->confdir</TT
+>confdir</VAR
 > and
 > and
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->logdir</TT
+>logdir</VAR
 > are optional. Watch out in the below description
  for what happens if you leave them unset.</P
 ><P
 > are optional. Watch out in the below description
  for what happens if you leave them unset.</P
 ><P
@@ -136,7 +138,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONF-LOG-LOC">7.1. Configuration and Log File Locations</H2
+NAME="CONF-LOG-LOC"
+>7.1. Configuration and Log File Locations</A
+></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -160,7 +164,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="CONFDIR">7.1.1. confdir</H4
+NAME="CONFDIR"
+>7.1.1. confdir</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -211,9 +217,9 @@ CLASS="EMPHASIS"
 ><P
 >    No trailing <SPAN
 CLASS="QUOTE"
 ><P
 >    No trailing <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/</TT
+>/</VAR
 >"</SPAN
 >, please
    </P
 >"</SPAN
 >, please
    </P
@@ -242,7 +248,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="LOGDIR">7.1.2. logdir</H4
+NAME="LOGDIR"
+>7.1.2. logdir</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -301,9 +309,9 @@ CLASS="EMPHASIS"
 ><P
 >    No trailing <SPAN
 CLASS="QUOTE"
 ><P
 >    No trailing <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/</TT
+>/</VAR
 >"</SPAN
 >, please
    </P
 >"</SPAN
 >, please
    </P
@@ -316,7 +324,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="ACTIONSFILE">7.1.3. actionsfile</H4
+NAME="ACTIONSFILE"
+>7.1.3. actionsfile</A
+></H4
 ><A
 NAME="DEFAULT.ACTION"
 ></A
 ><A
 NAME="DEFAULT.ACTION"
 ></A
@@ -345,12 +355,12 @@ HREF="actions-file.html"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->File name, relative to <TT
+>File name, relative to <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->confdir</TT
->, without the <TT
+>confdir</VAR
+>, without the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.action</TT
+>.action</VAR
 > suffix</P
 ></DD
 ><DT
 > suffix</P
 ></DD
 ><DT
@@ -401,9 +411,9 @@ CLASS="LITERALLAYOUT"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    Multiple <TT
+>    Multiple <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->actionsfile</TT
+>actionsfile</VAR
 > lines are permitted, and are in fact recommended!
    </P
 ><P
 > lines are permitted, and are in fact recommended!
    </P
 ><P
@@ -438,7 +448,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="FILTERFILE">7.1.4. filterfile</H4
+NAME="FILTERFILE"
+>7.1.4. filterfile</A
+></H4
 ><A
 NAME="DEFAULT.FILTER"
 ></A
 ><A
 NAME="DEFAULT.FILTER"
 ></A
@@ -461,9 +473,9 @@ HREF="filter-file.html"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->File name, relative to <TT
+>File name, relative to <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->confdir</TT
+>confdir</VAR
 ></P
 ></DD
 ><DT
 ></P
 ></DD
 ><DT
@@ -483,17 +495,15 @@ CLASS="EMPHASIS"
 ><DD
 ><P
 >    No textual content filtering takes place, i.e. all
 ><DD
 ><P
 >    No textual content filtering takes place, i.e. all
-    <TT
+    <VAR
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#FILTER"
 >filter</A
->{<TT
+>{<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->}</TT
+>name</VAR
+>}</VAR
 >
     actions in the actions files are turned neutral.
    </P
 >
     actions in the actions files are turned neutral.
    </P
@@ -523,23 +533,19 @@ CLASS="QUOTE"
    </P
 ><P
 >    The
    </P
 ><P
 >    The
-    <TT
+    <VAR
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 >+<A
 HREF="actions-file.html#FILTER"
 >filter</A
->{<TT
+>{<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->}</TT
+>name</VAR
+>}</VAR
 >
 >
-    actions rely on the relevant filter (<TT
+    actions rely on the relevant filter (<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
+>name</VAR
 >)
     to be defined in the filter file!
    </P
 >)
     to be defined in the filter file!
    </P
@@ -549,12 +555,12 @@ CLASS="FILENAME"
 >default.filter</TT
 > that contains
     a bunch of handy filters for common problems is included in the distribution.
 >default.filter</TT
 > that contains
     a bunch of handy filters for common problems is included in the distribution.
-    See the section on the <TT
+    See the section on the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
-></TT
+></VAR
 >
     action for a list.
    </P
 >
     action for a list.
    </P
@@ -567,7 +573,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="LOGFILE">7.1.5. logfile</H4
+NAME="LOGFILE"
+>7.1.5. logfile</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -584,9 +592,9 @@ CLASS="VARIABLELIST"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->File name, relative to <TT
+>File name, relative to <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->logdir</TT
+>logdir</VAR
 ></P
 ></DD
 ><DT
 ></P
 ></DD
 ><DT
@@ -605,9 +613,9 @@ CLASS="EMPHASIS"
 >Effect if unset:</DT
 ><DD
 ><P
 >Effect if unset:</DT
 ><DD
 ><P
->    No log file is used, all log messages go to the console (<TT
+>    No log file is used, all log messages go to the console (<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->STDERR</TT
+>STDERR</VAR
 >).
    </P
 ></DD
 >).
    </P
 ></DD
@@ -615,13 +623,10 @@ CLASS="LITERAL"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    The windows version will additionally log to the console.
-   </P
-><P
 >    The logfile is where all logging and error messages are written. The level
 >    The logfile is where all logging and error messages are written. The level
-    of detail and number of messages are set with the <TT
+    of detail and number of messages are set with the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->debug</TT
+>debug</VAR
 >
     option (see below). The logfile can be useful for tracking down a problem with
     <SPAN
 >
     option (see below). The logfile can be useful for tracking down a problem with
     <SPAN
@@ -673,7 +678,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="JARFILE">7.1.6. jarfile</H4
+NAME="JARFILE"
+>7.1.6. jarfile</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -690,9 +697,9 @@ CLASS="VARIABLELIST"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->File name, relative to <TT
+>File name, relative to <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->logdir</TT
+>logdir</VAR
 ></P
 ></DD
 ><DT
 ></P
 ></DD
 ><DT
@@ -729,7 +736,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="TRUSTFILE">7.1.7. trustfile</H4
+NAME="TRUSTFILE"
+>7.1.7. trustfile</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -746,9 +755,9 @@ CLASS="VARIABLELIST"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->File name, relative to <TT
+>File name, relative to <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->confdir</TT
+>confdir</VAR
 ></P
 ></DD
 ><DT
 ></P
 ></DD
 ><DT
@@ -773,7 +782,7 @@ CLASS="EMPHASIS"
 >Effect if unset:</DT
 ><DD
 ><P
 >Effect if unset:</DT
 ><DD
 ><P
->    The whole trust mechanism is turned off.
+>    The entire trust mechanism is turned off.
    </P
 ></DD
 ><DT
    </P
 ></DD
 ><DT
@@ -794,24 +803,71 @@ CLASS="EMPHASIS"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > will only allow
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > will only allow
-    access to sites that are named in the trustfile. 
-    You can also mark sites as trusted referrers (with <TT
-CLASS="LITERAL"
->+</TT
->), with
-    the effect that access to untrusted sites will be granted, if a link from a
-    trusted referrer was used.
-    The link target will then be added to the <SPAN
+    access to sites that are specified in the trustfile. Sites can be listed 
+    in one of two ways:
+   </P
+><P
+>    Prepending a <VAR
+CLASS="LITERAL"
+>~</VAR
+> character limits access to this site 
+    only (and any sub-paths within this site), e.g. 
+    <VAR
+CLASS="LITERAL"
+>~www.example.com</VAR
+>. 
+   </P
+><P
+>    Or, you can designate sites as <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>trusted referrers</I
+></SPAN
+>, by
+    prepending the name with a <VAR
+CLASS="LITERAL"
+>+</VAR
+> character. The effect is that
+    access to untrusted sites will be granted -- but only if a link from this
+    trusted referrer was used. The link target will then be added to the
+    <SPAN
 CLASS="QUOTE"
 >"trustfile"</SPAN
 CLASS="QUOTE"
 >"trustfile"</SPAN
->.
-    Possible applications include limiting Internet access for children.
+> so that future, direct accesses will be granted.
+    Sites added via this mechanism do not become trusted referrers themselves
+    (i.e. they are added with a <VAR
+CLASS="LITERAL"
+>~</VAR
+> designation).
    </P
 ><P
    </P
 ><P
->    If you use <TT
+>    If you use the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+</TT
-> operator in the trust file, it may grow considerably over time.
+>+</VAR
+> operator in the trust file, it may grow 
+    considerably over time.
+   </P
+><P
+>    It is recommended that <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> be compiled with
+    the <VAR
+CLASS="LITERAL"
+>--disable-force</VAR
+>, <VAR
+CLASS="LITERAL"
+>--disable-toggle</VAR
+> and
+    <VAR
+CLASS="LITERAL"
+> --disable-editor</VAR
+> options, if this feature is to be
+    used.
+   </P
+><P
+>    Possible applications include limiting Internet access for children.
    </P
 ></DD
 ></DL
    </P
 ></DD
 ></DL
@@ -823,7 +879,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="LOCAL-SET-UP">7.2. Local Set-up Documentation</H2
+NAME="LOCAL-SET-UP"
+>7.2. Local Set-up Documentation</A
+></H2
 ><P
 >    If you intend to operate <SPAN
 CLASS="APPLICATION"
 ><P
 >    If you intend to operate <SPAN
 CLASS="APPLICATION"
@@ -837,7 +895,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="USER-MANUAL">7.2.1. user-manual</H4
+NAME="USER-MANUAL"
+>7.2.1. user-manual</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -878,18 +938,14 @@ CLASS="EMPHASIS"
 >    <A
 HREF="http://www.privoxy.org/user-manual/"
 TARGET="_top"
 >    <A
 HREF="http://www.privoxy.org/user-manual/"
 TARGET="_top"
->http://www.privoxy.org/<TT
+>http://www.privoxy.org/<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->version</I
-></TT
+>version</VAR
 >/user-manual/</A
 >
 >/user-manual/</A
 >
-    will be used, where <TT
+    will be used, where <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->version</I
-></TT
+>version</VAR
 > is the <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is the <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -920,7 +976,49 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->user-manual  file:///usr/share/doc/privoxy-3.1.1/user-manual/</PRE
+>  user-manual  file:///usr/share/doc/privoxy-3.0.3/user-manual/</PRE
+></TD
+></TR
+></TABLE
+>
+  </P
+><P
+>   Windows, in local filesystem, <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>must</I
+></SPAN
+> use forward slash notation:
+  </P
+><P
+>   <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="90%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>  user-manual  file:/c:/some-dir/privoxy-3.0.3/user-manual/</PRE
+></TD
+></TR
+></TABLE
+>
+  </P
+><P
+>   Windows, UNC notation (with forward slashes):
+  </P
+><P
+>   <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="90%"
+><TR
+><TD
+><PRE
+CLASS="SCREEN"
+>  user-manual  file://///some-server/some-path/privoxy-3.0.3/user-manual/</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -941,7 +1039,7 @@ WIDTH="90%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
->user-manual  http://local-webserver/privoxy-user-manual/</PRE
+>  user-manual  http://local-webserver/privoxy-user-manual/</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -988,7 +1086,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="TRUST-INFO-URL">7.2.2. trust-info-url</H4
+NAME="TRUST-INFO-URL"
+>7.2.2. trust-info-url</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1054,7 +1154,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="ADMIN-ADDRESS">7.2.3. admin-address</H4
+NAME="ADMIN-ADDRESS"
+>7.2.3. admin-address</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1096,12 +1198,12 @@ CLASS="EMPHASIS"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    If both <TT
+>    If both <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->admin-address</TT
-> and <TT
+>admin-address</VAR
+> and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->proxy-info-url</TT
+>proxy-info-url</VAR
 >
     are unset, the whole "Local Privoxy Support" box on all generated pages will
     not be shown.
 >
     are unset, the whole "Local Privoxy Support" box on all generated pages will
     not be shown.
@@ -1115,7 +1217,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="PROXY-INFO-URL">7.2.4. proxy-info-url</H4
+NAME="PROXY-INFO-URL"
+>7.2.4. proxy-info-url</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1161,12 +1265,12 @@ CLASS="EMPHASIS"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    If both <TT
+>    If both <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->admin-address</TT
-> and <TT
+>admin-address</VAR
+> and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->proxy-info-url</TT
+>proxy-info-url</VAR
 >
     are unset, the whole "Local Privoxy Support" box on all generated pages will
     not be shown.
 >
     are unset, the whole "Local Privoxy Support" box on all generated pages will
     not be shown.
@@ -1184,16 +1288,18 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="DEBUGGING">7.3. Debugging</H2
+NAME="DEBUGGING"
+>7.3. Debugging</A
+></H2
 ><P
 >  These options are mainly useful when tracing a problem.
   Note that you might also want to invoke
   <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 ><P
 >  These options are mainly useful when tracing a problem.
   Note that you might also want to invoke
   <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> with the <TT
+> with the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->--no-daemon</TT
+>--no-daemon</VAR
 >
   command line option when debugging.
  </P
 >
   command line option when debugging.
  </P
@@ -1202,7 +1308,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="DEBUG">7.3.1. debug</H4
+NAME="DEBUG"
+>7.3.1. debug</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1280,9 +1388,9 @@ CLASS="PROGRAMLISTING"
    </P
 ><P
 >    To select multiple debug levels, you can either add them or use
    </P
 ><P
 >    To select multiple debug levels, you can either add them or use
-    multiple <TT
+    multiple <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->debug</TT
+>debug</VAR
 > lines.
    </P
 ><P
 > lines.
    </P
 ><P
@@ -1334,7 +1442,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="SINGLE-THREADED">7.3.2. single-threaded</H4
+NAME="SINGLE-THREADED"
+>7.3.2. single-threaded</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1402,7 +1512,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="ACCESS-CONTROL">7.4. Access Control and Security</H2
+NAME="ACCESS-CONTROL"
+>7.4. Access Control and Security</A
+></H2
 ><P
 >  This section of the config file controls the security-relevant aspects
   of <SPAN
 ><P
 >  This section of the config file controls the security-relevant aspects
   of <SPAN
@@ -1415,7 +1527,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="LISTEN-ADDRESS">7.4.1. listen-address</H4
+NAME="LISTEN-ADDRESS"
+>7.4.1. listen-address</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1436,16 +1550,12 @@ CLASS="APPLICATION"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->[<TT
+>[<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->IP-Address</I
-></TT
->]:<TT
+>IP-Address</VAR
+>]:<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->Port</I
-></TT
+>Port</VAR
 ></P
 ></DD
 ><DT
 ></P
 ></DD
 ><DT
@@ -1494,19 +1604,19 @@ HREF="config.html#ACLS"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > to untrusted users, you will
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > to untrusted users, you will
-    also want to turn off the <TT
+    also want to turn off the <VAR
 CLASS="LITERAL"
 ><A
 HREF="config.html#ENABLE-EDIT-ACTIONS"
 >enable-edit-actions</A
 CLASS="LITERAL"
 ><A
 HREF="config.html#ENABLE-EDIT-ACTIONS"
 >enable-edit-actions</A
-></TT
+></VAR
 > and
 > and
-    <TT
+    <VAR
 CLASS="LITERAL"
 ><A
 HREF="config.html#ENABLE-REMOTE-TOGGLE"
 >enable-remote-toggle</A
 CLASS="LITERAL"
 ><A
 HREF="config.html#ENABLE-REMOTE-TOGGLE"
 >enable-remote-toggle</A
-></TT
+></VAR
 >
     options!
    </P
 >
     options!
    </P
@@ -1547,7 +1657,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="TOGGLE">7.4.2. toggle</H4
+NAME="TOGGLE"
+>7.4.2. toggle</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1592,9 +1704,9 @@ CLASS="QUOTE"
 >"toggled off"</SPAN
 > mode, i.e. behave like a normal, content-neutral
     proxy where all ad blocking, filtering, etc are disabled. See
 >"toggled off"</SPAN
 > mode, i.e. behave like a normal, content-neutral
     proxy where all ad blocking, filtering, etc are disabled. See
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->enable-remote-toggle</TT
+>enable-remote-toggle</VAR
 > below. This is not really useful
     anymore, since toggling is much easier via <A
 HREF="http://config.privoxy.org/toggle"
 > below. This is not really useful
     anymore, since toggling is much easier via <A
 HREF="http://config.privoxy.org/toggle"
@@ -1619,7 +1731,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="ENABLE-REMOTE-TOGGLE">7.4.3. enable-remote-toggle</H4
+NAME="ENABLE-REMOTE-TOGGLE"
+>7.4.3. enable-remote-toggle</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1686,9 +1800,9 @@ CLASS="APPLICATION"
     <SPAN
 CLASS="QUOTE"
 >"ACLs"</SPAN
     <SPAN
 CLASS="QUOTE"
 >"ACLs"</SPAN
-> and <TT
+> and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->listen-address</TT
+>listen-address</VAR
 > above) can
     toggle it for all users. So this option is <SPAN
 CLASS="emphasis"
 > above) can
     toggle it for all users. So this option is <SPAN
 CLASS="emphasis"
@@ -1715,7 +1829,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="ENABLE-EDIT-ACTIONS">7.4.4. enable-edit-actions</H4
+NAME="ENABLE-EDIT-ACTIONS"
+>7.4.4. enable-edit-actions</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -1774,9 +1890,9 @@ CLASS="APPLICATION"
     <SPAN
 CLASS="QUOTE"
 >"ACLs"</SPAN
     <SPAN
 CLASS="QUOTE"
 >"ACLs"</SPAN
-> and <TT
+> and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->listen-address</TT
+>listen-address</VAR
 > above) can
     modify its configuration for all users. So this option is <SPAN
 CLASS="emphasis"
 > above) can
     modify its configuration for all users. So this option is <SPAN
 CLASS="emphasis"
@@ -1803,7 +1919,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="ACLS">7.4.5. ACLs: permit-access and deny-access</H4
+NAME="ACLS"
+>7.4.5. ACLs: permit-access and deny-access</A
+></H4
 ><A
 NAME="PERMIT-ACCESS"
 ></A
 ><A
 NAME="PERMIT-ACCESS"
 ></A
@@ -1826,53 +1944,37 @@ CLASS="VARIABLELIST"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->    <TT
+>    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->src_addr</I
-></TT
->[/<TT
+>src_addr</VAR
+>[/<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->src_masklen</I
-></TT
+>src_masklen</VAR
 >]
 >]
-    [<TT
+    [<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dst_addr</I
-></TT
->[/<TT
+>dst_addr</VAR
+>[/<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dst_masklen</I
-></TT
+>dst_masklen</VAR
 >]]
    </P
 ><P
 >]]
    </P
 ><P
->    Where <TT
+>    Where <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->src_addr</I
-></TT
+>src_addr</VAR
 > and 
 > and 
-   <TT
+   <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dst_addr</I
-></TT
+>dst_addr</VAR
 > are IP addresses in dotted decimal notation or valid
 > are IP addresses in dotted decimal notation or valid
-    DNS names, and <TT
+    DNS names, and <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->src_masklen</I
-></TT
+>src_masklen</VAR
 > and
 > and
-    <TT
+    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dst_masklen</I
-></TT
+>dst_masklen</VAR
 > are subnet masks in CIDR notation, i.e. integer
     values from 2 to 30 representing the length (in bits) of the network address. The masks and the whole
     destination part are optional.
 > are subnet masks in CIDR notation, i.e. integer
     values from 2 to 30 representing the length (in bits) of the network address. The masks and the whole
     destination part are optional.
@@ -1894,9 +1996,9 @@ CLASS="EMPHASIS"
 >Effect if unset:</DT
 ><DD
 ><P
 >Effect if unset:</DT
 ><DD
 ><P
->    Don't restrict access further than implied by <TT
+>    Don't restrict access further than implied by <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->listen-address</TT
+>listen-address</VAR
 >
    </P
 ></DD
 >
    </P
 ></DD
@@ -1941,32 +2043,30 @@ CLASS="EMPHASIS"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >
-    talks only to IP addresses that match at least one <TT
+    talks only to IP addresses that match at least one <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->permit-access</TT
+>permit-access</VAR
 > line
 > line
-    and don't match any subsequent <TT
+    and don't match any subsequent <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->deny-access</TT
+>deny-access</VAR
 > line. In other words, the
 > line. In other words, the
-    last match wins, with the default being <TT
+    last match wins, with the default being <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->deny-access</TT
+>deny-access</VAR
 >.
    </P
 ><P
 >    If <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >.
    </P
 ><P
 >    If <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> is using a forwarder (see <TT
+> is using a forwarder (see <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->forward</TT
+>forward</VAR
 > below)
 > below)
-    for a particular destination URL, the <TT
+    for a particular destination URL, the <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dst_addr</I
-></TT
+>dst_addr</VAR
 >
     that is examined is the address of the forwarder and <SPAN
 CLASS="emphasis"
 >
     that is examined is the address of the forwarder and <SPAN
 CLASS="emphasis"
@@ -2007,18 +2107,16 @@ CLASS="QUOTE"
 ><DD
 ><P
 >    Explicitly define the default behavior if no ACL and
 ><DD
 ><P
 >    Explicitly define the default behavior if no ACL and
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->listen-address</TT
+>listen-address</VAR
 > are set: <SPAN
 CLASS="QUOTE"
 >"localhost"</SPAN
 >
 > are set: <SPAN
 CLASS="QUOTE"
 >"localhost"</SPAN
 >
-    is OK. The absence of a <TT
+    is OK. The absence of a <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->dst_addr</I
-></TT
+>dst_addr</VAR
 > implies that
     <SPAN
 CLASS="emphasis"
 > implies that
     <SPAN
 CLASS="emphasis"
@@ -2091,7 +2189,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="BUFFER-LIMIT">7.4.6. buffer-limit</H4
+NAME="BUFFER-LIMIT"
+>7.4.6. buffer-limit</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -2127,13 +2227,13 @@ CLASS="VARIABLELIST"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    For content filtering, i.e. the <TT
+>    For content filtering, i.e. the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+filter</TT
+>+filter</VAR
 > and
 > and
-    <TT
+    <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->+deanimate-gif</TT
+>+deanimate-gif</VAR
 > actions, it is necessary that 
     <SPAN
 CLASS="APPLICATION"
 > actions, it is necessary that 
     <SPAN
 CLASS="APPLICATION"
@@ -2144,15 +2244,15 @@ CLASS="APPLICATION"
     Hence this option.
    </P
 ><P
     Hence this option.
    </P
 ><P
->    When a document buffer size reaches the <TT
+>    When a document buffer size reaches the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->buffer-limit</TT
+>buffer-limit</VAR
 >, it is
     flushed to the client unfiltered and no further attempt to
     filter the rest of the document is made. Remember that there may be multiple threads
 >, it is
     flushed to the client unfiltered and no further attempt to
     filter the rest of the document is made. Remember that there may be multiple threads
-    running, which might require up to <TT
+    running, which might require up to <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->buffer-limit</TT
+>buffer-limit</VAR
 > Kbytes
     <SPAN
 CLASS="emphasis"
 > Kbytes
     <SPAN
 CLASS="emphasis"
@@ -2176,7 +2276,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="FORWARDING">7.5. Forwarding</H2
+NAME="FORWARDING"
+>7.5. Forwarding</A
+></H2
 ><P
 > This feature allows routing of HTTP requests through a chain of
  multiple proxies.
 ><P
 > This feature allows routing of HTTP requests through a chain of
  multiple proxies.
@@ -2204,7 +2306,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="FORWARD">7.5.1. forward</H4
+NAME="FORWARD"
+>7.5.1. forward</A
+></H4
 ><P
 ></P
 ><DIV
 ><P
 ></P
 ><DIV
@@ -2221,58 +2325,46 @@ CLASS="VARIABLELIST"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->    <TT
+>    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->target_pattern</I
-></TT
+>target_pattern</VAR
 >
 >
-    <TT
+    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->http_parent</I
-></TT
->[:<TT
+>http_parent</VAR
+>[:<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->port</I
-></TT
+>port</VAR
 >]
    </P
 ><P
 >]
    </P
 ><P
->    where <TT
+>    where <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->target_pattern</I
-></TT
+>target_pattern</VAR
 > is a <A
 HREF="actions-file.html#AF-PATTERNS"
 >URL pattern</A
 > 
 > is a <A
 HREF="actions-file.html#AF-PATTERNS"
 >URL pattern</A
 > 
-    that specifies to which requests (i.e. URLs) this forward rule shall apply. Use <TT
+    that specifies to which requests (i.e. URLs) this forward rule shall apply. Use <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/</TT
+>/</VAR
 > to
     denote <SPAN
 CLASS="QUOTE"
 >"all URLs"</SPAN
 >.
 > to
     denote <SPAN
 CLASS="QUOTE"
 >"all URLs"</SPAN
 >.
-    <TT
+    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->http_parent</I
-></TT
->[:<TT
+>http_parent</VAR
+>[:<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->port</I
-></TT
+>port</VAR
 >]
     is the DNS name or IP address of the parent HTTP proxy through which the requests should be forwarded,
     optionally followed by its listening port (default: 8080).
 >]
     is the DNS name or IP address of the parent HTTP proxy through which the requests should be forwarded,
     optionally followed by its listening port (default: 8080).
-    Use a single dot (<TT
+    Use a single dot (<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.</TT
+>.</VAR
 >) to denote <SPAN
 CLASS="QUOTE"
 >"no forwarding"</SPAN
 >) to denote <SPAN
 CLASS="QUOTE"
 >"no forwarding"</SPAN
@@ -2302,11 +2394,9 @@ CLASS="EMPHASIS"
 >Notes:</DT
 ><DD
 ><P
 >Notes:</DT
 ><DD
 ><P
->    If <TT
+>    If <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->http_parent</I
-></TT
+>http_parent</VAR
 > is <SPAN
 CLASS="QUOTE"
 >"."</SPAN
 > is <SPAN
 CLASS="QUOTE"
 >"."</SPAN
@@ -2368,7 +2458,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="SOCKS">7.5.2. forward-socks4 and forward-socks4a</H4
+NAME="SOCKS"
+>7.5.2. forward-socks4 and forward-socks4a</A
+></H4
 ><A
 NAME="FORWARD-SOCKS4"
 ></A
 ><A
 NAME="FORWARD-SOCKS4"
 ></A
@@ -2391,69 +2483,51 @@ CLASS="VARIABLELIST"
 >Type of value:</DT
 ><DD
 ><P
 >Type of value:</DT
 ><DD
 ><P
->    <TT
+>    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->target_pattern</I
-></TT
+>target_pattern</VAR
 >
 >
-    <TT
+    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->socks_proxy</I
-></TT
->[:<TT
+>socks_proxy</VAR
+>[:<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->port</I
-></TT
+>port</VAR
 >]
 >]
-    <TT
+    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->http_parent</I
-></TT
->[:<TT
+>http_parent</VAR
+>[:<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->port</I
-></TT
+>port</VAR
 >]
    </P
 ><P
 >]
    </P
 ><P
->    where <TT
+>    where <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->target_pattern</I
-></TT
+>target_pattern</VAR
 > is a <A
 HREF="actions-file.html#AF-PATTERNS"
 >URL pattern</A
 > 
 > is a <A
 HREF="actions-file.html#AF-PATTERNS"
 >URL pattern</A
 > 
-    that specifies to which requests (i.e. URLs) this forward rule shall apply. Use <TT
+    that specifies to which requests (i.e. URLs) this forward rule shall apply. Use <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/</TT
+>/</VAR
 > to
     denote <SPAN
 CLASS="QUOTE"
 >"all URLs"</SPAN
 >.
 > to
     denote <SPAN
 CLASS="QUOTE"
 >"all URLs"</SPAN
 >.
-    <TT
+    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->http_parent</I
-></TT
-> and <TT
+>http_parent</VAR
+> and <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->socks_proxy</I
-></TT
+>socks_proxy</VAR
 >
 >
-    are IP addresses in dotted decimal notation or valid DNS names (<TT
+    are IP addresses in dotted decimal notation or valid DNS names (<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->http_parent</I
-></TT
+>http_parent</VAR
 >
     may be <SPAN
 CLASS="QUOTE"
 >
     may be <SPAN
 CLASS="QUOTE"
@@ -2462,11 +2536,9 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"no HTTP forwarding"</SPAN
 >), and the optional 
 CLASS="QUOTE"
 >"no HTTP forwarding"</SPAN
 >), and the optional 
-    <TT
+    <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->port</I
-></TT
+>port</VAR
 > parameters are TCP ports, i.e. integer values from 1 to 64535
    </P
 ></DD
 > parameters are TCP ports, i.e. integer values from 1 to 64535
    </P
 ></DD
@@ -2496,22 +2568,20 @@ CLASS="EMPHASIS"
 >    Multiple lines are OK, they are checked in sequence, and the last match wins.
    </P
 ><P
 >    Multiple lines are OK, they are checked in sequence, and the last match wins.
    </P
 ><P
->    The difference between <TT
+>    The difference between <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->forward-socks4</TT
-> and <TT
+>forward-socks4</VAR
+> and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->forward-socks4a</TT
+>forward-socks4a</VAR
 >
     is that in the SOCKS 4A protocol, the DNS resolution of the target hostname happens on the SOCKS
     server, while in SOCKS 4 it happens locally.
    </P
 ><P
 >
     is that in the SOCKS 4A protocol, the DNS resolution of the target hostname happens on the SOCKS
     server, while in SOCKS 4 it happens locally.
    </P
 ><P
->    If <TT
+>    If <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->http_parent</I
-></TT
+>http_parent</VAR
 > is <SPAN
 CLASS="QUOTE"
 >"."</SPAN
 > is <SPAN
 CLASS="QUOTE"
 >"."</SPAN
@@ -2575,7 +2645,9 @@ CLASS="SECT3"
 ><H4
 CLASS="SECT3"
 ><A
 ><H4
 CLASS="SECT3"
 ><A
-NAME="ADVANCED-FORWARDING-EXAMPLES">7.5.3. Advanced Forwarding Examples</H4
+NAME="ADVANCED-FORWARDING-EXAMPLES"
+>7.5.3. Advanced Forwarding Examples</A
+></H4
 ><P
 > If you have links to multiple ISPs that provide various special content 
  only to their subscribers, you can configure multiple <SPAN
 ><P
 > If you have links to multiple ISPs that provide various special content 
  only to their subscribers, you can configure multiple <SPAN
@@ -2644,9 +2716,9 @@ CLASS="APPLICATION"
 CLASS="APPLICATION"
 >squid</SPAN
 > locally, then chain as 
 CLASS="APPLICATION"
 >squid</SPAN
 > locally, then chain as 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->browser -&#62; squid -&#62; privoxy</TT
+>browser -&#62; squid -&#62; privoxy</VAR
 > is the recommended way. </P
 ><P
 > Assuming that <SPAN
 > is the recommended way. </P
 ><P
 > Assuming that <SPAN
@@ -2689,18 +2761,18 @@ CLASS="SCREEN"
 CLASS="APPLICATION"
 >squid</SPAN
 >'s address and port.
 CLASS="APPLICATION"
 >squid</SPAN
 >'s address and port.
- Squid normally uses port 3128. If unsure consult <TT
+ Squid normally uses port 3128. If unsure consult <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->http_port</TT
+>http_port</VAR
 > in <TT
 CLASS="FILENAME"
 >squid.conf</TT
 >.</P
 ><P
 > You could just as well decide to only forward requests for Windows executables through
 > in <TT
 CLASS="FILENAME"
 >squid.conf</TT
 >.</P
 ><P
 > You could just as well decide to only forward requests for Windows executables through
- a virus-scanning parent proxy, say, on <TT
+ a virus-scanning parent proxy, say, on <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->antivir.example.com</TT
+>antivir.example.com</VAR
 >, port 8010:</P
 ><P
 > <TABLE
 >, port 8010:</P
 ><P
 > <TABLE
@@ -2724,7 +2796,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="WINDOWS-GUI">7.6. Windows GUI Options</H2
+NAME="WINDOWS-GUI"
+>7.6. Windows GUI Options</A
+></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -2748,7 +2822,7 @@ CLASS="QUOTE"
 >"Privoxy"</SPAN
 > is active. To turn off, set to 0.</P
 ><P
 >"Privoxy"</SPAN
 > is active. To turn off, set to 0.</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2761,7 +2835,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="LOG-MESSAGES"
 ></P
 ><A
 NAME="LOG-MESSAGES"
@@ -2777,7 +2851,7 @@ CLASS="APPLICATION"
 > will log messages to the console
  window:</P
 ><P
 > will log messages to the console
  window:</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2790,7 +2864,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="LOG-BUFFER-SIZE"
 ></P
 ><A
 NAME="LOG-BUFFER-SIZE"
@@ -2810,7 +2884,7 @@ CLASS="QUOTE"
 > Warning: Setting this to 0 will result in the buffer to grow infinitely and
  eat up all your memory!</P
 ><P
 > Warning: Setting this to 0 will result in the buffer to grow infinitely and
  eat up all your memory!</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2823,7 +2897,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="LOG-MAX-LINES"
 ></P
 ><A
 NAME="LOG-MAX-LINES"
@@ -2835,7 +2909,7 @@ CLASS="APPLICATION"
 > is the maximum number of lines held
  in the log buffer. See above.</P
 ><P
 > is the maximum number of lines held
  in the log buffer. See above.</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2848,7 +2922,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="LOG-HIGHLIGHT-MESSAGES"
 ></P
 ><A
 NAME="LOG-HIGHLIGHT-MESSAGES"
@@ -2864,7 +2938,7 @@ CLASS="APPLICATION"
 > will highlight portions of the log
  messages with a bold-faced font:</P
 ><P
 > will highlight portions of the log
  messages with a bold-faced font:</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2877,7 +2951,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="LOG-FONT-NAME"
 ></P
 ><A
 NAME="LOG-FONT-NAME"
@@ -2885,7 +2959,7 @@ NAME="LOG-FONT-NAME"
 ><P
 > The font used in the console window:</P
 ><P
 ><P
 > The font used in the console window:</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2898,7 +2972,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="LOG-FONT-SIZE"
 ></P
 ><A
 NAME="LOG-FONT-SIZE"
@@ -2906,7 +2980,7 @@ NAME="LOG-FONT-SIZE"
 ><P
 > Font size used in the console window:</P
 ><P
 ><P
 > Font size used in the console window:</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2919,7 +2993,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="SHOW-ON-TASK-BAR"
 ></P
 ><A
 NAME="SHOW-ON-TASK-BAR"
@@ -2936,7 +3010,7 @@ CLASS="APPLICATION"
 > will appear as a button on the Task bar
  when minimized:</P
 ><P
 > will appear as a button on the Task bar
  when minimized:</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2949,7 +3023,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="CLOSE-BUTTON-MINIMIZES"
 ></P
 ><A
 NAME="CLOSE-BUTTON-MINIMIZES"
@@ -2965,7 +3039,7 @@ CLASS="APPLICATION"
 > instead of closing
  the program (close with the exit option on the File menu).</P
 ><P
 > instead of closing
  the program (close with the exit option on the File menu).</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -2978,7 +3052,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ><A
 NAME="HIDE-CONSOLE"
 ></P
 ><A
 NAME="HIDE-CONSOLE"
@@ -2998,7 +3072,7 @@ CLASS="APPLICATION"
 > will disconnect from and hide  the
  command console.</P
 ><P
 > will disconnect from and hide  the
  command console.</P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
 CLASS="LITERAL"
 >  <P
 CLASS="LITERALLAYOUT"
@@ -3011,7 +3085,7 @@ CLASS="EMPHASIS"
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
 ><br>
 &nbsp;&nbsp;&nbsp;</P
 > 
- </TT
+ </VAR
 ></P
 ></DIV
 ></DIV
 ></P
 ></DIV
 ></DIV
index 0c039ea..60d38cf 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Configuration</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Configuration</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Starting Privoxy"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Starting Privoxy"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,10 +73,12 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="CONFIGURATION">6. <SPAN
+NAME="CONFIGURATION"
+>6. <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> Configuration</H1
+> Configuration</A
+></H1
 ><P
 >  All <SPAN
 CLASS="APPLICATION"
 ><P
 >  All <SPAN
 CLASS="APPLICATION"
@@ -94,10 +96,12 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN582">6.1. Controlling <SPAN
+NAME="AEN585"
+>6.1. Controlling <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> with Your Web Browser</H2
+> with Your Web Browser</A
+></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -126,7 +130,9 @@ CLASS="SCREEN"
 > <H2
 CLASS="BRIDGEHEAD"
 ><A
 > <H2
 CLASS="BRIDGEHEAD"
 ><A
-NAME="AEN591">    Privoxy Menu</H2
+NAME="AEN594"
+></A
+>    Privoxy Menu</H2
 ><P
 ></P
 ><TABLE
 ><P
 ></P
 ><TABLE
@@ -180,7 +186,7 @@ TARGET="_top"
 ><TR
 ><TD
 >          &#9642;  <A
 ><TR
 ><TD
 >          &#9642;  <A
-HREF="http://www.privoxy.org/3.1.1/user-manual/"
+HREF="http://www.privoxy.org/3.0.3/user-manual/"
 TARGET="_top"
 >Documentation</A
 >
 TARGET="_top"
 >Documentation</A
 >
@@ -244,7 +250,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONFOVERVIEW">6.2. Configuration Files Overview</H2
+NAME="CONFOVERVIEW"
+>6.2. Configuration Files Overview</A
+></H2
 ><P
 > For Unix, *BSD and Linux, all configuration files are located in
  <TT
 ><P
 > For Unix, *BSD and Linux, all configuration files are located in
  <TT
@@ -255,9 +263,7 @@ CLASS="FILENAME"
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> executable.  The name
- and number of configuration files has changed from previous versions, and is
- subject to change as development progresses.</P
+> executable. </P
 ><P
 > The installed defaults provide a reasonable starting point, though 
  some settings may be aggressive by some standards. For the time being, the
 ><P
 > The installed defaults provide a reasonable starting point, though 
  some settings may be aggressive by some standards. For the time being, the
@@ -356,7 +362,8 @@ HREF="filter-file.html"
 >) can be used to re-write the raw page content, including
     viewable text as well as embedded HTML and JavaScript, and whatever else
     lurks on any given web page. The filtering jobs are only pre-defined here;
 >) can be used to re-write the raw page content, including
     viewable text as well as embedded HTML and JavaScript, and whatever else
     lurks on any given web page. The filtering jobs are only pre-defined here;
-    whether to apply them or not is up to the actions files.
+    whether to apply them or not is up to the actions files. Only one filter 
+    file may be defined.
    </P
 ></LI
 ></UL
    </P
 ></LI
 ></UL
@@ -364,23 +371,23 @@ HREF="filter-file.html"
 ><P
 > All files use the <SPAN
 CLASS="QUOTE"
 ><P
 > All files use the <SPAN
 CLASS="QUOTE"
->"<TT
+>"<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->#</TT
+>#</VAR
 >"</SPAN
 > character to denote a
  comment (the rest of the line will be ignored) and understand line continuation
 >"</SPAN
 > character to denote a
  comment (the rest of the line will be ignored) and understand line continuation
- through placing a backslash ("<TT
+ through placing a backslash ("<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->\</TT
+>\</VAR
 >") as the very last character
 >") as the very last character
- in a line. If the <TT
+ in a line. If the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->#</TT
+>#</VAR
 > is preceded by a backslash, it looses
 > is preceded by a backslash, it looses
- its special function. Placing a <TT
+ its special function. Placing a <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->#</TT
+>#</VAR
 > in front of an otherwise
  valid configuration line to prevent it from being interpreted is called "commenting
  out" that line.</P
 > in front of an otherwise
  valid configuration line to prevent it from being interpreted is called "commenting
  out" that line.</P
@@ -420,14 +427,6 @@ CLASS="EMPHASIS"
 >old</I
 ></SPAN
 > listening address.</P
 >old</I
 ></SPAN
 > listening address.</P
-><P
-> While under development, the configuration content is subject to change. 
- The below documentation may not be accurate by the time you read this. 
- Also, what constitutes a <SPAN
-CLASS="QUOTE"
->"default"</SPAN
-> setting, may change, so 
- please check all your configuration files on important issues.</P
 ></DIV
 ></DIV
 ><DIV
 ></DIV
 ></DIV
 ><DIV
index 173ff3e..f139b22 100644 (file)
@@ -1,3 +1,4 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 <HTML
 ><HEAD
 ><TITLE
@@ -5,10 +6,9 @@
 Requests</TITLE
 ><META
 NAME="GENERATOR"
 Requests</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Templates"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Templates"
@@ -38,7 +38,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -74,8 +74,10 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="CONTACT">11. Contacting the Developers, Bug Reporting and Feature
-Requests</H1
+NAME="CONTACT"
+>11. Contacting the Developers, Bug Reporting and Feature
+Requests</A
+></H1
 ><P
 > We value your feedback. In fact, we rely on it to improve
  <SPAN
 ><P
 > We value your feedback. In fact, we rely on it to improve
  <SPAN
@@ -89,13 +91,15 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-SUPPORT">11.1. Get Support</H2
+NAME="CONTACT-SUPPORT"
+>11.1. Get Support</A
+></H2
 ><P
 ><P
-> For casual users, our support forum at
+> For casual users, our 
  <A
  <A
-HREF="http://sourceforge.net/"
+HREF="http://sourceforge.net/tracker/?group_id=11118&atid=211118"
 TARGET="_top"
 TARGET="_top"
->SourceForge</A
+>support forum at SourceForge</A
 >
  is probably best suited:
  <A
 >
  is probably best suited:
  <A
@@ -116,7 +120,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-BUGS">11.2. Report Bugs</H2
+NAME="CONTACT-BUGS"
+>11.2. Report Bugs</A
+></H2
 ><P
 > Please report all bugs <SPAN
 CLASS="emphasis"
 ><P
 > Please report all bugs <SPAN
 CLASS="emphasis"
@@ -179,7 +185,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-FEATURE">11.3. Request New Features</H2
+NAME="CONTACT-FEATURE"
+>11.3. Request New Features</A
+></H2
 ><P
 > You are welcome to submit ideas on new features or other proposals
  for improvement through our feature request tracker at
 ><P
 > You are welcome to submit ideas on new features or other proposals
  for improvement through our feature request tracker at
@@ -194,7 +202,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-ADS">11.4. Report Ads or Other Actions-Related Problems</H2
+NAME="CONTACT-ADS"
+>11.4. Report Ads or Other Actions-Related Problems</A
+></H2
 ><P
 > Please send feedback on ads that slipped through, innocent images that were blocked,
  and any other problems relating to the <TT
 ><P
 > Please send feedback on ads that slipped through, innocent images that were blocked,
  and any other problems relating to the <TT
@@ -235,7 +245,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CONTACT-OTHER">11.5. Other</H2
+NAME="CONTACT-OTHER"
+>11.5. Other</A
+></H2
 ><P
 >For any other issues, feel free to use the mailing lists. Technically interested users
 and people who wish to contribute to the project are also welcome on the developers list!
 ><P
 >For any other issues, feel free to use the mailing lists. Technically interested users
 and people who wish to contribute to the project are also welcome on the developers list!
index ee55094..3e0331d 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Copyright, License and History</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Privoxy Copyright, License and History</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Contacting the Developers, Bug Reporting and Feature
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Contacting the Developers, Bug Reporting and Feature
@@ -38,7 +38,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -74,17 +74,19 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="COPYRIGHT">12. <SPAN
+NAME="COPYRIGHT"
+>12. <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> Copyright, License and History</H1
+> Copyright, License and History</A
+></H1
 ><P
 ><P
-> Copyright © 2001, 2002 by Privoxy Developers <TT
+> Copyright © 2001 - 2004 by Privoxy Developers <CODE
 CLASS="EMAIL"
 >&#60;<A
 HREF="mailto:developers@privoxy.org"
 >developers@privoxy.org</A
 CLASS="EMAIL"
 >&#60;<A
 HREF="mailto:developers@privoxy.org"
 >developers@privoxy.org</A
->&#62;</TT
+>&#62;</CODE
 ></P
 ><P
 > Some source code is based on code Copyright © 1997 by Anonymous Coders
 ></P
 ><P
 > Some source code is based on code Copyright © 1997 by Anonymous Coders
@@ -98,7 +100,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN3220">12.1. License</H2
+NAME="AEN3561"
+>12.1. License</A
+></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -158,7 +162,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="HISTORY">12.2. History</H2
+NAME="HISTORY"
+>12.2. History</A
+></H2
 ><P
 > In the beginning, there was the
  <A
 ><P
 > In the beginning, there was the
  <A
@@ -235,7 +241,7 @@ TARGET="_top"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, whose first
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >, whose first
- stable release, 3.0, was released August, 2002. 
+ stable version, 3.0, was released August, 2002. 
  </P
 ></DIV
 ><DIV
  </P
 ></DIV
 ><DIV
@@ -243,34 +249,42 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AUTHORS">12.3. Authors</H2
+NAME="AUTHORS"
+>12.3. Authors</A
+></H2
 ><P
 ><P
-> Current Project Developers:</P
+> Current Developement Team:</P
 ><P
 CLASS="LITERALLAYOUT"
 ><P
 CLASS="LITERALLAYOUT"
->&nbsp;Jon&nbsp;Foster<br>
+>&nbsp;Hal&nbsp;Burgiss&nbsp;(docs)<br>
 &nbsp;Andreas&nbsp;Oesterhelt<br>
 &nbsp;Andreas&nbsp;Oesterhelt<br>
-&nbsp;Stefan&nbsp;Waldherr<br>
-&nbsp;<br>
-&nbsp;Thomas&nbsp;Steudten<br>
-&nbsp;Rodney&nbsp;Stromlund</P
+&nbsp;David&nbsp;Schmidt&nbsp;(OS/2,&nbsp;Mac&nbsp;OSX&nbsp;ports)<br>
+&nbsp;<br>&#13;</P
 ><P
 ><P
-> Current Project Contributors:</P
+> Current and Former Project Contributors:</P
 ><P
 CLASS="LITERALLAYOUT"
 ><P
 CLASS="LITERALLAYOUT"
->&nbsp;Rodrigo&nbsp;Barbosa&nbsp;(RPM&nbsp;specfiles)<br>
+>&nbsp;Johny&nbsp;Agotnes&nbsp;<br>
+&nbsp;Rodrigo&nbsp;Barbosa&nbsp;(RPM&nbsp;specfiles)<br>
 &nbsp;Moritz&nbsp;Barsnick<br>
 &nbsp;Moritz&nbsp;Barsnick<br>
-&nbsp;Hal&nbsp;Burgiss&nbsp;(docs)<br>
+&nbsp;Brian&nbsp;Dessent<br>
+&nbsp;Mattes&nbsp;Dolak&nbsp;<br>
+&nbsp;Jon&nbsp;Foster<br>
 &nbsp;Karsten&nbsp;Hopp&nbsp;(Red&nbsp;Hat)<br>
 &nbsp;Alexander&nbsp;Lazic<br>
 &nbsp;Karsten&nbsp;Hopp&nbsp;(Red&nbsp;Hat)<br>
 &nbsp;Alexander&nbsp;Lazic<br>
+&nbsp;Daniel&nbsp;Leite<br>
 &nbsp;Gábor&nbsp;Lipták<br>
 &nbsp;Gábor&nbsp;Lipták<br>
-&nbsp;Guy<br>
+&nbsp;Adam&nbsp;Lock&nbsp;(Win32)<br>
+&nbsp;Guy&nbsp;Laroche<br>
 &nbsp;Haroon&nbsp;Rafique<br>
 &nbsp;Roland&nbsp;Rosenfeld&nbsp;(Debian)<br>
 &nbsp;Georg&nbsp;Sauthoff&nbsp;(Gentoo)<br>
 &nbsp;Haroon&nbsp;Rafique<br>
 &nbsp;Roland&nbsp;Rosenfeld&nbsp;(Debian)<br>
 &nbsp;Georg&nbsp;Sauthoff&nbsp;(Gentoo)<br>
-&nbsp;David&nbsp;Schmidt&nbsp;(OS/2,&nbsp;Mac&nbsp;OSX&nbsp;ports)<br>
+&nbsp;Thomas&nbsp;Steudten<br>
 &nbsp;Joerg&nbsp;Strohmayer&nbsp;(Amiga)<br>
 &nbsp;Joerg&nbsp;Strohmayer&nbsp;(Amiga)<br>
-&nbsp;Sarantis&nbsp;Paskalis</P
+&nbsp;Rodney&nbsp;Stromlund<br>
+&nbsp;Sviatoslav&nbsp;Sviridov<br>
+&nbsp;Sarantis&nbsp;Paskalis<br>
+&nbsp;Stefan&nbsp;Waldherr</P
 ><P
 > Based in part on code originally developed by:</P
 ><P
 ><P
 > Based in part on code originally developed by:</P
 ><P
@@ -288,12 +302,14 @@ CLASS="LITERALLAYOUT"
 &nbsp;Andrew&nbsp;J.&nbsp;Caines<br>
 &nbsp;Clifford&nbsp;Caoile<br>
 &nbsp;Michael&nbsp;T.&nbsp;Davis<br>
 &nbsp;Andrew&nbsp;J.&nbsp;Caines<br>
 &nbsp;Clifford&nbsp;Caoile<br>
 &nbsp;Michael&nbsp;T.&nbsp;Davis<br>
+&nbsp;Brian&nbsp;Dessent<br>
 &nbsp;Peter&nbsp;E<br>
 &nbsp;Aaron&nbsp;Hamid<br>
 &nbsp;Magnus&nbsp;Holmgren<br>
 &nbsp;Peter&nbsp;E<br>
 &nbsp;Aaron&nbsp;Hamid<br>
 &nbsp;Magnus&nbsp;Holmgren<br>
-&nbsp;Daniel&nbsp;Leite<br>
+&nbsp;Don&nbsp;Libes&nbsp;&nbsp;<br>
 &nbsp;Paul&nbsp;Lieverse<br>
 &nbsp;David&nbsp;Mediavilla&nbsp;<br>
 &nbsp;Paul&nbsp;Lieverse<br>
 &nbsp;David&nbsp;Mediavilla&nbsp;<br>
+&nbsp;Oliver&nbsp;Stoeneberg<br>
 &nbsp;Roberto&nbsp;Ragusa<br>
 &nbsp;Maynard&nbsp;Riley<br>
 &nbsp;Bart&nbsp;Schelstraete<br>
 &nbsp;Roberto&nbsp;Ragusa<br>
 &nbsp;Maynard&nbsp;Riley<br>
 &nbsp;Bart&nbsp;Schelstraete<br>
index 2ca2bb5..1964283 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >The Filter File</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >The Filter File</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Actions Files"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Actions Files"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,27 +73,29 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="FILTER-FILE">9. The Filter File</H1
+NAME="FILTER-FILE"
+>9. The Filter File</A
+></H1
 ><P
 > All text substitutions that can be invoked through the
 ><P
 > All text substitutions that can be invoked through the
- <TT
+ <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
-></TT
+></VAR
 > action
  must first be defined in the filter file, which is typically
  called <TT
 CLASS="FILENAME"
 >default.filter</TT
 > and which can be
 > action
  must first be defined in the filter file, which is typically
  called <TT
 CLASS="FILENAME"
 >default.filter</TT
 > and which can be
- selected through the <TT
+ selected through the <VAR
 CLASS="LITERAL"
 > <A
 HREF="config.html#FILTERFILE"
 >filterfile</A
 CLASS="LITERAL"
 > <A
 HREF="config.html#FILTERFILE"
 >filterfile</A
-></TT
+></VAR
 > config
  option.</P
 ><P
 > config
  option.</P
 ><P
@@ -104,17 +106,26 @@ HREF="config.html#FILTERFILE"
  width and height attributes (standard banner sizes or web-bugs),
  or just to have fun. The possibilities are endless.</P
 ><P
  width and height attributes (standard banner sizes or web-bugs),
  or just to have fun. The possibilities are endless.</P
 ><P
-> Filtering works on any text-based document type, including plain
- text, HTML, JavaScript, CSS etc. (all <TT
+> Filtering works on any text-based document type, including 
+ HTML, JavaScript, CSS etc. (all <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->text/*</TT
+>text/*</VAR
 >
 >
- MIME types). Substitutions are made at the source level, so if
- you want to <SPAN
+ MIME types, <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>except</I
+></SPAN
+> <VAR
+CLASS="LITERAL"
+>text/plain</VAR
+>).
+ Substitutions are made at the source level, so if you want to <SPAN
 CLASS="QUOTE"
 CLASS="QUOTE"
->"roll your own"</SPAN
-> filters, you should be
- familiar with HTML syntax.</P
+>"roll
+ your own"</SPAN
+> filters, you should be familiar with HTML syntax.</P
 ><P
 > Just like the <A
 HREF="actions-file.html"
 ><P
 > Just like the <A
 HREF="actions-file.html"
@@ -134,9 +145,9 @@ CLASS="emphasis"
 CLASS="EMPHASIS"
 >keyword</I
 ></SPAN
 CLASS="EMPHASIS"
 >keyword</I
 ></SPAN
-> <TT
+> <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->FILTER:</TT
+>FILTER:</VAR
 >, followed by
  the filter's <SPAN
 CLASS="emphasis"
 >, followed by
  the filter's <SPAN
 CLASS="emphasis"
@@ -174,24 +185,20 @@ TARGET="_top"
  user interface</A
 >.</P
 ><P
  user interface</A
 >.</P
 ><P
-> Once a filter called <TT
+> Once a filter called <VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
+>name</VAR
 > has been defined
  in the filter file, it can be invoked by using an action of the form
 > has been defined
  in the filter file, it can be invoked by using an action of the form
- +<TT
+ +<VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#FILTER"
 >filter</A
->{<TT
+>{<VAR
 CLASS="REPLACEABLE"
 CLASS="REPLACEABLE"
-><I
->name</I
-></TT
->}</TT
+>name</VAR
+>}</VAR
 >
  in any <A
 HREF="actions-file.html"
 >
  in any <A
 HREF="actions-file.html"
@@ -225,9 +232,9 @@ HREF="http://www.perl.org/"
 TARGET="_top"
 >Perl</A
 >'s
 TARGET="_top"
 >Perl</A
 >'s
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->s///</TT
+>s///</VAR
 > operator. If you are familiar with Perl, you
  will find this to be quite intuitive, and may want to look at the
  <A
 > operator. If you are familiar with Perl, you
  will find this to be quite intuitive, and may want to look at the
  <A
@@ -236,9 +243,9 @@ TARGET="_top"
 >PCRS man page</A
 >
  for the subtle differences to Perl behaviour. Most notably, the non-standard
 >PCRS man page</A
 >
  for the subtle differences to Perl behaviour. Most notably, the non-standard
- option letter <TT
+ option letter <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->U</TT
+>U</VAR
 > is supported, which turns the default
  to ungreedy matching.</P
 ><P
 > is supported, which turns the default
  to ungreedy matching.</P
 ><P
@@ -257,9 +264,9 @@ TARGET="_top"
 HREF="http://perldoc.com/perl5.6.1/pod/perlop.html#s-PATTERN-REPLACEMENT-egimosx"
 TARGET="_top"
 >the 
 HREF="http://perldoc.com/perl5.6.1/pod/perlop.html#s-PATTERN-REPLACEMENT-egimosx"
 TARGET="_top"
 >the 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->s///</TT
+>s///</VAR
 > operator's syntax</A
 > and <A
 HREF="http://perldoc.com/perl5.6.1/pod/perlre.html"
 > operator's syntax</A
 > and <A
 HREF="http://perldoc.com/perl5.6.1/pod/perlre.html"
@@ -273,7 +280,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="AEN3018">9.1. Filter File Tutorial</H2
+NAME="AEN3212"
+>9.1. Filter File Tutorial</A
+></H2
 ><P
 > Now, let's complete our <SPAN
 CLASS="QUOTE"
 ><P
 > Now, let's complete our <SPAN
 CLASS="QUOTE"
@@ -318,9 +327,9 @@ CLASS="QUOTE"
 CLASS="QUOTE"
 >"foo"</SPAN
 > on each page. For global substitution,
 CLASS="QUOTE"
 >"foo"</SPAN
 > on each page. For global substitution,
- we'll need to add the <TT
+ we'll need to add the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->g</TT
+>g</VAR
 > option:</P
 ><P
 > <TABLE
 > option:</P
 ><P
 > <TABLE
@@ -377,26 +386,26 @@ s|(&#60;script.*)document\.referrer(.*&#60;/script&#62;)|$1"Not Your Business!"$
 ></P
 ><P
 > Following the header line and a comment, you see the job. Note that it uses
 ></P
 ><P
 > Following the header line and a comment, you see the job. Note that it uses
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->|</TT
-> as the delimiter instead of <TT
+>|</VAR
+> as the delimiter instead of <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/</TT
+>/</VAR
 >, because
  the pattern contains a forward slash, which would otherwise have to be escaped
 >, because
  the pattern contains a forward slash, which would otherwise have to be escaped
- by a backslash (<TT
+ by a backslash (<VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->\</TT
+>\</VAR
 >).</P
 ><P
 >).</P
 ><P
-> Now, let's examine the pattern: it starts with the text <TT
+> Now, let's examine the pattern: it starts with the text <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->&#60;script.*</TT
+>&#60;script.*</VAR
 >
 >
- enclosed in parentheses. Since the dot matches any character, and <TT
+ enclosed in parentheses. Since the dot matches any character, and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->*</TT
+>*</VAR
 >
  means: <SPAN
 CLASS="QUOTE"
 >
  means: <SPAN
 CLASS="QUOTE"
@@ -414,9 +423,9 @@ CLASS="EMPHASIS"
 > text, i.e.
  it matches the whole page, from the start of the first &#60;script&#62; tag.</P
 ><P
 > text, i.e.
  it matches the whole page, from the start of the first &#60;script&#62; tag.</P
 ><P
-> That's more than we want, but the pattern continues: <TT
+> That's more than we want, but the pattern continues: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->document\.referrer</TT
+>document\.referrer</VAR
 >
  matches only the exact string <SPAN
 CLASS="QUOTE"
 >
  matches only the exact string <SPAN
 CLASS="QUOTE"
@@ -444,12 +453,12 @@ CLASS="EMPHASIS"
  in the page (and appear in that order).</P
 ><P
 > But there's still more pattern to go. The next element, again enclosed in parentheses,
  in the page (and appear in that order).</P
 ><P
 > But there's still more pattern to go. The next element, again enclosed in parentheses,
- is <TT
+ is <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*&#60;/script&#62;</TT
->. You already know what <TT
+>.*&#60;/script&#62;</VAR
+>. You already know what <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*</TT
+>.*</VAR
 >
  means, so the whole pattern translates to: Match from the start of the first  &#60;script&#62;
  tag in a page to the end of the last &#60;script&#62; tag, provided that the text
 >
  means, so the whole pattern translates to: Match from the start of the first  &#60;script&#62;
  tag in a page to the end of the last &#60;script&#62; tag, provided that the text
@@ -460,17 +469,17 @@ CLASS="QUOTE"
 ><P
 > This is still not the whole story, since we have ignored the options and the parentheses:
  The portions of the page matched by sub-patterns that are enclosed in parentheses, will be
 ><P
 > This is still not the whole story, since we have ignored the options and the parentheses:
  The portions of the page matched by sub-patterns that are enclosed in parentheses, will be
- remembered and be available through the variables <TT
+ remembered and be available through the variables <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$1, $2, ...</TT
+>$1, $2, ...</VAR
 > in
 > in
- the substitute. The <TT
+ the substitute. The <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->U</TT
+>U</VAR
 > option switches to ungreedy matching, which means
 > option switches to ungreedy matching, which means
- that the first <TT
+ that the first <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*</TT
+>.*</VAR
 > in the pattern will only <SPAN
 CLASS="QUOTE"
 >"eat up"</SPAN
 > in the pattern will only <SPAN
 CLASS="QUOTE"
 >"eat up"</SPAN
@@ -488,9 +497,9 @@ CLASS="EMPHASIS"
  of <SPAN
 CLASS="QUOTE"
 >"document.referrer"</SPAN
  of <SPAN
 CLASS="QUOTE"
 >"document.referrer"</SPAN
->, and that the second <TT
+>, and that the second <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*</TT
+>.*</VAR
 > will
  only span the text up to the <SPAN
 CLASS="emphasis"
 > will
  only span the text up to the <SPAN
 CLASS="emphasis"
@@ -502,13 +511,13 @@ CLASS="EMPHASIS"
 CLASS="QUOTE"
 >"&#60;/script&#62;"</SPAN
 >
 CLASS="QUOTE"
 >"&#60;/script&#62;"</SPAN
 >
- tag. Furthermore, the <TT
+ tag. Furthermore, the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->s</TT
+>s</VAR
 > option says that the match may span
 > option says that the match may span
- multiple lines in the page, and the <TT
+ multiple lines in the page, and the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->g</TT
+>g</VAR
 > option again means that the
  substitution is global.</P
 ><P
 > option again means that the
  substitution is global.</P
 ><P
@@ -521,27 +530,27 @@ CLASS="QUOTE"
  <SPAN
 CLASS="QUOTE"
 >"document.referrer"</SPAN
  <SPAN
 CLASS="QUOTE"
 >"document.referrer"</SPAN
-> as <TT
+> as <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$1</TT
+>$1</VAR
 >, and the part following
 >, and the part following
- that string, up to and including the closing tag, as <TT
+ that string, up to and including the closing tag, as <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$2</TT
+>$2</VAR
 >.</P
 ><P
 > Now the pattern is deciphered, but wasn't this about substituting things? So
 >.</P
 ><P
 > Now the pattern is deciphered, but wasn't this about substituting things? So
- lets look at the substitute: <TT
+ lets look at the substitute: <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$1"Not Your Business!"$2</TT
+>$1"Not Your Business!"$2</VAR
 > is
 > is
- easy to read: The text remembered as <TT
+ easy to read: The text remembered as <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$1</TT
+>$1</VAR
 >, followed by 
 >, followed by 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->"Not Your Business!"</TT
+>"Not Your Business!"</VAR
 > (<SPAN
 CLASS="emphasis"
 ><I
 > (<SPAN
 CLASS="emphasis"
 ><I
@@ -549,27 +558,27 @@ CLASS="EMPHASIS"
 >including</I
 ></SPAN
 >
 >including</I
 ></SPAN
 >
- the quotation marks!), followed by the text remembered as <TT
+ the quotation marks!), followed by the text remembered as <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$2</TT
+>$2</VAR
 >.
  This produces an exact copy of the original string, with the middle part
  (the <SPAN
 CLASS="QUOTE"
 >"document.referrer"</SPAN
 >.
  This produces an exact copy of the original string, with the middle part
  (the <SPAN
 CLASS="QUOTE"
 >"document.referrer"</SPAN
->) replaced by <TT
+>) replaced by <VAR
 CLASS="LITERAL"
 >"Not Your
 CLASS="LITERAL"
 >"Not Your
- Business!"</TT
+ Business!"</VAR
 >.</P
 ><P
 > The whole job now reads: Replace <SPAN
 CLASS="QUOTE"
 >"document.referrer"</SPAN
 > by
 >.</P
 ><P
 > The whole job now reads: Replace <SPAN
 CLASS="QUOTE"
 >"document.referrer"</SPAN
 > by
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->"Not Your Business!"</TT
+>"Not Your Business!"</VAR
 > wherever it appears inside a
  &#60;script&#62; tag. Note that this job won't break JavaScript syntax,
  since both the original and the replacement are syntactically valid
 > wherever it appears inside a
  &#60;script&#62; tag. Note that this job won't break JavaScript syntax,
  since both the original and the replacement are syntactically valid
@@ -595,31 +604,31 @@ s/window\.status\s*=\s*(['"]).*?\1/dUmMy=1/ig</PRE
 ></TABLE
 ></P
 ><P
 ></TABLE
 ></P
 ><P
-> <TT
+> <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->\s</TT
+>\s</VAR
 > stands for whitespace characters (space, tab, newline,
 > stands for whitespace characters (space, tab, newline,
- carriage return, form feed), so that <TT
+ carriage return, form feed), so that <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->\s*</TT
+>\s*</VAR
 > means: <SPAN
 CLASS="QUOTE"
 >"zero
  or more whitespace"</SPAN
 > means: <SPAN
 CLASS="QUOTE"
 >"zero
  or more whitespace"</SPAN
->. The <TT
+>. The <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->?</TT
-> in <TT
+>?</VAR
+> in <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*?</TT
+>.*?</VAR
 >
 >
- makes this matching of arbitrary text ungreedy. (Note that the <TT
+ makes this matching of arbitrary text ungreedy. (Note that the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->U</TT
+>U</VAR
 >
 >
- option is not set). The <TT
+ option is not set). The <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->['"]</TT
+>['"]</VAR
 > construct means: <SPAN
 CLASS="QUOTE"
 >"a single
 > construct means: <SPAN
 CLASS="QUOTE"
 >"a single
@@ -630,13 +639,13 @@ CLASS="EMPHASIS"
 >or</I
 ></SPAN
 > a double quote"</SPAN
 >or</I
 ></SPAN
 > a double quote"</SPAN
->. Finally, <TT
+>. Finally, <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->\1</TT
+>\1</VAR
 > is
 > is
- a backreference to the first parenthesis just like <TT
+ a backreference to the first parenthesis just like <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->$1</TT
+>$1</VAR
 > above,
  with the difference that in the <SPAN
 CLASS="emphasis"
 > above,
  with the difference that in the <SPAN
 CLASS="emphasis"
@@ -700,22 +709,22 @@ CLASS="QUOTE"
  <SPAN
 CLASS="QUOTE"
 >"&#60;body&#62;"</SPAN
  <SPAN
 CLASS="QUOTE"
 >"&#60;body&#62;"</SPAN
-> tags with the dummy word <TT
+> tags with the dummy word <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->never</TT
+>never</VAR
 >.
 >.
- Note that the <TT
+ Note that the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->i</TT
+>i</VAR
 > option makes the pattern matching
  case-insensitive. Also note that ungreedy matching alone doesn't always guarantee
 > option makes the pattern matching
  case-insensitive. Also note that ungreedy matching alone doesn't always guarantee
- a minimal match: In the first parenthesis, we had to use <TT
+ a minimal match: In the first parenthesis, we had to use <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->[^&#62;]*</TT
+>[^&#62;]*</VAR
 >
 >
- instead of <TT
+ instead of <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->.*</TT
+>.*</VAR
 > to prevent the match from exceeding the 
  &#60;body&#62; tag if it doesn't contain <SPAN
 CLASS="QUOTE"
 > to prevent the match from exceeding the 
  &#60;body&#62; tag if it doesn't contain <SPAN
 CLASS="QUOTE"
@@ -743,9 +752,9 @@ s/microsoft(?!\.com)/MicroSuck/ig</PRE
 ></TABLE
 ></P
 ><P
 ></TABLE
 ></P
 ><P
-> Note the <TT
+> Note the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->(?!\.com)</TT
+>(?!\.com)</VAR
 > part (a so-called negative lookahead)
  in the job's pattern, which means: Don't match, if the string 
  <SPAN
 > part (a so-called negative lookahead)
  in the job's pattern, which means: Don't match, if the string 
  <SPAN
@@ -785,14 +794,494 @@ s* industry[ -]leading \
 ></TABLE
 ></P
 ><P
 ></TABLE
 ></P
 ><P
-> The <TT
+> The <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->x</TT
+>x</VAR
 > option in this job turns on extended syntax, and allows for
  e.g. the liberal use of (non-interpreted!) whitespace for nicer formatting. </P
 ><P
 > You get the idea?</P
 ></DIV
 > option in this job turns on extended syntax, and allows for
  e.g. the liberal use of (non-interpreted!) whitespace for nicer formatting. </P
 ><P
 > You get the idea?</P
 ></DIV
+><DIV
+CLASS="SECT2"
+><H2
+CLASS="SECT2"
+><A
+NAME="PREDEFINED-FILTERS"
+>9.2. The Pre-defined Filters</A
+></H2
+><P
+>The distribution <TT
+CLASS="FILENAME"
+>default.filter</TT
+> file contains a selection of
+pre-defined filters for your convenience:</P
+><P
+></P
+><DIV
+CLASS="VARIABLELIST"
+><DL
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>js-annoyances</I
+></SPAN
+></DT
+><DD
+><P
+>    The purpose of this filter is to get rid of particularly annoying JavaScript abuse.
+    To that end, it
+   <P
+></P
+><UL
+><LI
+><P
+>      replaces JavaScript references to the browser's referrer information
+      with the string "Not Your Business!". This compliments the <VAR
+CLASS="LITERAL"
+><A
+HREF="actions-file.html#HIDE-REFERRER"
+>hide-referrer</A
+></VAR
+> action on the content level.
+     </P
+></LI
+><LI
+><P
+>      removes the bindings to the DOM's
+      <A
+HREF="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-htmlevents"
+TARGET="_top"
+>unload
+      event</A
+> which we feel has no right to exist and is responsible for most <SPAN
+CLASS="QUOTE"
+>"exit consoles"</SPAN
+>, i.e.
+      nasty windows that pop up when you close another one.
+     </P
+></LI
+><LI
+><P
+>      removes code that causes new windows to be opened with undesired properties, such as being
+      full-screen, non-resizable, without location, status or menu bar etc.
+     </P
+></LI
+></UL
+>
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>js-events</I
+></SPAN
+></DT
+><DD
+><P
+>    This is a very radical measure. It removes virtually all JavaScript event bindings, which
+    means that scripts can not react to user actions such as mouse movements or clicks, window
+    resizing etc, anymore. 
+   </P
+><P
+>    We <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>strongly discourage</I
+></SPAN
+> using this filter as a default since it breaks
+    many legitimate scripts. It is meant for use only on extra-nasty sites (should you really
+    need to go there).
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>html-annoyances</I
+></SPAN
+></DT
+><DD
+><P
+>    This filter will undo many common instances of HTML based abuse.
+   </P
+><P
+>    The <VAR
+CLASS="LITERAL"
+>BLINK</VAR
+> and <VAR
+CLASS="LITERAL"
+>MARQUEE</VAR
+> tags 
+    are neutralized (yeah baby!), and browser windows will be created as
+    resizable (as of course they should be!), and will have location,
+    scroll and menu bars -- even if specified otherwise.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>content-cookies</I
+></SPAN
+></DT
+><DD
+><P
+>    Most cookies are set in the HTTP dialogue, where they can be intercepted
+    by the
+    <VAR
+CLASS="LITERAL"
+><A
+HREF="actions-file.html#CRUNCH-INCOMING-COOKIES"
+>crunch-incoming-cookies</A
+></VAR
+>
+    and <VAR
+CLASS="LITERAL"
+><A
+HREF="actions-file.html#CRUNCH-OUTGOING-COOKIES"
+>crunch-outgoing-cookies</A
+></VAR
+>
+    actions. But web sites increasingly make use of HTML meta tags and JavaScript
+    to sneak cookies to the browser on the content level.
+   </P
+><P
+>    This filter disables HTML and JavaScript code that reads or sets cookies. Use
+    it wherever you would also use the cookie crunch actions.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>refresh tags</I
+></SPAN
+></DT
+><DD
+><P
+>    Disable any refresh tags if the interval is greater than nine seconds (so 
+    that redirections done via refresh tags are not destroyed). This is useful 
+    for dial-on-demand setups, or for those who find this HTML feature
+    annoying.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>unsolicited-popups</I
+></SPAN
+></DT
+><DD
+><P
+>    This filter attempts to prevent only <SPAN
+CLASS="QUOTE"
+>"unsolicited"</SPAN
+> pop-up 
+    windows from opening, yet still allow pop-up windows that the user 
+    has explicitly chosen to open. It was added in version 3.0.1, 
+    as an improvement over earlier such filters.
+   </P
+><P
+>    Technical note: The filter works by redefining the window.open JavaScript
+    function to a dummy function during the loading and rendering phase of each
+    HTML page access, and restoring the function afterwards.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>all-popups</I
+></SPAN
+></DT
+><DD
+><P
+>    Attempt to prevent <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>all</I
+></SPAN
+> pop-up windows from opening.
+    Note this should be used with more discretion than the above, since it is
+    more likely to break some sites that require pop-ups for normal usage. Use 
+    with caution.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>img-reorder</I
+></SPAN
+></DT
+><DD
+><P
+>    This is a helper filter that has no value if used alone. It makes the
+    <VAR
+CLASS="LITERAL"
+>banners-by-size</VAR
+> and <VAR
+CLASS="LITERAL"
+>banners-by-link</VAR
+>
+    (see below) filters more effective and should be enabled together with them.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>banners-by-size</I
+></SPAN
+></DT
+><DD
+><P
+>    This filter removes image tags purely based on what size they are. Fortunately 
+    for us, many ads and banner images tend to conform to certain standardized
+    sizes, which makes this filter quite effective for ad stripping purposes.
+   </P
+><P
+>    Occasionally this filter will cause false positives on images that are not ads,
+    but just happen to be of one of the standard banner sizes.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>banners-by-link</I
+></SPAN
+></DT
+><DD
+><P
+>    This is an experimental filter that attempts to kill any banners if 
+    their URLs seem to point to known or suspected click trackers. It is currently
+    not of much value and is not recommended for use by default.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>webbugs</I
+></SPAN
+></DT
+><DD
+><P
+>    Webbugs are small, invisible images (technically 1X1 GIF images), that 
+    are used to track users across websites, and collect information on them.
+    As an HTML page is loaded by the browser, an embedded image tag causes the
+    browser to contact a third-party site, disclosing the tracking information
+    through the requested URL and/or cookies for that third-party domain, without
+    the use ever becoming aware of the interaction with the third-party site.
+    HTML-ized spam also uses a similar technique to verify email addresses.
+   </P
+><P
+>    This filter removes the HTML code that loads such <SPAN
+CLASS="QUOTE"
+>"webbugs"</SPAN
+>.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>tiny-textforms</I
+></SPAN
+></DT
+><DD
+><P
+>    A rather special-purpose filter that can be used to enlarge textareas (those
+    multi-line text boxes in web forms) and turn off hard word wrap in them. 
+    It was written for the sourceforge.net tracker system where such boxes are
+    a nuisance, but it can be handy on other sites, too.
+   </P
+><P
+>    It is not recommended to use this filter as a default.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>jumping-windows</I
+></SPAN
+></DT
+><DD
+><P
+>    Many consider windows that move, or resize themselves to be abusive. This filter
+    neutralizes the related JavaScript code. Note that some sites might not display
+    or behave as intended when using this filter.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>frameset-borders</I
+></SPAN
+></DT
+><DD
+><P
+>    Some web designers seem to assume that everyone in the world will view their
+    web sites using the same browser brand and version, screen resolution etc,
+    because only that assumption could explain why they'd use static frame sizes,
+    yet prevent their frames from being resized by the user, should they be too
+    small to show their whole content.
+   </P
+><P
+>    This filter removes the related HTML code. It should only be applied to sites
+    which need it.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>demoronizer</I
+></SPAN
+></DT
+><DD
+><P
+>    Many Microsoft products that generate HTML use non-standard extensions (read:
+    violations) of the ISO 8859-1 aka Latin-1 character set. This causes those
+    HTML documents to display with errors on standard-compliant platforms. 
+   </P
+><P
+>    This filter translates the MS-only characters into Latin-1 equivalents. 
+    It is not necessary when using MS products, and will cause corruption of  
+    all documents that use 8-bit character sets other than Latin-1. It's mostly
+    worthwhile for Europeans on non-MS platforms, if wierd garbage characters
+    sometimes appear on some pages.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>shockwave-flash</I
+></SPAN
+></DT
+><DD
+><P
+>    A filter for shockwave haters. As the name suggests, this filter strips code
+    out of web pages that is used to embed shockwave flash objects. 
+   </P
+><P
+>   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>quicktime-kioskmode</I
+></SPAN
+></DT
+><DD
+><P
+>    Change HTML code that embeds Quicktime objects so that kioskmode, which
+    prevents saving, is disabled.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>fun</I
+></SPAN
+></DT
+><DD
+><P
+>    Text replacements for subversive browsing fun. Make fun of your favorite
+    Monopolist or play buzzword bingo.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>crude-parental</I
+></SPAN
+></DT
+><DD
+><P
+>    A demonstration-only filter that shows how <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+>
+    can be used to delete web content on a keyword basis.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>ie-exploits</I
+></SPAN
+></DT
+><DD
+><P
+>    A collection of text replacements to disable malicious HTML and JavaScript
+    code that exploits known security holes in Internet Explorer.
+   </P
+><P
+>    Presently, it only protects against Nimda and a cross-site scripting bug, and
+    would need active maintenance to provide more substantial protection.
+   </P
+></DD
+><DT
+><SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>site-specifics</I
+></SPAN
+></DT
+><DD
+><P
+>    Some web sites have very specific problems, the cure for which doesn't apply
+    anywhere else, or could even cause damage on other sites.
+   </P
+><P
+>    This is a collection of such site-specific cures which should only be applied
+    to the sites they were intended for, which is what the supplied
+    <TT
+CLASS="FILENAME"
+>default.action</TT
+> file does. Users shouldn't need to change
+    anything regarding this filter.
+   </P
+></DD
+></DL
+></DIV
+></DIV
 ></DIV
 ><DIV
 CLASS="NAVFOOTER"
 ></DIV
 ><DIV
 CLASS="NAVFOOTER"
index ead26ef..47f0b41 100644 (file)
@@ -1,11 +1,11 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 <HTML
 ><HEAD
 ><TITLE
->Privoxy 3.1.1 User Manual</TITLE
+>Privoxy 3.0.3 User Manual</TITLE
 ><META
 NAME="GENERATOR"
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="NEXT"
 TITLE="Introduction"
 HREF="introduction.html"><LINK
 REL="NEXT"
 TITLE="Introduction"
 HREF="introduction.html"><LINK
@@ -26,14 +26,16 @@ CLASS="TITLEPAGE"
 ><H1
 CLASS="TITLE"
 ><A
 ><H1
 CLASS="TITLE"
 ><A
-NAME="AEN2">Privoxy 3.1.1 User Manual</H1
+NAME="AEN2"
+>Privoxy 3.0.3 User Manual</A
+></H1
 ><P
 CLASS="PUBDATE"
 > <SUB
 > <A
 HREF="copyright.html"
 >Copyright</A
 ><P
 CLASS="PUBDATE"
 > <SUB
 > <A
 HREF="copyright.html"
 >Copyright</A
-> © 2001, 2002 by 
+> © 2001 - 2004 by 
  <A
 HREF="http://www.privoxy.org/"
 TARGET="_top"
  <A
 HREF="http://www.privoxy.org/"
 TARGET="_top"
@@ -43,13 +45,15 @@ TARGET="_top"
 ><BR></P
 ><P
 CLASS="PUBDATE"
 ><BR></P
 ><P
 CLASS="PUBDATE"
->$Id: user-manual.sgml,v 2.2 2002/09/05 05:45:30 hal9 Exp $<BR></P
+>$Id: index.html,v 1.18.2.11 2004/01/31 00:05:44 oes Exp $<BR></P
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
 ><DIV
 ><DIV
 CLASS="ABSTRACT"
-><A
-NAME="AEN9"><P
+><P
 ></P
 ></P
+><A
+NAME="AEN9"
+></A
 ><P
 >  The <I
 CLASS="CITETITLE"
 ><P
 >  The <I
 CLASS="CITETITLE"
@@ -69,7 +73,7 @@ CLASS="APPLICATION"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is a web proxy with advanced filtering
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is a web proxy with advanced filtering
- capabilities for protecting privacy, filtering web page content, managing
+ capabilities for protecting privacy, modifying web page content, managing
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <SPAN
 CLASS="APPLICATION"
  cookies, controlling access, and removing ads, banners, pop-ups and other
  obnoxious Internet junk. <SPAN
 CLASS="APPLICATION"
@@ -295,7 +299,7 @@ CLASS="APPLICATION"
 ><DL
 ><DT
 >6.1. <A
 ><DL
 ><DT
 >6.1. <A
-HREF="configuration.html#AEN582"
+HREF="configuration.html#AEN585"
 >Controlling <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 >Controlling <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
@@ -486,12 +490,12 @@ HREF="actions-file.html"
 ><DL
 ><DT
 >8.1. <A
 ><DL
 ><DT
 >8.1. <A
-HREF="actions-file.html#AEN1645"
+HREF="actions-file.html#AEN1753"
 >Finding the Right Mix</A
 ></DT
 ><DT
 >8.2. <A
 >Finding the Right Mix</A
 ></DT
 ><DT
 >8.2. <A
-HREF="actions-file.html#AEN1652"
+HREF="actions-file.html#AEN1760"
 >How to Edit</A
 ></DT
 ><DT
 >How to Edit</A
 ></DT
 ><DT
@@ -508,12 +512,12 @@ HREF="actions-file.html#AF-PATTERNS"
 ><DL
 ><DT
 >8.4.1. <A
 ><DL
 ><DT
 >8.4.1. <A
-HREF="actions-file.html#AEN1716"
+HREF="actions-file.html#AEN1833"
 >The Domain Pattern</A
 ></DT
 ><DT
 >8.4.2. <A
 >The Domain Pattern</A
 ></DT
 ><DT
 >8.4.2. <A
-HREF="actions-file.html#AEN1778"
+HREF="actions-file.html#AEN1895"
 >The Path Pattern</A
 ></DT
 ></DL
 >The Path Pattern</A
 ></DT
 ></DL
@@ -630,7 +634,7 @@ HREF="actions-file.html#SET-IMAGE-BLOCKER"
 ></DT
 ><DT
 >8.5.21. <A
 ></DT
 ><DT
 >8.5.21. <A
-HREF="actions-file.html#AEN2706"
+HREF="actions-file.html#AEN2855"
 >Summary</A
 ></DT
 ></DL
 >Summary</A
 ></DT
 ></DL
@@ -649,12 +653,12 @@ HREF="actions-file.html#ACT-EXAMPLES"
 ><DL
 ><DT
 >8.7.1. <A
 ><DL
 ><DT
 >8.7.1. <A
-HREF="actions-file.html#AEN2758"
+HREF="actions-file.html#AEN2920"
 >default.action</A
 ></DT
 ><DT
 >8.7.2. <A
 >default.action</A
 ></DT
 ><DT
 >8.7.2. <A
-HREF="actions-file.html#AEN2915"
+HREF="actions-file.html#AEN3086"
 >user.action</A
 ></DT
 ></DL
 >user.action</A
 ></DT
 ></DL
@@ -670,9 +674,14 @@ HREF="filter-file.html"
 ><DL
 ><DT
 >9.1. <A
 ><DL
 ><DT
 >9.1. <A
-HREF="filter-file.html#AEN3018"
+HREF="filter-file.html#AEN3212"
 >Filter File Tutorial</A
 ></DT
 >Filter File Tutorial</A
 ></DT
+><DT
+>9.2. <A
+HREF="filter-file.html#PREDEFINED-FILTERS"
+>The Pre-defined Filters</A
+></DT
 ></DL
 ></DD
 ><DT
 ></DL
 ></DD
 ><DT
@@ -727,7 +736,7 @@ CLASS="APPLICATION"
 ><DL
 ><DT
 >12.1. <A
 ><DL
 ><DT
 >12.1. <A
-HREF="copyright.html#AEN3220"
+HREF="copyright.html#AEN3561"
 >License</A
 ></DT
 ><DT
 >License</A
 ></DT
 ><DT
@@ -761,7 +770,7 @@ HREF="appendix.html#REGEX"
 ></DT
 ><DT
 >14.2. <A
 ></DT
 ><DT
 >14.2. <A
-HREF="appendix.html#AEN3474"
+HREF="appendix.html#AEN3815"
 ><SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 ><SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
index 87131cb..c73538e 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Installation</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Installation</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Introduction"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Introduction"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="INSTALLATION">2. Installation</H1
+NAME="INSTALLATION"
+>2. Installation</A
+></H1
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -115,7 +117,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="INSTALLATION-PACKAGES">2.1. Binary Packages</H2
+NAME="INSTALLATION-PACKAGES"
+>2.1. Binary Packages</A
+></H2
 ><P
 >How to install the binary packages depends on your operating system:</P
 ><DIV
 ><P
 >How to install the binary packages depends on your operating system:</P
 ><DIV
@@ -123,11 +127,13 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="INSTALLATION-PACK-RPM">2.1.1. Red Hat, SuSE and Conectiva RPMs</H3
+NAME="INSTALLATION-PACK-RPM"
+>2.1.1. Red Hat, SuSE and Conectiva RPMs</A
+></H3
 ><P
 ><P
-> RPMs can be installed with <TT
+> RPMs can be installed with <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->rpm -Uvh privoxy-3.1.1-1.rpm</TT
+>rpm -Uvh privoxy-3.0.3-1.rpm</VAR
 >,
  and will use <TT
 CLASS="FILENAME"
 >,
  and will use <TT
 CLASS="FILENAME"
@@ -157,9 +163,9 @@ CLASS="COMMAND"
 automatically start Privoxy in the boot process.</P
 ><P
 > If you have problems with failed dependencies, try rebuilding the SRC RPM: 
 automatically start Privoxy in the boot process.</P
 ><P
 > If you have problems with failed dependencies, try rebuilding the SRC RPM: 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->rpm --rebuild privoxy-3.1.1-1.src.rpm</TT
+>rpm --rebuild privoxy-3.0.3-1.src.rpm</VAR
 >. This 
  will use your locally installed libraries and RPM version. </P
 ><P
 >. This 
  will use your locally installed libraries and RPM version. </P
 ><P
@@ -182,25 +188,28 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="INSTALLATION-DEB">2.1.2. Debian</H3
+NAME="INSTALLATION-DEB"
+>2.1.2. Debian</A
+></H3
 ><P
 ><P
-> DEBs can be installed with <TT
+> DEBs can be installed with <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->dpkg -i
- privoxy_3.1.1-1.deb</TT
->, and will use
- <TT
+>apt-get install privoxy</VAR
+>,
+ and will use <TT
 CLASS="FILENAME"
 >/etc/privoxy</TT
 CLASS="FILENAME"
 >/etc/privoxy</TT
-> for the location of configuration
- files.</P
+> for the location of 
configuration files.</P
 ></DIV
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ></DIV
 ><DIV
 CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
-NAME="INSTALLATION-PACK-WIN">2.1.3. Windows</H3
+NAME="INSTALLATION-PACK-WIN"
+>2.1.3. Windows</A
+></H3
 ><P
 > Just double-click the installer, which will guide you through
  the installation process. You will find the configuration files
 ><P
 > Just double-click the installer, which will guide you through
  the installation process. You will find the configuration files
@@ -212,11 +221,13 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="INSTALLATION-PACK-BINTGZ">2.1.4. Solaris, NetBSD, FreeBSD, HP-UX</H3
+NAME="INSTALLATION-PACK-BINTGZ"
+>2.1.4. Solaris, NetBSD, FreeBSD, HP-UX</A
+></H3
 ><P
 ><P
-> Create a new directory, <TT
+> Create a new directory, <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->cd</TT
+>cd</VAR
 > to it, then unzip and
  untar the archive. For the most part, you'll have to figure out where
  things go. </P
 > to it, then unzip and
  untar the archive. For the most part, you'll have to figure out where
  things go. </P
@@ -226,7 +237,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="INSTALLATION-OS2">2.1.5. OS/2</H3
+NAME="INSTALLATION-OS2"
+>2.1.5. OS/2</A
+></H3
 ><P
 > First, make sure that no previous installations of
  <SPAN
 ><P
 > First, make sure that no previous installations of
  <SPAN
@@ -266,39 +279,41 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="INSTALLATION-MAC">2.1.6. Mac OSX</H3
+NAME="INSTALLATION-MAC"
+>2.1.6. Mac OSX</A
+></H3
 ><P
 > Unzip the downloaded file (you can either double-click on the file
  from the finder, or from the desktop if you downloaded it there).
  Then, double-click on the package installer icon named
 ><P
 > Unzip the downloaded file (you can either double-click on the file
  from the finder, or from the desktop if you downloaded it there).
  Then, double-click on the package installer icon named
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->Privoxy.pkg</TT
+>Privoxy.pkg</VAR
 >
  and follow the installation process.
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > will be installed in the folder
 >
  and follow the installation process.
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > will be installed in the folder
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/Library/Privoxy</TT
+>/Library/Privoxy</VAR
 >.
  It will start automatically whenever you start up.  To prevent it from
  starting automatically, remove or rename the folder
 >.
  It will start automatically whenever you start up.  To prevent it from
  starting automatically, remove or rename the folder
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/Library/StartupItems/Privoxy</TT
+>/Library/StartupItems/Privoxy</VAR
 >. </P
 ><P
 > To start Privoxy by hand, double-click on 
 >. </P
 ><P
 > To start Privoxy by hand, double-click on 
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->StartPrivoxy.command</TT
+>StartPrivoxy.command</VAR
 > in the
 > in the
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/Library/Privoxy</TT
+>/Library/Privoxy</VAR
 > folder.
  Or, type this command in the Terminal:</P
 ><P
 > folder.
  Or, type this command in the Terminal:</P
 ><P
@@ -324,7 +339,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="INSTALLATION-AMIGA">2.1.7. AmigaOS</H3
+NAME="INSTALLATION-AMIGA"
+>2.1.7. AmigaOS</A
+></H3
 ><P
 > Copy and then unpack the <TT
 CLASS="FILENAME"
 ><P
 > Copy and then unpack the <TT
 CLASS="FILENAME"
@@ -342,7 +359,9 @@ CLASS="SECT3"
 ><H3
 CLASS="SECT3"
 ><A
 ><H3
 CLASS="SECT3"
 ><A
-NAME="INSTALLATTION-GENTOO">2.1.8. Gentoo</H3
+NAME="INSTALLATTION-GENTOO"
+>2.1.8. Gentoo</A
+></H3
 ><P
 > Gentoo source packages (Ebuilds) for <SPAN
 CLASS="APPLICATION"
 ><P
 > Gentoo source packages (Ebuilds) for <SPAN
 CLASS="APPLICATION"
@@ -359,13 +378,13 @@ CLASS="APPLICATION"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > under Gentoo just do 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > under Gentoo just do 
- first <TT
+ first <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->emerge rsync</TT
+>emerge rsync</VAR
 > to get the latest changes from the 
 > to get the latest changes from the 
- Portage tree. With <TT
+ Portage tree. With <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->emerge privoxy</TT
+>emerge privoxy</VAR
 > you install the latest 
  version.</P
 ><P
 > you install the latest 
  version.</P
 ><P
@@ -375,7 +394,7 @@ CLASS="FILENAME"
 >, the 
  documentation is in <TT
 CLASS="FILENAME"
 >, the 
  documentation is in <TT
 CLASS="FILENAME"
->/usr/share/doc/privoxy-3.1.1</TT
+>/usr/share/doc/privoxy-3.0.3</TT
 >
  and the Log directory is in <TT
 CLASS="FILENAME"
 >
  and the Log directory is in <TT
 CLASS="FILENAME"
@@ -388,7 +407,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="INSTALLATION-SOURCE">2.2. Building from Source</H2
+NAME="INSTALLATION-SOURCE"
+>2.2. Building from Source</A
+></H2
 ><P
 > The most convenient way to obtain the <SPAN
 CLASS="APPLICATION"
 ><P
 > The most convenient way to obtain the <SPAN
 CLASS="APPLICATION"
@@ -409,7 +430,7 @@ TARGET="_top"
 >the
  CVS repository</A
 > or simply download <A
 >the
  CVS repository</A
 > or simply download <A
-HREF="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz"
+HREF="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2"
 TARGET="_top"
 >the nightly CVS
  tarball.</A
 TARGET="_top"
 >the nightly CVS
  tarball.</A
@@ -437,7 +458,7 @@ TARGET="_top"
 ><P
 > When building from a source tarball (either release version or
  <A
 ><P
 > When building from a source tarball (either release version or
  <A
-HREF="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.gz"
+HREF="http://cvs.sourceforge.net/cvstarballs/ijbswa-cvsroot.tar.bz2"
 TARGET="_top"
 >nightly CVS
  tarball</A
 TARGET="_top"
 >nightly CVS
  tarball</A
@@ -451,8 +472,8 @@ WIDTH="100%"
 ><TD
 ><PRE
 CLASS="SCREEN"
 ><TD
 ><PRE
 CLASS="SCREEN"
-> tar xzvf privoxy-3.1.1-beta-src* [.tgz or .tar.gz]
- cd privoxy-3.1.1-beta</PRE
+> tar xzvf privoxy-3.0.3-src* [.tgz or .tar.gz]
+ cd privoxy-3.0.3</PRE
 ></TD
 ></TR
 ></TABLE
 ></TD
 ></TR
 ></TABLE
@@ -505,37 +526,6 @@ CLASS="SCREEN"
 ></TR
 ></TABLE
 ></P
 ></TR
 ></TABLE
 ></P
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Warning</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
-> 
-  The <SPAN
-CLASS="QUOTE"
->"make install"</SPAN
-> target is temporary quite broken! It is
-  recommended to use a binary package, or do a source build, and manually 
-  install the components. Sorry.
- </P
-></TD
-></TR
-></TABLE
-></DIV
 ><P
 >  If you have gnu make, you can have the first four steps 
   automatically done for you by just typing:</P
 ><P
 >  If you have gnu make, you can have the first four steps 
   automatically done for you by just typing:</P
@@ -569,7 +559,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="INSTALLATION-KEEPUPDATED">2.3. Keeping your Installation Up-to-Date</H2
+NAME="INSTALLATION-KEEPUPDATED"
+>2.3. Keeping your Installation Up-to-Date</A
+></H2
 ><P
 > As user feedback comes in and development continues, we will make updated versions
  of both the main <A
 ><P
 > As user feedback comes in and development continues, we will make updated versions
  of both the main <A
@@ -595,9 +587,9 @@ TARGET="_top"
 >, ijbswa-announce@lists.sourceforge.net.</P
 ><P
 > In order not to loose your personal changes and adjustments when updating
 >, ijbswa-announce@lists.sourceforge.net.</P
 ><P
 > In order not to loose your personal changes and adjustments when updating
- to the latest <TT
+ to the latest <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->default.action</TT
+>default.action</VAR
 > file we <SPAN
 CLASS="emphasis"
 ><I
 > file we <SPAN
 CLASS="emphasis"
 ><I
@@ -605,9 +597,9 @@ CLASS="EMPHASIS"
 >strongly
  recommend</I
 ></SPAN
 >strongly
  recommend</I
 ></SPAN
-> that you use <TT
+> that you use <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->user.action</TT
+>user.action</VAR
 > for your
  customization of <SPAN
 CLASS="APPLICATION"
 > for your
  customization of <SPAN
 CLASS="APPLICATION"
index 9ff5cf5..b159116 100644 (file)
@@ -1,16 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Introduction</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Introduction</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 HREF="index.html"><LINK
 REL="PREVIOUS"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="NEXT"
 TITLE="Installation"
 HREF="index.html"><LINK
 REL="NEXT"
 TITLE="Installation"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,39 +73,23 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="INTRODUCTION">1. Introduction</H1
+NAME="INTRODUCTION"
+>1. Introduction</A
+></H1
 ><P
 ><P
-> This documentation is included with the current alpha version of
+> This documentation is included with the current stable version of
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
->, v.3.1.1, 
- and is mostly complete at this point. The most up to date reference for the
- time being is still the comments in the source files and in the individual
- configuration files. Development of version 3.0 is currently nearing
- completion, and includes many significant changes and enhancements over
- earlier versions. The target release date for
- stable v3.0 is <SPAN
-CLASS="QUOTE"
->"soon"</SPAN
-> ;-).</P
-><P
-> Since this is a alpha version, not all new features are well tested. This
- documentation may be slightly out of sync as a result (especially with 
- CVS sources). And there <SPAN
-CLASS="emphasis"
-><I
-CLASS="EMPHASIS"
->may be</I
-></SPAN
-> bugs, though hopefully
- not many! </P
+>, v.3.0.3.</P
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><DIV
 CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
-NAME="FEATURES">1.1. Features</H2
+NAME="FEATURES"
+>1.1. Features</A
+></H2
 ><P
 > In addition to <SPAN
 CLASS="APPLICATION"
 ><P
 > In addition to <SPAN
 CLASS="APPLICATION"
@@ -115,8 +99,7 @@ CLASS="APPLICATION"
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
  <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
-> provides new features,
- some of them currently under development:</P
+> provides new features:</P
 ><P
 > <P
 ></P
 ><P
 > <P
 ></P
@@ -258,7 +241,7 @@ ACCESSKEY="N"
 WIDTH="33%"
 ALIGN="left"
 VALIGN="top"
 WIDTH="33%"
 ALIGN="left"
 VALIGN="top"
->Privoxy 3.1.1 User Manual</TD
+>Privoxy 3.0.3 User Manual</TD
 ><TD
 WIDTH="34%"
 ALIGN="center"
 ><TD
 WIDTH="34%"
 ALIGN="center"
index 43b0c07..5bfc1c9 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Quickstart to Using Privoxy</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Quickstart to Using Privoxy</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Note to Upgraders"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Note to Upgraders"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,9 +73,11 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="QUICKSTART">4. Quickstart to Using <SPAN
+NAME="QUICKSTART"
+>4. Quickstart to Using <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
+></A
 ></H1
 ><P
 > <P
 ></H1
 ><P
 > <P
@@ -140,13 +142,13 @@ CLASS="APPLICATION"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > as HTTP and
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > as HTTP and
-   HTTPS proxy by setting the proxy configuration for address of
-   <TT
+   HTTPS (SSL) proxy by setting the proxy configuration for address of
+   <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->127.0.0.1</TT
-> and port <TT
+>127.0.0.1</VAR
+> and port <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->8118</TT
+>8118</VAR
 >.
    (<SPAN
 CLASS="APPLICATION"
 >.
    (<SPAN
 CLASS="APPLICATION"
@@ -168,6 +170,11 @@ CLASS="APPLICATION"
 ><LI
 ><P
 >    Flush your browser's disk and memory caches, to remove any cached ad images.
 ><LI
 ><P
 >    Flush your browser's disk and memory caches, to remove any cached ad images.
+    If using <SPAN
+CLASS="APPLICATION"
+>Privoxy</SPAN
+> to manage cookies, you should 
+    remove any currently stored cookies too.
   </P
 ></LI
 ><LI
   </P
 ></LI
 ><LI
@@ -183,8 +190,7 @@ HREF="configuration.html"
 >Configuration section</A
 > for more
    configuration options, and how to customize your installation.
 >Configuration section</A
 > for more
    configuration options, and how to customize your installation.
-  </P
+ </P
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
@@ -222,6 +228,16 @@ CLASS="QUOTE"
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
+>   For easy access to Privoxy's most important controls, drag the provided
+   <A
+HREF="appendix.html#BOOKMARKLETS"
+>Bookmarklets</A
+> into your browser's
+   personal toolbar.
+  </P
+></LI
+><LI
+><P
 >   Please see the section <A
 HREF="contact.html"
 >Contacting the
 >   Please see the section <A
 HREF="contact.html"
 >Contacting the
@@ -242,7 +258,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="QUICKSTART-AD-BLOCKING">4.1. Quickstart to Ad Blocking</H2
+NAME="QUICKSTART-AD-BLOCKING"
+>4.1. Quickstart to Ad Blocking</A
+></H2
 ><P
 > Ad blocking is but one of <SPAN
 CLASS="APPLICATION"
 ><P
 > Ad blocking is but one of <SPAN
 CLASS="APPLICATION"
@@ -351,25 +369,25 @@ CLASS="APPLICATION"
  or a server somewhere else on the Internet. Complex web pages will have many
  such embedded URLs.</P
 ><P
  or a server somewhere else on the Internet. Complex web pages will have many
  such embedded URLs.</P
 ><P
-> The actions we need to know about for ad blocking are:  <TT
+> The actions we need to know about for ad blocking are:  <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
->, <TT
+></VAR
+>, <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-></TT
+></VAR
 >, and
 >, and
- <TT
+ <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
-></TT
+></VAR
 >:</P
 ><P
 > <P
 >:</P
 ><P
 > <P
@@ -377,12 +395,12 @@ HREF="actions-file.html#SET-IMAGE-BLOCKER"
 ><UL
 ><LI
 ><P
 ><UL
 ><LI
 ><P
->   <TT
+>   <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > - this action stops
    any contact between your browser and any URL patterns that match this
    action's configuration. It can be used for blocking ads, but also anything
 > - this action stops
    any contact between your browser and any URL patterns that match this
    action's configuration. It can be used for blocking ads, but also anything
@@ -396,12 +414,12 @@ CLASS="APPLICATION"
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
->   <TT
+>   <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-></TT
+></VAR
 > - 
    tells <SPAN
 CLASS="APPLICATION"
 > - 
    tells <SPAN
 CLASS="APPLICATION"
@@ -429,24 +447,24 @@ CLASS="QUOTE"
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
->   <TT
+>   <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#SET-IMAGE-BLOCKER"
 >set-image-blocker</A
-></TT
+></VAR
 > - tells
    <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > what to display in place of an ad image that
    has hit a block rule. For this to come into play, the URL must match a
 > - tells
    <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > what to display in place of an ad image that
    has hit a block rule. For this to come into play, the URL must match a
-   <TT
+   <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > action somewhere in the
    configuration, <SPAN
 CLASS="emphasis"
 > action somewhere in the
    configuration, <SPAN
 CLASS="emphasis"
@@ -455,12 +473,12 @@ CLASS="EMPHASIS"
 >and</I
 ></SPAN
 >, it must also match an
 >and</I
 ></SPAN
 >, it must also match an
-   <TT
+   <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#HANDLE-AS-IMAGE"
 >handle-as-image</A
-></TT
+></VAR
 > action.
   </P
 ><P
 > action.
   </P
 ><P
@@ -623,7 +641,9 @@ CLASS="GUIBUTTON"
 >  <DIV
 CLASS="FIGURE"
 ><A
 >  <DIV
 CLASS="FIGURE"
 ><A
-NAME="AEN391"><P
+NAME="AEN389"
+></A
+><P
 ><B
 >Figure 1. Actions Files in Use</B
 ></P
 ><B
 >Figure 1. Actions Files in Use</B
 ></P
@@ -640,12 +660,12 @@ SRC="../images/files-in-use.jpg"></P
 ><LI
 ><P
 >   You should have a section with only
 ><LI
 ><P
 >   You should have a section with only
-   <TT
+   <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > listed under 
    <SPAN
 CLASS="QUOTE"
 > listed under 
    <SPAN
 CLASS="QUOTE"
@@ -667,12 +687,12 @@ CLASS="QUOTE"
 >"Actions:"</SPAN
 >.
    This will bring up a list of all actions. Find
 >"Actions:"</SPAN
 >.
    This will bring up a list of all actions. Find
-   <TT
+   <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > near the top, and click
    in the <SPAN
 CLASS="QUOTE"
 > near the top, and click
    in the <SPAN
 CLASS="QUOTE"
@@ -689,12 +709,12 @@ CLASS="GUIBUTTON"
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
->   Now, in the <TT
+>   Now, in the <VAR
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
 CLASS="LITERAL"
 ><A
 HREF="actions-file.html#BLOCK"
 >block</A
-></TT
+></VAR
 > actions section,
    click the <SPAN
 CLASS="QUOTE"
 > actions section,
    click the <SPAN
 CLASS="QUOTE"
@@ -710,9 +730,9 @@ CLASS="GUIMENUITEM"
 >Copy Link Location</SPAN
 >"</SPAN
 >.
 >Copy Link Location</SPAN
 >"</SPAN
 >.
-   Remove the <TT
+   Remove the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->http://</TT
+>http://</VAR
 > at the beginning of the URL. Then, click
    <SPAN
 CLASS="QUOTE"
 > at the beginning of the URL. Then, click
    <SPAN
 CLASS="QUOTE"
index 8b91e33..a469870 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >See Also</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >See Also</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Privoxy Copyright, License and History"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Privoxy Copyright, License and History"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="SEEALSO">13. See Also</H1
+NAME="SEEALSO"
+>13. See Also</A
+></H1
 ><P
 > Other references and sites of interest to <SPAN
 CLASS="APPLICATION"
 ><P
 > Other references and sites of interest to <SPAN
 CLASS="APPLICATION"
index d9aae92..bc1b506 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Starting Privoxy</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Starting Privoxy</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Quickstart to Using Privoxy"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Quickstart to Using Privoxy"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,9 +73,11 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="STARTUP">5. Starting <SPAN
+NAME="STARTUP"
+>5. Starting <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
+></A
 ></H1
 ><P
 > Before launching <SPAN
 ></H1
 ><P
 > Before launching <SPAN
@@ -99,7 +101,9 @@ CLASS="APPLICATION"
 >  <DIV
 CLASS="FIGURE"
 ><A
 >  <DIV
 CLASS="FIGURE"
 ><A
-NAME="AEN442"><P
+NAME="AEN440"
+></A
+><P
 ><B
 >Figure 2. Proxy Configuration (Mozilla)</B
 ></P
 ><B
 >Figure 2. Proxy Configuration (Mozilla)</B
 ></P
@@ -212,7 +216,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-REDHAT">5.1. Red Hat and Conectiva</H2
+NAME="START-REDHAT"
+>5.1. Red Hat and Conectiva</A
+></H2
 ><P
 > We use a script. Note that Red Hat does not start Privoxy upon booting per
  default. It will use the file <TT
 ><P
 > We use a script. Note that Red Hat does not start Privoxy upon booting per
  default. It will use the file <TT
@@ -240,7 +246,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-DEBIAN">5.2. Debian</H2
+NAME="START-DEBIAN"
+>5.2. Debian</A
+></H2
 ><P
 > We use a script. Note that Debian starts Privoxy upon booting per
  default.  It will use the file
 ><P
 > We use a script. Note that Debian starts Privoxy upon booting per
  default.  It will use the file
@@ -269,7 +277,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-SUSE">5.3. SuSE</H2
+NAME="START-SUSE"
+>5.3. SuSE</A
+></H2
 ><P
 >We use a script. It will use the file <TT
 CLASS="FILENAME"
 ><P
 >We use a script. It will use the file <TT
 CLASS="FILENAME"
@@ -297,7 +307,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-WINDOWS">5.4. Windows</H2
+NAME="START-WINDOWS"
+>5.4. Windows</A
+></H2
 ><P
 >Click on the Privoxy Icon to start Privoxy. If no configuration file is
  specified on the command line, <SPAN
 ><P
 >Click on the Privoxy Icon to start Privoxy. If no configuration file is
  specified on the command line, <SPAN
@@ -315,7 +327,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-UNICES">5.5. Solaris, NetBSD, FreeBSD, HP-UX and others</H2
+NAME="START-UNICES"
+>5.5. Solaris, NetBSD, FreeBSD, HP-UX and others</A
+></H2
 ><P
 >Example Unix startup command:</P
 ><P
 ><P
 >Example Unix startup command:</P
 ><P
@@ -338,7 +352,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-OS2">5.6. OS/2</H2
+NAME="START-OS2"
+>5.6. OS/2</A
+></H2
 ><P
 > During installation, <SPAN
 CLASS="APPLICATION"
 ><P
 > During installation, <SPAN
 CLASS="APPLICATION"
@@ -359,20 +375,22 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-MACOSX">5.7. Mac OSX</H2
+NAME="START-MACOSX"
+>5.7. Mac OSX</A
+></H2
 ><P
 > During installation, <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is configured to
  start automatically when the system restarts.  To start Privoxy by hand,
 ><P
 > During installation, <SPAN
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is configured to
  start automatically when the system restarts.  To start Privoxy by hand,
- double-click on the <TT
+ double-click on the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->StartPrivoxy.command</TT
+>StartPrivoxy.command</VAR
 > icon in the
 > icon in the
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->/Library/Privoxy</TT
+>/Library/Privoxy</VAR
 > folder.  Or, type this command
  in the Terminal:</P
 ><P
 > folder.  Or, type this command
  in the Terminal:</P
 ><P
@@ -398,7 +416,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-AMIGAOS">5.8. AmigaOS</H2
+NAME="START-AMIGAOS"
+>5.8. AmigaOS</A
+></H2
 ><P
 > Start <SPAN
 CLASS="APPLICATION"
 ><P
 > Start <SPAN
 CLASS="APPLICATION"
@@ -428,7 +448,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="START-GENTOO">5.9. Gentoo</H2
+NAME="START-GENTOO"
+>5.9. Gentoo</A
+></H2
 ><P
 > A script is again used. It will use the file <TT
 CLASS="FILENAME"
 ><P
 > A script is again used. It will use the file <TT
 CLASS="FILENAME"
@@ -455,9 +477,9 @@ CLASS="SCREEN"
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is not automatically started at 
 CLASS="APPLICATION"
 >Privoxy</SPAN
 > is not automatically started at 
- boot time by default. You can change this with the <TT
+ boot time by default. You can change this with the <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->rc-update</TT
+>rc-update</VAR
 > 
  command.</P
 ><P
 > 
  command.</P
 ><P
@@ -482,7 +504,9 @@ CLASS="SECT2"
 ><H2
 CLASS="SECT2"
 ><A
 ><H2
 CLASS="SECT2"
 ><A
-NAME="CMDOPTIONS">5.10. Command Line Options</H2
+NAME="CMDOPTIONS"
+>5.10. Command Line Options</A
+></H2
 ><P
 > <SPAN
 CLASS="APPLICATION"
 ><P
 > <SPAN
 CLASS="APPLICATION"
@@ -603,6 +627,31 @@ CLASS="EMPHASIS"
 ></LI
 ><LI
 ><P
 ></LI
 ><LI
 ><P
+>   <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>--chroot</I
+></SPAN
+>
+  
+  </P
+><P
+>   Before changing to the user ID given in the <SPAN
+CLASS="emphasis"
+><I
+CLASS="EMPHASIS"
+>--user</I
+></SPAN
+> option, 
+   chroot to that user's home directory, i.e. make the kernel pretend to the Privoxy
+   process that the directory tree starts there. If set up carefully, this can limit 
+   the impact of possible vulnerabilities in Privoxy to the files contained in that hierarchy.
+   Unix only.
+  </P
+></LI
+><LI
+><P
 >    <SPAN
 CLASS="emphasis"
 ><I
 >    <SPAN
 CLASS="emphasis"
 ><I
index df64623..3446ee2 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Templates</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Templates</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="The Filter File"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="The Filter File"
@@ -38,7 +38,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -74,7 +74,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="TEMPLATES">10. Templates</H1
+NAME="TEMPLATES"
+>10. Templates</A
+></H1
 ><P
 > All <SPAN
 CLASS="APPLICATION"
 ><P
 > All <SPAN
 CLASS="APPLICATION"
@@ -146,15 +148,15 @@ CLASS="EMPHASIS"
 >Not recommended for the casual user</I
 ></SPAN
 >). Note that
 >Not recommended for the casual user</I
 ></SPAN
 >). Note that
- just like in configuration files, lines starting with <TT
+ just like in configuration files, lines starting with <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->#</TT
+>#</VAR
 > are
  ignored when the templates are filled in.</P
 ><P
 > are
  ignored when the templates are filled in.</P
 ><P
-> The place-holders are of the form <TT
+> The place-holders are of the form <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->@name@</TT
+>@name@</VAR
 >, and you will
  find a list of available symbols, which vary from template to template,
  in the comments at the start of each file. Note that these comments are not
 >, and you will
  find a list of available symbols, which vary from template to template,
  in the comments at the start of each file. Note that these comments are not
@@ -189,12 +191,12 @@ CLASS="SCREEN"
 ></P
 ><P
 > If the "unstable" symbol is set, everything in between and including
 ></P
 ><P
 > If the "unstable" symbol is set, everything in between and including
- <TT
+ <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->@if-unstable-start</TT
-> and <TT
+>@if-unstable-start</VAR
+> and <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->if-unstable-end@</TT
+>if-unstable-end@</VAR
 >
  will disappear, leaving nothing but an empty comment:</P
 ><P
 >
  will disappear, leaving nothing but an empty comment:</P
 ><P
@@ -212,9 +214,9 @@ CLASS="SCREEN"
 ></TABLE
 ></P
 ><P
 ></TABLE
 ></P
 ><P
-> There's also an if-then-else construct and an <TT
+> There's also an if-then-else construct and an <VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->#include</TT
+>#include</VAR
 >
  mechanism, but you'll sure find out if you are inclined to edit the
  templates ;-)</P
 >
  mechanism, but you'll sure find out if you are inclined to edit the
  templates ;-)</P
@@ -223,9 +225,9 @@ CLASS="LITERAL"
  <A
 HREF="http://config.privoxy.org/send-stylesheet"
 TARGET="_top"
  <A
 HREF="http://config.privoxy.org/send-stylesheet"
 TARGET="_top"
-><TT
+><VAR
 CLASS="LITERAL"
 CLASS="LITERAL"
->http://config.privoxy.org/send-stylesheet</TT
+>http://config.privoxy.org/send-stylesheet</VAR
 ></A
 >.
  This is, of course, locally served by <SPAN
 ></A
 >.
  This is, of course, locally served by <SPAN
index c14c1f9..36be7bc 100644 (file)
@@ -1,13 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <HTML
 ><HEAD
 ><TITLE
 >Note to Upgraders</TITLE
 ><META
 NAME="GENERATOR"
 <HTML
 ><HEAD
 ><TITLE
 >Note to Upgraders</TITLE
 ><META
 NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
-"><LINK
+CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
 REL="HOME"
 REL="HOME"
-TITLE="Privoxy 3.1.1 User Manual"
+TITLE="Privoxy 3.0.3 User Manual"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Installation"
 HREF="index.html"><LINK
 REL="PREVIOUS"
 TITLE="Installation"
@@ -37,7 +37,7 @@ CELLSPACING="0"
 ><TH
 COLSPAN="3"
 ALIGN="center"
 ><TH
 COLSPAN="3"
 ALIGN="center"
->Privoxy 3.1.1 User Manual</TH
+>Privoxy 3.0.3 User Manual</TH
 ></TR
 ><TR
 ><TD
 ></TR
 ><TR
 ><TD
@@ -73,7 +73,9 @@ CLASS="SECT1"
 ><H1
 CLASS="SECT1"
 ><A
 ><H1
 CLASS="SECT1"
 ><A
-NAME="UPGRADERSNOTE">3. Note to Upgraders</H1
+NAME="UPGRADERSNOTE"
+>3. Note to Upgraders</A
+></H1
 ><P
 > There are very significant changes from earlier 
  <SPAN
 ><P
 > There are very significant changes from earlier 
  <SPAN
similarity index 97%
rename from src/encode.c
rename to encode.c
index e4219f0..189dfee 100644 (file)
+++ b/encode.c
@@ -1,7 +1,7 @@
-const char encode_rcs[] = "$Id: encode.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $";
+const char encode_rcs[] = "$Id: encode.c,v 1.8 2002/03/26 22:29:54 swa Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/encode.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/encode.c,v $
  *
  * Purpose     :  Functions to encode and decode URLs, and also to
  *                encode cookies and HTML text.
  *
  * Purpose     :  Functions to encode and decode URLs, and also to
  *                encode cookies and HTML text.
@@ -33,9 +33,6 @@ const char encode_rcs[] = "$Id: encode.c,v 2.0 2002/06/04 14:34:21 jongfoster Ex
  *
  * Revisions   :
  *    $Log: encode.c,v $
  *
  * Revisions   :
  *    $Log: encode.c,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
- *
  *    Revision 1.8  2002/03/26 22:29:54  swa
  *    we have a new homepage!
  *
  *    Revision 1.8  2002/03/26 22:29:54  swa
  *    we have a new homepage!
  *
@@ -77,9 +74,7 @@ const char encode_rcs[] = "$Id: encode.c,v 2.0 2002/06/04 14:34:21 jongfoster Ex
 
 const char encode_h_rcs[] = ENCODE_H_VERSION;
 
 
 const char encode_h_rcs[] = ENCODE_H_VERSION;
 
-/**
- * Maps special characters in a URL to their equivalent % codes.
- */
+/* Maps special characters in a URL to their equivalent % codes. */
 static const char * const url_code_map[256] = {
    NULL, "%01", "%02", "%03", "%04", "%05", "%06", "%07", "%08", "%09",
    "%0A", "%0B", "%0C", "%0D", "%0E", "%0F", "%10", "%11", "%12", "%13",
 static const char * const url_code_map[256] = {
    NULL, "%01", "%02", "%03", "%04", "%05", "%06", "%07", "%08", "%09",
    "%0A", "%0B", "%0C", "%0D", "%0E", "%0F", "%10", "%11", "%12", "%13",
@@ -109,9 +104,7 @@ static const char * const url_code_map[256] = {
    "%FA", "%FB", "%FC", "%FD", "%FE", "%FF"
 };
 
    "%FA", "%FB", "%FC", "%FD", "%FE", "%FF"
 };
 
-/**
- * Maps special characters in HTML to their equivalent entities.
- */
+/* Maps special characters in HTML to their equivalent entites. */
 static const char * const html_code_map[256] = {
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 static const char * const html_code_map[256] = {
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -141,9 +134,7 @@ static const char * const html_code_map[256] = {
    NULL, NULL, NULL, NULL, NULL, NULL
 };
 
    NULL, NULL, NULL, NULL, NULL, NULL
 };
 
-/**
- * Maps special characters in a cookie to their equivalent % codes.
- */
+/* Maps special characters in a cookie to their equivalent % codes. */
 static const char * const cookie_code_map[256] = {
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
 static const char * const cookie_code_map[256] = {
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
similarity index 97%
rename from src/encode.h
rename to encode.h
index b810e42..ae91bbb 100644 (file)
+++ b/encode.h
@@ -3,7 +3,7 @@
 #define ENCODE_H_VERSION "$Id: encode.h,v 1.5 2002/03/26 22:29:54 swa Exp $"
 /*********************************************************************
  *
 #define ENCODE_H_VERSION "$Id: encode.h,v 1.5 2002/03/26 22:29:54 swa Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/encode.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/encode.h,v $
  *
  * Purpose     :  Functions to encode and decode URLs, and also to
  *                encode cookies and HTML text.
  *
  * Purpose     :  Functions to encode and decode URLs, and also to
  *                encode cookies and HTML text.
similarity index 91%
rename from src/errlog.c
rename to errlog.c
index c3985d3..48290a9 100644 (file)
+++ b/errlog.c
@@ -1,7 +1,7 @@
-const char errlog_rcs[] = "$Id: errlog.c,v 2.1 2002/09/25 12:51:21 oes Exp $";
+const char errlog_rcs[] = "$Id: errlog.c,v 1.40.2.4 2005/04/03 20:10:50 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/errlog.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/errlog.c,v $
  *
  * Purpose     :  Log errors to a designated destination in an elegant,
  *                printf-like fashion.
  *
  * Purpose     :  Log errors to a designated destination in an elegant,
  *                printf-like fashion.
@@ -33,11 +33,23 @@ const char errlog_rcs[] = "$Id: errlog.c,v 2.1 2002/09/25 12:51:21 oes Exp $";
  *
  * Revisions   :
  *    $Log: errlog.c,v $
  *
  * Revisions   :
  *    $Log: errlog.c,v $
- *    Revision 2.1  2002/09/25 12:51:21  oes
- *    Made log_error safe against NULL string arguments
+ *    Revision 1.40.2.4  2005/04/03 20:10:50  david__schmidt
+ *    Thanks to Jindrich Makovicka for a race condition fix for the log
+ *    file.  The race condition remains for non-pthread implementations.
+ *    Reference patch #1175720.
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.40.2.3  2003/03/07 03:41:04  david__schmidt
+ *    Wrapping all *_r functions (the non-_r versions of them) with mutex 
+ *    semaphores for OSX.  Hopefully this will take care of all of those pesky
+ *    crash reports.
+ *
+ *    Revision 1.40.2.2  2002/09/28 00:30:57  david__schmidt
+ *    Update error logging to give sane values for thread IDs on Mach kernels.
+ *    It's still a hack, but at least it looks farily normal.  We print the
+ *    absolute value of the first 4 bytes of the pthread_t modded with 1000.
+ *
+ *    Revision 1.40.2.1  2002/09/25 12:47:42  oes
+ *    Make log_error safe against NULL string arguments
  *
  *    Revision 1.40  2002/05/22 01:27:27  david__schmidt
  *
  *
  *    Revision 1.40  2002/05/22 01:27:27  david__schmidt
  *
@@ -287,6 +299,35 @@ static char *w32_socket_strerr(int errcode, char *tmp_buf);
 static char *os2_socket_strerr(int errcode, char *tmp_buf);
 #endif
 
 static char *os2_socket_strerr(int errcode, char *tmp_buf);
 #endif
 
+#ifdef FEATURE_PTHREAD
+static inline void lock_logfile()
+{
+   pthread_mutex_lock(&log_mutex);
+}
+static inline void unlock_logfile()
+{
+   pthread_mutex_unlock(&log_mutex);
+}
+static inline void lock_loginit()
+{
+   pthread_mutex_lock(&log_init_mutex);
+}
+static inline void unlock_loginit()
+{
+   pthread_mutex_unlock(&log_init_mutex);
+}
+#else /* ! FEATURE_PTHREAD */
+/*
+ * FIXME we need a cross-platform locking mechanism.
+ * The locking/unlocking functions below should be 
+ * fleshed out for non-pthread implementations.
+ */ 
+static inline void lock_logfile() {}
+static inline void unlock_logfile() {}
+static inline void lock_loginit() {}
+static inline void unlock_loginit() {}
+#endif
+
 /*********************************************************************
  *
  * Function    :  fatal_error
 /*********************************************************************
  *
  * Function    :  fatal_error
@@ -341,7 +382,7 @@ void init_error_log(const char *prog_name, const char *logfname, int debuglevel)
 {
    FILE *fp;
 
 {
    FILE *fp;
 
-   /* FIXME RACE HAZARD: should start critical section error_log_use here */
+   lock_loginit();
 
    /* set the logging detail level */
    debug = debuglevel | LOG_LEVEL_MINIMUM;
 
    /* set the logging detail level */
    debug = debuglevel | LOG_LEVEL_MINIMUM;
@@ -349,9 +390,13 @@ void init_error_log(const char *prog_name, const char *logfname, int debuglevel)
    if ((logfp != NULL) && (logfp != stderr))
    {
       log_error(LOG_LEVEL_INFO, "(Re-)Open logfile %s", logfname ? logfname : "none");
    if ((logfp != NULL) && (logfp != stderr))
    {
       log_error(LOG_LEVEL_INFO, "(Re-)Open logfile %s", logfname ? logfname : "none");
+      lock_logfile();
       fclose(logfp);
       fclose(logfp);
+   } else {
+      lock_logfile();
    }
    logfp = stderr;
    }
    logfp = stderr;
+   unlock_logfile();
 
    /* set the designated log file */
    if( logfname )
 
    /* set the designated log file */
    if( logfname )
@@ -364,7 +409,9 @@ void init_error_log(const char *prog_name, const char *logfname, int debuglevel)
       /* set logging to be completely unbuffered */
       setbuf(fp, NULL);
 
       /* set logging to be completely unbuffered */
       setbuf(fp, NULL);
 
+      lock_logfile();
       logfp = fp;
       logfp = fp;
+      unlock_logfile();
    }
 
    log_error(LOG_LEVEL_INFO, "Privoxy version " VERSION);
    }
 
    log_error(LOG_LEVEL_INFO, "Privoxy version " VERSION);
@@ -373,7 +420,7 @@ void init_error_log(const char *prog_name, const char *logfname, int debuglevel)
       log_error(LOG_LEVEL_INFO, "Program name: %s", prog_name);
    }
 
       log_error(LOG_LEVEL_INFO, "Program name: %s", prog_name);
    }
 
-   /* FIXME RACE HAZARD: should end critical section error_log_use here */
+   unlock_loginit();
 
 } /* init_error_log */
 
 
 } /* init_error_log */
 
@@ -423,6 +470,9 @@ void log_error(int loglevel, char *fmt, ...)
       return;
    }
 
       return;
    }
 
+   /* protect the whole function because of the static buffer (outbuf) */
+   lock_logfile();
+
    /* FIXME get current thread id */
 #ifdef FEATURE_PTHREAD
    this_thread = (long)pthread_self();
    /* FIXME get current thread id */
 #ifdef FEATURE_PTHREAD
    this_thread = (long)pthread_self();
@@ -475,41 +525,41 @@ void log_error(int loglevel, char *fmt, ...)
    switch (loglevel)
    {
       case LOG_LEVEL_ERROR:
    switch (loglevel)
    {
       case LOG_LEVEL_ERROR:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Error: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Error: ", this_thread);
          break;
       case LOG_LEVEL_FATAL:
          break;
       case LOG_LEVEL_FATAL:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Fatal error: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Fatal error: ", this_thread);
          break;
       case LOG_LEVEL_GPC:
          break;
       case LOG_LEVEL_GPC:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Request: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Request: ", this_thread);
          break;
       case LOG_LEVEL_CONNECT:
          break;
       case LOG_LEVEL_CONNECT:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Connect: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Connect: ", this_thread);
          break;
       case LOG_LEVEL_LOG:
          break;
       case LOG_LEVEL_LOG:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Writing: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Writing: ", this_thread);
          break;
       case LOG_LEVEL_HEADER:
          break;
       case LOG_LEVEL_HEADER:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Header: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Header: ", this_thread);
          break;
       case LOG_LEVEL_INFO:
          break;
       case LOG_LEVEL_INFO:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Info: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Info: ", this_thread);
          break;
       case LOG_LEVEL_RE_FILTER:
          break;
       case LOG_LEVEL_RE_FILTER:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Re-Filter: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Re-Filter: ", this_thread);
          break;
 #ifdef FEATURE_FORCE_LOAD
       case LOG_LEVEL_FORCE:
          break;
 #ifdef FEATURE_FORCE_LOAD
       case LOG_LEVEL_FORCE:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Force: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Force: ", this_thread);
          break;
 #endif /* def FEATURE_FORCE_LOAD */
 #ifdef FEATURE_FAST_REDIRECTS
       case LOG_LEVEL_REDIRECTS:
          break;
 #endif /* def FEATURE_FORCE_LOAD */
 #ifdef FEATURE_FAST_REDIRECTS
       case LOG_LEVEL_REDIRECTS:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Redirect: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Redirect: ", this_thread);
          break;
 #endif /* def FEATURE_FAST_REDIRECTS */
       case LOG_LEVEL_DEANIMATE:
          break;
 #endif /* def FEATURE_FAST_REDIRECTS */
       case LOG_LEVEL_DEANIMATE:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Gif-Deanimate: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Gif-Deanimate: ", this_thread);
          break;
       case LOG_LEVEL_CLF:
          outbuf = outbuf_save;
          break;
       case LOG_LEVEL_CLF:
          outbuf = outbuf_save;
@@ -518,14 +568,14 @@ void log_error(int loglevel, char *fmt, ...)
          break;
 #ifdef FEATURE_KILL_POPUPS
       case LOG_LEVEL_POPUPS:
          break;
 #ifdef FEATURE_KILL_POPUPS
       case LOG_LEVEL_POPUPS:
-         outc = sprintf(outbuf, "Privoxy(%05ld) Kill-Popups: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) Kill-Popups: ", this_thread);
          break;
 #endif /* def FEATURE_KILL_POPUPS */
       case LOG_LEVEL_CGI:
          break;
 #endif /* def FEATURE_KILL_POPUPS */
       case LOG_LEVEL_CGI:
-         outc = sprintf(outbuf, "Privoxy(%05ld) CGI: ", this_thread);
+         outc = sprintf(outbuf, "Privoxy(%08lx) CGI: ", this_thread);
          break;
       default:
          break;
       default:
-         outc = sprintf(outbuf, "Privoxy(%05ld) UNKNOWN LOG TYPE(%d): ", this_thread, loglevel);
+         outc = sprintf(outbuf, "Privoxy(%08lx) UNKNOWN LOG TYPE(%d): ", this_thread, loglevel);
          break;
    }
    
          break;
    }
    
@@ -600,16 +650,14 @@ void log_error(int loglevel, char *fmt, ...)
             else
             {
                /* Error */
             else
             {
                /* Error */
-               sprintf(outbuf, "Privoxy(%ld) Error: log_error(): Bad format string:\n"
+               sprintf(outbuf, "Privoxy(%08lx) Error: log_error(): Bad format string:\n"
                                "Format = \"%s\"\n"
                                "Exiting.", this_thread, fmt);
                                "Format = \"%s\"\n"
                                "Exiting.", this_thread, fmt);
-               /* FIXME RACE HAZARD: should start critical section error_log_use here */
                if( !logfp )
                {
                   logfp = stderr;
                }
                fputs(outbuf, logfp);
                if( !logfp )
                {
                   logfp = stderr;
                }
                fputs(outbuf, logfp);
-               /* FIXME RACE HAZARD: should end critical section error_log_use here */
                fatal_error(outbuf);
                /* Never get here */
                break;
                fatal_error(outbuf);
                /* Never get here */
                break;
@@ -763,16 +811,15 @@ void log_error(int loglevel, char *fmt, ...)
             }
             break;
          default:
             }
             break;
          default:
-            sprintf(outbuf, "Privoxy(%ld) Error: log_error(): Bad format string:\n"
+            sprintf(outbuf, "Privoxy(%08lx) Error: log_error(): Bad format string:\n"
                             "Format = \"%s\"\n"
                             "Exiting.", this_thread, fmt);
                             "Format = \"%s\"\n"
                             "Exiting.", this_thread, fmt);
-            /* FIXME RACE HAZARD: should start critical section error_log_use here */
             if( !logfp )
             {
                logfp = stderr;
             }
             fputs(outbuf_save, logfp);
             if( !logfp )
             {
                logfp = stderr;
             }
             fputs(outbuf_save, logfp);
-            /* FIXME RACE HAZARD: should end critical section error_log_use here */
+            unlock_logfile();
             fatal_error(outbuf_save);
             /* Never get here */
             break;
             fatal_error(outbuf_save);
             /* Never get here */
             break;
@@ -809,8 +856,6 @@ void log_error(int loglevel, char *fmt, ...)
       outbuf[outc] = '\0';
    }
 
       outbuf[outc] = '\0';
    }
 
-   /* FIXME RACE HAZARD: should start critical section error_log_use here */
-
    /* deal with glibc stupidity - it won't let you initialize logfp */
    if( !logfp )
    {
    /* deal with glibc stupidity - it won't let you initialize logfp */
    if( !logfp )
    {
@@ -825,7 +870,7 @@ void log_error(int loglevel, char *fmt, ...)
       /* Never get here */
    }
 
       /* Never get here */
    }
 
-   /* FIXME RACE HAZARD: should end critical section error_log_use here */
+   unlock_logfile();
 
 #if defined(_WIN32) && !defined(_WIN_CONSOLE)
    /* Write to display */
 
 #if defined(_WIN32) && !defined(_WIN_CONSOLE)
    /* Write to display */
similarity index 84%
rename from src/errlog.h
rename to errlog.h
index 3441fd2..5bb3ee7 100644 (file)
+++ b/errlog.h
@@ -1,9 +1,9 @@
 #ifndef ERRLOG_H_INCLUDED
 #define ERRLOG_H_INCLUDED
 #ifndef ERRLOG_H_INCLUDED
 #define ERRLOG_H_INCLUDED
-#define ERRLOG_H_VERSION "$Id: errlog.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define ERRLOG_H_VERSION "$Id: errlog.h,v 1.13.2.1 2002/08/05 17:57:06 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/errlog.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/errlog.h,v $
  *
  * Purpose     :  Log errors to a designated destination in an elegant,
  *                printf-like fashion.
  *
  * Purpose     :  Log errors to a designated destination in an elegant,
  *                printf-like fashion.
@@ -35,8 +35,8 @@
  *
  * Revisions   :
  *    $Log: errlog.h,v $
  *
  * Revisions   :
  *    $Log: errlog.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.13.2.1  2002/08/05 17:57:06  oes
+ *    Cosmetic change
  *
  *    Revision 1.13  2002/03/26 22:29:54  swa
  *    we have a new homepage!
  *
  *    Revision 1.13  2002/03/26 22:29:54  swa
  *    we have a new homepage!
@@ -136,57 +136,31 @@ extern "C" {
 
 /* Debug level for errors */
 
 
 /* Debug level for errors */
 
-/** Log GET/POST/CONNECT requests. */
-#define LOG_LEVEL_GPC        0x0001 
-
-/** Log connecting to the server. */
+#define LOG_LEVEL_GPC        0x0001
 #define LOG_LEVEL_CONNECT    0x0002
 #define LOG_LEVEL_CONNECT    0x0002
-
-/** Log ... what? FIXME. */
 #define LOG_LEVEL_IO         0x0004
 #define LOG_LEVEL_IO         0x0004
-
-/** Log header parsing and modifying. */
 #define LOG_LEVEL_HEADER     0x0008
 #define LOG_LEVEL_HEADER     0x0008
-
-/** Log ... what? FIXME. */
 #define LOG_LEVEL_LOG        0x0010
 #define LOG_LEVEL_LOG        0x0010
-
 #ifdef FEATURE_FORCE_LOAD
 #ifdef FEATURE_FORCE_LOAD
-/** Log forced page load feature. */
 #define LOG_LEVEL_FORCE      0x0020
 #endif /* def FEATURE_FORCE_LOAD */
 #define LOG_LEVEL_FORCE      0x0020
 #endif /* def FEATURE_FORCE_LOAD */
-
-/** Log PCRS feature. */
 #define LOG_LEVEL_RE_FILTER  0x0040
 #define LOG_LEVEL_RE_FILTER  0x0040
-
 #ifdef FEATURE_FAST_REDIRECTS
 #ifdef FEATURE_FAST_REDIRECTS
-/** Log fast redirects feature. */
 #define LOG_LEVEL_REDIRECTS  0x0080
 #endif /* def FEATURE_FAST_REDIRECTS */
 #define LOG_LEVEL_REDIRECTS  0x0080
 #endif /* def FEATURE_FAST_REDIRECTS */
-
-/** Log GIF deanimation. */
 #define LOG_LEVEL_DEANIMATE  0x0100
 
 #define LOG_LEVEL_DEANIMATE  0x0100
 
-/** Log in Common Log File format. Note that for properly formatted log files
-    you should disable all the other log settings. */
-#define LOG_LEVEL_CLF        0x0200
-
-/** Log popup-killing feature */
+#define LOG_LEVEL_CLF        0x0200 /* Common Log File format */
 #ifdef FEATURE_KILL_POPUPS
 #ifdef FEATURE_KILL_POPUPS
-#define LOG_LEVEL_POPUPS     0x0400
+#define LOG_LEVEL_POPUPS     0x0400 /* Kill Popups */
 #endif /* def FEATURE_KILL_POPUPS */
 
 #endif /* def FEATURE_KILL_POPUPS */
 
-/** Log CGI and template handling features */
-#define LOG_LEVEL_CGI   0x0800
+#define LOG_LEVEL_CGI        0x0800 /* CGI / templates */
 
 
-/** Log informative messages (program version etc). */
+/* Following are always on: */
 #define LOG_LEVEL_INFO    0x1000
 #define LOG_LEVEL_INFO    0x1000
-
-/** Log error messages. */
 #define LOG_LEVEL_ERROR   0x2000
 #define LOG_LEVEL_ERROR   0x2000
-
-/** Write a message to the log and exit the program. */
-#define LOG_LEVEL_FATAL   0x4000
+#define LOG_LEVEL_FATAL   0x4000 /* Exits after writing log */
 
 extern void init_error_log(const char *prog_name, const char *logfname, int debuglevel);
 extern void log_error(int loglevel, char *fmt, ...);
 
 extern void init_error_log(const char *prog_name, const char *logfname, int debuglevel);
 extern void log_error(int loglevel, char *fmt, ...);
similarity index 91%
rename from src/filters.c
rename to filters.c
index 55d946e..744af6a 100644 (file)
+++ b/filters.c
@@ -1,7 +1,7 @@
-const char filters_rcs[] = "$Id: filters.c,v 2.6 2003/09/25 02:37:32 david__schmidt Exp $";
+const char filters_rcs[] = "$Id: filters.c,v 1.58.2.9 2006/01/29 23:10:56 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/filters.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/filters.c,v $
  *
  * Purpose     :  Declares functions to parse/crunch headers and pages.
  *                Functions declared include:
  *
  * Purpose     :  Declares functions to parse/crunch headers and pages.
  *                Functions declared include:
@@ -39,41 +39,43 @@ const char filters_rcs[] = "$Id: filters.c,v 2.6 2003/09/25 02:37:32 david__schm
  *
  * Revisions   :
  *    $Log: filters.c,v $
  *
  * Revisions   :
  *    $Log: filters.c,v $
- *    Revision 2.6  2003/09/25 02:37:32  david__schmidt
- *    Feature request 595948: Re-Filter logging in single line
- *
- *    Revision 2.5  2003/09/22 00:33:01  david__schmidt
- *    Enable sending a custom 'blocked' image.  Shows up as
- *    "image-blocker-custom-file" parameter in config, and
- *    "+set-image-blocker{custom}" in action files.
- *
- *    Revision 2.4  2003/01/21 02:49:27  david__schmidt
- *    Developer TODO 612294: src: C++ keyword as variable name
- *    I changed all ocurrences of 'new' to 'new_something' wherever I found
- *    one.  I also brought up all the source files in MSDEV to see if I could
- *    spot any highlighted keywords that really were variables.  Non-scientific,
- *    but at least I tried. :-)
- *
- *    Revision 2.3  2002/12/28 03:58:19  david__schmidt
- *    Initial drop of dashboard instrumentation - enabled with
- *    --enable-activity-console
- *
- *    Revision 2.2  2002/09/04 15:38:24  oes
- *    Synced with the stable branch:
- *        Revision 1.58.2.2  2002/08/01 17:18:28  oes
- *        Fixed BR 537651 / SR 579724 (MSIE image detect improper for IE/Mac)
- *
- *        Revision 1.58.2.1  2002/07/26 15:18:53  oes
- *        - Bugfix: Executing a filters without jobs no longer results in
- *          turing off *all* filters.
- *        - Security fix: Malicious web servers can't cause a seg fault
- *          through bogus chunk sizes anymore
- *
- *    Revision 2.1  2002/08/26 11:08:18  sarantis
- *    Fix typo.
- *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.58.2.9  2006/01/29 23:10:56  david__schmidt
+ *    Multiple filter file support
+ *
+ *    Revision 1.58.2.8  2005/05/07 21:50:55  david__schmidt
+ *    A few memory leaks plugged (mostly on error paths)
+ *
+ *    Revision 1.58.2.7  2004/10/03 12:53:32  david__schmidt
+ *    Add the ability to check jpeg images for invalid
+ *    lengths of comment blocks.  Defensive strategy
+ *    against the exploit:
+ *       Microsoft Security Bulletin MS04-028
+ *       Buffer Overrun in JPEG Processing (GDI+) Could
+ *       Allow Code Execution (833987)
+ *    Enabled with +inspect-jpegs in actions files.
+ *
+ *    Revision 1.58.2.6  2003/12/06 22:18:27  gliptak
+ *    Correcting compile problem with FEATURE_IMAGE_BLOCKING
+ *
+ *    Revision 1.58.2.5  2003/11/11 13:10:31  oes
+ *    Fixed bug #839859: "See why" link URL now gets url-encoded.
+ *
+ *    Revision 1.58.2.4  2003/02/28 12:52:45  oes
+ *    Fixed a typo
+ *
+ *    Revision 1.58.2.3  2002/09/25 14:51:51  oes
+ *    Added basic support for OPTIONS and TRACE HTTP methods:
+ *    New function direct_response which handles OPTIONS and
+ *    TRACE requests whose Max-Forwards header field is zero.
+ *
+ *    Revision 1.58.2.2  2002/08/01 17:18:28  oes
+ *    Fixed BR 537651 / SR 579724 (MSIE image detect improper for IE/Mac)
+ *
+ *    Revision 1.58.2.1  2002/07/26 15:18:53  oes
+ *    - Bugfix: Executing a filters without jobs no longer results in
+ *      turing off *all* filters.
+ *    - Security fix: Malicious web servers can't cause a seg fault
+ *      through bogus chunk sizes anymore
  *
  *    Revision 1.58  2002/04/24 02:11:17  oes
  *    Jon's multiple AF patch: url_actions now evaluates rules
  *
  *    Revision 1.58  2002/04/24 02:11:17  oes
  *    Jon's multiple AF patch: url_actions now evaluates rules
@@ -252,7 +254,7 @@ const char filters_rcs[] = "$Id: filters.c,v 2.6 2003/09/25 02:37:32 david__schm
  *       generic content modification interface of pcrs_filter_response
  *       and acts as a wrapper to deanimate.c:gif_deanimate()
  *     - Renamed re_process_buffer to pcrs_filter_response
  *       generic content modification interface of pcrs_filter_response
  *       and acts as a wrapper to deanimate.c:gif_deanimate()
  *     - Renamed re_process_buffer to pcrs_filter_response
- *     - pcrs_filter_response now returns NULL on failure
+ *     - pcrs_filter_response now returns NULL on failiure
  *     - Removed all #ifdef PCRS
  *
  *    Revision 1.20  2001/07/01 17:01:04  oes
  *     - Removed all #ifdef PCRS
  *
  *    Revision 1.20  2001/07/01 17:01:04  oes
@@ -471,9 +473,7 @@ const char filters_rcs[] = "$Id: filters.c,v 2.6 2003/09/25 02:37:32 david__schm
 #include "list.h"
 #include "deanimate.h"
 #include "urlmatch.h"
 #include "list.h"
 #include "deanimate.h"
 #include "urlmatch.h"
-#ifdef FEATURE_ACTIVITY_CONSOLE
-#include "stats.h"
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
+
 #ifdef _WIN32
 #include "win32.h"
 #endif
 #ifdef _WIN32
 #include "win32.h"
 #endif
@@ -539,9 +539,6 @@ int block_acl(struct access_control_addr *dst, struct client_state *csp)
             }
             else
             {
             }
             else
             {
-#ifdef FEATURE_ACTIVITY_CONSOLE
-               accumulate_stats(STATS_ACL_RESTRICT, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
                return(1);
             }
          }
                return(1);
             }
          }
@@ -723,9 +720,6 @@ int match_portlist(const char *portlist, int port)
  *********************************************************************/
 struct http_response *block_url(struct client_state *csp)
 {
  *********************************************************************/
 struct http_response *block_url(struct client_state *csp)
 {
-#ifdef FEATURE_IMAGE_BLOCKING
-   char *p;
-#endif /* def FEATURE_IMAGE_BLOCKING */
    struct http_response *rsp;
 
    /*
    struct http_response *rsp;
 
    /*
@@ -752,6 +746,7 @@ struct http_response *block_url(struct client_state *csp)
    if (((csp->action->flags & ACTION_IMAGE_BLOCKER) != 0)
         && is_imageurl(csp))
    {
    if (((csp->action->flags & ACTION_IMAGE_BLOCKER) != 0)
         && is_imageurl(csp))
    {
+         char *p;
       /* determine HOW images should be blocked */
       p = csp->action->string[ACTION_STRING_IMAGE_BLOCKER];
 
       /* determine HOW images should be blocked */
       p = csp->action->string[ACTION_STRING_IMAGE_BLOCKER];
 
@@ -760,9 +755,6 @@ struct http_response *block_url(struct client_state *csp)
       /* and handle accordingly: */
       if ((p == NULL) || (0 == strcmpic(p, "pattern")))
       {
       /* and handle accordingly: */
       if ((p == NULL) || (0 == strcmpic(p, "pattern")))
       {
-#ifdef FEATURE_ACTIVITY_CONSOLE
-         accumulate_stats(STATS_IMAGE_BLOCK, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
          rsp->body = bindup(image_pattern_data, image_pattern_length);
          if (rsp->body == NULL)
          {
          rsp->body = bindup(image_pattern_data, image_pattern_length);
          if (rsp->body == NULL)
          {
@@ -780,9 +772,6 @@ struct http_response *block_url(struct client_state *csp)
 
       else if (0 == strcmpic(p, "blank"))
       {
 
       else if (0 == strcmpic(p, "blank"))
       {
-#ifdef FEATURE_ACTIVITY_CONSOLE
-         accumulate_stats(STATS_IMAGE_BLOCK, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
          rsp->body = bindup(image_blank_data, image_blank_length);
          if (rsp->body == NULL)
          {
          rsp->body = bindup(image_blank_data, image_blank_length);
          if (rsp->body == NULL)
          {
@@ -798,23 +787,6 @@ struct http_response *block_url(struct client_state *csp)
          }
       }
 
          }
       }
 
-      else if (0 == strcmpic(p, "custom"))
-      {
-         rsp->body = bindup(csp->config->image_blocker_data, csp->config->image_blocker_length);
-         if (rsp->body == NULL)
-         {
-            free_http_response(rsp);
-            return cgi_error_memory();
-         }
-         rsp->content_length = csp->config->image_blocker_length;
-
-         if (enlist_unique_header(rsp->headers, "Content-Type", csp->config->image_blocker_format))
-         {
-            free_http_response(rsp);
-            return cgi_error_memory();
-         }
-      }
-
       else
       {
          rsp->status = strdup("302 Local Redirect from Privoxy");
       else
       {
          rsp->status = strdup("302 Local Redirect from Privoxy");
@@ -865,6 +837,7 @@ struct http_response *block_url(struct client_state *csp)
    {
       jb_err err;
       struct map * exports;
    {
       jb_err err;
       struct map * exports;
+      char *p;
 
       /*
        * Workaround for stupid Netscape bug which prevents
 
       /*
        * Workaround for stupid Netscape bug which prevents
@@ -909,6 +882,7 @@ struct http_response *block_url(struct client_state *csp)
       if (!err) err = map(exports, "protocol", 1, csp->http->ssl ? "https://" : "http://", 1);
       if (!err) err = map(exports, "hostport", 1, html_encode(csp->http->hostport), 0);
       if (!err) err = map(exports, "path", 1, html_encode(csp->http->path), 0);
       if (!err) err = map(exports, "protocol", 1, csp->http->ssl ? "https://" : "http://", 1);
       if (!err) err = map(exports, "hostport", 1, html_encode(csp->http->hostport), 0);
       if (!err) err = map(exports, "path", 1, html_encode(csp->http->path), 0);
+      if (!err) err = map(exports, "path-ue", 1, url_encode(csp->http->path), 0);
 
       if (err)
       {
 
       if (err)
       {
@@ -1010,6 +984,7 @@ struct http_response *trust_url(struct client_state *csp)
       string_append(&p, buf);
    }
    err = map(exports, "trusted-referrers", 1, p, 0);
       string_append(&p, buf);
    }
    err = map(exports, "trusted-referrers", 1, p, 0);
+   freez(p);
 
    if (err)
    {
 
    if (err)
    {
@@ -1032,6 +1007,7 @@ struct http_response *trust_url(struct client_state *csp)
          string_append(&p, buf);
       }
       err = map(exports, "trust-info", 1, p, 0);
          string_append(&p, buf);
       }
       err = map(exports, "trust-info", 1, p, 0);
+      freez(p);
    }
    else
    {
    }
    else
    {
@@ -1325,15 +1301,17 @@ int is_untrusted_url(struct client_state *csp)
 char *pcrs_filter_response(struct client_state *csp)
 {
    int hits=0;
 char *pcrs_filter_response(struct client_state *csp)
 {
    int hits=0;
-   size_t size, prev_size;
+   size_t size;
 
 
-   char *old_buf = csp->iob->cur, *new_buf = NULL;
+   char *old = csp->iob->cur, *new = NULL;
    pcrs_job *job;
 
    struct file_list *fl;
    struct re_filterfile_spec *b;
    struct list_entry *filtername;
 
    pcrs_job *job;
 
    struct file_list *fl;
    struct re_filterfile_spec *b;
    struct list_entry *filtername;
 
+   int i, found_filters = 0;
+
    /* 
     * Sanity first
     */
    /* 
     * Sanity first
     */
@@ -1343,10 +1321,26 @@ char *pcrs_filter_response(struct client_state *csp)
    }
    size = csp->iob->eod - csp->iob->cur;
 
    }
    size = csp->iob->eod - csp->iob->cur;
 
-   if ( ( NULL == (fl = csp->rlist) ) || ( NULL == fl->f) )
+   /*
+    * Need to check the set of re_filterfiles...
+    */
+   for (i = 0; i < MAX_AF_FILES; i++)
+   {
+      fl = csp->rlist[i];
+      if (NULL != fl)
+      {
+         if (NULL != fl->f)
+         {
+           found_filters = 1;
+           break;
+         }
+      }
+   }
+
+   if (0 == found_filters)
    {
       log_error(LOG_LEVEL_ERROR, "Unable to get current state of regexp filtering.");
    {
       log_error(LOG_LEVEL_ERROR, "Unable to get current state of regexp filtering.");
-      return(NULL);
+         return(NULL);
    }
 
    /*
    }
 
    /*
@@ -1364,6 +1358,11 @@ char *pcrs_filter_response(struct client_state *csp)
       csp->flags |= CSP_FLAG_MODIFIED;
    }
 
       csp->flags |= CSP_FLAG_MODIFIED;
    }
 
+   for (i = 0; i < MAX_AF_FILES; i++)
+   {
+     fl = csp->rlist[i];
+     if ((NULL == fl) || (NULL == fl->f))
+       break;
    /*
     * For all applying +filter actions, look if a filter by that
     * name exists and if yes, execute it's pcrs_joblist on the
    /*
     * For all applying +filter actions, look if a filter by that
     * name exists and if yes, execute it's pcrs_joblist on the
@@ -1384,22 +1383,23 @@ char *pcrs_filter_response(struct client_state *csp)
                continue;
             }
 
                continue;
             }
 
-            prev_size = size;
+            log_error(LOG_LEVEL_RE_FILTER, "re_filtering %s%s (size %d) with filter %s...",
+                      csp->http->hostport, csp->http->path, size, b->name);
+
             /* Apply all jobs from the joblist */
             for (job = b->joblist; NULL != job; job = job->next)
             {
             /* Apply all jobs from the joblist */
             for (job = b->joblist; NULL != job; job = job->next)
             {
-               current_hits += pcrs_execute(job, old_buf, size, &new_buf, &size);
-               if (old_buf != csp->iob->cur) free(old_buf);
-               old_buf=new_buf;
+               current_hits += pcrs_execute(job, old, size, &new, &size);
+               if (old != csp->iob->cur) free(old);
+               old=new;
             }
 
             }
 
-            log_error(LOG_LEVEL_RE_FILTER, "re_filtering %s%s (size %d) with filter %s produced %d hits (new size %d).",
-                      csp->http->hostport, csp->http->path, prev_size, b->name, current_hits, size);
-
+            log_error(LOG_LEVEL_RE_FILTER, " ...produced %d hits (new size %d).", current_hits, size);
             hits += current_hits;
          }
       }
    }
             hits += current_hits;
          }
       }
    }
+   }
 
    /*
     * If there were no hits, destroy our copy and let
 
    /*
     * If there were no hits, destroy our copy and let
@@ -1407,19 +1407,15 @@ char *pcrs_filter_response(struct client_state *csp)
     */
    if (!hits)
    {
     */
    if (!hits)
    {
-      free(new_buf);
+      free(new);
       return(NULL);
    }
       return(NULL);
    }
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   else
-     accumulate_stats(STATS_FILTER, hits);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
 
    csp->flags |= CSP_FLAG_MODIFIED;
    csp->content_length = size;
    IOB_RESET(csp);
 
 
    csp->flags |= CSP_FLAG_MODIFIED;
    csp->content_length = size;
    IOB_RESET(csp);
 
-   return(new_buf);
+   return(new);
 
 }
 
 
 }
 
@@ -1485,9 +1481,6 @@ char *gif_deanimate_response(struct client_state *csp)
       }
       else
       {
       }
       else
       {
-#ifdef FEATURE_ACTIVITY_CONSOLE
-         accumulate_stats(STATS_GIF_DEANIMATE, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
          log_error(LOG_LEVEL_DEANIMATE, "Success! GIF shrunk from %d bytes to %d.", size, out->offset);
       }
       csp->content_length = out->offset;
          log_error(LOG_LEVEL_DEANIMATE, "Success! GIF shrunk from %d bytes to %d.", size, out->offset);
       }
       csp->content_length = out->offset;
@@ -1661,7 +1654,7 @@ void url_actions(struct http_request *http,
 
    init_current_action(csp->action);
 
 
    init_current_action(csp->action);
 
-   for (i = 0; i < MAX_ACTION_FILES; i++)
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
       if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL))
       {
    {
       if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL))
       {
@@ -1746,6 +1739,63 @@ const struct forward_spec * forward_url(struct http_request *http,
 }
 
 
 }
 
 
+/*********************************************************************
+ *
+ * Function    :  direct_response 
+ *
+ * Description :  Check if Max-Forwards == 0 for an OPTIONS or TRACE
+ *                request and if so, return a HTTP 501 to the client.
+ *
+ *                FIXME: I have a stupid name and I should handle the
+ *                requests properly. Still, what we do here is rfc-
+ *                compliant, whereas ignoring or forwarding are not.
+ *
+ * Parameters  :  
+ *          1  :  csp = Current client state (buffers, headers, etc...)
+ *
+ * Returns     :  http_response if , NULL if nonmatch or handler fail
+ *
+ *********************************************************************/
+struct http_response *direct_response(struct client_state *csp)
+{
+   struct http_response *rsp;
+   struct list_entry *p;
+
+   if ((0 == strcmpic(csp->http->gpc, "trace"))
+      || (0 == strcmpic(csp->http->gpc, "options")))
+   {
+      for (p = csp->headers->first; (p != NULL) ; p = p->next)
+      {
+         if (!strncmp("Max-Forwards:", p->str, 13)
+             && (*(p->str+13) != '\0') && (atoi(p->str+13) == 0))
+         {
+            /* FIXME: We could handle at least TRACE here,
+               but that would require a verbatim copy of
+               the request which we don't have anymore */
+
+            log_error(LOG_LEVEL_HEADER, "Found Max-Forwards:0 in OPTIONS or TRACE request -- Returning 501");
+
+            /* Get mem for response or fail*/
+            if (NULL == (rsp = alloc_http_response()))
+            {
+               return cgi_error_memory();
+            }
+            
+            if (NULL == (rsp->status = strdup("501 Not Implemented")))
+            {
+               free_http_response(rsp);
+               return cgi_error_memory();
+            }
+
+            rsp->is_static = 1;
+            return(finish_http_response(rsp));
+         }
+      }
+   }
+   return NULL;
+}
+
+
 /*
   Local Variables:
   tab-width: 3
 /*
   Local Variables:
   tab-width: 3
similarity index 92%
rename from src/filters.h
rename to filters.h
index 026860a..e577fe6 100644 (file)
+++ b/filters.h
@@ -1,9 +1,9 @@
 #ifndef FILTERS_H_INCLUDED
 #define FILTERS_H_INCLUDED
 #ifndef FILTERS_H_INCLUDED
 #define FILTERS_H_INCLUDED
-#define FILTERS_H_VERSION "$Id: filters.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define FILTERS_H_VERSION "$Id: filters.h,v 1.20.2.2 2004/10/03 12:53:32 david__schmidt Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/filters.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/filters.h,v $
  *
  * Purpose     :  Declares functions to parse/crunch headers and pages.
  *                Functions declared include:
  *
  * Purpose     :  Declares functions to parse/crunch headers and pages.
  *                Functions declared include:
  *
  * Revisions   :
  *    $Log: filters.h,v $
  *
  * Revisions   :
  *    $Log: filters.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.20.2.2  2004/10/03 12:53:32  david__schmidt
+ *    Add the ability to check jpeg images for invalid
+ *    lengths of comment blocks.  Defensive strategy
+ *    against the exploit:
+ *       Microsoft Security Bulletin MS04-028
+ *       Buffer Overrun in JPEG Processing (GDI+) Could
+ *       Allow Code Execution (833987)
+ *    Enabled with +inspect-jpegs in actions files.
+ *
+ *    Revision 1.20.2.1  2002/09/25 14:51:51  oes
+ *    Added basic support for OPTIONS and TRACE HTTP methods:
+ *    New function direct_response which handles OPTIONS and
+ *    TRACE requests whose Max-Forwards header field is zero.
  *
  *    Revision 1.20  2002/04/02 14:56:16  oes
  *    Bugfix: is_untrusted_url() and trust_url() now depend on FEATURE_TRUST, not FEATURE_COOKIE_JAR
  *
  *    Revision 1.20  2002/04/02 14:56:16  oes
  *    Bugfix: is_untrusted_url() and trust_url() now depend on FEATURE_TRUST, not FEATURE_COOKIE_JAR
@@ -263,6 +274,12 @@ extern char *gif_deanimate_response(struct client_state *csp);
 extern char *jpeg_inspect_response(struct client_state *csp);
 extern int remove_chunked_transfer_coding(char *buffer, const size_t size);
 
 extern char *jpeg_inspect_response(struct client_state *csp);
 extern int remove_chunked_transfer_coding(char *buffer, const size_t size);
 
+/*
+ * Handling Max-Forwards:
+ */
+extern struct http_response *direct_response( struct client_state *csp);
+
+
 /*
  * Solaris fix:
  */
 /*
  * Solaris fix:
  */
similarity index 92%
rename from src/gateway.c
rename to gateway.c
index 22f9f7b..3a03850 100644 (file)
+++ b/gateway.c
@@ -1,7 +1,7 @@
-const char gateway_rcs[] = "$Id: gateway.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $";
+const char gateway_rcs[] = "$Id: gateway.c,v 1.16 2002/05/12 21:36:29 jongfoster Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/gateway.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/gateway.c,v $
  *
  * Purpose     :  Contains functions to connect to a server, possibly
  *                using a "forwarder" (i.e. HTTP proxy and/or a SOCKS4
  *
  * Purpose     :  Contains functions to connect to a server, possibly
  *                using a "forwarder" (i.e. HTTP proxy and/or a SOCKS4
@@ -34,9 +34,6 @@ const char gateway_rcs[] = "$Id: gateway.c,v 2.0 2002/06/04 14:34:21 jongfoster
  *
  * Revisions   :
  *    $Log: gateway.c,v $
  *
  * Revisions   :
  *    $Log: gateway.c,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
- *
  *    Revision 1.16  2002/05/12 21:36:29  jongfoster
  *    Correcting function comments
  *
  *    Revision 1.16  2002/05/12 21:36:29  jongfoster
  *    Correcting function comments
  *
@@ -161,38 +158,29 @@ static jb_socket socks4_connect(const struct forward_spec * fwd,
                                 struct client_state *csp);
 
 
                                 struct client_state *csp);
 
 
-/** SOCKS command code. */
 #define SOCKS_REQUEST_GRANTED          90
 #define SOCKS_REQUEST_GRANTED          90
-
-/** SOCKS command code. */
 #define SOCKS_REQUEST_REJECT           91
 #define SOCKS_REQUEST_REJECT           91
-
-/** SOCKS command code. */
 #define SOCKS_REQUEST_IDENT_FAILED     92
 #define SOCKS_REQUEST_IDENT_FAILED     92
-
-/** SOCKS command code. */
 #define SOCKS_REQUEST_IDENT_CONFLICT   93
 
 #define SOCKS_REQUEST_IDENT_CONFLICT   93
 
-
-/** Structure of a socks client operation */
+/* structure of a socks client operation */
 struct socks_op {
 struct socks_op {
-   unsigned char vn;          /**< Socks version number */
-   unsigned char cd;          /**< Command code */
-   unsigned char dstport[2];  /**< Destination port */
-   unsigned char dstip[4];    /**< Destination address */
-   unsigned char userid;      /**< First byte of userid */
+   unsigned char vn;          /* socks version number */
+   unsigned char cd;          /* command code */
+   unsigned char dstport[2];  /* destination port */
+   unsigned char dstip[4];    /* destination address */
+   unsigned char userid;      /* first byte of userid */
    /* more bytes of the userid follow, terminated by a NULL */
 };
 
    /* more bytes of the userid follow, terminated by a NULL */
 };
 
-/** Structure of a socks server reply */
+/* structure of a socks server reply */
 struct socks_reply {
 struct socks_reply {
-   unsigned char vn;          /**< Socks version number */
-   unsigned char cd;          /**< Command code */
-   unsigned char dstport[2];  /**< Destination port */
-   unsigned char dstip[4];    /**< Destination address */
+   unsigned char vn;          /* socks version number */
+   unsigned char cd;          /* command code */
+   unsigned char dstport[2];  /* destination port */
+   unsigned char dstip[4];    /* destination address */
 };
 
 };
 
-/** The SOCKS user ID to use */
 static const char socks_userid[] = "anonymous";
 
 
 static const char socks_userid[] = "anonymous";
 
 
similarity index 98%
rename from src/gateway.h
rename to gateway.h
index 8b39690..b887da8 100644 (file)
+++ b/gateway.h
@@ -3,7 +3,7 @@
 #define GATEWAY_H_VERSION "$Id: gateway.h,v 1.7 2002/03/26 22:29:54 swa Exp $"
 /*********************************************************************
  *
 #define GATEWAY_H_VERSION "$Id: gateway.h,v 1.7 2002/03/26 22:29:54 swa Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/gateway.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/gateway.h,v $
  *
  * Purpose     :  Contains functions to connect to a server, possibly
  *                using a "gateway" (i.e. HTTP proxy and/or SOCKS4
  *
  * Purpose     :  Contains functions to connect to a server, possibly
  *                using a "gateway" (i.e. HTTP proxy and/or SOCKS4
similarity index 100%
rename from src/icons/ico00001.ico
rename to icons/ico00001.ico
similarity index 100%
rename from src/icons/ico00002.ico
rename to icons/ico00002.ico
similarity index 100%
rename from src/icons/ico00003.ico
rename to icons/ico00003.ico
similarity index 100%
rename from src/icons/ico00004.ico
rename to icons/ico00004.ico
similarity index 100%
rename from src/icons/ico00005.ico
rename to icons/ico00005.ico
similarity index 100%
rename from src/icons/ico00006.ico
rename to icons/ico00006.ico
similarity index 100%
rename from src/icons/ico00007.ico
rename to icons/ico00007.ico
similarity index 100%
rename from src/icons/ico00008.ico
rename to icons/ico00008.ico
similarity index 100%
rename from src/icons/idle.ico
rename to icons/idle.ico
similarity index 100%
rename from src/icons/os2.ico
rename to icons/os2.ico
similarity index 100%
rename from src/icons/os20.ico
rename to icons/os20.ico
similarity index 100%
rename from src/icons/os21.ico
rename to icons/os21.ico
similarity index 100%
rename from src/icons/os22.ico
rename to icons/os22.ico
similarity index 100%
rename from src/icons/os23.ico
rename to icons/os23.ico
similarity index 100%
rename from src/icons/os24.ico
rename to icons/os24.ico
similarity index 100%
rename from src/icons/os25.ico
rename to icons/os25.ico
similarity index 100%
rename from src/icons/os26.ico
rename to icons/os26.ico
similarity index 100%
rename from src/icons/os27.ico
rename to icons/os27.ico
similarity index 100%
rename from src/icons/os28.ico
rename to icons/os28.ico
similarity index 100%
rename from src/icons/privoxy.ico
rename to icons/privoxy.ico
similarity index 92%
rename from src/jbsockets.c
rename to jbsockets.c
index 0227036..2cf89e9 100644 (file)
@@ -1,7 +1,7 @@
-const char jbsockets_rcs[] = "$Id: jbsockets.c,v 2.1 2002/12/30 19:56:16 david__schmidt Exp $";
+const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.35.2.8 2006/01/21 16:16:08 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/jbsockets.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/jbsockets.c,v $
  *
  * Purpose     :  Contains wrappers for system-specific sockets code,
  *                so that the rest of Junkbuster can be more
  *
  * Purpose     :  Contains wrappers for system-specific sockets code,
  *                so that the rest of Junkbuster can be more
@@ -35,18 +35,32 @@ const char jbsockets_rcs[] = "$Id: jbsockets.c,v 2.1 2002/12/30 19:56:16 david__
  *
  * Revisions   :
  *    $Log: jbsockets.c,v $
  *
  * Revisions   :
  *    $Log: jbsockets.c,v $
- *    Revision 2.1  2002/12/30 19:56:16  david__schmidt
- *    End of initial drop of statistics console infrastructure.  Data stream
- *    is transmitted on the stats port every interval, provided the data has
- *    changed since the last transmission.  More work probably needs to be
- *    done with regard to multiplatform threading; I stole the thread spawning
- *    code from jcc.c, but haven't been able to test it everywhere.
+ *    Revision 1.35.2.8  2006/01/21 16:16:08  david__schmidt
+ *    Thanks to  Edward Carrel for his patch to modernize OSX's\rpthreads support.  See bug #1409623.
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.35.2.7  2005/05/07 21:50:55  david__schmidt
+ *    A few memory leaks plugged (mostly on error paths)
  *
  *
- *    Revision 1.36  2002/05/26 23:23:10  joergs
- *    AmigaOS: Fixed wrong type for len in write_socket()
+ *    Revision 1.35.2.6  2003/12/17 16:34:40  oes
+ *    Cosmetics
+ *
+ *    Revision 1.35.2.5  2003/04/29 11:32:54  oes
+ *    Don't rely on h_addr being non-NULL after gethostbyname.
+ *    Works around an oddness in Max OSX and closes bug #724796
+ *
+ *    Revision 1.35.2.4  2003/04/04 12:40:20  oes
+ *    Made sure the errno set by bind, not close[socket] is used in
+ *    bind_port. Probably fixes bugs #713777, #705562.
+ *
+ *    Revision 1.35.2.3  2003/03/07 03:41:04  david__schmidt
+ *    Wrapping all *_r functions (the non-_r versions of them) with mutex semaphores for OSX.  Hopefully this will take care of all of those pesky crash reports.
+ *
+ *    Revision 1.35.2.2  2002/11/20 14:37:24  oes
+ *    Fixed Win32 error logging in bind_port.
+ *    Thanks to Oliver Stoeneberg for the hint.
+ *
+ *    Revision 1.35.2.1  2002/05/26 23:41:27  joergs
+ *    AmigaOS: Fixed wrong type of len in write_socket()
  *
  *    Revision 1.35  2002/04/26 15:50:04  joergs
  *    AmigaOS: No socklen_t, added AMIGA to the systems using int instead.
  *
  *    Revision 1.35  2002/04/26 15:50:04  joergs
  *    AmigaOS: No socklen_t, added AMIGA to the systems using int instead.
@@ -240,13 +254,14 @@ const char jbsockets_rcs[] = "$Id: jbsockets.c,v 2.1 2002/12/30 19:56:16 david__
 
 #endif
 
 
 #endif
 
+#include "project.h"
+
 #ifdef OSX_DARWIN
 #include <pthread.h>
 #include "jcc.h"
 /* jcc.h is for mutex semaphores only */
 #endif /* def OSX_DARWIN */
 
 #ifdef OSX_DARWIN
 #include <pthread.h>
 #include "jcc.h"
 /* jcc.h is for mutex semaphores only */
 #endif /* def OSX_DARWIN */
 
-#include "project.h"
 #include "jbsockets.h"
 #include "filters.h"
 #include "errlog.h"
 #include "jbsockets.h"
 #include "filters.h"
 #include "errlog.h"
@@ -290,37 +305,29 @@ jb_socket connect_to(const char *host, int portnum, struct client_state *csp)
 
    if ((addr = resolve_hostname_to_ip(host)) == INADDR_NONE)
    {
 
    if ((addr = resolve_hostname_to_ip(host)) == INADDR_NONE)
    {
-      if (csp)
-      {
-        csp->http->host_ip_addr_str = strdup("unknown");
-      }
+      csp->http->host_ip_addr_str = strdup("unknown");
       return(JB_INVALID_SOCKET);
    }
 
 #ifdef FEATURE_ACL
       return(JB_INVALID_SOCKET);
    }
 
 #ifdef FEATURE_ACL
-   if (csp)
-   {
-     dst->addr = ntohl((unsigned long) addr);
-     dst->port = portnum;
+   dst->addr = ntohl((unsigned long) addr);
+   dst->port = portnum;
 
 
-     if (block_acl(dst, csp))
-     {
+   if (block_acl(dst, csp))
+   {
 #ifdef __OS2__
 #ifdef __OS2__
-        errno = SOCEPERM;
+      errno = SOCEPERM;
 #else
 #else
-        errno = EPERM;
+      errno = EPERM;
 #endif
 #endif
-        return(JB_INVALID_SOCKET);
-     }
+      return(JB_INVALID_SOCKET);
    }
 #endif /* def FEATURE_ACL */
 
    inaddr.sin_addr.s_addr = addr;
    inaddr.sin_family      = AF_INET;
    }
 #endif /* def FEATURE_ACL */
 
    inaddr.sin_addr.s_addr = addr;
    inaddr.sin_family      = AF_INET;
-   if (csp)
-   {
-     csp->http->host_ip_addr_str = strdup(inet_ntoa(inaddr.sin_addr));
-   }
+   csp->http->host_ip_addr_str = strdup(inet_ntoa(inaddr.sin_addr));
+
 #ifndef _WIN32
    if (sizeof(inaddr.sin_port) == sizeof(short))
 #endif /* ndef _WIN32 */
 #ifndef _WIN32
    if (sizeof(inaddr.sin_port) == sizeof(short))
 #endif /* ndef _WIN32 */
@@ -346,7 +353,7 @@ jb_socket connect_to(const char *host, int portnum, struct client_state *csp)
 #ifdef TCP_NODELAY
    {  /* turn off TCP coalescence */
       int mi = 1;
 #ifdef TCP_NODELAY
    {  /* turn off TCP coalescence */
       int mi = 1;
-      setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, (char *) &mi, sizeof (int));
+      setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *) &mi, sizeof (int));
    }
 #endif /* def TCP_NODELAY */
 
    }
 #endif /* def TCP_NODELAY */
 
@@ -434,7 +441,7 @@ int write_socket(jb_socket fd, const char *buf, size_t len)
       return 0;
    }
 
       return 0;
    }
 
-   if (len < 0)
+   if (len < 0) /* constant condition - size_t isn't ever negative */ 
    {
       return 1;
    }
    {
       return 1;
    }
@@ -619,19 +626,21 @@ int bind_port(const char *hostnam, int portnum, jb_socket *pfd)
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one));
 #endif /* ndef _WIN32 */
 
    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one));
 #endif /* ndef _WIN32 */
 
-   if (bind (fd, (struct sockaddr *)&inaddr, sizeof(inaddr)) < 0)
+   if (bind(fd, (struct sockaddr *)&inaddr, sizeof(inaddr)) < 0)
    {
    {
-      close_socket (fd);
 #ifdef _WIN32
 #ifdef _WIN32
+      errno = WSAGetLastError();
       if (errno == WSAEADDRINUSE)
 #else
       if (errno == EADDRINUSE)
 #endif
       {
       if (errno == WSAEADDRINUSE)
 #else
       if (errno == EADDRINUSE)
 #endif
       {
+         close_socket(fd);
          return(-3);
       }
       else
       {
          return(-3);
       }
       else
       {
+         close_socket(fd);
          return(-1);
       }
    }
          return(-1);
       }
    }
similarity index 94%
rename from src/jbsockets.h
rename to jbsockets.h
index 8a95bb2..a0cb9f2 100644 (file)
@@ -1,9 +1,9 @@
 #ifndef JBSOCKETS_H_INCLUDED
 #define JBSOCKETS_H_INCLUDED
 #ifndef JBSOCKETS_H_INCLUDED
 #define JBSOCKETS_H_INCLUDED
-#define JBSOCKETS_H_VERSION "$Id: jbsockets.h,v 1.10 2002/05/26 23:23:10 joergs Exp $"
+#define JBSOCKETS_H_VERSION "$Id: jbsockets.h,v 1.9.2.1 2002/05/26 23:41:27 joergs Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/jbsockets.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/jbsockets.h,v $
  *
  * Purpose     :  Contains wrappers for system-specific sockets code,
  *                so that the rest of Junkbuster can be more
  *
  * Purpose     :  Contains wrappers for system-specific sockets code,
  *                so that the rest of Junkbuster can be more
@@ -37,8 +37,8 @@
  *
  * Revisions   :
  *    $Log: jbsockets.h,v $
  *
  * Revisions   :
  *    $Log: jbsockets.h,v $
- *    Revision 1.10  2002/05/26 23:23:10  joergs
- *    AmigaOS: Fixed wrong type for len in write_socket()
+ *    Revision 1.9.2.1  2002/05/26 23:41:27  joergs
+ *    AmigaOS: Fixed wrong type of len in write_socket()
  *
  *    Revision 1.9  2002/04/08 20:31:41  swa
  *    fixed JB spelling
  *
  *    Revision 1.9  2002/04/08 20:31:41  swa
  *    fixed JB spelling
diff --git a/src/jcc.c b/jcc.c
similarity index 71%
rename from src/jcc.c
rename to jcc.c
index 47b4c83..9010076 100644 (file)
--- a/src/jcc.c
+++ b/jcc.c
@@ -1,7 +1,7 @@
-const char jcc_rcs[] = "$Id: jcc.c,v 2.7 2003/09/25 01:44:33 david__schmidt Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.92.2.16 2005/04/03 20:10:50 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/jcc.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/jcc.c,v $
  *
  * Purpose     :  Main file.  Contains main() method, main loop, and
  *                the main connection-handling function.
  *
  * Purpose     :  Main file.  Contains main() method, main loop, and
  *                the main connection-handling function.
@@ -33,33 +33,90 @@ const char jcc_rcs[] = "$Id: jcc.c,v 2.7 2003/09/25 01:44:33 david__schmidt Exp
  *
  * Revisions   :
  *    $Log: jcc.c,v $
  *
  * Revisions   :
  *    $Log: jcc.c,v $
- *    Revision 2.7  2003/09/25 01:44:33  david__schmidt
- *    Resyncing HEAD with v_3_0_branch for two OSX fixes:
- *    Making thread IDs look sane in the logfile for Mach kernels,
- *    and fixing multithreading crashes due to thread-unsafe
- *    system calls.
- *    and
- *
- *    Revision 2.6  2003/06/24 12:24:24  oes
- *    Added a line plus Fix-me as a reminder to fix broken force handling in trunk. Thanks to lionel for the hint
- *
- *    Revision 2.5  2003/01/26 20:24:26  david__schmidt
- *    Updated activity console instrumentation locations
- *
- *    Revision 2.4  2002/12/28 03:58:19  david__schmidt
- *    Initial drop of dashboard instrumentation - enabled with
- *    --enable-activity-console
- *
- *    Revision 2.3  2002/07/18 22:06:12  jongfoster
- *    Trivial formatting changes
- *
- *    Revision 2.2  2002/07/12 04:26:17  agotneja
- *    Re-factored 'chat()' to become understandable and maintainable as
- *    a first step in adding Transparent Proxy functionality.
- *
- *    Added several new static functions in jcc.c, and moved some data
- *    parameters up into project.h to allow them to be passed between
- *    the new functions.
+ *    Revision 1.92.2.16  2005/04/03 20:10:50  david__schmidt
+ *    Thanks to Jindrich Makovicka for a race condition fix for the log
+ *    file.  The race condition remains for non-pthread implementations.
+ *    Reference patch #1175720.
+ *
+ *    Revision 1.92.2.15  2004/10/03 12:53:32  david__schmidt
+ *    Add the ability to check jpeg images for invalid
+ *    lengths of comment blocks.  Defensive strategy
+ *    against the exploit:
+ *       Microsoft Security Bulletin MS04-028
+ *       Buffer Overrun in JPEG Processing (GDI+) Could
+ *       Allow Code Execution (833987)
+ *    Enabled with +inspect-jpegs in actions files.
+ *
+ *    Revision 1.92.2.14  2003/12/12 12:52:53  oes
+ *    - Fixed usage info for non-unix platforms
+ *    - Fixed small cmdline parsing bug
+ *
+ *    Revision 1.92.2.13  2003/11/27 19:20:27  oes
+ *    Diagnostics: Now preserve the returncode of pthread_create
+ *    in errno. Closes BR #775721. Thanks to Geoffrey Hausheer.
+ *
+ *    Revision 1.92.2.12  2003/07/11 11:34:19  oes
+ *    No longer ignore SIGCHLD. Fixes bug #769381
+ *
+ *    Revision 1.92.2.11  2003/05/14 12:32:02  oes
+ *    Close jarfile on graceful exit, remove stray line
+ *
+ *    Revision 1.92.2.10  2003/05/08 15:13:46  oes
+ *    Cosmetics: Killed a warning, a typo and an allocation left at exit
+ *
+ *    Revision 1.92.2.9  2003/04/03 15:08:42  oes
+ *    No longer rely on non-POSIX.1 extensions of getcwd().
+ *    Fixes bug #711001
+ *
+ *    Revision 1.92.2.8  2003/03/31 13:12:32  oes
+ *    Replaced setenv() by posix-compliant putenv()
+ *    Thanks to Neil McCalden (nmcc AT users.sf.net).
+ *
+ *    Revision 1.92.2.7  2003/03/17 16:48:59  oes
+ *    Added chroot ability, thanks to patch by Sviatoslav Sviridov
+ *
+ *    Revision 1.92.2.6  2003/03/11 11:55:00  oes
+ *    Clean-up and extension of improvements for forked mode:
+ *     - Child's return code now consists of flags RC_FLAG_*
+ *     - Reporting toggle to parent now properly #ifdef'ed
+ *     - Children now report blocking to parent. This enables
+ *       statistics in forked mode
+ *
+ *    Revision 1.92.2.5  2003/03/10 23:45:32  oes
+ *    Fixed bug #700381: Non-Threaded version now capable of being toggled.
+ *    Children now report having been toggled through _exit(17), parents
+ *    watch for that code and toggle themselves if found.
+ *
+ *    Revision 1.92.2.4  2003/03/07 03:41:04  david__schmidt
+ *    Wrapping all *_r functions (the non-_r versions of them) with 
+ *    mutex semaphores for OSX.  Hopefully this will take care of all 
+ *    of those pesky crash reports.
+ *
+ *    Revision 1.92.2.3  2003/02/28 12:53:06  oes
+ *    Fixed two mostly harmless mem leaks
+ *
+ *    Revision 1.92.2.2  2002/11/20 14:37:47  oes
+ *    Fix: Head of global clients list now initialized to NULL
+ *
+ *    Revision 1.92.2.1  2002/09/25 14:52:24  oes
+ *    Added basic support for OPTIONS and TRACE HTTP methods:
+ *     - New interceptor direct_response() added in chat().
+ *     - sed() moved to earlier in the process, so that the
+ *       Host: header is evaluated before actions and forwarding
+ *       are decided on.
+ *
+ *    Revision 1.92  2002/05/08 16:00:46  oes
+ *    Chat's buffer handling:
+ *     - Fixed bug with unchecked out-of-mem conditions
+ *       while reading client request & server headers
+ *     - No longer predict if the buffer limit will be exceeded
+ *       in the next read -- check add_to_iob's new
+ *       return code. If buffer couldn't be extended
+ *       (policy or out-of-mem) while
+ *       - reading from client: abort
+ *       - reading server headers: send error page
+ *       - buffering server body for filter: flush,
+ *         and if that fails: send error page
  *
  *    Revision 1.91  2002/04/08 20:35:58  swa
  *    fixed JB spelling
  *
  *    Revision 1.91  2002/04/08 20:35:58  swa
  *    fixed JB spelling
@@ -635,9 +692,6 @@ const char jcc_rcs[] = "$Id: jcc.c,v 2.7 2003/09/25 01:44:33 david__schmidt Exp
 #include "cgi.h"
 #include "loadcfg.h"
 #include "urlmatch.h"
 #include "cgi.h"
 #include "loadcfg.h"
 #include "urlmatch.h"
-#ifdef FEATURE_ACTIVITY_CONSOLE
-#include "stats.h"
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
 
 const char jcc_h_rcs[] = JCC_H_VERSION;
 const char project_h_rcs[] = PROJECT_H_VERSION;
 
 const char jcc_h_rcs[] = JCC_H_VERSION;
 const char project_h_rcs[] = PROJECT_H_VERSION;
@@ -657,15 +711,6 @@ int g_terminate = 0;
 
 static void listen_loop(void);
 static void chat(struct client_state *csp);
 
 static void listen_loop(void);
 static void chat(struct client_state *csp);
-static jb_err relay_server_traffic( struct client_state *csp ) ;
-static jb_err read_client_headers( struct client_state *csp, struct http_request *http ) ;
-static jb_err process_client_headers( struct client_state *csp, struct http_request *http ) ;
-static jb_err intercept_page( struct client_state *csp, struct http_request *http );
-static jb_err open_forwarding_connection( struct client_state *csp );
-static jb_err send_client_headers_to_server( struct client_state *csp, struct http_request *http,  char* hdr );
-static jb_err is_connect_request_allowed( struct client_state *csp ) ;
-
-
 #ifdef AMIGA
 void serve(struct client_state *csp);
 #else /* ifndef AMIGA */
 #ifdef AMIGA
 void serve(struct client_state *csp);
 #else /* ifndef AMIGA */
@@ -694,6 +739,11 @@ pthread_mutex_t gethostbyaddr_mutex;
 pthread_mutex_t gethostbyname_mutex;
 #endif /* def OSX_DARWIN */
 
 pthread_mutex_t gethostbyname_mutex;
 #endif /* def OSX_DARWIN */
 
+#ifdef FEATURE_PTHREAD
+pthread_mutex_t log_mutex;
+pthread_mutex_t log_init_mutex;
+#endif /* FEATURE_PTHREAD */
+
 #if defined(unix) || defined(__EMX__)
 const char *basedir = NULL;
 const char *pidfile = NULL;
 #if defined(unix) || defined(__EMX__)
 const char *basedir = NULL;
 const char *pidfile = NULL;
@@ -710,27 +760,6 @@ static const char VANILLA_WAFER[] =
    "Take_notice_that_I_refuse_to_be_bound_by_any_license_condition_"
    "(copyright_or_otherwise)_applying_to_any_cookie._";
 
    "Take_notice_that_I_refuse_to_be_bound_by_any_license_condition_"
    "(copyright_or_otherwise)_applying_to_any_cookie._";
 
-/**
- * HTTP header sent when doing HTTPS tunnelling ("CONNECT" method).
- */
-static const char CSUCCEED[] =
-   "HTTP/1.0 200 Connection established\n"
-   "Proxy-Agent: Privoxy/" VERSION "\r\n\r\n";
-
-
-/**
- * HTTP reply sent when the browser sends something unintelligible.
- */
-static const char CHEADER[] =
-   "HTTP/1.0 400 Invalid header received from browser\r\n\r\n";
-
-
-/**
- * HTTP reply sent when the browser tries to tunnel ("CONNECT") to something
- * other than a HTTPS port (as defined by +limit-connect).
- */
-static const char CFORBIDDEN[] =
-   "HTTP/1.0 403 Connection not allowable\r\nX-Hint: If you read this message interactively, then you know why this happens ,-)\r\n\r\n";
 
 #if !defined(_WIN32) && !defined(__OS2__) && !defined(AMIGA)
 /*********************************************************************
 
 #if !defined(_WIN32) && !defined(__OS2__) && !defined(AMIGA)
 /*********************************************************************
@@ -792,1857 +821,1765 @@ static void sig_handler(int the_signal)
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
  *
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
  *
- * Returns     :  void
+ * Returns     :  On success, the number of bytes written are returned (zero
+ *                indicates nothing was written).  On error, -1 is returned,
+ *                and errno is set appropriately.  If count is zero and the
+ *                file descriptor refers to a regular file, 0 will be
+ *                returned without causing any other effect.  For a special
+ *                file, the results are not portable.
  *
  *********************************************************************/
 static void chat(struct client_state *csp)
 {
  *
  *********************************************************************/
 static void chat(struct client_state *csp)
 {
+/*
+ * This next lines are a little ugly, but they simplifies the if statements
+ * below.  Basically if TOGGLE, then we want the if to test if the
+ * CSP_FLAG_TOGGLED_ON flag ist set, else we don't.  And if FEATURE_FORCE_LOAD,
+ * then we want the if to test for CSP_FLAG_FORCED , else we don't
+ */
+#ifdef FEATURE_TOGGLE
+#   define IS_TOGGLED_ON_AND (csp->flags & CSP_FLAG_TOGGLED_ON) &&
+#else /* ifndef FEATURE_TOGGLE */
+#   define IS_TOGGLED_ON_AND
+#endif /* ndef FEATURE_TOGGLE */
+#ifdef FEATURE_FORCE_LOAD
+#   define IS_NOT_FORCED_AND !(csp->flags & CSP_FLAG_FORCED) &&
+#else /* ifndef FEATURE_FORCE_LOAD */
+#   define IS_NOT_FORCED_AND
+#endif /* def FEATURE_FORCE_LOAD */
 
 
+#define IS_ENABLED_AND   IS_TOGGLED_ON_AND IS_NOT_FORCED_AND
 
    char buf[BUFFER_SIZE];
 
    char buf[BUFFER_SIZE];
-   int len; /* for buffer sizes */
-   char *hdr; 
+   char *hdr;
+   char *p;
+   char *req;
    fd_set rfds;
    int n;
    jb_socket maxfd;
    fd_set rfds;
    int n;
    jb_socket maxfd;
+   int server_body;
+   int ms_iis5_hack = 0;
    int byte_count = 0;
    int byte_count = 0;
+   const struct forward_spec * fwd;
    struct http_request *http;
    struct http_request *http;
+   int len; /* for buffer sizes */
+#ifdef FEATURE_KILL_POPUPS
+   int block_popups;         /* bool, 1==will block popups */
+   int block_popups_now = 0; /* bool, 1==currently blocking popups */
+#endif /* def FEATURE_KILL_POPUPS */
 
 
-   http = csp->http;
+   int pcrs_filter;        /* bool, 1==will filter through pcrs */
+   int gif_deanimate;      /* bool, 1==will deanimate gifs */
+   int jpeg_inspect;       /* bool, 1==will inspect jpegs */
 
 
-   if (read_client_headers(csp, http ) != JB_ERR_OK )
-      return;
-   
+   /* Function that does the content filtering for the current request */
+   char *(*content_filter)() = NULL;
 
 
-   /* Process the client headers */
-   if (process_client_headers(csp, http) != JB_ERR_OK)
-      return;
-   
+   /* Skeleton for HTTP response, if we should intercept the request */
+   struct http_response *rsp;
 
 
-   /* Check if this connection request is permitted */
-   if (is_connect_request_allowed(csp) != JB_ERR_OK)
-      return ;
+   http = csp->http;
 
    /*
 
    /*
-    * We have a valid and legit request. Now, check to see if we need to
-    * intercept it.
-    */
-   if (intercept_page(csp, http) != JB_ERR_OK)
-      return;
-  
-   /* 
-    * The page passed the intercept routine, so open a forwarding
-    * connection for conversation
-    */
-   if (open_forwarding_connection(csp) != JB_ERR_OK )
-      return ;
-
-
-
-   hdr = sed(client_patterns, add_client_headers, csp);
-   if (hdr == NULL)
-   {
-      /* FIXME Should handle error properly */
-      log_error(LOG_LEVEL_FATAL, "Out of memory parsing client header");
-   }
-
-   /* FIXME - where should this go, logically ? */
-   list_remove_all(csp->headers);
-
-
-   if (send_client_headers_to_server(csp, http, hdr) != JB_ERR_OK)
-      return ;
-
-
-   /* we're finished with the client's header */
-   freez(hdr);
-
-   maxfd = ( csp->cfd > csp->sfd ) ? csp->cfd : csp->sfd;
-
-   /* pass data between the client and server
-    * until one or the other shuts down the connection.
+    * Read the client's request.  Note that since we're not using select() we
+    * could get blocked here if a client connected, then didn't say anything!
     */
 
     */
 
-   /* Set the flag for reading headers to False */
-   /* This is used in relay_server_traffic */
-   csp->all_headers_read = 0 ;
-
    for (;;)
    {
    for (;;)
    {
-      jb_err tmp_ret_val = JB_ERR_GENERIC ;
+      len = read_socket(csp->cfd, buf, sizeof(buf));
 
 
-#ifdef __OS2__
+      if (len <= 0) break;      /* error! */
+      
       /*
       /*
-       * FD_ZERO here seems to point to an errant macro which crashes.
-       * So do this by hand for now...
+       * If there is no memory left for buffering the
+       * request, there is nothing we can do but hang up
        */
        */
-      memset(&rfds,0x00,sizeof(fd_set));
-#else
-      FD_ZERO(&rfds);
-#endif
-      FD_SET(csp->cfd, &rfds);
-      FD_SET(csp->sfd, &rfds);
-
-      n = select((int)maxfd+1, &rfds, NULL, NULL, NULL);
-
-      if (n < 0)
+      if (add_to_iob(csp, buf, len))
       {
       {
-         log_error(LOG_LEVEL_ERROR, "select() failed!: %E");
          return;
       }
 
          return;
       }
 
-      /*
-       * This is the body of the browser's request.
-       * Just read it and write it.
-       */
+      req = get_header(csp);
 
 
-      if (FD_ISSET(csp->cfd, &rfds))
+      if (req == NULL)
       {
       {
-         len = read_socket(csp->cfd, buf, sizeof(buf));
-
-         if (len <= 0)
-         {
-            log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 %d",
-             csp->ip_addr_str, http->ocmd, byte_count);
-            return ;
-         }
+         break;    /* no HTTP request! */
+      }
 
 
-         if (write_socket(csp->sfd, buf, (size_t)len))
-         {
-            log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
-            return;
-         }
-         continue;
+      if (*req == '\0')
+      {
+         continue;   /* more to come! */
       }
 
       }
 
-      /*
-       * Check if the server wants to talk, and if so, converse.
+#ifdef FEATURE_FORCE_LOAD
+      /* If this request contains the FORCE_PREFIX,
+       * better get rid of it now and set the force flag --oes
        */
 
        */
 
-      if (FD_ISSET(csp->sfd, &rfds))
-         tmp_ret_val = relay_server_traffic(csp) ;
+      if (strstr(req, FORCE_PREFIX))
+      {
+         strclean(req, FORCE_PREFIX);
+         log_error(LOG_LEVEL_FORCE, "Enforcing request \"%s\".\n", req);
+         csp->flags |= CSP_FLAG_FORCED;
+      }
 
 
+#endif /* def FEATURE_FORCE_LOAD */
 
 
-      if (tmp_ret_val == JB_ERR_OK)
-         continue ;
-      else
-         return; 
+      parse_http_request(req, http, csp);
+      freez(req);
+      break;
    }
    }
-   /* We should never get here! */
-   log_error(LOG_LEVEL_FATAL, "chat() : logic error in for() loop" ) ;
-} /* END chat() */
 
 
+   if (http->cmd == NULL)
+   {
+      strcpy(buf, CHEADER);
+      write_socket(csp->cfd, buf, strlen(buf));
 
 
-/*********************************************************************
- *
- * Function    :  serve
- *
- * Description :  This is little more than chat.  We only "serve" to
- *                to close any socket that chat may have opened.
- *
- * Parameters  :
- *          1  :  csp = Current client state (buffers, headers, etc...)
- *
- * Returns     :  N/A
- *
- *********************************************************************/
-#ifdef AMIGA
-void serve(struct client_state *csp)
-#else /* ifndef AMIGA */
-static void serve(struct client_state *csp)
-#endif /* def AMIGA */
-{
-   chat(csp);
-   close_socket(csp->cfd);
+      log_error(LOG_LEVEL_CLF, "%s - - [%T] \" \" 400 0", csp->ip_addr_str);
 
 
-   if (csp->sfd != JB_INVALID_SOCKET)
+      free_http_request(http);
+      return;
+   }
+
+   /* decide how to route the HTTP request */
+
+   if ((fwd = forward_url(http, csp)) == NULL)
    {
    {
-      close_socket(csp->sfd);
+      log_error(LOG_LEVEL_FATAL, "gateway spec is NULL!?!?  This can't happen!");
+      /* Never get here - LOG_LEVEL_FATAL causes program exit */
    }
 
    }
 
-   csp->flags &= ~CSP_FLAG_ACTIVE;
+   /* build the http request to send to the server
+    * we have to do one of the following:
+    *
+    * create = use the original HTTP request to create a new
+    *          HTTP request that has either the path component
+    *          without the http://domainspec (w/path) or the
+    *          full orininal URL (w/url)
+    *          Note that the path and/or the HTTP version may
+    *          have been altered by now.
+    *
+    * connect = Open a socket to the host:port of the server
+    *           and short-circuit server and client socket.
+    *
+    * pass =  Pass the request unchanged if forwarding a CONNECT
+    *         request to a parent proxy. Note that we'll be sending
+    *         the CFAIL message ourselves if connecting to the parent
+    *         fails, but we won't send a CSUCCEED message if it works,
+    *         since that would result in a double message (ours and the
+    *         parent's). After sending the request to the parent, we simply
+    *         tunnel.
+    *
+    * here's the matrix:
+    *                        SSL
+    *                    0        1
+    *                +--------+--------+
+    *                |        |        |
+    *             0  | create | connect|
+    *                | w/path |        |
+    *  Forwarding    +--------+--------+
+    *                |        |        |
+    *             1  | create | pass   |
+    *                | w/url  |        |
+    *                +--------+--------+
+    *
+    */
 
 
-}
+   /*
+    * Determine the actions for this URL
+    */
+#ifdef FEATURE_TOGGLE
+   if (!(csp->flags & CSP_FLAG_TOGGLED_ON))
+   {
+      /* Most compatible set of actions (i.e. none) */
+      init_current_action(csp->action);
+   }
+   else
+#endif /* ndef FEATURE_TOGGLE */
+   {
+      url_actions(http, csp);
+   }
 
 
 
 
-#ifdef __BEOS__
-/*********************************************************************
- *
- * Function    :  server_thread
- *
- * Description :  We only exist to call `serve' in a threaded environment.
- *
- * Parameters  :
- *          1  :  data = Current client state (buffers, headers, etc...)
- *
- * Returns     :  Always 0.
- *
- *********************************************************************/
-static int32 server_thread(void *data)
-{
-   serve((struct client_state *) data);
-   return 0;
+   /*
+    * Check if a CONNECT request is allowable:
+    * In the absence of a +limit-connect action, allow only port 443.
+    * If there is an action, allow whatever matches the specificaton.
+    */
+   if(http->ssl)
+   {
+      if(  ( !(csp->action->flags & ACTION_LIMIT_CONNECT) && csp->http->port != 443)
+           || (csp->action->flags & ACTION_LIMIT_CONNECT
+              && !match_portlist(csp->action->string[ACTION_STRING_LIMIT_CONNECT], csp->http->port)) )
+      {
+         strcpy(buf, CFORBIDDEN);
+         write_socket(csp->cfd, buf, strlen(buf));
 
 
-}
-#endif
+         log_error(LOG_LEVEL_CONNECT, "Denying suspicious CONNECT request from %s", csp->ip_addr_str);
+         log_error(LOG_LEVEL_CLF, "%s - - [%T] \" \" 403 0", csp->ip_addr_str);
 
 
+         return;
+      }
+   }
 
 
-/*********************************************************************
- *
- * Function    :  usage
- *
- * Description :  Print usage info & exit.
- *
- * Parameters  :  Pointer to argv[0] for identifying ourselves
- *
- * Returns     :  No. ,-)
- *
- *********************************************************************/
-void usage(const char *myname)
-{
-   printf("Privoxy version " VERSION " (" HOME_PAGE_URL ")\n"
-           "Usage: %s [--help] [--version] [--no-daemon] [--pidfile pidfile] [--user user[.group]] [configfile]\n"
-           "Aborting.\n", myname);
-   exit(2);
-
-}
-
-
-/*********************************************************************
- *
- * Function    :  main
- *
- * Description :  Load the config file and start the listen loop.
- *                This function is a lot more *sane* with the `load_config'
- *                and `listen_loop' functions; although it stills does
- *                a *little* too much for my taste.
- *
- * Parameters  :
- *          1  :  argc = Number of parameters (including $0).
- *          2  :  argv = Array of (char *)'s to the parameters.
- *
- * Returns     :  1 if : can't open config file, unrecognized directive,
- *                stats requested in multi-thread mode, can't open the
- *                log file, can't open the jar file, listen port is invalid,
- *                any load fails, and can't bind port.
- *
- *                Else main never returns, the process must be signaled
- *                to terminate execution.  Or, on Windows, use the
- *                "File", "Exit" menu option.
- *
- *********************************************************************/
-#ifdef __MINGW32__
-int real_main(int argc, const char *argv[])
-#else
-int main(int argc, const char *argv[])
-#endif
-{
-   int argc_pos = 0;
-#ifdef unix
-   struct passwd *pw = NULL;
-   struct group *grp = NULL;
-   char *p;
-#endif
-
-   Argc = argc;
-   Argv = argv;
-
-   configfile =
-#if !defined(_WIN32)
-   "config"
-#else
-   "config.txt"
-#endif
-      ;
 
    /*
 
    /*
-    * Parse the command line arguments
+    * Downgrade http version from 1.1 to 1.0 if +downgrade
+    * action applies
     */
     */
-   while (++argc_pos < argc)
+   if ( (http->ssl == 0)
+     && (!strcmpic(http->ver, "HTTP/1.1"))
+     && (csp->action->flags & ACTION_DOWNGRADE))
    {
    {
-#if !defined(_WIN32) || defined(_WIN_CONSOLE)
-
-      if (strcmp(argv[argc_pos], "--help") == 0)
-      {
-         usage(argv[0]);
-      }
+      freez(http->ver);
+      http->ver = strdup("HTTP/1.0");
 
 
-      else if(strcmp(argv[argc_pos], "--version") == 0)
+      if (http->ver == NULL)
       {
       {
-         printf("Privoxy version " VERSION " (" HOME_PAGE_URL ")\n");
-         exit(0);
+         log_error(LOG_LEVEL_FATAL, "Out of memory downgrading HTTP version");
       }
       }
+   }
 
 
-      else if (strcmp(argv[argc_pos], "--no-daemon" ) == 0)
-      {
-         no_daemon = 1;
-      }
-#if defined(unix)
-      else if (strcmp(argv[argc_pos], "--pidfile" ) == 0)
-      {
-         if (++argc_pos == argc) usage(argv[0]);
-         pidfile = strdup(argv[argc_pos]);
-      }
+   /* 
+    * Save a copy of the original request for logging
+    */
+   http->ocmd = strdup(http->cmd);
 
 
-      else if (strcmp(argv[argc_pos], "--user" ) == 0)
-      {
-         if (++argc_pos == argc) usage(argv[argc_pos]);
+   if (http->ocmd == NULL)
+   {
+      log_error(LOG_LEVEL_FATAL, "Out of memory copying HTTP request line");
+   }
 
 
-         if ((NULL != (p = strchr(argv[argc_pos], '.'))) && *(p + 1) != '0')
-         {
-            *p++ = '\0';
-            if (NULL == (grp = getgrnam(p)))
-            {
-               log_error(LOG_LEVEL_FATAL, "Group %s not found.", p);
-            }
-         }
+   /*
+    * (Re)build the HTTP request for non-SSL requests.
+    * If forwarding, use the whole URL, else, use only the path.
+    */
+   if (http->ssl == 0)
+   {
+      freez(http->cmd);
 
 
-         if (NULL == (pw = getpwnam(argv[argc_pos])))
-         {
-            log_error(LOG_LEVEL_FATAL, "User %s not found.", argv[argc_pos]);
-         }
+      http->cmd = strdup(http->gpc);
+      string_append(&http->cmd, " ");
 
 
-         if (p != NULL) *--p = '\0';
+      if (fwd->forward_host)
+      {
+         string_append(&http->cmd, http->url);
       }
       }
-#endif /* defined(unix) */
       else
       else
-#endif /* defined(_WIN32) && !defined(_WIN_CONSOLE) */
       {
       {
-         configfile = argv[argc_pos];
+         string_append(&http->cmd, http->path);
       }
       }
+      string_append(&http->cmd, " ");
+      string_append(&http->cmd, http->ver);
 
 
-   } /* -END- while (more arguments) */
-
-#if defined(unix)
-   if ( *configfile != '/' )
-   {
-      char *abs_file;
-
-      /* make config-filename absolute here */
-      if ( !(basedir = getcwd( NULL, 1024 )))
+      if (http->cmd == NULL)
       {
       {
-         perror("get working dir failed");
-         exit( 1 );
+         log_error(LOG_LEVEL_FATAL, "Out of memory writing HTTP command");
       }
       }
+      log_error(LOG_LEVEL_HEADER, "New HTTP Request-Line: %s", http->cmd);
+   }
+   enlist(csp->headers, http->cmd);
 
 
-      if ( !(abs_file = malloc( strlen( basedir ) + strlen( configfile ) + 5 )))
-      {
-         perror("malloc failed");
-         exit( 1 );
-      }
-      strcpy( abs_file, basedir );
-      strcat( abs_file, "/" );
-      strcat( abs_file, configfile );
-      configfile = abs_file;
+
+   /*
+    * If the user has not supplied any wafers, and the user has not
+    * told us to suppress the vanilla wafer, then send the vanilla wafer.
+    */
+   if (list_is_empty(csp->action->multi[ACTION_MULTI_WAFER])
+       && ((csp->action->flags & ACTION_VANILLA_WAFER) != 0))
+   {
+      enlist(csp->action->multi[ACTION_MULTI_WAFER], VANILLA_WAFER);
    }
    }
-#endif /* defined unix */
 
 
 
 
-   files->next = NULL;
+#ifdef FEATURE_KILL_POPUPS
+   block_popups               = ((csp->action->flags & ACTION_NO_POPUPS) != 0);
+#endif /* def FEATURE_KILL_POPUPS */
 
 
-#ifdef AMIGA
-   InitAmiga();
-#elif defined(_WIN32)
-   InitWin32();
-#endif
+   pcrs_filter                = (csp->rlist != NULL) &&  /* There are expressions to be used */
+                                (!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER]));
 
 
-#ifdef OSX_DARWIN
-   /*
-    * Prepare global mutex semaphores
-    */
-   pthread_mutex_init(&gmtime_mutex,0);
-   pthread_mutex_init(&localtime_mutex,0);
-   pthread_mutex_init(&gethostbyaddr_mutex,0);
-   pthread_mutex_init(&gethostbyname_mutex,0);
-#endif /* def OSX_DARWIN */
+   gif_deanimate              = ((csp->action->flags & ACTION_DEANIMATE) != 0);
 
 
-   /*
-    * Unix signal handling
-    *
-    * Catch the abort, interrupt and terminate signals for a graceful exit
-    * Catch the hangup signal so the errlog can be reopened.
-    * Ignore the broken pipe and child signals
-    *  FIXME: Isn't ignoring the default for SIGCHLD anyway and why ignore SIGPIPE? 
-    */
-#if !defined(_WIN32) && !defined(__OS2__) && !defined(AMIGA)
-{
-   int idx;
-   const int catched_signals[] = { SIGABRT, SIGTERM, SIGINT, SIGHUP, 0 };
-   const int ignored_signals[] = { SIGPIPE, SIGCHLD, 0 };
+   jpeg_inspect               = ((csp->action->flags & ACTION_JPEG_INSPECT) != 0);
 
 
-   for (idx = 0; catched_signals[idx] != 0; idx++)
-   {
-      if (signal(catched_signals[idx], sig_handler) == SIG_ERR)
-      {
-         log_error(LOG_LEVEL_FATAL, "Can't set signal-handler for signal %d: %E", catched_signals[idx]);
-      }
-   }
+   /* grab the rest of the client's headers */
 
 
-   for (idx = 0; ignored_signals[idx] != 0; idx++)
+   for (;;)
    {
    {
-      if (signal(ignored_signals[idx], SIG_IGN) == SIG_ERR)
+      if ( ( ( p = get_header(csp) ) != NULL) && ( *p == '\0' ) )
       {
       {
-         log_error(LOG_LEVEL_FATAL, "Can't set ignore-handler for signal %d: %E", ignored_signals[idx]);
+         len = read_socket(csp->cfd, buf, sizeof(buf));
+         if (len <= 0)
+         {
+            log_error(LOG_LEVEL_ERROR, "read from client failed: %E");
+            return;
+         }
+         
+         /*
+          * If there is no memory left for buffering the
+          * request, there is nothing we can do but hang up
+          */
+         if (add_to_iob(csp, buf, len))
+         {
+            return;
+         }
+         continue;
       }
       }
+
+      if (p == NULL) break;
+
+      enlist(csp->headers, p);
+      freez(p);
    }
 
    }
 
-}
-#else /* ifdef _WIN32 */
-# ifdef _WIN_CONSOLE
    /*
    /*
-    * We *are* in a windows console app.
-    * Print a verbose messages about FAQ's and such
+    * We have a request. Now, check to see if we need to
+    * intercept it, i.e. If ..
     */
     */
-   printf(win32_blurb);
-# endif /* def _WIN_CONSOLE */
-#endif /* def _WIN32 */
 
 
+   if (
+       /* We may not forward the request by rfc2616 sect 14.31 */
+       (NULL != (rsp = direct_response(csp)))
 
 
-   /* Initialize the CGI subsystem */
-   cgi_init_error_messages();
+       /* or a CGI call was detected and answered */
+       || (NULL != (rsp = dispatch_cgi(csp)))
 
 
-   /*
-    * If runnig on unix and without the --nodaemon
-    * option, become a daemon. I.e. fork, detach
-    * from tty and get process group leadership
-    */
-#if defined(unix)
-   {
-      pid_t pid = 0;
-#if 0
-      int   fd;
-#endif
+       /* or we are enabled and... */
+       || (IS_ENABLED_AND (
 
 
-      if (!no_daemon)
-      {
-         pid  = fork();
+            /* ..the request was blocked */
+          ( NULL != (rsp = block_url(csp)))
 
 
-         if ( pid < 0 ) /* error */
-         {
-            perror("fork");
-            exit( 3 );
-         }
-         else if ( pid != 0 ) /* parent */
-         {
-            int status;
-            pid_t wpid;
-            /*
-             * must check for errors
-             * child died due to missing files aso
-             */
-            sleep( 1 );
-            wpid = waitpid( pid, &status, WNOHANG );
-            if ( wpid != 0 )
-            {
-               exit( 1 );
-            }
-            exit( 0 );
-         }
-         /* child */
-#if 1
-         /* Should be more portable, but not as well tested */
-         setsid();
-#else /* !1 */
-#ifdef __FreeBSD__
-         setpgrp(0,0);
-#else /* ndef __FreeBSD__ */
-         setpgrp();
-#endif /* ndef __FreeBSD__ */
-         fd = open("/dev/tty", O_RDONLY);
-         if ( fd )
-         {
-            /* no error check here */
-            ioctl( fd, TIOCNOTTY,0 );
-            close ( fd );
-         }
-#endif /* 1 */
-         /* FIXME: should close stderr (fd 2) here too, but the test
-          * for existence
-          * and load config file is done in listen_loop() and puts
-          * some messages on stderr there.
-          */
-
-         close( 0 );
-         close( 1 );
-         chdir("/");
-
-      } /* -END- if (!no_daemon) */
+          /* ..or untrusted */
+#ifdef FEATURE_TRUST
+          || ( NULL != (rsp = trust_url(csp)))
+#endif /* def FEATURE_TRUST */
 
 
-      /*
-       * As soon as we have written the PID file, we can switch
-       * to the user and group ID indicated by the --user option
-       */
-      write_pid_file();
-   
-      if (NULL != pw)
+          /* ..or a fast redirect kicked in */
+#ifdef FEATURE_FAST_REDIRECTS
+          || (((csp->action->flags & ACTION_FAST_REDIRECTS) != 0) &&
+                (NULL != (rsp = redirect_url(csp))))
+#endif /* def FEATURE_FAST_REDIRECTS */
+          ))
+      )
+   {
+      /* Write the answer to the client */
+      if (write_socket(csp->cfd, rsp->head, rsp->head_length)
+       || write_socket(csp->cfd, rsp->body, rsp->content_length))
       {
       {
-         if (((NULL != grp) && setgid(grp->gr_gid)) || (setgid(pw->pw_gid)))
-         {
-            log_error(LOG_LEVEL_FATAL, "Cannot setgid(): Insufficient permissions.");
-         }
-         if (setuid(pw->pw_uid))
-         {
-            log_error(LOG_LEVEL_FATAL, "Cannot setuid(): Insufficient permissions.");
-         }
+         log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
       }
       }
-   }
-#endif /* defined unix */
-
-   listen_loop();
-
-   /* NOTREACHED */
-   return(-1);
 
 
-}
+#ifdef FEATURE_STATISTICS
+      /* Count as a rejected request */
+      csp->flags |= CSP_FLAG_REJECTED;
+#endif /* def FEATURE_STATISTICS */
 
 
+      /* Log (FIXME: All intercept reasons apprear as "crunch" with Status 200) */
+      log_error(LOG_LEVEL_GPC, "%s%s crunch!", http->hostport, http->path);
+      log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 3", csp->ip_addr_str, http->ocmd);
 
 
-/*********************************************************************
- *
- * Function    :  bind_port_helper
- *
- * Description :  Bind the listen port.  Handles logging, and aborts
- *                on failure.
- *
- * Parameters  :
- *          1  :  config = Privoxy configuration.  Specifies port
- *                         to bind to.
- *
- * Returns     :  Port that was opened.
- *
- *********************************************************************/
-static jb_socket bind_port_helper(struct configuration_spec * config)
-{
-   int result;
-   jb_socket bfd;
+      /* Clean up and return */
+      free_http_response(rsp);
+      return;
+   }
 
 
-   if ( (config->haddr != NULL)
-     && (config->haddr[0] == '1')
-     && (config->haddr[1] == '2')
-     && (config->haddr[2] == '7')
-     && (config->haddr[3] == '.') )
+   hdr = sed(client_patterns, add_client_headers, csp);
+   if (hdr == NULL)
    {
    {
-      log_error(LOG_LEVEL_INFO, "Listening on port %d for local connections only",
-                config->hport);
+      /* FIXME Should handle error properly */
+      log_error(LOG_LEVEL_FATAL, "Out of memory parsing client header");
    }
    }
-   else if (config->haddr == NULL)
+
+   list_remove_all(csp->headers);
+
+   log_error(LOG_LEVEL_GPC, "%s%s", http->hostport, http->path);
+
+   if (fwd->forward_host)
    {
    {
-      log_error(LOG_LEVEL_INFO, "Listening on port %d on all IP addresses",
-                config->hport);
+      log_error(LOG_LEVEL_CONNECT, "via %s:%d to: %s",
+               fwd->forward_host, fwd->forward_port, http->hostport);
    }
    else
    {
    }
    else
    {
-      log_error(LOG_LEVEL_INFO, "Listening on port %d on IP address %s",
-                config->hport, config->haddr);
-   }
-
-   result = bind_port(config->haddr, config->hport, &bfd);
-
-   if (result < 0)
-   {
-      switch(result)
-      {
-         case -3 :
-            log_error(LOG_LEVEL_FATAL, "can't bind to %s:%d: "
-               "There may be another Privoxy or some other "
-               "proxy running on port %d",
-               (NULL != config->haddr) ? config->haddr : "INADDR_ANY",
-                      config->hport, config->hport);
-
-         case -2 :
-            log_error(LOG_LEVEL_FATAL, "can't bind to %s:%d: " 
-               "The hostname is not resolvable",
-               (NULL != config->haddr) ? config->haddr : "INADDR_ANY", config->hport);
-
-         default :
-            log_error(LOG_LEVEL_FATAL, "can't bind to %s:%d: because %E",
-               (NULL != config->haddr) ? config->haddr : "INADDR_ANY", config->hport);
-      }
-
-      /* shouldn't get here */
-      return JB_INVALID_SOCKET;
+      log_error(LOG_LEVEL_CONNECT, "to %s", http->hostport);
    }
 
    }
 
-   config->need_bind = 0;
-
-   return bfd;
-}
-
-
-/*********************************************************************
- *
- * Function    :  listen_loop
- *
- * Description :  bind the listen port and enter a "FOREVER" listening loop.
- *
- * Parameters  :  N/A
- *
- * Returns     :  Never.
- *
- *********************************************************************/
-static void listen_loop(void)
-{
-   struct client_state *csp = NULL;
-   jb_socket bfd;
-   struct configuration_spec * config;
-
-   config = load_config();
-
-   bfd = bind_port_helper(config);
+   /* here we connect to the server, gateway, or the forwarder */
 
 
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   init_stats_config(config);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
+   csp->sfd = forwarded_connect(fwd, http, csp);
 
 
-#ifdef FEATURE_GRACEFUL_TERMINATION
-   while (!g_terminate)
-#else
-   for (;;)
-#endif
+   if (csp->sfd == JB_INVALID_SOCKET)
    {
    {
-#if !defined(FEATURE_PTHREAD) && !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
-      while (waitpid(-1, NULL, WNOHANG) > 0)
-      {
-         /* zombie children */
-      }
-#endif /* !defined(FEATURE_PTHREAD) && !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) */
-
-      /*
-       * Free data that was used by died threads
-       */
-      sweep();
+      log_error(LOG_LEVEL_CONNECT, "connect to: %s failed: %E",
+                http->hostport);
 
 
-#if defined(unix)
-      /*
-       * Re-open the errlog after HUP signal
-       */
-      if (received_hup_signal)
+      if (errno == EINVAL)
       {
       {
-         init_error_log(Argv[0], config->logfile, config->debug);
-         received_hup_signal = 0;
-      }
-#endif
-
-#ifdef __OS2__
-#ifdef FEATURE_COOKIE_JAR
-      /*
-       * Need a workaround here: we have to fclose() the jarfile, or we die because it's
-       * already open.  I think unload_configfile() is not being run, which should do
-       * this work.  Until that can get resolved, we'll use this workaround.
-       *
-       * [Note from Jon: We don't unload_configfile() until all existing threads have
-       * exited - they're likely to hang aroung transferring data to the browser.]
-       */
-       if (csp)
-         if(csp->config)
-           if (csp->config->jar)
-           {
-             fclose(csp->config->jar);
-             csp->config->jar = NULL;
-           }
-#endif /* FEATURE_COOKIE_JAR */
-#endif /* __OS2__ */
+         rsp = error_response(csp, "no-such-domain", errno);
 
 
-      if ( NULL == (csp = (struct client_state *) zalloc(sizeof(*csp))) )
-      {
-         log_error(LOG_LEVEL_FATAL, "malloc(%d) for csp failed: %E", sizeof(*csp));
-         continue;
+         log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 404 0",
+                   csp->ip_addr_str, http->ocmd);
       }
       }
-
-      csp->flags |= CSP_FLAG_ACTIVE;
-      csp->sfd    = JB_INVALID_SOCKET;
-
-      csp->config = config = load_config();
-
-      if ( config->need_bind )
+      else
       {
       {
-         /*
-          * Since we were listening to the "old port", we will not see
-          * a "listen" param change until the next IJB request.  So, at
-          * least 1 more request must be made for us to find the new
-          * setting.  I am simply closing the old socket and binding the
-          * new one.
-          *
-          * Which-ever is correct, we will serve 1 more page via the
-          * old settings.  This should probably be a "show-proxy-args"
-          * request.  This should not be a so common of an operation
-          * that this will hurt people's feelings.
-          */
-
-         close_socket(bfd);
+         rsp = error_response(csp, "connect-failed", errno);
 
 
-         bfd = bind_port_helper(config);
+         log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
+                   csp->ip_addr_str, http->ocmd);
       }
 
       }
 
-      log_error(LOG_LEVEL_CONNECT, "accept connection ... ");
 
 
-      if (!accept_connection(csp, bfd))
+      /* Write the answer to the client */
+      if(rsp)
       {
       {
-         log_error(LOG_LEVEL_CONNECT, "accept failed: %E");
-
-#ifdef AMIGA
-         if(!childs)
+         if (write_socket(csp->cfd, rsp->head, rsp->head_length)
+          || write_socket(csp->cfd, rsp->body, rsp->content_length))
          {
          {
-            exit(1);
+            log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
          }
          }
-#endif
-         freez(csp);
-         continue;
-      }
-      else
-      {
-         log_error(LOG_LEVEL_CONNECT, "OK");
       }
 
       }
 
-#ifdef FEATURE_TOGGLE
-      if (g_bToggleIJB)
-      {
-         csp->flags |= CSP_FLAG_TOGGLED_ON;
-      }
-#endif /* def FEATURE_TOGGLE */
-
-#ifdef FEATURE_ACTIVITY_CONSOLE
-      update_stats_config(config);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-
-      if (run_loader(csp))
-      {
-         log_error(LOG_LEVEL_FATAL, "a loader failed - must exit");
-         /* Never get here - LOG_LEVEL_FATAL causes program exit */
-      }
+      free_http_response(rsp);
+      freez(hdr);
+      return;
+   }
 
 
-#ifdef FEATURE_ACL
-      if (block_acl(NULL,csp))
-      {
-#ifdef FEATURE_ACTIVITY_CONSOLE
-         accumulate_stats(STATS_ACL_RESTRICT,1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-         log_error(LOG_LEVEL_CONNECT, "Connection dropped due to ACL");
-         close_socket(csp->cfd);
-         freez(csp);
-         continue;
-      }
-#endif /* def FEATURE_ACL */
+   log_error(LOG_LEVEL_CONNECT, "OK");
 
 
-      /* add it to the list of clients */
-      csp->next = clients->next;
-      clients->next = csp;
+   if (fwd->forward_host || (http->ssl == 0))
+   {
+      /* write the client's (modified) header to the server
+       * (along with anything else that may be in the buffer)
+       */
 
 
-      if (config->multi_threaded)
+      if (write_socket(csp->sfd, hdr, strlen(hdr))
+       || (flush_socket(csp->sfd, csp) <  0))
       {
       {
-         int child_id;
-
-/* this is a switch () statment in the C preprocessor - ugh */
-#undef SELECTED_ONE_OPTION
-
-/* Use Pthreads in preference to native code */
-#if defined(FEATURE_PTHREAD) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-         {
-            pthread_t the_thread;
-            pthread_attr_t attrs;
-
-            pthread_attr_init(&attrs);
-            pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);
-            child_id = (pthread_create(&the_thread, &attrs,
-               (void*)serve, csp) ? -1 : 0);
-            pthread_attr_destroy(&attrs);
-         }
-#endif
+         log_error(LOG_LEVEL_CONNECT, "write header to: %s failed: %E",
+                    http->hostport);
 
 
-#if defined(_WIN32) && !defined(_CYGWIN) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-         child_id = _beginthread(
-            (void (*)(void *))serve,
-            64 * 1024,
-            csp);
-#endif
+         log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
+                   csp->ip_addr_str, http->ocmd);
 
 
-#if defined(__OS2__) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-         child_id = _beginthread(
-            (void(* _Optlink)(void*))serve,
-            NULL,
-            64 * 1024,
-            csp);
-#endif
+         rsp = error_response(csp, "connect-failed", errno);
 
 
-#if defined(__BEOS__) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
+         if(rsp)
          {
          {
-            thread_id tid = spawn_thread
-               (server_thread, "server", B_NORMAL_PRIORITY, csp);
-
-            if ((tid >= 0) && (resume_thread(tid) == B_OK))
-            {
-               child_id = (int) tid;
-            }
-            else
+            if (write_socket(csp->cfd, rsp->head, rsp->head_length)
+             || write_socket(csp->cfd, rsp->body, rsp->content_length))
             {
             {
-               child_id = -1;
+               log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
             }
          }
             }
          }
-#endif
-
-#if defined(AMIGA) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-         csp->cfd = ReleaseSocket(csp->cfd, -1);
-         if((child_id = (int)CreateNewProcTags(
-            NP_Entry, (ULONG)server_thread,
-            NP_Output, Output(),
-            NP_CloseOutput, FALSE,
-            NP_Name, (ULONG)"privoxy child",
-            NP_StackSize, 200*1024,
-            TAG_DONE)))
-         {
-            childs++;
-            ((struct Task *)child_id)->tc_UserData = csp;
-            Signal((struct Task *)child_id, SIGF_SINGLE);
-            Wait(SIGF_SINGLE);
-         }
-#endif
-
-#if !defined(SELECTED_ONE_OPTION)
-         child_id = fork();
-
-         /* This block is only needed when using fork().
-          * When using threads, the server thread was
-          * created and run by the call to _beginthread().
-          */
-         if (child_id == 0)   /* child */
-         {
-            serve(csp);
-            _exit(0);
-
-         }
-         else if (child_id > 0) /* parent */
-         {
-            /* in a fork()'d environment, the parent's
-             * copy of the client socket and the CSP
-             * are not used.
-             */
-
-#if !defined(_WIN32) && defined(__CYGWIN__)
-            wait( NULL );
-#endif /* !defined(_WIN32) && defined(__CYGWIN__) */
-            close_socket(csp->cfd);
-            csp->flags &= ~CSP_FLAG_ACTIVE;
-         }
-#endif
-
-#undef SELECTED_ONE_OPTION
-/* end of cpp switch () */
-
-         if (child_id < 0) /* failed */
-         {
-            char buf[BUFFER_SIZE];
 
 
-            log_error(LOG_LEVEL_ERROR, "can't fork: %E");
-
-            sprintf(buf , "Privoxy: can't fork: errno = %d", errno);
-
-            write_socket(csp->cfd, buf, strlen(buf));
-            close_socket(csp->cfd);
-            csp->flags &= ~CSP_FLAG_ACTIVE;
-            sleep(5);
-            continue;
-         }
+         free_http_response(rsp);
+         freez(hdr);
+         return;
       }
       }
-      else
+   }
+   else
+   {
+      /*
+       * We're running an SSL tunnel and we're not forwarding,
+       * so just send the "connect succeeded" message to the
+       * client, flush the rest, and get out of the way.
+       */
+      log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 2\n",
+                csp->ip_addr_str, http->ocmd);
+
+      if (write_socket(csp->cfd, CSUCCEED, sizeof(CSUCCEED)-1))
       {
       {
-         serve(csp);
+         freez(hdr);
+         return;
       }
       }
+      IOB_RESET(csp);
    }
 
    }
 
-   /* NOTREACHED unless FEATURE_GRACEFUL_TERMINATION is defined */
+   /* we're finished with the client's header */
+   freez(hdr);
 
 
-   /* Clean up.  Aim: free all memory (no leaks) */
-#ifdef FEATURE_GRACEFUL_TERMINATION
+   maxfd = ( csp->cfd > csp->sfd ) ? csp->cfd : csp->sfd;
 
 
-   log_error(LOG_LEVEL_ERROR, "Graceful termination requested");
+   /* pass data between the client and server
+    * until one or the other shuts down the connection.
+    */
 
 
-   unload_current_config_file();
-   unload_current_actions_file();
-   unload_current_re_filterfile();
-#ifdef FEATURE_TRUST
-   unload_current_trust_file();
-#endif
+   server_body = 0;
 
 
-   if (config->multi_threaded)
+   for (;;)
    {
    {
-      int i = 60;
-      do
-      {
-         sleep(1);
-         sweep();
-      } while ((clients->next != NULL) && (--i > 0));
+#ifdef __OS2__
+      /*
+       * FD_ZERO here seems to point to an errant macro which crashes.
+       * So do this by hand for now...
+       */
+      memset(&rfds,0x00,sizeof(fd_set));
+#else
+      FD_ZERO(&rfds);
+#endif
+      FD_SET(csp->cfd, &rfds);
+      FD_SET(csp->sfd, &rfds);
 
 
-      if (i <= 0)
+      n = select((int)maxfd+1, &rfds, NULL, NULL, NULL);
+
+      if (n < 0)
       {
       {
-         log_error(LOG_LEVEL_ERROR, "Graceful termination failed - still some live clients after 1 minute wait.");
+         log_error(LOG_LEVEL_ERROR, "select() failed!: %E");
+         return;
       }
       }
-   }
-   sweep();
-   sweep();
-
-#if defined(unix)
-   free(basedir);
-#endif
-#if defined(_WIN32) && !defined(_WIN_CONSOLE)
-   /* Cleanup - remove taskbar icon etc. */
-   TermLogWindow();
-#endif
 
 
-   exit(0);
-#endif /* FEATURE_GRACEFUL_TERMINATION */
-
-}
+      /* this is the body of the browser's request
+       * just read it and write it.
+       */
 
 
-/*********************************************************************
- *
- * Function    :  relay_server_traffic
- *
- * Description :  receive traffic from the server and relay it
- *                to the client, with some processing
- *
- * Parameters  :
- *          1  :  client_state structure
- *                         
- *
- * Returns     :  JB_ERR_OK if there may be more work
- *             :  other values for errors
- *
- **********************************************************************/
+      if (FD_ISSET(csp->cfd, &rfds))
+      {
+         len = read_socket(csp->cfd, buf, sizeof(buf));
 
 
-static jb_err relay_server_traffic( struct client_state *csp )
-{
-#ifdef FEATURE_KILL_POPUPS
-   int block_popups;         /* bool, 1==will block popups */
-   int block_popups_now = 0; /* bool, 1==currently blocking popups */
-#endif /* def FEATURE_KILL_POPUPS */
-   
-   char buf[BUFFER_SIZE];
-   int len; /* for buffer sizes */
-   int ms_iis5_hack = 0;
-   int byte_count = 0;
-   char *hdr;
-   char *p;
+         if (len <= 0)
+         {
+            break; /* "game over, man" */
+         }
 
 
-   /* Skeleton for HTTP response, if we should intercept the request */
-   struct http_response *rsp;
+         if (write_socket(csp->sfd, buf, (size_t)len))
+         {
+            log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
+            return;
+         }
+         continue;
+      }
 
 
-   int pcrs_filter;        /* bool, 1==will filter through pcrs */
-   int gif_deanimate;      /* bool, 1==will deanimate gifs */
-   int jpeg_inspect;       /* bool, 1==will inspect jpegs */
+      /*
+       * The server wants to talk.  It could be the header or the body.
+       * If `hdr' is null, then it's the header otherwise it's the body.
+       * FIXME: Does `hdr' really mean `host'? No.
+       */
 
 
-#ifdef FEATURE_KILL_POPUPS
-   block_popups               = ((csp->action->flags & ACTION_NO_POPUPS) != 0);
-#endif /* def FEATURE_KILL_POPUPS */
 
 
-   pcrs_filter                = (csp->rlist != NULL) &&  /* There are expressions to be used */
-                                (!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER]));
+      if (FD_ISSET(csp->sfd, &rfds))
+      {
+         fflush( 0 );
+         len = read_socket(csp->sfd, buf, sizeof(buf) - 1);
 
 
-   gif_deanimate              = ((csp->action->flags & ACTION_DEANIMATE) != 0);
+         if (len < 0)
+         {
+            log_error(LOG_LEVEL_ERROR, "read from: %s failed: %E", http->host);
 
 
-   jpeg_inspect               = ((csp->action->flags & ACTION_JPEG_INSPECT) != 0);
+            log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
+                      csp->ip_addr_str, http->ocmd);
 
 
-   fflush (0);
-   len = read_socket (csp->sfd, buf, sizeof (buf) - 1);
+            rsp = error_response(csp, "connect-failed", errno);
 
 
-   if (len < 0)
-   {
-      log_error (LOG_LEVEL_ERROR, "read from: %s failed: %E", csp->http->host);
+            if(rsp)
+            {
+               if (write_socket(csp->cfd, rsp->head, rsp->head_length)
+                || write_socket(csp->cfd, rsp->body, rsp->content_length))
+               {
+                  log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
+               }
+            }
 
 
-      log_error (LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
-         csp->ip_addr_str, csp->http->ocmd);
+            free_http_response(rsp);
+            return;
+         }
 
 
-      rsp = error_response (csp, "connect-failed", errno);
+         /* Add a trailing zero.  This lets filter_popups
+          * use string operations.
+          */
+         buf[len] = '\0';
 
 
-      if (rsp)
-      {
-         if (write_socket (csp->cfd, rsp->head, rsp->head_length)
-            || write_socket (csp->cfd, rsp->body, rsp->content_length))
+#ifdef FEATURE_KILL_POPUPS
+         /* Filter the popups on this read. */
+         if (block_popups_now)
          {
          {
-            log_error (LOG_LEVEL_ERROR, "write to: %s failed: %E",
-                       csp->http->host);
+            filter_popups(buf, csp);
          }
          }
-      }
+#endif /* def FEATURE_KILL_POPUPS */
 
 
-      free_http_response (rsp);
-      return JB_ERR_GENERIC;
-   }
+         /* Normally, this would indicate that we've read
+          * as much as the server has sent us and we can
+          * close the client connection.  However, Microsoft
+          * in its wisdom has released IIS/5 with a bug that
+          * prevents it from sending the trailing \r\n in
+          * a 302 redirect header (and possibly other headers).
+          * To work around this if we've haven't parsed
+          * a full header we'll append a trailing \r\n
+          * and see if this now generates a valid one.
+          *
+          * This hack shouldn't have any impacts.  If we've
+          * already transmitted the header or if this is a
+          * SSL connection, then we won't bother with this
+          * hack.  So we only work on partially received
+          * headers.  If we append a \r\n and this still
+          * doesn't generate a valid header, then we won't
+          * transmit anything to the client.
+          */
+         if (len == 0)
+         {
 
 
-   /* Add a trailing zero.  This lets filter_popups
-    * use string operations.
-    */
-   buf[len] = '\0';
+            if (server_body || http->ssl)
+            {
+               /*
+                * If we have been buffering up the document,
+                * now is the time to apply content modification
+                * and send the result to the client.
+                */
+               if (content_filter)
+               {
+                  /*
+                   * If the content filter fails, use the original
+                   * buffer and length.
+                   * (see p != NULL ? p : csp->iob->cur below)
+                   */
+                  if (NULL == (p = (*content_filter)(csp)))
+                  {
+                     csp->content_length = csp->iob->eod - csp->iob->cur;
+                  }
+
+                  hdr = sed(server_patterns, add_server_headers, csp);
+                  if (hdr == NULL)
+                  {
+                     /* FIXME Should handle error properly */
+                     log_error(LOG_LEVEL_FATAL, "Out of memory parsing server header");
+                  }
+
+                  if (write_socket(csp->cfd, hdr, strlen(hdr))
+                   || write_socket(csp->cfd, p != NULL ? p : csp->iob->cur, csp->content_length))
+                  {
+                     log_error(LOG_LEVEL_ERROR, "write modified content to client failed: %E");
+                     freez(hdr);
+                     freez(p);
+                     return;
+                  }
+
+                  freez(hdr);
+                  freez(p);
+               }
+
+               break; /* "game over, man" */
+            }
 
 
-#ifdef FEATURE_KILL_POPUPS
-   /* Filter the popups on this read. */
-   if (block_popups_now)
-   {
-      filter_popups (buf, csp);
-   }
-#endif /* def FEATURE_KILL_POPUPS */
+            /*
+             * This is NOT the body, so
+             * Let's pretend the server just sent us a blank line.
+             */
+            len = sprintf(buf, "\r\n");
 
 
+            /*
+             * Now, let the normal header parsing algorithm below do its
+             * job.  If it fails, we'll exit instead of continuing.
+             */
 
 
-   /* Normally, this would indicate that we've read
-    * as much as the server has sent us and we can
-    * close the client connection.  However, Microsoft
-    * in its wisdom has released IIS/5 with a bug that
-    * prevents it from sending the trailing \r\n in
-    * a 302 redirect header (and possibly other headers).
-    * To work around this if we've haven't parsed
-    * a full header we'll append a trailing \r\n
-    * and see if this now generates a valid one.
-    *
-    * This hack shouldn't have any impacts.  If we've
-    * already transmitted the header or if this is a
-    * SSL connection, then we won't bother with this
-    * hack.  So we only work on partially received
-    * headers.  If we append a \r\n and this still
-    * doesn't generate a valid header, then we won't
-    * transmit anything to the client.
-    */
-   if (len == 0)
-   {
+            ms_iis5_hack = 1;
+         }
 
 
-      if (csp->all_headers_read || csp->http->ssl)
-      {
          /*
          /*
-          * If we have been buffering up the document,
-          * now is the time to apply content modification
-          * and send the result to the client.
+          * If this is an SSL connection or we're in the body
+          * of the server document, just write it to the client,
+          * unless we need to buffer the body for later content-filtering
           */
           */
-         if (csp->content_filter)
+
+         if (server_body || http->ssl)
          {
          {
-            /*
-             * If the content filter fails, use the original
-             * buffer and length.
-             * (see p != NULL ? p : csp->iob->cur below)
-             */
-            if (NULL == (p = (*csp->content_filter) (csp)))
+            if (content_filter)
             {
             {
-               csp->content_length = csp->iob->eod - csp->iob->cur;
+               /*
+                * If there is no memory left for buffering the content, or the buffer limit
+                * has been reached, switch to non-filtering mode, i.e. make & write the
+                * header, flush the iob and buf, and get out of the way.
+                */
+               if (add_to_iob(csp, buf, len))
+               {
+                  size_t hdrlen;
+                  int flushed;
+
+                  log_error(LOG_LEVEL_ERROR, "Flushing header and buffers. Stepping back from filtering.");
+
+                  hdr = sed(server_patterns, add_server_headers, csp);
+                  if (hdr == NULL)
+                  {
+                     /* 
+                      * Memory is too tight to even generate the header.
+                      * Send our static "Out-of-memory" page.
+                      */
+                     log_error(LOG_LEVEL_ERROR, "Out of memory while trying to flush.");
+                     rsp = cgi_error_memory();
+
+                     if (write_socket(csp->cfd, rsp->head, rsp->head_length)
+                         || write_socket(csp->cfd, rsp->body, rsp->content_length))
+                     {
+                        log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
+                     }
+                     return;
+                  }
+
+                  hdrlen = strlen(hdr);
+
+                  if (write_socket(csp->cfd, hdr, hdrlen)
+                   || ((flushed = flush_socket(csp->cfd, csp)) < 0)
+                   || (write_socket(csp->cfd, buf, (size_t) len)))
+                  {
+                     log_error(LOG_LEVEL_CONNECT, "Flush header and buffers to client failed: %E");
+
+                     freez(hdr);
+                     return;
+                  }
+
+                  byte_count += hdrlen + flushed + len;
+                  freez(hdr);
+                  content_filter = NULL;
+                  server_body = 1;
+
+               }
             }
             }
-
-            hdr = sed (server_patterns, add_server_headers, csp);
-            if (hdr == NULL)
+            else
             {
             {
-               /* FIXME Should handle error properly */
-               log_error (LOG_LEVEL_FATAL,
-                  "Out of memory parsing server header");
-
+               if (write_socket(csp->cfd, buf, (size_t)len))
+               {
+                  log_error(LOG_LEVEL_ERROR, "write to client failed: %E");
+                  return;
+               }
             }
             }
+            byte_count += len;
+            continue;
+         }
+         else
+         {
+            /* we're still looking for the end of the
+             * server's header ... (does that make header
+             * parsing an "out of body experience" ?
+             */
 
 
-            if (write_socket (csp->cfd, hdr, strlen (hdr))
-               || write_socket (csp->cfd, p != NULL ? p : csp->iob->cur,
-                          csp->content_length))
+            /* 
+             * buffer up the data we just read.  If that fails, 
+             * there's little we can do but send our static
+             * out-of-memory page.
+             */
+            if (add_to_iob(csp, buf, len))
             {
             {
-               log_error (LOG_LEVEL_ERROR,
-                  "write modified content to client failed: %E");
-               return JB_ERR_GENERIC;
+               log_error(LOG_LEVEL_ERROR, "Out of memory while looking for end of server headers.");
+               rsp = cgi_error_memory();
+               
+               if (write_socket(csp->cfd, rsp->head, rsp->head_length)
+                   || write_socket(csp->cfd, rsp->body, rsp->content_length))
+               {
+                  log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
+               }
+               return;
             }
 
             }
 
-            freez (hdr);
-            if (NULL != p)
+            /* get header lines from the iob */
+
+            while ((p = get_header(csp)) != NULL)
             {
             {
-               freez (p);
+               if (*p == '\0')
+               {
+                  /* see following note */
+                  break;
+               }
+               enlist(csp->headers, p);
+               freez(p);
             }
             }
-         }
-         log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 %d",
-            csp->ip_addr_str, csp->http->ocmd, byte_count);
-         return JB_ERR_GENERIC;
-      }
-
-      /*
-       * This is NOT the body, so
-       * Let's pretend the server just sent us a blank line.
-       */
-      len = sprintf (buf, "\r\n");
-
-      /*
-       * Now, let the normal header parsing algorithm below do its
-       * job.  If it fails, we'll exit instead of continuing.
-       */
-
-      ms_iis5_hack = 1;
-   }
-
-   /*
-    * If this is an SSL connection or we're in the body
-    * of the server document, just write it to the client,
-    * unless we need to buffer the body for later content-filtering
-    */
 
 
-   if (csp->all_headers_read || csp->http->ssl)
-   {
-      if (csp->content_filter)
-      {
-         add_to_iob (csp, buf, len);
+            /* NOTE: there are no "empty" headers so
+             * if the pointer `p' is not NULL we must
+             * assume that we reached the end of the
+             * buffer before we hit the end of the header.
+             */
 
 
-         /*
-          * If the buffer limit will be reached on the next read,
-          * switch to non-filtering mode, i.e. make & write the
-          * header, flush the socket and get out of the way.
-          */
-         if (((size_t) (csp->iob->eod - csp->iob->buf)) +
-              (size_t) BUFFER_SIZE > csp->config->buffer_limit)
-         {
-            size_t hdrlen;
+            if (p)
+            {
+               if (ms_iis5_hack)
+               {
+                  /* Well, we tried our MS IIS/5
+                   * hack and it didn't work.
+                   * The header is incomplete
+                   * and there isn't anything
+                   * we can do about it.
+                   */
+                  break;
+               }
+               else
+               {
+                  /* Since we have to wait for
+                   * more from the server before
+                   * we can parse the headers
+                   * we just continue here.
+                   */
+                  continue;
+               }
+            }
 
 
-            log_error (LOG_LEVEL_ERROR,
-                        "Buffer size limit reached! Flushing and stepping back.");
+            /* we have now received the entire header.
+             * filter it and send the result to the client
+             */
 
 
-            hdr = sed (server_patterns, add_server_headers, csp);
+            hdr = sed(server_patterns, add_server_headers, csp);
             if (hdr == NULL)
             {
                /* FIXME Should handle error properly */
             if (hdr == NULL)
             {
                /* FIXME Should handle error properly */
-               log_error (LOG_LEVEL_FATAL,
-                  "Out of memory parsing server header");
+               log_error(LOG_LEVEL_FATAL, "Out of memory parsing server header");
             }
 
             }
 
-            hdrlen = strlen (hdr);
-            byte_count += hdrlen;
+#ifdef FEATURE_KILL_POPUPS
+            /* Start blocking popups if appropriate. */
 
 
-            if (write_socket (csp->cfd, hdr, hdrlen)
-               || ((len = flush_socket (csp->cfd, csp)) < 0))
+            if ((csp->content_type & CT_TEXT) &&  /* It's a text / * MIME-Type */
+                !http->ssl    &&                  /* We talk plaintext */
+                block_popups)                     /* Policy allows */
             {
             {
-               log_error (LOG_LEVEL_CONNECT,
-                  "write header to client failed: %E");
-
-               freez (hdr);
-               return JB_ERR_GENERIC;
+               block_popups_now = 1;
+               /*
+                * Filter the part of the body that came in the same read
+                * as the last headers:
+                */
+               filter_popups(csp->iob->cur, csp);
             }
 
             }
 
-            freez (hdr);
-            byte_count += len;
+#endif /* def FEATURE_KILL_POPUPS */
 
 
-            csp->content_filter = NULL;
-            csp->all_headers_read = 1;
+            /* Buffer and pcrs filter this if appropriate. */
 
 
-         }
-      }
-      else
-      {
-         if (write_socket (csp->cfd, buf, (size_t) len))
-         {
-            log_error (LOG_LEVEL_ERROR, "write to client failed: %E");
-            return JB_ERR_GENERIC;
-         }
-      }
-      byte_count += len;
-      return JB_ERR_OK ;
-   }
-   else
-   {
-      /*
-       * we're still looking for the end of the
-       * server's header ... (does that make header
-       * parsing an "out of body experience" ?
-       */
+            if ((csp->content_type & CT_TEXT) &&  /* It's a text / * MIME-Type */
+                !http->ssl    &&                  /* We talk plaintext */
+                pcrs_filter)                      /* Policy allows */
+            {
+               content_filter = pcrs_filter_response;
+            }
 
 
-      /* buffer up the data we just read */
-      add_to_iob (csp, buf, len);
+            /* Buffer and gif_deanimate this if appropriate. */
 
 
-      /* get header lines from the iob */
+            if ((csp->content_type & CT_GIF)  &&  /* It's an image/gif MIME-Type */
+                !http->ssl    &&                  /* We talk plaintext */
+                gif_deanimate)                    /* Policy allows */
+            {
+               content_filter = gif_deanimate_response;
+            }
 
 
-      while ((p = get_header (csp)) != NULL)
-      {
-         if (*p == '\0')
-         {
-            /* see following note */
-            log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 %d",
-               csp->ip_addr_str, csp->http->ocmd, byte_count);
-            return JB_ERR_GENERIC;
-         }
-         enlist (csp->headers, p);
-         freez (p);
-      }
+            /* Buffer and jpg_inspect this if appropriate. */
 
 
-      /* NOTE: there are no "empty" headers so
-       * if the pointer `p' is not NULL we must
-       * assume that we reached the end of the
-       * buffer before we hit the end of the header.
-       */
+            if ((csp->content_type & CT_JPEG)  &&  /* It's an image/jpeg MIME-Type */
+                !http->ssl    &&                   /* We talk plaintext */
+                jpeg_inspect)                      /* Policy allows */
+            {
+               content_filter = jpeg_inspect_response;
+            }
 
 
-      if (p)
-      {
-         if (ms_iis5_hack)
-         {
-            /* Well, we tried our MS IIS/5
-             * hack and it didn't work.
-             * The header is incomplete
-             * and there isn't anything
-             * we can do about it.
-             */
-            log_error(LOG_LEVEL_CLF, "Incomplete Server Header: %s - - [%T] \"%s\" 200 %d",
-                csp->ip_addr_str, csp->http->ocmd, byte_count);
-            return JB_ERR_GENERIC;
-         }
-         else
-         {
-            /* Since we have to wait for
-             * more from the server before
-             * we can parse the headers
-             * we just continue here.
+            /*
+             * Only write if we're not buffering for content modification
              */
              */
-            return JB_ERR_OK;
-         }
-      }      
-      
-      /* we have now received the entire header.
-       * filter it and send the result to the client
-       */
-
-      hdr = sed (server_patterns, add_server_headers, csp);
-      if (hdr == NULL)
-      {
-         /* FIXME Should handle error properly */
-         log_error (LOG_LEVEL_FATAL, "Out of memory parsing server header");
-      }
+            if (!content_filter)
+            {
+               /* write the server's (modified) header to
+                * the client (along with anything else that
+                * may be in the buffer)
+                */
+
+               if (write_socket(csp->cfd, hdr, strlen(hdr))
+                || ((len = flush_socket(csp->cfd, csp)) < 0))
+               {
+                  log_error(LOG_LEVEL_CONNECT, "write header to client failed: %E");
+
+                  /* the write failed, so don't bother
+                   * mentioning it to the client...
+                   * it probably can't hear us anyway.
+                   */
+                  freez(hdr);
+                  return;
+               }
+
+               byte_count += len;
+            }
 
 
-  
+            /* we're finished with the server's header */
 
 
-#ifdef FEATURE_KILL_POPUPS
-      /* Start blocking popups if appropriate. */
+            freez(hdr);
+            server_body = 1;
 
 
-      if ((csp->content_type & CT_TEXT) &&   /* It's a text / * MIME-Type */
-          !csp->http->ssl &&                 /* We talk plaintext */
-          block_popups)                      /* Policy allows */
-      {
-         block_popups_now = 1;
-         /*
-          * Filter the part of the body that came in the same read
-          * as the last headers:
-          */
-         filter_popups (csp->iob->cur, csp);
+            /* If this was a MS IIS/5 hack then it means
+             * the server has already closed the
+             * connection.  Nothing more to read.  Time
+             * to bail.
+             */
+            if (ms_iis5_hack)
+            {
+               break;
+            }
+         }
+         continue;
       }
 
       }
 
-#endif /* def FEATURE_KILL_POPUPS */
+      return; /* huh? we should never get here */
+   }
 
 
-        /* Buffer and pcrs filter this if appropriate. */
+   log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 %d",
+             csp->ip_addr_str, http->ocmd, byte_count);
+}
 
 
-      if ((csp->content_type & CT_TEXT) &&       /* It's a text / * MIME-Type */
-          !csp->http->ssl &&                     /* We talk plaintext */
-          pcrs_filter)                           /* Policy allows */
-      {
-         csp->content_filter = pcrs_filter_response;
-      }
 
 
-      /* Buffer and gif_deanimate this if appropriate. */
+/*********************************************************************
+ *
+ * Function    :  serve
+ *
+ * Description :  This is little more than chat.  We only "serve" to
+ *                to close any socket that chat may have opened.
+ *
+ * Parameters  :
+ *          1  :  csp = Current client state (buffers, headers, etc...)
+ *
+ * Returns     :  N/A
+ *
+ *********************************************************************/
+#ifdef AMIGA
+void serve(struct client_state *csp)
+#else /* ifndef AMIGA */
+static void serve(struct client_state *csp)
+#endif /* def AMIGA */
+{
+   chat(csp);
+   close_socket(csp->cfd);
 
 
-      if ((csp->content_type & CT_GIF) &&        /* It's a image/gif MIME-Type */
-          !csp->http->ssl &&                     /* We talk plaintext */
-          gif_deanimate)                         /* Policy allows */
-      {
-         csp->content_filter = gif_deanimate_response;
-      }
+   if (csp->sfd != JB_INVALID_SOCKET)
+   {
+      close_socket(csp->sfd);
+   }
 
 
-      /* Buffer and jpg_inspect this if appropriate. */
+   csp->flags &= ~CSP_FLAG_ACTIVE;
 
 
-      if ((csp->content_type & CT_JPEG)  &&      /* It's an image/jpeg MIME-Type */
-          !csp->http->ssl &&                     /* We talk plaintext */
-          jpeg_inspect)                          /* Policy allows */
-      {
-         csp->content_filter = jpeg_inspect_response;
-      }
+}
 
 
-      /*
-       * Only write if we're not buffering for content modification
-       */
-      if (!csp->content_filter)
-      {
-         /* write the server's (modified) header to
-          * the client (along with anything else that
-          * may be in the buffer)
-          */
-         if (write_socket (csp->cfd, hdr, strlen (hdr))
-             || ((len = flush_socket (csp->cfd, csp)) < 0))
-         {
-            log_error (LOG_LEVEL_CONNECT,
-               "write header to client failed: %E");
 
 
-            /* the write failed, so don't bother
-             * mentioning it to the client...
-             * it probably can't hear us anyway.
-             */
-            freez (hdr);
-            return JB_ERR_GENERIC;
-         }
+#ifdef __BEOS__
+/*********************************************************************
+ *
+ * Function    :  server_thread
+ *
+ * Description :  We only exist to call `serve' in a threaded environment.
+ *
+ * Parameters  :
+ *          1  :  data = Current client state (buffers, headers, etc...)
+ *
+ * Returns     :  Always 0.
+ *
+ *********************************************************************/
+static int32 server_thread(void *data)
+{
+   serve((struct client_state *) data);
+   return 0;
 
 
-         byte_count += len;
-      }
+}
+#endif
 
 
-      /* we're finished with the server's header */
 
 
-      freez (hdr);
-      csp->all_headers_read = 1;
+/*********************************************************************
+ *
+ * Function    :  usage
+ *
+ * Description :  Print usage info & exit.
+ *
+ * Parameters  :  Pointer to argv[0] for identifying ourselves
+ *
+ * Returns     :  No. ,-)
+ *
+ *********************************************************************/
+void usage(const char *myname)
+{
+   printf("Privoxy version " VERSION " (" HOME_PAGE_URL ")\n"
+#if !defined(unix)
+           "Usage: %s [--help] [--version] [configfile]\n"
+#else
+           "Usage: %s [--help] [--version] [--no-daemon] [--pidfile pidfile] [--user user[.group]] [configfile]\n"
+#endif
+           "Aborting.\n", myname);
+   exit(2);
 
 
-      /* If this was a MS IIS/5 hack then it means
-       * the server has already closed the
-       * connection.  Nothing more to read.  Time
-       * to bail.
-       */
-      if (ms_iis5_hack)
-      {
-         return JB_ERR_GENERIC ;
-      }
-   }
-   return JB_ERR_OK ;
-} /* END relay_server_traffic() */
+}
 
 
 /*********************************************************************
  *
 
 
 /*********************************************************************
  *
- * Function    :  read_client_headers
+ * Function    :  main
  *
  *
- * Description :  read all the client headers, and fill in the
- *                http* structure
+ * Description :  Load the config file and start the listen loop.
+ *                This function is a lot more *sane* with the `load_config'
+ *                and `listen_loop' functions; although it stills does
+ *                a *little* too much for my taste.
  *
  * Parameters  :
  *
  * Parameters  :
- *          1  :  client_state structure
- *          2  :  http_request structure
- *                         
+ *          1  :  argc = Number of parameters (including $0).
+ *          2  :  argv = Array of (char *)'s to the parameters.
+ *
+ * Returns     :  1 if : can't open config file, unrecognized directive,
+ *                stats requested in multi-thread mode, can't open the
+ *                log file, can't open the jar file, listen port is invalid,
+ *                any load fails, and can't bind port.
+ *
+ *                Else main never returns, the process must be signaled
+ *                to terminate execution.  Or, on Windows, use the
+ *                "File", "Exit" menu option.
  *
  *
- * Returns     :  JB_ERR_OK  - headers read and parsed ok
- *             :  other values - an error occurred.
  *********************************************************************/
  *********************************************************************/
-
-static jb_err read_client_headers( struct client_state *csp, struct http_request *http )
+#ifdef __MINGW32__
+int real_main(int argc, const char *argv[])
+#else
+int main(int argc, const char *argv[])
+#endif
 {
 {
-
+   int argc_pos = 0;
+#ifdef unix
+   struct passwd *pw = NULL;
+   struct group *grp = NULL;
    char *p;
    char *p;
-   char *req;
-   char buf[BUFFER_SIZE];
-   int len; /* for buffer sizes */
+   int do_chroot = 0;
+#endif
+
+   Argc = argc;
+   Argv = argv;
+
+   configfile =
+#if !defined(_WIN32)
+   "config"
+#else
+   "config.txt"
+#endif
+      ;
 
    /*
 
    /*
-    * Read the client's request.  Note that since we're not using select() we
-    * could get blocked here if a client connected, then didn't say anything!
-    *
-    * This will read all the client headers.
+    * Parse the command line arguments
     */
     */
-
-   req = NULL ;
-   for (;;)
+   while (++argc_pos < argc)
    {
    {
-      len = read_socket(csp->cfd, buf, sizeof(buf));
-
-      if (len <= 0) break;      /* error! */
+      if (strcmp(argv[argc_pos], "--help") == 0)
+      {
+         usage(argv[0]);
+      }
 
 
-      add_to_iob(csp, buf, len);
+      else if(strcmp(argv[argc_pos], "--version") == 0)
+      {
+         printf("Privoxy version " VERSION " (" HOME_PAGE_URL ")\n");
+         exit(0);
+      }
 
 
-      req = get_header(csp);
+#if defined(unix)
 
 
-      if (req == NULL)
+     else if (strcmp(argv[argc_pos], "--no-daemon" ) == 0)
       {
       {
-         break;    /* no HTTP request! */
+         no_daemon = 1;
       }
 
       }
 
-      if (*req == '\0')
+      else if (strcmp(argv[argc_pos], "--pidfile" ) == 0)
       {
       {
-         continue;   /* more to come! */
+         if (++argc_pos == argc) usage(argv[0]);
+         pidfile = strdup(argv[argc_pos]);
       }
 
       }
 
-      /* When we get here we have read one header which is enough */
-      /* to check whether the connection is allowed */
-      break; 
-   }
-
+      else if (strcmp(argv[argc_pos], "--user" ) == 0)
+      {
+         if (++argc_pos == argc) usage(argv[argc_pos]);
 
 
-   for(;;) 
-   {
+         if ((NULL != (p = strchr(argv[argc_pos], '.'))) && *(p + 1) != '0')
+         {
+            *p++ = '\0';
+            if (NULL == (grp = getgrnam(p)))
+            {
+               log_error(LOG_LEVEL_FATAL, "Group %s not found.", p);
+            }
+         }
 
 
-     if ( ( ( p = get_header(csp) ) != NULL) && ( *p == '\0' ) )
-      {
-         len = read_socket(csp->cfd, buf, sizeof(buf));
-         if (len <= 0)
+         if (NULL == (pw = getpwnam(argv[argc_pos])))
          {
          {
-            log_error(LOG_LEVEL_ERROR, "read from client failed: %E");
-            return JB_ERR_GENERIC;
+            log_error(LOG_LEVEL_FATAL, "User %s not found.", argv[argc_pos]);
          }
          }
-         add_to_iob(csp, buf, len);
-         continue;
+
+         if (p != NULL) *--p = '\0';
       }
 
       }
 
-      if (p == NULL) break;
+      else if (strcmp(argv[argc_pos], "--chroot" ) == 0)
+      {
+         do_chroot = 1;
+      }
 
 
-      enlist(csp->headers, p);
-      freez(p);
+#endif /* defined(unix) */
 
 
-   }
+      else
+      {
+         configfile = argv[argc_pos];
+      }
 
 
-   parse_http_request(req, http, csp);
-   freez(req);
+   } /* -END- while (more arguments) */
 
 
-   if (http->cmd == NULL)
+#if defined(unix)
+   if ( *configfile != '/' )
    {
    {
-      strcpy(buf, CHEADER);
-      write_socket(csp->cfd, buf, strlen(buf));
+      char *abs_file, cwd[1024];
 
 
-      log_error(LOG_LEVEL_CLF, "%s - - [%T] \" \" 400 0", csp->ip_addr_str);
+      /* make config-filename absolute here */
+      if ( !(getcwd(cwd, sizeof(cwd))))
+      {
+         perror("get working dir failed");
+         exit( 1 );
+      }
 
 
-      return JB_ERR_GENERIC;
+      if (!(basedir = strdup(cwd))
+      || (!(abs_file = malloc( strlen( basedir ) + strlen( configfile ) + 5 ))))
+      {
+         perror("malloc failed");
+         exit( 1 );
+      }
+      strcpy( abs_file, basedir );
+      strcat( abs_file, "/" );
+      strcat( abs_file, configfile );
+      configfile = abs_file;
    }
    }
+#endif /* defined unix */
 
 
-   return JB_ERR_OK ;
 
 
+   files->next = NULL;
+   clients->next = NULL;
 
 
-} /* END read_client_headers */
+#ifdef AMIGA
+   InitAmiga();
+#elif defined(_WIN32)
+   InitWin32();
+#endif
 
 
+#ifdef OSX_DARWIN
+   /*
+    * Prepare global mutex semaphores
+    */
+   pthread_mutex_init(&gmtime_mutex,0);
+   pthread_mutex_init(&localtime_mutex,0);
+   pthread_mutex_init(&gethostbyaddr_mutex,0);
+   pthread_mutex_init(&gethostbyname_mutex,0);
+#endif /* def OSX_DARWIN */
 
 
-/*********************************************************************
- *
- * Function    :  process_client_headers
- *
- * Description :  Process client headers
- * FIXME: Add description of what we do here!
- *
- * Parameters  :
- *          1  :  client_state structure
- *          2  :  http_request structure
- *                         
- *
- * Returns     :  JB_ERR_OK  - headers processed ok
- *             :  other values - an error occurred.
- *********************************************************************/
+#ifdef FEATURE_PTHREAD
+   pthread_mutex_init(&log_mutex,0);
+   pthread_mutex_init(&log_init_mutex,0);
+#endif /* FEATURE_PTHREAD */
 
 
-static jb_err process_client_headers( struct client_state *csp, struct http_request *http )
+   /*
+    * Unix signal handling
+    *
+    * Catch the abort, interrupt and terminate signals for a graceful exit
+    * Catch the hangup signal so the errlog can be reopened.
+    * Ignore the broken pipe signals (FIXME: Why?)
+    */
+#if !defined(_WIN32) && !defined(__OS2__) && !defined(AMIGA)
 {
 {
+   int idx;
+   const int catched_signals[] = { SIGABRT, SIGTERM, SIGINT, SIGHUP, 0 };
+   const int ignored_signals[] = { SIGPIPE, 0 };
 
 
-
-#ifdef FEATURE_FORCE_LOAD
-      /* If this request contains the FORCE_PREFIX,
-       * better get rid of it now and set the force flag --oes
-       * Changed to use the http structure rather than the req field --jaa
-       * FIXME: This isn't enough -- there is the path and referrer etc! *
-       */
-
-      if (strstr(http->url, FORCE_PREFIX))
+   for (idx = 0; catched_signals[idx] != 0; idx++)
+   {
+      if (signal(catched_signals[idx], sig_handler) == SIG_ERR)
       {
       {
-         strclean(http->url, FORCE_PREFIX);
-         strclean(http->path, FORCE_PREFIX);
-         log_error(LOG_LEVEL_FORCE, "Enforcing request \"%s\".\n", http->url);
-         csp->flags |= CSP_FLAG_FORCED;
+         log_error(LOG_LEVEL_FATAL, "Can't set signal-handler for signal %d: %E", catched_signals[idx]);
       }
       }
+   }
 
 
-#endif /* def FEATURE_FORCE_LOAD */
-
-
-   /* decide how to route the HTTP request */
-
-   if ((http->fwd = forward_url(http, csp)) == NULL)
+   for (idx = 0; ignored_signals[idx] != 0; idx++)
    {
    {
-      log_error(LOG_LEVEL_FATAL, "gateway spec is NULL!?!?  This can't happen!");
-      /* Never get here - LOG_LEVEL_FATAL causes program exit */
+      if (signal(ignored_signals[idx], SIG_IGN) == SIG_ERR)
+      {
+         log_error(LOG_LEVEL_FATAL, "Can't set ignore-handler for signal %d: %E", ignored_signals[idx]);
+      }
    }
 
    }
 
-   /* build the http request to send to the server
-    * we have to do one of the following:
-    *
-    * create = use the original HTTP request to create a new
-    *          HTTP request that has either the path component
-    *          without the http://domainspec (w/path) or the
-    *          full orininal URL (w/url)
-    *          Note that the path and/or the HTTP version may
-    *          have been altered by now.
-    *
-    * connect = Open a socket to the host:port of the server
-    *           and short-circuit server and client socket.
-    *
-    * pass =  Pass the request unchanged if forwarding a CONNECT
-    *         request to a parent proxy. Note that we'll be sending
-    *         the CFAIL message ourselves if connecting to the parent
-    *         fails, but we won't send a CSUCCEED message if it works,
-    *         since that would result in a double message (ours and the
-    *         parent's). After sending the request to the parent, we simply
-    *         tunnel.
-    *
-    * here's the matrix:
-    *                        SSL
-    *                    0        1
-    *                +--------+--------+
-    *                |        |        |
-    *             0  | create | connect|
-    *                | w/path |        |
-    *  Forwarding    +--------+--------+
-    *                |        |        |
-    *             1  | create | pass   |
-    *                | w/url  |        |
-    *                +--------+--------+
-    *
-    */
-
+}
+#else /* ifdef _WIN32 */
+# ifdef _WIN_CONSOLE
    /*
    /*
-    * Determine the actions for this URL
+    * We *are* in a windows console app.
+    * Print a verbose messages about FAQ's and such
     */
     */
-#ifdef FEATURE_TOGGLE
-   if (!(csp->flags & CSP_FLAG_TOGGLED_ON))
-   {
-      /* Most compatible set of actions (i.e. none) */
-      init_current_action(csp->action);
-   }
-   else
-#endif /* ndef FEATURE_TOGGLE */
-   {
-      url_actions(http, csp);
-   }
-
-
+   printf(win32_blurb);
+# endif /* def _WIN_CONSOLE */
+#endif /* def _WIN32 */
 
 
 
 
+   /* Initialize the CGI subsystem */
+   cgi_init_error_messages();
 
    /*
 
    /*
-    * Downgrade http version from 1.1 to 1.0 if +downgrade
-    * action applies
+    * If runnig on unix and without the --nodaemon
+    * option, become a daemon. I.e. fork, detach
+    * from tty and get process group leadership
     */
     */
-   if ( (http->ssl == 0)
-     && (!strcmpic(http->ver, "HTTP/1.1"))
-     && (csp->action->flags & ACTION_DOWNGRADE))
+#if defined(unix)
+{
+   pid_t pid = 0;
+#if 0
+   int   fd;
+#endif
+
+   if (!no_daemon)
    {
    {
-      freez(http->ver);
-      http->ver = strdup("HTTP/1.0");
+      pid  = fork();
 
 
-      if (http->ver == NULL)
+      if ( pid < 0 ) /* error */
       {
       {
-         log_error(LOG_LEVEL_FATAL, "Out of memory downgrading HTTP version");
+         perror("fork");
+         exit( 3 );
       }
       }
-   }
+      else if ( pid != 0 ) /* parent */
+      {
+         int status;
+         pid_t wpid;
+         /*
+          * must check for errors
+          * child died due to missing files aso
+          */
+         sleep( 1 );
+         wpid = waitpid( pid, &status, WNOHANG );
+         if ( wpid != 0 )
+         {
+            exit( 1 );
+         }
+         exit( 0 );
+      }
+      /* child */
+#if 1
+      /* Should be more portable, but not as well tested */
+      setsid();
+#else /* !1 */
+#ifdef __FreeBSD__
+      setpgrp(0,0);
+#else /* ndef __FreeBSD__ */
+      setpgrp();
+#endif /* ndef __FreeBSD__ */
+      fd = open("/dev/tty", O_RDONLY);
+      if ( fd )
+      {
+         /* no error check here */
+         ioctl( fd, TIOCNOTTY,0 );
+         close ( fd );
+      }
+#endif /* 1 */
+      /* FIXME: should close stderr (fd 2) here too, but the test
+       * for existence
+       * and load config file is done in listen_loop() and puts
+       * some messages on stderr there.
+       */
 
 
-   /* 
-    * Save a copy of the original request for logging
-    */
-   http->ocmd = strdup(http->cmd);
+      close( 0 );
+      close( 1 );
+      chdir("/");
 
 
-   if (http->ocmd == NULL)
-   {
-      log_error(LOG_LEVEL_FATAL, "Out of memory copying HTTP request line");
-   }
+   } /* -END- if (!no_daemon) */
 
    /*
 
    /*
-    * (Re)build the HTTP request for non-SSL requests.
-    * If forwarding, use the whole URL, else, use only the path.
+    * As soon as we have written the PID file, we can switch
+    * to the user and group ID indicated by the --user option
     */
     */
-   if (http->ssl == 0)
+   write_pid_file();
+   
+   if (NULL != pw)
    {
    {
-      freez(http->cmd);
-
-      http->cmd = strdup(http->gpc);
-      string_append(&http->cmd, " ");
-
-      if (http->fwd->forward_host)
+      if (((NULL != grp) && setgid(grp->gr_gid)) || (setgid(pw->pw_gid)))
       {
       {
-         string_append(&http->cmd, http->url);
+         log_error(LOG_LEVEL_FATAL, "Cannot setgid(): Insufficient permissions.");
+      }
+      if (do_chroot)
+      {
+         if (!pw->pw_dir)
+         {
+            log_error(LOG_LEVEL_FATAL, "Home directory for %s undefined", pw->pw_name);
+         }
+         if (chroot(pw->pw_dir) < 0)
+         {
+            log_error(LOG_LEVEL_FATAL, "Cannot chroot to %s", pw->pw_dir);
+         }
+         if (chdir ("/"))
+         {
+            log_error(LOG_LEVEL_FATAL, "Cannot chdir /");
+         }
       }
       }
-      else
+      if (setuid(pw->pw_uid))
       {
       {
-         string_append(&http->cmd, http->path);
+         log_error(LOG_LEVEL_FATAL, "Cannot setuid(): Insufficient permissions.");
       }
       }
+      if (do_chroot)
+      {
+         char putenv_dummy[64];
 
 
-      string_append(&http->cmd, " ");
-      string_append(&http->cmd, http->ver);
+         strcpy(putenv_dummy, "HOME=/");
+         if (putenv(putenv_dummy) != 0)
+         {
+            log_error(LOG_LEVEL_FATAL, "Cannot putenv(): HOME");
+         }                
 
 
-      if (http->cmd == NULL)
-      {
-         log_error(LOG_LEVEL_FATAL, "Out of memory rewiting SSL command");
+         snprintf(putenv_dummy, 64, "USER=%s", pw->pw_name);
+         if (putenv(putenv_dummy) != 0)
+         {
+            log_error(LOG_LEVEL_FATAL, "Cannot putenv(): USER");
+         }
       }
    }
       }
    }
-   enlist_first(csp->headers, http->cmd);
-
-
-   /*
-    * If the user has not supplied any wafers, and the user has not
-    * told us to suppress the vanilla wafer, then send the vanilla wafer.
-    */
-   if (list_is_empty(csp->action->multi[ACTION_MULTI_WAFER])
-       && ((csp->action->flags & ACTION_VANILLA_WAFER) != 0))
+   else if (do_chroot)
    {
    {
-      enlist(csp->action->multi[ACTION_MULTI_WAFER], VANILLA_WAFER);
+      log_error(LOG_LEVEL_FATAL, "Cannot chroot without --user argument.");
    }
    }
+}
+#endif /* defined unix */
+
+   listen_loop();
+
+   /* NOTREACHED */
+   return(-1);
+
+}
 
 
-   return JB_ERR_OK ;
-} /* process_client_headers */
 
 /*********************************************************************
  *
 
 /*********************************************************************
  *
- * Function    :  intercept_page
+ * Function    :  bind_port_helper
  *
  *
- * Description :  Check whether to intercept page
+ * Description :  Bind the listen port.  Handles logging, and aborts
+ *                on failure.
  *
  * Parameters  :
  *
  * Parameters  :
- *          1  :  client_state structure
- *          2  :  http_request structure
- *                         
+ *          1  :  config = Privoxy configuration.  Specifies port
+ *                         to bind to.
+ *
+ * Returns     :  Port that was opened.
  *
  *
- * Returns     :  JB_ERR_OK  - Do NOT intercept this page
- *             :  JB_ERR_INTERCEPT - intercept this page
- *             :  all other values - an error occurred.  
  *********************************************************************/
  *********************************************************************/
-static jb_err intercept_page( struct client_state *csp, struct http_request *http )
+static jb_socket bind_port_helper(struct configuration_spec * config)
 {
 {
+   int result;
+   jb_socket bfd;
 
 
-   /* Skeleton for HTTP response, if we should intercept the request */
-   struct http_response *rsp;
-
-
-/*
- * These next lines are a little ugly, but they simplifies the if statements
- * below.  Basically if TOGGLE, then we want the if to test if the
- * CSP_FLAG_TOGGLED_ON flag ist set, else we don't.  And if FEATURE_FORCE_LOAD,
- * then we want the if to test for CSP_FLAG_FORCED , else we don't
- */
-#ifdef FEATURE_TOGGLE
-#   define IS_TOGGLED_ON_AND (csp->flags & CSP_FLAG_TOGGLED_ON) &&
-#else /* ifndef FEATURE_TOGGLE */
-#   define IS_TOGGLED_ON_AND
-#endif /* ndef FEATURE_TOGGLE */
-#ifdef FEATURE_FORCE_LOAD
-#   define IS_NOT_FORCED_AND !(csp->flags & CSP_FLAG_FORCED) &&
-#else /* ifndef FEATURE_FORCE_LOAD */
-#   define IS_NOT_FORCED_AND
-#endif /* def FEATURE_FORCE_LOAD */
-
-#define IS_ENABLED_AND   IS_TOGGLED_ON_AND IS_NOT_FORCED_AND
-
-   if (
-       /* a CGI call was detected and answered */
-       (NULL != (rsp = dispatch_cgi(csp)))
-
-       /* or we are enabled and... */
-       || (IS_ENABLED_AND (
-
-            /* ..the request was blocked */
-          ( NULL != (rsp = block_url(csp)))
+   if ( (config->haddr != NULL)
+     && (config->haddr[0] == '1')
+     && (config->haddr[1] == '2')
+     && (config->haddr[2] == '7')
+     && (config->haddr[3] == '.') )
+   {
+      log_error(LOG_LEVEL_INFO, "Listening on port %d for local connections only",
+                config->hport);
+   }
+   else if (config->haddr == NULL)
+   {
+      log_error(LOG_LEVEL_INFO, "Listening on port %d on all IP addresses",
+                config->hport);
+   }
+   else
+   {
+      log_error(LOG_LEVEL_INFO, "Listening on port %d on IP address %s",
+                config->hport, config->haddr);
+   }
 
 
-          /* ..or untrusted */
-#ifdef FEATURE_TRUST
-          || ( NULL != (rsp = trust_url(csp)))
-#endif /* def FEATURE_TRUST */
+   result = bind_port(config->haddr, config->hport, &bfd);
 
 
-          /* ..or a fast redirect kicked in */
-#ifdef FEATURE_FAST_REDIRECTS
-          || (((csp->action->flags & ACTION_FAST_REDIRECTS) != 0) &&
-                (NULL != (rsp = redirect_url(csp))))
-#endif /* def FEATURE_FAST_REDIRECTS */
-          ))
-      )
+   if (result < 0)
    {
    {
-      /* Write the answer to the client */
-      if (write_socket(csp->cfd, rsp->head, rsp->head_length)
-       || write_socket(csp->cfd, rsp->body, rsp->content_length))
+      switch(result)
       {
       {
-         log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
-      }
+         case -3 :
+            log_error(LOG_LEVEL_FATAL, "can't bind to %s:%d: "
+               "There may be another Privoxy or some other "
+               "proxy running on port %d",
+               (NULL != config->haddr) ? config->haddr : "INADDR_ANY",
+                      config->hport, config->hport);
 
 
-#ifdef FEATURE_STATISTICS
-      /* Count as a rejected request */
-      csp->flags |= CSP_FLAG_REJECTED;
-#endif /* def FEATURE_STATISTICS */
+         case -2 :
+            log_error(LOG_LEVEL_FATAL, "can't bind to %s:%d: " 
+               "The hostname is not resolvable",
+               (NULL != config->haddr) ? config->haddr : "INADDR_ANY", config->hport);
 
 
-      /* Log (FIXME: All intercept reasons apprear as "crunch" with Status 200) */
-      log_error(LOG_LEVEL_GPC, "%s%s crunch!", http->hostport, http->path);
-      log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 3", csp->ip_addr_str, http->ocmd);
+         default :
+            log_error(LOG_LEVEL_FATAL, "can't bind to %s:%d: because %E",
+               (NULL != config->haddr) ? config->haddr : "INADDR_ANY", config->hport);
+      }
 
 
-      /* Clean up and return */
-      free_http_response(rsp);
-      return JB_ERR_INTERCEPT;
+      /* shouldn't get here */
+      return JB_INVALID_SOCKET;
    }
 
    }
 
-   /* When we get here the request doesn't need to be intercepted */
-   return JB_ERR_OK ;
+   config->need_bind = 0;
+
+   return bfd;
 }
 
 }
 
+
 /*********************************************************************
  *
 /*********************************************************************
  *
- * Function    :  open_forwarding_connection
+ * Function    :  listen_loop
+ *
+ * Description :  bind the listen port and enter a "FOREVER" listening loop.
  *
  *
- * Description :  Check whether to intercept page
+ * Parameters  :  N/A
+ *
+ * Returns     :  Never.
  *
  *
- * Parameters  :
- *          1  :  client_state structure
- *          2  :  http_request structure
- *                         
- * Returns     :  JB_ERR_OK  - Connection opened ok
- *             :  all other values - an error occurred.  
  *********************************************************************/
  *********************************************************************/
-static jb_err open_forwarding_connection(struct client_state *csp )
+static void listen_loop(void)
 {
 {
-   struct http_response *rsp;
-   
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   accumulate_stats(STATS_REQUEST, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-   log_error(LOG_LEVEL_GPC, "%s%s", csp->http->hostport, csp->http->path);
+   struct client_state *csp = NULL;
+   jb_socket bfd;
+   struct configuration_spec * config;
 
 
-   if (csp->http->fwd->forward_host)
-   {
-      log_error(LOG_LEVEL_CONNECT, "via %s:%d to: %s",
-               csp->http->fwd->forward_host, csp->http->fwd->forward_port, 
-               csp->http->hostport);
-   }
-   else
+   config = load_config();
+
+   bfd = bind_port_helper(config);
+
+#ifdef FEATURE_GRACEFUL_TERMINATION
+   while (!g_terminate)
+#else
+   for (;;)
+#endif
    {
    {
-      log_error(LOG_LEVEL_CONNECT, "to %s", csp->http->hostport);
-   }
+#if !defined(FEATURE_PTHREAD) && !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
+      while (waitpid(-1, NULL, WNOHANG) > 0)
+      {
+         /* zombie children */
+      }
+#endif /* !defined(FEATURE_PTHREAD) && !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) */
 
 
-   /* here we connect to the server, gateway, or the forwarder */
+      /*
+       * Free data that was used by died threads
+       */
+      sweep();
 
 
-   csp->sfd = forwarded_connect(csp->http->fwd, csp->http, csp);
+#if defined(unix)
+      /*
+       * Re-open the errlog after HUP signal
+       */
+      if (received_hup_signal)
+      {
+         init_error_log(Argv[0], config->logfile, config->debug);
+         received_hup_signal = 0;
+      }
+#endif
 
 
-   if (csp->sfd == JB_INVALID_SOCKET)
-   {
-      log_error(LOG_LEVEL_CONNECT, "connect to: %s failed: %E",
-                csp->http->hostport);
+#ifdef __OS2__
+#ifdef FEATURE_COOKIE_JAR
+      /*
+       * Need a workaround here: we have to fclose() the jarfile, or we die because it's
+       * already open.  I think unload_configfile() is not being run, which should do
+       * this work.  Until that can get resolved, we'll use this workaround.
+       */
+       if (csp)
+         if(csp->config)
+           if (csp->config->jar)
+           {
+             fclose(csp->config->jar);
+             csp->config->jar = NULL;
+           }
+#endif /* FEATURE_COOKIE_JAR */
+#endif /* __OS2__ */
+
+      if ( NULL == (csp = (struct client_state *) zalloc(sizeof(*csp))) )
+      {
+         log_error(LOG_LEVEL_FATAL, "malloc(%d) for csp failed: %E", sizeof(*csp));
+         continue;
+      }
+
+      csp->flags |= CSP_FLAG_ACTIVE;
+      csp->sfd    = JB_INVALID_SOCKET;
+
+      csp->config = config = load_config();
+
+      if ( config->need_bind )
+      {
+         /*
+          * Since we were listening to the "old port", we will not see
+          * a "listen" param change until the next IJB request.  So, at
+          * least 1 more request must be made for us to find the new
+          * setting.  I am simply closing the old socket and binding the
+          * new one.
+          *
+          * Which-ever is correct, we will serve 1 more page via the
+          * old settings.  This should probably be a "show-proxy-args"
+          * request.  This should not be a so common of an operation
+          * that this will hurt people's feelings.
+          */
+
+         close_socket(bfd);
+
+         bfd = bind_port_helper(config);
+      }
+
+      log_error(LOG_LEVEL_CONNECT, "accept connection ... ");
+
+      if (!accept_connection(csp, bfd))
+      {
+         log_error(LOG_LEVEL_CONNECT, "accept failed: %E");
+
+#ifdef AMIGA
+         if(!childs)
+         {
+            exit(1);
+         }
+#endif
+         freez(csp);
+         continue;
+      }
+      else
+      {
+         log_error(LOG_LEVEL_CONNECT, "OK");
+      }
 
 
-      if (errno == EINVAL)
+#ifdef FEATURE_TOGGLE
+      if (global_toggle_state)
       {
       {
-         rsp = error_response(csp, "no-such-domain", errno);
-
-         log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 404 0",
-                   csp->ip_addr_str, csp->http->ocmd);
+         csp->flags |= CSP_FLAG_TOGGLED_ON;
       }
       }
-      else
+#endif /* def FEATURE_TOGGLE */
+
+      if (run_loader(csp))
       {
       {
-         rsp = error_response(csp, "connect-failed", errno);
+         log_error(LOG_LEVEL_FATAL, "a loader failed - must exit");
+         /* Never get here - LOG_LEVEL_FATAL causes program exit */
+      }
 
 
-         log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
-                   csp->ip_addr_str, csp->http->ocmd);
+#ifdef FEATURE_ACL
+      if (block_acl(NULL,csp))
+      {
+         log_error(LOG_LEVEL_CONNECT, "Connection dropped due to ACL");
+         close_socket(csp->cfd);
+         freez(csp);
+         continue;
       }
       }
+#endif /* def FEATURE_ACL */
 
 
+      /* add it to the list of clients */
+      csp->next = clients->next;
+      clients->next = csp;
 
 
-      /* Write the answer to the client */
-      if(rsp)
+      if (config->multi_threaded)
       {
       {
-         if (write_socket(csp->cfd, rsp->head, rsp->head_length)
-          || write_socket(csp->cfd, rsp->body, rsp->content_length))
+         int child_id;
+
+/* this is a switch () statment in the C preprocessor - ugh */
+#undef SELECTED_ONE_OPTION
+
+/* Use Pthreads in preference to native code */
+#if defined(FEATURE_PTHREAD) && !defined(SELECTED_ONE_OPTION)
+#define SELECTED_ONE_OPTION
          {
          {
-            log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", csp->http->host);
+            pthread_t the_thread;
+            pthread_attr_t attrs;
+
+            pthread_attr_init(&attrs);
+            pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);
+            errno = pthread_create(&the_thread, &attrs,
+               (void*)serve, csp);
+            child_id = errno ? -1 : 0;
+            pthread_attr_destroy(&attrs);
          }
          }
-      }
+#endif
 
 
-      free_http_response(rsp);
-      return JB_ERR_GENERIC;
-   }
+#if defined(_WIN32) && !defined(_CYGWIN) && !defined(SELECTED_ONE_OPTION)
+#define SELECTED_ONE_OPTION
+         child_id = _beginthread(
+            (void (*)(void *))serve,
+            64 * 1024,
+            csp);
+#endif
 
 
-   log_error(LOG_LEVEL_CONNECT, "OK");
-   return JB_ERR_OK ;
+#if defined(__OS2__) && !defined(SELECTED_ONE_OPTION)
+#define SELECTED_ONE_OPTION
+         child_id = _beginthread(
+            (void(* _Optlink)(void*))serve,
+            NULL,
+            64 * 1024,
+            csp);
+#endif
 
 
-} /* END open_forwarding_connection() */
+#if defined(__BEOS__) && !defined(SELECTED_ONE_OPTION)
+#define SELECTED_ONE_OPTION
+         {
+            thread_id tid = spawn_thread
+               (server_thread, "server", B_NORMAL_PRIORITY, csp);
 
 
+            if ((tid >= 0) && (resume_thread(tid) == B_OK))
+            {
+               child_id = (int) tid;
+            }
+            else
+            {
+               child_id = -1;
+            }
+         }
+#endif
 
 
-/*********************************************************************
- *
- * Function    :  send_client_headers_to_server
- *
- * Description :  send the client headers (possibly modified) to the server
- *
- * Parameters  :
- *          1  :  client_state structure
- *          2  :  http_request structure
- *                         
- *
- * Returns     :  JB_ERR_OK  - headers sent ok
- *             :  other values - an error occurred.
- *********************************************************************/
+#if defined(AMIGA) && !defined(SELECTED_ONE_OPTION)
+#define SELECTED_ONE_OPTION
+         csp->cfd = ReleaseSocket(csp->cfd, -1);
+         
+         if((child_id = (int)CreateNewProcTags(
+            NP_Entry, (ULONG)server_thread,
+            NP_Output, Output(),
+            NP_CloseOutput, FALSE,
+            NP_Name, (ULONG)"privoxy child",
+            NP_StackSize, 200*1024,
+            TAG_DONE)))
+         {
+            childs++;
+            ((struct Task *)child_id)->tc_UserData = csp;
+            Signal((struct Task *)child_id, SIGF_SINGLE);
+            Wait(SIGF_SINGLE);
+         }
+#endif
 
 
-static jb_err send_client_headers_to_server( struct client_state *csp, struct http_request *http, char *hdr )
-{
+#if !defined(SELECTED_ONE_OPTION)
+         child_id = fork();
 
 
-   struct http_response *rsp;
+         /* This block is only needed when using fork().
+          * When using threads, the server thread was
+          * created and run by the call to _beginthread().
+          */
+         if (child_id == 0)   /* child */
+         {
+            int rc = 0;
+#ifdef FEATURE_TOGGLE
+            int inherited_toggle_state = global_toggle_state;
+#endif /* def FEATURE_TOGGLE */
 
 
-   if (http->fwd->forward_host || (http->ssl == 0))
-   {
-      /* write the client's (modified) header to the server
-       * (along with anything else that may be in the buffer)
-       */
+            serve(csp);
 
 
-      if (write_socket(csp->sfd, hdr, strlen(hdr))
-       || (flush_socket(csp->sfd, csp) <  0))
-      {
-         log_error(LOG_LEVEL_CONNECT, "write header to: %s failed: %E",
-                    http->hostport);
+            /* 
+             * If we've been toggled or we've blocked the request, tell Mom
+             */
 
 
-         log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 503 0",
-                   csp->ip_addr_str, http->ocmd);
+#ifdef FEATURE_TOGGLE
+            if (inherited_toggle_state != global_toggle_state)
+            {
+               rc |= RC_FLAG_TOGGLED;
+            }
+#endif /* def FEATURE_TOGGLE */
 
 
-         rsp = error_response(csp, "connect-failed", errno);
+#ifdef FEATURE_STATISTICS  
+            if (csp->flags & CSP_FLAG_REJECTED)
+            {
+               rc |= RC_FLAG_BLOCKED;
+            }
+#endif /* ndef FEATURE_STATISTICS */
 
 
-         if(rsp)
+            _exit(rc);
+         }
+         else if (child_id > 0) /* parent */
          {
          {
-            if (write_socket(csp->cfd, rsp->head, rsp->head_length)
-             || write_socket(csp->cfd, rsp->body, rsp->content_length))
+            /* in a fork()'d environment, the parent's
+             * copy of the client socket and the CSP
+             * are not used.
+             */
+            int child_status;
+#if !defined(_WIN32) && !defined(__CYGWIN__)
+
+            wait( &child_status );
+
+            /* 
+             * Evaluate child's return code: If the child has
+             *  - been toggled, toggle ourselves
+             *  - blocked its request, bump up the stats counter
+             */
+
+#ifdef FEATURE_TOGGLE
+            if (WIFEXITED(child_status) && (WEXITSTATUS(child_status) & RC_FLAG_TOGGLED))
             {
             {
-               log_error(LOG_LEVEL_ERROR, "write to: %s failed: %E", http->host);
+               global_toggle_state = !global_toggle_state;
+            }
+#endif /* def FEATURE_TOGGLE */
+
+#ifdef FEATURE_STATISTICS
+            urls_read++;
+            if (WIFEXITED(child_status) && (WEXITSTATUS(child_status) & RC_FLAG_BLOCKED))
+            {
+               urls_rejected++;
             }
             }
+#endif /* def FEATURE_STATISTICS */ 
+
+#endif /* !defined(_WIN32) && defined(__CYGWIN__) */
+            close_socket(csp->cfd);
+            csp->flags &= ~CSP_FLAG_ACTIVE;
          }
          }
+#endif
 
 
-         free_http_response(rsp);
-         return JB_ERR_GENERIC;
-      }
-   }
-   else
-   {
-      /*
-       * We're running an SSL tunnel and we're not forwarding,
-       * so just send the "connect succeeded" message to the
-       * client, flush the rest, and get out of the way.
-       */
-      log_error(LOG_LEVEL_CLF, "%s - - [%T] \"%s\" 200 2\n",
-                csp->ip_addr_str, http->ocmd);
+#undef SELECTED_ONE_OPTION
+/* end of cpp switch () */
 
 
-      if (write_socket(csp->cfd, CSUCCEED, sizeof(CSUCCEED)-1))
+         if (child_id < 0) /* failed */
+         {
+            char buf[BUFFER_SIZE];
+
+            log_error(LOG_LEVEL_ERROR, "can't fork: %E");
+
+            sprintf(buf , "Privoxy: can't fork: errno = %d", errno);
+
+            write_socket(csp->cfd, buf, strlen(buf));
+            close_socket(csp->cfd);
+            csp->flags &= ~CSP_FLAG_ACTIVE;
+            sleep(5);
+            continue;
+         }
+      }
+      else
       {
       {
-         return JB_ERR_OK;
+         serve(csp);
       }
       }
-      IOB_RESET(csp);
    }
 
    }
 
-   return JB_ERR_OK ;
-} /* END send_client_headers_to_server */
+   /* NOTREACHED unless FEATURE_GRACEFUL_TERMINATION is defined */
 
 
+   /* Clean up.  Aim: free all memory (no leaks) */
+#ifdef FEATURE_GRACEFUL_TERMINATION
 
 
-/*********************************************************************
- *
- * Function    :  is_connect_request_allowed
- *
- * Description :  send the client headers (possibly modified) to the server
- *
- * Parameters  :
- *          1  :  client_state structure
- *
- *                         
- *
- * Returns     :  JB_ERR_OK  - connect request allowed
- *             :  other values - connect request not allowed
- *********************************************************************/
-static jb_err is_connect_request_allowed( struct client_state *csp )
-{
-   /*
-    * Check if a CONNECT request is allowable:
-    * In the absence of a +limit-connect action, allow only port 443.
-    * If there is an action, allow whatever matches the specificaton.
-    */
+   log_error(LOG_LEVEL_ERROR, "Graceful termination requested");
+
+   unload_current_config_file();
+   unload_current_actions_file();
+   unload_current_re_filterfile();
+#ifdef FEATURE_TRUST
+   unload_current_trust_file();
+#endif
 
 
-   if(csp->http->ssl)
+   if (config->multi_threaded)
    {
    {
-      if(  ( !(csp->action->flags & ACTION_LIMIT_CONNECT) && csp->http->port != 443)
-           || (csp->action->flags & ACTION_LIMIT_CONNECT
-              && !match_portlist(csp->action->string[ACTION_STRING_LIMIT_CONNECT], csp->http->port)) )
+      int i = 60;
+      do
       {
       {
-         char buf[BUFFER_SIZE];
-         strcpy(buf, CFORBIDDEN);
-         write_socket(csp->cfd, buf, strlen(buf));
-
-         log_error(LOG_LEVEL_CONNECT, "Denying suspicious CONNECT request from %s", csp->ip_addr_str);
-         log_error(LOG_LEVEL_CLF, "%s - - [%T] \" \" 403 0", csp->ip_addr_str);
+         sleep(1);
+         sweep();
+      } while ((clients->next != NULL) && (--i > 0));
 
 
-         return JB_ERR_GENERIC;
+      if (i <= 0)
+      {
+         log_error(LOG_LEVEL_ERROR, "Graceful termination failed - still some live clients after 1 minute wait.");
       }
    }
       }
    }
+   sweep();
+   sweep();
+
+#if defined(unix)
+   freez(basedir);
+#endif
+   freez(configfile);
+
+#ifdef FEATURE_COOKIE_JAR
+   if (NULL != config->jar)
+   {
+      fclose(config->jar);
+   }
+#endif
+
+#if defined(_WIN32) && !defined(_WIN_CONSOLE)
+   /* Cleanup - remove taskbar icon etc. */
+   TermLogWindow();
+#endif
+
+   exit(0);
+#endif /* FEATURE_GRACEFUL_TERMINATION */
+
+}
 
 
-   return JB_ERR_OK ;
-} /* END is_connect_request_allowed */
 
 /*
   Local Variables:
 
 /*
   Local Variables:
diff --git a/src/jcc.h b/jcc.h
similarity index 82%
rename from src/jcc.h
rename to jcc.h
index 15c91f2..d229e3d 100644 (file)
--- a/src/jcc.h
+++ b/jcc.h
@@ -1,9 +1,9 @@
 #ifndef JCC_H_INCLUDED
 #define JCC_H_INCLUDED
 #ifndef JCC_H_INCLUDED
 #define JCC_H_INCLUDED
-#define JCC_H_VERSION "$Id: jcc.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define JCC_H_VERSION "$Id: jcc.h,v 1.12.2.3 2006/01/21 16:16:08 david__schmidt Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/jcc.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/jcc.h,v $
  *
  * Purpose     :  Main file.  Contains main() method, main loop, and 
  *                the main connection-handling function.
  *
  * Purpose     :  Main file.  Contains main() method, main loop, and 
  *                the main connection-handling function.
  *
  * Revisions   :
  *    $Log: jcc.h,v $
  *
  * Revisions   :
  *    $Log: jcc.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.12.2.3  2006/01/21 16:16:08  david__schmidt
+ *    Thanks to  Edward Carrel for his patch to modernize OSX's\rpthreads support.  See bug #1409623.
+ *
+ *    Revision 1.12.2.2  2005/04/03 20:10:50  david__schmidt
+ *    Thanks to Jindrich Makovicka for a race condition fix for the log
+ *    file.  The race condition remains for non-pthread implementations.
+ *    Reference patch #1175720.
+ *
+ *    Revision 1.12.2.1  2003/03/07 03:41:05  david__schmidt
+ *    Wrapping all *_r functions (the non-_r versions of them) with mutex 
+ *    semaphores for OSX.  Hopefully this will take care of all of those pesky
+ *    crash reports.
  *
  *    Revision 1.12  2002/03/26 22:29:55  swa
  *    we have a new homepage!
  *
  *    Revision 1.12  2002/03/26 22:29:55  swa
  *    we have a new homepage!
@@ -109,8 +119,8 @@ extern int urls_read;
 extern int urls_rejected;
 #endif /*def FEATURE_STATISTICS*/
 
 extern int urls_rejected;
 #endif /*def FEATURE_STATISTICS*/
 
-extern struct client_state clients[];
-extern struct file_list    files[];
+extern struct client_state clients[1];
+extern struct file_list    files[1];
 
 #ifdef unix
 extern const char *pidfile;
 
 #ifdef unix
 extern const char *pidfile;
@@ -122,12 +132,18 @@ extern int g_terminate;
 #endif
 
 #ifdef OSX_DARWIN
 #endif
 
 #ifdef OSX_DARWIN
+#include <pthread.h>
 extern pthread_mutex_t gmtime_mutex;
 extern pthread_mutex_t localtime_mutex;
 extern pthread_mutex_t gethostbyaddr_mutex;
 extern pthread_mutex_t gethostbyname_mutex;
 #endif /* def OSX_DARWIN */
 
 extern pthread_mutex_t gmtime_mutex;
 extern pthread_mutex_t localtime_mutex;
 extern pthread_mutex_t gethostbyaddr_mutex;
 extern pthread_mutex_t gethostbyname_mutex;
 #endif /* def OSX_DARWIN */
 
+#ifdef FEATURE_PTHREAD
+extern pthread_mutex_t log_mutex;
+extern pthread_mutex_t log_init_mutex;
+#endif /* FEATURE_PTHREAD */
+
 /* Functions */
 
 #ifdef __MINGW32__
 /* Functions */
 
 #ifdef __MINGW32__
similarity index 98%
rename from src/killpopup.c
rename to killpopup.c
index bc239a4..e021900 100644 (file)
@@ -1,7 +1,7 @@
 const char killpopup_rcs[] = "$Id: killpopup.c,v 1.16 2002/03/26 22:29:55 swa Exp $";
 /*********************************************************************
  *
 const char killpopup_rcs[] = "$Id: killpopup.c,v 1.16 2002/03/26 22:29:55 swa Exp $";
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/killpopup.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/killpopup.c,v $
  *
  * Purpose     :  Handles the filtering of popups.
  *
  *
  * Purpose     :  Handles the filtering of popups.
  *
similarity index 98%
rename from src/killpopup.h
rename to killpopup.h
index 76f62c4..4c46ace 100644 (file)
@@ -3,7 +3,7 @@
 #define KILLPOPUP_H_VERSION "$Id: killpopup.h,v 1.8 2002/03/26 22:29:55 swa Exp $"
 /*********************************************************************
  *
 #define KILLPOPUP_H_VERSION "$Id: killpopup.h,v 1.8 2002/03/26 22:29:55 swa Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/killpopup.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/killpopup.h,v $
  *
  * Purpose     :  Handles the filtering of popups.
  *
  *
  * Purpose     :  Handles the filtering of popups.
  *
similarity index 93%
rename from src/list.c
rename to list.c
index afec975..68ee147 100644 (file)
+++ b/list.c
@@ -1,7 +1,7 @@
-const char list_rcs[] = "$Id: list.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $";
+const char list_rcs[] = "$Id: list.c,v 1.15.2.2 2004/05/25 02:04:23 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/list.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/list.c,v $
  *
  * Purpose     :  Declares functions to handle lists.
  *                Functions declared include:
  *
  * Purpose     :  Declares functions to handle lists.
  *                Functions declared include:
@@ -34,8 +34,12 @@ const char list_rcs[] = "$Id: list.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
  *
  * Revisions   :
  *    $Log: list.c,v $
  *
  * Revisions   :
  *    $Log: list.c,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.15.2.2  2004/05/25 02:04:23  david__schmidt
+ *    Removed the "arbitrary" 1000 filter limit in file.c.  See tracker #911950.
+ *
+ *    Revision 1.15.2.1  2002/11/28 18:14:54  oes
+ *    Added unmap function that removes all items with a given
+ *    name from a map.
  *
  *    Revision 1.15  2002/03/26 22:29:55  swa
  *    we have a new homepage!
  *
  *    Revision 1.15  2002/03/26 22:29:55  swa
  *    we have a new homepage!
@@ -265,13 +269,13 @@ static int list_is_valid (const struct list *the_list)
        * Note that the 1000 limit was hit by a real user in tracker 911950;
        * removing it for now.  Symptoms of a real circular reference will
        * include 100% CPU usage, I'd imagine.  It'll be obvious, anyway.
        * Note that the 1000 limit was hit by a real user in tracker 911950;
        * removing it for now.  Symptoms of a real circular reference will
        * include 100% CPU usage, I'd imagine.  It'll be obvious, anyway.
-       */
+       */         
       /*
       if (++length > 1000)
       /*
       if (++length > 1000)
-      {
+      {           
          return 0;
          return 0;
-      }
-      */
+      }           
+      */          
 
       /*
        * Check this isn't marked as the last entry, unless of course it's
 
       /*
        * Check this isn't marked as the last entry, unless of course it's
@@ -1033,6 +1037,71 @@ jb_err map(struct map *the_map,
 }
 
 
 }
 
 
+/*********************************************************************
+ *
+ * Function    :  unmap
+ *
+ * Description :  Remove all map_entry structs with a given name from
+ *                a given map.
+ *
+ * Parameters  :
+ *          1  :  the_map = map to look in
+ *          2  :  name = name to unmap
+ *
+ * Returns     :  JB_ERR_OK
+ *
+ *********************************************************************/
+jb_err unmap(struct map *the_map, const char *name)
+{
+   struct map_entry *cur_entry, *last_entry;
+
+   assert(the_map);
+   assert(name);
+   
+   last_entry = the_map->first;
+
+   for (cur_entry = the_map->first; cur_entry != NULL; cur_entry = cur_entry->next)
+   {
+      if (!strcmp(name, cur_entry->name))
+      {
+         /*
+          * Update the incoming pointer
+          */
+         if (cur_entry == the_map->first)
+         {
+            the_map->first = cur_entry->next;
+         }
+         else
+         {
+            last_entry->next = cur_entry->next;
+         }
+
+         /*
+          * Update the map's last pointer 
+          */
+         if (cur_entry == the_map->last)
+         {
+            the_map->last = last_entry;
+         }
+         
+         /*
+          * Free the map_entry
+          */
+         freez(cur_entry->name);
+         freez(cur_entry->value);
+         freez(cur_entry);
+
+         cur_entry = last_entry;
+      }
+      else
+      {
+         last_entry = cur_entry;
+      }
+   }
+   return JB_ERR_OK;
+}
+
+
 /*********************************************************************
  *
  * Function    :  lookup
 /*********************************************************************
  *
  * Function    :  lookup
similarity index 93%
rename from src/list.h
rename to list.h
index 8dd1835..cb12a40 100644 (file)
+++ b/list.h
@@ -1,9 +1,9 @@
 #ifndef LIST_H_INCLUDED
 #define LIST_H_INCLUDED
 #ifndef LIST_H_INCLUDED
 #define LIST_H_INCLUDED
-#define LIST_H_VERSION "$Id: list.h,v 1.12 2002/03/26 22:29:55 swa Exp $"
+#define LIST_H_VERSION "$Id: list.h,v 1.12.2.1 2002/11/28 18:14:54 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/list.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/list.h,v $
  *
  * Purpose     :  Declares functions to handle lists.
  *                Functions declared include:
  *
  * Purpose     :  Declares functions to handle lists.
  *                Functions declared include:
  *
  * Revisions   :
  *    $Log: list.h,v $
  *
  * Revisions   :
  *    $Log: list.h,v $
+ *    Revision 1.12.2.1  2002/11/28 18:14:54  oes
+ *    Added unmap function that removes all items with a given
+ *    name from a map.
+ *
  *    Revision 1.12  2002/03/26 22:29:55  swa
  *    we have a new homepage!
  *
  *    Revision 1.12  2002/03/26 22:29:55  swa
  *    we have a new homepage!
  *
@@ -144,9 +148,11 @@ extern char * list_to_text(const struct list *the_list);
 extern struct map * new_map  (void);
 extern void         free_map (struct map * the_map);
 
 extern struct map * new_map  (void);
 extern void         free_map (struct map * the_map);
 
-extern int          map      (struct map * the_map,
+extern jb_err       map      (struct map * the_map,
                               const char * name, int name_needs_copying,
                               const char * value, int value_needs_copying);
                               const char * name, int name_needs_copying,
                               const char * value, int value_needs_copying);
+extern jb_err       unmap    (struct map *the_map,
+                              const char *name);
 extern const char * lookup   (const struct map * the_map, const char * name);
 
 
 extern const char * lookup   (const struct map * the_map, const char * name);
 
 
similarity index 82%
rename from src/loadcfg.c
rename to loadcfg.c
index 3471d56..831af1c 100644 (file)
+++ b/loadcfg.c
@@ -1,7 +1,7 @@
-const char loadcfg_rcs[] = "$Id: loadcfg.c,v 2.5 2003/09/22 00:33:01 david__schmidt Exp $";
+const char loadcfg_rcs[] = "$Id: loadcfg.c,v 1.48.2.7 2006/02/02 17:29:16 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/loadcfg.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/loadcfg.c,v $
  *
  * Purpose     :  Loads settings from the configuration file into
  *                global variables.  This file contains both the
  *
  * Purpose     :  Loads settings from the configuration file into
  *                global variables.  This file contains both the
@@ -35,28 +35,29 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 2.5 2003/09/22 00:33:01 david__schm
  *
  * Revisions   :
  *    $Log: loadcfg.c,v $
  *
  * Revisions   :
  *    $Log: loadcfg.c,v $
- *    Revision 2.5  2003/09/22 00:33:01  david__schmidt
- *    Enable sending a custom 'blocked' image.  Shows up as
- *    "image-blocker-custom-file" parameter in config, and
- *    "+set-image-blocker{custom}" in action files.
+ *    Revision 1.48.2.7  2006/02/02 17:29:16  david__schmidt
+ *    Don't forget to malloc space for the null terminator...
  *
  *
- *    Revision 2.4  2002/12/28 03:58:19  david__schmidt
- *    Initial drop of dashboard instrumentation - enabled with
- *    --enable-activity-console
+ *    Revision 1.48.2.6  2006/01/29 23:10:56  david__schmidt
+ *    Multiple filter file support
  *
  *
- *    Revision 2.3  2002/09/19 03:48:29  iwanttokeepanon
- *    Just moved "int i" up 3 lines in function unload_configfile, out of the "ifdef FEATURE_ACL" clause.  I disable ACL and it was not compiling because "int i" was ifdef(d) out.  I noticed this in the past, but am just now in a spot where I can change/commit stuff ... long live broadband!
+ *    Revision 1.48.2.5  2003/05/08 15:17:25  oes
+ *    Closed two memory leaks; hopefully the last remaining ones
+ *    (in the main execution paths, anyway).
  *
  *
- *    Revision 2.2  2002/09/04 15:48:33  oes
- *    Synced with the stable branch:
- *        Revision 1.48.2.1  2002/08/21 17:58:05  oes
- *        Temp kludge to let user and default action file be edited through win32 GUI (FR 592080)
+ *    Revision 1.48.2.4  2003/04/11 12:06:14  oes
+ *    Addressed bug #719435
+ *     - Extraneous filterfile directives now logged as errors
+ *     - This and unrecnonised directives now really obvious on status page
  *
  *
- *    Revision 2.1  2002/06/04 17:22:36  jongfoster
- *    Adding comments
+ *    Revision 1.48.2.3  2003/03/11 11:53:59  oes
+ *    Cosmetic: Renamed cryptic variable
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.48.2.2  2002/11/12 16:28:20  oes
+ *    Move unrelated variable declaration out of #ifdef FEATURE_ACL; fixes bug #636655
+ *
+ *    Revision 1.48.2.1  2002/08/21 17:58:05  oes
+ *    Temp kludge to let user and default action file be edited through win32 GUI (FR 592080)
  *
  *    Revision 1.48  2002/05/14 21:30:38  oes
  *    savearg now uses own linking code instead of (now special-cased) add_help_link
  *
  *    Revision 1.48  2002/05/14 21:30:38  oes
  *    savearg now uses own linking code instead of (now special-cased) add_help_link
@@ -70,7 +71,7 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 2.5 2003/09/22 00:33:01 david__schm
  *     - savearg now embeds option names in help links
  *
  *    Revision 1.45  2002/04/24 02:11:54  oes
  *     - savearg now embeds option names in help links
  *
  *    Revision 1.45  2002/04/24 02:11:54  oes
- *    Jon's multiple AF patch: Allow up to MAX_ACTION_FILES actionsfile options
+ *    Jon's multiple AF patch: Allow up to MAX_AF_FILES actionsfile options
  *
  *    Revision 1.44  2002/04/08 20:37:13  swa
  *    fixed JB spelling
  *
  *    Revision 1.44  2002/04/08 20:37:13  swa
  *    fixed JB spelling
@@ -331,7 +332,6 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 2.5 2003/09/22 00:33:01 david__schm
 
 #include <stdio.h>
 #include <sys/types.h>
 
 #include <stdio.h>
 #include <sys/types.h>
-#include <sys/stat.h>
 #include <stdlib.h>
 #include <string.h>
 #include <signal.h>
 #include <stdlib.h>
 #include <string.h>
 #include <signal.h>
@@ -355,16 +355,17 @@ const char loadcfg_rcs[] = "$Id: loadcfg.c,v 2.5 2003/09/22 00:33:01 david__schm
 /* VC++ has "_snprintf", not "snprintf" */
 #define snprintf _snprintf
 
 /* VC++ has "_snprintf", not "snprintf" */
 #define snprintf _snprintf
 
-#else /* every platform but _WIN32 */
+#else /* ifndef _WIN32 */
 
 #ifndef __OS2__
 # include <unistd.h>
 # include <sys/wait.h>
 
 #ifndef __OS2__
 # include <unistd.h>
 # include <sys/wait.h>
-#endif /* ndef __OS2__ */
+#endif
 # include <sys/time.h>
 # include <sys/time.h>
+# include <sys/stat.h>
 # include <signal.h>
 
 # include <signal.h>
 
-#endif /* ndef _WIN32 */
+#endif
 
 #include "loadcfg.h"
 #include "list.h"
 
 #include "loadcfg.h"
 #include "list.h"
@@ -392,32 +393,20 @@ const char loadcfg_h_rcs[] = LOADCFG_H_VERSION;
 #define ijb_tolower(__X) tolower((int)(unsigned char)(__X))
 
 #ifdef FEATURE_TOGGLE
 #define ijb_tolower(__X) tolower((int)(unsigned char)(__X))
 
 #ifdef FEATURE_TOGGLE
-/**
- * Indicates if Privoxy is currently enabled.
- */
-int g_bToggleIJB        = 1;   /* Privoxy is enabled by default. */
+/* Privoxy is enabled by default. */
+int global_toggle_state = 1;
 #endif /* def FEATURE_TOGGLE */
 
 #endif /* def FEATURE_TOGGLE */
 
-/**
- * The filename of the config file
- */
+/* The filename of the configfile */
 const char *configfile  = NULL;
 
 const char *configfile  = NULL;
 
-/**
- * Global argument count, so that CGI functions can access the
- * command line.
+/*
+ * CGI functions will later need access to the invocation args,
+ * so we will make argc and argv global.
  */
 int Argc = 0;
  */
 int Argc = 0;
-
-/**
- * Global argument list, so that CGI functions can access the
- * command line.
- */
 const char **Argv = NULL;
 
 const char **Argv = NULL;
 
-/**
- * The configuration file which is currently loaded.
- */
 static struct file_list *current_configfile = NULL;
 
 
 static struct file_list *current_configfile = NULL;
 
 
@@ -433,44 +422,41 @@ static struct file_list *current_configfile = NULL;
  * console and GUI specific options last).
  */
 
  * console and GUI specific options last).
  */
 
-#define hash_actions_file                  1196306641ul /**< "actionsfile" */
-#define hash_activity_console_address        18904208ul /**< "activity-console-address" */
-#define hash_activity_console_update_freq  3442780376ul /**< "activity-console-update-freq" */
-#define hash_admin_address                 4112573064ul /**< "admin-address" */
-#define hash_buffer_limit                  1881726070ul /**< "buffer-limit */
-#define hash_confdir                          1978389ul /**< "confdir" */
-#define hash_debug                              78263ul /**< "debug" */
-#define hash_deny_access                   1227333715ul /**< "deny-access" */
-#define hash_enable_edit_actions           2517097536ul /**< "enable-edit-actions" */
-#define hash_enable_remote_toggle          2979744683ul /**< "enable-remote-toggle" */
-#define hash_filterfile                     250887266ul /**< "filterfile" */
-#define hash_forward                          2029845ul /**< "forward" */
-#define hash_forward_socks4                3963965521ul /**< "forward-socks4" */
-#define hash_forward_socks4a               2639958518ul /**< "forward-socks4a" */
-#define hash_image_blocker_custom_file     2863352327ul /**< "image-blocker-custom-file" */
-#define hash_jarfile                          2046641ul /**< "jarfile" */
-#define hash_listen_address                1255650842ul /**< "listen-address" */
-#define hash_logdir                            422889ul /**< "logdir" */
-#define hash_logfile                          2114766ul /**< "logfile" */
-#define hash_permit_access                 3587953268ul /**< "permit-access" */
-#define hash_proxy_info_url                3903079059ul /**< "proxy-info-url" */
-#define hash_single_threaded               4250084780ul /**< "single-threaded" */
-#define hash_suppress_blocklists           1948693308ul /**< "suppress-blocklists" */
-#define hash_toggle                            447966ul /**< "toggle" */
-#define hash_trust_info_url                 430331967ul /**< "trust-info-url" */
-#define hash_trustfile                       56494766ul /**< "trustfile" */
-#define hash_usermanual                    1416668518ul /**< "user-manual" */
-
-#define hash_activity_animation            1817904738ul /**< "activity-animation" */
-#define hash_close_button_minimizes        3651284693ul /**< "close-button-minimizes" */
-#define hash_hide_console                  2048809870ul /**< "hide-console" */
-#define hash_log_buffer_size               2918070425ul /**< "log-buffer-size" */
-#define hash_log_font_name                 2866730124ul /**< "log-font-name" */
-#define hash_log_font_size                 2866731014ul /**< "log-font-size" */
-#define hash_log_highlight_messages        4032101240ul /**< "log-highlight-messages" */
-#define hash_log_max_lines                 2868344173ul /**< "log-max-lines" */
-#define hash_log_messages                  2291744899ul /**< "log-messages" */
-#define hash_show_on_task_bar               215410365ul /**< "show-on-task-bar" */
+#define hash_actions_file              1196306641ul /* "actionsfile" */
+#define hash_admin_address             4112573064ul /* "admin-address" */
+#define hash_buffer_limit              1881726070ul /* "buffer-limit */
+#define hash_confdir                      1978389ul /* "confdir" */
+#define hash_debug                          78263ul /* "debug" */
+#define hash_deny_access               1227333715ul /* "deny-access" */
+#define hash_enable_edit_actions       2517097536ul /* "enable-edit-actions" */
+#define hash_enable_remote_toggle      2979744683ul /* "enable-remote-toggle" */
+#define hash_filterfile                 250887266ul /* "filterfile" */
+#define hash_forward                      2029845ul /* "forward" */
+#define hash_forward_socks4            3963965521ul /* "forward-socks4" */
+#define hash_forward_socks4a           2639958518ul /* "forward-socks4a" */
+#define hash_jarfile                      2046641ul /* "jarfile" */
+#define hash_listen_address            1255650842ul /* "listen-address" */
+#define hash_logdir                        422889ul /* "logdir" */
+#define hash_logfile                      2114766ul /* "logfile" */
+#define hash_permit_access             3587953268ul /* "permit-access" */
+#define hash_proxy_info_url            3903079059ul /* "proxy-info-url" */
+#define hash_single_threaded           4250084780ul /* "single-threaded" */
+#define hash_suppress_blocklists       1948693308ul /* "suppress-blocklists" */
+#define hash_toggle                        447966ul /* "toggle" */
+#define hash_trust_info_url             430331967ul /* "trust-info-url" */
+#define hash_trustfile                   56494766ul /* "trustfile" */
+#define hash_usermanual                1416668518ul /* "user-manual" */
+#define hash_activity_animation        1817904738ul /* "activity-animation" */
+#define hash_close_button_minimizes    3651284693ul /* "close-button-minimizes" */
+#define hash_hide_console              2048809870ul /* "hide-console" */
+#define hash_log_buffer_size           2918070425ul /* "log-buffer-size" */
+#define hash_log_font_name             2866730124ul /* "log-font-name" */
+#define hash_log_font_size             2866731014ul /* "log-font-size" */
+#define hash_log_highlight_messages    4032101240ul /* "log-highlight-messages" */
+#define hash_log_max_lines             2868344173ul /* "log-max-lines" */
+#define hash_log_messages              2291744899ul /* "log-messages" */
+#define hash_show_on_task_bar           215410365ul /* "show-on-task-bar" */
+
 
 static void savearg(char *command, char *argument, struct configuration_spec * config);
 
 
 static void savearg(char *command, char *argument, struct configuration_spec * config);
 
@@ -491,6 +477,7 @@ void unload_configfile (void * data)
    struct configuration_spec * config = (struct configuration_spec *)data;
    struct forward_spec *cur_fwd = config->forward;
    int i;
    struct configuration_spec * config = (struct configuration_spec *)data;
    struct forward_spec *cur_fwd = config->forward;
    int i;
+
 #ifdef FEATURE_ACL
    struct access_control_list *cur_acl = config->acl;
 
 #ifdef FEATURE_ACL
    struct access_control_list *cur_acl = config->acl;
 
@@ -529,7 +516,7 @@ void unload_configfile (void * data)
    freez(config->haddr);
    freez(config->logfile);
 
    freez(config->haddr);
    freez(config->logfile);
 
-   for (i = 0; i < MAX_ACTION_FILES; i++)
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
       freez(config->actions_file_short[i]);
       freez(config->actions_file[i]);
    {
       freez(config->actions_file_short[i]);
       freez(config->actions_file[i]);
@@ -544,10 +531,17 @@ void unload_configfile (void * data)
    freez(config->jarfile);
 #endif /* def FEATURE_COOKIE_JAR */
 
    freez(config->jarfile);
 #endif /* def FEATURE_COOKIE_JAR */
 
-   freez(config->re_filterfile);
+#ifdef FEATURE_TRUST
+   freez(config->trustfile);
+   list_remove_all(config->trust_info);
+#endif /* def FEATURE_TRUST */
+
+   for (i = 0; i < MAX_AF_FILES; i++)
+   {
+      freez(config->re_filterfile[i]);
+   }
 
 
-   freez(config->image_blocker_data);
-   freez(config->image_blocker_format);
+   freez(config);
 }
 
 
 }
 
 
@@ -589,15 +583,13 @@ void unload_current_config_file(void)
 struct configuration_spec * load_config(void)
 {
    char buf[BUFFER_SIZE];
 struct configuration_spec * load_config(void)
 {
    char buf[BUFFER_SIZE];
-   char *p, *q, *image_buf, *image_path;
-   FILE *configfp = NULL,
-        *imagefp = NULL;
+   char *p, *q;
+   FILE *configfp = NULL;
    struct configuration_spec * config = NULL;
    struct client_state * fake_csp;
    struct file_list *fs;
    struct configuration_spec * config = NULL;
    struct client_state * fake_csp;
    struct file_list *fs;
-   struct stat statbuf[1];
    unsigned long linenum = 0;
    unsigned long linenum = 0;
-   int i, file_size, bytes_read;
+   int i;
 
    if ( !check_file_changed(current_configfile, configfile, &fs))
    {
 
    if ( !check_file_changed(current_configfile, configfile, &fs))
    {
@@ -613,7 +605,7 @@ struct configuration_spec * load_config(void)
    log_error(LOG_LEVEL_INFO, "loading configuration file '%s':", configfile);
 
 #ifdef FEATURE_TOGGLE
    log_error(LOG_LEVEL_INFO, "loading configuration file '%s':", configfile);
 
 #ifdef FEATURE_TOGGLE
-   g_bToggleIJB      = 1;
+   global_toggle_state      = 1;
 #endif /* def FEATURE_TOGGLE */
 
    fs->f = config = (struct configuration_spec *)zalloc(sizeof(*config));
 #endif /* def FEATURE_TOGGLE */
 
    fs->f = config = (struct configuration_spec *)zalloc(sizeof(*config));
@@ -645,10 +637,6 @@ struct configuration_spec * load_config(void)
    config->buffer_limit      = 4096 * 1024;
    config->usermanual        = strdup(USER_MANUAL_URL);
    config->proxy_args        = strdup("");
    config->buffer_limit      = 4096 * 1024;
    config->usermanual        = strdup(USER_MANUAL_URL);
    config->proxy_args        = strdup("");
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   config->activity_port     = ACTIVTY_ADDR_PORT;
-   config->activity_freq     = 5;
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
 
    if ((configfp = fopen(configfile, "r")) == NULL)
    {
 
    if ((configfp = fopen(configfile, "r")) == NULL)
    {
@@ -716,16 +704,16 @@ struct configuration_spec * load_config(void)
  * *************************************************************************/
          case hash_actions_file :
             i = 0;
  * *************************************************************************/
          case hash_actions_file :
             i = 0;
-            while ((i < MAX_ACTION_FILES) && (NULL != config->actions_file[i]))
+            while ((i < MAX_AF_FILES) && (NULL != config->actions_file[i]))
             {
                i++;
             }
 
             {
                i++;
             }
 
-            if (i >= MAX_ACTION_FILES)
+            if (i >= MAX_AF_FILES)
             {
                log_error(LOG_LEVEL_FATAL, "Too many 'actionsfile' directives in config file - limit is %d.\n"
             {
                log_error(LOG_LEVEL_FATAL, "Too many 'actionsfile' directives in config file - limit is %d.\n"
-                  "(You can increase this limit by changing MAX_ACTION_FILES in project.h and recompiling).",
-                  MAX_ACTION_FILES);
+                  "(You can increase this limit by changing MAX_AF_FILES in project.h and recompiling).",
+                  MAX_AF_FILES);
             }
             config->actions_file_short[i] = strdup(arg);
             p = malloc(strlen(arg) + sizeof(".action"));
             }
             config->actions_file_short[i] = strdup(arg);
             p = malloc(strlen(arg) + sizeof(".action"));
@@ -739,27 +727,6 @@ struct configuration_spec * load_config(void)
             free(p);
             continue;
 
             free(p);
             continue;
 
-/* *************************************************************************
- * activity-console-address [ip][:port]
- * *************************************************************************/
-#ifdef FEATURE_ACTIVITY_CONSOLE
-         case hash_activity_console_address :
-            freez(config->activity_address);
-            config->activity_address = strdup(arg);
-            continue;
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-
-/* *************************************************************************
- * activity-console-update-freq
- * *************************************************************************/
-#ifdef FEATURE_ACTIVITY_CONSOLE
-         case hash_activity_console_update_freq :
-            config->activity_freq = atoi(arg);
-            if (config->activity_freq < 1)
-              config->activity_freq = 5;
-            continue;
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-
 /* *************************************************************************
  * admin-address email-address
  * *************************************************************************/
 /* *************************************************************************
  * admin-address email-address
  * *************************************************************************/
@@ -898,6 +865,34 @@ struct configuration_spec * load_config(void)
             continue;
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
 
             continue;
 #endif /* def FEATURE_CGI_EDIT_ACTIONS */
 
+/* *************************************************************************
+ * filterfile file-name
+ * In confdir by default.
+ * *************************************************************************/
+         case hash_filterfile :
+            i = 0;
+            while ((i < MAX_AF_FILES) && (NULL != config->re_filterfile[i]))
+            {
+               i++;
+            }
+
+            if (i >= MAX_AF_FILES)
+            {
+               log_error(LOG_LEVEL_FATAL, "Too many 'filterfile' directives in config file - limit is %d.\n"
+                  "(You can increase this limit by changing MAX_AF_FILES in project.h and recompiling).",
+                  MAX_AF_FILES);
+            }
+            config->re_filterfile_short[i] = strdup(arg);
+            p = malloc(strlen(arg) + 1);
+            if (p == NULL)
+            {
+               log_error(LOG_LEVEL_FATAL, "Out of memory");
+            }
+            strcpy(p, arg);
+            config->re_filterfile[i] = make_path(config->confdir, p);
+            free(p);
+            continue;
+
 /* *************************************************************************
  * forward url-pattern (.|http-proxy-host[:port])
  * *************************************************************************/
 /* *************************************************************************
  * forward url-pattern (.|http-proxy-host[:port])
  * *************************************************************************/
@@ -1241,15 +1236,6 @@ struct configuration_spec * load_config(void)
             config->proxy_info_url = strdup(arg);
             continue;
 
             config->proxy_info_url = strdup(arg);
             continue;
 
-/* *************************************************************************
- * re_filterfile file-name
- * In confdir by default.
- * *************************************************************************/
-         case hash_filterfile :
-            freez(config->re_filterfile);
-            config->re_filterfile = make_path(config->confdir, arg);
-            continue;
-
 /* *************************************************************************
  * single-threaded
  * *************************************************************************/
 /* *************************************************************************
  * single-threaded
  * *************************************************************************/
@@ -1262,7 +1248,7 @@ struct configuration_spec * load_config(void)
  * *************************************************************************/
 #ifdef FEATURE_TOGGLE
          case hash_toggle :
  * *************************************************************************/
 #ifdef FEATURE_TOGGLE
          case hash_toggle :
-            g_bToggleIJB = atoi(arg);
+            global_toggle_state = atoi(arg);
             continue;
 #endif /* def FEATURE_TOGGLE */
 
             continue;
 #endif /* def FEATURE_TOGGLE */
 
@@ -1378,87 +1364,6 @@ struct configuration_spec * load_config(void)
 
 #endif /* defined(_WIN32) && ! defined(_WIN_CONSOLE) */
 
 
 #endif /* defined(_WIN32) && ! defined(_WIN_CONSOLE) */
 
-/* *************************************************************************
- * image-blocker-custom-file
- * *************************************************************************/
-         case hash_image_blocker_custom_file :
-            freez(config->image_blocker_data);
-            freez(config->image_blocker_format);
-            config->image_blocker_length = 0; 
-            image_path = make_path(config->confdir, arg);
-
-            /*
-             * Load up the custom image bitmap file
-             */
-            if (NULL == (imagefp = fopen(image_path, "rb")))
-            {
-              /*
-               * If we can't open the user's requested image, complain
-               */
-              log_error(LOG_LEVEL_ERROR, "Unable to load custom blocker image: %s.", image_path);
-            }
-            else
-            {
-              if (stat(image_path, statbuf) == 0)
-              {
-                file_size = statbuf->st_size;
-                image_buf = zalloc(file_size);
-                if (image_buf != NULL)
-                {
-                  bytes_read = fread(image_buf,1,file_size,imagefp);
-                  if (bytes_read > 0)
-                  {
-                    config->image_blocker_data = image_buf;
-                    config->image_blocker_length = file_size;
-                    /*
-                     * Ensure we can look into files for file signatures
-                     */
-                    if (file_size > 10)
-                    {
-                      /*
-                       * Snoop into the binary data for a filetype signature
-                       */
-                      if (memcmp(image_buf,"GIF",3) == 0)
-                        config->image_blocker_format = IMAGE_MIMETYPE_GIF;
-                      else if (memcmp(&image_buf[6],"JFIF",4) == 0)
-                        config->image_blocker_format = IMAGE_MIMETYPE_JPG;
-                      else if (memcmp(&image_buf[1],"PNG",3) == 0)
-                        config->image_blocker_format = IMAGE_MIMETYPE_PNG;
-                      else
-                      {
-                        log_error(LOG_LEVEL_ERROR, "Unsupported custom image file type.");
-                        freez(config->image_blocker_data);
-                      }
-                    }
-                    else
-                      freez(config->image_blocker_data);
-                  }
-                  else
-                  {
-                    log_error(LOG_LEVEL_ERROR, "Unable to read custom blocker image: %s", image_path, bytes_read, file_size);
-                    freez(image_buf);
-                    config->image_blocker_length = 0;
-                  }
-                }
-                else
-                  log_error(LOG_LEVEL_ERROR, "Unable to allocate memory for custom blocker image: %s.", image_path);
-              }
-              else
-                log_error(LOG_LEVEL_ERROR, "Unable to get statistics on custom blocker image file: %s", image_path);
-            }
-            freez(image_path);
-            /*
-             * If our load failed for some reason, just give the default
-             * checkerboard pattern 
-             */
-            if (config->image_blocker_data == NULL)
-            {
-              log_error(LOG_LEVEL_ERROR, "Custom blocker image processing failed; defaulting to \"pattern\".");
-              config->image_blocker_data = (char*)image_pattern_data;
-              config->image_blocker_length = image_pattern_length;
-              config->image_blocker_format = BUILTIN_IMAGE_MIMETYPE;
-            }
-            continue;
 
 /* *************************************************************************
  * Warnings about unsupported features
 
 /* *************************************************************************
  * Warnings about unsupported features
@@ -1511,11 +1416,10 @@ struct configuration_spec * load_config(void)
              * error.  To change back to an error, just change log level
              * to LOG_LEVEL_FATAL.
              */
              * error.  To change back to an error, just change log level
              * to LOG_LEVEL_FATAL.
              */
-            log_error(LOG_LEVEL_ERROR, "Unrecognized directive '%s' (%luul) in line %lu in "
-                  "configuration file (%s).",  buf, hash_string(cmd), linenum, configfile);
-            string_append(&config->proxy_args, "<br>\nWARNING: unrecognized directive : ");
-            string_append(&config->proxy_args, buf);
-            string_append(&config->proxy_args, "<br><br>\n");
+            log_error(LOG_LEVEL_ERROR, "Ignoring unrecognized directive '%s' (%luul) in line %lu "
+                  "in configuration file (%s).",  buf, hash_string(cmd), linenum, configfile);
+            string_append(&config->proxy_args,
+               " <b><font color=\"red\">WARNING: unrecognized directive, ignored</font></b>");
             continue;
 
 /* *************************************************************************/
             continue;
 
 /* *************************************************************************/
@@ -1560,36 +1464,6 @@ struct configuration_spec * load_config(void)
    }
 #endif /* def FEATURE_COOKIE_JAR */
 
    }
 #endif /* def FEATURE_COOKIE_JAR */
 
-#ifdef FEATURE_ACTIVITY_CONSOLE
-   if ( NULL == config->activity_address )
-   {
-      config->activity_address = strdup( ACTIVTY_ADDR_DEFAULT );
-   }
-
-   if ( NULL != config->activity_address )
-   {
-      if (NULL != (p = strchr(config->activity_address, ':')))
-      {
-         *p++ = '\0';
-         if (*p)
-         {
-            config->activity_port = atoi(p);
-         }
-      }
-
-      if (config->activity_port <= 0)
-      {
-         *--p = ':';
-         log_error(LOG_LEVEL_ERROR, "invalid activity port spec %s", config->activity_address);
-      }
-      if (*config->activity_address == '\0')
-      {
-         config->activity_address = NULL;
-      }
-   }
-   log_error(LOG_LEVEL_INFO, "Sending statistics updates to %s, port %d.", config->activity_address, config->activity_port);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-
    if ( NULL == config->haddr )
    {
       config->haddr = strdup( HADDR_DEFAULT );
    if ( NULL == config->haddr )
    {
       config->haddr = strdup( HADDR_DEFAULT );
@@ -1726,7 +1600,7 @@ static void savearg(char *command, char *argument, struct configuration_spec * c
     * Add config option name embedded in
     * link to it's section in the user-manual
     */
     * Add config option name embedded in
     * link to it's section in the user-manual
     */
-   buf = strdup("<a href=\"");
+   buf = strdup("\n<br><a href=\"");
    string_append(&buf, config->usermanual);
    string_append(&buf, CONFIG_HELP_PREFIX);
    string_join  (&buf, string_toupper(command));
    string_append(&buf, config->usermanual);
    string_append(&buf, CONFIG_HELP_PREFIX);
    string_join  (&buf, string_toupper(command));
@@ -1764,8 +1638,6 @@ static void savearg(char *command, char *argument, struct configuration_spec * c
       }
    }
 
       }
    }
 
-   string_append(&buf, "<br>\n");
-
    string_join(&config->proxy_args, buf);
 }
 
    string_join(&config->proxy_args, buf);
 }
 
similarity index 95%
rename from src/loadcfg.h
rename to loadcfg.h
index 6216a90..1cc58ed 100644 (file)
+++ b/loadcfg.h
@@ -1,9 +1,9 @@
 #ifndef LOADCFG_H_INCLUDED
 #define LOADCFG_H_INCLUDED
 #ifndef LOADCFG_H_INCLUDED
 #define LOADCFG_H_INCLUDED
-#define LOADCFG_H_VERSION "$Id: loadcfg.h,v 1.11 2002/03/26 22:29:55 swa Exp $"
+#define LOADCFG_H_VERSION "$Id: loadcfg.h,v 1.11.2.1 2003/03/11 11:53:59 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/loadcfg.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/loadcfg.h,v $
  *
  * Purpose     :  Loads settings from the configuration file into
  *                global variables.  This file contains both the 
  *
  * Purpose     :  Loads settings from the configuration file into
  *                global variables.  This file contains both the 
@@ -37,6 +37,9 @@
  *
  * Revisions   :
  *    $Log: loadcfg.h,v $
  *
  * Revisions   :
  *    $Log: loadcfg.h,v $
+ *    Revision 1.11.2.1  2003/03/11 11:53:59  oes
+ *    Cosmetic: Renamed cryptic variable
+ *
  *    Revision 1.11  2002/03/26 22:29:55  swa
  *    we have a new homepage!
  *
  *    Revision 1.11  2002/03/26 22:29:55  swa
  *    we have a new homepage!
  *
@@ -152,8 +155,8 @@ struct configuration_spec;
 /* Global variables */
 
 #ifdef FEATURE_TOGGLE
 /* Global variables */
 
 #ifdef FEATURE_TOGGLE
-/* indicates if ijb is enabled */
-extern int g_bToggleIJB;
+/* Privoxy's toggle state */
+extern int global_toggle_state;
 #endif /* def FEATURE_TOGGLE */
 
 extern const char *configfile;
 #endif /* def FEATURE_TOGGLE */
 
 extern const char *configfile;
similarity index 87%
rename from src/loaders.c
rename to loaders.c
index 9834e38..d679070 100644 (file)
+++ b/loaders.c
@@ -1,7 +1,7 @@
-const char loaders_rcs[] = "$Id: loaders.c,v 2.1 2002/06/04 17:22:37 jongfoster Exp $";
+const char loaders_rcs[] = "$Id: loaders.c,v 1.50.2.8 2006/01/30 15:16:25 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa//current/src/loaders.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/loaders.c,v $
  *
  * Purpose     :  Functions to load and unload the various
  *                configuration files.  Also contains code to manage
  *
  * Purpose     :  Functions to load and unload the various
  *                configuration files.  Also contains code to manage
@@ -35,11 +35,35 @@ const char loaders_rcs[] = "$Id: loaders.c,v 2.1 2002/06/04 17:22:37 jongfoster
  *
  * Revisions   :
  *    $Log: loaders.c,v $
  *
  * Revisions   :
  *    $Log: loaders.c,v $
- *    Revision 2.1  2002/06/04 17:22:37  jongfoster
- *    Adding comments
+ *    Revision 1.50.2.8  2006/01/30 15:16:25  david__schmidt
+ *    Remove a little residual debugging info
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.50.2.7  2006/01/29 23:10:56  david__schmidt
+ *    Multiple filter file support
+ *
+ *    Revision 1.50.2.6  2003/10/24 10:17:54  oes
+ *    Nit: Allowed tabs as separators in filter headings
+ *
+ *    Revision 1.50.2.5  2003/05/08 15:19:15  oes
+ *    sweep: Made loop structure of sweep step mirror that of mark step
+ *
+ *    Revision 1.50.2.4  2003/05/06 15:57:12  oes
+ *    Bugfix: Update last_active pointer in sweep() before
+ *    leaving an active client. Closes bugs #724395, #727882
+ *
+ *    Revision 1.50.2.3  2002/11/20 17:12:30  oes
+ *    Ooops, forgot one change.
+ *
+ *    Revision 1.50.2.2  2002/11/20 14:38:15  oes
+ *    Fixed delayed/incomplete freeing of client resources and
+ *    simplified loop structure in sweep.
+ *    Thanks to Oliver Stoeneberg for the hint.
+ *
+ *    Revision 1.50.2.1  2002/07/26 15:19:24  oes
+ *    - PCRS jobs now chained in order of appearance. Previous
+ *      reverse chaining was counter-intuitive.
+ *    - Changed loglevel of PCRS job compile errors to
+ *      LOG_LEVEL_ERROR
  *
  *    Revision 1.50  2002/04/24 02:12:16  oes
  *    Jon's multiple AF patch: Sweep now takes care of all AFs
  *
  *    Revision 1.50  2002/04/24 02:12:16  oes
  *    Jon's multiple AF patch: Sweep now takes care of all AFs
@@ -302,37 +326,21 @@ const char loaders_rcs[] = "$Id: loaders.c,v 2.1 2002/06/04 17:22:37 jongfoster
 
 const char loaders_h_rcs[] = LOADERS_H_VERSION;
 
 
 const char loaders_h_rcs[] = LOADERS_H_VERSION;
 
+/*
+ * Currently active files.
+ * These are also entered in the main linked list of files.
+ */
 
 #ifdef FEATURE_TRUST
 
 #ifdef FEATURE_TRUST
-/**
- * Currently active trust file.
- * This is also entered in the main linked list of files.
- */
 static struct file_list *current_trustfile      = NULL;
 #endif /* def FEATURE_TRUST */
 
 static struct file_list *current_trustfile      = NULL;
 #endif /* def FEATURE_TRUST */
 
+static int load_one_re_filterfile(struct client_state *csp, int fileid);
 
 
-/**
- * Currently active re_filter file.
- * This is also entered in the main linked list of files.
- */
-static struct file_list *current_re_filterfile  = NULL;
-
-
-/**
- * Character code for CR (ASCII 13).
- * If you have a wierd compiler and this definition is
- * incorrect, you also need to fix NEWLINE() in loaders.h
- */
-#define CHAR_CR '\r' /* ASCII 13 */
-
-
-/**
- * Character code for LF (ASCII 10).
- * If you have a wierd compiler and this definition is
- * incorrect, you also need to fix NEWLINE() in loaders.h
- */
-#define CHAR_LF '\n' /* ASCII 10 */
+static struct file_list *current_re_filterfile[MAX_AF_FILES]  = {
+   NULL, NULL, NULL, NULL, NULL,
+   NULL, NULL, NULL, NULL, NULL
+};
 
 
 
 
 
 
@@ -363,7 +371,7 @@ static struct file_list *current_re_filterfile  = NULL;
 void sweep(void)
 {
    struct file_list *fl, *nfl;
 void sweep(void)
 {
    struct file_list *fl, *nfl;
-   struct client_state *csp, *ncsp;
+   struct client_state *csp, *last_active;
    int i;
 
    /* clear all of the file's active flags */
    int i;
 
    /* clear all of the file's active flags */
@@ -372,92 +380,112 @@ void sweep(void)
       fl->active = 0;
    }
 
       fl->active = 0;
    }
 
-   for (csp = clients; csp && (NULL != (ncsp = csp->next)) ; csp = csp->next)
+   last_active = clients;
+   csp = clients->next;
+
+   while (NULL != csp)
    {
    {
-      if (ncsp->flags & CSP_FLAG_ACTIVE)
+      if (csp->flags & CSP_FLAG_ACTIVE)
       {
       {
-         /* mark this client's files as active */
+         /* Mark this client's files as active */
 
          /*
           * Always have a configuration file.
           * (Also note the slightly non-standard extra
           * indirection here.)
           */
 
          /*
           * Always have a configuration file.
           * (Also note the slightly non-standard extra
           * indirection here.)
           */
-         ncsp->config->config_file_list->active = 1;
+         csp->config->config_file_list->active = 1;
 
 
-         for (i = 0; i < MAX_ACTION_FILES; i++)
+         /* 
+          * Actions files
+          */
+         for (i = 0; i < MAX_AF_FILES; i++)
          {
          {
-            if (ncsp->actions_list[i])     /* actions files */
+            if (csp->actions_list[i])     
             {
             {
-               ncsp->actions_list[i]->active = 1;
+               csp->actions_list[i]->active = 1;
             }
          }
 
             }
          }
 
-         if (ncsp->rlist)     /* pcrsjob files */
+         /*
+          * Filter files
+          */
+         for (i = 0; i < MAX_AF_FILES; i++)
          {
          {
-            ncsp->rlist->active = 1;
+            if (csp->rlist[i])     
+            {
+               csp->rlist[i]->active = 1;
+            }
          }
 
          }
 
+         /*
+          * Trust file
+          */
 #ifdef FEATURE_TRUST
 #ifdef FEATURE_TRUST
-         if (ncsp->tlist)     /* trust files */
+         if (csp->tlist)
          {
          {
-            ncsp->tlist->active = 1;
+            csp->tlist->active = 1;
          }
 #endif /* def FEATURE_TRUST */
          }
 #endif /* def FEATURE_TRUST */
+         
+         last_active = csp;
+         csp = csp->next;
 
       }
 
       }
-      else
+      else 
       /*
       /*
-       * this client is not active, release its resources
-       * and the ones of all inactive clients that might
-       * follow it
+       * This client is not active. Free its resources.
        */
       {
        */
       {
-         while (!(ncsp->flags & CSP_FLAG_ACTIVE))
-         {
-            csp->next = ncsp->next;
+         last_active->next = csp->next;
 
 
-            freez(ncsp->ip_addr_str);
-            freez(ncsp->my_ip_addr_str);
-            freez(ncsp->my_hostname);
-            freez(ncsp->x_forwarded);
-            freez(ncsp->iob->buf);
+         freez(csp->ip_addr_str);
+         freez(csp->my_ip_addr_str);
+         freez(csp->my_hostname);
+         freez(csp->x_forwarded);
+         freez(csp->iob->buf);
 
 
-            free_http_request(ncsp->http);
+         free_http_request(csp->http);
 
 
-            destroy_list(ncsp->headers);
-            destroy_list(ncsp->cookie_list);
+         destroy_list(csp->headers);
+         destroy_list(csp->cookie_list);
 
 
-            free_current_action(ncsp->action);
+         free_current_action(csp->action);
 
 #ifdef FEATURE_STATISTICS
 
 #ifdef FEATURE_STATISTICS
-            urls_read++;
-            if (ncsp->flags & CSP_FLAG_REJECTED)
-            {
-               urls_rejected++;
-            }
+         urls_read++;
+         if (csp->flags & CSP_FLAG_REJECTED)
+         {
+            urls_rejected++;
+         }
 #endif /* def FEATURE_STATISTICS */
 
 #endif /* def FEATURE_STATISTICS */
 
-            freez(ncsp);
-
-            /* are there any more in sequence after it? */
-            if( (ncsp = csp->next) == NULL)
-               break;
-         }
+         freez(csp);
+         
+         csp = last_active->next;
       }
    }
 
       }
    }
 
-   for (fl = files; fl && ((nfl = fl->next) != NULL) ; fl = fl->next)
+   nfl = files;
+   fl = files->next;
+
+   while (fl != NULL)
    {
    {
-      if ( ( 0 == nfl->active ) && ( NULL != nfl->unloader ) )
+      if ( ( 0 == fl->active ) && ( NULL != fl->unloader ) )
       {
       {
-         fl->next = nfl->next;
+         nfl->next = fl->next;
 
 
-         (nfl->unloader)(nfl->f);
+         (fl->unloader)(fl->f);
 
 
-         freez(nfl->filename);
+         freez(fl->filename);
+         freez(fl);
 
 
-         freez(nfl);
+         fl = nfl->next;
+      }
+      else
+      {
+         nfl = fl;
+         fl = fl->next;
       }
    }
 
       }
    }
 
@@ -519,6 +547,7 @@ int check_file_changed(const struct file_list * current,
       return 1;
    }
 
       return 1;
    }
 
+
    fs->filename = strdup(filename);
    fs->lastmodified = statbuf->st_mtime;
 
    fs->filename = strdup(filename);
    fs->lastmodified = statbuf->st_mtime;
 
@@ -577,6 +606,13 @@ jb_err simple_read_line(FILE *fp, char **dest, int *newline)
 
    p = buf;
 
 
    p = buf;
 
+/*
+ * Character codes.  If you have a wierd compiler and the following are
+ * incorrect, you also need to fix NEWLINE() in loaders.h
+ */
+#define CHAR_CR '\r' /* ASCII 13 */
+#define CHAR_LF '\n' /* ASCII 10 */
+
    for (;;)
    {
       ch = getc(fp);
    for (;;)
    {
       ch = getc(fp);
@@ -1225,10 +1261,15 @@ static void unload_re_filterfile(void *f)
  *********************************************************************/
 void unload_current_re_filterfile(void)
 {
  *********************************************************************/
 void unload_current_re_filterfile(void)
 {
-   if (current_re_filterfile)
+   int i;
+
+   for (i = 0; i < MAX_AF_FILES; i++)
    {
    {
-      current_re_filterfile->unloader = unload_re_filterfile;
-      current_re_filterfile = NULL;
+      if (current_re_filterfile[i])
+      {
+         current_re_filterfile[i]->unloader = unload_re_filterfile;
+         current_re_filterfile[i] = NULL;
+      }
    }
 }
 #endif
    }
 }
 #endif
@@ -1250,6 +1291,46 @@ void unload_current_re_filterfile(void)
  *
  *********************************************************************/
 int load_re_filterfile(struct client_state *csp)
  *
  *********************************************************************/
 int load_re_filterfile(struct client_state *csp)
+{
+   int i;
+   int result;
+
+   for (i = 0; i < MAX_AF_FILES; i++)
+   {
+      if (csp->config->re_filterfile[i])
+      {
+         result = load_one_re_filterfile(csp, i);
+         if (result)
+         {
+            return result;
+         }
+      }
+      else if (current_re_filterfile[i])
+      {
+         current_re_filterfile[i]->unloader = unload_re_filterfile;
+         current_re_filterfile[i] = NULL;
+      }
+   }
+
+   return 0;
+}
+
+/*********************************************************************
+ *
+ * Function    :  load_one_re_filterfile
+ *
+ * Description :  Load a re_filterfile. 
+ *                Generate a chained list of re_filterfile_spec's from
+ *                the "FILTER: " blocks, compiling all their substitutions
+ *                into chained lists of pcrs_job structs.
+ *
+ * Parameters  :
+ *          1  :  csp = Current client state (buffers, headers, etc...)
+ *
+ * Returns     :  0 => Ok, everything else is an error.
+ *
+ *********************************************************************/
+int load_one_re_filterfile(struct client_state *csp, int fileid)
 {
    FILE *fp;
 
 {
    FILE *fp;
 
@@ -1264,11 +1345,11 @@ int load_re_filterfile(struct client_state *csp)
    /*
     * No need to reload if unchanged
     */
    /*
     * No need to reload if unchanged
     */
-   if (!check_file_changed(current_re_filterfile, csp->config->re_filterfile, &fs))
+   if (!check_file_changed(current_re_filterfile[fileid], csp->config->re_filterfile[fileid], &fs))
    {
       if (csp)
       {
    {
       if (csp)
       {
-         csp->rlist = current_re_filterfile;
+         csp->rlist[fileid] = current_re_filterfile[fileid];
       }
       return(0);
    }
       }
       return(0);
    }
@@ -1280,7 +1361,7 @@ int load_re_filterfile(struct client_state *csp)
    /* 
     * Open the file or fail
     */
    /* 
     * Open the file or fail
     */
-   if ((fp = fopen(csp->config->re_filterfile, "r")) == NULL)
+   if ((fp = fopen(csp->config->re_filterfile[fileid], "r")) == NULL)
    {
       goto load_re_filterfile_error;
    }
    {
       goto load_re_filterfile_error;
    }
@@ -1304,7 +1385,7 @@ int load_re_filterfile(struct client_state *csp)
 
          new_bl->name = chomp(buf + 7);
 
 
          new_bl->name = chomp(buf + 7);
 
-         if (NULL != (new_bl->description = strchr(new_bl->name, ' ')))
+         if (NULL != (new_bl->description = strpbrk(new_bl->name, " \t")))
          {
             *new_bl->description++ = '\0';
             new_bl->description = strdup(chomp(new_bl->description));
          {
             *new_bl->description++ = '\0';
             new_bl->description = strdup(chomp(new_bl->description));
@@ -1375,9 +1456,9 @@ int load_re_filterfile(struct client_state *csp)
    /* 
     * Schedule the now-obsolete old data for unloading
     */
    /* 
     * Schedule the now-obsolete old data for unloading
     */
-   if ( NULL != current_re_filterfile )
+   if ( NULL != current_re_filterfile[fileid] )
    {
    {
-      current_re_filterfile->unloader = unload_re_filterfile;
+      current_re_filterfile[fileid]->unloader = unload_re_filterfile;
    }
 
    /*
    }
 
    /*
@@ -1385,18 +1466,18 @@ int load_re_filterfile(struct client_state *csp)
     */
    fs->next    = files->next;
    files->next = fs;
     */
    fs->next    = files->next;
    files->next = fs;
-   current_re_filterfile = fs;
+   current_re_filterfile[fileid] = fs;
 
    if (csp)
    {
 
    if (csp)
    {
-      csp->rlist = fs;
+      csp->rlist[fileid] = fs;
    }
 
    return( 0 );
 
 load_re_filterfile_error:
    log_error(LOG_LEVEL_FATAL, "can't load re_filterfile '%s': %E",
    }
 
    return( 0 );
 
 load_re_filterfile_error:
    log_error(LOG_LEVEL_FATAL, "can't load re_filterfile '%s': %E",
-             csp->config->re_filterfile);
+             csp->config->re_filterfile[fileid]);
    return(-1);
 
 }
    return(-1);
 
 }
similarity index 94%
rename from src/loaders.h
rename to loaders.h
index a3e92c6..0e796bb 100644 (file)
+++ b/loaders.h
@@ -1,9 +1,9 @@
 #ifndef LOADERS_H_INCLUDED
 #define LOADERS_H_INCLUDED
 #ifndef LOADERS_H_INCLUDED
 #define LOADERS_H_INCLUDED
-#define LOADERS_H_VERSION "$Id: loaders.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define LOADERS_H_VERSION "$Id: loaders.h,v 1.19 2002/03/26 22:29:55 swa Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/loaders.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/loaders.h,v $
  *
  * Purpose     :  Functions to load and unload the various
  *                configuration files.  Also contains code to manage
  *
  * Purpose     :  Functions to load and unload the various
  *                configuration files.  Also contains code to manage
@@ -37,9 +37,6 @@
  *
  * Revisions   :
  *    $Log: loaders.h,v $
  *
  * Revisions   :
  *    $Log: loaders.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
- *
  *    Revision 1.19  2002/03/26 22:29:55  swa
  *    we have a new homepage!
  *
  *    Revision 1.19  2002/03/26 22:29:55  swa
  *    we have a new homepage!
  *
@@ -189,12 +186,12 @@ extern jb_err simple_read_line(FILE *fp, char **dest, int *newline);
 /*
  * Various types of newlines that a file may contain.
  */
 /*
  * Various types of newlines that a file may contain.
  */
-#define NEWLINE_UNKNOWN 0  /**< Newline convention in file is unknown */
-#define NEWLINE_UNIX    1  /**< Newline convention in file is '\n'   (ASCII 10) */
-#define NEWLINE_DOS     2  /**< Newline convention in file is '\r\n' (ASCII 13,10) */
-#define NEWLINE_MAC     3  /**< Newline convention in file is '\r'   (ASCII 13) */
+#define NEWLINE_UNKNOWN 0  /* Newline convention in file is unknown */
+#define NEWLINE_UNIX    1  /* Newline convention in file is '\n'   (ASCII 10) */
+#define NEWLINE_DOS     2  /* Newline convention in file is '\r\n' (ASCII 13,10) */
+#define NEWLINE_MAC     3  /* Newline convention in file is '\r'   (ASCII 13) */
 
 
-/**
+/*
  * Types of newlines that a file may contain, as strings.  If you have an
  * extremely wierd compiler that does not have '\r' == CR == ASCII 13 and
  * '\n' == LF == ASCII 10), then fix CHAR_CR and CHAR_LF in loaders.c as
  * Types of newlines that a file may contain, as strings.  If you have an
  * extremely wierd compiler that does not have '\r' == CR == ASCII 13 and
  * '\n' == LF == ASCII 10), then fix CHAR_CR and CHAR_LF in loaders.c as
similarity index 98%
rename from src/miscutil.c
rename to miscutil.c
index 6f6a8eb..5679ca2 100644 (file)
@@ -1,7 +1,7 @@
-const char miscutil_rcs[] = "$Id: miscutil.c,v 2.4 2002/11/12 14:30:04 oes Exp $";
+const char miscutil_rcs[] = "$Id: miscutil.c,v 1.37.2.4 2003/12/01 14:45:14 oes Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/miscutil.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/miscutil.c,v $
  *
  * Purpose     :  zalloc, hash_string, safe_strerror, strcmpic,
  *                strncmpic, chomp, and MinGW32 strdup
  *
  * Purpose     :  zalloc, hash_string, safe_strerror, strcmpic,
  *                strncmpic, chomp, and MinGW32 strdup
@@ -36,22 +36,19 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 2.4 2002/11/12 14:30:04 oes Exp $
  *
  * Revisions   :
  *    $Log: miscutil.c,v $
  *
  * Revisions   :
  *    $Log: miscutil.c,v $
- *    Revision 2.4  2002/11/12 14:30:04  oes
+ *    Revision 1.37.2.4  2003/12/01 14:45:14  oes
+ *    Fixed two more problems with wildcarding in simplematch()
+ *
+ *    Revision 1.37.2.3  2003/11/20 11:39:24  oes
+ *    Bugfix: The "?" wildcard for domain names had never been implemented. Ooops\!
+ *
+ *    Revision 1.37.2.2  2002/11/12 14:28:18  oes
  *    Proper backtracking in simplematch; fixes bug #632888
  *
  *    Proper backtracking in simplematch; fixes bug #632888
  *
- *    Revision 2.3  2002/09/25 13:00:41  oes
+ *    Revision 1.37.2.1  2002/09/25 12:58:51  oes
  *    Made strcmpic and strncmpic safe against NULL arguments
  *    (which are now treated as empty strings).
  *
  *    Made strcmpic and strncmpic safe against NULL arguments
  *    (which are now treated as empty strings).
  *
- *    Revision 2.2  2002/08/26 11:16:33  sarantis
- *    Fix typo.
- *
- *    Revision 2.1  2002/06/04 17:22:37  jongfoster
- *    Adding comments
- *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
- *
  *    Revision 1.37  2002/04/26 18:29:43  jongfoster
  *    Fixing this Visual C++ warning:
  *    miscutil.c(710) : warning C4090: '=' : different 'const' qualifiers
  *    Revision 1.37  2002/04/26 18:29:43  jongfoster
  *    Fixing this Visual C++ warning:
  *    miscutil.c(710) : warning C4090: '=' : different 'const' qualifiers
@@ -312,7 +309,7 @@ void write_pid_file(void)
  *                to "switch" a string the one of my favorites.
  *
  * Parameters  :
  *                to "switch" a string the one of my favorites.
  *
  * Parameters  :
- *          1  :  s = string to be hashed.
+ *          1  :  s : string to be hashed.
  *
  * Returns     :  an unsigned long variable with the hashed value.
  *
  *
  * Returns     :  an unsigned long variable with the hashed value.
  *
@@ -475,7 +472,7 @@ int strncmpic(const char *s1, const char *s2, size_t n)
  *                from a string.
  *
  * Parameters  :
  *                from a string.
  *
  * Parameters  :
- *          1  :  string = string to be chomped.
+ *          1  :  s : string to be chomped.
  *
  * Returns     :  chomped string
  *
  *
  * Returns     :  chomped string
  *
@@ -643,8 +640,9 @@ jb_err string_append(char **target_string, const char *text_to_append)
    if (NULL == (new_string = realloc(*target_string,
           strlen(text_to_append) + old_len + 1)))
    {
    if (NULL == (new_string = realloc(*target_string,
           strlen(text_to_append) + old_len + 1)))
    {
-      freez(*target_string);
+      free(*target_string);
 
 
+      *target_string = NULL;
       return JB_ERR_MEMORY;
    }
 
       return JB_ERR_MEMORY;
    }
 
@@ -772,14 +770,20 @@ int simplematch(char *pattern, char *text)
    unsigned i;
    unsigned char charmap[32];
   
    unsigned i;
    unsigned char charmap[32];
   
-  
    while (*txt)
    {
 
       /* EOF pattern but !EOF text? */
       if (*pat == '\0')
       {
    while (*txt)
    {
 
       /* EOF pattern but !EOF text? */
       if (*pat == '\0')
       {
-         return 1;
+         if (wildcard)
+         {
+            pat = fallback;
+         }
+         else
+         {
+            return 1;
+         }
       }
 
       /* '*' in the pattern?  */
       }
 
       /* '*' in the pattern?  */
@@ -828,9 +832,12 @@ int simplematch(char *pattern, char *text)
       } /* -END- if Character range specification */
 
 
       } /* -END- if Character range specification */
 
 
-      /* Compare: Char match, or char range match*/
-      if ((*pat == *txt)  
-      || ((*pat == ']') && (charmap[*txt / 8] & (1 << (*txt % 8)))) )
+      /* 
+       * Char match, or char range match? 
+       */
+      if ( (*pat == *txt)
+      ||   (*pat == '?')
+      ||   ((*pat == ']') && (charmap[*txt / 8] & (1 << (*txt % 8)))) )
       {
          /* 
           * Sucess: Go ahead
       {
          /* 
           * Sucess: Go ahead
@@ -850,10 +857,9 @@ int simplematch(char *pattern, char *text)
           * Wildcard mode && nonmatch beyond fallback: Rewind pattern
           */
          pat = fallback;
           * Wildcard mode && nonmatch beyond fallback: Rewind pattern
           */
          pat = fallback;
-         continue;
       }
       txt++;
       }
       txt++;
-   } 
+   }
 
    /* Cut off extra '*'s */
    if(*pat == '*')  pat++;
 
    /* Cut off extra '*'s */
    if(*pat == '*')  pat++;
@@ -875,7 +881,7 @@ int simplematch(char *pattern, char *text)
  *          1  :  string = string to be duplicated
  *          2  :  len = number of bytes to duplicate
  *
  *          1  :  string = string to be duplicated
  *          2  :  len = number of bytes to duplicate
  *
- * Returns     :  pointer to copy, or NULL if failure
+ * Returns     :  pointer to copy, or NULL if failiure
  *
  *********************************************************************/
 char *bindup(const char *string, size_t len)
  *
  *********************************************************************/
 char *bindup(const char *string, size_t len)
@@ -907,8 +913,8 @@ char *bindup(const char *string, size_t len)
  *                the filename. 
  *
  * Parameters  :
  *                the filename. 
  *
  * Parameters  :
- *          1  :  dir = Name of directory or NULL for none.
- *          2  :  file = Name of file.  Should not be NULL or empty.
+ *          1  :  dir: Name of directory or NULL for none.
+ *          2  :  file: Name of file.  Should not be NULL or empty.
  *
  * Returns     :  "dir/file" (Or on windows, "dir\file").
  *                It allocates the string on the heap.  Caller frees.
  *
  * Returns     :  "dir/file" (Or on windows, "dir\file").
  *                It allocates the string on the heap.  Caller frees.
similarity index 98%
rename from src/miscutil.h
rename to miscutil.h
index 77503cd..9c1c5b3 100644 (file)
@@ -3,7 +3,7 @@
 #define MISCUTIL_H_VERSION "$Id: miscutil.h,v 1.21 2002/04/26 12:55:38 oes Exp $"
 /*********************************************************************
  *
 #define MISCUTIL_H_VERSION "$Id: miscutil.h,v 1.21 2002/04/26 12:55:38 oes Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/miscutil.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/miscutil.h,v $
  *
  * Purpose     :  zalloc, hash_string, safe_strerror, strcmpic,
  *                strncmpic, and MinGW32 strdup functions.  These are
  *
  * Purpose     :  zalloc, hash_string, safe_strerror, strcmpic,
  *                strncmpic, and MinGW32 strdup functions.  These are
index fbf2ff8..a56c9ce 100644 (file)
@@ -4,7 +4,7 @@
 # Created: 1993-05-16
 # Public domain
 
 # Created: 1993-05-16
 # Public domain
 
-# $Id: mkinstalldirs,v 1.1 2002/09/23 03:42:41 hal9 Exp $
+# $Id: mkinstalldirs,v 1.3.2.1 2002/10/25 02:44:22 hal9 Exp $
 
 errstatus=0
 
 
 errstatus=0
 
similarity index 82%
rename from src/parsers.c
rename to parsers.c
index e8ef114..dd8929b 100644 (file)
+++ b/parsers.c
@@ -1,7 +1,7 @@
-const char parsers_rcs[] = "$Id: parsers.c,v 2.6 2003/10/02 19:41:23 david__schmidt Exp $";
+const char parsers_rcs[] = "$Id: parsers.c,v 1.56.2.10 2006/01/21 16:16:08 david__schmidt Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/parsers.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/parsers.c,v $
  *
  * Purpose     :  Declares functions to parse/crunch headers and pages.
  *                Functions declared include:
  *
  * Purpose     :  Declares functions to parse/crunch headers and pages.
  *                Functions declared include:
@@ -40,33 +40,52 @@ const char parsers_rcs[] = "$Id: parsers.c,v 2.6 2003/10/02 19:41:23 david__schm
  *
  * Revisions   :
  *    $Log: parsers.c,v $
  *
  * Revisions   :
  *    $Log: parsers.c,v $
- *    Revision 2.6  2003/10/02 19:41:23  david__schmidt
- *    Updated header debug logging to show the header text that is
- *    being crunched; refactored functions in parsers.c to have a
- *    single, common exit point
- *
- *    Revision 2.5  2003/09/25 01:44:33  david__schmidt
- *    Resyncing HEAD with v_3_0_branch for two OSX fixes:
- *    Making thread IDs look sane in the logfile for Mach kernels,
- *    and fixing multithreading crashes due to thread-unsafe
- *    system calls.
- *    and
- *
- *    Revision 2.4  2003/01/26 20:24:26  david__schmidt
- *    Updated activity console instrumentation locations
- *
- *    Revision 2.3  2002/12/28 03:58:19  david__schmidt
- *    Initial drop of dashboard instrumentation - enabled with
- *    --enable-activity-console
- *
- *    Revision 2.2  2002/11/10 04:20:38  hal9
+ *    Revision 1.56.2.10  2006/01/21 16:16:08  david__schmidt
+ *    Thanks to  Edward Carrel for his patch to modernize OSX's\rpthreads support.  See bug #1409623.
+ *
+ *    Revision 1.56.2.9  2004/10/03 12:53:45  david__schmidt
+ *    Add the ability to check jpeg images for invalid
+ *    lengths of comment blocks.  Defensive strategy
+ *    against the exploit:
+ *       Microsoft Security Bulletin MS04-028
+ *       Buffer Overrun in JPEG Processing (GDI+) Could
+ *       Allow Code Execution (833987)
+ *    Enabled with +inspect-jpegs in actions files.
+ *
+ *    Revision 1.56.2.8  2003/07/11 13:21:25  oes
+ *    Excluded text/plain objects from filtering. This fixes a
+ *    couple of client-crashing, download corruption and
+ *    Privoxy performance issues, whose root cause lies in
+ *    web servers labelling content of unknown type as text/plain.
+ *
+ *    Revision 1.56.2.7  2003/05/06 12:07:26  oes
+ *    Fixed bug #729900: Suspicious HOST: headers are now killed and regenerated if necessary
+ *
+ *    Revision 1.56.2.6  2003/04/14 21:28:30  oes
+ *    Completing the previous change
+ *
+ *    Revision 1.56.2.5  2003/04/14 12:08:16  oes
+ *    Added temporary workaround for bug in PHP < 4.2.3
+ *
+ *    Revision 1.56.2.4  2003/03/07 03:41:05  david__schmidt
+ *    Wrapping all *_r functions (the non-_r versions of them) with mutex semaphores for OSX.  Hopefully this will take care of all of those pesky crash reports.
+ *
+ *    Revision 1.56.2.3  2002/11/10 04:20:02  hal9
  *    Fix typo: supressed -> suppressed
  *
  *    Fix typo: supressed -> suppressed
  *
- *    Revision 2.1  2002/09/11 11:23:59  oes
- *    Fixed logging of cookies: Killed incoming cookies now logged; incoming/outgoing cookies now distinguished in log
+ *    Revision 1.56.2.2  2002/09/25 14:59:53  oes
+ *    Improved cookie logging
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.56.2.1  2002/09/25 14:52:45  oes
+ *    Added basic support for OPTIONS and TRACE HTTP methods:
+ *     - New parser function client_max_forwards which decrements
+ *       the Max-Forwards HTTP header field of OPTIONS and TRACE
+ *       requests by one before forwarding
+ *     - New parser function client_host which extracts the host
+ *       and port information from the HTTP header field if the
+ *       request URI was not absolute
+ *     - Don't crumble and re-add the Host: header, but only generate
+ *       and append if missing
  *
  *    Revision 1.56  2002/05/12 15:34:22  jongfoster
  *    Fixing typo in a comment
  *
  *    Revision 1.56  2002/05/12 15:34:22  jongfoster
  *    Fixing typo in a comment
@@ -430,12 +449,13 @@ const char parsers_rcs[] = "$Id: parsers.c,v 2.6 2003/10/02 19:41:23 david__schm
 #include <unistd.h>
 #endif
 
 #include <unistd.h>
 #endif
 
+#include "project.h"
+
 #ifdef OSX_DARWIN
 #include <pthread.h>
 #include "jcc.h"
 /* jcc.h is for mutex semapores only */
 #endif /* def OSX_DARWIN */
 #ifdef OSX_DARWIN
 #include <pthread.h>
 #include "jcc.h"
 /* jcc.h is for mutex semapores only */
 #endif /* def OSX_DARWIN */
-#include "project.h"
 #include "list.h"
 #include "parsers.h"
 #include "encode.h"
 #include "list.h"
 #include "parsers.h"
 #include "encode.h"
@@ -444,9 +464,6 @@ const char parsers_rcs[] = "$Id: parsers.c,v 2.6 2003/10/02 19:41:23 david__schm
 #include "jbsockets.h"
 #include "miscutil.h"
 #include "list.h"
 #include "jbsockets.h"
 #include "miscutil.h"
 #include "list.h"
-#ifdef FEATURE_ACTIVITY_CONSOLE
-#include "stats.h"
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
 
 const char parsers_h_rcs[] = PARSERS_H_VERSION;
 
 
 const char parsers_h_rcs[] = PARSERS_H_VERSION;
 
@@ -472,12 +489,13 @@ const struct parsers client_patterns[] = {
    { "cookie:",                  7,    client_send_cookie },
    { "x-forwarded-for:",         16,   client_x_forwarded },
    { "Accept-Encoding:",         16,   client_accept_encoding },
    { "cookie:",                  7,    client_send_cookie },
    { "x-forwarded-for:",         16,   client_x_forwarded },
    { "Accept-Encoding:",         16,   client_accept_encoding },
-   { "TE:",                      3,    client_te },
-   { "Host:",                     5,   crumble },
+   { "TE:",                       3,   client_te },
+   { "Host:",                     5,   client_host },
 /* { "if-modified-since:",       18,   crumble }, */
    { "Keep-Alive:",              11,   crumble },
    { "connection:",              11,   crumble },
    { "proxy-connection:",        17,   crumble },
 /* { "if-modified-since:",       18,   crumble }, */
    { "Keep-Alive:",              11,   crumble },
    { "connection:",              11,   crumble },
    { "proxy-connection:",        17,   crumble },
+   { "max-forwards:",            13,   client_max_forwards },
    { NULL,                       0,    NULL }
 };
 
    { NULL,                       0,    NULL }
 };
 
@@ -501,7 +519,7 @@ const add_header_func_ptr add_client_headers[] = {
    client_cookie_adder,
    client_x_forwarded_adder,
    client_xtra_adder,
    client_cookie_adder,
    client_x_forwarded_adder,
    client_xtra_adder,
-   client_accept_encoding_adder,
+   /* Temporarily disabled:    client_accept_encoding_adder, */
    connection_close_adder,
    NULL
 };
    connection_close_adder,
    NULL
 };
@@ -815,7 +833,7 @@ char *sed(const struct parsers pats[],
  *********************************************************************/
 jb_err crumble(struct client_state *csp, char **header)
 {
  *********************************************************************/
 jb_err crumble(struct client_state *csp, char **header)
 {
-   log_error(LOG_LEVEL_HEADER, "crunch: %s",*header);
+   log_error(LOG_LEVEL_HEADER, "crunch!");
    freez(*header);
    return JB_ERR_OK;
 }
    freez(*header);
    return JB_ERR_OK;
 }
@@ -828,6 +846,9 @@ jb_err crumble(struct client_state *csp, char **header)
  * Description :  Set the content-type for filterable types (text/.*,
  *                javascript and image/gif) unless filtering has been
  *                forbidden (CT_TABOO) while parsing earlier headers.
  * Description :  Set the content-type for filterable types (text/.*,
  *                javascript and image/gif) unless filtering has been
  *                forbidden (CT_TABOO) while parsing earlier headers.
+ *                NOTE: Since text/plain is commonly used by web servers
+ *                      for files whose correct type is unknown, we don't
+ *                      set CT_TEXT for it.
  *
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
  *
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
@@ -844,7 +865,7 @@ jb_err server_content_type(struct client_state *csp, char **header)
 {
    if (csp->content_type != CT_TABOO)
    {
 {
    if (csp->content_type != CT_TABOO)
    {
-      if (strstr(*header, " text/")
+      if ((strstr(*header, " text/") && !strstr(*header, "plain"))
        || strstr(*header, "application/x-javascript"))
          csp->content_type = CT_TEXT;
       else if (strstr(*header, " image/gif"))
        || strstr(*header, "application/x-javascript"))
          csp->content_type = CT_TEXT;
       else if (strstr(*header, " image/gif"))
@@ -1004,7 +1025,7 @@ jb_err server_content_md5(struct client_state *csp, char **header)
 {
    if (csp->flags & CSP_FLAG_MODIFIED)
    {
 {
    if (csp->flags & CSP_FLAG_MODIFIED)
    {
-      log_error(LOG_LEVEL_HEADER, "Crunching Content-MD5: %s", *header);
+      log_error(LOG_LEVEL_HEADER, "Crunching Content-MD5");
       freez(*header);
    }
 
       freez(*header);
    }
 
@@ -1038,14 +1059,20 @@ jb_err client_accept_encoding(struct client_state *csp, char **header)
       log_error(LOG_LEVEL_HEADER, "Suppressed offer to compress content");
 
       freez(*header);
       log_error(LOG_LEVEL_HEADER, "Suppressed offer to compress content");
 
       freez(*header);
-      if (!strcmpic(csp->http->ver, "HTTP/1.1"))
-      {
-         *header = strdup("Accept-Encoding: identity;q=1.0, *;q=0");
-         if (*header == NULL)
-         {
-            return JB_ERR_MEMORY;
-         }
-      }
+
+      /* Temporarily disable the correct behaviour to
+       * work around a PHP bug. 
+       *
+       * if (!strcmpic(csp->http->ver, "HTTP/1.1"))
+       * {
+       *    *header = strdup("Accept-Encoding: identity;q=1.0, *;q=0");
+       *    if (*header == NULL)
+       *    {
+       *       return JB_ERR_MEMORY;
+       *    }
+       * }
+       * 
+       */
    }
 
    return JB_ERR_OK;
    }
 
    return JB_ERR_OK;
@@ -1102,7 +1129,6 @@ jb_err client_te(struct client_state *csp, char **header)
 jb_err client_referrer(struct client_state *csp, char **header)
 {
    const char *newval;
 jb_err client_referrer(struct client_state *csp, char **header)
 {
    const char *newval;
-   jb_err err = JB_ERR_OK;
 
 #ifdef FEATURE_FORCE_LOAD
    /* Since the referrer can include the prefix even
 
 #ifdef FEATURE_FORCE_LOAD
    /* Since the referrer can include the prefix even
@@ -1113,74 +1139,58 @@ jb_err client_referrer(struct client_state *csp, char **header)
 #endif /* def FEATURE_FORCE_LOAD */
 
    /*
 #endif /* def FEATURE_FORCE_LOAD */
 
    /*
-    * As long as we're not blocking the referer...
+    * Are we sending referer?
     */
     */
-   if ((csp->action->flags & ACTION_HIDE_REFERER) != 0)
+   if ((csp->action->flags & ACTION_HIDE_REFERER) == 0)
    {
    {
+      return JB_ERR_OK;
+   }
 
 
-      newval = csp->action->string[ACTION_STRING_REFERER];
+   freez(*header);
 
 
-#ifdef FEATURE_ACTIVITY_CONSOLE
-      /* We are doing something with the referer. */
-      accumulate_stats(STATS_REFERER, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
+   newval = csp->action->string[ACTION_STRING_REFERER];
 
 
+   if ((newval == NULL) || (0 == strcmpic(newval, "block")) )
+   {
       /*
       /*
-       * Note that each clause needs to freez the header pointer;
-       * but everybody needs to use it for logging purposes before
-       * it gets freed, so always free it just after logging it.
+       * Blocking referer
        */
        */
-      if ((newval == NULL) || (0 == strcmpic(newval, "block")) )
-      {
-         /*
-          * Blocking referer
-          */
-         log_error(LOG_LEVEL_HEADER, "crunch: %s", *header);
-         freez(*header);
-         err = JB_ERR_OK;
-      }
-      else if (0 == strncmpic(newval, "http://", 7))
+      log_error(LOG_LEVEL_HEADER, "crunch!");
+      return JB_ERR_OK;
+   }
+   else if (0 == strncmpic(newval, "http://", 7))
+   {
+      /*
+       * We have a specific (fixed) referer we want to send.
+       */
+      log_error(LOG_LEVEL_HEADER, "modified");
+
+      *header = strdup("Referer: ");
+      string_append(header, newval);
+
+      return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;
+   }
+   else
+   {
+      /*
+       * Forge a referer as http://[hostname:port of REQUEST]/
+       * to fool stupid checks for in-site links
+       */
+      if (0 != strcmpic(newval, "forge"))
       {
          /*
       {
          /*
-          * We have a specific (fixed) referer we want to send.
+          * Invalid choice - but forge is probably the best default.
           */
           */
-         log_error(LOG_LEVEL_HEADER, "modified: %s", *header);
-         freez(*header);
-         *header = strdup("Referer: ");
-         if (NULL == *header)
-            err = JB_ERR_MEMORY;
-         else
-            err = string_append(header, newval);
+         log_error(LOG_LEVEL_ERROR, "Bad parameter: +referer{%s}", newval);
       }
       }
-      else
-      {
-         /*
-          * Forge a referer as http://[hostname:port of REQUEST]/
-          * to fool stupid checks for in-site links
-          */
-         if (0 != strcmpic(newval, "forge"))
-         {
-            /*
-             * Invalid choice - but forge is probably the best default.
-             */
-            log_error(LOG_LEVEL_ERROR, "Bad parameter: +referer{%s}", newval);
-         }
 
 
-         log_error(LOG_LEVEL_HEADER, "crunch+forge: %s", *header);
-         freez(*header);
-         *header = strdup("Referer: http://");
-         if (NULL == *header)
-            err = JB_ERR_MEMORY;
-         else
-         {
-            err = string_append(header, csp->http->hostport);
-            err = string_append(header, "/");
-            if (JB_ERR_OK == err)
-               log_error(LOG_LEVEL_HEADER, "crunch+forged to: %s", *header);
-         }
-      }
+      *header = strdup("Referer: http://");
+      string_append(header, csp->http->hostport);
+      string_append(header, "/");
+      log_error(LOG_LEVEL_HEADER, "crunch+forge to %s", *header);
+      
+      return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;
    }
    }
-   return err;
 }
 
 
 }
 
 
@@ -1206,25 +1216,25 @@ jb_err client_referrer(struct client_state *csp, char **header)
 jb_err client_uagent(struct client_state *csp, char **header)
 {
    const char *newval;
 jb_err client_uagent(struct client_state *csp, char **header)
 {
    const char *newval;
-   jb_err err = JB_ERR_OK;
 
 
-   /*
-    * As long as we don't want to hide user-agent...
-    */
-   if ((csp->action->flags & ACTION_HIDE_USER_AGENT) != 0)
+   if ((csp->action->flags & ACTION_HIDE_USER_AGENT) == 0)
    {
    {
-      newval = csp->action->string[ACTION_STRING_USER_AGENT];
-      if (NULL != newval)
-      {
-         log_error(LOG_LEVEL_HEADER, "modified: %s", *header);
+      return JB_ERR_OK;
+   }
 
 
-         freez(*header);
-         *header = strdup("User-Agent: ");
-         err = string_append(header, newval);
-      }
+   newval = csp->action->string[ACTION_STRING_USER_AGENT];
+   if (newval == NULL)
+   {
+      return JB_ERR_OK;
    }
 
    }
 
-   return err;
+   log_error(LOG_LEVEL_HEADER, "modified");
+
+   freez(*header);
+   *header = strdup("User-Agent: ");
+   string_append(header, newval);
+
+   return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;
 }
 
 
 }
 
 
@@ -1249,10 +1259,7 @@ jb_err client_ua(struct client_state *csp, char **header)
 {
    if ((csp->action->flags & ACTION_HIDE_USER_AGENT) != 0)
    {
 {
    if ((csp->action->flags & ACTION_HIDE_USER_AGENT) != 0)
    {
-#ifdef FEATURE_ACTIVITY_CONSOLE
-      accumulate_stats(STATS_CLIENT_UA, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-      log_error(LOG_LEVEL_HEADER, "crunch: %s", *header);
+      log_error(LOG_LEVEL_HEADER, "crunch!");
       freez(*header);
    }
 
       freez(*header);
    }
 
@@ -1281,37 +1288,31 @@ jb_err client_ua(struct client_state *csp, char **header)
 jb_err client_from(struct client_state *csp, char **header)
 {
    const char *newval;
 jb_err client_from(struct client_state *csp, char **header)
 {
    const char *newval;
-   jb_err err = JB_ERR_OK;
 
 
-   /* 
-    * As long as we should handle the "from" setting...
-    */
-   if ((csp->action->flags & ACTION_HIDE_FROM) != 0)
+   if ((csp->action->flags & ACTION_HIDE_FROM) == 0)
    {
    {
-#ifdef FEATURE_ACTIVITY_CONSOLE
-      /* We're doing something with it. */
-      accumulate_stats(STATS_CLIENT_FROM, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
+      return JB_ERR_OK;
+   }
 
 
-      newval = csp->action->string[ACTION_STRING_FROM];
+   freez(*header);
 
 
-      /*
-       * Are we blocking the e-mail address?
-       */
-      if ((NULL == newval) || (0 == strcmpic(newval, "block")) )
-      {
-         log_error(LOG_LEVEL_HEADER, "crunch: %s", *header);
-         err = JB_ERR_OK;
-      }
-      else
-      {
-         log_error(LOG_LEVEL_HEADER, "modified: %s", *header);
-         freez(*header);
-         *header = strdup("From: ");
-         err = string_append(header, newval);
-      }
+   newval = csp->action->string[ACTION_STRING_FROM];
+
+   /*
+    * Are we blocking the e-mail address?
+    */
+   if ((newval == NULL) || (0 == strcmpic(newval, "block")) )
+   {
+      log_error(LOG_LEVEL_HEADER, "crunch!");
+      return JB_ERR_OK;
    }
    }
-   return err;
+
+   log_error(LOG_LEVEL_HEADER, " modified");
+
+   *header = strdup("From: ");
+   string_append(header, newval);
+
+   return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;
 }
 
 
 }
 
 
@@ -1336,16 +1337,16 @@ jb_err client_from(struct client_state *csp, char **header)
  *********************************************************************/
 jb_err client_send_cookie(struct client_state *csp, char **header)
 {
  *********************************************************************/
 jb_err client_send_cookie(struct client_state *csp, char **header)
 {
-   jb_err err = JB_ERR_OK;
+   jb_err result = JB_ERR_OK;
 
    if ((csp->action->flags & ACTION_NO_COOKIE_READ) == 0)
    {
       /* strlen("cookie: ") == 8 */
 
    if ((csp->action->flags & ACTION_NO_COOKIE_READ) == 0)
    {
       /* strlen("cookie: ") == 8 */
-      err = enlist(csp->cookie_list, *header + 8);
+      result = enlist(csp->cookie_list, *header + 8);
    }
    else
    {
    }
    else
    {
-      log_error(LOG_LEVEL_HEADER, "Crunched cookie: %s", *header);
+      log_error(LOG_LEVEL_HEADER, "Crunched outgoing cookie -- yum!");
    }
 
    /*
    }
 
    /*
@@ -1354,7 +1355,7 @@ jb_err client_send_cookie(struct client_state *csp, char **header)
     */
    freez(*header);
 
     */
    freez(*header);
 
-   return err;
+   return result;
 }
 
 
 }
 
 
@@ -1392,66 +1393,176 @@ jb_err client_x_forwarded(struct client_state *csp, char **header)
    }
    else
    {
    }
    else
    {
-#ifdef FEATURE_ACTIVITY_CONSOLE
-      accumulate_stats(STATS_CLIENT_X_FORWARDED, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-      log_error(LOG_LEVEL_HEADER, "crunch: %s", *header);
       freez(*header);
       freez(*header);
+      log_error(LOG_LEVEL_HEADER, " crunch!");
    }
 
    return JB_ERR_OK;
 }
 
    }
 
    return JB_ERR_OK;
 }
 
-/* the following functions add headers directly to the header list */
 
 /*********************************************************************
  *
 
 /*********************************************************************
  *
- * Function    :  client_host_adder
+ * Function    :  client_max_forwards
  *
  *
- * Description :  (re)adds the host header. Called from `sed'.
+ * Description :  If the HTTP method is OPTIONS or TRACE, subtract one
+ *                from the value of the Max-Forwards header field.
  *
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
  *
  * Parameters  :
  *          1  :  csp = Current client state (buffers, headers, etc...)
+ *          2  :  header = On input, pointer to header to modify.
+ *                On output, pointer to the modified header, or NULL
+ *                to remove the header.  This function frees the
+ *                original string if necessary.
  *
  * Returns     :  JB_ERR_OK on success, or
  *                JB_ERR_MEMORY on out-of-memory error.
  *
  *********************************************************************/
  *
  * Returns     :  JB_ERR_OK on success, or
  *                JB_ERR_MEMORY on out-of-memory error.
  *
  *********************************************************************/
-jb_err client_host_adder(struct client_state *csp)
+jb_err client_max_forwards(struct client_state *csp, char **header)
 {
 {
-   char *p;
-   char *pos;
-   jb_err err = JB_ERR_OK;
+   unsigned int max_forwards;
 
 
-   if ( csp->http->hostport && *(csp->http->hostport))
+   if ((0 == strcmpic(csp->http->gpc, "trace"))
+      || (0 == strcmpic(csp->http->gpc, "options")))
    {
    {
-      p = strdup("Host: ");
-      if (NULL != p)
+      if (1 == sscanf(*header, "Max-Forwards: %u", &max_forwards))
       {
       {
-         /*
-          * remove 'user:pass@' from 'proto://user:pass@host'
-          */
-         if ( (pos = strchr( csp->http->hostport, '@')) != NULL )
+         if (max_forwards-- >= 1)
          {
          {
-             string_append(&p, pos+1);
+            sprintf(*header, "Max-Forwards: %u", max_forwards);
+            log_error(LOG_LEVEL_HEADER, "Max forwards of %s request now %d", csp->http->gpc, max_forwards);
          }
          else
          {
          }
          else
          {
-            string_append(&p, csp->http->hostport);
+            log_error(LOG_LEVEL_ERROR, "Non-intercepted %s request with Max-Forwards zero!", csp->http->gpc);
          }
          }
+      }
+   }
 
 
-         log_error(LOG_LEVEL_HEADER, "addh: %s", p);
+   return JB_ERR_OK;
+}
 
 
-         err = enlist(csp->headers, p);
 
 
+/*********************************************************************
+ *
+ * Function    :  client_host
+ *
+ * Description :  If the request URI did not contain host and
+ *                port information, parse and evaluate the Host
+ *                header field.
+ *
+ *                Also, kill ill-formed HOST: headers as sent by
+ *                Apple's iTunes software when used with a proxy.
+ *
+ * Parameters  :
+ *          1  :  csp = Current client state (buffers, headers, etc...)
+ *          2  :  header = On input, pointer to header to modify.
+ *                On output, pointer to the modified header, or NULL
+ *                to remove the header.  This function frees the
+ *                original string if necessary.
+ *
+ * Returns     :  JB_ERR_OK on success, or
+ *                JB_ERR_MEMORY on out-of-memory error.
+ *
+ *********************************************************************/
+jb_err client_host(struct client_state *csp, char **header)
+{
+   char *p, *q;
+
+   /*
+    * If the header field name is all upper-case, chances are that it's
+    * an ill-formed one from iTunes. BTW, killing innocent headers here is
+    * not a problem -- they are regenerated later.
+    */
+   if ((*header)[1] == 'O')
+   {
+      log_error(LOG_LEVEL_HEADER, "Killed all-caps Host header line: %s", *header);
+      freez(*header);
+      return JB_ERR_OK;
+   }
+
+   if (!csp->http->hostport || (*csp->http->hostport == '*') ||  
+       *csp->http->hostport == ' ' || *csp->http->hostport == '\0')
+   {
+      
+      if (NULL == (p = strdup((*header)+6)))
+      {
+         return JB_ERR_MEMORY;
+      }
+      chomp(p);
+      if (NULL == (q = strdup(p)))
+      {
          freez(p);
          freez(p);
+         return JB_ERR_MEMORY;
+      }
+
+      freez(csp->http->hostport);
+      csp->http->hostport = p;
+      freez(csp->http->host);
+      csp->http->host = q;
+      q = strchr(csp->http->host, ':');
+      if (q != NULL)
+      {
+         /* Terminate hostname and evaluate port string */
+         *q++ = '\0';
+         csp->http->port = atoi(q);
       }
       else
       {
       }
       else
       {
-         err = JB_ERR_MEMORY;
+         csp->http->port = csp->http->ssl ? 443 : 80;
       }
       }
+
+      log_error(LOG_LEVEL_HEADER, "New host and port from Host field: %s = %s:%d",
+                csp->http->hostport, csp->http->host, csp->http->port);
+   }
+
+   return JB_ERR_OK;
+}
+
+
+/* the following functions add headers directly to the header list */
+
+/*********************************************************************
+ *
+ * Function    :  client_host_adder
+ *
+ * Description :  Adds the Host: header field if it is missing.
+ *                Called from `sed'.
+ *
+ * Parameters  :
+ *          1  :  csp = Current client state (buffers, headers, etc...)
+ *
+ * Returns     :  JB_ERR_OK on success, or
+ *                JB_ERR_MEMORY on out-of-memory error.
+ *
+ *********************************************************************/
+jb_err client_host_adder(struct client_state *csp)
+{
+   char *p;
+   jb_err err;
+
+   if ( !csp->http->hostport || !*(csp->http->hostport))
+   {
+      return JB_ERR_OK;
    }
    }
+
+   /*
+    * remove 'user:pass@' from 'proto://user:pass@host'
+    */
+   if ( (p = strchr( csp->http->hostport, '@')) != NULL )
+   {
+      p++;
+   }
+   else
+   {
+      p = csp->http->hostport;
+   }
+
+   log_error(LOG_LEVEL_HEADER, "addh-unique: Host: %s", p);
+   err = enlist_unique_header(csp->headers, "Host", p);
    return err;
    return err;
+
 }
 
 
 }
 
 
@@ -1475,47 +1586,50 @@ jb_err client_cookie_adder(struct client_state *csp)
    struct list_entry *list1 = csp->cookie_list->first;
    struct list_entry *list2 = csp->action->multi[ACTION_MULTI_WAFER]->first;
    int first_cookie = 1;
    struct list_entry *list1 = csp->cookie_list->first;
    struct list_entry *list2 = csp->action->multi[ACTION_MULTI_WAFER]->first;
    int first_cookie = 1;
-   jb_err err = JB_ERR_OK;
+   jb_err err;
 
 
-   if ((list1 != NULL) || (list2 != NULL))
+   if ((list1 == NULL) && (list2 == NULL))
    {
    {
-      tmp = strdup("Cookie: ");
-      if (NULL != tmp)
+      /* Nothing to do */
+      return JB_ERR_OK;
+   }
+
+   tmp = strdup("Cookie: ");
+
+   for (lst = list1; lst ; lst = lst->next)
+   {
+      if (first_cookie)
       {
       {
-         for (lst = list1; lst ; lst = lst->next)
-         {
-            if (first_cookie)
-            {
-               first_cookie = 0;
-            }
-            else
-            {
-               string_append(&tmp, "; ");
-            }
-            string_append(&tmp, lst->str);
-         }
+         first_cookie = 0;
+      }
+      else
+      {
+         string_append(&tmp, "; ");
+      }
+      string_append(&tmp, lst->str);
+   }
 
 
-         for (lst = list2;  lst ; lst = lst->next)
-         {
-            if (first_cookie)
-            {
-               first_cookie = 0;
-            }
-            else
-            {
-               string_append(&tmp, "; ");
-            }
-            string_join(&tmp, cookie_encode(lst->str));
-         }
-         log_error(LOG_LEVEL_HEADER, "addh: %s", tmp);
-         err = enlist(csp->headers, tmp);
-         free(tmp);
+   for (lst = list2;  lst ; lst = lst->next)
+   {
+      if (first_cookie)
+      {
+         first_cookie = 0;
       }
       else
       {
       }
       else
       {
-         err = JB_ERR_MEMORY;
+         string_append(&tmp, "; ");
       }
       }
+      string_join(&tmp, cookie_encode(lst->str));
    }
    }
+
+   if (tmp == NULL)
+   {
+      return JB_ERR_MEMORY;
+   }
+
+   log_error(LOG_LEVEL_HEADER, "addh: %s", tmp);
+   err = enlist(csp->headers, tmp);
+   free(tmp);
    return err;
 }
 
    return err;
 }
 
@@ -1598,29 +1712,33 @@ jb_err client_xtra_adder(struct client_state *csp)
 jb_err client_x_forwarded_adder(struct client_state *csp)
 {
    char *p = NULL;
 jb_err client_x_forwarded_adder(struct client_state *csp)
 {
    char *p = NULL;
-   jb_err err = JB_ERR_OK;
+   jb_err err;
 
 
-   if (0 == (csp->action->flags & ACTION_HIDE_FORWARDED))
+   if ((csp->action->flags & ACTION_HIDE_FORWARDED) != 0)
    {
    {
+      return JB_ERR_OK;
+   }
 
 
-      if (csp->x_forwarded)
-      {
-         p = strdup(csp->x_forwarded);
-         err = string_append(&p, ", ");
-      }
-      else
-      {
-         p = strdup("X-Forwarded-For: ");
-      }
-      err = string_append(&p, csp->ip_addr_str);
+   if (csp->x_forwarded)
+   {
+      p = strdup(csp->x_forwarded);
+      string_append(&p, ", ");
+   }
+   else
+   {
+      p = strdup("X-Forwarded-For: ");
+   }
+   string_append(&p, csp->ip_addr_str);
 
 
-      if (NULL != p)
-      {
-         log_error(LOG_LEVEL_HEADER, "addh: %s", p);
-         err = enlist(csp->headers, p);
-         freez(p);
-      }
+   if (p == NULL)
+   {
+      return JB_ERR_MEMORY;
    }
    }
+
+   log_error(LOG_LEVEL_HEADER, "addh: %s", p);
+   err = enlist(csp->headers, p);
+   free(p);
+
    return err;
 }
 
    return err;
 }
 
@@ -1707,8 +1825,6 @@ jb_err server_http(struct client_state *csp, char **header)
  *********************************************************************/
 jb_err server_set_cookie(struct client_state *csp, char **header)
 {
  *********************************************************************/
 jb_err server_set_cookie(struct client_state *csp, char **header)
 {
-   jb_err err = JB_ERR_OK;
-
 #ifdef FEATURE_COOKIE_JAR
    if (csp->config->jar)
    {
 #ifdef FEATURE_COOKIE_JAR
    if (csp->config->jar)
    {
@@ -1741,10 +1857,7 @@ jb_err server_set_cookie(struct client_state *csp, char **header)
    if ((csp->action->flags & ACTION_NO_COOKIE_SET) != 0)
    {
       log_error(LOG_LEVEL_HEADER, "Crunched incoming cookie -- yum!");
    if ((csp->action->flags & ACTION_NO_COOKIE_SET) != 0)
    {
       log_error(LOG_LEVEL_HEADER, "Crunched incoming cookie -- yum!");
-#ifdef FEATURE_ACTIVITY_CONSOLE
-      accumulate_stats(STATS_COOKIE, 1);
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-      err = crumble(csp, header);
+      return crumble(csp, header);
    }
    else if ((csp->action->flags & ACTION_NO_COOKIE_KEEP) != 0)
    {
    }
    else if ((csp->action->flags & ACTION_NO_COOKIE_KEEP) != 0)
    {
@@ -1815,7 +1928,7 @@ jb_err server_set_cookie(struct client_state *csp, char **header)
       }
    }
 
       }
    }
 
-   return err;
+   return JB_ERR_OK;
 }
 
 
 }
 
 
similarity index 91%
rename from src/parsers.h
rename to parsers.h
index 5d22442..144c222 100644 (file)
+++ b/parsers.h
@@ -1,9 +1,9 @@
 #ifndef PARSERS_H_INCLUDED
 #define PARSERS_H_INCLUDED
 #ifndef PARSERS_H_INCLUDED
 #define PARSERS_H_INCLUDED
-#define PARSERS_H_VERSION "$Id: parsers.h,v 1.26 2002/05/08 15:59:53 oes Exp $"
+#define PARSERS_H_VERSION "$Id: parsers.h,v 1.26.2.1 2002/09/25 14:52:46 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/parsers.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/parsers.h,v $
  *
  * Purpose     :  Declares functions to parse/crunch headers and pages.
  *                Functions declared include:
  *
  * Purpose     :  Declares functions to parse/crunch headers and pages.
  *                Functions declared include:
  *
  * Revisions   :
  *    $Log: parsers.h,v $
  *
  * Revisions   :
  *    $Log: parsers.h,v $
+ *    Revision 1.26.2.1  2002/09/25 14:52:46  oes
+ *    Added basic support for OPTIONS and TRACE HTTP methods:
+ *     - New parser function client_max_forwards which decrements
+ *       the Max-Forwards HTTP header field of OPTIONS and TRACE
+ *       requests by one before forwarding
+ *     - New parser function client_host which extracts the host
+ *       and port information from the HTTP header field if the
+ *       request URI was not absolute
+ *     - Don't crumble and re-add the Host: header, but only generate
+ *       and append if missing
+ *
  *    Revision 1.26  2002/05/08 15:59:53  oes
  *    Changed add_to_iob signature (now returns jb_err)
  *
  *    Revision 1.26  2002/05/08 15:59:53  oes
  *    Changed add_to_iob signature (now returns jb_err)
  *
@@ -196,6 +207,9 @@ extern jb_err client_send_cookie     (struct client_state *csp, char **header);
 extern jb_err client_x_forwarded     (struct client_state *csp, char **header);
 extern jb_err client_accept_encoding (struct client_state *csp, char **header);
 extern jb_err client_te              (struct client_state *csp, char **header);
 extern jb_err client_x_forwarded     (struct client_state *csp, char **header);
 extern jb_err client_accept_encoding (struct client_state *csp, char **header);
 extern jb_err client_te              (struct client_state *csp, char **header);
+extern jb_err client_max_forwards    (struct client_state *csp, char **header);
+extern jb_err client_host(struct client_state *csp, char **header);
+
 
 extern jb_err client_host_adder           (struct client_state *csp);
 extern jb_err client_cookie_adder         (struct client_state *csp);
 
 extern jb_err client_host_adder           (struct client_state *csp);
 extern jb_err client_cookie_adder         (struct client_state *csp);
index e2aca05..c767cbb 100644 (file)
@@ -1,5 +1,5 @@
 
 /* For Privoxy, we just use Privoxy's config.h */
 
 
 /* For Privoxy, we just use Privoxy's config.h */
 
-#include "../src/config.h"
+#include "../config.h"
 
 
old mode 100644 (file)
new mode 100755 (executable)
similarity index 85%
rename from visualc/vc_dftables.dsp
rename to pcre/vc_dftables.dsp
index e1fb9f2..60404f8
-# Microsoft Developer Studio Project File - Name="vc_dftables" - Package Owner=<4>\r
-# Microsoft Developer Studio Generated Build File, Format Version 5.00\r
-# ** DO NOT EDIT **\r
-\r
-# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
-\r
-CFG=vc_dftables - Win32 Debug with Win32 threads\r
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
-!MESSAGE use the Export Makefile command and run\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "vc_dftables.mak".\r
-!MESSAGE \r
-!MESSAGE You can specify a configuration when running NMAKE\r
-!MESSAGE by defining the macro CFG on the command line. For example:\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "vc_dftables.mak"\\r
- CFG="vc_dftables - Win32 Debug with Win32 threads"\r
-!MESSAGE \r
-!MESSAGE Possible choices for configuration are:\r
-!MESSAGE \r
-!MESSAGE "vc_dftables - Win32 Release" (based on\\r
- "Win32 (x86) Console Application")\r
-!MESSAGE "vc_dftables - Win32 Debug" (based on\\r
- "Win32 (x86) Console Application")\r
-!MESSAGE "vc_dftables - Win32 Debug with Win32 threads" (based on\\r
- "Win32 (x86) Console Application")\r
-!MESSAGE "vc_dftables - Win32 Release with Win32 threads" (based on\\r
- "Win32 (x86) Console Application")\r
-!MESSAGE \r
-\r
-# Begin Project\r
-# PROP Scc_ProjName ""\r
-# PROP Scc_LocalPath ""\r
-CPP=cl.exe\r
-RSC=rc.exe\r
-\r
-!IF  "$(CFG)" == "vc_dftables - Win32 Release"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "Release"\r
-# PROP BASE Intermediate_Dir "Release"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "vc_dftables"\r
-# PROP Intermediate_Dir "vc_dftables"\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD BASE RSC /l 0x809 /d "NDEBUG"\r
-# ADD RSC /l 0x809 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
-# Begin Special Build Tool\r
-OutDir=.\vc_dftables\r
-WkspDir=.\r
-SOURCE=$(InputPath)\r
-PostBuild_Desc=Running program to generate chartables.c\r
-PostBuild_Cmds=$(OutDir)\vc_dftables.exe >$(WkspDir)\..\pcre\chartables.c\r
-# End Special Build Tool\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "Debug"\r
-# PROP BASE Intermediate_Dir "Debug"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "vc_dftables_dbg"\r
-# PROP Intermediate_Dir "vc_dftables_dbg"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD BASE RSC /l 0x809 /d "_DEBUG"\r
-# ADD RSC /l 0x809 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# Begin Special Build Tool\r
-OutDir=.\vc_dftables_dbg\r
-SOURCE=$(InputPath)\r
-PostBuild_Desc=Running program to generate chartables.c\r
-PostBuild_Cmds=$(OutDir)\vc_dftables.exe >$(OutDir)\..\..\pcre\chartables.c\r
-# End Special Build Tool\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug with Win32 threads"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "vc_dftab"\r
-# PROP BASE Intermediate_Dir "vc_dftab"\r
-# PROP BASE Ignore_Export_Lib 0\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "vc_dftables_dbg"\r
-# PROP Intermediate_Dir "vc_dftables_dbg"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD BASE RSC /l 0x809 /d "_DEBUG"\r
-# ADD RSC /l 0x809 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# Begin Special Build Tool\r
-OutDir=.\vc_dftables_dbg\r
-SOURCE=$(InputPath)\r
-PostBuild_Desc=Running program to generate chartables.c\r
-PostBuild_Cmds=$(OutDir)\vc_dftables.exe >$(OutDir)\..\..\pcre\chartables.c\r
-# End Special Build Tool\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Release with Win32 threads"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "vc_dfta0"\r
-# PROP BASE Intermediate_Dir "vc_dfta0"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "vc_dftables"\r
-# PROP Intermediate_Dir "vc_dftables"\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD BASE RSC /l 0x809 /d "NDEBUG"\r
-# ADD RSC /l 0x809 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
-# Begin Special Build Tool\r
-OutDir=.\vc_dftables\r
-WkspDir=.\r
-SOURCE=$(InputPath)\r
-PostBuild_Desc=Running program to generate chartables.c\r
-PostBuild_Cmds=$(OutDir)\vc_dftables.exe >$(WkspDir)\..\pcre\chartables.c\r
-# End Special Build Tool\r
-\r
-!ENDIF \r
-\r
-# Begin Target\r
-\r
-# Name "vc_dftables - Win32 Release"\r
-# Name "vc_dftables - Win32 Debug"\r
-# Name "vc_dftables - Win32 Debug with Win32 threads"\r
-# Name "vc_dftables - Win32 Release with Win32 threads"\r
-# Begin Group "File Copy"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=.\vc_config_pthreads.h\r
-\r
-!IF  "$(CFG)" == "vc_dftables - Win32 Release"\r
-\r
-# PROP Ignore_Default_Tool 1\r
-# Begin Custom Build - Copying vc_config_pthreads.h\r
-WkspDir=.\r
-InputPath=.\vc_config_pthreads.h\r
-\r
-"$(WkspDir)\..\src\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
-       copy "$(InputPath)" "$(WkspDir)\..\src\config.h"\r
-\r
-# End Custom Build\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug"\r
-\r
-# PROP Ignore_Default_Tool 1\r
-# Begin Custom Build - Copying vc_config_pthreads.h\r
-WkspDir=.\r
-InputPath=.\vc_config_pthreads.h\r
-\r
-"$(WkspDir)\..\src\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
-       copy "$(InputPath)" "$(WkspDir)\..\src\config.h"\r
-\r
-# End Custom Build\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug with Win32 threads"\r
-\r
-# PROP Exclude_From_Build 1\r
-# PROP Ignore_Default_Tool 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Release with Win32 threads"\r
-\r
-# PROP Exclude_From_Build 1\r
-# PROP Ignore_Default_Tool 1\r
-\r
-!ENDIF \r
-\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=.\vc_config_winthreads.h\r
-\r
-!IF  "$(CFG)" == "vc_dftables - Win32 Release"\r
-\r
-# PROP Exclude_From_Build 1\r
-# PROP Ignore_Default_Tool 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug"\r
-\r
-# PROP Exclude_From_Build 1\r
-# PROP Ignore_Default_Tool 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug with Win32 threads"\r
-\r
-# PROP Ignore_Default_Tool 1\r
-# Begin Custom Build - Copying vc_config_winthreads.h\r
-WkspDir=.\r
-InputPath=.\vc_config_winthreads.h\r
-\r
-"$(WkspDir)\..\src\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
-       copy "$(InputPath)" "$(WkspDir)\..\src\config.h"\r
-\r
-# End Custom Build\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Release with Win32 threads"\r
-\r
-# PROP Ignore_Default_Tool 1\r
-# Begin Custom Build - Copying vc_config_winthreads.h\r
-WkspDir=.\r
-InputPath=.\vc_config_winthreads.h\r
-\r
-"$(WkspDir)\..\src\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"\r
-       copy "$(InputPath)" "$(WkspDir)\..\src\config.h"\r
-\r
-# End Custom Build\r
-\r
-!ENDIF \r
-\r
-# End Source File\r
-# End Group\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\config.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\config.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\dftables.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\internal.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\maketables.c\r
-\r
-!IF  "$(CFG)" == "vc_dftables - Win32 Release"\r
-\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug"\r
-\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug with Win32 threads"\r
-\r
-# PROP BASE Exclude_From_Build 1\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Release with Win32 threads"\r
-\r
-# PROP BASE Exclude_From_Build 1\r
-# PROP Exclude_From_Build 1\r
-\r
-!ENDIF \r
-\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcre.h\r
-# End Source File\r
-# End Target\r
-# End Project\r
+# Microsoft Developer Studio Project File - Name="vc_dftables" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=vc_dftables - Win32 Debug with Win32 threads
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "vc_dftables.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "vc_dftables.mak"\
+ CFG="vc_dftables - Win32 Debug with Win32 threads"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "vc_dftables - Win32 Release" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "vc_dftables - Win32 Debug" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "vc_dftables - Win32 Debug with Win32 threads" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "vc_dftables - Win32 Release with Win32 threads" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "vc_dftables - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "vc_dftables"
+# PROP Intermediate_Dir "vc_dftables"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# Begin Special Build Tool
+OutDir=.\vc_dftables
+SOURCE=$(InputPath)
+PostBuild_Desc=Running program to generate chartables.c
+PostBuild_Cmds=$(OutDir)\vc_dftables.exe >$(OutDir)\..\chartables.c
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "vc_dftables_dbg"
+# PROP Intermediate_Dir "vc_dftables_dbg"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+OutDir=.\vc_dftables_dbg
+SOURCE=$(InputPath)
+PostBuild_Desc=Running program to generate chartables.c
+PostBuild_Cmds=$(OutDir)\vc_dftables.exe >$(OutDir)\..\chartables.c
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug with Win32 threads"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "vc_dftab"
+# PROP BASE Intermediate_Dir "vc_dftab"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "vc_dftables_dbg"
+# PROP Intermediate_Dir "vc_dftables_dbg"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+OutDir=.\vc_dftables_dbg
+SOURCE=$(InputPath)
+PostBuild_Desc=Running program to generate chartables.c
+PostBuild_Cmds=$(OutDir)\vc_dftables.exe >$(OutDir)\..\chartables.c
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Release with Win32 threads"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "vc_dfta0"
+# PROP BASE Intermediate_Dir "vc_dfta0"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "vc_dftables"
+# PROP Intermediate_Dir "vc_dftables"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# Begin Special Build Tool
+OutDir=.\vc_dftables
+SOURCE=$(InputPath)
+PostBuild_Desc=Running program to generate chartables.c
+PostBuild_Cmds=$(OutDir)\vc_dftables.exe >$(OutDir)\..\chartables.c
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "vc_dftables - Win32 Release"
+# Name "vc_dftables - Win32 Debug"
+# Name "vc_dftables - Win32 Debug with Win32 threads"
+# Name "vc_dftables - Win32 Release with Win32 threads"
+# Begin Group "File Copy"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\vc_config_pthreads.h
+
+!IF  "$(CFG)" == "vc_dftables - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Copying vc_config_pthreads.h
+WkspDir=.
+InputPath=..\vc_config_pthreads.h
+
+"$(WkspDir)\..\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+       copy "$(InputPath)" "$(WkspDir)\..\config.h"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Copying vc_config_pthreads.h
+WkspDir=.
+InputPath=..\vc_config_pthreads.h
+
+"$(WkspDir)\..\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+       copy "$(InputPath)" "$(WkspDir)\..\config.h"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug with Win32 threads"
+
+# PROP Exclude_From_Build 1
+# PROP Ignore_Default_Tool 1
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Release with Win32 threads"
+
+# PROP Exclude_From_Build 1
+# PROP Ignore_Default_Tool 1
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\vc_config_winthreads.h
+
+!IF  "$(CFG)" == "vc_dftables - Win32 Release"
+
+# PROP Exclude_From_Build 1
+# PROP Ignore_Default_Tool 1
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+# PROP Ignore_Default_Tool 1
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug with Win32 threads"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Copying vc_config_winthreads.h
+WkspDir=.
+InputPath=..\vc_config_winthreads.h
+
+"$(WkspDir)\..\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+       copy "$(InputPath)" "$(WkspDir)\..\config.h"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Release with Win32 threads"
+
+# PROP Ignore_Default_Tool 1
+# Begin Custom Build - Copying vc_config_winthreads.h
+WkspDir=.
+InputPath=..\vc_config_winthreads.h
+
+"$(WkspDir)\..\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+       copy "$(InputPath)" "$(WkspDir)\..\config.h"
+
+# End Custom Build
+
+!ENDIF 
+
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\dftables.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\internal.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\maketables.c
+
+!IF  "$(CFG)" == "vc_dftables - Win32 Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Debug with Win32 threads"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_dftables - Win32 Release with Win32 threads"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre.h
+# End Source File
+# End Target
+# End Project
similarity index 93%
rename from src/pcrs.c
rename to pcrs.c
index bb420a8..dd1674f 100644 (file)
+++ b/pcrs.c
@@ -1,8 +1,8 @@
-const char pcrs_rcs[] = "$Id: pcrs.c,v 2.4 2003/01/21 02:49:27 david__schmidt Exp $";
+const char pcrs_rcs[] = "$Id: pcrs.c,v 1.19.2.4 2005/05/07 21:50:55 david__schmidt Exp $";
 
 /*********************************************************************
  *
 
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/pcrs.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/pcrs.c,v $
  *
  * Purpose     :  pcrs is a supplement to the pcre library by Philip Hazel
  *                <ph10@cam.ac.uk> and adds Perl-style substitution. That
  *
  * Purpose     :  pcrs is a supplement to the pcre library by Philip Hazel
  *                <ph10@cam.ac.uk> and adds Perl-style substitution. That
@@ -33,27 +33,20 @@ const char pcrs_rcs[] = "$Id: pcrs.c,v 2.4 2003/01/21 02:49:27 david__schmidt Ex
  *
  * Revisions   :
  *    $Log: pcrs.c,v $
  *
  * Revisions   :
  *    $Log: pcrs.c,v $
- *    Revision 2.4  2003/01/21 02:49:27  david__schmidt
- *    Developer TODO 612294: src: C++ keyword as variable name
- *    I changed all ocurrences of 'new' to 'new_something' wherever I found
- *    one.  I also brought up all the source files in MSDEV to see if I could
- *    spot any highlighted keywords that really were variables.  Non-scientific,
- *    but at least I tried. :-)
+ *    Revision 1.19.2.4  2005/05/07 21:50:55  david__schmidt
+ *    A few memory leaks plugged (mostly on error paths)
  *
  *
- *    Revision 2.3  2002/10/08 16:25:30  oes
- *    Bugfix: Need to check validity of backreferences explicitly, because when max_matches are reached and matches is expanded, realloc() does not zero the memory. Fixes Bug # 606227
+ *    Revision 1.19.2.3  2003/12/04 12:32:45  oes
+ *    Append a trailing nullbyte to result to facilitate string processing
  *
  *
- *    Revision 2.2  2002/09/04 15:52:02  oes
- *    Synced with the stable branch:
- *        Revision 1.19.2.1  2002/08/10 11:23:40  oes
- *        Include prce.h via project.h, where the appropriate
- *        source will have been selected
+ *    Revision 1.19.2.2  2002/10/08 16:22:28  oes
+ *    Bugfix: Need to check validity of backreferences explicitly,
+ *    because when max_matches are reached and matches is expanded,
+ *    realloc() does not zero the memory. Fixes Bug # 606227
  *
  *
- *    Revision 2.1  2002/08/26 11:18:24  sarantis
- *    Fix typo.
- *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.19.2.1  2002/08/10 11:23:40  oes
+ *    Include prce.h via project.h, where the appropriate
+ *    source will have been selected
  *
  *    Revision 1.19  2002/03/08 14:47:48  oes
  *    Cosmetics
  *
  *    Revision 1.19  2002/03/08 14:47:48  oes
  *    Cosmetics
@@ -731,37 +724,41 @@ pcrs_job *pcrs_compile(const char *pattern, const char *substitute, const char *
  *                the joblist to the subject.
  *                The subject itself is left untouched, memory for the result
  *                is malloc()ed and it is the caller's responsibility to free
  *                the joblist to the subject.
  *                The subject itself is left untouched, memory for the result
  *                is malloc()ed and it is the caller's responsibility to free
- *                the result when it's no longer needed.
+ *                the result when it's no longer needed. 
+ *
+ *                Note: For convenient string handling, a null byte is
+ *                      appended to the result. It does not count towards the
+ *                      result_length, though.
+ *
  *
  * Parameters  :
  *          1  :  joblist = the chained list of pcrs_jobs to be executed
  *          2  :  subject = the subject string
  *          3  :  subject_length = the subject's length 
  *
  * Parameters  :
  *          1  :  joblist = the chained list of pcrs_jobs to be executed
  *          2  :  subject = the subject string
  *          3  :  subject_length = the subject's length 
- *                INCLUDING the terminating zero, if string!
  *          4  :  result = char** for returning  the result 
  *          5  :  result_length = size_t* for returning the result's length
  *
  * Returns     :  On success, the number of substitutions that were made.
  *                 May be > 1 if job->flags contained PCRS_GLOBAL
  *          4  :  result = char** for returning  the result 
  *          5  :  result_length = size_t* for returning the result's length
  *
  * Returns     :  On success, the number of substitutions that were made.
  *                 May be > 1 if job->flags contained PCRS_GLOBAL
- *                On failure, the (negative) pcre error code describing the
- *                 failure, which may be translated to text using pcrs_strerror().
+ *                On failiure, the (negative) pcre error code describing the
+ *                 failiure, which may be translated to text using pcrs_strerror().
  *
  *********************************************************************/
 int pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, char **result, size_t *result_length)
 {
    pcrs_job *job;
  *
  *********************************************************************/
 int pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, char **result, size_t *result_length)
 {
    pcrs_job *job;
-   char *old_item, *new_item;
+   char *old, *new = NULL;
    int hits, total_hits;
  
    int hits, total_hits;
  
-   old_item = subject;
+   old = subject;
    *result_length = subject_length;
    hits = total_hits = 0;
 
    for (job = joblist; job != NULL; job = job->next)
    {
    *result_length = subject_length;
    hits = total_hits = 0;
 
    for (job = joblist; job != NULL; job = job->next)
    {
-      hits = pcrs_execute(job, old_item, *result_length, &new_item, result_length);
+      hits = pcrs_execute(job, old, *result_length, &new, result_length);
 
 
-      if (old_item != subject) free(old_item);
+      if (old != subject) free(old);
 
       if (hits < 0)
       {
 
       if (hits < 0)
       {
@@ -770,11 +767,11 @@ int pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, c
       else
       {
          total_hits += hits;
       else
       {
          total_hits += hits;
-         old_item = new_item;
+         old = new;
       }
    }
 
       }
    }
 
-   *result = new_item;
+   *result = new;
    return(total_hits);
 
 }
    return(total_hits);
 
 }
@@ -790,18 +787,21 @@ int pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, c
  *                is malloc()ed and it is the caller's responsibility to free
  *                the result when it's no longer needed.
  *
  *                is malloc()ed and it is the caller's responsibility to free
  *                the result when it's no longer needed.
  *
+ *                Note: For convenient string handling, a null byte is
+ *                      appended to the result. It does not count towards the
+ *                      result_length, though.
+ *
  * Parameters  :
  *          1  :  job = the pcrs_job to be executed
  *          2  :  subject = the subject (== original) string
  *          3  :  subject_length = the subject's length 
  * Parameters  :
  *          1  :  job = the pcrs_job to be executed
  *          2  :  subject = the subject (== original) string
  *          3  :  subject_length = the subject's length 
- *                INCLUDING the terminating zero, if string!
  *          4  :  result = char** for returning  the result 
  *          5  :  result_length = size_t* for returning the result's length
  *
  * Returns     :  On success, the number of substitutions that were made.
  *                 May be > 1 if job->flags contained PCRS_GLOBAL
  *          4  :  result = char** for returning  the result 
  *          5  :  result_length = size_t* for returning the result's length
  *
  * Returns     :  On success, the number of substitutions that were made.
  *                 May be > 1 if job->flags contained PCRS_GLOBAL
- *                On failure, the (negative) pcre error code describing the
- *                 failure, which may be translated to text using pcrs_strerror().
+ *                On failiure, the (negative) pcre error code describing the
+ *                 failiure, which may be translated to text using pcrs_strerror().
  *
  *********************************************************************/
 int pcrs_execute(pcrs_job *job, char *subject, size_t subject_length, char **result, size_t *result_length)
  *
  *********************************************************************/
 int pcrs_execute(pcrs_job *job, char *subject, size_t subject_length, char **result, size_t *result_length)
@@ -854,7 +854,7 @@ int pcrs_execute(pcrs_job *job, char *subject, size_t subject_length, char **res
          matches[i].submatch_length[k] = offsets[2 * k + 1] - offsets[2 * k]; 
 
          /* reserve mem for each submatch as often as it is ref'd */
          matches[i].submatch_length[k] = offsets[2 * k + 1] - offsets[2 * k]; 
 
          /* reserve mem for each submatch as often as it is ref'd */
-         newsize += matches[i].submatch_length[k] * job->substitute->backref_count[k]; 
+         newsize += matches[i].submatch_length[k] * job->substitute->backref_count[k];
       }
       /* plus replacement text size minus match text size */
       newsize += strlen(job->substitute->text) - matches[i].submatch_length[0]; 
       }
       /* plus replacement text size minus match text size */
       newsize += strlen(job->substitute->text) - matches[i].submatch_length[0]; 
@@ -895,7 +895,7 @@ int pcrs_execute(pcrs_job *job, char *subject, size_t subject_length, char **res
       else
          offset = offsets[1];
    }
       else
          offset = offsets[1];
    }
-   /* Pass pcre error through if (bad) failure */
+   /* Pass pcre error through if (bad) failiure */
    if (submatches < PCRE_ERROR_NOMATCH)
    {
       free(matches);
    if (submatches < PCRE_ERROR_NOMATCH)
    {
       free(matches);
@@ -905,13 +905,18 @@ int pcrs_execute(pcrs_job *job, char *subject, size_t subject_length, char **res
 
 
    /* 
 
 
    /* 
-    * Get memory for the result
+    * Get memory for the result (must be freed by caller!)
+    * and append terminating null byte.
     */
     */
-   if ((*result = (char *)malloc(newsize)) == NULL)   /* must be free()d by caller */
+   if ((*result = (char *)malloc(newsize + 1)) == NULL)
    {
       free(matches);
       return PCRS_ERR_NOMEM;
    }
    {
       free(matches);
       return PCRS_ERR_NOMEM;
    }
+   else
+   {
+      (*result)[newsize] = '\0';
+   }
 
 
    /* 
 
 
    /* 
@@ -937,7 +942,7 @@ int pcrs_execute(pcrs_job *job, char *subject, size_t subject_length, char **res
          if (k != job->substitute->backrefs
              /* ..in legal range.. */
              && job->substitute->backref[k] < PCRS_MAX_SUBMATCHES + 2
          if (k != job->substitute->backrefs
              /* ..in legal range.. */
              && job->substitute->backref[k] < PCRS_MAX_SUBMATCHES + 2
-              /* ..and referencing a real submatch.. */
+             /* ..and referencing a real submatch.. */
              && job->substitute->backref[k] < matches[i].submatches
              /* ..that is nonempty.. */
              && matches[i].submatch_length[job->substitute->backref[k]] > 0)
              && job->substitute->backref[k] < matches[i].submatches
              /* ..that is nonempty.. */
              && matches[i].submatch_length[job->substitute->backref[k]] > 0)
similarity index 98%
rename from src/pcrs.h
rename to pcrs.h
index b756067..6d97f9c 100644 (file)
+++ b/pcrs.h
@@ -3,7 +3,7 @@
 
 /*********************************************************************
  *
 
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/pcrs.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/pcrs.h,v $
  *
  * Purpose     :  Header file for pcrs.c
  *
  *
  * Purpose     :  Header file for pcrs.c
  *
index d13e1d7..5189e8f 100755 (executable)
 # 
 #  Revisions   :
 #     $Log: privoxy-generic.init,v $
 # 
 #  Revisions   :
 #     $Log: privoxy-generic.init,v $
+#     Revision 1.5.2.1  2002/10/17 17:04:22  hal9
+#     Add from main trunk. Will be needed for make install.
+#
+#     Revision 1.5  2002/10/17 17:01:29  hal9
+#     Set paths to match the defaults for a root install. Force remove PIDFILE on
+#     stop.
+#
 #     Revision 1.4  2002/09/11 01:15:02  hal9
 #     Fix typo in variable. Now tested on Solaris and Linux, with defaults.
 #
 #     Revision 1.4  2002/09/11 01:15:02  hal9
 #     Fix typo in variable. Now tested on Solaris and Linux, with defaults.
 #
index ed02875..8ce7467 100644 (file)
@@ -1,6 +1,6 @@
-# $Id: privoxy-rh.spec,v 1.43 2002/07/05 17:15:56 morcego Exp $
+# $Id: privoxy-rh.spec,v 1.33.2.22 2004/01/30 17:09:29 oes Exp $
 #
 #
-# Written by and Copyright (C) 2001, 2002 the SourceForge
+# Written by and Copyright (C) 2001 the SourceForge
 # Privoxy team. http://www.privoxy.org/
 #
 # Based on the Internet Junkbuster originally written
 # Privoxy team. http://www.privoxy.org/
 #
 # Based on the Internet Junkbuster originally written
@@ -37,7 +37,7 @@ Name: privoxy
 # ATTENTION
 # Version and release should be updated acordingly on configure.in and
 # configure. Otherwise, the package can be build with the wrong value
 # ATTENTION
 # Version and release should be updated acordingly on configure.in and
 # configure. Otherwise, the package can be build with the wrong value
-Version: 3.1.1
+Version: 3.0.3
 Release: 1
 Summary: Privoxy - privacy enhancing proxy
 License: GPL
 Release: 1
 Summary: Privoxy - privacy enhancing proxy
 License: GPL
@@ -68,8 +68,8 @@ Privoxy is based on the Internet Junkbuster.
 
 # We check to see if versions match
 VERSION_MAJOR=3
 
 # We check to see if versions match
 VERSION_MAJOR=3
-VERSION_MINOR=1
-VERSION_POINT=1
+VERSION_MINOR=0
+VERSION_POINT=0
 
 CONFIG_VERSION=`cat configure.in | sed -n -e 's/^VERSION_MAJOR=\([0-9]*\)/\1./p' -e 's/^VERSION_MINOR=\([0-9]*\)/\1./p' -e 's/^VERSION_POINT=\([0-9]*\)/\1/p' | awk '{printf $1}'`
 if [ "%{version}" != "${CONFIG_VERSION}" ]; then
 
 CONFIG_VERSION=`cat configure.in | sed -n -e 's/^VERSION_MAJOR=\([0-9]*\)/\1./p' -e 's/^VERSION_MINOR=\([0-9]*\)/\1./p' -e 's/^VERSION_POINT=\([0-9]*\)/\1/p' | awk '{printf $1}'`
 if [ "%{version}" != "${CONFIG_VERSION}" ]; then
@@ -316,10 +316,24 @@ fi
 
 %{_mandir}/man1/%{name}.*
 
 
 %{_mandir}/man1/%{name}.*
 
-
 %changelog
 %changelog
-* Thu Sep 05 2002 Hal Burgiss <hal@foobox.net>
-- Import changes from 3.0.0 to main trunk.
+* Wed Mar 26 2003 Andreas Oesterhelt <andreas@oesterhelt.org>
+- Bump version for 3.0.2.
+
+* Wed Mar 19 2003 Hal Burgiss <hal@foobox.net>
+- Bump version for 3.0.1.
+
+* Tue Aug 25 2002 Hal Burgiss <hal@foobox.net>
+- Bump version for 3.0.0 :)
+
+* Tue Aug 06 2002 Hal Burgiss <hal@foobox.net>
+- Reset version for 2.9.20.
+
+* Tue Jul 30 2002 Hal Burgiss <hal@foobox.net>
+- Reset version for 2.9.18.
+
+* Sat Jul 27 2002 Hal Burgiss <hal@foobox.net>
+- Reset version and release for 2.9.16.
 
 * Fri Jul 12 2002 Karsten Hopp <karsten@redhat.de>
 - don't use ghost files for rcX.d/*, using chkconfig is the 
 
 * Fri Jul 12 2002 Karsten Hopp <karsten@redhat.de>
 - don't use ghost files for rcX.d/*, using chkconfig is the 
@@ -327,7 +341,7 @@ fi
 
 * Fri Jul 05 2002 Rodrigo Barbosa <rodrigob@tisbrasil.com.br>
 + privoxy-2.9.15-8
 
 * Fri Jul 05 2002 Rodrigo Barbosa <rodrigob@tisbrasil.com.br>
 + privoxy-2.9.15-8
-- Changing delete order for groups and users (users should be first) 
+- Changing delete order for groups and users (users should be first)
 
 * Wed Jul 03 2002 Rodrigo Barbosa <rodrigob@tisbrasil.com.br>
 + privoxy-2.9.15-7
 
 * Wed Jul 03 2002 Rodrigo Barbosa <rodrigob@tisbrasil.com.br>
 + privoxy-2.9.15-7
@@ -341,6 +355,11 @@ fi
 
 * Tue Jul 02 2002 Rodrigo Barbosa <rodrigob@tisbrasil.com.br>
 + privoxy-2.9.15-5
 
 * Tue Jul 02 2002 Rodrigo Barbosa <rodrigob@tisbrasil.com.br>
 + privoxy-2.9.15-5
+- Bumping Release number (which should be changed every time the specfile
+  is)
+
+* Tue Jul 02 2002 Hal Burgiss <hal@foobox.net>
++ privoxy-2.9.15-4
 - Fix typo in templates creation.
 
 * Wed Jun 26 2002 Rodrigo Barbosa <rodrigob@tisbrasil.com.br>
 - Fix typo in templates creation.
 
 * Wed Jun 26 2002 Rodrigo Barbosa <rodrigob@tisbrasil.com.br>
@@ -715,6 +734,15 @@ fi
        additional "-r @" flag.
 
 # $Log: privoxy-rh.spec,v $
        additional "-r @" flag.
 
 # $Log: privoxy-rh.spec,v $
+# Revision 1.33.2.22  2004/01/30 17:09:29  oes
+# Bumped version for 3.0.3
+#
+# Revision 1.33.2.21  2003/03/26 00:25:00  oes
+# Bump version for 3.0.2
+#
+# Revision 1.33.2.20  2003/03/20 03:27:11  hal9
+# Bump version for 3.0.1 pending release.
+#
 # Revision 1.33.2.19  2002/08/25 23:36:03  hal9
 # Bump version for 3.0.0.
 #
 # Revision 1.33.2.19  2002/08/25 23:36:03  hal9
 # Bump version for 3.0.0.
 #
@@ -745,25 +773,25 @@ fi
 # Revision 1.33.2.10  2002/07/12 09:14:26  kick_
 # don't use ghost files for rcX.d/*, chkconfig is available to do this job. Enable translation of error messge
 #
 # Revision 1.33.2.10  2002/07/12 09:14:26  kick_
 # don't use ghost files for rcX.d/*, chkconfig is available to do this job. Enable translation of error messge
 #
-# Revision 1.43  2002/07/05 17:15:56  morcego
+# Revision 1.33.2.9  2002/07/05 17:16:19  morcego
 # - Changing delete order for groups and users (users should be first)
 #
 # - Changing delete order for groups and users (users should be first)
 #
-# Revision 1.42  2002/07/03 20:46:38  morcego
+# Revision 1.33.2.8  2002/07/03 20:46:24  morcego
 # - Changing sed expression that removed CR from the end of the lines. This
 #   new one removes any control caracter, and should work with older versions
 #   of sed
 #
 # - Changing sed expression that removed CR from the end of the lines. This
 #   new one removes any control caracter, and should work with older versions
 #   of sed
 #
-# Revision 1.41  2002/07/02 18:16:28  morcego
+# Revision 1.33.2.7  2002/07/02 18:16:48  morcego
 # - Fixing defattr values. File and directory modes where swapped
 #
 # - Fixing defattr values. File and directory modes where swapped
 #
-# Revision 1.40  2002/07/02 17:37:24  morcego
-# Fix typo in templates creation.
+# Revision 1.33.2.6  2002/07/02 17:38:10  morcego
+# Bumping Release number
 #
 #
-# Revision 1.39  2002/06/26 17:32:04  morcego
-# Fixing issues created by sync between the branches
+# Revision 1.33.2.5  2002/07/02 11:43:20  hal9
+# Fix typo in templates creation.
 #
 #
-# Revision 1.38  2002/06/24 21:44:44  hal9
-# Sync with Karsten's update in 3.0 branch. See changelog.
+# Revision 1.33.2.4  2002/06/26 17:32:45  morcego
+# Integrating fixed from the main branch.
 #
 # Revision 1.33.2.3  2002/06/24 12:13:34  kick_
 # shut up rpmlint. btw: The vendor tag should be set in you .rpmmacros file, not in the spec file!
 #
 # Revision 1.33.2.3  2002/06/24 12:13:34  kick_
 # shut up rpmlint. btw: The vendor tag should be set in you .rpmmacros file, not in the spec file!
index fd8a69e..3b6fca1 100644 (file)
@@ -1,6 +1,6 @@
-# $Id: privoxy-suse.spec,v 1.22 2002/09/03 23:42:21 hal9 Exp $
+# $Id: privoxy-suse.spec,v 1.20.2.10 2004/01/30 17:09:29 oes Exp $
 #
 #
-# Written by and Copyright (C) 2001,2002 the SourceForge
+# Written by and Copyright (C) 2001 the SourceForge
 # Privoxy team. http://www.privoxy.org/
 #
 # Based on the Internet Junkbuster originally written
 # Privoxy team. http://www.privoxy.org/
 #
 # Based on the Internet Junkbuster originally written
@@ -36,7 +36,7 @@ Summary:      Privoxy - privacy enhancing proxy
 Vendor:       Privoxy.Org
 Name:         privoxy-suse
 Distribution: defineme
 Vendor:       Privoxy.Org
 Name:         privoxy-suse
 Distribution: defineme
-Version: 3.0.0
+Version: 3.0.3
 Release: 1
 # Needs makefile change: Source: http://prdownloads.sourceforge.net/ijbswa/privoxy-%{version}-%{status}-src.tar.gz
 Source: http://prdownloads.sourceforge.net/ijbswa/privoxy-%{version}.tar.gz
 Release: 1
 # Needs makefile change: Source: http://prdownloads.sourceforge.net/ijbswa/privoxy-%{version}-%{status}-src.tar.gz
 Source: http://prdownloads.sourceforge.net/ijbswa/privoxy-%{version}.tar.gz
@@ -55,13 +55,13 @@ Conflicts: junkbuster-raw junkbuster-blank junkbuster-suse junkbuster privoxy
 #
 %description
 Privoxy is a web proxy with advanced filtering capabilities for
 #
 %description
 Privoxy is a web proxy with advanced filtering capabilities for
-protecting privacy, filtering web page content, managing cookies,
+protecting privacy, modifying web page content, managing cookies,
 controlling access, and removing ads, banners, pop-ups and other
 obnoxious Internet junk. Privoxy has a very flexible configuration and
 can be customized to suit individual needs and tastes. Privoxy has 
 application for both stand-alone systems and multi-user networks.
 
 controlling access, and removing ads, banners, pop-ups and other
 obnoxious Internet junk. Privoxy has a very flexible configuration and
 can be customized to suit individual needs and tastes. Privoxy has 
 application for both stand-alone systems and multi-user networks.
 
-Privoxy is based on the  Internet Junkbuster.
+Privoxy is based on the Internet Junkbuster.
 
 Authors:
 --------
 
 Authors:
 --------
@@ -198,60 +198,13 @@ id privoxy > /dev/null 2>&1 && /usr/sbin/userdel privoxy || /bin/true
 %doc doc/webserver/user-manual
 %doc doc/webserver/faq
 %doc doc/webserver/p_doc.css
 %doc doc/webserver/user-manual
 %doc doc/webserver/faq
 %doc doc/webserver/p_doc.css
-%doc doc/webserver/p_web.css
 %doc doc/webserver/privoxy-index.html
 %doc doc/webserver/images
 %doc doc/webserver/privoxy-index.html
 %doc doc/webserver/images
-#%doc privoxy.weekly privoxy.monthly AUTHORS
+%doc doc/webserver/man-page
+
 %dir %{privoxyconf}
 %dir %{privoxyconf}
-#%config %{privoxyconf}/*
-# WARNING ! WARNING ! WARNING ! WARNING ! WARNING ! WARNING ! WARNING !
-# We should not use wildchars here. This could mask missing files problems
-# -- morcego
-# WARNING ! WARNING ! WARNING ! WARNING ! WARNING ! WARNING ! WARNING !
-%config(noreplace) %{privoxyconf}/config
-%config %{privoxyconf}/standard.action
-%config(noreplace) %{privoxyconf}/user.action
-%config %{privoxyconf}/default.action
-%config %{privoxyconf}/default.filter
-%config %{privoxyconf}/trust
-
-# Please keep these alphabetized so its easier to find one that 
-# is not included.
-%config %{privoxyconf}/templates/blocked
-%config %{privoxyconf}/templates/cgi-error-404
-%config %{privoxyconf}/templates/cgi-error-bad-param
-%config %{privoxyconf}/templates/cgi-error-disabled
-%config %{privoxyconf}/templates/cgi-error-file
-%config %{privoxyconf}/templates/cgi-error-file-read-only
-%config %{privoxyconf}/templates/cgi-error-modified
-%config %{privoxyconf}/templates/cgi-error-parse
-%config %{privoxyconf}/templates/cgi-style.css
-%config %{privoxyconf}/templates/connect-failed
-%config %{privoxyconf}/templates/default
-%config %{privoxyconf}/templates/edit-actions-add-url-form
-%config %{privoxyconf}/templates/edit-actions-for-url
-%config %{privoxyconf}/templates/edit-actions-for-url-filter
-%config %{privoxyconf}/templates/edit-actions-list
-%config %{privoxyconf}/templates/edit-actions-list-button
-%config %{privoxyconf}/templates/edit-actions-list-section
-%config %{privoxyconf}/templates/edit-actions-list-url
-%config %{privoxyconf}/templates/edit-actions-remove-url-form
-%config %{privoxyconf}/templates/edit-actions-url-form
-%config %{privoxyconf}/templates/mod-local-help
-%config %{privoxyconf}/templates/mod-support-and-service
-%config %{privoxyconf}/templates/mod-title
-%config %{privoxyconf}/templates/mod-unstable-warning
-%config %{privoxyconf}/templates/no-such-domain
-%config %{privoxyconf}/templates/show-request
-%config %{privoxyconf}/templates/show-status
-%config %{privoxyconf}/templates/show-status-file
-%config %{privoxyconf}/templates/show-url-info
-%config %{privoxyconf}/templates/show-version
-%config %{privoxyconf}/templates/toggle
-%config %{privoxyconf}/templates/toggle-mini
-%config %{privoxyconf}/templates/untrusted
-
-%attr(0744,privoxy,privoxy) %dir /var/log/privoxy
+%config %{privoxyconf}/*
+%attr(0740,privoxy,privoxy) %dir /var/log/privoxy
 %config %{_sysconfdir}/logrotate.d/privoxy
 %attr(0755,root,root)/usr/sbin/privoxy
 %{_mandir}/man8/*
 %config %{_sysconfdir}/logrotate.d/privoxy
 %attr(0755,root,root)/usr/sbin/privoxy
 %{_mandir}/man8/*
@@ -262,17 +215,35 @@ id privoxy > /dev/null 2>&1 && /usr/sbin/userdel privoxy || /bin/true
 # -----------------------------------------------------------------------------
 #
 %changelog
 # -----------------------------------------------------------------------------
 #
 %changelog
-* Thu Sep 05 2002 Hal Burgiss <hal@foobox.net>
-- Sync changes with 3.0 branch.
+* Wed Mar 26 2003 Andreas Oesterhelt <andreas@oesterhelt.org>
+- Bump version for 3.0.2.
+
+* Wed Mar 19 2003 Hal Burgiss <hal@foobox.net>
+- Bump version for 3.0.1.
+
+* Tue Aug 25 2002 Hal Burgiss <hal@foobox.net>
+- Bump version for 3.0.0 :) 
+
+* Tue Aug 06 2002 Hal Burgiss <hal@foobox.net>
+- Reset version for 2.9.18. 
+
+* Wed Jul 30 2002 Hal Burgiss <hal@foobox.net>
+- Reset version for 2.9.17.
 
 
-* Tue Sep 03 2002 Hal Burgiss <hal@foobox.net>
-+ privoxy-3.1.1-1
-- Explicitly list %%config files, and set noreplace flag for config and 
-user.action. Note: no way I can test this change! Bump version while here.
+* Sat Jul 27 2002 Hal Burgiss <hal@foobox.net>
+- Reset version and release for 2.9.16.
 
 * Mon May 27 2002 Hal Burgiss <hal@foobox.net>
 + privoxy-2.9.15-1
 
 * Mon May 27 2002 Hal Burgiss <hal@foobox.net>
 + privoxy-2.9.15-1
-- Index.html is now privoxy-index.html.
+- Index.html is now privoxy-index.html for doc usage.
+
+* Mon May 27 2002 Hal Burgiss <hal@foobox.net>
++ privoxy-2.9.15-1
+- Index.html is now privoxy-index.html for doc usage.
+
+* Sat May 25 2002 Hal Burgiss <hal@foobox.net>
++ privoxy-2.9.15-1
+- Add html man page so index.html does not 404.
 
 * Fri May 24 2002 Hal Burgiss <hal@foobox.net>
 + privoxy-2.9.15-1
 
 * Fri May 24 2002 Hal Burgiss <hal@foobox.net>
 + privoxy-2.9.15-1
@@ -378,13 +349,35 @@ user.action. Note: no way I can test this change! Bump version while here.
 - new package: version 2.0
 
 # $Log: privoxy-suse.spec,v $
 - new package: version 2.0
 
 # $Log: privoxy-suse.spec,v $
-# Revision 1.22  2002/09/03 23:42:21  hal9
-# Explicitly list all %config files, like RH spec. Set noreplace flag for config
-# and user.action (only). Bump version. Note: I have no way to test this change,
-# but am aiming for consistency among spec files.
+# Revision 1.20.2.10  2004/01/30 17:09:29  oes
+# Bumped version for 3.0.3
+#
+# Revision 1.20.2.9  2003/03/26 00:24:58  oes
+# Bump version for 3.0.2
+#
+# Revision 1.20.2.8  2003/03/20 03:27:11  hal9
+# Bump version for 3.0.1 pending release.
+#
+# Revision 1.20.2.7  2002/08/25 23:36:03  hal9
+# Bump version for 3.0.0.
+#
+# Revision 1.20.2.6  2002/08/10 11:28:50  oes
+# Bumped version
+#
+# Revision 1.20.2.5  2002/08/07 01:08:49  hal9
+# Bumped version to 2.9.18.
+#
+# Revision 1.20.2.4  2002/07/30 21:51:19  hal9
+# Bump version to 2.9.17.
+#
+# Revision 1.20.2.3  2002/07/27 15:47:10  hal9
+# Reset version and release for 2.9.16.
+#
+# Revision 1.20.2.2  2002/05/28 02:39:38  hal9
+# Replace index.html with privoxy-index.html for docs.
 #
 #
-# Revision 1.21  2002/05/28 03:56:59  hal9
-# Index.html re-vamped as privoxy-index.html for docs.
+# Revision 1.20.2.1  2002/05/26 17:20:23  hal9
+# Add images to doc dirs.
 #
 # Revision 1.20  2002/05/25 02:08:23  hal9
 # Add doc/images directory.
 #
 # Revision 1.20  2002/05/25 02:08:23  hal9
 # Add doc/images directory.
index 5690eee..982dd19 100644 (file)
--- a/privoxy.1
+++ b/privoxy.1
@@ -3,12 +3,12 @@
 .\" <http://shell.ipoline.com/~elmert/comp/docbook2X/> 
 .\" Please send any bug reports, improvements, comments, patches, 
 .\" etc. to Steve Cheng <steve@ggi-project.org>.
 .\" <http://shell.ipoline.com/~elmert/comp/docbook2X/> 
 .\" Please send any bug reports, improvements, comments, patches, 
 .\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "PRIVOXY" "1" "05 September 2002" "Privoxy 3.1.1 alpha" ""
+.TH "PRIVOXY" "1" "31 Januar 2004" "Privoxy 3.0.3" ""
 .SH NAME
 privoxy \- Privacy Enhancing Proxy
 .SH SYNOPSIS
 
 .SH NAME
 privoxy \- Privacy Enhancing Proxy
 .SH SYNOPSIS
 
-\fBprivoxy\fR [\fB--help\fR ] [\fB--version\fR ] [\fB--no-daemon\fR ] [\fB--pidfile \fIpidfile\fB\fR ] [\fB--user \fIuser[.group]\fB\fR ] [\fB\fIconfigfile\fB\fR ]\fB (UNIX)\fR
+\fBprivoxy\fR [\fB--help\fR ] [\fB--version\fR ] [\fB--no-daemon\fR ] [\fB--pidfile \fIpidfile\fB\fR ] [\fB--user \fIuser[.group]\fB\fR ] [\fB--chroot\fR ] [\fB\fIconfigfile\fB\fR ]\fB (UNIX)\fR
 
 
 \fBprivoxy.exe\fR [\fB\fIconfigfile\fB\fR ]\fB (Windows)\fR
 
 
 \fBprivoxy.exe\fR [\fB\fIconfigfile\fB\fR ]\fB (Windows)\fR
@@ -41,6 +41,14 @@ After (optionally) writing the PID file, assume the user ID of
 \fIgroup\fR was not given, the default group of
 \fIuser\fR. Exit if the privileges are not
 sufficient to do so.
 \fIgroup\fR was not given, the default group of
 \fIuser\fR. Exit if the privileges are not
 sufficient to do so.
+.TP
+\fB--chroot\fR
+Before changing to the user ID given in the --user option, chroot to
+that user's home directory, i.e. make the kernel pretend to the
+\fBPrivoxy\fR process that the directory tree starts
+there. If set up carefully, this can limit the impact of possible
+vulnerabilities in \fBPrivoxy\fR to the files contained in
+that hierarchy. 
 .PP
 If the \fIconfigfile\fR is not specified on  the  command  line,
 \fBPrivoxy\fR  will  look for a file named
 .PP
 If the \fIconfigfile\fR is not specified on  the  command  line,
 \fBPrivoxy\fR  will  look for a file named
@@ -51,7 +59,7 @@ fail to start.
 .SH "DESCRIPTION"
 .PP
 \fBPrivoxy\fR is a web proxy with advanced filtering
 .SH "DESCRIPTION"
 .PP
 \fBPrivoxy\fR is a web proxy with advanced filtering
-capabilities for protecting privacy, filtering web page content, managing
+capabilities for protecting privacy, modifying web page content, managing
 cookies, controlling access, and removing ads, banners, pop-ups and other
 obnoxious Internet junk. \fBPrivoxy\fR has a very
 flexible configuration and can be customized to suit individual needs and
 cookies, controlling access, and removing ads, banners, pop-ups and other
 obnoxious Internet junk. \fBPrivoxy\fR has a very
 flexible configuration and can be customized to suit individual needs and
@@ -93,8 +101,7 @@ these files are in the same directory as the \fBPrivoxy\fR
 executable.
 .PP
 The name and number of configuration files has changed from previous
 executable.
 .PP
 The name and number of configuration files has changed from previous
-versions, and is subject to change as development
-progresses. In fact, the configuration itself is changed  and  much more
+versions. In fact, the configuration itself is changed  and  much more
 sophisticated. See the user-manual for a complete
 explanation of all configuration options and general usage, and notes for 
 upgrading from \fBJunkbuster\fR and earlier \fBPrivoxy\fR
 sophisticated. See the user-manual for a complete
 explanation of all configuration options and general usage, and notes for 
 upgrading from \fBJunkbuster\fR and earlier \fBPrivoxy\fR
@@ -228,9 +235,6 @@ config file changes by \fBSIGHUP\fR -- it will detect them
 automatically. 
 .SH "NOTES"
 .PP
 automatically. 
 .SH "NOTES"
 .PP
-This is a alpha version of \fBPrivoxy\fR. Not 
-all features are well tested.
-.PP
 Please see the \fIUser Manual\fR on how to contact the
 developers for feature requests, reporting problems, and other questions.
 .SH "SEE ALSO"
 Please see the \fIUser Manual\fR on how to contact the
 developers for feature requests, reporting problems, and other questions.
 .SH "SEE ALSO"
@@ -279,29 +283,36 @@ the \fBPrivoxy\fR developer manual.
 .SH "DEVELOPMENT TEAM"
 
 .nf
 .SH "DEVELOPMENT TEAM"
 
 .nf
- Jon Foster
+ Hal Burgiss (docs)
  Andreas Oesterhelt
  Andreas Oesterhelt
- Stefan Waldherr
- Thomas Steudten
- Rodney Stromlund
+ David Schmidt (OS/2, Mac OSX ports)
+
+ Johny Agotnes 
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
  Rodrigo Barbosa (RPM specfiles)
  Moritz Barsnick
- Hal Burgiss (docs)
+ Brian Dessent
+ Mattes Dolak 
+ Jon Foster
  Karsten Hopp (Red Hat)
  Alexander Lazic
  Karsten Hopp (Red Hat)
  Alexander Lazic
+ Daniel Leite
  Gábor Lipták
  Gábor Lipták
- Guy
+ Adam Lock (Win32)
+ Guy Laroche
  Haroon Rafique
  Roland Rosenfeld (Debian)
  Georg Sauthoff (Gentoo)
  Haroon Rafique
  Roland Rosenfeld (Debian)
  Georg Sauthoff (Gentoo)
- David Schmidt (OS/2, Mac OSX ports)
+ Thomas Steudten
  Joerg Strohmayer (Amiga)
  Joerg Strohmayer (Amiga)
+ Rodney Stromlund
+ Sviatoslav Sviridov
  Sarantis Paskalis
  Sarantis Paskalis
+ Stefan Waldherr
 .fi
 .SH "COPYRIGHT AND LICENSE"
 .SS "COPYRIGHT"
 .PP
 .fi
 .SH "COPYRIGHT AND LICENSE"
 .SS "COPYRIGHT"
 .PP
-Copyright (C) 2001, 2002 by Privoxy Developers <developers@privoxy.org>
+Copyright (C) 2001 - 2004 by Privoxy Developers <developers@privoxy.org>
 .PP
 Some source code is based on code Copyright (C) 1997 by Anonymous Coders
 and Junkbusters, Inc. and licensed under the \fIGNU General Public
 .PP
 Some source code is based on code Copyright (C) 1997 by Anonymous Coders
 and Junkbusters, Inc. and licensed under the \fIGNU General Public
index aa0577b..3c6bb6b 100644 (file)
@@ -5,8 +5,9 @@
 #
 # chkconfig: 2345 84 09
 #
 #
 # chkconfig: 2345 84 09
 #
-# description: This shell script takes care of starting and stopping \
-#              privoxy.
+# description: Web proxy with advanced filtering capabilities \
+#              such as filtering web page content, managing \
+#              cookies and removing ads
 #
 
 #  ********************************************************************
 #
 
 #  ********************************************************************
@@ -14,9 +15,9 @@
 #  File        :  $Source: /cvsroot/ijbswa/current/privoxy.init,v $
 # 
 #  Purpose     :  This shell script takes care of starting and stopping
 #  File        :  $Source: /cvsroot/ijbswa/current/privoxy.init,v $
 # 
 #  Purpose     :  This shell script takes care of starting and stopping
-#                 privoxy on Red Hat and RH compatible systems.
+#                 privoxy.
 # 
 # 
-#  Copyright   :  Written by and Copyright (C) 2001,2002 the SourceForge
+#  Copyright   :  Written by and Copyright (C) 2001 the SourceForge
 #                 Privoxy team. http://www.privoxy.org/
 # 
 #                 Based on the Internet Junkbuster originally written
 #                 Privoxy team. http://www.privoxy.org/
 # 
 #                 Based on the Internet Junkbuster originally written
 # 
 #  Revisions   :
 #     $Log: privoxy.init,v $
 # 
 #  Revisions   :
 #     $Log: privoxy.init,v $
-#     Revision 1.9  2002/09/05 15:38:30  oes
-#     Synced with the stable branch:
-#        Revision 1.8.2.2  2002/08/05 08:42:13  kick_
-#        same permissions, same runlevels as all the other initscripts
+#     Revision 1.8.2.3  2002/12/10 20:52:16  kick_
+#     better service description. This text will be shown when the user configures the services
 #
 #
-#        Revision 1.8.2.1  2002/07/12 09:14:26  kick_
-#        don't use ghost files for rcX.d/*, chkconfig is available to do this job. Enable translation of error messge
+#     Revision 1.8.2.2  2002/08/05 08:42:13  kick_
+#     same permissions, same runlevels as all the other initscripts
+#
+#     Revision 1.8.2.1  2002/07/12 09:14:26  kick_
+#     don't use ghost files for rcX.d/*, chkconfig is available to do this job. Enable translation of error messge
 #
 #     Revision 1.8  2002/04/09 02:51:31  hal9
 #     Changed $JB to $PRIVOXY.
 #
 #     Revision 1.8  2002/04/09 02:51:31  hal9
 #     Changed $JB to $PRIVOXY.
index 7bab6de..59a2099 100644 (file)
 # 
 #  Revisions   :
 #     $Log: privoxy.init.suse,v $
 # 
 #  Revisions   :
 #     $Log: privoxy.init.suse,v $
+#     Revision 1.3.2.1  2003/03/17 14:04:16  oes
+#     No longer use obsolete rc.config
+#
+#     Revision 1.3  2002/03/26 22:29:55  swa
+#     we have a new homepage!
+#
 #     Revision 1.2  2002/03/24 11:40:14  swa
 #     name change
 #
 #     Revision 1.2  2002/03/24 11:40:14  swa
 #     name change
 #
@@ -72,7 +78,7 @@
 # Description:    Starts Privoxy
 ### END INIT INFO
 
 # Description:    Starts Privoxy
 ### END INIT INFO
 
-. /etc/rc.config
+. /etc/rc.status
 rc_reset  
 
 case "$1" in
 rc_reset  
 
 case "$1" in
index 1d43f14..15dfc9d 100644 (file)
@@ -3,7 +3,7 @@
 #
 # ********************************************************************
 # 
 #
 # ********************************************************************
 # 
-#  File        :  $Source: /cvsroot/ijbswa//current/privoxy.logrotate,v $
+#  File        :  $Source: /cvsroot/ijbswa/current/privoxy.logrotate,v $
 # 
 #  Purpose     :  Rotates all potential Privoxy logfiles
 #                 
 # 
 #  Purpose     :  Rotates all potential Privoxy logfiles
 #                 
@@ -35,6 +35,9 @@
 # 
 #  Revisions   :
 #     $Log: privoxy.logrotate,v $
 # 
 #  Revisions   :
 #     $Log: privoxy.logrotate,v $
+#     Revision 1.4.2.1  2002/06/25 17:33:07  kick_
+#     Avoid error messages if privoxy hasn't run at all and there is no logfile yet by adding missingok to the logrotate script
+#
 #     Revision 1.4  2002/03/26 22:29:55  swa
 #     we have a new homepage!
 #
 #     Revision 1.4  2002/03/26 22:29:55  swa
 #     we have a new homepage!
 #
diff --git a/privoxy.monthly b/privoxy.monthly
deleted file mode 100644 (file)
index 15734dd..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/sh
-
-# ********************************************************************
-# 
-#  File        :  $Source: /cvsroot/ijbswa/current/privoxy.monthly,v $
-# 
-#  Purpose     :  Downloads updated configuration (blocklists, ...)
-#                 to the machine.
-# 
-#  Copyright   :  Written by and Copyright (C) 2001 the SourceForge
-#                 Privoxy team. http://www.privoxy.org/
-# 
-#                 Based on the Internet Junkbuster originally written
-#                 by and Copyright (C) 1997 Anonymous Coders and 
-#                 Junkbusters Corporation.  http://www.junkbusters.com
-# 
-#                 This program is free software; you can redistribute it 
-#                 and/or modify it under the terms of the GNU General
-#                 Public License as published by the Free Software
-#                 Foundation; either version 2 of the License, or (at
-#                 your option) any later version.
-# 
-#                 This program is distributed in the hope that it will
-#                 be useful, but WITHOUT ANY WARRANTY; without even the
-#                 implied warranty of MERCHANTABILITY or FITNESS FOR A
-#                 PARTICULAR PURPOSE.  See the GNU General Public
-#                 License for more details.
-# 
-#                 The GNU General Public License should be included with
-#                 this file.  If not, you can view it at
-#                 http://www.gnu.org/copyleft/gpl.html
-#                 or write to the Free Software Foundation, Inc., 59
-#                 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-# 
-#  Revisions   :
-#     $Log: privoxy.monthly,v $
-#     Revision 1.2  2002/03/24 11:40:14  swa
-#     name change
-#
-#     Revision 1.1  2002/03/24 11:23:44  swa
-#     name change
-#
-#     Revision 1.3  2001/05/24 07:41:33  swa
-#     added header
-#
-# 
-# 
-# ********************************************************************/
-
-set -e
-
-# blocklist
-wget -q --output-document=/etc/junkbuster/blocklist.new \
-     http://www.waldherr.org/blocklist
-
-mv -f /etc/junkbuster/blocklist.new /etc/junkbuster/blocklist
-
-if [ -f /etc/junkbuster/blocklist.local ] ; then
-   cat /etc/junkbuster/blocklist.local >> /etc/junkbuster/blocklist
-fi
-chmod 644 /etc/junkbuster/blocklist
-
-# cookiefile
-wget -q --output-document=/etc/junkbuster/cookiefile.new \
-     http://www.waldherr.org/cookiefile
-
-mv -f /etc/junkbuster/cookiefile.new /etc/junkbuster/cookiefile
-
-if [ -f /etc/junkbuster/cookiefile.local ] ; then
-   cat /etc/junkbuster/cookiefile.local >> /etc/junkbuster/cookiefile
-fi
-chmod 644 /etc/junkbuster/cookiefile
-
-# imagelist
-wget -q --output-document=/etc/junkbuster/imagelist.new \
-     http://www.waldherr.org/imagelist
-
-mv -f /etc/junkbuster/imagelist.new /etc/junkbuster/imagelist
-
-if [ -f /etc/junkbuster/imagelist.local ] ; then
-   cat /etc/junkbuster/imagelist.local >> /etc/junkbuster/imagelist
-fi
-chmod 644 /etc/junkbuster/imagelist
-
diff --git a/privoxy.weekly b/privoxy.weekly
deleted file mode 100644 (file)
index 81424f8..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh
-
-# ********************************************************************
-# 
-#  File        :  $Source: /cvsroot/ijbswa/current/privoxy.weekly,v $
-# 
-#  Purpose     :  Downloads updated configuration (blocklists, ...)
-#                 to the machine.
-# 
-#  Copyright   :  Written by and Copyright (C) 2001 the SourceForge
-#                 Privoxy team. http://www.privoxy.org/
-# 
-#                 Based on the Internet Junkbuster originally written
-#                 by and Copyright (C) 1997 Anonymous Coders and 
-#                 Junkbusters Corporation.  http://www.junkbusters.com
-# 
-#                 This program is free software; you can redistribute it 
-#                 and/or modify it under the terms of the GNU General
-#                 Public License as published by the Free Software
-#                 Foundation; either version 2 of the License, or (at
-#                 your option) any later version.
-# 
-#                 This program is distributed in the hope that it will
-#                 be useful, but WITHOUT ANY WARRANTY; without even the
-#                 implied warranty of MERCHANTABILITY or FITNESS FOR A
-#                 PARTICULAR PURPOSE.  See the GNU General Public
-#                 License for more details.
-# 
-#                 The GNU General Public License should be included with
-#                 this file.  If not, you can view it at
-#                 http://www.gnu.org/copyleft/gpl.html
-#                 or write to the Free Software Foundation, Inc., 59
-#                 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-# 
-#  Revisions   :
-#     $Log: privoxy.weekly,v $
-#     Revision 1.2  2002/03/24 11:40:14  swa
-#     name change
-#
-#     Revision 1.1  2002/03/24 11:23:44  swa
-#     name change
-#
-#     Revision 1.2  2001/05/24 07:52:24  swa
-#     added header. removed ^M.
-#
-#     Revision 1.3  2001/05/24 07:41:33  swa
-#     added header
-#
-# 
-# 
-# ********************************************************************/
-
-set -e
-
-# blocklist
-wget -q --output-document=/etc/junkbuster/blocklist.new \
-     http://www.waldherr.org/blocklist
-
-mv -f /etc/junkbuster/blocklist.new /etc/junkbuster/blocklist
-
-if [ -f /etc/junkbuster/blocklist.local ] ; then
-   cat /etc/junkbuster/blocklist.local >> /etc/junkbuster/blocklist
-fi
-
-chmod 644 /etc/junkbuster/blocklist
-
-
similarity index 92%
rename from src/project.h
rename to project.h
index dd775e3..e957048 100644 (file)
+++ b/project.h
@@ -1,16 +1,16 @@
 #ifndef PROJECT_H_INCLUDED
 #define PROJECT_H_INCLUDED
 /** Version string. */
 #ifndef PROJECT_H_INCLUDED
 #define PROJECT_H_INCLUDED
 /** Version string. */
-#define PROJECT_H_VERSION "$Id: project.h,v 2.5 2003/09/22 00:33:01 david__schmidt Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.72.2.7 2006/01/29 23:10:56 david__schmidt Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/project.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/project.h,v $
  *
  * Purpose     :  Defines data structures which are widely used in the
  *                project.  Does not define any variables or functions
  *                (though it does declare some macros).
  *
  *
  * Purpose     :  Defines data structures which are widely used in the
  *                project.  Does not define any variables or functions
  *                (though it does declare some macros).
  *
- * Copyright   :  Written by and Copyright (C) 2001 the SourceForge
+ * Copyright   :  Written by and Copyright (C) 2001 - 2004 the SourceForge
  *                Privoxy team. http://www.privoxy.org/
  *
  *                Based on the Internet Junkbuster originally written
  *                Privoxy team. http://www.privoxy.org/
  *
  *                Based on the Internet Junkbuster originally written
  *
  * Revisions   :
  *    $Log: project.h,v $
  *
  * Revisions   :
  *    $Log: project.h,v $
- *    Revision 2.5  2003/09/22 00:33:01  david__schmidt
- *    Enable sending a custom 'blocked' image.  Shows up as
- *    "image-blocker-custom-file" parameter in config, and
- *    "+set-image-blocker{custom}" in action files.
+ *    Revision 1.72.2.7  2006/01/29 23:10:56  david__schmidt
+ *    Multiple filter file support
  *
  *
- *    Revision 2.4  2002/12/28 03:58:19  david__schmidt
- *    Initial drop of dashboard instrumentation - enabled with
- *    --enable-activity-console
+ *    Revision 1.72.2.6  2004/10/03 12:53:46  david__schmidt
+ *    Add the ability to check jpeg images for invalid
+ *    lengths of comment blocks.  Defensive strategy
+ *    against the exploit:
+ *       Microsoft Security Bulletin MS04-028
+ *       Buffer Overrun in JPEG Processing (GDI+) Could
+ *       Allow Code Execution (833987)
+ *    Enabled with +inspect-jpegs in actions files.
  *
  *
- *    Revision 2.3  2002/09/05 08:00:23  oes
- *    Synced with the stable branch:
- *        Revision 1.72.2.1  2002/08/10 11:25:18  oes
- *        - Include config.h for access to config data
- *        - Include <pcre*.h> depending on where they are
+ *    Revision 1.72.2.5  2004/01/30 15:29:29  oes
+ *    Updated the copyright note
  *
  *
- *    Revision 2.2  2002/07/12 04:26:17  agotneja
- *    Re-factored 'chat()' to become understandable and maintainable as
- *    a first step in adding Transparent Proxy functionality.
+ *    Revision 1.72.2.4  2004/01/13 16:12:14  oes
+ *    Fixed double slash in USER_MANUAL_URL. Closes BR #867088.
  *
  *
- *    Added several new static functions in jcc.c, and moved some data
- *    parameters up into project.h to allow them to be passed between
- *    the new functions.
+ *    Revision 1.72.2.3  2003/03/11 11:54:37  oes
+ *    Introduced RC_FLAG_* flags for use in child process return code
  *
  *
- *    Revision 2.1  2002/06/04 16:35:56  jongfoster
- *    Moving three variable declarations to jcc.c from project.h
+ *    Revision 1.72.2.2  2002/11/28 18:15:44  oes
+ *    Added flag to each cgi_dispatcher that allows or denies
+ *    external linking and removed const qualifier from
+ *    struct list_entry.str.
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.72.2.1  2002/08/10 11:25:18  oes
+ *    - Include config.h for access to config data
+ *    - Include <pcre*.h> depending on where they are
  *
  *    Revision 1.72  2002/05/14 21:35:49  oes
  *    Split HELP_LINK_PREFIX into ACTIONS_HELP_PREFIX and CONFIG_HELP_PREFIX
  *
  *    Revision 1.72  2002/05/14 21:35:49  oes
  *    Split HELP_LINK_PREFIX into ACTIONS_HELP_PREFIX and CONFIG_HELP_PREFIX
@@ -89,7 +90,7 @@
  *    Revision 1.67  2002/04/24 02:12:43  oes
  *     - Jon's multiple AF patch:
  *       - Make csp->actions_list an array
  *    Revision 1.67  2002/04/24 02:12:43  oes
  *     - Jon's multiple AF patch:
  *       - Make csp->actions_list an array
- *       - #define MAX_ACTION_FILES
+ *       - #define MAX_AF_FILES
  *     - Moved CGI_PARAM_LEN_MAX (500) here
  *
  *    Revision 1.66  2002/04/15 19:06:43  jongfoster
  *     - Moved CGI_PARAM_LEN_MAX (500) here
  *
  *    Revision 1.66  2002/04/15 19:06:43  jongfoster
@@ -567,7 +568,6 @@ typedef int jb_socket;
  */
 typedef int jb_err;
 
  */
 typedef int jb_err;
 
-#define JB_ERR_GENERIC   -1 /* General error return value */
 #define JB_ERR_OK         0 /**< Success, no error                        */
 #define JB_ERR_MEMORY     1 /**< Out of memory                            */
 #define JB_ERR_CGI_PARAMS 2 /**< Missing or corrupt CGI parameters        */
 #define JB_ERR_OK         0 /**< Success, no error                        */
 #define JB_ERR_MEMORY     1 /**< Out of memory                            */
 #define JB_ERR_CGI_PARAMS 2 /**< Missing or corrupt CGI parameters        */
@@ -575,7 +575,7 @@ typedef int jb_err;
 #define JB_ERR_PARSE      4 /**< Error parsing file                       */
 #define JB_ERR_MODIFIED   5 /**< File has been modified outside of the  
                                  CGI actions editor.                      */
 #define JB_ERR_PARSE      4 /**< Error parsing file                       */
 #define JB_ERR_MODIFIED   5 /**< File has been modified outside of the  
                                  CGI actions editor.                      */
-#define JB_ERR_INTERCEPT  6 /* This page should be intercepted */
+
 
 /**
  * This macro is used to free a pointer that may be NULL.
 
 /**
  * This macro is used to free a pointer that may be NULL.
@@ -653,16 +653,12 @@ struct configuration_spec;
 struct list_entry
 {
    /**
 struct list_entry
 {
    /**
-    * The string.  The "const" is only to discourage modification,
-    * you can actually change it if you *really* want to.
-    * You can even freez() it and replace it with another
-    * malloc()d string.  If you replace it with NULL, the list
-    * functions will work, just be careful next time you iterate
-    * through the list in your own code.
-    *
-    * FIXME: Should we remove the "const"?
+    * The string pointer. It must point to a dynamically malloc()ed
+    * string or be NULL for the list functions to work. In the latter
+    * case, just be careful next time you iterate through the list in
+    * your own code.
     */
     */
-   const char *str;
+   char *str;
    
    /** Next entry in the linked list, or NULL if no more. */
    struct list_entry *next;
    
    /** Next entry in the linked list, or NULL if no more. */
    struct list_entry *next;
@@ -737,9 +733,6 @@ struct http_request
    char  *dbuffer; /**< Buffer with '\0'-delimited domain name.           */
    char **dvec;    /**< List of pointers to the strings in dbuffer.       */
    int    dcount;  /**< How many parts to this domain? (length of dvec)   */
    char  *dbuffer; /**< Buffer with '\0'-delimited domain name.           */
    char **dvec;    /**< List of pointers to the strings in dbuffer.       */
    int    dcount;  /**< How many parts to this domain? (length of dvec)   */
-
-   const struct forward_spec *fwd ;
-
 };
 
 
 };
 
 
@@ -1016,11 +1009,27 @@ struct url_actions
 #define CSP_FLAG_TOGGLED_ON 0x20
 
 
 #define CSP_FLAG_TOGGLED_ON 0x20
 
 
+/*
+ * Flags for use in return codes of child processes
+ */
+
 /**
 /**
- * Maximum number of actions files.  This limit is arbitrary - it's just used
+ * Flag for process return code: Set if exiting porcess has been toggled
+ * during its lifetime.
+ */
+#define RC_FLAG_TOGGLED   0x10
+
+/**
+ * Flag for process return code: Set if exiting porcess has blocked its
+ * request.
+ */
+#define RC_FLAG_BLOCKED   0x20
+
+/**
+ * Maximum number of actions/filter files.  This limit is arbitrary - it's just used
  * to size an array.
  */
  * to size an array.
  */
-#define MAX_ACTION_FILES 10
+#define MAX_AF_FILES 10
 
 /**
  * The state of a Privoxy processing thread.
 
 /**
  * The state of a Privoxy processing thread.
@@ -1076,10 +1085,10 @@ struct client_state
    char   *x_forwarded;
 
    /** Actions files associated with this client */
    char   *x_forwarded;
 
    /** Actions files associated with this client */
-   struct file_list *actions_list[MAX_ACTION_FILES];
+   struct file_list *actions_list[MAX_AF_FILES];
 
 
-   /** pcrs job file. */
-   struct file_list *rlist;
+   /** pcrs job files. */
+   struct file_list *rlist[MAX_AF_FILES];
 
    /** Length after content modification. */
    size_t content_length;
 
    /** Length after content modification. */
    size_t content_length;
@@ -1093,10 +1102,6 @@ struct client_state
 
    /** Next thread in linked list. Only read or modify from the main thread! */
    struct client_state *next;
 
    /** Next thread in linked list. Only read or modify from the main thread! */
    struct client_state *next;
-
-   char *(*content_filter)() ;
-   int all_headers_read ;
-
 };
 
 
 };
 
 
@@ -1140,6 +1145,9 @@ struct cgi_dispatcher
 
    /** The description of the CGI, to appear on the main menu, or NULL to hide it. */
    const char * const description;
 
    /** The description of the CGI, to appear on the main menu, or NULL to hide it. */
    const char * const description;
+
+   /** A flag that indicates whether unintentional calls to this CGI can cause damage */
+   int harmless;
 };
 
 
 };
 
 
@@ -1336,10 +1344,10 @@ struct configuration_spec
    const char *logdir;
 
    /** The full paths to the actions files. */
    const char *logdir;
 
    /** The full paths to the actions files. */
-   const char *actions_file[MAX_ACTION_FILES];
+   const char *actions_file[MAX_AF_FILES];
 
    /** The short names of the actions files. */
 
    /** The short names of the actions files. */
-   const char *actions_file_short[MAX_ACTION_FILES];
+   const char *actions_file_short[MAX_AF_FILES];
 
    /** The administrator's email address */
    char *admin_address;
 
    /** The administrator's email address */
    char *admin_address;
@@ -1350,8 +1358,11 @@ struct configuration_spec
    /** URL to the user manual (on our website or local copy) */
    char *usermanual;
 
    /** URL to the user manual (on our website or local copy) */
    char *usermanual;
 
-   /** The file name of the pcre filter file */
-   const char *re_filterfile;
+   /** The file names of the pcre filter files. */
+   const char *re_filterfile[MAX_AF_FILES];
+
+   /** The short names of the pcre filter files. */
+   const char *re_filterfile_short[MAX_AF_FILES];
 
 #ifdef FEATURE_COOKIE_JAR
 
 
 #ifdef FEATURE_COOKIE_JAR
 
@@ -1372,31 +1383,6 @@ struct configuration_spec
    /** Size limit for IOB */
    size_t buffer_limit;
 
    /** Size limit for IOB */
    size_t buffer_limit;
 
-#ifdef FEATURE_ACTIVITY_CONSOLE
-
-  /**
-   * Default IP address to send statistics to, as a string.
-   * Set to "127.0.0.1".
-   */
-  #define ACTIVTY_ADDR_DEFAULT   "127.0.0.1"
-
-  /**
-   * Default port to listen on, as a number.
-   * Set to 8119.
-   */
-  #define ACTIVTY_ADDR_PORT      8119
-
-   /** IP address to talk to for activity/statistics reporting. */
-   const char *activity_address;
-
-   /** Port to bind to.  Defaults to ACTIVTY_ADDR_PORT == 8119. */
-   int         activity_port;
-
-   /** Frequency, in seconds, of how often to update the stats console. */
-   int         activity_freq;
-
-#endif /* def FEATURE_ACTIVITY_CONSOLE */
-
 #ifdef FEATURE_TRUST
 
    /** The file name of the trust file. */
 #ifdef FEATURE_TRUST
 
    /** The file name of the trust file. */
@@ -1431,15 +1417,6 @@ struct configuration_spec
 
    /** Nonzero if we need to bind() to the new port. */
    int need_bind;
 
    /** Nonzero if we need to bind() to the new port. */
    int need_bind;
-
-   /** The raw blocker custom bitmap data */
-   char *image_blocker_data;
-
-   /** The length of the blocker custom image data */
-   size_t image_blocker_length;
-
-   /** The mimetype of the blocker custom image data */
-   char *image_blocker_format;
 };
 
 /** Calculates the number of elements in an array, using sizeof. */
 };
 
 /** Calculates the number of elements in an array, using sizeof. */
@@ -1450,15 +1427,11 @@ struct configuration_spec
 #define FORCE_PREFIX "/PRIVOXY-FORCE"
 #endif /* def FEATURE_FORCE_LOAD */
 
 #define FORCE_PREFIX "/PRIVOXY-FORCE"
 #endif /* def FEATURE_FORCE_LOAD */
 
-#define IMAGE_MIMETYPE_PNG "image/png"
-#define IMAGE_MIMETYPE_GIF "image/gif"
-#define IMAGE_MIMETYPE_JPG "image/jpg"
-
 #ifdef FEATURE_NO_GIFS
 #ifdef FEATURE_NO_GIFS
-/** The MIME type for built-in images ("image/png" or "image/gif"). */
-#define BUILTIN_IMAGE_MIMETYPE IMAGE_MIMETYPE_PNG
+/** The MIME type for images ("image/png" or "image/gif"). */
+#define BUILTIN_IMAGE_MIMETYPE "image/png"
 #else
 #else
-#define BUILTIN_IMAGE_MIMETYPE IMAGE_MIMETYPE_GIF
+#define BUILTIN_IMAGE_MIMETYPE "image/gif"
 #endif /* def FEATURE_NO_GIFS */
 
 
 #endif /* def FEATURE_NO_GIFS */
 
 
@@ -1470,7 +1443,7 @@ struct configuration_spec
 #define HOME_PAGE_URL     "http://www.privoxy.org/"
 
 /** URL for the Privoxy user manual. */
 #define HOME_PAGE_URL     "http://www.privoxy.org/"
 
 /** URL for the Privoxy user manual. */
-#define USER_MANUAL_URL   HOME_PAGE_URL "/" VERSION "/user-manual/"
+#define USER_MANUAL_URL   HOME_PAGE_URL VERSION "/user-manual/"
 
 /** Prefix for actions help links  (append to USER_MANUAL_URL). */
 #define ACTIONS_HELP_PREFIX "actions-file.html#"
 
 /** Prefix for actions help links  (append to USER_MANUAL_URL). */
 #define ACTIONS_HELP_PREFIX "actions-file.html#"
@@ -1498,6 +1471,21 @@ struct configuration_spec
 #define CGI_PREFIX  "http://" CGI_SITE_2_HOST CGI_SITE_2_PATH "/"
 
 
 #define CGI_PREFIX  "http://" CGI_SITE_2_HOST CGI_SITE_2_PATH "/"
 
 
+/* HTTP snipplets.
+ *
+ * FIXME: This is very inefficient.  There could be one copy of these strings
+ * for each .c file!!  They should be "extern", not "static".
+ */
+static const char CSUCCEED[] =
+   "HTTP/1.0 200 Connection established\n"
+   "Proxy-Agent: Privoxy/" VERSION "\r\n\r\n";
+
+static const char CHEADER[] =
+   "HTTP/1.0 400 Invalid header received from browser\r\n\r\n";
+
+static const char CFORBIDDEN[] =
+   "HTTP/1.0 403 Connection not allowable\r\nX-Hint: If you read this message interactively, then you know why this happens ,-)\r\n\r\n";
+
 #ifdef __cplusplus
 } /* extern "C" */
 #endif
 #ifdef __cplusplus
 } /* extern "C" */
 #endif
diff --git a/src/ipc.h b/src/ipc.h
deleted file mode 100644 (file)
index e2cd5e3..0000000
--- a/src/ipc.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef IPC_H_INCLUDED
-#define IPC_H_INCLUDED
-#define IPC_H_VERSION "$Id: ipc.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
-/*********************************************************************
- *
- * File        :  $Source: /cvsroot/ijbswa/current/src/ipc.h,v $
- *
- * Purpose     :  Functions to provide portable interprocess
- *                communications: semaphores, sleeping, etc.
- *
- * Copyright   :  Written by and Copyright (C) 2002, 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and 
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it 
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log: ipc.h,v $
- *
- *********************************************************************/
-\f
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Here, we define common ways of defining mutual exclusion variables
- * and the manipulation thereof.  We define an alias for the type that
- * particular OSes like to see, and we have a common model of locking
- * and unlocking them.
- */
-
-#ifdef _WIN32
-  #include <windows.h>
-  #define IPC_MUTEX_LOCK HANDLE
-  #define IPC_CREATE_MUTEX(lock) InitializeCriticalSection(&lock)
-  #define IPC_LOCK_MUTEX(lock) EnterCriticalSection(lock)
-  #define IPC_UNLOCK_MUTEX(lock) LeaveCriticalSection(lock)
-  #define IPC_SLEEP_SECONDS(seconds) Sleep(seconds * 1000)
-#elif __OS2__
-  #define INCL_DOSSEMAPHORES
-  #define INCL_DOSPROCESS
-  #include <os2.h>
-  #define IPC_MUTEX_LOCK HMTX
-  #define IPC_CREATE_MUTEX(lock) DosCreateMutexSem(NULL, &lock, 0, FALSE)
-  #define IPC_LOCK_MUTEX(lock) DosRequestMutexSem(lock,SEM_INDEFINITE_WAIT)
-  #define IPC_UNLOCK_MUTEX(lock) DosReleaseMutexSem(lock)
-  #define IPC_SLEEP_SECONDS(seconds) DosSleep(seconds * 1000)
-#else
-  /* Generic unix processing.  This will probably need tweaking for variants. */
-  #include <sys/signal.h>
-  #include <pthread.h>
-  #define IPC_MUTEX_LOCK pthread_mutex_t
-  #define IPC_CREATE_MUTEX(lock) pthread_mutex_init(&lock,0)
-  #define IPC_LOCK_MUTEX(lock) pthread_mutex_lock(&lock)
-  #define IPC_UNLOCK_MUTEX(lock) pthread_mutex_unlock(&lock)
-  #define IPC_SLEEP_SECONDS(seconds) sleep(seconds)
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* ndef IPC_H_INCLUDED */
-
-/*
-  Local Variables:
-  tab-width: 3
-  end:
-*/
diff --git a/src/java/org/privoxy/activityconsole/ActivityConsole.java b/src/java/org/privoxy/activityconsole/ActivityConsole.java
deleted file mode 100644 (file)
index f0df73a..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Launch the Activity Console GUI with either the 
- *                specified listen port or the default if none is 
- *                specified on the command line.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-/**
- * Launch the Activity Console GUI with either the specified listen port
- * or the default if none is specified on the command line.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class ActivityConsole
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  /**
-   * main method; initializes the GUI.
-   *
-   * @String[] args - command line parameters.
-   */
-  public static void main(java.lang.String[] args)
-  {
-    try
-    {
-      ActivityConsoleGui gui = new ActivityConsoleGui(args[0]);
-    }
-    catch (Throwable t)
-    {
-      ActivityConsoleGui gui = new ActivityConsoleGui("8119");
-    }
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/ActivityConsoleGui.java b/src/java/org/privoxy/activityconsole/ActivityConsoleGui.java
deleted file mode 100644 (file)
index 40dc9d6..0000000
+++ /dev/null
@@ -1,770 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source: /cvsroot/ijbswa/current/src/java/org/privoxy/activityconsole/ActivityConsoleGui.java,v $
- *
- * Purpose     :  Provide the central GUI for displaying Privoxy
- *                statistics.  It can be contacted either by the
- *                local machine or other machines in a network and
- *                display consolidated, tabular statistics.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log: ActivityConsoleGui.java,v $
- *    Revision 1.1  2003/01/18 14:37:24  david__schmidt
- *    Initial checkin of directory structure and source code of the java Activity
- *    Console
- *
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.*;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.event.*;
-import javax.swing.table.*;
-
-/**
- * The main Activity Console GUI.
- * @author Last Modified By: $Author: david__schmidt $
- * @version $Rev$-$Date: 2003/01/18 14:37:24 $$State: Exp $
- */
-public final class ActivityConsoleGui extends JFrame implements ActionListener
-{
-  private static final String
-  COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  ActivityConsoleGui parent_;
-  ServerThread _serverThread = null;
-  private ListResourceBundle resStrings = (ListResourceBundle)ListResourceBundle.getBundle("org.privoxy.activityconsole.ActivityConsoleResources");
-
-  JTable _table;
-
-  JScrollPane _tableScroller = new JScrollPane();
-
-  SortableTableModel _model;
-
-  Vector _tableColumnMap = new Vector();
-
-  JPanel _mainPanel = new JPanel(new GridBagLayout());
-
-  JMenuItem _deleteItem, _quitItem, _configItem;
-  JCheckBoxMenuItem _viewWideItem;
-
-  private DefaultTableCellRenderer _statRenderer = null;
-
-  int _port = 0;
-
-  Properties _properties = null;
-
-  /**
-   * Constructor of the Activity Console GUI.
-   * @param arg the port to serve connections on - as an int parsed from the String
-   */
-  public ActivityConsoleGui(String arg)
-  {
-    int i;
-
-    addWindowListener(new WindowCloseMonitor());
-
-    JMenuBar menuBar = new JMenuBar();
-
-    JMenu menuFile = new JMenu(resStrings.getString("menuFile"));
-    MenuAction quitAction = new MenuAction(resStrings.getString("menuFileQuit"));
-    _quitItem = menuFile.add(quitAction);
-    menuBar.add(menuFile);
-
-    JMenu menuEdit = new JMenu(resStrings.getString("menuEdit"));
-    _configItem = menuEdit.add(new MenuAction(resStrings.getString("menuEditConfig")));
-    _deleteItem = menuEdit.add(new MenuAction(resStrings.getString("menuEditDelete")));
-    menuBar.add(menuEdit);
-
-    JMenu menuView = new JMenu(resStrings.getString("menuView"));
-    _viewWideItem = new JCheckBoxMenuItem(resStrings.getString("menuViewWide"));
-    _viewWideItem.addActionListener(this);
-    menuView.add(_viewWideItem);
-    menuBar.add(menuView);
-
-    this.setJMenuBar(menuBar);
-    _deleteItem.setEnabled(false);
-
-    loadProperties();
-
-    try
-    {
-      _port = Integer.parseInt(arg);
-      if (_port < 0)
-        _port = 0;
-    }
-    catch (Throwable t)
-    {
-      _port = 0;
-    }
-
-    /**
-     * The cell renderer for the StatWidget Component - simply returns the component
-     * itself.  Additionally, it has the extra hack of telling the StatWidget where
-     * it is in the table so it can update itself again when it comes time to flash.
-     */
-    _statRenderer = new DefaultTableCellRenderer()
-    {
-      public Component getTableCellRendererComponent(JTable table,
-                                                     Object value,
-                                                     boolean isSelected,
-                                                     boolean hasFocus,
-                                                     int row,
-                                                     int column)
-      {
-        /* Housekeeping: keep track of the row, column and table references as we go */
-        ((StatWidget)value).setRowColTable(row,column,table);
-        return(Component)value;
-      }
-
-      public void setValue(Object value)
-      {
-        Color color = null;
-        try
-        {
-          color = (Color)value;
-        }
-        catch (ClassCastException e)
-        {
-          color = Color.white;
-        }
-        setBackground(color);
-      }
-    };
-
-    initTable();
-
-    ActivityConsoleGuiUtil.constrain(_mainPanel, _tableScroller,
-                                     1, 1, // X, Y Coordinates
-                                     1, 1, // Grid width, height
-                                     GridBagConstraints.BOTH,  // Fill value
-                                     GridBagConstraints.WEST,  // Anchor value
-                                     1.0,1.0,  // Weight X, Y
-                                     0, 0, 0, 0 ); // Top, left, bottom, right insets
-
-    this.getContentPane().add(_mainPanel, BorderLayout.CENTER);
-
-    parent_ = this;
-    this.pack();
-    _table.setPreferredScrollableViewportSize(new Dimension(_table.getWidth(),50));
-    this.pack();
-
-    if (_port > 0)
-    {
-      _serverThread = new ServerThread(this, _port);
-      _serverThread.start();
-    }
-    updateTitle(_port);
-    setBounds(ActivityConsoleGuiUtil.center(this.getSize()));
-    this.show();
-  }
-
-  /**
-   * Updates the title bar with the port currently being served.
-   * @param port the port being served
-   */
-  public void updateTitle(int port)
-  {
-    String title = resStrings.getString("guiTitle");
-
-    title = StringUtil.replaceSubstring(title,"%1",""+port);
-    setTitle(title);
-  }
-
-  public void actionPerformed(ActionEvent e)
-  {
-    if (e.getSource() == _viewWideItem)
-    {
-      setProperty("AC.detailedColumnSet", _viewWideItem.isSelected());
-      initTable();
-      this.pack();
-      _table.setPreferredScrollableViewportSize(new Dimension(_table.getWidth(),50));
-      this.pack();
-    }
-  }
-
-  class MenuAction extends AbstractAction
-  {
-    public MenuAction(String text)
-    {
-      super(text,null);
-    }
-
-    public MenuAction(String text, Icon icon)
-    {
-      super(text,icon);
-    }
-
-    public void actionPerformed(ActionEvent e)
-    {
-      if (e.getSource() == _quitItem)
-      {
-        saveProperties();
-        parent_.setVisible(false);
-        parent_.dispose();
-        System.exit(0);
-      }
-      else if (e.getSource() == _deleteItem)
-      {
-        deleteAction();
-      }
-      else if (e.getSource() == _configItem)
-      {
-        changeServerAction();
-      }
-    }
-  }
-
-  /**
-   * Asks the user to specify a new port to serve
-   */
-  public void changeServerAction()
-  {
-    int port = -1;
-    String message = resStrings.getString("guiNewPortPrompt");
-    message = StringUtil.replaceSubstring(message,"%1",""+_port);
-
-    String inputValue = JOptionPane.showInputDialog(this,
-                                                    message,
-                                                    resStrings.getString("guiNewPortTitle"),
-                                                    JOptionPane.QUESTION_MESSAGE);
-    if (inputValue != null)
-      try
-      {
-        port = Integer.parseInt(inputValue);
-      }
-      catch (Throwable t)
-      {
-        port = -1;
-      }
-    if (port < 1)
-      JOptionPane.showMessageDialog(null, resStrings.getString("guiNewPortErrorPrompt"), resStrings.getString("guiNewPortErrorTitle"), JOptionPane.ERROR_MESSAGE);
-    else
-    {
-      if (_port != port)
-      {
-        if (_serverThread != null)
-        {
-          _serverThread.doClose();
-          _serverThread.interrupt();
-          _serverThread = null;
-        }
-        _port = port;
-        _serverThread = new ServerThread(parent_, port);
-        _serverThread.start();
-        updateTitle(_port);
-      }
-    }
-  }
-
-  /**
-   * Deletes the "selected" row after seeking confirmation
-   */
-  public void deleteAction()
-  {
-    int numSelections = _table.getSelectedRowCount();
-    int selRow = _table.getSelectedRow();
-    if (numSelections > 0)
-    {
-      if ((selRow > -1) &&
-          (selRow < _table.getRowCount()))
-      {
-        /* Ask for confirmation */
-        String message = resStrings.getString("guiDeleteConfirmPrompt");
-        message = StringUtil.replaceSubstring(message,"%1",(String)_model.getValueAt(selRow,0));
-        int ret = JOptionPane.showConfirmDialog(null,
-                                                message,
-                                                resStrings.getString("guiDeleteConfirmTitle"),
-                                                JOptionPane.YES_NO_OPTION);
-        if (ret == JOptionPane.YES_OPTION)
-        {
-          _model.removeRow(selRow);
-        }
-      }
-    }
-  }
-
-  /**
-   * Builds a new table with the requested columns.
-   */
-  public void initTable()
-  {
-    _model = new SortableTableModel(new Vector(), getColumnNames());
-    _table = new JTable(_model);
-    _table.setPreferredScrollableViewportSize(new Dimension(800,50));
-    _table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-    _table.setCellSelectionEnabled(false);
-    _table.setRowSelectionAllowed(false);
-    SortButtonRenderer headerRenderer = new SortButtonRenderer();
-    TableColumnModel cm = _table.getColumnModel();
-    /* Make the first column twice the width of the others. It shows bigger stuff. */
-    cm.getColumn(0).setPreferredWidth(cm.getColumn(0).getPreferredWidth() * 2);
-    cm.getColumn(0).setHeaderRenderer(headerRenderer);
-    for (int i = 1;i<_model.getColumnCount();i++)
-    {
-      cm.getColumn(i).setPreferredWidth((int)(cm.getColumn(i).getPreferredWidth() * 1));
-      cm.getColumn(i).setCellRenderer(_statRenderer);
-      cm.getColumn(i).setHeaderRenderer(headerRenderer);
-    }
-
-    JTableHeader header = _table.getTableHeader();
-    header.addMouseListener(new HeaderListener(header,headerRenderer));
-
-    ListSelectionModel csm = _table.getSelectionModel();
-    csm.addListSelectionListener(new SelectedListener(csm));
-
-    _tableScroller.setViewportView(_table);
-
-  }
-
-  /**
-   * Retrieves the names of the column headers.
-   * @return Vector the set of column names.  It also has the side-effect of adding
-   * entries to the global column mapping Vector where we map the staus integer identifiers
-   * to the column positions and names.  Should probably fix that too.
-   */
-  public Vector getColumnNames()
-  {
-    Vector names = new Vector();
-    _tableColumnMap = getUserColumnNames();
-
-    names.addElement(resStrings.getString("guiDefaultColumn0"));
-    for (int i = 0; i < _tableColumnMap.size(); i ++)
-    {
-      names.addElement(((ColumnRef)_tableColumnMap.elementAt(i)).getDescription());
-    }
-
-    return names;
-  }
-
-  /**
-   * Builds a map of columns based on the properties file.
-   * If it is somehow unsuitable, the default table will be built.
-   * This should be made to read a properties file. FIXME.
-   * @return Vector The vector of column name-to-stat-ID mappings
-   */
-  public Vector getUserColumnNames()
-  {
-    Vector map;
-
-    map = getDefaultColumnNames();
-
-    return map;
-  }
-
-  /**
-   * Builds a default map of columns.
-   * @return Vector The vector of column name-to-stat-ID mappings
-   */
-  public Vector getDefaultColumnNames()
-  {
-    Vector map = new Vector();
-    boolean detailedList = getProperty("AC.detailedColumnSet", false);
-    // In case they didn't have the preference set... set it.
-    setProperty("AC.detailedColumnSet", detailedList);
-    _viewWideItem.setSelected(detailedList);
-
-    map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn1"),1));
-    map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn2"),2));
-    map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn3"),3));
-    if (detailedList)
-    {
-      map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn4"),4));
-      map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn5"),5));
-      map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn6"),6));
-      map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn7"),7));
-      map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn8"),8));
-      map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn9"),9));
-      map.addElement(new ColumnRef(resStrings.getString("guiDefaultColumn10"),10));
-    }
-    return map;
-  }
-
-  /**
-   * Parses a String of statistics coming from Privoxy.
-   * @param line The statistics string sent from Privoxy
-   * @param from the hostname that sent the statistics
-   */
-  public void updateStats(String line, String from)
-  {
-    /*
-     * An example line of data:
-     * 0:8118 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0
-     */
-    int key, value;
-    String tableKey = "", key_str, value_str, token;
-    StringTokenizer colonToken;
-    StringTokenizer spaceTokens = new StringTokenizer(line);
-    Vector stats = new Vector();
-
-    while (spaceTokens.hasMoreTokens())
-    {
-      token = spaceTokens.nextToken();
-      colonToken = new StringTokenizer(token,":");
-      if (colonToken.hasMoreTokens())
-      {
-        key_str = null; value_str = null;
-        key = -1; value = 0;
-
-        /* First token is the key */
-        key_str = colonToken.nextToken();
-        try
-        {
-          key = Integer.parseInt(key_str);
-        }
-        catch (NumberFormatException n)
-        {
-          key = -1;
-        }
-
-        if ((colonToken.hasMoreTokens()) && (key > -1))
-        {
-          /* Next token, if present, is the value */
-          value_str = colonToken.nextToken();
-          if (key == 0)
-          {
-            /*
-             * The key to the table row is the concatenation of the serving
-             * IP address string, a full colon, and the port string.
-             */
-            tableKey = from + ":" + value_str;
-          }
-          try
-          {
-            value = Integer.parseInt(value_str);
-            stats.addElement((Object)(new Stat(key, value)));
-          }
-          catch (NumberFormatException n)
-          {
-            value = 0;
-          }
-        }
-      }
-    }
-    if ((tableKey.compareTo("") != 0) && (stats.size() > 0))
-    {
-      updateTable(tableKey, stats);
-      stats.removeAllElements();
-    }
-    stats = null;
-  }
-
-  /**
-   * Updates (or creates) a line in the table representing the incoming packet of stats.
-   * @param tableKey Our key to a unique table row: the hostname concatenated with the Privoxy port being served.
-   * @param stats Vector of statistics elements
-   */
-  public void updateTable(String tableKey, Vector stats)
-  {
-    boolean found = false;
-    for (int i = 0; i < _model.getRowCount(); i++)
-    {
-      if (((String)_model.getValueAt(i,_table.convertColumnIndexToView(0))).compareTo(tableKey) == 0)
-      {
-        updateTableEntry(i, stats);
-        found = true;
-      }
-    }
-    /* If we can't find one in the table already... */
-    if (found == false)
-      createTableEntry(tableKey, stats);
-  }
-
-  /**
-   * Creates a line in the table representing the incoming packet of stats.
-   * @param tableKey Our key to a unique table row: the hostname concatenated with the Privoxy port being served.
-   * @param stats Vector of statistics elements
-   */
-  public void createTableEntry(String tableKey, Vector stats)
-  {
-    int i, j;
-    Vector row = new Vector();
-    boolean added = false;
-
-    row.addElement(tableKey);
-
-    /*
-     * If we have a key (in stats) that maps to a key in the _tableColumnMap,
-     * then we add it to the vector destined for the table.
-     */
-    for (i = 0; i < _tableColumnMap.size(); i ++)
-    {
-      for (j = 0; j < stats.size(); j++)
-      {
-        if (((Stat)stats.elementAt(j)).getKey() == ((ColumnRef)_tableColumnMap.elementAt(i)).getKey())
-        {
-          row.addElement(new StatWidget(((Stat)stats.elementAt(j)).getValue(),500));
-          added = true;
-        }
-      }
-      if (added == false)
-      {
-        row.addElement(new StatWidget(0,500));
-      }
-      else
-        added = false;
-    }
-    _model.addRow(row);
-  }
-
-  /**
-   * Updates a line in the table by tweaking the StatWidgets.
-   * @param row the table row if the StatWidget
-   * @param stats The Vector of Stat elements to update the table row with
-   */
-  public void updateTableEntry(int row, Vector stats)
-  {
-    int i, j;
-
-    for (i = 0; i < _tableColumnMap.size(); i ++)
-    {
-      for (j = 0; j < stats.size(); j++)
-      {
-        if (((Stat)stats.elementAt(j)).getKey() == ((ColumnRef)_tableColumnMap.elementAt(i)).getKey())
-        {
-          ((StatWidget)_model.getValueAt(row,i+1)).updateValue(((Stat)stats.elementAt(j)).getValue());
-          stats.removeElementAt(j);
-          break;
-        }
-      }
-    }
-  }
-
-  /**
-   * Load up the properties
-   *
-   */
-  private void loadProperties()
-  {
-    _properties = new Properties();
-    try
-    {
-      _properties.load(new FileInputStream("ActivityConsole.properties"));
-    }
-    catch (Throwable t)
-    {
-      // System.out.println(t);
-      // No properties file... use hardcoded defaults.
-    }
-  }
-
-  /**
-   * Save the properties
-   *
-   */
-  private void saveProperties()
-  {
-    try
-    {
-      _properties.store(new FileOutputStream("ActivityConsole.properties"),resStrings.getString("guiPropertiesFileHeader"));
-    }
-    catch (Throwable t)
-    {
-      System.out.println(t);
-    }
-  }
-
-  /**
-   * Set a property
-   */
-  public void setProperty(String key, String value)
-  {
-    _properties.setProperty(key,value);
-  }
-
-  /**
-   * Set a boolean property
-   */
-  public void setProperty(String key, boolean value)
-  {
-    Boolean bVal = new Boolean(value);
-    _properties.setProperty(key,(String)bVal.toString());
-  }
-
-  /**
-   * Get a property
-   */
-  public String getProperty(String key, String defaultValue)
-  {
-    return _properties.getProperty(key,defaultValue);
-  }
-
-  /**
-   * Get a boolean property
-   */
-  public boolean getProperty(String key, boolean defaultValue)
-  {
-    String sDefaultValue;
-    String property;
-    if (defaultValue == false)
-      sDefaultValue = "false";
-    else
-      sDefaultValue = "true";
-    property = _properties.getProperty(key,sDefaultValue);
-    if (property.compareToIgnoreCase("true") == 0)
-      return true;
-    else
-      return false;
-  }
-
-  /**
-   * Remove a property
-   */
-  public void removeProperty(String key)
-  {
-    _properties.remove(key);
-  }
-
-  /**
-   * Worker class to offer a clickable table header for sorting.
-   */
-  class HeaderListener extends MouseAdapter
-  {
-    JTableHeader   header;
-    SortButtonRenderer renderer;
-
-    HeaderListener(JTableHeader header,SortButtonRenderer renderer)
-    {
-      this.header   = header;
-      this.renderer = renderer;
-    }
-
-    public void mousePressed(MouseEvent e)
-    {
-      Point click = e.getPoint();
-      int col = header.columnAtPoint(click);
-      int margin1, margin2;
-      int sortCol = header.getTable().convertColumnIndexToModel(col);
-
-      /* Don't perform the sort if the user is just trying to resize the columns. */
-      margin1 = header.columnAtPoint(new Point(click.x+3,click.y));
-      margin2 = header.columnAtPoint(new Point(click.x-3,click.y));
-      if ((col == margin1) && (col == margin2))
-      {
-        renderer.setPressedColumn(col);
-        renderer.setSelectedColumn(col);
-        header.repaint();
-
-        if (header.getTable().isEditing())
-        {
-          header.getTable().getCellEditor().stopCellEditing();
-        }
-
-        boolean isAscent;
-        if (SortButtonRenderer.DOWN == renderer.getState(col))
-        {
-          isAscent = true;
-        }
-        else
-        {
-          isAscent = false;
-        }
-        ((SortableTableModel)header.getTable().getModel())
-        .sortByColumn(sortCol, isAscent);    
-      }
-    }
-
-    public void mouseReleased(MouseEvent e)
-    {
-      int col = header.columnAtPoint(e.getPoint());
-      renderer.setPressedColumn(-1);
-      header.repaint();
-    }
-  }
-
-  /**
-   * Worker class to tell the menu when it's OK to delete a row (i.e. when a row gets
-   * selected).  This doesn't work reliably, but it's better than nothing.
-   */
-  public class SelectedListener implements ListSelectionListener
-  {
-    ListSelectionModel model;
-
-    public SelectedListener(ListSelectionModel lsm)
-    {
-      model = lsm;
-    }
-
-    public void valueChanged(ListSelectionEvent lse)
-    {
-      // NOTE - keep this in sync with columnSelectionChanged below...
-      int numSelections = _table.getSelectedRowCount();
-      int selRow = _table.getSelectedRow();
-      if (numSelections > 0)
-      {
-        if ((selRow > -1) &&
-            (selRow < _table.getRowCount()))
-        {
-          _deleteItem.setEnabled(true);
-        }
-        else
-          _deleteItem.setEnabled(false);
-      }
-      else
-        _deleteItem.setEnabled(false);
-    }
-    public void columnSelectionChanged(ListSelectionEvent lse)
-    {
-      // NOTE - keep this in sync with valueChanged above...
-      int numSelections = _table.getSelectedRowCount();
-      int selRow = _table.getSelectedRow();
-      if (numSelections > 0)
-      {
-        if ((selRow > -1) &&
-            (selRow < _table.getRowCount()))
-        {
-          _deleteItem.setEnabled(true);
-        }
-        else
-          _deleteItem.setEnabled(false);
-      }
-      else
-        _deleteItem.setEnabled(false);
-    }
-  }
-
-  /**
-   * Watch for the window closing event.  Dunno why swing doesn't handle this better natively.
-   */
-  public class WindowCloseMonitor extends WindowAdapter
-  {
-    public void windowClosing(WindowEvent e)
-    {
-      saveProperties();
-      Window w = e.getWindow();
-      w.setVisible(false);
-      w.dispose();
-      System.exit(0);
-    }
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/ActivityConsoleGuiUtil.java b/src/java/org/privoxy/activityconsole/ActivityConsoleGuiUtil.java
deleted file mode 100644 (file)
index 468f832..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Utility functions for GridBag layout and centering
- *                frames.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.awt.*;
-
-/**
- * The ActivityConsoleGuiUtil class: Helper routines for the GridBag layout.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class ActivityConsoleGuiUtil 
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  /** constrain - Helper method for setting a componets constraints in a gridbag layout;
-    * takes all of the possible parameters for grid constraints.
-    * @param container  conatiner to add the component to
-    * @param component  component that will be added
-    * @param grid_x x value
-    * @param grid_y y value
-    * @param grid_width grid width for the component
-    * @param grid_height grid height for the component
-    * @param fill fill value
-    * @param anchor anchor value
-    * @param weight_x weight x
-    * @param weight_y weight y
-    * @param top top inset
-    * @param left left inset
-    * @param bottom bottom inset
-    * @param right right inset
-    */
-
-  public static void constrain(Container container,
-                               Component component, 
-                               int grid_x,
-                               int grid_y,
-                               int grid_width,
-                               int grid_height,
-                               int fill,
-                               int anchor,
-                               double weight_x,
-                               double weight_y,
-                               int top,
-                               int left,
-                               int bottom,
-                               int right)
-  {
-    GridBagConstraints c = new GridBagConstraints();
-    c.gridx = grid_x;
-    c.gridy = grid_y;
-    c.gridwidth = grid_width;
-    c.gridheight = grid_height;
-    c.fill = fill;
-    c.anchor = anchor;
-    c.weightx = weight_x;
-    c.weighty = weight_y;
-    if (top+bottom+left+right > 0)
-      c.insets = new Insets(top, left, bottom, right);
-
-    ((GridBagLayout)container.getLayout()).setConstraints(component, c);
-    container.add(component);
-  }
-
-  public static void constrain(Container container,
-                               Component component, 
-                               int grid_x,
-                               int grid_y,
-                               int grid_width,
-                               int grid_height)
-  {
-    constrain(container,
-              component,
-              grid_x,
-              grid_y,
-              grid_width,
-              grid_height,
-              GridBagConstraints.NONE, 
-              GridBagConstraints.NORTHWEST,
-              0.0, 0.0, 0, 0, 0, 0);
-  }
-
-  public static void constrain(Container container,
-                               Component component, 
-                               int grid_x,
-                               int grid_y,
-                               int grid_width,
-                               int grid_height,
-                               int top,
-                               int left,
-                               int bottom,
-                               int right)
-  {
-    constrain(container,
-              component,
-              grid_x,
-              grid_y, 
-              grid_width,
-              grid_height,
-              GridBagConstraints.NONE, 
-              GridBagConstraints.NORTHWEST, 
-              0.0, 0.0, top, left, bottom, right);
-  }
-
-  /** constrainLast - Helper method for setting a componets constraints in a gridbag layout;
-    * takes all of the possible parameters for grid constraints.
-    * @param container  conatiner to add the component to
-    * @param component  component that will be added
-    * @param grid_x x value
-    * @param grid_y y value
-    * @param top top inset
-    * @param left left inset
-    * @param bottom bottom inset
-    * @param right right inset
-    */
-
-  public static void constrainLast(Container container,
-                                   Component component,
-                                   int grid_x,
-                                   int grid_y,
-                                   int top,
-                                   int left,
-                                   int bottom,
-                                   int right)
-  {
-    constrain(container,
-              component,
-              grid_x,
-              grid_y, 
-              GridBagConstraints.REMAINDER,1,
-              GridBagConstraints.HORIZONTAL, 
-              GridBagConstraints.NORTHWEST, 
-              0.0, 0.0, top, left, bottom, right);
-  }
-
-  /** constrain - Helper method for setting a componets constraints in a gridbag layout;
-    * takes all of the possible parameters for grid constraints.
-    * @param container  conatiner to add the component to
-    * @param component  component that will be added
-    * @param int        x value
-    * @param int        y value
-    * @param int        top inset
-    * @param int        left inset
-    * @param int        bottom inset
-    * @param int        right inset
-    */
-
-  public static void constrain(Container container, Component component, 
-                               int grid_x, int grid_y,int top, int left, int bottom, int right)
-  {
-    constrain(container,
-              component,
-              grid_x,
-              grid_y, 
-              1, 1,
-              GridBagConstraints.NONE, 
-              GridBagConstraints.NORTHWEST, 
-              0.0, 0.0, top, left, bottom, right);
-  }
-
-  public static Rectangle center(Dimension dim)
-  {
-    final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
-
-    final Rectangle centeredRect =
-    new Rectangle( (screenSize.width  - dim.width)  /2,
-                   (screenSize.height - dim.height) /2,
-                   dim.width,
-                   dim.height);
-    return centeredRect;
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/ActivityConsoleResources.java b/src/java/org/privoxy/activityconsole/ActivityConsoleResources.java
deleted file mode 100644 (file)
index 6424630..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source: /cvsroot/ijbswa/current/src/java/org/privoxy/activityconsole/ActivityConsoleResources.java,v $
- *
- * Purpose     :  Default English text for all translatable strings.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log: ActivityConsoleResources.java,v $
- *    Revision 1.1  2003/01/18 14:37:24  david__schmidt
- *    Initial checkin of directory structure and source code of the java Activity
- *    Console
- *
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.io.Serializable;
-
-/**
- * The default (English) language resources file for the Activity Console.
- * @author Last Modified By: $Author: david__schmidt $
- * @version $Rev$-$Date: 2003/01/18 14:37:24 $$State: Exp $
- */
-public class ActivityConsoleResources extends java.util.ListResourceBundle implements Serializable
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  static final Object[][] contents =
-  {
-    {"guiTitle", "Privoxy Activity Console - serving port %1"},
-    {"menuFile", "File"}, 
-    {"menuFileQuit", "Quit"}, 
-    {"menuEdit", "Edit"},
-    {"menuEditDelete", "Delete selected row"},
-    {"menuEditConfig", "Set port"},
-    {"menuView", "View"},
-    {"menuViewWide", "Detailed statistics"},
-    {"guiNewPortTitle", "New port"},
-    {"guiNewPortPrompt", "Currently serving port %1.\n\nPlease enter the new port to serve:"},
-    {"guiNewPortErrorTitle", "Alert"},
-    {"guiNewPortErrorPrompt", "New port must be positive."},
-    {"guiDeleteConfirmTitle","Are you sure?"},
-    {"guiDeleteConfirmPrompt","Are you sure you want to delete stats from host %1?"},
-    {"guiPropertiesFileHeader","Privoxy Activity Console properties file - edit only while the Activity Console is not running."},
-
-    /* Headers and descriptions for statistics columns */
-    {"guiDefaultColumn0","Host:Port"},
-    {"guiDefaultColumn0Description","The host and port that statistics are coming from"},
-    {"guiDefaultColumn1","Request"},
-    {"guiDefaultColumn1Description","The number of requests that flow through the proxy"},
-    {"guiDefaultColumn2","Filter"},
-    {"guiDefaultColumn2Description","The number of filters that have been applied"},
-    {"guiDefaultColumn3","Image"},
-    {"guiDefaultColumn3Description","The number of images that have been blocked"},
-    {"guiDefaultColumn4","De-anim"},
-    {"guiDefaultColumn4Description","The number of GIF images that have been de-animated"},
-    {"guiDefaultColumn5","Cookie"},
-    {"guiDefaultColumn5Description","The number of cookies that have been blocked"},
-    {"guiDefaultColumn6","Referer"},
-    {"guiDefaultColumn6Description","The number of referers blocked"},
-    {"guiDefaultColumn7","ACL"},
-    {"guiDefaultColumn7Description","The number of blocks due to ACL restrictions"},
-    {"guiDefaultColumn8","UA"},
-    {"guiDefaultColumn8Description","The number of times user-agent header was removed"},
-    {"guiDefaultColumn9","FROM"},
-    {"guiDefaultColumn9Description","The number of times the from: header was removed"},
-    {"guiDefaultColumn10","FORWARD"},
-    {"guiDefaultColumn10Description","The number of times the forward header was removed"},
-  };
-
-  /** Returns the contents of this ListBundleResources class.
-   * @see java.util.ListBundleResource
-   * @return Object an Object array containing this classes resources.
-   */
-  protected Object[][] getContents()
-  {
-    return contents;
-  }
-
-  /** Returns the name of the language this class represents.
-   * @return String the name of the language this class represents.
-   */
-
-  public String toString()
-  {
-    return "English";
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/BevelArrowIcon.java b/src/java/org/privoxy/activityconsole/BevelArrowIcon.java
deleted file mode 100644 (file)
index c430c9a..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Painting details for rendering the beveled arrow icon.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.awt.*;
-import javax.swing.*;
-
-/** 
- * Painting details for rendering the beveled arrow icon.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class BevelArrowIcon implements Icon
-{
-
-  private static final String
-  COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  public static final int UP    = 0;         // direction
-  public static final int DOWN  = 1;
-
-  private static final int DEFAULT_SIZE = 11;
-
-  private Color edge1;
-  private Color edge2;
-  private Color fill;
-  private int size;
-  private int direction;
-
-  public BevelArrowIcon(int direction, boolean isRaisedView, boolean isPressedView)
-  {
-    if (isRaisedView)
-    {
-      if (isPressedView)
-      {
-        init( UIManager.getColor("controlLtHighlight"),
-              UIManager.getColor("controlDkShadow"),
-              UIManager.getColor("controlShadow"),
-              DEFAULT_SIZE, direction);
-      }
-      else
-      {
-        init( UIManager.getColor("controlHighlight"),
-              UIManager.getColor("controlShadow"),
-              UIManager.getColor("control"),
-              DEFAULT_SIZE, direction);
-      }
-    }
-    else
-    {
-      if (isPressedView)
-      {
-        init( UIManager.getColor("controlDkShadow"),
-              UIManager.getColor("controlLtHighlight"),
-              UIManager.getColor("controlShadow"),
-              DEFAULT_SIZE, direction);
-      }
-      else
-      {
-        init( UIManager.getColor("controlShadow"),
-              UIManager.getColor("controlHighlight"),
-              UIManager.getColor("control"),
-              DEFAULT_SIZE, direction);
-      }
-    }
-  }
-
-  public BevelArrowIcon(Color edge1, Color edge2, Color fill,
-                        int size, int direction)
-  {
-    init(edge1, edge2, fill, size, direction);
-  }
-
-
-  public void paintIcon(Component c, Graphics g, int x, int y)
-  {
-    switch (direction)
-    {
-    case DOWN: drawDownArrow(g, x, y); break;
-    case   UP: drawUpArrow(g, x, y);   break;
-    }
-  }
-
-  public int getIconWidth()
-  {
-    return size;
-  }
-
-  public int getIconHeight()
-  {
-    return size;
-  }
-
-
-  private void init(Color edge1, Color edge2, Color fill,
-                    int size, int direction)
-  {
-    this.edge1 = edge1;
-    this.edge2 = edge2;
-    this.fill = fill;
-    this.size = size;
-    this.direction = direction;
-  }
-
-  private void drawDownArrow(Graphics g, int xo, int yo)
-  {
-    g.setColor(edge1);
-    g.drawLine(xo, yo,   xo+size-1, yo);
-    g.drawLine(xo, yo+1, xo+size-3, yo+1);
-    g.setColor(edge2);
-    g.drawLine(xo+size-2, yo+1, xo+size-1, yo+1);
-    int x = xo+1;
-    int y = yo+2;
-    int dx = size-6;      
-    while (y+1 < yo+size)
-    {
-      g.setColor(edge1);
-      g.drawLine(x, y,   x+1, y);
-      g.drawLine(x, y+1, x+1, y+1);
-      if (0 < dx)
-      {
-        g.setColor(fill);
-        g.drawLine(x+2, y,   x+1+dx, y);
-        g.drawLine(x+2, y+1, x+1+dx, y+1);
-      }
-      g.setColor(edge2);
-      g.drawLine(x+dx+2, y,   x+dx+3, y);
-      g.drawLine(x+dx+2, y+1, x+dx+3, y+1);
-      x += 1;
-      y += 2;
-      dx -= 2;     
-    }
-    g.setColor(edge1);
-    g.drawLine(xo+(size/2), yo+size-1, xo+(size/2), yo+size-1); 
-  }
-
-  private void drawUpArrow(Graphics g, int xo, int yo)
-  {
-    g.setColor(edge1);
-    int x = xo+(size/2);
-    g.drawLine(x, yo, x, yo); 
-    x--;
-    int y = yo+1;
-    int dx = 0;
-    while (y+3 < yo+size)
-    {
-      g.setColor(edge1);
-      g.drawLine(x, y,   x+1, y);
-      g.drawLine(x, y+1, x+1, y+1);
-      if (0 < dx)
-      {
-        g.setColor(fill);
-        g.drawLine(x+2, y,   x+1+dx, y);
-        g.drawLine(x+2, y+1, x+1+dx, y+1);
-      }
-      g.setColor(edge2);
-      g.drawLine(x+dx+2, y,   x+dx+3, y);
-      g.drawLine(x+dx+2, y+1, x+dx+3, y+1);
-      x -= 1;
-      y += 2;
-      dx += 2;     
-    }
-    g.setColor(edge1);
-    g.drawLine(xo, yo+size-3,   xo+1, yo+size-3);
-    g.setColor(edge2);
-    g.drawLine(xo+2, yo+size-2, xo+size-1, yo+size-2);
-    g.drawLine(xo, yo+size-1, xo+size, yo+size-1);
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/BlankIcon.java b/src/java/org/privoxy/activityconsole/BlankIcon.java
deleted file mode 100644 (file)
index a2b5859..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Painting details for rendering a blank icon.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.awt. *;
-import javax.swing. *;
-
-/** 
- * Painting details for rendering a blank icon.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class BlankIcon implements Icon
-{
-
-  private static final String
-  COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  private Color fillColor;
-  private int size;
-
-  public BlankIcon()
-  {
-    this(null, 11);
-  }
-
-  public BlankIcon(Color color, int size)
-  {
-    fillColor = color;
-    this.size = size;    
-  }
-
-  public void paintIcon(Component c, Graphics g, int x, int y)
-  {
-    if (fillColor != null)
-    {
-      g.setColor(fillColor);
-      g.drawRect(x, y, size-1, size-1);
-    }
-  }
-
-  public int getIconWidth()
-  {
-    return size;
-  }
-
-  public int getIconHeight()
-  {
-    return size;
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/ColumnRef.java b/src/java/org/privoxy/activityconsole/ColumnRef.java
deleted file mode 100644 (file)
index a7743ca..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Provides a mapping between a column's key and its
- *                description.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-/** 
- * Provides a mapping between a column's key and its description.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class ColumnRef
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  int _key = -1;
-  String _description = "";
-
-  public ColumnRef(String description, int key)
-  {
-    _description = description;
-    _key = key;
-  }
-
-  public String getDescription()
-  {
-    return _description;
-  }
-
-  public int getKey()
-  {
-    return _key;
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/Copyright.java b/src/java/org/privoxy/activityconsole/Copyright.java
deleted file mode 100644 (file)
index 8fd7935..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Houses the static text of the copyright statement.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-/** 
- * Houses the static text of the copyright statement.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class Copyright
-{
-  public static final String COPYRIGHT =
-    "Written by and Copyright (C) 2003 the SourceForge"
-   +"Privoxy team. http://www.privoxy.org/";
-}
diff --git a/src/java/org/privoxy/activityconsole/ServerThread.java b/src/java/org/privoxy/activityconsole/ServerThread.java
deleted file mode 100644 (file)
index 2748e7b..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Listen on a specified port for status updates from
- *                Privoxy.  If we get a suitable update, pass it along
- *                to the GUI for processing.  We need to handle getting
- *                shut down and restarting on another port gracefully.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.net.*;
-import java.io.*;
-import java.text.*;
-import java.util.*;
-import javax.swing.*;
-
-/** 
- * Listens on a specified port for status updates from Privoxy. 
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class ServerThread extends Thread
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  static ActivityConsoleGui _parent;
-  static int _port;
-  static ServerSocket _serverSocket;
-
-  public ServerThread(ActivityConsoleGui parent, int thePort)
-  {
-    _parent = parent;
-    _port = thePort;
-  }
-
-  public void run()
-  {
-    try
-    {
-      _serverSocket = new ServerSocket(_port);        
-      try
-      {
-        // System.out.println( "ServerThread serving port "+_port+"." );
-        boolean shouldRun = true;
-        while (shouldRun)
-        {
-          Socket theSocket = _serverSocket.accept();
-          if (!Thread.currentThread().interrupted())
-          {
-            BufferedReader in = 
-            new BufferedReader(new InputStreamReader(theSocket.getInputStream()));
-            String line = in.readLine();
-            /* Ensure the line isn't null and it's not way, way too long... */
-            if ((line != null) && (line.length() < 65536))
-            {
-              _parent.updateStats(line,theSocket.getInetAddress().getHostName());
-            }
-            in.close();
-            theSocket.close();
-          }
-          else
-          {
-            shouldRun = false;
-          }
-        }
-        _serverSocket.close();
-        _serverSocket = null;
-      }
-      catch (IOException io)
-      {
-        try
-        {
-          _serverSocket.close();
-          _serverSocket = null;
-        }
-        catch (IOException fred)
-        {
-          _serverSocket = null;
-        }
-      }
-    }
-    catch (IOException io)
-    {
-      System.err.println(io);
-      JOptionPane.showMessageDialog(null, io, "Alert: port "+_port, JOptionPane.ERROR_MESSAGE);
-    }
-  }
-
-  public void doClose()
-  {
-    try
-    {
-      _serverSocket.close();
-    }
-    catch (IOException fred)
-    {
-    }
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/SortButtonRenderer.java b/src/java/org/privoxy/activityconsole/SortButtonRenderer.java
deleted file mode 100644 (file)
index 8c75977..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Swing details of rendering a column header as a button.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.util.*;
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.table.*;
-
-/** 
- * Swing details of rendering a column header as a button.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class SortButtonRenderer extends JButton implements TableCellRenderer
-{
-
-  private static final String
-  COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  public static final int NONE = 0;
-  public static final int DOWN = 1;
-  public static final int UP   = 2;
-
-  int pushedColumn;
-  Hashtable state;
-  JButton downButton,upButton;
-
-  public SortButtonRenderer()
-  {
-    pushedColumn   = -1;
-    state = new Hashtable();
-
-    setMargin(new Insets(0,0,0,0));
-    setHorizontalTextPosition(LEFT);
-    setIcon(new BlankIcon());
-
-    downButton = new JButton();
-    downButton.setMargin(new Insets(0,0,0,0));
-    downButton.setHorizontalTextPosition(LEFT);
-    downButton.setIcon(new BevelArrowIcon(BevelArrowIcon.DOWN, false, false));
-    downButton.setPressedIcon(new BevelArrowIcon(BevelArrowIcon.DOWN, false, true));
-
-    upButton = new JButton();
-    upButton.setMargin(new Insets(0,0,0,0));
-    upButton.setHorizontalTextPosition(LEFT);
-    upButton.setIcon(new BevelArrowIcon(BevelArrowIcon.UP, false, false));
-    upButton.setPressedIcon(new BevelArrowIcon(BevelArrowIcon.UP, false, true));
-
-  }
-
-  public Component getTableCellRendererComponent(JTable table, Object value,
-                                                 boolean isSelected, boolean hasFocus, int row, int column)
-  {
-    JButton button = this;
-    Object obj = state.get(new Integer(column));
-    if (obj != null)
-    {
-      if (((Integer)obj).intValue() == DOWN)
-      {
-        button = downButton;
-      }
-      else
-      {
-        button = upButton;
-      }
-    }
-    button.setText((value ==null) ? "" : value.toString());
-    boolean isPressed = (column == pushedColumn);
-    button.getModel().setPressed(isPressed);
-    button.getModel().setArmed(isPressed);
-    return button;
-  }
-
-  public void setPressedColumn(int col)
-  {
-    pushedColumn = col;
-  }
-
-  public void setSelectedColumn(int col)
-  {
-    if (col < 0) return;
-    Integer value = null;
-    Object obj = state.get(new Integer(col));
-    if (obj == null)
-    {
-      value = new Integer(DOWN);
-    }
-    else
-    {
-      if (((Integer)obj).intValue() == DOWN)
-      {
-        value = new Integer(UP);
-      }
-      else
-      {
-        value = new Integer(DOWN);
-      }
-    }
-    state.clear();
-    state.put(new Integer(col), value);
-  } 
-
-  public int getState(int col)
-  {
-    int retValue;
-    Object obj = state.get(new Integer(col));
-    if (obj == null)
-    {
-      retValue = NONE;
-    }
-    else
-    {
-      if (((Integer)obj).intValue() == DOWN)
-      {
-        retValue = DOWN;
-      }
-      else
-      {
-        retValue = UP;
-      }
-    }
-    return retValue;
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/SortableTableModel.java b/src/java/org/privoxy/activityconsole/SortableTableModel.java
deleted file mode 100644 (file)
index 87a14ec..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Sorting JTable model.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.util.*;
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.table.*;
-
-/** 
- * Sorting JTable table model.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class SortableTableModel extends DefaultTableModel
-{
-
-  private static final String
-  COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  int[] indexes;
-  TableSorter sorter;
-
-  public SortableTableModel()
-  {
-  }
-
-  public SortableTableModel(Vector data, Vector columnNames)
-  {
-    super(data, columnNames);
-  }
-  public Object getValueAt(int row, int col)
-  {
-    int rowIndex = row;
-    if (indexes != null)
-    {
-      rowIndex = indexes[row];
-    }
-    return super.getValueAt(rowIndex, col);
-  }
-
-  public void setValueAt(Object value, int row, int col)
-  {
-    int rowIndex = row;
-    if (indexes != null)
-    {
-      rowIndex = indexes[row];
-    }
-    super.setValueAt(value, rowIndex, col);
-  }
-
-  public void sortByColumn(int column, boolean isAscent)
-  {
-    if (sorter == null)
-    {
-      sorter = new TableSorter(this);
-    }
-    sorter.sort(column, isAscent);   
-    fireTableDataChanged();
-  }
-
-  public int[] getIndexes()
-  {
-    int n = getRowCount();
-    if (indexes != null)
-    {
-      if (indexes.length == n)
-      {
-        return indexes;
-      }
-    }
-    indexes = new int[n];
-    for (int i=0; i<n; i++)
-    {
-      indexes[i] = i;
-    }
-    return indexes;
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/Stat.java b/src/java/org/privoxy/activityconsole/Stat.java
deleted file mode 100644 (file)
index 1a7e282..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  A structification of a statistic element: a key
- *                associated with a value.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-/** 
- * A structification of a statistic element: a key associated with a value.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class Stat
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  int _key = -1, _value = 0;
-
-  public Stat(int key, int value)
-  {
-    _key = key;
-    _value = value;
-  }
-
-  public int getKey()
-  {
-    return _key;
-  }
-
-  public int getValue()
-  {
-    return _value;
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/StatWidget.java b/src/java/org/privoxy/activityconsole/StatWidget.java
deleted file mode 100644 (file)
index 30e4329..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  A graphical element (specifically, a JPanel) that 
- *                displays a little box of color and a number.  When
- *                tweaked with a new number, the color changes for a
- *                set period of time, then resets to the previous 
- *                color.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.awt.*;
-import javax.swing.*;
-import javax.swing.table.*;
-
-/** 
- * A graphical element that displays a little box of color and a number.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class StatWidget extends JPanel implements Comparable
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  private JPanel _statusIcon;
-  private JLabel _valueLabel;
-  private int _status;
-  private int _value;
-  private int _row, _col;
-  private JTable _table = null;
-  private StatWidgetThread _thread;
-  Color activityColor = Color.yellow;
-  Color inactivityColor = getBackground().darker();
-
-  public StatWidget(int initialValue, int statusDurationMillis)
-  {
-    _value = initialValue;
-    _statusIcon = new JPanel();
-    _statusIcon.setBackground(inactivityColor);
-    _valueLabel = new JLabel(new Integer(initialValue).toString());
-    this.setLayout(new GridBagLayout());
-    ActivityConsoleGuiUtil.constrain(this, _statusIcon,
-                              1, 1, // X, Y Coordinates
-                              1, 1, // Grid width, height
-                              GridBagConstraints.NONE,  // Fill value
-                              GridBagConstraints.WEST,  // Anchor value
-                              0.0,0.0,  // Weight X, Y
-                              0, 1, 0, 1 ); // Top, left, bottom, right insets
-    ActivityConsoleGuiUtil.constrain(this, _valueLabel,
-                              2, 1, // X, Y Coordinates
-                              1, 1, // Grid width, height
-                              GridBagConstraints.HORIZONTAL,  // Fill value
-                              GridBagConstraints.WEST,  // Anchor value
-                              1.0,0.0,  // Weight X, Y
-                              0, 1, 0, 1 ); // Top, left, bottom, right insets
-    _thread = new StatWidgetThread(this, statusDurationMillis);
-    _thread.start();
-  }
-
-  public void updateValue(int newValue)
-  {
-    if (_value != newValue)
-    {
-      _value = newValue;
-      _valueLabel.setText(new Integer(newValue).toString());
-      _statusIcon.setBackground(activityColor);
-      if (_table != null)
-        ((AbstractTableModel)_table.getModel()).fireTableCellUpdated(_row,_table.convertColumnIndexToModel(_col));
-      _thread.interrupt();
-    }
-  }
-
-  public void setRowColTable(int row, int col, JTable table)
-  {
-    _row = row;
-    _col = col;
-    _table = table;
-  }
-
-  public int getRow()
-  {
-    return _row;
-  }
-
-  public int getCol()
-  {
-    return _col;
-  }
-
-  public int getValue()
-  {
-    return _value;
-  }
-
-  public void timerPop()
-  {
-    _statusIcon.setBackground(inactivityColor);
-    if (_table != null)
-      ((AbstractTableModel)_table.getModel()).fireTableCellUpdated(_row,_table.convertColumnIndexToModel(_col));
-  }
-
-  public int compareTo(Object compare)
-  {
-    int compareValue = ((StatWidget)compare).getValue();
-    if (_value < compareValue)
-      return 1;
-    else if (_value == compareValue)
-      return 0;
-    else
-      return -1;
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/StatWidgetThread.java b/src/java/org/privoxy/activityconsole/StatWidgetThread.java
deleted file mode 100644 (file)
index 2584935..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Part of the StatWidget, the thread that manages the
- *                timing of the swatch of color.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import  java.io.*;
-import  java.util.*;
-
-/** 
- * The thread that manages the timing of the swatch of color of the StatWidget.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class StatWidgetThread extends Thread
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  int _statusDurationMillis = 0;
-  Date _nextUpdate = null;
-  StatWidget _parent = null;
-
-  public StatWidgetThread(StatWidget parent, int statusDurationMillis)
-  {
-    _parent = parent;
-    _statusDurationMillis = statusDurationMillis;
-  }
-
-  public final void run()
-  {
-    boolean snooze = false;
-    int sleepFor;
-
-    while (1==1)
-    {
-      /* Check once before we wait at all, just in case... */
-      if (_nextUpdate != null)
-        snooze = checkTimer();
-      if (snooze == true)
-        sleepFor = _statusDurationMillis;
-      else
-        sleepFor = 540000 + (int)(Math.random() * 60000); /* Sit around for 10 minutes plus or minus a minute */
-      try
-      {
-        sleep(sleepFor);
-        if (_nextUpdate != null)
-          snooze = checkTimer();
-      }
-      catch (Throwable t2)
-      {
-        pulse();
-        snooze = true;
-      }
-    }
-  }
-
-  public void pulse()
-  {
-    _nextUpdate = new Date(new Date().getTime() + _statusDurationMillis);
-  }
-
-  public boolean checkTimer()
-  {
-    boolean returnVal = true;
-    Date now = new Date();
-    if (now.after(_nextUpdate))
-    {
-      _parent.timerPop();
-      _nextUpdate = null;
-      returnVal = false;
-    }
-    return returnVal;
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/StringUtil.java b/src/java/org/privoxy/activityconsole/StringUtil.java
deleted file mode 100644 (file)
index e453081..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Utility string functions.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-/** 
- * Utility string functions.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-class StringUtil
-{
-  private static final String
-    COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  /****************************************************************************
-  * This method replaces the preValue with the postValue in the originalString.
-  *
-  * @param originalString the string to have replacements
-  * @param preValue The substring value that the string currently contains
-  * @param postValue The substring value to replace the preValue
-  * @param recursive true if replacements should occur recursively
-  *
-  * @return String representing the substituted value(s)
-  ****************************************************************************/
-  public static final String replaceSubstring( String originalString
-                                               , String preValue
-                                               , String postValue
-                                               , boolean recursive
-                                             )
-  {
-    String finalString = originalString;
-    int previousFind = originalString.length();
-
-    int index = originalString.lastIndexOf(preValue);
-    while (index > -1        &&
-           index < previousFind
-          )
-    {
-      previousFind = index;
-
-      finalString = originalString.substring(0,index)
-                    + postValue
-                    + finalString.substring(index+preValue.length());
-
-      index = finalString.lastIndexOf(preValue,previousFind);
-      if (!recursive)
-      {
-        if (index == previousFind)
-          previousFind--;
-        index = finalString.lastIndexOf(preValue,previousFind);
-      }
-    }
-
-    return finalString;
-  }
-
-  /****************************************************************************
-  * This method replaces the preValue with the postValue in the originalString.
-  *
-  * @param originalString the string to have replacements
-  * @param preValue The substring value that the string currently contains
-  * @param postValue The substring value to replace the preValue
-  *
-  * @return String representing the substituted value(s)
-  ****************************************************************************/
-  public static final String replaceSubstring( String originalString
-                                               , String preValue
-                                               , String postValue
-                                             )
-  {
-    return(replaceSubstring(originalString, preValue, postValue, false));
-  }
-}
diff --git a/src/java/org/privoxy/activityconsole/TableSorter.java b/src/java/org/privoxy/activityconsole/TableSorter.java
deleted file mode 100644 (file)
index 8b61f3c..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*********************************************************************
- *
- * File        :  $Source$
- *
- * Purpose     :  Sorts JTable rows.
- *
- * Copyright   :  Written by and Copyright (C) 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log$
- *********************************************************************/
-
-package org.privoxy.activityconsole;
-
-import java.awt.*;
-import java.util.*;
-import javax.swing.*;
-import javax.swing.table.*;
-
-
-/** 
- * Sorts JTable rows.
- * @author Last Modified By: $Author$
- * @version $Rev$-$Date$$State$
- */
-public class TableSorter
-{
-  private static final String
-  COPYRIGHT = org.privoxy.activityconsole.Copyright.COPYRIGHT;
-
-  SortableTableModel model;
-
-  public TableSorter(SortableTableModel model)
-  {
-    this.model = model;
-  }
-
-
-  //n2 selection
-  public void sort(int column, boolean isAscent)
-  {
-    int n = model.getRowCount();
-    int[] indexes = model.getIndexes();   
-
-    for (int i=0; i<n-1; i++)
-    {
-      int k = i;
-      for (int j=i+1; j<n; j++)
-      {
-        if (isAscent)
-        {
-          if (compare(column, j, k) < 0)
-          {
-            k = j;
-          }
-        }
-        else
-        {
-          if (compare(column, j, k) > 0)
-          {
-            k = j;
-          }
-        }
-      }
-      int tmp = indexes[i];
-      indexes[i] = indexes[k];
-      indexes[k] = tmp;
-    }
-  }
-
-
-  // comparators
-  public int compare(int column, int row1, int row2)
-  {
-    Object o1 = model.getValueAt(row1, column);
-    Object o2 = model.getValueAt(row2, column); 
-    if (o1 == null && o2 == null)
-    {
-      return  0; 
-    }
-    else if (o1 == null)
-    {
-      return -1; 
-    }
-    else if (o2 == null)
-    {
-      return  1; 
-    }
-    else
-    {
-      Class type = model.getColumnClass(column);
-      if (type.getSuperclass() == Number.class)
-      {
-        return compare((Number)o1, (Number)o2);
-      }
-      else if (type == String.class)
-      {
-        return((String)o1).compareTo((String)o2);
-      }
-      else if (type == Date.class)
-      {
-        return compare((Date)o1, (Date)o2);
-      }
-      else if (type == Boolean.class)
-      {
-        return compare((Boolean)o1, (Boolean)o2);
-      }
-      else if (o1 instanceof StatWidget)
-      {
-        return((StatWidget)o1).compareTo((StatWidget)o2);
-      }
-      else
-      {
-        return((String)o1).compareTo((String)o2);
-      }      
-    }
-  }
-
-  public int compare(Number o1, Number o2)
-  {
-    double n1 = o1.doubleValue();
-    double n2 = o2.doubleValue();
-    if (n1 < n2)
-    {
-      return -1;
-    }
-    else if (n1 > n2)
-    {
-      return 1;
-    }
-    else
-    {
-      return 0;
-    }
-  }
-
-  public int compare(Date o1, Date o2)
-  {
-    long n1 = o1.getTime();
-    long n2 = o2.getTime();
-    if (n1 < n2)
-    {
-      return -1;
-    }
-    else if (n1 > n2)
-    {
-      return 1;
-    }
-    else
-    {
-      return 0;
-    }
-  }
-
-  public int compare(Boolean o1, Boolean o2)
-  {
-    boolean b1 = o1.booleanValue();
-    boolean b2 = o2.booleanValue();
-    if (b1 == b2)
-    {
-      return 0;
-    }
-    else if (b1)
-    {
-      return 1;
-    }
-    else
-    {
-      return -1;
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/java/org/privoxy/activityconsole/acon.bat b/src/java/org/privoxy/activityconsole/acon.bat
deleted file mode 100755 (executable)
index 69b18c7..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-@REM /*********************************************************************  
-@REM  *                                                                      
-@REM  * File        :  $Source$                                              
-@REM  *                                                                      
-@REM  * Purpose     :  Start the Privoxy statistics viewer on Win32 platforms
-@REM  *                                                                      
-@REM  * Copyright   :  Written by and Copyright (C) 2003 the SourceForge     
-@REM  *                Privoxy team. http://www.privoxy.org/                 
-@REM  *                                                                      
-@REM  *                Based on the Internet Junkbuster originally written   
-@REM  *                by and Copyright (C) 1997 Anonymous Coders and        
-@REM  *                Junkbusters Corporation.  http://www.junkbusters.com  
-@REM  *                                                                      
-@REM  *                This program is free software; you can redistribute it
-@REM  *                and/or modify it under the terms of the GNU General   
-@REM  *                Public License as published by the Free Software      
-@REM  *                Foundation; either version 2 of the License, or (at   
-@REM  *                your option) any later version.                       
-@REM  *                                                                      
-@REM  *                This program is distributed in the hope that it will  
-@REM  *                be useful, but WITHOUT ANY WARRANTY; without even the 
-@REM  *                implied warranty of MERCHANTABILITY or FITNESS FOR A  
-@REM  *                PARTICULAR PURPOSE.  See the GNU General Public       
-@REM  *                License for more details.                             
-@REM  *                                                                      
-@REM  *                The GNU General Public License should be included with
-@REM  *                this file.  If not, you can view it at                
-@REM  *                http://www.gnu.org/copyleft/gpl.html                  
-@REM  *                or write to the Free Software Foundation, Inc., 59    
-@REM  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-@REM  *                                                                      
-@REM  *********************************************************************/ 
-@REM
-@REM Syntax:
-@REM
-@REM acon [port_to_serve]
-@REM
-@REM - Requires Java 1.2+
-@REM
-@start /B java -classpath "%CLASSPATH%";ActivityConsole.jar org.privoxy.activityconsole.ActivityConsole %1
diff --git a/src/java/org/privoxy/activityconsole/acon.cmd b/src/java/org/privoxy/activityconsole/acon.cmd
deleted file mode 100755 (executable)
index 9e2cdf5..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-@REM /*********************************************************************  
-@REM  *                                                                      
-@REM  * File        :  $Source$                                              
-@REM  *                                                                      
-@REM  * Purpose     :  Start the Privoxy statistics viewer on OS/2 platforms
-@REM  *                                                                      
-@REM  * Copyright   :  Written by and Copyright (C) 2003 the SourceForge     
-@REM  *                Privoxy team. http://www.privoxy.org/                 
-@REM  *                                                                      
-@REM  *                Based on the Internet Junkbuster originally written   
-@REM  *                by and Copyright (C) 1997 Anonymous Coders and        
-@REM  *                Junkbusters Corporation.  http://www.junkbusters.com  
-@REM  *                                                                      
-@REM  *                This program is free software; you can redistribute it
-@REM  *                and/or modify it under the terms of the GNU General   
-@REM  *                Public License as published by the Free Software      
-@REM  *                Foundation; either version 2 of the License, or (at   
-@REM  *                your option) any later version.                       
-@REM  *                                                                      
-@REM  *                This program is distributed in the hope that it will  
-@REM  *                be useful, but WITHOUT ANY WARRANTY; without even the 
-@REM  *                implied warranty of MERCHANTABILITY or FITNESS FOR A  
-@REM  *                PARTICULAR PURPOSE.  See the GNU General Public       
-@REM  *                License for more details.                             
-@REM  *                                                                      
-@REM  *                The GNU General Public License should be included with
-@REM  *                this file.  If not, you can view it at                
-@REM  *                http://www.gnu.org/copyleft/gpl.html                  
-@REM  *                or write to the Free Software Foundation, Inc., 59    
-@REM  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-@REM  *                                                                      
-@REM  *********************************************************************/ 
-@REM
-@REM Syntax:
-@REM
-@REM acon [port_to_serve]
-@REM
-@REM - Requires Swing (i.e. swingall.jar) in CLASSPATH or Java 1.3+
-@REM
-@start /MIN /C java -classpath %CLASSPATH%;ActivityConsole.jar org.privoxy.activityconsole.ActivityConsole %1
diff --git a/src/java/org/privoxy/activityconsole/acon.manifest b/src/java/org/privoxy/activityconsole/acon.manifest
deleted file mode 100644 (file)
index a742cc4..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: 1.3.1 (IBM Corporation)
-Main-Class: org.privoxy.activityconsole.ActivityConsole
diff --git a/src/java/org/privoxy/activityconsole/acon.sh b/src/java/org/privoxy/activityconsole/acon.sh
deleted file mode 100644 (file)
index 9bba555..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# /*********************************************************************  
-#  *                                                                      
-#  * File        :  $Source$                                              
-#  *                                                                      
-#  * Purpose     :  Start the Privoxy statistics viewer on *NIX platforms
-#  *                                                                      
-#  * Copyright   :  Written by and Copyright (C) 2003 the SourceForge     
-#  *                Privoxy team. http://www.privoxy.org/                 
-#  *                                                                      
-#  *                Based on the Internet Junkbuster originally written   
-#  *                by and Copyright (C) 1997 Anonymous Coders and        
-#  *                Junkbusters Corporation.  http://www.junkbusters.com  
-#  *                                                                      
-#  *                This program is free software; you can redistribute it
-#  *                and/or modify it under the terms of the GNU General   
-#  *                Public License as published by the Free Software      
-#  *                Foundation; either version 2 of the License, or (at   
-#  *                your option) any later version.                       
-#  *                                                                      
-#  *                This program is distributed in the hope that it will  
-#  *                be useful, but WITHOUT ANY WARRANTY; without even the 
-#  *                implied warranty of MERCHANTABILITY or FITNESS FOR A  
-#  *                PARTICULAR PURPOSE.  See the GNU General Public       
-#  *                License for more details.                             
-#  *                                                                      
-#  *                The GNU General Public License should be included with
-#  *                this file.  If not, you can view it at                
-#  *                http://www.gnu.org/copyleft/gpl.html                  
-#  *                or write to the Free Software Foundation, Inc., 59    
-#  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-#  *                                                                      
-#  *********************************************************************/ 
-#
-# Syntax:
-#
-# ./acon.sh [port_to_serve]
-#
-# - Requires Swing (i.e. swingall.jar) in CLASSPATH or Java 1.2+
-#
-java -classpath $CLASSPATH:ActivityConsole.jar org.privoxy.activityconsole.ActivityConsole $1
diff --git a/src/stats.c b/src/stats.c
deleted file mode 100644 (file)
index df6f01d..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-const char stats_rcs[] = "$Id: stats.c,v 2.4 2003/01/06 02:03:13 david__schmidt Exp $";
-/*********************************************************************
- *
- * File        :  $Source: /cvsroot/ijbswa/current/src/stats.c,v $
- *
- * Purpose     :  Functions and definitions for accumulating and
- *                sending statistics to an "external" stats console
- *
- * Copyright   :  Written by and Copyright (C) 2002, 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log: stats.c,v $
- *    Revision 2.4  2003/01/06 02:03:13  david__schmidt
- *    Update stats protocol now that the console is actually running
- *
- *
- *********************************************************************/
-\f
-
-#include <string.h>
-#ifdef unix
-#include <sys/signal.h>
-#include <unistd.h>
-#include <pthread.h>
-#endif
-#include "project.h"
-#include "errlog.h"
-#include "miscutil.h"
-#include "stats.h"
-#include "ipc.h"
-#include "jbsockets.h"
-
-const char stats_h_rcs[] = STATS_H_VERSION;
-const char ipc_h_rcs[] = IPC_H_VERSION;
-static IPC_MUTEX_LOCK stats_lock;
-
-stats_struct *main_stats;
-
-/*********************************************************************
- *
- * Function    :  init_stats_config
- *
- * Description :  Initializes the statistics array and spawns a thread
- *                to transmit statistics to the listening party.
- *
- * Parameters  :
- *          1  :  config = Privoxy configuration.
- *
- * Returns     :  N/A
- *
- *********************************************************************/
-void init_stats_config(struct configuration_spec * config)
-{
-  int i, child_id;
-#ifdef unix
-  pthread_attr_t attr;
-  pthread_t thread;
-#endif /* def unix */
-
-  main_stats = zalloc(sizeof(stats_struct));
-  IPC_CREATE_MUTEX(stats_lock);
-  for (i=0; i < STATS_MAX_KEYS; i++)
-  {
-    main_stats->stats_array[i] = 0;
-  }
-  main_stats->config = config;
-
-  accumulate_stats(STATS_PRIVOXY_PORT, config->hport);
-
-  /*
-   * Start the timing/sending thread - I stole this from jcc.c. 
-   * The idea is to get a mutiplatform thread started.
-   * YMMV - please tweak for your platform!
-   */
-
-/* this is a switch () statment in the C preprocessor - ugh */
-#undef SELECTED_ONE_OPTION
-
-/* Use pthreads in preference to any native code */
-#if defined(FEATURE_PTHREAD) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-  signal(SIGALRM, null_routine);  /* Ignore the SIGALRM signal */
-  pthread_attr_init(&attr);
-  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-  child_id = (pthread_create(&thread, &attr,
-    (void*)forward_stats, main_stats) ? -1 : 0);
-  pthread_attr_destroy(&attr);
-#endif
-
-#if defined(_WIN32) && !defined(_CYGWIN) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-  child_id = _beginthread(
-    (void (*)(void *))forward_stats,
-    64 * 1024,
-    main_stats);
-#endif
-
-#if defined(__OS2__) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-  child_id = _beginthread(
-    (void(* _Optlink)(void*))forward_stats,
-    NULL,
-    64 * 1024,
-    main_stats);
-#endif
-
-#if defined(__BEOS__) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-  thread_id tid = spawn_thread
-    (server_thread, "forward_stats", B_NORMAL_PRIORITY, NULL);
-  if ((tid >= 0) && (resume_thread(tid) == B_OK))
-  {
-    child_id = (int) tid;
-  }
-  else
-  {
-    child_id = -1;
-  }
-#endif
-
-#if defined(AMIGA) && !defined(SELECTED_ONE_OPTION)
-#define SELECTED_ONE_OPTION
-  if((child_id = (int)CreateNewProcTags(
-     NP_Entry, (ULONG)server_thread,
-     NP_Output, Output(),
-     NP_CloseOutput, FALSE,
-     NP_Name, (ULONG)"privoxy child",
-     NP_StackSize, 200*1024,
-     TAG_DONE)))
-  {
-     childs++;
-     Signal((struct Task *)child_id, SIGF_SINGLE);
-     Wait(SIGF_SINGLE);
-  }
-#endif
-
-#if !defined(SELECTED_ONE_OPTION)
-  /* I don't think the IPC will really work in a fork()'d environment,
-   * so proceed with caution.  FIXME.
-   */
-#error FIXME - stats will not work without pthreads!
-  child_id = fork();
-
-  if (child_id == 0)   /* child */
-  {
-     forward_stats(main_stats);
-     _exit(0);
-  }
-  else if (child_id > 0) /* parent */
-  {
-  }
-#endif
-
-#undef SELECTED_ONE_OPTION
-/* end of c preprocessor switch () */
-
-}
-
-/*********************************************************************
- *
- * Function    :  update_stats_config
- *
- * Description :  Updates the pointer to the most recent Privoxy
- *                configuration changes.
- *
- * Parameters  :
- *          1  :  config = Privoxy configuration.
- *
- * Returns     :  N/A
- *
- *********************************************************************/
-void update_stats_config(struct configuration_spec * config)
-{
-  main_stats->config = config;
-}
-
-/*********************************************************************
- *
- * Function    :  accumulate_stats
- *
- * Description :  Updates one element of the statistics array with a
- *                single integer value.
- *
- * Parameters  :
- *          1  :  key = the key into the stats array
- *          2  :  value = the value to add to the current stats key
- *
- * Returns     :  N/A
- *
- *********************************************************************/
-void accumulate_stats(int key, int value)
-{
-  if (key < STATS_MAX_KEYS)
-  {
-    IPC_LOCK_MUTEX(stats_lock);
-    main_stats->stats_array[key] += value;
-    main_stats->changed = 1;
-    IPC_UNLOCK_MUTEX(stats_lock);
-  }
-}
-
-/*********************************************************************
- *
- * Function    :  forward_stats
- *
- * Description :  Main routine for the statistics thread; loops and 
- *                periodically checks if there's anything to send.  If
- *                so, call send_stats() to do the work.
- *
- * Parameters  :  N/A
- *
- * Returns     :  N/A
- *
- *********************************************************************/
-void *forward_stats(stats_struct *pstats)
-{
-  int local_stats_array[STATS_MAX_KEYS];
-  for (;;)
-  {
-    IPC_SLEEP_SECONDS(pstats->config->activity_freq);
-    if (pstats->changed == 1)
-    {
-      IPC_LOCK_MUTEX(stats_lock);
-      memcpy(local_stats_array,pstats->stats_array,sizeof(pstats->stats_array));
-      pstats->changed = 0;
-      IPC_UNLOCK_MUTEX(stats_lock);
-      send_stats(local_stats_array);
-    }
-  }
-}
-
-/*********************************************************************
- *
- * Function    :  send_stats
- *
- * Description :  Attempt to send statistics to the listening console.
- *                Stats are formatted as a clear-text string for now -
- *                no need for any encoding fanciness just yet.
- *
- * Parameters  :
- *          1  :  local_stats_array, a pointer to a local copy of the
- *                statistics array.
- *
- * Returns     :  N/A
- *
- *********************************************************************/
-void send_stats(int local_stats_array[])
-{
-  jb_socket sk;
-  char *msg = NULL, tmp_msg[64];
-  int i;
-
-  /* Here, we initiate the socket send to the console */
-  sk = connect_to(main_stats->config->activity_address,main_stats->config->activity_port,NULL);
-  if (sk > 0)
-  {
-    /* max size of a key looks like this: xxxxx:xxxxxb */
-    msg = zalloc(
-      STATS_MAX_KEYS * 64  /* Space for keys - much bigger than necessary for safety */
-      );
-    if (msg)
-    {
-      for (i = 0; i < STATS_MAX_KEYS; i++)
-      {
-        sprintf(tmp_msg,"%d:%d ",i,local_stats_array[i]);
-        strcat(msg,tmp_msg);
-      }
-      write_socket(sk,msg,strlen(msg));
-      freez(msg);
-    }
-    close_socket(sk);
-  }
-}
-
-/*********************************************************************
- *
- * Function    :  null_routine
- *
- * Description :  Called when hit by a signal in unix; do nothing.
- *
- * Parameters  :
- *          1  :  sig - the integer signal
- *
- * Returns     :  N/A
- *
- *********************************************************************/
-#ifdef unix
-void null_routine(int sig)
-{
-  /* sigignore(sig); */
-}
-#endif /* def unix */
diff --git a/src/stats.h b/src/stats.h
deleted file mode 100644 (file)
index 089d4cf..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef STATS_H_INCLUDED
-#define STATS_H_INCLUDED
-#define STATS_H_VERSION "$Id: stats.h,v 2.3 2002/12/30 19:56:16 david__schmidt Exp $"
-/*********************************************************************
- *
- * File        :  $Source: /cvsroot/ijbswa/current/src/stats.h,v $
- *
- * Purpose     :  Functions and definitions for accumulating and
- *                sending statistics to an "external" stats console
- *
- * Copyright   :  Written by and Copyright (C) 2002, 2003 the SourceForge
- *                Privoxy team. http://www.privoxy.org/
- *
- *                Based on the Internet Junkbuster originally written
- *                by and Copyright (C) 1997 Anonymous Coders and 
- *                Junkbusters Corporation.  http://www.junkbusters.com
- *
- *                This program is free software; you can redistribute it 
- *                and/or modify it under the terms of the GNU General
- *                Public License as published by the Free Software
- *                Foundation; either version 2 of the License, or (at
- *                your option) any later version.
- *
- *                This program is distributed in the hope that it will
- *                be useful, but WITHOUT ANY WARRANTY; without even the
- *                implied warranty of MERCHANTABILITY or FITNESS FOR A
- *                PARTICULAR PURPOSE.  See the GNU General Public
- *                License for more details.
- *
- *                The GNU General Public License should be included with
- *                this file.  If not, you can view it at
- *                http://www.gnu.org/copyleft/gpl.html
- *                or write to the Free Software Foundation, Inc., 59
- *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * Revisions   :
- *    $Log: stats.h,v $
- *    Revision 2.3  2002/12/30 19:56:16  david__schmidt
- *    End of initial drop of statistics console infrastructure.  Data stream
- *    is transmitted on the stats port every interval, provided the data has
- *    changed since the last transmission.  More work probably needs to be
- *    done with regard to multiplatform threading; I stole the thread spawning
- *    code from jcc.c, but haven't been able to test it everywhere.
- *
- *    Revision 2.2  2002/12/28 04:17:58  david__schmidt
- *    Fix null_routine on unix
- *
- *    Revision 2.1  2002/12/28 03:58:19  david__schmidt
- *    Initial drop of dashboard instrumentation - enabled with
- *    --enable-activity-console
- *
- *
- *********************************************************************/
-\f
-
-/* Revision control strings from this header and associated .c file */
-extern const char stats_rcs[];
-extern const char stats_h_rcs[];
-
-/* Global variables */
-
-/* These are the different types of statistics we will be gathering. */
-#define STATS_PRIVOXY_PORT 0
-#define STATS_REQUEST 1
-#define STATS_FILTER 2
-#define STATS_IMAGE_BLOCK 3
-#define STATS_GIF_DEANIMATE 4
-#define STATS_COOKIE 5
-#define STATS_REFERER 6
-#define STATS_ACL_RESTRICT 7
-#define STATS_CLIENT_UA 8
-#define STATS_CLIENT_FROM 9
-#define STATS_CLIENT_X_FORWARDED 10
-/** Define the maximum number of 'keys' we'll be sending.  Always keep this
-  * number one greater than the last actual key; it is used to define an 
-  * array (i.e. int stats[STATS_MAX_KEYS]. */
-#define STATS_MAX_KEYS 11
-
-/* Functions */
-
-void init_stats_config(struct configuration_spec * config);
-void update_stats_config(struct configuration_spec * config);
-void accumulate_stats(int key, int value);
-void *forward_stats();
-void send_stats(int p_local_stats_array[]);
-#ifdef unix
-void null_routine(int sig);
-#endif /* def unix */
-
-/* Typedefs */
-
-typedef struct
-{
-  int changed;
-  int stats_array[STATS_MAX_KEYS];
-  struct configuration_spec *config;
-} stats_struct;
-
-#endif /* ndef STATS_H_INCLUDED */
-
-/*
-  Local Variables:
-  tab-width: 3
-  end:
-*/
similarity index 98%
rename from src/ssplit.c
rename to ssplit.c
index 1c3a2f5..397b71d 100644 (file)
+++ b/ssplit.c
@@ -1,7 +1,7 @@
 const char ssplit_rcs[] = "$Id: ssplit.c,v 1.6 2002/03/26 22:29:55 swa Exp $";
 /*********************************************************************
  *
 const char ssplit_rcs[] = "$Id: ssplit.c,v 1.6 2002/03/26 22:29:55 swa Exp $";
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/ssplit.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/ssplit.c,v $
  *
  * Purpose     :  A function to split a string at specified deliminters.
  *
  *
  * Purpose     :  A function to split a string at specified deliminters.
  *
similarity index 97%
rename from src/ssplit.h
rename to ssplit.h
index 9e1e8ed..f1f5156 100644 (file)
+++ b/ssplit.h
@@ -3,7 +3,7 @@
 #define SSPLIT_H_VERSION "$Id: ssplit.h,v 1.5 2002/03/26 22:29:55 swa Exp $"
 /*********************************************************************
  *
 #define SSPLIT_H_VERSION "$Id: ssplit.h,v 1.5 2002/03/26 22:29:55 swa Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/ssplit.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/ssplit.h,v $
  *
  * Purpose     :  A function to split a string at specified deliminters.
  *
  *
  * Purpose     :  A function to split a string at specified deliminters.
  *
index 140dd1e..cbb1672 100644 (file)
@@ -2,7 +2,7 @@
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/standard.action,v $
 # 
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/standard.action,v $
 # 
-#  $Id: standard.action,v 1.5 2002/10/20 19:33:07 hal9 Exp $
+#  $Id: standard.action,v 1.2.2.9 2003/04/01 09:49:50 oes Exp $
 #
 #  Purpose     :  Provide prefedined sets of actions, see
 #                 http://www.privoxy.org/user-manual/actions-file.html
 #
 #  Purpose     :  Provide prefedined sets of actions, see
 #                 http://www.privoxy.org/user-manual/actions-file.html
@@ -14,8 +14,7 @@
 
 ######################################################################
 #
 
 ######################################################################
 #
-# CAUTION: MODYFING THIS FILE IS *NOT* RECOMMENDED for the average
-#          user.
+# CAUTION: THIS FILE IS *NOT* THE PLACE TO CUSTOMIZE YOUR CONFIGURATION!
 #
 #          If you want to customize Privoxy to suit your needs, 
 #          you can alter the default section in default.action and/or
 #
 #          If you want to customize Privoxy to suit your needs, 
 #          you can alter the default section in default.action and/or
 -downgrade-http-version \
 -fast-redirects \
 +filter{js-annoyances} \
 -downgrade-http-version \
 -fast-redirects \
 +filter{js-annoyances} \
+-filter{js-events} \
 +filter{html-annoyances} \
 -filter{content-cookies} \
 +filter{html-annoyances} \
 -filter{content-cookies} \
-+filter{webbugs} \
--filter{popups} \
--filter{frameset-borders} \
 -filter{refresh-tags} \
 -filter{refresh-tags} \
++filter{unsolicited-popups} \
+-filter{all-popups} \
 -filter{img-reorder} \
 +filter{banners-by-size} \
 -filter{banners-by-link} \
 -filter{img-reorder} \
 +filter{banners-by-size} \
 -filter{banners-by-link} \
--filter{fun} \
-+filter{nimda} \
++filter{webbugs} \
+-filter{tiny-textforms} \
+-filter{jumping-windows} \
+-filter{frameset-borders} \
+-filter{demoronizer} \
 -filter{shockwave-flash} \
 -filter{quicktime-kioskmode} \
 -filter{shockwave-flash} \
 -filter{quicktime-kioskmode} \
--filter{js-events} \
+-filter{fun} \
 -filter{crude-parental} \
 -filter{crude-parental} \
+-filter{ie-exploits} \
+-filter{site-specifics} \
 -handle-as-image \
 +hide-forwarded-for-headers \
 +hide-from-header{block} \
 -handle-as-image \
 +hide-forwarded-for-headers \
 +hide-from-header{block} \
@@ -79,21 +83,26 @@ standard.Cautious
 -downgrade-http-version \
 -fast-redirects \
 +filter{js-annoyances} \
 -downgrade-http-version \
 -fast-redirects \
 +filter{js-annoyances} \
+-filter{js-events} \
 +filter{html-annoyances} \
 +filter{html-annoyances} \
-+filter{content-cookies} \
-+filter{webbugs} \
-+filter{popups} \
--filter{frameset-borders} \
--filter{refresh-tags} \
--filter{img-reorder} \
+-filter{content-cookies} \
++filter{refresh-tags} \
++filter{unsolicited-popups} \
+-filter{all-popups} \
++filter{img-reorder} \
 +filter{banners-by-size} \
 -filter{banners-by-link} \
 +filter{banners-by-size} \
 -filter{banners-by-link} \
--filter{fun} \
-+filter{nimda} \
++filter{webbugs} \
+-filter{tiny-textforms} \
++filter{jumping-windows} \
+-filter{frameset-borders} \
+-filter{demoronizer} \
 -filter{shockwave-flash} \
 -filter{shockwave-flash} \
-+filter{quicktime-kioskmode} \
--filter{js-events} \
+-filter{quicktime-kioskmode} \
+-filter{fun} \
 -filter{crude-parental} \
 -filter{crude-parental} \
++filter{ie-exploits} \
+-filter{site-specifics} \
 -handle-as-image \
 +hide-forwarded-for-headers \
 +hide-from-header{block} \
 -handle-as-image \
 +hide-forwarded-for-headers \
 +hide-from-header{block} \
@@ -122,21 +131,26 @@ standard.Medium
 -downgrade-http-version \
 +fast-redirects \
 +filter{js-annoyances} \
 -downgrade-http-version \
 +fast-redirects \
 +filter{js-annoyances} \
+-filter{js-events} \
 +filter{html-annoyances} \
 +filter{content-cookies} \
 +filter{html-annoyances} \
 +filter{content-cookies} \
-+filter{webbugs} \
-+filter{popups} \
-+filter{frameset-borders} \
--filter{refresh-tags} \
++filter{refresh-tags} \
++filter{unsolicited-popups} \
+-filter{all-popups} \
 +filter{img-reorder} \
 +filter{banners-by-size} \
 +filter{banners-by-link} \
 +filter{img-reorder} \
 +filter{banners-by-size} \
 +filter{banners-by-link} \
-+filter{fun} \
-+filter{nimda} \
++filter{webbugs} \
+-filter{tiny-textforms} \
++filter{jumping-windows} \
++filter{frameset-borders} \
++filter{demoronizer} \
 -filter{shockwave-flash} \
 +filter{quicktime-kioskmode} \
 -filter{shockwave-flash} \
 +filter{quicktime-kioskmode} \
--filter{js-events} \
++filter{fun} \
 -filter{crude-parental} \
 -filter{crude-parental} \
+-filter{ie-exploits} \
+-filter{site-specifics} \
 -handle-as-image \
 +hide-forwarded-for-headers \
 +hide-from-header{block} \
 -handle-as-image \
 +hide-forwarded-for-headers \
 +hide-from-header{block} \
@@ -150,4 +164,4 @@ standard.Medium
 -session-cookies-only \
 +set-image-blocker{pattern} \
 }
 -session-cookies-only \
 +set-image-blocker{pattern} \
 }
-standard.Advanced
+standard.Adventuresome
index d6e3d01..8255fe3 100644 (file)
 #  protocol:
 #    The request's protocol: http:// or https://
 #  hostport:
 #  protocol:
 #    The request's protocol: http:// or https://
 #  hostport:
-#    The host and port part of the request that lead to this problem
+#    The host and port part of the blocked request's URL.
 #  path:
 #  path:
-#    The path part of the request that lead to this problem
+#    The path part of the blocked request's URL.
+#  path-ue:
+#    The path part of the blocked request's URL, url-encoded.
 #
 #
 # CONDITIONAL SYMBOLS FOR THIS TEMPLATE AND THEIR DEPANDANT SYMBOLS:
 #
 #
 # CONDITIONAL SYMBOLS FOR THIS TEMPLATE AND THEIR DEPANDANT SYMBOLS:
      document.write('\
    <p class="small" align="center"> \
     <a href="@default-cgi@" target="_blank">Privoxy</a> blocked <b>@protocol@@hostport@@path@</b>. \
      document.write('\
    <p class="small" align="center"> \
     <a href="@default-cgi@" target="_blank">Privoxy</a> blocked <b>@protocol@@hostport@@path@</b>. \
-    <br><a href="@default-cgi@show-url-info?url=@hostport@@path@" target="_blank">See why</a> \
+    <br><a href="@default-cgi@show-url-info?url=@hostport@@path-ue@" target="_blank">See why</a> \
     <!-- @if-force-support-start --> \
     or <a href="http://@hostport@@force-prefix@@path@">go there anyway</a>. \
     <!-- if-force-support-end@ --> \
     <!-- @if-force-support-start --> \
     or <a href="http://@hostport@@force-prefix@@path@">go there anyway</a>. \
     <!-- if-force-support-end@ --> \
       <td class="box" colspan="2"> \
         <h2>Request for blocked URL</h2> \
         <p>Your request for <b>@protocol@@hostport@@path@</b> was blocked. \
       <td class="box" colspan="2"> \
         <h2>Request for blocked URL</h2> \
         <p>Your request for <b>@protocol@@hostport@@path@</b> was blocked. \
-          <br><a href="@default-cgi@show-url-info?url=@hostport@@path@">See why</a> \
+          <br><a href="@default-cgi@show-url-info?url=@hostport@@path-ue@">See why</a> \
     <!-- @if-force-support-start --> \
           or <a href="http://@hostport@@force-prefix@@path@">go there anyway</a>. \
 <!-- if-force-support-end@ --> \
     <!-- @if-force-support-start --> \
           or <a href="http://@hostport@@force-prefix@@path@">go there anyway</a>. \
 <!-- if-force-support-end@ --> \
   <noscript>
    <p class="small" align="center">
     <a href="@default-cgi@" target="_blank">Privoxy</a> blocked <b>@protocol@@hostport@@path@</b>.
   <noscript>
    <p class="small" align="center">
     <a href="@default-cgi@" target="_blank">Privoxy</a> blocked <b>@protocol@@hostport@@path@</b>.
-    <br><a href="@default-cgi@show-url-info?url=@hostport@@path@" target="_blank">See why</a>
+    <br><a href="@default-cgi@show-url-info?url=@hostport@@path-ue@" target="_blank">See why</a>
     <!-- @if-force-support-start -->
     or <a href="http://@hostport@@force-prefix@@path@">go there anyway</a>.
     <!-- if-force-support-end@ -->
     <!-- @if-force-support-start -->
     or <a href="http://@hostport@@force-prefix@@path@">go there anyway</a>.
     <!-- if-force-support-end@ -->
index 9845a64..74d553b 100644 (file)
 
     <tr>
       <td class="warning">
 
     <tr>
       <td class="warning">
-        <h2>Privoxy Configuration page diasabled</h2>
-          <p>The Privoxy administrator has decided to disable this 
-             feature.  If you want to use it, you must ask them to
-             enable it.</p>
-          <p>If you are the Privoxy administrator, you can enable
-             this feature by changing the appropriate line in your
-             configuration file.</p>
+        <h2>Privoxy Configuration access denied</h2>
+          <p>The feature you are trying to access has either been disabled
+             by the Privoxy administrator, or you came here by following an
+             unsafe external link.</p>
+
+          <p>All enabled features are accessible from the
+             <a href="@default-cgi@">main menu</a>.</p>
       </td>
     </tr>
 
       </td>
     </tr>
 
index cad85f3..2295898 100644 (file)
             not be fulfilled, because the connection to <b>@host@</b> (@host-ip@) could not be established.
           </p>
           <p>This is often a temporary failure, so you might just
             not be fulfilled, because the connection to <b>@host@</b> (@host-ip@) could not be established.
           </p>
           <p>This is often a temporary failure, so you might just
-            <a href="@protocol@@hostport@@path@">try again</a> 
-           or look the site up at 
-            <a href="http://www.google.com/search?q=@protocol@@hostport@@path@">Google</a>.
+            <a href="@protocol@@hostport@@path@">try again</a>.
          </p>
       </td>
     </tr>
          </p>
       </td>
     </tr>
index b321341..2edc02f 100644 (file)
@@ -1,6 +1,6 @@
 ##############################################################################
 #
 ##############################################################################
 #
-# File        :  $Source: /cvsroot/ijbswa//current/templates/edit-actions-add-url-form,v $
+# File        :  $Source: /cvsroot/ijbswa/current/templates/edit-actions-add-url-form,v $
 #
 # Purpose     :  Template used to add a URL pattern to the actions file.
 #
 #
 # Purpose     :  Template used to add a URL pattern to the actions file.
 #
index f9f32c6..f97c33a 100644 (file)
 #
 # Revisions   :
 #    $Log: edit-actions-for-url,v $
 #
 # Revisions   :
 #    $Log: edit-actions-for-url,v $
-#    Revision 1.32  2004/10/05 02:03:19  david__schmidt
+#    Revision 1.29.2.5  2004/10/05 03:17:26  david__schmidt
+#    Typo: inspect_jpegs, not inspect-jpegs in form
+#
+#    Revision 1.29.2.4  2004/10/03 12:53:46  david__schmidt
 #    Add the ability to check jpeg images for invalid
 #    lengths of comment blocks.  Defensive strategy
 #    against the exploit:
 #    Add the ability to check jpeg images for invalid
 #    lengths of comment blocks.  Defensive strategy
 #    against the exploit:
-#    Microsoft Security Bulletin MS04-028
+#       Microsoft Security Bulletin MS04-028
 #       Buffer Overrun in JPEG Processing (GDI+) Could
 #       Allow Code Execution (833987)
 #    Enabled with +inspect-jpegs in actions files.
 #
 #       Buffer Overrun in JPEG Processing (GDI+) Could
 #       Allow Code Execution (833987)
 #    Enabled with +inspect-jpegs in actions files.
 #
-#    Revision 1.31  2003/09/22 00:33:01  david__schmidt
-#    Enable sending a custom 'blocked' image.  Shows up as
-#    "image-blocker-custom-file" parameter in config, and
-#    "+set-image-blocker{custom}" in action files.
-#
-#    Revision 1.30  2002/09/05 16:12:02  oes
-#    Synced with stable branch:
-#       Revision 1.29.2.3  2002/08/23 02:22:53  hal9
-#       Fix a perl brain fart with <li> in comments.
-#
-#       Revision 1.29.2.1  2002/08/02 12:51:42  oes
-#       Added top submit button; Consistency with docs: Change default name for action from hide-referer to hide-referrer
-#
 #    Revision 1.29.2.3  2002/08/23 02:22:53  hal9
 #    Fix a perl brain fart with <li> in comments.
 #
 #    Revision 1.29.2.3  2002/08/23 02:22:53  hal9
 #    Fix a perl brain fart with <li> in comments.
 #
@@ -526,6 +516,19 @@ function show_send_wafer_opts(tf)
         id="deanimate_last" @deanimate-gifs-param-last@><label
         for="deanimate_last">last frame</label></td>
     </tr>
         id="deanimate_last" @deanimate-gifs-param-last@><label
         for="deanimate_last">last frame</label></td>
     </tr>
+    <tr class="bg1" align="left" valign="top">
+      <td class="en1" align="center" valign="middle"><input type="radio"
+        name="inspect_jpegs" value="Y" @inspect-jpegs-y@
+        ></td>
+      <td class="dis1" align="center" valign="middle"><input type="radio"
+        name="inspect_jpegs" value="N" @inspect-jpegs-n@
+        ></td>
+      <td class="noc1" align="center" valign="middle"><input type="radio"
+        name="inspect_jpegs" value="X" @inspect-jpegs-x@
+        ></td>
+      <td class="action"><a href="@user-manual@@actions-help-prefix@INSPECT-JPEGS">inspect-jpegs</a></td>
+      <td>Checks jpeg images for malicious content.</td>
+    </tr>
     <tr class="bg1" align="left" valign="top">
       <td class="en1" align="center" valign="middle"><input type="radio"
         name="downgrade_http_version" value="Y" @downgrade-http-version-y@></td>
     <tr class="bg1" align="left" valign="top">
       <td class="en1" align="center" valign="middle"><input type="radio"
         name="downgrade_http_version" value="Y" @downgrade-http-version-y@></td>
@@ -682,19 +685,6 @@ function show_send_wafer_opts(tf)
         <input type="text" name="hide_user_agent_mode" size="40"
         value="@hide-user-agent-param@"></td>
     </tr>
         <input type="text" name="hide_user_agent_mode" size="40"
         value="@hide-user-agent-param@"></td>
     </tr>
-    <tr class="bg1" align="left" valign="top">
-      <td class="en1" align="center" valign="middle"><input type="radio"
-        name="inspect_jpegs" value="Y" @inspect-jpegs-y@
-        ></td>
-      <td class="dis1" align="center" valign="middle"><input type="radio"
-        name="inspect_jpegs" value="N" @inspect-jpegs-n@
-        ></td>
-      <td class="noc1" align="center" valign="middle"><input type="radio"
-        name="inspect_jpegs" value="X" @inspect-jpegs-x@
-        ></td>
-      <td class="action"><a href="@user-manual@@actions-help-prefix@INSPECT-JPEGS">inspect-jpegs</a></td>
-      <td>Checks jpeg images for malicious content.</td>
-    </tr>
     <tr class="bg1" align="left" valign="top">
       <td class="en1" align="center" valign="middle"><input type="radio"
         name="kill_popups" value="Y" @kill-popups-y@
     <tr class="bg1" align="left" valign="top">
       <td class="en1" align="center" valign="middle"><input type="radio"
         name="kill_popups" value="Y" @kill-popups-y@
@@ -832,11 +822,7 @@ function show_send_wafer_opts(tf)
         <input type="radio" name="set_image_blocker_mode" value="blank"
         onclick="set_image_blocker_param_disable(true)"
         id="set_image_blocker_mode_blank" @set-image-blocker-param-blank@><label 
         <input type="radio" name="set_image_blocker_mode" value="blank"
         onclick="set_image_blocker_param_disable(true)"
         id="set_image_blocker_mode_blank" @set-image-blocker-param-blank@><label 
-        for="set_image_blocker_mode_blank">Send a 1x1 transparent image</label><br>
-        <input type="radio" name="set_image_blocker_mode" value="custom"
-        onclick="set_image_blocker_param_disable(true)"
-        id="set_image_blocker_mode_custom" @set-image-blocker-param-custom@><label 
-        for="set_image_blocker_mode_custom">Send a custom image</label><br>
+        for="set_image_blocker_mode_blank">Send a 1x1 transparent GIF</label><br>
         <input type="radio" name="set_image_blocker_mode" value="CUSTOM"
         onclick="set_image_blocker_param_disable(false)"
         id="set_image_blocker_mode_set" @set-image-blocker-param-custom@><label
         <input type="radio" name="set_image_blocker_mode" value="CUSTOM"
         onclick="set_image_blocker_param_disable(false)"
         id="set_image_blocker_mode_set" @set-image-blocker-param-custom@><label
index 952ed14..67fdff7 100644 (file)
@@ -1,7 +1,7 @@
-<tr class="bg1" align="left" valign="top">\r
-  <td class="en1" align="center" valign="middle"><input type="radio" name="filter_r@index@" value="Y" @this-filter-y@></td>\r
-  <td class="dis1" align="center" valign="middle"><input type="radio" name="filter_r@index@" value="N" @this-filter-n@></td>\r
-  <td class="noc1" align="center" valign="middle"><input type="radio" name="filter_r@index@" value="X" @this-filter-x@></td>\r
-  <td class="action"><a href="@user-manual@@actions-help-prefix@FILTER">filter</a> @name@<input type="hidden" name="filter_n@index@" value="@name@"></td>\r
-  <td>@description@</td>\r
-</tr>\r
+<tr class="bg1" align="left" valign="top">
+  <td class="en1" align="center" valign="middle"><input type="radio" name="filter_r@index@" value="Y" @this-filter-y@></td>
+  <td class="dis1" align="center" valign="middle"><input type="radio" name="filter_r@index@" value="N" @this-filter-n@></td>
+  <td class="noc1" align="center" valign="middle"><input type="radio" name="filter_r@index@" value="X" @this-filter-x@></td>
+  <td class="action"><a href="@user-manual@@actions-help-prefix@FILTER">filter</a> @name@<input type="hidden" name="filter_n@index@" value="@name@"></td>
+  <td>@description@</td>
+</tr>
index 06c84b6..c67580d 100644 (file)
 #
 # Revisions   :
 #    $Log: edit-actions-list,v $
 #
 # Revisions   :
 #    $Log: edit-actions-list,v $
-#    Revision 1.27  2002/09/05 16:14:59  oes
-#    Synced with stable branch:
-#        Revision 1.26.2.2  2002/08/23 02:22:53  hal9
-#        Fix a perl brain fart with <li> in comments
+#    Revision 1.26.2.4  2003/12/17 16:35:17  oes
+#    Work around new & silly MSIE behaviour where the request resulting from
+#    changing window.location.href doesn't reveal the referrer anymore
 #
 #
-#        Revision 1.26.2.1  2002/08/22 23:31:54  hal9
-#        Add Documentation Link to menu.
+#    Revision 1.26.2.3  2002/09/25 15:34:09  oes
+#    - Work around JS problem in NS 2.0 (no joke)
+#    - Make JS string edit popup remove the pattern
+#      if edited to empty; make JS add popup do nothing
+#      if pattern empty.
+#
+#    Revision 1.26.2.2  2002/08/23 02:22:53  hal9
+#    Fix a perl brain fart with <li> in comments.
 #
 #    Revision 1.26  2002/05/23 23:37:25  oes
 #    Nit
 #
 #    Revision 1.26  2002/05/23 23:37:25  oes
 #    Nit
@@ -222,32 +227,38 @@ td.indentbuttons {
 // JavaScript-capable browsers will call this function, which does a
 // client-side prompt for speed.  It may kick off the delete directly.
 // It always returns false to cancel following the link.
 // JavaScript-capable browsers will call this function, which does a
 // client-side prompt for speed.  It may kick off the delete directly.
 // It always returns false to cancel following the link.
-function rm_p(pattern,curtext)
+function rm_p(link,pattern,curtext)
 {
    if (window.confirm("Are you sure you want to delete this URL pattern?\nPattern is: "+unescape(curtext)))
 {
    if (window.confirm("Are you sure you want to delete this URL pattern?\nPattern is: "+unescape(curtext)))
-   { window.location.href="edit-actions-remove-url?f=@f@&v=@v@&p="+pattern; }
+   {
+      link.href="edit-actions-remove-url?f=@f@&v=@v@&p="+pattern;
+      return true;
+   }
    return false;
 }
 
    return false;
 }
 
-function e_p(pattern,curtext)
+function e_p(link,pattern,curtext)
 {
    if ((newtext=window.prompt("Edit the pattern to your needs:", unescape(curtext))) != null)
    {
       if (newtext != "")
 {
    if ((newtext=window.prompt("Edit the pattern to your needs:", unescape(curtext))) != null)
    {
       if (newtext != "")
-      { window.location.href="edit-actions-url?f=@f@&v=@v@&p="+pattern+"&u="+escape(newtext); }
+      { link.href="edit-actions-url?f=@f@&v=@v@&p="+pattern+"&u="+escape(newtext); }
       else
       else
-      { window.location.href="edit-actions-remove-url?f=@f@&v=@v@&p="+pattern; }
+      { link.href="edit-actions-remove-url?f=@f@&v=@v@&p="+pattern; }
+      return true;
    }
    return false;
 }
 
    }
    return false;
 }
 
-function a_p(section)
+function a_p(link,section)
 {
    if (((newtext=window.prompt("Enter the new pattern:", "")) != null ) && (newtext != ""))
 {
    if (((newtext=window.prompt("Enter the new pattern:", "")) != null ) && (newtext != ""))
-   { window.location.href="edit-actions-add-url?f=@f@&v=@v@&s="+section+"&u="+escape(newtext); }
+   {
+      link.href="edit-actions-add-url?f=@f@&v=@v@&s="+section+"&u="+escape(newtext);
+      return true;
+   }
    return false;
 }
    return false;
 }
-
 //-->
 </script>
 </head>
 //-->
 </script>
 </head>
index b48bcb5..2913db4 100644 (file)
 #
 # Revisions   :
 #    $Log: edit-actions-list-section,v $
 #
 # Revisions   :
 #    $Log: edit-actions-list-section,v $
+#    Revision 1.15.2.1  2003/12/17 16:35:17  oes
+#    Work around new & silly MSIE behaviour where the request resulting from
+#    changing window.location.href doesn't reveal the referrer anymore
+#
+#    Revision 1.15  2002/05/21 21:02:52  oes
+#    Added more help links
+#
 #    Revision 1.14  2002/05/21 19:12:43  oes
 #     - Added client-side JavaScript versions of edit and add URL forms
 #     - Moved jump targets to before container table cell
 #    Revision 1.14  2002/05/21 19:12:43  oes
 #     - Added client-side JavaScript versions of edit and add URL forms
 #     - Moved jump targets to before container table cell
 <tr class="actions"><td class="indentbuttons"><a href="eafu?f=@f@&amp;v=@v@&amp;s=@s@">Edit</a></td></tr>
 <tr class="actions"><td class="action">@actions@</td></tr>
 <tr class="url"><td class="header"><a href="@user-manual@@actions-help-prefix@AF-PATTERNS">URL patterns</a>:</td></tr>
 <tr class="actions"><td class="indentbuttons"><a href="eafu?f=@f@&amp;v=@v@&amp;s=@s@">Edit</a></td></tr>
 <tr class="actions"><td class="action">@actions@</td></tr>
 <tr class="url"><td class="header"><a href="@user-manual@@actions-help-prefix@AF-PATTERNS">URL patterns</a>:</td></tr>
-<tr class="url"><td class="indentbuttons"><a href="eaa?f=@f@&amp;v=@v@&amp;s=@s@" onclick="return a_p(@s@);">Add</a></td></tr>
+<tr class="url"><td class="indentbuttons"><a href="eaa?f=@f@&amp;v=@v@&amp;s=@s@" onclick="return a_p(this,@s@);">Add</a></td></tr>
 @urls@
 <tr class="adv"><td class="header">Advanced:</td></tr>
 <tr class="adv"><td class="indentbuttons">
 @urls@
 <tr class="adv"><td class="header">Advanced:</td></tr>
 <tr class="adv"><td class="indentbuttons">
index f44eb58..1656c0a 100644 (file)
@@ -1,6 +1,6 @@
 ##############################################################################
 #
 ##############################################################################
 #
-# File        :  $Source: /cvsroot/ijbswa//current/templates/edit-actions-list-url,v $
+# File        :  $Source: /cvsroot/ijbswa/current/templates/edit-actions-list-url,v $
 #
 # Purpose     :  Template which forms part of edit-actions-list
 # 
 #
 # Purpose     :  Template which forms part of edit-actions-list
 # 
 #
 # Revisions   :
 #    $Log: edit-actions-list-url,v $
 #
 # Revisions   :
 #    $Log: edit-actions-list-url,v $
+#    Revision 1.10.2.1  2003/12/17 16:35:17  oes
+#    Work around new & silly MSIE behaviour where the request resulting from
+#    changing window.location.href doesn't reveal the referrer anymore
+#
+#    Revision 1.10  2002/05/21 19:13:14  oes
+#    Added client-side JavaScript versions of edit and add URL forms
+#
 #    Revision 1.9  2002/05/12 15:45:33  jongfoster
 #    Applying [Patch 552094] New templates for edit-actions-list
 #    This cleans up the templates by:
 #    Revision 1.9  2002/05/12 15:45:33  jongfoster
 #    Applying [Patch 552094] New templates for edit-actions-list
 #    This cleans up the templates by:
@@ -79,6 +86,6 @@
 #############################################################################
 <tr class="url" valign="top">
 <td class="indentbuttons"><a name="l@p@"
 #############################################################################
 <tr class="url" valign="top">
 <td class="indentbuttons"><a name="l@p@"
-href="ear?f=@f@&amp;v=@v@&amp;p=@p@" onclick="return rm_p(@p@,'@url@');">Remove</a>&nbsp;&nbsp;&nbsp;<a
-href="eau?f=@f@&amp;v=@v@&amp;p=@p@" onclick="return  e_p(@p@,'@url@');">Edit</a>&nbsp; @url-html@</td>
+href="ear?f=@f@&amp;v=@v@&amp;p=@p@" onclick="return rm_p(this, @p@,'@url@');">Remove</a>&nbsp;&nbsp;&nbsp;<a
+href="eau?f=@f@&amp;v=@v@&amp;p=@p@" onclick="return  e_p(this, @p@,'@url@');">Edit</a>&nbsp; @url-html@</td>
 </tr>
 </tr>
index 201107f..ebd14e6 100644 (file)
@@ -1,6 +1,6 @@
 ##############################################################################
 #
 ##############################################################################
 #
-# File        :  $Source: /cvsroot/ijbswa//current/templates/edit-actions-remove-url-form,v $
+# File        :  $Source: /cvsroot/ijbswa/current/templates/edit-actions-remove-url-form,v $
 #
 # Purpose     :  Template used to confirm removal of a particular URL
 #                pattern from an actions file.  Only used on browsers that
 #
 # Purpose     :  Template used to confirm removal of a particular URL
 #                pattern from an actions file.  Only used on browsers that
index 6abb091..2d3e0b1 100644 (file)
@@ -1,6 +1,6 @@
 ##############################################################################
 #
 ##############################################################################
 #
-# File        :  $Source: /cvsroot/ijbswa//current/templates/edit-actions-url-form,v $
+# File        :  $Source: /cvsroot/ijbswa/current/templates/edit-actions-url-form,v $
 #
 # Purpose     :  Template used to edit a URL pattern in an actions file.
 #
 #
 # Purpose     :  Template used to edit a URL pattern in an actions file.
 #
@@ -31,6 +31,9 @@
 #
 # Revisions   :
 #    $Log: edit-actions-url-form,v $
 #
 # Revisions   :
 #    $Log: edit-actions-url-form,v $
+#    Revision 1.14.2.2  2002/08/23 02:22:53  hal9
+#    Fix a perl brain fart with <li> in comments.
+#
 #    Revision 1.14  2002/05/21 19:14:10  oes
 #    Added button style and jumptarget "cancel" link
 #
 #    Revision 1.14  2002/05/21 19:14:10  oes
 #    Added button style and jumptarget "cancel" link
 #
index 1829604..de73eba 100644 (file)
@@ -1,4 +1,4 @@
         <h1>
         <h1>
-          This is <a href="@homepage@">Privoxy</a> @version@ on @my-hostname@ (@my-ip-address@), port @my-port@,
-          @if-enabled-display-then@enabled@else-not-enabled-display@disabled@endif-enabled-display@
+          This is <a href="@homepage@">Privoxy</a> @version@ on @my-hostname@ (@my-ip-address@), port @my-port@<!-- @if-can-toggle-start -->,
+          @if-enabled-display-then@enabled@else-not-enabled-display@disabled@endif-enabled-display@<!-- if-can-toggle-end@ -->
         </h1>
         </h1>
index 9ab90a8..7e91177 100644 (file)
             could not be fulfilled, because the domain name <b>@host@</b> could not be resolved.
           </p>
           <p>This is often a temporary failure, so you might just
             could not be fulfilled, because the domain name <b>@host@</b> could not be resolved.
           </p>
           <p>This is often a temporary failure, so you might just
-            <a href="@protocol@@hostport@@path@">try again</a>     
-            or look the site up at 
-            <a href="http://www.google.com/search?q=@protocol@@hostport@@path@">Google</a>.
+            <a href="@protocol@@hostport@@path@">try again</a>.
          </p>
       </td>
     </tr>
          </p>
       </td>
     </tr>
index c1fba52..05e627a 100644 (file)
             </tr>
               @actions-filenames@
            <tr>
             </tr>
               @actions-filenames@
            <tr>
-              <th colspan="2"><a href="@user-manual@filter-file.html">Filter File:</a></th>
+              <th colspan="2"><a href="@user-manual@filter-file.html">Filter Files:</a></th>
            </tr>
            <tr>
              <td>
                @re-filter-filename@
              </td>
            </tr>
            <tr>
              <td>
                @re-filter-filename@
              </td>
-             <td class="buttons">
-               <!-- @if-have-filterfile-start -->
-               <a href="show-status?file=filter">View</a>
-               <!-- if-have-filterfile-end@ -->
-             </td>
            </tr>
 <!-- @if-trust-support-start -->
            <tr>
            </tr>
 <!-- @if-trust-support-start -->
            <tr>
similarity index 89%
rename from src/urlmatch.c
rename to urlmatch.c
index 945405a..84eb90a 100644 (file)
@@ -1,7 +1,7 @@
-const char urlmatch_rcs[] = "$Id: urlmatch.c,v 2.1 2002/06/06 19:03:29 jongfoster Exp $";
+const char urlmatch_rcs[] = "$Id: urlmatch.c,v 1.10.2.7 2003/05/17 15:57:24 oes Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa//current/src/urlmatch.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/urlmatch.c,v $
  *
  * Purpose     :  Declares functions to match URLs against URL
  *                patterns.
  *
  * Purpose     :  Declares functions to match URLs against URL
  *                patterns.
@@ -33,12 +33,36 @@ const char urlmatch_rcs[] = "$Id: urlmatch.c,v 2.1 2002/06/06 19:03:29 jongfoste
  *
  * Revisions   :
  *    $Log: urlmatch.c,v $
  *
  * Revisions   :
  *    $Log: urlmatch.c,v $
- *    Revision 2.1  2002/06/06 19:03:29  jongfoster
+ *    Revision 1.10.2.7  2003/05/17 15:57:24  oes
+ *     - parse_http_url now checks memory allocation failure for
+ *       duplication of "*" URL and rejects "*something" URLs
+ *       Closes bug #736344
+ *     - Added a comment to what might look like a bug in
+ *       create_url_spec (see !bug #736931)
+ *     - Comment cosmetics
+ *
+ *    Revision 1.10.2.6  2003/05/07 12:39:48  oes
+ *    Fix typo: Default port for https URLs is 443, not 143.
+ *    Thanks to Scott Tregear for spotting this one.
+ *
+ *    Revision 1.10.2.5  2003/02/28 13:09:29  oes
+ *    Fixed a rare double free condition as per Bug #694713
+ *
+ *    Revision 1.10.2.4  2003/02/28 12:57:44  oes
+ *    Moved freeing of http request structure to its owner
+ *    as per Dan Price's observations in Bug #694713
+ *
+ *    Revision 1.10.2.3  2002/11/12 16:50:40  oes
+ *    Fixed memory leak in parse_http_request() reported by Oliver Stoeneberg. Fixes bug #637073
+ *
+ *    Revision 1.10.2.2  2002/09/25 14:53:15  oes
+ *    Added basic support for OPTIONS and TRACE HTTP methods:
+ *    parse_http_url now recognizes the "*" URI as well as
+ *    the OPTIONS and TRACE method keywords.
+ *
+ *    Revision 1.10.2.1  2002/06/06 19:06:44  jongfoster
  *    Adding support for proprietary Microsoft WebDAV extensions
  *
  *    Adding support for proprietary Microsoft WebDAV extensions
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
- *
  *    Revision 1.10  2002/05/12 21:40:37  jongfoster
  *    - Removing some unused code
  *
  *    Revision 1.10  2002/05/12 21:40:37  jongfoster
  *    - Removing some unused code
  *
@@ -161,8 +185,8 @@ void free_http_request(struct http_request *http)
  *
  * Returns     :  JB_ERR_OK on success
  *                JB_ERR_MEMORY on out of memory
  *
  * Returns     :  JB_ERR_OK on success
  *                JB_ERR_MEMORY on out of memory
- *                JB_ERR_CGI_PARAMS on malformed command/URL
- *                                  or >100 domains deep.
+ *                JB_ERR_PARSE on malformed command/URL
+ *                             or >100 domains deep.
  *
  *********************************************************************/
 jb_err parse_http_url(const char * url,
  *
  *********************************************************************/
 jb_err parse_http_url(const char * url,
@@ -185,6 +209,24 @@ jb_err parse_http_url(const char * url,
    }
 
 
    }
 
 
+   /*
+    * Check for * URI. If found, we're done.
+    */  
+   if (*http->url == '*')
+   {
+      if  ( NULL == (http->path = strdup("*"))
+         || NULL == (http->hostport = strdup("")) ) 
+      {
+         return JB_ERR_MEMORY;
+      }
+      if (http->url[1] != '\0')
+      {
+         return JB_ERR_PARSE;
+      }
+      return JB_ERR_OK;
+   }
+
+
    /*
     * Split URL into protocol,hostport,path.
     */
    /*
     * Split URL into protocol,hostport,path.
     */
@@ -241,13 +283,11 @@ jb_err parse_http_url(const char * url,
          http->hostport = strdup(url_noproto);
       }
 
          http->hostport = strdup(url_noproto);
       }
 
-      free(buf);
+      freez(buf);
 
       if ( (http->path == NULL)
         || (http->hostport == NULL))
       {
 
       if ( (http->path == NULL)
         || (http->hostport == NULL))
       {
-         free(buf);
-         free_http_request(http);
          return JB_ERR_MEMORY;
       }
    }
          return JB_ERR_MEMORY;
       }
    }
@@ -264,7 +304,6 @@ jb_err parse_http_url(const char * url,
       buf = strdup(http->hostport);
       if (buf == NULL)
       {
       buf = strdup(http->hostport);
       if (buf == NULL)
       {
-         free_http_request(http);
          return JB_ERR_MEMORY;
       }
 
          return JB_ERR_MEMORY;
       }
 
@@ -293,7 +332,7 @@ jb_err parse_http_url(const char * url,
       else
       {
          /* No port specified. */
       else
       {
          /* No port specified. */
-         http->port = (http->ssl ? 143 : 80);
+         http->port = (http->ssl ? 443 : 80);
       }
 
       http->host = strdup(host);
       }
 
       http->host = strdup(host);
@@ -302,15 +341,14 @@ jb_err parse_http_url(const char * url,
 
       if (http->host == NULL)
       {
 
       if (http->host == NULL)
       {
-         free_http_request(http);
          return JB_ERR_MEMORY;
       }
    }
 
          return JB_ERR_MEMORY;
       }
    }
 
-
    /*
     * Split domain name so we can compare it against wildcards
     */
    /*
     * Split domain name so we can compare it against wildcards
     */
+
    {
       char *vec[BUFFER_SIZE];
       size_t size;
    {
       char *vec[BUFFER_SIZE];
       size_t size;
@@ -319,7 +357,6 @@ jb_err parse_http_url(const char * url,
       http->dbuffer = strdup(http->host);
       if (NULL == http->dbuffer)
       {
       http->dbuffer = strdup(http->host);
       if (NULL == http->dbuffer)
       {
-         free_http_request(http);
          return JB_ERR_MEMORY;
       }
 
          return JB_ERR_MEMORY;
       }
 
@@ -338,7 +375,6 @@ jb_err parse_http_url(const char * url,
           * Error: More than SZ(vec) components in domain
           *    or: no components in domain
           */
           * Error: More than SZ(vec) components in domain
           *    or: no components in domain
           */
-         free_http_request(http);
          return JB_ERR_PARSE;
       }
 
          return JB_ERR_PARSE;
       }
 
@@ -348,15 +384,14 @@ jb_err parse_http_url(const char * url,
       http->dvec = (char **)malloc(size);
       if (NULL == http->dvec)
       {
       http->dvec = (char **)malloc(size);
       if (NULL == http->dvec)
       {
-         free_http_request(http);
          return JB_ERR_MEMORY;
       }
 
       memcpy(http->dvec, vec, size);
    }
 
          return JB_ERR_MEMORY;
       }
 
       memcpy(http->dvec, vec, size);
    }
 
-
    return JB_ERR_OK;
    return JB_ERR_OK;
+
 }
 
 
 }
 
 
@@ -415,6 +450,8 @@ jb_err parse_http_request(const char *req,
          || (0 == strcmpic(v[0], "post"))
          || (0 == strcmpic(v[0], "put"))
          || (0 == strcmpic(v[0], "delete"))
          || (0 == strcmpic(v[0], "post"))
          || (0 == strcmpic(v[0], "put"))
          || (0 == strcmpic(v[0], "delete"))
+         || (0 == strcmpic(v[0], "options"))
+         || (0 == strcmpic(v[0], "trace"))
  
          /* or a webDAV extension (RFC2518) */
          || (0 == strcmpic(v[0], "propfind"))
  
          /* or a webDAV extension (RFC2518) */
          || (0 == strcmpic(v[0], "propfind"))
@@ -450,7 +487,6 @@ jb_err parse_http_request(const char *req,
    else
    {
       /* Unknown HTTP method */
    else
    {
       /* Unknown HTTP method */
-      /* Maybe one of: trace options purge */
       free(buf);
       return JB_ERR_PARSE;
    }
       free(buf);
       return JB_ERR_PARSE;
    }
@@ -475,12 +511,12 @@ jb_err parse_http_request(const char *req,
      || (http->ver == NULL) )
    {
       free(buf);
      || (http->ver == NULL) )
    {
       free(buf);
-      free_http_request(http);
       return JB_ERR_MEMORY;
    }
 
    free(buf);
    return JB_ERR_OK;
       return JB_ERR_MEMORY;
    }
 
    free(buf);
    return JB_ERR_OK;
+
 }
 
 
 }
 
 
@@ -608,7 +644,7 @@ static int domain_match(const struct url_spec *pattern, const struct http_reques
  * Function    :  create_url_spec
  *
  * Description :  Creates a "url_spec" structure from a string.
  * Function    :  create_url_spec
  *
  * Description :  Creates a "url_spec" structure from a string.
- *                When finished, free with unload_url().
+ *                When finished, free with free_url_spec().
  *
  * Parameters  :
  *          1  :  url = Target url_spec to be filled in.  Will be
  *
  * Parameters  :
  *          1  :  url = Target url_spec to be filled in.  Will be
@@ -633,10 +669,14 @@ jb_err create_url_spec(struct url_spec * url, const char * buf)
    assert(url);
    assert(buf);
 
    assert(url);
    assert(buf);
 
-   /* Zero memory */
+   /*
+    * Zero memory
+    */
    memset(url, '\0', sizeof(*url));
 
    memset(url, '\0', sizeof(*url));
 
-   /* save a copy of the orignal specification */
+   /*
+    * Save a copy of the orignal specification
+    */
    if ((url->spec = strdup(buf)) == NULL)
    {
       return JB_ERR_MEMORY;
    if ((url->spec = strdup(buf)) == NULL)
    {
       return JB_ERR_MEMORY;
@@ -710,7 +750,9 @@ jb_err create_url_spec(struct url_spec * url, const char * buf)
       char *v[150];
       size_t size;
 
       char *v[150];
       size_t size;
 
-      /* Parse domain part */
+      /*
+       * Parse domain part
+       */
       if (buf[strlen(buf) - 1] == '.')
       {
          url->unanchored |= ANCHOR_RIGHT;
       if (buf[strlen(buf) - 1] == '.')
       {
          url->unanchored |= ANCHOR_RIGHT;
@@ -720,8 +762,9 @@ jb_err create_url_spec(struct url_spec * url, const char * buf)
          url->unanchored |= ANCHOR_LEFT;
       }
 
          url->unanchored |= ANCHOR_LEFT;
       }
 
-      /* split domain into components */
-
+      /* 
+       * Split domain into components
+       */
       url->dbuffer = strdup(buf);
       if (NULL == url->dbuffer)
       {
       url->dbuffer = strdup(buf);
       if (NULL == url->dbuffer)
       {
@@ -732,13 +775,17 @@ jb_err create_url_spec(struct url_spec * url, const char * buf)
          return JB_ERR_MEMORY;
       }
 
          return JB_ERR_MEMORY;
       }
 
-      /* map to lower case */
+      /* 
+       * Map to lower case
+       */
       for (p = url->dbuffer; *p ; p++)
       {
          *p = tolower((int)(unsigned char)*p);
       }
 
       for (p = url->dbuffer; *p ; p++)
       {
          *p = tolower((int)(unsigned char)*p);
       }
 
-      /* split the domain name into components */
+      /* 
+       * Split the domain name into components
+       */
       url->dcount = ssplit(url->dbuffer, ".", v, SZ(v), 1, 1);
 
       if (url->dcount < 0)
       url->dcount = ssplit(url->dbuffer, ".", v, SZ(v), 1, 1);
 
       if (url->dcount < 0)
@@ -754,7 +801,9 @@ jb_err create_url_spec(struct url_spec * url, const char * buf)
       else if (url->dcount != 0)
       {
 
       else if (url->dcount != 0)
       {
 
-         /* save a copy of the pointers in dvec */
+         /* 
+          * Save a copy of the pointers in dvec
+          */
          size = url->dcount * sizeof(*url->dvec);
 
          url->dvec = (char **)malloc(size);
          size = url->dcount * sizeof(*url->dvec);
 
          url->dvec = (char **)malloc(size);
@@ -771,6 +820,11 @@ jb_err create_url_spec(struct url_spec * url, const char * buf)
 
          memcpy(url->dvec, v, size);
       }
 
          memcpy(url->dvec, v, size);
       }
+      /*
+       * else dcount == 0 in which case we needn't do anything,
+       * since dvec will never be accessed and the pattern will
+       * match all domains.
+       */
    }
 
    return JB_ERR_OK;
    }
 
    return JB_ERR_OK;
similarity index 98%
rename from src/urlmatch.h
rename to urlmatch.h
index fb4b451..54fb42a 100644 (file)
@@ -3,7 +3,7 @@
 #define URLMATCH_H_VERSION "$Id: urlmatch.h,v 1.3 2002/03/26 22:29:55 swa Exp $"
 /*********************************************************************
  *
 #define URLMATCH_H_VERSION "$Id: urlmatch.h,v 1.3 2002/03/26 22:29:55 swa Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/urlmatch.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/urlmatch.h,v $
  *
  * Purpose     :  Declares functions to match URLs against URL
  *                patterns.
  *
  * Purpose     :  Declares functions to match URLs against URL
  *                patterns.
index 26c4195..37e9cf5 100644 (file)
@@ -2,7 +2,7 @@
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/user.action,v $
 # 
 # 
 #  File        :  $Source: /cvsroot/ijbswa/current/user.action,v $
 # 
-#  $Id: user.action,v 1.2 2002/10/21 02:36:20 hal9 Exp $
+#  $Id: user.action,v 1.1.2.3 2004/01/30 16:48:26 oes Exp $
 #
 #  Purpose     :  User-maintained actions file, see
 #                 http://www.privoxy.org/user-manual/actions-file.html
 #
 #  Purpose     :  User-maintained actions file, see
 #                 http://www.privoxy.org/user-manual/actions-file.html
@@ -52,7 +52,7 @@ shop        = -crunch-all-cookies allow-popups
 # Your favourite blend of filters:
 #
 myfilters   = +filter{html-annoyances} +filter{js-annoyances} +filter{popups}\
 # Your favourite blend of filters:
 #
 myfilters   = +filter{html-annoyances} +filter{js-annoyances} +filter{popups}\
-              +filter{webbugs} +filter{nimda} +filter{banners-by-size} #+filter{fun}
+              +filter{webbugs} +filter{banners-by-size} +filter{fun}
 
 # Allow ads for selected useful free sites:
 #
 
 # Allow ads for selected useful free sites:
 #
@@ -70,6 +70,7 @@ allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}
 # direction, and the processing of cookies to make them only temporary.
 #
 { allow-all-cookies }
 # direction, and the processing of cookies to make them only temporary.
 #
 { allow-all-cookies }
+#.sourceforge.net
 #sunsolve.sun.com
 #slashdot.org
 #.yahoo.com
 #sunsolve.sun.com
 #slashdot.org
 #.yahoo.com
@@ -77,24 +78,28 @@ allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}
 #.redhat.com
 
 # Say the site where you do your homebanking needs to open popup
 #.redhat.com
 
 # Say the site where you do your homebanking needs to open popup
-# windows, but you have chosen to kill popups by default. This will
-# allow it for your-example-bank.com:
+# windows, but you have chosen to kill popups uncoditionally by default.
+# This will allow it for your-example-bank.com:
 #
 #
-{ -filter{popups} -kill-popups }
-.your-example-bank.com
+{ -filter{all-popups} -kill-popups }
+.banking.example.com
 
 
-# Some hosts and some file types you may not want to filter. Privoxy
-# makes no distinctions between regular web pages and downloads done via
-# your web browser if it is an html or text type document.
+# Some hosts and some file types you may not want to filter for
+# various reasons:
 #
 { -filter }
 #
 { -filter }
-#localhost
-#apache_server.mylan
-#  A list of common file extensions that are likely to indicate raw
-#  text, and best if unfiltered.
-#/(.*/)?.*\.(pl|(s|p)?h|c(c|xx|pp)?|tcl||am|init?|cfg?|conf(ig)?|txt|rc|bat)$
-#  Documentation should not need filtering (at least on some sites).
+
+# Technical documentation is likely to contain strings that might
+# erroneously get altered by the JavaScript-oriented filters:
+#
 #.tldp.org
 #.tldp.org
+#/(.*/)?selfhtml/
+
+# And this stupid host sends streaming video with a wrong MIME type,
+# so that Privoxy thinks it is getting HTML and starts filtering:
+#
+stupid-server.example.com/
+
 
 # Example of a simple "block" action. Say you've seen an ad on your
 # favourite page on example.com that you want to get rid of. You have
 
 # Example of a simple "block" action. Say you've seen an ad on your
 # favourite page on example.com that you want to get rid of. You have
@@ -106,21 +111,20 @@ allow-ads   = -block -filter{banners-by-size} -filter{banners-by-link}
 #
 { +block }
 www.example.com/nasty-ads/sponsor.gif
 #
 { +block }
 www.example.com/nasty-ads/sponsor.gif
-#  Here we found one that is not in Privoxy's default blocked list:
-#.adbureau.net
 
 
-# To force URLs that tend to have ad images, but it is difficult for
-# Privoxy to know this since the ultimate returned object is obscured
-# for one reason or another, we can try to force these to be treated as
-# images (and thus avoid Privoxy's "BLOCKED" banner page). Note that if
-# what is returned by the server turns out NOT to be an image, then your
-# browser typically will display a broken icon image. Use cautiously.
+# The URLs of dynamically generated banners, especially from large banner
+# farms, often don't use the well-known image file name extensions, which
+# makes it impossible for Privoxy to guess the file type just by looking
+# at the URL. 
+# You can use the +block-as-image alias defined above for these cases.
+# Note that objects which match this rule but then turn out NOT to be an
+# image are typically rendered as a "broken image" icon by the browser.
+# Use cautiously.
 #
 { +block-as-image }
 #
 { +block-as-image }
-#.trip.com/.*\.swf
 #.doubleclick.net
 #/Realmedia/ads/
 #.doubleclick.net
 #/Realmedia/ads/
-#adremote.
+#ar.atwola.com/
 
 # Now you noticed that the default configuration breaks Forbes
 # Magazine, but you were too lazy to find out which action is the
 
 # Now you noticed that the default configuration breaks Forbes
 # Magazine, but you were too lazy to find out which action is the
@@ -145,7 +149,7 @@ www.example.com/nasty-ads/sponsor.gif
 # additions to the default policies of default.action. Some actions are
 # safe to have their default policies set here though. So let's set a
 # default policy to have a 'blank' image as opposed to the checkerboard
 # additions to the default policies of default.action. Some actions are
 # safe to have their default policies set here though. So let's set a
 # default policy to have a 'blank' image as opposed to the checkerboard
-# pattern for ALL sites. '/' of course matches all URL paths and
+# pattern for ALL sites. '/' of course matches all URLs.
 # patterns:
 #
 { +set-image-blocker{blank} }
 # patterns:
 #
 { +set-image-blocker{blank} }
diff --git a/user.filter b/user.filter
new file mode 100644 (file)
index 0000000..134ec6d
--- /dev/null
@@ -0,0 +1,60 @@
+# ********************************************************************
+# 
+#  File        :  $Source: /cvsroot/ijbswa/current/Attic/user.filter,v $
+# 
+#  $Id: user.filter,v 1.1.2.2 2006/01/29 23:11:40 david__schmidt Exp $
+#
+#  Purpose     :  Rules to process the content of web pages
+# 
+#  Copyright   :  Written by and Copyright (C) 2006 the
+#                 Privoxy team. http://www.privoxy.org/
+#
+# We value your feedback. However, to provide you with the best support,
+# please note:
+#  
+#  * Use the support forum to get help:
+#    http://sourceforge.net/tracker/?group_id=11118&atid=211118
+#  * Submit bugs only thru our bug forum:
+#    http://sourceforge.net/tracker/?group_id=11118&atid=111118 
+#    Make sure that the bug has not already been submitted. Please try
+#    to verify that it is a Privoxy bug, and not a browser or site
+#    bug first. If you are using your own custom configuration, please
+#    try the stock configs to see if the problem is a configuration
+#    related bug. And if not using the latest development snapshot,
+#    please try the latest one. Or even better, CVS sources.
+#  * Submit feature requests only thru our feature request forum:
+#    http://sourceforge.net/tracker/?atid=361118&group_id=11118&func=browse
+#      
+# For any other issues, feel free to use the mailing lists:
+# http://sourceforge.net/mail/?group_id=11118
+#    
+# Anyone interested in actively participating in development and related
+# discussions can join the appropriate mailing list here:
+# http://sourceforge.net/mail/?group_id=11118. Archives are available
+# here too.
+# 
+#################################################################################
+#
+# Syntax:
+#
+# Filters start with a line "FILTER: name description". They are then referrable
+# from the actionsfile with +filter{name}
+#
+# Inside the filters, write one Perl-Style substitution (job) per line.
+# Jobs that precede the first FILTER: line are ignored.
+#
+# For Details see the pcrs manpage contained in this distribution.
+# (and the perlre, perlop and pcre manpages)
+#
+# Note that you are free to choose the delimter as you see fit.
+#
+# Note2: In addidion to the Perl options gimsx, the following nonstandard
+# options are supported:
+# 
+# 'U' turns the default to ungreedy matching.  Add ? to quantifiers to
+#     switch back to greedy.
+# 'T' (trivial) prevents parsing for backreferences in the substitute.
+#     Use if you want to include text like '$&' in your substitute without
+#     quoting.
+# 
+#################################################################################
diff --git a/utils/cvs2cl.pl b/utils/cvs2cl.pl
deleted file mode 100755 (executable)
index 9e6da5a..0000000
+++ /dev/null
@@ -1,1865 +0,0 @@
-#!/bin/sh
-exec perl -w -x $0 ${1+"$@"} # -*- mode: perl; perl-indent-level: 2; -*-
-#!perl -w
-
-##############################################################
-###                                                        ###
-### cvs2cl.pl: produce ChangeLog(s) from `cvs log` output. ###
-###                                                        ###
-##############################################################
-
-## $Revision: 2.38 $
-## $Date: 2001/02/12 19:54:35 $
-## $Author: kfogel $
-##
-##   (C) 1999 Karl Fogel <kfogel@red-bean.com>, under the GNU GPL.
-## 
-##   (Extensively hacked on by Melissa O'Neill <oneill@cs.sfu.ca>.)
-##
-## cvs2cl.pl is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## cvs2cl.pl is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You may have received a copy of the GNU General Public License
-## along with cvs2cl.pl; see the file COPYING.  If not, write to the
-## Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-## Boston, MA 02111-1307, USA.
-
-
-\f
-use strict;
-use Text::Wrap;
-use Time::Local;
-use File::Basename;
-
-\f
-# The Plan:
-#
-# Read in the logs for multiple files, spit out a nice ChangeLog that
-# mirrors the information entered during `cvs commit'.
-#
-# The problem presents some challenges. In an ideal world, we could
-# detect files with the same author, log message, and checkin time --
-# each <filelist, author, time, logmessage> would be a changelog entry.
-# We'd sort them; and spit them out.  Unfortunately, CVS is *not atomic*
-# so checkins can span a range of times.  Also, the directory structure
-# could be hierarchical.
-#
-# Another question is whether we really want to have the ChangeLog
-# exactly reflect commits. An author could issue two related commits,
-# with different log entries, reflecting a single logical change to the
-# source. GNU style ChangeLogs group these under a single author/date.
-# We try to do the same.
-#
-# So, we parse the output of `cvs log', storing log messages in a
-# multilevel hash that stores the mapping:
-#   directory => author => time => message => filelist
-# As we go, we notice "nearby" commit times and store them together
-# (i.e., under the same timestamp), so they appear in the same log
-# entry.
-#
-# When we've read all the logs, we twist this mapping into
-# a time => author => message => filelist mapping for each directory.
-#
-# If we're not using the `--distributed' flag, the directory is always
-# considered to be `./', even as descend into subdirectories.
-
-\f
-############### Globals ################
-
-
-# What we run to generate it:
-my $Log_Source_Command = "cvs log";
-
-# In case we have to print it out:
-my $VERSION = '$Revision: 2.38 $';
-$VERSION =~ s/\S+\s+(\S+)\s+\S+/$1/;
-
-## Vars set by options:
-
-# Print debugging messages?
-my $Debug = 0;
-
-# Just show version and exit?
-my $Print_Version = 0;
-
-# Just print usage message and exit?
-my $Print_Usage = 0;
-
-# Single top-level ChangeLog, or one per subdirectory?
-my $Distributed = 0;
-
-# What file should we generate (defaults to "ChangeLog")?
-my $Log_File_Name = "ChangeLog";
-
-# Grab most recent entry date from existing ChangeLog file, just add
-# to that ChangeLog.
-my $Cumulative = 0;
-
-# Expand usernames to email addresses based on a map file?
-my $User_Map_File = "";
-
-# Output to a file or to stdout?
-my $Output_To_Stdout = 0;
-
-# Eliminate empty log messages?
-my $Prune_Empty_Msgs = 0;
-
-# Don't call Text::Wrap on the body of the message
-my $No_Wrap = 0;
-
-# Separates header from log message.  Code assumes it is either " " or
-# "\n\n", so if there's ever an option to set it to something else,
-# make sure to go through all conditionals that use this var.
-my $After_Header = " ";
-
-# Format more for programs than for humans.
-my $XML_Output = 0;
-
-# Do some special tweaks for log data that was written in FSF
-# ChangeLog style.
-my $FSF_Style = 0;
-
-# Show times in UTC instead of local time
-my $UTC_Times = 0;
-
-# Show day of week in output?
-my $Show_Day_Of_Week = 0;
-
-# Show revision numbers in output?
-my $Show_Revisions = 0;
-
-# Show tags (symbolic names) in output?
-my $Show_Tags = 0;
-
-# Show branches by symbolic name in output?
-my $Show_Branches = 0;
-
-# Show only revisions on these branches or their ancestors.
-my @Follow_Branches;
-
-# Don't bother with files matching this regexp.
-my @Ignore_Files;
-
-# How exactly we match entries.  We definitely want "o",
-# and user might add "i" by using --case-insensitive option.
-my $Case_Insensitive = 0;
-
-# Maybe only show log messages matching a certain regular expression.
-my $Regexp_Gate = "";
-
-# Pass this global option string along to cvs, to the left of `log':
-my $Global_Opts = "";
-
-# Pass this option string along to the cvs log subcommand:
-my $Command_Opts = "";
-
-# Read log output from stdin instead of invoking cvs log?
-my $Input_From_Stdin = 0;
-
-# Don't show filenames in output.
-my $Hide_Filenames = 0;
-
-# Max checkin duration. CVS checkin is not atomic, so we may have checkin
-# times that span a range of time. We assume that checkins will last no
-# longer than $Max_Checkin_Duration seconds, and that similarly, no
-# checkins will happen from the same users with the same message less
-# than $Max_Checkin_Duration seconds apart.
-my $Max_Checkin_Duration = 180;
-
-# What to put at the front of [each] ChangeLog.  
-my $ChangeLog_Header = "";
-
-## end vars set by options.
-
-# In 'cvs log' output, one long unbroken line of equal signs separates
-# files:
-my $file_separator = "======================================="
-                   . "======================================";
-
-# In 'cvs log' output, a shorter line of dashes separates log messages
-# within a file:
-my $logmsg_separator = "----------------------------";
-
-
-############### End globals ############
-
-
-
-\f
-&parse_options ();
-&derive_change_log ();
-
-
-\f
-### Everything below is subroutine definitions. ###
-
-# If accumulating, grab the boundary date from pre-existing ChangeLog.
-sub maybe_grab_accumulation_date ()
-{
-  if (! $Cumulative) {
-    return "";
-  }
-
-  # else
-
-  open (LOG, "$Log_File_Name")
-      or die ("trouble opening $Log_File_Name for reading ($!)");
-
-  my $boundary_date;
-  while (<LOG>)
-  {
-    if (/^(\d\d\d\d-\d\d-\d\d\s+\d\d:\d\d)/)
-    {
-      $boundary_date = "$1";
-      last;
-    }
-  }
-
-  close (LOG);
-  return $boundary_date;
-}
-
-
-# Fills up a ChangeLog structure in the current directory.
-sub derive_change_log ()
-{
-  # See "The Plan" above for a full explanation.
-  
-  my %grand_poobah;
-
-  my $file_full_path;
-  my $time;
-  my $revision;
-  my $author;
-  my $msg_txt;
-  my $detected_file_separator;
-
-  # Might be adding to an existing ChangeLog
-  my $accumulation_date = &maybe_grab_accumulation_date ();
-  if ($accumulation_date) {
-    $Log_Source_Command .= " -d\'>${accumulation_date}\'";
-  }
-
-  # We might be expanding usernames
-  my %usermap;
-
-  # In general, it's probably not very maintainable to use state
-  # variables like this to tell the loop what it's doing at any given
-  # moment, but this is only the first one, and if we never have more
-  # than a few of these, it's okay.
-  my $collecting_symbolic_names = 0;
-  my %symbolic_names;    # Where tag names get stored.
-  my %branch_names;      # We'll grab branch names while we're at it.
-  my %branch_numbers;    # Save some revisions for @Follow_Branches
-  my @branch_roots;      # For showing which files are branch ancestors.
-
-  # Bleargh.  Compensate for a deficiency of custom wrapping.
-  if (($After_Header ne " ") and $FSF_Style)
-  {
-    $After_Header .= "\t";
-  }
-
-  if (! $Input_From_Stdin) {
-    open (LOG_SOURCE, "$Log_Source_Command |")
-        or die "unable to run \"${Log_Source_Command}\"";
-  }
-  else {
-    open (LOG_SOURCE, "-") or die "unable to open stdin for reading";
-  }
-
-  %usermap = &maybe_read_user_map_file ();
-
-  while (<LOG_SOURCE>)
-  {
-    # If on a new file and don't see filename, skip until we find it, and
-    # when we find it, grab it.
-    if ((! (defined $file_full_path)) and /^Working file: (.*)/) 
-    {
-      $file_full_path = $1;
-      if (@Ignore_Files) 
-      {
-        my $base;
-        ($base, undef, undef) = fileparse ($file_full_path);
-        # Ouch, I wish trailing operators in regexps could be
-        # evaluated on the fly!
-        if ($Case_Insensitive) {
-          if (grep ($file_full_path =~ m|$_|i, @Ignore_Files)) {
-            undef $file_full_path;
-          }
-        }
-        elsif (grep ($file_full_path =~ m|$_|, @Ignore_Files)) {
-          undef $file_full_path;
-        }
-      }
-      next;
-    }
-
-    # Just spin wheels if no file defined yet.
-    next if (! $file_full_path);
-
-    # Collect tag names in case we're asked to print them in the output.
-    if (/^symbolic names:$/) {
-      $collecting_symbolic_names = 1;
-      next;  # There's no more info on this line, so skip to next
-    }
-    if ($collecting_symbolic_names)
-    {
-      # All tag names are listed with whitespace in front in cvs log
-      # output; so if see non-whitespace, then we're done collecting.
-      if (/^\S/) {
-        $collecting_symbolic_names = 0;
-      }
-      else    # we're looking at a tag name, so parse & store it
-      {
-        # According to the Cederqvist manual, in node "Tags", tag
-        # names must start with an uppercase or lowercase letter and
-        # can contain uppercase and lowercase letters, digits, `-',
-        # and `_'.  However, it's not our place to enforce that, so
-        # we'll allow anything CVS hands us to be a tag:
-        /^\s+([^:]+): ([\d.]+)$/;
-        my $tag_name = $1;
-        my $tag_rev  = $2;
-
-        # A branch number either has an odd number of digit sections
-        # (and hence an even number of dots), or has ".0." as the
-        # second-to-last digit section.  Test for these conditions.
-        my $real_branch_rev = "";
-        if (($tag_rev =~ /^(\d+\.\d+\.)+\d+$/)   # Even number of dots...
-            and (! ($tag_rev =~ /^(1\.)+1$/)))   # ...but not "1.[1.]1"
-        {
-          $real_branch_rev = $tag_rev;
-        }
-        elsif ($tag_rev =~ /(\d+\.(\d+\.)+)0.(\d+)/)  # Has ".0."
-        {
-          $real_branch_rev = $1 . $3;
-        }
-        # If we got a branch, record its number.
-        if ($real_branch_rev)
-        {
-          $branch_names{$real_branch_rev} = $tag_name;
-          if (@Follow_Branches) {
-            if (grep ($_ eq $tag_name, @Follow_Branches)) {
-              $branch_numbers{$tag_name} = $real_branch_rev;
-            }
-          }
-        }
-        else {
-          # Else it's just a regular (non-branch) tag.
-          push (@{$symbolic_names{$tag_rev}}, $tag_name);
-        }
-      }
-    }
-    # End of code for collecting tag names.
-
-    # If have file name, but not revision, and see revision, then grab
-    # it.  (We collect unconditionally, even though we may or may not
-    # ever use it.)
-    if ((! (defined $revision)) and (/^revision (\d+\.[\d.]+)/))
-    {
-      $revision = $1;
-
-      if (@Follow_Branches)
-      {
-        foreach my $branch (@Follow_Branches) 
-        {
-          # Special case for following trunk revisions
-          if (($branch =~ /^trunk$/i) and ($revision =~ /^[0-9]+\.[0-9]+$/))
-          {
-            goto dengo;
-          }
-
-          my $branch_number = $branch_numbers{$branch};
-          if ($branch_number) 
-          {
-            # Are we on one of the follow branches or an ancestor of
-            # same?
-            #
-            # If this revision is a prefix of the branch number, or
-            # possibly is less in the minormost number, OR if this
-            # branch number is a prefix of the revision, then yes.
-            # Otherwise, no.
-            #
-            # So below, we determine if any of those conditions are
-            # met.
-            
-            # Trivial case: is this revision on the branch?
-            # (Compare this way to avoid regexps that screw up Emacs
-            # indentation, argh.)
-            if ((substr ($revision, 0, ((length ($branch_number)) + 1)))
-                eq ($branch_number . "."))
-            {
-              goto dengo;
-            }
-            # Non-trivial case: check if rev is ancestral to branch
-            elsif ((length ($branch_number)) > (length ($revision)))
-            {
-              $revision =~ /^((?:\d+\.)+)(\d+)$/;
-              my $r_left = $1;          # still has the trailing "."
-              my $r_end = $2;
-              
-              $branch_number =~ /^((?:\d+\.)+)(\d+)\.\d+$/;
-              my $b_left = $1;  # still has trailing "."
-              my $b_mid  = $2;   # has no trailing "."
-
-              if (($r_left eq $b_left)
-                  && ($r_end <= $b_mid))
-              {
-                goto dengo;
-              }
-            }
-          }
-        }
-      }
-      else    # (! @Follow_Branches)
-      {
-        next;
-      }
-
-      # Else we are following branches, but this revision isn't on the
-      # path.  So skip it.
-      undef $revision;
-    dengo:
-      next;
-    }
-    
-    # If we don't have a revision right now, we couldn't possibly
-    # be looking at anything useful. 
-    if (! (defined ($revision))) {
-      $detected_file_separator = /^$file_separator$/o;
-      if ($detected_file_separator) {
-        # No revisions for this file; can happen, e.g. "cvs log -d DATE"
-        goto CLEAR;
-      }
-      else {
-        next;
-      }
-    }
-
-    # If have file name but not date and author, and see date or
-    # author, then grab them:
-    unless (defined $time) 
-    {
-      if (/^date: .*/)
-      {
-        ($time, $author) = &parse_date_and_author ($_);
-        if (defined ($usermap{$author}) and $usermap{$author}) {
-          $author = $usermap{$author};
-        }
-      }
-      else {
-        $detected_file_separator = /^$file_separator$/o;
-        if ($detected_file_separator) {
-          # No revisions for this file; can happen, e.g. "cvs log -d DATE"
-          goto CLEAR;
-        }
-      }
-      # If the date/time/author hasn't been found yet, we couldn't
-      # possibly care about anything we see.  So skip:
-      next;
-    }
-
-    # A "branches: ..." line here indicates that one or more branches
-    # are rooted at this revision.  If we're showing branches, then we
-    # want to show that fact as well, so we collect all the branches
-    # that this is the latest ancestor of and store them in
-    # @branch_roots.  Just for reference, the format of the line we're
-    # seeing at this point is:
-    #
-    #    branches:  1.5.2;  1.5.4;  ...;
-    #
-    # Okay, here goes:
-
-    if (/^branches:\s+(.*);$/)
-    {
-      if ($Show_Branches)
-      {
-        my $lst = $1;
-        $lst =~ s/(1\.)+1;|(1\.)+1$//;  # ignore the trivial branch 1.1.1
-        if ($lst) {
-          @branch_roots = split (/;\s+/, $lst);
-        }
-        else {
-          undef @branch_roots;
-        }
-        next;
-      }
-      else
-      {
-        # Ugh.  This really bothers me.  Suppose we see a log entry
-        # like this:
-        #
-        #    ----------------------------
-        #    revision 1.1
-        #    date: 1999/10/17 03:07:38;  author: jrandom;  state: Exp;
-        #    branches:  1.1.2;
-        #    Intended first line of log message begins here.
-        #    ----------------------------
-        #
-        # The question is, how we can tell the difference between that
-        # log message and a *two*-line log message whose first line is
-        # 
-        #    "branches:  1.1.2;"
-        #
-        # See the problem?  The output of "cvs log" is inherently
-        # ambiguous.
-        #
-        # For now, we punt: we liberally assume that people don't
-        # write log messages like that, and just toss a "branches:"
-        # line if we see it but are not showing branches.  I hope no
-        # one ever loses real log data because of this.
-        next;
-      }
-    }
-
-    # If have file name, time, and author, then we're just grabbing
-    # log message texts:
-    $detected_file_separator = /^$file_separator$/o;
-    if ($detected_file_separator && ! (defined $revision)) {
-      # No revisions for this file; can happen, e.g. "cvs log -d DATE"
-      goto CLEAR;
-    }
-    unless ($detected_file_separator || /^$logmsg_separator$/o)
-    {
-      $msg_txt .= $_;   # Normally, just accumulate the message...
-      next;
-    }
-    # ... until a msg separator is encountered:
-    # Ensure the message contains something:
-    if ((! $msg_txt)
-        || ($msg_txt =~ /^\s*\.\s*$|^\s*$/)
-        || ($msg_txt =~ /\*\*\* empty log message \*\*\*/)) 
-    {
-      if ($Prune_Empty_Msgs) {
-        goto CLEAR;
-      }
-      # else
-      $msg_txt = "[no log message]\n";
-    }
-
-    ### Store it all in the Grand Poobah:
-    {
-      my $dir_key;        # key into %grand_poobah
-      my %qunk;           # complicated little jobbie, see below
-
-      # Each revision of a file has a little data structure (a `qunk') 
-      # associated with it.  That data structure holds not only the
-      # file's name, but any additional information about the file
-      # that might be needed in the output, such as the revision
-      # number, tags, branches, etc.  The reason to have these things
-      # arranged in a data structure, instead of just appending them
-      # textually to the file's name, is that we may want to do a
-      # little rearranging later as we write the output.  For example,
-      # all the files on a given tag/branch will go together, followed
-      # by the tag in parentheses (so trunk or otherwise non-tagged
-      # files would go at the end of the file list for a given log
-      # message).  This rearrangement is a lot easier to do if we
-      # don't have to reparse the text.
-      #
-      # A qunk looks like this:
-      #
-      #   { 
-      #     filename    =>    "hello.c",
-      #     revision    =>    "1.4.3.2",
-      #     time        =>    a timegm() return value (moment of commit)
-      #     tags        =>    [ "tag1", "tag2", ... ],
-      #     branch      =>    "branchname" # There should be only one, right?
-      #     branchroots =>    [ "branchtag1", "branchtag2", ... ]
-      #   }
-
-      if ($Distributed) {
-        # Just the basename, don't include the path.
-        ($qunk{'filename'}, $dir_key, undef) = fileparse ($file_full_path);
-      }
-      else {
-        $dir_key = "./";
-        $qunk{'filename'} = $file_full_path;
-      }
-
-      # This may someday be used in a more sophisticated calculation
-      # of what other files are involved in this commit.  For now, we
-      # don't use it, because the common-commit-detection algorithm is
-      # hypothesized to be "good enough" as it stands.
-      $qunk{'time'} = $time;
-
-      # We might be including revision numbers and/or tags and/or
-      # branch names in the output.  Most of the code from here to
-      # loop-end deals with organizing these in qunk.
-
-      $qunk{'revision'} = $revision;
-
-      # Grab the branch, even though we may or may not need it:
-      $qunk{'revision'} =~ /((?:\d+\.)+)\d+/;
-      my $branch_prefix = $1;
-      $branch_prefix =~ s/\.$//;  # strip off final dot
-      if ($branch_names{$branch_prefix}) {
-        $qunk{'branch'} = $branch_names{$branch_prefix};
-      }
-
-      # If there's anything in the @branch_roots array, then this
-      # revision is the root of at least one branch.  We'll display
-      # them as branch names instead of revision numbers, the
-      # substitution for which is done directly in the array:
-      if (@branch_roots) {
-        my @roots = map { $branch_names{$_} } @branch_roots;
-        $qunk{'branchroots'} = \@roots;
-      }
-
-      # Save tags too.
-      if (defined ($symbolic_names{$revision})) {
-        $qunk{'tags'} = $symbolic_names{$revision};
-        delete $symbolic_names{$revision};
-      }
-
-      # Add this file to the list
-      # (We use many spoonfuls of autovivication magic. Hashes and arrays
-      # will spring into existence if they aren't there already.)
-
-      &debug ("(pushing log msg for ${dir_key}$qunk{'filename'})\n");
-
-      # Store with the files in this commit.  Later we'll loop through
-      # again, making sure that revisions with the same log message
-      # and nearby commit times are grouped together as one commit.
-      push (@{$grand_poobah{$dir_key}{$author}{$time}{$msg_txt}}, \%qunk);
-    }
-
-  CLEAR:
-    # Make way for the next message
-    undef $msg_txt;
-    undef $time;
-    undef $revision;
-    undef $author;
-    undef @branch_roots;
-
-    # Maybe even make way for the next file:
-    if ($detected_file_separator) {
-      undef $file_full_path;
-      undef %branch_names;
-      undef %branch_numbers;
-      undef %symbolic_names;
-    }
-  }
-
-  close (LOG_SOURCE);
-
-  ### Process each ChangeLog
-
-  while (my ($dir,$authorhash) = each %grand_poobah)
-  {
-    &debug ("DOING DIR: $dir\n");
-
-    # Here we twist our hash around, from being
-    #   author => time => message => filelist
-    # in %$authorhash to
-    #   time => author => message => filelist
-    # in %changelog.  
-    #
-    # This is also where we merge entries.  The algorithm proceeds
-    # through the timeline of the changelog with a sliding window of
-    # $Max_Checkin_Duration seconds; within that window, entries that
-    # have the same log message are merged.
-    #
-    # (To save space, we zap %$authorhash after we've copied
-    # everything out of it.) 
-
-    my %changelog;
-    while (my ($author,$timehash) = each %$authorhash)
-    {
-      my $lasttime;
-      my %stamptime;
-      foreach my $time (sort {$main::a <=> $main::b} (keys %$timehash))
-      {
-        my $msghash = $timehash->{$time};
-        while (my ($msg,$qunklist) = each %$msghash)
-        {
-         my $stamptime = $stamptime{$msg};
-          if ((defined $stamptime)
-              and (($time - $stamptime) < $Max_Checkin_Duration)
-              and (defined $changelog{$stamptime}{$author}{$msg}))
-          {
-           push(@{$changelog{$stamptime}{$author}{$msg}}, @$qunklist);
-          }
-          else {
-            $changelog{$time}{$author}{$msg} = $qunklist;
-            $stamptime{$msg} = $time;
-          }
-        }
-      }
-    }
-    undef (%$authorhash);
-
-    ### Now we can write out the ChangeLog!
-
-    my ($logfile_here, $logfile_bak, $tmpfile);
-
-    if (! $Output_To_Stdout) {
-      $logfile_here =  $dir . $Log_File_Name;
-      $logfile_here =~ s/^\.\/\//\//;   # fix any leading ".//" problem
-      $tmpfile      = "${logfile_here}.cvs2cl$$.tmp";
-      $logfile_bak  = "${logfile_here}.bak";
-
-      open (LOG_OUT, ">$tmpfile") or die "Unable to open \"$tmpfile\"";
-    }
-    else {
-      open (LOG_OUT, ">-") or die "Unable to open stdout for writing";
-    }
-
-    print LOG_OUT $ChangeLog_Header;
-
-    if ($XML_Output) {
-      print LOG_OUT "<?xml version=\"1.0\"?>\n\n"
-          . "<changelog xmlns=\"http://www.red-bean.com/xmlns/cvs2cl/\">\n\n";
-    }
-
-    foreach my $time (sort {$main::b <=> $main::a} (keys %changelog))
-    {
-      my $authorhash = $changelog{$time};
-      while (my ($author,$mesghash) = each %$authorhash)
-      {
-        # If XML, escape in outer loop to avoid compound quoting:
-        if ($XML_Output) {
-          $author = &xml_escape ($author);
-        }
-
-        while (my ($msg,$qunklist) = each %$mesghash)
-        {
-          my $files               = &pretty_file_list ($qunklist);
-          my $header_line;          # date and author
-          my $body;                 # see below
-          my $wholething;           # $header_line + $body
-
-          # Set up the date/author line.
-          # kff todo: do some more XML munging here, on the header
-          # part of the entry:
-          my ($ignore,$min,$hour,$mday,$mon,$year,$wday)
-              = $UTC_Times ? gmtime($time) : localtime($time);
-
-          # XML output includes everything else, we might as well make
-          # it always include Day Of Week too, for consistency.
-          if ($Show_Day_Of_Week or $XML_Output) {
-            $wday = ("Sunday", "Monday", "Tuesday", "Wednesday",
-                     "Thursday", "Friday", "Saturday")[$wday];
-            $wday = ($XML_Output) ? "<weekday>${wday}</weekday>\n" : " $wday";
-          }
-          else {
-            $wday = "";
-          }
-
-          if ($XML_Output) {
-            $header_line = 
-                sprintf ("<date>%4u-%02u-%02u</date>\n"
-                         . "${wday}"
-                         . "<time>%02u:%02u</time>\n"
-                         . "<author>%s</author>\n",
-                         $year+1900, $mon+1, $mday, $hour, $min, $author);
-          }
-          else {
-            $header_line = 
-                sprintf ("%4u-%02u-%02u${wday} %02u:%02u  %s\n\n",
-                         $year+1900, $mon+1, $mday, $hour, $min, $author);
-          }
-
-          # Reshape the body according to user preferences.
-          if ($XML_Output) 
-          {
-            $msg = &preprocess_msg_text ($msg);
-            $body = $files . $msg;
-          }
-          elsif ($No_Wrap) 
-          {
-            $msg = &preprocess_msg_text ($msg);
-            $files = wrap ("\t", "     ", "$files");
-            $msg =~ s/\n(.*)/\n\t$1/g;
-            unless ($After_Header eq " ") {
-              $msg =~ s/^(.*)/\t$1/g;
-            }
-            $body = $files . $After_Header . $msg;
-          }
-          else  # do wrapping, either FSF-style or regular
-          {
-            if ($FSF_Style)
-            {
-              $files = wrap ("\t", "        ", "$files");
-              
-              my $files_last_line_len = 0;
-              if ($After_Header eq " ")
-              {
-                $files_last_line_len = &last_line_len ($files);
-                $files_last_line_len += 1;  # for $After_Header
-              }
-              
-              $msg = &wrap_log_entry
-                  ($msg, "\t", 69 - $files_last_line_len, 69);
-              $body = $files . $After_Header . $msg;
-            }
-            else  # not FSF-style
-            {
-              $msg = &preprocess_msg_text ($msg);
-              $body = $files . $After_Header . $msg;
-              $body = wrap ("\t", "        ", "$body");
-            }
-          }
-
-          $wholething = $header_line . $body;
-
-          if ($XML_Output) {
-            $wholething = "<entry>\n${wholething}</entry>\n";
-          }
-
-          # One last check: make sure it passes the regexp test, if the
-          # user asked for that.  We have to do it here, so that the
-          # test can match against information in the header as well
-          # as in the text of the log message.
-
-          # How annoying to duplicate so much code just because I
-          # can't figure out a way to evaluate scalars on the trailing
-          # operator portion of a regular expression.  Grrr.
-          if ($Case_Insensitive) {
-            unless ($Regexp_Gate && ($wholething !~ /$Regexp_Gate/oi)) { 
-              print LOG_OUT "${wholething}\n";
-            }
-          }
-          else {
-            unless ($Regexp_Gate && ($wholething !~ /$Regexp_Gate/o)) { 
-              print LOG_OUT "${wholething}\n";
-            }
-          }
-        }
-      }
-    }
-
-    if ($XML_Output) {
-      print LOG_OUT "</changelog>\n";
-    }
-
-    close (LOG_OUT);
-
-    if (! $Output_To_Stdout) 
-    {
-      # If accumulating, append old data to new before renaming.  But
-      # don't append the most recent entry, since it's already in the
-      # new log due to CVS's idiosyncratic interpretation of "log -d".
-      if ($Cumulative && -f $logfile_here)
-      {
-        open (NEW_LOG, ">>$tmpfile")
-            or die "trouble appending to $tmpfile ($!)";
-
-        open (OLD_LOG, "<$logfile_here")
-            or die "trouble reading from $logfile_here ($!)";
-
-        my $started_first_entry = 0;
-        my $passed_first_entry = 0;
-        while (<OLD_LOG>) 
-        {
-          if (! $passed_first_entry)
-          {
-            if ((! $started_first_entry)
-                && /^(\d\d\d\d-\d\d-\d\d\s+\d\d:\d\d)/) {
-              $started_first_entry = 1;
-            }
-            elsif (/^(\d\d\d\d-\d\d-\d\d\s+\d\d:\d\d)/) {
-              $passed_first_entry = 1;
-              print NEW_LOG $_;
-            }
-          }
-          else {
-            print NEW_LOG $_;
-          }
-        }
-
-        close (NEW_LOG);
-        close (OLD_LOG);
-      }
-
-      if (-f $logfile_here) {
-        rename ($logfile_here, $logfile_bak);
-      } 
-      rename ($tmpfile, $logfile_here);
-    }
-  }
-}
-
-
-sub parse_date_and_author ()
-{
-  # Parses the date/time and author out of a line like: 
-  #
-  # date: 1999/02/19 23:29:05;  author: apharris;  state: Exp;
-
-  my $line = shift;
-
-  my ($year, $mon, $mday, $hours, $min, $secs, $author) = $line =~
-      m#(\d+)/(\d+)/(\d+)\s+(\d+):(\d+):(\d+);\s+author:\s+([^;]+);#
-          or  die "Couldn't parse date ``$line''";
-  die "Bad date or Y2K issues" unless ($year > 1969 and $year < 2258);
-  # Kinda arbitrary, but useful as a sanity check
-  my $time = timegm($secs,$min,$hours,$mday,$mon-1,$year-1900);
-
-  return ($time, $author);
-}
-
-
-# Here we take a bunch of qunks and convert them into printed
-# summary that will include all the information the user asked for.
-sub pretty_file_list ()
-{
-  if ($Hide_Filenames and (! $XML_Output)) {
-    return "";
-  }
-
-  my $qunksref = shift;
-  my @qunkrefs = @$qunksref;
-  my @filenames;
-  my $beauty = "";          # The accumulating header string for this entry.
-  my %non_unanimous_tags;   # Tags found in a proper subset of qunks
-  my %unanimous_tags;       # Tags found in all qunks
-  my %all_branches;         # Branches found in any qunk
-  my $common_dir = undef;   # Dir prefix common to all files ("" if none)
-  my $fbegun = 0;           # Did we begin printing filenames yet?
-  
-  # First, loop over the qunks gathering all the tag/branch names.
-  # We'll put them all in non_unanimous_tags, and take out the
-  # unanimous ones later.
-  foreach my $qunkref (@qunkrefs) 
-  {
-    # Keep track of whether all the files in this commit were in the
-    # same directory, and memorize it if so.  We can make the output a
-    # little more compact by mentioning the directory only once.
-    if ((scalar (@qunkrefs)) > 1)
-    {
-      if (! (defined ($common_dir)))
-      {
-        my ($base, $dir);
-        ($base, $dir, undef) = fileparse ($$qunkref{'filename'});
-
-        if ((! (defined ($dir)))  # this first case is sheer paranoia
-            or ($dir eq "")
-            or ($dir eq "./")
-            or ($dir eq ".\\")) 
-        {
-          $common_dir = "";
-        }
-        else
-        {
-          $common_dir = $dir;
-        }
-      }
-      elsif ($common_dir ne "")
-      {
-        # Already have a common dir prefix, so how much of it can we preserve?
-        $common_dir = &common_path_prefix ($$qunkref{'filename'}, $common_dir);
-      }
-    }
-    else  # only one file in this entry anyway, so common dir not an issue
-    {
-      $common_dir = "";
-    }
-
-    if (defined ($$qunkref{'branch'})) {
-      $all_branches{$$qunkref{'branch'}} = 1;
-    }
-    if (defined ($$qunkref{'tags'})) {
-      foreach my $tag (@{$$qunkref{'tags'}}) {
-        $non_unanimous_tags{$tag} = 1;
-      }
-    }
-  }
-
-  # Any tag held by all qunks will be printed specially... but only if
-  # there are multiple qunks in the first place!
-  if ((scalar (@qunkrefs)) > 1) {
-    foreach my $tag (keys (%non_unanimous_tags)) {
-      my $everyone_has_this_tag = 1;
-      foreach my $qunkref (@qunkrefs) {
-        if ((! (defined ($$qunkref{'tags'})))
-            or (! (grep ($_ eq $tag, @{$$qunkref{'tags'}})))) {
-          $everyone_has_this_tag = 0;
-        }
-      }
-      if ($everyone_has_this_tag) {
-        $unanimous_tags{$tag} = 1;
-        delete $non_unanimous_tags{$tag};
-      }
-    }
-  }
-
-  if ($XML_Output)
-  {
-    # If outputting XML, then our task is pretty simple, because we
-    # don't have to detect common dir, common tags, branch prefixing,
-    # etc.  We just output exactly what we have, and don't worry about
-    # redundancy or readability.
-
-    foreach my $qunkref (@qunkrefs) 
-    {
-      my $filename    = $$qunkref{'filename'};
-      my $revision    = $$qunkref{'revision'};
-      my $tags        = $$qunkref{'tags'};
-      my $branch      = $$qunkref{'branch'};
-      my $branchroots = $$qunkref{'branchroots'};
-
-      $filename = &xml_escape ($filename);   # probably paranoia
-      $revision = &xml_escape ($revision);   # definitely paranoia
-
-      $beauty .= "<file>\n";
-      $beauty .= "<name>${filename}</name>\n";
-      $beauty .= "<revision>${revision}</revision>\n";
-      if ($branch) {
-        $branch   = &xml_escape ($branch);     # more paranoia
-        $beauty .= "<branch>${branch}</branch>\n";
-      }
-      foreach my $tag (@$tags) {
-        $tag = &xml_escape ($tag);  # by now you're used to the paranoia
-        $beauty .= "<tag>${tag}</tag>\n";
-      }
-      foreach my $root (@$branchroots) {
-        $root = &xml_escape ($root);  # which is good, because it will continue
-        $beauty .= "<branchroot>${root}</branchroot>\n";
-      }
-      $beauty .= "</file>\n";
-    }
-
-    # Theoretically, we could go home now.  But as long as we're here,
-    # let's print out the common_dir and utags, as a convenience to
-    # the receiver (after all, earlier code calculated that stuff
-    # anyway, so we might as well take advantage of it).
-
-    if ((scalar (keys (%unanimous_tags))) > 1) {
-      foreach my $utag ((keys (%unanimous_tags))) {
-        $utag = &xml_escape ($utag);   # the usual paranoia
-        $beauty .= "<utag>${utag}</utag>\n";
-      }
-    }
-    if ($common_dir) {
-      $common_dir = &xml_escape ($common_dir);
-      $beauty .= "<commondir>${common_dir}</commondir>\n";
-    }
-
-    # That's enough for XML, time to go home:
-    return $beauty;
-  }
-
-  # Else not XML output, so complexly compactify for chordate
-  # consumption.  At this point we have enough global information
-  # about all the qunks to organize them non-redundantly for output.
-
-  if ($common_dir) {
-    # Note that $common_dir still has its trailing slash
-    $beauty .= "$common_dir: ";
-  }
-
-  if ($Show_Branches)
-  {
-    # For trailing revision numbers.
-    my @brevisions;
-
-    foreach my $branch (keys (%all_branches))
-    {
-      foreach my $qunkref (@qunkrefs)
-      {
-        if ((defined ($$qunkref{'branch'}))
-            and ($$qunkref{'branch'} eq $branch))
-        {
-          if ($fbegun) {
-            # kff todo: comma-delimited in XML too?  Sure.
-            $beauty .= ", ";
-          } 
-          else {
-            $fbegun = 1;
-          }
-          my $fname = substr ($$qunkref{'filename'}, length ($common_dir));
-          $beauty .= $fname;
-          $$qunkref{'printed'} = 1;  # Just setting a mark bit, basically
-
-          if ($Show_Tags && (defined @{$$qunkref{'tags'}})) {
-            my @tags = grep ($non_unanimous_tags{$_}, @{$$qunkref{'tags'}});
-            if (@tags) {
-              $beauty .= " (tags: ";
-              $beauty .= join (', ', @tags);
-              $beauty .= ")";
-            }
-          }
-
-          if ($Show_Revisions) {
-            # Collect the revision numbers' last components, but don't
-            # print them -- they'll get printed with the branch name
-            # later.
-            $$qunkref{'revision'} =~ /.+\.([\d]+)$/;
-            push (@brevisions, $1);
-
-            # todo: we're still collecting branch roots, but we're not
-            # showing them anywhere.  If we do show them, it would be
-            # nifty to just call them revision "0" on a the branch.
-            # Yeah, that's the ticket.
-          }
-        }
-      }
-      $beauty .= " ($branch";
-      if (@brevisions) {
-        if ((scalar (@brevisions)) > 1) {
-          $beauty .= ".[";
-          $beauty .= (join (',', @brevisions));
-          $beauty .= "]";
-        }
-        else {
-          $beauty .= ".$brevisions[0]";
-        }
-      }
-      $beauty .= ")";
-    }
-  }
-
-  # Okay; any qunks that were done according to branch are taken care
-  # of, and marked as printed.  Now print everyone else.
-
-  foreach my $qunkref (@qunkrefs)
-  {
-    next if (defined ($$qunkref{'printed'}));   # skip if already printed
-        
-    if ($fbegun) {
-      $beauty .= ", ";
-    }
-    else {
-      $fbegun = 1;
-    }
-    $beauty .= substr ($$qunkref{'filename'}, length ($common_dir));
-    # todo: Shlomo's change was this:
-    # $beauty .= substr ($$qunkref{'filename'}, 
-    #              (($common_dir eq "./") ? "" : length ($common_dir)));
-    $$qunkref{'printed'} = 1;  # Set a mark bit.
-    
-    if ($Show_Revisions || $Show_Tags)
-    {
-      my $started_addendum = 0;
-
-      if ($Show_Revisions) {
-        $started_addendum = 1;
-        $beauty .= " (";
-        $beauty .= "$$qunkref{'revision'}";
-      }
-      if ($Show_Tags && (defined $$qunkref{'tags'})) {
-        my @tags = grep ($non_unanimous_tags{$_}, @{$$qunkref{'tags'}});
-        if ((scalar (@tags)) > 0) {
-          if ($started_addendum) {
-            $beauty .= ", ";
-          }
-          else {
-            $beauty .= " (tags: ";
-          }
-          $beauty .= join (', ', @tags);
-          $started_addendum = 1;
-        }
-      }
-      if ($started_addendum) {
-        $beauty .= ")";
-      }
-    }
-  }
-
-  # Unanimous tags always come last.
-  if ($Show_Tags && %unanimous_tags)
-  {
-    $beauty .= " (utags: ";
-    $beauty .= join (', ', keys (%unanimous_tags));
-    $beauty .= ")";
-  }
-
-  # todo: still have to take care of branch_roots?
-
-  $beauty = "* $beauty:";
-
-  return $beauty;
-}
-
-
-sub common_path_prefix ()
-{
-  my $path1 = shift;
-  my $path2 = shift;
-
-  my ($dir1, $dir2);
-  (undef, $dir1, undef) = fileparse ($path1);
-  (undef, $dir2, undef) = fileparse ($path2);
-
-  # Transmogrify Windows filenames to look like Unix.  
-  # (It is far more likely that someone is running cvs2cl.pl under
-  # Windows than that they would genuinely have backslashes in their
-  # filenames.)
-  $dir1 =~ tr#\\#/#;
-  $dir2 =~ tr#\\#/#;
-
-  my $accum1 = "";
-  my $accum2 = "";
-  my $last_common_prefix = "";
-
-  while ($accum1 eq $accum2)
-  {
-    $last_common_prefix = $accum1;
-    last if ($accum1 eq $dir1);
-    my ($tmp1) = split (/\//, (substr ($dir1, length ($accum1))));
-    my ($tmp2) = split (/\//, (substr ($dir2, length ($accum2))));
-    $accum1 .= "$tmp1/" if ((defined ($tmp1)) and $tmp1);
-    $accum2 .= "$tmp2/" if ((defined ($tmp2)) and $tmp2);
-  }
-
-  return $last_common_prefix;
-}
-
-
-sub preprocess_msg_text ()
-{
-  my $text = shift;
-
-  # Strip out carriage returns (as they probably result from DOSsy editors).
-  $text =~ s/\r\n/\n/g;
-
-  # If it *looks* like two newlines, make it *be* two newlines:
-  $text =~ s/\n\s*\n/\n\n/g;
-
-  if ($XML_Output)
-  {
-    $text = &xml_escape ($text);
-    $text = "<msg>${text}</msg>\n";
-  }
-  elsif (! $No_Wrap)
-  {
-    # Strip off lone newlines, but only for lines that don't begin with
-    # whitespace or a mail-quoting character, since we want to preserve
-    # that kind of formatting.  Also don't strip newlines that follow a
-    # period; we handle those specially next.  And don't strip
-    # newlines that precede an open paren.
-    1 while ($text =~ s/(^|\n)([^>\s].*[^.\n])\n([^>\n])/$1$2 $3/g);
-    
-    # If a newline follows a period, make sure that when we bring up the
-    # bottom sentence, it begins with two spaces. 
-    1 while ($text =~ s/(^|\n)([^>\s].*)\n([^>\n])/$1$2  $3/g);
-  }
-
-  return $text;
-}
-
-
-sub last_line_len ()
-{
-  my $files_list = shift;
-  my @lines = split (/\n/, $files_list);
-  my $last_line = pop (@lines);
-  return length ($last_line);
-}
-
-
-# A custom wrap function, sensitive to some common constructs used in
-# log entries.
-sub wrap_log_entry ()
-{
-  my $text = shift;                  # The text to wrap.
-  my $left_pad_str = shift;          # String to pad with on the left.
-
-  # These do NOT take left_pad_str into account:
-  my $length_remaining = shift;      # Amount left on current line.
-  my $max_line_length  = shift;      # Amount left for a blank line.
-
-  my $wrapped_text = "";             # The accumulating wrapped entry.
-  my $user_indent = "";              # Inherited user_indent from prev line.
-
-  my $first_time = 1;                # First iteration of the loop?
-  my $suppress_line_start_match = 0; # Set to disable line start checks.
-
-  my @lines = split (/\n/, $text);
-  while (@lines)   # Don't use `foreach' here, it won't work.
-  {
-    my $this_line = shift (@lines);
-    chomp $this_line;
-
-    if ($this_line =~ /^(\s+)/) {
-      $user_indent = $1;
-    }
-    else {
-      $user_indent = "";
-    }
-
-    # If it matches any of the line-start regexps, print a newline now...
-    if ($suppress_line_start_match)
-    {
-      $suppress_line_start_match = 0;
-    }
-    elsif (($this_line =~ /^(\s*)\*\s+[a-zA-Z0-9]/)
-           || ($this_line =~ /^(\s*)\* [a-zA-Z0-9_\.\/\+-]+/)
-           || ($this_line =~ /^(\s*)\([a-zA-Z0-9_\.\/\+-]+(\)|,\s*)/)
-           || ($this_line =~ /^(\s+)(\S+)/)
-           || ($this_line =~ /^(\s*)- +/)
-           || ($this_line =~ /^()\s*$/)
-           || ($this_line =~ /^(\s*)\*\) +/)
-           || ($this_line =~ /^(\s*)[a-zA-Z0-9](\)|\.|\:) +/))
-    {
-      # Make a line break immediately, unless header separator is set
-      # and this line is the first line in the entry, in which case
-      # we're getting the blank line for free already and shouldn't
-      # add an extra one.
-      unless (($After_Header ne " ") and ($first_time))
-      {
-        if ($this_line =~ /^()\s*$/) {
-          $suppress_line_start_match = 1;
-          $wrapped_text .= "\n${left_pad_str}";
-        }
-
-        $wrapped_text .= "\n${left_pad_str}";
-      }
-      
-      $length_remaining = $max_line_length - (length ($user_indent));
-    }
-
-    # Now that any user_indent has been preserved, strip off leading
-    # whitespace, so up-folding has no ugly side-effects.
-    $this_line =~ s/^\s*//;
-
-    # Accumulate the line, and adjust parameters for next line.
-    my $this_len = length ($this_line);
-    if ($this_len == 0)
-    {
-      # Blank lines should cancel any user_indent level.
-      $user_indent = "";
-      $length_remaining = $max_line_length;
-    }
-    elsif ($this_len >= $length_remaining) # Line too long, try breaking it.
-    {
-      # Walk backwards from the end.  At first acceptable spot, break
-      # a new line.
-      my $idx = $length_remaining - 1;
-      if ($idx < 0) { $idx = 0 };
-      while ($idx > 0)
-      {
-        if (substr ($this_line, $idx, 1) =~ /\s/)
-        {
-          my $line_now = substr ($this_line, 0, $idx);
-          my $next_line = substr ($this_line, $idx);
-          $this_line = $line_now;
-          
-          # Clean whitespace off the end.
-          chomp $this_line;
-
-          # The current line is ready to be printed.
-          $this_line .= "\n${left_pad_str}";
-
-          # Make sure the next line is allowed full room.
-          $length_remaining = $max_line_length - (length ($user_indent));
-
-          # Strip next_line, but then preserve any user_indent.
-          $next_line =~ s/^\s*//;
-
-          # Sneak a peek at the user_indent of the upcoming line, so
-          # $next_line (which will now precede it) can inherit that
-          # indent level.  Otherwise, use whatever user_indent level
-          # we currently have, which might be none.
-          my $next_next_line = shift (@lines);
-          if ((defined ($next_next_line)) && ($next_next_line =~ /^(\s+)/)) {
-            $next_line = $1 . $next_line if (defined ($1));
-            # $length_remaining = $max_line_length - (length ($1));
-            $next_next_line =~ s/^\s*//;
-          }
-          else {
-            $next_line = $user_indent . $next_line;
-          }
-          if (defined ($next_next_line)) {
-            unshift (@lines, $next_next_line);
-          }
-          unshift (@lines, $next_line);
-
-          # Our new next line might, coincidentally, begin with one of
-          # the line-start regexps, so we temporarily turn off
-          # sensitivity to that until we're past the line.
-          $suppress_line_start_match = 1; 
-
-          last;
-        }
-        else
-        {
-          $idx--;
-        }
-      }
-
-      if ($idx == 0)
-      {
-        # We bottomed out because the line is longer than the
-        # available space.  But that could be because the space is
-        # small, or because the line is longer than even the maximum
-        # possible space.  Handle both cases below.
-
-        if ($length_remaining == ($max_line_length - (length ($user_indent))))
-        {
-          # The line is simply too long -- there is no hope of ever
-          # breaking it nicely, so just insert it verbatim, with
-          # appropriate padding.
-          $this_line = "\n${left_pad_str}${this_line}";
-        }
-        else
-        {
-          # Can't break it here, but may be able to on the next round...
-          unshift (@lines, $this_line);
-          $length_remaining = $max_line_length - (length ($user_indent));
-          $this_line = "\n${left_pad_str}";
-        }
-      }
-    }
-    else  # $this_len < $length_remaining, so tack on what we can.
-    {
-      # Leave a note for the next iteration.
-      $length_remaining = $length_remaining - $this_len;
-
-      if ($this_line =~ /\.$/)
-      {
-        $this_line .= "  ";
-        $length_remaining -= 2;
-      }
-      else  # not a sentence end
-      {
-        $this_line .= " ";
-        $length_remaining -= 1;
-      }
-    }
-
-    # Unconditionally indicate that loop has run at least once.
-    $first_time = 0;
-
-    $wrapped_text .= "${user_indent}${this_line}";
-  }
-
-  # One last bit of padding.
-  $wrapped_text .= "\n";
-
-  return $wrapped_text;
-}
-
-
-sub xml_escape ()
-{
-  my $txt = shift;
-  $txt =~ s/&/&amp;/g;
-  $txt =~ s/</&lt;/g;
-  $txt =~ s/>/&gt;/g;
-  return $txt;
-}
-
-
-sub maybe_read_user_map_file ()
-{
-  my %expansions;
-
-  if ($User_Map_File)
-  {
-    open (MAPFILE, "<$User_Map_File")
-        or die ("Unable to open $User_Map_File ($!)");
-
-    while (<MAPFILE>) 
-    {
-      next if /^\s*#/;  # Skip comment lines.
-      next if not /:/;  # Skip lines without colons.
-
-      # It is now safe to split on ':'.
-      my ($username, $expansion) = split ':';
-      chomp $expansion;
-      $expansion =~ s/^'(.*)'$/$1/;
-      $expansion =~ s/^"(.*)"$/$1/;
-
-      # If it looks like the expansion has a real name already, then
-      # we toss the username we got from CVS log.  Otherwise, keep
-      # it to use in combination with the email address.
-
-      if ($expansion =~ /^\s*<{0,1}\S+@.*/) {
-        # Also, add angle brackets if none present
-        if (! ($expansion =~ /<\S+@\S+>/)) {
-          $expansions{$username} = "$username <$expansion>";
-        }
-        else {
-          $expansions{$username} = "$username $expansion";
-        }
-      }
-      else {
-        $expansions{$username} = $expansion;
-      }
-    }
-
-    close (MAPFILE);
-  }
-
-  return %expansions;
-}
-
-
-sub parse_options ()
-{
-  # Check this internally before setting the global variable.
-  my $output_file;
-
-  # If this gets set, we encountered unknown options and will exit at
-  # the end of this subroutine.
-  my $exit_with_admonishment = 0;
-
-  while (my $arg = shift (@ARGV)) 
-  {
-    if ($arg =~ /^-h$|^-help$|^--help$|^--usage$|^-?$/) {
-      $Print_Usage = 1;
-    }
-    elsif ($arg =~ /^--debug$/) {        # unadvertised option, heh
-      $Debug = 1;
-    }
-    elsif ($arg =~ /^--version$/) {
-      $Print_Version = 1;
-    }
-    elsif ($arg =~ /^-g$|^--global-opts$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      # Don't assume CVS is called "cvs" on the user's system:
-      $Log_Source_Command =~ s/(^\S*)/$1 $narg/;
-    }
-    elsif ($arg =~ /^-l$|^--log-opts$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      $Log_Source_Command .= " $narg";
-    }
-    elsif ($arg =~ /^-f$|^--file$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      $output_file = $narg;
-    }
-    elsif ($arg =~ /^--accum$/) {
-      $Cumulative = 1;
-    }
-    elsif ($arg =~ /^--fsf$/) {
-      $FSF_Style = 1;
-    }
-    elsif ($arg =~ /^-U$|^--usermap$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      $User_Map_File = $narg;
-    }
-    elsif ($arg =~ /^-W$|^--window$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      $Max_Checkin_Duration = $narg;
-    }
-    elsif ($arg =~ /^-I$|^--ignore$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      push (@Ignore_Files, $narg);
-    }
-    elsif ($arg =~ /^-C$|^--case-insensitive$/) {
-      $Case_Insensitive = 1;
-    }
-    elsif ($arg =~ /^-R$|^--regexp$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      $Regexp_Gate = $narg;
-    }
-    elsif ($arg =~ /^--stdout$/) {
-      $Output_To_Stdout = 1;
-    }
-    elsif ($arg =~ /^--version$/) {
-      $Print_Version = 1;
-    }
-    elsif ($arg =~ /^-d$|^--distributed$/) {
-      $Distributed = 1;
-    }
-    elsif ($arg =~ /^-P$|^--prune$/) {
-      $Prune_Empty_Msgs = 1;
-    }
-    elsif ($arg =~ /^-S$|^--separate-header$/) {
-      $After_Header = "\n\n";
-    }
-    elsif ($arg =~ /^--no-wrap$/) {
-      $No_Wrap = 1;
-    }
-    elsif ($arg =~ /^--gmt$|^--utc$/) {
-      $UTC_Times = 1;
-    }
-    elsif ($arg =~ /^-w$|^--day-of-week$/) {
-      $Show_Day_Of_Week = 1;
-    }
-    elsif ($arg =~ /^-r$|^--revisions$/) {
-      $Show_Revisions = 1;
-    }
-    elsif ($arg =~ /^-t$|^--tags$/) {
-      $Show_Tags = 1;
-    }
-    elsif ($arg =~ /^-b$|^--branches$/) {
-      $Show_Branches = 1;
-    }
-    elsif ($arg =~ /^-F$|^--follow$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      push (@Follow_Branches, $narg);
-    }
-    elsif ($arg =~ /^--stdin$/) {
-      $Input_From_Stdin = 1;
-    }
-    elsif ($arg =~ /^--header$/) {
-      my $narg = shift (@ARGV) || die "$arg needs argument.\n";
-      $ChangeLog_Header = &slurp_file ($narg);
-      if (! defined ($ChangeLog_Header)) {
-        $ChangeLog_Header = "";
-      }
-    }
-    elsif ($arg =~ /^--xml$/) {
-      $XML_Output = 1;
-    }
-    elsif ($arg =~ /^--hide-filenames$/) {
-      $Hide_Filenames = 1;
-      $After_Header = "";
-    }
-    else {
-      # Just add a filename as argument to the log command
-      $Log_Source_Command .= " $arg";
-    }
-  }
-
-  ## Check for contradictions...
-
-  if ($Output_To_Stdout && $Distributed) {
-    print STDERR "cannot pass both --stdout and --distributed\n";
-    $exit_with_admonishment = 1;
-  }
-
-  if ($Output_To_Stdout && $output_file) {
-    print STDERR "cannot pass both --stdout and --file\n";
-    $exit_with_admonishment = 1;
-  }
-
-  if ($XML_Output && $Cumulative) {
-    print STDERR "cannot pass both --xml and --accum\n";
-    $exit_with_admonishment = 1;
-  }
-
-  # Or if any other error message has already been printed out, we
-  # just leave now:
-  if ($exit_with_admonishment) {
-    &usage ();
-    exit (1);
-  }
-  elsif ($Print_Usage) {
-    &usage ();
-    exit (0);
-  }
-  elsif ($Print_Version) {
-    &version ();
-    exit (0);
-  }
-
-  ## Else no problems, so proceed.
-
-  if ($output_file) {
-    $Log_File_Name = $output_file;
-  }
-}
-
-
-sub slurp_file ()
-{
-  my $filename = shift || die ("no filename passed to slurp_file()");
-  my $retstr;
-
-  open (SLURPEE, "<${filename}") or die ("unable to open $filename ($!)");
-  my $saved_sep = $/;
-  undef $/;
-  $retstr = <SLURPEE>;
-  $/ = $saved_sep;
-  close (SLURPEE);
-  return $retstr;
-}
-
-
-sub debug ()
-{
-  if ($Debug) {
-    my $msg = shift;
-    print STDERR $msg;
-  }
-}
-
-
-sub version ()
-{
-  print "cvs2cl.pl version ${VERSION}; distributed under the GNU GPL.\n";
-}
-
-
-sub usage ()
-{
-  &version ();
-  print <<'END_OF_INFO';
-Generate GNU-style ChangeLogs in CVS working copies.
-
-Notes about the output format(s):
-
-   The default output of cvs2cl.pl is designed to be compact, formally
-   unambiguous, but still easy for humans to read.  It is largely
-   self-explanatory, I hope; the one abbreviation that might not be
-   obvious is "utags".  That stands for "universal tags" -- a
-   universal tag is one held by all the files in a given change entry.
-
-   If you need output that's easy for a program to parse, use the
-   --xml option.  Note that with XML output, just about all available
-   information is included with each change entry, whether you asked
-   for it or not, on the theory that your parser can ignore anything
-   it's not looking for.
-
-Notes about the options and arguments (the actual options are listed
-last in this usage message):
-
-  * The -I and -F options may appear multiple times.
-
-  * To follow trunk revisions, use "-F trunk" ("-F TRUNK" also works).
-    This is okay because no would ever, ever be crazy enough to name a
-    branch "trunk", right?  Right.
-
-  * For the -U option, the UFILE should be formatted like
-    CVSROOT/users. That is, each line of UFILE looks like this
-       jrandom:jrandom@red-bean.com
-    or maybe even like this
-       jrandom:'Jesse Q. Random <jrandom@red-bean.com>'
-    Don't forget to quote the portion after the colon if necessary.
-  
-  * Many people want to filter by date.  To do so, invoke cvs2cl.pl
-    like this: 
-       cvs2cl.pl -l "-d'DATESPEC'"
-    where DATESPEC is any date specification valid for "cvs log -d".
-    (Note that CVS 1.10.7 and below requires there be no space between
-    -d and its argument).
-
-Options/Arguments:
-
-  -h, -help, --help, or -?     Show this usage and exit
-  --version                    Show version and exit
-  -r, --revisions              Show revision numbers in output
-  -b, --branches               Show branch names in revisions when possible
-  -t, --tags                   Show tags (symbolic names) in output
-  --stdin                      Read from stdin, don't run cvs log
-  --stdout                     Output to stdout not to ChangeLog
-  -d, --distributed            Put ChangeLogs in subdirs
-  -f FILE, --file FILE         Write to FILE instead of "ChangeLog"
-  --fsf                        Use this if log data is in FSF ChangeLog style
-  -W SECS, --window SECS       Window of time within which log entries unify
-  -U UFILE, --usermap UFILE    Expand usernames to email addresses from UFILE
-  -R REGEXP, --regexp REGEXP   Include only entries that match REGEXP
-  -I REGEXP, --ignore REGEXP   Ignore files whose names match REGEXP
-  -C, --case-insensitive       Any regexp matching is done case-insensitively
-  -F BRANCH, --follow BRANCH   Show only revisions on or ancestral to BRANCH
-  -S, --separate-header        Blank line between each header and log message
-  --no-wrap                    Don't auto-wrap log message (recommend -S also)
-  --gmt, --utc                 Show times in GMT/UTC instead of local time
-  --accum                      Add to an existing ChangeLog (incompat w/ --xml)
-  -w, --day-of-week            Show day of week
-  --header FILE                Get ChangeLog header from FILE ("-" means stdin)
-  --xml                        Output XML instead of ChangeLog format
-  --hide-filenames             Don't show filenames (ignored for XML output)
-  -P, --prune                  Don't show empty log messages
-  -g OPTS, --global-opts OPTS  Invoke like this "cvs OPTS log ..."
-  -l OPTS, --log-opts OPTS     Invoke like this "cvs ... log OPTS"
-  FILE1 [FILE2 ...]            Show only log information for the named FILE(s)
-
-See http://www.red-bean.com/cvs2cl for maintenance and bug info.
-END_OF_INFO
-}
-
-__END__
-
-=head1 NAME
-
-cvs2cl.pl - produces GNU-style ChangeLogs in CVS working copies, by
-    running "cvs log" and parsing the output.  Shared log entries are
-    unified in an intuitive way.
-
-=head1 DESCRIPTION
-
-This script generates GNU-style ChangeLog files from CVS log
-information.  Basic usage: just run it inside a working copy and a
-ChangeLog will appear.  It requires repository access (i.e., 'cvs log'
-must work).  Run "cvs2cl.pl --help" to see more advanced options.
-
-See http://www.red-bean.com/cvs2cl for updates, and for instructions
-on getting anonymous CVS access to this script.
-
-Maintainer: Karl Fogel <kfogel@red-bean.com>
-Please report bugs to <bug-cvs2cl@red-bean.com>.
-
-=head1 README
-
-This script generates GNU-style ChangeLog files from CVS log
-information.  Basic usage: just run it inside a working copy and a
-ChangeLog will appear.  It requires repository access (i.e., 'cvs log'
-must work).  Run "cvs2cl.pl --help" to see more advanced options.
-
-See http://www.red-bean.com/cvs2cl for updates, and for instructions
-on getting anonymous CVS access to this script.
-
-Maintainer: Karl Fogel <kfogel@red-bean.com>
-Please report bugs to <bug-cvs2cl@red-bean.com>.
-
-=head1 PREREQUISITES
-
-This script requires C<Text::Wrap>, C<Time::Local>, and
-C<File::Basename>.
-It also seems to require C<Perl 5.004_04> or higher.
-
-=pod OSNAMES
-
-any
-
-=pod SCRIPT CATEGORIES
-
-Version_Control/CVS
-
-=cut
-
-
--*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*-
-
-Note about a bug-slash-opportunity:
------------------------------------
-
-There's a bug in Text::Wrap, which affects cvs2cl.  This script
-reveals it:
-
-  #!/usr/bin/perl -w
-  
-  use Text::Wrap;
-  
-  my $test_text =
-  "This script demonstrates a bug in Text::Wrap.  The very long line
-  following this paragraph will be relocated relative to the surrounding
-  text:
-  
-  ====================================================================
-  
-  See?  When the bug happens, we'll get the line of equal signs below
-  this paragraph, even though it should be above.";
-  
-  
-  # Print out the test text with no wrapping:
-  print "$test_text";
-  print "\n";
-  print "\n";
-  
-  # Now print it out wrapped, and see the bug:
-  print wrap ("\t", "        ", "$test_text");
-  print "\n";
-  print "\n";
-
-If the line of equal signs were one shorter, then the bug doesn't
-happen.  Interesting.
-
-Anyway, rather than fix this in Text::Wrap, we might as well write a
-new wrap() which has the following much-needed features:
-
-* initial indentation, like current Text::Wrap()
-* subsequent line indentation, like current Text::Wrap()
-* user chooses among: force-break long words, leave them alone, or die()?
-* preserve existing indentation: chopped chunks from an indented line
-  are indented by same (like this line, not counting the asterisk!)
-* optional list of things to preserve on line starts, default ">"
-
-Note that the last two are essentially the same concept, so unify in
-implementation and give a good interface to controlling them.
-
-And how about:
-
-Optionally, when encounter a line pre-indented by same as previous
-line, then strip the newline and refill, but indent by the same.
-Yeah...
diff --git a/utils/filter2docs.pl b/utils/filter2docs.pl
new file mode 100755 (executable)
index 0000000..ea326ed
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/perl -w
+
+# $Id: filter2docs.pl,v 1.1.2.1 2003/03/16 15:32:44 oes Exp $
+# $Source: /cvsroot/ijbswa/current/utils/Attic/filter2docs.pl,v $
+
+# Parse the filter names and descriptions from a filter file and
+# spit out copy&paste-ready markup for the various places in
+# configuration and documentation where all filters are listed.
+
+die "Usage: $0 filter-file\n" unless (@ARGV == 1) ;
+open(INPUT, "< $ARGV[0]") or die "Coudln't open input file $ARGV[0] because $!\n";
+
+while (<INPUT>) {
+  if (/^FILTER: ([-\w]+) (.*)$/) {
+    $comment_lines .= "#     $1:" . (" " x (20-length($1))) . "$2\n";
+    $action_lines  .= "-filter{$1} \\\n";
+    $sgml_source_1 .= "   <para>\n    <anchor id=\"filter-$1\">\n    <screen>+filter{$1}" .
+                      (" " x (20-length($1))) . "# $2</screen>\n   </para>\n";
+    $sgml_source_2 .= " -<link linkend=\"FILTER-" . uc($1) . "\">filter{$1}</link> \\\n";
+  }
+}
+
+print("Comment lines for default.action:\n\n$comment_lines\n\nBlock of filter actions for"
+     ." standard.action:\n\n$action_lines\n\nSGML Source for AF chapter in U-M:" .
+      "\n\n$sgml_source_1\n\nSGML Source for AF Tutorial chapter in U-M\n\n$sgml_source_2\n");
index b4b36d3..35b6053 100755 (executable)
@@ -52,9 +52,9 @@ $fname_wo_ext =~ s/\.[\w]+$//;
 #
 &fix_print_html($ARGV[0], 'body.html', 'title.html');
 
 #
 &fix_print_html($ARGV[0], 'body.html', 'title.html');
 
-my($cmd) = "htmldoc --size universal -t pdf -f ${fname_wo_ext}.pdf " .
-           "--linkcolor #0000ff ".
-           "--firstpage p1 --titlefile title.html body.html --footer c.1";
+my($cmd) = "htmldoc --size universal --bodyfont helvetica --fontsize 8 " .
+           "-t pdf -f ${fname_wo_ext}.pdf --firstpage p1 --titlefile title.html" .
+           " body.html --footer c.1";
 
 # For postscript output; append onto the above cmd string:
 #
 
 # For postscript output; append onto the above cmd string:
 #
similarity index 99%
rename from visualc/vc_config_pthreads.h
rename to vc_config_pthreads.h
index 9ef4b65..fba14f4 100644 (file)
@@ -2,7 +2,7 @@
 #define CONFIG_H_INCLUDED
 /*********************************************************************
  *
 #define CONFIG_H_INCLUDED
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/vc_config_pthreads.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/vc_config_pthreads.h,v $
  *
  * Purpose     :  This file should be the first thing included in every
  *                .c file.  (Before even system headers).  It contains 
  *
  * Purpose     :  This file should be the first thing included in every
  *                .c file.  (Before even system headers).  It contains 
similarity index 73%
rename from visualc/vc_config_winthreads.h
rename to vc_config_winthreads.h
index e46ced0..bd20a03 100644 (file)
@@ -2,7 +2,7 @@
 #define CONFIG_H_INCLUDED
 /*********************************************************************
  *
 #define CONFIG_H_INCLUDED
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/vc_config_winthreads.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/vc_config_winthreads.h,v $
  *
  * Purpose     :  This file should be the first thing included in every
  *                .c file.  (Before even system headers).  It contains 
  *
  * Purpose     :  This file should be the first thing included in every
  *                .c file.  (Before even system headers).  It contains 
@@ -37,6 +37,9 @@
  *
  * Revisions   :
  *    $Log: vc_config_winthreads.h,v $
  *
  * Revisions   :
  *    $Log: vc_config_winthreads.h,v $
+ *    Revision 1.3.2.1  2006/04/08 21:57:26  david__schmidt
+ *    Synchronize with a more modern copy of config.h.
+ *
  *    Revision 1.3  2002/05/03 22:54:24  jongfoster
  *    Version number bump to 2.9.15
  *
  *    Revision 1.3  2002/05/03 22:54:24  jongfoster
  *    Version number bump to 2.9.15
  *
 /*
  * Version number - Major (X._._)
  */
 /*
  * Version number - Major (X._._)
  */
-#define VERSION_MAJOR 2
+#define VERSION_MAJOR 0
 
 /*
  * Version number - Minor (_.X._)
  */
 
 /*
  * Version number - Minor (_.X._)
  */
-#define VERSION_MINOR 9
+#define VERSION_MINOR 0
 
 /*
  * Version number - Point (_._.X)
  */
 
 /*
  * Version number - Point (_._.X)
  */
-#define VERSION_POINT 15
+#define VERSION_POINT 0
 
 /*
  * Version number, as a string
  */
 
 /*
  * Version number, as a string
  */
-#define VERSION "2.9.15"
+#define VERSION "0.0.0"
 
 /*
  * Status of the code: alpha, beta or stable
  */
 
 /*
  * Status of the code: alpha, beta or stable
  */
-#define CODE_STATUS "beta"
+#define CODE_STATUS "UNRELEASED"
 
 /*
  * Regular expression matching for URLs.  (Highly recommended).
 
 /*
  * Regular expression matching for URLs.  (Highly recommended).
  */
 #define FEATURE_KILL_POPUPS 1
 
  */
 #define FEATURE_KILL_POPUPS 1
 
+/*
+ * Use PNG instead of GIF for built-in images
+ */
+/* #undef FEATURE_NO_GIFS */
+
 /*
  * Use POSIX threads instead of native threads.
  */
 /*
  * Use POSIX threads instead of native threads.
  */
  */
 #define __MT__ 1
 
  */
 #define __MT__ 1
 
+/* If the (nonstandard and thread-safe) function gethostbyname_r
+ * is available, select which signature to use
+ */
+/* #undef HAVE_GETHOSTBYNAME_R_6_ARGS */
+/* #undef HAVE_GETHOSTBYNAME_R_5_ARGS */
+/* #undef HAVE_GETHOSTBYNAME_R_3_ARGS */
+
+/* If the (nonstandard and thread-safe) function gethostbyaddr_r
+ * is available, select which signature to use
+ */
+/* #undef HAVE_GETHOSTBYADDR_R_8_ARGS */
+/* #undef HAVE_GETHOSTBYADDR_R_7_ARGS */
+/* #undef HAVE_GETHOSTBYADDR_R_5_ARGS */
+
+/* Defined if you have gmtime_r and localtime_r with a signature
+ * of (struct time *, struct tm *)
+ */
+#undef HAVE_GMTIME_R
+
+/* #define HAVE_LOCALTIME_R 1 */
+
+/* Define to 'int' if <sys/socket.h> doesn't have it.
+ */
+#define socklen_t int
+
+/* Define if pcre.h must be included as <pcre/pcre.h>
+ */
+/* #undef PCRE_H_IN_SUBDIR */
+
+/* Define if pcreposix.h must be included as <pcre/pcreposix.h>
+ */
+/* #undef PCREPOSIX_H_IN_SUBDIR */
+
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the `atexit' function. */
+#define HAVE_ATEXIT 1
 
 /* Define if you have the `bcopy' function. */
 /* #define HAVE_BCOPY 1 */
 
 
 /* Define if you have the `bcopy' function. */
 /* #define HAVE_BCOPY 1 */
 
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+   */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <errno.h> header file. */
+#define HAVE_ERRNO_H 1
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define to 1 if you have the `getcwd' function. */
+#define HAVE_GETCWD 1
+
+/* Define to 1 if you have the `gethostbyaddr' function. */
+#define HAVE_GETHOSTBYADDR 1
+
+/* Define to 1 if you have the `gethostbyname' function. */
+#define HAVE_GETHOSTBYNAME 1
+
+/* Define to 1 if you have the `inet_ntoa' function. */
+#define HAVE_INET_NTOA 1
+
 /* Define if you have the <inttypes.h> header file. */
 /* #define HAVE_INTTYPES_H 1 */
 
 /* Define if you have the <inttypes.h> header file. */
 /* #define HAVE_INTTYPES_H 1 */
 
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+/* #undef HAVE_LIBNSL */
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if you have the `localtime_r' function. */
+#undef HAVE_LOCALTIME_R
+
+/* Define to 1 if you have the `memchr' function. */
+#define HAVE_MEMCHR 1
+
 /* Define if you have the `memmove' function. */
 #define HAVE_MEMMOVE 1
 
 /* Define if you have the <memory.h> header file. */
 #define HAVE_MEMORY_H 1
 
 /* Define if you have the `memmove' function. */
 #define HAVE_MEMMOVE 1
 
 /* Define if you have the <memory.h> header file. */
 #define HAVE_MEMORY_H 1
 
+/* Define to 1 if you have the `memset' function. */
+#define HAVE_MEMSET 1
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+/* #undef HAVE_NDIR_H */
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H 1
+
+/* Define to 1 if you have the <OS.h> header file. */
+/* #undef HAVE_OS_H */
+
+/* Define to 1 if you have the `regcomp' function. */
+#define HAVE_REGCOMP 1
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the `socket' function. */
+#define HAVE_SOCKET 1
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_H 1
+
 /* Define if you have the <stdint.h> header file. */
 /* #define HAVE_STDINT_H 1 */
 
 /* Define if you have the <stdlib.h> header file. */
 #define HAVE_STDLIB_H 1
 
 /* Define if you have the <stdint.h> header file. */
 /* #define HAVE_STDINT_H 1 */
 
 /* Define if you have the <stdlib.h> header file. */
 #define HAVE_STDLIB_H 1
 
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
 /* Define if you have the `strerror' function. */
 #define HAVE_STRERROR 1
 
 /* Define if you have the `strerror' function. */
 #define HAVE_STRERROR 1
 
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
 /* Define if you have the <strings.h> header file. */
 /* #define HAVE_STRINGS_H 1 */
 
 /* Define if you have the <string.h> header file. */
 #define HAVE_STRING_H 1
 
 /* Define if you have the <strings.h> header file. */
 /* #define HAVE_STRINGS_H 1 */
 
 /* Define if you have the <string.h> header file. */
 #define HAVE_STRING_H 1
 
+/* Define to 1 if you have the `strstr' function. */
+#define HAVE_STRSTR 1
+
+/* Define to 1 if you have the `strtoul' function. */
+#define HAVE_STRTOUL 1
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+/* #undef HAVE_SYS_DIR_H */
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+/* #undef HAVE_SYS_NDIR_H */
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
 /* Define if you have the <sys/stat.h> header file. */
 #define HAVE_SYS_STAT_H 1
 
 /* Define if you have the <sys/stat.h> header file. */
 #define HAVE_SYS_STAT_H 1
 
-/* Define if you have the <sys/types.h> header file. */
+/* Define to 1 if you have the <sys/timeb.h> header file. */
+#define HAVE_SYS_TIMEB_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
 #define HAVE_SYS_TYPES_H 1
 
 #define HAVE_SYS_TYPES_H 1
 
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
 /* Define if you have the <unistd.h> header file. */
 /* #define HAVE_UNISTD_H 1 */
 
 /* Define if you have the <unistd.h> header file. */
 /* #define HAVE_UNISTD_H 1 */
 
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT ""
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME ""
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING ""
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION ""
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* Define to 1 if the `setpgrp' function takes no argument. */
+#define SETPGRP_VOID 1
+
 /* The size of a `char *', as computed by sizeof. */
 #define SIZEOF_CHAR_P 4
 
 /* The size of a `char *', as computed by sizeof. */
 #define SIZEOF_CHAR_P 4
 
 /* Define if you have the ANSI C header files. */
 #define STDC_HEADERS 1
 
 /* Define if you have the ANSI C header files. */
 #define STDC_HEADERS 1
 
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME 1
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef TM_IN_SYS_TIME */
+
 /* Define to empty if `const' does not conform to ANSI C. */
 /* #define const */
 
 /* Define to empty if `const' does not conform to ANSI C. */
 /* #define const */
 
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef pid_t */
+
 /* Define to `unsigned' if <sys/types.h> does not define. */
 /* #define size_t unsigned */
 
 /* Define to `unsigned' if <sys/types.h> does not define. */
 /* #define size_t unsigned */
 
+/* Define to 'int' if <sys/socket.h> doesn't have it. */
+#define socklen_t int
+
 /*
  * Defined always.
  * FIXME: Don't know what it does or why we need it.
 /*
  * Defined always.
  * FIXME: Don't know what it does or why we need it.
 #define __CLEANUP_C
 #endif /* defined(FEATURE_PTHREAD) && defined(_WIN32) */
 
 #define __CLEANUP_C
 #endif /* defined(FEATURE_PTHREAD) && defined(_WIN32) */
 
+/*
+ * Need to keep errlog.c from trying to inline the non-existent
+ * locking stubs.  Could be removed once a real platform-specific
+ * solution is generated.
+ */
+#define inline ""
+
 /*
  * BEOS does not currently support POSIX threads.
  * This *should* be detected by ./configure, but let's be sure.
 /*
  * BEOS does not currently support POSIX threads.
  * This *should* be detected by ./configure, but let's be sure.
similarity index 76%
rename from visualc/vc_console.dsp
rename to vc_console.dsp
index 8f3c568..362f6b7 100644 (file)
-# Microsoft Developer Studio Project File - Name="vc_console" - Package Owner=<4>\r
-# Microsoft Developer Studio Generated Build File, Format Version 5.00\r
-# ** DO NOT EDIT **\r
-\r
-# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
-\r
-CFG=vc_console - Win32 Debug with Win32 threads\r
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
-!MESSAGE use the Export Makefile command and run\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "vc_console.mak".\r
-!MESSAGE \r
-!MESSAGE You can specify a configuration when running NMAKE\r
-!MESSAGE by defining the macro CFG on the command line. For example:\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "vc_console.mak"\\r
- CFG="vc_console - Win32 Debug with Win32 threads"\r
-!MESSAGE \r
-!MESSAGE Possible choices for configuration are:\r
-!MESSAGE \r
-!MESSAGE "vc_console - Win32 Release" (based on\\r
- "Win32 (x86) Console Application")\r
-!MESSAGE "vc_console - Win32 Debug" (based on\\r
- "Win32 (x86) Console Application")\r
-!MESSAGE "vc_console - Win32 Debug with Win32 threads" (based on\\r
- "Win32 (x86) Console Application")\r
-!MESSAGE "vc_console - Win32 Release with Win32 threads" (based on\\r
- "Win32 (x86) Console Application")\r
-!MESSAGE \r
-\r
-# Begin Project\r
-# PROP Scc_ProjName ""\r
-# PROP Scc_LocalPath ""\r
-CPP=cl.exe\r
-RSC=rc.exe\r
-\r
-!IF  "$(CFG)" == "vc_console - Win32 Release"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "Release"\r
-# PROP BASE Intermediate_Dir "Release"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "console_release"\r
-# PROP Intermediate_Dir "console_release"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\pcre" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /YX /FD /c\r
-# ADD BASE RSC /l 0x809 /d "NDEBUG"\r
-# ADD RSC /l 0x809 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:console /machine:I386\r
-\r
-!ELSEIF  "$(CFG)" == "vc_console - Win32 Debug"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "Debug"\r
-# PROP BASE Intermediate_Dir "Debug"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "console_debug"\r
-# PROP Intermediate_Dir "console_debug"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\pcre" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /FR /YX /FD /c\r
-# ADD BASE RSC /l 0x809 /d "_DEBUG"\r
-# ADD RSC /l 0x809 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-\r
-!ELSEIF  "$(CFG)" == "vc_console - Win32 Debug with Win32 threads"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "console_"\r
-# PROP BASE Intermediate_Dir "console_"\r
-# PROP BASE Ignore_Export_Lib 0\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "console_debug_winthr"\r
-# PROP Intermediate_Dir "console_debug_winthr"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\pcre" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /FR /YX /FD /c\r
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\pcre" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /FR /YX /FD /c\r
-# ADD BASE RSC /l 0x809 /d "_DEBUG"\r
-# ADD RSC /l 0x809 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-\r
-!ELSEIF  "$(CFG)" == "vc_console - Win32 Release with Win32 threads"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "console0"\r
-# PROP BASE Intermediate_Dir "console0"\r
-# PROP BASE Ignore_Export_Lib 0\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "console_release_winthr"\r
-# PROP Intermediate_Dir "console_release_winthr"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "..\pcre" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /YX /FD /c\r
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\pcre" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /YX /FD /c\r
-# ADD BASE RSC /l 0x809 /d "NDEBUG"\r
-# ADD RSC /l 0x809 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:console /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib /nologo /subsystem:console /machine:I386\r
-\r
-!ENDIF \r
-\r
-# Begin Target\r
-\r
-# Name "vc_console - Win32 Release"\r
-# Name "vc_console - Win32 Debug"\r
-# Name "vc_console - Win32 Debug with Win32 threads"\r
-# Name "vc_console - Win32 Release with Win32 threads"\r
-# Begin Group "Privoxy"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\actionlist.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\actions.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\actions.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgi.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgi.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgiedit.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgiedit.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgisimple.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgisimple.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\config.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\deanimate.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\deanimate.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\errlog.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\errlog.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\filters.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\filters.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\jcc.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\jcc.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\killpopup.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\killpopup.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\loadcfg.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\loadcfg.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\loaders.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\loaders.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\parsers.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\parsers.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\project.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\urlmatch.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\urlmatch.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Win32"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cygwin.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\win32.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\win32.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "PCRE"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\chartables.c\r
-\r
-!IF  "$(CFG)" == "vc_console - Win32 Release"\r
-\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_console - Win32 Debug"\r
-\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_console - Win32 Debug with Win32 threads"\r
-\r
-# PROP BASE Exclude_From_Build 1\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_console - Win32 Release with Win32 threads"\r
-\r
-# PROP BASE Exclude_From_Build 1\r
-# PROP Exclude_From_Build 1\r
-\r
-!ENDIF \r
-\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\config.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\get.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\internal.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\maketables.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcre.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcre.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcreposix.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcreposix.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\study.c\r
-# End Source File\r
-# End Group\r
-# Begin Group "PCRS"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\pcrs.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\pcrs.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Sockets"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\gateway.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\gateway.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\jbsockets.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\jbsockets.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Utilities"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\encode.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\encode.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\list.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\list.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\miscutil.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\miscutil.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\ssplit.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\ssplit.h\r
-# End Source File\r
-# End Group\r
-# End Target\r
-# End Project\r
+# Microsoft Developer Studio Project File - Name="vc_console" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=vc_console - Win32 Debug with Win32 threads
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "vc_console.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "vc_console.mak"\
+ CFG="vc_console - Win32 Debug with Win32 threads"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "vc_console - Win32 Release" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "vc_console - Win32 Debug" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "vc_console - Win32 Debug with Win32 threads" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "vc_console - Win32 Release with Win32 threads" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "vc_console - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "console_release"
+# PROP Intermediate_Dir "console_release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "pcre" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF  "$(CFG)" == "vc_console - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "console_debug"
+# PROP Intermediate_Dir "console_debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "pcre" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /FR /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ELSEIF  "$(CFG)" == "vc_console - Win32 Debug with Win32 threads"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "console_"
+# PROP BASE Intermediate_Dir "console_"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "console_debug_winthr"
+# PROP Intermediate_Dir "console_debug_winthr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "pcre" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /FR /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "pcre" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /FR /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ELSEIF  "$(CFG)" == "vc_console - Win32 Release with Win32 threads"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "console0"
+# PROP BASE Intermediate_Dir "console0"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "console_release_winthr"
+# PROP Intermediate_Dir "console_release_winthr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "pcre" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "pcre" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WIN_CONSOLE" /D "STATIC" /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib /nologo /subsystem:console /machine:I386
+
+!ENDIF 
+
+# Begin Target
+
+# Name "vc_console - Win32 Release"
+# Name "vc_console - Win32 Debug"
+# Name "vc_console - Win32 Debug with Win32 threads"
+# Name "vc_console - Win32 Release with Win32 threads"
+# Begin Group "JunkBuster"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\actionlist.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\actions.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\actions.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgi.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgiedit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgiedit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgisimple.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgisimple.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\deanimate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\deanimate.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\errlog.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\errlog.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\filters.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\filters.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\jcc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\jcc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\killpopup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\killpopup.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\loadcfg.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\loadcfg.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\loaders.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\loaders.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\parsers.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\parsers.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\project.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\urlmatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\urlmatch.h
+# End Source File
+# End Group
+# Begin Group "Win32"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\cygwin.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\win32.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\win32.h
+# End Source File
+# End Group
+# Begin Group "PCRE"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\pcre\chartables.c
+
+!IF  "$(CFG)" == "vc_console - Win32 Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_console - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_console - Win32 Debug with Win32 threads"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_console - Win32 Release with Win32 threads"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\get.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\internal.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\maketables.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\pcre.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\pcre.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\pcreposix.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\pcreposix.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\study.c
+# End Source File
+# End Group
+# Begin Group "PCRS"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\pcrs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcrs.h
+# End Source File
+# End Group
+# Begin Group "Sockets"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\gateway.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\gateway.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\jbsockets.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\jbsockets.h
+# End Source File
+# End Group
+# Begin Group "Utilities"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\encode.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\encode.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\list.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\list.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\miscutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\miscutil.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ssplit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\ssplit.h
+# End Source File
+# End Group
+# End Target
+# End Project
similarity index 76%
rename from visualc/vc_privoxy.dsp
rename to vc_privoxy.dsp
index 10f2458..a364e17 100644 (file)
-# Microsoft Developer Studio Project File - Name="vc_privoxy" - Package Owner=<4>\r
-# Microsoft Developer Studio Generated Build File, Format Version 5.00\r
-# ** DO NOT EDIT **\r
-\r
-# TARGTYPE "Win32 (x86) Application" 0x0101\r
-\r
-CFG=vc_privoxy - Win32 Debug with Win32 threads\r
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
-!MESSAGE use the Export Makefile command and run\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "vc_privoxy.mak".\r
-!MESSAGE \r
-!MESSAGE You can specify a configuration when running NMAKE\r
-!MESSAGE by defining the macro CFG on the command line. For example:\r
-!MESSAGE \r
-!MESSAGE NMAKE /f "vc_privoxy.mak"\\r
- CFG="vc_privoxy - Win32 Debug with Win32 threads"\r
-!MESSAGE \r
-!MESSAGE Possible choices for configuration are:\r
-!MESSAGE \r
-!MESSAGE "vc_privoxy - Win32 Release" (based on "Win32 (x86) Application")\r
-!MESSAGE "vc_privoxy - Win32 Debug" (based on "Win32 (x86) Application")\r
-!MESSAGE "vc_privoxy - Win32 Release with Win32 threads" (based on\\r
- "Win32 (x86) Application")\r
-!MESSAGE "vc_privoxy - Win32 Debug with Win32 threads" (based on\\r
- "Win32 (x86) Application")\r
-!MESSAGE \r
-\r
-# Begin Project\r
-# PROP Scc_ProjName ""\r
-# PROP Scc_LocalPath ""\r
-CPP=cl.exe\r
-MTL=midl.exe\r
-RSC=rc.exe\r
-\r
-!IF  "$(CFG)" == "vc_privoxy - Win32 Release"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "vc_release"\r
-# PROP BASE Intermediate_Dir "vc_release"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "vc_release"\r
-# PROP Intermediate_Dir "vc_release"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "..\pcre" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c\r
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32\r
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32\r
-# ADD BASE RSC /l 0x809 /d "NDEBUG"\r
-# ADD RSC /l 0x809 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:windows /machine:I386\r
-\r
-!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Debug"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "vc_debug"\r
-# PROP BASE Intermediate_Dir "vc_debug"\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "vc_debug"\r
-# PROP Intermediate_Dir "vc_debug"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c\r
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\pcre" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c\r
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32\r
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32\r
-# ADD BASE RSC /l 0x809 /d "_DEBUG"\r
-# ADD RSC /l 0x809 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\r
-\r
-!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Release with Win32 threads"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 0\r
-# PROP BASE Output_Dir "vc_junkb"\r
-# PROP BASE Intermediate_Dir "vc_junkb"\r
-# PROP BASE Ignore_Export_Lib 0\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 0\r
-# PROP Output_Dir "vc_release_winthr"\r
-# PROP Intermediate_Dir "vc_release_winthr"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "..\pcre" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c\r
-# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "..\pcre" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c\r
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32\r
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32\r
-# ADD BASE RSC /l 0x809 /d "NDEBUG"\r
-# ADD RSC /l 0x809 /d "NDEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:windows /machine:I386\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib /nologo /subsystem:windows /machine:I386\r
-\r
-!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Debug with Win32 threads"\r
-\r
-# PROP BASE Use_MFC 0\r
-# PROP BASE Use_Debug_Libraries 1\r
-# PROP BASE Output_Dir "vc_junk0"\r
-# PROP BASE Intermediate_Dir "vc_junk0"\r
-# PROP BASE Ignore_Export_Lib 0\r
-# PROP BASE Target_Dir ""\r
-# PROP Use_MFC 0\r
-# PROP Use_Debug_Libraries 1\r
-# PROP Output_Dir "vc_debug_winthr"\r
-# PROP Intermediate_Dir "vc_debug_winthr"\r
-# PROP Ignore_Export_Lib 0\r
-# PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /O2 /I "..\pcre" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /YX /FD /c\r
-# ADD CPP /nologo /MTd /W4 /Gm /GX /Zi /Od /I "..\pcre" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c\r
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32\r
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32\r
-# ADD BASE RSC /l 0x809 /d "_DEBUG"\r
-# ADD RSC /l 0x809 /d "_DEBUG"\r
-BSC32=bscmake.exe\r
-# ADD BASE BSC32 /nologo\r
-# ADD BSC32 /nologo\r
-LINK32=link.exe\r
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\r
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept\r
-\r
-!ENDIF \r
-\r
-# Begin Target\r
-\r
-# Name "vc_privoxy - Win32 Release"\r
-# Name "vc_privoxy - Win32 Debug"\r
-# Name "vc_privoxy - Win32 Release with Win32 threads"\r
-# Name "vc_privoxy - Win32 Debug with Win32 threads"\r
-# Begin Group "Privoxy"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\actionlist.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\actions.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\actions.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgi.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgi.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgiedit.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgiedit.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgisimple.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cgisimple.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\config.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\deanimate.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\deanimate.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\errlog.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\errlog.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\filters.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\filters.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\jcc.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\jcc.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\killpopup.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\killpopup.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\loadcfg.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\loadcfg.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\loaders.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\loaders.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\parsers.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\parsers.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\project.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\urlmatch.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\urlmatch.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Win32"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\cygwin.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\w32log.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\w32log.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\w32res.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\w32taskbar.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\w32taskbar.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\win32.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\win32.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Resources"\r
-\r
-# PROP Default_Filter "rc,ico,bmp"\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\ico00001.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\ico00002.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\ico00003.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\ico00004.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\ico00005.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\ico00006.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\ico00007.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\ico00008.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\idle.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\icons\privoxy.ico\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\w32res.rc\r
-# End Source File\r
-# End Group\r
-# Begin Group "PCRE"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\chartables.c\r
-\r
-!IF  "$(CFG)" == "vc_privoxy - Win32 Release"\r
-\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Debug"\r
-\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Release with Win32 threads"\r
-\r
-# PROP BASE Exclude_From_Build 1\r
-# PROP Exclude_From_Build 1\r
-\r
-!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Debug with Win32 threads"\r
-\r
-# PROP BASE Exclude_From_Build 1\r
-# PROP Exclude_From_Build 1\r
-\r
-!ENDIF \r
-\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\config.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\get.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\internal.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\maketables.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcre.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcre.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcreposix.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\pcreposix.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\pcre\study.c\r
-# End Source File\r
-# End Group\r
-# Begin Group "PCRS"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\pcrs.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\pcrs.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Sockets"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\gateway.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\gateway.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\jbsockets.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\jbsockets.h\r
-# End Source File\r
-# End Group\r
-# Begin Group "Utilities"\r
-\r
-# PROP Default_Filter ""\r
-# Begin Source File\r
-\r
-SOURCE=..\src\encode.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\encode.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\list.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\list.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\miscutil.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\miscutil.h\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\ssplit.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\src\ssplit.h\r
-# End Source File\r
-# End Group\r
-# End Target\r
-# End Project\r
+# Microsoft Developer Studio Project File - Name="vc_privoxy" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 5.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Application" 0x0101
+
+CFG=vc_privoxy - Win32 Debug with Win32 threads
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "vc_privoxy.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "vc_privoxy.mak"\
+ CFG="vc_privoxy - Win32 Debug with Win32 threads"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "vc_privoxy - Win32 Release" (based on "Win32 (x86) Application")
+!MESSAGE "vc_privoxy - Win32 Debug" (based on "Win32 (x86) Application")
+!MESSAGE "vc_privoxy - Win32 Release with Win32 threads" (based on\
+ "Win32 (x86) Application")
+!MESSAGE "vc_privoxy - Win32 Debug with Win32 threads" (based on\
+ "Win32 (x86) Application")
+!MESSAGE 
+
+# Begin Project
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "vc_privoxy - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "vc_release"
+# PROP BASE Intermediate_Dir "vc_release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "vc_release"
+# PROP Intermediate_Dir "vc_release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "pcre" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:windows /machine:I386
+
+!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "vc_debug"
+# PROP BASE Intermediate_Dir "vc_debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "vc_debug"
+# PROP Intermediate_Dir "vc_debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "pcre" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+
+!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Release with Win32 threads"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "vc_junkb"
+# PROP BASE Intermediate_Dir "vc_junkb"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "vc_release_winthr"
+# PROP Intermediate_Dir "vc_release_winthr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "pcre" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "pcre" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib /nologo /subsystem:windows /machine:I386
+
+!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Debug with Win32 threads"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "vc_junk0"
+# PROP BASE Intermediate_Dir "vc_junk0"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "vc_debug_winthr"
+# PROP Intermediate_Dir "vc_debug_winthr"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /O2 /I "pcre" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /YX /FD /c
+# ADD CPP /nologo /MTd /W4 /Gm /GX /Zi /Od /I "pcre" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "STATIC" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib pthreadVC.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib ws2_32.lib comctl32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "vc_privoxy - Win32 Release"
+# Name "vc_privoxy - Win32 Debug"
+# Name "vc_privoxy - Win32 Release with Win32 threads"
+# Name "vc_privoxy - Win32 Debug with Win32 threads"
+# Begin Group "JunkBuster"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\actionlist.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\actions.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\actions.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgi.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgiedit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgiedit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgisimple.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\cgisimple.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\deanimate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\deanimate.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\errlog.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\errlog.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\filters.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\filters.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\jcc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\jcc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\killpopup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\killpopup.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\loadcfg.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\loadcfg.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\loaders.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\loaders.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\parsers.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\parsers.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\project.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\urlmatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\urlmatch.h
+# End Source File
+# End Group
+# Begin Group "Win32"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\cygwin.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\w32log.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\w32log.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\w32res.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\w32taskbar.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\w32taskbar.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\win32.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\win32.h
+# End Source File
+# End Group
+# Begin Group "Resources"
+
+# PROP Default_Filter "rc,ico,bmp"
+# Begin Source File
+
+SOURCE=.\icons\ico00001.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\ico00002.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\ico00003.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\ico00004.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\ico00005.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\ico00006.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\ico00007.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\ico00008.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\idle.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\icons\privoxy.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\w32.rc
+# End Source File
+# End Group
+# Begin Group "PCRE"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\pcre\chartables.c
+
+!IF  "$(CFG)" == "vc_privoxy - Win32 Release"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Release with Win32 threads"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "vc_privoxy - Win32 Debug with Win32 threads"
+
+# PROP BASE Exclude_From_Build 1
+# PROP Exclude_From_Build 1
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\get.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\internal.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\maketables.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\pcre.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\pcre.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\pcreposix.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\pcreposix.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcre\study.c
+# End Source File
+# End Group
+# Begin Group "PCRS"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\pcrs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\pcrs.h
+# End Source File
+# End Group
+# Begin Group "Sockets"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\gateway.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\gateway.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\jbsockets.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\jbsockets.h
+# End Source File
+# End Group
+# Begin Group "Utilities"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\encode.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\encode.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\list.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\list.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\miscutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\miscutil.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ssplit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\ssplit.h
+# End Source File
+# End Group
+# End Target
+# End Project
similarity index 89%
rename from visualc/vc_privoxy.dsw
rename to vc_privoxy.dsw
index 5344667..9685de2 100644 (file)
@@ -1,59 +1,59 @@
-Microsoft Developer Studio Workspace File, Format Version 5.00\r
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r
-\r
-###############################################################################\r
-\r
-Project: "vc_console"=".\vc_console.dsp" - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name vc_dftables\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
-Project: "vc_dftables"=".\vc_dftables.dsp" - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-}}}\r
-\r
-###############################################################################\r
-\r
-Project: "vc_privoxy"=".\vc_privoxy.dsp" - Package Owner=<4>\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<4>\r
-{{{\r
-    Begin Project Dependency\r
-    Project_Dep_Name vc_dftables\r
-    End Project Dependency\r
-}}}\r
-\r
-###############################################################################\r
-\r
-Global:\r
-\r
-Package=<5>\r
-{{{\r
-}}}\r
-\r
-Package=<3>\r
-{{{\r
-}}}\r
-\r
-###############################################################################\r
-\r
+Microsoft Developer Studio Workspace File, Format Version 5.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "vc_console"=".\vc_console.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name vc_dftables
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "vc_dftables"=".\pcre\vc_dftables.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "vc_privoxy"=".\vc_privoxy.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name vc_dftables
+    End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/visualc/.gitignore b/visualc/.gitignore
deleted file mode 100644 (file)
index fb363d3..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-*.ncb
-*.plg
-*.opt
-console_debug
-console_debug_winthr
-console_release
-console_release_winthr
-vc_dftables
-vc_dftables_dbg
-vc_debug
-vc_debug_winthr
-vc_release
-vc_release_winthr
similarity index 89%
rename from src/w32res.rc
rename to w32.rc
index 92d2d13..c936b3f 100644 (file)
+++ b/w32.rc
@@ -1,6 +1,6 @@
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/w32res.rc,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/w32.rc,v $
  *
  * Purpose     :  Windows GUI resource script.
  *
  *
  * Purpose     :  Windows GUI resource script.
  *
  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  * Revisions   :
  *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  * Revisions   :
- *    $Log: w32res.rc,v $
- *    Revision 2.1  2002/09/05 08:26:42  oes
- *    Synced with the stable branch:
- *        Revision 1.17.2.1  2002/08/21 17:58:40  oes
- *         - Reorder of Win32 menu
- *         - "Show Privoxy Window" now a toggle
- *         - Temp kludge to let user and default action file be edited through win32 GUI (FR 592080)
- *
- *    Revision 2.0  2002/06/04 14:43:03  jongfoster
- *    Moving to src/, renaming from w32.rc to w32res.rc
+ *    $Log: w32.rc,v $
+ *    Revision 1.17.2.1  2002/08/21 17:58:40  oes
+ *     - Reorder of Win32 menu
+ *     - "Show Privoxy Window" now a toggle
+ *     - Temp kludge to let user and default action file be edited through win32 GUI (FR 592080)
  *
  *    Revision 1.17  2002/03/31 17:19:00  jongfoster
  *    Win32 only: Enabling STRICT to fix a VC++ compile warning.
  *
  *    Revision 1.17  2002/03/31 17:19:00  jongfoster
  *    Win32 only: Enabling STRICT to fix a VC++ compile warning.
  * Icon with lowest ID value placed first to ensure application icon
  * remains consistent on all systems.
  */
  * Icon with lowest ID value placed first to ensure application icon
  * remains consistent on all systems.
  */
-IDI_MAINICON            ICON    DISCARDABLE     "src/icons/privoxy.ico"
-IDI_ANIMATED1           ICON    DISCARDABLE     "src/icons/ico00001.ico"
-IDI_ANIMATED2           ICON    DISCARDABLE     "src/icons/ico00002.ico"
-IDI_ANIMATED3           ICON    DISCARDABLE     "src/icons/ico00003.ico"
-IDI_ANIMATED4           ICON    DISCARDABLE     "src/icons/ico00004.ico"
-IDI_ANIMATED5           ICON    DISCARDABLE     "src/icons/ico00005.ico"
-IDI_ANIMATED6           ICON    DISCARDABLE     "src/icons/ico00006.ico"
-IDI_ANIMATED7           ICON    DISCARDABLE     "src/icons/ico00007.ico"
-IDI_ANIMATED8           ICON    DISCARDABLE     "src/icons/ico00008.ico"
-IDI_IDLE                ICON    DISCARDABLE     "src/icons/idle.ico"
+IDI_MAINICON            ICON    DISCARDABLE     "icons/privoxy.ico"
+IDI_ANIMATED1           ICON    DISCARDABLE     "icons/ico00001.ico"
+IDI_ANIMATED2           ICON    DISCARDABLE     "icons/ico00002.ico"
+IDI_ANIMATED3           ICON    DISCARDABLE     "icons/ico00003.ico"
+IDI_ANIMATED4           ICON    DISCARDABLE     "icons/ico00004.ico"
+IDI_ANIMATED5           ICON    DISCARDABLE     "icons/ico00005.ico"
+IDI_ANIMATED6           ICON    DISCARDABLE     "icons/ico00006.ico"
+IDI_ANIMATED7           ICON    DISCARDABLE     "icons/ico00007.ico"
+IDI_ANIMATED8           ICON    DISCARDABLE     "icons/ico00008.ico"
+IDI_IDLE                ICON    DISCARDABLE     "icons/idle.ico"
 
 #endif /* Neutral resources */
 
 
 #endif /* Neutral resources */
 
similarity index 93%
rename from src/w32log.c
rename to w32log.c
index 761891d..732c0a3 100644 (file)
+++ b/w32log.c
@@ -1,7 +1,7 @@
-const char w32log_rcs[] = "$Id: w32log.c,v 2.3 2002/09/12 14:30:32 oes Exp $";
+const char w32log_rcs[] = "$Id: w32log.c,v 1.25.2.5 2003/04/04 12:48:51 oes Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/w32log.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/w32log.c,v $
  *
  * Purpose     :  Functions for creating and destroying the log window,
  *                ouputting strings, processing messages and so on.
  *
  * Purpose     :  Functions for creating and destroying the log window,
  *                ouputting strings, processing messages and so on.
@@ -32,20 +32,24 @@ const char w32log_rcs[] = "$Id: w32log.c,v 2.3 2002/09/12 14:30:32 oes Exp $";
  *
  * Revisions   :
  *    $Log: w32log.c,v $
  *
  * Revisions   :
  *    $Log: w32log.c,v $
- *    Revision 2.3  2002/09/12 14:30:32  oes
- *    Uncheck the "Show Privoxy Window" taskbar menu item when window gets minimized. Fixes bug #606804
+ *    Revision 1.25.2.5  2003/04/04 12:48:51  oes
+ *    Fixed bug #711865:
+ *     - Made tray menu correctly reflect initial window visibility state
+ *     - Hopefully fixed problem where log window contents wasn't visible
+ *       until vertical scroll bar was clicked. Thanks to Guy for the fix!
+ *
+ *    Revision 1.25.2.4  2003/03/11 11:53:59  oes
+ *    Cosmetic: Renamed cryptic variable
  *
  *
- *    Revision 2.2  2002/09/05 08:43:11  oes
- *    Synced with the stable branch:
- *        Revision 1.25.2.1  2002/08/21 17:59:05  oes
- *         - "Show Privoxy Window" now a toggle
- *         - Temp kludge to let user and default action file be edited through win32 GUI (FR 592080)
+ *    Revision 1.25.2.3  2002/11/20 14:39:05  oes
+ *    Fixed compiler warning
  *
  *
- *    Revision 2.1  2002/06/04 16:37:48  jongfoster
- *    Adding Doxygen-style comments to variables
+ *    Revision 1.25.2.2  2002/09/25 15:23:10  oes
+ *    Uncheck the "Show Privoxy Window" taskbar menu item when window gets minimized. Fixes bug #606804
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.25.2.1  2002/08/21 17:59:05  oes
+ *     - "Show Privoxy Window" now a toggle
+ *     - Temp kludge to let user and default action file be edited through win32 GUI (FR 592080)
  *
  *    Revision 1.25  2002/04/04 00:36:36  gliptak
  *    always use pcre for matching
  *
  *    Revision 1.25  2002/04/04 00:36:36  gliptak
  *    always use pcre for matching
@@ -236,70 +240,59 @@ const char w32log_h_rcs[] = W32LOG_H_VERSION;
  * configurable through the UI.
  */
 
  * configurable through the UI.
  */
 
-/** Indicates whether task bar shows activity animation */
+/* Indicates whether task bar shows activity animation */
 BOOL g_bShowActivityAnimation = 1;
 
 BOOL g_bShowActivityAnimation = 1;
 
-/** Indicates whether the log window is shown */
+/* Indicates whether the log window is shown */
 BOOL g_bShowLogWindow = 1;
 
 BOOL g_bShowLogWindow = 1;
 
-/** Indicates if the log window appears on the task bar */
+/* Indicates if the log window appears on the task bar */
 BOOL g_bShowOnTaskBar = 0;
 
 BOOL g_bShowOnTaskBar = 0;
 
-/** Indicates whether closing the log window really just hides it */
+/* Indicates whether closing the log window really just hides it */
 BOOL g_bCloseHidesWindow = 1;
 
 BOOL g_bCloseHidesWindow = 1;
 
-/** Indicates if messages are logged at all */
+/* Indicates if messages are logged at all */
 BOOL g_bLogMessages = 1;
 
 BOOL g_bLogMessages = 1;
 
-/** Indicates whether log messages are highlighted */
+/* Indicates whether log messages are highlighted */
 BOOL g_bHighlightMessages = 1;
 
 BOOL g_bHighlightMessages = 1;
 
-/** Indicates if buffer is limited in size */
+/* Indicates if buffer is limited in size */
 BOOL g_bLimitBufferSize = 1;
 
 BOOL g_bLimitBufferSize = 1;
 
-/** Maximum number of lines allowed in buffer when limited */
+/* Maximum number of lines allowed in buffer when limited */
 int g_nMaxBufferLines = DEFAULT_MAX_BUFFER_LINES;
 
 int g_nMaxBufferLines = DEFAULT_MAX_BUFFER_LINES;
 
-/** Font to use */
+/* Font to use */
 char g_szFontFaceName[255] = DEFAULT_LOG_FONT_NAME;
 
 char g_szFontFaceName[255] = DEFAULT_LOG_FONT_NAME;
 
-/** Size of font to use */
+/* Size of font to use */
 int g_nFontSize = DEFAULT_LOG_FONT_SIZE;
 
 
 /* FIXME: this is a kludge */
 
 int g_nFontSize = DEFAULT_LOG_FONT_SIZE;
 
 
 /* FIXME: this is a kludge */
 
-/** Second (=default, hopefully) Actions file name. */
 const char * g_default_actions_file = NULL;
 const char * g_default_actions_file = NULL;
-
-/** Third (=user, hopefully) Actions file name. */
 const char * g_user_actions_file = NULL;
 const char * g_user_actions_file = NULL;
-
-/** Filter file name. */
 const char * g_re_filterfile = NULL;
 const char * g_re_filterfile = NULL;
-
 #ifdef FEATURE_TRUST
 #ifdef FEATURE_TRUST
-
-/** Trust file name. */
 const char * g_trustfile = NULL;
 const char * g_trustfile = NULL;
-
 #endif /* def FEATURE_TRUST */
 
 /* FIXME: end kludge */
 
 #endif /* def FEATURE_TRUST */
 
 /* FIXME: end kludge */
 
-
-/** Regular expression for detected URLs */
+/* Regular expression for detected URLs */
 #define RE_URL "http:[^ \n\r]*"
 
 #define RE_URL "http:[^ \n\r]*"
 
-
-/**
- * Regular expressions that are used to perform highlight in the log window.
+/*
+ * Regular expressions that are used to perform highlight in the log window
  */
 static struct _Pattern
 {
  */
 static struct _Pattern
 {
-   const char *str;  /**< The pattern to match. */
-   int style;        /**< How to highlight it - one of the STYLE_xxx constants. */
-   regex_t buffer;   /**< The compiled pattern to use for matching. Generated from str. */
+   const char *str;
+   int style;
+   regex_t buffer;
 } patterns_to_highlight[] =
 {
    /* url headers */
 } patterns_to_highlight[] =
 {
    /* url headers */
@@ -307,7 +300,6 @@ static struct _Pattern
 /* { "[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[^ \n\r]*", STYLE_LINK }, */
    /* interesting text to highlight */
    { "crunch!",           STYLE_HIGHLIGHT },
 /* { "[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[a-zA-Z0-9]+\\.[^ \n\r]*", STYLE_LINK }, */
    /* interesting text to highlight */
    { "crunch!",           STYLE_HIGHLIGHT },
-   { "crunch:",           STYLE_HIGHLIGHT },
    /* http headers */
    { "referer:",            STYLE_HEADER },
    { "proxy-connection:",   STYLE_HEADER },
    /* http headers */
    { "referer:",            STYLE_HEADER },
    { "proxy-connection:",   STYLE_HEADER },
@@ -339,49 +331,22 @@ static struct _Pattern
 /*
  * Public variables
  */
 /*
  * Public variables
  */
-
-/**
- * Window handle for the log window.
- */
 HWND g_hwndLogFrame;
 HWND g_hwndLogFrame;
-
+HICON g_hiconApp;
 
 /*
  * Private variables
  */
 
 /*
  * Private variables
  */
-
-/** Critical section used to serialize output to the log window. */
 static CRITICAL_SECTION g_criticalsection;
 static CRITICAL_SECTION g_criticalsection;
-
-/** The window handle of the tray icon window. */
 static HWND g_hwndTray;
 static HWND g_hwndTray;
-
-/** The window handle of the log window. */
 static HWND g_hwndLogBox;
 static HWND g_hwndLogBox;
-
-/** The default window procedure for the rich edit control.  Set when we
-    subclass this window. */
 static WNDPROC g_fnLogBox;
 static WNDPROC g_fnLogBox;
-
-/** The icons for the activity animation. */
 static HICON g_hiconAnim[ANIM_FRAMES];
 static HICON g_hiconAnim[ANIM_FRAMES];
-
-/** The icon to use when idle. */
 static HICON g_hiconIdle;
 static HICON g_hiconIdle;
-
-/** The main application icon. */
-static HICON g_hiconApp;
-
-/** The index of the current animation frame. */
 static int g_nAnimFrame;
 static int g_nAnimFrame;
-
-/** If a timer to call LogClipBuffer() has been started. */
 static BOOL g_bClipPending = FALSE;
 static BOOL g_bClipPending = FALSE;
-
-/** The version of the rich edit control we're using. */
 static int g_nRichEditVersion = 0;
 
 static int g_nRichEditVersion = 0;
 
-
 /*
  * Private functions
  */
 /*
  * Private functions
  */
@@ -780,7 +745,6 @@ void LogShowActivity(void)
  * Function    :  LogClipBuffer
  *
  * Description :  Prunes old lines from the log.
  * Function    :  LogClipBuffer
  *
  * Description :  Prunes old lines from the log.
- *                This is called occasionally, from a timer callback.
  *
  * Parameters  :  None
  *
  *
  * Parameters  :  None
  *
@@ -810,10 +774,17 @@ void LogClipBuffer(void)
       SendMessage(g_hwndLogBox, EM_REPLACESEL, FALSE, (LPARAM) "");
       SendMessage(g_hwndLogBox, EM_SETOPTIONS, ECOOP_XOR, ECO_AUTOVSCROLL);
 
       SendMessage(g_hwndLogBox, EM_REPLACESEL, FALSE, (LPARAM) "");
       SendMessage(g_hwndLogBox, EM_SETOPTIONS, ECOOP_XOR, ECO_AUTOVSCROLL);
 
-      /* Restore old selection */
+      /* reposition (back to) the end of the log content */
+      range.cpMin = SendMessage (g_hwndLogBox, WM_GETTEXTLENGTH, 0, 0);
+      range.cpMax = -1;
+      SendMessage(g_hwndLogBox, EM_EXSETSEL, 0, (LPARAM) &range);
+      /* restore vertical ScrollBar stuff (messed up by AUTOVSCROLL) */
+      SendMessage (g_hwndLogBox, EM_SCROLL, SB_LINEDOWN, 0);
    }
 
    }
 
-}
+}                                        
 
 
 /*********************************************************************
 
 
 /*********************************************************************
@@ -942,12 +913,14 @@ HWND CreateLogWindow(HINSTANCE hInstance, int nCmdShow)
           nCmdShow == SW_MINIMIZE ||
           nCmdShow == SW_SHOWMINNOACTIVE))
    {
           nCmdShow == SW_MINIMIZE ||
           nCmdShow == SW_SHOWMINNOACTIVE))
    {
+      g_bShowLogWindow = FALSE;
       nCmdShow = SW_HIDE;
    }
 
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
 
       nCmdShow = SW_HIDE;
    }
 
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
 
+
    GetClientRect(g_hwndLogFrame, &rcClient);
    SetWindowPos(g_hwndLogBox, NULL, rcClient.left, rcClient.top, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, SWP_NOZORDER);
 
    GetClientRect(g_hwndLogFrame, &rcClient);
    SetWindowPos(g_hwndLogBox, NULL, rcClient.left, rcClient.top, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, SWP_NOZORDER);
 
@@ -1153,8 +1126,8 @@ void OnLogCommand(int nCommand)
 #ifdef FEATURE_TOGGLE
       /* by haroon - change toggle to its opposite value */
       case ID_TOGGLE_ENABLED:
 #ifdef FEATURE_TOGGLE
       /* by haroon - change toggle to its opposite value */
       case ID_TOGGLE_ENABLED:
-         g_bToggleIJB = !g_bToggleIJB;
-         if (g_bToggleIJB)
+         global_toggle_state = !global_toggle_state;
+         if (global_toggle_state)
          {
             log_error(LOG_LEVEL_INFO, "Now toggled ON.");
          }
          {
             log_error(LOG_LEVEL_INFO, "Now toggled ON.");
          }
@@ -1245,7 +1218,7 @@ void OnLogInitMenu(HMENU hmenu)
    CheckMenuItem(hmenu, ID_VIEW_ACTIVITYANIMATION, MF_BYCOMMAND | (g_bShowActivityAnimation ? MF_CHECKED : MF_UNCHECKED));
 #ifdef FEATURE_TOGGLE
    /* by haroon - menu item for Enable toggle on/off */
    CheckMenuItem(hmenu, ID_VIEW_ACTIVITYANIMATION, MF_BYCOMMAND | (g_bShowActivityAnimation ? MF_CHECKED : MF_UNCHECKED));
 #ifdef FEATURE_TOGGLE
    /* by haroon - menu item for Enable toggle on/off */
-   CheckMenuItem(hmenu, ID_TOGGLE_ENABLED, MF_BYCOMMAND | (g_bToggleIJB ? MF_CHECKED : MF_UNCHECKED));
+   CheckMenuItem(hmenu, ID_TOGGLE_ENABLED, MF_BYCOMMAND | (global_toggle_state ? MF_CHECKED : MF_UNCHECKED));
 #endif /* def FEATURE_TOGGLE */
    CheckMenuItem(hmenu, ID_TOGGLE_SHOWWINDOW, MF_BYCOMMAND | (g_bShowLogWindow ? MF_CHECKED : MF_UNCHECKED));
 
 #endif /* def FEATURE_TOGGLE */
    CheckMenuItem(hmenu, ID_TOGGLE_SHOWWINDOW, MF_BYCOMMAND | (g_bShowLogWindow ? MF_CHECKED : MF_UNCHECKED));
 
similarity index 93%
rename from src/w32log.h
rename to w32log.h
index 9ef92f9..cb40997 100644 (file)
+++ b/w32log.h
@@ -1,9 +1,9 @@
 #ifndef W32LOG_H_INCLUDED
 #define W32LOG_H_INCLUDED
 #ifndef W32LOG_H_INCLUDED
 #define W32LOG_H_INCLUDED
-#define W32LOG_H_VERSION "$Id: w32log.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define W32LOG_H_VERSION "$Id: w32log.h,v 1.10.2.2 2002/11/20 14:39:05 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa//current/src/w32log.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/w32log.h,v $
  *
  * Purpose     :  Functions for creating and destroying the log window,
  *                ouputting strings, processing messages and so on.
  *
  * Purpose     :  Functions for creating and destroying the log window,
  *                ouputting strings, processing messages and so on.
  *
  * Revisions   :
  *    $Log: w32log.h,v $
  *
  * Revisions   :
  *    $Log: w32log.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.10.2.2  2002/11/20 14:39:05  oes
+ *    Fixed compiler warning
+ *
+ *    Revision 1.10.2.1  2002/08/21 17:58:05  oes
+ *    Temp kludge to let user and default action file be edited through win32 GUI (FR 592080)
  *
  *    Revision 1.10  2002/03/26 22:57:10  jongfoster
  *    Web server name should begin www.
  *
  *    Revision 1.10  2002/03/26 22:57:10  jongfoster
  *    Web server name should begin www.
@@ -144,6 +147,7 @@ extern const char * g_trustfile;
 
 /* FIXME: end kludge */
 
 
 /* FIXME: end kludge */
 
+extern HICON g_hiconApp;
 extern int LogPutString(const char *pszText);
 extern BOOL InitLogWindow(void);
 extern void TermLogWindow(void);
 extern int LogPutString(const char *pszText);
 extern BOOL InitLogWindow(void);
 extern void TermLogWindow(void);
similarity index 95%
rename from src/w32res.h
rename to w32res.h
index 38ba8d4..843359a 100644 (file)
+++ b/w32res.h
@@ -1,9 +1,9 @@
 #ifndef W32RES_H_INCLUDED
 #define W32RES_H_INCLUDED
 #ifndef W32RES_H_INCLUDED
 #define W32RES_H_INCLUDED
-#define W32RES_H_VERSION "$Id: w32res.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define W32RES_H_VERSION "$Id: w32res.h,v 1.13.2.1 2002/08/21 17:59:06 oes Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa//current/src/w32res.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/w32res.h,v $
  *
  * Purpose     :  Identifiers for Windows GUI resources.
  *
  *
  * Purpose     :  Identifiers for Windows GUI resources.
  *
@@ -34,8 +34,9 @@
  *
  * Revisions   :
  *    $Log: w32res.h,v $
  *
  * Revisions   :
  *    $Log: w32res.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.13.2.1  2002/08/21 17:59:06  oes
+ *     - "Show Privoxy Window" now a toggle
+ *     - Temp kludge to let user and default action file be edited through win32 GUI (FR 592080)
  *
  *    Revision 1.13  2002/03/26 22:57:10  jongfoster
  *    Web server name should begin www.
  *
  *    Revision 1.13  2002/03/26 22:57:10  jongfoster
  *    Web server name should begin www.
similarity index 91%
rename from src/w32taskbar.c
rename to w32taskbar.c
index a963bc0..bc35db8 100644 (file)
@@ -1,7 +1,7 @@
-const char w32taskbar_rcs[] = "$Id: w32taskbar.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $";
+const char w32taskbar_rcs[] = "$Id: w32taskbar.c,v 1.7.2.2 2003/03/19 21:27:42 gliptak Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/w32taskbar.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/w32taskbar.c,v $
  *
  * Purpose     :  Functions for creating, setting and destroying the
  *                workspace tray icon
  *
  * Purpose     :  Functions for creating, setting and destroying the
  *                workspace tray icon
@@ -32,8 +32,12 @@ const char w32taskbar_rcs[] = "$Id: w32taskbar.c,v 2.0 2002/06/04 14:34:21 jongf
  *
  * Revisions   :
  *    $Log: w32taskbar.c,v $
  *
  * Revisions   :
  *    $Log: w32taskbar.c,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.7.2.2  2003/03/19 21:27:42  gliptak
+ *    Corrected compilation error/typo
+ *
+ *    Revision 1.7.2.1  2002/11/20 14:39:32  oes
+ *    Applied patch by Mattes Dolak which adds re-creation of the win32 taskbar
+ *    icon on reception of the "TaskbarCreated" window message.
  *
  *    Revision 1.7  2002/03/31 17:19:00  jongfoster
  *    Win32 only: Enabling STRICT to fix a VC++ compile warning.
  *
  *    Revision 1.7  2002/03/31 17:19:00  jongfoster
  *    Win32 only: Enabling STRICT to fix a VC++ compile warning.
@@ -77,20 +81,11 @@ const char w32taskbar_h_rcs[] = W32TASKBAR_H_VERSION;
 
 #ifndef _WIN_CONSOLE /* entire file */
 
 
 #ifndef _WIN_CONSOLE /* entire file */
 
-/**
- * Our custom message ID.
- */
 #define WM_TRAYMSG WM_USER+1
 
 #define WM_TRAYMSG WM_USER+1
 
-/**
- * The menu handle for the tray icon's pop-up menu.
- */
 static HMENU g_hmenuTray;
 static HMENU g_hmenuTray;
-
-/**
- * The invisible window responsible for processing tray messages.
- */
 static HWND g_hwndTrayX;
 static HWND g_hwndTrayX;
+static UINT g_traycreatedmsg;
 
 static LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
 
 
 static LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
 
@@ -126,6 +121,9 @@ HWND CreateTrayWindow(HINSTANCE hInstance)
 
    RegisterClass(&wc);
 
 
    RegisterClass(&wc);
 
+   /* TaskbarCreated is sent to a window when it should re-add its tray icons */
+   g_traycreatedmsg = RegisterWindowMessage("TaskbarCreated"); 
+
    g_hwndTrayX = CreateWindow(szWndName, szWndName,
       WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
       CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
    g_hwndTrayX = CreateWindow(szWndName, szWndName,
       WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
       CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
@@ -286,7 +284,11 @@ LRESULT CALLBACK TrayProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
       return 0;
 
       default:
       return 0;
 
       default:
-         /* DO NOTHING */
+
+         if (msg == g_traycreatedmsg)
+         {
+            TrayAddIcon(g_hwndTrayX, 1, g_hiconApp, "Privoxy");
+         }
          break;
    }
 
          break;
    }
 
similarity index 97%
rename from src/w32taskbar.h
rename to w32taskbar.h
index 1ccc75c..18770c9 100644 (file)
@@ -3,7 +3,7 @@
 #define W32TASKBAR_H_VERSION "$Id: w32taskbar.h,v 1.4 2002/03/26 22:57:10 jongfoster Exp $"
 /*********************************************************************
  *
 #define W32TASKBAR_H_VERSION "$Id: w32taskbar.h,v 1.4 2002/03/26 22:57:10 jongfoster Exp $"
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/w32taskbar.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/w32taskbar.h,v $
  *
  * Purpose     :  Functions for creating, setting and destroying the
  *                workspace tray icon
  *
  * Purpose     :  Functions for creating, setting and destroying the
  *                workspace tray icon
similarity index 91%
rename from src/win32.c
rename to win32.c
index 6b9d70c..3115b05 100644 (file)
+++ b/win32.c
@@ -1,7 +1,7 @@
-const char win32_rcs[] = "$Id: win32.c,v 2.1 2002/06/04 16:37:48 jongfoster Exp $";
+const char win32_rcs[] = "$Id: win32.c,v 1.9.2.2 2002/08/27 18:03:40 oes Exp $";
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa//current/src/win32.c,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/win32.c,v $
  *
  * Purpose     :  Win32 User Interface initialization and message loop
  *
  *
  * Purpose     :  Win32 User Interface initialization and message loop
  *
@@ -31,11 +31,11 @@ const char win32_rcs[] = "$Id: win32.c,v 2.1 2002/06/04 16:37:48 jongfoster Exp
  *
  * Revisions   :
  *    $Log: win32.c,v $
  *
  * Revisions   :
  *    $Log: win32.c,v $
- *    Revision 2.1  2002/06/04 16:37:48  jongfoster
- *    Adding Doxygen-style comments to variables
+ *    Revision 1.9.2.2  2002/08/27 18:03:40  oes
+ *    Fixed stupid typo
  *
  *
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
+ *    Revision 1.9.2.1  2002/08/21 17:59:27  oes
+ *    Sync win32_blurb[] with our standard blurb
  *
  *    Revision 1.9  2002/03/31 17:19:00  jongfoster
  *    Win32 only: Enabling STRICT to fix a VC++ compile warning.
  *
  *    Revision 1.9  2002/03/31 17:19:00  jongfoster
  *    Win32 only: Enabling STRICT to fix a VC++ compile warning.
@@ -99,10 +99,6 @@ const char win32_rcs[] = "$Id: win32.c,v 2.1 2002/06/04 16:37:48 jongfoster Exp
 
 const char win32_h_rcs[] = WIN32_H_VERSION;
 
 
 const char win32_h_rcs[] = WIN32_H_VERSION;
 
-/**
- * A short introductory text about Privoxy.  Used for the "About" box
- * or the console startup message.
- */
 const char win32_blurb[] =
 "Privoxy version " VERSION " for Windows\n"
 "Copyright (C) 2000-2002 the Privoxy Team (" HOME_PAGE_URL ")\n"
 const char win32_blurb[] =
 "Privoxy version " VERSION " for Windows\n"
 "Copyright (C) 2000-2002 the Privoxy Team (" HOME_PAGE_URL ")\n"
@@ -111,38 +107,18 @@ const char win32_blurb[] =
 "GNU General Public License: http://www.gnu.org/copyleft/gpl.html .\n"
 "This program comes with ABSOLUTELY NO WARRANTY OF ANY KIND.\n";
 
 "GNU General Public License: http://www.gnu.org/copyleft/gpl.html .\n"
 "This program comes with ABSOLUTELY NO WARRANTY OF ANY KIND.\n";
 
-
 #ifdef _WIN_CONSOLE
 
 #ifdef _WIN_CONSOLE
 
-
-/**
- * Hide the console.  If set, the program will disconnect from the 
- * console and run in the background.  This allows the command-prompt
- * window to close.
- */
 int hideConsole     = 0;
 
 int hideConsole     = 0;
 
+#else
 
 
-#else /* ndef _WIN_CONSOLE */
-
-
-/**
- * The application instance handle.
- */
 HINSTANCE g_hInstance;
 HINSTANCE g_hInstance;
-
-
-/**
- * The command to show the window that was specified at startup.
- */
 int g_nCmdShow;
 
 int g_nCmdShow;
 
-
 static void  __cdecl UserInterfaceThread(void *);
 
 static void  __cdecl UserInterfaceThread(void *);
 
-
-#endif /* ndef _WIN_CONSOLE */
-
+#endif
 
 
 /*********************************************************************
 
 
 /*********************************************************************
similarity index 90%
rename from src/win32.h
rename to win32.h
index 3ed3ed9..31d8a8b 100644 (file)
+++ b/win32.h
@@ -1,9 +1,9 @@
 #ifndef WIN32_H_INCLUDED
 #define WIN32_H_INCLUDED
 #ifndef WIN32_H_INCLUDED
 #define WIN32_H_INCLUDED
-#define WIN32_H_VERSION "$Id: win32.h,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"
+#define WIN32_H_VERSION "$Id: win32.h,v 1.5 2002/03/26 22:57:10 jongfoster Exp $"
 /*********************************************************************
  *
 /*********************************************************************
  *
- * File        :  $Source: /cvsroot/ijbswa/current/src/win32.h,v $
+ * File        :  $Source: /cvsroot/ijbswa/current/Attic/win32.h,v $
  *
  * Purpose     :  Win32 User Interface initialization and message loop
  *
  *
  * Purpose     :  Win32 User Interface initialization and message loop
  *
@@ -33,9 +33,6 @@
  *
  * Revisions   :
  *    $Log: win32.h,v $
  *
  * Revisions   :
  *    $Log: win32.h,v $
- *    Revision 2.0  2002/06/04 14:34:21  jongfoster
- *    Moving source files to src/
- *
  *    Revision 1.5  2002/03/26 22:57:10  jongfoster
  *    Web server name should begin www.
  *
  *    Revision 1.5  2002/03/26 22:57:10  jongfoster
  *    Web server name should begin www.
  *
@@ -68,16 +65,12 @@ extern const char win32_blurb[];
 extern void InitWin32(void);
 
 #ifdef _WIN_CONSOLE
 extern void InitWin32(void);
 
 #ifdef _WIN_CONSOLE
-
 extern int hideConsole;
 extern int hideConsole;
-
-#else  /* ndef _WIN_CONSOLE */
+#endif /*def _WIN_CONSOLE */
 
 extern HINSTANCE g_hInstance;
 extern int g_nCmdShow;
 
 
 extern HINSTANCE g_hInstance;
 extern int g_nCmdShow;
 
-#endif  /* ndef _WIN_CONSOLE */
-
 extern int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
 
 /* Revision control strings from this header and associated .c file */
 extern int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
 
 /* Revision control strings from this header and associated .c file */