JNLP cornerstone block
Mauro Talevi <[email protected]> Sun, 23 Mar 2003 19:30:47 +0000
| Newsgroups | gmane.comp.jakarta.avalon.phoenix.devel,gmane.comp.jakarta.turbine.maven.devel |
|---|---|
| Message-ID | <[email protected]> |
--------------000806070206050704010805 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Peter Royal wrote: > I'd like to remove Phyre, > <http://cvs.apache.org/viewcvs.cgi/avalon-apps/phyre/>, from the > avalon-apps CVS in accordance with the downsizing. I don't have any > plans to develop this codebase any further (and seeing as how I was the > only one that ever did any real work on it). Peter, I've refactored the the phyre block which handles JNLP connections into a generic cornerstone block. I think its use is quite generic and goes beyond phyre being developed further. I attach a patch with the cornerstone jnlp src. I've introduced a JNLPManager interface which at the moment has no methods but which may in the future. Cheers, Mauro --------------000806070206050704010805 Content-Type: application/zip; name="jnlp.zip" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="jnlp.zip" UEsDBAoAAAAAAA6Mdy4AAAAAAAAAAAAAAAAEAAAAc3JjL1BLAwQKAAAAAAAOjHcuAAAAAAAA AAAAAAAACQAAAHNyYy9qYXZhL1BLAwQKAAAAAAAOjHcuAAAAAAAAAAAAAAAADQAAAHNyYy9q YXZhL29yZy9QSwMECgAAAAAADox3LgAAAAAAAAAAAAAAABQAAABzcmMvamF2YS9vcmcvYXBh Y2hlL1BLAwQKAAAAAAAOjHcuAAAAAAAAAAAAAAAAGwAAAHNyYy9qYXZhL29yZy9hcGFjaGUv YXZhbG9uL1BLAwQKAAAAAAAOjHcuAAAAAAAAAAAAAAAAJwAAAHNyYy9qYXZhL29yZy9hcGFj aGUvYXZhbG9uL2Nvcm5lcnN0b25lL1BLAwQKAAAAAAALjXcuAAAAAAAAAAAAAAAALgAAAHNy Yy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL2Nvcm5lcnN0b25lL2Jsb2Nrcy9QSwMECgAAAAAA kI13LgAAAAAAAAAAAAAAADMAAABzcmMvamF2YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3JuZXJz dG9uZS9ibG9ja3Mvam5scC9QSwMECgAAAAAAfY53Lk0LLjtpIAAAaSAAAE0AAABzcmMvamF2 YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9ibG9ja3Mvam5scC9IdHRwQ29ubmVj dGlvbkhhbmRsZXIuamF2YS8qCiAqIENvcHlyaWdodCAoQykgVGhlIEFwYWNoZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHNvZnR3YXJl IGlzIHB1Ymxpc2hlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBM aWNlbnNlCiAqIHZlcnNpb24gMS4xLCBhIGNvcHkgb2Ygd2hpY2ggaGFzIGJlZW4gaW5jbHVk ZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpbgogKiB0aGUgTElDRU5TRS50eHQgZmlsZS4K ICovCnBhY2thZ2Ugb3JnLmFwYWNoZS5hdmFsb24uY29ybmVyc3RvbmUuYmxvY2tzLmpubHA7 CgppbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5G aWxlOwppbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLklP RXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKaW1wb3J0IGphdmEuaW8u UHJpbnRTdHJlYW07CmltcG9ydCBqYXZhLm5ldC5Qcm90b2NvbEV4Y2VwdGlvbjsKaW1wb3J0 IGphdmEubmV0LlNvY2tldDsKaW1wb3J0IGphdmEudXRpbC5EYXRlOwppbXBvcnQgamF2YS51 dGlsLkhhc2hNYXA7CmltcG9ydCBqYXZhLnV0aWwuTWFwOwoKaW1wb3J0IG9yZy5hcGFjaGUu YXZhbG9uLmNvcm5lcnN0b25lLnNlcnZpY2VzLmNvbm5lY3Rpb24uQ29ubmVjdGlvbkhhbmRs ZXI7CmltcG9ydCBvcmcuYXBhY2hlLmF2YWxvbi5leGNhbGlidXIuaW8uSU9VdGlsOwppbXBv cnQgb3JnLmFwYWNoZS5hdmFsb24uZnJhbWV3b3JrLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJh YmxlOwppbXBvcnQgb3JnLmFwYWNoZS5hdmFsb24uZnJhbWV3b3JrLmNvbmZpZ3VyYXRpb24u Q29uZmlndXJhdGlvbjsKaW1wb3J0IG9yZy5hcGFjaGUuYXZhbG9uLmZyYW1ld29yay5jb25m aWd1cmF0aW9uLkNvbmZpZ3VyYXRpb25FeGNlcHRpb247CmltcG9ydCBvcmcuYXBhY2hlLmF2 YWxvbi5mcmFtZXdvcmsuY29udGV4dC5Db250ZXh0OwppbXBvcnQgb3JnLmFwYWNoZS5hdmFs b24uZnJhbWV3b3JrLmNvbnRleHQuQ29udGV4dEV4Y2VwdGlvbjsKaW1wb3J0IG9yZy5hcGFj aGUuYXZhbG9uLmZyYW1ld29yay5jb250ZXh0LkNvbnRleHR1YWxpemFibGU7CmltcG9ydCBv cmcuYXBhY2hlLmF2YWxvbi5mcmFtZXdvcmsubG9nZ2VyLkFic3RyYWN0TG9nRW5hYmxlZDsK Ci8qKgogKiBIdHRwQ29ubm5lY3Rpb25IYW5kbGVyIGhhbmRsZXMgdGhlIEhUVFAgY29ubmVj dGlvbnMgdG8gdGhlIEpOTFBNYW5hZ2VyCiAqIHJldHVybmluZyB0aGUgYXBwcm9wcmlhdGUg SFRUUCByZXNwb25zZS4KICogCiAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnByb3lhbEBh cGFjaGUub3JnIj5QZXRlciBSb3lhbDwvYT4KICovCmNsYXNzIEh0dHBDb25uZWN0aW9uSGFu ZGxlciBleHRlbmRzIEFic3RyYWN0TG9nRW5hYmxlZAogICAgaW1wbGVtZW50cyBDb25uZWN0 aW9uSGFuZGxlciwgQ29uZmlndXJhYmxlLCBDb250ZXh0dWFsaXphYmxlLCBIdHRwQ29uc3Rh bnRzCnsKICAgIC8qIG1hcHBpbmcgb2YgZmlsZSBleHRlbnNpb25zIHRvIGNvbnRlbnQtdHlw ZXMgKi8KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcCBDT05URU5UX1RZUEVfTUFQID0g bmV3IEhhc2hNYXAoKTsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZfU0laRSA9 IDIwNDg7CiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gRU9MID0geyggYnl0ZSAp ICdccicsICggYnl0ZSApICdcbid9OwoKICAgIHByaXZhdGUgRmlsZSBtX2hvbWVEaXI7CiAg ICBwcml2YXRlIEZpbGUgbV9zdWJEaXI7CiAgICBwcml2YXRlIEZpbGUgbV9qbmxwOwoKICAg IHByaXZhdGUgaW50IG1fdGltZW91dDsKCiAgICBzdGF0aWMKICAgIHsKICAgICAgICBmaWxs TWFwKCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgY29udGV4dHVhbGl6ZSggQ29udGV4dCBj b250ZXh0ICkKICAgICAgICB0aHJvd3MgQ29udGV4dEV4Y2VwdGlvbgogICAgewogICAgICAg IG1faG9tZURpciA9ICggRmlsZSApIGNvbnRleHQuZ2V0KCAiYXBwLmhvbWUiICk7CiAgICB9 CgogICAgcHVibGljIHZvaWQgY29uZmlndXJlKCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp b24gKQogICAgICAgIHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uCiAgICB7CiAgICAg ICAgbV9zdWJEaXIgPSBuZXcgRmlsZSggbV9ob21lRGlyLCBjb25maWd1cmF0aW9uLmdldENo aWxkKCAiZGF0YS1kaXJlY3RvcnkiICkuZ2V0VmFsdWUoKSApOwoKICAgICAgICBpZiggIW1f c3ViRGlyLmV4aXN0cygpICkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBDb25m aWd1cmF0aW9uRXhjZXB0aW9uKCAiSW52YWxpZCBkYXRhLWRpcmVjdG9yeSAiK21fc3ViRGly ICk7CiAgICAgICAgfQoKICAgICAgICBtX2pubHAgPSBuZXcgRmlsZSggbV9zdWJEaXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0Q2hpbGQoICJqbmxw LWZpbGUiICkuZ2V0VmFsdWUoICJwaHlyZS5qbmxwIiApICk7CgogICAgICAgIGlmKCAhbV9q bmxwLmV4aXN0cygpICkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBDb25maWd1 cmF0aW9uRXhjZXB0aW9uKCAiSW52YWxpZCBqbmxwLWZpbGUgIittX2pubHAgKTsKICAgICAg ICB9CgogICAgICAgIG1fdGltZW91dCA9IGNvbmZpZ3VyYXRpb24uZ2V0QXR0cmlidXRlQXNJ bnRlZ2VyKCAidGltZW91dCIsIDAgKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBoYW5kbGVD b25uZWN0aW9uKCBTb2NrZXQgY29ubmVjdGlvbiApCiAgICAgICAgdGhyb3dzIElPRXhjZXB0 aW9uLCBQcm90b2NvbEV4Y2VwdGlvbgogICAgewogICAgICAgIGZpbmFsIGJ5dGVbXSBidWZm ZXIgPSBuZXcgYnl0ZVtCVUZfU0laRV07CiAgICAgICAgZmluYWwgSW5wdXRTdHJlYW0gaXMg PSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSggY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgp ICk7CiAgICAgICAgZmluYWwgUHJpbnRTdHJlYW0gcHMgPSBuZXcgUHJpbnRTdHJlYW0oIGNv bm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCkgKTsKCiAgICAgICAgY29ubmVjdGlvbi5zZXRT b1RpbWVvdXQoIG1fdGltZW91dCApOwogICAgICAgIGNvbm5lY3Rpb24uc2V0VGNwTm9EZWxh eSggdHJ1ZSApOwoKICAgICAgICBpbnQgbnJlYWQgPSAwOwogICAgICAgIGludCByID0gMDsK CiAgICAgICAgb3V0ZXJsb29wOiB3aGlsZSggbnJlYWQgPCBCVUZfU0laRSApCiAgICAgICAg ewogICAgICAgICAgICByID0gaXMucmVhZCggYnVmZmVyLCBucmVhZCwgQlVGX1NJWkUgLSBu cmVhZCApOwoKICAgICAgICAgICAgaWYoIC0xID09IHIgKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGludCBpID0g bnJlYWQ7CgogICAgICAgICAgICBucmVhZCArPSByOwoKICAgICAgICAgICAgZm9yKCA7IGkg PCBucmVhZDsgaSsrICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoIGJ1ZmZl cltpXSA9PSAoIGJ5dGUgKSAnXG4nIHx8IGJ1ZmZlcltpXSA9PSAoIGJ5dGUgKSAnXHInICkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAvKiByZWFkIG9uZSBsaW5l ICovCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJsb29wOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBib29sZWFuIGdldCA9IGZh bHNlOwogICAgICAgIGludCBpbmRleDsKCiAgICAgICAgaWYoIGlzR2V0KCBidWZmZXIgKSAp CiAgICAgICAgewogICAgICAgICAgICBnZXQgPSB0cnVlOwogICAgICAgICAgICBpbmRleCA9 IDQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoIGlzSGVhZCggYnVmZmVyICkgKQogICAg ICAgIHsKICAgICAgICAgICAgaW5kZXggPSA1OwogICAgICAgIH0KICAgICAgICBlbHNlCiAg ICAgICAgewogICAgICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgbWV0aG9kICov CiAgICAgICAgICAgIHBzLnByaW50KCAiSFRUUC8xLjAgIiArIEhUVFBfQkFEX01FVEhPRCAr ICIgdW5zdXBwb3J0ZWQgbWV0aG9kIHR5cGU6ICIgKTsKICAgICAgICAgICAgcHMud3JpdGUo IGJ1ZmZlciwgMCwgNSApOwogICAgICAgICAgICBwcy53cml0ZSggRU9MICk7CiAgICAgICAg ICAgIHBzLmZsdXNoKCk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAg ICBpbnQgaSA9IDA7CiAgICAgICAgLyogZmluZCB0aGUgZmlsZSBuYW1lLCBmcm9tOgogICAg ICAgICAqIEdFVCAvZm9vL2Jhci5odG1sIEhUVFAvMS4wCiAgICAgICAgICogZXh0cmFjdCAi L2Zvby9iYXIuaHRtbCIKICAgICAgICAgKi8KICAgICAgICBmb3IoIGkgPSBpbmRleDsgaSA8 IG5yZWFkOyBpKysgKQogICAgICAgIHsKICAgICAgICAgICAgaWYoIGJ1ZmZlcltpXSA9PSAo IGJ5dGUgKSAnICcgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgU3RyaW5nIGZuYW1lID0gbmV3IFN0cmlu ZyggYnVmZmVyLCAwLCBpbmRleCwgaSAtIGluZGV4ICkucmVwbGFjZSggJy8nLCBGaWxlLnNl cGFyYXRvckNoYXIgKTsKICAgICAgICBGaWxlIHRhcmdldDsKCiAgICAgICAgaWYoIGZuYW1l LnN0YXJ0c1dpdGgoIEZpbGUuc2VwYXJhdG9yICkgKQogICAgICAgIHsKICAgICAgICAgICAg Zm5hbWUgPSBmbmFtZS5zdWJzdHJpbmcoIDEgKTsKICAgICAgICB9CgogICAgICAgIGlmKCAw ID09IGZuYW1lLmxlbmd0aCgpICkKICAgICAgICB7CiAgICAgICAgICAgIHRhcmdldCA9IG1f am5scDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgdGFy Z2V0ID0gbmV3IEZpbGUoIG1fc3ViRGlyLCBmbmFtZSApOwogICAgICAgIH0KCiAgICAgICAg Ym9vbGVhbiBPSyA9IHByaW50SGVhZGVycyggdGFyZ2V0LCBwcyApOwoKICAgICAgICBpZigg Z2V0ICkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCBPSyApCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIHNlbmRGaWxlKCB0YXJnZXQsIHBzICk7CiAgICAgICAgICAgIH0KICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzZW5kNDA0KCBw cyApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBz ZW5kNDA0KCBQcmludFN0cmVhbSBwcyApIHRocm93cyBJT0V4Y2VwdGlvbgogICAgewogICAg ICAgIHBzLndyaXRlKCBFT0wgKTsKICAgICAgICBwcy53cml0ZSggRU9MICk7CiAgICAgICAg cHMucHJpbnRsbiggIk5vdCBGb3VuZFxuXG4iICsgIlRoZSByZXF1ZXN0ZWQgcmVzb3VyY2Ug d2FzIG5vdCBmb3VuZC5cbiIgKTsKICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2VuZEZpbGUo IEZpbGUgdGFyZywgUHJpbnRTdHJlYW0gcHMgKSB0aHJvd3MgSU9FeGNlcHRpb24KICAgIHsK ICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIHRhcmcuZ2V0 QWJzb2x1dGVQYXRoKCkgKTsKCiAgICAgICAgcHMud3JpdGUoIEVPTCApOwoKICAgICAgICB0 cnkKICAgICAgICB7CiAgICAgICAgICAgIElPVXRpbC5jb3B5KCBpcywgcHMgKTsKICAgICAg ICB9CiAgICAgICAgZmluYWxseQogICAgICAgIHsKICAgICAgICAgICAgaXMuY2xvc2UoKTsK ICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBib29sZWFuIHByaW50SGVhZGVycyggRmls ZSB0YXJnZXQsIFByaW50U3RyZWFtIHBzICkgdGhyb3dzIElPRXhjZXB0aW9uCiAgICB7CiAg ICAgICAgYm9vbGVhbiByZXQgPSBmYWxzZTsKICAgICAgICBpbnQgckNvZGUgPSAwOwoKICAg ICAgICBpZiggIXRhcmdldC5leGlzdHMoKSApCiAgICAgICAgewogICAgICAgICAgICByQ29k ZSA9IEhUVFBfTk9UX0ZPVU5EOwogICAgICAgICAgICBwcy5wcmludCggIkhUVFAvMS4wICIg KyBIVFRQX05PVF9GT1VORCArICIgbm90IGZvdW5kIiApOwogICAgICAgICAgICBwcy53cml0 ZSggRU9MICk7CiAgICAgICAgICAgIHJldCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBl bHNlIGlmKCB0YXJnZXQuaXNEaXJlY3RvcnkoKSApCiAgICAgICAgewogICAgICAgICAgICBy Q29kZSA9IEhUVFBfRk9SQklEREVOOwogICAgICAgICAgICBwcy5wcmludCggIkhUVFAvMS4w ICIgKyBIVFRQX0ZPUkJJRERFTiArICIgRGlyZWN0b3J5IGxpc3RpbmcgZm9yYmlkZGVuIiAp OwogICAgICAgICAgICBwcy53cml0ZSggRU9MICk7CiAgICAgICAgICAgIHJldCA9IGZhbHNl OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICByQ29kZSA9 IEhUVFBfT0s7CiAgICAgICAgICAgIHBzLnByaW50KCAiSFRUUC8xLjAgIiArIEhUVFBfT0sg KyAiIE9LIiApOwogICAgICAgICAgICBwcy53cml0ZSggRU9MICk7CiAgICAgICAgICAgIHJl dCA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBwcy5wcmludCggIlNlcnZlcjogSk5MUCBD b25uZWN0aW9uIGhhbmRsZWQiICk7CiAgICAgICAgcHMud3JpdGUoIEVPTCApOwogICAgICAg IHBzLnByaW50KCAiRGF0ZTogIiArIG5ldyBEYXRlKCkgKTsKICAgICAgICBwcy53cml0ZSgg RU9MICk7CgogICAgICAgIGlmKCByZXQgKQogICAgICAgIHsKICAgICAgICAgICAgcHMucHJp bnQoICJDb250ZW50LWxlbmd0aDogIiArIHRhcmdldC5sZW5ndGgoKSApOwogICAgICAgICAg ICBwcy53cml0ZSggRU9MICk7CiAgICAgICAgICAgIHBzLnByaW50KCAiTGFzdCBNb2RpZmll ZDogIiArIG5ldyBEYXRlKCB0YXJnZXQubGFzdE1vZGlmaWVkKCkgKSApOwogICAgICAgICAg ICBwcy53cml0ZSggRU9MICk7CgogICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHRhcmdldC5n ZXROYW1lKCk7CgogICAgICAgICAgICBpbnQgaW5kID0gbmFtZS5sYXN0SW5kZXhPZiggJy4n ICk7CiAgICAgICAgICAgIFN0cmluZyBjdCA9IG51bGw7CgogICAgICAgICAgICBpZiggaW5k ID4gMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGN0ID0gKCBTdHJpbmcgKSBD T05URU5UX1RZUEVfTUFQLmdldCggbmFtZS5zdWJzdHJpbmcoIGluZCApICk7CiAgICAgICAg ICAgIH0KICAgICAgICAgICAgaWYoIGN0ID09IG51bGwgKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICBjdCA9ICJ1bmtub3duL3Vua25vd24iOwogICAgICAgICAgICB9CgogICAg ICAgICAgICBwcy5wcmludCggIkNvbnRlbnQtdHlwZTogIiArIGN0ICk7CiAgICAgICAgICAg IHBzLndyaXRlKCBFT0wgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXQ7CiAgICB9 CgogICAgcHJpdmF0ZSBib29sZWFuIGlzSGVhZCggZmluYWwgYnl0ZVtdIGJ1ZmZlciApCiAg ICB7CiAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSA9PSAoIGJ5dGUgKSAnSCcKICAgICAgICAg ICAgJiYgYnVmZmVyWzFdID09ICggYnl0ZSApICdFJwogICAgICAgICAgICAmJiBidWZmZXJb Ml0gPT0gKCBieXRlICkgJ0EnCiAgICAgICAgICAgICYmIGJ1ZmZlclszXSA9PSAoIGJ5dGUg KSAnRCcKICAgICAgICAgICAgJiYgYnVmZmVyWzRdID09ICggYnl0ZSApICcgJzsKICAgIH0K CiAgICBwcml2YXRlIGJvb2xlYW4gaXNHZXQoIGZpbmFsIGJ5dGVbXSBidWZmZXIgKQogICAg ewogICAgICAgIHJldHVybiBidWZmZXJbMF0gPT0gKCBieXRlICkgJ0cnCiAgICAgICAgICAg ICYmIGJ1ZmZlclsxXSA9PSAoIGJ5dGUgKSAnRScKICAgICAgICAgICAgJiYgYnVmZmVyWzJd ID09ICggYnl0ZSApICdUJwogICAgICAgICAgICAmJiBidWZmZXJbM10gPT0gKCBieXRlICkg JyAnOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0U3VmZml4KCBTdHJpbmcg aywgU3RyaW5nIHYgKQogICAgewogICAgICAgIENPTlRFTlRfVFlQRV9NQVAucHV0KCBrLCB2 ICk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxsTWFwKCkKICAgIHsKICAg ICAgICBzZXRTdWZmaXgoICIiLCAiY29udGVudC91bmtub3duIiApOwogICAgICAgIHNldFN1 ZmZpeCggIi5qYXIiLCAiYXBwbGljYXRpb24veC1qYXIiICk7CiAgICAgICAgc2V0U3VmZml4 KCAiLmdpZiIsICJpbWFnZS9naWYiICk7CiAgICAgICAgc2V0U3VmZml4KCAiLmpwZyIsICJp bWFnZS9qcGVnIiApOwogICAgICAgIHNldFN1ZmZpeCggIi5qcGVnIiwgImltYWdlL2pwZWci ICk7CiAgICAgICAgc2V0U3VmZml4KCAiLmh0bSIsICJ0ZXh0L2h0bWwiICk7CiAgICAgICAg c2V0U3VmZml4KCAiLmh0bWwiLCAidGV4dC9odG1sIiApOwogICAgICAgIHNldFN1ZmZpeCgg Ii5qbmxwIiwgImFwcGxpY2F0aW9uL3gtamF2YS1qbmxwLWZpbGUiICk7CiAgICB9Cn0KUEsD BAoAAAAAAGSNdy68vU1yqAYAAKgGAABFAAAAc3JjL2phdmEvb3JnL2FwYWNoZS9hdmFsb24v Y29ybmVyc3RvbmUvYmxvY2tzL2pubHAvSHR0cENvbnN0YW50cy5qYXZhLyoKICogQ29weXJp Z2h0IChDKSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCiAqCiAqIFRoaXMgc29mdHdhcmUgaXMgcHVibGlzaGVkIHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UKICogdmVyc2lvbiAxLjEsIGEgY29w eSBvZiB3aGljaCBoYXMgYmVlbiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlu CiAqIHRoZSBMSUNFTlNFLnR4dCBmaWxlLgogKi8KcGFja2FnZSBvcmcuYXBhY2hlLmF2YWxv bi5jb3JuZXJzdG9uZS5ibG9ja3Muam5scDsKCi8qKgogKiBDb250YW50cyB1c2VkIGluIEhU VFAgY29tbXVuaWNhdGlvbiB3aXRoIEpOTFAgc2VydmVyLgogKiBAYXV0aG9yIDxhIGhyZWY9 Im1haWx0bzpwcm95YWxAYXBhY2hlLm9yZyI+UGV0ZXIgUm95YWw8L2E+CiAqLwppbnRlcmZh Y2UgSHR0cENvbnN0YW50cwp7CiAgICAvKiogMlhYOiBnZW5lcmFsbHkgIk9LIiAqLwogICAg aW50IEhUVFBfT0sgPSAyMDA7CiAgICBpbnQgSFRUUF9DUkVBVEVEID0gMjAxOwogICAgaW50 IEhUVFBfQUNDRVBURUQgPSAyMDI7CiAgICBpbnQgSFRUUF9OT1RfQVVUSE9SSVRBVElWRSA9 IDIwMzsKICAgIGludCBIVFRQX05PX0NPTlRFTlQgPSAyMDQ7CiAgICBpbnQgSFRUUF9SRVNF VCA9IDIwNTsKICAgIGludCBIVFRQX1BBUlRJQUwgPSAyMDY7CgogICAgLyoqIDNYWDogcmVs b2NhdGlvbi9yZWRpcmVjdCAqLwogICAgaW50IEhUVFBfTVVMVF9DSE9JQ0UgPSAzMDA7CiAg ICBpbnQgSFRUUF9NT1ZFRF9QRVJNID0gMzAxOwogICAgaW50IEhUVFBfTU9WRURfVEVNUCA9 IDMwMjsKICAgIGludCBIVFRQX1NFRV9PVEhFUiA9IDMwMzsKICAgIGludCBIVFRQX05PVF9N T0RJRklFRCA9IDMwNDsKICAgIGludCBIVFRQX1VTRV9QUk9YWSA9IDMwNTsKCiAgICAvKiog NFhYOiBjbGllbnQgZXJyb3IgKi8KICAgIGludCBIVFRQX0JBRF9SRVFVRVNUID0gNDAwOwog ICAgaW50IEhUVFBfVU5BVVRIT1JJWkVEID0gNDAxOwogICAgaW50IEhUVFBfUEFZTUVOVF9S RVFVSVJFRCA9IDQwMjsKICAgIGludCBIVFRQX0ZPUkJJRERFTiA9IDQwMzsKICAgIGludCBI VFRQX05PVF9GT1VORCA9IDQwNDsKICAgIGludCBIVFRQX0JBRF9NRVRIT0QgPSA0MDU7CiAg ICBpbnQgSFRUUF9OT1RfQUNDRVBUQUJMRSA9IDQwNjsKICAgIGludCBIVFRQX1BST1hZX0FV VEggPSA0MDc7CiAgICBpbnQgSFRUUF9DTElFTlRfVElNRU9VVCA9IDQwODsKICAgIGludCBI VFRQX0NPTkZMSUNUID0gNDA5OwogICAgaW50IEhUVFBfR09ORSA9IDQxMDsKICAgIGludCBI VFRQX0xFTkdUSF9SRVFVSVJFRCA9IDQxMTsKICAgIGludCBIVFRQX1BSRUNPTl9GQUlMRUQg PSA0MTI7CiAgICBpbnQgSFRUUF9FTlRJVFlfVE9PX0xBUkdFID0gNDEzOwogICAgaW50IEhU VFBfUkVRX1RPT19MT05HID0gNDE0OwogICAgaW50IEhUVFBfVU5TVVBQT1JURURfVFlQRSA9 IDQxNTsKCiAgICAvKiogNVhYOiBzZXJ2ZXIgZXJyb3IgKi8KICAgIGludCBIVFRQX1NFUlZF Ul9FUlJPUiA9IDUwMDsKICAgIGludCBIVFRQX0lOVEVSTkFMX0VSUk9SID0gNTAxOwogICAg aW50IEhUVFBfQkFEX0dBVEVXQVkgPSA1MDI7CiAgICBpbnQgSFRUUF9VTkFWQUlMQUJMRSA9 IDUwMzsKICAgIGludCBIVFRQX0dBVEVXQVlfVElNRU9VVCA9IDUwNDsKICAgIGludCBIVFRQ X1ZFUlNJT04gPSA1MDU7Cn0KUEsDBAoAAAAAAL2Zdy7cdY6teQ4AAHkOAABKAAAAc3JjL2ph dmEvb3JnL2FwYWNoZS9hdmFsb24vY29ybmVyc3RvbmUvYmxvY2tzL2pubHAvRGVmYXVsdEpO TFBNYW5hZ2VyLmphdmEvKgogKiBDb3B5cmlnaHQgKEMpIFRoZSBBcGFjaGUgU29mdHdhcmUg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBzb2Z0d2FyZSBp cyBwdWJsaXNoZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgTGlj ZW5zZQogKiB2ZXJzaW9uIDEuMSwgYSBjb3B5IG9mIHdoaWNoIGhhcyBiZWVuIGluY2x1ZGVk IHdpdGggdGhpcyBkaXN0cmlidXRpb24gaW4KICogdGhlIExJQ0VOU0UudHh0IGZpbGUuCiAq LwpwYWNrYWdlIG9yZy5hcGFjaGUuYXZhbG9uLmNvcm5lcnN0b25lLmJsb2Nrcy5qbmxwOwoK aW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwppbXBvcnQgamF2YS5uZXQuU2VydmVyU29j a2V0OwppbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247CgppbXBvcnQgb3Jn LmFwYWNoZS5hdmFsb24uY29ybmVyc3RvbmUuc2VydmljZXMuam5scC5KTkxQTWFuYWdlcjsK aW1wb3J0IG9yZy5hcGFjaGUuYXZhbG9uLmNvcm5lcnN0b25lLnNlcnZpY2VzLmNvbm5lY3Rp b24uQWJzdHJhY3RIYW5kbGVyRmFjdG9yeTsKaW1wb3J0IG9yZy5hcGFjaGUuYXZhbG9uLmNv cm5lcnN0b25lLnNlcnZpY2VzLmNvbm5lY3Rpb24uQ29ubmVjdGlvbkhhbmRsZXI7CmltcG9y dCBvcmcuYXBhY2hlLmF2YWxvbi5jb3JuZXJzdG9uZS5zZXJ2aWNlcy5jb25uZWN0aW9uLkNv bm5lY3Rpb25IYW5kbGVyRmFjdG9yeTsKaW1wb3J0IG9yZy5hcGFjaGUuYXZhbG9uLmNvcm5l cnN0b25lLnNlcnZpY2VzLmNvbm5lY3Rpb24uQ29ubmVjdGlvbk1hbmFnZXI7CmltcG9ydCBv cmcuYXBhY2hlLmF2YWxvbi5jb3JuZXJzdG9uZS5zZXJ2aWNlcy5zb2NrZXRzLlNlcnZlclNv Y2tldEZhY3Rvcnk7CmltcG9ydCBvcmcuYXBhY2hlLmF2YWxvbi5jb3JuZXJzdG9uZS5zZXJ2 aWNlcy5zb2NrZXRzLlNvY2tldE1hbmFnZXI7CmltcG9ydCBvcmcuYXBhY2hlLmF2YWxvbi5m cmFtZXdvcmsuYWN0aXZpdHkuU3RhcnRhYmxlOwppbXBvcnQgb3JnLmFwYWNoZS5hdmFsb24u ZnJhbWV3b3JrLmNvbmZpZ3VyYXRpb24uQ29uZmlndXJhdGlvbjsKaW1wb3J0IG9yZy5hcGFj aGUuYXZhbG9uLmZyYW1ld29yay5jb25maWd1cmF0aW9uLkNvbmZpZ3VyYXRpb25FeGNlcHRp b247CmltcG9ydCBvcmcuYXBhY2hlLmF2YWxvbi5mcmFtZXdvcmsuc2VydmljZS5TZXJ2aWNl RXhjZXB0aW9uOwppbXBvcnQgb3JnLmFwYWNoZS5hdmFsb24uZnJhbWV3b3JrLnNlcnZpY2Uu U2VydmljZU1hbmFnZXI7CgovKioKICogRGVmYXVsdEpOTFBNYW5hZ2VyIGhhbmRsZXMgc29j a2V0IGNvbm5lY3Rpb25zIGZvciBKTkxQIHNlcnZlciByZXF1ZXN0cy4gCiAqIAogKiBAYXV0 aG9yIDxhIGhyZWY9Im1haWx0bzpwcm95YWxAYXBhY2hlLm9yZyI+UGV0ZXIgUm95YWw8L2E+ CiAqIEBhdXRob3IgTWF1cm8gVGFsZXZpCiAqIEBwaG9lbml4OnNlcnZpY2UgbmFtZT0ib3Jn LmFwYWNoZS5hdmFsb24uY29ybmVyc3RvbmUuc2VydmljZXMuam5scC5KTkxQTWFuYWdlciIK ICogQHBob2VuaXg6YmxvY2sKICovCnB1YmxpYyBjbGFzcyBEZWZhdWx0Sk5MUE1hbmFnZXIg ZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXJGYWN0b3J5CiAgICBpbXBsZW1lbnRzIEpOTFBNYW5h Z2VyLCBTdGFydGFibGUsIENvbm5lY3Rpb25IYW5kbGVyRmFjdG9yeQp7CiAgICBwcml2YXRl IHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OTkVDVElPTl9OQU1FID0gSk5MUE1hbmFnZXIuUk9M RTsKCiAgICBwcml2YXRlIFNvY2tldE1hbmFnZXIgbV9zb2NrZXRNYW5hZ2VyOwogICAgcHJp dmF0ZSBDb25uZWN0aW9uTWFuYWdlciBtX2Nvbm5lY3Rpb25NYW5hZ2VyOwoKICAgIHByaXZh dGUgU2VydmVyU29ja2V0IG1fc2VydmVyU29ja2V0OwoKICAgIHByaXZhdGUgaW50IG1fcG9y dDsKICAgIHByaXZhdGUgSW5ldEFkZHJlc3MgbV9iaW5kVG87CgogICAgLyoqCiAgICAgKiBA cGhvZW5peDpjb25maWd1cmF0aW9uLXNjaGVtYSB0eXBlPSJyZWxheC1uZyIKICAgICAqLwog ICAgcHVibGljIHZvaWQgY29uZmlndXJlKCBmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZ3Vy YXRpb24gKQogICAgICAgIHRocm93cyBDb25maWd1cmF0aW9uRXhjZXB0aW9uCiAgICB7CiAg ICAgICAgc3VwZXIuY29uZmlndXJlKCBjb25maWd1cmF0aW9uLmdldENoaWxkKCAiaGFuZGxl ciIgKSApOwoKICAgICAgICBtX3BvcnQgPSBjb25maWd1cmF0aW9uLmdldENoaWxkKCAicG9y dCIgKS5nZXRWYWx1ZUFzSW50ZWdlciggODAwOCApOwoKICAgICAgICB0cnkKICAgICAgICB7 CiAgICAgICAgICAgIGZpbmFsIFN0cmluZyBiaW5kQWRkcmVzcyA9IGNvbmZpZ3VyYXRpb24u Z2V0Q2hpbGQoICJiaW5kIiApLmdldFZhbHVlKCk7CiAgICAgICAgICAgIG1fYmluZFRvID0g SW5ldEFkZHJlc3MuZ2V0QnlOYW1lKCBiaW5kQWRkcmVzcyApOwogICAgICAgIH0KICAgICAg ICBjYXRjaCggZmluYWwgVW5rbm93bkhvc3RFeGNlcHRpb24gdW5oZSApCiAgICAgICAgewog ICAgICAgICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiggIk1hbGZvcm1l ZCBiaW5kIHBhcmFtZXRlciIsIHVuaGUgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAg ICAgKiBAcGhvZW5peDpkZXBlbmRlbmN5IG5hbWU9Im9yZy5hcGFjaGUuYXZhbG9uLmNvcm5l cnN0b25lLnNlcnZpY2VzLnNvY2tldHMuU29ja2V0TWFuYWdlciIKICAgICAqIEBwaG9lbml4 OmRlcGVuZGVuY3kgbmFtZT0ib3JnLmFwYWNoZS5hdmFsb24uY29ybmVyc3RvbmUuc2Vydmlj ZXMuY29ubmVjdGlvbi5Db25uZWN0aW9uTWFuYWdlciIKICAgICAqLwogICAgcHVibGljIHZv aWQgc2VydmljZSggZmluYWwgU2VydmljZU1hbmFnZXIgc2VydmljZU1hbmFnZXIgKQogICAg ICAgIHRocm93cyBTZXJ2aWNlRXhjZXB0aW9uCiAgICB7CiAgICAgICAgc3VwZXIuc2Vydmlj ZSggc2VydmljZU1hbmFnZXIgKTsKCiAgICAgICAgbV9zb2NrZXRNYW5hZ2VyID0gKCBTb2Nr ZXRNYW5hZ2VyICkgc2VydmljZU1hbmFnZXIubG9va3VwKCBTb2NrZXRNYW5hZ2VyLlJPTEUg KTsKICAgICAgICBtX2Nvbm5lY3Rpb25NYW5hZ2VyID0gKCBDb25uZWN0aW9uTWFuYWdlciAp IHNlcnZpY2VNYW5hZ2VyLmxvb2t1cCggQ29ubmVjdGlvbk1hbmFnZXIuUk9MRSApOwogICAg fQoKICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkKICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAg ICB7CiAgICAgICAgZmluYWwgU2VydmVyU29ja2V0RmFjdG9yeSBmYWN0b3J5ID0gbV9zb2Nr ZXRNYW5hZ2VyLmdldFNlcnZlclNvY2tldEZhY3RvcnkoICJwbGFpbiIgKTsKCiAgICAgICAg bV9zZXJ2ZXJTb2NrZXQgPSBmYWN0b3J5LmNyZWF0ZVNlcnZlclNvY2tldCggbV9wb3J0LCA1 LCBtX2JpbmRUbyApOwogICAgICAgIG1fY29ubmVjdGlvbk1hbmFnZXIuY29ubmVjdCggQ09O TkVDVElPTl9OQU1FLCBtX3NlcnZlclNvY2tldCwgdGhpcyApOwogICAgfQoKICAgIHB1Ymxp YyB2b2lkIHN0b3AoKSB0aHJvd3MgRXhjZXB0aW9uCiAgICB7CiAgICAgICAgbV9jb25uZWN0 aW9uTWFuYWdlci5kaXNjb25uZWN0KCBDT05ORUNUSU9OX05BTUUgKTsKICAgICAgICBtX3Nl cnZlclNvY2tldC5jbG9zZSgpOwogICAgfQoKICAgIHByb3RlY3RlZCBDb25uZWN0aW9uSGFu ZGxlciBuZXdIYW5kbGVyKCkKICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCiAgICB7CiAgICAg ICAgcmV0dXJuIG5ldyBIdHRwQ29ubmVjdGlvbkhhbmRsZXIoKTsKICAgIH0KfQpQSwMECgAA AAAAEY13LgAAAAAAAAAAAAAAADAAAABzcmMvamF2YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3Ju ZXJzdG9uZS9zZXJ2aWNlcy9QSwMECgAAAAAADY93LgAAAAAAAAAAAAAAADUAAABzcmMvamF2 YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9zZXJ2aWNlcy9qbmxwL1BLAwQKAAAA AAAlj3cut0TErfgBAAD4AQAARQAAAHNyYy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL2Nvcm5l cnN0b25lL3NlcnZpY2VzL2pubHAvSk5MUE1hbmFnZXIuamF2YS8qCiAqIENvcHlyaWdodCAo QykgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHB1Ymxpc2hlZCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlCiAqIHZlcnNpb24gMS4xLCBhIGNvcHkgb2Yg d2hpY2ggaGFzIGJlZW4gaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpbgogKiB0 aGUgTElDRU5TRS50eHQgZmlsZS4KICovCnBhY2thZ2Ugb3JnLmFwYWNoZS5hdmFsb24uY29y bmVyc3RvbmUuc2VydmljZXMuam5scDsKCi8qKgogKiBKTkxQTWFuYWdlciAKICogQGF1dGhv ciBNYXVybyBUYWxldmkKICovCnB1YmxpYyBpbnRlcmZhY2UgSk5MUE1hbmFnZXIKewogICAg LyoqCiAgICAgKiBSZXByZXNlbnRzIFJvbGUgb2YgdGhlIHNlcnZpY2UKICAgICAqLwogICAg IFN0cmluZyBST0xFID0gSk5MUE1hbmFnZXIuY2xhc3MuZ2V0TmFtZSgpOyAKICAgIAp9CgoK ClBLAQIUAAoAAAAAAA6Mdy4AAAAAAAAAAAAAAAAEAAAAAAAAAAAAEAD9QQAAAABzcmMvUEsB AhQACgAAAAAADox3LgAAAAAAAAAAAAAAAAkAAAAAAAAAAAAQAP1BIgAAAHNyYy9qYXZhL1BL AQIUAAoAAAAAAA6Mdy4AAAAAAAAAAAAAAAANAAAAAAAAAAAAEAD9QUkAAABzcmMvamF2YS9v cmcvUEsBAhQACgAAAAAADox3LgAAAAAAAAAAAAAAABQAAAAAAAAAAAAQAP1BdAAAAHNyYy9q YXZhL29yZy9hcGFjaGUvUEsBAhQACgAAAAAADox3LgAAAAAAAAAAAAAAABsAAAAAAAAAAAAQ AP1BpgAAAHNyYy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL1BLAQIUAAoAAAAAAA6Mdy4AAAAA AAAAAAAAAAAnAAAAAAAAAAAAEAD9Qd8AAABzcmMvamF2YS9vcmcvYXBhY2hlL2F2YWxvbi9j b3JuZXJzdG9uZS9QSwECFAAKAAAAAAALjXcuAAAAAAAAAAAAAAAALgAAAAAAAAAAABAA/UEk AQAAc3JjL2phdmEvb3JnL2FwYWNoZS9hdmFsb24vY29ybmVyc3RvbmUvYmxvY2tzL1BLAQIU AAoAAAAAAJCNdy4AAAAAAAAAAAAAAAAzAAAAAAAAAAAAEAD9QXABAABzcmMvamF2YS9vcmcv YXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9ibG9ja3Mvam5scC9QSwECFAAKAAAAAAB9jncu TQsuO2kgAABpIAAATQAAAAAAAAAAAAAAAADBAQAAc3JjL2phdmEvb3JnL2FwYWNoZS9hdmFs b24vY29ybmVyc3RvbmUvYmxvY2tzL2pubHAvSHR0cENvbm5lY3Rpb25IYW5kbGVyLmphdmFQ SwECFAAKAAAAAABkjXcuvL1NcqgGAACoBgAARQAAAAAAAAAAAAAAAACVIgAAc3JjL2phdmEv b3JnL2FwYWNoZS9hdmFsb24vY29ybmVyc3RvbmUvYmxvY2tzL2pubHAvSHR0cENvbnN0YW50 cy5qYXZhUEsBAhQACgAAAAAAvZl3Ltx1jq15DgAAeQ4AAEoAAAAAAAAAAAAAAAAAoCkAAHNy Yy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL2Nvcm5lcnN0b25lL2Jsb2Nrcy9qbmxwL0RlZmF1 bHRKTkxQTWFuYWdlci5qYXZhUEsBAhQACgAAAAAAEY13LgAAAAAAAAAAAAAAADAAAAAAAAAA AAAQAP1BgTgAAHNyYy9qYXZhL29yZy9hcGFjaGUvYXZhbG9uL2Nvcm5lcnN0b25lL3NlcnZp Y2VzL1BLAQIUAAoAAAAAAA2Pdy4AAAAAAAAAAAAAAAA1AAAAAAAAAAAAEAD9Qc84AABzcmMv amF2YS9vcmcvYXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9zZXJ2aWNlcy9qbmxwL1BLAQIU AAoAAAAAACWPdy63RMSt+AEAAPgBAABFAAAAAAAAAAAAAAAAACI5AABzcmMvamF2YS9vcmcv YXBhY2hlL2F2YWxvbi9jb3JuZXJzdG9uZS9zZXJ2aWNlcy9qbmxwL0pOTFBNYW5hZ2VyLmph dmFQSwUGAAAAAA4ADgDbBAAAfTsAAAAA --------------000806070206050704010805 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] --------------000806070206050704010805--