1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>wxSQLite3: wxSQLite3</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">wxSQLite3 <span id="projectnumber">3.0.0</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li class="current"><a href="index.html"><span>Main Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li><a href="dirs.html"><span>Directories</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="headertitle">
<div class="title">wxSQLite3 </div> </div>
</div>
<div class="contents">
<div class="textblock"><h2><a class="anchor" id="intro"></a>
What is wxSQLite3?</h2>
<p><b>wxSQLite3</b> is a C++ wrapper around the public domain <a href="http://www.sqlite.org">SQLite 3.x</a> database and is specifically designed for use in programs based on the <b>wxWidgets</b> library.</p>
<p>Several solutions already exist to access SQLite databases. To name just a few:</p>
<ul>
<li><a href="http://sourceforge.net/projects/wxsqlite">wxSQLite</a> : This is a wxWidgets wrapper for version 2.8.x of SQLite. SQLite version 3.x has a lot more features - which are not supported by this wrapper.</li>
</ul>
<ul>
<li><a href="http://www.codeproject.com/database/CppSQLite.asp">CppSQLite</a> : Not wxWidgets specific, but with (partial) support for the newer version 3.x of SQLite.</li>
</ul>
<ul>
<li><a href="http://wxcode.sf.net">DatabaseLayer</a> : This is a database abstraction providing a JDBC-like interface to database I/O. In the current version SQLite3, PostgreSQL, MySQL, Firebird, and ODBC database backends are supported.</li>
</ul>
<p>The component <b>wxSQLite3</b> was inspired by all three mentioned SQLite wrappers. <b>wxSQLite3</b> does not try to hide the underlying database, in contrary almost all special features of the SQLite3 version 3.x are supported, like for example the creation of user defined scalar or aggregate functions.</p>
<p>Since SQLite stores strings in UTF-8 encoding, the wxSQLite3 methods provide automatic conversion between wxStrings and UTF-8 strings. The methods ToUTF8 and FromUTF8 of the wxString class (available since wxWidgets 2.8.4) are used for the conversion. Special care has to be taken if external administration tools are used to modify the database contents, since not all of these tools operate in Unicode or UTF-8 mode.</p>
<h2><a class="anchor" id="version"></a>
Version history</h2>
<dl>
<dt><b>3.0.0</b> - <em>January 2012</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.7.10<br/>
Added method <a class="el" href="classwx_s_q_lite3_database.html#a3633fd19e754ce6420babfbe24e6355a" title="Vacuum.">wxSQLite3Database::Vacuum</a><br/>
Added method <a class="el" href="classwx_s_q_lite3_database.html#ae7341ed62679dbb3ccde9561aa6d8602" title="Return the filename for a database connection.">wxSQLite3Database::GetDatabaseFilename</a><br/>
Added method <a class="el" href="classwx_s_q_lite3_database.html#a0a148b6ef80381746e1e4235a0b9b01d" title="Free memory used by a database connection.">wxSQLite3Database::ReleaseMemory</a><br/>
Added method <a class="el" href="classwx_s_q_lite3_result_set.html#a1cc95cb3302ed2fcf3bc83110f8b2771" title="Check whether the cursor has been moved.">wxSQLite3ResultSet::CursorMoved</a><br/>
Added method <a class="el" href="classwx_s_q_lite3_statement.html#a664897b5657369c1dd45dc23aed99856" title="Determine if a prepared statement has been reset.">wxSQLite3Statement::IsBusy</a><br/>
Fixed a bug in method operator= of <a class="el" href="classwx_s_q_lite3_string_collection.html" title="Represents a named string value collection.">wxSQLite3StringCollection</a> causing an endless recursion on assignment<br/>
Dropped the concept of SQLite3 pointer ownership in favor of reference counted pointers allowing much more flexible use of wxSQLite3 classes<br/>
Modified SQLite3 encryption extension (defining int64 datatype for SHA2 algorithm)<br/>
Dropped dbadmin sample from build files<br/>
Added Premake support for SQLite3 library with encryption support and for wxSQLite3 (experimental)<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>2.1.3</b> - <em>August 2011</em> </dt>
<dd><p class="startdd">Corrected default behaviour for attached databases in case of an encrypted main database. (Now the attached database uses the same encryption key as the main database if no explicit key is given. Previously the attached database remained unencrypted.)<br/>
Added an optional progress callback for metheods Backup and Restore<br/>
Added method SetBackupRestorePageCount to set the number of pages to be copied in one cycle of the backup/restore process<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>2.1.2</b> - <em>July 2011</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.7.7.1<br/>
Modified <a class="el" href="classwx_s_q_lite3_transaction.html" title="RAII class for managing transactions.">wxSQLite3Transaction</a> to make it exception safe<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>2.1.1</b> - <em>April 2011</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.7.6.1<br/>
Added convenience method <a class="el" href="classwx_s_q_lite3_statement.html#ae4ddf0d2b60594bc27a5ca3db1f45b2f" title="Execute a scalar SQL query statement given as a wxString.">wxSQLite3Statement::ExecuteScalar</a><br/>
Changed write-ahead log checkpoint method to new version (v2)<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>2.1.0</b> - <em>March 2011</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.7.5<br/>
Added wxSQLite+, a database administration application written by Fred Cailleau-Lepetit, as a GUI sample for wxSQLite3. Minor adjustments were applied to make wxSQLite+ compatible with wxWidgets 2.9.x. Please note that wxSQLite+ is under GPL license.<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>2.0.2</b> - <em>December 2010</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.7.4<br/>
Added support for rebinding a BLOB object to a new row<br/>
Added support for determining if an SQL statement writes the database<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>2.0.1</b> - <em>October 2010</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.7.3<br/>
Added parameter transferStatementOwnership to method <a class="el" href="classwx_s_q_lite3_statement.html#a4add373bc96222ff38db64f56f011384" title="Execute the query represented by this statement.">wxSQLite3Statement::ExecuteQuery</a> to allow using the returned result set beyond the life time of the <a class="el" href="classwx_s_q_lite3_statement.html" title="Represents a prepared SQL statement.">wxSQLite3Statement</a> instance<br/>
Eliminated the use of sqlite3_mprintf which caused linker problems when loading SQLite dynamically<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>2.0.0</b> - <em>July 2010</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.7.0<br/>
Fixed a bug in class <a class="el" href="classwx_s_q_lite3_result_set.html" title="Result set of a SQL query.">wxSQLite3ResultSet</a><br/>
Added support for SQLite's write-ahead log journal mode<br/>
Added support for named collections (see class <a class="el" href="classwx_s_q_lite3_named_collection.html" title="Represents a named collection.">wxSQLite3NamedCollection</a>)<br/>
Changed UTF-8 string handling to use methods To/FromUTF8 of the wxString class (requires wxWidgets 2.8.4 or higher)<br/>
Compatible with wxWidgets 2.9.1<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.9</b> - <em>March 2010</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.23<br/>
Fixed a bug when compiling for dynamic loading of SQLite<br/>
Added static methods for accessing the run-time library compilation options diagnostics<br/>
Added mathod FormatV to class <a class="el" href="classwx_s_q_lite3_statement_buffer.html" title="SQL statment buffer for use with SQLite3's printf method.">wxSQLite3StatementBuffer</a><br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.8</b> - <em>February 2010</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.22<br/>
Fixed a bug when compiling without precompiled header support (by including wx/arrstr.h)<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.7</b> - <em>November 2009</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.20<br/>
Added methods to query, enable or disable foreign key support<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.6</b> - <em>September 2009</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.18<br/>
Added method to get the SQLite library source id<br/>
Added flags parameter to <a class="el" href="classwx_s_q_lite3_database.html#a1d3e850e86cbb9512893fc467c554e82" title="Open a SQLite3 database.">wxSQLite3Database::Open</a> to allow additional control over the database connection (see <a href="http://www.sqlite.org/c3ref/open.html">http://www.sqlite.org/c3ref/open.html</a> for further information)<br/>
Fixed a potential memory leak in <a class="el" href="classwx_s_q_lite3_statement.html" title="Represents a prepared SQL statement.">wxSQLite3Statement</a> class<br/>
Converted encryption extension from C++ to pure C to make it compatible with the SQLite amalgamation.<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.5</b> - <em>February 2009</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.11<br/>
Added user defined function class for REGEXP operator.<br/>
Added support for SQLite backup/restore API, introduced with SQLite 3.6.11<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.4</b> - <em>January 2009</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.10<br/>
Added support for savepoints, introduced with SQLite 3.6.8<br/>
Added method IsOk to the classes <a class="el" href="classwx_s_q_lite3_statement.html" title="Represents a prepared SQL statement.">wxSQLite3Statement</a>, <a class="el" href="classwx_s_q_lite3_table.html" title="Holds the complete result set of a SQL query.">wxSQLite3Table</a> and <a class="el" href="classwx_s_q_lite3_result_set.html" title="Result set of a SQL query.">wxSQLite3ResultSet</a>, thus instances of these classes can be checked whether the associated SQLite database or statement are valid without throwing an exception.<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.3</b> - <em>December 2008</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.7<br/>
Fixed a bug in method <a class="el" href="classwx_s_q_lite3_table.html#a6586163d71aa1bf8b879020759eeaf0a" title="Get a column as a double using the column index.">wxSQLite3Table::GetDouble</a> (conversion from string to double failed in non-US locales)<br/>
Build system upgraded using Bakefile 0.2.5<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.2</b> - <em>November 2008</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.6<br/>
Added RAII transaction class (see docs for details)<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.1</b> - <em>September 2008</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.2<br/>
Introduced own step counting for aggregate user functions since the sqlite3_aggregate_count function is now deprecated<br/>
Enhanced <a class="el" href="classwx_s_q_lite3_database.html#ae5192b30628c02bf09a39d191215f90f" title="Check whether a table with the given name exists.">wxSQLite3Database::TableExists</a> method to query an attached database for existence of a table or to query the main database and all attached databases<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.9.0</b> - <em>July 2008</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.6.0<br/>
The optional key based encryption support has been adapted to support SQLite version 3.6.0.<br/>
Added static methods to initialize and shutdown the SQLite library.<br/>
Changed build system to support static library build against shared wxWidgets build on Linux.<br/>
Changed behaviour of <a class="el" href="classwx_s_q_lite3_database.html#a017bb6940c4f08abf072c6a31c53ea4e" title="Close a SQLite3 database.">wxSQLite3Database::Close</a> method to finalize all unfinalized prepared statements.</p>
<p class="enddd"></p>
</dd>
<dt><b>1.8.5</b> - <em>June 2008</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.5.9<br/>
Integration of the optional key based encryption support into SQLite has been made easier. Changes to original SQLite source files are no longer necessary.</p>
<p class="enddd"></p>
</dd>
<dt><b>1.8.4</b> - <em>April 2008</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.5.8<br/>
Added support for accessing database limits<br/>
Changed method TableExists to check a table name case insensitive<br/>
Fixed several minor issues in the build files.</p>
<p class="enddd"></p>
</dd>
<dt><b>1.8.3</b> - <em>January 2008</em> </dt>
<dd><p class="startdd">Added support for shared cache mode<br/>
Added support for access to original SQL statement for prepared statements (requires SQLite 3.5.3 or above)</p>
<p class="enddd"></p>
</dd>
<dt><b>1.8.2</b> - <em>December 2007</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.5.4<br/>
Fixed a bug in <a class="el" href="classwx_s_q_lite3_database.html#aa37678031020c5a626bde4dae7eab4c9" title="Begin transaction.">wxSQLite3Database::Begin</a> (wrong transaction type)</p>
<p class="enddd"></p>
</dd>
<dt><b>1.8.1</b> - <em>November 2007</em> </dt>
<dd><p class="startdd">Fixed a bug in in <a class="el" href="classwx_s_q_lite3_database.html#a017bb6940c4f08abf072c6a31c53ea4e" title="Close a SQLite3 database.">wxSQLite3Database::Close</a> (resetting flag m_isEncrypted)<br/>
Eliminated several compile time warnings (regarding unused parameters)<br/>
Fixed a compile time bug in <a class="el" href="classwx_s_q_lite3_database.html#ac3947d14f662415bfb8802b1ce30fee8" title="Get handle to a BLOB.">wxSQLite3Database::GetBlob</a> (missing explicit type cast)</p>
<p class="enddd"></p>
</dd>
<dt><b>1.8.0</b> - <em>November 2007</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.5.2<br/>
Support for SQLite incremental BLOBs<br/>
Changed source code in the SQLite3 encryption extension to eliminate several warnings<br/>
Changed default wxWidgets version to 2.8.x<br/>
Adjusted sources for SQLite encryption support are included for all SQLite version from 3.3.1 up to 3.5.2<br/>
SQLite link libraries for MinGW on Windows are included<br/>
Added <code>WXMAKINGLIB_WXSQLITE3</code> compile time option to support building wxSQLite3 as a static library while using the shared libraries of wxWidgets.</p>
<p class="enddd"></p>
</dd>
<dt><b>1.7.3</b> - <em>May 2007</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.3.17<br/>
</p>
<p>Fixed a bug in the SQLite3 encryption extension (MD5 algorithm was not aware of endianess on big-endian platforms, resulting in non-portable database files)</p>
<p class="enddd"></p>
</dd>
<dt><b>1.7.2</b> - <em>February 2007</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.3.12<br/>
Support for loadable extensions is now optional Check for optional wxSQLite3 features at runtime wxSQLite3 API independent of optional features</p>
<p class="enddd"></p>
</dd>
<dt><b>1.7.1</b> - <em>January 2007</em> </dt>
<dd><p class="startdd">Fixed a bug in the key based database encryption feature (The call to <b>sqlite3_rekey</b> in <a class="el" href="classwx_s_q_lite3_database.html#a64e734aaeff8b8e6fabb58b976f712b5" title="Change the encryption key of the database.">wxSQLite3Database::ReKey</a> could cause a program crash, when used to encrypt a previously unencrypted database.)<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.7.0</b> - <em>January 2007</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.3.10 (<b>Attention</b>: at least SQLite version 3.3.9 is required)<br/>
Added support for BLOBs as wxMemoryBuffer objects<br/>
Added support for loadable extensions<br/>
Optional support for key based database encryption</p>
<p class="enddd"></p>
</dd>
<dt><b>1.6.0</b> - <em>July 2006</em> </dt>
<dd><p class="startdd">Added support for user defined collation sequences</p>
<p class="enddd"></p>
</dd>
<dt><b>1.5.3</b> - <em>June 2006</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.3.6<br/>
Added support for optional SQLite meta data methods</p>
<p class="enddd"></p>
</dd>
<dt><b>1.5.2</b> - <em>March 2006</em> </dt>
<dd><p class="startdd">Fixed a bug in wxSQLite3Database::Prepare<br/>
Added <a class="el" href="classwx_s_q_lite3_database.html#aa506150f24858ca113b472dcb20afa99" title="Check whether the database has been opened.">wxSQLite3Database::IsOpen</a> for convenience</p>
<p class="enddd"></p>
</dd>
<dt><b>1.5.1</b> - <em>February 2006</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.3.4 (wxMSW only)</p>
<p class="enddd"></p>
</dd>
<dt><b>1.5</b> - <em>February 2006</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.3.3<br/>
Added support for commit, rollback and update callbacks</p>
<p class="enddd"></p>
</dd>
<dt><b>1.4.2</b> - <em>November 2005</em> </dt>
<dd><p class="startdd">Optimized code for wxString arguments</p>
<p class="enddd"></p>
</dd>
<dt><b>1.4.1</b> - <em>November 2005</em> </dt>
<dd><p class="startdd">Fixed a bug in <a class="el" href="classwx_s_q_lite3_database.html#ae5192b30628c02bf09a39d191215f90f" title="Check whether a table with the given name exists.">wxSQLite3Database::TableExists</a>,<br/>
Changed the handling of Unicode string conversion,<br/>
Added support for different transaction types</p>
<p class="enddd"></p>
</dd>
<dt><b>1.4</b> - <em>November 2005</em> </dt>
<dd><p class="startdd">Optionally load the SQLite library dynamically at run time.</p>
<p class="enddd"></p>
</dd>
<dt><b>1.3.1</b> - <em>November 2005</em> </dt>
<dd><p class="startdd">Corrected <a class="el" href="classwx_s_q_lite3_result_set.html#adc8c29475e2a7b20a1566d69c3dd940c" title="Get a column as a 64-bit integer using the column index.">wxSQLite3ResultSet::GetInt64</a>.<br/>
Added <a class="el" href="classwx_s_q_lite3_table.html#abfc1b6639ab517e5646dbecb9acf0449" title="Get a column as a 64-bit integer using the column index.">wxSQLite3Table::GetInt64</a></p>
<p class="enddd"></p>
</dd>
<dt><b>1.3</b> - <em>October 2005</em> </dt>
<dd><p class="startdd">Added wxGTK build support<br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.2</b> - <em>October 2005</em> </dt>
<dd><p class="startdd">Corrected error in <a class="el" href="classwx_s_q_lite3_table.html#ac105628608a3a5cb581f74a95e24b7f3" title="Find the index of a column by name.">wxSQLite3Table::FindColumnIndex</a><br/>
</p>
<p class="enddd"></p>
</dd>
<dt><b>1.1</b> - <em>October 2005</em> </dt>
<dd><p class="startdd">Upgrade to SQLite version 3.2.7 <br/>
</p>
<p></p>
<p class="enddd"></p>
</dd>
<dt><b>1.0</b> - <em>July 2005</em> </dt>
<dd>First public release </dd>
</dl>
<dl class="author"><dt><b>Author:</b></dt><dd>Ulrich Telle (<a href="&#109;&#97;&#105;&#108;&#116;&#111;:&#117;&#108;&#114;&#105;&#99;&#104;&#46;&#116;&#101;&#108;&#108;&#101;&#64;&#103;&#109;&#120;&#46;&#100;&#101;">ulrich DOT telle AT gmx DOT de</a>)</dd></dl>
<h2><a class="anchor" id="ackn"></a>
Acknowledgements</h2>
<p>Kudos to <b>Fred Cailleau-Lepetit</b> for developing <b>wxSQLite+</b> as a sample demonstrating the wxWidgets components <b>wxAUI</b> and <b>wxSQLite3</b> and for allowing it to be included in the wxSQLite3 distribution.</p>
<p>The following people have contributed to wxSQLite3:</p>
<ul>
<li>
Francesco Montorsi (enhancement of the build system) </li>
<li>
Neville Dastur (enhancement of the method TableExists) </li>
<li>
Tobias Langner (RAII class for managing transactions) </li>
</ul>
</div></div>
<hr class="footer"/><address class="footer"><small>Generated on Thu Jan 19 2012 16:17:47 for wxSQLite3 by 
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>
|