PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgokcGFnZVRpdGxlIAkJPSAiVGVjaG5vbG9neSBQcm9qZWN0IExlYWRlcnMiOwokcGFnZUtleXdvcmRzCT0gInRlY2hub2xvZ3kiOwokcGFnZUF1dGhvcgkJPSAiQmpvcm4gRnJlZW1hbi1CZW5zb24gTm92IDIwLzA1IjsKCm9iX3N0YXJ0KCk7Cj8+CiAgICA8ZGl2IGlkPSJtYWluY29udGVudCI+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgogICAgICAgIDxoMT48Pz0gJHBhZ2VUaXRsZSA/PjwvaDE+CiAgICAgICAgCiAgICAgIDxwPlRoZSBFY2xpcHNlIFRlY2hub2xvZ3kgUHJvamVjdCBpcyBtYW5hZ2VkIGJ5IGEgc21hbGwgZ3JvdXAga25vd24gYXMgdGhlIAogICAgICAgIEVjbGlwc2UgVGVjaG5vbG9neSBQcm9qZWN0IE1hbmFnZW1lbnQgQ29tbWl0dGVlICg8YSBocmVmPSJ0ZWNobm9sb2d5LWNoYXJ0ZXIuaHRtbCNQTUMiPlBNQzwvYT4pLiAKICAgICAgICBUaGUgUE1DIGhvbGRzIHdlZWtseSBjb25mZXJlbmNlIGNhbGxzIChzZWUgCiAgICAgICAgPGEgaHJlZj0icG1jLW1pbnV0ZXMucGhwIj50aGUgbWludXRlczwvYT4pIGFuZCBob2xkcyAoc29tZSkKICAgICAgICBkaXNjdXNzaW9ucyBvbiA8YSBocmVmPSJtYWlsdG86dGVjaG5vbG9neS1wbWNAZWNsaXBzZS5vcmciPnRlY2hub2xvZ3ktcG1jQGVjbGlwc2Uub3JnPC9hPiBtYWlsaW5nIGxpc3QuCiAgICAgICAgVGhlIHdvcmsgb2YgdGhlIFByb2plY3QgaXMgb3JnYW5pemVkIGludG8gc3VicHJvamVjdHMuIEVhY2ggc3VicHJvamVjdCAKICAgICAgICBoYXMgYSBsZWFkZXIgd2hvIGhhcyBvdmVyYWxsIHJlc3BvbnNpYmlsaXR5IGZvciBpdHMgc3VjY2Vzcy4gTGFyZ2Ugc3VicHJvamVjdHMgCiAgICAgICAgYXJlIGZ1cnRoZXIgZGl2aWRlZCBpbnRvIGNvbXBvbmVudCB0ZWFtcywgZWFjaCBvZiB3aG8gaGFzIGEgbGVhZGVyIHRoYXQgCiAgICAgICAgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBvdmVyYWxsIHN1Y2Nlc3MuIFdlIGhhdmUgbGlzdGVkIGp1c3QgdGhlIFBNQyAKICAgICAgICA8IS0tIGFuZCAKICAgICAgICBzdWJwcm9qZWN0IGxlYWRlcnMgCiAgICAgICAgLS0+CiAgICAgICAgaGVyZSBidXQgeW91IHdpbGwgZW5jb3VudGVyIG1hbnkgZGVkaWNhdGVkIGVjbGlwc2UgCiAgICAgICAgcHJvamVjdCBjb21taXR0ZXJzIGFuZCBkZXZlbG9wZXJzIGluIHRoZSA8YSBocmVmPSIvbmV3c2dyb3Vwcy8iIHRhcmdldD0iX3RvcCI+bmV3c2dyb3VwczwvYT4gCiAgICAgICAgYW5kIDxhIGhyZWY9Ii9tYWlsLyIgdGFyZ2V0PSJfdG9wIj5tYWlsaW5nIGxpc3RzPC9hPi48L3A+Cgo8aDI+UHJvamVjdCAKICAgICAgTWFuYWdlbWVudCBDb21taXR0ZWU8L2gyPgoKICAgICAgIDx1bCBjbGFzcz0ibWlkbGlzdCI+CjxsaT4gICAgPGI+Qmpvcm4gRnJlZW1hbi1CZW5zb24sIEVjbGlwc2UgRm91bmRhdGlvbiAoYmpvcm4gYXQgZWNsaXBzZS5vcmcpIChQTUMgCiAgICBsZWFkKTwvYj48YnI+CiAgICAgIEJqb3JuIGlzIHRoZSBEaXJlY3RvciwgT3BlbiBTb3VyY2UgUHJvY2VzcyBhdCB0aGUgCiAgICBFY2xpcHNlIEZvdW5kYXRpb24uIFRocm91Z2hvdXQgaGlzIG1lYW5kZXJpbmcgY2FyZWVyLCBCam9ybiBoYXMgYWx3YXlzIGJlZW4gaW50ZXJlc3RlZCAKICAgICAgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIGFuZCBJREVzIGluIHNwaXRlIG9mIG9jY2Fzc2lvbmFsbHkgd2FuZGVyaW5nIGF3YXkgCiAgICAgIGZyb20gdGhlaXIgb25lIHRydWUgcGF0aC4gQmpvcm4gaGFzIHdvcmtlZCBmb3IgT1RJLCBBbWF6b24uY29tLCBSYXRpb25hbCwgCiAgICAgIGFuZCBHZW1zdG9uZSwgYW1vbmcgb3RoZXJzLiBIZSBpcyBhbHNvIGhhcHB5IHRvIGV4cG91bmQgYXQgbGVuZ3RoIGFib3V0IAogICAgICBoaXMgbG92ZSBvZiBmbHlpbmcuIDxici8+PC9saT4KCjxsaT4gPGI+V2F5bmUgQmVhdG9uLCBFY2xpcHNlIEZvdW5kYXRpb24gKHdheW5lIGF0IGVjbGlwc2Uub3JnKTwvYj48YnI+CjwvbGk+CiAgICAgIAogICAgICA8bGk+PGI+V2FyZCBDdW5uaW5naGFtLCBFY2xpcHNlIEZvdW5kYXRpb24gKHdhcmQgYXQgZWNsaXBzZS5vcmcpPC9iPjxicj4KICAgICAgPC9saT4KICAgICAgCiAgICAgIDxsaT48Yj5Kb2huIER1aW1vdmljaCwgSUJNIChqb2huX2R1aW1vdmljaCBhdCBjYS5pYm0uY29tKTwvYj48YnI+CiAgICAgIEpvaG4gRHVpbW92aWNoLCBJQk0gZGlzdGluZ3Vpc2hlZCBlbmdpbmVlciwgaGFzIGJlZW4gdGhlIGxlYWQgZGVzaWduZXIgYW5kIAogICAgICBpbXBsZW1lbnRvciBmb3IgT1RJL0lCTSYjMTQ2O3MgdmlydHVhbCBtYWNoaW5lIHRlY2hub2xvZ3kgZm9yIHRoZSBwYXN0IHRlbiAKICAgICAgeWVhcnMuIEhlIGhhcyBkZXNpZ25lZCB2aXJ0dWFsIG1hY2hpbmVzIGZvciBhIHdpZGUgcmFuZ2Ugb2YgcGxhdGZvcm1zLCBmcm9tIAogICAgICB0aGUgaW1wbGVtZW50YXRpb25zIGZvciBlbWJlZGRlZCBhbmQgcmVhbCB0aW1lIHN5c3RlbXMgdG8gdGhvc2UgZm9yIElCTSAKICAgICAgbWFpbmZyYW1lIHN5c3RlbXMuIEpvaG4gaGFzIHBsYXllZCBhIGtleSByb2xlIGluIHRoZSBkZXZlbG9wbWVudCBvZiBFTlZZL1NtYWxsdGFsaywgCiAgICAgIFZBL01pY3JvIEVkaXRpb24sIGFuZCBWQS9KYXZhIEphdmEgSURFcy4gSW4gYWRkaXRpb24gdG8gc2VydmluZyBvbiB0aGUgRWNsaXBzZSAKICAgICAgVGVjaG5vbG9neSBQTUMsIEpvaG4gc2VydmVzIGFzIHRoZSBsZWFkIG9mIHRoZSBFY2xpcHNlIFRvb2xzIFBNQy48YnIvPjwvbGk+CiAgICAgIAogICAgICA8bGk+PGI+Q2xpZmYgU2NobWlkdCwgQkVBIChjbGlmZiBhdCBiZWEuY29tKTwvYj48YnI+CiAgICAgIENsaWZmIGlzIGEgbWVtYmVyIG9mIEFwYWNoZZJzIEluY3ViYXRvciBQcm9qZWN0IE1hbmFnZW1lbnQgQ29tbWl0dGVlIGFuZAogICAgICBicmluZ3MgdGhpcyBleHBlcmllbmNlIHRvIHRoZSBFY2xpcHNlIFRlY2hub2xvZ3kgcHJvamVjdC4gSGUgaGFzIHNwZW50IHRoZQogICAgICBsYXN0IHR3byB5ZWFycyBjb2xsYWJvcmF0aW5nIHdpdGggdmFyaW91cyBvcGVuIHNvdXJjZSBjb21tdW5pdGllcyB0bwogICAgICBldm9sdmUgcG9saWNpZXMgYW5kIHByb2NlZHVyZXMgdGhhdCBlbmNvdXJhZ2UgdGhlIHN1Y2Nlc3Mgb2YgbmV3IG9wZW4KICAgICAgc291cmNlIHByb2plY3RzLCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIGxpY2Vuc2luZywgbG9naXN0aWNzLCBhbmQKICAgICAgY29tbXVuaXR5IGRldmVsb3BtZW50LiBIZSBoYXMgYWxzbyBiZWVuIHJlc3BvbnNpYmxlIGZvciBCRUGScyBvcGVuCiAgICAgIHNvdXJjZSBzdHJhdGVneSBhbmQgcmVsYXRpb25zaGlwIHdpdGggb3BlbiBzb3VyY2Ugb3JnYW5pemF0aW9ucywgc3VjaCBhcwogICAgICB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGFuZCB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uIFByaW9yIHRvIHRoaXMsCiAgICAgIGhlIHNwZWNpYWxpemVkIGluIHN0YW5kYXJkcyBzdHJhdGVneSwgd29ya2luZyB3aXRoIE9BU0lTLCB0aGUgSmF2YQogICAgICBDb21tdW5pdHkgUHJvY2VzcywgYW5kIHRoZSBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLjxici8+PC9saT4KICAgICAgCiAgICAgIDwvdWw+CjwvZGl2Pgo8L2Rpdj4KPD9waHAKCSMgUGFzdGUgeW91ciBIVE1MIGNvbnRlbnQgYmV0d2VlbiB0aGUgRU9IVE1MIG1hcmtlcnMhCQoJJGh0bWwgPSBvYl9nZXRfY29udGVudHMoKTsKCW9iX2VuZF9jbGVhbigpOwoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4K