gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r928 - GNUnet-docs/WWW/test


From: durner
Subject: [GNUnet-SVN] r928 - GNUnet-docs/WWW/test
Date: Tue, 14 Jun 2005 10:48:50 -0700 (PDT)

Author: durner
Date: 2005-06-14 10:48:46 -0700 (Tue, 14 Jun 2005)
New Revision: 928

Modified:
   GNUnet-docs/WWW/test/user_afs.php3
Log:
Reformat

Modified: GNUnet-docs/WWW/test/user_afs.php3
===================================================================
--- GNUnet-docs/WWW/test/user_afs.php3  2005-06-14 17:33:18 UTC (rev 927)
+++ GNUnet-docs/WWW/test/user_afs.php3  2005-06-14 17:48:46 UTC (rev 928)
@@ -35,9 +35,9 @@
  LI(extlink_("#GUI","gnunet-gtk"));
 echo "</ul></li></ul>\n";
 
-P();
 ANCHOR("concepts"); H3("Concepts");
 
+BP();
 W("Sharing files in GNUnet is not quite as simple as in traditional file 
sharing systems.");
 W("For example, it is not sufficient to just place files into a specific 
directory to share them.");
 W("In addition to anonymous routing GNUnet attempts to give users a better 
experience in searching for content.");
@@ -46,14 +46,18 @@
 W("GNUnet enables content providers to group related content and to establish 
a reputation.");
 W("Furthermore, GNUnet allows updates to certain content to be made 
available.");
 W("This section is supposed to introduce users to the concepts that are used 
to achive this goals.");
+EP();
 
 ANCHOR("files"); H4("Files");
+BP();
 W("A file in GNUnet is just a sequence of bytes.");
 W("Any file-format is allowed and the maximum file size is theoretically 
2<sup>64</sup> bytes, except that it would take an impractical amount of time 
to share such a file.");
 W("GNUnet itself never interprets the contents of shared files, except when 
using %s to obtain keywords.",
   intlink_("/libextractor/index.php", "libextractor"));
+EP();
 
 ANCHOR("keywords"); H4("Keywords");
+BP();
 W("Keywords are the most simple mechanism to find files on GNUnet.");
 W("Keywords are case-sensitive and the search string must always match exactly 
the keyword used by the person providing the file.");
 W("Keywords are never transmitted in plaintext, for details see the %s paper.",
@@ -61,13 +65,17 @@
 W("Since providing keywords by hand for each shared file is tedious, GNUnet 
uses %s to help automate this process.",
   intlink_("/libextractor/index.php", "libextractor"));
 W("Starting a keyword search on a slow machine can take a while since the 
keyword search involves computing a fresh RSA key to fomulate the request.");
+EP();
 
 ANCHOR("directories"); H4("Directories");
+BP();
 W("A directory in GNUnet is a list of file identifiers with meta-data.");
 W("The file identifiers provide sufficient information about the files to 
allow downloading the contents.");
 W("Once a directory has been created, it cannot be changed since it is treated 
just like an ordinary file by the network.");
+EP();
 
 ANCHOR("namespaces"); H4("Namespaces");
+BP();
 W("A namespace is a set of files that were signed by the same pseudonym.");
 W("A pseudonym is essentially a public-private RSA key.");
 W("Note that a pseudonym is NOT bound to a GNUnet peer.");
@@ -75,69 +83,83 @@
 W("Files (or directories) that have been signed and placed into a namespace 
can be updated.");
 W("Updates are identified as authentic if the same secret key was used to sign 
the update.");
 W("Namespaces are also useful to establish a reputation, since all of the 
content in the namespace comes from the same entity (which does not have to be 
the same person).");
+EP();
 
 ANCHOR("advertisements"); H4("Advertisements");
+BP();
 W("Advertisements are used to notify other users about the existence of a 
namespace.");
 W("Advertisements are propagated using the normal keyword search.");
 W("When an advertisement is received (in response to a search), it is NOT 
displayed immediately.");
 W("Instead, the namespace is added to the list of namespaces available in the 
namespace-search dialogs of <tt>gnunet-gtk</tt> and printed by 
<tt>gnunet-pseudonym</tt>.");
 W("Whenever a namespace is created, an appropriate advertisement can be 
generated.");
 W("The default keyword for the advertising of namespaces is 
<tt>namespace</tt>.");
+EP();
 
 ANCHOR("collections"); H4("Collections");
 
+BP();
 W("A collection is an automatically managed namespace.");
 W("The root of the namespace points to a directory with all of the files 
inserted by the user since the collection was initiated.");
 W("The root is updated sporadically each time a new file is inserted.");
 W("The construction of the directory and the update of the namespace are done 
automatically by GNUnet on each insertion and does not require work from the 
user.");
 W("Collections are advertised under the keyword <tt>collection</tt>.");
+EP();
 
 ANCHOR("example"); H4("Example");
 
+BP();
 W("Here is how to start a collection:");
+EP();
 PRE("$ gnunet-pseudonym -a -C NICKNAME -D DESCRIPTION -r AUTHORNAME\n" .
     "$ gnunet-insert FILENAME\n" .
     "$ gnunet-search collection\n" .
     "$ gnunet-gtk");
+BP();
 W("In <tt>gnunet-gtk</tt> select <tt>Advanced-Search Namespace</tt>.");
 W("In the dialog, select the NICKNAME from the list of namespace 
identifiers.");
 W("The search key identifier will be filled out automatically to point to the 
root of the namespace.");
 W("The search should yield a directory which contains the file FILENAME.");
 W("After inserting additional files, additional directories with more files 
will show up in the search.");
 W("To stop the collection, use");
+EP();
 PRE("$ gnunet-pseudonym -E");
+BP();
 W("Note that the UI may not always be very pretty for collections since this 
is a new feature.");
-P();
+EP();
 
 ANCHOR("configuration");H3("File-sharing options in gnunet.conf");
 
+BP();
 W("This section describes the options in gnunet.conf that relate to anonymous 
file sharing.");
 W("Most options are in the configuration file for the gnunetd daemon, the 
others are specfically marked as client options.");
+EP();
 
 ANCHOR("gnunet.conf.diskquota");H4("FS: DISKQUOTA");
 
+BP();
 W("Use this option to specify how much space GNUnet is allowed to use on the 
drive.");
 W("This does not include indexed files.");
 W("The value is specified in MB, the default is 1024.");
 W("Note that whenever you change this value, GNUnet may have to reorganize the 
database, which can take quite some time on the next start (obviously depending 
on the previous size of the database).");
-BR();
+P();
 
 W("Large amounts of storage space may also have some impact on memory use, a 
typical value is around 250 kb memory per gigabyte of storage space.");
 W("Note that indexing files (instead of inserting, indexing is the default, 
insertion can be enforced with the <tt>-n</tt> switch) is much cheaper; the 
files will cause less memory usage, use less space in the database and the 
operation will be faster.");
 
 
-P();
+EP();
 ANCHOR("gnunet.conf.indexdirectory"); H4("FS: INDEX-DIRECTORY");
 
+BP();
 W("This option specifies the name of the directory where indexed files are 
either copied to or symlinked from.");
 W("When a file is indexed with the option <tt>-l</tt> and if <tt>gnunetd</tt> 
and the inserting process run on the same machine, then a symbolic link is 
created from the index-directory to that file.");
 W("Without the <tt>-l</tt> option or if <tt>gnunetd</tt> runs on a different 
machine, a copy of the file is made instead.");
 W("Note that the indexing process does a lot more than just this, thus moving 
files over to the index directory by hand will NOT share these files.");
+EP();
 
-
-P();
 ANCHOR("gnunet.conf.activemigration");H4("FS: ACTIVEMIGRATION");
 
+BP();
 W("Setting this option to <tt>YES</tt> allows <tt>gnunetd</tt> to migrate data 
to the local machine.");
 W("Setting this option to <tt>YES</tt> is highly recommended for efficiency.");
 W("Its also the default.");
@@ -146,9 +168,10 @@
 W("If you put illegal content on your machine yourself, setting this option to 
YES will probably increase your chances to get away with it since you can 
plausibly deny that you inserted the content.");
 W("Note that in either case, your anonymity would have to be broken first 
(which may be possible depending on the size of the GNUnet network and the 
strength of the adversary).");
 
-P();
+EP();
 ANCHOR("gnunet.conf.searchtimeout");H4("FS: SEARCHTIMEOUT");
 
+BP();
 W("This is a client option respected by <tt>gnunet-search</tt> and 
<tt>gnunet-gtk</tt>.");
 w("After how many seconds should <tt>gnunet-search</tt> give up searching?");
 W("<tt>gnunet-search</tt> will exit after this period of time.");
@@ -156,45 +179,49 @@
 W("For typical values <tt>gnunet-search</tt> will retransmit the search query 
multiple times in the given search interval.");
 W("The default is 300 seconds.");
 
-P();
+EP();
 ANCHOR("gnunet.conf.extractors");H4("FS: EXTRACTORS");
 
+BP();
 W("This is a client option respected by <tt>gnunet-insert</tt> and 
<tt>gnunet-gtk</tt>.");
 W("This option specifies which additional extractors <tt>gnunet-insert</tt> 
should use for keyword extraction.");
 W("The default set of extractors from your local libextractor installation is 
always used.");
 W("Typically, an extractor for splitting keywords at word boundaries is added 
here.");
 
-P();
+EP();
 ANCHOR("gnunet.conf.databasetype");H4("MODULES: sqstore");
 
+BP();
 W("Which database type should be used for content?");
 W("Valid types are &quot;sqstore_sqlite&quot; and &quot;sqstore_mysql&quot;.");
 W("The libraries and header files for the specified type must have been 
available at compile time.");
 W("If the type is changed, you must stop <tt>gnunetd</tt> and run 
<tt>gnunet-update</tt> to convert the database.");
-BR();
+P();
 W("The <tt>mysql</tt> module requires manual setup, described %s.",
   extlink_("#mysql","here"));
 W("The sqlite databases only requires the installation of the respective 
database (with header files) before running configure.");
+EP();
 
 ANCHOR("mysql");H4("Setting up the mysql database");
 
+BP();
 W("Note: The mysql module does NOT work with mysql v3.23.49 due to a bug in 
mysql.");
 W("All later versions should be fine, including the 4.0.x series.");
 W("As of this writing, the current development version is 4.0.16-log on 
debian/unstable.");
-P();
+EP();
 
 H5("Highlights");
-
+BP();
 W("Pros:");
-BR();
+EP();
 echo "<ul><li>";
 W("On up-to-date hardware where mysql can be used comfortably, the overall 
performance is fairly good (according to our tests).");
 echo "</li><li>";
 W("It is often possible to recover the mysql database from internal 
inconsistencies.");
 echo "</li></ul>";
-P();
+BP();
 W("Cons:");
-BR();
+EP();
 echo "<ul><li>";
 W("Memory usage");
 echo "</li><li>";
@@ -203,67 +230,93 @@
 
 H5("Setup Instructions");
 
+BP();
 W("First, you must have mysql including the development files (headers) 
installed on the system when you configure GNUnet.");
 W("Not all binary distributions contain the mysql module, so you may also have 
to compile GNUnet by hand.");
 W("After you have mysql installed and GNUnet compiled with mysql support, do 
the following:");
+EP();
 echo "<ol><li>";
+BP();
 W("In /etc/gnunet.conf, set");
+EP();
 PRE("DATABASETYPE = \"mysql\"");
 echo "</li><li>";
+BP();
 W("Then access mysql as root (root of the database, not of the system):");
+EP();
 PRE("$ mysql -u root -p ");
+BP();
 W("and do the following.");
 W("[You should replace \$USER with the username that will be running the 
gnunetd process].");
+EP();
 PRE("CREATE DATABASE gnunet;\n" .
     "GRANT select,insert,update,delete,create,alter,drop ON gnunet.* TO 
address@hidden;\n" .
     "SET PASSWORD FOR address@hidden(\"\$the_password_you_like\");\n" .
     "FLUSH PRIVILEGES;");
 echo "</li><li>";
+BP();
 W("In the \$HOME directory of \$USER, create a &quot;.my.cnf&quot; file with 
the following lines:");
+EP();
 PRE("[client]\n" .
     "user=\$USER\n" .
     "password=\$the_password_you_like");
+BP();
 W("Note that .my.cnf file is a security risk since it exposes the password.");
 W("You may want to keep the file in a place where it is not easily accessed.");
 W("The \$HOME/.my.cnf can be a symbolic link.");
 W("It is also possible not to use any password if database security is no 
concern.");
 W("Note that $USER has only priviledges to mess up GNUnet&prime;s tables, 
nothing else (unless you give him more, of course).");
+EP();
 echo "</li><li>";
+BP();
 W("Finally, you may want to briefly try if the DB connection works.");
 W("First, login as \$USER.");
 W("Then use:");
+EP();
 PRE("# mysql -u \$USER -p\n" .
     "mysql> use gnunet;");
+BP();
 W("If you get the message &quot;Database changed&quot; it probably works.");
 W("If you get &quot;ERROR 2002: Can&prime;t connect to local MySQL server 
through socket &prime;/tmp/mysql.sock&prime; (2)&quot; it may be resolvable by 
&quot;ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock&quot;");
 W("[So there may be some additional trouble depending on your mysql setup.]");
 echo "</li></ol>";
-P();
+EP();
 
 H5("REPAIRING TABLES");
 
+BP();
 W("Its probably healthy to check your tables for inconsistencies every now and 
then.");
 W("If you get odd SEGVs on gnunetd startup, it might be that the mysql 
databases have been corrupted.");
 P();
 W("The tables can be verified or fixed in the following ways:");
+EP();
 echo "<ol><li>";
+BP();
 W("by shutting down mysqld (mandatory!) and running");
+EP();
 PRE("# myisamchk -r *.MYI");
+BP();
 W("in /var/lib/mysql/gnunet/ (or wherever the tables are stored).");
+EP();
 echo "</li><li>";
+BP();
 W("Another repair command is <tt>mysqlcheck</tt>.");
 W("The usable command may depend on your mysql build/version.");
+EP();
 echo "</li><li>";
+BP();
 W("by executing ");
+EP();
 PRE("mysql> REPAIR TABLE data1024of?");
+BP();
 W("for each table in the gnunet database (USE gnunet; SHOW TABLES;)");
+EP();
 echo "</li></ol>";
-P();
+BP();
 W("If you have problems related to the mysql module, your best friend is 
probably the mysql manual.");
 W("The first thing to check is that mysql is basically operational, that you 
can connect to it, create tables, issue queries and so on.");
-P();
+EP();
 HR();
-P();
 
 
 
@@ -271,18 +324,23 @@
 ANCHOR("commands");H3("Commands for File Sharing");
 
 IMG("afs_small.png", "Anonymous file sharing logo", "RIGHT", 150, 115);
+BP();
 W("The only useful application that is currently available for GNUnet is 
anonymous file-sharing.");
 W("The GUI interface is described %s.",
   extlink_("#GUI","here"));
 W("For shell-gurus, five shell commands provide the interface:");
+EP();
 
 ANCHOR("gnunetinsert");H4("gnunet-insert");
 
+BP();
 W("The command <tt>gnunet-insert</tt> can be used to add content to the 
network.");
 W("The basic format of the command is");
+EP();
 
 PRE("$ gnunet-insert [-n] [-k KEYWORDS]* [-m TYPE:VALUE] FILENAME 
[FILENAMES]*");
 
+BP();
 W("The option -k is used to specify keywords for the file that should be 
inserted.");
 W("You can supply any number of keywords, and each of the keywords will be 
sufficient to locate and retrieve the file.");
 W("The -m option is used to specify meta-data, such as descriptions.");
@@ -308,39 +366,45 @@
 W("There is no need for an additional encrypted copy of the file to stay 
anywhere on the drive.");
 W("This is very different from other systems, such as %s, where each file that 
is put online must be in Freenet&rsquo;s database in encrypted format, doubling 
the space requirements if the user wants to preseve a directly accessible copy 
in plaintext.",
   extlink_("http://www.freenetproject.org/","Freenet";));
-BR();
+P();
 
 W("Thus indexing should be used for all files where the user will keep using 
this file (at the location given to gnunet-insert) and does not want to 
retrieve it back from GNUnet each time.");
-BR();
+P();
 
 W("The option <tt>-n</tt> may be used if the user fears that the file might be 
found on his drive (assuming the computer comes under the control of an 
adversary).");
 W("When used with the <tt>-n</tt> flag, the user has a much better chance of 
denying knowledge of the existence of the file, even if it is still (encrypted) 
on the drive and the adversary is able to crack the encryption (e.g. by 
guessing the keyword.");
-BR();
+P();
 W("gnunet-insert has a ton of additional options to handle namespaces and 
directories.");
 W("See the man-page for details.");
 W("If you want to remove a file that you have indexed from the local peer, use 
the tool <tt>gnunet-delete</tt> to un-index the file.");
+EP();
 
-P();
 HR();
-P();
 
 ANCHOR("gnunetsearch");H4("gnunet-search");
+BP();
 W("The command <tt>gnunet-search</tt> can be used to search for content on 
GNUnet.");
 W("The format is:");
+EP();
 
 PRE("$ gnunet-search [-t TIMEOUT] KEYWORD [AND KEYWORD]*");
 
+BP();
 W("The -t option specifies that the query should timeout after approximately 
TIMEOUT seconds.");
 W("A value of zero is interpreted as <i>no timeout</i>.");
 W("If multiple words are passed as keywords and are <strong>not</strong> 
separated by an <tt>AND</tt>, gnunet-search will concatenate them to one bigger 
keyword.");
 W("Thus,");
+EP();
 
 PRE("$ gnunet-search Das Kapital");
 
+BP();
 W("and");
+EP();
 
 PRE("$ gnunet-search \"Das Kapital\"");
 
+BP();
 W("are identical.");
 W("You can use AND to separate keywords.");
 W("In that case, gnunet-search will only display results that match all the 
keywords.");
@@ -348,44 +412,52 @@
 
 P();
 W("Search results are printed by gnunet-search like this:");
+EP();
 PRE("$ gnunet-download -o &quot;COPYING&quot; -- 
gnunet://afs/N8RCF3TETLRU9CV1PAS7M2H9QDB36AE3.K9JO8IP7KTNFO23S3VB4TFUKLD7SO5AS.0466DC92.17992\n"
 .
     "=&gt; The GNU Public License &lt;= (mimetype: text/plain)");
 
+BP();
 W("The first line is the command you would have to enter to download the 
file.");
 W("The argument passed to <tt>-o</tt> is the suggested filename (you may 
change it to whatever you like).");
 W("The <tt>--</tt> is followed by key for decrypting the file, the query for 
searching the file, a checksum (in hexadecimal) finally the size of the file in 
bytes.");
 W("The second line contains the description of the file; here this is 
&quot;The GNU Public License&quot; and the mime-type (see the options for 
gnunet-insert on how to change these).");
 
-P();
-HR();
-P();
+EP();
 
 ANCHOR("gnunetdownload");H4("gnunet-download");
+BP();
 W("In order to download a file, you need the three values returned by 
<tt>gnunet-search</tt>.");
 W("You can then use the tool <tt>gnunet-download</tt> to obtain the file:");
+EP();
 PRE("$ gnunet-download -f FILENAME -- GNUNETURL");
+BP();
 W("FILENAME specifies the name of the file where GNUnet is supposed to write 
the result.");
 W("Existing files are overwritten.");
 W("If you want to download the GPL from the previous example, you do the 
following:");
+EP();
 PRE("$ gnunet-download -o \"COPYING\" -- 
gnunet://afs/N8RCF3TETLRU9CV1PAS7M2H9QDB36AE3.K9JO8IP7KTNFO23S3VB4TFUKLD7SO5AS.0466DC92.17992");
+BP();
 W("If you ever have to abort a download, you can continue it at any time by 
re-issuing <tt>gnunet-download</tt> with the same filename.");
 W("In that case, GNUnet will <strong>not</strong> download blocks again that 
are already present.");
 W("GNUnet&rsquo;s %s will ensure file integrity, even if the existing file was 
not downloaded from GNUnet in the first place.",
   intlink_("encoding.php3","file-encoding mechanism"));
 W("You may want to use the <tt>-V</tt> switch (must be added before the 
<tt>--</tt>) to turn on verbose reporting.");
 W("In this case, <tt>gnunet-download</tt> will print the current number of 
bytes downloaded whenever new data was received.");
-P();
+EP();
 HR();
-P();
+BP();
 W("The option -c CONFIGFILE can be passed to each of the commands to override 
the default location of the configuration file.");
 W("The option -v shows the current version number.");
 W("Use -h to get a short description of the options.");
-P();
+EP();
 
 ANCHOR("gnunetdelete");H4("gnunet-delete");
+BP();
 W("<tt>gnunet-delete</tt> can be used to un-index files that were inserted 
into GNUnet (works only for files that were inserted locally and that are still 
present on the local drive).");
+EP();
 
 ANCHOR("gnunetdirectory");H4("gnunet-directory");
+BP();
 W("Directories are shared just like ordinary files.");
 W("If you download a directory with <tt>gnunet-download</tt>, you can use 
<tt>gnunet-directory</tt> to list its contents.");
 W("The contents of a directory are File Identifiers (FIs).");
@@ -404,9 +476,10 @@
 W("To create a directory from the command line, you must use 
<tt>gnunet-insert</tt>.");
 W("The main use of the FI database is for building directories (and namespace 
entries) with <tt>gnunet-gtk</tt>.");
 
-P();
+EP();
 ANCHOR("gnunetpseudonym");
 H4("gnunet-pseudonym");
+BP();
 W("By default this tool lists all locally available pseudonyms.");
 W("With the <tt>-C NICK</tt> option it can also be used to create a new 
pseudonym.");
 W("A pseudonym is the virtual identity of the entity in control of a 
namespace.");
@@ -416,8 +489,9 @@
 W("With the <tt>-D NICK</tt> option pseudonyms can be deleted.");
 W("Once the pseudonym has been deleted it is impossible to add content to the 
corresponding namespace.");
 W("Deleting the pseudonym does not make the namespace or any content in it 
unavailable.");
-P();
+EP();
 H5("Advertising namespaces");
+BP();
 W("Each namespace is associated with meta-data that describes the namespace.");
 W("This meta-data is provided by the user at the time that the pseudonym was 
created.");
 W("The meta-data is published in what is called a namespace advertisement.");
@@ -429,8 +503,9 @@
 W("When a pseudonym is created, the namespace is by default advertised under 
the keyword <tt>namespace</tt>.");
 W("When a keyword-search finds a namespace advertisement, it is automatically 
stored in the local GNUnet state-database.");
 W("The advertisement is preserved for tools like <tt>gnunet-pseudonym</tt> and 
<tt>gnunet-gtk</tt> that can reproduce them when appropriate.");
-P();
+EP();
 H5("Meta-data in the namespace advertisement");
+BP();
 W("While the namespace is uniquely identified by its ID, another way to refer 
to the namespace is to use the NICKNAME.");
 W("The NICKNAME can be freely chosen by the creator of the namespace and hence 
conflicts are possible.");
 W("If a GNUnet client learns about more than one namespace using the same 
NICKNAME, the ID is appended to the NICKNAME go get a unique identifier.");
@@ -442,11 +517,11 @@
 P();
 W("Note that currently all of the meta-data must be provided at the time where 
the namespace is created and cannot be updated later.");
 W("Furthermore, the namespace advertisement can only be published under a 
single keyword (this is purely a UI limitation).");
-P();
+EP();
 
 
-P();
 ANCHOR("GUI");H4("gnunet-gtk");
+BP();
 W("<tt>gnunet-gtk</tt> is not yet available for GNUnet 0.7.x.");
 /*
 W("<tt>gnunet-gtk</tt> is the GTK+ interface for GNUnet.");
@@ -497,7 +572,7 @@
 W("Select the file and press <tt>ok</tt>.");
 W("Next you will have to provide a description and keywords and choose if you 
want to <tt>index</tt> or <tt>insert</tt> the file (choose index if the file 
will not be moved or deleted to safe space):");
 IMG("gtk-insert2.png", "choose file to insert", "CENTER",408, 428);
-BR();
+P();
 IMG("gtk-insert3.png", "adding keywords", "CENTER",408,428);
 P();
 W("Finally, press ok and watch GNUnet making the file available:");
@@ -518,7 +593,7 @@
 W("<tt>gnunet-gtk</tt> also offers the option to search a given namespace.");
 W("Just as <tt>gnunet-pseudonym</tt> can print a list of all known namespace 
advertisements, the namespace search in <tt>gnunet-gtk</tt> offers access to 
the list of advertised namespaces and the respective meta-data.");
 IMG("gnunet-namespace-search.png", "Searching a namespace.", "CENTER", 658, 
348);
-P();
+EP();
 */
 include("html_footer.php3");
 ?>





reply via email to

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