Return-Path: Mailing-List: contact cocoon-dev-help@xml.apache.org; run by ezmlm Delivered-To: mailing list cocoon-dev@xml.apache.org Received: (qmail 86988 invoked from network); 20 Feb 2001 08:16:51 -0000 Received: from wilson.koeln.sevenval.net (213.61.34.70) by h31.sny.collab.net with SMTP; 20 Feb 2001 08:16:51 -0000 Received: from jungle (Jungle.office.sevenval.de [172.22.77.189]) by Wilson.koeln.sevenval.net (8.9.3/8.9.3) with SMTP id JAA04812 for ; Tue, 20 Feb 2001 09:17:15 +0100 From: =?iso-8859-1?q?J=F6rg=20Prante?= Reply-To: joerg@7val.com Organization: Sevenval AG e-commerce base technologies Date: Tue, 20 Feb 2001 09:16:35 +0100 X-Mailer: KMail [version 1.1.99] Content-Type: Multipart/Mixed; charset=""; boundary="------------Boundary-00=_NZQ1ZBV9OWQZSKGICRTH" Subject: Contribution: session tracking for Cocoon 2 To: cocoon-dev@xml.apache.org MIME-Version: 1.0 Message-Id: <01022009163503.29730@jungle> X-Spam-Rating: h31.sny.collab.net 1.6.2 0/1000/N --------------Boundary-00=_NZQ1ZBV9OWQZSKGICRTH Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit After using Cocoon 2 since October last year and reading the Cocoon-devel list since January, I like to give something back. I have added URI-based session tracking to Cocoon 2. This will be used in one of our commercial tools that will use a modified Cocoon 2. I'm sure that session tracking will convince many companies of using Cocoon 2 because it is a useful feature. Please apologize if I'm wrong but I couldn't find information on the project site about plans if and how Cocoon 2 will support session tracking. I allowed myself getting bold and wrote an XML Stylebook document for the Cocoon 'xdocs' directory which explains all the changes I did to the latest CVS. It includes all the code fragments I have added, plus a short introduction for people who are not familiar with session tracking. I hope this document can be useful for the Cocoon 2 documentation if you decide to receive my contribution. Please excuse me that I am not sending diff's because this will not explain things I've done. The CVS is moving so fast that this does not make much sense. I'd like to contribute more features to Cocoon 2 and other Apache projects - e.g. log analysis of tracked sessions - if you agree with the proposed solution, so please give me some feedback. Please see the attached sessions.xml for all the details. J�rg -- J�rg Prante Sevenval AG (HRB 32757) e-business marketing technologies D-50667 K�ln . Alter Markt 36-42 Fon +49 221 65007-0 . Fax 4249891 http://www.sevenval.de . joerg@7val.com --------------Boundary-00=_NZQ1ZBV9OWQZSKGICRTH Content-Type: text/xml; name="sessions.xml" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sessions.xml" PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IURPQ1RZUEUgZG9j dW1lbnQgU1lTVEVNICJkdGQvZG9jdW1lbnQtdjEwLmR0ZCI+Cgo8ZG9jdW1lbnQ+CgogIDxoZWFk ZXI+CiAgICA8dGl0bGU+U2Vzc2lvbiB0cmFja2luZyB3aXRoIENvY29vbjwvdGl0bGU+CiAgICA8 c3VidGl0bGU+SW50cm9kdWN0aW9uLCBJbnN0YWxsYXRpb24gYW5kIEV4YW1wbGU8L3N1YnRpdGxl PgogICAgPHZlcnNpb24+MC4xPC92ZXJzaW9uPgogICAgPHR5cGU+VGVjaG5pY2FsIERvY3VtZW50 PC90eXBlPgogICAgPGF1dGhvcnM+CiAgICAgIDxwZXJzb24gbmFtZT0iSvZyZyBQcmFudGUiIGVt YWlsPSJqb2VyZ0A3dmFsLmNvbSIvPgogICAgPC9hdXRob3JzPgogICAgPGFic3RyYWN0PgogICAg VGhpcyBkb2N1bWVudCBleHBsYWlucyB3aGF0IENvY29vbiAyIHByb3ZpZGVzIHRvIHN1cHBvcnQg c2Vzc2lvbiB0cmFja2luZy4KICAgIFNlc3Npb24gdHJhY2tpbmcgaXMgYW4gaW1wb3J0YW50IGZl YXR1cmUgZm9yIHdlYiBzZXJ2ZXIgZnJhbWV3b3JrcwogICAgYmVjYXVzZSBIVFRQIGFuZCByZWxh dGVkIHByb3RvY29scyBhcmUgc3RhdGVsZXNzLAogICAgYnV0IHNvbWV0aW1lcyB3ZSBuZWVkIHN0 YXRlZnVsIGluZm9ybWF0aW9uIGFib3V0IHZpc2l0b3JzIG9mIGEgQ29jb29uIHNpdGUuCiAgICBG b3IgYSBtb3JlIHByZWNpc2UgYW5hbHlzaXMgb2YgYSB3ZWIgc2l0ZSwgdGhlIHRyYWNraW5nIG9m IHZpc2l0b3JzCiAgICBzaG91bGQgd29yayBpbmRlcGVuZGFudCBvZiB0aGUgdmlzaXRvcidzIGJy b3dzZXIgYW5kIG9mIHRoZSB2aXNpdG9yJ3MgZGVjaXNpb24KICAgIHdoZXRoZXIgd2UgZW5hYmxl ZCBjb29raWVzIG9yIG5vdC4gTGFzdCBub3QgbGVhc3QsIENvY29vbiAyIHNob3VsZCBub3QKICAg IGJlIGRlcGVuZGFudCBvZiB0aGUgbWV0aG9kIHRoZSBzZXJ2bGV0IGVuZ2luZSBwcmVmZXJzIHRv IGdlbmVyYXRlIHNlc3Npb24gSURzLgogICAgSW4gdGhpcyBkb2N1bWVudCwgaXQgaXMgZGVzY3Jp YmVkIHN0ZXAgYnkgc3RlcCB3aGF0IGhhcyB0byBiZSBkb25lIHRvIGVuYWJsZQogICAgQ29jb29u IDIgZm9yIHNlc3Npb24gbWFuYWdlbWVudC4KICAgIDwvYWJzdHJhY3Q+CiAgPC9oZWFkZXI+Cgog IDxib2R5PgogICAgPHMxIHRpdGxlPSJJbnRyb2R1Y3Rpb24iPgogICAgICA8czIgdGl0bGU9Ikdv YWwiPgogICAgICAgIDxwPgogICAgICAgICBNYWludGFpbmluZyBzdGF0ZSBpcyBhIGNvbW1vbiBw cm9ibGVtIGZvciB3ZWIgc2VydmVyIGZyYW1ld29ya3MKICAgICAgICAgYmVjYXVzZSBIVFRQIGlz IGEgc3RhdGVsZXNzIHByb3RvY29sLiBUaGVyZSBhcmUgbWFueSBzb2x1dGlvbnMga25vd24KICAg ICAgICAgdG8gb2J0YWluIHN0YXRlZnVsIGluZm9ybWF0aW9uLiBDbGllbnQtc2lkZSBzdG9yYWdl IG9mIHN0YXRlIGluZm9ybWF0aW9uCiAgICAgICAgIGxpa2UgdGhlIHVzYWdlIG9mIGNvb2tpZXMg d2lsbCBub3QgYmUgZGlzY3Vzc2VkIGhlcmUsIHNpbmNlIHRoaXMgZGVwZW5kcwogICAgICAgICBo ZWF2aWx5IG9uIHRoZSBjbGllbnQncyBicm93c2VyLiBTaW5jZSBDb2Nvb24gaXMgYSBzZXJ2ZXIt c2lkZSBmcmFtZXdvcmssCiAgICAgICAgIHN0b3JpbmcgdmlzaXRvciBpbmZvcm1hdGlvbiBhdCB0 aGUgc2VydmVyIHNpZGUgd2lsbCBnaXZlIGZ1bGwgYWNjZXNzCiAgICAgICAgIHRvIHRoZSBsaXN0 IG9mIGFsbCB2aXNpdG9ycywgdG8gd2hhdCB0aGV5IGhhdmUgZG9uZSwgYW5kIHdoYXQgdGhleSBh cmUKICAgICAgICAgZG9pbmcuCiAgICAgICAgIDwvcD4KICAgICAgICAgPHA+UGxlYXNlIGFsd2F5 cyB0aGluayBhIGxpdHRsZSB3aGlsZSBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gc2V0IHVwCiAgICAg ICAgIHNlc3Npb24gbWFuYWdlbWVudC4gTGVzcyBzY2FsYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ug aXMgdGhlIGRhcmsKICAgICAgICAgc2lkZSBvZiBrZWVwaW5nIHVzZXIgc2Vzc2lvbnMgYXQgdGhl IHNlcnZlci1zaWRlLiBFYWNoIHVzZXIgc2Vzc2lvbiBjb25zdW1lcwogICAgICAgICBtZW1vcnks IGRpc2ssIGFuZCBDUFUsIGFuZCBpdCBpcyBhbHdheXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgYmUg Y2FyZWZ1bCB0bwogICAgICAgICBzeXN0ZW0gcmVzb3VyY2VzIGJlZm9yZSB3YXN0aW5nIGl0Lgog ICAgICAgICA8L3A+CiAgICAgICAgIDxwPgogICAgICAgICBJZiB5b3UgZGVjaWRlZCB0byBzZXQg dXAgc2Vzc2lvbiB0cmFja2luZywgQ29jb29uIDIgb2ZmZXJzIHlvdToKICAgICAgICAgPC9wPgog ICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+Y3JlYXRpb24gb2YgbmV3IHNlc3Npb24gSURz PC9saT4KICAgICAgICAgICAgPGxpPmZ1bGwgc2Vzc2lvbiBjb250cm9sIGJ5IHRoZSB1bmRlcmx5 aW5nIFNlcnZsZXQgQVBJIDIuMiBzZXJ2bGV0IGVuZ2luZTwvbGk+CiAgICAgICAgICAgIDxsaT5j b29raWUtIGFuZCBVUkktYmFzZWQgc2Vzc2lvbiBtYW5hZ21lbnQ8L2xpPgogICAgICAgICAgICA8 bGk+YXV0b21hdGljIGxpbmsgcmV3cml0ZSBpZiB5b3UgbGlrZSB5b3VyIFhTUCBwYWdlcyB0byBi ZSBVUkktc2Vzc2lvbi1hd2FyZTwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICA8L3MyPgog ICAgICA8L3MxPgoKICAgICAgPHMxIHRpdGxlPSJJbnN0YWxsYXRpb24iPgogICAgICAgIDxzMiB0 aXRsZT0iSW5zdGFsbCBidWlsdC1pbiBsb2dpY3NoZWV0IHNlc3Npb24ueHNsIj4KICAgICAgICAg IDxwPgogICAgICAgICAgQ2hlY2sgaWYgeW91IGhhdmUgdGhlIGJ1aWx0LWluIDxjb2RlPnNlc3Np b24ueHNsPC9jb2RlPiBsb2dpY3NoZWV0IGluc3RhbGxlZCBpbiB5b3VyCiAgICAgICAgICBDb2Nv b24gZnJhbWV3b3JrLiA8Y29kZT5jb2Nvb24ueGNvbmY8L2NvZGU+IGlzIHRoZSBmaWxlIHRoYXQg ZGVmaW5lcyB0aGUKICAgICAgICAgIGxvZ2ljc2hlZXRzIGFuZCBvdGhlciA8bGluayBocmVmPSJh dmFsb24uaHRtbCI+QXZhbG9uPC9saW5rPiBDb21wb25lbnRzLgogICAgICAgICAgVGhlIGZvbGxv d2luZyBtdXN0IGJlIHByZXNlbnQgaW4gPGNvZGU+JHtjb2Nvb259L2NvY29vbi54Y29uZjwvY29k ZT46CiAgICAgICAgICA8L3A+Cgo8c291cmNlPjwhW0NEQVRBWwo8YnVpbHRpbi1sb2dpY3NoZWV0 PgogIDxwYXJhbWV0ZXIgbmFtZT0icHJlZml4IiB2YWx1ZT0ic2Vzc2lvbiIvPgogIDxwYXJhbWV0 ZXIgbmFtZT0idXJpIiB2YWx1ZT0iaHR0cDovL2FwYWNoZS5vcmcveHNwL3Nlc3Npb24iLz4KICA8 cGFyYW1ldGVyIG5hbWU9ImhyZWYiIHZhbHVlPSJyZXNvdXJjZTovL29yZy9hcGFjaGUvY29jb29u L2NvbXBvbmVudHMvbGFuZ3VhZ2UvbWFya3VwL3hzcC9qYXZhL3Nlc3Npb24ueHNsIi8+CjwvYnVp bHRpbi1sb2dpY3NoZWV0PgpdXT48L3NvdXJjZT4KCiAgICAgICAgIDwvczI+CgogICAgICAgIDxz MiB0aXRsZT0iU2V0IHVwIHRoZSBzZXNzaW9uOmVuY29kZS11cmwgdGVtcGxhdGUiPgoKICAgICAg ICA8cD4KICAgICAgICBUbyBlbmFibGUgQ29jb29uIGZvciBVUkktYmFzZWQgc2Vzc2lvbiBJRHMs IGFuIFhTUCB0ZW1wbGF0ZSB3aXRoIHRoZSBuYW1lCiAgICAgICAgPGNvZGU+c2Vzc2lvbjplbmNv ZGUtdXJsPC9jb2RlPiB3aWxsIGRvIHRoaXMgZm9yIHlvdS4gSXQgdXNlcyB0aGUKICAgICAgICA8 Y29kZT5lbmNvZGVVUkw8L2NvZGU+IG1ldGhvZCBmcm9tIHRoZSBTZXJ2bGV0IEFQSSB3aGljaCBl bmNvZGVzCiAgICAgICAgYW4gVVJMIGluIGEgd2F5IHRoYXQgYSBzZXNzaW9uIElEIGlzIGJlaW5n IGF0dGFjaGVkLiBDb25zdWx0IHlvdXIKICAgICAgICBzZXJ2bGV0IGVuZ2luZSBkb2N1bWVudGF0 aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSA8Y29kZT5lbmNvZGVVUkw8L2NvZGU+ CiAgICAgICAgbWV0aG9kIHJldHVybnMuIEZvciBleGFtcGxlLCB0aGUgVG9tY2F0CiAgICAgICAg ZW5naW5lIGFkZHMgYSBzdHJpbmcgPGNvZGU+O2pzZXNzaW9uPTwvY29kZT4gZm9sbG93ZWQgYnkg YW4gTUQ1IGhhc2gKICAgICAgICB0byB0aGUgVVJMLCBidXQgb25seSBpZiB0aGUgY2xpZW50J3Mg YnJvd3NlciBkb2VzIG5vdCBhY2NlcHQgY29va2llcy4KICAgICAgICA8L3A+CgogICAgICAgIDxw PkhlcmUgaXMgdGhlIGZyYWdtZW50IGZvciB0aGUgPGNvZGU+c2Vzc2lvbjplbmNvZGUtdXJsPC9j b2RlPjo8L3A+Cgo8c291cmNlPjwhW0NEQVRBWwogIDwhLS0gZW5jb2RlIGFuIFVSTCB3aXRoIHRo ZSBzZXNzaW9uIElEIC0tPgogIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InNlc3Npb246ZW5jb2RlLXVy bCI+CiAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImhyZWYiPgogICAgICAgICI8eHNsOnZhbHVlLW9m IHNlbGVjdD0iQGhyZWYiLz4iCiAgICA8L3hzbDp2YXJpYWJsZT4KCiAgICA8eHNwOmVsZW1lbnQg bmFtZT0iYSI+CiAgICAgICA8eHNwOmF0dHJpYnV0ZSBuYW1lPSJocmVmIj4KICAgICAgICAgIDx4 c3A6ZXhwcj5yZXNwb25zZS5lbmNvZGVVUkwoU3RyaW5nLnZhbHVlT2YoPHhzbDpjb3B5LW9mIHNl bGVjdD0iJGhyZWYiLz4pKTwveHNwOmV4cHI+CiAgICAgICA8L3hzcDphdHRyaWJ1dGU+CiAgICAg ICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iLiIvPgogICAgPC94c3A6ZWxlbWVudD4KCiAgPC94c2w6 dGVtcGxhdGU+Cl1dPjwvc291cmNlPgoKICAgICAgICAgPHA+CiAgICAgICAgIEFzIHlvdSBtaWdo dCB3b25kZXIsIHRoZSBYU1AgdGVtcGxhdGUgY29uc3RydWN0cyBhIEhUTUwgdGFnIDxjb2RlPiZs dDthJmd0OzwvY29kZT4gd2l0aCBhbgogICAgICAgICBhdHRyaWJ1dGUgPGNvZGU+aHJlZjwvY29k ZT4gd2hpY2ggaXMgZW5vdWdoIGZvciBtb3N0IG9mIHRoZSBjYXNlcy4KICAgICAgICAgT3RoZXIg bWV0aG9kcywgbGlrZSBYTGluaywgYXJlIHBsYW5uZWQgdG8gYmUgc3VwcG9ydGVkIGF0IGEgbGF0 ZXIgdGltZSB3aGVuCiAgICAgICAgIGZpbmFsIFczQyByZWNvbW1lbmRhdGlvbnMgYXJlIG91dC4K ICAgICAgICAgPC9wPgoKICAgICAgICAgPC9zMj4KCiAgICAgICAgIDxzMiB0aXRsZT0iQ3JlYXRp bmcgbmV3IHNlc3Npb25zIj4KICAgICAgICAgPHA+CiAgICAgICAgIFRoZSBiZXN0IHBsYWNlIG9m IGEgd2ViIHNpdGUgd2hlcmUgbmV3IHNlc3Npb25zIHNob3VsZCBiZSBjcmVhdGVkIGlzIHRoZSBl bnRyeSBwb2ludAogICAgICAgICB3aGVyZSBhbGwgb3IgbW9zdCBvZiB0aGUgdmlzaXRvcnMgc3Rl cCBpbi4gQWZ0ZXIgY3JlYXRpbmcgdGhlIHNlc3Npb24sIG9yCiAgICAgICAgIHJldHJpZXZpbmcg YW4gb2xkIHNlc3Npb24sIHRoZSB2aXNpdG9yIGlzIHJlZGlyZWN0ZWQgdG8gYSBzdGFydCBwYWdl LgogICAgICAgICBJbiBDb2Nvb24sIHlvdSBtdXN0IGVkaXQgeW91ciBzaXRlbWFwIGluIG9yZGVy IHRvCiAgICAgICAgIHNwZWNpZnkgdGhpcyBpbnRlcmVzdGluZyBwb2ludCBvZiBzZXNzaW9uIGNy ZWF0aW9uLgogICAgICAgICBUaGUgPGNvZGU+bWFwLXJlZGlyZWN0LXRvPC9jb2RlPgogICAgICAg ICBoYXMgYW4gZXh0cmEgYXR0cmlidXRlIDxjb2RlPnNlc3Npb248L2NvZGU+LCB3aGljaCBjYW4g YmUgc2V0IHRvIDxjb2RlPnRydWU8L2NvZGU+CiAgICAgICAgIG9yIDxjb2RlPmZhbHNlPC9jb2Rl Pi4gVGhlIGZvcm1lciB3aWxsIGdlbmVyYXRlIGEgbmV3IHNlc3Npb24gSUQgaWYgbmVlZGVkCiAg ICAgICAgIGJ5IGludm9raW5nIHRoZSBTZXJ2bGV0IEFQSSBtZXRob2QgPGNvZGU+c2Vzc2lvbiA9 IHJlcXVlc3QuZ2V0U2Vzc2lvbih0cnVlKTwvY29kZT4sCiAgICAgICAgIHdoaWxlIHRoZSBsYXR0 ZXIgaWdub3JlcyBzZXNzaW9uIElEIGhhbmRsaW5nLgogICAgICAgICA8L3A+CgogICAgICAgICA8 cD4KICAgICAgICAgSG93IGNhbiBDb2Nvb24gcmVjb2duaXplIFVSSXMgd2l0aCBhcHBlbmRlZCBz ZXNzaW9uIElEcz8gVGhlIGFuc3dlciBpczoKICAgICAgICAgQ29jb29uIGNhbiBtYXRjaCBhIHdp bGRjYXJkIGFnYWluc3QgeW91ciBzZXNzaW9uaXplZCBwYWdlcyBhbmQga2VlcHMgaGFwcHkuCiAg ICAgICAgIFNvIHBsZWFzZSBkbyBub3QgZm9yZ2V0IHRvIGFwcGVuZCBhbiBhc3RlcmlzayAnKicg dG8geW91ciBwYXR0ZXJucyBpbiB0aGUgcGlwZWxpbmVzLgogICAgICAgICA8L3A+CgogICAgICAg ICA8cD4KICAgICAgICAgVGhpcyBmcmFnbWVudCBmcm9tIDxjb2RlPnNpdGVtYXAueHNsPC9jb2Rl PiBzaG93cyBob3cgeW91IGNhbiBhZGQgYQogICAgICAgICA8Y29kZT5tYXA6cmVkaXJlY3QtdG88 L2NvZGU+IHRvCiAgICAgICAgIHlvdXIgQ29jb29uIGZyYW1ld29yayB3aXRoIHNlc3Npb24gaGFu ZGxpbmcgYXQgdGhlIHJvb3QgVVJMIGZvciB5b3VyCiAgICAgICAgIHdlYiBhcHBsaWNhdGlvbjoK ICAgICAgICAgPC9wPgoKPHNvdXJjZT48IVtDREFUQVsKCiA8bWFwOnBpcGVsaW5lcz4KICA8bWFw OnBpcGVsaW5lPgoKICAgPG1hcDptYXRjaCBwYXR0ZXJuPSIiPgogICAgIDxtYXA6cmVkaXJlY3Qt dG8gc2Vzc2lvbj0idHJ1ZSIgdXJpPSJ3ZWxjb21lIi8+CiAgIDwvbWFwOm1hdGNoPgoKICAgPG1h cDptYXRjaCBwYXR0ZXJuPSJ3ZWxjb21lKiI+CiAgICA8bWFwOmdlbmVyYXRlIHR5cGU9ImZpbGUi IHNyYz0ic2l0ZS93ZWxjb21lLnhtbCIvPgogICAgPG1hcDp0cmFuc2Zvcm0gc3JjPSJzdHlsZXNo ZWV0cy93ZWxjb21lLnhzbCIvPgogICAgPG1hcDpzZXJpYWxpemUvPgogICA8L21hcDptYXRjaD4K CiAgIDxtYXA6bWF0Y2ggcGF0dGVybj0iKioueHNwKiI+CiAgICA8bWFwOmdlbmVyYXRlIHR5cGU9 InNlcnZlcnBhZ2VzIiBzcmM9InNpdGUvezF9LnhzcCIvPgogICAgPG1hcDp0cmFuc2Zvcm0gc3Jj PSJzdHlsZXNoZWV0cy9keW5hbWljLXBhZ2UyaHRtbC54c2wiLz4KICAgIDxtYXA6c2VyaWFsaXpl Lz4KICAgPC9tYXA6bWF0Y2g+Cl1dPjwvc291cmNlPgoKICAgICAgICAgICA8cD4KICAgICAgICAg ICBUaGUgZm9sbG93aW5nIGNvZGUgbXVzdCBiZSBwcmVzZW50IGluIHRoZSA8Y29kZT5zaXRlbWFw LnhzbDwvY29kZT4gZmlsZSB0byBzdXBwb3J0CiAgICAgICAgICAgdGhlIGV4dHJhIHNlc3Npb24g cGFyYW1ldGVyIGZvciA8Y29kZT5tYXA6cmVkaXJlY3QtdG88L2NvZGU+LgogICAgICAgICAgIDwv cD4KCgo8c291cmNlPjwhW0NEQVRBWwogIDwhLS0gZ2VuZXJhdGUgdGhlIGNvZGUgdG8gcmVkaXJl Y3QgYSByZXF1ZXN0IC0tPgogIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Im1hcDpyZWRpcmVjdC10byI+ CiAgICA8eHNsOmNob29zZT4KCiAgICAgIDwhLS0gcmVkaXJlY3QgdG8gYSBpbnRlcm5hbCByZXNv dXJjZSBkZWZpbml0aW9uIC0tPgogICAgICA8eHNsOndoZW4gdGVzdD0iQHJlc291cmNlIj4KICAg ICAgICBpZih0cnVlKXJldHVybiByZXNvdXJjZV88eHNsOnZhbHVlLW9mIHNlbGVjdD0idHJhbnNs YXRlKEByZXNvdXJjZSwgJy0gJywgJ19fJykiLz4ocGlwZWxpbmUsIGxpc3RPZk1hcHMsIGVudmly b25tZW50LCBjb2Nvb25fdmlldyk7CiAgICAgIDwveHNsOndoZW4+CgogICAgICA8IS0tIHJlZGly ZWN0IHRvIGEgZXh0ZXJuYWwgcmVzb3VyY2UgZGVmaW5pdGlvbiB3aXRoIG9wdGlvbmFsIHNlc3Np b24gbW9kZSBhdHRyaWJ1dGUuIExldCB0aGUgZW52aXJvbm1lbnQgZG8gdGhlIHJlZGlyZWN0IC0t PgogICAgICA8eHNsOndoZW4gdGVzdD0iQHVyaSI+CiAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1l PSJzZXNzIj4KICAgICAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAgICAgICA8eHNsOndoZW4gdGVz dD0iQHNlc3Npb249J3llcyciPnRydWU8L3hzbDp3aGVuPgogICAgICAgICAgICA8eHNsOndoZW4g dGVzdD0iQHNlc3Npb249J3RydWUnIj50cnVlPC94c2w6d2hlbj4KICAgICAgICAgICAgPHhzbDp3 aGVuIHRlc3Q9IkBzZXNzaW9uPSdubyciPmZhbHNlPC94c2w6d2hlbj4KICAgICAgICAgICAgPHhz bDp3aGVuIHRlc3Q9IkBzZXNzaW9uPSdmYWxzZSciPmZhbHNlPC94c2w6d2hlbj4KICAgICAgICAg ICAgPHhzbDp3aGVuIHRlc3Q9Im5vdChAc2Vzc2lvbikiPmZhbHNlPC94c2w6d2hlbj4KICAgICAg ICAgIDwveHNsOmNob29zZT4KICAgICAgICA8L3hzbDp2YXJpYWJsZT4KICAgICAgICBnZXRMb2dn ZXIoKS5kZWJ1ZygiU2l0ZW1hcDogc2Vzc2lvbj0nPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IiRzZXNz Ii8+JywgcmVkaXJlY3RpbmcgdG8gJzx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdXJpIi8+JyIpOwog ICAgICAgIGVudmlyb25tZW50LnJlZGlyZWN0ICg8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJHNlc3Mi Lz4sIHN1YnN0aXR1dGUobGlzdE9mTWFwcywgIjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdXJpIi8+ IikpOwogICAgICAgIGlmKHRydWUpcmV0dXJuIHRydWU7CiAgICAgIDwveHNsOndoZW4+CgogICAg ICA8IS0tIGFueSBvdGhlciBjb21iaW5hdGlvbiBnZW5lcmF0ZXMgYW4gZXJyb3IgbWVzc2FnZSAt LT4KICAgICAgPHhzbDpvdGhlcndpc2U+CiAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9 ImVycm9yIj4KICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPSJtZXNzYWdlIj5NaXNzaW5n IGF0dHJpYnV0ZSB1cmk9IG9yIHJlc291cmNlPSB0byBlbGVtZW50IHJlZGlyZWN0LXRvPC94c2w6 d2l0aC1wYXJhbT4KICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPgogICAgICA8L3hzbDpvdGhl cndpc2U+CiAgICA8L3hzbDpjaG9vc2U+CiAgPC94c2w6dGVtcGxhdGU+IDwhLS0gbWF0Y2g9Im1h cDpyZWRpcmVjdC10byIgLS0+Cl1dPjwvc291cmNlPgoKICAgICAgICAgPHA+CiAgICAgICAgIEhl cmUgaXMgdGhlIEphdmEgc291cmNlIGNvZGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyB0 byBiZSBhcHBsaWVkIHRvCiAgICAgICAgIDxjb2RlPkh0dHBFbnZpcm9ubWVudC5qYXZhPC9jb2Rl PiB0byBzdXBwb3J0IHNlc3Npb24gbW9kZS4gQmVzaWRlIHRoaXMsCiAgICAgICAgIHRoZSA8Y29k ZT5BYnN0cmFjdEVudmlyb25tZW50LmphdmE8L2NvZGU+IHVuZCA8Y29kZT5BYnN0cmFjdENvbW1h bmRMaW5lRW52aXJvbm1lbnQuamF2YTwvY29kZT4KICAgICAgICAgbXVzdCBiZSBhZGp1c3RlZCB0 byByZWZsZWN0IHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSA8Y29kZT5ib29sZWFuPC9jb2RlPiBwYXJh bWV0ZXIgaW4gdGhlCiAgICAgICAgIDxjb2RlPmVudmlyb25tZW50LnJlZGlyZWN0KCk8L2NvZGU+ IG1ldGhvZC4KICAgICAgICAgPC9wPgoKPHNvdXJjZT48IVtDREFUQVsKICAgLyoqCiAgICAgKiAg UmVkaXJlY3QgdGhlIGNsaWVudCB0byBuZXcgVVJMIHdpdGggc2Vzc2lvbiBtb2RlCiAgICAgKi8K ICAgIHB1YmxpYyB2b2lkIHJlZGlyZWN0KGJvb2xlYW4gc2Vzc2lvbm1vZGUsIFN0cmluZyBuZXdV UkwpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgaWYgKHJlcXVlc3QgPT0gbnVsbCkgewog ICAgICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZygicmVkaXJlY3Q6IHNvbWV0aGluZydzIGJyb2tl biwgcmVxdWVzdCA9IG51bGwiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAg ICAvLyBjaGVjayBpZiBzZXNzaW9uIG1vZGUgc2hhbGwgYmUgYWN0aXZhdGVkCiAgICAgICAgaWYg KHNlc3Npb25tb2RlKSB7CiAgICAgICAgICAgIC8qKiBUaGUgc2Vzc2lvbiAqLwogICAgICAgICAg ICBIdHRwU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVi dWcoInJlZGlyZWN0OiBlbnRlcmluZyBzZXNzaW9uIG1vZGUiKTsKICAgICAgICAgICAgU3RyaW5n IHMgPSByZXF1ZXN0LmdldFJlcXVlc3RlZFNlc3Npb25JZCgpOwogICAgICAgICAgICBpZiAocyAh PSBudWxsKSB7CiAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS5kZWJ1ZygiT2xkIHNlc3Npb24g SUQgZm91bmQgaW4gcmVxdWVzdCwgaWQgPSAiICsgcyk7CiAgICAgICAgICAgICAgICBpZiAoIHJl cXVlc3QuaXNSZXF1ZXN0ZWRTZXNzaW9uSWRWYWxpZCgpICkgewogICAgICAgICAgICAgICAgICAg IGdldExvZ2dlcigpLmRlYnVnKCJBbmQgdGhpcyBvbGQgc2Vzc2lvbiBJRCBpcyB2YWxpZCIpOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGdldCBzZXNzaW9u IGZyb20gcmVxdWVzdCwgb3IgY3JlYXRlIG5ldyBzZXNzaW9uCiAgICAgICAgICAgIHNlc3Npb24g PSByZXF1ZXN0LmdldFNlc3Npb24odHJ1ZSk7CiAgICAgICAgICAgIGlmIChzZXNzaW9uID09IG51 bGwpIHsKICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLmRlYnVnKCJyZWRpcmVjdCBzZXNzaW9u IG1vZGU6IHVuYWJsZSB0byBnZXQgc2Vzc2lvbiBvYmplY3QhIik7CiAgICAgICAgICAgIH0KICAg ICAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcgKCJyZWRpcmVjdDogc2Vzc2lvbiBtb2RlIGNvbXBs ZXRlZCwgaWQgPSAiICsgc2Vzc2lvbi5nZXRJZCgpICk7CiAgICAgICAgfQogICAgICAgIC8vIHJl ZGlyZWN0CiAgICAgICAgU3RyaW5nIHFzID0gcmVxdWVzdC5nZXRRdWVyeVN0cmluZygpOwogICAg ICAgIFN0cmluZyByZWRpcmVjdCA9IHRoaXMucmVzcG9uc2UuZW5jb2RlUmVkaXJlY3RVUkwobmV3 VVJMKTsKCiAgICAgICAgaWYgKHFzICE9IG51bGwpCiAgICAgICAgICAgIHJlZGlyZWN0ID0gcmVk aXJlY3QgKyAiPyIgKyBxczsKCiAgICAgICAgZ2V0TG9nZ2VyKCkuZGVidWcoIlNlbmRpbmcgcmVk aXJlY3QgdG8gJyIgKyByZWRpcmVjdCArICInIik7CiAgICAgICAgdGhpcy5yZXNwb25zZS5zZW5k UmVkaXJlY3QgKHJlZGlyZWN0KTsKICAgIH0KXV0+PC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwv czI+CiAgICAgICAgICAgIDwvczE+CgogICAgICAgICAgICA8czEgdGl0bGU9IkV4YW1wbGUiPgog ICAgICAgICAgICAgIDxzMiB0aXRsZT0iQSBzaW1wbGUgWFNQIHBhZ2Ugd2l0aCBzZXNzaW9uIElE Ij4KCiAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSGVyZSB5b3UgY2FuIHNlZSB0aGUg c291cmNlIG9mIGFuIFhTUCBleGFtcGxlIG9mIGhvdyB0aGUKICAgICAgICAgICAgICBzZXNzaW9u IGZlYXR1cmUgY2FuIGJlIHVzZWQuCiAgICAgICAgICAgICAgVGhlIGV4YW1wbGUgaXMgbG9jYXRl ZCBpbiBhIGZpbGUgbmFtZWQgPGNvZGU+c2Vzc2lvbnBhZ2UueHNwPC9jb2RlPgogICAgICAgICAg ICAgIGFuZCBpdCBkaXNwbGF5cyB0aGUgcmVjZWl2ZWQgc2Vzc2lvbiBJRCB0b2dldGhlciB3aXRo IGEgcmV3cml0dGVuCiAgICAgICAgICAgICAgbGluayB0byB0aGUgcGFnZSBpdHNlbGYuIERlcGVu ZGluZyBvbiB5b3VyIGJyb3dzZXIgc2V0dGluZ3MsCiAgICAgICAgICAgICAgeW91IHdpbGwgc2Vl IG5vdGhpbmcgKGJlY2F1c2UgeW91ciBicm93c2VyIHByZWZlcnMgY3J1bmNoaW5nIGNvb2tpZXMp CiAgICAgICAgICAgICAgb3IgYSBzZXNzaW9uIElEIGlzIGVuY29kZWQgaW50byB0aGUgVVJMLiBB ZnRlciBjbGlja2luZyBvbiB0aGUKICAgICAgICAgICAgICBsaW5rIG5hbWVkICJGb2xsb3cgbWUh IiwgdGhlIHNlc3Npb24gSUQgaXMgdGFrZW4gaW50byB0aGUgVVJMLCBhbmQKICAgICAgICAgICAg ICB0aGUgc2Vzc2lvbiB0cmFja2luZyBpcyBlc3RhYmxpc2hlZC4KICAgICAgICAgICAgICA8L3A+ Cgo8c291cmNlPjwhW0NEQVRBWwo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1 OS0xIj8+Cgo8eHNwOnBhZ2UKICAgbGFuZ3VhZ2U9ImphdmEiCiAgIHhtbG5zOnhzcD0iaHR0cDov L2FwYWNoZS5vcmcveHNwIgogICB4bWxuczpzZXNzaW9uPSJodHRwOi8vYXBhY2hlLm9yZy94c3Av c2Vzc2lvbiIKICAgeG1sbnM6eHNwLXJlcXVlc3Q9Imh0dHA6Ly9hcGFjaGUub3JnL3hzcC9yZXF1 ZXN0Igo+Cgo8IS0tIGEgc2ltcGxlIHNlc3Npb24gcGFnZSBieSBK9nJnIFByYW50ZSA8am9lcmdA N3ZhbC5jb20+IC0tPgoKPHBhZ2U+CiAgPHRpdGxlPkEgU2ltcGxlIFVSSS1iYXNlZCBTZXNzaW9u IEV4YW1wbGU8L3RpdGxlPgogIDxjb250ZW50PgogICAgIDxwYXJhPiA8eHNwLXJlcXVlc3Q6Z2V0 LXVyaSBhcz0ieG1sIi8+IDwvcGFyYT4KICAgICA8cGFyYT4gU2Vzc2lvbiBJRCA9IDxzZXNzaW9u OmdldC1pZCBhcz0ieG1sIi8+IDwvcGFyYT4KICAgICA8cGFyYT4KICAgICAgIEVuY29kZSBVUkwg VGVzdCA9CiAgICAgICA8c2Vzc2lvbjplbmNvZGUtdXJsIGhyZWY9InNlc3Npb25wYWdlLnhzcCI+ Rm9sbG93IG1lITwvc2Vzc2lvbjplbmNvZGUtdXJsPgogICAgIDwvcGFyYT4KICA8L2NvbnRlbnQ+ CjwvcGFnZT4KCjwveHNwOnBhZ2U+Cl1dPjwvc291cmNlPgoKICAgICAgPHA+CiAgICAgIElmIHlv dSBoYXZlIGJlZW4gc3VjY2Vzc2Z1bCB3aXRoIGluc3RhbGxpbmcgdGhlIHNlc3Npb24gZmVhdHVy ZSBhbmQKICAgICAgdGhlIGV4YW1wbGUgZmlsZSwgdGhlIGZvbGxvd2luZyBIVE1MIG91dHB1dCB3 aWxsIGJlIGdlbmVyYXRlZCBieQogICAgICBDb2Nvb24gZnJvbSB0aGUgYWJvdmUgPGNvZGU+c2Vz c2lvbnBhZ2UueHNwPC9jb2RlPiBleGFtcGxlLCB3aGljaCBzaG93cwogICAgICBob3cgdGhlIHJl d3JpdHRlbiBsaW5rIGxvb2tzIGxpa2UuIFBsZWFzZSBkb24ndCBhc2sKICAgICAgd2h5IHRoZSBz ZXNzaW9uIElEIGluIHRoZSBnZW5lcmF0ZWQgbGluayBpcyBkaWZmZXJlbnQgZnJvbSB5b3Vycy4K ICAgICAgPC9wPgoKPHNvdXJjZT48IVtDREFUQVsKPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9X M0MvL0RURCBIVE1MIDQuMC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9XRC1odG1sLWluLXht bC9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgo8aHRtbD48aGVhZD48dGl0bGU+CiAgICAgIEEgU2lt cGxlIFVSSSBTZXNzaW9uIEV4YW1wbGUKICAgPC90aXRsZT48L2hlYWQ+PGJvZHkgdmxpbms9ImJs dWUiIGxpbms9ImJsdWUiIGFsaW5rPSJyZWQiIGJnY29sb3I9IndoaXRlIj4KCiAgIDxoMiBzdHls ZT0iY29sb3I6IG5hdnk7IHRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgIEEgU2ltcGxlIFVSSSBT ZXNzaW9uIEV4YW1wbGUKICAgPC9oMj4KCiAgIDxjb250ZW50PgoKICAgPHAgYWxpZ249ImxlZnQi PjxpPgogICAgICA8YiB4bWxuczp4c3AtcmVzcG9uc2U9Imh0dHA6Ly9hcGFjaGUub3JnL3hzcC9y ZXNwb25zZSIgeG1sbnM6eHNwLXJlcXVlc3Q9Imh0dHA6Ly9hcGFjaGUub3JnL3hzcC9yZXF1ZXN0 Ij5zZXNzaW9ucGFnZS54c3A8L2I+CiAgIDwvaT48L3A+CgogICA8cCBhbGlnbj0ibGVmdCI+PGk+ CiAgICAgIFNlc3Npb24gSUQgPQogICAgICA8c2Vzc2lvbjppZD5GM0U5NTc1NDQyRDE4OTk3NjBB MEIyMzFEMDA0MjI4MTwvc2Vzc2lvbjppZD4KICAgPC9pPjwvcD4KCiAgIDxwIGFsaWduPSJsZWZ0 Ij48aT4KICAgICAgIEVuY29kZSBVUkwgVGVzdCA9CiAgICAgIDxhIGhyZWY9InNlc3Npb25wYWdl LnhzcDtqc2Vzc2lvbmlkPUYzRTk1NzU0NDJEMTg5OTc2MEEwQjIzMUQwMDQyMjgxIj5Gb2xsb3cg bWUhPC9hPgogICA8L2k+PC9wPgogICA8L2NvbnRlbnQ+Cgo8L2JvZHk+PC9odG1sPgpdXT48L3Nv dXJjZT4KCiAgICAgICAgIDwvczI+CiAgICAgIDwvczE+CgogICAgICA8czEgdGl0bGU9IkxvZyBh bmFseXNpcyBvZiBzZXNzaW9ucyI+CgogICAgICA8cD4KICAgICAgICBUbyBiZSBkb25lLgogICAg ICA8L3A+CgogICAgICA8L3MxPgoKPC9ib2R5Pgo8L2RvY3VtZW50Pg== --------------Boundary-00=_NZQ1ZBV9OWQZSKGICRTH--