|
From: Matt R. <li...@ra...> - 2005-05-09 13:06:55
|
Hey guys, I have the following section in one of my Spring Live chapters. I=20 haven't seen much activity on the "declarative validation" front in=20 Spring MVC - so I want to make sure this is still valid. Thanks, Matt Spring=92s Future Declarative Validation Framework At the time of this writing, Commons Validator is the only declarative=20= validation framework that's been released to support Spring MVC. There=20= is another declarative validator (the Valang Validator) that's part of=20= the Spring Modules project, but it hasn't been released yet. As far as=20= declarative validation being part of Spring - there are plans for it,=20 but it hasn't been developed yet. I asked Keith Donald to provide me=20 with a few details about it, and here are the key=20 features/differentiators he sent me: =95 A simple, consistent interface for defining new validation rules=20= (rule providers simply implement a single "boolean test(argument)"=20 method). =95 Support for bean property expressions (for example, minProperty = must=20 be less than maxProperty). The property access strategy will be=20 pluggable and not limited to java beans (for example, allowing=20 map-backed storage, or buffered "form objects" on the rich client side=20= of the house). =95 Support for complex nested expressions (and/or/not), and all=20 relational operators (>, >=3D, <, <=3D, !=3D, =3D=3D). =95 Support for applying different sets of rules based on context or=20= use-case. =95 A reporting subsystem capable of iterating over rule structures,=20= performing validation, and capturing/generating error message results.=20= This allows you to assemble complex rules on-the-fly without having to=20= hard code a lot of static messages; the reporter is capable of=20 generating rule messages from the underlying structures automatically. =95 Report field typing hints (the rules associated with a field to = let=20 the user know what they're expected to type). =95 Integration with Spring Rich Client Platform (RCP) and Spring = MVC=20 environments. |
|
From: Michael E. M. <mm...@re...> - 2005-05-10 20:33:03
|
Is Valang abstracted from MVC and http requests? I need a validator that I can plug into my POJOs, which are app server classes, NOT web server classes. Matt Raible wrote: > Hey guys, > > I have the following section in one of my Spring Live chapters. I > haven't seen much activity on the "declarative validation" front in > Spring MVC - so I want to make sure this is still valid. > > Thanks, > > Matt > > *Spring=92s Future Declarative Validation Framework > *At the time of this writing, Commons Validator is the only > declarative validation framework that's been released to support > Spring MVC. There is another declarative validator (the _Valang > Validator_) that's part of the Spring Modules project, but it hasn't > been released yet. As far as declarative validation being part of > Spring - there are plans for it, but it hasn't been developed yet. I > asked Keith Donald to provide me with a few details about it, and here= > are the key features/differentiators he sent me: > =95 A simple, consistent interface for defining new validation rules > (rule providers simply implement a single "boolean test(argument)" > method). > =95 Support for bean property expressions (for example, minProperty mu= st > be less than maxProperty). The property access strategy will be > pluggable and not limited to java beans (for example, allowing > map-backed storage, or buffered "form objects" on the rich client side= > of the house). > =95 Support for complex nested expressions (and/or/not), and all > relational operators (>, >=3D, <, <=3D, !=3D, =3D=3D). > =95 Support for applying different sets of rules based on context or > use-case. > =95 A reporting subsystem capable of iterating over rule structures, > performing validation, and capturing/generating error message results.= > This allows you to assemble complex rules on-the-fly without having to= > hard code a lot of static messages; the reporter is capable of > generating rule messages from the underlying structures automatically. > =95 Report field typing hints (the rules associated with a field to le= t > the user know what they're expected to type). > =95 Integration with Spring Rich Client Platform (RCP) and Spring MVC > environments. |
|
From: Steven D. <ste...@gm...> - 2005-05-11 19:17:21
|
VGhlIHZhbGFuZyB2YWxpZGF0b3IgaW1wbGVtZW50cyB0aGUKb3JnLnNwcmluZ2ZyYW1ld29yay52 YWxpZGF0aW9uLlZhbGlkYXRvciBpbnRlcmZhY2UuIEFzIHN1Y2ggaXQgY2FuIGJlCnVzZWQgaW5k ZXBlbmRlbnRseSBvZiBTcHJpbmcgTVZDLgoKT24gNS8xMC8wNSwgTWljaGFlbCBFLiBNb29yZXMg PG1tb29yZXNAcmVhbC5jb20+IHdyb3RlOgo+IElzIFZhbGFuZyBhYnN0cmFjdGVkIGZyb20gTVZD IGFuZCBodHRwIHJlcXVlc3RzPwo+IEkgbmVlZCBhIHZhbGlkYXRvciB0aGF0IEkgY2FuIHBsdWcg aW50byBteSBQT0pPcywgd2hpY2ggYXJlIGFwcCBzZXJ2ZXIKPiBjbGFzc2VzLAo+IE5PVCB3ZWIg c2VydmVyIGNsYXNzZXMuCj4gCj4gTWF0dCBSYWlibGUgd3JvdGU6Cj4gCj4gPiBIZXkgZ3V5cywK PiA+Cj4gPiBJIGhhdmUgdGhlIGZvbGxvd2luZyBzZWN0aW9uIGluIG9uZSBvZiBteSBTcHJpbmcg TGl2ZSBjaGFwdGVycy4gSQo+ID4gaGF2ZW4ndCBzZWVuIG11Y2ggYWN0aXZpdHkgb24gdGhlICJk ZWNsYXJhdGl2ZSB2YWxpZGF0aW9uIiBmcm9udCBpbgo+ID4gU3ByaW5nIE1WQyAtIHNvIEkgd2Fu dCB0byBtYWtlIHN1cmUgdGhpcyBpcyBzdGlsbCB2YWxpZC4KPiA+Cj4gPiBUaGFua3MsCj4gPgo+ ID4gTWF0dAo+ID4KPiA+ICpTcHJpbmcncyBGdXR1cmUgRGVjbGFyYXRpdmUgVmFsaWRhdGlvbiBG cmFtZXdvcmsKPiA+ICpBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIENvbW1vbnMgVmFsaWRh dG9yIGlzIHRoZSBvbmx5Cj4gPiBkZWNsYXJhdGl2ZSB2YWxpZGF0aW9uIGZyYW1ld29yayB0aGF0 J3MgYmVlbiByZWxlYXNlZCB0byBzdXBwb3J0Cj4gPiBTcHJpbmcgTVZDLiBUaGVyZSBpcyBhbm90 aGVyIGRlY2xhcmF0aXZlIHZhbGlkYXRvciAodGhlIF9WYWxhbmcKPiA+IFZhbGlkYXRvcl8pIHRo YXQncyBwYXJ0IG9mIHRoZSBTcHJpbmcgTW9kdWxlcyBwcm9qZWN0LCBidXQgaXQgaGFzbid0Cj4g PiBiZWVuIHJlbGVhc2VkIHlldC4gQXMgZmFyIGFzIGRlY2xhcmF0aXZlIHZhbGlkYXRpb24gYmVp bmcgcGFydCBvZgo+ID4gU3ByaW5nIC0gdGhlcmUgYXJlIHBsYW5zIGZvciBpdCwgYnV0IGl0IGhh c24ndCBiZWVuIGRldmVsb3BlZCB5ZXQuIEkKPiA+IGFza2VkIEtlaXRoIERvbmFsZCB0byBwcm92 aWRlIG1lIHdpdGggYSBmZXcgZGV0YWlscyBhYm91dCBpdCwgYW5kIGhlcmUKPiA+IGFyZSB0aGUg a2V5IGZlYXR1cmVzL2RpZmZlcmVudGlhdG9ycyBoZSBzZW50IG1lOgo+ID4glSBBIHNpbXBsZSwg Y29uc2lzdGVudCBpbnRlcmZhY2UgZm9yIGRlZmluaW5nIG5ldyB2YWxpZGF0aW9uIHJ1bGVzCj4g PiAocnVsZSBwcm92aWRlcnMgc2ltcGx5IGltcGxlbWVudCBhIHNpbmdsZSAiYm9vbGVhbiB0ZXN0 KGFyZ3VtZW50KSIKPiA+IG1ldGhvZCkuCj4gPiCVIFN1cHBvcnQgZm9yIGJlYW4gcHJvcGVydHkg ZXhwcmVzc2lvbnMgKGZvciBleGFtcGxlLCBtaW5Qcm9wZXJ0eSBtdXN0Cj4gPiBiZSBsZXNzIHRo YW4gbWF4UHJvcGVydHkpLiBUaGUgcHJvcGVydHkgYWNjZXNzIHN0cmF0ZWd5IHdpbGwgYmUKPiA+ IHBsdWdnYWJsZSBhbmQgbm90IGxpbWl0ZWQgdG8gamF2YSBiZWFucyAoZm9yIGV4YW1wbGUsIGFs bG93aW5nCj4gPiBtYXAtYmFja2VkIHN0b3JhZ2UsIG9yIGJ1ZmZlcmVkICJmb3JtIG9iamVjdHMi IG9uIHRoZSByaWNoIGNsaWVudCBzaWRlCj4gPiBvZiB0aGUgaG91c2UpLgo+ID4glSBTdXBwb3J0 IGZvciBjb21wbGV4IG5lc3RlZCBleHByZXNzaW9ucyAoYW5kL29yL25vdCksIGFuZCBhbGwKPiA+ IHJlbGF0aW9uYWwgb3BlcmF0b3JzICg+LCA+PSwgPCwgPD0sICE9LCA9PSkuCj4gPiCVIFN1cHBv cnQgZm9yIGFwcGx5aW5nIGRpZmZlcmVudCBzZXRzIG9mIHJ1bGVzIGJhc2VkIG9uIGNvbnRleHQg b3IKPiA+IHVzZS1jYXNlLgo+ID4glSBBIHJlcG9ydGluZyBzdWJzeXN0ZW0gY2FwYWJsZSBvZiBp dGVyYXRpbmcgb3ZlciBydWxlIHN0cnVjdHVyZXMsCj4gPiBwZXJmb3JtaW5nIHZhbGlkYXRpb24s IGFuZCBjYXB0dXJpbmcvZ2VuZXJhdGluZyBlcnJvciBtZXNzYWdlIHJlc3VsdHMuCj4gPiBUaGlz IGFsbG93cyB5b3UgdG8gYXNzZW1ibGUgY29tcGxleCBydWxlcyBvbi10aGUtZmx5IHdpdGhvdXQg aGF2aW5nIHRvCj4gPiBoYXJkIGNvZGUgYSBsb3Qgb2Ygc3RhdGljIG1lc3NhZ2VzOyB0aGUgcmVw b3J0ZXIgaXMgY2FwYWJsZSBvZgo+ID4gZ2VuZXJhdGluZyBydWxlIG1lc3NhZ2VzIGZyb20gdGhl IHVuZGVybHlpbmcgc3RydWN0dXJlcyBhdXRvbWF0aWNhbGx5Lgo+ID4glSBSZXBvcnQgZmllbGQg dHlwaW5nIGhpbnRzICh0aGUgcnVsZXMgYXNzb2NpYXRlZCB3aXRoIGEgZmllbGQgdG8gbGV0Cj4g PiB0aGUgdXNlciBrbm93IHdoYXQgdGhleSdyZSBleHBlY3RlZCB0byB0eXBlKS4KPiA+IJUgSW50 ZWdyYXRpb24gd2l0aCBTcHJpbmcgUmljaCBDbGllbnQgUGxhdGZvcm0gKFJDUCkgYW5kIFNwcmlu ZyBNVkMKPiA+IGVudmlyb25tZW50cy4KPiAKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gVGhpcyBTRi5OZXQgZW1haWwgaXMgc3BvbnNv cmVkIGJ5IE9yYWNsZSBTcGFjZSBTd2VlcHN0YWtlcwo+IFdhbnQgdG8gYmUgdGhlIGZpcnN0IHNv ZnR3YXJlIGRldmVsb3BlciBpbiBzcGFjZT8KPiBFbnRlciBub3cgZm9yIHRoZSBPcmFjbGUgU3Bh Y2UgU3dlZXBzdGFrZXMhCj4gaHR0cDovL2Fkcy5vc2RuLmNvbS8/YWRfaWRzOTMmYWxsb2NfaWQW MjgxJm9wY2xpY2sKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwo+IFNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXIgbWFpbGluZyBsaXN0Cj4gU3ByaW5nZnJh bWV3b3JrLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKPiBodHRwczovL2xpc3RzLnNv dXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyCj4g Cj4gCgoKLS0gCiJJZiB5b3Ugd2FudCB0byBiZSBhIGRpZmZlcmVudCBmaXNoLCB5b3UgZ290dGEg anVtcCBvdXQgb2YgdGhlIHNjaG9vbC4iCi0tIENhcHRhaW4gQmVlZmhlYXJ0Cg== |
|
From: Steven D. <ste...@gm...> - 2005-05-11 19:25:12
|
SGkgTWF0dCwKClZhbGFuZyB2YWxpZGF0b3IgaXMgY3VycmVudGx5IHNjaGVkdWxlZCBmb3IgcmVs ZWFzZSB3aXRoIHNwcmluZwptb2R1bGVzIDAuMyAodGhlIDAuMiByZWxlYXNlIGlzIGN1cnJlbnRs eSBwZW5kaW5nKS4KCkFzIGFuIGFjdGl2ZSBtZW1iZXIgb2YgdGhlIGRlY2xhcmF0aXZlIHZhbGlk YXRpb24gZnJvbnQgSSB3b3VsZCBoYXJkbHkKY2FsbCBpcyBhIGZyb250LiBJIGZlZWwgaXQncyBy b3VnaCB0ZXJyYWluIHNjYXR0ZXJlZCB3aXRoIHNvbHV0aW9ucywKaWRlYXMgYW5kIG9waW5pb25z LiBJdCBhbHNvIGZlZWxzIGxpa2UgYSB2ZXJ5IGxvbmVseSBwbGFjZSB0aGF0IEkgbGlrZQphIGxv dC4KClZhbGFuZyBpcyBub3RoaW5nIG1vcmUgdGhhbiBteSBleHByZXNzaW9uIG9mIGhvdyBkZWNs YXJhdGl2ZQp2YWxpZGF0aW9uIHNob3VsZCBiZSBkb25lLiBXaGlsZSBwcm9iYWJseSBub3QgdGhl IHRoZSBiZXN0IHBvc3NpYmxlCnNvbHV0aW9uIGl0J3MgY3VycmVudGx5IHRoZSBvbmx5IHRoaW5n IEkgY291bGQgY29tZSB1cCB3aXRoLiBJdCdzIGFsc28KdGhlIGZpcnN0ICg/KSBhdHRlbXB0IHRv IGNyZWF0ZSBhIG5ldyBzb2x1dGlvbiB3aXRob3V0IHJlbHlpbmcgb24KZXhpc3RpbmcgdG9vbHMu IEl0IHJlcXVpcmVzIGdldHRpbmcgdXNlZCB0byB3aGljaCBpcyB0aGUgZHJhd2JhY2sgKGl0CmFs c28gcmVxdWlyZXMgd3JpdGluZyBkb2N1bWVudGF0aW9uIHdoaWNoIEkgY29uc2lkZXIgYW5vdGhl cgpkcmF3YmFjaykuIEl0IG1heSBzcHVyIG90aGVyIGF0dGVtcHRzIG9yIGF0IGxlYXN0IHByb3Zp ZGVzIGEgYml0IG9mCmlubm92YXRpb24gb2YgdGhlIHN0aWxsIHZlcnkgd2VhayBmcm9udCB3aGlj aCBJIGNvbnNpZGVyIGFuIGFkdmFudGFnZS4KCkkgY29uc2lkZXIgdGhlIGNvbW1vbnMgdmFsaWRh dG9yIGludGVncmF0aW9uIGNvZGUgZXhhY3RseSB0aGF0OiB0aGUKb25seSBuZXcgZmVhdHVyZSBp cyB0aGUgU3ByaW5nIGludGVncmF0aW9uLiBJdCBkb2Vzbid0IG9mZmVyIG5vdmVsIG5ldwp3YXlz IG9mIGRvaW5nIHZhbGlkYXRpb24gYW5kIGJlY2F1c2Ugb2YgdGhhdCBJIGZpbmQgaXQgYm9yaW5n LiBJCnN0YXJ0ZWQgcmVhZGluZyB0aGUgY29tbW9ucyB2YWxpZGF0b3IgY2hhcHRlciBvZiB0aGUg dXBjb21pbmcgSmFrYXJ0YQpDb21tb25zIE9ubGluZSBCb29rc2hlbGYgcHVibGlzaGVkIGJ5IE1h bm5pbmcgYW5kIGl0IGdhdmUgbWUgYQpoZWFkYWNoZS4gSSBmaW5kIGl0IHRvbyBjb21wbGV4IHRv IHNldCB1cCBhbmQgdXNlLgoKSSBkaWRuJ3Qga25vdyBLZWl0aCBoYWQgcGxhbnMgZm9yIGEgZGVj bGFyYXRpdmUgdmFsaWRhdGlvbiBzb2x1dGlvbi4KSSdtIGxvb2tpbmcgZm9yd2FyZCB0byBoZWFy IGhpcyBpZGVhcyBvbiB0aGUgc3ViamVjdC4KCkknbSBub3Qgc3VyZSB0aGlzIGNhbiBoZWxwIHlv dSBpbiBhbnkgd2F5IGJ1dCBJIGRpZG4ndCB3YW50IHRvIHRha2UKdGhlIHJpc2sgb2Ygbm90IGxl dHRpbmcgeW91IGtub3cuCgpTdGV2ZW4KCgpPbiA1LzkvMDUsIE1hdHQgUmFpYmxlIDxsaXN0c0By YWlibGVkZXNpZ25zLmNvbT4gd3JvdGU6Cj4gSGV5IGd1eXMsCj4gCj4gSSBoYXZlIHRoZSBmb2xs b3dpbmcgc2VjdGlvbiBpbiBvbmUgb2YgbXkgU3ByaW5nIExpdmUgY2hhcHRlcnMuICBJCj4gaGF2 ZW4ndCBzZWVuIG11Y2ggYWN0aXZpdHkgb24gdGhlICJkZWNsYXJhdGl2ZSB2YWxpZGF0aW9uIiBm cm9udCBpbgo+IFNwcmluZyBNVkMgLSBzbyBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgc3Rp bGwgdmFsaWQuCj4gCj4gVGhhbmtzLAo+IAo+IE1hdHQKPiAKPiBTcHJpbmcncyBGdXR1cmUgRGVj bGFyYXRpdmUgVmFsaWRhdGlvbiBGcmFtZXdvcmsKPiBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRp bmcsIENvbW1vbnMgVmFsaWRhdG9yIGlzIHRoZSBvbmx5IGRlY2xhcmF0aXZlCj4gdmFsaWRhdGlv biBmcmFtZXdvcmsgdGhhdCdzIGJlZW4gcmVsZWFzZWQgdG8gc3VwcG9ydCBTcHJpbmcgTVZDLiBU aGVyZQo+IGlzIGFub3RoZXIgZGVjbGFyYXRpdmUgdmFsaWRhdG9yICh0aGUgVmFsYW5nIFZhbGlk YXRvcikgdGhhdCdzIHBhcnQgb2YKPiB0aGUgU3ByaW5nIE1vZHVsZXMgcHJvamVjdCwgYnV0IGl0 IGhhc24ndCBiZWVuIHJlbGVhc2VkIHlldC4gIEFzIGZhciBhcwo+IGRlY2xhcmF0aXZlIHZhbGlk YXRpb24gYmVpbmcgcGFydCBvZiBTcHJpbmcgLSB0aGVyZSBhcmUgcGxhbnMgZm9yIGl0LAo+IGJ1 dCBpdCBoYXNuJ3QgYmVlbiBkZXZlbG9wZWQgeWV0LiBJIGFza2VkIEtlaXRoIERvbmFsZCB0byBw cm92aWRlIG1lCj4gd2l0aCBhIGZldyBkZXRhaWxzIGFib3V0IGl0LCBhbmQgaGVyZSBhcmUgdGhl IGtleQo+IGZlYXR1cmVzL2RpZmZlcmVudGlhdG9ycyBoZSBzZW50IG1lOgo+IJUgICAgICAgQSBz aW1wbGUsIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGZvciBkZWZpbmluZyBuZXcgdmFsaWRhdGlvbiBy dWxlcwo+IChydWxlIHByb3ZpZGVycyBzaW1wbHkgaW1wbGVtZW50IGEgc2luZ2xlICJib29sZWFu IHRlc3QoYXJndW1lbnQpIgo+IG1ldGhvZCkuCj4glSAgICAgICBTdXBwb3J0IGZvciBiZWFuIHBy b3BlcnR5IGV4cHJlc3Npb25zIChmb3IgZXhhbXBsZSwgbWluUHJvcGVydHkgbXVzdAo+IGJlIGxl c3MgdGhhbiBtYXhQcm9wZXJ0eSkuIFRoZSBwcm9wZXJ0eSBhY2Nlc3Mgc3RyYXRlZ3kgd2lsbCBi ZQo+IHBsdWdnYWJsZSBhbmQgbm90IGxpbWl0ZWQgdG8gamF2YSBiZWFucyAoZm9yIGV4YW1wbGUs IGFsbG93aW5nCj4gbWFwLWJhY2tlZCBzdG9yYWdlLCBvciBidWZmZXJlZCAiZm9ybSBvYmplY3Rz IiBvbiB0aGUgcmljaCBjbGllbnQgc2lkZQo+IG9mIHRoZSBob3VzZSkuCj4glSAgICAgICBTdXBw b3J0IGZvciBjb21wbGV4IG5lc3RlZCBleHByZXNzaW9ucyAoYW5kL29yL25vdCksIGFuZCBhbGwK PiByZWxhdGlvbmFsIG9wZXJhdG9ycyAoPiwgPj0sIDwsIDw9LCAhPSwgPT0pLgo+IJUgICAgICAg U3VwcG9ydCBmb3IgYXBwbHlpbmcgZGlmZmVyZW50IHNldHMgb2YgcnVsZXMgYmFzZWQgb24gY29u dGV4dCBvcgo+IHVzZS1jYXNlLgo+IJUgICAgICAgQSByZXBvcnRpbmcgc3Vic3lzdGVtIGNhcGFi bGUgb2YgaXRlcmF0aW5nIG92ZXIgcnVsZSBzdHJ1Y3R1cmVzLAo+IHBlcmZvcm1pbmcgdmFsaWRh dGlvbiwgYW5kIGNhcHR1cmluZy9nZW5lcmF0aW5nIGVycm9yIG1lc3NhZ2UgcmVzdWx0cy4KPiBU aGlzIGFsbG93cyB5b3UgdG8gYXNzZW1ibGUgY29tcGxleCBydWxlcyBvbi10aGUtZmx5IHdpdGhv dXQgaGF2aW5nIHRvCj4gaGFyZCBjb2RlIGEgbG90IG9mIHN0YXRpYyBtZXNzYWdlczsgdGhlIHJl cG9ydGVyIGlzIGNhcGFibGUgb2YKPiBnZW5lcmF0aW5nIHJ1bGUgbWVzc2FnZXMgZnJvbSB0aGUg dW5kZXJseWluZyBzdHJ1Y3R1cmVzIGF1dG9tYXRpY2FsbHkuCj4glSAgICAgICBSZXBvcnQgZmll bGQgdHlwaW5nIGhpbnRzICh0aGUgcnVsZXMgYXNzb2NpYXRlZCB3aXRoIGEgZmllbGQgdG8gbGV0 Cj4gdGhlIHVzZXIga25vdyB3aGF0IHRoZXkncmUgZXhwZWN0ZWQgdG8gdHlwZSkuCj4glSAgICAg ICBJbnRlZ3JhdGlvbiB3aXRoIFNwcmluZyBSaWNoIENsaWVudCBQbGF0Zm9ybSAoUkNQKSBhbmQg U3ByaW5nIE1WQwo+IGVudmlyb25tZW50cy4KPiAKPiAKCgotLSAKIklmIHlvdSB3YW50IHRvIGJl IGEgZGlmZmVyZW50IGZpc2gsIHlvdSBnb3R0YSBqdW1wIG91dCBvZiB0aGUgc2Nob29sLiIKLS0g Q2FwdGFpbiBCZWVmaGVhcnQK |