CQk9PT09PT09PT0gQmludXRpbHMgTWFpbnRhaW5lcnMgPT09PT09PT09CgpUaGlzIGlzIHRoZSBsaXN0IG9mIGluZGl2aWR1YWxzIHJlc3BvbnNpYmxlIGZvciBtYWludGVuYW5jZSBhbmQgdXBkYXRlCm9mIHRoZSBHTlUgQmluYXJ5IFV0aWxpdGllcyBwcm9qZWN0LiAgVGhpcyBpbmNsdWRlcyB0aGUgbGlua2VyIChsZCksCnRoZSBhc3NlbWJsZXIgKGdhcyksIHRoZSBwcm9maWxlciAoZ3Byb2YpLCBhIHdob2xlIHN1aXRlIG9mIG90aGVyCnByb2dyYW1zIChiaW51dGlscykgYW5kIHRoZSBsaWJyYXJpZXMgdGhhdCB0aGV5IHVzZSAoYmZkIGFuZApvcGNvZGVzKS4gIFRoaXMgcHJvamVjdCBzaGFyZXMgYSBjb21tb24gc2V0IG9mIGhlYWRlciBmaWxlcyB3aXRoIHRoZQpHQ0MgYW5kIEdEQiBwcm9qZWN0cyAoaW5jbHVkZSksIHNvIG1haW50YWluZXJzaGlwIG9mIHRob3NlIGZpbGVzIGlzIApzaGFyZWQgYW1vdW5nc3QgdGhlIHByb2plY3RzLgoKVGhlIGhvbWUgcGFnZSBmb3IgYmludXRpbHMgaXM6CgogIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaW51dGlscy9iaW51dGlscy5odG1sCgphbmQgcGF0Y2hlcyBzaG91bGQgYmUgc2VudCB0bzoKCiAgYnVnLWJpbnV0aWxzQGdudS5vcmcgICAgb3IgICAgYmludXRpbHNAc291cmNlcy5yZWRoYXQuY29tCiAgCndpdGggIltQYXRjaF0iIGFzIHBhcnQgb2YgdGhlIHN1YmplY3QgbGluZS4gIE5vdGUgLSBwYXRjaGVzIHRvIHRoZQp0b3AgbGV2ZWwgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHNjcmlwdHMgc2hvdWxkIGJlIHNlbnQgdG86CgogIGNvbmZpZy1wYXRjaGVzQGdudS5vcmcKCmFuZCBub3QgdG8gdGhlIGJpbnV0aWxzIGxpc3RzLiAgUGF0Y2hlcyB0byB0aGUgb3RoZXIgdG9wIGxldmVsCmNvbmZpZ3VyZSBmaWxlcyAoY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGNvbmZpZy1pZiwgY29uZmlnLW1sLmluKQpzaG91bGQgYmUgc2VudCB0byB0aGUgYmludXRpbHMgbGlzdHMsIGFuZCBjb3BpZWQgdG8gdGhlIGdjYyBhbmQgZ2RiCmxpc3RzIGFzIHdlbGwgKGdjYy1wYXRjaGVzQGdjYy5nbnUub3JnIGFuZApnZGItcGF0Y2hlc0Bzb3VyY2VzLnJlZGhhdC5jb20pLgoKCQktLS0tLS0tLS0gQmxhbmtldCBXcml0ZSBQcml2cyAtLS0tLS0tLS0KClRoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgcGVybWlzc2lvbiB0byBjaGVjayBwYXRjaGVzIGludG8gdGhlCnJlcG9zaXRvcnkgd2l0aG91dCBvYnRhaW5pbmcgYXBwcm92YWwgZmlyc3Q6CgkJCiAgTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPiAoaGVhZCBtYWludGFpbmVyKQogIFJpY2hhcmQgSGVuZGVyc29uIDxydGhAcmVkaGF0LmNvbT4KICBJYW4gVGF5bG9yIDxpYW5Ad2FzYWJpc3lzdGVtcy5jb20+CiAgSmVmZiBMYXcgPGxhd0ByZWRoYXQuY29tPgogIEppbSBXaWxzb24gPHdpbHNvbkBzcGVjaWZpeGluYy5jb20+CiAgREogRGVsb3JpZSA8ZGpAcmVkaGF0LmNvbT4KICBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CiAgTWljaGFlbCBNZWlzc25lciA8Z251QHRoZS1tZWlzc25lcnMub3JnPgoKICAgICAgLS0tLS0tLS0tIE1haW50YWluZXJzIC0tLS0tLS0tLQoKTWFpbnRhaW5lcnMgYXJlIGluZGl2aWR1YWxzIHdobyBhcmUgcmVzcG9uc2libGUgZm9yLCBhbmQgaGF2ZQpwZXJtaXNzaW9uIHRvIGNoZWNrIGluIGNoYW5nZXMgaW4sIGNlcnRhaW4gc3Vic2V0cyBvZiB0aGUgY29kZS4gIE5vdGUKdGhhdCBtYWludGFpbmVycyBzdGlsbCBuZWVkIGFwcHJvdmFsIHRvIGNoZWNrIGluIGNoYW5nZXMgb3V0c2lkZSBvZgp0aGUgaW1tZWRpYXRlIGRvbWFpbiB0aGF0IHRoZXkgbWFpbnRhaW4uCgpJZiB0aGVyZSBpcyBubyBtYWludGFpbmVyIGZvciBhIGdpdmVuIGRvbWFpbiB0aGVuIHRoZSByZXNwb25zaWJpbGl0eQpmYWxscyB0byB0aGUgaGVhZCBtYWludGFpbmVyIChhYm92ZSkuICBJZiB0aGVyZSBhcmUgc2V2ZXJhbAptYWludGFpbmVycyBmb3IgYSBnaXZlbiBkb21haW4gdGhlbiByZXNwb25zaWJpbGl0eSBmYWxscyB0byB0aGUgZmlyc3QKbWFpbnRhaW5lci4gIFRoZSBmaXJzdCBtYWludGFpbmVyIGlzIGZyZWUgdG8gZGV2b2x2ZSB0aGF0CnJlc3BvbnNpYmlsaXR5IGFtb25nIHRoZSBvdGhlciBtYWludGFpbmVycy4KCiAgQUxQSEEgICAgICAgICAgICBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQHJlZGhhdC5jb20+CiAgQVJNCQkgICBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+CiAgQVJNCQkgICBSaWNoYXJkIEVhcm5zaGF3IDxyZWFybnNoYUBhcm0uY29tPgogIEFWUgkJICAgRGVuaXMgQ2hlcnR5a292IDxkZW5pc2NAb3ZlcnRhLnJ1PgogIEFWUgkJICAgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGFtZWxlay5nZGEucGw+CiAgQlVJTEQgU1lTVEVNCSAgIEJlbiBFbGxpc3RvbiA8YmplQHdhc2FiaXN5c3RlbXMuY29tPgogIEJVSUxEIFNZU1RFTQkgICBEYW5pZWwgSmFjb2Jvd2l0eiA8ZGFuQGRlYmlhbi5vcmc+CiAgQ1JJUwkJICAgSGFucy1QZXRlciBOaWxzc29uIDxocEBheGlzLmNvbT4KICBEV0FSRjIJICAgSmFzb24gTWVycmlsbCA8amFzb25AcmVkaGF0LmNvbT4KICBGUjMwCQkgICBEYXZlIEJyb2xsZXkgPGJyb2xsZXlAcmVkaGF0LmNvbT4KICBGUlYJCSAgIERhdmUgQnJvbGxleSA8YnJvbGxleUByZWRoYXQuY29tPgogIEhQUEEJCSAgIERhdmUgQW5nbGluIDxkYXZlLmFuZ2xpbkBucmMuY2E+CiAgSFBQQSBlbGYzMgkgICBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CiAgSFBQQSBlbGY2NAkgICBKZWZmIExhdyA8bGF3QHJlZGhhdC5jb20+IFtCYXNpYyBtYWludGFpbmFuY2Ugb25seV0KICBJQS02NAkJICAgSmltIFdpbHNvbiA8d2lsc29uQHNwZWNpZml4aW5jLmNvbT4KICBJUTIwMDAJICAgU3RhbiBDb3ggPHNjb3hAcmVkaGF0LmNvbT4KICBpODYwCQkgICBKYXNvbiBFY2toYXJkdCA8amxlQHJpY2UuZWR1PgogIGl4ODYJCSAgIEFsYW4gTW9kcmEgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KICBpeDg2IFBFCSAgIENocmlzdG9waGVyIEZheWxvciA8Y2dmQHJlZGhhdC5jb20+CiAgaXg4NiBDT0ZGCSAgIERKIERlbG9yaWUgPGRqQHJlZGhhdC5jb20+CiAgaXg4NgkJICAgSC5KLkx1IDxoamxAZ251Lm9yZz4KICBpeDg2IElOVEVMIE1PREUgIERpZWdvIE5vdmlsbG8gPGRub3ZpbGxvQHJlZGhhdC5jb20+CiAgTTY4SEMxMSBNNjhIQzEyICBTdGVwaGFuZSBDYXJyZXogPHN0Y2FycmV6QG5lcmltLmZyPgogIE02OGsJCSAgIEJlbiBFbGxpc3RvbiA8YmplQHdhc2FiaXN5c3RlbXMuY29tPgogIE1JUFMJCSAgIEVyaWMgQ2hyaXN0b3BoZXIgPGVjaHJpc3RvQHJlZGhhdC5jb20+CiAgTUlQUwkJICAgVGhpZW1vIFNldWZlciA8c2V1ZmVyQGNzdi5pY2EudW5pLXN0dXR0Z2FydC5kZT4KICBNTUlYCQkgICBIYW5zLVBldGVyIE5pbHNzb24gPGhwQGJpdHJhbmdlLmNvbT4KICBNTjEwMzAwCSAgIEVyaWMgQ2hyaXN0b3BoZXIgPGVjaHJpc3RvQHJlZGhhdC5jb20+CiAgTU4xMDMwMAkgICBBbGV4YW5kcmUgT2xpdmEgPGFvbGl2YUByZWRoYXQuY29tPgogIFBQQwkJICAgR2VvZmYgS2VhdGluZyA8Z2VvZmZrQGdlb2Zmay5vcmc+CiAgUFBDIHZlY3RvciBleHQgICBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KICBzMzkwLCBzMzkweAkgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgU0gJCSAgIEr2cm4gUmVubmVja2UgPGpvZXJuLnJlbm5lY2tlQHN1cGVyaC5jb20+CiAgU0gJCSAgIEFsZXhhbmRyZSBPbGl2YSA8YW9saXZhQHJlZGhhdC5jb20+CiAgU0gJCSAgIEtheiBLb2ppbWEgPGtrb2ppbWFAcnIuaWlqNHUub3IuanA+CiAgU1BBUkMJCSAgIEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CiAgVEVTVFNVSVRFUwkgICBCZW4gRWxsaXN0b24gPGJqZUB3YXNhYmlzeXN0ZW1zLmNvbT4KICBUSUM0WCAgICAgICAgICAgIFN2ZWluIFNlbGRhbCA8c3ZlaW4uc2VsZGFsQHNvbGlkYXMuY29tPgogIFRJQzU0WCAgICAgICAgICAgVGltb3RoeSBXYWxsIDx0d2FsbEBhbHVtLm1pdC5lZHU+CiAgVkFYCQkgICBKYXNvbiBSIFRob3JwZSA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KICB4ODZfNjQJICAgSmFuIEh1Ymlja2EgPGpoQHN1c2UuY3o+CiAgeDg2XzY0CSAgIEFuZHJlYXMgSmFlZ2VyIDxhakBzdXNlLmRlPgogIFh0ZW5zYQkgICBCb2IgV2lsc29uIDxib2Iud2lsc29uQGFjbS5vcmc+CiAgejhrCQkgICBDaHJpc3RpYW4gR3JvZXNzbGVyIDxjaHJpc0Bncm9lc3NsZXIub3JnPgoKCiAgICAgIC0tLS0tLS0tLSBDR0VOIE1haW50YWluZXJzIC0tLS0tLS0tLS0tLS0KCkNHRU4gaXMgYSB0b29sIGZvciBidWlsZGluZywgYW1vbmdzdCBvdGhlciB0aGluZ3MsIGFzc2VtYmxlcnMsCmRpc2Fzc2VtYmxlcnMgYW5kIHNpbXVsYXRvcnMgZnJvbSBhIHNpbmdsZSBkZXNjcmlwdGlvbiBvZiBhIENQVS4KSXQgY3JlYXRlcyBmaWxlcyBpbiBzZXZlcmFsIG9mIHRoZSBiaW51dGlscyBkaXJlY3RvcmllcywgYnV0IGl0CmlzIG1lbnRpb25lZCBoZXJlIHNpbmNlIHRoZXJlIGlzIGEgc2luZ2xlIGdyb3VwIHRoYXQgbWFpbnRhaW5zCkNHRU4gYW5kIHRoZSBmaWxlcyB0aGF0IGl0IGNyZWF0ZXMuIAoKSWYgeW91IGhhdmUgQ0dFTiByZWxhdGVkIHByb2JsZW1zIHlvdSBjYW4gc2VuZCBlbWFpbCB0bzsKCiAgIGNnZW5Ac291cmNlcy5yZWRoYXQuY29tCgpUaGUgY3VycmVudCBDR0VOIG1haW50YWluZXJzIGFyZToKCiAgRG91ZyBFdmFucywgQmVuIEVsbGlzdG9uLCBGcmFuayBFaWdsZXIKCiAgICAgLS0tLS0tLS0tIFdyaXRlIEFmdGVyIEFwcHJvdmFsIC0tLS0tLS0tLQoKSW5kaXZpZHVhbHMgd2l0aCAid3JpdGUgYWZ0ZXIgYXBwcm92YWwiIGhhdmUgdGhlIGFiaWxpdHkgdG8gY2hlY2sgaW4KY2hhbmdlcywgYnV0IHRoZXkgbXVzdCBnZXQgYXBwcm92YWwgZm9yIGVhY2ggY2hhbmdlIGZyb20gc29tZW9uZSBpbgpvbmUgb2YgdGhlIGFib3ZlIGxpc3RzIChibGFua2V0IHdyaXRlIG9yIG1haW50YWluZXJzKS4KCltJdCdzIGEgaHVnZSBsaXN0LCBmb2xrcy4gIFlvdSBrbm93IHdobyB5b3UgYXJlLiAgSWYgeW91IGhhdmUgdGhlCiAqYWJpbGl0eSogdG8gZG8gYmludXRpbHMgY2hlY2tpbnMsIHlvdSdyZSBpbiB0aGlzIGdyb3VwLiAgSnVzdAogcmVtZW1iZXIgdG8gZ2V0IGFwcHJvdmFsIGJlZm9yZSBjaGVja2luZyBhbnl0aGluZyBpbi5dCgogICAgIC0tLS0tLS0tLS0tLS0gIE9idmlvdXMgRml4ZXMgLS0tLS0tLS0tLS0tLQoKRml4ZXMgZm9yIG9idmlvdXMgbWlzdGFrZXMgZG8gbm90IG5lZWQgYXBwcm92YWwsIGFuZCBjYW4gYmUgY2hlY2tlZCBpbgpyaWdodCBhd2F5LCBidXQgdGhlIHBhdGNoIHNob3VsZCBzdGlsbCBiZSBzZW50IHRvIHRoZSBiaW51dGlscyBsaXN0LgpUaGUgZGVmaW5pdGlvbiBvZiBvYnZpb3VzIGlzIGEgYml0IGhhenksIGFuZCBpZiB5b3UgYXJlIG5vdCBzdXJlLCB0aGVuCnlvdSBzaG91bGQgc2VlayBhcHByb3ZhbCBmaXJzdC4gIE9idmlvdXMgZml4ZXMgaW5jbHVkZSBmaXhlcyBmb3IKc3BlbGxpbmcgbWlzdGFrZXMsIGJsYXRhbnRseSBpbmNvcnJlY3QgY29kZSAod2hlcmUgdGhlIGNvcnJlY3QgY29kZSBpcwphbHNvIGJsYXRhbnRseSBvYnZpb3VzKSwgYW5kIHNvIG9uLiAgT2J2aW91cyBmaXhlcyBzaG91bGQgYWx3YXlzIGJlCnNtYWxsLCB0aGUgbGFyZ2VyIHRoZXkgYXJlLCB0aGUgbW9yZSBsaWtlbHkgaXQgaXMgdGhhdCB0aGV5IGNvbnRhaW4Kc29tZSB1bi1vYnZpb3VzIHNpZGUgZWZmZWN0IG9yIGNvbnNlcXVlbmNlLgoKICAgIC0tLS0tLS0tLSBCcmFuY2ggQ2hlY2tpbnMgLS0tLS0tLS0tCgpJZiBhIHBhdGNoIGlzIGFwcHJvdmVkIGZvciBjaGVjayBpbiB0byB0aGUgbWFpbmxpbmUgc291cmNlcywgaXQgY2FuCmFsc28gYmUgY2hlY2tlZCBpbnRvIHRoZSBjdXJyZW50IHJlbGVhc2UgYnJhbmNoLiAgTm9ybWFsbHkgaG93ZXZlcgpvbmx5IGJ1ZyBmaXhlcyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgYnJhbmNoLiAgTmV3IGZlYXR1cmVzLCBuZXcKcG9ydHMsIGV0Yywgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gdGhlIG1haW5saW5lLiAgKE90aGVyd2lzZSB0aGUKYnVyZGVuIG9mIG1haW50YWluaW5nIHRoZSBicmFuY2ggaW4gc3luYyB3aXRoIHRoZSBtYWlubGluZSBiZWNvbWVzIHRvbyAKZ3JlYXQpLiAgSWYgeW91IGFyZSB1bmNlcnRhaW4gYXMgdG8gd2hldGhlciBhIHBhdGNoIGlzIGFwcHJvcHJpYXRlIGZvcgp0aGUgYnJhbmNoLCBhc2sgdGhlIGJyYW5jaCBtYWludGFpbmVyLiAgVGhpcyBpczoKCiAgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CgogICAgLS0tLS0tLS0gVGVzdHN1aXRlcyAtLS0tLS0tLS0tLS0tLS0KCkluIGdlbmVyYWwgcGF0Y2hlcyB0byBhbnkgb2YgdGhlIGJpbnV0aWxzIHRlc3RzdWl0ZXMgc2hvdWxkIGJlCmNvbnNpZGVyZWQgZ2VuZXJpYyBhbmQgc2VudCB0byB0aGUgYmludXRpbHMgbWFpbGluZyBsaXN0IGZvcgphcHByb3ZhbC4gIFBhdGNoZXMgdG8gdGFyZ2V0IHNwZWNpZmljIHRlc3RzIGFyZSB0aGUgcmVzcG9uc2liaWxpdHkgdGhlCnJlbGV2ZW50IHBvcnQgbWFpbnRhaW5lcihzKSwgYW5kIGNhbiBiZSBhcHByb3ZlZC9jaGVja2VkIGluIGJ5IHRoZW0uCk90aGVyIHRlc3RzdWl0ZSBwYXRjaGVzIG5lZWQgdGhlIGFwcHJvdmFsIG9mIGEgYmxhbmtldC13cml0ZS1wcml2ZWxlZ2VzCnBlcnNvbi4KCiAgICAtLS0tLS0tLSBDb25maWd1cmUgcGF0Y2hlcyAtLS0tLS0tLS0tCgpQYXRjaGVzIHRvIHRoZSB0b3AgbGV2ZWwgY29uZmlndXJlIGZpbGVzIChjb25maWcuc3ViICYgY29uZmlnLmd1ZXNzKQphcmUgbm90IHRoZSBkb21haW4gb2YgdGhlIGJpbnV0aWxzIHByb2plY3QgYW5kIHRoZXkgY2Fubm90IGJlIGFwcHJvdmVkCmJ5IHRoZSBiaW51dGlscyBncm91cC4gIEluc3RlYWQgdGhleSBzaG91bGQgYmUgc3VibWl0dGVkIHRvIHRoZSBjb25maWcKbWFpbnRhaW5lciBhdDoKCgljb25maWctcGF0Y2hlc0BnbnUub3JnCg==