PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vYXBwLmNsYXNzLnBocCIpOwlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9uYXYuY2xhc3MucGhwIik7IAlyZXF1aXJlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvZWNsaXBzZS5vcmctY29tbW9uL3N5c3RlbS9tZW51LmNsYXNzLnBocCIpOyAJJEFwcCAJPSBuZXcgQXBwKCk7CSROYXYJPSBuZXcgTmF2KCk7CSRNZW51IAk9IG5ldyBNZW51KCk7CQlpbmNsdWRlKCRBcHAtPmdldFByb2plY3RDb21tb24oKSk7ICAgICMgQWxsIG9uIHRoZSBzYW1lIGxpbmUgdG8gdW5jbHV0dGVyIHRoZSB1c2VyJ3MgZGVza3RvcCcKCQoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgkjCgkjIHRlbXBsYXRlLnBocAoJIwoJIyBBdXRob3I6IAkJRGVuaXMgUm95CgkjIERhdGU6CQkJMjAwNS0wNi0xNgoJIwoJIyBEZXNjcmlwdGlvbjogVHlwZSB5b3VyIHBhZ2UgY29tbWVudHMgaGVyZSAtIHRoZXNlIGFyZSBub3Qgc2VudCB0byB0aGUgYnJvd3NlcgoJIwoJIwoJIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCSRkb2N1bWVudFJvb3QgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOwoJLy9yZXF1aXJlX29uY2UgKCRkb2N1bWVudFJvb3QgLicvZXVyb3BhL3NjcmlwdHMvcHJvamVjdHNUYWJsZS5waHAnKTsKCXJlcXVpcmVfb25jZSAoJGRvY3VtZW50Um9vdCAuICcvcmVzb3VyY2VzL3NjcmlwdHMvcmVzb3VyY2VzX2h0bWwucGhwJyk7CQoJcmVxdWlyZV9vbmNlICgkZG9jdW1lbnRSb290IC4gJy9ldXJvcGEvc2NyaXB0cy93aGF0c25ldy5waHAnKTsKCSMKCSMgQmVnaW46IHBhZ2Utc3BlY2lmaWMgc2V0dGluZ3MuICBDaGFuZ2UgdGhlc2UuIAoJJHBhZ2VUaXRsZSAJCT0gIkVjbGlwc2UgRXVyb3BhIFJlbGVhc2UiOwoJJHBhZ2VLZXl3b3Jkcwk9ICJFY2xpcHNlIEV1cm9wYSBTaW11bHRhbmVvdXMgUmVsZWFzZSI7CgkkcGFnZUF1dGhvcgkJPSAiTmF0aGFuIEdlcnZhaXMiOwoJCgkjIEFkZCBwYWdlLXNwZWNpZmljIE5hdiBiYXJzIGhlcmUKCSMgRm9ybWF0IGlzIExpbmsgdGV4dCwgbGluayBVUkwgKGNhbiBiZSBodHRwOi8vd3d3LnNvbWVvdGhlcnNpdGUuY29tLyksIHRhcmdldCAoX3NlbGYsIF9ibGFuayksIGxldmVsICgxLCAyIG9yIDMpCgkjICROYXYtPmFkZE5hdlNlcGFyYXRvcigiTXkgUGFnZSBMaW5rcyIsIAkiZG93bmxvYWRzLnBocCIpOwoJIyAkTmF2LT5hZGRDdXN0b21OYXYoIk15IExpbmsiLCAibXlwYWdlLnBocCIsICJfc2VsZiIsIDEpOwoJIyAkTmF2LT5hZGRDdXN0b21OYXYoIkdvb2dsZSIsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiwgIl9ibGFuayIsIDEpOwoKCSMgRW5kOiBwYWdlLXNwZWNpZmljIHNldHRpbmdzCgkjCgkvLyBUaGlzIGZpbGUgaXMgbGlua2VkIHRvIGZyb20gbG90cyBvZiBkaWZmZXJlbnQgcGxhY2VzLgoJLy8gVXNlIGFic29sdXRlIHBhdGhzIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBhY3R1YWxseSB0ZXN0CgkvLyB0aGF0IHRoZSBmaWxlIHJlbmRlcnMgcHJvcGVybHkgKGkuZS4gdGVzdGluZyB1c2luZykgIi9pbmRleC5waHAiLAoJLy8gYW5kICIvaG9tZS9pbmRleC5waHAiIGJvdGggd29yay4KCSMgUGFzdGUgeW91ciBIVE1MIGNvbnRlbnQgYmV0d2VlbiB0aGUgRU9IVE1MIG1hcmtlcnMhCgkKCSR3aGF0c25ldyA9IHJzc190b19zaWRlaXRlbV9odG1sKCcvY29tbXVuaXR5L25ld3MvMjAwNWludGhlbmV3c2FyY2hpdmUnLCAzLCAiZXVyb3BhIik7CQoJJHJlc291cmNlX2ZpbHRlciA9ICJFdXJvcGEiOwoJLy8kZGlzcGxheVRhYnMgPSBkaXNwbGF5VGFicygpOwkJCgkkcmVzb3VyY2VzX3RhYmxlID0gJFJlc291cmNlc19IVE1MLT5nZXRfcGlsbGFyX3Jlc291cmNlc190YWJsZSgkcmVzb3VyY2VfZmlsdGVyKTsKCSAKCW9iX3N0YXJ0KCk7Cgk/PgoJPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNjcmlwdHMvY291bnRkb3duLmpzIj48L3NjcmlwdD4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImxheW91dC5jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoJCTxkaXYgaWQ9ImhlYWRlckJHIj4KCQkJPHRhYmxlIGNlbGxzcGFjaW5nPTAgY2xhc3M9ImhlYWRlckJhciI+CgkgICAgICAgIAk8dHI+CgkgICAgICAgIAkJPHRkIGFsaWduPSJyaWdodCI+PGltZyBzcmM9ImltYWdlcy90YWJEYXRlLmdpZiIgYWxpZ249InJpZ2h0IiBpZD0iZGF0ZVRhYiIiPjwvdGQ+CgkJCQk8L3RyPgkJCQkKCQkJPC90YWJsZT4KCQk8L2Rpdj4KCQk8cD4KCQkJCUVjbGlwc2UgRXVyb3BhIGlzIHRoZSBhbm51YWwgcmVsZWFzZSBvZiBFY2xpcHNlIHByb2plY3RzLiAgTGlrZSBsYXN0IHllYXKScyBDYWxsaXN0byByZWxlYXNlLCB0aGUgRXVyb3BhIHJlbGVhc2UgaXMgYSBjb29yZGluYXRlIHJlbGVhc2Ugb2YgZGlmZmVyZW50IEVjbGlwc2UgcHJvamVjdCB0ZWFtcy4gICBUaGlzIHllYXIsIHRoZSBhbm51YWwgcmVsZWFzZSBpbmNsdWRlcyA8YSBocmVmPSJwcm9qZWN0cy5waHAiPjIxIHByb2plY3RzLjwvYT4gICBCeSByZWxlYXNpbmcgdGhlc2UgcHJvamVjdHMgYXQgdGhlIHNhbWUgdGltZSwgdGhlIGdvYWwgaXMgdG8gZWxpbWluYXRlIHVuY2VydGFpbnR5IGFib3V0IHZlcnNpb24gY29tcGF0aWJpbGl0eSBhbmQgbWFrZSBpdCBlYXNpZXIgdG8gaW5jb3Jwb3JhdGUgbXVsdGlwbGUgcHJvamVjdHMgaW50byB5b3VyIGVudmlyb25tZW50LgoJCSAgICAgICAgPGJyIC8+PGJyIC8+CgkJICAgICAgICAgICAgICAKCQkgICAgICAgIDxlbT5XaGlsZSBFdXJvcGEgaXMgYWJvdXQgdGhlIHNpbXVsdGFuZW91cyByZWxlYXNlIG9mIDxhIGhyZWY9InByb2plY3RzLnBocCI+dHdlbnR5IG9uZSBwcm9qZWN0czwvYT4sIGl0IGlzCgkJICAgICAgICBub3QgYSB1bmlmaWNhdGlvbiBvZiB0aGUgcHJvamVjdHMgLSBlYWNoIHByb2plY3QgcmVtYWlucyBhIHNlcGFyYXRlIG9wZW4gc291cmNlIHByb2plY3Qgb3BlcmF0aW5nIHdpdGggaXRzIG93biBwcm9qZWN0IGxlYWRlcnNoaXAsIGl0cyBvd24gY29tbWl0dGVycywgYW5kIGl0cyBvd24gcHJvamVjdCBwbGFuLjwvZW0+CgkJCQk8YnIvPgoJCQkJPGJyLz4KCQkJCTxzcGFuIGNsYXNzPSJldXJvcGFMaW5rIj5IZWxwIFByb21vdGUgRWNsaXBzZSBFdXJvcGE8L3NwYW4+PGJyLz4KCQkJCVZpc2l0IG91ciA8YSBocmVmPSJmcmllbmRzLnBocCI+RnJpZW5kcyBvZiBFdXJvcGE8L2E+IHBhZ2UgYW5kIGluY2x1ZGUgb25lIG9mIHRoZSBpbWFnZXMgb24geW91ciBzaXRlLjxici8+PGJyLz4KCQkJCTxzcGFuIGNsYXNzPSJldXJvcGFMaW5rIj5UZXN0IERyaXZlIHRoZSBMYXRlc3QgRWNsaXBzZSBFdXJvcGEgUmVsZWFzZSBDYW5kaWRhdGVzIChSQyk8L3NwYW4+PGJyLz4KCQkJCVRoZSBFY2xpcHNlIEV1cm9wYSB1cGRhdGUgc2l0ZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9ldXJvcGEvc2l0ZS54bWw8YnIvPlRvIHVzZSB0aGUgdXBkYXRlIHNpdGUgY29weSB0aGUgVVJMIGFib3ZlIGFuZCBwYXN0ZSBpdCBpbnRvIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLjxici8+PGJyLz4KCQkJCTxzcGFuIGNsYXNzPSJldXJvcGFMaW5rIj5Gb2xsb3cgdGhlIEVjbGlwc2UgRXVyb3BhIERldmVsb3BtZW50IENvb3JkaW5hdGlvbjwvc3Bhbj48YnIvPgoJCQkJQ2hlY2sgb3V0IHRoZSA8YSBocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9pbmRleC5waHAvRXVyb3BhX1NpbXVsdGFuZW91c19SZWxlYXNlIj5FY2xpcHNlIEV1cm9wYSBXaWtpIFBhZ2U8L2E+IHRvIGNoZWNrIG91dCB0aGUgc3RhdHVzIG9mIEV1cm9wYTwvYnI+PGJyLz4KCQk8L3A+CgkKCgkJPGJyLz4KCQk8PyAvKjx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0wPgoJCQk8dHI+CgkJCQk8dGQgY29sc3Bhbj0iMiI+CQkJCQoJCQkJCTxkaXYgaWQ9InRlY2huaWNhbFJlc291cmNlcyI+CgkJCQkJCTw/PSRyZXNvdXJjZXNfdGFibGU7Pz4KCQkJCQk8L2Rpdj4KCQkJCTwvdGQ+CgkJCTwvdHI+CgkJCTwvdGFibGU+ICovID8+CQkKCgkJPHA+Jm5ic3A7PC9wPgoKCTwvZGl2PgoKCTxkaXYgaWQ9InJpZ2h0Y29sdW1uIj4KCQk8ZGl2IGNsYXNzPSJzaWRlaXRlbSI+CgkJCTxoNj5SZWxhdGVkIExpbmtzPC9oNj4KCQkJCTx1bD4KCQkJCQk8bGk+PGEgaHJlZj0iZnJpZW5kcy5waHAiPkZyaWVuZHMgb2YgRXVyb3BhPC9hPjwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9InByb2plY3RzLnBocCI+RXVyb3BhIFByb2plY3RzPC9hPjwvbGk+CgkJCQkJPGxpPjxhIGhyZWY9Ii9vcmcvcHJlc3MtcmVsZWFzZS8yMDA3MDYxMmNiX2V1cm9wYXJldmlld3MucGhwIj5Xcml0ZSBhIFJldmlldywgV2luIGFuIEVjbGlwc2UgU2hpcnQ8L2E+PC9saT4KCQkJCTwvdWw+CgkJPC9kaXY+CgkJCgkJPGRpdiBjbGFzcz0ic2lkZWl0ZW0iPgoJCQk8aDY+Q291bnRkb3duIHRvIEV1cm9wYTwvaDY+CgkJCTxkaXYgaWQ9ImNvdW50ZG93biI+CgkJCQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCSAgIDw/IC8qPGRpdiBjbGFzcz0ic2lkZWl0ZW0iPgoJCQkJPD89JHdoYXRzbmV3Oz8+CQoJCTwvZGl2PgoJCQoJCTxkaXYgY2xhc3M9InNpZGVpdGVtIj4KCQkJPGg2PlJlbGF0ZWQgTGlua3M8L2g2PgoJCQk8dWw+CgkJCQk8bGk+PGEgaHJlZj0iZnJpZW5kcy5waHAiPkZyaWVuZHMgb2YgRXVyb3BhPC9hPjwvbGk+CgkJCTwvdWw+CgkJPC9kaXY+CgkJICovID8+IAoJPC9kaXY+Cgo8PyAKJGh0bWwgPSBvYl9nZXRfY29udGVudHMoKTsKb2JfZW5kX2NsZWFuKCk7CgoJIyBHZW5lcmF0ZSB0aGUgd2ViIHBhZ2UKCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOwo/PgoK