VGhpcyBpcyB0aGUgVk1TIHBvcnQgb2YgR05VIE1ha2UgdmVyc2lvbiAzLjc0LgoKSXQgaXMgYmFzZWQgb24gdGhlIFZNUyBwb3J0IG9mIEdOVSBNYWtlIDMuNjAgYnkgTWlrZSBNb3JldHRpLgoKVGhpcyBwb3J0IHdhcyBkb25lIGJ5IEtsYXVzIEvkbXBmIChra2FlbXBmQGRpZHltdXMucm1pLmRlKQoKVG8gYnVpbGQgTWFrZSwgc2ltcGx5IHR5cGUgQG1ha2VmaWxlLiAgVGhpcyBzaG91bGQgY29tcGlsZSBhbGwgdGhlCm5lY2Vzc2FyeSBmaWxlcyBhbmQgbGluayBNYWtlLgpUaGVyZSBpcyBhbHNvIGEgZmlsZSBjYWxsZWQgbWFrZWZpbGUudm1zLiAgSWYgeW91IGFscmVhZHkgaGF2ZSBHTlUKTWFrZSAzLjc0IGJ1aWx0IHlvdSBjYW4ganVzdCB1c2UgTWFrZSB3aXRoIHRoaXMgbWFrZWZpbGUgdG8gcmVidWlsZC4KCkhlcmUgYXJlIHNvbWUgbm90ZXMgYWJvdXQgR05VIE1ha2UgZm9yIFZNUzoKCkxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gVGhleSB3ZXJlIGluIEdOVSBNYWtlIDMuNjAgYnV0IHNvbWVob3cgSSBkaWRuJ3QKY2FyZSBwb3J0aW5nIHRoZSBjb2RlLiBJZiB0aGVyZSBpcyBlbm91Z2ggaW50ZXJlc3QsIEknbGwgZG8gaXQgYXQgc29tZQpsYXRlciB0aW1lLgoKVGhlIHZhcmlhYmxlICReIHNlcGFyYXRlcyBmaWxlcyB3aXRoIGNvbW1hcyBpbnN0ZWFkIG9mIHNwYWNlcyAoSXQncyB0aGUKbmF0dXJhbCB0aGluZyB0byBkbyBmb3IgVk1TKS4KClNlZSBkZWZhdWx0cy5jIGZvciBWTVMgZGVmYXVsdCBzdWZmaXhlcyBhbmQgbXkgZGVmaW5pdGlvbnMgZm9yIGRlZmF1bHQKcnVsZXMgYW5kIHZhcmlhYmxlcy4KClRoZSBzaGVsbCBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LgoKTG9hZCBhdmVyYWdlIHJvdXRpbmVzIGhhdmVuJ3QgYmVlbiBpbXBsZW1lbnRlZCBmb3IgVk1TIHlldC4KClRoZSBkZWZhdWx0IGluY2x1ZGUgZGlyZWN0b3J5IGZvciBpbmNsdWRpbmcgb3RoZXIgbWFrZWZpbGVzIGlzClNZUyRTWVNST09UOltTWVNMSUJdIChJIGRvbid0IHJlbWVtYmVyIHdoeSBJIGRpZG4ndCBqdXN0IHVzZQpTWVMkTElCUkFSWTogaW5zdGVhZDsgbWF5YmUgaXQgd291bGRuJ3Qgd29yayB0aGF0IHdheSkuCgpUaGUgZGVmYXVsdCBtYWtlZmlsZXMgbWFrZSBsb29rcyBmb3IgYXJlOiBtYWtlZmlsZS52bXMsIGdudW1ha2VmaWxlLCBtYWtlZmlsZS4sCmFuZCBnbnVtYWtlZmlsZS4gLgoKVGhlIHN0YXQoKSBmdW5jdGlvbiBhbmQgaGFuZGxpbmcgb2YgdGltZSBzdGFtcHMgaW4gVk1TIGlzIGJyb2tlbiwgc28gSQpyZXBsYWNlZCBpdCB3aXRoIGEgaGFjayBpbiB2bXNmdW5jdGlvbnMuYy4gSSB3aWxsIHByb3ZpZGUgYSBmdWxsIHJld3JpdGUKc29tZXdoZXJlIGluIHRoZSBmdXR1cmUuIEJlIHdhcm5lZCwgdGhlIHRpbWUgcmVzb2x1dGlvbiBpbnNpZGUgbWFrZSBpcwpsZXNzIHRoYW4gd2hhdCB2bXMgcHJvdmlkZXMuIFRoaXMgbWlnaHQgYmUgYSBwcm9ibGVtIG9uIHRoZSBmYXN0ZXIgQWxwaGFzLgoKWW91IGNhbiB1c2UgYSA6IGluIGEgZmlsZW5hbWUgb25seSBpZiB5b3UgcHJlY2VlZCBpdCB3aXRoIGEgYmFja3NsYXNoICgnXCcpLgpFLmcuLSBob2JiZXNcOltib2dhcy5maWxlc10KCk5vbmUgb2YgdGhlIHN0dWZmIGluIHZwYXRoLmMgaGFzIGJlZW4gaW1wbGVtZW50ZWQgeWV0LgoKTWFrZSBpZ25vcmVzIHN1Y2Nlc3MsIGluZm9ybWF0aW9uYWwsIG9yIHdhcm5pbmcgZXJyb3JzICgtUy0sIC1JLSwgb3IgLVctKS4KQnV0IGl0IHdpbGwgc3RvcCBvbiAtRS0gYW5kIC1GLSBlcnJvcnMuICh1bmxlc3MgeW91IGRvIHNvbWV0aGluZyB0byBvdmVycmlkZQp0aGlzIGluIHlvdXIgbWFrZWZpbGUsIG9yIHdoYXRldmVyKS4KClJlbW90ZSBzdHVmZiBpc24ndCBpbXBsZW1lbnRlZCB5ZXQuCgpNdWx0aXBsZSBsaW5lIERDTCBjb21tYW5kcywgc3VjaCBhcyAiaWYiIHN0YXRlbWVudHMsIG11c3QgYmUgcHV0IGluc2lkZQpjb21tYW5kIGZpbGVzLiAgWW91IGNhbiBydW4gYSBjb21tYW5kIGZpbGUgYnkgdXNpbmcgXEAuCgoKVk1TIGNoYW5nZXMgbWFkZSBmb3IgMy43NC4zCgpMb3RzIG9mIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGFkYXB0ZWQgZm9yIFZNUy4gU2VlIGRlZmF1bHQuYy4KCkxvbmcgY29tbWFuZCBsaW5lcyBhcmUgbm93IGNvbnZlcnRlZCB0byBjb21tYW5kIGZpbGVzLgoKQ29tbWEgKCcsJykgYXMgYSBzZXBhcmF0b3IgaXMgbm93IGFsbG93ZWQuIFNlZSBtYWtlZmlsZS52bXMgZm9yIGFuIGV4YW1wbGUuCgo=