summaryrefslogtreecommitdiff
path: root/frontend/gamma/tests/tests/Clipperz/PM
Side-by-side diff
Diffstat (limited to 'frontend/gamma/tests/tests/Clipperz/PM') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/BookmarkletProcessor.html59
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/BookmarkletProcessor.test.js132
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Connection.data.js841
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Connection.html71
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js255
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Crypto.html281
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Crypto_performanceEvaluation.html153
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Crypto_test.html169
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLogin.html103
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLogin.test.js195
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLoginConfigurations.data.js33
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/EncryptedRemoteObject.html66
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/EncryptedRemoteObject.test.js225
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/OneTimePassword.html105
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/OneTimePassword.test.js198
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/Record.html98
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/Record.test.js1285
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.data.js1941
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.data.old.js172
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.html106
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.test.js2082
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/DataModel/index.html47
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Date.html59
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Date.test.js90
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Proxy.html65
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Proxy.test.js117
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Toll.html62
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/Toll.test.js202
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/MainController.html64
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/MainController.test.js90
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/index.html46
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/UI/Web/index.html45
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/UI/index.html45
-rw-r--r--frontend/gamma/tests/tests/Clipperz/PM/index.html56
34 files changed, 9558 insertions, 0 deletions
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/BookmarkletProcessor.html b/frontend/gamma/tests/tests/Clipperz/PM/BookmarkletProcessor.html
new file mode 100644
index 0000000..9bd344e
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/BookmarkletProcessor.html
@@ -0,0 +1,59 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.BookmarkletProcessor - test</title>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings/Strings_en-US.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/BookmarkletProcessor.js'></script>
+
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.Async.js"></script>
+
+</head>
+<body>
+
+<pre id="test">
+<script type="text/javascript" src="BookmarkletProcessor.test.js"></script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/BookmarkletProcessor.test.js b/frontend/gamma/tests/tests/Clipperz/PM/BookmarkletProcessor.test.js
new file mode 100644
index 0000000..21776a3
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/BookmarkletProcessor.test.js
@@ -0,0 +1,132 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+function testBookmarkletConfigurationString (aConfiguration, shouldFail, aMessage) {
+// var configuration;
+
+//try {
+// configuration = Clipperz.Base.evalJSON(aConfiguration);
+//} catch (exception) {
+// console.log("EXCEPTION", exception);
+// throw exception;
+//}
+
+//console.log("configuration", configuration);
+
+ if (shouldFail == true) {
+ try {
+ Clipperz.PM.BookmarkletProcessor.checkBookmarkletConfiguration(aConfiguration);
+ SimpleTest.ok(false, "vulnerability not caught - " + aMessage);
+ } catch(exception) {
+ SimpleTest.ok(true, "vulnerability correctly caught - " + aMessage);
+ }
+ } else {
+ try {
+ Clipperz.PM.BookmarkletProcessor.checkBookmarkletConfiguration(aConfiguration);
+ SimpleTest.ok(true, "configuration correctly checked - " + aMessage);
+ } catch(exception) {
+ SimpleTest.ok(false, "configuration wrongly caught as malicious - " + aMessage);
+// console.log(exception);
+ }
+ }
+}
+
+//#############################################################################
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'simpleAmazonConfiguration_test': function () {
+ var bookmarkletConfigurationString;
+
+ bookmarkletConfigurationString = "{"+
+ "\"page\": {\"title\": \"Sign In\"},\n" +
+ "\"form\": {" +
+ "\"attributes\": {" +
+ "\"action\": \"https://www.amazon.com/gp/flex/sign-in/select.html\",\n" +
+ "\"method\": \"post\"" +
+ "},\n" +
+ "\"inputs\": [" +
+ "{\"type\": \"hidden\",\n\"name\": \"path\",\n\"value\": \"/gp/yourstore\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"useRedirectOnSuccess\",\n\"value\": \"1\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"query\",\n\"value\": \"signIn=1&action=sign-out&useRedirectOnSuccess=1&path=/gp/yourstore&ref_=pd_irl_gw_r\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"mode\",\n\"value\": \"\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"redirectProtocol\",\n\"value\": \"\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"pageAction\",\n\"value\": \"/gp/yourstore\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"disableCorpSignUp\",\n\"value\": \"\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"protocol\",\n\"value\": \"https\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"sessionId\",\n\"value\": \"105-1479357-7902864\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"referer\",\n\"value\": \"flex\"},\n" +
+ "{\"type\": \"text\",\n\"name\": \"email\",\n\"value\": \"\"},\n" +
+ "{\"type\": \"password\",\n\"name\": \"password\",\n\"value\": \"\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"metadata1\",\n\"value\": \"Firefox 3.0.3 Mac\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"metadataf1\",\n\"value\": \"\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"metadata2\",\n\"value\": \"Default Plug-in Java Embedding Plugin 0.9.6.4 Shockwave Flash 90124RealPlayer Plugin QuickTime Plug-in 7.5.5 Flip4Mac Windows Media Plugin 2.2 4||1440-900-878-24-*-*-*\"},\n" +
+ "{\"type\": \"hidden\",\n\"name\": \"metadata3\",\n\"value\": \"timezone: -1 execution time: 3\"},\n" +
+ "{\"name\": \"action\",\n\"type\": \"radio\",\n\"options\": [" +
+ "{\"value\": \"new-user\",\n\"checked\": false},\n" +
+ "{\"value\": \"sign-in\",\n\"checked\": true}" +
+ "]}" +
+ "]" +
+ "},\n" +
+ "\"version\": \"0.2.3\"" +
+ "}";
+ testBookmarkletConfigurationString(bookmarkletConfigurationString, false, "regular Amazon.com configuration");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'hackedConfigurationWithXSSAttackVectorReadyToBeTriggeredWhenActivatingTheDirectLogin_test': function () {
+ var bookmarkletConfigurationString;
+
+ bookmarkletConfigurationString = "{" +
+ "\"page\": {\"title\": \"Example Attack\"}," +
+ "\"form\": { " +
+ "\"attributes\": { " +
+ "\"action\": \"javascript:opener.document.body.innerHTML = 'hacked!';close();\", " +
+ "\"style\": \"-moz-binding:url('http://ha.ckers.org/xssmoz.xml#xss')\", " +
+ "\"method\": null " +
+ "}, " +
+ "\"inputs\": [" +
+ "{\"type\": \"text\", \"name\": \"username\", \"value\": \"\"}, " +
+ "{\"type\": \"password\", \"name\": \"password\", \"value\": \"\"}" +
+ "]" +
+ "}," +
+ "\"version\": \"0.2.3\" " +
+ "}";
+ testBookmarkletConfigurationString(bookmarkletConfigurationString, false, "hacked configuration that is trying to inject a XSS attack vector. It should not fail, as it is responsability of the direct login to avoid triggering such attack vector");
+ },
+
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+}
+
+//#############################################################################
+
+SimpleTest.runDeferredTests("Clipperz.PM.BookmarkletProcessor", tests, {trace:false});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Connection.data.js b/frontend/gamma/tests/tests/Clipperz/PM/Connection.data.js
new file mode 100644
index 0000000..9dec232
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Connection.data.js
@@ -0,0 +1,841 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+testData = {
+
+ //-------------------------------------------------------------------------
+
+ 'joe_clipperz_offline_copy_data': {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+ 'f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674': {
+ s: '186f0c40bf73f2af236eaa6c429df225efa933050c9aae65240e93b7b362e3ee',
+ v: 'ac61a6e325ecf329926a86084f591d8852d0ad3e4a6080f2adc901b82395ecaf',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5":"0","13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551":"1","062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80":"2","ca01bcb7691f70818feed46c9a2a91883ac543997a395535aedbb49de166690c":"3","507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a":"4","d5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d":"5","de13c0d036234c44214062bc0a89e5f127470c464333493a485729f43cdc26e4":"6","d620764a656bfd4e1d3758500d5db72e460a0cf729d56ed1a7755b5725c50045":"7","f215d89bf4583c12f5ed4f4330f488dad3fffa448f4dc784f15ef135dda2c732":"8","36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113":"9","fe21497ef7435d31f9746c132e4b5ecf5aac5f13b5961ddb55d2bdc3409f28f6":"10","6d45c2fec275b7482d41c76b20507100cfb6ab49922b876f9dd3040d361f4a18":"11","9dcd2a8a0fcb7e57d234dc4fea347f020a6a01793e40cf56a0d22379e590e291":"12","6c25be8e145efb26a1abd59590522f73fb2e3dbc139af2217074d9e2ba92c16a":"13","6026370f3db3860d2c46a08e389a7e906dc14f98c8444b21be9a7e9f405a2728":"14","8b18e8593b5bc2f7ea39a5fab222047034ef2f380fee05be0fa6e1c0972fea39":"15","084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d":"16","7bb69b6366a8012f181c01e368ba18d4f7a82bcabb4959189736ad124c4bbfbb":"17","5cdac63b317f3942da38f3a3de3b7f0e5d6678200951c6216230295550f63fb4":"18","c0ce9130ca365bb02418d4305ea1d29e49c3f0e96d44b9d3cb6b4b6843d25065":"19"},"data":"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"},"directLogins":{"index":{"61e87fdc4f1d9112e3b30c1f6812d095dcdb24f014c83319091eb6c9899ec348":"0","989593d4c48929f0c8f1581aa96969c622807e99619ed4732026e967530a68ad":"1","9f7979368fa29f66c44bd97ecaf6c545abc800b1c7bb21b7655a68e1514c3906":"2","dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496":"3","aa18149164302d5dbe7e2d3724565b9550e00887b49978559783b2e38c625584":"4","1f9bfd677b531a03168d3f8bd8afabb5357244a7bc355dff50bd6c0a072114a6":"5","a48e38845713462ecc9f827149eeaae87da882031f98ef8ebbf9ee9537b63468":"6","6f7bbc4e42ea462b5246e6f51c3f86056bec50601ce2de6067c8c1d26f21c07f":"7","2df54059e78f5771f23bd285cce19595b38331b73d67020424d9a1b2257db09c":"8","065cd0c270e5e8ce50e4ea8e3828dccdae18c01ab030813d756a87d03fe68784":"9","ddbc8d01300a4f10631cbde09e1246332eade3a877a2205209f9eb9e5bc9da0b":"10","9b7a30e667afc9f76ba77600658b2c13bff52432d444261d39bf3d069a160afe":"11","9fd2929cde3d32d9cbc5f1d787f2f64729a5e12a14410556b31c0c099762c46a":"12","f695fc36ac56bead80c0d20a88e01e382819c18dc268f1679551b7c83db7cb14":"13","f22dc41ffabef4b3bc8f7af804fec975bd50718098322a673cbe4aaff9464ae1":"14","03251dc1cbc5398789e4c4b45c52cfac3fcd8c1a4f19a81fa68fc6feae31d55c":"15","a7b32e72502804bf2946a2a8856139cbbb759c5777e6b3e673db1fdf7e3bd06e":"16","cb9ae0bba1957075ccdbfd3b3481704d62087687a2ac7c411a4f07d444bde0f7":"17","7e1d069b7fa57c03bd7bf48807520feb953157834503aaff8c9d493f37dea69d":"18","24404059cabc63b2dbff0f42ba57183108b8189ef53ab62fa25141a1caea824b":"19","33cf9758477460a8056deef0295a1ebe65b39b392c361ceb920a83edacfe5d78":"20","e9a16316f330e3d150f6ffd194f6fd8acd1426757b097de4b88ca0db875202e4":"21"},"data":"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"},"preferences":{"data":"EZMrwxNFFd1sMGycoYE7IrlGGrfLixLUnLZmWMkFysfISe2ay3ueO0PGCApuKqh9hA=="},"oneTimePasswords":{"data":"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"},"version":"0.1"}',
+ statistics: 'SfGy/4mpXQdDOv+Bcfie4Yt/',
+ userDetailsVersion: '0.3',
+ records: {
+ '062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80': {
+ data: '7sgxSQlqR+wh3g06M2+sWp7raQxjjQ9jLIz2OcEB7SckuQcXNrhMlDCbL6ncSljtzgqhioWrOB409kIG8lc7h6ekghOE/Mhi7rVwAiRfNGB7r3mYxpEXRe96O2RG7E+NcSp8ezl+5gJ9D0o1abXPeFQYGcr95hUioCfyY+xrxY8TJVwdb9nHkYvBdKV7rCl1dTxgsKWK3nlo1T7e5uyiz5YUAE6BrCtTFAqtprLI/xOpRti9C+llohS7D6s8hkCBPZfp3chKFDrgpsCBFLhXN8jrBKSjHi1PJdRQzpJsgrxyeBj0dZx3gTsYOXqrYgdIzFUo7K1Tqb30yNprBiDMr7j0YYXiSvEb7OuOIP+HTXGN+yt09bk9LggyY6Fh0e+tenjQQ3soySN/XznOBpEjXbzXoz6fR1MXVnE9GgaX99LVNqwWfq2rIBdSE/FfspRiWP3BY5jIrEkNeRclS05U1zw3K3wxOL+cB9r2IynSXnK8QcrDNNRZ0W3PhsSFfByUXuviLSEOPuJa1mYP29L9Lj/WyHL1Gyl8xLbt2H41S6+wvIleKMuc7teH6wPXbnYphvbwBowoI6HZTEFkz3dQKhhY6VF/81iCXsuaz6BjyrzFX6SkQ4S3lN1tv4opQMJFvnmHb6EkXqVWfeIXzJIJO+owL4vDOf4okpAD+HPjjlVXhq6fvyM5UBIK9+tzJW78X/zifrQOfWRIhwjVsfUdZWmZ/S35vnHWNuXkM8GBYrDysqxanDtah3U8XLAiIhFtBOzpzr6qGaNDOKKgG3K8QXT4bYHOq1rQVUwzQuKhlCyStrRMQrC5Ry251xmLy6dKfppRarVeGDtzB/30BbtFNdZmzMNG2g+Jj5tFCrEtCMvMiQEWZHMU3tGMFxDef/KKdv1fFTJC16jmaUiCHUZmNjB3EO9R6xPVcMlAVKf57n3efrpRk/GTmm9JhAFkuF/wsveH4JjPpDUdkHYFu5tHbb30sbga3ufBAXbQL4ck10S24akU/cKraFGLvuKGaR2U0i6ih911TBSf3pAfZ3RFbBhVIl+6rSknC5+IXoBR7MRstBPW/xC9pQVjN5Qyn0g3aUjUSI+q4jcTuvMl32NtTJbWRMGhfkrpVzypZTyPnIh6XJkyBghlUARXw23MlbjiZxmY4ScDmcWZRZJWIknHlqjDKFDKNnwrfnEI9qWyMDno+jA/DEQz0mnpdZYEsoz1/qAmAeDt89vx',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009',
+ currentVersion: '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3',
+ versions: {
+ '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3': {
+ header: '####',
+ data: 'GCNNIhDQjMJQZGVSf+95fPtU6eOnFWVhuGm86r8WZGVR2Gf2EjbG1OJ0ZIGpZ/AXgirCMpo5AFxJe0Bay8IYg+xmBqMFhwFxzAgJBYCIts+raSaNRipuY8dTEqDxAqD1cChcG8EhSoiFgQ0fG0I7nNEUDJi0pIt4/ygBcwvAhuAenEp9ZW+oQA0+YysPQRqkz3IieFaOoSEbe5/SqpUilV4q1gTVyzNXvrxzxx+rlvEyGFgFN+vgtUZ1NrwlPk4gVksTpylvv6CFaMGEWKhgMG6efo0rJckKosaJTu1pldJdnmMK4EKNMLOd+jZ6pEhEhYyadrA4+zYU5TlmZA6ASzTaps8piSwZodoi9qY0ch2StK4mAbzeEGe2HdfHuAU9Tyq3Ppk3+VfNdKgpQfYrQOiSlXbKzK636tzXTN/gyrfOTHjBrRl117ywibgSX63ayAYNfcLpKotC',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ }
+ }
+ },
+ '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d': {
+ data: 'fGzBu1On7e/6rAoSB1a4fq/CkS8Be/T8UP5cQ93asBTWndSYu2lW4DQ4SXQXSindIi3OnNx/f6SNv/extb7OrMLREF92wXI045ipPwy+DIICb+cQNMJ82Sh4cXaIcAWcyrm+MYri3qq9LBKbpwkILcebZidJ86lmKYHJozUezmfbMcwNCljHs/gYkHVzVcuw9L52Ugc6wC7sjsshh+UH6i4/2Frlrophtx+b1vervNd8eoYiKnedHVXVfW7UJcQoF27eHFgzwYnGvRW0KNXFFhqmPb61TSkIvNdCCvBKDP4SXrWvGgzU89wipvWdUPpQ+fCT6Mp3hPRrbJxwMunmjujZOzBld/HkjnXoiNfBb5akA280WvdyzWYATrjV1ZFx8yQY8G0+lRt/MxjKDc38w4y+Rf5WeRbXboJMvFatwooHUggk6qSRmZVvgOmFmNuDRnRYIFzqK3JclhJeVasnqhR6RiGSowc1Ffr1HhcZCMnXpQABGBkZcHD/zw6YjHRyh9Plw7XAm0xb16HMDtiwt7WLJpxLH/HP99j/A2hvMGWiUiFCaYv7AzyEPTmYbN32D1IsAEE/GC3FG0HypGTBolP8wpAfTRdlvWpJz8oRRdwuLV3Pgpu+kXh5sQyeZI6tnuMPQFmRDcMN1oo3E5V5V585nVMnKTFcXhBzD4UnoV+DQNkG/+iSPybQzz/EZmucEqGEYyjI3kl4MAX8UMEUxE4JO0fF8MzyBI13nxknowAceEammx1dGVaJCoIOdhadaPVPyOzXM1Vp1erVm5k4TsxSx1pll+GOm6hVoNHIuQLDueaMEpRxMhfwc8cDyXURqRGPTgTc0bint5xVjo10fnpX1gcdc/AWL6y3tXM80NW+uFJ4GI7VzyzfcMRzTiRaGi19z8MIx8PbIVGh2sw4FhgGujNsPrpuESvUVT+17M0+v8oEoABNlcizTMFs/sA1uqlPumFASltzmViAzClOsDuCh069hFLjdk/Ex5jy4vPYlwOT8Uq9DJC9ZWuZgiI1DrhWN/8QGAEGxxbvnSZPNCQ9kpD5p+iabinLLWOAirVNgKwIRJRyAu/uR9xKd7J9Wxq8q/ii+y5lGilbo2g24wbDwrkXYVhqp/4J0g+p8Wv1NBjCTSCqV39WEizUCRHo3ee9HnQnBJQDOyTBRuz2odTJtJ5tLYjWXZRdFzFSJrEq+Z1z3oq7LnhZy3YWaFXPeKmBCemMthtNt0nL',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:49:20 CEST 2008',
+ updateDate: 'Mon Oct 27 08:58:49 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:39 CET 2009',
+ currentVersion: '6fd60c5709a4808444f43f7bbd872363d76703957f613076538ba2f9161206ac',
+ versions: {
+ '0ae362285f103722abbd046eee2b7d10aeae6a1d05cbaf2081392ce9df882bcf': {
+ header: '####',
+ data: 'sG6TUmPSEPFpiJ5YdtghWHmHbvUK63tZCZ+Q5iz2ALas//jN+lZCBhZcjEwPEJskBkK2R0MyAh14wWGh2bBHMjsokgTe+L+x+0c/Zi0epE/IC9gtOBhsTe/hZ2e2xOGF/SbzET3DAAYXvxduZ36f7SvvFnrkkKvpj8wGSdTFcBmzqMb9DL2bRyRCLGLMzE3F1a0q5CufCIRz2TgHm+Uw+kfvvwC7ig/F/5iLW90Ypz3vmEtMEFYFHZ9a8Oh0rsXGfevbMhFqALoywzihQEe/NiB8dwn7GEdYKSQ35rhvZh29ULWOZinqmg0ONe0HYaxx7DbKsVoue57S0CIUlgHLajzHfLfqQg2sFI0OT8TnHsGg0YZ6mM2EdKmEjJiER0cP',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 17:00:31 CEST 2008',
+ updateDate: 'Fri Oct 17 17:00:31 CEST 2008',
+ accessDate: 'Fri Oct 17 17:00:31 CEST 2008'
+ },
+ '10f45664bbd979a92f37886f1ecc6e52e49798b16dc997aecd37259ad9b2090e': {
+ header: '####',
+ data: 'RdKVaV/WWWchrCse3KtcXd47Bfm6IAwjqVUpaxoed3HeunI42AAm7xYYSjeK8edHpbNRJbhobBAX5OZtWIp/HmgkobKM8CIiWxrWz89FqyrbnPD7+fXdtgF2yTax/0sC1l0ibncdOuJKX6U829oPlXCpXIOjlomc4wEEAD/5V6FbORvdZ9IE/ME3LsG2y02cT2tIpx6+R6wC/PKXhZA2UDsTE6R2Op2BtIzpVORZLXsdyAp/4wvWQxq90i9cEpbsVQsMB10JVyNHNsRTFhIlHi9MVCaMxQvcrwRElMj/Y9x3RbsFzSGKqFLqdg7Fn/U+KYkpYtsgHv9hraPIb9lV5FH16+iItU/HBM6FGezIj1ZkoQ+dgjPfSjTZzgzDYwyb',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:49:20 CEST 2008',
+ updateDate: 'Fri Oct 17 16:49:20 CEST 2008',
+ accessDate: 'Fri Oct 17 16:54:23 CEST 2008'
+ },
+ '2fa7b67e569d5e268d2b70b3d4d3a960d7e437e1937bcb324b67d0b9441db8ba': {
+ header: '####',
+ data: 'dpnI2qKjk0+bfyKktw4ZCWf+rWZ12hO5bda39CwD29JH7KtdpLCLe2LoLd+KKF2wOdpDsoI2iTiwRgFpt77e7DoWJABxq/0aaRCVN9XpqZo08iHiYhJyNlIszO8CdEhX+M3AeZqzTnd6fs91VfIEWggvku2Z+jwr0CbclY6FnOcNnS+1fj+W79Z9XC383GOm2ujjfo3SX/fyNQSw8aX+7AgJIRGR9uHK7M1cVfsNNTbmDb/HDgLlYZ1Pqm/9poHpmS7G4HUoRM2/WjI0R6F48dy5s8vZRi11SCnlnj5oRykScJj6wh2DltbCyesiaTpAjP6MQjTXsZzKpaosaQcQClZw+w6hDD2cA54IaBIv2j5KAHyhxDh2ERdwbdnCsDKPz4+zP+fmKfW295d4OY0l1NCSdcY+75HWTmBWRAooZeDTo7AE8m5sRwxewE0Y8J2MLUYsrs7Rl4kbZCiRRHU7cs+us3fq2DVn2OLGEbkRrK3kA9swT9W8ABqINoA79+DmDaIr6TGxe5AlHkCAl5sYAN4g42UX1NKhl4fWI1Scj9O1Ixds/1UUvqzavld0mE2cR9yt6LntjE5sQSAaexvymAJbU5IIM5NTk7NlY7G3PEvAPjcUsL9SGw==',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 17:00:13 CEST 2008',
+ updateDate: 'Fri Oct 17 17:00:13 CEST 2008',
+ accessDate: 'Fri Oct 17 17:00:13 CEST 2008'
+ },
+ '5a17723c34226d8cd663f91b11bfa14979e694e461818113ec8abf7194b46b6b': {
+ header: '####',
+ data: 'yRTvhkoY9zDRBwFYf0G5U8zhfS1XWIUfwes6ADNnFyOrHOr7JZvZZHSgkOPnsmN/f5ngcvFaIV9X3TNTmmPLzD/ewgGVMR+ofMLyOIMGhxUDzosSd1+HKqwDZWneZ6xNsci87W8UCfJgoEGrkAtAwktqyS04pcAas74XiRGBWNcv5mHZONwGPckYUnnaVG02Zf+qif6Pp7ugdvXrgncO5oi2AMSoR8GQxMP+tX53YzLwOpabA32PDT6o+aDPwMstJNQjWCXjeYLDIlb0GjL2zgjglX5CfdGw8vNT5hwGEK2D1FkvHkw79m++9sOWd5w9WdGgtS4mrTZP3JHWC1sPqvsIpq6PsrzRrbfCFH7C4X/ya5ciOIZTCNl4dEGAif94zgN74ueY5BF31PNFtaRaQ1waKkbsrU63MrbQbBar9b0hDZoser3BdgDGb1Ecc2GbJM1HbDITttmFDrzy/Ugh2kistHx7Dci8IGgfT7K94TntRFc5R6suEqYRrmOn57YJTZYrwSgbeTqAt/KOE+gL9LawiLJ0IdSC2RQnO3yu/aOEThHxpdLIKiVJoiEQXYVnq2UpnO79GNtplNnUe1hETQ/JT0o5X1bbENyInUsFjPuitAfChXofkAysIhDOHAdifc0Y+pxOHbQLkL65ZOsEDXWSlwMcduMNdQm4LVx26GLIV6yVsaDN+hGta2CxUuSvEIMM6T5xhaPfJ4K57LVw9MbOjRXpmFQz3QgEr8ZZdUxgE+Kj6CtmsjvzXtCQ3Bv/SccTLJSR/LQ8XRdIcPoOlDDy5jSQDF/8lxkgV1V7M3+SI1iWESPT8My5C+RH32F2MNZzthYq5hIFUB3wsM/AaQ==',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:59:31 CEST 2008',
+ updateDate: 'Fri Oct 17 16:59:31 CEST 2008',
+ accessDate: 'Fri Oct 17 16:59:31 CEST 2008'
+ },
+ '6fd60c5709a4808444f43f7bbd872363d76703957f613076538ba2f9161206ac': {
+ header: '####',
+ data: 'RgIWPbNN3sPkIPBE6lfvf9/EoDFLemTZe0Qh/1wZLrKxLRNzFpUk9+NmeGUp5f1hM3XjXw4cXRvP6GrWq69mz9zGja+1TA6RoW3dFMpSQkbONcrSD1mIjxV2zIvzA/Pangz0ZixbEeHCfwXLvgnevbTXXFjkti3kLHQlk2pJpM3zMl+rMJtcsefszuJ/0tE/bO7sBcFqcYgKAht2OyDQORBAGiW1kI9USKM5OOfJJIZDQ0gDhRgl2U92l3kIOO8hdnj32oRedwfKFmdSRkuMY7ykU0bMuVEVkLi/FWmhHxi66C2ovAztVtMd1IiyoNcHc4UH942GC4pT1A8YQpIHxBAJbrQVhpl9LfFkmJ7xUc6Xs5j0Nv8+z2JGCnJI/D4nDJqYW+iCYtRWu6vUmbg0vGfaYWQFGRZRk8zWfHzHXBvHU8p0QsIjYgCLKiUaU2SRRD2P7JCjeTUrm3I1OI593iPsEH9J2PHCM9OMQ8/Fsdgd7lWgH6P9jLdGUwtb1hGaq8mg3JGrHFXcrVkUEBfeR7xljeSHD7j4YahYrua9EeR8nvq6CNaOr406AWyHse9SXhaOxt8qXRLoELpyQPsaLgafUpsdLjJqHz7J76Rp77NSOtXGplKjAtU1xj+d/agaAKYCjvUJC8/APJI2890Pn7VSXr/TPc5biPEIopyVYEHFqaT4e5nZW1Ku1HXC9gwUwUI9rITG4GzIH1WMEm7oFLNUaSMrdK/UTdTJZ66ENE3B9v9cTUpR0NTkbI+iGKDnc8GHPRlr2ZJwN4KFTxi+o/kkEOBjvRHR55nRh2+dke75LS/fzHQZw5wlyqBv5ZeUZfRA7QHfkj9acR0fJSqqNX25AUzZQnRL3oVpOxFWCMU7QVf5VpnRm9OIOd/5F5EoY7Be4doM/UV9U40F3E6XPZQ8S0GKQzrDjc7jKyGPLNPLUWTmGB39mTNDHZQHh5Xv5Q==',
+ version: '0.3',
+ creationDate: 'Mon Oct 27 08:58:49 CET 2008',
+ updateDate: 'Mon Oct 27 08:58:49 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:39 CET 2009'
+ },
+ 'b57a2d2ffafa8029123362071c09709bb9192f06a17140440f0e41d22143148f': {
+ header: '####',
+ data: 'PQ53T2Vo2D8PoLI1qNX//jLaVZFTDTYk6geT9+4RoThTxvlJ+beDPnQzgYhd9iASaF9GQEEL8JxsBnNpEPa6JPOY4ndFLmDLyFDKXMprxq1UIbzFV6kFoYAk3uCCCa3UCDzdr1KXB2CiiF9HrilaA+xkm8krAvH8I5kZD+j23gByz5cAFvXg7A77KEURpjujURL65DW5M+ceIjo6OXaPW9VO03xhqGt/M47ayObpoEGJZn+X9C8s0SE5wOXHbn38YZlRI480OMvtDAxbEYUeQKMmzu6lO4Nw5hhOUjoPSLr/i3tmDx3nPcDwnSafx6jyA4y31eW6yazqTEOP5I5ArC5mUrF7mAAiFvbHIsMoF8PLj6MONlRIOZgbf9HzCpFdt8xBrX/TXp3LaSAj2XTWgSTFI2cgmU3qqPyibvIfUsB5cVHQCXi692JpC+B85axJ0FLyMl5w3vq0txlPkf6q+dadPYDaLHGZEmDjkWScA1GM5xPJHWFwqGE7ejgXKG0sMYsMKWYk+F2LEUmMHtEvSlpgJBntvcQ1ZjYQxeu4hg5txu1ykkif6fXgkXF6wn6qu+5caeJeNhWtAB4q7WVD47111woYMdkmX7AnDTXSAQ==',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:57:17 CEST 2008',
+ updateDate: 'Fri Oct 17 16:57:17 CEST 2008',
+ accessDate: 'Fri Oct 17 16:57:17 CEST 2008'
+ },
+ 'b713e0a1e2664ac7bfa7ba887329ea023204d10298973e322983b82b222debf6': {
+ header: '####',
+ data: 'H3gIieYrH7Oy8LEWCZpl9vGp9qYdHNCoBNGijYqlcfXt+1JYvPj1abPp12xLNrDUHfaOZklU2Ip4tOf0CDNhgAan7LYyPqFoy9ss2f9/5RLcbjwiIwSduySIL322HTAwqlzlBt/qaJdHHPUrczmu0fb7fT+0dO4gCL/e/IjcHLefUUgNPAbpHG0Nv0+4lNwKZkIQM3tLRtfJyFBIgWKcMcP1XMic33kr24rwybR8Pb0CHZrOOvvUiGqyoED3ZTZf1twUDVNXO7MWCAC5dBc6/Mk/vSmbbGhppXAH02N0g8G5qzZfp3UVikls55VNhRYLHByVsgpkbIrKXyZnBPTwzm7qefpYAXDOgO+164L66/Art2FYGqZQRZLuh5r8oF38',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:58:00 CEST 2008',
+ updateDate: 'Fri Oct 17 16:58:00 CEST 2008',
+ accessDate: 'Fri Oct 17 16:58:00 CEST 2008'
+ },
+ 'c4cea1cd88a86b05f48a99896a37967c3456228283a0406331ca9f67c6f29f97': {
+ header: '####',
+ data: '1znWPwc9JwCe7iOFiUd2iGm4xJd+824B4VRqEtzCQkW46tg25RWfo7XagvK46USB7t6pC8WMLU0M/EC47KucsfpWUqHGbseoXT/8g8E8GoLnIsk9qFyJG7LGd1sUvqBgszLZwjWWG3t9zifmpW5nY9GialBYNmeSLS3bg5xDH+eCEilUUfDe7zGuVSuu/XkHacv/DYUst97e+6u44F7H8Kv8dTywJZpqbmveNPeWfCej2aBXdVV616J5lIRaj2uIYuQYG7blYJh9KZ7yLStdPndl6h65hIJpfWo0PM8nLJuo0lWNHz7misrutnmxJEjkwVIZ5YAmqp1Zz3VC8zw4IxkXrC/sPmp4PaNXgKz9ZJRaY2KV69WmHf7BUQ3QneGngbT0tN526SS5qDFwTGiuIlnYGWvTB2jVrbns68n/d8Fps8sSWfJBvvXJUEkaZB+1WqNilOPGXvyJ5k2O/iucFbRlxwlEHDny+AgsbtXZdp8cHQ4C/O4G0mnUMZuS38gn6e2kQ55mUhxKeORM+J6Rx1y4Iiu9KKNbxyS5eBpAlFB4xS/o35CS4g309vyOEhi37F24bpp4pM0xEPG4mcc/IyChHzaHUGEp1IX1ZO/r3ut9RIN2QWrGLUlZV/9rFKpLLAy6BkY/g8VYNrV8PztOL3rqy/qwqNZouONwPw8w8SA=',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 17:01:59 CEST 2008',
+ updateDate: 'Fri Oct 17 17:01:59 CEST 2008',
+ accessDate: 'Mon Oct 27 08:57:58 CET 2008'
+ }
+ }
+ },
+ '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 14:53:11 CET 2007',
+ updateDate: 'Tue Apr 17 19:17:52 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:25 CET 2009',
+ currentVersion: '88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854',
+ versions: {
+ '106a1116d22c2395906a346da4d830c7afbd2da9a46210d0b7a11de238016783': {
+ header: '####',
+ data: 'jgDUvByveAFnchBQKhiHGYDNDtj/7Aja2RePMer0FCOkkEu5GRAiLkxA3/DD3eiU+g+mCxnjnOaEIYL1O5o0+JP08XapsblZHTRKfveeFfs6sWwuqEHGYULBaXx4XSfK2B12HgpBwa5aD49489AkuyXi7t/aAXcKKJcLB1sC61DI3NsmajUaXHBi31Sp7nKAUpMuiWyguW0JVfH6KUPqyldVDBTBqHAis37c1qoR6aFHFfGgAfb35+syfmPRgemujMRkj2XO6dbt9zAYlHVSYFp9393rwPZoyBfXMMdDtSTmq7H9qbmx31GecHZlFN3NymtPPDYUbQ9mpPVRbxE9NjtiPrI5eGFvb++OdOx75PKjYjCAPWWFZ+4aryNn+h+yqab7pAuoG03ACVVrAFIOn09g1ssol/vqvalulEf3hAIviedyiNAC9D0UDHtzUwyIiELvR9qouXLZ',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:13:41 CEST 2007',
+ updateDate: 'Tue Apr 17 19:13:41 CEST 2007',
+ accessDate: 'Tue Apr 17 19:13:41 CEST 2007'
+ },
+ '111a8a4b6b912b808a93cf5e8785ca223112628d05f0bfc5dfe1eb40cb72ed8a': {
+ header: '####',
+ data: 't524etHmXljCnLC+IM+WPD8Q5VE7wDsSHVNZzFU4hQzk119t/N/vhtfHYz5HgNstU5T8c7h7RHKvFk5f+4ZwgNgDqSH7H2PrH+7/bV8+uuqbe+/3GYOvELjTF7v3xMyYs1B7ruHpT+291HVNZqxajqCl/+9nbG0e5feqNsTXWUTdLzF0szJuCTNr2I+fhxAO0LRVaf8h+MBPYyuBDnfFDuKm899IsgF9YoYRvjaYO69DkElvf4VP2jrXIJsRnGIUfUaIS/wQ54+X4JBZM/9M09MVOw1SVe+cwG+P3xyPUkqnSb77ECo86C0MktzeYFmPnPv2SM2KFA6slctXsyudoaNlReh1k+6no5J5BjaawTfqYjYrAtWSPsuhxYVsZym/X2CVbkz4rMSn+J5Uio9N5uZ6AqgCKdhAJlwzVb3fIIJwvFpVpy/0LMskb7aG2i4eAxwzx1H6rD3Y',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 14:53:11 CET 2007',
+ updateDate: 'Wed Mar 14 14:53:11 CET 2007',
+ accessDate: 'Wed Mar 14 15:24:35 CET 2007'
+ },
+ '144d6eff3eb5f1cb70c8906741d88018cdeeae3a618ac4066598ad6b04242364': {
+ header: '####',
+ data: 'NPgSZF0eSOzy0/Ns+15Nz4bjSwh4o7fWYgKgwXLRFrF8y3EdbiOH7AiEmmPrCpT1raeYLWCcDIrRTz+/9uvIrz6kK6BjU2emr8YdyLai+PTCRY0SafWS3QiYixX6DJiKIt0SC2F6dfmSHwNsbfTHilFhVXn6wXTJpWvC+sRzw+h42cYpQp0BoLSuFV7vPz/+wtuQdl28BiBgLzGsrtPud0tPcfldGox6Ia/1SrOPcqUr0tnFlNQiUvPU7N0JZgRNyr1PfpAEhmYRI7aEJidsZ36vGQpE0ZQMmQE/9tLS/InALRZT1YXfMsytf0o3y4QlgJrvRgBL7fGiQOZJpU7igLk15xAwU+OLIaYIbr2xlKDJvndHOcrFoYKry9/A/aZSnEYv79wsaf64bBgIVD2WJGLuSFFmzlFnbg/O4kGTin3A8XBpvFA9V6iCMvnEMkrqxD3Qgf7WhxFE1A==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:33:00 CET 2007',
+ updateDate: 'Wed Mar 14 15:33:00 CET 2007',
+ accessDate: 'Tue Apr 17 19:12:56 CEST 2007'
+ },
+ '1f1bdb7a21440ac20c6d913d676aa30dc360252d27059e77df51a1be36b2e263': {
+ header: '####',
+ data: 'TaOHH6IoHPKLLoyLyvsBszgsPPcDs6CiLVXzXuXjFSTrhPxzUw9suSsisgDRRs0ncjZ6BCyqoCxMnw6QVvGN4viUwYVR8AWdCg0NMQZ+LkNfq/2WN0M3KyASI8sIdMCwTb57NzOn9soB1HmmmETZfjr7HpY2cc+lS5/4f5rxI8XTEK60lLed+aEuJamAjeZUdgIyu30mMKKjxPfY3Y9iWMwn1OD0zF0mAW+hyEoMhhK7EYlWKCy+4qN0QM+yNFXQyERb04o2n4XrM+qr9df1GtbQMH8igK5VzXIrKjdHjKoLo9G7D7mfx6mRLsmoAJuE0R8gyzotgdBpOgWasHJ82iWEa1dLRKBHJ1d0Lnumv22tvYfasx2DIR5Tmx3kIQ3hFieLSXq48cYMiaZH/IbLiapIOlMgtWDow8JuySBLei/8FAV8jCxSc1Ui/SjbuK/kCvywaSOhDVIxGw==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:26:35 CET 2007',
+ updateDate: 'Wed Mar 14 15:26:35 CET 2007',
+ accessDate: 'Wed Mar 14 15:26:35 CET 2007'
+ },
+ '70720f026f37b571e9765d27c51d3d60c7be0293c3266f1f987c8de9c6b5c416': {
+ header: '####',
+ data: 'NYaYljcgfzrlN1DVgrbyj4AeVhXGjXPho3IQwEKD3ZOx/yEZxldCNSyFsrk7PoRB8Q1T/6VV4CGa4HLRSB7QVCrtVqWyu4KbbmFoX8NIQ0H3xv+TSo3S/b3dldUeyW32ScaGbspaf8nFf0CffsgpGusd+kHdiE3gSLJvH9y5j47KgpyyX4TteVzqgez4dcXIs5tdzJq2eUlknwU4651QeKIuRSmRaDRhhOP4yRgUo/qXMlTJFmHviCh+IumvBdmDoPe3Vc1vZ1r8PxpDJLvDoB8GTDE42NhqHfVrew9ym1xlTD9wswwIEikfOyTq3JM857qPOHRqSqthEvr4WHbm1VW5PReIyse0lugGyOzqtCnADp9NvNI440VjaTd4NBQqF7XrRm56+1u1uTdfYGFV5BRiH1KmrM1sxXQ6PlOF9Lou45ALo20xxvJOLKG0RKLMr8gmVT2bNtOSJw==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:30:09 CET 2007',
+ updateDate: 'Wed Mar 14 15:30:09 CET 2007',
+ accessDate: 'Wed Mar 14 15:30:09 CET 2007'
+ },
+ '88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854': {
+ header: '####',
+ data: 'xI3WXddQLFtLVzxJaZWQaw8wAgSuXLjLnyoNXnFuLecTH0BzU36PatglVh2HK3LM8aDLzzbHILdlLNnJ9CY+YnhmGh8hswF9oKTgq0Wsesgdc20QhSMNFFjmMljY1LSXmcAYK04Q5mIzi6Pe/04DRdj+e4zbe5QI4vEBhp/ohEpxZnNqc4BoX6J0eVf6LA1pwrKWvxzMxorWsJrrr+mn3svdlF437n+MMr89k5sQJogufes2GZ9tTvVZ4247ITxXqxgAhwXtbuIs/A5UqqnNdsxlHfpLKG5KjxB6F0h7TtFA3gkZCve5UmAibBnoBCFaIVWQyVq+VO9iqDm3DeXsK2pepvgIvpSID8Poy+uwN7T95mivAsHG5p7MtgN9KwQzNW3Iu+BfO9FlPBMngSk8L29So2CIXe6lEsXSGEi5Yrgyo6hZi6IkGCXwIQ7TCEMnlQEGyKnnAVik',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:17:52 CEST 2007',
+ updateDate: 'Tue Apr 17 19:17:52 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:25 CET 2009'
+ },
+ '9588b523f39cdfc14efa1e15ea7716c2d8eac45d8efd7bfeb19d716f9df72d66': {
+ header: '####',
+ data: 'q6DKkxhgDFs1XkqOYf6dvojPF+yhJbniTLFpSOS+I1sum3EZIJfYxJXyi2Jx3KOVNBMILw1+vrSLe/fh5SSWj8ZBoeppkPPLjyRNdiUyd4IfcRM5OSv2YcTxCubKCH2kIMFAzY/29A6ZGPG+AN8/kxkEHc1fxKaNcj2Cs8qejNR8yK1iKT1Ut9VfEee+Eqy2Ohgdq8wL/xAD5mUzdqHeQl8BY16pXGIYncLxMzR+EJ8E5jJTuGv3O41UbO31lvBSfCt2pfz2MrtsuqNoI8LBHJkcR6t17Bj+rHZUniHlyxSW/1rQJ1NnwpPgUJ1fhfQJZM8Faoif+0bvWFY4xWs/tCCD7oEvf0xM0I3FfcJLbYX8M+wyO08t9BmGdEjnr3VUcuS9qKaJRpdpMP7aQf+vJvioeQDXdOJ6Ceo3BDFc6JdNta1Qc+agGzN2KPbIPrLDL+08hWl61yu3GQ==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:27:35 CET 2007',
+ updateDate: 'Wed Mar 14 15:27:35 CET 2007',
+ accessDate: 'Wed Mar 14 15:27:35 CET 2007'
+ },
+ 'e5b71df0d4d79a195c7ec3288dd7738069837a7c4da3bccc1ebc05d8e4f19d79': {
+ header: '####',
+ data: '1NvK9Y5r0Q880BfB1W5IqdOR77mmqQU0d1GL1XUeQT75R2EgYE9rK1X1jLygCXboPhxzegEe7TDhUsn5XcHN0LkXcLYz8gD/7+He2HiTFxoHd2oQbI3ceBxDJ7+5kWA6Aiqy42QSCuA+TWIQcDVthSyFU7nNdqNxeBYeXiI4jgwcH3xvm0+pBf1OYLtywjUK1JwntP6o68b1LMQJFinDG+sqRcm25ggaZyxDtoLh1IBdSpmXk0papRnyyTGNgsws78dLxnH0Iqxb7FhqYfgLDIvN3i7+IALI0lF0EuTS0hSPlr/1fTz1/6bVt++wI9GpUsrdafUJJMPerXoCK+gAP8EMneLq4f5487HIkwWh1qON6Hvpg+tB95NOSJpqE72VpVxN4+wTQWyDMhfjqXBuQ1wKvTsD/mUsdinU0Wb/YT/zIWBNZPdqur0rjOC+mrOtSdlYSCH89Jj2',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:15:09 CEST 2007',
+ updateDate: 'Tue Apr 17 19:15:09 CEST 2007',
+ accessDate: 'Tue Apr 17 19:17:01 CEST 2007'
+ }
+ }
+ },
+ '36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113': {
+ data: '6fhueIibbxKRA7Mtb9TPcWiUKajnikM3D7PbOROBkE39Vw9E/nG8KrtJlwwPQeOGCFhssO/KX3ymYehCR8rfaEL1f9pfdh5x69mSxKRlOmtEknWqUgPzcb1yPenRbQagERadh0LF4zu91M4WjXK9qynEHoxI/pBhwQb1IsnhwtXl4ELtajudv+2Hv3p75v4XOXFsGQMsHPY+Zw7dkFFA8EXhvuxjiGvnxCUkFwNICFRdHTEovkW3VSerLdrYo5lDgjY6ebr/g7wDGuu4RLfUK4+HpzFwZ0+aOrjpFq2ePg2xObvkkMNNjZ2PcR6Cue0sf+aNqzIHIlFPpY2Hmrob8+bwxocKA6aagBu7z5GiUmZNXGE/Vtr/WWBV2+xIJyzXZPet0MLmSnGiALjPJveeKnnFdDtA929ydcAb8efc0/snfU/uDoXDiO5SWEQ8DDNjj1bSo7VPTtvZyFormE1KjqimqSwaUJzbIS4CxPnoDezaBtQmlG4z8mc8jXq1HfPu7s9PUzcbG30gbF0ch2pDj4h47AhE0ZoeiV+VYZTaYateSifQXKBQKjPcuh9PQyDI0HVua3itbbwxXpRubEM4fbvlcd+7gu+Zq03slYICD07fP0I6XGrRHVTfYpDbEb4GJBvRIeZLwRTQzOeFbPLpBU9Lv3zXxfHfcHy9oK+giIxefPdY1ZR2ZFPKOO0xYJsTr0vmTuXeXzy56bKl+yP2lFst5l9QG8j2JcQEotDV1KQS6mbcLjfIpEnltu5fc2t10Q25Noh+F3kF+LcMIYsDjwanojYlOC93mZl01hmSJdimRTk9otjlRTyC7NWwiyy7fe5IyVi7ACNPZyeUYJUPtKWcPbT73Vtf8W3/+HdhmyYNyMQ9PDCBb9WKMon+qW2+ZVH5yv/KqMHRY1fflAfxpHNhrCkwqcAAGw+G/cetbvQjpkfVT2/u/uLupMsITN2Tgvr/8D2IMm3cyDBUCshrp0AfzARRygHFK4x/0uLfCtQSNjw6zMK8mn80R5aS5bZi5gRS8JBMZ4Q0iG4kBlLpIYtsXSBwl8faljjdl/4XvNNWWrdGJn2k0eM4cESlOFFk4s3Yu0Zspo17nKAHINjHAiP3VlhuKSnk5C9hMU5i3vZO8anQmx9UEwUgQVm22azCjyNtUl6jVPYSNsal7A==',
+ version: '0.3',
+ creationDate: 'Wed Mar 14 18:39:35 CET 2007',
+ updateDate: 'Mon Oct 27 09:16:14 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:35 CET 2009',
+ currentVersion: 'a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463',
+ versions: {
+ '381201fd3b67549bd6630841e8902be1499f3ff0c3514dd464ad9679f22f3561': {
+ header: '####',
+ data: 'DgjIW4YcJAYnckuEUzBFkfEC841LuanGopPgp+YkyMn3xuzdpGq/ObLFMVQaeAuyErh1B0REHPbq0E/SRUZbeXLXWN720GU4GXvY5bnen2h7pHvl/H4yz+kvyKh3EHJmmBjuz8s0kclFJQB48lter+G93TEmUaFke9c9m0IkKlgzwZ/PQKZyIyfZA09KFaozdSxdFRbswZj2Vq8Df2PQsKLapZWX1wYQ3lXOcyvNdTULy9MCXwPwX6te6hTLWxQOiSPsvB8LItlhQUsSbrJcJEvWPlBupPu5SeI25zDnqKDETPep63Ks2GWf45nXZzYYmQMzL0l2cenYFxlE18TcOd1Ms24TQ/iDKMhi60zZoo13qjVT5AKZ80KNu46t08qbACxjv/LeK2aM5TNycTFixGskPywpnb6MCo8ibRe5rs1WcTJRMD04sNoiuriivO2fiyo4rxjfdyfueMlOz+Zeztk=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 18:39:55 CET 2007',
+ updateDate: 'Wed Mar 14 18:39:55 CET 2007',
+ accessDate: 'Mon Oct 27 09:07:56 CET 2008'
+ },
+ '99dc86ebeb20a3db0c5393d6d94bc1150187b04316a876970dbbcf517b55d6f2': {
+ header: '####',
+ data: 'AJwqCWNKC9z8DC4TUI0hWnqHvQ40Y/x+jXylnVAkyO2QYQcqg51odLFSfgP0GiGEGPYwDc+kUxRrfO+ITgTNm+hHi2iIWkP/ljAC+AQ56MAEKsU/USTbvl6ShZ0XTAdRpwI/oqqOhYThVs6jTm/J8+lx4tWoMtNj835py88c/9eW26pLQubr7VysLSWuIMi+iDp7zXZZz/0gxGKDe5xNq4MGIYw8/OK1iJCOsjBdrRygLlS/Mz9sRlKkwdrDsohtRG0F/NdsIoaU4FttGs/rY91SCedvHy6ovh0zXhxOO44O6MiMbP085D1jCjWJn9S1RBxjxc368MGfMJeZja87nuvgSnLS2tGDL6zFtVJMNcH/7GqQPXZv/sNEykDNWpypchCnwYUJxvBVb45FcUzagPm+SSiekWK1hrEntZkZuEhQZp7Ud9RcENpa5h7wXUJSV1vPl8xBylx9HWmxez7D9OYRqbOlCRAEDqup4ahNhYB9',
+ version: '0.3',
+ creationDate: 'Mon Oct 27 09:09:11 CET 2008',
+ updateDate: 'Mon Oct 27 09:09:11 CET 2008',
+ accessDate: 'Mon Oct 27 09:15:58 CET 2008'
+ },
+ '9fbfcd3e7fe30d549a813f0e6c1be58ed45c3ae7305d7367bffefa097b424ee6': {
+ header: '####',
+ data: 'nZ+Lc5LWWLxnPvUrRrHhxG35PHq7GMbVENHfV1oS0Qw7/63NecssNoEbiOwFVMjAshvfUK7IjnzyvfQhNtFRbj2yzHOTWCd0eJ0O0MmvGzjpUntSDu9/G8RFeEu9jDKugwi/NhOa5legjT9pcsEAqR4s4NN/Ac6juQb6D/Z6Wd6wO0JQhT5/QPk1KllDpDeo2i/GPUKvEi/dXpik0KQcVLVylU82rf6hwEgvRQi+j0O5hnFW1E4ttxClrnPBEBv60jkNwcIpD0r+rvomDe8+398xUuB4DVDJoM+WUYfu6Sm3qI0yBfET+tJvjn8WsHhKTgZpOc2BXC7EdF99nNEg6kV5pSxV6AUA1XUz5kW+YfcSzAXzUH74OqroC0SucHe4+BtRKnbJy4h5vRfjTD+FJaj1Va02cxSR55tQhxm/k67z0QeyB98dnU1l/pPHwBlIWa1eR74gswNSeQ2jrzu5JeQ=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 18:39:35 CET 2007',
+ updateDate: 'Wed Mar 14 18:39:35 CET 2007',
+ accessDate: 'Wed Mar 14 18:39:35 CET 2007'
+ },
+ 'a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463': {
+ header: '####',
+ data: 'm3yhZu81UAjCY6U2Knrgg8mK+LX35Y/iZgIEm8MuRDAlg6UUz9Z1Anu63COFV08YyYQRuBzTgR9YQ8wrUD1S9FG2ZmtCDemqvd+5OUMgdn4sK7G3CuzAc5osOa5neU2m4y19WuobkGnhO78ko7pVVjO42q0DeMT92uFL6KE/2UCkWlq5SdFyS5qXEJEWs2IO5C8nVpdlO/eZ36Pl2+v+afl3QQMTthCVIUR4/zVP2ajbO48yjDXhYxzskFjtXMYLApEn0wO0dcifcsYhPkozz6Locrt/R6IZXnfZfuW5XXHbqhutoJFPK6L6t0Ib3B2r1TNkPaMsVs2g5V1g3ENRd0IlbG/uBk2o5tgeu6gOYlA1scEiL+/ad9ZxiqYB2ENCGZ8DXA4VNMnzxVPbO96OIUCb9suV0fldGOg=',
+ version: '0.3',
+ creationDate: 'Mon Oct 27 09:16:14 CET 2008',
+ updateDate: 'Mon Oct 27 09:16:14 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:35 CET 2009'
+ }
+ }
+ },
+ '507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a': {
+ data: 'ncSFmp/+n1pYUKi2fwhMCevSwFYO5irdcpOlSxC6YPOKYavK4iUbtBsilYWd0hpvUHW2ItaDwiyNFxs2Lwegex6dawKrpMYkPBcaZQDa746yACGgCkhz4MAGnUn5HCmz6xhpCVXMMKe3w2nEOjRB+pOMOeJt2n7aw0hCJ9tQ9JTFNrZOxeXrqoexrd210Rmr9FnKhLIvhNTN1/vXRqP0ys10omJ2mowzF4KoEVmz3ET6pS2d7tGjt9M/OYsH/ETWWc92doF5PO84g5/3HePaCo8NCqq4ul7AWJEbdnkxxmd7urJzIscPQPcoLxL7GfG5LhHTFyHlfFz9dNlccfA+OPftjyfjXTjLYZzbxxbi/nAB9Esqj5AoHfqaJM1ZOrZ+qAvm8Am3+HAXrqtiybDITrCLmGH9ukWDsx7R3lYTlvjArwORBUH+4w4/uYGscVm9kOYj/Rmz/ZMH9JibYFcPcOnr3rWXPFUL/XsXTrm9lzOvPyEYJmkENzd54AHC4Lr5vHpeuipWFLiJOrtn2WcgDG/DdLaYGKsmISXj74XDtP6Ee5lKOtbwwcmVNrl11UCQBEFHNybhXvpil5laKddOauLJDKtaDL/mKYPbr5YSk7HPCzRyE7HM2dC1MpBHuJ8g+hDkgU3wQcxYduKLRpuC0uOqrODigGWhVrdiKdZanlWUq9EkE3eH+E2A/CA8mHl7UNaH89XSvgV7uZyOmK7iZ+1kd9OzhBLQdJnK9qqP467Y14KsTt1E1+tqlqVAuK79QMnllaR0e3ztBRAQsyf5SD0KuSGXWz+z9/RjbhamW1s0UFRGh3voQMypU5RcYfYUA5KVg0BiVKFaiZBZKLo213hKbrgE2KoqVDEmIBFmwsu/S3EDzUY22tTB+o8ZKQiYesAUafGtnvsOLa+h6weF1ZvQVBerbD3fhb2o+d4ZyPkoRAsop+5it0QxsWuZL+J2oWybaikxIP/1ZM2ow4QZLaAVqihyHxqhF5UxZ9zrWxfp34BIPzzU9esSifrD0gXZ3mwutaCukZoijnGODJZtFOy9Rl1gyS1IbpyRbwz5O/YRl4BsD2aOk4InajT13Sa1BLPblQcrau13aeg/IzQhcUJ6n7enkrqiJFTP8N1aFAuYv8ilu0V2ymIuCLUtc4cbo7KyA+gnHhZA+DjjrhG/izOyWtQY/WtDsqvo/6ILwFk37JDjHfkchPEVcdl9qT7goG/4zTGX+lx8UTKKZJjJhLjA',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:01:24 CET 2007',
+ updateDate: 'Wed Mar 14 16:01:24 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:11 CET 2009',
+ currentVersion: '395eb58606138588dcd7e659065db48775610cc1e90cbd03368c063e02e55c8b',
+ versions: {
+ '395eb58606138588dcd7e659065db48775610cc1e90cbd03368c063e02e55c8b': {
+ header: '####',
+ data: 'sgq3FGcsnlbhTLetMa3TQQE6uFZv/JL6Awha1066IimKoAtQGbAr6E1+mxRmvJle91sL7oRfi6suvDanYHfAI+rrG6qCOtESn70ssS+aGFyO3XwFgypzG/Qa34bjxJ16Aqd93H8IdhzdtOxs2Qmou3CjyxbT7Cq+YW/fAo1WfctL4yE4GBNPWC5lfebxSmINlBY+zTjhv9Pf2aK6vL4p3obHl+zhz0YdKAMBwbDyCLa9tYvhGBnq/W6lFUsyZCPVJJP3bQCQww0TNCcLJLm+SYVSiC0NwCQJq+yNqDkWTvv41p5EDB06eOQ2VqC7l4i/JLE/ql9h9Z++gck74/Qs3ppdVdG7sTzWyPya4v3RW2OTc1awFRZipAX5Zd7I97dyw6Yym4y+/9UT8z8iMDYykQ4+QnOhksDIE9a8q6agDF/rbZ/BCRcMWbFylGTdudk26mu0GdPiuLDu',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:01:24 CET 2007',
+ updateDate: 'Wed Mar 14 16:01:24 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:11 CET 2009'
+ }
+ }
+ },
+ '5cdac63b317f3942da38f3a3de3b7f0e5d6678200951c6216230295550f63fb4': {
+ data: 'Xs+z3VzIqsWa7dGBqepwq75lTsx3yemNhTdRYYDDc3Kzpycyp961SgnKXHjE51266mfmj85ASFi/FKCOwk17lbD5UT3iawtc3TdgrQ18vBhBsmOA2F4JAa4yC58bTaXbyld3c4izDp7i9+iyRaFN52NWJznN82SXuRtPdWRtAxXB1V5Tyg==',
+ version: '0.3',
+ creationDate: 'Mon Jan 05 17:45:25 CET 2009',
+ updateDate: 'Mon Jan 05 17:45:25 CET 2009',
+ accessDate: 'Mon Jan 19 16:10:21 CET 2009',
+ currentVersion: '00b3a4cd7400cfc1e7f7b369bdc3dcdaa50d6020233e131b30d755c89249ea9d',
+ versions: {
+ '00b3a4cd7400cfc1e7f7b369bdc3dcdaa50d6020233e131b30d755c89249ea9d': {
+ header: '####',
+ data: 'uGAV9pZTjrTwBy24TX/OUQwGmgzTnXv1JBIxdGkeoLCUhP9tAjbpUVylrUI5+VRrFYkXYyZ0o2HEgKrun2f3PODTxlmAbfkUldOV5tyV/EUxN0vYSBtgsMpqQm3bOKRIAo/uzrhSE3iwMjvKOTH2jUrkmX6hmqhXWZfa4X231GovrnOjek8c7t+LUBmmIjXEr2GSc/UbBoFnni+Q7ZArwtU68xoeCjLame1e8Y9wvCO8gIfAzXQAHsDgzn1MVeiWIqiCBTs8YKCO1yaxZpkzXV0yWzX+bHyXlKWwAk7Fu9w0CuaRULZmRCQhv+MMDw8DEXciTm0R5dRiVmSCFBy8cL9qlSeSX0GlnKl8E4/TSqvhMJblwJJsgmGSZ9cEt2u0E08tHxKuoeaaT1rpAOoiqx+z7BdhqjWOQZOGM4gR3EwqvOQoNYFUaXjAdmiUzW+e+TgE1IBQ8udRFl/D2zCcqFO90Hgc7hHsTDI3aGYvi6bHADu8hFpmZtJAjOMv1JgCX4Hm4n+SsbHd0DIfkEUMeGlVO47lcGWBZNRRm7xl8luZ4sZn',
+ version: '0.3',
+ creationDate: 'Mon Jan 05 17:45:25 CET 2009',
+ updateDate: 'Mon Jan 05 17:45:25 CET 2009',
+ accessDate: 'Mon Jan 19 16:10:21 CET 2009'
+ }
+ }
+ },
+ '6026370f3db3860d2c46a08e389a7e906dc14f98c8444b21be9a7e9f405a2728': {
+ data: '3oUg1TD+Lu4ou06j/MddOTXDqRM+qSKD+6Iuzia1Hop1w7v/BXidqeoKJZQI2VY9oO9B70Nr3B3wDROF+ycy6Rq+FM/xqUGHKXn1lAaSc6Wgj6TLQ6eRF6YZKSPqTj7TDWyw/2pEWk4HjcT8drTrCaC02tzAXMhYWlYPQPW4fUdq4hawoHIdopUN3vafQuFjY47OhqXKav3bNao=',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 16:36:08 CEST 2007',
+ updateDate: 'Tue Apr 17 16:36:08 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:33 CET 2009',
+ currentVersion: 'bf8d46022179715d9d27e0a256b56b50828a771c3c6b46fe36fb2982dcb3b4cc',
+ versions: {
+ 'bf8d46022179715d9d27e0a256b56b50828a771c3c6b46fe36fb2982dcb3b4cc': {
+ header: '####',
+ data: 'fehYRMkg/wFj2t/aWu7szbXwrCyCDpjQN4UNck4/OiDlth70a2ve6ow5lAi2jgdlV9WiFrPejfa8dD0Z1g19jx+BBsuUYnBEKD0K+NapdJBBeI0We2nj9nYIij2dfZVx7cuvhy8sN6+DdylUQLsFHbga+Gi5hWcMuULT4GOAIy2WanSQL1RSR4ruA6zm/t+VVboEkkm7PPT+w3LuRl3wRaD4a8ZwYiSV/SzgWooFrh2S3YOUeshdaGCiYpTbXscsOxsCxc11i6wQGBqYSjksmtZDvEegdQdzCmxvq4jaVWJElYYS3av612nD5K/w7Zei6RccBiODBPATjrIczYg7HwmQxIM/6QI9/LQn0LP0yqRVUUtfzaODf0uWNpFzml9l/1lwXuBJyQFBp7H7Th46ekw9yEuPD00oZ+eXvKwbwfUU0JshT4hnEBtIjM8fH974PU0y95f0yLAJ1+M6DVXCxGsBix2aKJx9fuZP4KGpaXg6qCb/6327rph7MGomcrGPIiDjYwD/NTMdGluc55OZfGXtOZUaJCUM6nihqDwU7Ly1ZzYorgcvkX/t/0RNcOkFzGYNByp7mdcotyiHqCDKspqz9mEXAd7Noz3HO5GFpPqbRo7htDigGU1f7dvgbbfRoTz17Bt9Mw==',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 16:36:08 CEST 2007',
+ updateDate: 'Tue Apr 17 16:36:08 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:33 CET 2009'
+ }
+ }
+ },
+ '6c25be8e145efb26a1abd59590522f73fb2e3dbc139af2217074d9e2ba92c16a': {
+ data: 'b2mcYUi59l434kGl7ij6dBu3063UL1dToMIu3Zsa9RV9RzeLKnezJhLKunqoAm7KwiJeqDo/REexHI1cshGYtHasVXXuyJfMx1grH7yhoWnkSRF4Sax6w5E5wnGkEpGJHOxXJ9rOjWHZ7yqCUUCB/dqLw4FwPOtRb/ynkBEYztEJA6EKGJuz0vrrTOsT8HMXtj/w6MEZ7qI3fPs=',
+ version: '0.2',
+ creationDate: 'Mon Apr 02 19:12:44 CEST 2007',
+ updateDate: 'Mon Apr 02 19:12:44 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:08 CET 2009',
+ currentVersion: '2f60193c0fc0e3f2f178955e1c68759675acdf691bcb918cfad329a5a97cfaf3',
+ versions: {
+ '2f60193c0fc0e3f2f178955e1c68759675acdf691bcb918cfad329a5a97cfaf3': {
+ header: '####',
+ data: 'pZEWSdYIkrX8/r6OYmO0GEuKG9baUgn40Bmw7hXZBd/kfWuRjWsL4/pc5F5Ojrx+N0dxmQn5ZqKAzOOri29Rm4ruxnCbyK+oDsCDyMSnWy/VJcvystnDKzKmBRQVAOSEJtzEb3OtGzvqm0PQ1Dhx1YUAx7L6KlXysmG9h9+MjOcErRL9/1x1LZ33ytR+zK4LvTAb7gN5/9QgwysFyCkNP8bG4nyCzPMiUrBnP0odMTUvDkJDlY0Oia6VjGW6oNxnGIgA5fDraRrW4JH2oejQcrL7+X+jpCp05g==',
+ version: '0.2',
+ creationDate: 'Mon Apr 02 19:12:44 CEST 2007',
+ updateDate: 'Mon Apr 02 19:12:44 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:08 CET 2009'
+ }
+ }
+ },
+ '6d45c2fec275b7482d41c76b20507100cfb6ab49922b876f9dd3040d361f4a18': {
+ data: 'jzjPgxRHApIJA/6hiY4XCtb5+eKzHlOeoiGwfVDvip95zU7ThHbdmxOUomeyCOZ3S1SGPT4lHvqZgfVG5m5RvH3JaAIa8EY1ZElRohoX3rETVPJzI/Ov5Rp3lZjtWlu5meNrcJz811HBHrtBuJxAmSjYcY3CCal+oC2zcK2fLZR/iOQ+69ONVFhdV9KiOqzNf8IisIa1sIgFopqsdHXiZ9oLe0a7Y56q+OplyU3A+TmxKLI+Qq+WkjvdMzZDDqzYH47me5niugYPdkQwN6WQUE0sK9QPs0uU4TOwqCwN9nPH/DoQ6oXWAu2+R4iCyt6ZjLNkClbps4s8Cwz6wfFQ+4T8bcldjveJenmrYwiUzxSd/4xa34yFVXVw2OD0n8yZhtvNFvfoPy+X9z+Y4f5HlM0qzL9zYya4KwWjFQzhOxFjni9JyGM2PJ1BctB+q1J+CHuhlVjUF0Y5zIS3zFTET8jjDGBZDWB+Ao9E8fUD+0OJJUdKJ4kUfn4ZUZUG20eLBjmJqWBGYZX7UFaPv8ksahoK26Ol6FnBE4KpPStQeDgXZDzGsiLlEsxHJLUFkNtAUXozw38bWWQvi2VIFtkw/ZViPIenmSNT14kUVWdrlKQC8x0+wECeh5ffv0i8UUw3v8QC2ZE7GV0OMl4ySlRCuDCfZ53YFoB3HIR1hSZMhHlHJDPUz8JOuXdHcUQaJeNrfWoC2KkKb0ZecBj9iXooDh9yGi0g7TS7eyhlz1LHpzEWB0CPsZqhNGMxmfFWur7v2hrYzoHQOeB19ZSmWzfUwd4dRpqMp0x1lZaF97jr+yyYhnuQvuO6lru15Pg6FqjzhsNiLtaqtyoaMiHZ9veZs04qZZ9Fn3U7HeJzjZSAssdLnvopXi363cXm9JqoClyV2OemnVoRwOZN2gdSZxGeOefKR7U+lrBAbJwViMnmT0Nd7AC8C1k34iEt8HJmpztXeOgX5CQpwUPENMCUPsookFbIh7e4aByllEQy0gBbxUz8JMIWYyw98hdASnZ4s8bQfSmiMM8Iw3YxCexKB62LYYJn1UY51NSnwCtwRep+NhaKDk2d6SLh9owxnFbjhw22RriPd5f1InJycjtpvMzWLavl/hDsjjj1kWpnCUBTM46LbERmjz+s4x7fSf2FhhguBT36elz69ivXoiXI+7p0E8f8HsSwm8sgN/AA5m1svsXsdWeZFUiWtAwLg0tI8YNHlazbvFCXfIC6Uhq9eDv04iqdZ3rn2c1rwSx336A7ySTBFdxOCJ46F7ShIhNKm2N+5Qf0K5B2L882fbwqiLsa64+X9aKvufKTsd11vyf19Zivg/Ze0FWoGC8D63Nh91k6Hu32RT+uAtJIjQIZxu9yXJM9lMaRA8ieER+ghrLHaGQqF9J3WmueER3UzU1midvTynOV6g==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:09:05 CET 2007',
+ updateDate: 'Wed Mar 14 19:09:05 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:15 CET 2009',
+ currentVersion: 'e85f085a8ed42d2def7adc796b66a2e0a4c3c88d9f3e785eb12a6f5619d945c5',
+ versions: {
+ 'e85f085a8ed42d2def7adc796b66a2e0a4c3c88d9f3e785eb12a6f5619d945c5': {
+ header: '####',
+ data: 'BbXNAy0GcKKyDPiwhP1Jk9mIi3uXMHQdhuxpDvoR2C3YITOUBpurxGhhvmCg+a9pS+fKJdZPxL2mPbJj6GfWTEsm7K/ECEjrVkSTHi6PTUUgYVbCumq9EHjUspos+7VrifZry3c73+qAvIKamvUlNB86TchMpOXVJIyx8UgRX+bdhrxk9ZCEVOiLCG1zGPX8IzmcxPmBRZFlHYqE4ibhl/CLEzWXZBYCofTusClhOh7YM/jBgvDt64W7aIN2y2KiKwmFySkFZdnOvbAb34tXVimwqjqWPvPwd6MujQeX1bmaDD7Y0kXac8CJxqasIezLo2WqzLUbEXdIHGilkaPT2ZKpKhKkpHJHFrV2lVuQJVqwPUr0Gf9qMKgVnsyU8kUfq9ox+fhH70+v7BQSjT7bxxDLs0UesQeL7G4SqvNet5hPI4GQEpOY8p5MUFReIBTRm72NQEU=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:09:05 CET 2007',
+ updateDate: 'Wed Mar 14 19:09:05 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:15 CET 2009'
+ }
+ }
+ },
+ '7bb69b6366a8012f181c01e368ba18d4f7a82bcabb4959189736ad124c4bbfbb': {
+ data: 'wYPZIt0UHiNVefNwtGc7z7Lu3YoQrXdfKmWqilZp8yeIrNfSLB9p60DLMrL3GDq/CsvDYkGAZgj1C/6NVnzVsXsJKq7NDZn1UPOGt+hCnw3lEVbD7zHkoMM4VgFDn1sZdjLe8wdpIFfdlQESTipT3GVXv3swG2qX2O2yuwtlopR8yZQTLg==',
+ version: '0.3',
+ creationDate: 'Mon Jan 05 17:44:30 CET 2009',
+ updateDate: 'Mon Jan 05 17:44:30 CET 2009',
+ accessDate: 'Mon Jan 19 16:10:18 CET 2009',
+ currentVersion: '23f5fb503e54c0cafe3d4944ddaf40bc74fab8b5d96e2bbddf693b1afb225e5b',
+ versions: {
+ '23f5fb503e54c0cafe3d4944ddaf40bc74fab8b5d96e2bbddf693b1afb225e5b': {
+ header: '####',
+ data: 'IpYj+7t3DhSVD8r9PkLbF5xpGrHhg8omY014P1vkT2KkGDEUj+ekQAbQ1g66Z7oNhRDpjS1/dcDjzH0IIQLjGuQ0oRfL0xZefVTx3N88ZLE39m3cJz10K2xyg3xp06jFBmdNJuCkgRhMzeUXeEJujw4lS2kv7cO04Uh2Maui6jDR7E498rgePY3L32vG1S66li/xU1vPjNn06aFTqSYxUL17/mlJNbgp3XWjGC+l0dXLLfXy1wOm+/I3zp2caTs+a2zDUZ15s+3XeaAWpBH7QCaQsvsQmoBqPbMvkjOQwW3taDvV7Hvkh+qTjCEcLjRFwhZkMNn3N2ewcLWQa2aVIjxt6Z0F4s/1URztWlKVzCfto8RmrLajYRn3ggG12kX2xDJFjNPNfs/7A3tMn+FqXQCCNG5GI06JZ32aQfpnjtmXScUuEs8UeFgsNeYclQhcm5R0sUwISK+D345B8859w+4+9OTY38NgYQQ9o/tmpCjWj1tLYLx/m/GcR2em7iyDpBdcnWUb+tK6Ah89qvXriHwPLSNzhOH2wxmi7nXTRQWMv7g2',
+ version: '0.3',
+ creationDate: 'Mon Jan 05 17:44:30 CET 2009',
+ updateDate: 'Mon Jan 05 17:44:30 CET 2009',
+ accessDate: 'Mon Jan 19 16:10:18 CET 2009'
+ }
+ }
+ },
+ '8b18e8593b5bc2f7ea39a5fab222047034ef2f380fee05be0fa6e1c0972fea39': {
+ data: 'pOMTY3PnUAbwMLDEYNJCMzp4iIA42YWr6gqoomg+P40e7LFUtbt/RQRelQwNIztyUSVLl0rilkZZkBUVvxrtTqvibKITCjJQGQIzvcb+Yl4mNosl2Rpp0xxMU03f1+G7eGbuCc5hJXYVAglhEYplaAPzHbRWXMY8iZXZPBuLVf5PN+rdpgAfkGeZ7Uf9RsQ9p/EglrWXYnTwXi3saUfzIjfvSHm5C+dXTY3FHpIc1YkjFrdVgMkhYQGV60JtZcwFtCEL2NpVljAbRgHoIXTOkzUvep4vxrtfBBWWMuAWEI06432gtnH6IQbrR6jOpwuMt7k/09qy/fARPHs3r4qTJ9r2uqWHJ7tjJw+IChQPC+3l5HcPpFURiw8LGAN1NyY1hUrF6N84RSn7AKS0bLa5qN++5lcjjxn/k8+JqmeUqN1/SYIbGwNnJeZ0vA8yvOxnD20iVADX5kOVqJDwXRPLaF6Oz9KkbOrmANCh+PmGw1i6PduB+FgAU4HViYCw5IGOUZ30Pm1NJofqfbhXvgzn7ey2+kUIAwDyOUpJ9fW+9jW/JU4rcawmzwBYN2V8apOoyc3wQJICm2984wIfVBpygCOZM0QDyVgNo57qKtYH3yMDQSkKvpEUmuhklMYhcV+4X5ggdqx7lYXO9IMDnFf2ZDiZyieTlOlRv/nNVecUB177Xpnq2e+X/ik2rCQWVrIymiV6ltr1DEv0krXKfvXGG/FMZHUmo3m+B5bG4xVhmt0GnHseqvY2Vrl9NksLgq3hTDOGSGIy5Nv8kfrd8B4/6Tavh0SumiyXnrTXyYXzCK9E7IqO/0KAln63VkcHsbOtS8mj1drN0YQ2KKaeIW+Yr3Gm0pbcODsgA6aFfz1itZVeovBqUklhXS+/Es8J8xOSvvSyD/TmlFjuErHa+wwNQvftosfwk9ZTt0eIJS5aLHdU2QsCjdfSy0DEPkk2siGhBX5ZhRzqyIAyXApSmy+e7PIqn/dDR51+D1ZHwoTQyTrd+F08jBWZgU/OvS8MRxNZSxQwsi7bcWZG+w0utrIDB8eSOMVBXI5XBeJb4h5Bzut18C1shGHeGkSJp04=',
+ version: '0.2',
+ creationDate: 'Tue May 01 01:10:17 CEST 2007',
+ updateDate: 'Tue May 01 01:13:27 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:02 CET 2009',
+ currentVersion: 'd175358ea0b9d32c23e4bceff2020eae9a8459466abc18d4399d988e733fc0f8',
+ versions: {
+ '8a032b53f7356e2d8b28665211abbe2cf1c79fd8eee4752e83cebdced1c19911': {
+ header: '####',
+ data: 'OXpNHHSkdsaD91hw2LER+9XKpf8+bh/O+OcLSgG/gAx228UpifOCD4HTAOs0C7IJ5zhAq1L9NjCGb1QWWTFErYEtDEBRBV4kogscP9HWPxYyZHxjwPI0wE7Ri2eD4Rma76Utb+xVnXWuT+vNb8eRUCK8Ur1rlhYafS0uzAYvVqHDNfZaICksxeVQojil/kSPZDMu8ASz5pMNFNCF4SlwDKPRrJJDbNZ62A3px59YJtsla91DGVyOLhb7VNRxEwnXyxENfP78yA6OjvQDc2KhKFUpHbZws54IolLK1I1mY/Z8BiDXPSnOa694Q1eZxy1Kx/jLINZUIPgGg1++YWITx213awOISdf7Oy0/dUpu10Vr1hgAqCVlDp0IuGK01CswRzEdLVpUk1DaGHuin1rryZx9vThUkEJgQQc3ivr8',
+ version: '0.2',
+ creationDate: 'Tue May 01 01:10:17 CEST 2007',
+ updateDate: 'Tue May 01 01:10:17 CEST 2007',
+ accessDate: 'Tue May 01 01:10:17 CEST 2007'
+ },
+ 'd175358ea0b9d32c23e4bceff2020eae9a8459466abc18d4399d988e733fc0f8': {
+ header: '####',
+ data: 'tvSUu+NPKHkwt/ZLXdLGdDm4jSxTEtJfsecdpjJ9UGN3Y2EBCmijU5i7q+hMfNDqBJ4/m5Ayju4zYDAKGp2pt8l1TFoDurITdFcV12jL8j3dc4TTD//uC6OtowRN+altgC1Xc0LsSvEPabjAlwfVC5xqirfm5t2mVmnFZ/GALkGLGxRJRduylT6goPwfunkVGwUdqMa3md+9mwYn2gm7CyC0lpcKX8AZ3B4Oa656yRa9m3Wjgb007TtorLIpZO2MzVwxcHBqqy7YpN+zpmZz6Md9VK3L4F724tuXXWnDeVzGxBO7aZVr62hwPMXM6ibCjUScsaS4f0chivA/tBJoyx7OqKhBxREGeGjpHTeLxyHcekbwXhXyeqxBuwG93yGKutUhGLVYcXwe8/+xSeaBGj/j2RWutKbNKG2yQyNPGj2cxJWsR4YfOQJTSOSWT3K6Mmf+r6hLhIo=',
+ version: '0.2',
+ creationDate: 'Tue May 01 01:13:27 CEST 2007',
+ updateDate: 'Tue May 01 01:13:27 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:02 CET 2009'
+ }
+ }
+ },
+ '9dcd2a8a0fcb7e57d234dc4fea347f020a6a01793e40cf56a0d22379e590e291': {
+ data: 'xXZUJjgxn62OqnzAvScHJNo4WjYEFp1vQ4ueBe1sk8dH4pXZUKV6m9c1d2cLUgBj4rUNP5cC66GiFHV7G5BDZGLrfrxUlYU6BWvzAz4eG463pRDhHXQgPrhlIGDlK6ovaIsjwaifvHaEfLREoXvLFluqu406KG58guhtWdIFK0rLypyRo8uyltGbTz8wZdu8atY/JYQnb8NaAf4=',
+ version: '0.2',
+ creationDate: 'Wed Mar 21 16:29:06 CET 2007',
+ updateDate: 'Wed Mar 21 16:29:06 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:01 CET 2009',
+ currentVersion: '5da9ecc65677d03f4f31c0f12f000caa4930394a99af8187c05e74b99c851aa7',
+ versions: {
+ '5da9ecc65677d03f4f31c0f12f000caa4930394a99af8187c05e74b99c851aa7': {
+ header: '####',
+ data: '7wg/yWfSasUjJKV/5ygFfteazVSdqEJ8xGAqtS7m/W2q3rOR+2fr99Il2TzxXCnOe5zV+iir2tOqPQt6BCGbVf0NVwZtvfO/lvfMc7DIwyWuhZ0sS44LBTD9VY9fruuIegktVHSNBoJTCIfAHN/ut1iB80+51An+TdpYT3SGAVM4RdenQ9IdvDOnQo2KE0E7BzHekga800VJrbqI8aJEtmm5mOjte2xHYSPFDCtwURQclwxbNv32hAY/IUkaejqg93WGIzHIIK0+SSDzQwHYQo4yzVGCKKy75eghpvGyg1zbzlv372bND+OuA3laocARFfe4rRd5I5nh8vmSJ+vybh3EIJJzloD+qWk6hsEagkYI0RYu9I2uOfA8drmZ02GV5/ySDsBHX7uhaTPGx4J22rNJoj8s1L7UoaohUHFvUerBvQTir2LPbzqT+B07wZOU0ibtHlaN5C2XMKRxfvGATeR+2J3l7WisCIoRdpQcPFHA7nlTTShBiCVstLxolvd7MMzPOilsi3ecxXLQSeWara4JILqXQCJ4yLbQCMnSpIrZ3TXbwbPZ8fjKjogHNUaBPnmd1hWoc7IVvK9RSFBEdCh9U/hbyPMCiSjdsUCTclmhFmhiVIlB73IyWixmLwHSWSl/ckMxcUK6rB0IPuWcT8iJkxfqOziFhMvC/cNydpN5Nj4WX21c/1M7lVlX10FRx6NIYH5szEXULmLnkfEwr35G9mKJwR2pgZ272UiW2cH64/+M+Kh7XnPbQKxTwVR3FOhR/qdSHeA8MTc9FDslFaTT6YSeJEPoQiLg4c4UdbB7w5nA0o4qg82hiiJbTfT2zFHZeeWOpVO1z4V8SidJrQkh8aL1/Is7KaDVNfL+Lx73gfO6tdSviCJJhD29iTgn+MW4MlGwpeLKpvq+LkXNXi/CVjIa1VqtR/Flk2BqwT2hccgw6E1ML+QdW1n3TvTtdLIvSGheOM5kLdnF76e8Nj0kHDFbnxQMlO7lutngaNBRAvhvSLccT76TMG4OTxNZk5aOre6AIOuUfrFD3KDeOqWie5zpkvTOd/JK/JDFYgbYQh8AqhwJ7VWUH49vfd6AqfwHwdNWymI05F6/0Co4xoQ6qN+iYNConUXz78Uo7AraJuBDQ3a24+wL2mLjnc8jUDFUaAKM6gZUv9+bx1vk6zVdaZcuqgZc6dcyo5Oy8lmbJ/SmRb8BF/Q2nW3SDv77R+p0bKPLmjcytczlMNct58Q1LoiLnGck5v0wByQ0XIMd',
+ version: '0.2',
+ creationDate: 'Wed Mar 21 16:29:06 CET 2007',
+ updateDate: 'Wed Mar 21 16:29:06 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:01 CET 2009'
+ }
+ }
+ },
+ 'c0ce9130ca365bb02418d4305ea1d29e49c3f0e96d44b9d3cb6b4b6843d25065': {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Thu Feb 12 12:45:43 CET 2009',
+ updateDate: 'Thu Feb 12 12:54:37 CET 2009',
+ accessDate: 'Thu Feb 12 12:54:37 CET 2009',
+ currentVersion: '36a2e190796c4c8bf2340fe6d7f1d032b4ca40eaf42b9ba537e1dd06a638b26a',
+ versions: {
+ '36a2e190796c4c8bf2340fe6d7f1d032b4ca40eaf42b9ba537e1dd06a638b26a': {
+ header: '####',
+ data: '/mnLRePyLGwPaZ+EkbTRHdE4jz4gY99jnHcIp7AeMfcktEpPmUVNWLwGSJUH3ANP/cO1znxACVQPzC+g8IVIK0muJ/lZ4Iw+HkpsfPtBjPZc+bfhsY5Mud00YBsImleIMlbbJGv3l79eSPcea49OwG30xro6b6I0KK3BmSgr+BG2AmBrKVlFRTPFCHRbO+hG/LgW/xqYgwd9f1dnbeVYCm5lA2zdAnwmMwlUIi/J73MbnsSO0Qg858iF1SPQ2Ne9Q8SCyKKEZwBY/YeSgDzoO76Wvqbzk8uPdmZldaF4zql3ffBeb9ZS9KIyyk2vJcLk7c3DUc65vaT+w25+2GSpEXD4YIV6VSr6Brz4w4gzcDMeLve0U6oruqWijz3CDe40yhd4mMt6wTVs4xo0KHc6yKjTuC1ZUQwZvuCiS8T5czaGpc0+fLyfuE+pVBxTlpOjkoZqzk6NsH5lcKMzB1TCscJ8fbOdtJso7DRUvijIE5+ayY9IktZhMeHsk2zurKV95A==',
+ version: '0.3',
+ creationDate: 'Thu Feb 12 12:54:37 CET 2009',
+ updateDate: 'Thu Feb 12 12:54:37 CET 2009',
+ accessDate: 'Thu Feb 12 12:54:37 CET 2009'
+ },
+ '4ebfe3bec6d419d61eb68a1f25407824e404e3439c23fccde1ac19225b40cb06': {
+ header: '####',
+ data: '6VvjRN9LKi7tt/HsgqmU0bUdZQNVjVAYNLdCrfKdRJCx3W/GZHHR/AQF0FcvuXIn0MWMUypHpTZW86V459OEoV4W18HXEisQKEiqBnUCBaxBd1NKZDpYsThISXXOhZSbXylbLoB+kBaYzT+Fc7utDheVvVPeMo+iEb3ih42B3En3ZXcgUAdEjfbRUm6st9Jiaz4onwXWknVhkF5QewA0GXDhT2JdakFxfUDay75wKvspq5IszbEYwsu+TEgsbuO4/R/bktgsQUrbhtKIEIiNSccDNx1JkUKvIxrRfp1m0Ar3XJsDfv7YSJSLdyVheOEdIpBkeZ40LN83uzGRMZw1bQsKf+XOFTfacYZBBzwVj8e1rJC6AWlH6Fbn0jXw3JcEljA4zUh5IrYhWtyIZW338UVsMSIp91USeM4uCvPsOLAdyCXiWu5H8MMYGz1rJxVlTbMiq0tn1w1f+CL14v8EiUft7l8kfZzBZzdLvzdedD/wHQ==',
+ version: '0.3',
+ creationDate: 'Thu Feb 12 12:45:43 CET 2009',
+ updateDate: 'Thu Feb 12 12:45:43 CET 2009',
+ accessDate: 'Thu Feb 12 12:45:43 CET 2009'
+ },
+ '7ef137cf242e00136e57ddd262edfe6b418b6f57f3b5e5e15f3ec1232867f6c8': {
+ header: '####',
+ data: 'N5eWFfsQGHR1WytyXuVySzJ3zenJEB6IaKr2vgWRHTlJFzexXzJmSLoozTP9Z4TumDOLsNrp+EUeIa3Yo+RqSyQKQRFDHXlUYa6c9PPLPXdexSA9JO3AHzMSpL6K0E4gN3BybjL2rbcQwUqJLvCKy44OdiJvORGfIIpTPx2LQ1o4P+chcpOwwe/ZhgLWmNC6FmkTvsU/xJlNuApyD7tPX7Cj3lP8WBfYEPr68BqTKAa9cxai6ZF4BRC//rFob/4pQNHE+7qjOSY9HOnV5uCtZehPYBwfpBiDYhaxWJxXN6sxtpe7GC5CM7gAAHs5lgVaFSWffOAL3zeX7I4vh3j1nYdXoh5KowZJVVUUfhwqJo2T3YDVsaXNibZIaPd9GlbeBBk2HL6c/ao6B8QNwRU7GvMHAdJKta2I9mtU2NCnr0Uwi4rZRR05V4k0HIMLEJxRo/IYAysAYETNIAXzk0twIokOF5JPjP4uTXRZ8LdiS6JqfoUu3Jv/7yq8wrKZM7DaQA==',
+ version: '0.3',
+ creationDate: 'Thu Feb 12 12:47:39 CET 2009',
+ updateDate: 'Thu Feb 12 12:47:39 CET 2009',
+ accessDate: 'Thu Feb 12 12:47:39 CET 2009'
+ }
+ }
+ },
+ 'ca01bcb7691f70818feed46c9a2a91883ac543997a395535aedbb49de166690c': {
+ data: 'zbQlGR1fT8HoH6KvOPBoaIjMUsVMh8MSNIzPO2muIMJDVfXB2rEcPnIFl8fNv9BtE9OLecuex3BQVJKGXdVGFYVNiSS0SgPoEpyD6GJntEIOaB7GnhVflTm8fT7Ba8ArS4r+fIL32Jx9F8sYrL6jKPWeuImGHK+x3X32uORI6znkRac7J727TiTPlbj03X/Fj3Of6Bp9Wa4xbVMwzi+R6NRKD4A6Za3mqhoSpYFeHWld8+ChJU/w2wFkj292OjPBzvvz/SR2Zth+AXTChreQ3Zl1hWNGmU2Ep8ijFCYwcamgPkQwh4vBk9NJlzIgadORcb/0EPDxn638VNA0dbpW8MZUCIMWVe3A8VgdllWxei7dDy1ri6xsKlFovLYjRRPXgAqRSqVATqwyXqhBWhoV6VZ5NaSUGvM8okC2GQSweLuz29py0F987MISmLjav4gdvcMA1wn7FOIaFTNg7oy2CxZefGhHT3sHfX/PIvs/ovfj+7TewI0k+HR414az2D5reo7S5I4+roCm1QLVpPNcXUxbAmEbjF8JCsTtECZ4kdpG39dN6BaMlHoHSN3wu05uTSn+sL7g3Cg0pVLlnHo9baw3fUnVJp3MCEgZJELaiI/WF1Om2y2S9UeLur18z5T7hHFv3Px28D7c22HEDdF2CObeh2uOlZGAa06lp7YlYeoNtb4CqLlZAMK0xIHfNUceC4OMNvqyGswd5WJsYQEnMry20OkxY6YinnQfjAml54B6WlvNVlg/YaKjw5AVinUHjzEFfQbcBFnFGpqg5qJk9hZmb1VI6Ujhq73fPydSfkvfScTImqxCNPD/BR8ovoaJtNpE2gmcoX9A5zhZgu5xUnUnXoaQu0l7K9kWof/UmCCl0O1A6j41aebWr+aoFMalaOPzNJ02vfLuW155IwjFQvRuAp6EuktZ2dFKyFl3QnLbwsMnitReXMoW30cqTYg7ODQnopE73RIb41Nj07qdx6FQMzw4gAIEFBe1iRvlMHQazZCb2ndVvgtK3ZcPNtDoahuPRxMLaKZlRnpa8E5F4o8NHYNivshawZi36Hk6w0dOimCiuk/zvJ1mtx8hhX7B5dsXlNcKxLSvI1onEm2x9HL318xJeT0y29alzPYVFuQs5kq1+UV3h2hL4E/H8h+5mWtTLf/MjaTZ09okW/etuHFFjCmLoKwugk70z2yLWEJGmbjw',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:51:17 CET 2007',
+ updateDate: 'Wed Apr 25 11:14:05 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:12 CET 2009',
+ currentVersion: '55ab21a3c8f10df776aaaf923f439b7080d9fcc71b192a51cd0f1e17139a1926',
+ versions: {
+ '3895963f82854530ff754c8e2d1eaef8d884a8cba7cd058b8b7adcdc12be3da8': {
+ header: '####',
+ data: 'rXmjQYZgxv9jpFus3T/qa9Qc1lxt+mDF+dmZeDmDG3IiE/LnonGt2MqL+YlbFzisF99Uv0IQGOZCPigtBwOXB9m6R6R3lEy/YhD/C6b10s80OBj3yr3PoTsoTmbnmZMYd4r+qx8SaoLLkR0aK6NADYZXebR5QgVtwF/a01EifI6YxH1wm1RX3kyRhIrMzOtL8zHbstPvW4sRtv2YpZqlZqBTdoiqztDUZTKEcCcU5QLnHYMNAVpDHE7D9WvQy8Il1taAbxg97Ir+2ktZLjqfJdKhU7ZLv8fcJiRgnQKPqDWcqpjA+CXM6Ak1HCf9SRJh6Hl64+fk3jEVAPmHvry/xq2RPCG2YnVNWZ+uL3QNuH4zt+IbP4FnrxkCAprmEiNwvuEefMgliGRd+FowIaiFWXcEtYxxQvRDujZN6eoTUU0KVnuy85PKi3ih0ZECoDM88MFhztwCG9/nJQ==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:51:17 CET 2007',
+ updateDate: 'Wed Mar 14 15:51:17 CET 2007',
+ accessDate: 'Wed Apr 25 10:37:27 CEST 2007'
+ },
+ '5311936f6a95cf123007ef867388adb5c1ec5b2cf1173d66e501daa16488e42e': {
+ header: '####',
+ data: '+VirbcZ59SiN9UJKrQkjQx0Z4avHIhvw12Hq7fs+Qnoz4RgCS17fqzYyJe+jYorjlMPjzUcALYOTobqJJp4Sp8v5nOilHW64Gny2XRp59PQPg0zE4TP22l1PzK04+qJusR5NLPU39hYbW+InkDapdIhdf+nIruqeA311bRLg90A8xmpzio6PkZxXmhZMabbEVfXsYFBQKVBFloTMusBG2eaxTjeK0hOAk0uEc9RGOEwCOvZvjRFCP8DyZ5T6QV1pYYgBFBwSFrB/koXmBmObj8zscJXQ4H4UWC0yw1B3ABbhNX7vC9q+vgZTxnGqI6GvzLcrzaXKTEyfa9twq+vKFX1hqDmM0UVLw0dPOy0/3tabJjFrYbz5EEKVin9UqWhuy5YIvHEJlMkH190Zo+lPMuHvD8TiAU1M/n1bTQSBQb/8STD6uqefbKS/s/bXcS+bdVKBmSgCuutBznYO',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:39:26 CEST 2007',
+ updateDate: 'Wed Apr 25 10:39:26 CEST 2007',
+ accessDate: 'Wed Apr 25 10:39:26 CEST 2007'
+ },
+ '55ab21a3c8f10df776aaaf923f439b7080d9fcc71b192a51cd0f1e17139a1926': {
+ header: '####',
+ data: 'P1LfM+8PA/kyelFsojabLfBW9D0Aey5qDClz0OTdSamMT2Mv1U35eKcr6ilUrbtW+dKJotAzs3B1dYGzaEQ1j9HnhiL2pk4wgT1JWGe5c9frmFX/3YGO63c2ngnaC/Rrv3LC251cLVS1aoWNPskWkjZLzF7EiWbAeNYTplSa6MWm2LdHAm6xq2dcgYx53RJVvjnsCzpghQdzL96G8ScJjnUx8FC8mHW4Ds0rkHTeoM344Ao8J3o1XwoFqFFJ2X8+lSkj8LVVdjff1EHIicjrMM0oJG8VyxK2TxMvg4mnLWP4ALfh24Wrb9XmrM0NjhQXBo07tL9dwa7sHHKiBrM74644vBR7NB0+Laedg8D+6FmgNoR6icB+qvxCIIvAhOpJ0er9f0CGDDS06knx/lDtVVNewzxx4ATuG0HQn8M61eU83EfbKWG4Mg+9jtRcW0/bdFW/FQr/OeKg',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 11:14:05 CEST 2007',
+ updateDate: 'Wed Apr 25 11:14:05 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:12 CET 2009'
+ },
+ '5c622bec0fb939da012beb98a858a4e16bd670b3e6fe1f7c92a247f88a65c747': {
+ header: '####',
+ data: 'XGlplDTD1xamZO04H6RiqcLd7XaPwxI3MqpKTCVHPBoMEkwE4A1izGjFKdPqHbQIuYYcT9xDgPOknlkP89jDTfcR4UfENtKHFgFaMee4orSER+MhldJRxMwPLorZmMNNZzVmTmwJS7FI9jYiXEvDbcyw41kN+SA0mxzWpc9emaX4TmZHzlBpY2zXKJLyN3otYYzcTWzuu7DJejWrB+CnNp925X9vVomBPfp/Gt4tiOFsE2ZyEf1B/7cDmMszlQgEgGJONS+C8Qyr+X3GEh5iPoYsGpMNmF7aYnZNciE/B5lP/ABVbZIi2KfmRlSf7Cc+kMkUXyHxOeZHuVv1ZlzfIe3gXlD0/yUJFHNju8ai+F3hpSkhMatf71mLQzD5oFrTmKatH+zQZhGPP9dQxG1cgZRcjbyUQJMazo+0TJuNXNndi/oiRzRJjYRUbZKsfRzIAEU=',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:51:49 CEST 2007',
+ updateDate: 'Wed Apr 25 10:51:49 CEST 2007',
+ accessDate: 'Wed Apr 25 10:51:49 CEST 2007'
+ },
+ 'bad48f8ab053804a02bec678db01baf24de35ef04a17b90e1362e67fa352e4a4': {
+ header: '####',
+ data: 'SXl3D4C5Yt81L/117xsHYjZxT/fANq09VZsMNAz3Gcn2+2gopG+1K0JFg/1Mbjt4EMbe5Or42zBlJPo5EAldAfWu4MoTkQzo/wKPzgOWlIi3A9QwZegw3yCuHvJv8iNcpjGfpY0OCzTZKNomTtwc75l+8FqgwPDW4wDkPG98275ERDR8mFSZfUAiQxlTnCbskFneUQ6hdN2gywkyJKuTEcrMkIpzwe9uqPaQg8GjUvvy162/LVaSQAVRIiTbW5URCD+hT5cKOkmFeBejHar8zR3SQQ+tIJlKERBwfE0sNR+RebSboYxWPECYPp0DMj30FnHbfYIVTgRCIlepy2hfis0+9C7dop0jK2nFREjcxSIqonF+juCrfJDt4cTlpn2SmcoMJQsUOedSh6ZoWweXm7lu8buCbA2Q6SY1L6jz7okwIikIinxGDq3qT1pWSgpntI8wvYZ8RD0umJsoAzPYH9zlfQ==',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 11:01:21 CEST 2007',
+ updateDate: 'Wed Apr 25 11:01:21 CEST 2007',
+ accessDate: 'Wed Apr 25 11:01:21 CEST 2007'
+ },
+ 'c03d1fcf5b6981741f5d4787315534641c61daee9aa3c063540fbb704989ded6': {
+ header: '####',
+ data: 'sbn5IDJM7VtYov3sqW9+/0USxZEw2xq8di1XVPMMZ6kN6oZZrAY7ukxXHYh+mfuIa1/uV4i4v1YCaKZQShLgUS4cchlK4nnNVL8zejGwB+PaY0E8Um/Jg6E4UAFAZ+haZwzWLQS8lJ1r4hNMTeFqsDRUhC30awJRz8e0rBejLZiS2Hk/jgpH3i8Za1GwDzogw11iHXejYI7MaQGB0E9eQsYYTxGjmzcLfVYkd4AKj5pSEHvsKZklSuWIyDzwaFiIO7xqcJmS/8Wkm63JGNOW3nLR5Ao9V/2vthFHBqS2lQNRnkPWXbmNK3v7vi57zu461w1Nn1U/70EvhHRMk8BdML3XI/U6WgDARjQuVsB8FnTkzapaORG5vUd7nTtWjPdyQzOqacm2YKWpAiG6fUQTZiBusEd8jdnv8BioGUTbXgNVG23zcRbbbEdjKc1aizXHQE1LnROvoHZHkwg=',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:59:57 CEST 2007',
+ updateDate: 'Wed Apr 25 10:59:57 CEST 2007',
+ accessDate: 'Wed Apr 25 10:59:57 CEST 2007'
+ },
+ 'dbc283f49de6e303c06a52725b8187f344ba7b433b0158d704f094edba782710': {
+ header: '####',
+ data: 'fbNrpIoYF+gpMUjSxoOc9Y68qRlE2yk7FPPkrHTu07HHWkAWy7H7nFw4BwGiFViMkyEC2orUrMeDYhKmMYFj8DEcALk6452BtNutGZSoqDhD8xnSEPF6fP2Xyy+vZHp4JWDXZt/xHk4vPbxcwTTlmRz5aO8ChXIH5iqfRL9+Dx+gJDKgKmCRMZYMT1pyOUewmsT6QDYdGFJTRRiDmoLfCVAXhJRtqQSBcx3kN3kuf8gyOMAeJnFGISTAj7THzo7eGuQol1omTMgGbDZoL7WJNfZIDamiT9TWwzp3UmQcKIsRvA2ZKtePWRmpWyq6WydJgFXHUuUDVpwT+kc1Rn9Wq2zwm1VBw6gqKCp6W9bZO86rRMs2CtuLT+agSpqb4kz4SEYDCW0+aUsJDCYBXx5yWRM26r0XAbU6X0D+xopGuaVzsV5G7chkCO8mUsjHzZCK7hOAz6OgjR2+',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:38:17 CEST 2007',
+ updateDate: 'Wed Apr 25 10:38:17 CEST 2007',
+ accessDate: 'Wed Apr 25 10:38:17 CEST 2007'
+ },
+ 'ec525dd942f72b71b5fa1aca0a36a9960b71608bb27f32bc7923713bde021b12': {
+ header: '####',
+ data: 'AHP4MFiGukFCCnjLDGoqJUDEr6QNL+KoZlcwOqJIYusRtl5qmhZSsODHbAEpmadxLGogDPrWoH5/XLZ85ASGRF5ALzDgrFKP47/bSEzKVTDABY5BJSqvKgS/lCf2LdR7+0HWUVJ6Z3GOb9GqsXC70pMxDo/RfclOQPa+k/sXCW5u0TmLb/0i/dZEM8N++4umXsyy2WPLtUVzQZ/VdTMDwl50FeQxu3aNGy4qYd4XFk/7gxBH9skBD6/GqpNajHJrcbi/WZt7PZiN9skoVZHhm3YLmteP5hJnrcCGBFJHWuQpXfB7NR8rNmd2c6maemKYmUlX25wQF7JPcROOcyT8iYpF4Hk/eSPs0CSkaDdqSD0Nj9E4kqZrHfVGMwBbDFyAzdHTN3EyGuC4cBXdfNZbdBqwghuB1x7RLXs/pbXg1xqukjRdPLTxUogPdaQBHGo=',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:56:58 CEST 2007',
+ updateDate: 'Wed Apr 25 10:56:58 CEST 2007',
+ accessDate: 'Wed Apr 25 10:56:58 CEST 2007'
+ },
+ 'fda6581f0137dd641387a7be193b06edea4451835817bcda38d22ee24ebeb77c': {
+ header: '####',
+ data: 'QwDMobl0Kds+J8mknphumnONOIF9gH+pC/AJpxGmuy/rvKfHSeEuuWAZ/yWj8J/I4V7OjpyTs9/uCWeKs9khpdkcxtObB36IfcbWBHGOgFjvqKgwMa7eZSIUPZz9k1NsqJC9nU9U7w5EBzQKVIjJaey1EdhsggdtNOpQTzt7iu2mWKo33dJKQCQ5VEwhpGh6SH1TgKFbdMkOJJY8d5xPYUxR66LVFpFzgHP0ML5M5U53PK+apT95UIAlqf7N32BjPK63Nsj1WPsnuuL0vWA3KmefHzwKGeatTdsgck+1mwnCDJncPWv7hTwMLGPUaY+Yww3K3YPihuyCUtUdV3fer2VHVAn++JdzerHiLI/86T8gHiLAi/anFFh6i2kMMVxqzREh+62n34MrgdMqbSFQb0V4Dhm45FVJH43uuEaoe3OJPtyvj1HbcSR4VEVgGkDeced8aAK+Dg==',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:58:33 CEST 2007',
+ updateDate: 'Wed Apr 25 10:58:33 CEST 2007',
+ accessDate: 'Wed Apr 25 10:58:33 CEST 2007'
+ }
+ }
+ },
+ 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:06:54 CET 2007',
+ updateDate: 'Tue Apr 17 19:23:41 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:23 CET 2009',
+ currentVersion: 'cf70cadd4ae3e7f658a705ff124ddb24de78083a57bfe4fe2855ae2be2fcf8cf',
+ versions: {
+ '12bd9887eb84b99ad40c1e413cccaa9ffd4deed340c71fe53610088faff349bd': {
+ header: '####',
+ data: 'MiAIw+S6GDmLLMcGtkl+wveV7dZAFrL1zGZh/FPvG4kpOBbnyaolRynNrL1yeUbEp4gLL2cK2BGYiVc9196PMOvKPHR5Rqp6GlT6h4RUJ+nFFF5/3LNGzQtJbiY0rrYKptqyPBC8mhlqtdK7sQkQonj5LPhKeCX6AyE3juBPEuFYhvTv9a/iRPub7BdlAocz+bb8ObpbVHnNvbGhiRpx9MpUg44JRxLQYhtDUMi2UFtURidKaK0k2lP81ckPDCgVgxy65FjCq05vSaCW0hanNrIwl+zAgi+3ChriqmflvsZYC7TQzUBPXrAQ8bKmzppZWlArIOppRF7+paWrHA3Qcz4uO5Sw3DvMwbgl+XINnmkE/EbA6VJOjrWYJjsibvbCw6vNr4q1A4Yxwy0a7EXbjFiwpEr+jMUhsq8+d0DxP3tQTusV0l9wcT2OWrDRKdjDUXLQOV9BVw==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:27:40 CET 2007',
+ updateDate: 'Wed Mar 14 17:27:40 CET 2007',
+ accessDate: 'Wed Mar 14 19:00:21 CET 2007'
+ },
+ '35af99615d1be9d9841b4a37488fde9aac291c73c8c3aaa570cd05b3fd0baf5d': {
+ header: '####',
+ data: 'lv0pIfnhZZ6ktahFGl3AgAfdcveIcUyAh9x0iVOCzmQ9VjelBztlvxZEo+uByaFh1ptM+eqOFT/Vk9IKhNjRWTXrDXioP7oZ8IZ1kLfk/XuMFH9AgYzm3H1T/yLq5lg1WqqZ+OfO9m37Z4kbTjK9+adIAJ3TwsMxIDpIHYz+qbznjJocubYCbi+DC+4wo6qu5C44gf8n5QF8DOCGaBCyamxFvkqrSMo/Y+3SG3yt98MSgeMScGESuwKKGDHZX0v3ZXvl4UFbxywUtdbipDv4PAlzh0aadMsGqYwO8bPKEUElCWBXd6kASugaqiJaZFtb02EnC+nncv33ZSx+WyJqwKIBk/Kpd3/YDJnX9t3QU60j0YKf0my9oX1746F5u0XGX1DNRaw/1g95zRHoMu6j2cSTTX7CJglzIlTU8kglSO1LOasxm3Gt8iT+8+Lhh4Dw86ugqHXl',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:09:07 CET 2007',
+ updateDate: 'Wed Mar 14 16:09:07 CET 2007',
+ accessDate: 'Wed Mar 14 16:39:40 CET 2007'
+ },
+ '7cc6c6f2eccd8bdefddca21a59669655d7515f440b025144b9ba6b18472cf189': {
+ header: '####',
+ data: '3W8FqWzBVaEbMZRukwXcm03WbvITt8WVKKuJlcSszN0dCJEsIZ9vLAiDp6dfsFF4PEPcSkiy9Ww4FiBYSg5OLW6snRNdA7Wo62dJ3lqn8TjBzv/Rt+khf9mj/WwJZZ4wum+qdwTRPyaoZcAWgA6PAPPVp85iDBP8UBdiFOs+y5kz9GiB3psvOvqC9LZ/RyK3J+H7ierfWecnbqB9LT5Yuhfi8SO/gw+5vve6z1v8sVcexI0o8gk97rDV1W2gZz2WNtO7K5+233Z7aZlzouEbDZEOGG+zEYh6SctWCspgUATElf8vZ29fABsk3uZQO2tnBvINChs6jCRxnbmnjb2Y9R8u2QRtHjjvRro9E+zhQf3laJc0G0ZJp1zN0wwKx+sL7uM6kG1aszNJkzpykR/Uz8bKvoOfG9vkz9+4Pczh5xR+k9rCE8nbu6Yt4EMiUfdfjZJHAhST',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:01:05 CET 2007',
+ updateDate: 'Wed Mar 14 19:01:05 CET 2007',
+ accessDate: 'Tue Apr 17 19:20:33 CEST 2007'
+ },
+ '95ef5754f9a4514e5bf883436d60c38c3cbb15c3f5452d512a05839ce20125ca': {
+ header: '####',
+ data: 'Rko0V7wG9GEmH9pZtXSfxKGDLRhZr65ef/DjkwhsPoYfLryET/ViMjcZcM2blyiLKOxjiS/avGGcXUmInz2AyD5dAFTGge3qAZ3QtxTcNn/fvfJeN+JyGJPIsTIQ7P+jd0uJAb3vPuymISGJluTsP0MZ8zxahSSRUV/VIYwm10tiMVvWEq0+8FynKfWDqJ1eU4pnI47CAdN9CuWhxi12RkMBYgiUzNzTh/tbPTFMc7DIyRfR+si6TuPS3PmtnKt4FMFAX3FznGBCNsonUFf/n7Zy+EYEU/B8wJO+18mqbui5YvmPCPPKiW/pfVuaWarF7zcIcthYoKQfTaCaulO0VRtTA+Wg2LtJv+QcWWWTiY2A9FC/PppLZ8+nFDeng6LqJYKoGnn6qwtSVH38s3Inzbs4r8mSOR099tqwfCnZc9zZHisdIbVm82H3gnqelPmc3IXb3nHb',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:17:20 CET 2007',
+ updateDate: 'Wed Mar 14 17:17:20 CET 2007',
+ accessDate: 'Wed Mar 14 17:22:06 CET 2007'
+ },
+ 'cc7ee01d38e4f1de010d2a235e3b76e838ca05fe70223b8358a5e41975bf2b7b': {
+ header: '####',
+ data: 'TJ5ClYK5JmZvEuNCA+/UeUJQ2rGXbPnFqWP31GAGXqhZmC0RuDNjl3sv0nFKmcdMa/BzvLSywJhkidoRhfKGwN8nZc8M0VpujFkpvdXgNsod6x+5LTMP67qCyvD67pkYMa7O+aosKi/ZWWnYBavZSdhyuWnU1wPxxk+wwcjjIrA5Tm5zTXM/68nLLnIWs2bQbUtcwHgLrBEUshG5oTUFGxrs8zYwodsYUuT1CVwODZrzMxvvbHfH6Lqt94m4hBF0oIrDCd1cSaXghS4PiZkJWQVxJNSsuYF/4PlPrV4ATZS3Jm+DqOxLOOnU2Xu1Qe9DxBppnXjs/WpohYuMV5YeD8iOJLXTQbFKhBJNSCoLp73QywWazuKkasC6cbBrTHYykEKXpt74iE6oKg67YrPkIZJ/jKEGnZ7wsY4ObeDTS7OUbHKxPHRM3ZrmB672R/8ktglg',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:06:54 CET 2007',
+ updateDate: 'Wed Mar 14 16:06:54 CET 2007',
+ accessDate: 'Wed Mar 14 16:06:54 CET 2007'
+ },
+ 'cf70cadd4ae3e7f658a705ff124ddb24de78083a57bfe4fe2855ae2be2fcf8cf': {
+ header: '####',
+ data: 'CiJDd/ShGw3rE0xCNZspkdH6hRzvSyaNiuQeMBI0NR1MReaa9uVMV6Ymj+BWVQ8FaOziQ94aolsWre51EKwDWC1otdovPXWHxBXBBI/Y5A4dyQisBeR5E456juUwDtLKX5En4iIuOL14IGt+keUtb5JyfBGuTTA+EnohYzvDxu9MDh/7nzCcWzUxh2zHEBSyowfOwJhx7G2xEvbBgTg+TkejMudbq9k3Owebe9QNdhU9rsY1UMxjL8+HgJmgyo0C0SA91tZXBB3i5ePvg++ze/SW/r+XO/nnVzcEwCJE2UWAL+vNh8tUm+sEbWaqyKwjHNSquxV4cYOG2Lzo45Wp/vZwiUR/8MK9THf0FO1mn3QCd/37AMMneI1Gqk0TNwNtoQKgLVBNhhgX7dIVpRxB2iiSBYyUK6N9LlFahW2QVDS7kdnKH3vk1cP50dj21E45jEhhd75v',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:23:41 CEST 2007',
+ updateDate: 'Tue Apr 17 19:23:41 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:23 CET 2009'
+ },
+ 'd65b23008b22e5000726db3fd22b074b08553fe82245c3526f708b8d89f70963': {
+ header: '####',
+ data: '0y9WhoXwZSfzfxuql8LBc5/RiclPKQxcBYjcdGv7v6B+WuGrB6uu6d8pjNoUtsZnFv/25sefW3ggVgDuI5iZNg2lBQVIwgcvK5jPM5foit49d3RSWl74XdHY2XqykRNDbboKAiNfro+abo/YYQXjkhNBOC0dWSUUw+HmgK/Bm5NmJD4fDTV7OYFsvX4ExjnX9pktaB6aiLZWN1cZruW3Lsszx/ryHpDtcPrmK2hgLQ4FjRSXunbqXKJLOADQiMbGZ8DKZchB5NcEWlE3AfL6ybJzTyr4jXuS7A9PyitxYNKFHAHpJEhxGkyuhUE66QMt1n9NKzkNx6yhhGdIUF2zVGsBUb/pRrL2gt0X2lsZ+CnWFu4jRAeSi3KfK4VrvnoYkVlJImxPiLrzJAvqkuA6TyQRpJ4yFVJ0dgxBoxZVSN1fp9Yvkph+Os8LZscJtpYPPwVDlCnC',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:22:08 CEST 2007',
+ updateDate: 'Tue Apr 17 19:22:08 CEST 2007',
+ accessDate: 'Tue Apr 17 19:22:08 CEST 2007'
+ }
+ }
+ },
+ 'd620764a656bfd4e1d3758500d5db72e460a0cf729d56ed1a7755b5725c50045': {
+ data: '+iiHiN91FfHKOXC8Z/tg+YynPECa5sgYGGofcoJeXt3FAAkAFu3NsLuwjYIaddJiB3MIxFccrCrB5eDDL0SzOS+j63GcoMCeeiXss9YfVunA4RQTTktiU1BknPYfsfHj8EOPDSVHkPFs7KhAnBlgyaDiQPjYko5Np1H2i7F7pRmfC8W5LGdisaqxFDa+1ghu8K6a54QIpbfOmolQU3w7T5qiOdoZv8GLDDoORvMMb4P09IzXpk/yDEZe1GJ4g1a9t+lHAhiKSvdnZf+MhK0jvs6R6ALlmO84lRP34DmT/35Fr5C7D6EJl0OxXkWgYWelTlfU4b8+SStYP5LPYeD38fodSmObpKmpp653T1v2yaTybI1hojgLbH2DuA5VcQAM5JHMjoSy6s76mf2AZZeRnej1dqdvIOTf1Q6CR+ZNIqnkukrtGq/6elF3eZZh1Ln1EZDiTzsMxUHBngtiRmRDofqRSJUGbEAjw90dBoiaIO/WwLAy4cTec0nJxwYd5M7nchEly8Cb+zz7naP+vEGEAWq991u9NFZhrw7WgNgHnG0E3km+X+SYvv0i2MkqjYs6ItDkBNyi0Udnc4CqfWuKa9q04t8mZiy49LU34Ho4/ijuez3rdOeCO/oIwkRkLZYfFO6IxO56tAI3d6iJqmXY+DX0YUZrJ6FT7bDsUj0umV1htuj/uEgQZyOnKOyA8cSjOTMRIkodI12HrtdrIA966BDznsKW4F7f31VaSxI5ezHsdiYEsTqwaZlFQMsjfZX62EvDLJksJTe3JG15BNgsDUUh1mqIDCmVswFTpUTTb+50ap56c/uERSET0iXP8mb4hKwJkmngrBEir3btuMEMS0xSFQ2jTRjlnWRQr9eZT2biarzgEhKHyu2qCUtsUj7TiieQJY09EXCP3g3Da+61nBMoAwi/VqTI6vQaLGtuDrA2+VYGc8x1SiahmAkRPpQS+5N9qPvxxFRbKforMOvmeboFVxdKesub7BHIXQsSOKsHFZnFHswa/oLBITomp3ewfp125RjBUf1C3hMBNg/tmE5pgLqPfQqWK7IOnfdyt0jc391XWb6H3CVcgC8DcPKJ68o7DBucg9xTNwlIxBTafupsBa9JUkBigqYOW8729lNjj/QTvTUaCxWub9SDT6/y1wQUI1wyyg+EaR0fHqumMhIMbuvIPd/SvKMmZ4TXtBc1U3H3IGbkqIfx0f5rI6AuNMD7/pXTAy2Ot1ZBohnQmEotXRvDwxPMqBvPU74t3USTrysyXfJqeFtHi8GTR5X0m/PYQKWCCHgKvjw3d1CJk7tTe3iV2ulk5cnO7tOydTMJFgPuT2oyDDDTp5jYJPRE0OzZcpAzvRSjELfJ111sFBOEzTqtBUHA/E4BnTIM13md0ZaMr33E7ii8rS7vaKrQAI5moonAtAEOVbx/ZrcZ3kGzHpRCISeteHgnM4I90x391HqDkc1A7b+iDQF8OY0H/0as/3gaVaqs5jsuhIByj0+KmoXsdq3ZBhEQRW151QDCdMKdulNUxbKTYV/t92z3slU6lO8fiy+ON/6sTtS6jgnM+oCLxTfpfBdz0uKG7jiSOyunj27QxNjLyu1nF2+mAcDhtMN18QkJGLXKYv39kx7ny1H74i5rba32/QEAFl5eLJNIQbJZfZG3HzKMVS19ZGwgsYNqV1G52x5+bZUTR8YcrLWmPTJ322UxlhTmyjQv+fVCnpksBtjLGntsGloemFF5YVlcl1AfyHb+KlXiAZn+8vpfVVBddFFMeehokzYE1G8Doa/3huhqdtC9qvAtpP54G2p3',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:36:20 CET 2007',
+ updateDate: 'Mon Jul 09 15:10:15 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:28 CET 2009',
+ currentVersion: '335e2fc3f76b3db69d7575194a8313bc3ad031d441b6f2f81cecba6d3d630130',
+ versions: {
+ '0bea892da673bf4b3d3e4e97cd3e1645eb177a8423dc761583b876c5ffb1e2ca': {
+ header: '####',
+ data: 'BmZz8j6Khuz7Q11xPA5zSECcqn7BOcMtLx8AmX2iE4OrIwKWcZ+u4B5kCBxtFPRZWLdWcxAF8VfaedkHx5jxPNeWNIa7NEXXcFLYQv9lwUaxmtqodYtVapAg7N+onw28UnV1vB/h7ll26u263jWYohtd5eMnXhEjIEbrQYpf84jQYlpMKjUDhsVQeZvTI/KfiXa6O38ygO9R+xlq8xKgPPX2bkXfPJiyzlA+GoLSORc0tdqseGGOK4BFyp1V/KRUQ/7uQmGs1yNWt/ijaQtJXpWkWXmjHyTjXsi0z+1s0KH8TwSOfu8yjVshMyIyEDd+EsmZeK0QwMCm96v311cRhMgAkQOqL8xc2uRpGygtTkV2frthF237GOV5vwO9IoMZQFlvKZreV5mPPPBeqfP+o4QRpdnJRRCaP8Ds/MmzGBqE13ntwmo1UVX1k408ZtMCO7h1eQVTgCZ/Y2RD',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:51:02 CET 2007',
+ updateDate: 'Wed Mar 14 16:51:02 CET 2007',
+ accessDate: 'Wed Mar 14 16:51:02 CET 2007'
+ },
+ '335e2fc3f76b3db69d7575194a8313bc3ad031d441b6f2f81cecba6d3d630130': {
+ header: '####',
+ data: '++u0MEaILPK8riF0UzCnb+MnC51GYcdqCFRKOP7XYt5QvzWtxhDMOvq8ugCDF8G9sYPAoBLiCxFcuCtnkG4fp563VeEeC/dRnArzMDvjILYKAETgpnLQAfyIR+D8RfUkCbr+aOJ4XEKcy9a240OQJFDT0whoTKuX/6XVzVM/D7F0r+hJiOD1ELsVEi/+U+dXXO/VDxoyjFxfa1+M+Ygk8ewecX4nVqwOiFWHNK2lXW90inip0p8yqDsADx0KhE2tjARWVsjoNdf5RSUOYr0Sb0syyjBMi7oF4jpbLvHpu9fe8vpIcve+aSA/MF0Acxh0/gToDcO8ER3K4wcJgNPIs9lXiSrmuklK7kmS+uhz/rWCtZZH/OB/ov5sez5H51EYLmSNQbx5wZGZhtJWNN+AkJobg/Nt4XKRTe98CutbeiiYUGPxQvwG431Erg4y/q216n55FmCBIHZcUsa6Hk7ezF66c52EuAnVEkn7TZLl7vvym+sv9lKev31xpAGwX5Gy0tx2A7cSE55ZoyqOS9kf1s5Kwprx6RSBzfy7sffLSWHxyOSBnd7B1MNZglVSsbB1r4gMgZdYG//MZ/3IhTFbUqqw2xXHzTvBPA2Hl96g5Xzx0dVx2wHWcPcTSH23VrLscQCwyiDVINwmIzyG4CVSW/6gzA5VM4QYOrUDX2ZA5ligkZpWs0HTqmCB4SoqYJUpafaF2sEtCWHUjuVdw+rQiTBCcRTr8f1Vah2q2xbXMedLCRS3Vq4vlT0a/3wGgVD05CsAom31ZzmHQm94hZrx3FTPenhxLtTOHtDYXnbzYWufWEBSJs6VNtG9F5Md63NZvzEZiggfxTREDRZ7I9MBOPhrxz/3tAo+xInwvLXOEnTNOHVATm9u50kDs1qkJgqiXlxi9pZKmrTu4BeXS8cOxJ8O+Yb0Nh9bExfw+CC8X5xiWE58OwalxY2qlvuoR6mOqdcd+L7YPbGq+hJ/7WgJlrvtQe8IjGF1sJg6jfO8ZeGaPMF5NnbQVxGAq39g00on/z6dW0BLZyA6uglv99si8aRLpMk=',
+ version: '0.2',
+ creationDate: 'Mon Jul 09 15:10:15 CEST 2007',
+ updateDate: 'Mon Jul 09 15:10:15 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:28 CET 2009'
+ },
+ '63760358c7f5783d11fd769c78ca3f1ce787113368743655ade89bfa67d0d30a': {
+ header: '####',
+ data: '7lG/UvX5KjLbN+OrHbDeqXmweYeOL+0p3/UoLi2K93mCYdwsvx8mg+zghxwg5ITKPiZ9D/QWIShqiPpl+dvQJGWgs9EcP5W7k32CS2RNFaZ7U820rSpahHP561HDcBU1++5wHWszLnqFFiCuDja3OU90dsCTLI3g0igFgqpaRbjLcRTddI/1N48xNfV1YieC5Kei+jZ34zzrfKRn1f0F7mTkCqCSfygjnpRBgZyo9BfJ9rHULBvplvpslUUfFTShkLnCx0UbWPXog7DIZUCOwvPr3KJvmcZtCJp/1nW7gm0E5PaueJF10+ZlB6pKvueu+5yEgVmVu/lctmPX/UwTYZDgY5VWSWS3C+JNAvV87ZQKKmp8N6aMFMNOLCsOYL5hFN9uWGtMmvtgawqt7OhO9HukSUs8pDTgNeXoWyrorLM0cH2fa6a78GxNs3nCSUmqSQchJf5eWmASZgvI5xXmHXsNbuc4w5R9BaEPzyrrSAIa6r9D3rpFbUhMm+qPv9pZE2HF9liJVdWCBOSF8ZfCjsq5suyYz+YCsFHnwwpYmKAqJNXUMIhxkjgOTi5lNIsvS/iNSN9kdkeWINZk5iQFta34uJbGgjUhRy930ZGMBEV36T+Vb5tz50M6/MnlzAoUDeZAu54btKcrIpIq1Se+8zldwd6UKGq5nG+dMPk7CyKfZ5LkM065KGbgEJfHO651AMWp1sMAsbIAM6h1gVKbRjNyNwO+UK8eDpIX1nXHVj8bDVh96160cFbZj7htsUnXZh2AWuY6ahwdrGwYeSFoVAnd6xUF2oH+zFz2coLmLjD4Xm9IuQFsFO0U1Vo7EKUJHkPgIsXUT9He9tl8/K7UYQMXGgPTpercQFQ1ctFEqlPbFoVNO0j7Z9lmeSBcLdvY67CCbsoBDVJzj/wLRdBQStfeSUe7bEI6ff8+0gVkEFFACc48fWWA6NLLtvJkYjdojjA+C/Xf6EGNeXU/VENMJokB10EJUTueVWKHCLGI/JDBQBBB3HKX2VNFcEMJxES7Gfcbhysm5bdmltyRUJAIdXvw',
+ version: '0.2',
+ creationDate: 'Wed Mar 21 12:56:43 CET 2007',
+ updateDate: 'Wed Mar 21 12:56:43 CET 2007',
+ accessDate: 'Wed Apr 25 09:59:58 CEST 2007'
+ },
+ '6e0dbb3c582039d985e80e10d94f424a63f0cb5b2ffac6388fd806ef89c1da40': {
+ header: '####',
+ data: 'f5hBUeedsvb1VBTpmpQ+XgGbnuVDMVEAdbEN7ZLK5k++4Iuw7l52zX6AHCWUFMDRfT6joiD2DMj0O8B2g55SeOQIAtZb4PZnbf3+ZEqKMOOI7iYSfo2PctLbzzzztma8EUXYkg7sJKCuZuyXhkWZxikBqVQIp9WE/bhRxa/atnB0jJyttnDMdTAN8kxIizrHFfT25hSbcPI1cSzsmF2nLabO6hLlm7mdLZCOD6DSv9hMeOXgqXo7XdfLA4k8swnOA/85HZFmhaYjTyoDGsK8yoJny/xBbiaRij1HQcHkbG6k2QKcs96pjmiJPoCv2dmsU3Bh06l1O4OEXl/RL4qBGJBKsDW/TXy7Qqa5y6LCEnlFAfefTHVgzuEQjJ2qb/z//oIrmujt+8hEa8F7Jyn6+FGqMNRxDvIQn5Ty/CPUStS1lNL1PEb7TA3ChYkYvnuhNVq8HHf47neGMpUwC5ppk5Zzb/5zEP0XH4XXkNbR5/TYjcb0Df3egNLSQLdO13CO3mKeoccmtfcmaFCtOLXWc2xNNcu09s+/QlZMuiu1TAzhWXU2CAXT7K794mTXHXjgGEaEe86Pj1nO1zHN7QhKDN92WMEdYasRAVDu/XYdzpsKJZ3POhNJp6pynotVBOkPk+2g04S8uujLVSIPZIwu7p3RmPQGGvfMviswhyPvSsPqND77j5msYOLCnXXjeXhOe0E7fIRpxPK1F6/N0R4tZCYNJe9Zo248XdqBvl5ZQWDC6aQH1E4djPK/08CS7/kAECqGqOCDPRvvMUNkGOnxsMx5eofr1YR7zWOZajr2GnfhA9fjrLv6KxXPVU0z702aS/Mfnf87ckGpOKA8/ssJiyZ4fzP6uN4pEb6wEta2DnnacUDd96nMvB9HvGCDoYZH646+n4oev+AnkYTy+ZRpmnsG6/3Z85iH3RwN6P2I3DWvGuN2e+1zQ2kaBMDms8qeXVY1+8qWr75ihizHCJr6E8Rd2Sw7xM0+6mKpu6gVGIi09auHg1+6Q6PlCr8Hy/pc4Exj9Hx1m14WKSF2SB1SYOnm',
+ version: '0.2',
+ creationDate: 'Sat May 19 11:26:44 CEST 2007',
+ updateDate: 'Sat May 19 11:26:44 CEST 2007',
+ accessDate: 'Mon Jul 09 15:08:39 CEST 2007'
+ },
+ '84f3b8571428014d04d7c05528af73c89cedf17e23b1f9541fe7060512f4c1a3': {
+ header: '####',
+ data: '2/zsq97zQBq8wE0oAC15HW5pbbzgokoDkLSEGniP1VL+sW3b+tXYOQV+VSFJo8ERNlCSoy679G7N8tPKgA+rO2/roGP/iKEuE38et9R6v9nhCPfo1vKt7XpvzJYow/qDwdStylXbfW9QN12Yx12r/nkPldVTXCYQDF0Vs0h/I1XMjbILpq1smbNXAUdn9I3W9o8KpREvac2H1ir2vYOzq9Ubhq4jggX/9s+FGm40f5MX/OM+lJGdRPCMG3rfWVeFeWEGWpmg0AXpV7eEuKH7sPrWy+QLXD1IwNE03QLhuOh0qEPsEi6kcCaZyLlCHYlzJ/hIAR1CBlCtGm+vqD+WRr0mGQtl81MMl6/BoW40dya/6aIKNOWfmYNgdfplknkVqxFsJnwVqjQJWfCzbW1KqBvMHx/7oPNjbMS0KKhd8ctOsTLSvq4zFI+mvR6BggwT8rwcfa66shJIaDDC',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:38:54 CET 2007',
+ updateDate: 'Wed Mar 14 16:38:54 CET 2007',
+ accessDate: 'Wed Mar 14 16:38:54 CET 2007'
+ },
+ 'a4218c7ece0287ebad7f3cdd6510f424245a4d7d42ceb083b664a4335bcb7690': {
+ header: '####',
+ data: 'hQ123ZhZ4AiXD25P/0Laq3MtRO2oSIrY+GoYe3UAiyEHc9HZDCvR+POEEaARXNyh+U6z8S12P1GvQbzo23ZCt5byhqC+UmbfF3Y4FikM7WmHaRPtWjv8JNf3X0iJ9a2IBLA1BlqgJolnVDtrLsFx+6rBIU9r8pI2jdcsw9w9feRbE9/0S0filh66azojT5RM1qLcIUVWGixROY6PALSnA9PCjA6IG5WUa/DX7DyRrosZ9V4ZheMlzlz8CgEKBTN/HREIbPrEocBOvmnbupIEpOvH3OXKDXf39KAGVBAU2IIkOrGyWfT12p9dK+Zf+MQUl4DDIdAbF81Lus+LQmqtQ1ieyV0nNiqFhPuglLvKRj7QZRFfHNyejkMTZQWjQhBdHRmfSxyEgmFrM17yVVz4cMis/44g3szHMgAAfFIc79wq09oNDEV+ZUMS2xyBCALjRmhedqYIMGRCAG15',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:36:20 CET 2007',
+ updateDate: 'Wed Mar 14 16:36:20 CET 2007',
+ accessDate: 'Wed Mar 14 16:38:12 CET 2007'
+ },
+ 'c6613ccf0c1c6b65798c6f35657a10d4c6033aa32204a90d9d0274783a1098ed': {
+ header: '####',
+ data: 'ATU61Uq3Fe24JAEauMRtY8vMjzaQcPtnt1fshTD4dGuptFH9XoZ4bMC4XKHI7JKbx1NUEbR2ySOj9K/NJuWEGZjRgZbNI/KtuxNedlm/7jEpHQx4ZfhXQ8OiUDd+2bB9g6V0Ck2T1gM4IyaZMJ1QfOlYmGGv8n4flhHC5kUzL2OIiAxNHvKQjdEOccnEsk25Gg6FveKHD6NqVunsiCqhxJ84VBNzHJscuCTRcbt6KwR1+dw7Y+nhTjdDFq9UidlxTO0BKYsqj9F4Kq1LXORkSyab7zKooFH5kNd8torb5UFto8dfI8/+DOVHMxNRh2aWSn3O9bzwi1PfYO1nky2O6OKR48Y65Hp1sm3Xj4AAVHWSGakYUSV5M5XxKKzvoKY6Qqhz8GhbkzM2FC0IKTEcmINMvzXdzKRTqBFg6i0t7Qo80i3sQSoju3/4CYRozI2RrF8W4f3/0XgJf21oUAdTXOmSePSZoqhdejXeNQAgb89v+ZextxA6NJNYqvrx1NjdKmWKJIU+o3AgPYj4UIwWHwVADHITKrIWl/SbOsGP5aERtSiLnC+xqfRUOpgfkAYLcytspouHxvQjgNY4I1U/2S1DThG/N2EzuPl7GLYQ+Y3RAvLObFbrV8S3DS6vXIkigxyJT++MotIKoPBq0xDq0ck6joyvwvg4jXUMKlJa8/LQewJlbH8Lszx7SwjynzEQUJcpCnmxixzSNfRzpzgEBQSiClEEqArYykew3rjz9lc9nkdXUCzz81WYsvk6rGJ6ZdDsfKsG9+kaybuLL8huE0ERhznKDJW44ehDGQLr0phO3CI8n/9Px0PhPeZ1hvoiiH8CFSW5f45ZrFaaQG8hNyzWCpCFoX0/dNsNPsAkOJnO4v0PvO0HDOif1JjgPjCS51vBzxu8gYhkWlPo2hZxHhnnrbhxeBUU9jhLAx+NmxxfTjIWkbtHtVjm3ea/D2nuL1YrZKmQ3Qs6GamKlh3WwkRWRAVU3+/mbSGOISxo0u5v8QSmh/IPIXltniaQgWweqGNnCLWluuTyhoqnqDo0II7q',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:04:29 CEST 2007',
+ updateDate: 'Wed Apr 25 10:04:29 CEST 2007',
+ accessDate: 'Sat May 19 11:22:01 CEST 2007'
+ },
+ 'dd2b4cdeaedfc97c384f79c2878fca9a981efde6ebe212138db235e51b80c64a': {
+ header: '####',
+ data: 'd7ZpqQ4CTF00+/UnTvNnnkMXB2Ow/K9dys8V09Nedq4sgMUk08E1vqi9mdWbzNfRD7aV3blru8PfoRrxXRLTG/bjQ6xncecQoAJeUtSplKEO8fhuzGqbMqz47/y3aQDHBbygMAGV3wLgJO2Pv8p+8U/P3cEJisd9OqTNE+EYQz4eiq9dllMNUQjDY9aLHE8H0ny/5r9uohGNjXX/LfFMshjeS4rToCG5mzRaJPaRs1jkjzSntpF0RLxfU1acpJX4pNSuaLscdJ1lIwc17vygg6f3xexqvCeeFZBot1RwwbztZKbMfap4pRF5KoftD9bXJwoFMXigeMGLy0scpzsp1s8zBIwLhwUxEE0IBh7qeStg/3eRSW9slazuIR452O3Rysb+n/jWMyAhIOCSrnncjjH4XHbzV5GgT2d4f8jfBPmOT7l7C1ev41D3FGFxEb5TZGcJTaIW6ofLi5T5',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:52:12 CET 2007',
+ updateDate: 'Wed Mar 14 16:52:12 CET 2007',
+ accessDate: 'Wed Mar 21 12:16:29 CET 2007'
+ }
+ }
+ },
+ 'de13c0d036234c44214062bc0a89e5f127470c464333493a485729f43cdc26e4': {
+ data: 'ZYvHAVCnw96hB+0XxnBY6p+vwvup1BopHUeepu7yOOSdYNFFOFEvtCbxXXoyVaKZAeSd2Vd7YEwRP4TTJjjWNPapT0D65AFqM8x+0rEjhmVfQGZAS4L3QctzRAgBoR1qTr0iqI/46ETkNq6vHz9mPLHEL3MQ/zoh4Pp0T+uMsY5ptzuMPcG0YwajSm5J8XXV2V5ZBEANpgL91xjgh1I9LiKJa/Lv3R9HAZG1uuCvzqjA2LWYeH+6ZcSpadk/UPxDw9c78FUnSNbHAcjuYZ/yI3v5SaZTjEzsB1MtAh6AFiHtvKIMWpqoOs7XQPhz1xXPoGZ7VR64A+/bN2h+Uqn49bQrKjTRGegqkEWFcBwhFH/ZkYfSHCGmZQTVqOakqyofJ22tS0ief45gYaO54YvIliTNTY7SZMRCEhUzz6dz8ENqP7FxhUVcQRbBr0JTmaf6DAwu86iDgkvcp1cY2trnUmlvrgz2GW6TgXoFjFlchUkHIByFeIJ02olfJg4zP8PzgYp2zhwmXL8iXHXnwzuP9bQKq5j8o+UhR11zn4MFvWQyD1UEplK6vphMdS8iXDViLrOwuMz1XUf7RxNdW0gqXwx+qLU+CeypyWLMIlgTlOr1pBqD/S5Jx+Gbn5GHQViuFZHJUjJsU0xel001KjB2Wf1Y15OSdLZ5l0tn/4HYKmZLufTYpub0xrss5r3Z72RYz3wvAWFXzkxWa+oBiRQiF6+ix8DBPTc3tm+ORnQBYcV/VNVRziimV3MFSsD1nHgIF1zu+eXIKE7/b3lzY19KpvtiBio94dejWoA/WO7KXWv2sHH0JoZnRh6lzu0HRFgYqVm/052nCGVA6XSfrFtfIupxdBs22C9wrwC5/Rwanf1S8BQIXpm25P4dv9Y9cS6c2/DUHcle4tsUJlqC+LpRGKXRdolFkiL9r01V09Kev/K2oXaWGYmBLbRfIyvEHyHNeNXv5fnaZ3pTlIwXjJ9K9yKA/1AKAsAEuKlM3N5ep9pfyuyfOWj1I6RvBwVqKvcBZtYJ4u8n9jrxiyq3ZZ35eB62D+ceOAD2s5+LL2IylYjiJA1OO2qpu4x9rt1NHXM6LYJAruBnUrJ0Ylqz/ElcJn/lXAzY6RLqVcZ+tuV580AUkFiaXFEDcqdJbbzh0R15g9DtaeiQZd1PG0a8Xblj9aMQoRDRJeksw1GWO7TfrJX1Cu4k+sgARWRzZ0DvB0SJAxPcmhg2iBByn2ESlcxPvMOpzuJI11BUQsZZ7dcynubeMvdqBeKsC6HMcm+8DLEUPmzsC3HIfARlNbt1fOrGJNuKaLvF1AAdwllELoPf3lQ6EVZI120=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:20:58 CET 2007',
+ updateDate: 'Wed Mar 14 16:47:01 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:06 CET 2009',
+ currentVersion: '59b84967035465bdf84c8aab3c43aec6cf60e1e2857e978b205a2cfda7546f28',
+ versions: {
+ '201725aba7b4dd93531e40ee08eb8156e3aecd3db4f11e54d4d88ed5508c72a2': {
+ header: '####',
+ data: '4ndloDtoW1Mhat41ZlW+nN+WkdEriCn/z/oclyBFQSljJRlMwUFvzE/OCVYc2fQx1D1GBedY/O13v+SCAiJXUrr0dgrMDOfmYy7ZtNo0hYshjaYQucJovt7UQLeFAuLO6rNK9CrsYA/AWoiT878z2iCYCqVq41sL8juCm9n+d9aR0eyjXAKj8QJzVz/uvdudoGQ5xL18x2yUZnemY5gQklYlm0u9zzCJ3rLOENnnAggFnSJ0oysNjB2UwQY6P53bqXzF8E+u6Rv3OoIbmCIZMaoK1G5ivnWHwhLzp9UVdIj8ipfLsTJnGMk+aZ3nnEJ7wQCaaLy/lY2RYmSeUTTZt2ImK4ZLrSxRC21QkD+juyIiaEBJdhP8UOfcqE8Hw+etc/Cl0QgBtv9AgXD4BiZs3HUTXsV/PhIzP+6TGyr3/A2kt8dv33V7Gh2Ba+28wtsG/+HwCMk=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:45:40 CET 2007',
+ updateDate: 'Wed Mar 14 16:45:40 CET 2007',
+ accessDate: 'Wed Mar 14 16:45:40 CET 2007'
+ },
+ '59b84967035465bdf84c8aab3c43aec6cf60e1e2857e978b205a2cfda7546f28': {
+ header: '####',
+ data: 'eSAwxBi9CLckMV3o9PxBjVZZ47g2AOIsbPt8QMPta7U+6KKUm58cXHV7BDfRkbin3JYQJGYfu4HYHmayGt4IcX4RD3riftxnG3UFNqG4LQQ8+fwA3xTMBisnUSq0JYc/PKdBKzxH9x8moSqZC/cgFWe90p0PxdY13otjd1qvDL2ALAgY/uEDboTcLTbSEhpGIYQHtQ1ZjDG+KXI8J7atuMvS0KFreNUm9+uMZT0yCXwNpGy+ez2+ZDXTEjZUKaFPLI7g/vyySn6VMXmlqJftGXZ+fW5UWGaxb7WFa1hh/nI2okPuRlUQh50xXQJXVvanw1ATJbN1PRfYEfvQKLlAAwYuoB/qL0y0vU+3OktAbgBvwt9prs3IsqjwMeaejVTo3Yj9pQPJ14a+6lxQZQRFUaLePIPdYvq9NRM7chkNYminW0JN6umi6bvJ4KKTyjAglBQ6X4s=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:47:01 CET 2007',
+ updateDate: 'Wed Mar 14 16:47:01 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:06 CET 2009'
+ },
+ 'c7398bb27021058c9965a332d678b0070287b8ad12694bc8732346e6d84fe9a9': {
+ header: '####',
+ data: 'L+wk8k9ejeUeVz0offdItFpy8drMl1hi0FODBMKlPIAmEcNjnHU/IktOlyLrK0YHj66DaplXw2EyRkJNcMIbfACUtavxhWBH9VTftOPepsbsrU19aP6Xk7R1pr1sC76w1TgKCjE6IyBnK5qk1oHqcGv71GJLMmiqGivKyYOXQ45SH9tbHC4GUrg0YxoAYRwXqg+SlwRHpSZkX55NzPCEZn9eatGKCznTZs7pg0uBoM546fOIEBMgGndNk6gnsAH7At8yYxDMnkGHUctsSExL1O+W3bDDDx7D3uPkkjtd9se0exPru0fmsfcKPrcRkx8b8MAdgcylOtMdYvSudPdR6foSIqKMqktH35QlH6Rr5E/ire3O632QlmCieKDoPk/cB/qL3gKedxT1NxtC7SNR3aumKBAKOBDTVSjWWq3sIImQPZz+RUdRajeqkryNDVVPLFyjdC0=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:20:58 CET 2007',
+ updateDate: 'Wed Mar 14 16:20:58 CET 2007',
+ accessDate: 'Wed Mar 14 16:43:46 CET 2007'
+ }
+ }
+ },
+ 'eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 13:35:58 CET 2007',
+ updateDate: 'Thu May 10 15:01:21 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:54 CET 2009',
+ currentVersion: 'b454ac54afb60c9bb6a1791843aaefadd8483630611c2bbd0ea37658985c62ec',
+ versions: {
+ '157b5933272bb6b8a70bbabb7fa0369eb2660f7f0848dcc653f592f5afd4f2a4': {
+ header: '####',
+ data: 'z8BUTeAbrs5GeJ+SxaV9ceaAoqxtW/touC8xhjkEqbG6+IgMrfuz6ABRn+vwiN1/Vmfw/tyad4kB2SyzKgaYPH7rXyBir1mzJi73/oHsXv5wWNhEePmjZginGGcWQ0P4AnrAoxlaI8tXo3fbsz8e40x1b56N5J6zIdvX3eewgIMU+J+iomZVPDQq5DNu0aGUL1xs797FNm4vLQbVRF+mzrZlT4XZNzOr/W/Br4vG/Ureoq1QRjAjj+8HRt7ojmzrpDX3RtmSbWqUPQqx/KpFGqVUNw0zs09MomVIYilRawe/zegW2KZKK4rmqoUm+mnWQTf/I31FYO2N8dLrI7OV71EWlVN4FSO2A7NRUd92uVxHzItMQPS3CSQ57FYAC+WhJh7k+/ikJumVSf18pZRSRaEeKPxbJZFJqrWsWk+SsqBIJ4EklAnBBU7zLmMVe3GO/ml3',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 13:35:58 CET 2007',
+ updateDate: 'Wed Mar 14 13:35:58 CET 2007',
+ accessDate: 'Wed Mar 14 13:35:58 CET 2007'
+ },
+ '1835468626573e6189e5302f6f354628f49900efe08adc931990d1c11fd522ef': {
+ header: '####',
+ data: 'Bv0je7USknogpb1ng86CEx6GbHlysuN3e5Iy43kg1iN83AgRm0Hp6/yMivQe/mEmQb+67cjHfKKrznAESYzY8uv3b+ystxoIaQL7tKJ5HYu2NUVvZxRC+PE7AkBhc+O28OzpZEHXXz62uZFsjRDw2hC/KP1XfYW+Deuulnpz6sgjuyWIYXF2486DzaycCqX0NmYXKE7oXAthOlbo+Zsm8Y5MWh5ploJFrzhAm0CCzjsGSa7NBOBWU2o6vN0NFMcOG2pdjZGWpWo1QQ5G9tx9UvM5pTamwcg5TOr4yOd16JmYTDjK2Fd5mdUuG3zIxFR8StIKI/Sd1ah8U+DGbNlVYAVb5OREJxQxVv6I5dxGC43CGWbpx3fB5wuFT3Jek6tv+LgBJaI9Ika79NFJQrLVMFbQgD0qU8YgCmLbxIJ4gxMBUgTN+v6PraIDHleYlpW3KVIiNxv2Ztc=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:24:49 CET 2007',
+ updateDate: 'Wed Mar 14 19:24:49 CET 2007',
+ accessDate: 'Wed Mar 14 19:24:49 CET 2007'
+ },
+ '47f73115ba2079f4b3703f502e3455498900a21941625c25d52ebb7da31055f7': {
+ header: '####',
+ data: 'pK+wAHWg4IJcixnFodLQ5EH+SFQIOMOrthx52u21WZ1ziRWJLSYGwA8CNNK8/welwzPHOPWu2El+zE6cwLHrzmL8EARLvvJ2fEK11ZIvF2C3R06uNrA7QFZr7iu6t67osrpfljqbjKQrMECUCUDrBywRvlpaeIlThfA3XByezK2HtbyHD1/xnyQSenUFu/6Zq1EkVdm9iCkbej2KxZSxA6qMl1WcnplBdOqBSmeGGJ0+Ikn3LZ7t4ztqflsug7QYyQlrmI+d0UB8MFWpf6jYjZQwf1rMH5XHFvrWUCi5IbFNJBUPF3n3IfUlrnjUSBEcW3tmodJa16/biK9/iKqh5ImlnpbQgK7CStgQ8ByJqddJre1idCiK/dyR1z+IXHTu4qm24cJeGUk7la4WMG2O5U/otFbXG5wTVgbLsxfXlE6fzxHAzvEftEE1ZPNOBpRZ+LVYEHKFESIz',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:41:15 CET 2007',
+ updateDate: 'Wed Mar 14 17:41:15 CET 2007',
+ accessDate: 'Wed Mar 14 17:41:15 CET 2007'
+ },
+ '6564169ac5bce1a632c602c51e9e5d637bfd4e87c1fa276e2cf65f39405fc4c9': {
+ header: '####',
+ data: 'fs5hydWDsT/FxWTb57K6zYKwVF310zjHHHtRS/AeBN8XZqTcirhV9oxJW6G6TdDkD7nQfWf53AbsivXn46Tx7oarzoU4R+1mz94TRCkEe5X2X7Wa3HbTj38+QwbkomF7np4MUkVc06aRPqkUE5hvSDbGn4SyKCjo/AnGhuW/QJIqnWVj70tf7CNTb+GR/y41JhJd7yk6U3cIP6Imik+DAvM5pE0KqxGLfLs4c1ChuTFNHfiQbYjs3tANqJCO185t4S8UIY5VxMRcnqgRoloFK3uFACIXoyDGG3FjILgxRCw2ePFsrm2Jtxv+JX4BsM+KDk67OsN91rjQnK5vBP72SzSge4EDCKJXYKdA8KJGYNwRIzk5d5ycbZgW4YCizVw8v7sLMn60v7YrDfBwXAJvvlTP1chA7HoE+WALqXkfBW29AOCNodE3eTXbI7iWz3vcWOCPvSm3hho=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:25:28 CET 2007',
+ updateDate: 'Wed Mar 14 19:25:28 CET 2007',
+ accessDate: 'Thu May 10 15:00:47 CEST 2007'
+ },
+ '7674ea33b650e84f9a461a91928bfc259de5549ce905339fc3b23623c6cfd09e': {
+ header: '####',
+ data: 'D7mLcDpylLnklOtIw/kvYX0M+CR6Si2t8CB9bTT3ZR+bTpXP88OtI19g1k9iPEUPdgbtFKPVw4oNmynP3x+pc8R/zzn4v697SvVtQxdF39Jmry5dnB4SMx6oRkuaISs0nxvTrHJe8U+s5ehzvQ2WWxWZ+LaoBWaYR7slgUFKLdJFyWEalPwMPVu//DoLZeWg19n2C/0Sy8u0DGdYHJVserWrQqxxg0h0m0x1wuKhF7IGvqgyJ31T5w00nMHNZbs89cUuqB/2doMgoUD9BqV7F/53AveuBDcdCc6jlEe8NOdoUyMuhwwwTyKONfjY5e5Cu5W9I36o7GpeKlckoKrTIWFO+NLG8XZvP/f2WJCsIOrCk/LI3C+bxBP+bK4tHRH13iXLeJYUlMK4ibcf8WI445qNoggJSbZzGr7Dav23KZWPcxzRxhI2u6j25/kKGnu4kcMB8ke5N+4=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 14:46:36 CET 2007',
+ updateDate: 'Wed Mar 14 14:46:36 CET 2007',
+ accessDate: 'Wed Mar 14 17:40:01 CET 2007'
+ },
+ 'b454ac54afb60c9bb6a1791843aaefadd8483630611c2bbd0ea37658985c62ec': {
+ header: '####',
+ data: 'u9HEcfobxZhG9BY3dVG68ZUYkREFcZ4q1o/xWyt3qje3icA+Nu9yCrZip/4fqe1daUX/MHyzUQdulIfjSwATjj3vvDSPjuGvrtx8oUjJ/K6GFsL366ozi45LkqkOaH02/nVrb+ik2HWIgcne/OzNrwf1mWLJoBF+8ZwQ44xqQK7ikG1mblNWWbZFFQE1B0QPmE/I/1ovm2hAr1ZsNj1l+N96hwGsdsdVFTzn+S7Sg8GTbxEFAxDQkBYEw1k/R8i9EIBndPoDZCebr8vP+c8qSEk/YmBXJ1MGVVvic0/Utn67iNLz9aBnv2z31DvvBj8bIwOxQpB+tom5Ivwe84tFkwwvpxFqYccrEg4bbMcevUo67TBVe+Lb2wzcK0zOr7iHhswbXaLzzOEQ6uF/v2ibTbATP2zNq09AIJjynoSDmrisGHsBrHgeXjiDspc9U70PVC83EsjPRwA=',
+ version: '0.2',
+ creationDate: 'Thu May 10 15:01:21 CEST 2007',
+ updateDate: 'Thu May 10 15:01:21 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:54 CET 2009'
+ },
+ 'e699fa287c2de3d483144b48064a47cd0bc56a436431ce23b48cb8d8c42ce851': {
+ header: '####',
+ data: 'hVD8NOt8g/DIe48JbUUo77e2hMf2UBN6ah23PrIzGTpq0LifC2K/0/s0yeL/PHUOncdT56NccKpF8Fp6EWJqDKoKZPWASuB1vHCEkdbcxlqzqo98VS3A7p2JFwQzSv+5t6y909hhbxobXMCUfZ10HBqGo6TaFc6+pkYqQ/d7MEnj2NuAXC9X9TLLuZSrZ96NCKGr8YVKzxinxHdiF3TdRvIppFByXPlbZ3xiielEnYm6pu/GffW7Hkwd7Vou6jwyggxVqvoVtuAdiIy67l8GX0gQUGipFkvvrAkXfm0sgtWGQvpgDuV/bXq/L5vX/sFpWI2u066lMUOsJQmptNP/Nkp31+ZNk1nCcUIYDDa6vcOy/gRrOFcenPTUQjRkE95KPaCqYBSIWsjoFE0EIB+iBnBCTK3laBSC7pplOtuLCY1YJcJuOkzCVQCVXjhWrNJM77s7a5OyTuE=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:43:29 CET 2007',
+ updateDate: 'Wed Mar 14 17:43:29 CET 2007',
+ accessDate: 'Wed Mar 14 19:23:51 CET 2007'
+ }
+ }
+ },
+ 'f215d89bf4583c12f5ed4f4330f488dad3fffa448f4dc784f15ef135dda2c732': {
+ data: 'vxOgJv/v3pP8GFqbFLTcgtBqw8V3zhCN9rRXUuWAfatABtr3pySWvt74ITeGw+sDtApBsu+zTY/95BFVtK3y0QJkC5cjJYhLDwvMwpqa0lRfCXWSYmuEhbPETwkW1MN0kAEOMqsUD9cQCH9GDD4A17W89AoTG5Ce//X03YBG0cDjbotgENsWjQpK88LXABHBQAoTF0BPDjN+xai2QPCgN0l1IVpUzI87oZJS7x/4r6DjGTOgcc3+vtEujr+8dGNaq9xTEfAFs1kv6GMeT+R/VkIQLVO+vSxi2fd+954EAXQplt047+aZ3c0c78N6B+GhSi9DgNnbTLu6sl332Zdgo9R09uucS8nvRp3HcTzxriKpx0ZMDh9K9ig5NT9Z2H49pDjCJKTukDU7b2ktOEUNZt58s+uIlw1bMFY1TMETGAHbTq+hld8Szg8f7nJGDQF10kV2ykVEQ2oUBMC9y9VCLyYD0BWId6DUcTNXyI+MqAC4j8pp0NhURY8VSjtnV4Rlq+b48ahP/ifJdq+xrSiT9ykGqc/EyebC1uCTIZewk9MtIAndVYPckMIe0xQ2xhX6/m2bdNboVa3dnS5eKFdbd++un6FD+QAjgtcBkXQnwfptottZoghclKL5h5gPePCQL/66CLYy5+3xctfCG9u+VkH97JKL2hW+XZ/KuxLPFkIAYmbFKsNdIizfpbk5WJvoSzacpo1mwNjZ53zn9xhy/VkSIz3lGl83a6FyoHuR9VklyhTaKrj2JNWzjLaQPiR9Sv2eFNjLTivxtxLwKae5Tz14WU2QlXATC5xdcLeF9nK7yYVarcKlRsYkkvetrVpRiWUVfy9mZQIHOWJtY5AcptKso2Q0v4CuD1C/wV18DMDXzwMXeOq0cKxCsZOuWjO6RwWKzfeZnJ99S+EsFmdI/wxqiu9slJ0xXvgLvjiJhJ03qWwZV45peU1qmvKQrXS80QqLp3kUfRGLbZNOvkZbyf5OK96MA7lok8PuCZGg5jZHFX4B3vxSQ32P7VGSWO5CqHpF45YwtlONZKB0cuvKTRazZ+B2zJfwMYRQloj6sL5501oPqmjVtDg+0aoqKe5DmTf+fHV4FwAxQ8RuW7/BVL+lwf+zjtd31I/yrlDdb/Scs6yayLV026yuHxdQRl+ByogtrXbY4ViuU3NCkVrme7K7meRHnQdXyidhjzHdoJnRPa0IoI4VW3VwWNENRRNDTta2whOdIKsQYtscWBWZnQplRmDChGikERYQVCWejDNgvnbnGrlyQYPF0/vcv6PoDpIvh7Pze9y0MLBU8DnWqAhpdqHPNVdjdq51OKlSitUk5TSN9kxePe0KNFZueLjxZHUFIZ+SIkTxoCoaRWYMJIWvYkcT5S9Y/7NbdapuUaLZNGDc6tgD+LVYRRvGEdPWaOHb7G+qOmdtx8vYxZUqq5mtwnIBRzEllTJyKwwK/kOfAxiRjLxf7SOXsubPuA7bHR9fI5rROSR5rcU+nOfSV9Wf4wZkYBlSmQYqzQfmwl0UCiipJVa1DwYwLimgo2RqhI0M38gEH+mrknnevE8zlUIaEWzxoOnyWbtCecakXS2XvE9j64dswJ3bbeQ3fDQr1308x9qKSjFdDl3eNcJx2e9YwC7wZnTmHeHzRXnZwXsJXqMPDQV99wEDBr71BjlDjMx7vG9bOWrhsyJ37EOvO2X41Ij3j0X4MYpbNgxBFP6zJSu3gILrtqQRpQq6mQJ1bWHyCN1ge1zKNT9pG6rGTRPE9LqHROQuROpgFM1R+DqW4XnGOBYSOtznnsnj5fxfdpGeFq+v/ftvVuN5XsgX6dnT8R77iNUs86Iz2mkxLaQokkNzXl5o1rnQIse9+kcKVZ72mf5SG9s9DD7cZ7bOtmkuZCexJpieIosqLV8jc0IA',
+ version: '0.3',
+ creationDate: 'Wed Mar 14 17:39:39 CET 2007',
+ updateDate: 'Wed Feb 13 15:29:04 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:41 CET 2009',
+ currentVersion: '6cc9ed382347f8ac5b5073f459428897d36cc9913947d003da874dfaee5a7b74',
+ versions: {
+ '33ce5a03b6d36f59d0fbc9445dd01a515cb56eccc6d854cffbf8aa66f3e4a45f': {
+ header: '####',
+ data: 'pwMmqFOwpW/uSys3hm/AcoERF3eDj4dO+O5SdYsR2mJtmEfXcjhS9altLhVOsck0KMQJdxE3rNDFbduF35yVetXuQrrL+bSRlXMq03EXETyrRzIVhFEM4BjoCSS9nKGgixp04Ve9WSuwD4cXRmcN/L9kCJSCqflXqhkYkjAywQoj1KxHPdAqMaGRpEWioUIfX+NiWbO/qtOu/USAhHmWFXla6/A9kKQeU2d+P3zl9KF2Zm8qm8NXjPKmh2dkd70ATbdzxt9P3BafoRf/Ud8zLIVdQYTbv0pn6UMIiUDRK1ryvgfSY180zg4qkP5pBnxhEgOxbjT8JO6hCl8n2jUCRJLdUXHwgpeuHcKYDyZizc+p9Kbc4+d8K/2UEKgSR6gza6Cpw5TQbZQq+2LxWUoVb3HM3lTqBKUPM0FdY2/3twZm/1bI1uBMPnyp9x/JsQV+xOpu0ZulTA==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:39:39 CET 2007',
+ updateDate: 'Wed Mar 14 17:39:39 CET 2007',
+ accessDate: 'Tue Apr 17 19:09:44 CEST 2007'
+ },
+ '686ea579db132287e8e322194652ec57cba6e60274c00f734db7a0b36702c817': {
+ header: '####',
+ data: 'ilf8U30hSq2mqje9kZkKQAMiEFV0aptXrm8fOtoOR8pp36V29kXyUX6FEOh5eXSRr/jbqGytxKENJeAGxnsv5U+8GgbvlYaR4MPM8lbKcpAoBCc0+CCOiwnp4XCoXFCNttbTzfb6qgR7wqdK7YLnrvfzJieQqJukQZvtWtsVZB/Tis+5niomz8Ca8lo/FjFOIjAq6xtwrW4CS12+yZdTKNbj8e+HwoUcesF9RbCKQlpVHuwhZ/8ghdzDgjEE8z44rDepEv3Lx/aUi+67velLH3j+1crnxBUz7wP/dWzftwWgIxDkCR/vW63yY2Xebt77swDg8g1Qj5OJdYiAq231HKaZjxr10y88JI5HC1EvbbduDN6pknKUgM+qEdojpi2BmjK+9MtV7sVhJoWqwHG8q9z03kgGoFnWEb53HyMVes1n6HYfzwnw+idPFWGZJ4IB25WfJLfQuQ==',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:12:39 CEST 2007',
+ updateDate: 'Tue Apr 17 19:12:39 CEST 2007',
+ accessDate: 'Wed Feb 13 15:27:04 CET 2008'
+ },
+ '6cc9ed382347f8ac5b5073f459428897d36cc9913947d003da874dfaee5a7b74': {
+ header: '####',
+ data: 'l18dnf2TRfinuu9KDraIo41yvG3mNFqiSCOkyMI6WZZD4RnF8R2Ob19fJ8zXv04eDx7TYyyGP1IlFWEdT3LBrOmmbtUmIvtYanIfKTkT6UGHNH2jh1HyHqJbpgIlr67mOm6Es/AgF44BiyJrk5R1y9tA90oeUQynMufiM2MFLpdalDYWEh+W7GV9WCmbBIU/soioTJ1ep2gvy4kJvTSrXENaxHevKfYwn8ucocvY+hjkWB4GWOR40qtaG06wWMLeRsrTBH1jBG9srzbBa4u2IQ0+NJjQrYdiu7nfu6Uyu7Ya/4bxV3Sukao91XvXSFIhcI2OuKl0njUshv6BDEfHwXIQuPtn7KaTx2uYl1pUeTv/tAFvf8Ng9OFNgK0siIMkeg1thFwRiGSmxjP0QZipDtcCekIxj2k=',
+ version: '0.3',
+ creationDate: 'Wed Feb 13 15:29:04 CET 2008',
+ updateDate: 'Wed Feb 13 15:29:04 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:41 CET 2009'
+ },
+ '7ee6a662d1980467eea86a58cd7299ee02000740693df2a7ab9dd64347dbbaa4': {
+ header: '####',
+ data: 'ZnwtGdkg72+TQKCJQhZQIqP9sz79FcptnmH8VJEDQY9xTburh4cyhgbgROBis+awp1C5OyiAAoWfPnuRAN8Ai3d9f8M8yjnDGJ4BAJ6OjQ5r4RDQxNycCApXWO3mJpBrx56wMsCVWT6Z8a4khzPrf5HlDtus4lRV4GRdhU9FMpwuaCfgVD38MhlYXDaPgyu/8N+6eQHuFxquXjOJmptfO6tVhP1+/tEHo6iUAX3sXMZAionssRgPllQJxfzrsu7GQk3h66PakRzgStTHUCcdyoEe9c4VnvUgaasTbhENA4x8xPrxjo24zwxfFpWNEb1+pe8N3+dOXTsIdd3CMKrxQ5KkwzyN/Bj9jXNk9YX8PC0geJiR3bCGtPsAd7aEFB7E6y0RVX/RL5f6x0utSYw8mg6lfprlr5A=',
+ version: '0.3',
+ creationDate: 'Wed Feb 13 15:28:28 CET 2008',
+ updateDate: 'Wed Feb 13 15:28:28 CET 2008',
+ accessDate: 'Wed Feb 13 15:28:28 CET 2008'
+ },
+ 'c860f9bbcab5fa70854212e18c11a3e9bdc2382f91cfbd25636955c443a05f8e': {
+ header: '####',
+ data: '1rztZ6mKVFVjlL1kEoUsXEMketdElGbOpYK9iy3g1/WeMcTd4D/UjgHvmQHzzNuYJc/yx6cCMMU9dofLe3vWLKhqDAPAVCo49qiH527hP9rQE+0SNO1v2Ymk80hL/gqBfju51bIYxPKAD0uYA+GMX7OdL+S7qdealebERcnVa0K1AHiVU8lu5yIKk55U8zwitk0u86J1zwcraiM3RGXir/x3oZRIKDwT+lhUJPr8GbVjgKlPu07Ii8OdrAGdHefETDlyNnaKPJHTbGXkd3HZ2CYhJCQZGn1Hwfs46iRd5aO+3UErYtgIHl6CXuXd4E+DNW4UJZedP9YV860DBkpqMiQokEMYTh8Y2sOUyf3ZEOshfGvJUhj8O5p7rNm4+2BYO3XhREdV39tn4vUj56wYj+GL5CekEl0c4Mx7ViTQA+gLvk52V2w/5gFyFNQ9U+jUQpb2n+d9cw==',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:11:33 CEST 2007',
+ updateDate: 'Tue Apr 17 19:11:33 CEST 2007',
+ accessDate: 'Tue Apr 17 19:11:33 CEST 2007'
+ }
+ }
+ },
+ 'fe21497ef7435d31f9746c132e4b5ecf5aac5f13b5961ddb55d2bdc3409f28f6': {
+ data: '4zgqvaaWm7nJO09LKN6o5hbWwGzOv7VVmXDu5T+JCHTSOXbteogax2Zrv0uKLkfooGFThJBk0rXfXxE64vMOq3AeHXGw7Chg7hz8Z2Lpjr4FfE6q7Em7UuAlAuL1PiyXXJJK5iSsRY9tkizuYl19aXW+CgpPznYD/PyXgeYxqt9WLqK8cl5iAU87R0cQDhwl16ivzVgiiFeaB6B5FQqWBAHCEgXhqTsaw2gv4snbmPOqcUZbHy/Vb9hv4lPBJwGFNxQzeZUad92VBC8YbIjmbohDsXjteqD2/k1qOgpUB/U5BpyVwsi+5ahgb8gbS+AqYoRDYzkaj83ksPI4JzWyZhpqjhDauaI6M7hGnJ4GB8UZc0M3WPgrlf1r+TXCgpcfembqL1MyteM+C+ItPRP/QdaIXxLOmvGFOBKQYEI7UceUWBCSEzORlS2S2lltlqt+K4B8QTULiKaXCfRmF/u60FpJufIkUX0pE/rQVChxswSWvh7uJFDBIDx8MplTX724A7DN5d4/Ad4Yi2cj3V8X/DEErnHTvirP3tZ2F2oAe7kIdu+JuCqKcMaGB4hVijzv+yim2TCPvrGTFaMmg9PvcWHpik9jEIabCkdqAR8EGIkD29+yvG4vD0DTRKv2vPIfr60ZQnsgs8nlPPoNa6lNHvI/EO0nBGBYBc1TW+syV5h/zOG3rHX0XCHhISZmDMjra7eUETWChncR88P7ciC4yJQtzXFGzeXp2ktzZ8m5g1EQfgtlUVZsHN8e4OQ9DjKt0unfq5RFBj2jlG8TBZn6ZpebxWR2qOxp81KQLHJND9zRTy3h65+k5wo3MnnxE3GbeXg2dFIORRvGUT6bWsqW1fqR/pg1GO8KNtrt3CryZofgE52kuk6hlcmSk9974JR5523+1/hbts8n5VrTi1C6GWhnxpiJb1XIvICdag5g7C2iYppzLKVzbJcFMegwDUrapbmGhkqnGwSY1EQSDyagPr2xlziWhdWdCOVAYcyw8dOpdD97QhVef0OWrJ8nbgFKD6wn21475OFxooheWiMCyZwXqESVG1cVCjeaCsymBtEVPpmQdSkOfMdXpKVF+3osb4K2XDpPeU1zPWVozeMp68YhLztQ/g==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 18:43:29 CET 2007',
+ updateDate: 'Wed Mar 14 18:43:29 CET 2007',
+ accessDate: 'Mon Jan 19 16:09:30 CET 2009',
+ currentVersion: '1b12c771a7f5f13d13f12016ad4132e9707be2ff00d72f77356204f0f86fc08a',
+ versions: {
+ '1b12c771a7f5f13d13f12016ad4132e9707be2ff00d72f77356204f0f86fc08a': {
+ header: '####',
+ data: 'QfC77EWgmmnxz9JqLdn9Tw7mNztfQZPdNpaML03EdFpphsjgLloqBRX0UZ21oozjQGHpcUMMOsaJgzCuDlfh7T7ePVV60Ps4AJtzv7bHSVGKsj1iALU1qjtesOYJayp8bA/3peo4HEnVgP86jc5NTwJxpsUhNG0Ae93xVu4lPF0gL0/yjgZUHqYZXkb+oXrcybL0BSOjRnB9fRpA1dEhcwJwoelLTvg7il354qp/Wo+S9Cz5E/K+xnlJAuSXCRXboWea/ZZ9TX88q5uUcY5jLF7Xi2HoFVZw2f5tbycxwGtT1CKXp+OAKn6mQaBAYM51zoMNDT7MvBDXD3v4Cidjgh24GZ2zndfkYT0kHCtY7OVIVSTsXTR+5/XMedojVvDlX9LBa9ST99NLCUy7Di94rJtX72ev3Ei3I1w3qPvCl3jgD2VbIwLogCzqLtY+2IkLAa8M2EpX/D+h',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 18:43:29 CET 2007',
+ updateDate: 'Wed Mar 14 18:43:29 CET 2007',
+ accessDate: 'Mon Jan 19 16:09:30 CET 2009'
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'syntaxFix': ""
+}
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Connection.html b/frontend/gamma/tests/tests/Clipperz/PM/Connection.html
new file mode 100644
index 0000000..181a3bf
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Connection.html
@@ -0,0 +1,71 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.Connection - test</title>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Signal.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Toll.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Offline.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy/Proxy.Test.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Crypto.js'></script>
+
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.Async.js"></script>
+
+</head>
+<body>
+
+<pre id="test">
+<script type="text/javascript" src="Connection.data.js"></script>
+<script type="text/javascript" src="Connection.test.js"></script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js b/frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js
new file mode 100644
index 0000000..e4d0d15
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Connection.test.js
@@ -0,0 +1,255 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'simple_tests': function () {
+ var deferredResult;
+
+ deferredResult = new Clipperz.Async.Deferred("simple_tests", {trace:false});
+ deferredResult.addCallback(function() {
+ var connection;
+
+ SimpleTest.is(Clipperz.PM.Connection.communicationProtocol.versions['current'], Clipperz.PM.Connection.SRP['1.1'], "the current connection is 1.1");
+
+ connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']();
+ SimpleTest.ok(connection != null, "can create a connection with the 'current' communication protocol");
+
+ SimpleTest.is(connection.proxy(), Clipperz.PM.Proxy.defaultProxy, "the connection uses the defaultProxy if no proxy is specified on the constructor");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'simpleProxy_tests': function () {
+ var deferredResult;
+
+ deferredResult = new Clipperz.Async.Deferred("simple_tests", {trace:false});
+ deferredResult.addCallback(function() {
+ var connection;
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy();
+ connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']({proxy:proxy});
+ SimpleTest.is(connection.proxy(), proxy, "the connection uses the specified proxy, when present");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'login_test': function () {
+ var deferredResult;
+ var connection;
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, shouldCheckExpectedRequests:true});
+ connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']({
+ proxy: proxy,
+ getCredentialsFunction: function() { return {username:'joe', password:'clipperz'}; }
+ });
+
+ deferredResult = new Clipperz.Async.Deferred("login_tests", {trace:false});
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addCallback(function() {
+ proxy.expectedRequests().unshift({
+ name: "First handshake step",
+ functionName: 'handshake',
+ parameters: {
+ parameters: {
+ message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "connect"),
+ version: MochiKit.Base.partial(MochiKit.Base.operator.eq, "0.2"),
+ parameters: {
+ C: MochiKit.Base.partial(MochiKit.Base.operator.eq, "f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674"),
+ A: MochiKit.Base.operator.truth
+ }
+ }
+ }
+ });
+ });
+ deferredResult.addCallback(function() {
+ proxy.expectedRequests().unshift({
+ name: "Second handshake step",
+ functionName: 'handshake',
+ parameters: {
+ parameters: {
+ message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "credentialCheck"),
+ version: MochiKit.Base.partial(MochiKit.Base.operator.eq, "0.2"),
+ parameters: {
+ M1: MochiKit.Base.operator.truth
+ }
+ }
+ }
+ });
+ });
+ deferredResult.addMethod(connection, 'login'/*, 'joe', 'clipperz'*/);
+ deferredResult.addCallback(function(aResult) {
+ SimpleTest.is(aResult.result, 'done', "successfully logged in");
+ })
+ deferredResult.addErrback(SimpleTest.ok, false, "the login procedure should succeed, and NOT going through this code path");
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'login_with_toll_test': function () {
+ var deferredResult;
+ var connection;
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, shouldCheckExpectedRequests:true});
+ connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']({
+ proxy:proxy,
+ getCredentialsFunction: function() { return {username:'joe', password:'clipperz'}; }
+ });
+
+ deferredResult = new Clipperz.Async.Deferred("login_with_toll_test", {trace:false});
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addCallback(function() {
+ proxy.expectedRequests().unshift({
+ name: "knock step",
+ functionName: 'knock',
+ parameters: {
+ requestType: MochiKit.Base.partial(MochiKit.Base.operator.eq, "CONNECT")
+ }
+ });
+ });
+ deferredResult.addCallback(function() {
+ proxy.expectedRequests().unshift({
+ name: "First handshake step",
+ functionName: 'handshake',
+ parameters: {
+ parameters: {
+ message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "connect"),
+ version: MochiKit.Base.partial(MochiKit.Base.operator.eq, "0.2"),
+ parameters: {
+ C: MochiKit.Base.partial(MochiKit.Base.operator.eq, "f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674"),
+ A: MochiKit.Base.operator.truth
+ }
+ },
+ toll: {
+ targetValue: MochiKit.Base.operator.truth,
+ toll: MochiKit.Base.operator.truth
+ }
+ }
+ });
+ });
+ deferredResult.addCallback(function() {
+ proxy.expectedRequests().unshift({
+ name: "Second handshake step",
+ functionName: 'handshake',
+ parameters: {
+ parameters: {
+ message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "credentialCheck"),
+ version: MochiKit.Base.partial(MochiKit.Base.operator.eq, "0.2"),
+ parameters: {
+ M1: MochiKit.Base.operator.truth
+ }
+ },
+ toll: {
+ targetValue: MochiKit.Base.operator.truth,
+ toll: MochiKit.Base.operator.truth
+ }
+ }
+ });
+ });
+ deferredResult.addMethod(connection, 'login'/*, 'joe', 'clipperz'*/);
+ deferredResult.addCallback(function(aResult) {
+ SimpleTest.is(aResult.result, 'done', "successfully logged in");
+ })
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'getUserDetails_test': function () {
+ var deferredResult;
+ var connection;
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, shouldCheckExpectedRequests:false});
+ connection = new Clipperz.PM.Connection.communicationProtocol.versions['current']({
+ proxy:proxy,
+ getCredentialsFunction: function() { return {username:'joe', password:'clipperz'}; }
+ });
+
+ deferredResult = new Clipperz.Async.Deferred("getUserDetails_test", {trace:false});
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(connection, 'login'/*, 'joe', 'clipperz'*/);
+ deferredResult.addCallback(function(aResult) {
+ SimpleTest.is(aResult.result, 'done', "successfully logged in");
+ });
+ deferredResult.addMethod(proxy, 'setShouldCheckExpectedRequests', [
+ {
+ name: "Get user details",
+ functionName: 'message',
+ parameters: {
+ parameters: {
+ message: MochiKit.Base.partial(MochiKit.Base.operator.eq, "getUserDetails"),
+ srpSharedSecret: MochiKit.Base.operator.truth
+ },
+ toll: {
+ targetValue: MochiKit.Base.operator.truth,
+ toll: MochiKit.Base.operator.truth
+ }
+ }
+ }
+ ]);
+ deferredResult.addMethod(connection, 'message', 'getUserDetails');
+ deferredResult.addCallback(function(aResult) {
+ SimpleTest.ok(aResult['header'] != null, "got user details - header");
+ SimpleTest.ok(aResult['statistics'] != null, "got user details - statistics");
+ SimpleTest.ok(aResult['version'] == '0.3', "got user details - version");
+ });
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+//#############################################################################
+
+SimpleTest.runDeferredTests("Clipperz.PM.Connection", tests, {trace:false});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Crypto.html b/frontend/gamma/tests/tests/Clipperz/PM/Crypto.html
new file mode 100644
index 0000000..f95e994
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Crypto.html
@@ -0,0 +1,281 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.Crypto - TEST</title>
+
+ <script>
+ jslog_config_enabled = true;
+ clipperz_profiling_enabled = true;
+ </script>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../js/JSON/json2.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/DomHelper.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/DOM.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Profile.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Crypto.js'></script>
+
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.Async.js"></script>
+<!--
+ <script>
+ MochiKit.DOM.addLoadEvent(MochiKit.Base.partial(MochiKit.LoggingPane.createLoggingPane, true));
+ MochiKit.Logging.logger.useNativeConsole = true;
+ </script>
+-->
+</head>
+<body>
+<pre id="test">
+
+<script type="text/javascript">
+
+
+Clipperz_PM_Crypt_test = function() {
+ var key;
+
+ var plainData;
+ var encryptedData;
+ var decryptedData;
+
+ var result;
+ var expectedResult;
+
+ var plainText;
+ var longPlainText;
+
+ key = 'trustno1';
+
+ plainText = "Lorem ipsum dolor sit amet";
+ longPlainText = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec nunc sapien, condimentum vitae, varius vel, pharetra in, augue. Mauris quam magna, pretium sit amet, accumsan id, volutpat lobortis, nibh. Fusce sagittis. Aenean justo. Curabitur euismod pede. Morbi at ante. Proin nisl leo, ultrices sed, facilisis et, nonummy sit amet, lorem. Praesent mauris tellus, pulvinar sed, nonummy vitae, rhoncus non, nunc. Proin placerat malesuada nisl. Nunc id enim. Maecenas commodo enim ac nibh. Sed condimentum, urna sit amet euismod gravida, mi urna varius odio, luctus pretium lectus justo nec felis. Ut in augue et est malesuada rhoncus. Sed vel orci. Mauris suscipit. Praesent cursus velit non turpis. Donec tristique dolor ac est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla est sapien, vulputate eget, bibendum id, pharetra nec, mauris. Aliquam faucibus tincidunt dui. Proin iaculis. Maecenas sagittis. Integer et augue. Donec vitae urna in orci aliquet commodo. Vestibulum lorem sem, suscipit ac, placerat nec, mollis in, felis. Donec laoreet odio a mauris. Integer rutrum, sapien id varius molestie, mauris odio egestas orci, non bibendum sem felis in metus. Phasellus consectetuer lectus adipiscing mauris. Ut magna tellus, euismod ac, suscipit tincidunt, ullamcorper adipiscing, massa. Etiam orci. Phasellus a urna. Cras neque quam, laoreet at, tempus eget, euismod nec, nibh. Etiam hendrerit. Aenean vel lorem. Ut ligula lacus, congue eu, lobortis sit amet, venenatis in, magna. Nullam cursus felis quis est. Sed sem est, condimentum eu, vestibulum a, mattis vel, diam. Curabitur tincidunt pede quis pede. Sed neque diam, convallis vel, luctus at, porta id, nisl. Suspendisse potenti. Sed volutpat lobortis orci. Praesent mi. In interdum. Suspendisse suscipit ipsum eget dolor. Curabitur et tellus sed velit hendrerit varius. Cras sit amet est. Donec arcu nulla, vehicula et, pretium in, placerat id, felis. Integer mollis auctor lectus. Integer ultrices elementum sapien. Nam et erat. Nam pulvinar porta tortor. Nam at risus. Quisque nulla. Integer vestibulum, lacus id bibendum laoreet, ligula mi pharetra lorem, sit amet pharetra felis mauris quis justo. Aliquam ultricies. Duis a pede eget lorem dapibus rhoncus. Aenean eu elit non libero consectetuer viverra. Maecenas velit mi, eleifend vel, malesuada vel, condimentum quis, odio. Mauris tempus augue sed turpis. Pellentesque condimentum, lacus vitae pellentesque ultricies, risus tellus posuere nisi, et dictum turpis pede nec elit. Sed eu lectus eu justo sagittis euismod. Vestibulum lobortis, urna id mollis rhoncus, orci quam euismod ligula, at malesuada lacus magna vitae massa. Phasellus mattis fermentum velit. Nulla vulputate consequat enim. Maecenas quis neque. Curabitur sagittis facilisis neque. In elementum, eros non porttitor rhoncus, libero turpis sodales odio, vitae porta tellus purus et ante. Nullam molestie sollicitudin metus. Donec a elit. Morbi ut lacus. Donec at arcu. Quisque velit diam, interdum a, lacinia at, varius et, odio. Cras neque magna, ornare id, sollicitudin id, consequat a, est. Phasellus vestibulum est at leo. Nam facilisis, nulla dapibus condimentum pellentesque, est magna viverra ligula, at sollicitudin urna augue ut sapien. Fusce justo.";
+
+ //
+ // hashing
+ //
+ plainData = new Clipperz.ByteArray(plainText);
+
+ result = Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].hash(plainData);
+ is(result.length(), (256/8), "encryptingFunctions.versions[0.1].hash generate a 256 bit signature with a short text");
+
+ result = Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].hash(plainData);
+ is(result.length(), (256/8), "encryptingFunctions.versions[0.2].hash generate a 256 bit signature with a short text");
+
+
+ plainData = new Clipperz.ByteArray(longPlainText);
+
+ result = Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].hash(plainData);
+ is(result.length(), (256/8), "encryptingFunctions.versions[0.1].hash generate a 256 bit signature with a long text");
+
+ result = Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].hash(plainData);
+ is(result.length(), (256/8), "encryptingFunctions.versions[0.2].hash generate a 256 bit signature with a long text");
+
+
+ //
+ // encrypting / decripting
+ //
+ plainData = plainText;
+
+ encryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].encrypt(key, plainData);
+ decryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].decrypt(key, encryptedData);
+ is(plainData.toString(), decryptedData.toString(), "encryptingFunctions.versions[0.1] of encrypt/decrypt functions work with a short text");
+
+ encryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].encrypt(key, plainData);
+ decryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].decrypt(key, encryptedData);
+ is(plainData.toString(), decryptedData.toString(), "encryptingFunctions.versions[0.2] of encrypt/decrypt functions work with a short text");
+
+//console.time("encrypt-256-short");
+ encryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].encrypt(key, plainData);
+//console.timeEnd("encrypt-256-short");
+//console.time("decrypt-256-short");
+ decryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].decrypt(key, encryptedData);
+//console.timeEnd("decrypt-256-short");
+ is(plainData.toString(), decryptedData.toString(), "encryptingFunctions.versions[0.3] of encrypt/decrypt functions work with a short text");
+
+
+ plainData = longPlainText + longPlainText + longPlainText + longPlainText + longPlainText + longPlainText + longPlainText + longPlainText;
+
+/*
+ encryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].encrypt(key, plainData);
+ decryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.1'].decrypt(key, encryptedData);
+ is(plainData, decryptedData, "encryptingFunctions.versions[0.1] of encrypt/decrypt functions work with a long text");
+
+ encryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].encrypt(key, plainData);
+ decryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.2'].decrypt(key, encryptedData);
+ is(plainData, decryptedData, "encryptingFunctions.versions[0.2] of encrypt/decrypt functions work with a long text");
+
+ encryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].encrypt(key, plainData);
+ decryptedData = Clipperz.PM.Crypto.encryptingFunctions.versions['0.3'].decrypt(key, encryptedData);
+ is(plainData, decryptedData, "encryptingFunctions.versions[0.3] of encrypt/decrypt functions work with a long text");
+*/
+
+ {
+ var deferredResult;
+ var startTime;
+// var nonce;
+
+// nonce = new Clipperz.ByteArray("0x00000000000000000000000000000000");
+ plainData = plainData + plainData + plainData + plainData + plainData + plainData + plainData + plainData;
+MochiKit.Logging.logDebug("plainData length: " + plainData.length);
+ startTime = new Date();
+
+ deferredResult = new MochiKit.Async.Deferred();
+
+ deferredResult.addCallback(function() {
+ return Clipperz.PM.Crypto.deferredEncrypt({key:key, value:plainData, version:'0.3'});
+// return Clipperz.PM.Crypto.encrypt(key, plainData, '0.3' / *Clipperz.PM.Crypto.encryptingFunctions.currentVersion* /);
+ });
+ deferredResult.addCallback(function(aResult) {
+ MochiKit.Logging.logDebug("encrypting: " + (new Date() - startTime));
+ startTime = new Date();
+ return aResult;
+ });
+ deferredResult.addCallback(MochiKit.Async.wait, 1);
+ deferredResult.addCallback(function(aResult) {
+ MochiKit.Logging.logDebug("pause: " + (new Date() - startTime));
+ startTime = new Date();
+ return aResult;
+ });
+ deferredResult.addCallback(function(anEncryptedValue) {
+ return Clipperz.PM.Crypto.deferredDecrypt({key:key, value:anEncryptedValue, version:'0.3'});
+ });
+ deferredResult.addCallback(function(aResult) {
+ MochiKit.Logging.logDebug("decrypting: " + (new Date() - startTime));
+ startTime = new Date();
+ return aResult;
+ });
+ deferredResult.addCallback(MochiKit.Async.wait, 1);
+ deferredResult.addBoth(function(aDecryptedValue) {
+ is(plainData, aDecryptedValue, "deferredEncript/deferredDecript functions work with a long text");
+ });
+
+
+
+/*
+ deferredResult.addCallback(function(aResult) {
+ var i,c;
+ var currentChar;
+ var unicode;
+
+ unicode = 150;
+
+ c = 100000;
+ startTime = new Date();
+ for (i=0; i<c; i++) {
+ currentChar = String.fromCharCode(unicode+1);
+ }
+ MochiKit.Logging.logDebug("String.fromCharCode: " + (new Date() - startTime));
+ });
+
+ deferredResult.addCallback(function(aResult) {
+ var i,c;
+ var currentByte;
+ var unicode;
+
+ currentByte = 150;
+
+ c = 100000;
+ startTime = new Date();
+ for (i=0; i<c; i++) {
+ unicode = (currentByte & 0x0f) << (6+6);
+ }
+ MochiKit.Logging.logDebug("(currentByte & 0x0f) << (6+6): " + (new Date() - startTime));
+ });
+
+ deferredResult.addCallback(function(aResult) {
+ var i,c;
+ var currentByte;
+ var byteArray;
+
+ currentByte = 150;
+
+ byteArray = new Clipperz.ByteArray(plainData);
+ c = byteArray.length();
+ startTime = new Date();
+ for (i=0; i<c; i++) {
+ currentByte = byteArray.byteAtIndex(i);
+ }
+ MochiKit.Logging.logDebug("byteAtIndex: " + (new Date() - startTime));
+ });
+*/
+
+ deferredResult.addBoth(function() {
+ SimpleTest.ok(true, "COMPLETED all tests");
+ SimpleTest.finish();
+ })
+
+ deferredResult.callback();
+ }
+
+ SimpleTest.waitForExplicitFinish();
+}
+
+//#############################################################################
+
+try {
+ MochiKit.Signal.connect(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'readyToGenerateRandomBytes', Clipperz_PM_Crypt_test);
+
+ Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+ SimpleTest.waitForExplicitFinish();
+} catch (err) {
+
+ var s = "test suite failure!\n";
+ var o = {};
+ var k = null;
+ for (k in err) {
+ // ensure unique keys?!
+ if (!o[k]) {
+ s += k + ": " + err[k] + "\n";
+ o[k] = err[k];
+ }
+ }
+ ok ( false, s );
+}
+
+</script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Crypto_performanceEvaluation.html b/frontend/gamma/tests/tests/Clipperz/PM/Crypto_performanceEvaluation.html
new file mode 100644
index 0000000..094a58d
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Crypto_performanceEvaluation.html
@@ -0,0 +1,153 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.Crypt - Performance evaluation - TEST</title>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Crypto.js'></script>
+
+<!--< script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES_other_implementation.js'>< /script> -->
+
+</head>
+<body>
+<pre id="test">
+
+<script type="text/javascript">
+
+try {
+ var key;
+ var shortText;
+ var longText;
+ var veryLongText;
+ var byteArray;
+ var plainText;
+ var encryptedText;
+ var decryptedText;
+ var startTime, endTime;
+ var startTime1, endTime1;
+ var ClipperzCryptoVersion;
+ var i,c;
+
+ ClipperzCryptoVersion = '0.3';
+ Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+ key = 'trustno1';
+
+ shortText = "Lorem ipsum dolor sit amet";
+ longText = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec nunc sapien, condimentum vitae, varius vel, pharetra in, augue. Mauris quam magna, pretium sit amet, accumsan id, volutpat lobortis, nibh. Fusce sagittis. Aenean justo. Curabitur euismod pede. Morbi at ante. Proin nisl leo, ultrices sed, facilisis et, nonummy sit amet, lorem. Praesent mauris tellus, pulvinar sed, nonummy vitae, rhoncus non, nunc. Proin placerat malesuada nisl. Nunc id enim. Maecenas commodo enim ac nibh. Sed condimentum, urna sit amet euismod gravida, mi urna varius odio, luctus pretium lectus justo nec felis. Ut in augue et est malesuada rhoncus. Sed vel orci. Mauris suscipit. Praesent cursus velit non turpis. Donec tristique dolor ac est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla est sapien, vulputate eget, bibendum id, pharetra nec, mauris. Aliquam faucibus tincidunt dui. Proin iaculis. Maecenas sagittis. Integer et augue. Donec vitae urna in orci aliquet commodo. Vestibulum lorem sem, suscipit ac, placerat nec, mollis in, felis. Donec laoreet odio a mauris. Integer rutrum, sapien id varius molestie, mauris odio egestas orci, non bibendum sem felis in metus. Phasellus consectetuer lectus adipiscing mauris. Ut magna tellus, euismod ac, suscipit tincidunt, ullamcorper adipiscing, massa. Etiam orci. Phasellus a urna. Cras neque quam, laoreet at, tempus eget, euismod nec, nibh. Etiam hendrerit. Aenean vel lorem. Ut ligula lacus, congue eu, lobortis sit amet, venenatis in, magna. Nullam cursus felis quis est. Sed sem est, condimentum eu, vestibulum a, mattis vel, diam. Curabitur tincidunt pede quis pede. Sed neque diam, convallis vel, luctus at, porta id, nisl. Suspendisse potenti. Sed volutpat lobortis orci. Praesent mi. In interdum. Suspendisse suscipit ipsum eget dolor. Curabitur et tellus sed velit hendrerit varius. Cras sit amet est. Donec arcu nulla, vehicula et, pretium in, placerat id, felis. Integer mollis auctor lectus. Integer ultrices elementum sapien. Nam et erat. Nam pulvinar porta tortor. Nam at risus. Quisque nulla. Integer vestibulum, lacus id bibendum laoreet, ligula mi pharetra lorem, sit amet pharetra felis mauris quis justo. Aliquam ultricies. Duis a pede eget lorem dapibus rhoncus. Aenean eu elit non libero consectetuer viverra. Maecenas velit mi, eleifend vel, malesuada vel, condimentum quis, odio. Mauris tempus augue sed turpis. Pellentesque condimentum, lacus vitae pellentesque ultricies, risus tellus posuere nisi, et dictum turpis pede nec elit. Sed eu lectus eu justo sagittis euismod. Vestibulum lobortis, urna id mollis rhoncus, orci quam euismod ligula, at malesuada lacus magna vitae massa. Phasellus mattis fermentum velit. Nulla vulputate consequat enim. Maecenas quis neque. Curabitur sagittis facilisis neque. In elementum, eros non porttitor rhoncus, libero turpis sodales odio, vitae porta tellus purus et ante. Nullam molestie sollicitudin metus. Donec a elit. Morbi ut lacus. Donec at arcu. Quisque velit diam, interdum a, lacinia at, varius et, odio. Cras neque magna, ornare id, sollicitudin id, consequat a, est. Phasellus vestibulum est at leo. Nam facilisis, nulla dapibus condimentum pellentesque, est magna viverra ligula, at sollicitudin urna augue ut sapien. Fusce justo.";
+ veryLongText = "";
+ c = 100;
+ for (i=0; i<100; i++) {
+ veryLongText += longText;
+ }
+ nonce = new Clipperz.ByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+
+
+ //--------------------------------------------------------------
+ //
+ // longText encryption performance
+ //
+ //--------------------------------------------------------------
+
+ plainText = longText;
+
+startTime = new Date();
+ encryptedText = Clipperz.PM.Crypto.encryptingFunctions.versions[ClipperzCryptoVersion].encrypt(key, plainText, nonce);
+endTime = new Date();
+//console.log("[1] encryption time: " + (endTime - startTime));
+ is((endTime - startTime < 350), true, "[1] Need to improve some more (" + (endTime - startTime) + ")");
+ is(encryptedText, "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", "encrypted text");
+ decryptedText = Clipperz.PM.Crypto.encryptingFunctions.versions[ClipperzCryptoVersion].decrypt(key, encryptedText);
+ is(decryptedText, plainText, "encrypt <-> decrypt works (specifying the nonce)");
+
+startTime = new Date();
+ encryptedText = Clipperz.PM.Crypto.encryptingFunctions.versions[ClipperzCryptoVersion].encrypt(key, plainText);
+endTime = new Date();
+//console.log("[2] encryption time: " + (endTime - startTime));
+ is((endTime - startTime < 350), true, "[2] Need to improve some more (" + (endTime - startTime) + ")");
+ decryptedText = Clipperz.PM.Crypto.encryptingFunctions.versions[ClipperzCryptoVersion].decrypt(key, encryptedText);
+ is(decryptedText, plainText, "encrypt <-> decrypt works");
+
+ //--------------------------------------------------------------
+ //
+ // veryLongText encryption performance
+ //
+ //--------------------------------------------------------------
+/*
+ plainText = veryLongText;
+
+startTime = new Date();
+ encryptedText = Clipperz.PM.Crypto.encryptingFunctions.versions[ClipperzCryptoVersion].encrypt(key, plainText);
+endTime = new Date();
+//console.log("[3] encryption time: " + (endTime - startTime));
+ is((endTime - startTime < 35000), true, "[3] Need to improve some more (" + (endTime - startTime) + ")");
+ decryptedText = Clipperz.PM.Crypto.encryptingFunctions.versions[ClipperzCryptoVersion].decrypt(key, encryptedText);
+ is(decryptedText, plainText, "encrypt <-> decrypt works");
+*/
+
+//#############################################################################
+
+} catch (err) {
+
+ var s = "test suite failure!\n";
+ var o = {};
+ var k = null;
+ for (k in err) {
+ // ensure unique keys?!
+ if (!o[k]) {
+ s += k + ": " + err[k] + "\n";
+ o[k] = err[k];
+ }
+ }
+ ok ( false, s );
+}
+
+</script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Crypto_test.html b/frontend/gamma/tests/tests/Clipperz/PM/Crypto_test.html
new file mode 100644
index 0000000..f5b0a60
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Crypto_test.html
@@ -0,0 +1,169 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.Crypto - TEST</title>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+
+ <script type='text/javascript' src='../../../../js/JSON/json2.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/DomHelper.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/DOM.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Crypto.js'></script>
+
+
+<!-- ================================================================================ --> <script>
+//MochiKit.DOM.addLoadEvent(MochiKit.Base.partial(MochiKit.LoggingPane.createLoggingPane, true));
+//MochiKit.Logging.logger.useNativeConsole = true;
+
+//-----------------------------------------------------------------------------
+
+encodePassword = function (anEvent) {
+ var username;
+ var password;
+ var encodedPassword;
+ var srpConnection;
+
+ anEvent.stop();
+
+ srpConnection = new Clipperz.PM.Connection.SRP['1.1']();
+
+ username = MochiKit.DOM.getElement('username').value;
+ passphrase = MochiKit.DOM.getElement('passphrase').value;
+ encodedPassword = srpConnection.normalizedCredentials({'username':username , 'password':passphrase })['password'];
+
+ MochiKit.DOM.getElement('encodedPassword').value = encodedPassword;
+}
+
+//-----------------------------------------------------------------------------
+
+decryptData = function (anEvent) {
+ var deferredResult;
+ var key;
+ var version;
+ var value;
+
+ key = MochiKit.DOM.getElement('key').value;
+ version = MochiKit.DOM.getElement('version').value;
+ value = MochiKit.DOM.getElement('encryptedText').value;
+
+ anEvent.stop();
+
+ deferredResult = new Clipperz.Async.Deferred("Decrypted data", {trace:false});
+ deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt, {key:key, version:version, value:value});
+ deferredResult.addCallback(Clipperz.Base.serializeJSON);
+ deferredResult.addCallback(function (aValue) {
+ MochiKit.DOM.getElement('decryptedText').value = aValue;
+ });
+ deferredResult.addErrback(alert);
+
+ deferredResult.callback();
+}
+
+//-----------------------------------------------------------------------------
+
+encryptData = function (anEvent) {
+ var deferredResult;
+ var key;
+ var version;
+ var value;
+
+ key = MochiKit.DOM.getElement('key').value;
+ version = MochiKit.DOM.getElement('version').value;
+ value = Clipperz.Base.evalJSON(MochiKit.DOM.getElement('decryptedText').value);
+
+ anEvent.stop();
+
+ deferredResult = new Clipperz.Async.Deferred("Encrypted data", {trace:false});
+ deferredResult.addCallback(Clipperz.PM.Crypto.deferredEncrypt, {key:key, version:version, value:value});
+ deferredResult.addCallback(function (aValue) {
+ MochiKit.DOM.getElement('encryptedText').value = aValue;
+ });
+ deferredResult.addErrback(alert);
+
+ deferredResult.callback();
+}
+
+//-----------------------------------------------------------------------------
+
+init = function () {
+ Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+
+ MochiKit.Signal.connect('decryptForm', 'onsubmit', decryptData)
+ MochiKit.Signal.connect('decryptButton', 'onclick', decryptData)
+ MochiKit.Signal.connect('encryptButton', 'onclick', encryptData)
+
+// MochiKit.Signal.connect('encodePassword', 'onclick', encodePassword)
+}
+
+//-----------------------------------------------------------------------------
+
+MochiKit.DOM.addLoadEvent(init);
+
+</script> <!-- =============================================================================== -->
+
+</head>
+<body>
+<!--
+ <form id='computeKey'>
+ <input type='text' name='username' value='' id='username' size='30'/>
+ <input type='text' name='passphrase' value='' id='passphrase' size='30'/>
+ <input type='button' name='encode' value='encode' id='encodePassword'>
+ <input type='text' name='encodedPassword' value='' id='encodedPassword' size='30'/>
+ </form>
+ <hr>
+-->
+ <form id='decryptForm'>
+ <div><textarea id='encryptedText' cols='80' rows='20'></textarea></div>
+ <div><input type='text' name='key' value='' id='key' size='30'/></div>
+ <div><input type='text' name='version' value='0.3' id='version' /></div>
+ <div><input type='button' name='decrypt' value='decrypt' id='decryptButton'> <input type='button' name='encrypt' value='encrypt' id='encryptButton'></div>
+ <hr>
+ <div><textarea id='decryptedText' cols='80' rows='20' style="background-color: lightgrey;">&lt;result&gt;</textarea></div>
+ </form>
+
+</body>
+</html> \ No newline at end of file
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLogin.html b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLogin.html
new file mode 100644
index 0000000..e11adfd
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLogin.html
@@ -0,0 +1,103 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.DataModel.DirectLogin - test</title>
+
+ <script type="text/javascript" src="../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Signal.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Toll.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Offline.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Test.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Crypto.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings/Strings_en-US.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/EncryptedRemoteObject.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.Version.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.Version.Field.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLogin.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginInput.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginBinding.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.Legacy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.RecordIndex.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.Preferences.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.OneTimePasswords.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/OneTimePassword.js'></script>
+
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.Async.js"></script>
+<script>
+ Clipperz_IEisBroken = false;
+</script>
+
+<!--[if IE]><script>
+Clipperz_IEisBroken = true;
+Clipperz_normalizedNewLine = '\x0d\x0a';
+</script><![endif]-->
+
+</head>
+<body>
+
+<pre id="test">
+<script>
+ Clipperz.PM.Strings.Languages.setSelectedLanguage('en-us');
+</script>
+<script type="text/javascript" src="User.data.js"></script>
+<script type="text/javascript" src="User.data.old.js"></script>
+<script type="text/javascript" src="DirectLogin.test.js"></script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLogin.test.js b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLogin.test.js
new file mode 100644
index 0000000..d385c8c
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLogin.test.js
@@ -0,0 +1,195 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+/*
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ ...
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+
+
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ ...
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'getRecord', '5cdac63b317f3942da38f3a3de3b7f0e5d6678200951c6216230295550f63fb4'); // WEB PASSWORD (0)
+ deferredResult.addMethod(user, 'getRecord', '36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113'); // DIGG (1)
+ deferredResult.addMethod(user, 'getRecord', 'c0ce9130ca365bb02418d4305ea1d29e49c3f0e96d44b9d3cb6b4b6843d25065'); // SAP (2)
+ deferredResult.addMethod(user, 'getRecord', 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d'); // YAHOO (4)
+ DirectLogin references
+ - dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496 // Yahoo! Mail
+ - aa18149164302d5dbe7e2d3724565b9550e00887b49978559783b2e38c625584 // (Yahoo! Groups)
+ - 6f7bbc4e42ea462b5246e6f51c3f86056bec50601ce2de6067c8c1d26f21c07f // (Flickr)
+ - a7b32e72502804bf2946a2a8856139cbbb759c5777e6b3e673db1fdf7e3bd06e // (My Yahoo!)
+*/
+ //-------------------------------------------------------------------------
+
+ 'editDirectLoginLabel_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("editDirectLoginLabel_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecord', 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d'); // YAHOO (4)
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496'));
+ deferredResult.addCallback(function (aDirectLogin) {
+ var innerDeferredResult;
+ var updatedLabel;
+
+ updatedLabel = "updated Yahoo! Mail label";
+
+ innerDeferredResult = new Clipperz.Async.Deferred("editDirectLoginLabel_test <inner>", someTestArgs);
+ innerDeferredResult.addMethod(aDirectLogin, 'label');
+ innerDeferredResult.addTest("Yahoo! Mail", "The label of the selected direct login is correct.");
+ innerDeferredResult.addMethod(aDirectLogin, 'setLabel', updatedLabel);
+
+ innerDeferredResult.addMethod(aDirectLogin, 'label');
+ innerDeferredResult.addTest(updatedLabel, "The DirectLogin returns the correct label even before committing data.");
+
+ innerDeferredResult.addMethod(user, 'hasPendingChanges');
+ innerDeferredResult.addTest(true, "When changing the label of a DirectLogin, the user should report pending changes.");
+
+//innerDeferredResult.addCallback(function () { console.log("+_+_+_+_+_+_+_+_+_+_+_+ >>>")});
+ innerDeferredResult.addMethod(user, 'saveChanges');
+//innerDeferredResult.addCallback(function () { console.log("+_+_+_+_+_+_+_+_+_+_+_+ <<<")});
+ innerDeferredResult.addMethod(user, 'hasPendingChanges');
+ innerDeferredResult.addTest(false, "After saving changes there should be no pending changes left.");
+
+ innerDeferredResult.addMethod(aDirectLogin, 'label');
+ innerDeferredResult.addTest(updatedLabel, "The DirectLogin returns the correct label even after committing data.");
+
+ innerDeferredResult.callback();
+
+ return innerDeferredResult;
+ })
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editDirectLoginLabel_thanResetItToThePreviousValue_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("editDirectLoginLabel_thanResetItToThePreviousValue_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecord', 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d'); // YAHOO (4)
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496'));
+ deferredResult.addCallback(function (aDirectLogin) {
+ var innerDeferredResult;
+ var originalLabel;
+ var updatedLabel;
+
+ originalLabel = "Yahoo! Mail";
+ updatedLabel = "updated Yahoo! Mail label";
+
+ innerDeferredResult = new Clipperz.Async.Deferred("editDirectLoginLabel_thanResetItToThePreviousValue_test <inner>", someTestArgs);
+ innerDeferredResult.addMethod(aDirectLogin, 'label');
+ innerDeferredResult.addTest(originalLabel, "The label of the selected direct login is correct.");
+ innerDeferredResult.addMethod(aDirectLogin, 'setLabel', updatedLabel);
+
+ innerDeferredResult.addMethod(aDirectLogin, 'label');
+ innerDeferredResult.addTest(updatedLabel, "The DirectLogin returns the correct label even before committing data.");
+
+ innerDeferredResult.addMethod(user, 'hasPendingChanges');
+ innerDeferredResult.addTest(true, "When changing the label of a DirectLogin, the user should report pending changes [2].");
+
+ innerDeferredResult.addMethod(aDirectLogin, 'setLabel', originalLabel);
+
+ innerDeferredResult.addMethod(aDirectLogin, 'hasPendingChanges');
+ innerDeferredResult.addTest(false, "Restoring the original label, the directLogin should report no pending changes.");
+
+ innerDeferredResult.addMethod(aDirectLogin.record(), 'hasPendingChanges');
+ innerDeferredResult.addTest(false, "Restoring the original label, the record should report no pending changes.");
+
+ innerDeferredResult.addMethod(user, 'hasPendingChanges');
+ innerDeferredResult.addTest(false, "Restoring the original label, the user should report no pending changes.");
+
+ innerDeferredResult.callback();
+
+ return innerDeferredResult;
+ })
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+/*
+ 'bindingValues_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("DirectLogin.bindingValues_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecord', 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d'); // YAHOO (4)
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496'));
+ deferredResult.addMethodcaller('bindingValues');
+ deferredResult.addCallback(function (someBindingValues) {
+ SimpleTest.is(MochiKit.Base.keys(someBindingValues).length, 2, "there should be 2 bindings for this direct login");
+ SimpleTest.is(someBindingValues['login'], 'joe.clipperz', "the login field should be filled with 'joe.clipperz'");
+ SimpleTest.is(someBindingValues['passwd'], 'enfvDG1RxAsl', "the passwd field should be filled with 'enfvDG1RxAsl'");
+ })
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+*/
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+//#############################################################################
+
+SimpleTest.runDeferredTests("Clipperz.PM.DataModel.DirectLogin", tests, {trace:false});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLoginConfigurations.data.js b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLoginConfigurations.data.js
new file mode 100644
index 0000000..6c0bf49
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/DirectLoginConfigurations.data.js
@@ -0,0 +1,33 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+directLoginConfigurations = {
+ 'Yahoo! Mail': '{\n "page": {\n "title": "Yahoo! Mail"\n },\n "form": {\n "attributes": {\n "action": "https://login.yahoo.com/config/login?",\n "method": "post"\n },\n "inputs": [\n {\n "type": "hidden",\n "name": ".tries",\n "value": "1"\n },\n {\n "type": "hidden",\n "name": ".src",\n "value": "ym"\n },\n {\n "type": "hidden",\n "name": ".md5",\n "value": ""\n },\n {\n "type": "hidden",\n "name": ".hash",\n "value": ""\n },\n {\n "type": "hidden",\n "name": ".js",\n "value": ""\n },\n {\n "type": "hidden",\n "name": ".last",\n "value": ""\n },\n {\n "type": "hidden",\n "name": "promo",\n "value": ""\n },\n {\n "type": "hidden",\n "name": ".intl",\n "value": "us"\n },\n {\n "type": "hidden",\n "name": ".bypass",\n "value": ""\n },\n {\n "type": "hidden",\n "name": ".partner",\n "value": ""\n },\n {\n "type": "hidden",\n "name": ".u",\n "value": "5gp62cl2vg3ov"\n },\n {\n "type": "hidden",\n "name": ".v",\n "value": "0"\n },\n {\n "type": "hidden",\n "name": ".challenge",\n "value": "iBEY0IK6k3t9Uals32mrTos8s48p"\n },\n {\n "type": "hidden",\n "name": ".yplus",\n "value": ""\n },\n {\n "type": "hidden",\n "name": ".emailCode",\n "value": ""\n },\n {\n "type": "hidden",\n "name": "pkg",\n "value": ""\n },\n {\n "type": "hidden",\n "name": "stepid",\n "value": ""\n },\n {\n "type": "hidden",\n "name": ".ev",\n "value": ""\n },\n {\n "type": "hidden",\n "name": "hasMsgr",\n "value": "0"\n },\n {\n "type": "hidden",\n "name": ".chkP",\n "value": "Y"\n },\n {\n "type": "hidden",\n "name": ".done",\n "value": "http://mail.yahoo.com"\n },\n {\n "type": "hidden",\n "name": ".pd",\n "value": "ym_ver%3d0%26c="\n },\n {\n "type": "text",\n "name": "login",\n "value": ""\n },\n {\n "type": "password",\n "name": "passwd",\n "value": ""\n },\n {\n "type": "checkbox",\n "name": ".persistent",\n "value": "y"\n },\n {\n "type": "submit",\n "name": ".save",\n "value": "Sign In"\n }\n ]\n },\n "version": "0.2"\n}',
+ 'Parallels': '{"page": {"title": "Parallels Account"},\n"form": {"attributes": {"action": "https://www.parallels.com/account/",\n"method": "post"},\n"inputs": [{"type": "text",\n"name": "Email",\n"value": ""},\n{"type": "password",\n"name": "Password",\n"value": ""}]},\n"version": "0.2.3"}',
+ __syntaxFix__: "syntax fix"
+}; \ No newline at end of file
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/EncryptedRemoteObject.html b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/EncryptedRemoteObject.html
new file mode 100644
index 0000000..699c06d
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/EncryptedRemoteObject.html
@@ -0,0 +1,66 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.DataModel.EncryptedRemoteObject - test</title>
+
+ <script type="text/javascript" src="../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Signal.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SRP.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Crypto.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/EncryptedRemoteObject.js'></script>
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.Async.js"></script>
+</head>
+<body>
+
+<pre id="test">
+<script type="text/javascript" src="EncryptedRemoteObject.test.js"></script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/EncryptedRemoteObject.test.js b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/EncryptedRemoteObject.test.js
new file mode 100644
index 0000000..0a4fe0c
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/EncryptedRemoteObject.test.js
@@ -0,0 +1,225 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'simple_tests': function(someTestArgs) {
+ var deferredResult;
+ var encryptedRemoteObject;
+
+ var key;
+ var version;
+ var rawData;
+
+ key = "just a random key";
+ version = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
+ rawData = "just a random text to encrypt";
+
+ encryptedRemoteObject = new Clipperz.PM.DataModel.EncryptedRemoteObject({
+ 'retrieveKeyFunction': MochiKit.Base.noop,
+ 'retrieveRemoteDataFunction': function () { return "--"},
+ 'encryptedDataKeypath': '--',
+ 'encryptedVersionKeypath': '--'
+ });
+ SimpleTest.ok(encryptedRemoteObject != null, "create an encryptedRemoteObject");
+
+ deferredResult = Clipperz.Async.callbacks("EncryptedRemoteObject.test - simple_tests", [
+ MochiKit.Base.method(encryptedRemoteObject, 'getRemoteData'),
+ function(aResult) {
+ SimpleTest.is(aResult, "--", "setting and getting serverData works");
+ }
+ ], someTestArgs);
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'decrypt_test': function (someTestArgs) {
+ var deferredResult;
+ var encryptedRemoteObject;
+ var key;
+ var version;
+ var rawData;
+
+ key = "just a random key";
+ version = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
+ rawData = "just a random text to encrypt";
+
+ encryptedRemoteObject = new Clipperz.PM.DataModel.EncryptedRemoteObject({
+ 'retrieveKeyFunction': MochiKit.Base.partial(MochiKit.Async.succeed, key),
+ 'retrieveRemoteDataFunction': MochiKit.Base.partial(Clipperz.Async.callbacks, "EncryptedRemoteObject.test - decrypt_test <encrypt data>", [
+ MochiKit.Base.partial(Clipperz.PM.Crypto.deferredEncrypt, {key:key, value:rawData, version:version}),
+ function (someEncryptedData) {
+ return {
+ 'data': someEncryptedData,
+ 'version': version
+ }
+ }
+ ], someTestArgs)//,
+// 'encryptedDataKeypath': 'data',
+// 'encryptedVersionKeypath': 'version'
+ });
+
+ deferredResult = new Clipperz.Async.Deferred("decrypt_test", someTestArgs);
+ deferredResult.addMethod(encryptedRemoteObject, 'getDecryptedData');
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.is(aResult, rawData, "encrypt and decrypt works");
+ })
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'getValue_test': function (someTestArgs) {
+ var deferredResult;
+ var encryptedRemoteObject;
+ var key;
+ var version;
+ var rawData;
+
+ key = "just a random key";
+ version = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
+ rawData = {
+ key1: 'value1',
+ key2: 'value2'
+ };
+
+ encryptedRemoteObject = new Clipperz.PM.DataModel.EncryptedRemoteObject({
+ 'reference': "testReference",
+ 'retrieveKeyFunction': MochiKit.Base.partial(MochiKit.Async.succeed, key),
+ 'retrieveRemoteDataFunction': MochiKit.Base.partial(Clipperz.Async.callbacks, "EncryptedRemoteObject.test - decrypt_test <encrypt data>", [
+ MochiKit.Base.partial(Clipperz.PM.Crypto.deferredEncrypt, {key:key, value:rawData, version:version}),
+ function (someEncryptedData) {
+ return {
+ 'data': someEncryptedData,
+ 'version': version
+ }
+ }
+ ], someTestArgs)//,
+// 'encryptedDataKeypath': 'data',
+// 'encryptedVersionKeypath': 'version'
+ });
+
+ deferredResult = new Clipperz.Async.Deferred("decrypt_test", someTestArgs);
+
+ deferredResult.addMethod(encryptedRemoteObject, 'getValue', 'key1');
+ deferredResult.addTest('value1', "getting 'key1' works");
+ deferredResult.addMethod(encryptedRemoteObject, 'hasAnyCleanTextData');
+ deferredResult.addTest(true, "After accessing a value, hasAnyCleanTextData returns false");
+
+ deferredResult.addMethod(encryptedRemoteObject, 'hasPendingChanges');
+ deferredResult.addTest(false, "if nothing has changed, the object should return not pending changes");
+
+ deferredResult.addMethod(encryptedRemoteObject, 'deleteAllCleanTextData');
+ deferredResult.addMethod(encryptedRemoteObject, 'hasAnyCleanTextData');
+ deferredResult.addTest(false, "After deleting all cleanTextData, hasAnyCleanTextData returns false");
+
+ deferredResult.addMethod(encryptedRemoteObject, 'getValue', 'key1');
+ deferredResult.addTest('value1', "getting 'key1' (also after a lock) works correctly");
+
+ deferredResult.addMethod(encryptedRemoteObject, 'setValue', 'key1', 'new value1');
+ deferredResult.addMethod(encryptedRemoteObject, 'getValue', 'key1');
+ deferredResult.addTest('new value1', "after setting a new value, it is correctly returned");
+
+ deferredResult.addMethod(encryptedRemoteObject, 'values');
+ deferredResult.addCallback(function (someValues) {
+ SimpleTest.is(someValues['key1'], 'new value1', "the value got straight from the objectStore is correct");
+ });
+
+ deferredResult.addMethod(encryptedRemoteObject, 'hasPendingChanges');
+ deferredResult.addTest(true, "once a value has been changed, the object should return that there're some pending changes");
+
+ deferredResult.addMethod(encryptedRemoteObject, 'revertChanges');
+ deferredResult.addMethod(encryptedRemoteObject, 'hasPendingChanges');
+ deferredResult.addTest(false, "reverting the changes should return the object to its initial state, without any peding changes");
+
+ deferredResult.addMethod(encryptedRemoteObject, 'getValue', 'key1');
+ deferredResult.addTest('value1', "also the value of the changed item has been restored");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'encrypt_with_new_object_test': function (someTestArgs) {
+ var deferredResult;
+ var encryptedRemoteObject;
+ var key;
+// var version;
+// var rawData;
+
+ key = "just a random key";
+// version = Clipperz.PM.Crypto.encryptingFunctions.currentVersion;
+// rawData = "just a random text to encrypt";
+
+ encryptedRemoteObject = new Clipperz.PM.DataModel.EncryptedRemoteObject({
+ 'retrieveRemoteDataFunction': MochiKit.Base.noop
+ });
+
+ encryptedRemoteObject.setValue('key1', "value1");
+ encryptedRemoteObject.setValue('key2', "value2");
+ encryptedRemoteObject.setValue('key3', "value3");
+
+ deferredResult = new Clipperz.Async.Deferred("encrypt_with_new_object_test", someTestArgs);
+ deferredResult.addMethod(encryptedRemoteObject, 'prepareRemoteDataWithKey', key);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('data'));
+ deferredResult.collectResults({
+ 'key': MochiKit.Base.partial(MochiKit.Async.succeed, key),
+ 'value': MochiKit.Async.succeed,
+ 'version': MochiKit.Base.partial(MochiKit.Async.succeed, Clipperz.PM.Crypto.encryptingFunctions.currentVersion)
+ });
+ deferredResult.addCallback(Clipperz.PM.Crypto.deferredDecrypt);
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.is(aResult['key1'], "value1", "encrypt and decrypt works for first element");
+ SimpleTest.is(aResult['key2'], "value2", "encrypt and decrypt works for second element");
+ SimpleTest.is(aResult['key3'], "value3", "encrypt and decrypt works for third element");
+ })
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+//#############################################################################
+
+SimpleTest.runDeferredTests("Clipperz.PM.DataModel.EncryptedRemoteObject", tests, {trace:false});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/OneTimePassword.html b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/OneTimePassword.html
new file mode 100644
index 0000000..a9bac22
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/OneTimePassword.html
@@ -0,0 +1,105 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.DataModel.User - test</title>
+
+ <script type="text/javascript" src="../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Signal.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Toll.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Offline.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Test.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Crypto.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings/Strings_en-US.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/EncryptedRemoteObject.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.Version.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.Version.Field.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLogin.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginInput.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginBinding.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginFormValue.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.Legacy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.RecordIndex.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.Preferences.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.OneTimePasswords.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/OneTimePassword.js'></script>
+
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.Async.js"></script>
+<script>
+ Clipperz_IEisBroken = false;
+</script>
+
+<!--[if IE]><script>
+Clipperz_IEisBroken = true;
+Clipperz_normalizedNewLine = '\x0d\x0a';
+</script><![endif]-->
+
+</head>
+<body>
+
+<pre id="test">
+<script>
+ Clipperz.PM.Strings.Languages.setSelectedLanguage('en-us');
+</script>
+<script type="text/javascript" src="User.data.js"></script>
+<script type="text/javascript" src="OneTimePassword.test.js"></script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/OneTimePassword.test.js b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/OneTimePassword.test.js
new file mode 100644
index 0000000..0171714
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/OneTimePassword.test.js
@@ -0,0 +1,198 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'isValidOneTimePasswordValue_test': function (someTestArgs) {
+ var otp;
+ var notOTP;
+
+ otp = 'yaxx k7ww - f8y6 tqz5 - 58b6 th44 - 9cwv q0fg';
+ SimpleTest.is(Clipperz.PM.DataModel.OneTimePassword.isValidOneTimePasswordValue(otp), true, "isValidOneTimePasswordValue [expect true] - test 1");
+
+ notOTP = 'trustno1';
+ SimpleTest.is(Clipperz.PM.DataModel.OneTimePassword.isValidOneTimePasswordValue(notOTP), false, "isValidOneTimePasswordValue [expect false] - test 1");
+
+ return MochiKit.Async.succeed('done');
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loginUsingOtp_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+ var username;
+ var passphrase;
+
+ username = "test";
+ passphrase = "yaxx k7ww - f8y6 tqz5 - 58b6 th44 - 9cwv q0fg"; // OTP
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:username, getPassphraseFunction:function () { return passphrase;}});
+ user2 = new Clipperz.PM.DataModel.User({username:username, getPassphraseFunction:function () { return passphrase;}});
+
+ deferredResult = new Clipperz.Async.Deferred("loginUsingOtp_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_with_otps']);
+
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "This account has one single card");
+
+ deferredResult.addMethod(user, 'getOneTimePasswords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "This account has one OTP");
+
+ deferredResult.addMethod(user, 'getOneTimePasswords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(0));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('status'));
+ deferredResult.addTest('USED', "The available OTP has been unsed to login, and should be marked accordingly");
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.shouldFail("trying to login using the same OTP twice");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'changePassphraseAndLoginUsingOtp_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var user2;
+ var user3;
+ var otp;
+
+ otp = "yaxx k7ww - f8y6 tqz5 - 58b6 th44 - 9cwv q0fg"; // OTP
+
+ newPassphrase = 'tset';
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return otp;}});
+
+ deferredResult = new Clipperz.Async.Deferred("changePassphraseAndLoginUsingOtp_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_with_otps']);
+
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "This account has only a single card");
+
+ deferredResult.addMethod(user, 'changePassphrase', newPassphrase);
+ deferredResult.addMethod(user, 'logout');
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "This account has oly a single card");
+ deferredResult.addMethod(user2, 'logout');
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loginUsingOtpAndWrongUsername_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+ var username;
+ var wrongUsername;
+ var passphrase;
+
+ username = "test";
+ wrongUsername = "tset";
+ passphrase = "yaxx k7ww - f8y6 tqz5 - 58b6 th44 - 9cwv q0fg"; // OTP
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:wrongUsername, getPassphraseFunction:function () { return passphrase;}});
+ user2 = new Clipperz.PM.DataModel.User({username:username, getPassphraseFunction:function () { return passphrase;}});
+
+ deferredResult = new Clipperz.Async.Deferred("loginUsingOtpAndWrongUsername_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_with_otps']);
+
+ deferredResult.addMethod(user, 'login');
+ deferredResult.shouldFail("login in using the wrong username with the OTP should fail");
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.shouldFail("trying to reuse the same OTP should fail, even if now it is used with the correct username");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loginUserWithAPassphraseLookingExactlyLikeAnOTP_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var username;
+ var passphrase;
+
+ username = "otp_user";
+ passphrase = "yaxx k7ww - f8y6 tqz5 - 58b6 th44 - 9cwv q0fg"; // passphrase
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:username, getPassphraseFunction:function () { return passphrase;}});
+
+ deferredResult = new Clipperz.Async.Deferred("loginUserWithAPassphraseLookingExactlyLikeAnOTP_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['otp_user_test']);
+
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "This account has one single card");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+
+
+//#############################################################################
+
+SimpleTest.runDeferredTests("Clipperz.PM.DataModel.OneTimePassword", tests, {trace:false});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/Record.html b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/Record.html
new file mode 100644
index 0000000..c349e0d
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/Record.html
@@ -0,0 +1,98 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.DataModel.Record - test</title>
+
+ <script type="text/javascript" src="../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Signal.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Toll.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings/Strings_en-US.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Offline.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Test.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Crypto.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings/Strings_en-US.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/EncryptedRemoteObject.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.Version.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.Version.Field.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLogin.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginInput.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginBinding.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginFormValue.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.Legacy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.RecordIndex.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.Preferences.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.OneTimePasswords.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/OneTimePassword.js'></script>
+
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.Async.js"></script>
+</head>
+<body>
+
+<pre id="test">
+<script>
+ Clipperz.PM.Strings.Languages.setSelectedLanguage('en-us');
+</script>
+<script type="text/javascript" src="DirectLoginConfigurations.data.js"></script>
+<script type="text/javascript" src="User.data.js"></script>
+<script type="text/javascript" src="Record.test.js"></script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/Record.test.js b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/Record.test.js
new file mode 100644
index 0000000..7d024d9
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/Record.test.js
@@ -0,0 +1,1285 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'recordUseOf_retrieveIndexDataFunction_and_getRemoteDataFunction_test': function (someTestArgs) {
+ var deferredResult;
+ var record;
+
+//console.log("#### new Clipperz.PM.DataModel.Record [5]");
+ record = new Clipperz.PM.DataModel.Record({
+ 'reference': '<<< record reference >>>',
+ 'retrieveKeyFunction': MochiKit.Base.noop,
+ 'retrieveRemoteDataFunction': function (aRecordReference) {
+ SimpleTest.is(aRecordReference, '<<< record reference >>>', "Record correctly passes its record reference when asking for encrypted data");
+ return MochiKit.Async.succeed({
+ // fake server payload
+ 'data': "#### fake encrypted data ####",
+ 'version': "0.x",
+ 'currentVersion': {
+ 'reference': "<<< fake record version reference >>>",
+ 'data': "#### fake encrypted data ####",
+ 'version': "0.x"
+ }
+ });
+ },
+ 'updateDate': "Thu, 10 May 2007 13:01:21 UTC",
+// 'encryptedDataKeypath': 'data',
+// 'encryptedVersionKeypath': 'version',
+
+ 'retrieveIndexDataFunction': function (aRecordReference) {
+ SimpleTest.is(aRecordReference, '<<< record reference >>>', "Record correctly passes its record reference when asking for index data");
+ return MochiKit.Async.succeed({
+ key: '<< key >>',
+ label: '<< label >>',
+ notes: '<< notes >>'
+ });
+ },
+ 'updateIndexDataFunction': MochiKit.Base.noop
+
+ });
+
+ deferredResult = new Clipperz.Async.Deferred("recordUseOf_retrieveIndexDataFunction_and_getEncryptedDataFunction_test", someTestArgs);
+ deferredResult.addMethod(record, 'label');
+ deferredResult.addTest('<< label >>', "Record returns the right value for label");
+ deferredResult.addMethod(record, 'notes');
+ deferredResult.addTest('<< notes >>', "Record returns the right value for notes - even the legacy one, stored on the header");
+ deferredResult.addMethod(record, 'getRemoteData');
+ deferredResult.addCallback(Clipperz.Async.Test.isDeeply({ 'data': "#### fake encrypted data ####", 'version': "0.x", 'currentVersion': { 'reference': "<<< fake record version reference >>>", 'data': "#### fake encrypted data ####", 'version': "0.x" } }, "Record returns the expected encrypted data"));
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'createRecordWithoutAllRequiredParameters_test': function (someTestArgs) {
+ var record;
+
+ try {
+//console.log("#### new Clipperz.PM.DataModel.Record [6]");
+ record = new Clipperz.PM.DataModel.Record({reference:'--'});
+ SimpleTest.ok(false, "creating a record without all parameters should raise an exception");
+ } catch(exception) {
+// SimpleTest.is(exception.name, "Clipperz.Base.exception.MandatoryParameter", "creating a record without all parameters raises an exception");
+ SimpleTest.ok(/Clipperz\.Base\.exception\.MandatoryParameter.*/.test(exception.name), "creating a record without all parameters raises an exception");
+ }
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'recordFromOldData_version_0.1_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var recordID;
+
+//console.log("#### new Clipperz.PM.DataModel.Record [7]");
+/*
+ record = new Clipperz.PM.DataModel.Record({
+ 'reference': '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a',
+ 'retrieveKeyFunction': MochiKit.Base.partial(MochiKit.Async.succeed, 'e038652297f981d5ca917d88fa2c4c3251a12c0fa41bf7313a4d24a9738fe6c6'),
+ 'retrieveRemoteDataFunction': MochiKit.Base.partial(MochiKit.Async.succeed, {
+ 'data': '4ec19a7093534e7dcf7c796b889283c6cec224b1895720ba3ff43ce091dc72c61fd5ea56def418ba3f15239f73228c6c8558585311f5e6673efe57482a1f9c9fe71e921576989eace671ec543685e3ad8f976bbfa4c2dbc629fab936c227d4fd4da3a1561ea79e553bae7b758ff91762572c1448a2d18bec797e12721238ef5ba18ddf1fba8ae773a8debe1040b3b158220aec6be9c7190687139f589a30d9c8887792fd7040e3c7cf3f9999fb9dde1f9f334d17c996996d538a7e374ac93135acafdaf5fce738a1702182897b63d2cb8e308b94156473cba63dcc557d17dcbdb55fcff63d9ba5edf68c42855052e34207d6fabe94fe024c3db616b45f494da42c62224d3897e320080072cc442d4212e7b1e8d5b3d9e3c25d48f4e7c37112ef4c6b2c0c8aff0bd3ce05694370e4378701463dde26c7c0322f8a9eb5a724106039b16b35050a9a9b5717b2eec803efa962b88b9655742f5e7b180ea567449671fb5a2ce563d8b47bc25705821938192eae420391c208182a788dd06fb6448b9858a4104a14efd7717671c65cd08fd979a4da7c01712bc5d4e949a10ef1ea65caf1f07cee34b063bab01bfb7a59047fef30c3059ea652f1c92b9e72aac515ac8851756703772e1fa05384ee7f0d5c7a3c',
+ 'version': '0.1',
+ 'currentVersion': {
+ 'reference': '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a',
+ 'data': '4ec19a7093534e7dcf7c796b889283c6cec224b1895720ba3ff43ce091dc72c61fd5ea56def418ba3f15239f73228c6c8558585311f5e6673efe57482a1f9c9fe71e921576989eace671ec543685e3ad8f976bbfa4c2dbc629fab936c227d4fd4da3a1561ea79e553bae7b758ff91762572c1448a2d18bec797e12721238ef5ba18ddf1fba8ae773a8debe1040b3b158220aec6be9c7190687139f589a30d9c8887792fd7040e3c7cf3f9999fb9dde1f9f334d17c996996d538a7e374ac93135acafdaf5fce738a1702182897b63d2cb8e308b94156473cba63dcc557d17dcbdb55fcff63d9ba5edf68c42855052e34207d6fabe94fe024c3db616b45f494da42c62224d3897e320080072cc442d4212e7b1e8d5b3d9e3c25d48f4e7c37112ef4c6b2c0c8aff0bd3ce05694370e4378701463dde26c7c0322f8a9eb5a724106039b16b35050a9a9b5717b2eec803efa962b88b9655742f5e7b180ea567449671fb5a2ce563d8b47bc25705821938192eae420391c208182a788dd06fb6448b9858a4104a14efd7717671c65cd08fd979a4da7c01712bc5d4e949a10ef1ea65caf1f07cee34b063bab01bfb7a59047fef30c3059ea652f1c92b9e72aac515ac8851756703772e1fa05384ee7f0d5c7a3c',
+ 'version': '0.1'
+ }
+
+ }),
+
+ 'retrieveIndexDataFunction': MochiKit.Base.partial(MochiKit.Async.succeed, {
+// 'key': 'e038652297f981d5ca917d88fa2c4c3251a12c0fa41bf7313a4d24a9738fe6c6',
+ 'label': '<< label >>',
+ 'notes': '<< notes >>'
+ }),
+ 'updateIndexDataFunction': MochiKit.Base.noop,
+ 'updateDate': 'Mon Oct 02 10:01:52 CEST 2006'
+ });
+*/
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ recordID = "05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a";
+
+ deferredResult = new Clipperz.Async.Deferred("recordFromOldData_version_0.1_test", someTestArgs);
+
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_someExtraOldData']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasAnyCleanTextData');
+ deferredResult.addTest(false, "When first loaded, the record has no clean text data");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('label');
+ deferredResult.addTest("Card encoded with an old algorithm", "Record returns the right value for label");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('notes');
+ deferredResult.addTest("", "Record returns the right value for notes - even the legacy one, stored on the header");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasAnyCleanTextData');
+ deferredResult.addTest(true, "After reading some values, the record has some clean text data");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(MochiKit.Base.values(someFields).length, 6, "the card has 6 fields");
+ });
+ deferredResult.callback();
+
+ return deferredResult;
+
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'removeDirectLogin': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d'; // YAHOO (4)
+ var directLoginID = 'dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.removeDirectLogin", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addMethodcaller('remove');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "removing a direct login to a record should result in pending changes on the record");
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "after saving there should be not any pending changes");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(3, "after saving changes, the record should have only 3 direct logins");
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(3, "also reloading all the data with a new user, the direct logins should always be 3");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'removeDirectLoginAndRevertChanges': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+ var directLoginID = 'dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.removeDirectLoginAndRevertChanges", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(22, "the user has 22 initially");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(4, "the selected record has 4 direct logins");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addMethodcaller('remove');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "removing a direct login to a record should result in pending changes on the record");
+
+ deferredResult.addMethod(user, 'revertChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "after reverting the changes, the user should not have pending changes");
+
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(22, "after reverting the changes, the user should still have 22 direct logins");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(4, "after reverting the changes, the record should still have 4 direct logins");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addDirectLoginAndRevertChanges': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d'; // YAHOO (4)
+ var directLoginReference;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.addDirectLoginAndRevertChanges", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.setValue('record');
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(4, "the record, when initially loaded, has 4 direct logins");
+
+ deferredResult.getValue('record');
+ deferredResult.addMethodcaller('createNewDirectLogin');
+ deferredResult.setValue('directLogin');
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('setLabel', "New direct login");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('setBookmarkletConfiguration', '{"page": {"title": "Parallels Account"}, "form": {"attributes": {"action": "https://www.parallels.com/account/", "method": "post"}, "inputs": [{"type": "text", "name": "Email", "value": ""}, {"type": "password", "name": "Password", "value": ""}]}, "version": "0.2.3"}');
+
+ deferredResult.addMethod(user, 'revertChanges');
+//deferredResult.addCallback(function () { console.log("###################################"); });
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "after reverting the changes, the user should NOT have pending changes");
+
+ deferredResult.getValue('record');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(false, "after reverting the changes, the record should NOT have pending changes");
+
+ deferredResult.addMethod(user2, 'login');
+
+ deferredResult.addMethod(user2, 'getRecord', recordID);
+ deferredResult.setValue('record_2');
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(4, "the record, when reloaded from scratch, has still 4 direct logins");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addDirectLoginAndSaveChanges': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d'; // YAHOO (4)
+ var directLoginReference;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.addDirectLoginAndSaveChanges", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasAnyCleanTextData');
+ deferredResult.addTest(false, "When first loaded, the record has no clean text data [2]");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.setValue('record');
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(4, "the selected record has 4 direct logins");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasAnyCleanTextData');
+ deferredResult.addTest(false, "Still no clean text data is stored on the record, as all accessed data are stored on the index");
+
+ deferredResult.addMethod(user, 'hasAnyCleanTextData');
+ deferredResult.addTest(true, "the user has some clean text data");
+
+ deferredResult.getValue('record');
+ deferredResult.addMethodcaller('createNewDirectLogin');
+ deferredResult.setValue('directLogin');
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('label');
+ deferredResult.addTest(null, "The label of a initially created direct login is empty");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('bookmarkletConfiguration');
+ deferredResult.addTest('', "The bookmaraklet configuration of a initially created direct login is empty");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('bindings');
+ deferredResult.addCallback(Clipperz.Async.Test.isDeeply({}, "The bindings of a initially created direct login is empty"));
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('setLabel', "New direct login");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('setBookmarkletConfiguration', directLoginConfigurations['Parallels']);
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('bindings');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('Email'));
+ deferredResult.addMethodcaller('setFieldKey', '4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9'); // "userID"
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('bindings');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('Password'));
+ deferredResult.addMethodcaller('setFieldKey', 'ef2dee54322bf401540657d469e158a50e9228bc0a192a31d2e3ee56a77e565b'); // "password"
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('favicon'),
+ deferredResult.addTest('http://www.parallels.com/favicon.ico', "the original favicon is the expected one"),
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('reference');
+ deferredResult.addCallback(function (aReference) {
+ directLoginReference = aReference;
+ });
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "after adding a new direct login, the user should have pending changes");
+
+ deferredResult.getValue('record');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "after adding a new direct login, the record should have pending changes");
+
+ deferredResult.getValue('record');
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(5, "after adding a new direct login, the record has now 5 direct logins");
+
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "after saving the changes, the user should NOT have pending changes");
+
+
+ deferredResult.addMethod(user2, 'login');
+
+ deferredResult.addMethod(user2, 'getRecord', recordID);
+ deferredResult.setValue('record_2');
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(5, "the record, when reloaded from scratch, has still 5 direct logins");
+
+ deferredResult.getValue('record_2');
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('4')); // TODO: accessing directLogins by index is not really nice
+ deferredResult.setValue('directLogin_2');
+ deferredResult.addMethodcaller('label');
+ deferredResult.addTest('New direct login', "The label of the direct login has been correctly saved");
+
+ deferredResult.getValue('directLogin_2');
+ deferredResult.addMethodcaller('bindings');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('Email'));
+ deferredResult.addMethodcaller('field');
+ deferredResult.addMethodcaller('value');
+ deferredResult.addTest('joe.clipperz', "The value bound to the direct login 'Email' field is correct");
+
+ deferredResult.getValue('directLogin_2');
+ deferredResult.addMethodcaller('bindings');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('Password'));
+ deferredResult.addMethodcaller('field');
+ deferredResult.addMethodcaller('value');
+ deferredResult.addTest('enfvDG1RxAsl', "The value bound to the direct login 'Password' field is correct");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'readDirectLoginAttributes': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = '2977aa5f99a9f6e5596c1bd7871e82d7328c3716c9ef8ba349ae65f10d97924e';
+ var directLoginID = '03251dc1cbc5398789e4c4b45c52cfac3fcd8c1a4f19a81fa68fc6feae31d55c';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.readDirectLoginAttributes", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_with_multipleRecordVersions_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('03251dc1cbc5398789e4c4b45c52cfac3fcd8c1a4f19a81fa68fc6feae31d55c'));
+ deferredResult.setValue('directLogin');
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('inputs');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(13, "Amazon direct login has 13 inputs");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('inputs');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(MochiKit.Base.filter, MochiKit.Base.methodcaller('needsFormValue'));
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "Amazon direct login has 1 field needing a form value");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('inputs');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(MochiKit.Base.filter, MochiKit.Base.methodcaller('needsBinding'));
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(2, "Amazon direct login has 2 field needing a binding");
+
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('bindings');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(2, "Amazon direct login has just two bindings");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('bindings');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('email'));
+ deferredResult.addMethodcaller('fieldKey');
+ deferredResult.addTest('5e822c34aaf1a9fbc0b52585c1915f3a3758abd51923a4d35ae85373bbb839c2', "Amazon direct login 'email' binding points to the correct field");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('bindings');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('password'));
+ deferredResult.setValue('passwordBinding');
+ deferredResult.addMethodcaller('fieldKey');
+ deferredResult.addTest('01e4bb6dcf054f312c535de8160bcf50bdccd664bdc05721b10d4e69583765f7', "Amazon direct login 'password' binding points to the correct field");
+
+ deferredResult.getValue('passwordBinding');
+ deferredResult.addMethodcaller('field');
+ deferredResult.addMethodcaller('label');
+ deferredResult.addTest('password', "Amazon direct login 'password' binding points to the 'password' field");
+
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('formValues');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "Amazon direct login has just one formValue");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('formValues');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('action'));
+ deferredResult.addMethodcaller('value');
+ deferredResult.addTest('sign-in', "Amazon direct 'action' formValue is set to 'sign-in'");
+
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editDirectLoginLabel': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var oldLabel;
+ var newLabel;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+ var directLoginID = 'dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496';
+
+ oldLabel = "Yahoo! Mail";
+ newLabel = "YAHOO! Mail";
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.editDirectLoginLabel", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addMethodcaller('label');
+ deferredResult.addTest(oldLabel, "the current label of the direct login");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addMethodcaller('setLabel', newLabel);
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the label of a direct login should trigger some changes");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "changing the label of a direct login should trigger some changes also on the record itself");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "changing the label of a direct login should trigger some changes also on the directLogin itself");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editDirectLoginFormValueAndRestoreChanges': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+ var directLoginID = 'dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.editDirectLoginFormValueAndRestoreChanges", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.setValue('directLogin');
+ deferredResult.addMethodcaller('formValues');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('.persistent'));
+ deferredResult.addMethodcaller('value');
+ deferredResult.addTest(null, "original formValue value matches");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('formValues');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('.persistent'))
+ deferredResult.addMethodcaller('setValue', 'y');
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('formValues');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('.persistent'))
+ deferredResult.addMethodcaller('value');
+ deferredResult.addTest('y', "the newly set value is retained");
+
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the label of a direct login should trigger some changes");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "changing the label of a direct login should trigger some changes also on the record itself");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "changing the label of a direct login should trigger some changes also on the directLogin itself");
+
+ deferredResult.addMethod(user, 'revertChanges');
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('formValues');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('.persistent'))
+ deferredResult.addMethodcaller('value');
+ deferredResult.addTest(null, "the old formValue value is correctly restored");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editDirectLoginConfigurationAndRevertChanges': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+ var directLoginID = 'dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.editDirectLoginConfigurationAndRevertChanges", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+
+ deferredResult.addCallback(function (aDirectLogin) {
+// var newBookmarkletConfiguration;
+
+// newBookmarkletConfiguration = '{\n \"page\": {\n \"title\": \"Yahoo! Mail\"\n },\n \"form\": {\n \"attributes\": {\n \"action\": \"https://login.yahoo.com/config/login?\",\n \"method\": \"post\"\n },\n \"inputs\": [\n {\n \"type\": \"text\",\n \"name\": \"login\",\n \"value\": \"\"\n },\n {\n \"type\": \"password\",\n \"name\": \"passwd\",\n \"value\": \"\"\n },\n {\n \"type\": \"checkbox\",\n \"name\": \".persistent\",\n \"value\": \"y\"\n }\n ]\n },\n \"version\": \"0.2\"\n}';
+ return Clipperz.Async.callbacks("Record.test.editDirectLoginConfiguration [inner call]", [
+ MochiKit.Base.method(aDirectLogin, 'bookmarkletConfiguration'),
+ Clipperz.Async.Test.is(directLoginConfigurations['Yahoo! Mail'], "the current bookmarkletConfiguration"),
+
+ MochiKit.Base.method(aDirectLogin, 'favicon'),
+ Clipperz.Async.Test.is('http://login.yahoo.com/favicon.ico', "the original favicon is the expected one"),
+
+ MochiKit.Base.method(aDirectLogin, 'setBookmarkletConfiguration', directLoginConfigurations['Parallels']),
+
+ MochiKit.Base.method(aDirectLogin, 'favicon'),
+ Clipperz.Async.Test.is('http://login.yahoo.com/favicon.ico', "the original favicon is the expected one"),
+
+ MochiKit.Base.method(aDirectLogin, 'hasPendingChanges'),
+ Clipperz.Async.Test.ok("changing the configuration should trigger the pending changes on the direct login"),
+ MochiKit.Base.method(aDirectLogin.record(), 'hasPendingChanges'),
+ Clipperz.Async.Test.ok("changing the configuration should trigger the pending changes also on the record"),
+ MochiKit.Base.method(user, 'hasPendingChanges'),
+ Clipperz.Async.Test.ok("changing the configuration should trigger the pending changes also on the user"),
+
+ MochiKit.Base.method(aDirectLogin, 'revertChanges'),
+
+ MochiKit.Base.method(aDirectLogin, 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes on the direct login"),
+ MochiKit.Base.method(aDirectLogin.record(), 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes also on the record"),
+ MochiKit.Base.method(user, 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes also on the user"),
+
+ MochiKit.Base.noop
+ ], someTestArgs);
+ })
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editDirectLoginConfiguration_keepingTheSameStructure_AndSaveChanges': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var user2;
+ var newBookmarkletConfiguration;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+ var directLoginID = 'dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ newBookmarkletConfiguration = '{\n \"page\": {\n \"title\": \"Yahoo! Mail\"\n },\n \"form\": {\n \"attributes\": {\n \"action\": \"https://login.yahoo.com/config/login?\",\n \"method\": \"post\"\n },\n \"inputs\": [\n {\n \"type\": \"text\",\n \"name\": \"login\",\n \"value\": \"\"\n },\n {\n \"type\": \"password\",\n \"name\": \"passwd\",\n \"value\": \"\"\n },\n {\n \"type\": \"checkbox\",\n \"name\": \".persistent\",\n \"value\": \"y\"\n }\n ]\n },\n \"version\": \"0.2\"\n}';
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.editDirectLoginConfiguration_keepingTheSameStructure_AndSaveChanges", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addCallback(function (aDirectLogin) {
+ return Clipperz.Async.callbacks("Record.test.editDirectLoginConfiguration_keepingTheSameStructure_AndSaveChanges [inner call 1]", [
+ MochiKit.Base.method(aDirectLogin, 'bookmarkletConfiguration'),
+ Clipperz.Async.Test.is(directLoginConfigurations['Yahoo! Mail'], "the current bookmarkletConfiguration (1)"),
+
+ MochiKit.Base.method(aDirectLogin, 'inputs'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(26, "The original direct login had 26 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(2, "The original direct login had 2 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('login'),
+ MochiKit.Base.methodcaller('field'),
+ MochiKit.Base.methodcaller('reference'),
+ Clipperz.Async.Test.is('4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9', "the original 'login' direct login binding points to the correct field"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(1, "The original direct login had 1 form values"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.itemgetter('.persistent'),
+ MochiKit.Base.methodcaller('type'),
+ Clipperz.Async.Test.is('checkbox', "the original formValue has the expected type"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.itemgetter('.persistent'),
+ MochiKit.Base.methodcaller('value'),
+ Clipperz.Async.Test.is(null, "the original formValue is correct (1)"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.itemgetter('.persistent'),
+ MochiKit.Base.methodcaller('setValue', 'y'),
+
+
+ MochiKit.Base.method(aDirectLogin, 'setBookmarkletConfiguration', newBookmarkletConfiguration),
+ MochiKit.Base.method(user, 'saveChanges'),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('login'),
+ MochiKit.Base.methodcaller('field'),
+ MochiKit.Base.methodcaller('reference'),
+ Clipperz.Async.Test.is('4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9', "the 'login' binding is still valid after the new configuration is set"),
+
+ MochiKit.Base.method(aDirectLogin, 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes on the direct login (2)"),
+ MochiKit.Base.method(aDirectLogin.record(), 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes also on the record (2)"),
+ MochiKit.Base.method(user, 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes also on the user (2)"),
+
+ MochiKit.Base.noop
+ ], someTestArgs);
+ })
+
+ deferredResult.addMethod(user2, 'login');
+
+ deferredResult.addMethod(user2, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addCallback(function (aDirectLogin) {
+ return Clipperz.Async.callbacks("Record.test.editDirectLoginConfiguration_keepingTheSameStructure_AndSaveChanges [inner call 2]", [
+ MochiKit.Base.method(aDirectLogin, 'bookmarkletConfiguration'),
+ Clipperz.Async.Test.is(newBookmarkletConfiguration, "the direct login has the new bookmarkletConfiguration even after being reloaded"),
+
+ MochiKit.Base.method(aDirectLogin, 'inputs'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(3, "The new direct login has 3 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(2, "The new direct login had 2 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('login'),
+ MochiKit.Base.methodcaller('field'),
+ MochiKit.Base.methodcaller('reference'),
+ Clipperz.Async.Test.is('4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9', "the new 'login' direct login binding still points to the correct field"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(1, "The new direct login had 1 form values (1)"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.itemgetter('.persistent'),
+ MochiKit.Base.methodcaller('value'),
+ Clipperz.Async.Test.is(null, "the formValue is still correctly set"),
+
+ MochiKit.Base.noop
+ ], someTestArgs);
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editDirectLoginConfiguration_changingTheStructure_AndSaveChanges': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var user2;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+ var directLoginID = 'dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.editDirectLoginConfiguration_changingTheStructure_AndSaveChanges", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addCallback(function (aDirectLogin) {
+ return Clipperz.Async.callbacks("Record.test.editDirectLoginConfiguration_changingTheStructure_AndSaveChanges [inner call 1]", [
+ MochiKit.Base.method(aDirectLogin, 'bookmarkletConfiguration'),
+ Clipperz.Async.Test.is(directLoginConfigurations['Yahoo! Mail'], "the current bookmarkletConfiguration (2)"),
+
+ MochiKit.Base.method(aDirectLogin, 'inputs'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(26, "The original direct login had 26 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(2, "The original direct login had 2 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('login'),
+ MochiKit.Base.methodcaller('field'),
+ MochiKit.Base.methodcaller('reference'),
+ Clipperz.Async.Test.is('4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9', "the original 'login' direct login binding points to the correct field"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(1, "The original direct login had 1 form values"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.itemgetter('.persistent'),
+ MochiKit.Base.methodcaller('value'),
+ Clipperz.Async.Test.is(null, "the original formValue is correct (2)"),
+
+
+ MochiKit.Base.method(aDirectLogin, 'setBookmarkletConfiguration', directLoginConfigurations['Parallels']),
+ MochiKit.Base.method(user, 'saveChanges'),
+
+ MochiKit.Base.method(aDirectLogin, 'inputs'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(2, "The new direct login has 2 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(0, "The new direct login has no form values"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(2, "The new direct login has 2 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('login'),
+ Clipperz.Async.Test.is(null, "the 'login' binding should not exist within the new configuration"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('passwd'),
+ Clipperz.Async.Test.is(null, "the 'passwd' binding should not exist within the new configuration"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('Email'),
+ Clipperz.Async.Test.ok("the 'Email' binding should exist within the new configuration"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('Password'),
+ Clipperz.Async.Test.ok("the 'Password' binding should exist within the new configuration"),
+
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('Email'),
+ MochiKit.Base.methodcaller('field'),
+ Clipperz.Async.Test.is(null, "the 'Email' binding should not point to any field, yet"),
+
+
+ MochiKit.Base.method(aDirectLogin, 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes on the direct login (2)"),
+ MochiKit.Base.method(aDirectLogin.record(), 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes also on the record (2)"),
+ MochiKit.Base.method(user, 'hasPendingChanges'),
+ Clipperz.Async.Test.fail("reverting changes should reset pending changes also on the user (2)"),
+
+ MochiKit.Base.noop
+ ], someTestArgs);
+ })
+
+ deferredResult.addMethod(user2, 'login');
+
+ deferredResult.addMethod(user2, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(directLoginID));
+ deferredResult.addCallback(function (aDirectLogin) {
+ return Clipperz.Async.callbacks("Record.test.editDirectLoginConfiguration_changingTheStructure_AndSaveChanges [inner call 2]", [
+ MochiKit.Base.method(aDirectLogin, 'bookmarkletConfiguration'),
+ Clipperz.Base.evalJSON,
+ MochiKit.Base.itemgetter('form'),
+ Clipperz.Async.Test.isDeeply(Clipperz.Base.evalJSON(directLoginConfigurations['Parallels'])['form'], "the direct login has the new bookmarkletConfiguration even after being reloaded"),
+
+ MochiKit.Base.method(aDirectLogin, 'inputs'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(2, "The new -reloaded- direct login has 2 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(2, "The new direct login had 2 inputs"),
+
+ MochiKit.Base.method(aDirectLogin, 'bindings'),
+ MochiKit.Base.itemgetter('login'),
+ Clipperz.Async.Test.is(null, "the 'login' binding should not exist within the new configuration"),
+
+ MochiKit.Base.method(aDirectLogin, 'formValues'),
+ MochiKit.Base.keys,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(0, "The new direct login has no form values (2)"),
+
+ MochiKit.Base.noop
+ ], someTestArgs);
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editFieldValueAndRestoreIt': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.editValueAndRestoreIt", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9'));
+ deferredResult.addMethodcaller('value');
+ deferredResult.addTest('joe.clipperz', "the current field value is 'joe.clipperz'");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9'));
+ deferredResult.addMethodcaller('setValue', 'fake.clipperz');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of a field should trigger pending changes");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9'));
+ deferredResult.addMethodcaller('setValue', 'joe.clipperz');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(false, "restoring the value of a field should revert pending changes");
+
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'accessFieldValues': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.accessFieldValues", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fieldWithLabel', 'userID');
+ deferredResult.addMethodcaller('value');
+ deferredResult.addTest('joe.clipperz', "the current field value is 'joe.clipperz'");
+
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editFieldValueAndSaveIt': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+
+ var recordID = '2977aa5f99a9f6e5596c1bd7871e82d7328c3716c9ef8ba349ae65f10d97924e';
+ var passwordFieldID = '01e4bb6dcf054f312c535de8160bcf50bdccd664bdc05721b10d4e69583765f7';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.editValueAndRestoreIt", someTestArgs);
+// deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_with_multipleRecordVersions_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('getVersions');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(5, "the selected record has 5 versions");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(passwordFieldID));
+ deferredResult.collectResults({
+ 'label': MochiKit.Base.methodcaller('label'),
+ 'value': MochiKit.Base.methodcaller('value')
+ });
+ deferredResult.addTest({'label': 'password', 'value': 'HRRd7ycaFVG6'}, "the current field label and value match", true);
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(passwordFieldID));
+ deferredResult.addMethodcaller('setValue', '<<pippo>>');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of a field should trigger pending changes");
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "after saving, there should be no pending changes");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('getVersions');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(6, "the selected record, after saving a new version, has now 6 versions");
+
+ deferredResult.addMethod(user2, 'login');
+
+ deferredResult.addMethod(user2, 'getRecord', recordID);
+ deferredResult.addMethodcaller('getVersions');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(6, "the selected record - reloaded from the db - has 6 versions");
+
+ deferredResult.addMethod(user2, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(MochiKit.Base.itemgetter(passwordFieldID));
+ deferredResult.collectResults({
+ 'label': MochiKit.Base.methodcaller('label'),
+ 'value': MochiKit.Base.methodcaller('value')
+ });
+ deferredResult.addTest({'label': 'password', 'value': '<<pippo>>'}, "the current field label and value match", true);
+
+/*
+deferredResult.addCallback(function (aValue) { console.log("FIELDS", aValue); return aValue});
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('4cfaf1e782086e7527bd0e0cc82b67eb773e8157ad0c5babe516f7bc945a02a9'));
+ deferredResult.addMethodcaller('setValue', 'joe.clipperz');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(false, "restoring the value of a field should revert pending changes");
+*/
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editNotesAndRestoreIt': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.editNotesAndRestoreIt", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('notes');
+ deferredResult.addTest('', "the current note is the empty string even if nothing is set on the record");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('setNotes', '');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(false, "setting notes to an empty string should be the same has not having the notes altogether");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loadAllRecordVersions': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ var recordID = '2977aa5f99a9f6e5596c1bd7871e82d7328c3716c9ef8ba349ae65f10d97924e';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.loadAllRecordVersions", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_with_multipleRecordVersions_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('label');
+ deferredResult.addTest('Amazon.com', "the selected record is the expected one");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('getVersions');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(5, "the 'Amazon' record has 5 versions");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('getCurrentRecordVersion');
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(3, "the current version of 'Amazon' record has 3 fields");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'createDirectLoginAndDeleteItAfterward': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+ var recordID = 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d'; // YAHOO (4)
+ var directLoginReference;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:false, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("Record.test.addDirectLoginAndRevertChanges", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.setValue('record');
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.keys);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(4, "the record, when initially loaded, has 4 direct logins");
+
+ deferredResult.getValue('record');
+ deferredResult.addMethodcaller('createNewDirectLogin');
+ deferredResult.setValue('directLogin');
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('setLabel', "New direct login");
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('setBookmarkletConfiguration', '{"page": {"title": "Parallels Account"}, "form": {"attributes": {"action": "https://www.parallels.com/account/", "method": "post"}, "inputs": [{"type": "text", "name": "Email", "value": ""}, {"type": "password", "name": "Password", "value": ""}]}, "version": "0.2.3"}');
+
+ deferredResult.getValue('directLogin');
+ deferredResult.addMethodcaller('remove');
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "after reverting the changes, the user should NOT have pending changes");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+
+
+//#############################################################################
+
+SimpleTest.runDeferredTests("Clipperz.PM.DataModel.Record", tests, {trace:false});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.data.js b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.data.js
new file mode 100644
index 0000000..5684dbd
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.data.js
@@ -0,0 +1,1941 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+testData = {
+
+ //-----------------------------------------------------------------------------
+
+ 'simpleLogin_001': function () { return {
+ 'users': [
+ {
+ 'username': "joe",
+ 'passphrase': "eoj",
+ 'version': "0.2",
+ 'connectionVersion': "0.2",
+ 'records': {
+ 'record 1': {
+ 'notes': "Some notes here",
+ 'fields': [
+ { 'name': "username", 'value': "joe", 'type': "text" },
+ { 'name': "password", 'value': "1234", 'type': "password" }
+ ],
+ 'directLogins': {
+ "record 1 direct login": {
+ 'configuration': "",
+ 'bindings': [
+ ],
+ 'favicon': "http://www.example.com/favicon.ico"
+ }
+ }
+ }
+ },
+ 'otp': [
+ "12345678 90abcdef 12345678 90abcdef",
+ "fedcba09 87654321 fedcba09 87654321"
+ ]
+ }
+ ]
+ };}(),
+
+ //-----------------------------------------------------------------------------
+
+ 'joe_clipperz_offline_copy_data': function () { return {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+ 'f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674': {
+ s: '186f0c40bf73f2af236eaa6c429df225efa933050c9aae65240e93b7b362e3ee',
+ v: 'ac61a6e325ecf329926a86084f591d8852d0ad3e4a6080f2adc901b82395ecaf',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5":"0","13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551":"1","062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80":"2","ca01bcb7691f70818feed46c9a2a91883ac543997a395535aedbb49de166690c":"3","507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a":"4","d5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d":"5","de13c0d036234c44214062bc0a89e5f127470c464333493a485729f43cdc26e4":"6","d620764a656bfd4e1d3758500d5db72e460a0cf729d56ed1a7755b5725c50045":"7","f215d89bf4583c12f5ed4f4330f488dad3fffa448f4dc784f15ef135dda2c732":"8","36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113":"9","fe21497ef7435d31f9746c132e4b5ecf5aac5f13b5961ddb55d2bdc3409f28f6":"10","6d45c2fec275b7482d41c76b20507100cfb6ab49922b876f9dd3040d361f4a18":"11","9dcd2a8a0fcb7e57d234dc4fea347f020a6a01793e40cf56a0d22379e590e291":"12","6c25be8e145efb26a1abd59590522f73fb2e3dbc139af2217074d9e2ba92c16a":"13","6026370f3db3860d2c46a08e389a7e906dc14f98c8444b21be9a7e9f405a2728":"14","8b18e8593b5bc2f7ea39a5fab222047034ef2f380fee05be0fa6e1c0972fea39":"15","084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d":"16","7bb69b6366a8012f181c01e368ba18d4f7a82bcabb4959189736ad124c4bbfbb":"17","5cdac63b317f3942da38f3a3de3b7f0e5d6678200951c6216230295550f63fb4":"18","c0ce9130ca365bb02418d4305ea1d29e49c3f0e96d44b9d3cb6b4b6843d25065":"19"},"data":"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"},"directLogins":{"index":{"61e87fdc4f1d9112e3b30c1f6812d095dcdb24f014c83319091eb6c9899ec348":"0","989593d4c48929f0c8f1581aa96969c622807e99619ed4732026e967530a68ad":"1","9f7979368fa29f66c44bd97ecaf6c545abc800b1c7bb21b7655a68e1514c3906":"2","dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496":"3","aa18149164302d5dbe7e2d3724565b9550e00887b49978559783b2e38c625584":"4","1f9bfd677b531a03168d3f8bd8afabb5357244a7bc355dff50bd6c0a072114a6":"5","a48e38845713462ecc9f827149eeaae87da882031f98ef8ebbf9ee9537b63468":"6","6f7bbc4e42ea462b5246e6f51c3f86056bec50601ce2de6067c8c1d26f21c07f":"7","2df54059e78f5771f23bd285cce19595b38331b73d67020424d9a1b2257db09c":"8","065cd0c270e5e8ce50e4ea8e3828dccdae18c01ab030813d756a87d03fe68784":"9","ddbc8d01300a4f10631cbde09e1246332eade3a877a2205209f9eb9e5bc9da0b":"10","9b7a30e667afc9f76ba77600658b2c13bff52432d444261d39bf3d069a160afe":"11","9fd2929cde3d32d9cbc5f1d787f2f64729a5e12a14410556b31c0c099762c46a":"12","f695fc36ac56bead80c0d20a88e01e382819c18dc268f1679551b7c83db7cb14":"13","f22dc41ffabef4b3bc8f7af804fec975bd50718098322a673cbe4aaff9464ae1":"14","03251dc1cbc5398789e4c4b45c52cfac3fcd8c1a4f19a81fa68fc6feae31d55c":"15","a7b32e72502804bf2946a2a8856139cbbb759c5777e6b3e673db1fdf7e3bd06e":"16","cb9ae0bba1957075ccdbfd3b3481704d62087687a2ac7c411a4f07d444bde0f7":"17","7e1d069b7fa57c03bd7bf48807520feb953157834503aaff8c9d493f37dea69d":"18","24404059cabc63b2dbff0f42ba57183108b8189ef53ab62fa25141a1caea824b":"19","33cf9758477460a8056deef0295a1ebe65b39b392c361ceb920a83edacfe5d78":"20","e9a16316f330e3d150f6ffd194f6fd8acd1426757b097de4b88ca0db875202e4":"21"},"data":"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"},"preferences":{"data":"EZMrwxNFFd1sMGycoYE7IrlGGrfLixLUnLZmWMkFysfISe2ay3ueO0PGCApuKqh9hA=="},"oneTimePasswords":{"data":"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"},"version":"0.1"}',
+ statistics: 'SfGy/4mpXQdDOv+Bcfie4Yt/',
+ userDetailsVersion: '0.3',
+ records: {
+ '062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80': {
+ data: '7sgxSQlqR+wh3g06M2+sWp7raQxjjQ9jLIz2OcEB7SckuQcXNrhMlDCbL6ncSljtzgqhioWrOB409kIG8lc7h6ekghOE/Mhi7rVwAiRfNGB7r3mYxpEXRe96O2RG7E+NcSp8ezl+5gJ9D0o1abXPeFQYGcr95hUioCfyY+xrxY8TJVwdb9nHkYvBdKV7rCl1dTxgsKWK3nlo1T7e5uyiz5YUAE6BrCtTFAqtprLI/xOpRti9C+llohS7D6s8hkCBPZfp3chKFDrgpsCBFLhXN8jrBKSjHi1PJdRQzpJsgrxyeBj0dZx3gTsYOXqrYgdIzFUo7K1Tqb30yNprBiDMr7j0YYXiSvEb7OuOIP+HTXGN+yt09bk9LggyY6Fh0e+tenjQQ3soySN/XznOBpEjXbzXoz6fR1MXVnE9GgaX99LVNqwWfq2rIBdSE/FfspRiWP3BY5jIrEkNeRclS05U1zw3K3wxOL+cB9r2IynSXnK8QcrDNNRZ0W3PhsSFfByUXuviLSEOPuJa1mYP29L9Lj/WyHL1Gyl8xLbt2H41S6+wvIleKMuc7teH6wPXbnYphvbwBowoI6HZTEFkz3dQKhhY6VF/81iCXsuaz6BjyrzFX6SkQ4S3lN1tv4opQMJFvnmHb6EkXqVWfeIXzJIJO+owL4vDOf4okpAD+HPjjlVXhq6fvyM5UBIK9+tzJW78X/zifrQOfWRIhwjVsfUdZWmZ/S35vnHWNuXkM8GBYrDysqxanDtah3U8XLAiIhFtBOzpzr6qGaNDOKKgG3K8QXT4bYHOq1rQVUwzQuKhlCyStrRMQrC5Ry251xmLy6dKfppRarVeGDtzB/30BbtFNdZmzMNG2g+Jj5tFCrEtCMvMiQEWZHMU3tGMFxDef/KKdv1fFTJC16jmaUiCHUZmNjB3EO9R6xPVcMlAVKf57n3efrpRk/GTmm9JhAFkuF/wsveH4JjPpDUdkHYFu5tHbb30sbga3ufBAXbQL4ck10S24akU/cKraFGLvuKGaR2U0i6ih911TBSf3pAfZ3RFbBhVIl+6rSknC5+IXoBR7MRstBPW/xC9pQVjN5Qyn0g3aUjUSI+q4jcTuvMl32NtTJbWRMGhfkrpVzypZTyPnIh6XJkyBghlUARXw23MlbjiZxmY4ScDmcWZRZJWIknHlqjDKFDKNnwrfnEI9qWyMDno+jA/DEQz0mnpdZYEsoz1/qAmAeDt89vx',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009',
+ currentVersion: '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3',
+ versions: {
+ '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3': {
+ header: '####',
+ data: 'GCNNIhDQjMJQZGVSf+95fPtU6eOnFWVhuGm86r8WZGVR2Gf2EjbG1OJ0ZIGpZ/AXgirCMpo5AFxJe0Bay8IYg+xmBqMFhwFxzAgJBYCIts+raSaNRipuY8dTEqDxAqD1cChcG8EhSoiFgQ0fG0I7nNEUDJi0pIt4/ygBcwvAhuAenEp9ZW+oQA0+YysPQRqkz3IieFaOoSEbe5/SqpUilV4q1gTVyzNXvrxzxx+rlvEyGFgFN+vgtUZ1NrwlPk4gVksTpylvv6CFaMGEWKhgMG6efo0rJckKosaJTu1pldJdnmMK4EKNMLOd+jZ6pEhEhYyadrA4+zYU5TlmZA6ASzTaps8piSwZodoi9qY0ch2StK4mAbzeEGe2HdfHuAU9Tyq3Ppk3+VfNdKgpQfYrQOiSlXbKzK636tzXTN/gyrfOTHjBrRl117ywibgSX63ayAYNfcLpKotC',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ }
+ }
+ },
+ '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d': {
+ data: 'fGzBu1On7e/6rAoSB1a4fq/CkS8Be/T8UP5cQ93asBTWndSYu2lW4DQ4SXQXSindIi3OnNx/f6SNv/extb7OrMLREF92wXI045ipPwy+DIICb+cQNMJ82Sh4cXaIcAWcyrm+MYri3qq9LBKbpwkILcebZidJ86lmKYHJozUezmfbMcwNCljHs/gYkHVzVcuw9L52Ugc6wC7sjsshh+UH6i4/2Frlrophtx+b1vervNd8eoYiKnedHVXVfW7UJcQoF27eHFgzwYnGvRW0KNXFFhqmPb61TSkIvNdCCvBKDP4SXrWvGgzU89wipvWdUPpQ+fCT6Mp3hPRrbJxwMunmjujZOzBld/HkjnXoiNfBb5akA280WvdyzWYATrjV1ZFx8yQY8G0+lRt/MxjKDc38w4y+Rf5WeRbXboJMvFatwooHUggk6qSRmZVvgOmFmNuDRnRYIFzqK3JclhJeVasnqhR6RiGSowc1Ffr1HhcZCMnXpQABGBkZcHD/zw6YjHRyh9Plw7XAm0xb16HMDtiwt7WLJpxLH/HP99j/A2hvMGWiUiFCaYv7AzyEPTmYbN32D1IsAEE/GC3FG0HypGTBolP8wpAfTRdlvWpJz8oRRdwuLV3Pgpu+kXh5sQyeZI6tnuMPQFmRDcMN1oo3E5V5V585nVMnKTFcXhBzD4UnoV+DQNkG/+iSPybQzz/EZmucEqGEYyjI3kl4MAX8UMEUxE4JO0fF8MzyBI13nxknowAceEammx1dGVaJCoIOdhadaPVPyOzXM1Vp1erVm5k4TsxSx1pll+GOm6hVoNHIuQLDueaMEpRxMhfwc8cDyXURqRGPTgTc0bint5xVjo10fnpX1gcdc/AWL6y3tXM80NW+uFJ4GI7VzyzfcMRzTiRaGi19z8MIx8PbIVGh2sw4FhgGujNsPrpuESvUVT+17M0+v8oEoABNlcizTMFs/sA1uqlPumFASltzmViAzClOsDuCh069hFLjdk/Ex5jy4vPYlwOT8Uq9DJC9ZWuZgiI1DrhWN/8QGAEGxxbvnSZPNCQ9kpD5p+iabinLLWOAirVNgKwIRJRyAu/uR9xKd7J9Wxq8q/ii+y5lGilbo2g24wbDwrkXYVhqp/4J0g+p8Wv1NBjCTSCqV39WEizUCRHo3ee9HnQnBJQDOyTBRuz2odTJtJ5tLYjWXZRdFzFSJrEq+Z1z3oq7LnhZy3YWaFXPeKmBCemMthtNt0nL',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:49:20 CEST 2008',
+ updateDate: 'Mon Oct 27 08:58:49 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:39 CET 2009',
+ currentVersion: '6fd60c5709a4808444f43f7bbd872363d76703957f613076538ba2f9161206ac',
+ versions: {
+ '0ae362285f103722abbd046eee2b7d10aeae6a1d05cbaf2081392ce9df882bcf': {
+ header: '####',
+ data: 'sG6TUmPSEPFpiJ5YdtghWHmHbvUK63tZCZ+Q5iz2ALas//jN+lZCBhZcjEwPEJskBkK2R0MyAh14wWGh2bBHMjsokgTe+L+x+0c/Zi0epE/IC9gtOBhsTe/hZ2e2xOGF/SbzET3DAAYXvxduZ36f7SvvFnrkkKvpj8wGSdTFcBmzqMb9DL2bRyRCLGLMzE3F1a0q5CufCIRz2TgHm+Uw+kfvvwC7ig/F/5iLW90Ypz3vmEtMEFYFHZ9a8Oh0rsXGfevbMhFqALoywzihQEe/NiB8dwn7GEdYKSQ35rhvZh29ULWOZinqmg0ONe0HYaxx7DbKsVoue57S0CIUlgHLajzHfLfqQg2sFI0OT8TnHsGg0YZ6mM2EdKmEjJiER0cP',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 17:00:31 CEST 2008',
+ updateDate: 'Fri Oct 17 17:00:31 CEST 2008',
+ accessDate: 'Fri Oct 17 17:00:31 CEST 2008'
+ },
+ '10f45664bbd979a92f37886f1ecc6e52e49798b16dc997aecd37259ad9b2090e': {
+ header: '####',
+ data: 'RdKVaV/WWWchrCse3KtcXd47Bfm6IAwjqVUpaxoed3HeunI42AAm7xYYSjeK8edHpbNRJbhobBAX5OZtWIp/HmgkobKM8CIiWxrWz89FqyrbnPD7+fXdtgF2yTax/0sC1l0ibncdOuJKX6U829oPlXCpXIOjlomc4wEEAD/5V6FbORvdZ9IE/ME3LsG2y02cT2tIpx6+R6wC/PKXhZA2UDsTE6R2Op2BtIzpVORZLXsdyAp/4wvWQxq90i9cEpbsVQsMB10JVyNHNsRTFhIlHi9MVCaMxQvcrwRElMj/Y9x3RbsFzSGKqFLqdg7Fn/U+KYkpYtsgHv9hraPIb9lV5FH16+iItU/HBM6FGezIj1ZkoQ+dgjPfSjTZzgzDYwyb',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:49:20 CEST 2008',
+ updateDate: 'Fri Oct 17 16:49:20 CEST 2008',
+ accessDate: 'Fri Oct 17 16:54:23 CEST 2008'
+ },
+ '2fa7b67e569d5e268d2b70b3d4d3a960d7e437e1937bcb324b67d0b9441db8ba': {
+ header: '####',
+ data: 'dpnI2qKjk0+bfyKktw4ZCWf+rWZ12hO5bda39CwD29JH7KtdpLCLe2LoLd+KKF2wOdpDsoI2iTiwRgFpt77e7DoWJABxq/0aaRCVN9XpqZo08iHiYhJyNlIszO8CdEhX+M3AeZqzTnd6fs91VfIEWggvku2Z+jwr0CbclY6FnOcNnS+1fj+W79Z9XC383GOm2ujjfo3SX/fyNQSw8aX+7AgJIRGR9uHK7M1cVfsNNTbmDb/HDgLlYZ1Pqm/9poHpmS7G4HUoRM2/WjI0R6F48dy5s8vZRi11SCnlnj5oRykScJj6wh2DltbCyesiaTpAjP6MQjTXsZzKpaosaQcQClZw+w6hDD2cA54IaBIv2j5KAHyhxDh2ERdwbdnCsDKPz4+zP+fmKfW295d4OY0l1NCSdcY+75HWTmBWRAooZeDTo7AE8m5sRwxewE0Y8J2MLUYsrs7Rl4kbZCiRRHU7cs+us3fq2DVn2OLGEbkRrK3kA9swT9W8ABqINoA79+DmDaIr6TGxe5AlHkCAl5sYAN4g42UX1NKhl4fWI1Scj9O1Ixds/1UUvqzavld0mE2cR9yt6LntjE5sQSAaexvymAJbU5IIM5NTk7NlY7G3PEvAPjcUsL9SGw==',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 17:00:13 CEST 2008',
+ updateDate: 'Fri Oct 17 17:00:13 CEST 2008',
+ accessDate: 'Fri Oct 17 17:00:13 CEST 2008'
+ },
+ '5a17723c34226d8cd663f91b11bfa14979e694e461818113ec8abf7194b46b6b': {
+ header: '####',
+ data: 'yRTvhkoY9zDRBwFYf0G5U8zhfS1XWIUfwes6ADNnFyOrHOr7JZvZZHSgkOPnsmN/f5ngcvFaIV9X3TNTmmPLzD/ewgGVMR+ofMLyOIMGhxUDzosSd1+HKqwDZWneZ6xNsci87W8UCfJgoEGrkAtAwktqyS04pcAas74XiRGBWNcv5mHZONwGPckYUnnaVG02Zf+qif6Pp7ugdvXrgncO5oi2AMSoR8GQxMP+tX53YzLwOpabA32PDT6o+aDPwMstJNQjWCXjeYLDIlb0GjL2zgjglX5CfdGw8vNT5hwGEK2D1FkvHkw79m++9sOWd5w9WdGgtS4mrTZP3JHWC1sPqvsIpq6PsrzRrbfCFH7C4X/ya5ciOIZTCNl4dEGAif94zgN74ueY5BF31PNFtaRaQ1waKkbsrU63MrbQbBar9b0hDZoser3BdgDGb1Ecc2GbJM1HbDITttmFDrzy/Ugh2kistHx7Dci8IGgfT7K94TntRFc5R6suEqYRrmOn57YJTZYrwSgbeTqAt/KOE+gL9LawiLJ0IdSC2RQnO3yu/aOEThHxpdLIKiVJoiEQXYVnq2UpnO79GNtplNnUe1hETQ/JT0o5X1bbENyInUsFjPuitAfChXofkAysIhDOHAdifc0Y+pxOHbQLkL65ZOsEDXWSlwMcduMNdQm4LVx26GLIV6yVsaDN+hGta2CxUuSvEIMM6T5xhaPfJ4K57LVw9MbOjRXpmFQz3QgEr8ZZdUxgE+Kj6CtmsjvzXtCQ3Bv/SccTLJSR/LQ8XRdIcPoOlDDy5jSQDF/8lxkgV1V7M3+SI1iWESPT8My5C+RH32F2MNZzthYq5hIFUB3wsM/AaQ==',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:59:31 CEST 2008',
+ updateDate: 'Fri Oct 17 16:59:31 CEST 2008',
+ accessDate: 'Fri Oct 17 16:59:31 CEST 2008'
+ },
+ '6fd60c5709a4808444f43f7bbd872363d76703957f613076538ba2f9161206ac': {
+ header: '####',
+ data: 'RgIWPbNN3sPkIPBE6lfvf9/EoDFLemTZe0Qh/1wZLrKxLRNzFpUk9+NmeGUp5f1hM3XjXw4cXRvP6GrWq69mz9zGja+1TA6RoW3dFMpSQkbONcrSD1mIjxV2zIvzA/Pangz0ZixbEeHCfwXLvgnevbTXXFjkti3kLHQlk2pJpM3zMl+rMJtcsefszuJ/0tE/bO7sBcFqcYgKAht2OyDQORBAGiW1kI9USKM5OOfJJIZDQ0gDhRgl2U92l3kIOO8hdnj32oRedwfKFmdSRkuMY7ykU0bMuVEVkLi/FWmhHxi66C2ovAztVtMd1IiyoNcHc4UH942GC4pT1A8YQpIHxBAJbrQVhpl9LfFkmJ7xUc6Xs5j0Nv8+z2JGCnJI/D4nDJqYW+iCYtRWu6vUmbg0vGfaYWQFGRZRk8zWfHzHXBvHU8p0QsIjYgCLKiUaU2SRRD2P7JCjeTUrm3I1OI593iPsEH9J2PHCM9OMQ8/Fsdgd7lWgH6P9jLdGUwtb1hGaq8mg3JGrHFXcrVkUEBfeR7xljeSHD7j4YahYrua9EeR8nvq6CNaOr406AWyHse9SXhaOxt8qXRLoELpyQPsaLgafUpsdLjJqHz7J76Rp77NSOtXGplKjAtU1xj+d/agaAKYCjvUJC8/APJI2890Pn7VSXr/TPc5biPEIopyVYEHFqaT4e5nZW1Ku1HXC9gwUwUI9rITG4GzIH1WMEm7oFLNUaSMrdK/UTdTJZ66ENE3B9v9cTUpR0NTkbI+iGKDnc8GHPRlr2ZJwN4KFTxi+o/kkEOBjvRHR55nRh2+dke75LS/fzHQZw5wlyqBv5ZeUZfRA7QHfkj9acR0fJSqqNX25AUzZQnRL3oVpOxFWCMU7QVf5VpnRm9OIOd/5F5EoY7Be4doM/UV9U40F3E6XPZQ8S0GKQzrDjc7jKyGPLNPLUWTmGB39mTNDHZQHh5Xv5Q==',
+ version: '0.3',
+ creationDate: 'Mon Oct 27 08:58:49 CET 2008',
+ updateDate: 'Mon Oct 27 08:58:49 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:39 CET 2009'
+ },
+ 'b57a2d2ffafa8029123362071c09709bb9192f06a17140440f0e41d22143148f': {
+ header: '####',
+ data: 'PQ53T2Vo2D8PoLI1qNX//jLaVZFTDTYk6geT9+4RoThTxvlJ+beDPnQzgYhd9iASaF9GQEEL8JxsBnNpEPa6JPOY4ndFLmDLyFDKXMprxq1UIbzFV6kFoYAk3uCCCa3UCDzdr1KXB2CiiF9HrilaA+xkm8krAvH8I5kZD+j23gByz5cAFvXg7A77KEURpjujURL65DW5M+ceIjo6OXaPW9VO03xhqGt/M47ayObpoEGJZn+X9C8s0SE5wOXHbn38YZlRI480OMvtDAxbEYUeQKMmzu6lO4Nw5hhOUjoPSLr/i3tmDx3nPcDwnSafx6jyA4y31eW6yazqTEOP5I5ArC5mUrF7mAAiFvbHIsMoF8PLj6MONlRIOZgbf9HzCpFdt8xBrX/TXp3LaSAj2XTWgSTFI2cgmU3qqPyibvIfUsB5cVHQCXi692JpC+B85axJ0FLyMl5w3vq0txlPkf6q+dadPYDaLHGZEmDjkWScA1GM5xPJHWFwqGE7ejgXKG0sMYsMKWYk+F2LEUmMHtEvSlpgJBntvcQ1ZjYQxeu4hg5txu1ykkif6fXgkXF6wn6qu+5caeJeNhWtAB4q7WVD47111woYMdkmX7AnDTXSAQ==',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:57:17 CEST 2008',
+ updateDate: 'Fri Oct 17 16:57:17 CEST 2008',
+ accessDate: 'Fri Oct 17 16:57:17 CEST 2008'
+ },
+ 'b713e0a1e2664ac7bfa7ba887329ea023204d10298973e322983b82b222debf6': {
+ header: '####',
+ data: 'H3gIieYrH7Oy8LEWCZpl9vGp9qYdHNCoBNGijYqlcfXt+1JYvPj1abPp12xLNrDUHfaOZklU2Ip4tOf0CDNhgAan7LYyPqFoy9ss2f9/5RLcbjwiIwSduySIL322HTAwqlzlBt/qaJdHHPUrczmu0fb7fT+0dO4gCL/e/IjcHLefUUgNPAbpHG0Nv0+4lNwKZkIQM3tLRtfJyFBIgWKcMcP1XMic33kr24rwybR8Pb0CHZrOOvvUiGqyoED3ZTZf1twUDVNXO7MWCAC5dBc6/Mk/vSmbbGhppXAH02N0g8G5qzZfp3UVikls55VNhRYLHByVsgpkbIrKXyZnBPTwzm7qefpYAXDOgO+164L66/Art2FYGqZQRZLuh5r8oF38',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 16:58:00 CEST 2008',
+ updateDate: 'Fri Oct 17 16:58:00 CEST 2008',
+ accessDate: 'Fri Oct 17 16:58:00 CEST 2008'
+ },
+ 'c4cea1cd88a86b05f48a99896a37967c3456228283a0406331ca9f67c6f29f97': {
+ header: '####',
+ data: '1znWPwc9JwCe7iOFiUd2iGm4xJd+824B4VRqEtzCQkW46tg25RWfo7XagvK46USB7t6pC8WMLU0M/EC47KucsfpWUqHGbseoXT/8g8E8GoLnIsk9qFyJG7LGd1sUvqBgszLZwjWWG3t9zifmpW5nY9GialBYNmeSLS3bg5xDH+eCEilUUfDe7zGuVSuu/XkHacv/DYUst97e+6u44F7H8Kv8dTywJZpqbmveNPeWfCej2aBXdVV616J5lIRaj2uIYuQYG7blYJh9KZ7yLStdPndl6h65hIJpfWo0PM8nLJuo0lWNHz7misrutnmxJEjkwVIZ5YAmqp1Zz3VC8zw4IxkXrC/sPmp4PaNXgKz9ZJRaY2KV69WmHf7BUQ3QneGngbT0tN526SS5qDFwTGiuIlnYGWvTB2jVrbns68n/d8Fps8sSWfJBvvXJUEkaZB+1WqNilOPGXvyJ5k2O/iucFbRlxwlEHDny+AgsbtXZdp8cHQ4C/O4G0mnUMZuS38gn6e2kQ55mUhxKeORM+J6Rx1y4Iiu9KKNbxyS5eBpAlFB4xS/o35CS4g309vyOEhi37F24bpp4pM0xEPG4mcc/IyChHzaHUGEp1IX1ZO/r3ut9RIN2QWrGLUlZV/9rFKpLLAy6BkY/g8VYNrV8PztOL3rqy/qwqNZouONwPw8w8SA=',
+ version: '0.3',
+ creationDate: 'Fri Oct 17 17:01:59 CEST 2008',
+ updateDate: 'Fri Oct 17 17:01:59 CEST 2008',
+ accessDate: 'Mon Oct 27 08:57:58 CET 2008'
+ }
+ }
+ },
+ '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 14:53:11 CET 2007',
+ updateDate: 'Tue Apr 17 19:17:52 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:25 CET 2009',
+ currentVersion: '88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854',
+ versions: {
+ '106a1116d22c2395906a346da4d830c7afbd2da9a46210d0b7a11de238016783': {
+ header: '####',
+ data: 'jgDUvByveAFnchBQKhiHGYDNDtj/7Aja2RePMer0FCOkkEu5GRAiLkxA3/DD3eiU+g+mCxnjnOaEIYL1O5o0+JP08XapsblZHTRKfveeFfs6sWwuqEHGYULBaXx4XSfK2B12HgpBwa5aD49489AkuyXi7t/aAXcKKJcLB1sC61DI3NsmajUaXHBi31Sp7nKAUpMuiWyguW0JVfH6KUPqyldVDBTBqHAis37c1qoR6aFHFfGgAfb35+syfmPRgemujMRkj2XO6dbt9zAYlHVSYFp9393rwPZoyBfXMMdDtSTmq7H9qbmx31GecHZlFN3NymtPPDYUbQ9mpPVRbxE9NjtiPrI5eGFvb++OdOx75PKjYjCAPWWFZ+4aryNn+h+yqab7pAuoG03ACVVrAFIOn09g1ssol/vqvalulEf3hAIviedyiNAC9D0UDHtzUwyIiELvR9qouXLZ',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:13:41 CEST 2007',
+ updateDate: 'Tue Apr 17 19:13:41 CEST 2007',
+ accessDate: 'Tue Apr 17 19:13:41 CEST 2007'
+ },
+ '111a8a4b6b912b808a93cf5e8785ca223112628d05f0bfc5dfe1eb40cb72ed8a': {
+ header: '####',
+ data: 't524etHmXljCnLC+IM+WPD8Q5VE7wDsSHVNZzFU4hQzk119t/N/vhtfHYz5HgNstU5T8c7h7RHKvFk5f+4ZwgNgDqSH7H2PrH+7/bV8+uuqbe+/3GYOvELjTF7v3xMyYs1B7ruHpT+291HVNZqxajqCl/+9nbG0e5feqNsTXWUTdLzF0szJuCTNr2I+fhxAO0LRVaf8h+MBPYyuBDnfFDuKm899IsgF9YoYRvjaYO69DkElvf4VP2jrXIJsRnGIUfUaIS/wQ54+X4JBZM/9M09MVOw1SVe+cwG+P3xyPUkqnSb77ECo86C0MktzeYFmPnPv2SM2KFA6slctXsyudoaNlReh1k+6no5J5BjaawTfqYjYrAtWSPsuhxYVsZym/X2CVbkz4rMSn+J5Uio9N5uZ6AqgCKdhAJlwzVb3fIIJwvFpVpy/0LMskb7aG2i4eAxwzx1H6rD3Y',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 14:53:11 CET 2007',
+ updateDate: 'Wed Mar 14 14:53:11 CET 2007',
+ accessDate: 'Wed Mar 14 15:24:35 CET 2007'
+ },
+ '144d6eff3eb5f1cb70c8906741d88018cdeeae3a618ac4066598ad6b04242364': {
+ header: '####',
+ data: 'NPgSZF0eSOzy0/Ns+15Nz4bjSwh4o7fWYgKgwXLRFrF8y3EdbiOH7AiEmmPrCpT1raeYLWCcDIrRTz+/9uvIrz6kK6BjU2emr8YdyLai+PTCRY0SafWS3QiYixX6DJiKIt0SC2F6dfmSHwNsbfTHilFhVXn6wXTJpWvC+sRzw+h42cYpQp0BoLSuFV7vPz/+wtuQdl28BiBgLzGsrtPud0tPcfldGox6Ia/1SrOPcqUr0tnFlNQiUvPU7N0JZgRNyr1PfpAEhmYRI7aEJidsZ36vGQpE0ZQMmQE/9tLS/InALRZT1YXfMsytf0o3y4QlgJrvRgBL7fGiQOZJpU7igLk15xAwU+OLIaYIbr2xlKDJvndHOcrFoYKry9/A/aZSnEYv79wsaf64bBgIVD2WJGLuSFFmzlFnbg/O4kGTin3A8XBpvFA9V6iCMvnEMkrqxD3Qgf7WhxFE1A==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:33:00 CET 2007',
+ updateDate: 'Wed Mar 14 15:33:00 CET 2007',
+ accessDate: 'Tue Apr 17 19:12:56 CEST 2007'
+ },
+ '1f1bdb7a21440ac20c6d913d676aa30dc360252d27059e77df51a1be36b2e263': {
+ header: '####',
+ data: 'TaOHH6IoHPKLLoyLyvsBszgsPPcDs6CiLVXzXuXjFSTrhPxzUw9suSsisgDRRs0ncjZ6BCyqoCxMnw6QVvGN4viUwYVR8AWdCg0NMQZ+LkNfq/2WN0M3KyASI8sIdMCwTb57NzOn9soB1HmmmETZfjr7HpY2cc+lS5/4f5rxI8XTEK60lLed+aEuJamAjeZUdgIyu30mMKKjxPfY3Y9iWMwn1OD0zF0mAW+hyEoMhhK7EYlWKCy+4qN0QM+yNFXQyERb04o2n4XrM+qr9df1GtbQMH8igK5VzXIrKjdHjKoLo9G7D7mfx6mRLsmoAJuE0R8gyzotgdBpOgWasHJ82iWEa1dLRKBHJ1d0Lnumv22tvYfasx2DIR5Tmx3kIQ3hFieLSXq48cYMiaZH/IbLiapIOlMgtWDow8JuySBLei/8FAV8jCxSc1Ui/SjbuK/kCvywaSOhDVIxGw==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:26:35 CET 2007',
+ updateDate: 'Wed Mar 14 15:26:35 CET 2007',
+ accessDate: 'Wed Mar 14 15:26:35 CET 2007'
+ },
+ '70720f026f37b571e9765d27c51d3d60c7be0293c3266f1f987c8de9c6b5c416': {
+ header: '####',
+ data: 'NYaYljcgfzrlN1DVgrbyj4AeVhXGjXPho3IQwEKD3ZOx/yEZxldCNSyFsrk7PoRB8Q1T/6VV4CGa4HLRSB7QVCrtVqWyu4KbbmFoX8NIQ0H3xv+TSo3S/b3dldUeyW32ScaGbspaf8nFf0CffsgpGusd+kHdiE3gSLJvH9y5j47KgpyyX4TteVzqgez4dcXIs5tdzJq2eUlknwU4651QeKIuRSmRaDRhhOP4yRgUo/qXMlTJFmHviCh+IumvBdmDoPe3Vc1vZ1r8PxpDJLvDoB8GTDE42NhqHfVrew9ym1xlTD9wswwIEikfOyTq3JM857qPOHRqSqthEvr4WHbm1VW5PReIyse0lugGyOzqtCnADp9NvNI440VjaTd4NBQqF7XrRm56+1u1uTdfYGFV5BRiH1KmrM1sxXQ6PlOF9Lou45ALo20xxvJOLKG0RKLMr8gmVT2bNtOSJw==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:30:09 CET 2007',
+ updateDate: 'Wed Mar 14 15:30:09 CET 2007',
+ accessDate: 'Wed Mar 14 15:30:09 CET 2007'
+ },
+ '88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854': {
+ header: '####',
+ data: 'xI3WXddQLFtLVzxJaZWQaw8wAgSuXLjLnyoNXnFuLecTH0BzU36PatglVh2HK3LM8aDLzzbHILdlLNnJ9CY+YnhmGh8hswF9oKTgq0Wsesgdc20QhSMNFFjmMljY1LSXmcAYK04Q5mIzi6Pe/04DRdj+e4zbe5QI4vEBhp/ohEpxZnNqc4BoX6J0eVf6LA1pwrKWvxzMxorWsJrrr+mn3svdlF437n+MMr89k5sQJogufes2GZ9tTvVZ4247ITxXqxgAhwXtbuIs/A5UqqnNdsxlHfpLKG5KjxB6F0h7TtFA3gkZCve5UmAibBnoBCFaIVWQyVq+VO9iqDm3DeXsK2pepvgIvpSID8Poy+uwN7T95mivAsHG5p7MtgN9KwQzNW3Iu+BfO9FlPBMngSk8L29So2CIXe6lEsXSGEi5Yrgyo6hZi6IkGCXwIQ7TCEMnlQEGyKnnAVik',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:17:52 CEST 2007',
+ updateDate: 'Tue Apr 17 19:17:52 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:25 CET 2009'
+ },
+ '9588b523f39cdfc14efa1e15ea7716c2d8eac45d8efd7bfeb19d716f9df72d66': {
+ header: '####',
+ data: 'q6DKkxhgDFs1XkqOYf6dvojPF+yhJbniTLFpSOS+I1sum3EZIJfYxJXyi2Jx3KOVNBMILw1+vrSLe/fh5SSWj8ZBoeppkPPLjyRNdiUyd4IfcRM5OSv2YcTxCubKCH2kIMFAzY/29A6ZGPG+AN8/kxkEHc1fxKaNcj2Cs8qejNR8yK1iKT1Ut9VfEee+Eqy2Ohgdq8wL/xAD5mUzdqHeQl8BY16pXGIYncLxMzR+EJ8E5jJTuGv3O41UbO31lvBSfCt2pfz2MrtsuqNoI8LBHJkcR6t17Bj+rHZUniHlyxSW/1rQJ1NnwpPgUJ1fhfQJZM8Faoif+0bvWFY4xWs/tCCD7oEvf0xM0I3FfcJLbYX8M+wyO08t9BmGdEjnr3VUcuS9qKaJRpdpMP7aQf+vJvioeQDXdOJ6Ceo3BDFc6JdNta1Qc+agGzN2KPbIPrLDL+08hWl61yu3GQ==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:27:35 CET 2007',
+ updateDate: 'Wed Mar 14 15:27:35 CET 2007',
+ accessDate: 'Wed Mar 14 15:27:35 CET 2007'
+ },
+ 'e5b71df0d4d79a195c7ec3288dd7738069837a7c4da3bccc1ebc05d8e4f19d79': {
+ header: '####',
+ data: '1NvK9Y5r0Q880BfB1W5IqdOR77mmqQU0d1GL1XUeQT75R2EgYE9rK1X1jLygCXboPhxzegEe7TDhUsn5XcHN0LkXcLYz8gD/7+He2HiTFxoHd2oQbI3ceBxDJ7+5kWA6Aiqy42QSCuA+TWIQcDVthSyFU7nNdqNxeBYeXiI4jgwcH3xvm0+pBf1OYLtywjUK1JwntP6o68b1LMQJFinDG+sqRcm25ggaZyxDtoLh1IBdSpmXk0papRnyyTGNgsws78dLxnH0Iqxb7FhqYfgLDIvN3i7+IALI0lF0EuTS0hSPlr/1fTz1/6bVt++wI9GpUsrdafUJJMPerXoCK+gAP8EMneLq4f5487HIkwWh1qON6Hvpg+tB95NOSJpqE72VpVxN4+wTQWyDMhfjqXBuQ1wKvTsD/mUsdinU0Wb/YT/zIWBNZPdqur0rjOC+mrOtSdlYSCH89Jj2',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:15:09 CEST 2007',
+ updateDate: 'Tue Apr 17 19:15:09 CEST 2007',
+ accessDate: 'Tue Apr 17 19:17:01 CEST 2007'
+ }
+ }
+ },
+ '36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113': {
+ data: '6fhueIibbxKRA7Mtb9TPcWiUKajnikM3D7PbOROBkE39Vw9E/nG8KrtJlwwPQeOGCFhssO/KX3ymYehCR8rfaEL1f9pfdh5x69mSxKRlOmtEknWqUgPzcb1yPenRbQagERadh0LF4zu91M4WjXK9qynEHoxI/pBhwQb1IsnhwtXl4ELtajudv+2Hv3p75v4XOXFsGQMsHPY+Zw7dkFFA8EXhvuxjiGvnxCUkFwNICFRdHTEovkW3VSerLdrYo5lDgjY6ebr/g7wDGuu4RLfUK4+HpzFwZ0+aOrjpFq2ePg2xObvkkMNNjZ2PcR6Cue0sf+aNqzIHIlFPpY2Hmrob8+bwxocKA6aagBu7z5GiUmZNXGE/Vtr/WWBV2+xIJyzXZPet0MLmSnGiALjPJveeKnnFdDtA929ydcAb8efc0/snfU/uDoXDiO5SWEQ8DDNjj1bSo7VPTtvZyFormE1KjqimqSwaUJzbIS4CxPnoDezaBtQmlG4z8mc8jXq1HfPu7s9PUzcbG30gbF0ch2pDj4h47AhE0ZoeiV+VYZTaYateSifQXKBQKjPcuh9PQyDI0HVua3itbbwxXpRubEM4fbvlcd+7gu+Zq03slYICD07fP0I6XGrRHVTfYpDbEb4GJBvRIeZLwRTQzOeFbPLpBU9Lv3zXxfHfcHy9oK+giIxefPdY1ZR2ZFPKOO0xYJsTr0vmTuXeXzy56bKl+yP2lFst5l9QG8j2JcQEotDV1KQS6mbcLjfIpEnltu5fc2t10Q25Noh+F3kF+LcMIYsDjwanojYlOC93mZl01hmSJdimRTk9otjlRTyC7NWwiyy7fe5IyVi7ACNPZyeUYJUPtKWcPbT73Vtf8W3/+HdhmyYNyMQ9PDCBb9WKMon+qW2+ZVH5yv/KqMHRY1fflAfxpHNhrCkwqcAAGw+G/cetbvQjpkfVT2/u/uLupMsITN2Tgvr/8D2IMm3cyDBUCshrp0AfzARRygHFK4x/0uLfCtQSNjw6zMK8mn80R5aS5bZi5gRS8JBMZ4Q0iG4kBlLpIYtsXSBwl8faljjdl/4XvNNWWrdGJn2k0eM4cESlOFFk4s3Yu0Zspo17nKAHINjHAiP3VlhuKSnk5C9hMU5i3vZO8anQmx9UEwUgQVm22azCjyNtUl6jVPYSNsal7A==',
+ version: '0.3',
+ creationDate: 'Wed Mar 14 18:39:35 CET 2007',
+ updateDate: 'Mon Oct 27 09:16:14 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:35 CET 2009',
+ currentVersion: 'a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463',
+ versions: {
+ '381201fd3b67549bd6630841e8902be1499f3ff0c3514dd464ad9679f22f3561': {
+ header: '####',
+ data: 'DgjIW4YcJAYnckuEUzBFkfEC841LuanGopPgp+YkyMn3xuzdpGq/ObLFMVQaeAuyErh1B0REHPbq0E/SRUZbeXLXWN720GU4GXvY5bnen2h7pHvl/H4yz+kvyKh3EHJmmBjuz8s0kclFJQB48lter+G93TEmUaFke9c9m0IkKlgzwZ/PQKZyIyfZA09KFaozdSxdFRbswZj2Vq8Df2PQsKLapZWX1wYQ3lXOcyvNdTULy9MCXwPwX6te6hTLWxQOiSPsvB8LItlhQUsSbrJcJEvWPlBupPu5SeI25zDnqKDETPep63Ks2GWf45nXZzYYmQMzL0l2cenYFxlE18TcOd1Ms24TQ/iDKMhi60zZoo13qjVT5AKZ80KNu46t08qbACxjv/LeK2aM5TNycTFixGskPywpnb6MCo8ibRe5rs1WcTJRMD04sNoiuriivO2fiyo4rxjfdyfueMlOz+Zeztk=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 18:39:55 CET 2007',
+ updateDate: 'Wed Mar 14 18:39:55 CET 2007',
+ accessDate: 'Mon Oct 27 09:07:56 CET 2008'
+ },
+ '99dc86ebeb20a3db0c5393d6d94bc1150187b04316a876970dbbcf517b55d6f2': {
+ header: '####',
+ data: 'AJwqCWNKC9z8DC4TUI0hWnqHvQ40Y/x+jXylnVAkyO2QYQcqg51odLFSfgP0GiGEGPYwDc+kUxRrfO+ITgTNm+hHi2iIWkP/ljAC+AQ56MAEKsU/USTbvl6ShZ0XTAdRpwI/oqqOhYThVs6jTm/J8+lx4tWoMtNj835py88c/9eW26pLQubr7VysLSWuIMi+iDp7zXZZz/0gxGKDe5xNq4MGIYw8/OK1iJCOsjBdrRygLlS/Mz9sRlKkwdrDsohtRG0F/NdsIoaU4FttGs/rY91SCedvHy6ovh0zXhxOO44O6MiMbP085D1jCjWJn9S1RBxjxc368MGfMJeZja87nuvgSnLS2tGDL6zFtVJMNcH/7GqQPXZv/sNEykDNWpypchCnwYUJxvBVb45FcUzagPm+SSiekWK1hrEntZkZuEhQZp7Ud9RcENpa5h7wXUJSV1vPl8xBylx9HWmxez7D9OYRqbOlCRAEDqup4ahNhYB9',
+ version: '0.3',
+ creationDate: 'Mon Oct 27 09:09:11 CET 2008',
+ updateDate: 'Mon Oct 27 09:09:11 CET 2008',
+ accessDate: 'Mon Oct 27 09:15:58 CET 2008'
+ },
+ '9fbfcd3e7fe30d549a813f0e6c1be58ed45c3ae7305d7367bffefa097b424ee6': {
+ header: '####',
+ data: 'nZ+Lc5LWWLxnPvUrRrHhxG35PHq7GMbVENHfV1oS0Qw7/63NecssNoEbiOwFVMjAshvfUK7IjnzyvfQhNtFRbj2yzHOTWCd0eJ0O0MmvGzjpUntSDu9/G8RFeEu9jDKugwi/NhOa5legjT9pcsEAqR4s4NN/Ac6juQb6D/Z6Wd6wO0JQhT5/QPk1KllDpDeo2i/GPUKvEi/dXpik0KQcVLVylU82rf6hwEgvRQi+j0O5hnFW1E4ttxClrnPBEBv60jkNwcIpD0r+rvomDe8+398xUuB4DVDJoM+WUYfu6Sm3qI0yBfET+tJvjn8WsHhKTgZpOc2BXC7EdF99nNEg6kV5pSxV6AUA1XUz5kW+YfcSzAXzUH74OqroC0SucHe4+BtRKnbJy4h5vRfjTD+FJaj1Va02cxSR55tQhxm/k67z0QeyB98dnU1l/pPHwBlIWa1eR74gswNSeQ2jrzu5JeQ=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 18:39:35 CET 2007',
+ updateDate: 'Wed Mar 14 18:39:35 CET 2007',
+ accessDate: 'Wed Mar 14 18:39:35 CET 2007'
+ },
+ 'a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463': {
+ header: '####',
+ data: 'm3yhZu81UAjCY6U2Knrgg8mK+LX35Y/iZgIEm8MuRDAlg6UUz9Z1Anu63COFV08YyYQRuBzTgR9YQ8wrUD1S9FG2ZmtCDemqvd+5OUMgdn4sK7G3CuzAc5osOa5neU2m4y19WuobkGnhO78ko7pVVjO42q0DeMT92uFL6KE/2UCkWlq5SdFyS5qXEJEWs2IO5C8nVpdlO/eZ36Pl2+v+afl3QQMTthCVIUR4/zVP2ajbO48yjDXhYxzskFjtXMYLApEn0wO0dcifcsYhPkozz6Locrt/R6IZXnfZfuW5XXHbqhutoJFPK6L6t0Ib3B2r1TNkPaMsVs2g5V1g3ENRd0IlbG/uBk2o5tgeu6gOYlA1scEiL+/ad9ZxiqYB2ENCGZ8DXA4VNMnzxVPbO96OIUCb9suV0fldGOg=',
+ version: '0.3',
+ creationDate: 'Mon Oct 27 09:16:14 CET 2008',
+ updateDate: 'Mon Oct 27 09:16:14 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:35 CET 2009'
+ }
+ }
+ },
+ '507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a': {
+ data: 'ncSFmp/+n1pYUKi2fwhMCevSwFYO5irdcpOlSxC6YPOKYavK4iUbtBsilYWd0hpvUHW2ItaDwiyNFxs2Lwegex6dawKrpMYkPBcaZQDa746yACGgCkhz4MAGnUn5HCmz6xhpCVXMMKe3w2nEOjRB+pOMOeJt2n7aw0hCJ9tQ9JTFNrZOxeXrqoexrd210Rmr9FnKhLIvhNTN1/vXRqP0ys10omJ2mowzF4KoEVmz3ET6pS2d7tGjt9M/OYsH/ETWWc92doF5PO84g5/3HePaCo8NCqq4ul7AWJEbdnkxxmd7urJzIscPQPcoLxL7GfG5LhHTFyHlfFz9dNlccfA+OPftjyfjXTjLYZzbxxbi/nAB9Esqj5AoHfqaJM1ZOrZ+qAvm8Am3+HAXrqtiybDITrCLmGH9ukWDsx7R3lYTlvjArwORBUH+4w4/uYGscVm9kOYj/Rmz/ZMH9JibYFcPcOnr3rWXPFUL/XsXTrm9lzOvPyEYJmkENzd54AHC4Lr5vHpeuipWFLiJOrtn2WcgDG/DdLaYGKsmISXj74XDtP6Ee5lKOtbwwcmVNrl11UCQBEFHNybhXvpil5laKddOauLJDKtaDL/mKYPbr5YSk7HPCzRyE7HM2dC1MpBHuJ8g+hDkgU3wQcxYduKLRpuC0uOqrODigGWhVrdiKdZanlWUq9EkE3eH+E2A/CA8mHl7UNaH89XSvgV7uZyOmK7iZ+1kd9OzhBLQdJnK9qqP467Y14KsTt1E1+tqlqVAuK79QMnllaR0e3ztBRAQsyf5SD0KuSGXWz+z9/RjbhamW1s0UFRGh3voQMypU5RcYfYUA5KVg0BiVKFaiZBZKLo213hKbrgE2KoqVDEmIBFmwsu/S3EDzUY22tTB+o8ZKQiYesAUafGtnvsOLa+h6weF1ZvQVBerbD3fhb2o+d4ZyPkoRAsop+5it0QxsWuZL+J2oWybaikxIP/1ZM2ow4QZLaAVqihyHxqhF5UxZ9zrWxfp34BIPzzU9esSifrD0gXZ3mwutaCukZoijnGODJZtFOy9Rl1gyS1IbpyRbwz5O/YRl4BsD2aOk4InajT13Sa1BLPblQcrau13aeg/IzQhcUJ6n7enkrqiJFTP8N1aFAuYv8ilu0V2ymIuCLUtc4cbo7KyA+gnHhZA+DjjrhG/izOyWtQY/WtDsqvo/6ILwFk37JDjHfkchPEVcdl9qT7goG/4zTGX+lx8UTKKZJjJhLjA',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:01:24 CET 2007',
+ updateDate: 'Wed Mar 14 16:01:24 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:11 CET 2009',
+ currentVersion: '395eb58606138588dcd7e659065db48775610cc1e90cbd03368c063e02e55c8b',
+ versions: {
+ '395eb58606138588dcd7e659065db48775610cc1e90cbd03368c063e02e55c8b': {
+ header: '####',
+ data: 'sgq3FGcsnlbhTLetMa3TQQE6uFZv/JL6Awha1066IimKoAtQGbAr6E1+mxRmvJle91sL7oRfi6suvDanYHfAI+rrG6qCOtESn70ssS+aGFyO3XwFgypzG/Qa34bjxJ16Aqd93H8IdhzdtOxs2Qmou3CjyxbT7Cq+YW/fAo1WfctL4yE4GBNPWC5lfebxSmINlBY+zTjhv9Pf2aK6vL4p3obHl+zhz0YdKAMBwbDyCLa9tYvhGBnq/W6lFUsyZCPVJJP3bQCQww0TNCcLJLm+SYVSiC0NwCQJq+yNqDkWTvv41p5EDB06eOQ2VqC7l4i/JLE/ql9h9Z++gck74/Qs3ppdVdG7sTzWyPya4v3RW2OTc1awFRZipAX5Zd7I97dyw6Yym4y+/9UT8z8iMDYykQ4+QnOhksDIE9a8q6agDF/rbZ/BCRcMWbFylGTdudk26mu0GdPiuLDu',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:01:24 CET 2007',
+ updateDate: 'Wed Mar 14 16:01:24 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:11 CET 2009'
+ }
+ }
+ },
+ '5cdac63b317f3942da38f3a3de3b7f0e5d6678200951c6216230295550f63fb4': {
+ data: 'Xs+z3VzIqsWa7dGBqepwq75lTsx3yemNhTdRYYDDc3Kzpycyp961SgnKXHjE51266mfmj85ASFi/FKCOwk17lbD5UT3iawtc3TdgrQ18vBhBsmOA2F4JAa4yC58bTaXbyld3c4izDp7i9+iyRaFN52NWJznN82SXuRtPdWRtAxXB1V5Tyg==',
+ version: '0.3',
+ creationDate: 'Mon Jan 05 17:45:25 CET 2009',
+ updateDate: 'Mon Jan 05 17:45:25 CET 2009',
+ accessDate: 'Mon Jan 19 16:10:21 CET 2009',
+ currentVersion: '00b3a4cd7400cfc1e7f7b369bdc3dcdaa50d6020233e131b30d755c89249ea9d',
+ versions: {
+ '00b3a4cd7400cfc1e7f7b369bdc3dcdaa50d6020233e131b30d755c89249ea9d': {
+ header: '####',
+ data: 'uGAV9pZTjrTwBy24TX/OUQwGmgzTnXv1JBIxdGkeoLCUhP9tAjbpUVylrUI5+VRrFYkXYyZ0o2HEgKrun2f3PODTxlmAbfkUldOV5tyV/EUxN0vYSBtgsMpqQm3bOKRIAo/uzrhSE3iwMjvKOTH2jUrkmX6hmqhXWZfa4X231GovrnOjek8c7t+LUBmmIjXEr2GSc/UbBoFnni+Q7ZArwtU68xoeCjLame1e8Y9wvCO8gIfAzXQAHsDgzn1MVeiWIqiCBTs8YKCO1yaxZpkzXV0yWzX+bHyXlKWwAk7Fu9w0CuaRULZmRCQhv+MMDw8DEXciTm0R5dRiVmSCFBy8cL9qlSeSX0GlnKl8E4/TSqvhMJblwJJsgmGSZ9cEt2u0E08tHxKuoeaaT1rpAOoiqx+z7BdhqjWOQZOGM4gR3EwqvOQoNYFUaXjAdmiUzW+e+TgE1IBQ8udRFl/D2zCcqFO90Hgc7hHsTDI3aGYvi6bHADu8hFpmZtJAjOMv1JgCX4Hm4n+SsbHd0DIfkEUMeGlVO47lcGWBZNRRm7xl8luZ4sZn',
+ version: '0.3',
+ creationDate: 'Mon Jan 05 17:45:25 CET 2009',
+ updateDate: 'Mon Jan 05 17:45:25 CET 2009',
+ accessDate: 'Mon Jan 19 16:10:21 CET 2009'
+ }
+ }
+ },
+ '6026370f3db3860d2c46a08e389a7e906dc14f98c8444b21be9a7e9f405a2728': {
+ data: '3oUg1TD+Lu4ou06j/MddOTXDqRM+qSKD+6Iuzia1Hop1w7v/BXidqeoKJZQI2VY9oO9B70Nr3B3wDROF+ycy6Rq+FM/xqUGHKXn1lAaSc6Wgj6TLQ6eRF6YZKSPqTj7TDWyw/2pEWk4HjcT8drTrCaC02tzAXMhYWlYPQPW4fUdq4hawoHIdopUN3vafQuFjY47OhqXKav3bNao=',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 16:36:08 CEST 2007',
+ updateDate: 'Tue Apr 17 16:36:08 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:33 CET 2009',
+ currentVersion: 'bf8d46022179715d9d27e0a256b56b50828a771c3c6b46fe36fb2982dcb3b4cc',
+ versions: {
+ 'bf8d46022179715d9d27e0a256b56b50828a771c3c6b46fe36fb2982dcb3b4cc': {
+ header: '####',
+ data: 'fehYRMkg/wFj2t/aWu7szbXwrCyCDpjQN4UNck4/OiDlth70a2ve6ow5lAi2jgdlV9WiFrPejfa8dD0Z1g19jx+BBsuUYnBEKD0K+NapdJBBeI0We2nj9nYIij2dfZVx7cuvhy8sN6+DdylUQLsFHbga+Gi5hWcMuULT4GOAIy2WanSQL1RSR4ruA6zm/t+VVboEkkm7PPT+w3LuRl3wRaD4a8ZwYiSV/SzgWooFrh2S3YOUeshdaGCiYpTbXscsOxsCxc11i6wQGBqYSjksmtZDvEegdQdzCmxvq4jaVWJElYYS3av612nD5K/w7Zei6RccBiODBPATjrIczYg7HwmQxIM/6QI9/LQn0LP0yqRVUUtfzaODf0uWNpFzml9l/1lwXuBJyQFBp7H7Th46ekw9yEuPD00oZ+eXvKwbwfUU0JshT4hnEBtIjM8fH974PU0y95f0yLAJ1+M6DVXCxGsBix2aKJx9fuZP4KGpaXg6qCb/6327rph7MGomcrGPIiDjYwD/NTMdGluc55OZfGXtOZUaJCUM6nihqDwU7Ly1ZzYorgcvkX/t/0RNcOkFzGYNByp7mdcotyiHqCDKspqz9mEXAd7Noz3HO5GFpPqbRo7htDigGU1f7dvgbbfRoTz17Bt9Mw==',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 16:36:08 CEST 2007',
+ updateDate: 'Tue Apr 17 16:36:08 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:33 CET 2009'
+ }
+ }
+ },
+ '6c25be8e145efb26a1abd59590522f73fb2e3dbc139af2217074d9e2ba92c16a': {
+ data: 'b2mcYUi59l434kGl7ij6dBu3063UL1dToMIu3Zsa9RV9RzeLKnezJhLKunqoAm7KwiJeqDo/REexHI1cshGYtHasVXXuyJfMx1grH7yhoWnkSRF4Sax6w5E5wnGkEpGJHOxXJ9rOjWHZ7yqCUUCB/dqLw4FwPOtRb/ynkBEYztEJA6EKGJuz0vrrTOsT8HMXtj/w6MEZ7qI3fPs=',
+ version: '0.2',
+ creationDate: 'Mon Apr 02 19:12:44 CEST 2007',
+ updateDate: 'Mon Apr 02 19:12:44 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:08 CET 2009',
+ currentVersion: '2f60193c0fc0e3f2f178955e1c68759675acdf691bcb918cfad329a5a97cfaf3',
+ versions: {
+ '2f60193c0fc0e3f2f178955e1c68759675acdf691bcb918cfad329a5a97cfaf3': {
+ header: '####',
+ data: 'pZEWSdYIkrX8/r6OYmO0GEuKG9baUgn40Bmw7hXZBd/kfWuRjWsL4/pc5F5Ojrx+N0dxmQn5ZqKAzOOri29Rm4ruxnCbyK+oDsCDyMSnWy/VJcvystnDKzKmBRQVAOSEJtzEb3OtGzvqm0PQ1Dhx1YUAx7L6KlXysmG9h9+MjOcErRL9/1x1LZ33ytR+zK4LvTAb7gN5/9QgwysFyCkNP8bG4nyCzPMiUrBnP0odMTUvDkJDlY0Oia6VjGW6oNxnGIgA5fDraRrW4JH2oejQcrL7+X+jpCp05g==',
+ version: '0.2',
+ creationDate: 'Mon Apr 02 19:12:44 CEST 2007',
+ updateDate: 'Mon Apr 02 19:12:44 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:08 CET 2009'
+ }
+ }
+ },
+ '6d45c2fec275b7482d41c76b20507100cfb6ab49922b876f9dd3040d361f4a18': {
+ data: 'jzjPgxRHApIJA/6hiY4XCtb5+eKzHlOeoiGwfVDvip95zU7ThHbdmxOUomeyCOZ3S1SGPT4lHvqZgfVG5m5RvH3JaAIa8EY1ZElRohoX3rETVPJzI/Ov5Rp3lZjtWlu5meNrcJz811HBHrtBuJxAmSjYcY3CCal+oC2zcK2fLZR/iOQ+69ONVFhdV9KiOqzNf8IisIa1sIgFopqsdHXiZ9oLe0a7Y56q+OplyU3A+TmxKLI+Qq+WkjvdMzZDDqzYH47me5niugYPdkQwN6WQUE0sK9QPs0uU4TOwqCwN9nPH/DoQ6oXWAu2+R4iCyt6ZjLNkClbps4s8Cwz6wfFQ+4T8bcldjveJenmrYwiUzxSd/4xa34yFVXVw2OD0n8yZhtvNFvfoPy+X9z+Y4f5HlM0qzL9zYya4KwWjFQzhOxFjni9JyGM2PJ1BctB+q1J+CHuhlVjUF0Y5zIS3zFTET8jjDGBZDWB+Ao9E8fUD+0OJJUdKJ4kUfn4ZUZUG20eLBjmJqWBGYZX7UFaPv8ksahoK26Ol6FnBE4KpPStQeDgXZDzGsiLlEsxHJLUFkNtAUXozw38bWWQvi2VIFtkw/ZViPIenmSNT14kUVWdrlKQC8x0+wECeh5ffv0i8UUw3v8QC2ZE7GV0OMl4ySlRCuDCfZ53YFoB3HIR1hSZMhHlHJDPUz8JOuXdHcUQaJeNrfWoC2KkKb0ZecBj9iXooDh9yGi0g7TS7eyhlz1LHpzEWB0CPsZqhNGMxmfFWur7v2hrYzoHQOeB19ZSmWzfUwd4dRpqMp0x1lZaF97jr+yyYhnuQvuO6lru15Pg6FqjzhsNiLtaqtyoaMiHZ9veZs04qZZ9Fn3U7HeJzjZSAssdLnvopXi363cXm9JqoClyV2OemnVoRwOZN2gdSZxGeOefKR7U+lrBAbJwViMnmT0Nd7AC8C1k34iEt8HJmpztXeOgX5CQpwUPENMCUPsookFbIh7e4aByllEQy0gBbxUz8JMIWYyw98hdASnZ4s8bQfSmiMM8Iw3YxCexKB62LYYJn1UY51NSnwCtwRep+NhaKDk2d6SLh9owxnFbjhw22RriPd5f1InJycjtpvMzWLavl/hDsjjj1kWpnCUBTM46LbERmjz+s4x7fSf2FhhguBT36elz69ivXoiXI+7p0E8f8HsSwm8sgN/AA5m1svsXsdWeZFUiWtAwLg0tI8YNHlazbvFCXfIC6Uhq9eDv04iqdZ3rn2c1rwSx336A7ySTBFdxOCJ46F7ShIhNKm2N+5Qf0K5B2L882fbwqiLsa64+X9aKvufKTsd11vyf19Zivg/Ze0FWoGC8D63Nh91k6Hu32RT+uAtJIjQIZxu9yXJM9lMaRA8ieER+ghrLHaGQqF9J3WmueER3UzU1midvTynOV6g==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:09:05 CET 2007',
+ updateDate: 'Wed Mar 14 19:09:05 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:15 CET 2009',
+ currentVersion: 'e85f085a8ed42d2def7adc796b66a2e0a4c3c88d9f3e785eb12a6f5619d945c5',
+ versions: {
+ 'e85f085a8ed42d2def7adc796b66a2e0a4c3c88d9f3e785eb12a6f5619d945c5': {
+ header: '####',
+ data: 'BbXNAy0GcKKyDPiwhP1Jk9mIi3uXMHQdhuxpDvoR2C3YITOUBpurxGhhvmCg+a9pS+fKJdZPxL2mPbJj6GfWTEsm7K/ECEjrVkSTHi6PTUUgYVbCumq9EHjUspos+7VrifZry3c73+qAvIKamvUlNB86TchMpOXVJIyx8UgRX+bdhrxk9ZCEVOiLCG1zGPX8IzmcxPmBRZFlHYqE4ibhl/CLEzWXZBYCofTusClhOh7YM/jBgvDt64W7aIN2y2KiKwmFySkFZdnOvbAb34tXVimwqjqWPvPwd6MujQeX1bmaDD7Y0kXac8CJxqasIezLo2WqzLUbEXdIHGilkaPT2ZKpKhKkpHJHFrV2lVuQJVqwPUr0Gf9qMKgVnsyU8kUfq9ox+fhH70+v7BQSjT7bxxDLs0UesQeL7G4SqvNet5hPI4GQEpOY8p5MUFReIBTRm72NQEU=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:09:05 CET 2007',
+ updateDate: 'Wed Mar 14 19:09:05 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:15 CET 2009'
+ }
+ }
+ },
+ '7bb69b6366a8012f181c01e368ba18d4f7a82bcabb4959189736ad124c4bbfbb': {
+ data: 'wYPZIt0UHiNVefNwtGc7z7Lu3YoQrXdfKmWqilZp8yeIrNfSLB9p60DLMrL3GDq/CsvDYkGAZgj1C/6NVnzVsXsJKq7NDZn1UPOGt+hCnw3lEVbD7zHkoMM4VgFDn1sZdjLe8wdpIFfdlQESTipT3GVXv3swG2qX2O2yuwtlopR8yZQTLg==',
+ version: '0.3',
+ creationDate: 'Mon Jan 05 17:44:30 CET 2009',
+ updateDate: 'Mon Jan 05 17:44:30 CET 2009',
+ accessDate: 'Mon Jan 19 16:10:18 CET 2009',
+ currentVersion: '23f5fb503e54c0cafe3d4944ddaf40bc74fab8b5d96e2bbddf693b1afb225e5b',
+ versions: {
+ '23f5fb503e54c0cafe3d4944ddaf40bc74fab8b5d96e2bbddf693b1afb225e5b': {
+ header: '####',
+ data: 'IpYj+7t3DhSVD8r9PkLbF5xpGrHhg8omY014P1vkT2KkGDEUj+ekQAbQ1g66Z7oNhRDpjS1/dcDjzH0IIQLjGuQ0oRfL0xZefVTx3N88ZLE39m3cJz10K2xyg3xp06jFBmdNJuCkgRhMzeUXeEJujw4lS2kv7cO04Uh2Maui6jDR7E498rgePY3L32vG1S66li/xU1vPjNn06aFTqSYxUL17/mlJNbgp3XWjGC+l0dXLLfXy1wOm+/I3zp2caTs+a2zDUZ15s+3XeaAWpBH7QCaQsvsQmoBqPbMvkjOQwW3taDvV7Hvkh+qTjCEcLjRFwhZkMNn3N2ewcLWQa2aVIjxt6Z0F4s/1URztWlKVzCfto8RmrLajYRn3ggG12kX2xDJFjNPNfs/7A3tMn+FqXQCCNG5GI06JZ32aQfpnjtmXScUuEs8UeFgsNeYclQhcm5R0sUwISK+D345B8859w+4+9OTY38NgYQQ9o/tmpCjWj1tLYLx/m/GcR2em7iyDpBdcnWUb+tK6Ah89qvXriHwPLSNzhOH2wxmi7nXTRQWMv7g2',
+ version: '0.3',
+ creationDate: 'Mon Jan 05 17:44:30 CET 2009',
+ updateDate: 'Mon Jan 05 17:44:30 CET 2009',
+ accessDate: 'Mon Jan 19 16:10:18 CET 2009'
+ }
+ }
+ },
+ '8b18e8593b5bc2f7ea39a5fab222047034ef2f380fee05be0fa6e1c0972fea39': {
+ data: 'pOMTY3PnUAbwMLDEYNJCMzp4iIA42YWr6gqoomg+P40e7LFUtbt/RQRelQwNIztyUSVLl0rilkZZkBUVvxrtTqvibKITCjJQGQIzvcb+Yl4mNosl2Rpp0xxMU03f1+G7eGbuCc5hJXYVAglhEYplaAPzHbRWXMY8iZXZPBuLVf5PN+rdpgAfkGeZ7Uf9RsQ9p/EglrWXYnTwXi3saUfzIjfvSHm5C+dXTY3FHpIc1YkjFrdVgMkhYQGV60JtZcwFtCEL2NpVljAbRgHoIXTOkzUvep4vxrtfBBWWMuAWEI06432gtnH6IQbrR6jOpwuMt7k/09qy/fARPHs3r4qTJ9r2uqWHJ7tjJw+IChQPC+3l5HcPpFURiw8LGAN1NyY1hUrF6N84RSn7AKS0bLa5qN++5lcjjxn/k8+JqmeUqN1/SYIbGwNnJeZ0vA8yvOxnD20iVADX5kOVqJDwXRPLaF6Oz9KkbOrmANCh+PmGw1i6PduB+FgAU4HViYCw5IGOUZ30Pm1NJofqfbhXvgzn7ey2+kUIAwDyOUpJ9fW+9jW/JU4rcawmzwBYN2V8apOoyc3wQJICm2984wIfVBpygCOZM0QDyVgNo57qKtYH3yMDQSkKvpEUmuhklMYhcV+4X5ggdqx7lYXO9IMDnFf2ZDiZyieTlOlRv/nNVecUB177Xpnq2e+X/ik2rCQWVrIymiV6ltr1DEv0krXKfvXGG/FMZHUmo3m+B5bG4xVhmt0GnHseqvY2Vrl9NksLgq3hTDOGSGIy5Nv8kfrd8B4/6Tavh0SumiyXnrTXyYXzCK9E7IqO/0KAln63VkcHsbOtS8mj1drN0YQ2KKaeIW+Yr3Gm0pbcODsgA6aFfz1itZVeovBqUklhXS+/Es8J8xOSvvSyD/TmlFjuErHa+wwNQvftosfwk9ZTt0eIJS5aLHdU2QsCjdfSy0DEPkk2siGhBX5ZhRzqyIAyXApSmy+e7PIqn/dDR51+D1ZHwoTQyTrd+F08jBWZgU/OvS8MRxNZSxQwsi7bcWZG+w0utrIDB8eSOMVBXI5XBeJb4h5Bzut18C1shGHeGkSJp04=',
+ version: '0.2',
+ creationDate: 'Tue May 01 01:10:17 CEST 2007',
+ updateDate: 'Tue May 01 01:13:27 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:02 CET 2009',
+ currentVersion: 'd175358ea0b9d32c23e4bceff2020eae9a8459466abc18d4399d988e733fc0f8',
+ versions: {
+ '8a032b53f7356e2d8b28665211abbe2cf1c79fd8eee4752e83cebdced1c19911': {
+ header: '####',
+ data: 'OXpNHHSkdsaD91hw2LER+9XKpf8+bh/O+OcLSgG/gAx228UpifOCD4HTAOs0C7IJ5zhAq1L9NjCGb1QWWTFErYEtDEBRBV4kogscP9HWPxYyZHxjwPI0wE7Ri2eD4Rma76Utb+xVnXWuT+vNb8eRUCK8Ur1rlhYafS0uzAYvVqHDNfZaICksxeVQojil/kSPZDMu8ASz5pMNFNCF4SlwDKPRrJJDbNZ62A3px59YJtsla91DGVyOLhb7VNRxEwnXyxENfP78yA6OjvQDc2KhKFUpHbZws54IolLK1I1mY/Z8BiDXPSnOa694Q1eZxy1Kx/jLINZUIPgGg1++YWITx213awOISdf7Oy0/dUpu10Vr1hgAqCVlDp0IuGK01CswRzEdLVpUk1DaGHuin1rryZx9vThUkEJgQQc3ivr8',
+ version: '0.2',
+ creationDate: 'Tue May 01 01:10:17 CEST 2007',
+ updateDate: 'Tue May 01 01:10:17 CEST 2007',
+ accessDate: 'Tue May 01 01:10:17 CEST 2007'
+ },
+ 'd175358ea0b9d32c23e4bceff2020eae9a8459466abc18d4399d988e733fc0f8': {
+ header: '####',
+ data: 'tvSUu+NPKHkwt/ZLXdLGdDm4jSxTEtJfsecdpjJ9UGN3Y2EBCmijU5i7q+hMfNDqBJ4/m5Ayju4zYDAKGp2pt8l1TFoDurITdFcV12jL8j3dc4TTD//uC6OtowRN+altgC1Xc0LsSvEPabjAlwfVC5xqirfm5t2mVmnFZ/GALkGLGxRJRduylT6goPwfunkVGwUdqMa3md+9mwYn2gm7CyC0lpcKX8AZ3B4Oa656yRa9m3Wjgb007TtorLIpZO2MzVwxcHBqqy7YpN+zpmZz6Md9VK3L4F724tuXXWnDeVzGxBO7aZVr62hwPMXM6ibCjUScsaS4f0chivA/tBJoyx7OqKhBxREGeGjpHTeLxyHcekbwXhXyeqxBuwG93yGKutUhGLVYcXwe8/+xSeaBGj/j2RWutKbNKG2yQyNPGj2cxJWsR4YfOQJTSOSWT3K6Mmf+r6hLhIo=',
+ version: '0.2',
+ creationDate: 'Tue May 01 01:13:27 CEST 2007',
+ updateDate: 'Tue May 01 01:13:27 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:02 CET 2009'
+ }
+ }
+ },
+ '9dcd2a8a0fcb7e57d234dc4fea347f020a6a01793e40cf56a0d22379e590e291': {
+ data: 'xXZUJjgxn62OqnzAvScHJNo4WjYEFp1vQ4ueBe1sk8dH4pXZUKV6m9c1d2cLUgBj4rUNP5cC66GiFHV7G5BDZGLrfrxUlYU6BWvzAz4eG463pRDhHXQgPrhlIGDlK6ovaIsjwaifvHaEfLREoXvLFluqu406KG58guhtWdIFK0rLypyRo8uyltGbTz8wZdu8atY/JYQnb8NaAf4=',
+ version: '0.2',
+ creationDate: 'Wed Mar 21 16:29:06 CET 2007',
+ updateDate: 'Wed Mar 21 16:29:06 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:01 CET 2009',
+ currentVersion: '5da9ecc65677d03f4f31c0f12f000caa4930394a99af8187c05e74b99c851aa7',
+ versions: {
+ '5da9ecc65677d03f4f31c0f12f000caa4930394a99af8187c05e74b99c851aa7': {
+ header: '####',
+ data: '7wg/yWfSasUjJKV/5ygFfteazVSdqEJ8xGAqtS7m/W2q3rOR+2fr99Il2TzxXCnOe5zV+iir2tOqPQt6BCGbVf0NVwZtvfO/lvfMc7DIwyWuhZ0sS44LBTD9VY9fruuIegktVHSNBoJTCIfAHN/ut1iB80+51An+TdpYT3SGAVM4RdenQ9IdvDOnQo2KE0E7BzHekga800VJrbqI8aJEtmm5mOjte2xHYSPFDCtwURQclwxbNv32hAY/IUkaejqg93WGIzHIIK0+SSDzQwHYQo4yzVGCKKy75eghpvGyg1zbzlv372bND+OuA3laocARFfe4rRd5I5nh8vmSJ+vybh3EIJJzloD+qWk6hsEagkYI0RYu9I2uOfA8drmZ02GV5/ySDsBHX7uhaTPGx4J22rNJoj8s1L7UoaohUHFvUerBvQTir2LPbzqT+B07wZOU0ibtHlaN5C2XMKRxfvGATeR+2J3l7WisCIoRdpQcPFHA7nlTTShBiCVstLxolvd7MMzPOilsi3ecxXLQSeWara4JILqXQCJ4yLbQCMnSpIrZ3TXbwbPZ8fjKjogHNUaBPnmd1hWoc7IVvK9RSFBEdCh9U/hbyPMCiSjdsUCTclmhFmhiVIlB73IyWixmLwHSWSl/ckMxcUK6rB0IPuWcT8iJkxfqOziFhMvC/cNydpN5Nj4WX21c/1M7lVlX10FRx6NIYH5szEXULmLnkfEwr35G9mKJwR2pgZ272UiW2cH64/+M+Kh7XnPbQKxTwVR3FOhR/qdSHeA8MTc9FDslFaTT6YSeJEPoQiLg4c4UdbB7w5nA0o4qg82hiiJbTfT2zFHZeeWOpVO1z4V8SidJrQkh8aL1/Is7KaDVNfL+Lx73gfO6tdSviCJJhD29iTgn+MW4MlGwpeLKpvq+LkXNXi/CVjIa1VqtR/Flk2BqwT2hccgw6E1ML+QdW1n3TvTtdLIvSGheOM5kLdnF76e8Nj0kHDFbnxQMlO7lutngaNBRAvhvSLccT76TMG4OTxNZk5aOre6AIOuUfrFD3KDeOqWie5zpkvTOd/JK/JDFYgbYQh8AqhwJ7VWUH49vfd6AqfwHwdNWymI05F6/0Co4xoQ6qN+iYNConUXz78Uo7AraJuBDQ3a24+wL2mLjnc8jUDFUaAKM6gZUv9+bx1vk6zVdaZcuqgZc6dcyo5Oy8lmbJ/SmRb8BF/Q2nW3SDv77R+p0bKPLmjcytczlMNct58Q1LoiLnGck5v0wByQ0XIMd',
+ version: '0.2',
+ creationDate: 'Wed Mar 21 16:29:06 CET 2007',
+ updateDate: 'Wed Mar 21 16:29:06 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:01 CET 2009'
+ }
+ }
+ },
+ 'c0ce9130ca365bb02418d4305ea1d29e49c3f0e96d44b9d3cb6b4b6843d25065': {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Thu Feb 12 12:45:43 CET 2009',
+ updateDate: 'Thu Feb 12 12:54:37 CET 2009',
+ accessDate: 'Thu Feb 12 12:54:37 CET 2009',
+ currentVersion: '36a2e190796c4c8bf2340fe6d7f1d032b4ca40eaf42b9ba537e1dd06a638b26a',
+ versions: {
+ '36a2e190796c4c8bf2340fe6d7f1d032b4ca40eaf42b9ba537e1dd06a638b26a': {
+ header: '####',
+ data: '/mnLRePyLGwPaZ+EkbTRHdE4jz4gY99jnHcIp7AeMfcktEpPmUVNWLwGSJUH3ANP/cO1znxACVQPzC+g8IVIK0muJ/lZ4Iw+HkpsfPtBjPZc+bfhsY5Mud00YBsImleIMlbbJGv3l79eSPcea49OwG30xro6b6I0KK3BmSgr+BG2AmBrKVlFRTPFCHRbO+hG/LgW/xqYgwd9f1dnbeVYCm5lA2zdAnwmMwlUIi/J73MbnsSO0Qg858iF1SPQ2Ne9Q8SCyKKEZwBY/YeSgDzoO76Wvqbzk8uPdmZldaF4zql3ffBeb9ZS9KIyyk2vJcLk7c3DUc65vaT+w25+2GSpEXD4YIV6VSr6Brz4w4gzcDMeLve0U6oruqWijz3CDe40yhd4mMt6wTVs4xo0KHc6yKjTuC1ZUQwZvuCiS8T5czaGpc0+fLyfuE+pVBxTlpOjkoZqzk6NsH5lcKMzB1TCscJ8fbOdtJso7DRUvijIE5+ayY9IktZhMeHsk2zurKV95A==',
+ version: '0.3',
+ creationDate: 'Thu Feb 12 12:54:37 CET 2009',
+ updateDate: 'Thu Feb 12 12:54:37 CET 2009',
+ accessDate: 'Thu Feb 12 12:54:37 CET 2009'
+ },
+ '4ebfe3bec6d419d61eb68a1f25407824e404e3439c23fccde1ac19225b40cb06': {
+ header: '####',
+ data: '6VvjRN9LKi7tt/HsgqmU0bUdZQNVjVAYNLdCrfKdRJCx3W/GZHHR/AQF0FcvuXIn0MWMUypHpTZW86V459OEoV4W18HXEisQKEiqBnUCBaxBd1NKZDpYsThISXXOhZSbXylbLoB+kBaYzT+Fc7utDheVvVPeMo+iEb3ih42B3En3ZXcgUAdEjfbRUm6st9Jiaz4onwXWknVhkF5QewA0GXDhT2JdakFxfUDay75wKvspq5IszbEYwsu+TEgsbuO4/R/bktgsQUrbhtKIEIiNSccDNx1JkUKvIxrRfp1m0Ar3XJsDfv7YSJSLdyVheOEdIpBkeZ40LN83uzGRMZw1bQsKf+XOFTfacYZBBzwVj8e1rJC6AWlH6Fbn0jXw3JcEljA4zUh5IrYhWtyIZW338UVsMSIp91USeM4uCvPsOLAdyCXiWu5H8MMYGz1rJxVlTbMiq0tn1w1f+CL14v8EiUft7l8kfZzBZzdLvzdedD/wHQ==',
+ version: '0.3',
+ creationDate: 'Thu Feb 12 12:45:43 CET 2009',
+ updateDate: 'Thu Feb 12 12:45:43 CET 2009',
+ accessDate: 'Thu Feb 12 12:45:43 CET 2009'
+ },
+ '7ef137cf242e00136e57ddd262edfe6b418b6f57f3b5e5e15f3ec1232867f6c8': {
+ header: '####',
+ data: 'N5eWFfsQGHR1WytyXuVySzJ3zenJEB6IaKr2vgWRHTlJFzexXzJmSLoozTP9Z4TumDOLsNrp+EUeIa3Yo+RqSyQKQRFDHXlUYa6c9PPLPXdexSA9JO3AHzMSpL6K0E4gN3BybjL2rbcQwUqJLvCKy44OdiJvORGfIIpTPx2LQ1o4P+chcpOwwe/ZhgLWmNC6FmkTvsU/xJlNuApyD7tPX7Cj3lP8WBfYEPr68BqTKAa9cxai6ZF4BRC//rFob/4pQNHE+7qjOSY9HOnV5uCtZehPYBwfpBiDYhaxWJxXN6sxtpe7GC5CM7gAAHs5lgVaFSWffOAL3zeX7I4vh3j1nYdXoh5KowZJVVUUfhwqJo2T3YDVsaXNibZIaPd9GlbeBBk2HL6c/ao6B8QNwRU7GvMHAdJKta2I9mtU2NCnr0Uwi4rZRR05V4k0HIMLEJxRo/IYAysAYETNIAXzk0twIokOF5JPjP4uTXRZ8LdiS6JqfoUu3Jv/7yq8wrKZM7DaQA==',
+ version: '0.3',
+ creationDate: 'Thu Feb 12 12:47:39 CET 2009',
+ updateDate: 'Thu Feb 12 12:47:39 CET 2009',
+ accessDate: 'Thu Feb 12 12:47:39 CET 2009'
+ }
+ }
+ },
+ 'ca01bcb7691f70818feed46c9a2a91883ac543997a395535aedbb49de166690c': {
+ data: 'zbQlGR1fT8HoH6KvOPBoaIjMUsVMh8MSNIzPO2muIMJDVfXB2rEcPnIFl8fNv9BtE9OLecuex3BQVJKGXdVGFYVNiSS0SgPoEpyD6GJntEIOaB7GnhVflTm8fT7Ba8ArS4r+fIL32Jx9F8sYrL6jKPWeuImGHK+x3X32uORI6znkRac7J727TiTPlbj03X/Fj3Of6Bp9Wa4xbVMwzi+R6NRKD4A6Za3mqhoSpYFeHWld8+ChJU/w2wFkj292OjPBzvvz/SR2Zth+AXTChreQ3Zl1hWNGmU2Ep8ijFCYwcamgPkQwh4vBk9NJlzIgadORcb/0EPDxn638VNA0dbpW8MZUCIMWVe3A8VgdllWxei7dDy1ri6xsKlFovLYjRRPXgAqRSqVATqwyXqhBWhoV6VZ5NaSUGvM8okC2GQSweLuz29py0F987MISmLjav4gdvcMA1wn7FOIaFTNg7oy2CxZefGhHT3sHfX/PIvs/ovfj+7TewI0k+HR414az2D5reo7S5I4+roCm1QLVpPNcXUxbAmEbjF8JCsTtECZ4kdpG39dN6BaMlHoHSN3wu05uTSn+sL7g3Cg0pVLlnHo9baw3fUnVJp3MCEgZJELaiI/WF1Om2y2S9UeLur18z5T7hHFv3Px28D7c22HEDdF2CObeh2uOlZGAa06lp7YlYeoNtb4CqLlZAMK0xIHfNUceC4OMNvqyGswd5WJsYQEnMry20OkxY6YinnQfjAml54B6WlvNVlg/YaKjw5AVinUHjzEFfQbcBFnFGpqg5qJk9hZmb1VI6Ujhq73fPydSfkvfScTImqxCNPD/BR8ovoaJtNpE2gmcoX9A5zhZgu5xUnUnXoaQu0l7K9kWof/UmCCl0O1A6j41aebWr+aoFMalaOPzNJ02vfLuW155IwjFQvRuAp6EuktZ2dFKyFl3QnLbwsMnitReXMoW30cqTYg7ODQnopE73RIb41Nj07qdx6FQMzw4gAIEFBe1iRvlMHQazZCb2ndVvgtK3ZcPNtDoahuPRxMLaKZlRnpa8E5F4o8NHYNivshawZi36Hk6w0dOimCiuk/zvJ1mtx8hhX7B5dsXlNcKxLSvI1onEm2x9HL318xJeT0y29alzPYVFuQs5kq1+UV3h2hL4E/H8h+5mWtTLf/MjaTZ09okW/etuHFFjCmLoKwugk70z2yLWEJGmbjw',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:51:17 CET 2007',
+ updateDate: 'Wed Apr 25 11:14:05 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:12 CET 2009',
+ currentVersion: '55ab21a3c8f10df776aaaf923f439b7080d9fcc71b192a51cd0f1e17139a1926',
+ versions: {
+ '3895963f82854530ff754c8e2d1eaef8d884a8cba7cd058b8b7adcdc12be3da8': {
+ header: '####',
+ data: 'rXmjQYZgxv9jpFus3T/qa9Qc1lxt+mDF+dmZeDmDG3IiE/LnonGt2MqL+YlbFzisF99Uv0IQGOZCPigtBwOXB9m6R6R3lEy/YhD/C6b10s80OBj3yr3PoTsoTmbnmZMYd4r+qx8SaoLLkR0aK6NADYZXebR5QgVtwF/a01EifI6YxH1wm1RX3kyRhIrMzOtL8zHbstPvW4sRtv2YpZqlZqBTdoiqztDUZTKEcCcU5QLnHYMNAVpDHE7D9WvQy8Il1taAbxg97Ir+2ktZLjqfJdKhU7ZLv8fcJiRgnQKPqDWcqpjA+CXM6Ak1HCf9SRJh6Hl64+fk3jEVAPmHvry/xq2RPCG2YnVNWZ+uL3QNuH4zt+IbP4FnrxkCAprmEiNwvuEefMgliGRd+FowIaiFWXcEtYxxQvRDujZN6eoTUU0KVnuy85PKi3ih0ZECoDM88MFhztwCG9/nJQ==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:51:17 CET 2007',
+ updateDate: 'Wed Mar 14 15:51:17 CET 2007',
+ accessDate: 'Wed Apr 25 10:37:27 CEST 2007'
+ },
+ '5311936f6a95cf123007ef867388adb5c1ec5b2cf1173d66e501daa16488e42e': {
+ header: '####',
+ data: '+VirbcZ59SiN9UJKrQkjQx0Z4avHIhvw12Hq7fs+Qnoz4RgCS17fqzYyJe+jYorjlMPjzUcALYOTobqJJp4Sp8v5nOilHW64Gny2XRp59PQPg0zE4TP22l1PzK04+qJusR5NLPU39hYbW+InkDapdIhdf+nIruqeA311bRLg90A8xmpzio6PkZxXmhZMabbEVfXsYFBQKVBFloTMusBG2eaxTjeK0hOAk0uEc9RGOEwCOvZvjRFCP8DyZ5T6QV1pYYgBFBwSFrB/koXmBmObj8zscJXQ4H4UWC0yw1B3ABbhNX7vC9q+vgZTxnGqI6GvzLcrzaXKTEyfa9twq+vKFX1hqDmM0UVLw0dPOy0/3tabJjFrYbz5EEKVin9UqWhuy5YIvHEJlMkH190Zo+lPMuHvD8TiAU1M/n1bTQSBQb/8STD6uqefbKS/s/bXcS+bdVKBmSgCuutBznYO',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:39:26 CEST 2007',
+ updateDate: 'Wed Apr 25 10:39:26 CEST 2007',
+ accessDate: 'Wed Apr 25 10:39:26 CEST 2007'
+ },
+ '55ab21a3c8f10df776aaaf923f439b7080d9fcc71b192a51cd0f1e17139a1926': {
+ header: '####',
+ data: 'P1LfM+8PA/kyelFsojabLfBW9D0Aey5qDClz0OTdSamMT2Mv1U35eKcr6ilUrbtW+dKJotAzs3B1dYGzaEQ1j9HnhiL2pk4wgT1JWGe5c9frmFX/3YGO63c2ngnaC/Rrv3LC251cLVS1aoWNPskWkjZLzF7EiWbAeNYTplSa6MWm2LdHAm6xq2dcgYx53RJVvjnsCzpghQdzL96G8ScJjnUx8FC8mHW4Ds0rkHTeoM344Ao8J3o1XwoFqFFJ2X8+lSkj8LVVdjff1EHIicjrMM0oJG8VyxK2TxMvg4mnLWP4ALfh24Wrb9XmrM0NjhQXBo07tL9dwa7sHHKiBrM74644vBR7NB0+Laedg8D+6FmgNoR6icB+qvxCIIvAhOpJ0er9f0CGDDS06knx/lDtVVNewzxx4ATuG0HQn8M61eU83EfbKWG4Mg+9jtRcW0/bdFW/FQr/OeKg',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 11:14:05 CEST 2007',
+ updateDate: 'Wed Apr 25 11:14:05 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:12 CET 2009'
+ },
+ '5c622bec0fb939da012beb98a858a4e16bd670b3e6fe1f7c92a247f88a65c747': {
+ header: '####',
+ data: 'XGlplDTD1xamZO04H6RiqcLd7XaPwxI3MqpKTCVHPBoMEkwE4A1izGjFKdPqHbQIuYYcT9xDgPOknlkP89jDTfcR4UfENtKHFgFaMee4orSER+MhldJRxMwPLorZmMNNZzVmTmwJS7FI9jYiXEvDbcyw41kN+SA0mxzWpc9emaX4TmZHzlBpY2zXKJLyN3otYYzcTWzuu7DJejWrB+CnNp925X9vVomBPfp/Gt4tiOFsE2ZyEf1B/7cDmMszlQgEgGJONS+C8Qyr+X3GEh5iPoYsGpMNmF7aYnZNciE/B5lP/ABVbZIi2KfmRlSf7Cc+kMkUXyHxOeZHuVv1ZlzfIe3gXlD0/yUJFHNju8ai+F3hpSkhMatf71mLQzD5oFrTmKatH+zQZhGPP9dQxG1cgZRcjbyUQJMazo+0TJuNXNndi/oiRzRJjYRUbZKsfRzIAEU=',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:51:49 CEST 2007',
+ updateDate: 'Wed Apr 25 10:51:49 CEST 2007',
+ accessDate: 'Wed Apr 25 10:51:49 CEST 2007'
+ },
+ 'bad48f8ab053804a02bec678db01baf24de35ef04a17b90e1362e67fa352e4a4': {
+ header: '####',
+ data: 'SXl3D4C5Yt81L/117xsHYjZxT/fANq09VZsMNAz3Gcn2+2gopG+1K0JFg/1Mbjt4EMbe5Or42zBlJPo5EAldAfWu4MoTkQzo/wKPzgOWlIi3A9QwZegw3yCuHvJv8iNcpjGfpY0OCzTZKNomTtwc75l+8FqgwPDW4wDkPG98275ERDR8mFSZfUAiQxlTnCbskFneUQ6hdN2gywkyJKuTEcrMkIpzwe9uqPaQg8GjUvvy162/LVaSQAVRIiTbW5URCD+hT5cKOkmFeBejHar8zR3SQQ+tIJlKERBwfE0sNR+RebSboYxWPECYPp0DMj30FnHbfYIVTgRCIlepy2hfis0+9C7dop0jK2nFREjcxSIqonF+juCrfJDt4cTlpn2SmcoMJQsUOedSh6ZoWweXm7lu8buCbA2Q6SY1L6jz7okwIikIinxGDq3qT1pWSgpntI8wvYZ8RD0umJsoAzPYH9zlfQ==',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 11:01:21 CEST 2007',
+ updateDate: 'Wed Apr 25 11:01:21 CEST 2007',
+ accessDate: 'Wed Apr 25 11:01:21 CEST 2007'
+ },
+ 'c03d1fcf5b6981741f5d4787315534641c61daee9aa3c063540fbb704989ded6': {
+ header: '####',
+ data: 'sbn5IDJM7VtYov3sqW9+/0USxZEw2xq8di1XVPMMZ6kN6oZZrAY7ukxXHYh+mfuIa1/uV4i4v1YCaKZQShLgUS4cchlK4nnNVL8zejGwB+PaY0E8Um/Jg6E4UAFAZ+haZwzWLQS8lJ1r4hNMTeFqsDRUhC30awJRz8e0rBejLZiS2Hk/jgpH3i8Za1GwDzogw11iHXejYI7MaQGB0E9eQsYYTxGjmzcLfVYkd4AKj5pSEHvsKZklSuWIyDzwaFiIO7xqcJmS/8Wkm63JGNOW3nLR5Ao9V/2vthFHBqS2lQNRnkPWXbmNK3v7vi57zu461w1Nn1U/70EvhHRMk8BdML3XI/U6WgDARjQuVsB8FnTkzapaORG5vUd7nTtWjPdyQzOqacm2YKWpAiG6fUQTZiBusEd8jdnv8BioGUTbXgNVG23zcRbbbEdjKc1aizXHQE1LnROvoHZHkwg=',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:59:57 CEST 2007',
+ updateDate: 'Wed Apr 25 10:59:57 CEST 2007',
+ accessDate: 'Wed Apr 25 10:59:57 CEST 2007'
+ },
+ 'dbc283f49de6e303c06a52725b8187f344ba7b433b0158d704f094edba782710': {
+ header: '####',
+ data: 'fbNrpIoYF+gpMUjSxoOc9Y68qRlE2yk7FPPkrHTu07HHWkAWy7H7nFw4BwGiFViMkyEC2orUrMeDYhKmMYFj8DEcALk6452BtNutGZSoqDhD8xnSEPF6fP2Xyy+vZHp4JWDXZt/xHk4vPbxcwTTlmRz5aO8ChXIH5iqfRL9+Dx+gJDKgKmCRMZYMT1pyOUewmsT6QDYdGFJTRRiDmoLfCVAXhJRtqQSBcx3kN3kuf8gyOMAeJnFGISTAj7THzo7eGuQol1omTMgGbDZoL7WJNfZIDamiT9TWwzp3UmQcKIsRvA2ZKtePWRmpWyq6WydJgFXHUuUDVpwT+kc1Rn9Wq2zwm1VBw6gqKCp6W9bZO86rRMs2CtuLT+agSpqb4kz4SEYDCW0+aUsJDCYBXx5yWRM26r0XAbU6X0D+xopGuaVzsV5G7chkCO8mUsjHzZCK7hOAz6OgjR2+',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:38:17 CEST 2007',
+ updateDate: 'Wed Apr 25 10:38:17 CEST 2007',
+ accessDate: 'Wed Apr 25 10:38:17 CEST 2007'
+ },
+ 'ec525dd942f72b71b5fa1aca0a36a9960b71608bb27f32bc7923713bde021b12': {
+ header: '####',
+ data: 'AHP4MFiGukFCCnjLDGoqJUDEr6QNL+KoZlcwOqJIYusRtl5qmhZSsODHbAEpmadxLGogDPrWoH5/XLZ85ASGRF5ALzDgrFKP47/bSEzKVTDABY5BJSqvKgS/lCf2LdR7+0HWUVJ6Z3GOb9GqsXC70pMxDo/RfclOQPa+k/sXCW5u0TmLb/0i/dZEM8N++4umXsyy2WPLtUVzQZ/VdTMDwl50FeQxu3aNGy4qYd4XFk/7gxBH9skBD6/GqpNajHJrcbi/WZt7PZiN9skoVZHhm3YLmteP5hJnrcCGBFJHWuQpXfB7NR8rNmd2c6maemKYmUlX25wQF7JPcROOcyT8iYpF4Hk/eSPs0CSkaDdqSD0Nj9E4kqZrHfVGMwBbDFyAzdHTN3EyGuC4cBXdfNZbdBqwghuB1x7RLXs/pbXg1xqukjRdPLTxUogPdaQBHGo=',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:56:58 CEST 2007',
+ updateDate: 'Wed Apr 25 10:56:58 CEST 2007',
+ accessDate: 'Wed Apr 25 10:56:58 CEST 2007'
+ },
+ 'fda6581f0137dd641387a7be193b06edea4451835817bcda38d22ee24ebeb77c': {
+ header: '####',
+ data: 'QwDMobl0Kds+J8mknphumnONOIF9gH+pC/AJpxGmuy/rvKfHSeEuuWAZ/yWj8J/I4V7OjpyTs9/uCWeKs9khpdkcxtObB36IfcbWBHGOgFjvqKgwMa7eZSIUPZz9k1NsqJC9nU9U7w5EBzQKVIjJaey1EdhsggdtNOpQTzt7iu2mWKo33dJKQCQ5VEwhpGh6SH1TgKFbdMkOJJY8d5xPYUxR66LVFpFzgHP0ML5M5U53PK+apT95UIAlqf7N32BjPK63Nsj1WPsnuuL0vWA3KmefHzwKGeatTdsgck+1mwnCDJncPWv7hTwMLGPUaY+Yww3K3YPihuyCUtUdV3fer2VHVAn++JdzerHiLI/86T8gHiLAi/anFFh6i2kMMVxqzREh+62n34MrgdMqbSFQb0V4Dhm45FVJH43uuEaoe3OJPtyvj1HbcSR4VEVgGkDeced8aAK+Dg==',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:58:33 CEST 2007',
+ updateDate: 'Wed Apr 25 10:58:33 CEST 2007',
+ accessDate: 'Wed Apr 25 10:58:33 CEST 2007'
+ }
+ }
+ },
+ 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:06:54 CET 2007',
+ updateDate: 'Tue Apr 17 19:23:41 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:23 CET 2009',
+ currentVersion: 'cf70cadd4ae3e7f658a705ff124ddb24de78083a57bfe4fe2855ae2be2fcf8cf',
+ versions: {
+ '12bd9887eb84b99ad40c1e413cccaa9ffd4deed340c71fe53610088faff349bd': {
+ header: '####',
+ data: 'MiAIw+S6GDmLLMcGtkl+wveV7dZAFrL1zGZh/FPvG4kpOBbnyaolRynNrL1yeUbEp4gLL2cK2BGYiVc9196PMOvKPHR5Rqp6GlT6h4RUJ+nFFF5/3LNGzQtJbiY0rrYKptqyPBC8mhlqtdK7sQkQonj5LPhKeCX6AyE3juBPEuFYhvTv9a/iRPub7BdlAocz+bb8ObpbVHnNvbGhiRpx9MpUg44JRxLQYhtDUMi2UFtURidKaK0k2lP81ckPDCgVgxy65FjCq05vSaCW0hanNrIwl+zAgi+3ChriqmflvsZYC7TQzUBPXrAQ8bKmzppZWlArIOppRF7+paWrHA3Qcz4uO5Sw3DvMwbgl+XINnmkE/EbA6VJOjrWYJjsibvbCw6vNr4q1A4Yxwy0a7EXbjFiwpEr+jMUhsq8+d0DxP3tQTusV0l9wcT2OWrDRKdjDUXLQOV9BVw==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:27:40 CET 2007',
+ updateDate: 'Wed Mar 14 17:27:40 CET 2007',
+ accessDate: 'Wed Mar 14 19:00:21 CET 2007'
+ },
+ '35af99615d1be9d9841b4a37488fde9aac291c73c8c3aaa570cd05b3fd0baf5d': {
+ header: '####',
+ data: 'lv0pIfnhZZ6ktahFGl3AgAfdcveIcUyAh9x0iVOCzmQ9VjelBztlvxZEo+uByaFh1ptM+eqOFT/Vk9IKhNjRWTXrDXioP7oZ8IZ1kLfk/XuMFH9AgYzm3H1T/yLq5lg1WqqZ+OfO9m37Z4kbTjK9+adIAJ3TwsMxIDpIHYz+qbznjJocubYCbi+DC+4wo6qu5C44gf8n5QF8DOCGaBCyamxFvkqrSMo/Y+3SG3yt98MSgeMScGESuwKKGDHZX0v3ZXvl4UFbxywUtdbipDv4PAlzh0aadMsGqYwO8bPKEUElCWBXd6kASugaqiJaZFtb02EnC+nncv33ZSx+WyJqwKIBk/Kpd3/YDJnX9t3QU60j0YKf0my9oX1746F5u0XGX1DNRaw/1g95zRHoMu6j2cSTTX7CJglzIlTU8kglSO1LOasxm3Gt8iT+8+Lhh4Dw86ugqHXl',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:09:07 CET 2007',
+ updateDate: 'Wed Mar 14 16:09:07 CET 2007',
+ accessDate: 'Wed Mar 14 16:39:40 CET 2007'
+ },
+ '7cc6c6f2eccd8bdefddca21a59669655d7515f440b025144b9ba6b18472cf189': {
+ header: '####',
+ data: '3W8FqWzBVaEbMZRukwXcm03WbvITt8WVKKuJlcSszN0dCJEsIZ9vLAiDp6dfsFF4PEPcSkiy9Ww4FiBYSg5OLW6snRNdA7Wo62dJ3lqn8TjBzv/Rt+khf9mj/WwJZZ4wum+qdwTRPyaoZcAWgA6PAPPVp85iDBP8UBdiFOs+y5kz9GiB3psvOvqC9LZ/RyK3J+H7ierfWecnbqB9LT5Yuhfi8SO/gw+5vve6z1v8sVcexI0o8gk97rDV1W2gZz2WNtO7K5+233Z7aZlzouEbDZEOGG+zEYh6SctWCspgUATElf8vZ29fABsk3uZQO2tnBvINChs6jCRxnbmnjb2Y9R8u2QRtHjjvRro9E+zhQf3laJc0G0ZJp1zN0wwKx+sL7uM6kG1aszNJkzpykR/Uz8bKvoOfG9vkz9+4Pczh5xR+k9rCE8nbu6Yt4EMiUfdfjZJHAhST',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:01:05 CET 2007',
+ updateDate: 'Wed Mar 14 19:01:05 CET 2007',
+ accessDate: 'Tue Apr 17 19:20:33 CEST 2007'
+ },
+ '95ef5754f9a4514e5bf883436d60c38c3cbb15c3f5452d512a05839ce20125ca': {
+ header: '####',
+ data: 'Rko0V7wG9GEmH9pZtXSfxKGDLRhZr65ef/DjkwhsPoYfLryET/ViMjcZcM2blyiLKOxjiS/avGGcXUmInz2AyD5dAFTGge3qAZ3QtxTcNn/fvfJeN+JyGJPIsTIQ7P+jd0uJAb3vPuymISGJluTsP0MZ8zxahSSRUV/VIYwm10tiMVvWEq0+8FynKfWDqJ1eU4pnI47CAdN9CuWhxi12RkMBYgiUzNzTh/tbPTFMc7DIyRfR+si6TuPS3PmtnKt4FMFAX3FznGBCNsonUFf/n7Zy+EYEU/B8wJO+18mqbui5YvmPCPPKiW/pfVuaWarF7zcIcthYoKQfTaCaulO0VRtTA+Wg2LtJv+QcWWWTiY2A9FC/PppLZ8+nFDeng6LqJYKoGnn6qwtSVH38s3Inzbs4r8mSOR099tqwfCnZc9zZHisdIbVm82H3gnqelPmc3IXb3nHb',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:17:20 CET 2007',
+ updateDate: 'Wed Mar 14 17:17:20 CET 2007',
+ accessDate: 'Wed Mar 14 17:22:06 CET 2007'
+ },
+ 'cc7ee01d38e4f1de010d2a235e3b76e838ca05fe70223b8358a5e41975bf2b7b': {
+ header: '####',
+ data: 'TJ5ClYK5JmZvEuNCA+/UeUJQ2rGXbPnFqWP31GAGXqhZmC0RuDNjl3sv0nFKmcdMa/BzvLSywJhkidoRhfKGwN8nZc8M0VpujFkpvdXgNsod6x+5LTMP67qCyvD67pkYMa7O+aosKi/ZWWnYBavZSdhyuWnU1wPxxk+wwcjjIrA5Tm5zTXM/68nLLnIWs2bQbUtcwHgLrBEUshG5oTUFGxrs8zYwodsYUuT1CVwODZrzMxvvbHfH6Lqt94m4hBF0oIrDCd1cSaXghS4PiZkJWQVxJNSsuYF/4PlPrV4ATZS3Jm+DqOxLOOnU2Xu1Qe9DxBppnXjs/WpohYuMV5YeD8iOJLXTQbFKhBJNSCoLp73QywWazuKkasC6cbBrTHYykEKXpt74iE6oKg67YrPkIZJ/jKEGnZ7wsY4ObeDTS7OUbHKxPHRM3ZrmB672R/8ktglg',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:06:54 CET 2007',
+ updateDate: 'Wed Mar 14 16:06:54 CET 2007',
+ accessDate: 'Wed Mar 14 16:06:54 CET 2007'
+ },
+ 'cf70cadd4ae3e7f658a705ff124ddb24de78083a57bfe4fe2855ae2be2fcf8cf': {
+ header: '####',
+ data: 'CiJDd/ShGw3rE0xCNZspkdH6hRzvSyaNiuQeMBI0NR1MReaa9uVMV6Ymj+BWVQ8FaOziQ94aolsWre51EKwDWC1otdovPXWHxBXBBI/Y5A4dyQisBeR5E456juUwDtLKX5En4iIuOL14IGt+keUtb5JyfBGuTTA+EnohYzvDxu9MDh/7nzCcWzUxh2zHEBSyowfOwJhx7G2xEvbBgTg+TkejMudbq9k3Owebe9QNdhU9rsY1UMxjL8+HgJmgyo0C0SA91tZXBB3i5ePvg++ze/SW/r+XO/nnVzcEwCJE2UWAL+vNh8tUm+sEbWaqyKwjHNSquxV4cYOG2Lzo45Wp/vZwiUR/8MK9THf0FO1mn3QCd/37AMMneI1Gqk0TNwNtoQKgLVBNhhgX7dIVpRxB2iiSBYyUK6N9LlFahW2QVDS7kdnKH3vk1cP50dj21E45jEhhd75v',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:23:41 CEST 2007',
+ updateDate: 'Tue Apr 17 19:23:41 CEST 2007',
+ accessDate: 'Mon Jan 19 16:10:23 CET 2009'
+ },
+ 'd65b23008b22e5000726db3fd22b074b08553fe82245c3526f708b8d89f70963': {
+ header: '####',
+ data: '0y9WhoXwZSfzfxuql8LBc5/RiclPKQxcBYjcdGv7v6B+WuGrB6uu6d8pjNoUtsZnFv/25sefW3ggVgDuI5iZNg2lBQVIwgcvK5jPM5foit49d3RSWl74XdHY2XqykRNDbboKAiNfro+abo/YYQXjkhNBOC0dWSUUw+HmgK/Bm5NmJD4fDTV7OYFsvX4ExjnX9pktaB6aiLZWN1cZruW3Lsszx/ryHpDtcPrmK2hgLQ4FjRSXunbqXKJLOADQiMbGZ8DKZchB5NcEWlE3AfL6ybJzTyr4jXuS7A9PyitxYNKFHAHpJEhxGkyuhUE66QMt1n9NKzkNx6yhhGdIUF2zVGsBUb/pRrL2gt0X2lsZ+CnWFu4jRAeSi3KfK4VrvnoYkVlJImxPiLrzJAvqkuA6TyQRpJ4yFVJ0dgxBoxZVSN1fp9Yvkph+Os8LZscJtpYPPwVDlCnC',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:22:08 CEST 2007',
+ updateDate: 'Tue Apr 17 19:22:08 CEST 2007',
+ accessDate: 'Tue Apr 17 19:22:08 CEST 2007'
+ }
+ }
+ },
+ 'd620764a656bfd4e1d3758500d5db72e460a0cf729d56ed1a7755b5725c50045': {
+ data: '+iiHiN91FfHKOXC8Z/tg+YynPECa5sgYGGofcoJeXt3FAAkAFu3NsLuwjYIaddJiB3MIxFccrCrB5eDDL0SzOS+j63GcoMCeeiXss9YfVunA4RQTTktiU1BknPYfsfHj8EOPDSVHkPFs7KhAnBlgyaDiQPjYko5Np1H2i7F7pRmfC8W5LGdisaqxFDa+1ghu8K6a54QIpbfOmolQU3w7T5qiOdoZv8GLDDoORvMMb4P09IzXpk/yDEZe1GJ4g1a9t+lHAhiKSvdnZf+MhK0jvs6R6ALlmO84lRP34DmT/35Fr5C7D6EJl0OxXkWgYWelTlfU4b8+SStYP5LPYeD38fodSmObpKmpp653T1v2yaTybI1hojgLbH2DuA5VcQAM5JHMjoSy6s76mf2AZZeRnej1dqdvIOTf1Q6CR+ZNIqnkukrtGq/6elF3eZZh1Ln1EZDiTzsMxUHBngtiRmRDofqRSJUGbEAjw90dBoiaIO/WwLAy4cTec0nJxwYd5M7nchEly8Cb+zz7naP+vEGEAWq991u9NFZhrw7WgNgHnG0E3km+X+SYvv0i2MkqjYs6ItDkBNyi0Udnc4CqfWuKa9q04t8mZiy49LU34Ho4/ijuez3rdOeCO/oIwkRkLZYfFO6IxO56tAI3d6iJqmXY+DX0YUZrJ6FT7bDsUj0umV1htuj/uEgQZyOnKOyA8cSjOTMRIkodI12HrtdrIA966BDznsKW4F7f31VaSxI5ezHsdiYEsTqwaZlFQMsjfZX62EvDLJksJTe3JG15BNgsDUUh1mqIDCmVswFTpUTTb+50ap56c/uERSET0iXP8mb4hKwJkmngrBEir3btuMEMS0xSFQ2jTRjlnWRQr9eZT2biarzgEhKHyu2qCUtsUj7TiieQJY09EXCP3g3Da+61nBMoAwi/VqTI6vQaLGtuDrA2+VYGc8x1SiahmAkRPpQS+5N9qPvxxFRbKforMOvmeboFVxdKesub7BHIXQsSOKsHFZnFHswa/oLBITomp3ewfp125RjBUf1C3hMBNg/tmE5pgLqPfQqWK7IOnfdyt0jc391XWb6H3CVcgC8DcPKJ68o7DBucg9xTNwlIxBTafupsBa9JUkBigqYOW8729lNjj/QTvTUaCxWub9SDT6/y1wQUI1wyyg+EaR0fHqumMhIMbuvIPd/SvKMmZ4TXtBc1U3H3IGbkqIfx0f5rI6AuNMD7/pXTAy2Ot1ZBohnQmEotXRvDwxPMqBvPU74t3USTrysyXfJqeFtHi8GTR5X0m/PYQKWCCHgKvjw3d1CJk7tTe3iV2ulk5cnO7tOydTMJFgPuT2oyDDDTp5jYJPRE0OzZcpAzvRSjELfJ111sFBOEzTqtBUHA/E4BnTIM13md0ZaMr33E7ii8rS7vaKrQAI5moonAtAEOVbx/ZrcZ3kGzHpRCISeteHgnM4I90x391HqDkc1A7b+iDQF8OY0H/0as/3gaVaqs5jsuhIByj0+KmoXsdq3ZBhEQRW151QDCdMKdulNUxbKTYV/t92z3slU6lO8fiy+ON/6sTtS6jgnM+oCLxTfpfBdz0uKG7jiSOyunj27QxNjLyu1nF2+mAcDhtMN18QkJGLXKYv39kx7ny1H74i5rba32/QEAFl5eLJNIQbJZfZG3HzKMVS19ZGwgsYNqV1G52x5+bZUTR8YcrLWmPTJ322UxlhTmyjQv+fVCnpksBtjLGntsGloemFF5YVlcl1AfyHb+KlXiAZn+8vpfVVBddFFMeehokzYE1G8Doa/3huhqdtC9qvAtpP54G2p3',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:36:20 CET 2007',
+ updateDate: 'Mon Jul 09 15:10:15 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:28 CET 2009',
+ currentVersion: '335e2fc3f76b3db69d7575194a8313bc3ad031d441b6f2f81cecba6d3d630130',
+ versions: {
+ '0bea892da673bf4b3d3e4e97cd3e1645eb177a8423dc761583b876c5ffb1e2ca': {
+ header: '####',
+ data: 'BmZz8j6Khuz7Q11xPA5zSECcqn7BOcMtLx8AmX2iE4OrIwKWcZ+u4B5kCBxtFPRZWLdWcxAF8VfaedkHx5jxPNeWNIa7NEXXcFLYQv9lwUaxmtqodYtVapAg7N+onw28UnV1vB/h7ll26u263jWYohtd5eMnXhEjIEbrQYpf84jQYlpMKjUDhsVQeZvTI/KfiXa6O38ygO9R+xlq8xKgPPX2bkXfPJiyzlA+GoLSORc0tdqseGGOK4BFyp1V/KRUQ/7uQmGs1yNWt/ijaQtJXpWkWXmjHyTjXsi0z+1s0KH8TwSOfu8yjVshMyIyEDd+EsmZeK0QwMCm96v311cRhMgAkQOqL8xc2uRpGygtTkV2frthF237GOV5vwO9IoMZQFlvKZreV5mPPPBeqfP+o4QRpdnJRRCaP8Ds/MmzGBqE13ntwmo1UVX1k408ZtMCO7h1eQVTgCZ/Y2RD',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:51:02 CET 2007',
+ updateDate: 'Wed Mar 14 16:51:02 CET 2007',
+ accessDate: 'Wed Mar 14 16:51:02 CET 2007'
+ },
+ '335e2fc3f76b3db69d7575194a8313bc3ad031d441b6f2f81cecba6d3d630130': {
+ header: '####',
+ data: '++u0MEaILPK8riF0UzCnb+MnC51GYcdqCFRKOP7XYt5QvzWtxhDMOvq8ugCDF8G9sYPAoBLiCxFcuCtnkG4fp563VeEeC/dRnArzMDvjILYKAETgpnLQAfyIR+D8RfUkCbr+aOJ4XEKcy9a240OQJFDT0whoTKuX/6XVzVM/D7F0r+hJiOD1ELsVEi/+U+dXXO/VDxoyjFxfa1+M+Ygk8ewecX4nVqwOiFWHNK2lXW90inip0p8yqDsADx0KhE2tjARWVsjoNdf5RSUOYr0Sb0syyjBMi7oF4jpbLvHpu9fe8vpIcve+aSA/MF0Acxh0/gToDcO8ER3K4wcJgNPIs9lXiSrmuklK7kmS+uhz/rWCtZZH/OB/ov5sez5H51EYLmSNQbx5wZGZhtJWNN+AkJobg/Nt4XKRTe98CutbeiiYUGPxQvwG431Erg4y/q216n55FmCBIHZcUsa6Hk7ezF66c52EuAnVEkn7TZLl7vvym+sv9lKev31xpAGwX5Gy0tx2A7cSE55ZoyqOS9kf1s5Kwprx6RSBzfy7sffLSWHxyOSBnd7B1MNZglVSsbB1r4gMgZdYG//MZ/3IhTFbUqqw2xXHzTvBPA2Hl96g5Xzx0dVx2wHWcPcTSH23VrLscQCwyiDVINwmIzyG4CVSW/6gzA5VM4QYOrUDX2ZA5ligkZpWs0HTqmCB4SoqYJUpafaF2sEtCWHUjuVdw+rQiTBCcRTr8f1Vah2q2xbXMedLCRS3Vq4vlT0a/3wGgVD05CsAom31ZzmHQm94hZrx3FTPenhxLtTOHtDYXnbzYWufWEBSJs6VNtG9F5Md63NZvzEZiggfxTREDRZ7I9MBOPhrxz/3tAo+xInwvLXOEnTNOHVATm9u50kDs1qkJgqiXlxi9pZKmrTu4BeXS8cOxJ8O+Yb0Nh9bExfw+CC8X5xiWE58OwalxY2qlvuoR6mOqdcd+L7YPbGq+hJ/7WgJlrvtQe8IjGF1sJg6jfO8ZeGaPMF5NnbQVxGAq39g00on/z6dW0BLZyA6uglv99si8aRLpMk=',
+ version: '0.2',
+ creationDate: 'Mon Jul 09 15:10:15 CEST 2007',
+ updateDate: 'Mon Jul 09 15:10:15 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:28 CET 2009'
+ },
+ '63760358c7f5783d11fd769c78ca3f1ce787113368743655ade89bfa67d0d30a': {
+ header: '####',
+ data: '7lG/UvX5KjLbN+OrHbDeqXmweYeOL+0p3/UoLi2K93mCYdwsvx8mg+zghxwg5ITKPiZ9D/QWIShqiPpl+dvQJGWgs9EcP5W7k32CS2RNFaZ7U820rSpahHP561HDcBU1++5wHWszLnqFFiCuDja3OU90dsCTLI3g0igFgqpaRbjLcRTddI/1N48xNfV1YieC5Kei+jZ34zzrfKRn1f0F7mTkCqCSfygjnpRBgZyo9BfJ9rHULBvplvpslUUfFTShkLnCx0UbWPXog7DIZUCOwvPr3KJvmcZtCJp/1nW7gm0E5PaueJF10+ZlB6pKvueu+5yEgVmVu/lctmPX/UwTYZDgY5VWSWS3C+JNAvV87ZQKKmp8N6aMFMNOLCsOYL5hFN9uWGtMmvtgawqt7OhO9HukSUs8pDTgNeXoWyrorLM0cH2fa6a78GxNs3nCSUmqSQchJf5eWmASZgvI5xXmHXsNbuc4w5R9BaEPzyrrSAIa6r9D3rpFbUhMm+qPv9pZE2HF9liJVdWCBOSF8ZfCjsq5suyYz+YCsFHnwwpYmKAqJNXUMIhxkjgOTi5lNIsvS/iNSN9kdkeWINZk5iQFta34uJbGgjUhRy930ZGMBEV36T+Vb5tz50M6/MnlzAoUDeZAu54btKcrIpIq1Se+8zldwd6UKGq5nG+dMPk7CyKfZ5LkM065KGbgEJfHO651AMWp1sMAsbIAM6h1gVKbRjNyNwO+UK8eDpIX1nXHVj8bDVh96160cFbZj7htsUnXZh2AWuY6ahwdrGwYeSFoVAnd6xUF2oH+zFz2coLmLjD4Xm9IuQFsFO0U1Vo7EKUJHkPgIsXUT9He9tl8/K7UYQMXGgPTpercQFQ1ctFEqlPbFoVNO0j7Z9lmeSBcLdvY67CCbsoBDVJzj/wLRdBQStfeSUe7bEI6ff8+0gVkEFFACc48fWWA6NLLtvJkYjdojjA+C/Xf6EGNeXU/VENMJokB10EJUTueVWKHCLGI/JDBQBBB3HKX2VNFcEMJxES7Gfcbhysm5bdmltyRUJAIdXvw',
+ version: '0.2',
+ creationDate: 'Wed Mar 21 12:56:43 CET 2007',
+ updateDate: 'Wed Mar 21 12:56:43 CET 2007',
+ accessDate: 'Wed Apr 25 09:59:58 CEST 2007'
+ },
+ '6e0dbb3c582039d985e80e10d94f424a63f0cb5b2ffac6388fd806ef89c1da40': {
+ header: '####',
+ data: 'f5hBUeedsvb1VBTpmpQ+XgGbnuVDMVEAdbEN7ZLK5k++4Iuw7l52zX6AHCWUFMDRfT6joiD2DMj0O8B2g55SeOQIAtZb4PZnbf3+ZEqKMOOI7iYSfo2PctLbzzzztma8EUXYkg7sJKCuZuyXhkWZxikBqVQIp9WE/bhRxa/atnB0jJyttnDMdTAN8kxIizrHFfT25hSbcPI1cSzsmF2nLabO6hLlm7mdLZCOD6DSv9hMeOXgqXo7XdfLA4k8swnOA/85HZFmhaYjTyoDGsK8yoJny/xBbiaRij1HQcHkbG6k2QKcs96pjmiJPoCv2dmsU3Bh06l1O4OEXl/RL4qBGJBKsDW/TXy7Qqa5y6LCEnlFAfefTHVgzuEQjJ2qb/z//oIrmujt+8hEa8F7Jyn6+FGqMNRxDvIQn5Ty/CPUStS1lNL1PEb7TA3ChYkYvnuhNVq8HHf47neGMpUwC5ppk5Zzb/5zEP0XH4XXkNbR5/TYjcb0Df3egNLSQLdO13CO3mKeoccmtfcmaFCtOLXWc2xNNcu09s+/QlZMuiu1TAzhWXU2CAXT7K794mTXHXjgGEaEe86Pj1nO1zHN7QhKDN92WMEdYasRAVDu/XYdzpsKJZ3POhNJp6pynotVBOkPk+2g04S8uujLVSIPZIwu7p3RmPQGGvfMviswhyPvSsPqND77j5msYOLCnXXjeXhOe0E7fIRpxPK1F6/N0R4tZCYNJe9Zo248XdqBvl5ZQWDC6aQH1E4djPK/08CS7/kAECqGqOCDPRvvMUNkGOnxsMx5eofr1YR7zWOZajr2GnfhA9fjrLv6KxXPVU0z702aS/Mfnf87ckGpOKA8/ssJiyZ4fzP6uN4pEb6wEta2DnnacUDd96nMvB9HvGCDoYZH646+n4oev+AnkYTy+ZRpmnsG6/3Z85iH3RwN6P2I3DWvGuN2e+1zQ2kaBMDms8qeXVY1+8qWr75ihizHCJr6E8Rd2Sw7xM0+6mKpu6gVGIi09auHg1+6Q6PlCr8Hy/pc4Exj9Hx1m14WKSF2SB1SYOnm',
+ version: '0.2',
+ creationDate: 'Sat May 19 11:26:44 CEST 2007',
+ updateDate: 'Sat May 19 11:26:44 CEST 2007',
+ accessDate: 'Mon Jul 09 15:08:39 CEST 2007'
+ },
+ '84f3b8571428014d04d7c05528af73c89cedf17e23b1f9541fe7060512f4c1a3': {
+ header: '####',
+ data: '2/zsq97zQBq8wE0oAC15HW5pbbzgokoDkLSEGniP1VL+sW3b+tXYOQV+VSFJo8ERNlCSoy679G7N8tPKgA+rO2/roGP/iKEuE38et9R6v9nhCPfo1vKt7XpvzJYow/qDwdStylXbfW9QN12Yx12r/nkPldVTXCYQDF0Vs0h/I1XMjbILpq1smbNXAUdn9I3W9o8KpREvac2H1ir2vYOzq9Ubhq4jggX/9s+FGm40f5MX/OM+lJGdRPCMG3rfWVeFeWEGWpmg0AXpV7eEuKH7sPrWy+QLXD1IwNE03QLhuOh0qEPsEi6kcCaZyLlCHYlzJ/hIAR1CBlCtGm+vqD+WRr0mGQtl81MMl6/BoW40dya/6aIKNOWfmYNgdfplknkVqxFsJnwVqjQJWfCzbW1KqBvMHx/7oPNjbMS0KKhd8ctOsTLSvq4zFI+mvR6BggwT8rwcfa66shJIaDDC',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:38:54 CET 2007',
+ updateDate: 'Wed Mar 14 16:38:54 CET 2007',
+ accessDate: 'Wed Mar 14 16:38:54 CET 2007'
+ },
+ 'a4218c7ece0287ebad7f3cdd6510f424245a4d7d42ceb083b664a4335bcb7690': {
+ header: '####',
+ data: 'hQ123ZhZ4AiXD25P/0Laq3MtRO2oSIrY+GoYe3UAiyEHc9HZDCvR+POEEaARXNyh+U6z8S12P1GvQbzo23ZCt5byhqC+UmbfF3Y4FikM7WmHaRPtWjv8JNf3X0iJ9a2IBLA1BlqgJolnVDtrLsFx+6rBIU9r8pI2jdcsw9w9feRbE9/0S0filh66azojT5RM1qLcIUVWGixROY6PALSnA9PCjA6IG5WUa/DX7DyRrosZ9V4ZheMlzlz8CgEKBTN/HREIbPrEocBOvmnbupIEpOvH3OXKDXf39KAGVBAU2IIkOrGyWfT12p9dK+Zf+MQUl4DDIdAbF81Lus+LQmqtQ1ieyV0nNiqFhPuglLvKRj7QZRFfHNyejkMTZQWjQhBdHRmfSxyEgmFrM17yVVz4cMis/44g3szHMgAAfFIc79wq09oNDEV+ZUMS2xyBCALjRmhedqYIMGRCAG15',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:36:20 CET 2007',
+ updateDate: 'Wed Mar 14 16:36:20 CET 2007',
+ accessDate: 'Wed Mar 14 16:38:12 CET 2007'
+ },
+ 'c6613ccf0c1c6b65798c6f35657a10d4c6033aa32204a90d9d0274783a1098ed': {
+ header: '####',
+ data: 'ATU61Uq3Fe24JAEauMRtY8vMjzaQcPtnt1fshTD4dGuptFH9XoZ4bMC4XKHI7JKbx1NUEbR2ySOj9K/NJuWEGZjRgZbNI/KtuxNedlm/7jEpHQx4ZfhXQ8OiUDd+2bB9g6V0Ck2T1gM4IyaZMJ1QfOlYmGGv8n4flhHC5kUzL2OIiAxNHvKQjdEOccnEsk25Gg6FveKHD6NqVunsiCqhxJ84VBNzHJscuCTRcbt6KwR1+dw7Y+nhTjdDFq9UidlxTO0BKYsqj9F4Kq1LXORkSyab7zKooFH5kNd8torb5UFto8dfI8/+DOVHMxNRh2aWSn3O9bzwi1PfYO1nky2O6OKR48Y65Hp1sm3Xj4AAVHWSGakYUSV5M5XxKKzvoKY6Qqhz8GhbkzM2FC0IKTEcmINMvzXdzKRTqBFg6i0t7Qo80i3sQSoju3/4CYRozI2RrF8W4f3/0XgJf21oUAdTXOmSePSZoqhdejXeNQAgb89v+ZextxA6NJNYqvrx1NjdKmWKJIU+o3AgPYj4UIwWHwVADHITKrIWl/SbOsGP5aERtSiLnC+xqfRUOpgfkAYLcytspouHxvQjgNY4I1U/2S1DThG/N2EzuPl7GLYQ+Y3RAvLObFbrV8S3DS6vXIkigxyJT++MotIKoPBq0xDq0ck6joyvwvg4jXUMKlJa8/LQewJlbH8Lszx7SwjynzEQUJcpCnmxixzSNfRzpzgEBQSiClEEqArYykew3rjz9lc9nkdXUCzz81WYsvk6rGJ6ZdDsfKsG9+kaybuLL8huE0ERhznKDJW44ehDGQLr0phO3CI8n/9Px0PhPeZ1hvoiiH8CFSW5f45ZrFaaQG8hNyzWCpCFoX0/dNsNPsAkOJnO4v0PvO0HDOif1JjgPjCS51vBzxu8gYhkWlPo2hZxHhnnrbhxeBUU9jhLAx+NmxxfTjIWkbtHtVjm3ea/D2nuL1YrZKmQ3Qs6GamKlh3WwkRWRAVU3+/mbSGOISxo0u5v8QSmh/IPIXltniaQgWweqGNnCLWluuTyhoqnqDo0II7q',
+ version: '0.2',
+ creationDate: 'Wed Apr 25 10:04:29 CEST 2007',
+ updateDate: 'Wed Apr 25 10:04:29 CEST 2007',
+ accessDate: 'Sat May 19 11:22:01 CEST 2007'
+ },
+ 'dd2b4cdeaedfc97c384f79c2878fca9a981efde6ebe212138db235e51b80c64a': {
+ header: '####',
+ data: 'd7ZpqQ4CTF00+/UnTvNnnkMXB2Ow/K9dys8V09Nedq4sgMUk08E1vqi9mdWbzNfRD7aV3blru8PfoRrxXRLTG/bjQ6xncecQoAJeUtSplKEO8fhuzGqbMqz47/y3aQDHBbygMAGV3wLgJO2Pv8p+8U/P3cEJisd9OqTNE+EYQz4eiq9dllMNUQjDY9aLHE8H0ny/5r9uohGNjXX/LfFMshjeS4rToCG5mzRaJPaRs1jkjzSntpF0RLxfU1acpJX4pNSuaLscdJ1lIwc17vygg6f3xexqvCeeFZBot1RwwbztZKbMfap4pRF5KoftD9bXJwoFMXigeMGLy0scpzsp1s8zBIwLhwUxEE0IBh7qeStg/3eRSW9slazuIR452O3Rysb+n/jWMyAhIOCSrnncjjH4XHbzV5GgT2d4f8jfBPmOT7l7C1ev41D3FGFxEb5TZGcJTaIW6ofLi5T5',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:52:12 CET 2007',
+ updateDate: 'Wed Mar 14 16:52:12 CET 2007',
+ accessDate: 'Wed Mar 21 12:16:29 CET 2007'
+ }
+ }
+ },
+ 'de13c0d036234c44214062bc0a89e5f127470c464333493a485729f43cdc26e4': {
+ data: 'ZYvHAVCnw96hB+0XxnBY6p+vwvup1BopHUeepu7yOOSdYNFFOFEvtCbxXXoyVaKZAeSd2Vd7YEwRP4TTJjjWNPapT0D65AFqM8x+0rEjhmVfQGZAS4L3QctzRAgBoR1qTr0iqI/46ETkNq6vHz9mPLHEL3MQ/zoh4Pp0T+uMsY5ptzuMPcG0YwajSm5J8XXV2V5ZBEANpgL91xjgh1I9LiKJa/Lv3R9HAZG1uuCvzqjA2LWYeH+6ZcSpadk/UPxDw9c78FUnSNbHAcjuYZ/yI3v5SaZTjEzsB1MtAh6AFiHtvKIMWpqoOs7XQPhz1xXPoGZ7VR64A+/bN2h+Uqn49bQrKjTRGegqkEWFcBwhFH/ZkYfSHCGmZQTVqOakqyofJ22tS0ief45gYaO54YvIliTNTY7SZMRCEhUzz6dz8ENqP7FxhUVcQRbBr0JTmaf6DAwu86iDgkvcp1cY2trnUmlvrgz2GW6TgXoFjFlchUkHIByFeIJ02olfJg4zP8PzgYp2zhwmXL8iXHXnwzuP9bQKq5j8o+UhR11zn4MFvWQyD1UEplK6vphMdS8iXDViLrOwuMz1XUf7RxNdW0gqXwx+qLU+CeypyWLMIlgTlOr1pBqD/S5Jx+Gbn5GHQViuFZHJUjJsU0xel001KjB2Wf1Y15OSdLZ5l0tn/4HYKmZLufTYpub0xrss5r3Z72RYz3wvAWFXzkxWa+oBiRQiF6+ix8DBPTc3tm+ORnQBYcV/VNVRziimV3MFSsD1nHgIF1zu+eXIKE7/b3lzY19KpvtiBio94dejWoA/WO7KXWv2sHH0JoZnRh6lzu0HRFgYqVm/052nCGVA6XSfrFtfIupxdBs22C9wrwC5/Rwanf1S8BQIXpm25P4dv9Y9cS6c2/DUHcle4tsUJlqC+LpRGKXRdolFkiL9r01V09Kev/K2oXaWGYmBLbRfIyvEHyHNeNXv5fnaZ3pTlIwXjJ9K9yKA/1AKAsAEuKlM3N5ep9pfyuyfOWj1I6RvBwVqKvcBZtYJ4u8n9jrxiyq3ZZ35eB62D+ceOAD2s5+LL2IylYjiJA1OO2qpu4x9rt1NHXM6LYJAruBnUrJ0Ylqz/ElcJn/lXAzY6RLqVcZ+tuV580AUkFiaXFEDcqdJbbzh0R15g9DtaeiQZd1PG0a8Xblj9aMQoRDRJeksw1GWO7TfrJX1Cu4k+sgARWRzZ0DvB0SJAxPcmhg2iBByn2ESlcxPvMOpzuJI11BUQsZZ7dcynubeMvdqBeKsC6HMcm+8DLEUPmzsC3HIfARlNbt1fOrGJNuKaLvF1AAdwllELoPf3lQ6EVZI120=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:20:58 CET 2007',
+ updateDate: 'Wed Mar 14 16:47:01 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:06 CET 2009',
+ currentVersion: '59b84967035465bdf84c8aab3c43aec6cf60e1e2857e978b205a2cfda7546f28',
+ versions: {
+ '201725aba7b4dd93531e40ee08eb8156e3aecd3db4f11e54d4d88ed5508c72a2': {
+ header: '####',
+ data: '4ndloDtoW1Mhat41ZlW+nN+WkdEriCn/z/oclyBFQSljJRlMwUFvzE/OCVYc2fQx1D1GBedY/O13v+SCAiJXUrr0dgrMDOfmYy7ZtNo0hYshjaYQucJovt7UQLeFAuLO6rNK9CrsYA/AWoiT878z2iCYCqVq41sL8juCm9n+d9aR0eyjXAKj8QJzVz/uvdudoGQ5xL18x2yUZnemY5gQklYlm0u9zzCJ3rLOENnnAggFnSJ0oysNjB2UwQY6P53bqXzF8E+u6Rv3OoIbmCIZMaoK1G5ivnWHwhLzp9UVdIj8ipfLsTJnGMk+aZ3nnEJ7wQCaaLy/lY2RYmSeUTTZt2ImK4ZLrSxRC21QkD+juyIiaEBJdhP8UOfcqE8Hw+etc/Cl0QgBtv9AgXD4BiZs3HUTXsV/PhIzP+6TGyr3/A2kt8dv33V7Gh2Ba+28wtsG/+HwCMk=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:45:40 CET 2007',
+ updateDate: 'Wed Mar 14 16:45:40 CET 2007',
+ accessDate: 'Wed Mar 14 16:45:40 CET 2007'
+ },
+ '59b84967035465bdf84c8aab3c43aec6cf60e1e2857e978b205a2cfda7546f28': {
+ header: '####',
+ data: 'eSAwxBi9CLckMV3o9PxBjVZZ47g2AOIsbPt8QMPta7U+6KKUm58cXHV7BDfRkbin3JYQJGYfu4HYHmayGt4IcX4RD3riftxnG3UFNqG4LQQ8+fwA3xTMBisnUSq0JYc/PKdBKzxH9x8moSqZC/cgFWe90p0PxdY13otjd1qvDL2ALAgY/uEDboTcLTbSEhpGIYQHtQ1ZjDG+KXI8J7atuMvS0KFreNUm9+uMZT0yCXwNpGy+ez2+ZDXTEjZUKaFPLI7g/vyySn6VMXmlqJftGXZ+fW5UWGaxb7WFa1hh/nI2okPuRlUQh50xXQJXVvanw1ATJbN1PRfYEfvQKLlAAwYuoB/qL0y0vU+3OktAbgBvwt9prs3IsqjwMeaejVTo3Yj9pQPJ14a+6lxQZQRFUaLePIPdYvq9NRM7chkNYminW0JN6umi6bvJ4KKTyjAglBQ6X4s=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:47:01 CET 2007',
+ updateDate: 'Wed Mar 14 16:47:01 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:06 CET 2009'
+ },
+ 'c7398bb27021058c9965a332d678b0070287b8ad12694bc8732346e6d84fe9a9': {
+ header: '####',
+ data: 'L+wk8k9ejeUeVz0offdItFpy8drMl1hi0FODBMKlPIAmEcNjnHU/IktOlyLrK0YHj66DaplXw2EyRkJNcMIbfACUtavxhWBH9VTftOPepsbsrU19aP6Xk7R1pr1sC76w1TgKCjE6IyBnK5qk1oHqcGv71GJLMmiqGivKyYOXQ45SH9tbHC4GUrg0YxoAYRwXqg+SlwRHpSZkX55NzPCEZn9eatGKCznTZs7pg0uBoM546fOIEBMgGndNk6gnsAH7At8yYxDMnkGHUctsSExL1O+W3bDDDx7D3uPkkjtd9se0exPru0fmsfcKPrcRkx8b8MAdgcylOtMdYvSudPdR6foSIqKMqktH35QlH6Rr5E/ire3O632QlmCieKDoPk/cB/qL3gKedxT1NxtC7SNR3aumKBAKOBDTVSjWWq3sIImQPZz+RUdRajeqkryNDVVPLFyjdC0=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 16:20:58 CET 2007',
+ updateDate: 'Wed Mar 14 16:20:58 CET 2007',
+ accessDate: 'Wed Mar 14 16:43:46 CET 2007'
+ }
+ }
+ },
+ 'eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 13:35:58 CET 2007',
+ updateDate: 'Thu May 10 15:01:21 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:54 CET 2009',
+ currentVersion: 'b454ac54afb60c9bb6a1791843aaefadd8483630611c2bbd0ea37658985c62ec',
+ versions: {
+ '157b5933272bb6b8a70bbabb7fa0369eb2660f7f0848dcc653f592f5afd4f2a4': {
+ header: '####',
+ data: 'z8BUTeAbrs5GeJ+SxaV9ceaAoqxtW/touC8xhjkEqbG6+IgMrfuz6ABRn+vwiN1/Vmfw/tyad4kB2SyzKgaYPH7rXyBir1mzJi73/oHsXv5wWNhEePmjZginGGcWQ0P4AnrAoxlaI8tXo3fbsz8e40x1b56N5J6zIdvX3eewgIMU+J+iomZVPDQq5DNu0aGUL1xs797FNm4vLQbVRF+mzrZlT4XZNzOr/W/Br4vG/Ureoq1QRjAjj+8HRt7ojmzrpDX3RtmSbWqUPQqx/KpFGqVUNw0zs09MomVIYilRawe/zegW2KZKK4rmqoUm+mnWQTf/I31FYO2N8dLrI7OV71EWlVN4FSO2A7NRUd92uVxHzItMQPS3CSQ57FYAC+WhJh7k+/ikJumVSf18pZRSRaEeKPxbJZFJqrWsWk+SsqBIJ4EklAnBBU7zLmMVe3GO/ml3',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 13:35:58 CET 2007',
+ updateDate: 'Wed Mar 14 13:35:58 CET 2007',
+ accessDate: 'Wed Mar 14 13:35:58 CET 2007'
+ },
+ '1835468626573e6189e5302f6f354628f49900efe08adc931990d1c11fd522ef': {
+ header: '####',
+ data: 'Bv0je7USknogpb1ng86CEx6GbHlysuN3e5Iy43kg1iN83AgRm0Hp6/yMivQe/mEmQb+67cjHfKKrznAESYzY8uv3b+ystxoIaQL7tKJ5HYu2NUVvZxRC+PE7AkBhc+O28OzpZEHXXz62uZFsjRDw2hC/KP1XfYW+Deuulnpz6sgjuyWIYXF2486DzaycCqX0NmYXKE7oXAthOlbo+Zsm8Y5MWh5ploJFrzhAm0CCzjsGSa7NBOBWU2o6vN0NFMcOG2pdjZGWpWo1QQ5G9tx9UvM5pTamwcg5TOr4yOd16JmYTDjK2Fd5mdUuG3zIxFR8StIKI/Sd1ah8U+DGbNlVYAVb5OREJxQxVv6I5dxGC43CGWbpx3fB5wuFT3Jek6tv+LgBJaI9Ika79NFJQrLVMFbQgD0qU8YgCmLbxIJ4gxMBUgTN+v6PraIDHleYlpW3KVIiNxv2Ztc=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:24:49 CET 2007',
+ updateDate: 'Wed Mar 14 19:24:49 CET 2007',
+ accessDate: 'Wed Mar 14 19:24:49 CET 2007'
+ },
+ '47f73115ba2079f4b3703f502e3455498900a21941625c25d52ebb7da31055f7': {
+ header: '####',
+ data: 'pK+wAHWg4IJcixnFodLQ5EH+SFQIOMOrthx52u21WZ1ziRWJLSYGwA8CNNK8/welwzPHOPWu2El+zE6cwLHrzmL8EARLvvJ2fEK11ZIvF2C3R06uNrA7QFZr7iu6t67osrpfljqbjKQrMECUCUDrBywRvlpaeIlThfA3XByezK2HtbyHD1/xnyQSenUFu/6Zq1EkVdm9iCkbej2KxZSxA6qMl1WcnplBdOqBSmeGGJ0+Ikn3LZ7t4ztqflsug7QYyQlrmI+d0UB8MFWpf6jYjZQwf1rMH5XHFvrWUCi5IbFNJBUPF3n3IfUlrnjUSBEcW3tmodJa16/biK9/iKqh5ImlnpbQgK7CStgQ8ByJqddJre1idCiK/dyR1z+IXHTu4qm24cJeGUk7la4WMG2O5U/otFbXG5wTVgbLsxfXlE6fzxHAzvEftEE1ZPNOBpRZ+LVYEHKFESIz',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:41:15 CET 2007',
+ updateDate: 'Wed Mar 14 17:41:15 CET 2007',
+ accessDate: 'Wed Mar 14 17:41:15 CET 2007'
+ },
+ '6564169ac5bce1a632c602c51e9e5d637bfd4e87c1fa276e2cf65f39405fc4c9': {
+ header: '####',
+ data: 'fs5hydWDsT/FxWTb57K6zYKwVF310zjHHHtRS/AeBN8XZqTcirhV9oxJW6G6TdDkD7nQfWf53AbsivXn46Tx7oarzoU4R+1mz94TRCkEe5X2X7Wa3HbTj38+QwbkomF7np4MUkVc06aRPqkUE5hvSDbGn4SyKCjo/AnGhuW/QJIqnWVj70tf7CNTb+GR/y41JhJd7yk6U3cIP6Imik+DAvM5pE0KqxGLfLs4c1ChuTFNHfiQbYjs3tANqJCO185t4S8UIY5VxMRcnqgRoloFK3uFACIXoyDGG3FjILgxRCw2ePFsrm2Jtxv+JX4BsM+KDk67OsN91rjQnK5vBP72SzSge4EDCKJXYKdA8KJGYNwRIzk5d5ycbZgW4YCizVw8v7sLMn60v7YrDfBwXAJvvlTP1chA7HoE+WALqXkfBW29AOCNodE3eTXbI7iWz3vcWOCPvSm3hho=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 19:25:28 CET 2007',
+ updateDate: 'Wed Mar 14 19:25:28 CET 2007',
+ accessDate: 'Thu May 10 15:00:47 CEST 2007'
+ },
+ '7674ea33b650e84f9a461a91928bfc259de5549ce905339fc3b23623c6cfd09e': {
+ header: '####',
+ data: 'D7mLcDpylLnklOtIw/kvYX0M+CR6Si2t8CB9bTT3ZR+bTpXP88OtI19g1k9iPEUPdgbtFKPVw4oNmynP3x+pc8R/zzn4v697SvVtQxdF39Jmry5dnB4SMx6oRkuaISs0nxvTrHJe8U+s5ehzvQ2WWxWZ+LaoBWaYR7slgUFKLdJFyWEalPwMPVu//DoLZeWg19n2C/0Sy8u0DGdYHJVserWrQqxxg0h0m0x1wuKhF7IGvqgyJ31T5w00nMHNZbs89cUuqB/2doMgoUD9BqV7F/53AveuBDcdCc6jlEe8NOdoUyMuhwwwTyKONfjY5e5Cu5W9I36o7GpeKlckoKrTIWFO+NLG8XZvP/f2WJCsIOrCk/LI3C+bxBP+bK4tHRH13iXLeJYUlMK4ibcf8WI445qNoggJSbZzGr7Dav23KZWPcxzRxhI2u6j25/kKGnu4kcMB8ke5N+4=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 14:46:36 CET 2007',
+ updateDate: 'Wed Mar 14 14:46:36 CET 2007',
+ accessDate: 'Wed Mar 14 17:40:01 CET 2007'
+ },
+ 'b454ac54afb60c9bb6a1791843aaefadd8483630611c2bbd0ea37658985c62ec': {
+ header: '####',
+ data: 'u9HEcfobxZhG9BY3dVG68ZUYkREFcZ4q1o/xWyt3qje3icA+Nu9yCrZip/4fqe1daUX/MHyzUQdulIfjSwATjj3vvDSPjuGvrtx8oUjJ/K6GFsL366ozi45LkqkOaH02/nVrb+ik2HWIgcne/OzNrwf1mWLJoBF+8ZwQ44xqQK7ikG1mblNWWbZFFQE1B0QPmE/I/1ovm2hAr1ZsNj1l+N96hwGsdsdVFTzn+S7Sg8GTbxEFAxDQkBYEw1k/R8i9EIBndPoDZCebr8vP+c8qSEk/YmBXJ1MGVVvic0/Utn67iNLz9aBnv2z31DvvBj8bIwOxQpB+tom5Ivwe84tFkwwvpxFqYccrEg4bbMcevUo67TBVe+Lb2wzcK0zOr7iHhswbXaLzzOEQ6uF/v2ibTbATP2zNq09AIJjynoSDmrisGHsBrHgeXjiDspc9U70PVC83EsjPRwA=',
+ version: '0.2',
+ creationDate: 'Thu May 10 15:01:21 CEST 2007',
+ updateDate: 'Thu May 10 15:01:21 CEST 2007',
+ accessDate: 'Mon Jan 19 16:09:54 CET 2009'
+ },
+ 'e699fa287c2de3d483144b48064a47cd0bc56a436431ce23b48cb8d8c42ce851': {
+ header: '####',
+ data: 'hVD8NOt8g/DIe48JbUUo77e2hMf2UBN6ah23PrIzGTpq0LifC2K/0/s0yeL/PHUOncdT56NccKpF8Fp6EWJqDKoKZPWASuB1vHCEkdbcxlqzqo98VS3A7p2JFwQzSv+5t6y909hhbxobXMCUfZ10HBqGo6TaFc6+pkYqQ/d7MEnj2NuAXC9X9TLLuZSrZ96NCKGr8YVKzxinxHdiF3TdRvIppFByXPlbZ3xiielEnYm6pu/GffW7Hkwd7Vou6jwyggxVqvoVtuAdiIy67l8GX0gQUGipFkvvrAkXfm0sgtWGQvpgDuV/bXq/L5vX/sFpWI2u066lMUOsJQmptNP/Nkp31+ZNk1nCcUIYDDa6vcOy/gRrOFcenPTUQjRkE95KPaCqYBSIWsjoFE0EIB+iBnBCTK3laBSC7pplOtuLCY1YJcJuOkzCVQCVXjhWrNJM77s7a5OyTuE=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:43:29 CET 2007',
+ updateDate: 'Wed Mar 14 17:43:29 CET 2007',
+ accessDate: 'Wed Mar 14 19:23:51 CET 2007'
+ }
+ }
+ },
+ 'f215d89bf4583c12f5ed4f4330f488dad3fffa448f4dc784f15ef135dda2c732': {
+ data: 'vxOgJv/v3pP8GFqbFLTcgtBqw8V3zhCN9rRXUuWAfatABtr3pySWvt74ITeGw+sDtApBsu+zTY/95BFVtK3y0QJkC5cjJYhLDwvMwpqa0lRfCXWSYmuEhbPETwkW1MN0kAEOMqsUD9cQCH9GDD4A17W89AoTG5Ce//X03YBG0cDjbotgENsWjQpK88LXABHBQAoTF0BPDjN+xai2QPCgN0l1IVpUzI87oZJS7x/4r6DjGTOgcc3+vtEujr+8dGNaq9xTEfAFs1kv6GMeT+R/VkIQLVO+vSxi2fd+954EAXQplt047+aZ3c0c78N6B+GhSi9DgNnbTLu6sl332Zdgo9R09uucS8nvRp3HcTzxriKpx0ZMDh9K9ig5NT9Z2H49pDjCJKTukDU7b2ktOEUNZt58s+uIlw1bMFY1TMETGAHbTq+hld8Szg8f7nJGDQF10kV2ykVEQ2oUBMC9y9VCLyYD0BWId6DUcTNXyI+MqAC4j8pp0NhURY8VSjtnV4Rlq+b48ahP/ifJdq+xrSiT9ykGqc/EyebC1uCTIZewk9MtIAndVYPckMIe0xQ2xhX6/m2bdNboVa3dnS5eKFdbd++un6FD+QAjgtcBkXQnwfptottZoghclKL5h5gPePCQL/66CLYy5+3xctfCG9u+VkH97JKL2hW+XZ/KuxLPFkIAYmbFKsNdIizfpbk5WJvoSzacpo1mwNjZ53zn9xhy/VkSIz3lGl83a6FyoHuR9VklyhTaKrj2JNWzjLaQPiR9Sv2eFNjLTivxtxLwKae5Tz14WU2QlXATC5xdcLeF9nK7yYVarcKlRsYkkvetrVpRiWUVfy9mZQIHOWJtY5AcptKso2Q0v4CuD1C/wV18DMDXzwMXeOq0cKxCsZOuWjO6RwWKzfeZnJ99S+EsFmdI/wxqiu9slJ0xXvgLvjiJhJ03qWwZV45peU1qmvKQrXS80QqLp3kUfRGLbZNOvkZbyf5OK96MA7lok8PuCZGg5jZHFX4B3vxSQ32P7VGSWO5CqHpF45YwtlONZKB0cuvKTRazZ+B2zJfwMYRQloj6sL5501oPqmjVtDg+0aoqKe5DmTf+fHV4FwAxQ8RuW7/BVL+lwf+zjtd31I/yrlDdb/Scs6yayLV026yuHxdQRl+ByogtrXbY4ViuU3NCkVrme7K7meRHnQdXyidhjzHdoJnRPa0IoI4VW3VwWNENRRNDTta2whOdIKsQYtscWBWZnQplRmDChGikERYQVCWejDNgvnbnGrlyQYPF0/vcv6PoDpIvh7Pze9y0MLBU8DnWqAhpdqHPNVdjdq51OKlSitUk5TSN9kxePe0KNFZueLjxZHUFIZ+SIkTxoCoaRWYMJIWvYkcT5S9Y/7NbdapuUaLZNGDc6tgD+LVYRRvGEdPWaOHb7G+qOmdtx8vYxZUqq5mtwnIBRzEllTJyKwwK/kOfAxiRjLxf7SOXsubPuA7bHR9fI5rROSR5rcU+nOfSV9Wf4wZkYBlSmQYqzQfmwl0UCiipJVa1DwYwLimgo2RqhI0M38gEH+mrknnevE8zlUIaEWzxoOnyWbtCecakXS2XvE9j64dswJ3bbeQ3fDQr1308x9qKSjFdDl3eNcJx2e9YwC7wZnTmHeHzRXnZwXsJXqMPDQV99wEDBr71BjlDjMx7vG9bOWrhsyJ37EOvO2X41Ij3j0X4MYpbNgxBFP6zJSu3gILrtqQRpQq6mQJ1bWHyCN1ge1zKNT9pG6rGTRPE9LqHROQuROpgFM1R+DqW4XnGOBYSOtznnsnj5fxfdpGeFq+v/ftvVuN5XsgX6dnT8R77iNUs86Iz2mkxLaQokkNzXl5o1rnQIse9+kcKVZ72mf5SG9s9DD7cZ7bOtmkuZCexJpieIosqLV8jc0IA',
+ version: '0.3',
+ creationDate: 'Wed Mar 14 17:39:39 CET 2007',
+ updateDate: 'Wed Feb 13 15:29:04 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:41 CET 2009',
+ currentVersion: '6cc9ed382347f8ac5b5073f459428897d36cc9913947d003da874dfaee5a7b74',
+ versions: {
+ '33ce5a03b6d36f59d0fbc9445dd01a515cb56eccc6d854cffbf8aa66f3e4a45f': {
+ header: '####',
+ data: 'pwMmqFOwpW/uSys3hm/AcoERF3eDj4dO+O5SdYsR2mJtmEfXcjhS9altLhVOsck0KMQJdxE3rNDFbduF35yVetXuQrrL+bSRlXMq03EXETyrRzIVhFEM4BjoCSS9nKGgixp04Ve9WSuwD4cXRmcN/L9kCJSCqflXqhkYkjAywQoj1KxHPdAqMaGRpEWioUIfX+NiWbO/qtOu/USAhHmWFXla6/A9kKQeU2d+P3zl9KF2Zm8qm8NXjPKmh2dkd70ATbdzxt9P3BafoRf/Ud8zLIVdQYTbv0pn6UMIiUDRK1ryvgfSY180zg4qkP5pBnxhEgOxbjT8JO6hCl8n2jUCRJLdUXHwgpeuHcKYDyZizc+p9Kbc4+d8K/2UEKgSR6gza6Cpw5TQbZQq+2LxWUoVb3HM3lTqBKUPM0FdY2/3twZm/1bI1uBMPnyp9x/JsQV+xOpu0ZulTA==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 17:39:39 CET 2007',
+ updateDate: 'Wed Mar 14 17:39:39 CET 2007',
+ accessDate: 'Tue Apr 17 19:09:44 CEST 2007'
+ },
+ '686ea579db132287e8e322194652ec57cba6e60274c00f734db7a0b36702c817': {
+ header: '####',
+ data: 'ilf8U30hSq2mqje9kZkKQAMiEFV0aptXrm8fOtoOR8pp36V29kXyUX6FEOh5eXSRr/jbqGytxKENJeAGxnsv5U+8GgbvlYaR4MPM8lbKcpAoBCc0+CCOiwnp4XCoXFCNttbTzfb6qgR7wqdK7YLnrvfzJieQqJukQZvtWtsVZB/Tis+5niomz8Ca8lo/FjFOIjAq6xtwrW4CS12+yZdTKNbj8e+HwoUcesF9RbCKQlpVHuwhZ/8ghdzDgjEE8z44rDepEv3Lx/aUi+67velLH3j+1crnxBUz7wP/dWzftwWgIxDkCR/vW63yY2Xebt77swDg8g1Qj5OJdYiAq231HKaZjxr10y88JI5HC1EvbbduDN6pknKUgM+qEdojpi2BmjK+9MtV7sVhJoWqwHG8q9z03kgGoFnWEb53HyMVes1n6HYfzwnw+idPFWGZJ4IB25WfJLfQuQ==',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:12:39 CEST 2007',
+ updateDate: 'Tue Apr 17 19:12:39 CEST 2007',
+ accessDate: 'Wed Feb 13 15:27:04 CET 2008'
+ },
+ '6cc9ed382347f8ac5b5073f459428897d36cc9913947d003da874dfaee5a7b74': {
+ header: '####',
+ data: 'l18dnf2TRfinuu9KDraIo41yvG3mNFqiSCOkyMI6WZZD4RnF8R2Ob19fJ8zXv04eDx7TYyyGP1IlFWEdT3LBrOmmbtUmIvtYanIfKTkT6UGHNH2jh1HyHqJbpgIlr67mOm6Es/AgF44BiyJrk5R1y9tA90oeUQynMufiM2MFLpdalDYWEh+W7GV9WCmbBIU/soioTJ1ep2gvy4kJvTSrXENaxHevKfYwn8ucocvY+hjkWB4GWOR40qtaG06wWMLeRsrTBH1jBG9srzbBa4u2IQ0+NJjQrYdiu7nfu6Uyu7Ya/4bxV3Sukao91XvXSFIhcI2OuKl0njUshv6BDEfHwXIQuPtn7KaTx2uYl1pUeTv/tAFvf8Ng9OFNgK0siIMkeg1thFwRiGSmxjP0QZipDtcCekIxj2k=',
+ version: '0.3',
+ creationDate: 'Wed Feb 13 15:29:04 CET 2008',
+ updateDate: 'Wed Feb 13 15:29:04 CET 2008',
+ accessDate: 'Mon Jan 19 16:09:41 CET 2009'
+ },
+ '7ee6a662d1980467eea86a58cd7299ee02000740693df2a7ab9dd64347dbbaa4': {
+ header: '####',
+ data: 'ZnwtGdkg72+TQKCJQhZQIqP9sz79FcptnmH8VJEDQY9xTburh4cyhgbgROBis+awp1C5OyiAAoWfPnuRAN8Ai3d9f8M8yjnDGJ4BAJ6OjQ5r4RDQxNycCApXWO3mJpBrx56wMsCVWT6Z8a4khzPrf5HlDtus4lRV4GRdhU9FMpwuaCfgVD38MhlYXDaPgyu/8N+6eQHuFxquXjOJmptfO6tVhP1+/tEHo6iUAX3sXMZAionssRgPllQJxfzrsu7GQk3h66PakRzgStTHUCcdyoEe9c4VnvUgaasTbhENA4x8xPrxjo24zwxfFpWNEb1+pe8N3+dOXTsIdd3CMKrxQ5KkwzyN/Bj9jXNk9YX8PC0geJiR3bCGtPsAd7aEFB7E6y0RVX/RL5f6x0utSYw8mg6lfprlr5A=',
+ version: '0.3',
+ creationDate: 'Wed Feb 13 15:28:28 CET 2008',
+ updateDate: 'Wed Feb 13 15:28:28 CET 2008',
+ accessDate: 'Wed Feb 13 15:28:28 CET 2008'
+ },
+ 'c860f9bbcab5fa70854212e18c11a3e9bdc2382f91cfbd25636955c443a05f8e': {
+ header: '####',
+ data: '1rztZ6mKVFVjlL1kEoUsXEMketdElGbOpYK9iy3g1/WeMcTd4D/UjgHvmQHzzNuYJc/yx6cCMMU9dofLe3vWLKhqDAPAVCo49qiH527hP9rQE+0SNO1v2Ymk80hL/gqBfju51bIYxPKAD0uYA+GMX7OdL+S7qdealebERcnVa0K1AHiVU8lu5yIKk55U8zwitk0u86J1zwcraiM3RGXir/x3oZRIKDwT+lhUJPr8GbVjgKlPu07Ii8OdrAGdHefETDlyNnaKPJHTbGXkd3HZ2CYhJCQZGn1Hwfs46iRd5aO+3UErYtgIHl6CXuXd4E+DNW4UJZedP9YV860DBkpqMiQokEMYTh8Y2sOUyf3ZEOshfGvJUhj8O5p7rNm4+2BYO3XhREdV39tn4vUj56wYj+GL5CekEl0c4Mx7ViTQA+gLvk52V2w/5gFyFNQ9U+jUQpb2n+d9cw==',
+ version: '0.2',
+ creationDate: 'Tue Apr 17 19:11:33 CEST 2007',
+ updateDate: 'Tue Apr 17 19:11:33 CEST 2007',
+ accessDate: 'Tue Apr 17 19:11:33 CEST 2007'
+ }
+ }
+ },
+ 'fe21497ef7435d31f9746c132e4b5ecf5aac5f13b5961ddb55d2bdc3409f28f6': {
+ data: '4zgqvaaWm7nJO09LKN6o5hbWwGzOv7VVmXDu5T+JCHTSOXbteogax2Zrv0uKLkfooGFThJBk0rXfXxE64vMOq3AeHXGw7Chg7hz8Z2Lpjr4FfE6q7Em7UuAlAuL1PiyXXJJK5iSsRY9tkizuYl19aXW+CgpPznYD/PyXgeYxqt9WLqK8cl5iAU87R0cQDhwl16ivzVgiiFeaB6B5FQqWBAHCEgXhqTsaw2gv4snbmPOqcUZbHy/Vb9hv4lPBJwGFNxQzeZUad92VBC8YbIjmbohDsXjteqD2/k1qOgpUB/U5BpyVwsi+5ahgb8gbS+AqYoRDYzkaj83ksPI4JzWyZhpqjhDauaI6M7hGnJ4GB8UZc0M3WPgrlf1r+TXCgpcfembqL1MyteM+C+ItPRP/QdaIXxLOmvGFOBKQYEI7UceUWBCSEzORlS2S2lltlqt+K4B8QTULiKaXCfRmF/u60FpJufIkUX0pE/rQVChxswSWvh7uJFDBIDx8MplTX724A7DN5d4/Ad4Yi2cj3V8X/DEErnHTvirP3tZ2F2oAe7kIdu+JuCqKcMaGB4hVijzv+yim2TCPvrGTFaMmg9PvcWHpik9jEIabCkdqAR8EGIkD29+yvG4vD0DTRKv2vPIfr60ZQnsgs8nlPPoNa6lNHvI/EO0nBGBYBc1TW+syV5h/zOG3rHX0XCHhISZmDMjra7eUETWChncR88P7ciC4yJQtzXFGzeXp2ktzZ8m5g1EQfgtlUVZsHN8e4OQ9DjKt0unfq5RFBj2jlG8TBZn6ZpebxWR2qOxp81KQLHJND9zRTy3h65+k5wo3MnnxE3GbeXg2dFIORRvGUT6bWsqW1fqR/pg1GO8KNtrt3CryZofgE52kuk6hlcmSk9974JR5523+1/hbts8n5VrTi1C6GWhnxpiJb1XIvICdag5g7C2iYppzLKVzbJcFMegwDUrapbmGhkqnGwSY1EQSDyagPr2xlziWhdWdCOVAYcyw8dOpdD97QhVef0OWrJ8nbgFKD6wn21475OFxooheWiMCyZwXqESVG1cVCjeaCsymBtEVPpmQdSkOfMdXpKVF+3osb4K2XDpPeU1zPWVozeMp68YhLztQ/g==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 18:43:29 CET 2007',
+ updateDate: 'Wed Mar 14 18:43:29 CET 2007',
+ accessDate: 'Mon Jan 19 16:09:30 CET 2009',
+ currentVersion: '1b12c771a7f5f13d13f12016ad4132e9707be2ff00d72f77356204f0f86fc08a',
+ versions: {
+ '1b12c771a7f5f13d13f12016ad4132e9707be2ff00d72f77356204f0f86fc08a': {
+ header: '####',
+ data: 'QfC77EWgmmnxz9JqLdn9Tw7mNztfQZPdNpaML03EdFpphsjgLloqBRX0UZ21oozjQGHpcUMMOsaJgzCuDlfh7T7ePVV60Ps4AJtzv7bHSVGKsj1iALU1qjtesOYJayp8bA/3peo4HEnVgP86jc5NTwJxpsUhNG0Ae93xVu4lPF0gL0/yjgZUHqYZXkb+oXrcybL0BSOjRnB9fRpA1dEhcwJwoelLTvg7il354qp/Wo+S9Cz5E/K+xnlJAuSXCRXboWea/ZZ9TX88q5uUcY5jLF7Xi2HoFVZw2f5tbycxwGtT1CKXp+OAKn6mQaBAYM51zoMNDT7MvBDXD3v4Cidjgh24GZ2zndfkYT0kHCtY7OVIVSTsXTR+5/XMedojVvDlX9LBa9ST99NLCUy7Di94rJtX72ev3Ei3I1w3qPvCl3jgD2VbIwLogCzqLtY+2IkLAa8M2EpX/D+h',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 18:43:29 CET 2007',
+ updateDate: 'Wed Mar 14 18:43:29 CET 2007',
+ accessDate: 'Mon Jan 19 16:09:30 CET 2009'
+ }
+ }
+ }
+ }
+ }
+ }
+ };}(),
+
+ //-------------------------------------------------------------------------
+
+ 'test_test_offline_copy_data': function () { return {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+ '9a984e219b07f9b645ef35f4de938b4741abe2e0b4adc88b40e9367170c91cc8': function () { return {
+ s: '55a27b18e8fdf1fb5e5bcf859cfa50fcbc69c9a41f04e371606a86411a98f460',
+ v: '983a6c79e7d5d490c3f13645c49760180fca05cc677914bf60fee009ead5a65d',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13":"0"},"data":"Ki9chN/ker5c+7zB5NinstllVq1Vs+N5pezZIohKVVa15VLSIyre3DRilRoldy/94LbGaEM3SZsMlf28hYbWySln3ekNMIB+MItaYb8urw+8U6n8+QaRMAClHXukfi8te2d1OIlgjbrBQNMmzBorjIs="},"directLogins":{"index":{},"data":"54KM7x3emxWZH4CQDLBj4SkT"},"preferences":{"data":"AwOQXmReKkLpp8qZa4zjaWcY"},"oneTimePasswords":{"data":"YgSYIsDeVT87bfiASQqXA2E9"},"version":"0.1"}',
+ statistics: '6Kupec1ZD7Dw0WzK7pPesnLE',
+ userDetailsVersion: '0.3',
+ records: {
+ '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13': function () { return {
+ data: 'dXql3HZJQRpvwOe56SgzbbpMoYWRBjEp+E8uMJT7tprzYJ109H1SnxRWWiXlDOzH2XfoXahP3S59K7rHeJ+/icX+ZrsOvp3YEW7wdoEDosyvrQuxrmHdusZ3BeaFIhQMmK9wqpAzpKCRrz30l/yi81zNpLgTXLLK9fiAyksmsfQL3VHgQg==',
+ version: '0.3',
+ creationDate: 'Tue May 05 01:28:36 PDT 2009',
+ updateDate: 'Tue May 05 01:28:36 PDT 2009',
+ accessDate: 'Tue May 05 01:28:36 PDT 2009',
+ currentVersion: 'a22bad10653a70ec3287917bc23d642fe698042cabbcc1074b60122cf2bb9d4d',
+ versions: {
+ 'a22bad10653a70ec3287917bc23d642fe698042cabbcc1074b60122cf2bb9d4d': {
+ header: '####',
+ data: 'Pc18C1A9NwNlecbOtOOAEymNZD5oq20ZvPqMfiCyNhkcmaN9sEnifF31epZSjpDw4XM4ex3HFhhITttXlCrossDVYB8z00k6XsFruCkdwFRmBjb2PdrdZFAkGQeS/8xTarYWgiflkfGocGqVm6EUq1gh8QLE173Jzo15LOSuzuSS90BTMvcsqzzRrIEe+9jwF9/ehLyQ5yYxNImFGQQ2jkW0KiZsjyEbQAGry7B1/AiSUBaGYHYzcB3bFgXnzC3ecPwL+ENZ+azpTd143WneuVMUJrWNp3S+9ZRzboRzcYV6Ax3nOLPS7LTc+e9j9s4CrPvc1L6pG23AzNByDWst0JrqhN37yp67EVVrFQfUDWcKgZyyA/M82q1TVScx+I4A+g9ASC+PdQ3+M5+EOtEfClkgYJFqzXqwPKYwBv4CBKxikS2Vt8x40271kjmVYyGQOIRTo1UKn6u07TS5hxdEgEI+WdukG52813USiD8bQFbN0r4VhjFSqKMAJoItjqvafBNBl+OXYQ1p1zRCXP7wHS4/F7mvrK98gSuIsBgfL+/q9rExXaxIZJNSbs1HGAXR1TxYSvyKZvLa',
+ version: '0.3',
+ creationDate: 'Tue May 05 01:28:36 PDT 2009',
+ updateDate: 'Tue May 05 01:28:36 PDT 2009',
+ accessDate: 'Tue May 05 01:28:36 PDT 2009'
+ }
+ }
+ };}()
+ }
+ };}()
+ }
+ };}(),
+
+ //-------------------------------------------------------------------------
+
+ 'test_test_offline_copy_data_withExtraVersion': function () { return {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+
+ '9a984e219b07f9b645ef35f4de938b4741abe2e0b4adc88b40e9367170c91cc8': {
+ s: '55a27b18e8fdf1fb5e5bcf859cfa50fcbc69c9a41f04e371606a86411a98f460',
+ v: '983a6c79e7d5d490c3f13645c49760180fca05cc677914bf60fee009ead5a65d',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"75b61c51726a35d1c12ac553947ff9e974d1a29339f87fbeee0d831b59938a53":"0"},"data":"YjlNzXUO9m0EXdi5fUguA6RjR5jc2mwuHkpMsHAheExR2zpoV6OJx8tBTdUGqDBAlbIn6xUx2TT+dzgjic/XubgKNsv6JpTvnfiW6ZMWiebKXVigoZw7L5EvmcHjVLI8aoIhVEj4ADwkh9qHm0Kt1zFGQPwwJfo="},"directLogins":{"index":{},"data":"4W5csD8DxlxeXVRROk7wVbXi"},"preferences":{"data":"/DjOoFcgquxUbW5ye2LrpsKM"},"oneTimePasswords":{"data":"DEqkd74lLAGtG4YKRPniBNBU"},"version":"0.1"}',
+ statistics: 'EkRr9wEXi/WOlZfCXphn9kfx',
+ userDetailsVersion: '0.3',
+ records: {
+ '75b61c51726a35d1c12ac553947ff9e974d1a29339f87fbeee0d831b59938a53': {
+ data: '/gtNfde5l2J9eeg+rlBHZtqO4RDaWNQwaMEluOVowKdUlGAYjo9FU0NwKsA9CM3ST4sTYl0mylP3C/AGybO8/9sTCkEn20wi0slharA61Rk8uB2lNjCICZB4l3ZGvD4AHKucu8YQzxpWop5dTN8f4us5eJ2VjvJPLqUzSKZL4g+6MiKbjQ==',
+ version: '0.3',
+ creationDate: 'Tue May 05 18:47:53 CEST 2009',
+ updateDate: 'Tue May 05 18:48:59 CEST 2009',
+ accessDate: 'Tue May 05 18:48:59 CEST 2009',
+ currentVersion: '2c913151cec0422dfa51c5bccbca6ad09d8e195bff144d2b5f7a2da3bf55c11b',
+ versions: {
+ '0311012a897262b85b60a316f086f0576caa3c11a34779c02ad9e60232c79564': {
+ header: '####',
+ data: 'MZGx+tQAecxJNl6UbWHIM8g416Qa8DfWtGo7f2vLkPBbhsr20xnZ233oPqIGceG5/6WMssQd9c8U81urISK+4Ar8zHGUxTdIYLZaDq33Q0uF5vO7OsaBcjL7m+tX7zB+e/eu0ABbqvt+saMsZKKSdIZv2KNbAg5VTiL7GjWuowM23tWgiUBgX3eO5fnUUQWVkBygk0qy2O45oNfb1XcbsGMCfS4YPF9GB/wGSQKG8keMoy1ZWZh4nG+Pdx2ymIrYKLv8T+i7jtWEbyhvEglb7TadCMBBF0pnkYvG3F29skWooZC92dy5213o+3/uSKi0od5tAbvSYZHjT5hDulUtmjRFGq4ZRERLqvrZs9Sg8G2mjtf8Ta99Hob8WLxyGF9x7s1LcLPERtdsP9qCD+I0WtwrDiodl/sPQ/5s3G2S+M/YejKXBvG3AWwoO1gkdhec3+d3meFNvCr0hKNzotrHmDLC4tGyZIaAcBmPQ8xSD5KmNJJFU+V0QIdiEYKnPjo95oSmKyK1UtIoPrWCahfYSKXh+aW53XnzY4JKHRER9vWwdJzz',
+ version: '0.3',
+ creationDate: 'Tue May 05 18:47:53 CEST 2009',
+ updateDate: 'Tue May 05 18:47:53 CEST 2009',
+ accessDate: 'Tue May 05 18:47:53 CEST 2009'
+ },
+ '214d184d75418af71d18f412bc6bb153fd6435a4a675af6bf2a744ecbd7a53b7': {
+ header: '####',
+ data: 'Y38v4jhKwcsW8LDTigIhtdLJ2zgv+1rSutqyu0AilBQeSTe4D0rnapZZTW/mNnD5IGpWKFoEl8+WGj1zvGzleNdkOa08nWJEYDNe2h0+FjBSHBUAgH5fraezomRWzJ/Z5HHFiZuFfpjt2BHd0Y3Not6AuL3aBgjjkEai90r2o59Xr70maUwo1UqmtVg3gvX067MC3hlqhNIp390J8LFiSj8Z4US9x/WzVR5Xx069+0PFMBwipq9WJPrcfTPwvP6xVa+J8BCJk3HtboRutq1ZhhHpibm+TY3Xl3gFTTCHWDZCSJ4Rm1dWkyqpx51u/AVg2TC+ljFLKv7hq3euVZNMLNMY2BqoCkcb+w6dFLDs3WfPAW0aQN2P++GFa/eVpN90YxAeXufjsXKaArTMjGWKiHqyU1iVVI8N1QEiFYjjBV1GvkJxog5PjtAzJF++qwHDIa+gJ+NnOfenVF0wIRMCEnpGyvbg3SkUoenKFoHO0IcSP2CW2RWV/GAmiEZEuVD393mKi5B6fpjdO9JVPNyz0i0kW++dtzInwPnglhOAY1ywT0ExOBLIEr8=',
+ version: '0.3',
+ previousVersion: '0311012a897262b85b60a316f086f0576caa3c11a34779c02ad9e60232c79564',
+ previousVersionKey: 'f45/Sx3jMC8CgdT8cjfcC4ApA8xMXABFO48jiTh5VjJfTlVqw3NnHRO2KDBIhy0znPvP2AKlpKQHruW8LQno7YLyhEIXh4ChjMUjJsFFwB/LUg==',
+ creationDate: 'Tue May 05 18:48:11 CEST 2009',
+ updateDate: 'Tue May 05 18:48:11 CEST 2009',
+ accessDate: 'Tue May 05 18:48:11 CEST 2009'
+ },
+ '2c913151cec0422dfa51c5bccbca6ad09d8e195bff144d2b5f7a2da3bf55c11b': {
+ header: '####',
+ data: 'tkiW41JHOfbYOt2KHx1HtDJEzxbfVS1Y2HJQqdQZ73zhvxnkWLw/X6FMiBexLeoKXO1H9NIWS884MzEO782vg8QRxTizg66Yye+q1Hox+QsaEoaD4UQ54XV1duTOB/XS5P0P9DFvtIz9msEu8GJrvizAdxu/7FG2b5XfENDkwqIzydI7JMfGC0JzDnfGvYkWqoL8jx3Joxa7TNqN4he4v771Ho1ZoUv3Pp7ZGwBU+btl6Q9mcycSf5KXdTw+6nDjfQh8qyts/u7O5xPFh2Yn8zS48x95I4SA4yFKtERU3pLAxIkcZWVb17xT8xlbPESreZ0RyYSR0CgW0wPMxkLHH1uqWycTa7yIxUhyn+JK9jCl4eDa/KUSGbN1yb6pOyjGuev1vHEZv3bOmO52RVVIdMHTe3LezCKY8xpDqtQKSfAvFg1TmabugXePXB+KvPbDDWI5otDEIwLYhDFcSn2FyqUEATSzeU2o1uXO+ffbU3QBrwr27tsreughWSP7905FQbEEshsRUc2Xt92WhTnVM6W74Y0bMLWjTrXbu+hNsjtFYYN6gtezcltnB58MVw==',
+ version: '0.3',
+ previousVersion: '214d184d75418af71d18f412bc6bb153fd6435a4a675af6bf2a744ecbd7a53b7',
+ previousVersionKey: 'XtJ8Ub99GXIkxErIPr0HaIrRqlAO0Naa/tPwUA51K2D5R6R3CR6QbHd3GpkCnu+y+bcEIRYrQqgabi3LROYT+1SZ9B9FctX6FyaTjYEazFdCvg==',
+ creationDate: 'Tue May 05 18:48:59 CEST 2009',
+ updateDate: 'Tue May 05 18:48:59 CEST 2009',
+ accessDate: 'Tue May 05 18:48:59 CEST 2009'
+ }
+ }
+ }
+ }
+ }
+ }
+ };}(),
+
+ //-------------------------------------------------------------------------
+
+ 'test_test_someExtraOldData': function () { return {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+
+ '9a984e219b07f9b645ef35f4de938b4741abe2e0b4adc88b40e9367170c91cc8': {
+ s: '55a27b18e8fdf1fb5e5bcf859cfa50fcbc69c9a41f04e371606a86411a98f460',
+ v: '983a6c79e7d5d490c3f13645c49760180fca05cc677914bf60fee009ead5a65d',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a":"0"}, "data":"3iVejXl+Wnh1P1HeNXhuNswKZezHtSDEnMVPhtFmF+5qimM4vXvQ+8hTO398SktE18V+lTxzQBLrLjMfZBLIaq1rszO6CVi+Zz2+A4jC9jOkjqlHlMIQMxF0jwvTr2fRQSYJIT086H23LVH79Pdik+E/XmQCMyX5oPrm8xI3TnHmb02GDy3uEYTOodIw"}, "directLogins":{"index":{}, "data":"zxt4pdoEyLS2Z7F4GuHsR2Js"}, "preferences":{"data":"/nCI2oM+0mskwEBYj+ghKgvI"}, "oneTimePasswords":{"data":"OxUue8AceRz1qmwkj/c0V91x"}, "version":"0.1"}',
+ statistics: 'rGwA4ZUPNmYKzQCzLpstvcos',
+ userDetailsVersion: '0.3',
+ records: {
+ '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a': {
+ data: '1eab9775e41984618f366a58f3de6cd9d72725da399ade71071f83d3126552d95487437b1a6fc87cdb25b47d35097604ed23f7dd2b54bd71982eda7cac3e19e9fae5b1d8c52806d6a860a35e023d525bf0e43ef459901da8d819789031a80cf8ee4aabc0e8fd0a051a6b9a23e4e7151da900acb710439a5b11477259f464dbf38a6327adcc9dfd7ab7808ba7c6d26a39bc678da394083652bbbdfe382f32ff3a92a31697b72e83f1534e72e7af7b316137d60d597b80649fe11dd506f600315543c39bd447a884218d5ed8746102a95587dbc844f3437a7f057e26a311078a2fe508613894384c6b120e0b74444770dedc636930a5db17e39a55c79da36f44222ef7cc0d3060deccef7cfce9d4454fd3ab4f8e19e949a9cc208e915e29b24a6cd9c0ba01a84ed3c3d29aad374828c4f7174e51d5949799d29474f9d0e0ff421412225492926252c5c28859fd1945fe25',
+ version: '0.1',
+ creationDate: 'Mon Oct 02 10:01:52 CEST 2006',
+ updateDate: 'Mon Oct 02 10:01:52 CEST 2006',
+ accessDate: 'Sun May 24 21:33:48 CEST 2009',
+ currentVersion: '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a',
+ versions: {
+ '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a': {
+ header: '####',
+ data: '1eab9775e41984618f366a58f3de6cd9d72725da399ade71071f83d3126552d95487437b1a6fc87cdb25b47d35097604ed23f7dd2b54bd71982eda7cac3e19e9fae5b1d8c52806d6a860a35e023d525bf0e43ef459901da8d819789031a80cf8ee4aabc0e8fd0a051a6b9a23e4e7151da900acb710439a5b11477259f464dbf38a6327adcc9dfd7ab7808ba7c6d26a39bc678da394083652bbbdfe382f32ff3a92a31697b72e83f1534e72e7af7b316137d60d597b80649fe11dd506f600315543c39bd447a884218d5ed8746102a95587dbc844f3437a7f057e26a311078a2fe508613894384c6b120e0b74444770dedc636930a5db17e39a55c79da36f44222ef7cc0d3060deccef7cfce9d4454fd3ab4f8e19e949a9cc208e915e29b24a6cd9c0ba01a84ed3c3d29aad374828c4f7174e51d5949799d29474f9d0e0ff421412225492926252c5c28859fd1945fe25',
+ version: '0.1',
+ creationDate: 'Mon Oct 02 10:01:52 CEST 2006',
+ updateDate: 'Mon Oct 02 10:01:52 CEST 2006',
+ accessDate: 'Sun May 24 21:33:48 CEST 2009'
+ }
+ }
+ }
+ }
+ }
+ }
+ };}(),
+
+ //-------------------------------------------------------------------------
+
+ 'joe_clipperz_offline_copy_with_preferences_and_OTPs_data': function () { return {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+ 'f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674': {
+ s: '5f7dca20b7bc610a966ff3611cd8d6bcb5c5782d810123fcadf7155757ea39cd',
+ v: '100000924a0b2bef390c27b2f5f379ab1a557e8b6c2d4ce5ef57e983d5c3ca49b',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"a92c1ab3df0677f63da3cd1fdcec440fe3763e072e1035f8455672a97344a6bd":"0","cdc4624c921b8d99918c3cab5264b5e6de39df30ed167f504bc0a2c612404d5d":"1","6a17bd6b1bd576b99b678dfdac7da04e79402fc542055197017d3e586f6e8f38":"2","9ea260fcadc1ae2bbb8545c32035dc55499f715d005fbec71179600b50aa907a":"3","c0e76e60e08faa3ffa9d859ed869ba3cf3b42becc9478d45ac94cae6c004cc24":"4","5c5fed5764090b8c83435acbc22db01faae889c3154d51d502a3dc532c8709da":"5","97291f9d95cd97d089f940e5a4a674b7c33b06637337d3722010b528ab1fe34a":"6","6b147cfb119d690204cebb33ac047861a74504c87501432d914e07008ff3cc3a":"7","5d2b04a29a8af43562b1e307c416d9590ff55e370d9b542dc1e58c1e30127359":"8","52d2d8c69839e61f07b55c3ef496177e86b9ff35d27ddf4736bbe1907b30227a":"9","de7ce7e545acd2739d5d2d00b04f889fec7acc2229082a7a678ca050e2fdd3a0":"10","44d85d696125c6fa75e791b895359a31fdbdaec3303e286d09a484c0ea4a6558":"11","98af9721614f0d2f03d89ea5eb8930b7f1bee6a55a8e81f0eabe964016a930e3":"12","3c735070f699188a0813489b3fde68e9a7bf25f81d78e98689b81dee364eb013":"13","608adeba618077d125f0b489ef28fc7e3b1ba4fc2baeb01a3a1fc5f568578791":"14","35b30f9e923ce913365815d44cf344ce66cb71b636093b8ec55b8245d13df82b":"15","c742849667f8001483c1e6d3d388ae9d02a2e3561a1be7b1866b62a356b72b91":"16","2b58e7cdf7c90594d330ca9636565dfd1ef2e28bb49d16dae94335450c496b2b":"19","aa5a54aeeb4f7926e4d0b469207812e5384a4e00acfe9248dee45e939dc58b42":"10"},"data":"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"},"directLogins":{"index":{"03251dc1cbc5398789e4c4b45c52cfac3fcd8c1a4f19a81fa68fc6feae31d55c":"0","a48e38845713462ecc9f827149eeaae87da882031f98ef8ebbf9ee9537b63468":"1","9b7a30e667afc9f76ba77600658b2c13bff52432d444261d39bf3d069a160afe":"2","ddbc8d01300a4f10631cbde09e1246332eade3a877a2205209f9eb9e5bc9da0b":"3","24404059cabc63b2dbff0f42ba57183108b8189ef53ab62fa25141a1caea824b":"4","f22dc41ffabef4b3bc8f7af804fec975bd50718098322a673cbe4aaff9464ae1":"5","2df54059e78f5771f23bd285cce19595b38331b73d67020424d9a1b2257db09c":"6","065cd0c270e5e8ce50e4ea8e3828dccdae18c01ab030813d756a87d03fe68784":"7","f695fc36ac56bead80c0d20a88e01e382819c18dc268f1679551b7c83db7cb14":"8","7e1d069b7fa57c03bd7bf48807520feb953157834503aaff8c9d493f37dea69d":"9","cb9ae0bba1957075ccdbfd3b3481704d62087687a2ac7c411a4f07d444bde0f7":"10","61e87fdc4f1d9112e3b30c1f6812d095dcdb24f014c83319091eb6c9899ec348":"11","1f9bfd677b531a03168d3f8bd8afabb5357244a7bc355dff50bd6c0a072114a6":"12","9f7979368fa29f66c44bd97ecaf6c545abc800b1c7bb21b7655a68e1514c3906":"13","989593d4c48929f0c8f1581aa96969c622807e99619ed4732026e967530a68ad":"14","33cf9758477460a8056deef0295a1ebe65b39b392c361ceb920a83edacfe5d78":"15","e9a16316f330e3d150f6ffd194f6fd8acd1426757b097de4b88ca0db875202e4":"16","9fd2929cde3d32d9cbc5f1d787f2f64729a5e12a14410556b31c0c099762c46a":"17","dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496":"18","aa18149164302d5dbe7e2d3724565b9550e00887b49978559783b2e38c625584":"19","6f7bbc4e42ea462b5246e6f51c3f86056bec50601ce2de6067c8c1d26f21c07f":"20","a7b32e72502804bf2946a2a8856139cbbb759c5777e6b3e673db1fdf7e3bd06e":"21"},"data":"7GkGYtsEQH3XPWVOfWYmj46tlUXUTnQ1qGun/RdQAW24SmoFJhHBnqbicLtjyg8jM+//msv/+5iwniJ23KA28qDWsg+IcGvvc4O3MHnN0EE/TtBD/SWG6dgGGq3Fdh8LriLCGDarXQj6U4J8qJ/g6OML4mJunuiCYtsmSGzfa/z8kanpkfFICzfpDedEVly9lgPZyPFgmZmbDxrETaPTCowZHF3EHi3qvDuQOF9/OdBhNQ9Q8U02Fv9RZZJZl36bz4nyg5I8NW6CJi2NPQgWItDpfj5+RQfXTNuNUVCF0NkoOmGh3sf4SnJlFGoNyPFma9ys3qxjp2netfRZXyP7WpNpN9HSv1Ru4pfayxzcdIJ1vbZVxQZ6d4iVjys/TKV6Jmh9n4AJCcwSQh9Ja9QRFcf3Ym47dSlX+8dEOKzv0iYfiqA7Fo3QO6lIjSFOTF11vJjgmnVRypdsIMTGeuTHmwtZ79kJ3W5sm6k9UpLOT0I0R+2SR/yuonY7CRzoKw681KgC5Z1tvv2C8aexRBjOmIc0XG8eUZd1gQp9g8Lpqe0eEaa5j4NZ5YI5r8TGjZlrd3fT6F9F70fNCxIayQSgibePZN52KhYJ9OhVD9QdvBf0eRbkCS1XGax8Qt5fI0ql+jntr/hcc8MPrxoYIkDzpSmFp6TDf6Ml5wQ08e1d3hslJsTyqXyDm2I8Ov2UNuktN/qY5FMdeBz62wZhUA2mYg5cHa/uwVz5ptHTImkP6WChFkOwtLYTExrAGbmgluiKgPL3Z0mycY5H3PIXIAd5x2JI7cOrfHlasn5wzBSJGMfgEaixk7WkkdPSRZ9vF21jdGGFIJ5s7+pmmo74L4vbrTdlmJhIxN8folCAuF4FGPnI+pLkj9D1r801+tpCZ9i7D0c8gz0psutKUtD23CbZ1KQgF93Rhjng3ukHSWL6tnV4Sun6N5OLW5iAt7OcHBD4e5qQcoKwNC8X36jvslqjvBA+seIVGRCfYD+Jau9fytl62m3mF+WYo7fWMLPNSod1szFx9iDxYkvg1lySaXdshl/3RYt/g9J8O2InvS/APITGwmkLPU2g4pfOb1WxkAdvmmVw4vKJ3+7XSs/YepsSeP20btxLl5ExvpvOiwImbDq+wEkHnVjHRqOmJi+3wKrIgrwtsqy6qNcT+diIEupuyd0alTU8MOBD3cb6l7T0wkyrr26qHVWYajbklnZ6FbjRbUIYosQVt9z9iS5+q+f3NvW89+c/v+ZzJLYRpkWLj4EnLFYvrZUXleE9uNptkLDN8baEbWiPeFxm+sTupt0yzJjc+LuPubtgzJqRYch38Onrhedf4ymc4/Nz5ITAKfzKCObw3BhqJV5fIP0OLbc9vajwHisD3pKIzfmdl0Qg+RV6wEepHQ8PnsAPALvqw3AG7f48sm1fYYZ74Z70p2OmFzPzzCFwnXua706KgTLDMmOIe88xnRa9/Cp6xsW/zYonn5M4L6C9MWoQ4sf2prhuz2gpJq7I8PS8DmO+uf2KKSmUUFJtj0jipnU0Auce/TQon/mwKA6qZbEu+2/GlGHbhTdhSBzN6sI9i+bNR15vKlpjx8u8nqKvjHNkpOPjnMIWaBHp/VkaAMKmknxI5/LPavA3dCQYI+nZmOixTMLaDqtIvR7y4uXIlVRuWPsLpZwTGIe/wlk2h/S1pQx4Nx2IOh2T/6rN6i9S/NX3LKjxYzpyuUfp7+ez0mNb5fvBGFjThD/ralg5Szh7oipKI9fIW6Ruafkt76pd9G4mB5bCEAF7IlA/7tZnlay0bo3LvjwtvBORF2XCwyl7ZDqADu+3IPt4suxtC+3vlso2h4KojByzjnHC0GgwJ8SxP5vjF6oS2nIJQOWdAmMqX8D7LwtWHzwp+uDlLHJK5V4M5vLLpFDyJa7lRsPIlm+YDkTUIQZ4Q/QO0QaT7vCTvMA2MncGsqTlJMcavP4mPMCS8hhZkVpvTPJryGlJlhWHkEUh6iyu8I+FBkjg2l4V7tx8M9XQHuQT0MekiYaG0X0BAxfTa0zhEOajwadndHA6VvQQVRtvEmkgklWjgjvgRvjWUMkEav6Cxl6VDau3urtX3egSqm2vcvDdwC7n7UhSGgN7gT6BhyG69zaBVeV2HzeL8yT8TVABN8E+0rQW47Fr3dTFukewE7J7TEvxmJ/Z3mfCBB/SoRnKpxfnLkiFSQX+qvw1t1xYiN6peq+TTDdR2uX8Al8Zfg8vY89dPDRy/rr8fUAvMXTvHkHqhtLAfqGyNNHKXxy4TwGrPHjvFmkjupFXrCRC5WzUXbLahBAe1dKQfN/KEFBhoqvphZ1tcWEY5PEe5v+WphBpPEvtIruSJhXLiqS14SEuu+T6kTlAliqsFAIowpUg01RyPbHwJkKPdDmRZjFtg5/x08aTLjABGlnw3V55GbwGDad0+ctQlj40Llxebij5wb7TVDiwa2NfToEfpOxzXr8sglmbppzXbr+3DuiZBJjP74baxN609UTZaoTEdaf/uS7I6y+8u0yzGxLpQ1U6V/TJKCVQy0coHqLeFvmLPn6GXbjh/U6us83xzFgk6LFLneIHEY+cSyR0tkx559F06gOrfDu1gbPyIiTsvXLlO/ns0yI7KruO0MYtDa4qtaolNb5xKmFOcsDz7q1As7AQxqhMw1Lv"},"preferences":{"data":"pcQa/VkZWvrLv88k/npaOssWdQafXF9zJS+/DjM6MZwsUimSlhedy2pWLvrXp/TJ0ws7Pef1CbVmoxHJYyT1x7Eon7y0qy/cf483h4M="},"oneTimePasswords":{"data":"lyRIfuaIli6Zs4awYtZWI9JgUxQluHa+hxopJ4ADzlXfY7vTv5Iuxtmy1JviMKcGT+xge69tkrDBccydict+biWRPoZFEuR/V7tLMNndQBSdR54usAJ0e+obc6jDM0u38TpyMit0W3f3CL58lV7VkNUQgt6jEclKPxnKLMCqLOTNqoPTDNDMFJdlWVXFVeh+TDG02rarglHzIKd1lox9h/j+Ty4s04vjhISdlE1dNiQ2LqTZ3M2xv2Lg/kH9LBWMryCKmWpMI7IiD+S+eBnyq57EdwrqQi/3p6E34NcuJVJRnLBjnVAMoGkhU/vMg47iLcZXF9obP+oHYUg9mIKO2NNr/OYA7UIQ9lEHXWqs1XZmvnW4ORrzqQNnrXaO5/nWjYO93oG/PLGlJ9G/Tf/zsc2BAp3KJSwILoNS+xWckUydT7gickZqN+JSBXj5W1LZxJ60EY3PBIyE3i37yzho7nP4n30G8kGv5PgSA5BzpKj8/EiPFF3JFJVB5oDcwdeDgvDRsCOGUSMVWcWP1MfDsKHsRkMdGwW8kjFB65/jj3VTGaS5tYtyYVIhr49Mq3I/hUVBk7fcDQQM8DMYqj2EVfDoYAnA0BT+BAFRJ2bfez8Zj/vgW8GOwmsvfaha5YnneYVFg6w8Elw0cwJh3uKGHKCuXwXpe3h9LHSpA8RB95m/dvdoRQg9pg5l2y6oqFlMjBd+3qrpDWG68VZoz7pes0WHMVsNSmJQs+yJ8XfiVnRl27O8/8v4DmhRUb/GhuBSu3pew2YIPVWXEGq9C4nJlZhWAeT1pF49Gv+2bDzRI2R8fJykNXbStn1DO1I6bF01yECRgfzc830T6VBdSbUjpmmMMq67ZS0XVPvO8ZErmQcM6ua0RlttgMdXwNrO0pQ11TKNtGD6k72ud5MYDOYOtgMq5OFdpPc6A/b44mJ1Dim/8j4ETnRM53gl+FU43kbDGBkFu2Q5UGTmza/FctczfHqGEhthyBEE834FDFJeRZSNpGPAvGALGfReifNuc8GtrNyr4X5YxQdcNLHTa8wPAU04M+2gi/tXMsh7AlKbZ6FOEXmHe68A+twG0gcmPG5hEJo2n5L8pAd1eeW+EiYW/26g/oxKgl7p1x6I+fen3rlhcdNkGpUJeGnf1B/Su9wTKeQjobCcQax6RBbdjewLhbCFvSjRjH/9IbWNDgD1sI1xHEh1hKIgSebB1Wqi9pNc4Z8zRsko3/ENscVC7onTyZDu40QRNApD6c6sOLrAgQgUXdIC7Iinwv9MHFLARRmX/f4N+GfFqz5xvfuZtMeQI/H2MNtC1xVT5p+MhBxo02LM03wW9BuXCVDzquX+X5Zvo8hECl2zed/Bnpze7cuyaMFpQLqLnpgOrIzLUWix0ri50+k6SODYj6Fkzjz92COdx1DJCgrGNV/LyalPs+bsmwQQ2SgfxcE9+pWaayRlXB9zSxoZWv9wMX81xpd0fDLpxfLmINKx8G7hSK8YNU6Ldl9fQWM5Num7/NHkiROA57Bnwa8jEoJSejKLxWLzxoyVm6AwJUVFHpBhm/VOoM3lUW7IVyyCQeZP9zeCfmTtHtMDu4FkxNEUr2YppNmaT3CRtOJsLjcbpDqq+b5ls62U62uJ4HXz1ZBwgxfZcHUzU9t/dEr9dCvAiTSfnDhXnqPP4g5G+TGvcfOw+UdkxAOMvvsoYXKO3A6VqJOwrynUJKxSd7I="},"version":"0.1"}',
+ statistics: 'I0/F4RIPSdiZYXN7dF5ceIel',
+ userDetailsVersion: '0.3',
+ records: {
+ '2b58e7cdf7c90594d330ca9636565dfd1ef2e28bb49d16dae94335450c496b2b': {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: 'cf70cadd4ae3e7f658a705ff124ddb24de78083a57bfe4fe2855ae2be2fcf8cf',
+ versions: {
+ 'cf70cadd4ae3e7f658a705ff124ddb24de78083a57bfe4fe2855ae2be2fcf8cf': {
+ header: '####',
+ data: '4VJOhqSOjhTFz/k+JEODmNhY7cCD25PLK7aoD34G4wGzeoVjBxzAJ2NKXG6X3eL8cXG7DjhzI3LV/PiPkYhFf2sVkHbcvAlXBcuQFOZkZcf6PvedC1ZfNh0/QKVWaCmTGrMUP+MEk448fqKfKxJZMi1lUzvMx6VX3bSG5ZQpjt9DtpsPXsbqiz1ujkgwR1a5f1oXgwoWVVcI95yOb3cS9/RPBy9rP95L7reRkzBG8hbyUkZx88yZNC/RgnF68PfgAKlIxAuyMX7V7OuXzHntSxw3FWBGIg2EiWpvAJAUi/mEpZcp+0es29rbHJ0FyuWcW0gbeUsCS0gAyQOj7/VoiWKhG1Zc6qe5cE0F+EA9bLuewGynwX0CV9IDYtoC2IAJXO/HmPF+yeXf1TI84h8l',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '35b30f9e923ce913365815d44cf344ce66cb71b636093b8ec55b8245d13df82b': {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '36a2e190796c4c8bf2340fe6d7f1d032b4ca40eaf42b9ba537e1dd06a638b26a',
+ versions: {
+ '36a2e190796c4c8bf2340fe6d7f1d032b4ca40eaf42b9ba537e1dd06a638b26a': {
+ header: '####',
+ data: 'AA3YiiY3wEYTTnaKKxYsmKqTZDkmG4FoICNWtkJXiEhHzElR5vi1OgMNhm41aRVszrCemeM9kK0we+rMCyFItJ2mLcbsYQRmuuhOqzmp1fCGSoR1x09KpDNug/FndY/UjtAbs9T948zl3TWvdwR9VWOzw8XXxmJg9YTsw5uwhqQXcxdVnQI5akKClcoqz0q2NVp+OdgQnjc+FUE9WeqKY/Bl0MV0l38L07DLcoHZ8OVKPSERnMbcAbN+1C50hp9QfmniBUIoVdAIsNQ4Zuvh+6uo4cRMeWQfKw+DOVAWiIvrpUBSk7pVZWeOoKF/IcUR5Ftem63GIxwZolnhJ+HcTFcNDWkZtb+E3QRZ4A5kxtPZqI1KQwiTkS+mGI/u5zumFtJunrpbe8JgikhV3mA/WD08nZdSxmfg41BmMC8t+0zQ3Jwiirmn/F9a+TIntcwyI/4goY6T4Z/t+vKHVdv7XU+Ma0Oy6swrXB9JLfPF8S8PcM/IlyqnCKkjq1G1eBymMw==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '3c735070f699188a0813489b3fde68e9a7bf25f81d78e98689b81dee364eb013': {
+ data: 'PPAaxPg4YBKa+02+PpnXDHCEEtAbyyPGrpVdLS4DBky0KrUV1J8C3lsCudQLrVNcRdgtXetkLipukMuZ7lOS+qlr1vsF0JyaU33GpMszeCNtOUlWMidZk0SnjHPPGHBXEzmZm6yVfprH79bv8YsoWASyRamubk8kZ2lYefQvl7QYNBQVb01cyprJUVTtm2MttYnfKSKmlN0n80nSpNFZuTyMov1XAlot3iicojBvSvicsYwkKDmJ5bnpuq4kzqonL2UUQ0TDTJ7erf2MkT1/UPdnE3ZRjfsoIEm07+0ORTqrVZJXjmBjSLlxvBRitAcwVs5IWTUEnMF6/bYhCMdWnF9w2oayHjEnKh2L+fA6RQjkjlfYscmv/HfxErYvFvfSRCiu66AotlL9qwBzEooaXENZfPqZVrYKRm92oZDoz8KOm2EHlttnBgjE5w7kRtdDDBIgGsU94bLObSu0UNHERADv9VitYYK5dEU9Myugf9V8aAJbwkxhzZHvYj6KsKhiQtMnaU0FVO1qib0g2tyH4+TlaUUlY3Zo7wjIn3GMVIomgN04Lt/gBp2vq88R8/erqERKdZu4XXl5nATF8w686gedHHIjpObeVyBN6PTNp9enS/rM+sQti5AOKQLx9DgVaoT46iLcg2/UOgIwt2zDdXOccXqBq7PzS+aSzya5Pgpp2H2VH527/PGfR8D4EA/tiNGhUdwPqz1AJz0td2qCWMllJ8GDgme7Bzs8UG/Gd+fWUkngTwRA/CcNAv/1f/SmS9V6RjidkAiNF1D/CGO9rWMOLMr77W3kAOEdQZzxo5tzymx7FgG0Q1xa0fUY8z57UxViBILddU0gArWyppOjAKtP0vw4eDzPFlH77a0TdXKnfB/41arRi5kWl/fX0VZmcjRQuFRS3t3m8Ta9GINaZHo/QAKK0Wjjads4THGjNBOFq/pVfqE3P8EPJZimE9A79dz5crZCiqdflTgAGUdW4razA2jqxcLbbxvXuSaJM2kecddVvayOWO6gVu/xbwbqgk3eETpO6HBbYZq5TzmAOJEZ+XBt+F+wx4EwYTVxNtzV7NDKvooBH5CDtTxfmDIE3b/FXfqIluPLXuzjUaziotJ+IARbY77w61VjjK1xPYPCF52Ovb3d1A0L1SUwfACzMYtG2Vp7rwAa4kUETedwjrZ1rw==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '395eb58606138588dcd7e659065db48775610cc1e90cbd03368c063e02e55c8b',
+ versions: {
+ '395eb58606138588dcd7e659065db48775610cc1e90cbd03368c063e02e55c8b': {
+ header: '####',
+ data: 'HI2+42Qv/BK066PQvkV3a+njq1IJeWZS3XmFYL5Q0G8ZChyeMUz9oCSfLW2fZrDcwTQNKk5Q1YIbK2X9PunUX5+s2eKyta7ZejiAs4A6T+AL9GEIPYnX/OjQx5bHFL1lVWCOhg8dGU73A1ryMEUZnflO17KzhktJENZvh+luEHjN0GIqCBypenDE3gs/A8aPoqba2EcJ5nfazVxwIpiPWhyF4HoJ66pjBdj9gUoIqq079MPVcs8xVdO3LfVOc0rT+pCi9+ei47s2q3rwjhC+osWCYgXdkdcf3TJvOwQPDq5JEtv4vofeHsLV3f0DrBRNb1Rl+Q5VNVJETVv5CGOgT9doysj1ktLA61LVBPKIJnmtVaa3IoNMHvTeEze6kgIsgWaH3t48uynqowx6QeveCQBH',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '44d85d696125c6fa75e791b895359a31fdbdaec3303e286d09a484c0ea4a6558': {
+ data: '5DKtDM4rsjjlFeJ2jznb2yT85d4lhBouKjDGFQ0qkHB1hUaMf+8j7eY0LX4n+IlFYaaol3EfWCbIMrpTDtfCUV5+VWgyA9FunbRHYDyCRZwy28+cJVtWAt7aBUninuQ87LCXDEYqwATDo3+wSW69OOIzqs4dq5bL+SAbX53biquKtb4kDlSgHGHImlpBG+tPYFLVL+fbm7MC3khgVtM7X6fBUhm+g41mAkU+0WUxft9hQJUZl3JH8tSBxhkHxexfekuaoJkFlpxAKR1Mtb16Lo2w+8/3mJ/cDxacjjui0IH2jaZG61JrqJutx2+e+M3xuDpcLeGm9VNEiEDNzeNWhiRP2gojk5liQN7Hhxdl9DpKpRY2s7uMRXeU909vvEWaAcEbF84xf9Y+hgwCGBT0n80VKkHPvGyC9Dnva4HfqIvu4wg0xF2ISEun058kaTy/+BnZu8rRPsc8Y55Q6wbNQvy0npzk82wqsHomrXNNMnoufM3wQjCFt0jIR/UowSBBvtLxIq6fF5PvnqQgwZOliLIM7GAvMvn+Pu/k8Kax73QgIRkbTRW/pOoKIAbvnk216oe1u1+AGqBqWzISgMfux9aWvx2rmk+MZG+S5xdVQzRhhgecpgYzDXCm66FbzKVZCNnCSBtge5VwChrfAGod92RiqgZBpqTe29MwW1vlVils9XBfvDCL9BxMpBYSOOHFilnSwdp8VFPFejFiEg0nJBK63IuUS8wyKtkzsumYJ8WKlLKH/xDtLBPkOnzMzj8s5GowhBfwxatbi5BZII5oEVlSgMlrPUUNf1zExDxIvrDflTMoZQuYTG9SArJ5VIbJrznaBk9LGphrQNH1t/90eQhkCFNdSbLraxxDN9+8qAv4cbbEUUVLXiXO3GN5VZuVZxsvkJ+3RjcsQgg2CldV1B1Cy3iY+sFqtnPChXDItMdZU08BkItB+pStsjaLhja75cw1Qs/I8vdJdo0czWgb6SQPU/UllTxo3CS3t94PgR3nNgXcUYafc5QzjJJ2H59PKiQGdXju7gjLVfe6R3ALysiGJRD4VRQx4fVZKhtnrFBfy+o+4+dMwu1HeW2Kdm+jwXrGWCc0j1qan2d+6G9bj8fLT0hOykuixkFOp8lvublO4JKvrSpSrCcXnE3dxQoFeHIqwI14euka1Waf7D75tXI/leiszCY1WGPyGIV1ezIzgIyRAfLH4RcxWfw+2iaLJANOOhKro4cb/9M6wsNJ91LxpZF+YpsQmUkciDLMafoCvYnmWKq5',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '59b84967035465bdf84c8aab3c43aec6cf60e1e2857e978b205a2cfda7546f28',
+ versions: {
+ '59b84967035465bdf84c8aab3c43aec6cf60e1e2857e978b205a2cfda7546f28': {
+ header: '####',
+ data: 'UukuFiQRHdw4Yp8YoQ5gsdE9ZMOG9T7TwNbEAKMgqTiCmbQlWr7PWnD4myvH1RVFE8D/L8vUXcvfGoUkENRu/amIAPZv4vj/v41COpuahE6Ge7gOeFDr36bxncCAC9QQZYX/PiDX0OmsdrfsCHk0xIDln4yF/QTzOlygOn/G2dtfOaDB6qLs/Qn+dGuQuCIo6H2ACRT+yW684lHziFwch+4USry8IrI6L4OJDOgjHOdPNuv8SKEPYWeeMiIdvPfpWvLR+hgYVCJS8jiBHWDO7F9VbT+ed6w3b27ORcXfYUXlScedXhfxmxZ9sBkEXYVUhlgVpMOUBw24jVNrpkq5wxt4NGEhlfX6L2jdc2nj33hP7mp4Slr/6gGm7No5woXr+abCWZxgdsbj6Yybbhw=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '52d2d8c69839e61f07b55c3ef496177e86b9ff35d27ddf4736bbe1907b30227a': {
+ data: 'XR0Do3w0K649LRGUi/FZZqF3s/cTvWRH/ke8qNXqOUh7xFZWd9cWnboAjFu2dRAwtBDIkdgJU5cfPJZIQdbGw8FnyvilokLgZdNqRqov5p7fQy1Fi27pQSvK5QJAiB3dYTmb6SldpuAqdBHcGp9UGecBzzOycqS9GjsXrrrBF0jKRuHJrs4nR8qkrwlQsa5JVFKbj+kgH3gttd2y4cYaOgj+c0/93co0/ao5hzgPovP5IWRf16dxWCV0p80e9ufvP4b7rpdXABR/tkQ6AgoeHF1asE+a1PPG5MS4dkn4o/+HXLBBzLVY+mMc5vsHCfuP7U74DoIVOjqWmoAmKDEBPGSj2bZELTG4guhAX9hdk1cfNRE2g7fhUXkiAdZASc46ny8Y57qc/duR0p51g0b2lStu+OLkzaGhAl2m+k6rxHGyhZE9o/bkGWEUisR9W558M0mKoAzWBoqRzcau/Z2fOGaAD/qMc7czoOMzvX76gyo6NQx9Go7l8BMXPgGedQMAOOVA1uWco1Es/WBzk+Gp9AsDIGPss1HzXZt/XjC3pvcV/Sfv5M7eyu0puNC3XiwFfZWJgoChd/QkIHicJnZlYTyrpO2nEoHPTbm2AY6UDl58K9+x58voKQnrbrdHF04GVBdtZvHiNEzzSd+4SfQaWql3KdhaAa2LzPM6cIVqREXI3UwPVpDu1XHsiC2I45mQ7/eIT0kSQm7wPlZsT5Fu6EFaHh0lHBa5MML5/EQzYqfosFvwLqxuI9coF3JyQszo5x2sdVfSkm3ChJ5iG5T41k7fa6zQbZeUHM9dLLwx+tCxF+XwoxkBJ3fYSYmmF/7xdr15brIB5Pc7dbBZMPiktn1nc11bE4bgyQOpqr8a7m1tAOT4xK6Relo9FkKubLg+hbUr8+6KPzztiamD9eAGQRopf7e7bVNt43UZIfSmCOGopkfZ0s1AVi396ZUexYJm/OgKWNR0BE8P1kXsSj7Q+swYXZM4QacF3u4sQwhKGu/Dxfj8hBecfnCQoe0oDBQwT6Ep',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: 'd175358ea0b9d32c23e4bceff2020eae9a8459466abc18d4399d988e733fc0f8',
+ versions: {
+ 'd175358ea0b9d32c23e4bceff2020eae9a8459466abc18d4399d988e733fc0f8': {
+ header: '####',
+ data: 'mewISOORFbu2QbxavMOFNOKpVRZTFZ5l9SG1T9Es0eDksCgUj9g1cNqRHC4lrRcp1F1DbXLrANM8Q6fK7m3Aw3yOVKog3+l3n0IeEeOacY2iPy7t4XgUqs1LoenPfqgKwvtG4BK0jnyefbPKEsT6oeh2TkfDtK5n+ofVUieCPqgyc/giAapjhxtKE3nkWVuKfcpUsaeHD8kGPY/rW3TlD+53pQFTdRfRgMGV6GveNo4WND54w+7y0WhwAqow/5vIrsZamUYOGogToklldP06raxY581IhwdogLmobs336YJ1NA4cpwLdkb/GlG1Tjj7Id1DY4mxuD9h4pxwrQJ8ogeexBlLGlHxmxCuX/AtiGeG4a1i8QC/CZKuFtQ+URRbCqtKiGmTEvNWVhlbw1MSZsbU=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '5c5fed5764090b8c83435acbc22db01faae889c3154d51d502a3dc532c8709da': {
+ data: 'uRB9zloy8YqSNEu2S6QgUEznfxgCvfLxQIm7dIxQL8cRRz15WdN1bLjdJkNNr2X0LZn6J59u45pn4MKJo4Lr6p6HB4Sx9f3IjWHjSD5O04PTnddX2rjpQPM0ONFTuOTUf1ETaG3NaOY8AM0nvBBFBQ9hxupGeEVKOY4jkxKqPo4UFD6AEi4e74CMMBnGZbKNPjOLJoMn6c5Lyf2YXMc7stXC6HswINHcMq8zYOuN0qlhj6wllgW7zSQSbeQgz8Xu0RY20K1IxAyzNYq8OdVsNadcOvNFCMFE5BNvoZvKOa5nDGmYqyytXkWVsPHULamBhOUAnrU3tKDAjNWIeUNcI1hCEiVSP7ggsHGZ1PJdHPpSQZH+5/xIPtKtZRZ3J7D91abZHN8XNk0WUC37WhOnIVI+79CIS+t7t9muRH2mBL+v/VIRUWjKdBYS7tTdXPUJOEIregvGc6qX90GC5jt5aYNTj12yJ/AxQdKVP/fmE8klf0ZgRqdp8fNP9IwT8S7/8c7S8TMQPQzfuQ39m3aJiOJrHkQQBbRr+es87P2aMu1is/BTzzbIEGq74sc0GWl7aC2ocjJRogHRQ15NtzGGFuSvP7gbwEp502mJ/2DkKKbY6g0DyTJ+FDe3aTejcW4md/gTYsSTqN1FHO5lg/A2tVrmaAnFFrPvFe7OEIwMbN5Ft22GlGG4GL9L/xXtKTFURdd4uxaAr1xJ6u4m0LnXc1iNs3EQjyVCJxzpW4aubavv1mzGus7fWOB5qMgDH6Oy+BqmrLoQgidy5+6NYvvejrqE2nJgNIEeg2iSrAIly9Md1m0FL93ZlFYIqLdPNn47vvhz8pZAQsLaGyrEvNZzt+67IZ6XUhkbO4NBOt9toJkHW8eMy/go3EBWkE0ZdleXfi75pJjT5gRMPOknSsgpAtB8Y2AcjHvdP9SfrZoOtxtRHJnOyQgwfWcnx+fCxCFPdo7mR2aDRQR5vQFU3+LTwgB7QpCUMZ7EGg4fGexfCKyTfkDzNFRWdBgRV16CV4q7HIIKNYB9dn8mgTldkMjaBIsVFGd8hyvhArWqQdDbDheghNz+uQax3go94gkQ32q5uHC3Wq4uCYkZSMGtGS4xZ1gL+yqjbV3e4Mt0uDbtCucMu9Og/ftPWmw/xWPY2z6L8juU0WsClz1rulvO1zsqJQF7PF2hlvixFrXOzxcDmSRGig4yWszcesgDnu/+bG7X1yVnRjWA6PyfnHW6',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '6fd60c5709a4808444f43f7bbd872363d76703957f613076538ba2f9161206ac',
+ versions: {
+ '6fd60c5709a4808444f43f7bbd872363d76703957f613076538ba2f9161206ac': {
+ header: '####',
+ data: 't8y1iJOn18POJGNiM7JOX59XRrvZDoiDY8SxTnmIRhuqgE6T1FZ56s1ObEMsiyzPoR5OrkQgp1GcT5zDpC1uAtwNRnKUqfe8xmbsoHreq614Nn95vDSpIBCLPqWZYLs5PxAD/M/HIpkdLYBtluFqS8jTPTGGl4Mo7BYJHVEonHN6qgPxzAB5rYZQxGwuGK7m84Hdu05wKnGfwLT49nnR7pzBoSfKgGzYU2PShki6qd36x1T8bFxZCG38lX219pNZ/Ogqu0okqxdNVH9Cib2RWwRdW3a1Z/7PyUoqDCjddEjIi5eS0zqk9JYFFdJQ+VnWlAEkOu/MR2C/Mcf7ESmSlyIfTWkTJAE8T/LY52aPcdJR4CyoIt5LUVchn750UQV26voTKoORkke8uW/aZo/LVoH34CmmNQdH6YVw8IUvqAs16OSUikgk2RFFfI7ca7OGftLJCSwjJT+0bkvLo4jvi6DrLj/OReUbIWEQUmP7cRMURw6tkEP/rpHbkYD8Q7pQR/z4I8nsh14f7/AHU+fHDXZGAczT0ge8FFFinyTVkg/2yBk7jU/zcNwnciSq7Q985bAbmQTP7ZyIErAYvPjk+Sa5VHoGq5kEGYDPTMJ0x1vZ3ev325k0+eEPzX4Pez7LewnNhkDzxx9o1lpHo0wwB8QfkGo0xdVcD5UUFmXVGwRy5Qnr8gb6E4lXKhll6dFx99n4OrMipyNd8it2LzbWVZr/UCoizEhy+3+nI9bg4QBGfULH7uWSM81jyHADRBKWbzAXdxoF+F/lJngLpLrqUliXSIHi5d2GxuJwHd4LeBIjETJ6c4oEEqvSoM+ZNKalTybpVgttN6kZgu5CLI2678nfKYqIro18VqoW507B9Dhzm+34UA/RdMd8PmIlYVgcadi+KknKZiFVlITDidO1vcCh2OVCLQuJshFCyWFZQtthWPupQu6VXOScahFiAA66fA==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '5d2b04a29a8af43562b1e307c416d9590ff55e370d9b542dc1e58c1e30127359': {
+ data: 'a9CEtLuWMZGaIsOUVOpZ8I5u1X1BUdsCkAMDqZpa/xwgIlvFZop/tTGZ7xXqfLuGw8oBgME3odWfSwysYqFlLyLxvvHHFdc5eWEi4ZUUDRMsfl840zFZjXO+GgrLVpQDph7Uvrnsd4X0BUq5WyKDuLwLujZOS00DZRrrEaim5fHUMJFceA==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '5da9ecc65677d03f4f31c0f12f000caa4930394a99af8187c05e74b99c851aa7',
+ versions: {
+ '5da9ecc65677d03f4f31c0f12f000caa4930394a99af8187c05e74b99c851aa7': {
+ header: '####',
+ data: 'CGP/3gax94oP9EMpcFw7ZhWUzIp2DcqDW7CVRblVwQg2UpsWe1K1fvsrzyGC0DTM6yAUXLhSP4T3qyHjb8rrsQCNPr87R1a91xQgWVB+zluCbXH/ZfmQrYd5tY/OEo2e8UosOQL9qieRsDuGbRd/76iIysR/Ce4vGyfYohjKzYepZvq4x+uIwe4uKbzn5YedPqsJ92WTGK5rYIN9fGzPOQMfm8nOkhMLXocEm53Nh5cbBYCw8SGxxDBKRPn3g5z1jLCiOJ5i2KrVQUwIa8LdLPfEBN0FFJEj6Ri8NT9AWzpITZ4xovTomdIdSEvypXYHnkfBw9OWn4KPZIQ8liLtYd6oo3rkkWBZppjaLk5oBkKsxBNSy2gGnh5Eig9HPQYjvwPF7gvG/nunSm0nwkreCMQUzGUd4lLNVdp4dhYErGhsOLb8Rif6BVgxlDccXaIr4Ui5MLrS2vBiO/UmyuYFEduU+7eXuXR0uT6oib5f3cRKFaJNT8IyBiPlvVkEmG3gHZJBXW8yk8fuL2paGC6J5Qp34bkOqDW8BbM0Jf7+CcZURZcW2RpjU1UW9KWX/ga8Z5uNL2282K9C6cZWdw0yeFHsAOitp24xOIJkeyuRnhkpkbGz525htXrzXdwulVSqT4KiZDCVbgMh06k14f67HfYBoJAvLW7thG997HSWQlaxBz40vyjKD83rS1JvJZDLCKTR2VSb5skaAP1ye6CMbsYojZ3Q9/xVdVfW7jQ6nzjT7O2hqhIuIBezJCCvYdZcK2oWY3jW7S497wh/OveqniATyIk5YzIKGteIIhP2lPQ9utTInFzSwQN7LY+pDhCjNT3H8jGZuJFLq08NWTL5AnIS7DEXUITQ10+b9F/DXrM9zt0A2ELKReie/eVeHGGkgrO4ftR3S1RA/X9w4caDjG1vFxGwzFVU+a4TgxnMWwQlaKiCNhm2phgLH9Lxrv8KL6X6Pi/scV3hz+AXvLbiVGMbs1jk0VS5VHV/+Xh58kVcJFhUFl9n+ELDh5byUiOSBfYBaCvUvawkP/OGi+NZeoWckAY9dvvo+Joz8YpA0sQsUDYNNjw9PO++h55HdKOEQYHW0cBR+0PQWgtuARDEcHH8nGHdZd1+0quNJAeUWTKopX+C5cgJ4ST1iPHtnMVYPFQsnZkS7UGS8LVUJbeIYR+b/2rB7H5fzew=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '608adeba618077d125f0b489ef28fc7e3b1ba4fc2baeb01a3a1fc5f568578791': {
+ data: 'Mb51dELDLMqkQbUrpOZOTFvi90inlkadvljkbKY2flQCxQzyb1OwdZhj+quCah8RjXNKUGR2UMieW0whcLLqDM4KcICsPutmHnXgw9oGuFboPKqtznujC3pvZED8+W2sBXpyq/lGWdSM8TAjoMmY3r+VR0W6tYvtpOBYiwBsz8MJfpC6zJLEwzd0ElqnpGUCIZOBMCAUZ5KO1DpHhm/o49mKmSXks9Ilh6drS1E8IWpTrGknqiV48wQjdL+o1H4/40wq93D8rgvEIQczlHz6klMSyk6yWHLMhAuTd4k2ZYFsbCOtW7ixzFN/QNo9faJZ051C5RP6srlPgXSQA4lRwm5qWBSth5GmGmelBYt93d2aYF86z/fkjE4hNTRH1wJdh233dBJfh+3nCf9bdtdBs2b5DjkRTLZ/6kAgfdngti4+e6DiHX3NMA+FK/hbK9VnVr1YQOZSDH8NExthg8oWDK2WhiXUX//I8a+Oc3pR16kZHPJwJVJmhRSnE8DRH/mYO2VqV0rSnM3I+i/4DYiftAl/inLBVTIx4DE87skkywXSmBIgwKoU5ekZNgPwU83VADTVXO2vlwgNlA31mmB9f++z6zNdC4gdPEiPn7imwKRGKl/ofmqY87/nWQGqw13hts0sUmyQW70CCnNTL4aOXVay8LjrCHEbelz4Nx9Fy6Ba3pMEelpsM2wMQzuOkjN3JlmTTVV2yydZ19xDMDf9c8lNq7PsiRepEf8xXcGJtpeWXLVkw9h59G6e1RVmAxid5tS86uwnEs6c8z4idycMpvTpMCUPG/KEqYYQnD59wZEq2Ctr6cOocdPSUQ/HE4/+qY/9/949z59B+mDPVxcRAED/v65ohop1QIekq1BtDbrolf8rhXLFMv3JWZl27mwUr8+DgSLrrI+xk3v8mbASUKrSjp4RqFRB11kLdVC71JJz1RBKBvfKjsfG5cO5nDIS5hVkBJX1hXP9pvHYjyDEgSI2h9DgtZh9xXEDwMKITqI9jpTuGWNJMas1J3Ip46u0PG2aoLU1O6DLRgfutVDTyJBfNHdlkgBxydqsl5Sxhmjy7SPwk3xmxI1D6CLbCJ5ODf6x4CekWrFmF21IWfF/73oWr8+KAa6R14L9iTwnl0ynmo5MVa5IJBdn+Q==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '55ab21a3c8f10df776aaaf923f439b7080d9fcc71b192a51cd0f1e17139a1926',
+ versions: {
+ '55ab21a3c8f10df776aaaf923f439b7080d9fcc71b192a51cd0f1e17139a1926': {
+ header: '####',
+ data: 'nrV954wGGDHVx7+ovlm+4b2zB7TcjxIfXBsMCBUr0LgE8G+zEd5oj3Zc2MvOz9mLaYH/Bu9d0ecN+E5qFeDyRYbVgCH/EVijYemXpXnQH8bCcx4Ek2OeguqkhFNjLubQKRC38rOcWgKDXL3fa8YEyXQpdfWE8g9X1vCshxVOXN4LR0L5bYX2QP0mmoiFOY1Bqr6cYtCAGZNDtfe43Gi53q3FVOnOUhIYy8qrPet1gcdgVbmLs5DufjMdylXd9Q9rUVZCEwzsORAGLAkk7nWNqL9BtYquz6fK5/z4BwRkEztlkIDrhjEwWGjRujbmDD1/5RgKG9Ztbw3LBMkyhabPlYpO6io5545qndV+x+N0YvhECiZdaBr77KUAWVIH3O8EIeAwyvNGKKmTbHox2h5k8nWC',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '6a17bd6b1bd576b99b678dfdac7da04e79402fc542055197017d3e586f6e8f38': {
+ data: 'BNaqOx4gozG6ehd386VaVAqr4Gon3oCztTSRSMdZ/HskNFQfRme+BKhMHljLFq732lVDYW13jEcx2Z3h2PQT3Bm5+v2Ke3aSSlvyIfvIiPUl7PbaaImKg19wnAaZqhxheSwVUHmBIbfhCt7UbTP3imEKl35fXcbYIOrWiea/uOy+xwcIbC9YkkRyrrk4ttFExRuZfnk8L6xfglyY9xlZak2OClqLK91l0xUfz/Ol4ylpQxWhmwiJVMkyL+S3Ild0A+CyuxmekcsgzSyx4OS7X7uc9u1SeWjB/mSAzQh+YsZis2J+hFLavUTzWUYWaKUbHcQjFQLHD3ZEoZEoB8iqY6ogeNIkrV22VVHlcBm4QDEhijApnte7OaE1kXLesCABKiS3tWwymSpLy6TMXx/Md4XSY9A+EvLLgUjkgpHq3ftMQRflNvLYlEfYJYXCoAzo36pHymVp+uIN5BR54BdNr2DbfBHKZtGUGQ5+EcnEhPpvoMnLcf59IK7C99kNJ0fLzEfBO6lvGKfG4WfO8AaVDo8sonaJCCMEdMUDKmNXlBsbZegXWotZLdIbZqN1m9OtEt6ey5PAVqR9nvHL0wHX006P2b1092Rv5fTfaltztpXDsJZNttqWP8U2vkZqYPvSBu3jdCdY4Gkjnea47TzTnPX10EdFcE2r0h1G4ap8mSgiC46j6Wuzj5IhylgL4fbmsPfNvtRQB8jlW5Btf+i13Ed79W8YnzyYbgcF02GR5AFlXBMfvZ1Ve9QETFnSDJNRLcPNNpslNVyQITBlPjfDn3NSgIVdUs0EMDsDIQrMvKHpsWuiXnt0sKrRBJ+MthJh2bD6jSSYB/f71OOWT1t+i/wDZ3gJisRR+KxZiCTt+y4zygjOiUH65BcljjTnEv+XzVci5N/C9SFyT9O0Lxb3/dNSVJLKcpQGCOz4pgM06NFQFePJ2dr8az9pjCWRwuGzhpRsBsqyOufX3QFveABvRDeaEyNWOWuCpnUMaNXy9YdfODWFQa0Snff7tDD/fG0ipAY4s0/fy7IZWd+pvgayBouKlt57JcVU6K3TMvE=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '1b12c771a7f5f13d13f12016ad4132e9707be2ff00d72f77356204f0f86fc08a',
+ versions: {
+ '1b12c771a7f5f13d13f12016ad4132e9707be2ff00d72f77356204f0f86fc08a': {
+ header: '####',
+ data: 'ihfKoU9bJ1HxBWuZ+wyKaK9n8PPx1MJMB6dppZniB5tnfUvnUf9PPA78x3moJRcJ7fVXl/rNHWv9Sqnf3wggFD1iuDFCbxXAY49qrWEdXWFyGM4cihTlWQBYZu+cMWQrdi7dZPUY/lLltKTSRKplyVUmqfG04yd1qCzmiSJtzKUaIySXkQGX6oxoeOMpw3eVaKJjrIgikmjfxE8f43HNpCPG0TYq4CNmvZENZ1z2itRtgIUSdwEaH/xK49ztqxJPrbeXxTBUKIZ/toE79okotm0AysfZdlG35PT9eC/hzttdfBPwqb7auj6J3ttc7DWkFrKWEemw0dHZYL0ut+pdodcvWLLrP1Gyo9aJwfE5heImchRbGal2BTUiyZO9zALdsqjRvMYSyHfxtBUDAggWL6OA',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '6b147cfb119d690204cebb33ac047861a74504c87501432d914e07008ff3cc3a': {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: 'b454ac54afb60c9bb6a1791843aaefadd8483630611c2bbd0ea37658985c62ec',
+ versions: {
+ 'b454ac54afb60c9bb6a1791843aaefadd8483630611c2bbd0ea37658985c62ec': {
+ header: '####',
+ data: 'dn15LeaR9HinK07oo1yVaKS5SgM9SN4jjB5psuvJWV77JPSXYngldFuC16IsKzrkMuRg7MUhdjRuxYxRnTla3FIzWyuwfF5XYHM/AlHMbp/K30yDk12+UtSAEe1r8bUg5ra2KOhZ2pGTxQi57qWKkVkKvnmxeQa/LuggfC8PmlYQpC/8acTPxoy5hiVmHsxO7yoTl5PHrIee88kgLiavSsKRMMHt/zIWoI7liVcPV3xqVBrlAoOgtATNdqfk3YF4N7Wokyx5sDDOlxCXYSoQkHfTNVxL6la+tHcE6pC6OezbwSagB67ysJ7P8ek2kTNfzG+/smdxq+iolTlAbJ//MtdBEDOAlfsc6nXXo8N3OjGNaOActaMP/EiQUD2NT5L/JOQw3zM5lJidNcP3urT3PxQ=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '97291f9d95cd97d089f940e5a4a674b7c33b06637337d3722010b528ab1fe34a': {
+ data: 'JY35iFwT0aSVy9r/b2tHFmaOC/AaNieghwPqz+PzMgu82k1WdeKZzpIZWBf7ku0VXUf1pOYRwUVM7AblkFxlnNT2LZeLZojwIAneSZIBRExaLaRpZqQEdqNYUr6tVayAdgB52ObXBArwrNRMSFkZHicGjjvoOI9WS9G+dhlPaY81yW5yQhmJmu64JebF/c2HljkBj+3hXI4utRggddaDKpOerSw3PHpbJ0dPSeH+EIWG+3cWCO5Z4BVkmm/wQZG8wu7ymWdxE1Njm83XiTSLGxc2YB4Tl72WRe7ekmobFGM1BRzf6VzmBKOFzJb5SBXCi5XdGumv1GgtJEIr2N4zRJMoVDTu9qSzF41mFKbuGaldMuVI1pTsDTWAOFYq9ntuFoNWEGucWOeFZZQQTvwzdAq0LLp8/A3qEc5Xkf6Kge9kkG34kCkVcxAKhuGWjxUVWdmLSAHKNR8hgipKGhLRoUVxJ5kLFvm/7BNXFqsKdZckFzHXfQcemFoPKDcqhuGVrRhPQ2VG4oUJTJ1ZjtQsUwJPHr8LNBvD93gHJetF4DtKwercWBmlPTAx60esw8oilgJJoU/u3SnoRa/zQdJskPjRvn55C6Kbp93GGszhiUNTL+SbyxeZOyfISLj5xyVEXCJwWOynzITQfrU4ReoWUAlhk+LwnAbnJ9rEqVPkjbA9cB+gXj2iM5EDLT9yaiMlNmiPtrq/sh0w/VV70Czgzw+JMZ7efvcTP6Q7jKEEDDF+oaj/x456gjeb1ckkK5dkTVk7AXMFAwfjfIrrPMpC1CEa5h5bwJhpqVe16IU8f7Nb1pnGvd0l8VGUAAavrHXJEePqTkR+vY6I0hriFuXTaMbnCoJW70lW/FQao7SzxOdybymL1pWPs5bVoUaX+zrvBKQr763+dm9gSBhGtpngZ2lQxmO5AjfRuv2rG/SPZsFYhTE4JKJIKEdYT96FOKqgQUQrs1MLppYH4BTqgKwjMUGoTWGJkfF7LfEgbOwly/ZGLIgCD+fk0u9a9DfRB4dIy7wstU6MN48nd5zz6GqLFCrf8wtrN1yEpI1QqjVvNv5bzuugJlnT8WfU6m2ppKBmNlgZVhYc0Va/90ybcvQDLPVVBTnjYydlgE5z86VfMREn3/5+DgsXVXS3QwXuWxjYktYsg2ts0QvzCIMCk62pAx9LVM5tn93lm+RNg1y4EUiDTbF+NqYDCLu5Ea/0GXmaHLYqu9X6z5/jPUq+EgMn52L4WsRyZabiPgxCvXjpntPJdP5XeQ5i4ACOFhUwFFRAxWPWVWv6ecL29f5WoyfXBsPM5HOSa5eXVz89Uk0v58msbf1sxkOjjzSXQOB/hUrkSt5ZlMpVfWye+6uBelHCWWfivMi+S4tveDJgDbssnagE8EDDZxIYuYhYUGfbUjhnvKuChAWw0K91ZtRDESFMpRlgBAFCwxgI2KoDz5yFWNckPA2ki1+VR6Rxd2z2+ihu4uI1qtZdzSC58PHlBFjeZKFzZPABfttlZ6t+qijg88Vo8fLLxakwhb2kJ9Fs3I3zqqnLYfkvfCw0/ZbwC5fH/5Ey9WiIaPJBjW6e6to4NJcy7pEAJVKRsCpfP80D3+LBzoCFGrdMmhwymWvi7xlG8oZPYkJrvhvW46D2apRdqAKJrfLn+oX1fCtkfagH1bJ2o0a9J+ckG4yTtoxBfkxSJ0cCErkQE1xU6ADCd8+p+2Mm1Ls3p31+Ynr8CSGR7+ITZMjMysnIc9J97DrI93Trab1mOp/T9zOM09woCbopg7IYNQxRlcmpH/vZozmGWHBWGHAvl/+ey9FDwG1t9BXf8kYGlwg=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '6cc9ed382347f8ac5b5073f459428897d36cc9913947d003da874dfaee5a7b74',
+ versions: {
+ '6cc9ed382347f8ac5b5073f459428897d36cc9913947d003da874dfaee5a7b74': {
+ header: '####',
+ data: 'a4+XW+nJaw10sl9INOIl+MBO6mRdwmGZUW/BRTvcj/PlpVA0vCE7pT4JgdX3IwrF1JTk2KaGHKqzKGf8ydUiDL0p60R70BiVmQlony3kmi5XNCZ6+Efh+EGtM+4LNQ+2jojnUuF4xKRk729VMV1z7b17SiuQzcHwkecBgYxZ2Swm1SJaia4c0tk46pzsAKVrWVOuadtemhcJvHnYaQ0I2bnUEtct1wYldSI0DPkIuaI/0+xDn9jx1nk/HEu3p6cgMnS2vSN1/9jXYf1cDsrI1+yuO8lFClx34kU2mXCjDgFZGhljkgU1HJfeMufqyJ4bYPQfTL8/5NwFNNhw3HVFsrcWKcbct6bM0Puc5bFA0cSMCVx+61ONXqtkKHy9NPdvl4po3+TOmtXjooSOgQU2hg==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '98af9721614f0d2f03d89ea5eb8930b7f1bee6a55a8e81f0eabe964016a930e3': {
+ data: '0ZJHKdh904kbB848o2+gi5KMfQ5p5c1FeE4PZrZHhIyDl13DnxFFu1vm1t1OI3g89YGQejU0vzT3+d80MoO46ItdAX63V7exVFkZDnkozjL3Pjo0iksDuz1nAHxHGMSoixIKK4WcnvqMWaMdMk8LTCl6EZES3aHaqjZ2ywROgNBj2exGBw==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '2f60193c0fc0e3f2f178955e1c68759675acdf691bcb918cfad329a5a97cfaf3',
+ versions: {
+ '2f60193c0fc0e3f2f178955e1c68759675acdf691bcb918cfad329a5a97cfaf3': {
+ header: '####',
+ data: 'iumHWw8KQNnhFThhMLBzHEJFZ7y53CqAwEn4DVn1PYVKpaMxjtBHa46XDDA3qliCbqLzPzDKllL/7HHJZcxxjyFMY/vV9p6YsZ7F9tVaF1cCQrCWdM52LDnKrmNEH4iT7VzJ96qsro1osgGwKwIucSSi1FkhWOFtOQhESWIS9TVrFo/yQj54z3x6k4juXyeLN5yDrgieypbvN3nsTOCyjIfjpaAw6ztcEOo/8R6/+mKEAej/eVs=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ '9ea260fcadc1ae2bbb8545c32035dc55499f715d005fbec71179600b50aa907a': {
+ data: 'WQE2bjUwhJOc4e1OTFI4xKTDRNIaJ/QS+OGszIo2GxP48UVsjMts3M5TtglFfgUmXPt2B0S4Fw5zALIs1r4o1xfqTuhvlZ62VpzgkMsE9Vl0fQsZawK6a8oKErwAoacZqkdALXGjaOYSP410tAcFIhUvsBmRWZIs02EOV0DMqCe1fYSkNg==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: 'bf8d46022179715d9d27e0a256b56b50828a771c3c6b46fe36fb2982dcb3b4cc',
+ versions: {
+ 'bf8d46022179715d9d27e0a256b56b50828a771c3c6b46fe36fb2982dcb3b4cc': {
+ header: '####',
+ data: 'VsZfs03f+Lm4zyHzyLstuhqWX2f3fDjw56HA1EvhFAPrTK6uM7pvXvseuNGT7oL40wJQWjLuJgDZ56NrXNDfoz4BUNpcrSaJ2bUQS0ZDjmoOODrLM1hFmd/gzsdpx70M/b68BEqVbHCf0Z53TOsLXaFZmAebMvbrLMXkAIYP4wrhbLa7qNaEnj7qUaV/+q9CysfaOKpRomaj3i3F3/kohJL4NdNsZ/N7qzY9/pQHFaZT/GEPvZbiRr5tGb0oJLMG3zsHKrmsZHh3kpHScyfxqWFzm85ZRAEx6eOjXlfAZey8QgZyLVmRsVsDyIRhIePHCuMukRokohDjKwlQi2k6eVXHSaEEAo6jbK2a6LgbbQ1uPNf7ay9WtxaCcGCh9qBZJ7Ndq5g746AN5VzqyUc0swstRFOn9FjB99sAenhpqzo1z0Ddfb3reiUmNuXoETlHlA8SYfb5TCVoHfw7lgV8ikv4nXW7eEAxYeB03VWBuZPFKzlI4k3tWLHGytNThQ3ZGhcH5/Fi4dKRJgtzgWAJdwX1qgP6+Gcu3DDcrzcrIXFWVtsZtFgwvS5acy6hBha1gN/EapZoidoiIIkh',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ 'a92c1ab3df0677f63da3cd1fdcec440fe3763e072e1035f8455672a97344a6bd': {
+ data: 'fGNFj9R5u/KSyYN9BJXdZflva/QVzNmjVFnYxqk+1CP4x91a+szwhppmeZZ4C4448LVLtj4EjcXYdDxjxlt6yJxqOKKrZxmvVWmG7i0UJ9AQlZncPSAd75Oe7MhhDv/bv2MCfPAiwCF9Jjlfl5mWWk9+y2vHvxh8/zB1gJtGlNStCAiEnL2D5Afw5gzrZjOvmgOdqS7U92fulwdSRgwj4zjkqkHj9zmP9KI6qS0lGjpZXbCiyl0FNZKwJYrD+bgyHwc7c6xIYsK/bgpWYkOzHFLjCuV++p8KM4jri0A+xxz/dWEDh2d7hIHBTxjBz4oHlSDmid58wIexj+ffJrMJmOsD1WOvAGqTH+00TYlskOpcHeozhUQRd+TPotI7N0/Dz3y5OD4LQ/p62ELIQ4nICrRXpe6YGUUst7Nel4cPkT8eIlIs582nD5diF+9PtIxLJ2E2BTeyDOgjlNf6QeyjNCMs3mD0mEFFuT1ZBGCuAPHA7Ilzpi9XZ31CSBYYRUb4gpSJaOcM4t9L7bTbxXghXEaPXKQuHdyp5wuV7uqRBJEgM3f/O4+6qXNujORp9PFbxr0+1gnkVEir4krBqllnmzY8MEMmNlNOJ+OeVTtj65Z4wPCannsLSx/7ifYUhF4nWBCH6RqRyRTHiUF+TVvjl0kmgjnbduoDJnFa6blGn5abyiGaddcoEDvE5peika4xHYYaJuh5vW2tuJGEc+E099PmJUbaXWvjGn79tbWYQi2lnSwFWpoIT910WbYMJquZ2pEF0s66+rot6XxVI4TvHbAPDyV/JnAh6yDZlUCgNDzTjYnp0KqWxpvDQPUPe6Himid5Vv8PW4bj9pwboM4KOtVu+1xFQO6W4coEM5rCqYTvAJhaCnxIUQVv3cVexRXDBhqHcVhTrwe71aJdwqk0Z58bMi7Ayl53BclB1Hzc5lh2E4wJdpUD13fQBcjCsVMCq4GZbmzNQQMTvGbiKv8LFtA7j5zBZdxHNX14fijc9hOQqQR9i3G2oqL6R2QEPiIGVxIdeScP88g/ErKsQx/fNH2nG1UVZRdkSeg4IhP649oMItef5m92MttiHsZ5W+ayW26VbKPPjrs6U6t7GK7ROPWoz7YU3FYxoha740Zo4X5Abb8zDc1Gx/Cp91p32b1E0kPmcAK6R4KLB0CEW8y6fV5o9+hd1kBSs5H7fNY8HlM9i6w5WaC/W+UKcY8DPbKsG+G5xTOf3K0f/3lpzIhpZGZEmJhMuzxx3Oxr6Y+G4H+FEgaYBMTzIJ56HMiMa97ipAyN/bqSGRh+H3krrx8I1Um921wFirA9w+aCUXNOz9chfdAHBHilRGW0zYyAc/Jmd3zeM+aIpuphsEt0aANXDmRaqKrEXRGREpm/gozFnatEZlIUwpHfIRpaG+9ivzicPS0R31x/MPyII3pKbgEmDdi3zSCCPVBf1/JFC3HV+XUkKvcfRMIk+wLagh1ECELNcLqg92y9LQizdmLcwA/ZVo8dIQfKhZfQAzXODcXYGMMGxGAF9m39sHjUj+BTs2HpovQSp/iAantJgNT2n3/ptmNYGgrhuj01B1aHCAHxMSEkOI/oNP9+on5dSpHfA67l5/lAtxVmlwcVIzY1ooJDriiR7MfLB1YGfkTwvZNuN6Kw7iVyPoy2j73T7/FOARcrAA2+wplR8EUfmhPhhBaprLu+UnxXRfm54yxc/vOUIJCOhIl9o+ZcUIVvB5dcuC20T27y/QOBb9DGFeUX2jp/UkoAFmyvFeVl2EAtv9kpycbDnUgLI65EQ/IrOteFogzWjgkDwqBBlAdlTRyfTjeJN9DocOsbWYHK1PNV32hhvwdLLs1wzf+E3S/4pb5Ozq7B7zvS710gVSRcUbvw5PtQSYwnn8Ox3fsvXFkfFu590ZVwieJtX9YIqDvjU11JYgIBfI0CliQxh1jeYuKd50CJIdlknpjFB2ncDt0/UNPuZnevO6fgJo96jd4Cq8QOcAC26cb1R81urHOnttiQf7oCeI/vG8MzNdrwBU08d41+zdD0x/wWbbCznSR+uXLKZPqaFXpuiVNXnuaWbnnjncuu4QrSyNeVjZzsEk7p2Ltm9TiWuzif0tIO2MyYd41eci83LgLdxilEFb5uqecwGh3aTchmf8x1l8SaEv//RxV2aODV8C6f66zx1Iv7IRD2y9dokqj9AIzn9oTXCvVi8z9MG36axqzHYU4KUf7w3retPn6QiAB4zL3+TZACoV2ExVj49fIp2yrudwayPKlCBYdF5lV3LPWcSeznPwHWj2INgUo/EYhmZ+8QrCtaH1uOI4I5GmnfCYEvIMKUevgVQEgTnQoW92/QXJdA+BxszBQulL0yFk6nVgaYaRyE6+0Kc+fg3UXXWdJ69dVSzDy1O5FCZHIgnHh3gjWBGMIUoac9CU9rS8XG31WFvUgmvez8jNjlIjVhuScwge/MpCd1KDxF',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 12:59:02 CEST 2009',
+ currentVersion: '88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854',
+ versions: {
+ '88943d709c3ea2442d4f58eaaec6409276037e5a37e0a6d167b9dad9e947e854': {
+ header: '####',
+ data: 'EkK8xSZRZAvE63intN3FTaRKNhNqZbu/5L94kE50wy/OdmBmYk+TVYe5WmrHxrJC+9c8g9Da7vQdH7vbBWwlLpbuPtMUDUxZgBQHdADAxN3OKrTbf0ZXLVgWtm1D/OBgVQCCKiLKPjujFSs5Kp2Azjnm5W9gLnYmktVhRYY8Y7hklX6AMyF/cTw1k2HdmNZ87+YGKZCUcDhDr77a6m5hhknxUXOEXaeKlL/Yn4QudgCJdhtbkxifB2GPl9qal9DOsiFJwg169weucHUy7q64vMFEc9RZbbJTpH7g9qGXELb7VtjaKv7A2N72FOt8WdJux3nsgBrAkZd3oIPAGr2KWSg2bxbJ5MU9Wb/LyTXIJQb5z/0UtF4dlavW2MFKBGg9vIU2fMukOq1YWKwZ1TjG6GmO',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 12:59:02 CEST 2009'
+ }
+ }
+ },
+ 'aa5a54aeeb4f7926e4d0b469207812e5384a4e00acfe9248dee45e939dc58b42': {
+ data: 'cGK0775KN6QUhzU2QD7wFYwTffs1nZ0wd2otvljnUs8q7pzmnA9XFQNkvuqjh0WseVZdqGLfUYrrh2UUhMSpKec0tKEmrNqijP/7LYiSBte0Tlg9OXzIqvdhFEtDO/WC3do4rYnfpc0pJolE+I9J249MrCbSXyQV8hDeD7IRFJ53',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:27:25 CEST 2009',
+ updateDate: 'Thu Jun 04 11:27:25 CEST 2009',
+ accessDate: 'Thu Jun 04 12:55:14 CEST 2009',
+ currentVersion: '64182e6e8c2c3410ee0e30050d0423af5c88c5c53600aac101fafba9debec99f',
+ versions: {
+ '64182e6e8c2c3410ee0e30050d0423af5c88c5c53600aac101fafba9debec99f': {
+ header: '####',
+ data: 'UzVgxfbPpCV4VW8nfK5AtzyKlFUQs1MXW928M0cWqPzQeA9t0+oRS60ZTvDdMjqWzM1Qs0mOhi7wdLdOoZbbT0wUgeU28IMpICZy0Jy+ezjjQxRnC8O5yPQJgg+fNrUbtn5BWMonPVWC2hb1wyEsIJyTBt7i3JsxVsPzQ18M1lyRZBwa2z0QWRZiUF6aacNf2GFXhCkycacNztQVnMlq2f7AXPAF25l9ZQIO5VViBZnbXwIyFbrmP2xJX0Xpp7Sspt3sPwWzg1BpTyjl/P8tDHA0+fe/iPhLGNk2omBko+rPlUwBymvh/t9G4PBNhuHTpEfHW1bGQ5RHGLGLJsBfpNuWALeAfioRakynNpGaCaUhxKOysTyH7BcGyDbh+QxyBkX7ITNRQg0lfNkA1PMRGnREph2g+Tclizgr0eawTstTl1qma4qYKEb2egtyABuvhi/q7ltK55VQOLO51VOY4cJQiwSXnk56FXFEaLS7Kra6zc85xJY1ZP+T9CZmmd1E/W2TMQ==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:27:25 CEST 2009',
+ updateDate: 'Thu Jun 04 11:27:25 CEST 2009',
+ accessDate: 'Thu Jun 04 12:55:14 CEST 2009'
+ }
+ }
+ },
+ 'c0e76e60e08faa3ffa9d859ed869ba3cf3b42becc9478d45ac94cae6c004cc24': {
+ data: 'yEGo5WUC1jnPQRqAmksQH5Ph0ChNdS58uolzBds2+KFBNZinqbzr8OQgBax4/zN+lqLJkvHbsV9/dhPzCfGHV0Q3q6VwZt6R7n8b4V0F+IYvq1sbv3THahwk7icZcrJi9TjaAKp2w9IBJ/uf+rWoZKegmZXnF8cjq10btOk5JVkVVSaKb2c/v3CLYYz74PEb4ImMVSzNxWTy44w+YOIWpL4IMaq2nWpULIkulV0UAZLOudf38cEu9Zb6T9yGZPrACSjlANW1UhtfH5KosUMhMRlbyAWDD/CTF58Smkf/u7kzyCH8E/W7BE1C89GhWjaMwQq2VAubJ9VAE2CAJG1ax23/ZXoUgk4oK7ReY+J0QbyuHnJDIN2FhRLZt08MD0TujA4xyg/Hp9S6F8cd2hV+BFVIAb2/jXCH2OqvQ4pq93DWF375P63uC7/uz3j7+jYXOmggtfd0IX+d7uSG9V7FX064dl7xJzggSwnkBXAsuSwiQjFDB+jPpTY2k/F5+UgIVEzdR4CPMmaEc+Ied16XVTr6nXzqK1zLRwmCbeCL1ZrahmZqhqJQsV0Z66wQS6pBr6dA9YSkTCzH3lgBg/YSmNeKaaPmwD1oSoqVwkzHigdUO8lwzyvuMqZZdk42KVO/QPC8ex92dvzwvSoeW7EVNzP5fSymd6pmO3d7sdWCnzEQCWP5ADfZBrH3YH1oLY9UzaBGiLLemM3TBZfBZ3u7k68y5QnCfuHtL4Y+IEcgtOUtAe/XErIaSZjjwfw8mfrPjQ95XA3841UYNCtoLMPTGR3rRSj/Jluh6MHJc7CpTOgcgbi5VKqOIrHL88Qs1tNK3wBA8u6RhIG6B0I4lfPTE7Jq+FYDyoeNf2qGqd10XnwHi0GSoCisi4NFawaric7GmVMuQOJsJK2HVFJ5W6e+IhShN4uWQmlFpyifOd+91tMrJ7uovviHkJwcg5ROVTk5yiihGByRUmFVU0W1Azb/CWiQp3QiFKSyHq+uQKUR9gPN1WpaYupSnp4+1tJclgdeMwsQeE40qFxQbBDZynqWeSFovPHXxhiu7xjkLGHlF0QJGMXaMca0RIr9XiQKSlQ6FrzpKnFzmOPh0LnUDhd8FGuMPgHhZ8L79Utablh9GtrJd1kWzSiUKpIQoZm78Sbls9wyc1LHK6eUAYwB6A==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: 'a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463',
+ versions: {
+ 'a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463': {
+ header: '####',
+ data: 'k7I09dmz+LypgSeYrYH3JQGD5Mikr1YV58akOGEn2Kmi3t3n2ngvDB1+cv9hjREPUiGIi50ZQJQw5pt6eY6jOD4aCgGjBqHYNS5gfbaW9dHhjXRPu2e3yhMm+YIlAaF005zecnB67RD7POLfhRx6qjLtqktUt4mAotz3ts/nUmHW45psLPLVBlpmeTNAaSz3nXubkoyfpGrotGGEQCndB57L5Z2popMAdEhT2mVQqzzpasOQnp4PJVf+1vfrQ/9AP6ublijutHn1Oj/HsBmrwE2YQpj2wpZlGAFdghKBgtrvLMk7dsIdDuK0MIQoDmgNPwgiF5NNmG3hoNhS/WNls7uozBNMYFa+W8IzP3e442zJINdGs9zDpEVWZfC35OX4F6QKGSeoHDBkpB7aWAXfnkKz9owt+8OEVEQ=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ 'c742849667f8001483c1e6d3d388ae9d02a2e3561a1be7b1866b62a356b72b91': {
+ data: 'sk0Rq438xMuzxfEwjPhlg1WxN7Hyrs6VW0wFLQBB3m/tNK9DsHpswq2eMRqKv1S1q/MFTyx7/Q8YVxRMkqKWIgUQRe0g/arWR3iHP09t5JMFIEqxIbCSotukZBgy5aXlG1WMnEsT+tIqrmJZzpOUy768JpkJjJxdr2dlGeCUJbO4bitAySOvpUoRlCb2/a6D5Cib4NU3fjzrW+TZyQB7WpspAfxxyg2zTU43D74OAJR/wy7K3Tp7hOl9cXmUoHvM3vp52ENvPdZmy6wAbz5d5Iu8KL1mxwGbl0pxx7dDecbMJOO/OjHwH2/me+DhyVTmv5smb37X90fwZRt61mn3A66ECsp3nq6pRZaaS+U9WRC1UAVifc6T4DWqrrma8D1BGnLeR9lQxJj7Jm4foKvnWqSeurdRNOyZ38XK5SBSZd/FEalS0UwawX/5qJhwdK2pQRvrTyDDrXRSNj3ssuB+3YX6l0lxacUO29wFjmkh2WljCkDBYPNKOVRLBLUtgQ1pWKciy8BlH4GsqdjvkcQorRgfgS5L0Ce2bHWbBsy5X2LReW6Ugst2wt7Q4xS75P1qF7202s89jQVQritexaUwbCibrZ0GFZFfwnDT+JjKiNiB0WvDBO9tdbqzCA7T62+wUOtCX40tQc6+4mBQkkU+mi6PfsInGiafKctrp1d7GMQHJWQHIJhx2LUvyqPxOa0hE2vqCSJUZmNVD1KzMYGguPtHbuHHaWXc1cNTjQuuTyXDuewBl4NnTgTki43J/lVt0VLuoLIEQx58y1rMTVDTiEufA62mmLxokLYyt6VLb+OeprhuYiU0PhkgkDjRstSnRE4B5JsvFcPdYENYJwRYbC8Ho/rnAvfBdGlYw0TGS0MFcd54JoXiE+oVVRDuYTVfm9ytGYkG45Z5uX0D3Qm+KZhGAd2gQ+NX6umxy0v7RHwqtUjSqI4U0SOiVRNdwFesQRFAzZDtr1tKNf56ACLt/yXl1GywrHljtr4BlQ0Nym3upNweQZyO19O3kaQmtbTbp1Tg+xewXr2MZ2U2QQRNrCzVeqe29eHU9133xo+97NxGi/HDZ5tr5aUTB+OXqnoIzSeqyHLIv4t6r8D29+MTfZsf4sNC7vNlpO8+GLYr/0S5md9Z/zlx/2iPeAPnNkf95gkav+6U8F3nL1Ok8MUG6drGrduKyv30CGDEwWJqcDFJqOZjs8reCst6S1ijRhwm93fqkg+nzqw8mZYeltSbTXFmpypD20Ravw2JdJUyo3umyZiyPaL9UsCFSf/ssO47C1HTN+OkRtMcTAyKEqhzvUei/JHaOvRhmMCam65+gKuoCwy/x7Si/oRrQ8lZkF8=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: 'e85f085a8ed42d2def7adc796b66a2e0a4c3c88d9f3e785eb12a6f5619d945c5',
+ versions: {
+ 'e85f085a8ed42d2def7adc796b66a2e0a4c3c88d9f3e785eb12a6f5619d945c5': {
+ header: '####',
+ data: 'bGK0B/s932NBepXEWJJC9i15cPn1iy44m2xFxohFQ1r2Wz4dKsy1JowXHssezfU29ge34tx7PqbJM+o6ExNVkgufb0tynMeQAyPcoV7jSnxCqBUfupTWndRq6YHkG9xdsLLrrbmmRwV7fIr8Xu6PGUbCs23sDFW25tiLDtps9VqFNb8jBQ4ms56rjtDVsL/VqBBI0koojN/e9JZr0/3Wv90a1qn3Uz0hRJnryCPuoDBmcLFdlNcd0W8I/8SGJa/94V2S4QOJD0KqP1+/jYA6p054V/tRnDlFdkV5G8vm0XqI1t5cehSV/2Prq3fGj2UaAs25C2WU0xAHPKJErzy214WztzCd9vqINx+DtPEewS0QcVvnqnC4kBMhGWKUqkJBySSQ0nHvkJrBOjeratc=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ 'cdc4624c921b8d99918c3cab5264b5e6de39df30ed167f504bc0a2c612404d5d': {
+ data: 'MVUf8enllOr1nuCWegNFBnC0YrydNpddm5VZzlT/xJY1YvqIcYnr9HKk4i55TIdA5zjcf5TqUdwBUJ+LbsaGA3CH9YBz6AqAxt0mQeTaS8ufyXDzxHthmTKcsKjPEuJ+1R288jz2D7Lc24+YDNrAySXWg2i3+mJNIFU/Sg7+rLiGpcvB1go4zlh0rsZbM7AnIcCRM5GQLVxtVn15xC4fDZ3rQDu2A3GNB0+RFB4xZlGFIidr5ZmUc+3/0eSdMWb57xRdCaxESjWQbGkDF6OpsozPVuXEqd7K/6RnHAjVsTWvLGtCGttznrCcaXquy1xwUr2LGnqLSu/+Jp7hnZhkGGrFxMFui8WyiVhpTxr1YkB8X/S8lTvsgsUg96PGgVlWK0XeW0GvWgo+v+6RyX4mChoTO5lzIUQuTivve8OH9RHY8YwUJeiY+Pg5ih4TpsGULQRZBIXrmWGdBA8euFSu/mPYuBZ6j0+wD5monR7pvrIf3kEQx2g0N8tdKmN0W8iYV80ONMWqwP2rnbBYHbHE8cljP624xO4fXWoMYlufyCmQp5Y7f7ugw7kWO1gYsMgY0e1pZ28U2RQsTFNLXuLgbeOPz8bpsm0lTFec+WwZ/yMTXFfaz+hFKc60sUADKO6ax24pnUId9+ih4J1DBT9IfUadXcqKN76nVWl7/iApOu/F9kMLK8AtxpSpTDVEZTcS2RhdyvVisx2vqDR34JSP4Ju7qaLIxOlMrc9DVTrz/yMzqwjjefS+w9IJvuwz2ikCW/m6PesRwTao4K0TONJE0aX0xQ19NfYJbNU9Xfs4IFyr8c755UeUA8dK15P7hgf3E6A+pBTj79a3B2SfKh16jOukNsdAVbZkJcc8m0ABR1azzNY/zr8MnHjpZuhhFFnqtxoQYi2si4Gln6Qh0uLwTN4557Igh2W0WcZKSAo2wqfgTx7iRkXz2J1BAbdaN1wmgLZKfljq14H+YGOiqhHndM3UV5VCez1tpA5eHDZyEtMIyalMbTvGRoQ2b0dC4idO4Ec9CoeYwjRZLS6wGG63N8RBdOK1RQeW6hbOrgJIQiGyZ7e34OAi7kSwC65f0Q7SOdg1JJVLgUPh9vfCkFyGEF5OFUNDR+C7Whosvvuijl4hKurZj1KzxoZIAl1IY7C+GiAL0FmaTqEiQVjjz0xf4UHqKw0qEwCqXosbhuwzhmV0EtfNRbWEj5yOt9MyXnIdEAgmer+uEP6OYJTtPx1M16KFl4r9BZ+2h7NdAkrBbkuhiq0VZvBifkinOwe/P6zo6mI0NVmLAWrAO8ZaldY2Ih/Px75C6g2u/zA+2U8k6283cQFt+E0b2qNdUcqR6sxz7gu5Ym6Ssf3+8x7KHrlsXoClcuuv2MO6De7GhRbf7+fC4IlMuw4YwRS0MIFg+nVMV4xyCAVn8z5jl0yngSt2wjdrLooDa2IRKIpxhSreVdsttCtiN0pq4ws+QTsg7PTUf3zAgVoIfuC7CuTr0fCEtYpZxhey7cuvhwtbdcANAc23OoedjS3o2z0vy9/dnEA93vbVmJ7cTztPOZA6kKKfhaWBMZDzoNbkLU7ebzqv5bpgY1/aKYLVJxUST34ZiWigna8nfBS8nnR6N0nKpslE4uPv1oQgSGTtl3A7e+xX8htlIzDxLIblQjZcZgdtZVRSmUW5/NLraF6Fceo+FZcgxiO7+0h5ychXL+HkT81DCbRMchmTOA==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ currentVersion: '335e2fc3f76b3db69d7575194a8313bc3ad031d441b6f2f81cecba6d3d630130',
+ versions: {
+ '335e2fc3f76b3db69d7575194a8313bc3ad031d441b6f2f81cecba6d3d630130': {
+ header: '####',
+ data: 'wRPWbH+Dw3y0DuWz0YDL/e5zTQukx6++cLlCY/0Fp1J2qZS6i6/CLhQrZdOLtXfEhgzkxQygcYGMCyz8wDILafKNIAoS2BcuNi9RbbA9tKXDeqINcnYdzA2NDWj1tQDoNU+/KssWdkI0VFSr+A/EpLMfa+Kqw4SMqNVbeEAUT2Nkyas+eyRVu2iLNV0bFzxzbXvHu0XK7rqL1Tj1OxY25vvA/tVRI4jlzI/rcQZrfVB/BTqzEymFel4hDLu9d4UmZn6H8gubyAU5IiK1Jf6B8nZnNhs0JKUPEYwSXPk9tAupRjQxsac2XPyUQXkemT7TgZdFuzLYQxOAtUmYHhXyigzJRDRY4KPDJwcHq5bCw4OwBNzjhCm0uCQLmRpDIauPVf6EGNs0vorkdOW758bmUjMM4fwlULIocKfhreJrGiGbXTNW80h6SljKzXdlFZAYTSdsjmACL37xkgMJI93faHuGMQ3HuVqXuuebIV8Yg7dSZdWsEus/cQPnOXvVok9qwJ1L+wJs0darskaEN9CGOEAjky9iVoRLuKepjPWrSorvEitedjErBntX0ErI9JDTCdke2jO/2e97fGlrU9++k7T8RRScpxBKmXVHnYpqiesX4KtORnGQFrV0tHgoSiD+Q9YwBj3KSRdFh2eZ0t72ejqehhuR69AZqC9KvY2b7O4PDG//emeXLXMXuVcBawZGgwpOCeu0YunjdgcASADRPVTh0x6IGP6GQ50LoiG5hhiA4z8PRqJ+twcvZ8yJr7AOOTjyMyi00nXPG0OAG5Xg1sTzXtqTwj/xVWbzUEMFt0nxMSp+EVD/Zo7+bdDY20FKz82y2DabKFGAcmjuLTmmS1RaLExvtsZcB5QihhTEwEUSI6a094udE2n1dCz5ZA408BCMi78aHFna+pg8xLEJHLcLZ2XJigkF8r98XeA4fFjWUhfYEhIjclG2pIaSBaXqRT5QA/ziMe4OBTLKTHIp7K0=',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:22:56 CEST 2009'
+ }
+ }
+ },
+ 'de7ce7e545acd2739d5d2d00b04f889fec7acc2229082a7a678ca050e2fdd3a0': {
+ data: 'l5j1yk5VXiXb+81T15uzjSwhxBdsAQ/JG73GNCGulKTA64NmN5SMxDL5gNV5AApu+p9AKKOThZNER9wQgDt05svLWN248YROu7PTsBJpHZYLt2JKlRDO/SOWHAhWkmHrufDs6omk8TpxVbIibsE9Whp4CjkAneGFpvzIJcdZDyWfsaFXKs/gC6O6mxYgU6dBtvMemorXCgSEwL/B3NF6OkudADJUZTIha7mjxa2eWQo901kwD2EKSvVyokcMdok7FyR4cXfs9K0TSOOYK4eQWrqE6wnt3Ab8OSO9oAdCFIUB/WUES3dF7zshLNFG4uh3G5NbTHYBoOrUY4rYOzx6gXWKgv+AiqsUYQGIphPm7GSs85s0eb9IiLNb0rQnrkX/Qeqorg3EIe0aRnWmAWtRWb61vClo1lLIJFWXbK/6DSecAfWrQmD0ExbJZbNQ6WjtVg7fSOul/VGOrbiG0QysCJI/D6Pt5nQcKf7Ooze67CsrYOnmF5oU6BPZHuyNPsaAFZR5TOZMlB1JASkk/dS5W9vgX02+xEYzT14ZLqTlMsgX5ibw69xxdrTcqsbHcfbGVn98FZMNHPhP+XP+ED8XllDomt1oUZEXU2cZg/s5QLFTYKbQIu2j8xgaDMmpAyzIKQtenpf4G0VMVa1T9lVApqmw+ILC31kOWwlEknQhey1ZMowCbfLMw9ipozGyNvG8QOoDQCyJ0nQJ7OBI0m4BDXJXIj3kz6LDrH2KJYu63JFaxGNFhbNDoMNhTdLyD7cBUps1++CgKNxcSezY2sWR6YS7OBW2wvy/X5yKIOtWg57I4vvcFQCs04EanIuViPik2CRbTSAUIiRvi8sbnqXYNT1PpBIPiQJvIbi8NSjrpTjPlEL5MJnIdjX6mjXbiwp4qWh129MvMZzF+Bann4BlJQwwGhba/X9d0K7pyOIQ605W1PeOjgzSPXE02wcemgF/tvFXSDtO4LOfiSCC04OkMtGTwcG5yMOzU3rhu64LdDknruYjTZ3W3AJitWixDj/ZEeseUCQbaJjMX8wsBFrPqbTWaC9MsztY0qM0w4o3lD35k0D3whK7zdfb0i1rgw4TRG+UaAy4iv/jxB9orqjS4CULzPDXZygYopwxRJowF4Sm2u8uk9/NEsuJcDmfHOh25UTnMO1HGSNRZt8lnA==',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:31:01 CEST 2009',
+ currentVersion: '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3',
+ versions: {
+ '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3': {
+ header: '####',
+ data: 'zC2F75+cfQZXWJ5EquBKnCHqS1TekPWp4Z1KXd4166/CY7tcxfEzPtI/6QqkSdfPYesPgea8G5vOhTzd8yL6nIL0ksE7dTGLXx38wZTXrOftuiHKuxW2HLGE02WRtwWgvgc0v4nkG4mm7LIwX5XFSygGmG3fKfPwfLaRhayD4Jsf15r/zWmU6meVCvR3VAYvHgNqIeEOhzhVN/ZMZSZ3fb64CyDa8wc9KZpmbjg6s+x+80sriotYwYTq3CwiHqQyZOZDm3P7rhhbqy3EhyH5aTfroSBWgra3HuCzXAGFFog3S1zl+a1Mr2ZlmC/RxCiMVcHVQ9CluNU4fITebcxE3VdbcgcOzdY3O7U7cWFaCahk5y/momzFVstPsPQBhXfX6p3ofUTuHh1jj2OIRcvrWgYb',
+ version: '0.3',
+ creationDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ updateDate: 'Thu Jun 04 11:22:56 CEST 2009',
+ accessDate: 'Thu Jun 04 11:31:01 CEST 2009'
+ }
+ }
+ }
+ }
+ }
+ }
+ };}(),
+
+ //-------------------------------------------------------------------------
+
+ 'joe_clipperz_offline_copy_with_multipleRecordVersions_data': function () { return {
+ users:{
+ 'catchAllUser': function () { return {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ }; }(),
+ 'f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674': function () { return {
+ s: '95ae437caee9bfc2a2d716291c2d4bc7b6412072df45a1403182d65ab62818ad',
+ v: '30cb1d4c26a4b93f9303685f2f08d32a109411044a1251ae3cf82e6032d18c0f',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"2977aa5f99a9f6e5596c1bd7871e82d7328c3716c9ef8ba349ae65f10d97924e":"0","5931d708fcdd39af284d4809135393c81210a10b0e9d56b49b2f2a3b8adc9394":"1","0bfcbd6662f3771f114295df779a4e4535e8e666842c2336da1b095ca1def657":"2","2eff872ebb19c0f8430518847dafc819c0bf7e0cb714b456d74603c250f2efbf":"3","983f262760a45171a8dbaad13a7c87b8a3dd267d1cdba7850b07e58af0460378":"4","f8141d3cd5cf93f3ade420838f98e4bd0e5206d202b45a24822afc9099827c17":"5","25bc43a5f1aa780304bec9cf0cd61502f82243053b5f72a55712525b0b8290e3":"6","5ea084cfa5ce8198528f466e160862b4f17d0a4f63d3af45518c96413d16fe69":"7","b81f9a1d9267daf4afb786e8d477c15aa3e1babc59b8ba09bceddc700116ab0e":"8","d8568a483a8f443190ba723b391960554962760cd886b2484f2698816beec530":"9","42c7a17479baf21938c87af38ccc3ceb3aec21535c644f6c90496f89008f7828":"10","63e20b19028b7dd1465cdeeed60ca75b5f5508cd01601937ae8b0d1f981057fc":"11","7cda06249cfb102884a133952770b85d5442f8049db132d66f761deb765156bf":"12","166d907e97005cbb29efd1841757f7d1a57210ddb32605ccb6841f35f72399a6":"13","350a8d666e033ec01e203e0b6df730bec53124f9ab25f7942bd9378e4b5c01f6":"14","a0d5d8796793035d1b109654c68d34b94e2aa64b5f76d50f01d9a18ab1cdfd5a":"15","91dee4945d6660e7c0db77b72fd2eed3372a46545da1c1e5600a80efd554977d":"16"},"data":"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"},"directLogins":{"index":{"03251dc1cbc5398789e4c4b45c52cfac3fcd8c1a4f19a81fa68fc6feae31d55c":"0","a48e38845713462ecc9f827149eeaae87da882031f98ef8ebbf9ee9537b63468":"1","9b7a30e667afc9f76ba77600658b2c13bff52432d444261d39bf3d069a160afe":"2","ddbc8d01300a4f10631cbde09e1246332eade3a877a2205209f9eb9e5bc9da0b":"3","f22dc41ffabef4b3bc8f7af804fec975bd50718098322a673cbe4aaff9464ae1":"4","2df54059e78f5771f23bd285cce19595b38331b73d67020424d9a1b2257db09c":"5","065cd0c270e5e8ce50e4ea8e3828dccdae18c01ab030813d756a87d03fe68784":"6","f695fc36ac56bead80c0d20a88e01e382819c18dc268f1679551b7c83db7cb14":"7","7e1d069b7fa57c03bd7bf48807520feb953157834503aaff8c9d493f37dea69d":"8","cb9ae0bba1957075ccdbfd3b3481704d62087687a2ac7c411a4f07d444bde0f7":"9","61e87fdc4f1d9112e3b30c1f6812d095dcdb24f014c83319091eb6c9899ec348":"10","1f9bfd677b531a03168d3f8bd8afabb5357244a7bc355dff50bd6c0a072114a6":"11","9f7979368fa29f66c44bd97ecaf6c545abc800b1c7bb21b7655a68e1514c3906":"12","989593d4c48929f0c8f1581aa96969c622807e99619ed4732026e967530a68ad":"13","33cf9758477460a8056deef0295a1ebe65b39b392c361ceb920a83edacfe5d78":"14","e9a16316f330e3d150f6ffd194f6fd8acd1426757b097de4b88ca0db875202e4":"15","9fd2929cde3d32d9cbc5f1d787f2f64729a5e12a14410556b31c0c099762c46a":"16","dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496":"17","aa18149164302d5dbe7e2d3724565b9550e00887b49978559783b2e38c625584":"18","6f7bbc4e42ea462b5246e6f51c3f86056bec50601ce2de6067c8c1d26f21c07f":"19","a7b32e72502804bf2946a2a8856139cbbb759c5777e6b3e673db1fdf7e3bd06e":"20"},"data":"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"},"preferences":{"data":"XHFpIEPRLRjziGOHhPV+FN/EWsxs74xco1JuUAfNC/6frao+PCn03q/K5Znk9mN9sQ=="},"oneTimePasswords":{"data":"GEy1evbARX4ibdMDLRHCU2WMCian6ATOcGaw4HvRGCKyKt2Gox9ZCGZ1vzaM26PqovwcUJ30xvamvtj61Mp+VZB71YJ25irL3eGiqHplx6V3sf6rCx7EzJBPjykzemuRTI5AgRf7mkVhNz2qPeBtw+Xsm33I4cK70ST7ybh8EKjok5UZOgV86EKSxv97NeEsfhkumSzfRQ7zGkT9vjGfDelPUss2QL9uhjNvm/WvabX7YVHWM1qMgxsCCi+Jzyjl9kNTt0x3G66xUFNk+Mp9GgQcz24S8HRJj0S5b9F4YRhLdUwI8y0CHk4uNPaa6VmWpwLCMEcmdT64uatmCrC/CdLrVp3UasDMGPSqic/yF7R8PR4jrvee3SuIf/NtltRUQU5JT+6wwLYwdR0LEMrOHpXZMg/Hf4V0UQxdNdH4yKOe8H00bbg1DITIL5aILVu3yGFgxlrCBTPW0OL+ql8TQukEHZ4PdnRvYWKzm18x+mmPBi5enizxoO4Us+dYshXzvOoWIJ0VFcstDZxBJSvrcWySsxMtWe37DrGD0TfFGTDj3Gd5t8nPYu4JzBOaESSp9WKtKdw31uh7wynAeuGh61LqHRWS9S5ax1C4atdYHma5Qcjk6QwLtBn+MCDOnJqvAW60YW2V+bGptOz9/nQO+cUASkTQ1uOQ87z5+3CXIsDbNk9T4gEbPqdWS8/SiyHkqarIrVkFMCqncTqzaU5wZ9l2sX29QZqJSt/NYTYPyhTbKQ8gKQOVSqXPONewMdSOsP3+4m2+JPbGUcfj+cWBdQGwoHmLlg65Oa3lWLP0s7yjpzN5Tg/M0h6qhmWT3t/6pD5JbFA6fp8HYzRvo9DC7G1KhRd6uvYUTXkzOKzxRuEzUMciV+dvfY7c5yFEnk4VrM5ssMZ5+CGGgngFG6Ab6epTn6PNmW5HTS9WoEpuwqoNnAPq1Bvv0kSK03EwdrgTW73e5Bw0xTOfSMaIWMZrORwuEf9Eus3znkT0n7pEQhpStP921M4wxT1rO4EGGXHgt/4o0OXoJfF+lgHHl95ZmPJAwxxvwH+sfGlmp6PTycyPsox50GNmkEuwSLwPLEra75YEEVQSvOSM9Wua3ed9J6LkySXd89IjNA432m2qFTXzsqX65/Yi/88CcwDt+mYfSuvkh5aSLbLtNNteXv2BirNq6QRWN4P4CA84czBnZUug6HuDHsIR/Hl0X5Eip6+7tESxitT98sftTry9b5VmxHRih8maSfrGjWCqH7Gkax3i4aQE5ErKwxgGzP7PxrWWmJeJXOlSzWXM/+iGszgHcl0bqorMvWBJGdaSQT4TyOoaeyK1UWZnsJyw4KSZJP1wEGIYAWOs1lnWiT4wrqIR1jdZBRGk1fKQ9qRwLrKzPOMeNvHLBIFkbDdAVYY4ScotmNXqSs9dWLqHfg5SkE1fAg=="},"version":"0.1"}',
+ statistics: 'm+j5iQXSMKvijTYJU5v7iNLF',
+ userDetailsVersion: '0.3',
+ records: {
+ '0bfcbd6662f3771f114295df779a4e4535e8e666842c2336da1b095ca1def657': function () { return {
+ data: 'u49WrgrQIWQsB/ly5AQAmi/RixI2rGkp0JZh9DlBxgTLOhQ35lNVa9ko39zxAXqNC9ZGD/OiQz6kVT7XAA/anrfctPOTIeXEeQrTQTwlHBZ+9c4zq1ZDNP1rm00v8sr/dYpqJmpQzEko5qdaPakxMe+gag6FGdN/FbVPBbn0uVSkpiIZSNpiWEQ0uHjHN0QqfrGTQ6Yl2UeNoe9P019XTDtfaupDZwh2+DL1i+s0UrZqa6JHyXLnsD9Ue1S4muyFtptJjasNPjzSfs+BHhQj8pIpZWEEVhH16Bb3fKlr6crRktEau9uAtEE5bZbPXTDrPi59JdMYmD5CH5ftDxz4nIPuI6Y553s5T6AejfbFIX3QzMG+isJ4SDebElDCQDNBsmavojxjegZ2GG1M/xXQ8Cw6pELlJBYPidfEJaSjb5cmo/eo32OLLiR03PpQrpzqQkzcm2Eh3XrkVx1Udg+JtrC5V5t4H+BxLpk8oTbFhXVDvQ+zdWuq3icrfb1zOd3f6b9GiXFu5tqAq42xTInciZr7pPWth9yeZ3fYI/Fyw+9F2kuowy/MbB4q1TL2VjxT9WfWmIFoLaLRNr/w9E/RsvgTc/LukGb44AjPaVFckVSw+mqpAOqvtZN21kWkJ9rQk0W7CQ9tRYRfrLhWVIu9vwPkjyX2o2t0+ES810GTPNesbbGAsxlo2CC3a1GZLebeF4x+h0v30ShC9UJLhxAMD0PGpGYjc/AOkjGxTPMKLMvyA9sKKZU7PRLQQg2vFGXWIYoK6CHFBJey6Q0nTDY7Nomi+nMlQv5f9BT7YofNW2oib9wQmyS1hwBSCB2Gavh8fd7zPjETCCURfDMfuMlqRFgySiOpl+yYSHLmlBl4S6sIsdU63uyy/4QMQn/SLGh4ASnhI1GRCwODVClachEbt6D1u1JInPQtgBXyNiuKc1s5gZ2WtVB8tPfkSfUIQuuYjK2N9aVaioaWhwSAIX771+EaYMIrVeVq+twakrkFkgL8+YHF0sOoZ8ddQivsWyfsMwDAzHgGk4hMdYzr2Mbb8ee8p9oaZBVqZi8E3EM=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Wed Sep 30 17:59:10 CEST 2009',
+ currentVersion: '1b12c771a7f5f13d13f12016ad4132e9707be2ff00d72f77356204f0f86fc08a',
+ versions: {
+ '1b12c771a7f5f13d13f12016ad4132e9707be2ff00d72f77356204f0f86fc08a': {
+ header: '####',
+ data: 'HnjgIcyk9xbqzbZLcIx1BLpcxwQc7hYQ1sHpaqrKVvzx/CFeGGWTmLHoy/dA1wr8/rAUPqvaEFNjZBDfTQtYNWQ9H+Y+YzJ54TmGCQY2h2HYLSCvJWRlucsHKcW1XLIwsxLzBdtZK7AkR1dPRd3s0GQDH1pUcWC7WC0thJM4a2X38lILzxXmoxdqQvawNAeVwscokb2Z4+zQUMLdRt8o9v/CTFEsU1jzrxVSXztrhBzjkUga9TUVcYA7BpOMdFmeevvfRoVmf93BL82wDDWiYIIb6NoA8SjIK6Km/cmovGikoPjUbOErvq0TaKuC6Gl/nUpqnW4kEjR0rVDh+27AuMiJR6MPdqjAYAk7pN8vvfTk4GE6TGxl5IbLbl1yZ/7HHC/CtihstANOSwpdCDpEXLK8',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Wed Sep 30 17:59:10 CEST 2009'
+ }
+ }
+ };}(),
+ '166d907e97005cbb29efd1841757f7d1a57210ddb32605ccb6841f35f72399a6': function () { return {
+ data: 'QxBwxxwjNGkbV5L369GEfAGPghu3xUhmQJi4r0dhbAFscS4SgvfUPuQmX/JvDfWZFBhAHGunrPxHDDHRgx7GVVI/Kv1oMexHKbPuxhRSBRQz2HQlXDAUctW1uPo2xEbDHGr3JaCiqnHltp9XMkmGSP8IYwgizYt+ZwRllKlmDbVkX0gBgM6WzOhP5zekf0E82XauOc2YUW2jZQEKBQ3azi1kKNfTzObGL6NK4awJBlB4m+R8xmKkmybcbDOnnUfo6rXxef6KLyd1Xq8wmmh2oS+I5sbG0CeAdujbhrpJNZMkXFUjKjRu7yCrCU5rUqpKGcYUFtsciFxcklhMwk5uQmjLlKQBXcOM6lmw6OHRwzE0eOMB5iPQF+gRUo5EKdRd9B+lV9QyCJlkTgQlLLQfDSdZ0xAoEe2vzJ0p2Cijg212w5kGf7vEtQrYwb6GAlfeJiYtDKSkXXx+ltpCI8RLOXdg3KZDu7iobQZ43I4MA6QELhGhc+GeRzvHnW9rBaSdxWVgba/EHAsTVq2VSt5u4Upm+WMyAQ89VJ+JMUJu2k++tID9ZzKF4Cfv/DfP+WLGEmZFmfUldl7ot91HFHi9kH5HGgqbkqKUCHTwDyJhQM+2NAed9nPVnV5EKv1YY5ABcVE7M9FGEIVaTlPCQ4Fc2aKD2tyXuhmXlLKK3uBBsSQ3gn7NI/6s1vIDTnWQA6uzUo+IpadwGwcUd3F9TfQ2yckE/FuWq5WNeLV+Y2OeQgLZSf3y0/sqSIhDOhowNMwppZU/fS6Q17iVDhGcmZn+frfNv53rZAOg2zWM8kpLjTOtNCYsToR+2lR3hQuMUw8dJuNs9WHCywj30J2t0FEuLt3091TLD5S8mufN/O7wjloLOH0FtHH7zufyH8YgKm2KNgUHMhopsjnqp3YwXhXgk3OfD55lSaiLO01pLP5kDfNXsmUDyK9SF9gn1pt+xTVJ+ndZiFxzuFvPsASiH6f4Qp6KMoyTxl6w0cIHVZ4e9qHcEWwvTfqBHH2O1KPvijTSmlcZ3gx3HB3zfI9hrY53dJsYv1Wh6mMe1KKT+2ioTlkY0vuR/aEiD/bDJY1yTQ32/TlY5wF4trd3mMeT4yIOPjsMWPLy/H2bF68BOd7QC5EACoik0EGBy13yhg==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sun Aug 09 23:43:43 CEST 2009',
+ currentVersion: '55ab21a3c8f10df776aaaf923f439b7080d9fcc71b192a51cd0f1e17139a1926',
+ versions: {
+ '55ab21a3c8f10df776aaaf923f439b7080d9fcc71b192a51cd0f1e17139a1926': {
+ header: '####',
+ data: 'InmPOw8JYXqygmHyo1pTce9ig7lBEINjEXHBq3O3JIJxF1+kI1+I7bMwBhPJIu7dwFgrp84YGFzk/rf8i89/55c0an0H5DASo2tyE85RZNA98ZVXDEl7fg0FXvi74248V9vfjqUajSc3z/NJb6ykHLcrVLIDupwr+0UsWXIy3jYrLhpSRUWHKMSnCus44BpqmBkkDCTvHN5YQdjGwGcevC4L0g287vDO8i8rgz0P56JwiEF9yB9jtHMRmHFsG+8RIi0xPAPGJlh7pfCkNqhx/A/aGUjB3K1PVw4z7uDzrbF0YuhElZae6HbDu3ouzELUiOV0YijpuT5Mc6kq/NIvxWenrSwNx00kAGChWScG+SUTOyCPmR7jEUHcxGS8jvaHSPQ7bkr+u8BYgPwVuvHhReQp',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sun Aug 09 23:43:43 CEST 2009'
+ }
+ }
+ };}(),
+ '25bc43a5f1aa780304bec9cf0cd61502f82243053b5f72a55712525b0b8290e3': function () { return {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 22:46:33 CEST 2009',
+ currentVersion: 'b454ac54afb60c9bb6a1791843aaefadd8483630611c2bbd0ea37658985c62ec',
+ versions: {
+ 'b454ac54afb60c9bb6a1791843aaefadd8483630611c2bbd0ea37658985c62ec': {
+ header: '####',
+ data: 'f/VmR3IF/aryj9hlTaXlsE57o/x0jsH2ah+qgc6VsOg1/7xa2qtBQRhOQ8RWr9oYmjnarWqkLVrVZqP63O+0dOTmwWHoSf17dWlSZVxErV1Kmb5ojgFlkbHJX/RkcgPrav72fk/A4yJ7kb1FZjTvGNPMpJCDvSA3VT+xEukGaIig1Zt0KRA4BZasYuge2Kr97yT7mPN0d2EKeM22Ybgl3Vd+Ja+aWkTzkLLo3pRBDxFXP0PJrVHFG3hDpVqLn5/EGZguml95TVGlaqRZfzmho9VHduO/fQpDr5jelWA9ZDNkQhxyA6LlOrZjcidbyEsMYeJqVdVXa4vBnYh+WM0KJIU7XoJhur3DMD6yaGc2wAX8dwM5zyWTaseb47l+OvFkpBgstqBnIBozGqRj3ATG8e0=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 22:46:33 CEST 2009'
+ }
+ }
+ };}(),
+ '2977aa5f99a9f6e5596c1bd7871e82d7328c3716c9ef8ba349ae65f10d97924e': function () { return {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Mon Sep 14 10:19:04 CEST 2009',
+ accessDate: 'Wed Sep 30 18:23:38 CEST 2009',
+ currentVersion: '6dd709033cc5be16be0ed897d0a7f8886f88f50cbaf9eedec8638fd7b72fffd0',
+ versions: {
+ '6dd709033cc5be16be0ed897d0a7f8886f88f50cbaf9eedec8638fd7b72fffd0': {
+ header: '####',
+ data: 'hhwId0LMOaldpCUM7uGnhMnjE5hqoMV5DbeA4TsGP81BXevlGklqkoQC3erIiXSatq5eG/dyqDQrzyzkrTl95CwINRWYmXHDhaoH6LftAeSpKHAzfpfRBX83MR9HyT9Ypi8Y1j00L5qEqi9Z+0w3szwPT2KY3ejCsgZAM8NaB/8y3sBbU+fc4sUZtWLbPxocEeS9H7uNBE+NSWjm3Hw5OvfU2PaAR9JcTy8B0HyL3h2g6/QBCEEnf6QiR0L2tfEo3iHrsyVYAdNO+P4nM/vFALCLEPCb/nWstS6tZu/u5q+KERluskP+EKzGgDwuvLwTHjq6n9mXs6umDWmjPmJBefHYQRCYpKMUM+CO+3MFKkZJ2GXExp8ihOVdHPh+zxQlke7rgO2doPJwzLJ9QKH6rnovixYkt02MrbTLNabsmXA7ystuXICcWlSRzds3GlghTdvbjnkgqcGxfzja6kL/ERSx3yq7rKT0cC3O+hWuV6zWd/aYUDnCVbK60gUAphUz/WWCfCMp6LwfRXFn24njkfkPfp9uOKYPMsY8w+crlPP9qBYrVTjX9oyKIC+f',
+ version: '0.3',
+ previousVersion: 'fd57e2d2e48e6ef8db89d8b9ad661d01bd8d49a93f726050f84779f1ce2bab11',
+ previousVersionKey: 'sG96l6ebyht8o5i7Yt3HxAuZe85AJq4ul1cqFmjjzKe058gPKAN0QM0BEoa2xlJxIoXeIrq5A8QsHGPs0iH3OlU77RgBgHUG4TZt1QMyG+Pkow==',
+ creationDate: 'Mon Sep 14 10:19:04 CEST 2009',
+ updateDate: 'Mon Sep 14 10:19:04 CEST 2009',
+ accessDate: 'Wed Sep 30 18:23:38 CEST 2009'
+ },
+ 'fd57e2d2e48e6ef8db89d8b9ad661d01bd8d49a93f726050f84779f1ce2bab11': {
+ header: '####',
+ data: '50+8kvNBZ610YDniT5vM/2VKaFjO46eVWBzgz/kUgU5RmwSHw4PJlupqBRT/VM8UN8NVliS0A7IoSmIP1QWAb8n2KFi2e0V6bYnrso2gPZU4CIOW8Xxh2I8mDci9Qdo9kZSvgB37vcRw+QuYXwm+SjCKqgieGcniacVB37/lcOsGcg3I/o2Vb+ZgXbyARKS2vN8/I/XM89/0t/OUV/4+PUvI4rCHSd+ML/0801t0t9YrD9yXEnIEGl0YzHB5KQebMmhCgLWQKE4NdPN5xnPxtCXRQakGmycUkA6gPzizpBhrRTcObFeQObPD9E/T4UxICLEespPy0FRtipB13Ql35CZbc6YOJ8YbRBXBy9tzZfiP68dabGzPsQoUdhTnudqtSHTvgZgeYP6Y5X7Tl2eaAZGf',
+ version: '0.3',
+ previousVersion: '41e02b4415f5f802c6aedc21cfa873d1a6fd301b351ad064143609280c0be870',
+ previousVersionKey: 'Lhb+2Ikt6oJ7RjzcfBKGcdw58j0p0m1U8vT8fVlPhz2Qgfs49PB+IFDJx/CAYfVqn0XugP6G/C/bt7W+26QIcUywQQMYGA0As7wQlAyntExBvw==',
+ creationDate: 'Sun Jul 19 01:31:30 CEST 2009',
+ updateDate: 'Sun Jul 19 01:31:30 CEST 2009',
+ accessDate: 'Mon Sep 14 10:18:48 CEST 2009'
+ },
+ '41e02b4415f5f802c6aedc21cfa873d1a6fd301b351ad064143609280c0be870': {
+ header: '####',
+ data: '/sQ8oax3ehuArmnZEeX3xiqqDlFMPNgtisChk2A6Jj3jqk+MxC1Y7ioYoY922oyI0lZG23IUHsTvDr8YV2RrIcEMXPBduPl+XcnmGpL65ei3ZeqNSji9Z/i4j7w1JawQSSfnppB9EdE2OQ8x35PnWCIKKDS8pPXLAXnJmnlar5UBhJ1vaTqQY5mi5OCCDra1KTpcFlGQH2RfX0Kl2jwYzFxqUNMyf3FM4hs7cvJcm2yYvvw/c6V4QwRIiANoDjSQjtarhK8dULMJWIXIpaHUkBLBlxpINWkGpGBPyY77CdTOgA4UB5icgZZA5lfxmkHubIpv3QegAf+TKSOUeV9UWmHj64ayHgYjQ4NB7XfSUSrnMshn6q5zY17TlM/b7OEfe2RR7xUonmNgw0ga4OVzYKMT',
+ version: '0.3',
+ previousVersion: '5106520ab71f92eabab279abcd41289831738439fea854d122da13c2d604bdae',
+ previousVersionKey: '4VhpG+IYuvWSUkAP+NhCcFquszJoBeuwBL3A4HkZz6cylGHu9UBjAsn5VWidptcB0jI7A487rHjVmqOdP/K3MlJqVYSNEVzdMjAfkPgZKSGrbw==',
+ creationDate: 'Sat Jul 11 23:23:47 CEST 2009',
+ updateDate: 'Sat Jul 11 23:23:47 CEST 2009',
+ accessDate: 'Sun Jul 19 01:09:01 CEST 2009'
+ },
+ '5106520ab71f92eabab279abcd41289831738439fea854d122da13c2d604bdae': {
+ header: '####',
+ data: 'u/iOk4faLI60d78bNAf1i1/zxImUkdtjS5K+gQqrNRnqquQMJM+FV8qPDt9vVGgKijB/LCgl6Cfvl3Pur/do8V+X7V87fROBjD4XbmMnbG3yBBFgk9snX4upCAkoEL8XrxOY1UyoR0SiLMI/9g10PMRyLmQVCCViwl9RRjcHgI7YKekXPuVWwg9uAUV3pdOamZpyN4POWNAk4QpxVazlK6UoJZ76IAq8UUl0oHbzRNWT6d44LZzWEbsss4SgVf+7+mFMSwKxB1cVm+jgk2vcNs+txAg04EozT2cJGBsiYDqo3GrA+yHTnhdKO8tRBLBsOkmwS60k4H8REZY40xEYF2uYnZbOmBUJPUUOSH44nZ2cD+3C6YyK8GmOS/8ODd/vZ35mCZzoCnHDqqpvogsBv5ks',
+ version: '0.3',
+ previousVersion: '739b67f6c1d52093f5c2153b406df90cd8ebf303ddd0d13d825fc946306114d7',
+ previousVersionKey: 'CNxkOXhTK/SCSZnj+MD4ws83iHGVfl1iBIfkcAhnMeqAkft6IoQQr+r73aZZDRCLDkzGX4kT9iKCGg1qwsrs+EjoeXZTrQH1Iq4J5G3sFLb+jQ==',
+ creationDate: 'Sat Jul 11 23:23:27 CEST 2009',
+ updateDate: 'Sat Jul 11 23:23:27 CEST 2009',
+ accessDate: 'Sat Jul 11 23:23:27 CEST 2009'
+ },
+ '739b67f6c1d52093f5c2153b406df90cd8ebf303ddd0d13d825fc946306114d7': {
+ header: '####',
+ data: 'PPGwtNXTyrZpCY1GKT9/u0pPsSunTuRFhrPfld89swJtAeNgz4VUTXWTT6z0fD9MxnaxsxLhpofDBn2mEYnhQ5ZptSKd7/MYrkVLRyMBQaZ7tPgaWVyFZ0vhJ1et662H5Qj73reiOYuKmU4KIqydFSupgjG0awc0ZV1qwjyEwEWgopwXvrhWoFveGSrG4XO+cbxnb8ek1sRKrUVIQV2zhE6S0QT6PCl01Jr+Zd8kW91EWV/PtZn74rJcH1oBJ34WBzBrU6ARXutBfxoYgwTsOhRxH9Z0StbMSRAsBff55cOYxwuxQQCXsOWXwoK8uE2WHAG18b3DNuTm+jluNkgfUxgWZ6B8gMlFQ4hdgQ0gfWknq4+ZH0xR5TTAOBegel8C/z1sqT+hvdutBMih4uXJLeZO',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sat Jul 11 23:23:12 CEST 2009'
+ }
+ }
+ };}(),
+ '2eff872ebb19c0f8430518847dafc819c0bf7e0cb714b456d74603c250f2efbf': function () { return {
+ data: 'OjA3UmHDbGw95QFBZ0LMQVUgqwpWy+BM7a4eZ4FY6mb/B+fCl31PadGg6+Xp5E4zk7V4GEwnxl39aCQzmNQOsxWszVZ/7eAIFK+mm0EwmpC26hIrrEZ+8yHW21Oj/K9FBpfPZ42768cWh+K+dLQw0833n5b6UTmrOswJtzQiMyCoZ8cidw==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Wed Sep 30 17:59:16 CEST 2009',
+ currentVersion: 'bf8d46022179715d9d27e0a256b56b50828a771c3c6b46fe36fb2982dcb3b4cc',
+ versions: {
+ 'bf8d46022179715d9d27e0a256b56b50828a771c3c6b46fe36fb2982dcb3b4cc': {
+ header: '####',
+ data: '9FchrEXmKOmFxcCcGHhOQRhDf+OWFABlBt+Y7FoQWvmjILdmlZeCNEK8tBrVQDQH+SuJ0s3EHfaW2dQ3TRoe35E9P16lJiGclRj59e5f6tngE0wD4gLyRQnF9TZJTFIM3dYlwjhAewdonyh0uEnAtdZfNaeCF5xVjDKzfcUVyxXIJLa1+wdJde6ycsgTaPvsaJZ0YU+ZfCSRAiL2ACnVcjWjT7hFMQMGnCFQOMJz3OsA6+UWvhvXebdDWqVg4j1h9Y/FDllCYtvIg35ARlaJERioe7+PZiN+jki/XmoEDzd19BkK/AKB2DLC8dPEj9uu7p5r4WAxuA6iRbXDVO8HlkoywstDAKtUj0XmAfHoX2OJkHQjfYyuqabkFCQO0227Pk3vFTFnv6dXecBMLbevAVoL3EKvHpJWICL+mqpIGNJUqgDCGJEB4rob2xBNRLyExgkEmbCKoN9ikFO/JXhDT2JOSR0fmvfcEFor7exicL4HX8zgaokA3oXwZptc2Q7wTtKJ5ipen0E/2uv2rjCgTAK6vFHxgW5Fk3AGG+a2YpDedekRAWNEJdVucimepL8LPEe/GOgf2kGZqb3L',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Wed Sep 30 17:59:16 CEST 2009'
+ }
+ }
+ };}(),
+ '350a8d666e033ec01e203e0b6df730bec53124f9ab25f7942bd9378e4b5c01f6': function () { return {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Mon Aug 10 00:39:08 CEST 2009',
+ currentVersion: '36a2e190796c4c8bf2340fe6d7f1d032b4ca40eaf42b9ba537e1dd06a638b26a',
+ versions: {
+ '36a2e190796c4c8bf2340fe6d7f1d032b4ca40eaf42b9ba537e1dd06a638b26a': {
+ header: '####',
+ data: '8TVTh0Tz2AUS6OmJ43Gp1a5ZYHhryqoDcESx/EfyefERs+AWtMg/57XKIEi1GPCA+jllOVmaJ3rnRaEN0VDiT2lST6PReON+IFR7WtZKpPOMit+cF+7WHXM9RbYsJnf00yyzRzF5xKPk/OiP0QwNOnhRrn0UUzJ0akSJS6WLJrIDF/WENBu0szn6I5g4m9v3nUIjJcpsM99BOHS7iQJmakUUQuIp5MPbALEUHmTWLcjmK+BVOctdfE1uPor1GAwgJTQ7epQX6PSPKsyPJEHgf1C5OvCN8/X0IzXdoXdTdyBCh1RaSiI+5Qjp+XHa/RK7oRjVy5aMcpKT8v3bDBlTMa1RmALqJCMDW0lVgjtNrDlQ8mxDOF+gTrDOsLiBv3oHG1H5035E6cU4TRu2xLDqpGKzJ2uPSkVwvc40o9+Qk+Zi6iAx0b+0OLF+Yy1KoXP1ltznmufLBng50lZSueYLrCfEmBfr6e+gc4VZItfGrd5sTT7IilRs7gn5+gL5Xhe5sQ==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Mon Aug 10 00:39:08 CEST 2009'
+ }
+ }
+ };}(),
+ '42c7a17479baf21938c87af38ccc3ceb3aec21535c644f6c90496f89008f7828': function () { return {
+ data: '5P3FrjzLuEW/pVXRA+eGyKmcmD45HXgsMFS2S5SVnKDSA5mH7FLnCPsR6BGClUNZQlB3iU9vG8IK6iIY1v0m0m9CTM1Ubk3dnDOTSrCi4BTH0vknRvBNZK7vJaChSjH6QgYrRzp85hdNPEIqjZzL+An66dFmWzphjAhCwh33s3QHA/gLlqLaxexPqcTORsyrbSzZKlpRBAF7Hb0gDHKs7YAPUBt+dlW7ZYrxBtNIGYZeh0twjza02AnOhOypsIgJrchYXzJ+wXhU7PPPPwcRKrUjPPlCzG/0+l7E6DREf72yUzIEV6IVyM3Bo9Aii10gRpxeU7XwuONfQExBjxJ3QsK1+IK8k67WzAYYUO5gu+jV3M4NivCpoYK18DrU88teIRgoGry1y/x3gzrHKZOuu8w31/UrcGw1e7lliYxYbEg3eje/znRYKCjFSVZ4ZHHKqXshGPLkip+dAXiKmmdqmn8hLQPrbxTGAPTrVXdM/WyU1NMYtJJOzsEDNTKMxIfBXnb1fRVjOPDtEpuU4Okf/FiQ3fOWkjFWh7IiyFoeKIVG58t7juvwiwERaw4gfJNWtdMAiTvh/o1o6qRAtnmH90+OWc/V0no/fr2xN/NWSBQqv3e6/dj56V8b6wmvu6O7geXF9+n46LfzMDlHoBqS/8tGy7qDnZo29TaGbPoXUkvteX7689FdOYFd66WmSAuoNddvrqogWBCMJSwiuaFpv2JAzFtWNmQAk/nN81TFjnTeiK1rl0drxwPR94Z8MiiiogzMUIkbmkGciUtMfWpUgDNPryx9gXRCCZQZXLh6EfspgahFykUXG6BwviD7jRa/1TFg4xRp9VWuul2djQRUMEQnZQ4q7hu8ZBpBvIcgvC4CxqOfcQrYMAD180UbdxQ2xJEPA3DCDQpZNWzLgJ0m6FrOx87x4/1Jyd0LaaS52SxtQCwqnusNut4dmPFKHTiPGXSuDADrlxeL/enOAXt+j7fjE5SXy4bVIGqeDv2mT8yPUam+b8tb5SNr+CD0HsUB2hsunUxjXVwcJ8Z0JBrwvvVtQAu17rEv3EcfuxFLYB/HwqUdjeCfu14/RvblCxBaX6+lAeJ4rCA8dJWbl/ckr6GkbQmGnLno8uxPrq4j7E7Ia+itowZSeJ/eLlyV+owhbILoVjwNeTqi6pkiH4ejM/+e2n4r9wB7duOiFPKnpEt/SqF1YWUZfzLoDikdzoGIERePNKzlSEa1m0IvXDxJtADiXcEzGrRXS6mnbIt+yG0xX4EsCmDt',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 23:06:32 CEST 2009',
+ currentVersion: '59b84967035465bdf84c8aab3c43aec6cf60e1e2857e978b205a2cfda7546f28',
+ versions: {
+ '59b84967035465bdf84c8aab3c43aec6cf60e1e2857e978b205a2cfda7546f28': {
+ header: '####',
+ data: 'cMMqKK7G+t292j0PUNh4gtooVZqEkAoY9B/vKa6FEJWXCp2IfLOSH9sU5xKnlX10NGYV4xZwgidPI8USmCM2WUIcv+ffm+6OYmEQKC1TdptcyAh32+dF2VS01V1Hb/HmtQiHT7nh1IUaV6qn34rTICtLKIfei+AoGEjQm8kwKNzNxeX5SnQfafKCmKHH8ag6SxKPggv+ucO/ECz++n30nGpjwG/tWCyMd291HfAQkseloFTPedEgEmfRfGrNmsq2iwtwKLddZJ4xvY56H8Ppxo483KZj85AuE/g8vS5Qc961YtFjA9xbE/BSchXYobLH9DAoKYtiREyfNCqHYh1cxhqE0Tk1f0+9IvGcsB9d6fahhTfQERnUAd+f+C+hsx7rMfmub2z1TTjt1CnvCEI=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 23:06:32 CEST 2009'
+ }
+ }
+ };}(),
+ '5931d708fcdd39af284d4809135393c81210a10b0e9d56b49b2f2a3b8adc9394': function () { return {
+ data: 'Yr0K3VCx9pWKSjRuk0JTO8kyYKqqYBb2xz0nP4h/WSx3is3bSy/jb5dWJhI2WKNdpK42eP0jfboITWX/4Wdg7HZoLv/usE8ld3MGKfxxzUNZDIkW25y7Chq08wFxvv4O0fHM6QyFmHQx2KRQ67e++pm3Fuc5CBl4Cgnqe9GPtMnAVJdaei/eDK2icOJ6EldBb0NGIaX2TWE84efJPVNIZjQ2OXZmLse0baim7TtS4HXljZSBNHob2v1KJ/sKh8xvw6dY8zQBAalo17Vxhb7Gd9/Vd2A03GNixS7WZAYP+ybd3lZFMMBuNXTG5bVRaMZv/hnjw+CLak+tOyNRG+ara7GivBAXjgfd0oN9qBvvM7aSm3iFV1xQkxBXhv0/GceSZNE/uPdJkUCQutikv0kpsDxWBHvPI85+8mBmzgF+aT0aKRTTnQfYSBLvPspopEv7PxhwIdjDBJPrfkAMUFuTSnZ+hriDMHoYM62Kh5anX3jYXIPmrRRuH1NN39FihR4uBNacZPEiFKmFQu2js6ruCNzaLkUFQIhu2hzdnQt1kOIG2nngruI7SEt/b3YwHIh41udtve7qKWrGaO8IjIaR8jgCtxvavH6NaRWIr6Vx4cgvqiyMAZUewzsCgY49BOWWYBR1FwcXzk0itWH0ZzGc8htlbVJ50I58Iu6Nfv2IGQvHY87arTAbx+sUNxou6Ht03KkqaONFEr1/VkAaxTNsTcuWFArAKaC25oY1EkriGUC9frwvJyHIRBSHyIzpbbtO2/mnBG7gJZUxAtEDZ3Bb3AqP6v/3k3N03pP0Y5HL199iLeKTz3pK7sgohrr8IVM1XvcsaVyTBZ3di1E4UZVbyxbrMIyR/+NMu1ZqlwGI0wjq/emTvtDEI2/l4WMxMIfQLCwdSjDYi4/HVZJvcyGNugS2gUf9hwavz+BUnV1iSI1JuxQihby5LY4Em4Hr1st7hqElfZLgq64iCVvBSzOidM1SE3lm2l2/Xx0SvLKmVxt32vO7brNSrBB1fQyq/BSOwlp6TbhnPKbh8aF+MIjexwPLU0wfs8rj+5X9j5djBKVtlCqDFtlvng043oC83lvOdbyAeppNXcloRWH8gB0+orKD0VCMMt3NTCJ6xlrDeIWqKjn67ucXub1LB35B4mJDbUT4zYWi+YWAp7QdFbZbWJUa04BzZOY9ggtbdrznLzQOXnek1gqEwrNSytvVPaWoqz25KuMpb7niKwQNe4d20f9GUMyjFcwjwlfyfwv8B8FujQ/3bCi+v4R01UirsVxmRd5ESOYi9C945ErgQZX41x18n7a4Es35Bnl743w4ZdVQw8/BpwRZ0pKe0275eDw5CJv4gFdsnTVvAhP1SqG53sREsIVE2STr0/B9cANQMjFI270JKKVG5ckYTueak3QlcqW4DXQE0wkcU59wODSBiiItFDKtZAk1pKll0s2jnuWlW/WP4yWddry6uMtTnj+j3uLNcV9O0Vp2+v9rRAEdHCymEPkEbR01Nz7FE6xRXnxnfn2xQP0N5KVZvzXMf3evbN0bEGnV9kH/gIHkiMr1CgYJeQDGcxZgKtlxqD75OV7XUSIAd9b3+j2aDmjf7a3cZrvGjkSHNBVTyPSwsIw8/09Es295fGLKRu5ZfwgZD8xjUfErluT3QAkx242RkhayNPn3yRNAGzmBZ3t70N8dgVG096lZ790eDDT1fUdusaIxAGlPebT1zZWS',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Fri Jul 10 23:26:41 CEST 2009',
+ accessDate: 'Wed Sep 30 17:58:49 CEST 2009',
+ currentVersion: 'e26bf4c9ae24bc10a265f594b0d75426fc1664ff8143c52d98592cf1c68baf5f',
+ versions: {
+ '335e2fc3f76b3db69d7575194a8313bc3ad031d441b6f2f81cecba6d3d630130': {
+ header: '####',
+ data: 'Q3Z7AjwPFzFuRm7BJSRnd8Y1/tEqXiLdCxG2JCurixClv8uvQPQkCECmE7mn0OqMRzlMStD9UojsRK+cxsaNbQn3OstaOgm1OuZe1WLg/oSM/UfcQqfBRmCtHwKX2zjRTSzCjNamwV4n/l1/92/JOBeydVWe9pNe/WvjjfNYRRhTWViNnOaOAipfLR3uSbehgUlQ1NX1y4nrC/yEDge+73BtJNJhb9FOkKGG9ySf7vax0fEo6jVVfyV8KKFmXLL+ea0D7CoiyR91eeTKZ3bGzU1MD3KGXfPorpCoaoRK7OKrHGHGfAmNK2yAGhJ7rFnTbkna02tMSbdwHaEXVyLHejub5L4LUaqTSnAGdmSpiVEpkNbD+K2mLW8loZcMUetxFqDh5ta7/IEnPMicmpSOAVlYTW2ytpLppvU6fFKAtGdJ71GaLwQzgfKE8ZJOueJ5WBx990K0MjSXZcsqEzFzGjiyXpIBMYwFDuRwTyoxowgtlL4W8DTtrxW/XA2j1esrMXS3Bf2g6ujdSPzlve/8nimW18OkRAgPuL4seEySvs6GKgF4CyR/TsIsche2kWJ7XM3eO7Bh/Wxu6WmNBjUUVbjvOTF8pPyDkAfEIhXhTliHf6lDkW7zQs36BrGEPfOC9MKjSlX7v6jgwX9gy1ToSiht5OB77G5luThsGQhEBkydw1QGZvcKkblrzaGFznM10RXbuVyfw9HnMQQO9h3aBIgq/yynJAc+uBUtfPsGIfXbotTZ+bN/y9mNl1gng/gyy0732IS46Qikov/7KRpOv5RrosTCYaU+WrAn1ehbMzd2xFlNcKRpQSGQkVundl3A2BqYtRElJCd32FUPSfxo6gZZosI8s0+GBiRjIVihPpglE5uXk5vjbsCEpahm3XEMEpqGdyXct/blQqEsa5o2NrvIlNVCbsDIKYZ/S31b1BjVO/auWGILqzbG8RA0IGZEJhyRTx60dJEHZSayGlunkgU=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Fri Jul 10 23:24:14 CEST 2009'
+ },
+ 'e26bf4c9ae24bc10a265f594b0d75426fc1664ff8143c52d98592cf1c68baf5f': {
+ header: '####',
+ data: 'ITaQ5yMCeVUO2140QTcV0Fy8ucHd3zRohhgU0F9AdvWxwVm3yjZrwjZWmnOS82bZ3y/ZSrz+HGhuxuk7+yYOXR/Gp8I45UTrxFzeqJNJdWurpH6SbBGtd2CH7wHM4Bi7fUBGR9B/JmUbrTO7iT71N5MqZ2nRxr2vvCBXMcOPlFg7SSMDw6eFqDAAn6iMyaQSJvntLvM+WmOXB0S3OgUdhudUihK+Eb5tHPAy2hZKpqjavjxdGUiBEJoegUwBiv6SbCjTCDZWNXeFviw9wBJoIhSUegokGr0lNGQqMq1BpNHQ58m+VvIF2+qhwGq3UGd6qfyb75DwXQus+XezIQNOPFwPYW5uARY91KBgyIzB3Qj7ATpDVqPiW8lMs3wHXg7h6em0/FEFWonzVnoAx2HWfU278op1XQTgSTLn2DxFfM0vFeHRfb7tSwSNG9RNb2hi/cKaz5GJEQ83MO9MwGznSFHwGfn5fFW6ZZLf2cn0l1Y4VO2JjGDwy2HD0z+K7LdH+lefW/CyMmOKERnltHnMIDpEOB+jwhBj81wbU8bO9C8vc47myNtXu5hROIB7SDcV29Ufg4kXU48gXlaPuyiS4TYiM3kjC/F+6+iWkJbyFtKirRibGBIKvitkBIYkSJeD81b9IN3Y032bpZkS4uT1oELFxi1ZPWeqayEYSV6ZezqprT+t1PLvtLokKkVerbGhC0FXKkTQg27YHUNOZ3qJCXeSFEXEIWKRrHAlFvavvdIFZDUrly3nRW2H+hEbSVlD9UC6nzfgJbjh0AMS3qSgZrbf/asya3QqjM30r1gF+yn7yceyY2rEdVZnNc0x2siie4rXCa6CbBuf/OA560g0O24H51dSsrxVcgIzwvFMXWZlTuHzU9tKjGqO9sLITGy2Ap1FiLRJ+58PXtBYSixB/ADrEJFQLzbOFjALRqo6CtVzo+FUVEh744+dNPpsVLQ2dERKbrdSUxfedCyanpuW1js=',
+ version: '0.3',
+ previousVersion: '335e2fc3f76b3db69d7575194a8313bc3ad031d441b6f2f81cecba6d3d630130',
+ previousVersionKey: 'PD0gxj542sNjh49y13zXStCGpXNRRLeJpGJIal1KoFm7HlR/BbXNo8mJPFvGT7Ye2u/FQG2L7OH5RFD8QSZrDkyG2kthr1vTosT3TkDerCLeyQ==',
+ creationDate: 'Fri Jul 10 23:26:41 CEST 2009',
+ updateDate: 'Fri Jul 10 23:26:41 CEST 2009',
+ accessDate: 'Wed Sep 30 17:58:49 CEST 2009'
+ }
+ }
+ };}(),
+ '5ea084cfa5ce8198528f466e160862b4f17d0a4f63d3af45518c96413d16fe69': function () { return {
+ data: '47feWxZIAZlVAXvXRvAZkVgOzfklaI/tJVT/5/TXfM38kA3UIkm2L4kpfybLlJolAL+ia+3NbeDI2qqftV8nMU9VSQONuu0UGybzCYNBRm7jK+GrI4dLQs4j/slm9oDPSlNxH4DuM5Td8pae6UUdZN9nPFF3eOQTm8sqv05plhw7bElInA==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Wed Sep 30 17:59:27 CEST 2009',
+ currentVersion: '5da9ecc65677d03f4f31c0f12f000caa4930394a99af8187c05e74b99c851aa7',
+ versions: {
+ '5da9ecc65677d03f4f31c0f12f000caa4930394a99af8187c05e74b99c851aa7': {
+ header: '####',
+ data: 'TJGyQDdjUyqLTS3hlbfYNbwaQ1/LvuAtNwE/8ccsxWKK07eHHshnFBN2j3D01X9nGgWKHnC3C5UZ/RIbJmmqx+Dp4xYSF0Qbrxp4WMtx6BUib0zwXOiopeZ+XaVyvcaz3OASav+Ayp1VEVoXiM70caQ125Ljmp17EYCWUrgk4gSKIy92d33Ia9GBT03x+uuVZ69y4sctTK6UsEEtrKpU3s6XzvQO/xZKtR5c1RglgRjjy+9DlFgt0+naBlpYkofS50lYsn5TjuAw+2+sc6wA3e7euzWOCHBmQjvnP3gx9nxgv34mxyuyj6ej4gSKyayee7tAKM98//2+MVJlQszfD0DAr+EdwT7EtJsjEz7jTAXmGAWSEh7yWkcWcaq2nuJhHDzocidXTuXX273ki7WxTXE2X0pZB97133iY1GKGwY1Wm+xjN+1Kkxt/UElkp9mk997BdT6ZTb8G5iLawtp4XWkRcNExFP2x66YHEhl2vzkxvwXIre/mBILJzfj29iXks59rmhxglo49J48roMZ8vMV2mMqGUFQjbchT59btyBHJSFiNpO7eqTExGdgUlE9/UIEBXSPLw1He5uANApPnuf4dPOPDJb0loYTCI+n7iMYdVJto/0s/wE1FsHQC5QfHMBlXncyIoq9PH9+aje28HRQFJlCtqs3cNr4sVbcg8h6UKi+5Wn9PD6xyYmOKeMdLKhrC65ugYMTAK/OaJnnEioWFklO1OOzSeY+4naKq8v4J89Catw7/t91+jmZeakudvQ37PXpFkbgyetL4m7rbBPb24noT6tyKcxX2xlPZwDavsRVdWKJsBXBewqsTpshIjuAE5qUPHNBfqAPzhNc1jvPjgTMYyiAo5ibVJe4C9N0N1AbR1Zqsy+ifwbSTB/9SHVSWEPjDmV+XdolPCWSifSGDhUdq7kk+nJ4Nt4dD+OcfGZlSPNH/976KttkrvezGrz0il5ssd6f+DVJU7QAwWsNax/lODSaRytwzg+5RxfO0K/tP3VQpi84RYwiJZ3T/hZqD6+9fcLJ2w3avPFyzJsGtwE5FrFOXbBHh0jHs59cBkuAfD0DNYbKB6e3M4byde8kM3MH7rEop2fDAdPclP/yClV51PMoNcMtduTc+xv7Ywf+tvBbfXs4k+UAc5sE++Ed3d1fooDwSSIB5xmHQZhlbcwmOlObnrOk=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Wed Sep 30 17:59:27 CEST 2009'
+ }
+ }
+ };}(),
+ '63e20b19028b7dd1465cdeeed60ca75b5f5508cd01601937ae8b0d1f981057fc': function () { return {
+ data: 'lhtfrtBUKfNoG3TCgqmbvvdfpFUUGIk3NvD197Rqb0kxJWllLFbCvOJxQfplhuIhIEciS8fIdFDPnhXJxCT6QwMf3VxKc5HM7EpN0Pm3Kmui2lKPsBpduSu1GVy5N8Q3/FE41IZ8Jz+Ht0+z9wZxjSg4ptBAlh1HHiJEsDTN5gixN0J2/g==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 23:06:22 CEST 2009',
+ currentVersion: '2f60193c0fc0e3f2f178955e1c68759675acdf691bcb918cfad329a5a97cfaf3',
+ versions: {
+ '2f60193c0fc0e3f2f178955e1c68759675acdf691bcb918cfad329a5a97cfaf3': {
+ header: '####',
+ data: 'e5Tfxy8NhcOTKqnnyhaONWkAYgCwgEh7DMlhOpZHwIFIKp+NUAvD52nNwkpJk1jKyoU5M69MsIGpN/HWFa+Gz/pybmR1iTLUxLE5AtB+Cu6LgiPunH4OrLIl9wbWKiQEs8XGG1Qr3Q/JamLPHitPJi7R4vs9mzoaAGoM2+Q8FSEw99vEwLb1QwhjvtkaYMsOemRCRTLWkZvLgzp94D0QVMqZfpDBhoK/j9lFYVT00EuUEQI3eP0=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 23:06:22 CEST 2009'
+ }
+ }
+ };}(),
+ '7cda06249cfb102884a133952770b85d5442f8049db132d66f761deb765156bf': function () { return {
+ data: 'Q79Uv28nlmk8O5i46/0qkpbJangQTW+U8zhkme5OsgEYpFyc0dtb3YR4CooaH2f55QVSVdny4kzcBm0/JQyrmcItgEIXpbaFeZ7U/ZIZUYAZMvK10JPw0b1EVDfOuychdeOEf4GHbV9sU599v/yiobKTo5FkJYnX7bVOtYuvM0ASBf690GkszmGzHRsdD28QYNUaWLbdufy1X1ovckyDupPGmSz/Sl7SJrJLU/K4+QqKDpg3G9DJbNR+UnAIDWrl1Bt7KJzeHHdCiQ2hw290iHkncnc9h4HsxSEYXavHaSfbKviyV9arPQxRP5B4fPAqO66XwHGoCMzA/SDNfkutXxSInY2iUMfHm7B3k/6zjH79mYvwIP71YY3vGoCrZRTKE4FoKzpDhxNLUn2XYUXFNDKzwSycGSeROWnyE2njcLbMnHhqd/aneNIsDSPCAr2b4GdNdpUPyUp5idfnJ+WyX/F5v/ijrt2XHaK5Jhla7kfGyO1GcWf0e+b+3g5CUXhUgyZ7zz0v2TPG1wCtqwhj44/Q4LORD4zeatSED8nLJkjj+0x7sD6aXvDSKZIphe1/kgpWzeDlUrPJZoM6MxNjvj5OWLdwEDP/h67T7FAeHsVJyEx93GNTsWLjsNAnQEOoTs9r+ru1m17EvtGl+oWq3+qRqpg97HG5+QK0jnz77evslTpotnoSKULq7yXZBycmzmzc6TFuTVrD8FYq2E7hzZ5fQO+D1J+7MB+abPuoR3uKZDdJo+7o1nIvT0fOj5fOhZeDqLokvkhERwdivLR3EKjqnvzHT/bym6psXEA/5ktJASfowR/vyOAhVdXtzMyqakdcFiIQVYmcpE2KUpHybZtCa/52wHU0LyE9xjxIZ0M/XQzbASoVfpqbrQCW/fLI7rKLL/TdlofkxeWDHbt3dPPPNw4opjg+56pPY9hHOk2apE7bWGxcqrg/g+CwCy/7wdhahIHIjyS4rI2kqQ9IFTZse5qrVMeKHpfEQydm7tg5fX18Geh9coGpzGqoKF5VOyEk0DNk1fLvb1p1rItxw46qfK1unjAIB6ftIRHDgvDG2h5uuHnviQjHVg89Yp/+C/cCFSCfIBl78k4QzbHiPtz0x++1HujcMLqYP1+yLtOP5orV8yu8lBspaK0XVJRbob7JvR6wkg2Z4JIW0cGEyUKCOA==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sun Aug 09 23:42:55 CEST 2009',
+ currentVersion: '395eb58606138588dcd7e659065db48775610cc1e90cbd03368c063e02e55c8b',
+ versions: {
+ '395eb58606138588dcd7e659065db48775610cc1e90cbd03368c063e02e55c8b': {
+ header: '####',
+ data: '84khhUlnVlkWRw4txUcWD5WAGoOmHVY+HxNSlssYiGWOJErHmz3ASdkRCWq4epGjOOxC1sEUezDOOTyDSkCFs3HApOl5k80WLXSCXcjcXPoCiQSX6czufZUfR/OGCmYgeThAbKjnN//GauOEOCdB0AvXYMv1tnK9xTXoDRmOS9PxN6eUPDQdxJ9mKsFBBRRu+LEhANE7jjhu7IqMRmMxt662uo/52rt85GGChYk6qprzbmf1dRViZ4mIccXD6RpYjHsqxS02V9pC5l8u4i08DWRTbghu8fm3FRTgvr/xOZTRFZrGL57Vxps2/D4klKQ8io63uAjxSC//yeU7LHCXm84f9Uh99q+wYNwVcCQ6Fyrz91K9aa8hwHgXq5WJZa50vduwKpeLNZchEbGqLCS9eVT6',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sun Aug 09 23:42:55 CEST 2009'
+ }
+ }
+ };}(),
+ '91dee4945d6660e7c0db77b72fd2eed3372a46545da1c1e5600a80efd554977d': function () { return {
+ data: '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',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sat Sep 26 22:06:53 CEST 2009',
+ accessDate: 'Wed Sep 30 17:59:38 CEST 2009',
+ currentVersion: '4b78e26a7c5ba770c11ca1f799f47112100c20565802ecdb8b0d736c1fee31af',
+ versions: {
+ '44aea76475425dbda56abc538b83cd270d00d8fdee6ac0575019bfcf4c719a5c': {
+ header: '####',
+ data: '9ZWZoxsnhlLjlSulSykBQr+WpToHUzdQ5Q3tcB/l9SePIhgQuHFP4PkA6dZGtLKazPj7EkJ0Slu3Y9TclBjggZVaA0hPpbxPm20hjS2RgFCboIWWOp8ib+xjy796TKGVGMz1RG5di8YUuSH2cc+YoWy9KI8+jJjiT28qT84fdazGag6ZamzQErDsPzMdCvxwF7W1Hd3QEA7AEU3dxvKC1LFuW4tsISrtoza/yBl3g+Vr4Ojcix3c3RnEZrhCQXxX6i9k2ASSlZytDg5dj4KAV4ZM6LZAt7hQS5Ff6IkF+5opTyM3Ahfg/t1FcAAyST74SOVI/+a/CcbQ7uGIFDYCfFWxkYwpo6fw/ezWKcqs88naHp2YVvsyfDI5OWoLCa3Kfhz1hvihX9tMFNoFi/9G',
+ version: '0.3',
+ previousVersion: 'cf70cadd4ae3e7f658a705ff124ddb24de78083a57bfe4fe2855ae2be2fcf8cf',
+ previousVersionKey: 'nR7icOODtT2RF4o9EMxZTH4+qZAigTLp62lvjx+t9KZvpz0+JbFnmkbsp/X3tqswLKeOyQ2wCkBIKIuvc5ot6IJNx2QTVf+Nyibw4JGWiU8qoQ==',
+ creationDate: 'Fri Sep 25 12:16:12 CEST 2009',
+ updateDate: 'Fri Sep 25 12:16:12 CEST 2009',
+ accessDate: 'Fri Sep 25 12:17:17 CEST 2009'
+ },
+ '4b78e26a7c5ba770c11ca1f799f47112100c20565802ecdb8b0d736c1fee31af': {
+ header: '####',
+ data: 'i2axYBOEjs54cYL/YuYRbYVWTi9AVokVcgYboJ4A8il9yQOqev59Veb9+/B4yI5IjRHsz1wISAKmcLvMaE3ON79P6hLvGmf61aDEeyRzWnfcGTBJ3Tf5o2SBsOeVjPIHYAQF3gcSHk/vyFAKq9FUMcytgqMs36V6euMMYT3p2n3diF/wMti0nnNaA3dEGHDCZO8KAm/VWMySWH1zMkjkQ7R/Fu8KMKMnsNBJcjX0wFarVZWbuo9xJODg6vEsz5+WakY8UN6YhG//JsyFJA1F/0eynpWhAtKalhyh0JlCBo2y57iDIIT3acCxg05UMog/GpyxMiak3/iz7LEzMcVqkU7M8PGpUpHE4JM8fyl0IvOgHULKS4jcoPCQKmRAUuFbbouKwCE6sEnv2TjD9FxM',
+ version: '0.3',
+ previousVersion: '57b997d24ed1a438f7174e0c821b0c7197b5d3e1d0240f0956543934687a9763',
+ previousVersionKey: '8zvslkM62Woa4lFVxpxDCHteoFi8nAK0eC+/C70zuOkqmyKe/2Mu8YN1/hhd7TvJBW5JjzFElYm5cNv7KITHSmCe9ocwa23Bz/Txl/Yk84KC3Q==',
+ creationDate: 'Sat Sep 26 22:06:53 CEST 2009',
+ updateDate: 'Sat Sep 26 22:06:53 CEST 2009',
+ accessDate: 'Wed Sep 30 17:59:38 CEST 2009'
+ },
+ '57b997d24ed1a438f7174e0c821b0c7197b5d3e1d0240f0956543934687a9763': {
+ header: '####',
+ data: 'dDjbpH7b47K/OR3x8DFAr8317ojvn2XU9UeW9XCXNDI8ilFYvhDh2YdKiaHnoFe9c5nwqHH78g+V/U8xmbv9ojvuAw8EAqhOlen2W3QSi4oh3eAWXGJMc7QHMDhP38l2a6NG/fLCYE20aKof0thHYAZtCA9xh3Xj8P0URjPvzPEuPxSgxxtku6wrpuUJVmE9L8iM6GMxdtBg9ohnhknnwUQl4eWYEIWmANTkVOG+85DscW8AWzSCnGlBxSn2B0nYiYcVIbv3pIh3UwUK/VOnCg3J3zqFx5pL4T2pMBFhXMSH4Wg9KglSLPb2N1aR3+1l2W1mRWy2TmqBRmis6SKz8VhXlU73wPiL1xpdSXVXGdNTIkDLkP9MYugdF7vu/u2+DgPmbFZXNcEWaZP0UwWS',
+ version: '0.3',
+ previousVersion: '44aea76475425dbda56abc538b83cd270d00d8fdee6ac0575019bfcf4c719a5c',
+ previousVersionKey: 'Dq/81arpQSERdDNvvERMt5uVHxOzjUBKZ3bxe/CRZI6zdf06G19iT5L5Z7I0ZKUoKEoJNRTiB5Lh7PjDNibtY4oYRmmKXpUEPbiJKp351W23NA==',
+ creationDate: 'Fri Sep 25 12:17:31 CEST 2009',
+ updateDate: 'Fri Sep 25 12:17:31 CEST 2009',
+ accessDate: 'Sat Sep 26 22:06:28 CEST 2009'
+ },
+ 'cf70cadd4ae3e7f658a705ff124ddb24de78083a57bfe4fe2855ae2be2fcf8cf': {
+ header: '####',
+ data: 'osJ+5cwMZ/4Gq8WSNeRGwEJ/On/jDfUapgeyDYyGzkIznGaBIs74iT7TCv/i/EfJjqJQWKT5CAMtGngGjyrSC2wlhTB29VrCagyhYVZe85FHHLqxShwXVXMlCTPqxnJ+tUWAme94Lq54W8U+/zsFBqRhxteWYcfsAT1eGxMZbHTGU74OLLYCemh4jcvV55PGg7u55MTwzUebPlJvrFOg2KIqsqUYWuRzY9TjEWTb582rihGBJmj6SrPYcBN7e5j19mKtestLFMOw05oEEFNTPWaN50GD/8IuwHc2wZyk+VNxV3NDRwwqnGiKIkQTs/ddmKe4Ny6efvBXH8a4eDvDxlDCa5UHbYAT77RTg9jFS/pNeoHp7ZATy26/P5C0WqI3YfKfvuf8H1yRMzhDTtU9',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Fri Sep 25 12:15:47 CEST 2009'
+ }
+ }
+ };}(),
+ '983f262760a45171a8dbaad13a7c87b8a3dd267d1cdba7850b07e58af0460378': function () { return {
+ data: 'NUhdggGXc0aw9EgLWE1zCX4yTNZo5rxAvXy1e/i4IFQfromU3ARkbjBkVOui/VLrCmiExe81XqujgJHOqVp9HrgGuNxeo8ODqbD2p+/1YfxCzconrCggYf2eSvsIXuBuYJc5bGVdG/Mcp0DPedM5Gw8MvU4ix3EwVvIaoUdRi3RJYlsO7W0fPQjcWTt3rhLI0lkGTFvEbaK3b5Q0xv5mBup3w+SISIqDAvbmzNhc2DO9BzbcW158sv/+hBe9IHEtj5MoX/gY6pBdg9Dlnblql0jn/Mrfd6SR+1FAv5mS+NLqt6NHejs+8n1xnx3fOv1Tp2JoR+WbHBhL9wOlbMUjbzhM6XXB292Mb+KsqAzDdtNe/3sc1krIaSxYS6GwhPhesZOY3L84iUhAay60qdB1AQa1PDGPM+lkFEI3uqUZu32uWqnuudFAOTsgKcWVSTktk8AMD43zGbBhYKu+9cW2Ye8U1lL7E3+iI8fm8HnRiuWxGB8zKoqUZQ+FDnwiSFSsBYlCa7iLH7F1Cz1AjhCec8QsdlIA3TvbiKzzLCTmGZhezEJP8JiGifV8CDmWnrsRxgBcGj2CXAzksn0tuMGyBA1WwzK2DVtKI9utb9TV8CASn2uyzrr+OB5D7KPD0fuRDHSK2SEVPFkP7xXyLEZkFWy9W3I5bYyt7j9eUhHX+uk3WdT1onYAzogr3AhVIcMQSAeoyrxds81WaIyy3hEs8h+QzWVKhc021Xw7S1z1j5v413RLBSolwYaXrR0WjcA9VDnn+vOxsurR4y+Eca9T0+Fjt5Apzs5+nSarvi5rQbr6ggJVQ66qRv3SPIs/c5niiIVEK83xrY1fsEnjcJf836P10Ho35URQzqMlggICI/uBc7zgzPdkMBIvySqrCk1gzZi9PcHZoyNZO0i49mpGWnqDk2V24R27T9FwGkvRunOGw4nFS59NE3ixYz5SWZgIAayPBNJ5V2sSM3hUJAqXUl2vDlyXlqhhW9n5j+7nXhlwgibQ0Rk65QchlAXbmwm6QrSOX617DYhcBH12aUQMB8cQgURWmyysHV3pqvuLANvhjV1u9wkxfzuOdDJJCE4in8W2VUCTcdDtWg2L+RDAjvNGHFeLNmYD94JWdbtYRAGnH6oQWE8G+z1fgdnY6u8GNx8WsIH1thxHcle9UA==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sat Aug 08 16:29:34 CEST 2009',
+ currentVersion: 'a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463',
+ versions: {
+ 'a96a6d8b9ac73fcdf874d8a8534ffb2d43da8f5222e96a4a29bd2ae437619463': {
+ header: '####',
+ data: 'K1a+K0TdDtLXo6e4ayBuwGN6XSjub5Xgy5ogA6HWVqe7tiSoi4Lo7qMloK4TF29YPB2KpHOyxodkXL0YpqztESCrBK+F1Np/t/uThl7iXEFNSXSIz4l/Eo54UX/PZEmKZ+4nMiuYFgMq1rV3VLQmciexJkic9rABwnGMreJfKyDt2fEDxdVUwZXnA/l1PPPGFVSJmkNRjW/WLRByOMwJxHDK1ElbIFHdkFRzg916aPTTjcV+KpUkSligoNlxi9CgmfeBweLuDRJL75Osw3ha9WjQXrjTlr7o4sSVud3gbivYmJGgbOTzgge3K0A6ztS9+8dvvQleR9NETiWDDhJ1+3Y00jXc9jgOEyAQklD1dQ2dew23fvIVXSofVpr5lp88X6gc0OnD90BbxrTxjL0QYIMlklgTq40vNck=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sat Aug 08 16:29:34 CEST 2009'
+ }
+ }
+ };}(),
+ 'a0d5d8796793035d1b109654c68d34b94e2aa64b5f76d50f01d9a18ab1cdfd5a': function () { return {
+ data: 'dIOpF0FJxZCaFDj1XeU1L9/CcnHDffBgeOxN30sAH+++Dv0+skIYibSLkbc5SFOFKkZtKGeXFq1fZW1Uynj3ogRJ3Qqb8+4eyBiwViLXTFefYv/g0LcHqUYBrRwYpsATZg5VcZpIvXzwIT0N5dtQoh8IskMovV8QgBICHDAJImB64c8bDjVpSn9GWMSiSqsSOu+j1IG/C2/Qxxt5smKD6iINfJS8Y36iovV9vRocW1crj6mHatJxut/EhWbKrXA7U148q2/08EZPfAS3q+Onv0VUaKxgB2+nhsUSYjP3tvVlc4LS17Q9CnbA+eNYz/DfsaMtnYKTcSh/91ViA8Kv1AGzEbWIMo6On8shuf691bzKBdRG9Fcpm5Hhb+DziJ0Go7W99yu4n6exHAxJerXpcA9t5fpsTH4T3lGhbWI5HRWoU0jDqwdE2J5jyZaUVf78CjfgESRdJuOKIuV4QX7xxwRJP9vcDHgyhr1LcscVi96XQHnii/tl+BAUYdwgvv2vtTmuoR0ydtweQbDjgLXtk/zmyYmP4dTIYbU/Qec1m4E96jZdTalWU9K8AtnopuqfLdTlFG5mGtHrRpRpmu2o7b7P0v5V/WpUpPWzk75sv2AsFD7oiTHuZ5GKUfDs8pbp3LcMNk3nSour1NyiDWFB022hwbEk66aQaNxJfCKOWwWimc4TfxhVG0imjtdlp3MdcWcAY+tJMWklDm/q5QkuHy+JxfNzHFRI63+c5+/KSFHVUfZNoIRNdDIlnTiX8zKojU2X0QRzxEc/LYkIpon5OGRnJy9Rb/HotYbovBC8yS6610ttGohDp9v+zVO1uST2COV8j8p5iBJT+YVgQvLGXg/Y6ZQw1X8nGeQClBZnPZVhHcnTtQV3tyBdsc/ZkttJ5tLW+FF9hAt48IBnI1um28Fhh4y55rznF2W4U1PyJvsmVk9eMK6ccHCXFNvzCN6XUDY862pm4atKSbIMQVuT9nOC4G2cSl2/Pte2W/s9A0RqeU3kpZg6inXYNknhTAufQc8MBHuNPkMJGTOjOA/MUKHM73+b5Iaz3pBXKiw0qlgkfsGoRZ4LVI3oU10geEqNoYeeseDU1o/UDDC1wobRxy6mrob/EstC3zoIMvM651k2h0Pj5KbjE0+I4d2mmObIN3R/OF+hdeVAtZYwuv9aa18nTlYCx7Wo7mGwzPhFVThaZT1jgNfHVFa7lxvcdi3zo5ihhPUXjC11RrcKcdINMxdvQpa/xfwV5VNagXN0D7aXaxVQj+HTlttXx2v7ElkhpLpTA632ggWBdL+HZNdWMPjE9pZO3KhU0Zg7x77wfrj3tN2QC3uDUSOJOCp4qM4=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 22:43:56 CEST 2009',
+ currentVersion: 'e85f085a8ed42d2def7adc796b66a2e0a4c3c88d9f3e785eb12a6f5619d945c5',
+ versions: {
+ 'e85f085a8ed42d2def7adc796b66a2e0a4c3c88d9f3e785eb12a6f5619d945c5': {
+ header: '####',
+ data: 'vWUk4EzThQjfNp/Ji11ZI/fO3n2sp8iUr2Fahuz7Cl7uOCNnXXFoHlbbvZNgZsrVVmK3+YV5WxblVxQYlH2IRwdXsvkfzV7S8aqJ4V11tgst31kZ03vQ+pfPV+26Nhv32sLWLK6t/h+Ap701KpPsng6rrWd9YgSRzN0gQt80aHZtxVknZcpAUmh1thx/VaehNWEwLPFOvcGr6H0Ku7U6v/GNFyBmkgPYMh2Bo0VIhns0s20mgA9L6TxwLcMYikU19WqxX9GO1n11ii3WAWA10gfFjAwYagnQiwpl5REU73I5raYI9XU0XjouhRtkMMBtCJjeIDb3GCQQQZwTcVFXeokjtAlP4JHdMy5Hrl0LvjpDI77OU/rDHKPc5TqZngvFk06TjoQ7pg2cm7c8y34=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 22:43:56 CEST 2009'
+ }
+ }
+ };}(),
+ 'b81f9a1d9267daf4afb786e8d477c15aa3e1babc59b8ba09bceddc700116ab0e': function () { return {
+ data: 'bJdzIqpYsh6++iVT/jTS6bj5SgXkW5alx19H2laFERykhmkA0hxjOTaz2Sizlcsg+NKEQIASIjrVrLxcoIVnCFeJjDv4FOEACpMxNEzAiWTppWx4h6hepKT+h8gtkF4k6QvvVXHBXxRahQT2tqsbJWmOgmxdIBEeNETZb0u7gD7TjI8ATetaQ+TnhKlNbObUd/LsuJsZuWwpeZllEtNTrwNOrlHQJAUe3u+xI9O0lVBvH+/KHX4L7QyY98O/aI5wosDWPUZyv811PKOCMCsL/+2qBrH/D00YA+gCPy24riBrrK6RJWC0BdpSAUhPZA3OJSm1miqHNC7/JCUfH/alVMaoTzrI+A76LouteQmwZrXE/taTPY8zLD+TCgMOGhgxErVcw6278PQSfuERIJuXlCiXX1z011JrRE1k6JX6Ual8gwENvYlbXE2/iv/xzXK3WtI5vD+x0kRqa9LAClyhSqY4o5QXlEBJ663j9PxH/+vC25tluAtupL0nnm4sEtFmVMiZ3S3cRRZ6ZzquPD6rQjzdPpAJe0S8anC4Pf7F86Z+Ag3lbsrmV9Y5uDhx1T9pyWaydL6NzyJBw1gjgobSOw1wNMAzn+kGLqH9dP2c+Jv9zp60vR5Ljdf73jPxWcVTQxHZzXuWfb0MpYTwRDmpjqEsIKkyaYu1e7YHYaD9RNro7Aek00n4DOkPJ+lQHdeGLioNYraYwhQq7Y0HAKFsUYxv3o8vI6X8YXk6GgbhLXjBIyly9oyVMbGMShCuDE2dt+skM5Y1Wd1AcENJ+YzQrRwc0QWrYoABy/MlZbhgh4LpuQG6WajXw2kgS1Rme1tMviR+qqtnthsdWClKp0y7GZEA5ycBKABBX4RDrwIudiitswMkvBCrSLAxT3KYGxjlPwhGShf+zGiJ2vS6mMh2KS5rrcKaFtYsOSfBoNDpPaK9w9QS2W1EtwuUY4zZbUO6V1K/URx5PkZrSAcIRLw2CjLad9CbyhOZ7H1mW6ovHYXHwDPAVU4wYEqO0213w50QyBOM',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sun Jul 19 01:09:10 CEST 2009',
+ currentVersion: 'd175358ea0b9d32c23e4bceff2020eae9a8459466abc18d4399d988e733fc0f8',
+ versions: {
+ 'd175358ea0b9d32c23e4bceff2020eae9a8459466abc18d4399d988e733fc0f8': {
+ header: '####',
+ data: 'fUzxKwUtvtyjL1kIN6jfxjZq9CWEH9nlvSbND8x9sn7cAhmyuvmYR99cl3e8GJ23uzxHn9uKn5hTG0uUHXBMrqIpCw/QHzu4FDXWS9RrR3iGJba4DIBJPY20VpFJzWr9xbtnC8R/TDt0FXryE/V2ibiiF7dXNucbhlO+dPmyDXQpNDQf9QRRpPILCyfd01DSUVlvr+91DWgtGk19ZTAGB3Cl9WuUtRHUnBH9JhKLEohzou5p/1KcfEFwMZ2SOyiZPwwBP1NqE5fqHXqzPNzvvQL6bDxH8czkAfMlw3URJfhnlSuSKa/o15bdwMLyFaNrTjod3Erw7uvPxpyFg8Sw2yCOM4xJ1Bn88vttklNQF1ut5SkAwDYi0wUbbyP6CnE0ItVvc3MKZx+0r5RHzasJpQY=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Sun Jul 19 01:09:10 CEST 2009'
+ }
+ }
+ };}(),
+ 'd8568a483a8f443190ba723b391960554962760cd886b2484f2698816beec530': function () { return {
+ data: 'PKAlMlebOZaZDdwgP/Y5cZBzXYLpBdppooxzQn7kzWNg3ut1o+M+bpfjadwdM07MTtU9PpdanlG4GfDPf1uPn/XYN4msUo2V68J/tliU7M0q2t2PKqA2YUDl3UIxMlffhvyYBpwsdary+4t41pKkPjFt3/WSthLyn+E44BbjAKRbpp5w1y//GscTXDlQzdDGoSNdSjpu8hx8Zs4tqf/9UnlwH5kh6Wzq7+Uf+eqiC7S4fPfZ7G0OZ7+N2oKHiV7EBRSX4s7vcrs5t1S+v9HUhk6SkZ7mMZBjSg1x8sB3ZZB2sLAx+QCJPyKv9+/uZLrSMe8uFHBI2H0dx73mWXE/dHK8IjG9mZs2riA+KYutHT4jV6ja5JZeLWWuZhKzooJoSk4A7cbd2zxvkyaqLkscgVBWYWf212EvGZN0ardI1fW1+RTE8QchyX6ty1AyjbU2T15HKwLvdlL0v5aPscZPQJwptOMCrjYOwkbMTvxe8YRKZb1Z1VzyCn0m7ODxz0iXV2H6pj2hierKuqeOuK3HWV4rk584ctE2KBIHh7WJnkqRYKCCQ1s90T8SNkqQiEow4Bz509seQ8ZRROy9F8GSCOeIQS9DVbQkRjgEOMo8DFSTNT1HzBiGhcaQkweh7+V7oAx21v7F+UYEIIvHlSvKXTEA6rK+eHunF1EHRvoGGTD61btaaqpfn/Z53DKd0AMGK4Uh3eSGkqKM5IW0mgebs52//xQI/BUrEimvSu5u2UYLh6V9sa/kT9yNv2BfnRckGuNvaNvQBrw5LFOfK59UXeO9h6DcWs4AErrj9afu29xHFI/h+HdaixEzsmrboBqEn0g3EghL+de7N8z4CGGQ/CzhIKmAlR5f/u0YC0xebVNLSKUzTi1m3nOhreywKCO4C0kzwbduEX/bJ34SXuYOpkjS4W+Y1mdd6tnsAPsY1Ku22pjPQz8/aKRlDvIUKi7R+6Sk6Q1pIpcwh3hvEkN1OSBea1BUho4udaulPolefLv/kqNwQZeReztukD7sfgpZr3GEocBwnui+cCLj6WpVu2qlZpxGvnitmfJbaEEw2HM3RgzibGtsybeXwWK3orcEnPqquApWtnTXP8rhP9TBW8svHA1NjCgSrvDbjmSUPsRAHkV/zlXhH+JJZMv7tg4BYNuukJuiBFn/EewEIA==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 22:35:14 CEST 2009',
+ currentVersion: '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3',
+ versions: {
+ '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3': {
+ header: '####',
+ data: 'wuvj0q69S3FdDA0x+DniTe4no4vW6EF/xMiRD5GoDdNYxx6Npyxf6h/FiIjujncc7GK5W+p09Bqh4mHdsyBAwe/Y9c5mshB9VpPgsF9YctR6iLnOs7TGOWUJ/ScgskhagSGZme+huFkFjEe57yx2FiiswUW2XVI1SPtzHNx+sAGoL+XcB8B568zTyU50IpJfXlXR+10OTRMekaTUyNmNF+hT4FnRXQKY4XL6NKSvSH/7gafKf960kQhJ1HWI62OFYER04ANTFLiOdhfZE7YcEIG9W3G4UFPRI7NyZRewah+ETOLSrTdbhItY0kb+FrMrhNSrHLBjg2t3xmuaptDV7BoPYtTfOaD5zgwPgUCj7KnnbamgQiABGjKJnl9GMC3bej4KpKqlgMrHqUqu9AGVCtUc',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Thu Aug 13 22:35:14 CEST 2009'
+ }
+ }
+ };}(),
+ 'f8141d3cd5cf93f3ade420838f98e4bd0e5206d202b45a24822afc9099827c17': function () { return {
+ data: '6xoQmnyFcq066ExiktwoyXTDnu5+d7+7PwMtvUVX8AjU/1jJJpG0tN4FnVWaKIngm4cdyh9Em3F9iZ2wDJgQ4+IlqVAal5pFgA3gvsw8awqsOkQoibFcmlatSO4H3vExZ9P4vHFherBMIqo9u3zwqUClgAFEyw0UlVIJ6VIsE1qSQFksBlnxV3sKu9kjigYVWd/KodpNqiOiX3CEgQGmX8bHTh77VWXNFkYGRaGhZvXN7gx9qLSZwSLn2fzgxzBbjOlX9Wj5tQQ5pxev5pJd19pPAmbzJZcdZVFtaiWh5A8wwROX44P4X6qfcNWZt/rx8DRdtLGKlJy0GWTQMZXVeKqmE15I02EYeOPPbPvE81psZfCu+zToehQa86l270wbLKu8Cv+8Bfx8XJBLsYLL9asv6XzAoLMG2lWX/TkAPavJb8Doqpi+SEeK1YmYg7YE1hyIEjDrsHoUY1hVxruYfygahBDEoa4pyjQovhq5d0e1Arnzfo+LD0jcFuxFj6zcLjoTx8ugs0X4A0PeP5BG7VYuGYx/mBIWsu+0ksjGlkmC4EIHJpHbSeMUqfTxoMALmdg1Y8oGnHfCKhlr7ztjOBo+nE95iMQI+L8Hwnjto0hcotY/ualKzwDXf/BvlxlNov+Z9DWvMe6q+8yqyiVZE9HD7O7goienh51Pa+wV6K5jdnzCUTrK5ygk6rfbA6tLdjc1kAzCU9oJguLSwtM4z7WMel2V48kOMD7FaWZHPCatweKPaanV2WCeYhtc9X6OvIJWvv5O9j7fNd7xFByZNORQYaHFN+5xONOVJ6T28TtDn/VdVc8u71kfAYWLEG0Au+b1GY9doAxHwNN5hcP1uGHEsc5uR93qgiQLa+zZbUc8to1OylcLZY+yWdyiyUEXM01nZH6ZYuDdRUSiS6WkM8KPYLwy3NpX1Q3ZEC3uM1yi8589scPl4JhCd2XBdn5+iu231Uzu4O/fLTmN/8kNNV00x9Xa1Rj+0+Srht2WDgJVcTBoODikoh4733txmOl03KFCQd/HrRIS1DE1hrGAQNexh0Om7/WO+rzaSPmzFdyskqF1bXek0f3V1YROWxKIfHF8jz/wvqVgsGEtxgtCmXqyT3dRZlKUxNXn/ajgbulsensAQxUEpeB3OeVxNPl0SExb96oLSvMrLJO02E7hZLkB116ATnqN/GVtzHJzQLT0c1HPu9UuGQPv3D7qWpx1qMABuhaHbpyY3OcN6DOZTHuOzdVETIkYlPoja0TMyt6iHrlOM3dFtVDUos+TJyVSWjBSHVV3b7tbpGFulSan5J2BWbCNcSCMSfJFOX/U/JlovKAodr0Li85K6nej2XI4N8rVtV9ru4Ktq57/z6REvoBaIS2YXUOm9s2YhOA54CByVWvKXj0Pez6U7YVJvsviYtdp0IxJE6OrebzpVx1skZUFPTbcmuD5/GwOv6PmgciOJMY/nMQ3K+7F3A9AZgPFihLLPOh2NpNhoj5Zy6IlK3ObptD6I41HHlN3BsADzV2buAbcTDyYYZJ9VkBI2ZkkFhrcB1WM+qrkODiPxumXYGnGSHvbuZq0m5k8Kw+WUblmedHyMCLNEiwH2YQsaRd8s050wE4BcKnNU6wPn8HExn5b7CFjMJReiST08BMcszUTT677QQOcsbGvNPq1iYIrv0f2rrNHKhg2Kq42+jvHYxndfuxnTUjecCGtiGpuLdh/iehozSjuZfV7fZWhJsYOz/HAj639sJy+BMg7+gQv/yrujd1c0n8FixDryiogKLfxnnfWIUW90rRqcjRW5tn4mUfhf3eEP83PmKvafvRCyauY9Ho=',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Wed Sep 30 17:57:12 CEST 2009',
+ currentVersion: '6cc9ed382347f8ac5b5073f459428897d36cc9913947d003da874dfaee5a7b74',
+ versions: {
+ '6cc9ed382347f8ac5b5073f459428897d36cc9913947d003da874dfaee5a7b74': {
+ header: '####',
+ data: 'IQcdAD6W2pehgomwdoNVtFe+Aq4PAiHM8lngNDSesbTPs7dzFL8DR9iR0VdPUfnpL2ddaWB1dkOI83hQ/vFZUeAHswU/6Gmg7KQPpciVsbNMAHkxidDQMncMvU79oi0QRUvgWCrVbpuNd0J9Ir1vZVU2UT8LNXi4RibORSLhFo1GIyy6Kss6GOvDDWnUzBV6VYqzcv/nrLDlL908CnbmQhCaoGd5j/TjC9Hx1UaJ/xfqOwPP0jgw5b8+ArB8tICkpLbEEXSzKG64hGyY5DToAo5FS7QvZBXhzhm1qc0VM0RCUcvU2+sCm5yvT/qV3LRPDHKcoqle2PzlumsxyuiAlI5y9UaT+6GBbTrJ+FeU1zm8fVAyg3Q+FZWN8A/YBj1qb38z8E1D+38f0hGv21QfYg==',
+ version: '0.3',
+ creationDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ updateDate: 'Sun Jun 07 11:22:08 CEST 2009',
+ accessDate: 'Wed Sep 30 17:57:12 CEST 2009'
+ }
+ }
+ };}()
+ }
+ };}()
+ }
+ };}(),
+
+ 'test_test_with_otps': function () { return {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+ '9a984e219b07f9b645ef35f4de938b4741abe2e0b4adc88b40e9367170c91cc8': {
+ s: '55a27b18e8fdf1fb5e5bcf859cfa50fcbc69c9a41f04e371606a86411a98f460',
+ v: '983a6c79e7d5d490c3f13645c49760180fca05cc677914bf60fee009ead5a65d',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"3f5cad41321c89a0570c310f8e994a13c39c83842660c540960586fa9f2d2fc0":"0"},"data":"cllv5EtmluxBR3AWjet3jfZsJZDUXFddl1hIO4285PJOUymk5VP8nxLGSkYxkrbwIKHxxSERdwhcSVeuz+QJLFzx4hP/wngSNJT3edxh9pwM+fUs8nJunyK1LNS1JatoaWOIobTV1DbotfvxGUQI5QIxvKA="},"directLogins":{"index":{},"data":"54KM7x3emxWZH4CQDLBj4SkT"},"preferences":{"data":"AwOQXmReKkLpp8qZa4zjaWcY"},"oneTimePasswords":{"data":"1FTEyUjZ/MS1Kp91l3j00WNnOel6EFQhAYyAhcr90ozYwu6UDqlKNKyp5f2ndVZS36ReoxXbzIUYUJoaQegdvic/aVfyU/drjqVA/Ta2S5ICR050ewTUBs5BebBQT2WAMzKhmhQoKvMNCJFpNhLhJ7sbevyAHX4lZbpBUz92hTQ9jtpTi2pZ7IBUFI3JPV71H0reIs8FFA+Ugx3UPVVq77famGm5mh4I0rjY68zVvqNvfB5APM9OKR+AM3jkSHUa1QEzCEObMndR8WfKEyXlYoEhnhr1UEra8v5INHpSacU8210="},"version":"0.1"}',
+ statistics: 'tmRcqihMK0YvsnFoMKH5F/rN',
+ userDetailsVersion: '0.3',
+ records: {
+ '3f5cad41321c89a0570c310f8e994a13c39c83842660c540960586fa9f2d2fc0': {
+ data: 'nlihNmY5UjnGFxilT5LoDRvdp5WoHausCTiulBY9/Fm82ZJCEZ0mwH96WzsnQ6zMvrZPFHAr1zGAQPr82/MOr7xTVILjbEP6MKq9rOyEDRhY/3CVQgJVWLPfwiL9ihw9jKkd7ea3eU/RSj7V0UQB1zXzEXFqw0FwQcpSuCOl5hkYPecydA==',
+ version: '0.3',
+ creationDate: 'Thu Oct 01 16:21:50 PDT 2009',
+ updateDate: 'Tue Feb 09 08:57:03 PST 2010',
+ accessDate: 'Tue Feb 09 08:57:03 PST 2010',
+ currentVersion: 'ac353e86f69528d21dad0b17d00bbfb3e56c954e2ba71d0d091c903880ba1479',
+ versions: {
+ 'c84928db21b880a53e7ba1e51eebc4acc4b2bffe66f30368b8b7070973f5912a': {
+ header: '####',
+ data: '0xBSvvZ3EJhc/PmW+8PtpaLSAOmGo4i0sG9Uwe9RGbzDILvna447spjscE3IxIucj1EuBagtc2hvIT/tgkA5IIp4fq2dSvk3RF8h5+hXPy877tEZkiQFpigyUHd27smpYDSYc0Bzv0DWx+eR72TFIjwbU/CXxKR3qqyzma+q1pqIf1GiaZWlM+Qv4xmKEkJnRd6NdOyTwuAQoZ9q0O9pHtkDQ5eKQlwvuZuL+8Tdhn/Mvr5HzIset+4wo5HNvmkLNAtonChJpWWnj6Gc8LTI+ImSjM5PVku/O/pJKuCYtMovzzEoNuFWrtdn9XESKF3yjtpKzuDxsNPrfX5Mz0iBZCefbWEtmqeABn3o5IgkpW/rhSmsyu8UcCoq91O+Yb9+8qlcsJyjcLECd+wgkpN926vcg/LMTWUW6Oq8x1a6mM8Bw1u9kT0eZGgKvu0CZpv3bpgVAWbfGW3aTM/0moWjHa3amJaL0DPjF8Pe9ujUDlqVEiPHznzfS+aVB+M3DtjfNEMysab77imICRs39cm6N/XAz+CNnSuP+W4WPfbZZ+3xWU4BgS7YXd/AM5rlI9sXNQQgzVmQttNo',
+ version: '0.3',
+ creationDate: 'Thu Oct 01 16:21:50 PDT 2009',
+ updateDate: 'Thu Oct 01 16:21:50 PDT 2009',
+ accessDate: 'Tue Feb 09 08:56:46 PST 2010'
+ },
+ 'ac353e86f69528d21dad0b17d00bbfb3e56c954e2ba71d0d091c903880ba1479': {
+ header: '####',
+ data: 'DGvb5Ur86eYxzJrqITEX5XqtGQT3QiaR66B2vw5F+6fo6cxWwCztnoEFyLUPzZGWqYMIIwA2rKaNBW0PxO1ehu7kyyQ/Tj42g64JiI4sVtb47W5/En2blTtkPe1FjpBiVW9ZaTDo4ia2wMzrBxTpUJ/NCT/Hn/xAyhZrafL+SN8U94F/FX6n5x98fV9KwrtjPpqeDEtfwheiEzws4qoPy1arXgnaECxOFnri7KpjwE8WVzwbU/WFOGPewKY4bLcba4pp1KjjObhVcYyj3K+GkSHeXyBDQqZi1grKvGOGvoZkFr7CDndseaXZ8og3A+NpqPcOzbqNst97gsky2RWc7bD2MfyAJ+QHzw5uDFCoKnAv5VH1HxwkShLb2QswQFf9/AGT3IDFi6ssvELk8xSMTgICV9jUwcTwkjkBa1Zpf4GTr6qrzen4YzNeK6XxgAqueKFbJoC8p0l1dBGBoH5zP0bkh3QENEFk67FT3aXUtInP7ZDX9Fnbe6qPkoztgmG7TukNUs2pk1Z/iJTVrUdLTVtwFI56LaTfRT8Ica+yFJc+1zoKeEg9LKcnbgfPY6WK58o1vXlhYb8j',
+ version: '0.3',
+ previousVersion: 'c84928db21b880a53e7ba1e51eebc4acc4b2bffe66f30368b8b7070973f5912a',
+ previousVersionKey: 'vy7sCLt6q3xaMngGjJxVLcYe60vW0LHXDVZGo7QWZCIOjK26Yn9JvpeAi4rKJ0/ggGGyYJncqHVr68u/VHuwJRUmlRb7JRk5k9gJOyuroyx5wg==',
+ creationDate: 'Tue Feb 09 08:57:03 PST 2010',
+ updateDate: 'Tue Feb 09 08:57:03 PST 2010',
+ accessDate: 'Tue Feb 09 08:57:03 PST 2010'
+ }
+ }
+ }
+ }
+ }
+ },
+ 'onetimePasswords': {
+ // OTP: 'yaxx k7ww - f8y6 tqz5 - 58b6 th44 - 9cwv q0fg',
+ '7074103e8ce35f813dbfb9c90665bd66ba3f5b1c9e4fa7a3d8aee679b7a38102': { // reference
+ 'reference': "c3664af5744319c6d3b874895f803df19cb0492acf27cb51912110d023ba9b38",
+ 'user': "9a984e219b07f9b645ef35f4de938b4741abe2e0b4adc88b40e9367170c91cc8",
+ 'status': 'ACTIVE', // 1: 'ACTIVE', 2: 'REQUESTED', 3: 'USED', 4: 'DISABLED'
+ 'creation_date': "2010-02-09 17:57:14",
+ 'request_date': "4001-01-01 09:00:00",
+ 'usage_date': "4001-01-01 09:00:00",
+// 'key': "7074103e8ce35f813dbfb9c90665bd66ba3f5b1c9e4fa7a3d8aee679b7a38102",
+ "key_checksum": "53739910c97d74c80c6028eb3293ffbc652def811d9aa11725fefa3139dfcf29",
+ "data": "aN3rPl5rusBWXveUpjKqZNFLRPWJgH2Zs8HYQIaS65QObQFWFTZ8lRpBXFoPlvSOHcHQpEavZUuq31Y/2Y9sI/scvmZjQ8UEaT2GY9NiWJVswGq1W3AX8zs32jOgf1L5iBVxK54mfig2vXFoL8lG0JGGY1zHZXlkCvFPWuvwuCcH+uRE0oP3it0FvNFBV4+TiiGnGYgD9LPAVevzr/Doq5UXjn9VplVU+upeDTWY+7rlOdIOnZG/A9P9/dQtsyMb5c5zABD2FNpQQ40JDfG/nHt5WvfuWmPwUisW1181oBAd5BwF9LgVHdrhcSh8OuUL7rdbKTPTlWT826I6JNrFMzYGMY+NV6gllDvc6eCNrgI98ABhL1AoZNpAXXuCy4uQhEYmj+O71C/eXEDw+crMAXiCn6SZrbTM8GT5TQ5yF2NcxhudopO4qoILjnwEHZZ+i37kRDFg6oCBccCD67oHTPexUkSqnKIIYLli5CdmE7UdvX6LuVG/VYJKevOUgMf0UzHDPgvtlp3gsSo09TfNPOtoeAiogL6cAHb1seZwv+6E8Pz7WqkkOTsBQYeHIfPE0OnQPDtUjVRA5MTTX5zt6rCCNDKNbqfkPu8V4am26ykaWOSTXZYIcfnywkG0TfPzdAyQvyxdUyl/r1b36bclQFiXcRzkz9zS9xx14Il3QjYXRbIFWcwm/mEFltBFPdATKo5Zh+wcTLiFh56YEUVa9/h6oN8281X6zxH4DOw=",
+ 'version': "0.3"
+ }
+ }
+ };}(),
+
+ //-------------------------------------------------------------------------
+
+ 'otp_user_test': function () { return {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+ // username: 'otp_user', passphrase: 'yaxx k7ww - f8y6 tqz5 - 58b6 th44 - 9cwv q0fg'
+ '0faed660854b02a5eaa7140f58d9dfee875361b353609f638efdd013b95458c9': {
+ s: '61994a953b7c053abca196ecbdb76547c9936654a434972d3d1de84e927077e4',
+ v: '9250fc0a479f36b9aff3fc0c37e88169cfaecd25c2c6d59ea2f58271c2106265',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"a1bf4f4c924a10ff0e52bd9f9e7efce8b09e97a5b0389b1342b4a62226be4cc1":"0"},"data":"Yw3NlPSpFc3YQl9pMh2tvcVWHVwISUBoFGqlJBwxtuLb6vpyEg9AJs1LDjtLd+4Zh3rkBD8Hnxgc6R+DpNBrVAq/hENoMVtAtFm9FznEQO4YOe0jKGJei/jTRrG3vf4pWG92jUHd8JDZ482AzArp5leaQXC7Pg=="},"directLogins":{"index":{},"data":"a52Xx78tyoffHRu5J99fr3sH"},"preferences":{"data":"AFqk+zN3X8UzmWw7HI+p/BvL"},"oneTimePasswords":{"data":"9iwi/ScBH0o7SVZz5nLvu792"},"version":"0.1"}',
+ statistics: '68Nb/l04isS9JcTQf9bmwq5/',
+ userDetailsVersion: '0.3',
+ records: {
+ 'a1bf4f4c924a10ff0e52bd9f9e7efce8b09e97a5b0389b1342b4a62226be4cc1': {
+ data: 'hNdplOo1+O6pW7HQ6ReYx5CBDzWL3oopwf/7dMH0RVMYHu1LbMRZDRZTpjnLX33UoCkthF4Br3xkLwg5gDMuR3unx7Eyyf35yZj3rcLr+ckj/z3rV2rlBgVahwV5xh1E3nVXiZueKG4qUqQisnrJWj3Cl88c0KlXtsMew2s93l8OuJJS0g==',
+ version: '0.3',
+ creationDate: 'Thu Feb 25 14:11:54 PST 2010',
+ updateDate: 'Thu Feb 25 14:11:54 PST 2010',
+ accessDate: 'Thu Feb 25 14:11:54 PST 2010',
+ currentVersion: '7b0399826323da5fe938d8f17e2e03192b84af2e95e6d6dae0c8717a34cf4a72',
+ versions: {
+ '7b0399826323da5fe938d8f17e2e03192b84af2e95e6d6dae0c8717a34cf4a72': {
+ header: '####',
+ data: 'QZgYCpbzVvTd4KNRZW25SMXSyv0PWt7oje3nokC7TWSi/bdxcS8vQyosyFWWa9r4lDpO8/y7FYaa4O8b0ksX3MCOiQeQNI1a5+Bod9sZHWGnILwUnm8jVnuLcOrG/a69/ElLXdObwTXBvYDgHul1gIGWaV7cxYZmYFU1TlgPm0lklPrWqvteurZ8EzdBa9wrUOdKEfEWncn83Mn0KGXnm8xARYu51X4HSWrzKO5fpYqk5o223esndY4X/nLG416HAdPTCOwigMcqHV41asoc0pZRacQbqEhK56xAVKmTnquMt3oZVc/oRuW16ZajXl3A0I1U6ZASOBIZzSDaPW2vKYyEzLT2jxL3fq/GDgs8V5Ctlk8/b0Z4KjB/00NaikyLaVnEvPy4gBbzPHWNEOXjdAGynL/Ez73mNIgBEEUSviN5D2usydJYHF2mTFqldAy3',
+ version: '0.3',
+ creationDate: 'Thu Feb 25 14:11:54 PST 2010',
+ updateDate: 'Thu Feb 25 14:11:54 PST 2010',
+ accessDate: 'Thu Feb 25 14:11:54 PST 2010'
+ }
+ }
+ }
+ }
+ }
+ }
+ };}(),
+
+ //-------------------------------------------------------------------------
+/*
+ 'tt/tt_data': function () { return {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+ 'afaadd70f647886043b9196c861dc04f5605baeab3812ea23707fcba08c4a54f': {
+ s: 'df781ec363a380a0bb171d7d4c226248259272a964f04fa2340c77ff84bbc594',
+ v: 'eca214d990ec971a61cd9c5082e62c2d241f8e1ec805a2c26b1d31612747bfb0',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '{"records":{"index":{"77ecea1a9917ede00627788a28c6e90acdf7e5c12864cf236d1f41e718af7528":"1"},"data":"WrCX6cVPslFMYTvGWv7PVwWicAlBqB1I3QX0TNfxM6jrPrObeV4hRrRezUn1rLbQgXYFiuZdQ9mN8n51wNFcQvAXi0TcqmhIu23t6LI360ITPIwq9vNNEndt66ma6W1ANYcx6w+4uKga4ci5NA5vRwXN+s9M2G78HKApu3tvg1aayXmcr7FhoQ=="},"directLogins":{"index":{},"data":"h0MTipBOXYKi5HWM7eAEMw60"},"preferences":{"data":"Ws8wpQlRPwzQCt5hRWrKUUz3"},"oneTimePasswords":{"data":"eclAiKZ8snvT4Rwe7fCyUYXl"},"version":"0.1"}',
+ statistics: 'tfQF+BrjAQUWyiXWOMkWApmq',
+ userDetailsVersion: '0.3',
+ records: {
+ '77ecea1a9917ede00627788a28c6e90acdf7e5c12864cf236d1f41e718af7528': {
+ data: '1DGumxvp+09fSbLxed0wnGW5kh31ORuA7xhVOA==',
+ version: '0.3',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009',
+ currentVersion: null
+/ * versions: {
+ '': {
+ header: '####',
+ data: '',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ }
+ }
+* /
+ }
+ }
+ }
+ }
+ },
+*/
+ //-------------------------------------------------------------------------
+ __syntaxFix__: "syntax fix"
+} \ No newline at end of file
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.data.old.js b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.data.old.js
new file mode 100644
index 0000000..1cb92c0
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.data.old.js
@@ -0,0 +1,172 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+MochiKit.Base.update(testData, {
+
+ //-------------------------------------------------------------------------
+
+ 'OLD_joe_clipperz_offline_copy_data': {
+ users:{
+ 'catchAllUser': {
+ __masterkey_test_value__: 'masterkey',
+ s: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00',
+ v: '112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00'
+ },
+ 'f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674': {
+ s: '097ca38b1792023d6c1ffca50606b6040c6b27a7667e355ba9e54e6d47d8bf23',
+ v: '34b9f3ab193bb12dc93c791637b8d80364564b9a39ed7130cd168d52876914e4',
+ version: '0.2',
+ maxNumberOfRecords: '100',
+ userDetails: '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',
+ statistics: 'iFI3fKfuUd5Tqj/iRCJnIk7isZ2FOYPr/yNfICm2U35oUeTJ/RA+l+kbWiYrecpIEgk=',
+ userDetailsVersion: '0.2',
+ records: {
+/* 01 */ '062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80': {
+ data: '7sgxSQlqR+wh3g06M2+sWp7raQxjjQ9jLIz2OcEB7SckuQcXNrhMlDCbL6ncSljtzgqhioWrOB409kIG8lc7h6ekghOE/Mhi7rVwAiRfNGB7r3mYxpEXRe96O2RG7E+NcSp8ezl+5gJ9D0o1abXPeFQYGcr95hUioCfyY+xrxY8TJVwdb9nHkYvBdKV7rCl1dTxgsKWK3nlo1T7e5uyiz5YUAE6BrCtTFAqtprLI/xOpRti9C+llohS7D6s8hkCBPZfp3chKFDrgpsCBFLhXN8jrBKSjHi1PJdRQzpJsgrxyeBj0dZx3gTsYOXqrYgdIzFUo7K1Tqb30yNprBiDMr7j0YYXiSvEb7OuOIP+HTXGN+yt09bk9LggyY6Fh0e+tenjQQ3soySN/XznOBpEjXbzXoz6fR1MXVnE9GgaX99LVNqwWfq2rIBdSE/FfspRiWP3BY5jIrEkNeRclS05U1zw3K3wxOL+cB9r2IynSXnK8QcrDNNRZ0W3PhsSFfByUXuviLSEOPuJa1mYP29L9Lj/WyHL1Gyl8xLbt2H41S6+wvIleKMuc7teH6wPXbnYphvbwBowoI6HZTEFkz3dQKhhY6VF/81iCXsuaz6BjyrzFX6SkQ4S3lN1tv4opQMJFvnmHb6EkXqVWfeIXzJIJO+owL4vDOf4okpAD+HPjjlVXhq6fvyM5UBIK9+tzJW78X/zifrQOfWRIhwjVsfUdZWmZ/S35vnHWNuXkM8GBYrDysqxanDtah3U8XLAiIhFtBOzpzr6qGaNDOKKgG3K8QXT4bYHOq1rQVUwzQuKhlCyStrRMQrC5Ry251xmLy6dKfppRarVeGDtzB/30BbtFNdZmzMNG2g+Jj5tFCrEtCMvMiQEWZHMU3tGMFxDef/KKdv1fFTJC16jmaUiCHUZmNjB3EO9R6xPVcMlAVKf57n3efrpRk/GTmm9JhAFkuF/wsveH4JjPpDUdkHYFu5tHbb30sbga3ufBAXbQL4ck10S24akU/cKraFGLvuKGaR2U0i6ih911TBSf3pAfZ3RFbBhVIl+6rSknC5+IXoBR7MRstBPW/xC9pQVjN5Qyn0g3aUjUSI+q4jcTuvMl32NtTJbWRMGhfkrpVzypZTyPnIh6XJkyBghlUARXw23MlbjiZxmY4ScDmcWZRZJWIknHlqjDKFDKNnwrfnEI9qWyMDno+jA/DEQz0mnpdZYEsoz1/qAmAeDt89vx',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009',
+ currentVersion: '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3',
+ versions: {
+ '4a70ca20167875a936d4540f19980e972c20f329a65d85e9b0ce709f1fc7c7e3': {
+ header: '####',
+ data: '.....',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ }
+ }
+ },
+/* 02 */ '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 03 */ '36ec1a41118813ced3553534fa2607d781cba687768db305beed368a8e06e113': {
+ data: 'B7RNc32W4K53PWYWQ4aUkqSLV2O4bwExYXVPFT+50MHxrhYt4/yh2idYXAooF1ImaIlvyUsIbI4EnIoBQ33ed2wxuSA9HVC4+wTrE05EfjYOw66yJO6R6TbIazOs0Fob5PJCFEW6evmb6WWf5KsHwifOo+ACMHK799yZ1dxfaIEjRBmLCtnc8sTNvo8i6McAf7WCffA1vXbyVPEhxJjmrfIDqvkWsNR7jDV5xIA021WicOS0FxOnzU3FecU7EF/UPcYjTKfe8IKw4nDXSKIIgXqCdzNYsyZkw2OnMDVJoSwNdfiog3H4zFy2m9KZqPjwnHHj5BE8rdx0JuZoSnTFLR05p4KdWfOU4BrjehAWXZdudYqsovtDm9uMLgUfx4DV/JKVmGAZ49GWM1Tx7pY5PBbJRTO3674FGWYHTPEMiIpDk+zt1sYIR2YBbJTq4fFOIPsgmOfvYdTkSvdHLk0fbxoK12w+atgmXAiNgE6T7DlYT0IMZlEesw0Spchxoo7lTBUPXC93bl/JugyhoRLUof4dxFvsIvd18Gnop+h7aCVW1S3lqZ36TG/N+hlM4U54FkpHjJi2fN8M8EKF0N8n399m58RNfsX2FriUVHozdb5gpgUXnQnVaAUrtv177lz0sRO+9KqbhJ16dCDzMFLcarBvXGqWkj+ZfkpNIaoyl8KTeHTQTbSS2IwLTvs69fbMW6Mub3VD81CXyY3MXyF4hT0U3CFVD4jQg+xODNnqqrkl/LebWy/XP/HOoNTxjygEu1JcS7zCptRagNoucXVkWinyKGjR9fSEltsrXG2pm4w2qsovRB3vfYp7kx2m5I9qc11K+JKhgPUmpm0S4BnPdfpRMXq0w8kxu08Mwm1Debhrzrgjw1/s1ZtcpoFgJv4EWLboWbo+CKWYdq0AGl+b5UHREPnGOM9o9bOg3uvaOEKZyMq8wxECBjdas4wjRbMY83PcBfzCbOU+POrcbalmtwn4/ILkHPsUcaOHYcnKwkxSYIDRxQc69mHw1+vilSHUQ5dZYSWIRvV3yPe9eqZPWJsWrOyhPLCf18BoNdfbgHFL7b2KN9xLMz0tdHxVozH2TnwAavcNqAE0hVIgtyEDoT4rI7FVMSu5mCIN2KOxgXB8XREZokT1BQ8+rz6JraS3JYQNz+7Bd6iB6OaTStsFoaBkj50MszNdwhRViOCCUk4bUr45XRtyh4ZEXj/I4pyJUkhR5H8/qKKD',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 04 */ '507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a': {
+ data: 'ncSFmp/+n1pYUKi2fwhMCevSwFYO5irdcpOlSxC6YPOKYavK4iUbtBsilYWd0hpvUHW2ItaDwiyNFxs2Lwegex6dawKrpMYkPBcaZQDa746yACGgCkhz4MAGnUn5HCmz6xhpCVXMMKe3w2nEOjRB+pOMOeJt2n7aw0hCJ9tQ9JTFNrZOxeXrqoexrd210Rmr9FnKhLIvhNTN1/vXRqP0ys10omJ2mowzF4KoEVmz3ET6pS2d7tGjt9M/OYsH/ETWWc92doF5PO84g5/3HePaCo8NCqq4ul7AWJEbdnkxxmd7urJzIscPQPcoLxL7GfG5LhHTFyHlfFz9dNlccfA+OPftjyfjXTjLYZzbxxbi/nAB9Esqj5AoHfqaJM1ZOrZ+qAvm8Am3+HAXrqtiybDITrCLmGH9ukWDsx7R3lYTlvjArwORBUH+4w4/uYGscVm9kOYj/Rmz/ZMH9JibYFcPcOnr3rWXPFUL/XsXTrm9lzOvPyEYJmkENzd54AHC4Lr5vHpeuipWFLiJOrtn2WcgDG/DdLaYGKsmISXj74XDtP6Ee5lKOtbwwcmVNrl11UCQBEFHNybhXvpil5laKddOauLJDKtaDL/mKYPbr5YSk7HPCzRyE7HM2dC1MpBHuJ8g+hDkgU3wQcxYduKLRpuC0uOqrODigGWhVrdiKdZanlWUq9EkE3eH+E2A/CA8mHl7UNaH89XSvgV7uZyOmK7iZ+1kd9OzhBLQdJnK9qqP467Y14KsTt1E1+tqlqVAuK79QMnllaR0e3ztBRAQsyf5SD0KuSGXWz+z9/RjbhamW1s0UFRGh3voQMypU5RcYfYUA5KVg0BiVKFaiZBZKLo213hKbrgE2KoqVDEmIBFmwsu/S3EDzUY22tTB+o8ZKQiYesAUafGtnvsOLa+h6weF1ZvQVBerbD3fhb2o+d4ZyPkoRAsop+5it0QxsWuZL+J2oWybaikxIP/1ZM2ow4QZLaAVqihyHxqhF5UxZ9zrWxfp34BIPzzU9esSifrD0gXZ3mwutaCukZoijnGODJZtFOy9Rl1gyS1IbpyRbwz5O/YRl4BsD2aOk4InajT13Sa1BLPblQcrau13aeg/IzQhcUJ6n7enkrqiJFTP8N1aFAuYv8ilu0V2ymIuCLUtc4cbo7KyA+gnHhZA+DjjrhG/izOyWtQY/WtDsqvo/6ILwFk37JDjHfkchPEVcdl9qT7goG/4zTGX+lx8UTKKZJjJhLjA',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 05 */ '6026370f3db3860d2c46a08e389a7e906dc14f98c8444b21be9a7e9f405a2728': {
+ data: '3oUg1TD+Lu4ou06j/MddOTXDqRM+qSKD+6Iuzia1Hop1w7v/BXidqeoKJZQI2VY9oO9B70Nr3B3wDROF+ycy6Rq+FM/xqUGHKXn1lAaSc6Wgj6TLQ6eRF6YZKSPqTj7TDWyw/2pEWk4HjcT8drTrCaC02tzAXMhYWlYPQPW4fUdq4hawoHIdopUN3vafQuFjY47OhqXKav3bNao=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 06 */ '6c25be8e145efb26a1abd59590522f73fb2e3dbc139af2217074d9e2ba92c16a': {
+ data: 'b2mcYUi59l434kGl7ij6dBu3063UL1dToMIu3Zsa9RV9RzeLKnezJhLKunqoAm7KwiJeqDo/REexHI1cshGYtHasVXXuyJfMx1grH7yhoWnkSRF4Sax6w5E5wnGkEpGJHOxXJ9rOjWHZ7yqCUUCB/dqLw4FwPOtRb/ynkBEYztEJA6EKGJuz0vrrTOsT8HMXtj/w6MEZ7qI3fPs=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 07 */ '6d45c2fec275b7482d41c76b20507100cfb6ab49922b876f9dd3040d361f4a18': {
+ data: 'jzjPgxRHApIJA/6hiY4XCtb5+eKzHlOeoiGwfVDvip95zU7ThHbdmxOUomeyCOZ3S1SGPT4lHvqZgfVG5m5RvH3JaAIa8EY1ZElRohoX3rETVPJzI/Ov5Rp3lZjtWlu5meNrcJz811HBHrtBuJxAmSjYcY3CCal+oC2zcK2fLZR/iOQ+69ONVFhdV9KiOqzNf8IisIa1sIgFopqsdHXiZ9oLe0a7Y56q+OplyU3A+TmxKLI+Qq+WkjvdMzZDDqzYH47me5niugYPdkQwN6WQUE0sK9QPs0uU4TOwqCwN9nPH/DoQ6oXWAu2+R4iCyt6ZjLNkClbps4s8Cwz6wfFQ+4T8bcldjveJenmrYwiUzxSd/4xa34yFVXVw2OD0n8yZhtvNFvfoPy+X9z+Y4f5HlM0qzL9zYya4KwWjFQzhOxFjni9JyGM2PJ1BctB+q1J+CHuhlVjUF0Y5zIS3zFTET8jjDGBZDWB+Ao9E8fUD+0OJJUdKJ4kUfn4ZUZUG20eLBjmJqWBGYZX7UFaPv8ksahoK26Ol6FnBE4KpPStQeDgXZDzGsiLlEsxHJLUFkNtAUXozw38bWWQvi2VIFtkw/ZViPIenmSNT14kUVWdrlKQC8x0+wECeh5ffv0i8UUw3v8QC2ZE7GV0OMl4ySlRCuDCfZ53YFoB3HIR1hSZMhHlHJDPUz8JOuXdHcUQaJeNrfWoC2KkKb0ZecBj9iXooDh9yGi0g7TS7eyhlz1LHpzEWB0CPsZqhNGMxmfFWur7v2hrYzoHQOeB19ZSmWzfUwd4dRpqMp0x1lZaF97jr+yyYhnuQvuO6lru15Pg6FqjzhsNiLtaqtyoaMiHZ9veZs04qZZ9Fn3U7HeJzjZSAssdLnvopXi363cXm9JqoClyV2OemnVoRwOZN2gdSZxGeOefKR7U+lrBAbJwViMnmT0Nd7AC8C1k34iEt8HJmpztXeOgX5CQpwUPENMCUPsookFbIh7e4aByllEQy0gBbxUz8JMIWYyw98hdASnZ4s8bQfSmiMM8Iw3YxCexKB62LYYJn1UY51NSnwCtwRep+NhaKDk2d6SLh9owxnFbjhw22RriPd5f1InJycjtpvMzWLavl/hDsjjj1kWpnCUBTM46LbERmjz+s4x7fSf2FhhguBT36elz69ivXoiXI+7p0E8f8HsSwm8sgN/AA5m1svsXsdWeZFUiWtAwLg0tI8YNHlazbvFCXfIC6Uhq9eDv04iqdZ3rn2c1rwSx336A7ySTBFdxOCJ46F7ShIhNKm2N+5Qf0K5B2L882fbwqiLsa64+X9aKvufKTsd11vyf19Zivg/Ze0FWoGC8D63Nh91k6Hu32RT+uAtJIjQIZxu9yXJM9lMaRA8ieER+ghrLHaGQqF9J3WmueER3UzU1midvTynOV6g==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 08 */ '9dcd2a8a0fcb7e57d234dc4fea347f020a6a01793e40cf56a0d22379e590e291': {
+ data: 'xXZUJjgxn62OqnzAvScHJNo4WjYEFp1vQ4ueBe1sk8dH4pXZUKV6m9c1d2cLUgBj4rUNP5cC66GiFHV7G5BDZGLrfrxUlYU6BWvzAz4eG463pRDhHXQgPrhlIGDlK6ovaIsjwaifvHaEfLREoXvLFluqu406KG58guhtWdIFK0rLypyRo8uyltGbTz8wZdu8atY/JYQnb8NaAf4=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 09 */ 'ca01bcb7691f70818feed46c9a2a91883ac543997a395535aedbb49de166690c': {
+ data: 'YXBq1ZlFhoosb2Krnk0Tk8+LKyecTeZ3UdJujrryEgvMnhGJvSVVtN3uph9gts10Kw+tF5wvdAtBFdMUpvcP3mOlbnX7+HCz+JsJcLLVvuGBU9ciwok5kRKQuvWffmP7qFLuqO2VJUj2ozjcpVssStZOrfDXWrJwYfkd9IMnOJVmCwjFeXpPlkOeHNyhjPlfZhWWlTga6xLdEXaVeZyjDegzhlhh9U3e1CLupLTwdxXtNCPRXp8gU7e/I9HP/qdnj5BzgDxaKx29v/AUcgOt3jq5oWwePXZL9nVOp6rh/UqduM88tyxEbnBQxcGj9KxTVsIh6ywzQZgnPtfrPaqX4Fvb1P9cGN80/F+/JXVgL3fvrcxJDGxZj6VYFTA+cHM6sV+F4/7wMLUVlCcn78BB6/k3DC4mYUv+8LSxfZf22bWCcSyubPTRhmCm2/sgdOloDUKT4AjfZivlpJjkYNDtNmZn/rUpMr3uLiHeWDDNB+eGqk3lAFhihBPXqDJ3o+8c9jrznedMxQPkgYD0V9ryDauY2RYjQIhmXqQlnGxpGOO2lFDGYtkwsBplPy6LDkudzJVAqp5trBR8Ty87k65hbhinGCra/DgPqIxjaN5pvZbXkOLoaIoLnE9RRGdAwfUTMIg/maNRoDKaHO0hJ3ksCflu71H9tzPjGM7BBjWjQgUvwDJOgnEPyZv+noOiHfNIq3u8CfI8e867gnEbdtd3oPYex1aBYIQ1ELAxI8szUtSeMDHOouXrZKwy04xVdC90KHnVWl49scE2QfgqV4hqzFjtuQgZOqQ50bI+duWDm7YYTwKVlo5QKy40faW6dPIfDPRsxY6M3gcL2OPBm+WMopUC/o/AFSpxPaut1DOr3mXBip0Ejam9xmJhMOUwIJDoE2U+8S2s+UJjRunLb680vqbddF24aWxpLL1Fg+hlRZ/Jz1ZajonH9ktQhoQaTl+w/4uHhMZjKH7/FaRqge2WMMwVjOd7VXNByBPia6W7VbmDk8LFCeCsC1DchcDaMj/JmoGXucqzDO/sOIby2YCBsV72ReqTNtu6SLZe4G61DWA7j+6NiOSmAutYox6VsoRsKaJYkyBgmq5hWDZmWOJ/cC1pQa9EMoXzcaEPicmXx5YE4xF15VWpI8cKTM/StLtLcqTs78Z0fQAicz8YhhNdVCGp/zcjJRPyL6XCDhpvMxcIOnU7',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 10 */ 'd5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 11 */ 'd620764a656bfd4e1d3758500d5db72e460a0cf729d56ed1a7755b5725c50045': {
+ data: 'Ate/x8b4UWG3C+gZ7IzIfZrHSlh3eSANVYtd034pXi4V73+rc5OynELEiMxDgvcr+4r5YGNPKvTB83KzOBznmZsEJhNpCd2Ezyk1i3FEo+Wur/6EYBBvDfHSQNrRfYVcNlx6+i1d6a6lDYxOcxfEPuL2141KsCRxCId4FWvDU1Om48ekFNyeOl5ND+k4GLymYIjG7HC6VQZOwUQgzlTfZpjeJ1q3pdPWSEtX8a0b5pgmHVB9X56u+vjfYFcs2ieh3UcR4Vg8fIJQOth/pE2XoZfbALyT3pnEcW8vQrrmFcavt9bDGGzlEkGB9JEIyMzUqVndV9Sw5OsCMgOEpMKvELRnlyieUvcsYSL1s/m8GohguMrXDiRV/nCUhZbH/j/8jXEX4kfiaIT5uvPBymTyMTGGLoPBT7mOWLuV6NoU6ND0QwSEXNMpZDJDBhl37hR4kD3GgjCv9gjasADAmHPZF386LNxnOIMTfrOIwK3sXkfhEU9EKdC+QT+W85o6HQrWXsqNesxU2cs2uW7rmadUBoQdyYTtWH3cBWcwKH56vzlOG33JG1+DGH6MFEd4vn1I0aoluPuBom9ERgLXEoqw1tx4OAx8UCcev8dnZF1YcGhcUXyORjgjd6CTfMDz+f5YMkulGwPRcm1D7uof0a2ryV6+c5WuccUX+Pe/Vj3WOQXts7pdukLp+idnlpdSw4roJWU++1i7727MIWGUFcKMH6qyH2yZ1nxLNour/u6FYlxRvNkB+vCr+hko7iBlTw2GMVWUMgnFS0A+lQ1tGawAM9h8lpb75GCbiWNXdnbTx/GdQzKMJJXKGpOeuWOXlJSEJHjWzVwbP21ql1OaFLr9ihUJdLzSsjICW7pGH/iuhuIlx84N57ctV2BTAYJtPLG+f3rv709lOD/5pgdXTLijjX473Ymq0TgGBSI9am0Pwz7SB2k1LVkBVfAVxR6p8Vb0h3S1LUojoJS5dfGV7TtTu67CemoRNISdOVL9kxCoue1QMsd7GTnY3sy/P4eFHovCtU0suUYjHRojUz5B6xPlL92Jbdtq6fGv+V+p/HnKFXkf3BgPnSm2zexCAEgT8yuJ86UIIWIEhYN1UtzJVJ6BykCCGbZrCSEHyfCcRLreYYpNcMPWpLOLTMFpLiHtW6+x6/tVB07K2NDpYZUY4Ekym4bRrLUXtDjjcltL8qUPQf/uBU6tfpGrdZB5OAWnsxzR0x+4ycyz84Pq81NMUVKnvhUWrygtatZhFYhNWYCz4NRfqwnwSRQxTr/2NliO22BhGc6fjZWdXdqmyw1+UXVp692nsV2FCldz8+k6LMA0AKBuQXcK5v4mYQOWmSKlH/CpkPkOEIPrQVmgjMv1/qWaEIvRJUYpPsnFUD5a12NlBBxBvHpcXemHZZvdgnBnOyAjIbhxCAsQnw2Rc6SzF1z4yviZ8PSeh5+zavbI9rgO3UtsPBO+R+5kky3KxtnLSV9m6m6Lb1QmpwDKQ2ddTDXFLBasyE0WdrCDBTDpCLDRsLWdODzyeCH0yWx8tfKfKRI5dzBQz4xJ9swkC3LAr7XubkCw8RMzCUAC/WKMRIsoyXMP2Il38fSG1aO6kKyUvY6ai8a8IDx3Do5TQMgS53N4tQNls8ZcglYDydcXhxsH7ztEjis/2omJbwadtTRYv7fu5jbZAC21XcGhfbgPp8h3Zal0SwuN6s+Uyz8LSwnZgrN0N6d2cNE39628kZkAwI7piZG7VV0XocrGnIu+6oe0QmJsxiAMvaheh0K9Dkf98rS2OF3LDwosaSzxUBD06BD1C2BkleM9',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 12 */ 'de13c0d036234c44214062bc0a89e5f127470c464333493a485729f43cdc26e4': {
+ data: 'ZYvHAVCnw96hB+0XxnBY6p+vwvup1BopHUeepu7yOOSdYNFFOFEvtCbxXXoyVaKZAeSd2Vd7YEwRP4TTJjjWNPapT0D65AFqM8x+0rEjhmVfQGZAS4L3QctzRAgBoR1qTr0iqI/46ETkNq6vHz9mPLHEL3MQ/zoh4Pp0T+uMsY5ptzuMPcG0YwajSm5J8XXV2V5ZBEANpgL91xjgh1I9LiKJa/Lv3R9HAZG1uuCvzqjA2LWYeH+6ZcSpadk/UPxDw9c78FUnSNbHAcjuYZ/yI3v5SaZTjEzsB1MtAh6AFiHtvKIMWpqoOs7XQPhz1xXPoGZ7VR64A+/bN2h+Uqn49bQrKjTRGegqkEWFcBwhFH/ZkYfSHCGmZQTVqOakqyofJ22tS0ief45gYaO54YvIliTNTY7SZMRCEhUzz6dz8ENqP7FxhUVcQRbBr0JTmaf6DAwu86iDgkvcp1cY2trnUmlvrgz2GW6TgXoFjFlchUkHIByFeIJ02olfJg4zP8PzgYp2zhwmXL8iXHXnwzuP9bQKq5j8o+UhR11zn4MFvWQyD1UEplK6vphMdS8iXDViLrOwuMz1XUf7RxNdW0gqXwx+qLU+CeypyWLMIlgTlOr1pBqD/S5Jx+Gbn5GHQViuFZHJUjJsU0xel001KjB2Wf1Y15OSdLZ5l0tn/4HYKmZLufTYpub0xrss5r3Z72RYz3wvAWFXzkxWa+oBiRQiF6+ix8DBPTc3tm+ORnQBYcV/VNVRziimV3MFSsD1nHgIF1zu+eXIKE7/b3lzY19KpvtiBio94dejWoA/WO7KXWv2sHH0JoZnRh6lzu0HRFgYqVm/052nCGVA6XSfrFtfIupxdBs22C9wrwC5/Rwanf1S8BQIXpm25P4dv9Y9cS6c2/DUHcle4tsUJlqC+LpRGKXRdolFkiL9r01V09Kev/K2oXaWGYmBLbRfIyvEHyHNeNXv5fnaZ3pTlIwXjJ9K9yKA/1AKAsAEuKlM3N5ep9pfyuyfOWj1I6RvBwVqKvcBZtYJ4u8n9jrxiyq3ZZ35eB62D+ceOAD2s5+LL2IylYjiJA1OO2qpu4x9rt1NHXM6LYJAruBnUrJ0Ylqz/ElcJn/lXAzY6RLqVcZ+tuV580AUkFiaXFEDcqdJbbzh0R15g9DtaeiQZd1PG0a8Xblj9aMQoRDRJeksw1GWO7TfrJX1Cu4k+sgARWRzZ0DvB0SJAxPcmhg2iBByn2ESlcxPvMOpzuJI11BUQsZZ7dcynubeMvdqBeKsC6HMcm+8DLEUPmzsC3HIfARlNbt1fOrGJNuKaLvF1AAdwllELoPf3lQ6EVZI120=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 13 */ 'eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5': {
+ data: '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',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 14 */ 'f215d89bf4583c12f5ed4f4330f488dad3fffa448f4dc784f15ef135dda2c732': {
+ data: '3sIazRfi2ps3Mh69YkIYFFyDRXU8cTRuBjCevCJHyJOfxLPOcJfUX+QuWv50QMRchAG1RYTwqTOFd4G4ixzmt9HjHlJSpFXva8TvNfUaoggUWWTzNraRxB0gJex3JGfQd4Nlve+wdISrn5vUJSWBYcFEFo9504TcDAkVjwFYrLhBDFv53d3B5WuanLzpRuB8lIj5r5ZBYszraRDeSjEKQ0OtTojxnkZOB7dDi2IYdorhxhOeBmi3ucAXeDLZbaZdPAXmo6CNEYxAr0z9/aCrvLxZEfNoBvBMOnHT20wljSGsjf6QG/KEm352ix/uGSrJNbRMMX9tVloeSmEkwxkAn4ZQwIVq/0IS970MkL+jOH/RFhO6UT6x5OPo+Yyf3EKmRWKKeZbv95C5WNRcfLjeNVo5Zihq4fAUEfwHtNTaEEpLoUdCbzgZqBKcbLk8jo44lznz41T4R9QM5ofRAexywqVlEzagztakcrgyAMGumqquuKscJmqxEyxZLwNWD706DCUkiG2a1m/umxNvVkCNE6VBxbZ1+SPrcsRVfdtAx3eee056xo+KYKLdf84j3DR27H/p3QYm25sdLhUU0QtUTDTP2aKUxEcsLy5MIZV7256AlRS23upmvtb+VfJCsT+FwedLNCzu4SEk8Iz5AHFJ2VZ0g/2A7DH7DiuaxSqEn6iSqVZRnTrhWsW/lTZ61Swji+wvzk+5RnY8wBFZeudUX6ERy9n0e4n8EkGXCObwSnyIe+Dxs32MQFXb7b6NUJEfbq4GxHUjJ6fzRuTqQysRKlQ+qj9Hl5+HvGhyliDpe+PQ3V6kFE52qVArAYzlR2sZJmxKPIgU6wPPuCMcg+97own4gSO6PWrnlSZs87ptZdZ1iiYPDajQjyLI9WV/IN3APbiRufdEjjmCkoxB1zwSHzyW50Wdl1pEW19/0j+KSFDeigXXVg0LAko4uuJIPTLR8L8gOrcNZvIqHB85XnsbO49+SUwcykXSlZSq3il7D/9FuGJK0ecKdEMf/UetsSaX7x3L92fzSIjqgFSHrCPrqLVWdI5Sema4vhx3aes+hF9oohC9jqb6vS/b/vXfVf2vs2hPelqk7UIRzPmaeapzF0RyjGoAljBIrPFmyAmXcpQ/NlJSI7UjMjoFWsOXshJiy+0/luVkzfoFSordVm2ZhR9zkVKKDHlrFXXkw1upVnf1xFV9Z4SEVAZKgWRr2vLbmD5tITmR7qxzNTXrikqujVvOeFCHkAW1c5IcOk/VjPO36CNL2EZbpRHc6z25gST8NYn+Ypee6FGliHGFbzJxTwHa67fRncf9H1Iunzl+x3J3/0973z5fILk4OtMq3MKUFjdj2r+hqwU893+Yaza7l06Jm+dODTXhPA0T+JL4gaWHE4Ci9SsX85uvpZR++Tfx3CB7uXvOKGATmVYkAMndNCOBCbHz1/zz/Fg4Awu4aAPap/DqWsoVXajuYBSBNpaxpFWeioX65PPEPgn+HHmtjn2c647vwdv3iBopTJJlipoW94vkTJe4tpO1e7DA5EPnzdxJoRyXGbipfCRlfblcurQP+hXZHobfqmzMuyEPp4t7b5oiYpwzNnM4/sh9NxTpj/a4urjnIwg8yzLNvdletAuME0oQu4DkcWpPKhyDpelAPtdhDka2YID/WhUfg+gHKpIjKU271eoUwhScCcW1cBY41htaSNftJq96r77piMYo6EAAuf4X++MIT5LiwsYs/qzjOrmQm5pdSeAmR9f1fkqsIAv/TDhgAgIC0zAmvUJfkxIEHOMn4y5i5qZqlDS/Nvd/ZWl0lMjPSJaxd1pm3echWZ8/+gPKMib5sSO2eYYOMq/DR6k2ILThbHJp1G6gqcyD/LymNO7BrCIDfGEgp+fCBFXYBjC6+Otkukcvxs1uJsirwWbYLaoC25iYChdhwmoOys8=',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ },
+/* 15 */ 'fe21497ef7435d31f9746c132e4b5ecf5aac5f13b5961ddb55d2bdc3409f28f6': {
+ data: '4zgqvaaWm7nJO09LKN6o5hbWwGzOv7VVmXDu5T+JCHTSOXbteogax2Zrv0uKLkfooGFThJBk0rXfXxE64vMOq3AeHXGw7Chg7hz8Z2Lpjr4FfE6q7Em7UuAlAuL1PiyXXJJK5iSsRY9tkizuYl19aXW+CgpPznYD/PyXgeYxqt9WLqK8cl5iAU87R0cQDhwl16ivzVgiiFeaB6B5FQqWBAHCEgXhqTsaw2gv4snbmPOqcUZbHy/Vb9hv4lPBJwGFNxQzeZUad92VBC8YbIjmbohDsXjteqD2/k1qOgpUB/U5BpyVwsi+5ahgb8gbS+AqYoRDYzkaj83ksPI4JzWyZhpqjhDauaI6M7hGnJ4GB8UZc0M3WPgrlf1r+TXCgpcfembqL1MyteM+C+ItPRP/QdaIXxLOmvGFOBKQYEI7UceUWBCSEzORlS2S2lltlqt+K4B8QTULiKaXCfRmF/u60FpJufIkUX0pE/rQVChxswSWvh7uJFDBIDx8MplTX724A7DN5d4/Ad4Yi2cj3V8X/DEErnHTvirP3tZ2F2oAe7kIdu+JuCqKcMaGB4hVijzv+yim2TCPvrGTFaMmg9PvcWHpik9jEIabCkdqAR8EGIkD29+yvG4vD0DTRKv2vPIfr60ZQnsgs8nlPPoNa6lNHvI/EO0nBGBYBc1TW+syV5h/zOG3rHX0XCHhISZmDMjra7eUETWChncR88P7ciC4yJQtzXFGzeXp2ktzZ8m5g1EQfgtlUVZsHN8e4OQ9DjKt0unfq5RFBj2jlG8TBZn6ZpebxWR2qOxp81KQLHJND9zRTy3h65+k5wo3MnnxE3GbeXg2dFIORRvGUT6bWsqW1fqR/pg1GO8KNtrt3CryZofgE52kuk6hlcmSk9974JR5523+1/hbts8n5VrTi1C6GWhnxpiJb1XIvICdag5g7C2iYppzLKVzbJcFMegwDUrapbmGhkqnGwSY1EQSDyagPr2xlziWhdWdCOVAYcyw8dOpdD97QhVef0OWrJ8nbgFKD6wn21475OFxooheWiMCyZwXqESVG1cVCjeaCsymBtEVPpmQdSkOfMdXpKVF+3osb4K2XDpPeU1zPWVozeMp68YhLztQ/g==',
+ version: '0.2',
+ creationDate: 'Wed Mar 14 15:46:44 CET 2007',
+ updateDate: 'Wed Mar 14 15:46:44 CET 2007',
+ accessDate: 'Mon Jan 19 16:10:04 CET 2009'
+ }
+ }
+ }
+ }
+ },
+
+ //-------------------------------------------------------------------------
+ 'syntaxFix': ""
+});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.html b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.html
new file mode 100644
index 0000000..f77bcb6
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.html
@@ -0,0 +1,106 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.DataModel.User - test</title>
+
+ <script type="text/javascript" src="../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Signal.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Toll.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Offline.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Test.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Crypto.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/UI/Common/Controllers/DirectLoginRunner.js'></script>
+
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Strings/Strings_en-US.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/Date.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/EncryptedRemoteObject.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.Version.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/Record.Version.Field.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLogin.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginInput.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginBinding.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/DirectLoginFormValue.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.Legacy.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.RecordIndex.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.Preferences.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/User.Header.OneTimePasswords.js'></script>
+ <script type='text/javascript' src='../../../../../js/Clipperz/PM/DataModel/OneTimePassword.js'></script>
+
+ <script type="text/javascript" src="../../../../SimpleTest/SimpleTest.Async.js"></script>
+<script>
+ Clipperz_IEisBroken = false;
+</script>
+
+<!--[if IE]><script>
+Clipperz_IEisBroken = true;
+Clipperz_normalizedNewLine = '\x0d\x0a';
+</script><![endif]-->
+
+</head>
+<body>
+
+<pre id="test">
+<script>
+ Clipperz.PM.Strings.Languages.setSelectedLanguage('en-us');
+</script>
+<script type="text/javascript" src="User.data.js"></script>
+<script type="text/javascript" src="User.data.old.js"></script>
+<script type="text/javascript" src="User.test.js"></script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.test.js b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.test.js
new file mode 100644
index 0000000..4e7a21f
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/User.test.js
@@ -0,0 +1,2082 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'invertIndex_test': function (someTestArgs) {
+ var testIndex;
+ var invertedIndex;
+
+ testIndex = {
+ 'key1': 'value1',
+ 'key2': 'value2',
+ 'key3': 'value3',
+ 'key4': 'value4',
+ 'key5': 'value5'
+ };
+
+ invertedIndex = Clipperz.PM.DataModel.User.Header.RecordIndex.invertIndex(testIndex);
+
+ SimpleTest.is(MochiKit.Base.keys(invertedIndex).length, MochiKit.Base.keys(testIndex).length, "the inverted index has the same number of elements as the original index");
+ SimpleTest.is(invertedIndex['value1'], 'key1', "the first element has been correctly inverted");
+ SimpleTest.is(invertedIndex['value2'], 'key2', "the second element has been correctly inverted");
+ SimpleTest.is(invertedIndex['value3'], 'key3', "the third element has been correctly inverted");
+ SimpleTest.is(invertedIndex['value4'], 'key4', "the forth element has been correctly inverted");
+ SimpleTest.is(invertedIndex['value5'], 'key5', "the fifth element has been correctly inverted");
+ return MochiKit.Async.succeed('done');
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'joe_clipperz_offline_copy_test': function(someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("joe_clipperz_offline_copy_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ is(someRecords.length, 20, "joe_clipperz_offline_copy_test - joe has 20 records");
+ });
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.methodcaller('label'));
+ deferredResult.addCallback(Clipperz.Async.collectAll);
+ deferredResult.addCallback(MochiKit.Base.methodcaller('sort'));
+ deferredResult.addCallback(function (someSortedLabels) {
+ SimpleTest.is(someSortedLabels.length, 20, "We got all the labels");
+ SimpleTest.is(someSortedLabels[0], "Amazon.com", "The first label is correct");
+ SimpleTest.is(someSortedLabels[1], "American Airlines", "The second label is correct");
+ SimpleTest.is(someSortedLabels[2], "Bloglines", "The third label is correct");
+ SimpleTest.is(someSortedLabels[3], "Digg", "The fourth label is correct");
+ SimpleTest.is(someSortedLabels[4], "Example Attack", "The fifth label is correct");
+ SimpleTest.is(someSortedLabels[5], "Expedia.com", "The sixth label is correct");
+ SimpleTest.is(someSortedLabels[6], "Google Account", "The seventh label is correct");
+ SimpleTest.is(someSortedLabels[7], "Home burglar alarm", "The eighth label is correct");
+ SimpleTest.is(someSortedLabels[8], "Jaiku", "The ninth label is correct");
+ SimpleTest.is(someSortedLabels[9], "LinkedIn", "The 10th label is correct");
+ SimpleTest.is(someSortedLabels[10], "Lufthansa", "The 11th label is correct");
+ SimpleTest.is(someSortedLabels[11], "Microsoft Office CD Key", "The 12th label is correct");
+ SimpleTest.is(someSortedLabels[12], "MyBlogLog", "The 13th label is correct");
+ SimpleTest.is(someSortedLabels[13], "MySpace", "The 14th label is correct");
+ SimpleTest.is(someSortedLabels[14], "SAP - Login", "The 15th label is correct");
+ SimpleTest.is(someSortedLabels[15], "The New York Times", "The 16th label is correct");
+ SimpleTest.is(someSortedLabels[16], "Web password", "The 17th label is correct");
+ SimpleTest.is(someSortedLabels[17], "Web password", "The 18th label is correct");
+ SimpleTest.is(someSortedLabels[18], "Yahoo! Account", "The 19th label is correct");
+ SimpleTest.is(someSortedLabels[19], "del.icio.us", "The 20th label is correct");
+ });
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'joe_clipperz_offline_copy_getDirectLogins_test': function(someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("joe_clipperz_offline_copy_getDirectLogins_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(function (someDirectLogins) {
+ SimpleTest.is(someDirectLogins.length, 22, "joe has 22 direct logins");
+ });
+
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.methodcaller('label'));
+ deferredResult.addCallback(Clipperz.Async.collectAll);
+ deferredResult.addCallback(MochiKit.Base.methodcaller('sort'));
+ deferredResult.addCallback(function (someSortedLabels) {
+ SimpleTest.is(someSortedLabels.length, 22, "We got all the labels");
+ SimpleTest.is(someSortedLabels[0], "Amazon.com", "The first label is correct");
+ SimpleTest.is(someSortedLabels[1], "American Airlines", "The second label is correct");
+ SimpleTest.is(someSortedLabels[2], "Bloglines", "The third label is correct");
+ SimpleTest.is(someSortedLabels[3], "Digg", "The fourth label is correct");
+ SimpleTest.is(someSortedLabels[4], "Example Attack", "The 5th label is correct");
+ SimpleTest.is(someSortedLabels[5], "Expedia.com", "The 6th label is correct");
+ SimpleTest.is(someSortedLabels[6], "Flickr", "The 7th label is correct");
+ SimpleTest.is(someSortedLabels[7], "Google Account", "The 8th label is correct");
+ SimpleTest.is(someSortedLabels[8], "Google Calendar", "The 9th label is correct");
+ SimpleTest.is(someSortedLabels[9], "Google Docs", "The 10th label is correct");
+ SimpleTest.is(someSortedLabels[10], "Google Mail", "The 11th label is correct");
+ SimpleTest.is(someSortedLabels[11], "Jaiku", "The 12th label is correct");
+ SimpleTest.is(someSortedLabels[12], "LinkedIn", "The 13th label is correct");
+ SimpleTest.is(someSortedLabels[13], "Lufthansa", "The 14th label is correct");
+ SimpleTest.is(someSortedLabels[14], "My Yahoo!", "The 15th label is correct");
+ SimpleTest.is(someSortedLabels[15], "MyBlogLog", "The 16th label is correct");
+ SimpleTest.is(someSortedLabels[16], "MySpace", "The 17th label is correct");
+ SimpleTest.is(someSortedLabels[17], "SAP - Login", "The 18th label is correct");
+ SimpleTest.is(someSortedLabels[18], "SAP - Login", "The 19th label is correct");
+ SimpleTest.is(someSortedLabels[19], "The New York Times", "The 20th label is correct");
+ SimpleTest.is(someSortedLabels[20], "Yahoo! Groups", "The 21st label is correct");
+ SimpleTest.is(someSortedLabels[21], "Yahoo! Mail", "The 22nd label is correct");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'getCredentials_test': function (someTestArgs) {
+ var deferredResult;
+ var user;
+
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("getCredentials_test", someTestArgs);
+ deferredResult.addMethod(user, 'getCredentials');
+ deferredResult.addCallback(function(aResult) {
+ SimpleTest.is(aResult.username, 'joe', "the username of the credentaials is correct");
+ SimpleTest.is(aResult.password, 'clipperz', "the password of the credentaials is correct");
+ })
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loginWithOfflineData_test': function (someTestArgs) {
+ var deferredResult;
+ var user;
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("loginWithOfflineData_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addCallback(function(aResult) {
+ SimpleTest.is(aResult.result, 'done', "successfully logged in");
+ })
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'getRecords_fromOfflineData_OLD_test': function (someTestArgs) {
+ var deferredResult;
+ var user;
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("getRecords_fromOfflineData_OLD_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['OLD_joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addCallback(function(aResult) {
+ SimpleTest.is(aResult.result, 'done', "successfully logged in");
+ });
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function(someRecords) {
+ SimpleTest.is(someRecords.length, 15, "the OLD test user has just 15 records");
+ });
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.methodcaller('label'));
+ deferredResult.addCallback(Clipperz.Async.collectAll);
+ deferredResult.addCallback(MochiKit.Base.methodcaller('sort'));
+ deferredResult.addCallback(function (someSortedLabels) {
+ SimpleTest.is(someSortedLabels.length, 15, "We got all the labels");
+ SimpleTest.is(someSortedLabels[0], "Amazon.com", "The first label is correct");
+ SimpleTest.is(someSortedLabels[1], "American Airlines", "The second label is correct");
+ SimpleTest.is(someSortedLabels[2], "Bloglines", "The third label is correct");
+ SimpleTest.is(someSortedLabels[3], "Digg", "The fourth label is correct");
+ SimpleTest.is(someSortedLabels[4], "Expedia.com", "The fifth label is correct");
+ SimpleTest.is(someSortedLabels[5], "Google Account", "The sixth label is correct");
+ SimpleTest.is(someSortedLabels[6], "Home burglar alarm","The seventh label is correct");
+ });
+/*
+*/
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'getDirectLogins_fromOfflineData_OLD_test': function (someTestArgs) {
+ var deferredResult;
+ var user;
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("getRecords_fromOfflineData_OLD_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['OLD_joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addCallback(function(aResult) {
+ SimpleTest.is(aResult.result, 'done', "successfully logged in");
+ });
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(function(someDirectLogins) {
+ SimpleTest.is(someDirectLogins.length, 17, "the OLD test user has 17 direct logins");
+ });
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.methodcaller('label'));
+ deferredResult.addCallback(Clipperz.Async.collectAll);
+ deferredResult.addCallback(MochiKit.Base.methodcaller('sort'));
+ deferredResult.addCallback(function (someSortedLabels) {
+ SimpleTest.is(someSortedLabels.length, 17, "We got all the labels");
+ SimpleTest.is(someSortedLabels[0], "Amazon.com", "The first label is correct");
+ SimpleTest.is(someSortedLabels[1], "American Airlines", "The second label is correct");
+ SimpleTest.is(someSortedLabels[2], "Bloglines", "The third label is correct");
+ SimpleTest.is(someSortedLabels[3], "Digg", "The fourth label is correct");
+ SimpleTest.is(someSortedLabels[4], "Expedia.com", "The fifth label is correct");
+ SimpleTest.is(someSortedLabels[5], "Flickr", "The sixth label is correct");
+ SimpleTest.is(someSortedLabels[6], "Google Calendar", "The seventh label is correct");
+ SimpleTest.is(someSortedLabels[7], "Google Docs", "The 8th label is correct");
+ SimpleTest.is(someSortedLabels[8], "Google Mail", "The 9th label is correct");
+ SimpleTest.is(someSortedLabels[9], "LinkedIn", "The 10th label is correct");
+ SimpleTest.is(someSortedLabels[10], "Lufthansa", "The 11th label is correct");
+ SimpleTest.is(someSortedLabels[11], "My Yahoo!", "The 12th label is correct");
+ SimpleTest.is(someSortedLabels[12], "MyBlogLog", "The 13th label is correct");
+ SimpleTest.is(someSortedLabels[13], "MySpace", "The 14th label is correct");
+ SimpleTest.is(someSortedLabels[14], "The New York Times", "The 15th label is correct");
+ SimpleTest.is(someSortedLabels[15], "Yahoo! Groups", "The 16th label is correct");
+ SimpleTest.is(someSortedLabels[16], "Yahoo! Mail", "The 17th label is correct");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'sortRecords_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var caseInsensitiveCompare;
+
+ caseInsensitiveCompare = function (aValue, bValue) {
+ return MochiKit.Base.compare(aValue.toLowerCase(), bValue.toLowerCase());
+ };
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("sortRecords_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(Clipperz.Async.deferredSort, function (aRecord, bRecord) {
+ return Clipperz.Async.deferredCompare(MochiKit.Base.compare, aRecord.label(), bRecord.label());
+ });
+ deferredResult.addCallback(MochiKit.Base.itemgetter('0'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Amazon.com", "Sorting the records themselves (by labels), the first one is 'Amazon.com'");
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(Clipperz.Async.deferredSort, function (aRecord, bRecord) {
+ return Clipperz.Async.deferredCompare(MochiKit.Base.compare, aRecord.label(), bRecord.label());
+ });
+ deferredResult.addCallback(MochiKit.Base.itemgetter('5'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Expedia.com", "Sorting the records themselves (by labels), the sixth element is 'Expedia.com'");
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(Clipperz.Async.deferredSort, function (aRecord, bRecord) {
+ return Clipperz.Async.deferredCompare(MochiKit.Base.compare, aRecord.label(), bRecord.label());
+ });
+ deferredResult.addCallback(MochiKit.Base.itemgetter('19'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("del.icio.us", "Sorting the records themselves (by labels), the 20th element is 'del.icio.us'");
+
+
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(Clipperz.Async.deferredSort, function (aRecord, bRecord) {
+ return Clipperz.Async.deferredCompare(caseInsensitiveCompare, aRecord.label(), bRecord.label());
+ });
+ deferredResult.addCallback(MochiKit.Base.itemgetter('3'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("del.icio.us", "Sorting with case insensitive mode (by labels), the fourth record is 'del.ico.us'");
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(Clipperz.Async.deferredSort, function (aRecord, bRecord) {
+ return Clipperz.Async.deferredCompare(caseInsensitiveCompare, aRecord.label(), bRecord.label());
+ });
+ deferredResult.addCallback(MochiKit.Base.itemgetter('19'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Yahoo! Account", "Sorting with case insensitive mode (by labels), the 20th record is 'Yahoo! Account'");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'accessToSingleRecord_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("sortRecords_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Amazon.com", "Sorting the records themselves (by labels), the first one is 'Amazon.com'");
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'accessToSingleRecordContent_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("sortRecords_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('fields'));
+ deferredResult.addCallback(function (someRecordFields) {
+ SimpleTest.is(MochiKit.Base.keys(someRecordFields).length, 2, "The number of fields of the Amazon.com record matches");
+ return someRecordFields;
+ });
+ deferredResult.addCallback(MochiKit.Base.itemgetter('5e822c34aaf1a9fbc0b52585c1915f3a3758abd51923a4d35ae85373bbb839c2'));
+ deferredResult.collectResults({
+ 'label': MochiKit.Base.methodcaller('label'),
+ 'value': MochiKit.Base.methodcaller('value')
+ })
+ deferredResult.addCallback(function (someValues) {
+ SimpleTest.is(someValues['label'], 'email', "the first field label matches");
+ SimpleTest.is(someValues['value'], 'joe@clipperz.com', "the first field value matches");
+ });
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'modifyRecordLabelAndCheckForPendingChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("modifyRecordAndCheckForPendingChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Amazon.com", "This is the record the test was expecting");
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setLabel', "New label"));
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "setting a label on one of the user's record, trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("New label", "once set the new label value, I can still get back its value");
+
+ deferredResult.addMethod(user, 'revertChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "reverting changes should return to the original state");
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Amazon.com", "The label of the record is restored to its initial value");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'modifyRecordFieldsAndCheckForPendingChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("modifyRecordFieldsAndCheckForPendingChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('fields'));
+ deferredResult.addCallback(MochiKit.Base.itemgetter('5e822c34aaf1a9fbc0b52585c1915f3a3758abd51923a4d35ae85373bbb839c2'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('value'));
+ deferredResult.addTest("joe@clipperz.com", "The value of the record field is correct");
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('fields'));
+ deferredResult.addCallback(MochiKit.Base.itemgetter('5e822c34aaf1a9fbc0b52585c1915f3a3758abd51923a4d35ae85373bbb839c2'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setValue', 'joe@example.com'));
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('fields'));
+ deferredResult.addCallback(MochiKit.Base.itemgetter('5e822c34aaf1a9fbc0b52585c1915f3a3758abd51923a4d35ae85373bbb839c2'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('value'));
+ deferredResult.addTest("joe@example.com", "The record field correctly returns the newly updated value");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of a record's field trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'revertChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "reverting changes should return to the original state");
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('fields'));
+ deferredResult.addCallback(MochiKit.Base.itemgetter('5e822c34aaf1a9fbc0b52585c1915f3a3758abd51923a4d35ae85373bbb839c2'));
+ deferredResult.addCallback(MochiKit.Base.methodcaller('value'));
+ deferredResult.addTest("joe@clipperz.com", "The original value of the record field is returned after reverting the changes");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'modifyRecordNoteAndCheckForPendingChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("modifyRecordNoteAndCheckForPendingChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('notes'));
+ deferredResult.addTest("aproofofconcept\n<script>alert(\"nothing bad in here\");</script><script>alert(\"AAHHGGGH!\");</script>", "The value of the record note is correct");
+
+ deferredResult.addMethod(user, 'getRecord', '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setNotes', "A new note text"));
+
+ deferredResult.addMethod(user, 'getRecord', '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('notes'));
+ deferredResult.addTest("A new note text", "The value of the record note has been updated");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of record's notes trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'getRecord', '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('hasPendingChanges'));
+ deferredResult.addTest(true, "also the record should flat its pending changes on the note field");
+
+ deferredResult.addMethod(user, 'revertChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "reverting changes should return to the original state");
+
+ deferredResult.addMethod(user, 'getRecord', '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('notes'));
+ deferredResult.addTest("aproofofconcept\n<script>alert(\"nothing bad in here\");</script><script>alert(\"AAHHGGGH!\");</script>", "The value of the record note is restored to its initial value");
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loadUser_withoutPreferences_andTryToAccessThem_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("loadUser_withoutPreferences_andTryToAccessThem_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.collectResults({
+ 'preferences': [
+ MochiKit.Base.method(user, 'getHeaderIndex', 'preferences'),
+ MochiKit.Base.methodcaller('getDecryptedData')
+ ],
+ 'oneTimePasswords': [
+ MochiKit.Base.method(user, 'getHeaderIndex', 'oneTimePasswords'),
+ MochiKit.Base.methodcaller('getDecryptedData')
+ ]
+ });
+ deferredResult.addCallback(function (someValues) {
+ SimpleTest.is(Clipperz.Base.serializeJSON(someValues['preferences']), '{}', "The preferences are empty");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'modifyRecordTitleAndCheckForPendingChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("modifyRecordTitleAndCheckForPendingChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Card 1", "The value of the record note is correct");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setLabel', "Edited card 1"));
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Edited card 1", "The value of the record label has been updated");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of record's label trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('hasPendingChanges'));
+// deferredResult.addTest(true, "also the record should flag its pending changes on the label - 1");
+ deferredResult.addTest(false, "changing just the label (or any other attribute stored on the header) should not trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'revertChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "reverting changes should return to the original state");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Card 1", "The value of the record label is restored to its initial value");
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'modifyRecordTitleAndCheckForPendingChanges_take2_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("modifyRecordTitleAndCheckForPendingChanges_take2_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Card 1", "The value of the record note is correct");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setLabel', "Edited card 1"));
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of record's label trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('hasPendingChanges'));
+// deferredResult.addTest(true, "also the record should flag its pending changes on the label - 2");
+ deferredResult.addTest(false, "only the label has changed, and this should not trigger the 'hasPendingChanges' flag on the record as it is stored in the header");
+
+// deferredResult.addCallback(Clipperz.log, "=======================================================");
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setLabel', "Card 1"));
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "Setting the old value back should void all pending changes");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('hasPendingChanges'));
+ deferredResult.addTest(false, "also the record should not flag any pending changes, as the original value has been restored");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Card 1", "The value of the record label is restored to its initial value");
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'modifyRecordNoteAndThanResetOriginalValue_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("modifyRecordNoteAndThanResetOriginalValue_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('notes'));
+ deferredResult.addTest("aproofofconcept\n<script>alert(\"nothing bad in here\");</script><script>alert(\"AAHHGGGH!\");</script>", "The value of the record note is correct");
+
+ deferredResult.addMethod(user, 'getRecord', '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setNotes', "A new note text"));
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of record's notes trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'getRecord', '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setNotes', "aproofofconcept\n<script>alert(\"nothing bad in here\");</script><script>alert(\"AAHHGGGH!\");</script>"));
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "setting the field to its original value basically reset the change, like 'revertChanges' would have done");
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'modifyRecordNoteAndCommitChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var user2;
+ var newNoteText;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ newNoteText = "A new note text";
+
+ deferredResult = new Clipperz.Async.Deferred("modifyRecordAndCommitChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('notes'));
+ deferredResult.addTest("", "This is the original value of the notes");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setNotes', newNoteText));
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of record's notes trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('hasPendingChanges'));
+ deferredResult.addTest(true, "changing the value of record's notes trigger the 'hasPendingChanges' flag also on the record itself");
+
+ deferredResult.addMethod(user, 'saveChanges');
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "saving changes should return the user to a state with not changes pending - 1");
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('notes'));
+ deferredResult.addTest(newNoteText, "It looks like the data edited was correctly stored and reloaded here");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'multipleModificationToRecordTitleAndCommitChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var user2;
+ var user3;
+ var newRecordTitle;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user3 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ newRecordTitle = "A nice new title here";
+
+ deferredResult = new Clipperz.Async.Deferred("multipleModificationToRecordTitleAndCommitChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Card 1", "This is the original value of the label");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setLabel', newRecordTitle));
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of record's label trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "saving changes should return the user to a state with not changes pending - 2"); // FAIL
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest(newRecordTitle, "It looks like the label edited was correctly stored and reloaded here");
+
+ deferredResult.addMethod(user2, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setLabel', newRecordTitle + "-" + newRecordTitle));
+ deferredResult.addMethod(user2, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing again the value of record's label trigger the 'hasPendingChanges' flag also on the new user");
+
+ deferredResult.addMethod(user2, 'saveChanges');
+ deferredResult.addMethod(user2, 'hasPendingChanges');
+ deferredResult.addTest(false, "after committing the changes, the user has no pending changes"); // FAIL
+
+ deferredResult.addMethod(user3, 'login');
+ deferredResult.addMethod(user3, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest(newRecordTitle + "-" + newRecordTitle, "It looks like the label edited was correctly stored and reloaded here");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'saveChangesWithADeletedRecord_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("saveChangesWithADeletedRecord_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "This account has oly a single card");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Card 1", "This is the initial value of the label ...");
+
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('prepareRemoteDataForChangedRecords'));
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.ok(aResult['updated'] != null, "There updated key is not null");
+ SimpleTest.isDeeply(aResult['updated'], [], "There are no updated cards");
+ SimpleTest.ok(aResult['deleted'] != null, "There deleted key is not null");
+ SimpleTest.isDeeply(aResult['deleted'], [], "There are no deleted references");
+ return aResult;
+ })
+ deferredResult.addMethod(user, 'revertChanges');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethod(user, 'deleteRecord');
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('prepareRemoteDataForChangedRecords'));
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.isDeeply(aResult['deleted'], ['8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13'], "The deleted record reference is correctly reported");
+ return aResult;
+ })
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.shouldFail("accessing the deleted record reference should raise an exception");
+
+ deferredResult.addMethod(user, 'getRecord', '0000000000000000000000000000000000000000000000000000000000000000');
+ deferredResult.shouldFail("accessing a fake record reference should raise an exception");
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(0, "after deleting the only record, there should be no records bound to the user");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'revertingChangesAfterDeletingACard_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("simpleSaveChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Card 1", "This is the initial value of the label ...");
+
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('prepareRemoteDataForChangedRecords'));
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.ok(aResult['updated'] != null, "There updated key is not null");
+ SimpleTest.isDeeply(aResult['updated'], [], "There are no updated cards");
+ SimpleTest.ok(aResult['deleted'] != null, "There deleted key is not null");
+ SimpleTest.isDeeply(aResult['deleted'], [], "There are no deleted references");
+ return aResult;
+ })
+ deferredResult.addMethod(user, 'revertChanges');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethod(user, 'deleteRecord');
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('prepareRemoteDataForChangedRecords'));
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.isDeeply(aResult['deleted'], ['8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13'], "The deleted record reference is correctly reported");
+ return aResult;
+ })
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.shouldFail("accessing the deleted record reference should raise an exception");
+
+ deferredResult.addMethod(user, 'getRecord', '0000000000000000000000000000000000000000000000000000000000000000');
+ deferredResult.shouldFail("accessing a fake record reference should raise an exception");
+
+ deferredResult.addMethod(user, 'revertChanges');
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(SimpleTest.ok, true, "after reverting all changes, the deleted card is restored");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'lockUnlockAccountAfterDeletingACard_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var recordID;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ recordID = 'eeda70e0392261967bda71c3764da78989c45bbd2bb7be6b941b90f81d9b81b5';
+// recordID = '507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a';
+
+ deferredResult = new Clipperz.Async.Deferred("lockUnlockAccountAfterDeletingACard_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(20, "Initially the user has 20 cards");
+
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(22, "Initially the user has 22 direct logins");
+
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addMethodcaller('directLoginsData');
+ deferredResult.addMethodcaller('values');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(22, "There should be also 22 direct login references");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(4, "The selected record has 4 direct logins");
+
+ deferredResult.addMethod(user, 'getRecord', recordID);
+ deferredResult.addMethod(user, 'deleteRecord');
+ deferredResult.addMethod(user, 'saveChanges');
+
+ deferredResult.addMethod(user, 'hasAnyCleanTextData');
+ deferredResult.addTest(true, "after saving changes, hasAnyCleanTextData should be true");
+
+ deferredResult.addMethod(user, 'deleteAllCleanTextData');
+
+ deferredResult.addMethod(user, 'hasAnyCleanTextData');
+ deferredResult.addTest(false, "after deleting all clean text data, hasAnyCleanTextData should be true");
+
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest((20 - 1), "After deleting a card, only 19 are left");
+
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest((22 - 4), "Initially the user has 18 direct logins");
+
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addMethodcaller('directLoginsData');
+ deferredResult.addMethodcaller('values');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest((22 - 4), "Once deleted the card, there should be just 18 direct login references left");
+
+ deferredResult.addCallback(function () {
+ SimpleTest.ok(true, "nothing wrong had happen 'till here");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'lockUnlockAccountAfterDeletingACard_2_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("lockUnlockAccountAfterDeletingACard_2_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(someRecords.length, 20, "Initially the user has 20 cards");
+ });
+
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(function (someDirectLogins) {
+ SimpleTest.is(someDirectLogins.length, 22, "Initially the user has 42 direct logins");
+ });
+
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addMethodcaller('directLoginsData');
+ deferredResult.addMethodcaller('values');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(function (someDirectLoginReferences) {
+ SimpleTest.is(someDirectLoginReferences.length, 22, "There should be also 22 direct login references - 2");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a');
+ deferredResult.addMethodcaller('directLogins');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(function (someDirectLogins) {
+ SimpleTest.is(someDirectLogins.length, 1, "The selected record has 4 direct logins");
+ });
+
+
+ deferredResult.addMethod(user, 'getRecord', '507f38b06d587d8889698ae1ebbba7ef8f0539b82550dd25779fd9ee88fc0c7a');
+ deferredResult.addMethod(user, 'deleteRecord');
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'deleteAllCleanTextData');
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(someRecords.length, (20 -1), "After deleting a card, only 19 are left - 2");
+ });
+
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(function (someDirectLogins) {
+ SimpleTest.is(someDirectLogins.length, (22 - 1), "Initially the user has 21 direct logins - 2");
+ });
+
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addMethodcaller('directLoginsData');
+ deferredResult.addMethodcaller('values');
+ deferredResult.addCallback(MochiKit.Base.values);
+ deferredResult.addCallback(function (someDirectLoginReferences) {
+ SimpleTest.is(someDirectLoginReferences.length, (22 - 1), "Once deleted the card, there should be just 21 direct login references left");
+ });
+
+ deferredResult.addCallback(function () {
+ SimpleTest.ok(true, "nothing wrong had happen 'till here - 2");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'simpleSaveChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("simpleSaveChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('label'));
+ deferredResult.addTest("Card 1", "This is the initial value of the label ...");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setLabel', "New label for Card 1"));
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setNotes', "Setting just the label would not trigger the update of the record data and nothing will end up in the 'updated' list"));
+
+ deferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('prepareRemoteDataForChangedRecords'));
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.is(aResult['updated'].length, 1, "The updadated record should be listed in the changes getting ready for commit");
+ return aResult;
+ })
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'saveChangesAndDataCaching_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var record_1;
+ var record_2;
+
+ record_1 = '062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80';
+ record_2 = '084e23120544603f0297368fd3891a3818e0fe13488e2f2c6079913c8d1bed8d';
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("saveChangesAndDataCaching_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', record_1);
+ deferredResult.addMethodcaller('hasLoadedRemoteData');
+ deferredResult.addTest(false, "The card data should have not been loaded yet");
+
+ deferredResult.addMethod(user, 'getRecord', record_2);
+ deferredResult.addMethodcaller('hasLoadedRemoteData');
+ deferredResult.addTest(false, "Also the other card data should have not been loaded yet");
+
+ deferredResult.addMethod(user, 'getRecord', record_1);
+ deferredResult.addMethodcaller('setLabel', "New title");
+
+ deferredResult.addMethod(user, 'getRecord', record_1);
+ deferredResult.addMethodcaller('hasLoadedRemoteData');
+ deferredResult.addTest(false, "Changing just the label should not trigger the full loading of the card");
+
+ deferredResult.addMethod(user, 'getRecord', record_1);
+ deferredResult.addMethodcaller('setNotes', "New note text");
+
+ deferredResult.addMethod(user, 'getRecord', record_1);
+ deferredResult.addMethodcaller('hasLoadedRemoteData');
+ deferredResult.addTest(true, "Changing the notes should trigger the loading of the card");
+
+ deferredResult.addMethod(user, 'getRecord', record_2);
+ deferredResult.addMethodcaller('hasLoadedRemoteData');
+ deferredResult.addTest(false, "Changing record_1 should not trigger the loading of record_2");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "changing the value of record's label trigger the 'hasPendingChanges' flag");
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "saving changes should return the user to a state with not changes pending - 3");
+
+ deferredResult.addMethod(user, 'getRecord', record_1);
+ deferredResult.addMethodcaller('hasLoadedRemoteData');
+ deferredResult.addTest(true, "After saving the changes, record_1 sould not have the remote data");
+
+ deferredResult.addMethod(user, 'getRecord', record_2);
+ deferredResult.addMethodcaller('hasLoadedRemoteData');
+ deferredResult.addTest(false, "After saving, record_2 should still be NOT loaded");
+
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addNewRecordFieldAndSave_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("simpleSaveChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(MochiKit.Base.values(someFields).length, 3, "The record has initially 3 fields");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('addField', {'label':"New field label", 'value':"New field value", 'isHidden':false}));
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "adding a field should mark the record as having pending changes");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(MochiKit.Base.values(someFields).length, 4, "The record has now 4 fields");
+ });
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "saving changes should return the user to a state with not changes pending - 4");
+
+ deferredResult.addMethod(user, 'hasAnyCleanTextData');
+ deferredResult.addTest(true, "after saving changes, hasAnyCleanTextData should be true");
+
+//deferredResult.addCallback(function (aValue) { console.log(">>> #################################################"); return aValue});
+ deferredResult.addMethod(user, 'deleteAllCleanTextData');
+//deferredResult.addCallback(function (aValue) { console.log("<<< #################################################"); return aValue});
+
+ deferredResult.addMethod(user, 'hasAnyCleanTextData');
+ deferredResult.addTest(false, "after deleting all clean text, hasAnyCleanTextData should be false");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'deleteRecordFieldAndSave_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var user2;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("simpleSaveChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(MochiKit.Base.values(someFields).length, 3, "The record has initially 3 fields");
+ });
+
+ deferredResult.collectResults({
+ 'record': MochiKit.Base.method(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13'),
+ 'field': [
+ MochiKit.Base.method(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13'),
+ MochiKit.Base.methodcaller('fields'),
+ MochiKit.Base.values,
+ MochiKit.Base.itemgetter('0')
+ ]
+ })
+ deferredResult.addCallback(function (someValues) {
+ someValues['record'].removeField(someValues['field']);
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "removing a field should mark the record as having pending changes");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(MochiKit.Base.values(someFields).length, 2, "The record has now 2 fields");
+ });
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "saving changes should return the user to a state with not changes pending - 5");
+
+ //. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(MochiKit.Base.values(someFields).length, 2, "Once saved, the record is left with just two fields");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'loadDirectLogin_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("loadDirectLogin_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('directLogins'));
+ deferredResult.addCallback(function (someDirectLogins) {
+ SimpleTest.is(1, MochiKit.Base.keys(someDirectLogins).length, "the Amazon.com card has just one direct login");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('hasPendingChanges'));
+ deferredResult.addTest(false, "initially the record does not have any pending changes");
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('directLogins'));
+ deferredResult.addCallback(MochiKit.Base.itemgetter('03251dc1cbc5398789e4c4b45c52cfac3fcd8c1a4f19a81fa68fc6feae31d55c'));
+// deferredResult.addCallback(MochiKit.Base.methodcaller('runDirectLogin', true));
+ deferredResult.addCallback(Clipperz.PM.UI.Common.Controllers.DirectLoginRunner.testDirectLogin);
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('getFieldsValues'));
+ deferredResult.addCallback(function (someFieldsValues) {
+ SimpleTest.is(MochiKit.Base.keys(someFieldsValues).length, 2, "the Amazon.com card has just two fields");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '13a5e52976337ab210903cd04872588e1b21fb72bc183e91aa25c494b8138551');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('hasPendingChanges'));
+ deferredResult.addTest(false, "accessing fields values should not trigger the 'hasPendingChanges' flag");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'readingVeryOldCards_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("readingVeryOldCards_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_someExtraOldData']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addMethodcaller('label');
+ deferredResult.addTest('Card encoded with an old algorithm', 'the label of the selected record is the expected one');
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('fields'));
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(6, MochiKit.Base.keys(someFields).length, "the 'Card encoded with an old algorithm' card has six fields");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(false, "accessing the card fields should not trigger the hasPendingChanges flag");
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('addField', {'label':"New field label", 'value':"New field value", 'isHidden':false}));
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('fields'));
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(7, MochiKit.Base.keys(someFields).length, "adding a field shoult bring the total field count to 7");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "adding a field should mark the record as having pending changes - 2");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addingNewEmptyRecordAndSaveChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var newRecordReference;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("addingNewEmptyRecordAndSaveChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_someExtraOldData']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 1, "The user has initially just one record");
+ });
+
+ deferredResult.addMethod(user, 'createNewRecord');
+ deferredResult.addMethodcaller('reference');
+ deferredResult.addCallback(function (aNewRecordReference) {
+ newRecordReference = aNewRecordReference;
+ })
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 2, "After having created a new record, the total should be updated accordingly");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(false, "adding a new record should not trigger any changes on a sibling record");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "adding a new record should trigger the 'has pending changes' flag on the user");
+
+ deferredResult.addMethod(user, 'saveChanges');
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 1, "Reloading the data, just one record is available, as a brand new record without any changes should not be saved");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addNewRecordAndSaveChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("addNewRecordAndSaveChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_someExtraOldData']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 1, "The user has initially just one record");
+ });
+
+ deferredResult.addMethod(user, 'createNewRecord');
+ deferredResult.addCallback(function (aNewRecord) {
+ var innerDeferredResult;
+
+ innerDeferredResult = new Clipperz.Async.Deferred("addNewRecordAndSaveChanges_test <internal>", {trace:false});
+
+ innerDeferredResult.addMethod(aNewRecord, 'label');
+ innerDeferredResult.addTest('', "The label of a brand new record should be the empty string");
+
+ innerDeferredResult.addMethod(aNewRecord, 'setLabel', "New record label");
+ innerDeferredResult.addMethod(aNewRecord, 'setNotes', "New record notes");
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':"Label 1", 'value':"Value 1", 'isHidden':false});
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':"Label 2", 'value':"Value 2", 'isHidden':false});
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':"Label 3", 'value':"Value 3", 'isHidden':true});
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':"Label 4", 'value':"Value 4", 'isHidden':false});
+ innerDeferredResult.callback();
+
+ return innerDeferredResult;
+ })
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 2, "After having created a new record, the total should be updated accordingly");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(false, "adding a new record should not trigger any changes on a sibling record");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "adding a new record should trigger the 'has pending changes' flag on the user");
+
+ deferredResult.addMethod(user, 'saveChanges');
+
+ deferredResult.addCallback(function () {
+ var recordData
+ var recordVersionData;
+
+ recordData = MochiKit.Base.values(proxy.dataStore().data()['users']['9a984e219b07f9b645ef35f4de938b4741abe2e0b4adc88b40e9367170c91cc8']['records'])[1];
+ recordVersionData = MochiKit.Base.values(recordData['versions'])[0];
+
+ SimpleTest.is(recordVersionData['previousVersionKey'], Clipperz.PM.Crypto.nullValue, "The previous version key on the first version of a newly created record is equal to Clipperz.PM.Crypto.nullValue");
+ });
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(someRecords.length, 2, "Reloading the data, two records are available.");
+ return someRecords;
+ });
+ deferredResult.addCallback(MochiKit.Base.itemgetter('1'));
+ deferredResult.collectResults({
+ 'label': [
+ MochiKit.Base.methodcaller('label'),
+ Clipperz.Async.Test.is("New record label", "The label is correct")
+ ],
+ 'notes': [
+ MochiKit.Base.methodcaller('notes'),
+ Clipperz.Async.Test.is("New record notes", "The note is correct")
+ ],
+ 'fields': [
+ MochiKit.Base.methodcaller('fields'),
+ function (someFields) {
+ SimpleTest.is(MochiKit.Base.values(someFields).length, 4, "The fields are 4, as expected");
+ return someFields;
+ }
+ ]
+ })
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addNewRecordAndTestNewRecordIndex_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("addNewRecordAndTestNewRecordIndex_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 20, "The user has initially 20 records");
+ });
+
+ deferredResult.addMethod(user, 'createNewRecord');
+ deferredResult.addCallback(function (aNewRecord) {
+ var innerDeferredResult;
+
+ innerDeferredResult = new Clipperz.Async.Deferred("addNewRecordAndTestNewRecordIndex_test <internal>", {trace:false});
+
+ innerDeferredResult.addMethod(user, 'getHeaderIndex', 'recordsIndex');
+ innerDeferredResult.addMethodcaller('recordsIndex');
+ innerDeferredResult.addCallback(MochiKit.Base.itemgetter(aNewRecord.reference()));
+ innerDeferredResult.addTest(20, "The index of the new record should be 20");
+
+ innerDeferredResult.callback();
+
+ return innerDeferredResult;
+ })
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'editRecordAndTestForChangesInPreferencesAndOTP_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var user_2;
+ var originalPreferences;
+ var originalOTPs;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user_2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("editRecordAndTestForChangesInPreferencesAndOTP_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_with_preferences_and_OTPs_data']);
+ deferredResult.addMethod(user, 'login');
+ deferredResult.addMethod(user, 'getServerData');
+
+ deferredResult.collectResults({
+ 'preferences': [
+ MochiKit.Base.method(user, 'getHeaderIndex', 'preferences'),
+ MochiKit.Base.methodcaller('getDecryptedData')
+ ],
+ 'oneTimePasswords': [
+ MochiKit.Base.method(user, 'getHeaderIndex', 'oneTimePasswords'),
+ MochiKit.Base.methodcaller('getDecryptedData')
+ ]
+ });
+
+ deferredResult.addCallback(function (someValues) {
+//console.log("SOME VALUES", someValues);
+ originalPreferences = Clipperz.Base.deepClone(someValues['preferences']);
+ originalOTPs = Clipperz.Base.deepClone(someValues['oneTimePasswords']);
+
+ SimpleTest.is(originalPreferences['preferredLanguage'], 'en-US', "Preference.language is ok");
+ SimpleTest.is(originalPreferences['shouldShowDonationPanel'], false, "Preference.shouldShowDonationPanel is ok");
+
+ SimpleTest.is(MochiKit.Base.keys(originalOTPs).length, 6, "the number of OTPs is as expected");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '35b30f9e923ce913365815d44cf344ce66cb71b636093b8ec55b8245d13df82b');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('setLabel', "NEW LABEL"));
+ deferredResult.addMethod(user, 'saveChanges');
+
+ deferredResult.addMethod(user_2, 'login');
+ deferredResult.addMethod(user_2, 'getServerData');
+
+ deferredResult.collectResults({
+ 'preferences': [
+ MochiKit.Base.method(user_2, 'getHeaderIndex', 'preferences'),
+ MochiKit.Base.methodcaller('getDecryptedData')
+ ],
+ 'oneTimePasswords': [
+ MochiKit.Base.method(user_2, 'getHeaderIndex', 'oneTimePasswords'),
+ MochiKit.Base.methodcaller('getDecryptedData')
+ ]
+ });
+
+ deferredResult.addCallback(function (someValues) {
+//console.log("SOME VALUES", someValues);
+// originalPreferences = Clipperz.Base.deepClone(someValues['preferences']);
+// originalOTPs = Clipperz.Base.deepClone(someValues['oneTimePasswords']);
+
+ SimpleTest.is(someValues['preferences']['preferredLanguage'], originalPreferences['preferredLanguage'], "Preference.language is preserved");
+ SimpleTest.is(someValues['preferences']['shouldShowDonationPanel'], originalPreferences['shouldShowDonationPanel'], "Preference.shouldShowDonationPanel is preserved");
+
+ SimpleTest.is(MochiKit.Base.keys(someValues['oneTimePasswords']).length, MochiKit.Base.keys(originalOTPs).length, "the number of OTPs is preserved");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addRecordAndSaveChangesMultipleTimes_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("addRecordAndSaveChangesMultipleTimes_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_someExtraOldData']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(1, "The user has one record stored in its account");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "After loading records, the user should have no pending changes");
+
+ deferredResult.addMethod(user, 'createNewRecord');
+ deferredResult.addCallback(function (aNewRecord) {
+ var innerDeferredResult;
+
+ innerDeferredResult = new Clipperz.Async.Deferred("addRecordAndSaveChangesMultipleTimes_test <internal [1]>", {trace:false});
+
+ innerDeferredResult.addMethod(aNewRecord, 'setLabel', "New record 1");
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':'record number', 'value':"1", 'isHidden':false});
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':'field count', 'value':"2", 'isHidden':false});
+ innerDeferredResult.callback();
+
+ return innerDeferredResult;
+ })
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "Before saving, the user has pending changes");
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addCallback(SimpleTest.ok, true, "Saving worked (apparently) fine");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "After saving, the user has no pending changes");
+
+ deferredResult.addMethod(user, 'createNewRecord');
+ deferredResult.addCallback(function (aNewRecord) {
+ var innerDeferredResult;
+
+ innerDeferredResult = new Clipperz.Async.Deferred("addRecordAndSaveChangesMultipleTimes_test <internal [2]>", {trace:false});
+
+ innerDeferredResult.addMethod(aNewRecord, 'setLabel', "New record 2");
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':"record number", 'value':"2", 'isHidden':false});
+ innerDeferredResult.callback();
+
+ return innerDeferredResult;
+ })
+ deferredResult.addMethod(user, 'saveChanges');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(3, "After having created two new records, the total should be updated accordingly");
+
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(3, "Reloading the data, three records are available");
+
+ deferredResult.addMethod(user2, 'recordWithLabel', 'New record 1');
+//deferredResult.addCallback(function (aValue) { console.log("RECORD with Label", aValue); return aValue; });
+ deferredResult.collectResults({
+ 'label': [
+ MochiKit.Base.methodcaller('label'),
+ MochiKit.Base.partial(Clipperz.Async.Test.is, 'New record label', "The label is correct")
+ ],
+ 'notes': [
+ MochiKit.Base.methodcaller('notes'),
+ Clipperz.Async.Test.is('', "The note of the new created record is empty")
+ ],
+ 'fields': [
+ MochiKit.Base.methodcaller('fields'),
+ MochiKit.Base.values,
+ MochiKit.Base.itemgetter('length'),
+ Clipperz.Async.Test.is(2, "The new record has just one field, as expected")
+ ],
+ 'fieldValues_1': [
+ MochiKit.Base.methodcaller('fieldWithLabel', 'record number'),
+ MochiKit.Base.methodcaller('value'),
+ Clipperz.Async.Test.is('1', "The field value is as expected")
+ ],
+ 'fieldValues_2': [
+ MochiKit.Base.methodcaller('fieldWithLabel', 'field count'),
+ MochiKit.Base.methodcaller('value'),
+ Clipperz.Async.Test.is('2', "Also the second field value is as expected")
+ ]
+ })
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'addNewRecordAndRevertChanges_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("addNewRecordAndRevertChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_someExtraOldData']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 1, "The user has initially just one record");
+ });
+
+ deferredResult.addMethod(user, 'createNewRecord');
+ deferredResult.addCallback(function (aNewRecord) {
+ return Clipperz.Async.callbacks("addNewRecordAndRevertChanges_test <internal>", [
+ MochiKit.Base.method(aNewRecord, 'setLabel', "New record label"),
+ MochiKit.Base.method(aNewRecord, 'setNotes', "New record notes"),
+ MochiKit.Base.method(aNewRecord, 'addField', {'label':"Label 1", 'value':"Value 1", 'isHidden':false}),
+ MochiKit.Base.method(aNewRecord, 'addField', {'label':"Label 2", 'value':"Value 2", 'isHidden':false}),
+ MochiKit.Base.method(aNewRecord, 'addField', {'label':"Label 3", 'value':"Value 3", 'isHidden':true}),
+ MochiKit.Base.method(aNewRecord, 'addField', {'label':"Label 4", 'value':"Value 4", 'isHidden':false})
+ ], {trace:false});
+ })
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 2, "After having created a new record, the total should be updated accordingly");
+ });
+
+ deferredResult.addMethod(user, 'getRecord', '05aad20ee399b11ddc923e601fcd1d096233634f2ad4c55db4f6435e5f9cc17a');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(false, "adding a new record should not trigger any changes on a sibling record");
+
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(true, "adding a new record should trigger the 'has pending changes' flag on the user");
+
+ deferredResult.addMethod(user, 'revertChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "reverting changes shoud restore the previous state on the user");
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(someRecords.length, 1, "Reloading the data, just one record is available.");
+ return someRecords;
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'logout_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+
+ deferredResult = new Clipperz.Async.Deferred("logout_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_with_preferences_and_OTPs_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 18, "The user has 18 records");
+ });
+
+ deferredResult.addMethod(user, 'logout');
+ deferredResult.shouldSucceed("Logging out should not trigger an exception");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'lock_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var returnPassword = function () { return MochiKit.Async.succeed('clipperz'); };
+ var failPassword = function () { throw "Unexpected access to the password"; };
+ var currentPasswordFunction = returnPassword;
+ var passwordFunction = function () { return currentPasswordFunction(); };
+
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:passwordFunction});
+
+ deferredResult = new Clipperz.Async.Deferred("lock_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_with_preferences_and_OTPs_data']);
+
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 18, "The user has 18 records");
+ });
+
+ deferredResult.addMethod(user, 'getDirectLogins');
+ deferredResult.addCallback(function (someDirectLogins) {
+ SimpleTest.is(MochiKit.Base.keys(someDirectLogins).length, 22, "The user has 22 direct logins");
+ });
+
+ deferredResult.addMethod(proxy, 'shouldNotReceiveAnyFurtherRequest');
+ deferredResult.addCallback(function () { currentPasswordFunction = failPassword; });
+
+ deferredResult.addMethod(user, 'lock');
+ deferredResult.shouldSucceed("Locking out should not trigger an exception");
+
+ deferredResult.addMethod(proxy, 'unexpectedRequests');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(0, "The proxy should have not received any extra request");
+//deferredResult.addCallback(function (aValue) { console.log("PROXY.unexpectedRequests", Clipperz.Base.serializeJSON(proxy.unexpectedRequests())); return aValue; });
+ deferredResult.addMethod(proxy, 'mayReceiveMoreRequests');
+ deferredResult.addCallback(function () { currentPasswordFunction = returnPassword; });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'registerNewUser_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+ var username;
+ var passphrase;
+
+ username = "new";
+ passphrase = "user";
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+// user2 = new Clipperz.PM.DataModel.User({username:username, getPassphraseFunction:function () { return MochiKit.Async.succeed(passphrase);}});
+ user2 = new Clipperz.PM.DataModel.User({username:username, getPassphraseFunction:function () { return passphrase;}});
+
+ deferredResult = new Clipperz.Async.Deferred("registerNewUser_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_with_preferences_and_OTPs_data']);
+
+ deferredResult.addCallback(Clipperz.PM.DataModel.User.registerNewAccount, username, function () { return MochiKit.Async.succeed(passphrase);});
+ deferredResult.setValue('user');
+
+ deferredResult.addMethodcaller('getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 0, "The newly created user has no records");
+ });
+ deferredResult.getValue('user');
+ deferredResult.addMethodcaller('logout');
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getDirectLogins');
+ deferredResult.addCallback(function (someDirectLogins) {
+ SimpleTest.is(MochiKit.Base.keys(someDirectLogins).length, 0, "The user has no direct logins");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'registerNewUserAndAddARecord_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user, user2;
+ var username;
+ var passphrase;
+
+ username = "new";
+ passphrase = "user";
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user2 = new Clipperz.PM.DataModel.User({username:username, getPassphraseFunction:function () { return passphrase;}});
+
+ deferredResult = new Clipperz.Async.Deferred("registerNewUserAndAddARecord_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_with_preferences_and_OTPs_data']);
+
+ deferredResult.addCallback(Clipperz.PM.DataModel.User.registerNewAccount, username, function () { return MochiKit.Async.succeed(passphrase);});
+ deferredResult.setValue('user');
+
+ deferredResult.addMethodcaller('getRecords');
+ deferredResult.addCallback(function (someRecords) {
+ SimpleTest.is(MochiKit.Base.keys(someRecords).length, 0, "The newly created user has no records");
+ });
+
+ deferredResult.getValue('user');
+ deferredResult.addMethodcaller('createNewRecord');
+ deferredResult.addCallback(function (aNewRecord) {
+ var innerDeferredResult;
+
+ innerDeferredResult = new Clipperz.Async.Deferred("addRecordAndSaveChangesMultipleTimes_test <internal [1]>", {trace:false});
+
+ innerDeferredResult.addMethod(aNewRecord, 'setLabel', "New record 1");
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':'record number', 'value':"1", 'isHidden':false});
+ innerDeferredResult.addMethod(aNewRecord, 'addField', {'label':'field count', 'value':"2", 'isHidden':false});
+ innerDeferredResult.callback();
+
+ return innerDeferredResult;
+ })
+
+ deferredResult.getValue('user');
+ deferredResult.addMethodcaller('saveChanges');
+ deferredResult.addCallback(SimpleTest.ok, true, "Saving worked (apparently) fine");
+
+
+ deferredResult.getValue('user');
+ deferredResult.addMethodcaller('logout');
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecords');
+ deferredResult.addCallback(function (someDirectLogins) {
+ SimpleTest.is(MochiKit.Base.keys(someDirectLogins).length, 1, "The user - even after a brand new login - has the newly created record");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'changePassphrase_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+ var user2;
+ var newPassphrase;
+
+ newPassphrase = 'zreppilc';
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return 'clipperz';}});
+ user2 = new Clipperz.PM.DataModel.User({username:'joe', getPassphraseFunction:function () { return newPassphrase;}});
+
+ deferredResult = new Clipperz.Async.Deferred("changePassphrase_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['joe_clipperz_offline_copy_data']);
+
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(20, "This account has oly a single card");
+
+ deferredResult.addMethod(user, 'changePassphrase', newPassphrase);
+ deferredResult.addMethod(user, 'logout');
+
+ deferredResult.addMethod(user2, 'login');
+ deferredResult.addMethod(user2, 'getRecords');
+ deferredResult.addCallback(MochiKit.Base.itemgetter('length'));
+ deferredResult.addTest(20, "This account has oly a single card");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+/*
+ 'rearrangeRecordFieldOrderAndSave_test': function (someTestArgs) {
+ var deferredResult;
+ var proxy;
+ var user;
+
+ proxy = new Clipperz.PM.Proxy.Test({shouldPayTolls:true, isDefault:true, readOnly:false});
+ user = new Clipperz.PM.DataModel.User({username:'test', getPassphraseFunction:function () { return 'test';}});
+
+ deferredResult = new Clipperz.Async.Deferred("simpleSaveChanges_test", someTestArgs);
+ deferredResult.addMethod(proxy.dataStore(), 'setupWithEncryptedData', testData['test_test_offline_copy_data']);
+ deferredResult.addMethod(user, 'login');
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(function (someFields) {
+ var fields;
+
+ fields = MochiKit.Base.values(someFields);
+ SimpleTest.is(fields.length, 3, "The record has initially 3 fields");
+ SimpleTest.is(fields[0].reference(), '6a84c414866dd6d266186f0255a595e9330fb34973c085a81a6e4906876c721b', "the first field is the expected one");
+ SimpleTest.is(fields[1].reference(), 'fde88847cdbae6f7ee7e38aca1a242492888ff430a79c997bc6ba4afd0540ca2', "the second field is the expected one");
+ SimpleTest.is(fields[2].reference(), 'bd4e3bb9d3497f63c4c3a507d4b80f489fdb57deb9d1b342a5e1cff65936a410', "the third field is the expected one");
+ });
+
+// "6a84c414866dd6d266186f0255a595e9330fb34973c085a81a6e4906876c721b": {
+// "label":"Label 1","value":"Value 1","type":"TXT","hidden":false
+// },
+// "fde88847cdbae6f7ee7e38aca1a242492888ff430a79c997bc6ba4afd0540ca2": {
+// "label":"Label 2","value":"Value 2","type":"PWD","hidden":true
+// },
+// "bd4e3bb9d3497f63c4c3a507d4b80f489fdb57deb9d1b342a5e1cff65936a410": {
+// "label":"Label 3","value":"http://www.example.com","type":"URL","hidden":false
+// }
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addCallback(MochiKit.Base.methodcaller('sortFieldReference', [
+ 'bd4e3bb9d3497f63c4c3a507d4b80f489fdb57deb9d1b342a5e1cff65936a410',
+ '6a84c414866dd6d266186f0255a595e9330fb34973c085a81a6e4906876c721b',
+ 'bd4e3bb9d3497f63c4c3a507d4b80f489fdb57deb9d1b342a5e1cff65936a410'
+ ]));
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('hasPendingChanges');
+ deferredResult.addTest(true, "adding a field should mark the record as having pending changes");
+
+ deferredResult.addMethod(user, 'getRecord', '8280842f41162b673335b63860637e8472e8bbff0efa2bc78b0dbc5e09712e13');
+ deferredResult.addMethodcaller('fields');
+ deferredResult.addCallback(function (someFields) {
+ SimpleTest.is(MochiKit.Base.values(someFields).length, 4, "The record has now 4 fields");
+ });
+
+ deferredResult.addMethod(user, 'saveChanges');
+ deferredResult.addMethod(user, 'hasPendingChanges');
+ deferredResult.addTest(false, "saving changes should return the user to a state with not changes pending - 4");
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+*/
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+
+
+//#############################################################################
+
+SimpleTest.runDeferredTests("Clipperz.PM.DataModel.User", tests, {trace:false});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/DataModel/index.html b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/index.html
new file mode 100644
index 0000000..d762093
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/DataModel/index.html
@@ -0,0 +1,47 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.DataModel.* - tests</title>
+
+ <script type="text/javascript" src="../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../SimpleTest/TestRunner.js"></script>
+</head>
+<body>
+<script>
+TestRunner.runTests(
+ 'EncryptedRemoteObject.html',
+ 'Record.html',
+ 'DirectLogin.html',
+ 'User.html',
+ 'OneTimePassword.html'
+);
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Date.html b/frontend/gamma/tests/tests/Clipperz/PM/Date.html
new file mode 100644
index 0000000..106774b
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Date.html
@@ -0,0 +1,59 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.Date - test</title>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <!-- script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script -->
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../js/JSON/json2.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/Date.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Strings.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Date.js'></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.Async.js"></script>
+
+</head>
+<body>
+<pre id="test">
+ <script type="text/javascript" src="Date.test.js"></script>
+</pre>
+
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Date.test.js b/frontend/gamma/tests/tests/Clipperz/PM/Date.test.js
new file mode 100644
index 0000000..df271f1
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Date.test.js
@@ -0,0 +1,90 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'offlineDataParsing_test': function () {
+ var value;
+ var parsedValue;
+ var expectedValue;
+
+ value = 'Tue Mar 27 06:41:37 PDT 2007';
+ parsedValue = Clipperz.PM.Date.parse(value);
+ expectedValue = new Date();
+ expectedValue.setUTCFullYear(2007, 03 - 1, 27);
+ expectedValue.setUTCHours(13, 41, 37);
+// SimpleTest.is(parsedValue.toString(), 'Tue Mar 27 2007 15:41:37 GMT+0200 (CEST)', "the data in the format stored in the offline copy is processed correctly [1]");
+ SimpleTest.is(parsedValue.toString(), expectedValue.toString(), "the data in the format stored in the offline copy is processed correctly [1]");
+
+ value = 'Thu May 10 15:01:21 PDT 2007';
+ parsedValue = Clipperz.PM.Date.parse(value);
+ expectedValue = new Date();
+ expectedValue.setUTCFullYear(2007, 05 - 1, 10);
+ expectedValue.setUTCHours(22, 01, 21);
+// SimpleTest.is(parsedValue.toString(), 'Fri May 11 2007 00:01:21 GMT+0200 (CEST)', "the data in the format stored in the offline copy is processed correctly [3]");
+ SimpleTest.is(parsedValue.toString(), expectedValue.toString(), "the data in the format stored in the offline copy is processed correctly [3]");
+
+ value = 'Thu May 10 15:01:21 PST 2007';
+ parsedValue = Clipperz.PM.Date.parse(value);
+ expectedValue = new Date();
+ expectedValue.setUTCFullYear(2007, 05 - 1, 10);
+ expectedValue.setUTCHours(23, 01, 21);
+// SimpleTest.is(parsedValue.toString(), 'Fri May 11 2007 01:01:21 GMT+0200 (CEST)', "the data in the format stored in the offline copy is processed correctly [3]");
+ SimpleTest.is(parsedValue.toString(), expectedValue.toString(), "the data in the format stored in the offline copy is processed correctly [3]");
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'onlineDataParsing_test': function () {
+ var value;
+ var parsedValue;
+ var expectedValue;
+
+ value = 'Tue, 27 March 2007 06:41:37 PDT';
+ parsedValue = Clipperz.PM.Date.parse(value);
+ expectedValue = new Date();
+ expectedValue.setUTCFullYear(2007, 03 - 1, 27);
+ expectedValue.setUTCHours(13, 41, 37);
+
+// SimpleTest.is(parsedValue.toString(), 'Tue Mar 27 2007 15:41:37 GMT+0200 (CEST)', "the data in the format returned by the server is processed correctly");
+ SimpleTest.is(parsedValue.toString(), expectedValue.toString(), "the data in the format returned by the server is processed correctly");
+ },
+
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+//#############################################################################
+
+Clipperz.PM.Strings.Languages.initSetup();
+SimpleTest.runDeferredTests("Clipperz.PM.Date", tests, {trace:false});
+
+
+
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Proxy.html b/frontend/gamma/tests/tests/Clipperz/PM/Proxy.html
new file mode 100644
index 0000000..573dac8
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Proxy.html
@@ -0,0 +1,65 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.Proxy - TEST</title>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Connection.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Crypto.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Toll.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Proxy.js'></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.Async.js"></script>
+
+</head>
+<body>
+<pre id="test">
+ <script type="text/javascript" src="Proxy.test.js"></script>
+</pre>
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Proxy.test.js b/frontend/gamma/tests/tests/Clipperz/PM/Proxy.test.js
new file mode 100644
index 0000000..8a16a5b
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Proxy.test.js
@@ -0,0 +1,117 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+
+ 'simple_tests': function() {
+ var deferredResult;
+
+ deferredResult = new Clipperz.Async.Deferred("simple_tests", {trace:false});
+ deferredResult.addCallback(function() {
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy();
+ ok(proxy != null, "can create instances of the Proxy class");
+ is(proxy.shouldPayTolls(), false, "proxy is set to NOT pay tolls by default");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'simpleTestsWithTolls_tests': function() {
+ var deferredResult;
+
+ deferredResult = new Clipperz.Async.Deferred("simple_tests", {trace:false});
+ deferredResult.addCallback(function() {
+ var proxy;
+
+ proxy = new Clipperz.PM.Proxy({shouldPayTolls:true});
+ is(proxy.shouldPayTolls(), true, "I can set Proxy to pays tolls");
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+//#############################################################################
+
+runTests = function(aClassName) {
+ try {
+ var deferredTests;
+ var aTestName;
+
+ deferredTests = new Clipperz.Async.Deferred(aClassName + ".test", {trace:false});
+
+ aTestName = window.location.href.match(/#.*/);
+ if (aTestName && (aTestName != '#')) {
+ aTestName = aTestName[0].slice(1);
+ if (aTestName in tests) {
+ //Clipperz.log("single test execution, via fragment identifier", aTestName);
+ deferredTests.addCallback(tests[aTestName]);
+ deferredTests.addErrback(SimpleTest.ok, false, aTestName);
+ } else {
+ deferredTests.addBoth(is, aTestName, null, "Wrong test name selected to run");
+ }
+ } else {
+ for (aTestName in tests) {
+ deferredTests.addCallback(tests[aTestName]);
+ deferredTests.addErrback(SimpleTest.ok, false, aTestName);
+ }
+ deferredTests.addBoth(is, true, true, "FINISH: completed the full stack of tests");
+ }
+ deferredTests.addBoth(SimpleTest.finish);
+ deferredTests.callback();
+
+ SimpleTest.waitForExplicitFinish();
+ } catch (err) {
+ var s = "test suite failure!\n";
+ var o = {};
+ var k = null;
+ for (k in err) {
+ // ensure unique keys?!
+ if (!o[k]) {
+ s += k + ": " + err[k] + "\n";
+ o[k] = err[k];
+ }
+ }
+ ok ( false, s );
+ }
+}("Clipperz.PM.Proxy");
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Toll.html b/frontend/gamma/tests/tests/Clipperz/PM/Toll.html
new file mode 100644
index 0000000..7937380
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Toll.html
@@ -0,0 +1,62 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.Toll - test</title>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../js/JSLog/jslog.js"></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../js/Clipperz/PM/Toll.js'></script>
+ <script type="text/javascript" src="../../../SimpleTest/SimpleTest.Async.js"></script>
+
+</head>
+<body>
+<pre id="test">
+ <script type="text/javascript" src="Toll.test.js"></script>
+</pre>
+
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/Toll.test.js b/frontend/gamma/tests/tests/Clipperz/PM/Toll.test.js
new file mode 100644
index 0000000..b54996f
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/Toll.test.js
@@ -0,0 +1,202 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+ //-------------------------------------------------------------------------
+/*
+ 'simple_test': function() {
+ var deferredResult;
+
+ deferredResult = new Clipperz.Async.Deferred("simple_tests", {trace:false});
+ deferredResult.addCallback(function() {
+ var tollTargetValue;
+ var toll;
+ var price;
+
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32);
+ tollTargetValue = Clipperz.Crypto.SHA.sha256(tollTargetValue);
+
+ price = 1;
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32);
+ toll = new Clipperz.PM.Toll({targetValue:tollTargetValue.toHexString(), cost:price});
+ toll.pay();
+
+ price = 5;
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32);
+ toll = new Clipperz.PM.Toll({targetValue:tollTargetValue.toHexString(), cost:price});
+ toll.pay();
+
+ price = 6;
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32);
+ toll = new Clipperz.PM.Toll({targetValue:tollTargetValue.toHexString(), cost:price});
+ toll.pay();
+
+ price = 7;
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32);
+ toll = new Clipperz.PM.Toll({targetValue:tollTargetValue.toHexString(), cost:price});
+ toll.pay();
+
+ price = 7;
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32);
+ toll = new Clipperz.PM.Toll({targetValue:tollTargetValue.toHexString(), cost:price});
+ toll.pay();
+ });
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+*/
+ //-------------------------------------------------------------------------
+
+ 'deferredPay_test': function() {
+ var deferredResult;
+ var tollTargetValue;
+ var toll_1, toll_5, toll_6, toll_7, toll_10, toll_16;
+
+// tollTargetValue = Clipperz.Crypto.SHA.sha256(Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32));
+
+
+
+ deferredResult = new Clipperz.Async.Deferred("deferredPay_tests", {trace:false});
+
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2);
+ toll_1 = new Clipperz.PM.Toll({targetValue:tollTargetValue, cost:1});
+
+ deferredResult.addMethod(toll_1, 'deferredPay');
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.ok(Clipperz.PM.Toll.validate(aResult.targetValue, aResult.toll, 1), "Payed a toll of cost 1");
+ });
+ deferredResult.addCallback(MochiKit.Async.wait, 1);
+
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2);
+ toll_5 = new Clipperz.PM.Toll({targetValue:tollTargetValue, cost:5});
+
+ deferredResult.addMethod(toll_5, 'deferredPay');
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.ok(Clipperz.PM.Toll.validate(aResult.targetValue, aResult.toll, 5), "Payed a toll of cost 5");
+ });
+ deferredResult.addCallback(MochiKit.Async.wait, 1);
+
+
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2);
+ toll_6 = new Clipperz.PM.Toll({targetValue:tollTargetValue, cost:6});
+
+ deferredResult.addMethod(toll_6, 'deferredPay');
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.ok(Clipperz.PM.Toll.validate(aResult.targetValue, aResult.toll, 6), "Payed a toll of cost 6");
+ });
+ deferredResult.addCallback(MochiKit.Async.wait, 1);
+
+
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2);
+ toll_7 = new Clipperz.PM.Toll({targetValue:tollTargetValue, cost:7});
+
+ deferredResult.addMethod(toll_7, 'deferredPay');
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.ok(Clipperz.PM.Toll.validate(aResult.targetValue, aResult.toll, 7), "Payed a toll of cost 7");
+ });
+ deferredResult.addCallback(MochiKit.Async.wait, 1);
+
+
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2);
+ toll_10 = new Clipperz.PM.Toll({targetValue:tollTargetValue, cost:10});
+
+ deferredResult.addMethod(toll_10, 'deferredPay');
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.ok(Clipperz.PM.Toll.validate(aResult.targetValue, aResult.toll, 10), "Payed a toll of cost 10");
+ });
+ deferredResult.addCallback(MochiKit.Async.wait, 1);
+
+/*
+ tollTargetValue = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2);
+ toll_16 = new Clipperz.PM.Toll({targetValue:tollTargetValue, cost:16});
+
+ deferredResult.addMethod(toll_16, 'deferredPay');
+ deferredResult.addCallback(function (aResult) {
+ SimpleTest.ok(Clipperz.PM.Toll.validate(aResult.targetValue, aResult.toll, 16), "Payed a toll of cost 16");
+ });
+ deferredResult.addCallback(MochiKit.Async.wait, 1);
+*/
+
+ deferredResult.callback();
+
+ return deferredResult;
+ },
+
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+//#############################################################################
+
+runTests = function() {
+ try {
+ var deferredTests;
+ var aTestName;
+
+ deferredTests = new Clipperz.Async.Deferred("Clipperz.PM.Toll.test", {trace:false});
+
+ aTestName = window.location.href.match(/#.*/);
+ if (aTestName && (aTestName != '#')) {
+ aTestName = aTestName[0].slice(1);
+ if (aTestName in tests) {
+ //Clipperz.log("single test execution, via fragment identifier", aTestName);
+ deferredTests.addCallback(tests[aTestName]);
+ deferredTests.addErrback(SimpleTest.ok, false, aTestName);
+ } else {
+ deferredTests.addBoth(is, aTestName, null, "Wrong test name selected to run");
+ }
+ } else {
+ for (aTestName in tests) {
+ deferredTests.addCallback(tests[aTestName]);
+ deferredTests.addErrback(SimpleTest.ok, false, aTestName);
+ }
+ deferredTests.addBoth(is, true, true, "FINISH: completed the full stack of tests");
+ }
+ deferredTests.addBoth(SimpleTest.finish);
+ deferredTests.callback();
+
+ SimpleTest.waitForExplicitFinish();
+ } catch (err) {
+ var s = "test suite failure!\n";
+ var o = {};
+ var k = null;
+ for (k in err) {
+ // ensure unique keys?!
+ if (!o[k]) {
+ s += k + ": " + err[k] + "\n";
+ o[k] = err[k];
+ }
+ }
+ ok ( false, s );
+ }
+}();
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/MainController.html b/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/MainController.html
new file mode 100644
index 0000000..6fbdcd6
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/MainController.html
@@ -0,0 +1,64 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.UI.Web.MainController - test</title>
+
+ <script type="text/javascript" src="../../../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../../../../js/JSLog/jslog.js"></script>
+ <script type="text/javascript" src="../../../../../../SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../../../../SimpleTest/test.css">
+
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/YUI/Utils.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Base.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/ByteArray.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Logging.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Async.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/KeyValueObjectStore.js'></script>
+
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Crypto/Base.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Crypto/BigInt.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Crypto/AES.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Crypto/SHA.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Crypto/PRNG.js'></script>
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Crypto/SRP.js'></script>
+
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/Signal.js'></script>
+
+ <script type='text/javascript' src='../../../../../../../js/Clipperz/PM/UI/Web/Controllers/MainController.js'></script>
+ <script type="text/javascript" src="../../../../../../SimpleTest/SimpleTest.Async.js"></script>
+
+</head>
+<body>
+<pre id="test">
+ <script type="text/javascript" src="MainController.test.js"></script>
+</pre>
+
+</body>
+</html>
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/MainController.test.js b/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/MainController.test.js
new file mode 100644
index 0000000..3953558
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/MainController.test.js
@@ -0,0 +1,90 @@
+/*
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+*/
+
+//Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose();
+
+var tests = {
+
+ 'isPassphraseDelegateLockSetAfterInit': function (someTestArgs) {
+ return Clipperz.Async.callbacks('isPassphraseDelegateLockSetAfterInit', [
+ function () {
+ var mainController;
+
+ mainController = new Clipperz.PM.UI.Web.Controllers.MainController();
+ SimpleTest.is(true, mainController._passphraseDelegateLock.locked, 'passphraseDelegate lock is locked after MainController initialization')
+ }]);
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'getPassphraseWithUnsetDelegate_test': function (someTestArgs) {
+ var deferredResult;
+ var mainController;
+ var delegateFunction;
+
+ mainController = new Clipperz.PM.UI.Web.Controllers.MainController();
+ delegateFunction = function () { return "clipperz";};
+
+ MochiKit.Async.callLater(1, MochiKit.Base.method(mainController, 'setPassphraseDelegate', delegateFunction));
+
+ return Clipperz.Async.callbacks("MainController.getPassphraseWithUnsetDelegate",[
+ MochiKit.Base.method(mainController, 'getPassphrase'),
+ function (aResult) {
+ SimpleTest.is(aResult, 'clipperz', "the password provided by the delegate is correct");
+ }
+ ], {trace:false});
+ },
+
+ //-------------------------------------------------------------------------
+
+ 'getPassphraseWithSetDelegate_test': function (someTestArgs) {
+ var deferredResult;
+ var mainController;
+ var delegateFunction;
+
+ mainController = new Clipperz.PM.UI.Web.Controllers.MainController();
+ delegateFunction = function () {return "clipperz";};
+
+ return Clipperz.Async.callbacks("MainController.getPassphraseWithSetDelegate_test",[
+ MochiKit.Base.method(mainController, 'setPassphraseDelegate', delegateFunction),
+ MochiKit.Base.method(mainController, 'getPassphrase'),
+ function (aResult) {
+ SimpleTest.is(aResult, 'clipperz', "the password provided by the delegate is correct");
+ }
+ ], {trace:false});
+ },
+
+ //-------------------------------------------------------------------------
+ 'syntaxFix': MochiKit.Base.noop
+};
+
+
+
+//#############################################################################
+
+SimpleTest.runDeferredTests("Clipperz.PM.UI.Web.Controllers.MainController", tests, {trace:false});
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/index.html b/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/index.html
new file mode 100644
index 0000000..f3283b6
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/Controllers/index.html
@@ -0,0 +1,46 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.UI.Web.Controllers.* - tests</title>
+
+ <script type="text/javascript" src="../../../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../../../SimpleTest/TestRunner.js"></script>
+</head>
+<body>
+<script>
+TestRunner.runTests(
+//
+// This is still a complete mess.
+//
+ 'MainController.html'
+);
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/index.html b/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/index.html
new file mode 100644
index 0000000..9afa73d
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/UI/Web/index.html
@@ -0,0 +1,45 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.UI.Web* - tests</title>
+
+ <script type="text/javascript" src="../../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../../SimpleTest/TestRunner.js"></script>
+</head>
+<body>
+<script>
+TestRunner.runTests(
+//
+// This is still a complete mess.
+//
+);
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/UI/index.html b/frontend/gamma/tests/tests/Clipperz/PM/UI/index.html
new file mode 100644
index 0000000..867362b
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/UI/index.html
@@ -0,0 +1,45 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.UI.* - tests</title>
+
+ <script type="text/javascript" src="../../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../../SimpleTest/TestRunner.js"></script>
+</head>
+<body>
+<script>
+TestRunner.runTests(
+//
+// This is still a complete mess.
+//
+);
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/frontend/gamma/tests/tests/Clipperz/PM/index.html b/frontend/gamma/tests/tests/Clipperz/PM/index.html
new file mode 100644
index 0000000..acc45f7
--- a/dev/null
+++ b/frontend/gamma/tests/tests/Clipperz/PM/index.html
@@ -0,0 +1,56 @@
+<!--
+
+Copyright 2008-2011 Clipperz Srl
+
+This file is part of Clipperz's Javascript Crypto Library.
+Javascript Crypto Library provides web developers with an extensive
+and efficient set of cryptographic functions. The library aims to
+obtain maximum execution speed while preserving modularity and
+reusability.
+For further information about its features and functionalities please
+refer to http://www.clipperz.com
+
+* Javascript Crypto Library is free software: you can redistribute
+ it and/or modify it under the terms of the GNU Affero General Public
+ License as published by the Free Software Foundation, either version
+ 3 of the License, or (at your option) any later version.
+
+* Javascript Crypto Library 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 Affero General Public License for more details.
+
+* You should have received a copy of the GNU Affero General Public
+ License along with Javascript Crypto Library. If not, see
+ <http://www.gnu.org/licenses/>.
+
+-->
+
+<html>
+<head>
+ <title>Clipperz.PM.* - tests</title>
+
+ <script type="text/javascript" src="../../../../js/MochiKit/MochiKit.js"></script>
+ <script type="text/javascript" src="../../../SimpleTest/TestRunner.js"></script>
+</head>
+<body>
+<script>
+TestRunner.runTests(
+//
+// This is still a complete mess.
+//
+// 'BookmarkletProcessor.html',
+ 'Connection.html',
+ 'Crypto.html',
+// 'Crypto_other_implementation_comparison.html',
+ 'Crypto_performanceEvaluation.html',
+// 'CryptoPerformance_ByteArrayArray.html',
+// 'CryptoPerformance_ByteArrayHex.html',
+// 'CryptoPerformance_ByteArrayString.html',
+ 'Date.html',
+ 'Proxy.html',
+ 'Toll.html'
+);
+</script>
+</body>
+</html> \ No newline at end of file