LlwiIFlvdSBjYW4gdmlldyB0aGlzIGZpbGUgd2l0aDoKLlwiIG5yb2ZmIC1tYW4gY3VybC4xCi5cIiBXcml0dGVuIGJ5IERhbmllbCBTdGVuYmVyZwouXCIKLlRIIGN1cmwgMSAiMTMgTWFyY2ggMjAwMCIgIkN1cmwgNi41IiAiQ3VybCBNYW51YWwiCi5TSCBOQU1FCmN1cmwgXC0gZ2V0IGEgVVJMIHdpdGggRlRQLCBURUxORVQsIExEQVAsIEdPUEhFUiwgRElDVCwgRklMRSwgSFRUUCBvcgpIVFRQUyBzeW50YXguCi5TSCBTWU5PUFNJUwouQiBjdXJsIFtvcHRpb25zXQouSSB1cmwKLlNIIERFU0NSSVBUSU9OCi5CIGN1cmwKaXMgYSBjbGllbnQgdG8gZ2V0IGRvY3VtZW50cy9maWxlcyBmcm9tIHNlcnZlcnMsIHVzaW5nIGFueSBvZiB0aGUKc3VwcG9ydGVkIHByb3RvY29scy4gVGhlIGNvbW1hbmQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRob3V0IHVzZXIKaW50ZXJhY3Rpb24gb3IgYW55IGtpbmQgb2YgaW50ZXJhY3Rpdml0eS4KCmN1cmwgb2ZmZXJzIGEgYnVzbG9hZCBvZiB1c2VmdWwgdHJpY2tzIGxpa2UgcHJveHkgc3VwcG9ydCwgdXNlcgphdXRoZW50aWNhdGlvbiwgZnRwIHVwbG9hZCwgSFRUUCBwb3N0LCBTU0wgKGh0dHBzOikgY29ubmVjdGlvbnMsIGNvb2tpZXMsIGZpbGUKdHJhbnNmZXIgcmVzdW1lIGFuZCBtb3JlLgouU0ggVVJMClRoZSBVUkwgc3ludGF4IGlzIHByb3RvY29sIGRlcGVuZGVudC4gWW91J2xsIGZpbmQgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBpbgpSRkMgMjM5Ni4KCllvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBVUkxzIG9yIHBhcnRzIG9mIFVSTHMgYnkgd3JpdGluZyBwYXJ0IHNldHMgd2l0aGluCmJyYWNlcyBhcyBpbjoKCiBodHRwOi8vc2l0ZS57b25lLHR3byx0aHJlZX0uY29tCgpvciB5b3UgY2FuIGdldCBzZXF1ZW5jZXMgb2YgYWxwaGFudW1lcmljIHNlcmllcyBieSB1c2luZyBbXSBhcyBpbjoKCiBmdHA6Ly9mdHAubnVtZXJpY2Fscy5jb20vZmlsZVsxLTEwMF0udHh0CiBmdHA6Ly9mdHAubnVtZXJpY2Fscy5jb20vZmlsZVswMDEtMTAwXS50eHQgICAgKHdpdGggbGVhZGluZyB6ZXJvcykKIGZ0cDovL2Z0cC5sZXR0ZXJzLmNvbS9maWxlW2Etel0udHh0CgpJdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHVwIHRvIDkgc2V0cyBvciBzZXJpZXMgZm9yIGEgVVJMLCBidXQgbm8gbmVzdGluZyBpcwpzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudDoKCiBodHRwOi8vd3d3LmFueS5vcmcvYXJjaGl2ZVsxOTk2LTE5OTldL3ZvbHVtZVsxLTRdcGFydHthLGIsYyxpbmRleH0uaHRtbAouU0ggT1BUSU9OUwouSVAgIi1hLy0tYXBwZW5kIgooRlRQKQpXaGVuIHVzZWQgaW4gYSBmdHAgdXBsb2FkLCB0aGlzIHdpbGwgdGVsbCBjdXJsIHRvIGFwcGVuZCB0byB0aGUgdGFyZ2V0CmZpbGUgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBpdC4gSWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwgaXQgd2lsbApiZSBjcmVhdGVkLgouSVAgIi1BLy0tdXNlci1hZ2VudCA8YWdlbnQgc3RyaW5nPiIKKEhUVFApClNwZWNpZnkgdGhlIFVzZXItQWdlbnQgc3RyaW5nIHRvIHNlbmQgdG8gdGhlIEhUVFAgc2VydmVyLiBTb21lIGJhZGx5IGRvbmUgQ0dJcwpmYWlsIGlmIGl0cyBub3Qgc2V0IHRvICJNb3ppbGxhLzQuMCIuICBUbyBlbmNvZGUgYmxhbmtzIGluIHRoZSBzdHJpbmcsCnN1cnJvdW5kIHRoZSBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGUgbWFya3MuICBUaGlzIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZQotSC8tLWhlYWRlciBmbGFnIG9mIGNvdXJzZS4KLklQICItYi8tLWNvb2tpZSA8bmFtZT1kYXRhPiIKKEhUVFApClBhc3MgdGhlIGRhdGEgdG8gdGhlIEhUVFAgc2VydmVyIGFzIGEgY29va2llLiBJdCBpcyBzdXBwb3NlZGx5IHRoZQpkYXRhIHByZXZpb3VzbHkgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGluIGEgIlNldC1Db29raWU6IiBsaW5lLgpUaGUgZGF0YSBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdCAiTkFNRTE9VkFMVUUxOyBOQU1FMj1WQUxVRTIiLgoKSWYgbm8gJz0nIGxldHRlciBpcyB1c2VkIGluIHRoZSBsaW5lLCBpdCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUgdG8gdXNlIHRvCnJlYWQgcHJldmlvdXNseSBzdG9yZWQgY29va2llIGxpbmVzIGZyb20sIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIHRoaXMgc2Vzc2lvbgppZiB0aGV5IG1hdGNoLiBVc2luZyB0aGlzIG1ldGhvZCBhbHNvIGFjdGl2YXRlcyB0aGUgImNvb2tpZSBwYXJzZXIiIHdoaWNoCndpbGwgbWFrZSBjdXJsIHJlY29yZCBpbmNvbWluZyBjb29raWVzIHRvbywgd2hpY2ggbWF5IGJlIGhhbmR5IGlmIHlvdSdyZSB1c2luZwp0aGlzIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIC1MLy0tbG9jYXRpb24gb3B0aW9uLiBUaGUgZmlsZSBmb3JtYXQgb2YgdGhlIGZpbGUKdG8gcmVhZCBjb29raWVzIGZyb20gc2hvdWxkIGJlIHBsYWluIEhUVFAgaGVhZGVycyBvciB0aGUgbmV0c2NhcGUgY29va2llIGZpbGUKZm9ybWF0LgoKLkIgTk9URQp0aGF0IHRoZSBmaWxlIHNwZWNpZmllZCB3aXRoIC1iLy0tY29va2llIGlzIG9ubHkgdXNlZCBhcyBpbnB1dC4gTm8gY29va2llcwp3aWxsIGJlIHN0b3JlZCBpbiB0aGUgZmlsZS4gVG8gc3RvcmUgY29va2llcywgc2F2ZSB0aGUgSFRUUCBoZWFkZXJzIHRvIGEgZmlsZQp1c2luZyAtRC8tLWR1bXAtaGVhZGVyIQouSVAgIi1CLy0tZnRwLWFzY2lpIgooRlRQL0xEQVApClVzZSBBU0NJSSB0cmFuc2ZlciB3aGVuIGdldHRpbmcgYW4gRlRQIGZpbGUgb3IgTERBUCBpbmZvLiBGb3IgRlRQLCB0aGlzIGNhbgphbHNvIGJlIGVuZm9yY2VkIGJ5IHVzaW5nIGFuIFVSTCB0aGF0IGVuZHMgd2l0aCAiO3R5cGU9QSIuCi5JUCAiLWMvLS1jb250aW51ZSIKQ29udGludWUvUmVzdW1lIGEgcHJldmlvdXMgZmlsZSB0cmFuc2Zlci4gVGhpcyBpbnN0cnVjdHMgY3VybCB0bwpjb250aW51ZSBhcHBlbmRpbmcgZGF0YSBvbiB0aGUgZmlsZSB3aGVyZSBpdCB3YXMgcHJldmlvdXNseSBsZWZ0LApwb3NzaWJseSBiZWNhdXNlIG9mIGEgYnJva2VuIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlci4gVGhlcmUgbXVzdCBiZQphIG5hbWVkIHBoeXNpY2FsIGZpbGUgdG8gYXBwZW5kIHRvIGZvciB0aGlzIHRvIHdvcmsuCk5vdGU6IFVwbG9hZCByZXN1bWUgaXMgZGVwZW5pbmcgb24gYSBjb21tYW5kIG5hbWVkIFNJWkUgbm90IGFsd2F5cwpwcmVzZW50IGluIGFsbCBmdHAgc2VydmVycyEgVXBsb2FkIHJlc3VtZSBpcyBmb3IgRlRQIG9ubHkuCkhUVFAgcmVzdW1lIGlzIG9ubHkgcG9zc2libGUgd2l0aCBIVFRQLzEuMSBvciBsYXRlciBzZXJ2ZXJzLgouSVAgIi1DLy0tY29udGludWUtYXQgPG9mZnNldD4iCkNvbnRpbnVlL1Jlc3VtZSBhIHByZXZpb3VzIGZpbGUgdHJhbnNmZXIgYXQgdGhlIGdpdmVuIG9mZnNldC4gVGhlCmdpdmVuIG9mZnNldCBpcyB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSBza2lwcGVkCmNvdW50ZWQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzb3VyY2UgZmlsZSBiZWZvcmUgaXQgaXMgdHJhbnNmZXJlZAp0byB0aGUgZGVzdGluYXRpb24uCklmIHVzZWQgd2l0aCB1cGxvYWRzLCB0aGUgZnRwIHNlcnZlciBjb21tYW5kIFNJWkUgd2lsbCBub3QgYmUgdXNlZCBieQpjdXJsLiBVcGxvYWQgcmVzdW1lIGlzIGZvciBGVFAgb25seS4KSFRUUCByZXN1bWUgaXMgb25seSBwb3NzaWJsZSB3aXRoIEhUVFAvMS4xIG9yIGxhdGVyIHNlcnZlcnMuCi5JUCAiLWQvLS1kYXRhIDxkYXRhPiIKKEhUVFApClNlbmRzIHRoZSBzcGVjaWZpZWQgZGF0YSBpbiBhIFBPU1QgcmVxdWVzdCB0byB0aGUgSFRUUCBzZXJ2ZXIuIE5vdGUKdGhhdCB0aGUgZGF0YSBpcyBzZW50IGV4YWN0bHkgYXMgc3BlY2lmaWVkIHdpdGggbm8gZXh0cmEgcHJvY2Vzc2luZy4KVGhlIGRhdGEgaXMgZXhwZWN0ZWQgdG8gYmUgInVybC1lbmNvZGVkIi4gVGhpcyB3aWxsIGNhdXNlIGN1cmwgdG8KcGFzcyB0aGUgZGF0YSB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb250ZW50LXR5cGUKYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkLiBDb21wYXJlIHRvIC1GLgoKSWYgeW91IHN0YXJ0IHRoZSBkYXRhIHdpdGggdGhlIGxldHRlciBALCB0aGUgcmVzdCBzaG91bGQgYmUgYSBmaWxlIG5hbWUgdG8KcmVhZCB0aGUgZGF0YSBmcm9tLCBvciAtIGlmIHlvdSB3YW50IGN1cmwgdG8gcmVhZCB0aGUgZGF0YSBmcm9tIHN0ZGluLgpUaGUgY29udGVudHMgb2YgdGhlIGZpbGUgbXVzdCBhbHJlYWR5IGJlIHVybC1lbmNvZGVkLgouSVAgIi1ELy0tZHVtcC1oZWFkZXIgPGZpbGU+IgooSFRUUC9GVFApCldyaXRlIHRoZSBIVFRQIGhlYWRlcnMgdG8gdGhpcyBmaWxlLiBXcml0ZSB0aGUgRlRQIGZpbGUgaW5mbyB0byB0aGlzCmZpbGUgaWYgLUkvLS1oZWFkIGlzIHVzZWQuCgpUaGlzIG9wdGlvbiBpcyBoYW5keSB0byB1c2Ugd2hlbiB5b3Ugd2FudCB0byBzdG9yZSB0aGUgY29va2llcyB0aGF0IGEgSFRUUApzaXRlIHNlbmRzIHRvIHlvdS4gVGhlIGNvb2tpZXMgY291bGQgdGhlbiBiZSByZWFkIGluIGEgc2Vjb25kIGN1cmwgaW52b2tlIGJ5CnVzaW5nIHRoZSAtYi8tLWNvb2tpZSBvcHRpb24hCi5JUCAiLWUvLS1yZWZlcmVyIDxVUkw+IgooSFRUUCkKU2VuZHMgdGhlICJSZWZlcmVyIFBhZ2UiIGluZm9ybWF0aW9uIHRvIHRoZSBIVFRQIHNlcnZlci4gU29tZSBiYWRseQpkb25lIENHSXMgZmFpbCBpZiBpdCdzIG5vdCBzZXQuIFRoaXMgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIC1ILy0taGVhZGVyCmZsYWcgb2YgY291cnNlLgouSVAgIi1FLy0tY2VydCA8Y2VydGlmaWNhdGVbOnBhc3N3b3JkXT4iCihIVFRQUykKVGVsbHMgY3VybCB0byB1c2UgdGhlIHNwZWNpZmllZCBjZXJ0aWZpY2F0ZSBmaWxlIHdoZW4gZ2V0dGluZyBhIGZpbGUKd2l0aCBIVFRQUy4gVGhlIGNlcnRpZmljYXRlIG11c3QgYmUgaW4gUEVNIGZvcm1hdC4KSWYgdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlzbid0IHNwZWNpZmllZCwgaXQgd2lsbCBiZSBxdWVyaWVkIGZvciBvbgp0aGUgdGVybWluYWwuIE5vdGUgdGhhdCB0aGlzIGNlcnRpZmljYXRlIGlzIHRoZSBwcml2YXRlIGtleSBhbmQgdGhlIHByaXZhdGUKY2VydGlmaWNhdGUgY29uY2F0ZW5hdGVkIQouSVAgIi1mLy0tZmFpbCIKKEhUVFApCkZhaWwgc2lsZW50bHkgKG5vIG91dHB1dCBhdCBhbGwpIG9uIHNlcnZlciBlcnJvcnMuIFRoaXMgaXMgbW9zdGx5IGRvbmUKbGlrZSB0aGlzIHRvIGJldHRlciBlbmFibGUgc2NyaXB0cyBldGMgdG8gYmV0dGVyIGRlYWwgd2l0aCBmYWlsZWQKYXR0ZW1wdHMuIEluIG5vcm1hbCBjYXNlcyB3aGVuIGEgSFRUUCBzZXJ2ZXIgZmFpbHMgdG8gZGVsaXZlciBhCmRvY3VtZW50LCBpdCByZXR1cm5zIGEgSFRNTCBkb2N1bWVudCBzdGF0aW5nIHNvICh3aGljaCBvZnRlbiBhbHNvCmRlc2NyaWJlcyB3aHkgYW5kIG1vcmUpLiBUaGlzIGZsYWcgd2lsbCBwcmV2ZW50IGN1cmwgZnJvbQpvdXRwdXR0aW5nIHRoYXQgYW5kIGZhaWwgc2lsZW50bHkgaW5zdGVhZC4KLklQICItRi8tLWZvcm0gPG5hbWU9Y29udGVudD4iCihIVFRQKQpUaGlzIGxldHMgY3VybCBlbXVsYXRlIGEgZmlsbGVkIGluIGZvcm0gaW4gd2hpY2ggYSB1c2VyIGhhcyBwcmVzc2VkCnRoZSBzdWJtaXQgYnV0dG9uLiBUaGlzIGNhdXNlcyBjdXJsIHRvIFBPU1QgZGF0YSB1c2luZyB0aGUKY29udGVudC10eXBlIG11bHRpcGFydC9mb3JtLWRhdGEgYWNjb3JkaW5nIHRvIFJGQzE4NjcuIFRoaXMgZW5hYmxlcwp1cGxvYWRpbmcgb2YgYmluYXJ5IGZpbGVzIGV0Yy4gVG8gZm9yY2UgdGhlICdjb250ZW50JyBwYXJ0IHRvIGJlCnJlYWQgZnJvbSBhIGZpbGUsIHByZWZpeCB0aGUgZmlsZSBuYW1lIHdpdGggYW4gQCBzaWduLiBFeGFtcGxlLCB0bwpzZW5kIHlvdXIgcGFzc3dvcmQgZmlsZSB0byB0aGUgc2VydmVyLCB3aGVyZSAncGFzc3dvcmQnIGlzIHRoZQpuYW1lIG9mIHRoZSBmb3JtLWZpZWxkIHRvIHdoaWNoIC9ldGMvcGFzc3dkIHdpbGwgYmUgdGhlIGlucHV0OgoKLkIgY3VybAotRiBwYXNzd29yZD1AL2V0Yy9wYXNzd2Qgd3d3Lm15cGFzc3dvcmRzLmNvbQoKVG8gcmVhZCB0aGUgZmlsZSdzIGNvbnRlbnQgZnJvbSBzdGRpbiBpbnN0ZWQgb2YgYSBmaWxlLCB1c2UgLSB3aGVyZSB0aGUgZmlsZQpuYW1lIHNob3VsZCd2ZSBiZWVuLgouSVAgIi1oLy0taGVscCIKVXNhZ2UgaGVscC4KLklQICItSC8tLWhlYWRlciA8aGVhZGVyPiIKKEhUVFApCkV4dHJhIGhlYWRlciB0byB1c2Ugd2hlbiBnZXR0aW5nIGEgd2ViIHBhZ2UuIFlvdSBtYXkgc3BlY2lmeSBhbnkgbnVtYmVyIG9mCmV4dHJhIGhlYWRlcnMuIE5vdGUgdGhhdCBpZiB5b3Ugc2hvdWxkIGFkZCBhIGN1c3RvbSBoZWFkZXIgdGhhdCBoYXMgdGhlIHNhbWUKbmFtZSBhcyBvbmUgb2YgdGhlIGludGVybmFsIG9uZXMgY3VybCB3b3VsZCB1c2UsIHlvdXIgZXh0ZXJuYWxseSBzZXQgaGVhZGVyCndpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBpbnRlcm5hbCBvbmUuIFRoaXMgYWxsb3dzIHlvdSB0byBtYWtlIGV2ZW4KdHJpY2tpZXIgc3R1ZmYgdGhhbiBjdXJsIHdvdWxkIG5vcm1hbGx5IGRvLiBZb3Ugc2hvdWxkIG5vdCByZXBsYWNlIGludGVybmFsbHkKc2V0IGhlYWRlcnMgd2l0aG91dCBrbm93aW5nIHBlcmZlY3RseSB3ZWxsIHdoYXQgeW91J3JlIGRvaW5nLgouSVAgIi1pLy0taW5jbHVkZSIKKEhUVFApCkluY2x1ZGUgdGhlIEhUVFAtaGVhZGVyIGluIHRoZSBvdXRwdXQuIFRoZSBIVFRQLWhlYWRlciBpbmNsdWRlcyB0aGluZ3MKbGlrZSBzZXJ2ZXItbmFtZSwgZGF0ZSBvZiB0aGUgZG9jdW1lbnQsIEhUVFAtdmVyc2lvbiBhbmQgbW9yZS4uLgouSVAgIi1JLy0taGVhZCIKKEhUVFAvRlRQKQpGZXRjaCB0aGUgSFRUUC1oZWFkZXIgb25seSEgSFRUUC1zZXJ2ZXJzIGZlYXR1cmUgdGhlIGNvbW1hbmQgSEVBRAp3aGljaCB0aGlzIHVzZXMgdG8gZ2V0IG5vdGhpbmcgYnV0IHRoZSBoZWFkZXIgb2YgYSBkb2N1bWVudC4gV2hlbiB1c2VkCm9uIGEgRlRQIGZpbGUsIGN1cmwgZGlzcGxheXMgdGhlIGZpbGUgc2l6ZSBvbmx5LgouSVAgIi1LLy0tY29uZmlnIDxjb25maWcgZmlsZT4iClNwZWNpZnkgd2hpY2ggY29uZmlnIGZpbGUgdG8gcmVhZCBjdXJsIGFyZ3VtZW50cyBmcm9tLiBUaGUgY29uZmlnCmZpbGUgaXMgYSB0ZXh0IGZpbGUgaW4gd2hpY2ggY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBjYW4gYmUgd3JpdHRlbgp3aGljaCB0aGVuIHdpbGwgYmUgdXNlZCBhcyBpZiB0aGV5IHdlcmUgd3JpdHRlbiBvbiB0aGUgYWN0dWFsIGNvbW1hbmQKbGluZS4gSWYgdGhlIGZpcnN0IGNvbHVtbiBvZiBhIGNvbmZpZyBsaW5lIGlzIGEgJyMnIGNoYXJhY3RlciwgdGhlCnJlc3Qgb2YgdGhlIGxpbmUgd2lsbCBiZSB0cmVhdGVkIGFzIGEgY29tbWVudC4KClNwZWNpZnkgdGhlIGZpbGVuYW1lIGFzICctJyB0byBtYWtlIGN1cmwgcmVhZCB0aGUgZmlsZSBmcm9tIHN0ZGluLgouSVAgIi1sLy0tbGlzdC1vbmx5IgooRlRQKQpXaGVuIGxpc3RpbmcgYW4gRlRQIGRpcmVjdG9yeSwgdGhpcyBzd2l0Y2ggZm9yY2VzIGEgbmFtZS1vbmx5IHZpZXcuCkVzcGVjaWFsbHkgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1hY2hpbmUtcGFyc2UgdGhlIGNvbnRlbnRzIG9mIGFuIEZUUApkaXJlY3Rvcnkgc2luY2UgdGhlIG5vcm1hbCBkaXJlY3RvcnkgdmlldyBkb2Vzbid0IHVzZSBhIHN0YW5kYXJkIGxvb2sKb3IgZm9ybWF0LgouSVAgIi1MLy0tbG9jYXRpb24iCihIVFRQL0hUVFBTKQpJZiB0aGUgc2VydmVyIHJlcG9ydHMgdGhhdCB0aGUgcmVxdWVzdGVkIHBhZ2UgaGFzIGEgZGlmZmVyZW50IGxvY2F0aW9uCihpbmRpY2F0ZWQgd2l0aCB0aGUgaGVhZGVyIGxpbmUgTG9jYXRpb246KSB0aGlzIGZsYWcgd2lsbCBsZXQgY3VybAphdHRlbXB0IHRvIHJlYXR0ZW1wdCB0aGUgZ2V0IG9uIHRoZSBuZXcgcGxhY2UuIElmIHVzZWQgdG9nZXRoZXIgd2l0aAotaSBvciAtSSwgaGVhZGVycyBmcm9tIGFsbCByZXF1ZXN0ZWQgcGFnZXMgd2lsbCBiZSBzaG93bi4KLklQICItbS8tLW1heC10aW1lIDxzZWNvbmRzPiIKTWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCB5b3UgYWxsb3cgdGhlIHdob2xlIG9wZXJhdGlvbiB0byB0YWtlLgpUaGlzIGlzIHVzZWZ1bCBmb3IgcHJldmVudGluZyB5b3VyIGJhdGNoIGpvYnMgZnJvbSBoYW5naW5nIGZvciBob3VycwpkdWUgdG8gc2xvdyBuZXR3b3JrcyBvciBsaW5rcyBnb2luZyBkb3duLgpUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBpbiB3aW4zMiBzeXN0ZW1zLgouSVAgIi1NLy0tbWFudWFsIgpNYW51YWwuIERpc3BsYXkgdGhlIGh1Z2UgaGVscCB0ZXh0LgouSVAgIi1uLy0tbmV0cmMiCk1ha2VzIGN1cmwgc2NhbiB0aGUKLkkgLm5ldHJjCmZpbGUgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBmb3IgbG9naW4gbmFtZSBhbmQgcGFzc3dvcmQuIFRoaXMgaXMKdHlwaWNhbGx5IHVzZWQgZm9yIGZ0cCBvbiB1bml4LiBJZiB1c2VkIHdpdGggaHR0cCwgY3VybCB3aWxsIGVuYWJsZSB1c2VyCmF1dGhlbnRpY2F0aW9uLiBTZWUKLkJSIG5ldHJjKDUpCmZvciBkZXRhaWxzIG9uIHRoZSBmaWxlIGZvcm1hdC4gQ3VybCB3aWxsIG5vdCBjb21wbGFpbiBpZiB0aGF0IGZpbGUKaGFzbid0IHRoZSByaWdodCBwZXJtaXNzaW9ucyAoaXQgc2hvdWxkIG5vdCBiZSB3b3JsZCBub3IgZ3JvdXAKcmVhZGFibGUpLiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgIkhPTUUiIGlzIHVzZWQgdG8gZmluZCB0aGUgaG9tZQpkaXJlY3RvcnkuCgpBIHF1aWNrIGFuZCB2ZXJ5IHNpbXBsZSBleGFtcGxlIG9mIGhvdyB0byBzZXR1cCBhCi5JIC5uZXRyYwp0byBhbGxvdyBjdXJsIHRvIGZ0cCB0byB0aGUgbWFjaGluZSBob3N0LmRvbWFpbi5jb20gd2l0aCB1c2VyIG5hbWUKJ215c2VsZicgYW5kIHBhc3N3b3JkICdzZWNyZXQnIHNob3VsZCBsb29rIHNpbWlsYXIgdG86CgouQiAibWFjaGluZSBob3N0LmRvbWFpbi5jb20gdXNlciBteXNlbGYgcGFzc3dvcmQgc2VjcmV0IgouSVAgIi1OLy0tbm8tYnVmZmVyIgpEaXNhYmxlcyB0aGUgYnVmZmVyaW5nIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiBJbiBub3JtYWwgd29yayBzaXR1YXRpb25zLCBjdXJsCndpbGwgdXNlIGEgc3RhbmRhcmQgYnVmZmVyZWQgb3V0cHV0IHN0cmVhbSB0aGF0IHdpbGwgaGF2ZSB0aGUgZWZmZWN0IHRoYXQgaXQKd2lsbCBvdXRwdXQgdGhlIGRhdGEgaW4gY2h1bmtzLCBub3QgbmVjZXNzYXJpbHkgZXhhY3RseSB3aGVuIHRoZSBkYXRhIGFycml2ZXMuClVzaW5nIHRoaXMgb3B0aW9uIHdpbGwgZGlzYWJsZSB0aGF0IGJ1ZmZlcmluZy4KLklQICItby8tLW91dHB1dCA8ZmlsZT4iCldyaXRlIG91dHB1dCB0byA8ZmlsZT4gaW5zdGVhZCBvZiBzdGRvdXQuIElmIHlvdSBhcmUgdXNpbmcge30gb3IgW10gdG8gZmV0Y2gKbXVsdGlwbGUgZG9jdW1lbnRzLCB5b3UgY2FuIHVzZSAnIycgZm9sbG93ZWQgYnkgYSBudW1iZXIgaW4gdGhlIDxmaWxlPgpzcGVjaWZpZXIuIFRoYXQgdmFyaWFibGUgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBjdXJyZW50IHN0cmluZyBmb3IgdGhlIFVSTApiZWluZyBmZXRjaGVkLiBMaWtlIGluOgoKICBjdXJsIGh0dHA6Ly97b25lLHR3b30uc2l0ZS5jb20gLW8gImZpbGVfIzEudHh0IgoKb3IgdXNlIHNldmVyYWwgdmFyaWFibGVzIGxpa2U6CgogIGN1cmwgaHR0cDovL3tzaXRlLGhvc3R9Lmhvc3RbMS01XS5jb20gLW8gIiMxXyMyIgouSVAgIi1PLy0tcmVtb3RlLW5hbWUiCldyaXRlIG91dHB1dCB0byBhIGxvY2FsIGZpbGUgbmFtZWQgbGlrZSB0aGUgcmVtb3RlIGZpbGUgd2UgZ2V0LiAoT25seQp0aGUgZmlsZSBwYXJ0IG9mIHRoZSByZW1vdGUgZmlsZSBpcyB1c2VkLCB0aGUgcGF0aCBpcyBjdXQgb2ZmLikKLklQICItUC8tLWZ0cHBvcnQgPGFkZHJlc3M+IgooRlRQKQpSZXZlcnNlcyB0aGUgaW5pdGlhdG9yL2xpc3RlbmVyIHJvbGVzIHdoZW4gY29ubmVjdGluZyB3aXRoIGZ0cC4gVGhpcwpzd2l0Y2ggbWFrZXMgQ3VybCB1c2UgdGhlIFBPUlQgY29tbWFuZCBpbnN0ZWFkIG9mIFBBU1YuIEluCnByYWN0aWNlLCBQT1JUIHRlbGxzIHRoZSBzZXJ2ZXIgdG8gY29ubmVjdCB0byB0aGUgY2xpZW50J3Mgc3BlY2lmaWVkCmFkZHJlc3MgYW5kIHBvcnQsIHdoaWxlIFBBU1YgYXNrcyB0aGUgc2VydmVyIGZvciBhbiBpcCBhZGRyZXNzIGFuZApwb3J0IHRvIGNvbm5lY3QgdG8uIDxhZGRyZXNzPiBzaG91bGQgYmUgb25lIG9mOgouUlMKLlRQIDEyCi5CIGludGVyZmFjZQppLmUgImV0aDAiIHRvIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlJ3MgSVAgYWRkcmVzcyB5b3Ugd2FudCB0byB1c2UgIChVbml4IG9ubHkpCi5UUAouQiAiSVAgYWRkcmVzcyIKaS5lICIxOTIuMTY4LjEwLjEiIHRvIHNwZWNpZnkgZXhhY3QgSVAgbnVtYmVyCi5UUAouQiAiaG9zdCBuYW1lIgppLmUgIm15Lmhvc3QuZG9tYWluIiB0byBzcGVjaWZ5IG1hY2hpbmUKLlRQCi5CICItIgooYW55IHNpbmdsZS1sZXR0ZXIgc3RyaW5nKSB0byBtYWtlIGl0IHBpY2sgdGhlIG1hY2hpbmUncyBkZWZhdWx0Ci5SRQouSVAgIi1xIgpJZiB1c2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlCi5JICRIT01FLy5jdXJscmMKZmlsZSB3aWxsIG5vdCBiZSByZWFkIGFuZCB1c2VkIGFzIGEgY29uZmlnIGZpbGUuCi5JUCAiLVEvLS1xdW90ZSA8Y29tYW5kPiIKKEZUUCkgU2VuZCBhbiBhcmJpdHJhcnkgY29tbWFuZCB0byB0aGUgcmVtb3RlIEZUUCBzZXJ2ZXIsIGJ5IHVzaW5nIHRoZSBRVU9URQpjb21tYW5kIG9mIHRoZSBzZXJ2ZXIuIE5vdCBhbGwgc2VydmVycyBzdXBwb3J0IHRoaXMgY29tbWFuZCwgYW5kIHRoZSBzZXQgb2YKUVVPVEUgY29tbWFuZHMgYXJlIHNlcnZlciBzcGVjaWZpYyEgUXVvdGUgY29tbWFuZHMgYXJlIHNlbnQgQkVGT1JFIHRoZQp0cmFuc2ZlciBpcyB0YWtpbmcgcGxhY2UuIFRvIG1ha2UgY29tbWFuZHMgdGFrZSBwbGFjZSBhZnRlciBhIHN1Y2Nlc3NmdWwKdHJhbnNmZXIsIHByZWZpeCB0aGVtIHdpdGggYSBkYXNoICctJy4gWW91IG1heSBzcGVjaWZ5IGFueSBhbW91bnQgb2YgY29tbWFuZHMKdG8gYmUgcnVuIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHRyYW5zZmVyLiBJZiB0aGUgc2VydmVyIHJldHVybnMgZmFpbHVyZSBmb3Igb25lCm9mIHRoZSBjb21tYW5kcywgdGhlIGVudGlyZSBvcGVyYXRpb24gd2lsbCBiZSBhYm9ydGVkLgouSVAgIi1yLy0tcmFuZ2UgPHJhbmdlPiIKKEhUVFAvRlRQKQpSZXRyaWV2ZSBhIGJ5dGUgcmFuZ2UgKGkuZSBhIHBhcnRpYWwgZG9jdW1lbnQpIGZyb20gYSBIVFRQLzEuMSBvciBGVFAKc2VydmVyLiBSYW5nZXMgY2FuIGJlIHNwZWNpZmllZCBpbiBhIG51bWJlciBvZiB3YXlzLgouUlMKLlRQIDEwCi5CIDAtNDk5CnNwZWNpZmllcyB0aGUgZmlyc3QgNTAwIGJ5dGVzCi5UUAouQiA1MDAtOTk5CnNwZWNpZmllcyB0aGUgc2Vjb25kIDUwMCBieXRlcwouVFAKLkIgLTUwMApzcGVjaWZpZXMgdGhlIGxhc3QgNTAwIGJ5dGVzCi5UUAouQiA5NTAwCnNwZWNpZmllcyB0aGUgYnl0ZXMgZnJvbSBvZmZzZXQgOTUwMCBhbmQgZm9yd2FyZAouVFAKLkIgMC0wLC0xCnNwZWNpZmllcyB0aGUgZmlyc3QgYW5kIGxhc3QgYnl0ZSBvbmx5KCopKEgpCi5UUAouQiA1MDAtNzAwLDYwMC03OTkKc3BlY2lmaWVzIDMwMCBieXRlcyBmcm9tIG9mZnNldCA1MDAoSCkKLlRQCi5CIDEwMC0xOTksNTAwLTU5OQpzcGVjaWZpZXMgdHdvIHNlcGFyYXRlIDEwMCBieXRlcyByYW5nZXMoKikoSCkKLlJFCgooKikgPSBOT1RFIHRoYXQgdGhpcyB3aWxsIGNhdXNlIHRoZSBzZXJ2ZXIgdG8gcmVwbHkgd2l0aCBhIG11bHRpcGFydApyZXNwb25zZSEKCllvdSBzaG91bGQgYWxzbyBiZSBhd2FyZSB0aGF0IG1hbnkgSFRUUC8xLjEgc2VydmVycyBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUKZW5hYmxlZCwgc28gdGhhdCB3aGVuIHlvdSBhdHRlbXB0IHRvIGdldCBhIHJhbmdlLCB5b3UnbGwgaW5zdGVhZCBnZXQgdGhlIHdob2xlCmRvY3VtZW50LgoKRlRQIHJhbmdlIGRvd25sb2FkcyBvbmx5IHN1cHBvcnQgdGhlIHNpbXBsZSBzeW50YXggJ3N0YXJ0LXN0b3AnIChvcHRpb25hbGx5CndpdGggb25lIG9mIHRoZSBudW1iZXJzIG9taXR0ZWQpLiBJdCBkZXBlbmRzIG9uIHRoZSBub24tUkZDIGNvbW1hbmQgU0laRS4KLklQICItcy8tLXNpbGVudCIKU2lsZW50IG1vZGUuIERvbid0IHNob3cgcHJvZ3Jlc3MgbWV0ZXIgb3IgZXJyb3IgbWVzc2FnZXMuICBNYWtlcwpDdXJsIG11dGUuCi5JUCAiLVMvLS1zaG93LWVycm9yIgpXaGVuIHVzZWQgd2l0aCAtcyBpdCBtYWtlcyBjdXJsIHNob3cgZXJyb3IgbWVzc2FnZSBpZiBpdCBmYWlscy4KLklQICItdC8tLXVwbG9hZCIKVHJhbnNmZXIgdGhlIHN0ZGluIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiBDdXJsIHdpbGwgcmVhZApldmVyeXRoaW5nIGZyb20gc3RkaW4gdW50aWwgRU9GIGFuZCBzdG9yZSB3aXRoIHRoZSBzdXBwbGllZCBuYW1lLiBJZgp0aGlzIGlzIHVzZWQgb24gYSBodHRwKHMpIHNlcnZlciwgdGhlIFBVVCBjb21tYW5kIHdpbGwgYmUgdXNlZC4KLklQICItVC8tLXVwbG9hZC1maWxlIDxmaWxlPiIKTGlrZSAtdCwgYnV0IHRoaXMgdHJhbnNmZXJzIHRoZSBzcGVjaWZpZWQgbG9jYWwgZmlsZS4gSWYgdGhlcmUgaXMgbm8KZmlsZSBwYXJ0IGluIHRoZSBzcGVjaWZpZWQgVVJMLCBDdXJsIHdpbGwgYXBwZW5kIHRoZSBsb2NhbCBmaWxlCm5hbWUuIE5PVEUgdGhhdCB5b3UgbXVzdCB1c2UgYSB0cmFpbGluZyAvIG9uIHRoZSBsYXN0IGRpcmVjdG9yeSB0bwpyZWFsbHkgcHJvdmUgdG8gQ3VybCB0aGF0IHRoZXJlIGlzIG5vIGZpbGUgbmFtZSBvciBjdXJsIHdpbGwKdGhpbmsgdGhhdCB5b3VyIGxhc3QgZGlyZWN0b3J5IG5hbWUgaXMgdGhlIHJlbW90ZSBmaWxlIG5hbWUgdG8KdXNlLiBUaGF0IHdpbGwgbW9zdCBsaWtlbHkgY2F1c2UgdGhlIHVwbG9hZCBvcGVyYXRpb24gdG8gZmFpbC4gSWYKdGhpcyBpcyB1c2VkIG9uIGEgaHR0cChzKSBzZXJ2ZXIsIHRoZSBQVVQgY29tbWFuZCB3aWxsIGJlIHVzZWQuCi5JUCAiLXUvLS11c2VyIDx1c2VyOnBhc3N3b3JkPiIKU3BlY2lmeSB1c2VyIGFuZCBwYXNzd29yZCB0byB1c2Ugd2hlbiBmZXRjaGluZy4gU2VlIFJFQURNRS5jdXJsIGZvciBkZXRhaWxlZApleGFtcGxlcyBvZiBob3cgdG8gdXNlIHRoaXMuIElmIG5vIHBhc3N3b3JkIGlzIHNwZWNpZmllZCwgY3VybCB3aWxsCmFzayBmb3IgaXQgaW50ZXJhY3RpdmVseS4KLklQICItVS8tLXByb3h5LXVzZXIgPHVzZXI6cGFzc3dvcmQ+IgpTcGVjaWZ5IHVzZXIgYW5kIHBhc3N3b3JkIHRvIHVzZSBmb3IgUHJveHkgYXV0aGVudGljYXRpb24uIElmIG5vCnBhc3N3b3JkIGlzIHNwZWNpZmllZCwgY3VybCB3aWxsIGFzayBmb3IgaXQgaW50ZXJhY3RpdmVseS4KLklQICItdi8tLXZlcmJvc2UiCk1ha2VzIHRoZSBmZXRjaGluZyBtb3JlIHZlcmJvc2UvdGFsa2F0aXZlLiBNb3N0bHkgdXNhYmxlIGZvcgpkZWJ1Z2dpbmcuIExpbmVzIHN0YXJ0aW5nIHdpdGggJz4nIG1lYW5zIGRhdGEgc2VudCBieSBjdXJsLCAnPCcKbWVhbnMgZGF0YSByZWNlaXZlZCBieSBjdXJsIHRoYXQgaXMgaGlkZGVuIGluIG5vcm1hbCBjYXNlcyBhbmQgbGluZXMKc3RhcnRpbmcgd2l0aCAnKicgbWVhbnMgYWRkaXRpb25hbCBpbmZvIHByb3ZpZGVkIGJ5IGN1cmwuCi5JUCAiLVYvLS12ZXJzaW9uIgpEaXNwbGF5cyB0aGUgZnVsbCB2ZXJzaW9uIG9mIGN1cmwsIGxpYmN1cmwgYW5kIG90aGVyIDNyZCBwYXJ0eSBsaWJyYXJpZXMKbGlua2VkIHdpdGggdGhlIGV4ZWN1dGFibGUuCi5JUCAiLXcvLS13cml0ZS1vdXQgPGZvcm1hdD4iCkRlZmluZXMgd2hhdCB0byBkaXNwbGF5IGFmdGVyIGEgY29tcGxldGVkIGFuZCBzdWNjZXNzZnVsIG9wZXJhdGlvbi4gVGhlIGZvcm1hdAppcyBhIHN0cmluZyB0aGF0IG1heSBjb250YWluIHBsYWluIHRleHQgbWl4ZWQgd2l0aCBhbnkgbnVtYmVyIG9mIHZhcmlhYmxlcy4gVGhlCnN0cmluZyBjYW4gYmUgc3BlY2lmaWVkIGFzICJzdHJpbmciLCB0byBnZXQgcmVhZCBmcm9tIGEgcGFydGljdWxhciBmaWxlIHlvdQpzcGVjaWZ5IGl0ICJAZmlsZW5hbWUiIGFuZCB0byB0ZWxsIGN1cmwgdG8gcmVhZCB0aGUgZm9ybWF0IGZyb20gc3RkaW4geW91CndyaXRlICJALSIuCgpUaGUgdmFyaWFibGVzIHByZXNlbnQgaW4gdGhlIG91dHB1dCBmb3JtYXQgd2lsbCBiZSBzdWJzdGl0dXRlZCBieSB0aGUgdmFsdWUgb3IKdGV4dCB0aGF0IGN1cmwgdGhpbmtzIGZpdCwgYXMgZGVzY3JpYmVkIGJlbG93LiBBbGwgdmFyaWFibGVzIGFyZSBzcGVjaWZpZWQKbGlrZSAle3ZhcmlhYmxlX25hbWV9IGFuZCB0byBvdXRwdXQgYSBub3JtYWwgJSB5b3UganVzdCB3cml0ZSB0aGVtIGxpa2UKJSUuIFlvdSBjYW4gb3V0cHV0IGEgbmV3bGluZSBieSB1c2luZyBcXG4sIGEgY2FycmlnZSByZXR1cm4gd2l0aCBcXHIgYW5kIGEgdGFiCnNwYWNlIHdpdGggXFx0LgoKLkIgTk9URToKVGhlICUtbGV0dGVyIGlzIGEgc3BlY2lhbCBsZXR0ZXIgaW4gdGhlIHdpbjMyLWVudmlyb25tZW50LCB3aGVyZSBhbGwKb2NjdXJyZW5jZXMgb2YgJSBtdXN0IGJlIGRvdWJsZWQgd2hlbiB1c2luZyB0aGlzIG9wdGlvbi4KCkF2YWlsYWJsZSB2YXJpYWJsZXMgYXJlIGF0IHRoaXMgcG9pbnQ6Ci5SUwouVFAgMTUKLkIgdXJsX2VmZmVjdGl2ZQpUaGUgVVJMIHRoYXQgd2FzIGZldGNoZWQgbGFzdC4gVGhpcyBpcyBtb3N0bHkgbWVhbmluZ2Z1bCBpZiB5b3UndmUgdG9sZCBjdXJsCnRvIGZvbGxvdyBsb2NhdGlvbjogaGVhZGVycy4KLlRQCi5CIGh0dHBfY29kZQpUaGUgbnVtZXJpY2FsIGNvZGUgdGhhdCB3YXMgZm91bmQgaW4gdGhlIGxhc3QgcmV0cmlldmVkIEhUVFAoUykgcGFnZS4KLlRQCi5CIHRpbWVfdG90YWwKVGhlIHRvdGFsIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhlIGZ1bGwgb3BlcmF0aW9uIGxhc3RlZC4gVGhlIHRpbWUgd2lsbCBiZQpkaXNwbGF5ZWQgd2l0aCBtaWxsaXNlY29uZCByZXNvbHV0aW9uLgouVFAKLkIgdGltZV9uYW1lbG9va3VwClRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBuYW1lIHJlc29sdmluZyB3YXMKY29tcGxldGVkLgouVFAKLkIgdGltZV9jb25uZWN0ClRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBjb25uZWN0IHRvIHRoZSByZW1vdGUKaG9zdCAob3IgcHJveHkpIHdhcyBjb21wbGV0ZWQuCi5UUAouQiB0aW1lX3ByZXRyYW5zZmVyClRoZSB0aW1lLCBpbiBzZWNvbmRzLCBpdCB0b29rIGZyb20gdGhlIHN0YXJ0IHVudGlsIHRoZSBmaWxlIHRyYW5zZmVyIGlzIGp1c3QKYWJvdXQgdG8gYmVnaW4uIFRoaXMgaW5jbHVkZXMgYWxsIHByZS10cmFuc2ZlciBjb21tYW5kcyBhbmQgbmVnb3RpYXRpb25zIHRoYXQKYXJlIHNwZWNpZmljIHRvIHRoZSBwYXJ0aWN1bGFyIHByb3RvY29sKHMpIGludm9sdmVkLgouVFAKLkIgc2l6ZV9kb3dubG9hZApUaGUgdG90YWwgYW1vdW50IG9mIGJ5dGVzIHRoYXQgd2VyZSBkb3dubG9hZGVkLgouVFAKLkIgc2l6ZV91cGxvYWQKVGhlIHRvdGFsIGFtb3VudCBvZiBieXRlcyB0aGF0IHdlcmUgdXBsb2FkZWQuCi5UUAouQiBzcGVlZF9kb3dubG9hZApUaGUgYXZlcmFnZSBkb3dubG9hZCBzcGVlZCB0aGF0IGN1cmwgbWVhc3VyZWQgZm9yIHRoZSBjb21wbGV0ZSBkb3dubG9hZC4KLlRQCi5CIHNwZWVkX3VwbG9hZApUaGUgYXZlcmFnZSB1cGxvYWQgc3BlZWQgdGhhdCBjdXJsIG1lYXN1cmVkIGZvciB0aGUgY29tcGxldGUgZG93bmxvYWQuCi5SRQouSVAgIi14Ly0tcHJveHkgPHByb3h5aG9zdFs6cG9ydF0+IgpVc2Ugc3BlY2lmaWVkIHByb3h5LiBJZiB0aGUgcG9ydCBudW1iZXIgaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgYXNzdW1lZCBhdApwb3J0IDEwODAuCi5JUCAiLVgvLS1yZXF1ZXN0IDxjb21tYW5kPiIKKEhUVFApClNwZWNpZmllcyBhIGN1c3RvbSByZXF1ZXN0IHRvIHVzZSB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgSFRUUCBzZXJ2ZXIuClRoZSBzcGVjaWZpZWQgcmVxdWVzdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgR0VULiBSZWFkIHRoZQpIVFRQIDEuMSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzIGFuZCBleHBsYW5hdGlvbnMuCgooRlRQKQpTcGVjaWZpZXMgYSBjdXN0b20gRlRQIGNvbW1hbmQgdG8gdXNlIGluc3RlYWQgb2YgTElTVCB3aGVuIGRvaW5nIGZpbGUgbGlzdHMKd2l0aCBmdHAuCi5JUCAiLXkvLS1zcGVlZC10aW1lIDx0aW1lPiIKSWYgYSBkb3dubG9hZCBpcyBzbG93ZXIgdGhhbiBzcGVlZC1saW1pdCBieXRlcyBwZXIgc2Vjb25kIGR1cmluZyBhIHNwZWVkLXRpbWUKcGVyaW9kLCB0aGUgZG93bmxvYWQgZ2V0cyBhYm9ydGVkLiBJZiBzcGVlZC10aW1lIGlzIHVzZWQsIHRoZSBkZWZhdWx0CnNwZWVkLWxpbWl0IHdpbGwgYmUgMSB1bmxlc3Mgc2V0IHdpdGggLXkuCi5JUCAiLVkvLS1zcGVlZC1saW1pdCA8c3BlZWQ+IgpJZiBhIGRvd25sb2FkIGlzIHNsb3dlciB0aGFuIHRoaXMgZ2l2ZW4gc3BlZWQsIGluIGJ5dGVzIHBlciBzZWNvbmQsIGZvcgpzcGVlZC10aW1lIHNlY29uZHMgaXQgZ2V0cyBhYm9ydGVkLiBzcGVlZC10aW1lIGlzIHNldCB3aXRoIC1ZIGFuZCBpcyAzMCBpZgpub3Qgc2V0LgouSVAgIi16Ly0tdGltZS1jb25kIDxkYXRlIGV4cHJlc3Npb24+IgooSFRUUCkKUmVxdWVzdCB0byBnZXQgYSBmaWxlIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgbGF0ZXIgdGhhbiB0aGUgZ2l2ZW4gdGltZSBhbmQKZGF0ZSwgb3Igb25lIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgYmVmb3JlIHRoYXQgdGltZS4gVGhlIGRhdGUgZXhwcmVzc2lvbiBjYW4KYmUgYWxsIHNvcnRzIG9mIGRhdGUgc3RyaW5ncyBvciBpZiBpdCBkb2Vzbid0IG1hdGNoIGFueSBpbnRlcm5hbCBvbmVzLCBpdAp0cmllcyB0byBnZXQgdGhlIHRpbWUgZnJvbSBhIGdpdmVuIGZpbGUgbmFtZSBpbnN0ZWFkISBTZWUgdGhlCi5CUiAiR05VIGRhdGUoMSkiCm1hbiBwYWdlIGZvciBkYXRlIGV4cHJlc3Npb24gZGV0YWlscy4KClN0YXJ0IHRoZSBkYXRlIGV4cHJlc3Npb24gd2l0aCBhIGRhc2ggKC0pIHRvIG1ha2UgaXQgcmVxdWVzdCBmb3IgYSBkb2N1bWVudAp0aGF0IGlzIG9sZGVyIHRoYW4gdGhlIGdpdmVuIGRhdGUvdGltZSwgZGVmYXVsdCBpcyBhIGRvY3VtZW50IHRoYXQgaXMgbmV3ZXIKdGhhbiB0aGUgc3BlY2lmaWVkIGRhdGUvdGltZS4KLklQICItMy8tLXNzbHYzIgooSFRUUFMpCkZvcmNlcyBjdXJsIHRvIHVzZSBTU0wgdmVyc2lvbiAzIHdoZW4gbmVnb3RpYXRpbmcgd2l0aCBhIHJlbW90ZSBTU0wgc2VydmVyLgouSVAgIi0yLy0tc3NsdjIiCihIVFRQUykKRm9yY2VzIGN1cmwgdG8gdXNlIFNTTCB2ZXJzaW9uIDIgd2hlbiBuZWdvdGlhdGluZyB3aXRoIGEgcmVtb3RlIFNTTCBzZXJ2ZXIuCi5JUCAiLSMvLS1wcm9ncmVzcy1iYXIiCk1ha2UgY3VybCBkaXNwbGF5IHByb2dyZXNzIGluZm9ybWF0aW9uIGFzIGEgcHJvZ3Jlc3MgYmFyIGluc3RlYWQgb2YgdGhlCmRlZmF1bHQgc3RhdGlzdGljcy4KLklQICItLWNybGYiCihGVFApIENvbnZlcnQgTEYgdG8gQ1JMRiBpbiB1cGxvYWQuIFVzZWZ1bCBmb3IgTVZTIChPUy8zOTApLgouSVAgIi0tc3RkZXJyIDxmaWxlPiIKUmVkaXJlY3QgYWxsIHdyaXRlcyB0byBzdGRlcnIgdG8gdGhlIHNwZWNpZmllZCBmaWxlIGluc3RlYWQuIElmIHRoZSBmaWxlIG5hbWUKaXMgYSBwbGFpbiAnLScsIGl0IGlzIGluc3RlYWQgd3JpdHRlbiB0byBzdGRvdXQuIFRoaXMgb3B0aW9uIGhhcyBubyBwb2ludCB3aGVuCnlvdSdyZSB1c2luZyBhIHNoZWxsIHdpdGggZGVjZW50IHJlZGlyZWN0aW5nIGNhcGFiaWxpdGllcy4KLlNIIEZJTEVTCi5JIH4vLmN1cmxyYwouUlMKRGVmYXVsdCBjb25maWcgZmlsZS4KCi5TSCBFTlZJUk9OTUVOVAouSVAgIkhUVFBfUFJPWFkgW3Byb3RvY29sOi8vXTxob3N0Pls6cG9ydF0iClNldHMgcHJveHkgc2VydmVyIHRvIHVzZSBmb3IgSFRUUC4KLklQICJIVFRQU19QUk9YWSBbcHJvdG9jb2w6Ly9dPGhvc3Q+Wzpwb3J0XSIKU2V0cyBwcm94eSBzZXJ2ZXIgdG8gdXNlIGZvciBIVFRQUy4KLklQICJGVFBfUFJPWFkgW3Byb3RvY29sOi8vXTxob3N0Pls6cG9ydF0iClNldHMgcHJveHkgc2VydmVyIHRvIHVzZSBmb3IgRlRQLgouSVAgIkdPUEhFUl9QUk9YWSBbcHJvdG9jb2w6Ly9dPGhvc3Q+Wzpwb3J0XSIKU2V0cyBwcm94eSBzZXJ2ZXIgdG8gdXNlIGZvciBHT1BIRVIuCi5JUCAiQUxMX1BST1hZIFtwcm90b2NvbDovL108aG9zdD5bOnBvcnRdIgpTZXRzIHByb3h5IHNlcnZlciB0byB1c2UgaWYgbm8gcHJvdG9jb2wtc3BlY2lmaWMgcHJveHkgaXMgc2V0LgouSVAgIk5PX1BST1hZIDxjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBob3N0cz4iCmxpc3Qgb2YgaG9zdCBuYW1lcyB0aGF0IHNob3VsZG4ndCBnbyB0aHJvdWdoIGFueSBwcm94eS4gSWYgc2V0IHRvIGEKYXN0ZXJpc2sgJyonIG9ubHksIGl0IG1hdGNoZXMgYWxsIGhvc3RzLgouSVAgIkNPTFVNTlMgPGludGVnZXI+IgpUaGUgd2lkdGggb2YgdGhlIHRlcm1pbmFsLiAgVGhpcyB2YXJpYWJsZSBvbmx5IGFmZmVjdHMgY3VybCB3aGVuIHRoZQotLXByb2dyZXNzLWJhciBvcHRpb24gaXMgdXNlZC4KLlNIIEVYSVQgQ09ERVMKVGhlcmUgZXhpc3RzIGEgYnVuY2ggb2YgZGlmZmVyZW50IGVycm9yIGNvZGVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGVycm9yCm1lc3NhZ2VzIHRoYXQgbWF5IGFwcGVhciBkdXJpbmcgYmFkIGNvbmRpdGlvbnMuIEF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywKdGhlIGV4aXQgY29kZXMgYXJlOgouSVAgMQpVbnN1cHBvcnRlZCBwcm90b2NvbC4gVGhpcyBidWlsZCBvZiBjdXJsIGhhcyBubyBzdXBwb3J0IGZvciB0aGlzIHByb3RvY29sLgouSVAgMgpGYWlsZWQgdG8gaW5pdGlhbGl6ZS4KLklQIDMKVVJMIG1hbGZvcm1hdC4gVGhlIHN5bnRheCB3YXMgbm90IGNvcnJlY3QuCi5JUCA0ClVSTCB1c2VyIG1hbGZvcm1hdHRlZC4gVGhlIHVzZXItcGFydCBvZiB0aGUgVVJMIHN5bnRheCB3YXMgbm90IGNvcnJlY3QuCi5JUCA1CkNvdWxkbid0IHJlc29sdmUgcHJveHkuIFRoZSBnaXZlbiBwcm94eSBob3N0IGNvdWxkIG5vdCBiZSByZXNvbHZlZC4KLklQIDYKQ291bGRuJ3QgcmVzb2x2ZSBob3N0LiBUaGUgZ2l2ZW4gcmVtb3RlIGhvc3Qgd2FzIG5vdCByZXNvbHZlZC4KLklQIDcKRmFpbGVkIHRvIGNvbm5lY3QgdG8gaG9zdC4KLklQIDgKRlRQIHdlaXJkIHNlcnZlciByZXBseS4gVGhlIHNlcnZlciBzZW50IGRhdGEgY3VybCBjb3VsZG4ndCBwYXJzZS4KLklQIDkKRlRQIGFjY2VzcyBkZW5pZWQuIFRoZSBzZXJ2ZXIgZGVuaWVkIGxvZ2luLgouSVAgMTAKRlRQIHVzZXIvcGFzc3dvcmQgaW5jb3JyZWN0LiBFaXRoZXIgb25lIG9yIGJvdGggd2VyZSBub3QgYWNjZXB0ZWQgYnkgdGhlCnNlcnZlci4KLklQIDExCkZUUCB3ZWlyZCBQQVNTIHJlcGx5LiBDdXJsIGNvdWxkbid0IHBhcnNlIHRoZSByZXBseSBzZW50IHRvIHRoZSBQQVNTIHJlcXVlc3QuCi5JUCAxMgpGVFAgd2VpcmQgVVNFUiByZXBseS4gQ3VybCBjb3VsZG4ndCBwYXJzZSB0aGUgcmVwbHkgc2VudCB0byB0aGUgVVNFUiByZXF1ZXN0LgouSVAgMTMKRlRQIHdlaXJkIFBBU1YgcmVwbHksIEN1cmwgY291bGRuJ3QgcGFyc2UgdGhlIHJlcGx5IHNlbnQgdG8gdGhlIFBBU1YgcmVxdWVzdC4KLklQIDE0CkZUUCB3ZWlyZCAyMjcgZm9ybWF5LiBDdXJsIGNvdWxkbid0IHBhcnNlIHRoZSAyMjctbGluZSB0aGUgc2VydmVyIHNlbnQuCi5JUCAxNQpGVFAgY2FuJ3QgZ2V0IGhvc3QuIENvdWxkbid0IHJlc29sdmUgdGhlIGhvc3QgSVAgd2UgZ290IGluIHRoZSAyMjctbGluZS4KLklQIDE2CkZUUCBjYW4ndCByZWNvbm5lY3QuIENvdWxkbid0IGNvbm5lY3QgdG8gdGhlIGhvc3Qgd2UgZ290IGluIHRoZSAyMjctbGluZS4KLklQIDE3CkZUUCBjb3VsZG4ndCBzZXQgYmluYXJ5LiBDb3VsZG4ndCBjaGFuZ2UgdHJhbnNmZXIgbWV0aG9kIHRvIGJpbmFyeS4KLklQIDE4ClBhcnRpYWwgZmlsZS4gT25seSBhIHBhcnQgb2YgdGhlIGZpbGUgd2FzIHRyYW5zZmVyZWQuCi5JUCAxOQpGVFAgY291bGRuJ3QgUkVUUiBmaWxlLiBUaGUgUkVUUiBjb21tYW5kIGZhaWxlZC4KLklQIDIwCkZUUCB3cml0ZSBlcnJvci4gVGhlIHRyYW5zZmVyIHdhcyByZXBvcnRlZCBiYWQgYnkgdGhlIHNlcnZlci4KLklQIDIxCkZUUCBxdW90ZSBlcnJvci4gQSBxdW90ZSBjb21tYW5kIHJldHVybmVkIGVycm9yIGZyb20gdGhlIHNlcnZlci4KLklQIDIyCkhUVFAgbm90IGZvdW5kLiBUaGUgcmVxdWVzdGVkIHBhZ2Ugd2FzIG5vdCBmb3VuZC4gVGhpcyByZXR1cm4gY29kZSBvbmx5CmFwcGVhcnMgaWYgLS1mYWlsIGlzIHVzZWQuCi5JUCAyMwpXcml0ZSBlcnJvci4gQ3VybCBjb3VsZG4ndCB3cml0ZSBkYXRhIHRvIGEgbG9jYWwgZmlsZXN5c3RlbSBvciBzaW1pbGFyLgouSVAgMjQKTWFsZm9ybWF0IHVzZXIuIFVzZXIgbmFtZSBiYWRseSBzcGVjaWZpZWQuCi5JUCAyNQpGVFAgY291bGRuJ3QgU1RPUiBmaWxlLiBUaGUgc2VydmVyIGRlbmllZCB0aGUgU1RPUiBvcGVyYXRpb24uCi5JUCAyNgpSZWFkIGVycm9yLiBWYXJpb3VzIHJlYWRpbmcgcHJvYmxlbXMuCi5JUCAyNwpPdXQgb2YgbWVtb3J5LiBBIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3QgZmFpbGVkLgouSVAgMjgKT3BlcmF0aW9uIHRpbWVvdXQuIFRoZSBzcGVjaWZpZWQgdGltZS1vdXQgcGVyaW9kIHdhcyByZWFjaGVkIGFjY29yZGluZyB0byB0aGUKY29uZGl0aW9ucy4KLklQIDI5CkZUUCBjb3VsZG4ndCBzZXQgQVNDSUkuIFRoZSBzZXJ2ZXIgcmV0dXJuZWQgYW4gdW5rbm93biByZXBseS4KLklQIDMwCkZUUCBQT1JUIGZhaWxlZC4gVGhlIFBPUlQgY29tbWFuZCBmYWlsZWQuCi5JUCAzMQpGVFAgY291bGRuJ3QgdXNlIFJFU1QuIFRoZSBSRVNUIGNvbW1hbmQgZmFpbGVkLgouSVAgMzIKRlRQIGNvdWxkbid0IHVzZSBTSVpFLiBUaGUgU0laRSBjb21tYW5kIGZhaWxlZC4gVGhlIGNvbW1hbmQgaXMgYW4gZXh0ZW5zaW9uCnRvIHRoZSBvcmlnaW5hbCBGVFAgc3BlYyBSRkMgOTU5LgouSVAgMzMKSFRUUCByYW5nZSBlcnJvci4gVGhlIHJhbmdlICJjb21tYW5kIiBkaWRuJ3Qgd29yay4KLklQIDM0CkhUVFAgcG9zdCBlcnJvci4gSW50ZXJuYWwgcG9zdC1yZXF1ZXN0IGdlbmVyYXRpb24gZXJyb3IuCi5JUCAzNQpTU0wgY29ubmVjdCBlcnJvci4gVGhlIFNTTCBoYW5kc2hha2luZyBmYWlsZWQuCi5JUCAzNgpGVFAgYmFkIGRvd25sb2FkIHJlc3VtZS4gQ291bGRuJ3QgY29udGludWUgYW4gZWFybGllciBhYm9ydGVkIGRvd25sb2FkLgouSVAgMzcKRklMRSBjb3VsZG4ndCByZWFkIGZpbGUuIEZhaWxlZCB0byBvcGVuIHRoZSBmaWxlLiBQZXJtaXNzaW9ucz8KLklQIDM4CkxEQVAgY2Fubm90IGJpbmQuIExEQVAgYmluZCBvcGVyYXRpb24gZmFpbGVkLgouSVAgMzkKTERBUCBzZWFyY2ggZmFpbGVkLgouSVAgNDAKTGlicmFyeSBub3QgZm91bmQuIFRoZSBMREFQIGxpYnJhcnkgd2FzIG5vdCBmb3VuZC4KLklQIDQxCkZ1bmN0aW9uIG5vdCBmb3VuZC4gQSByZXF1aXJlZCBMREFQIGZ1bmN0aW9uIHdhcyBub3QgZm91bmQuCi5JUCBYWApUaGVyZSB3aWxsIGFwcGVhciBtb3JlIGVycm9yIGNvZGVzIGhlcmUgaW4gZnV0dXJlIHJlbGVhc2VzLiBUaGUgZXhpc3Rpbmcgb25lcwphcmUgbWVhbnQgdG8gbmV2ZXIgY2hhbmdlLgouU0ggQlVHUwpJZiB5b3UgZG8gZmluZCBhbnkgKG9yIGhhdmUgb3RoZXIgc3VnZ2VzdGlvbnMpLCBtYWlsIERhbmllbCBTdGVuYmVyZwo8RGFuaWVsLlN0ZW5iZXJnQGhheHgubnU+LgouU0ggQVVUSE9SUyAvIENPTlRSSUJVVE9SUwogLSBEYW5pZWwgU3RlbmJlcmcgPERhbmllbC5TdGVuYmVyZ0BoYXh4Lm51PgogLSBSYWZhZWwgU2FndWxhIDxzYWd1bGFAaW5mLnVmcmdzLmJyPgogLSBTYW1wbyBLZWxsb21ha2kgPHNhbXBvQGlraS5maT4KIC0gTGluYXMgVmVwc3RhcyA8bGluYXNAbGluYXMub3JnPgogLSBCam9ybiBSZWVzZSA8YnJlZXNlQG1haWwxLnN0b2ZhbmV0LmRrPgogLSBKb2hhbiBBbmRlcnNvbiA8am9oYW5AaG9tZW1haWwuY29tPgogLSBLamVsbCBFcmljc29uIDxLamVsbC5Fcmljc29uQGhheHgsbnU+CiAtIFRyb3kgRW5nZWwgPHRlbmdlbEBzb25pYy5uZXQ+CiAtIFJ5YW4gTmVsc29uIDxyeWFuQGluY2guY29tPgogLSBCam9ybiBTdGVuYmVyZyA8Qmpvcm4uU3RlbmJlcmdAaGF4eC5udT4KIC0gQW5ndXMgTWFja2F5IDxhbWFja2F5QGd1cy5tbC5vcmc+CiAtIEVyaWMgWW91bmcgPGVheUBjcnlwdHNvZnQuY29tPgogLSBTaW1vbiBEaWNrIDxzaW1vbmRAdG90YWxseS5pcnJlbGV2YW50Lm9yZz4KIC0gT3JlbiBUaXJvc2ggPG9yZW5AbW9udHkuaGlzaG9tZS5uZXQ+CiAtIFN0ZXZlbiBHLiBKb2huc29uIDxzdGV2ZW5qQGFsdW0ubWl0LmVkdT4KIC0gR2lsYmVydCBSYW1pcmV6IEpyLiA8Z3JhbUB2ZXJkaWN0LnV0aHNjc2EuZWR1PgogLSBBbmRy6XMgR2FyY+1hIDxvcm5hbHV4QHJlZGVzdGIuZXM+CiAtIERvdWdsYXMgRS4gV2Vnc2NoZWlkIDx3ZWdzY2RAd2hpcmxwb29sLmNvbT4KIC0gTWFyayBCdXRsZXIgPGJ1dGxlcm1AeG1pc3Npb24uY29tPgogLSBFcmljIFRoZWxpbiA8ZXJpY0BnZW5lcmF0aW9uLWkuY29tPgogLSBNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT4KIC0gR3JlZyBPbnVmZXIgPEdyZWcuT251ZmVyQEVuZy5TdW4uQ09NPgogLSBEb3VnIEthdWZtYW4gPGRrYXVmbWFuQHJhaHVsLm5ldD4KIC0gRGF2aWQgRXJpa3Nzb24gPGRhdmlkQDJnb29kLmNvbT4KIC0gUmFscGggQmVja21hbm4gPHJhYmVAdW5pLXBhZGVyYm9ybi5kZT4KIC0gVC4gWWFtYWRhIDx0YWlAaW1hc3kub3IuanA+CiAtIExhcnMgSi4gQWFzIDxsYXJzYUBzaW0ubm8+CiAtIEr2cm4gSGFydHJvdGggPEpvZXJuLkhhcnRyb3RoQHRlbGVrb20uZGU+CiAtIE1hdHRoZXcgQ2xhcmtlIDxjbGFtYXRAdmFuLm1hdmVzLmNhPgogLSBMaW51cyBOaWVsc2VuIDxMaW51cy5OaWVsc2VuQGhheHgubnU+CiAtIEZlbGl4IHZvbiBMZWl0bmVyIDxmZWxpeEBjb252ZXJnZW5jZS5kZT4KIC0gRGFuIFppdHRlciA8ZHppdHRlckB6aXR0ZXIubmV0PgogLSBKb25na2kgU3V3YW5kaSA8Sm9uZ2tpLlN1d2FuZGlAZW5nLnN1bi5jb20+CiAtIENocmlzIE1hbHRieSA8Y2hyaXNAYXVyZW1hLmNvbT4KIC0gUm9uIFphcHAgPHJ6YXBwZXJAeWFob28uY29tPgogLSBQYXVsIE1hcnF1aXMgPHBtYXJxdWlzQGluYW1lLmNvbT4KIC0gRWxsaXMgUHJpdGNoYXJkIDxlbGxpc0BjaXRyaWEuY29tPgogLSBEYW1pZW4gQWRhbnQgPGRhbXNAdXNhLm5ldD4KIC0gQ2hyaXMgPGNiYXlsaXNzQGNzYy5jb21lPgogLSBNYXJjbyBHLiBTYWx2YWdubyA8bWdzQHdoaXouY2piLm5ldD4KLlNIIFdXVwpodHRwOi8vY3VybC5oYXh4Lm51Ci5TSCBGVFAKZnRwOi8vZnRwLnN1bmV0LnNlL3B1Yi93d3cvdXRpbGl0aWVzL2N1cmwvCi5TSCAiU0VFIEFMU08iCi5CUiBmdHAgKDEpLAouQlIgd2dldCAoMSksCi5CUiBzbmFyZiAoMSkK