VGVzdCBPZiBQbHVnLWluIFByb2plY3QgQmVoYXZpb3IgV2hlbiBCZWluZyBDb252ZXJ0ZWQgVG8gYXNwZWN0SiBQcm9qZWN0cwoKQnVnIDcyMDA3CgoxLiBJbnN0YWxsIG5ldyBjb3BpZXMgb2YgZWNsaXBzZSBhbmQgYWpkdCBhbmQgY2hlY2sgb3V0ICJIZWxsbyBXb3JsZCBKYXZhIFBsdWdpbiIgCmZyb20gIm9yZy5lY2xpcHNlLmFqZHQudGVzdHMvdGVzdCBwcm9qZWN0cyIgb24gdGhlIEVjbGlwc2UgQ1ZTIHJlcG9zaXRvcnkuIApMYXVuY2ggYSBydW50aW1lIHdvcmtiZW5jaCBhbmQgY2xpY2sgkVNhbXBsZSBNZW51kiA+IJFTYW1wbGUgQWN0aW9ukiB0byB2ZXJpZnkgdGhlIApwbHVnaW4gaXMgd29ya2luZy4gWW91IHNob3VsZCBzZWUgYSBkaWFsb2cgYm94IGNvbnRhaW5pbmcgdGhlIHRleHQgk0hlbGxvIEVjbGlwc2WULiAoUExVR18xKQoKMi4gU3dpdGNoIHRvIHRoZSBqYXZhIHBlcnNwZWN0aXZlIGFuZCBvcGVuICJIZWxsbyBXb3JsZCBKYXZhIFBsdWdpbiIgYW5kIHRoZW4gb3BlbiBpdHMgCnBsdWdpbi54bWwgZmlsZS4gQ2xpY2sgdGhlIGRlcGVuZGVuY2llcyB0YWIgd2hpY2ggaXMgZm91bmQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbmV3CndpbmRvdy4gQW5kIGluIHRoZSAiUmVxdWlyZWQgUGx1Z2luLWlucyIgc2VjdGlvbiBzaG91bGQgYmUgdGhlIHBsdWdpbnM6Cm9yZy5lY2xpcHNlLnVpIGFuZCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuIChQTFVHXzIpCgozLiBSaWdodCBjbGljayB0aGUgcHJvamVjdCBhbmQgc2VsZWN0ICJDb252ZXJ0IHRvIEFzcGVjdEogcHJvamVjdCIuIFlvdSBzaG91bGQgYmUKcHJvbXB0ZWQgdG8gaW1wb3J0IHRoZSBvcmcuYXNwZWN0ai5ydW50aW1lIHBsdWdpbi4gU2F5IFllcyBhbmQgY2hlY2sgdGhhdCB0aGUgCnJlcXVpcmVkIHBsdWdpbiBpcyBhZGRlZCB0byB0aGUgcGx1Z2luLnhtbCAoUExVR18zKQoKNC4gUmlnaHQgY2xpY2sgdGhlIHByb2plY3QgYW5kIHNlbGVjdCAiUmVtb3ZlIEFzcGVjdEogTmF0dXJlIi4gIFlvdSBzaG91bGQgYmUgcHJvbXB0ZWQKdG8gcmVtb3ZlIHRoZSBvcmcuYXNwZWN0ai5ydW50aW1lIGRlcGVuZGVuY3kuICBTYXkgJ1llcycgYW5kIGNoZWNrIHRoYXQgdGhlIApkZXBlbmRlbmN5IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcGx1Z2luLnhtbCAoUExVR180KQoKNS4gTm93IGNsaWNrICJBZGQuLi4iIHRvIHRoZSByaWdodCBvZiB0aGUgIlJlcXVpcmVkIFBsdWctaW5zIiBib3ggYW5kIGFkZCAKIm9yZy5hc3BlY3RqLnJ1bnRpbWUiIHRoZW4gc2F2ZSB0aGUgZmlsZS4gTm93IHJpZ2h0IGNsaWNrIHRoZSAiSGVsbG8gV29ybGQgSmF2YSBQbHVnaW4iIApwcm9qZWN0IGFuZCBzZWxlY3QgIkNvbnZlcnQgdG8gQXNwZWN0SiBQcm9qZWN0Ii4gWW91IHNob3VsZCBub3QgYmUgcHJvbXB0ZWQuIENoZWNrIHRoYXQKdGhlICJSZXF1aXJlZCBwbHVnLWlucyIgIHNlY3Rpb24gc3RpbGwgb25seSBjb250YWlucyBhIHNpbmdsZSBlbnRyeSBmb3IKIm9yZy5hc3BlY3RqLnJ1bnRpbWUiLiAoUExVR181KQoKNi4gUmlnaHQgY2xpY2sgdGhlICJIZWxsbyBXb3JsZCBKYXZhIFBsdWdpbiIgcHJvamVjdCBhbmQgdGhlbiBzZWxlY3QgIlJlbW92ZSBBc3BlY3RKCk5hdHVyZSIuIFlvdSB3aWxsIGJlIHByb21wdGVkIGFnYWluLiAgQ2xpY2sgJ05vJyBhbmQgY2hlY2sgdGhhdCB0aGUgZGVwZW5kZW5jeQppcyBub3QgcmVtb3ZlZC4gKFBMVUdfNikK