ClRoZSBNUEwgcHJvdmlkZXMgYSBudW1iZXIgb2YgfFRyaXZpYWwgTWV0YWZ1bmN0aW9ufFwgcyB0aGF0IGEgbm90aGluZyBtb3JlIHRoYW4KdGhpbiB3cmFwcGVycyBmb3IgYSBkaWZmZXJlbnRseS1uYW1lZCBjbGFzcyBuZXN0ZWQgdHlwZSBtZW1iZXJzLiBXaGlsZSBpbXBvcnRhbnQKaW4gdGhlIGNvbnRleHQgb2YgYGluLXBsYWNlIG1ldGFmdW5jdGlvbiBjb21wb3NpdGlvbmBfXywgdGhlc2UgbWV0YWZ1bmN0aW9ucyBoYXZlCnNvIGxpdHRsZSB0byB0aGVtIHRoYXQgcHJlc2VudGluZyB0aGVtIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgcmVzdCBvZiB0aGUKY29tcG9tZW50cyBpbiB0aGlzIG1hbnVhbCB3b3VsZCByZXN1bHQgaW4gbW9yZSBib2lsZXJwbGF0ZSBzeW50YWN0aWMgYmFnZ2FnZSB0aGFuCnRoZSBhY3R1YWwgY29udGVudC4gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB3ZSBpbnN0ZWFkIGZhY3RvciBvdXQgdGhlIGNvbW1vbiAKbWV0YWZ1bmN0aW9ucycgcmVxdWlyZW1lbnRzIGludG8gdGhlIGBjb3JyZXNwb25kaW5nIGNvbmNlcHRgX18gYW5kIGdhdGhlciBhbGwgb2YgCnRoZW0gaW4gYSBzaW5nbGUgcGxhY2UgfC0tfCB0aGlzIHN1YnNlY3Rpb24gfC0tfCBpbiBhIGNvbXBhY3QgdGFibGUgZm9ybSB0aGF0IGlzIApwcmVzZW50ZWQgYmVsb3cuCgpfXyBgQ29tcG9zaXRpb24gYW5kIEFyZ3VtZW50IEJpbmRpbmdgXwpfXyBgVHJpdmlhbCBNZXRhZnVuY3Rpb25gXwoKLi4gfFRyaXZpYWwgTWV0YWZ1bmN0aW9uc3wgcmVwbGFjZTo6IGBUcml2aWFsIE1ldGFmdW5jdGlvbnNgXwouLiBfYFRyaXZpYWwgTWV0YWZ1bmN0aW9uc2A6IGBsYWJlbC1NZXRhZnVuY3Rpb25zLVRyaXZpYWxgXwoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK