ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKCQkJICAgICAgICAgICAgICAgYnkKCQlEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCgkJQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXN0IHZpZXdlZCB3aXRoIGZpeGVkIHdpZHRoIGZvbnRzIAoKT3ZlcnZpZXcgb2YgRG9jdW1lbnQ6Cj09PT09PT09PT09PT09PT09PT09PQpUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0byBkZWJ1ZwpMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZS4gSXQgaXNuJ3QgaW50ZW5kZWQgYXMgYSBjb21wbGV0ZSByZWZlcmVuY2UgJiBub3QgYQp0dXRvcmlhbCBvbiB0aGUgZnVuZGFtZW50YWxzIG9mIEMgJiBhc3NlbWJseS4gSXQgZG9lc24ndCBnbyBpbnRvCjM5MCBJTyBpbiBhbnkgZGV0YWlsLiBJdCBpcyBpbnRlbmRlZCB0byBjb21wbGVtZW50IHRoZSBkb2N1bWVudHMgaW4gdGhlCnJlZmVyZW5jZSBzZWN0aW9uIGJlbG93ICYgYW55IG90aGVyIHdvcnRod2hpbGUgcmVmZXJlbmNlcyB5b3UgZ2V0LgoKSXQgaXMgaW50ZW5kZWQgbGlrZSB0aGUgRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUmVmZXJlbmNlIFN1bW1hcnkKdG8gYmUgcHJpbnRlZCBvdXQgJiB1c2VkIGFzIGEgcXVpY2sgY2hlYXQgc2hlZXQgc2VsZiBoZWxwIHN0eWxlIHJlZmVyZW5jZSB3aGVuCnByb2JsZW1zIG9jY3VyLgoKQ29udGVudHMKPT09PT09PT0KUmVnaXN0ZXIgU2V0CkFkZHJlc3MgU3BhY2VzIG9uIEludGVsIExpbnV4CkFkZHJlc3MgU3BhY2VzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlClRoZSBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBLZXJuZWwgVGFzayBTdHJ1Y3R1cmUKUmVnaXN0ZXIgVXNhZ2UgJiBTdGFja2ZyYW1lcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpBIHNhbXBsZSBwcm9ncmFtIHdpdGggY29tbWVudHMKQ29tcGlsaW5nIHByb2dyYW1zIGZvciBkZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKRmlndXJpbmcgb3V0IGdjYyBjb21waWxlIGVycm9ycwpEZWJ1Z2dpbmcgVG9vbHMKb2JqZHVtcApzdHJhY2UKUGVyZm9ybWFuY2UgRGVidWdnaW5nIApEZWJ1Z2dpbmcgdW5kZXIgVk0Kcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBJTyBPdmVydmlldwpEZWJ1Z2dpbmcgSU8gb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSB1bmRlciBWTQpHREIgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpTdGFjayBjaGFpbmluZyBpbiBnZGIgYnkgaGFuZApFeGFtaW5pbmcgY29yZSBkdW1wcwpsZGQKRGVidWdnaW5nIG1vZHVsZXMKVGhlIHByb2MgZmlsZSBzeXN0ZW0KU3RhcnRpbmcgcG9pbnRzIGZvciBkZWJ1Z2dpbmcgc2NyaXB0aW5nIGxhbmd1YWdlcyBldGMuCkR1bXB0b29sICYgTGNyYXNoClN5c1JxClJlZmVyZW5jZXMKU3BlY2lhbCBUaGFua3MKClJlZ2lzdGVyIFNldAo9PT09PT09PT09PT0KVGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlcyBoYXZlIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzLgogCjE2ICBHZW5lcmFsIHByb3Bvc2UgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCByMC1yMTUgb3IgZ3ByMC1ncHIxNSB1c2VkIGZvciBhcml0aG1ldGljICYgYWRkcmVzc2luZy4gCgoxNiBDb250cm9sIHJlZ2lzdGVycywgMzIgYml0IG9uIHMvMzkwIDY0IGJpdCBvbiB6L0FyY2hpdGVjdHVyZSwgKCBjcjAtY3IxNSBrZXJuZWwgdXNhZ2Ugb25seSApIHVzZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LAppbnRlcnJ1cHQgY29udHJvbCxkZWJ1Z2dpbmcgY29udHJvbCBldGMuCgoxNiBBY2Nlc3MgcmVnaXN0ZXJzICggYXIwLWFyMTUgKSAzMiBiaXQgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpub3QgdXNlZCBieSBub3JtYWwgcHJvZ3JhbXMgYnV0IHBvdGVudGlhbGx5IGNvdWxkIApiZSB1c2VkIGFzIHRlbXBvcmFyeSBzdG9yYWdlLiBUaGVpciBtYWluIHB1cnBvc2UgaXMgdGhlaXIgMSB0byAxCmFzc29jaWF0aW9uIHdpdGggZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBhbmQgYXJlIHVzZWQgaW4KdGhlIGtlcm5lbCBmb3IgY29weWluZyBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBhZGRyZXNzIHNwYWNlcy4KQWNjZXNzIHJlZ2lzdGVyIDAgKCAmIGFjY2VzcyByZWdpc3RlciAxIG9uIHovQXJjaGl0ZWN0dXJlICggbmVlZHMgNjQgYml0IApwb2ludGVyICkgKSBpcyBjdXJyZW50bHkgdXNlZCBieSB0aGUgcHRocmVhZCBsaWJyYXJ5IGFzIGEgcG9pbnRlciB0bwp0aGUgY3VycmVudCBydW5uaW5nIHRocmVhZHMgcHJpdmF0ZSBhcmVhLgoKMTYgNjQgYml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAoZnAwLWZwMTUgKSBJRUVFICYgSEZQIGZsb2F0aW5nIApwb2ludCBmb3JtYXQgY29tcGxpYW50IG9uIEc1IHVwd2FyZHMgJiBhIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnIChGUEMpIAo0ICA2NCBiaXQgcmVnaXN0ZXJzIChmcDAsZnAyLGZwNCAmIGZwNikgSEZQIG9ubHkgb24gb2xkZXIgbWFjaGluZXMuCk5vdGU6CkxpbnV4IChjdXJyZW50bHkpIGFsd2F5cyB1c2VzIElFRUUgJiBlbXVsYXRlcyBHNSBJRUVFIGZvcm1hdCBvbiBvbGRlciBtYWNoaW5lcywKKCBwcm92aWRlZCB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgZm9yIHRoaXMgKS4KCgpUaGUgUFNXIGlzIHRoZSBtb3N0IGltcG9ydGFudCByZWdpc3RlciBvbiB0aGUgbWFjaGluZSBpdAppcyA2NCBiaXQgb24gcy8zOTAgJiAxMjggYml0IG9uIHovQXJjaGl0ZWN0dXJlICYgc2VydmVzIHRoZSByb2xlcyBvZiAKYSBwcm9ncmFtIGNvdW50ZXIgKHBjKSwgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXIsbWVtb3J5IHNwYWNlIGRlc2lnbmF0b3IuCkluIElCTSBzdGFuZGFyZCBub3RhdGlvbiBJIGFtIGNvdW50aW5nIGJpdCAwIGFzIHRoZSBNU0IuCkl0IGhhcyBzZXZlcmFsIGFkdmFudGFnZXMgb3ZlciBhIG5vcm1hbCBwcm9ncmFtIGNvdW50ZXIKaW4gdGhhdCB5b3UgY2FuIGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uICYgcHJvZ3JhbSBjb3VudGVyIAppbiBhIHNpbmdsZSBpbnN0cnVjdGlvbi4gVG8gY2hhbmdlIGFkZHJlc3MgdHJhbnNsYXRpb24sCmUuZy4gc3dpdGNoaW5nIGFkZHJlc3MgdHJhbnNsYXRpb24gb2ZmIHJlcXVpcmVzIHRoYXQgeW91CmhhdmUgYSBsb2dpY2FsPXBoeXNpY2FsIG1hcHBpbmcgZm9yIHRoZSBhZGRyZXNzIHlvdSBhcmUKY3VycmVudGx5IHJ1bm5pbmcgYXQuCgogICAgICBCaXQgICAgICAgICAgIFZhbHVlCnMvMzkwIHovQXJjaGl0ZWN0dXJlCjAgICAgICAgMCAgICAgUmVzZXJ2ZWQgKCBtdXN0IGJlIDAgKSBvdGhlcndpc2Ugc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gb2NjdXJzLgoKMSAgICAgICAxICAgICBQcm9ncmFtIEV2ZW50IFJlY29yZGluZyAxIFBFUiBlbmFibGVkLCAKCSAgICAgIFBFUiBpcyB1c2VkIHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nIGUuZy4gc2luZ2xlIHN0ZXBwaW5nLgoKMi00ICAgIDItNCAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApLiAKCjUgICAgICAgNSAgICAgRHluYW1pYyBhZGRyZXNzIHRyYW5zbGF0aW9uIDE9REFUIG9uLgoKNiAgICAgICA2ICAgICBJbnB1dC9PdXRwdXQgaW50ZXJydXB0IE1hc2sKCjcgICAgICAgNyAgICAgRXh0ZXJuYWwgaW50ZXJydXB0IE1hc2sgdXNlZCBwcmltYXJpbHkgZm9yIGludGVycHJvY2Vzc29yIHNpZ25hbGxpbmcgJiAKCSAgICAgIGNsb2NrIGludGVycnVwdHMuCgo4LTExICA4LTExICAgIFBTVyBLZXkgdXNlZCBmb3IgY29tcGxleCBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gbm90IHVzZWQgdW5kZXIgbGludXgKCjEyICAgICAgMTIgICAgMSBvbiBzLzM5MCAwIG9uIHovQXJjaGl0ZWN0dXJlCgoxMyAgICAgIDEzICAgIE1hY2hpbmUgQ2hlY2sgTWFzayAxPWVuYWJsZSBtYWNoaW5lIGNoZWNrIGludGVycnVwdHMKCjE0ICAgICAgMTQgICAgV2FpdCBTdGF0ZSBzZXQgdGhpcyB0byAxIHRvIHN0b3AgdGhlIHByb2Nlc3NvciBleGNlcHQgZm9yIGludGVycnVwdHMgJiBnaXZlIAoJICAgICAgdGltZSB0byBvdGhlciBMUEFSUyB1c2VkIGluIENQVSBpZGxlIGluIHRoZSBrZXJuZWwgdG8gaW5jcmVhc2Ugb3ZlcmFsbCAKCSAgICAgIHVzYWdlIG9mIHByb2Nlc3NvciByZXNvdXJjZXMuCgoxNSAgICAgIDE1ICAgIFByb2JsZW0gc3RhdGUgKCBpZiBzZXQgdG8gMSBjZXJ0YWluIGluc3RydWN0aW9ucyBhcmUgZGlzYWJsZWQgKQoJICAgICAgYWxsIGxpbnV4IHVzZXIgcHJvZ3JhbXMgcnVuIHdpdGggdGhpcyBiaXQgMSAKCSAgICAgICggdXNlZnVsIGluZm8gZm9yIGRlYnVnZ2luZyB1bmRlciBWTSApLgoKMTYtMTcgMTYtMTcgICBBZGRyZXNzIFNwYWNlIENvbnRyb2wKCgkgICAgICAwMCBQcmltYXJ5IFNwYWNlIE1vZGUgd2hlbiBEQVQgb24KCSAgICAgIFRoZSBsaW51eCBrZXJuZWwgY3VycmVudGx5IHJ1bnMgaW4gdGhpcyBtb2RlLCBDUjEgaXMgYWZmaWxpYXRlZCB3aXRoIAogICAgICAgICAgICAgIHRoaXMgbW9kZSAmIHBvaW50cyB0byB0aGUgcHJpbWFyeSBzZWdtZW50IHRhYmxlIG9yaWdpbiBldGMuCgoJICAgICAgMDEgQWNjZXNzIHJlZ2lzdGVyIG1vZGUgdGhpcyBtb2RlIGlzIHVzZWQgaW4gZnVuY3Rpb25zIHRvIAoJICAgICAgY29weSBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBzcGFjZS4KCgkgICAgICAxMCBTZWNvbmRhcnkgc3BhY2UgbW9kZSBub3QgdXNlZCBpbiBsaW51eCBob3dldmVyIENSNyB0aGUKCSAgICAgIHJlZ2lzdGVyIGFmZmlsaWF0ZWQgd2l0aCB0aGlzIG1vZGUgaXMgJiB0aGlzICYgbm9ybWFsbHkKCSAgICAgIENSMTM9Q1I3IHRvIGFsbG93IHVzIHRvIGNvcHkgZGF0YSBiZXR3ZWVuIGtlcm5lbCAmIHVzZXIgc3BhY2UuCgkgICAgICBXZSBkbyB0aGlzIGFzIGZvbGxvd3M6CgkgICAgICBXZSBzZXQgYXIyIHRvIDAgdG8gZGVzaWduYXRlIGl0cwoJICAgICAgYWZmaWxpYXRlZCBncHIgKCBncHIyICl0byBwb2ludCB0byBwcmltYXJ5PWtlcm5lbCBzcGFjZS4KCSAgICAgIFdlIHNldCBhcjQgdG8gMSB0byBkZXNpZ25hdGUgaXRzCgkgICAgICBhZmZpbGlhdGVkIGdwciAoIGdwcjQgKSB0byBwb2ludCB0byBzZWNvbmRhcnk9aG9tZT11c2VyIHNwYWNlCgkgICAgICAmIHRoZW4gZXNzZW50aWFsbHkgZG8gYSBtZW1jb3B5KGdwcjIsZ3ByNCxzaXplKSB0bwoJICAgICAgY29weSBkYXRhIGJldHdlZW4gdGhlIGFkZHJlc3Mgc3BhY2VzLCB0aGUgcmVhc29uIHdlIHVzZSBob21lIHNwYWNlIGZvciB0aGUKCSAgICAgIGtlcm5lbCAmIGRvbid0IGtlZXAgc2Vjb25kYXJ5IHNwYWNlIGZyZWUgaXMgdGhhdCBjb2RlIHdpbGwgbm90IHJ1biBpbiAKCSAgICAgIHNlY29uZGFyeSBzcGFjZS4KCgkgICAgICAxMSBIb21lIFNwYWNlIE1vZGUgYWxsIHVzZXIgcHJvZ3JhbXMgcnVuIGluIHRoaXMgbW9kZS4KCSAgICAgIGl0IGlzIGFmZmlsaWF0ZWQgd2l0aCBDUjEzLgoKMTgtMTkgMTgtMTkgICBDb25kaXRpb24gY29kZXMgKENDKQoKMjAgICAgMjAgICAgICBGaXhlZCBwb2ludCBvdmVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgCiAgICAgICAgICAgICAgb2NjdXIgKCBub3JtYWxseSAwICkgCgoyMSAgICAyMSAgICAgIERlY2ltYWwgb3ZlcmZsb3cgbWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAogICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCgoyMiAgICAyMiAgICAgIEV4cG9uZW50IHVuZGVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCiAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKCjIzICAgIDIzICAgICAgU2lnbmlmaWNhbmNlIE1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQoKMjQtMzEgMjQtMzAgICBSZXNlcnZlZCBNdXN0IGJlIDAuCgogICAgICAzMSAgICAgIEV4dGVuZGVkIEFkZHJlc3NpbmcgTW9kZQogICAgICAzMiAgICAgIEJhc2ljIEFkZHJlc3NpbmcgTW9kZQogICAgICAgICAgICAgIFVzZWQgdG8gc2V0IGFkZHJlc3NpbmcgbW9kZQoJICAgICAgUFNXIDMxICAgUFNXIDMyCiAgICAgICAgICAgICAgICAwICAgICAgICAgMCAgICAgICAgMjQgYml0CiAgICAgICAgICAgICAgICAwICAgICAgICAgMSAgICAgICAgMzEgYml0CiAgICAgICAgICAgICAgICAxICAgICAgICAgMSAgICAgICAgNjQgYml0CgozMiAgICAgICAgICAgICAxPTMxIGJpdCBhZGRyZXNzaW5nIG1vZGUgMD0yNCBiaXQgYWRkcmVzc2luZyBtb2RlIChmb3IgYmFja3dhcmQgCiAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkpLCBsaW51eCBhbHdheXMgcnVucyB3aXRoIHRoaXMgYml0IHNldCB0byAxCgozMy02NCAgICAgICAgICBJbnN0cnVjdGlvbiBhZGRyZXNzLgogICAgICAzMy02MyAgICBSZXNlcnZlZCBtdXN0IGJlIDAKICAgICAgNjQtMTI3ICAgQWRkcmVzcwogICAgICAgICAgICAgICBJbiAyNCBiaXRzIG1vZGUgYml0cyA2NC0xMDM9MCBiaXRzIDEwNC0xMjcgQWRkcmVzcyAKICAgICAgICAgICAgICAgSW4gMzEgYml0cyBtb2RlIGJpdHMgNjQtOTY9MCBiaXRzIDk3LTEyNyBBZGRyZXNzCiAgICAgICAgICAgICAgIE5vdGU6IHVubGlrZSAzMSBiaXQgbW9kZSBvbiBzLzM5MCBiaXQgOTYgbXVzdCBiZSB6ZXJvCgkgICAgICAgd2hlbiBsb2FkaW5nIHRoZSBhZGRyZXNzIHdpdGggTFBTV0Ugb3RoZXJ3aXNlIGEgCiAgICAgICAgICAgICAgIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIG9jY3VycywgTFBTVyBpcyBmdWxseSBiYWNrd2FyZAogICAgICAgICAgICAgICBjb21wYXRpYmxlLgogCSAgCgkgIApQcmVmaXggUGFnZShzKQotLS0tLS0tLS0tLS0tLQkgIApUaGlzIHBlciBjcHUgbWVtb3J5IGFyZWEgaXMgdG9vIGludGltYXRlbHkgdGllZCB0byB0aGUgcHJvY2Vzc29yIG5vdCB0byBtZW50aW9uLgpJdCBleGlzdHMgYmV0d2VlbiB0aGUgcmVhbCBhZGRyZXNzZXMgMC00MDk2IG9uIHMvMzkwICYgMC04MTkyIHovQXJjaGl0ZWN0dXJlICYgaXMgZXhjaGFuZ2VkIAp3aXRoIGEgMSBwYWdlIG9uIHMvMzkwIG9yIDIgcGFnZXMgb24gei9BcmNoaXRlY3R1cmUgaW4gYWJzb2x1dGUgc3RvcmFnZSBieSB0aGUgc2V0IApwcmVmaXggaW5zdHJ1Y3Rpb24gaW4gbGludXgnZXMgc3RhcnR1cC4gClRoaXMgcGFnZSBpcyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgcHJlZml4IGZvciBlYWNoIHByb2Nlc3NvciBpbiBhbiBTTVAgY29uZmlndXJhdGlvbgooIGFzc3VtaW5nIHRoZSBvcyBkZXNpZ25lciBpcyBzYW5lIG9mIGNvdXJzZSA6LSkgKS4KQnl0ZXMgMC01MTIgKCAyMDAgaGV4ICkgb24gcy8zOTAgJiAwLTUxMiw0MDk2LTQ1NDQsNDYwNC01MTE5IGN1cnJlbnRseSBvbiB6L0FyY2hpdGVjdHVyZSAKYXJlIHVzZWQgYnkgdGhlIHByb2Nlc3NvciBpdHNlbGYgZm9yIGhvbGRpbmcgc3VjaCBpbmZvcm1hdGlvbiBhcyBleGNlcHRpb24gaW5kaWNhdGlvbnMgJiAKZW50cnkgcG9pbnRzIGZvciBleGNlcHRpb25zLgpCeXRlcyBhZnRlciAweGMwMCBoZXggYXJlIHVzZWQgYnkgbGludXggZm9yIHBlciBwcm9jZXNzb3IgZ2xvYmFscyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIAooIHRoZXJlIGlzIGEgZ2FwIG9uIHovQXJjaGl0ZWN0dXJlIHRvbyBjdXJyZW50bHkgYmV0d2VlbiAweGMwMCAmIDEwMDAgd2hpY2ggbGludXggdXNlcyApLgpUaGUgY2xvc2VzdCB0aGluZyB0byB0aGlzIG9uIHRyYWRpdGlvbmFsIGFyY2hpdGVjdHVyZXMgaXMgdGhlIGludGVycnVwdAp2ZWN0b3IgdGFibGUuIFRoaXMgaXMgYSBnb29kIHRoaW5nICYgZG9lcyBzaW1wbGlmeSBzb21lIG9mIHRoZSBrZXJuZWwgY29kaW5nCmhvd2V2ZXIgaXQgbWVhbnMgdGhhdCB3ZSBub3cgY2Fubm90IGNhdGNoIHN0cmF5IE5VTEwgcG9pbnRlcnMgaW4gdGhlCmtlcm5lbCB3aXRob3V0IGhhcmQgY29kZWQgY2hlY2tzLgoKCgpBZGRyZXNzIFNwYWNlcyBvbiBJbnRlbCBMaW51eAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIHRyYWRpdGlvbmFsIEludGVsIExpbnV4IGlzIGFwcHJveGltYXRlbHkgbWFwcGVkIGFzIGZvbGxvd3MgZm9yZ2l2ZQp0aGUgYXNjaWkgYXJ0LgoweEZGRkZGRkZGIDRHQiBIaW1lbSAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEtlcm5lbCBTcGFjZSAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgpVc2VyIFNwYWNlIEhpbWVtICh0eXBpY2FsbHkgMHhDMDAwMDAwMCAzR0IgKSogIFVzZXIgU3RhY2sgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCSAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCQkgICAgKiAgU2hhcmVkIExpYnMgICogICAgICAgICAgKiBOZXh0IFByb2Nlc3MgKiAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICB0byAgICAgICAqICAKCQkJCQkgICAgKiAgICAgICAgICAgICAgICogICAgPD09ICAgKiAgICAgUnVuICAgICAgKiAgPD09CgkJCQkJICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCQkgICAgKiAgIERhdGEgQlNTICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoJIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCiAgICAgICAgIAkJCSAgICAgICAgICAgICogICBTZWN0aW9ucyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKMHgwMDAwMDAwMCAgICAgICAgIAkJCSAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCgpOb3cgaXQgaXMgZWFzeSB0byBzZWUgdGhhdCBvbiBJbnRlbCBpdCBpcyBxdWl0ZSBlYXN5IHRvIHJlY29nbmlzZSBhIGtlcm5lbCBhZGRyZXNzIAphcyBiZWluZyBvbmUgZ3JlYXRlciB0aGFuIHVzZXIgc3BhY2UgaGltZW0gKCBpbiB0aGlzIGNhc2UgMHhDMDAwMDAwMCkuCiYgYWRkcmVzc2VzIG9mIGxlc3MgdGhhbiB0aGlzIGFyZSB0aGUgb25lcyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHByb2dyYW0gb24gdGhpcwpwcm9jZXNzb3IgKCBpZiBhbiBzbXAgYm94ICkuCklmIHVzaW5nIHRoZSB2aXJ0dWFsIG1hY2hpbmUgKCBWTSApIGFzIGEgZGVidWdnZXIgaXQgaXMgcXVpdGUgZGlmZmljdWx0IHRvCmtub3cgd2hpY2ggdXNlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgdGhlIGFkZHJlc3Mgc3BhY2UgeW91IGFyZSBsb29raW5nIGF0CmNvdWxkIGJlIGZyb20gYW55IHByb2Nlc3MgaW4gdGhlIHJ1biBxdWV1ZS4KClRoZSBsaW1pdGF0aW9uIG9mIEludGVscyBhZGRyZXNzaW5nIHRlY2huaXF1ZSBpcyB0aGF0IHRoZSBsaW51eAprZXJuZWwgdXNlcyBhIHZlcnkgc2ltcGxlIHJlYWwgYWRkcmVzcyB0byB2aXJ0dWFsIGFkZHJlc3NpbmcgdGVjaG5pcXVlCm9mIFJlYWwgQWRkcmVzcz1WaXJ0dWFsIEFkZHJlc3MtVXNlciBTcGFjZSBIaW1lbS4KVGhpcyBtZWFucyB0aGF0IG9uIEludGVsIHRoZSBrZXJuZWwgbGludXggY2FuIHR5cGljYWxseSBvbmx5IGFkZHJlc3MKSGltZW09MHhGRkZGRkZGRi0weEMwMDAwMDAwPTFHQiAmIHRoaXMgaXMgYWxsIHRoZSBSQU0gdGhlc2UgbWFjaGluZXMKY2FuIHR5cGljYWxseSB1c2UuClRoZXkgY2FuIGxvd2VyIFVzZXIgSGltZW0gdG8gMkdCIG9yIGxvd2VyICYgdGh1cyBiZQphYmxlIHRvIHVzZSAyR0Igb2YgUkFNIGhvd2V2ZXIgdGhpcyBzaHJpbmtzIHRoZSBtYXhpbXVtIHNpemUKb2YgVXNlciBTcGFjZSBmcm9tIDNHQiB0byAyR0IgdGhleSBoYXZlIGEgbm8gd2luIGxpbWl0IG9mIDRHQiB1bmxlc3MKdGhleSBnbyB0byA2NCBCaXQuCgoKT24gMzkwIG91ciBsaW1pdGF0aW9ucyAmIHN0cmVuZ3RocyBtYWtlIHVzIHNsaWdodGx5IGRpZmZlcmVudC4KRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgYXJlIG9ubHkgYWxsb3dlZCB1c2UgMzEgYml0cyAoMkdCKQpvZiBvdXIgMzIgYml0IGFkZHJlc3NlcywgaG93ZXZlciwgd2UgdXNlIGVudGlyZWx5IHNlcGFyYXRlIGFkZHJlc3MgCnNwYWNlcyBmb3IgdGhlIHVzZXIgJiBrZXJuZWwuCgpUaGlzIG1lYW5zIHdlIGNhbiBzdXBwb3J0IDJHQiBvZiBub24gRXh0ZW5kZWQgUkFNIG9uIHMvMzkwLCAmIG1vcmUKd2l0aCB0aGUgRXh0ZW5kZWQgbWVtb3J5IG1hbmFnZW1lbnQgc3dhcCBkZXZpY2UgJiAKY3VycmVudGx5IDRUQiBvZiBwaHlzaWNhbCBtZW1vcnkgY3VycmVudGx5IG9uIHovQXJjaGl0ZWN0dXJlLgoKCkFkZHJlc3MgU3BhY2VzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpPdXIgYWRkcmVzc2luZyBzY2hlbWUgaXMgYXMgZm9sbG93cwoKCkhpbWVtIDB4N2ZmZmZmZmYgMkdCIG9uIHMvMzkwICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKY3VycmVudGx5IDB4M2ZmZmZmZmZmZmYgKDJeNDIpLTEgKiAgVXNlciBTdGFjayAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgpvbiB6L0FyY2hpdGVjdHVyZS4JCSAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICAgICAgICAgICAqCgkJICAgICAgICAgICAgICAgICAqICBTaGFyZWQgTGlicyAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICogIAoJCQkgICAgICAgICAqICAgICAgICAgICAgICAgKiAgICAgICAgICAqICAgIEtlcm5lbCAgICAqICAKCQkgICAgICAgICAgICAgICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkgICAgICAgICAgICAgICAgICogICBEYXRhIEJTUyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICBUZXh0ICAgICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAJCQkgKiAgIFNlY3Rpb25zICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgoweDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCgpUaGlzIGFsc28gbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGxvb2sgYXQgdGhlIFBTVyBwcm9ibGVtIHN0YXRlIGJpdApvciB0aGUgYWRkcmVzc2luZyBtb2RlIHRvIGRlY2lkZSB3aGV0aGVyIHdlIGFyZSBsb29raW5nIGF0CnVzZXIgb3Iga2VybmVsIHNwYWNlLgoKVmlydHVhbCBBZGRyZXNzZXMgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpBIHZpcnR1YWwgYWRkcmVzcyBvbiBzLzM5MCBpcyBtYWRlIHVwIG9mIDMgcGFydHMKVGhlIFNYICggc2VnbWVudCBpbmRleCwgcm91Z2hseSBjb3JyZXNwb25kaW5nIHRvIHRoZSBQR0QgJiBQTUQgaW4gbGludXggdGVybWlub2xvZ3kgKSAKYmVpbmcgYml0cyAxLTExLgpUaGUgUFggKCBwYWdlIGluZGV4LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYWdlIHRhYmxlIGVudHJ5IChwdGUpIGluIGxpbnV4IHRlcm1pbm9sb2d5ICkKYmVpbmcgYml0cyAxMi0xOS4gClRoZSByZW1haW5pbmcgYml0cyBCWCAodGhlIGJ5dGUgaW5kZXggYXJlIHRoZSBvZmZzZXQgaW4gdGhlIHBhZ2UgKQppLmUuIGJpdHMgMjAgdG8gMzEuCgpPbiB6L0FyY2hpdGVjdHVyZSBpbiBsaW51eCB3ZSBjdXJyZW50bHkgbWFrZSB1cCBhbiBhZGRyZXNzIGZyb20gNCBwYXJ0cy4KVGhlIHJlZ2lvbiBpbmRleCBiaXRzIChSWCkgMC0zMiB3ZSBjdXJyZW50bHkgdXNlIGJpdHMgMjItMzIKVGhlIHNlZ21lbnQgaW5kZXggKFNYKSBiZWluZyBiaXRzIDMzLTQzClRoZSBwYWdlIGluZGV4IChQWCkgYmVpbmcgYml0cyAgNDQtNTEKVGhlIGJ5dGUgaW5kZXggKEJYKSBiZWluZyBiaXRzICA1Mi02MwoKTm90ZXM6CjEpIHMvMzkwIGhhcyBubyBQTUQgc28gdGhlIFBNRCBpcyByZWFsbHkgdGhlIFBHRCBhbHNvLgpBIGxvdCBvZiB0aGlzIHN0dWZmIGlzIGRlZmluZWQgaW4gcGd0YWJsZS5oLgoKMikgQWxzbyBzZWVpbmcgYXMgcy8zOTAncyBwYWdlIGluZGV4ZXMgYXJlIG9ubHkgMWsgIGluIHNpemUgCihiaXRzIDEyLTE5IHggNCBieXRlcyBwZXIgcHRlICkgd2UgdXNlIDEgKCBwYWdlIDRrICkKdG8gbWFrZSB0aGUgYmVzdCB1c2Ugb2YgbWVtb3J5IGJ5IHVwZGF0aW5nIDQgc2VnbWVudCBpbmRpY2VzIAplbnRyaWVzIGVhY2ggdGltZSB3ZSBtZXNzIHdpdGggYSBQTUQgJiB1c2Ugb2Zmc2V0cyAKMCwxMDI0LDIwNDggJiAzMDcyIGluIHRoaXMgcGFnZSBhcyBmb3Igb3VyIHNlZ21lbnQgaW5kZXhlcy4KT24gei9BcmNoaXRlY3R1cmUgb3VyIHBhZ2UgaW5kZXhlcyBhcmUgbm93IDJrIGluIHNpemUKKCBiaXRzIDEyLTE5IHggOCBieXRlcyBwZXIgcHRlICkgd2UgZG8gYSBzaW1pbGFyIHRyaWNrCmJ1dCBvbmx5IG1lc3Mgd2l0aCAyIHNlZ21lbnQgaW5kaWNlcyBlYWNoIHRpbWUgd2UgbWVzcyB3aXRoCmEgUE1ELgoKMykgQXMgei9BcmNoaXRlY3R1cmUgc3VwcG9ydHMgdXAgdG8gYSBtYXNzaXZlIDUtbGV2ZWwgcGFnZSB0YWJsZSBsb29rdXAgd2UKY2FuIG9ubHkgdXNlIDMgY3VycmVudGx5IG9uIExpbnV4ICggYXMgdGhpcyBpcyBhbGwgdGhlIGdlbmVyaWMga2VybmVsCmN1cnJlbnRseSBzdXBwb3J0cyApIGhvd2V2ZXIgdGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVyZQp0aGlzIGFsbG93cyB1cyB0byBhY2Nlc3MgKCBhY2NvcmRpbmcgdG8gbXkgc3VtcyApCjRUQiBvZiB2aXJ0dWFsIHN0b3JhZ2UgcGVyIHByb2Nlc3MgaS5lLgo0MDk2KjUxMihQVEVTKSoxMDI0KFBNRFMpKjIwNDgoUEdEKSA9IDQzOTgwNDY1MTExMDQgYnl0ZXMsCmVub3VnaCBmb3IgYW5vdGhlciAyIG9yIDMgb2YgeWVhcnMgSSB0aGluayA6LSkuCnRvIGRvIHRoaXMgd2UgdXNlIGEgcmVnaW9uLXRoaXJkLXRhYmxlIGRlc2lnbmF0aW9uIHR5cGUgaW4Kb3VyIGFkZHJlc3Mgc3BhY2UgY29udHJvbCByZWdpc3RlcnMuCiAKClRoZSBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBLZXJuZWwgVGFzayBTdHJ1Y3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpFYWNoIHByb2Nlc3MvdGhyZWFkIHVuZGVyIExpbnV4IGZvciBTMzkwIGhhcyBpdHMgb3duIGtlcm5lbCB0YXNrX3N0cnVjdApkZWZpbmVkIGluIGxpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaApUaGUgUzM5MCBvbiBpbml0aWFsaXNhdGlvbiAmIHJlc3VtaW5nIG9mIGEgcHJvY2VzcyBvbiBhIGNwdSBzZXRzCnRoZSBfX0xDX0tFUk5FTF9TVEFDSyB2YXJpYWJsZSBpbiB0aGUgc3BhcmUgcHJlZml4IGFyZWEgZm9yIHRoaXMgY3B1Cih3aGljaCB3ZSB1c2UgZm9yIHBlci1wcm9jZXNzb3IgZ2xvYmFscykuCgpUaGUga2VybmVsIHN0YWNrIHBvaW50ZXIgaXMgaW50aW1hdGVseSB0aWVkIHdpdGggdGhlIHRhc2sgc3RydWN0dXJlIGZvcgplYWNoIHByb2Nlc3NvciBhcyBmb2xsb3dzLgoKICAgICAgICAgICAgICAgICAgICAgIHMvMzkwCiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAqICAxIHBhZ2Uga2VybmVsIHN0YWNrICoKCSAgICAqICAgICAgICAoIDRLICkgICAgICAgICoKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogICAxIHBhZ2UgdGFza19zdHJ1Y3QgKiAgICAgICAgCiAgICAgICAgICAgICogICAgICAgICggNEsgKSAgICAgICAgKgo4SyBhbGlnbmVkICAqKioqKioqKioqKioqKioqKioqKioqKiogCgogICAgICAgICAgICAgICAgIHovQXJjaGl0ZWN0dXJlCiAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAqICAyIHBhZ2Uga2VybmVsIHN0YWNrICoKCSAgICAqICAgICAgICAoIDhLICkgICAgICAgICoKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogIDIgcGFnZSB0YXNrX3N0cnVjdCAgKiAgICAgICAgCiAgICAgICAgICAgICogICAgICAgICggOEsgKSAgICAgICAgKgoxNksgYWxpZ25lZCAqKioqKioqKioqKioqKioqKioqKioqKiogCgpXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRlZGljYXRlIGFueSByZWdpc3RlciBvciBnbG9iYWwgdmFyaWFibGUKdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgcnVubmluZyBwcm9jZXNzICYgY2FuIHJldHJpZXZlIGl0IHdpdGggdGhlIGZvbGxvd2luZwp2ZXJ5IHNpbXBsZSBjb25zdHJ1Y3QgZm9yIHMvMzkwICYgb25lIHZlcnkgc2ltaWxhciBmb3Igei9BcmNoaXRlY3R1cmUuCgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnQ7CiAgICAgICAgX19hc21fXygibGhpICAgJTAsLTgxOTJcblx0IgogICAgICAgICAgICAgICAgIm5yICAgICUwLDE1IgogICAgICAgICAgICAgICAgOiAiPXIiIChjdXJyZW50KSApOwogICAgICAgIHJldHVybiBjdXJyZW50Owp9CgppLmUuIGp1c3QgYW5kaW5nIHRoZSBjdXJyZW50IGtlcm5lbCBzdGFjayBwb2ludGVyIHdpdGggdGhlIG1hc2sgLTgxOTIuClRoYW5rZnVsbHkgYmVjYXVzZSBMaW51eCBkb2Vzbid0IGhhdmUgc3VwcG9ydCBmb3IgbmVzdGVkIElPIGludGVycnVwdHMKJiBvdXIgZGV2aWNlcyBoYXZlIGxhcmdlIGJ1ZmZlcnMgY2FuIHN1cnZpdmUgaW50ZXJydXB0cyBiZWluZyBzaHV0IGZvciAKc2hvcnQgYW1vdW50cyBvZiB0aW1lIHdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSBzdGFjayBmb3IgaW50ZXJydXB0cy4KCgoKClJlZ2lzdGVyIFVzYWdlICYgU3RhY2tmcmFtZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KT3ZlcnZpZXc6Ci0tLS0tLS0tLQpUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2NjIHByb2R1Y2VzIGF0IHRoZSB0b3AgJiB0aGUgYm90dG9tIG9mCmVhY2ggZnVuY3Rpb24uIEl0IHVzdWFsbHkgaXMgZmFpcmx5IGNvbnNpc3RlbnQgJiBzaW1pbGFyIGZyb20gCmZ1bmN0aW9uIHRvIGZ1bmN0aW9uICYgaWYgeW91IGtub3cgaXRzIGxheW91dCB5b3UgY2FuIHByb2JhYmx5Cm1ha2Ugc29tZSBoZWFkd2F5IGluIGZpbmRpbmcgdGhlIHVsdGltYXRlIGNhdXNlIG9mIGEgcHJvYmxlbQphZnRlciBhIGNyYXNoIHdpdGhvdXQgYSBzb3VyY2UgbGV2ZWwgZGVidWdnZXIuCgpOb3RlOiBUbyBmb2xsb3cgc3RhY2tmcmFtZXMgcmVxdWlyZXMgYSBrbm93bGVkZ2Ugb2YgQyBvciBQYXNjYWwgJgpsaW1pdGVkIGtub3dsZWRnZSBvZiBvbmUgYXNzZW1ibHkgbGFuZ3VhZ2UuCgpJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZQpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dHMgYXMgdGhlIHovQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dCBkaWRuJ3QgaGF2ZQp0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbGlua2FnZSBmb3JtYXRzLgoKR2xvc3Nhcnk6Ci0tLS0tLS0tLQphbGxvY2E6ClRoaXMgaXMgYSBidWlsdCBpbiBjb21waWxlciBmdW5jdGlvbiBmb3IgcnVudGltZSBhbGxvY2F0aW9uCm9mIGV4dHJhIHNwYWNlIG9uIHRoZSBjYWxsZXJzIHN0YWNrIHdoaWNoIGlzIG9idmlvdXNseSBmcmVlZAp1cCBvbiBmdW5jdGlvbiBleGl0ICggZS5nLiB0aGUgY2FsbGVyIG1heSBjaG9vc2UgdG8gYWxsb2NhdGUgbm90aGluZwpvZiBhIGJ1ZmZlciBvZiA0ayBpZiByZXF1aXJlZCBmb3IgdGVtcG9yYXJ5IHB1cnBvc2VzICksIGl0IGdlbmVyYXRlcyAKdmVyeSBlZmZpY2llbnQgY29kZSAoIGEgZmV3IGN5Y2xlcyAgKSB3aGVuIGNvbXBhcmVkIHRvIGFsdGVybmF0aXZlcyAKbGlrZSBtYWxsb2MuCgphdXRvbWF0aWNzOiBUaGVzZSBhcmUgbG9jYWwgdmFyaWFibGVzIG9uIHRoZSBzdGFjaywKaS5lIHRoZXkgYXJlbid0IGluIHJlZ2lzdGVycyAmIHRoZXkgYXJlbid0IHN0YXRpYy4KCmJhY2stY2hhaW46ClRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBzdGFjayBwb2ludGVyIGJlZm9yZSBlbnRlcmluZyBhCmZyYW1lZCBmdW5jdGlvbnMgKCBzZWUgZnJhbWVsZXNzIGZ1bmN0aW9uICkgcHJvbG9ndWUgZ290IGJ5IApkZXJlZmVyZW5jaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIsCiBpLmUuIGdvdCBieSBhY2Nlc3NpbmcgdGhlIDMyIGJpdCB2YWx1ZSBhdCB0aGUgc3RhY2sgcG9pbnRlcnMKY3VycmVudCBsb2NhdGlvbi4KCmJhc2UtcG9pbnRlcjoKVGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJhY2sgb2YgdGhlIGxpdGVyYWwgcG9vbCB3aGljaAppcyBhbiBhcmVhIGp1c3QgYmVoaW5kIGVhY2ggcHJvY2VkdXJlIHVzZWQgdG8gc3RvcmUgY29uc3RhbnRzCmluIGVhY2ggZnVuY3Rpb24uCgpjYWxsLWNsb2JiZXJlZDogVGhlIGNhbGxlciBwcm9iYWJseSBuZWVkcyB0byBzYXZlIHRoZXNlIHJlZ2lzdGVycyBpZiB0aGVyZSAKaXMgc29tZXRoaW5nIG9mIHZhbHVlIGluIHRoZW0sIG9uIHRoZSBzdGFjayBvciBlbHNld2hlcmUgYmVmb3JlIG1ha2luZyBhIApjYWxsIHRvIGFub3RoZXIgcHJvY2VkdXJlIHNvIHRoYXQgaXQgY2FuIHJlc3RvcmUgaXQgbGF0ZXIuCgplcGlsb2d1ZToKVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB0byByZXR1cm4gdG8gdGhlIGNhbGxlci4KCmZyYW1lbGVzcy1mdW5jdGlvbgpBIGZyYW1lbGVzcyBmdW5jdGlvbiBpbiBMaW51eCBmb3IgczM5MCAmIHovQXJjaGl0ZWN0dXJlIGlzIG9uZSB3aGljaCBkb2Vzbid0IApuZWVkIG1vcmUgdGhhbiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhICggOTYgYnl0ZXMgb24gcy8zOTAsIDE2MCBvbiB6L0FyY2hpdGVjdHVyZSApCmdpdmVuIHRvIGl0IGJ5IHRoZSBjYWxsZXIuCkEgZnJhbWVsZXNzIGZ1bmN0aW9uIG5ldmVyOgoxKSBTZXRzIHVwIGEgYmFjayBjaGFpbi4KMikgQ2FsbHMgYWxsb2NhLgozKSBDYWxscyBvdGhlciBub3JtYWwgZnVuY3Rpb25zCjQpIEhhcyBhdXRvbWF0aWNzLgoKR09ULXBvaW50ZXI6ClRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwtb2Zmc2V0LXRhYmxlIGluIEVMRgooIEV4ZWN1dGFibGUgTGlua2FibGUgRm9ybWF0LCBMaW51eCdlcyBtb3N0IGNvbW1vbiBleGVjdXRhYmxlIGZvcm1hdCApLAphbGwgZ2xvYmFscyAmIHNoYXJlZCBsaWJyYXJ5IG9iamVjdHMgYXJlIGZvdW5kIHVzaW5nIHRoaXMgcG9pbnRlci4KCmxhenktYmluZGluZwpFTEYgc2hhcmVkIGxpYnJhcmllcyBhcmUgdHlwaWNhbGx5IG9ubHkgbG9hZGVkIHdoZW4gcm91dGluZXMgaW4gdGhlIHNoYXJlZApsaWJyYXJ5IGFyZSBhY3R1YWxseSBmaXJzdCBjYWxsZWQgYXQgcnVudGltZS4gVGhpcyBpcyBsYXp5IGJpbmRpbmcuCgpwcm9jZWR1cmUtbGlua2FnZS10YWJsZQpUaGlzIGlzIGEgdGFibGUgZm91bmQgZnJvbSB0aGUgR09UIHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHJvdXRpbmVzCmluIG90aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2hpY2ggY2FuJ3QgYmUgY2FsbGVkIHRvIGJ5IGVhc2llciBtZWFucy4KCnByb2xvZ3VlOgpUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHRvIHNldCB1cCB0aGUgc3RhY2sgZnJhbWUuCgpvdXRnb2luZy1hcmdzOgpUaGlzIGlzIGV4dHJhIGFyZWEgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpZiB0aGUKcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxlZSdzIGNhbm5vdCBhbGwgYmUgcHV0IGluIHJlZ2lzdGVycywgdGhlIHNhbWUKYXJlYSBjYW4gYmUgcmV1c2VkIGJ5IGVhY2ggZnVuY3Rpb24gdGhlIGNhbGxlciBjYWxscy4KCnJvdXRpbmUtZGVzY3JpcHRvcjoKQSBDT0ZGICBleGVjdXRhYmxlIGZvcm1hdCBiYXNlZCBjb25jZXB0IG9mIGEgcHJvY2VkdXJlIHJlZmVyZW5jZSAKYWN0dWFsbHkgYmVpbmcgOCBieXRlcyBvciBtb3JlIGFzIG9wcG9zZWQgdG8gYSBzaW1wbGUgcG9pbnRlciB0byB0aGUgcm91dGluZS4KVGhpcyBpcyB0eXBpY2FsbHkgZGVmaW5lZCBhcyBmb2xsb3dzClJvdXRpbmUgRGVzY3JpcHRvciBvZmZzZXQgMD1Qb2ludGVyIHRvIEZ1bmN0aW9uClJvdXRpbmUgRGVzY3JpcHRvciBvZmZzZXQgND1Qb2ludGVyIHRvIFRhYmxlIG9mIENvbnRlbnRzClRoZSB0YWJsZSBvZiBjb250ZW50cy9UT0MgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGEgR09UIHBvaW50ZXIuCiYgaXQgbWVhbnMgdGhhdCBzaGFyZWQgbGlicmFyaWVzIGV0Yy4gY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwKZW52aXJvbm1lbnRzIGVhY2ggd2l0aCB0aGVpciBvd24gVE9DLgoKIApzdGF0aWMtY2hhaW46IFRoaXMgaXMgdXNlZCBpbiBuZXN0ZWQgZnVuY3Rpb25zIGEgY29uY2VwdCBhZG9wdGVkIGZyb20gcGFzY2FsIApieSBnY2Mgbm90IHVzZWQgaW4gYW5zaSBDIG9yIEMrKyAoIGFsdGhvdWdoIHF1aXRlIHVzZWZ1bCApLCBiYXNpY2FsbHkgaXQKaXMgYSBwb2ludGVyIHVzZWQgdG8gcmVmZXJlbmNlIGxvY2FsIHZhcmlhYmxlcyBvZiBlbmNsb3NpbmcgZnVuY3Rpb25zLgpZb3UgbWlnaHQgY29tZSBhY3Jvc3MgdGhpcyBzdHVmZiBvbmNlIG9yIHR3aWNlIGluIHlvdXIgbGlmZXRpbWUuCgplLmcuClRoZSBmdW5jdGlvbiBiZWxvdyBzaG91bGQgcmV0dXJuIDExIHRob3VnaCBnY2MgbWF5IGdldCB1cHNldCAmIHRvc3Mgd2FybmluZ3MgCmFib3V0IHVudXNlZCB2YXJpYWJsZXMuCmludCBGdW5jdGlvbkEoaW50IGEpCnsKCWludCBiOwoJRnVuY3Rpb25DKGludCBjKQoJewoJCWI9YysxOwoJfQoJRnVuY3Rpb25DKDEwKTsKCXJldHVybihiKTsKfQoKCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgUmVnaXN0ZXIgdXNhZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpyMCAgICAgICB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjEJIHVzZWQgYnkgc3lzY2FsbHMvYXNzZW1ibHkgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyMiAgICAgICBhcmd1bWVudCAwIC8gcmV0dXJuIHZhbHVlIDAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjMgICAgICAgYXJndW1lbnQgMSAvIHJldHVybiB2YWx1ZSAxIChpZiBsb25nIGxvbmcpIGNhbGwtY2xvYmJlcmVkCnI0ICAgICAgIGFyZ3VtZW50IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyNSAgICAgICBhcmd1bWVudCAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjYJIGFyZ3VtZW50IDQJCQkJICAgIHNhdmVkCnI3ICAgICAgIHBvaW50ZXItdG8gYXJndW1lbnRzIDUgdG8gLi4uICAgICAgICAgICAgICBzYXZlZCAgICAgIApyOCAgICAgICB0aGlzICYgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjkgICAgICAgdGhpcyAmIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnIxMCAgICAgIHN0YXRpYy1jaGFpbiAoIGlmIG5lc3RlZCBmdW5jdGlvbiApICAgICAgICBzYXZlZApyMTEgICAgICBmcmFtZS1wb2ludGVyICggaWYgZnVuY3Rpb24gdXNlZCBhbGxvY2EgKSAgc2F2ZWQKcjEyICAgICAgZ290LXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnIxMyAgICAgIGJhc2UtcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyMTQgICAgICByZXR1cm4tYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjE1ICAgICAgc3RhY2stcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCgpmMCAgICAgICBhcmd1bWVudCAwIC8gcmV0dXJuIHZhbHVlICggZmxvYXQvZG91YmxlICkgY2FsbC1jbG9iYmVyZWQKZjIgICAgICAgYXJndW1lbnQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCmY0ICAgICAgIHovQXJjaGl0ZWN0dXJlIGFyZ3VtZW50IDIgICAgICAgICAgICAgICAgICBzYXZlZApmNiAgICAgICB6L0FyY2hpdGVjdHVyZSBhcmd1bWVudCAzICAgICAgICAgICAgICAgICAgc2F2ZWQKVGhlIHJlbWFpbmluZyBmbG9hdGluZyBwb2ludHMKZjEsZjMsZjUgZjctZjE1IGFyZSBjYWxsLWNsb2JiZXJlZC4KCk5vdGVzOgotLS0tLS0KMSkgVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdGhhdCByZWdpc3RlcnMgd2hpY2ggYXJlIHVzZWQKYnkgdGhlIGNhbGxlZSBhcmUgc2F2ZWQsIGUuZy4gdGhlIGNvbXBpbGVyIGlzIHBlcmZlY3RseQpjYXBhYmxlIG9mIHVzaW5nIHIxMSBmb3IgcHVycG9zZXMgb3RoZXIgdGhhbiBhIGZyYW1lIGEKZnJhbWUgcG9pbnRlciBpZiBhIGZyYW1lIHBvaW50ZXIgaXMgbm90IG5lZWRlZC4KMikgSW4gZnVuY3Rpb25zIHdpdGggdmFyaWFibGUgYXJndW1lbnRzIGUuZy4gcHJpbnRmIHRoZSBjYWxsaW5nIHByb2NlZHVyZSAKaXMgaWRlbnRpY2FsIHRvIG9uZSB3aXRob3V0IHZhcmlhYmxlIGFyZ3VtZW50cyAmIHRoZSBzYW1lIG51bWJlciBvZiAKcGFyYW1ldGVycy4gSG93ZXZlciwgdGhlIHByb2xvZ3VlIG9mIHRoaXMgZnVuY3Rpb24gaXMgc29tZXdoYXQgbW9yZQpoYWlyeSBvd2luZyB0byBpdCBoYXZpbmcgdG8gbW92ZSB0aGVzZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdGFjayB0bwpnZXQgdmFfc3RhcnQsIHZhX2FyZyAmIHZhX2VuZCB0byB3b3JrLgozKSBBY2Nlc3MgcmVnaXN0ZXJzIGFyZSBjdXJyZW50bHkgdW51c2VkIGJ5IGdjYyBidXQgYXJlIHVzZWQgaW4KdGhlIGtlcm5lbC4gUG9zc2liaWxpdGllcyBleGlzdCB0byB1c2UgdGhlbSBhdCB0aGUgbW9tZW50IGZvcgp0ZW1wb3Jhcnkgc3RvcmFnZSBidXQgaXQgaXNuJ3QgcmVjb21tZW5kZWQuCjQpIE9ubHkgNCBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvcgpwYXJhbWV0ZXIgcGFzc2luZyBhcyBvbGRlciBtYWNoaW5lcyBzdWNoIGFzIEczIG9ubHkgaGF2ZSBvbmx5IDQKJiBpdCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgY29tcGF0aWJsZSB3aXRoIG90aGVyIGNvbXBpbGVycy4KSG93ZXZlciB3aXRoIElFRUUgZmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uIHVuZGVyIGxpbnV4IG9uIHRoZQpvbGRlciBtYWNoaW5lcyB5b3UgYXJlIGZyZWUgdG8gdXNlIHRoZSBvdGhlciAxMi4KNSkgQSBsb25nIGxvbmcgb3IgZG91YmxlIHBhcmFtZXRlciBjYW5ub3QgYmUgaGF2ZSB0aGUgCmZpcnN0IDQgYnl0ZXMgaW4gYSByZWdpc3RlciAmIHRoZSBzZWNvbmQgZm91ciBieXRlcyBpbiB0aGUgCm91dGdvaW5nIGFyZ3MgYXJlYS4gSXQgbXVzdCBiZSBwdXJlbHkgaW4gdGhlIG91dGdvaW5nIGFyZ3MKYXJlYSBpZiBjcm9zc2luZyB0aGlzIGJvdW5kYXJ5Lgo2KSBGbG9hdGluZyBwb2ludCBwYXJhbWV0ZXJzIGFyZSBtaXhlZCB3aXRoIG91dGdvaW5nIGFyZ3MKb24gdGhlIG91dGdvaW5nIGFyZ3MgYXJlYSBpbiB0aGUgb3JkZXIgdGhlIGFyZSBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycy4KNykgRmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIDIgJiAzIGFyZSBzYXZlZCBpbiB0aGUgb3V0Z29pbmcgYXJncyBhcmVhIGZvciAKei9BcmNoaXRlY3R1cmUKCgpTdGFjayBGcmFtZSBMYXlvdXQKLS0tLS0tLS0tLS0tLS0tLS0tCnMvMzkwICAgICB6L0FyY2hpdGVjdHVyZQowICAgICAgICAgMCAgICAgICAgICAgICBiYWNrIGNoYWluICggYSAwIGhlcmUgc2lnbmlmaWVzIGVuZCBvZiBiYWNrIGNoYWluICkKNCAgICAgICAgIDggICAgICAgICAgICAgZW9zICggZW5kIG9mIHN0YWNrLCBub3QgdXNlZCBvbiBMaW51eCBmb3IgUzM5MCB1c2VkIGluIG90aGVyIGxpbmthZ2UgZm9ybWF0cyApCjggICAgICAgICAxNiAgICAgICAgICAgIGdsdWUgdXNlZCBpbiBvdGhlciBzLzM5MCBsaW5rYWdlIGZvcm1hdHMgZm9yIHNhdmVkIHJvdXRpbmUgZGVzY3JpcHRvcnMgZXRjLgoxMiAgICAgICAgMjQgICAgICAgICAgICBnbHVlIHVzZWQgaW4gb3RoZXIgcy8zOTAgbGlua2FnZSBmb3JtYXRzIGZvciBzYXZlZCByb3V0aW5lIGRlc2NyaXB0b3JzIGV0Yy4KMTYgICAgICAgIDMyICAgICAgICAgICAgc2NyYXRjaCBhcmVhCjIwICAgICAgICA0MCAgICAgICAgICAgIHNjcmF0Y2ggYXJlYQoyNCAgICAgICAgNDggICAgICAgICAgICBzYXZlZCByNiBvZiBjYWxsZXIgZnVuY3Rpb24KMjggICAgICAgIDU2ICAgICAgICAgICAgc2F2ZWQgcjcgb2YgY2FsbGVyIGZ1bmN0aW9uCjMyICAgICAgICA2NCAgICAgICAgICAgIHNhdmVkIHI4IG9mIGNhbGxlciBmdW5jdGlvbgozNiAgICAgICAgNzIgICAgICAgICAgICBzYXZlZCByOSBvZiBjYWxsZXIgZnVuY3Rpb24KNDAgICAgICAgIDgwICAgICAgICAgICAgc2F2ZWQgcjEwIG9mIGNhbGxlciBmdW5jdGlvbgo0NCAgICAgICAgODggICAgICAgICAgICBzYXZlZCByMTEgb2YgY2FsbGVyIGZ1bmN0aW9uCjQ4ICAgICAgICA5NiAgICAgICAgICAgIHNhdmVkIHIxMiBvZiBjYWxsZXIgZnVuY3Rpb24KNTIgICAgICAgIDEwNCAgICAgICAgICAgc2F2ZWQgcjEzIG9mIGNhbGxlciBmdW5jdGlvbgo1NiAgICAgICAgMTEyICAgICAgICAgICBzYXZlZCByMTQgb2YgY2FsbGVyIGZ1bmN0aW9uCjYwICAgICAgICAxMjAgICAgICAgICAgIHNhdmVkIHIxNSBvZiBjYWxsZXIgZnVuY3Rpb24KNjQgICAgICAgIDEyOCAgICAgICAgICAgc2F2ZWQgZjQgb2YgY2FsbGVyIGZ1bmN0aW9uCjcyICAgICAgICAxMzIgICAgICAgICAgIHNhdmVkIGY2IG9mIGNhbGxlciBmdW5jdGlvbgo4MCAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQKOTYgICAgICAgIDE2MCAgICAgICAgICAgb3V0Z29pbmcgYXJncyBwYXNzZWQgZnJvbSBjYWxsZXIgdG8gY2FsbGVlCjk2K3ggICAgICAxNjAreCAgICAgICAgIHBvc3NpYmxlIHN0YWNrIGFsaWdubWVudCAoIDggYnl0ZXMgZGVzaXJhYmxlICkKOTYreCt5ICAgIDE2MCt4K3kgICAgICAgYWxsb2NhIHNwYWNlIG9mIGNhbGxlciAoIGlmIHVzZWQgKQo5Nit4K3kreiAgMTYwK3greSt6ICAgICBhdXRvbWF0aWNzIG9mIGNhbGxlciAoIGlmIHVzZWQgKQowICAgICAgICAgICAgICAgICAgICAgICBiYWNrLWNoYWluCgpBIHNhbXBsZSBwcm9ncmFtIHdpdGggY29tbWVudHMuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbW1lbnRzIG9uIHRoZSBmdW5jdGlvbiB0ZXN0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjEpIEl0IGRpZG4ndCBuZWVkIHRvIHNldCB1cCBhIHBvaW50ZXIgdG8gdGhlIGNvbnN0YW50IHBvb2wgZ3ByMTMgYXMgaXQgaXNuJ3QgdXNlZAooIDotKCApLgoyKSBUaGlzIGlzIGEgZnJhbWVsZXNzIGZ1bmN0aW9uICYgbm8gc3RhY2sgaXMgYm91Z2h0LgozKSBUaGUgY29tcGlsZXIgd2FzIGNsZXZlciBlbm91Z2ggdG8gcmVjb2duaXNlIHRoYXQgaXQgY291bGQgcmV0dXJuIHRoZQp2YWx1ZSBpbiByMiBhcyB3ZWxsIGFzIHVzZSBpdCBmb3IgdGhlIHBhc3NlZCBpbiBwYXJhbWV0ZXIgKCA6LSkgKS4KNCkgVGhlIGJhc3IgKCBicmFuY2ggcmVsYXRpdmUgJiBzYXZlICkgdHJpY2sgd29ya3MgYXMgZm9sbG93cyB0aGUgaW5zdHJ1Y3Rpb24gCmhhcyBhIHNwZWNpYWwgY2FzZSB3aXRoIHIwLHIwIHdpdGggc29tZSBpbnN0cnVjdGlvbiBvcGVyYW5kcyBpcyB1bmRlcnN0b29kIGFzIAp0aGUgbGl0ZXJhbCB2YWx1ZSAwLCBzb21lIHJpc2MgYXJjaGl0ZWN0dXJlcyBhbHNvIGRvIHRoaXMgKS4gU28gbm93CndlIGFyZSBicmFuY2hpbmcgdG8gdGhlIG5leHQgYWRkcmVzcyAmIHRoZSBhZGRyZXNzIG5ldyBwcm9ncmFtIGNvdW50ZXIgaXMKaW4gcjEzLHNvIG5vdyB3ZSBzdWJ0cmFjdCB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUgd2UgaGF2ZSBleGVjdXRlZAorIHRoZSBzaXplIG9mIHRoZSBsaXRlcmFsIHBvb2wgdG8gZ2V0IHRvIHRoZSB0b3Agb2YgdGhlIGxpdGVyYWwgcG9vbAowMDQwMDM3YyBpbnQgdGVzdChpbnQgYikKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIHByb2xvZ3VlIGJlbG93CiAgNDAwMzdjOgk5MCBkZSBmMCAzNCAJc3RtCSVyMTMsJXIxNCw1MiglcjE1KSAjIFNhdmUgcmVnaXN0ZXJzIHIxMyAmIHIxNAogIDQwMDM4MDoJMGQgZDAgICAgICAgCWJhc3IJJXIxMywlcjAgICAgICAgICAgICMgU2V0IHVwIHBvaW50ZXIgdG8gY29uc3RhbnQgcG9vbCB1c2luZwogIDQwMDM4MjoJYTcgZGEgZmYgZmEgCWFoaQklcjEzLC02ICAgICAgICAgICAgIyBiYXNyIHRyaWNrCglyZXR1cm4oNStiKTsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSHVnZSBtYWluIHByb2dyYW0KICA0MDAzODY6CWE3IDJhIDAwIDA1IAlhaGkJJXIyLDUgICAgICAgICAgICAgICMgYWRkIDUgdG8gcjIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGdW5jdGlvbiBlcGlsb2d1ZSBiZWxvdyAKICA0MDAzOGE6CTk4IGRlIGYwIDM0IAlsbQklcjEzLCVyMTQsNTIoJXIxNSkgIyByZXN0b3JlIHJlZ2lzdGVycyByMTMgJiAxNAogIDQwMDM4ZToJMDcgZmUgICAgICAgCWJyCSVyMTQgICAgICAgICAgICAgICAjIHJldHVybgp9CgpDb21tZW50cyBvbiB0aGUgZnVuY3Rpb24gbWFpbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoxKSBUaGUgY29tcGlsZXIgZGlkIHRoaXMgZnVuY3Rpb24gb3B0aW1hbGx5ICggOC0pICkKCkxpdGVyYWwgcG9vbCBmb3IgbWFpbi4KNDAwMzkwOglmZiBmZiBmZiBlYyAJLmxvbmcgMHhmZmZmZmZlYwptYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZ1bmN0aW9uIHByb2xvZ3VlIGJlbG93CiAgNDAwMzk0Ogk5MCBiZiBmMCAyYyAJc3RtCSVyMTEsJXIxNSw0NCglcjE1KSAjIFNhdmUgbmVjZXNzYXJ5IHJlZ2lzdGVycwogIDQwMDM5ODoJMTggMGYgICAgICAgCWxyCSVyMCwlcjE1ICAgICAgICAgICAjIGNvcHkgc3RhY2sgcG9pbnRlciB0byByMAogIDQwMDM5YToJYTcgZmEgZmYgYTAgCWFoaQklcjE1LC05NiAgICAgICAgICAgIyBNYWtlIGFyZWEgZm9yIGNhbGxlZSBzYXZpbmcgCiAgNDAwMzllOgkwZCBkMCAgICAgICAJYmFzcgklcjEzLCVyMCAgICAgICAgICAgIyBTZXQgdXAgcjEzIHRvIHBvaW50IHRvCiAgNDAwM2EwOglhNyBkYSBmZiBmMCAJYWhpCSVyMTMsLTE2ICAgICAgICAgICAjIGxpdGVyYWwgcG9vbAogIDQwMDNhNDoJNTAgMDAgZjAgMDAgCXN0CSVyMCwwKCVyMTUpICAgICAgICAjIFNhdmUgYmFja2NoYWluCgoJcmV0dXJuKHRlc3QoNSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWluIFByb2dyYW0gQmVsb3cKICA0MDAzYTg6CTU4IGUwIGQwIDAwIAlsCSVyMTQsMCglcjEzKSAgICAgICAjIGxvYWQgcmVsYXRpdmUgYWRkcmVzcyBvZiB0ZXN0IGZyb20KCQkJCQkJICAgICAgICAgICAjIGxpdGVyYWwgcG9vbAogIDQwMDNhYzoJYTcgMjggMDAgMDUgCWxoaQklcjIsNSAgICAgICAgICAgICAgIyBTZXQgZmlyc3QgcGFyYW1ldGVyIHRvIDUKICA0MDAzYjA6CTRkIGVlIGQwIDAwIAliYXMJJXIxNCwwKCVyMTQsJXIxMykgICMganVtcCB0byB0ZXN0IHNldHRpbmcgcjE0IGFzIHJldHVybgoJCQkJCQkJICAgIyBhZGRyZXNzIHVzaW5nIGJyYW5jaCAmIHNhdmUgaW5zdHJ1Y3Rpb24uCgoJCQkJCQkJICAgIyBGdW5jdGlvbiBFcGlsb2d1ZSBiZWxvdwogIDQwMDNiNDoJOTggYmYgZjAgOGMgCWxtCSVyMTEsJXIxNSwxNDAoJXIxNSkjIFJlc3RvcmUgbmVjZXNzYXJ5IHJlZ2lzdGVycy4KICA0MDAzYjg6CTA3IGZlICAgICAgIAlicgklcjE0ICAgICAgICAgICAgICAgIyByZXR1cm4gdG8gZG8gcHJvZ3JhbSBleGl0IAp9CgoKQ29tcGlsZXIgdXBkYXRlcwotLS0tLS0tLS0tLS0tLS0tCgptYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKewogIDQwMDRmYzoJOTAgN2YgZjAgMWMgICAgICAgCXN0bQklcjcsJXIxNSwyOCglcjE1KQogIDQwMDUwMDoJYTcgZDUgMDAgMDQgICAgICAgCWJyYXMJJXIxMyw0MDA1MDggPG1haW4rMHhjPgogIDQwMDUwNDoJMDAgNDAgMDQgZjQgICAgICAgCS5sb25nCTB4MDA0MDA0ZjQgCiAgIyBjb21waWxlciBub3cgcHV0cyBjb25zdGFudCBwb29sIGluIGNvZGUgdG8gc28gaXQgc2F2ZXMgYW4gaW5zdHJ1Y3Rpb24gCiAgNDAwNTA4OgkxOCAwZiAgICAgICAgICAgICAJbHIJJXIwLCVyMTUKICA0MDA1MGE6CWE3IGZhIGZmIGEwICAgICAgIAlhaGkJJXIxNSwtOTYKICA0MDA1MGU6CTUwIDAwIGYwIDAwICAgICAgIAlzdAklcjAsMCglcjE1KQoJcmV0dXJuKHRlc3QoNSkpOwogIDQwMDUxMjoJNTggMTAgZDAgMDAgICAgICAgCWwJJXIxLDAoJXIxMykKICA0MDA1MTY6CWE3IDI4IDAwIDA1ICAgICAgIAlsaGkJJXIyLDUKICA0MDA1MWE6CTBkIGUxICAgICAgICAgICAgIAliYXNyCSVyMTQsJXIxCiAgIyBjb21waWxlciBhZGRzIDEgZXh0cmEgaW5zdHJ1Y3Rpb24gdG8gZXBpbG9ndWUgdGhpcyBpcyBkb25lIHRvCiAgIyBhdm9pZCBwcm9jZXNzb3IgcGlwZWxpbmUgc3RhbGxzIG93aW5nIHRvIGRhdGEgZGVwZW5kZW5jaWVzIG9uIGc1ICYKICAjIGFib3ZlIGFzIHJlZ2lzdGVyIDE0IGluIHRoZSBvbGQgY29kZSB3YXMgbmVlZGVkIGRpcmVjdGx5IGFmdGVyIGJlaW5nIGxvYWRlZCAKICAjIGJ5IHRoZSBsbQklcjExLCVyMTUsMTQwKCVyMTUpIGZvciB0aGUgYnIgJTE0LgogIDQwMDUxYzoJNTggNDAgZjAgOTggICAgICAgCWwJJXI0LDE1MiglcjE1KQogIDQwMDUyMDoJOTggN2YgZjAgN2MgICAgICAgCWxtCSVyNywlcjE1LDEyNCglcjE1KQogIDQwMDUyNDoJMDcgZjQgICAgICAgICAgICAgCWJyCSVyNAp9CgoKSGFydG11dCAoIG91ciBjb21waWxlciBkZXZlbG9wZXIgKSBhbHNvIGhhcyBiZWVuIHRocmVhdGVuaW5nIHRvIHRha2Ugb3V0IHRoZQpzdGFjayBiYWNrY2hhaW4gaW4gb3B0aW1pc2VkIGNvZGUgYXMgdGhpcyBhbHNvIGNhdXNlcyBwaXBlbGluZSBzdGFsbHMsIHlvdQpoYXZlIGJlZW4gd2FybmVkLgoKNjQgYml0IHovQXJjaGl0ZWN0dXJlIGNvZGUgZGlzYXNzZW1ibHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCklmIHlvdSB1bmRlcnN0YW5kIHRoZSBzdHVmZiBhYm92ZSB5b3UnbGwgdW5kZXJzdGFuZCB0aGUgc3R1ZmYKYmVsb3cgdG9vIHNvIEknbGwgYXZvaWQgcmVwZWF0aW5nIG15c2VsZiAmIGp1c3Qgc2F5IHRoYXQgCnNvbWUgb2YgdGhlIGluc3RydWN0aW9ucyBoYXZlIGcncyBvbiB0aGUgZW5kIG9mIHRoZW0gdG8gaW5kaWNhdGUKdGhleSBhcmUgNjQgYml0ICYgdGhlIHN0YWNrIG9mZnNldHMgYXJlIGEgYmlnZ2VyLCAKdGhlIG9ubHkgb3RoZXIgZGlmZmVyZW5jZSB5b3UnbGwgZmluZCBiZXR3ZWVuIDMyICYgNjQgYml0IGlzIHRoYXQKd2Ugbm93IHVzZSBmNCAmIGY2IGZvciBmbG9hdGluZyBwb2ludCBhcmd1bWVudHMgb24gNjQgYml0LgowMDAwMDAwMDgwMDAwNWIwIDx0ZXN0PjoKaW50IHRlc3QoaW50IGIpCnsKCXJldHVybig1K2IpOwogICAgODAwMDA1YjA6CWE3IDJhIDAwIDA1ICAgICAgIAlhaGkJJXIyLDUKICAgIDgwMDAwNWI0OgliOSAxNCAwMCAyMiAgICAgICAJbGdmcgklcjIsJXIyICMgZG93bmNhc3QgdG8gaW50ZWdlcgogICAgODAwMDA1Yjg6CTA3IGZlICAgICAgICAgICAgIAlicgklcjE0CiAgICA4MDAwMDViYToJMDcgMDcgICAgICAgICAgICAgCWJjcgkwLCVyNwoKCn0KCjAwMDAwMDAwODAwMDA1YmMgPG1haW4+OgptYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKeyAKICAgIDgwMDAwNWJjOgllYiBiZiBmMCA1OCAwMCAyNCAJc3RtZwklcjExLCVyMTUsODgoJXIxNSkKICAgIDgwMDAwNWMyOgliOSAwNCAwMCAxZiAgICAgICAJbGdyCSVyMSwlcjE1CiAgICA4MDAwMDVjNjoJYTcgZmIgZmYgNjAgICAgICAgCWFnaGkJJXIxNSwtMTYwCiAgICA4MDAwMDVjYToJZTMgMTAgZjAgMDAgMDAgMjQgCXN0ZwklcjEsMCglcjE1KQoJcmV0dXJuKHRlc3QoNSkpOwogICAgODAwMDA1ZDA6CWE3IDI5IDAwIDA1ICAgICAgIAlsZ2hpCSVyMiw1CiAgICAjIGJyYXNsIGFsbG93cyBqdW1wcyA+IDY0ayAmIGlzIG92ZXJraWxsIGhlcmUgYnJhcyB3b3VsZCBkbyBmdW5lCiAgICA4MDAwMDVkNDoJYzAgZTUgZmYgZmYgZmYgZWUgCWJyYXNsCSVyMTQsODAwMDA1YjAgPHRlc3Q+IAogICAgODAwMDA1ZGE6CWUzIDQwIGYxIDEwIDAwIDA0IAlsZwklcjQsMjcyKCVyMTUpCiAgICA4MDAwMDVlMDoJZWIgYmYgZjAgZjggMDAgMDQgCWxtZwklcjExLCVyMTUsMjQ4KCVyMTUpCiAgICA4MDAwMDVlNjoJMDcgZjQgICAgICAgICAgICAgCWJyCSVyNAp9CgoKCkNvbXBpbGluZyBwcm9ncmFtcyBmb3IgZGVidWdnaW5nIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1nZHdhcmYtMiBub3cgd29ya3MgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhlIGRlZmF1bHQgZGVidWdnaW5nCmZvcm1hdCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBhcyBpdCBpcyBtb3JlIHJlbGlhYmxlIGZvciBkZWJ1Z2dpbmcKc2hhcmVkIGxpYnJhcmllcywgIG5vcm1hbCAtZyBkZWJ1Z2dpbmcgd29ya3MgbXVjaCBiZXR0ZXIgbm93ClRoYW5rcyB0byB0aGUgSUJNIGphdmEgY29tcGlsZXIgZGV2ZWxvcGVycyBidWcgcmVwb3J0cy4gCgpUaGlzIGlzIHR5cGljYWxseSBkb25lIGFkZGluZy9hcHBlbmRpbmcgdGhlIGZsYWdzIC1nIG9yIC1nZHdhcmYtMiB0byB0aGUgCkNGTEFHUyAmIExERkxBR1MgdmFyaWFibGVzIE1ha2VmaWxlIG9mIHRoZSBwcm9ncmFtIGNvbmNlcm5lZC4KCklmIHVzaW5nIGdkYiAmIHlvdSB3b3VsZCBsaWtlIGFjY3VyYXRlIGRpc3BsYXlzIG9mIHJlZ2lzdGVycyAmCiBzdGFjayB0cmFjZXMgY29tcGlsZSB3aXRob3V0IG9wdGltaXNhdGlvbiBpLmUgbWFrZSBzdXJlCnRoYXQgdGhlcmUgaXMgbm8gLU8yIG9yIHNpbWlsYXIgb24gdGhlIENGTEFHUyBsaW5lIG9mIHRoZSBNYWtlZmlsZSAmCnRoZSBlbWl0dGVkIGdjYyBjb21tYW5kcywgb2J2aW91c2x5IHRoaXMgd2lsbCBwcm9kdWNlIHdvcnNlIGNvZGUgCiggbm90IGFkdmlzYWJsZSBmb3Igc2hpcG1lbnQgKSBidXQgaXQgaXMgYW4gIGFpZCB0byB0aGUgZGVidWdnaW5nIHByb2Nlc3MuCgpUaGlzIGFpZHMgZGVidWdnaW5nIGJlY2F1c2UgdGhlIGNvbXBpbGVyIHdpbGwgY29weSBwYXJhbWV0ZXJzIHBhc3NlZCBpbgppbiByZWdpc3RlcnMgb250byB0aGUgc3RhY2sgc28gYmFja3RyYWNpbmcgJiBsb29raW5nIGF0IHBhc3NlZCBpbgpwYXJhbWV0ZXJzIHdpbGwgd29yaywgaG93ZXZlciBzb21lIGxhcmdlciBwcm9ncmFtcyB3aGljaCB1c2UgaW5saW5lIGZ1bmN0aW9ucwp3aWxsIG5vdCBjb21waWxlIHdpdGhvdXQgb3B0aW1pc2F0aW9uLgoKRGVidWdnaW5nIHdpdGggb3B0aW1pc2F0aW9uIGhhcyBzaW5jZSBtdWNoIGltcHJvdmVkIGFmdGVyIGZpeGluZwpzb21lIGJ1Z3MsIHBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyBnZGItNS4wIG9yIGxhdGVyIGRldmVsb3BlZCAKYWZ0ZXIgTm92JzIwMDAuCgpGaWd1cmluZyBvdXQgZ2NjIGNvbXBpbGUgZXJyb3JzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWYgeW91IGFyZSBnZXR0aW5nIGEgbG90IG9mIHN5bnRheCBlcnJvcnMgY29tcGlsaW5nIGEgcHJvZ3JhbSAmIHRoZSBwcm9ibGVtCmlzbid0IGJsYXRhbnRseSBvYnZpb3VzIGZyb20gdGhlIHNvdXJjZS4KSXQgb2Z0ZW4gaGVscHMgdG8ganVzdCBwcmVwcm9jZXNzIHRoZSBmaWxlLCB0aGlzIGlzIGRvbmUgd2l0aCB0aGUgLUUKb3B0aW9uIGluIGdjYy4KV2hhdCB0aGlzIGRvZXMgaXMgdGhhdCBpdCBydW5zIHRocm91Z2ggdGhlIHZlcnkgZmlyc3QgcGhhc2Ugb2YgY29tcGlsYXRpb24KKCBjb21waWxhdGlvbiBpbiBnY2MgaXMgZG9uZSBpbiBzZXZlcmFsIHN0YWdlcyAmIGdjYyBjYWxscyBtYW55IHByb2dyYW1zIHRvCmFjaGlldmUgaXRzIGVuZCByZXN1bHQgKSB3aXRoIHRoZSAtRSBvcHRpb24gZ2NjIGp1c3QgY2FsbHMgdGhlIGdjYyBwcmVwcm9jZXNzb3IgKGNwcCkuClRoZSBjIHByZXByb2Nlc3NvciBkb2VzIHRoZSBmb2xsb3dpbmcsIGl0IGpvaW5zIGFsbCB0aGUgZmlsZXMgI2luY2x1ZGVkIHRvZ2V0aGVyCnJlY3Vyc2l2ZWx5ICggI2luY2x1ZGUgZmlsZXMgY2FuICNpbmNsdWRlIG90aGVyIGZpbGVzICkgJiBhbHNvIHRoZSBjIGZpbGUgeW91IHdpc2ggdG8gY29tcGlsZS4KSXQgcHV0cyBhIGZ1bGx5IHF1YWxpZmllZCBwYXRoIG9mIHRoZSAjaW5jbHVkZWQgZmlsZXMgaW4gYSBjb21tZW50ICYgaXQKZG9lcyBtYWNybyBleHBhbnNpb24uClRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYmVjYXVzZQoxKSBZb3UgY2FuIGRvdWJsZSBjaGVjayB3aGV0aGVyIHRoZSBmaWxlcyB5b3UgZXhwZWN0IHRvIGJlIGluY2x1ZGVkIGFyZSB0aGUgb25lcwp0aGF0IGFyZSBiZWluZyBpbmNsdWRlZCAoIGUuZy4gZG91YmxlIGNoZWNrIHRoYXQgeW91IGFyZW4ndCBnb2luZyB0byB0aGUgaTM4NiBhc20gZGlyZWN0b3J5ICkuCjIpIENoZWNrIHRoYXQgbWFjcm8gZGVmaW5pdGlvbnMgYXJlbid0IGNsYXNoaW5nIHdpdGggdHlwZWRlZnMsCjMpIENoZWNrIHRoYXQgZGVmaW5pdGlvbnMgYXJlbid0IGJlaW5nIHVzZWQgYmVmb3JlIHRoZXkgYXJlIGJlaW5nIGluY2x1ZGVkLgo0KSBIZWxwcyBwdXQgdGhlIGxpbmUgZW1pdHRpbmcgdGhlIGVycm9yIHVuZGVyIHRoZSBtaWNyb3Njb3BlIGlmIGl0IGNvbnRhaW5zIG1hY3Jvcy4KCkZvciBjb252ZW5pZW5jZSB0aGUgTGludXgga2VybmVsJ3MgbWFrZWZpbGUgd2lsbCBkbyBwcmVwcm9jZXNzaW5nIGF1dG9tYXRpY2FsbHkgZm9yIHlvdQpieSBzdWZmaXhpbmcgdGhlIGZpbGUgeW91IHdhbnQgYnVpbHQgd2l0aCAuaSAoIGluc3RlYWQgb2YgLm8gKQoKZS5nLgpmcm9tIHRoZSBsaW51eCBkaXJlY3RvcnkgdHlwZQptYWtlIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmkKdGhpcyB3aWxsIGJ1aWxkCgpzMzkwLWdjYyAtRF9fS0VSTkVMX18gLUkvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIKLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfX1NNUF9fIC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlICAgLUUgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYwo+IGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmkgIAoKTm93IGxvb2sgYXQgc2lnbmFsLmkgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UuCgoKIyAxICIvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUvYXNtL3R5cGVzLmgiIDEKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90Owp0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKdHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OwoKSWYgaW5zdGVhZCB5b3UgYXJlIGdldHRpbmcgZXJyb3JzIGZ1cnRoZXIgZG93biBlLmcuCnVua25vd24gaW5zdHJ1Y3Rpb246MjUxNSAibW92ZS5sIiBvciBiZXR0ZXIgc3RpbGwgdW5rbm93biBpbnN0cnVjdGlvbjoyNTE1IAoiRml4bWUgbm90IGltcGxlbWVudGVkIHlldCwgY2FsbCBNYXJ0aW4iIHlvdSBhcmUgcHJvYmFibHkgYXJlIGF0dGVtcHRpbmcgdG8gY29tcGlsZSBzb21lIGNvZGUgCm1lYW50IGZvciBhbm90aGVyIGFyY2hpdGVjdHVyZSBvciBjb2RlIHRoYXQgaXMgc2ltcGx5IG5vdCBpbXBsZW1lbnRlZCwgd2l0aCBhIGZpeG1lIHN0YXRlbWVudApzdHVjayBpbnRvIHRoZSBpbmxpbmUgYXNzZW1ibHkgY29kZSBzbyB0aGF0IHRoZSBhdXRob3Igb2YgdGhlIGZpbGUgbm93IGtub3dzIGhlIGhhcyB3b3JrIHRvIGRvLgpUbyBsb29rIGF0IHRoZSBhc3NlbWJseSBlbWl0dGVkIGJ5IGdjYyBqdXN0IGJlZm9yZSBpdCBpcyBhYm91dCB0byBjYWxsIGdhcyAoIHRoZSBnbnUgYXNzZW1ibGVyICkKdXNlIHRoZSAtUyBvcHRpb24uCkFnYWluIGZvciB5b3VyIGNvbnZlbmllbmNlIHRoZSBMaW51eCBrZXJuZWwncyBNYWtlZmlsZSB3aWxsIGhvbGQgeW91ciBoYW5kICYKZG8gYWxsIHRoaXMgZG9ua2V5IHdvcmsgZm9yIHlvdSBhbHNvIGJ5IGJ1aWxkaW5nIHRoZSBmaWxlIHdpdGggdGhlIC5zIHN1ZmZpeC4KZS5nLgpmcm9tIHRoZSBMaW51eCBkaXJlY3RvcnkgdHlwZSAKbWFrZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5zIAoKczM5MC1nY2MgLURfX0tFUk5FTF9fIC1JL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCi1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX19TTVBfXyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgLVMgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyAKLW8gYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwucyAgCgoKVGhpcyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZSwgKCBwbGVhc2Ugbm90ZSB0aGUgY29uc3RhbnQgcG9vbCAmIHRoZSB1c2VmdWwgY29tbWVudHMKaW4gdGhlIHByb2xvZ3VlIHRvIGdpdmUgeW91IGEgaGFuZCBhdCBpbnRlcnByZXRpbmcgaXQgKS4KCi5MQzU0OgoJLnN0cmluZwkibWlzYWxpZ25lZCAoX191MTYgKikgaW4gX194Y2hnXG4iCi5MQzU3OgoJLnN0cmluZwkibWlzYWxpZ25lZCAoX191MzIgKikgaW4gX194Y2hnXG4iCi5MJFBHMTogIyBQb29sIHN5c19zaWdzdXNwZW5kCi5MQzE5MjoKCS5sb25nCS0yNjI0MDEKLkxDMTkzOgoJLmxvbmcJLTEKLkxDMTk0OgoJLmxvbmcJc2NoZWR1bGUtLkwkUEcxCi5MQzE5NToKCS5sb25nCWRvX3NpZ25hbC0uTCRQRzEKCS5hbGlnbiA0Ci5nbG9ibCBzeXNfc2lnc3VzcGVuZAoJLnR5cGUJIHN5c19zaWdzdXNwZW5kLEBmdW5jdGlvbgpzeXNfc2lnc3VzcGVuZDoKIwlsZWFmIGZ1bmN0aW9uICAgICAgICAgICAwCiMJYXV0b21hdGljcyAgICAgICAgICAgICAgMTYKIwlvdXRnb2luZyBhcmdzICAgICAgICAgICAwCiMJbmVlZCBmcmFtZSBwb2ludGVyICAgICAgMAojCWNhbGwgYWxsb2NhICAgICAgICAgICAgIDAKIwloYXMgdmFyYXJncyAgICAgICAgICAgICAwCiMJaW5jb21pbmcgYXJncyAoc3RhY2spICAgMAojCWZ1bmN0aW9uIGxlbmd0aCAgICAgICAgIDE2OAoJU1RNCTgsMTUsMzIoMTUpCglMUgkwLDE1CglBSEkJMTUsLTExMgoJQkFTUgkxMywwCi5MJENPMToJQUhJCTEzLC5MJFBHMS0uTCRDTzEKCVNUCTAsMCgxNSkKCUxSICAgIDgsMgoJTiAgICAgNSwuTEMxOTItLkwkUEcxKDEzKSAKCkFkZGluZyAtZyB0byB0aGUgYWJvdmUgb3V0cHV0IG1ha2VzIHRoZSBvdXRwdXQgZXZlbiBtb3JlIHVzZWZ1bAplLmcuIHR5cGluZwptYWtlIENDOj0iczM5MC1nY2MgLWciIGtlcm5lbC9zY2hlZC5zCgp3aGljaCBjb21waWxlcy4KczM5MC1nY2MgLWcgLURfX0tFUk5FTF9fIC1JL2hvbWUvYmFycm93L2xpbnV4LTIuMy9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlICAgLVMga2VybmVsL3NjaGVkLmMgLW8ga2VybmVsL3NjaGVkLnMgCgphbHNvIG91dHB1dHMgc3RhYnMgKCBkZWJ1Z2dlciApIGluZm8sIGZyb20gdGhpcyBpbmZvIHlvdSBjYW4gZmluZCBvdXQgdGhlCm9mZnNldHMgJiBzaXplcyBvZiB2YXJpb3VzIGVsZW1lbnRzIGluIHN0cnVjdHVyZXMuCmUuZy4gdGhlIHN0YWIgZm9yIHRoZSBzdHJ1Y3R1cmUKc3RydWN0IHJsaW1pdCB7Cgl1bnNpZ25lZCBsb25nCXJsaW1fY3VyOwoJdW5zaWduZWQgbG9uZwlybGltX21heDsKfTsKaXMKLnN0YWJzICJybGltaXQ6VCgxNTEsMik9czhybGltX2N1cjooMCw1KSwwLDMyO3JsaW1fbWF4OigwLDUpLDMyLDMyOzsiLDEyOCwwLDAsMApmcm9tIHRoaXMgc3RhYiB5b3UgY2FuIHNlZSB0aGF0IApybGltaXRfY3VyIHN0YXJ0cyBhdCBiaXQgb2Zmc2V0IDAgJiBpcyAzMiBiaXRzIGluIHNpemUKcmxpbWl0X21heCBzdGFydHMgYXQgYml0IG9mZnNldCAzMiAmIGlzIDMyIGJpdHMgaW4gc2l6ZS4KCgpEZWJ1Z2dpbmcgVG9vbHM6Cj09PT09PT09PT09PT09PT0KCm9iamR1bXAKPT09PT09PQpUaGlzIGlzIGEgdG9vbCB3aXRoIG1hbnkgb3B0aW9ucyB0aGUgbW9zdCB1c2VmdWwgYmVpbmcgKCBpZiBjb21waWxlZCB3aXRoIC1nKS4Kb2JqZHVtcCAtLXNvdXJjZSA8dmljdGltIHByb2dyYW0gb3Igb2JqZWN0IGZpbGU+ID4gPHZpY3RpbXMgZGVidWcgbGlzdGluZyA+CgoKVGhlIHdob2xlIGtlcm5lbCBjYW4gYmUgY29tcGlsZWQgbGlrZSB0aGlzICggRG9pbmcgdGhpcyB3aWxsIG1ha2UgYSAxN01CIGtlcm5lbAomIGEgMjAwIE1CIGxpc3RpbmcgKSBob3dldmVyIHlvdSBoYXZlIHRvIHN0cmlwIGl0IGJlZm9yZSBidWlsZGluZyB0aGUgaW1hZ2UKdXNpbmcgdGhlIHN0cmlwIGNvbW1hbmQgdG8gbWFrZSBpdCBhIG1vcmUgcmVhc29uYWJsZSBzaXplIHRvIGJvb3QgaXQuCgpBIHNvdXJjZS9hc3NlbWJseSBtaXhlZCBkdW1wIG9mIHRoZSBrZXJuZWwgY2FuIGJlIGRvbmUgd2l0aCB0aGUgbGluZQpvYmpkdW1wIC0tc291cmNlIHZtbGludXggPiB2bWxpbnV4LmxzdApBbHNvLCBpZiB0aGUgZmlsZSBpc24ndCBjb21waWxlZCAtZywgdGhpcyB3aWxsIG91dHB1dCBhcyBtdWNoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgphcyBpdCBjYW4gKGUuZy4gZnVuY3Rpb24gbmFtZXMpLiBUaGlzIGlzIHZlcnkgc2xvdyBhcyBpdCBzcGVuZHMgbG90cwpvZiB0aW1lIHNlYXJjaGluZyBmb3IgZGVidWdnaW5nIGluZm8uIFRoZSBmb2xsb3dpbmcgc2VsZiBleHBsYW5hdG9yeSBsaW5lIHNob3VsZCBiZSB1c2VkIAppbnN0ZWFkIGlmIHRoZSBjb2RlIGlzbid0IGNvbXBpbGVkIC1nLCBhcyBpdCBpcyBtdWNoIGZhc3RlcjoKb2JqZHVtcCAtLWRpc2Fzc2VtYmxlLWFsbCAtLXN5bXMgdm1saW51eCA+IHZtbGludXgubHN0ICAKCkFzIGhhcmQgZHJpdmUgc3BhY2UgaXMgdmFsdWFibGUgbW9zdCBvZiB1cyB1c2UgdGhlIGZvbGxvd2luZyBhcHByb2FjaC4KMSkgTG9vayBhdCB0aGUgZW1pdHRlZCBwc3cgb24gdGhlIGNvbnNvbGUgdG8gZmluZCB0aGUgY3Jhc2ggYWRkcmVzcyBpbiB0aGUga2VybmVsLgoyKSBMb29rIGF0IHRoZSBmaWxlIFN5c3RlbS5tYXAgKCBpbiB0aGUgbGludXggZGlyZWN0b3J5ICkgcHJvZHVjZWQgd2hlbiBidWlsZGluZyAKdGhlIGtlcm5lbCB0byBmaW5kIHRoZSBjbG9zZXN0IGFkZHJlc3MgbGVzcyB0aGFuIHRoZSBjdXJyZW50IFBTVyB0byBmaW5kIHRoZQpvZmZlbmRpbmcgZnVuY3Rpb24uCjMpIHVzZSBncmVwIG9yIHNpbWlsYXIgdG8gc2VhcmNoIHRoZSBzb3VyY2UgdHJlZSBsb29raW5nIGZvciB0aGUgc291cmNlIGZpbGUKIHdpdGggdGhpcyBmdW5jdGlvbiBpZiB5b3UgZG9uJ3Qga25vdyB3aGVyZSBpdCBpcy4KNCkgcmVidWlsZCB0aGlzIG9iamVjdCBmaWxlIHdpdGggLWcgb24sIGFzIGFuIGV4YW1wbGUgc3VwcG9zZSB0aGUgZmlsZSB3YXMKKCAvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubyApIAo1KSBBc3N1bWluZyB0aGUgZmlsZSB3aXRoIHRoZSBlcnJvbmVvdXMgZnVuY3Rpb24gaXMgc2lnbmFsLmMgTW92ZSB0byB0aGUgYmFzZSBvZiB0aGUgCkxpbnV4IHNvdXJjZSB0cmVlLgo2KSBybSAvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubwo3KSBtYWtlIC9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5vCjgpIHdhdGNoIHRoZSBnY2MgY29tbWFuZCBsaW5lIGVtaXR0ZWQKOSkgdHlwZSBpdCBpbiBhZ2FpbiBvciBhbHRlcm5hdGl2ZWx5IGN1dCAmIHBhc3RlIGl0IG9uIHRoZSBjb25zb2xlIGFkZGluZyB0aGUgLWcgb3B0aW9uLgoxMCkgb2JqZHVtcCAtLXNvdXJjZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5vID4gc2lnbmFsLmxzdApUaGlzIHdpbGwgb3V0cHV0IHRoZSBzb3VyY2UgJiB0aGUgYXNzZW1ibHkgaW50ZXJtaXhlZCwgYXMgdGhlIHNuaXBwZXQgYmVsb3cgc2hvd3MKVGhpcyB3aWxsIHVuZm9ydHVuYXRlbHkgb3V0cHV0IGFkZHJlc3NlcyB3aGljaCBhcmVuJ3QgdGhlIHNhbWUKYXMgdGhlIGtlcm5lbCBvbmVzIHlvdSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYXJvdW5kIHRoZSBtZW50YWwgYXJpdGhtZXRpYwpieSBwbGF5aW5nIHdpdGggdGhlIC0tYWRqdXN0LXZtYSBwYXJhbWV0ZXIgdG8gb2JqZHVtcC4KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX2xvY2soc3BpbmxvY2tfdCAqbHApCnsKICAgICAgYTA6ICAgICAgIDE4IDM0ICAgICAgICAgICBsciAgICAgICVyMywlcjQKICAgICAgYTI6ICAgICAgIGE3IDNhIDAzIGJjICAgICBhaGkgICAgICVyMyw5NTYKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGUoIiAgICBsaGkgICAxLC0xXG4iCiAgICAgIGE2OiAgICAgICBhNyAxOCBmZiBmZiAgICAgbGhpICAgICAlcjEsLTEKICAgICAgYWE6ICAgICAgIDFmIDAwICAgICAgICAgICBzbHIgICAgICVyMCwlcjAKICAgICAgYWM6ICAgICAgIGJhIDAxIDMwIDAwICAgICBjcyAgICAgICVyMCwlcjEsMCglcjMpCiAgICAgIGIwOiAgICAgICBhNyA0NCBmZiBmZCAgICAgam0gICAgICBhYSA8c3lzX3NpZ3N1c3BlbmQrMHgyZT4KICAgICAgICBzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKICAgICAgYjQ6ICAgICAgIGQyIDA3IGYwIDY4ICAgICBtdmMgICAgIDEwNCg4LCVyMTUpLDk3MiglcjQpCiAgICAgIGI4OiAgICAgICA0MyBjYwogICAgICAgIHJldHVybiAoc2V0LT5zaWdbMF0gJiBtYXNrKSAhPSAwOwp9IAoKNikgSWYgZGVidWdnaW5nIHVuZGVyIFZNIGdvIGRvd24gdG8gdGhhdCBzZWN0aW9uIGluIHRoZSBkb2N1bWVudCBmb3IgbW9yZSBpbmZvLgoKCkkgbm93IGhhdmUgYSB0b29sIHdoaWNoIHRha2VzIHRoZSBwYWluIG91dCBvZiAtLWFkanVzdC12bWEKJiB5b3UgYXJlIGFibGUgdG8gZG8gc29tZXRoaW5nIGxpa2UKbWFrZSAvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5sc3QKJiBpdCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyB0aGUgY29ycmVjdGx5IHJlbG9jYXRlZCBlbnRyaWVzIGZvcgp0aGUgdGV4dCBzZWdtZW50IGluIHRyYXBzLmxzdC4KVGhpcyB0b29sIGlzIG5vdyBzdGFuZGFyZCBpbiBsaW51eCBkaXN0cm8ncyBpbiBzY3JpcHRzL21ha2Vsc3QKCnN0cmFjZToKLS0tLS0tLQpRLiBXaGF0IGlzIGl0ID8KQS4gSXQgaXMgYSB0b29sIGZvciBpbnRlcmNlcHRpbmcgY2FsbHMgdG8gdGhlIGtlcm5lbCAmIGxvZ2dpbmcgdGhlbQp0byBhIGZpbGUgJiBvbiB0aGUgc2NyZWVuLgoKUS4gV2hhdCB1c2UgaXMgaXQgPwpBLiBZb3UgY2FuIHVzZSBpdCB0byBmaW5kIG91dCB3aGF0IGZpbGVzIGEgcGFydGljdWxhciBwcm9ncmFtIG9wZW5zLgoKCgpFeGFtcGxlIDEKLS0tLS0tLS0tCklmIHlvdSB3YW50ZWQgdG8ga25vdyBkb2VzIHBpbmcgd29yayBidXQgZGlkbid0IGhhdmUgdGhlIHNvdXJjZSAKc3RyYWNlIHBpbmcgLWMgMSAxMjcuMC4wLjEgIAomIHRoZW4gbG9vayBhdCB0aGUgbWFuIHBhZ2VzIGZvciBlYWNoIG9mIHRoZSBzeXNjYWxscyBiZWxvdywKKCBJbiBmYWN0IHRoaXMgaXMgc29tZXRpbWVzIGVhc2llciB0aGFuIGxvb2tpbmcgYXQgc29tZSBzcGFnaGV0dGkKc291cmNlIHdoaWNoIGNvbmRpdGlvbmFsbHkgY29tcGlsZXMgZm9yIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyApLgpOb3QgZXZlcnl0aGluZyB0aGF0IGl0IHRocm93cyBvdXQgbmVlZHMgdG8gbWFrZSBzZW5zZSBpbW1lZGlhdGVseS4KCkp1c3QgbG9va2luZyBxdWlja2x5IHlvdSBjYW4gc2VlIHRoYXQgaXQgaXMgbWFraW5nIHVwIGEgUkFXIHNvY2tldApmb3IgdGhlIElDTVAgcHJvdG9jb2wuCkRvaW5nIGFuIGFsYXJtKDEwKSBmb3IgYSAxMCBzZWNvbmQgdGltZW91dAomIGRvaW5nIGEgZ2V0dGltZW9mZGF5IGNhbGwgYmVmb3JlICYgYWZ0ZXIgZWFjaCByZWFkIHRvIHNlZSAKaG93IGxvbmcgdGhlIHJlcGxpZXMgdG9vaywgJiB3cml0aW5nIHNvbWUgdGV4dCB0byBzdGRvdXQgc28gdGhlIHVzZXIKaGFzIGFuIGlkZWEgd2hhdCBpcyBnb2luZyBvbi4KCnNvY2tldChQRl9JTkVULCBTT0NLX1JBVywgSVBQUk9UT19JQ01QKSA9IDMKZ2V0dWlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMApzZXR1aWQoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCnN0YXQoIi91c3Ivc2hhcmUvbG9jYWxlL0MvbGliYy5jYXQiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKc3RhdCgiL3Vzci9zaGFyZS9sb2NhbGUvbGliYy9DIiwgMHhiZmZmZjEzNCkgPSAtMSBFTk9FTlQgKE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkpCnN0YXQoIi91c3IvbG9jYWwvc2hhcmUvbG9jYWxlL0MvbGliYy5jYXQiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKZ2V0cGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMzUzCnNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCBbMV0sIDQpID0gMApzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgWzQ5MTUyXSwgNCkgPSAwCmZzdGF0KDEsIHtzdF9tb2RlPVNfSUZDSFJ8MDYyMCwgc3RfcmRldj1tYWtlZGV2KDMsIDEpLCAuLi59KSA9IDAKbW1hcCgwLCA0MDk2LCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApID0gMHg0MDAwODAwMAppb2N0bCgxLCBUQ0dFVFMsIHtCOTYwMCBvcG9zdCBpc2lnIGljYW5vbiBlY2hvIC4uLn0pID0gMAp3cml0ZSgxLCAiUElORyAxMjcuMC4wLjEgKDEyNy4wLjAuMSk6IDU2IGQiLi4uLCA0MlBJTkcgMTI3LjAuMC4xICgxMjcuMC4wLjEpOiA1NiBkYXRhIGJ5dGVzCikgPSA0MgpzaWdhY3Rpb24oU0lHSU5ULCB7MHg4MDQ5YmEwLCBbXSwgU0FfUkVTVEFSVH0sIHtTSUdfREZMfSkgPSAwIApzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9LCB7U0lHX0RGTH0pID0gMApnZXR0aW1lb2ZkYXkoezk0ODkwNDcxOSwgMTM4OTUxfSwgTlVMTCkgPSAwCnNlbmR0bygzLCAiXDEwXDBEXDIwMWFcMVwwXDBcMTcjXDIxNzhcMzA3XDM2Ii4uLiwgNjQsIDAsIHtzaW5fZmFtaWx5PUFGX0lORVQsCnNpbl9wb3J0PWh0b25zKDApLCBzaW5fYWRkcj1pbmV0X2FkZHIoIjEyNy4wLjAuMSIpfSwgMTYpID0gNjQKc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9KSA9IDAKc2lnYWN0aW9uKFNJR0FMUk0sIHsweDgwNDliYTAsIFtdLCBTQV9SRVNUQVJUfSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9KSA9IDAKYWxhcm0oMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMApyZWN2ZnJvbSgzLCAiRVwwXDBUXDAwMDVcMFwwQFwxfHJcMTc3XDBcMFwxXDE3NyIuLi4sIDE5MiwgMCwgCntzaW5fZmFtaWx5PUFGX0lORVQsIHNpbl9wb3J0PWh0b25zKDUwODgyKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIFsxNl0pID0gODQKZ2V0dGltZW9mZGF5KHs5NDg5MDQ3MTksIDE2MDIyNH0sIE5VTEwpID0gMApyZWN2ZnJvbSgzLCAiRVwwXDBUXDAwMDZcMFwwXDM3N1wxXDI3NXBcMTc3XDAiLi4uLCAxOTIsIDAsIAp7c2luX2ZhbWlseT1BRl9JTkVULCBzaW5fcG9ydD1odG9ucyg1MDg4MiksIHNpbl9hZGRyPWluZXRfYWRkcigiMTI3LjAuMC4xIil9LCBbMTZdKSA9IDg0CmdldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxNjY5NTJ9LCBOVUxMKSA9IDAKd3JpdGUoMSwgIjY0IGJ5dGVzIGZyb20gMTI3LjAuMC4xOiBpY21wX3NlIi4uLiwgCjU3NjQgYnl0ZXMgZnJvbSAxMjcuMC4wLjE6IGljbXBfc2VxPTAgdHRsPTI1NSB0aW1lPTI4LjAgbXMKCkV4YW1wbGUgMgotLS0tLS0tLS0Kc3RyYWNlIHBhc3N3ZCAyPiYxIHwgZ3JlcCBvcGVuCnByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0Cm9wZW4oIi9ldGMvbGQuc28uY2FjaGUiLCBPX1JET05MWSkgICAgICA9IDMKb3BlbigiL29wdC9rZGUvbGliL2xpYmMuc28uNSIsIE9fUkRPTkxZKSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKb3BlbigiL2xpYi9saWJjLnNvLjUiLCBPX1JET05MWSkgICAgICAgID0gMwpvcGVuKCIvZGV2IiwgT19SRE9OTFkpICAgICAgICAgICAgICAgICAgPSAzCm9wZW4oIi92YXIvcnVuL3V0bXAiLCBPX1JET05MWSkgICAgICAgICA9IDMKb3BlbigiL2V0Yy9wYXNzd2QiLCBPX1JET05MWSkgICAgICAgICAgID0gMwpvcGVuKCIvZXRjL3NoYWRvdyIsIE9fUkRPTkxZKSAgICAgICAgICAgPSAzCm9wZW4oIi9ldGMvbG9naW4uZGVmcyIsIE9fUkRPTkxZKSAgICAgICA9IDQKb3BlbigiL2Rldi90dHkiLCBPX1JET05MWSkgICAgICAgICAgICAgID0gNCAKClRoZSAyPiYxIGlzIGRvbmUgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dCAmIGdyZXAgaXMgdGhlbiBmaWx0ZXJpbmcgdGhpcyBpbnB1dCAKdGhyb3VnaCB0aGUgcGlwZSBmb3IgZWFjaCBsaW5lIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBvcGVuLgoKCkV4YW1wbGUgMwotLS0tLS0tLS0KR2V0dGluZyBzb3BoaXN0aWNhdGVkCnRlbG5ldGQgY3Jhc2hlcyAmIEkgZG9uJ3Qga25vdyB3aHkKClN0ZXBzCi0tLS0tCjEpIFJlcGxhY2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIC9ldGMvaW5ldGQuY29uZgp0ZWxuZXQgIHN0cmVhbSAgdGNwICAgICBub3dhaXQgIHJvb3QgICAgL3Vzci9zYmluL2luLnRlbG5ldGQgLWggCndpdGgKdGVsbmV0ICBzdHJlYW0gIHRjcCAgICAgbm93YWl0ICByb290ICAgIC9ibGFoCgoyKSBDcmVhdGUgdGhlIGZpbGUgL2JsYWggd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRlbnRzIHRvIHN0YXJ0IHRyYWNpbmcgdGVsbmV0ZCAKIyEvYmluL2Jhc2gKL3Vzci9iaW4vc3RyYWNlIC1vL3QxIC1mIC91c3Ivc2Jpbi9pbi50ZWxuZXRkIC1oIAozKSBjaG1vZCA3MDAgL2JsYWggdG8gbWFrZSBpdCBleGVjdXRhYmxlIG9ubHkgdG8gcm9vdAo0KQpraWxsYWxsIC1IVVAgaW5ldGQKb3IgcHMgYXV4IHwgZ3JlcCBpbmV0ZApnZXQgaW5ldGQncyBwcm9jZXNzIGlkCiYga2lsbCAtSFVQIGluZXRkIHRvIHJlc3RhcnQgaXQuCgpJbXBvcnRhbnQgb3B0aW9ucwotLS0tLS0tLS0tLS0tLS0tLQotbyBpcyB1c2VkIHRvIHRlbGwgc3RyYWNlIHRvIG91dHB1dCB0byBhIGZpbGUgaW4gb3VyIGNhc2UgdDEgaW4gdGhlIHJvb3QgZGlyZWN0b3J5Ci1mIGlzIHRvIGZvbGxvdyBjaGlsZHJlbiBpLmUuCmUuZyBpbiBvdXIgY2FzZSBhYm92ZSB0ZWxuZXRkIHdpbGwgc3RhcnQgdGhlIGxvZ2luIHByb2Nlc3MgJiBzdWJzZXF1ZW50bHkgYSBzaGVsbCBsaWtlIGJhc2guCllvdSB3aWxsIGJlIGFibGUgdG8gdGVsbCB3aGljaCBpcyB3aGljaCBmcm9tIHRoZSBwcm9jZXNzIElEJ3MgbGlzdGVkIG9uIHRoZSBsZWZ0IGhhbmQgc2lkZQpvZiB0aGUgc3RyYWNlIG91dHB1dC4KLXA8cGlkPiB3aWxsIHRlbGwgc3RyYWNlIHRvIGF0dGFjaCB0byBhIHJ1bm5pbmcgcHJvY2VzcywgeXVwIHRoaXMgY2FuIGJlIGRvbmUgcHJvdmlkZWQKIGl0IGlzbid0IGJlaW5nIHRyYWNlZCBvciBkZWJ1Z2dlZCBhbHJlYWR5ICYgeW91IGhhdmUgZW5vdWdoIHByaXZpbGVnZXMsCnRoZSByZWFzb24gMiBwcm9jZXNzZXMgY2Fubm90IHRyYWNlIG9yIGRlYnVnIHRoZSBzYW1lIHByb2dyYW0gaXMgdGhhdCBzdHJhY2UKYmVjb21lcyB0aGUgcGFyZW50IHByb2Nlc3Mgb2YgdGhlIG9uZSBiZWluZyBkZWJ1Z2dlZCAmIHByb2Nlc3NlcyAoIHVubGlrZSBwZW9wbGUgKQpjYW4gaGF2ZSBvbmx5IG9uZSBwYXJlbnQuCgoKSG93ZXZlciB0aGUgZmlsZSAvdDEgd2lsbCBnZXQgYmlnIHF1aXRlIHF1aWNrbHkKdG8gdGVzdCBpdCB0ZWxuZXQgMTI3LjAuMC4xCgpub3cgbG9vayBhdCB3aGF0IGZpbGVzIGluLnRlbG5ldGQgZXhlY3ZlJ2QKNDEzICAgZXhlY3ZlKCIvdXNyL3NiaW4vaW4udGVsbmV0ZCIsIFsiL3Vzci9zYmluL2luLnRlbG5ldGQiLCAiLWgiXSwgWy8qIDE3IHZhcnMgKi9dKSA9IDAKNDE0ICAgZXhlY3ZlKCIvYmluL2xvZ2luIiwgWyIvYmluL2xvZ2luIiwgIi1oIiwgImxvY2FsaG9zdCIsICItcCJdLCBbLyogMiB2YXJzICovXSkgPSAwIAoKV2hleSBpdCB3b3JrZWQhLgoKCk90aGVyIGhpbnRzOgotLS0tLS0tLS0tLS0KSWYgdGhlIHByb2dyYW0gaXMgbm90IHZlcnkgaW50ZXJhY3RpdmUgKCBpLmUuIG5vdCBtdWNoIGtleWJvYXJkIGlucHV0ICkKJiBpcyBjcmFzaGluZyBpbiBvbmUgYXJjaGl0ZWN0dXJlIGJ1dCBub3QgaW4gYW5vdGhlciB5b3UgY2FuIGRvIAphbiBzdHJhY2Ugb2YgYm90aCBwcm9ncmFtcyB1bmRlciBhcyBpZGVudGljYWwgYSBzY2VuYXJpbyBhcyB5b3UgY2FuCm9uIGJvdGggYXJjaGl0ZWN0dXJlcyBvdXRwdXR0aW5nIHRvIGEgZmlsZSB0aGVuLgpkbyBhIGRpZmYgb2YgdGhlIHR3byB0cmFjZXMgdXNpbmcgdGhlIGRpZmYgcHJvZ3JhbQppLmUuCmRpZmYgb3V0cHV0MSBvdXRwdXQyCiYgbWF5YmUgeW91J2xsIGJlIGFibGUgdG8gc2VlIHdoZXJlIHRoZSBjYWxsIHBhdGhzIGRpZmZlcmVkLCB0aGlzCmlzIHBvc3NpYmx5IG5lYXIgdGhlIGNhdXNlIG9mIHRoZSBjcmFzaC4gCgpNb3JlIGluZm8KLS0tLS0tLS0tCkxvb2sgYXQgbWFuIHBhZ2VzIGZvciBzdHJhY2UgJiB0aGUgdmFyaW91cyBzeXNjYWxscwplLmcuIG1hbiBzdHJhY2UsIG1hbiBhbGFybSwgbWFuIHNvY2tldC4KCgpQZXJmb3JtYW5jZSBEZWJ1Z2dpbmcKPT09PT09PT09PT09PT09PT09PT09CmdjYyBpcyBjYXBhYmxlIG9mIGNvbXBpbGluZyBpbiBwcm9maWxpbmcgY29kZSBqdXN0IGFkZCB0aGUgLXAgb3B0aW9uCnRvIHRoZSBDRkxBR1MsIHRoaXMgb2J2aW91c2x5IGFmZmVjdHMgcHJvZ3JhbSBzaXplICYgcGVyZm9ybWFuY2UuClRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIGdwcm9mIGdudSBwcm9maWxpbmcgdG9vbCBvciB0aGUKZ2NvdiB0aGUgZ251IGNvZGUgY292ZXJhZ2UgdG9vbCAoIGNvZGUgY292ZXJhZ2UgaXMgYSBtZWFucyBvZiB0ZXN0aW5nCmNvZGUgcXVhbGl0eSBieSBjaGVja2luZyBpZiBhbGwgdGhlIGNvZGUgaW4gYW4gZXhlY3V0YWJsZSBpbiBleGVyY2lzZWQgYnkKYSB0ZXN0ZXIgKS4KCgpVc2luZyB0b3AgdG8gZmluZCBvdXQgd2hlcmUgcHJvY2Vzc2VzIGFyZSBzbGVlcGluZyBpbiB0aGUga2VybmVsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVG8gZG8gdGhpcyBjb3B5IHRoZSBTeXN0ZW0ubWFwIGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5IHdoZXJlCnRoZSBsaW51eCBrZXJuZWwgd2FzIGJ1aWx0IHRvIHRoZSAvYm9vdCBkaXJlY3Rvcnkgb24geW91ciAKbGludXggbWFjaGluZS4KU3RhcnQgdG9wCk5vdyB0eXBlIGZVPHJldHVybj4KWW91IHNob3VsZCBzZWUgYSBuZXcgZmllbGQgY2FsbGVkIFdDSEFOIHdoaWNoCnRlbGxzIHlvdSB3aGVyZSBlYWNoIHByb2Nlc3MgaXMgc2xlZXBpbmcgaGVyZSBpcyBhIHR5cGljYWwgb3V0cHV0LgogCiA2OjU5cG0gIHVwIDQxIG1pbiwgIDEgdXNlciwgIGxvYWQgYXZlcmFnZTogMC4wMCwgMC4wMCwgMC4wMAoyOCBwcm9jZXNzZXM6IDI3IHNsZWVwaW5nLCAxIHJ1bm5pbmcsIDAgem9tYmllLCAwIHN0b3BwZWQKQ1BVIHN0YXRlczogIDAuMCUgdXNlciwgIDAuMSUgc3lzdGVtLCAgMC4wJSBuaWNlLCA5OS44JSBpZGxlCk1lbTogICAyNTQ5MDBLIGF2LCAgIDQ1OTc2SyB1c2VkLCAgMjA4OTI0SyBmcmVlLCAgICAgICAwSyBzaHJkLCAgIDI4NjM2SyBidWZmClN3YXA6ICAgICAgIDBLIGF2LCAgICAgICAwSyB1c2VkLCAgICAgICAwSyBmcmVlICAgICAgICAgICAgICAgICAgICA4NjIwSyBjYWNoZWQKCiAgUElEIFVTRVIgICAgIFBSSSAgTkkgIFNJWkUgIFJTUyBTSEFSRSBXQ0hBTiAgICAgU1RBVCAgTElCICVDUFUgJU1FTSAgIFRJTUUgQ09NTUFORAogIDc1MCByb290ICAgICAgMTIgICAwICAgODQ4ICA4NDggICA3MDAgZG9fc2VsZWN0IFMgICAgICAgMCAgMC4xICAwLjMgICAwOjAwIGluLnRlbG5ldGQKICA3Njcgcm9vdCAgICAgIDE2ICAgMCAgMTE0MCAxMTQwICAgOTY0ICAgICAgICAgICBSICAgICAgIDAgIDAuMSAgMC40ICAgMDowMCB0b3AKICAgIDEgcm9vdCAgICAgICA4ICAgMCAgIDIxMiAgMjEyICAgMTgwIGRvX3NlbGVjdCBTICAgICAgIDAgIDAuMCAgMC4wICAgMDowMCBpbml0CiAgICAyIHJvb3QgICAgICAgOSAgIDAgICAgIDAgICAgMCAgICAgMCBkb3duX2ludGUgU1cgICAgICAwICAwLjAgIDAuMCAgIDA6MDAga21jaGVjawoKVGhlIHRpbWUgY29tbWFuZAotLS0tLS0tLS0tLS0tLS0tCkFub3RoZXIgcmVsYXRlZCBjb21tYW5kIGlzIHRoZSB0aW1lIGNvbW1hbmQgd2hpY2ggZ2l2ZXMgeW91IGFuIGluZGljYXRpb24Kb2Ygd2hlcmUgYSBwcm9jZXNzIGlzIHNwZW5kaW5nIHRoZSBtYWpvcml0eSBvZiBpdHMgdGltZS4KZS5nLgp0aW1lIHBpbmcgLWMgNSBuYwpvdXRwdXRzCnJlYWwJMG00LjA1NHMKdXNlcgkwbTAuMDEwcwpzeXMJMG0wLjAxMHMKCkRlYnVnZ2luZyB1bmRlciBWTQo9PT09PT09PT09PT09PT09PT0KCk5vdGVzCi0tLS0tCkFkZHJlc3NlcyAmIHZhbHVlcyBpbiB0aGUgVk0gZGVidWdnZXIgYXJlIGFsd2F5cyBoZXggbmV2ZXIgZGVjaW1hbApBZGRyZXNzIHJhbmdlcyBhcmUgb2YgdGhlIGZvcm1hdCA8SGV4VmFsdWUxPi08SGV4VmFsdWUyPiBvciA8SGV4VmFsdWUxPi48SGV4VmFsdWUyPiAKZS5nLiBUaGUgYWRkcmVzcyByYW5nZSAgMHgyMDAwIHRvIDB4MzAwMCBjYW4gYmUgZGVzY3JpYmVkIGFzIDIwMDAtMzAwMCBvciAyMDAwLjEwMDAKClRoZSBWTSBEZWJ1Z2dlciBpcyBjYXNlIGluc2Vuc2l0aXZlLgoKVk0ncyBzdHJlbmd0aHMgYXJlIHVzdWFsbHkgb3RoZXIgZGVidWdnZXJzIHdlYWtuZXNzZXMgeW91IGNhbiBnZXQgYXQgYW55IHJlc291cmNlCm5vIG1hdHRlciBob3cgc2Vuc2l0aXZlIGUuZy4gbWVtb3J5IG1hbmFnZW1lbnQgcmVzb3VyY2VzLGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uCmluIHRoZSBQU1cuIEZvciBrZXJuZWwgaGFja2luZyB5b3Ugd2lsbCByZWFwIGRpdmlkZW5kcyBpZiB5b3UgZ2V0IGdvb2QgYXQgaXQuCgpUaGUgVk0gRGVidWdnZXIgZGlzcGxheXMgb3BlcmF0b3JzIGJ1dCBub3Qgb3BlcmFuZHMsIHByb2JhYmx5IGJlY2F1c2Ugc29tZQpvZiBpdCB3YXMgd3JpdHRlbiB3aGVuIG1lbW9yeSB3YXMgZXhwZW5zaXZlICYgdGhlIHByb2dyYW1tZXIgd2FzIHByb2JhYmx5IHByb3VkIHRoYXQKaXQgZml0dGVkIGludG8gMmsgb2YgbWVtb3J5ICYgdGhlIHByb2dyYW1tZXJzICYgZGlkbid0IHdhbnQgdG8gc2hvY2sgaGFyZGNvcmUgVk0nZXJzIGJ5CmNoYW5naW5nIHRoZSBpbnRlcmZhY2UgOi0pLCBhbHNvIHRoZSBkZWJ1Z2dlciBkaXNwbGF5cyB1c2VmdWwgaW5mb3JtYXRpb24gb24gdGhlIHNhbWUgbGluZSAmIAp0aGUgYXV0aG9yIG9mIHRoZSBjb2RlIHByb2JhYmx5IGZlbHQgdGhhdCBpdCB3YXMgYSBnb29kIGlkZWEgbm90IHRvIGdvIG92ZXIgCnRoZSA4MCBjb2x1bW5zIG9uIHRoZSBzY3JlZW4uIAoKQXMgc29tZSBvZiB5b3UgYXJlIHByb2JhYmx5IGluIGEgcGFuaWMgbm93IHRoaXMgaXNuJ3QgYXMgdW5pbnR1aXRpdmUgYXMgaXQgbWF5IHNlZW0KYXMgdGhlIDM5MCBpbnN0cnVjdGlvbnMgYXJlIGVhc3kgdG8gZGVjb2RlIG1lbnRhbGx5ICYgeW91IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhdCBhIGxvdCAKb2YgdGhlbSBhcyBhbGwgdGhlIG9wZXJhbmRzIGFyZSBuaWJibGUgKCBoYWxmIGJ5dGUgYWxpZ25lZCApICYgaWYgeW91IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nCmFsc28gaXQgaXMgcXVpdGUgZWFzeSB0byBmb2xsb3csIGlmIHlvdSBkb24ndCBoYXZlIGFuIG9iamR1bXAgbGlzdGluZyBrZWVwIGEgY29weSBvZgp0aGUgcy8zOTAgUmVmZXJlbmNlIFN1bW1hcnkgJiBsb29rIGF0IGJldHdlZW4gcGFnZXMgMiAmIDcgb3IgYWx0ZXJuYXRpdmVseSB0aGUKcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24uCmUuZy4gZXZlbiBJIGNhbiBndWVzcyB0aGF0IAowMDAxQUZGOCcgTFIgICAgMTgwRiAgICAgICAgQ0MgMAppcyBhICggbG9hZCByZWdpc3RlciApIGxyIHIwLHIxNSAKCkFsc28gaXQgaXMgdmVyeSBlYXN5IHRvIHRlbGwgdGhlIGxlbmd0aCBvZiBhIDM5MCBpbnN0cnVjdGlvbiBmcm9tIHRoZSAyIG1vc3Qgc2lnbmlmaWNhbnQKYml0cyBpbiB0aGUgaW5zdHJ1Y3Rpb24gKCBub3QgdGhhdCB0aGlzIGluZm8gaXMgcmVhbGx5IHVzZWZ1bCBleGNlcHQgaWYgeW91IGFyZSB0cnlpbmcgdG8KbWFrZSBzZW5zZSBvZiBhIGhleGR1bXAgb2YgY29kZSApLgpIZXJlIGlzIGEgdGFibGUKQml0cyAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gTGVuZ3RoCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQowMCAgICAgICAgICAgICAgICAgICAgICAgICAgMiBCeXRlcwowMSAgICAgICAgICAgICAgICAgICAgICAgICAgNCBCeXRlcwoxMCAgICAgICAgICAgICAgICAgICAgICAgICAgNCBCeXRlcwoxMSAgICAgICAgICAgICAgICAgICAgICAgICAgNiBCeXRlcwoKCgoKVGhlIGRlYnVnZ2VyIGFsc28gZGlzcGxheXMgb3RoZXIgdXNlZnVsIGluZm8gb24gdGhlIHNhbWUgbGluZSBzdWNoIGFzIHRoZQphZGRyZXNzZXMgYmVpbmcgb3BlcmF0ZWQgb24gZGVzdGluYXRpb24gYWRkcmVzc2VzIG9mIGJyYW5jaGVzICYgY29uZGl0aW9uIGNvZGVzLgplLmcuICAKMDAwMTk3MzYnIEFISSAgIEE3REFGRjBFICAgIENDIDEKMDAwMTk4QkEnIEJSQyAgIEE3ODQwMDA0IC0+IDAwMDE5OEMyJyAgIENDIDAKMDAwMTk4Q0UnIFNUTSAgIDkwMEVGMDY4ID4+IDBGQTk1RTc4ICAgIENDIDIKCgoKVXNlZnVsIFZNIGRlYnVnZ2VyIGNvbW1hbmRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKSSBzdXBwb3NlIEknZCBiZXR0ZXIgbWVudGlvbiB0aGlzIGJlZm9yZSBJIHN0YXJ0CnRvIGxpc3QgdGhlIGN1cnJlbnQgYWN0aXZlIHRyYWNlcyBkbyAKUSBUUgp0aGVyZSBjYW4gYmUgYSBtYXhpbXVtIG9mIDI1NSBvZiB0aGVzZSBwZXIgc2V0CiggbW9yZSBhYm91dCB0cmFjZSBzZXRzIGxhdGVyICkuClRvIHN0b3AgdHJhY2VzIGlzc3VlIGEKVFIgRU5ELgpUbyBkZWxldGUgYSBwYXJ0aWN1bGFyIGJyZWFrcG9pbnQgaXNzdWUKVFIgREVMIDxicmVha3BvaW50IG51bWJlcj4KClRoZSBQQTEga2V5IGRyb3BzIHRvIENQIG1vZGUgc28geW91IGNhbiBpc3N1ZSBkZWJ1Z2dlciBjb21tYW5kcywKRG9pbmcgYWx0IGMgKG9uIG15IDMyNzAgY29uc29sZSBhdCBsZWFzdCApIGNsZWFycyB0aGUgc2NyZWVuLiAKaGl0dGluZyBiIDxlbnRlcj4gY29tZXMgYmFjayB0byB0aGUgcnVubmluZyBvcGVyYXRpbmcgc3lzdGVtCmZyb20gY3AgbW9kZSAoIGluIG91ciBjYXNlIGxpbnV4ICkuCkl0IGlzIHR5cGljYWxseSB1c2VmdWwgdG8gYWRkIHNob3J0Y3V0cyB0byB5b3VyIHByb2ZpbGUuZXhlYyBmaWxlCmlmIHlvdSBoYXZlIG9uZSAoIHRoaXMgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGF1dG9leGVjLmJhdCBpbiBET1MgKS4KZmlsZSBoZXJlIGFyZSBhIGZldyBmcm9tIG1pbmUuCi8qIHRoaXMgZ2l2ZXMgbWUgY29tbWFuZCBoaXN0b3J5IG9uIGlzc3VpbmcgZjEyICovCnNldCBwZjEyIHJldHJpZXZlIAovKiB0aGlzIGNvbnRpbnVlcyAqLwpzZXQgcGY4IGltbSBiCi8qIGdvZXMgdG8gdHJhY2Ugc2V0IGEgKi8Kc2V0IHBmMSBpbW0gdHIgZ290byBhCi8qIGdvZXMgdG8gdHJhY2Ugc2V0IGIgKi8Kc2V0IHBmMiBpbW0gdHIgZ290byBiCi8qIGdvZXMgdG8gdHJhY2Ugc2V0IGMgKi8Kc2V0IHBmMyBpbW0gdHIgZ290byBjCgoKCkluc3RydWN0aW9uIFRyYWNpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLQpTZXR0aW5nIGEgc2ltcGxlIGJyZWFrcG9pbnQKVFIgSSBQU1dBIDxhZGRyZXNzPgpUbyBkZWJ1ZyBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gdHJ5ClRSIEkgUiA8ZnVuY3Rpb24gYWRkcmVzcyByYW5nZT4KVFIgSSBvbiBpdHMgb3duIHdpbGwgc2luZ2xlIHN0ZXAuClRSIEkgREFUQSA8TU5FTU9OSUM+IDxPUFRJT05BTCBSQU5HRT4gd2lsbCB0cmFjZSBmb3IgcGFydGljdWxhciBtbmVtb25pY3MKZS5nLgpUUiBJIERBVEEgNEQgUiAwMTk3QkMuNDAwMAp3aWxsIHRyYWNlIGZvciBCQVMnZXMgKCBvcGNvZGUgNEQgKSBpbiB0aGUgcmFuZ2UgMDE5N0JDLjQwMDAKaWYgeW91IHdlcmUgaW5jbGluZWQgeW91IGNvdWxkIGFkZCB0cmFjZXMgZm9yIGFsbCBicmFuY2ggaW5zdHJ1Y3Rpb25zICYKc3VmZml4IHRoZW0gd2l0aCB0aGUgcnVuIHByZWZpeCBzbyB5b3Ugd291bGQgaGF2ZSBhIGJhY2t0cmFjZSBvbiBzY3JlZW4gCndoZW4gYSBwcm9ncmFtIGNyYXNoZXMuClRSIEJSIDxJTlRPIE9SIEZST00+IHdpbGwgdHJhY2UgYnJhbmNoZXMgaW50byBvciBvdXQgb2YgYW4gYWRkcmVzcy4KZS5nLgpUUiBCUiBJTlRPIDAgaXMgb2Z0ZW4gcXVpdGUgdXNlZnVsIGlmIGEgcHJvZ3JhbSBpcyBnZXR0aW5nIGF3a3dhcmQgJiBkZWNpZGluZwp0byBicmFuY2ggdG8gMCAmIGNyYXNoaW5nIGFzIHRoaXMgd2lsbCBzdG9wIGF0IHRoZSBhZGRyZXNzIGJlZm9yZSBpbiBqdW1wcyB0byAwLgpUUiBJIFIgPGFkZHJlc3MgcmFuZ2U+IFJVTiBjbWQgZCBnCnNpbmdsZSBzdGVwcyBhIHJhbmdlIG9mIGFkZHJlc3NlcyBidXQgc3RheXMgcnVubmluZyAmCmRpc3BsYXlzIHRoZSBncHJzIG9uIGVhY2ggc3RlcC4KCgoKRGlzcGxheWluZyAmIG1vZGlmeWluZyBSZWdpc3RlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRCBHIHdpbGwgZGlzcGxheSBhbGwgdGhlIGdwcnMKQWRkaW5nIGEgZXh0cmEgRyB0byBhbGwgdGhlIGNvbW1hbmRzIGlzIG5lY2Vzc2FyeSB0byBhY2Nlc3MgdGhlIGZ1bGwgNjQgYml0IApjb250ZW50IGluIFZNIG9uIHovQXJjaGl0ZWN0dXJlIG9idmlvdXNseSB0aGlzIGlzbid0IHJlcXVpcmVkIGZvciBhY2Nlc3MgcmVnaXN0ZXJzCmFzIHRoZXNlIGFyZSBzdGlsbCAzMiBiaXQuCmUuZy4gREdHIGluc3RlYWQgb2YgREcgCkQgWCB3aWxsIGRpc3BsYXkgYWxsIHRoZSBjb250cm9sIHJlZ2lzdGVycwpEIEFSIHdpbGwgZGlzcGxheSBhbGwgdGhlIGFjY2VzcyByZWdpc3RlcnMKRCBBUjQtNyB3aWxsIGRpc3BsYXkgYWNjZXNzIHJlZ2lzdGVycyA0IHRvIDcKQ1BVIEFMTCBEIEcgd2lsbCBkaXNwbGF5IHRoZSBHUlBTIG9mIGFsbCBDUFVTIGluIHRoZSBjb25maWd1cmF0aW9uCkQgUFNXIHdpbGwgZGlzcGxheSB0aGUgY3VycmVudCBQU1cKc3QgUFNXIDIwMDAgd2lsbCBwdXQgdGhlIHZhbHVlIDIwMDAgaW50byB0aGUgUFNXICYKY2F1c2UgY3Jhc2ggeW91ciBtYWNoaW5lLgpEIFBSRUZJWCBkaXNwbGF5cyB0aGUgcHJlZml4IG9mZnNldAoKCkRpc3BsYXlpbmcgTWVtb3J5Ci0tLS0tLS0tLS0tLS0tLS0tClRvIGRpc3BsYXkgbWVtb3J5IG1hcHBlZCB1c2luZyB0aGUgY3VycmVudCBQU1cncyBtYXBwaW5nIHRyeQpEIDxyYW5nZT4KVG8gbWFrZSBWTSBkaXNwbGF5IGEgbWVzc2FnZSBlYWNoIHRpbWUgaXQgaGl0cyBhIHBhcnRpY3VsYXIgYWRkcmVzcyAmIGNvbnRpbnVlIHRyeQpEIEk8cmFuZ2U+IHdpbGwgZGlzYXNzZW1ibGUvZGlzcGxheSBhIHJhbmdlIG9mIGluc3RydWN0aW9ucy4KU1QgYWRkciAzMiBiaXQgd29yZCB3aWxsIHN0b3JlIGEgMzIgYml0IGFsaWduZWQgYWRkcmVzcwpEIFQ8cmFuZ2U+IHdpbGwgZGlzcGxheSB0aGUgRUJDRElDIGluIGFuIGFkZHJlc3MgKCBpZiB5b3UgYXJlIHRoYXQgd2F5IGluY2xpbmVkICkKRCBSPHJhbmdlPiB3aWxsIGRpc3BsYXkgcmVhbCBhZGRyZXNzZXMgKCB3aXRob3V0IERBVCApIGJ1dCB3aXRoIHByZWZpeGluZy4KVGhlcmUgYXJlIG90aGVyIGNvbXBsZXggb3B0aW9ucyB0byBkaXNwbGF5IGlmIHlvdSBuZWVkIHRvIGdldCBhdCBzYXkgaG9tZSBzcGFjZQpidXQgYXJlIGluIHByaW1hcnkgc3BhY2UgdGhlIGVhc2llc3QgdGhpbmcgdG8gZG8gaXMgdG8gdGVtcG9yYXJpbHkKbW9kaWZ5IHRoZSBQU1cgdG8gdGhlIG90aGVyIGFkZHJlc3NpbmcgbW9kZSwgZGlzcGxheSB0aGUgc3R1ZmYgJiB0aGVuCnJlc3RvcmUgaXQuCgoKIApIaW50cwotLS0tLQpJZiB5b3Ugd2FudCB0byBpc3N1ZSBhIGRlYnVnZ2VyIGNvbW1hbmQgd2l0aG91dCBoYWx0aW5nIHlvdXIgdmlydHVhbCBtYWNoaW5lIHdpdGggdGhlClBBMSBrZXkgdHJ5IHByZWZpeGluZyB0aGUgY29tbWFuZCB3aXRoICNDUCBlLmcuCiNjcCB0ciBpIHBzd2EgMjAwMAphbHNvIHN1ZmZpeGluZyBtb3N0IGRlYnVnZ2VyIGNvbW1hbmRzIHdpdGggUlVOIHdpbGwgY2F1c2UgdGhlbSBub3QKdG8gc3RvcCBqdXN0IGRpc3BsYXkgdGhlIG1uZW1vbmljIGF0IHRoZSBjdXJyZW50IGluc3RydWN0aW9uIG9uIHRoZSBjb25zb2xlLgpJZiB5b3UgaGF2ZSBzZXZlcmFsIGJyZWFrcG9pbnRzIHlvdSB3YW50IHRvIHB1dCBpbnRvIHlvdXIgcHJvZ3JhbSAmCnlvdSBnZXQgZmVkIHVwIG9mIGNyb3NzIHJlZmVyZW5jaW5nIHdpdGggU3lzdGVtLm1hcAp5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmcgdHJpY2sgZm9yIHNldmVyYWwgc3ltYm9scy4KZ3JlcCBkb19zaWduYWwgU3lzdGVtLm1hcCAKd2hpY2ggZW1pdHMgdGhlIGZvbGxvd2luZyBhbW9uZyBvdGhlciB0aGluZ3MKMDAwMWY0ZTAgVCBkb19zaWduYWwgCm5vdyB5b3UgY2FuIGRvCgpUUiBJIFBTV0EgMDAwMWY0ZTAgY21kIG1zZyAqIGRvX3NpZ25hbApUaGlzIHNlbmRzIGEgbWVzc2FnZSB0byB5b3VyIG93biBjb25zb2xlIGVhY2ggdGltZSBkb19zaWduYWwgaXMgZW50ZXJlZC4KKCBBcyBhbiBhc2lkZSBJIHdyb3RlIGEgcGVybCBzY3JpcHQgb25jZSB3aGljaCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhIFJFWFgKc2NyaXB0IHdpdGggYnJlYWtwb2ludHMgb24gZXZlcnkga2VybmVsIHByb2NlZHVyZSwgdGhpcyBpc24ndCBhIGdvb2QgaWRlYQpiZWNhdXNlIHRoZXJlIGFyZSB0aG91c2FuZHMgb2YgdGhlc2Ugcm91dGluZXMgJiBWTSBjYW4gb25seSBzZXQgMjU1IGJyZWFrcG9pbnRzCmF0IGEgdGltZSBzbyB5b3UgbmVhcmx5IGhhZCB0byBzcGVuZCBhcyBsb25nIHBydW5pbmcgdGhlIGZpbGUgZG93biBhcyB5b3Ugd291bGQgCmVudGVyaW5nIHRoZSBtc2cncyBieSBoYW5kICksaG93ZXZlciwgdGhlIHRyaWNrIG1pZ2h0IGJlIHVzZWZ1bCBmb3IgYSBzaW5nbGUgb2JqZWN0IGZpbGUuCk9uIGxpbnV4J2VzIDMyNzAgZW11bGF0b3IgeDMyNzAgdGhlcmUgaXMgYSB2ZXJ5IHVzZWZ1bCBvcHRpb24gdW5kZXIgdGhlIGZpbGUgbWVudApTYXZlIFNjcmVlbnMgSW4gRmlsZSB0aGlzIGlzIHZlcnkgZ29vZCBvZiBrZWVwaW5nIGEgY29weSBvZiB0cmFjZXMuIAoKRnJvbSBDTVMgaGVscCA8Y29tbWFuZCBuYW1lPiB3aWxsIGdpdmUgeW91IG9ubGluZSBoZWxwIG9uIGEgcGFydGljdWxhciBjb21tYW5kLiAKZS5nLiAKSEVMUCBESVNQTEFZCgpBbHNvIENQIGhhcyBhIGZpbGUgY2FsbGVkIHByb2ZpbGUuZXhlYyB3aGljaCBhdXRvbWF0aWNhbGx5IGdldHMgY2FsbGVkCm9uIHN0YXJ0dXAgb2YgQ01TICggbGlrZSBhdXRvZXhlYy5iYXQgKSwga2VlcGluZyBvbiBhIERPUyBhbmFsb2d5IHNlc3Npb24KQ1AgaGFzIGEgZmVhdHVyZSBzaW1pbGFyIHRvIGRvc2tleSwgaXQgbWF5IGJlIHVzZWZ1bCBmb3IgeW91IHRvCnVzZSBwcm9maWxlLmV4ZWMgdG8gZGVmaW5lIHNvbWUga2V5c3Ryb2tlcy4gCmUuZy4KU0VUIFBGOSBJTU0gQgpUaGlzIGRvZXMgYSBzaW5nbGUgc3RlcCBpbiBWTSBvbiBwcmVzc2luZyBGOC4gClNFVCBQRjEwICBeClRoaXMgc2V0cyB1cCB0aGUgXiBrZXkuCndoaWNoIGNhbiBiZSB1c2VkIGZvciBeYyAoY3RybC1jKSxeeiAoY3RybC16KSB3aGljaCBjYW4ndCBiZSB0eXBlZCBkaXJlY3RseSBpbnRvIHNvbWUgMzI3MCBjb25zb2xlcy4KU0VUIFBGMTEgXi0KVGhpcyB0eXBlcyB0aGUgc3RhcnRpbmcga2V5c3Ryb2tlcyBmb3IgYSBzeXNycSBzZWUgU3lzUnEgYmVsb3cuClNFVCBQRjEyIFJFVFJJRVZFClRoaXMgcmV0cmlldmVzIGNvbW1hbmQgaGlzdG9yeSBvbiBwcmVzc2luZyBGMTIuCgoKU29tZXRpbWVzIGluIFZNIHRoZSBkaXNwbGF5IGlzIHNldCB1cCB0byBzY3JvbGwgYXV0b21hdGljYWxseSB0aGlzCmNhbiBiZSB2ZXJ5IGFubm95aW5nIGlmIHRoZXJlIGFyZSBtZXNzYWdlcyB5b3Ugd2lzaCB0byBsb29rIGF0CnRvIHN0b3AgdGhpcyBkbwpURVJNIE1PUkUgMjU1IDI1NQpUaGlzIHdpbGwgbmVhcmx5IHN0b3AgYXV0b21hdGljIHNjcmVlbiB1cGRhdGVzLCBob3dldmVyIGl0IHdpbGwKY2F1c2UgYSBkZW5pYWwgb2Ygc2VydmljZSBpZiBsb3RzIG9mIG1lc3NhZ2VzIGdvIHRvIHRoZSAzMjcwIGNvbnNvbGUsCnNvIGl0IHdvdWxkIGJlIGZvb2xpc2ggdG8gdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgb24gYSBwcm9kdWN0aW9uIG1hY2hpbmUuCiAKClRyYWNpbmcgcGFydGljdWxhciBwcm9jZXNzZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGUga2VybmVsJ3MgdGV4dCBzZWdtZW50IGlzIGludGVudGlvbmFsbHkgYXQgYW4gYWRkcmVzcyBpbiBtZW1vcnkgdGhhdCBpdCB3aWxsCnZlcnkgc2VsZG9tIGNvbGxpZGUgd2l0aCB0ZXh0IHNlZ21lbnRzIG9mIHVzZXIgcHJvZ3JhbXMgKCB0aGFua3MgTWFydGluICksCnRoaXMgc2ltcGxpZmllcyBkZWJ1Z2dpbmcgdGhlIGtlcm5lbC4KSG93ZXZlciBpdCBpcyBxdWl0ZSBjb21tb24gZm9yIHVzZXIgcHJvY2Vzc2VzIHRvIGhhdmUgYWRkcmVzc2VzIHdoaWNoIGNvbGxpZGUKdGhpcyBjYW4gbWFrZSBkZWJ1Z2dpbmcgYSBwYXJ0aWN1bGFyIHByb2Nlc3MgdW5kZXIgVk0gcGFpbmZ1bCB1bmRlciBub3JtYWwKY2lyY3Vtc3RhbmNlcyBhcyB0aGUgcHJvY2VzcyBtYXkgY2hhbmdlIHdoZW4gZG9pbmcgYSAKVFIgSSBSIDxhZGRyZXNzIHJhbmdlPi4KVGhhbmtmdWxseSBhZnRlciByZWFkaW5nIFZNJ3Mgb25saW5lIGhlbHAgSSBmaWd1cmVkIG91dCBob3cgdG8gZGVidWcKSSBwYXJ0aWN1bGFyIHByb2Nlc3MuCgpZb3VyIGZpcnN0IHByb2JsZW0gaXMgdG8gZmluZCB0aGUgU1REICggc2VnbWVudCB0YWJsZSBkZXNpZ25hdGlvbiApCm9mIHRoZSBwcm9ncmFtIHlvdSB3aXNoIHRvIGRlYnVnLgpUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHlvdSBjYW4gZG8gdGhpcyBoZXJlIGFyZSBhIGZldwoxKSBvYmpkdW1wIC0tc3ltcyA8cHJvZ3JhbSB0byBiZSBkZWJ1Z2dlZD4gfCBncmVwIG1haW4KVG8gZ2V0IHRoZSBhZGRyZXNzIG9mIG1haW4gaW4gdGhlIHByb2dyYW0uCnRyIGkgcHN3YSA8YWRkcmVzcyBvZiBtYWluPgpTdGFydCB0aGUgcHJvZ3JhbSwgaWYgVk0gZHJvcHMgdG8gQ1Agb24gd2hhdCBsb29rcyBsaWtlIHRoZSBlbnRyeQpwb2ludCBvZiB0aGUgbWFpbiBmdW5jdGlvbiB0aGlzIGlzIG1vc3QgbGlrZWx5IHRoZSBwcm9jZXNzIHlvdSB3aXNoIHRvIGRlYnVnLgpOb3cgZG8gYSBEIFgxMyBvciBEIFhHMTMgb24gei9BcmNoaXRlY3R1cmUuCk9uIDMxIGJpdCB0aGUgU1REIGlzIGJpdHMgMS0xOSAoIHRoZSBTVE8gc2VnbWVudCB0YWJsZSBvcmlnaW4gKSAKJiAyNS0zMSAoIHRoZSBTVEwgc2VnbWVudCB0YWJsZSBsZW5ndGggKSBvZiBDUjEzLgpub3cgdHlwZQpUUiBJIFIgU1REIDxDUjEzJ3MgdmFsdWU+IDAuN2ZmZmZmZmYKZS5nLgpUUiBJIFIgU1REIDhGMzJFMUZGIDAuN2ZmZmZmZmYKQW5vdGhlciB2ZXJ5IHVzZWZ1bCB2YXJpYXRpb24gaXMKVFIgU1RPUkUgSU5UTyBTVEQgPENSMTMncyB2YWx1ZT4gPGFkZHJlc3MgcmFuZ2U+CmZvciBmaW5kaW5nIG91dCB3aGVuIGEgcGFydGljdWxhciB2YXJpYWJsZSBjaGFuZ2VzLgoKQW4gYWx0ZXJuYXRpdmUgd2F5IG9mIGZpbmRpbmcgdGhlIFNURCBvZiBhIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MgCmlzIHRvIGRvIHRoZSBmb2xsb3dpbmcsICggdGhpcyBtZXRob2QgaXMgbW9yZSBjb21wbGV4IGJ1dApjb3VsZCBiZSBxdWl0ZSBjb252ZW5pZW50IGlmIHlvdSBhcmVuJ3QgdXBkYXRpbmcgdGhlIGtlcm5lbCBtdWNoICYKc28geW91ciBrZXJuZWwgc3RydWN0dXJlcyB3aWxsIHN0YXkgY29uc3RhbnQgZm9yIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YKdGltZSApLgoKZ3JlcCB0YXNrIC9wcm9jLzxwaWQ+L3N0YXR1cwpmcm9tIHRoaXMgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UKdGFzazogMGYxNjAwMDAga3NwOiAwZjE2MWRlOCBwdF9yZWdzOiAwZjE2MWY2OApUaGlzIG5vdyBnaXZlcyB5b3UgYSBwb2ludGVyIHRvIHRoZSB0YXNrIHN0cnVjdHVyZS4KTm93IG1ha2UgQ0M6PSJzMzkwLWdjYyAtZyIga2VybmVsL3NjaGVkLnMKVG8gZ2V0IHRoZSB0YXNrX3N0cnVjdCBzdGFiaW5mby4KKCB0YXNrX3N0cnVjdCBpcyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvc2NoZWQuaCApLgpOb3cgd2Ugd2FudCB0byBsb29rIGF0CnRhc2stPmFjdGl2ZV9tbS0+cGdkCm9uIG15IG1hY2hpbmUgdGhlIGFjdGl2ZV9tbSBpbiB0aGUgdGFzayBzdHJ1Y3R1cmUgc3RhYiBpcwphY3RpdmVfbW06KDQsMTIpLDY3MiwzMgppdHMgb2Zmc2V0IGlzIDY3Mi84PTg0PTB4NTQKdGhlIHBnZCBtZW1iZXIgaW4gdGhlIG1tX3N0cnVjdCBzdGFiIGlzCnBnZDooNCw2KT0qKDI5LDUpLDk2LDMyCnNvIGl0cyBvZmZzZXQgaXMgOTYvOD0xMj0weGMKCnNvIHdlJ2xsCmhleGR1bXAgLXMgMHhmMTYwMDU0IC9kZXYvbWVtIHwgbW9yZQppLmUuIHRhc2tfc3RydWN0K2FjdGl2ZV9tbSBvZmZzZXQKdG8gbG9vayBhdCB0aGUgYWN0aXZlX21tIG1lbWJlcgpmMTYwMDU0IDBmZWUgY2M2MCAwMDE5IGUzMzQgMDAwMCAwMDAwIDAwMDAgMDAxMQpoZXhkdW1wIC1zIDB4MGZlZWNjNmMgL2Rldi9tZW0gfCBtb3JlCmkuZS4gYWN0aXZlX21tK3BnZCBvZmZzZXQKZmVlY2M2YyAwZjJjIDAwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMSAwMDAwIDAwMTAKd2UgZ2V0IHNvbWV0aGluZyBsaWtlCm5vdyBkbyAKVFIgSSBSIFNURCA8cGdkfDB4N2Y+IDAuN2ZmZmZmZmYKaS5lLiB0aGUgMHg3ZiBpcyBhZGRlZCBiZWNhdXNlIHRoZSBwZ2Qgb25seQpnaXZlcyB0aGUgcGFnZSB0YWJsZSBvcmlnaW4gJiB3ZSBuZWVkIHRvIHNldCB0aGUgbG93IGJpdHMKdG8gdGhlIG1heGltdW0gcG9zc2libGUgc2VnbWVudCB0YWJsZSBsZW5ndGguClRSIEkgUiBTVEQgMGYyYzAwN2YgMC43ZmZmZmZmZgpvbiB6L0FyY2hpdGVjdHVyZSB5b3UnbGwgcHJvYmFibHkgbmVlZCB0byBkbwpUUiBJIFIgU1REIDxwZ2R8MHg3PiAwLmZmZmZmZmZmZmZmZmZmZmYKdG8gc2V0IHRoZSBUYWJsZVR5cGUgdG8gMHgxICYgdGhlIFRhYmxlIGxlbmd0aCB0byAzLgoKCgpUcmFjaW5nIFByb2dyYW0gRXhjZXB0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJZiB5b3UgZ2V0IGEgY3Jhc2ggd2hpY2ggc2F5cyBzb21ldGhpbmcgbGlrZQppbGxlZ2FsIG9wZXJhdGlvbiBvciBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBmb2xsb3dlZCBieSBhIHJlZ2lzdGVyIGR1bXAKWW91IGNhbiByZXN0YXJ0IGxpbnV4ICYgdHJhY2UgdGhlc2UgdXNpbmcgdGhlIHRyIHByb2cgPHJhbmdlIG9yIHZhbHVlPiB0cmFjZSBvcHRpb24uCgoKClRoZSBtb3N0IGNvbW1vbiBvbmVzIHlvdSB3aWxsIG5vcm1hbGx5IGJlIHRyYWNpbmcgZm9yIGlzCjE9b3BlcmF0aW9uIGV4Y2VwdGlvbgoyPXByaXZpbGVnZWQgb3BlcmF0aW9uIGV4Y2VwdGlvbgo0PXByb3RlY3Rpb24gZXhjZXB0aW9uCjU9YWRkcmVzc2luZyBleGNlcHRpb24KNj1zcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbgoxMD1zZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbgoxMT1wYWdlIHRyYW5zbGF0aW9uIGV4Y2VwdGlvbgoKVGhlIGZ1bGwgbGlzdCBvZiB0aGVzZSBpcyBvbiBwYWdlIDIyIG9mIHRoZSBjdXJyZW50IHMvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5LgplLmcuCnRyIHByb2cgMTAgd2lsbCB0cmFjZSBzZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbnMuCnRyIHByb2cgb24gaXRzIG93biB3aWxsIHRyYWNlIGFsbCBwcm9ncmFtIGludGVycnVwdGlvbiBjb2Rlcy4KClRyYWNlIFNldHMKLS0tLS0tLS0tLQpPbiBzdGFydGluZyBWTSB5b3UgYXJlIGluaXRpYWxseSBpbiB0aGUgSU5JVElBTCB0cmFjZSBzZXQuCllvdSBjYW4gZG8gYSBRIFRSIHRvIHZlcmlmeSB0aGlzLgpJZiB5b3UgaGF2ZSBhIGNvbXBsZXggdHJhY2luZyBzaXR1YXRpb24gd2hlcmUgeW91IHdpc2ggdG8gd2FpdCBmb3IgaW5zdGFuY2UgCnRpbGwgYSBkcml2ZXIgaXMgb3BlbiBiZWZvcmUgeW91IHN0YXJ0IHRyYWNpbmcgSU8sIGJ1dCBrbm93IGluIHlvdXIKaGVhcnQgdGhhdCB5b3UgYXJlIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzZXZlcmFsIHJ1bnMgdGhyb3VnaCB0aGUgY29kZSB0aWxsIHlvdQpoYXZlIGEgY2x1ZSB3aGF0cyBnb2luZyBvbi4gCgpXaGF0IHlvdSBjYW4gZG8gaXMKVFIgSSBQU1dBIDxEcml2ZXIgb3BlbiBhZGRyZXNzPgpoaXQgYiB0byBjb250aW51ZSB0aWxsIGJyZWFrcG9pbnQKcmVhY2ggdGhlIGJyZWFrcG9pbnQKbm93IGRvIHlvdXIKVFIgR09UTyBCIApUUiBJTyA3YzA4LTdjMDkgaW5zdCBpbnQgcnVuIApvciB3aGF0ZXZlciB0aGUgSU8gY2hhbm5lbHMgeW91IHdpc2ggdG8gdHJhY2UgYXJlICYgaGl0IGIKClRvIGdvdCBiYWNrIHRvIHRoZSBpbml0aWFsIHRyYWNlIHNldCBkbwpUUiBHT1RPIElOSVRJQUwKJiB0aGUgVFIgSSBQU1dBIDxEcml2ZXIgb3BlbiBhZGRyZXNzPiB3aWxsIGJlIHRoZSBvbmx5IGFjdGl2ZSBicmVha3BvaW50IGFnYWluLgoKClRyYWNpbmcgbGludXggc3lzY2FsbHMgdW5kZXIgVk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTeXNjYWxscyBhcmUgaW1wbGVtZW50ZWQgb24gTGludXggZm9yIFMzOTAgYnkgdGhlIFN1cGVydmlzb3IgY2FsbCBpbnN0cnVjdGlvbiAoU1ZDKSB0aGVyZSAyNTYgCnBvc3NpYmlsaXRpZXMgb2YgdGhlc2UgYXMgdGhlIGluc3RydWN0aW9uIGlzIG1hZGUgdXAgb2YgYSAgMHhBIG9wY29kZSAmIHRoZSBzZWNvbmQgYnl0ZSBiZWluZwp0aGUgc3lzY2FsbCBudW1iZXIuIFRoZXkgYXJlIHRyYWNlZCB1c2luZyB0aGUgc2ltcGxlIGNvbW1hbmQuClRSIFNWQyAgPE9wdGlvbmFsIHZhbHVlIG9yIHJhbmdlPgp0aGUgc3lzY2FsbHMgYXJlIGRlZmluZWQgaW4gbGludXgvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAplLmcuIHRvIHRyYWNlIGFsbCBmaWxlIG9wZW5zIGp1c3QgZG8KVFIgU1ZDIDUgKCBhcyB0aGlzIGlzIHRoZSBzeXNjYWxsIG51bWJlciBvZiBvcGVuICkKCgpTTVAgU3BlY2lmaWMgY29tbWFuZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKUSBDUFVTIGRpc3BsYXlzIGFsbCB0aGUgQ1BVJ3MgYXZhaWxhYmxlIHRvIHlvdXIgdmlydHVhbCBtYWNoaW5lClRvIGZpbmQgdGhlIGNwdSB0aGF0IHRoZSBjdXJyZW50IGNwdSBWTSBkZWJ1Z2dlciBjb21tYW5kcyBhcmUgYmVpbmcgZGlyZWN0ZWQgYXQgZG8KUSBDUFUgdG8gY2hhbmdlIHRoZSBjdXJyZW50IGNwdSBWTSBkZWJ1Z2dlciBjb21tYW5kcyBhcmUgYmVpbmcgZGlyZWN0ZWQgYXQgZG8KQ1BVIDxkZXNpcmVkIGNwdSBubz4KCk9uIGEgU01QIGd1ZXN0IGlzc3VlIGEgY29tbWFuZCB0byBhbGwgQ1BVcyB0cnkgcHJlZml4aW5nIHRoZSBjb21tYW5kIHdpdGggY3B1IGFsbC4KVG8gaXNzdWUgYSBjb21tYW5kIHRvIGEgcGFydGljdWxhciBjcHUgdHJ5IGNwdSA8Y3B1IG51bWJlcj4gZS5nLgpDUFUgMDEgVFIgSSBSIDIwMDAuMzAwMApJZiB5b3UgYXJlIHJ1bm5pbmcgb24gYSBndWVzdCB3aXRoIHNldmVyYWwgY3B1cyAmIHlvdSBoYXZlIGEgSU8gcmVsYXRlZCBwcm9ibGVtCiYgY2Fubm90IGZvbGxvdyB0aGUgZmxvdyBvZiBjb2RlIGJ1dCB5b3Uga25vdyBpdCBpc24ndCBzbXAgcmVsYXRlZC4KZnJvbSB0aGUgYmFzaCBwcm9tcHQgaXNzdWUKc2h1dGRvd24gLWggbm93IG9yIGhhbHQuCmRvIGEgUSBDUFVTIHRvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKZGV0YWNoIGVhY2ggb25lIG9mIHRoZW0gZnJvbSBjcCBleGNlcHQgY3B1IDAgCmJ5IGlzc3VpbmcgYSAKREVUQUNIIENQVSAwMS0obnVtYmVyIG9mIGNwdXMgaW4gY29uZmlndXJhdGlvbikKJiBib290IGxpbnV4IGFnYWluLgpUUiBTSUdQIHdpbGwgdHJhY2UgaW50ZXIgcHJvY2Vzc29yIHNpZ25hbCBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgpERUZJTkUgQ1BVIDAxLShudW1iZXIgaW4gY29uZmlndXJhdGlvbikgCndpbGwgZ2V0IHlvdXIgZ3Vlc3RzIGNwdXMgYmFjay4KCgpIZWxwIGZvciBkaXNwbGF5aW5nIGFzY2lpIHRleHRzdHJpbmdzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KT24gdGhlIHZlcnkgbGF0ZXN0IFZNIE51Y2xldXMnZXMgVk0gY2FuIG5vdyBkaXNwbGF5IGFzY2lpCiggdGhhbmtzIE5lYWxlIGZvciB0aGUgaGludCApIGJ5IGRvaW5nCkQgVFg8bG93YWRkcj4uPGxlbj4KZS5nLgpEIFRYMC4xMDAKCkFsdGVybmF0aXZlbHkKPT09PT09PT09PT09PQpVbmRlciBvbGRlciBWTSBkZWJ1Z2dlcnMgKCBJIGxvdmUgRUJESUMgdG9vICkgeW91IGNhbiB1c2UgdGhpcyBsaXR0bGUgcHJvZ3JhbSBJIHdyb3RlIHdoaWNoCndpbGwgY29udmVydCBhIGNvbW1hbmQgbGluZSBvZiBoZXggZGlnaXRzIHRvIGFzY2lpIHRleHQgd2hpY2ggY2FuIGJlIGNvbXBpbGVkIHVuZGVyIGxpbnV4ICYgCnlvdSBjYW4gY29weSB0aGUgaGV4IGRpZ2l0cyBmcm9tIHlvdXIgeDMyNzAgdGVybWluYWwgdG8geW91ciB4dGVybSBpZiB5b3UgYXJlIGRlYnVnZ2luZwpmcm9tIGEgbGludXhib3guCgpUaGlzIGlzIHF1aXRlIHVzZWZ1bCB3aGVuIGxvb2tpbmcgYXQgYSBwYXJhbWV0ZXIgcGFzc2VkIGluIGFzIGEgdGV4dCBzdHJpbmcKdW5kZXIgVk0gKCB1bmxlc3MgeW91IGFyZSBnb29kIGF0IGRlY29kaW5nIEFTQ0lJIGluIHlvdXIgaGVhZCApLgoKZS5nLiBjb25zaWRlciB0cmFjaW5nIGFuIG9wZW4gc3lzY2FsbApUUiBTVkMgNQpXZSBoYXZlIHN0b3BwZWQgYXQgYSBicmVha3BvaW50CjAwMDE1MUIwJyBTVkMgICAwQTA1ICAgICAtPiAwMDAxOTA5QScgICBDQyAwCgpEIDIwLjggdG8gY2hlY2sgdGhlIFNWQyBvbGQgcHN3IGluIHRoZSBwcmVmaXggYXJlYSAmIHNlZSB3YXMgaXQgZnJvbSB1c2Vyc3BhY2UKKCBmb3IgdGhlIGxheW91dCBvZiB0aGUgcHJlZml4IGFyZWEgY29uc3VsdCBQMTggb2YgdGhlIHMvMzkwIDM5MCBSZWZlcmVuY2UgU3VtbWFyeSAKaWYgeW91IGhhdmUgaXQgYXZhaWxhYmxlICkuClYwMDAwMDAyMCAgMDcwQzIwMDAgODAwMTUxQjIKVGhlIHByb2JsZW0gc3RhdGUgYml0IHdhc24ndCBzZXQgJiAgaXQncyBhbHNvIHRvbyBlYXJseSBpbiB0aGUgYm9vdCBzZXF1ZW5jZQpmb3IgaXQgdG8gYmUgYSB1c2Vyc3BhY2UgU1ZDIGlmIGl0IHdhcyB3ZSB3b3VsZCBoYXZlIHRvIHRlbXBvcmFyaWx5IHN3aXRjaCB0aGUgCnBzdyB0byB1c2VyIHNwYWNlIGFkZHJlc3Npbmcgc28gd2UgY291bGQgZ2V0IGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIG9wZW4gaW4KZ3ByMi4KTmV4dCBkbyBhIApEIEcyCkdQUiAgMiA9ICAwMDAxNENCNApOb3cgZGlzcGxheSB3aGF0IGdwcjIgaXMgcG9pbnRpbmcgdG8KRCAwMDAxNENCNC4yMApWMDAwMTRDQjQgIDJGNjQ2NTc2IDJGNjM2RjZFIDczNkY2QzY1IDAwMDAxQkY1ClYwMDAxNENDNCAgRkMwMDAxNEMgQjQwMDEwMDEgRTAwMDEwMDAgQjgwNzA3MDcKTm93IGNvcHkgdGhlIHRleHQgdGlsbCB0aGUgZmlyc3QgMDAgaGV4ICggd2hpY2ggaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCnRvIGFuIHh0ZXJtICYgZG8gaGV4MmFzY2lpIG9uIGl0LgpoZXgyYXNjaWkgMkY2NDY1NzYgMkY2MzZGNkUgNzM2RjZDNjUgMDAgCm91dHB1dHMKRGVjb2RlZCBIZXg6PS8gZCBlIHYgLyBjIG8gbiBzIG8gbCBlIDB4MDAgCldlIHdlcmUgb3BlbmluZyB0aGUgY29uc29sZSBkZXZpY2UsCgpZb3UgY2FuIGNvbXBpbGUgdGhlIGNvZGUgYmVsb3cgeW91cnNlbGYgZm9yIHByYWN0aWNlIDotKSwKLyoKICogICAgaGV4MmFzY2lpLmMKICogICAgYSB1c2VmdWwgbGl0dGxlIHRvb2wgZm9yIGNvbnZlcnRpbmcgYSBoZXhhZGVjaW1hbCBjb21tYW5kIGxpbmUgdG8gYXNjaWkKICoKICogICAgQXV0aG9yKHMpOiBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCiAqICAgIChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24uCiAqLyAgIAojaW5jbHVkZSA8c3RkaW8uaD4KCmludCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKewogIGludCBjbnQxLGNudDIsbGVuLHRvZ2dsZT0wOwogIGludCBzdGFydGNudD0xOwogIHVuc2lnbmVkIGNoYXIgYyxoZXg7CiAgCiAgaWYoYXJnYz4xJiYoc3RyY21wKGFyZ3ZbMV0sIi1hIik9PTApKQogICAgIHN0YXJ0Y250PTI7CiAgcHJpbnRmKCJEZWNvZGVkIEhleDo9Iik7CiAgZm9yKGNudDE9c3RhcnRjbnQ7Y250MTxhcmdjO2NudDErKykKICB7CiAgICBsZW49c3RybGVuKGFyZ3ZbY250MV0pOwogICAgZm9yKGNudDI9MDtjbnQyPGxlbjtjbnQyKyspCiAgICB7CiAgICAgICBjPWFyZ3ZbY250MV1bY250Ml07CiAgICAgICBpZihjPj0nMCcmJmM8PSc5JykKCSAgYz1jLScwJzsKICAgICAgIGlmKGM+PSdBJyYmYzw9J0YnKQoJICBjPWMtJ0EnKzEwOwogICAgICAgaWYoYz49J2EnJiZjPD0nZicpCgkgIGM9Yy0nYScrMTA7CiAgICAgICBzd2l0Y2godG9nZ2xlKQogICAgICAgewoJICBjYXNlIDA6CgkgICAgIGhleD1jPDw0OwoJICAgICB0b2dnbGU9MTsKCSAgYnJlYWs7CgkgIGNhc2UgMToKCSAgICAgaGV4Kz1jOwoJICAgICBpZihoZXg8MzJ8fGhleD4xMjcpCgkgICAgIHsKCQlpZihzdGFydGNudD09MSkKCQkgICBwcmludGYoIjB4JTAyWCAiLChpbnQpaGV4KTsKCQllbHNlCgkJICAgcHJpbnRmKCIuIik7CgkgICAgIH0KCSAgICAgZWxzZQoJICAgICB7CgkgICAgICAgcHJpbnRmKCIlYyIsaGV4KTsKCSAgICAgICBpZihzdGFydGNudD09MSkKCQkgIHByaW50ZigiICIpOwoJICAgICB9CgkgICAgIHRvZ2dsZT0wOwoJICBicmVhazsKICAgICAgIH0KICAgIH0KICB9CiAgcHJpbnRmKCJcbiIpOwp9CgoKCgpTdGFjayB0cmFjaW5nIHVuZGVyIFZNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQSBiYXNpYyBiYWNrdHJhY2UKLS0tLS0tLS0tLS0tLS0tLS0KCkhlcmUgYXJlIHRoZSB0cmlja3MgSSB1c2UgOSBvdXQgb2YgMTAgdGltZXMgaXQgd29ya3MgcHJldHR5IHdlbGwsCgpXaGVuIHlvdXIgYmFja2NoYWluIHJlYWNoZXMgYSBkZWFkIGVuZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIGNhbiBoYXBwZW4gd2hlbiBhbiBleGNlcHRpb24gaGFwcGVucyBpbiB0aGUga2VybmVsICYgdGhlIGtlcm5lbCBpcyBlbnRlcmVkIHR3aWNlCmlmIHlvdSByZWFjaCB0aGUgTlVMTCBwb2ludGVyIGF0IHRoZSBlbmQgb2YgdGhlIGJhY2sgY2hhaW4geW91IHNob3VsZCBiZQphYmxlIHRvIHNuaWZmIGZ1cnRoZXIgYmFjayBpZiB5b3UgZm9sbG93IHRoZSBmb2xsb3dpbmcgdHJpY2tzLgoxKSBBIGtlcm5lbCBhZGRyZXNzIHNob3VsZCBiZSBlYXN5IHRvIHJlY29nbmlzZSBzaW5jZSBpdCBpcyBpbgpwcmltYXJ5IHNwYWNlICYgdGhlIHByb2JsZW0gc3RhdGUgYml0IGlzbid0IHNldCAmIGFsc28KVGhlIEhpIGJpdCBvZiB0aGUgYWRkcmVzcyBpcyBzZXQuCjIpIEFub3RoZXIgYmFja2NoYWluIHNob3VsZCBhbHNvIGJlIGVhc3kgdG8gcmVjb2duaXNlIHNpbmNlIGl0IGlzIGFuIAphZGRyZXNzIHBvaW50aW5nIHRvIGFub3RoZXIgYWRkcmVzcyBhcHByb3hpbWF0ZWx5IDEwMCBieXRlcyBvciAweDcwIGhleApiZWhpbmQgdGhlIGN1cnJlbnQgc3RhY2twb2ludGVyLgoKCkhlcmUgaXMgc29tZSBwcmFjdGljZS4KYm9vdCB0aGUga2VybmVsICYgaGl0IFBBMSBhdCBzb21lIHJhbmRvbSB0aW1lCmQgZyB0byBkaXNwbGF5IHRoZSBncHJzLCB0aGlzIHNob3VsZCBkaXNwbGF5IHNvbWV0aGluZyBsaWtlCkdQUiAgMCA9ICAwMDAwMDAwMSAgMDAxNTYwMTggIDAwMTQzNTlDICAwMDAwMDAwMApHUFIgIDQgPSAgMDAwMDAwMDEgIDAwMUI4ODg4ICAwMDAwMDNFMCAgMDAwMDAwMDAKR1BSICA4ID0gIDAwMTAwMDgwICAwMDEwMDA4NCAgMDAwMDAwMDAgIDAwMEZFMDAwCkdQUiAxMiA9ICAwMDAxMDQwMCAgODAwMUIyREMgIDgwMDFCMzZBICAwMDBGRkVEOApOb3RlIHRoYXQgR1BSMTQgaXMgYSByZXR1cm4gYWRkcmVzcyBidXQgYXMgd2UgYXJlIHJlYWwgbWVuIHdlIGFyZSBnb2luZyB0bwp0cmFjZSB0aGUgc3RhY2suCmRpc3BsYXkgMHg0MCBieXRlcyBhZnRlciB0aGUgc3RhY2sgcG9pbnRlci4KClYwMDBGRkVEOCAgMDAwRkZGMzggODAwMUI4MzggODAwMTRDOEUgMDAwRkZGMzgKVjAwMEZGRUU4ICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDNFMCAwMDAwMDAwMApWMDAwRkZFRjggIDAwMTAwMDgwIDAwMTAwMDg0IDAwMDAwMDAwIDAwMEZFMDAwClYwMDBGRkYwOCAgMDAwMTA0MDAgODAwMUIyREMgODAwMUIzNkEgMDAwRkZFRDgKCgpBaCBub3cgbG9vayBhdCB3aGF0cyBpbiBzcCs1NiAoc3ArMHgzOCkgdGhpcyBpcyA4MDAxQjM2QSBvdXIgc2F2ZWQgcjE0IGlmCnlvdSBsb29rIGFib3ZlIGF0IG91ciBzdGFja2ZyYW1lICYgYWxzbyBhZ3JlZXMgd2l0aCBHUFIxNC4KCm5vdyBiYWNrY2hhaW4gCmQgMDAwRkZGMzguNDAKd2Ugbm93IGFyZSB0YWtpbmcgdGhlIGNvbnRlbnRzIG9mIFNQIHRvIGdldCBvdXIgZmlyc3QgYmFja2NoYWluLgoKVjAwMEZGRjM4ICAwMDBGRkZBMCAwMDAwMDAwMCAwMDAxNDk5NSAwMDE0NzA5NApWMDAwRkZGNDggIDAwMTQ3MDkwIDAwMTQ3MEEwIDAwMDAwM0UwIDAwMDAwMDAwClYwMDBGRkY1OCAgMDAxMDAwODAgMDAxMDAwODQgMDAwMDAwMDAgMDAxQkYxRDAKVjAwMEZGRjY4ICAwMDAxMDQwMCA4MDAxNDlCQSA4MDAxNENBNiAwMDBGRkYzOAoKVGhpcyBkaXNwbGF5cyBhIDJuZCByZXR1cm4gYWRkcmVzcyBvZiA4MDAxNENBNgoKbm93IGRvIGQgMDAwRkZGQTAuNDAgZm9yIG91ciAzcmQgYmFja2NoYWluCgpWMDAwRkZGQTAgIDA0QjUyMDAyIDAwMDExMDdGIDAwMDAwMDAwIDAwMDAwMDAwClYwMDBGRkZCMCAgMDAwMDAwMDAgMDAwMDAwMDAgRkYwMDAwMDAgMDAwMTEwN0YKVjAwMEZGRkMwICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMApWMDAwRkZGRDAgIDAwMDEwNDAwIDgwMDEwODAyIDgwMDEwODVBIDAwMEZGRkEwCgoKb3VyIDNyZCByZXR1cm4gYWRkcmVzcyBpcyA4MDAxMDg1QQoKYXMgdGhlIDA0QjUyMDAyIGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIHJ1YmJpc2ggaXQgaXMgZmFpciB0byBhc3N1bWUgdGhhdCB0aGUga2VybmVsIGVudHJ5IHJvdXRpbmVzCmZvciB0aGUgc2FrZSBvZiBvcHRpbWlzYXRpb24gZG9uJ3Qgc2V0IHVwIGEgYmFja2NoYWluLgoKbm93IGxvb2sgYXQgU3lzdGVtLm1hcCB0byBzZWUgaWYgdGhlIGFkZHJlc3NlcyBtYWtlIGFueSBzZW5zZS4KCmdyZXAgLWkgMDAwMWIzIFN5c3RlbS5tYXAKb3V0cHV0cyBhbW9uZyBvdGhlciB0aGluZ3MKMDAwMWIzMDQgVCBjcHVfaWRsZSAKc28gODAwMUIzNkEKaXMgY3B1X2lkbGUrMHg2NiAoIHF1aWV0IHRoZSBjcHUgaXMgYXNsZWVwLCBkb24ndCB3YWtlIGl0ICkKCgpncmVwIC1pIDAwMDE0IFN5c3RlbS5tYXAgCnByb2R1Y2VzIGFtb25nIG90aGVyIHRoaW5ncwowMDAxNGE3OCBUIHN0YXJ0X2tlcm5lbCAgCnNvIDAwMTRDQTYgaXMgc3RhcnRfa2VybmVsK3NvbWUgaGV4IG51bWJlciBJIGNhbid0IGFkZCBpbiBteSBoZWFkLgoKZ3JlcCAtaSAwMDEwOCBTeXN0ZW0ubWFwIAp0aGlzIHByb2R1Y2VzCjAwMDEwODAwIFQgX3N0ZXh0CnNvICAgODAwMTA4NUEgaXMgX3N0ZXh0KzB4NWEKCkNvbmdyYXRzIHlvdSd2ZSBkb25lIHlvdXIgZmlyc3QgYmFja2NoYWluLgoKCgpzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIElPIE92ZXJ2aWV3Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkkgYW0gbm90IGdvaW5nIHRvIGdpdmUgYSBjb3Vyc2UgaW4gMzkwIElPIGFyY2hpdGVjdHVyZSBhcyB0aGlzIHdvdWxkIHRha2UgbWUgcXVpdGUgYQp3aGlsZSAmIEknbSBubyBleHBlcnQuIEluc3RlYWQgSSdsbCBnaXZlIGEgMzkwIElPIGFyY2hpdGVjdHVyZSBzdW1tYXJ5IGZvciBEdW1taWVzIGlmIHlvdSBoYXZlIAp0aGUgcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24gYXZhaWxhYmxlIHJlYWQgdGhpcyBpbnN0ZWFkLiBJZiBub3RoaW5nIGVsc2UgeW91IG1heSBmaW5kIGEgZmV3IAp1c2VmdWwga2V5d29yZHMgaW4gaGVyZSAmIGJlIGFibGUgdG8gdXNlIHRoZW0gb24gYSB3ZWIgc2VhcmNoIGVuZ2luZSBsaWtlIGFsdGF2aXN0YSB0byBmaW5kIAptb3JlIHVzZWZ1bCBpbmZvcm1hdGlvbi4KClVubGlrZSBvdGhlciBidXMgYXJjaGl0ZWN0dXJlcyBtb2Rlcm4gMzkwIHN5c3RlbXMgZG8gdGhlaXIgSU8gdXNpbmcgbW9zdGx5CmZpYnJlIG9wdGljcyAmIGRldmljZXMgc3VjaCBhcyB0YXBlcyAmIGRpc2tzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsIG1haW5mcmFtZXMsCmFsc28gUzM5MCBjYW4gc3VwcG9ydCB1cCB0byA2NTUzNiBkZXZpY2VzIHdoaWxlIGEgaGlnaCBlbmQgUEMgYmFzZWQgc3lzdGVtIG1pZ2h0IGJlIGNob2tpbmcKd2l0aCBhcm91bmQgNjQuIEhlcmUgaXMgc29tZSBvZiB0aGUgY29tbW9uIElPIHRlcm1pbm9sb2d5CgpTdWJjaGFubmVsOgpUaGlzIGlzIHRoZSBsb2dpY2FsIG51bWJlciBtb3N0IElPIGNvbW1hbmRzIHVzZSB0byB0YWxrIHRvIGFuIElPIGRldmljZSB0aGVyZSBjYW4gYmUgdXAgdG8KMHgxMDAwMCAoNjU1MzYpIG9mIHRoZXNlIGluIGEgY29uZmlndXJhdGlvbiB0eXBpY2FsbHkgdGhlcmUgaXMgYSBmZXcgaHVuZHJlZC4gVW5kZXIgVk0KZm9yIHNpbXBsaWNpdHkgdGhleSBhcmUgYWxsb2NhdGVkIGNvbnRpZ3VvdXNseSwgaG93ZXZlciBvbiB0aGUgbmF0aXZlIGhhcmR3YXJlIHRoZXkgYXJlIG5vdAp0aGV5IHR5cGljYWxseSBzdGF5IGNvbnNpc3RlbnQgYmV0d2VlbiBib290cyBwcm92aWRlZCBubyBuZXcgaGFyZHdhcmUgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KVW5kZXIgTGludXggZm9yIDM5MCB3ZSB1c2UgdGhlc2UgYXMgSVJRJ3MgJiBhbHNvIHdoZW4gaXNzdWluZyBhbiBJTyBjb21tYW5kIChDTEVBUiBTVUJDSEFOTkVMLApIQUxUIFNVQkNIQU5ORUwsTU9ESUZZIFNVQkNIQU5ORUwsUkVTVU1FIFNVQkNIQU5ORUwsU1RBUlQgU1VCQ0hBTk5FTCxTVE9SRSBTVUJDSEFOTkVMICYgClRFU1QgU1VCQ0hBTk5FTCApIHdlIHVzZSB0aGlzIGFzIHRoZSBJRCBvZiB0aGUgZGV2aWNlIHdlIHdpc2ggdG8gdGFsayB0bywgdGhlIG1vc3QKaW1wb3J0YW50IG9mIHRoZXNlIGluc3RydWN0aW9ucyBhcmUgU1RBUlQgU1VCQ0hBTk5FTCAoIHRvIHN0YXJ0IElPICksIFRFU1QgU1VCQ0hBTk5FTCAoIHRvIGNoZWNrCndoZXRoZXIgdGhlIElPIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKSwgJiBIQUxUIFNVQkNIQU5ORUwgKCB0byBraWxsIElPICksIGEgc3ViY2hhbm5lbApjYW4gaGF2ZSB1cCB0byA4IGNoYW5uZWwgcGF0aHMgdG8gYSBkZXZpY2UgdGhpcyBvZmZlcnMgcmVkdW5kYW5jeSBpZiBvbmUgaXMgbm90IGF2YWlsYWJsZS4KCgpEZXZpY2UgTnVtYmVyOgpUaGlzIG51bWJlciByZW1haW5zIHN0YXRpYyAmIElzIGNsb3NlbHkgdGllZCB0byB0aGUgaGFyZHdhcmUsIHRoZXJlIGFyZSA2NTUzNiBvZiB0aGVzZQphbHNvIHRoZXkgYXJlIG1hZGUgdXAgb2YgYSBDSFBJRCAoIENoYW5uZWwgUGF0aCBJRCwgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgOCBiaXRzICkgCiYgYW5vdGhlciBsc2IgOCBiaXRzLiBUaGVzZSByZW1haW4gc3RhdGljIGV2ZW4gaWYgbW9yZSBkZXZpY2VzIGFyZSBpbnNlcnRlZCBvciByZW1vdmVkCmZyb20gdGhlIGhhcmR3YXJlLCB0aGVyZSBpcyBhIDEgdG8gMSBtYXBwaW5nIGJldHdlZW4gU3ViY2hhbm5lbHMgJiBEZXZpY2UgTnVtYmVycyBwcm92aWRlZApkZXZpY2VzIGFyZW4ndCBpbnNlcnRlZCBvciByZW1vdmVkLgoKQ2hhbm5lbCBDb250cm9sIFdvcmRzOgpDQ1dTIGFyZSBsaW5rZWQgbGlzdHMgb2YgaW5zdHJ1Y3Rpb25zIGluaXRpYWxseSBwb2ludGVkIHRvIGJ5IGFuIG9wZXJhdGlvbiByZXF1ZXN0IGJsb2NrIChPUkIpLAp3aGljaCBpcyBpbml0aWFsbHkgZ2l2ZW4gdG8gU3RhcnQgU3ViY2hhbm5lbCAoU1NDSCkgY29tbWFuZCBhbG9uZyB3aXRoIHRoZSBzdWJjaGFubmVsIG51bWJlcgpmb3IgdGhlIElPIHN1YnN5c3RlbSB0byBwcm9jZXNzIHdoaWxlIHRoZSBDUFUgY29udGludWVzIGV4ZWN1dGluZyBub3JtYWwgY29kZS4KVGhlc2UgY29tZSBpbiB0d28gZmxhdm91cnMsIEZvcm1hdCAwICggMjQgYml0IGZvciBiYWNrd2FyZCApCmNvbXBhdGliaWxpdHkgJiBGb3JtYXQgMSAoIDMxIGJpdCApLiBUaGVzZSBhcmUgdHlwaWNhbGx5IHVzZWQgdG8gaXNzdWUgcmVhZCAmIHdyaXRlIAooICYgbWFueSBvdGhlciBpbnN0cnVjdGlvbnMgKSB0aGV5IGNvbnNpc3Qgb2YgYSBsZW5ndGggZmllbGQgJiBhbiBhYnNvbHV0ZSBhZGRyZXNzIGZpZWxkLgpGb3IgZWFjaCBJTyB0eXBpY2FsbHkgZ2V0IDEgb3IgMiBpbnRlcnJ1cHRzIG9uZSBmb3IgY2hhbm5lbCBlbmQgKCBwcmltYXJ5IHN0YXR1cyApIHdoZW4gdGhlCmNoYW5uZWwgaXMgaWRsZSAmIHRoZSBzZWNvbmQgZm9yIGRldmljZSBlbmQgKCBzZWNvbmRhcnkgc3RhdHVzICkgc29tZXRpbWVzIHlvdSBnZXQgYm90aApjb25jdXJyZW50bHksIHlvdSBjaGVjayBob3cgdGhlIElPIHdlbnQgb24gYnkgaXNzdWluZyBhIFRFU1QgU1VCQ0hBTk5FTCBhdCBlYWNoIGludGVycnVwdCwKZnJvbSB3aGljaCB5b3UgcmVjZWl2ZSBhbiBJbnRlcnJ1cHRpb24gcmVzcG9uc2UgYmxvY2sgKElSQikuIElmIHlvdSBnZXQgY2hhbm5lbCAmIGRldmljZSBlbmQgCnN0YXR1cyBpbiB0aGUgSVJCIHdpdGhvdXQgY2hhbm5lbCBjaGVja3MgZXRjLiB5b3VyIElPIHByb2JhYmx5IHdlbnQgb2theS4gSWYgeW91IGRpZG4ndCB5b3UKcHJvYmFibHkgbmVlZCBhIGRvY3RvciB0byBleGFtaW5lIHRoZSBJUkIgJiBleHRlbmRlZCBzdGF0dXMgd29yZCBldGMuCklmIGFuIGVycm9yIG9jY3VycywgbW9yZSBzb3BoaXN0aWNhdGVkIGNvbnRyb2wgdW5pdHMgaGF2ZSBhIGZhY2lsaXR5IGtub3duIGFzCmNvbmN1cnJlbnQgc2Vuc2UgdGhpcyBtZWFucyB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyBFeHRlbmRlZCBzZW5zZSBpbmZvcm1hdGlvbiB3aWxsCmJlIHByZXNlbnRlZCBpbiB0aGUgRXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIElSQiBpZiBub3QgeW91IGhhdmUgdG8gaXNzdWUgYQpzdWJzZXF1ZW50IFNFTlNFIENDVyBjb21tYW5kIGFmdGVyIHRoZSB0ZXN0IHN1YmNoYW5uZWwuIAoKClRQSSggVGVzdCBwZW5kaW5nIGludGVycnVwdCkgY2FuIGFsc28gYmUgdXNlZCBmb3IgcG9sbGVkIElPIGJ1dCBpbiBtdWx0aXRhc2tpbmcgbXVsdGlwcm9jZXNzb3IKc3lzdGVtcyBpdCBpc24ndCByZWNvbW1lbmRlZCBleGNlcHQgZm9yIGNoZWNraW5nIHNwZWNpYWwgY2FzZXMgKCBpLmUuIG5vbiBsb29waW5nIGNoZWNrcyBmb3IKcGVuZGluZyBJTyBldGMuICkuCgpTdG9yZSBTdWJjaGFubmVsICYgTW9kaWZ5IFN1YmNoYW5uZWwgY2FuIGJlIHVzZWQgdG8gZXhhbWluZSAmIG1vZGlmeSBvcGVyYXRpbmcgY2hhcmFjdGVyaXN0aWNzCm9mIGEgc3ViY2hhbm5lbCAoIGUuZy4gY2hhbm5lbCBwYXRocyApLgoKT3RoZXIgSU8gcmVsYXRlZCBUZXJtczoKU3lzcGxleDogUzM5MCdzIENsdXN0ZXJpbmcgVGVjaG5vbG9neQpRRElPOiBTMzkwJ3MgbmV3IGhpZ2ggc3BlZWQgSU8gYXJjaGl0ZWN0dXJlIHRvIHN1cHBvcnQgZGV2aWNlcyBzdWNoIGFzIGdpZ2FiaXQgZXRoZXJuZXQsCnRoaXMgYXJjaGl0ZWN0dXJlIGlzIGFsc28gZGVzaWduZWQgdG8gYmUgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggdXAgJiBjb21pbmcgNjQgYml0IG1hY2hpbmVzLgoKCkdlbmVyYWwgQ29uY2VwdHMgCgpJbnB1dCBPdXRwdXQgUHJvY2Vzc29ycyAoSU9QJ3MpIGFyZSByZXNwb25zaWJsZSBmb3IgY29tbXVuaWNhdGluZyBiZXR3ZWVuCnRoZSBtYWluZnJhbWUgQ1BVJ3MgJiB0aGUgY2hhbm5lbCAmIHJlbGlldmUgdGhlIG1haW5mcmFtZSBDUFUncyBmcm9tIHRoZQpidXJkZW4gb2YgY29tbXVuaWNhdGluZyB3aXRoIElPIGRldmljZXMgZGlyZWN0bHksIHRoaXMgYWxsb3dzIHRoZSBDUFUncyB0byAKY29uY2VudHJhdGUgb24gZGF0YSBwcm9jZXNzaW5nLiAKCklPUCdzIGNhbiB1c2Ugb25lIG9yIG1vcmUgbGlua3MgKCBrbm93biBhcyBjaGFubmVsIHBhdGhzICkgdG8gdGFsayB0byBlYWNoIApJTyBkZXZpY2UuIEl0IGZpcnN0IGNoZWNrcyBmb3IgcGF0aCBhdmFpbGFiaWxpdHkgJiBjaG9vc2VzIGFuIGF2YWlsYWJsZSBvbmUsCnRoZW4gc3RhcnRzICggJiBzb21ldGltZXMgdGVybWluYXRlcyBJTyApLgpUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGNoYW5uZWwgcGF0aDogRVNDT04gJiB0aGUgUGFyYWxsZWwgSU8gaW50ZXJmYWNlLgoKSU8gZGV2aWNlcyBhcmUgYXR0YWNoZWQgdG8gY29udHJvbCB1bml0cywgY29udHJvbCB1bml0cyBwcm92aWRlIHRoZQpsb2dpYyB0byBpbnRlcmZhY2UgdGhlIGNoYW5uZWwgcGF0aHMgJiBjaGFubmVsIHBhdGggSU8gcHJvdG9jb2xzIHRvIAp0aGUgSU8gZGV2aWNlcywgdGhleSBjYW4gYmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBkZXZpY2VzIG9yIGhvdXNlZCBzZXBhcmF0ZWx5CiYgb2Z0ZW4gdGFsayB0byBzZXZlcmFsIHNpbWlsYXIgZGV2aWNlcyAoIHR5cGljYWwgZXhhbXBsZXMgd291bGQgYmUgcmFpZCAKY29udHJvbGxlcnMgb3IgYSBjb250cm9sIHVuaXQgd2hpY2ggY29ubmVjdHMgdG8gMTAwMCAzMjcwIHRlcm1pbmFscyApLgoKCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwKICAgIHwgfCBDUFUgfCB8IENQVSB8IHwgQ1BVIHwgfCBDUFUgfCAgfCAgTWFpbiAgICB8ICB8IEV4cGFuZGVkIHwgICB8CiAgICB8IHwgICAgIHwgfCAgICAgfCB8ICAgICB8IHwgICAgIHwgIHwgIE1lbW9yeSAgfCAgfCAgU3RvcmFnZSB8ICAgfAogICAgfCArLS0tLS0rICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICArLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tKyAgIHwgCiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCAgIElPUCAgICAgICAgfCAgICAgIElPUCAgICAgIHwgICAgICAgSU9QICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICB8fCAgQnVzICYgVGFnIENoYW5uZWwgUGF0aCAgICAgICAgICAgICAgICAgICAgICB8fCBFU0NPTgogICAgICAgICB8fCAgPT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICB8fCBDaGFubmVsCiAgICAgICAgIHx8ICB8fCAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgIHx8IFBhdGgKICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tKwogICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8CiAgICB8ICAgIENVICAgIHwgICAgICAgICAgICAgICB8ICAgIENVICAgIHwgICAgICAgICB8ICAgIENVICAgIHwKICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0rCiAgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICB8CistLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCnxJL08gRGV2aWNlfCB8SS9PIERldmljZXwgICAgICB8SS9PIERldmljZXwgICB8SS9PIERldmljZXwgfEkvTyBEZXZpY2V8CistLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCiAgQ1BVID0gQ2VudHJhbCBQcm9jZXNzaW5nIFVuaXQgICAgCiAgQyA9IENoYW5uZWwgICAgICAgICAgICAgICAgICAgICAgCiAgSU9QID0gSVAgUHJvY2Vzc29yICAgICAgICAgICAgICAgCiAgQ1UgPSBDb250cm9sIFVuaXQKClRoZSAzOTAgSU8gc3lzdGVtcyBjb21lIGluIDIgZmxhdm91cnMgdGhlIGN1cnJlbnQgMzkwIG1hY2hpbmVzIHN1cHBvcnQgYm90aAoKVGhlIE9sZGVyIDM2MCAmIDM3MCBJbnRlcmZhY2Usc29tZXRpbWVzIGNhbGxlZCB0aGUgUGFyYWxsZWwgSS9PIGludGVyZmFjZSwKc29tZXRpbWVzIGNhbGxlZCBCdXMtYW5kIFRhZyAmIHNvbWV0aW1lcyBPcmlnaW5hbCBFcXVpcG1lbnQgTWFudWZhY3R1cmVycwpJbnRlcmZhY2UgKE9FTUkpLgoKVGhpcyBieXRlIHdpZGUgUGFyYWxsZWwgY2hhbm5lbCBwYXRoL2J1cyBoYXMgcGFyaXR5ICYgZGF0YSBvbiB0aGUgIkJ1cyIgY2FibGUgCiYgY29udHJvbCBsaW5lcyBvbiB0aGUgIlRhZyIgY2FibGUuIFRoZXNlIGNhbiBvcGVyYXRlIGluIGJ5dGUgbXVsdGlwbGV4IG1vZGUgZm9yCnNoYXJpbmcgYmV0d2VlbiBzZXZlcmFsIHNsb3cgZGV2aWNlcyBvciBidXJzdCBtb2RlICYgbW9ub3BvbGl6ZSB0aGUgY2hhbm5lbCBmb3IgdGhlCndob2xlIGJ1cnN0LiBVcCB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYWRkcmVzc2VkICBvbiBvbmUgb2YgdGhlc2UgY2FibGVzLiBUaGVzZSBjYWJsZXMgYXJlCmFib3V0IG9uZSBpbmNoIGluIGRpYW1ldGVyLiBUaGUgbWF4aW11bSB1bmV4dGVuZGVkIGxlbmd0aCBzdXBwb3J0ZWQgYnkgdGhlc2UgY2FibGVzIGlzCjEyNSBNZXRlcnMgYnV0IHRoaXMgY2FuIGJlIGV4dGVuZGVkIHVwIHRvIDJrbSB3aXRoIGEgZmlicmUgb3B0aWMgY2hhbm5lbCBleHRlbmRlZCAKc3VjaCBhcyBhIDMwNDQuIFRoZSBtYXhpbXVtIGJ1cnN0IHNwZWVkIHN1cHBvcnRlZCBpcyA0LjUgbWVnYWJ5dGVzIHBlciBzZWNvbmQgaG93ZXZlcgpzb21lIHJlYWxseSBvbGQgcHJvY2Vzc29ycyBzdXBwb3J0IG9ubHkgdHJhbnNmZXIgcmF0ZXMgb2YgMy4wLCAyLjAgJiAxLjAgTUIvc2VjLgpPbmUgb2YgdGhlc2UgcGF0aHMgY2FuIGJlIGRhaXN5IGNoYWluZWQgdG8gdXAgdG8gOCBjb250cm9sIHVuaXRzLgoKCkVTQ09OIGlmIGZpYnJlIG9wdGljIGl0IGlzIGFsc28gY2FsbGVkIEZJQ09OIApXYXMgaW50cm9kdWNlZCBieSBJQk0gaW4gMTk5MC4gSGFzIDIgZmlicmUgb3B0aWMgY2FibGVzICYgdXNlcyBlaXRoZXIgbGVkcyBvciBsYXNlcnMKZm9yIGNvbW11bmljYXRpb24gYXQgYSBzaWduYWxpbmcgcmF0ZSBvZiB1cCB0byAyMDAgbWVnYWJpdHMvc2VjLiBBcyAxMGJpdHMgYXJlIHRyYW5zZmVycmVkCmZvciBldmVyeSA4IGJpdHMgaW5mbyB0aGlzIGRyb3BzIHRvIDE2MCBtZWdhYml0cy9zZWMgJiB0byAxOC42IE1lZ2FieXRlcy9zZWMgb25jZQpjb250cm9sIGluZm8gJiBDUkMgYXJlIGFkZGVkLiBFU0NPTiBvbmx5IG9wZXJhdGVzIGluIGJ1cnN0IG1vZGUuCiAKRVNDT05zIHR5cGljYWwgbWF4IGNhYmxlIGxlbmd0aCBpcyAza20gZm9yIHRoZSBsZWQgdmVyc2lvbiAmIDIwa20gZm9yIHRoZSBsYXNlciB2ZXJzaW9uCmtub3duIGFzIFhERiAoIGV4dGVuZGVkIGRpc3RhbmNlIGZhY2lsaXR5ICkuIFRoaXMgY2FuIGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgdXNpbmcgYW4KRVNDT04gZGlyZWN0b3Igd2hpY2ggdHJpcGxlcyB0aGUgYWJvdmUgbWVudGlvbmVkIHJhbmdlcy4gVW5saWtlIEJ1cyAmIFRhZyBhcyBFU0NPTiBpcwpzZXJpYWwgaXQgdXNlcyBhIHBhY2tldCBzd2l0Y2hpbmcgYXJjaGl0ZWN0dXJlIHRoZSBzdGFuZGFyZCBCdXMgJiBUYWcgY29udHJvbCBwcm90b2NvbAppcyBob3dldmVyIHByZXNlbnQgd2l0aGluIHRoZSBwYWNrZXRzLiBVcCB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gZWFjaCBjb250cm9sCnVuaXQgdGhhdCB1c2VzIG9uZSBvZiB0aGVzZSBpbnRlcmZhY2VzLgoKQ29tbW9uIDM5MCBEZXZpY2VzIGluY2x1ZGU6Ck5ldHdvcmsgYWRhcHRlcnMgdHlwaWNhbGx5IE9TQTIsMzE3MidzLDIxMTYncyAmIE9TQS1FIGdpZ2FiaXQgZXRoZXJuZXQgYWRhcHRlcnMsCkNvbnNvbGVzIDMyNzAgJiAzMjE1ICggYSB0ZWxldHlwZSBlbXVsYXRlZCB1bmRlciBsaW51eCBmb3IgYSBsaW5lIG1vZGUgY29uc29sZSApLgpEQVNEJ3MgZGlyZWN0IGFjY2VzcyBzdG9yYWdlIGRldmljZXMgKCBvdGhlcndpc2Uga25vd24gYXMgaGFyZCBkaXNrcyApLgpUYXBlIERyaXZlcy4KQ1RDICggQ2hhbm5lbCB0byBDaGFubmVsIEFkYXB0ZXJzICksCkVTQ09OIG9yIFBhcmFsbGVsIENhYmxlcyB1c2VkIGFzIGEgdmVyeSBoaWdoIHNwZWVkIHNlcmlhbCBsaW5rCmJldHdlZW4gMiBtYWNoaW5lcy4gV2UgdXNlIDIgY2FibGVzIHVuZGVyIGxpbnV4IHRvIGRvIGEgYmktZGlyZWN0aW9uYWwgc2VyaWFsIGxpbmsuCgoKRGVidWdnaW5nIElPIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgdW5kZXIgVk0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk5vdyB3ZSBhcmUgcmVhZHkgdG8gZ28gb24gd2l0aCBJTyB0cmFjaW5nIGNvbW1hbmRzIHVuZGVyIFZNCgpBIGZldyBzZWxmIGV4cGxhbmF0b3J5IHF1ZXJpZXM6ClEgT1NBClEgQ1RDClEgRElTSyAoIFRoaXMgY29tbWFuZCBpcyBDTVMgc3BlY2lmaWMgKQpRIERBU0QKCgoKCgoKUSBPU0Egb24gbXkgbWFjaGluZSByZXR1cm5zCk9TQSAgN0MwOCBPTiBPU0EgICA3QzA4IFNVQkNIQU5ORUwgPSAwMDAwCk9TQSAgN0MwOSBPTiBPU0EgICA3QzA5IFNVQkNIQU5ORUwgPSAwMDAxCk9TQSAgN0MxNCBPTiBPU0EgICA3QzE0IFNVQkNIQU5ORUwgPSAwMDAyCk9TQSAgN0MxNSBPTiBPU0EgICA3QzE1IFNVQkNIQU5ORUwgPSAwMDAzCgpJZiB5b3UgaGF2ZSBhIGd1ZXN0IHdpdGggY2VydGFpbiBwcml2aWxlZ2VzIHlvdSBtYXkgYmUgYWJsZSB0byBzZWUgZGV2aWNlcwp3aGljaCBkb24ndCBiZWxvbmcgdG8geW91LiBUbyBhdm9pZCB0aGlzLCBhZGQgdGhlIG9wdGlvbiBWLgplLmcuClEgViBPU0EKCk5vdyB1c2luZyB0aGUgZGV2aWNlIG51bWJlcnMgcmV0dXJuZWQgYnkgdGhpcyBjb21tYW5kIHdlIHdpbGwKVHJhY2UgdGhlIGlvIHN0YXJ0aW5nIHVwIG9uIHRoZSBmaXJzdCBkZXZpY2UgN2MwOCAmIDdjMDkKSW4gb3VyIHNpbXBsZXN0IGNhc2Ugd2UgY2FuIHRyYWNlIHRoZSAKc3RhcnQgc3ViY2hhbm5lbHMKbGlrZSBUUiBTU0NIIDdDMDgtN0MwOQpvciB0aGUgaGFsdCBzdWJjaGFubmVscwpvciBUUiBIU0NIIDdDMDgtN0MwOQpNU0NIJ3MgLFNUU0NIJ3MgSSB0aGluayB5b3UgY2FuIGd1ZXNzIHRoZSByZXN0CgpJbmdvJ3MgZmF2b3VyaXRlIHRyaWNrIGlzIHRyYWNpbmcgYWxsIHRoZSBJTydzICYgQ0NXUyAmIHNwb29saW5nIHRoZW0gaW50byB0aGUgcmVhZGVyIG9mIGFub3RoZXIKVk0gZ3Vlc3Qgc28gaGUgY2FuIGZ0cCB0aGUgbG9nZmlsZSBiYWNrIHRvIGhpcyBvd24gbWFjaGluZS5JJ2xsIGRvIGEgc21hbGwgYml0IG9mIHRoaXMgJiBnaXZlIHlvdQogYSBsb29rIGF0IHRoZSBvdXRwdXQuCgoxKSBTcG9vbCBzdGRvdXQgdG8gVk0gcmVhZGVyClNQIFBSVCBUTyAoYW5vdGhlciB2bSBndWVzdCApIG9yICogZm9yIHRoZSBsb2NhbCB2bSBndWVzdAoyKSBGaWxsIHRoZSByZWFkZXIgd2l0aCB0aGUgdHJhY2UKVFIgSU8gN2MwOC03YzA5IElOU1QgSU5UIENDVyBQUlQgUlVOCjMpIFN0YXJ0IHVwIGxpbnV4IAppIDAwYyAgCjQpIEZpbmlzaCB0aGUgdHJhY2UKVFIgRU5ECjUpIGNsb3NlIHRoZSByZWFkZXIKQyBQUlQKNikgbGlzdCByZWFkZXIgY29udGVudHMKUkRSTElTVAo3KSBjb3B5IGl0IHRvIGxpbnV4NCdzIG1pbmlkaXNrIApSRUNFSVZFIC8gTE9HIFRYVCBBMSAoIHJlcGxhY2UKOCkKZmlsZWwgJiBwcmVzcyBGMTEgdG8gbG9vayBhdCBpdApZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZToKCjAwMDIwOTQyJyBTU0NIICBCMjMzNDAwMCAgICAwMDQ4ODEzQyAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CiAgICAgICAgICBDUEEgMDAwRkZERjAgICBQQVJNIDAwRTJDOUM0ICAgIEtFWSAwICBGUEkgQzAgIExQTSA4MAogICAgICAgICAgQ0NXICAgIDAwMEZGREYwICBFNDIwMDEwMCAwMDQ4N0ZFOCAgIDAwMDAgIEU0MjQwMTAwIC4uLi4uLi4uCiAgICAgICAgICBJREFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0M0Q4QUZFOAogICAgICAgICAgSURBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMEZCNzYwMDAKMDAwMjBCMEEnICAgSS9PIERFViA3QzA4IC0+IDAwMDE5N0JDJyAgIFNDSCAwMDAwICAgUEFSTSAwMEUyQzlDNAowMDAyMTYyOCcgVFNDSCAgQjIzNTQwMDAgPj4gMDA0ODgxNjQgICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAogICAgICAgICAgQ0NXQSAwMDBGRkRGOCAgIERFViBTVFMgMEMgIFNDSCBTVFMgMDAgIENOVCAwMEVDCiAgICAgICAgICAgS0VZIDAgICBGUEkgQzAgIENDIDAgICBDVExTIDQwMDcKMDAwMjIyMzgnIFNUU0NIIEIyMzQ0MDAwID4+IDAwNDg4MTA4ICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKCklmIHlvdSBkb24ndCBsaWtlIG1lc3NpbmcgdXAgeW91ciByZWFkZWQgKCBiZWNhdXNlIHlvdSBwb3NzaWJseSBib290ZWQgZnJvbSBpdCApCnlvdSBjYW4gYWx0ZXJuYXRpdmVseSBzcG9vbCBpdCB0byBhbm90aGVyIHJlYWRlcnMgZ3Vlc3QuCgoKT3RoZXIgY29tbW9uIFZNIGRldmljZSByZWxhdGVkIGNvbW1hbmRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGVzZSBjb21tYW5kcyBhcmUgbGlzdGVkIG9ubHkgYmVjYXVzZSB0aGV5IGhhdmUKYmVlbiBvZiB1c2UgdG8gbWUgaW4gdGhlIHBhc3QgJiBtYXkgYmUgb2YgdXNlIHRvCnlvdSB0b28uIEZvciBtb3JlIGNvbXBsZXRlIGluZm8gb24gZWFjaCBvZiB0aGUgY29tbWFuZHMKdXNlIHR5cGUgSEVMUCA8Y29tbWFuZD4gZnJvbSBDTVMuCmRldGFjaGluZyBkZXZpY2VzCkRFVCA8ZGV2bm8gcmFuZ2U+CkFUVCA8ZGV2bm8gcmFuZ2U+IDxndWVzdD4gCmF0dGFjaCBhIGRldmljZSB0byBndWVzdCAqIGZvciB5b3VyIG93biBndWVzdApSRUFEWSA8ZGV2bm8+IGNhdXNlIFZNIHRvIGlzc3VlIGEgZmFrZSBpbnRlcnJ1cHQuCgpUaGUgVkFSWSBjb21tYW5kIGlzIG5vcm1hbGx5IG9ubHkgYXZhaWxhYmxlIHRvIFZNIGFkbWluaXN0cmF0b3JzLgpWQVJZIE9OIFBBVEggPHBhdGg+IFRPIDxkZXZubyByYW5nZT4KVkFSWSBPRkYgUEFUSCA8UEFUSD4gRlJPTSA8ZGV2bm8gcmFuZ2U+ClRoaXMgaXMgdXNlZCB0byBzd2l0Y2ggb24gb3Igb2ZmIGNoYW5uZWwgcGF0aHMgdG8gZGV2aWNlcy4KClEgQ0hQSUQgPGNoYW5uZWwgcGF0aCBJRD4KVGhpcyBkaXNwbGF5cyBzdGF0ZSBvZiBkZXZpY2VzIHVzaW5nIHRoaXMgY2hhbm5lbCBwYXRoCkQgU0NISUIgPHN1YmNoYW5uZWw+ClRoaXMgZGlzcGxheXMgdGhlIHN1YmNoYW5uZWwgaW5mb3JtYXRpb24gU0NISUIgYmxvY2sgZm9yIHRoZSBkZXZpY2UuCnRoaXMgSSBiZWxpZXZlIGlzIGFsc28gb25seSBhdmFpbGFibGUgdG8gYWRtaW5pc3RyYXRvcnMuCkRFRklORSBDVEMgPGRldm5vPgpkZWZpbmVzIGEgdmlydHVhbCBDVEMgY2hhbm5lbCB0byBjaGFubmVsIGNvbm5lY3Rpb24KMiBuZWVkIHRvIGJlIGRlZmluZWQgb24gZWFjaCBndWVzdCBmb3IgdGhlIENUQyBkcml2ZXIgdG8gdXNlLgpDT1VQTEUgIGRldm5vIHVzZXJpZCByZW1vdGUgZGV2bm8KSm9pbnMgYSBsb2NhbCB2aXJ0dWFsIGRldmljZSB0byBhIHJlbW90ZSB2aXJ0dWFsIGRldmljZQooIGNvbW1vbmx5IHVzZWQgZm9yIHRoZSBDVEMgZHJpdmVyICkuCgpCdWlsZGluZyBhIFZNIHJhbWRpc2sgdW5kZXIgQ01TIHdoaWNoIGxpbnV4IGNhbiB1c2UKZGVmIHZmYi08YmxvY2tzaXplPiA8c3ViY2hhbm5lbD4gPG51bWJlciBibG9ja3M+CmJsb2Nrc2l6ZSBpcyBjb21tb25seSA0MDk2IGZvciBsaW51eC4KRm9ybWF0dGluZyBpdApmb3JtYXQgPHN1YmNoYW5uZWw+IDxkcml2ZXIgbGV0dGVyIGUuZy4geD4gKGJsa3NpemUgPGJsb2Nrc2l6ZT4KClNoYXJpbmcgYSBkaXNrIGJldHdlZW4gbXVsdGlwbGUgZ3Vlc3RzCkxJTksgdXNlcmlkIGRldm5vMSBkZXZubzIgbW9kZSBwYXNzd29yZAoKCgpHREIgb24gUzM5MAo9PT09PT09PT09PQpOLkIuIGlmIGNvbXBpbGluZyBmb3IgZGVidWdnaW5nIGdkYiB3b3JrcyBiZXR0ZXIgd2l0aG91dCBvcHRpbWlzYXRpb24gCiggc2VlIENvbXBpbGluZyBwcm9ncmFtcyBmb3IgZGVidWdnaW5nICkKCmludm9jYXRpb24KLS0tLS0tLS0tLQpnZGIgPHZpY3RpbSBwcm9ncmFtPiA8b3B0aW9uYWwgY29yZWZpbGU+CgpPbmxpbmUgaGVscAotLS0tLS0tLS0tLQpoZWxwOiBnaXZlcyBoZWxwIG9uIGNvbW1hbmRzCmUuZy4KaGVscApoZWxwIGRpc3BsYXkKTm90ZSBnZGIncyBvbmxpbmUgaGVscCBpcyB2ZXJ5IGdvb2QgdXNlIGl0LgoKCkFzc2VtYmx5Ci0tLS0tLS0tCmluZm8gcmVnaXN0ZXJzOiBkaXNwbGF5cyByZWdpc3RlcnMgb3RoZXIgdGhhbiBmbG9hdGluZyBwb2ludC4KaW5mbyBhbGwtcmVnaXN0ZXJzOiBkaXNwbGF5cyBmbG9hdGluZyBwb2ludHMgYXMgd2VsbC4KZGlzYXNzZW1ibGU6IGRpc2Fzc2VtYmxlcwplLmcuCmRpc2Fzc2VtYmxlIHdpdGhvdXQgcGFyYW1ldGVycyB3aWxsIGRpc2Fzc2VtYmxlIHRoZSBjdXJyZW50IGZ1bmN0aW9uCmRpc2Fzc2VtYmxlICRwYyAkcGMrMTAgCgpWaWV3aW5nICYgbW9kaWZ5aW5nIHZhcmlhYmxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwcmludCBvciBwOiBkaXNwbGF5cyB2YXJpYWJsZSBvciByZWdpc3RlcgplLmcuIHAveCAkc3Agd2lsbCBkaXNwbGF5IHRoZSBzdGFjayBwb2ludGVyCgpkaXNwbGF5OiBwcmludHMgdmFyaWFibGUgb3IgcmVnaXN0ZXIgZWFjaCB0aW1lIHByb2dyYW0gc3RvcHMKZS5nLgpkaXNwbGF5L3ggJHBjIHdpbGwgZGlzcGxheSB0aGUgcHJvZ3JhbSBjb3VudGVyCmRpc3BsYXkgYXJnYwoKdW5kaXNwbGF5IDogdW5kbydzIGRpc3BsYXkncwoKaW5mbyBicmVha3BvaW50czogc2hvd3MgYWxsIGN1cnJlbnQgYnJlYWtwb2ludHMKCmluZm8gc3RhY2s6IHNob3dzIHN0YWNrIGJhY2sgdHJhY2UgKCBpZiB0aGlzIGRvZXNuJ3Qgd29yayB0b28gd2VsbCwgSSdsbCBzaG93IHlvdSB0aGUKc3RhY2t0cmFjZSBieSBoYW5kIGJlbG93ICkuCgppbmZvIGxvY2FsczogZGlzcGxheXMgbG9jYWwgdmFyaWFibGVzLgoKaW5mbyBhcmdzOiBkaXNwbGF5IGN1cnJlbnQgcHJvY2VkdXJlIGFyZ3VtZW50cy4KCnNldCBhcmdzOiB3aWxsIHNldCBhcmdjICYgYXJndiBlYWNoIHRpbWUgdGhlIHZpY3RpbSBwcm9ncmFtIGlzIGludm9rZWQuCgpzZXQgPHZhcmlhYmxlPj12YWx1ZQpzZXQgYXJnYz0xMDAKc2V0ICRwYz0wCgoKCk1vZGlmeWluZyBleGVjdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLQpzdGVwOiBzdGVwcyBuIGxpbmVzIG9mIHNvdXJjZWNvZGUKc3RlcCBzdGVwcyAxIGxpbmUuCnN0ZXAgMTAwIHN0ZXBzIDEwMCBsaW5lcyBvZiBjb2RlLgoKbmV4dDogbGlrZSBzdGVwIGV4Y2VwdCB0aGlzIHdpbGwgbm90IHN0ZXAgaW50byBzdWJyb3V0aW5lcwoKc3RlcGk6IHN0ZXBzIGEgc2luZ2xlIG1hY2hpbmUgY29kZSBpbnN0cnVjdGlvbi4KZS5nLiBzdGVwaSAxMDAKCm5leHRpOiBzdGVwcyBhIHNpbmdsZSBtYWNoaW5lIGNvZGUgaW5zdHJ1Y3Rpb24gYnV0IHdpbGwgbm90IHN0ZXAgaW50byBzdWJyb3V0aW5lcy4KCmZpbmlzaDogd2lsbCBydW4gdW50aWwgZXhpdCBvZiB0aGUgY3VycmVudCByb3V0aW5lCgpydW46IChyZSlzdGFydHMgYSBwcm9ncmFtCgpjb250OiBjb250aW51ZXMgYSBwcm9ncmFtCgpxdWl0OiBleGl0cyBnZGIuCgoKYnJlYWtwb2ludHMKLS0tLS0tLS0tLS0tCgpicmVhawpzZXRzIGEgYnJlYWtwb2ludAplLmcuCgpicmVhayBtYWluCgpicmVhayAqJHBjCgpicmVhayAqMHg0MDA2MTgKCmhlcmVzIGEgcmVhbGx5IHVzZWZ1bCBvbmUgZm9yIGxhcmdlIHByb2dyYW1zCnJicgpTZXQgYSBicmVha3BvaW50IGZvciBhbGwgZnVuY3Rpb25zIG1hdGNoaW5nIFJFR0VYUAplLmcuCnJiciAzOTAKd2lsbCBzZXQgYSBicmVha3BvaW50IHdpdGggYWxsIGZ1bmN0aW9ucyB3aXRoIDM5MCBpbiB0aGVpciBuYW1lLgoKaW5mbyBicmVha3BvaW50cwpsaXN0cyBhbGwgYnJlYWtwb2ludHMKCmRlbGV0ZTogZGVsZXRlIGJyZWFrcG9pbnQgYnkgbnVtYmVyIG9yIGRlbGV0ZSB0aGVtIGFsbAplLmcuCmRlbGV0ZSAxIHdpbGwgZGVsZXRlIHRoZSBmaXJzdCBicmVha3BvaW50CmRlbGV0ZSB3aWxsIGRlbGV0ZSB0aGVtIGFsbAoKd2F0Y2g6IFRoaXMgd2lsbCBzZXQgYSB3YXRjaHBvaW50ICggdXN1YWxseSBoYXJkd2FyZSBhc3Npc3RlZCApLApUaGlzIHdpbGwgd2F0Y2ggYSB2YXJpYWJsZSB0aWxsIGl0IGNoYW5nZXMKZS5nLgp3YXRjaCBjbnQsIHdpbGwgd2F0Y2ggdGhlIHZhcmlhYmxlIGNudCB0aWxsIGl0IGNoYW5nZXMuCkFzIGFuIGFzaWRlIHVuZm9ydHVuYXRlbHkgZ2RiJ3MsIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCB3YXRjaHBvaW50IGNvZGUKaXMgaW5jb25zaXN0ZW50ICYgbm90IHZlcnkgZ29vZCwgd2F0Y2hwb2ludHMgdXN1YWxseSB3b3JrIGJ1dCBub3QgYWx3YXlzLgoKaW5mbyB3YXRjaHBvaW50czogRGlzcGxheSBjdXJyZW50bHkgYWN0aXZlIHdhdGNocG9pbnRzCgpjb25kaXRpb246ICggYW5vdGhlciB1c2VmdWwgb25lICkKU3BlY2lmeSBicmVha3BvaW50IG51bWJlciBOIHRvIGJyZWFrIG9ubHkgaWYgQ09ORCBpcyB0cnVlLgpVc2FnZSBpcyBgY29uZGl0aW9uIE4gQ09ORCcsIHdoZXJlIE4gaXMgYW4gaW50ZWdlciBhbmQgQ09ORCBpcyBhbgpleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCB3aGVuZXZlciBicmVha3BvaW50IE4gaXMgcmVhY2hlZC4KCgoKVXNlciBkZWZpbmVkIGZ1bmN0aW9ucy9tYWNyb3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmaW5lOiAoIE5vdGUgdGhpcyBpcyB2ZXJ5IHZlcnkgdXNlZnVsLHNpbXBsZSAmIHBvd2VyZnVsICkKdXNhZ2UgZGVmaW5lIDxuYW1lPiA8bGlzdCBvZiBjb21tYW5kcz4gZW5kCgpleGFtcGxlcyB3aGljaCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHB1dHRpbmcgaW50byAuZ2RiaW5pdCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5CmRlZmluZSBkCnN0ZXBpCmRpc2Fzc2VtYmxlICRwYyAkcGMrMTAKZW5kCgpkZWZpbmUgZQpuZXh0aQpkaXNhc3NlbWJsZSAkcGMgJHBjKzEwCmVuZAoKCk90aGVyIGhhcmQgdG8gY2xhc3NpZnkgc3R1ZmYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzaWduYWwgbjoKc2VuZHMgdGhlIHZpY3RpbSBwcm9ncmFtIGEgc2lnbmFsLgplLmcuIHNpZ25hbCAzIHdpbGwgc2VuZCBhIFNJR1FVSVQuCgppbmZvIHNpZ25hbHM6CndoYXQgZ2RiIGRvZXMgd2hlbiB0aGUgdmljdGltIHJlY2VpdmVzIGNlcnRhaW4gc2lnbmFscy4KCmxpc3Q6CmUuZy4KbGlzdCBsaXN0cyBjdXJyZW50IGZ1bmN0aW9uIHNvdXJjZQpsaXN0IDEsMTAgbGlzdCBmaXJzdCAxMCBsaW5lcyBvZiBjdXJyZW50IGZpbGUuCmxpc3QgdGVzdC5jOjEsMTAKCgpkaXJlY3Rvcnk6CkFkZHMgZGlyZWN0b3JpZXMgdG8gYmUgc2VhcmNoZWQgZm9yIHNvdXJjZSBpZiBnZGIgY2Fubm90IGZpbmQgdGhlIHNvdXJjZS4KKG5vdGUgaXQgaXMgYSBiaXQgc2Vuc2l0aXZlIGFib3V0IHNsYXNoZXMpCmUuZy4gVG8gYWRkIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBzZWFyY2hwYXRoIGRvCmRpcmVjdG9yeSAvLwoKCmNhbGwgPGZ1bmN0aW9uPgpUaGlzIGNhbGxzIGEgZnVuY3Rpb24gaW4gdGhlIHZpY3RpbSBwcm9ncmFtLCB0aGlzIGlzIHByZXR0eSBwb3dlcmZ1bAplLmcuCihnZGIpIGNhbGwgcHJpbnRmKCJoZWxsbyB3b3JsZCIpCm91dHB1dHM6CiQxID0gMTEgCgpZb3UgbWlnaHQgbm93IGJlIHRoaW5raW5nIHRoYXQgdGhlIGxpbmUgYWJvdmUgZGlkbid0IHdvcmssIHNvbWV0aGluZyBleHRyYSBoYWQgdG8gYmUgZG9uZS4KKGdkYikgY2FsbCBmZmx1c2goc3Rkb3V0KQpoZWxsbyB3b3JsZCQyID0gMApBcyBhbiBhc2lkZSB0aGUgZGVidWdnZXIgYWxzbyBjYWxscyBtYWxsb2MgJiBmcmVlIHVuZGVyIHRoZSBob29kIAp0byBtYWtlIHNwYWNlIGZvciB0aGUgImhlbGxvIHdvcmxkIiBzdHJpbmcuCgoKCmhpbnRzCi0tLS0tCjEpIGNvbW1hbmQgY29tcGxldGlvbiB3b3JrcyBqdXN0IGxpa2UgYmFzaCAKKCBpZiB5b3UgYXJlIGEgYmFkIHR5cGlzdCBsaWtlIG1lIHRoaXMgcmVhbGx5IGhlbHBzICkKZS5nLiBoaXQgYnIgPFRBQj4gJiBjdXJzb3IgdXAgJiBkb3duIDotKS4KCjIpIGlmIHlvdSBoYXZlIGEgZGVidWdnaW5nIHByb2JsZW0gdGhhdCB0YWtlcyBhIGZldyBzdGVwcyB0byByZWNyZWF0ZQpwdXQgdGhlIHN0ZXBzIGludG8gYSBmaWxlIGNhbGxlZCAuZ2RiaW5pdCBpbiB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKaWYgeW91IGhhdmUgZGVmaW5lZCBhIGZldyBleHRyYSB1c2VmdWwgdXNlciBkZWZpbmVkIGNvbW1hbmRzIHB1dCB0aGVzZSBpbiAKeW91ciBob21lIGRpcmVjdG9yeSAmIHRoZXkgd2lsbCBiZSByZWFkIGVhY2ggdGltZSBnZGIgaXMgbGF1bmNoZWQuCgpBIHR5cGljYWwgLmdkYmluaXQgZmlsZSBtaWdodCBiZS4KYnJlYWsgbWFpbgpydW4KYnJlYWsgcnVudGltZV9leGNlcHRpb24KY29udCAKCgpzdGFjayBjaGFpbmluZyBpbiBnZGIgYnkgaGFuZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIGlzIGRvbmUgdXNpbmcgYSB0aGUgc2FtZSB0cmljayBkZXNjcmliZWQgZm9yIFZNIApwL3ggKCooJHNwKzU2KSkmMHg3ZmZmZmZmZiBnZXQgdGhlIGZpcnN0IGJhY2tjaGFpbi4KCkZvciB6L0FyY2hpdGVjdHVyZQpSZXBsYWNlIDU2IHdpdGggMTEyICYgaWdub3JlIHRoZSAmMHg3ZmZmZmZmZgppbiB0aGUgbWFjcm9zIGJlbG93ICYgZG8gbmFzdHkgY2FzdHMgdG8gbG9uZ3MgbGlrZSB0aGUgZm9sbG93aW5nCmFzIGdkYiB1bmZvcnR1bmF0ZWx5IGRlYWxzIHdpdGggcHJpbnRlZCBhcmd1bWVudHMgYXMgaW50cyB3aGljaAptZXNzZXMgdXAgZXZlcnl0aGluZy4KaS5lLiBoZXJlIGlzIGEgM3JkIGJhY2tjaGFpbiBkZXJlZmVyZW5jZQpwL3ggKihsb25nICopKCoqKihsb25nICoqKikkc3ArMTEyKQoKCnRoaXMgb3V0cHV0cyAKJDUgPSAweDUyOGYxOCAKb24gbXkgbWFjaGluZS4KTm93IHlvdSBjYW4gdXNlIAppbmZvIHN5bWJvbCAoKigkc3ArNTYpKSYweDdmZmZmZmZmIAp5b3UgbWlnaHQgc2VlIHNvbWV0aGluZyBsaWtlLgpybF9nZXRjICsgMzYgaW4gc2VjdGlvbiAudGV4dCAgdGVsbGluZyB5b3Ugd2hhdCBpcyBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MjhmMTgKTm93IGRvLgpwL3ggKCooKiRzcCs1NikpJjB4N2ZmZmZmZmYgClRoaXMgb3V0cHV0cwokNiA9IDB4NTI4ZWQwCk5vdyBkby4KaW5mbyBzeW1ib2wgKCooKiRzcCs1NikpJjB4N2ZmZmZmZmYKcmxfcmVhZF9rZXkgKyAxODAgaW4gc2VjdGlvbiAudGV4dApub3cgZG8KcC94ICgqKCoqJHNwKzU2KSkmMHg3ZmZmZmZmZgomIHNvIG9uLgoKRGlzYXNzZW1ibGluZyBpbnN0cnVjdGlvbnMgd2l0aG91dCBkZWJ1ZyBpbmZvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpnZGIgdHlwaWNhbGx5IGNvbXBsYWlucyBpZiB0aGVyZSBpcyBhIGxhY2sgb2YgZGVidWdnaW5nCnN5bWJvbHMgaW4gdGhlIGRpc2Fzc2VtYmxlIGNvbW1hbmQgd2l0aCAKIk5vIGZ1bmN0aW9uIGNvbnRhaW5zIHNwZWNpZmllZCBhZGRyZXNzLiIgVG8gZ2V0IGFyb3VuZAp0aGlzIGRvIAp4LzxudW1iZXIgbGluZXMgdG8gZGlzYXNzZW1ibGU+eGkgPGFkZHJlc3M+CmUuZy4KeC8yMHhpIDB4NDAwNzMwCgoKCk5vdGU6IFJlbWVtYmVyIGdkYiBoYXMgaGlzdG9yeSBqdXN0IGxpa2UgYmFzaCB5b3UgZG9uJ3QgbmVlZCB0byByZXR5cGUgdGhlCndob2xlIGxpbmUganVzdCB1c2UgdGhlIHVwICYgZG93biBhcnJvd3MuCgoKCkZvciBtb3JlIGluZm8KLS0tLS0tLS0tLS0tLQpGcm9tIHlvdXIgbGludXhib3ggZG8gCm1hbiBnZGIgb3IgaW5mbyBnZGIuCgpjb3JlIGR1bXBzCi0tLS0tLS0tLS0KV2hhdCBhIGNvcmUgZHVtcCA/LApBIGNvcmUgZHVtcCBpcyBhIGZpbGUgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwgKCBpZiBhbGxvd2VkICkgd2hpY2ggY29udGFpbnMgdGhlIHJlZ2lzdGVycywKJiBhbGwgYWN0aXZlIHBhZ2VzIG9mIHRoZSBwcm9ncmFtIHdoaWNoIGhhcyBjcmFzaGVkLgpGcm9tIHRoaXMgZmlsZSBnZGIgd2lsbCBhbGxvdyB5b3UgdG8gbG9vayBhdCB0aGUgcmVnaXN0ZXJzICYgc3RhY2sgdHJhY2UgJiBtZW1vcnkgb2YgdGhlCnByb2dyYW0gYXMgaWYgaXQganVzdCBjcmFzaGVkIG9uIHlvdXIgc3lzdGVtLCBpdCBpcyB1c3VhbGx5IGNhbGxlZCBjb3JlICYgY3JlYXRlZCBpbiB0aGUKY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpbiB0aGF0IGEgY3VzdG9tZXIgY2FuIG1haWwgYSBjb3JlIGR1bXAgdG8gYSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50CiYgdGhlIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQgY2FuIHJlY29uc3RydWN0IHdoYXQgaGFwcGVuZWQuClByb3ZpZGVkIHRoZXkgaGF2ZSBhbiBpZGVudGljYWwgY29weSBvZiB0aGlzIHByb2dyYW0gd2l0aCBkZWJ1Z2dpbmcgc3ltYm9scyBjb21waWxlZCBpbiAmCnRoZSBzb3VyY2UgYmFzZSBvZiB0aGlzIGJ1aWxkIGlzIGF2YWlsYWJsZS4KSW4gc2hvcnQgaXQgaXMgZmFyIG1vcmUgdXNlZnVsIHRoYW4gc29tZXRoaW5nIGxpa2UgYSBjcmFzaCBsb2cgY291bGQgZXZlciBob3BlIHRvIGJlLgoKSW4gdGhlb3J5IGFsbCB0aGF0IGlzIG1pc3NpbmcgdG8gcmVzdGFydCBhIGNvcmUgZHVtcGVkIHByb2dyYW0gaXMgYSBrZXJuZWwgcGF0Y2ggd2hpY2gKd2lsbCBkbyB0aGUgZm9sbG93aW5nLgoxKSBNYWtlIGEgbmV3IGtlcm5lbCB0YXNrIHN0cnVjdHVyZQoyKSBSZWxvYWQgYWxsIHRoZSBkdW1wZWQgcGFnZXMgYmFjayBpbnRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLgozKSBEbyB0aGUgcmVxdWlyZWQgY2xvY2sgZml4dXBzCjQpIEdldCBhbGwgZmlsZXMgJiBuZXR3b3JrIGNvbm5lY3Rpb25zIGZvciB0aGUgcHJvY2VzcyBiYWNrIGludG8gYW4gaWRlbnRpY2FsIHN0YXRlICggcmVhbGx5IGRpZmZpY3VsdCApLgo1KSBBIGZldyBtb3JlIGRpZmZpY3VsdCB0aGluZ3MgSSBoYXZlbid0IHRob3VnaHQgb2YuCgoKCldoeSBoYXZlIEkgbmV2ZXIgc2VlbiBvbmUgPy4KUHJvYmFibHkgYmVjYXVzZSB5b3UgaGF2ZW4ndCB1c2VkIHRoZSBjb21tYW5kIAp1bGltaXQgLWMgdW5saW1pdGVkIGluIGJhc2gKdG8gYWxsb3cgY29yZSBkdW1wcywgbm93IGRvIAp1bGltaXQgLWEgCnRvIHZlcmlmeSB0aGF0IHRoZSBsaW1pdCB3YXMgYWNjZXB0ZWQuCgpBIHNhbXBsZSBjb3JlIGR1bXAKVG8gY3JlYXRlIHRoaXMgSSdtIGdvaW5nIHRvIGRvCnVsaW1pdCAtYyB1bmxpbWl0ZWQKZ2RiIAp0byBsYXVuY2ggZ2RiIChteSB2aWN0aW0gYXBwLiApIG5vdyBiZSBiYWQgJiBkbyB0aGUgZm9sbG93aW5nIGZyb20gYW5vdGhlciAKdGVsbmV0L3h0ZXJtIHNlc3Npb24gdG8gdGhlIHNhbWUgbWFjaGluZQpwcyAtYXV4IHwgZ3JlcCBnZGIKa2lsbCAtU0lHU0VHViA8Z2RiJ3MgcGlkPgpvciBhbHRlcm5hdGl2ZWx5IHVzZSBraWxsYWxsIC1TSUdTRUdWIGdkYiBpZiB5b3UgaGF2ZSB0aGUga2lsbGFsbCBjb21tYW5kLgpOb3cgbG9vayBhdCB0aGUgY29yZSBkdW1wLgouL2dkYiBjb3JlCkRpc3BsYXlzIHRoZSBmb2xsb3dpbmcKR05VIGdkYiA0LjE4CkNvcHlyaWdodCAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlCndlbGNvbWUgdG8gY2hhbmdlIGl0IGFuZC9vciBkaXN0cmlidXRlIGNvcGllcyBvZiBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuClR5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgpUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5IiBmb3IgZGV0YWlscy4KVGhpcyBHREIgd2FzIGNvbmZpZ3VyZWQgYXMgInMzOTAtaWJtLWxpbnV4Ii4uLgpDb3JlIHdhcyBnZW5lcmF0ZWQgYnkgYC4vZ2RiJy4KUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggc2lnbmFsIDExLCBTZWdtZW50YXRpb24gZmF1bHQuClJlYWRpbmcgc3ltYm9scyBmcm9tIC91c3IvbGliL2xpYm5jdXJzZXMuc28uNC4uLmRvbmUuClJlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGlibS5zby42Li4uZG9uZS4KUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9saWJjLnNvLjYuLi5kb25lLgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvbGliL2xkLWxpbnV4LnNvLjIuLi5kb25lLgojMCAgMHg0MDEyNmQxYSBpbiByZWFkICgpIGZyb20gL2xpYi9saWJjLnNvLjYKU2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQgZm9yIGRlYnVnZ2luZyBnZGIuCkJyZWFrcG9pbnQgMSBhdCAweDRkYzZmODogZmlsZSB1dGlscy5jLCBsaW5lIDQ3MS4KQnJlYWtwb2ludCAyIGF0IDB4NGQ4N2E0OiBmaWxlIHRvcC5jLCBsaW5lIDI2MDkuCih0b3AtZ2RiKSBpbmZvIHN0YWNrCiMwICAweDQwMTI2ZDFhIGluIHJlYWQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgojMSAgMHg1MjhmMjYgaW4gcmxfZ2V0YyAoc3RyZWFtPTB4N2ZmZmZkZTgpIGF0IGlucHV0LmM6NDAyCiMyICAweDUyOGVkMCBpbiBybF9yZWFkX2tleSAoKSBhdCBpbnB1dC5jOjM4MQojMyAgMHg1MTY3ZTYgaW4gcmVhZGxpbmVfaW50ZXJuYWxfY2hhciAoKSBhdCByZWFkbGluZS5jOjQ1NAojNCAgMHg1MTY4ZWUgaW4gcmVhZGxpbmVfaW50ZXJuYWxfY2hhcmxvb3AgKCkgYXQgcmVhZGxpbmUuYzo1MDcKIzUgIDB4NTE2OTJjIGluIHJlYWRsaW5lX2ludGVybmFsICgpIGF0IHJlYWRsaW5lLmM6NTIxCiM2ICAweDUxNjRmZSBpbiByZWFkbGluZSAocHJvbXB0PTB4N2ZmZmY4MTAgIlwxNzeB/4H4eFwxNzeB/4H3gdhcMTc3gf+B+HiBwCIpCiAgICBhdCByZWFkbGluZS5jOjM0OQojNyAgMHg0ZDdhOGEgaW4gY29tbWFuZF9saW5lX2lucHV0IChwcnJvbXB0PTB4NTY0NDIwICIoZ2RiKSAiLCByZXBlYXQ9MSwKICAgIGFubm90YXRpb25fc3VmZml4PTB4NGQ2YjQ0ICJwcm9tcHQiKSBhdCB0b3AuYzoyMDkxCiM4ICAweDRkNmNmMCBpbiBjb21tYW5kX2xvb3AgKCkgYXQgdG9wLmM6MTM0NQojOSAgMHg0ZTI1YmMgaW4gbWFpbiAoYXJnYz0xLCBhcmd2PTB4N2ZmZmZkZjQpIGF0IG1haW4uYzo2MzUKCgpMREQKPT09ClRoaXMgaXMgYSBwcm9ncmFtIHdoaWNoIGxpc3RzIHRoZSBzaGFyZWQgbGlicmFyaWVzIHdoaWNoIGEgbGlicmFyeSBuZWVkcywKTm90ZSB5b3UgYWxzbyBnZXQgdGhlIHJlbG9jYXRpb25zIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB0ZXh0IHNlZ21lbnRzIHdoaWNoCmhlbHAgd2hlbiB1c2luZyBvYmpkdW1wIC0tc291cmNlLgplLmcuCiBsZGQgLi9nZGIKb3V0cHV0cwpsaWJuY3Vyc2VzLnNvLjQgPT4gL3Vzci9saWIvbGlibmN1cnNlcy5zby40ICgweDQwMDE4MDAwKQpsaWJtLnNvLjYgPT4gL2xpYi9saWJtLnNvLjYgKDB4NDAwNWUwMDApCmxpYmMuc28uNiA9PiAvbGliL2xpYmMuc28uNiAoMHg0MDA4NDAwMCkKL2xpYi9sZC1saW51eC5zby4yID0+IC9saWIvbGQtbGludXguc28uMiAoMHg0MDAwMDAwMCkKCgpEZWJ1Z2dpbmcgc2hhcmVkIGxpYnJhcmllcwo9PT09PT09PT09PT09PT09PT09PT09PT09PQpNb3N0IHByb2dyYW1zIHVzZSBzaGFyZWQgbGlicmFyaWVzLCBob3dldmVyIGl0IGNhbiBiZSB2ZXJ5IHBhaW5mdWwKd2hlbiB5b3Ugc2luZ2xlIHN0ZXAgaW5zdHJ1Y3Rpb24gaW50byBhIGZ1bmN0aW9uIGxpa2UgcHJpbnRmIGZvciB0aGUgCmZpcnN0IHRpbWUgJiB5b3UgZW5kIHVwIGluIGZ1bmN0aW9ucyBsaWtlIF9kbF9ydW50aW1lX3Jlc29sdmUgdGhpcyBpcwp0aGUgbGQuc28gZG9pbmcgbGF6eSBiaW5kaW5nLCBsYXp5IGJpbmRpbmcgaXMgYSBjb25jZXB0IGluIEVMRiB3aGVyZSAKc2hhcmVkIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSBub3QgbG9hZGVkIGludG8gbWVtb3J5IHVubGVzcyB0aGV5IGFyZSAKYWN0dWFsbHkgdXNlZCwgZ3JlYXQgZm9yIHNhdmluZyBtZW1vcnkgYnV0IGEgcGFpbiB0byBkZWJ1Zy4KVG8gZ2V0IGFyb3VuZCB0aGlzIGVpdGhlciByZWxpbmsgdGhlIHByb2dyYW0gLXN0YXRpYyBvciBleGl0IGdkYiB0eXBlIApleHBvcnQgTERfQklORF9OT1c9dHJ1ZSB0aGlzIHdpbGwgc3RvcCBsYXp5IGJpbmRpbmcgJiByZXN0YXJ0IHRoZSBnZGInaW5nIAp0aGUgcHJvZ3JhbSBpbiBxdWVzdGlvbi4KIAoKCkRlYnVnZ2luZyBtb2R1bGVzCj09PT09PT09PT09PT09PT09CkFzIG1vZHVsZXMgYXJlIGR5bmFtaWNhbGx5IGxvYWRlZCBpbnRvIHRoZSBrZXJuZWwgdGhlaXIgYWRkcmVzcyBjYW4gYmUKYW55d2hlcmUgdG8gZ2V0IGFyb3VuZCB0aGlzIHVzZSB0aGUgLW0gb3B0aW9uIHdpdGggaW5zbW9kIHRvIGVtaXQgYSBsb2FkCm1hcCB3aGljaCBjYW4gYmUgcGlwZWQgaW50byBhIGZpbGUgaWYgcmVxdWlyZWQuCgpUaGUgcHJvYyBmaWxlIHN5c3RlbQo9PT09PT09PT09PT09PT09PT09PQpXaGF0IGlzIGl0ID8uCkl0IGlzIGEgZmlsZXN5c3RlbSBjcmVhdGVkIGJ5IHRoZSBrZXJuZWwgd2l0aCBmaWxlcyB3aGljaCBhcmUgY3JlYXRlZCBvbiBkZW1hbmQKYnkgdGhlIGtlcm5lbCBpZiByZWFkLCBvciBjYW4gYmUgdXNlZCB0byBtb2RpZnkga2VybmVsIHBhcmFtZXRlcnMsCml0IGlzIGEgcG93ZXJmdWwgY29uY2VwdC4KCmUuZy4KCmNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZCAKT24gbXkgbWFjaGluZSBvdXRwdXRzIAowIAp0ZWxsaW5nIG1lIGlwX2ZvcndhcmRpbmcgaXMgbm90IG9uIHRvIHN3aXRjaCBpdCBvbiBJIGNhbiBkbwplY2hvIDEgPiAgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQKY2F0IGl0IGFnYWluCmNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZCAKT24gbXkgbWFjaGluZSBub3cgb3V0cHV0cwoxCklQIGZvcndhcmRpbmcgaXMgb24uClRoZXJlIGlzIGEgbG90IG9mIHVzZWZ1bCBpbmZvIGluIGhlcmUgYmVzdCBmb3VuZCBieSBnb2luZyBpbiAmIGhhdmluZyBhIGxvb2sgYXJvdW5kLApzbyBJJ2xsIHRha2UgeW91IHRocm91Z2ggc29tZSBlbnRyaWVzIEkgY29uc2lkZXIgaW1wb3J0YW50LgoKQWxsIHRoZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgbWFjaGluZSBoYXZlIHRoZXJlIG93biBlbnRyeSBkZWZpbmVkIGJ5Ci9wcm9jLzxwaWQ+ClNvIGxldHMgaGF2ZSBhIGxvb2sgYXQgdGhlIGluaXQgcHJvY2VzcwpjZCAvcHJvYy8xCgpjYXQgY21kbGluZQplbWl0cwppbml0IFsyXQoKY2QgL3Byb2MvMS9mZApUaGlzIGNvbnRhaW5zIG51bWVyaWNhbCBlbnRyaWVzIG9mIGFsbCB0aGUgb3BlbiBmaWxlcywKc29tZSBvZiB0aGVzZSB5b3UgY2FuIGNhdCBlLmcuIHN0ZG91dCAoMikKCmNhdCAvcHJvYy8yOS9tYXBzCm9uIG15IG1hY2hpbmUgZW1pdHMKCjAwNDAwMDAwLTAwNDc4MDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgNDEwMyAgICAgICAvYmluL2Jhc2gKMDA0NzgwMDAtMDA0N2UwMDAgcnctcCAwMDA3NzAwMCA1ZjowMCA0MTAzICAgICAgIC9iaW4vYmFzaAowMDQ3ZTAwMC0wMDQ5MjAwMCByd3hwIDAwMDAwMDAwIDAwOjAwIDAKNDAwMDAwMDAtNDAwMTUwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDM4MiAgICAgIC9saWIvbGQtMi4xLjIuc28KNDAwMTUwMDAtNDAwMTYwMDAgcnctcCAwMDAxNDAwMCA1ZjowMCAxNDM4MiAgICAgIC9saWIvbGQtMi4xLjIuc28KNDAwMTYwMDAtNDAwMTcwMDAgcnd4cCAwMDAwMDAwMCAwMDowMCAwCjQwMDE3MDAwLTQwMDE4MDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMAo0MDAxODAwMC00MDAxYjAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDE0NDM1ICAgICAgL2xpYi9saWJ0ZXJtY2FwLnNvLjIuMC44CjQwMDFiMDAwLTQwMDFjMDAwIHJ3LXAgMDAwMDIwMDAgNWY6MDAgMTQ0MzUgICAgICAvbGliL2xpYnRlcm1jYXAuc28uMi4wLjgKNDAwMWMwMDAtNDAxMGQwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDM4NyAgICAgIC9saWIvbGliYy0yLjEuMi5zbwo0MDEwZDAwMC00MDExMTAwMCBydy1wIDAwMGYwMDAwIDVmOjAwIDE0Mzg3ICAgICAgL2xpYi9saWJjLTIuMS4yLnNvCjQwMTExMDAwLTQwMTE0MDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMAo0MDExNDAwMC00MDExZTAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDE0NDA4ICAgICAgL2xpYi9saWJuc3NfZmlsZXMtMi4xLjIuc28KNDAxMWUwMDAtNDAxMWYwMDAgcnctcCAwMDAwOTAwMCA1ZjowMCAxNDQwOCAgICAgIC9saWIvbGlibnNzX2ZpbGVzLTIuMS4yLnNvCjdmZmZkMDAwLTgwMDAwMDAwIHJ3eHAgZmZmZmUwMDAgMDA6MDAgMAoKClNob3dpbmcgdXMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW5pdCB1c2VzIHdoZXJlIHRoZXkgYXJlIGluIG1lbW9yeQomIG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYS4KCi9wcm9jLzEvY3dkIGlzIGEgc29mdGxpbmsgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCi9wcm9jLzEvcm9vdCBpcyB0aGUgcm9vdCBvZiB0aGUgZmlsZXN5c3RlbSBmb3IgdGhpcyBwcm9jZXNzLiAKCi9wcm9jLzEvbWVtIGlzIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2Vzc2VzIG1lbW9yeSB3aGljaCB5b3UKY2FuIHJlYWQgJiB3cml0ZSB0byBsaWtlIGEgZmlsZS4Kc3RyYWNlIHVzZXMgdGhpcyBzb21ldGltZXMgYXMgaXQgaXMgYSBiaXQgZmFzdGVyIHRoYW4gdGhlCnJhdGhlciBpbmVmZmljaWVudCBwdHJhY2UgaW50ZXJmYWNlIGZvciBwZWVraW5nIGF0IERBVEEuCgoKY2F0IHN0YXR1cyAKCk5hbWU6ICAgaW5pdApTdGF0ZTogIFMgKHNsZWVwaW5nKQpQaWQ6ICAgIDEKUFBpZDogICAwClVpZDogICAgMCAgICAgICAwICAgICAgIDAgICAgICAgMApHaWQ6ICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDAKR3JvdXBzOgpWbVNpemU6ICAgICAgNDA4IGtCClZtTGNrOiAgICAgICAgIDAga0IKVm1SU1M6ICAgICAgIDIwOCBrQgpWbURhdGE6ICAgICAgIDI0IGtCClZtU3RrOiAgICAgICAgIDgga0IKVm1FeGU6ICAgICAgIDM2OCBrQgpWbUxpYjogICAgICAgICAwIGtCClNpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMApTaWdCbGs6IDAwMDAwMDAwMDAwMDAwMDAKU2lnSWduOiA3ZmZmZmZmZmQ3ZjBkOGZjClNpZ0NndDogMDAwMDAwMDAyODBiMjYwMwpDYXBJbmg6IDAwMDAwMDAwZmZmZmZlZmYKQ2FwUHJtOiAwMDAwMDAwMGZmZmZmZmZmCkNhcEVmZjogMDAwMDAwMDBmZmZmZmVmZgoKVXNlciBQU1c6ICAgIDA3MGRlMDAwIDgwNDE0MTQ2CnRhc2s6IDAwNGI2MDAwIHRzczogMDA0YjYyZDgga3NwOiAwMDRiN2NhOCBwdF9yZWdzOiAwMDRiN2Y2OApVc2VyIEdQUlM6CjAwMDAwNDAwICAwMDAwMDAwMCAgMDAwMDAwMGIgIDdmZmZmYTkwCjAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwNDVkOWY0CjAwNDVjYWZjICA3ZmZmZmE5MCAgN2ZmZmZmMTggIDAwNDVjYjA4CjAwMDEwNDAwICA4MDQwMzllOCAgODA0MDNhZjggIDdmZmZmOGIwClVzZXIgQUNSUzoKMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKMDAwMDAwMDEgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKS2VybmVsIEJhY2tDaGFpbiAgQ2FsbENoYWluICAgIEJhY2tDaGFpbiAgQ2FsbENoYWluCiAgICAgICAwMDRiN2NhOCAgIDgwMDJiZDBjICAgICAwMDRiN2QxOCAgIDgwMDJiOTJjCiAgICAgICAwMDRiN2RiOCAgIDgwMDVjZDUwICAgICAwMDRiN2UzOCAgIDgwMDVkMTJhCiAgICAgICAwMDRiN2YwOCAgIDgwMDE5MTE0ICAgICAgICAgICAgICAgICAgICAgClNob3dpbmcgYW1vbmcgb3RoZXIgdGhpbmdzIG1lbW9yeSB1c2FnZSAmIHN0YXR1cyBvZiBzb21lIHNpZ25hbHMgJgp0aGUgcHJvY2Vzc2VzJ2VzIHJlZ2lzdGVycyBmcm9tIHRoZSBrZXJuZWwgdGFza19zdHJ1Y3R1cmUKYXMgd2VsbCBhcyBhIGJhY2tjaGFpbiB3aGljaCBtYXkgYmUgdXNlZnVsIGlmIGEgcHJvY2VzcyBjcmFzaGVzCmluIHRoZSBrZXJuZWwgZm9yIHNvbWUgdW5rbm93biByZWFzb24uCgpTb21lIGRyaXZlciBkZWJ1Z2dpbmcgdGVjaG5pcXVlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkZWJ1ZyBmZWF0dXJlCi0tLS0tLS0tLS0tLS0KU29tZSBvZiBvdXIgZHJpdmVycyBub3cgc3VwcG9ydCBhICJkZWJ1ZyBmZWF0dXJlIiBpbgovcHJvYy9zMzkwZGJmIHNlZSBzMzkwZGJmLnR4dCBpbiB0aGUgbGludXgvRG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkKZm9yIG1vcmUgaW5mby4KZS5nLiAKdG8gc3dpdGNoIG9uIHRoZSBsY3MgImRlYnVnIGZlYXR1cmUiCmVjaG8gNSA+IC9wcm9jL3MzOTBkYmYvbGNzL2xldmVsCiYgdGhlbiBhZnRlciB0aGUgZXJyb3Igb2NjdXJyZWQuCmNhdCAvcHJvYy9zMzkwZGJmL2xjcy9zcHJpbnRmID4vbG9nZmlsZQp0aGUgbG9nZmlsZSBub3cgY29udGFpbnMgc29tZSBpbmZvcm1hdGlvbiB3aGljaCBtYXkgaGVscAp0ZWNoIHN1cHBvcnQgcmVzb2x2ZSBhIHByb2JsZW0gaW4gdGhlIGZpZWxkLgoKCgpoaWdoIGxldmVsIGRlYnVnZ2luZyBuZXR3b3JrIGRyaXZlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmY29uZmlnIGlzIGEgcXVpdGUgdXNlZnVsIGNvbW1hbmQKaXQgZ2l2ZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV0d29yayBkcml2ZXJzLgoKSWYgeW91IHN1c3BlY3QgeW91ciBuZXR3b3JrIGRldmljZSBkcml2ZXIgaXMgZGVhZApvbmUgd2F5IHRvIGNoZWNrIGlzIHR5cGUgCmlmY29uZmlnIDxuZXR3b3JrIGRldmljZT4gCmUuZy4gdHIwCllvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlCnRyMCAgICAgICBMaW5rIGVuY2FwOjE2LzQgTWJwcyBUb2tlbiBSaW5nIChOZXcpICBIV2FkZHIgMDA6MDQ6QUM6MjA6OEU6NDgKICAgICAgICAgIGluZXQgYWRkcjo5LjE2NC4xODUuMTMyICBCY2FzdDo5LjE2NC4xOTEuMjU1ICBNYXNrOjI1NS4yNTUuMjI0LjAKICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIE1VTFRJQ0FTVCAgTVRVOjIwMDAgIE1ldHJpYzoxCiAgICAgICAgICBSWCBwYWNrZXRzOjI0NjEzNCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCiAgICAgICAgICBUWCBwYWNrZXRzOjUgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgY2FycmllcjowCiAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjoxMDAKCmlmIHRoZSBkZXZpY2UgZG9lc24ndCBzYXkgdXAKdHJ5Ci9ldGMvcmMuZC9pbml0LmQvbmV0d29yayBzdGFydCAKKCB0aGlzIHN0YXJ0cyB0aGUgbmV0d29yayBzdGFjayAmIGhvcGVmdWxseSBjYWxscyBpZmNvbmZpZyB0cjAgdXAgKS4KaWZjb25maWcgbG9va3MgYXQgdGhlIG91dHB1dCBvZiAvcHJvYy9uZXQvZGV2ICYgcHJlc2VudHMgaXQgaW4gYSBtb3JlIHByZXNlbnRhYmxlIGZvcm0KTm93IHBpbmcgdGhlIGRldmljZSBmcm9tIGEgbWFjaGluZSBpbiB0aGUgc2FtZSBzdWJuZXQuCmlmIHRoZSBSWCBwYWNrZXRzIGNvdW50ICYgVFggcGFja2V0cyBjb3VudHMgZG9uJ3QgaW5jcmVtZW50IHlvdSBwcm9iYWJseQpoYXZlIHByb2JsZW1zLgpuZXh0IApjYXQgL3Byb2MvbmV0L2FycApEbyB5b3Ugc2VlIGFueSBoYXJkd2FyZSBhZGRyZXNzZXMgaW4gdGhlIGNhY2hlIGlmIG5vdCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMuCk5leHQgdHJ5CnBpbmcgLWMgNSA8YnJvYWRjYXN0X2FkZHI+IGkuZS4gdGhlIEJjYXN0IGZpZWxkIGFib3ZlIGluIHRoZSBvdXRwdXQgb2YKaWZjb25maWcuIERvIHlvdSBzZWUgYW55IHJlcGxpZXMgZnJvbSBtYWNoaW5lcyBvdGhlciB0aGFuIHRoZSBsb2NhbCBtYWNoaW5lCmlmIG5vdCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMuIGFsc28gaWYgdGhlIFRYIHBhY2tldHMgY291bnQgaW4gaWZjb25maWcKaGFzbid0IGluY3JlbWVudGVkIGVpdGhlciB5b3UgaGF2ZSBzZXJpb3VzIHByb2JsZW1zIGluIHlvdXIgZHJpdmVyIAooZS5nLiB0aGUgdHhidXN5IGZpZWxkIG9mIHRoZSBuZXR3b3JrIGRldmljZSBiZWluZyBzdHVjayBvbiApIApvciB5b3UgbWF5IGhhdmUgbXVsdGlwbGUgbmV0d29yayBkZXZpY2VzIGNvbm5lY3RlZC4KCgpjaGFuZGV2Ci0tLS0tLS0KVGhlcmUgaXMgYSBuZXcgZGV2aWNlIGxheWVyIGZvciBjaGFubmVsIGRldmljZXMsIHNvbWUKZHJpdmVycyBlLmcuIGxjcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgbGF5ZXIuCklmIHRoZSBkZXZpY2UgdXNlcyB0aGUgY2hhbm5lbCBkZXZpY2UgbGF5ZXIgeW91J2xsIGJlCmFibGUgdG8gZmluZCB3aGF0IGludGVycnVwdHMgaXQgdXNlcyAmIHRoZSBjdXJyZW50IHN0YXRlIApvZiB0aGUgZGV2aWNlLgpTZWUgdGhlIG1hbnBhZ2UgY2hhbmRldi44ICZ0eXBlIGNhdCAvcHJvYy9jaGFuZGV2IGZvciBtb3JlIGluZm8uCgoKClN0YXJ0aW5nIHBvaW50cyBmb3IgZGVidWdnaW5nIHNjcmlwdGluZyBsYW5ndWFnZXMgZXRjLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmJhc2gvc2gKCmJhc2ggLXggPHNjcmlwdG5hbWU+CmUuZy4gYmFzaCAteCAvdXNyL2Jpbi9iYXNoYnVnCmRpc3BsYXlzIHRoZSBmb2xsb3dpbmcgbGluZXMgYXMgaXQgZXhlY3V0ZXMgdGhlbS4KKyBNQUNISU5FPWk1ODYKKyBPUz1saW51eC1nbnUKKyBDQz1nY2MKKyBDRkxBR1M9IC1EUFJPR1JBTT0nYmFzaCcgLURIT1NUVFlQRT0naTU4NicgLURPU1RZUEU9J2xpbnV4LWdudScgLURNQUNIVFlQRT0naTU4Ni1wYy1saW51eC1nbnUnIC1EU0hFTEwgLURIQVZFX0NPTkZJR19IICAgLUkuIC1JLiAtSS4vbGliIC1PMiAtcGlwZQorIFJFTEVBU0U9Mi4wMQorIFBBVENITEVWRUw9MQorIFJFTFNUQVRVUz1yZWxlYXNlCisgTUFDSFRZUEU9aTU4Ni1wYy1saW51eC1nbnUgICAKCnBlcmwgLWQgPHNjcmlwdG5hbWU+IHJ1bnMgdGhlIHBlcmxzY3JpcHQgaW4gYSBmdWxseSBpbnRlcmFjdGl2ZSBkZWJ1Z2dlcgo8bGlrZSBnZGI+LgpUeXBlICdoJyBpbiB0aGUgZGVidWdnZXIgZm9yIGhlbHAuCgpmb3IgZGVidWdnaW5nIGphdmEgdHlwZQpqZGIgPGZpbGVuYW1lPiBhbm90aGVyIGZ1bGx5IGludGVyYWN0aXZlIGdkYiBzdHlsZSBkZWJ1Z2dlci4KJiB0eXBlID8gaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgoKCgpEdW1wdG9vbCAmIExjcmFzaCAoIGxrY2QgKQo9PT09PT09PT09PT09PT09PT09PT09PT09PQpNaWNoYWVsIEhvbHpoZXUgJiBvdGhlcnMgaGVyZSBhdCBJQk0gaGF2ZSBhIGZhaXJseSBtYXR1cmUgcG9ydCBvZiAKU0dJJ3MgbGNyYXNoIHRvb2wgd2hpY2ggYWxsb3dzIG9uZSB0byBsb29rIGF0IGtlcm5lbCBzdHJ1Y3R1cmVzIGluIGEKcnVubmluZyBrZXJuZWwuCgpJdCBhbHNvIGNvbXBsZW1lbnRzIGEgdG9vbCBjYWxsZWQgZHVtcHRvb2wgd2hpY2ggZHVtcHMgYWxsIHRoZSBrZXJuZWwncwptZW1vcnkgcGFnZXMgJiByZWdpc3RlcnMgdG8gZWl0aGVyIGEgdGFwZSBvciBhIGRpc2suClRoaXMgY2FuIGJlIHVzZWQgYnkgdGVjaCBzdXBwb3J0IG9yIGFuIGFtYml0aW91cyBlbmQgdXNlciBkbwpwb3N0IG1vcnRlbSBkZWJ1Z2dpbmcgb2YgYSBtYWNoaW5lIGxpa2UgZ2RiIGNvcmUgZHVtcHMuCgpHb2luZyBpbnRvIGhvdyB0byB1c2UgdGhpcyB0b29sIGluIGRldGFpbCB3aWxsIGJlIGV4cGxhaW5lZAppbiBvdGhlciBkb2N1bWVudGF0aW9uIHN1cHBsaWVkIGJ5IElCTSB3aXRoIHRoZSBwYXRjaGVzICYgdGhlIApsY3Jhc2ggaG9tZXBhZ2UgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL2xrY2QvICYgdGhlIGxjcmFzaCBtYW5wYWdlLgoKSG93IHRoZXkgd29yawotLS0tLS0tLS0tLS0tCkxjcmFzaCBpcyBhIHBlcmZlY3RseSBub3JtYWwgcHJvZ3JhbSxob3dldmVyLCBpdCByZXF1aXJlcyAyIAphZGRpdGlvbmFsIGZpbGVzLCBLZXJudHlwZXMgd2hpY2ggaXMgYnVpbHQgdXNpbmcgYSBwYXRjaCB0byB0aGUgCmxpbnV4IGtlcm5lbCBzb3VyY2VzIGluIHRoZSBsaW51eCByb290IGRpcmVjdG9yeSAmIHRoZSBTeXN0ZW0ubWFwLgoKS2VybnR5cGVzIGlzIGFuIG9iamVjdGZpbGUgd2hvc2Ugc29sZSBwdXJwb3NlIGluIGxpZmUKaXMgdG8gcHJvdmlkZSBzdGFicyBkZWJ1ZyBpbmZvIHRvIGxjcmFzaCwgdG8gZG8gdGhpcwpLZXJudHlwZXMgaXMgYnVpbHQgZnJvbSBrZXJudHlwZXMuYyB3aGljaCBqdXN0IGluY2x1ZGVzIHRoZSBtb3N0IGNvbW1vbmx5CnJlZmVyZW5jZWQgaGVhZGVyIGZpbGVzIHVzZWQgd2hlbiBkZWJ1Z2dpbmcsIGxjcmFzaCBjYW4gdGhlbiByZWFkIHRoZQouc3RhYnMgc2VjdGlvbiBvZiB0aGlzIGZpbGUuCgpEZWJ1Z2dpbmcgYSBsaXZlIHN5c3RlbSBpdCB1c2VzIC9kZXYvbWVtCmFsdGVybmF0aXZlbHkgZm9yIHBvc3QgbW9ydGVtIGRlYnVnZ2luZyBpdCB1c2VzIHRoZSBkYXRhIApjb2xsZWN0ZWQgYnkgZHVtcHRvb2wuCgoKClN5c1JxCj09PT09ClRoaXMgaXMgbm93IHN1cHBvcnRlZCBieSBsaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZS4KVG8gZW5hYmxlIGl0IGRvIGNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIApLZXJuZWwgSGFja2luZyAtPiBNYWdpYyBTeXNScSBLZXkgRW5hYmxlZAplY2hvICIxIiA+IC9wcm9jL3N5cy9rZXJuZWwvc3lzcnEKYWxzbyB0eXBlCmVjaG8gIjgiID4vcHJvYy9zeXMva2VybmVsL3ByaW50awpUbyBtYWtlIHByaW50ayBvdXRwdXQgZ28gdG8gY29uc29sZS4KT24gMzkwIGFsbCBjb21tYW5kcyBhcmUgcHJlZml4ZWQgd2l0aApeLQplLmcuCl4tdCB3aWxsIHNob3cgdGFza3MuCl4tPyBvciBzb21lIHVua25vd24gY29tbWFuZCB3aWxsIGRpc3BsYXkgaGVscC4KVGhlIHN5c3JxIGtleSByZWFkaW5nIGlzIHZlcnkgcGlja3kgKCBJIGhhdmUgdG8gdHlwZSB0aGUga2V5cyBpbiBhbgogeHRlcm0gc2Vzc2lvbiAmIHBhc3RlIHRoZW0gIGludG8gdGhlIHgzMjcwIGNvbnNvbGUgKQomIGl0IG1heSBiZSB3aXNlIHRvIHByZWRlZmluZSB0aGUga2V5cyBhcyBkZXNjcmliZWQgaW4gdGhlIFZNIGhpbnRzIGFib3ZlCgpUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHN5bmNpbmcgZGlza3MgdW5tb3VudGluZyAmIHJlYm9vdGluZwppZiB0aGUgbWFjaGluZSBnZXRzIHBhcnRpYWxseSBodW5nLgoKUmVhZCBEb2N1bWVudGF0aW9uL3N5c3JxLnR4dCBmb3IgbW9yZSBpbmZvCgpSZWZlcmVuY2VzOgo9PT09PT09PT09PQpFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlIFJlZmVyZW5jZSBTdW1tYXJ5CkVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24KSGFydG11dCBQZW5uZXJzIHMzOTAgc3RhY2sgZnJhbWUgc2hlZXQuCklCTSBNYWluZnJhbWUgQ2hhbm5lbCBBdHRhY2htZW50IGEgdGVjaG5vbG9neSBicmllZiBmcm9tIGEgQ0lTQ08gd2VicGFnZQpWYXJpb3VzIGJpdHMgb2YgbWFuICYgaW5mbyBwYWdlcyBvZiBMaW51eC4KTGludXggJiBHREIgc291cmNlLgpWYXJpb3VzIGluZm8gJiBtYW4gcGFnZXMuCkNNUyBIZWxwIG9uIHRyYWNpbmcgY29tbWFuZHMuCkxpbnV4IGZvciBzLzM5MCBFbGYgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZQpMaW51eCBmb3Igei9TZXJpZXMgRWxmIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UgKCBCb3RoIEhpZ2hseSBSZWNvbW1lbmRlZCApCnovQXJjaGl0ZWN0dXJlIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIFNBMjItNzgzMi0wMApFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBSZWZlcmVuY2UgU3VtbWFyeSBTQTIyLTcyMDktMDEgJiB0aGUKRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZS8zOTAgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24gU0EyMi03MjAxLTA1CgpTcGVjaWFsIFRoYW5rcwo9PT09PT09PT09PT09PQpTcGVjaWFsIHRoYW5rcyB0byBOZWFsZSBGZXJndXNvbiB3aG8gbWFpbnRhaW5zIGEgbXVjaApwcmV0dGllciBIVE1MIHZlcnNpb24gb2YgdGhpcyBwYWdlIGF0Cmh0dHA6Ly9wZW5ndWludm0ucHJpbmNldG9uLmVkdS9ub3Rlcy5odG1sI0RlYnVnMzkwCkJvYiBHcmFpbmdlciBTdGVmYW4gQmFkZXIgJiBvdGhlcnMgZm9yIHJlcG9ydGluZyBidWdzCg==