Author: buildbot
Date: Wed Mar 18 18:37:02 2015
New Revision: 944235
Log:
Staging update by buildbot for cayenne
Added:
websites/staging/cayenne/trunk/content/2015/
websites/staging/cayenne/trunk/content/2015/03/
websites/staging/cayenne/trunk/content/2015/03/cayenne-40m2-released.html
Modified:
websites/staging/cayenne/trunk/content/ (props changed)
Propchange: websites/staging/cayenne/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Wed Mar 18 18:37:02 2015
@@ -1 +1 @@
-1667584
+1667600
Added: websites/staging/cayenne/trunk/content/2015/03/cayenne-40m2-released.html
==============================================================================
--- websites/staging/cayenne/trunk/content/2015/03/cayenne-40m2-released.html
(added)
+++ websites/staging/cayenne/trunk/content/2015/03/cayenne-40m2-released.html
Wed Mar 18 18:37:02 2015
@@ -0,0 +1,287 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+<head>
+<title>Cayenne 4.0 Milestone 2 Released | Apache Cayenne</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta name="keywords" content=" apache cayenne, object relational mapping,
open source orm, orm">
+<meta name="description" content=" Apache Cayenne is a powerful,
full-featured, open-source object relational mapping framework created for
developers working with relational databases.">
+<link rel="stylesheet" type="text/css" media="screen, projection"
href="/css/styles.css">
+<link rel="stylesheet" type="text/css" media="print" href="/css/print.css">
+<link rel="shortcut icon" href="/img/favicon.ico" type="image/ico">
+<script type="text/javascript" src="/js/scripts.js"></script>
+<script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-7036673-1']);
+ _gaq.push(['_trackPageview']);
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script>
+</head>
+<body>
+<div id="wrap"><div id="wrap-inner">
+
+<div id="header">
+ <h1><a href="/" title="Return to Apache Cayenne home"><span>The Apache
Cayenne Project</span></a></h1>
+ <h2><a href="http://www.apache.org" title="The Apache Software
Foundation"><span>The Apache Software Foundation</span></a></h2>
+</div>
+
+<div id="container">
+
+
+<div id="sidebar">
+<ul id="nav">
+ <li><a href="/about.html">About</a>
+ <ul>
+ <li><a href="/why-cayenne.html">Why Cayenne?</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/success-stories.html">Success
Stories</a></li>
+ <li><a href="/support.html">Support</a></li>
+ </ul>
+ </li>
+ <li><a href="/docs/index.html">Documentation</a>
+ <ul>
+ <li><a href="/docs/4.0/tutorial/index.html">Getting
Started (4.0)</a></li>
+ <li class="trigger"><a
href="/docs/4.0/index.html">Version 4.0 (snapshot)</a>
+ <ul>
+ <li><a
href="/docs/4.0/cayenne-guide/index.html">Cayenne Guide</a></li>
+ <li><a
href="/docs/4.0/tutorial/index.html">Tutorial</a></li>
+ <li><a
href="/docs/4.0/tutorial-rop/index.html">ROP Tutorial</a></li>
+ <li><a
href="/docs/4.0/upgrade-guide/index.html">Upgrade Guide</a></li>
+ <li><a
href="/docs/4.0/api/index.html">JavaDoc</a></li>
+ </ul>
+ </li>
+ <li class="trigger"><a
href="/docs/3.1/index.html">Version 3.1 (stable)</a>
+ <ul>
+ <li><a
href="/docs/3.1/cayenne-guide/index.html">Cayenne Guide</a></li>
+ <li><a
href="/docs/3.1/tutorial/index.html">Tutorial</a></li>
+ <li><a
href="/docs/3.1/tutorial-rop/index.html">ROP Tutorial</a></li>
+ <li><a
href="/docs/3.1/upgrade-guide/index.html">Upgrade Guide</a></li>
+ <li><a
href="/docs/3.1/api/index.html">JavaDoc</a></li>
+ </ul>
+ </li>
+ <li class="trigger"><a
href="/docs/3.0/index.html">Version 3.0 (aging)</a>
+ <ul>
+ <li><a
href="/docs/3.0/overview.html">Overview</a></li>
+ <li><a
href="/docs/3.0/cayenne-guide.html">Cayenne Guide</a></li>
+ <li><a
href="/docs/3.0/remote-object-persistence-guide.html">Remote Client
Guide</a></li>
+ <li><a
href="/docs/3.0/modeler-guide.html">Modeler Guide</a></li>
+ <li><a
href="/docs/3.0/api/index.html">JavaDoc</a></li>
+ </ul>
+ </li>
+ <li class="trigger"><a
href="/docs/2.0/index.html">Version 2.0 (legacy)</a>
+ <ul>
+ <li><a
href="/docs/2.0/user-guide.html">User Guide</a></li>
+ <li><a
href="/docs/2.0/remote-object-persistence-guide.html">Remote Client
Guide</a></li>
+ <li><a
href="/docs/2.0/modeler-guide.html">Modeler Guide</a></li>
+ <li><a
href="/docs/2.0/api/cayenne/index.html">JavaDoc</a></li>
+ </ul>
+ </li>
+ <li class="trigger"><a
href="/docs/1.2/index.html">Version 1.2 (legacy)</a>
+ <ul>
+ <li><a
href="/docs/1.2/user-guide.html">User Guide</a></li>
+ <li><a
href="/docs/1.2/remote-object-persistence-guide.html">Remote Client
Guide</a></li>
+ <li><a
href="/docs/1.2/modeler-guide.html">Modeler Guide</a></li>
+ <li><a
href="/docs/1.2/api/cayenne/index.html">JavaDoc</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="/collaboration.html">Collaboration</a>
+ <ul>
+ <li><a
href="http://issues.apache.org/jira/browse/CAY">Bug/Feature Tracker</a></li>
+ <li><a href="/mailing-lists.html">Mailing Lists</a></li>
+ <li><a href="/dev/code-repository.html">Code
Repository</a></li>
+ <li><a href="/dev/index.html">Developer Guide</a></li>
+ <li><a href="/how-can-i-help.html">How Can I
Help?</a></li>
+ <li><a href="/contributors.html">Contributors</a></li>
+ </ul>
+ </li>
+</ul>
+</div>
+
+
+<hr>
+<div id="content">
+ <h2 id="cayenne-40-milestone-2-released">Cayenne 4.0 Milestone 2
Released</h2>
+<p><em>Mar 18, 2015</em> </p>
+<p>This is a huge new milestone release of the development branch of Apache
Cayenne. Existing users may have noticed that we renamed version 3.2 to 4.0 as
the scope of new features had been vastly expanded. So 4.0.M2 is a direct
successor of 3.2M1. There are tons of new features and bug fixes. Here are just
the main highlights. For more details, go to the upgrade-guide.pdf and check
out the full release notes below.</p>
+<h3 id="fluent-query-api">Fluent Query API</h3>
+<p>Here is a simple example:</p>
+<p> Artist a = ObjectSelect
+ .query(Artist.class)
+ .where(Artist.NAME.eq("Picasso"))
+ .selectOne(context);</p>
+<p>Cayenne now provides a set of new fluent query classes: ObjectSelect,
SQLSelect, SelectById. More will be coming in the future releases. A related
addition is positional bindings in Expression, SQLTemplate and in the new query
classes. Using the new API you'll avoid any boilerplate in the most-commonly
written Cayenne code, all with full support for generics and type safety. The
"old" style of bean-like queries is still supported.</p>
+<h3 id="powerful-automated-workflow-with-cdbimport">Powerful Automated
Workflow with 'cdbimport'</h3>
+<p>'cdbimport' (a Maven/Ant task that generates DataMap from DB) was always
there in Cayenne, just not very usable. In this release it was reworked to
become a cornerstone of an automated workflow that allows you to keep mapping
and Java classes always in sync with the underlying DB, and yet provide
arbitrary customizations to the object layer.</p>
+<h3 id="osgi">OSGI</h3>
+<p>All Cayenne runtime jars have proper OSGi manifests and can be used as OSGi
bundles. Here is a <a
href="https://github.com/andrus/cayenne-osgi-example">demo app</a> showing how
to write an OSGi Cayenne app. The main trick is to add a special OSGi module to
Cayenne runtime:</p>
+<div class="codehilite"><pre><span class="n">Module</span> <span
class="n">osgiModule</span> <span class="p">=</span>
+ <span class="n">OsgiModuleBuilder</span><span class="p">.</span><span
class="n">forProject</span><span class="p">(</span><span
class="n">Activator</span><span class="p">.</span><span
class="n">class</span><span class="p">).</span><span
class="n">withDriver</span><span class="p">(</span><span
class="n">Driver</span><span class="p">.</span><span
class="n">class</span><span class="p">).</span><span
class="n">module</span><span class="p">();</span>
+</pre></div>
+
+
+<h3 id="serverruntimebuilder">ServerRuntimeBuilder</h3>
+<p>We found that customizing ServerRuntime is a frequent task in different
environments. Things like setting a custom DataSource, loading multiple
projects into a single runtime, overriding a service here and there are all
very common customizations. While of those can be done via ServerRuntime
constructor and custom modules, we decided to add some syntactic sugar for such
a common task. Enter ServerRuntimeBuilder:</p>
+<div class="codehilite"><pre><span class="n">ServerRuntime</span> <span
class="n">runtime</span> <span class="p">=</span> <span class="n">new</span>
<span class="n">ServerRuntimeBuilder</span><span class="p">(</span>"<span
class="n">myproject</span>"<span class="p">)</span>
+ <span class="p">.</span><span class="n">addConfigs</span><span
class="p">(</span>"<span class="n">cayenne</span><span
class="o">-</span><span class="n">project1</span><span class="p">.</span><span
class="n">xml</span>"<span class="p">,</span> "<span
class="n">cayenne</span><span class="o">-</span><span
class="n">project2</span><span class="p">.</span><span
class="n">xml</span>"<span class="p">)</span>
+ <span class="p">.</span><span class="n">addModule</span><span
class="p">(</span><span class="n">binder</span> <span class="o">-></span>
<span class="n">binder</span><span class="p">.</span><span
class="n">bind</span><span class="p">(</span><span
class="n">JdbcEventLogger</span><span class="p">.</span><span
class="n">class</span><span class="p">).</span><span
class="n">toInstance</span><span class="p">(</span><span
class="n">myLogger</span><span class="p">))</span>
+ <span class="p">.</span><span class="n">dataSource</span><span
class="p">(</span><span class="n">myDataSource</span><span class="p">)</span>
+ <span class="p">.</span><span class="n">build</span><span
class="p">();</span>
+</pre></div>
+
+
+<p>While we are on the topic of ServerRuntime, we also provide the ability to
start a mapping-free runtime, which gives a powerful SQL execution stack (e.g.
for unit tests).</p>
+<h3 id="transparent-database-cryptography-with-cayenne-crypto">Transparent
Database Cryptography with 'cayenne-crypto'</h3>
+<p>Cayenne now includes <a
href="http://search.maven.org/#artifactdetails|org.apache.cayenne|cayenne-crypto|4.0.M2|jar">cayenne-crypto.jar</a>,
that allows you to implement seemless data encryption. With a bit of extra
configuration you get automatic encryption/decryption of data in certain
columns:</p>
+<div class="codehilite"><pre><span class="n">Module</span> <span
class="n">cryptoModule</span> <span class="p">=</span> <span
class="n">new</span> <span class="n">CryptoModuleBuilder</span><span
class="p">()</span>
+ <span class="p">.</span><span class="n">keyStore</span><span
class="p">(</span>"<span class="n">file</span><span
class="p">:</span><span class="o">///</span><span
class="n">mykeystore</span>"<span class="p">,</span> "<span
class="n">changeit</span>"<span class="p">.</span><span
class="n">toCharArray</span><span class="p">(),</span> "<span
class="n">keyalias</span>"<span class="p">)</span>
+ <span class="p">.</span><span class="n">compress</span><span
class="p">()</span>
+ <span class="p">.</span><span class="n">build</span><span
class="p">();</span>
+</pre></div>
+
+
+<p>By default encrypted columns are designated based on naming conventions,
but this is fully customizable. The rest of your application code doesn't need
to worry about cryptography, and would look like a regular Cayenne
application.</p>
+<h3 id="di-container-decorators">DI Container Decorators</h3>
+<p>In addition to overriding services in DI container, now Cayenne allows to
supply decorators. True to the "smallest-footprint" DI philosophy, decorator
approach is very simple and does not require proxies or class enhancement. Just
implement the decoarted interface and provide a constructor that takes a
delegate instance being decorated:</p>
+<div class="codehilite"><pre><span class="n">public</span> <span
class="n">class</span> <span class="n">MyInterfaceDecorator</span> <span
class="n">implements</span> <span class="n">MyInterface</span> <span
class="p">{</span>
+
+ <span class="n">private</span> <span class="n">MyInterface</span> <span
class="n">delegate</span><span class="p">;</span>
+
+ <span class="n">public</span> <span
class="n">MockInterface1_Decorator3</span><span class="p">(@</span><span
class="n">Inject</span> <span class="n">MyInterface</span> <span
class="n">delegate</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">this</span><span class="p">.</span><span
class="n">delegate</span> <span class="p">=</span> <span
class="n">delegate</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="p">@</span><span class="n">Override</span>
+ <span class="n">public</span> <span class="n">String</span> <span
class="n">getName</span><span class="p">()</span> <span class="p">{</span>
+ <span class="k">return</span> "<span class="o"><</span>"
<span class="o">+</span> <span class="n">delegate</span><span
class="p">.</span><span class="n">getName</span><span class="p">()</span> <span
class="o">+</span> "<span class="o">></span>"<span
class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">Module</span> <span class="n">module</span> <span
class="p">=</span> <span class="n">new</span> <span
class="n">Module</span><span class="p">()</span> <span class="p">{</span>
+
+ <span class="p">@</span><span class="n">Override</span>
+ <span class="n">public</span> <span class="n">void</span> <span
class="n">configure</span><span class="p">(</span><span class="n">Binder</span>
<span class="n">binder</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">binder</span><span class="p">.</span><span
class="n">decorate</span><span class="p">(</span><span
class="n">MyInterface</span><span class="p">.</span><span
class="n">class</span><span class="p">).</span><span
class="n">before</span><span class="p">(</span><span
class="n">MyInterfaceDecorator</span><span class="p">.</span><span
class="n">class</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+</pre></div>
+
+
+<h3 id="stability-improvements">Stability Improvements</h3>
+<p>We got rid of the hated "runtime" ObjRelationships that caused random
issues, and fixed more than 30 other bugs.</p>
+<p>Cayenne can be downloaded from <a href="/download.html">here</a>.</p>
+<p>A full list of changes in this release:</p>
+<ul>
+<li>CAY-1267 Some changes to LogDialog</li>
+<li>CAY-1826 Merge Entity Attributes and Relationships tabs together with one
toolbar.</li>
+<li>CAY-1839 Allow to link DataMaps to DataNodes from DataNode editor.</li>
+<li>CAY-1841 Filters for Left-hand project navigator</li>
+<li>CAY-1842 Remove Listeners support from the Modeler </li>
+<li>CAY-1843 DataMap v7: Stop saving listeners in DataMap, add upgrade
handler</li>
+<li>CAY-1845 Upgrade javadoc plugin to 2.9.1 </li>
+<li>CAY-1846 Reworking of callback mapping</li>
+<li>CAY-1847 Make ConverterFactory extensible</li>
+<li>CAY-1848 New method: ObjectContext.selectOne(Select query) </li>
+<li>CAY-1851 Generate default serialVersionUID for generated java classes to
avoid eclipse warnings</li>
+<li>CAY-1852 Straighten thread model and synchronization in the Modeler </li>
+<li>CAY-1855 Iterated and paginated queries must print result counts </li>
+<li>CAY-1856 Expression.expWithParameters does not work when parameters are
placed in the inline collection </li>
+<li>CAY-1860 In-memory matching of DataObjects against ObjectId or int</li>
+<li>CAY-1861 Remove runtime relationships</li>
+<li>CAY-1870 cgen - smarter default for 'superPkg' and 'destDir'</li>
+<li>CAY-1882 Porting to OSGi environment</li>
+<li>CAY-1883 Clean up Cayenne maven structure</li>
+<li>CAY-1886 cayenne-di module reorg, new exceptions</li>
+<li>CAY-1890 Remove Cayenne-level buffering when retrieving LOBs</li>
+<li>CAY-1894 Support native PK generation using sequences for H2 databases</li>
+<li>CAY-1899 ServerRuntimeBuilder</li>
+<li>CAY-1900 Allow DataNode name to be used as a root of SQLTemplate</li>
+<li>CAY-1901 Config-free ServerRuntime</li>
+<li>CAY-1904 Simple injection-friendly constructor for AuditableFilter</li>
+<li>CAY-1907 RowReaderFactory</li>
+<li>CAY-1908 Refactor all SQLActions to work with DataNode</li>
+<li>CAY-1911 BatchQuery refactoring - make Iterable</li>
+<li>CAY-1912 BatchQueryBuilder refactoring</li>
+<li>CAY-1913 Refactor org.apache.cayenne.access.trans into query-specific
packages</li>
+<li>CAY-1914 Refactor EJBQL-related translators to a standalone
'org.apache.cayenne.access.translator.ejbql' package</li>
+<li>CAY-1915 BatchTranslator instead of performing bindings should return
binding object whose values can be altered</li>
+<li>CAY-1916 cayenne-crypto module that enables data encryption for certain
model attributes</li>
+<li>CAY-1918 Replace Oracle LOB hacks with JDBC 4.0 API</li>
+<li>CAY-1919 Split DataNode creation into a separate DataNodeFactory</li>
+<li>CAY-1920 DI: add support for decorators</li>
+<li>CAY-1921 Support for schema selection in 'Migrate Database Schema'</li>
+<li>CAY-1923 Optimize BatchTranslator - use fixed size array of
BatchParameterBinding</li>
+<li>CAY-1925 cayenne-crypto: add optional compression to the encryption
pipeline</li>
+<li>CAY-1928 Second INNER join generated for OUTER flattended relationships in
disjoint prefetches</li>
+<li>CAY-1929 Property.outer method to build OUTER join properties</li>
+<li>CAY-1932 Improved Handling for Scalar Parameters Converting Expressions to
EJBQL</li>
+<li>CAY-1933 Problems in Evaluating EJBQL Statements with Integral Literals
> Integer.MAX_VALUE</li>
+<li>CAY-1934 A problem exists where the escape character is not conveyed in
the EJBQL when toEJBQL() is invoked on the expression.</li>
+<li>CAY-1936 ServerRuntime.getDataSource() returning DataSource of a default
DataNode</li>
+<li>CAY-1937 Make Transaction an interface</li>
+<li>CAY-1938 Create a DI factory for transactions, get rid of
TransactionDelegate and modeler config for tx policies</li>
+<li>CAY-1939 DataDomain must use injectable TransactionManager</li>
+<li>CAY-1946 CDbimport improvements</li>
+<li>CAY-1949 Search in configuration fields (Catalog, Schema) in DbEntity</li>
+<li>CAY-1952 Undeprecate (actually restore) ObjectContext.deleteObject(..)</li>
+<li>CAY-1953 Redo ResultIteratorCallback to handle single row callback instead
of iterator</li>
+<li>CAY-1954 Make Cayenne class constructor protected</li>
+<li>CAY-1958 SelectById - a new full-featured select query to get objects by
id</li>
+<li>CAY-1959 ObjectSelect query - a fluent API alternative to SelectQuery</li>
+<li>CAY-1960 ExpressionFactory.exp(..) , and(..), or(..)</li>
+<li>CAY-1962 Implement CayenneTable column resize on double-click on the
header separator</li>
+<li>CAY-1965 Change version from 3.2 to 4.0</li>
+<li>CAY-1966 SQLTemplate/SQLSelect positional parameter binding</li>
+<li>CAY-1967 Deprecate SQLTemplate parameter batches</li>
+<li>CAY-1968 SQLSelect cleanup and omissions</li>
+<li>CAY-1971 Variants of Property.like(..) : contains(..), startsWith(..),
endsWith(..)</li>
+<li>CAY-1972 A property to override DataSources of multi-module projects </li>
+<li>CAY-1981 Add support of JDBC 4.0 N-types (nchar, nvarchar, longnvarchar,
nclob)</li>
+<li>CAY-1984 cdbimport doesn't flatten many to many relationships</li>
+</ul>
+<p>Bug Fixes:</p>
+<ul>
+<li>CAY-1480 Implement cross-db functional expressions</li>
+<li>CAY-1695 Unexpected null value in bidirectional one-to-one prefetch </li>
+<li>CAY-1736 IllegalArgumentException when synchronizing entities in the
Modeler</li>
+<li>CAY-1795 "Invisible" ObjAttribute in subclass</li>
+<li>CAY-1796 ROP: All entity's to-many relationships getting faulted from
database when using it as a parameter in qualifier expression</li>
+<li>CAY-1797 NPE importing DataMap</li>
+<li>CAY-1798 ROP: Reverse relationships of prefetched entity objects are not
filled during server to client objects conversion</li>
+<li>CAY-1799 ROP: Server can't deserialize LIKE expression with pattern
already compiled</li>
+<li>CAY-1818 Fix copyright year in the Modeler "about" panel</li>
+<li>CAY-1834 Exception: ToManyList cannot be cast to DataObject </li>
+<li>CAY-1857 Problem with hotkeys </li>
+<li>CAY-1859 NullPointerException when importing EOModel </li>
+<li>CAY-1863 Make determining whether a particular database type supports
length adapter-specific not universal</li>
+<li>CAY-1866 Change in General Modeler Preferences reverts old settings to
default value</li>
+<li>CAY-1868 Select contention with multiple contexts </li>
+<li>CAY-1869 ResultIterator from cayenne-client dependency is subclassed from
org.apache.cayenne.access.ResultIterator which is present only in
cayenne-server dependency </li>
+<li>CAY-1874 DB2 Procedure action ignores the first result set</li>
+<li>CAY-1877 In-memory evaluation of expression may fail with
UnsupportedOpeartionException depending on order of nodes</li>
+<li>CAY-1880 objectStore snapshots never cleared from RefreshQuery when "use
shared cache" unchecked</li>
+<li>CAY-1881 CayenneModeler (Mac version) doesn't work with Java 7</li>
+<li>CAY-1885 Null value in subclass's field.</li>
+<li>CAY-1905 Multi-step prefetching NPE : 1..N..1 with absent N and root with
no qualifier</li>
+<li>CAY-1943 XML file not deleted when a DataMap is deleted from the
project</li>
+<li>CAY-1961 Fix RemoveAction for DataMaps in ProjectTree</li>
+<li>CAY-1964 Fix convertAdditionalDataMaps() in CayenneGeneratorMojo.java</li>
+<li>CAY-1973 error while generating classes</li>
+<li>CAY-1974 Copy/Paste DbEntiry throws exception</li>
+<li>CAY-1978 ESCAPE clause should be included in LIKE parenthesis</li>
+<li>CAY-1979 Prefetches on Many-to-Many Relationships with Longvarchar</li>
+<li>CAY-1980 'mvn cayenne-modeler:run' seems to be broken in 4.0</li>
+<li>CAY-1988 ServerRuntimeBuilder: synthetic DataNode does not have domain's
DataMaps linked</li>
+</ul>
+ <hr>
+ <p id="footer">Copyright © 2001-2014 Apache Software Foundation.
Apache Cayenne, Cayenne, Apache, the Apache feather logo, and the Apache
Cayenne project logo are trademarks of The Apache Software Foundation. <a
href="/privacy-policy.html">Privacy policy</a>.
+</div>
+</div>
+
+</div></div>
+</body>
+</html>