ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKCQkJICAgICAgICAgICAgICAgYnkKCQlEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCgkJQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXN0IHZpZXdlZCB3aXRoIGZpeGVkIHdpZHRoIGZvbnRzIAoKT3ZlcnZpZXcgb2YgRG9jdW1lbnQ6Cj09PT09PT09PT09PT09PT09PT09PQpUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgYW4gZ29vZCBvdmVydmlldyBvZiBob3cgdG8gZGVidWcgCkxpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlLiBJdCBpc24ndCBpbnRlbmRlZCBhcyBhIGNvbXBsZXRlIHJlZmVyZW5jZSAmIG5vdCBhCnR1dG9yaWFsIG9uIHRoZSBmdW5kYW1lbnRhbHMgb2YgQyAmIGFzc2VtYmx5LiBJdCBkb2Vzbid0IGdvIGludG8KMzkwIElPIGluIGFueSBkZXRhaWwuIEl0IGlzIGludGVuZGVkIHRvIGNvbXBsZW1lbnQgdGhlIGRvY3VtZW50cyBpbiB0aGUKcmVmZXJlbmNlIHNlY3Rpb24gYmVsb3cgJiBhbnkgb3RoZXIgd29ydGh3aGlsZSByZWZlcmVuY2VzIHlvdSBnZXQuCgpJdCBpcyBpbnRlbmRlZCBsaWtlIHRoZSBFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBSZWZlcmVuY2UgU3VtbWFyeQp0byBiZSBwcmludGVkIG91dCAmIHVzZWQgYXMgYSBxdWljayBjaGVhdCBzaGVldCBzZWxmIGhlbHAgc3R5bGUgcmVmZXJlbmNlIHdoZW4KcHJvYmxlbXMgb2NjdXIuCgpDb250ZW50cwo9PT09PT09PQpSZWdpc3RlciBTZXQKQWRkcmVzcyBTcGFjZXMgb24gSW50ZWwgTGludXgKQWRkcmVzcyBTcGFjZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKVGhlIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIEtlcm5lbCBUYXNrIFN0cnVjdHVyZQpSZWdpc3RlciBVc2FnZSAmIFN0YWNrZnJhbWVzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCkEgc2FtcGxlIHByb2dyYW0gd2l0aCBjb21tZW50cwpDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpGaWd1cmluZyBvdXQgZ2NjIGNvbXBpbGUgZXJyb3JzCkRlYnVnZ2luZyBUb29scwpvYmpkdW1wCnN0cmFjZQpQZXJmb3JtYW5jZSBEZWJ1Z2dpbmcgCkRlYnVnZ2luZyB1bmRlciBWTQpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIElPIE92ZXJ2aWV3CkRlYnVnZ2luZyBJTyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHVuZGVyIFZNCkdEQiBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlClN0YWNrIGNoYWluaW5nIGluIGdkYiBieSBoYW5kCkV4YW1pbmluZyBjb3JlIGR1bXBzCmxkZApEZWJ1Z2dpbmcgbW9kdWxlcwpUaGUgcHJvYyBmaWxlIHN5c3RlbQpTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KRHVtcHRvb2wgJiBMY3Jhc2gKU3lzUnEKUmVmZXJlbmNlcwpTcGVjaWFsIFRoYW5rcwoKUmVnaXN0ZXIgU2V0Cj09PT09PT09PT09PQpUaGUgY3VycmVudCBhcmNoaXRlY3R1cmVzIGhhdmUgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMuCiAKMTYgIEdlbmVyYWwgcHJvcG9zZSByZWdpc3RlcnMsIDMyIGJpdCBvbiBzLzM5MCA2NCBiaXQgb24gei9BcmNoaXRlY3R1cmUsIHIwLXIxNSBvciBncHIwLWdwcjE1IHVzZWQgZm9yIGFyaXRobWV0aWMgJiBhZGRyZXNzaW5nLiAKCjE2IENvbnRyb2wgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCAoIGNyMC1jcjE1IGtlcm5lbCB1c2FnZSBvbmx5ICkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsCmludGVycnVwdCBjb250cm9sLGRlYnVnZ2luZyBjb250cm9sIGV0Yy4KCjE2IEFjY2VzcyByZWdpc3RlcnMgKCBhcjAtYXIxNSApIDMyIGJpdCBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCm5vdCB1c2VkIGJ5IG5vcm1hbCBwcm9ncmFtcyBidXQgcG90ZW50aWFsbHkgY291bGQgCmJlIHVzZWQgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UuIFRoZWlyIG1haW4gcHVycG9zZSBpcyB0aGVpciAxIHRvIDEKYXNzb2NpYXRpb24gd2l0aCBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIGFuZCBhcmUgdXNlZCBpbgp0aGUga2VybmVsIGZvciBjb3B5aW5nIGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIGFkZHJlc3Mgc3BhY2VzLgpBY2Nlc3MgcmVnaXN0ZXIgMCAoICYgYWNjZXNzIHJlZ2lzdGVyIDEgb24gei9BcmNoaXRlY3R1cmUgKCBuZWVkcyA2NCBiaXQgCnBvaW50ZXIgKSApIGlzIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBwdGhyZWFkIGxpYnJhcnkgYXMgYSBwb2ludGVyIHRvCnRoZSBjdXJyZW50IHJ1bm5pbmcgdGhyZWFkcyBwcml2YXRlIGFyZWEuCgoxNiA2NCBiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChmcDAtZnAxNSApIElFRUUgJiBIRlAgZmxvYXRpbmcgCnBvaW50IGZvcm1hdCBjb21wbGlhbnQgb24gRzUgdXB3YXJkcyAmIGEgRmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWcgKEZQQykgCjQgIDY0IGJpdCByZWdpc3RlcnMgKGZwMCxmcDIsZnA0ICYgZnA2KSBIRlAgb25seSBvbiBvbGRlciBtYWNoaW5lcy4KTm90ZToKTGludXggKGN1cnJlbnRseSkgYWx3YXlzIHVzZXMgSUVFRSAmIGVtdWxhdGVzIEc1IElFRUUgZm9ybWF0IG9uIG9sZGVyIG1hY2hpbmVzLAooIHByb3ZpZGVkIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCBmb3IgdGhpcyApLgoKClRoZSBQU1cgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHJlZ2lzdGVyIG9uIHRoZSBtYWNoaW5lIGl0CmlzIDY0IGJpdCBvbiBzLzM5MCAmIDEyOCBiaXQgb24gei9BcmNoaXRlY3R1cmUgJiBzZXJ2ZXMgdGhlIHJvbGVzIG9mIAphIHByb2dyYW0gY291bnRlciAocGMpLCBjb25kaXRpb24gY29kZSByZWdpc3RlcixtZW1vcnkgc3BhY2UgZGVzaWduYXRvci4KSW4gSUJNIHN0YW5kYXJkIG5vdGF0aW9uIEkgYW0gY291bnRpbmcgYml0IDAgYXMgdGhlIE1TQi4KSXQgaGFzIHNldmVyYWwgYWR2YW50YWdlcyBvdmVyIGEgbm9ybWFsIHByb2dyYW0gY291bnRlcgppbiB0aGF0IHlvdSBjYW4gY2hhbmdlIGFkZHJlc3MgdHJhbnNsYXRpb24gJiBwcm9ncmFtIGNvdW50ZXIgCmluIGEgc2luZ2xlIGluc3RydWN0aW9uLiBUbyBjaGFuZ2UgYWRkcmVzcyB0cmFuc2xhdGlvbiwKZS5nLiBzd2l0Y2hpbmcgYWRkcmVzcyB0cmFuc2xhdGlvbiBvZmYgcmVxdWlyZXMgdGhhdCB5b3UKaGF2ZSBhIGxvZ2ljYWw9cGh5c2ljYWwgbWFwcGluZyBmb3IgdGhlIGFkZHJlc3MgeW91IGFyZQpjdXJyZW50bHkgcnVubmluZyBhdC4KCiAgICAgIEJpdCAgICAgICAgICAgVmFsdWUKcy8zOTAgei9BcmNoaXRlY3R1cmUKMCAgICAgICAwICAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApIG90aGVyd2lzZSBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBvY2N1cnMuCgoxICAgICAgIDEgICAgIFByb2dyYW0gRXZlbnQgUmVjb3JkaW5nIDEgUEVSIGVuYWJsZWQsIAoJICAgICAgUEVSIGlzIHVzZWQgdG8gZmFjaWxpdGF0ZSBkZWJ1Z2dpbmcgZS5nLiBzaW5nbGUgc3RlcHBpbmcuCgoyLTQgICAgMi00ICAgIFJlc2VydmVkICggbXVzdCBiZSAwICkuIAoKNSAgICAgICA1ICAgICBEeW5hbWljIGFkZHJlc3MgdHJhbnNsYXRpb24gMT1EQVQgb24uCgo2ICAgICAgIDYgICAgIElucHV0L091dHB1dCBpbnRlcnJ1cHQgTWFzawoKNyAgICAgICA3ICAgICBFeHRlcm5hbCBpbnRlcnJ1cHQgTWFzayB1c2VkIHByaW1hcmlseSBmb3IgaW50ZXJwcm9jZXNzb3Igc2lnbmFsbGluZyAmIAoJICAgICAgY2xvY2sgaW50ZXJydXB0cy4KCjgtMTEgIDgtMTEgICAgUFNXIEtleSB1c2VkIGZvciBjb21wbGV4IG1lbW9yeSBwcm90ZWN0aW9uIG1lY2hhbmlzbSBub3QgdXNlZCB1bmRlciBsaW51eAoKMTIgICAgICAxMiAgICAxIG9uIHMvMzkwIDAgb24gei9BcmNoaXRlY3R1cmUKCjEzICAgICAgMTMgICAgTWFjaGluZSBDaGVjayBNYXNrIDE9ZW5hYmxlIG1hY2hpbmUgY2hlY2sgaW50ZXJydXB0cwoKMTQgICAgICAxNCAgICBXYWl0IFN0YXRlIHNldCB0aGlzIHRvIDEgdG8gc3RvcCB0aGUgcHJvY2Vzc29yIGV4Y2VwdCBmb3IgaW50ZXJydXB0cyAmIGdpdmUgCgkgICAgICB0aW1lIHRvIG90aGVyIExQQVJTIHVzZWQgaW4gQ1BVIGlkbGUgaW4gdGhlIGtlcm5lbCB0byBpbmNyZWFzZSBvdmVyYWxsIAoJICAgICAgdXNhZ2Ugb2YgcHJvY2Vzc29yIHJlc291cmNlcy4KCjE1ICAgICAgMTUgICAgUHJvYmxlbSBzdGF0ZSAoIGlmIHNldCB0byAxIGNlcnRhaW4gaW5zdHJ1Y3Rpb25zIGFyZSBkaXNhYmxlZCApCgkgICAgICBhbGwgbGludXggdXNlciBwcm9ncmFtcyBydW4gd2l0aCB0aGlzIGJpdCAxIAoJICAgICAgKCB1c2VmdWwgaW5mbyBmb3IgZGVidWdnaW5nIHVuZGVyIFZNICkuCgoxNi0xNyAxNi0xNyAgIEFkZHJlc3MgU3BhY2UgQ29udHJvbAoKCSAgICAgIDAwIFByaW1hcnkgU3BhY2UgTW9kZSB3aGVuIERBVCBvbgoJICAgICAgVGhlIGxpbnV4IGtlcm5lbCBjdXJyZW50bHkgcnVucyBpbiB0aGlzIG1vZGUsIENSMSBpcyBhZmZpbGlhdGVkIHdpdGggCiAgICAgICAgICAgICAgdGhpcyBtb2RlICYgcG9pbnRzIHRvIHRoZSBwcmltYXJ5IHNlZ21lbnQgdGFibGUgb3JpZ2luIGV0Yy4KCgkgICAgICAwMSBBY2Nlc3MgcmVnaXN0ZXIgbW9kZSB0aGlzIG1vZGUgaXMgdXNlZCBpbiBmdW5jdGlvbnMgdG8gCgkgICAgICBjb3B5IGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIHNwYWNlLgoKCSAgICAgIDEwIFNlY29uZGFyeSBzcGFjZSBtb2RlIG5vdCB1c2VkIGluIGxpbnV4IGhvd2V2ZXIgQ1I3IHRoZQoJICAgICAgcmVnaXN0ZXIgYWZmaWxpYXRlZCB3aXRoIHRoaXMgbW9kZSBpcyAmIHRoaXMgJiBub3JtYWxseQoJICAgICAgQ1IxMz1DUjcgdG8gYWxsb3cgdXMgdG8gY29weSBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBzcGFjZS4KCSAgICAgIFdlIGRvIHRoaXMgYXMgZm9sbG93czoKCSAgICAgIFdlIHNldCBhcjIgdG8gMCB0byBkZXNpZ25hdGUgaXRzCgkgICAgICBhZmZpbGlhdGVkIGdwciAoIGdwcjIgKXRvIHBvaW50IHRvIHByaW1hcnk9a2VybmVsIHNwYWNlLgoJICAgICAgV2Ugc2V0IGFyNCB0byAxIHRvIGRlc2lnbmF0ZSBpdHMKCSAgICAgIGFmZmlsaWF0ZWQgZ3ByICggZ3ByNCApIHRvIHBvaW50IHRvIHNlY29uZGFyeT1ob21lPXVzZXIgc3BhY2UKCSAgICAgICYgdGhlbiBlc3NlbnRpYWxseSBkbyBhIG1lbWNvcHkoZ3ByMixncHI0LHNpemUpIHRvCgkgICAgICBjb3B5IGRhdGEgYmV0d2VlbiB0aGUgYWRkcmVzcyBzcGFjZXMsIHRoZSByZWFzb24gd2UgdXNlIGhvbWUgc3BhY2UgZm9yIHRoZQoJICAgICAga2VybmVsICYgZG9uJ3Qga2VlcCBzZWNvbmRhcnkgc3BhY2UgZnJlZSBpcyB0aGF0IGNvZGUgd2lsbCBub3QgcnVuIGluIAoJICAgICAgc2Vjb25kYXJ5IHNwYWNlLgoKCSAgICAgIDExIEhvbWUgU3BhY2UgTW9kZSBhbGwgdXNlciBwcm9ncmFtcyBydW4gaW4gdGhpcyBtb2RlLgoJICAgICAgaXQgaXMgYWZmaWxpYXRlZCB3aXRoIENSMTMuCgoxOC0xOSAxOC0xOSAgIENvbmRpdGlvbiBjb2RlcyAoQ0MpCgoyMCAgICAyMCAgICAgIEZpeGVkIHBvaW50IG92ZXJmbG93IG1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCAKICAgICAgICAgICAgICBvY2N1ciAoIG5vcm1hbGx5IDAgKSAKCjIxICAgIDIxICAgICAgRGVjaW1hbCBvdmVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCiAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKCjIyICAgIDIyICAgICAgRXhwb25lbnQgdW5kZXJmbG93IG1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQoKMjMgICAgMjMgICAgICBTaWduaWZpY2FuY2UgTWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAogICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCgoyNC0zMSAyNC0zMCAgIFJlc2VydmVkIE11c3QgYmUgMC4KCiAgICAgIDMxICAgICAgRXh0ZW5kZWQgQWRkcmVzc2luZyBNb2RlCiAgICAgIDMyICAgICAgQmFzaWMgQWRkcmVzc2luZyBNb2RlCiAgICAgICAgICAgICAgVXNlZCB0byBzZXQgYWRkcmVzc2luZyBtb2RlCgkgICAgICBQU1cgMzEgICBQU1cgMzIKICAgICAgICAgICAgICAgIDAgICAgICAgICAwICAgICAgICAyNCBiaXQKICAgICAgICAgICAgICAgIDAgICAgICAgICAxICAgICAgICAzMSBiaXQKICAgICAgICAgICAgICAgIDEgICAgICAgICAxICAgICAgICA2NCBiaXQKCjMyICAgICAgICAgICAgIDE9MzEgYml0IGFkZHJlc3NpbmcgbW9kZSAwPTI0IGJpdCBhZGRyZXNzaW5nIG1vZGUgKGZvciBiYWNrd2FyZCAKICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eSksIGxpbnV4IGFsd2F5cyBydW5zIHdpdGggdGhpcyBiaXQgc2V0IHRvIDEKCjMzLTY0ICAgICAgICAgIEluc3RydWN0aW9uIGFkZHJlc3MuCiAgICAgIDMzLTYzICAgIFJlc2VydmVkIG11c3QgYmUgMAogICAgICA2NC0xMjcgICBBZGRyZXNzCiAgICAgICAgICAgICAgIEluIDI0IGJpdHMgbW9kZSBiaXRzIDY0LTEwMz0wIGJpdHMgMTA0LTEyNyBBZGRyZXNzIAogICAgICAgICAgICAgICBJbiAzMSBiaXRzIG1vZGUgYml0cyA2NC05Nj0wIGJpdHMgOTctMTI3IEFkZHJlc3MKICAgICAgICAgICAgICAgTm90ZTogdW5saWtlIDMxIGJpdCBtb2RlIG9uIHMvMzkwIGJpdCA5NiBtdXN0IGJlIHplcm8KCSAgICAgICB3aGVuIGxvYWRpbmcgdGhlIGFkZHJlc3Mgd2l0aCBMUFNXRSBvdGhlcndpc2UgYSAKICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gb2NjdXJzLCBMUFNXIGlzIGZ1bGx5IGJhY2t3YXJkCiAgICAgICAgICAgICAgIGNvbXBhdGlibGUuCiAJICAKCSAgClByZWZpeCBQYWdlKHMpCi0tLS0tLS0tLS0tLS0tCSAgClRoaXMgcGVyIGNwdSBtZW1vcnkgYXJlYSBpcyB0b28gaW50aW1hdGVseSB0aWVkIHRvIHRoZSBwcm9jZXNzb3Igbm90IHRvIG1lbnRpb24uCkl0IGV4aXN0cyBiZXR3ZWVuIHRoZSByZWFsIGFkZHJlc3NlcyAwLTQwOTYgb24gcy8zOTAgJiAwLTgxOTIgei9BcmNoaXRlY3R1cmUgJiBpcyBleGNoYW5nZWQgCndpdGggYSAxIHBhZ2Ugb24gcy8zOTAgb3IgMiBwYWdlcyBvbiB6L0FyY2hpdGVjdHVyZSBpbiBhYnNvbHV0ZSBzdG9yYWdlIGJ5IHRoZSBzZXQgCnByZWZpeCBpbnN0cnVjdGlvbiBpbiBsaW51eCdlcyBzdGFydHVwLiAKVGhpcyBwYWdlIGlzIG1hcHBlZCB0byBhIGRpZmZlcmVudCBwcmVmaXggZm9yIGVhY2ggcHJvY2Vzc29yIGluIGFuIFNNUCBjb25maWd1cmF0aW9uCiggYXNzdW1pbmcgdGhlIG9zIGRlc2lnbmVyIGlzIHNhbmUgb2YgY291cnNlIDotKSApLgpCeXRlcyAwLTUxMiAoIDIwMCBoZXggKSBvbiBzLzM5MCAmIDAtNTEyLDQwOTYtNDU0NCw0NjA0LTUxMTkgY3VycmVudGx5IG9uIHovQXJjaGl0ZWN0dXJlIAphcmUgdXNlZCBieSB0aGUgcHJvY2Vzc29yIGl0c2VsZiBmb3IgaG9sZGluZyBzdWNoIGluZm9ybWF0aW9uIGFzIGV4Y2VwdGlvbiBpbmRpY2F0aW9ucyAmIAplbnRyeSBwb2ludHMgZm9yIGV4Y2VwdGlvbnMuCkJ5dGVzIGFmdGVyIDB4YzAwIGhleCBhcmUgdXNlZCBieSBsaW51eCBmb3IgcGVyIHByb2Nlc3NvciBnbG9iYWxzIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgCiggdGhlcmUgaXMgYSBnYXAgb24gei9BcmNoaXRlY3R1cmUgdG9vIGN1cnJlbnRseSBiZXR3ZWVuIDB4YzAwICYgMTAwMCB3aGljaCBsaW51eCB1c2VzICkuClRoZSBjbG9zZXN0IHRoaW5nIHRvIHRoaXMgb24gdHJhZGl0aW9uYWwgYXJjaGl0ZWN0dXJlcyBpcyB0aGUgaW50ZXJydXB0CnZlY3RvciB0YWJsZS4gVGhpcyBpcyBhIGdvb2QgdGhpbmcgJiBkb2VzIHNpbXBsaWZ5IHNvbWUgb2YgdGhlIGtlcm5lbCBjb2RpbmcKaG93ZXZlciBpdCBtZWFucyB0aGF0IHdlIG5vdyBjYW5ub3QgY2F0Y2ggc3RyYXkgTlVMTCBwb2ludGVycyBpbiB0aGUKa2VybmVsIHdpdGhvdXQgaGFyZCBjb2RlZCBjaGVja3MuCgoKCkFkZHJlc3MgU3BhY2VzIG9uIEludGVsIExpbnV4Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgdHJhZGl0aW9uYWwgSW50ZWwgTGludXggaXMgYXBwcm94aW1hdGVseSBtYXBwZWQgYXMgZm9sbG93cyBmb3JnaXZlCnRoZSBhc2NpaSBhcnQuCjB4RkZGRkZGRkYgNEdCIEhpbWVtICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogS2VybmVsIFNwYWNlICAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqClVzZXIgU3BhY2UgSGltZW0gKHR5cGljYWxseSAweEMwMDAwMDAwIDNHQiApKiAgVXNlciBTdGFjayAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgoJCQkJICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgICAgICAgICAgKgoJCQkJCSAgICAqICBTaGFyZWQgTGlicyAgKiAgICAgICAgICAqIE5leHQgUHJvY2VzcyAqICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgIHRvICAgICAgICogIAoJCQkJCSAgICAqICAgICAgICAgICAgICAgKiAgICA8PT0gICAqICAgICBSdW4gICAgICAqICA8PT0KCQkJCQkgICAgKiAgVXNlciBQcm9ncmFtICogICAgICAgICAgKiAgICAgICAgICAgICAgKgoJCQkJCSAgICAqICAgRGF0YSBCU1MgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgkgVGV4dCAgICAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKICAgICAgICAgCQkJICAgICAgICAgICAgKiAgIFNlY3Rpb25zICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgoweDAwMDAwMDAwICAgICAgICAgCQkJICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKCk5vdyBpdCBpcyBlYXN5IHRvIHNlZSB0aGF0IG9uIEludGVsIGl0IGlzIHF1aXRlIGVhc3kgdG8gcmVjb2duaXNlIGEga2VybmVsIGFkZHJlc3MgCmFzIGJlaW5nIG9uZSBncmVhdGVyIHRoYW4gdXNlciBzcGFjZSBoaW1lbSAoIGluIHRoaXMgY2FzZSAweEMwMDAwMDAwKS4KJiBhZGRyZXNzZXMgb2YgbGVzcyB0aGFuIHRoaXMgYXJlIHRoZSBvbmVzIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvZ3JhbSBvbiB0aGlzCnByb2Nlc3NvciAoIGlmIGFuIHNtcCBib3ggKS4KSWYgdXNpbmcgdGhlIHZpcnR1YWwgbWFjaGluZSAoIFZNICkgYXMgYSBkZWJ1Z2dlciBpdCBpcyBxdWl0ZSBkaWZmaWN1bHQgdG8Ka25vdyB3aGljaCB1c2VyIHByb2Nlc3MgaXMgcnVubmluZyBhcyB0aGUgYWRkcmVzcyBzcGFjZSB5b3UgYXJlIGxvb2tpbmcgYXQKY291bGQgYmUgZnJvbSBhbnkgcHJvY2VzcyBpbiB0aGUgcnVuIHF1ZXVlLgoKVGhlIGxpbWl0YXRpb24gb2YgSW50ZWxzIGFkZHJlc3NpbmcgdGVjaG5pcXVlIGlzIHRoYXQgdGhlIGxpbnV4Cmtlcm5lbCB1c2VzIGEgdmVyeSBzaW1wbGUgcmVhbCBhZGRyZXNzIHRvIHZpcnR1YWwgYWRkcmVzc2luZyB0ZWNobmlxdWUKb2YgUmVhbCBBZGRyZXNzPVZpcnR1YWwgQWRkcmVzcy1Vc2VyIFNwYWNlIEhpbWVtLgpUaGlzIG1lYW5zIHRoYXQgb24gSW50ZWwgdGhlIGtlcm5lbCBsaW51eCBjYW4gdHlwaWNhbGx5IG9ubHkgYWRkcmVzcwpIaW1lbT0weEZGRkZGRkZGLTB4QzAwMDAwMDA9MUdCICYgdGhpcyBpcyBhbGwgdGhlIFJBTSB0aGVzZSBtYWNoaW5lcwpjYW4gdHlwaWNhbGx5IHVzZS4KVGhleSBjYW4gbG93ZXIgVXNlciBIaW1lbSB0byAyR0Igb3IgbG93ZXIgJiB0aHVzIGJlCmFibGUgdG8gdXNlIDJHQiBvZiBSQU0gaG93ZXZlciB0aGlzIHNocmlua3MgdGhlIG1heGltdW0gc2l6ZQpvZiBVc2VyIFNwYWNlIGZyb20gM0dCIHRvIDJHQiB0aGV5IGhhdmUgYSBubyB3aW4gbGltaXQgb2YgNEdCIHVubGVzcwp0aGV5IGdvIHRvIDY0IEJpdC4KCgpPbiAzOTAgb3VyIGxpbWl0YXRpb25zICYgc3RyZW5ndGhzIG1ha2UgdXMgc2xpZ2h0bHkgZGlmZmVyZW50LgpGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBhcmUgb25seSBhbGxvd2VkIHVzZSAzMSBiaXRzICgyR0IpCm9mIG91ciAzMiBiaXQgYWRkcmVzc2VzLCBob3dldmVyLCB3ZSB1c2UgZW50aXJlbHkgc2VwYXJhdGUgYWRkcmVzcyAKc3BhY2VzIGZvciB0aGUgdXNlciAmIGtlcm5lbC4KClRoaXMgbWVhbnMgd2UgY2FuIHN1cHBvcnQgMkdCIG9mIG5vbiBFeHRlbmRlZCBSQU0gb24gcy8zOTAsICYgbW9yZQp3aXRoIHRoZSBFeHRlbmRlZCBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGRldmljZSAmIApjdXJyZW50bHkgNFRCIG9mIHBoeXNpY2FsIG1lbW9yeSBjdXJyZW50bHkgb24gei9BcmNoaXRlY3R1cmUuCgoKQWRkcmVzcyBTcGFjZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk91ciBhZGRyZXNzaW5nIHNjaGVtZSBpcyBhcyBmb2xsb3dzCgoKSGltZW0gMHg3ZmZmZmZmZiAyR0Igb24gcy8zOTAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgpjdXJyZW50bHkgMHgzZmZmZmZmZmZmZiAoMl40MiktMSAqICBVc2VyIFN0YWNrICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCm9uIHovQXJjaGl0ZWN0dXJlLgkJICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkgICAgICAgICAgICAgICAgICogIFNoYXJlZCBMaWJzICAqICAgICAgICAgICogICAgICAgICAgICAgICogICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgICAgICAgICAgKiAgCgkJCSAgICAgICAgICogICAgICAgICAgICAgICAqICAgICAgICAgICogICAgS2VybmVsICAgICogIAoJCSAgICAgICAgICAgICAgICAgKiAgVXNlciBQcm9ncmFtICogICAgICAgICAgKiAgICAgICAgICAgICAgKgoJCSAgICAgICAgICAgICAgICAgKiAgIERhdGEgQlNTICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCiAgICAgICAgICAgIAkJCSAqICAgU2VjdGlvbnMgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCjB4MDAwMDAwMDAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKClRoaXMgYWxzbyBtZWFucyB0aGF0IHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgUFNXIHByb2JsZW0gc3RhdGUgYml0Cm9yIHRoZSBhZGRyZXNzaW5nIG1vZGUgdG8gZGVjaWRlIHdoZXRoZXIgd2UgYXJlIGxvb2tpbmcgYXQKdXNlciBvciBrZXJuZWwgc3BhY2UuCgpWaXJ0dWFsIEFkZHJlc3NlcyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkEgdmlydHVhbCBhZGRyZXNzIG9uIHMvMzkwIGlzIG1hZGUgdXAgb2YgMyBwYXJ0cwpUaGUgU1ggKCBzZWdtZW50IGluZGV4LCByb3VnaGx5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBHRCAmIFBNRCBpbiBsaW51eCB0ZXJtaW5vbG9neSApIApiZWluZyBiaXRzIDEtMTEuClRoZSBQWCAoIHBhZ2UgaW5kZXgsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhZ2UgdGFibGUgZW50cnkgKHB0ZSkgaW4gbGludXggdGVybWlub2xvZ3kgKQpiZWluZyBiaXRzIDEyLTE5LiAKVGhlIHJlbWFpbmluZyBiaXRzIEJYICh0aGUgYnl0ZSBpbmRleCBhcmUgdGhlIG9mZnNldCBpbiB0aGUgcGFnZSApCmkuZS4gYml0cyAyMCB0byAzMS4KCk9uIHovQXJjaGl0ZWN0dXJlIGluIGxpbnV4IHdlIGN1cnJlbnRseSBtYWtlIHVwIGFuIGFkZHJlc3MgZnJvbSA0IHBhcnRzLgpUaGUgcmVnaW9uIGluZGV4IGJpdHMgKFJYKSAwLTMyIHdlIGN1cnJlbnRseSB1c2UgYml0cyAyMi0zMgpUaGUgc2VnbWVudCBpbmRleCAoU1gpIGJlaW5nIGJpdHMgMzMtNDMKVGhlIHBhZ2UgaW5kZXggKFBYKSBiZWluZyBiaXRzICA0NC01MQpUaGUgYnl0ZSBpbmRleCAoQlgpIGJlaW5nIGJpdHMgIDUyLTYzCgpOb3RlczoKMSkgcy8zOTAgaGFzIG5vIFBNRCBzbyB0aGUgUE1EIGlzIHJlYWxseSB0aGUgUEdEIGFsc28uCkEgbG90IG9mIHRoaXMgc3R1ZmYgaXMgZGVmaW5lZCBpbiBwZ3RhYmxlLmguCgoyKSBBbHNvIHNlZWluZyBhcyBzLzM5MCdzIHBhZ2UgaW5kZXhlcyBhcmUgb25seSAxayAgaW4gc2l6ZSAKKGJpdHMgMTItMTkgeCA0IGJ5dGVzIHBlciBwdGUgKSB3ZSB1c2UgMSAoIHBhZ2UgNGsgKQp0byBtYWtlIHRoZSBiZXN0IHVzZSBvZiBtZW1vcnkgYnkgdXBkYXRpbmcgNCBzZWdtZW50IGluZGljZXMgCmVudHJpZXMgZWFjaCB0aW1lIHdlIG1lc3Mgd2l0aCBhIFBNRCAmIHVzZSBvZmZzZXRzIAowLDEwMjQsMjA0OCAmIDMwNzIgaW4gdGhpcyBwYWdlIGFzIGZvciBvdXIgc2VnbWVudCBpbmRleGVzLgpPbiB6L0FyY2hpdGVjdHVyZSBvdXIgcGFnZSBpbmRleGVzIGFyZSBub3cgMmsgaW4gc2l6ZQooIGJpdHMgMTItMTkgeCA4IGJ5dGVzIHBlciBwdGUgKSB3ZSBkbyBhIHNpbWlsYXIgdHJpY2sKYnV0IG9ubHkgbWVzcyB3aXRoIDIgc2VnbWVudCBpbmRpY2VzIGVhY2ggdGltZSB3ZSBtZXNzIHdpdGgKYSBQTUQuCgozKSBBcyB6L0FyY2hpdGVjdHVyZSBzdXBwb3J0cyB1cHRvIGEgbWFzc2l2ZSA1LWxldmVsIHBhZ2UgdGFibGUgbG9va3VwIHdlIApjYW4gb25seSB1c2UgMyBjdXJyZW50bHkgb24gTGludXggKCBhcyB0aGlzIGlzIGFsbCB0aGUgZ2VuZXJpYyBrZXJuZWwKY3VycmVudGx5IHN1cHBvcnRzICkgaG93ZXZlciB0aGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlCnRoaXMgYWxsb3dzIHVzIHRvIGFjY2VzcyAoIGFjY29yZGluZyB0byBteSBzdW1zICkKNFRCIG9mIHZpcnR1YWwgc3RvcmFnZSBwZXIgcHJvY2VzcyBpLmUuCjQwOTYqNTEyKFBURVMpKjEwMjQoUE1EUykqMjA0OChQR0QpID0gNDM5ODA0NjUxMTEwNCBieXRlcywKZW5vdWdoIGZvciBhbm90aGVyIDIgb3IgMyBvZiB5ZWFycyBJIHRoaW5rIDotKS4KdG8gZG8gdGhpcyB3ZSB1c2UgYSByZWdpb24tdGhpcmQtdGFibGUgZGVzaWduYXRpb24gdHlwZSBpbgpvdXIgYWRkcmVzcyBzcGFjZSBjb250cm9sIHJlZ2lzdGVycy4KIAoKVGhlIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIEtlcm5lbCBUYXNrIFN0cnVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVhY2ggcHJvY2Vzcy90aHJlYWQgdW5kZXIgTGludXggZm9yIFMzOTAgaGFzIGl0cyBvd24ga2VybmVsIHRhc2tfc3RydWN0CmRlZmluZWQgaW4gbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oClRoZSBTMzkwIG9uIGluaXRpYWxpc2F0aW9uICYgcmVzdW1pbmcgb2YgYSBwcm9jZXNzIG9uIGEgY3B1IHNldHMKdGhlIF9fTENfS0VSTkVMX1NUQUNLIHZhcmlhYmxlIGluIHRoZSBzcGFyZSBwcmVmaXggYXJlYSBmb3IgdGhpcyBjcHUKKHdoaWNoIHdlIHVzZSBmb3IgcGVyLXByb2Nlc3NvciBnbG9iYWxzKS4KClRoZSBrZXJuZWwgc3RhY2sgcG9pbnRlciBpcyBpbnRpbWF0ZWx5IHRpZWQgd2l0aCB0aGUgdGFzayBzdHJ1Y3R1cmUgZm9yCmVhY2ggcHJvY2Vzc29yIGFzIGZvbGxvd3MuCgogICAgICAgICAgICAgICAgICAgICAgcy8zOTAKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogIDEgcGFnZSBrZXJuZWwgc3RhY2sgKgoJICAgICogICAgICAgICggNEsgKSAgICAgICAgKgogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgKiAgIDEgcGFnZSB0YXNrX3N0cnVjdCAqICAgICAgICAKICAgICAgICAgICAgKiAgICAgICAgKCA0SyApICAgICAgICAqCjhLIGFsaWduZWQgICoqKioqKioqKioqKioqKioqKioqKioqKiAKCiAgICAgICAgICAgICAgICAgei9BcmNoaXRlY3R1cmUKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogIDIgcGFnZSBrZXJuZWwgc3RhY2sgKgoJICAgICogICAgICAgICggOEsgKSAgICAgICAgKgogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgKiAgMiBwYWdlIHRhc2tfc3RydWN0ICAqICAgICAgICAKICAgICAgICAgICAgKiAgICAgICAgKCA4SyApICAgICAgICAqCjE2SyBhbGlnbmVkICoqKioqKioqKioqKioqKioqKioqKioqKiAKCldoYXQgdGhpcyBtZWFucyBpcyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZGVkaWNhdGUgYW55IHJlZ2lzdGVyIG9yIGdsb2JhbCB2YXJpYWJsZQp0byBwb2ludCB0byB0aGUgY3VycmVudCBydW5uaW5nIHByb2Nlc3MgJiBjYW4gcmV0cmlldmUgaXQgd2l0aCB0aGUgZm9sbG93aW5nCnZlcnkgc2ltcGxlIGNvbnN0cnVjdCBmb3Igcy8zOTAgJiBvbmUgdmVyeSBzaW1pbGFyIGZvciB6L0FyY2hpdGVjdHVyZS4KCnN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICogZ2V0X2N1cnJlbnQodm9pZCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudDsKICAgICAgICBfX2FzbV9fKCJsaGkgICAlMCwtODE5MlxuXHQiCiAgICAgICAgICAgICAgICAibnIgICAgJTAsMTUiCiAgICAgICAgICAgICAgICA6ICI9ciIgKGN1cnJlbnQpICk7CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Cn0KCmkuZS4ganVzdCBhbmRpbmcgdGhlIGN1cnJlbnQga2VybmVsIHN0YWNrIHBvaW50ZXIgd2l0aCB0aGUgbWFzayAtODE5Mi4KVGhhbmtmdWxseSBiZWNhdXNlIExpbnV4IGRvZXNuJ3QgaGF2ZSBzdXBwb3J0IGZvciBuZXN0ZWQgSU8gaW50ZXJydXB0cwomIG91ciBkZXZpY2VzIGhhdmUgbGFyZ2UgYnVmZmVycyBjYW4gc3Vydml2ZSBpbnRlcnJ1cHRzIGJlaW5nIHNodXQgZm9yIApzaG9ydCBhbW91bnRzIG9mIHRpbWUgd2UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHN0YWNrIGZvciBpbnRlcnJ1cHRzLgoKCgoKUmVnaXN0ZXIgVXNhZ2UgJiBTdGFja2ZyYW1lcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpPdmVydmlldzoKLS0tLS0tLS0tClRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnY2MgcHJvZHVjZXMgYXQgdGhlIHRvcCAmIHRoZSBib3R0b20gb2YKZWFjaCBmdW5jdGlvbi4gSXQgdXN1YWxseSBpcyBmYWlybHkgY29uc2lzdGVudCAmIHNpbWlsYXIgZnJvbSAKZnVuY3Rpb24gdG8gZnVuY3Rpb24gJiBpZiB5b3Uga25vdyBpdHMgbGF5b3V0IHlvdSBjYW4gcHJvYmFibHkKbWFrZSBzb21lIGhlYWR3YXkgaW4gZmluZGluZyB0aGUgdWx0aW1hdGUgY2F1c2Ugb2YgYSBwcm9ibGVtCmFmdGVyIGEgY3Jhc2ggd2l0aG91dCBhIHNvdXJjZSBsZXZlbCBkZWJ1Z2dlci4KCk5vdGU6IFRvIGZvbGxvdyBzdGFja2ZyYW1lcyByZXF1aXJlcyBhIGtub3dsZWRnZSBvZiBDIG9yIFBhc2NhbCAmCmxpbWl0ZWQga25vd2xlZGdlIG9mIG9uZSBhc3NlbWJseSBsYW5ndWFnZS4KCkl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0cyBhcyB0aGUgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0IGRpZG4ndCBoYXZlCnRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBsaW5rYWdlIGZvcm1hdHMuCgpHbG9zc2FyeToKLS0tLS0tLS0tCmFsbG9jYToKVGhpcyBpcyBhIGJ1aWx0IGluIGNvbXBpbGVyIGZ1bmN0aW9uIGZvciBydW50aW1lIGFsbG9jYXRpb24Kb2YgZXh0cmEgc3BhY2Ugb24gdGhlIGNhbGxlcnMgc3RhY2sgd2hpY2ggaXMgb2J2aW91c2x5IGZyZWVkCnVwIG9uIGZ1bmN0aW9uIGV4aXQgKCBlLmcuIHRoZSBjYWxsZXIgbWF5IGNob29zZSB0byBhbGxvY2F0ZSBub3RoaW5nCm9mIGEgYnVmZmVyIG9mIDRrIGlmIHJlcXVpcmVkIGZvciB0ZW1wb3JhcnkgcHVycG9zZXMgKSwgaXQgZ2VuZXJhdGVzIAp2ZXJ5IGVmZmljaWVudCBjb2RlICggYSBmZXcgY3ljbGVzICApIHdoZW4gY29tcGFyZWQgdG8gYWx0ZXJuYXRpdmVzIApsaWtlIG1hbGxvYy4KCmF1dG9tYXRpY3M6IFRoZXNlIGFyZSBsb2NhbCB2YXJpYWJsZXMgb24gdGhlIHN0YWNrLAppLmUgdGhleSBhcmVuJ3QgaW4gcmVnaXN0ZXJzICYgdGhleSBhcmVuJ3Qgc3RhdGljLgoKYmFjay1jaGFpbjoKVGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlIHN0YWNrIHBvaW50ZXIgYmVmb3JlIGVudGVyaW5nIGEKZnJhbWVkIGZ1bmN0aW9ucyAoIHNlZSBmcmFtZWxlc3MgZnVuY3Rpb24gKSBwcm9sb2d1ZSBnb3QgYnkgCmRlcmVmZXJlbmNpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgc3RhY2sgcG9pbnRlciwKIGkuZS4gZ290IGJ5IGFjY2Vzc2luZyB0aGUgMzIgYml0IHZhbHVlIGF0IHRoZSBzdGFjayBwb2ludGVycwpjdXJyZW50IGxvY2F0aW9uLgoKYmFzZS1wb2ludGVyOgpUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgYmFjayBvZiB0aGUgbGl0ZXJhbCBwb29sIHdoaWNoCmlzIGFuIGFyZWEganVzdCBiZWhpbmQgZWFjaCBwcm9jZWR1cmUgdXNlZCB0byBzdG9yZSBjb25zdGFudHMKaW4gZWFjaCBmdW5jdGlvbi4KCmNhbGwtY2xvYmJlcmVkOiBUaGUgY2FsbGVyIHByb2JhYmx5IG5lZWRzIHRvIHNhdmUgdGhlc2UgcmVnaXN0ZXJzIGlmIHRoZXJlIAppcyBzb21ldGhpbmcgb2YgdmFsdWUgaW4gdGhlbSwgb24gdGhlIHN0YWNrIG9yIGVsc2V3aGVyZSBiZWZvcmUgbWFraW5nIGEgCmNhbGwgdG8gYW5vdGhlciBwcm9jZWR1cmUgc28gdGhhdCBpdCBjYW4gcmVzdG9yZSBpdCBsYXRlci4KCmVwaWxvZ3VlOgpUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHRvIHJldHVybiB0byB0aGUgY2FsbGVyLgoKZnJhbWVsZXNzLWZ1bmN0aW9uCkEgZnJhbWVsZXNzIGZ1bmN0aW9uIGluIExpbnV4IGZvciBzMzkwICYgei9BcmNoaXRlY3R1cmUgaXMgb25lIHdoaWNoIGRvZXNuJ3QgCm5lZWQgbW9yZSB0aGFuIHRoZSByZWdpc3RlciBzYXZlIGFyZWEgKCA5NiBieXRlcyBvbiBzLzM5MCwgMTYwIG9uIHovQXJjaGl0ZWN0dXJlICkKZ2l2ZW4gdG8gaXQgYnkgdGhlIGNhbGxlci4KQSBmcmFtZWxlc3MgZnVuY3Rpb24gbmV2ZXI6CjEpIFNldHMgdXAgYSBiYWNrIGNoYWluLgoyKSBDYWxscyBhbGxvY2EuCjMpIENhbGxzIG90aGVyIG5vcm1hbCBmdW5jdGlvbnMKNCkgSGFzIGF1dG9tYXRpY3MuCgpHT1QtcG9pbnRlcjoKVGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlIGdsb2JhbC1vZmZzZXQtdGFibGUgaW4gRUxGCiggRXhlY3V0YWJsZSBMaW5rYWJsZSBGb3JtYXQsIExpbnV4J2VzIG1vc3QgY29tbW9uIGV4ZWN1dGFibGUgZm9ybWF0ICksCmFsbCBnbG9iYWxzICYgc2hhcmVkIGxpYnJhcnkgb2JqZWN0cyBhcmUgZm91bmQgdXNpbmcgdGhpcyBwb2ludGVyLgoKbGF6eS1iaW5kaW5nCkVMRiBzaGFyZWQgbGlicmFyaWVzIGFyZSB0eXBpY2FsbHkgb25seSBsb2FkZWQgd2hlbiByb3V0aW5lcyBpbiB0aGUgc2hhcmVkCmxpYnJhcnkgYXJlIGFjdHVhbGx5IGZpcnN0IGNhbGxlZCBhdCBydW50aW1lLiBUaGlzIGlzIGxhenkgYmluZGluZy4KCnByb2NlZHVyZS1saW5rYWdlLXRhYmxlClRoaXMgaXMgYSB0YWJsZSBmb3VuZCBmcm9tIHRoZSBHT1Qgd2hpY2ggY29udGFpbnMgcG9pbnRlcnMgdG8gcm91dGluZXMKaW4gb3RoZXIgc2hhcmVkIGxpYnJhcmllcyB3aGljaCBjYW4ndCBiZSBjYWxsZWQgdG8gYnkgZWFzaWVyIG1lYW5zLgoKcHJvbG9ndWU6ClRoZSBjb2RlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgdG8gc2V0IHVwIHRoZSBzdGFjayBmcmFtZS4KCm91dGdvaW5nLWFyZ3M6ClRoaXMgaXMgZXh0cmEgYXJlYSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlmIHRoZQpwYXJhbWV0ZXJzIGZvciB0aGUgY2FsbGVlJ3MgY2Fubm90IGFsbCBiZSBwdXQgaW4gcmVnaXN0ZXJzLCB0aGUgc2FtZQphcmVhIGNhbiBiZSByZXVzZWQgYnkgZWFjaCBmdW5jdGlvbiB0aGUgY2FsbGVyIGNhbGxzLgoKcm91dGluZS1kZXNjcmlwdG9yOgpBIENPRkYgIGV4ZWN1dGFibGUgZm9ybWF0IGJhc2VkIGNvbmNlcHQgb2YgYSBwcm9jZWR1cmUgcmVmZXJlbmNlIAphY3R1YWxseSBiZWluZyA4IGJ5dGVzIG9yIG1vcmUgYXMgb3Bwb3NlZCB0byBhIHNpbXBsZSBwb2ludGVyIHRvIHRoZSByb3V0aW5lLgpUaGlzIGlzIHR5cGljYWxseSBkZWZpbmVkIGFzIGZvbGxvd3MKUm91dGluZSBEZXNjcmlwdG9yIG9mZnNldCAwPVBvaW50ZXIgdG8gRnVuY3Rpb24KUm91dGluZSBEZXNjcmlwdG9yIG9mZnNldCA0PVBvaW50ZXIgdG8gVGFibGUgb2YgQ29udGVudHMKVGhlIHRhYmxlIG9mIGNvbnRlbnRzL1RPQyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYSBHT1QgcG9pbnRlci4KJiBpdCBtZWFucyB0aGF0IHNoYXJlZCBsaWJyYXJpZXMgZXRjLiBjYW4gYmUgc2hhcmVkIGJldHdlZW4gc2V2ZXJhbAplbnZpcm9ubWVudHMgZWFjaCB3aXRoIHRoZWlyIG93biBUT0MuCgogCnN0YXRpYy1jaGFpbjogVGhpcyBpcyB1c2VkIGluIG5lc3RlZCBmdW5jdGlvbnMgYSBjb25jZXB0IGFkb3B0ZWQgZnJvbSBwYXNjYWwgCmJ5IGdjYyBub3QgdXNlZCBpbiBhbnNpIEMgb3IgQysrICggYWx0aG91Z2ggcXVpdGUgdXNlZnVsICksIGJhc2ljYWxseSBpdAppcyBhIHBvaW50ZXIgdXNlZCB0byByZWZlcmVuY2UgbG9jYWwgdmFyaWFibGVzIG9mIGVuY2xvc2luZyBmdW5jdGlvbnMuCllvdSBtaWdodCBjb21lIGFjcm9zcyB0aGlzIHN0dWZmIG9uY2Ugb3IgdHdpY2UgaW4geW91ciBsaWZldGltZS4KCmUuZy4KVGhlIGZ1bmN0aW9uIGJlbG93IHNob3VsZCByZXR1cm4gMTEgdGhvdWdoIGdjYyBtYXkgZ2V0IHVwc2V0ICYgdG9zcyB3YXJuaW5ncyAKYWJvdXQgdW51c2VkIHZhcmlhYmxlcy4KaW50IEZ1bmN0aW9uQShpbnQgYSkKewoJaW50IGI7CglGdW5jdGlvbkMoaW50IGMpCgl7CgkJYj1jKzE7Cgl9CglGdW5jdGlvbkMoMTApOwoJcmV0dXJuKGIpOwp9CgoKcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBSZWdpc3RlciB1c2FnZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnIwICAgICAgIHVzZWQgYnkgc3lzY2FsbHMvYXNzZW1ibHkgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyMQkgdXNlZCBieSBzeXNjYWxscy9hc3NlbWJseSAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCnIyICAgICAgIGFyZ3VtZW50IDAgLyByZXR1cm4gdmFsdWUgMCAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyMyAgICAgICBhcmd1bWVudCAxIC8gcmV0dXJuIHZhbHVlIDEgKGlmIGxvbmcgbG9uZykgY2FsbC1jbG9iYmVyZWQKcjQgICAgICAgYXJndW1lbnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCnI1ICAgICAgIGFyZ3VtZW50IDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyNgkgYXJndW1lbnQgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnI3ICAgICAgIHBvaW50ZXItdG8gYXJndW1lbnRzIDUgdG8gLi4uICAgICAgICAgICAgICBzYXZlZCAgICAgIApyOCAgICAgICB0aGlzICYgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjkgICAgICAgdGhpcyAmIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnIxMCAgICAgIHN0YXRpYy1jaGFpbiAoIGlmIG5lc3RlZCBmdW5jdGlvbiApICAgICAgICBzYXZlZApyMTEgICAgICBmcmFtZS1wb2ludGVyICggaWYgZnVuY3Rpb24gdXNlZCBhbGxvY2EgKSAgc2F2ZWQKcjEyICAgICAgZ290LXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnIxMyAgICAgIGJhc2UtcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyMTQgICAgICByZXR1cm4tYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjE1ICAgICAgc3RhY2stcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCgpmMCAgICAgICBhcmd1bWVudCAwIC8gcmV0dXJuIHZhbHVlICggZmxvYXQvZG91YmxlICkgY2FsbC1jbG9iYmVyZWQKZjIgICAgICAgYXJndW1lbnQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCmY0ICAgICAgIHovQXJjaGl0ZWN0dXJlIGFyZ3VtZW50IDIgICAgICAgICAgICAgICAgICBzYXZlZApmNiAgICAgICB6L0FyY2hpdGVjdHVyZSBhcmd1bWVudCAzICAgICAgICAgICAgICAgICAgc2F2ZWQKVGhlIHJlbWFpbmluZyBmbG9hdGluZyBwb2ludHMKZjEsZjMsZjUgZjctZjE1IGFyZSBjYWxsLWNsb2JiZXJlZC4KCk5vdGVzOgotLS0tLS0KMSkgVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCByZWdpc3RlcnMgd2hpY2ggYXJlIHVzZWQKYnkgdGhlIGNhbGxlZSBhcmUgc2F2ZWQsIGUuZy4gdGhlIGNvbXBpbGVyIGlzIHBlcmZlY3RseQpjYXBpYmxlIG9mIHVzaW5nIHIxMSBmb3IgcHVycG9zZXMgb3RoZXIgdGhhbiBhIGZyYW1lIGEKZnJhbWUgcG9pbnRlciBpZiBhIGZyYW1lIHBvaW50ZXIgaXMgbm90IG5lZWRlZC4KMikgSW4gZnVuY3Rpb25zIHdpdGggdmFyaWFibGUgYXJndW1lbnRzIGUuZy4gcHJpbnRmIHRoZSBjYWxsaW5nIHByb2NlZHVyZSAKaXMgaWRlbnRpY2FsIHRvIG9uZSB3aXRob3V0IHZhcmlhYmxlIGFyZ3VtZW50cyAmIHRoZSBzYW1lIG51bWJlciBvZiAKcGFyYW1ldGVycy4gSG93ZXZlciwgdGhlIHByb2xvZ3VlIG9mIHRoaXMgZnVuY3Rpb24gaXMgc29tZXdoYXQgbW9yZQpoYWlyeSBvd2luZyB0byBpdCBoYXZpbmcgdG8gbW92ZSB0aGVzZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdGFjayB0bwpnZXQgdmFfc3RhcnQsIHZhX2FyZyAmIHZhX2VuZCB0byB3b3JrLgozKSBBY2Nlc3MgcmVnaXN0ZXJzIGFyZSBjdXJyZW50bHkgdW51c2VkIGJ5IGdjYyBidXQgYXJlIHVzZWQgaW4KdGhlIGtlcm5lbC4gUG9zc2liaWxpdGllcyBleGlzdCB0byB1c2UgdGhlbSBhdCB0aGUgbW9tZW50IGZvcgp0ZW1wb3Jhcnkgc3RvcmFnZSBidXQgaXQgaXNuJ3QgcmVjb21tZW5kZWQuCjQpIE9ubHkgNCBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvcgpwYXJhbWV0ZXIgcGFzc2luZyBhcyBvbGRlciBtYWNoaW5lcyBzdWNoIGFzIEczIG9ubHkgaGF2ZSBvbmx5IDQKJiBpdCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgY29tcGF0aWJsZSB3aXRoIG90aGVyIGNvbXBpbGVycy4KSG93ZXZlciB3aXRoIElFRUUgZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uIHVuZGVyIGxpbnV4IG9uIHRoZQpvbGRlciBtYWNoaW5lcyB5b3UgYXJlIGZyZWUgdG8gdXNlIHRoZSBvdGhlciAxMi4KNSkgQSBsb25nIGxvbmcgb3IgZG91YmxlIHBhcmFtZXRlciBjYW5ub3QgYmUgaGF2ZSB0aGUgCmZpcnN0IDQgYnl0ZXMgaW4gYSByZWdpc3RlciAmIHRoZSBzZWNvbmQgZm91ciBieXRlcyBpbiB0aGUgCm91dGdvaW5nIGFyZ3MgYXJlYS4gSXQgbXVzdCBiZSBwdXJlbHkgaW4gdGhlIG91dGdvaW5nIGFyZ3MKYXJlYSBpZiBjcm9zc2luZyB0aGlzIGJvdW5kYXJ5Lgo2KSBGbG9hdGluZyBwb2ludCBwYXJhbWV0ZXJzIGFyZSBtaXhlZCB3aXRoIG91dGdvaW5nIGFyZ3MKb24gdGhlIG91dGdvaW5nIGFyZ3MgYXJlYSBpbiB0aGUgb3JkZXIgdGhlIGFyZSBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycy4KNykgRmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIDIgJiAzIGFyZSBzYXZlZCBpbiB0aGUgb3V0Z29pbmcgYXJncyBhcmVhIGZvciAKei9BcmNoaXRlY3R1cmUKCgpTdGFjayBGcmFtZSBMYXlvdXQKLS0tLS0tLS0tLS0tLS0tLS0tCnMvMzkwICAgICB6L0FyY2hpdGVjdHVyZQowICAgICAgICAgMCAgICAgICAgICAgICBiYWNrIGNoYWluICggYSAwIGhlcmUgc2lnbmlmaWVzIGVuZCBvZiBiYWNrIGNoYWluICkKNCAgICAgICAgIDggICAgICAgICAgICAgZW9zICggZW5kIG9mIHN0YWNrLCBub3QgdXNlZCBvbiBMaW51eCBmb3IgUzM5MCB1c2VkIGluIG90aGVyIGxpbmthZ2UgZm9ybWF0cyApCjggICAgICAgICAxNiAgICAgICAgICAgIGdsdWUgdXNlZCBpbiBvdGhlciBzLzM5MCBsaW5rYWdlIGZvcm1hdHMgZm9yIHNhdmVkIHJvdXRpbmUgZGVzY3JpcHRvcnMgZXRjLgoxMiAgICAgICAgMjQgICAgICAgICAgICBnbHVlIHVzZWQgaW4gb3RoZXIgcy8zOTAgbGlua2FnZSBmb3JtYXRzIGZvciBzYXZlZCByb3V0aW5lIGRlc2NyaXB0b3JzIGV0Yy4KMTYgICAgICAgIDMyICAgICAgICAgICAgc2NyYXRjaCBhcmVhCjIwICAgICAgICA0MCAgICAgICAgICAgIHNjcmF0Y2ggYXJlYQoyNCAgICAgICAgNDggICAgICAgICAgICBzYXZlZCByNiBvZiBjYWxsZXIgZnVuY3Rpb24KMjggICAgICAgIDU2ICAgICAgICAgICAgc2F2ZWQgcjcgb2YgY2FsbGVyIGZ1bmN0aW9uCjMyICAgICAgICA2NCAgICAgICAgICAgIHNhdmVkIHI4IG9mIGNhbGxlciBmdW5jdGlvbgozNiAgICAgICAgNzIgICAgICAgICAgICBzYXZlZCByOSBvZiBjYWxsZXIgZnVuY3Rpb24KNDAgICAgICAgIDgwICAgICAgICAgICAgc2F2ZWQgcjEwIG9mIGNhbGxlciBmdW5jdGlvbgo0NCAgICAgICAgODggICAgICAgICAgICBzYXZlZCByMTEgb2YgY2FsbGVyIGZ1bmN0aW9uCjQ4ICAgICAgICA5NiAgICAgICAgICAgIHNhdmVkIHIxMiBvZiBjYWxsZXIgZnVuY3Rpb24KNTIgICAgICAgIDEwNCAgICAgICAgICAgc2F2ZWQgcjEzIG9mIGNhbGxlciBmdW5jdGlvbgo1NiAgICAgICAgMTEyICAgICAgICAgICBzYXZlZCByMTQgb2YgY2FsbGVyIGZ1bmN0aW9uCjYwICAgICAgICAxMjAgICAgICAgICAgIHNhdmVkIHIxNSBvZiBjYWxsZXIgZnVuY3Rpb24KNjQgICAgICAgIDEyOCAgICAgICAgICAgc2F2ZWQgZjQgb2YgY2FsbGVyIGZ1bmN0aW9uCjcyICAgICAgICAxMzIgICAgICAgICAgIHNhdmVkIGY2IG9mIGNhbGxlciBmdW5jdGlvbgo4MCAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQKOTYgICAgICAgIDE2MCAgICAgICAgICAgb3V0Z29pbmcgYXJncyBwYXNzZWQgZnJvbSBjYWxsZXIgdG8gY2FsbGVlCjk2K3ggICAgICAxNjAreCAgICAgICAgIHBvc3NpYmxlIHN0YWNrIGFsaWdubWVudCAoIDggYnl0ZXMgZGVzaXJhYmxlICkKOTYreCt5ICAgIDE2MCt4K3kgICAgICAgYWxsb2NhIHNwYWNlIG9mIGNhbGxlciAoIGlmIHVzZWQgKQo5Nit4K3kreiAgMTYwK3greSt6ICAgICBhdXRvbWF0aWNzIG9mIGNhbGxlciAoIGlmIHVzZWQgKQowICAgICAgICAgICAgICAgICAgICAgICBiYWNrLWNoYWluCgpBIHNhbXBsZSBwcm9ncmFtIHdpdGggY29tbWVudHMuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbW1lbnRzIG9uIHRoZSBmdW5jdGlvbiB0ZXN0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjEpIEl0IGRpZG4ndCBuZWVkIHRvIHNldCB1cCBhIHBvaW50ZXIgdG8gdGhlIGNvbnN0YW50IHBvb2wgZ3ByMTMgYXMgaXQgaXNuJ3QgdXNlZAooIDotKCApLgoyKSBUaGlzIGlzIGEgZnJhbWVsZXNzIGZ1bmN0aW9uICYgbm8gc3RhY2sgaXMgYm91Z2h0LgozKSBUaGUgY29tcGlsZXIgd2FzIGNsZXZlciBlbm91Z2ggdG8gcmVjb2duaXNlIHRoYXQgaXQgY291bGQgcmV0dXJuIHRoZQp2YWx1ZSBpbiByMiBhcyB3ZWxsIGFzIHVzZSBpdCBmb3IgdGhlIHBhc3NlZCBpbiBwYXJhbWV0ZXIgKCA6LSkgKS4KNCkgVGhlIGJhc3IgKCBicmFuY2ggcmVsYXRpdmUgJiBzYXZlICkgdHJpY2sgd29ya3MgYXMgZm9sbG93cyB0aGUgaW5zdHJ1Y3Rpb24gCmhhcyBhIHNwZWNpYWwgY2FzZSB3aXRoIHIwLHIwIHdpdGggc29tZSBpbnN0cnVjdGlvbiBvcGVyYW5kcyBpcyB1bmRlcnN0b29kIGFzIAp0aGUgbGl0ZXJhbCB2YWx1ZSAwLCBzb21lIHJpc2MgYXJjaGl0ZWN0dXJlcyBhbHNvIGRvIHRoaXMgKS4gU28gbm93CndlIGFyZSBicmFuY2hpbmcgdG8gdGhlIG5leHQgYWRkcmVzcyAmIHRoZSBhZGRyZXNzIG5ldyBwcm9ncmFtIGNvdW50ZXIgaXMKaW4gcjEzLHNvIG5vdyB3ZSBzdWJ0cmFjdCB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUgd2UgaGF2ZSBleGVjdXRlZAorIHRoZSBzaXplIG9mIHRoZSBsaXRlcmFsIHBvb2wgdG8gZ2V0IHRvIHRoZSB0b3Agb2YgdGhlIGxpdGVyYWwgcG9vbAowMDQwMDM3YyBpbnQgdGVzdChpbnQgYikKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIHByb2xvZ3VlIGJlbG93CiAgNDAwMzdjOgk5MCBkZSBmMCAzNCAJc3RtCSVyMTMsJXIxNCw1MiglcjE1KSAjIFNhdmUgcmVnaXN0ZXJzIHIxMyAmIHIxNAogIDQwMDM4MDoJMGQgZDAgICAgICAgCWJhc3IJJXIxMywlcjAgICAgICAgICAgICMgU2V0IHVwIHBvaW50ZXIgdG8gY29uc3RhbnQgcG9vbCB1c2luZwogIDQwMDM4MjoJYTcgZGEgZmYgZmEgCWFoaQklcjEzLC02ICAgICAgICAgICAgIyBiYXNyIHRyaWNrCglyZXR1cm4oNStiKTsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSHVnZSBtYWluIHByb2dyYW0KICA0MDAzODY6CWE3IDJhIDAwIDA1IAlhaGkJJXIyLDUgICAgICAgICAgICAgICMgYWRkIDUgdG8gcjIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGdW5jdGlvbiBlcGlsb2d1ZSBiZWxvdyAKICA0MDAzOGE6CTk4IGRlIGYwIDM0IAlsbQklcjEzLCVyMTQsNTIoJXIxNSkgIyByZXN0b3JlIHJlZ2lzdGVycyByMTMgJiAxNAogIDQwMDM4ZToJMDcgZmUgICAgICAgCWJyCSVyMTQgICAgICAgICAgICAgICAjIHJldHVybgp9CgpDb21tZW50cyBvbiB0aGUgZnVuY3Rpb24gbWFpbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoxKSBUaGUgY29tcGlsZXIgZGlkIHRoaXMgZnVuY3Rpb24gb3B0aW1hbGx5ICggOC0pICkKCkxpdGVyYWwgcG9vbCBmb3IgbWFpbi4KNDAwMzkwOglmZiBmZiBmZiBlYyAJLmxvbmcgMHhmZmZmZmZlYwptYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIHByb2xvZ3VlIGJlbG93CiAgNDAwMzk0Ogk5MCBiZiBmMCAyYyAJc3RtCSVyMTEsJXIxNSw0NCglcjE1KSAjIFNhdmUgbmVjZXNzYXJ5IHJlZ2lzdGVycwogIDQwMDM5ODoJMTggMGYgICAgICAgCWxyCSVyMCwlcjE1ICAgICAgICAgICAjIGNvcHkgc3RhY2sgcG9pbnRlciB0byByMAogIDQwMDM5YToJYTcgZmEgZmYgYTAgCWFoaQklcjE1LC05NiAgICAgICAgICAgIyBNYWtlIGFyZWEgZm9yIGNhbGxlZSBzYXZpbmcgCiAgNDAwMzllOgkwZCBkMCAgICAgICAJYmFzcgklcjEzLCVyMCAgICAgICAgICAgIyBTZXQgdXAgcjEzIHRvIHBvaW50IHRvCiAgNDAwM2EwOglhNyBkYSBmZiBmMCAJYWhpCSVyMTMsLTE2ICAgICAgICAgICAjIGxpdGVyYWwgcG9vbAogIDQwMDNhNDoJNTAgMDAgZjAgMDAgCXN0CSVyMCwwKCVyMTUpICAgICAgICAjIFNhdmUgYmFja2NoYWluCgoJcmV0dXJuKHRlc3QoNSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWluIFByb2dyYW0gQmVsb3cKICA0MDAzYTg6CTU4IGUwIGQwIDAwIAlsCSVyMTQsMCglcjEzKSAgICAgICAjIGxvYWQgcmVsYXRpdmUgYWRkcmVzcyBvZiB0ZXN0IGZyb20KCQkJCQkJICAgICAgICAgICAjIGxpdGVyYWwgcG9vbAogIDQwMDNhYzoJYTcgMjggMDAgMDUgCWxoaQklcjIsNSAgICAgICAgICAgICAgIyBTZXQgZmlyc3QgcGFyYW1ldGVyIHRvIDUKICA0MDAzYjA6CTRkIGVlIGQwIDAwIAliYXMJJXIxNCwwKCVyMTQsJXIxMykgICMganVtcCB0byB0ZXN0IHNldHRpbmcgcjE0IGFzIHJldHVybgoJCQkJCQkJICAgIyBhZGRyZXNzIHVzaW5nIGJyYW5jaCAmIHNhdmUgaW5zdHJ1Y3Rpb24uCgoJCQkJCQkJICAgIyBGdW5jdGlvbiBFcGlsb2d1ZSBiZWxvdwogIDQwMDNiNDoJOTggYmYgZjAgOGMgCWxtCSVyMTEsJXIxNSwxNDAoJXIxNSkjIFJlc3RvcmUgbmVjZXNzYXJ5IHJlZ2lzdGVycy4KICA0MDAzYjg6CTA3IGZlICAgICAgIAlicgklcjE0ICAgICAgICAgICAgICAgIyByZXR1cm4gdG8gZG8gcHJvZ3JhbSBleGl0IAp9CgoKQ29tcGlsZXIgdXBkYXRlcwotLS0tLS0tLS0tLS0tLS0tCgptYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKewogIDQwMDRmYzoJOTAgN2YgZjAgMWMgICAgICAgCXN0bQklcjcsJXIxNSwyOCglcjE1KQogIDQwMDUwMDoJYTcgZDUgMDAgMDQgICAgICAgCWJyYXMJJXIxMyw0MDA1MDggPG1haW4rMHhjPgogIDQwMDUwNDoJMDAgNDAgMDQgZjQgICAgICAgCS5sb25nCTB4MDA0MDA0ZjQgCiAgIyBjb21waWxlciBub3cgcHV0cyBjb25zdGFudCBwb29sIGluIGNvZGUgdG8gc28gaXQgc2F2ZXMgYW4gaW5zdHJ1Y3Rpb24gCiAgNDAwNTA4OgkxOCAwZiAgICAgICAgICAgICAJbHIJJXIwLCVyMTUKICA0MDA1MGE6CWE3IGZhIGZmIGEwICAgICAgIAlhaGkJJXIxNSwtOTYKICA0MDA1MGU6CTUwIDAwIGYwIDAwICAgICAgIAlzdAklcjAsMCglcjE1KQoJcmV0dXJuKHRlc3QoNSkpOwogIDQwMDUxMjoJNTggMTAgZDAgMDAgICAgICAgCWwJJXIxLDAoJXIxMykKICA0MDA1MTY6CWE3IDI4IDAwIDA1ICAgICAgIAlsaGkJJXIyLDUKICA0MDA1MWE6CTBkIGUxICAgICAgICAgICAgIAliYXNyCSVyMTQsJXIxCiAgIyBjb21waWxlciBhZGRzIDEgZXh0cmEgaW5zdHJ1Y3Rpb24gdG8gZXBpbG9ndWUgdGhpcyBpcyBkb25lIHRvCiAgIyBhdm9pZCBwcm9jZXNzb3IgcGlwZWxpbmUgc3RhbGxzIG93aW5nIHRvIGRhdGEgZGVwZW5kZW5jaWVzIG9uIGc1ICYKICAjIGFib3ZlIGFzIHJlZ2lzdGVyIDE0IGluIHRoZSBvbGQgY29kZSB3YXMgbmVlZGVkIGRpcmVjdGx5IGFmdGVyIGJlaW5nIGxvYWRlZCAKICAjIGJ5IHRoZSBsbQklcjExLCVyMTUsMTQwKCVyMTUpIGZvciB0aGUgYnIgJTE0LgogIDQwMDUxYzoJNTggNDAgZjAgOTggICAgICAgCWwJJXI0LDE1MiglcjE1KQogIDQwMDUyMDoJOTggN2YgZjAgN2MgICAgICAgCWxtCSVyNywlcjE1LDEyNCglcjE1KQogIDQwMDUyNDoJMDcgZjQgICAgICAgICAgICAgCWJyCSVyNAp9CgoKSGFydG11dCAoIG91ciBjb21waWxlciBkZXZlbG9wZXIgKSBhbHNvIGhhcyBiZWVuIHRocmVhdGVuaW5nIHRvIHRha2Ugb3V0IHRoZQpzdGFjayBiYWNrY2hhaW4gaW4gb3B0aW1pc2VkIGNvZGUgYXMgdGhpcyBhbHNvIGNhdXNlcyBwaXBlbGluZSBzdGFsbHMsIHlvdQpoYXZlIGJlZW4gd2FybmVkLgoKNjQgYml0IHovQXJjaGl0ZWN0dXJlIGNvZGUgZGlzYXNzZW1ibHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCklmIHlvdSB1bmRlcnN0YW5kIHRoZSBzdHVmZiBhYm92ZSB5b3UnbGwgdW5kZXJzdGFuZCB0aGUgc3R1ZmYKYmVsb3cgdG9vIHNvIEknbGwgYXZvaWQgcmVwZWF0aW5nIG15c2VsZiAmIGp1c3Qgc2F5IHRoYXQgCnNvbWUgb2YgdGhlIGluc3RydWN0aW9ucyBoYXZlIGcncyBvbiB0aGUgZW5kIG9mIHRoZW0gdG8gaW5kaWNhdGUKdGhleSBhcmUgNjQgYml0ICYgdGhlIHN0YWNrIG9mZnNldHMgYXJlIGEgYmlnZ2VyLCAKdGhlIG9ubHkgb3RoZXIgZGlmZmVyZW5jZSB5b3UnbGwgZmluZCBiZXR3ZWVuIDMyICYgNjQgYml0IGlzIHRoYXQKd2Ugbm93IHVzZSBmNCAmIGY2IGZvciBmbG9hdGluZyBwb2ludCBhcmd1bWVudHMgb24gNjQgYml0LgowMDAwMDAwMDgwMDAwNWIwIDx0ZXN0PjoKaW50IHRlc3QoaW50IGIpCnsKCXJldHVybig1K2IpOwogICAgODAwMDA1YjA6CWE3IDJhIDAwIDA1ICAgICAgIAlhaGkJJXIyLDUKICAgIDgwMDAwNWI0OgliOSAxNCAwMCAyMiAgICAgICAJbGdmcgklcjIsJXIyICMgZG93bmNhc3QgdG8gaW50ZWdlcgogICAgODAwMDA1Yjg6CTA3IGZlICAgICAgICAgICAgIAlicgklcjE0CiAgICA4MDAwMDViYToJMDcgMDcgICAgICAgICAgICAgCWJjcgkwLCVyNwoKCn0KCjAwMDAwMDAwODAwMDA1YmMgPG1haW4+OgptYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKeyAKICAgIDgwMDAwNWJjOgllYiBiZiBmMCA1OCAwMCAyNCAJc3RtZwklcjExLCVyMTUsODgoJXIxNSkKICAgIDgwMDAwNWMyOgliOSAwNCAwMCAxZiAgICAgICAJbGdyCSVyMSwlcjE1CiAgICA4MDAwMDVjNjoJYTcgZmIgZmYgNjAgICAgICAgCWFnaGkJJXIxNSwtMTYwCiAgICA4MDAwMDVjYToJZTMgMTAgZjAgMDAgMDAgMjQgCXN0ZwklcjEsMCglcjE1KQoJcmV0dXJuKHRlc3QoNSkpOwogICAgODAwMDA1ZDA6CWE3IDI5IDAwIDA1ICAgICAgIAlsZ2hpCSVyMiw1CiAgICAjIGJyYXNsIGFsbG93cyBqdW1wcyA+IDY0ayAmIGlzIG92ZXJraWxsIGhlcmUgYnJhcyB3b3VsZCBkbyBmdW5lCiAgICA4MDAwMDVkNDoJYzAgZTUgZmYgZmYgZmYgZWUgCWJyYXNsCSVyMTQsODAwMDA1YjAgPHRlc3Q+IAogICAgODAwMDA1ZGE6CWUzIDQwIGYxIDEwIDAwIDA0IAlsZwklcjQsMjcyKCVyMTUpCiAgICA4MDAwMDVlMDoJZWIgYmYgZjAgZjggMDAgMDQgCWxtZwklcjExLCVyMTUsMjQ4KCVyMTUpCiAgICA4MDAwMDVlNjoJMDcgZjQgICAgICAgICAgICAgCWJyCSVyNAp9CgoKCkNvbXBpbGluZyBwcm9ncmFtcyBmb3IgZGVidWdnaW5nIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1nZHdhcmYtMiBub3cgd29ya3MgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhlIGRlZmF1bHQgZGVidWdnaW5nCmZvcm1hdCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBhcyBpdCBpcyBtb3JlIHJlbGlhYmxlIGZvciBkZWJ1Z2dpbmcKc2hhcmVkIGxpYnJhcmllcywgIG5vcm1hbCAtZyBkZWJ1Z2dpbmcgd29ya3MgbXVjaCBiZXR0ZXIgbm93ClRoYW5rcyB0byB0aGUgSUJNIGphdmEgY29tcGlsZXIgZGV2ZWxvcGVycyBidWcgcmVwb3J0cy4gCgpUaGlzIGlzIHR5cGljYWxseSBkb25lIGFkZGluZy9hcHBlbmRpbmcgdGhlIGZsYWdzIC1nIG9yIC1nZHdhcmYtMiB0byB0aGUgCkNGTEFHUyAmIExERkxBR1MgdmFyaWFibGVzIE1ha2VmaWxlIG9mIHRoZSBwcm9ncmFtIGNvbmNlcm5lZC4KCklmIHVzaW5nIGdkYiAmIHlvdSB3b3VsZCBsaWtlIGFjY3VyYXRlIGRpc3BsYXlzIG9mIHJlZ2lzdGVycyAmCiBzdGFjayB0cmFjZXMgY29tcGlsZSB3aXRob3V0IG9wdGltaXNhdGlvbiBpLmUgbWFrZSBzdXJlCnRoYXQgdGhlcmUgaXMgbm8gLU8yIG9yIHNpbWlsYXIgb24gdGhlIENGTEFHUyBsaW5lIG9mIHRoZSBNYWtlZmlsZSAmCnRoZSBlbWl0dGVkIGdjYyBjb21tYW5kcywgb2J2aW91c2x5IHRoaXMgd2lsbCBwcm9kdWNlIHdvcnNlIGNvZGUgCiggbm90IGFkdmlzYWJsZSBmb3Igc2hpcG1lbnQgKSBidXQgaXQgaXMgYW4gIGFpZCB0byB0aGUgZGVidWdnaW5nIHByb2Nlc3MuCgpUaGlzIGFpZHMgZGVidWdnaW5nIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHdpbGwgY29weSBwYXJhbWV0ZXJzIHBhc3NlZCBpbgppbiByZWdpc3RlcnMgb250byB0aGUgc3RhY2sgc28gYmFja3RyYWNpbmcgJiBsb29raW5nIGF0IHBhc3NlZCBpbgpwYXJhbWV0ZXJzIHdpbGwgd29yaywgaG93ZXZlciBzb21lIGxhcmdlciBwcm9ncmFtcyB3aGljaCB1c2UgaW5saW5lIGZ1bmN0aW9ucwp3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgb3B0aW1pc2F0aW9uLgoKRGVidWdnaW5nIHdpdGggb3B0aW1pc2F0aW9uIGhhcyBzaW5jZSBtdWNoIGltcHJvdmVkIGFmdGVyIGZpeGluZwpzb21lIGJ1Z3MsIHBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBnZGItNS4wIG9yIGxhdGVyIGRldmVsb3BlZCAKYWZ0ZXIgTm92JzIwMDAuCgpGaWd1cmluZyBvdXQgZ2NjIGNvbXBpbGUgZXJyb3JzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWYgeW91IGFyZSBnZXR0aW5nIGEgbG90IG9mIHN5bnRheCBlcnJvcnMgY29tcGlsaW5nIGEgcHJvZ3JhbSAmIHRoZSBwcm9ibGVtCmlzbid0IGJsYXRhbnRseSBvYnZpb3VzIGZyb20gdGhlIHNvdXJjZS4KSXQgb2Z0ZW4gaGVscHMgdG8ganVzdCBwcmVwcm9jZXNzIHRoZSBmaWxlLCB0aGlzIGlzIGRvbmUgd2l0aCB0aGUgLUUKb3B0aW9uIGluIGdjYy4KV2hhdCB0aGlzIGRvZXMgaXMgdGhhdCBpdCBydW5zIHRocm91Z2ggdGhlIHZlcnkgZmlyc3QgcGhhc2Ugb2YgY29tcGlsYXRpb24KKCBjb21waWxhdGlvbiBpbiBnY2MgaXMgZG9uZSBpbiBzZXZlcmFsIHN0YWdlcyAmIGdjYyBjYWxscyBtYW55IHByb2dyYW1zIHRvCmFjaGlldmUgaXRzIGVuZCByZXN1bHQgKSB3aXRoIHRoZSAtRSBvcHRpb24gZ2NjIGp1c3QgY2FsbHMgdGhlIGdjYyBwcmVwcm9jZXNzb3IgKGNwcCkuClRoZSBjIHByZXByb2Nlc3NvciBkb2VzIHRoZSBmb2xsb3dpbmcsIGl0IGpvaW5zIGFsbCB0aGUgZmlsZXMgI2luY2x1ZGVkIHRvZ2V0aGVyCnJlY3Vyc2l2ZWx5ICggI2luY2x1ZGUgZmlsZXMgY2FuICNpbmNsdWRlIG90aGVyIGZpbGVzICkgJiBhbHNvIHRoZSBjIGZpbGUgeW91IHdpc2ggdG8gY29tcGlsZS4KSXQgcHV0cyBhIGZ1bGx5IHF1YWxpZmllZCBwYXRoIG9mIHRoZSAjaW5jbHVkZWQgZmlsZXMgaW4gYSBjb21tZW50ICYgaXQKZG9lcyBtYWNybyBleHBhbnNpb24uClRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYmVjYXVzZQoxKSBZb3UgY2FuIGRvdWJsZSBjaGVjayB3aGV0aGVyIHRoZSBmaWxlcyB5b3UgZXhwZWN0IHRvIGJlIGluY2x1ZGVkIGFyZSB0aGUgb25lcwp0aGF0IGFyZSBiZWluZyBpbmNsdWRlZCAoIGUuZy4gZG91YmxlIGNoZWNrIHRoYXQgeW91IGFyZW4ndCBnb2luZyB0byB0aGUgaTM4NiBhc20gZGlyZWN0b3J5ICkuCjIpIENoZWNrIHRoYXQgbWFjcm8gZGVmaW5pdGlvbnMgYXJlbid0IGNsYXNoaW5nIHdpdGggdHlwZWRlZnMsCjMpIENoZWNrIHRoYXQgZGVmaW5pdGlvbnMgYXJlbid0IGJlaW5nIHVzZWQgYmVmb3JlIHRoZXkgYXJlIGJlaW5nIGluY2x1ZGVkLgo0KSBIZWxwcyBwdXQgdGhlIGxpbmUgZW1pdHRpbmcgdGhlIGVycm9yIHVuZGVyIHRoZSBtaWNyb3Njb3BlIGlmIGl0IGNvbnRhaW5zIG1hY3Jvcy4KCkZvciBjb252ZW5pZW5jZSB0aGUgTGludXgga2VybmVsJ3MgbWFrZWZpbGUgd2lsbCBkbyBwcmVwcm9jZXNzaW5nIGF1dG9tYXRpY2FsbHkgZm9yIHlvdQpieSBzdWZmaXhpbmcgdGhlIGZpbGUgeW91IHdhbnQgYnVpbHQgd2l0aCAuaSAoIGluc3RlYWQgb2YgLm8gKQoKZS5nLgpmcm9tIHRoZSBsaW51eCBkaXJlY3RvcnkgdHlwZQptYWtlIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmkKdGhpcyB3aWxsIGJ1aWxkCgpzMzkwLWdjYyAtRF9fS0VSTkVMX18gLUkvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIKLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfX1NNUF9fIC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlICAgLUUgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYwo+IGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmkgIAoKTm93IGxvb2sgYXQgc2lnbmFsLmkgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UuCgoKIyAxICIvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUvYXNtL3R5cGVzLmgiIDEKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90Owp0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKdHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OwoKSWYgaW5zdGVhZCB5b3UgYXJlIGdldHRpbmcgZXJyb3JzIGZ1cnRoZXIgZG93biBlLmcuCnVua25vd24gaW5zdHJ1Y3Rpb246MjUxNSAibW92ZS5sIiBvciBiZXR0ZXIgc3RpbGwgdW5rbm93biBpbnN0cnVjdGlvbjoyNTE1IAoiRml4bWUgbm90IGltcGxlbWVudGVkIHlldCwgY2FsbCBNYXJ0aW4iIHlvdSBhcmUgcHJvYmFibHkgYXJlIGF0dGVtcHRpbmcgdG8gY29tcGlsZSBzb21lIGNvZGUgCm1lYW50IGZvciBhbm90aGVyIGFyY2hpdGVjdHVyZSBvciBjb2RlIHRoYXQgaXMgc2ltcGx5IG5vdCBpbXBsZW1lbnRlZCwgd2l0aCBhIGZpeG1lIHN0YXRlbWVudApzdHVjayBpbnRvIHRoZSBpbmxpbmUgYXNzZW1ibHkgY29kZSBzbyB0aGF0IHRoZSBhdXRob3Igb2YgdGhlIGZpbGUgbm93IGtub3dzIGhlIGhhcyB3b3JrIHRvIGRvLgpUbyBsb29rIGF0IHRoZSBhc3NlbWJseSBlbWl0dGVkIGJ5IGdjYyBqdXN0IGJlZm9yZSBpdCBpcyBhYm91dCB0byBjYWxsIGdhcyAoIHRoZSBnbnUgYXNzZW1ibGVyICkKdXNlIHRoZSAtUyBvcHRpb24uCkFnYWluIGZvciB5b3VyIGNvbnZlbmllbmNlIHRoZSBMaW51eCBrZXJuZWwncyBNYWtlZmlsZSB3aWxsIGhvbGQgeW91ciBoYW5kICYKZG8gYWxsIHRoaXMgZG9ua2V5IHdvcmsgZm9yIHlvdSBhbHNvIGJ5IGJ1aWxkaW5nIHRoZSBmaWxlIHdpdGggdGhlIC5zIHN1ZmZpeC4KZS5nLgpmcm9tIHRoZSBMaW51eCBkaXJlY3RvcnkgdHlwZSAKbWFrZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5zIAoKczM5MC1nY2MgLURfX0tFUk5FTF9fIC1JL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCi1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX19TTVBfXyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgLVMgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyAKLW8gYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwucyAgCgoKVGhpcyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZSwgKCBwbGVhc2Ugbm90ZSB0aGUgY29uc3RhbnQgcG9vbCAmIHRoZSB1c2VmdWwgY29tbWVudHMKaW4gdGhlIHByb2xvZ3VlIHRvIGdpdmUgeW91IGEgaGFuZCBhdCBpbnRlcnByZXRpbmcgaXQgKS4KCi5MQzU0OgoJLnN0cmluZwkibWlzYWxpZ25lZCAoX191MTYgKikgaW4gX194Y2hnXG4iCi5MQzU3OgoJLnN0cmluZwkibWlzYWxpZ25lZCAoX191MzIgKikgaW4gX194Y2hnXG4iCi5MJFBHMTogIyBQb29sIHN5c19zaWdzdXNwZW5kCi5MQzE5MjoKCS5sb25nCS0yNjI0MDEKLkxDMTkzOgoJLmxvbmcJLTEKLkxDMTk0OgoJLmxvbmcJc2NoZWR1bGUtLkwkUEcxCi5MQzE5NToKCS5sb25nCWRvX3NpZ25hbC0uTCRQRzEKCS5hbGlnbiA0Ci5nbG9ibCBzeXNfc2lnc3VzcGVuZAoJLnR5cGUJIHN5c19zaWdzdXNwZW5kLEBmdW5jdGlvbgpzeXNfc2lnc3VzcGVuZDoKIwlsZWFmIGZ1bmN0aW9uICAgICAgICAgICAwCiMJYXV0b21hdGljcyAgICAgICAgICAgICAgMTYKIwlvdXRnb2luZyBhcmdzICAgICAgICAgICAwCiMJbmVlZCBmcmFtZSBwb2ludGVyICAgICAgMAojCWNhbGwgYWxsb2NhICAgICAgICAgICAgIDAKIwloYXMgdmFyYXJncyAgICAgICAgICAgICAwCiMJaW5jb21pbmcgYXJncyAoc3RhY2spICAgMAojCWZ1bmN0aW9uIGxlbmd0aCAgICAgICAgIDE2OAoJU1RNCTgsMTUsMzIoMTUpCglMUgkwLDE1CglBSEkJMTUsLTExMgoJQkFTUgkxMywwCi5MJENPMToJQUhJCTEzLC5MJFBHMS0uTCRDTzEKCVNUCTAsMCgxNSkKCUxSICAgIDgsMgoJTiAgICAgNSwuTEMxOTItLkwkUEcxKDEzKSAKCkFkZGluZyAtZyB0byB0aGUgYWJvdmUgb3V0cHV0IG1ha2VzIHRoZSBvdXRwdXQgZXZlbiBtb3JlIHVzZWZ1bAplLmcuIHR5cGluZwptYWtlIENDOj0iczM5MC1nY2MgLWciIGtlcm5lbC9zY2hlZC5zCgp3aGljaCBjb21waWxlcy4KczM5MC1nY2MgLWcgLURfX0tFUk5FTF9fIC1JL2hvbWUvYmFycm93L2xpbnV4LTIuMy9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlICAgLVMga2VybmVsL3NjaGVkLmMgLW8ga2VybmVsL3NjaGVkLnMgCgphbHNvIG91dHB1dHMgc3RhYnMgKCBkZWJ1Z2dlciApIGluZm8sIGZyb20gdGhpcyBpbmZvIHlvdSBjYW4gZmluZCBvdXQgdGhlCm9mZnNldHMgJiBzaXplcyBvZiB2YXJpb3VzIGVsZW1lbnRzIGluIHN0cnVjdHVyZXMuCmUuZy4gdGhlIHN0YWIgZm9yIHRoZSBzdHJ1Y3R1cmUKc3RydWN0IHJsaW1pdCB7Cgl1bnNpZ25lZCBsb25nCXJsaW1fY3VyOwoJdW5zaWduZWQgbG9uZwlybGltX21heDsKfTsKaXMKLnN0YWJzICJybGltaXQ6VCgxNTEsMik9czhybGltX2N1cjooMCw1KSwwLDMyO3JsaW1fbWF4OigwLDUpLDMyLDMyOzsiLDEyOCwwLDAsMApmcm9tIHRoaXMgc3RhYiB5b3UgY2FuIHNlZSB0aGF0IApybGltaXRfY3VyIHN0YXJ0cyBhdCBiaXQgb2Zmc2V0IDAgJiBpcyAzMiBiaXRzIGluIHNpemUKcmxpbWl0X21heCBzdGFydHMgYXQgYml0IG9mZnNldCAzMiAmIGlzIDMyIGJpdHMgaW4gc2l6ZS4KCgpEZWJ1Z2dpbmcgVG9vbHM6Cj09PT09PT09PT09PT09PT0KCm9iamR1bXAKPT09PT09PQpUaGlzIGlzIGEgdG9vbCB3aXRoIG1hbnkgb3B0aW9ucyB0aGUgbW9zdCB1c2VmdWwgYmVpbmcgKCBpZiBjb21waWxlZCB3aXRoIC1nKS4Kb2JqZHVtcCAtLXNvdXJjZSA8dmljdGltIHByb2dyYW0gb3Igb2JqZWN0IGZpbGU+ID4gPHZpY3RpbXMgZGVidWcgbGlzdGluZyA+CgoKVGhlIHdob2xlIGtlcm5lbCBjYW4gYmUgY29tcGlsZWQgbGlrZSB0aGlzICggRG9pbmcgdGhpcyB3aWxsIG1ha2UgYSAxN01CIGtlcm5lbAomIGEgMjAwIE1CIGxpc3RpbmcgKSBob3dldmVyIHlvdSBoYXZlIHRvIHN0cmlwIGl0IGJlZm9yZSBidWlsZGluZyB0aGUgaW1hZ2UKdXNpbmcgdGhlIHN0cmlwIGNvbW1hbmQgdG8gbWFrZSBpdCBhIG1vcmUgcmVhc29uYWJsZSBzaXplIHRvIGJvb3QgaXQuCgpBIHNvdXJjZS9hc3NlbWJseSBtaXhlZCBkdW1wIG9mIHRoZSBrZXJuZWwgY2FuIGJlIGRvbmUgd2l0aCB0aGUgbGluZQpvYmpkdW1wIC0tc291cmNlIHZtbGludXggPiB2bWxpbnV4LmxzdApBbHNvLCBpZiB0aGUgZmlsZSBpc24ndCBjb21waWxlZCAtZywgdGhpcyB3aWxsIG91dHB1dCBhcyBtdWNoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgphcyBpdCBjYW4gKGUuZy4gZnVuY3Rpb24gbmFtZXMpLiBUaGlzIGlzIHZlcnkgc2xvdyBhcyBpdCBzcGVuZHMgbG90cwpvZiB0aW1lIHNlYXJjaGluZyBmb3IgZGVidWdnaW5nIGluZm8uIFRoZSBmb2xsb3dpbmcgc2VsZiBleHBsYW5hdG9yeSBsaW5lIHNob3VsZCBiZSB1c2VkIAppbnN0ZWFkIGlmIHRoZSBjb2RlIGlzbid0IGNvbXBpbGVkIC1nLCBhcyBpdCBpcyBtdWNoIGZhc3RlcjoKb2JqZHVtcCAtLWRpc2Fzc2VtYmxlLWFsbCAtLXN5bXMgdm1saW51eCA+IHZtbGludXgubHN0ICAKCkFzIGhhcmQgZHJpdmUgc3BhY2UgaXMgdmFsdWJsZSBtb3N0IG9mIHVzIHVzZSB0aGUgZm9sbG93aW5nIGFwcHJvYWNoLgoxKSBMb29rIGF0IHRoZSBlbWl0dGVkIHBzdyBvbiB0aGUgY29uc29sZSB0byBmaW5kIHRoZSBjcmFzaCBhZGRyZXNzIGluIHRoZSBrZXJuZWwuCjIpIExvb2sgYXQgdGhlIGZpbGUgU3lzdGVtLm1hcCAoIGluIHRoZSBsaW51eCBkaXJlY3RvcnkgKSBwcm9kdWNlZCB3aGVuIGJ1aWxkaW5nIAp0aGUga2VybmVsIHRvIGZpbmQgdGhlIGNsb3Nlc3QgYWRkcmVzcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgUFNXIHRvIGZpbmQgdGhlCm9mZmVuZGluZyBmdW5jdGlvbi4KMykgdXNlIGdyZXAgb3Igc2ltaWxhciB0byBzZWFyY2ggdGhlIHNvdXJjZSB0cmVlIGxvb2tpbmcgZm9yIHRoZSBzb3VyY2UgZmlsZQogd2l0aCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBkb24ndCBrbm93IHdoZXJlIGl0IGlzLgo0KSByZWJ1aWxkIHRoaXMgb2JqZWN0IGZpbGUgd2l0aCAtZyBvbiwgYXMgYW4gZXhhbXBsZSBzdXBwb3NlIHRoZSBmaWxlIHdhcwooIC9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5vICkgCjUpIEFzc3VtaW5nIHRoZSBmaWxlIHdpdGggdGhlIGVycm9uZW91cyBmdW5jdGlvbiBpcyBzaWduYWwuYyBNb3ZlIHRvIHRoZSBiYXNlIG9mIHRoZSAKTGludXggc291cmNlIHRyZWUuCjYpIHJtIC9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5vCjcpIG1ha2UgL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KOCkgd2F0Y2ggdGhlIGdjYyBjb21tYW5kIGxpbmUgZW1pdHRlZAo5KSB0eXBlIGl0IGluIGFnYWluIG9yIGFsdGVybmF0aXZlbHkgY3V0ICYgcGFzdGUgaXQgb24gdGhlIGNvbnNvbGUgYWRkaW5nIHRoZSAtZyBvcHRpb24uCjEwKSBvYmpkdW1wIC0tc291cmNlIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8gPiBzaWduYWwubHN0ClRoaXMgd2lsbCBvdXRwdXQgdGhlIHNvdXJjZSAmIHRoZSBhc3NlbWJseSBpbnRlcm1peGVkLCBhcyB0aGUgc25pcHBldCBiZWxvdyBzaG93cwpUaGlzIHdpbGwgdW5mb3J0dW5hdGVseSBvdXRwdXQgYWRkcmVzc2VzIHdoaWNoIGFyZW4ndCB0aGUgc2FtZQphcyB0aGUga2VybmVsIG9uZXMgeW91IHNob3VsZCBiZSBhYmxlIHRvIGdldCBhcm91bmQgdGhlIG1lbnRhbCBhcml0aG1ldGljCmJ5IHBsYXlpbmcgd2l0aCB0aGUgLS1hZGp1c3Qtdm1hIHBhcmFtZXRlciB0byBvYmpkdW1wLgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHNwaW5fbG9jayhzcGlubG9ja190ICpscCkKewogICAgICBhMDogICAgICAgMTggMzQgICAgICAgICAgIGxyICAgICAgJXIzLCVyNAogICAgICBhMjogICAgICAgYTcgM2EgMDMgYmMgICAgIGFoaSAgICAgJXIzLDk1NgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZSgiICAgIGxoaSAgIDEsLTFcbiIKICAgICAgYTY6ICAgICAgIGE3IDE4IGZmIGZmICAgICBsaGkgICAgICVyMSwtMQogICAgICBhYTogICAgICAgMWYgMDAgICAgICAgICAgIHNsciAgICAgJXIwLCVyMAogICAgICBhYzogICAgICAgYmEgMDEgMzAgMDAgICAgIGNzICAgICAgJXIwLCVyMSwwKCVyMykKICAgICAgYjA6ICAgICAgIGE3IDQ0IGZmIGZkICAgICBqbSAgICAgIGFhIDxzeXNfc2lnc3VzcGVuZCsweDJlPgogICAgICAgIHNhdmVzZXQgPSBjdXJyZW50LT5ibG9ja2VkOwogICAgICBiNDogICAgICAgZDIgMDcgZjAgNjggICAgIG12YyAgICAgMTA0KDgsJXIxNSksOTcyKCVyNCkKICAgICAgYjg6ICAgICAgIDQzIGNjCiAgICAgICAgcmV0dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9IDA7Cn0gCgo2KSBJZiBkZWJ1Z2dpbmcgdW5kZXIgVk0gZ28gZG93biB0byB0aGF0IHNlY3Rpb24gaW4gdGhlIGRvY3VtZW50IGZvciBtb3JlIGluZm8uCgoKSSBub3cgaGF2ZSBhIHRvb2wgd2hpY2ggdGFrZXMgdGhlIHBhaW4gb3V0IG9mIC0tYWRqdXN0LXZtYQomIHlvdSBhcmUgYWJsZSB0byBkbyBzb21ldGhpbmcgbGlrZQptYWtlIC9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmxzdAomIGl0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIHRoZSBjb3JyZWN0bHkgcmVsb2NhdGVkIGVudHJpZXMgZm9yCnRoZSB0ZXh0IHNlZ21lbnQgaW4gdHJhcHMubHN0LgpUaGlzIHRvb2wgaXMgbm93IHN0YW5kYXJkIGluIGxpbnV4IGRpc3RybydzIGluIHNjcmlwdHMvbWFrZWxzdAoKc3RyYWNlOgotLS0tLS0tClEuIFdoYXQgaXMgaXQgPwpBLiBJdCBpcyBhIHRvb2wgZm9yIGludGVyY2VwdGluZyBjYWxscyB0byB0aGUga2VybmVsICYgbG9nZ2luZyB0aGVtCnRvIGEgZmlsZSAmIG9uIHRoZSBzY3JlZW4uCgpRLiBXaGF0IHVzZSBpcyBpdCA/CkEuIFlvdSBjYW4gdXNlZCBpdCB0byBmaW5kIG91dCB3aGF0IGZpbGVzIGEgcGFydGljdWxhciBwcm9ncmFtIG9wZW5zLgoKCgpFeGFtcGxlIDEKLS0tLS0tLS0tCklmIHlvdSB3YW50ZWQgdG8ga25vdyBkb2VzIHBpbmcgd29yayBidXQgZGlkbid0IGhhdmUgdGhlIHNvdXJjZSAKc3RyYWNlIHBpbmcgLWMgMSAxMjcuMC4wLjEgIAomIHRoZW4gbG9vayBhdCB0aGUgbWFuIHBhZ2VzIGZvciBlYWNoIG9mIHRoZSBzeXNjYWxscyBiZWxvdywKKCBJbiBmYWN0IHRoaXMgaXMgc29tZXRpbWVzIGVhc2llciB0aGFuIGxvb2tpbmcgYXQgc29tZSBzcGFnZXR0aQpzb3VyY2Ugd2hpY2ggY29uZGl0aW9uYWxseSBjb21waWxlcyBmb3Igc2V2ZXJhbCBhcmNoaXRlY3R1cmVzICkuCk5vdCBldmVyeXRoaW5nIHRoYXQgaXQgdGhyb3dzIG91dCBuZWVkcyB0byBtYWtlIHNlbnNlIGltbWVkaWF0ZWx5LgoKSnVzdCBsb29raW5nIHF1aWNrbHkgeW91IGNhbiBzZWUgdGhhdCBpdCBpcyBtYWtpbmcgdXAgYSBSQVcgc29ja2V0CmZvciB0aGUgSUNNUCBwcm90b2NvbC4KRG9pbmcgYW4gYWxhcm0oMTApIGZvciBhIDEwIHNlY29uZCB0aW1lb3V0CiYgZG9pbmcgYSBnZXR0aW1lb2ZkYXkgY2FsbCBiZWZvcmUgJiBhZnRlciBlYWNoIHJlYWQgdG8gc2VlIApob3cgbG9uZyB0aGUgcmVwbGllcyB0b29rLCAmIHdyaXRpbmcgc29tZSB0ZXh0IHRvIHN0ZG91dCBzbyB0aGUgdXNlcgpoYXMgYW4gaWRlYSB3aGF0IGlzIGdvaW5nIG9uLgoKc29ja2V0KFBGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVApID0gMwpnZXR1aWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCnNldHVpZCgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKc3RhdCgiL3Vzci9zaGFyZS9sb2NhbGUvQy9saWJjLmNhdCIsIDB4YmZmZmYxMzQpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQpzdGF0KCIvdXNyL3NoYXJlL2xvY2FsZS9saWJjL0MiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKc3RhdCgiL3Vzci9sb2NhbC9zaGFyZS9sb2NhbGUvQy9saWJjLmNhdCIsIDB4YmZmZmYxMzQpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQpnZXRwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAzNTMKc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIFsxXSwgNCkgPSAwCnNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCBbNDkxNTJdLCA0KSA9IDAKZnN0YXQoMSwge3N0X21vZGU9U19JRkNIUnwwNjIwLCBzdF9yZGV2PW1ha2VkZXYoMywgMSksIC4uLn0pID0gMAptbWFwKDAsIDQwOTYsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCkgPSAweDQwMDA4MDAwCmlvY3RsKDEsIFRDR0VUUywge0I5NjAwIG9wb3N0IGlzaWcgaWNhbm9uIGVjaG8gLi4ufSkgPSAwCndyaXRlKDEsICJQSU5HIDEyNy4wLjAuMSAoMTI3LjAuMC4xKTogNTYgZCIuLi4sIDQyUElORyAxMjcuMC4wLjEgKDEyNy4wLjAuMSk6IDU2IGRhdGEgYnl0ZXMKKSA9IDQyCnNpZ2FjdGlvbihTSUdJTlQsIHsweDgwNDliYTAsIFtdLCBTQV9SRVNUQVJUfSwge1NJR19ERkx9KSA9IDAgCnNpZ2FjdGlvbihTSUdBTFJNLCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0sIHtTSUdfREZMfSkgPSAwCmdldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxMzg5NTF9LCBOVUxMKSA9IDAKc2VuZHRvKDMsICJcMTBcMERcMjAxYVwxXDBcMFwxNyNcMjE3OFwzMDdcMzYiLi4uLCA2NCwgMCwge3Npbl9mYW1pbHk9QUZfSU5FVCwKc2luX3BvcnQ9aHRvbnMoMCksIHNpbl9hZGRyPWluZXRfYWRkcigiMTI3LjAuMC4xIil9LCAxNikgPSA2NApzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9LCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0pID0gMApzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OWJhMCwgW10sIFNBX1JFU1RBUlR9LCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0pID0gMAphbGFybSgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCnJlY3Zmcm9tKDMsICJFXDBcMFRcMDAwNVwwXDBAXDF8clwxNzdcMFwwXDFcMTc3Ii4uLiwgMTkyLCAwLCAKe3Npbl9mYW1pbHk9QUZfSU5FVCwgc2luX3BvcnQ9aHRvbnMoNTA4ODIpLCBzaW5fYWRkcj1pbmV0X2FkZHIoIjEyNy4wLjAuMSIpfSwgWzE2XSkgPSA4NApnZXR0aW1lb2ZkYXkoezk0ODkwNDcxOSwgMTYwMjI0fSwgTlVMTCkgPSAwCnJlY3Zmcm9tKDMsICJFXDBcMFRcMDAwNlwwXDBcMzc3XDFcMjc1cFwxNzdcMCIuLi4sIDE5MiwgMCwgCntzaW5fZmFtaWx5PUFGX0lORVQsIHNpbl9wb3J0PWh0b25zKDUwODgyKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIFsxNl0pID0gODQKZ2V0dGltZW9mZGF5KHs5NDg5MDQ3MTksIDE2Njk1Mn0sIE5VTEwpID0gMAp3cml0ZSgxLCAiNjQgYnl0ZXMgZnJvbSAxMjcuMC4wLjE6IGljbXBfc2UiLi4uLCAKNTc2NCBieXRlcyBmcm9tIDEyNy4wLjAuMTogaWNtcF9zZXE9MCB0dGw9MjU1IHRpbWU9MjguMCBtcwoKRXhhbXBsZSAyCi0tLS0tLS0tLQpzdHJhY2UgcGFzc3dkIDI+JjEgfCBncmVwIG9wZW4KcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQKb3BlbigiL2V0Yy9sZC5zby5jYWNoZSIsIE9fUkRPTkxZKSAgICAgID0gMwpvcGVuKCIvb3B0L2tkZS9saWIvbGliYy5zby41IiwgT19SRE9OTFkpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQpvcGVuKCIvbGliL2xpYmMuc28uNSIsIE9fUkRPTkxZKSAgICAgICAgPSAzCm9wZW4oIi9kZXYiLCBPX1JET05MWSkgICAgICAgICAgICAgICAgICA9IDMKb3BlbigiL3Zhci9ydW4vdXRtcCIsIE9fUkRPTkxZKSAgICAgICAgID0gMwpvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKSAgICAgICAgICAgPSAzCm9wZW4oIi9ldGMvc2hhZG93IiwgT19SRE9OTFkpICAgICAgICAgICA9IDMKb3BlbigiL2V0Yy9sb2dpbi5kZWZzIiwgT19SRE9OTFkpICAgICAgID0gNApvcGVuKCIvZGV2L3R0eSIsIE9fUkRPTkxZKSAgICAgICAgICAgICAgPSA0IAoKVGhlIDI+JjEgaXMgZG9uZSB0byByZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0ICYgZ3JlcCBpcyB0aGVuIGZpbHRlcmluZyB0aGlzIGlucHV0IAp0aHJvdWdoIHRoZSBwaXBlIGZvciBlYWNoIGxpbmUgY29udGFpbmluZyB0aGUgc3RyaW5nIG9wZW4uCgoKRXhhbXBsZSAzCi0tLS0tLS0tLQpHZXR0aW5nIHNvcGhpc3RpY2F0ZWQKdGVsbmV0ZCBjcmFzaGVzICYgSSBkb24ndCBrbm93IHdoeQoKU3RlcHMKLS0tLS0KMSkgUmVwbGFjZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4gL2V0Yy9pbmV0ZC5jb25mCnRlbG5ldCAgc3RyZWFtICB0Y3AgICAgIG5vd2FpdCAgcm9vdCAgICAvdXNyL3NiaW4vaW4udGVsbmV0ZCAtaCAKd2l0aAp0ZWxuZXQgIHN0cmVhbSAgdGNwICAgICBub3dhaXQgIHJvb3QgICAgL2JsYWgKCjIpIENyZWF0ZSB0aGUgZmlsZSAvYmxhaCB3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudHMgdG8gc3RhcnQgdHJhY2luZyB0ZWxuZXRkIAojIS9iaW4vYmFzaAovdXNyL2Jpbi9zdHJhY2UgLW8vdDEgLWYgL3Vzci9zYmluL2luLnRlbG5ldGQgLWggCjMpIGNobW9kIDcwMCAvYmxhaCB0byBtYWtlIGl0IGV4ZWN1dGFibGUgb25seSB0byByb290CjQpCmtpbGxhbGwgLUhVUCBpbmV0ZApvciBwcyBhdXggfCBncmVwIGluZXRkCmdldCBpbmV0ZCdzIHByb2Nlc3MgaWQKJiBraWxsIC1IVVAgaW5ldGQgdG8gcmVzdGFydCBpdC4KCkltcG9ydGFudCBvcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tCi1vIGlzIHVzZWQgdG8gdGVsbCBzdHJhY2UgdG8gb3V0cHV0IHRvIGEgZmlsZSBpbiBvdXIgY2FzZSB0MSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkKLWYgaXMgdG8gZm9sbG93IGNoaWxkcmVuIGkuZS4KZS5nIGluIG91ciBjYXNlIGFib3ZlIHRlbG5ldGQgd2lsbCBzdGFydCB0aGUgbG9naW4gcHJvY2VzcyAmIHN1YnNlcXVlbnRseSBhIHNoZWxsIGxpa2UgYmFzaC4KWW91IHdpbGwgYmUgYWJsZSB0byB0ZWxsIHdoaWNoIGlzIHdoaWNoIGZyb20gdGhlIHByb2Nlc3MgSUQncyBsaXN0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlCm9mIHRoZSBzdHJhY2Ugb3V0cHV0LgotcDxwaWQ+IHdpbGwgdGVsbCBzdHJhY2UgdG8gYXR0YWNoIHRvIGEgcnVubmluZyBwcm9jZXNzLCB5dXAgdGhpcyBjYW4gYmUgZG9uZSBwcm92aWRlZAogaXQgaXNuJ3QgYmVpbmcgdHJhY2VkIG9yIGRlYnVnZ2VkIGFscmVhZHkgJiB5b3UgaGF2ZSBlbm91Z2ggcHJpdmlsZWdlcywKdGhlIHJlYXNvbiAyIHByb2Nlc3NlcyBjYW5ub3QgdHJhY2Ugb3IgZGVidWcgdGhlIHNhbWUgcHJvZ3JhbSBpcyB0aGF0IHN0cmFjZQpiZWNvbWVzIHRoZSBwYXJlbnQgcHJvY2VzcyBvZiB0aGUgb25lIGJlaW5nIGRlYnVnZ2VkICYgcHJvY2Vzc2VzICggdW5saWtlIHBlb3BsZSApCmNhbiBoYXZlIG9ubHkgb25lIHBhcmVudC4KCgpIb3dldmVyIHRoZSBmaWxlIC90MSB3aWxsIGdldCBiaWcgcXVpdGUgcXVpY2tseQp0byB0ZXN0IGl0IHRlbG5ldCAxMjcuMC4wLjEKCm5vdyBsb29rIGF0IHdoYXQgZmlsZXMgaW4udGVsbmV0ZCBleGVjdmUnZAo0MTMgICBleGVjdmUoIi91c3Ivc2Jpbi9pbi50ZWxuZXRkIiwgWyIvdXNyL3NiaW4vaW4udGVsbmV0ZCIsICItaCJdLCBbLyogMTcgdmFycyAqL10pID0gMAo0MTQgICBleGVjdmUoIi9iaW4vbG9naW4iLCBbIi9iaW4vbG9naW4iLCAiLWgiLCAibG9jYWxob3N0IiwgIi1wIl0sIFsvKiAyIHZhcnMgKi9dKSA9IDAgCgpXaGV5IGl0IHdvcmtlZCEuCgoKT3RoZXIgaGludHM6Ci0tLS0tLS0tLS0tLQpJZiB0aGUgcHJvZ3JhbSBpcyBub3QgdmVyeSBpbnRlcmFjdGl2ZSAoIGkuZS4gbm90IG11Y2gga2V5Ym9hcmQgaW5wdXQgKQomIGlzIGNyYXNoaW5nIGluIG9uZSBhcmNoaXRlY3R1cmUgYnV0IG5vdCBpbiBhbm90aGVyIHlvdSBjYW4gZG8gCmFuIHN0cmFjZSBvZiBib3RoIHByb2dyYW1zIHVuZGVyIGFzIGlkZW50aWNhbCBhIHNjZW5hcmlvIGFzIHlvdSBjYW4Kb24gYm90aCBhcmNoaXRlY3R1cmVzIG91dHB1dHRpbmcgdG8gYSBmaWxlIHRoZW4uCmRvIGEgZGlmZiBvZiB0aGUgdHdvIHRyYWNlcyB1c2luZyB0aGUgZGlmZiBwcm9ncmFtCmkuZS4KZGlmZiBvdXRwdXQxIG91dHB1dDIKJiBtYXliZSB5b3UnbGwgYmUgYWJsZSB0byBzZWUgd2hlcmUgdGhlIGNhbGwgcGF0aHMgZGlmZmVyZWQsIHRoaXMKaXMgcG9zc2libHkgbmVhciB0aGUgY2F1c2Ugb2YgdGhlIGNyYXNoLiAKCk1vcmUgaW5mbwotLS0tLS0tLS0KTG9vayBhdCBtYW4gcGFnZXMgZm9yIHN0cmFjZSAmIHRoZSB2YXJpb3VzIHN5c2NhbGxzCmUuZy4gbWFuIHN0cmFjZSwgbWFuIGFsYXJtLCBtYW4gc29ja2V0LgoKClBlcmZvcm1hbmNlIERlYnVnZ2luZwo9PT09PT09PT09PT09PT09PT09PT0KZ2NjIGlzIGNhcGlibGUgb2YgY29tcGlsaW5nIGluIHByb2ZpbGluZyBjb2RlIGp1c3QgYWRkIHRoZSAtcCBvcHRpb24KdG8gdGhlIENGTEFHUywgdGhpcyBvYnZpb3VzbHkgYWZmZWN0cyBwcm9ncmFtIHNpemUgJiBwZXJmb3JtYW5jZS4KVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZ3Byb2YgZ251IHByb2ZpbGluZyB0b29sIG9yIHRoZQpnY292IHRoZSBnbnUgY29kZSBjb3ZlcmFnZSB0b29sICggY29kZSBjb3ZlcmFnZSBpcyBhIG1lYW5zIG9mIHRlc3RpbmcKY29kZSBxdWFsaXR5IGJ5IGNoZWNraW5nIGlmIGFsbCB0aGUgY29kZSBpbiBhbiBleGVjdXRhYmxlIGluIGV4ZXJjaXNlZCBieQphIHRlc3RlciApLgoKClVzaW5nIHRvcCB0byBmaW5kIG91dCB3aGVyZSBwcm9jZXNzZXMgYXJlIHNsZWVwaW5nIGluIHRoZSBrZXJuZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUbyBkbyB0aGlzIGNvcHkgdGhlIFN5c3RlbS5tYXAgZnJvbSB0aGUgcm9vdCBkaXJlY3Rvcnkgd2hlcmUKdGhlIGxpbnV4IGtlcm5lbCB3YXMgYnVpbHQgdG8gdGhlIC9ib290IGRpcmVjdG9yeSBvbiB5b3VyIApsaW51eCBtYWNoaW5lLgpTdGFydCB0b3AKTm93IHR5cGUgZlU8cmV0dXJuPgpZb3Ugc2hvdWxkIHNlZSBhIG5ldyBmaWVsZCBjYWxsZWQgV0NIQU4gd2hpY2gKdGVsbHMgeW91IHdoZXJlIGVhY2ggcHJvY2VzcyBpcyBzbGVlcGluZyBoZXJlIGlzIGEgdHlwaWNhbCBvdXRwdXQuCiAKIDY6NTlwbSAgdXAgNDEgbWluLCAgMSB1c2VyLCAgbG9hZCBhdmVyYWdlOiAwLjAwLCAwLjAwLCAwLjAwCjI4IHByb2Nlc3NlczogMjcgc2xlZXBpbmcsIDEgcnVubmluZywgMCB6b21iaWUsIDAgc3RvcHBlZApDUFUgc3RhdGVzOiAgMC4wJSB1c2VyLCAgMC4xJSBzeXN0ZW0sICAwLjAlIG5pY2UsIDk5LjglIGlkbGUKTWVtOiAgIDI1NDkwMEsgYXYsICAgNDU5NzZLIHVzZWQsICAyMDg5MjRLIGZyZWUsICAgICAgIDBLIHNocmQsICAgMjg2MzZLIGJ1ZmYKU3dhcDogICAgICAgMEsgYXYsICAgICAgIDBLIHVzZWQsICAgICAgIDBLIGZyZWUgICAgICAgICAgICAgICAgICAgIDg2MjBLIGNhY2hlZAoKICBQSUQgVVNFUiAgICAgUFJJICBOSSAgU0laRSAgUlNTIFNIQVJFIFdDSEFOICAgICBTVEFUICBMSUIgJUNQVSAlTUVNICAgVElNRSBDT01NQU5ECiAgNzUwIHJvb3QgICAgICAxMiAgIDAgICA4NDggIDg0OCAgIDcwMCBkb19zZWxlY3QgUyAgICAgICAwICAwLjEgIDAuMyAgIDA6MDAgaW4udGVsbmV0ZAogIDc2NyByb290ICAgICAgMTYgICAwICAxMTQwIDExNDAgICA5NjQgICAgICAgICAgIFIgICAgICAgMCAgMC4xICAwLjQgICAwOjAwIHRvcAogICAgMSByb290ICAgICAgIDggICAwICAgMjEyICAyMTIgICAxODAgZG9fc2VsZWN0IFMgICAgICAgMCAgMC4wICAwLjAgICAwOjAwIGluaXQKICAgIDIgcm9vdCAgICAgICA5ICAgMCAgICAgMCAgICAwICAgICAwIGRvd25faW50ZSBTVyAgICAgIDAgIDAuMCAgMC4wICAgMDowMCBrbWNoZWNrCgpUaGUgdGltZSBjb21tYW5kCi0tLS0tLS0tLS0tLS0tLS0KQW5vdGhlciByZWxhdGVkIGNvbW1hbmQgaXMgdGhlIHRpbWUgY29tbWFuZCB3aGljaCBnaXZlcyB5b3UgYW4gaW5kaWNhdGlvbgpvZiB3aGVyZSBhIHByb2Nlc3MgaXMgc3BlbmRpbmcgdGhlIG1ham9yaXR5IG9mIGl0cyB0aW1lLgplLmcuCnRpbWUgcGluZyAtYyA1IG5jCm91dHB1dHMKcmVhbAkwbTQuMDU0cwp1c2VyCTBtMC4wMTBzCnN5cwkwbTAuMDEwcwoKRGVidWdnaW5nIHVuZGVyIFZNCj09PT09PT09PT09PT09PT09PQoKTm90ZXMKLS0tLS0KQWRkcmVzc2VzICYgdmFsdWVzIGluIHRoZSBWTSBkZWJ1Z2dlciBhcmUgYWx3YXlzIGhleCBuZXZlciBkZWNpbWFsCkFkZHJlc3MgcmFuZ2VzIGFyZSBvZiB0aGUgZm9ybWF0IDxIZXhWYWx1ZTE+LTxIZXhWYWx1ZTI+IG9yIDxIZXhWYWx1ZTE+LjxIZXhWYWx1ZTI+IAplLmcuIFRoZSBhZGRyZXNzIHJhbmdlICAweDIwMDAgdG8gMHgzMDAwIGNhbiBiZSBkZXNjcmliZWQgYXMgMjAwMC0zMDAwIG9yIDIwMDAuMTAwMAoKVGhlIFZNIERlYnVnZ2VyIGlzIGNhc2UgaW5zZW5zaXRpdmUuCgpWTSdzIHN0cmVuZ3RocyBhcmUgdXN1YWxseSBvdGhlciBkZWJ1Z2dlcnMgd2Vha25lc3NlcyB5b3UgY2FuIGdldCBhdCBhbnkgcmVzb3VyY2UKbm8gbWF0dGVyIGhvdyBzZW5zaXRpdmUgZS5nLiBtZW1vcnkgbWFuYWdlbWVudCByZXNvdXJjZXMsY2hhbmdlIGFkZHJlc3MgdHJhbnNsYXRpb24KaW4gdGhlIFBTVy4gRm9yIGtlcm5lbCBoYWNraW5nIHlvdSB3aWxsIHJlYXAgZGl2aWRlbmRzIGlmIHlvdSBnZXQgZ29vZCBhdCBpdC4KClRoZSBWTSBEZWJ1Z2dlciBkaXNwbGF5cyBvcGVyYXRvcnMgYnV0IG5vdCBvcGVyYW5kcywgcHJvYmFibHkgYmVjYXVzZSBzb21lCm9mIGl0IHdhcyB3cml0dGVuIHdoZW4gbWVtb3J5IHdhcyBleHBlbnNpdmUgJiB0aGUgcHJvZ3JhbW1lciB3YXMgcHJvYmFibHkgcHJvdWQgdGhhdAppdCBmaXR0ZWQgaW50byAyayBvZiBtZW1vcnkgJiB0aGUgcHJvZ3JhbW1lcnMgJiBkaWRuJ3Qgd2FudCB0byBzaG9jayBoYXJkY29yZSBWTSdlcnMgYnkKY2hhbmdpbmcgdGhlIGludGVyZmFjZSA6LSksIGFsc28gdGhlIGRlYnVnZ2VyIGRpc3BsYXlzIHVzZWZ1bCBpbmZvcm1hdGlvbiBvbiB0aGUgc2FtZSBsaW5lICYgCnRoZSBhdXRob3Igb2YgdGhlIGNvZGUgcHJvYmFibHkgZmVsdCB0aGF0IGl0IHdhcyBhIGdvb2QgaWRlYSBub3QgdG8gZ28gb3ZlciAKdGhlIDgwIGNvbHVtbnMgb24gdGhlIHNjcmVlbi4gCgpBcyBzb21lIG9mIHlvdSBhcmUgcHJvYmFibHkgaW4gYSBwYW5pYyBub3cgdGhpcyBpc24ndCBhcyB1bmludHVpdGl2ZSBhcyBpdCBtYXkgc2VlbQphcyB0aGUgMzkwIGluc3RydWN0aW9ucyBhcmUgZWFzeSB0byBkZWNvZGUgbWVudGFsbHkgJiB5b3UgY2FuIG1ha2UgYSBnb29kIGd1ZXNzIGF0IGEgbG90IApvZiB0aGVtIGFzIGFsbCB0aGUgb3BlcmFuZHMgYXJlIG5pYmJsZSAoIGhhbGYgYnl0ZSBhbGlnbmVkICkgJiBpZiB5b3UgaGF2ZSBhbiBvYmpkdW1wIGxpc3RpbmcKYWxzbyBpdCBpcyBxdWl0ZSBlYXN5IHRvIGZvbGxvdywgaWYgeW91IGRvbid0IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nIGtlZXAgYSBjb3B5IG9mCnRoZSBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeSAmIGxvb2sgYXQgYmV0d2VlbiBwYWdlcyAyICYgNyBvciBhbHRlcm5hdGl2ZWx5IHRoZQpzLzM5MCBwcmluY2lwbGVzIG9mIG9wZXJhdGlvbi4KZS5nLiBldmVuIEkgY2FuIGd1ZXNzIHRoYXQgCjAwMDFBRkY4JyBMUiAgICAxODBGICAgICAgICBDQyAwCmlzIGEgKCBsb2FkIHJlZ2lzdGVyICkgbHIgcjAscjE1IAoKQWxzbyBpdCBpcyB2ZXJ5IGVhc3kgdG8gdGVsbCB0aGUgbGVuZ3RoIG9mIGEgMzkwIGluc3RydWN0aW9uIGZyb20gdGhlIDIgbW9zdCBzaWduaWZpY2FudApiaXRzIGluIHRoZSBpbnN0cnVjdGlvbiAoIG5vdCB0aGF0IHRoaXMgaW5mbyBpcyByZWFsbHkgdXNlZnVsIGV4Y2VwdCBpZiB5b3UgYXJlIHRyeWluZyB0bwptYWtlIHNlbnNlIG9mIGEgaGV4ZHVtcCBvZiBjb2RlICkuCkhlcmUgaXMgYSB0YWJsZQpCaXRzICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBMZW5ndGgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjAwICAgICAgICAgICAgICAgICAgICAgICAgICAyIEJ5dGVzCjAxICAgICAgICAgICAgICAgICAgICAgICAgICA0IEJ5dGVzCjEwICAgICAgICAgICAgICAgICAgICAgICAgICA0IEJ5dGVzCjExICAgICAgICAgICAgICAgICAgICAgICAgICA2IEJ5dGVzCgoKCgpUaGUgZGVidWdnZXIgYWxzbyBkaXNwbGF5cyBvdGhlciB1c2VmdWwgaW5mbyBvbiB0aGUgc2FtZSBsaW5lIHN1Y2ggYXMgdGhlCmFkZHJlc3NlcyBiZWluZyBvcGVyYXRlZCBvbiBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgb2YgYnJhbmNoZXMgJiBjb25kaXRpb24gY29kZXMuCmUuZy4gIAowMDAxOTczNicgQUhJICAgQTdEQUZGMEUgICAgQ0MgMQowMDAxOThCQScgQlJDICAgQTc4NDAwMDQgLT4gMDAwMTk4QzInICAgQ0MgMAowMDAxOThDRScgU1RNICAgOTAwRUYwNjggPj4gMEZBOTVFNzggICAgQ0MgMgoKCgpVc2VmdWwgVk0gZGVidWdnZXIgY29tbWFuZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJIHN1cHBvc2UgSSdkIGJldHRlciBtZW50aW9uIHRoaXMgYmVmb3JlIEkgc3RhcnQKdG8gbGlzdCB0aGUgY3VycmVudCBhY3RpdmUgdHJhY2VzIGRvIApRIFRSCnRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMjU1IG9mIHRoZXNlIHBlciBzZXQKKCBtb3JlIGFib3V0IHRyYWNlIHNldHMgbGF0ZXIgKS4KVG8gc3RvcCB0cmFjZXMgaXNzdWUgYQpUUiBFTkQuClRvIGRlbGV0ZSBhIHBhcnRpY3VsYXIgYnJlYWtwb2ludCBpc3N1ZQpUUiBERUwgPGJyZWFrcG9pbnQgbnVtYmVyPgoKVGhlIFBBMSBrZXkgZHJvcHMgdG8gQ1AgbW9kZSBzbyB5b3UgY2FuIGlzc3VlIGRlYnVnZ2VyIGNvbW1hbmRzLApEb2luZyBhbHQgYyAob24gbXkgMzI3MCBjb25zb2xlIGF0IGxlYXN0ICkgY2xlYXJzIHRoZSBzY3JlZW4uIApoaXR0aW5nIGIgPGVudGVyPiBjb21lcyBiYWNrIHRvIHRoZSBydW5uaW5nIG9wZXJhdGluZyBzeXN0ZW0KZnJvbSBjcCBtb2RlICggaW4gb3VyIGNhc2UgbGludXggKS4KSXQgaXMgdHlwaWNhbGx5IHVzZWZ1bCB0byBhZGQgc2hvcnRjdXRzIHRvIHlvdXIgcHJvZmlsZS5leGVjIGZpbGUKaWYgeW91IGhhdmUgb25lICggdGhpcyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYXV0b2V4ZWMuYmF0IGluIERPUyApLgpmaWxlIGhlcmUgYXJlIGEgZmV3IGZyb20gbWluZS4KLyogdGhpcyBnaXZlcyBtZSBjb21tYW5kIGhpc3Rvcnkgb24gaXNzdWluZyBmMTIgKi8Kc2V0IHBmMTIgcmV0cmlldmUgCi8qIHRoaXMgY29udGludWVzICovCnNldCBwZjggaW1tIGIKLyogZ29lcyB0byB0cmFjZSBzZXQgYSAqLwpzZXQgcGYxIGltbSB0ciBnb3RvIGEKLyogZ29lcyB0byB0cmFjZSBzZXQgYiAqLwpzZXQgcGYyIGltbSB0ciBnb3RvIGIKLyogZ29lcyB0byB0cmFjZSBzZXQgYyAqLwpzZXQgcGYzIGltbSB0ciBnb3RvIGMKCgoKSW5zdHJ1Y3Rpb24gVHJhY2luZwotLS0tLS0tLS0tLS0tLS0tLS0tClNldHRpbmcgYSBzaW1wbGUgYnJlYWtwb2ludApUUiBJIFBTV0EgPGFkZHJlc3M+ClRvIGRlYnVnIGEgcGFydGljdWxhciBmdW5jdGlvbiB0cnkKVFIgSSBSIDxmdW5jdGlvbiBhZGRyZXNzIHJhbmdlPgpUUiBJIG9uIGl0cyBvd24gd2lsbCBzaW5nbGUgc3RlcC4KVFIgSSBEQVRBIDxNTkVNT05JQz4gPE9QVElPTkFMIFJBTkdFPiB3aWxsIHRyYWNlIGZvciBwYXJ0aWN1bGFyIG1uZW1vbmljcwplLmcuClRSIEkgREFUQSA0RCBSIDAxOTdCQy40MDAwCndpbGwgdHJhY2UgZm9yIEJBUydlcyAoIG9wY29kZSA0RCApIGluIHRoZSByYW5nZSAwMTk3QkMuNDAwMAppZiB5b3Ugd2VyZSBpbmNsaW5lZCB5b3UgY291bGQgYWRkIHRyYWNlcyBmb3IgYWxsIGJyYW5jaCBpbnN0cnVjdGlvbnMgJgpzdWZmaXggdGhlbSB3aXRoIHRoZSBydW4gcHJlZml4IHNvIHlvdSB3b3VsZCBoYXZlIGEgYmFja3RyYWNlIG9uIHNjcmVlbiAKd2hlbiBhIHByb2dyYW0gY3Jhc2hlcy4KVFIgQlIgPElOVE8gT1IgRlJPTT4gd2lsbCB0cmFjZSBicmFuY2hlcyBpbnRvIG9yIG91dCBvZiBhbiBhZGRyZXNzLgplLmcuClRSIEJSIElOVE8gMCBpcyBvZnRlbiBxdWl0ZSB1c2VmdWwgaWYgYSBwcm9ncmFtIGlzIGdldHRpbmcgYXdrd2FyZCAmIGRlY2lkaW5nCnRvIGJyYW5jaCB0byAwICYgY3Jhc2hpbmcgYXMgdGhpcyB3aWxsIHN0b3AgYXQgdGhlIGFkZHJlc3MgYmVmb3JlIGluIGp1bXBzIHRvIDAuClRSIEkgUiA8YWRkcmVzcyByYW5nZT4gUlVOIGNtZCBkIGcKc2luZ2xlIHN0ZXBzIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzIGJ1dCBzdGF5cyBydW5uaW5nICYKZGlzcGxheXMgdGhlIGdwcnMgb24gZWFjaCBzdGVwLgoKCgpEaXNwbGF5aW5nICYgbW9kaWZ5aW5nIFJlZ2lzdGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpEIEcgd2lsbCBkaXNwbGF5IGFsbCB0aGUgZ3BycwpBZGRpbmcgYSBleHRyYSBHIHRvIGFsbCB0aGUgY29tbWFuZHMgaXMgbmVjZXNzYXJ5IHRvIGFjY2VzcyB0aGUgZnVsbCA2NCBiaXQgCmNvbnRlbnQgaW4gVk0gb24gei9BcmNoaXRlY3R1cmUgb2J2aW91c2x5IHRoaXMgaXNuJ3QgcmVxdWlyZWQgZm9yIGFjY2VzcyByZWdpc3RlcnMKYXMgdGhlc2UgYXJlIHN0aWxsIDMyIGJpdC4KZS5nLiBER0cgaW5zdGVhZCBvZiBERyAKRCBYIHdpbGwgZGlzcGxheSBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCkQgQVIgd2lsbCBkaXNwbGF5IGFsbCB0aGUgYWNjZXNzIHJlZ2lzdGVycwpEIEFSNC03IHdpbGwgZGlzcGxheSBhY2Nlc3MgcmVnaXN0ZXJzIDQgdG8gNwpDUFUgQUxMIEQgRyB3aWxsIGRpc3BsYXkgdGhlIEdSUFMgb2YgYWxsIENQVVMgaW4gdGhlIGNvbmZpZ3VyYXRpb24KRCBQU1cgd2lsbCBkaXNwbGF5IHRoZSBjdXJyZW50IFBTVwpzdCBQU1cgMjAwMCB3aWxsIHB1dCB0aGUgdmFsdWUgMjAwMCBpbnRvIHRoZSBQU1cgJgpjYXVzZSBjcmFzaCB5b3VyIG1hY2hpbmUuCkQgUFJFRklYIGRpc3BsYXlzIHRoZSBwcmVmaXggb2Zmc2V0CgoKRGlzcGxheWluZyBNZW1vcnkKLS0tLS0tLS0tLS0tLS0tLS0KVG8gZGlzcGxheSBtZW1vcnkgbWFwcGVkIHVzaW5nIHRoZSBjdXJyZW50IFBTVydzIG1hcHBpbmcgdHJ5CkQgPHJhbmdlPgpUbyBtYWtlIFZNIGRpc3BsYXkgYSBtZXNzYWdlIGVhY2ggdGltZSBpdCBoaXRzIGEgcGFydGljdWxhciBhZGRyZXNzICYgY29udGludWUgdHJ5CkQgSTxyYW5nZT4gd2lsbCBkaXNhc3NlbWJsZS9kaXNwbGF5IGEgcmFuZ2Ugb2YgaW5zdHJ1Y3Rpb25zLgpTVCBhZGRyIDMyIGJpdCB3b3JkIHdpbGwgc3RvcmUgYSAzMiBiaXQgYWxpZ25lZCBhZGRyZXNzCkQgVDxyYW5nZT4gd2lsbCBkaXNwbGF5IHRoZSBFQkNESUMgaW4gYW4gYWRkcmVzcyAoIGlmIHlvdSBhcmUgdGhhdCB3YXkgaW5jbGluZWQgKQpEIFI8cmFuZ2U+IHdpbGwgZGlzcGxheSByZWFsIGFkZHJlc3NlcyAoIHdpdGhvdXQgREFUICkgYnV0IHdpdGggcHJlZml4aW5nLgpUaGVyZSBhcmUgb3RoZXIgY29tcGxleCBvcHRpb25zIHRvIGRpc3BsYXkgaWYgeW91IG5lZWQgdG8gZ2V0IGF0IHNheSBob21lIHNwYWNlCmJ1dCBhcmUgaW4gcHJpbWFyeSBzcGFjZSB0aGUgZWFzaWVzdCB0aGluZyB0byBkbyBpcyB0byB0ZW1wb3JhcmlseQptb2RpZnkgdGhlIFBTVyB0byB0aGUgb3RoZXIgYWRkcmVzc2luZyBtb2RlLCBkaXNwbGF5IHRoZSBzdHVmZiAmIHRoZW4KcmVzdG9yZSBpdC4KCgogCkhpbnRzCi0tLS0tCklmIHlvdSB3YW50IHRvIGlzc3VlIGEgZGVidWdnZXIgY29tbWFuZCB3aXRob3V0IGhhbHRpbmcgeW91ciB2aXJ0dWFsIG1hY2hpbmUgd2l0aCB0aGUKUEExIGtleSB0cnkgcHJlZml4aW5nIHRoZSBjb21tYW5kIHdpdGggI0NQIGUuZy4KI2NwIHRyIGkgcHN3YSAyMDAwCmFsc28gc3VmZml4aW5nIG1vc3QgZGVidWdnZXIgY29tbWFuZHMgd2l0aCBSVU4gd2lsbCBjYXVzZSB0aGVtIG5vdAp0byBzdG9wIGp1c3QgZGlzcGxheSB0aGUgbW5lbW9uaWMgYXQgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gb24gdGhlIGNvbnNvbGUuCklmIHlvdSBoYXZlIHNldmVyYWwgYnJlYWtwb2ludHMgeW91IHdhbnQgdG8gcHV0IGludG8geW91ciBwcm9ncmFtICYKeW91IGdldCBmZWQgdXAgb2YgY3Jvc3MgcmVmZXJlbmNpbmcgd2l0aCBTeXN0ZW0ubWFwCnlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZyB0cmljayBmb3Igc2V2ZXJhbCBzeW1ib2xzLgpncmVwIGRvX3NpZ25hbCBTeXN0ZW0ubWFwIAp3aGljaCBlbWl0cyB0aGUgZm9sbG93aW5nIGFtb25nIG90aGVyIHRoaW5ncwowMDAxZjRlMCBUIGRvX3NpZ25hbCAKbm93IHlvdSBjYW4gZG8KClRSIEkgUFNXQSAwMDAxZjRlMCBjbWQgbXNnICogZG9fc2lnbmFsClRoaXMgc2VuZHMgYSBtZXNzYWdlIHRvIHlvdXIgb3duIGNvbnNvbGUgZWFjaCB0aW1lIGRvX3NpZ25hbCBpcyBlbnRlcmVkLgooIEFzIGFuIGFzaWRlIEkgd3JvdGUgYSBwZXJsIHNjcmlwdCBvbmNlIHdoaWNoIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGEgUkVYWApzY3JpcHQgd2l0aCBicmVha3BvaW50cyBvbiBldmVyeSBrZXJuZWwgcHJvY2VkdXJlLCB0aGlzIGlzbid0IGEgZ29vZCBpZGVhCmJlY2F1c2UgdGhlcmUgYXJlIHRob3VzYW5kcyBvZiB0aGVzZSByb3V0aW5lcyAmIFZNIGNhbiBvbmx5IHNldCAyNTUgYnJlYWtwb2ludHMKYXQgYSB0aW1lIHNvIHlvdSBuZWFybHkgaGFkIHRvIHNwZW5kIGFzIGxvbmcgcHJ1bmluZyB0aGUgZmlsZSBkb3duIGFzIHlvdSB3b3VsZCAKZW50ZXJpbmcgdGhlIG1zZydzIGJ5IGhhbmQgKSxob3dldmVyLCB0aGUgdHJpY2sgbWlnaHQgYmUgdXNlZnVsIGZvciBhIHNpbmdsZSBvYmplY3QgZmlsZS4KT24gbGludXgnZXMgMzI3MCBlbXVsYXRvciB4MzI3MCB0aGVyZSBpcyBhIHZlcnkgdXNlZnVsIG9wdGlvbiB1bmRlciB0aGUgZmlsZSBtZW50ClNhdmUgU2NyZWVucyBJbiBGaWxlIHRoaXMgaXMgdmVyeSBnb29kIG9mIGtlZXBpbmcgYSBjb3B5IG9mIHRyYWNlcy4gCgpGcm9tIENNUyBoZWxwIDxjb21tYW5kIG5hbWU+IHdpbGwgZ2l2ZSB5b3Ugb25saW5lIGhlbHAgb24gYSBwYXJ0aWN1bGFyIGNvbW1hbmQuIAplLmcuIApIRUxQIERJU1BMQVkKCkFsc28gQ1AgaGFzIGEgZmlsZSBjYWxsZWQgcHJvZmlsZS5leGVjIHdoaWNoIGF1dG9tYXRpY2FsbHkgZ2V0cyBjYWxsZWQKb24gc3RhcnR1cCBvZiBDTVMgKCBsaWtlIGF1dG9leGVjLmJhdCApLCBrZWVwaW5nIG9uIGEgRE9TIGFuYWxvZ3kgc2Vzc2lvbgpDUCBoYXMgYSBmZWF0dXJlIHNpbWlsYXIgdG8gZG9za2V5LCBpdCBtYXkgYmUgdXNlZnVsIGZvciB5b3UgdG8KdXNlIHByb2ZpbGUuZXhlYyB0byBkZWZpbmUgc29tZSBrZXlzdHJva2VzLiAKZS5nLgpTRVQgUEY5IElNTSBCClRoaXMgZG9lcyBhIHNpbmdsZSBzdGVwIGluIFZNIG9uIHByZXNzaW5nIEY4LiAKU0VUIFBGMTAgIF4KVGhpcyBzZXRzIHVwIHRoZSBeIGtleS4Kd2hpY2ggY2FuIGJlIHVzZWQgZm9yIF5jIChjdHJsLWMpLF56IChjdHJsLXopIHdoaWNoIGNhbid0IGJlIHR5cGVkIGRpcmVjdGx5IGludG8gc29tZSAzMjcwIGNvbnNvbGVzLgpTRVQgUEYxMSBeLQpUaGlzIHR5cGVzIHRoZSBzdGFydGluZyBrZXlzdHJva2VzIGZvciBhIHN5c3JxIHNlZSBTeXNScSBiZWxvdy4KU0VUIFBGMTIgUkVUUklFVkUKVGhpcyByZXRyaWV2ZXMgY29tbWFuZCBoaXN0b3J5IG9uIHByZXNzaW5nIEYxMi4KCgpTb21ldGltZXMgaW4gVk0gdGhlIGRpc3BsYXkgaXMgc2V0IHVwIHRvIHNjcm9sbCBhdXRvbWF0aWNhbGx5IHRoaXMKY2FuIGJlIHZlcnkgYW5ub3lpbmcgaWYgdGhlcmUgYXJlIG1lc3NhZ2VzIHlvdSB3aXNoIHRvIGxvb2sgYXQKdG8gc3RvcCB0aGlzIGRvClRFUk0gTU9SRSAyNTUgMjU1ClRoaXMgd2lsbCBuZWFybHkgc3RvcCBhdXRvbWF0aWMgc2NyZWVuIHVwZGF0ZXMsIGhvd2V2ZXIgaXQgd2lsbApjYXVzZSBhIGRlbmlhbCBvZiBzZXJ2aWNlIGlmIGxvdHMgb2YgbWVzc2FnZXMgZ28gdG8gdGhlIDMyNzAgY29uc29sZSwKc28gaXQgd291bGQgYmUgZm9vbGlzaCB0byB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBvbiBhIHByb2R1Y3Rpb24gbWFjaGluZS4KIAoKVHJhY2luZyBwYXJ0aWN1bGFyIHByb2Nlc3NlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRoZSBrZXJuZWwncyB0ZXh0IHNlZ21lbnQgaXMgaW50ZW50aW9uYWxseSBhdCBhbiBhZGRyZXNzIGluIG1lbW9yeSB0aGF0IGl0IHdpbGwKdmVyeSBzZWxkb20gY29sbGlkZSB3aXRoIHRleHQgc2VnbWVudHMgb2YgdXNlciBwcm9ncmFtcyAoIHRoYW5rcyBNYXJ0aW4gKSwKdGhpcyBzaW1wbGlmaWVzIGRlYnVnZ2luZyB0aGUga2VybmVsLgpIb3dldmVyIGl0IGlzIHF1aXRlIGNvbW1vbiBmb3IgdXNlciBwcm9jZXNzZXMgdG8gaGF2ZSBhZGRyZXNzZXMgd2hpY2ggY29sbGlkZQp0aGlzIGNhbiBtYWtlIGRlYnVnZ2luZyBhIHBhcnRpY3VsYXIgcHJvY2VzcyB1bmRlciBWTSBwYWluZnVsIHVuZGVyIG5vcm1hbApjaXJjdW1zdGFuY2VzIGFzIHRoZSBwcm9jZXNzIG1heSBjaGFuZ2Ugd2hlbiBkb2luZyBhIApUUiBJIFIgPGFkZHJlc3MgcmFuZ2U+LgpUaGFua2Z1bGx5IGFmdGVyIHJlYWRpbmcgVk0ncyBvbmxpbmUgaGVscCBJIGZpZ3VyZWQgb3V0IGhvdyB0byBkZWJ1ZwpJIHBhcnRpY3VsYXIgcHJvY2Vzcy4KCllvdXIgZmlyc3QgcHJvYmxlbSBpcyB0byBmaW5kIHRoZSBTVEQgKCBzZWdtZW50IHRhYmxlIGRlc2lnbmF0aW9uICkKb2YgdGhlIHByb2dyYW0geW91IHdpc2ggdG8gZGVidWcuClRoZXJlIGFyZSBzZXZlcmFsIHdheXMgeW91IGNhbiBkbyB0aGlzIGhlcmUgYXJlIGEgZmV3CjEpIG9iamR1bXAgLS1zeW1zIDxwcm9ncmFtIHRvIGJlIGRlYnVnZ2VkPiB8IGdyZXAgbWFpbgpUbyBnZXQgdGhlIGFkZHJlc3Mgb2YgbWFpbiBpbiB0aGUgcHJvZ3JhbS4KdHIgaSBwc3dhIDxhZGRyZXNzIG9mIG1haW4+ClN0YXJ0IHRoZSBwcm9ncmFtLCBpZiBWTSBkcm9wcyB0byBDUCBvbiB3aGF0IGxvb2tzIGxpa2UgdGhlIGVudHJ5CnBvaW50IG9mIHRoZSBtYWluIGZ1bmN0aW9uIHRoaXMgaXMgbW9zdCBsaWtlbHkgdGhlIHByb2Nlc3MgeW91IHdpc2ggdG8gZGVidWcuCk5vdyBkbyBhIEQgWDEzIG9yIEQgWEcxMyBvbiB6L0FyY2hpdGVjdHVyZS4KT24gMzEgYml0IHRoZSBTVEQgaXMgYml0cyAxLTE5ICggdGhlIFNUTyBzZWdtZW50IHRhYmxlIG9yaWdpbiApIAomIDI1LTMxICggdGhlIFNUTCBzZWdtZW50IHRhYmxlIGxlbmd0aCApIG9mIENSMTMuCm5vdyB0eXBlClRSIEkgUiBTVEQgPENSMTMncyB2YWx1ZT4gMC43ZmZmZmZmZgplLmcuClRSIEkgUiBTVEQgOEYzMkUxRkYgMC43ZmZmZmZmZgpBbm90aGVyIHZlcnkgdXNlZnVsIHZhcmlhdGlvbiBpcwpUUiBTVE9SRSBJTlRPIFNURCA8Q1IxMydzIHZhbHVlPiA8YWRkcmVzcyByYW5nZT4KZm9yIGZpbmRpbmcgb3V0IHdoZW4gYSBwYXJ0aWN1bGFyIHZhcmlhYmxlIGNoYW5nZXMuCgpBbiBhbHRlcm5hdGl2ZSB3YXkgb2YgZmluZGluZyB0aGUgU1REIG9mIGEgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcyAKaXMgdG8gZG8gdGhlIGZvbGxvd2luZywgKCB0aGlzIG1ldGhvZCBpcyBtb3JlIGNvbXBsZXggYnV0CmNvdWxkIGJlIHF1aXRlIGNvbnZlbmllbnQgaWYgeW91IGFyZW4ndCB1cGRhdGluZyB0aGUga2VybmVsIG11Y2ggJgpzbyB5b3VyIGtlcm5lbCBzdHJ1Y3R1cmVzIHdpbGwgc3RheSBjb25zdGFudCBmb3IgYSByZWFzb25hYmxlIHBlcmlvZCBvZgp0aW1lICkuCgpncmVwIHRhc2sgL3Byb2MvPHBpZD4vc3RhdHVzCmZyb20gdGhpcyB5b3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZQp0YXNrOiAwZjE2MDAwMCBrc3A6IDBmMTYxZGU4IHB0X3JlZ3M6IDBmMTYxZjY4ClRoaXMgbm93IGdpdmVzIHlvdSBhIHBvaW50ZXIgdG8gdGhlIHRhc2sgc3RydWN0dXJlLgpOb3cgbWFrZSBDQzo9InMzOTAtZ2NjIC1nIiBrZXJuZWwvc2NoZWQucwpUbyBnZXQgdGhlIHRhc2tfc3RydWN0IHN0YWJpbmZvLgooIHRhc2tfc3RydWN0IGlzIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9zY2hlZC5oICkuCk5vdyB3ZSB3YW50IHRvIGxvb2sgYXQKdGFzay0+YWN0aXZlX21tLT5wZ2QKb24gbXkgbWFjaGluZSB0aGUgYWN0aXZlX21tIGluIHRoZSB0YXNrIHN0cnVjdHVyZSBzdGFiIGlzCmFjdGl2ZV9tbTooNCwxMiksNjcyLDMyCml0cyBvZmZzZXQgaXMgNjcyLzg9ODQ9MHg1NAp0aGUgcGdkIG1lbWJlciBpbiB0aGUgbW1fc3RydWN0IHN0YWIgaXMKcGdkOig0LDYpPSooMjksNSksOTYsMzIKc28gaXRzIG9mZnNldCBpcyA5Ni84PTEyPTB4YwoKc28gd2UnbGwKaGV4ZHVtcCAtcyAweGYxNjAwNTQgL2Rldi9tZW0gfCBtb3JlCmkuZS4gdGFza19zdHJ1Y3QrYWN0aXZlX21tIG9mZnNldAp0byBsb29rIGF0IHRoZSBhY3RpdmVfbW0gbWVtYmVyCmYxNjAwNTQgMGZlZSBjYzYwIDAwMTkgZTMzNCAwMDAwIDAwMDAgMDAwMCAwMDExCmhleGR1bXAgLXMgMHgwZmVlY2M2YyAvZGV2L21lbSB8IG1vcmUKaS5lLiBhY3RpdmVfbW0rcGdkIG9mZnNldApmZWVjYzZjIDBmMmMgMDAwMCAwMDAwIDAwMDEgMDAwMCAwMDAxIDAwMDAgMDAxMAp3ZSBnZXQgc29tZXRoaW5nIGxpa2UKbm93IGRvIApUUiBJIFIgU1REIDxwZ2R8MHg3Zj4gMC43ZmZmZmZmZgppLmUuIHRoZSAweDdmIGlzIGFkZGVkIGJlY2F1c2UgdGhlIHBnZCBvbmx5CmdpdmVzIHRoZSBwYWdlIHRhYmxlIG9yaWdpbiAmIHdlIG5lZWQgdG8gc2V0IHRoZSBsb3cgYml0cwp0byB0aGUgbWF4aW11bSBwb3NzaWJsZSBzZWdtZW50IHRhYmxlIGxlbmd0aC4KVFIgSSBSIFNURCAwZjJjMDA3ZiAwLjdmZmZmZmZmCm9uIHovQXJjaGl0ZWN0dXJlIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIGRvClRSIEkgUiBTVEQgPHBnZHwweDc+IDAuZmZmZmZmZmZmZmZmZmZmZgp0byBzZXQgdGhlIFRhYmxlVHlwZSB0byAweDEgJiB0aGUgVGFibGUgbGVuZ3RoIHRvIDMuCgoKClRyYWNpbmcgUHJvZ3JhbSBFeGNlcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCklmIHlvdSBnZXQgYSBjcmFzaCB3aGljaCBzYXlzIHNvbWV0aGluZyBsaWtlCmlsbGVnYWwgb3BlcmF0aW9uIG9yIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIGZvbGxvd2VkIGJ5IGEgcmVnaXN0ZXIgZHVtcApZb3UgY2FuIHJlc3RhcnQgbGludXggJiB0cmFjZSB0aGVzZSB1c2luZyB0aGUgdHIgcHJvZyA8cmFuZ2Ugb3IgdmFsdWU+IHRyYWNlIG9wdGlvbi4KCgoKVGhlIG1vc3QgY29tbW9uIG9uZXMgeW91IHdpbGwgbm9ybWFsbHkgYmUgdHJhY2luZyBmb3IgaXMKMT1vcGVyYXRpb24gZXhjZXB0aW9uCjI9cHJpdmlsZWdlZCBvcGVyYXRpb24gZXhjZXB0aW9uCjQ9cHJvdGVjdGlvbiBleGNlcHRpb24KNT1hZGRyZXNzaW5nIGV4Y2VwdGlvbgo2PXNwZWNpZmljYXRpb24gZXhjZXB0aW9uCjEwPXNlZ21lbnQgdHJhbnNsYXRpb24gZXhjZXB0aW9uCjExPXBhZ2UgdHJhbnNsYXRpb24gZXhjZXB0aW9uCgpUaGUgZnVsbCBsaXN0IG9mIHRoZXNlIGlzIG9uIHBhZ2UgMjIgb2YgdGhlIGN1cnJlbnQgcy8zOTAgUmVmZXJlbmNlIFN1bW1hcnkuCmUuZy4KdHIgcHJvZyAxMCB3aWxsIHRyYWNlIHNlZ21lbnQgdHJhbnNsYXRpb24gZXhjZXB0aW9ucy4KdHIgcHJvZyBvbiBpdHMgb3duIHdpbGwgdHJhY2UgYWxsIHByb2dyYW0gaW50ZXJydXB0aW9uIGNvZGVzLgoKVHJhY2UgU2V0cwotLS0tLS0tLS0tCk9uIHN0YXJ0aW5nIFZNIHlvdSBhcmUgaW5pdGlhbGx5IGluIHRoZSBJTklUSUFMIHRyYWNlIHNldC4KWW91IGNhbiBkbyBhIFEgVFIgdG8gdmVyaWZ5IHRoaXMuCklmIHlvdSBoYXZlIGEgY29tcGxleCB0cmFjaW5nIHNpdHVhdGlvbiB3aGVyZSB5b3Ugd2lzaCB0byB3YWl0IGZvciBpbnN0YW5jZSAKdGlsbCBhIGRyaXZlciBpcyBvcGVuIGJlZm9yZSB5b3Ugc3RhcnQgdHJhY2luZyBJTywgYnV0IGtub3cgaW4geW91cgpoZWFydCB0aGF0IHlvdSBhcmUgZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHNldmVyYWwgcnVucyB0aHJvdWdoIHRoZSBjb2RlIHRpbGwgeW91CmhhdmUgYSBjbHVlIHdoYXRzIGdvaW5nIG9uLiAKCldoYXQgeW91IGNhbiBkbyBpcwpUUiBJIFBTV0EgPERyaXZlciBvcGVuIGFkZHJlc3M+CmhpdCBiIHRvIGNvbnRpbnVlIHRpbGwgYnJlYWtwb2ludApyZWFjaCB0aGUgYnJlYWtwb2ludApub3cgZG8geW91cgpUUiBHT1RPIEIgClRSIElPIDdjMDgtN2MwOSBpbnN0IGludCBydW4gCm9yIHdoYXRldmVyIHRoZSBJTyBjaGFubmVscyB5b3Ugd2lzaCB0byB0cmFjZSBhcmUgJiBoaXQgYgoKVG8gZ290IGJhY2sgdG8gdGhlIGluaXRpYWwgdHJhY2Ugc2V0IGRvClRSIEdPVE8gSU5JVElBTAomIHRoZSBUUiBJIFBTV0EgPERyaXZlciBvcGVuIGFkZHJlc3M+IHdpbGwgYmUgdGhlIG9ubHkgYWN0aXZlIGJyZWFrcG9pbnQgYWdhaW4uCgoKVHJhY2luZyBsaW51eCBzeXNjYWxscyB1bmRlciBWTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN5c2NhbGxzIGFyZSBpbXBsZW1lbnRlZCBvbiBMaW51eCBmb3IgUzM5MCBieSB0aGUgU3VwZXJ2aXNvciBjYWxsIGluc3RydWN0aW9uIChTVkMpIHRoZXJlIDI1NiAKcG9zc2liaWxpdGllcyBvZiB0aGVzZSBhcyB0aGUgaW5zdHJ1Y3Rpb24gaXMgbWFkZSB1cCBvZiBhICAweEEgb3Bjb2RlICYgdGhlIHNlY29uZCBieXRlIGJlaW5nCnRoZSBzeXNjYWxsIG51bWJlci4gVGhleSBhcmUgdHJhY2VkIHVzaW5nIHRoZSBzaW1wbGUgY29tbWFuZC4KVFIgU1ZDICA8T3B0aW9uYWwgdmFsdWUgb3IgcmFuZ2U+CnRoZSBzeXNjYWxscyBhcmUgZGVmaW5lZCBpbiBsaW51eC9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCmUuZy4gdG8gdHJhY2UgYWxsIGZpbGUgb3BlbnMganVzdCBkbwpUUiBTVkMgNSAoIGFzIHRoaXMgaXMgdGhlIHN5c2NhbGwgbnVtYmVyIG9mIG9wZW4gKQoKClNNUCBTcGVjaWZpYyBjb21tYW5kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KVG8gZmluZCBvdXQgaG93IG1hbnkgY3B1cyB5b3UgaGF2ZQpRIENQVVMgZGlzcGxheXMgYWxsIHRoZSBDUFUncyBhdmFpbGFibGUgdG8geW91ciB2aXJ0dWFsIG1hY2hpbmUKVG8gZmluZCB0aGUgY3B1IHRoYXQgdGhlIGN1cnJlbnQgY3B1IFZNIGRlYnVnZ2VyIGNvbW1hbmRzIGFyZSBiZWluZyBkaXJlY3RlZCBhdCBkbwpRIENQVSB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgY3B1IFZNIGRlYnVnZ2VyIGNvbW1hbmRzIGFyZSBiZWluZyBkaXJlY3RlZCBhdCBkbwpDUFUgPGRlc2lyZWQgY3B1IG5vPgoKT24gYSBTTVAgZ3Vlc3QgaXNzdWUgYSBjb21tYW5kIHRvIGFsbCBDUFVzIHRyeSBwcmVmaXhpbmcgdGhlIGNvbW1hbmQgd2l0aCBjcHUgYWxsLgpUbyBpc3N1ZSBhIGNvbW1hbmQgdG8gYSBwYXJ0aWN1bGFyIGNwdSB0cnkgY3B1IDxjcHUgbnVtYmVyPiBlLmcuCkNQVSAwMSBUUiBJIFIgMjAwMC4zMDAwCklmIHlvdSBhcmUgcnVubmluZyBvbiBhIGd1ZXN0IHdpdGggc2V2ZXJhbCBjcHVzICYgeW91IGhhdmUgYSBJTyByZWxhdGVkIHByb2JsZW0KJiBjYW5ub3QgZm9sbG93IHRoZSBmbG93IG9mIGNvZGUgYnV0IHlvdSBrbm93IGl0IGlzbnQgc21wIHJlbGF0ZWQuCmZyb20gdGhlIGJhc2ggcHJvbXB0IGlzc3VlCnNodXRkb3duIC1oIG5vdyBvciBoYWx0LgpkbyBhIFEgQ1BVUyB0byBmaW5kIG91dCBob3cgbWFueSBjcHVzIHlvdSBoYXZlCmRldGFjaCBlYWNoIG9uZSBvZiB0aGVtIGZyb20gY3AgZXhjZXB0IGNwdSAwIApieSBpc3N1aW5nIGEgCkRFVEFDSCBDUFUgMDEtKG51bWJlciBvZiBjcHVzIGluIGNvbmZpZ3VyYXRpb24pCiYgYm9vdCBsaW51eCBhZ2Fpbi4KVFIgU0lHUCB3aWxsIHRyYWNlIGludGVyIHByb2Nlc3NvciBzaWduYWwgcHJvY2Vzc29yIGluc3RydWN0aW9ucy4KREVGSU5FIENQVSAwMS0obnVtYmVyIGluIGNvbmZpZ3VyYXRpb24pIAp3aWxsIGdldCB5b3VyIGd1ZXN0cyBjcHVzIGJhY2suCgoKSGVscCBmb3IgZGlzcGxheWluZyBhc2NpaSB0ZXh0c3RyaW5ncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk9uIHRoZSB2ZXJ5IGxhdGVzdCBWTSBOdWNsZXVzJ2VzIFZNIGNhbiBub3cgZGlzcGxheSBhc2NpaQooIHRoYW5rcyBOZWFsZSBmb3IgdGhlIGhpbnQgKSBieSBkb2luZwpEIFRYPGxvd2FkZHI+LjxsZW4+CmUuZy4KRCBUWDAuMTAwCgpBbHRlcm5hdGl2ZWx5Cj09PT09PT09PT09PT0KVW5kZXIgb2xkZXIgVk0gZGVidWdnZXJzICggSSBsb3ZlIEVCRElDIHRvbyApIHlvdSBjYW4gdXNlIHRoaXMgbGl0dGxlIHByb2dyYW0gSSB3cm90ZSB3aGljaAp3aWxsIGNvbnZlcnQgYSBjb21tYW5kIGxpbmUgb2YgaGV4IGRpZ2l0cyB0byBhc2NpaSB0ZXh0IHdoaWNoIGNhbiBiZSBjb21waWxlZCB1bmRlciBsaW51eCAmIAp5b3UgY2FuIGNvcHkgdGhlIGhleCBkaWdpdHMgZnJvbSB5b3VyIHgzMjcwIHRlcm1pbmFsIHRvIHlvdXIgeHRlcm0gaWYgeW91IGFyZSBkZWJ1Z2dpbmcKZnJvbSBhIGxpbnV4Ym94LgoKVGhpcyBpcyBxdWl0ZSB1c2VmdWwgd2hlbiBsb29raW5nIGF0IGEgcGFyYW1ldGVyIHBhc3NlZCBpbiBhcyBhIHRleHQgc3RyaW5nCnVuZGVyIFZNICggdW5sZXNzIHlvdSBhcmUgZ29vZCBhdCBkZWNvZGluZyBBU0NJSSBpbiB5b3VyIGhlYWQgKS4KCmUuZy4gY29uc2lkZXIgdHJhY2luZyBhbiBvcGVuIHN5c2NhbGwKVFIgU1ZDIDUKV2UgaGF2ZSBzdG9wcGVkIGF0IGEgYnJlYWtwb2ludAowMDAxNTFCMCcgU1ZDICAgMEEwNSAgICAgLT4gMDAwMTkwOUEnICAgQ0MgMAoKRCAyMC44IHRvIGNoZWNrIHRoZSBTVkMgb2xkIHBzdyBpbiB0aGUgcHJlZml4IGFyZWEgJiBzZWUgd2FzIGl0IGZyb20gdXNlcnNwYWNlCiggZm9yIHRoZSBsYXlvdXQgb2YgdGhlIHByZWZpeCBhcmVhIGNvbnN1bHQgUDE4IG9mIHRoZSBzLzM5MCAzOTAgUmVmZXJlbmNlIFN1bW1hcnkgCmlmIHlvdSBoYXZlIGl0IGF2YWlsYWJsZSApLgpWMDAwMDAwMjAgIDA3MEMyMDAwIDgwMDE1MUIyClRoZSBwcm9ibGVtIHN0YXRlIGJpdCB3YXNuJ3Qgc2V0ICYgIGl0J3MgYWxzbyB0b28gZWFybHkgaW4gdGhlIGJvb3Qgc2VxdWVuY2UKZm9yIGl0IHRvIGJlIGEgdXNlcnNwYWNlIFNWQyBpZiBpdCB3YXMgd2Ugd291bGQgaGF2ZSB0byB0ZW1wb3JhcmlseSBzd2l0Y2ggdGhlIApwc3cgdG8gdXNlciBzcGFjZSBhZGRyZXNzaW5nIHNvIHdlIGNvdWxkIGdldCBhdCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBvcGVuIGluCmdwcjIuCk5leHQgZG8gYSAKRCBHMgpHUFIgIDIgPSAgMDAwMTRDQjQKTm93IGRpc3BsYXkgd2hhdCBncHIyIGlzIHBvaW50aW5nIHRvCkQgMDAwMTRDQjQuMjAKVjAwMDE0Q0I0ICAyRjY0NjU3NiAyRjYzNkY2RSA3MzZGNkM2NSAwMDAwMUJGNQpWMDAwMTRDQzQgIEZDMDAwMTRDIEI0MDAxMDAxIEUwMDAxMDAwIEI4MDcwNzA3Ck5vdyBjb3B5IHRoZSB0ZXh0IHRpbGwgdGhlIGZpcnN0IDAwIGhleCAoIHdoaWNoIGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZwp0byBhbiB4dGVybSAmIGRvIGhleDJhc2NpaSBvbiBpdC4KaGV4MmFzY2lpIDJGNjQ2NTc2IDJGNjM2RjZFIDczNkY2QzY1IDAwIApvdXRwdXRzCkRlY29kZWQgSGV4Oj0vIGQgZSB2IC8gYyBvIG4gcyBvIGwgZSAweDAwIApXZSB3ZXJlIG9wZW5pbmcgdGhlIGNvbnNvbGUgZGV2aWNlLAoKWW91IGNhbiBjb21waWxlIHRoZSBjb2RlIGJlbG93IHlvdXJzZWxmIGZvciBwcmFjdGljZSA6LSksCi8qCiAqICAgIGhleDJhc2NpaS5jCiAqICAgIGEgdXNlZnVsIGxpdHRsZSB0b29sIGZvciBjb252ZXJ0aW5nIGEgaGV4YWRlY2ltYWwgY29tbWFuZCBsaW5lIHRvIGFzY2lpCiAqCiAqICAgIEF1dGhvcihzKTogRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQogKiAgICAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uLgogKi8gICAKI2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsKICBpbnQgY250MSxjbnQyLGxlbix0b2dnbGU9MDsKICBpbnQgc3RhcnRjbnQ9MTsKICB1bnNpZ25lZCBjaGFyIGMsaGV4OwogIAogIGlmKGFyZ2M+MSYmKHN0cmNtcChhcmd2WzFdLCItYSIpPT0wKSkKICAgICBzdGFydGNudD0yOwogIHByaW50ZigiRGVjb2RlZCBIZXg6PSIpOwogIGZvcihjbnQxPXN0YXJ0Y250O2NudDE8YXJnYztjbnQxKyspCiAgewogICAgbGVuPXN0cmxlbihhcmd2W2NudDFdKTsKICAgIGZvcihjbnQyPTA7Y250MjxsZW47Y250MisrKQogICAgewogICAgICAgYz1hcmd2W2NudDFdW2NudDJdOwogICAgICAgaWYoYz49JzAnJiZjPD0nOScpCgkgIGM9Yy0nMCc7CiAgICAgICBpZihjPj0nQScmJmM8PSdGJykKCSAgYz1jLSdBJysxMDsKICAgICAgIGlmKGM+PSdhJyYmYzw9J2YnKQoJICBjPWMtJ2EnKzEwOwogICAgICAgc3dpdGNoKHRvZ2dsZSkKICAgICAgIHsKCSAgY2FzZSAwOgoJICAgICBoZXg9Yzw8NDsKCSAgICAgdG9nZ2xlPTE7CgkgIGJyZWFrOwoJICBjYXNlIDE6CgkgICAgIGhleCs9YzsKCSAgICAgaWYoaGV4PDMyfHxoZXg+MTI3KQoJICAgICB7CgkJaWYoc3RhcnRjbnQ9PTEpCgkJICAgcHJpbnRmKCIweCUwMlggIiwoaW50KWhleCk7CgkJZWxzZQoJCSAgIHByaW50ZigiLiIpOwoJICAgICB9CgkgICAgIGVsc2UKCSAgICAgewoJICAgICAgIHByaW50ZigiJWMiLGhleCk7CgkgICAgICAgaWYoc3RhcnRjbnQ9PTEpCgkJICBwcmludGYoIiAiKTsKCSAgICAgfQoJICAgICB0b2dnbGU9MDsKCSAgYnJlYWs7CiAgICAgICB9CiAgICB9CiAgfQogIHByaW50ZigiXG4iKTsKfQoKCgoKU3RhY2sgdHJhY2luZyB1bmRlciBWTQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkEgYmFzaWMgYmFja3RyYWNlCi0tLS0tLS0tLS0tLS0tLS0tCgpIZXJlIGFyZSB0aGUgdHJpY2tzIEkgdXNlIDkgb3V0IG9mIDEwIHRpbWVzIGl0IHdvcmtzIHByZXR0eSB3ZWxsLAoKV2hlbiB5b3VyIGJhY2tjaGFpbiByZWFjaGVzIGEgZGVhZCBlbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhpcyBjYW4gaGFwcGVuIHdoZW4gYW4gZXhjZXB0aW9uIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCAmIHRoZSBrZXJuZWwgaXMgZW50ZXJlZCB0d2ljZQppZiB5b3UgcmVhY2ggdGhlIE5VTEwgcG9pbnRlciBhdCB0aGUgZW5kIG9mIHRoZSBiYWNrIGNoYWluIHlvdSBzaG91bGQgYmUKYWJsZSB0byBzbmlmZiBmdXJ0aGVyIGJhY2sgaWYgeW91IGZvbGxvdyB0aGUgZm9sbG93aW5nIHRyaWNrcy4KMSkgQSBrZXJuZWwgYWRkcmVzcyBzaG91bGQgYmUgZWFzeSB0byByZWNvZ25pc2Ugc2luY2UgaXQgaXMgaW4KcHJpbWFyeSBzcGFjZSAmIHRoZSBwcm9ibGVtIHN0YXRlIGJpdCBpc24ndCBzZXQgJiBhbHNvClRoZSBIaSBiaXQgb2YgdGhlIGFkZHJlc3MgaXMgc2V0LgoyKSBBbm90aGVyIGJhY2tjaGFpbiBzaG91bGQgYWxzbyBiZSBlYXN5IHRvIHJlY29nbmlzZSBzaW5jZSBpdCBpcyBhbiAKYWRkcmVzcyBwb2ludGluZyB0byBhbm90aGVyIGFkZHJlc3MgYXBwcm94aW1hdGVseSAxMDAgYnl0ZXMgb3IgMHg3MCBoZXgKYmVoaW5kIHRoZSBjdXJyZW50IHN0YWNrcG9pbnRlci4KCgpIZXJlIGlzIHNvbWUgcHJhY3RpY2UuCmJvb3QgdGhlIGtlcm5lbCAmIGhpdCBQQTEgYXQgc29tZSByYW5kb20gdGltZQpkIGcgdG8gZGlzcGxheSB0aGUgZ3BycywgdGhpcyBzaG91bGQgZGlzcGxheSBzb21ldGhpbmcgbGlrZQpHUFIgIDAgPSAgMDAwMDAwMDEgIDAwMTU2MDE4ICAwMDE0MzU5QyAgMDAwMDAwMDAKR1BSICA0ID0gIDAwMDAwMDAxICAwMDFCODg4OCAgMDAwMDAzRTAgIDAwMDAwMDAwCkdQUiAgOCA9ICAwMDEwMDA4MCAgMDAxMDAwODQgIDAwMDAwMDAwICAwMDBGRTAwMApHUFIgMTIgPSAgMDAwMTA0MDAgIDgwMDFCMkRDICA4MDAxQjM2QSAgMDAwRkZFRDgKTm90ZSB0aGF0IEdQUjE0IGlzIGEgcmV0dXJuIGFkZHJlc3MgYnV0IGFzIHdlIGFyZSByZWFsIG1lbiB3ZSBhcmUgZ29pbmcgdG8KdHJhY2UgdGhlIHN0YWNrLgpkaXNwbGF5IDB4NDAgYnl0ZXMgYWZ0ZXIgdGhlIHN0YWNrIHBvaW50ZXIuCgpWMDAwRkZFRDggIDAwMEZGRjM4IDgwMDFCODM4IDgwMDE0QzhFIDAwMEZGRjM4ClYwMDBGRkVFOCAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAzRTAgMDAwMDAwMDAKVjAwMEZGRUY4ICAwMDEwMDA4MCAwMDEwMDA4NCAwMDAwMDAwMCAwMDBGRTAwMApWMDAwRkZGMDggIDAwMDEwNDAwIDgwMDFCMkRDIDgwMDFCMzZBIDAwMEZGRUQ4CgoKQWggbm93IGxvb2sgYXQgd2hhdHMgaW4gc3ArNTYgKHNwKzB4MzgpIHRoaXMgaXMgODAwMUIzNkEgb3VyIHNhdmVkIHIxNCBpZgp5b3UgbG9vayBhYm92ZSBhdCBvdXIgc3RhY2tmcmFtZSAmIGFsc28gYWdyZWVzIHdpdGggR1BSMTQuCgpub3cgYmFja2NoYWluIApkIDAwMEZGRjM4LjQwCndlIG5vdyBhcmUgdGFraW5nIHRoZSBjb250ZW50cyBvZiBTUCB0byBnZXQgb3VyIGZpcnN0IGJhY2tjaGFpbi4KClYwMDBGRkYzOCAgMDAwRkZGQTAgMDAwMDAwMDAgMDAwMTQ5OTUgMDAxNDcwOTQKVjAwMEZGRjQ4ICAwMDE0NzA5MCAwMDE0NzBBMCAwMDAwMDNFMCAwMDAwMDAwMApWMDAwRkZGNTggIDAwMTAwMDgwIDAwMTAwMDg0IDAwMDAwMDAwIDAwMUJGMUQwClYwMDBGRkY2OCAgMDAwMTA0MDAgODAwMTQ5QkEgODAwMTRDQTYgMDAwRkZGMzgKClRoaXMgZGlzcGxheXMgYSAybmQgcmV0dXJuIGFkZHJlc3Mgb2YgODAwMTRDQTYKCm5vdyBkbyBkIDAwMEZGRkEwLjQwIGZvciBvdXIgM3JkIGJhY2tjaGFpbgoKVjAwMEZGRkEwICAwNEI1MjAwMiAwMDAxMTA3RiAwMDAwMDAwMCAwMDAwMDAwMApWMDAwRkZGQjAgIDAwMDAwMDAwIDAwMDAwMDAwIEZGMDAwMDAwIDAwMDExMDdGClYwMDBGRkZDMCAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAKVjAwMEZGRkQwICAwMDAxMDQwMCA4MDAxMDgwMiA4MDAxMDg1QSAwMDBGRkZBMAoKCm91ciAzcmQgcmV0dXJuIGFkZHJlc3MgaXMgODAwMTA4NUEKCmFzIHRoZSAwNEI1MjAwMiBsb29rcyBzdXNwaWNpb3VzbHkgbGlrZSBydWJiaXNoIGl0IGlzIGZhaXIgdG8gYXNzdW1lIHRoYXQgdGhlIGtlcm5lbCBlbnRyeSByb3V0aW5lcwpmb3IgdGhlIHNha2Ugb2Ygb3B0aW1pc2F0aW9uIGRvbnQgc2V0IHVwIGEgYmFja2NoYWluLgoKbm93IGxvb2sgYXQgU3lzdGVtLm1hcCB0byBzZWUgaWYgdGhlIGFkZHJlc3NlcyBtYWtlIGFueSBzZW5zZS4KCmdyZXAgLWkgMDAwMWIzIFN5c3RlbS5tYXAKb3V0cHV0cyBhbW9uZyBvdGhlciB0aGluZ3MKMDAwMWIzMDQgVCBjcHVfaWRsZSAKc28gODAwMUIzNkEKaXMgY3B1X2lkbGUrMHg2NiAoIHF1aWV0IHRoZSBjcHUgaXMgYXNsZWVwLCBkb24ndCB3YWtlIGl0ICkKCgpncmVwIC1pIDAwMDE0IFN5c3RlbS5tYXAgCnByb2R1Y2VzIGFtb25nIG90aGVyIHRoaW5ncwowMDAxNGE3OCBUIHN0YXJ0X2tlcm5lbCAgCnNvIDAwMTRDQTYgaXMgc3RhcnRfa2VybmVsK3NvbWUgaGV4IG51bWJlciBJIGNhbid0IGFkZCBpbiBteSBoZWFkLgoKZ3JlcCAtaSAwMDEwOCBTeXN0ZW0ubWFwIAp0aGlzIHByb2R1Y2VzCjAwMDEwODAwIFQgX3N0ZXh0CnNvICAgODAwMTA4NUEgaXMgX3N0ZXh0KzB4NWEKCkNvbmdyYXRzIHlvdSd2ZSBkb25lIHlvdXIgZmlyc3QgYmFja2NoYWluLgoKCgpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIElPIE92ZXJ2aWV3Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkkgYW0gbm90IGdvaW5nIHRvIGdpdmUgYSBjb3Vyc2UgaW4gMzkwIElPIGFyY2hpdGVjdHVyZSBhcyB0aGlzIHdvdWxkIHRha2UgbWUgcXVpdGUgYQp3aGlsZSAmIEknbSBubyBleHBlcnQuIEluc3RlYWQgSSdsbCBnaXZlIGEgMzkwIElPIGFyY2hpdGVjdHVyZSBzdW1tYXJ5IGZvciBEdW1taWVzIGlmIHlvdSBoYXZlIAp0aGUgcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24gYXZhaWxhYmxlIHJlYWQgdGhpcyBpbnN0ZWFkLiBJZiBub3RoaW5nIGVsc2UgeW91IG1heSBmaW5kIGEgZmV3IAp1c2VmdWwga2V5d29yZHMgaW4gaGVyZSAmIGJlIGFibGUgdG8gdXNlIHRoZW0gb24gYSB3ZWIgc2VhcmNoIGVuZ2luZSBsaWtlIGFsdGF2aXN0YSB0byBmaW5kIAptb3JlIHVzZWZ1bCBpbmZvcm1hdGlvbi4KClVubGlrZSBvdGhlciBidXMgYXJjaGl0ZWN0dXJlcyBtb2Rlcm4gMzkwIHN5c3RlbXMgZG8gdGhlaXIgSU8gdXNpbmcgbW9zdGx5CmZpYnJlIG9wdGljcyAmIGRldmljZXMgc3VjaCBhcyB0YXBlcyAmIGRpc2tzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsIG1haW5mcmFtZXMsCmFsc28gUzM5MCBjYW4gc3VwcG9ydCB1cHRvIDY1NTM2IGRldmljZXMgd2hpbGUgYSBoaWdoIGVuZCBQQyBiYXNlZCBzeXN0ZW0gbWlnaHQgYmUgY2hva2luZyAKd2l0aCBhcm91bmQgNjQuIEhlcmUgaXMgc29tZSBvZiB0aGUgY29tbW9uIElPIHRlcm1pbm9sb2d5CgpTdWJjaGFubmVsOgpUaGlzIGlzIHRoZSBsb2dpY2FsIG51bWJlciBtb3N0IElPIGNvbW1hbmRzIHVzZSB0byB0YWxrIHRvIGFuIElPIGRldmljZSB0aGVyZSBjYW4gYmUgdXB0bwoweDEwMDAwICg2NTUzNikgb2YgdGhlc2UgaW4gYSBjb25maWd1cmF0aW9uIHR5cGljYWxseSB0aGVyZSBpcyBhIGZldyBodW5kcmVkLiBVbmRlciBWTQpmb3Igc2ltcGxpY2l0eSB0aGV5IGFyZSBhbGxvY2F0ZWQgY29udGlndW91c2x5LCBob3dldmVyIG9uIHRoZSBuYXRpdmUgaGFyZHdhcmUgdGhleSBhcmUgbm90CnRoZXkgdHlwaWNhbGx5IHN0YXkgY29uc2lzdGVudCBiZXR3ZWVuIGJvb3RzIHByb3ZpZGVkIG5vIG5ldyBoYXJkd2FyZSBpcyBpbnNlcnRlZCBvciByZW1vdmVkLgpVbmRlciBMaW51eCBmb3IgMzkwIHdlIHVzZSB0aGVzZSBhcyBJUlEncyAmIGFsc28gd2hlbiBpc3N1aW5nIGFuIElPIGNvbW1hbmQgKENMRUFSIFNVQkNIQU5ORUwsCkhBTFQgU1VCQ0hBTk5FTCxNT0RJRlkgU1VCQ0hBTk5FTCxSRVNVTUUgU1VCQ0hBTk5FTCxTVEFSVCBTVUJDSEFOTkVMLFNUT1JFIFNVQkNIQU5ORUwgJiAKVEVTVCBTVUJDSEFOTkVMICkgd2UgdXNlIHRoaXMgYXMgdGhlIElEIG9mIHRoZSBkZXZpY2Ugd2Ugd2lzaCB0byB0YWxrIHRvLCB0aGUgbW9zdAppbXBvcnRhbnQgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBTVEFSVCBTVUJDSEFOTkVMICggdG8gc3RhcnQgSU8gKSwgVEVTVCBTVUJDSEFOTkVMICggdG8gY2hlY2sKd2hldGhlciB0aGUgSU8gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSApLCAmIEhBTFQgU1VCQ0hBTk5FTCAoIHRvIGtpbGwgSU8gKSwgYSBzdWJjaGFubmVsCmNhbiBoYXZlIHVwIHRvIDggY2hhbm5lbCBwYXRocyB0byBhIGRldmljZSB0aGlzIG9mZmVycyByZWR1bmFuY3kgaWYgb25lIGlzIG5vdCBhdmFpbGFibGUuCgoKRGV2aWNlIE51bWJlcjoKVGhpcyBudW1iZXIgcmVtYWlucyBzdGF0aWMgJiBJcyBjbG9zZWx5IHRpZWQgdG8gdGhlIGhhcmR3YXJlLCB0aGVyZSBhcmUgNjU1MzYgb2YgdGhlc2UKYWxzbyB0aGV5IGFyZSBtYWRlIHVwIG9mIGEgQ0hQSUQgKCBDaGFubmVsIFBhdGggSUQsIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cyApIAomIGFub3RoZXIgbHNiIDggYml0cy4gVGhlc2UgcmVtYWluIHN0YXRpYyBldmVuIGlmIG1vcmUgZGV2aWNlcyBhcmUgaW5zZXJ0ZWQgb3IgcmVtb3ZlZApmcm9tIHRoZSBoYXJkd2FyZSwgdGhlcmUgaXMgYSAxIHRvIDEgbWFwcGluZyBiZXR3ZWVuIFN1YmNoYW5uZWxzICYgRGV2aWNlIE51bWJlcnMgcHJvdmlkZWQKZGV2aWNlcyBhcmVudCBpbnNlcnRlZCBvciByZW1vdmVkLgoKQ2hhbm5lbCBDb250cm9sIFdvcmRzOgpDQ1dTIGFyZSBsaW5rZWQgbGlzdHMgb2YgaW5zdHJ1Y3Rpb25zIGluaXRpYWxseSBwb2ludGVkIHRvIGJ5IGFuIG9wZXJhdGlvbiByZXF1ZXN0IGJsb2NrIChPUkIpLAp3aGljaCBpcyBpbml0aWFsbHkgZ2l2ZW4gdG8gU3RhcnQgU3ViY2hhbm5lbCAoU1NDSCkgY29tbWFuZCBhbG9uZyB3aXRoIHRoZSBzdWJjaGFubmVsIG51bWJlcgpmb3IgdGhlIElPIHN1YnN5c3RlbSB0byBwcm9jZXNzIHdoaWxlIHRoZSBDUFUgY29udGludWVzIGV4ZWN1dGluZyBub3JtYWwgY29kZS4KVGhlc2UgY29tZSBpbiB0d28gZmxhdm91cnMsIEZvcm1hdCAwICggMjQgYml0IGZvciBiYWNrd2FyZCApCmNvbXBhdGliaWxpdHkgJiBGb3JtYXQgMSAoIDMxIGJpdCApLiBUaGVzZSBhcmUgdHlwaWNhbGx5IHVzZWQgdG8gaXNzdWUgcmVhZCAmIHdyaXRlIAooICYgbWFueSBvdGhlciBpbnN0cnVjdGlvbnMgKSB0aGV5IGNvbnNpc3Qgb2YgYSBsZW5ndGggZmllbGQgJiBhbiBhYnNvbHV0ZSBhZGRyZXNzIGZpZWxkLgpGb3IgZWFjaCBJTyB0eXBpY2FsbHkgZ2V0IDEgb3IgMiBpbnRlcnJ1cHRzIG9uZSBmb3IgY2hhbm5lbCBlbmQgKCBwcmltYXJ5IHN0YXR1cyApIHdoZW4gdGhlCmNoYW5uZWwgaXMgaWRsZSAmIHRoZSBzZWNvbmQgZm9yIGRldmljZSBlbmQgKCBzZWNvbmRhcnkgc3RhdHVzICkgc29tZXRpbWVzIHlvdSBnZXQgYm90aApjb25jdXJyZW50bHksIHlvdSBjaGVjayBob3cgdGhlIElPIHdlbnQgb24gYnkgaXNzdWluZyBhIFRFU1QgU1VCQ0hBTk5FTCBhdCBlYWNoIGludGVycnVwdCwKZnJvbSB3aGljaCB5b3UgcmVjZWl2ZSBhbiBJbnRlcnJ1cHRpb24gcmVzcG9uc2UgYmxvY2sgKElSQikuIElmIHlvdSBnZXQgY2hhbm5lbCAmIGRldmljZSBlbmQgCnN0YXR1cyBpbiB0aGUgSVJCIHdpdGhvdXQgY2hhbm5lbCBjaGVja3MgZXRjLiB5b3VyIElPIHByb2JhYmx5IHdlbnQgb2theS4gSWYgeW91IGRpZG4ndCB5b3UKcHJvYmFibHkgbmVlZCBhIGRvY3RvciB0byBleGFtaW5lIHRoZSBJUkIgJiBleHRlbmRlZCBzdGF0dXMgd29yZCBldGMuCklmIGFuIGVycm9yIG9jY3VycywgbW9yZSBzb3BoaXN0b2NhdGVkIGNvbnRyb2wgdW5pdHMgaGF2ZSBhIGZhY2l0aXR5IGtub3duIGFzCmNvbmN1cnJlbnQgc2Vuc2UgdGhpcyBtZWFucyB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyBFeHRlbmRlZCBzZW5zZSBpbmZvcm1hdGlvbiB3aWxsCmJlIHByZXNlbnRlZCBpbiB0aGUgRXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIElSQiBpZiBub3QgeW91IGhhdmUgdG8gaXNzdWUgYQpzdWJzZXF1ZW50IFNFTlNFIENDVyBjb21tYW5kIGFmdGVyIHRoZSB0ZXN0IHN1YmNoYW5uZWwuIAoKClRQSSggVGVzdCBwZW5kaW5nIGludGVycnVwdCkgY2FuIGFsc28gYmUgdXNlZCBmb3IgcG9sbGVkIElPIGJ1dCBpbiBtdWx0aXRhc2tpbmcgbXVsdGlwcm9jZXNzb3IKc3lzdGVtcyBpdCBpc24ndCByZWNvbW1lbmRlZCBleGNlcHQgZm9yIGNoZWNraW5nIHNwZWNpYWwgY2FzZXMgKCBpLmUuIG5vbiBsb29waW5nIGNoZWNrcyBmb3IKcGVuZGluZyBJTyBldGMuICkuCgpTdG9yZSBTdWJjaGFubmVsICYgTW9kaWZ5IFN1YmNoYW5uZWwgY2FuIGJlIHVzZWQgdG8gZXhhbWluZSAmIG1vZGlmeSBvcGVyYXRpbmcgY2hhcmFjdGVyaXN0aWNzCm9mIGEgc3ViY2hhbm5lbCAoIGUuZy4gY2hhbm5lbCBwYXRocyApLgoKT3RoZXIgSU8gcmVsYXRlZCBUZXJtczoKU3lzcGxleDogUzM5MCdzIENsdXN0ZXJpbmcgVGVjaG5vbG9neQpRRElPOiBTMzkwJ3MgbmV3IGhpZ2ggc3BlZWQgSU8gYXJjaGl0ZWN0dXJlIHRvIHN1cHBvcnQgZGV2aWNlcyBzdWNoIGFzIGdpZ2FiaXQgZXRoZXJuZXQsCnRoaXMgYXJjaGl0ZWN0dXJlIGlzIGFsc28gZGVzaWduZWQgdG8gYmUgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggdXAgJiBjb21pbmcgNjQgYml0IG1hY2hpbmVzLgoKCkdlbmVyYWwgQ29uY2VwdHMgCgpJbnB1dCBPdXRwdXQgUHJvY2Vzc29ycyAoSU9QJ3MpIGFyZSByZXNwb25zaWJsZSBmb3IgY29tbXVuaWNhdGluZyBiZXR3ZWVuCnRoZSBtYWluZnJhbWUgQ1BVJ3MgJiB0aGUgY2hhbm5lbCAmIHJlbGlldmUgdGhlIG1haW5mcmFtZSBDUFUncyBmcm9tIHRoZQpidXJkZW4gb2YgY29tbXVuaWNhdGluZyB3aXRoIElPIGRldmljZXMgZGlyZWN0bHksIHRoaXMgYWxsb3dzIHRoZSBDUFUncyB0byAKY29uY2VudHJhdGUgb24gZGF0YSBwcm9jZXNzaW5nLiAKCklPUCdzIGNhbiB1c2Ugb25lIG9yIG1vcmUgbGlua3MgKCBrbm93biBhcyBjaGFubmVsIHBhdGhzICkgdG8gdGFsayB0byBlYWNoIApJTyBkZXZpY2UuIEl0IGZpcnN0IGNoZWNrcyBmb3IgcGF0aCBhdmFpbGFiaWxpdHkgJiBjaG9vc2VzIGFuIGF2YWlsYWJsZSBvbmUsCnRoZW4gc3RhcnRzICggJiBzb21ldGltZXMgdGVybWluYXRlcyBJTyApLgpUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGNoYW5uZWwgcGF0aDogRVNDT04gJiB0aGUgUGFyYWxsZWwgSU8gaW50ZXJmYWNlLgoKSU8gZGV2aWNlcyBhcmUgYXR0YWNoZWQgdG8gY29udHJvbCB1bml0cywgY29udHJvbCB1bml0cyBwcm92aWRlIHRoZQpsb2dpYyB0byBpbnRlcmZhY2UgdGhlIGNoYW5uZWwgcGF0aHMgJiBjaGFubmVsIHBhdGggSU8gcHJvdG9jb2xzIHRvIAp0aGUgSU8gZGV2aWNlcywgdGhleSBjYW4gYmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBkZXZpY2VzIG9yIGhvdXNlZCBzZXBhcmF0ZWx5CiYgb2Z0ZW4gdGFsayB0byBzZXZlcmFsIHNpbWlsYXIgZGV2aWNlcyAoIHR5cGljYWwgZXhhbXBsZXMgd291bGQgYmUgcmFpZCAKY29udHJvbGxlcnMgb3IgYSBjb250cm9sIHVuaXQgd2hpY2ggY29ubmVjdHMgdG8gMTAwMCAzMjcwIHRlcm1pbmFscyApLgoKCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwKICAgIHwgfCBDUFUgfCB8IENQVSB8IHwgQ1BVIHwgfCBDUFUgfCAgfCAgTWFpbiAgICB8ICB8IEV4cGFuZGVkIHwgICB8CiAgICB8IHwgICAgIHwgfCAgICAgfCB8ICAgICB8IHwgICAgIHwgIHwgIE1lbW9yeSAgfCAgfCAgU3RvcmFnZSB8ICAgfAogICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwgCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCAgIElPUCAgICAgICAgfCAgICAgIElPUCAgICAgIHwgICAgICAgSU9QICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICB8fCAgQnVzICYgVGFnIENoYW5uZWwgUGF0aCAgICAgICAgICAgICAgICAgICAgICB8fCBFU0NPTgogICAgICAgICB8fCAgPT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICB8fCBDaGFubmVsCiAgICAgICAgIHx8ICB8fCAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgIHx8IFBhdGgKICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tKwogICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8CiAgICB8ICAgIENVICAgIHwgICAgICAgICAgICAgICB8ICAgIENVICAgIHwgICAgICAgICB8ICAgIENVICAgIHwKICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0rCiAgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICB8CistLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCnxJL08gRGV2aWNlfCB8SS9PIERldmljZXwgICAgICB8SS9PIERldmljZXwgICB8SS9PIERldmljZXwgfEkvTyBEZXZpY2V8CistLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCiAgQ1BVID0gQ2VudHJhbCBQcm9jZXNzaW5nIFVuaXQgICAgCiAgQyA9IENoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgCiAgSU9QID0gSVAgUHJvY2Vzc29yICAgICAgICAgICAgICAgCiAgQ1UgPSBDb250cm9sIFVuaXQKClRoZSAzOTAgSU8gc3lzdGVtcyBjb21lIGluIDIgZmxhdm91cnMgdGhlIGN1cnJlbnQgMzkwIG1hY2hpbmVzIHN1cHBvcnQgYm90aAoKVGhlIE9sZGVyIDM2MCAmIDM3MCBJbnRlcmZhY2Usc29tZXRpbWVzIGNhbGxlZCB0aGUgUGFyYWxsZWwgSS9PIGludGVyZmFjZSwKc29tZXRpbWVzIGNhbGxlZCBCdXMtYW5kIFRhZyAmIHNvbWV0aW1lcyBPcmlnaW5hbCBFcXVpcG1lbnQgTWFudWZhY3R1cmVycwpJbnRlcmZhY2UgKE9FTUkpLgoKVGhpcyBieXRlIHdpZGUgUGFyYWxsZWwgY2hhbm5lbCBwYXRoL2J1cyBoYXMgcGFyaXR5ICYgZGF0YSBvbiB0aGUgIkJ1cyIgY2FibGUgCiYgY29udHJvbCBsaW5lcyBvbiB0aGUgIlRhZyIgY2FibGUuIFRoZXNlIGNhbiBvcGVyYXRlIGluIGJ5dGUgbXVsdGlwbGV4IG1vZGUgZm9yCnNoYXJpbmcgYmV0d2VlbiBzZXZlcmFsIHNsb3cgZGV2aWNlcyBvciBidXJzdCBtb2RlICYgbW9ub3BvbGl6ZSB0aGUgY2hhbm5lbCBmb3IgdGhlCndob2xlIGJ1cnN0LiBVcHRvIDI1NiBkZXZpY2VzIGNhbiBiZSBhZGRyZXNzZWQgIG9uIG9uZSBvZiB0aGVzZSBjYWJsZXMuIFRoZXNlIGNhYmxlcyBhcmUKYWJvdXQgb25lIGluY2ggaW4gZGlhbWV0ZXIuIFRoZSBtYXhpbXVtIHVuZXh0ZW5kZWQgbGVuZ3RoIHN1cHBvcnRlZCBieSB0aGVzZSBjYWJsZXMgaXMKMTI1IE1ldGVycyBidXQgdGhpcyBjYW4gYmUgZXh0ZW5kZWQgdXAgdG8gMmttIHdpdGggYSBmaWJyZSBvcHRpYyBjaGFubmVsIGV4dGVuZGVkIApzdWNoIGFzIGEgMzA0NC4gVGhlIG1heGltdW0gYnVyc3Qgc3BlZWQgc3VwcG9ydGVkIGlzIDQuNSBtZWdhYnl0ZXMgcGVyIHNlY29uZCBob3dldmVyCnNvbWUgcmVhbGx5IG9sZCBwcm9jZXNzb3JzIHN1cHBvcnQgb25seSB0cmFuc2ZlciByYXRlcyBvZiAzLjAsIDIuMCAmIDEuMCBNQi9zZWMuCk9uZSBvZiB0aGVzZSBwYXRocyBjYW4gYmUgZGFpc3kgY2hhaW5lZCB0byB1cCB0byA4IGNvbnRyb2wgdW5pdHMuCgoKRVNDT04gaWYgZmlicmUgb3B0aWMgaXQgaXMgYWxzbyBjYWxsZWQgRklDT04gCldhcyBpbnRyb2R1Y2VkIGJ5IElCTSBpbiAxOTkwLiBIYXMgMiBmaWJyZSBvcHRpYyBjYWJsZXMgJiB1c2VzIGVpdGhlciBsZWRzIG9yIGxhc2Vycwpmb3IgY29tbXVuaWNhdGlvbiBhdCBhIHNpZ25hbGluZyByYXRlIG9mIHVwdG8gMjAwIG1lZ2FiaXRzL3NlYy4gQXMgMTBiaXRzIGFyZSB0cmFuc2ZlcnJlZApmb3IgZXZlcnkgOCBiaXRzIGluZm8gdGhpcyBkcm9wcyB0byAxNjAgbWVnYWJpdHMvc2VjICYgdG8gMTguNiBNZWdhYnl0ZXMvc2VjIG9uY2UKY29udHJvbCBpbmZvICYgQ1JDIGFyZSBhZGRlZC4gRVNDT04gb25seSBvcGVyYXRlcyBpbiBidXJzdCBtb2RlLgogCkVTQ09OcyB0eXBpY2FsIG1heCBjYWJsZSBsZW5ndGggaXMgM2ttIGZvciB0aGUgbGVkIHZlcnNpb24gJiAyMGttIGZvciB0aGUgbGFzZXIgdmVyc2lvbgprbm93biBhcyBYREYgKCBleHRlbmRlZCBkaXN0YW5jZSBmYWNpbGl0eSApLiBUaGlzIGNhbiBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IHVzaW5nIGFuCkVTQ09OIGRpcmVjdG9yIHdoaWNoIHRyaXBsZXMgdGhlIGFib3ZlIG1lbnRpb25lZCByYW5nZXMuIFVubGlrZSBCdXMgJiBUYWcgYXMgRVNDT04gaXMKc2VyaWFsIGl0IHVzZXMgYSBwYWNrZXQgc3dpdGNoaW5nIGFyY2hpdGVjdHVyZSB0aGUgc3RhbmRhcmQgQnVzICYgVGFnIGNvbnRyb2wgcHJvdG9jb2wKaXMgaG93ZXZlciBwcmVzZW50IHdpdGhpbiB0aGUgcGFja2V0cy4gVXB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gZWFjaCBjb250cm9sIAp1bml0IHRoYXQgdXNlcyBvbmUgb2YgdGhlc2UgaW50ZXJmYWNlcy4KCkNvbW1vbiAzOTAgRGV2aWNlcyBpbmNsdWRlOgpOZXR3b3JrIGFkYXB0ZXJzIHR5cGljYWxseSBPU0EyLDMxNzIncywyMTE2J3MgJiBPU0EtRSBnaWdhYml0IGV0aGVybmV0IGFkYXB0ZXJzLApDb25zb2xlcyAzMjcwICYgMzIxNSAoIGEgdGVsZXR5cGUgZW11bGF0ZWQgdW5kZXIgbGludXggZm9yIGEgbGluZSBtb2RlIGNvbnNvbGUgKS4KREFTRCdzIGRpcmVjdCBhY2Nlc3Mgc3RvcmFnZSBkZXZpY2VzICggb3RoZXJ3aXNlIGtub3duIGFzIGhhcmQgZGlza3MgKS4KVGFwZSBEcml2ZXMuCkNUQyAoIENoYW5uZWwgdG8gQ2hhbm5lbCBBZGFwdGVycyApLApFU0NPTiBvciBQYXJhbGxlbCBDYWJsZXMgdXNlZCBhcyBhIHZlcnkgaGlnaCBzcGVlZCBzZXJpYWwgbGluawpiZXR3ZWVuIDIgbWFjaGluZXMuIFdlIHVzZSAyIGNhYmxlcyB1bmRlciBsaW51eCB0byBkbyBhIGJpLWRpcmVjdGlvbmFsIHNlcmlhbCBsaW5rLgoKCkRlYnVnZ2luZyBJTyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHVuZGVyIFZNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOb3cgd2UgYXJlIHJlYWR5IHRvIGdvIG9uIHdpdGggSU8gdHJhY2luZyBjb21tYW5kcyB1bmRlciBWTQoKQSBmZXcgc2VsZiBleHBsYW5hdG9yeSBxdWVyaWVzOgpRIE9TQQpRIENUQwpRIERJU0sgKCBUaGlzIGNvbW1hbmQgaXMgQ01TIHNwZWNpZmljICkKUSBEQVNECgoKCgoKClEgT1NBIG9uIG15IG1hY2hpbmUgcmV0dXJucwpPU0EgIDdDMDggT04gT1NBICAgN0MwOCBTVUJDSEFOTkVMID0gMDAwMApPU0EgIDdDMDkgT04gT1NBICAgN0MwOSBTVUJDSEFOTkVMID0gMDAwMQpPU0EgIDdDMTQgT04gT1NBICAgN0MxNCBTVUJDSEFOTkVMID0gMDAwMgpPU0EgIDdDMTUgT04gT1NBICAgN0MxNSBTVUJDSEFOTkVMID0gMDAwMwoKSWYgeW91IGhhdmUgYSBndWVzdCB3aXRoIGNlcnRhaW4gcHJpdmlsZWdlcyB5b3UgbWF5IGJlIGFibGUgdG8gc2VlIGRldmljZXMKd2hpY2ggZG9uJ3QgYmVsb25nIHRvIHlvdS4gVG8gYXZvaWQgdGhpcywgYWRkIHRoZSBvcHRpb24gVi4KZS5nLgpRIFYgT1NBCgpOb3cgdXNpbmcgdGhlIGRldmljZSBudW1iZXJzIHJldHVybmVkIGJ5IHRoaXMgY29tbWFuZCB3ZSB3aWxsClRyYWNlIHRoZSBpbyBzdGFydGluZyB1cCBvbiB0aGUgZmlyc3QgZGV2aWNlIDdjMDggJiA3YzA5CkluIG91ciBzaW1wbGVzdCBjYXNlIHdlIGNhbiB0cmFjZSB0aGUgCnN0YXJ0IHN1YmNoYW5uZWxzCmxpa2UgVFIgU1NDSCA3QzA4LTdDMDkKb3IgdGhlIGhhbHQgc3ViY2hhbm5lbHMKb3IgVFIgSFNDSCA3QzA4LTdDMDkKTVNDSCdzICxTVFNDSCdzIEkgdGhpbmsgeW91IGNhbiBndWVzcyB0aGUgcmVzdAoKSW5nbydzIGZhdm91cml0ZSB0cmljayBpcyB0cmFjaW5nIGFsbCB0aGUgSU8ncyAmIENDV1MgJiBzcG9vbGluZyB0aGVtIGludG8gdGhlIHJlYWRlciBvZiBhbm90aGVyClZNIGd1ZXN0IHNvIGhlIGNhbiBmdHAgdGhlIGxvZ2ZpbGUgYmFjayB0byBoaXMgb3duIG1hY2hpbmUuSSdsbCBkbyBhIHNtYWxsIGJpdCBvZiB0aGlzICYgZ2l2ZSB5b3UKIGEgbG9vayBhdCB0aGUgb3V0cHV0LgoKMSkgU3Bvb2wgc3Rkb3V0IHRvIFZNIHJlYWRlcgpTUCBQUlQgVE8gKGFub3RoZXIgdm0gZ3Vlc3QgKSBvciAqIGZvciB0aGUgbG9jYWwgdm0gZ3Vlc3QKMikgRmlsbCB0aGUgcmVhZGVyIHdpdGggdGhlIHRyYWNlClRSIElPIDdjMDgtN2MwOSBJTlNUIElOVCBDQ1cgUFJUIFJVTgozKSBTdGFydCB1cCBsaW51eCAKaSAwMGMgIAo0KSBGaW5pc2ggdGhlIHRyYWNlClRSIEVORAo1KSBjbG9zZSB0aGUgcmVhZGVyCkMgUFJUCjYpIGxpc3QgcmVhZGVyIGNvbnRlbnRzClJEUkxJU1QKNykgY29weSBpdCB0byBsaW51eDQncyBtaW5pZGlzayAKUkVDRUlWRSAvIExPRyBUWFQgQTEgKCByZXBsYWNlCjgpCmZpbGVsICYgcHJlc3MgRjExIHRvIGxvb2sgYXQgaXQKWW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2U6CgowMDAyMDk0MicgU1NDSCAgQjIzMzQwMDAgICAgMDA0ODgxM0MgICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAogICAgICAgICAgQ1BBIDAwMEZGREYwICAgUEFSTSAwMEUyQzlDNCAgICBLRVkgMCAgRlBJIEMwICBMUE0gODAKICAgICAgICAgIENDVyAgICAwMDBGRkRGMCAgRTQyMDAxMDAgMDA0ODdGRTggICAwMDAwICBFNDI0MDEwMCAuLi4uLi4uLgogICAgICAgICAgSURBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDNEOEFGRTgKICAgICAgICAgIElEQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBGQjc2MDAwCjAwMDIwQjBBJyAgIEkvTyBERVYgN0MwOCAtPiAwMDAxOTdCQycgICBTQ0ggMDAwMCAgIFBBUk0gMDBFMkM5QzQKMDAwMjE2MjgnIFRTQ0ggIEIyMzU0MDAwID4+IDAwNDg4MTY0ICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKICAgICAgICAgIENDV0EgMDAwRkZERjggICBERVYgU1RTIDBDICBTQ0ggU1RTIDAwICBDTlQgMDBFQwogICAgICAgICAgIEtFWSAwICAgRlBJIEMwICBDQyAwICAgQ1RMUyA0MDA3CjAwMDIyMjM4JyBTVFNDSCBCMjM0NDAwMCA+PiAwMDQ4ODEwOCAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CgpJZiB5b3UgZG9uJ3QgbGlrZSBtZXNzaW5nIHVwIHlvdXIgcmVhZGVkICggYmVjYXVzZSB5b3UgcG9zc2libHkgYm9vdGVkIGZyb20gaXQgKQp5b3UgY2FuIGFsdGVybmF0aXZlbHkgc3Bvb2wgaXQgdG8gYW5vdGhlciByZWFkZXJzIGd1ZXN0LgoKCk90aGVyIGNvbW1vbiBWTSBkZXZpY2UgcmVsYXRlZCBjb21tYW5kcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhlc2UgY29tbWFuZHMgYXJlIGxpc3RlZCBvbmx5IGJlY2F1c2UgdGhleSBoYXZlCmJlZW4gb2YgdXNlIHRvIG1lIGluIHRoZSBwYXN0ICYgbWF5IGJlIG9mIHVzZSB0bwp5b3UgdG9vLiBGb3IgbW9yZSBjb21wbGV0ZSBpbmZvIG9uIGVhY2ggb2YgdGhlIGNvbW1hbmRzCnVzZSB0eXBlIEhFTFAgPGNvbW1hbmQ+IGZyb20gQ01TLgpkZXRhY2hpbmcgZGV2aWNlcwpERVQgPGRldm5vIHJhbmdlPgpBVFQgPGRldm5vIHJhbmdlPiA8Z3Vlc3Q+IAphdHRhY2ggYSBkZXZpY2UgdG8gZ3Vlc3QgKiBmb3IgeW91ciBvd24gZ3Vlc3QKUkVBRFkgPGRldm5vPiBjYXVzZSBWTSB0byBpc3N1ZSBhIGZha2UgaW50ZXJydXB0LgoKVGhlIFZBUlkgY29tbWFuZCBpcyBub3JtYWxseSBvbmx5IGF2YWlsYWJsZSB0byBWTSBhZG1pbmlzdHJhdG9ycy4KVkFSWSBPTiBQQVRIIDxwYXRoPiBUTyA8ZGV2bm8gcmFuZ2U+ClZBUlkgT0ZGIFBBVEggPFBBVEg+IEZST00gPGRldm5vIHJhbmdlPgpUaGlzIGlzIHVzZWQgdG8gc3dpdGNoIG9uIG9yIG9mZiBjaGFubmVsIHBhdGhzIHRvIGRldmljZXMuCgpRIENIUElEIDxjaGFubmVsIHBhdGggSUQ+ClRoaXMgZGlzcGxheXMgc3RhdGUgb2YgZGV2aWNlcyB1c2luZyB0aGlzIGNoYW5uZWwgcGF0aApEIFNDSElCIDxzdWJjaGFubmVsPgpUaGlzIGRpc3BsYXlzIHRoZSBzdWJjaGFubmVsIGluZm9ybWF0aW9uIFNDSElCIGJsb2NrIGZvciB0aGUgZGV2aWNlLgp0aGlzIEkgYmVsaWV2ZSBpcyBhbHNvIG9ubHkgYXZhaWxhYmxlIHRvIGFkbWluaXN0cmF0b3JzLgpERUZJTkUgQ1RDIDxkZXZubz4KZGVmaW5lcyBhIHZpcnR1YWwgQ1RDIGNoYW5uZWwgdG8gY2hhbm5lbCBjb25uZWN0aW9uCjIgbmVlZCB0byBiZSBkZWZpbmVkIG9uIGVhY2ggZ3Vlc3QgZm9yIHRoZSBDVEMgZHJpdmVyIHRvIHVzZS4KQ09VUExFICBkZXZubyB1c2VyaWQgcmVtb3RlIGRldm5vCkpvaW5zIGEgbG9jYWwgdmlydHVhbCBkZXZpY2UgdG8gYSByZW1vdGUgdmlydHVhbCBkZXZpY2UKKCBjb21tb25seSB1c2VkIGZvciB0aGUgQ1RDIGRyaXZlciApLgoKQnVpbGRpbmcgYSBWTSByYW1kaXNrIHVuZGVyIENNUyB3aGljaCBsaW51eCBjYW4gdXNlCmRlZiB2ZmItPGJsb2Nrc2l6ZT4gPHN1YmNoYW5uZWw+IDxudW1iZXIgYmxvY2tzPgpibG9ja3NpemUgaXMgY29tbW9ubHkgNDA5NiBmb3IgbGludXguCkZvcm1hdHRpbmcgaXQKZm9ybWF0IDxzdWJjaGFubmVsPiA8ZHJpdmVyIGxldHRlciBlLmcuIHg+IChibGtzaXplIDxibG9ja3NpemU+CgpTaGFyaW5nIGEgZGlzayBiZXR3ZWVuIG11bHRpcGxlIGd1ZXN0cwpMSU5LIHVzZXJpZCBkZXZubzEgZGV2bm8yIG1vZGUgcGFzc3dvcmQKCgoKR0RCIG9uIFMzOTAKPT09PT09PT09PT0KTi5CLiBpZiBjb21waWxpbmcgZm9yIGRlYnVnZ2luZyBnZGIgd29ya3MgYmV0dGVyIHdpdGhvdXQgb3B0aW1pc2F0aW9uIAooIHNlZSBDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyApCgppbnZvY2F0aW9uCi0tLS0tLS0tLS0KZ2RiIDx2aWN0aW0gcHJvZ3JhbT4gPG9wdGlvbmFsIGNvcmVmaWxlPgoKT25saW5lIGhlbHAKLS0tLS0tLS0tLS0KaGVscDogZ2l2ZXMgaGVscCBvbiBjb21tYW5kcwplLmcuCmhlbHAKaGVscCBkaXNwbGF5Ck5vdGUgZ2RiJ3Mgb25saW5lIGhlbHAgaXMgdmVyeSBnb29kIHVzZSBpdC4KCgpBc3NlbWJseQotLS0tLS0tLQppbmZvIHJlZ2lzdGVyczogZGlzcGxheXMgcmVnaXN0ZXJzIG90aGVyIHRoYW4gZmxvYXRpbmcgcG9pbnQuCmluZm8gYWxsLXJlZ2lzdGVyczogZGlzcGxheXMgZmxvYXRpbmcgcG9pbnRzIGFzIHdlbGwuCmRpc2Fzc2VtYmxlOiBkaXNhc3NlbWJsZXMKZS5nLgpkaXNhc3NlbWJsZSB3aXRob3V0IHBhcmFtZXRlcnMgd2lsbCBkaXNhc3NlbWJsZSB0aGUgY3VycmVudCBmdW5jdGlvbgpkaXNhc3NlbWJsZSAkcGMgJHBjKzEwIAoKVmlld2luZyAmIG1vZGlmeWluZyB2YXJpYWJsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcHJpbnQgb3IgcDogZGlzcGxheXMgdmFyaWFibGUgb3IgcmVnaXN0ZXIKZS5nLiBwL3ggJHNwIHdpbGwgZGlzcGxheSB0aGUgc3RhY2sgcG9pbnRlcgoKZGlzcGxheTogcHJpbnRzIHZhcmlhYmxlIG9yIHJlZ2lzdGVyIGVhY2ggdGltZSBwcm9ncmFtIHN0b3BzCmUuZy4KZGlzcGxheS94ICRwYyB3aWxsIGRpc3BsYXkgdGhlIHByb2dyYW0gY291bnRlcgpkaXNwbGF5IGFyZ2MKCnVuZGlzcGxheSA6IHVuZG8ncyBkaXNwbGF5J3MKCmluZm8gYnJlYWtwb2ludHM6IHNob3dzIGFsbCBjdXJyZW50IGJyZWFrcG9pbnRzCgppbmZvIHN0YWNrOiBzaG93cyBzdGFjayBiYWNrIHRyYWNlICggaWYgdGhpcyBkb2Vzbid0IHdvcmsgdG9vIHdlbGwsIEknbGwgc2hvdyB5b3UgdGhlCnN0YWNrdHJhY2UgYnkgaGFuZCBiZWxvdyApLgoKaW5mbyBsb2NhbHM6IGRpc3BsYXlzIGxvY2FsIHZhcmlhYmxlcy4KCmluZm8gYXJnczogZGlzcGxheSBjdXJyZW50IHByb2NlZHVyZSBhcmd1bWVudHMuCgpzZXQgYXJnczogd2lsbCBzZXQgYXJnYyAmIGFyZ3YgZWFjaCB0aW1lIHRoZSB2aWN0aW0gcHJvZ3JhbSBpcyBpbnZva2VkLgoKc2V0IDx2YXJpYWJsZT49dmFsdWUKc2V0IGFyZ2M9MTAwCnNldCAkcGM9MAoKCgpNb2RpZnlpbmcgZXhlY3V0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0Kc3RlcDogc3RlcHMgbiBsaW5lcyBvZiBzb3VyY2Vjb2RlCnN0ZXAgc3RlcHMgMSBsaW5lLgpzdGVwIDEwMCBzdGVwcyAxMDAgbGluZXMgb2YgY29kZS4KCm5leHQ6IGxpa2Ugc3RlcCBleGNlcHQgdGhpcyB3aWxsIG5vdCBzdGVwIGludG8gc3Vicm91dGluZXMKCnN0ZXBpOiBzdGVwcyBhIHNpbmdsZSBtYWNoaW5lIGNvZGUgaW5zdHJ1Y3Rpb24uCmUuZy4gc3RlcGkgMTAwCgpuZXh0aTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uIGJ1dCB3aWxsIG5vdCBzdGVwIGludG8gc3Vicm91dGluZXMuCgpmaW5pc2g6IHdpbGwgcnVuIHVudGlsIGV4aXQgb2YgdGhlIGN1cnJlbnQgcm91dGluZQoKcnVuOiAocmUpc3RhcnRzIGEgcHJvZ3JhbQoKY29udDogY29udGludWVzIGEgcHJvZ3JhbQoKcXVpdDogZXhpdHMgZ2RiLgoKCmJyZWFrcG9pbnRzCi0tLS0tLS0tLS0tLQoKYnJlYWsKc2V0cyBhIGJyZWFrcG9pbnQKZS5nLgoKYnJlYWsgbWFpbgoKYnJlYWsgKiRwYwoKYnJlYWsgKjB4NDAwNjE4CgpoZXJlcyBhIHJlYWxseSB1c2VmdWwgb25lIGZvciBsYXJnZSBwcm9ncmFtcwpyYnIKU2V0IGEgYnJlYWtwb2ludCBmb3IgYWxsIGZ1bmN0aW9ucyBtYXRjaGluZyBSRUdFWFAKZS5nLgpyYnIgMzkwCndpbGwgc2V0IGEgYnJlYWtwb2ludCB3aXRoIGFsbCBmdW5jdGlvbnMgd2l0aCAzOTAgaW4gdGhlaXIgbmFtZS4KCmluZm8gYnJlYWtwb2ludHMKbGlzdHMgYWxsIGJyZWFrcG9pbnRzCgpkZWxldGU6IGRlbGV0ZSBicmVha3BvaW50IGJ5IG51bWJlciBvciBkZWxldGUgdGhlbSBhbGwKZS5nLgpkZWxldGUgMSB3aWxsIGRlbGV0ZSB0aGUgZmlyc3QgYnJlYWtwb2ludApkZWxldGUgd2lsbCBkZWxldGUgdGhlbSBhbGwKCndhdGNoOiBUaGlzIHdpbGwgc2V0IGEgd2F0Y2hwb2ludCAoIHVzdWFsbHkgaGFyZHdhcmUgYXNzaXN0ZWQgKSwKVGhpcyB3aWxsIHdhdGNoIGEgdmFyaWFibGUgdGlsbCBpdCBjaGFuZ2VzCmUuZy4Kd2F0Y2ggY250LCB3aWxsIHdhdGNoIHRoZSB2YXJpYWJsZSBjbnQgdGlsbCBpdCBjaGFuZ2VzLgpBcyBhbiBhc2lkZSB1bmZvcnR1bmF0ZWx5IGdkYidzLCBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgd2F0Y2hwb2ludCBjb2RlCmlzIGluY29uc2lzdGVudCAmIG5vdCB2ZXJ5IGdvb2QsIHdhdGNocG9pbnRzIHVzdWFsbHkgd29yayBidXQgbm90IGFsd2F5cy4KCmluZm8gd2F0Y2hwb2ludHM6IERpc3BsYXkgY3VycmVudGx5IGFjdGl2ZSB3YXRjaHBvaW50cwoKY29uZGl0aW9uOiAoIGFub3RoZXIgdXNlZnVsIG9uZSApClNwZWNpZnkgYnJlYWtwb2ludCBudW1iZXIgTiB0byBicmVhayBvbmx5IGlmIENPTkQgaXMgdHJ1ZS4KVXNhZ2UgaXMgYGNvbmRpdGlvbiBOIENPTkQnLCB3aGVyZSBOIGlzIGFuIGludGVnZXIgYW5kIENPTkQgaXMgYW4KZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgd2hlbmV2ZXIgYnJlYWtwb2ludCBOIGlzIHJlYWNoZWQuCgoKClVzZXIgZGVmaW5lZCBmdW5jdGlvbnMvbWFjcm9zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZmluZTogKCBOb3RlIHRoaXMgaXMgdmVyeSB2ZXJ5IHVzZWZ1bCxzaW1wbGUgJiBwb3dlcmZ1bCApCnVzYWdlIGRlZmluZSA8bmFtZT4gPGxpc3Qgb2YgY29tbWFuZHM+IGVuZAoKZXhhbXBsZXMgd2hpY2ggeW91IHNob3VsZCBjb25zaWRlciBwdXR0aW5nIGludG8gLmdkYmluaXQgaW4geW91ciBob21lIGRpcmVjdG9yeQpkZWZpbmUgZApzdGVwaQpkaXNhc3NlbWJsZSAkcGMgJHBjKzEwCmVuZAoKZGVmaW5lIGUKbmV4dGkKZGlzYXNzZW1ibGUgJHBjICRwYysxMAplbmQKCgpPdGhlciBoYXJkIHRvIGNsYXNzaWZ5IHN0dWZmCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc2lnbmFsIG46CnNlbmRzIHRoZSB2aWN0aW0gcHJvZ3JhbSBhIHNpZ25hbC4KZS5nLiBzaWduYWwgMyB3aWxsIHNlbmQgYSBTSUdRVUlULgoKaW5mbyBzaWduYWxzOgp3aGF0IGdkYiBkb2VzIHdoZW4gdGhlIHZpY3RpbSByZWNlaXZlcyBjZXJ0YWluIHNpZ25hbHMuCgpsaXN0OgplLmcuCmxpc3QgbGlzdHMgY3VycmVudCBmdW5jdGlvbiBzb3VyY2UKbGlzdCAxLDEwIGxpc3QgZmlyc3QgMTAgbGluZXMgb2YgY3VycmVudCBmaWxlLgpsaXN0IHRlc3QuYzoxLDEwCgoKZGlyZWN0b3J5OgpBZGRzIGRpcmVjdG9yaWVzIHRvIGJlIHNlYXJjaGVkIGZvciBzb3VyY2UgaWYgZ2RiIGNhbm5vdCBmaW5kIHRoZSBzb3VyY2UuCihub3RlIGl0IGlzIGEgYml0IHNlbnNpdGl0aXZlIGFib3V0IHNsYXNoZXMpIAplLmcuIFRvIGFkZCB0aGUgcm9vdCBvZiB0aGUgZmlsZXN5c3RlbSB0byB0aGUgc2VhcmNocGF0aCBkbwpkaXJlY3RvcnkgLy8KCgpjYWxsIDxmdW5jdGlvbj4KVGhpcyBjYWxscyBhIGZ1bmN0aW9uIGluIHRoZSB2aWN0aW0gcHJvZ3JhbSwgdGhpcyBpcyBwcmV0dHkgcG93ZXJmdWwKZS5nLgooZ2RiKSBjYWxsIHByaW50ZigiaGVsbG8gd29ybGQiKQpvdXRwdXRzOgokMSA9IDExIAoKWW91IG1pZ2h0IG5vdyBiZSB0aGlua2luZyB0aGF0IHRoZSBsaW5lIGFib3ZlIGRpZG4ndCB3b3JrLCBzb21ldGhpbmcgZXh0cmEgaGFkIHRvIGJlIGRvbmUuCihnZGIpIGNhbGwgZmZsdXNoKHN0ZG91dCkKaGVsbG8gd29ybGQkMiA9IDAKQXMgYW4gYXNpZGUgdGhlIGRlYnVnZ2VyIGFsc28gY2FsbHMgbWFsbG9jICYgZnJlZSB1bmRlciB0aGUgaG9vZCAKdG8gbWFrZSBzcGFjZSBmb3IgdGhlICJoZWxsbyB3b3JsZCIgc3RyaW5nLgoKCgpoaW50cwotLS0tLQoxKSBjb21tYW5kIGNvbXBsZXRpb24gd29ya3MganVzdCBsaWtlIGJhc2ggCiggaWYgeW91IGFyZSBhIGJhZCB0eXBpc3QgbGlrZSBtZSB0aGlzIHJlYWxseSBoZWxwcyApCmUuZy4gaGl0IGJyIDxUQUI+ICYgY3Vyc29yIHVwICYgZG93biA6LSkuCgoyKSBpZiB5b3UgaGF2ZSBhIGRlYnVnZ2luZyBwcm9ibGVtIHRoYXQgdGFrZXMgYSBmZXcgc3RlcHMgdG8gcmVjcmVhdGUKcHV0IHRoZSBzdGVwcyBpbnRvIGEgZmlsZSBjYWxsZWQgLmdkYmluaXQgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CmlmIHlvdSBoYXZlIGRlZmluZWQgYSBmZXcgZXh0cmEgdXNlZnVsIHVzZXIgZGVmaW5lZCBjb21tYW5kcyBwdXQgdGhlc2UgaW4gCnlvdXIgaG9tZSBkaXJlY3RvcnkgJiB0aGV5IHdpbGwgYmUgcmVhZCBlYWNoIHRpbWUgZ2RiIGlzIGxhdW5jaGVkLgoKQSB0eXBpY2FsIC5nZGJpbml0IGZpbGUgbWlnaHQgYmUuCmJyZWFrIG1haW4KcnVuCmJyZWFrIHJ1bnRpbWVfZXhjZXB0aW9uCmNvbnQgCgoKc3RhY2sgY2hhaW5pbmcgaW4gZ2RiIGJ5IGhhbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGhpcyBpcyBkb25lIHVzaW5nIGEgdGhlIHNhbWUgdHJpY2sgZGVzY3JpYmVkIGZvciBWTSAKcC94ICgqKCRzcCs1NikpJjB4N2ZmZmZmZmYgZ2V0IHRoZSBmaXJzdCBiYWNrY2hhaW4uCgpGb3Igei9BcmNoaXRlY3R1cmUKUmVwbGFjZSA1NiB3aXRoIDExMiAmIGlnbm9yZSB0aGUgJjB4N2ZmZmZmZmYKaW4gdGhlIG1hY3JvcyBiZWxvdyAmIGRvIG5hc3R5IGNhc3RzIHRvIGxvbmdzIGxpa2UgdGhlIGZvbGxvd2luZwphcyBnZGIgdW5mb3J0dW5hdGVseSBkZWFscyB3aXRoIHByaW50ZWQgYXJndW1lbnRzIGFzIGludHMgd2hpY2gKbWVzc2VzIHVwIGV2ZXJ5dGhpbmcuCmkuZS4gaGVyZSBpcyBhIDNyZCBiYWNrY2hhaW4gZGVyZWZlcmVuY2UKcC94ICoobG9uZyAqKSgqKioobG9uZyAqKiopJHNwKzExMikKCgp0aGlzIG91dHB1dHMgCiQ1ID0gMHg1MjhmMTggCm9uIG15IG1hY2hpbmUuCk5vdyB5b3UgY2FuIHVzZSAKaW5mbyBzeW1ib2wgKCooJHNwKzU2KSkmMHg3ZmZmZmZmZiAKeW91IG1pZ2h0IHNlZSBzb21ldGhpbmcgbGlrZS4KcmxfZ2V0YyArIDM2IGluIHNlY3Rpb24gLnRleHQgIHRlbGxpbmcgeW91IHdoYXQgaXMgbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTI4ZjE4Ck5vdyBkby4KcC94ICgqKCokc3ArNTYpKSYweDdmZmZmZmZmIApUaGlzIG91dHB1dHMKJDYgPSAweDUyOGVkMApOb3cgZG8uCmluZm8gc3ltYm9sICgqKCokc3ArNTYpKSYweDdmZmZmZmZmCnJsX3JlYWRfa2V5ICsgMTgwIGluIHNlY3Rpb24gLnRleHQKbm93IGRvCnAveCAoKigqKiRzcCs1NikpJjB4N2ZmZmZmZmYKJiBzbyBvbi4KCkRpc2Fzc2VtYmxpbmcgaW5zdHJ1Y3Rpb25zIHdpdGhvdXQgZGVidWcgaW5mbwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZ2RiIHR5cGljYWxseSBjb21wbGFpbnMgaWYgdGhlcmUgaXMgYSBsYWNrIG9mIGRlYnVnZ2luZwpzeW1ib2xzIGluIHRoZSBkaXNhc3NlbWJsZSBjb21tYW5kIHdpdGggCiJObyBmdW5jdGlvbiBjb250YWlucyBzcGVjaWZpZWQgYWRkcmVzcy4iIFRvIGdldCBhcm91bmQKdGhpcyBkbyAKeC88bnVtYmVyIGxpbmVzIHRvIGRpc2Fzc2VtYmxlPnhpIDxhZGRyZXNzPgplLmcuCngvMjB4aSAweDQwMDczMAoKCgpOb3RlOiBSZW1lbWJlciBnZGIgaGFzIGhpc3RvcnkganVzdCBsaWtlIGJhc2ggeW91IGRvbid0IG5lZWQgdG8gcmV0eXBlIHRoZQp3aG9sZSBsaW5lIGp1c3QgdXNlIHRoZSB1cCAmIGRvd24gYXJyb3dzLgoKCgpGb3IgbW9yZSBpbmZvCi0tLS0tLS0tLS0tLS0KRnJvbSB5b3VyIGxpbnV4Ym94IGRvIAptYW4gZ2RiIG9yIGluZm8gZ2RiLgoKY29yZSBkdW1wcwotLS0tLS0tLS0tCldoYXQgYSBjb3JlIGR1bXAgPywKQSBjb3JlIGR1bXAgaXMgYSBmaWxlIGdlbmVyYXRlZCBieSB0aGUga2VybmVsICggaWYgYWxsb3dlZCApIHdoaWNoIGNvbnRhaW5zIHRoZSByZWdpc3RlcnMsCiYgYWxsIGFjdGl2ZSBwYWdlcyBvZiB0aGUgcHJvZ3JhbSB3aGljaCBoYXMgY3Jhc2hlZC4KRnJvbSB0aGlzIGZpbGUgZ2RiIHdpbGwgYWxsb3cgeW91IHRvIGxvb2sgYXQgdGhlIHJlZ2lzdGVycyAmIHN0YWNrIHRyYWNlICYgbWVtb3J5IG9mIHRoZQpwcm9ncmFtIGFzIGlmIGl0IGp1c3QgY3Jhc2hlZCBvbiB5b3VyIHN5c3RlbSwgaXQgaXMgdXN1YWxseSBjYWxsZWQgY29yZSAmIGNyZWF0ZWQgaW4gdGhlCmN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuClRoaXMgaXMgdmVyeSB1c2VmdWwgaW4gdGhhdCBhIGN1c3RvbWVyIGNhbiBtYWlsIGEgY29yZSBkdW1wIHRvIGEgdGVjaG5pY2FsIHN1cHBvcnQgZGVwYXJ0bWVudAomIHRoZSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50IGNhbiByZWNvbnN0cnVjdCB3aGF0IGhhcHBlbmVkLgpQcm92aWRlZCB0aGUgaGF2ZSBhbiBpZGVudGljYWwgY29weSBvZiB0aGlzIHByb2dyYW0gd2l0aCBkZWJ1Z2dpbmcgc3ltYm9scyBjb21waWxlZCBpbiAmIAp0aGUgc291cmNlIGJhc2Ugb2YgdGhpcyBidWlsZCBpcyBhdmFpbGFibGUuCkluIHNob3J0IGl0IGlzIGZhciBtb3JlIHVzZWZ1bCB0aGFuIHNvbWV0aGluZyBsaWtlIGEgY3Jhc2ggbG9nIGNvdWxkIGV2ZXIgaG9wZSB0byBiZS4KCkluIHRoZW9yeSBhbGwgdGhhdCBpcyBtaXNzaW5nIHRvIHJlc3RhcnQgYSBjb3JlIGR1bXBlZCBwcm9ncmFtIGlzIGEga2VybmVsIHBhdGNoIHdoaWNoCndpbGwgZG8gdGhlIGZvbGxvd2luZy4KMSkgTWFrZSBhIG5ldyBrZXJuZWwgdGFzayBzdHJ1Y3R1cmUKMikgUmVsb2FkIGFsbCB0aGUgZHVtcGVkIHBhZ2VzIGJhY2sgaW50byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlcy4KMykgRG8gdGhlIHJlcXVpcmVkIGNsb2NrIGZpeHVwcwo0KSBHZXQgYWxsIGZpbGVzICYgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgdGhlIHByb2Nlc3MgYmFjayBpbnRvIGFuIGlkZW50aWNhbCBzdGF0ZSAoIHJlYWxseSBkaWZmaWN1bHQgKS4KNSkgQSBmZXcgbW9yZSBkaWZmaWN1bHQgdGhpbmdzIEkgaGF2ZW4ndCB0aG91Z2h0IG9mLgoKCgpXaHkgaGF2ZSBJIG5ldmVyIHNlZW4gb25lID8uClByb2JhYmx5IGJlY2F1c2UgeW91IGhhdmVuJ3QgdXNlZCB0aGUgY29tbWFuZCAKdWxpbWl0IC1jIHVubGltaXRlZCBpbiBiYXNoCnRvIGFsbG93IGNvcmUgZHVtcHMsIG5vdyBkbyAKdWxpbWl0IC1hIAp0byB2ZXJpZnkgdGhhdCB0aGUgbGltaXQgd2FzIGFjY2VwdGVkLgoKQSBzYW1wbGUgY29yZSBkdW1wClRvIGNyZWF0ZSB0aGlzIEknbSBnb2luZyB0byBkbwp1bGltaXQgLWMgdW5saW1pdGVkCmdkYiAKdG8gbGF1bmNoIGdkYiAobXkgdmljdGltIGFwcC4gKSBub3cgYmUgYmFkICYgZG8gdGhlIGZvbGxvd2luZyBmcm9tIGFub3RoZXIgCnRlbG5ldC94dGVybSBzZXNzaW9uIHRvIHRoZSBzYW1lIG1hY2hpbmUKcHMgLWF1eCB8IGdyZXAgZ2RiCmtpbGwgLVNJR1NFR1YgPGdkYidzIHBpZD4Kb3IgYWx0ZXJuYXRpdmVseSB1c2Uga2lsbGFsbCAtU0lHU0VHViBnZGIgaWYgeW91IGhhdmUgdGhlIGtpbGxhbGwgY29tbWFuZC4KTm93IGxvb2sgYXQgdGhlIGNvcmUgZHVtcC4KLi9nZGIgY29yZQpEaXNwbGF5cyB0aGUgZm9sbG93aW5nCkdOVSBnZGIgNC4xOApDb3B5cmlnaHQgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KR0RCIGlzIGZyZWUgc29mdHdhcmUsIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgeW91IGFyZQp3ZWxjb21lIHRvIGNoYW5nZSBpdCBhbmQvb3IgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgpUeXBlICJzaG93IGNvcHlpbmciIHRvIHNlZSB0aGUgY29uZGl0aW9ucy4KVGhlcmUgaXMgYWJzb2x1dGVseSBubyB3YXJyYW50eSBmb3IgR0RCLiAgVHlwZSAic2hvdyB3YXJyYW50eSIgZm9yIGRldGFpbHMuClRoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICJzMzkwLWlibS1saW51eCIuLi4KQ29yZSB3YXMgZ2VuZXJhdGVkIGJ5IGAuL2dkYicuClByb2dyYW0gdGVybWluYXRlZCB3aXRoIHNpZ25hbCAxMSwgU2VnbWVudGF0aW9uIGZhdWx0LgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvdXNyL2xpYi9saWJuY3Vyc2VzLnNvLjQuLi5kb25lLgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvbGliL2xpYm0uc28uNi4uLmRvbmUuClJlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGliYy5zby42Li4uZG9uZS4KUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9sZC1saW51eC5zby4yLi4uZG9uZS4KIzAgIDB4NDAxMjZkMWEgaW4gcmVhZCAoKSBmcm9tIC9saWIvbGliYy5zby42ClNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGZvciBkZWJ1Z2dpbmcgZ2RiLgpCcmVha3BvaW50IDEgYXQgMHg0ZGM2Zjg6IGZpbGUgdXRpbHMuYywgbGluZSA0NzEuCkJyZWFrcG9pbnQgMiBhdCAweDRkODdhNDogZmlsZSB0b3AuYywgbGluZSAyNjA5LgoodG9wLWdkYikgaW5mbyBzdGFjawojMCAgMHg0MDEyNmQxYSBpbiByZWFkICgpIGZyb20gL2xpYi9saWJjLnNvLjYKIzEgIDB4NTI4ZjI2IGluIHJsX2dldGMgKHN0cmVhbT0weDdmZmZmZGU4KSBhdCBpbnB1dC5jOjQwMgojMiAgMHg1MjhlZDAgaW4gcmxfcmVhZF9rZXkgKCkgYXQgaW5wdXQuYzozODEKIzMgIDB4NTE2N2U2IGluIHJlYWRsaW5lX2ludGVybmFsX2NoYXIgKCkgYXQgcmVhZGxpbmUuYzo0NTQKIzQgIDB4NTE2OGVlIGluIHJlYWRsaW5lX2ludGVybmFsX2NoYXJsb29wICgpIGF0IHJlYWRsaW5lLmM6NTA3CiM1ICAweDUxNjkyYyBpbiByZWFkbGluZV9pbnRlcm5hbCAoKSBhdCByZWFkbGluZS5jOjUyMQojNiAgMHg1MTY0ZmUgaW4gcmVhZGxpbmUgKHByb21wdD0weDdmZmZmODEwICJcMTc3gf+B+HhcMTc3gf+B94HYXDE3N4H/gfh4gcAiKQogICAgYXQgcmVhZGxpbmUuYzozNDkKIzcgIDB4NGQ3YThhIGluIGNvbW1hbmRfbGluZV9pbnB1dCAocHJyb21wdD0weDU2NDQyMCAiKGdkYikgIiwgcmVwZWF0PTEsCiAgICBhbm5vdGF0aW9uX3N1ZmZpeD0weDRkNmI0NCAicHJvbXB0IikgYXQgdG9wLmM6MjA5MQojOCAgMHg0ZDZjZjAgaW4gY29tbWFuZF9sb29wICgpIGF0IHRvcC5jOjEzNDUKIzkgIDB4NGUyNWJjIGluIG1haW4gKGFyZ2M9MSwgYXJndj0weDdmZmZmZGY0KSBhdCBtYWluLmM6NjM1CgoKTERECj09PQpUaGlzIGlzIGEgcHJvZ3JhbSB3aGljaCBsaXN0cyB0aGUgc2hhcmVkIGxpYnJhcmllcyB3aGljaCBhIGxpYnJhcnkgbmVlZHMsCk5vdGUgeW91IGFsc28gZ2V0IHRoZSByZWxvY2F0aW9ucyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgdGV4dCBzZWdtZW50cyB3aGljaApoZWxwIHdoZW4gdXNpbmcgb2JqZHVtcCAtLXNvdXJjZS4KZS5nLgogbGRkIC4vZ2RiCm91dHB1dHMKbGlibmN1cnNlcy5zby40ID0+IC91c3IvbGliL2xpYm5jdXJzZXMuc28uNCAoMHg0MDAxODAwMCkKbGlibS5zby42ID0+IC9saWIvbGlibS5zby42ICgweDQwMDVlMDAwKQpsaWJjLnNvLjYgPT4gL2xpYi9saWJjLnNvLjYgKDB4NDAwODQwMDApCi9saWIvbGQtbGludXguc28uMiA9PiAvbGliL2xkLWxpbnV4LnNvLjIgKDB4NDAwMDAwMDApCgoKRGVidWdnaW5nIHNoYXJlZCBsaWJyYXJpZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT0KTW9zdCBwcm9ncmFtcyB1c2Ugc2hhcmVkIGxpYnJhcmllcywgaG93ZXZlciBpdCBjYW4gYmUgdmVyeSBwYWluZnVsCndoZW4geW91IHNpbmdsZSBzdGVwIGluc3RydWN0aW9uIGludG8gYSBmdW5jdGlvbiBsaWtlIHByaW50ZiBmb3IgdGhlIApmaXJzdCB0aW1lICYgeW91IGVuZCB1cCBpbiBmdW5jdGlvbnMgbGlrZSBfZGxfcnVudGltZV9yZXNvbHZlIHRoaXMgaXMKdGhlIGxkLnNvIGRvaW5nIGxhenkgYmluZGluZywgbGF6eSBiaW5kaW5nIGlzIGEgY29uY2VwdCBpbiBFTEYgd2hlcmUgCnNoYXJlZCBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgbm90IGxvYWRlZCBpbnRvIG1lbW9yeSB1bmxlc3MgdGhleSBhcmUgCmFjdHVhbGx5IHVzZWQsIGdyZWF0IGZvciBzYXZpbmcgbWVtb3J5IGJ1dCBhIHBhaW4gdG8gZGVidWcuClRvIGdldCBhcm91bmQgdGhpcyBlaXRoZXIgcmVsaW5rIHRoZSBwcm9ncmFtIC1zdGF0aWMgb3IgZXhpdCBnZGIgdHlwZSAKZXhwb3J0IExEX0JJTkRfTk9XPXRydWUgdGhpcyB3aWxsIHN0b3AgbGF6eSBiaW5kaW5nICYgcmVzdGFydCB0aGUgZ2RiJ2luZyAKdGhlIHByb2dyYW0gaW4gcXVlc3Rpb24uCiAKCgpEZWJ1Z2dpbmcgbW9kdWxlcwo9PT09PT09PT09PT09PT09PQpBcyBtb2R1bGVzIGFyZSBkeW5hbWljYWxseSBsb2FkZWQgaW50byB0aGUga2VybmVsIHRoZWlyIGFkZHJlc3MgY2FuIGJlCmFueXdoZXJlIHRvIGdldCBhcm91bmQgdGhpcyB1c2UgdGhlIC1tIG9wdGlvbiB3aXRoIGluc21vZCB0byBlbWl0IGEgbG9hZAptYXAgd2hpY2ggY2FuIGJlIHBpcGVkIGludG8gYSBmaWxlIGlmIHJlcXVpcmVkLgoKVGhlIHByb2MgZmlsZSBzeXN0ZW0KPT09PT09PT09PT09PT09PT09PT0KV2hhdCBpcyBpdCA/LgpJdCBpcyBhIGZpbGVzeXN0ZW0gY3JlYXRlZCBieSB0aGUga2VybmVsIHdpdGggZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgb24gZGVtYW5kCmJ5IHRoZSBrZXJuZWwgaWYgcmVhZCwgb3IgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IGtlcm5lbCBwYXJhbWV0ZXJzLAppdCBpcyBhIHBvd2VyZnVsIGNvbmNlcHQuCgplLmcuCgpjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQgCk9uIG15IG1hY2hpbmUgb3V0cHV0cyAKMCAKdGVsbGluZyBtZSBpcF9mb3J3YXJkaW5nIGlzIG5vdCBvbiB0byBzd2l0Y2ggaXQgb24gSSBjYW4gZG8KZWNobyAxID4gIC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9mb3J3YXJkCmNhdCBpdCBhZ2FpbgpjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQgCk9uIG15IG1hY2hpbmUgbm93IG91dHB1dHMKMQpJUCBmb3J3YXJkaW5nIGlzIG9uLgpUaGVyZSBpcyBhIGxvdCBvZiB1c2VmdWwgaW5mbyBpbiBoZXJlIGJlc3QgZm91bmQgYnkgZ29pbmcgaW4gJiBoYXZpbmcgYSBsb29rIGFyb3VuZCwKc28gSSdsbCB0YWtlIHlvdSB0aHJvdWdoIHNvbWUgZW50cmllcyBJIGNvbnNpZGVyIGltcG9ydGFudC4KCkFsbCB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIG1hY2hpbmUgaGF2ZSB0aGVyZSBvd24gZW50cnkgZGVmaW5lZCBieQovcHJvYy88cGlkPgpTbyBsZXRzIGhhdmUgYSBsb29rIGF0IHRoZSBpbml0IHByb2Nlc3MKY2QgL3Byb2MvMQoKY2F0IGNtZGxpbmUKZW1pdHMKaW5pdCBbMl0KCmNkIC9wcm9jLzEvZmQKVGhpcyBjb250YWlucyBudW1lcmljYWwgZW50cmllcyBvZiBhbGwgdGhlIG9wZW4gZmlsZXMsCnNvbWUgb2YgdGhlc2UgeW91IGNhbiBjYXQgZS5nLiBzdGRvdXQgKDIpCgpjYXQgL3Byb2MvMjkvbWFwcwpvbiBteSBtYWNoaW5lIGVtaXRzCgowMDQwMDAwMC0wMDQ3ODAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDQxMDMgICAgICAgL2Jpbi9iYXNoCjAwNDc4MDAwLTAwNDdlMDAwIHJ3LXAgMDAwNzcwMDAgNWY6MDAgNDEwMyAgICAgICAvYmluL2Jhc2gKMDA0N2UwMDAtMDA0OTIwMDAgcnd4cCAwMDAwMDAwMCAwMDowMCAwCjQwMDAwMDAwLTQwMDE1MDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCjQwMDE1MDAwLTQwMDE2MDAwIHJ3LXAgMDAwMTQwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCjQwMDE2MDAwLTQwMDE3MDAwIHJ3eHAgMDAwMDAwMDAgMDA6MDAgMAo0MDAxNzAwMC00MDAxODAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKNDAwMTgwMDAtNDAwMWIwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQzNSAgICAgIC9saWIvbGlidGVybWNhcC5zby4yLjAuOAo0MDAxYjAwMC00MDAxYzAwMCBydy1wIDAwMDAyMDAwIDVmOjAwIDE0NDM1ICAgICAgL2xpYi9saWJ0ZXJtY2FwLnNvLjIuMC44CjQwMDFjMDAwLTQwMTBkMDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgMTQzODcgICAgICAvbGliL2xpYmMtMi4xLjIuc28KNDAxMGQwMDAtNDAxMTEwMDAgcnctcCAwMDBmMDAwMCA1ZjowMCAxNDM4NyAgICAgIC9saWIvbGliYy0yLjEuMi5zbwo0MDExMTAwMC00MDExNDAwMCBydy1wIDAwMDAwMDAwIDAwOjAwIDAKNDAxMTQwMDAtNDAxMWUwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQwOCAgICAgIC9saWIvbGlibnNzX2ZpbGVzLTIuMS4yLnNvCjQwMTFlMDAwLTQwMTFmMDAwIHJ3LXAgMDAwMDkwMDAgNWY6MDAgMTQ0MDggICAgICAvbGliL2xpYm5zc19maWxlcy0yLjEuMi5zbwo3ZmZmZDAwMC04MDAwMDAwMCByd3hwIGZmZmZlMDAwIDAwOjAwIDAKCgpTaG93aW5nIHVzIHRoZSBzaGFyZWQgbGlicmFyaWVzIGluaXQgdXNlcyB3aGVyZSB0aGV5IGFyZSBpbiBtZW1vcnkKJiBtZW1vcnkgYWNjZXNzIHBlcm1pc3Npb25zIGZvciBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEuCgovcHJvYy8xL2N3ZCBpcyBhIHNvZnRsaW5rIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgovcHJvYy8xL3Jvb3QgaXMgdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gZm9yIHRoaXMgcHJvY2Vzcy4gCgovcHJvYy8xL21lbSBpcyB0aGUgY3VycmVudCBydW5uaW5nIHByb2Nlc3NlcyBtZW1vcnkgd2hpY2ggeW91CmNhbiByZWFkICYgd3JpdGUgdG8gbGlrZSBhIGZpbGUuCnN0cmFjZSB1c2VzIHRoaXMgc29tZXRpbWVzIGFzIGl0IGlzIGEgYml0IGZhc3RlciB0aGFuIHRoZQpyYXRoZXIgaW5lZmZpY2llbnQgcHRyYWNlIGludGVyZmFjZSBmb3IgcGVla2luZyBhdCBEQVRBLgoKCmNhdCBzdGF0dXMgCgpOYW1lOiAgIGluaXQKU3RhdGU6ICBTIChzbGVlcGluZykKUGlkOiAgICAxClBQaWQ6ICAgMApVaWQ6ICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDAKR2lkOiAgICAwICAgICAgIDAgICAgICAgMCAgICAgICAwCkdyb3VwczoKVm1TaXplOiAgICAgIDQwOCBrQgpWbUxjazogICAgICAgICAwIGtCClZtUlNTOiAgICAgICAyMDgga0IKVm1EYXRhOiAgICAgICAyNCBrQgpWbVN0azogICAgICAgICA4IGtCClZtRXhlOiAgICAgICAzNjgga0IKVm1MaWI6ICAgICAgICAgMCBrQgpTaWdQbmQ6IDAwMDAwMDAwMDAwMDAwMDAKU2lnQmxrOiAwMDAwMDAwMDAwMDAwMDAwClNpZ0lnbjogN2ZmZmZmZmZkN2YwZDhmYwpTaWdDZ3Q6IDAwMDAwMDAwMjgwYjI2MDMKQ2FwSW5oOiAwMDAwMDAwMGZmZmZmZWZmCkNhcFBybTogMDAwMDAwMDBmZmZmZmZmZgpDYXBFZmY6IDAwMDAwMDAwZmZmZmZlZmYKClVzZXIgUFNXOiAgICAwNzBkZTAwMCA4MDQxNDE0Ngp0YXNrOiAwMDRiNjAwMCB0c3M6IDAwNGI2MmQ4IGtzcDogMDA0YjdjYTggcHRfcmVnczogMDA0YjdmNjgKVXNlciBHUFJTOgowMDAwMDQwMCAgMDAwMDAwMDAgIDAwMDAwMDBiICA3ZmZmZmE5MAowMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDQ1ZDlmNAowMDQ1Y2FmYyAgN2ZmZmZhOTAgIDdmZmZmZjE4ICAwMDQ1Y2IwOAowMDAxMDQwMCAgODA0MDM5ZTggIDgwNDAzYWY4ICA3ZmZmZjhiMApVc2VyIEFDUlM6CjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAxICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCktlcm5lbCBCYWNrQ2hhaW4gIENhbGxDaGFpbiAgICBCYWNrQ2hhaW4gIENhbGxDaGFpbgogICAgICAgMDA0YjdjYTggICA4MDAyYmQwYyAgICAgMDA0YjdkMTggICA4MDAyYjkyYwogICAgICAgMDA0YjdkYjggICA4MDA1Y2Q1MCAgICAgMDA0YjdlMzggICA4MDA1ZDEyYQogICAgICAgMDA0YjdmMDggICA4MDAxOTExNCAgICAgICAgICAgICAgICAgICAgIApTaG93aW5nIGFtb25nIG90aGVyIHRoaW5ncyBtZW1vcnkgdXNhZ2UgJiBzdGF0dXMgb2Ygc29tZSBzaWduYWxzICYKdGhlIHByb2Nlc3NlcydlcyByZWdpc3RlcnMgZnJvbSB0aGUga2VybmVsIHRhc2tfc3RydWN0dXJlCmFzIHdlbGwgYXMgYSBiYWNrY2hhaW4gd2hpY2ggbWF5IGJlIHVzZWZ1bCBpZiBhIHByb2Nlc3MgY3Jhc2hlcwppbiB0aGUga2VybmVsIGZvciBzb21lIHVua25vd24gcmVhc29uLgoKU29tZSBkcml2ZXIgZGVidWdnaW5nIHRlY2huaXF1ZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGVidWcgZmVhdHVyZQotLS0tLS0tLS0tLS0tClNvbWUgb2Ygb3VyIGRyaXZlcnMgbm93IHN1cHBvcnQgYSAiZGVidWcgZmVhdHVyZSIgaW4KL3Byb2MvczM5MGRiZiBzZWUgczM5MGRiZi50eHQgaW4gdGhlIGxpbnV4L0RvY3VtZW50YXRpb24gZGlyZWN0b3J5CmZvciBtb3JlIGluZm8uCmUuZy4gCnRvIHN3aXRjaCBvbiB0aGUgbGNzICJkZWJ1ZyBmZWF0dXJlIgplY2hvIDUgPiAvcHJvYy9zMzkwZGJmL2xjcy9sZXZlbAomIHRoZW4gYWZ0ZXIgdGhlIGVycm9yIG9jY3VycmVkLgpjYXQgL3Byb2MvczM5MGRiZi9sY3Mvc3ByaW50ZiA+L2xvZ2ZpbGUKdGhlIGxvZ2ZpbGUgbm93IGNvbnRhaW5zIHNvbWUgaW5mb3JtYXRpb24gd2hpY2ggbWF5IGhlbHAKdGVjaCBzdXBwb3J0IHJlc29sdmUgYSBwcm9ibGVtIGluIHRoZSBmaWVsZC4KCgoKaGlnaCBsZXZlbCBkZWJ1Z2dpbmcgbmV0d29yayBkcml2ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppZmNvbmZpZyBpcyBhIHF1aXRlIHVzZWZ1bCBjb21tYW5kCml0IGdpdmVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIG5ldHdvcmsgZHJpdmVycy4KCklmIHlvdSBzdXNwZWN0IHlvdXIgbmV0d29yayBkZXZpY2UgZHJpdmVyIGlzIGRlYWQKb25lIHdheSB0byBjaGVjayBpcyB0eXBlIAppZmNvbmZpZyA8bmV0d29yayBkZXZpY2U+IAplLmcuIHRyMApZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZQp0cjAgICAgICAgTGluayBlbmNhcDoxNi80IE1icHMgVG9rZW4gUmluZyAoTmV3KSAgSFdhZGRyIDAwOjA0OkFDOjIwOjhFOjQ4CiAgICAgICAgICBpbmV0IGFkZHI6OS4xNjQuMTg1LjEzMiAgQmNhc3Q6OS4xNjQuMTkxLjI1NSAgTWFzazoyNTUuMjU1LjIyNC4wCiAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBNVUxUSUNBU1QgIE1UVToyMDAwICBNZXRyaWM6MQogICAgICAgICAgUlggcGFja2V0czoyNDYxMzQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAogICAgICAgICAgVFggcGFja2V0czo1IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAogICAgICAgICAgY29sbGlzaW9uczowIHR4cXVldWVsZW46MTAwCgppZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc2F5IHVwCnRyeQovZXRjL3JjLmQvaW5pdC5kL25ldHdvcmsgc3RhcnQgCiggdGhpcyBzdGFydHMgdGhlIG5ldHdvcmsgc3RhY2sgJiBob3BlZnVsbHkgY2FsbHMgaWZjb25maWcgdHIwIHVwICkuCmlmY29uZmlnIGxvb2tzIGF0IHRoZSBvdXRwdXQgb2YgL3Byb2MvbmV0L2RldiAmIHByZXNlbnRzIGl0IGluIGEgbW9yZSBwcmVzZW50YWJsZSBmb3JtCk5vdyBwaW5nIHRoZSBkZXZpY2UgZnJvbSBhIG1hY2hpbmUgaW4gdGhlIHNhbWUgc3VibmV0LgppZiB0aGUgUlggcGFja2V0cyBjb3VudCAmIFRYIHBhY2tldHMgY291bnRzIGRvbid0IGluY3JlbWVudCB5b3UgcHJvYmFibHkKaGF2ZSBwcm9ibGVtcy4KbmV4dCAKY2F0IC9wcm9jL25ldC9hcnAKRG8geW91IHNlZSBhbnkgaGFyZHdhcmUgYWRkcmVzc2VzIGluIHRoZSBjYWNoZSBpZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLgpOZXh0IHRyeQpwaW5nIC1jIDUgPGJyb2FkY2FzdF9hZGRyPiBpLmUuIHRoZSBCY2FzdCBmaWVsZCBhYm92ZSBpbiB0aGUgb3V0cHV0IG9mCmlmY29uZmlnLiBEbyB5b3Ugc2VlIGFueSByZXBsaWVzIGZyb20gbWFjaGluZXMgb3RoZXIgdGhhbiB0aGUgbG9jYWwgbWFjaGluZQppZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLiBhbHNvIGlmIHRoZSBUWCBwYWNrZXRzIGNvdW50IGluIGlmY29uZmlnCmhhc24ndCBpbmNyZW1lbnRlZCBlaXRoZXIgeW91IGhhdmUgc2VyaW91cyBwcm9ibGVtcyBpbiB5b3VyIGRyaXZlciAKKGUuZy4gdGhlIHR4YnVzeSBmaWVsZCBvZiB0aGUgbmV0d29yayBkZXZpY2UgYmVpbmcgc3R1Y2sgb24gKSAKb3IgeW91IG1heSBoYXZlIG11bHRpcGxlIG5ldHdvcmsgZGV2aWNlcyBjb25uZWN0ZWQuCgoKY2hhbmRldgotLS0tLS0tClRoZXJlIGlzIGEgbmV3IGRldmljZSBsYXllciBmb3IgY2hhbm5lbCBkZXZpY2VzLCBzb21lCmRyaXZlcnMgZS5nLiBsY3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGxheWVyLgpJZiB0aGUgZGV2aWNlIHVzZXMgdGhlIGNoYW5uZWwgZGV2aWNlIGxheWVyIHlvdSdsbCBiZQphYmxlIHRvIGZpbmQgd2hhdCBpbnRlcnJ1cHRzIGl0IHVzZXMgJiB0aGUgY3VycmVudCBzdGF0ZSAKb2YgdGhlIGRldmljZS4KU2VlIHRoZSBtYW5wYWdlIGNoYW5kZXYuOCAmdHlwZSBjYXQgL3Byb2MvY2hhbmRldiBmb3IgbW9yZSBpbmZvLgoKCgpTdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpiYXNoL3NoCgpiYXNoIC14IDxzY3JpcHRuYW1lPgplLmcuIGJhc2ggLXggL3Vzci9iaW4vYmFzaGJ1ZwpkaXNwbGF5cyB0aGUgZm9sbG93aW5nIGxpbmVzIGFzIGl0IGV4ZWN1dGVzIHRoZW0uCisgTUFDSElORT1pNTg2CisgT1M9bGludXgtZ251CisgQ0M9Z2NjCisgQ0ZMQUdTPSAtRFBST0dSQU09J2Jhc2gnIC1ESE9TVFRZUEU9J2k1ODYnIC1ET1NUWVBFPSdsaW51eC1nbnUnIC1ETUFDSFRZUEU9J2k1ODYtcGMtbGludXgtZ251JyAtRFNIRUxMIC1ESEFWRV9DT05GSUdfSCAgIC1JLiAtSS4gLUkuL2xpYiAtTzIgLXBpcGUKKyBSRUxFQVNFPTIuMDEKKyBQQVRDSExFVkVMPTEKKyBSRUxTVEFUVVM9cmVsZWFzZQorIE1BQ0hUWVBFPWk1ODYtcGMtbGludXgtZ251ICAgCgpwZXJsIC1kIDxzY3JpcHRuYW1lPiBydW5zIHRoZSBwZXJsc2NyaXB0IGluIGEgZnVsbHkgaW50ZXJhY3RpdmUgZGVidWdnZXIKPGxpa2UgZ2RiPi4KVHlwZSAnaCcgaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgoKZm9yIGRlYnVnZ2luZyBqYXZhIHR5cGUKamRiIDxmaWxlbmFtZT4gYW5vdGhlciBmdWxseSBpbnRlcmFjdGl2ZSBnZGIgc3R5bGUgZGVidWdnZXIuCiYgdHlwZSA/IGluIHRoZSBkZWJ1Z2dlciBmb3IgaGVscC4KCgoKRHVtcHRvb2wgJiBMY3Jhc2ggKCBsa2NkICkKPT09PT09PT09PT09PT09PT09PT09PT09PT0KTWljaGFlbCBIb2x6aGV1ICYgb3RoZXJzIGhlcmUgYXQgSUJNIGhhdmUgYSBmYWlybHkgbWF0dXJlIHBvcnQgb2YgClNHSSdzIGxjcmFzaCB0b29sIHdoaWNoIGFsbG93cyBvbmUgdG8gbG9vayBhdCBrZXJuZWwgc3RydWN0dXJlcyBpbiBhCnJ1bm5pbmcga2VybmVsLgoKSXQgYWxzbyBjb21wbGVtZW50cyBhIHRvb2wgY2FsbGVkIGR1bXB0b29sIHdoaWNoIGR1bXBzIGFsbCB0aGUga2VybmVsJ3MKbWVtb3J5IHBhZ2VzICYgcmVnaXN0ZXJzIHRvIGVpdGhlciBhIHRhcGUgb3IgYSBkaXNrLgpUaGlzIGNhbiBiZSB1c2VkIGJ5IHRlY2ggc3VwcG9ydCBvciBhbiBhbWJpdGlvdXMgZW5kIHVzZXIgZG8KcG9zdCBtb3J0ZW0gZGVidWdnaW5nIG9mIGEgbWFjaGluZSBsaWtlIGdkYiBjb3JlIGR1bXBzLgoKR29pbmcgaW50byBob3cgdG8gdXNlIHRoaXMgdG9vbCBpbiBkZXRhaWwgd2lsbCBiZSBleHBsYWluZWQKaW4gb3RoZXIgZG9jdW1lbnRhdGlvbiBzdXBwbGllZCBieSBJQk0gd2l0aCB0aGUgcGF0Y2hlcyAmIHRoZSAKbGNyYXNoIGhvbWVwYWdlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9sa2NkLyAmIHRoZSBsY3Jhc2ggbWFucGFnZS4KCkhvdyB0aGV5IHdvcmsKLS0tLS0tLS0tLS0tLQpMY3Jhc2ggaXMgYSBwZXJmZWN0bHkgbm9ybWFsIHByb2dyYW0saG93ZXZlciwgaXQgcmVxdWlyZXMgMiAKYWRkaXRpb25hbCBmaWxlcywgS2VybnR5cGVzIHdoaWNoIGlzIGJ1aWx0IHVzaW5nIGEgcGF0Y2ggdG8gdGhlIApsaW51eCBrZXJuZWwgc291cmNlcyBpbiB0aGUgbGludXggcm9vdCBkaXJlY3RvcnkgJiB0aGUgU3lzdGVtLm1hcC4KCktlcm50eXBlcyBpcyBhbiBvYmplY3RmaWxlIHdob3NlIHNvbGUgcHVycG9zZSBpbiBsaWZlCmlzIHRvIHByb3ZpZGUgc3RhYnMgZGVidWcgaW5mbyB0byBsY3Jhc2gsIHRvIGRvIHRoaXMKS2VybnR5cGVzIGlzIGJ1aWx0IGZyb20ga2VybnR5cGVzLmMgd2hpY2gganVzdCBpbmNsdWRlcyB0aGUgbW9zdCBjb21tb25seQpyZWZlcmVuY2VkIGhlYWRlciBmaWxlcyB1c2VkIHdoZW4gZGVidWdnaW5nLCBsY3Jhc2ggY2FuIHRoZW4gcmVhZCB0aGUKLnN0YWJzIHNlY3Rpb24gb2YgdGhpcyBmaWxlLgoKRGVidWdnaW5nIGEgbGl2ZSBzeXN0ZW0gaXQgdXNlcyAvZGV2L21lbQphbHRlcm5hdGl2ZWx5IGZvciBwb3N0IG1vcnRlbSBkZWJ1Z2dpbmcgaXQgdXNlcyB0aGUgZGF0YSAKY29sbGVjdGVkIGJ5IGR1bXB0b29sLgoKCgpTeXNScQo9PT09PQpUaGlzIGlzIG5vdyBzdXBwb3J0ZWQgYnkgbGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUuClRvIGVuYWJsZSBpdCBkbyBjb21waWxlIHRoZSBrZXJuZWwgd2l0aCAKS2VybmVsIEhhY2tpbmcgLT4gTWFnaWMgU3lzUnEgS2V5IEVuYWJsZWQKZWNobyAiMSIgPiAvcHJvYy9zeXMva2VybmVsL3N5c3JxCmFsc28gdHlwZQplY2hvICI4IiA+L3Byb2Mvc3lzL2tlcm5lbC9wcmludGsKVG8gbWFrZSBwcmludGsgb3V0cHV0IGdvIHRvIGNvbnNvbGUuCk9uIDM5MCBhbGwgY29tbWFuZHMgYXJlIHByZWZpeGVkIHdpdGgKXi0KZS5nLgpeLXQgd2lsbCBzaG93IHRhc2tzLgpeLT8gb3Igc29tZSB1bmtub3duIGNvbW1hbmQgd2lsbCBkaXNwbGF5IGhlbHAuClRoZSBzeXNycSBrZXkgcmVhZGluZyBpcyB2ZXJ5IHBpY2t5ICggSSBoYXZlIHRvIHR5cGUgdGhlIGtleXMgaW4gYW4KIHh0ZXJtIHNlc3Npb24gJiBwYXN0ZSB0aGVtICBpbnRvIHRoZSB4MzI3MCBjb25zb2xlICkKJiBpdCBtYXkgYmUgd2lzZSB0byBwcmVkZWZpbmUgdGhlIGtleXMgYXMgZGVzY3JpYmVkIGluIHRoZSBWTSBoaW50cyBhYm92ZQoKVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzeW5jaW5nIGRpc2tzIHVubW91bnRpbmcgJiByZWJvb3RpbmcKaWYgdGhlIG1hY2hpbmUgZ2V0cyBwYXJ0aWFsbHkgaHVuZy4KClJlYWQgRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgZm9yIG1vcmUgaW5mbwoKUmVmZXJlbmNlczoKPT09PT09PT09PT0KRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZSBSZWZlcmVuY2UgU3VtbWFyeQpFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uCkhhcnRtdXQgUGVubmVycyBzMzkwIHN0YWNrIGZyYW1lIHNoZWV0LgpJQk0gTWFpbmZyYW1lIENoYW5uZWwgQXR0YWNobWVudCBhIHRlY2hub2xvZ3kgYnJpZWYgZnJvbSBhIENJU0NPIHdlYnBhZ2UKVmFyaW91cyBiaXRzIG9mIG1hbiAmIGluZm8gcGFnZXMgb2YgTGludXguCkxpbnV4ICYgR0RCIHNvdXJjZS4KVmFyaW91cyBpbmZvICYgbWFuIHBhZ2VzLgpDTVMgSGVscCBvbiB0cmFjaW5nIGNvbW1hbmRzLgpMaW51eCBmb3Igcy8zOTAgRWxmIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKTGludXggZm9yIHovU2VyaWVzIEVsZiBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlICggQm90aCBIaWdobHkgUmVjb21tZW5kZWQgKQp6L0FyY2hpdGVjdHVyZSBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBTQTIyLTc4MzItMDAKRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgU0EyMi03MjA5LTAxICYgdGhlCkVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIFNBMjItNzIwMS0wNQoKU3BlY2lhbCBUaGFua3MKPT09PT09PT09PT09PT0KU3BlY2lhbCB0aGFua3MgdG8gTmVhbGUgRmVyZ3Vzb24gd2hvIG1haW50YWlucyBhIG11Y2gKcHJldHRpZXIgSFRNTCB2ZXJzaW9uIG9mIHRoaXMgcGFnZSBhdApodHRwOi8vcGVuZ3VpbnZtLnByaW5jZXRvbi5lZHUvbm90ZXMuaHRtbCNEZWJ1ZzM5MApCb2IgR3JhaW5nZXIgU3RlZmFuIEJhZGVyICYgb3RoZXJzIGZvciByZXBvcnRpbmcgYnVncwo=