PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgQ1BNMiBJL08gcGluIGZ1bmN0aW9ucyBmb3IgTVBDODV4eCBwcm9jZXNzb3JzCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKCiogRml4IGNvbXBpbGUgcHJvYmxlbQoKKiBBZGRlZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODM0OUFEUyBib2FyZAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEgMTEgSmFuIDIwMDYKCiogRW5hYmxlIGFkZHJlc3MgdHJhbnNsYXRpb24gb24gTVBDODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDEwIEZlYiAyMDA2CgoqIERlY29wdWxlZCBzZXR0aW5nIG9mIE9SL0JSIGFuZCBMQkxBV0JBUi9MQkxBV0FSIG9uIE1QQzgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAyNSBKYW4gMjAwNgoKKiBGaXhlZCBkZWZpbmVzIGZvciBNUEM4M3h4IFNJQ1JMIHJlZ2lzdGVyIHRvIG1hdGNoIGN1cnJlbnQgc3BlY3MKICBQYXRjaCBieSBLdW1hciBHYWxhLCAyMyBKYW4gMjAwNgoKKiBPbmx5IGRpc2FibGUgdGhlIE1QQzgzeHggd2F0Y2hkb2cgaWYgaXRzIGVuYWJsZWQgb3V0IG9mIHJlc2V0LgogIElmIGl0cyBkaXNhYmxlZCBvdXQgb2YgcmVzZXQgU1cgY2FuIGxhdGVyIGVuYWJsZSBpdCBpZiBzbyBkZXNpcmVkCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWxsb3cgY29uZmlnIG9mIEdQSU8gZGlyZWN0aW9uICYgZGF0YSByZWdpc3RlcnMgYXQgYm9vdCBvbiA4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogRW5hYmxlIHRpbWUgaGFuZGxpbmcgb24gODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIE1ha2UgU3lzdGVtIElPIENvbmZpZyBSZWdpc3RlcnMgYm9hcmQgY29uZmlndXJhYmxlIG9uIE1QQzgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBGaXhlZCBQQ0kgaW5kaXJlY3QgY29uZmlnIG9wcyB0byBoYW5kbGUgbXVsdGlwbGUgUENJIGNvbnRyb2xsZXJzCiAgV2UgbmVlZCB0byBhZGp1c3QgdGhlIGJ1cyBudW1iZXIgd2UgYXJlIHRyeWluZyB0byBhY2Nlc3MgYmFzZWQKICBvbiB3aGljaCBQQ0kgY29udHJvbGxlciBpdHMgb24KICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMiBKYW4gMjAwNgoKKiBSZXBvcnQgYmFjayBQQ0kgYnVzIHdoZW4gZG9pbmcgdGFibGUgYmFzZWQgZGV2aWNlIGNvbmZpZwogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSSBwcmVmZXRjaGFibGUgcmVnaW9uIGFuZCBCQVJzCiAgSWYgYSBob3N0IGNvbnRyb2xsZXIgc2V0cyB1cCBhIHJlZ2lvbiBhcyBwcmVmZXRjaGFibGUgYW5kCiAgYSBkZXZpY2UncyBCQVIgZGVub3RlcyBpdCBhcyBwcmVmZXRjaGFibGUsIGFsbG9jYXRlIHRoZQogIEJBUiBpbnRvIHRoZSBwcmVmZXRjaCByZWdpb24uCgogIElmIGEgQkFSIGlzIHByZWZldGNoYWJsZSBhbmQgbm8gcHJlZmV0Y2hhYmxlIHJlZ2lvbiBoYXMKICBiZWVuIHNldHVwIGJ5IHRoZSBjb250cm9sbGVyIHdlIGZhbGwgYmFjayB0byBhbGxvY2F0aW5nCiAgdGhlIEJBUiBpbnRvIHRoZSBub3JtYWxseSBtZW1vcnkgcmVnaW9uLgogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZCBoZWxwZXIgZnVuY3Rpb24gZm9yIGdlbmVyaWMgZmxhdCBkZXZpY2UgdHJlZSBmaXh1cHMgZm9yIG1wYzgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBpbml0cmQgaW5mb3JtYXRpb24gdmlhIGZsYXQgZGV2aWNlIHRyZWUKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGRlZCBPRl9TVERPVVRfUEFUSCBhbmQgT0ZfU09DCgogIE9GX1NURE9VVF9QQVRIIHNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGV2aWNlIHRoZSBrZXJuZWwgY2FuIHVzZQogIGZvciBjb25zb2xlIG91dHB1dAoKICBPRl9TT0Mgc3BlY2lmaWVzIHRoZSBwcm9wZXIgbmFtZSBvZiB0aGUgU09DIG5vZGUgaWYgb25lIGV4aXN0cy4KICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBbGxvdyBib2FyZCBjb2RlIHRvIGZpeHVwIHRoZSBmbGF0IGRldmljZSB0cmVlIGJlZm9yZSBib290aW5nIGEga2VybmVsCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkZWQgQ09ORklHXyBvcHRpb25zIGZvciBiZF90IGFuZCBlbnYgaW4gZmxhdCBkZXYgdHJlZQoKCUNPTkZJR19PRl9IQVNfQkRfVCB3aWxsIHB1dCBhIGNvcHkgb2YgdGhlIGJkX3QKCWludG8gdGhlIHJlc3VsdGluZyBmbGF0IGRldmljZSB0cmVlLgoKCUNPTkZJR19PRl9IQVNfVUJPT1RfRU5WIHdpbGwgY29weSB0aGUgZW52aXJvbm1lbnQKCXZhcmlhYmxlcyBmcm9tIHUtYm9vdCBpbnRvIHRoZSBmbGF0IGRldmljZSB0cmVlCgogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgREhDUCB2ZW5kb3Igb3B0aW9uYWwgYm9vdGZpbGUgKCM2NykuCiAgSWdub3JlcyB0aGUgdmVuZG9yIFRGVFAgc2VydmVyIG5hbWUgb3B0aW9uICgjNjYpLgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CgoqIEZpeCBhIEhXIHRpbWluZyBpc3N1ZSBvbiA4NTQ4IENEUyBmb3IgZVRTRUMgMyBpbiBSR01JSSBtb2RlCiAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nLCAxNCBKdW4gMjAwNQoKKiBGaXggYmFkIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBMVFg5NzEgUEhZIG9uIE1QQzg1eHggYm9hcmRzLgogIFBhdGNoIGJ5IEdlcmhhcmQgSmFlZ2VyLCAyMSBKdW4gMjAwNQoKKiBBZGQgbmV0Y29uc29sZSBhbmQgc29tZSBtb3JlIGNvbW1hbmRzIHRvIFJQWGxpdGVfRFcgYm9hcmQKICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKCiogRml4IGJhZCBkZWNsYXJhdGlvbiBvbiBwY2lfY2ZnZnVuY19ub3RoaW5nCiAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1CgoqIEFkanVzdCAiZWNobyIgYXMgYSBkZWZhdWx0IGNvbW1hbmQKICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKCiogRml4IFBDSURGIGNhbGN1bGF0aW9uIGluIGNwdS9tcGM4MjYwL3NwZWVkLmMgZm9yIE1QQzgyODBFQwogIFBhdGNoIGJ5IEtva0hvdyBUZWgsIDE2IEp1biAyMDA1CgoqIEFkZCBjcmMgb2YgZGF0YSB0byBqZmZzMiAoaW4gamZmczJfMXBhc3NfYnVpbGRfbGlzdHMoKSkuCiAgUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNSBKdW4gMjAwNQoKKiBDb2RpbmcgU3R5bGUgY2xlYW51cAoKKiBBdm9pZCBkZXJlZmVyZW5jaW5nIE5VTEwgaW4gZmluZF9jbWQoKSBpZiBubyB2YWxpZCBjb21tYW5kcyB3ZXJlIGZvdW5kCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDEzIEp1biAyMDA1CgoqIEFkZCBBREkgQmxhY2tmaW4gc3VwcG9ydAogIC0gYWRkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluIEJGNTMzIENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBBREkgQkY1MzMgU3RhbXAgdUNsaW51eCBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBBREkgQkY1MzMgRVpLaXQgYm9hcmQKICBQYXRjaGVzIGJ5IFJpY2hhcmQgS2xpbmdsZXIsIDExIEp1biAyMDA1CgoqIEFkZCBsb2FkcyBvZiBudG9obCgpIGluIGltYWdlIGhlYWRlciBoYW5kbGluZwogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIEp1biAyMDA1CgoqIFN3aXRjaCBNUEM4NnhBRFMgYW5kIE1QQzg4NUFEUyBib2FyZHMgdG8gdXNlIGNwdWNsayBlbnZpcm9ubWVudAogIHZhcmlhYmxlIHRvIHNldCBjbG9jawogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CgoqIFJQWGxpdGUgY29uZmlndXJhdGlvbiBmaXhlcwogIC0gVXNlIGNvcnJlY3QgZmxhc2ggc2VjdG9yIHNpemUKICAtIFVzZSBjb3JyZWN0IG1lbW9yeSB0ZXN0IGVuZCBhZGRyZXNzCiAgLSBBZGQgc3VwcG9ydCBmb3IgYnppcDIgY29tcHJlc3Npb24KICAtIFZhcmlvdXMgc21hbGwgZml4ZXMKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQoKKiBNZW1vcnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBaUEMuMTkwMCBib2FyZAogIC0gRml4IFNEUkFNIHRpbWluZyBvbiBib3RoIGxvY2FsIGJ1cyBhbmQgNjB4IGJ1cwogIC0gQWRkIHN1cHBvcnQgZm9yIHNlY29uZCBmbGFzaCBiYW5rIChTSU1NKQogIC0gQ2hhbmdlIGJvb3QgZmxhc2ggYmFzZQogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBZGRlciBib2FyZHMgd2l0aCAxNk1CIFNEUkFNOwogIGFkZCBzdXBwb3J0IGZvciBzZWNvbmQgRkVDIG9uIEFkZGVyODd4IGJvYXJkLgogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CgoqIEZpeCBjb25kaXRpb25hbCBmb3IgaW5jbHVkaW5nIGtzODY5NWV0aCBkcml2ZXIKICBQYXRjaCBieSBHcmVnIFVuZ2VyZXIsIDA0IEp1biAyMDA1CgoqIEZpeCBNYWtlZmlsZTogaW5jbHVkZSBjb25maWcubWsgb25seSBhZnRlciBDUk9TU19DT01QSUxFIGlzIGRlZmluZWQKICBQYXRjaCBieSBGcmllZHJpY2ggTG9iZW5zdG9jaywgMDIgSnVuIDIwMDUKCiogRml4IGNvbW1lbnQgaW4gY29tbW9uL3NvZnRfaTJjLmMKICBQYXRjaGVzIGJ5IFBldGVyIEtvcnNnYWFyZC9Ub2x1bmF5IE9ya3VuLCAyNiBNYXkgMjAwNQoKKiBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzLgogIFBhdGNoIGJ5IEdyZWcgVW5nZXJlciwgMjEgTWF5IDIwMDUKCiogV29yZCBhbGlnbm1lbnQgZml4ZXMgZm9yIHdvcmQgYWxpZ25lZCBOUzE2NTUwIFVBUlQKICBQYXRjaCBieSBKZWFuLVBhdWwgU2FtYW4sIDAxIE1hciAyMDA1CgogIEZpeGVzIGJ1ZyB3aXRoIFVBUlQgdGhhdCBvbmx5IHN1cHBvcnRzIHdvcmQgYWxpZ25lZCBhY2Nlc3M6IHJlbW92ZWQKICAiX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOyIgZm9yICIoQ0ZHX05TMTY1NTBfUkVHX1NJWkUgPT0gNCkiIHNvbWUKICAoYnJva2VuISkgdmVyc2lvbnMgb2YgR0NDIGdlbmVyYXRlIGJ5dGUgYWNjZXNzZXMgd2hlbiBlbmNvdW50ZXJpbmcKICB0aGUgcGFja2VkIGF0dHJpYnV0ZSByZWdhcmRsZXNzIGlmIHRoZSBzdHJ1Y3QgaXMgYWxyZWFkeSBjb3JyZWN0bHkKICBhbGlnbmVkIGZvciBhIHBsYXRmb3JtLiBQZXJpcGhlcmFscyB0aGF0IGNhbiBvbmx5IGhhbmRsZSB3b3JkCiAgYWxpZ25lZCBhY2Nlc3Mgd29uJ3Qgd29yayBwcm9wZXJseSB3aGVuIGFjY2Vzc2VkIHdpdGggYnl0ZSBhY2Nlc3MuCiAgVGhlIHN0cnVjdCBOUzE2NTUwIGlzIGFscmVhZHkgd29yZCBhbGlnbmVkIGZvciBSRUdfU0laRSA9IDQsIHNvCiAgdGhlcmUgaXMgbm8gbmVlZCB0byBwYWNrZWQgdGhlIHN0cnVjdCBpbiB0aGF0IGNhc2UuCgoqIEZpeCBiZWhhdmlvdXIgaWYgZ2F0ZXdheWlwIGlzIG5vdCBzZXQKICBQYXRjaCBieSBSb2JpbiBHaWxrcywgMjMgRGVjIDIwMDQKCiogRml4IGNsZWFudXAgZm9yIG5ldHN0YXJ0IGJvYXJkLgogIFJlbW92ZSBidWlsZCByZXN1bHRzIGZyb20gcmVwb3NpdG9yeQoKKiBTb21lIGNvZGUgY2xlYW51cCBmb3IgR0NDIDQueAoKKiBGaXhlcyB0byBzdXBwb3J0IGVudmlyb25tZW50IGluIE5BTkQgZmxhc2g7CiAgZW5hYmxlIE5BTkQgZmxhc2ggYmFzZWQgZW52aXJvbm1lbnQgZm9yIGRlbHRhIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgTW9uYWhhbnMgQ1BVIG9uIFp5bG9uaXRlIGFuZCBEZWx0YSBib2FyZHMKICAoVGhpcyBpcyBXb3JrIGluIFByb2dyZXNzISkKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNjAtQUkgYm9hcmRzLgoKKiBNaW5vciBjb2RlIGNsZWFudXAKCiogTWVyZ2UgdGhlIG5ldyBOQU5EIGNvZGUgKHRlc3RpbmctTkFORCBicmFjaCk7IHNlZSBkb2MvUkVBRE1FLm5hbmQKICBSZXdyaXRlIG9mIE5BTkQgY29kZSBiYXNlZCBvbiB3aGF0IGlzIGluIDIuNi4xMiBMaW51eCBrZXJuZWwKICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjkgSnVuIDIwMDUKCiogQWRkIGxvd2Jvb3QgdGFyZ2V0IHRvIG1jYzIwMCBib2FyZAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBNYXIgMjAwNgoKKiBGaXggcHJvYmxlbSB3aXRoIGZsYXNoX2dldF9zaXplKCkgZnJvbSBDRkkgZHJpdmVyIHVwZGF0ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMSBNYXIgMjAwNgoKKiBNYWtlIENGR19OT19GTEFTSCB3b3JrIG9uIEFSTSBzeXN0ZW1zCiAgUGF0Y2ggYnkgTWFya3VzIEtsb3R6YnVlY2hlciwgMjcgRmViIDIwMDYKCiogVXBkYXRlIG1jYzIwMCBjb25maWc6IERpc2FibGUgUENJIGFuZCBEb0MsIHVzZSAxMzMgTUh6IElQQiBjbG9jaywKICB1c2UgaHVzaCBzaGVsbC4KCiogQ29udmVydCBtY2MyMDAgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBGZWIgMjAwNgoKKiBBZGQgZW52LXZhcmlhYmxlICJ1bmxvY2siIHRvIGhhbmRsZSBpbml0aWFsIHN0YXRlIG9mIHNlY3RvcnMKICAobG9ja2VkL3VubG9ja2VkKS4KCiAgT25seSB0aGUgVS1Cb290IGltYWdlIGFuZCBpdCdzIGVudmlyb25tZW50IGlzIHByb3RlY3RlZCwKICBhbGwgb3RoZXIgc2VjdG9ycyBhcmUgdW5wcm90ZWN0ZWQgKHVubG9ja2VkKSBpZiBmbGFzaAogIGhhcmR3YXJlIHByb3RlY3Rpb24gaXMgdXNlZCAoQ0ZHX0ZMQVNIX1BST1RFQ1RJT04pIGFuZAogIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAidW5sb2NrIiBpcyBzZXQgdG8gInllcyIuCgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggRmViIDIwMDYKCiogVXBkYXRlIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBmaW5kX3NlY3RvcigpIGNhbGxlZCBpbiBib3RoIHZlcnNpb25zIG9mIGZsYXNoX3dyaXRlX2NmaXdvcmQoKQogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMjd0aCBGZWIgMjAwNgoKKiBDRkkgc3VwcG9ydCBmb3IgYSB4OC94MTYgQU1EL1NwYW5zaW9uIGZsYXNoIGNvbmZpZ3VyZWQgaW4geDggbW9kZQogIFBhdGNoIGJ5IEpvc2UgTWFyaWEgTG9wZXosIDE2IEphbiAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciBBTUQvU3BhbnNpb24gRmxhc2hlcyBpbiBmbGFzaF93cml0ZV9jZmlidWZmZXIKICBQYXRjaCBieSBBbGV4IEJhc3RvcyBhbmQgVGhvbWFzIFNjaGFlZmVyLCAyMDA1LTA4LTI5CgoqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgV2UgKnNob3VsZCogY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBlcnJvciBiaXRzIGlmIHRoZSBwcmV2aW91cyBjYWxsCiAgcmV0dXJuZWQgRVJSX09LIChPdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIG91dHB1dCBhbiBlcnJvciBtZXNzYWdlIGluCiAgZmxhc2hfc3RhdHVzX2NoZWNrKCkgYWxyZWFkeS4pICBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBvbmx5IGNoZWNrIGZvcgogIGVycm9yIGJpdHMgaWYgZmxhc2hfc3RhdHVzX2NoZWNrKCkgcmV0dXJucyBFUlJfVElNRU9VVC4KICBQYXRjaCBieSBNYXJjdXMgSGFsbCwgMjMgQXVnIDIwMDUKCiogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIEFkZCBDRkdfRkxBU0hfUFJPVEVDVF9DTEVBUiBvbiBkcml2ZXJzL2NmaV9mbGFzaC5jCiAgLSBQcm9oaWJpdCBidWZmZXIgd3JpdGUgd2hlbiBidWZmZXJfc2l6ZSBpcyAxIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKICBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDE5IEF1ZyAyMDA1CgoqIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gRml4IHdyb25nIHRpbWVvdXQgdmFsdWUgdXNhZ2UgaW4gZmxhc2hfc3RhdHVzX2NoZWNrKCkKICAtIFJvdW5kIHdyaXRlX3RvdXQgdXAgd2hlbiBjb252ZXJ0aW5nIHRvIG1zZWMgaW4gZmxhc2hfZ2V0X3NpemUoKQogIC0gUmVtb3ZlIGNsZWFyaW5nIGZsYXNoIHN0YXR1cyBhdCB0aGUgZW5kIG9mIGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcigpCiAgICB3aGljaCBzZXRzIEludGVsIDI4RjY0MEozIGZsYXNoIGJhY2sgdG8gY29tbWFuZCBtb2RlIG9uIENTQjQ3MgogIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDAyIEp1bHkgMjAwNQoKKiBBZGQgYmFzaWMgc3VwcG9ydCBmb3IgdGhlIFNNTUFDTzQgQm9hcmQgZnJvbSBQYW5EYUNvbS4KICBQYXRjaCBieSBIZWlrbyBTY2hvY2hlciwgMjAgRmViIDIwMDYKCiogQWRkIEdJVCB2ZXJzaW9uIGluZm9ybWF0aW9uIChjb21taWQgSUQpIHRvIHVudGFnZ2VkIFUtQm9vdCB2ZXJzaW9ucwoKICBBcyBkb25lIGluIHRoZSBsaW51eCBrZXJuZWwsIHRoZSBVLUJvb3QgdmVyc2lvbiAoVV9CT09UX1ZFUlNJT04pCiAgb2YgYWxsIHVucmVsZWFzZWQgKHVudGFnZ2VkKSBVLUJvb3QgaW1hZ2VzIHdpbGwgYmUgYXV0b21hdGljYWxseQogIGV4dGVuZGVkIHVwb24gY29tcGlsZXRpbWUgd2l0aCBhIHBhcnQgb2YgdGhlIEdJVCBjb21taXQgSUQgYW5kCiAgcG9zc2libHkgd2l0aCAiZGlydHkiIGlmIHVuY29tbWl0ZWQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuCgogIEhlcmUgYW4gZXhhbXBsZSBmb3IgdGhlIHJlc3VsdGluZyB2ZXJzaW9uOgogICJVLUJvb3QgMS4xLjQtZzM0NTdhYzE4LWRpcnR5IgoKICBUaGUgdmVyc2lvbiBpcyBub3cgbWFpbnRhaW5lZCBpbiB0aGUgdG9wbGV2ZWwgTWFrZWZpbGUgYW5kIHRoZQogIHZlcnNpb24gaGVhZGVycyBhcmUgYXV0b2dlbmVyYXRlZC4KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA5IEZlYiAyMDA2CgoqIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBJTktBNHgwMCBib2FyZC4KCiogQ29udmVydCBDUENJNzUwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgogIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDggRmViIDIwMDYKCiogVmFyaW91cyBjaGFuZ2VzIHRvIGVzZCBISDQwNSBib2FyZCBzcGVjaWZpYyBmaWxlcwogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwNyBGZWIgMjAwNgoKKiBDbGVhbnVwIFUtQm9vdCBib290IG1lc3NhZ2VzIG9uIEFSTS4KCiAgVG8gbWF0Y2ggdGhlIFUtQm9vdCB1c2VyIGludGVyZmFjZSBvbiBBUk0gcGxhdGZvcm1zIHRvIHRoZSBVLUJvb3QKICBzdGFuZGFyZCAoYXMgb24gUFBDIHBsYXRmb3JtcyksIHNvbWUgbWVzc2FnZXMgd2l0aCBkZWJ1ZyBjaGFyYWN0ZXIKICBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZWZhdWx0IFUtQm9vdCBidWlsZC4KICBFbmFibGUgREVCVUcgZm9yIGxpYl9hcm0vYm9hcmQuYyB0byBlbmFibGUgZGVidWcgbWVzc2FnZXMuCiAgTmV3IENPTkZJR19ESVNQTEFZX0NQVUlORk8gYW5kIENPTkZJR19ESVNQTEFZX0JPQVJESU5GTyBvcHRpb25zLgogIFBhdGNoICBieSBTdGVmYW4gUm9lc2UsIDI0IEphbiAyMDA2CgoqIEZpeCB2YXJpb3VzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIHBwYzR4eCBidWlsZHMgKEVMREsgNC4wKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggSmFuIDIwMDYKCiogQWRkIFZHQSBzdXBwb3J0IChDVDY5MDAwKSB0byBDUENJNzUwIGJvYXJkLgogIEluc2VydCBtaXNzaW5nIF9fbGUzMl90b19jcHUoKSBmb3IgZmlsZXNpemUgaW4gZXh0MmZzX3JlYWRfZmlsZSgpLgogIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDMwIERlYyAyMDA1CgoqIFBNQzQwNSBhbmQgQ1BDSTQwNTogTW92ZWQgY29uZmlndXJhdGlvbiBvZiBwY2kgcmVzb3VyY2VzCiAgaW50byBjb25maWcgZmlsZS4KICBQTUM0MDUgYW5kIENQQ0kyRFA6IEFkZGVkIGZpcm13YXJlIGRvd25sb2FkIGFuZCBib290aW5nIHZpYSBwY2kuCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIwIERlYyAyMDA1CgoqIEZpeCAyOEYyNTZKM0Egc3VwcG9ydCBvbiBQTTUyMCBib2FyZAogICh3aXRob3V0IGJhbmstc3dpdGNoaW5nIG9ubHkgMzIgTUIgY2FuIGJlIGFjY2Vzc2VkKQoKKiBGaXggbWtpbWFnZSBidWcgd2l0aCBtdWx0aWZpbGUgaW1hZ2VzIGNyZWF0ZWQgb24gNjQgYml0IHN5c3RlbXMuCgoqIEFkZCBzdXBwb3J0IGZvciAyOEYyNTZKM0EgZmxhc2ggKD0+IDY0IE1CKSBvbiBQTTUyMCBib2FyZAoKKiBGaXggY29tcGlsZXIgcHJvYmxlbSB3aXRoIGF0OTFybTkyMDBkayBib2FyZC4KICBQYXRjaCBieSBFdWdlbiBCaWd6LCAxOSBEZWMgMjAwNQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQ2hhbmdlcyB0byBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIDQ0MEVQL0dSIGV2YWwgYm9hcmRzOgogIC0gQ2hhbmdlZCBHUElPIHNldHVwIHRvIGVuYWJsZSBhbm90aGVyIGFkZHJlc3MgbGluZSBpbiBvcmRlciB0bwogICAgYWRkcmVzcyA2NE0gb2YgRkxBU0guCiAgLSBBZGRlZCBmdW5jdGlvbiBzZHJhbV90cjFfc2V0IHRvIGF1dG8gY2FsY3VsYXRlIHRoZSB0cjEgdmFsdWUgZm9yCiAgICB0aGUgRERSLgogIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDEyIERlYyAyMDA1CgoqIE1QQzUyMDA6ICBTZXQgUENJIHJldHJ5IGNvdW50ZXIgdG8gMCA9IGluZmluaXRlIHJldHJ5OwogIFRoZSBkZWZhdWx0IG9mIDI1NSBpcyB0b28gc2hvcnQgZm9yIHNsb3cgZGV2aWNlcy4KICBQYXRjaCBieSBNYXJ0aW4gTnlrb2R5bSwgMTIgRGVjIDIwMDUKCiogQ2hhbmdlIHBvcnQgY29uZmlndXJhdGlvbiBmb3IgTzJETlQgKENPREVDMSBvbiBQU0MxKS4KCiogRml4IHJlZ2lzdGVyIGZvciBQQ0kgYXN5bmMgbW9kZSBvbiBQUEM0NDBFUAogIFBhdGNoIGJ5IFlvdW5nY2h1bCBCYW5nLCAwOCBEZWMgMjAwNQoKKiBGaXggVS1Cb290IGxpbmtpbmcgcHJvYmxlbXMgKGFkZCAuZWhfZnJhbWUgc2VnbWVudCB0byBsaW5rZXIgc2NyaXB0KQogIFRoaXMgc2VnbWVudCBtYXkgYmUgcmVxdWlyZWQgYnkgc29tZSBsaWJnY2MuYSBmdW5jdGlvbnMKICAobGlrZSBfdWRpdmRpMykuCgoqIEZpeCBEUFJBTSBvZmZzZXQvc2l6ZSBmb3IgTVBDODU0MS84NTU1LgogIFNpbXBsaWZ5IFRRTTg1eHggTWFrZWZpbGUgaGFuZGxpbmcuCgoqIEZpeCBkYXRhIG92ZXJmbG93ICh0eXBvPykgaW4gcnRjL2RzMTMwMi5jCgoqIEZpeCBVLUJvb3QgY29tcGlsYXRpb24gZm9yIE1JUFMgYm9hcmRzIHVzaW5nIEVMREsgNC4wCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzLCBUUU04NXh4IHN1cHBvcnQgcmV3b3JrZWQ6CiAgLSBTdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzIGFkZGVkLgogIC0gQ29tcGxldGUgcmV3b3JrIG9mIFRRTTg1NDAvODU2MCBzdXBwb3J0LgogIC0gQ29tbW9uIFRRTTg1eHggY29kZSBub3cgc3VwcG9ydHMgYWxsIGN1cnJlbnQgVFFNODV4eCBwbGF0Zm9ybXMKICAgIChUUU04NTQwLzg1NDEvODU1NS84NTYwKS4KICAtIEREUiBTRFJBTSBzaXplIGRldGVjdGlvbiBhZGRlZC4KICAtIENBUyBsYXRlbmN5IGRlZmF1bHQgdmFsdWVzIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzZXR0aW5nICJzZXJpYWwjIgogICAgdG8gZS5nLiAiQUJDMDAwMSBjYXNsPTI1IiAtPiBDQVMgbGF0ZW5jeSAyLjUgd2lsbCBiZSB1c2VkLgogICAgSWYgcHJvYmxlbXMgYXJlIGRldGVjdGVkIHdpdGggdGhpcyBub24gZGVmYXVsdCBDQVMgbGF0ZW5jeSwKICAgIHRoZSBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KICAtIEZsYXNoIHNpemUgZGV0ZWN0aW9uIGFkZGVkLgogIC0gTW92ZWQgRkNDIGV0aGVybmV0IGRyaXZlciBpbml0aWFsaXphdGlvbiBiZWhpbmQgVFNFQyBkcml2ZXIgaW5pdAogICAgLT4gVFNFQyBpcyBmaXJzdCBkZXZpY2UuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBOb3YgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBTUCwgYWRkIHN1cHBvcnQgZm9yIEFNQ0MgTHVhbiA0NDBTUCBldmFsIGJvYXJkLgogIFBhdGNoIGJ5IEpvaG4gT3RrZW4sIDIzIE5vdiAyMDA1CgoqIENoYW5nZWQgUFBDNDR4IHN0YXJ0dXAgbWVzc2FnZSAoY3B1IGluZm8sIHNwZWVkLi4uKSB0byBjb21tb24gc3R5bGU6CiAgT24gUFBDNDR4IHBsYXRmb3JtcywgdGhlIHN0YXJ0dXAgbWVzc2FnZSBnZW5lcmF0ZWQgaW4gImNwdS5jIiBvbmx5CiAgY29tcHJpc2VkIHRoZSBwcGMgdHlwZSBhbmQgcmV2aXNpb24gYnV0IG5vdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCiAgbGlrZSBzcGVlZCBldGMuIFRob3NlIHNwZWVkIGluZm9zIHdoZXJlIHByaW50ZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljCiAgY29kZS4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gbm93IHByaW50cyBhbGwgQ1BVIGluZm9zIGluIHRoZSBjb21tb24KICBjcHUgc3BlY2lmaWMgY29kZS4gTm8gYm9hcmQgc3BlY2lmaWMgY29kZSBpcyBuZWVkZWQgYW55bW9yZSBhbmQKICB0aGVyZWZvcmUgcmVtb3ZlZCBmcm9tIGFsbCBjdXJyZW50IDQ0eCBpbXBsZW1lbnRhdGlvbnMuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBOb3YgMjAwNQoKKiBBZGp1c3QgVFFNODM0eCBQSFkgYWRkcmVzc2VzIGZvciBsYXRlc3QgaGFyZHdhcmUgcmV2aXNpb24uCgoqIEluY3JlYXNlIG1hbGxvYyBhcmVuYSBvbiBUUU01MjAwIGJvYXJkIHRvIDI1NiBrQi4KICBXaXRoIDY0IGtiIHVuaWZvcm0gZmxhc2ggc2VjdG9yIHNpemUgdGhlIG9sZCB2YWx1ZSBvZiAxMjgga0Igd2FzCiAgdG9vIHNtYWxsLgoKKiBGaXggbWlpcGh5IGdsb2JhbCBkYXRhIGluaXRpYWxpemF0aW9uIChwcm9ibGVtIG9uIDR4eCBib2FyZHMgd2hlbgogIG5vIGV0aGFkZHIgaXMgYXNzaWduZWQpLiBJbml0aWFsaXphdGlvbiBtb3ZlZCBmcm9tCiAgbWlpcGh5X3JlZ2lzdGVyKCkgdG8gZXRoX2luaXRpYWxpemUoKS4KCiAgQmFzZWQgb24gaW5pdGlhbCBwYXRjaCBmb3IgNHh4IHBsYXRmb3JtIGJ5IE1hdHRoaWFzIEZ1Y2hzLgoKKiBSZW1vdmUgdW5ubmVjZXNzYXJ5ICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiBmcm9tIGluY2x1ZGUvYXNtLSovdS1ib290LmgKCiogQWxsb3cgdXNlIG9mIGluY2x1ZGUvaW1hZ2UuaCBhbmQgaW5jbHVkZS9hc20tKi91LWJvb3QuaCBpbiBwcm9wcmlldGFyeSBjb2RlLgogIFRoZSBDT1BZSU5HIGZpbGUgd2FzIGV4dGVuZGVkIHRvIG1ha2UgY2xlYXIgdGhhdCB0aGVzZSBmaWxlcyBjYW4gYmUKICB1c2VkIGluIG5vbi1HUEwgY29kZSwgdG9vLgogIEFsc28sIGEgY29ycmVzcG9uZGluZyBub3RlIHdhcyBwbGFjZWQgaW4gdGhlIGhlYWRlcnMgb2YgdGhlIGFmZmVjdGVkIGZpbGVzLgoKKiBBZGQgc3VwcG9ydCBmb3IgUHJvZHJpdmUgUDNQNDQwIGJvYXJkOgogIC0gQWRkZWQgb25ib2FyZCBQUEM0NDAgRERSIGF1dG9kZXRlY3Rpb24gaW4gY3B1L3BwYy9zZHJhbS5jCiAgLSBDRkdfRkxBU0hfUVVJRVRfVEVTVCBhZGRlZCB0byB1c2UgdGhlIGNvbW1vbiBDRkkgZHJpdmVyCiAgICBmb3IgYmFuayBhdXRvZGV0ZWN0aW9uCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMiBOb3YgMjAwNQoKKiBDaGFuZ2UgYWxsICckKC4uLiknIHZhcmlhYmxlIHJlZmVyZW5jZXMgaW50byAnJHsuLi59JwogIHdoaWNoIG1ha2VzIHRoZSBlbnZpcm9ubWVudCBjb21wYXRpYmxlIHdpdGggdGhlIGh1c2ggc2hlbGwuCiAgV0FSTklORzogU3VwcG9ydCBmb3IgdGhlIG9sZCAnJCguLi4pJyBzeW50YXggd2lsbCBiZQogIGRpc2NvbnRpbnVlZCBpbiBhIGxhdGVyIHZlcnNpb24uCgoqIE1pbm9yIGNoYW5nZXMgdG8gaW5pdCBmbGFncyBpbiBUUU04MzR4IFBDSS4KCiogRml4IEJhbWJvbyBERFIgU0RSQU0gaW5pdGlhbGl6YXRpb24gKHByb2JsZW0gd2l0aCBvbmJvYXJkIFNEUkFNKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgTm92IDIwMDUKCiogTmV3IFBQQyA0MDVFUCBib2FyZCBhZGRlZDogQ01TNzAwCiAgQWRkZWQgQ09ORklHX05FVF9NVUxUSSBmb3IgVk9NNDA1IGJvYXJkLgogIEFkZGVkIHJlc2V0X3BoeSgpIGZvciBWT000MDUgYm9hcmQuCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA5IE5vdiAyMDA1CgoqIFVwZGF0ZWQgUENJIG1hcHBpbmcgZm9yIGVzZCBDUENJMkRQIGJvYXJkLgogIEFkZCBzdXBwb3J0IGZvciBlcnJvciBMRUQuCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA3IE5vdiAyMDA1CgoqIEZpeCBNUEM4NXh4IFBDSSBzdXBwb3J0IChwY2lfcmVnaXN0ZXJfaG9zZSgpIGJlZm9yZSBwY2kgY29uZmlnIGFjY2VzcykKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE5vdiAyMDA1CgoqIENvcnJlY3QgUFBDIFRpbWViYXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIChTUFJOX1RCUkwuLi4pCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBOb3YgMjAwNQoKKiBBZGp1c3QgYmQtPmJpX2ZsYXNoc3RhcnQgb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZSB0byBjb3JyZWN0IHNpemUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IE5vdiAyMDA1CgoqIEFkZGl0aW9uYWwgZml4IGZvciBleHRlcm5hbCBJUlEgY29uZmlnIG9uIFllbGxvd3N0b25lICYgWW9zZW1pdGUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE5vdiAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBPY290ZWEgcGFzcyAzIHdpdGggNDQwR1ggUmV2LiBGCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBOb3YgMjAwNQoKKiBGaXggZXh0ZXJuYWwgSVJRIGNvbmZpZ3VyYXRpb24gb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggT2N0IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIFBIWXMuCiAgVGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgYm9hcmRzOgoJY21jcHUyICAgICAgKGF0OTFybTkyMDAvZXRoZXIuYykKCVBQQ2hhbWVsZW9uIChwcGM0eHgvNHh4X2VuZXQuYykKCXl1a29uICAgICAgIChtcGM4MjIwL2ZlYy5jKQoJdWMxMDAgICAgICAgKG1wYzh4eC9mZWMuYykKCXRxbTgzNHggICAgIChtcGM4MzR4L3RzZWMuYykgd2l0aCBFRVBSTzEwMAoJbGl0ZTUyMDAgICAgKG1wYzV4eHgvZmVjLmMpIHdpdGggRUVQUk8xMDAgY2FyZCAoZHJpdmVycy9lZXBybzEwMC5jKQogIE1haW4gY2hhbmdlcyBpbmNsdWRlOgogIGNvbW1vbi9taWlwaHl1dGlsLmMKICAtIG1paXBoeV9yZWdpc3RlciByb3V0aW5lIHdhcyBhZGRlZCB0byBhbGxvdyBtdWx0aXBsZSBQSFlzIHRvIGJlIHJlZ2lzdGVyZWQKICAtIG1paXBoeV9yZWFkIGFuZCBtaWlwaHlfd3JpdGUgYXJlIG5vdyBkZWZpbmVkIGluIHRoaXMgZmlsZSwgYW5kCiAgICByZXF1aXJlIGFkZGl0aW9uYWwgYXJndW1lbnQgKGNoYXIgKmRldm5hbWUpCiAgLSBvdGhlciBtaWlwaHlfKiByb3V0aW5lcyBhbHNvIHJlcXVpcmUgYWRkaXRpb25hbCBkZXZpY2UgbmFtZSBhcmd1bWVudAogIC4uL2xpYl9pMzg2L2JvYXJkLmMKICAuLi9saWJfcHBjL2JvYXJkLmMKICBDYWxsaW5nIHJlc2V0X3BoeSgpIHdhcyBtb3ZlZCB0byBiZSBleGVjdXRlZCAqYWZ0ZXIqIGV0aF9pbml0aWFsaXplKCkuCiAgVGhpcyBpcyBuZWNlc3NhcnkgYXMgbm93IHNvbWUgb2YgdGhlIGltcGxlbWVudGF0aW9ucyBvZiByZXNldF9waHkoKQogIG1heSBuZWVkIHRvIHVzZSBtaWlwaHlfcmVzZXQoKSB3aGljaCBpcyBub3QgYWxsb3dlZCBiZWZvcmUgZXRoX2luaXRpYWxpemUoKQogIGFzIGV0aF9pbml0aWFsaXplIHJlZ2lzdGVycyBhbGwgcmVxdWlyZWQgbWlpcGh5Xyogcm91dGluZXMuCiAgVGVzdGVkIG9uIElQODYwIGFuZCBQSFkgaW5pdGlhbGl6ZXMgcHJvcGVybHkgYWZ0ZXIgdGhpcyBjaGFuZ2UuCgoqIENvcnJlY3QgaW5jbHVkZXMgZm9yIGZsYXQgdHJlZSBidWlsZGVyLgoKKiBGaXggY29uZmxpY3RpbmcgdHlwZXMgKGZsYXNoX3dyaXRlKCkpIGluIHRyYWIgYXV0b191cGRhdGUuYy4KCiogQWRkIFBDSSBzdXBwb3J0IGZvciB0aGUgVFFNODM0eCBib2FyZC4KCiogQWRkIG1pc3NpbmcgNHh4IGJvYXJkIHRvIE1BS0VBTEwKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CgoqIEZpeCBjb25mbGljdGluZyB0eXBlcyAoZmxhc2hfd3JpdGUoKSkgaW4gZXNkIGF1dG9fdXBkYXRlLmMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CgoqIEZpeCBwcm9ibGVtIHdpdGggc2xlZXAgaW4gTmV0Q29uc29sZSAodXNlIGdldF90aW1lcigpKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKCiogQWRkIE5ldENvbnNvbGUgU3VwcG9ydCBmb3IgQU1DQyBldmFsIGJvYXJkcwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKCiogRml4IE5ldENvbnNvbGUgc3VwcG9ydCBvbiA0eHggKG9ubHkgcHJpbnQgZXRoIGxpbmsgb24gMXN0IHRyYW5zZmVyKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggT2N0IDIwMDUKCiogQWRkIGZhdCAmIGV4dDIgc3VwcG9ydCB0byBBTUNDIDQ0MEVQIGJvYXJkcyBZb3NlbWl0ZSAmIEJhbWJvby4KICBGaXggaWRlbnRhdGlvbiBvbiBleHQybHMgaGVscCBlbnRyeS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IE9jdCAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MzR4IGJvYXJkcy4KICBDbGVhbnVwLgoKKiBDbGVhbnVwIGZvciBHQ0MtNC54CgoqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBPcGVuIEZpcm13YXJlIEZsYXQgVHJlZSBhbmQgdXNhZ2UuCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDEzIE9jdCAyMDA1CgoqIEFkZCBtaXNzaW5nIGZpbGVzIGZvciBQYW50ZWxpcyBBbnRvbmlvdSdzIHBhdGNoCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1CgoqIEZpeCBwcm9ibGVtIGluIHBwYzR4eCBldGgtZHJpdmVyIHdpdGhvdXQgZXRoYWRkciAob25seSB3aXRob3V0CiAgQ09ORklHX05FVF9NVUxUSSBzZXQpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBPY3QgMjAwNQoKKiBGaXggZ3ppcCBibXAgc3VwcG9ydCAodGVzdCBpZiBtYWxsb2MgZmFpbHMsIHdhcm5pbmcgd2hlbiB0cnVuY2F0ZWQpLgogIEluY3JlYXNlIENGR19WSURFT19MT0dPX01BWF9TSVpFIG9uIEhINDA1IGJvYXJkLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgT2N0IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIE9GIGZsYXQgdHJlZSBmb3IgdGhlIFNUWHRjIGJvYXJkLgogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQoKKiBTdXBwb3J0IHBhc3Npbmcgb2YgT0YgZmxhdCB0cmVlcyB0byB0aGUga2VybmVsLgogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQoKKiBDbGVhbnVwCgoqIEFkZCBzdXBwb3J0IGZvciBOZXRTaWxpY29uIE5TNzUyMCBwcm9jZXNzb3IuCiAgUGF0Y2ggYnkgQXJ0IFNoaXBrb3dza2ksIDEyIE1heSAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBUDEwMDAgYm9hcmQuCiAgUGF0Y2ggYnkgSmFtZXMgTWFjQXVsYXksIDA3IE9jdCAyMDA1CgoqIEVsaW1pbmF0ZSBoYXJkLWNvZGVkIGFkZHJlc3Mgb2YgRXRoZXJuZXQgdHJhbnNmZXIgYnVmZmVyIG9uIGF0OTFybTkyMDAKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNyBPY3QgMjAwNQoKICBUaGUgQXRtZWwgZXJyYXRhICMxMSBzdGF0ZXMgdGhhdCB0aGUgdHJhbnNmZXIgYnVmZmVyIGRlc2NyaXB0b3IKICB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSAxNi13b3JkIGJvdW5kYXJ5LiBBcyBpdCB0dXJuZWQgb3V0LCB0aGlzCiAgaXMgaW5zdWZmaWNpZW50IC0gaXQgc2VlbXMgdGhlIHRhYmxlIG11c3QgYmUgYWxpZ25lZCBvbiBhIGJvdW5kYXJ5CiAgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIHRhYmxlIGl0c2VsZiAoaW4gTGludXggdGhpcyBpcyBub3QgYW4KICBpc3N1ZSAtIHRoZSB0YWJsZSBpcyBhbGlnbmVkIG9uIGEgUEFHRV9TSVpFICg0MDk2KSBib3VuZGFyeSkuCgoqIEZpeGVkIGNvbXBpbGF0aW9uIGZvciBBUk0gd2hlbiB1c2luZyBhIChzdGFuZGFyZCkgaGFyZC1GUCB0b29sY2hhaW4KICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNyBPY3QgMjAwNQoKKiBDbGVhbnVwIHdhcm5pbmdzIGZvciBjcHUvYXJtNzIwdCAmIGNwdS9hcm0xMTM2IGZpbGVzLgogIHNlZCB0aGUgbGlua2VyIHNjcmlwdHMsIHJhdGhlciB0aGFuIHByZS1wcm9jZXNzIHRoZW0uCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNyBPY3QgMjAwNQoKKiBVcGRhdGUgbWFrZSB0YXJnZXQgZm9yIEFSTSBzdXBwb3J0ZWQgYm9hcmRzLgogIFVzZSBsb3dsZXZlbF9pbml0KCkgaW5zdGVhZCBvZiBwbGF0Zm9ybXNldHVwKCkgW3JlbmFtZV0uCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNiBPY3QgMjAwNQoKKiBGaXggYm9vdGluZyBmcm9tIHNlcmlhbCBkYXRhZmxhc2ggb24gQVQ5MVJNOTIwMAogIFBhdGNoIGJ5IFBldGVyIE1lbnplYmFjaCwgMjkgQXVnIDIwMDUKCiogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIFRSQUIgYm9hcmQKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNSBBdWcgMjAwNQoKKiBSZW1vdmUgdW5uZWNlc3NhcnkgZGVwZW5kZW5jeSBvZiBuZXRjb25zb2xlIG9uIENPTkZJR19ORVRfTVVMVEkKICBQYXRjaCBieSBNYXJjdXMgSGFsbCwgMjQgQXVnIDIwMDUKCiogRml4IHRoZSBtYWNoaW5lLWlkIG9mIHRoZSBDb2dlbnQgY3NiNjM3IGJvYXJkCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDUgT2N0IDIwMDUKCiogQ29tcGxldGUgc3VwcG9ydCBmb3IgdGhlIEt3aWtCeXRlIEtCOTIweCBib2FyZHMKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNSBPY3QgMjAwNQoKKiBTZXQgdGhlIEFUOTFSTTkyMDAgY2xvY2sgdG8gYXN5bmNocm9ub3VzIG1vZGUKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwMyBNYXkgMjAwNQoKKiBTZXQgdGhlIEFUOTFSTTkyMDAgY2xvY2sgdG8gc3luY2hyb25vdXMgbW9kZQogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgY3NiNjM3CiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKCiogRml4IGRtOTE2MS5jIGluaXRpYWxpemF0aW9uCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKCiogRml4IHByb2JsZW1zIGludHJvZHVjZWQgYnkgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDIgTWFyIDIwMDUKICAoOGUyYmU1MWRlOGRkMDNjMWNlNGQwNmNiYjE4YWQwNjEzM2Q0N2NkNSkKCiogTW92ZSBkbTkxNjEuYyBhbmQgbHh0OTcyLmMgaW50byBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKCiogRml4IGRldmljZSBwYXJ0aXRpb24gaW50aWFsaXphdGlvbiBmb3IgU3lzdGVtQUNFIGRpc2tzLgogIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDI4IEFwciAyMDA1CgoqIEFkZGVkIHN1cHBvcnQgZm9yIEt3aWtCeXRlIEtCOTIweCBib2FyZHMgKGJhc2VkIG9uIEFUOTFSTTkyMDApCiAgUGF0Y2ggYnkgTWF0dCA/PyA8a2I5MjAwX2RldkBrd2lrYnl0ZS5jb20+LCAyNyBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgUzI5R0wwNjRNLVIzIGZsYXNoIGNoaXAgb24geHNlbmdpbmUgYm9hcmQKICBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMTggQXByIDIwMDUKCiogRTUwMCB1cGRhdGU6IHJlcG9pbnQgSVZQUiB0byBSQU0gd2hlbiBjb2RlIGlzIHJlbG9jYXRlZAogIFBhdGNoIGJ5IEt5bG8gR2luc2JlcmcsIDEzIEFwciAyMDA1CgoqIEZpeCBsb29wIGVuZCB0ZXN0IGluIGxpYl9nZW5lcmljL3N0cmluZy5jOnN0cnN3YWIoKQogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCBPY3RvYmVyIDEwLCAyMDA1CiAgU2lnbmVkLW9mZi1ieTogQW5kcmV3IER5ZXIgPGFtZHllckBnbWFpbC5jb20+CgoqIENsZWFudXAKCiogVXBkYXRlIEFSTSBJbnRlZ3JhdG9yIGJvYXJkczoKICBDb3JyZWN0IGFkZGVzc2luZyBlcnJvcnMgaW4gcGxhdGZvcm0gZmlsZXMuCiAgU3BsaXQgb2ZmIGNvbW1vbiBjb3JlIG1vZHVsZSBkYXRhIGZyb20gSW50ZWdyYXRvciBoZWFkZXIgZmlsZXMgdG8KICBpbmNsdWRlL2FybWNvcmVtb2R1bGUuaC4KICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA0IE9jdCAyMDA1CgoqIE1ha2Ugc3VyZSBvbmx5IHN1cHBvcnRlZCBjb21waWxlciBvcHRpb25zIGFyZSB1c2VkCiAgSW1wb3J0ICJjYy1vcHRpb24iIHNoZWxsIGZ1bmN0aW9uIGZyb20ga2VybmVsIGFuZAogIHVzZSBpdCB0byBnZXQgdGhlIGNvcnJlY3QgQVJNIEdDQyBvcHRpb25zIGZvciBpbmRpdmlkdWFsIENQVXMKICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDMwIEp1biAyMDA1CgoqIEZpeCA0NDBHUiB0byBwcmludCBjb3JyZWN0IGNwdSByZXZpc2lvbgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDQgT2N0IDIwMDUKCiogQ2hhbmdlIGJvYXJkIG1lc3NhZ2Ugb24gQU1DQyBZb3NlbWl0ZSAmIFllbGxvd3N0b25lIHRvIGNvbW1vbiBzdHlsZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgT2N0IDIwMDUKCiogRml4IGNvbXBpbGVyIHdhcm5pbmcKCiogRml4IEZFQyBQSFkgYWRkcmVzc2VzIGZvciBUUU04NXh4IGJvYXJkcwoKKiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBwcm9ibGVtIGluIGh1c2ggc2hlbGwKICBQYXRjaCBieSBMYXJzIFJvc3RvY2ssIDI2IFNlcCAyMDA1CgoqIFVuZG8gY2hhbmdlIG9mIGY2ZTIwZmM2Y2EuLi4gdG8gaW5jbHVkZS9jb25maWdzL3RyYWIuaAogIChNdXN0IGhhdmUgYmVlbiBhbiBhY2NpZGVudD8pCgoqIEFkZCBzdXBwb3J0IGZvciBBVDkxUk05MjAwIE9IQ0kgQ29udHJvbGxlci4KICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKCiogVXBkYXRlIEFSTSBtYWNoLXR5cGVzLmgKICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIE1QMlVTQiBib2FyZC4KICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKCiogQWRkIGJvYXJkIHN1cHBvcnQgZm9yIGFybWFkaWxsbyBIVDEwNzAKICBQYXRjaCBieSBSb3dlbCBBdGllbnphLCAwNiBBcHIgMjAwNQoKKiBTZWNvbmQgRXRoZXJuZXQgYWRkcmVzcyBlbmFibGVkIGZvciBNUEM4ODVBRFMgYW5kIE1QQzgyNzJBRFMuCiAgUGF0Y2ggYnkgVml0YWx5IEJvcmR1ZywgMzAgTWFyIDIwMDUKCiogQWRkIGlvcHNldCBjb21tYW5kIG9uIG1wYzh4eAogIFBhdGNoIGJ5IERhbmllbCBFaXNlbmh1dCwgMjUgTWFyIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIE1JSSBpbiBlZXBybzEwMCBkcml2ZXIuCiAgUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAyMSBNYXIgMjAwNQoKKiBGaXhlcyB0byB0aGUgTHViYm9jayAoUFhBIDI1eCkgc3VwcG9ydDoKICAtIFJlc29sdmUgdGhlIEZJWE1FIHdpdGggcmVzcGVjdCB0byBzYXZpbmcgdGhlIHUtYm9vdCBlbnZpcm9ubWVudC4KICAtIE1ha2UgdGhlIGRlZmF1bHQgbG9hZCBhZGRyZXNzIGxhbmQgaW4gcmVhbCBtZW1vcnkuCiAgLSBGaXggbGFuOTFjOTYgU01DX3tpbixvdXR9e2IsdyxsfSgpIG1hY3JvcwogIFBhdGNoIGJ5IERhdmlkIEJyb3duZWxsLCAxMCBNYXIgMjAwNQoKKiBBZGQgQmFyY28gU3RyZWFtaW5nIFZpZGVvIENhcmQgKFNWQykgYW5kIFNhbXBsZSBDb21wcmVzcyBOZXR3b3JrIChTQ04pIGJvYXJkCiAgUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDA0IE1hciAyMDA1CgoqIE9NQVAyNDJ4IEg0IGJvYXJkIHVwZGF0ZQogIC0gZml4IGZvciBFUzIgZGlmZmVyZW5jZXMuCiAgLSBzd2l0Y2ggdG8gdXNpbmcgdGhlIGNmaV9mbGFzaCBkcml2ZXIuCiAgLSBmaXggU1JBTSBidWlsZCBhZGRyZXNzLgogIC0gZml4IGZvciBHUCBkZXZpY2Ugb3BlcmF0aW9uLgogIC0gdW5sb2NrIFNSQU0gZm9yIEdQIGRldmljZXMuCiAgLSBkaXNwbGF5IG1vcmUgZGV2aWNlIGluZm9ybWF0aW9uLgogIC0gZml4IHBvdGVudGlhbCBkZWFkbG9jayBpbiBvbWFwMjR4eF9pMmMgZHJpdmVyLgogIC0gZml4IERMTCBsb2FkIHZhbHVlcyB0byBtYXRjaCBkcGxsb3V0KjEgb3BlcmF0aW9uLgogIC0gZml4IDJuZCBjaGlwIHNlbGVjdCBpbml0IGZvciBjb21ibyBERFIgZGV2aWNlLgogIC0gYWRkIHN1cHBvcnQgZm9yIENGSSBJbnRlbCAyOEYyNTZMMTggb24gSDQgYm9hcmQuCiAgUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMDMgTWFyIDIwMDUKCiogRml4IGZvcm1hdGluZyBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL0FUOTFSTTkyMDAuaAogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAyIE1hciAyMDA1CgoqIEZpeCB0eXBvIGluIGV0aC5jCiAgUGF0Y2ggYnkgQXJhIEF2YW5lc3lhbiwgMjQgRmViIDIwMDUKCiogUmVtb3ZlIHVubmVlZGVkICNpbmNsdWRlIDxtYWxsb2MuaD4KICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjIgRmViIDIwMDUKCiogQWRkIGNyYW1mcyBzdXBwb3J0IGZvciBtNjhrCiAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDIxIEZlYiAyMDA1CgoqIFVwZGF0ZSBlcDgyNjA6IEZpeCBmbGFzaCB0aW1lb3V0czsgaW1wcm92ZSBjbG9jayByZXNvbHV0aW9uIGZvciBmYXN0ZXIgVUFSVHMKICBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMjEgRmViIDIwMDUKCiogRml4IGF1MXgwMF9zZXJpYWwgYmF1ZCByYXRlIGNhbGN1bGF0aW9uOgogIHJlbW92ZSBoYXJkY29kZWQgY3B1IGNsb2NrIGRpdmlzb3IgYW5kIHVzZSByZWdpc3RlciBpbnN0ZWFkOwogIHJvdW5kIHVwIGluc3RlYWQgb2YgdHJ1bmNhdGUKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTUgRmViIDIwMDUKCiogQWRkIFhpbGlueCBTcGFydGFuMyBmYW1pbHkgRlBHQSBzdXBwb3J0CiAgUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDE0IEZlYiAyMDA1CgoqIEZpeCBkcml2ZXJzL2NmaV9mbGFzaC5jOiB1c2UgaW5mby0+cmVzZXRfY21kIGluc3RlYWQgb2YgRkxBU0hfQ01EX1JFU0VUCiAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDExIEZlYiAyMDA1CgoqIEZpeCBWT0g0MDUgU3VwcG9ydAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyNSBTZXAgMjAwNQoKKiBBZGRlZCBzdXBwb3J0IGZvciBQQ0kgYnJpZGdlIG9uIE1QQzgyNzJBRFMKICBQYXRjaCBieSBWaXRhbHkgQm9yZHVnLCBGZWIgMDkgMjAwNQoKKiBVcGRhdGUgbXVsdGljb3JlIENNOVhYIHN1cHBvcnQgZm9yIEludGVncmF0b3IgQVAgdG8gYWxsb3cgYm9vdGluZyBmcm9tIGZsYXNoCiAgUGF0Y2ggYnkgSmVhbi1QYXVsIFNhbWFuLCA4IEZlYiAyMDA1CgoqIEZpeCBzdHJzd2FiKCkgdG8gcmVsaWFibHkgZmluZCBlbmQgb2Ygc3RyaW5nCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDA4IEZlYiAyMDA1CgoqIEZpeCB0eXBvcyBpbiBpbmNsdWRlL3BwYzQ0MC5oCiAgUGF0Y2ggYnkgQW5kcmV3IEUgTWlsZXNraSwgMDQgRmViIDIwMDUKCiogQWRkIFZpYnJlbiAod2FzIEFjY2VsZW50KSBQWEEyNTUgSURQIFN1cHBvcnQKICBQYXRjaCBieSBDbGlmZiBCcmFrZSwgMDQgRmViIDIwMDUKCiogRml4IHRvb2xzL2JtcF9sb2dvLmMgdXNpbmcgaW5jb3JyZWN0IG9mZnNldCB0byBwaXhlbCBkYXRhCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDMxIEphbiAyMDA1CgoqIEFkZCBBUk05NDZFIGNwdSBhbmQgY29yZSBtb2R1bGUgdGFyZ2V0czsgcmVtYXAgbWVtb3J5IHRvIDB4MDAwMDAwMDAKICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDIgRmViIDIwMDUKCiogRml4IGVycm9yIGhhbmRsaW5nIGluIHRvb2xzL2Vudi9md19lbnYuYwogIFBhdGNoIGJ5IEFyYSBBdmFuZXN5YW4sIDAxIEZlYiAyMDA1CgoqIEZpeCBNR1Q1MTAwIFBTQyBiYXVkcmF0ZSBjYWxjdWxhdGlvbgogIFBhdGNoIGJ5IFNlYmFzdGlhbiBTY2hhdSwgMjcgSmFuIDIwMDUKCiogT01BUDI0MnggZml4IGZvciBHUCBkZXZpY2UgYm9vdGluZwogIC0gQWRkIFNSQU0gdW5sb2NrIGZvciBHUCBkZXZpY2VzLgogIC0gQ2hhbmdlIEREUiBETEwgdW5sb2NrIHZhbHVlIHRvIGFsbG93IERQTExvdXQqMSBvcGVyYXRpb24uCiAgUGF0Y2hlcyBieSBSaWNoYXJkIFdvb2RydWZmLCAyMSBKYW4gMjAwNToKCiogQWRkIHN1cHBvcnQgZm9yIEFNRCdzIFBiMXgwMCBldmFsIGJvYXJkOwogIGFkZCBNSUkgcm91dGluZXMgdG8gdGhlIGF1MXgwMCBldGhlcm5ldCBkcml2ZXI7CiAgYWRkIFVTQiBvaGNpIGRyaXZlciAod29yayBpbiBwcm9ncmVzcykKICBQYXRjaCBieSBUaG9tYXMgU2FpbGVyLCAyMCBKYW4gMjAwNQoKKiBVcGRhdGUgb21hcDU5MTJvc2sgYm9hcmQKICBVc2UgZHJpdmVycy9jZmlfZmxhc2guYyBpbnN0ZWFkIG9mIHByaXZhdGUgZmxhc2ggZHJpdmVyOwogIFJlbW92ZSBoYXJkY29kZWQgcGVyc29uYWxpemVkIHNldHRpbmdzIGZyb20gb21hcDU5MTJvc2suaDsKICBGaXggc3BhY2luZyB3aXRoIChSTykgbWFya3MgaW4gJ2ZsaW5mbycgb3V0cHV0LgogIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDE0IEphbiAyMDA1CgoqIEZpeCB3YXJuaW5ncyBmb3IgUENJIGNvZGUgb24gaXhwCiAgUGF0Y2ggYnkgSm9lIDxsZ3h1ZUB5YWhvby5jb20+LCAxMyBKYW4gMjAwNQoKKiB2aXJ0ZXgyIGZpeCBmb3IgYm9ndXMgZG93bmxvYWQgZXJyb3IgbWVzc2FnZXMKICBUaGUgdmlydGV4MiBGUEdBIGRvd25sb2FkIGNvZGUgd2F0Y2hlcyBmb3IgaW5pdCBnb2luZyBhY3RpdmUgZHVyaW5nCiAgYSBkb3dubG9hZCBvZiBjb25maWcgZGF0YSBhcyBhbiBlcnJvciBjb25kaXRpb24uIGluaXQgYWxzbyBnb2VzCiAgYWN0aXZlIGFmdGVyIGEgY29uZmlndXJhdGlvbiBpcyBmaW5pc2hlZCBpbiBjb25jZXJ0IHdpdGggdGhlIGRvbmUKICBzaWduYWwuIFNvIGZhciwgdGhlIGNvZGUgZG9lcyBub3QgY2hlY2sgZm9yIGRvbmUgYWN0aXZlIHVudGlsIGFsbAogIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgc2VudC4gSWYgY29uZmlndXJhdGlvbiBkYXRhIGhhcyBhIGZldwogIGV4dHJhIHBhZCBieXRlcyBhdCB0aGUgZW5kLCB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yIG1lc3NhZ2UgZXZlbgogIHRob3VnaCB0aGUgZG93bmxvYWQgaGFkIHN1Y2VlZGVkLgogIE5PVEU6IHZpcnRleDIgc2xhdmUgc2VyaWFsIGFuZCBzcGFydGFuMiB2ZXJzaW9ucyBtYXkgc3RpbGwgaGF2ZSB0aGUKICBzYW1lIHByb2JsZW0uCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDEyIEphbiAyMDA1CgoqIE9wdGltaXplIGZsYXNoX21ha2VfY21kIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgZm9yIGxpdHRsZSBlbmRpYW4KICBGaXggIldBUk5JTkc6IGZsYXNoX21ha2VfY21kOiB1bnN1cHBwb3J0ZWQgTGl0dGxlRW5kaWFuIG1vZGUiCiAgbWVzc2FnZSB3aGVuIHByb2JpbmcgZm9yIG5vbmV4aXN0ZW50IGZsYXNoIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4KICBBcyBhIHNpZGUgZWZmZWN0IG1vcmUgZWZmaWNpZW50IGFuZCBzbWFsbGVyIGNvZGUgaXMgZ2VuZXJhdGVkLAogIHdoaWNoIGlzIGFsd2F5cyBhIEdvb2QgVGhpbmcgKFRNKS4KICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjQgU2VwIDIwMDUKCiogVXBkYXRlIGZvciBURlRQIHVzaW5nIGEgZml4ZWQgVURQIHBvcnQKICBVc2UgdGhlIGFwcHJvdmVkIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLiBBZGRlZCAidGZ0cGRzdHAiIHRvCiAgYWxsb3cgcG9ydHMgb3RoZXIgdGhhbiA2OSBwZXIgVG9sdW5heSBPcmt1bidzIHJlY29tbWVuZGF0aW9uLgogIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMTIgSmFuIDIwMDUKCiogQWxsb3cgdG8gZm9yY2UgVEZUUCB0byB1c2UgYSBmaXhlZCBVRFAgcG9ydAogIChBZGQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBDT05GSUdfVEZUUF9QT1JUIGFuZCBvcHRpb25hbCBlbnYKICB2YXJpYWJsZSB0ZnRwcG9ydCkKICBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDEwIEphbiAyMDA1CgoqIEZpeCBldGhlcm5ldCB0aW1lb3V0cyBvbiBkYmF1MTU1MCBhbmQgb3RoZXIgYXUxeDAwIHN5c3RlbXMKICBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyOSBEZWMgMjAwNAoKKiBDbGVhbnVwOiBmaXggYnJva2VuIGJ1aWxkcwoKKiBGaXggUEhZIGFkZHJlc3MgYXJndW1lbnQgcGFzc2luZyB3aXRoIG1paSBpbmZvIGNvbW1hbmQKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMjggRGVjIDIwMDQKCiogQ2xlYW51cCAoUFBDNHh4IGlzIEFNQ0Mgbm93KQoKKiBlc2QgQ1BDSTJEUCBib2FyZCBhZGRlZAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMiBTZXAgMjAwNQoKKiBlc2QgUE1DNDA1IGJvYXJkIHVwZGF0ZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjIgU2VwIDIwMDUKCiogQWRkIFNNNTAxIHN1cHBvcnQgdG8gSEg0MDUgYm9hcmQuCiAgQWRkIHN1cHBvcnQgZm9yIGd6aXAgY29tcHJlc3NlZCBibXAncyAoQ09ORklHX1ZJREVPX0JNUF9HWklQKS4KICBBZGQgc3VwcG9ydCBmb3IgZWVwcm9tIHdyaXRlLWVuYWJsZSAoQ0ZHX0VFUFJPTV9XUkVOKS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIyIFNlcCAyMDA1CgoqIEZpeCBhdXRvbmVnb3RpYXRpb24gaW4gdHNlYyBldGhlcm5ldCBkcml2ZXIKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIxIFNlcCAyMDA1CgoqIEZpeCBidWcgaW4gYXV0b191cGRhdGUgKHRyYWIgYm9hcmQpCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTYgU2VwIDIwMDUKCiogRml4IGNvbXB1dGF0aW9uIG9mIGZyYW1lYnVmZmVyIHBhbGV0dGUgZm9yIDhicHAgTENEIGJpdG1hcHMKICBQYXRjaCBieSBGcmFuY2VzY28gTWFuZHJhY2NpLCAxNiBTZXAgMjAwNQoKKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgSU5LQTR4MCBib2FyZAoKKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUE04NTQgYm9hcmQKICBCYXNlZCBvbiBwYXRjaCBieSBSLiBMb2VmZmwsIDIwIEp1bCAyMDA1CgoqIEFkZCBQQ0kgc3VwcG9ydCB0byBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgU2VwIDIwMDUKCiogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAogIGJvYXJkcyAoYmF1ZHJhdGUsIGVudmlyb25tZW50Li4uKS4gRmxhc2ggZHJpdmVyIGZpeGVkLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgU2VwIDIwMDUKCiogRml4IHByb2JsZW0gaW4gNDQwR1AgZXRoZXJuZXQgZHJpdmVyIChlYm9ueSkuIEFkZCBzdXBwb3J0IGZvciAybmQKICBldGhlcm5ldCBwb3J0IG9uIGVib255LgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNyBTZXAgMjAwNQoKKiBBZGRlZCBzdXBwb3J0IGZvciBtdGRkZXZudW0gYW5kIG10ZGRldm5hbWUgdmFyaWFibGVzIChtdGRwYXJ0cyBjb21tYW5kKQoKKiBDaGFuZ2UgZGVmYXVsdCBjb25zb2xlIGJhdWQgcmF0ZSBmb3Igc3R4eHRjIGJvYXJkCgoqIEFkZCBJMkMgc3VwcG9ydCB0byBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcyAoRUVQUk9NLCBSVEMsIExNNzUtRFRUKS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMxIEF1ZyAyMDA1CgoqIEZpeCBkZWZhdWx0IGNvbW1hbmQgc2V0IChkb24ndCBpbmNsdWRlIENGR19DTURfRElTUExBWSBjb21tYW5kKQogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwMiBTZXAgMjAwNQoKKiBDbGVhbnVwCgoqIEVuYWJsZSBTTTcxMiBkcml2ZXIgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KCiogRml4IHByb2JsZW1zIHdpdGggbGQgdmVyc2lvbiAyLjE2IChkb3Qgb3V0c2lkZSBzZWN0aW9ucyBwcm9ibGVtKQogIFBvaW50ZWQgb3V0IGJ5IEdlcmhhcmQgSmFlZ2VyLCAzMSBBdWcgMjAwNTsKICBjZi4gaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMDUtMDgvbXNnMDA0MTIuaHRtbAoKKiBQcmVwYXJlIFUtQm9vdCBmb3IgZ2NjLTQueDogZml4IGdsb2JhbCBkYXRhIHBvaW50ZXIgaW5pdGlhbGl6YXRpb24KCiogQWRqdXN0IENTMyB0aW1pbmdzIG9uIEhNSTEwMDEgYm9hcmQgZm9yIGRvdCBtYXRyaXggZGlzcGxheSB1bmRlciBMaW51eAoKKiBBZGQga2V5Ym9hcmQgYW5kIGRvdCBtYXRyaXggZGlzcGxheSBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgoKKiBQcmVwYXJlIFUtQm9vdCBmb3IgZ2NjLTQueAoKKiBGaXhlZCBCYW1ib28gcG9ydCB0byBlbmFibGUgcnVubmluZyB3aXRob3V0IEREUi1ESU1NCiAgKEJhbWJvbyBoYXMgYWxzbyA2NE1CIG9uYm9hcmQgRERSKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgQXVnIDIwMDUKCiogTWVyZ2VkIDQwNWdwX2VuZXQuYyBhbmQgNDQwZ3hfZW5ldC5jIHRvIGdlbmVyaWMgNHh4X2VuZXQuYwogIG5vdyBoYW5kbGluZyBhbGwgNHh4IGNwdSdzCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBBdWcgMjAwNQoKKiBGaXggbWFrZSBkZXBlbmRlbmNpZXMgZm9yIGF0OTFybTkyMDAgYW5kIGtzODY5NSBjcHVzCiAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjMgQXVnIDIwMDUKCiogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKCiogQWRkIGVzZCBjcGNpNTIwMCBhbmQgcGY1MjAwIGJvYXJkcwogIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDIyIEF1ZyAyMDA1CgoqIEZpeCBzeXNjbG9jayBmb3IgVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNSBKdWwgMjAwNQoKKiBJbml0aWFsaXplIHNlcmlhbCMgYW5kIGV0aGFkZHIgZnJvbSBtYW51ZmFjdHVyZXIgZGF0YSBpbiBFRVBST00gb24gQ01DLVBVMgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IEp1biAyMDA1CgoqIEFkZCBuZXcgYm9hcmQgc3BlY2lmaWMgY29tbWFuZHMgZm9yIFRRTTUyMDAvU1RLNTJYWAogIC0gU291bmQgY29tbWFuZHMgKGJlZXAsIHdhdiwgc291bmQpCiAgLSBUZXN0IGNvbW1hbmRzIChsZWQsIGNhbiwgYmFja2xpZ2h0LCByczIzMikKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwMiBNYXkgMjAwNQoKKiBDaGFuZ2UgbWFpbiBjbG9jayBvbiBDTUMtUFUyIGJvYXJkIGZyb20gMjA3IE1IeiB0byAxNzkgTUh6CiAgYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgQVQ5MVJNOTIwMCBDUFUgUExMCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjIgQXByIDIwMDUKCiogQWRkIGF1dG9tYXRpYyBIVyBkZXRlY3Rpb24gZm9yIGFub3RoZXIgQ01DX1BVMiB2YXJpYW50CiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjAgQXByIDIwMDUKCiogUmVtb3ZlIENPTkZJR19BVDkxUk05MjAwREsgaW4gQ01DLVBVMiBjb25maWd1cmF0aW9uCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTkgQXByIDIwMDUKCiogRml4IGluaXRpYWxpemF0aW9uIHByb2JsZW0gb24gVFFNNTIwMCB3aXRob3V0IFNNNTAxCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDggQXByIDIwMDUKCiogQWRkIFJUQyBzdXBwb3J0IGZvciBTVEs1MlhYLjIwMAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEFwciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBJRk0gbzJkbnQgYm9hcmQKCiogRW5hYmxlIFBDSSBvbiBobWkxMDAxIGJvYXJkCgoqIEZpeCByZXR1cm4gdmFsdWVzIG9mIHRoZSBqZmZzMiBjb21tYW5kcyBscy9mc2xvYWQvZnNpbmZvLAogIHNvIHdlIGNhbiB1c2UgdGhlbSB0bywgZS5nLiwgY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBhIGZpbGUgd2l0aAogICJpZiBscyBmb287IHRoZW4gdGhpczsgZWxzZSB0aGF0OyBmaSIgaW4gdGhlIGh1c2ggc2hlbGwKICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxNiBBdWd1c3QgMjAwNQoKKiBDb2Rpbmcgc3R5bGUgY2xlYW51cAoKKiBBZGQgc3VwcG9ydCBmb3IgU2lsaWNvbiBUdXJua2V5IGVYcHJlc3MgWFRjIChtcGM4N3gvODh4KSBib2FyZC4KICBQYXRjaCBieSBEYW4gTWFsZWsgYW5kIFBhbnRlbGlzIEFudG9uaW91LCAxNSBBdWcgMjAwNQoKKiBDaGVjayByZXR1cm4gdmFsdWUgb2YgbWFsbG9jIGluIDQ0MGd4X2VuZXQuYwogIFBhdGNoIGJ5IFRyYXZpcyBCLiBTYXd5ZXIsIDE4IEp1bCAyMDA1CgoqIEFkZCBTYW5kYnVyc3QgTWV0cm9ib3ggYW5kIFNhbmRidXJzdCBLYXJlZiBib2FyZCBzdXBwb3J0IHBhY2thZ2VzLgogIFNlY29uZCBzZXJpYWwgcG9ydCBvbiA0NDBHWCBub3cgZGVmaW5lZCBhcyBhIHN5c3RlbSBkZXZpY2UuCiAgQWRkICdTaG9ydCBFdGNoJyBjb2RlIGZvciBDaWNhZGEgUEhZIHdpdGhpbiA0NDBneF9lbmV0LmMKICBQYXRjaCBieSBUcmF2aXMgQi4gU2F3eWVyLCAxMiBKdWwgMjAwNQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjM6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWlub3IgY29kZSBjbGVhbnVwCgoqIEFkZCBmb3Jnb3R0ZW4gbmV3IGZpbHMgZnJvbSBsYXRlc3QgVm9pY2VCbHVlIHVwZGF0ZQoKKiBNYWtlIGJvb3RyZXRyeSBmZWF0dXJlIHdvcmsgd2l0aCBodXNoIHNoZWxsLgogIENhdmVhdDogdGhpcyBjdXJyZW50bHkgKnJlcXVpcmVzKiBDT05GSUdfUkVTRVRfVE9fUkVUUlkgdG8gYmUgc2V0LCB0b28uCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTkgSnVsIDIwMDUKCiogVXBkYXRlIEh5bW9kIEJvYXJkIERhdGFiYXNlIFBIUCBjb2RlIGluICJ0b29scyIgZGlyZWN0b3J5CiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDEgSnVsIDIwMDUKCiogTWFrZSAidHIiIGNvbW1hbmQgdXNlIFBPU0lYIGNvbXBsaWFudDsgZXhwb3J0IEhPU1RPUyBtYWtlIHZhcmlhYmxlCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKCiogRml4IE11cnJheSBKZW5zZW4ncyBtYWlsIGFkZHJlc3MuCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKCiogUHJlc2VydmUgUEhZX0JNQ1IgZHVyaW5nIGEgc29mdCByZXNldC4KICBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAyNCBKdW4gMjAwNQoKKiBWb2ljZUJsdWUgdXBkYXRlOiBlZXByb20gdG9vbCBjYW4gYWxzbyBzdG9yZSBmaXJtd2FyZSB2ZXJzaW9uIG5vdy4KICBlZXByb20uYmluIGlzIHJ1bmFibGUgYnkganVtcGluZyBhdCBsb2FkIGFkZHJlc3MuCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDIzIE1heSAyMDA1CgoqIE1vdmUgdGhlIEFUOTFSTTkyMDBESyB0byB0aGUgQVJNIFN5c3RlbXMgbGlzdC4KICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyNiBBcHIgMjAwNQoKKiBFbGltaW5hdGUgY2FsbHMgb2YgQVJNIGxpYmdjYy5hIGhlbHBlciBmdW5jdGlvbnMgX2RpdnNpMyBhbmQgX21vZHNpMwogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI2IEFwciAyMDA1CgoqIG1lYXN1cmVfZ2NsaygpIGlzIG5lZWRlZCB3aGVuIERFQlVHIGlzIGVuYWJsZWQKICBQYXRjaCBieSBCcnlhbiBPJ0Rvbm9naHVlLCAyNSBBcHIgMjAwNQoKKiBBZGQgVVBELUNoZWNrc3VtIGNvZGUsIGZpeCBwcm9ibGVtIGluIG5ldC5jIChyZXR1cm4gaW5zdGVhZCBvZiBicmVhaykKICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAxMiBBdWcgMjAwNQoKKiBlc2QgUENJNDA1IGJvYXJkIHVwZGF0ZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjggSnVsIDIwMDUKCiogZXNkIFdVSDQwNSBhbmQgRFU0MDUgYm9hcmQgdXBkYXRlZAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyNyBKdWwgMjAwNQoKKiBGaXggcHJvYmxlbSBpbiBjbWRfbmFuZC5jIChvbmx5IHdoZW4gZGVmaW5lZCBDRkdfTkFORF9TS0lQX0JBRF9ET1RfSSkKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgNCBNYXkgMjAwNQoKKiBVcGRhdGUgQU1DQyBZb3NlbWl0ZSB0byBnZXQgYSBjb25zaXN0ZW50IHNldHVwIGZvciBhbGwgQU1DQyBldmFsCiAgYm9hcmRzIChiYXVkcmF0ZSwgZW52aXJvbm1lbnQuLi4pLiBGbGFzaCBkcml2ZXIgZml4ZWQuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQoKKiBDaGFuZ2VkIEFNQ0MgQnViaW5nYSAoNDA1RVApIGNvbmZpZ3VyYXRpb24gdG8gc3VwcG9ydCAybmQgZXRoIHBvcnQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CgoqIEFkZCBOQU5EIEZMQVNIIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vIDQ0MEVQIGV2YWwgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CgoqIEFkZCBjb25maWd1cmF0aW9uIGZvciBJRk0gQUVWIEZJRk8gYm9hcmQuCiAgTWlub3IgY29kaW5nIHN0eWxlIGNsZWFudXAuCgoqIEFkZCBjb25maWd1cmF0aW9uIGZvciBJRk0gU1BJIGV2YWwgYm9hcmQKCiogRml4IENvbXBhY3RGbGFzaCBwcm9ibGVtIG9uIEhNSTEwMDEgYm9hcmQKCiogTWFrZSBuZXcgIm10ZHBhcnRzIiBjb2RlIGJ1aWxkIHdpdGggb2xkZXIgY29tcGlsZXJzCiAgUGF0Y2ggYnkgQW5kcmVhIFNjaWFuLCAwOSBBdWcgMjAwNQoKKiBDaGFuZ2VkIENPTkZJR180NDBfR1gsIENPTkZJR180NDBfRVAgYW5kIENPTkZJR180NDBfR1Igb3B0aW9ucyB0bwogIENPTkZJR180NEdYLCBDT05GSUdfNDQwRVAgYW5kIENPTkZJR180NDBHUiBmb3IgYSBjb25zaXN0ZW50IGRlc2lnbgogIHdpdGggdGhlIDQwNSBkZWZpbmVzIGFuZCB0aGUgbGludXgga2VybmVsIGRlZmluZXMuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwOCBBdWcgMjAwNQoKKiBGaXggY29tcGlsZXIgd2FybmluZ3Mgd2l0aCBvbGRlciBHQ0MgdmVyc2lvbnMKCiogQWRkIGNvbW1vbiAod2l0aCBMaW51eCkgTVREIHBhcnRpdGlvbiBzY2hlbWUgYW5kICJtdGRwYXJ0cyIgY29tbWFuZAoKICBPbGQsIG9ic29sZXRlIGFuZCBkdXBsaWNhdGVkIGNvZGUgd2FzIGNsZWFuZWQgdXAgYW5kIHJlcGxhY2UgYnkgdGhlCiAgbmV3IHBhcnRpdGlvbmluZyBtZXRob2QuIFRoZXJlIGFyZSB0d28gcG9zc2libGUgYXBwcm9hY2hlcyBub3c6CgogIFRoZSBmaXJzdCBvbmUgaXMgdG8gZGVmaW5lIGEgc2luZ2xlLCBzdGF0aWMgcGFydGl0aW9uOgoKICAjdW5kZWYgQ09ORklHX0pGRlMyX0NNRExJTkUKICAjZGVmaW5lIENPTkZJR19KRkZTMl9ERVYgICAgICAgICAgICAgICAibm9yMCIKICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUgICAgICAgICAweEZGRkZGRkZGCS8qIHVzZSB3aG9sZSBkZXZpY2UgKi8KICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUgICAgICAgICAweDAwMTAwMDAwCS8qIHVzZSAxTUIgKi8KICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVCAgICAgICAweDAwMDAwMDAwCgogIFRoZSBzZWNvbmQgbWV0aG9kIHVzZXMgdGhlIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kIGR5bmFtaWMKICBwYXJ0aXRpb25pbmc6CgogIC8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQogICNkZWZpbmUgTVRESURTX0RFRkFVTFQgICAgICAgICAibm9yMT16dW1hLTEsbm9yMj16dW1hLTIiCiAgI2RlZmluZSBNVERQQVJUU19ERUZBVUxUICAgICAgICJtdGRwYXJ0cz16dW1hLTE6LShqZmZzMiksenVtYS0yOi0odXNlcikiCgogIENvbW1hbmQgbGluZSBvZiBjb3Vyc2UgcHJvZHVjZXMgYmlnZ2VyIGltYWdlcywgYW5kIG1heSBiZSBpbmFwcHJvcHJpYXRlCiAgZm9yIHNvbWUgdGFyZ2V0cywgc28gYnkgZGVmYXVsdCBpdCdzIG9mZi4KCiogRml4IGJ1aWxkIHByb2JsZW1zIGZvciBQTTg1NiBCb2FyZAoKKiBGaXggc2lnbiBleHRlbnNpb24gYnVnIGluICdmcGdhIGxvYWRiJyBjb21tYW5kOwogIG1ha2UgJ2ZwZ2EgbG9hZGInIGFsd2F5cyBwcmludCB0aGUgZmlsZSBoZWFkZXIgaW5mbwogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMSBKYW4gMjAwNQoKKiBGaXggZXJyb3JzIHRoYXQgb2NjdXIgd2hlbiBhY2Nlc3NpbmcgU3lzdGVtQUNFIENGCiAgUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDA5IEphbiAyMDA1CgoqIERvY3VtZW50IHN3aXRjaGluZyBiZXR3ZWVuIFUtQm9vdCBhbmQgUGxhbmV0Q29yZSBvbiBSUFhsaXRlCiAgYnkgU2FtIFNvbmcsIDI0IERlYyAyMDA0CgoqIEZpeCBQb3dlclFVSUNDIElJIG1hc2sgZGV0ZWN0aW9uLgogIFBhdGNoIGJ5IEV1Z2VuZSBTdXJvdmVnaW4sIDIwIERlYyAyMDA0CgoqIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBESzFDMjAgYm9hcmQKICBQYXRjaCBieSBTaGxvbW8gS3V0LCAxMyBEZWMgMjAwNAoKKiBBZGQgc3VwcG9ydCBmb3IgZXA4MjQ4IGJvYXJkCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTIgRGVjIDIwMDQKCiAgTWlub3IgY29kZSBjbGVhbnVwLgoKKiBGaXggYmF1ZHJhdGUgc2V0dGluZyBmb3IgS0dEQiBvbiBNUEM4MjYwCiAgUGF0Y2ggYnkgSG9KaW4sIDExIERlYyAyMDA0CgoqIEZpeCAnbWlpIGhlbHAnIHRleHQgZm9ybWF0dGluZwogIFBhdGNoIGJ5IENvcnkgVHVzYXIsIDEwIERlYyAyMDA0CgoqIEZpeCByZXR1cm4gY29kZSBvZiBORlMgY29tbWFuZAogIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAxMSBEZWMgMjAwNAoKKiBGaXggdHlwbwoKKiBGaXggY29tcGlsZXIgd2FybmluZ3MgaW4gY3B1L3BwYzR4eC91c2JkZXYuYwogIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDA0IEF1ZyAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbyBQUEM0NDBFUCBldmFsIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNCBBdWcgMjAwNQoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIKICBGaXggc3R5bGUgaXNzdWVzIHByaW1hcmlseSBpbiA4NXh4IGFuZCA4M3h4IGJvYXJkcy4KICAgIC0gQysrIGNvbW1lbnRzCiAgICAtIFRyYWlsaW5nIHdoaXRlIHNwYWNlCiAgICAtIEluZGVudGF0aW9uIG5vdCBieSBUQUIKICAgIC0gRXhjZXNzaXZlIGFtb3VudCBvZiBlbXB0eSBsaW5lcwogICAgLSBUcmFpbGluZyBlbXB0eSBsaW5lcwoKKiBQYXRjaCBieSBSb24gQWxkZXIsIDExIEp1bCAyMDA1CiAgICBBZGQgWGlhbmdodWEgWGlhbyBhbmQgTHVuc2hlbmcgV2FuZydzIHN1cHBvcnQgZm9yIHRoZQogICAgR0RBIE1QQzg1NDAgRVZBTCBib2FyZC4KCiogUGF0Y2ggYnkgRXJhbiBMaWJlcnR5CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODM0OUFEUyBib2FyZC4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAyNSBKdWwgMjAwNQogIE1vdmUgdGhlIFRTRUMgZHJpdmVyIG91dCBvZiBjcHUvbXBjODV4eCBhcyBpdCB3aWxsIGJlIHNoYXJlZAogIGJ5IHRoZSB1cGNvbWluZyBtcGM4M3h4IGZhbWlseSBhcyB3ZWxsLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDA1IE1heSAyMDA1CiAgSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgTVBDODU0OENEUyBib2FyZC4KICBBZGRlZCBERFIgSUkgc3VwcG9ydCBiYXNlZCBvbiBTUEQgdmFsdWVzIGZvciBNUEM4NXh4IGJvYXJkcy4KICBUaGlzIHJvbGwtdXAgcGF0Y2ggYWxzbyBpbmNsdWRlcyBidWdmaWVzIGZvciB0aGUgcHJldmlvdXNseQogIHB1Ymxpc2hlZCBwYXRjaGVzOgogICAgRERSSUkgQ1BPLCBwcmUgZVRTRUMsIDg1NDggTEJJVSwgQW5keSdzIFRTRUMsIGVUU0VDIDMmNCBJL08KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxMCBGZWIgMjAwNQogIEFkZCBjb25maWcgb3B0aW9uIENPTkZJR19IQVNfRkVDIGNhbGxpbmcgb3V0IDg1NDAgRkVDIGZlYXR1cmVzLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIEt1bWFyIEdhbGEsIDA4IEZlYiAyMDA1CiAgRm9yIE1QQzg1eHhDRFM6CiAgICBBZGRzIFJlbGF4ZWQgVGltaW5nIFRSTFggYml0IHRvIEZMQVNIIE9SeCByZWdzIHRvIGFsbG93CiAgICBmb3IgZmFzdGVyIGZsYXNoIHBhcnRzLgogICAgQWRkIGRvY3VtZW50YXRpb24gZm9yIEJSL09SIGZvciBGTEFTSC4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyIDA4IEZlYiAyMDA1CiAgRGV0ZXJtaW5lIEwyIENhY2hlIHNpemUgZHluYW1pY2FsbHkgb24gODVYWCBib2FyZHMuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSAwOCBGZWIgMjAwNQogIC0gQ29udmVydCB0aGUgQ1BNMiBiYXNlZCBmdW5jdGlvbmFsaXR5IHRvIHVzZSBuZXcgQ09ORklHX0NQTTIKICAgIG9wdGlvbiByYXRoZXIgdGhhbiBhIG15cmlhZCBvZiBDT05GSUdfTVBDODU2MC1saWtlIHZhcmlhbnRzLgogICAgQXBwbGllcyB0byBNUEM4NXh4IGFuZCBNUEM4MjYwIGJvYXJkcywgaW5jbHVkZXMgc3R4Z3AzIGFuZCBzYmM4NTYwLgogICAgRWxpbWluYXRlcyB0aGUgQ09ORklHX01QQzg1NjAgb3B0aW9uIGVudGlyZWx5LiAgRGlzdHJpYnV0ZXMgdGhlCiAgICBuZXcgQ09ORklHX0NQTTIgb3B0aW9uIHRvIGVhY2ggODI2MCBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU2IGJvYXJkCiAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwMyBBdWcgMjAwNQoKKiBNaW5vciBmaXhlcyB0byBQTTg1NCBib2FyZAogIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDMgQXVnIDIwMDUKCiogQWRqdXN0IGNvbmZpZ3VyYXRpb24gb2YgWEVOSUFYIGJvYXJkCiAgKGNoaXAgc2VsZWN0IGFuZCBHUElPIHJlcXVpcmVkIGZvciBVU0Igb3BlcmF0aW9uKQoKKiBGaXggdHlwb3MgaW4gY3B1Lzg1eHgvc3RhcnQuUyB3aGljaCBjYXVzZWQgRGF0YVRMQiBleGNlcHRpb24gdG8gYmUKICByb3V0ZWQgdG8gdGhlIFdhdGNoZG9nIGhhbmRsZXIKICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAxOCBKdW4gMjAwNQoKKiAocmUpZW5hYmxlZCBzY3NpIGNvbW1hbmRzIGRvX3Njc2koKSBhbmQgZG9fc2NzaWJvb3QoKQogIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNiBEZWMgMjAwNAoKKiBGaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gVEZUUCAvIE5GUyBkZWZhdWx0IGZpbGVuYW1lcwogIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAwNiBEZWMgMjAwNAoKKiBJZ25vcmUgYnJvYWRjYXN0IHN0YXR1cyBiaXQgaW4gcmVjZWl2ZWQgZnJhbWVzIGluIDgyNjAgRkNDIGV0aGVybmV0CiAgbG9vcGJhY2sgdGVzdCBjb2RlCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTggSnVsIDIwMDUKCiogRml4IHR5cG8gaW4gbWtjb25maWcgc2NyaXB0ICh1c2VkID09IGluc3RlYWQgb2YgPSkKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOCBKdWwgMjAwNQoKKiBDbGVhbnVwIGJ1aWxkIHByb2JsZW1zIG9uIDY0IGJpdCBidWlsZCBob3N0cwoKKiBVcGRhdGUgTUFJTlRBSU5FUlMgZmlsZQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIEF1ZyAyMDA1OgogIC0gTWFqb3IgY2xlYW51cCBmb3IgQU1DQyBldmFsIGJvYXJkcyBXYWxudXQsIEJ1YmluZ2EsIEVib255LCBPY290ZWEKICAgIChmb3JtZXIgSUJNIGV2YWwgYm9hcmQpLiBQbGVhc2Ugc2VlICJkb2MvUkVBRE1FLkFNQ0MtZXZhbC1ib2FyZHMtY2xlYW51cCIKICAgIGZvciBkZXRhaWxzLgogIC0gU3ljYW1vcmUgKFBQQzQwNUdQcikgZXZhbCBib2FyZCBhZGRlZCAoV2FsbnV0IHBvcnQgaXMgZXh0ZW5kZWQKICAgIHRvIHJ1biBvbiBib3RoIDQwNUdQIGFuZCA0MDVHUHIgZXZhbCBib2FyZHMpLgoKKiBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAyNyBKdWwgMjAwNToKICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFBQQzQ0MEVQL0dSLgogIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgWW9zZW1pdGUgUFBDNDQwRVAgZXZhbCBib2FyZC4KICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFllbGxvd3N0b25lIFBQQzQ0MEdSIGV2YWwgYm9hcmQuCgoqIE1pbm9yIGZpeGVzIGZvciBQUENoYW1lbGVvbiBCb2FyZDoKICAtIGZpeCBhbGlnbm1lbnQgb2YgTkFORCBzaXplCiAgLSBtYWtlIGNvZGUgZG8gd2hhdCB0aGUgY29tbWVudCBzYXlzCgoqIEltcGxlbWVudCBoL3cgc2VjdG9yIHByb3RlY3Rpb24gc3RhdHVzIHN5bmNocm9uaXphdGlvbiBhdCBib290LgogIFRoZSBjb2RlIGlzIHByb3ZpZGVkIGZvciwgYW5kIHdhcyB0ZXN0ZWQgb24sIHRoZSBZdWtvbi9BbGFza2EKICBhbmQgUE01MjAgYm9hcmRzIG9ubHkuCgogIEEgYnVnIGluIGZsYXNoX3JlYWxfcHJvdGVjdCgpIGZvciB0aGUgWXVrb24gYm9hcmQgd2FzIGZpeGVkIGJ5CiAgYWRkaW5nIGEgZnVuY3Rpb24gdGhhdCB0ZWxscyBpZiB0d28gYmFua3MgYXJlIG9uIG9uZSBmbGFzaCBjaGlwLgoKKiBGaXggc3lzbW9uIFBPU1QgcHJvYmxlbTogY2hlY2sgSTJDIGVycm9yIGNvZGVzCiAgVGhpcyBmaXhlcyBhIHByb2JsZW0gb2YgZGlzcGxheWluZyBib2d1cyB2b2x0YWdlcyB3aGVuIHRoZSB2b2x0YWdlcwogIGFyZSBzbyBsb3cgdGhhdCB0aGUgSTJDIGRldmljZXMgc3RhcnQgZmFpbGluZyB3aGlsZSB0aGUgcmVzdCBvZiB0aGUKICBzeXN0ZW0ga2VlcHMgcnVubmluZy4KCiogUGF0Y2ggYnkgQ2VkcmljIFZpbmNlbnQsIDYgSnVsIDIwMDU6CiAgRml4IENGR19DTURfU0VUR0VURENSIGhhbmRsaW5nIGluICJjb21tb24vY21kX2Rjci5jIgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDIwIEp1bCAyMDA1OgogIEFkZCBtaXNzaW5nIFBDSSBJTyBwb3J0IGRlZmluaXRpb25zLgoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCgoqIEFkanVzdCBwcmludGVkIGJvYXJkIElEIGZvciBMV01PTiBib2FyZC4KCiogRml4IGxvdy1sZXZlbCBPSENJIHRyYW5zZmVycyBmb3IgQVJNOTIwdCBhbmQgTVBDNXh4eAoKKiBBZGQgbmV3IGFyZ3VtZW50IGZvcm1hdCBmb3IgZmxhc2ggY29tbWFuZHMgdG8gYWxsb3cgZm9yIHVzYWdlIGxpa2UKICAiZXJhc2UgJChhZGRyKSArJChmaWxlc2l6ZSkiLCBpLiBlLiBhIHNpemUgYXJndW1lbnQgY2FuIGJlIHVzZWQgYW5kCiAgVS1Cb290IHdpbGwgYXV0b21hdGljaWFsbHkgZmluZCB0aGUgZW5kIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Rvci4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA1IEp1bCAyMDA1OgogIFVwZGF0ZSB1YzEwMCBib2FyZCBQSFkgc2V0dXAKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIEp1bCAyMDA1OgogIEZpeCBQSFkgYWRkcmVzcyBmb3IgQ0FUY2VudGVyIGJvYXJkIChub3cgY29ycmVjdCEpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzAgSnVuIDIwMDU6CiAgRml4IFBIWSBhZGRyZXNzZXMgZm9yIFBQQ2hhbWVsZW9uIGFuZCBDQVRjZW50ZXIgYm9hcmRzCiAgQ2hhbmdlIE1BSU5UQUlORVIgZm9yIG1vc3QgZXNkIGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAzMCBKdW4gMjAwNToKICBGaXggTENEIGxvZ28gZm9yIGx3bW9uIGJvYXJkIHdoaWNoIGdvdCBsb3N0IGluIHRoZSBtZXJnZSBvZiA4eHggYW5kIFBYQSBMQ0QgY29kZQoKKiBGaXggYmF1ZHJhdGUgY2FsY3VsYXRpb24gcHJvYmxlbSBvbiBNUEM1MjAwIHN5c3RlbXMKCiogQWRkIEVFUFJPTSBhbmQgUlRDIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjAgSnVuIDIwMDU6CiAgRml4IGluaXRpYWxpemF0aW9uIG9mIGxvdyBhY3RpdmUgR1BJTyBwaW5zIG9uIGlua2E0eDAgYm9hcmQKCiogRW5hYmxlIHJlZHVuZGFudCBlbnZpcm9ubWVudCwgZGlzYWJsZSBIVyBmbGFzaCBwcm90ZWN0aW9uIG9mCiAgSE1JMTAwMSBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMCBKdW4gMjAwNToKICBJbml0aWFsaXplIGFsbG9jYXRlZCBkZXYgYW5kIHByaXZhdGUgaHcgc3RydWN0dXJlcwogIGFmdGVyIHRoZWlyIHJlc3BlY3RpdmUgYWxsb2NhdGlvbiBpbiA0NDBneF9lbmV0LmMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgSnVuIDIwMDU6CiAgRml4IGJ5dGVvcmRlciBwcm9ibGVtcyB3aXRoIHNlY29uZCBhcmd1bWVudCBvZiAiYm9vdG0iIHdpdGgKICBzdGFuZGFsb25lIGltYWdlczsKCiogQWRkIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKCiogRGlzYWJsZSAiZGF0ZSIgYW5kICJzbnRwIiBjb21tYW5kcyBvbiBUUU04NjZNCgoqIEZpeCB3YXRjaGRvZyByZXNldCBwcm9ibGVtcyBvbiBMV01PTiBib2FyZAoKKiBQYXRjaCBieSBKdWVyZ2VuIFNlbGVudCwgMTcgTWF5IDIwMDU6CiAgQWRkIHN1cHBvcnQgZm9yIEZ1bmt3ZXJrIFZvVlBOIGdhdGV3YXkgbW9kdWxlLgoKKiBDbGVhbnVwIGRlYnVnIGNvZGUgZm9yIE1QQzgyMjAgRkVDIGRyaXZlcgoKKiBFeHRlbmQgYnVyc3QgbW9kZSBSQU0gdGVzdCBwcm9ncmFtIHRvIHRha2UgYSBsb29wIGNvdW50CiAgKDAgPSBpbmZpbml0ZSkKCiogVXNlIENPTkZJR19EUklWRVJfS1M4Njk1RVRIIHRvIGVuYWJsZSBLUzg2OTUgZXRoZXJuZXQgZHJpdmVyIG9uCiAgdGhvc2UgYm9hcmRzIHRoYXQgdXNlIGl0LgoKKiBQYXRjaGVzIGJ5IEdyZWcgVW5nZXJlciwgMTkgTWF5IDIwMDU6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEtTODY5NVAgKEFSTSA5MjIgYmFzZWQpIENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBPcGVuR2VhciBDTTQwMDgsIENNNDExNiBhbmQgQ000MTQ4IGJvYXJkcwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOSBNYXkgMjAwNToKICBBZGQgc3VwcG9ydCBmb3IgQ09ORklHX1NFUklBTF9UQUcgb24gQVJNIGJvYXJkcwoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNvcmNlcnkgYm9hcmQuCiAgQ29kZSBjbGVhbnVwIChlc3BlY2lhbGx5IFNvcmNlcnkgLyBBbGFza2EgLyBZdWtvbiBzZXJpYWwgZHJpdmVyKS4KCiogRml4IGNvbXBpbGUgcHJvYmxlbXMgY2F1c2VkIGJ5IG5ldyBidXJzdCBtb2RlIFNEUkFNIHRlc3Q7CiAgbWFrZSBwb3J0IHBpbnMgdG8gdHJpZ2dlciBsb2dpYyBhbmFseXplciBjb25maWd1cmFibGUKCiogRml4IHRpbWVyIGhhbmRsaW5nIG9uIE1QQzg1eHggc3lzdGVtcwoKKiBGaXggZGVidWcgY29kZSBpbiBvbWFwNTkxMm9zayBmbGFzaCBkcml2ZXIKCiogQWRkIHN1cHBvcnQgZm9yIE1QQzgyNDcgYmFzZWQgIklEUzgyNDciIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgMiB4IFRTRUMgaW50ZXJmYWNlcyBvbiB0aGUgVFFNODU0MCBib2FyZC4KCiogT24gTFdNT04gd2UgbXVzdCB1c2UgdGhlIHdhdGNoZG9nIHRvIHJlc2V0IHRoZSBib2FyZCBhcyB0aGUgQ1BVCiAgZ2VuZXJlYXRlZCBIUkVTRVQgcHVsc2UgaXMgdG9vIHNob3J0IHRvIHJlc2V0IHRoZSBleHRlcm5hbAogIGNpcmN1aXRyeS4KCiogQWRkIHRlc3QgdG9vbCB0byBleGVyY2lzZSBTRFJBTSBhY2Nlc3NlcyBpbiBidXJzdCBtb2RlCiAgKGFzIHN0YW5kYWxvbmUgcHJvZ3JhbSwgTVBDOHh4L1Bvd2VyUEMgb25seSkKCiogSW5jcmVhc2UgQ0ZHX01PTklUT1JfTEVOIGZvciBSYXR0bGVyIGJvYXJkIHRvIG1hdGNoIGFjdHVhbCBjb2RlCiAgc2l6ZS4KCiogTWFqb3IgdXBhdGUgb2YgSkZGUzIgY29kZTsgbm93IGluIHN5bmMgd2l0aCBzbmFwc2hvdCBvZiBNVEQgQ1ZTIG9mCiAgTWFyY2ggMTMsIDIwMDUpOyBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX0pGRlMyX0xaT19MWkFSSQogIGFkZGVkIHRvIHN1cHBvcnQgTFpPIGFuZCBMWkFSSSBjb21wcmVzc2lvbiBtb2RlcyAodW5kZWZpbmVkIGJ5CiAgZGVmYXVsdCkuCgoqIEZpeCBwcm9ibGVtIHdpdGggc3ltYm9saWMgbGlua3MgaW4gSkZGUzIgY29kZS4KCiogVXNlIGxpbmtlciBBU1NFUlQgc3RhdGVtZW50IHRvIHByZXZlbnQgdW5kZXRlY3RlZCBvdmVybGFwcGluZyBvZgogIHNlY3Rpb25zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkOyBvdGhlciBib2FyZHMgbWlnaHQgdXNlIHRoaXMsIHRvby4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBNYXkgMjAwNToKICBVcGRhdGUgZm9yIFAzRzQKICBGaXggcHJvYmxlbXMgaW4gY21kX3VuaXZlcnNlLmMKCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDAzIE1heSAyMDA1OgogIEFkZGVkIG1pc3NpbmcgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gY21kX25hbmQuYwogIE1vZGlmaWVkIENGR19QQ0lfUFRNMU1TIGluIGNvbmZpZ3MvUExVNDA1LmggdG8gbWFwIDEyOE1CIHJhbQoKKiBGaXggSU5LQTR4MDogdXNlIENTMSBhcyBncGlvX3drdXBfNiBvdXRwdXQKCiogRml4IGJ1ZyBpbiB0aGUgU0RSQU0gaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgY2FubWIsIEljZUN1YmUgYW5kCiAgUE01MjAgYm9hcmRzLgogIEZpeCBQSFkgYWRkcmVzcyBmb3IgY2FubWIgYm9hcmQuCgoqIENsZWFudXAgc2VyaWFsIGNvbnNvbGUgYmF1ZHJhdGUgY2FsY3VsYXRpb24gb24gQVQ5MVJNOTIwMDsKICBnZXQgcmlkIG9mIG9ic29sZXRlIENGR19BVDkxQ19CUkdSX0RJVklTT1IgZGVmaW5pdGlvbgoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMTggQXByIDIwMDU6CiAgTWFrZSBQQ0kgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VzIG9uIFBNQzQwNSBhbmQgQ1BDSTQwNSBib2FyZHMKICBjb25maWd1cmFibGUgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcwoKKiBBdXRvLXNpemUgUkFNIG9uIGNhbm1iIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgY2FubWIgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBBcHIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCBhcGM0MDUKCiogRml4ZXMgZm9yIFRRTTg1NjAgYm9hcmQ6CiAgLSBmaXggY2xvY2sgcmF0ZXMKICAtIHJlbW92ZSBkZWJ1ZyBtZXNzYWdlcwogIC0gZml4IGZsYXNoIHNlY3RvciBwcm90ZWN0aW9uCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA3IEFwciAyMDA1OgogIEFkZCBpMmNfcmVnX3dyaXRlKCkgYW5kIGkyY19yZWdfd3JpdGUoKSBmb3IgYXQ5MXJtOTIwMCBJMkMKCiogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAwNyBBcHIgMjAwNToKICBGaXggY29tcGlsZXIgd2FybmluZyBpbiBhbHRlcmEuYwogIEZpeCB3YXJuaW5nIGluIGNwdS9hcm05MjB0L2F0OTFybTkyMDAvaTJjLmMKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA2IEFwciAyMDA1OgogIEZpeCB2b2ljZWJsdWUgY29uZmlndXJhdGlvbi4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNiBBcHIgMjAwNToKICBVcGRhdGVzIGZvciBPQ09URUEgYm9hcmQ6CiAgLSBDaGFuZ2VkIFUtQm9vdCBzaXplIGZyb20gNTEya0J5dGUgdG8gMjU2a0J5dGUKICAtIEZpeGVkIGZsYXNoIGRyaXZlciB0byBzdXBwb3J0IGJvb3QgZnJvbSBzb2xkZXJlZCB1c2VyIGZsYXNoCiAgLSBBZGRlZCBSRUFETUUgZm9yIHN3aXRjaCBmcm9tIFBJQlMgZmlybXdhcmUgdG8gVS1Cb290CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA1IEFwciAyMDA1OgogIC0gQ2hhbmdlIHRpbWVyIGZyZXF1ZW5jeSBmb3IgcHBjIDQ0MCBmcm9tIDEwIG1zIHRvIDEgbXMuCiAgICBQcm9ibGVtIGZvdW5kIGJ5IEFuZHJldyBXb3puaWFrLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNiBBcHIgMjAwNToKICAtIGNyZWF0aW5nIFNvQyBzdWJkaXIgZm9yIEF0bWVsIEFUOTFSTTkyMDAgY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAogIC0gbW92aW5nIGNvZGUgb3V0IG9mIGNwdS9hdDkxcm05MjAwIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAoKKiBQYXRjaGVzIGJ5IFJvYmVydCBXaGFsZXksIDI5IE5vdiAyMDA0OgogIC0gdXBkYXRlIHRoZSBweGEtcmVncy5oIGZpbGUgZm9yIFBYQTI3eCBjaGlwcwogIC0gYWRkIFBYQTI3eCBiYXNlZCBBRFNWSVggYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBNTUMgb24gUFhBMjd4IHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgQW5kcmV3IEUuIE1pbGVza2ksIDI4IE5vdiAyMDA0OgogIEZpeCBQUEM0eHggU1BEIFNEUkFNIGRldGVjdGlvbiBidWcKCiogUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDI2IE5vdiAyMDA0OgogIEZpeCBsb2dpYyBvZiAidGVzdCAteiIgYW5kICJ0ZXN0IC1uIiBjb21tYW5kcwoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDUgQXByIDIwMDU6CiAgQWRkIHN1cHBvcnQgZm9yIFZvaWNlQmx1ZSBib2FyZC4KCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA1IEFwciAyMDA1OgogIEZpeCBuZXRib290X2NvbW1vbigpIHByb3RvdHlwZXMuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA1IEFwciAyMDA1OgogIFVzZSBpLk1YIHdhdGNoZG9nIHRpbWVyIGZvciByZXNldF9jcHUoKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNSBBcHIgMjAwNToKICBNb3ZlIHJlc2V0X2NwdSgpIG91dCBvZiBjcHUvYXJtOTIwdC9zdGFydC5TIGludG8gdGhlIFNvQyBzcGVjaWZpYwogIHN1YmRpcmVjdG9yaWVzIGNwdS9hcm05MjB0L2lteC8gYW5kIGNwdS9hcm05MjB0L3MzYzI0eDAvCiAgKG5vdyBpbiBpbnRlcnVwdHMuYykKCiogQWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgYmFzZWQgInNvcmNlcnkiIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU2MCBib2FyZC4KCiogQWRkIEZFQyBzdXBwb3J0IGZvciBUUU04NTQwIGJvYXJkLgogIEludGVyZmFjZXMgYXJlIG5hbWVkIGFzIGZvbGxvd3M6ICJFTkVUMSIgLSBUU0VDMiwgIkVORVQyIiAtIEZFQwoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNToKICBVcGRhdGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBDTUNfUFUyIGJvYXJkLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKICAtIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBDT05GSUdfSU5JVF9DUklUSUNBTCBmb3IgQVJNIGJhc2VkIGJvYXJkcwogIC0gaW50cm9kdWNlIHR3byBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGluc3RlYWQ6CiAgICBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGFuZCBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKICBNYWtlIHN1cmUgdGhhdCBNRElPIGNsb2NrIGRvZXMgbm90IGV4Y2VlZCAyLjUgTUh6IG9uIEFUOTEKCiogRml4IHRpbWVyIGNvZGUgZm9yIEFSTSBzeXN0ZW1zOiBtYWtlIHN1cmUgdGhhdCB1ZGVsYXkoKSBkb2VzIG5vdAogIHJlc2V0IHRpbWVycyBzbyBpdCdzIHNhdmUgdG8gdXNlIHVkZWxheSgpIGluIHRpbWVvdXQgY29kZS4KCiogUGF0Y2ggYnkgTWF0aGlhcyBL/HN0ZXIsIDIzIE5vdiAyMDA0OgogIGFkZCB1ZGVsYXkgc3VwcG9ydCBmb3IgdGhlIG1jZjUyODIgY3B1CgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE2IE5vdmVtYmVyIDIwMDQ6CiAgZml4IGluY29ycmVjdCBvbmJvYXJkIFhpbGlueCBDUExEIGJhc2UgYWRkcmVzcwoKKiBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDA4IE5vdiAyMDA0OgogIC0gQWRkIGxvdy1ib290IG9wdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZCAoaWYgbG93Ym9vdCBpcyBzZWxlY3RlZCwKICAgIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IGZsYXNoLiBJZiBsb3dib290IGlzCiAgICBub3Qgc2VsZWN0ZWQsIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IHRoZQogICAgQkNTUi4KICAtIGNoYW5nZSBkZWZhdWx0IGxvYWQgYmFzZSBhZGRyZXNzIHRvIDB4MDA0MDAwMDAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDggTm92IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEFuYWxvZ3VlICYgTWljcm8gUmF0dGxlciBib2FyZHMuCiAgVGVzdGVkIG9uIFJhdHRsZXI4MjQ4LgoKKiBQYXRjaCBieSBBbmRyZSBSZW5hdWQsIDA4IE5vdiAyMDA0OgogIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGluIGNvbW1vbi9sY2QuYwoKKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMDUgTm92IDIwMDM6CiAgRW5hYmxlIGFsbCA0IFBDTUJSVyBidWZmZXJzIGZvciB0aGUgTVBDODI0NSBwcm9jZXNzb3Igc2luY2UgdGhlIENQVQogIGJ1ZyBvbmx5IGFmZmVjdHMgdGhlIFhQQzgyNDUgcHJvY2Vzc29ycwoKKiBQYXRjaGVzIGJ5IEpvc2VmIFdhZ25lciwgMjkgT2N0IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BVODcgYm9hcmQKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTg1NCBib2FyZAoKKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAwMiBOb3YgMjAwNDoKICBBZGQgMTYtYml0IE5BTkQgc3VwcG9ydAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAxIE5vdiAyMDA0OgogIEFkZCBtaXNzaW5nIE5JT1MvTklPUzIgc3VwcG9ydCBmb3IgImltaW5mbyIgY29tbWFuZAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOSBPY3QgMjAwNDoKICBBZGQgbWlzc2luZyBOSU9TL05JT1MyIHN1cHBvcnQgZm9yICJta2ltYWdlIiB0b29sLgoKKiBQYXRjaCBieSBEYXZpZCBBZGFpciwgMjcgT2N0IDIwMDQ6CiAgQWRkIG1pc3NpbmcgNDQwR1ggU0RSQU0gQ29udHJvbGxlciByZXNldAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBPY3QgMjAwNDoKICBEZWNsYXJlIHJlc2V0X2NwdSgpIGluIGluY2x1ZGUvY29tbW9uLmggaW5zdGVhZCBsb2NhbGx5CgoqIFBhdGNoIGJ5IFl1c2RpIFNhbnRvc28sIDIyIE9jdCAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIEhJRERFTl9EUkFHT04gYm9hcmQKICAtIGZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBkcml2ZXIvcnRsMTgzOS5jCgoqIFBhdGNoIGJ5IEFsbGVuIEN1cnRpcywgMjEgT2N0IDIwMDQ6CiAgc3VwcG9ydCBtdWx0aXBsZSBzZXJpYWwgcG9ydHMKCiogUGF0Y2ggYnkgUmljaGFyZCBLbGluZ2xlciwgMDMgQXByIDIwMDU6CiAgQWRkIGNhbGwgdG8gZXRoX2hhbHQoKSBpbiBuZXQvbmV0LmMgd2hlbiBjYWxsZWQgZnVuY3Rpb25zIGZhaWwKICBhZnRlciBldGhfaW5pdCgpIGhhcyBiZWVuIGNhbGxlZC4KCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDMgQXByaWwgMjAwNToKICAtIFVwZGF0ZSBSRUFETUUuTmV0Y29uc29sZQogIC0gVXBkYXRlIFJFQURNRQoKKiBQcmVwYXJlIGZvciBTb0MgcmV3b3JrIG9mIEFSTSBjb2RlOgogIC0gcmVuYW1lIENPTkZJR19CT09UQklORlVOQyBpbnRvICBDT05GSUdfSU5JVF9DUklUSUNBTAogIC0gcmVuYW1lIG1lbXNldHVwIGludG8gbG93bGV2ZWxfaW5pdCAoZnVuY3Rpb24gbmFtZSBhbmQgc291cmNlIGZpbGVzKQogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAzIEFwciAyMDA1OgogIC0gY3JlYXRlIFNvQyBzcGVjaWZpYyBkaXJlY3RvcmllcyBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXggYW5kCiAgICBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwCgoqIEZpeCBwcm9ibGVtcyB3aXRoIFNOVFAgc3VwcG9ydDsKICBlbmFibGUgU05UUCBzdXBwb3J0IGluIHNvbWUgYm9hcmRzLgoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDAxIEFwciAyMDA1OgogIC0gRml4IGZsYXNoIGVyYXNlIHRpbWVvdXQgb24gQ01DX1BVMgogIC0gQWRkIGF1dG9tYXRpYyBIVyBkZXRlY3Rpb24gZm9yIENNQ19QVTIgYW5kIENNQ19CQVNJQwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBNYXJjaCAyMDA1OgogIGZpeCBjYWNoZSBlbmFibGluZyBmb3IgQVQ5MVJNOTIwMAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAzMCBNYXIgMjAwNToKICBhZGQgU05UUCBzdXBwb3J0IGFuZCBleHBhbmQgdGltZSBzZXJ2ZXIgYW5kIHRpbWUgb2Zmc2V0IGZpZWxkcyBvZgogIERIQ1Agc3VwcG9ydC4gU2VlIGRvYy9SRUFETUUuU05UUAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBEZWMgMjAwNDoKICBGaXggYnVnIGluIGF0OTFybTkyMCBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgRGVjIDIwMDQ6CiAgUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSBieSBtZXJnaW5nIG1lbXNldHVwLlMgZmlsZXMgZm9yCiAgYXQ5MXJtOTIwMCBib2FyZHMgaW50byBvbmUgY3B1L2F0OTFybTkyMDAvbG93bGV2ZWwuUwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAzMSBNYXIgMjAwNToKICBDbGVhbnVwIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIG92ZXJ3cml0ZV9jb25zb2xlKCkKCiogVXBkYXRlIFRRTTUyMDAgY29uZmlndXJhdGlvbjsKICBwcmVwYXJlIGZvciBSZXYuIDIwMCBzdGFydGVyIGtpdCBib2FyZHMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBPY3QgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTmlvcy1JSSBFUENTIENvbnRyb2xsZXIgY29yZS4KCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMCBPY3QgMjAwNDoKICBOaW9zLUlJIGNsZWFudXBzOgogIC0gQWRkIHN5c2lkIGNvbW1hbmQgKE5pb3MtSUkgb25seSkuCiAgLSBMb2NhdGUgZGVmYXVsdCBleGNlcHRpb24gdHJhbXBvbGluZSBhdCBwcm9wZXIgb2Zmc2V0LgogIC0gSW1wbGVtZW50IEkvTyByb3V0aW5lcyAocmVhZGIsIHdyaXRlYiwgZXRjKQogIC0gSW1wbGVtZW50IGRvX2Jvb3RtX2xpbnV4CgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMjIgTWFyIDIwMDU6CiAgLSB1c2UgVFFNNTIwMF9hdXRvIGFzIE1BS0VBTEwgdGFyZ2V0IGZvciBUUU01MjAwIHN5c3RlbXMKICAtIGFkZCBzdXBwb3J0IGZvciBTTTUwMSBncmFwaGljcyBjb250cm9sbGVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgZ3JhcGhpYyBjb25zb2xlIG9uIFRRTTUyMDAKICAtIGFkZCBzdXBwb3J0IGZvciBUUU01MjAwIFJldiAyMDAKICAtIGNsZWFudXAsIGZpeCB0eXBvIGluIGluY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKCiogUGF0Y2ggYnkgTWFuZnJlZCBCYXJhbCwgMTcgTWFyIDIwMDU6CiAgRml4IHR5cG8KCiogRml4IFJUQyBjb25maWd1cmF0aW9uIGZvciBQUENoYW1lbGVvbiBib2FyZAoKKiBDbGVhbnVwLCBmaXggdHlwbyBpbiBpbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2QgYXV0b191cGRhdGUgYW5kIGhoNDA1IGJvYXJkCgoqIEFkYXB0IGZvciBVLUJvb3QgaW1hZ2Ugc2l6ZSAobmV3IGZlYXR1cmVzIGVuYWJsZWQpIG9uIFRRTTUyMDAKCiogVXBkYXRlIGNvZGUgZm9yIFRRTTg1NDAgYm9hcmQgKGFuZCA4NXh4IGluIGdlbmVyYWwpOgogIC0gQ2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBFdGhlcm5ldCBkcml2ZXI6IE1PVE8gRU5FVCAtPiBFTkVUCiAgLSBSZWZvcm1hdCBib290IG1lc3NhZ2VzCiAgLSBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50CiAgLSBSZXBsYWNlIHRoZSAtTzIgb3B0aW1pemF0aW9uIGZsYWcgd2l0aCAtbW5vLXN0cmluZwoKKiBQYXRjaCBieSBEYXZpZCBCcm93bmVsbCwgMTAgTWFyIDIwMDU6CiAgUmVzdG9yZSBjb3B5cmlnaHQgc3RhdGVtZW50cyBpbiBPSENJIGRyaXZlcnMuCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NTQwIGJvYXJkCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE0IE1hciAyMDA1OgogIE5DNjUwOiBjaGFuZ2VkIE5BTkQgZmxhc2ggYWRkcmVzc2luZyB0byB1c2luZyBVUE1CCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2Qgdm9oNDA1IGZwZ2EgaW1hZ2UKCiogSU5LQTR4MDogQWxsb3cgaW5pdGlhbGl6YXRpb24gb2YgTENEIGJhY2tsaWdodCBkaW1taW5nIGZyb20KICAiYnJpZ2h0bmVzcyIgZW52aXJvbm1lbnQgdmFyaWFibGUuCgoqIEFkZCBwb3J0IGluaXRpYWxpemF0aW9uIGZvciBkaWdpdGFsIEkvTyBvbiBJTktBNHgwCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2QgYm9hcmRzIGRwNDA1IGFuZCBodWI0MDUKCiogRml4IGdldF9wYXJ0aXRpb25faW5mbygpIHBhcmFtZXRlciBlcnJvciBpbiBhbGwgb3RoZXIgY2FsbHMKICAoY29tbW9uL2NtZF9pZGUuYywgY29tbW9uL2NtZF9yZWlzZXIuYywgY29tbW9uL2NtZF9zY3NpLmMpLgoKKiBFbmFibGUgVVNCIGFuZCBJREUgc3VwcG9ydCBmb3IgSU5LQTR4MCBib2FyZAoKKiBQYXRjaCBieSBBbmRyZXcgRHllciwgMjggRmViIDIwMDU6CiAgZml4IGV4dDJsb2FkIHBhc3NpbmcgYW4gaW5jb3JyZWN0IHBvaW50ZXIgdG8gZ2V0X3BhcnRpdGlvbl9pbmZvKCkKICByZXN1bHRpbmcgaW4gbG9hZCBmYWlsdXJlIGZvciBkZXZpY2VzIG90aGVyIHRoYW4gMAoKKiBBZGQgc3VwcG9ydCBmb3IgU1JBTSBhbmQgMiB4IFF1YWQgVUFSVHMgb24gSU5LQTR4MCBib2FyZAoKKiBDbGVhbnVwIFVTQiBhbmQgcGFydGl0aW9uIGRlZmluZXMKCiogQWRkIHN1cHBvcnQgZm9yIGV4dDIgZmlsZXN5c3RlbXMgYW5kIGltYWdlIHRpbWVzdGFtcHMgdG8gVFFNNTIwMCBib2FyZAoKKiBBZGQgcmVzZXQgY29kZSBmb3IgQ29yYWwtUCBvbiBJTktBNHgwIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI4IEp1biAyMDA0OgogIFVwZGF0ZSBmb3IgVFJBQiBib2FyZC4KCiogRml4IHNvbWUgbWlzc2luZyAidm9sYXRpbGUicyBpbiBNUEM1eHh4IEZFQyBkcml2ZXIKCiogRml4IGNpcnJ1cyB2b2x0YWdlIGRldGVjdGlvbiAoZm9yIENQQzQ1KQoKKiBGaXggYnl0ZW9yZGVyIHByb2JsZW0gaW4gdXNiYm9vdCBhbmQgc2NzaWJvb3QgY29tbWFuZHMuCgoqIFBhdGNoIGJ5IENhanVzIEhhaG4sIDA0IEZlYiAyMDA1OgogIC0gZG9uJ3QgaW5zaXN0IG9uIGxlYWRpbmcgJy8nIGZvciBmaWxlbmFtZSBpbiBleHQybG9hZAogIC0gc2V0IGRlZmF1bHQgcGFydGl0aW9uIHRvIHVzZWZ1bCB2YWx1ZSAoMSkgaW4gZXh0MmxvYWQKCiogUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDA4IEphbiAyMDA1OgogIGZpeCB3cm9uZyByZXR1cm4gY29kZXMgaW4gZXh0MiBjb2RlCgoqIFJlbW92ZWQgJy0tbm8td2Fybi1taXNtYXRjaCcgb3B0aW9uIGZyb20gTWFrZWZpbGUuIFRoaXMgb3B0aW9uCiAgbWFrZXMgJ2xkJyB0byBvdmVybG9vayBiaW5hcnkgb2JqZWN0cyBjb21wYXRpYmlsaXR5LgoKKiBNb3ZlZCAkKFBMQVRGT1JNX0xJQlMpIGZyb20gdGhlIGxpYnJhcnkgZ3JvdXAgKC0tc3RhcnQtZ3JvdXAgLi4uCiAgLS1lbmQtZ3JvdXApIG91dHNpZGUgb2YgdGhlIGdyb3VwLiBUaGlzIHdpbGwgbWFrZSAnbGQnIHRvIGRvCiAgX211bHRpcGxlXyBzZWFyY2ggaW4gdGhlIGxpYnJhcnkgZ3JvdXAgd2hlbiByZXNvbHZpbmcgc3ltYm9sCiAgcmVmZXJlbmNlcyBhbmQgZG8gb25seSBhIF9zaW5nbGVfIHNlYWNoIGluIGxpYmdjYy5hIGFmdGVyIHRoZSBncm91cAogIHNlYXJjaC4KCiogRml4IHN0YWJpbGl0eSBwcm9ibGVtcyBvbiBDUEM0NSBib2FyZCBhZ2Fpbi4KCiogTWFrZSBpbWFnZSBkZXRlY3Rpb24gZm9yIGRpc2tib290IC8gdXNiYm9vdCAvIHNjc2lib290IG1vcmUgcm9idXN0CiAgKGFsc28gY2hlY2sgaGVhZGVyIGNoZWNrc3VtKQoKKiBVcGRhdGUgQ1BDNDUgYm9hcmQgY29uZmlndXJhdGlvbi4KCiogQWRkIFVTQiBhbmQgUENJIHN1cHBvcnQgZm9yIElOS0E0eDAgYm9hcmQKCiogRml4IElERSBzdGFiaWxpdHkgcHJvYmxlbXMgb24gQ1BDNDUgYm9hcmQgKG5lZWRzIDIgeCBFSUVJTykuCgoqIENvZGUgY2xlYW51cAoKKiBQYXRjaCBieSBSb2JpbiBHZXR6LCAxMyBPY3QgMjAwNDoKICBBZGQgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiB0byBjaGFuZ2UgU01DOTFDMTExIE1BQyBhZGRyZXNzZXMsCiAgc2VlIGV4YW1wbGVzL1JFQURNRS5zbWM5MTExMV9lZXByb20KCiogUGF0Y2ggYnkgWGlhb2dlbmcgKFNoYXduKSBKaW4sIDEyIE9jdCAyMDA0OgogIEZpeCBGbGFzaCBzdXBwb3J0IGZvciBBUk0gSW50ZWdyYXRvciBDUC4KCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTAgSmFuIDIwMDU6CiAgVXBkYXRlIHN1cHBvcnQgZm9yIE9NQVAyNDIwIChBUk0xMSkgYW5kIEg0IGJvYXJkOgogIG8gY2xlYW4gdXAgYW5kIGFkZCBuZXcgdHlwZXMgdG8gSDQgbWVtb3J5IHByb2JlIGNvZGUuCiAgbyBmaXggdG8gd29yayB3aXRoIGludGVybmFsIGJvb3QuCiAgbyBhZGRlZCBQUkNNIGNvbmZpZyBJSUkgb3BlcmF0aW9uLgogIG8gZml4IG1hcmdpbmFsIGZsYXNoIHRpbWluZ3MuCiAgbyBhZGQgcmV2aXNvbiBBVEFHIHVzYWdlLgogIG8gZW5hYmxlIHZvbHRhZ2Ugc2NhbGluZyBhdCBwb3dlciBjaGlwLgogIG8gZml4IGNvbXBpbGUgZXJyb3IgZm9yIGkyYy4KCiogRml4IG5ldHdvcmsgcHJvYmxlbSAoZXJyb3Igd2hlbiByZWNlaXZpbmcgbXVsdGlwbGUgQVJQIHBhY2tldHMpCgoqIFBhdGNoIGJ5IERhbmllbCBQb2lyb3QsIDEyIE9jdCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBXaW5kIFJpdmVyIHNiYzQwNSBib2FyZAoKKiBQYXRjaCBieSBSYWluZXIgQnJlc3RhbiwgMTIgT2N0IDIwMDQ6CiAgTWFrZSBleGFtcGxlcy9NYWtlZmlsZSBtb3JlIHJvYnVzdAoKKiBQYXRjaCBieSBTYW0gU29uZywgMTEgT2N0b2JlciAyMDA0OgogIC0gQWRkIFJFU0VUL1BSRUJPT1QvQVVUT0JPT1Qgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZAogIC0gQWRqdXN0IENQVTpCVVMgZnJlcXVlbmN5IHJhdGlvIDE6MSB3aGVuIGNvcmUgZnJlcXVlbmN5CiAgICBsZXNzIHRoYW4gNTBNSHoKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIE9jdCAyMDA0OgogIEZpeCBhIHBhcmFtZXRlciBlcnJvciBpbiBydW5fY29tbWFuZCgpIGluIG1haW4uYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAwMSBPY3QgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIFRJIE9NQVAyNDIwIHByb2Nlc3NvciBhbmQgaXRzIEg0IHJlZmVyZW5jZQogIGJvYXJkCgoqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsZWdyaW4sIDI0IFNlcCAyMDA0OgogIEFkZGVkIHN1cHBvcnQgZm9yIE5FMjAwMCBjb21wYXRpYmxlIChEUDgzOTAsIERQODM5MDIpIE5JQ3MuCgoqIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDIzIFNlcCAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciB0aGUgQU1EIGRiMTU1MCBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBTZXAgMjAwNDoKICBBZGQgQ09ORklHX1NFUklBTF9NVUxUSSBzdXBwb3J0IGZvciBwcGM0eHgsCiAgdXBkYXRlIFJFQURNRS5zZXJpYWxfbXVsdGkKCiogUGF0Y2hlcyBieSBEYXZpZCBTbm93ZG9uLCAwNyBTZXAgMjAwNDoKICAtIGFkZCB1LWJvb3QuaGV4IHRhcmdldCBpbiB0aGUgdG9wIGxldmVsIE1ha2VmaWxlCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFVOU1cvTklDVEEgUExFQiAyIGJvYXJkIChwbGViMikKICAtIHVzZSAtbXR1bmU9eHNjYWxlIGFuZCAtbWFyY2g9YXJtdjUgb3B0aW9ucyBmb3IgUFhBCgoqIFBhdGNoIGJ5IEZsb3JpYW4gU2NobG90ZSwgMDggU2VwIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFNlblRlYy1DT0JSQTUyNzItYm9hcmQgKENvbGRmaXJlKS4KCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAwNyBTZXAgMjAwNDoKICBtcGM4MjR4OiBzZXQgUENJIGxhdGVuY3kgdGltZXIgdG8gYSBzYW5lIHZhbHVlCiAgKGlzIDAgYWZ0ZXIgcmVzZXQpLgoKKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMDMgU2VwIDIwMDQ6CiAgQWRkIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZnBnYSBjb21tYW5kIChYaWxpbnggb25seSkuCgoqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAwMyBTZXAgMjAwNDoKICBBZGQgWGlsaW54IFNwYXJ0YW4yRSBmYW1pbHkgRlBHQSBzdXBwb3J0CgoqIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwMiBTZXAgMjAwNDoKICBBZGQgQWRkZWQgc3VwcG9ydCBmb3IgSDIgcmV2aXNpb24gb2YgdGhlIEVQODI2MCBib2FyZC4KICBGaXhlZCBmb3JtYXR0aW5nIGZvciBzb21lIG9mIHRoZSBFUDgyNjAgcmVsYXRlZCBzb3VyY2UgZmlsZXMuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDIgU2VwIDIwMDQ6CiAgUmVzZXQgbW9uaXRvciBzaXplIGJhY2sgdG8gMjU2IHNvIGVudmlyb25tZW50IGNhbiBiZSB3cml0dGVuCiAgdG8gZmxhc2ggb24gTVBDODV4eCBBRFMgYW5kIENEUyByZWxlYXNlcy4KCiogUGF0Y2ggYnkgUGFvbG8gQnJvZ2dpbmksIDAyIFNlcCAyMDA0OgogIE1ha2UgQlNTIGNsZWFyaW5nIG9uIEFSTSBzeXN0ZW1zIG1vcmUgcm9idXN0CgoqIFBhdGNoIGJ5IFl1ZSBIdSBhbmQgSm9lLCAwMSBTZXAgMjAwNDoKICAtIGFkZCBQQ0kgc3VwcG9ydCBmb3IgaXhwNDI1OwogIC0gYWRkIEVFUFJPMTAwIHN1cHBvciB0Zm9yIGl4ZHA0MjUgYm9hcmQuCgoqIEZpeCBwcm9ibGVtIHdpdGggcHJvdGVjdGVkIHNlY3RvciBkZXRlY3Rpb24gaW4gZHJpdmVyL2NmaV9mbGFzaC5jCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBDb2RlIGNsZWFudXAsIG1vc3RseSBmb3IgR0NDLTMuMy54CgoqIENsZWFudXAgY29uZnVzaW5nIHVzZSBvZiBDT05GSUdfRVRIKkFERFIgLSB1c3QgaGlzIG9ubHkgdG8KICBwcmUtZGVmaW5lIGEgTUFDIGFkZHJlc3M7IHVzZSBDT05GSUdfSEFTX0VUSCogdG8gZW5hYmxlIHN1cHBvcnQgZm9yCiAgYWRkaXRpb25hbCBldGhlcm5ldCBhZGRyZXNzZXMuCgoqIENsZWFudXAgZHJpdmVycy9pODIzNjUuYyAtIGF2b2lkIGR1cGxpY2F0aW9uIG9mIGNvZGUKCiogRml4IGJvZ3VzICJjYW5ub3Qgc3BhbiBhY3Jvc3MgYmFua3MiIGZsYXNoIGVycm9yIG1lc3NhZ2UKCiogQ29kZSBjbGVhbnVwCgoqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggZm9yIHRoZSBDUEM0NSBCb2FyZC4KCiogRml4IHByb2JsZW1zIHdpdGggQ01DX1BVMiBmbGFzaCBkcml2ZXIuCgoqIENsZWFudXA6CiAgLSBhdm9pZCB0cmlncmFwaCB3YXJuaW5nIGluIGZzL2V4dDIvZXh0MmZzLmMKICAtIHJlbmFtZSBVQzEwMCAtPiB1YzEwMAoKKiBBZGQgc3VwcG9ydCBmb3IgVUMxMDAgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBEZXogMjAwNDoKICAtIGV4dDJmcyBzdXBwb3J0IGFkZGVkCiAgLSBUdW5kcmEgdW5pdmVyc2Ugc3VwcG9ydCBhZGRlZAogIC0gQ29sZGZpcmUgTUNGNTI0OSBzdXBwb3J0IGFkZGVkIChubyBwcmVsb2FkZXIgbmVlZGVkISkKICAtIE1DRjUyNDkgYm9hcmQgVEFTUkVHIGFkZGVkCiAgLSBQUEMgYm9hcmRzIGFkZGVkOiBBUEM0MDUsIENQQ0k0MDVEVCwgQ1BDSTc1MCwgRzIwMDAsIEhINDA1LAogICAgVk9NNDA1LCBXVUg0MDUKICAtIHNvbWUgZXNkIGJvYXJkcyB1cGRhdGVkCiAgLSBtZW1vcnkgY29tbWFuZHMgIm1kYyIgYW5kICJtd2MiIGFkZGVkIGZvciBjeWNsaWMgcmVhZC93cml0ZQogICAgKENPTkZJR19NWF9DWUNMSUMsIHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pCgoqIEFkZCBzdXBwb3J0IGZvciBJTktBNFgwIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEyIERlYyAyMDA0OgogIEZpeCB0eXBvIGluIEFUOTEgbWVtb3J5IHNldHVwLgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciAiU1RLNTJ4eCIgYm9hcmQgKGluY2x1ZGluZyBQUy8yIG11bHRpcGxleGVyKQogIC0gYWRkIGhhcmR3YXJlIGRldGVjdGlvbiBmb3IgVFFNNTIwMAoKKiBDbGVhbiB1cCBDTUMgUFUyIGZsYXNoIGRyaXZlcgoKKiBVcGRhdGUgTUFJTlRBSU5FUlMgZmlsZQoKKiBGaXggYnVnIGluIE1QQzgyMyBMQ0QgZHJpdmVyCgoqIEZpeCB1ZGVsYXkoKSBvbiBBVDkxUk05MjAwIGZvciBkZWxheXMgPCAxIG1zLgoKKiBFbmFibGUgbG9uZyBoZWxwIG9uIENNQyBQVTIgYm9hcmQ7CiAgZml4IHJlc2V0IGlzc3VlOwogIGluY3JlYXNlIENQVSBzcGVlZCBmcm9tIDE3OSB0byAyMDcgTUh6LgoKKiBGaXggc21jOTExMTEgZXRoZXJuZXQgZHJpdmVyIGZvciBYYWVuaWF4IGJvYXJkIChuZWVkIHRvIGhhbmRsZQogIHVuYWxpZ25lZCB0YWlsIHBhcnQgc3BlY2lhbGx5KS4KCiogVXBkYXRlIGZvciBBVDkxUk05MjAwREsgYW5kIENNQ19QVTIgYm9hcmRzOgogIC0gRW5hYmxlIGJvb3RpbmcgZGlyZWN0bHkgZnJvbSBmbGFzaAogIC0gZml4IENNQ19QVTIgZmxhc2ggZHJpdmVyCgoqIEZpeCBta2ltYWdlIHVzYWdlIG1lc3NhZ2UKCiogTWFwIFNSQU0gb24gTkM2NTAgYm9hcmQKCiogV29yayBhcm91bmQgZm9yIEV0aGVybmV0IHByb2JsZW1zIG9uIFhhZW5pYXggYm9hcmQKCiogUGF0Y2ggYnkgVHNpQ2h1bmcgTGlldywgMjMgU2VwIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTVBDODIyMCBDUFUKICAtIEFkZCBzdXBwb3J0IGZvciBBbGFza2EgYW5kIFl1a29uIGJvYXJkcwoKKiBGaXggY29uZmlndXJhdGlvbiBmb3IgRVJJQyBib2FyZCAobmVlZHMgbW9yZSByb29tKQoKKiBBZGp1c3QgTUlQUyBjb21waWxlciBvcHRpb25zIGF0IHJ1bi10aW1lIGRlcGVuZGluZyBvbiB0b29scyB2ZXJzaW9uCiAgKCItbWFyY2g9NGtjIC1tdHVuZT00a2MgLVdhLC1taXBzX2FsbG93X2JyYW5jaF90b191bmRlZmluZWQiIGZvciBuZXcsCiAgIi1tY3B1PTRrYyIgZm9yIG9sZCB0b29scykKCiogQWRkIHBhc3Npbmcgb2YgdGhlIGNvbW1hbmQgbGluZSBhbmQgbWVtb3J5IHNpemUgaW5mb3JtYXRpb24gdG8gIHRoZQogIGtlcm5lbCBvbiB4YWVuaWF4IGJvYXJkLgoKKiBFbmFibGUgTkFORCBmbGFzaCBzdXBwb3J0IGZvciBOQzY1MCBib2FyZC4KCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlIDA3IE9jdCAyMDA0OgogIFVwZGF0ZWQgUkVBRE1FIGZvciBEQkF1MXgwMCBib2FyZHMgdG8gbWF0Y2ggY3VycmVudCBzdGF0dXMKCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDI4IFNlcHQgMjAwNDoKICBGaXggRmxhc2ggc3VwcG9ydCBmb3IgVmVyc2F0aWxlLgoKKiBQYXRjaCBieSBSb2dlciBCbG9mZWxkLCAxNiBTZXAgMjAwNDoKICBGaXggdGltZW91dCBmb3IgREhDUCBjb21tYW5kIHJldHJ5CgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKICBGaXggZWFybHkgc2VyaWFsIGhhbmcgd2hlbiBDT05GSUdfU0VSSUFMX01VTFRJIGlzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKICBLaWNrIHdhdGNoZG9nIHdoZW4gYnotZGVjb21wcmVzc2luZwoKKiBGaXggQ0ZHX0haIHByb2JsZW1zIG9uIEFUOTFSTTkyMDAgc3lzdGVtcwogIFtSZW1lbWJlcjogQ0ZHX0haIHNob3VsZCBiZSAxMDAwIG9uIEFMTCBzeXN0ZW1zIV0KCiogUGF0Y2ggYnkgR3JpZGlzaCBTaGxvbWksIDMwIEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgdG8gcmV2QSB2ZXJzaW9uIG9mIFBRMjcgYW5kIFBRMjdFLgogIC0gUmV2ZXJ0ZWQgTVBDODI2MEFEUyBiYXVkcmF0ZSBiYWNrIHRvIG9yaWdpbmFsIDExNTIwMAoKKiBQYXRjaCBieSBIb2ppbiwgMTcgU2VwIDIwMDQ6CiAgRml4IHR5cG8gaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDkgU2VwdGVtYmVyIDIwMDQ6CiAgbXRlc3QncyBkYXRhIGxpbmUgdGVzdCAod2l0aCBDRkdfQUxUX01FTVRFU1Qgc2V0KSByZXR1cm5lZCBhIHdyb25nCiAgZXJyb3IgbWVzc2FnZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAzMSBBdWd1c3QgMjAwNDoKICBBZGRlZCBvcHRpb24gQ0ZHX1hMQl9QSVBFTElOSU5HIHRvIGVuYWJsZSBYTEIgcGlwZWxpbmluZy4gVGhpcwogIGltcHJvdmVzIEZUUCBwZXJmb3JtYW5jZSBmb3IgTVBDNTIwMCBzeXN0ZW1zLiBFbmFibGVkIGZvciBJY2VDdWJlCiAgYnkgZGVmYXVsdC4KCiogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMzAgQXVnIDIwMDQ6CiAgLSBJbXByb3ZlIHBsYXRmb3JtLlMgY29kZSBmb3Igb21hcDE1MTBpbm4gdGhhdCBkZXRlY3RzIHdoZXRoZXIgY29kZQogICAgaXMgcnVubmluZyBmcm9tIFNEUkFNIG9yIG5vdC4gUGF0Y2ggYWxsb3dzIFNEUkFNIHRvIGJlIGNvbmZpZ3VyZWQKICAgIGlmIGNvZGUgaXMgcnVubmluZyBvdXQgb2YgU1JBTSBhdCAweDIwMDAwMDAwLgoKKiBQYXRjaCBieSBGcmVkZXJpY2sgS2xhdHQsIDMwIEF1ZyAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgV2luZCBSaXZlciBTQkM4NTQwL1NCQzg1NjAgYm9hcmRzCgoqIENvbmZpZ3VyZSBTWDEgYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKCiogUGF0Y2hlcyBieSBNaWNoYWVsIEJlbmR6aWNrLCAzMCBBdWcgMjAwNDoKICAtIENvbmZpZ3VyZSBvbWFwMTUxMGlubiBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYwogIC0gTWFrZSBkcml2ZXJzL2NmaV9mbGFzaC5jIHByb3RlY3QgZW52aXJvbm1lbnQgYW5kIHJlZHVuZGFudAogICAgZW52aXJvbm1lbnQuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEp1biAyMDA0OgogIC0gQWRkIHNjcmlwdCAodG9vbHMvaW1nMmJyZWMuc2gpIHRvIHByb2dyYW1tIFUtQm9vdCBpbnRvCiAgICAoU3luY2gpRmxhc2ggdXNpbmcgdGhlIEJvb3RzdHJhcCBNb2RlIG9mIHRoZSBNQzkzMjhNWDEvTAoKKiBQYXRjaGVzIGJ5IFNjb3R0IE1jTnV0dCwgMjQgQXVnIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtSUkgcHJvY2Vzc29ycy4KICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUENJLTU0NDEgYm9hcmQuCiAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBLMUMyMCBib2FyZC4KCiogUGF0Y2hlcyBieSBKb24gTG9lbGlnZXIsIDI0IEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNUEM4NTQxIGFuZCBNUEM4NTU1IENEUyBib2FyZHMKICAtIENsZWFudXAgZXRoP2FkZHIgaGFuZGxpbmc6IG1ha2UgZGVwZW5kZW50IG9uIENPTkZJR19FVEg/QUREUgogIC0gQ29udmVydCBNUEM4NXh4QURTIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgogIC0gRml4IFBDSSB3aW5kb3cgb24gTVBDODV4eDsgcmVtb3ZlIHVubmVlZGVkIFBDSSBpbml0aWFsaXphdGlvbgogICAgZnJvbSBib2FyZF9lYXJseV9pbml0X2YoKQogIC0gUHJvdmlkZSBTVyB3b3JrYXJvdW5kIGZvciBQQ0kgaW5pdGlhbGl6YXRpb24gb24gODV4eCBDRFMKCiogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDI0IEF1ZyAyMDA0OgogIC0gRW5hYmxlIHJhbWRpc2svaW5pdHJkIHRhZ2dlZCBwYXJhbSBzdXBwb3J0IGZvciBvbWFwMTYxMGgyX2NvbmZpZwogIC0gUmVtb3ZlIHN0YXRpYyBuZXR3b3JrIHNldHVwIGRlZmF1bHRzIGZyb20gbXgxYWRzX2NvbmZpZwogIC0gdXBkYXRlIEFSTSBib2FyZHMgdG8gdXNlIGNvbnN0YW50cyBmcm9tIG1hY2gtdHlwZXMuaAoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDQgT2N0IDIwMDQ6CiAgLSBmaXggSTJDIG9uIGF0OTFybTkyMDAKICAtIGFkZCBzdXBwb3J0IGZvciBSaWNvaCBSUzVDMzcyQSBSVEMKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDAxIE9jdCAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIENNQyBQVTIgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBJMkMgb24gYXQ5MXJtOTIwMAoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggU2VwIDIwMDQ6CiAgZml4IGJhdWRyYXRlIGhhbmRsaW5nIG9uIGF0OTFybTkyMDAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgQXVnIDIwMDQ6CiAgLSByZW1vdmUgWlBDLjE5MDAgYm9hcmQtc3BlY2lmaWMgZmxhc2ggZHJpdmVyOwogICAgc3dpdGNoIHRoZSBwb3J0IHRvIGdlbmVyaWMgQ0ZJIGRyaXZlcjsKICAtIHBvcnQgY2xlYW4tdXAKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgQWRkIGNhbGNfZmJzaXplKCkgZnVuY3Rpb24gdXNlZCB3aXRoIFZJREVPTEZCX1RBRyBvbiBUUkFCCgoqIENsZWFuIHVwIHRvb2xzL2JtcF9sb2dvLmMgdG8gbm90IGFkZCB0cmFpbGluZyB3aGl0ZSBzcGFjZQoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMgaW4gY29tbW9uL2xjZC5jCiAgLSBHcm91cCBjb21tb24gZnJhbWVidWZmZXIgbWFjcm9zIGFuZCAjZGVmaW5lcyBpbiBpbmNsdWRlL2xjZC5oCiAgLSBQcm92aWRlIGNhbGNfZmJzaXplKCkgZm9yIHZpZGVvIEFUQUcKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDIxIEF1Z3VzdCAyMDA0OgogIC0gRml4IGEgdHlwbyBpbiBSRUFETUUKICAtIEFsaWduICIoUk8pIiBvdXRwdXQgZm9yICJmbGluZm8iIGFmdGVyICJwcm90ZWN0IG9uIgogIC0gQWRkIFJFU0VUIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQ7IGFkanVzdCBDUFU6QlVTIGZyZXF1ZW5jeQogICAgcmF0aW8gMToxIHdoZW4gY29yZSBmcmVxdWVuY3kgbGVzcyB0aGFuIDUwTUh6CgoqIFBhdGNoZXMgYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgLSBmaXggc29tZSAidXNlIG9mIGxhYmVsIGF0IGVuZCBvZiBjb21wb3VuZCBzdGF0ZW1lbnQiIHdhcm5pbmdzCiAgLSBEZWZpbmUgdHlwZSBvZiBMQ0QgcGFuZWwgb24gbHViYm9jayBib2FyZCBpZiBDT05GSUdfTENEIGlzIHVzZWQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTYgQXVnIDIwMDQ6CiAgLSBJbnRyb2R1Y2luZyB0aGUgY29uY2VwdCBvZiBTb0NzICIuL2NwdS8kKENQVSkvJChTT0MpIgogIC0gY3JlYXRpbmcgc3ViZGlycyBmb3IgU29DcyAuL2NwdS9hcm05MjB0L2lteCBhbmQgLi9jcHUvYXJtOTIwdC9zM2MyNHgwCiAgLSBtb3ZpbmcgU29DIHNwZWNpZmljIGNvZGUgb3V0IG9mIGNwdS9hcm05MjB0LyBpbnRvIGNwdS9hcm05MjB0LyQoU09DKS8KICAtIG1vdmluZyBkcml2ZXJzL3MzYzI0eDBfaTJjLmMgYW5kIGRyaXZlcnMvc2VyaWFsX2lteC5jIG91dCBvZiBkcml2ZXJzLwogICAgaW50byBjcHUvYXJtOTIwdC8kKFNPQykvCgoqIFBhdGNoZXMgYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBib3RoIDggYW5kIDE2IGJpdCBtb2RlIGFjY2VzcyB0byBTeXN0ZW0gQUNFIENGCiAgICB0aHJvdWdoIE1QVS4KICAtIEZpeGVkIG1pc3NpbmcgU3lzdGVtIEFDRSBDRiBkZXZpY2UgZHVyaW5nIGdldCBGQVQgcGFydGl0aW9uIGluZm8KICAgIGluIGZhdF9yZWdpc3Rlcl9kZXZpY2UgZnVuY3Rpb24uCiAgLSBFbmFibGVkIFN5c3RlbSBBQ0UgQ0Ygc3VwcG9ydCBvbiBNTDMwMC4KCiogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgU3luY2ggZGVmaW5lcyBmb3Igc2F2ZWVudiBhbmQgZG9fc2F2ZWVudiBmdW5jdGlvbnMgc28gdGhleSBnZXQKICBjb21waWxlZCB1bmRlciB0aGUgc2FtZSBzdGF0ZW1lbnQuCgoqIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgogIC0gQWRkZWQgSTJDIHN1cHBvcnQgZm9yIE1MMzAwLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgTUwzMDAgdG8gcmVhZCBvdXQgaXRzIGVudmlyb25tZW50IGluZm9ybWF0aW9uCiAgICBzdG9yZWQgb24gdGhlIEVFUFJPTS4KICAtIEFkZGVkIHN1cHBvcnQgdG8gdXNlIGJvYXJkIHNwZWNpZmljIHBhcmFtZXRlcnMgYXMgcGFydCBvZgogICAgVS1Cb290J3MgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCiAgLSBVcGRhdGVkIE1MRCBmaWxlcyB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gZm9yIG5ldyBmZWF0dXJlcwogICAgYWJvdmUuCgoqIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMDUgQXVnIDIwMDQ6CiAgLSBSZW1vdmUgaW5jb3JyZWN0IGJyaWRnZSBzZXR0aW5ncyBmb3IgZXRoIGdyb3VwIDYKICAtIEFkZCBjYWxsIHRvIHNldHVwIGJyaWRnZSBpbiBwcGNfNDQweF9ldGhfaW5pdGlhbGl6ZQogIC0gRml4IHBwY180NDB4X2V0aF9pbml0IHRvIHJlc2V0IHRoZSBwaHkgb25seSBpZiBpdHMgdGhlCiAgICBmaXJzdCB0aW1lIHRocm91Z2gsIG90aGVyd2lzZSwganVzdCBjaGVjayB0aGUgcGh5IGZvciB0aGUKICAgIGF1dG9uZWdvdGlhdGVkIHNwZWVkL2R1cGxleC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgbmV0Y29uc29sZQogIC0gb25seSBwcmludCB0aGUgc3BlZWQvZHVwbGV4IHRoZSBmaXJzdCB0aW1lIHRoZSBwaHkgaXMgcmVzZXQuCgoqIFBhdGNoIGJ5IFNobG9tbyBLdXQsIDI5IE1hciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBNS1MgSW5zdHJ1bWVudHMgIlF1YW50dW0iIGJvYXJkCgoqIEZpeCBidWlsZCBwcm9ibGVtIHdpdGggQ29nZW50IGJvYXJkczsKICBhdm9pZCB1c2luZyA8YXNtL2J5dGVvcmRlci5oPiB3aGVuIHVzaW5nIHRoZSBob3N0IGNvbXBpbGVyCgoqIFBhdGNoIGJ5IEdhbmFwYXRoaSBDLCAwNCBBdWcgMjAwNDoKICBGaXggTkZTIHRpbWVvdXQgaXNzdWUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgSnVsIDIwMDQ6CiAgLSBGaXggaG9zdCB0b29scyBidWlsZGluZyBpbiBDeWd3aW4gZW52aXJvbm1lbnQKICAtIEZpeCBoZWFkZXIgZmlsZXMgc2VhcmNoIG9yZGVyIGZvciBob3N0IHRvb2xzCgoqIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDE5IEp1bCAyMDA0OgogIEZpeCBrZ2RiLlMgc3VwcG9ydCBmb3IgNzR4eF83NXggY3B1CgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTUgSnVsIDIwMDQ6CiAgRml4IE1QQzg1eHggSTJDIGRyaXZlcgoKKiBGaXggcHJvYmxlbXMgd2l0aCBDRFJPTSBkcml2ZSBhcyBzbGF2ZSBkZXZpY2Ugb24gTGl0ZTUyMDAgSURFIGJ1cy4KCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTUgSnVseSAyMDA0CiAgU2V0IHRoZSBQQ0kgY2xhc3MgY29kZSBmb3IgSlNFIGJvYXJkIGFzIHBhcnQgb2YgUENJIGludGVyZmFjZSBzZXR1cAoKKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNSBKdWwgMjAwNDoKICBGaXggcHJvYmxlbSB3aXRoIHdyaXRlcyB3aXRoIG9kZCBzaXplcyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIHdoZW4KICBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSBpcyBzZXQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDQ6CiAgQWxsb3cgY2xvY2sgc2V0dGluZyBvbiBNUEM4NjYvTVBDODg1IHNlcmllcyBjaGlwcyBhY2NvcmRpbmcgdG8KICBlbnZpcm9ubWVudCB2YXJpYWJsZSBgY3B1Y2xrJwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBBcHIgMjAwNDoKICBSZW1vdmUgdW5uZWNlc3NhcnkgcmVkZWZpbmUgb2YgQ1BNX0RBVEFPTkxZX1NJWkUgZm9yIE1QQzgyNngKCiogUGF0Y2ggYnkgVmluY2VudCBEdWJleSwgMjQgU2VwIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHhhZW5pYXggYm9hcmQKCiogQWRkIGNvbW1lbnQgYWJvdXQgbm9uLUdQTCBjaGFyYWN0ZXIgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8KICBDT1BZSU5HIGZpbGUKCiogRml4IEZFQyBldGhlcm5ldCBwcm9ibGVtIG9uIE5TQ1UgYm9hcmQuCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwOSBTZXAgMjAwNDoKICBhbGxvdyB0byB1c2UgVVNBUlQxIGFzIGNvbnNvbGUgcG9ydCBvbiBhdDkxcm05MjAwZGsgYm9hcmRzCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgU2VwIDIwMDQ6CiAgVXBkYXRlIEFSNDA1IGJvYXJkLgoKKiBGaXggU3lzQ2xrIGhhbmRsaW5nIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAwOCBTZXAgMjAwNDoKICBVcGRhdGUgZXRhZ3MgYnVpbGQgdGFyZ2V0CgoqIEltcHJvdmUgTmV0Q29uc29sZSBzdXBwb3J0OiBhZGQgc3VwcG9ydCBmb3IgYnJvYWRjYXN0IGRlc3RpbmF0aW9uCiAgYWRkcmVzcyBhbmQgYnVmZmVyZWQgaW5wdXQuCgoqIENsZWFudXAgY29tcGlsZXIgd2FybmluZ3MgZm9yIEdDQyAzLjMueCBhbmQgbGF0ZXIKCiogRml4IHByb2JsZW0gaW4gY21kX2pmZnMyLmMgaW50cm9kdWNlZCBieSBDRkdfSkZGU19TSU5HTEVfUEFSVCBwYXRjaAoKKiBBZGQgc3VwcG9ydCBmb3IgSURTICJOQzY1MCIgYm9hcmQKCiogQWRkIGF1dG9tYXRpYyB1cGRhdGUgc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKCiogQ2xlYXIgQmxvY2sgTG9jay1CaXRzIHdoZW4gZXJhc2luZyBmbGFzaCBvbiBMV01PTiBib2FyZC4KCiogRml4IHJldHVybiBjb2RlIG9mICJmYXRsb2FkIiBjb21tYW5kCgoqIEVuYWJsZSBNU0RPUy9WRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDMgQXVnIDIwMDQ6CiAgY2hhbmdlIHRpbWluZyBmb3IgU001MDEgZ3JhcGhpY3MgY29udHJvbGxlciBvbiBUUU01MjAwIG1vZHVsZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAxMyBKdWx5IDIwMDQ6CiAgLSBUb3RhbDUyMDAgTENEIG5vdyBydW4gaW4gbGl0dGxlIGVuZGlhbiBtb2RlLiBFbmRpYW5lc3MgY29udmVyc2lvbgogICAgaXMgZG9uZSBpbiBoYXJkd2FyZS4KICAtIFJlbW92ZWQgbGFzdCByZWZlcmVuY2UgdG8gImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlLgoKKiBQYXRjaGVzIGJ5IExhcnMgTXVuY2gsIDEyIEp1bCAyMDA0OgogIC0gbW92ZSBhdDQ1LmMgdG8gYm9hcmQvYXQ5MXJtOTIwMGRrLyBzaW5jZSB0aGlzIGlzIGF0OTFybTkyMDBkawogICAgYm9hcmQgc3BlY2lmaWMKICAtIHNwbGl0IG91dCB0aGUgTFhUOTcxQSBQSFkgZnJvbSBuc185NzUwX2V0aC5oCiAgLSBzcGxpdCB0aGUgZG05MTYxIHBoeSBwYXJ0IG91dCBvZiBhdDkxcm05MjAwX2V0aGVyLmMKCiogUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTIgSnVsIDIwMDQ6CiAgUmVwbGFjZWQgaGFyZGNvZGVkIFBMMDExIGNsb2NrIGZyZXF1ZW5jeSB3aXRoIGNvbmZpZyB2YXJpYWJsZS4KICBGaXhlZCB3cm9uZyBDT05GSUdfQ01EX0RGTCBkb2MuCgoqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDA5IEp1biAyMDA0OgogIG1ha2UgaXQgcG9zc2libGUgdG8gcmVtb3ZlIGNocGFydCB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHBhcnRpdGlvbgoKKiBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIFVEUCAoY29tcGF0aWJsZSB0byBJbmdvIE1vbG5hcidzCiAgbmV0Y29uc29sZSBwYXRjaCB1bmRlciBMaW51eCkKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNiBKdWwgMjAwNDoKICAtIHN1cHBvcnQgbGFyZ2VyIEREUiBtZW1vcmllcyB1cCB0byAyRyBvbiB0aGUgUEM4NTQwLzg1NjBBRFMgYW5kCiAgICBTVFhHUDMgYm9hcmRzCiAgLSBNYWRlIE1QQzg1NDAvODU2MEFEUyBiZSAzM01oeiBQQ0kgYnkgZGVmYXVsdC4KICAtIFJlbW92ZWQgbW9sZHkgQ09ORklHX1JBTV9BU19GTEFTSCwgQ0ZHX0ZMQVNIX1BPUlRfV0lEVEhfMTYKICAgIGFuZCBDT05GSUdfTDJfSU5JVF9SQU0gb3B0aW9ucy4KICAtIFJlZmFjdG9yIExvY2FsIEJ1cyBpbml0aWFsaXphdGlvbiBvdXQgb2YgU0RSQU0gc2V0dXAuCiAgLSBSZS1pbXBsZW1lbnQgbmV3IHZlcnNpb24gb2YgTEJDMTEvRERSMTEgZXJyYXRhIHdvcmthcm91bmRzLgogIC0gTW92ZWQgYm9hcmQgc3BlY2lmaWMgUENJIGluaXQgcGFydHMgb3V0IG9mIENQVSBkaXJlY3RvcnkuCiAgLSBBZGRlZCBUTEIgZW50cnkgZm9yIFBDSS0xIElPIE1lbW9yeQogIC0gVXBkYXRlZCBSRUFETUUubXBjODV4eGFkcwoKKiBQYXRjaCBieSBTYXNjaGEgSGF1ZXIsIDI4IEp1bjoKICAtIGFkZCBnZW5lcmljIHN1cHBvcnQgZm9yIE1vdG9yb2xhIGkuTVggYXJjaGl0ZWN0dXJlCiAgLSBhZGQgc3VwcG9ydCBmb3IgbXgxYWRzLCBteDFmczIgYW5kIHNjYjkzMjggYm9hcmRzCgoqIFBhdGNoZXMgYnkgTWFyYyBMZWVtYW4sIDIzIEp1bCAyMDA0OgogIC0gQWRkIGRlZmluZSBmb3IgdGhlIFBDSS9NZW1vcnkgQnVmZmVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKICAtIGNvcnJlY3RlZCBjb21tZW50cyBpbiBjcHUvbXBjODI0eC9jcHVfaW5pdC5jCgoqIEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzZXJpYWwgaW50ZXJmYWNlcwogIChmb3IgZXhhbXBsZSB0byBhbGxvdyBtb2RlbSBkaWFsLWluIC8gZGlhbC1vdXQpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgSnVsIDIwMDQ6CiAgY3B1L3BwYzR4eC9zZHJhbS5jIHJld3JpdHRlbiBub3cgdXNpbmcgZ2V0X3JhbV9zaXplKCkKCiogRml4IE5TQ1UgY29uZmlnOyBhZGQgZXRoZXJuZXQgd2FrZXVwIGNvZGUuCgoqIEFkZCBsaW5rIGZvciBwcmVsb2FkZXIgZm9yIE1vdG9yb2xhIENvbGRmaXJlIHRvIFJFQURNRS5tNjhrCgoqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDEyIEp1bCAyMDA0OgogIGZpeCBvdXRwdXQgZm9ybWF0dGluZyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAyIEp1bCAyMDA0OgogIEZpeCBsb3dib290IChhZ2Fpbikgb24gTVBDNXh4eAoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNyBKdWwgMjAwNDoKICByZWxvY2F0ZSBleGNlcHRpb24gdmVjdG9ycyBvbiBhcm03MjB0IGlmIG5lZWRlZAoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDA2IEp1bCAyMDA0OgogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdAogIC0gU2V0IGNvcnJlY3QgT01BUDE2MTAgYmlfYXJjaF9udW1iZXIgZm9yIGJ1aWxkIHRhcmdldAoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNiBKdWwgMjAwNDoKICBldmI0NTEwOiBhZGQgc3VwcG9ydCBmb3IgdGltZXIgaW50ZXJydXB0OyBjbGVhbnVwCgoqIFBhdGNoIGJ5IERhbiBQb2lyb3QsIDA2IEp1bCAyMDA0OgogIEZpeCBzYmM4MjYwIGVudmlyb25tZW50IHZhcmlhYmxlcwoKKiBDbGVhbnVwIHJlZHVuZGFuZCAiY29uc29sZSIgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDUgSnVsIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUb3RhbDUxMDAncyBhbmQgVG90YWw1MjAwJ3MgTENEIHNjcmVlbgoKKiBQYXRjaGVzIGJ5IERhbiBFaXNlbmh1dCwgMDEgSnVsIDIwMDQ6CiAgLSBSRUFETUUgZml4ZXMuCiAgLSBNb3ZlIGRvYzIwMDAuaCBpbmNsdWRlIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyBvbiBzb21lIGJvYXJkcwoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwMSBKdWwgMjAwNDoKICBBZGRlZCBzdXBwb3J0IGZvciBUb3RhbDUxMDAgYW5kIFRvdGFsNTIwMCAoUmV2LjEgYW5kIFJldi4yKQogIE1HVDUxMDAgYW5kIE1QQzUyMDAgYmFzZWQgRnJlZXNjYWxlIHBsYXRmb3Jtcy4KCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDAxIEp1bCAyMDA0OgogIEFkZCBpbml0aWFsaXphdGlvbiBmb3IgSW50ZWdyYXRvciBhbmQgdmVyc2F0aWxlIGJvYXJkIGZpbGVzLgoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAwMSBKdW4gMjAwNDoKICBGaXggVkZEIEZCIGFsbG9jYXRpb24sIGFkZCBMQ0QgRkIgYWxsb2NhdGlvbiBvbiBBUk0KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMzAgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjkgSnVuIDIwMDQ6CiAgQWRkIGxvb3B3IGNvbW1hbmQ6IGluZmluaXRlIHdyaXRlIGxvb3Agb24gYWRkcmVzcyByYW5nZQoKKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI5IEp1biAyMDA0OgogIC0gYWRkIGVtcHR5IGluY2x1ZGUvYXNtLW1pY3JvYmxhemUvcHJvY2Vzc29yLmgKICAtIGFkZCB0byBDUkVESVRTIGFuZCBNQUlOVEFJTkVSUwogIC0gYWRkIGdkIGluaXRpYWxpemF0aW9uCiAgLSBhZGQgTWljcm9CbGF6ZSBhbmQgU1VaQUtVIGJvYXJkIHRvIE1BS0VBTEwgc2NyaXB0CiAgLSBhZGQgcmVzZXQgc3VwcG9ydCBmb3IgU1VaQUtVCiAgLSBhZGQgZmx1c2hfY2FjaGUoKSBmb3IgTWljcm9CbGF6ZQogIC0gYWRkIENGR19GTEFTSF9TSVpFIHRvIGluY2x1ZGUvY29uZmlncy9zdXpha3UuaCBzaW5jZSB3ZSBoYXZlIGZpeGVkCiAgICBzaXplIGZsYXNoIG1lbW9yeSBvbiBTVVpBS1UKCiogUGF0Y2ggYnkgUHJha2FzaCBLdW1hciwgMjcgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBQWEEyNTAgYmFzZWQgSW50cmluc3ljIENlcmYgYm9hcmQuCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDI3IEp1biAyMDA0OgogIGZpeCBjb21tZW50IGluIGluY2x1ZGUvY29tbW9uLmgKCiogUmVuYW1lIFNCQzg1NjAgaW50byBzYmM4NTYwIGZvciBjb25zaXN0ZW5jeQoKKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAyNCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlcidzIHNiYzgyNDAgYm9hcmQKCiogUGF0Y2hlcyBieSBZYXN1c2hpIFNob2ppLCAyNiBKdW4gMjAwNDoKICAtIGRyaXZlcnMvc2VyaWFsX3h1YXJ0bGl0ZS5jOiBmaXggInJldHVybiAwIiBpbiB2b2lkIGZ1bmN0aW9uCiAgLSBhZGQgbWljcm9ibGF6ZSBzdXBwb3J0IHRvIG1raW1hZ2UgdG9vbAoKKiBQYXRjaCBieSBGcmVkIEtsYXR0LCAyNSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZFJpdmVyJ3Mgc2JjODU2MCBib2FyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNAogIFNtYWxsIEJ1Z3MgZml4ZXMgZm9yICJhdDkxcm05MjAwZGsiIGJvYXJkOgogIC0gVGltaW5nIG1vZGlmaWNhdGlvbnMgZm9yIFNQSSBEYXRhRmxhc2ggYWNjZXNzCiAgLSBGaXggTkFORCBmbGFzaCBkZXRlY3Rpb24gYnVnCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDI0IEp1biAyMDA0OgogIEFkZCBTdXBwb3J0IGZvciBGbGFzaCBBVDQ5QlY2NDE2IGZvciBBVDkxUk05MjAwREsgYm9hcmQKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNyBKdW5lIDIwMDQ6CiAgQ29tcGxldGlvbiBvZiB0aGUgODU0MEFEUy84NTYwQURTIHVwZGF0ZXM6CiAgRml4IHNvbWUgUENJIGFuZCBSYXBpZCBJL08gbWVtb3J5IG1hcHMsCiAgSW5pdGlhbGl6ZSBib3RoIFRTRUMgMSBhbmQgMiwKICBJbml0aWFsaXplIFNEUkFNCiAgVXBkYXRlIE1BSU5UQUlORVIgZm9yIDg1eHggYm9hcmRzIGFuZCBSRUFETUUubXBjODV4eGFkcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdW4gMjAwNDoKICBSZW1vdmUgb2Jzb2xldGUgQWRkZXJJSSBwb3J0IHdoaWNoIHdhcyBzdXBlcnNlZGVkIGJ5IHVuaWZpZWQKICBBZGRlcklJL0FkZGVyODd4IHBvcnQKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2IEp1biAyMDA0OgogIEZpeCBnY2MtMy4zLjMgd2FybmluZ3MgZm9yIHNtYzkxMTExLmMKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMiBKdWwgMjAwNDoKICAtIEZpeCBidWcgaW4gNDA1IGV0aGVybmV0IGRyaXZlcjsgYWxsb2NhdGVkIGRhdGEgbm90IGNsZWFyZWQhCiAgLSBGaXggcHJvYmxlbSBpbiA0MDUgaTJjIGRyaXZlcjsgZG9uJ3QgdHJ5IHRvIHByaW50IHdpdGhvdXQgY29uc29sZSEKCiogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAxMSBKdW4gMjAwNDoKICBSZW1vdmUgZGVidWcgY29kZSBmcm9tICdib2FyZC9scGQ3YTQweC9mbGFzaC5jJwoKKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxMSBKdW4gMjAwNDoKICBVcGRhdGUgZm9yIFBQQ2hhbWVsZW9uIGJvYXJkOgogIC0gc3VwcG9ydCBmb3IgU3lzQ2xrIEAgMjVNSHoKICAtIHN1cHBvcnQgZm9yIFNpbGljb24gTW90aW9uIFNNNzEyIFZHQSBjb250cm9sbGVyCiAgLSBzb21lIGNsZWFuIHVwcwoKKiBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEp1biAyMDA0OgogIC0gZml4IHByb2JsZW1zIHdpdGggZXhhbXBsZXMvc3R1YnMuYyBmb3IgR0NDID49IDMuNAogIC0gZml4IHByb2JsZW1zIHdpdGggZ2QgaW5pdGlhbGl6YXRpb24KCiogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMTcgTWF5IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0M0NTEwQiBDUFUgKEFSTTd0ZG1pIGJhc2VkIFNvQykKICAtIEFkZCBzdXBwb3J0IGZvciBFU1BELUluYy4gRVZCNDUxMCBCb2FyZAoKKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMTEgTWF5IDIwMDQ6CiAgRml4IGZvciBNUEM4MjQ1IC0gcmVhZGluZyBQUEMgTWVtb3J5IGZyb20gYW5vdGhlciBkZXZpY2Ugd2l0aCB0aGUKICBQUEMgYXMgUENJIHRhcmdldCBkZXZpY2UgY29ycnVwdHMgZGF0YSBkdWUgdG8gaW50ZXJlbmFsIGhhcmR3YXJlCiAgYnVmZmVyaW5nLgoKKiBGaXggImNscyIgY29tbWFuZCB3aGVuIHVzZWQgd2l0aCBzcGxhc2ggc2NyZWVuCgoqIEluY3JlYXNlIE5GUyBkb3dubG9hZCB0aW1lb3V0IChub3cgMSBtaW4gLSAxMCBzZWMgaXMgdG8gc2hvcnQgZm9yIGEKICBzbG93IGRvd25sb2FkIG9mIGEgYmlnIGltYWdlKQoKKiBBZGQgImNscyIgZnVuY3Rpb24gdG8gTVBDODIzIExDRCBkcml2ZXIgc28gd2UgY2FuIHJlaW5pdGlhbGl6ZSB0aGUKICBkaXNwbGF5IGV2ZW4gYWZ0ZXIgc2hvd2luZyBhIGJpdG1hcAoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDA0IEp1biAyMDA0OgogIC0gRERSIFJhbSBzdXBwb3J0IGZvciBQTTUyMCAoTVBDNTIwMCkKICAtIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBmbGFzaCB0eXBlcyAoUE01MjApCiAgLSBVU0IgLyBJREUgLyBDRi1DYXJkIC8gRGlza09uQ2hpcCBzdXBwb3J0IGZvciBQTTUyMAogIC0gOCBiaXQgYm9vdCByb20gc3VwcG9ydCBmb3IgUE01MjAvQ0U1MjAKICAtIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIE1pY3JvU3lzIENQQzQ1IGJvYXJkIChNUEM4MjQ1KQogIC0gSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgQ1BDNDUKICAtIHN1cHBvcnQgb2YgbmV3IGZsYXNoIHR5cGUgKDI4RjE2MEMzVCkgZm9yIENQQzQ1CgoqIEZpeCBmbGFzaCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBMaW51eCBmb3IgUFBDaGFtZWxlb24gYm9hcmQKCiogUmVtb3ZlIGV0aF9pbml0KCkgZnJvbSBsaWJfYXJtL2JvYXJkLmM7IGl0J3MgZG9uZSBpbiBuZXQubmV0LmMuCgoqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTAgSnVuIDIwMDQ6CiAgZml4IHN1cHBvcnQgZm9yIExvZ2ljIFNESy1MSDdBNDA0IGJvYXJkIGFuZCBjbGVhbiB1cCB0aGUKICBMSDdBNDA0IHJlZ2lzdGVyIG1hY3Jvcy4KCiogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAxMCBKdW4gMjAwNDoKICBNb2RpZnkgY29kZSB0byBzZWxlY3QgY29ycmVjdCBzZXJpYWwgY2xvY2sgb24gU2FuZHBvaW50ODI0NQoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEwIEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBLMyBzdHJhdGEgZmxhc2guCgoqIFBhdGNoIGJ5IFRob21hcyBCcmFuZCwgMTAgSnVuIDIwMDQ6CiAgRml4ICJsb2FkcyIgY29tbWFuZCBvbiBESzFTMTAgYm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIDhNQiBmbGFzaCBTSU1NIGFuZCBKRkZTMiBmaWxlIHN5c3RlbSBvbgogIE1vdG9yb2xhIEZBRFMgYm9hcmQgYW5kIGl0cyBkZXJpdmF0aXZlcyAoTVBDODZ4QURTLCBNUEM4ODVBRFMpLgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUmTWljcm8gQWRkZXI4N3ggYW5kIHRoZSBvbGRlciBBZGRlcklJIGJvYXJkLgoKKiBQYXRjaCBieSBNaW5nLUxlbiBXdSwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBwb3J0IGZvciBNQzkzMjggKERhcmdvbmJhbGwpIENQVSBhbmQgTW90b3JvbGEgTVgxQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAwOSBKdW4gMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCiAgLSBVcGRhdGUgRkxBU0ggZHJpdmVyIGZvciA0KkFNMjlETDMyM0RCOTBWSQogIC0gQWRkIG9wdGlvbiBjb25maWd1cmF0aW9uIG9mIENGR19FTlZfSVNfSU5fTlZSQU0gb24gUlBYbGl0ZV9EVyBib2FyZAoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwOCBKdW5lIDIwMDQ6CiAgLSBNYWtlIE1QQzUyMDAgYm9hcmRzIGV2YWx1YXRlIHRoZSBTVlIgdG8gcHJpbnQgcHJvY2Vzc29yIG5hbWUgYW5kCiAgICB2ZXJzaW9uIGluIGNoZWNrY3B1KCkgKGNwdS9tcGM1eHh4L2NwdS5jKS4KCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbG9lbSwgMDYgTWF5IDIwMDQ6CiAgRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGNyYW1mcyBjb2RlCgoqIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDA0IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBNQVg2OTAwIFJUQwoKKiBQYXRjaGVzIGJ5IExhZGlzbGF2IE1pY2hsLCAwMyBKdW4gMjAwNDoKICAtIGZpeCBjZmlfZmxhc2guYyBvbiBMRSBzeXN0ZW1zCiAgLSBsZXQgJ21ha2UgbXJwcm9wZXInIGRlbGV0ZSB1LWJvb3QuaW1nIGFzIHdlbGwKICAtIHR1cm4gcHJpbnRmIGludG8gZGVidWcgaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDI4IE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBFeHlzIFhTRW5naW5lIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE1heSAyMDA0OgogIEZpeCBhIE1QQzV4eHggSTJDIHRpbWluZyBpc3N1ZSBpbiBpMmNfcHJvYmUoKS4KCiogUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjcgTWF5IDIwMDQ6CiAgRml4IGJvYXJkX2luaXRfZigpIGZvciBkYmF1MXgwMCBib2FyZC4KCiogUGF0Y2ggYnkgSW1yZSBEZWFrLCAyNiBNYXkgMjAwNDoKICBPbiBPTUFQMTYxMCBwbGF0Zm9ybXMgY2hlY2sgaWYgYm9vdGluZyBmcm9tIFJBTShDUzApIG9yIGZsYXNoKENTMykuCiAgU2V0IGZsYXNoIGJhc2UgYWNjb3JkaW5nbHksIGFuZCBkZWNpZGUgd2hldGhlciB0byBkbyBvciBza2lwIGJvYXJkCiAgc3BlY2lmaWMgc2V0dXAgc3RlcHMuCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNiBNYXkgMjAwNDoKICBBZGQgbWlzc2luZyBkZWZpbmUgaW4gaW5jbHVkZS9hc20tbTY4ay9nbG9iYWxfZGF0YS5oCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNSBNYXkgMjAwNDoKICBBZGQgbWlzc2luZyBmdW5jdGlvbnMgZ2V0X3RpY2tzKCkgYW5kIGdldF90YmNsaygpIGluIGxpYl9tNjhrL3RpbWUuYwoKKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDI0IE1heSAyMDA0OgogIGZpeCBTRFJBTSBpbml0aWFsaXphdGlvbiBmb3IgTFBEN0E0MDAgYm9hcmQuCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDIwIE1heSAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCBpbiBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBJbnRlcnBoYXNlIGlTUEFOIGJvYXJkcy4KCiogUGF0Y2hlcyBieSBQYXVsIFJ1aGxhbmQsIDE3IE1heSAyMDA0OgogIC0gQWRkIEkvTyBmdW5jdGlvbnMgdG8gdGhlIHNtYzkxMTExIGV0aGVybmV0IGRyaXZlciB0byBzdXBwb3J0IHRoZQogICAgTG9naWMgTFBEN0E0MHggYm9hcmRzLgogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBMb2dpYyBab29tIExIN0E0MHggYmFzZWQgU0RLIGJvYXJkKHMpLAogICAgc3BlY2lmaWNhbGx5IHRoZSBMUEQ3QTQwMC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IE1heSAyMDA0OgogIC0gY2FsbCBNQUMgYWRkcmVzcyByZWFkaW5nIGNvZGUgYWxzbyBmb3IgU01TQzkxQzExMTsKICAtIG1ha2UgU01TQzkxQzExMSB0aW1lb3V0IGNvbmZpZ3VyYWJsZSwgcmVtb3ZlIGR1cGxpY2F0ZSBjb2RlCiAgLSBmaXggZ2V0X3RpbWVyKCkgZm9yIFBYQQogIC0gdXBkYXRlIGRvYy9SRUFETUUuSkZGUzIKICAtIHVzZSAiYm9vdGZpbGUiIGVudiB2YXJpYWJsZSBhbHNvIGZvciBqZmZzMgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjQ3MiBib2FyZCAoOE1CIEZsYXNoIFJldikKCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTQgTWF5IDIwMDQ6CiAgLSBmbGFzaC5oOiBtb3JlIGZsYXNoIHR5cGVzIGFkZGVkCiAgLSBpbW1hcF84MjYwLmg6IHNvbWUgYml0cyBhZGRlZCAodXNlZnVsIGZvciBSTUlJKQogIC0gY21kX2NvbmluZm8uYzogdHlwbyBjb3JyZWN0ZWQsIHByaW50ZiAtPiBwdXRzCiAgLSByZWR1Y2VkIHNpemUgYnkgcmVwbGFjaW5nIHNwYWNlcyB3aXRoIHRhYgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEzIE1heSAyMDA0OgogIEFkZCAnaW1nZXh0cmFjdCcgY29tbWFuZDogZXh0cmFjdCBvbmUgcGFydCBvZiBhIG11bHRpIGZpbGUgaW1hZ2UuCgoqIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAxMSBNYXkgMjAwNDoKICBEeW5hbWljYWxseSBoYW5kbGUgUkVWMSBhbmQgUkVWMiBNUEM4NXh4IHBhcnRzLgogICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpLgogIE5ldyBjb25zaXN0ZW50IG1lbW9yeSBtYXAgYW5kIExvY2FsIEFjY2VzcyBXaW5kb3cgYWNyb3NzIE1QQzg1eHggbGluZS4KICBOZXcgQ0NTUkJBUiBhdCAweEUwMDBfMDAwMCBub3cuCiAgQWRkIFJBUElEIEkvTyBtZW1vcnkgbWFwLgogIE5ldyBtZW1vcnkgbWFwIGluIFJFQURNRS5NUEM4NXh4YWRzCiAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCiAgQmV0dGVyIGJvYXJkIGFuZCBDUFUgaWRlbnRpZmljYXRpb24gb24gTVBDODV4eCBib2FyZHMgYXQgYm9vdC4KICAgIChKb24gTG9lbGlnZXIsIDEwLU1heS0yMDA0KQogIFNEUkFNIGNsb2NrIGNvbnRyb2wgZml4ZXMgb24gTVBDODU0MEFEUyAmIE1QQzg1NjAgYm9hcmRzLgogIFNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBNUEM4NTQwQURTICYgTVBDODU2MEFEUyBjbGVhbmVkIHVwLgogICAgKEppbSBSb2JlcnRzb24sIDEwLU1heS0yMDA0KQogIFJld3JpdGUgb2YgdGhlIE1QQzg1eHggVGhyZWUgU3BlZWQgRXRoZXJuZXQgQ29udHJvbGxlciAoVFNFQykgZHJpdmVyLgogIFN1cHBvcnRzIG11bHRpcGxlIFBIWXMuCiAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKICBTb21lIFJFQURNRS5NUEM4NXh4YWRzIHVwZGF0ZXMuCiAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCiAgQ29weXJpZ2h0IHVwZGF0ZXMgZm9yICJGcmVlc2NhbGUiCiAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTEgTWF5IDIwMDQ6CiAgQWRkIGZsYXNoIHN1cHBvcnQgZm9yIFNUIE0yOVcwNDBCCiAgUmVkdWNlIEpTRSBzcGVjaWZpYyBmbGFzaC5jIHRvIHJlbW92ZSBkZWFkIGNvZGUuCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAwNCBNYXkgMjAwNDoKICBGaXggY2xlYXJfYnNzIGNvZGUgZm9yIEFSTSBzeXN0ZW1zIChhbGwgZXhjZXB0IHMzYzQ0YjAgd2hpY2gKICBkb2Vzbid0IGNsZWFyIEJTUyBhdCBhbGw/KQoKKiBGaXggInBpbmciIHByb2JsZW0gb24gSU5DLUlQIGJvYXJkLiBTdHJhbmdlIHByb2JsZW06CiAgU29tZXRpbWVzIHRoZSBzdG9yZSB3b3JkIGluc3RydWN0aW9uIGhhbmdzIHdoaWxlIHdyaXRpbmcgdG8gb25lIG9mCiAgdGhlIFN3aXRjaCByZWdpc3RlcnMsIGJ1dCBvbmx5IGlmIHRoZSBuZXh0IGluc3RydWN0aW9uIGlzIDE2LWJ5dGUKICBhbGlnbmVkLiBNb3ZpbmcgdGhlIGluc3RydWN0aW9uIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzb21laG93CiAgbWFrZXMgdGhlIHByb2JsZW0gZ28gYXdheS4KCiogUGF0Y2ggYnkgUmlzaGkgQmhhdHRhY2hhcnlhLCAwOCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDU5MTIgT1NLIEJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nIE1heSwgMDcgTWF5IDIwMDQ6CiAgRml4IHR5cG8gb2YgVVBNIHRhYmxlIGZvciBybXUgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA1IE1heSAyMDA0OgogIC0gSW50cmFjb20gYm9hcmQgdXBkYXRlLgogIC0gQWRkIENvZGVjIFBPU1QuCgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgc2Vjb25kIEV0aGVybmV0IGludGVyZmFjZSBmb3IgdGhlICdQUENoYW1lbGVvbicKICBib2FyZC4KCiogUGF0Y2ggYnkgRGF2ZSBQZXZlcmxleSwgMzAgQXByIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE9NQVA3MzAgUGVyc2V1czIgRGV2ZWxvcG1lbnQgYm9hcmQKCiogUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAyOSBBcHIgMjAwNDoKICBGaXggZmxhc2ggY2hpcC1zZWxlY3QgKE9SMCkgb3B0aW9uIHJlZ2lzdGVyIHNldHRpbmcgb24gRkFEUyBib2FyZHMuCgoqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CiAgUmVwb3J0IE1JSSBuZXR3b3JrIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZyBwcm9wZXJseSB3aGVuCiAgYXV0by1uZWdvdGlhdGUgaXMgbm90IGVuYWJsZWQuCgoqIFBhdGNoIGJ5IEphcnJldHQgUmVkZCwgMjkgQXByIDIwMDQ6CiAgRml4IGhhbmcgb24gcmVzZXQgb24gT2NvdGVhIGJvYXJkIGR1ZSB0byBmbGFzaCBpbiB3cm9uZyBtb2RlLgoKKiBQYXRjaCBieSBEYXZlIFBldmVybGV5LCAyOSBBcHIgMjAwNDoKICBhZGQgTUFDIGFkZHJlc3MgZGV0ZWN0aW9uIHRvIHNtYzkxMTExIGRyaXZlcgoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI4IEFwciAyMDA0OgogIGZpeCB0eXBvIGluIGxpYl9hcm0vYm9hcmQuYwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAyMCBBcHIgMjAwNDoKICAtIFJFQURNRSB1cGRhdGU6IGFkZCBDT05GSUdfQ1NCMjcyIGFuZCBjc2IyNzJfY29uZmlnCiAgLSBhZGQgZGVzY3JpcHRpb25zIGZvciBzb21lIE1JSS9QSFkgb3B0aW9ucywgQ09ORklHX0kyQ0ZBU1QsIGFuZAogICAgaTJjZmFzdCBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxOSBBcHIgMjAwNDoKICAtIFJlbmFtZSBEVUVUX0FEUyB0byBNUEM4ODVBRFMKICAtIFJlbmFtZSBDT05GSUdfRFVFVCB0byBDT05GSUdfTVBDODg1X0ZBTUlMWQogIC0gUmVuYW1lIENPTkZJR184NjZfZXRfYWwgdG8gQ09ORklHX01QQzg2Nl9GQU1JTFkKICAtIENsZWFuIHVwIEZBRFMgZmFtaWx5IHBvcnQgdG8gdXNlIHRoZSBuZXcgZGVmaW5lcwoKKiBGaXggUENJIHN1cHBvcnQgb24gQ1BDNDUgYm9hcmQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNSBBcHIgMjAwNDoKICBBZGQgTmlvcyBHREIvSlRBRyBDb25zb2xlIHN1cHBvcnQ6CiAgLSBBZGQgc3R1YnMgdG8gc3VwcG9ydCBnZGIgdmlhIEpUQUcuCiAgLSBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIEpUQUcuCiAgLSBNaW5vciBjbGVhbnVwLgoKKiBBZGQgc3VwcG9ydCBmb3IgQ0FUY2VudGVyIGJvYXJkIChiYXNlZCBvbiBQUENoYW1lbGVvbiBNRSBtb2R1bGUpCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDEyIE1heSAyMDA0OgogIFVzaW5nIGV4dGVybmFsIHdhdGNoZG9nIGZvciBLVVA0IGJvYXJkcyBpbiBtcGM4eHgvY3B1LmM7CiAgbG9hZF9zZXJudW1fZXRoYWRkcigpIGZvciBLVVA0IGJvYXJkcyBpbiBsaWJfcHBjL2JvYXJkLmM7CiAgdmFyaW91cyBjaGFuZ2VzIHRvIEtVUDQgYm9hcmQgc3BlY2lmaWMgZmlsZXMKCiogRml4IG1pbm9yIG5ldHdvcmsgcHJvYmxlbSBvbiBNUEM1MjAwOiBuZWVkIHNvbWUgZGVsYXkgYmV0d2VlbgogIHJlc2V0dGluZyB0aGUgUEhZIGFuZCBzZW5kaW5nIHRoZSBmaXJzdCBwYWNrZXQuIEltcGxlbWVudGVkIGluIGEKICAibmF0dXJhbCIgd2F5IGJ5IGludm9raW5nIHRoZSBQSFkgcmVzZXQgYW5kIGluaXRpYWxpemF0aW9uIGNvZGUKICBvbmx5IG9uY2UgYWZ0ZXIgcG93ZXIgb24gdnMuIGVhY2ggdGltZSB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuCgoqIEFkZCBzb21lIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbG93LXNwZWVkIGRldmljZXMgdG8gU0w4MTEgVVNCIGNvbnRyb2xsZXIKICAoYXQgbGVhc3QgInVzYiByZXNldCIgbm93IHBhc3NlcyBzdWNjZXNzZnVsbHkgYW5kICJ1c2IgaW5mbyIgZGlzcGxheXMKICBjb3JyZWN0IGluZm9ybWF0aW9uKQoKKiBDaGFuZ2UgaW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgbmV0d29yayBpbnRlcmZhY2VzOiBpbml0aWFsaXplCiAgb24tY2hpcCBpbnRlcmZhY2VzIGJlZm9yZSBleHRlcm5hbCBjYXJkcy4KCiogRml4IG1lbW9yeSBsZWFrIGluIHRoZSBOQU5ELXNwZWNpZmljIEpGRlMyIGNvZGUKCiogRml4IFNMODExIFVTQiBjb250cm9sbGVyIHdoZW4gYXR0YWNoZWQgdG8gYSBVU0IgaHViCgoqIEZpeCBjb25maWcgb3B0aW9uIHNwZWxsaW5nIGluIFBNNTIwIGNvbmZpZyBmaWxlCgoqIEZpeCBQSFkgZGlzY292ZXJ5IHByb2JsZW0gaW4gY3B1L21wYzh4eC9mZWMuYyAoaW50cm9kdWNlZCBieQogIHBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0KQoKKiBGaXggbWlub3IgTkFORCBKRkZTMiByZWxhdGVkIGlzc3VlCgoqIEZpeGVzIGZvciBTTDgxMSBVU0IgY29udHJvbGxlcjoKICAtIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciBicm9rZW4gbWVtb3J5IHN0aWNrCiAgLSBpbXByb3ZlIGVycm9yIGhhbmRsaW5nCgoqIEluY3JlYXNlIHBhY2tldCBzZW5kIHRpbWVvdXQgdG8gMSBtcyBpbiBjcHUvbXBjOHh4L3NjYy5jIHRvIGJldHRlcgogIGNvcGUgd2l0aCBjb25nZXN0ZWQgbmV0d29ya3MuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMyBBcHIgMjAwNDoKICBGaXggVlNDL0NJUyA4MjAxIHBoeSBkZXNjcmFtYmxlciBpbnRlcm9wZXJhYmlsaXR5IHRpbWluZyBkdWUgdG8KICBlcnJhdGEgZnJvbSBWaXRlc3NlIFNlbWljb25kdWN0b3IuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyMiBBcHIgMjAwNDoKICBGaXggZXRoZXJuZXQgY29uZmlndXJhdGlvbiBmb3IgInZlcnNhdGlsZSIgYm9hcmQKCiogUGF0Y2ggYnkgS3NoaXRpaiBHdXB0YSwgMjEgQXByIDIwMDQ6CiAgUmVtb3ZlIGJ1c3kgbG9vcCBhbmQgdXNlIE1QVSB0aW1lciBmciB1c2xlZXAoKSBvbiBPTUFQMTUxMC8xNjEwIGJvYXJkcwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKICBGaXggYSBidWcgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXI6CiAgVGhlIE1JSSBpbnRlcmZhY2UgaXMgbm93IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIFBIWS4KCiogUGF0Y2ggYnkgSm9obiBLZXJsLCAxOSBBcHIgMjAwNDoKICBVc2UgVS1ib290J3MgbWlpcGh5LmggZm9yIFBIWSByZWdpc3RlciBuYW1lcywgcmF0aGVyIHRoYW4KICBpbnRyb2R1Y2luZyBhIG5ldyBoZWFkZXIgZmlsZS4KCiogVXBkYXRlIHBjaV9pZHMuaCBmcm9tIGxpbnV4LTIuNC4yNgoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxOSBBcHIgMjAwNDoKICBGaXggcHJvYmxlbSBjYXVzZSBieSBWTEFOIGZ1bmN0aW9uIG9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlCiAgd2l0aG91dCBWTEFOIGVudmlyb25tZW50CgoqIENsZWFuIHVwIHRoZSBUUU04eHhfWVlNSHogY29uZmlndXJhdGlvbnM7IGFsbG93IHRvIHVzZSB0aGUgc2FtZQogIGJpbmFyeSBpbWFnZSBmb3IgYWxsIGNsb2NrIGZyZXF1ZW5jaWVzLiBJbXBsZW1lbnQgcnVuLXRpbWUKICBvcHRpbWl6YXRpb24gb2YgZmxhc2ggYWNjZXNzIHRpbWluZyBiYXNlZCBvbiB0aGUgYWN0dWFsIGJ1cwogIGZyZXF1ZW5jeS4KCiogTW9kaWZ5IEtVUDRYIGJvYXJkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIFNMODExIGRyaXZlciBmb3IgVVNCIG1lbW9yeQogIHN0aWNrcyAoaW5jbHVkaW5nIEZBVCAvIFZGQVQgZmlsZXN5c3RlbSBzdXBwb3J0KQoKKiBBZGQgU0w4MTEgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIgZm9yIFVTQgoKKiBBZGQgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyBkZXNyaXB0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTkgQXByIDIwMDQ6CiAgQWxsb3cgdG8gdXNlIHNoZWxsIHN0eWxlIHN5bnRheCAoaS4gZS4gJHt2YXJ9ICkgd2l0aCBzdGFuZGFyZCBwYXJzZXIuCiAgTWlub3IgcGF0Y2hlcyBmb3IgSW50cmFjb20gYm9hcmRzLgoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMTkgQXByIDIwMDQ6CiAgY2xlYW51cCBzdXBwb3J0IGZvciBDRi9JREUgb24gUENNQ0lBIGZvciBQWEEyNVgKCiogVGVtcG9yYXJpbHkgZGlzYWJsZWQgSm9obiBLZXJsJ3MgZXh0ZW5kZWQgTUlJIGNvbW1hbmQgY29kZSBiZWNhdXNlCiAgIm1paXZhbHMuaCIgaXMgbWlzc2luZwoKKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDEzIEFwciAyMDA0OgogIC0gUmVtb3ZlIENTMCBjaGlwIHNlbGVjdCB0aW1pbmcgc2V0dGluZyBmcm9tIGNwdS9tcGM1eHh4L3N0YXJ0LlMKICAtIEFkZCBzeW5jIGluc3RydWN0aW9ucyB0byBJY2VDdWJlIFNEUkFNIGluaXQgY29kZQogIC0gTW92ZSBTRFJBTSBjaGlwIGNvbnN0YW50cyBpbnRvIHNlcGVyYXRlIGluY2x1ZGUgZmlsZXMKICAtIFVuaWZ5IEREUiBhbmQgU0RSIGluaXRpYWxpemF0aW9uIGNvZGUKICAtIFVuaWZ5IGFsbCBJY2VDdWJlIChMaXRlNXh4eCkgdGFyZ2V0IG5hbWVzCgoqIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTYgQXByIDIwMDQ6CiAgRW5hYmxlIHJhbmdlcyBpbiBtaWkgY29tbWFuZCwgZS5nLiBtaWkgcmVhZCAwLTFmIDAgb3IKICBtaWkgcmVhZCA0LTcgMTgtMWEuICBBbHNvIGFkZCBtaWkgZHVtcCBzdWJjb21tYW5kIGZvcgogIHByZXR0eS1wcmludGluZyBzdGFuZGFyZCByZWdzIDAtNS4KCiogUGF0Y2ggYnkgIFN0ZXBoZW4gV2lsbGlhbXMsIDE2IEFwcmlsIDIwMDQ6CiAgZml4IHR5cG8gaW4gSlNFLmg7IHVwZGF0ZSBNQUlOVEFJTkVSUwoKKiBQYXRjaCBieSBNYXR0aGV3IFMuIE1jQ2xpbnRvY2ssIDE0IEFwciAyMDA0OgogIGZpeCBpbml0ZHJhbSBmdW5jdGlvbiBmb3IgdXR4ODI0NSBib2FyZAoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMTQgQXByIDIwMDQ6CiAgdXNlIEFUQUdfSU5JVFJEMiBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgQVRBR19JTklUUkQgdGFnCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxOCBBcHIgMjAwNDoKICBwcm92aWRlIHRoZSBJREUgUmVzZXQgRnVuY3Rpb24gZm9yIEVNSyA1MjAwIGJvYXJkcwoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxMiBBcHIgMjAwNDoKICBmaXggcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3tieXRlLHdvcmR9X3ZpYV9kd29yZCBwcm9ibGVtcwoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDEyIEFwciAyMDA0OgogIFVwZGF0ZSBtYXggUkFNIHNpemUgZm9yIGRlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOCBBcHIgMjAwNDoKICBBZGQgVExCIGVudHJ5IGZvciBzZWNvbmQgRElNTSBzbG90IG9uIG9jb3RlYQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBBcHIgMjAwNDoKICBhZGQgUlRMODE2OSBuZXR3b3JrIGRyaXZlcgoKKiBQYXRjaCBieSBEYW4gTWFsZWssIDA3IEFwciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIFJQQy9TVHggR1AzLCBNb3Rvcm9sYSA4NTYwIGJvYXJkCiAgLSBVcGRhdGUgODV4eCBUU0VDIGRyaXZlciBzbyBpdCBzZWFyY2hlcyBNSUkgZm9yIGZpcnN0IGF2YWlsYWJsZSBQSFkKICAgIGFuZCB1c2VzIHRoYXQgb25lLgogIC0gQWRkIGZ1bmN0aW9ucyB0byBzdXBwb3J0IGNvbnNvbGUgTUlJIGNvbW1hbmRzLgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwNyBBcHIgMjAwNDoKICBNb3ZlIGluaXRpYWxpemF0aW9uIG9mIGJpX2lpY19mYXN0W10KICBmcm9tIGJvYXJkX2luaXRfZigpIHRvIGJvYXJkX2luaXRfcigpCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgogIENsZWFudXAgbWljcm9ibGF6ZSBwb3J0CgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgQXByIDIwMDQ6CiAgQWRkIGF1dG8gU0RSQU0gbW9kdWxlIGRldGVjdGlvbiBmb3IgRGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAwNiBBcHIgMjAwNDoKICAtIEZpeCBzb21lIFBDSSBwcm9ibGVtcyBvbiB0aGUgTVBDODI2NkFEUyBib2FyZAogIC0gRml4IHRoZSBsb2NhdGlvbiBvZiBzb21lIFBDSSBlbnRyaWVzIGluIHRoZSBpbW1hcCBzdHJ1Y3R1cmUKCiogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMDcgQXByIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgbWljcm9ibGF6ZSBwcm9jZXNzb3JzCiAgLSBhZGQgc3VwcG9ydCBmb3IgQXRtYXJrVGVjaG5vICJzdXpha3UiIGJvYXJkCgoqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50IGluIGZsYXNoCgoqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgSkZGUzIgTkFORCBzdXBwb3J0LgoKKiBBZGRlZCBzdXBwb3J0IGZvciBKRkZTMiBmaWxlc3lzdGVtIChyZWFkLW9ubHkpIG9uIHRvcCBvZiBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNiBBcHIgMjAwNDoKICBMQkE0OCBmaXhlcwoKKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBBcHIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBhIG5ldyB2ZXJzaW9uIG9mIGFuIEludHJhY29tIGJvYXJkIGFuZCBmaXgKICAgIHZhcmlvdXMgb3RoZXIgdGhpbmdzIG9uIG90aGVycy4KICAtIGFkZCB2ZXJpZnkgc3VwcG9ydCB0byB0aGUgY3JjMzIgY29tbWFuZCAoZGVmaW5lCiAgICBDT05GSUdfQ1JDMzJfVkVSSUZZIHRvIGVuYWJsZSBpdCkKICAtIGZpeCBGRUMgZHJpdmVyIGZvciBNUEM4eHggc3lzdGVtczoKICAgIDEuIGZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyBmb3IgYm9hcmRzIHRoYXQgdXNlIGR5bmFtaWMKICAgICAgIGFsbG9jYXRpb24gb2YgRFBSQU0KICAgIDIuIHNodXQgZG93biBGRUMgYWZ0ZXIgbmV0d29yayB0cmFuc2ZlcnMKICAtIEhVU0ggcGFyc2VyIGZpeGVzOgogICAgMS4gQSBuZXcgdGVzdCBjb21tYW5kIHdhcyBhZGRlZC4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZgogICAgICAgdGhlIG9uZSBpbiB0aGUgYm91cm5lIHNoZWxsLgogICAgMi4gQSBuZXcgZXhpdCBjb21tYW5kIHdhcyBhZGRlZCB3aGljaCB0ZXJtaW5hdGVzIHRoZSBjdXJyZW50CiAgICAgICBleGVjdXRpbmcgc2NyaXB0LgogICAgMy4gRml4ZWQgaGFuZGluZyBvZiAkPyAoZXhpdCBjb2RlIG9mIGxhc3QgZXhlY3V0ZWQgY29tbWFuZCkKICAtIEZpeCBzb21lIGNvbXBpbGUgcHJvYmxlbXM7CiAgICBhZGQgIm9uY2UiIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBuZXRyZXRyeSB2YXJpYWJsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDAyIEFwciAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBBc3NhYmV0IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDAxIEFwciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBQaWN0dXJlIEVsZW1lbnRzIEpTRSBib2FyZAoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMDEgQXByIDIwMDQ6CiAgQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBQWEEgc3lzdGVtcy4KCiogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQ6CiAgLSBhZGQgYXV0by1jb21wbGV0ZSBzdXBwb3J0IHRvIHRoZSBVLUJvb3QgQ0xJCiAgLSBhZGQgc3VwcG9ydCBmb3IgTkVUVEEgYW5kIE5FVFBIT05FIGJvYXJkczsgZml4IE5FVFZJQSBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFcHNvbiAxNTZ4IHNlcmllcyBvZiBncmFwaGljYWwgZGlzcGxheXMKICAgIChUaGVzZSBkaXNwbGF5cyBhcmUgc2VyaWFsIGFuZCBub3Qgc3VpdGFibGUgZm9yIHVzaW5nIGEgbm9ybWFsCiAgICBmcmFtZWJ1ZmZlciBjb25zb2xlIG9uIHRoZW0pCiAgLSBhZGQgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIGluIG9yZGVyIHRvIFBPU1QgYW55IERTUHMgaW4gYSBib2FyZAogIC0gaW1wcm92ZSBhbmQgZml4IHZhcmlvdXMgdGhpbmdzIGluIHRoZSBNUEM4eHggRkVDIGRyaXZlcjoKICAgIDEuIFRoZSBuZXcgODd4IGFuZCA4OHggc2VyaWVzIG9mIHByb2Nlc3NvcnMgaGF2ZSB0d28gRkVDcywKICAgICAgIGFuZCB0aGUgbmV3IGRyaXZlciBzdXBwb3J0cyB0aGVtIGJvdGguCiAgICAyLiBBbm90aGVyIGNoYW5nZSBpbiB0aGUgODd4Lzg4eCBzZXJpZXMgaXMgc3VwcG9ydCBmb3IKICAgICAgIHRoZSBSTUlJIChSZWR1Y2VkIE1JSSkgaW50ZXJmYWNlLiBIb3dldmVyIG51bWVyb3VzCiAgICAgICBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIHNpbmNlIHRoZSBQSFlzCiAgICAgICBhcmUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGxpbmVzLiBUaGF0IG1lYW5zIHRoYXQKICAgICAgIHlvdSBoYXZlIHRvIGFkZHJlc3MgdGhlbSBjb3JyZWN0bHkgb3ZlciB0aGUgTUlJCiAgICAgICBpbnRlcmZhY2UuCiAgICAzLiBXZSBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBNSUkvUk1JSSBpbnRlcmZhY2UKICAgICAgIGNvbmZpZ3VyYXRpb24gdG8gd2hhdCB0aGUgUEhZIHJlcG9ydHMuCiAgLSBGaXggcHJvYmxlbSB3aGVuIHJlYWRpbmd0aGUgTUlJIHN0YXR1cyByZWdpc3Rlci4gRHVlIHRvIHRoZQogICAgaW50ZXJuYWwgZGVzaWduIG9mIG1hbnkgUEhZcyB5b3UgaGF2ZSB0byByZWFkIHRoZSByZWdpc3RlcgogICAgdHdpY2UuIFRoZSBwcm9ibGVtIGlzIG1vcmUgYXBwYXJlbnQgaW4gMTBNYml0IG1vZGUuCiAgLSBhZGQgbmV3IG1vZGUgIi5qZmZzMnMiIGZvciByZWFkaW5nIGZyb20gYSBOQU5EIGRldmljZTogaXQganVzdAogICAgc2tpcHMgb3ZlciBiYWQgYmxvY2tzLgogIC0gYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgVkxBTnMgKDgwMi4xcSksIGFuZCBDRFAgKENpc2NvCiAgICBEaXNjb3ZlcnkgUHJvdG9jb2wpCiAgLSBzb21lIG1pbm9yIHBhdGNoZXMgLyBjbGVhbnVwCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI4IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzIgZmFtaWx5IGluY2x1ZGluZyBNUEM4MjQ3LzgyNDgvODI3MS84MjcyCiAgLSBBZGQgc3VwcG9ydCBmb3IgTVBDODI3MkFEUyBldmFsdWF0aW9uIGJvYXJkIChhbm90aGVyIGZsYXZvdXIgb2YgTVBDODI2MEFEUykKICAtIENoYW5nZSBjb25maWd1cmF0aW9uIG1ldGhvZCBmb3IgTVBDODI2MEFEUyBmYW1pbHkKCiogYWRkIHN0YXJ0dXAgY29kZSB0byBjbGVhciB0aGUgQlNTIG9mIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIEZpeCBpZiAvIGVsaWYgaGFuZGxpbmcgYnVnIGluIEhVU0ggc2hlbGwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXM6IFJlbW92ZSBjb25maWcudG1wIGZpbGVzIG9ubHkgd2hlbgogIHVuY29uZmlndXJpbmcgdGhlIGJvYXJkCgoqIEFkYXB0IFJNVSBib2FyZCBmb3IgYmlnZ2VyIGZsYXNoIG1lbW9yeQoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMyBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgS1VQNFggQm9hcmQKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE1hciAyMDA0CiAgQWRkIFJlaXNlcmZzIHN1cHBvcnQKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjAgTWFyIDIwMDQKICAtIEFkZCBhdXRvLXJlbGVhc2UgZm9yIFNNU0MgTEFOOTFjMTExIGRyaXZlcgogIC0gQWRkIHNhdmUvcmVzdG9yZSBvZiBQVFIgYW5kIFBOUiByZWdzIGFzIHN1Z2dlc3RlZCBpbiBkYXRhc2hlZXQKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTkgTWFyY2ggMjAwNAogIEluY3JlYXNlIHNwZWVkIG9mIHNlY3RvciByZWFkcyBmcm9tIFN5c3RlbUFDRSwKICBzaG9ydGVuIHBvbGwgdGltZW91dCBhbmQgcmVtb3ZlIGEgdXNlbGVzcyByZXNldAoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxOSBNYXIgMjAwNDoKICBNYWtlIEdpZ0UgUEhZIDEwMDBNYnBzIFNwZWVkL0R1cGxleCBkZXRlY3Rpb24gY29uZGl0aW9uYWwKICAoQ09ORklHX1BIWV9HSUdFKQoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDE4IE1hciAyMDA0OgogIHByZXZlbnQgbWFjaGluZSBjaGVja3MgZHVyaW5nIGEgUENJIHNjYW4KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgRml4IHN0cmluZyBjbGVhbmluZyBpbiBJREUgaWRlbnRpZmljYXRpb24KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgLSBVbmlmeSB2aWRlbyBtb2RlIGhhbmRsaW5nIGZvciBDaGlwcyAmIFRlY2hub2xvZ2llcyA2OTAwMCBWaWRlbwogICAgY2hpcCBhbmQgU2lsaWNvbiBNb3Rpb24gU01JIDcxMi83MTAvODEwIFZpZGVvIGNoaXAKICAtIEFkZCBzZWxlY3Rpb24gb2YgdGhlIHZpZGVvIG91dHB1dCAoQ1JUIG9yIExDRCkgdmlhICd2aWRlb291dCcKICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUgU2lsaWNvbiBNb3Rpb24KICAtIFJFQURNRSB1cGRhdGUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgaW5jbHVkZS9jb21tb24uaCB0eXBvIGZpeAoKKiBQYXRjaGVzIGJ5IFRvbHVuYXkgT3JrdW4sIDE3IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIGJkLT5iaV9paWNfZmFzdFtdIGluaXRpYWxpemF0aW9uIHZpYSBlbnZpcm9ubWVudAogICAgdmFyaWFibGUgImkyY2Zhc3QiIChDT05GSUdfSTJDRkFTVCkKICAtIEFkZCAiaTJjZmFzdCIgdS1ib290IGVudmlyb25tZW50IHZhcmlhYmxlIHN1cHBvcnQgZm9yIGNzYjI3MgoKKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxNyBNYXIgMjAwNDoKICBJZ25vcmUgJ1wwJyBjaGFyYWN0ZXJzIGluIGNvbnNvbGUgaW5wdXQgZm9yIHVzZSB3aXRoIHRlbG5ldCBhbmQKICB0ZWxjbyBwYWRzLgoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDE3IE1hciAyMDA0OgogIHR5cG8gZml4IGZvciBzdHJzd2FiIHByb3RvdHlwZSAjaWZkZWYKCiogUGF0Y2hlcyBieSBUaG9tYXMgVmllaHdlZ2VyLCAxNiBNYXIgMjAwNDoKICAtIHNob3cgUENJIGNsb2NrIGZyZXF1ZW5jeSBvbiBNUEM4MjYwIHN5c3RlbXMKICAtIGFkZCBGQ0NfUFNNUl9STUlJIGZsYWcgZm9yIEhpUDcgcHJvY2Vzc29ycwogIC0gaW4gZG9famZmczJfZnNsb2FkKCksIHRha2UgbG9hZCBhZGRyZXNzIGZyb20gbG9hZF9hZGRyIGlmIG5vdCBzZXQKICAgIGV4cGxpY2l0LCB1cGRhdGUgbG9hZF9hZGRyIG90aGVyd2lzZQogIC0gcmVwbGFjZWQgcHJpbnRmIGJ5IHB1dGMvcHV0cyB3aGVuIG5vIGZvcm1hdHRpbmcgaXMgbmVlZGVkCiAgICAoc21hbGxlciBjb2RlIHNpemUsIGZhc3RlciBleGVjdXRpb24pCgoqIFBhdGNoIGJ5IFBoaWxsaXBwZSBSb2JpbiwgMTYgTWFyIDIwMDQ6CiAgYXZvaWQgZGVyZWZlcmVuY2luZyBOVUxMIHBvaW50ZXIgaW4gbGliX2FybS9hcm1saW51eC5jCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IE1hciAyMDA0OgogIEZpeCBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gZG9jdW1lbnRhdGlvbgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNSBNYXIgMjAwNDoKICBJbml0aWFsaXplIGJpX29wYmZyZXEgdG8gcmVhbCBPUEIgZnJlcXVlbmN5IHZpYSBnZXRfT1BCX2ZyZXEoKQoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBNYXIgMjAwNDoKICBVcGRhdGUgQ1JFRElUUyAmIE1BSU5UQUlORVJTIGZpbGVzIGZvciBQUEM0NDBHWCAmIE9jb3RlYSBwb3J0CgoqIEFkZCBzdGFydC11cCBkZWxheSB0byBtYWtlIHN1cmUgcG93ZXIgaGFzIHN0YWJpbGl6ZWQgYmVmb3JlCiAgYXR0ZW1wdGluZyB0byBzd2l0Y2ggb24gVVNCIG9uIFNYMSBib2FyZC4KCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxOCBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBYTTI1MCBib2FyZCAoUFhBMjU1KQogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODI4IGJvYXJkIChNUEM4MjgwKQogIC0gQWRkIHN1cHBvcnQgZm9yIDMyIE1CIEZsYXNoIG9uIFBNODI1LzgyNgogIC0gbmV3IFNEUkFNIHJlZnJlc2ggcmF0ZSBmb3IgUE04MjUvUE04MjYKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNNTIwIChNUEM1MjAwKQogIC0gcmVwbGFjZWQgUXVlcnkgYnkgSWRlbnRpZnkgY29tbWFuZCBpbiBDUFU4Ni9mbGFzaC5jCiAgICB0byBzdXBwb3J0IDI4RjE2MEYzQgoKKiBGaXggd3JhcCBhcm91bmQgcHJvYmxlbSB3aXRoIHVkZWxheSgpIG9uIEFSTTkyMFQKCiogQWRkIHN1cHBvcnQgZm9yIE1hY3Jvbml4IGZsYXNoIG9uIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTUgTWFyIDIwMDQ6CiAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBJREUgaWRlbnRpZmljYXRpb24KCiogRml4IHBvd2VyLW9mZiBvZiBMQ0QgZm9yIG91dC1vZi1iYW5kIHRlbXBlcmF0dXJlcyBvbiBMV01PTiBib2FyZAoKKiBSZW1vdmUgcmVkdW5kYW5kICNkZWZpbmUgaW4gSWNlQ3ViZS5oCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI3IEZlYiAyMDA0OgogIC0gQWRkaW5nIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBmb3IgQVQ5MVJNOTIwMAogIC0gTWFueSB3aGl0ZSBzcGFjZSBmaXhlcyBpbiBjcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMKCiogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKICBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCByZWxhdGVkIGNvZGUKCiogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAxMiBNYXIgMjAwNDoKICAtIEZpeCBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQgZm9yIDQ0MEdYCiAgLSBBZGQgR2lnYWJpdCBFdGhlcm5ldCBTdXBwb3J0IHRvIE1JSSBQSFkgdXRpbGl0aWVzCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTIgTWFyIDIwMDQ6CiAgRml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBCZXR0ZXIgc3VwcG9ydCBmb3IgeDgveDE2IGltcGxlbWVudGF0aW9ucwogIC0gQWRkZWQgZmFpbHVyZSBmb3IgQU1EIGNoaXBzIGF0dGVtcHRpbmcgdG8gdXNlIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCiAgLSBBZGRlZCBkZWZpbmVzIGZvciBBTUQgY29tbWFuZCBhbmQgYWRkcmVzcyBjb25zdGFudHMKCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBNYXIgMjAwNDoKICBGaXggZ2V0X2RlbnRmcm9tZGlyKCkgdG8gY29ycmVjdGx5IGhhbmRsZSBkZWxldGVkIGRlbnRyaWVzCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CiAgUmVtb3ZlIGhhcmQgY29kZWQgbmV0d29yayBzZXR0aW5ncyBpbiBUSSBPTUFQMTYxMCBIMgogIGRlZmF1bHQgYm9hcmQgY29uZmlnCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIEFEUyBHcmFwaGljc0NsaWVudCsgYm9hcmQuCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDExIE1hciAyMDA0OgogIC0gYWRkIGJpdG1hcCBjb21tYW5kIGFuZCBzcGxhc2ggc2NyZWVuIHN1cHBvcnQgaW4gY2ZiIGNvbnNvbGUKICAtIGFkZCBbb3B0aW9uYWxdIG9yaWdpbiBpbiB0aGUgYml0bWFwIGRpc3BsYXkgY29tbWFuZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMSBNYXIgMjAwNDoKICBGaXggb2NvdGVhIGJvYXJkIGVhcmx5IGluaXQgaW50ZXJydXB0IHNldHVwLgoKKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxMSBNYXIgMjAwNDoKICBSZW1vdmUgcmVkdW5kYW5kIGNvZGU7IGFkZCAgUENJLXNwZWNpZmljIGJpdHMgdG8gaW5jbHVkZS9tcGM4MjYwLmgKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAwOSBNYXIgMjAwNAogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBTU1YgQUROUC9FU0MxIChOaW9zIFNvZnRjb3JlKQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDkgTWFyIDIwMDQ6CiAgZml4IHJlY2VudCBidWlsZCBmYWlsdXJlIGZvciBTQTExMDAgdGFyZ2V0CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IE1hciAyMDA0OgogIFN1cHBvcnQgbmF0aXZlIGludGVycnVwdCBtb2RlIGZvciB0aGUgSUJNNDQwR1guCiAgUHJldmlvdXNseSBpdCB3YXMgcnVubmluZyBpbiA0NDBHUCBjb21wYXRpYmlsaXR5IG1vZGUuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAwOSBNYXIgMjAwNDoKICBBZGRlZCBBUk0gSW50ZWdyYXRvciBBUCwgQ1AgYW5kIFZlcnNhdGlsZSBQQjkyNkVKLVMgUmVmZXJlbmNlCiAgUGxhdGZvcm0gc3VwcG9ydC4KCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggTWFyIDIwMDQ6CiAgRG9uJ3Qgb3ZlcndyaXRlIHNlcnZlciBJUCBhZGRyZXNzIG9yIGJvb3QgZmlsZSBuYW1lCiAgd2hlbiB0aGUgYm9vdCBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgogIFJlbW92ZWQgY29tcGlsZSB0aW1lIHJlc3RyaWN0aW9uIG9uIENGR19JMkNfU1BFRUQgZm9yIERTMTMzOCBSVEMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKICBGaXggZWFybHkgYm9hcmQgaW5pdGlhbGl6YXRpb24gZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKCiogUGF0Y2ggYnkgRWQgT2tlcnNvbiwgMyBNYXIgMjAwNDoKICBmaXggQ0ZJIGZsYXNoIHdyaXRlcyBmb3IgbGl0dGxlIGVuZGlhbiBzeXN0ZW1zCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwMSBNYXIgMjAwNDoKICBnZW5lcmFsaXplIFVTQiBhbmQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAgd2l0aCBhY2NvcmRpbmcKICBjaGFuZ2VzIHRvIEljZUN1YmUuaCBhbmQgVE9QNTIwMC5oCiAgYWRkIEFtMjlMVjI1NiAyNTYgTUJpdCBGTEFTSCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkcwogIGFkZCBpbmZvIGFib3V0IFVTQiBhbmQgSURFIHRvIFJFQURNRQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA0IE1hciAyMDA0OgogIEZpeCBwcm9ibGVtcyB3aXRoIEdDQyAzLjMueCB3aGljaCBjaGFuZ2VkIGhhbmRsaW5nIG9mIGdsb2JhbAogIHZhcmlhYmxlcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gKG5vdyBpbiAuYnNzIGluc3RlYWQgb2YKICAuZGF0YSBhcyBiZWZvcmUpLgoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDAyIE1hciAyMDA0OgogIGFkZCBzdHJzd2FiKCkgdG8gZml4IElERSBMQkEgY2FwYWNpdHksIGZpcm13YXJlIGFuZCBtb2RlbCBudW1iZXJzCiAgb24gbGl0dGxlIGVuZGlhbiBtYWNoaW5lcwoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwMiBNYXIgMjAwNDoKICAtIFJlbW92ZSBnZXRfdGlja3MoKSBmcm9tIE5GUyBjb2RlCiAgLSBBZGQgdmVyaWZpY2F0aW9uIG9mIFJQQyB0cmFuc2FjdGlvbiBJRAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMiBNYXIgMjAwNDoKICBjbGVhbnVwIGZvciBJREUgYW5kIFVTQiBkcml2ZXJzIGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDAxIE1hciAyMDA0OgogIE9jb3RlYToKICAtIEFkZCBJQk0gUFBDNDQwR1ggUmVmIFBsYXRmb3JtIHN1cHBvcnQgKE9jb3RlYSkKICAgIE9yaWdpbmFsIGNvZGUgYnkgUGF1bCBSZXlub2xkcyA8UGF1bFJleW5vbGRzQGxoc29sdXRpb25zLmNvbT4KICAgIEFkYXB0ZWQgdG8gVS1Cb290IGFuZCA0NDBHWCBwb3J0CiAgNDQwZ3hfZW5ldC5jOgogIC0gQWRkIGdyYWNpb3VzIGhhbmRsaW5nIG9mIGFsbCBFdGhlcm5ldCBQaW4gU2VsZWN0aW9ucyBmb3IgNDQwR1gKICAtIEFkZCBSR01JSSBzZWxlY3Rpb24gZm9yIENpY2FkYSBDSVM4MjAxIEdpZ2FiaXQgUEhZCiAgcHBjNDQwLmg6CiAgLSBBZGQgbmVlZGVkIGJpdCBkZWZpbml0aW9ucwogIC0gRml4IGZvcm1hdHRpbmcKCiogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMSBNYXIgMjAwNDoKICBBZGQgUFBDNDQwR1ggcHJiZHYwIGRpdmlkZXIgdG8gZml4IG1lbW9yeSBjbG9jayBjYWxjdWxhdGlvbi4KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyNyBGZWIgMjAwNAogIC0gYXZvaWQgcHJvYmxlbXMgZm9yIHRhcmdldHMgd2l0aG91dCBORlMgZG93bmxvYWQgc3VwcG9ydAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjcgRmViIDIwMDQ6CiAgLSBBZGRlZCBMQkE0OCBzdXBwb3J0IChDT05GSUdfTEJBNDggJiBDRkdfNjRCSVRfTEJBKQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgcHJpbnRpbmcgaW4gdnNwcmludGYgKENGR182NEJJVF9WU1BSSU5URikKICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHN0cnRvdWwgKENGR182NEJJVF9TVFJUT1VMKQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNyBGZWIgMjAwNDoKICBGaXggcmFycGJvb3Q6IGFkZCBhdXRvbG9hZCBieSBORlMKCiogUGF0Y2ggYnkgRGFuIEVpc2VuaHV0LCAyNiBGZWIgMjAwNDoKICBmaXggZmxhc2hfd3JpdGUgcmV0dXJuIHZhbHVlIGluIHNhdmVlbnYKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMwogIGV4cGFuZCBjb25maWcubWsgdG8gYXZvaWQgdHJpZ3JhcGggd2FybmluZ3Mgb24gTklPUwoKKiBSZW5hbWUgIkJNUzIwMDMiIGJvYXJkIGludG8gIkhNSTEwIgoKKiBTWDEgcGF0Y2hlczogdXNlICJzZXJpYWwjIiBmb3IgVVNCIHNlcmlhbCAjOyB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50CiAgc3RvcmFnZTsgYXV0by1zZXQgY29uc29sZSBvbiBVU0IgcG9ydCAodXNpbmcgcHJlYm9vdCBjb21tYW5kKQoKKiBBZGQgc3VwcG9ydCBmb3IgU1gxIG1vYmlsZSBwaG9uZTsgYWRkIHN1cHBvcnQgZm9yIFVTQi1iYXNlZCBjb25zb2xlCiAgKGVuYWJsZSB3aXRoICJzZXRlbnYgc3Rkb3V0IHVzYnR0eTsgc2V0ZW52IHN0ZGluIHVzYnR0eSIpCgoqIEZpeCBMT1dCT09UIGNvbmZpZ3VyYXRpb24gZm9yIE1QQzUyMDAgd2l0aCBERFIgbWVtb3J5CgoqIEZpeCBTRFJBTSB0aW1pbmdzIGZvciBMSVRFNTIwMCAvIEljZUN1YmUgYm9hcmQKCiogSGFuZGxlIEF1dGktTURJWCAvIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBJTkNBLUlQCgoqIEZpeCBVU0IgcHJvYmxlbXMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgMCBieXRlcwoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyNiBGZWIgMjAwNDoKICBGaXggYnJva2VuIGNvbXBpbGUgZm9yIFhQRURJVEUxSyB0YXJnZXQuCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjYgRmViIDIwMDQ6CiAgQnVnIGZpeCBmb3IgTkZTIGNvZGUgb24gTklPUyB0YXJnZXRzCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDI2IEZlYiAyMDA0OgogIEJyZWFrIHVwIFN5c3RlbUFDRSByZWFkcyBvZiBsYXJnZSBibG9jayBjb3VudHMKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjYgRmViIDIwMDQKICBhZGQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjYgRmViIDIwMDQ6CiAgYWRkIGF1dG9sb2FkIHZpYSBORlMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcwogIFVzZSBvZiBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gaW4gYm9hcmQuYyBjb25zaXN0ZW50IHdpdGggdXNlcwogIGVsc2V3aGVyZSBpbiB0aGUgc291cmNlLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKICAtIFRpbWVvdXRzIGluIEZQR0EgY29kZSBzaG91bGQgYmUgYmFzZWQgb24gQ0ZHX0haCiAgLSBNaW5vciBjbGVhbnVwIGluIGNvZGUgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKICBDaGFuZ2VkICJEaXJlY3RvcnkgSGllcmFyY2h5IiBzZWN0aW9uIGluIFJFQURNRQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNSBGZWIgMjAwNDoKICBSZWR1Y2UgY29weSBjb3VudCBpbiBuZnNfcmVhZF9yZXBseSgpIG9mIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAyNCBGZWIgMjAwNDoKICBOUzk3NTAgRGV2Qm9hcmQgYWRkZWQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgRmViIDIwMDQKICBhZGQgVVNCIHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6CiAgLSBmaXggTUlJIGNvbW1hbmRzIHRvIHVzZSB2YWx1ZXMgZnJvbSBsYXN0IGNvbW1hbmQKCiogUGF0Y2ggYnkgVG9yc3RlbiBEZW1rZSwgMjQgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBlWGFsaW9uIHBsYXRmb3JtIChTUFNXLTgyNDAsIEYtMzAsIEYtMzAwKQoKKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMTkgRmViIDIwMDQ6CiAgRml4ZXMgZm9yIGZvciBPTUFQMTYxMCBib2FyZDoKICAtIHNoaWZ0IHNvbWUgSVJRIHNwZWNpZmljIGNvZGUgdG8gcGxhdGZvcm0uUyBmaWxlCiAgLSByZW1vdmUgZHVwbGljYXRld2F0Y2hkb2cgcmVzZXQgY29kZSBmcm9tIHN0YXJ0LlMKCiogTWFrZSBBdXRvLU1ESVggU3VwcG9ydCBjb25maWd1cmFibGUgb24gSU5DQS1JUCBib2FyZAoKKiBGaXggbGljZW5zZSBmb3IgbWtpbWFnZSB0b29sCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI0IEZlYiAyMDA0OgogIFVwZGF0ZSBOZXRCb290RmlsZVhmZXJTaXplIGluIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjQgRmViIDIwMDQ6CiAgZml4IHBhY2tldCBsZW5ndGggaW4gTkZTIGNvZGUKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5LCAyMiBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTkZTIGZvciBmaWxlIGRvd25sb2FkCgoqIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMTcgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFMzQzQ0QjAgcHJvY2Vzc29yIGFuZCBEQVZFIEIyIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1JSSBjb21tYW5kcyBvbiBBVDkxUk05MjAwIGJvYXJkcwogIC0gc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgY29kZQoKKiBQYXRjaCBieSBQZXRlciBSeXNlciwgMjAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggTUwzMDAgcGxhdGZvcm0KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxNyBGZWIgMjAwNDoKICBGaXggd2F0Y2hkb2cgc3VwcG9ydCBmb3IgTklPUwoKKiBQYXRjaCBieSBKb3NoIEZyeW1hbiwgMTYgRmViIDIwMDQ6CiAgRml4IGJ5dGUtc3dhcHBpbmcgZm9yIGNmaV9mbGFzaC5jIGZvciBkaWZmZXJlbnQgYnVzIHdpZHRocwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgSmViIDIwMDQ6CiAgUmVtb3ZlIGR1cGxpY2F0ZSAiRlBHQSBTdXBwb3J0IiBub3RlcyBmcm9tIHRoZSBSRUFETUUgZmlsZQoKKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCAxNCBGZWIgMjAwNDoKICAtIHVwZGF0ZSBib2FyZC9lbWsgdHJlZTsgdXNlIGNvbW1vbiBmbGFzaCBkcml2ZXIKICAtIENvcnJlY3RlZCB0ZXN0ZWQgYml0cyBpbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBpbiBjcHUvbXBjNXh4eC90cmFwcy5jCiAgICBbYWRhcHRlZCBmb3Igb3RoZXIgUFBDIENQVXMgLS0gd2RdCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgTTQ4VDA4IG9uIHRoZSBFVkFMNTIwMCBib2FyZCBpbiBydGMvbWs0OHQ1OS5jCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMyBGZWIgMjAwNDoKICBDYWxsIHNob3dfYm9vdF9wcm9ncmVzcygpIHdoZW5ldmVyIFBPU1QgIkZBSUxFRCIgaXMgcHJpbnRlZC4KCiogUGF0Y2ggYnkgTmlzaGFudCBLYW1hdCwgMTMgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAxNjEwIEgyIEJvYXJkCiAgRml4ZXMgZm9yIGNwdS9hcm05MjZlanMvaW50ZXJydXB0LmMKCShiYXNlZCBvbiBSaWNoYXJkIFdvb2RydWZmJ3MgcGF0Y2ggZm9yIGFybTkyNSwgMTYgT2N0IDAzKQogIEZpeCBmb3IgYSB0aW1lciBidWcgaW4gT01BUDE2MTAgSW5ub3ZhdG9yCiAgQWRkIHN1cHBvcnQgZm9yIENTMCAoUk9NKS9DUzMgKEZsYXNoKSBib290IGluIE9NQVAxNjEwIElubm92YXRvciBhbmQgSDIKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDEyIEZlYiAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIE5JT1MgdGltZXIgd2l0aCB2YXJpYWJsZSBwZXJpb2QgcHJlbG9hZCBjb3VudGVyIHZhbHVlCiAgLSBwcmVwYXJlIFBPU1QgZnJhbWV3b3JrIHN1cHBvcnQgZm9yIE5JT1MgdGFyZ2V0cwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgRmViIDIwMDQ6CiAgYWRkIFBPU1Qgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBib2FyZAoKKiBQYXRjaCBieSBMYXVyZW50IE1vaGluLCAxMCBGZWIgMjAwNDoKICBGaXggYnVmZmVyIG92ZXJmbG93IGluIGNvbW1vbi91c2IuYwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjI3MiBib2FyZAoKKiBQYXRjaCBieSBUaG9tYXMgRWxzdGUsIDEwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBORVQrNTAgQ1BVIGFuZCBNb2RORVQ1MCBib2FyZAoKKiBQYXRjaCBieSBTYW0gU29uZywgMTAgRmViIDIwMDQ6CiAgRml4IHR5cG9zIGluIGNmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTAgRmViIDIwMDQKICBGaXhlZCBsb25nIGRpciBlbnRyeSBzbG90IGlkIGNhbGN1bGF0aW9uIGluIGdldF92ZmF0bmFtZQoKKiBQYXRjaCBieSBSb2JpbiBHaWxrcywgMTAgRmViIDIwMDQ6CiAgYWRkICJpdGVzdCIgY29tbWFuZCAob3BlcmF0b3JzOiAtZXEsIC1uZSwgLWx0LCAtZ3QsIC1sZSwgLWdlLCA9PSwKICAhPSwgPD4sIDwsID4sIDw9LCA+PSkKCiogRml4IHByb2JsZW0gd2l0aCBzaWRlIGVmZmVjdHMgaW4gbWFjcm9zIGluIGluY2x1ZGUvdXNiLmgKCiogUGF0Y2ggYnkgRGF2aWQgQmVuc29uLCAxMyBOb3YgMjAwMzoKICBidWcgODQxMzU4IC0gZml4IFRGVFAgZG93bmxvYWQgc2l6ZSBsaW1pdAoKKiBGaXhpbmcgYnVnIDg1MDc2ODoKICBpbXByb3BlciBmbHVzaF9jYWNoZSgpIGluIGxvYWRfc2VyaWFsKCkKCiogRml4aW5nIGJ1ZyA4MzQ5NDM6CiAgTVBDODU0MCAtIG1pc3Npbmcgdm9sYXRpbGUgZGVjbGFyYXRpb25zCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDA5IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBYaWxpbnggU3lzdGVtQUNFIGNoaXA6CiAgLSBOZXcgZmlsZXMgY29tbW9uL2NtZF9hY2UuYyBhbmQgaW5jbHVkZS9zeXN0ZW1hY2UuaAogIC0gSG9vayBzeXN0ZW1hY2Ugc3VwcG9ydCBpbnRvIGNtZF9mYXQgYW5kIHRoZSBwYXJ0aXRpb24gbWFuYWdlcgoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKICBBZGQgYmlfb3BiZnJlcSAmIGJpX2lpY19mYXN0IHRvIDQ0MEdYIGJkX2luZm8gYXMgbmVlZGVkIGZvciBMaW51eAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKICBvIDQ0MEdYOgogICAgLSBGaXggUENJIEluZGlyZWN0IGFjY2VzcyBmb3IgdHlwZSAxIGNvbmZpZyBjeWNsZXMgd2l0aCBwcGM0NDAuCiAgICAtIEFkZCBwaHltb2RlIGZvciA0NDAgZW5ldAogICAgLSBmaXggcGNpIHByZSBpbml0CiAgbyBYUGVkaXRlMUs6CiAgICAtIENoYW5nZSBib2FyZF9wcmVfaW5pdCB0byBib2FyZF9lYXJseV9pbml0X2YKICAgIC0gQWRkIHVzZXIgZmxhc2ggdG8gYnVzIGNvbnRyb2xsZXIgc2V0dXAKICAgIC0gRml4IHBjaSBwcmUgaW5pdAogICAgLSBGaXggaXNfcGNpX2hvc3QgdG8gY2hlY2sgR1BJTyBmb3IgbW9uYXJjaCBiaXQKICAgIC0gRm9yY2UgeHBlZGl0ZTFrIHRvIHBjaSBjb252ZW50aW9uYWwgbW9kZSAodmlhICNkZWZpbmUgb3B0aW9uKQoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDQgRmViIDIwMDQ6CiAgLSBoYW5kbGUgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBpcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBQQ0kgc2NhbnMKICAgIG9uIDgyeHggcHJvY2Vzc29ycy4KICAtIGRlZmluZSB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4gdGhlIElNTVIgYnkgdGhlIFBDSSBzdWJzeXN0ZW0uCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDAzIEZlYiAyMDA0OgogIGNwdS9tcGM1eHh4L3N0YXJ0LlM6IGNvcHkgTUJBUiBpbnRvIFNQUjMxMQoKKiBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDMgRmViIDIwMDQ6CiAgRml4IGNvcHkgJiBwYXN0ZSBlcnJvciBpbiBjcHUvbXBjODI2MC9wY2kuYwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjQgSmFuIDIwMDQ6CiAgRml4IHR5cG8gaW4gY3B1L21wYzV4eHgvcGNpX21wYzUyMDAuYwoKKiBBZGQgQXV0by1NRElYIHN1cHBvcnQgZm9yIElOQ0EtSVAKCiogU29tZSBjb2RlIGNsZWFudXAKCiogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDEwIEZlYiAyMDA0OgogIEZpeGVzIGZvciBDb2xkZmlyZSBwb3J0CgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTEgRmViIDIwMDQ6CiAgRml4IENGSSBmbGFzaCBkcml2ZXIgcHJvYmxlbXMKCiogTWFrZSBzdXJlIHRvIHVzZSBhIGJ1cyBjbG9jayBkaXZpZGVyIG9mIDIgb25seSB3aGVuIHJ1bm5pbmcgVFFNOHh4TQogIG1vZHVsZXMgYXQgQ1BVIGNsb2NrIGZyZXF1ZW5jaWVzIGFib3ZlIDY2IE1Iei4KCiogT3B0aW1pemUgZmxhc2ggcHJvZ3JhbW1pbmcgc3BlZWQgZm9yIExXTU9OIChieSBhbm90aGVyIDEwMCUgOi0pCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDMgRmViIDIwMDQ6CiAgLSBDaGFuZ2VkIHRoZSBpbmNvcnJlY3QgRkFUMTJCVUZTSVpFCiAgLSBkYXRhX2JlZ2luIGluIGZzZGF0YSBjYW4gYmUgbmVnYXRpdmUuIENoYW5nZWQgaXQgdG8gYmUgc2hvcnQuCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzMCBKYW4gMjAwNDoKICAxOiAtIGJvYXJkL2FsdGVyYS9jb21tb24vZmxhc2guYzpmbGFzaF9lcmFzZSgpOgogICAgICAgbyBhbGxvdyBpbnRlcnJ1cHRzIGJlZm9yIGdldF90aW1lcigpIGNhbGwKICAgICAgIG8gY2hlY2stdXAgZWFjaCBlcmFzZWQgc2VjdG9yIGFuZCBhdm9pZCB1bmV4cGVjdGVkIHRpbWVvdXRzCiAgICAgLSBib2FyZC9hbHRlcmEvZGsxYzIwL2RrMXMxMC5jOmJvYXJkX2Vhcmx5X2luaXRfZigpOgogICAgICAgbyBlbmNsb3NlIHNldmVuc2VnX3NldCgpIGluIGNwcCBjb25kaXRpb24KICAgICAtIHJlbW92ZSB0aGUgQVNNSSBjb25maWd1cmF0aW9uIGZvciBESzFTMTBfc3RhbmRhcmRfMzIgKG5ldmVyIHByZXNlbnQpCiAgICAgLSBmaXggc29tZSB0eXBlZCBpbiBtaXN0YWtlcyBpbiB0aGUgTklPUyBkb2N1bWVudGF0aW9uCiAgMjogLSBzcGxpdCBESzFDMjAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgogICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCiAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMUMyMC5oCiAgMzogLSBzcGxpdCBESzFTMTAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgogICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCiAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMVMxMC5oCiAgNDogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdHJvbml4IExpbnV4IERldmVsb3BtZW50IEtpdAogICAgICAgTklPUyBDUFUgY29uZmlndXJhdGlvbiBhdCB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQogIDU6IC0gQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgICAgICBTdHJhdGl4IEVkaXRpb24gKERLLTFTMTApCiAgNjogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgU2VyaWFsIFBlcmlwaGFyZWwgSW50ZXJmYWNlIChTUEkpCiAgICAgICAobWFzdGVyIG9ubHkpCiAgNzogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbW1vbiBVLUJvb3QgU1BJIGZyYW1ld29yayBhdAogICAgICAgUlRDIGRyaXZlciBEUzEzMDYKCiogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDI4IEphbiAyMDA0OgogIEZpeCBmbGFzaCBwcm90ZWN0aW9uL2xvY2tpbmcgaGFuZGxpbmcgZm9yIE9NQVAxNjEwIGlubm92YXRvciBib2FyZC4KCiogUGF0Y2ggYnkgUm9sZiBQZXVrZXJ0LCAyOCBKYW4gMjAwNDoKICBmaXggZmxhc2ggd3JpdGUgcHJvYmxlbXMgb24gQ1NCMjI2IGJvYXJkICh3cml0ZSB3aXRoIDMyIGJpdCBidXMgd2lkdGgpCgoqIFBhdGNoZXMgYnkgTWFyayBKb25hcywgMTYgSmFuIDIwMDQ6CiAgLSBmaXggcm91bmRpbmcgZXJyb3Igd2hlbiBjYWxjdWxhdGluZyBiYXVkcmF0ZXMgZm9yIE1QQzUyMDAgUFNDcwogIC0gbWFrZSBzdXJlIENGR19SQU1CT09UIGFuZCBDRkdfTE9XQk9PVCBhcmUgbm90IGVuYWJsZWQgYXQgdGhlIHNhbWUKICAgIHRpbWUgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNiBKYW4gMjAwNDoKICBBbGxvdyBiemlwMiBjb21wcmVzc2lvbiBmb3Igc21hbGwgbWVtb3J5IGZvb3RwcmludCBib2FyZHMKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAyMSBKYW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ0ZJIGZsYXNoIGRyaXZlciBmb3IgYm90aCB0aGUgSW50ZWwgYW5kIHRoZSBBTUQKICBjb21tYW5kIHNldHMuCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIwIEphbiAyMDA0OgogIEZpeCBwY2kgYnJpZGdlIGF1dG8gZW51bWVyYXRpb24gb2Ygc2libGluZyBwMnAgYnJpZGdlcy4KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTIgSmFuIDIwMDQ6CiAgQWRkIHNvbWUgZGVsYXlzIGFzIG5lZWRlZCBmb3IgSW50ZWwgTFhUOTcxQSBQSFkgc3VwcG9ydAoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMDkgSmFuIDIwMDQ6CiAgLSBhdm9pZCB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgYHBpb3AnIGluIGJvYXJkL2FsdGVyYS9jb21tb24vc2V2ZW5zZWcuYwogIC0gbWFrZSBESzFDMjAgYm9hcmQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIEFTTUkgY29uZm9ybSB0bwogICAgZG9jdW1lbnRhdGlvbgoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOSBKYW4gMjAwNDoKCiAgQVJNIG1lbW9yeSBsYXlvdXQgZml4ZXM6IHRoZSBhYm9ydC1zdGFjayBpcyBub3cgc2V0IHVwIGluIHRoZQogIGNvcnJlY3QgUkFNIGFyZWEsIGFuZCB0aGUgQlNTIGlzIHplcm9lZCBvdXQgYXMgaXQgc2hvdWxkIGJlLgoKICBGdXJ0aGVybW9yZSwgdGhlIG1hZ2ljIHZhcmlhYmxlcyAnYXJtYm9vdF9lbmQnIGFuZCAnYXJtYm9vdF9lbmRfZGF0YScKICBvZiB0aGUgbGlua2VyIHNjcmlwdHMgYXJlIHJlcGxhY2VkIGJ5ICdfX2Jzc19zdGFydCcgYW5kICdfZW5kJywKICByZXNwLiwgd2hpY2ggaXMgYSBmdXJ0aGVyIHN0ZXAgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGRpZmZlcmVuY2VzCiAgYmV0d2VlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIENQVSBhcmNoaXRlY3R1cmVzLgoKKiBQYXRjaCBieSBsaWFuZyBhIGxlaSwgOSBKYW4gMjAwNDoKICBGaXggSW50ZWwgMjhGMTI4SjMgSUQgaW4gaW5jbHVkZS9mbGFzaC5oCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA5IEphbiAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBUQjAyMjkgYm9hcmQgKE5FQyBWUjQxMzEgTUlQUyBwcm9jZXNzb3IpCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgRGVjIDIwMDM6CiAgY2hhbmdlZCBleHRlcm4gX19pbmxpbmVfXyBpbnRvIHN0YXRpYyBfX2lubGluZV9fIGluCiAgaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDMwIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBJQk0gUFBDNDQwR1guIE11bHRpcGxlIEVNQUMgRXRoZXJuZXQgZGV2aWNlcywKICBzZWxlY3QgTURJIHBvcnQgYmFzZWQgb24gZW5hYmxlZCBFTUFDIGRldmljZS4KICBBZGQgc3VwcG9ydCBmb3IgWEVTIEluYyA8aHR0cDovL3d3dy54ZXMtaW5jLmNvbT4gWFBlZGl0ZTEwMDAgNDQwR1gKICBiYXNlIFByUE1DIGJvYXJkLgoKKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDE1IERlYyAyMDAzOgogIG1hZGUgQ09ORklHX1NJTEVOVF9DT05TT0xFIHVzYWJsZSBvbiBhbGwgYXJjaGl0ZWN0dXJlcwoKKiBEaXNhYmxlIGRhdGUgY29tbWFuZCBvbiBUUU04NjZNIC0gdGhlcmUgaXMgbm8gUlRDIG9uIE1QQzg2NgoKKiBGaXggdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgZm9yIGxvdyBDUFUgY2xvY2tzCgoqIEltcGxlbWVudCBhZGFwdGl2ZSBTRFJBTSB0aW1pbmcgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBhY3R1YWwgQ1BVCiAgY2xvY2sgZnJlcXVlbmN5IGZvciBJTkNBLUlQOyBmaXggcHJvYmxlbSB3aXRoIGJvYXJkIGhhbmdpbmcgd2hlbgogIHN3aXRjaGluZyBmcm9tIDE1ME1IeiB0byAxMDBNSHoKCiogQWRkIFBDTUNJQSBDUyBzdXBwb3J0IGZvciBCTVMyMDAzIGJvYXJkCgoqIEFkZCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyAoc28gZmFyIG9ubHkgVFFNODY2TSk6CiAgc2VlIGRvYy9SRUFETUUuTVBDODY2IGZvciBkZXRhaWxzOwogIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciAiU0lVNCIgYW5kICJTSVU5IiBzaWxpY29uIGJ1Z3Mgb24gTVBDODY2OwogIGNhbGN1bGF0ZSBDUFUgY2xvY2sgZnJlcXVlbmN5IGZyb20gUExMIHJlZ2lzdGVyIHZhbHVlcy4KCiogQWRkIHN1cHBvcnQgZm9yIDEyOCBNQiBSQU0gb24gVFFNOHh4TC9NIG1vZHVsZXMKCiogRml4IFBTLzIga2V5Ym9hcmQgcHJvYmxlbSBjYXVzZWQgYnkgc3RhdGljYWxseSBpbml0aWFsaXplZCB2YXJpYWJsZQogIHBvaW50aW5nIHRvIGEgbG9jYXRpb24gaW4gZmxhc2gKCiogRml4IElOQ0EtSVAgY2xvY2sgY2FsY3VsYXRpb246IDQwMC8zID0gMTMzLjMgTUh6LCBub3QgMTMwLgoKKiBUaGUgUFMvMiBtdXggb24gdGhlIEJNUzIwMDMgYm9hcmQgbmVlZHMgNDUwIG1zIGFmdGVyIHBvd2VyIG9uCiAgYmVmb3JlIHdlIGNhbiBhY2Nlc3MgaXQ7IGFkZCBkZWxheSBpbiBjYXNlIHdlIGFyZSBmYXN0ZXIgKHdpdGggbm8KICBDRiBjYXJkIGluc2VydGVkKQoKKiBDbGVhbnVwIG9mIHNvbWUgaW5pdCBmdW5jdGlvbnMKCiogTWFrZSBzdXJlIFNDQyBFdGhlcm5ldCBpcyBhbHdheXMgc3RvcHBlZCBieSB0aGUgdGltZSB3ZSBib290IExpbnV4CiAgdG8gYXZvaWQgTGludXggY3Jhc2hlcyBieSBlYXJseSBwYWNrZXRzIGNvbWluZyBpbi4KCiogQWNjZWxlcmF0ZSBmbGFzaCBhY2Nlc3NlcyBvbiBMV01PTiBib2FyZCBieSB1c2luZyBidWZmZXJlZCB3cml0ZXMKCiogRml4IHR5cG8gaW4gTWFrZWZpbGU7CiAgZml4IHByb2JsZW0gd2l0aCBQQVJUTlVNIGRldGVjdGlvbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDkgSmFuIDIwMDQ6CiAgLSBhZGQgUlRDIHN1cHBvcnQgZm9yIE1QQzUyMDAgYmFzZWQgYm9hcmRzIChyZXF1aXJlcyBSVENfWFRBTCkKCiogQWRkIHN1cHBvcnQgZm9yIElERSBMRUQgb24gQk1TMjAwMyBib2FyZAogIChleGNsdXNpdmUgd2l0aCBzdGF0dXMgTEVEISkKCiogQWRkIHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgKHVzZWQgd2l0aCBQUy8yIG11bHRpcGxleG9yIG9uCiAgQk1TMjAwMyBib2FyZCkKCiogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgNCBKYW4gMjAwNCArIDcgSmFuIDIwMDQ6CiAgQWRkIGNvbW1vbiBmaWxlcyBmb3IgImVtayIgYm9hcmRzCgoqIEFkZCBhIGNvbW1vbiBnZXRfcmFtX3NpemUoKSBmdW5jdGlvbiBhbmQgbW9kaWZ5IHRoZSB0aGUKICBib2FyZC1zcGVjaWZpYyBmaWxlcyB0byBpbnZva2UgdGhhdCBjb21tb24gaW1wbGVtZW50YXRpb24uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBTZXQgZGVmYXVsdCBjbG9jayBmb3IgSU5DQS1JUCB0byAxNTAgTUh6CgoqIE1ha2UgQk1TMjAwMyB1c2UgYSBzZXBhcmF0ZSBjb25maWcgZmlsZSB0byBhdm9pZCAjaWZkZWYgbWVzczsKICBhZGQgSTJDIHN1cHBvcnQ7IGFkZCBzdXBwb3J0IGZvciBEUzEzMzcgUlRDCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCAgZm9yIEJNUzIwMDMgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIHN0YXR1cyBMRUQgb24gQk1TMjAwMyBib2FyZAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAyIEphbiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBBY3RpdmUgU2VyaWFsIE1lbW9yeSBJbnRlcmZhY2UgKEFTTUkpCiAgb24gQ3ljbG9uZSBkZXZpY2VzCgoqIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDE2IERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciB0aGUgUFBDaGFtZWxlb24gTUUgYW5kIEhJIG1vZHVsZXMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIERVRVQgQURTIGJvYXJkIChNUEM4N3gvODh4KQoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IERlYyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBjcmFtZnMgKHVzZXMgSkZGUzIgY29tbWFuZCBpbnRlcmZhY2UpCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMzoKICAtIG1vcmUgZG9jdW1lbnRhdGlvbiBmb3IgTklPUyBwb3J0CiAgLSBuZXcgc3RydWN0IG5pb3NfcGlvX3QsIHN0cnVjdCBuaW9zX3NwaV90CiAgLSBSZWNvbmZpZ3VyYXRpb24gZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMUMyMDoKICAgIG8gbW92ZSBib2FyZCByZWxhdGVkIGNvZGUgZnJvbSBib2FyZC9kazFjMjAKICAgICAgdG8gYm9hcmQvYWx0ZXJhL2RrMWMyMAogICAgbyBjcmVhdGUgYSBuZXcgY29tbW9uIHNvdXJjZSBwYXRoIGJvYXJkL2FsdGVyYS9jb21tb24KICAgICAgYW5kIG1vdmUgZ2VuZXJpYyBmbGFzaCBhY2Nlc3Mgc3R1ZmYgaW50byBpdAogICAgbyBjaGFuZ2UvZXhwYW5kIGNvbmZpZ3VyYXRpb24gZmlsZSBESzFDMjAuaAogIC0gQWRkIHN1cHBvcnQgZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMVMxMAogIC0gQWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgTklPUyBzeXN0ZW1zCiAgLSBBZGQgZHVhbCA3LXNlZ21lbnQgTEVEIHN1cHBvcnQgZm9yIEFsdGVyYSBOSU9TIERldktpdHMKCiogUGF0Y2ggYnkgUm9uZW4gU2hpdHJpdCwgMTAgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIERCNjQzNjAgLyBEQjY0NDYwIGRldmVsb3BtZW50IGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMCBEZWMgMjAwMzoKICBmaXggZGVwZW5kZW5jeSBwcm9ibGVtIGluIGV4YW1wbGVzL01ha2VmaWxlCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCA4IERlYyAyMDAzCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFBBVEkgYm9hcmQgKE1QQzU1NSkKICAtIGFkZCBTUEkgc3VwcG9ydCBmb3IgdGhlIE1QQzV4eAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOCBEZWMgMjAwMzoKICBhZGQgY29uZmlndXJhdGlvbiBvcHRpb25zIENPTkZJR19TRVJJQUxfVEFHIGFuZCBDT05GSUdfUkVWSVNJT05fVEFHCiAgdG8gcGFzcyBBVEFHX1NFUklBTCBhbmQgQVRBR19SRVZJU0lPTiwgcmVzcC4sIHRvIHRoZSBBUk0gdGFyZ2V0OwogIGNsZWFudXAgc29tZSByZWR1bmRhbmQgI2RlZmluZXMKCiogUGF0Y2ggYnkgQW5kcukgU2Nod2FyeiwgOCBEZWMgMjAwMzoKICBmaXhlcyBmb3IgRGF2aWNvbSBETTkxMDJBIEV0aGVybmV0IENoaXAgKCNkZWZpbmUgQ09ORklHX1RVTElQX0ZJWF9EQVZJQ09NKToKICAtIFRYIGFuZCBSWCBkZXNrcmlwdG9ycyBtdXN0IGJlIHF1YWQtd29yZCBhbGlnbmVkCiAgLSBkb2VzIG5vdCB3b3JrIHdpdGggb25seSBvbmUgVFggZGVza3JpcHRvcgogIC0gc3RhbmRhcmQgcmVzZXQgbWV0aG9kIGRvZXMgbm90IHdvcmsKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggRGVjIDIwMDM6CiAgYWRkIFJUTDgxMzkgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoZXMgYnkgRWQgT2tlcnNvbiwgMDcgRGVjIDIwMDM6CiAgLSBmaXggZXRoZXJuZXQgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuCiAgLSBleHRlbmQgbWVtc2V0dXAuUyBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIEJFIGFuZCBMRSBtb2RlcwoKKiBNaW5vciBjb2RlIGNsZWFudXAgKGNvZGluZyBzdHlsZSkKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDMwIERlYyAyMDAzOgogIC0gY3B1L21wYzV4eHgvZmVjLmM6IGFkZGVkIENPTkZJR19QSFlfQUREUiwgYWRkZWQgQ09ORklHX1BIWV9UWVBFLAogIC0gYWRkZWQgQ09ORklHX1BIWV9BRERSIHRvIGluY2x1ZGUvY29uZmlncy9JY2VDdWJlLmgsCiAgLSB0dXJuZWQgZGVidWcgcHJpbnQgb2YgUEhZIHJlZ2lzdGVycyBpbnRvIGEgZnVuY3Rpb24gKGNhbGxlZCBpbiB0d28gcGxhY2VzKQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgRU1LIE1QQzUyMDAgYmFzZWQgbW9kdWxlcwoKKiBGaXggTVBDOHh4IFBMUFJDUl9NRkRfU0hJRlQgdHlwbwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODY2TSBtb2R1bGVzCgoqIEZpeGVzIGZvciBUUU04NTVNIHdpdGggNCBNQiBmbGFzaCAoQW0yOURMMTYzID0gX25vXyBtaXJyb3IgYml0IGZsYXNoKQoKKiBGaXggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI4IERlYyAyMDAzOgogIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmQKCiogTWFrZSBDUFUgY2xvY2sgb24gSUNBLUlQIGJvYXJkIGNvbnRyb2xsYWJsZSBieSBhICJjcHVjbGsiCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggY2FuIHNldCB0byAiMTAwIiwgIjEzMyIsIG9yICIxNTAiLiBUaGUKICBDUFUgY2xvY2sgd2lsbCBiZSBjb25maWd1cmVkIGFjY29yZGluZ2x5IHVwb24gbmV4dCByZWJvb3QuIE90aGVyCiAgdmFsdWVzIGFyZSBpZ25vcmVkLiBJbiBjYXNlIG9mIGFuIGludmFsaWQgb3IgdW5kZWZpbmVkICJjcHVjbGsiCiAgdmFsdWUsIHRoZSBjb21waWxlLXRpbWUgZGVmYXVsdCBDUFUgY2xvY2sgc3BlZWQgd2lsbCBiZSB1c2VkLgoKKiBFbmFibGUgUXVhZC1VQVJUIG9uIEJNUzIwMDMgYm9hcmQgKGluaXRpYWxpemUgdGhlIFBDTUNJQSBtZW1vcnkKICB3aW5kb3cgdGhhdCBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgVUFSVCByZWdpc3RlcnMgYnkgdGhlIExpbnV4IGRyaXZlcikKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDIwIERlYyAyMDAzOgogIEZpeCBjbG9jayBjYWxjdWxhdGlvbiBmb3IgdGhlIE1QQzUyMDAgZm9yIGhpZ2hlciBjbG9jayBmcmVxdWVuY2llcwogIChhYm92ZSAyKiozMiAvIDEwID0gNDI5LjUgTUh6KS4KCiogRml4IENPTkZJR19QTExfUENJX1RPX01FTV9NVUxUSVBMSUVSIGRpdmlkZXIgZXJyb3IgaW4gU1A4MjQwIGNvbmZpZ3VyYXRpb24KCiogRml4IEljZUN1YmUgQ0xLSU4gY29uZmlndXJhdGlvbiAoaXQncyAzMy4wMDAwMDBNSHopCgoqIEFkZCBuZXcgY29uZmlndXJhdGlvbiBmb3IgSWNlQ3ViZSBib2FyZCB3aXRoIEREUiBtZW1vcnkKCiogVXBkYXRlIFRSQUIgbWVtb3J5IGNvbmZpZ3VyYXRpb25zCgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAwOSBEZWMgMjAwMzoKICAtIEJVQklOR0E0MDVFUDogY2hhbmdlZCBmbGFzaCBkcml2ZXIgdG8gcHJvdGVjdCB0b3Agc2VjdG9yIGNvbnRhaW5pbmcKICAgIGZpcnN0IGluc3RydWN0aW9uLgogIC0gQlVCSU5HQTQwNUVQOiBjb25maWd1cmVkICJlZXByb20iIGNvbW1hbmQgdG8gYWNjZXNzIGJvb3QgY29uZmlnIEVFUFJPTS4KICAtIEJVQklOR0E0MDVFUDogZml4ZWQgUExMIGluaXQgKGluaXQgY2hpcCBzZWxlY3RzIGJlZm9yZSBGUEdBL05WUkFNIGFjY2VzcykuCiAgLSA0MDVFUDogZml4ZWQgU1BELWJhc2VkIFNEUkFNIGluaXQgKG9ubHkgdXNlIGJhbmtzIDAgYW5kIDEpLgogIC0gNDA1RVA6IGFkZGVkL2ZpeGVkIHN1cHBvcnQgZm9yICJyZWdpbmZvIiBjb21tYW5kLgogIC0gNHh4OiByZW1vdmVkIHNwdXJpb3VzIE1JSSBlcnJvciBtZXNzYWdlcyBvbiAibWlpIGluZm8iIGNvbW1hbmQuCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBDb2xkZmlyZSBDUFUKICBhZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTTUyNzJDMyBhbmQgTTUyODJFVkIgYm9hcmRzCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IE5vdiAyMDAzOgogIC0gYWRkIGEgcmV0dXJuIHZhbHVlIGZvciB0aGUgZnBnYSBjb21tYW5kCiAgLSBhZGQgaWRlX3ByZWluaXQoKSBmdW5jdGlvbiBjYWxsZWQgaW4gaWRlX2luaXQgaWYgQ09ORklHX0lERV9QUkVJTklUCiAgICBpcyBkZWZpbmVkLiBJZiBpZGVfcHJlaW5pdCBmYWlscywgaWRlX2luaXQgaXMgYWJvcnRlZC4KICAtIGZpeCBhbiBlbmRpYW5lc3MgcHJvYmxlbSBpbiBmYXQuaAoKKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDA1IERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTTk1DJ3MgUVM4NTAvUVM4MjMvUVM4NjBUIGJvYXJkcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAzIERlYyAyMDAzOgogICJyZXZpdmUiIFUtQm9vdCBzdXBwb3J0IGZvciBvbGQgTW90b3JvbGEgTVBDODYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IENhbShpbG8/KSwgMDMgRGVjIDIwMDM6CiAgbWFrZSBleGFtcGxlcyBidWlsZCBldmVuIHdpdGggYnJva2VuIE1vbnRhdmlzdGEgb2JqY29weQoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjcgTm92IDIwMDM6CiAgZml4IGNvbnZlcnNpb24gcHJvYmxlbSB3aXRoICJib290cmV0cnkiIGV2aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgQW5kcmUgU2Nod2FyeiwgMjQgTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIG12Ymx1ZSAobXZCbHVlTFlOWCBhbmQgbXZCbHVlQk9YKSBib2FyZHMKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE5vdiAyMDAzOgogIHNldCBaTUlJIGJyaWRnZSBzcGVlZCBvbiA0NDAKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgTm92IDIwMDM6CiAgRml4IG1pc21hdGNoZWQgI2lmZGVmIC8gI2VuZGlmIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxNCBOb3YgMjAwMzoKICAtIGJvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYwogICAgKiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgQlpJUDIgY29tcHJlc3NlZCBpbWFnZXMKICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKICAtIGJvYXJkL21wbC9jb21tb24vZmxhc2guYwogICAgKiByZXBvcnQgY29ycmVjdCBlcnJvcnMgdG8gdXBwZXIgbGF5ZXJzCiAgICAqIGNoZWNrIHRoZSBlcmFzZSBmYWlsIGFuZCBWUFAgbG93IGJpdHMgaW4gc3RhdHVzIHJlZwogIC0gYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCiAgLSBib2FyZC9tcGwvdmNtYTkvZmxhc2guYwogICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQogIC0gY29tbW9uL2NtZF91c2IuYwogICAgKiBmaXggdHlwbyBpbiBjb21tZW50CiAgLSBjcHUvYXJtOTIwdC91c2Jfb2hjaS5jCiAgICAqIHN1cHBvcnQgZm9yIFMzQzI0MTAgaXMgbWlzc2luZyBpbiAjaWYgbGluZQogIC0gZHJpdmVycy9jczg5MDAuYwogICAgKiByZWluaXQgc29tZSByZWdpc3RlcnMgaW4gY2FzZSBvZiBlcnJvciAoY2FibGUgbWlzc2luZywgLi4uKQogIC0gZnMvZmF0L2ZhdC5jCiAgICAqIHN1cHBvcnQgZm9yIFVTQi9NTUMgZGV2aWNlcyBpcyBtaXNzaW5nIGluICNpZiBsaW5lCiAgLSBpbmNsdWRlL2NvbmZpZ3MvTUlQNDA1LmgKICAtIGluY2x1ZGUvY29uZmlncy9QSVA0MDUuaAogICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAogICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAogIC0gaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKICAgICogZW5hYmxlIFVTQiBzdXBwb3J0CiAgLSBsaWJfYXJtL2FybWxpbnV4LmMKICAgICogY2hhbmdlIGNhbGxpbmcgY29udmVudGlvbiBvZiBBUk0gTGludXgga2VybmVsIGFzCiAgICAgIGRlc2NyaWJlZCBvbiBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL2Jvb3RpbmcucGhwCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6CiAgU3BsaXQgZGJhdTF4MDAgaW50byBkYmF1MTAwMCwgZGJhdTExMDAgYW5kIGRiYXUxNTAwIGNvbmZpZ3MgdG8KICBzdXBwb3J0IGFsbCB0aGVzZSBBTUQgYm9hcmRzLgoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgogIFdvcmthcm91bmQgZm9yIG1pcHMgYXUxeDAwIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3NlcyAodGhlIGF1MXgwMAogIHVzZXMgYSAzNiBiaXQgYnVzIGludGVybmFsbHkgYW5kIGNhbm5vdCBhY2Nlc3MgcGh5c2ljYWwgbWVtb3J5CiAgZGlyZWN0bHkuIFVzZSB0aGUgdW5jYWNoZWQgU0RSQU0gYWRkcmVzcyBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbAogIG9uZS4pCgoqIFBhdGNoIGJ5IFh1ZSBMaWdvbmcgKEpvZSksIDEzIE5vdiAyMDAzOgogIGFkZCBSZWFsdGVrIDgwMTkgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIE5vdiAyMDAzOgogIE1QQzgyNnhBRFMvUFEyRkFEUyAgY2xlYW51cAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxMiBOb3YgMjAwMzoKICBVcGRhdGUgUkVBRE1FIHRvIG1hcmsgdGhlIFBPUlRJTyBjb21tYW5kcyBub24tc3RhbmRhcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMTIgTm92IDIwMDM6CiAgdXBkYXRlIGZvciBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIGRldmVsb3BtZW50IGtpdDoKICAtIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBEYXRhRmxhc2gKICAtIEF0bWVsIERhdGFGbGFzaCBBVDQ1REIxMjgyIHN1cHBvcnQKCiogUGF0Y2ggYnkgSmVmZiBDYXJyLCAxMSBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgbmV3IHZlcnNpb24gb2YgODI3MCBwcm9jZXNzb3JzCgoqIFBhdGNoZXMgYnkgR2VvcmdlIEcuIERhdmlzLCAwNSBOb3YgMjAwMzoKICAtIG9ubHkgcGFzcyB0aGUgQVJNIGxpbnV4IGluaXRyZCB0YWcgdG8gdGhlIGtlcm5lbCB3aGVuIGFuIGluaXRyZAogICAgaXMgYWN0dWFsbHkgcHJlc2VudAogIC0gdXBkYXRlIG9tYXAxNTEwaW5uIGNvbmZpZ3VyYXRpb24gZmlsZQoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMyBOb3YgMjAwMzoKICAtIG1vcmUgZW5kaWFuZXNzIGZpeGVzIGZvciBMQU45MUMxMTEgZHJpdmVyCiAgLSBDRkdfSFogY29uZmlndXJhdGlvbiBwYXRjaCBmb3IgTklPUyBDeWNsb25lIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CiAgZml4IFBIWV9JTlRfUkVHIHZzLiBQSFlfTUFTS19SRUcgYnVnIGluIGRyaXZlcnMvc21jOTExMTEuYwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBPY3QgMjAwMzoKICAtIG1ha2UgIm1paSBpbmZvIDxhZGRyPiIgc2hvdyBpbmZvciBmb3IgUEhZIGF0ICJhZGRyIiBvbmx5CiAgLSBFbmRpYW4gZml4IGZvciBtaWlwaHlfaW5mbygpCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTkgU2VwIDIwMDM6CiAgTW92ZSBtb3N0IG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgcmVsYXRlZCBQUEMgY29kZSB0byBwcGNfbGliL2ludGVycnVwdHMuYwoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKICBCcmluZyBBUk0gbWVtb3J5IGxheW91dCBpbiBzeW5jIHdpdGggdGhlIGRvY3VtZW50YXRpb246CiAgc3RhY2sgYW5kIG1hbGxvYy1oZWFwIGFyZSBub3cgbG9jYXRlZCBfYmVsb3dfIHRoZSBVLUJvb3QgY29kZQoKKiBBY2NlbGVyYXRlIGJvb3Rpbmcgb24gVFJBQiBib2FyZDogcmVhZCBhbmQgY2hlY2sgIGF1dG91cGRhdGUgIGltYWdlCiAgaGVhZGVycyBmaXJzdCBpbnN0ZWFkIG9mIGFsd2F5cyByZWFkaW5nIHRoZSB3aG9sZSBpbWFnZXMuCgoqIEZpeCB0eXBlIGluIE1QQzVYWFggY29kZSAocG9pbnRlZCBvdXQgYnkgVmljdG9yIFdyZW4pCgoqIEVuYWJsZWQgcGFzc3dvcmQgY2hlY2sgb24gUk1VIGJvYXJkCgoqIEZpeCBjb25maWd1cmF0aW9uIHByb2JsZW0gd2l0aCBJY2VDdWJlIGluIExPV0JPT1QgY29uZmlndXJhdGlvbjoKICBlbnZyaW9ubWVudCBnb3QgZW1iZWRkZWQsIGNvcnJ1cHRpbmcgdGhlIGltYWdlIGxheW91dC4KCiogRml4IE5FQyBkaXNwbGF5IG5hbWVzIChpdCdzIDY0NDAgW2ZvciA2NDB4NDgwXSwgbm90IDY2NDApLgoKKiBBZGRlZCBCTVMyMDAzIGJvYXJkCiAgYWRkIHN1cHBvcnQgZm9yIE5FQyBOTDY0NDhCQzMzLTU0LiAxMC40IiwgNjQweDQ4MCBURlQgZGlzcGxheQoKKiBGaXggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkIChtdXN0IHVzZSBVbmxvY2sgQnlwYXNzIFJlc2V0CiAgY29tbWFuZCB0byBleGl0IFVubG9jayBCeXBhc3MgTW9kZSk7IGFkanVzdCB0aW1pbmdzIGZvciBmbGFzaCwgU1JBTQogIGFuZCBDUExECgoqIFVzZSAiLWZQSUMiIGluc3RlYWQgb2YgIi1tcmVsb2NhdGFibGUiIHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aAogIHJlY2VudCB0b29scwoKKiBBZGQgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHRvICdpbWxzJyBjb21tYW5kCgoqIEFkZCBiZF9pbmZvIGZpZWxkcyBuZWVkZWQgZm9yIDR4eCBMaW51eCBJMkMgZHJpdmVyCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDQgTm92LiAyMDAzOgogIEZpeCBlcnJvciBpbiBjbWRfdmZkLmMgKFRSQUIgYm9hcmQ6ICJ2ZmQgLzEiIHNob3dzIG5vdyBvbmx5IG9uZSBCaXRtYXApCgoqIFByaW50IHVzZWQgbmV0d29yayBpbnRlcmZhY2Ugd2hlbiBDT05GSUdfTkVUX01VTFRJIGlzIHNldAoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBPY3QgMjAwMzoKICBBZGQgbG93IGJvb3Qgc3VwcG9ydCBmb3IgTVBDNTIwMAoKKiBGaXggcHJvYmxlbSB3aXRoIGR1YWwgUENNQ0lBIHN1cHBvcnQgKE5TQ1UpCgoqIEZpeCBNUEM1MjAwIEkyQyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogRml4IHBhcmFtZXRlciBwYXNzaW5nIHRvIHN0YW5kYWxvbmUgaW1hZ2VzIHdpdGggYm9vdG0gY29tbWFuZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMzAgT2N0IDIwMDM6CiAgRml4IGJ1aWxkIGVycm9ycyBmb3IgaXhkcDQyNSBib2FyZAoKKiBQYXRjaCBieSBEYXZpZCBNLiBIb3JuLCAyOSBPY3QgMjAwMzoKICBGaXhlcyB0byBidWlsZCB1bmRlciBDWUdXSU4KCiogR2V0IEljZUN1YmUgTUdUNTEwMCB3b3JraW5nIChhZ2FpbikKCiogRml4IHByb2JsZW1zIGluIG1lbW9yeSB0ZXN0IG9uIHNvbWUgYm9hcmRzICh3aGljaCB3YXMgbm90CiAgbm9uLWRlc3RydWN0aXZlIGFzIGludGVuZGVkKQoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggT2N0IDIwMDM6CiAgQ2hhbmdlIGZzL2ZhdC9mYXQuYyB0byBwdXQgSS9PIGJ1ZmZlcnMgaW4gQlNTIGluc3RlYWQgb24gdGhlIHN0YWNrCiAgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBvbiBBUk0gc3lzdGVtcwoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgogIGZpeCBpbml0IHNlcXVlbmNlIGVycm9yIGZvciBOSU9TIHBvcnQKCiogQWxsb3cgbG93ZXJjYXNlIHNwZWxsaW5nIGZvciBJY2VDdWJlXzUyMDA7IHN1cHBvcnQgTVBDNTIwMExJVEUgbmFtZQoKKiBBZGQgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUgdG8gVFJBQiBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IFhpYW8gWGlhbmdodWEsIDIzIE9jdCAyMDAzOgogIHNtYWxsIHBhdGNoIGZvciBtcGM4NXh4CgoqIEZpeCBzbWFsbCBwcm9ibGVtIGluIE1QQzUyMDAgSTJDIGRyaXZlcgoKKiBGaXggRkNDMyBzdXBwb3J0IG9uIEFUQyBib2FyZAoKKiBDb3JyZWN0IGhlYWRlciBwcmludGluZyBmb3IgbXVsdGktaW1hZ2UgZmlsZXMgaW4gZG9fYm9vdG0oKQoKKiBNYWtlIENPTkZJR19TSUxFTlRfQ09OU09MRSB3b3JrIHdpdGggQ09ORklHX0FVVE9CT09UX0tFWUVECgoqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb24gYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTggT2N0IDIwMDM6CiAgRml4IEFUOTFSTTkyMDAgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDE3IE9jdCAyMDAzOgogIEZpeCB0eXBvIGluIGluY2x1ZGUvbXBjOHh4LmgKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTYgT2N0IDAzOgogIEZpeGVzIGZvciBjcHUvYXJtOTI1L2ludGVycnVwdC5jCiAgLSBJbml0aWFsaXplIHRpbWVzdGFtcCAmIGxhc3RkZWMgdmFycy4KICAtIGZpeCB0aW1lc3RhbXAgb3ZlcmZsb3dzLgogIC0gZml4IGxhc3RkZWMgb3ZlcmZsb3cuCiAgLSBzbWFydGVyIG5vcm1hbGl6YXRpb24gdG8gYWxsb3cgdWRlbGF5KCkgYmVsb3cgMW1zIHRvIHdvcmsuCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMTYgT2N0CiAgYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKICBDeWNsb25lIEVkaXRpb24gKERLLTFDMjApCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxNCBPY3QgMjAwMzoKICBhZGQgaGludCBhYm91dCBkb2MvUkVBRE1FLnNpbGVudCB0byBSRUFETUUgZmlsZQoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIE5TQ1UKCiogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbkVWQgoKKiBUUkFCIGF1dG8tdXBkYXRlOiBCYXNlIGRlY2lzaW9uIGlmIHdlIGhhdmUgdG8gc3RyaXAgdGhlIGltYWdlCiAgaGVhZGVyIG9uIGltYWdlIHR5cGUgYXMgZW5jb2RlZCBpbiB0aGUgaGVhZGVyCiAgKGluY2x1ZGUgaW1hZ2UgdHlwZSBwYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBPY3QgMjAwMykKCiogUGF0Y2hlcyBieSBYaWFuZ2h1YSBYaWFvLCAxNSBPY3QgMjAwMzoKCiAgLSBBZGRlZCBNb3Rvcm9sYSBDUFUgODU0MC84NTYwIHN1cHBvcnQgKGNwdS84NXh4KQogIC0gQWRkZWQgTW90b3JvbGEgTVBDODU0MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTQwYWRzKQogIC0gQWRkZWQgTW90b3JvbGEgTVBDODU2MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTYwYWRzKQoKKiBGaXggZmxhc2ggdGltaW5ncyBvbiBUUkFCIGJvYXJkCgoqIE1ha2Ugc3VyZSBIVVNIIGlzIGluaXRpYWxpemVkIGZvciBydW5uaW5nIGF1dG8tdXBkYXRlIHNjcmlwdHMKCiogTWFrZSA1MjAwIHJlc2V0IGNvbW1hbmQgX3JlYWxseV8gcmVzZXQgdGhlIGJvYXJkLCB3aXRob3V0IHJ1bm5pbmcKICBhbnkgb3RoZXIgY29kZSBhZnRlciBpdAoKKiBGaXggZXJyb3JzIHdpdGggZmxhc2ggZXJhc2Ugd2hlbiByYW5nZSBzcGFucyAgYWNyb3NzIGJhbmtzCiAgdGhhdCBhcmUgbWFwcGVkIGluIHJldmVyc2Ugb3JkZXIKCiogRml4IGZsYXNoIG1hcHBpbmcgYW5kIGRpc3BsYXkgb24gUDNHNCBib2FyZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTUgSnVsIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgSVhQNDI1IENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIElYRFA0MjUgZXZhbCBib2FyZAoKKiBBZGRlZCBjb25maWcgb3B0aW9uIENPTkZJR19TSUxFTlRfQ09OU09MRS4gIFNlZSBkb2MvUkVBRE1FLnNpbGVudAogIGZvciBtb3JlIGluZm9ybWF0aW9uCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIE9jdCAyMDAzCiAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIEZQR0EgQUNFWDFLCgoqIFBhdGNoZXMgYnkgVGhvbWFzIExhbmdlLCAwOSBPY3QgMjAwMzoKICAtIGZpeCBjbWRfaWRlLmMgZm9yIG5vbiBwcGMgYm9hcmRzIChyZWFkL3dyaXRlIGZ1bmN0aW9ucyBkaWQgbm90CiAgICBhZGQgQVRBIGJhc2UgYWRkcmVzcykKICAtIGZpeCBmb3Igc2hhbm5vbiBib2FyZAogIC0gI2lmZGVmIENPTkZJR19JREVfOHh4X0RJUkVDVCBzb21lIG90aGVyd2lzZSB1bnVzZWQgY29kZQogIC0gRW5kaWFuIHN3YXAgQVRBIGlkZW50aXR5IGZvciBhbGwgYmlnIGVuZGlhbiBDUFVzLCBub3QganVzdCBQUEMKICAtIE1JUFMgb25seTogTmV3IG9wdGlvbiBDT05GSUdfTUVNU0laRV9JTl9CWVRFUyBmb3IgcGFzc2luZyBtZW1zaXplCiAgICBhcmdzIHRvIGxpbnV4CiAgLSBhZGQgc3VwcG9ydCBmb3IgZGJhdTF4MDAgYm9hcmQgKE1JUFMzMikKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAwNyBPY3QgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgZGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA5IE9jdCAyMDAzOgogIEZpeGVzIGZvciBUUkFCIGJvYXJkCiAgLSAvYm9hcmQvdHJhYi9yczQ4NS5jOiBjb3JyZWN0IGJhdWRyYXRlCiAgLSAvYm9hcmQvdHJhYi9jbWRfdHJhYi5jOiBidWcgZml4IGZvciBwcm9ibGVtIHdpdGggdGltZXIgb3ZlcmZsb3cgaW4KICAgIHVkZWxheSgpOyBmaXggc29tZSB0aW1pbmcgcHJvYmxlbXMgd2l0aCBhZGMgY29udHJvbGxlcgogIC0gL2JvYXJkL3RyYWIvdHJhYl9ma3QuYzogYWRkIG5ldyBjb21tYW5kczogZ2FpbiwgZWVwcm9tIGFuZCBwb3dlcjsKICAgIG1vZGlmeSBjb21tYW5kczogdG91Y2ggYW5kIGJ1enplcgoKKiBEaXNhYmxlIENPTkZJR19TVVBQT1JUX1ZGQVQgd2hlbiB1c2VkIHdpdGggQ09ORklHX0FVVE9fVVBEQVRFCiAgKHF1aWNrICYgZGlydHkgd29ya2Fyb3VuZCBmb3Igcm9ndWUgcG9pbnRlciBwcm9ibGVtIGluIGdldF92ZmF0bmFtZSgpKTsKICBVc2UgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGZvciBhdXRvX3VwZGF0ZSBpbnN0ZWFkIG9mIGh1c2ggY29tbWFuZHMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwNCBPY3QgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy0zMiBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciBOaW9zIEN5Y2xvbmUgRGV2ZWxvcG1lbnQgS2l0IChESy0xQzIwKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyOSBTZXAgMjAwMzoKICAtIEEgc2Vjb25kIHBhcmFtZXRlciBmb3IgYm9vdG0gb3ZlcndyaXRlcyB0aGUgbG9hZCBhZGRyZXNzIGZvcgogICAgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcy4KICAtIGJvb3RtIHNldHMgZW52aXJvbm1lbnQgdmFyaWFibGUgImZpbGVzaXplIiB0byB0aGUgcmVzdWx0aW5nCiAgICAodW5jb21wcmVzc2VkKSBkYXRhIGxlbmd0aCBmb3IgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcwogICAgd2hlbiBhdXRvc3RhcnQgaXMgc2V0IHRvICJubyIuIE5vdyB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlCglpZiBib290bSAkZnBnYWRhdGEgJHNvbWVfZnJlZV9yYW0gOyB0aGVuCgkJZnBnYSBsb2FkIDAgJHNvbWVfZnJlZV9yYW0gJGZpbGVzaXplCglmaQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMjUgU2VwdCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1IFJldi4gQyBib2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNSBTZXAgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgWmVwaHlyIEVuZ2luZWVyaW5nIFpQQy4xOTAwIGJvYXJkCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIzIFNlcCAyMDAzOgogIGFkZCBDTURfUE9SVElPIHRvIENGR19DTURfTk9OU1REIChjb21tYW5kcyBpbiBxdWVzdGlvbiBhcmUgb25seQogIGltcGxlbWVudGVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSkKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAyMyBTZXAgMjAwMzoKICBmaXggcGxsX3BjaV90b19tZW1fbXVsdGlwbGllciB0YWJsZSBmb3IgTVBDODI0NQoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMiBTZXAgMjAwMzoKICBlbmFibGUgdGltZWQgYXV0b2Jvb3Qgb24gUFhBCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjIgU2VwIDIwMDM6CiAgLSBhZGQgJChDRkxBR1MpIHRvICItcHJpbnQtbGliZ2NjLWZpbGVuYW1lIiBzbyBjb21waWxlciBkcml2ZXIKICAgIHJldHVybnMgY29ycmVjdCBsaWJnY2MgZmlsZSBwYXRoCiAgLSAibGF0ZW5jeSIgcmVkdWN0aW9uIG9mIGJ1c3ktbG9vcCB3YWl0aW5nIHRvIGltcHJvdmUgIlUtQm9vdCIgYm9vdAogICAgdGltZSBvbiBzM2MyNHgwIHN5c3RlbXMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE5IFNlcCAyMDAzOgogIC0gQWRkIENGR19GQVVMVF9FQ0hPX0xJTktfRE9XTiBvcHRpb24gdG8gZWNobyB0aGUgaW52ZXJ0ZWQgRXRoZXJuZXQKICAgIGxpbmsgc3RhdGUgdG8gdGhlIGZhdWx0IExFRC4KICAtIEluIE5ldExvb3AsIG1ha2UgdGhlIEZhdWx0IExFRCByZWZsZWN0IHRoZSBsaW5rIHN0YXR1cy4gIFRoZSBsaW5rCiAgICBzdGF0dXMgZ2V0cyB1cGRhdGVkIG9uIGVudHJ5LCBhbmQgb24gdGltZW91dHMuCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE4IFNlcCAyMDAzOgogIGFsbG93IG1raW1hZ2UgdG8gYnVpbGQgYW5kIHJ1biBvbiBDeWd3aW4taG9zdGVkIHN5c3RlbXMKCiogUGF0Y2ggYnkgRnJhbmsgTfxsbGVyLCAxOCBTZXAgMjAwMzoKICB1c2UgYmlfaW50ZnJlcSBpbnN0ZWFkIG9mIGJpX2J1c2ZyZXEgdG8gY29tcHV0ZSBmZWNfbWlpX3NwZWVkIGluCiAgY3B1L21wYzh4eC9mZWMuYwoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTYgU2VwIDIwMDM6CiAgYWRkIHRvb2wgdG8gY29tcHV0ZSBmaWxlZHMgaW4gdGhlIFBMUFJDUiByZWdpc3RlciBmb3IgTVBDODZ4CgoqIFVzZSBJSF9UWVBFX0ZJTEVTWVNURU0gZm9yIFRSQUIgImRpc2siIGltYWdlcy4KCiogRml4IGJ1aWxkIHByb2JsZW1zIHVuZGVyIEZyZWVCU0QKCiogQWRkIGdlbmVyaWMgZmlsZXN5c3RlbSBpbWFnZSB0eXBlCgoqIE1ha2UgZmF0bG9hZCBzZXQgZmlsZXNpemUgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogZW5hYmxlIGJhc2ljIC8gbWVkaXVtIC8gaGlnaC1lbmQgY29uZmlndXJhdGlvbnMgZm9yIFBQQ2hhbWVsZW9uRVZCCiAgYm9hcmQ7IGZpeCBOQU5EIGNvZGUKCiogZW5hYmxlIFRGVFAgY2xpZW50IGNvZGUgdG8gc3BlY2lmeSB0byB0aGUgc2VydmVyIHRoZSBkZXNpcmVkCiAgdGltZW91dCB2YWx1ZSAoc2VlIFJGQy0yMzQ5KQoKKiBJbXByb3ZlIFNEUkFNIHNldHVwIGZvciBUUkFCIGJvYXJkCgoqIFN1cHByZXNzIGFsbCBvdXRwdXQgd2l0aCBzcGxhc2hzY3JlZW4gY29uZmlndXJlZCBvbmx5IGlmICJzcGxhc2hpbWFnZSIKICBpcyBzZXQKCiogRml4IHByb2JsZW1zIHdpdGggSTJDIHN1cHBvcnQgZm9yIG1wYzUyMDAKCiogQWRhcHQgVFJBQiBjb25maWd1cmF0aW9uIGFuZCBhdXRvX3VwZGF0ZSB0byBuZXcgbWVtb3J5IGxheW91dAoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3Igd3RrIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgU2hhcnAgTFEwNjVUOURSNTFVIExDRCBkaXNwbGF5CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNyBTZXAgMjAwMzoKICAtIEZpeGVzIGZvciBNUEM4MjY2IGRlZmF1bHQgY29uZmlnCiAgLSBBbGxvdyBldGhfbG9vcGJhY2tfdGVzdCgpIG9uIDgyNjAgdG8gdXNlIGEgc3Vic2V0IG9mIHRoZSBGQ0MncwoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNyBTZXAgMjAwMzoKICAtIHVwZGF0ZSBSRUFETUUgKFNIT1dfQk9PVF9QUk9HUkVTUyB2YWx1ZXMgZm9yIGNtZF9uYW5kLmMgYW5kCiAgICBlbnZfY29tbW9uLmMpCiAgLSBzYmM4MjYwIHR3ZWFrcwogIC0gYWRqdXN0ICJoZWxwIiBvdXRwdXQKCiogUGF0Y2hlcyBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKICAtIGZpeCBzcGVsbGluZyBlcnJvcnMKICAtIHNldCBHRF9GTEdfREVWSU5JVCBmbGFnIG9ubHkgYWZ0ZXIgZGV2aWNlIGZ1bmN0aW9uIHBvaW50ZXJzCiAgICBhcmUgdmFsaWQKICAtIEFsbG93IENGR19BTFRfTUVNVEVTVCBvbiBzeXN0ZW1zIHdoZXJlIGFkZHJlc3MgemVybyBpc24ndAogICAgd3JpdGVhYmxlCiAgLSBlbmFibGUgMy5yZCBVQVJUIChTVC1VQVJUKSBvbiBQWEEoWFNjYWxlKSBDUFVzCiAgLSB0cmlnZ2VyIHdhdGNoZG9nIHdoaWxlIHdhaXRpbmcgaW4gc2VyaWFsIGRyaXZlcgoKKiBBZGQgYXV0by11cGRhdGUgY29kZSBmb3IgVFJBQiBib2FyZCB1c2luZyBVU0IgbWVtb3J5IHN0aWNrcywKICBzdXBwb3J0IG5ldyBjb25maWd1cmF0aW9uIHdpdGggbW9yZSBtZW1vcnkKCiogZGlzYWJsZSBNUEM1MjAwIGJ1cyBwaXBlbGluaW5nIGFzIHdvcmthcm91bmQgZm9yIGJ1cyBjb250ZW50aW9uCgoqIE1vZGlmeSBYTEIgYXJiaXRlciBwcmlvcml0aWVzIG9uIE1QQzUyMDAgc28gYWxsIGRldmljZXMgdXNlIHNhbWUKICBwcmlvcml0eTsgY29uZmlndXJlIGNyaXRpY2FsIGludGVycnVwdHMgdG8gYmUgaGFuZGxlZCBsaWtlIGV4dGVybmFsCiAgaW50ZXJydXB0cwoKKiBNYWtlIElQQiBjbG9jayBvbiBNR1Q1MTAwL01QQzUyMDAgY29uZmlndXJhYmxlIGluIGJvYXJkIGNvbmZpZyBmaWxlOwogIGdvIGJhY2sgdG8gNjYgTUh6IGZvciBzdGFiaWxpdHkKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTUgU2VwIDIwMDM6CiAgLSBhZGQgZGVzY3JpcHRpb24gZm9yIG1pc3NpbmcgQ0ZHX0NNRF8qIGVudHJpZXMgaW4gdGhlIFJFQURNRSBmaWxlCiAgLSBzYWNzbmcgdHdlYWtzCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTQgU2VwIDIwMDM6CiAgZW5hYmxlIHdhdGNoZG9nIHN1cHBvcnQgZm9yIGFsbCBNUEM4MjR4IGJvYXJkcyB0aGF0IGhhdmUgYSB3YXRjaGRvZwoKKiBPbiBNUEM1MjAwLCByZXN0cmljdCBGRUMgdG8gYSBtYXhpbXVtIG9mIDEwIE1icHMgdG8gd29yayBhcm91bmQgdGhlCiAgIk5vbi1vY3RldCBBbGlnbmVkIEZyYW1lIiBlcnJvcnMgd2Ugc2VlIGF0IDEwMCBNYnBzCgoqIFBhdGNoIGJ5IFNoYXJhZCBHdXB0YSwgMTQgU2VwIDIwMDM6CiAgZml4IFNQUiBudW1iZXJzIGZvciB1cHBlciBCQVQgcmVnaXN0ZXIgKFtJRF1CQVRbNC03XVtVTF0pCgoqIFBhdGNoIGJ5IGxsYW5kcmUsIDExIFNlcCAyMDAzOgogIHVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBQUENoYW1lbGVvbkVWQiBib2FyZAoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDEzIFNlcCAyMDAzOgogIHZhcmlvdXMgY2hhbmdlcyB0byBWQ01BOSBib2FyZCBzcGVjaWZpYyBmaWxlcwoKKiBBZGQgSTJDIHN1cHBvcnQgZm9yIE1HVDUxMDAgLyBNUEM1MjAwCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMSBTZXAgMjAwMzoKICBDaGFuZ2VkIGRlZmF1bHQgbWVtb3J5IG9wdGlvbiBvbiBNUEM4MjY2QURTIHRvIE5PVCBiZSBQYWdlIEJhc2VkCiAgSW50ZXJsZWF2ZSwgc2luY2UgdGhpcyBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdpdGggdGhlIHN0YW5kYXJkCiAgMTZNQiBESU1NCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTIgU2VwIDIwMDM6CiAgZml4IE1ha2VmaWxlIHNldHRpbmdzIGZvciBzazk4IGRyaXZlcgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDAzOgogIC0gbmV3IGJvYXJkcyBhZGRlZDogRFA0MDUsIEhVQjQwNSwgUExVNDA1LCBWT0g0MDUKICAtIHNvbWUgZXNkIGJvYXJkcyB1cGRhdGVkCiAgLSBjcHUvcHBjNHh4L3NkcmFtLmM6IGRpc2FibGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVmb3JlIHNldHRpbmcKICAgIGZpcnN0IHZhbHVlcwogIC0gY3B1L3BwYzR4eC80MDVfcGNpLmM6IHNldCB2ZW5kb3IgaWQgb24gUFBDNDA1RVAgc3lzdGVtcwoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMSBTZXAgMjAwMzoKICBhZGQgYnVybi1pbiB0ZXN0cyBmb3IgVFJBQiBib2FyZAoKKiBFbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgb24gTVBDNTIwMCBib2FyZAoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgU2VwIDIwMDM6CiAgLSBmaXggVVNCIGRhdGEgcG9pbnRlciBhc3NpZ25tZW50IGZvciBidWxrIG9ubHkgdHJhbnNmZXIuCiAgLSBwcmV2ZW50IHRvIGRpc3BsYXkgZXJhc2VkIGRpcmVjdG9yaWVzIGluIEZBVCBmaWxlc3lzdGVtLgoKKiBDaGFuZ2Ugb3V0cHV0IGZvcm1hdCBmb3IgTkFORCBmbGFzaCAtIG1ha2UgaXQgbG9vayBsaWtlIGZvciBvdGhlcgogIG1lbW9yeSwgdG9vCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuODoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCgoqIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDkgU2VwIDIwMDM6CiAgYWRkIEZBVCBzdXBwb3J0IGZvciBJREUsIFNDU0kgYW5kIFVTQgoKKiBQYXRjaGVzIGJ5IEdsZWIgTmF0YXBvdiwgMiBTZXAgMjAwMzoKICAtIGNsZWFudXAgb2YgUE9TVCBjb2RlIGZvciB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCiAgLSBNUEM4MjR4IGxvY2tzIHdheTAgb2YgZGF0YSBjYWNoZSBmb3IgdXNlIGFzIGluaXRpYWwgUkFNOwogICAgdGhpcyBwYXRjaCB1bmxvY2tzIGl0IGFmdGVyIHJlbG9jYXRpb24gdG8gUkFNIGFuZCBpbnZhbGlkYXRlcwogICAgdGhlIGxvY2tlZCBlbnRyaWVzLgoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDMwIEF1ZyAyMDAzOgogIG5ldyBJMkMgZHJpdmVyIGZvciBtcGMxMDcgYnJpZGdlLiBOb3cgd29ya3MgZnJvbSBmbGFzaC4KCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMTEgQXVnIDIwMDM6CiAgLSBKRkZTMjogZml4IHR5cG8gaW4gY29tbW9uL2NtZF9qZmZzMi5jCiAgLSBKRkZTMjogZml4IENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUyBvcHRpb24KICAtIEpGRlMyOiByZW1vdmUgbm9kZSB2ZXJzaW9uIDAgd2FybmluZwogIC0gSkZGUzI6IGFjY2VwdCBKRkZTMiBQQURESU5HIG5vZGVzCiAgLSBTWE5JODU1VDogYWRkIEFNMjlMVjgwMCBzdXBwb3J0CiAgLSBTWE5JODU1VDogbW92ZSBlbnZpcm9ubWVudCBmcm9tIEVFUFJPTSB0byBmbGFzaAogIC0gU1hOSTg1NVQ6IGJvb3QgZnJvbSBKRkZTMiBpbiBOT1Igb3IgTkFORCBmbGFzaAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTEgQXVnIDIwMDM6CiAgZml4ZXMgZm9yIEkyQyBvbiBNUEM4MjQwCiAgLSBmaXggaTJjX3dyaXRlIHJvdXRpbmUKICAtIGZpeCBpcHJvYmUgY29tbWFuZAogIC0gZWxpbWluYXRlcyB1c2Ugb2YgZ2xvYmFsIHZhcmlhYmxlcywgcGx1cyBkZWFkIGNvZGUsIGNsZWFudXAuCgoqIEFkZCBzdXBwb3J0IGZvciBVU0IgTWFzcyBTdG9yYWdlIERldmljZXMgKEJCQikKICAodGVzdGVkIHdpdGggVVNCIG1lbW9yeSBzdGlja3Mgb25seSkKCiogQXZvaWQgZmxpY2tlciBvbiBUUkFCJ3MgVkZECgoqIEFkZCBzdXBwb3J0IGZvciBTSzk4eHggZHJpdmVyCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCgoqIFN1cHBvcnQgSWNlQ3ViZSBib2FyZCBjb25maWd1cmF0aW9ucyB3aXRoIDEgeCBBTUQgQU0yOUxWMDY1ICg4IE1CKQogIG9yIDEgeCBBTTI5TFY2NTIgKHR3byBMVjA2NSBpbiBvbmUgY2hpcCA9IDE2IE1CKTsKICBSdW4gSVBCIGF0IDEzMyBNaHo7IGFkanVzdCB0aGUgTUlJIGNsb2NrIGZyZXF1ZW5jeSBhY2NvcmRpbmdseQoKKiBTZXQgQlJHX0NMSyBvbiBQTTgyNS84MjYgdG8gNjRNSHogKFZDT19PVVQgLyA0LCBpbnN0ZWFkIG9mIDE2ICBNSHopCiAgdG8gYWxsb3cgZm9yIG1vcmUgYWNjdXJhdGUgYmF1ZHJhdGUgc2V0dGluZ3MKICAoZXJyb3Igbm93IDAuNyUgYXQgMTE1IGticHMsIGluc3RlYWQgb2YgMy41JSBiZWZvcmUpCgoqIFBhdGNoIGJ5IEFuZHJlYXMgTW9ociwgNCBTZXAgMjAwMzoKICBGaXggYSBsb3Qgb2Ygc3BlbGxpbmcgZXJyb3JzCgoqIEFkZCBzdXBwb3J0IGZvciBQUENoYW1lbGVvbiBFdmFsIEJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBQM0c0IGJvYXJkCgoqIEZpeCBwcm9ibGVtIHdpdGggTUdUNTEwMCBGRUMgZHJpdmVyOiBhZGQgImVhcmx5IiBNQUMgYWRkcmVzcwogIGluaXRpYWxpemF0aW9uCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDcgQXVnIDIwMDM6CiAgY2hlY2sgQkNTUiB0byBkZXRlY3QgaWYgdGhlIGJvYXJkIGlzIGNvbmZpZ3VyZWQgaW4gUENJIG1vZGUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC43Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IFJhZ2h1IEtyaXNobmFwcmFzYWQsIDcgQXVnIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIEFkZGVyIElJIE1QQzg1MlQgbW9kdWxlCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTkgQXVnIDIwMDM6CiAgZml4IFRJIElubm92YXRvci9PTUFQMTUxMCBwaW4gY29uZmlncwoKKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDE4IEF1ZyAyMDAzCiAgLSBhZGQgc3VwcG9ydCBmb3IgYXJtOTI2ZWpzIGNwdSBjb3JlCiAgLSBhZGQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNjEwIElubm92YXRvciBCb2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNCBBdWcgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgYnppcDIgdW5jb21wcmVzc2lvbgoKKiBBZGQgR0NDIGxpYnJhcnkgdG8gZXhhbXBsZXMvTWFrZWZpbGUgc28gR0NDIHV0aWxpdHkgZnVuY3Rpb25zIHdpbGwKICBiZSByZXNvbHZlZCwgdG9vCgoqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQgdXNpbmcgc29mdHdhcmUgSTJDIGRyaXZlcgogIChiZWNhdXNlIG9mIGJldHRlciByZXNwb25zZSB0byBpcHJvYmUgY29tbWFuZCk7IGZpeCBwcm9ibGVtIHdpdGgKICAicmVzZXQiIGNvbW1hbmQKCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEF1ZyAyMDAzOgogIEFkZGVkIENPTkZJR19CT09UUF9ETlMyIGFuZCBDT05GSUdfQk9PVFBfU0VORF9IT1NUTkFNRSB0bwogIENPTkZJR19CT09UUF9NQUtTIChzZWUgUkVBRE1FKS4KCiogRml4IElDVTg2MiBlbnZpcm9ubWVudCBwcm9ibGVtCgoqIEZpeCBSQU0gc2l6ZSBkZXRlY3Rpb24gZm9yIFJNVSBib2FyZAoKKiBJbXBsZW1lbnQgInJlc2V0IiBmb3IgTUdUNTEwMC9NUEM1MjAwIHN5c3RlbXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC42Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1ha2UgRXRoZXJuZXQgYXV0b25lZ290aWF0aW9uIG9uIElOQ0EtSVAgd29yayBmb3IgYWxsIGNsb2NrIHJhdGVzOwogIGFsbG93IHNlbGVjdGlvbiBvZiBjbG9jayBmcmVxdWVuY3kgYXMgIm1ha2UiIHRhcmdldAoKKiBJbXBsZW1lbnQgbWVtb3J5IGF1dG9zaXppbmcgY29kZSBmb3IgSWNlQ3ViZSBib2FyZHMKCiogQ29uZmlndXJlIG5ldHdvcmsgcG9ydCBvbiBJTkNBLUlQIGZvciBhdXRvbmVnb3RpYXRpb24KCiogRml4IG92ZXJmbG93IHByb2JsZW0gaW4gbmV0d29yayB0aW1lb3V0IGNvZGUKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgOCBBdWcgMjAwMzoKICBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAgKGNyYzMyX25vX2NvbXAsIHRvbykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBVcGRhdGUgZm9yIFRRTSBib2FyZCBkZWZhdWx0czoKICBkaXNhYmxlIGNsb2Nrc19pbl9taHosIGVuYWJsZSBib290IGNvdW50IGxpbWl0CgoqIFJlbW92ZWQgdG9vbHMvZ2RiIGZyb20gIm1ha2UgYWxsIiB0YXJnZXQuICBBZGRlZCBtYWtlIHRhcmdldCAiZ2RidG9vbHMiCiAgaW4gdG9wbGV2ZWwgZGlyZWN0b3J5IGluc3RlYWQuICBSZW1vdmVkIGFzdGVzdC5jIGZyb20gdG9vbHMvZ2RiIGJlY2F1c2UKICBpdCBpcyBubyBsb25nZXIgcmVsZXZhbnQuCgoqIEZpeCBQQ0kgc3VwcG9ydCBmb3IgTVBDNTIwMCAvIEljZUN1YmUgQm9hcmQKCiogTWFwIElTUDEzNjIgVVNCIE9URyBjb250cm9sbGVyIGZvciBOU0NVIGJvYXJkCgoqIFBhdGNoIGJ5IEJyYWQgUGFya2VyLCAwMiBBdWcgMjAwMzoKICBmaXggc2M1MjBfY2RwIHByb2JsZW1zCgoqIEltcGxlbWVudCBCb290IEN5Y2xlIERldGVjdGlvbiAoUmVxLiAyLjMgb2YgT1NETCBDR0wgUmVxaXJlbWVudHMpCgoqIEFsbG93IGVyYXNlIGNvbW1hbmQgdG8gY3Jvc3MgZmxhc2ggYmFuayBib3VuZGFyaWVzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjEgSnVsIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEx5bnV4V29ya3MgS2VybmVsIERvd25sb2FkYWJsZSBJbWFnZXMgKEtESXMpLgogIEJvdGggTHlueE9TIGFuZCBCbHVlQ2F0IGxpbnV4IEtESXMgYXJlIHN1cHBvcnRlZC4KCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjUgSnVsIDIwMDM6CiAgdXNlIG1vcmUgcmVsaWFibGUgcmVzZXQgZm9yIE9NQVAvOTI1VAoKKiBQYXRjaCBieSBOeWUgTGl1LCAyNSBKdWwgMjAwMzoKICBmaXggdHlwbyBpbiBtcGM4eHguaAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNCBKdWwgMjAwMzoKICBGaXhlcyBmb3IgY21kX25hbmQuYzoKICAtIEZpeGVkIG51bGwgZGVyZWZlcmVjZSB3aGljaCBjb3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IEVDQyB2YWx1ZXMuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciBkZXZpY2VzIHdpdGggbm8gUmVhZHkvQnVzeSBzaWduYWwgaG9va2VkIHVwLgogIC0gQWRkZWQgT01BUDE1MTAgcmVhZC93cml0ZSBwcm90ZWN0IGhhbmRsaW5nLgogIC0gRml4ZWQgbmFuZC5oJ3MgRUNDUE9TLiBBIGNvbmZsaWN0IGV4aXN0ZWQgd2l0aCBQT1M1IGFuZCBiYWRibG9jawogICAgZm9yIG5vbi1KRkZTMi4KICAtIFN3aXRjaGVkIGRlZmF1bHQgRUNDIHRvIGJlIEpGRlMyLgoKKiBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAKCiogUHJvdmlkZSBjb25zaXN0ZW50IGludGVyZmFjZSB0byBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MKICB0aGUgJ2dsb2JhbF9kYXRhJyBzdHJ1Y3R1cmUKICBQcm92aWRlIGEgZG9jL1JFQURNRS5zdGFuZGFsb25lIG1vcmUgdXNlZnVsIHRvIHVzZXJzL2RldmVsb3BlcnMuCgoqIE1ha2UgSWNlQ3ViZSBNR1Q1MTAwIEZFQyBkcml2ZXIgd29yawoKKiBJbXBsZW1lbnQgbmV3IG1lY2hhbmlzbSB0byBleHBvcnQgVS1Cb290J3MgZnVuY3Rpb25zIHRvIHN0YW5kYWxvbmUKICBhcHBsaWNhdGlvbnM6IGluc3RlYWQgb2YgdXNpbmcgKFBQQy1zcGVjaWZpYykgc3lzdGVtIGNhbGxzIHdlIG5vdwogIHVzZSBhIGp1bXAgdGFibGU7IHBsZWFzZSBzZWUgZG9jL1JFQURNRS5zdGFuZGFsb25lIGZvciBkZXRhaWxzCgoqIFBhdGNoIGJ5IERhdmUgV2VzdHdvb2QsIDI0IEp1bCAyMDAzOgogIGFkZGVkIHN1cHBvcnQgZm9yIFVuaXR5IE9TIChhIHByb3ByaWV0YXJ5IE9TKQoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyMyBKdWwgMjAwMzoKICBhZGQgImltbHMiIGNvbW1hbmQgdG8gcHJpbnQgZmxhc2ggdGFibGUgb2YgY29udGVudHMKCiogRml4IGNvbGQgYm9vdCBkZXRlY3Rpb24gZm9yIGxvZyBidWZmZXIgcmVzZXQKCiogUmV0dXJuIGVycm9yIGZvciBpbnZhbGlkIGxlbmd0aCBzcGVjaWZpZXJzIHdpdGggImNwLlgiIGV0Yy4KCiogRml4IHN0YXJ0dXAgcHJvYmxlbSBvbiBNSVBTCgoqIEFsbG93IGZvciBDT05GSUdfU1BMQVNIX1NDUkVFTiBldmVuIHdoZW4gbm8gZXhwbGljaXQKICBiaXRtYXAgc3VwcG9ydCBpcyBjb25maWd1cmVkCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxOCBKdWwgMjAwMzoKICAtIGZpeCBlbmRpbmFuZXNzIHByb2JsZW0gaW4gY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjMS5jCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOCBKdWwgMjAwMzoKICAtIGZpeCBtZW1vcnkgY29uZmlndXJhdGlvbiBmb3IgTUlQNDA1VAogIC0gZml4IHByaW50b3V0IG9mIGJhdWRyYXRlIGZvciAibG9hZGIgPGxvYWRhZGRyPiA8YmF1ZHJhdGU+IgoKKiBDbGVhbnVwIG9mIFRRTTgyeHggY29uZmlndXJhdGlvbnM7IHVzZSAib2ZmaWNpYWwiIGJvYXJkIHR5cGVzCiAgdG8gbWFrZSBzZWxlY3Rpb24gZWFzaWVyLgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBKdWwgMjAwMzoKICBhZGQgZGVsYXkgdG8gZ2V0IEkyQyB3b3JraW5nIHdpdGggImltbSIgY29tbWFuZCBhbmQgczNjMjR4MF9pMmMuYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNyBKdWx5IDAzOgogIC0gRml4ZWQgYnVnIGluIE9NQVAxNTEwIGJhdWQgcmF0ZSBkaXZpc29yIHNldHRpbmdzLgoKKiBQYXRjaCBieSBOeWUgTGl1LCAxNiBKdWx5IDIwMDM6CiAgTVBDODYwRkFEUyBmaXhlczoKICAtIGFkZCBNUEM4NnhBRFMgc3VwcG9ydCAodXNlcyBNUEM4NnhBRFMuaCkKICAtIGFkZCA4NjZQL1QgY29yZSBzdXBwb3J0IChhbHNvIE1QQzg1OVQvTVBDODU5RFNML01QQzg1MlQpCiAgICBvIFBMUFJDUiBjaGFuZ2VzCiAgICBvIEJSRyBjaGFuZ2VzIChFWFRBTC9YVEFMIHJlc3RyaWN0ZWQgdG8gMTBNSHopCiAgICBvIGRvbid0IHRydXN0IGdjbGsoKSBzb2Z0d2FyZSBtZWFzdXJlbWVudCBieSBkZWZhdWx0LCBkZXBlbmQgb24KICAgICAgQ09ORklHXzh4eF9HQ0xLX0ZSRVEKICAtIGFkZCBEUkFNIFNJTU0gbm90IGluc3RhbGxlZCBkZXRlY3Rpb24KICAtIHVzZSBtb3JlICJjb3JyZWN0IiBTRFJBTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQogIC0gYWxsb3cgZGlmZmVyZW50IFNEUkFNIHNpemVzICg4eHhBRFMgaGFzIDhNKQogIC0gZGVmYXVsdCBERVIgaXMgMAogIC0gcmVtb3ZlIHVudXNlZCBNQU1SIGRlZmluZXMgZnJvbSBGQURTODYwVC5oIChhbGwgZG9uZSBpbiBmYWRzLmMpCiAgLSByZW5hbWUgTUFNUi9NQk1SIGRlZmluZXMgdG8gYmUgbW9yZSBjb25zaXN0ZW50LiBTaG91bGQgZXZlbnR1YWxseQogICAgYmUgbWVyZ2VkIGludG8gTXhNUiB0byBiZXR0ZXIgcmVmbGVjdCB0aGUgUG93ZXJRVUlDQyBkYXRhc2hlZXQuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE2IEp1bCAyMDAzOgogIHN1cHBvcnQgbmV3IE1vdG9yb2xhIFBRMkZBRFMtWlUgZXZhbHVhdGlvbiBib2FyZCB3aGljaCByZXBsYWNlZAogIE1QQzgyNjBBRFMgYW5kIE1QQzgyNjZBRFMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC40Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBJY2VDdWJlIGJvYXJkICh3aXRoIE1HVDUxMDAgYW5kIE1QQzUyMDAgQ1BVcykKCiogQWRkIHN1cHBvcnQgZm9yIE1HVDUxMDAgYW5kIE1QQzUyMDAgcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTUgSnVsIDIwMDM6CiAgdXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDA0IEp1bCAyMDAzCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBhcm05MjV0IGNwdSBjb3JlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE1MTAgSW5ub3ZhdG9yIEJvYXJkCgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMTQgSnVsIDIwMDM6CiAgLSBhZGQgSTJDIHN1cHBvcnQgZm9yIHMzYzI0MDAgc3lzdGVtcyAodHJhYiBib2FyZCkKICAtIChyZS0pIGFkZCAicGluZyIgdG8gY29tbWFuZCB0YWJsZQoKKiBGaXggaGFuZGxpbmcgb2YgInNsb3ciIFBPU1Qgcm91dGluZXMKCiogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwMzoKICAtIENvcnJlY3QgZmxhc2ggYW5kIEpGRlMyIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMKICAtIGZpeCBQVlIgdmFsdWVzIGFuZCBjbG9jayBnZW5lcmF0aW9uIGZvciBQb3dlclFVSUNDIElJIGZhbWlseQogICAgKDgyNzAvODI3NS84MjgwKQoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAwOCBKdWwgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBNNjhLIHRhcmdldHMKCiogUGF0Y2ggYnkgS2VuIENob3UsIDMgSnVsOgogIC0gRml4IFBDSSBjb25maWcgdGFibGUgZm9yIEEzMDAwCiAgLSBGaXggaW9iYXNlIGZvciBuYXRzZW1pLmMKICAgIChQQ0lfQkFTRV9BRERSRVNTXzAgaXMgdGhlIElPIGJhc2UgcmVnaXN0ZXIgZm9yIERQODM4MTUpCgoqIEFsbG93IHRvIGVuYWJsZSAic2xvdyIgUE9TVCByb3V0aW5lcyBieSBrZXkgcHJlc3Mgb24gcG93ZXItb24KKiBGaXggdGVtcGVyYXR1cmUgZGVwZW5kZW5kIHN3aXRjaGluZyBvZiBMQ0QgYmFja2xpZ2h0IG9uIExXTU9OCiogVHdlYWsgb3V0cHV0IGZvcm1hdCBmb3IgTFdNT04KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBKdWwgMjAwMzoKICAtIEZpeCBidWcgaW4gQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUuCiAgLSBBUjQwNSBjb25maWcgdXBkYXRlZC4KICAtIE9DUlRDL09SU0c6IGJzcCBjb21tYW5kIGFkZGVkLgogIC0gQVNINDA1IGJzcCB1cGRhdGUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgTlNDVSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODIzTSwgVFFNODUwTSwgVFFNODU1TSBhbmQgVFFNODYwTSBtb2R1bGVzCgoqIEFkZCBzdXBwb3J0IGZvciBBbTI5TFYxNjBNTCwgQW0yOUxWMzIwTUwsIGFuZCBBbTI5TFY2NDBNTAogIG1pcnJvciBiaXQgZmxhc2ggb24gVFFNOHh4TSBtb2R1bGVzCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAzMCBKdW4gMjAwMzoKICBnZXQgcmlkIG9mIE1LX0NNRF9FTlRSWSBtYWNybzsgdXBkYXRlIGRvYy9SRUFETUUuY29tbWFuZAoKKiBQYXRjaCBieSBTZWIgSmFtZXMsIDMwIEp1biAyMDAzOgogIEltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBJMkMgY29uZmlndXJhdGlvbiBpbiBSRUFETUUKCiogRml4IHByb2JsZW1zIHdpdGggcHJldmlvdXMgbG9nIGJ1ZmZlciAiZml4ZXMiCgoqIEZpeCBtaW5vciBoZWxwIHRleHQgaXNzdWVzCgoqICJsb2cgYXBwZW5kIiBkaWQgbm90IGFwcGVuZCBhIG5ld2xpbmUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEZpeCBzb21lIG1pc3NpbmcgY29tbWFuZHMsIGNsZWFudXAgaGVhZGVyIGZpbGVzCiAgKGF1dG9zY3JpcHQsIGJtcCwgYnNwLCBmYXQsIG1tYywgbmFuZCwgcG9ydGlvLCAuLi4pCgoqIFJld3JpdGUgY29tbWFuZCBsb29rdXAgYW5kIGhlbHAgY29tbWFuZCAoZml4IHByb2JsZW1zIHdpdGggYnViYmxlCiAgc29ydCB3aGVuIHNvcnRpbmcgY29tbWFuZCBuYW1lIGxpc3QpLiBNaW5vciBjbGVhbnVwIGhlcmUgYW5kIHRoZXJlLgoKKiBNZXJnZSBmcm9tICJzdGFibGUgYnJhbmNoIiwgdGFnIExBQkVMXzIwMDNfMDZfMjhfMTgwMC1zdGFibGU6CiAgLSBBbGxvdyB0byBjYWxsIHN5c21vbiBmdW5jdGlvbiBpbnRlcmFjdGl2ZWx5CiAgLSBQSUMgb24gTFdNT04gYm9hcmQgbmVlZHMgZGVsYXkgYWZ0ZXIgcG93ZXItb24KICAtIEFkZCBtaXNzaW5nIFJTUiBkZWZpbml0aW9ucyBmb3IgTVBDOHh4CiAgLSBJbXByb3ZlIGxvZyBidWZmZXIgaGFuZGxpbmc6IGd1YXJhbnRlZSBjbGVhbiByZXNldCBhZnRlciBwb3dlci1vbgogIC0gQWRkIHN1cHBvcnQgZm9yIEVYQklUR0VOIGJvYXJkIChha2EgImdlbmllIikKICAtIEFkZCBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKCiogQ29kZSBjbGVhbnVwOgogIC0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCB0cmFpbGluZyBlbXB0eSBsaW5lcywgQysrIGNvbW1lbnRzLCBldGMuCiAgLSBzcGxpdCBjbWRfYm9vdC5jIChzZXBhcmF0ZSBjbWRfYmRpbmZvLmMgYW5kIGNtZF9sb2FkLmMpCgoqIFBhdGNoZXMgYnkgS2VubmV0aCBKb2hhbnNzb24sIDI1IEp1biAyMDAzOgogIC0gbWFqb3IgcmV3b3JrIG9mIGNvbW1hbmQgc3RydWN0dXJlCiAgICAod29yayBkb25lIG1vc3RseSBieSBNaWNoYWwgQ2VuZHJvd3NraSBhbmQgSm9ha2ltIEtyaXN0aWFuc2VuKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDI2IEp1biAyMDAzOgogIC0gY3NiMjI2IGNvbmZpZ3VyYXRpb24gdXBkYXRlZAogIC0gY3JlZGl0cyBmb3IgbG9nb2RsIHBvcnQgdXBkYXRlZAogIC0gaW5ub2tvbSBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGxvZ29kbCB0cmVlIHVwZGF0ZSwgc3RpbGwgd2l0aCBjb2Rpbmcgc3R5bGUgaW5jb25zaXN0ZW5jaWVzCiAgLSBhZGRlZCBPQ00gZm9yIHBwYzQwNSB3YXJuaW5nIHRvIFJFQURNRQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjUgSnVuIDIwMDM6CiAgdXBkYXRlIE5ldFZpYSB3aXRoIFYyIGJvYXJkIHN1cHBvcnQKCiogSGVhZGVyIGZpbGUgY2xlYW51cCBmb3IgQVJNCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDI0IEp1biAyMDAzOgogIC0gbWFrZSBzdXJlIHRvIHVzZSBvbmx5IFUtYm9vdCBwcm92aWRlZCBoZWFkZXIgZmlsZXMKICAtIGZpeCBwcm9ibGVtcyB3aXRoICIucm9kYXRhLnN0cjEuNCIgc2VjdGlvbiBhcyB1c2VkIGJ5IEdDQy0zLngKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBKdW4gMjAwMzoKICAtIFVwZGF0ZSBlc2QgQVNINDA1IGJvYXJkIGZpbGVzLgogIC0gVXBkYXRlIGVzZCBEQVNBX1NJTSBjb25maWcgZmlsZS4KICAtIEFkZCBwaW5nIGNvbW1hbmQgdG8gc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMyBKdW4gMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjMgSnVuIDIwMDM6CiAgLSBjbGVhbnVwIG9mIEdDQyAzLnggY29tcGlsZXIgd2FybmluZ3MKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDQgSnVuIDIwMDM6CiAgYWRkIGxhcmdlIG1lbW9yeSBzdXBwb3J0IGZvciBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CiAgLSBFbmFibGVkIHN0YW5kYXJkIHUtYm9vdCBkZXZpY2UgYWJzdHJhY3Rpb24gZm9yIEFSTQogIC0gRW5hYmxlZCBjb25zb2xlIGRldmljZSBmb3IgQVJNCiAgLSBJbml0aWxpemVkIGJpX2JhdWRyYXRlIGZvciBBUk0KCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDIzIEFwciAyMDAzOgogIGZpeCBieXRlIG9yZGVyIGZvciA4MjR4IEkyQyBhZGRyZXNzZXMgKHdyaXRlIG9wKQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMCBKdW4gMjAwMzoKICAtIGh5bW9kIHVwZGF0ZQogIC0gY2xlYW51cCAoZXNwZWNpYWxseSBmb3IgZ2NjLTMueCBjb21waWxlcnMpCgoqIFBhdGNoIGJ5IFRvbSBHdWlsbGlhbXMsIDIwIEp1biAyMDAzOgogIGFkZGVkIENPTkZJR183NTBGWCBzdXBwb3J0IGZvciBJQk0gNzUwRlggcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBEZXZpbiBDcnVtYiwgMDIgQXByIDIwMDM6CiAgRml4IGNsb2NrIGRpdmlkZXIgcm91bmRpbmcgcHJvYmxlbSBpbiBkcml2ZXJzL3NlcmlhbC5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CiAgLSBGaXhlZCBzbWM5MWMxMTEgZHJpdmVyIHRvIHN5bmMgd2l0aCB0aGUgdS1ib290IGVudmlyb25tZW50CiAgICAoZHJpdmVyL3NtYzkxYzExMS5jKS4KICAtIEFkZGVkIGV0aF9pbml0IGVycm9yIHJldHVybiBjaGVjayBpbiBOZXRMb29wIChuZXQvbmV0LmMpLgoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTkgSnVuZSAyMDAzOgogIEFkZGVkIHN1cHBvcnQgZm9yIEEzMDAwIFNCQyBib2FyZCAoQXJ0aXMgTWljcm9zeXN0ZW1zIEluYy4pCgoqIFBhdGNoZXMgYnkgTXVycmF5IEplbnNlbiwgMTcgSnVuIDIwMDM6CiAgLSBIeW1vZCBib2FyZCBkYXRhYmFzZSBtb2RzOiBhZGQgIndobyIgZmllbGQgYW5kIG5ldyB4aWxpbnggY2hpcCB0eXBlcwogIC0gcHJvdmlkZSBuZXcgImluaXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gc28gY29kZSBleHRlcm5hbCB0bwogICAgImNvbW1vbi9tYWluLmMiIGNhbiB1c2UgdGhlICJyZXNldF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBiZWZvcmUKICAgIGVudGVyaW5nIHRoZSBtYWluIGxvb3AKICAtIGFkZCBEVFQgc3VwcG9ydCBmb3IgYWRtMTAyMSAobmV3IGZpbGUgZHR0L2FkbTEwMjEuYzsgY29uZmlnCiAgICBzbGlnaHRseSBkaWZmZXJlbnQuIHNlZSBpbmNsdWRlL2NvbmZpZ3MvaHltb2QuaCBmb3IgYW4gZXhhbXBsZQogICAgKHJlcXVpcmVzIENPTkZJR19EVFRfQURNMTAyMSwgQ09ORklHX0RUVF9TRU5TT1JTLCBhbmQKICAgIENGR19EVFRfQURNMTAyMSBkZWZpbmVkKQogIC0gYWRkIG5ldyAiZWVwcm9tX3Byb2JlKCkiIGZ1bmN0aW9uIHdoaWNoIGhhcyBzaW1pbGFyIGFyZ3MgYW5kCiAgICBiZWhhdmVzIGluIGEgc2ltaWxhciB3YXkgdG8gImVlcHJvbV9yZWFkKCkiIGV0Yy4KICAtIGFkZCA4MjYwIEZDQyBldGhlcm5ldCBsb29wYmFjayBjb2RlIChuZXcgImV0aF9sb29wYmFja190ZXN0KCkiCiAgICBmdW5jdGlvbiB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmluaW5nIENPTkZJR19FVEhFUl9MT09QQkFDS19URVNUKQogIC0gZ2RidG9vbHMgY29weXJpZ2h0IHVwZGF0ZQogIC0gZW5zdXJlIHRoYXQgc2V0X21zcigpIGV4ZWN1dGVzIHRoZSAic3luYyIgYW5kICJpc3luYyIgaW5zdHJ1Y3Rpb25zCiAgICBhZnRlciB0aGUgIm10bXNyIiBpbnN0cnVjdGlvbiBpbiBjcHUvbXBjODI2MC9pbnRlcnJ1cHRzLmMKICAtIDgyNjAgSS9PIHBvcnRzIGZpeDogT3BlbiBEcmFpbiBzaG91bGQgYmUgc2V0IGxhc3Qgd2hlbiBjb25maWd1cmluZwogIC0gYWRkIFNJVSBJUlEgZGVmaW5lcyBmb3IgODI2MAogIC0gYWxsb3cgTERTQ1JJUFQgb3ZlcnJpZGUgYW5kIE9CSkNGTEFHUyBpbml0aWFsaXphdGlvbjogY2hhbmdlIHRvCiAgICBjb25maWcubWsgdG8gYWxsb3cgYm9hcmQgY29uZmlndXJhdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIEdOVQogICAgbGlua2VyIHNjcmlwdCwgc2VsZWN0ZWQgdmlhIHRoZSBMRFNDUklQVCwgbWFrZSB2YXJpYWJsZSwgYW5kIHRvCiAgICBnaXZlIGFuIGluaXRpYWwgdmFsdWUgdG8gdGhlIE9CSkNGTEFHUyBtYWtlIHZhcmlhYmxlCiAgLSA4MjYwIGkyYyBlbmhhbmNlbWVudDoKICAgIG8gY29ycmVjdGx5IGV4dGVuZHMgdGhlIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGFsbAogICAgICBxdWV1ZWQgbWVzc2FnZXMgZm9yIGJvdGggdHJhbnNtaXQgYW5kIHJlY2VpdmUKICAgIG8gd2lsbCBub3QgY29udGludWUgd2l0aCByZWNlaXZlIGlmIHRyYW5zbWl0IHRpbWVzIG91dAogICAgbyBlbnN1cmVzIHRoYXQgdGhlIGVycm9yIGNhbGxiYWNrIGlzIGRvbmUgZm9yIGFsbCBxdWV1ZWQgdHgKICAgICAgYW5kIHJ4IG1lc3NhZ2VzCiAgICBvIGNvcnJlY3RseSBkZXRlY3RzIGJvdGggdHggYW5kIHJ4IHRpbWVvdXRzLCBvbmx5IGRlbGl2ZXJzIG9uZSB0bwogICAgICB0aGUgY2FsbGJhY2ssIGFuZCBkb2VzIG5vdCBvdmVyd3JpdGUgYW4gZWFybGllciBlcnJvcgogICAgbyBsb2dpYyBpbiBpMmNfcHJvYmUgbm93IGNvcnJlY3QKICAtIGFkZCAidnByaW50ZigpIiBmdW5jdGlvbiBzbyB0aGF0ICJwYW5pYygpIiBmdW5jdGlvbiBjYW4gYmUKICAgIHRlY2huaWNhbGx5IGNvcnJlY3QKICAtIG1hbnkgSHltb2QgYm9hcmQgY2hhbmdlcwoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTQgSnVuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTG9nb3Ryb25pYyBETCBkYXRhbG9nZ2VyIGJvYXJkCiAgLSBjbGVhbnVwIHNlcmlhbCBsaW5lIGFmdGVyIGtlcm1pdCBiaW5hcnkgZG93bmxvYWQKICAtIGFkZCBkZWJ1Z1ggbWFjcm8gKGRlYnVnIGxldmVsIHN1cHBvcnQpCiAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0LgoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTIgSnVuIDIwMDM6CiAgLSByZXdyaXRlIG9mIHRoZSBTM0MyNFgwIHJlZ2lzdGVyIGRlZmluaXRpb25zIHN0dWZmCiAgLSAiZHJpdmVyIiBmb3IgdGhlIGJ1aWx0LWluIFMzQzI0WDAgUlRDCgoqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTIgSnVuIDIwMDM6CiAgLSBBZGQgTUlJIHN1cHBvcnQgYW5kIEV0aGVybmV0IFBIWSBpbml0aWFsaXphdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZAogIC0gRml4IGluY29ycmVjdCBTSVVNQ1IgaW5pdGlhbGlzYXRpb24gY2F1c2VkIGJ5IHdyb25nIEhhcmQgUmVzZXQKICAgIGNvbmZpZ3VyYXRpb24gd29yZCBzdXBwbGllZCBieSBGUEdBIG9uIHNvbWUgTVBDODI2MEFEUyBib2FyZHMKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDEwIEp1biAyMDAzOgogIFVuaWZ5IHN0YXR1cyBMRUQgaW50ZXJmYWNlCgoqIEFkZCBzdXBwb3J0IGZvciBEUzEyODg3IFJUQzsgYWRkIFJUQyBzdXBwb3J0IGZvciBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMTEgSnVuIDIwMDM6CiAgTW9kaWZpY2F0aW9ucyBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0CiAgLSBBZGQgQXRtZWwgRGF0YUZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuCiAgLSBBZGQgcG9zc2liaWxpdHkgdG8gYm9vdCBhIExpbnV4IGZyb20gRGF0YUZsYXNoIHdpdGggQk9PVE0gY29tbWFuZC4KICAtIEFkZCBGbGFzaCBkZXRlY3Rpb24gb24gQXRtZWwgQVQ5MVJNOTIwMERLCiAgICAoYmV0d2VlbiBBdG1lbCBBVDQ5QlYxNjE0IGFuZCBBVDQ5QlYxNjE0QSBmbGFzaGVzKQogIC0gUmVwbGFjZSBvbGQgRXRoZXJuZXQgUEhZIGxheWVyIGZ1bmN0aW9ucwogIC0gQ2hhbmdlIGxpbmsgYWRkcmVzcwoKKiBQYXRjaCBieSBGcmFuayBTbWl0aCwgOSBKdW4gMjAwMzoKICB1c2UgQ1JJVF9FWENFUFRJT04gZm9yIG1hY2hpbmUgY2hlY2sgb24gNHh4CgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDEzIEp1biAyMDAzOgogIGFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSAiY2FyaW5mbyIgY29tbWFuZCBpbiBjbWRfaW1tYXAuYwoKKiBGaXggQ09ORklHX05FVF9NVUxUSSBzdXBwb3J0IGluIGluY2x1ZGUvbmV0LmgKCiogUGF0Y2hlcyBieSBLeWxlIEhhcnJpcywgMTMgTWFyIDIwMDM6CiAgLSBBZGQgRkFUIHBhcnRpdGlvbiBzdXBwb3J0CiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBGQVQKICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgdmlkZW8KICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgTU1DCiAgLS0tLQogIC0gRW5hYmxlIE1NQyBhbmQgRkFUIGZvciBsdWJib2NrIGJvYXJkCiAgLSBPdGhlciBtaXNjIGNoYW5nZXMgZm9yIGx1YmJvY2sgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCBBcHJpbCAwMiwgMjAwMzoKICBmaXggZm9yIFNNU0M5MTExMSBkcml2ZXIKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA0IEp1biAyMDAzOgogIG1ha2UgcHBjNDA1IGV0aGVybmV0IGRyaXZlciBjb21wYXRpYmxlIHdpdGggQ09ORklHX05FVF9NVUxUSSBvcHRpb24KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNSBKdW4gMjAwMzoKICAtIFBQQzR4eDogRml4IGJ1ZyBmb3IgaW5pdGlhbCBzdGFjayBpbiBkYXRhIGNhY2hlIGFzIHBvaW50ZWQgb3V0IGJ5CiAgICBUaG9tYXMgU2NoYWVmZXIgKHRzY2hhZWZlckBnaWdhLXN0cmVhbS5kZSkuIE5vdyBpbml0YWwgc3RhY2sgaW4KICAgIGRhdGEgY2FjaGUgY2FuIGJlIHVzZWQgZXZlbiBpZiB0aGUgY2hpcCBzZWxlY3QgaXMgaW4gdXNlLgogIC0gQ0ZHX1JYX0VUSF9CVUZGRVIgYWRkZWQgdG8gc2V0IHRoZSBldGhlcm5ldCByZWNlaXZlIGJ1ZmZlciBjb3VudAogICAgKHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pLgogIC0gQ2hhbmdlZCBjb25maWcgZmlsZXMgb2YgQ09ORklHX0VFUFJPMTAwIGJvYXJkcyB0byB1c2UgdGhlCiAgICBDRkdfUlhfRVRIX0JVRkZFUiBkZWZpbmUuCgoqIEFkZCBzdXBwb3J0IGZvciBSTVUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgYXQgMTAwLzUwIE1IegoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgSnVuIDIwMDM6CiAgbWFqb3IgcmVjb25zdHJ1Y3Rpb24gb2YgbmV0d29ya2luZyBjb2RlOwogIGFkZCAicGluZyIgc3VwcG9ydCAob3V0Z29pbmcgb25seSEpCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBKdW5lIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDVUIGJvYXJkCgoqIFBhdGNoZXMgYnkgVWRpIEZpbmtlbHN0ZWluLCAyIEp1bmUgMjAwMzoKICAtIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSBrZXlib2FyZHMsIGluaXRpYWxpemVkIGJ5IGRlZmluaW5nIGEKICAgIGJvYXJkLXNwZWNpZmljIGRydl9rZXlib2FyZF9pbml0IGFzIHdlbGwgYXMgZGVmaW5pbmcgQ09ORklHX0tFWUJPQVJEIC4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBSQkM4MjMgYm9hcmQuCiAgLSBjcHUvbXBjOHh4L2xjZC5jIG5vdyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZXMgdGhlCiAgICBIb3Jpem9udGFsIFBpeGVsIENvdW50IGZpZWxkLgoKKiBGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gQk9PVFAgKGRoY3BfbGVhc2V0aW1lIG9wdGlvbikKICBbcG9pbnRlZCBvdXQgYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMiBKdW4gMjAwM10KCiogUGF0Y2ggYnkgTWFyayBSYWtlcywgMTQgTWF5IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIEludGVsIGUxMDAwIGdpZyBjYXJkcy4KCiogUGF0Y2ggYnkgTnllIExpdSwgMyBKdW4gMjAwMzoKICBmaXggY3JpdGljYWwgdHlwbyBpbiBNQU1SIGRlZmluaXRpb24gKGluY2x1ZGUvbXBjOHh4LmgpCgoqIEZpeCByZXF1aXJlbWVudCB0byBhbGlnbiBVLUJvb3QgaW1hZ2Ugb24gMTYga0IgYm91bmRhcmllcyBvbiBQUEMuCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDIgSnVuIDIwMDMKICBNaW5vciBjaGFuZ2VzIGZvciBLVVA0SyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOSBNYXkgMjAwMzoKICBGaXhlZCByYXJwIGJvb3QgbWV0aG9kIGZvciBJQTMyIGFuZCBvdGhlciBsaXR0bGUtZW5kaWFuIENQVXMuCgoqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOCBNYXkgMjAwMzoKICBBZGRlZCBwb3J0IEkvTyBjb21tYW5kcy4KCiogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAyOCBNYXkgMjAwMwogIC0gY3B1L21wYzgyNHgvc3RhcnQuUzogZml4IHJlbG9jYXRpb24gY29kZSB3aGVuIGJvb3RpbmcgZnJvbSBSQU0KICAtIG1pbm9yIHBhdGNoZXMgZm9yIHV0eDgyNDUKCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAyOCBNYXkgMjAwMzoKICB4ODYgdXBkYXRlCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDkgTWF5IDIwMDMgKyAyNyBNYXkgMjAwMzoKICBhZGQgbmFuZCBmbGFzaCBzdXBwb3J0IHRvIFNYTkk4NTVUIGNvbmZpZ3VyYXRpb24KICBmaXgvZXh0ZW5kIG5hbmQgZmxhc2ggc3VwcG9ydDoKICAtIGZpeCAnbmFuZCBlcmFzZScgY29tbWFuZCBzbyBkb2VzIG5vdCBlcmFzZSBiYWQgYmxvY2tzCiAgLSBmaXggJ25hbmQgd3JpdGUnIGNvbW1hbmQgc28gZG9lcyBub3Qgd3JpdGUgdG8gYmFkIGJsb2NrcwogIC0gZml4IG5hbmRfcHJvYmUoKSBzbyBoYW5kbGVzIG5vIGZsYXNoIGRldGVjdGVkIHByb3Blcmx5CiAgLSBhZGQgZG9jL1JFQURNRS5uYW5kCiAgLSBhZGQgLmpmZnMyIGFuZCAub29iIG9wdGlvbnMgdG8gbmFuZCByZWFkL3dyaXRlCiAgLSBhZGQgJ25hbmQgYmFkJyBjb21tYW5kIHRvIGxpc3QgYmFkIGJsb2NrcwogIC0gYWRkICdjbGVhbicgb3B0aW9uIHRvICduYW5kIGVyYXNlJyB0byB3cml0ZSBKRkZTMiBjbGVhbiBtYXJrZXJzCiAgLSBtYWtlIE5BTkQgcmVhZC93cml0ZSBmYXN0ZXIKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDIzIE1heSAyMDAzOgogIFVwZGF0ZSBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBHZXQgKG1vc3RseSkgcmlkIG9mIENGR19NT05JVE9SX0xFTiBkZWZpbml0aW9uOyBjb21wdXRlIHJlYWwgbGVuZ3RoCiAgaW5zdGVhZCBDRkdfTU9OSVRPUl9MRU4gaXMgbm93IG9ubHkgdXNlZCB0byBkZXRlcm1pbmUgIF9hdF9jb21waWxlXwogIF90aW1lXyAgKCEpIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBlbWJlZGRlZCB3aXRoaW4gdGhlIFUtQm9vdCBpbWFnZSwKICBvciBpbiBhIHNlcGFyYXRlIGZsYXNoIHNlY3Rvci4KCiogQ2xlYW51cCBDRkdfREVSICNkZWZpbmVzIGluIGNvbmZpZyBmaWxlcyAod2QgbWFpbnRhaW5lZCBvbmx5KQoKKiBGaXggZGF0YSBhYm9ydCBleGNlcHRpb24gaGFuZGxpbmcgZm9yIGFybTkyMHQgQ1BVCgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbXMgd2l0aCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRG9uYWxkIFdoaXRlLCAyMSBNYXkgMjAwMzoKICBmaXggY2FsY3VsYXRpb24gb2YgYmFzZSBhZGRyZXNzIGluIHBjaV9ob3NlX2NvbmZpZ19kZXZpY2UoKQoKKiBGaXggYnVnIGluIGNvbW1hbmQgbGluZSBwYXJzaW5nOiAiY21kMTtjbWQyIiBpcyBzdXBwb3NlZCB0byBhbHdheXMKICBleGVjdXRlICJjbWQyIiwgZXZlbiBpZiAiY21kMSIgZmFpbHMuIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudAogIHRvICJydW4gdmFyMSB2YXIyIiB3aGVyZSB0aGUgY29udGVudHMgb2YgInZhcjIiIHdpbGwgTk9UIGJlCiAgZXhlY3V0ZWQgd2hlbiBhIGNvbW1hbmQgaW4gInZhcjEiIGZhaWxzLgoKKiBBZGQgemVyby1jb3B5IHJhbWRpc2sgc3VwcG9ydCAocmVxdWlyZXMgY29ycmVzcG9uZGluZyBrZXJuZWwgc3VwcG9ydCEpCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAyMCBNYXkgMjAwMzoKICBJbiBwcmVwYXJhdGlvbiBmb3IgYW4gaXhwIHBvcnQsIHJlbmFtZSBjcHUveHNjYWxlIGFuZCBhcmNoLXhzY2FsZQogIGludG8gY3B1L3B4YSBhbmQgYXJjaC1weGEuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjMgTWF5IDIwMDM6CiAgLSBJQk0gUFBDNDA1RVAgcG9ydCBhZGRlZC4KICAtIENPTkZJR19VQVJUMV9DT05TT0xFIGFkZGVkLiBJZiBkZWZpbmVkIGludGVybmFsIFVBUlQxIChhbmQgbm90CiAgICBVQVJUMCkgaXMgdXNlZCBhcyBkZWZhdWx0IFUtQm9vdCBjb25zb2xlLiBQUEM0eHggb25seSEKICAtIGVzZCBBU0g0MDUgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkKS4KICAtIEJVQklOR0E0MDVFUCBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQgLSBJQk0gRXZhbCBCb2FyZCkuCiAgLSBlc2QgQ1BDSTQwNUFCIGJvYXJkIGFkZGVkLgogIC0gZXNkIFBNQzQwNSBib2FyZCBhZGRlZC4KICAtIFVwZGF0ZSBvZiBzb21lIGVzZCBib2FyZHMuCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOSBNYWkgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNS0zIGJvYXJkCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDIyIE1heSAyMDAzOgogIEZpeCBwcm9ibGVtIHdpdGggb25seSBwYXJ0aWFsbHkgY2xlYXJlZCAuYnNzIHNlZ21lbnQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEyIE1heSAyMDAzOgogIGdldCBQQ0kgdG8gd29yayBvbiBhIE1QQzgyNjZBRFMgYm9hcmQ7IGluY29ycG9yYXRlIGNoYW5nZSB0bwogIGNwdS9tcGM4MjYwL3BjaS5jIHRvIGVuYWJsZSBvdmVycmlkZXMgb2YgUENJIG1lbW9yeSBwYXJhbWV0ZXJzCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDEgTWF5IDIwMDM6CiAgbWlub3IgcGF0Y2hlcyBmb3IgdGhlIEZBRFM4eHgKCiogUGF0Y2ggYnkgVGhvbWFzIFNjaORmZXIsIDI4IEFwciAyMDAzOgogIEZpeCBTUEQgaGFuZGxpbmcgZm9yIDI1NiBFQ0MgRElNTSBvbiBXYWxudXQKCiogQWRkIHN1cHBvcnQgZm9yIGFyYml0cmFyeSBiaXRtYXBzIGZvciBUUkFCJ3MgIFZGRCBjb21tYW5kOwogIGFsbG93IHRvIHBhc3MgYm9vdCBiaXRtYXAgYWRkcmVzc2VzIGluIGVudmlyb25tZW50IHZhcmlhYmxlczsKICBhbGxvdyBmb3IgemVybyBib290IGRlbGF5CgoqIFBhdGNoIGJ5IENocmlzdGlhbiBHZWnfaW5nZXIsIDE5IE1heSAyMDAyOgogIE9uIFRSQUI6IHdhaXQgdW50aWwgdGhlIGR1bW15IGJ5dGUgaGFzIGJlZW4gY29tcGxldGVseSBzZW50CgoqIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMjIgQXByIDIwMDM6CiAgdXBkYXRlIGZvciBDcmF5TDEgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDIxIEFwciAyMDAzOgogIGFkZCBib290IHN1cHBvcnQgZm9yIEFSVE9TIChhIHByb3ByaWV0YXJ5IE9TKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMSBBcHIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMzOAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDI0IEphbiAyMDAzOgogIEZpeCBjb3VudGluZyBvZiBleHRlbmRlZCBwYXJ0aXRpb25zIGluIGRpc2tib290IGNvbW1hbmQKCiogUGF0Y2ggYnkgQ2hyaXN0b3BoZSBMaW5kaGVpbWVyLCAyMCBNYXkgMjAwMzoKICBhbGxvdyB0aGUgdXNlIG9mIENGR19MT0FEUyB3aGVuIENGR19OT19GTEFTSCBpcyBzZXQKCiogRml4IFNEUkFNIHRpbWluZyBvbiBQdXJwbGUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBvbiBBVEMgYm9hcmQKICAoaW5jbHVkZXMgc3VwcG9ydCBmb3IgSW50ZWwgODIzNjUgYW5kIGNvbXBhdGlibGUgUEMgQ2FyZCBjb250cm9sbGVycywKICBhbmQgWWVudGEtY29tcGF0aWJsZSBQQ0ktdG8tQ2FyZEJ1cyBjb250cm9sbGVycykKCiogUGF0Y2ggYnkgTWF0aGlqcyBIYWFybWFuLCAwOCBNYXkgMjAwMzoKICBBZGQgbGFuOTFjOTYgZHJpdmVyICh0ZXN0ZWQgb24gTHViYm9jayBhbmQgY3VzdG9tIFBYQTI1MCBib2FyZCBvbmx5KQoKKiBGaXggcHJvYmxlbSB3aXRoIHVzYWdlIG9mICJ0cnVlIiAodW5kZWZpbmVkIGluIGN1cnJlbnQgdmVyc2lvbnMgb2YgYmZkLmgpCgoqIEFkZCBzdXBwb3J0IGZvciBQcm9tZXNzIEFUQyBib2FyZAoKKiBQYXRjaCBieSBLZWl0aCBPdXR3YXRlciwgMjggQXByIDIwMDM6CiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIGFuZCBhZGRpdGlvbnMgdG8gR0VOODYwVCBib2FyZCBzcGVjaWZpYyBjb2RlLgogIC0gQWRkZWQgR0VOODYwX1NDIHZhcmlhbnQgdG8gR0VOODYwVC4KICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgdG8gR0VOODYwVCBkb2N1bWVudGF0aW9uLgogIC0gQ29ycmVjdCBkdXBsaWNhdGUgZW50cnkgaW4gVS1Cb290IENSRURJVFMgZmlsZS4KICAtIEFkZCBHRU44NjBUX1NDIGVudHJ5IGluIE1BSU5UQUlORVJTIGZpbGUuCiAgLSBVcGRhdGUgQ1JFRElUUyBmaWxlIHdpdGggR0VOODYwVF9TQyBpbmZvLgoKKiBVcGRhdGUgU21pdGhzIEFlcm9zcGFjZSBhZGRyZXNzZXMgaW4gTUFJTlRBSU5FUlMgZmlsZQoKKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gaHVzaCdzIHZlcnNpb24gb2YgInJ1biIgY29tbWFuZAoKKiBMV01PTiBleHRlbnNpb25zOgogIC0gU3BsYXNoc2NyZWVuIHN1cHBvcnQKICAtIG1vZGVtIHN1cHBvcnQKICAtIHN5c21vbiBzdXBwb3J0CiAgLSB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgZW5hYmxpbmcgb2YgTENECgoqIEFsbG93IGJvb3RpbmcgZnJvbSBvbGQgIlBQQ0Jvb3QiIGRpc2sgcGFydGl0aW9ucwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI1NSBCb2FyZCAvIE1QQzgyNTUgQ1BVCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIHN1cmUgQmxvY2sgTG9jayBCaXRzIGdldCBjbGVhcmVkIGluIFIzNjBNUEkgZmxhc2ggZHJpdmVyCgoqIE1QQzgyMyBMQ0QgZHJpdmVyOiBGaWxsIGNvbG9yIG1hcCBiYWNrd2FyZHMsIHRvIGFsbG93IGZvciBzdGVhZHkKICBkaXNwbGF5IHdoZW4gTGludXggdGFrZXMgb3ZlcgoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUyAodGhpcyB0aW1lIGZvciByZWFsKS4KCiogQWRkIHN1cHBvcnQgZm9yICJibXAgaW5mbyIgYW5kICJibXAgZGlzcGxheSIgY29tbWFuZHMgdG8gbG9hZAogIGJpdG1hcCBpbWFnZXM7IHRoaXMgY2FuIGJlIHVzZWQgKGZvciBleGFtcGxlIGluIGEgInByZWJvb3QiCiAgY29tbWFuZCkgdG8gZGlzcGxheSBhIHNwbGFzaCBzY3JlZW4gdmVyeSBxdWlja2x5IGFmdGVyIHBvd2Vyb24uCgoqIEFkZCBzdXBwb3J0IGZvciAxMzMgTUh6IGNsb2NrIG9uIElOQ0EtSVAgYm9hcmQKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDEwIEFwciAyMDAzOgogIFVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKKiBBZGQgbmV3IG1lYW5pbmcgdG8gImF1dG9zdGFydCIgZW52aXJvbm1lbnQgdmFyaWFibGU6CiAgSWYgc2V0IHRvICJubyIsIGEgc3RhbmRhbG9uZSBpbWFnZSBwYXNzZWQgdG8gdGhlCiAgImJvb3RtIiBjb21tYW5kIHdpbGwgYmUgY29waWVkIHRvIHRoZSBsb2FkIGFkZHJlc3MKICAoYW5kIGV2ZW50dWFsbHkgdW5jb21wcmVzc2VkKSwgYnV0IE5PVCBiZSBzdGFydGVkLgogIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9hZCBhbmQgdW5jb21wcmVzcyBhcmJpdHJhcnkKICBkYXRhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEFwciAyMDAzOgogIENoYW5nZWQgREhDUCBjbGllbnQgdG8gdXNlIElQIGFkZHJlc3MgZnJvbSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NAogIGZyb20gdGhlIE9GRkVSIHBhY2tldCBpbiB0aGUgc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQgaW4gdGhlIFJFUVVFU1QKICBwYWNrZXQuIFRoaXMgZml4ZXMgYSBwcm9ibGVtIHVzaW5nIGEgV2luZG93cyAyMDAwIERIQ1Agc2VydmVyLAogIHdoZXJlIHRoZSBESENQLXNlcnZlciBpcyBub3QgdGhlIFRGVFAtc2VydmVyLgoKKiBTZXQgbWF4IGJyaWdodG5lc3MgZm9yIE1OMTEyMzYgZGlzcGxheXMgb24gVFJBQiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBtb2R1bGVzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgNCBBcHIgMjAwMzoKICBBZGQgSURNQSBleGFtcGxlIGNvZGUgKHRlc3RlZCBvbiA4MjYwIG9ubHkpCgoqIEFkZCBzdXBwb3J0IGZvciBQdXJwbGUgQm9hcmQgKE1JUFM2NCA1S2MpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTNjQgNUtjIENQVXMKCiogRml4IG1pc3Npbmcgc2V0dGluZyBvZiAibG9hZGFkZHIiIGFuZCAiYm9vdGZpbGUiIG9uIEFSTSBhbmQgTUlQUwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgQXByIDIwMDM6CiAgLSB1cGRhdGUgTUlQNDA1LTQgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IEFwciAyMDAzOgogIC0gVS1Cb290IHZlcnNpb24gZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgYWRkZWQKICAgIChDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSkuCiAgLSBDaGFuZ2VkIFBQQzQwNUdQciB2ZXJzaW9uIGZyb20gQSB0byBCLgogIC0gQ2hhbmdlZCBDUENJNDA1IHRvIHVzZSBDVFMgaW5zdGVhZCBvZiBEU1Igb24gUFBDNDA1IFVBUlQxLgoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCAwMyBBcHJpbCAyMDAzOgogIC0gZml4IFBDSSBJUlFzIG9uIE1QTCBib2FyZHMKICAtIGZpeCB0d28gbW9yZSB1bi1yZWxvY2F0ZWQgcG9pbnRlciBwcm9ibGVtcwoKKiBGaXggYmVoYXZpb3VyIG9mICJydW4iIGNvbW1hbmQ6CiAgLSBwcmludCBlcnJvciBtZXNzYWdlIGl2IHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0CiAgLSB0ZXJtaW5hdGUgcHJvY2Vzc2luZyBvZiBhcmd1bWVudHMgaW4gY2FzZSBvZiBlcnJvcgoKKiBQYXRjaGVzIGJ5IFBldGVyIEZpZ3VsaSwgMTAgTWFyIDIwMDMKICAtIEFkZCBzdXBwb3J0IGZvciBCVFVBUlQgb24gUFhBIHBsYXRmb3JtCiAgLSBBZGQgc3VwcG9ydCBmb3IgV0VQIEVQMjUwIChQWEEpIGJvYXJkCgoqIEZpeCBmbGFzaCBwcm9ibGVtcyBvbiBJTkNBLUlQOyBhZGQgdG9vbCB0byBhbGxvdyBicnVuaW5nIGltYWdlcyAgdG8KICBmbGFzaCB1c2luZyBhIEJESTIwMDAKCiogSW1wbGVtZW50IGZpeCBmb3IgSTJDIEVkZ2UgQ29uZGl0aW9ucyBwcm9ibGVtIGZvciBhbGwgYm9hcmRzIHRoYXQKICB1c2UgdGhlIGJpdC1iYW5naW5nIGRyaXZlciAoY29tbW9uL3NvZnRfaTJjLmMpCgoqIFBhdGNoIGJ5IE1hcnRpbiBXaW5pc3RvZXJmZXIsIDIzIE1hciAyMDAzCiAgLSBBZGQgcG9ydCB0byBNUEM1NTUvNTU2IG1pY3JvY29udHJvbGxlcnMKICAtIEFkZCBzdXBwb3J0IGZvciBjbWkgY3VzdG9tZXIgYm9hcmQgd2l0aAogICAgSW50ZWwgMjhGMTI4SjNBLCAyOEYzMjBKM0Egb3IgMjhGNjQwSjNBIGZsYXNoLgoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDI4IE1hciAyMDAzOgogIC0gZml4IGNvbW1vbi9jbWRfbmFuZC5jCgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCAyNCBNYXIgMjAwMzoKICAtIGFkZCB0aHJlYWRzIC8gc2NoZWR1bGVyIGV4YW1wbGUgY29kZQoKKiBBZGQgcGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDMxIE1hciAyMDAzOgogIC0gYWRkIGN0cmwtYyBzdXBwb3J0IGZvciBrZXJtaXQgZG93bmxvYWQKICAtIGFsaWduIGJkaW5mbyBvdXRwdXQgb24gQVJNCiAgLSBjc2IyMjYgYm9hcmQ6IGJyaW5nIGluIHN5bmMgd2l0aCBpbm5va29tL21lbXNldHVwLlMKICAtIGNzYjIyNiBib2FyZDogZml4IE1EUkVGUiBoYW5kbGluZwogIC0gbWlzYyBkb2MgZml4ZXMgLyBleHRlbnNpb25zCiAgLSBpbm5va29tIGJvYXJkOiBjbGVhbnVwLCBNRFJFRlIgZml4IGluIG1lbXNldHVwLlMsIGNvbmZpZyB1cGRhdGUKICAtIGFkZCBCT09UX1BST0dSRVNTIHRvIGFybWxpbnV4LmMKCiogQWRkIENQVSBJRCwgdmVyc2lvbiwgYW5kIGNsb2NrIHNwZWVkIGZvciBJTkNBLUlQCgoqIFBhdGNoZXMgYnkgRGF2ZSBFbGxpcywgMTggTWFyIDIwMDMgZm9yIFNYTkk4NTVUIGJvYXJkOgogIC0gZml4IFNSQU0gYW5kIFNEUkFNIG1lbW9yeSBzaXppbmcKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQKICAtIGFkZCBNQUMgYWRkcmVzcyBmb3Igc2Vjb25kIChTQ0MxKSBldGhlcm5ldCBwb3J0CgoqIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBUUU04MjYwIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTYgTWFyIDIwMDM6CiAgLSBBZGQgTkFORCBmbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgZXJhc2luZyBOQU5ECiAgICBmbGFzaCAoY2VydGFpbiBmb3JtcyBvZiB3aGljaCBhcmUgY2FsbGVkIFNtYXJ0TWVkaWEpLgogIC0gQWRkIHN1cHBvcnQgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE5IE1hciAyMDAzOgogIC0gdXNlIGFybS1saW51eC1nY2MgYXMgZGVmYXVsdCBjb21waWxlciBmb3IgQVJNCiAgLSBmaXggaTJjIGZpeHVwIGNvZGUKICAtIGZpeCBtaXNzaW5nIGJhdWRyYXRlIHNldHRpbmcKICAtIGFkZGVkICRsb2FkYWRkciAvIENGR19MT0FEX0FERFIgc3VwcG9ydCB0byBsb2FkYgogIC0gbW92ZWQgImlnbm9yaW5nIHRyYWlsaW5nIGNoYXJhY3RlcnMiIF9iZWZvcmVfIHUtYm9vdCB3YW50cyB0bwogICAgcHJpbnQgb3V0IGRpYWdub3N0aWNzIG1lc3NhZ2VzOyByZW1vdmVzIGJvZ3VzIGNoYXJhY3RlcnMgYXQgdGhlCiAgICBlbmQgb2YgdHJhbnNtaXNzaW9uCgoqIFBhdGNoIGJ5IEpvaG4gWmhhbiwgMTggTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNpbm9WZWUgTWljcm9zeXN0ZW1zIFNDOHh4IGJvYXJkcwoKKiBQYXRjaCBieSBSb2xmIE9mZmVybWFubnMsIDIxIE1hciAyMDAzOgogIHBvcnRlZCB0aGUgZG5wMTExMCByZWxhdGVkIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCBhcm1ib290IGN2cyB0bwogIGN1cnJlbnQgdS1ib290IGN2cy4gc21jOTExMTEgZG9lcyBub3Qgd29yay4gcHJvYmxlbSBtYXJrZWQgaW4KICBzbWM5MTExMS5jLCBncmVwIGZvciAiRklYTUUiLgoKKiBQYXRjaCBieSBCcmlhbiBBdWxkLCAyNSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU1RNIGZsYXNoIGNoaXBzIG9uIGVib255IGJvYXJkCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODI1MCBCb2FyZHMgKFBNODI1IG1vZHVsZSkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNSBNYXIgMjAwMzoKICAtIFBDSTQwNSB1cGRhdGUuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgTWFyIDIwMDM6CiAgLSBDUENJNDA1MiB1cGRhdGUgKHN1cHBvcnQgZm9yIHJldmlzaW9uIDMpLgogIC0gU2V0IGVkZ2UgY29uZGl0aW9uaW5nIGNpcmN1aXRyeSBvbiBQUEM0MDVHUHIgZm9yIGNvbXBhdGliaWxpdHkKICAgIHRvIGV4aXN0aW5nIFBQQzQwNUdQIGRlc2lnbnMuCiAgLSBDbGlwIHVkaXYgdG8gNSBiaXRzIG9uIFBQQzQwNSAoc2VyaWFsLmMpLgoKKiBFeHRlbmQgSU5DQUlQIGJvYXJkIHN1cHBvcnQ6CiAgLSBhZGQgYXV0b21hdGljIFJBTSBzaXplIGRldGVjdGlvbgogIC0gYWRkICJiZGluZm8iIGNvbW1hbmQKICAtIHBhc3MgZmxhc2ggYWRkcmVzcyBhbmQgc2l6ZSB0byBMaW51eCBrZXJuZWwKICAtIHN3aXRjaCB0byAxNTAgTUh6IGNsb2NrCgoqIEF2b2lkIGZsaWNrZXIgb24gdGhlIFRSQUIncyBWRkQgYnkgc3luY2hyb25pemluZyB0aGUgZW5hYmxlIHdpdGgKICB0aGUgSFNZTkMvVlNZTkMuIFJlcXVpcmVzIG5ldyBDUExEIGNvZGUgKFZlcnNpb24gMTAxIGZvciBSZXYuIDEwMAogIGJvYXJkcywgdmVyc2lvbiAxNTMgZm9yIFJldi4gMjAwIGJvYXJkcykuCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAxMiBNYXIgMjAwMzoKICBGaXggcmVsb2NhdGlvbiBwcm9ibGVtIG9mIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc3RyaW5nIHBvaW50ZXJzCiAgaW4gY29tbW9uL2NtZF9wY2kuYwoKKiBQYXRjaCBieSBLYWktVXdlIEJs9m0sIDEyIE1hciAyMDAzOgogIENsZWFudXAgJiBidWcgZml4ZXMgZm9yIEpGRlMyIGNvZGU6CiAgLSB0aGUgbWVtb3J5IG1hbmdlbWVudCB3YXMgYnJva2VuLiBJdCBjYXVzZWQgaGF2b2Mgb24gbWFsbG9jIGJ5CiAgICB3cml0aW5nIGJleW9uZCB0aGUgYmxvY2sgYm91bmRhcmllcy4KICAtIHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIGZpbGVzIHdhcyB3cm9uZywgc29tZXRpbWVzIHJlc3VsdGluZwogICAgaW4gc2hvcnQgZmlsZSByZWFkcy4KICAtIGRhdGEgY29weWluZyBub3cgb3B0aW9uYWxseSB0YWtlcyBmcmFnbWVudCB2ZXJzaW9uIG51bWJlcnMgaW50bwogICAgYWNjb3VudCwgdG8gYXZvaWQgY29weWluZyBmcm9tIG9sZGVyIGRhdGEuCiAgU2VlIGRvYy9SRUFETUUuSkZGUzIgZm9yIGRldGFpbHMuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTIgTWFyIDIwMDM6CiAgLSAxNi8zMiBNQiBhbmQgNTAvODAgTUh6IHN1cHBvcnQgd2l0aCBhdXRvLWRldGVjdGlvbiBmb3IgSVA4NjAKICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQQzQ1CiAgLSBuZXcgQk9PVFJPTS9GTEFTSDAgYW5kIERPQyBiYXNlIGZvciBQTTgyNgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEyIE1hciAyMDAzOgogIEZpeCB0aGUgY2hwYXJ0IGNvbW1hbmQgb24gaW5ub2tvbSBib2FyZAoKKiBOYW1lIGNsZWFudXA6CiAgbXYgaW5jbHVkZS9hc20taTM4Ni9wcGNib290LWkzODYuaCBpbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKICBzL1BQQ0Jvb3QvVS1Cb290LyBpbiBzb21lIGZpbGVzCiAgcy9wSW1hZ2UvdUltYWdlLyAgaW4gc29tZSBmaWxlcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNSBKYW4gMjAwMzoKICBGaXggJycgY29tbWFuZCBsaW5lIHF1b3RpbmcKCiogUGF0Y2ggYnkgVGhlIExFT1ggdGVhbSwgMTkgSmFuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVMUFQ4NjAgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBEYWxsYXMgZHMxNjR4IFJUQwoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMzEgSmFuIDIwMDM6CiAgLSBtaW5pbWFsIHNldHVwIGZvciBDYXJkQnVzIGJyaWRnZXMKICAtIGFkZCBFRVBST00gcmVhZC93cml0ZSBzdXBwb3J0IGluIHRoZSBDUzg5MDAgZHJpdmVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0aW4gSTJDIGNvbnRyb2xsZXIgaW4gdGhlIFNhbXN1bmcgczNjMjR4MCBjaGlwcwogIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEZlYiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3CgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCA1IEZlYiAyMDAzOgogIGZpeCBQTFBSQ1IvU0NDUiBpbml0IHNlcXVlbmNlIG9uIDh4eCB0byBhbGxvdyBmb3IKICBjaGFuZ2VzIG9mIEVCREYgYnkgc29mdHdhcmUKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA3IEZlYiAyMDAzOgogICJBUEktY29tcGF0aWJpbGl0eSBwYXRjaCIgZm9yIDR4eCBJMkMgZHJpdmVyCgoqIFRSQUIgZml4ZXMgLyBleHRlbnNpb25zOgogIC0gUmVzdG9yZSBWRkQgYnJpZ2h0bmVzcyBhcyBzYXZlZCBpbiBlbnZpcm9ubWVudAogIC0gYWRkIHN1cHBvcnQgZm9yIEZ1aml0c3UgZmxhc2hlcwogIC0gbWFrZSBzdXJlIGJvdGggYnV6emVycyBhcmUgdHVybmVkIG9mZiAoZHJpdmUgbG93IGxldmVsKQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDYgTWFyIDIwMDM6CiAgLSBmaXggYnVnIGluIEJPT1RQIGNvZGUgKG11c3QgdXNlIE5ldENvcHlJUCkKICAtIHVwZGF0ZSBvZiBDU0IyMjYgcG9ydAogIC0gY2xlYXIgQlNTIHNlZ21lbnQgb24gWFNjYWxlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBpMmNfaW5pdF9ib2FyZCgpIGZ1bmN0aW9uCiAgLSB1cGRhdGUgdG8gdGhlIElubm9rb20gcGxhdHRmb3JtCgoqIEV4dGVuZCBzdXBwb3J0IGZvciByZWR1bmRhbmQgZW52aXJvbm1lbnRzIGZvciBjb25maWd1cmF0aW9ucyB3aGVyZQogIGVudmlyb25tZW50IHNpemUgPCBzZWN0b3Igc2l6ZQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTMgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE5IEZlYiAyMDAzOgogIHBhdGNoZXMgZm9yIHRoZSBJbnRlbCBsdWJib2NrIGJvYXJkOgogIG1lbXNldHVwLlMgLSBnZW5lcmFsIGNsZWFudXAgKGJhc2VkIG9uIFJvYmVydCdzIGNzYjIyNiBjb2RlKQogIGZsYXNoLmMgLSBvdmVyaGF1bCwgYWN0dWFsbHkgd29ya3Mgbm93CiAgbHViYm9jay5jIC0gZml4IGluaXQgZnVuY3MgdG8gcmV0dXJuIHByb3BlciB2YWx1ZQoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjYgRmViIDIwMDM6CiAgLSBGaXhlZCBvZmYgYnkgb25lIGluIFJGVEEgY2FsY3VsYXRpb24uCiAgLSBObyBuZWVkIHRvIGFib3J0IHdoZW4gTERGIGlzIGxvd2VyIHRoYW4gd2UgY2FuIHByb2dyYW0gaXQncyBvbmx5CiAgICBtaW5pbXVtIHRpbWluZyBzbyBjbGFtcCBpdCB0byB3aGF0IHdlIGNhbiBkby4KICAtIFRha2VzIGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIHNwZF9udnJhbS4gVXNlZnVsbAogICAgZm9yIGZha2luZyBkYXRhIG9yIGhhcmRjb2RlIGEgbW9kdWxlIHdpdGhvdXQgdGhlIG52cmFtLgogIC0gZml4IG90aGVyIHVzZXIgZm9yIGFib3ZlIGNoYW5nZQogIC0gZml4IHNvbWUgY29tbWVudHMuCgoqIFBhdGNoZXMgYnkgQnJpYW4gV2FpdGUsIDI2IEZlYiAyMDAzOgogIC0gZml4IHBvcnQgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBzY2FuCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxIE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBFTUsgVE9QODYwIE1vZHVsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwMiBNYXIgMjAwMzoKICBBZGQgU1BEIEVFUFJPTSBzdXBwb3J0IGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjEgSmFuIDIwMDM6CiAgLSBBZGQgc3VwcG9ydCBmb3IgSW5ub2tvbSBib2FyZAogIC0gRG9uJ3QgY29tcGxhaW4gaWYgImluc3RhbGwiIGZhaWxzCiAgLSBSRUFETUUgY2xlYW51cCAocmVtb3ZlIGR1cGxpY2F0ZWQgbGluZXMpCiAgLSBVcGRhdGUgUFhBIGhlYWRlciBmaWxlcwoKKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZXhpc3RpbmcgUE9TVCBjb2RlIChkb2MvUkVBRE1FLlBPU1QpCgoqIFBhdGNoIGJ5IExhdWRuZXkgUmVuLCAxNSBKYW4gMjAwMzoKICBGaXggaGFuZGxpbmcgb2YgcmVkdW5kYW5kIGVudmlyb25tZW50IGluICJ0b29scy9lbnZjcmMuYyIKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjggRmViIDIwMDM6CiAgQWRkIGJlZGJ1ZyBzdXBwb3J0IGZvciA4MjR4IHN5c3RlbXMKCiogQWRkIHN1cHBvcnQgZm9yIDE2IE1CIGZsYXNoIGNvbmZpZ3VyYXRpb24gb2YgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUwoKKiBBZGQgaW1hZ2UgaW5mb3JtYXRpb24gdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggRmViIDIwMDM6CiAgQ1BDSUlTRVI0IGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBGZWIgMjAwMzoKICBGaXhlZCBidWcgaW4gZXh0LiBzZXJpYWwgY2xvY2sgc2V0dXAgb24gUFBDNDA1IChzaW5jZSBQUEM0NDAgcG9ydCkuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgRmViIDIwMDM6CiAgQWRkICJwY2lkZWxheSIgZW52aXJvbm1lbnQgdmFyaWFibGUgKGluIG1zLCBlbmFibGVkIHZpYQogIENPTkZJR19QQ0lfQk9PVERFTEFZKS4KICBQQ0kgc3BlYyAyLjIgZGVmaW5lcywgdGhhdCBhIHBjaSB0YXJnZXQgaGFzIDJeMjUgcGNpIGNsb2NrcyBhZnRlcgogIFJTVCMgdG8gcmVzcG9uZCB0byBjb25maWd1cmF0aW9uIGN5Y2xlcyAoMzNNSHogLT4gMXMpLgoKKiBGaXggZHVhbCBQQ01DSUEgc2xvdCBzdXBwb3J0ICh3aGVuIHJ1bm5pbmcgd2l0aCBqdXN0IG9uZQogIHNsb3QgcG9wdWxhdGVkKQoKKiBBZGQgVkZEIHR5cGUgZGV0ZWN0aW9uIHRvIHRyYWIgYm9hcmQKCiogZXh0ZW5kIGRyaXZlcnMvY3M4OTAwLmMgZHJpdmVyIHRvIHN5bmNocm9uaXplICBldGhhZGRyICBlbnZpcm9ubWVudAogIHZhcmlhYmxlIHdpdGggdmFsdWUgaW4gdGhlIEVFUFJPTQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciA0TUIgYW5kIDEyOE1CIG9uYm9hcmQgU0RSQU0gKGNwdS9wcGM0eHgvc2RyYW0uYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFMzMiA0S2MgQ1BVcwoKKiBBZGQgc3VwcG9ydCBmb3IgSU5DQS1JUCBCb2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIGR1YWwgZXRoZXJuZXQgc3VwcG9ydCBvbiBQTTgyNgoKKiBBZGQgc3VwcG9ydCBmb3IgTFhUOTcxIFBIWSBvbiBQTTgyNgoKKiBQYXRjaCBieSBUb3JkIEFuZGVyc3NvbiwgMTYgSmFuIDIwMDM6CiAgRml4IGZsYXNoIHNlY3RvciBjb3VudCBmb3IgVFFNOHh4TAoKKiBGaXggSTJDIEVFUFJPTSBwcm9ibGVtIG9uIElDVTg2MiBib2FyZCAod291bGQgb25seSB3cml0ZSB0aGUgZmlyc3QKICAxNiBieXRlcyBvdXQgb2YgZWFjaCAzMiBieXRlIGJsb2NrKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIFYzNyBib2FyZAogIChwYXRjaCBieSBK824gQmVuZWRpa3Rzc29uLCAxMSBEZWMgMjAwMikKCiogVXBkYXRlIGJhdWRyYXRlIGluIGJkX2luZm8gd2hlbiBpdCBnZXRzIGNoYW5nZWQKCiogQWRkIHdhdGNoZG9nIHRyaWdnZXIgcG9pbnRzIHdoaWxlIHdhaXRpbmcgZm9yIHNlcmlhbCBwb3J0CiAgKHNvIGZhciBvbmx5IDh4eCAtLSBuZWVkZWQgb24gTFdNT04gd2l0aCAxMDBtcyB3YXRjaGRvZykKCiogSW1wcm92ZSBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGZpZ3VyYXRpb24gb2YgdGhlIHV0aWxpdHksIHVzaW5nIGEgY29uZmlnIGZpbGUpCgoqIEFkZCBzaW5nbGUgcXVvdGUgc3VwcG9ydCBmb3IgKG9sZCkgY29tbWFuZCBsaW5lIHBhcnNlcgoKKiBTd2l0Y2ggTFdNT04gYm9hcmQgZGVmYXVsdCBjb25maWcgZnJvbSBGUkFNIHRvIEVFUFJPTTsKICBpbiBQT1NULCBFRVBST00gc2hvd3MgdXAgb24gOCBhZGRyZXNzZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVzZSAxLWJ5dGUtcmVhZCBpbnN0ZWFkIG9mIC13cml0ZSBmb3IgaXByb2JlKCkgZnVuY3Rpb24KICBBZGQgaTJjIGNvbW1hbmRzIHRvIFBNODI2IGNvbmZpZwoKKiBleHRlbmQgSTJDIFBPU1QgY29kZTogY2hlY2sgZm9yIGxpc3Qgb24ga25vd24gYWRkcmVzc2VzCgoqIEltcHJvdmUgbG9nIGJ1ZmZlciBjb2RlOyB1c2UgImxvZ2xldmVsIiB0byBkZWNpZGUgd2hpY2ggbWVzc2FnZXMKICB0byBsb2cgb24gdGhlIGNvbnNvbGUsIHRvbyAobGlrZSBpbiBMaW51eCk7IGdldCByaWQgb2YgImxvZ3N0YXJ0IgoKKiBBZGQgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChib2FyZC1zcGVjaWZpYyBmb3IgVFJBQiBub3csIHRvIGJlIGZpeGVkIGxhdGVyKQoKKiBQYXRjaCBieSBIYW5zLUpvZXJnIEZyaWVkZW4sIDA2IERlYyAyMDAyCiAgRml4IG1pc2MgcHJvYmxlbXMgd2l0aCBBbWlnYU9uZSBzdXBwb3J0CgoqIFBhdGNoIGJ5IENocmlzIEhhbGxpbmFuLCAzIERlYyAyMDAyOgogIG1pbm9yIGNsZWFudXAgdG8gdGhlIE1QQzgyNDUgRVBJQyBkcml2ZXIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIGV4dGVybmFsIChTSVUpIGludGVycnVwdHMgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEZpeCBuZXN0ZWQgc3lzY2FsbHMgYnVnIGluIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjcgTm92IDIwMDI6CiAgZml4IG91dHB1dCBvZiAicGNpaW5mbyIgY29tbWFuZCBmb3IgQ2FyZEJ1cyBicmlkZ2UgZGV2aWNlcy4KCiogRml4IGJ1ZyBpbiBUUU04MjYwIGJvYXJkIGRldGVjdGlvbiAtIGJvYXJkcyBnb3Qgc3R1Y2sgd2hlbiBib2FyZCBJRAogIHdhcyBub3QgcmVhZGFibGUKCiogQWRkIExFRCBpbmRpY2F0aW9uIGZvciBJREUgYWN0aXZpdHkgb24gS1VQNEsgYm9hcmQKCiogRml4IHN0YXJ0dXAgcHJvYmxlbXMgd2l0aCBWRkQgZGlzcGxheSBvbiBUUkFCCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDIwIE5vdiAyMDAyCiAgQWRkIGRyaXZlciBmb3IgRXBzb24gU0VEMTM4MDYgZ3JhcGhpYyBjb250cm9sbGVyLgogIEFkZCBzdXBwb3J0IGZvciBCTVAgbG9nb3MgaW4gY2ZiX2NvbnNvbGUgZHJpdmVyLgoKKiBBZGRlZCBzdXBwb3J0IGZvciBib3RoIFBDTUNJQSBzbG90cyAoYXQgdGhlIHNhbWUgdGltZSEpIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDIxIE5vdiAyMDAyOgogIGZpeCBQQ01DSUEgb24gTUJYOHh4IGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyMSBOb3YgMjAwMgogIEFkZCBDRkdfQ1BNX1BPU1RfV09SRF9BRERSIHRvIG1ha2UgdGhlIG9mZnNldCBvZiB0aGUKICBib290bW9kZSB3b3JkIGluIERQUkFNIGNvbmZpZ3VyYWJsZQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDE4IE5vdiAyMDAyOgogIEZpeGVzIGZvciB4ODYgcG9ydCAobW9zdGx5IHN0cmluZ3MgaXNzdWVzKQoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTggTm92IDIwMDI6CiAgRml4IGZvciBuYXRzZW1pIE5JQyBjYXJkcyAoRFA4MzgxNSkKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTkgTm92IDIwMDI6CiAgZml4IGEgYnVnIGZvciB0aGUgTUlJIGNvbmZpZ3VyYXRpb24sIGFuZCBzb21lIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFRob21hcyBGcmllZGVuLCAxMyBOb3YgMjAwMjoKICBBZGQgY29kZSBmb3IgQW1pZ2FPbmUgYm9hcmQKICAocHJlbGltaW5hcnkgbWVyZ2UgdG8gVS1Cb290LCBzdGlsbCBXSVApCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMiBOb3YgMjAwMjoKICAtIEFkZGluZyBVUkwgZm9yIElFRUUgT1VJIGxvb2t1cAogIC0gTWFraW5nIHRoZSBhdXRvYm9vdCAjZGVmaW5lcyBkZXBlbmRlbnQgb24gQ09ORklHX0FVVE9CT09UX0tFWUVECiAgICBiZWluZyBkZWZpbmVkLgogIC0gSW4gdGhlIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgI2RlZmluZSwgdGhlIHJvb3Qtb24taW5pdHJkIGFuZAogICAgcm9vdC1vbi1uZnMgbWFjcm9zIGFyZSBkZXNpZ25lZCB0byBzd2l0Y2ggaG93IHRoZSBkZWZhdWx0IGJvb3QKICAgIG1ldGhvZCBnZXRzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTMgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIGkzODYgYXJjaGl0ZWN0dXJlIGFuZCBBTUQgU0M1MjAgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTIgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIERPUyBmaWxlc3lzdGVtIGFuZCBib290aW5nIGZyb20gRE9TIGZsb3BweSBkaXNrCgoqIFBhdGNoIGJ5IEppbSBTYW5kb3osIDA3IE5vdiAyMDAyOgogIEluY3JlYXNlIG51bWJlciBvZiBuZXR3b3JrIFJYIGJ1ZmZlcnMgKFBLVEJVRlNSWCBpbgogICJpbmNsdWRlL25ldC5oIikgZm9yIEVFUFJPMTAwIGJhc2VkIGJvYXJkcyAoZXNwZWNpYWxseSBTUDgyNDApCiAgd2hpY2ggc2hvd2VkICJSZWNlaXZlciBpcyBub3QgcmVhZHkiIGVycm9ycyB3aGVuIFUtQm9vdCB3YXMKICBwcm9jZXNzaW5nIHRoZSByZWNlaXZlIGJ1ZmZlcnMgc2xvd2VyIHRoYW4gdGhlIG5ldHdvcmsgY29udHJvbGxlcgogIHdhcyBmaWxsaW5nIHRoZW0uCgoqIFBhdGNoIGJ5IEFuZHJlYXMgT2JlcnJpdHRlciwgMDkgTm92IDIwMDI6CiAgQ2hhbmdlIGJlaGF2aW91ciBvZiBOZXRMb29wKCk6IHJldHVybiAtMSBmb3IgZXJyb3JzLCBmaWxlc2l6ZQogIG90aGVyd2lzZTsgcmV0dXJuIGNvZGUgMCBpcyB2YWxpZCBhbiBtZWFucyBubyBmaWxlIGxvYWRlZCAtIGluIHRoaXMKICBjYXNlIHRoZSBlbnZpcm9ubWVudCBzdGlsbCBnZXRzIHVwZGF0ZWQhCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDkgTm92IDIwMDI6CiAgLSBpbXByb3ZlIEFEQy9EQUMgY2xvY2tpbmcgb24gdGhlIFNBQ1NuZyBib2FyZCB0byBhbGlnbgogICAgdGhlIGZhaWxpbmcgZWRnZXMgb2YgTFJDTEsgYW5kIFNDTEsKICAtIHNiYzgyNjAgY29uZmlndXJhdGlvbiB0d2Vha3MKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIDgyeHggc3lzdGVtcwogIC0gd2lyZSBzc3BpL3NzcG8gY29tbWFuZHMgaW50byBjb21tYW5kIGhhbmRsZXI7IGltcHJvdmVkIGVycm9yCiAgICBoYW5kbGVyaW5nCiAgLSBhZGQgdGltZXN0YW1wIHN1cHBvcnQgYW5kIGFsdGVybmF0ZSBtZW1vcnkgdGVzdCB0byB0aGUKICAgIFNBQ1NuZyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IFZpbmNlIEh1c292c2t5LCA3IE5vdiAyMDAyOgogIEFkZCAiLW4iIHRvIGxpbmtlciBvcHRpb25zIHRvIGdldCByaWQgb2YgIk5vdCBlbm91Z2ggcm9vbSBmb3IKICBwcm9ncmFtIGhlYWRlcnMiIHByb2JsZW0KCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAwNSBOb3YgMjAwMgogIFJlbmFtZSBDT05GSUdfUExMX0lOUFVUX0ZSRVEgdG8gQ09ORklHX1NZU19DTEtfRlJFUQogIHNvIHdlIGNhbiB1c2UgYW4gYWxyZWFkeSBleGlzdGluZyBuYW1lCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgSGFyZHdhcmUgcmVsYXRpZWQgaW1wcm92bWVudHMgaW4gRkRDIGJvb3QgY29kZQoKKiBQYXRjaCBieSBIb2xnZXIgU2NodXJpZywgNSBOb3YgMjAwMjoKICBNYWtlIHRoZSBQWEEgcmVhbGx5IGNoYW5nZSBpdCdzIGZyZXF1ZW5jeQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBzbGF2ZSBzZXJpYWwgU3BhcnRhbiAyIEZQR0FzCgoqIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeSAoTUFDICBhZGRyZXNzKSAgaW4gIDh4eCAgU0NDL0ZFQyAgZXRoZXJuZXQKICBkcml2ZXJzCgoqIEFkZCBzdXBwb3J0IGZvciBsb2cgYnVmZmVyIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gTGludXgga2VybmVsJ3MKICBzeXNsb2cgbWVjaGFuaXNtOyB1c2VkIGVzcGVjaWFsbHkgZm9yIFBPU1QgcmVzdWx0cy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMzEgT2N0IDIwMDI6CiAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3Iga3VwNGsgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNCBOb3YgMjAwMjoKICAtIHVzZSB3YXRjaGRvZyB0byByZXNldCBQWEEyNTAgc3lzdGVtcwogIC0gYWRkZWQgcHJvZ3Jlc3MgY2FsbGJhY2tzIHRvIChzb21lIG9mIHRoZSkgQVJNIGNvZGUKICAtIHVwZGF0ZSBmb3IgQ29nZW50IENTQjIyNiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgRlBTODYwIGJvYXJkCgoqIFBhdGNoIGJ5IEd1aWxsYXVtZSBBbGV4YW5kcmUsLCAwNCBOb3YgMjAwMjoKICBJbXByb3ZlIFBDSSBhY2Nlc3Mgb24gMzItYml0cyBDb21wYWN0IFBDSSBidXMKCiogRml4IG1kZWxheSgpIG9uIFRSQUIgLSB0aGlzIHdhcyBzdGlsbCB0aGUgZGVidWdnaW5nIHZlcnNpb24gd2l0aAogIHNlY29uZHMgaW5zdGVhZCBvZiBtcy4KCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxIE5vdiAyMDAyOgogIFhTY2FsZSByZWxhdGVkIGNsZWFudXAgKGFmZmVjdHMgYWxsIEFSTSBib2FyZHMpCgoqIENsZWFudXAgb2YgbmFtZXMgYW5kIFJFQURNRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KTm90ZXMgZm9yIFUtQm9vdCAwLjEuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBpcyB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mICJEYXMgVS1Cb290IiwgdGhlIFVuaXZlcnNhbCBCb290IExvYWRlci4KCkl0IGlzIGJhc2VkIG9uIHZlcnNpb24gMi4wLjAgKHRoZSAiSGFsbG93ZWVuIFJlbGVhc2UiKSBvZiBQUENCb290LgpGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QgcGxlYXNlIHNlZSB0aGUKUFBDQm9vdCBwcm9qZWN0IHBhZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wcGNib290Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg==