RE: Struts 6.4, Ognl and getters without an underlying field
Nate Kerkhofs <[email protected]>
| Newsgroups | gmane.comp.jakarta.struts.user |
|---|---|
| Message-ID | <AM0P191MB0804DC8BEAE1DE5C727CCB93EB782@AM0P191MB0804.EURP191.PROD.OUTLOOK.COM> |
WWVzLCB0aGUgcHJvYmxlbSBpcyBnb25lLiBJdCB3YXMgYW4gZXJyb3Igb24gbXkgZW5kIHJlbGF0 ZWQgdG8gdGhlIG9yZGVyaW5nIG9mIHN0YXRpYyBmaWVsZHMgaW4gdGhlIHNpbmdsZXRvbiBjbGFz cy4NCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IEx1a2FzeiBMZW5hcnQgPGx1 a2FzemxlbmFydEBhcGFjaGUub3JnPiANClNlbnQ6IFR1ZXNkYXksIDggT2N0b2JlciAyMDI0IDA5 OjA2DQpUbzogU3RydXRzIFVzZXJzIE1haWxpbmcgTGlzdCA8dXNlckBzdHJ1dHMuYXBhY2hlLm9y Zz4NClN1YmplY3Q6IFJlOiBTdHJ1dHMgNi40LCBPZ25sIGFuZCBnZXR0ZXJzIHdpdGhvdXQgYW4g dW5kZXJseWluZyBmaWVsZA0KDQpTbyB0aGUgcHJvYmxlbSBpcyBnb25lPw0KDQpwb24uLCA3IHBh xbogMjAyNCBvIDExOjUwIE5hdGUgS2Vya2hvZnMgPE5hdGUuS2Vya2hvZnNAaWthbi5iZT4gbmFw aXNhxYIoYSk6DQo+DQo+IEhlbGxvLA0KPg0KPiBJIGhhdmUgZG9uZSBzb21lIGludmVzdGlnYXRp bmcgYW5kIGZvdW5kIHRoZSBmb2xsb3dpbmc6DQo+DQo+IDEuIFRoZXJlIHdhcyBhbm90aGVyIGV4 Y2VwdGlvbiBiZWZvcmUgdGhlIHByZXZpb3VzIGV4Y2VwdGlvbiB0aGF0IEkgDQo+IGRpZG4ndCBz ZWUgbGFzdCB3ZWVrLCBhIE51bGxQb2ludGVyRXhjZXB0aW9uIGZvciBZRVNOT0FMTERFU0NSSVBU SU9OUzsgMi4gQWZ0ZXIgbG9va2luZyBpbnRvIHN0YXRpYyBmaWVsZHMgYSBiaXQgbW9yZSwgSSBm b3VuZCB0aGF0IHRob3NlIGFyZSBpbml0aWFsaXplZCBpbiB0aGUgb3JkZXIgb2YgZGVjbGFyYXRp b24sIGFuZCBpZiB5b3UgbG9vayBhdCBCb290c3RyYXBTdXBwb3J0IG1vcmUgY2xvc2VseSwgeW91 J2xsIHNlZSB0aGF0IHRoZSBJTlNUQU5DRSBzaW5nbGV0b24gZmllbGQgaXMgZGVjbGFyZWQgYW5k IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgb3RoZXIgc3RhdGljIGZpbmFsIGZpZWxkcyBJIHRyaWVk IHRvIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgYXJlIGRlY2xhcmVkLiBUaGF0IGNhdXNlZCB0aGUg TnVsbFBvaW50ZXJFeGNlcHRpb24sIGJlY2F1c2UgaXQgd2FzIHRyeWluZyB0byByZWFkIHRoYXQg c3RhdGljIHZhcmlhYmxlIGJlZm9yZSBpdCB3YXMgaW5pdGlhbGl6ZWQuIE9uY2UgSSBtb3ZlZCB0 aGUgSU5TVEFOQ0UgZGVjbGFyYXRpb24gYWZ0ZXIgdGhlIG90aGVyIHN0YXRpYyBmaWVsZCBkZWNs YXJhdGlvbnMgdGhlIGNvZGUgd29ya2VkIHdpdGhvdXQgcHJvYmxlbXMuDQo+IDMuIEluIHRoZSBl bmQsIEkgbW92ZWQgdGhlIGNvZGUgZm9yIGNyZWF0aW5nIHRoaXMgbGlzdCB0byB0aGUgT3ZlcnZp ZXdBY3Rpb25TdXBwb3J0LCBiZWNhdXNlIGFzIHlvdSBjYW4gc2VlIHdlIHVzZSBhIGN1c3RvbSBM b2NhbGl6YXRpb24gZW5naW5lLCBhbmQgd2UgZm91bmQgaXQgYmV0dGVyIHRvIGtlZXAgdGhpcyBs b2dpYyBjZW50cmFsaXplZCBpbiBvdXIgQmFzZUFjdGlvblN1cHBvcnQgY2xhc3MsIG1ha2luZyB0 aGUgZW50aXJlIEJvb3RzdHJhcFN1cHBvcnQgY2xhc3Mgb2Jzb2xldGUuDQo+DQo+IEtpbmQgcmVn YXJkcywNCj4NCj4gTmF0ZQ0KPg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9t OiBMdWthc3ogTGVuYXJ0IDxsdWthc3psZW5hcnRAYXBhY2hlLm9yZz4NCj4gU2VudDogU3VuZGF5 LCA2IE9jdG9iZXIgMjAyNCAwNzo1NQ0KPiBUbzogU3RydXRzIFVzZXJzIE1haWxpbmcgTGlzdCA8 dXNlckBzdHJ1dHMuYXBhY2hlLm9yZz4NCj4gU3ViamVjdDogUmU6IFN0cnV0cyA2LjQsIE9nbmwg YW5kIGdldHRlcnMgd2l0aG91dCBhbiB1bmRlcmx5aW5nIGZpZWxkDQo+DQo+IFRoYXQgc2hvdWxk IGp1c3Qgd29yaywgSSBkb24ndCByZWNhbGwgYW55IGNoYW5nZXMgYWZmZWN0aW5nIHByb2Nlc3Np bmcgdGhpcy4gQ291bGQgeW91IGVuYWJsZSBERUJVRyBsZXZlbCBhbmQgaW5zcGVjdCBsb2dzIGJl Zm9yZSB0aGUgZXJyb3IgeW91IGdldC4gTWF5YmUgdGhlcmUgaXMgYSBzZWN1cml0eSBXQVJOSU5H IHlvdSBoYXZlIG1pc3NlZC4NCj4NCj4gY3p3LiwgMyBwYcW6IDIwMjQgbyAxMDoyNiBOYXRlIEtl cmtob2ZzIDxOYXRlLktlcmtob2ZzQGlrYW4uYmU+IG5hcGlzYcWCKGEpOg0KPiA+DQo+ID4gSGVs bG8sDQo+ID4NCj4gPiBPbmUgc21hbGwgY29ycmVjdGlvbjogaXQncyBhIFN0cnV0cyA2LjMgcHJv amVjdCwgbm90IDYuNC4gV2Ugd2VyZSBwbGFubmluZyBvbiB1cGdyYWRpbmcgdG8gNi40IG9yIGEg bGF0ZXIgNi5YIHZlcnNpb24sIGJ1dCBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdG8gdXBncmFkZSB0 byA3LjAgdGhpcyByZWxlYXNlIGFueXdheSB3ZSBkZWNpZGVkIHRvIHNraXAgYW55IHVwZ3JhZGVz IGluIGJldHdlZW4uDQo+ID4NCj4gPiBLaW5kIHJlZ2FyZHMsDQo+ID4NCj4gPiBOYXRlIEtlcmto b2ZzDQo+ID4NCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE5hdGUg S2Vya2hvZnMgPE5hdGUuS2Vya2hvZnNAaWthbi5iZT4NCj4gPiBTZW50OiBUaHVyc2RheSwgMyBP Y3RvYmVyIDIwMjQgMTA6MDYNCj4gPiBUbzogU3RydXRzIFVzZXJzIE1haWxpbmcgTGlzdCA8dXNl ckBzdHJ1dHMuYXBhY2hlLm9yZz4NCj4gPiBTdWJqZWN0OiBTdHJ1dHMgNi40LCBPZ25sIGFuZCBn ZXR0ZXJzIHdpdGhvdXQgYW4gdW5kZXJseWluZyBmaWVsZA0KPiA+DQo+ID4gSGVsbG8sDQo+ID4N Cj4gPiBJIGhhdmUgYSBTdHJ1dHMgNi40IHBhZ2Ugd2l0aCBhIHNlbGVjdCwgYW5kIEkgaGF2ZSBh IHByb2JsZW0gcG9wdWxhdGluZyB0aGUgbGlzdCBhdHRyaWJ1dGUuDQo+ID4NCj4gPiA8czpzZWxl Y3QgaWQ9InNlYXJjaFZpZXdfc2hvd1NlY3VyZWQiIGRhdGEtbWRiLXNlbGVjdC1pbml0PSIiDQo+ ID4gbmFtZT0ic2VhcmNoVmlldy5zaG93U2VjdXJlZCIgdGhlbWU9InNpbXBsZSIgbGlzdD0ieWVz Tm9BbGxMaXN0Ig0KPiA+ICAgICAgICAgICAgICAgICBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJs YWJlbCIgLz4NCj4gPg0KPiA+DQo+ID4gV2hhdCBJJ20gdHJ5aW5nIHRvIGRvIGlzIHJlbGF0aXZl bHkgc2ltcGxlOiBJIGhhdmUgdGhlIGZvbGxvd2luZyBhY3Rpb24gY29kZToNCj4gPg0KPiA+IHB1 YmxpYyBjbGFzcyBNYWNoaW5lUGFyYW1ldGVyT3ZlcnZpZXdCb290c3RyYXBBY3Rpb24gZXh0ZW5k cyBPdmVydmlld0FjdGlvblN1cHBvcnQgaW1wbGVtZW50cyBFeHBpcmFibGUgeyAuLi4NCj4gPiB9 DQo+ID4gQW5kIHRoaXMgaXMgdGhlIHN1cGVyIGFjdGlvbi4gTm90YWJseSwgdGhpcyBnZXR0ZXIg ZG9lcyBOT1QgaGF2ZSBhbiB1bmRlcmx5aW5nIGZpZWxkIHByb3BlcnR5Lg0KPiA+IHB1YmxpYyBj bGFzcyBPdmVydmlld0FjdGlvblN1cHBvcnQgZXh0ZW5kcyBCYXNlQWN0aW9uU3VwcG9ydCB7IC4u Lg0KPiA+IHB1YmxpYyBMaXN0PFNlbGVjdE9wdGlvblZpZXc+IGdldFllc05vQWxsTGlzdCgpIHsN Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCb290c3RyYXBTdXBw b3J0LmdldEluc3RhbmNlKCkuZ2V0WWVzTm9BbGxMaXN0KCk7DQo+ID4gICAgICAgICAgICAgICAg IH0NCj4gPg0KPiA+IH0NCj4gPg0KPiA+IEluIHRoZSBUb21jYXQgbG9nLCBJIGdldCB0aGlzIGVy cm9yOg0KPiA+DQo+ID4gQ2F1c2VkIGJ5OiB0YWcgJ3NlbGVjdCcsIGZpZWxkICdsaXN0JywgbmFt ZSAnc2VhcmNoVmlldy5zaG93U2VjdXJlZCc6IFRoZSByZXF1ZXN0ZWQgbGlzdCBrZXkgJ3llc05v QWxsTGlzdCcgY291bGQgbm90IGJlIHJlc29sdmVkIGFzIGEgY29sbGVjdGlvbi9hcnJheS9tYXAv ZW51bWVyYXRpb24vaXRlcmF0b3IgdHlwZS4gRXhhbXBsZTogcGVvcGxlIG9yIHBlb3BsZS57bmFt ZX0gLSBbdW5rbm93biBsb2NhdGlvbl0NCj4gPiAgICAgICAgIGF0IG9yZy5hcGFjaGUuc3RydXRz Mi5jb21wb25lbnRzLkNvbXBvbmVudC5maWVsZEVycm9yKENvbXBvbmVudC5qYXZhOjI4NCkNCj4g PiAgICAgICAgIGF0IG9yZy5hcGFjaGUuc3RydXRzMi5jb21wb25lbnRzLkNvbXBvbmVudC5maW5k VmFsdWUoQ29tcG9uZW50LmphdmE6MzYzKQ0KPiA+ICAgICAgICAgYXQgb3JnLmFwYWNoZS5zdHJ1 dHMyLmNvbXBvbmVudHMuTGlzdFVJQmVhbi5ldmFsdWF0ZUV4dHJhUGFyYW1zKExpc3RVSUJlYW4u amF2YTo3OCkNCj4gPiAgICAgICAgIGF0IG9yZy5hcGFjaGUuc3RydXRzMi5jb21wb25lbnRzLlNl bGVjdC5ldmFsdWF0ZUV4dHJhUGFyYW1zKFNlbGVjdC5qYXZhOjEwMSkNCj4gPiAgICAgICAgIGF0 IG9yZy5hcGFjaGUuc3RydXRzMi5jb21wb25lbnRzLlVJQmVhbi5ldmFsdWF0ZVBhcmFtcyhVSUJl YW4uamF2YTo4ODQpDQo+ID4gICAgICAgICBhdCBvcmcuYXBhY2hlLnN0cnV0czIuY29tcG9uZW50 cy5VSUJlYW4uZW5kKFVJQmVhbi5qYXZhOjU1MCkNCj4gPiAgICAgICAgIGF0IG9yZy5hcGFjaGUu c3RydXRzMi52aWV3cy5qc3AuQ29tcG9uZW50VGFnU3VwcG9ydC5kb0VuZFRhZyhDb21wb25lbnRU YWdTdXBwb3J0LmphdmE6NDApDQo+ID4gICAgICAgICBhdCBvcmcuYXBhY2hlLmpzcC5qc3AubWFj aGluZXBhcmFtZXRlci5tYWNoaW5lUGFyYW1ldGVyT3ZlcnZpZXdCb290c3RyYXBfanNwLl9qc3B4 X21ldGhfc18wMDVmc2VsZWN0XzAwNWYxKG1hY2hpbmVQYXJhbWV0ZXJPdmVydmlld0Jvb3RzdHJh cF9qc3AuamF2YToxMTk0OSkNCj4gPiAgICAgICAgIGF0IG9yZy5hcGFjaGUuanNwLmpzcC5tYWNo aW5lcGFyYW1ldGVyLm1hY2hpbmVQYXJhbWV0ZXJPdmVydmlld0Jvb3RzdHJhcF9qc3AuX2pzcFNl cnZpY2UobWFjaGluZVBhcmFtZXRlck92ZXJ2aWV3Qm9vdHN0cmFwX2pzcC5qYXZhOjEyMDkpDQo+ ID4gICAgICAgICBhdCBvcmcuYXBhY2hlLmphc3Blci5ydW50aW1lLkh0dHBKc3BCYXNlLnNlcnZp Y2UoSHR0cEpzcEJhc2UuamF2YTo3MCkNCj4gPiAgICAgICAgIGF0IGphdmF4LnNlcnZsZXQuaHR0 cC5IdHRwU2VydmxldC5zZXJ2aWNlKEh0dHBTZXJ2bGV0LmphdmE6NjIzKQ0KPiA+ICAgICAgICAg YXQgb3JnLmFwYWNoZS5qYXNwZXIuc2VydmxldC5Kc3BTZXJ2bGV0V3JhcHBlci5zZXJ2aWNlKEpz cFNlcnZsZXRXcmFwcGVyLmphdmE6NDY2KQ0KPiA+ICAgICAgICAgLi4uIDExOCBtb3JlDQo+ID4N Cj4gPiBJIGFzc3VtZWQgdGhhdCBTdHJ1dHMgNi40IHdvdWxkIHVzZSBnZXR0ZXJzIGFuZCBzZXR0 ZXJzIHRvIGludGVyYWN0IHdpdGggcHJvcGVydGllcyBvbiB0aGUgcGFnZSwgYmVjYXVzZSBBRkFJ SyB0aGF0J3Mgd2hhdCBpdCBkaWQgaW4gU3RydXRzIDIuMyBhbmQgMi41LCBhbmQgaGVuY2UgSSBj b3VsZCBqdXN0IHVzZSBhIGdldHRlciB3aXRob3V0IGhhdmluZyBhIGZpZWxkIHByb3BlcnR5IHdp dGggdGhlIGNvcnJlc3BvbmRpbmcgbmFtZSBvbiB0aGUgYWN0aW9uLiBJcyB0aGF0IGFzc3VtcHRp b24gaW5jb3JyZWN0Pw0KPiA+DQo+ID4gRm9yIGNvbXBsZXRlbmVzcywgdGhpcyBpcyBCb290c3Ry YXBTdXBwb3J0LmphdmE6DQo+ID4NCj4gPiBwdWJsaWMgZmluYWwgY2xhc3MgQm9vdHN0cmFwU3Vw cG9ydCBleHRlbmRzIEFjdGlvblN1cHBvcnQgew0KPiA+DQo+ID4gICAgICAgICAgICAgICAgIC8q Kg0KPiA+ICAgICAgICAgICAgICAgICAqDQo+ID4gICAgICAgICAgICAgICAgICAqLw0KPiA+ICAg ICAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQg PSANCj4gPiAzMTU5NjYzMTA2NTMwMjE3MjkzTDsNCj4gPg0KPiA+ICAgICAgICAgICAgICAgICBw cml2YXRlIEJvb3RzdHJhcFN1cHBvcnQoKSB7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsb2FkWWVzTm9BbGxPcHRpb25zTWFwKCk7DQo+ID4gICAgICAgICAgICAgICAgIH0N Cj4gPg0KPiA+ICAgICAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCb290c3RyYXBT dXBwb3J0IElOU1RBTkNFID0gbmV3IA0KPiA+IEJvb3RzdHJhcFN1cHBvcnQoKTsNCj4gPg0KPiA+ ICAgICAgICAgICAgICAgICAvKioNCj4gPiAgICAgICAgICAgICAgICAgKiBUaGUgdGV4dCBwcm92 aWRlciwgaW5pdGlhbGl6ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGUgQ3VzdG9tVGV4dFByb3Zp ZGVyLg0KPiA+ICAgICAgICAgICAgICAgICAqLw0KPiA+ICAgICAgICAgICAgICAgICBwcml2YXRl IGZpbmFsIHRyYW5zaWVudCBUZXh0UHJvdmlkZXIgdGV4dFByb3ZpZGVyID0gbmV3IEN1c3RvbU1l c3NhZ2VSZXNvdXJjZXNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2UoZ2V0Q2xhc3MoKSwNCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKTsNCj4g Pg0KPiA+ICAgICAgICAgICAgICAgICBwcml2YXRlIExpc3Q8U2VsZWN0T3B0aW9uVmlldz4geWVz Tm9BbGxMaXN0Ow0KPiA+DQo+ID4gICAgICAgICAgICAgICAgIHByaXZhdGUgTGlzdDxTZWxlY3RP cHRpb25WaWV3PiB5ZXNOb0xpc3Q7DQo+ID4NCj4gPiAgICAgICAgICAgICAgICAgcHVibGljIHN0 YXRpYyBCb290c3RyYXBTdXBwb3J0IGdldEluc3RhbmNlKCkgew0KPiA+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIElOU1RBTkNFOw0KPiA+ICAgICAgICAgICAgICAgICB9 DQo+ID4NCj4gPiAgICAgICAgICAgICAgICAgLyoqDQo+ID4gICAgICAgICAgICAgICAgICogVGhp cyBpcyB1c2VkIHRvIGhlbHAgZ2VuZXJhdGUgdGhlIHllc25vYWxsIG9wdGlvbnMgZG9qbyBzdHJp bmcNCj4gPiAgICAgICAgICAgICAgICAgKi8NCj4gPiAgICAgICAgICAgICAgICAgcHJpdmF0ZSBz dGF0aWMgZmluYWwgaW50IFlOQV9OTyA9IENvbW1vblV0aWxzLkRPX05PVF9TSE9XX0VOVFJJRVM7 DQo+ID4gICAgICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBZTkFfWUVTID0g Q29tbW9uVXRpbHMuU0hPV19FTlRSSUVTOw0KPiA+ICAgICAgICAgICAgICAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBpbnQgWU5BX0FMTCA9IA0KPiA+IENvbW1vblV0aWxzLlNIT1dfQUxMX0VOVFJJ RVM7DQo+ID4NCj4gPiAgICAgICAgICAgICAgICAgLy8gT3BlcmF0aW5nIFN5c3RlbSBkZXNjcmlw dGlvbg0KPiA+ICAgICAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXVtd IFlFU05PQUxMREVTQ1JJUFRJT05TID0gew0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsgWU5BX1lFUyArICIiLCBNYXN0ZXJDb2RlRGVzY3JpcHRp b25LZXlzLk1DX1lFU05PQUxMX1lFUyB9LA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsgWU5BX05PICsgIiIsIE1hc3RlckNvZGVEZXNjcmlwdGlv bktleXMuTUNfWUVTTk9BTExfTk8gfSwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7IFlOQV9BTEwgKyAiIiwgTWFzdGVyQ29kZURlc2NyaXB0aW9u S2V5cy5NQ19ZRVNOT0FMTF9BTEwgfSB9Ow0KPiA+ICAgICAgICAgICAgICAgICAvLyBPcGVyYXRp bmcgU3lzdGVtIGRlc2NyaXB0aW9uDQo+ID4gICAgICAgICAgICAgICAgIHByaXZhdGUgc3RhdGlj IGZpbmFsIFN0cmluZ1tdW10gWUVTTk9ERVNDUklQVElPTlMgPSB7IHsgWU5BX1lFUyArICIiLCBN YXN0ZXJDb2RlRGVzY3JpcHRpb25LZXlzLk1DX1lFU05PQUxMX1lFUyB9LA0KPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgWU5BX05PICsgIiIsIA0K PiA+IE1hc3RlckNvZGVEZXNjcmlwdGlvbktleXMuTUNfWUVTTk9BTExfTk8gfSB9Ow0KPiA+DQo+ ID4gICAgICAgICAgICAgICAgIC8qKg0KPiA+ICAgICAgICAgICAgICAgICAqIFRoaXMgbWV0aG9k IGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGJ5IFN0cnV0cywgaXQgaW5qZWN0cyB0aGUgdmFsdWUg b2YgdGhlDQo+ID4gICAgICAgICAgICAgICAgICogU3RydXRzQ29uc3RhbnRzLlNUUlVUU19DVVNU T01fSTE4Tl9SRVNPVVJDRVMuIFRoZSB2YWx1ZXMgaXMgc2V0IGFzIHRoZSBzdGF0aWMNCj4gPiAg ICAgICAgICAgICAgICAgKiBmaWVsZCBvZiB0aGUgQ3VzdG9tTG9jYWxpemVkVGV4dFV0aWwgY2xh c3MsIHdoaWNoIGlzIG5lZWRlZCB3aGVuIGxvYWRpbmcNCj4gPiAgICAgICAgICAgICAgICAgKiBt ZXNzYWdlcyBmcm9tIHRoZSByZXNvdXJjZSBidW5kbGVzLg0KPiA+ICAgICAgICAgICAgICAgICAq DQo+ID4gICAgICAgICAgICAgICAgICAqIEBwYXJhbSBzdHJ1dHNDdXN0b21JMThuUmVzb3VyY2Vz IFRoZSBwcm9wZXJ0eSB2YWx1ZQ0KPiA+ICAgICAgICAgICAgICAgICAqLw0KPiA+ICAgICAgICAg ICAgICAgICBASW5qZWN0KFN0cnV0c0NvbnN0YW50cy5TVFJVVFNfQ1VTVE9NX0kxOE5fUkVTT1VS Q0VTKQ0KPiA+ICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXRTdHJ1dHNDdXN0b21JMThu UmVzb3VyY2VzKFN0cmluZyBzdHJ1dHNDdXN0b21JMThuUmVzb3VyY2VzKSB7DQo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ3VzdG9tTG9jYWxpemVkVGV4dFV0aWwuZ2V0 U3RydXRzQ3VzdG9tSTE4blJlc291cmNlcygpID09IG51bGwpIHsNCj4gPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21Mb2NhbGl6ZWRUZXh0VXRp bC5zZXRTdHJ1dHNDdXN0b21JMThuUmVzb3VyY2VzKHN0cnV0c0N1c3RvbUkxOG5SZXNvdXJjZXMp Ow0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1 c3RvbUxvY2FsaXplZFRleHRVdGlsLmNsZWFyRGVmYXVsdFJlc291cmNlQnVuZGxlcygpOw0KPiA+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICAgICAgICAgICAgICAgICB9 DQo+ID4NCj4gPiAgICAgICAgICAgICAgICAgLyoqDQo+ID4gICAgICAgICAgICAgICAgICogQHNl ZSBjb20ub3BlbnN5bXBob255Lnh3b3JrMi5BY3Rpb25TdXBwb3J0I2dldFRleHQoU3RyaW5nKQ0K PiA+ICAgICAgICAgICAgICAgICAqLw0KPiA+ICAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5n IGdldFRleHQoU3RyaW5nIGFUZXh0TmFtZSkgew0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHRleHRQcm92aWRlci5nZXRUZXh0KGFUZXh0TmFtZSk7DQo+ID4gICAg ICAgICAgICAgICAgIH0NCj4gPg0KPiA+ICAgICAgICAgICAgICAgICAvKioNCj4gPiAgICAgICAg ICAgICAgICAgKiBUaGlzIGdlbmVyYXRlcyB0aGUgQm9vdHN0cmFwIFN0cmluZyBmb3IgdGhlIFll c05vQWxsIE9wdGlvbnMuDQo+ID4gICAgICAgICAgICAgICAgICovDQo+ID4gICAgICAgICAgICAg ICAgIHByaXZhdGUgdm9pZCBjcmVhdGVBdXRvY29tcGxldGVWaWV3TGlzdEZvclllc05vQWxsT3B0 aW9uc01hcCgpIHsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllc05vQWxs TGlzdCA9IG5ldyBBcnJheUxpc3Q8U2VsZWN0T3B0aW9uVmlldz4oKTsNCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nW10geWVzTm9BbGxPcHRpb24gOiBZRVNO T0FMTERFU0NSSVBUSU9OUykgew0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNlbGVjdE9wdGlvblZpZXcgc2VsZWN0T3B0aW9uVmlldyA9IG5ldyBT ZWxlY3RPcHRpb25WaWV3KCk7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uVmlldy5zZXRMYWJlbChnZXRUZXh0KHllc05vQWxs T3B0aW9uWzFdKSk7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2VsZWN0T3B0aW9uVmlldy5zZXRJZCh5ZXNOb0FsbE9wdGlvblswXSk7DQo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzTm9BbGxM aXN0LmFkZChzZWxlY3RPcHRpb25WaWV3KTsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0NCj4gPiAgICAgICAgICAgICAgICAgfQ0KPiA+DQo+ID4gICAgICAgICAgICAgICAg IC8qKg0KPiA+ICAgICAgICAgICAgICAgICAqIFRoaXMgZ2VuZXJhdGVzIHRoZSBCb290c3RyYXAg U3RyaW5nIGZvciB0aGUgWWVzTm9BbGwgT3B0aW9ucy4NCj4gPiAgICAgICAgICAgICAgICAgKi8N Cj4gPiAgICAgICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUF1dG9jb21wbGV0ZVZpZXdM aXN0Rm9yWWVzTm9PcHRpb25zTWFwKCkgew0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeWVzTm9MaXN0ID0gbmV3IEFycmF5TGlzdDxTZWxlY3RPcHRpb25WaWV3PigpOw0KPiA+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJpbmdbXSB5ZXNOb09wdGlv biA6IFlFU05PREVTQ1JJUFRJT05TKSB7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2VsZWN0T3B0aW9uVmlldyBzZWxlY3RPcHRpb25WaWV3ID0g bmV3IFNlbGVjdE9wdGlvblZpZXcoKTsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxlY3RPcHRpb25WaWV3LnNldExhYmVsKGdldFRleHQoeWVz Tm9PcHRpb25bMV0pKTsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxlY3RPcHRpb25WaWV3LnNldElkKHllc05vT3B0aW9uWzBdKTsNCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXNOb0xpc3Qu YWRkKHNlbGVjdE9wdGlvblZpZXcpOw0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQ0KPiA+ICAgICAgICAgICAgICAgICB9DQo+ID4NCj4gPiAgICAgICAgICAgICAgICAgLyoq DQo+ID4gICAgICAgICAgICAgICAgICogTG9hZCB0aGUgWWVzL05vL0FsbCBvcHRpb25zZXQgbWFw DQo+ID4gICAgICAgICAgICAgICAgICovDQo+ID4gICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lk IGxvYWRZZXNOb0FsbE9wdGlvbnNNYXAoKSB7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjcmVhdGVBdXRvY29tcGxldGVWaWV3TGlzdEZvclllc05vQWxsT3B0aW9uc01hcCgp Ow0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXV0b2NvbXBsZXRl Vmlld0xpc3RGb3JZZXNOb09wdGlvbnNNYXAoKTsNCj4gPiAgICAgICAgICAgICAgICAgfQ0KPiA+ DQo+ID4gICAgICAgICAgICAgICAgIHB1YmxpYyBMaXN0PFNlbGVjdE9wdGlvblZpZXc+IGdldFll c05vQWxsTGlzdCgpIHsNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB5ZXNOb0FsbExpc3Q7DQo+ID4gICAgICAgICAgICAgICAgIH0NCj4gPg0KPiA+ICAgICAgICAg ICAgICAgICBwdWJsaWMgTGlzdDxTZWxlY3RPcHRpb25WaWV3PiBnZXRZZXNOb0xpc3QoKSB7DQo+ ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geWVzTm9MaXN0Ow0KPiA+ ICAgICAgICAgICAgICAgICB9DQo+ID4NCj4gPiB9DQo+ID4NCj4gPiBLaW5kIHJlZ2FyZHMsDQo+ ID4NCj4gPiBOYXRlIEtlcmtob2ZzDQo+ID4NCj4gPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+IC0gVG8gdW5z dWJzY3JpYmUsIGUtbWFpbDogdXNlci11bnN1YnNjcmliZUBzdHJ1dHMuYXBhY2hlLm9yZw0KPiA+ IEZvciBhZGRpdGlvbmFsIGNvbW1hbmRzLCBlLW1haWw6IHVzZXItaGVscEBzdHJ1dHMuYXBhY2hl Lm9yZw0KPiA+DQo+DQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiBUbyB1bnN1YnNjcmliZSwgZS1tYWlsOiB1 c2VyLXVuc3Vic2NyaWJlQHN0cnV0cy5hcGFjaGUub3JnDQo+IEZvciBhZGRpdGlvbmFsIGNvbW1h bmRzLCBlLW1haWw6IHVzZXItaGVscEBzdHJ1dHMuYXBhY2hlLm9yZw0KPg0KDQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NClRvIHVuc3Vic2NyaWJlLCBlLW1haWw6IHVzZXItdW5zdWJzY3JpYmVAc3RydXRzLmFwYWNo ZS5vcmcNCkZvciBhZGRpdGlvbmFsIGNvbW1hbmRzLCBlLW1haWw6IHVzZXItaGVscEBzdHJ1dHMu YXBhY2hlLm9yZw0KDQo= DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NClRvIHVuc3Vic2NyaWJlLCBlLW1haWw6IHVzZXItdW5zdWJz Y3JpYmVAc3RydXRzLmFwYWNoZS5vcmcNCkZvciBhZGRpdGlvbmFsIGNvbW1hbmRzLCBlLW1h aWw6IHVzZXItaGVscEBzdHJ1dHMuYXBhY2hlLm9yZw0K