VGhpcyBpcyB0aGUgVk1TIHBvcnQgb2YgR05VIE1ha2UgdmVyc2lvbiAzLjc1LgoKSXQgaXMgYmFzZWQgb24gdGhlIFZNUyBwb3J0IG9mIEdOVSBNYWtlIDMuNjAgYnkgTWlrZSBNb3JldHRpLgoKVGhpcyBwb3J0IHdhcyBkb25lIGJ5IEtsYXVzIEvkbXBmIChra2FlbXBmQHByb2dpcy5kZSkgb2YKcHJvR0lTIFNvZnR3YXJlLCBBYWNoZW4sIEdlcm1hbnkKClRvIGJ1aWxkIE1ha2UsIHNpbXBseSB0eXBlIEBtYWtlZmlsZS4gIFRoaXMgc2hvdWxkIGNvbXBpbGUgYWxsIHRoZQpuZWNlc3NhcnkgZmlsZXMgYW5kIGxpbmsgTWFrZS4KVGhlcmUgaXMgYWxzbyBhIGZpbGUgY2FsbGVkIG1ha2VmaWxlLnZtcy4gIElmIHlvdSBhbHJlYWR5IGhhdmUgR05VCk1ha2UgMy43NCBidWlsdCB5b3UgY2FuIGp1c3QgdXNlIE1ha2Ugd2l0aCB0aGlzIG1ha2VmaWxlIHRvIHJlYnVpbGQuCgpIZXJlIGFyZSBzb21lIG5vdGVzIGFib3V0IEdOVSBNYWtlIGZvciBWTVM6CgpMaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFRoZXkgd2VyZSBpbiBHTlUgTWFrZSAzLjYwIGJ1dCBzb21laG93IEkgZGlkbid0CmNhcmUgcG9ydGluZyB0aGUgY29kZS4gSWYgdGhlcmUgaXMgZW5vdWdoIGludGVyZXN0LCBJJ2xsIGRvIGl0IGF0IHNvbWUKbGF0ZXIgdGltZS4KClRoZSB2YXJpYWJsZSAkXiBzZXBhcmF0ZXMgZmlsZXMgd2l0aCBjb21tYXMgaW5zdGVhZCBvZiBzcGFjZXMgKEl0J3MgdGhlCm5hdHVyYWwgdGhpbmcgdG8gZG8gZm9yIFZNUykuCgpTZWUgZGVmYXVsdHMuYyBmb3IgVk1TIGRlZmF1bHQgc3VmZml4ZXMgYW5kIG15IGRlZmluaXRpb25zIGZvciBkZWZhdWx0CnJ1bGVzIGFuZCB2YXJpYWJsZXMuCgpUaGUgc2hlbGwgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIHlldC4KCkxvYWQgYXZlcmFnZSByb3V0aW5lcyBoYXZlbid0IGJlZW4gaW1wbGVtZW50ZWQgZm9yIFZNUyB5ZXQuCgpUaGUgZGVmYXVsdCBpbmNsdWRlIGRpcmVjdG9yeSBmb3IgaW5jbHVkaW5nIG90aGVyIG1ha2VmaWxlcyBpcwpTWVMkU1lTUk9PVDpbU1lTTElCXSAoSSBkb24ndCByZW1lbWJlciB3aHkgSSBkaWRuJ3QganVzdCB1c2UKU1lTJExJQlJBUlk6IGluc3RlYWQ7IG1heWJlIGl0IHdvdWxkbid0IHdvcmsgdGhhdCB3YXkpLgoKVGhlIGRlZmF1bHQgbWFrZWZpbGVzIG1ha2UgbG9va3MgZm9yIGFyZTogbWFrZWZpbGUudm1zLCBnbnVtYWtlZmlsZSwgbWFrZWZpbGUuLAphbmQgZ251bWFrZWZpbGUuIC4KClRoZSBzdGF0KCkgZnVuY3Rpb24gYW5kIGhhbmRsaW5nIG9mIHRpbWUgc3RhbXBzIGluIFZNUyBpcyBicm9rZW4sIHNvIEkKcmVwbGFjZWQgaXQgd2l0aCBhIGhhY2sgaW4gdm1zZnVuY3Rpb25zLmMuIEkgd2lsbCBwcm92aWRlIGEgZnVsbCByZXdyaXRlCnNvbWV3aGVyZSBpbiB0aGUgZnV0dXJlLiBCZSB3YXJuZWQsIHRoZSB0aW1lIHJlc29sdXRpb24gaW5zaWRlIG1ha2UgaXMKbGVzcyB0aGFuIHdoYXQgdm1zIHByb3ZpZGVzLiBUaGlzIG1pZ2h0IGJlIGEgcHJvYmxlbSBvbiB0aGUgZmFzdGVyIEFscGhhcy4KCllvdSBjYW4gdXNlIGEgOiBpbiBhIGZpbGVuYW1lIG9ubHkgaWYgeW91IHByZWNlZWQgaXQgd2l0aCBhIGJhY2tzbGFzaCAoJ1wnKS4KRS5nLi0gaG9iYmVzXDpbYm9nYXMuZmlsZXNdCgpOb25lIG9mIHRoZSBzdHVmZiBpbiB2cGF0aC5jIGhhcyBiZWVuIGltcGxlbWVudGVkIHlldC4KCk1ha2UgaWdub3JlcyBzdWNjZXNzLCBpbmZvcm1hdGlvbmFsLCBvciB3YXJuaW5nIGVycm9ycyAoLVMtLCAtSS0sIG9yIC1XLSkuCkJ1dCBpdCB3aWxsIHN0b3Agb24gLUUtIGFuZCAtRi0gZXJyb3JzLiAodW5sZXNzIHlvdSBkbyBzb21ldGhpbmcgdG8gb3ZlcnJpZGUKdGhpcyBpbiB5b3VyIG1ha2VmaWxlLCBvciB3aGF0ZXZlcikuCgpSZW1vdGUgc3R1ZmYgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0LgoKTXVsdGlwbGUgbGluZSBEQ0wgY29tbWFuZHMsIHN1Y2ggYXMgImlmIiBzdGF0ZW1lbnRzLCBtdXN0IGJlIHB1dCBpbnNpZGUKY29tbWFuZCBmaWxlcy4gIFlvdSBjYW4gcnVuIGEgY29tbWFuZCBmaWxlIGJ5IHVzaW5nIFxALgoKClZNUyBjaGFuZ2VzIG1hZGUgZm9yIDMuNzQuMwoKTG90cyBvZiBkZWZhdWx0IHNldHRpbmdzIGFyZSBhZGFwdGVkIGZvciBWTVMuIFNlZSBkZWZhdWx0LmMuCgpMb25nIGNvbW1hbmQgbGluZXMgYXJlIG5vdyBjb252ZXJ0ZWQgdG8gY29tbWFuZCBmaWxlcy4KCkNvbW1hICgnLCcpIGFzIGEgc2VwYXJhdG9yIGlzIG5vdyBhbGxvd2VkLiBTZWUgbWFrZWZpbGUudm1zIGZvciBhbiBleGFtcGxlLgoK