PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGRlZCBzdXBwb3J0IGZvciBCQzM0NTAgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gU3Ryb2JsLCAyMS4gT2N0IDIwMDUKCiogVXBkYXRlIGZvciBOQzY1MCBib2FyZDoKICAtIFN1cHBvcnQgcmV2MSBhbmQgcmV2MiBoYXJkd2FyZQogIC0gYWRhcHQgdG8gbmV3IE5BTkQgbGF5ZXIKICAtIGFkZCBDUDg1MCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIE5DNjUwCgoqIE1QQzUyMDA6IGVuYWJsZSBzbm9vcGluZyBvZiBETUEgdHJhbnNhY3Rpb25zIG9uIFhMQiBldmVuIGlmIG5vIFBDSQogIGlzIGNvbmZpZ3VyZWQ7IG90aHJ3aXNlIERNQSBhY2Nlc3NlcyBhcmVuJ3QgY2FjaGUgY29oZXJlbnQgd2hpY2gKICBjYXVzZXMgZm9yIGV4YW1wbGUgVVNCIHRvIGZhaWwuCgoqIFNvbWUgY29kZSBjbGVhbnVwCgoqIEZpeCBkYmF1MXgwMCBib2FyZHMgYnJva2VuIGJ5IGRiYXUxNTUwIHBhdGNoCiAgUExMOnMgd2VyZSBub3Qgc2V0IGZvciBib2FyZHMgb3RoZXIgdGhhbiAxNTUwLgogIEZsYXNoIENGSSBjYXVzZWQgY2FyZCB0byBoYW5nIGR1ZSB0byB1bmRlZmluZWQgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QuCiAgRGVmYXVsdCBib290IGlzIG5vdyBib290cCBmb3IgY2FyZHMgb3RoZXIgdGhhbiAxNTUwLgogIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTAgQXVnIDIwMDUKCiogRml4ZXMgY29tbW9uL2NtZF9mbGFzaC5jOgogIC0gZml4IHNvbWUgY29tcGlsZXIvcGFyc2VyIGVycm9yLCBpZiB1c2luZyBtNjhrIHRvb2wgY2hhaW4KICAtIG9wdGljYWwgZml4IGZvciBwcm90ZWN0IG9uL29mZiBhbGwgbWVzc2FnZXMsIGlmIHVzaW5nIG1vcmUKICAgIHRoZW4gb25lIGJhbmsKICBQYXRjaCBieSBKZW5zIFNjaGFyc2lnLCAyOCBKdWwgMjAwNQoKKiBGaXggUXVhZCBVQVJUIG1hcHBpbmcgb24gTUNDMjAwIGJvYXJkIGR1ZSB0byBuZXcgSFcgcmV2aXNpb24KCiogRml4IEpGRlMyIHN1cHBvcnQgZm9yIGxlZ2FjeSBOQU5EIGRyaXZlci4KCiogUmVtb3ZlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIERvQyBjb2RlIGFuZCBvbGQgbGVnYWN5IE5BTkQgZHJpdmVyLgoKKiBGaXggUE04MjhfUENJIHRhcmdldCwgZm9yIHdoaWNoIFBDSSB3YXMgKm5vdCogY29uZmlndXJlZCBpbi4KCiogRml4IExpdGU1MjAwQiBzdXBwb3J0OiBpbml0aWFsaXplIFNEZWxheSByZWdpc3RlcgogIFNlZSBGcmVlc2NhbGUncyBBTjMyMjEgIk1QQzUyMDBCIFNEUkFNIEluaXRpYWxpemF0aW9uIGFuZAogIENvbmZpZ3VyYXRpb24iLCAzLjMuMSBTRGVsYXktLU1CQVIgKyAweDAxOTAKCiogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKCiAgLSBBZGQgSW50ZWwgbGVnYWN5IGxvY2svdW5sb2NrIHN1cHBvcnQgdG8gY29tbW9uIENGSSBkcml2ZXIKCiAgICBPbiBzb21lIEludGVsIGZsYXNoJ3MgKGUuZy4gSW50ZWwgSjMpIGxlZ2FjeSB1bmxvY2tpbmcgaXMKICAgIHN1cHBvcnRlZCwgbWVhbmluZyB0aGF0IHVubG9ja2luZyBvZiBvbmUgc2VjdG9yIHdpbGwgdW5sb2NrCiAgICBhbGwgc2VjdG9ycyBvZiB0aGlzIGJhbmsuIFVzaW5nIHRoaXMgZmVhdHVyZSwgdW5sb2NraW5nCiAgICBvZiBhbGwgc2VjdG9ycyB1cG9uIHN0YXJ0dXAgKHZpYSBlbnYgdmFyICJ1bmxvY2s9eWVzIikgd2lsbAogICAgZ2V0IG11Y2ggZmFzdGVyLgoKICAtIEZpeGVkIHByb2JsZW0gd2l0aCBtdWx0aXBsZSByZWFkcyBvZiBlbnZyb25tZW50IHZhcmlhYmxlCiAgICAidW5sb2NrIiBhcyBwb2ludGVkIG91dCBieSBSZWluaGFyZCBBcmx0ICYgQW5kZXJzIExhcnNlbi4KCiAgLSBSZW1vdmVkIHVud2FudGVkIGxpbmVmZWVkcyBmcm9tICJwcm90ZWN0IiBjb21tYW5kIHdoZW4KICAgIENGR19GTEFTSF9QUk9URUNUSU9OIGlzIGVuYWJsZWQuCgogIC0gQ2hhbmdlZCBwM3A0MDAgYm9hcmQgdG8gdXNlIENGR19GTEFTSF9QUk9URUNUSU9OCgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgQXByIDIwMDYKCiogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIENvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIENGR19IWiAhPSAxMDAwIChzZXZlcmFsCiAgICBYU2NhbGUtYmFzZWQgYm9hcmRzKQogIC0gRml4IHRoZSB0aW1lb3V0IGNhbGN1bGF0aW9uIG9mIGJ1ZmZlcmVkIHdyaXRlcyAob2ZmIGJ5IGEKICAgIGZhY3RvciBvZiAxMDAwKQogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDMxIE1hciAyMDA2CgoqIFVwZGF0ZXMgdG8gY29tbW9uIFBQQzR4eCBvbmJvYXJkIChERFIpU0RSQU0gaW5pdCBjb2RlICg0MDUgYW5kIDQ0MCkKCiAgNDA1IFNEUkFNOiAtIFRoZSBTRFJBTSBwYXJhbWV0ZXJzIGNhbiBub3cgYmUgZGVmaW5lZCBpbiB0aGUgYm9hcmQKCSAgICAgICBjb25maWcgZmlsZSBhbmQgdGhlIDQwNSBTRFJBTSBjb250cm9sbGVyIHZhbHVlcyB3aWxsCgkgICAgICAgYmUgY2FsY3VsYXRlZCB1cG9uIGJvb3R1cCAoc2VlIFBQQ2hhbWVsZW9uRVZCKS4KCSAgICAgICBXaGVuIHRob3NlIHNldHRpbmdzIGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgYm9hcmQKCSAgICAgICBjb25maWcgZmlsZSwgdGhlIHJlZ2lzdGVyIHNldHVwIHdpbGwgYmUgYXMgaXQgaXMgbm93LAoJICAgICAgIHNvIHRoaXMgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBicmVhayBhbnkgY3VycmVudAoJICAgICAgIGRlc2lnbiB1c2luZyB0aGlzIGNvZGUuCgoJICAgICAgIFRoYW5rcyB0byBBbmRyZWEgTWFyc29uIGZyb20gREFWRSBmb3IgdGhpcyBwYXRjaC4KCiAgNDQwIEREUjogICAtIEFkZGVkIGZ1bmN0aW9uIHNkcmFtX3RyMV9zZXQgdG8gYXV0byBjYWxjdWxhdGUgdGhlCgkgICAgICAgVFIxIHZhbHVlIGZvciB0aGUgRERSLgoJICAgICAtIEFkZGVkIEVDQyBzdXBwb3J0IChzZWUgcDNwNDQwKS4KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBNYXIgMjAwNgoKKiBGaXggQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCBkZXBlbmRlbmN5IGluIGNwdS9hcm05MjB0L3N0YXJ0LlMKICBQYXRjaCBieSBQZXRlciBNZW56ZWJhY2gsIDEzIE9jdCAyMDA1IFtETlgjMjAwNjA0MDE0MjAwMDQ3M10KCiogQWRkIHN1cHBvcnQgZm9yIHltb2RlbSBwcm90b2NvbCBkb3dubG9hZAogIFBhdGNoIGJ5IFN0ZWZhbm8gQmFiaWMsIDI5IE1hciAyMDA2CgoqIE1lbW9yeSBNYXAgVXBkYXRlIGZvciBEZWx0YSBib2FyZDogVS1Cb290IGlzIGF0IDB4ODAwMDAwMDAtMHg4NDAwMDAwMAogIE1lcmdlIGZyb20gTWFya3VzIEtsb3R6YvxjaGVyJ3MgcmVwbywgMDEgQXByIDIwMDYKCiogR0NDLTQueCBmaXhlczogY2xlYW4gdXAgZ2xvYmFsIGRhdGEgcG9pbnRlciBpbml0aWFsaXphdGlvbiBmb3IgYWxsCiAgYm9hcmRzCgoqIFVwZGF0ZSBmb3IgRGVsdGEgYm9hcmQ6CiAgLSByZWR1bmRhbnQgTkFORCBlbnZpcm9ubWVudAogIC0gbWlzYyBNb25haGFucyBjbGVhbnVwcyAocmVtb3ZlIGRlYWQgY29kZSBldGMuKQogIC0gREE5MDMwIEluaXRpYWxpemF0aW9uOyBzb21lIG1pbmltYWwgY2hhbmdlcyB0byBQWEEgSTJDIGRyaXZlciB0bwogICAgbWFrZSBpdCB3b3JrIHdpdGggdGhlIE1vbmFoYW5zLgogIC0gTWFrZSBNb25haGFucyBjbG9jayBmcmVxdWVuY3kgY29uZmlndXJhYmxlIHVzaW5nCiAgICBDRkdfTU9OQUhBTlNfUlVOX01PREVfT1NDX1JBVElPIGFuZAogICAgQ0ZHX01PTkFIQU5TX1RVUkJPX1JVTl9NT0RFX1JBVElPLgogIE1lcmdlIGZyb20gTWFya3VzIEtsb3R6YvxjaGVyJ3MgcmVwbywgMjUgTWFyIDIwMDYKCiogRW5hYmxlIFF1YWQgVUFSVCBvbSBNQ0MyMDAgYm9hcmQuCgoqIENsZWFudXAgTUNDMjAwIGJvYXJkIGNvbmZpZ3VyYXRpb247IG9taXQgbm9uLWV4aXN0ZW50IHN0dWZmLgoKKiBBZGQgc3VwcG9ydCBmb3IgTVBDODU5Lzg2NiBSZXYuIEEuMAoKKiBBZGQgY29tbWFuZCBmb3IgaGFuZGxpbmcgRERSIEVDQyByZWdpc3RlcnMgb24gTVBDODM0OUVFIE1EUyBib2FyZC4KCiogRml4IEREUiBFQ0MgYml0IGRlZmluaXRpb25zIGZvciBNUEM4M3h4LgoKKiBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBNUEM4MzQ5RSBNRFMgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBFQ0MgRERSIGluaXRpYWxpemF0aW9uIG9uIE1QQzgzeHguCgoqIEFkZCBETUEgc3VwcG9ydCBmb3IgTVBDODN4eC4KCiogQWRkIHN5bmMgaW4gZG9fcmVzZXQoKSByb3V0aW5lIGZvciBNUEM4M3h4IGFmdGVyIFJQUiByZWdpc3RlcgogIHdhcyB3cml0dGVuIHRvLiBJdCBpcyBuZWVkIG9uIHNvbWUgdGFyZ2V0cyB3aGVuIEJBVCB0cmFuc2xhdGlvbgogIGlzIGVuYWJsZWQuCgoqIEFkZCBiaXQgZGVmaW5pdGlvbnMgZm9yIE1QQzgzeHggRERSIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLgoKKiBBZGQgRGNieigpLCBEY2JpKCkgYW5kIERjYmYoKSByb3V0aW5lcyBmb3IgTVBDODN4eC4KCiogQ29ycmVjdCBzaGlmdCBvZmZzZXRzIGluIGljYWNoZV9zdGF0dXMgYW5kIGRjYWNoZV9zdGF0dXMgZm9yIE1QQzgzeHguCgoqIEFkZCBzdXBwb3J0IGZvciBEUzEzNzQgUlRDIGNoaXAuCgoqIEFkZCBzdXBwb3J0IGZvciBMaXRlNTIwMEIgYm9hcmQuCiAgUGF0Y2ggYnkgIFBhdGNoIGJ5IEpvc2UgTWFyaWEgKFR4ZW1hKSBMb3BleiwgMTYgSmFuIDIwMDYKCiogQXBwbHkgU29DIGNvbmNlcHQgdG8gYXJtOTI2ZWpzIENQVXMsIGkuZS4gbW92ZSB0aGUgU29DIHNwZWNpZmljCiAgdGltZXIgYW5kIGNwdV9yZXNldCBjb2RlIGZyb20gY3B1LyQoQ1BVKSBpbnRvIHRoZSBuZXcKICBjcHUvJChDUFUpLyQoU09DKSBkaXJlY3RvcmllcwogIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDEzIE1hciAyMDA2CgoqIENoYW5nZSBtYXggc2l6ZSBvZiB1bmNvbXByZXNzZWQgdUltYWdlJ3MgdG8gOE1CeXRlIGFuZCBhZGQKICBDRkdfQk9PVE1fTEVOIHRvIGFkanVzdCB0aGlzIHNldHRpbmcuCgogIEFzIG1lbnRpb25lZCBieSBSb2JpbiBHZXR6IG9uIDIwMDUtMDUtMjQgdGhlIHNpemUgb2YgdW5jb21wcmVzc2VkCiAgdUltYWdlcyB3YXMgcmVzdHJpY3RlZCB0byA0TUJ5dGVzLiBUaGlzIGRlZmF1bHQgc2l6ZSBpcyBub3cKICBpbmNyZWFzZWQgdG8gOE1ieXRlcyBhbmQgY2FuIGJlIG92ZXJyaWRlZCBieSBzZXR0aW5nIENGR19CT09UTV9MRU4KICBpbiB0aGUgYm9hcmQgY29uZmlnIGZpbGUuCgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgTWFyIDIwMDYKCiogRml4IHByb2JsZW0gd2l0aCB1cGRhdGVkIFBDSSBjb2RlIGluIGNwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIE1hciAyMDA2CgoqIGNwdS9wcGM0eHgvc3RhcnQuUyA6IGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQgYWZ0ZXIgcmVsb2NhdGlvbgogIFBhdGNoIGJ5IENlZHJpYyBWaW5jZW50LCAwNiBKdWwgMjAwNQoKKiBhdTF4MDBfZXRoLmM6IGNoZWNrIG1hbGxvYyByZXR1cm4gdmFsdWUgYW5kIGFib3J0IGlmIGl0IGZhaWxlZAogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyNiBKdWwgMjAwNQoKKiBDaGFuZ2UgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBpbiBzb2Z0X2kyYy5jOnNlbmRfYWNrKCkgdG8ga2VlcCBmcm9tCiAgaW5jb3JyZWN0bHkgZ2VuZXJhdGluZyBzdGFydC9zdG9wIGNvbmRpdGlvbnMgb24gdGhlIGJ1cy4KICBQYXRjaCBieSBBbmRyZXcgRHllciwgMjYgSnVsIDIwMDUKCiogRml4IGJ1ZyBpbiBbaWRdY2FjaGVfc3RhdHVzIGNvbW1hbmRzIGZvciBNUEM4NXh4IHByb2Nlc3NvcnM7CiAgc2hvdWxkIGxvb2sgYXQgTFNCIG9mIEwxQ1NSbiByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lIGlmIEwxIGNhY2hlIGlzCiAgZW5hYmxlZCwgbm90IHRoZSBNU0IuCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTkgSnVsIDIwMDUKCiogRml4IGFycmF5IG92ZXJmbG93IHdpdGggZndfc2V0ZW52IG9uIHVuaW5pdGlhbGlzZWQgZW52aXJvbm1lbnQKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxNSBKdWwgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgRW1iZWRkZWRQbGFuZXQgRVA4OHggYm9hcmRzCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDUKCiogUmVtb3ZlIGJvYXJkIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgZnJvbSB0aGUgY29tbW9uIHhpbGlueAogIGV0aGVybmV0IGFuZCBpaWMgYWRhcHRlciBjb2RlLgogIFBhdGNoIGJ5IE1pY2hhZWwgTGliZXNraW5kLCAxMiBKdWwgMjAwNQoKKiBBZGQgTmF0IFNlbWkgRFA4Mzg2NSBQSFkgc3VwcG9ydCB0byBNUEM4NXh4IFRTRUMgZHJpdmVyCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKCiogQWRkIChzb21lKSBkZWZpbml0aW9ucyBmb3IgdGhlIE1QQzg1eHggbG9jYWwgYnVzIGNvbnRyb2xsZXIKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwOCBKdWwgMjAwNQoKKiBBZGQgQ1BNMiBJL08gcGluIGZ1bmN0aW9ucyBmb3IgTVBDODV4eCBwcm9jZXNzb3JzCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKCiogRml4IGNvbXBpbGUgcHJvYmxlbQoKKiBBZGRlZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODM0OUFEUyBib2FyZAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEgMTEgSmFuIDIwMDYKCiogRW5hYmxlIGFkZHJlc3MgdHJhbnNsYXRpb24gb24gTVBDODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDEwIEZlYiAyMDA2CgoqIERlY29wdWxlZCBzZXR0aW5nIG9mIE9SL0JSIGFuZCBMQkxBV0JBUi9MQkxBV0FSIG9uIE1QQzgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAyNSBKYW4gMjAwNgoKKiBGaXhlZCBkZWZpbmVzIGZvciBNUEM4M3h4IFNJQ1JMIHJlZ2lzdGVyIHRvIG1hdGNoIGN1cnJlbnQgc3BlY3MKICBQYXRjaCBieSBLdW1hciBHYWxhLCAyMyBKYW4gMjAwNgoKKiBPbmx5IGRpc2FibGUgdGhlIE1QQzgzeHggd2F0Y2hkb2cgaWYgaXRzIGVuYWJsZWQgb3V0IG9mIHJlc2V0LgogIElmIGl0cyBkaXNhYmxlZCBvdXQgb2YgcmVzZXQgU1cgY2FuIGxhdGVyIGVuYWJsZSBpdCBpZiBzbyBkZXNpcmVkCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWxsb3cgY29uZmlnIG9mIEdQSU8gZGlyZWN0aW9uICYgZGF0YSByZWdpc3RlcnMgYXQgYm9vdCBvbiA4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogRW5hYmxlIHRpbWUgaGFuZGxpbmcgb24gODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIE1ha2UgU3lzdGVtIElPIENvbmZpZyBSZWdpc3RlcnMgYm9hcmQgY29uZmlndXJhYmxlIG9uIE1QQzgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBGaXhlZCBQQ0kgaW5kaXJlY3QgY29uZmlnIG9wcyB0byBoYW5kbGUgbXVsdGlwbGUgUENJIGNvbnRyb2xsZXJzCiAgV2UgbmVlZCB0byBhZGp1c3QgdGhlIGJ1cyBudW1iZXIgd2UgYXJlIHRyeWluZyB0byBhY2Nlc3MgYmFzZWQKICBvbiB3aGljaCBQQ0kgY29udHJvbGxlciBpdHMgb24KICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMiBKYW4gMjAwNgoKKiBSZXBvcnQgYmFjayBQQ0kgYnVzIHdoZW4gZG9pbmcgdGFibGUgYmFzZWQgZGV2aWNlIGNvbmZpZwogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSSBwcmVmZXRjaGFibGUgcmVnaW9uIGFuZCBCQVJzCiAgSWYgYSBob3N0IGNvbnRyb2xsZXIgc2V0cyB1cCBhIHJlZ2lvbiBhcyBwcmVmZXRjaGFibGUgYW5kCiAgYSBkZXZpY2UncyBCQVIgZGVub3RlcyBpdCBhcyBwcmVmZXRjaGFibGUsIGFsbG9jYXRlIHRoZQogIEJBUiBpbnRvIHRoZSBwcmVmZXRjaCByZWdpb24uCgogIElmIGEgQkFSIGlzIHByZWZldGNoYWJsZSBhbmQgbm8gcHJlZmV0Y2hhYmxlIHJlZ2lvbiBoYXMKICBiZWVuIHNldHVwIGJ5IHRoZSBjb250cm9sbGVyIHdlIGZhbGwgYmFjayB0byBhbGxvY2F0aW5nCiAgdGhlIEJBUiBpbnRvIHRoZSBub3JtYWxseSBtZW1vcnkgcmVnaW9uLgogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZCBoZWxwZXIgZnVuY3Rpb24gZm9yIGdlbmVyaWMgZmxhdCBkZXZpY2UgdHJlZSBmaXh1cHMgZm9yIG1wYzgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBpbml0cmQgaW5mb3JtYXRpb24gdmlhIGZsYXQgZGV2aWNlIHRyZWUKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGRlZCBPRl9TVERPVVRfUEFUSCBhbmQgT0ZfU09DCgogIE9GX1NURE9VVF9QQVRIIHNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgZGV2aWNlIHRoZSBrZXJuZWwgY2FuIHVzZQogIGZvciBjb25zb2xlIG91dHB1dAoKICBPRl9TT0Mgc3BlY2lmaWVzIHRoZSBwcm9wZXIgbmFtZSBvZiB0aGUgU09DIG5vZGUgaWYgb25lIGV4aXN0cy4KICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBbGxvdyBib2FyZCBjb2RlIHRvIGZpeHVwIHRoZSBmbGF0IGRldmljZSB0cmVlIGJlZm9yZSBib290aW5nIGEga2VybmVsCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkZWQgQ09ORklHXyBvcHRpb25zIGZvciBiZF90IGFuZCBlbnYgaW4gZmxhdCBkZXYgdHJlZQoKCUNPTkZJR19PRl9IQVNfQkRfVCB3aWxsIHB1dCBhIGNvcHkgb2YgdGhlIGJkX3QKCWludG8gdGhlIHJlc3VsdGluZyBmbGF0IGRldmljZSB0cmVlLgoKCUNPTkZJR19PRl9IQVNfVUJPT1RfRU5WIHdpbGwgY29weSB0aGUgZW52aXJvbm1lbnQKCXZhcmlhYmxlcyBmcm9tIHUtYm9vdCBpbnRvIHRoZSBmbGF0IGRldmljZSB0cmVlCgogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgREhDUCB2ZW5kb3Igb3B0aW9uYWwgYm9vdGZpbGUgKCM2NykuCiAgSWdub3JlcyB0aGUgdmVuZG9yIFRGVFAgc2VydmVyIG5hbWUgb3B0aW9uICgjNjYpLgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CgoqIEZpeCBhIEhXIHRpbWluZyBpc3N1ZSBvbiA4NTQ4IENEUyBmb3IgZVRTRUMgMyBpbiBSR01JSSBtb2RlCiAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nLCAxNCBKdW4gMjAwNQoKKiBGaXggYmFkIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBMVFg5NzEgUEhZIG9uIE1QQzg1eHggYm9hcmRzLgogIFBhdGNoIGJ5IEdlcmhhcmQgSmFlZ2VyLCAyMSBKdW4gMjAwNQoKKiBBZGQgbmV0Y29uc29sZSBhbmQgc29tZSBtb3JlIGNvbW1hbmRzIHRvIFJQWGxpdGVfRFcgYm9hcmQKICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKCiogRml4IGJhZCBkZWNsYXJhdGlvbiBvbiBwY2lfY2ZnZnVuY19ub3RoaW5nCiAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1CgoqIEFkanVzdCAiZWNobyIgYXMgYSBkZWZhdWx0IGNvbW1hbmQKICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKCiogRml4IFBDSURGIGNhbGN1bGF0aW9uIGluIGNwdS9tcGM4MjYwL3NwZWVkLmMgZm9yIE1QQzgyODBFQwogIFBhdGNoIGJ5IEtva0hvdyBUZWgsIDE2IEp1biAyMDA1CgoqIEFkZCBjcmMgb2YgZGF0YSB0byBqZmZzMiAoaW4gamZmczJfMXBhc3NfYnVpbGRfbGlzdHMoKSkuCiAgUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNSBKdW4gMjAwNQoKKiBDb2RpbmcgU3R5bGUgY2xlYW51cAoKKiBBdm9pZCBkZXJlZmVyZW5jaW5nIE5VTEwgaW4gZmluZF9jbWQoKSBpZiBubyB2YWxpZCBjb21tYW5kcyB3ZXJlIGZvdW5kCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDEzIEp1biAyMDA1CgoqIEFkZCBBREkgQmxhY2tmaW4gc3VwcG9ydAogIC0gYWRkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluIEJGNTMzIENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBBREkgQkY1MzMgU3RhbXAgdUNsaW51eCBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBBREkgQkY1MzMgRVpLaXQgYm9hcmQKICBQYXRjaGVzIGJ5IFJpY2hhcmQgS2xpbmdsZXIsIDExIEp1biAyMDA1CgoqIEFkZCBsb2FkcyBvZiBudG9obCgpIGluIGltYWdlIGhlYWRlciBoYW5kbGluZwogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIEp1biAyMDA1CgoqIFN3aXRjaCBNUEM4NnhBRFMgYW5kIE1QQzg4NUFEUyBib2FyZHMgdG8gdXNlIGNwdWNsayBlbnZpcm9ubWVudAogIHZhcmlhYmxlIHRvIHNldCBjbG9jawogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CgoqIFJQWGxpdGUgY29uZmlndXJhdGlvbiBmaXhlcwogIC0gVXNlIGNvcnJlY3QgZmxhc2ggc2VjdG9yIHNpemUKICAtIFVzZSBjb3JyZWN0IG1lbW9yeSB0ZXN0IGVuZCBhZGRyZXNzCiAgLSBBZGQgc3VwcG9ydCBmb3IgYnppcDIgY29tcHJlc3Npb24KICAtIFZhcmlvdXMgc21hbGwgZml4ZXMKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQoKKiBNZW1vcnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGZvciBaUEMuMTkwMCBib2FyZAogIC0gRml4IFNEUkFNIHRpbWluZyBvbiBib3RoIGxvY2FsIGJ1cyBhbmQgNjB4IGJ1cwogIC0gQWRkIHN1cHBvcnQgZm9yIHNlY29uZCBmbGFzaCBiYW5rIChTSU1NKQogIC0gQ2hhbmdlIGJvb3QgZmxhc2ggYmFzZQogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBZGRlciBib2FyZHMgd2l0aCAxNk1CIFNEUkFNOwogIGFkZCBzdXBwb3J0IGZvciBzZWNvbmQgRkVDIG9uIEFkZGVyODd4IGJvYXJkLgogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CgoqIEZpeCBjb25kaXRpb25hbCBmb3IgaW5jbHVkaW5nIGtzODY5NWV0aCBkcml2ZXIKICBQYXRjaCBieSBHcmVnIFVuZ2VyZXIsIDA0IEp1biAyMDA1CgoqIEZpeCBNYWtlZmlsZTogaW5jbHVkZSBjb25maWcubWsgb25seSBhZnRlciBDUk9TU19DT01QSUxFIGlzIGRlZmluZWQKICBQYXRjaCBieSBGcmllZHJpY2ggTG9iZW5zdG9jaywgMDIgSnVuIDIwMDUKCiogRml4IGNvbW1lbnQgaW4gY29tbW9uL3NvZnRfaTJjLmMKICBQYXRjaGVzIGJ5IFBldGVyIEtvcnNnYWFyZC9Ub2x1bmF5IE9ya3VuLCAyNiBNYXkgMjAwNQoKKiBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzLgogIFBhdGNoIGJ5IEdyZWcgVW5nZXJlciwgMjEgTWF5IDIwMDUKCiogV29yZCBhbGlnbm1lbnQgZml4ZXMgZm9yIHdvcmQgYWxpZ25lZCBOUzE2NTUwIFVBUlQKICBQYXRjaCBieSBKZWFuLVBhdWwgU2FtYW4sIDAxIE1hciAyMDA1CgogIEZpeGVzIGJ1ZyB3aXRoIFVBUlQgdGhhdCBvbmx5IHN1cHBvcnRzIHdvcmQgYWxpZ25lZCBhY2Nlc3M6IHJlbW92ZWQKICAiX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOyIgZm9yICIoQ0ZHX05TMTY1NTBfUkVHX1NJWkUgPT0gNCkiIHNvbWUKICAoYnJva2VuISkgdmVyc2lvbnMgb2YgR0NDIGdlbmVyYXRlIGJ5dGUgYWNjZXNzZXMgd2hlbiBlbmNvdW50ZXJpbmcKICB0aGUgcGFja2VkIGF0dHJpYnV0ZSByZWdhcmRsZXNzIGlmIHRoZSBzdHJ1Y3QgaXMgYWxyZWFkeSBjb3JyZWN0bHkKICBhbGlnbmVkIGZvciBhIHBsYXRmb3JtLiBQZXJpcGhlcmFscyB0aGF0IGNhbiBvbmx5IGhhbmRsZSB3b3JkCiAgYWxpZ25lZCBhY2Nlc3Mgd29uJ3Qgd29yayBwcm9wZXJseSB3aGVuIGFjY2Vzc2VkIHdpdGggYnl0ZSBhY2Nlc3MuCiAgVGhlIHN0cnVjdCBOUzE2NTUwIGlzIGFscmVhZHkgd29yZCBhbGlnbmVkIGZvciBSRUdfU0laRSA9IDQsIHNvCiAgdGhlcmUgaXMgbm8gbmVlZCB0byBwYWNrZWQgdGhlIHN0cnVjdCBpbiB0aGF0IGNhc2UuCgoqIEZpeCBiZWhhdmlvdXIgaWYgZ2F0ZXdheWlwIGlzIG5vdCBzZXQKICBQYXRjaCBieSBSb2JpbiBHaWxrcywgMjMgRGVjIDIwMDQKCiogRml4IGNsZWFudXAgZm9yIG5ldHN0YXJ0IGJvYXJkLgogIFJlbW92ZSBidWlsZCByZXN1bHRzIGZyb20gcmVwb3NpdG9yeQoKKiBTb21lIGNvZGUgY2xlYW51cCBmb3IgR0NDIDQueAoKKiBGaXhlcyB0byBzdXBwb3J0IGVudmlyb25tZW50IGluIE5BTkQgZmxhc2g7CiAgZW5hYmxlIE5BTkQgZmxhc2ggYmFzZWQgZW52aXJvbm1lbnQgZm9yIGRlbHRhIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgTW9uYWhhbnMgQ1BVIG9uIFp5bG9uaXRlIGFuZCBEZWx0YSBib2FyZHMKICAoVGhpcyBpcyBXb3JrIGluIFByb2dyZXNzISkKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNjAtQUkgYm9hcmRzLgoKKiBNaW5vciBjb2RlIGNsZWFudXAKCiogTWVyZ2UgdGhlIG5ldyBOQU5EIGNvZGUgKHRlc3RpbmctTkFORCBicmFjaCk7IHNlZSBkb2MvUkVBRE1FLm5hbmQKICBSZXdyaXRlIG9mIE5BTkQgY29kZSBiYXNlZCBvbiB3aGF0IGlzIGluIDIuNi4xMiBMaW51eCBrZXJuZWwKICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjkgSnVuIDIwMDUKCiogQWRkIGxvd2Jvb3QgdGFyZ2V0IHRvIG1jYzIwMCBib2FyZAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBNYXIgMjAwNgoKKiBGaXggcHJvYmxlbSB3aXRoIGZsYXNoX2dldF9zaXplKCkgZnJvbSBDRkkgZHJpdmVyIHVwZGF0ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMSBNYXIgMjAwNgoKKiBNYWtlIENGR19OT19GTEFTSCB3b3JrIG9uIEFSTSBzeXN0ZW1zCiAgUGF0Y2ggYnkgTWFya3VzIEtsb3R6YnVlY2hlciwgMjcgRmViIDIwMDYKCiogVXBkYXRlIG1jYzIwMCBjb25maWc6IERpc2FibGUgUENJIGFuZCBEb0MsIHVzZSAxMzMgTUh6IElQQiBjbG9jaywKICB1c2UgaHVzaCBzaGVsbC4KCiogQ29udmVydCBtY2MyMDAgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBGZWIgMjAwNgoKKiBBZGQgZW52LXZhcmlhYmxlICJ1bmxvY2siIHRvIGhhbmRsZSBpbml0aWFsIHN0YXRlIG9mIHNlY3RvcnMKICAobG9ja2VkL3VubG9ja2VkKS4KCiAgT25seSB0aGUgVS1Cb290IGltYWdlIGFuZCBpdCdzIGVudmlyb25tZW50IGlzIHByb3RlY3RlZCwKICBhbGwgb3RoZXIgc2VjdG9ycyBhcmUgdW5wcm90ZWN0ZWQgKHVubG9ja2VkKSBpZiBmbGFzaAogIGhhcmR3YXJlIHByb3RlY3Rpb24gaXMgdXNlZCAoQ0ZHX0ZMQVNIX1BST1RFQ1RJT04pIGFuZAogIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAidW5sb2NrIiBpcyBzZXQgdG8gInllcyIuCgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggRmViIDIwMDYKCiogVXBkYXRlIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBmaW5kX3NlY3RvcigpIGNhbGxlZCBpbiBib3RoIHZlcnNpb25zIG9mIGZsYXNoX3dyaXRlX2NmaXdvcmQoKQogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMjd0aCBGZWIgMjAwNgoKKiBDRkkgc3VwcG9ydCBmb3IgYSB4OC94MTYgQU1EL1NwYW5zaW9uIGZsYXNoIGNvbmZpZ3VyZWQgaW4geDggbW9kZQogIFBhdGNoIGJ5IEpvc2UgTWFyaWEgTG9wZXosIDE2IEphbiAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciBBTUQvU3BhbnNpb24gRmxhc2hlcyBpbiBmbGFzaF93cml0ZV9jZmlidWZmZXIKICBQYXRjaCBieSBBbGV4IEJhc3RvcyBhbmQgVGhvbWFzIFNjaGFlZmVyLCAyMDA1LTA4LTI5CgoqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgV2UgKnNob3VsZCogY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBlcnJvciBiaXRzIGlmIHRoZSBwcmV2aW91cyBjYWxsCiAgcmV0dXJuZWQgRVJSX09LIChPdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIG91dHB1dCBhbiBlcnJvciBtZXNzYWdlIGluCiAgZmxhc2hfc3RhdHVzX2NoZWNrKCkgYWxyZWFkeS4pICBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBvbmx5IGNoZWNrIGZvcgogIGVycm9yIGJpdHMgaWYgZmxhc2hfc3RhdHVzX2NoZWNrKCkgcmV0dXJucyBFUlJfVElNRU9VVC4KICBQYXRjaCBieSBNYXJjdXMgSGFsbCwgMjMgQXVnIDIwMDUKCiogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIEFkZCBDRkdfRkxBU0hfUFJPVEVDVF9DTEVBUiBvbiBkcml2ZXJzL2NmaV9mbGFzaC5jCiAgLSBQcm9oaWJpdCBidWZmZXIgd3JpdGUgd2hlbiBidWZmZXJfc2l6ZSBpcyAxIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKICBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDE5IEF1ZyAyMDA1CgoqIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gRml4IHdyb25nIHRpbWVvdXQgdmFsdWUgdXNhZ2UgaW4gZmxhc2hfc3RhdHVzX2NoZWNrKCkKICAtIFJvdW5kIHdyaXRlX3RvdXQgdXAgd2hlbiBjb252ZXJ0aW5nIHRvIG1zZWMgaW4gZmxhc2hfZ2V0X3NpemUoKQogIC0gUmVtb3ZlIGNsZWFyaW5nIGZsYXNoIHN0YXR1cyBhdCB0aGUgZW5kIG9mIGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcigpCiAgICB3aGljaCBzZXRzIEludGVsIDI4RjY0MEozIGZsYXNoIGJhY2sgdG8gY29tbWFuZCBtb2RlIG9uIENTQjQ3MgogIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDAyIEp1bHkgMjAwNQoKKiBBZGQgYmFzaWMgc3VwcG9ydCBmb3IgdGhlIFNNTUFDTzQgQm9hcmQgZnJvbSBQYW5EYUNvbS4KICBQYXRjaCBieSBIZWlrbyBTY2hvY2hlciwgMjAgRmViIDIwMDYKCiogQWRkIEdJVCB2ZXJzaW9uIGluZm9ybWF0aW9uIChjb21taWQgSUQpIHRvIHVudGFnZ2VkIFUtQm9vdCB2ZXJzaW9ucwoKICBBcyBkb25lIGluIHRoZSBsaW51eCBrZXJuZWwsIHRoZSBVLUJvb3QgdmVyc2lvbiAoVV9CT09UX1ZFUlNJT04pCiAgb2YgYWxsIHVucmVsZWFzZWQgKHVudGFnZ2VkKSBVLUJvb3QgaW1hZ2VzIHdpbGwgYmUgYXV0b21hdGljYWxseQogIGV4dGVuZGVkIHVwb24gY29tcGlsZXRpbWUgd2l0aCBhIHBhcnQgb2YgdGhlIEdJVCBjb21taXQgSUQgYW5kCiAgcG9zc2libHkgd2l0aCAiZGlydHkiIGlmIHVuY29tbWl0ZWQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuCgogIEhlcmUgYW4gZXhhbXBsZSBmb3IgdGhlIHJlc3VsdGluZyB2ZXJzaW9uOgogICJVLUJvb3QgMS4xLjQtZzM0NTdhYzE4LWRpcnR5IgoKICBUaGUgdmVyc2lvbiBpcyBub3cgbWFpbnRhaW5lZCBpbiB0aGUgdG9wbGV2ZWwgTWFrZWZpbGUgYW5kIHRoZQogIHZlcnNpb24gaGVhZGVycyBhcmUgYXV0b2dlbmVyYXRlZC4KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA5IEZlYiAyMDA2CgoqIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBJTktBNHgwMCBib2FyZC4KCiogQ29udmVydCBDUENJNzUwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgogIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDggRmViIDIwMDYKCiogVmFyaW91cyBjaGFuZ2VzIHRvIGVzZCBISDQwNSBib2FyZCBzcGVjaWZpYyBmaWxlcwogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwNyBGZWIgMjAwNgoKKiBDbGVhbnVwIFUtQm9vdCBib290IG1lc3NhZ2VzIG9uIEFSTS4KCiAgVG8gbWF0Y2ggdGhlIFUtQm9vdCB1c2VyIGludGVyZmFjZSBvbiBBUk0gcGxhdGZvcm1zIHRvIHRoZSBVLUJvb3QKICBzdGFuZGFyZCAoYXMgb24gUFBDIHBsYXRmb3JtcyksIHNvbWUgbWVzc2FnZXMgd2l0aCBkZWJ1ZyBjaGFyYWN0ZXIKICBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZWZhdWx0IFUtQm9vdCBidWlsZC4KICBFbmFibGUgREVCVUcgZm9yIGxpYl9hcm0vYm9hcmQuYyB0byBlbmFibGUgZGVidWcgbWVzc2FnZXMuCiAgTmV3IENPTkZJR19ESVNQTEFZX0NQVUlORk8gYW5kIENPTkZJR19ESVNQTEFZX0JPQVJESU5GTyBvcHRpb25zLgogIFBhdGNoCSBieSBTdGVmYW4gUm9lc2UsIDI0IEphbiAyMDA2CgoqIEZpeCB2YXJpb3VzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIHBwYzR4eCBidWlsZHMgKEVMREsgNC4wKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggSmFuIDIwMDYKCiogQWRkIFZHQSBzdXBwb3J0IChDVDY5MDAwKSB0byBDUENJNzUwIGJvYXJkLgogIEluc2VydCBtaXNzaW5nIF9fbGUzMl90b19jcHUoKSBmb3IgZmlsZXNpemUgaW4gZXh0MmZzX3JlYWRfZmlsZSgpLgogIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDMwIERlYyAyMDA1CgoqIFBNQzQwNSBhbmQgQ1BDSTQwNTogTW92ZWQgY29uZmlndXJhdGlvbiBvZiBwY2kgcmVzb3VyY2VzCiAgaW50byBjb25maWcgZmlsZS4KICBQTUM0MDUgYW5kIENQQ0kyRFA6IEFkZGVkIGZpcm13YXJlIGRvd25sb2FkIGFuZCBib290aW5nIHZpYSBwY2kuCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIwIERlYyAyMDA1CgoqIEZpeCAyOEYyNTZKM0Egc3VwcG9ydCBvbiBQTTUyMCBib2FyZAogICh3aXRob3V0IGJhbmstc3dpdGNoaW5nIG9ubHkgMzIgTUIgY2FuIGJlIGFjY2Vzc2VkKQoKKiBGaXggbWtpbWFnZSBidWcgd2l0aCBtdWx0aWZpbGUgaW1hZ2VzIGNyZWF0ZWQgb24gNjQgYml0IHN5c3RlbXMuCgoqIEFkZCBzdXBwb3J0IGZvciAyOEYyNTZKM0EgZmxhc2ggKD0+IDY0IE1CKSBvbiBQTTUyMCBib2FyZAoKKiBGaXggY29tcGlsZXIgcHJvYmxlbSB3aXRoIGF0OTFybTkyMDBkayBib2FyZC4KICBQYXRjaCBieSBFdWdlbiBCaWd6LCAxOSBEZWMgMjAwNQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQ2hhbmdlcyB0byBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIDQ0MEVQL0dSIGV2YWwgYm9hcmRzOgogIC0gQ2hhbmdlZCBHUElPIHNldHVwIHRvIGVuYWJsZSBhbm90aGVyIGFkZHJlc3MgbGluZSBpbiBvcmRlciB0bwogICAgYWRkcmVzcyA2NE0gb2YgRkxBU0guCiAgLSBBZGRlZCBmdW5jdGlvbiBzZHJhbV90cjFfc2V0IHRvIGF1dG8gY2FsY3VsYXRlIHRoZSB0cjEgdmFsdWUgZm9yCiAgICB0aGUgRERSLgogIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDEyIERlYyAyMDA1CgoqIE1QQzUyMDA6ICBTZXQgUENJIHJldHJ5IGNvdW50ZXIgdG8gMCA9IGluZmluaXRlIHJldHJ5OwogIFRoZSBkZWZhdWx0IG9mIDI1NSBpcyB0b28gc2hvcnQgZm9yIHNsb3cgZGV2aWNlcy4KICBQYXRjaCBieSBNYXJ0aW4gTnlrb2R5bSwgMTIgRGVjIDIwMDUKCiogQ2hhbmdlIHBvcnQgY29uZmlndXJhdGlvbiBmb3IgTzJETlQgKENPREVDMSBvbiBQU0MxKS4KCiogRml4IHJlZ2lzdGVyIGZvciBQQ0kgYXN5bmMgbW9kZSBvbiBQUEM0NDBFUAogIFBhdGNoIGJ5IFlvdW5nY2h1bCBCYW5nLCAwOCBEZWMgMjAwNQoKKiBGaXggVS1Cb290IGxpbmtpbmcgcHJvYmxlbXMgKGFkZCAuZWhfZnJhbWUgc2VnbWVudCB0byBsaW5rZXIgc2NyaXB0KQogIFRoaXMgc2VnbWVudCBtYXkgYmUgcmVxdWlyZWQgYnkgc29tZSBsaWJnY2MuYSBmdW5jdGlvbnMKICAobGlrZSBfdWRpdmRpMykuCgoqIEZpeCBEUFJBTSBvZmZzZXQvc2l6ZSBmb3IgTVBDODU0MS84NTU1LgogIFNpbXBsaWZ5IFRRTTg1eHggTWFrZWZpbGUgaGFuZGxpbmcuCgoqIEZpeCBkYXRhIG92ZXJmbG93ICh0eXBvPykgaW4gcnRjL2RzMTMwMi5jCgoqIEZpeCBVLUJvb3QgY29tcGlsYXRpb24gZm9yIE1JUFMgYm9hcmRzIHVzaW5nIEVMREsgNC4wCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzLCBUUU04NXh4IHN1cHBvcnQgcmV3b3JrZWQ6CiAgLSBTdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzIGFkZGVkLgogIC0gQ29tcGxldGUgcmV3b3JrIG9mIFRRTTg1NDAvODU2MCBzdXBwb3J0LgogIC0gQ29tbW9uIFRRTTg1eHggY29kZSBub3cgc3VwcG9ydHMgYWxsIGN1cnJlbnQgVFFNODV4eCBwbGF0Zm9ybXMKICAgIChUUU04NTQwLzg1NDEvODU1NS84NTYwKS4KICAtIEREUiBTRFJBTSBzaXplIGRldGVjdGlvbiBhZGRlZC4KICAtIENBUyBsYXRlbmN5IGRlZmF1bHQgdmFsdWVzIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzZXR0aW5nICJzZXJpYWwjIgogICAgdG8gZS5nLiAiQUJDMDAwMSBjYXNsPTI1IiAtPiBDQVMgbGF0ZW5jeSAyLjUgd2lsbCBiZSB1c2VkLgogICAgSWYgcHJvYmxlbXMgYXJlIGRldGVjdGVkIHdpdGggdGhpcyBub24gZGVmYXVsdCBDQVMgbGF0ZW5jeSwKICAgIHRoZSBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KICAtIEZsYXNoIHNpemUgZGV0ZWN0aW9uIGFkZGVkLgogIC0gTW92ZWQgRkNDIGV0aGVybmV0IGRyaXZlciBpbml0aWFsaXphdGlvbiBiZWhpbmQgVFNFQyBkcml2ZXIgaW5pdAogICAgLT4gVFNFQyBpcyBmaXJzdCBkZXZpY2UuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBOb3YgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBTUCwgYWRkIHN1cHBvcnQgZm9yIEFNQ0MgTHVhbiA0NDBTUCBldmFsIGJvYXJkLgogIFBhdGNoIGJ5IEpvaG4gT3RrZW4sIDIzIE5vdiAyMDA1CgoqIENoYW5nZWQgUFBDNDR4IHN0YXJ0dXAgbWVzc2FnZSAoY3B1IGluZm8sIHNwZWVkLi4uKSB0byBjb21tb24gc3R5bGU6CiAgT24gUFBDNDR4IHBsYXRmb3JtcywgdGhlIHN0YXJ0dXAgbWVzc2FnZSBnZW5lcmF0ZWQgaW4gImNwdS5jIiBvbmx5CiAgY29tcHJpc2VkIHRoZSBwcGMgdHlwZSBhbmQgcmV2aXNpb24gYnV0IG5vdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCiAgbGlrZSBzcGVlZCBldGMuIFRob3NlIHNwZWVkIGluZm9zIHdoZXJlIHByaW50ZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljCiAgY29kZS4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gbm93IHByaW50cyBhbGwgQ1BVIGluZm9zIGluIHRoZSBjb21tb24KICBjcHUgc3BlY2lmaWMgY29kZS4gTm8gYm9hcmQgc3BlY2lmaWMgY29kZSBpcyBuZWVkZWQgYW55bW9yZSBhbmQKICB0aGVyZWZvcmUgcmVtb3ZlZCBmcm9tIGFsbCBjdXJyZW50IDQ0eCBpbXBsZW1lbnRhdGlvbnMuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBOb3YgMjAwNQoKKiBBZGp1c3QgVFFNODM0eCBQSFkgYWRkcmVzc2VzIGZvciBsYXRlc3QgaGFyZHdhcmUgcmV2aXNpb24uCgoqIEluY3JlYXNlIG1hbGxvYyBhcmVuYSBvbiBUUU01MjAwIGJvYXJkIHRvIDI1NiBrQi4KICBXaXRoIDY0IGtiIHVuaWZvcm0gZmxhc2ggc2VjdG9yIHNpemUgdGhlIG9sZCB2YWx1ZSBvZiAxMjgga0Igd2FzCiAgdG9vIHNtYWxsLgoKKiBGaXggbWlpcGh5IGdsb2JhbCBkYXRhIGluaXRpYWxpemF0aW9uIChwcm9ibGVtIG9uIDR4eCBib2FyZHMgd2hlbgogIG5vIGV0aGFkZHIgaXMgYXNzaWduZWQpLiBJbml0aWFsaXphdGlvbiBtb3ZlZCBmcm9tCiAgbWlpcGh5X3JlZ2lzdGVyKCkgdG8gZXRoX2luaXRpYWxpemUoKS4KCiAgQmFzZWQgb24gaW5pdGlhbCBwYXRjaCBmb3IgNHh4IHBsYXRmb3JtIGJ5IE1hdHRoaWFzIEZ1Y2hzLgoKKiBSZW1vdmUgdW5ubmVjZXNzYXJ5ICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiBmcm9tIGluY2x1ZGUvYXNtLSovdS1ib290LmgKCiogQWxsb3cgdXNlIG9mIGluY2x1ZGUvaW1hZ2UuaCBhbmQgaW5jbHVkZS9hc20tKi91LWJvb3QuaCBpbiBwcm9wcmlldGFyeSBjb2RlLgogIFRoZSBDT1BZSU5HIGZpbGUgd2FzIGV4dGVuZGVkIHRvIG1ha2UgY2xlYXIgdGhhdCB0aGVzZSBmaWxlcyBjYW4gYmUKICB1c2VkIGluIG5vbi1HUEwgY29kZSwgdG9vLgogIEFsc28sIGEgY29ycmVzcG9uZGluZyBub3RlIHdhcyBwbGFjZWQgaW4gdGhlIGhlYWRlcnMgb2YgdGhlIGFmZmVjdGVkIGZpbGVzLgoKKiBBZGQgc3VwcG9ydCBmb3IgUHJvZHJpdmUgUDNQNDQwIGJvYXJkOgogIC0gQWRkZWQgb25ib2FyZCBQUEM0NDAgRERSIGF1dG9kZXRlY3Rpb24gaW4gY3B1L3BwYy9zZHJhbS5jCiAgLSBDRkdfRkxBU0hfUVVJRVRfVEVTVCBhZGRlZCB0byB1c2UgdGhlIGNvbW1vbiBDRkkgZHJpdmVyCiAgICBmb3IgYmFuayBhdXRvZGV0ZWN0aW9uCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMiBOb3YgMjAwNQoKKiBDaGFuZ2UgYWxsICckKC4uLiknIHZhcmlhYmxlIHJlZmVyZW5jZXMgaW50byAnJHsuLi59JwogIHdoaWNoIG1ha2VzIHRoZSBlbnZpcm9ubWVudCBjb21wYXRpYmxlIHdpdGggdGhlIGh1c2ggc2hlbGwuCiAgV0FSTklORzogU3VwcG9ydCBmb3IgdGhlIG9sZCAnJCguLi4pJyBzeW50YXggd2lsbCBiZQogIGRpc2NvbnRpbnVlZCBpbiBhIGxhdGVyIHZlcnNpb24uCgoqIE1pbm9yIGNoYW5nZXMgdG8gaW5pdCBmbGFncyBpbiBUUU04MzR4IFBDSS4KCiogRml4IEJhbWJvbyBERFIgU0RSQU0gaW5pdGlhbGl6YXRpb24gKHByb2JsZW0gd2l0aCBvbmJvYXJkIFNEUkFNKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgTm92IDIwMDUKCiogTmV3IFBQQyA0MDVFUCBib2FyZCBhZGRlZDogQ01TNzAwCiAgQWRkZWQgQ09ORklHX05FVF9NVUxUSSBmb3IgVk9NNDA1IGJvYXJkLgogIEFkZGVkIHJlc2V0X3BoeSgpIGZvciBWT000MDUgYm9hcmQuCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA5IE5vdiAyMDA1CgoqIFVwZGF0ZWQgUENJIG1hcHBpbmcgZm9yIGVzZCBDUENJMkRQIGJvYXJkLgogIEFkZCBzdXBwb3J0IGZvciBlcnJvciBMRUQuCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA3IE5vdiAyMDA1CgoqIEZpeCBNUEM4NXh4IFBDSSBzdXBwb3J0IChwY2lfcmVnaXN0ZXJfaG9zZSgpIGJlZm9yZSBwY2kgY29uZmlnIGFjY2VzcykKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE5vdiAyMDA1CgoqIENvcnJlY3QgUFBDIFRpbWViYXNlIHJlZ2lzdGVyIGRlZmluaXRpb25zIChTUFJOX1RCUkwuLi4pCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBOb3YgMjAwNQoKKiBBZGp1c3QgYmQtPmJpX2ZsYXNoc3RhcnQgb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZSB0byBjb3JyZWN0IHNpemUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IE5vdiAyMDA1CgoqIEFkZGl0aW9uYWwgZml4IGZvciBleHRlcm5hbCBJUlEgY29uZmlnIG9uIFllbGxvd3N0b25lICYgWW9zZW1pdGUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE5vdiAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBPY290ZWEgcGFzcyAzIHdpdGggNDQwR1ggUmV2LiBGCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBOb3YgMjAwNQoKKiBGaXggZXh0ZXJuYWwgSVJRIGNvbmZpZ3VyYXRpb24gb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggT2N0IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIFBIWXMuCiAgVGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgYm9hcmRzOgoJY21jcHUyCSAgICAoYXQ5MXJtOTIwMC9ldGhlci5jKQoJUFBDaGFtZWxlb24gKHBwYzR4eC80eHhfZW5ldC5jKQoJeXVrb24JICAgIChtcGM4MjIwL2ZlYy5jKQoJdWMxMDAJICAgIChtcGM4eHgvZmVjLmMpCgl0cW04MzR4CSAgICAobXBjODM0eC90c2VjLmMpIHdpdGggRUVQUk8xMDAKCWxpdGU1MjAwICAgIChtcGM1eHh4L2ZlYy5jKSB3aXRoIEVFUFJPMTAwIGNhcmQgKGRyaXZlcnMvZWVwcm8xMDAuYykKICBNYWluIGNoYW5nZXMgaW5jbHVkZToKICBjb21tb24vbWlpcGh5dXRpbC5jCiAgLSBtaWlwaHlfcmVnaXN0ZXIgcm91dGluZSB3YXMgYWRkZWQgdG8gYWxsb3cgbXVsdGlwbGUgUEhZcyB0byBiZSByZWdpc3RlcmVkCiAgLSBtaWlwaHlfcmVhZCBhbmQgbWlpcGh5X3dyaXRlIGFyZSBub3cgZGVmaW5lZCBpbiB0aGlzIGZpbGUsIGFuZAogICAgcmVxdWlyZSBhZGRpdGlvbmFsIGFyZ3VtZW50IChjaGFyICpkZXZuYW1lKQogIC0gb3RoZXIgbWlpcGh5Xyogcm91dGluZXMgYWxzbyByZXF1aXJlIGFkZGl0aW9uYWwgZGV2aWNlIG5hbWUgYXJndW1lbnQKICAuLi9saWJfaTM4Ni9ib2FyZC5jCiAgLi4vbGliX3BwYy9ib2FyZC5jCiAgQ2FsbGluZyByZXNldF9waHkoKSB3YXMgbW92ZWQgdG8gYmUgZXhlY3V0ZWQgKmFmdGVyKiBldGhfaW5pdGlhbGl6ZSgpLgogIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIG5vdyBzb21lIG9mIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgcmVzZXRfcGh5KCkKICBtYXkgbmVlZCB0byB1c2UgbWlpcGh5X3Jlc2V0KCkgd2hpY2ggaXMgbm90IGFsbG93ZWQgYmVmb3JlIGV0aF9pbml0aWFsaXplKCkKICBhcyBldGhfaW5pdGlhbGl6ZSByZWdpc3RlcnMgYWxsIHJlcXVpcmVkIG1paXBoeV8qIHJvdXRpbmVzLgogIFRlc3RlZCBvbiBJUDg2MCBhbmQgUEhZIGluaXRpYWxpemVzIHByb3Blcmx5IGFmdGVyIHRoaXMgY2hhbmdlLgoKKiBDb3JyZWN0IGluY2x1ZGVzIGZvciBmbGF0IHRyZWUgYnVpbGRlci4KCiogRml4IGNvbmZsaWN0aW5nIHR5cGVzIChmbGFzaF93cml0ZSgpKSBpbiB0cmFiIGF1dG9fdXBkYXRlLmMuCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgdGhlIFRRTTgzNHggYm9hcmQuCgoqIEFkZCBtaXNzaW5nIDR4eCBib2FyZCB0byBNQUtFQUxMCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQoKKiBGaXggY29uZmxpY3RpbmcgdHlwZXMgKGZsYXNoX3dyaXRlKCkpIGluIGVzZCBhdXRvX3VwZGF0ZS5jCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQoKKiBGaXggcHJvYmxlbSB3aXRoIHNsZWVwIGluIE5ldENvbnNvbGUgKHVzZSBnZXRfdGltZXIoKSkKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CgoqIEFkZCBOZXRDb25zb2xlIFN1cHBvcnQgZm9yIEFNQ0MgZXZhbCBib2FyZHMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CgoqIEZpeCBOZXRDb25zb2xlIHN1cHBvcnQgb24gNHh4IChvbmx5IHByaW50IGV0aCBsaW5rIG9uIDFzdCB0cmFuc2ZlcikKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IE9jdCAyMDA1CgoqIEFkZCBmYXQgJiBleHQyIHN1cHBvcnQgdG8gQU1DQyA0NDBFUCBib2FyZHMgWW9zZW1pdGUgJiBCYW1ib28uCiAgRml4IGlkZW50YXRpb24gb24gZXh0MmxzIGhlbHAgZW50cnkuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNCBPY3QgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODM0eCBib2FyZHMuCiAgQ2xlYW51cC4KCiogQ2xlYW51cCBmb3IgR0NDLTQueAoKKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgT3BlbiBGaXJtd2FyZSBGbGF0IFRyZWUgYW5kIHVzYWdlLgogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMyBPY3QgMjAwNQoKKiBBZGQgbWlzc2luZyBmaWxlcyBmb3IgUGFudGVsaXMgQW50b25pb3UncyBwYXRjaAogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQoKKiBGaXggcHJvYmxlbSBpbiBwcGM0eHggZXRoLWRyaXZlciB3aXRob3V0IGV0aGFkZHIgKG9ubHkgd2l0aG91dAogIENPTkZJR19ORVRfTVVMVEkgc2V0KQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgT2N0IDIwMDUKCiogRml4IGd6aXAgYm1wIHN1cHBvcnQgKHRlc3QgaWYgbWFsbG9jIGZhaWxzLCB3YXJuaW5nIHdoZW4gdHJ1bmNhdGVkKS4KICBJbmNyZWFzZSBDRkdfVklERU9fTE9HT19NQVhfU0laRSBvbiBISDQwNSBib2FyZC4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE9jdCAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBPRiBmbGF0IHRyZWUgZm9yIHRoZSBTVFh0YyBib2FyZC4KICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKCiogU3VwcG9ydCBwYXNzaW5nIG9mIE9GIGZsYXQgdHJlZXMgdG8gdGhlIGtlcm5lbC4KICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKCiogQ2xlYW51cAoKKiBBZGQgc3VwcG9ydCBmb3IgTmV0U2lsaWNvbiBOUzc1MjAgcHJvY2Vzc29yLgogIFBhdGNoIGJ5IEFydCBTaGlwa293c2tpLCAxMiBNYXkgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQVAxMDAwIGJvYXJkLgogIFBhdGNoIGJ5IEphbWVzIE1hY0F1bGF5LCAwNyBPY3QgMjAwNQoKKiBFbGltaW5hdGUgaGFyZC1jb2RlZCBhZGRyZXNzIG9mIEV0aGVybmV0IHRyYW5zZmVyIGJ1ZmZlciBvbiBhdDkxcm05MjAwCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDcgT2N0IDIwMDUKCiAgVGhlIEF0bWVsIGVycmF0YSAjMTEgc3RhdGVzIHRoYXQgdGhlIHRyYW5zZmVyIGJ1ZmZlciBkZXNjcmlwdG9yCiAgdGFibGUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgMTYtd29yZCBib3VuZGFyeS4gQXMgaXQgdHVybmVkIG91dCwgdGhpcwogIGlzIGluc3VmZmljaWVudCAtIGl0IHNlZW1zIHRoZSB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSBib3VuZGFyeQogIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSB0YWJsZSBpdHNlbGYgKGluIExpbnV4IHRoaXMgaXMgbm90IGFuCiAgaXNzdWUgLSB0aGUgdGFibGUgaXMgYWxpZ25lZCBvbiBhIFBBR0VfU0laRSAoNDA5NikgYm91bmRhcnkpLgoKKiBGaXhlZCBjb21waWxhdGlvbiBmb3IgQVJNIHdoZW4gdXNpbmcgYSAoc3RhbmRhcmQpIGhhcmQtRlAgdG9vbGNoYWluCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDcgT2N0IDIwMDUKCiogQ2xlYW51cCB3YXJuaW5ncyBmb3IgY3B1L2FybTcyMHQgJiBjcHUvYXJtMTEzNiBmaWxlcy4KICBzZWQgdGhlIGxpbmtlciBzY3JpcHRzLCByYXRoZXIgdGhhbiBwcmUtcHJvY2VzcyB0aGVtLgogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDcgT2N0IDIwMDUKCiogVXBkYXRlIG1ha2UgdGFyZ2V0IGZvciBBUk0gc3VwcG9ydGVkIGJvYXJkcy4KICBVc2UgbG93bGV2ZWxfaW5pdCgpIGluc3RlYWQgb2YgcGxhdGZvcm1zZXR1cCgpIFtyZW5hbWVdLgogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDYgT2N0IDIwMDUKCiogRml4IGJvb3RpbmcgZnJvbSBzZXJpYWwgZGF0YWZsYXNoIG9uIEFUOTFSTTkyMDAKICBQYXRjaCBieSBQZXRlciBNZW56ZWJhY2gsIDI5IEF1ZyAyMDA1CgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBUUkFCIGJvYXJkCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjUgQXVnIDIwMDUKCiogUmVtb3ZlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgb2YgbmV0Y29uc29sZSBvbiBDT05GSUdfTkVUX01VTFRJCiAgUGF0Y2ggYnkgTWFyY3VzIEhhbGwsIDI0IEF1ZyAyMDA1CgoqIEZpeCB0aGUgbWFjaGluZS1pZCBvZiB0aGUgQ29nZW50IGNzYjYzNyBib2FyZAogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA1IE9jdCAyMDA1CgoqIENvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBLd2lrQnl0ZSBLQjkyMHggYm9hcmRzCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDUgT2N0IDIwMDUKCiogU2V0IHRoZSBBVDkxUk05MjAwIGNsb2NrIHRvIGFzeW5jaHJvbm91cyBtb2RlCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDMgTWF5IDIwMDUKCiogU2V0IHRoZSBBVDkxUk05MjAwIGNsb2NrIHRvIHN5bmNocm9ub3VzIG1vZGUKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IGNzYjYzNwogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CgoqIEZpeCBkbTkxNjEuYyBpbml0aWFsaXphdGlvbgogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CgoqIEZpeCBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAyIE1hciAyMDA1CiAgKDhlMmJlNTFkZThkZDAzYzFjZTRkMDZjYmIxOGFkMDYxMzNkNDdjZDUpCgoqIE1vdmUgZG05MTYxLmMgYW5kIGx4dDk3Mi5jIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CgoqIEZpeCBkZXZpY2UgcGFydGl0aW9uIGludGlhbGl6YXRpb24gZm9yIFN5c3RlbUFDRSBkaXNrcy4KICBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAyOCBBcHIgMjAwNQoKKiBBZGRlZCBzdXBwb3J0IGZvciBLd2lrQnl0ZSBLQjkyMHggYm9hcmRzIChiYXNlZCBvbiBBVDkxUk05MjAwKQogIFBhdGNoIGJ5IE1hdHQgPz8gPGtiOTIwMF9kZXZAa3dpa2J5dGUuY29tPiwgMjcgQXByIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIFMyOUdMMDY0TS1SMyBmbGFzaCBjaGlwIG9uIHhzZW5naW5lIGJvYXJkCiAgUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDE4IEFwciAyMDA1CgoqIEU1MDAgdXBkYXRlOiByZXBvaW50IElWUFIgdG8gUkFNIHdoZW4gY29kZSBpcyByZWxvY2F0ZWQKICBQYXRjaCBieSBLeWxvIEdpbnNiZXJnLCAxMyBBcHIgMjAwNQoKKiBGaXggbG9vcCBlbmQgdGVzdCBpbiBsaWJfZ2VuZXJpYy9zdHJpbmcuYzpzdHJzd2FiKCkKICBQYXRjaCBieSBBbmRyZXcgRHllciwgT2N0b2JlciAxMCwgMjAwNQogIFNpZ25lZC1vZmYtYnk6IEFuZHJldyBEeWVyIDxhbWR5ZXJAZ21haWwuY29tPgoKKiBDbGVhbnVwCgoqIFVwZGF0ZSBBUk0gSW50ZWdyYXRvciBib2FyZHM6CiAgQ29ycmVjdCBhZGRlc3NpbmcgZXJyb3JzIGluIHBsYXRmb3JtIGZpbGVzLgogIFNwbGl0IG9mZiBjb21tb24gY29yZSBtb2R1bGUgZGF0YSBmcm9tIEludGVncmF0b3IgaGVhZGVyIGZpbGVzIHRvCiAgaW5jbHVkZS9hcm1jb3JlbW9kdWxlLmguCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNCBPY3QgMjAwNQoKKiBNYWtlIHN1cmUgb25seSBzdXBwb3J0ZWQgY29tcGlsZXIgb3B0aW9ucyBhcmUgdXNlZAogIEltcG9ydCAiY2Mtb3B0aW9uIiBzaGVsbCBmdW5jdGlvbiBmcm9tIGtlcm5lbCBhbmQKICB1c2UgaXQgdG8gZ2V0IHRoZSBjb3JyZWN0IEFSTSBHQ0Mgb3B0aW9ucyBmb3IgaW5kaXZpZHVhbCBDUFVzCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAzMCBKdW4gMjAwNQoKKiBGaXggNDQwR1IgdG8gcHJpbnQgY29ycmVjdCBjcHUgcmV2aXNpb24KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA0IE9jdCAyMDA1CgoqIENoYW5nZSBib2FyZCBtZXNzYWdlIG9uIEFNQ0MgWW9zZW1pdGUgJiBZZWxsb3dzdG9uZSB0byBjb21tb24gc3R5bGUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE9jdCAyMDA1CgoqIEZpeCBjb21waWxlciB3YXJuaW5nCgoqIEZpeCBGRUMgUEhZIGFkZHJlc3NlcyBmb3IgVFFNODV4eCBib2FyZHMKCiogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcHJvYmxlbSBpbiBodXNoIHNoZWxsCiAgUGF0Y2ggYnkgTGFycyBSb3N0b2NrLCAyNiBTZXAgMjAwNQoKKiBVbmRvIGNoYW5nZSBvZiBmNmUyMGZjNmNhLi4uIHRvIGluY2x1ZGUvY29uZmlncy90cmFiLmgKICAoTXVzdCBoYXZlIGJlZW4gYW4gYWNjaWRlbnQ/KQoKKiBBZGQgc3VwcG9ydCBmb3IgQVQ5MVJNOTIwMCBPSENJIENvbnRyb2xsZXIuCiAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CgoqIFVwZGF0ZSBBUk0gbWFjaC10eXBlcy5oCiAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBNUDJVU0IgYm9hcmQuCiAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CgoqIEFkZCBib2FyZCBzdXBwb3J0IGZvciBhcm1hZGlsbG8gSFQxMDcwCiAgUGF0Y2ggYnkgUm93ZWwgQXRpZW56YSwgMDYgQXByIDIwMDUKCiogU2Vjb25kIEV0aGVybmV0IGFkZHJlc3MgZW5hYmxlZCBmb3IgTVBDODg1QURTIGFuZCBNUEM4MjcyQURTLgogIFBhdGNoIGJ5IFZpdGFseSBCb3JkdWcsIDMwIE1hciAyMDA1CgoqIEFkZCBpb3BzZXQgY29tbWFuZCBvbiBtcGM4eHgKICBQYXRjaCBieSBEYW5pZWwgRWlzZW5odXQsIDI1IE1hciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBNSUkgaW4gZWVwcm8xMDAgZHJpdmVyLgogIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMjEgTWFyIDIwMDUKCiogRml4ZXMgdG8gdGhlIEx1YmJvY2sgKFBYQSAyNXgpIHN1cHBvcnQ6CiAgLSBSZXNvbHZlIHRoZSBGSVhNRSB3aXRoIHJlc3BlY3QgdG8gc2F2aW5nIHRoZSB1LWJvb3QgZW52aXJvbm1lbnQuCiAgLSBNYWtlIHRoZSBkZWZhdWx0IGxvYWQgYWRkcmVzcyBsYW5kIGluIHJlYWwgbWVtb3J5LgogIC0gRml4IGxhbjkxYzk2IFNNQ197aW4sb3V0fXtiLHcsbH0oKSBtYWNyb3MKICBQYXRjaCBieSBEYXZpZCBCcm93bmVsbCwgMTAgTWFyIDIwMDUKCiogQWRkIEJhcmNvIFN0cmVhbWluZyBWaWRlbyBDYXJkIChTVkMpIGFuZCBTYW1wbGUgQ29tcHJlc3MgTmV0d29yayAoU0NOKSBib2FyZAogIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAwNCBNYXIgMjAwNQoKKiBPTUFQMjQyeCBINCBib2FyZCB1cGRhdGUKICAtIGZpeCBmb3IgRVMyIGRpZmZlcmVuY2VzLgogIC0gc3dpdGNoIHRvIHVzaW5nIHRoZSBjZmlfZmxhc2ggZHJpdmVyLgogIC0gZml4IFNSQU0gYnVpbGQgYWRkcmVzcy4KICAtIGZpeCBmb3IgR1AgZGV2aWNlIG9wZXJhdGlvbi4KICAtIHVubG9jayBTUkFNIGZvciBHUCBkZXZpY2VzLgogIC0gZGlzcGxheSBtb3JlIGRldmljZSBpbmZvcm1hdGlvbi4KICAtIGZpeCBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gb21hcDI0eHhfaTJjIGRyaXZlci4KICAtIGZpeCBETEwgbG9hZCB2YWx1ZXMgdG8gbWF0Y2ggZHBsbG91dCoxIG9wZXJhdGlvbi4KICAtIGZpeCAybmQgY2hpcCBzZWxlY3QgaW5pdCBmb3IgY29tYm8gRERSIGRldmljZS4KICAtIGFkZCBzdXBwb3J0IGZvciBDRkkgSW50ZWwgMjhGMjU2TDE4IG9uIEg0IGJvYXJkLgogIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDAzIE1hciAyMDA1CgoqIEZpeCBmb3JtYXRpbmcgaW4gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9BVDkxUk05MjAwLmgKICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMiBNYXIgMjAwNQoKKiBGaXggdHlwbyBpbiBldGguYwogIFBhdGNoIGJ5IEFyYSBBdmFuZXN5YW4sIDI0IEZlYiAyMDA1CgoqIFJlbW92ZSB1bm5lZWRlZCAjaW5jbHVkZSA8bWFsbG9jLmg+CiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDIyIEZlYiAyMDA1CgoqIEFkZCBjcmFtZnMgc3VwcG9ydCBmb3IgbTY4awogIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAyMSBGZWIgMjAwNQoKKiBVcGRhdGUgZXA4MjYwOiBGaXggZmxhc2ggdGltZW91dHM7IGltcHJvdmUgY2xvY2sgcmVzb2x1dGlvbiBmb3IgZmFzdGVyIFVBUlRzCiAgUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDIxIEZlYiAyMDA1CgoqIEZpeCBhdTF4MDBfc2VyaWFsIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbjoKICByZW1vdmUgaGFyZGNvZGVkIGNwdSBjbG9jayBkaXZpc29yIGFuZCB1c2UgcmVnaXN0ZXIgaW5zdGVhZDsKICByb3VuZCB1cCBpbnN0ZWFkIG9mIHRydW5jYXRlCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDE1IEZlYiAyMDA1CgoqIEFkZCBYaWxpbnggU3BhcnRhbjMgZmFtaWx5IEZQR0Egc3VwcG9ydAogIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAxNCBGZWIgMjAwNQoKKiBGaXggZHJpdmVycy9jZmlfZmxhc2guYzogdXNlIGluZm8tPnJlc2V0X2NtZCBpbnN0ZWFkIG9mIEZMQVNIX0NNRF9SRVNFVAogIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAxMSBGZWIgMjAwNQoKKiBGaXggVk9INDA1IFN1cHBvcnQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjUgU2VwIDIwMDUKCiogQWRkZWQgc3VwcG9ydCBmb3IgUENJIGJyaWRnZSBvbiBNUEM4MjcyQURTCiAgUGF0Y2ggYnkgVml0YWx5IEJvcmR1ZywgRmViIDA5IDIwMDUKCiogVXBkYXRlIG11bHRpY29yZSBDTTlYWCBzdXBwb3J0IGZvciBJbnRlZ3JhdG9yIEFQIHRvIGFsbG93IGJvb3RpbmcgZnJvbSBmbGFzaAogIFBhdGNoIGJ5IEplYW4tUGF1bCBTYW1hbiwgOCBGZWIgMjAwNQoKKiBGaXggc3Ryc3dhYigpIHRvIHJlbGlhYmx5IGZpbmQgZW5kIG9mIHN0cmluZwogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAwOCBGZWIgMjAwNQoKKiBGaXggdHlwb3MgaW4gaW5jbHVkZS9wcGM0NDAuaAogIFBhdGNoIGJ5IEFuZHJldyBFIE1pbGVza2ksIDA0IEZlYiAyMDA1CgoqIEFkZCBWaWJyZW4gKHdhcyBBY2NlbGVudCkgUFhBMjU1IElEUCBTdXBwb3J0CiAgUGF0Y2ggYnkgQ2xpZmYgQnJha2UsIDA0IEZlYiAyMDA1CgoqIEZpeCB0b29scy9ibXBfbG9nby5jIHVzaW5nIGluY29ycmVjdCBvZmZzZXQgdG8gcGl4ZWwgZGF0YQogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAzMSBKYW4gMjAwNQoKKiBBZGQgQVJNOTQ2RSBjcHUgYW5kIGNvcmUgbW9kdWxlIHRhcmdldHM7IHJlbWFwIG1lbW9yeSB0byAweDAwMDAwMDAwCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAyIEZlYiAyMDA1CgoqIEZpeCBlcnJvciBoYW5kbGluZyBpbiB0b29scy9lbnYvZndfZW52LmMKICBQYXRjaCBieSBBcmEgQXZhbmVzeWFuLCAwMSBGZWIgMjAwNQoKKiBGaXggTUdUNTEwMCBQU0MgYmF1ZHJhdGUgY2FsY3VsYXRpb24KICBQYXRjaCBieSBTZWJhc3RpYW4gU2NoYXUsIDI3IEphbiAyMDA1CgoqIE9NQVAyNDJ4IGZpeCBmb3IgR1AgZGV2aWNlIGJvb3RpbmcKICAtIEFkZCBTUkFNIHVubG9jayBmb3IgR1AgZGV2aWNlcy4KICAtIENoYW5nZSBERFIgRExMIHVubG9jayB2YWx1ZSB0byBhbGxvdyBEUExMb3V0KjEgb3BlcmF0aW9uLgogIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMjEgSmFuIDIwMDU6CgoqIEFkZCBzdXBwb3J0IGZvciBBTUQncyBQYjF4MDAgZXZhbCBib2FyZDsKICBhZGQgTUlJIHJvdXRpbmVzIHRvIHRoZSBhdTF4MDAgZXRoZXJuZXQgZHJpdmVyOwogIGFkZCBVU0Igb2hjaSBkcml2ZXIgKHdvcmsgaW4gcHJvZ3Jlc3MpCiAgUGF0Y2ggYnkgVGhvbWFzIFNhaWxlciwgMjAgSmFuIDIwMDUKCiogVXBkYXRlIG9tYXA1OTEyb3NrIGJvYXJkCiAgVXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgaW5zdGVhZCBvZiBwcml2YXRlIGZsYXNoIGRyaXZlcjsKICBSZW1vdmUgaGFyZGNvZGVkIHBlcnNvbmFsaXplZCBzZXR0aW5ncyBmcm9tIG9tYXA1OTEyb3NrLmg7CiAgRml4IHNwYWNpbmcgd2l0aCAoUk8pIG1hcmtzIGluICdmbGluZm8nIG91dHB1dC4KICBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNCBKYW4gMjAwNQoKKiBGaXggd2FybmluZ3MgZm9yIFBDSSBjb2RlIG9uIGl4cAogIFBhdGNoIGJ5IEpvZSA8bGd4dWVAeWFob28uY29tPiwgMTMgSmFuIDIwMDUKCiogdmlydGV4MiBmaXggZm9yIGJvZ3VzIGRvd25sb2FkIGVycm9yIG1lc3NhZ2VzCiAgVGhlIHZpcnRleDIgRlBHQSBkb3dubG9hZCBjb2RlIHdhdGNoZXMgZm9yIGluaXQgZ29pbmcgYWN0aXZlIGR1cmluZwogIGEgZG93bmxvYWQgb2YgY29uZmlnIGRhdGEgYXMgYW4gZXJyb3IgY29uZGl0aW9uLiBpbml0IGFsc28gZ29lcwogIGFjdGl2ZSBhZnRlciBhIGNvbmZpZ3VyYXRpb24gaXMgZmluaXNoZWQgaW4gY29uY2VydCB3aXRoIHRoZSBkb25lCiAgc2lnbmFsLiBTbyBmYXIsIHRoZSBjb2RlIGRvZXMgbm90IGNoZWNrIGZvciBkb25lIGFjdGl2ZSB1bnRpbCBhbGwKICBvZiB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIHNlbnQuIElmIGNvbmZpZ3VyYXRpb24gZGF0YSBoYXMgYSBmZXcKICBleHRyYSBwYWQgYnl0ZXMgYXQgdGhlIGVuZCwgdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvciBtZXNzYWdlIGV2ZW4KICB0aG91Z2ggdGhlIGRvd25sb2FkIGhhZCBzdWNlZWRlZC4KICBOT1RFOiB2aXJ0ZXgyIHNsYXZlIHNlcmlhbCBhbmQgc3BhcnRhbjIgdmVyc2lvbnMgbWF5IHN0aWxsIGhhdmUgdGhlCiAgc2FtZSBwcm9ibGVtLgogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMiBKYW4gMjAwNQoKKiBPcHRpbWl6ZSBmbGFzaF9tYWtlX2NtZCBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIGZvciBsaXR0bGUgZW5kaWFuCiAgRml4ICJXQVJOSU5HOiBmbGFzaF9tYWtlX2NtZDogdW5zdXBwcG9ydGVkIExpdHRsZUVuZGlhbiBtb2RlIgogIG1lc3NhZ2Ugd2hlbiBwcm9iaW5nIGZvciBub25leGlzdGVudCBmbGFzaCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuCiAgQXMgYSBzaWRlIGVmZmVjdCBtb3JlIGVmZmljaWVudCBhbmQgc21hbGxlciBjb2RlIGlzIGdlbmVyYXRlZCwKICB3aGljaCBpcyBhbHdheXMgYSBHb29kIFRoaW5nIChUTSkuCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDI0IFNlcCAyMDA1CgoqIFVwZGF0ZSBmb3IgVEZUUCB1c2luZyBhIGZpeGVkIFVEUCBwb3J0CiAgVXNlIHRoZSBhcHByb3ZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy4gQWRkZWQgInRmdHBkc3RwIiB0bwogIGFsbG93IHBvcnRzIG90aGVyIHRoYW4gNjkgcGVyIFRvbHVuYXkgT3JrdW4ncyByZWNvbW1lbmRhdGlvbi4KICBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDEyIEphbiAyMDA1CgoqIEFsbG93IHRvIGZvcmNlIFRGVFAgdG8gdXNlIGEgZml4ZWQgVURQIHBvcnQKICAoQWRkIGEgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX1RGVFBfUE9SVCBhbmQgb3B0aW9uYWwgZW52CiAgdmFyaWFibGUgdGZ0cHBvcnQpCiAgUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAxMCBKYW4gMjAwNQoKKiBGaXggZXRoZXJuZXQgdGltZW91dHMgb24gZGJhdTE1NTAgYW5kIG90aGVyIGF1MXgwMCBzeXN0ZW1zCiAgUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjkgRGVjIDIwMDQKCiogQ2xlYW51cDogZml4IGJyb2tlbiBidWlsZHMKCiogRml4IFBIWSBhZGRyZXNzIGFyZ3VtZW50IHBhc3Npbmcgd2l0aCBtaWkgaW5mbyBjb21tYW5kCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IERlYyAyMDA0CgoqIENsZWFudXAgKFBQQzR4eCBpcyBBTUNDIG5vdykKCiogZXNkIENQQ0kyRFAgYm9hcmQgYWRkZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjIgU2VwIDIwMDUKCiogZXNkIFBNQzQwNSBib2FyZCB1cGRhdGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIyIFNlcCAyMDA1CgoqIEFkZCBTTTUwMSBzdXBwb3J0IHRvIEhINDA1IGJvYXJkLgogIEFkZCBzdXBwb3J0IGZvciBnemlwIGNvbXByZXNzZWQgYm1wJ3MgKENPTkZJR19WSURFT19CTVBfR1pJUCkuCiAgQWRkIHN1cHBvcnQgZm9yIGVlcHJvbSB3cml0ZS1lbmFibGUgKENGR19FRVBST01fV1JFTikuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMiBTZXAgMjAwNQoKKiBGaXggYXV0b25lZ290aWF0aW9uIGluIHRzZWMgZXRoZXJuZXQgZHJpdmVyCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMSBTZXAgMjAwNQoKKiBGaXggYnVnIGluIGF1dG9fdXBkYXRlICh0cmFiIGJvYXJkKQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE2IFNlcCAyMDA1CgoqIEZpeCBjb21wdXRhdGlvbiBvZiBmcmFtZWJ1ZmZlciBwYWxldHRlIGZvciA4YnBwIExDRCBiaXRtYXBzCiAgUGF0Y2ggYnkgRnJhbmNlc2NvIE1hbmRyYWNjaSwgMTYgU2VwIDIwMDUKCiogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIElOS0E0eDAgYm9hcmQKCiogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBNODU0IGJvYXJkCiAgQmFzZWQgb24gcGF0Y2ggYnkgUi4gTG9lZmZsLCAyMCBKdWwgMjAwNQoKKiBBZGQgUENJIHN1cHBvcnQgdG8gVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1CgoqIFVwZGF0ZSBBTUNDIFlvc2VtaXRlIHRvIGdldCBhIGNvbnNpc3RlbnQgc2V0dXAgZm9yIGFsbCBBTUNDIGV2YWwKICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1CgoqIEZpeCBwcm9ibGVtIGluIDQ0MEdQIGV0aGVybmV0IGRyaXZlciAoZWJvbnkpLiBBZGQgc3VwcG9ydCBmb3IgMm5kCiAgZXRoZXJuZXQgcG9ydCBvbiBlYm9ueS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDcgU2VwIDIwMDUKCiogQWRkZWQgc3VwcG9ydCBmb3IgbXRkZGV2bnVtIGFuZCBtdGRkZXZuYW1lIHZhcmlhYmxlcyAobXRkcGFydHMgY29tbWFuZCkKCiogQ2hhbmdlIGRlZmF1bHQgY29uc29sZSBiYXVkIHJhdGUgZm9yIHN0eHh0YyBib2FyZAoKKiBBZGQgSTJDIHN1cHBvcnQgdG8gVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMgKEVFUFJPTSwgUlRDLCBMTTc1LURUVCkuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMSBBdWcgMjAwNQoKKiBGaXggZGVmYXVsdCBjb21tYW5kIHNldCAoZG9uJ3QgaW5jbHVkZSBDRkdfQ01EX0RJU1BMQVkgY29tbWFuZCkKICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgU2VwIDIwMDUKCiogQ2xlYW51cAoKKiBFbmFibGUgU003MTIgZHJpdmVyIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCgoqIEZpeCBwcm9ibGVtcyB3aXRoIGxkIHZlcnNpb24gMi4xNiAoZG90IG91dHNpZGUgc2VjdGlvbnMgcHJvYmxlbSkKICBQb2ludGVkIG91dCBieSBHZXJoYXJkIEphZWdlciwgMzEgQXVnIDIwMDU7CiAgY2YuIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA1LTA4L21zZzAwNDEyLmh0bWwKCiogUHJlcGFyZSBVLUJvb3QgZm9yIGdjYy00Lng6IGZpeCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uCgoqIEFkanVzdCBDUzMgdGltaW5ncyBvbiBITUkxMDAxIGJvYXJkIGZvciBkb3QgbWF0cml4IGRpc3BsYXkgdW5kZXIgTGludXgKCiogQWRkIGtleWJvYXJkIGFuZCBkb3QgbWF0cml4IGRpc3BsYXkgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KCiogUHJlcGFyZSBVLUJvb3QgZm9yIGdjYy00LngKCiogRml4ZWQgQmFtYm9vIHBvcnQgdG8gZW5hYmxlIHJ1bm5pbmcgd2l0aG91dCBERFItRElNTQogIChCYW1ib28gaGFzIGFsc28gNjRNQiBvbmJvYXJkIEREUikKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEF1ZyAyMDA1CgoqIE1lcmdlZCA0MDVncF9lbmV0LmMgYW5kIDQ0MGd4X2VuZXQuYyB0byBnZW5lcmljIDR4eF9lbmV0LmMKICBub3cgaGFuZGxpbmcgYWxsIDR4eCBjcHUncwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgQXVnIDIwMDUKCiogRml4IG1ha2UgZGVwZW5kZW5jaWVzIGZvciBhdDkxcm05MjAwIGFuZCBrczg2OTUgY3B1cwogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEF1ZyAyMDA1CgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBUUU01MjAwIGJvYXJkCgoqIEFkZCBlc2QgY3BjaTUyMDAgYW5kIHBmNTIwMCBib2FyZHMKICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAyMiBBdWcgMjAwNQoKKiBGaXggc3lzY2xvY2sgZm9yIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjUgSnVsIDIwMDUKCiogSW5pdGlhbGl6ZSBzZXJpYWwjIGFuZCBldGhhZGRyIGZyb20gbWFudWZhY3R1cmVyIGRhdGEgaW4gRUVQUk9NIG9uIENNQy1QVTIKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBKdW4gMjAwNQoKKiBBZGQgbmV3IGJvYXJkIHNwZWNpZmljIGNvbW1hbmRzIGZvciBUUU01MjAwL1NUSzUyWFgKICAtIFNvdW5kIGNvbW1hbmRzIChiZWVwLCB3YXYsIHNvdW5kKQogIC0gVGVzdCBjb21tYW5kcyAobGVkLCBjYW4sIGJhY2tsaWdodCwgcnMyMzIpCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDIgTWF5IDIwMDUKCiogQ2hhbmdlIG1haW4gY2xvY2sgb24gQ01DLVBVMiBib2FyZCBmcm9tIDIwNyBNSHogdG8gMTc5IE1IegogIGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlIEFUOTFSTTkyMDAgQ1BVIFBMTAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIyIEFwciAyMDA1CgoqIEFkZCBhdXRvbWF0aWMgSFcgZGV0ZWN0aW9uIGZvciBhbm90aGVyIENNQ19QVTIgdmFyaWFudAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIwIEFwciAyMDA1CgoqIFJlbW92ZSBDT05GSUdfQVQ5MVJNOTIwMERLIGluIENNQy1QVTIgY29uZmlndXJhdGlvbgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE5IEFwciAyMDA1CgoqIEZpeCBpbml0aWFsaXphdGlvbiBwcm9ibGVtIG9uIFRRTTUyMDAgd2l0aG91dCBTTTUwMQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IEFwciAyMDA1CgoqIEFkZCBSVEMgc3VwcG9ydCBmb3IgU1RLNTJYWC4yMDAKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgSUZNIG8yZG50IGJvYXJkCgoqIEVuYWJsZSBQQ0kgb24gaG1pMTAwMSBib2FyZAoKKiBGaXggcmV0dXJuIHZhbHVlcyBvZiB0aGUgamZmczIgY29tbWFuZHMgbHMvZnNsb2FkL2ZzaW5mbywKICBzbyB3ZSBjYW4gdXNlIHRoZW0gdG8sIGUuZy4sIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBmaWxlIHdpdGgKICAiaWYgbHMgZm9vOyB0aGVuIHRoaXM7IGVsc2UgdGhhdDsgZmkiIGluIHRoZSBodXNoIHNoZWxsCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTYgQXVndXN0IDIwMDUKCiogQ29kaW5nIHN0eWxlIGNsZWFudXAKCiogQWRkIHN1cHBvcnQgZm9yIFNpbGljb24gVHVybmtleSBlWHByZXNzIFhUYyAobXBjODd4Lzg4eCkgYm9hcmQuCiAgUGF0Y2ggYnkgRGFuIE1hbGVrIGFuZCBQYW50ZWxpcyBBbnRvbmlvdSwgMTUgQXVnIDIwMDUKCiogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIG1hbGxvYyBpbiA0NDBneF9lbmV0LmMKICBQYXRjaCBieSBUcmF2aXMgQi4gU2F3eWVyLCAxOCBKdWwgMjAwNQoKKiBBZGQgU2FuZGJ1cnN0IE1ldHJvYm94IGFuZCBTYW5kYnVyc3QgS2FyZWYgYm9hcmQgc3VwcG9ydCBwYWNrYWdlcy4KICBTZWNvbmQgc2VyaWFsIHBvcnQgb24gNDQwR1ggbm93IGRlZmluZWQgYXMgYSBzeXN0ZW0gZGV2aWNlLgogIEFkZCAnU2hvcnQgRXRjaCcgY29kZSBmb3IgQ2ljYWRhIFBIWSB3aXRoaW4gNDQwZ3hfZW5ldC5jCiAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTIgSnVsIDIwMDUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4zOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1pbm9yIGNvZGUgY2xlYW51cAoKKiBBZGQgZm9yZ290dGVuIG5ldyBmaWxzIGZyb20gbGF0ZXN0IFZvaWNlQmx1ZSB1cGRhdGUKCiogTWFrZSBib290cmV0cnkgZmVhdHVyZSB3b3JrIHdpdGggaHVzaCBzaGVsbC4KICBDYXZlYXQ6IHRoaXMgY3VycmVudGx5ICpyZXF1aXJlcyogQ09ORklHX1JFU0VUX1RPX1JFVFJZIHRvIGJlIHNldCwgdG9vLgogIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDE5IEp1bCAyMDA1CgoqIFVwZGF0ZSBIeW1vZCBCb2FyZCBEYXRhYmFzZSBQSFAgY29kZSBpbiAidG9vbHMiIGRpcmVjdG9yeQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDAxIEp1bCAyMDA1CgoqIE1ha2UgInRyIiBjb21tYW5kIHVzZSBQT1NJWCBjb21wbGlhbnQ7IGV4cG9ydCBIT1NUT1MgbWFrZSB2YXJpYWJsZQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CgoqIEZpeCBNdXJyYXkgSmVuc2VuJ3MgbWFpbCBhZGRyZXNzLgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CgoqIFByZXNlcnZlIFBIWV9CTUNSIGR1cmluZyBhIHNvZnQgcmVzZXQuCiAgUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMjQgSnVuIDIwMDUKCiogVm9pY2VCbHVlIHVwZGF0ZTogZWVwcm9tIHRvb2wgY2FuIGFsc28gc3RvcmUgZmlybXdhcmUgdmVyc2lvbiBub3cuCiAgZWVwcm9tLmJpbiBpcyBydW5hYmxlIGJ5IGp1bXBpbmcgYXQgbG9hZCBhZGRyZXNzLgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyMyBNYXkgMjAwNQoKKiBNb3ZlIHRoZSBBVDkxUk05MjAwREsgdG8gdGhlIEFSTSBTeXN0ZW1zIGxpc3QuCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjYgQXByIDIwMDUKCiogRWxpbWluYXRlIGNhbGxzIG9mIEFSTSBsaWJnY2MuYSBoZWxwZXIgZnVuY3Rpb25zIF9kaXZzaTMgYW5kIF9tb2RzaTMKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyNiBBcHIgMjAwNQoKKiBtZWFzdXJlX2djbGsoKSBpcyBuZWVkZWQgd2hlbiBERUJVRyBpcyBlbmFibGVkCiAgUGF0Y2ggYnkgQnJ5YW4gTydEb25vZ2h1ZSwgMjUgQXByIDIwMDUKCiogQWRkIFVQRC1DaGVja3N1bSBjb2RlLCBmaXggcHJvYmxlbSBpbiBuZXQuYyAocmV0dXJuIGluc3RlYWQgb2YgYnJlYWspCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMTIgQXVnIDIwMDUKCiogZXNkIFBDSTQwNSBib2FyZCB1cGRhdGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEp1bCAyMDA1CgoqIGVzZCBXVUg0MDUgYW5kIERVNDA1IGJvYXJkIHVwZGF0ZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjcgSnVsIDIwMDUKCiogRml4IHByb2JsZW0gaW4gY21kX25hbmQuYyAob25seSB3aGVuIGRlZmluZWQgQ0ZHX05BTkRfU0tJUF9CQURfRE9UX0kpCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDQgTWF5IDIwMDUKCiogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAogIGJvYXJkcyAoYmF1ZHJhdGUsIGVudmlyb25tZW50Li4uKS4gRmxhc2ggZHJpdmVyIGZpeGVkLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKCiogQ2hhbmdlZCBBTUNDIEJ1YmluZ2EgKDQwNUVQKSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQgMm5kIGV0aCBwb3J0CiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQoKKiBBZGQgTkFORCBGTEFTSCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbyA0NDBFUCBldmFsIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgSUZNIEFFViBGSUZPIGJvYXJkLgogIE1pbm9yIGNvZGluZyBzdHlsZSBjbGVhbnVwLgoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgSUZNIFNQSSBldmFsIGJvYXJkCgoqIEZpeCBDb21wYWN0Rmxhc2ggcHJvYmxlbSBvbiBITUkxMDAxIGJvYXJkCgoqIE1ha2UgbmV3ICJtdGRwYXJ0cyIgY29kZSBidWlsZCB3aXRoIG9sZGVyIGNvbXBpbGVycwogIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMDkgQXVnIDIwMDUKCiogQ2hhbmdlZCBDT05GSUdfNDQwX0dYLCBDT05GSUdfNDQwX0VQIGFuZCBDT05GSUdfNDQwX0dSIG9wdGlvbnMgdG8KICBDT05GSUdfNDRHWCwgQ09ORklHXzQ0MEVQIGFuZCBDT05GSUdfNDQwR1IgZm9yIGEgY29uc2lzdGVudCBkZXNpZ24KICB3aXRoIHRoZSA0MDUgZGVmaW5lcyBhbmQgdGhlIGxpbnV4IGtlcm5lbCBkZWZpbmVzLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDggQXVnIDIwMDUKCiogRml4IGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggb2xkZXIgR0NDIHZlcnNpb25zCgoqIEFkZCBjb21tb24gKHdpdGggTGludXgpIE1URCBwYXJ0aXRpb24gc2NoZW1lIGFuZCAibXRkcGFydHMiIGNvbW1hbmQKCiAgT2xkLCBvYnNvbGV0ZSBhbmQgZHVwbGljYXRlZCBjb2RlIHdhcyBjbGVhbmVkIHVwIGFuZCByZXBsYWNlIGJ5IHRoZQogIG5ldyBwYXJ0aXRpb25pbmcgbWV0aG9kLiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGFwcHJvYWNoZXMgbm93OgoKICBUaGUgZmlyc3Qgb25lIGlzIHRvIGRlZmluZSBhIHNpbmdsZSwgc3RhdGljIHBhcnRpdGlvbjoKCiAgI3VuZGVmIENPTkZJR19KRkZTMl9DTURMSU5FCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfREVWCQkgIm5vcjAiCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweEZGRkZGRkZGCS8qIHVzZSB3aG9sZSBkZXZpY2UgKi8KICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJIDB4MDAxMDAwMDAJLyogdXNlIDFNQiAqLwogICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUCSAweDAwMDAwMDAwCgogIFRoZSBzZWNvbmQgbWV0aG9kIHVzZXMgdGhlIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kIGR5bmFtaWMKICBwYXJ0aXRpb25pbmc6CgogIC8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQogICNkZWZpbmUgTVRESURTX0RFRkFVTFQJICJub3IxPXp1bWEtMSxub3IyPXp1bWEtMiIKICAjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJICJtdGRwYXJ0cz16dW1hLTE6LShqZmZzMiksenVtYS0yOi0odXNlcikiCgogIENvbW1hbmQgbGluZSBvZiBjb3Vyc2UgcHJvZHVjZXMgYmlnZ2VyIGltYWdlcywgYW5kIG1heSBiZSBpbmFwcHJvcHJpYXRlCiAgZm9yIHNvbWUgdGFyZ2V0cywgc28gYnkgZGVmYXVsdCBpdCdzIG9mZi4KCiogRml4IGJ1aWxkIHByb2JsZW1zIGZvciBQTTg1NiBCb2FyZAoKKiBGaXggc2lnbiBleHRlbnNpb24gYnVnIGluICdmcGdhIGxvYWRiJyBjb21tYW5kOwogIG1ha2UgJ2ZwZ2EgbG9hZGInIGFsd2F5cyBwcmludCB0aGUgZmlsZSBoZWFkZXIgaW5mbwogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMSBKYW4gMjAwNQoKKiBGaXggZXJyb3JzIHRoYXQgb2NjdXIgd2hlbiBhY2Nlc3NpbmcgU3lzdGVtQUNFIENGCiAgUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDA5IEphbiAyMDA1CgoqIERvY3VtZW50IHN3aXRjaGluZyBiZXR3ZWVuIFUtQm9vdCBhbmQgUGxhbmV0Q29yZSBvbiBSUFhsaXRlCiAgYnkgU2FtIFNvbmcsIDI0IERlYyAyMDA0CgoqIEZpeCBQb3dlclFVSUNDIElJIG1hc2sgZGV0ZWN0aW9uLgogIFBhdGNoIGJ5IEV1Z2VuZSBTdXJvdmVnaW4sIDIwIERlYyAyMDA0CgoqIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBESzFDMjAgYm9hcmQKICBQYXRjaCBieSBTaGxvbW8gS3V0LCAxMyBEZWMgMjAwNAoKKiBBZGQgc3VwcG9ydCBmb3IgZXA4MjQ4IGJvYXJkCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTIgRGVjIDIwMDQKCiAgTWlub3IgY29kZSBjbGVhbnVwLgoKKiBGaXggYmF1ZHJhdGUgc2V0dGluZyBmb3IgS0dEQiBvbiBNUEM4MjYwCiAgUGF0Y2ggYnkgSG9KaW4sIDExIERlYyAyMDA0CgoqIEZpeCAnbWlpIGhlbHAnIHRleHQgZm9ybWF0dGluZwogIFBhdGNoIGJ5IENvcnkgVHVzYXIsIDEwIERlYyAyMDA0CgoqIEZpeCByZXR1cm4gY29kZSBvZiBORlMgY29tbWFuZAogIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAxMSBEZWMgMjAwNAoKKiBGaXggdHlwbwoKKiBGaXggY29tcGlsZXIgd2FybmluZ3MgaW4gY3B1L3BwYzR4eC91c2JkZXYuYwogIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDA0IEF1ZyAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbyBQUEM0NDBFUCBldmFsIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNCBBdWcgMjAwNQoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIKICBGaXggc3R5bGUgaXNzdWVzIHByaW1hcmlseSBpbiA4NXh4IGFuZCA4M3h4IGJvYXJkcy4KICAgIC0gQysrIGNvbW1lbnRzCiAgICAtIFRyYWlsaW5nIHdoaXRlIHNwYWNlCiAgICAtIEluZGVudGF0aW9uIG5vdCBieSBUQUIKICAgIC0gRXhjZXNzaXZlIGFtb3VudCBvZiBlbXB0eSBsaW5lcwogICAgLSBUcmFpbGluZyBlbXB0eSBsaW5lcwoKKiBQYXRjaCBieSBSb24gQWxkZXIsIDExIEp1bCAyMDA1CiAgICBBZGQgWGlhbmdodWEgWGlhbyBhbmQgTHVuc2hlbmcgV2FuZydzIHN1cHBvcnQgZm9yIHRoZQogICAgR0RBIE1QQzg1NDAgRVZBTCBib2FyZC4KCiogUGF0Y2ggYnkgRXJhbiBMaWJlcnR5CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhbGUgTVBDODM0OUFEUyBib2FyZC4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAyNSBKdWwgMjAwNQogIE1vdmUgdGhlIFRTRUMgZHJpdmVyIG91dCBvZiBjcHUvbXBjODV4eCBhcyBpdCB3aWxsIGJlIHNoYXJlZAogIGJ5IHRoZSB1cGNvbWluZyBtcGM4M3h4IGZhbWlseSBhcyB3ZWxsLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDA1IE1heSAyMDA1CiAgSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgTVBDODU0OENEUyBib2FyZC4KICBBZGRlZCBERFIgSUkgc3VwcG9ydCBiYXNlZCBvbiBTUEQgdmFsdWVzIGZvciBNUEM4NXh4IGJvYXJkcy4KICBUaGlzIHJvbGwtdXAgcGF0Y2ggYWxzbyBpbmNsdWRlcyBidWdmaWVzIGZvciB0aGUgcHJldmlvdXNseQogIHB1Ymxpc2hlZCBwYXRjaGVzOgogICAgRERSSUkgQ1BPLCBwcmUgZVRTRUMsIDg1NDggTEJJVSwgQW5keSdzIFRTRUMsIGVUU0VDIDMmNCBJL08KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxMCBGZWIgMjAwNQogIEFkZCBjb25maWcgb3B0aW9uIENPTkZJR19IQVNfRkVDIGNhbGxpbmcgb3V0IDg1NDAgRkVDIGZlYXR1cmVzLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIEt1bWFyIEdhbGEsIDA4IEZlYiAyMDA1CiAgRm9yIE1QQzg1eHhDRFM6CiAgICBBZGRzIFJlbGF4ZWQgVGltaW5nIFRSTFggYml0IHRvIEZMQVNIIE9SeCByZWdzIHRvIGFsbG93CiAgICBmb3IgZmFzdGVyIGZsYXNoIHBhcnRzLgogICAgQWRkIGRvY3VtZW50YXRpb24gZm9yIEJSL09SIGZvciBGTEFTSC4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyIDA4IEZlYiAyMDA1CiAgRGV0ZXJtaW5lIEwyIENhY2hlIHNpemUgZHluYW1pY2FsbHkgb24gODVYWCBib2FyZHMuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSAwOCBGZWIgMjAwNQogIC0gQ29udmVydCB0aGUgQ1BNMiBiYXNlZCBmdW5jdGlvbmFsaXR5IHRvIHVzZSBuZXcgQ09ORklHX0NQTTIKICAgIG9wdGlvbiByYXRoZXIgdGhhbiBhIG15cmlhZCBvZiBDT05GSUdfTVBDODU2MC1saWtlIHZhcmlhbnRzLgogICAgQXBwbGllcyB0byBNUEM4NXh4IGFuZCBNUEM4MjYwIGJvYXJkcywgaW5jbHVkZXMgc3R4Z3AzIGFuZCBzYmM4NTYwLgogICAgRWxpbWluYXRlcyB0aGUgQ09ORklHX01QQzg1NjAgb3B0aW9uIGVudGlyZWx5LiAgRGlzdHJpYnV0ZXMgdGhlCiAgICBuZXcgQ09ORklHX0NQTTIgb3B0aW9uIHRvIGVhY2ggODI2MCBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU2IGJvYXJkCiAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwMyBBdWcgMjAwNQoKKiBNaW5vciBmaXhlcyB0byBQTTg1NCBib2FyZAogIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDMgQXVnIDIwMDUKCiogQWRqdXN0IGNvbmZpZ3VyYXRpb24gb2YgWEVOSUFYIGJvYXJkCiAgKGNoaXAgc2VsZWN0IGFuZCBHUElPIHJlcXVpcmVkIGZvciBVU0Igb3BlcmF0aW9uKQoKKiBGaXggdHlwb3MgaW4gY3B1Lzg1eHgvc3RhcnQuUyB3aGljaCBjYXVzZWQgRGF0YVRMQiBleGNlcHRpb24gdG8gYmUKICByb3V0ZWQgdG8gdGhlIFdhdGNoZG9nIGhhbmRsZXIKICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAxOCBKdW4gMjAwNQoKKiAocmUpZW5hYmxlZCBzY3NpIGNvbW1hbmRzIGRvX3Njc2koKSBhbmQgZG9fc2NzaWJvb3QoKQogIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNiBEZWMgMjAwNAoKKiBGaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gVEZUUCAvIE5GUyBkZWZhdWx0IGZpbGVuYW1lcwogIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAwNiBEZWMgMjAwNAoKKiBJZ25vcmUgYnJvYWRjYXN0IHN0YXR1cyBiaXQgaW4gcmVjZWl2ZWQgZnJhbWVzIGluIDgyNjAgRkNDIGV0aGVybmV0CiAgbG9vcGJhY2sgdGVzdCBjb2RlCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTggSnVsIDIwMDUKCiogRml4IHR5cG8gaW4gbWtjb25maWcgc2NyaXB0ICh1c2VkID09IGluc3RlYWQgb2YgPSkKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOCBKdWwgMjAwNQoKKiBDbGVhbnVwIGJ1aWxkIHByb2JsZW1zIG9uIDY0IGJpdCBidWlsZCBob3N0cwoKKiBVcGRhdGUgTUFJTlRBSU5FUlMgZmlsZQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIEF1ZyAyMDA1OgogIC0gTWFqb3IgY2xlYW51cCBmb3IgQU1DQyBldmFsIGJvYXJkcyBXYWxudXQsIEJ1YmluZ2EsIEVib255LCBPY290ZWEKICAgIChmb3JtZXIgSUJNIGV2YWwgYm9hcmQpLiBQbGVhc2Ugc2VlICJkb2MvUkVBRE1FLkFNQ0MtZXZhbC1ib2FyZHMtY2xlYW51cCIKICAgIGZvciBkZXRhaWxzLgogIC0gU3ljYW1vcmUgKFBQQzQwNUdQcikgZXZhbCBib2FyZCBhZGRlZCAoV2FsbnV0IHBvcnQgaXMgZXh0ZW5kZWQKICAgIHRvIHJ1biBvbiBib3RoIDQwNUdQIGFuZCA0MDVHUHIgZXZhbCBib2FyZHMpLgoKKiBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAyNyBKdWwgMjAwNToKICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFBQQzQ0MEVQL0dSLgogIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgWW9zZW1pdGUgUFBDNDQwRVAgZXZhbCBib2FyZC4KICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFllbGxvd3N0b25lIFBQQzQ0MEdSIGV2YWwgYm9hcmQuCgoqIE1pbm9yIGZpeGVzIGZvciBQUENoYW1lbGVvbiBCb2FyZDoKICAtIGZpeCBhbGlnbm1lbnQgb2YgTkFORCBzaXplCiAgLSBtYWtlIGNvZGUgZG8gd2hhdCB0aGUgY29tbWVudCBzYXlzCgoqIEltcGxlbWVudCBoL3cgc2VjdG9yIHByb3RlY3Rpb24gc3RhdHVzIHN5bmNocm9uaXphdGlvbiBhdCBib290LgogIFRoZSBjb2RlIGlzIHByb3ZpZGVkIGZvciwgYW5kIHdhcyB0ZXN0ZWQgb24sIHRoZSBZdWtvbi9BbGFza2EKICBhbmQgUE01MjAgYm9hcmRzIG9ubHkuCgogIEEgYnVnIGluIGZsYXNoX3JlYWxfcHJvdGVjdCgpIGZvciB0aGUgWXVrb24gYm9hcmQgd2FzIGZpeGVkIGJ5CiAgYWRkaW5nIGEgZnVuY3Rpb24gdGhhdCB0ZWxscyBpZiB0d28gYmFua3MgYXJlIG9uIG9uZSBmbGFzaCBjaGlwLgoKKiBGaXggc3lzbW9uIFBPU1QgcHJvYmxlbTogY2hlY2sgSTJDIGVycm9yIGNvZGVzCiAgVGhpcyBmaXhlcyBhIHByb2JsZW0gb2YgZGlzcGxheWluZyBib2d1cyB2b2x0YWdlcyB3aGVuIHRoZSB2b2x0YWdlcwogIGFyZSBzbyBsb3cgdGhhdCB0aGUgSTJDIGRldmljZXMgc3RhcnQgZmFpbGluZyB3aGlsZSB0aGUgcmVzdCBvZiB0aGUKICBzeXN0ZW0ga2VlcHMgcnVubmluZy4KCiogUGF0Y2ggYnkgQ2VkcmljIFZpbmNlbnQsIDYgSnVsIDIwMDU6CiAgRml4IENGR19DTURfU0VUR0VURENSIGhhbmRsaW5nIGluICJjb21tb24vY21kX2Rjci5jIgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDIwIEp1bCAyMDA1OgogIEFkZCBtaXNzaW5nIFBDSSBJTyBwb3J0IGRlZmluaXRpb25zLgoKKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCgoqIEFkanVzdCBwcmludGVkIGJvYXJkIElEIGZvciBMV01PTiBib2FyZC4KCiogRml4IGxvdy1sZXZlbCBPSENJIHRyYW5zZmVycyBmb3IgQVJNOTIwdCBhbmQgTVBDNXh4eAoKKiBBZGQgbmV3IGFyZ3VtZW50IGZvcm1hdCBmb3IgZmxhc2ggY29tbWFuZHMgdG8gYWxsb3cgZm9yIHVzYWdlIGxpa2UKICAiZXJhc2UgJChhZGRyKSArJChmaWxlc2l6ZSkiLCBpLiBlLiBhIHNpemUgYXJndW1lbnQgY2FuIGJlIHVzZWQgYW5kCiAgVS1Cb290IHdpbGwgYXV0b21hdGljaWFsbHkgZmluZCB0aGUgZW5kIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Rvci4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA1IEp1bCAyMDA1OgogIFVwZGF0ZSB1YzEwMCBib2FyZCBQSFkgc2V0dXAKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIEp1bCAyMDA1OgogIEZpeCBQSFkgYWRkcmVzcyBmb3IgQ0FUY2VudGVyIGJvYXJkIChub3cgY29ycmVjdCEpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzAgSnVuIDIwMDU6CiAgRml4IFBIWSBhZGRyZXNzZXMgZm9yIFBQQ2hhbWVsZW9uIGFuZCBDQVRjZW50ZXIgYm9hcmRzCiAgQ2hhbmdlIE1BSU5UQUlORVIgZm9yIG1vc3QgZXNkIGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAzMCBKdW4gMjAwNToKICBGaXggTENEIGxvZ28gZm9yIGx3bW9uIGJvYXJkIHdoaWNoIGdvdCBsb3N0IGluIHRoZSBtZXJnZSBvZiA4eHggYW5kIFBYQSBMQ0QgY29kZQoKKiBGaXggYmF1ZHJhdGUgY2FsY3VsYXRpb24gcHJvYmxlbSBvbiBNUEM1MjAwIHN5c3RlbXMKCiogQWRkIEVFUFJPTSBhbmQgUlRDIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjAgSnVuIDIwMDU6CiAgRml4IGluaXRpYWxpemF0aW9uIG9mIGxvdyBhY3RpdmUgR1BJTyBwaW5zIG9uIGlua2E0eDAgYm9hcmQKCiogRW5hYmxlIHJlZHVuZGFudCBlbnZpcm9ubWVudCwgZGlzYWJsZSBIVyBmbGFzaCBwcm90ZWN0aW9uIG9mCiAgSE1JMTAwMSBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMCBKdW4gMjAwNToKICBJbml0aWFsaXplIGFsbG9jYXRlZCBkZXYgYW5kIHByaXZhdGUgaHcgc3RydWN0dXJlcwogIGFmdGVyIHRoZWlyIHJlc3BlY3RpdmUgYWxsb2NhdGlvbiBpbiA0NDBneF9lbmV0LmMKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgSnVuIDIwMDU6CiAgRml4IGJ5dGVvcmRlciBwcm9ibGVtcyB3aXRoIHNlY29uZCBhcmd1bWVudCBvZiAiYm9vdG0iIHdpdGgKICBzdGFuZGFsb25lIGltYWdlczsKCiogQWRkIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKCiogRGlzYWJsZSAiZGF0ZSIgYW5kICJzbnRwIiBjb21tYW5kcyBvbiBUUU04NjZNCgoqIEZpeCB3YXRjaGRvZyByZXNldCBwcm9ibGVtcyBvbiBMV01PTiBib2FyZAoKKiBQYXRjaCBieSBKdWVyZ2VuIFNlbGVudCwgMTcgTWF5IDIwMDU6CiAgQWRkIHN1cHBvcnQgZm9yIEZ1bmt3ZXJrIFZvVlBOIGdhdGV3YXkgbW9kdWxlLgoKKiBDbGVhbnVwIGRlYnVnIGNvZGUgZm9yIE1QQzgyMjAgRkVDIGRyaXZlcgoKKiBFeHRlbmQgYnVyc3QgbW9kZSBSQU0gdGVzdCBwcm9ncmFtIHRvIHRha2UgYSBsb29wIGNvdW50CiAgKDAgPSBpbmZpbml0ZSkKCiogVXNlIENPTkZJR19EUklWRVJfS1M4Njk1RVRIIHRvIGVuYWJsZSBLUzg2OTUgZXRoZXJuZXQgZHJpdmVyIG9uCiAgdGhvc2UgYm9hcmRzIHRoYXQgdXNlIGl0LgoKKiBQYXRjaGVzIGJ5IEdyZWcgVW5nZXJlciwgMTkgTWF5IDIwMDU6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEtTODY5NVAgKEFSTSA5MjIgYmFzZWQpIENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBPcGVuR2VhciBDTTQwMDgsIENNNDExNiBhbmQgQ000MTQ4IGJvYXJkcwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOSBNYXkgMjAwNToKICBBZGQgc3VwcG9ydCBmb3IgQ09ORklHX1NFUklBTF9UQUcgb24gQVJNIGJvYXJkcwoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNvcmNlcnkgYm9hcmQuCiAgQ29kZSBjbGVhbnVwIChlc3BlY2lhbGx5IFNvcmNlcnkgLyBBbGFza2EgLyBZdWtvbiBzZXJpYWwgZHJpdmVyKS4KCiogRml4IGNvbXBpbGUgcHJvYmxlbXMgY2F1c2VkIGJ5IG5ldyBidXJzdCBtb2RlIFNEUkFNIHRlc3Q7CiAgbWFrZSBwb3J0IHBpbnMgdG8gdHJpZ2dlciBsb2dpYyBhbmFseXplciBjb25maWd1cmFibGUKCiogRml4IHRpbWVyIGhhbmRsaW5nIG9uIE1QQzg1eHggc3lzdGVtcwoKKiBGaXggZGVidWcgY29kZSBpbiBvbWFwNTkxMm9zayBmbGFzaCBkcml2ZXIKCiogQWRkIHN1cHBvcnQgZm9yIE1QQzgyNDcgYmFzZWQgIklEUzgyNDciIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgMiB4IFRTRUMgaW50ZXJmYWNlcyBvbiB0aGUgVFFNODU0MCBib2FyZC4KCiogT24gTFdNT04gd2UgbXVzdCB1c2UgdGhlIHdhdGNoZG9nIHRvIHJlc2V0IHRoZSBib2FyZCBhcyB0aGUgQ1BVCiAgZ2VuZXJlYXRlZCBIUkVTRVQgcHVsc2UgaXMgdG9vIHNob3J0IHRvIHJlc2V0IHRoZSBleHRlcm5hbAogIGNpcmN1aXRyeS4KCiogQWRkIHRlc3QgdG9vbCB0byBleGVyY2lzZSBTRFJBTSBhY2Nlc3NlcyBpbiBidXJzdCBtb2RlCiAgKGFzIHN0YW5kYWxvbmUgcHJvZ3JhbSwgTVBDOHh4L1Bvd2VyUEMgb25seSkKCiogSW5jcmVhc2UgQ0ZHX01PTklUT1JfTEVOIGZvciBSYXR0bGVyIGJvYXJkIHRvIG1hdGNoIGFjdHVhbCBjb2RlCiAgc2l6ZS4KCiogTWFqb3IgdXBhdGUgb2YgSkZGUzIgY29kZTsgbm93IGluIHN5bmMgd2l0aCBzbmFwc2hvdCBvZiBNVEQgQ1ZTIG9mCiAgTWFyY2ggMTMsIDIwMDUpOyBuZXcgY29uZmlndXJhdGlvbiBvcHRpb24gQ09ORklHX0pGRlMyX0xaT19MWkFSSQogIGFkZGVkIHRvIHN1cHBvcnQgTFpPIGFuZCBMWkFSSSBjb21wcmVzc2lvbiBtb2RlcyAodW5kZWZpbmVkIGJ5CiAgZGVmYXVsdCkuCgoqIEZpeCBwcm9ibGVtIHdpdGggc3ltYm9saWMgbGlua3MgaW4gSkZGUzIgY29kZS4KCiogVXNlIGxpbmtlciBBU1NFUlQgc3RhdGVtZW50IHRvIHByZXZlbnQgdW5kZXRlY3RlZCBvdmVybGFwcGluZyBvZgogIHNlY3Rpb25zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkOyBvdGhlciBib2FyZHMgbWlnaHQgdXNlIHRoaXMsIHRvby4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBNYXkgMjAwNToKICBVcGRhdGUgZm9yIFAzRzQKICBGaXggcHJvYmxlbXMgaW4gY21kX3VuaXZlcnNlLmMKCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDAzIE1heSAyMDA1OgogIEFkZGVkIG1pc3NpbmcgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gY21kX25hbmQuYwogIE1vZGlmaWVkIENGR19QQ0lfUFRNMU1TIGluIGNvbmZpZ3MvUExVNDA1LmggdG8gbWFwIDEyOE1CIHJhbQoKKiBGaXggSU5LQTR4MDogdXNlIENTMSBhcyBncGlvX3drdXBfNiBvdXRwdXQKCiogRml4IGJ1ZyBpbiB0aGUgU0RSQU0gaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgY2FubWIsIEljZUN1YmUgYW5kCiAgUE01MjAgYm9hcmRzLgogIEZpeCBQSFkgYWRkcmVzcyBmb3IgY2FubWIgYm9hcmQuCgoqIENsZWFudXAgc2VyaWFsIGNvbnNvbGUgYmF1ZHJhdGUgY2FsY3VsYXRpb24gb24gQVQ5MVJNOTIwMDsKICBnZXQgcmlkIG9mIG9ic29sZXRlIENGR19BVDkxQ19CUkdSX0RJVklTT1IgZGVmaW5pdGlvbgoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMTggQXByIDIwMDU6CiAgTWFrZSBQQ0kgdGFyZ2V0IGFkZHJlc3Mgc3BhY2VzIG9uIFBNQzQwNSBhbmQgQ1BDSTQwNSBib2FyZHMKICBjb25maWd1cmFibGUgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcwoKKiBBdXRvLXNpemUgUkFNIG9uIGNhbm1iIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgY2FubWIgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBBcHIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCBhcGM0MDUKCiogRml4ZXMgZm9yIFRRTTg1NjAgYm9hcmQ6CiAgLSBmaXggY2xvY2sgcmF0ZXMKICAtIHJlbW92ZSBkZWJ1ZyBtZXNzYWdlcwogIC0gZml4IGZsYXNoIHNlY3RvciBwcm90ZWN0aW9uCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA3IEFwciAyMDA1OgogIEFkZCBpMmNfcmVnX3dyaXRlKCkgYW5kIGkyY19yZWdfd3JpdGUoKSBmb3IgYXQ5MXJtOTIwMCBJMkMKCiogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAwNyBBcHIgMjAwNToKICBGaXggY29tcGlsZXIgd2FybmluZyBpbiBhbHRlcmEuYwogIEZpeCB3YXJuaW5nIGluIGNwdS9hcm05MjB0L2F0OTFybTkyMDAvaTJjLmMKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA2IEFwciAyMDA1OgogIEZpeCB2b2ljZWJsdWUgY29uZmlndXJhdGlvbi4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNiBBcHIgMjAwNToKICBVcGRhdGVzIGZvciBPQ09URUEgYm9hcmQ6CiAgLSBDaGFuZ2VkIFUtQm9vdCBzaXplIGZyb20gNTEya0J5dGUgdG8gMjU2a0J5dGUKICAtIEZpeGVkIGZsYXNoIGRyaXZlciB0byBzdXBwb3J0IGJvb3QgZnJvbSBzb2xkZXJlZCB1c2VyIGZsYXNoCiAgLSBBZGRlZCBSRUFETUUgZm9yIHN3aXRjaCBmcm9tIFBJQlMgZmlybXdhcmUgdG8gVS1Cb290CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA1IEFwciAyMDA1OgogIC0gQ2hhbmdlIHRpbWVyIGZyZXF1ZW5jeSBmb3IgcHBjIDQ0MCBmcm9tIDEwIG1zIHRvIDEgbXMuCiAgICBQcm9ibGVtIGZvdW5kIGJ5IEFuZHJldyBXb3puaWFrLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNiBBcHIgMjAwNToKICAtIGNyZWF0aW5nIFNvQyBzdWJkaXIgZm9yIEF0bWVsIEFUOTFSTTkyMDAgY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAogIC0gbW92aW5nIGNvZGUgb3V0IG9mIGNwdS9hdDkxcm05MjAwIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAoKKiBQYXRjaGVzIGJ5IFJvYmVydCBXaGFsZXksIDI5IE5vdiAyMDA0OgogIC0gdXBkYXRlIHRoZSBweGEtcmVncy5oIGZpbGUgZm9yIFBYQTI3eCBjaGlwcwogIC0gYWRkIFBYQTI3eCBiYXNlZCBBRFNWSVggYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBNTUMgb24gUFhBMjd4IHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgQW5kcmV3IEUuIE1pbGVza2ksIDI4IE5vdiAyMDA0OgogIEZpeCBQUEM0eHggU1BEIFNEUkFNIGRldGVjdGlvbiBidWcKCiogUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDI2IE5vdiAyMDA0OgogIEZpeCBsb2dpYyBvZiAidGVzdCAteiIgYW5kICJ0ZXN0IC1uIiBjb21tYW5kcwoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDUgQXByIDIwMDU6CiAgQWRkIHN1cHBvcnQgZm9yIFZvaWNlQmx1ZSBib2FyZC4KCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA1IEFwciAyMDA1OgogIEZpeCBuZXRib290X2NvbW1vbigpIHByb3RvdHlwZXMuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA1IEFwciAyMDA1OgogIFVzZSBpLk1YIHdhdGNoZG9nIHRpbWVyIGZvciByZXNldF9jcHUoKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNSBBcHIgMjAwNToKICBNb3ZlIHJlc2V0X2NwdSgpIG91dCBvZiBjcHUvYXJtOTIwdC9zdGFydC5TIGludG8gdGhlIFNvQyBzcGVjaWZpYwogIHN1YmRpcmVjdG9yaWVzIGNwdS9hcm05MjB0L2lteC8gYW5kIGNwdS9hcm05MjB0L3MzYzI0eDAvCiAgKG5vdyBpbiBpbnRlcnVwdHMuYykKCiogQWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgYmFzZWQgInNvcmNlcnkiIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU2MCBib2FyZC4KCiogQWRkIEZFQyBzdXBwb3J0IGZvciBUUU04NTQwIGJvYXJkLgogIEludGVyZmFjZXMgYXJlIG5hbWVkIGFzIGZvbGxvd3M6ICJFTkVUMSIgLSBUU0VDMiwgIkVORVQyIiAtIEZFQwoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNToKICBVcGRhdGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBDTUNfUFUyIGJvYXJkLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKICAtIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBDT05GSUdfSU5JVF9DUklUSUNBTCBmb3IgQVJNIGJhc2VkIGJvYXJkcwogIC0gaW50cm9kdWNlIHR3byBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGluc3RlYWQ6CiAgICBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGFuZCBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKICBNYWtlIHN1cmUgdGhhdCBNRElPIGNsb2NrIGRvZXMgbm90IGV4Y2VlZCAyLjUgTUh6IG9uIEFUOTEKCiogRml4IHRpbWVyIGNvZGUgZm9yIEFSTSBzeXN0ZW1zOiBtYWtlIHN1cmUgdGhhdCB1ZGVsYXkoKSBkb2VzIG5vdAogIHJlc2V0IHRpbWVycyBzbyBpdCdzIHNhdmUgdG8gdXNlIHVkZWxheSgpIGluIHRpbWVvdXQgY29kZS4KCiogUGF0Y2ggYnkgTWF0aGlhcyBL/HN0ZXIsIDIzIE5vdiAyMDA0OgogIGFkZCB1ZGVsYXkgc3VwcG9ydCBmb3IgdGhlIG1jZjUyODIgY3B1CgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE2IE5vdmVtYmVyIDIwMDQ6CiAgZml4IGluY29ycmVjdCBvbmJvYXJkIFhpbGlueCBDUExEIGJhc2UgYWRkcmVzcwoKKiBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDA4IE5vdiAyMDA0OgogIC0gQWRkIGxvdy1ib290IG9wdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZCAoaWYgbG93Ym9vdCBpcyBzZWxlY3RlZCwKICAgIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IGZsYXNoLiBJZiBsb3dib290IGlzCiAgICBub3Qgc2VsZWN0ZWQsIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IHRoZQogICAgQkNTUi4KICAtIGNoYW5nZSBkZWZhdWx0IGxvYWQgYmFzZSBhZGRyZXNzIHRvIDB4MDA0MDAwMDAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDggTm92IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEFuYWxvZ3VlICYgTWljcm8gUmF0dGxlciBib2FyZHMuCiAgVGVzdGVkIG9uIFJhdHRsZXI4MjQ4LgoKKiBQYXRjaCBieSBBbmRyZSBSZW5hdWQsIDA4IE5vdiAyMDA0OgogIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGluIGNvbW1vbi9sY2QuYwoKKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMDUgTm92IDIwMDM6CiAgRW5hYmxlIGFsbCA0IFBDTUJSVyBidWZmZXJzIGZvciB0aGUgTVBDODI0NSBwcm9jZXNzb3Igc2luY2UgdGhlIENQVQogIGJ1ZyBvbmx5IGFmZmVjdHMgdGhlIFhQQzgyNDUgcHJvY2Vzc29ycwoKKiBQYXRjaGVzIGJ5IEpvc2VmIFdhZ25lciwgMjkgT2N0IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BVODcgYm9hcmQKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTg1NCBib2FyZAoKKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAwMiBOb3YgMjAwNDoKICBBZGQgMTYtYml0IE5BTkQgc3VwcG9ydAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAxIE5vdiAyMDA0OgogIEFkZCBtaXNzaW5nIE5JT1MvTklPUzIgc3VwcG9ydCBmb3IgImltaW5mbyIgY29tbWFuZAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOSBPY3QgMjAwNDoKICBBZGQgbWlzc2luZyBOSU9TL05JT1MyIHN1cHBvcnQgZm9yICJta2ltYWdlIiB0b29sLgoKKiBQYXRjaCBieSBEYXZpZCBBZGFpciwgMjcgT2N0IDIwMDQ6CiAgQWRkIG1pc3NpbmcgNDQwR1ggU0RSQU0gQ29udHJvbGxlciByZXNldAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBPY3QgMjAwNDoKICBEZWNsYXJlIHJlc2V0X2NwdSgpIGluIGluY2x1ZGUvY29tbW9uLmggaW5zdGVhZCBsb2NhbGx5CgoqIFBhdGNoIGJ5IFl1c2RpIFNhbnRvc28sIDIyIE9jdCAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIEhJRERFTl9EUkFHT04gYm9hcmQKICAtIGZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBkcml2ZXIvcnRsMTgzOS5jCgoqIFBhdGNoIGJ5IEFsbGVuIEN1cnRpcywgMjEgT2N0IDIwMDQ6CiAgc3VwcG9ydCBtdWx0aXBsZSBzZXJpYWwgcG9ydHMKCiogUGF0Y2ggYnkgUmljaGFyZCBLbGluZ2xlciwgMDMgQXByIDIwMDU6CiAgQWRkIGNhbGwgdG8gZXRoX2hhbHQoKSBpbiBuZXQvbmV0LmMgd2hlbiBjYWxsZWQgZnVuY3Rpb25zIGZhaWwKICBhZnRlciBldGhfaW5pdCgpIGhhcyBiZWVuIGNhbGxlZC4KCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDMgQXByaWwgMjAwNToKICAtIFVwZGF0ZSBSRUFETUUuTmV0Y29uc29sZQogIC0gVXBkYXRlIFJFQURNRQoKKiBQcmVwYXJlIGZvciBTb0MgcmV3b3JrIG9mIEFSTSBjb2RlOgogIC0gcmVuYW1lIENPTkZJR19CT09UQklORlVOQyBpbnRvICBDT05GSUdfSU5JVF9DUklUSUNBTAogIC0gcmVuYW1lIG1lbXNldHVwIGludG8gbG93bGV2ZWxfaW5pdCAoZnVuY3Rpb24gbmFtZSBhbmQgc291cmNlIGZpbGVzKQogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAzIEFwciAyMDA1OgogIC0gY3JlYXRlIFNvQyBzcGVjaWZpYyBkaXJlY3RvcmllcyBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pbXggYW5kCiAgICBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwCgoqIEZpeCBwcm9ibGVtcyB3aXRoIFNOVFAgc3VwcG9ydDsKICBlbmFibGUgU05UUCBzdXBwb3J0IGluIHNvbWUgYm9hcmRzLgoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDAxIEFwciAyMDA1OgogIC0gRml4IGZsYXNoIGVyYXNlIHRpbWVvdXQgb24gQ01DX1BVMgogIC0gQWRkIGF1dG9tYXRpYyBIVyBkZXRlY3Rpb24gZm9yIENNQ19QVTIgYW5kIENNQ19CQVNJQwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBNYXJjaCAyMDA1OgogIGZpeCBjYWNoZSBlbmFibGluZyBmb3IgQVQ5MVJNOTIwMAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAzMCBNYXIgMjAwNToKICBhZGQgU05UUCBzdXBwb3J0IGFuZCBleHBhbmQgdGltZSBzZXJ2ZXIgYW5kIHRpbWUgb2Zmc2V0IGZpZWxkcyBvZgogIERIQ1Agc3VwcG9ydC4gU2VlIGRvYy9SRUFETUUuU05UUAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBEZWMgMjAwNDoKICBGaXggYnVnIGluIGF0OTFybTkyMCBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgRGVjIDIwMDQ6CiAgUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSBieSBtZXJnaW5nIG1lbXNldHVwLlMgZmlsZXMgZm9yCiAgYXQ5MXJtOTIwMCBib2FyZHMgaW50byBvbmUgY3B1L2F0OTFybTkyMDAvbG93bGV2ZWwuUwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAzMSBNYXIgMjAwNToKICBDbGVhbnVwIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIG92ZXJ3cml0ZV9jb25zb2xlKCkKCiogVXBkYXRlIFRRTTUyMDAgY29uZmlndXJhdGlvbjsKICBwcmVwYXJlIGZvciBSZXYuIDIwMCBzdGFydGVyIGtpdCBib2FyZHMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBPY3QgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTmlvcy1JSSBFUENTIENvbnRyb2xsZXIgY29yZS4KCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMCBPY3QgMjAwNDoKICBOaW9zLUlJIGNsZWFudXBzOgogIC0gQWRkIHN5c2lkIGNvbW1hbmQgKE5pb3MtSUkgb25seSkuCiAgLSBMb2NhdGUgZGVmYXVsdCBleGNlcHRpb24gdHJhbXBvbGluZSBhdCBwcm9wZXIgb2Zmc2V0LgogIC0gSW1wbGVtZW50IEkvTyByb3V0aW5lcyAocmVhZGIsIHdyaXRlYiwgZXRjKQogIC0gSW1wbGVtZW50IGRvX2Jvb3RtX2xpbnV4CgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMjIgTWFyIDIwMDU6CiAgLSB1c2UgVFFNNTIwMF9hdXRvIGFzIE1BS0VBTEwgdGFyZ2V0IGZvciBUUU01MjAwIHN5c3RlbXMKICAtIGFkZCBzdXBwb3J0IGZvciBTTTUwMSBncmFwaGljcyBjb250cm9sbGVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgZ3JhcGhpYyBjb25zb2xlIG9uIFRRTTUyMDAKICAtIGFkZCBzdXBwb3J0IGZvciBUUU01MjAwIFJldiAyMDAKICAtIGNsZWFudXAsIGZpeCB0eXBvIGluIGluY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKCiogUGF0Y2ggYnkgTWFuZnJlZCBCYXJhbCwgMTcgTWFyIDIwMDU6CiAgRml4IHR5cG8KCiogRml4IFJUQyBjb25maWd1cmF0aW9uIGZvciBQUENoYW1lbGVvbiBib2FyZAoKKiBDbGVhbnVwLCBmaXggdHlwbyBpbiBpbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2QgYXV0b191cGRhdGUgYW5kIGhoNDA1IGJvYXJkCgoqIEFkYXB0IGZvciBVLUJvb3QgaW1hZ2Ugc2l6ZSAobmV3IGZlYXR1cmVzIGVuYWJsZWQpIG9uIFRRTTUyMDAKCiogVXBkYXRlIGNvZGUgZm9yIFRRTTg1NDAgYm9hcmQgKGFuZCA4NXh4IGluIGdlbmVyYWwpOgogIC0gQ2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBFdGhlcm5ldCBkcml2ZXI6IE1PVE8gRU5FVCAtPiBFTkVUCiAgLSBSZWZvcm1hdCBib290IG1lc3NhZ2VzCiAgLSBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50CiAgLSBSZXBsYWNlIHRoZSAtTzIgb3B0aW1pemF0aW9uIGZsYWcgd2l0aCAtbW5vLXN0cmluZwoKKiBQYXRjaCBieSBEYXZpZCBCcm93bmVsbCwgMTAgTWFyIDIwMDU6CiAgUmVzdG9yZSBjb3B5cmlnaHQgc3RhdGVtZW50cyBpbiBPSENJIGRyaXZlcnMuCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NTQwIGJvYXJkCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE0IE1hciAyMDA1OgogIE5DNjUwOiBjaGFuZ2VkIE5BTkQgZmxhc2ggYWRkcmVzc2luZyB0byB1c2luZyBVUE1CCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2Qgdm9oNDA1IGZwZ2EgaW1hZ2UKCiogSU5LQTR4MDogQWxsb3cgaW5pdGlhbGl6YXRpb24gb2YgTENEIGJhY2tsaWdodCBkaW1taW5nIGZyb20KICAiYnJpZ2h0bmVzcyIgZW52aXJvbm1lbnQgdmFyaWFibGUuCgoqIEFkZCBwb3J0IGluaXRpYWxpemF0aW9uIGZvciBkaWdpdGFsIEkvTyBvbiBJTktBNHgwCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgTWFyIDIwMDU6CiAgVXBkYXRlIGZvciBlc2QgYm9hcmRzIGRwNDA1IGFuZCBodWI0MDUKCiogRml4IGdldF9wYXJ0aXRpb25faW5mbygpIHBhcmFtZXRlciBlcnJvciBpbiBhbGwgb3RoZXIgY2FsbHMKICAoY29tbW9uL2NtZF9pZGUuYywgY29tbW9uL2NtZF9yZWlzZXIuYywgY29tbW9uL2NtZF9zY3NpLmMpLgoKKiBFbmFibGUgVVNCIGFuZCBJREUgc3VwcG9ydCBmb3IgSU5LQTR4MCBib2FyZAoKKiBQYXRjaCBieSBBbmRyZXcgRHllciwgMjggRmViIDIwMDU6CiAgZml4IGV4dDJsb2FkIHBhc3NpbmcgYW4gaW5jb3JyZWN0IHBvaW50ZXIgdG8gZ2V0X3BhcnRpdGlvbl9pbmZvKCkKICByZXN1bHRpbmcgaW4gbG9hZCBmYWlsdXJlIGZvciBkZXZpY2VzIG90aGVyIHRoYW4gMAoKKiBBZGQgc3VwcG9ydCBmb3IgU1JBTSBhbmQgMiB4IFF1YWQgVUFSVHMgb24gSU5LQTR4MCBib2FyZAoKKiBDbGVhbnVwIFVTQiBhbmQgcGFydGl0aW9uIGRlZmluZXMKCiogQWRkIHN1cHBvcnQgZm9yIGV4dDIgZmlsZXN5c3RlbXMgYW5kIGltYWdlIHRpbWVzdGFtcHMgdG8gVFFNNTIwMCBib2FyZAoKKiBBZGQgcmVzZXQgY29kZSBmb3IgQ29yYWwtUCBvbiBJTktBNHgwIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI4IEp1biAyMDA0OgogIFVwZGF0ZSBmb3IgVFJBQiBib2FyZC4KCiogRml4IHNvbWUgbWlzc2luZyAidm9sYXRpbGUicyBpbiBNUEM1eHh4IEZFQyBkcml2ZXIKCiogRml4IGNpcnJ1cyB2b2x0YWdlIGRldGVjdGlvbiAoZm9yIENQQzQ1KQoKKiBGaXggYnl0ZW9yZGVyIHByb2JsZW0gaW4gdXNiYm9vdCBhbmQgc2NzaWJvb3QgY29tbWFuZHMuCgoqIFBhdGNoIGJ5IENhanVzIEhhaG4sIDA0IEZlYiAyMDA1OgogIC0gZG9uJ3QgaW5zaXN0IG9uIGxlYWRpbmcgJy8nIGZvciBmaWxlbmFtZSBpbiBleHQybG9hZAogIC0gc2V0IGRlZmF1bHQgcGFydGl0aW9uIHRvIHVzZWZ1bCB2YWx1ZSAoMSkgaW4gZXh0MmxvYWQKCiogUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDA4IEphbiAyMDA1OgogIGZpeCB3cm9uZyByZXR1cm4gY29kZXMgaW4gZXh0MiBjb2RlCgoqIFJlbW92ZWQgJy0tbm8td2Fybi1taXNtYXRjaCcgb3B0aW9uIGZyb20gTWFrZWZpbGUuIFRoaXMgb3B0aW9uCiAgbWFrZXMgJ2xkJyB0byBvdmVybG9vayBiaW5hcnkgb2JqZWN0cyBjb21wYXRpYmlsaXR5LgoKKiBNb3ZlZCAkKFBMQVRGT1JNX0xJQlMpIGZyb20gdGhlIGxpYnJhcnkgZ3JvdXAgKC0tc3RhcnQtZ3JvdXAgLi4uCiAgLS1lbmQtZ3JvdXApIG91dHNpZGUgb2YgdGhlIGdyb3VwLiBUaGlzIHdpbGwgbWFrZSAnbGQnIHRvIGRvCiAgX211bHRpcGxlXyBzZWFyY2ggaW4gdGhlIGxpYnJhcnkgZ3JvdXAgd2hlbiByZXNvbHZpbmcgc3ltYm9sCiAgcmVmZXJlbmNlcyBhbmQgZG8gb25seSBhIF9zaW5nbGVfIHNlYWNoIGluIGxpYmdjYy5hIGFmdGVyIHRoZSBncm91cAogIHNlYXJjaC4KCiogRml4IHN0YWJpbGl0eSBwcm9ibGVtcyBvbiBDUEM0NSBib2FyZCBhZ2Fpbi4KCiogTWFrZSBpbWFnZSBkZXRlY3Rpb24gZm9yIGRpc2tib290IC8gdXNiYm9vdCAvIHNjc2lib290IG1vcmUgcm9idXN0CiAgKGFsc28gY2hlY2sgaGVhZGVyIGNoZWNrc3VtKQoKKiBVcGRhdGUgQ1BDNDUgYm9hcmQgY29uZmlndXJhdGlvbi4KCiogQWRkIFVTQiBhbmQgUENJIHN1cHBvcnQgZm9yIElOS0E0eDAgYm9hcmQKCiogRml4IElERSBzdGFiaWxpdHkgcHJvYmxlbXMgb24gQ1BDNDUgYm9hcmQgKG5lZWRzIDIgeCBFSUVJTykuCgoqIENvZGUgY2xlYW51cAoKKiBQYXRjaCBieSBSb2JpbiBHZXR6LCAxMyBPY3QgMjAwNDoKICBBZGQgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiB0byBjaGFuZ2UgU01DOTFDMTExIE1BQyBhZGRyZXNzZXMsCiAgc2VlIGV4YW1wbGVzL1JFQURNRS5zbWM5MTExMV9lZXByb20KCiogUGF0Y2ggYnkgWGlhb2dlbmcgKFNoYXduKSBKaW4sIDEyIE9jdCAyMDA0OgogIEZpeCBGbGFzaCBzdXBwb3J0IGZvciBBUk0gSW50ZWdyYXRvciBDUC4KCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTAgSmFuIDIwMDU6CiAgVXBkYXRlIHN1cHBvcnQgZm9yIE9NQVAyNDIwIChBUk0xMSkgYW5kIEg0IGJvYXJkOgogIG8gY2xlYW4gdXAgYW5kIGFkZCBuZXcgdHlwZXMgdG8gSDQgbWVtb3J5IHByb2JlIGNvZGUuCiAgbyBmaXggdG8gd29yayB3aXRoIGludGVybmFsIGJvb3QuCiAgbyBhZGRlZCBQUkNNIGNvbmZpZyBJSUkgb3BlcmF0aW9uLgogIG8gZml4IG1hcmdpbmFsIGZsYXNoIHRpbWluZ3MuCiAgbyBhZGQgcmV2aXNvbiBBVEFHIHVzYWdlLgogIG8gZW5hYmxlIHZvbHRhZ2Ugc2NhbGluZyBhdCBwb3dlciBjaGlwLgogIG8gZml4IGNvbXBpbGUgZXJyb3IgZm9yIGkyYy4KCiogRml4IG5ldHdvcmsgcHJvYmxlbSAoZXJyb3Igd2hlbiByZWNlaXZpbmcgbXVsdGlwbGUgQVJQIHBhY2tldHMpCgoqIFBhdGNoIGJ5IERhbmllbCBQb2lyb3QsIDEyIE9jdCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBXaW5kIFJpdmVyIHNiYzQwNSBib2FyZAoKKiBQYXRjaCBieSBSYWluZXIgQnJlc3RhbiwgMTIgT2N0IDIwMDQ6CiAgTWFrZSBleGFtcGxlcy9NYWtlZmlsZSBtb3JlIHJvYnVzdAoKKiBQYXRjaCBieSBTYW0gU29uZywgMTEgT2N0b2JlciAyMDA0OgogIC0gQWRkIFJFU0VUL1BSRUJPT1QvQVVUT0JPT1Qgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZAogIC0gQWRqdXN0IENQVTpCVVMgZnJlcXVlbmN5IHJhdGlvIDE6MSB3aGVuIGNvcmUgZnJlcXVlbmN5CiAgICBsZXNzIHRoYW4gNTBNSHoKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIE9jdCAyMDA0OgogIEZpeCBhIHBhcmFtZXRlciBlcnJvciBpbiBydW5fY29tbWFuZCgpIGluIG1haW4uYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAwMSBPY3QgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIFRJIE9NQVAyNDIwIHByb2Nlc3NvciBhbmQgaXRzIEg0IHJlZmVyZW5jZQogIGJvYXJkCgoqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsZWdyaW4sIDI0IFNlcCAyMDA0OgogIEFkZGVkIHN1cHBvcnQgZm9yIE5FMjAwMCBjb21wYXRpYmxlIChEUDgzOTAsIERQODM5MDIpIE5JQ3MuCgoqIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDIzIFNlcCAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciB0aGUgQU1EIGRiMTU1MCBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBTZXAgMjAwNDoKICBBZGQgQ09ORklHX1NFUklBTF9NVUxUSSBzdXBwb3J0IGZvciBwcGM0eHgsCiAgdXBkYXRlIFJFQURNRS5zZXJpYWxfbXVsdGkKCiogUGF0Y2hlcyBieSBEYXZpZCBTbm93ZG9uLCAwNyBTZXAgMjAwNDoKICAtIGFkZCB1LWJvb3QuaGV4IHRhcmdldCBpbiB0aGUgdG9wIGxldmVsIE1ha2VmaWxlCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFVOU1cvTklDVEEgUExFQiAyIGJvYXJkIChwbGViMikKICAtIHVzZSAtbXR1bmU9eHNjYWxlIGFuZCAtbWFyY2g9YXJtdjUgb3B0aW9ucyBmb3IgUFhBCgoqIFBhdGNoIGJ5IEZsb3JpYW4gU2NobG90ZSwgMDggU2VwIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFNlblRlYy1DT0JSQTUyNzItYm9hcmQgKENvbGRmaXJlKS4KCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAwNyBTZXAgMjAwNDoKICBtcGM4MjR4OiBzZXQgUENJIGxhdGVuY3kgdGltZXIgdG8gYSBzYW5lIHZhbHVlCiAgKGlzIDAgYWZ0ZXIgcmVzZXQpLgoKKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMDMgU2VwIDIwMDQ6CiAgQWRkIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZnBnYSBjb21tYW5kIChYaWxpbnggb25seSkuCgoqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAwMyBTZXAgMjAwNDoKICBBZGQgWGlsaW54IFNwYXJ0YW4yRSBmYW1pbHkgRlBHQSBzdXBwb3J0CgoqIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwMiBTZXAgMjAwNDoKICBBZGQgQWRkZWQgc3VwcG9ydCBmb3IgSDIgcmV2aXNpb24gb2YgdGhlIEVQODI2MCBib2FyZC4KICBGaXhlZCBmb3JtYXR0aW5nIGZvciBzb21lIG9mIHRoZSBFUDgyNjAgcmVsYXRlZCBzb3VyY2UgZmlsZXMuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDIgU2VwIDIwMDQ6CiAgUmVzZXQgbW9uaXRvciBzaXplIGJhY2sgdG8gMjU2IHNvIGVudmlyb25tZW50IGNhbiBiZSB3cml0dGVuCiAgdG8gZmxhc2ggb24gTVBDODV4eCBBRFMgYW5kIENEUyByZWxlYXNlcy4KCiogUGF0Y2ggYnkgUGFvbG8gQnJvZ2dpbmksIDAyIFNlcCAyMDA0OgogIE1ha2UgQlNTIGNsZWFyaW5nIG9uIEFSTSBzeXN0ZW1zIG1vcmUgcm9idXN0CgoqIFBhdGNoIGJ5IFl1ZSBIdSBhbmQgSm9lLCAwMSBTZXAgMjAwNDoKICAtIGFkZCBQQ0kgc3VwcG9ydCBmb3IgaXhwNDI1OwogIC0gYWRkIEVFUFJPMTAwIHN1cHBvciB0Zm9yIGl4ZHA0MjUgYm9hcmQuCgoqIEZpeCBwcm9ibGVtIHdpdGggcHJvdGVjdGVkIHNlY3RvciBkZXRlY3Rpb24gaW4gZHJpdmVyL2NmaV9mbGFzaC5jCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBDb2RlIGNsZWFudXAsIG1vc3RseSBmb3IgR0NDLTMuMy54CgoqIENsZWFudXAgY29uZnVzaW5nIHVzZSBvZiBDT05GSUdfRVRIKkFERFIgLSB1c3QgaGlzIG9ubHkgdG8KICBwcmUtZGVmaW5lIGEgTUFDIGFkZHJlc3M7IHVzZSBDT05GSUdfSEFTX0VUSCogdG8gZW5hYmxlIHN1cHBvcnQgZm9yCiAgYWRkaXRpb25hbCBldGhlcm5ldCBhZGRyZXNzZXMuCgoqIENsZWFudXAgZHJpdmVycy9pODIzNjUuYyAtIGF2b2lkIGR1cGxpY2F0aW9uIG9mIGNvZGUKCiogRml4IGJvZ3VzICJjYW5ub3Qgc3BhbiBhY3Jvc3MgYmFua3MiIGZsYXNoIGVycm9yIG1lc3NhZ2UKCiogQ29kZSBjbGVhbnVwCgoqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggZm9yIHRoZSBDUEM0NSBCb2FyZC4KCiogRml4IHByb2JsZW1zIHdpdGggQ01DX1BVMiBmbGFzaCBkcml2ZXIuCgoqIENsZWFudXA6CiAgLSBhdm9pZCB0cmlncmFwaCB3YXJuaW5nIGluIGZzL2V4dDIvZXh0MmZzLmMKICAtIHJlbmFtZSBVQzEwMCAtPiB1YzEwMAoKKiBBZGQgc3VwcG9ydCBmb3IgVUMxMDAgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBEZXogMjAwNDoKICAtIGV4dDJmcyBzdXBwb3J0IGFkZGVkCiAgLSBUdW5kcmEgdW5pdmVyc2Ugc3VwcG9ydCBhZGRlZAogIC0gQ29sZGZpcmUgTUNGNTI0OSBzdXBwb3J0IGFkZGVkIChubyBwcmVsb2FkZXIgbmVlZGVkISkKICAtIE1DRjUyNDkgYm9hcmQgVEFTUkVHIGFkZGVkCiAgLSBQUEMgYm9hcmRzIGFkZGVkOiBBUEM0MDUsIENQQ0k0MDVEVCwgQ1BDSTc1MCwgRzIwMDAsIEhINDA1LAogICAgVk9NNDA1LCBXVUg0MDUKICAtIHNvbWUgZXNkIGJvYXJkcyB1cGRhdGVkCiAgLSBtZW1vcnkgY29tbWFuZHMgIm1kYyIgYW5kICJtd2MiIGFkZGVkIGZvciBjeWNsaWMgcmVhZC93cml0ZQogICAgKENPTkZJR19NWF9DWUNMSUMsIHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pCgoqIEFkZCBzdXBwb3J0IGZvciBJTktBNFgwIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEyIERlYyAyMDA0OgogIEZpeCB0eXBvIGluIEFUOTEgbWVtb3J5IHNldHVwLgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciAiU1RLNTJ4eCIgYm9hcmQgKGluY2x1ZGluZyBQUy8yIG11bHRpcGxleGVyKQogIC0gYWRkIGhhcmR3YXJlIGRldGVjdGlvbiBmb3IgVFFNNTIwMAoKKiBDbGVhbiB1cCBDTUMgUFUyIGZsYXNoIGRyaXZlcgoKKiBVcGRhdGUgTUFJTlRBSU5FUlMgZmlsZQoKKiBGaXggYnVnIGluIE1QQzgyMyBMQ0QgZHJpdmVyCgoqIEZpeCB1ZGVsYXkoKSBvbiBBVDkxUk05MjAwIGZvciBkZWxheXMgPCAxIG1zLgoKKiBFbmFibGUgbG9uZyBoZWxwIG9uIENNQyBQVTIgYm9hcmQ7CiAgZml4IHJlc2V0IGlzc3VlOwogIGluY3JlYXNlIENQVSBzcGVlZCBmcm9tIDE3OSB0byAyMDcgTUh6LgoKKiBGaXggc21jOTExMTEgZXRoZXJuZXQgZHJpdmVyIGZvciBYYWVuaWF4IGJvYXJkIChuZWVkIHRvIGhhbmRsZQogIHVuYWxpZ25lZCB0YWlsIHBhcnQgc3BlY2lhbGx5KS4KCiogVXBkYXRlIGZvciBBVDkxUk05MjAwREsgYW5kIENNQ19QVTIgYm9hcmRzOgogIC0gRW5hYmxlIGJvb3RpbmcgZGlyZWN0bHkgZnJvbSBmbGFzaAogIC0gZml4IENNQ19QVTIgZmxhc2ggZHJpdmVyCgoqIEZpeCBta2ltYWdlIHVzYWdlIG1lc3NhZ2UKCiogTWFwIFNSQU0gb24gTkM2NTAgYm9hcmQKCiogV29yayBhcm91bmQgZm9yIEV0aGVybmV0IHByb2JsZW1zIG9uIFhhZW5pYXggYm9hcmQKCiogUGF0Y2ggYnkgVHNpQ2h1bmcgTGlldywgMjMgU2VwIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTVBDODIyMCBDUFUKICAtIEFkZCBzdXBwb3J0IGZvciBBbGFza2EgYW5kIFl1a29uIGJvYXJkcwoKKiBGaXggY29uZmlndXJhdGlvbiBmb3IgRVJJQyBib2FyZCAobmVlZHMgbW9yZSByb29tKQoKKiBBZGp1c3QgTUlQUyBjb21waWxlciBvcHRpb25zIGF0IHJ1bi10aW1lIGRlcGVuZGluZyBvbiB0b29scyB2ZXJzaW9uCiAgKCItbWFyY2g9NGtjIC1tdHVuZT00a2MgLVdhLC1taXBzX2FsbG93X2JyYW5jaF90b191bmRlZmluZWQiIGZvciBuZXcsCiAgIi1tY3B1PTRrYyIgZm9yIG9sZCB0b29scykKCiogQWRkIHBhc3Npbmcgb2YgdGhlIGNvbW1hbmQgbGluZSBhbmQgbWVtb3J5IHNpemUgaW5mb3JtYXRpb24gdG8gIHRoZQogIGtlcm5lbCBvbiB4YWVuaWF4IGJvYXJkLgoKKiBFbmFibGUgTkFORCBmbGFzaCBzdXBwb3J0IGZvciBOQzY1MCBib2FyZC4KCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlIDA3IE9jdCAyMDA0OgogIFVwZGF0ZWQgUkVBRE1FIGZvciBEQkF1MXgwMCBib2FyZHMgdG8gbWF0Y2ggY3VycmVudCBzdGF0dXMKCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDI4IFNlcHQgMjAwNDoKICBGaXggRmxhc2ggc3VwcG9ydCBmb3IgVmVyc2F0aWxlLgoKKiBQYXRjaCBieSBSb2dlciBCbG9mZWxkLCAxNiBTZXAgMjAwNDoKICBGaXggdGltZW91dCBmb3IgREhDUCBjb21tYW5kIHJldHJ5CgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKICBGaXggZWFybHkgc2VyaWFsIGhhbmcgd2hlbiBDT05GSUdfU0VSSUFMX01VTFRJIGlzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKICBLaWNrIHdhdGNoZG9nIHdoZW4gYnotZGVjb21wcmVzc2luZwoKKiBGaXggQ0ZHX0haIHByb2JsZW1zIG9uIEFUOTFSTTkyMDAgc3lzdGVtcwogIFtSZW1lbWJlcjogQ0ZHX0haIHNob3VsZCBiZSAxMDAwIG9uIEFMTCBzeXN0ZW1zIV0KCiogUGF0Y2ggYnkgR3JpZGlzaCBTaGxvbWksIDMwIEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgdG8gcmV2QSB2ZXJzaW9uIG9mIFBRMjcgYW5kIFBRMjdFLgogIC0gUmV2ZXJ0ZWQgTVBDODI2MEFEUyBiYXVkcmF0ZSBiYWNrIHRvIG9yaWdpbmFsIDExNTIwMAoKKiBQYXRjaCBieSBIb2ppbiwgMTcgU2VwIDIwMDQ6CiAgRml4IHR5cG8gaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDkgU2VwdGVtYmVyIDIwMDQ6CiAgbXRlc3QncyBkYXRhIGxpbmUgdGVzdCAod2l0aCBDRkdfQUxUX01FTVRFU1Qgc2V0KSByZXR1cm5lZCBhIHdyb25nCiAgZXJyb3IgbWVzc2FnZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAzMSBBdWd1c3QgMjAwNDoKICBBZGRlZCBvcHRpb24gQ0ZHX1hMQl9QSVBFTElOSU5HIHRvIGVuYWJsZSBYTEIgcGlwZWxpbmluZy4gVGhpcwogIGltcHJvdmVzIEZUUCBwZXJmb3JtYW5jZSBmb3IgTVBDNTIwMCBzeXN0ZW1zLiBFbmFibGVkIGZvciBJY2VDdWJlCiAgYnkgZGVmYXVsdC4KCiogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMzAgQXVnIDIwMDQ6CiAgLSBJbXByb3ZlIHBsYXRmb3JtLlMgY29kZSBmb3Igb21hcDE1MTBpbm4gdGhhdCBkZXRlY3RzIHdoZXRoZXIgY29kZQogICAgaXMgcnVubmluZyBmcm9tIFNEUkFNIG9yIG5vdC4gUGF0Y2ggYWxsb3dzIFNEUkFNIHRvIGJlIGNvbmZpZ3VyZWQKICAgIGlmIGNvZGUgaXMgcnVubmluZyBvdXQgb2YgU1JBTSBhdCAweDIwMDAwMDAwLgoKKiBQYXRjaCBieSBGcmVkZXJpY2sgS2xhdHQsIDMwIEF1ZyAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgV2luZCBSaXZlciBTQkM4NTQwL1NCQzg1NjAgYm9hcmRzCgoqIENvbmZpZ3VyZSBTWDEgYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKCiogUGF0Y2hlcyBieSBNaWNoYWVsIEJlbmR6aWNrLCAzMCBBdWcgMjAwNDoKICAtIENvbmZpZ3VyZSBvbWFwMTUxMGlubiBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYwogIC0gTWFrZSBkcml2ZXJzL2NmaV9mbGFzaC5jIHByb3RlY3QgZW52aXJvbm1lbnQgYW5kIHJlZHVuZGFudAogICAgZW52aXJvbm1lbnQuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEp1biAyMDA0OgogIC0gQWRkIHNjcmlwdCAodG9vbHMvaW1nMmJyZWMuc2gpIHRvIHByb2dyYW1tIFUtQm9vdCBpbnRvCiAgICAoU3luY2gpRmxhc2ggdXNpbmcgdGhlIEJvb3RzdHJhcCBNb2RlIG9mIHRoZSBNQzkzMjhNWDEvTAoKKiBQYXRjaGVzIGJ5IFNjb3R0IE1jTnV0dCwgMjQgQXVnIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtSUkgcHJvY2Vzc29ycy4KICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUENJLTU0NDEgYm9hcmQuCiAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBLMUMyMCBib2FyZC4KCiogUGF0Y2hlcyBieSBKb24gTG9lbGlnZXIsIDI0IEF1ZyAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNUEM4NTQxIGFuZCBNUEM4NTU1IENEUyBib2FyZHMKICAtIENsZWFudXAgZXRoP2FkZHIgaGFuZGxpbmc6IG1ha2UgZGVwZW5kZW50IG9uIENPTkZJR19FVEg/QUREUgogIC0gQ29udmVydCBNUEM4NXh4QURTIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgogIC0gRml4IFBDSSB3aW5kb3cgb24gTVBDODV4eDsgcmVtb3ZlIHVubmVlZGVkIFBDSSBpbml0aWFsaXphdGlvbgogICAgZnJvbSBib2FyZF9lYXJseV9pbml0X2YoKQogIC0gUHJvdmlkZSBTVyB3b3JrYXJvdW5kIGZvciBQQ0kgaW5pdGlhbGl6YXRpb24gb24gODV4eCBDRFMKCiogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDI0IEF1ZyAyMDA0OgogIC0gRW5hYmxlIHJhbWRpc2svaW5pdHJkIHRhZ2dlZCBwYXJhbSBzdXBwb3J0IGZvciBvbWFwMTYxMGgyX2NvbmZpZwogIC0gUmVtb3ZlIHN0YXRpYyBuZXR3b3JrIHNldHVwIGRlZmF1bHRzIGZyb20gbXgxYWRzX2NvbmZpZwogIC0gdXBkYXRlIEFSTSBib2FyZHMgdG8gdXNlIGNvbnN0YW50cyBmcm9tIG1hY2gtdHlwZXMuaAoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDQgT2N0IDIwMDQ6CiAgLSBmaXggSTJDIG9uIGF0OTFybTkyMDAKICAtIGFkZCBzdXBwb3J0IGZvciBSaWNvaCBSUzVDMzcyQSBSVEMKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDAxIE9jdCAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIENNQyBQVTIgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBJMkMgb24gYXQ5MXJtOTIwMAoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggU2VwIDIwMDQ6CiAgZml4IGJhdWRyYXRlIGhhbmRsaW5nIG9uIGF0OTFybTkyMDAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgQXVnIDIwMDQ6CiAgLSByZW1vdmUgWlBDLjE5MDAgYm9hcmQtc3BlY2lmaWMgZmxhc2ggZHJpdmVyOwogICAgc3dpdGNoIHRoZSBwb3J0IHRvIGdlbmVyaWMgQ0ZJIGRyaXZlcjsKICAtIHBvcnQgY2xlYW4tdXAKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgQWRkIGNhbGNfZmJzaXplKCkgZnVuY3Rpb24gdXNlZCB3aXRoIFZJREVPTEZCX1RBRyBvbiBUUkFCCgoqIENsZWFuIHVwIHRvb2xzL2JtcF9sb2dvLmMgdG8gbm90IGFkZCB0cmFpbGluZyB3aGl0ZSBzcGFjZQoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMgaW4gY29tbW9uL2xjZC5jCiAgLSBHcm91cCBjb21tb24gZnJhbWVidWZmZXIgbWFjcm9zIGFuZCAjZGVmaW5lcyBpbiBpbmNsdWRlL2xjZC5oCiAgLSBQcm92aWRlIGNhbGNfZmJzaXplKCkgZm9yIHZpZGVvIEFUQUcKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDIxIEF1Z3VzdCAyMDA0OgogIC0gRml4IGEgdHlwbyBpbiBSRUFETUUKICAtIEFsaWduICIoUk8pIiBvdXRwdXQgZm9yICJmbGluZm8iIGFmdGVyICJwcm90ZWN0IG9uIgogIC0gQWRkIFJFU0VUIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQ7IGFkanVzdCBDUFU6QlVTIGZyZXF1ZW5jeQogICAgcmF0aW8gMToxIHdoZW4gY29yZSBmcmVxdWVuY3kgbGVzcyB0aGFuIDUwTUh6CgoqIFBhdGNoZXMgYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CiAgLSBmaXggc29tZSAidXNlIG9mIGxhYmVsIGF0IGVuZCBvZiBjb21wb3VuZCBzdGF0ZW1lbnQiIHdhcm5pbmdzCiAgLSBEZWZpbmUgdHlwZSBvZiBMQ0QgcGFuZWwgb24gbHViYm9jayBib2FyZCBpZiBDT05GSUdfTENEIGlzIHVzZWQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTYgQXVnIDIwMDQ6CiAgLSBJbnRyb2R1Y2luZyB0aGUgY29uY2VwdCBvZiBTb0NzICIuL2NwdS8kKENQVSkvJChTT0MpIgogIC0gY3JlYXRpbmcgc3ViZGlycyBmb3IgU29DcyAuL2NwdS9hcm05MjB0L2lteCBhbmQgLi9jcHUvYXJtOTIwdC9zM2MyNHgwCiAgLSBtb3ZpbmcgU29DIHNwZWNpZmljIGNvZGUgb3V0IG9mIGNwdS9hcm05MjB0LyBpbnRvIGNwdS9hcm05MjB0LyQoU09DKS8KICAtIG1vdmluZyBkcml2ZXJzL3MzYzI0eDBfaTJjLmMgYW5kIGRyaXZlcnMvc2VyaWFsX2lteC5jIG91dCBvZiBkcml2ZXJzLwogICAgaW50byBjcHUvYXJtOTIwdC8kKFNPQykvCgoqIFBhdGNoZXMgYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBib3RoIDggYW5kIDE2IGJpdCBtb2RlIGFjY2VzcyB0byBTeXN0ZW0gQUNFIENGCiAgICB0aHJvdWdoIE1QVS4KICAtIEZpeGVkIG1pc3NpbmcgU3lzdGVtIEFDRSBDRiBkZXZpY2UgZHVyaW5nIGdldCBGQVQgcGFydGl0aW9uIGluZm8KICAgIGluIGZhdF9yZWdpc3Rlcl9kZXZpY2UgZnVuY3Rpb24uCiAgLSBFbmFibGVkIFN5c3RlbSBBQ0UgQ0Ygc3VwcG9ydCBvbiBNTDMwMC4KCiogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgU3luY2ggZGVmaW5lcyBmb3Igc2F2ZWVudiBhbmQgZG9fc2F2ZWVudiBmdW5jdGlvbnMgc28gdGhleSBnZXQKICBjb21waWxlZCB1bmRlciB0aGUgc2FtZSBzdGF0ZW1lbnQuCgoqIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgogIC0gQWRkZWQgSTJDIHN1cHBvcnQgZm9yIE1MMzAwLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgTUwzMDAgdG8gcmVhZCBvdXQgaXRzIGVudmlyb25tZW50IGluZm9ybWF0aW9uCiAgICBzdG9yZWQgb24gdGhlIEVFUFJPTS4KICAtIEFkZGVkIHN1cHBvcnQgdG8gdXNlIGJvYXJkIHNwZWNpZmljIHBhcmFtZXRlcnMgYXMgcGFydCBvZgogICAgVS1Cb290J3MgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCiAgLSBVcGRhdGVkIE1MRCBmaWxlcyB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gZm9yIG5ldyBmZWF0dXJlcwogICAgYWJvdmUuCgoqIFBhdGNoZXMgYnkgVHJhdmlzIFNhd3llciwgMDUgQXVnIDIwMDQ6CiAgLSBSZW1vdmUgaW5jb3JyZWN0IGJyaWRnZSBzZXR0aW5ncyBmb3IgZXRoIGdyb3VwIDYKICAtIEFkZCBjYWxsIHRvIHNldHVwIGJyaWRnZSBpbiBwcGNfNDQweF9ldGhfaW5pdGlhbGl6ZQogIC0gRml4IHBwY180NDB4X2V0aF9pbml0IHRvIHJlc2V0IHRoZSBwaHkgb25seSBpZiBpdHMgdGhlCiAgICBmaXJzdCB0aW1lIHRocm91Z2gsIG90aGVyd2lzZSwganVzdCBjaGVjayB0aGUgcGh5IGZvciB0aGUKICAgIGF1dG9uZWdvdGlhdGVkIHNwZWVkL2R1cGxleC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgbmV0Y29uc29sZQogIC0gb25seSBwcmludCB0aGUgc3BlZWQvZHVwbGV4IHRoZSBmaXJzdCB0aW1lIHRoZSBwaHkgaXMgcmVzZXQuCgoqIFBhdGNoIGJ5IFNobG9tbyBLdXQsIDI5IE1hciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBNS1MgSW5zdHJ1bWVudHMgIlF1YW50dW0iIGJvYXJkCgoqIEZpeCBidWlsZCBwcm9ibGVtIHdpdGggQ29nZW50IGJvYXJkczsKICBhdm9pZCB1c2luZyA8YXNtL2J5dGVvcmRlci5oPiB3aGVuIHVzaW5nIHRoZSBob3N0IGNvbXBpbGVyCgoqIFBhdGNoIGJ5IEdhbmFwYXRoaSBDLCAwNCBBdWcgMjAwNDoKICBGaXggTkZTIHRpbWVvdXQgaXNzdWUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgSnVsIDIwMDQ6CiAgLSBGaXggaG9zdCB0b29scyBidWlsZGluZyBpbiBDeWd3aW4gZW52aXJvbm1lbnQKICAtIEZpeCBoZWFkZXIgZmlsZXMgc2VhcmNoIG9yZGVyIGZvciBob3N0IHRvb2xzCgoqIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDE5IEp1bCAyMDA0OgogIEZpeCBrZ2RiLlMgc3VwcG9ydCBmb3IgNzR4eF83NXggY3B1CgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTUgSnVsIDIwMDQ6CiAgRml4IE1QQzg1eHggSTJDIGRyaXZlcgoKKiBGaXggcHJvYmxlbXMgd2l0aCBDRFJPTSBkcml2ZSBhcyBzbGF2ZSBkZXZpY2Ugb24gTGl0ZTUyMDAgSURFIGJ1cy4KCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTUgSnVseSAyMDA0CiAgU2V0IHRoZSBQQ0kgY2xhc3MgY29kZSBmb3IgSlNFIGJvYXJkIGFzIHBhcnQgb2YgUENJIGludGVyZmFjZSBzZXR1cAoKKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNSBKdWwgMjAwNDoKICBGaXggcHJvYmxlbSB3aXRoIHdyaXRlcyB3aXRoIG9kZCBzaXplcyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIHdoZW4KICBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSBpcyBzZXQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDQ6CiAgQWxsb3cgY2xvY2sgc2V0dGluZyBvbiBNUEM4NjYvTVBDODg1IHNlcmllcyBjaGlwcyBhY2NvcmRpbmcgdG8KICBlbnZpcm9ubWVudCB2YXJpYWJsZSBgY3B1Y2xrJwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBBcHIgMjAwNDoKICBSZW1vdmUgdW5uZWNlc3NhcnkgcmVkZWZpbmUgb2YgQ1BNX0RBVEFPTkxZX1NJWkUgZm9yIE1QQzgyNngKCiogUGF0Y2ggYnkgVmluY2VudCBEdWJleSwgMjQgU2VwIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHhhZW5pYXggYm9hcmQKCiogQWRkIGNvbW1lbnQgYWJvdXQgbm9uLUdQTCBjaGFyYWN0ZXIgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8KICBDT1BZSU5HIGZpbGUKCiogRml4IEZFQyBldGhlcm5ldCBwcm9ibGVtIG9uIE5TQ1UgYm9hcmQuCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwOSBTZXAgMjAwNDoKICBhbGxvdyB0byB1c2UgVVNBUlQxIGFzIGNvbnNvbGUgcG9ydCBvbiBhdDkxcm05MjAwZGsgYm9hcmRzCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgU2VwIDIwMDQ6CiAgVXBkYXRlIEFSNDA1IGJvYXJkLgoKKiBGaXggU3lzQ2xrIGhhbmRsaW5nIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAwOCBTZXAgMjAwNDoKICBVcGRhdGUgZXRhZ3MgYnVpbGQgdGFyZ2V0CgoqIEltcHJvdmUgTmV0Q29uc29sZSBzdXBwb3J0OiBhZGQgc3VwcG9ydCBmb3IgYnJvYWRjYXN0IGRlc3RpbmF0aW9uCiAgYWRkcmVzcyBhbmQgYnVmZmVyZWQgaW5wdXQuCgoqIENsZWFudXAgY29tcGlsZXIgd2FybmluZ3MgZm9yIEdDQyAzLjMueCBhbmQgbGF0ZXIKCiogRml4IHByb2JsZW0gaW4gY21kX2pmZnMyLmMgaW50cm9kdWNlZCBieSBDRkdfSkZGU19TSU5HTEVfUEFSVCBwYXRjaAoKKiBBZGQgc3VwcG9ydCBmb3IgSURTICJOQzY1MCIgYm9hcmQKCiogQWRkIGF1dG9tYXRpYyB1cGRhdGUgc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKCiogQ2xlYXIgQmxvY2sgTG9jay1CaXRzIHdoZW4gZXJhc2luZyBmbGFzaCBvbiBMV01PTiBib2FyZC4KCiogRml4IHJldHVybiBjb2RlIG9mICJmYXRsb2FkIiBjb21tYW5kCgoqIEVuYWJsZSBNU0RPUy9WRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDMgQXVnIDIwMDQ6CiAgY2hhbmdlIHRpbWluZyBmb3IgU001MDEgZ3JhcGhpY3MgY29udHJvbGxlciBvbiBUUU01MjAwIG1vZHVsZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAxMyBKdWx5IDIwMDQ6CiAgLSBUb3RhbDUyMDAgTENEIG5vdyBydW4gaW4gbGl0dGxlIGVuZGlhbiBtb2RlLiBFbmRpYW5lc3MgY29udmVyc2lvbgogICAgaXMgZG9uZSBpbiBoYXJkd2FyZS4KICAtIFJlbW92ZWQgbGFzdCByZWZlcmVuY2UgdG8gImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlLgoKKiBQYXRjaGVzIGJ5IExhcnMgTXVuY2gsIDEyIEp1bCAyMDA0OgogIC0gbW92ZSBhdDQ1LmMgdG8gYm9hcmQvYXQ5MXJtOTIwMGRrLyBzaW5jZSB0aGlzIGlzIGF0OTFybTkyMDBkawogICAgYm9hcmQgc3BlY2lmaWMKICAtIHNwbGl0IG91dCB0aGUgTFhUOTcxQSBQSFkgZnJvbSBuc185NzUwX2V0aC5oCiAgLSBzcGxpdCB0aGUgZG05MTYxIHBoeSBwYXJ0IG91dCBvZiBhdDkxcm05MjAwX2V0aGVyLmMKCiogUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTIgSnVsIDIwMDQ6CiAgUmVwbGFjZWQgaGFyZGNvZGVkIFBMMDExIGNsb2NrIGZyZXF1ZW5jeSB3aXRoIGNvbmZpZyB2YXJpYWJsZS4KICBGaXhlZCB3cm9uZyBDT05GSUdfQ01EX0RGTCBkb2MuCgoqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDA5IEp1biAyMDA0OgogIG1ha2UgaXQgcG9zc2libGUgdG8gcmVtb3ZlIGNocGFydCB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHBhcnRpdGlvbgoKKiBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIFVEUCAoY29tcGF0aWJsZSB0byBJbmdvIE1vbG5hcidzCiAgbmV0Y29uc29sZSBwYXRjaCB1bmRlciBMaW51eCkKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNiBKdWwgMjAwNDoKICAtIHN1cHBvcnQgbGFyZ2VyIEREUiBtZW1vcmllcyB1cCB0byAyRyBvbiB0aGUgUEM4NTQwLzg1NjBBRFMgYW5kCiAgICBTVFhHUDMgYm9hcmRzCiAgLSBNYWRlIE1QQzg1NDAvODU2MEFEUyBiZSAzM01oeiBQQ0kgYnkgZGVmYXVsdC4KICAtIFJlbW92ZWQgbW9sZHkgQ09ORklHX1JBTV9BU19GTEFTSCwgQ0ZHX0ZMQVNIX1BPUlRfV0lEVEhfMTYKICAgIGFuZCBDT05GSUdfTDJfSU5JVF9SQU0gb3B0aW9ucy4KICAtIFJlZmFjdG9yIExvY2FsIEJ1cyBpbml0aWFsaXphdGlvbiBvdXQgb2YgU0RSQU0gc2V0dXAuCiAgLSBSZS1pbXBsZW1lbnQgbmV3IHZlcnNpb24gb2YgTEJDMTEvRERSMTEgZXJyYXRhIHdvcmthcm91bmRzLgogIC0gTW92ZWQgYm9hcmQgc3BlY2lmaWMgUENJIGluaXQgcGFydHMgb3V0IG9mIENQVSBkaXJlY3RvcnkuCiAgLSBBZGRlZCBUTEIgZW50cnkgZm9yIFBDSS0xIElPIE1lbW9yeQogIC0gVXBkYXRlZCBSRUFETUUubXBjODV4eGFkcwoKKiBQYXRjaCBieSBTYXNjaGEgSGF1ZXIsIDI4IEp1bjoKICAtIGFkZCBnZW5lcmljIHN1cHBvcnQgZm9yIE1vdG9yb2xhIGkuTVggYXJjaGl0ZWN0dXJlCiAgLSBhZGQgc3VwcG9ydCBmb3IgbXgxYWRzLCBteDFmczIgYW5kIHNjYjkzMjggYm9hcmRzCgoqIFBhdGNoZXMgYnkgTWFyYyBMZWVtYW4sIDIzIEp1bCAyMDA0OgogIC0gQWRkIGRlZmluZSBmb3IgdGhlIFBDSS9NZW1vcnkgQnVmZmVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKICAtIGNvcnJlY3RlZCBjb21tZW50cyBpbiBjcHUvbXBjODI0eC9jcHVfaW5pdC5jCgoqIEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzZXJpYWwgaW50ZXJmYWNlcwogIChmb3IgZXhhbXBsZSB0byBhbGxvdyBtb2RlbSBkaWFsLWluIC8gZGlhbC1vdXQpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgSnVsIDIwMDQ6CiAgY3B1L3BwYzR4eC9zZHJhbS5jIHJld3JpdHRlbiBub3cgdXNpbmcgZ2V0X3JhbV9zaXplKCkKCiogRml4IE5TQ1UgY29uZmlnOyBhZGQgZXRoZXJuZXQgd2FrZXVwIGNvZGUuCgoqIEFkZCBsaW5rIGZvciBwcmVsb2FkZXIgZm9yIE1vdG9yb2xhIENvbGRmaXJlIHRvIFJFQURNRS5tNjhrCgoqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDEyIEp1bCAyMDA0OgogIGZpeCBvdXRwdXQgZm9ybWF0dGluZyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAyIEp1bCAyMDA0OgogIEZpeCBsb3dib290IChhZ2Fpbikgb24gTVBDNXh4eAoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNyBKdWwgMjAwNDoKICByZWxvY2F0ZSBleGNlcHRpb24gdmVjdG9ycyBvbiBhcm03MjB0IGlmIG5lZWRlZAoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDA2IEp1bCAyMDA0OgogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdAogIC0gU2V0IGNvcnJlY3QgT01BUDE2MTAgYmlfYXJjaF9udW1iZXIgZm9yIGJ1aWxkIHRhcmdldAoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNiBKdWwgMjAwNDoKICBldmI0NTEwOiBhZGQgc3VwcG9ydCBmb3IgdGltZXIgaW50ZXJydXB0OyBjbGVhbnVwCgoqIFBhdGNoIGJ5IERhbiBQb2lyb3QsIDA2IEp1bCAyMDA0OgogIEZpeCBzYmM4MjYwIGVudmlyb25tZW50IHZhcmlhYmxlcwoKKiBDbGVhbnVwIHJlZHVuZGFuZCAiY29uc29sZSIgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDUgSnVsIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUb3RhbDUxMDAncyBhbmQgVG90YWw1MjAwJ3MgTENEIHNjcmVlbgoKKiBQYXRjaGVzIGJ5IERhbiBFaXNlbmh1dCwgMDEgSnVsIDIwMDQ6CiAgLSBSRUFETUUgZml4ZXMuCiAgLSBNb3ZlIGRvYzIwMDAuaCBpbmNsdWRlIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZyBvbiBzb21lIGJvYXJkcwoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwMSBKdWwgMjAwNDoKICBBZGRlZCBzdXBwb3J0IGZvciBUb3RhbDUxMDAgYW5kIFRvdGFsNTIwMCAoUmV2LjEgYW5kIFJldi4yKQogIE1HVDUxMDAgYW5kIE1QQzUyMDAgYmFzZWQgRnJlZXNjYWxlIHBsYXRmb3Jtcy4KCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDAxIEp1bCAyMDA0OgogIEFkZCBpbml0aWFsaXphdGlvbiBmb3IgSW50ZWdyYXRvciBhbmQgdmVyc2F0aWxlIGJvYXJkIGZpbGVzLgoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAwMSBKdW4gMjAwNDoKICBGaXggVkZEIEZCIGFsbG9jYXRpb24sIGFkZCBMQ0QgRkIgYWxsb2NhdGlvbiBvbiBBUk0KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMzAgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjkgSnVuIDIwMDQ6CiAgQWRkIGxvb3B3IGNvbW1hbmQ6IGluZmluaXRlIHdyaXRlIGxvb3Agb24gYWRkcmVzcyByYW5nZQoKKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI5IEp1biAyMDA0OgogIC0gYWRkIGVtcHR5IGluY2x1ZGUvYXNtLW1pY3JvYmxhemUvcHJvY2Vzc29yLmgKICAtIGFkZCB0byBDUkVESVRTIGFuZCBNQUlOVEFJTkVSUwogIC0gYWRkIGdkIGluaXRpYWxpemF0aW9uCiAgLSBhZGQgTWljcm9CbGF6ZSBhbmQgU1VaQUtVIGJvYXJkIHRvIE1BS0VBTEwgc2NyaXB0CiAgLSBhZGQgcmVzZXQgc3VwcG9ydCBmb3IgU1VaQUtVCiAgLSBhZGQgZmx1c2hfY2FjaGUoKSBmb3IgTWljcm9CbGF6ZQogIC0gYWRkIENGR19GTEFTSF9TSVpFIHRvIGluY2x1ZGUvY29uZmlncy9zdXpha3UuaCBzaW5jZSB3ZSBoYXZlIGZpeGVkCiAgICBzaXplIGZsYXNoIG1lbW9yeSBvbiBTVVpBS1UKCiogUGF0Y2ggYnkgUHJha2FzaCBLdW1hciwgMjcgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBQWEEyNTAgYmFzZWQgSW50cmluc3ljIENlcmYgYm9hcmQuCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDI3IEp1biAyMDA0OgogIGZpeCBjb21tZW50IGluIGluY2x1ZGUvY29tbW9uLmgKCiogUmVuYW1lIFNCQzg1NjAgaW50byBzYmM4NTYwIGZvciBjb25zaXN0ZW5jeQoKKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAyNCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlcidzIHNiYzgyNDAgYm9hcmQKCiogUGF0Y2hlcyBieSBZYXN1c2hpIFNob2ppLCAyNiBKdW4gMjAwNDoKICAtIGRyaXZlcnMvc2VyaWFsX3h1YXJ0bGl0ZS5jOiBmaXggInJldHVybiAwIiBpbiB2b2lkIGZ1bmN0aW9uCiAgLSBhZGQgbWljcm9ibGF6ZSBzdXBwb3J0IHRvIG1raW1hZ2UgdG9vbAoKKiBQYXRjaCBieSBGcmVkIEtsYXR0LCAyNSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgV2luZFJpdmVyJ3Mgc2JjODU2MCBib2FyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNAogIFNtYWxsIEJ1Z3MgZml4ZXMgZm9yICJhdDkxcm05MjAwZGsiIGJvYXJkOgogIC0gVGltaW5nIG1vZGlmaWNhdGlvbnMgZm9yIFNQSSBEYXRhRmxhc2ggYWNjZXNzCiAgLSBGaXggTkFORCBmbGFzaCBkZXRlY3Rpb24gYnVnCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDI0IEp1biAyMDA0OgogIEFkZCBTdXBwb3J0IGZvciBGbGFzaCBBVDQ5QlY2NDE2IGZvciBBVDkxUk05MjAwREsgYm9hcmQKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNyBKdW5lIDIwMDQ6CiAgQ29tcGxldGlvbiBvZiB0aGUgODU0MEFEUy84NTYwQURTIHVwZGF0ZXM6CiAgRml4IHNvbWUgUENJIGFuZCBSYXBpZCBJL08gbWVtb3J5IG1hcHMsCiAgSW5pdGlhbGl6ZSBib3RoIFRTRUMgMSBhbmQgMiwKICBJbml0aWFsaXplIFNEUkFNCiAgVXBkYXRlIE1BSU5UQUlORVIgZm9yIDg1eHggYm9hcmRzIGFuZCBSRUFETUUubXBjODV4eGFkcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdW4gMjAwNDoKICBSZW1vdmUgb2Jzb2xldGUgQWRkZXJJSSBwb3J0IHdoaWNoIHdhcyBzdXBlcnNlZGVkIGJ5IHVuaWZpZWQKICBBZGRlcklJL0FkZGVyODd4IHBvcnQKCiogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2IEp1biAyMDA0OgogIEZpeCBnY2MtMy4zLjMgd2FybmluZ3MgZm9yIHNtYzkxMTExLmMKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMiBKdWwgMjAwNDoKICAtIEZpeCBidWcgaW4gNDA1IGV0aGVybmV0IGRyaXZlcjsgYWxsb2NhdGVkIGRhdGEgbm90IGNsZWFyZWQhCiAgLSBGaXggcHJvYmxlbSBpbiA0MDUgaTJjIGRyaXZlcjsgZG9uJ3QgdHJ5IHRvIHByaW50IHdpdGhvdXQgY29uc29sZSEKCiogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAxMSBKdW4gMjAwNDoKICBSZW1vdmUgZGVidWcgY29kZSBmcm9tICdib2FyZC9scGQ3YTQweC9mbGFzaC5jJwoKKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxMSBKdW4gMjAwNDoKICBVcGRhdGUgZm9yIFBQQ2hhbWVsZW9uIGJvYXJkOgogIC0gc3VwcG9ydCBmb3IgU3lzQ2xrIEAgMjVNSHoKICAtIHN1cHBvcnQgZm9yIFNpbGljb24gTW90aW9uIFNNNzEyIFZHQSBjb250cm9sbGVyCiAgLSBzb21lIGNsZWFuIHVwcwoKKiBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEp1biAyMDA0OgogIC0gZml4IHByb2JsZW1zIHdpdGggZXhhbXBsZXMvc3R1YnMuYyBmb3IgR0NDID49IDMuNAogIC0gZml4IHByb2JsZW1zIHdpdGggZ2QgaW5pdGlhbGl6YXRpb24KCiogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMTcgTWF5IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0M0NTEwQiBDUFUgKEFSTTd0ZG1pIGJhc2VkIFNvQykKICAtIEFkZCBzdXBwb3J0IGZvciBFU1BELUluYy4gRVZCNDUxMCBCb2FyZAoKKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMTEgTWF5IDIwMDQ6CiAgRml4IGZvciBNUEM4MjQ1IC0gcmVhZGluZyBQUEMgTWVtb3J5IGZyb20gYW5vdGhlciBkZXZpY2Ugd2l0aCB0aGUKICBQUEMgYXMgUENJIHRhcmdldCBkZXZpY2UgY29ycnVwdHMgZGF0YSBkdWUgdG8gaW50ZXJlbmFsIGhhcmR3YXJlCiAgYnVmZmVyaW5nLgoKKiBGaXggImNscyIgY29tbWFuZCB3aGVuIHVzZWQgd2l0aCBzcGxhc2ggc2NyZWVuCgoqIEluY3JlYXNlIE5GUyBkb3dubG9hZCB0aW1lb3V0IChub3cgMSBtaW4gLSAxMCBzZWMgaXMgdG8gc2hvcnQgZm9yIGEKICBzbG93IGRvd25sb2FkIG9mIGEgYmlnIGltYWdlKQoKKiBBZGQgImNscyIgZnVuY3Rpb24gdG8gTVBDODIzIExDRCBkcml2ZXIgc28gd2UgY2FuIHJlaW5pdGlhbGl6ZSB0aGUKICBkaXNwbGF5IGV2ZW4gYWZ0ZXIgc2hvd2luZyBhIGJpdG1hcAoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDA0IEp1biAyMDA0OgogIC0gRERSIFJhbSBzdXBwb3J0IGZvciBQTTUyMCAoTVBDNTIwMCkKICAtIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBmbGFzaCB0eXBlcyAoUE01MjApCiAgLSBVU0IgLyBJREUgLyBDRi1DYXJkIC8gRGlza09uQ2hpcCBzdXBwb3J0IGZvciBQTTUyMAogIC0gOCBiaXQgYm9vdCByb20gc3VwcG9ydCBmb3IgUE01MjAvQ0U1MjAKICAtIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIE1pY3JvU3lzIENQQzQ1IGJvYXJkIChNUEM4MjQ1KQogIC0gSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgQ1BDNDUKICAtIHN1cHBvcnQgb2YgbmV3IGZsYXNoIHR5cGUgKDI4RjE2MEMzVCkgZm9yIENQQzQ1CgoqIEZpeCBmbGFzaCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBMaW51eCBmb3IgUFBDaGFtZWxlb24gYm9hcmQKCiogUmVtb3ZlIGV0aF9pbml0KCkgZnJvbSBsaWJfYXJtL2JvYXJkLmM7IGl0J3MgZG9uZSBpbiBuZXQubmV0LmMuCgoqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTAgSnVuIDIwMDQ6CiAgZml4IHN1cHBvcnQgZm9yIExvZ2ljIFNESy1MSDdBNDA0IGJvYXJkIGFuZCBjbGVhbiB1cCB0aGUKICBMSDdBNDA0IHJlZ2lzdGVyIG1hY3Jvcy4KCiogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAxMCBKdW4gMjAwNDoKICBNb2RpZnkgY29kZSB0byBzZWxlY3QgY29ycmVjdCBzZXJpYWwgY2xvY2sgb24gU2FuZHBvaW50ODI0NQoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEwIEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBLMyBzdHJhdGEgZmxhc2guCgoqIFBhdGNoIGJ5IFRob21hcyBCcmFuZCwgMTAgSnVuIDIwMDQ6CiAgRml4ICJsb2FkcyIgY29tbWFuZCBvbiBESzFTMTAgYm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIDhNQiBmbGFzaCBTSU1NIGFuZCBKRkZTMiBmaWxlIHN5c3RlbSBvbgogIE1vdG9yb2xhIEZBRFMgYm9hcmQgYW5kIGl0cyBkZXJpdmF0aXZlcyAoTVBDODZ4QURTLCBNUEM4ODVBRFMpLgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUmTWljcm8gQWRkZXI4N3ggYW5kIHRoZSBvbGRlciBBZGRlcklJIGJvYXJkLgoKKiBQYXRjaCBieSBNaW5nLUxlbiBXdSwgMDkgSnVuIDIwMDQ6CiAgQWRkIHN1cHBwb3J0IGZvciBNQzkzMjggKERhcmdvbmJhbGwpIENQVSBhbmQgTW90b3JvbGEgTVgxQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAwOSBKdW4gMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCiAgLSBVcGRhdGUgRkxBU0ggZHJpdmVyIGZvciA0KkFNMjlETDMyM0RCOTBWSQogIC0gQWRkIG9wdGlvbiBjb25maWd1cmF0aW9uIG9mIENGR19FTlZfSVNfSU5fTlZSQU0gb24gUlBYbGl0ZV9EVyBib2FyZAoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwOCBKdW5lIDIwMDQ6CiAgLSBNYWtlIE1QQzUyMDAgYm9hcmRzIGV2YWx1YXRlIHRoZSBTVlIgdG8gcHJpbnQgcHJvY2Vzc29yIG5hbWUgYW5kCiAgICB2ZXJzaW9uIGluIGNoZWNrY3B1KCkgKGNwdS9tcGM1eHh4L2NwdS5jKS4KCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbG9lbSwgMDYgTWF5IDIwMDQ6CiAgRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGNyYW1mcyBjb2RlCgoqIFBhdGNoIGJ5IFRvbSBBcm1pc3RlYWQsIDA0IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBNQVg2OTAwIFJUQwoKKiBQYXRjaGVzIGJ5IExhZGlzbGF2IE1pY2hsLCAwMyBKdW4gMjAwNDoKICAtIGZpeCBjZmlfZmxhc2guYyBvbiBMRSBzeXN0ZW1zCiAgLSBsZXQgJ21ha2UgbXJwcm9wZXInIGRlbGV0ZSB1LWJvb3QuaW1nIGFzIHdlbGwKICAtIHR1cm4gcHJpbnRmIGludG8gZGVidWcgaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDI4IE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBFeHlzIFhTRW5naW5lIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE1heSAyMDA0OgogIEZpeCBhIE1QQzV4eHggSTJDIHRpbWluZyBpc3N1ZSBpbiBpMmNfcHJvYmUoKS4KCiogUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjcgTWF5IDIwMDQ6CiAgRml4IGJvYXJkX2luaXRfZigpIGZvciBkYmF1MXgwMCBib2FyZC4KCiogUGF0Y2ggYnkgSW1yZSBEZWFrLCAyNiBNYXkgMjAwNDoKICBPbiBPTUFQMTYxMCBwbGF0Zm9ybXMgY2hlY2sgaWYgYm9vdGluZyBmcm9tIFJBTShDUzApIG9yIGZsYXNoKENTMykuCiAgU2V0IGZsYXNoIGJhc2UgYWNjb3JkaW5nbHksIGFuZCBkZWNpZGUgd2hldGhlciB0byBkbyBvciBza2lwIGJvYXJkCiAgc3BlY2lmaWMgc2V0dXAgc3RlcHMuCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNiBNYXkgMjAwNDoKICBBZGQgbWlzc2luZyBkZWZpbmUgaW4gaW5jbHVkZS9hc20tbTY4ay9nbG9iYWxfZGF0YS5oCgoqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNSBNYXkgMjAwNDoKICBBZGQgbWlzc2luZyBmdW5jdGlvbnMgZ2V0X3RpY2tzKCkgYW5kIGdldF90YmNsaygpIGluIGxpYl9tNjhrL3RpbWUuYwoKKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDI0IE1heSAyMDA0OgogIGZpeCBTRFJBTSBpbml0aWFsaXphdGlvbiBmb3IgTFBEN0E0MDAgYm9hcmQuCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDIwIE1heSAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCBpbiBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBJbnRlcnBoYXNlIGlTUEFOIGJvYXJkcy4KCiogUGF0Y2hlcyBieSBQYXVsIFJ1aGxhbmQsIDE3IE1heSAyMDA0OgogIC0gQWRkIEkvTyBmdW5jdGlvbnMgdG8gdGhlIHNtYzkxMTExIGV0aGVybmV0IGRyaXZlciB0byBzdXBwb3J0IHRoZQogICAgTG9naWMgTFBEN0E0MHggYm9hcmRzLgogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBMb2dpYyBab29tIExIN0E0MHggYmFzZWQgU0RLIGJvYXJkKHMpLAogICAgc3BlY2lmaWNhbGx5IHRoZSBMUEQ3QTQwMC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IE1heSAyMDA0OgogIC0gY2FsbCBNQUMgYWRkcmVzcyByZWFkaW5nIGNvZGUgYWxzbyBmb3IgU01TQzkxQzExMTsKICAtIG1ha2UgU01TQzkxQzExMSB0aW1lb3V0IGNvbmZpZ3VyYWJsZSwgcmVtb3ZlIGR1cGxpY2F0ZSBjb2RlCiAgLSBmaXggZ2V0X3RpbWVyKCkgZm9yIFBYQQogIC0gdXBkYXRlIGRvYy9SRUFETUUuSkZGUzIKICAtIHVzZSAiYm9vdGZpbGUiIGVudiB2YXJpYWJsZSBhbHNvIGZvciBqZmZzMgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjQ3MiBib2FyZCAoOE1CIEZsYXNoIFJldikKCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTQgTWF5IDIwMDQ6CiAgLSBmbGFzaC5oOiBtb3JlIGZsYXNoIHR5cGVzIGFkZGVkCiAgLSBpbW1hcF84MjYwLmg6IHNvbWUgYml0cyBhZGRlZCAodXNlZnVsIGZvciBSTUlJKQogIC0gY21kX2NvbmluZm8uYzogdHlwbyBjb3JyZWN0ZWQsIHByaW50ZiAtPiBwdXRzCiAgLSByZWR1Y2VkIHNpemUgYnkgcmVwbGFjaW5nIHNwYWNlcyB3aXRoIHRhYgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEzIE1heSAyMDA0OgogIEFkZCAnaW1nZXh0cmFjdCcgY29tbWFuZDogZXh0cmFjdCBvbmUgcGFydCBvZiBhIG11bHRpIGZpbGUgaW1hZ2UuCgoqIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAxMSBNYXkgMjAwNDoKICBEeW5hbWljYWxseSBoYW5kbGUgUkVWMSBhbmQgUkVWMiBNUEM4NXh4IHBhcnRzLgogICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpLgogIE5ldyBjb25zaXN0ZW50IG1lbW9yeSBtYXAgYW5kIExvY2FsIEFjY2VzcyBXaW5kb3cgYWNyb3NzIE1QQzg1eHggbGluZS4KICBOZXcgQ0NTUkJBUiBhdCAweEUwMDBfMDAwMCBub3cuCiAgQWRkIFJBUElEIEkvTyBtZW1vcnkgbWFwLgogIE5ldyBtZW1vcnkgbWFwIGluIFJFQURNRS5NUEM4NXh4YWRzCiAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCiAgQmV0dGVyIGJvYXJkIGFuZCBDUFUgaWRlbnRpZmljYXRpb24gb24gTVBDODV4eCBib2FyZHMgYXQgYm9vdC4KICAgIChKb24gTG9lbGlnZXIsIDEwLU1heS0yMDA0KQogIFNEUkFNIGNsb2NrIGNvbnRyb2wgZml4ZXMgb24gTVBDODU0MEFEUyAmIE1QQzg1NjAgYm9hcmRzLgogIFNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBNUEM4NTQwQURTICYgTVBDODU2MEFEUyBjbGVhbmVkIHVwLgogICAgKEppbSBSb2JlcnRzb24sIDEwLU1heS0yMDA0KQogIFJld3JpdGUgb2YgdGhlIE1QQzg1eHggVGhyZWUgU3BlZWQgRXRoZXJuZXQgQ29udHJvbGxlciAoVFNFQykgZHJpdmVyLgogIFN1cHBvcnRzIG11bHRpcGxlIFBIWXMuCiAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKICBTb21lIFJFQURNRS5NUEM4NXh4YWRzIHVwZGF0ZXMuCiAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCiAgQ29weXJpZ2h0IHVwZGF0ZXMgZm9yICJGcmVlc2NhbGUiCiAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTEgTWF5IDIwMDQ6CiAgQWRkIGZsYXNoIHN1cHBvcnQgZm9yIFNUIE0yOVcwNDBCCiAgUmVkdWNlIEpTRSBzcGVjaWZpYyBmbGFzaC5jIHRvIHJlbW92ZSBkZWFkIGNvZGUuCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAwNCBNYXkgMjAwNDoKICBGaXggY2xlYXJfYnNzIGNvZGUgZm9yIEFSTSBzeXN0ZW1zIChhbGwgZXhjZXB0IHMzYzQ0YjAgd2hpY2gKICBkb2Vzbid0IGNsZWFyIEJTUyBhdCBhbGw/KQoKKiBGaXggInBpbmciIHByb2JsZW0gb24gSU5DLUlQIGJvYXJkLiBTdHJhbmdlIHByb2JsZW06CiAgU29tZXRpbWVzIHRoZSBzdG9yZSB3b3JkIGluc3RydWN0aW9uIGhhbmdzIHdoaWxlIHdyaXRpbmcgdG8gb25lIG9mCiAgdGhlIFN3aXRjaCByZWdpc3RlcnMsIGJ1dCBvbmx5IGlmIHRoZSBuZXh0IGluc3RydWN0aW9uIGlzIDE2LWJ5dGUKICBhbGlnbmVkLiBNb3ZpbmcgdGhlIGluc3RydWN0aW9uIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzb21laG93CiAgbWFrZXMgdGhlIHByb2JsZW0gZ28gYXdheS4KCiogUGF0Y2ggYnkgUmlzaGkgQmhhdHRhY2hhcnlhLCAwOCBNYXkgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDU5MTIgT1NLIEJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nIE1heSwgMDcgTWF5IDIwMDQ6CiAgRml4IHR5cG8gb2YgVVBNIHRhYmxlIGZvciBybXUgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA1IE1heSAyMDA0OgogIC0gSW50cmFjb20gYm9hcmQgdXBkYXRlLgogIC0gQWRkIENvZGVjIFBPU1QuCgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgc2Vjb25kIEV0aGVybmV0IGludGVyZmFjZSBmb3IgdGhlICdQUENoYW1lbGVvbicKICBib2FyZC4KCiogUGF0Y2ggYnkgRGF2ZSBQZXZlcmxleSwgMzAgQXByIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE9NQVA3MzAgUGVyc2V1czIgRGV2ZWxvcG1lbnQgYm9hcmQKCiogUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAyOSBBcHIgMjAwNDoKICBGaXggZmxhc2ggY2hpcC1zZWxlY3QgKE9SMCkgb3B0aW9uIHJlZ2lzdGVyIHNldHRpbmcgb24gRkFEUyBib2FyZHMuCgoqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CiAgUmVwb3J0IE1JSSBuZXR3b3JrIHNwZWVkIGFuZCBkdXBsZXggc2V0dGluZyBwcm9wZXJseSB3aGVuCiAgYXV0by1uZWdvdGlhdGUgaXMgbm90IGVuYWJsZWQuCgoqIFBhdGNoIGJ5IEphcnJldHQgUmVkZCwgMjkgQXByIDIwMDQ6CiAgRml4IGhhbmcgb24gcmVzZXQgb24gT2NvdGVhIGJvYXJkIGR1ZSB0byBmbGFzaCBpbiB3cm9uZyBtb2RlLgoKKiBQYXRjaCBieSBEYXZlIFBldmVybGV5LCAyOSBBcHIgMjAwNDoKICBhZGQgTUFDIGFkZHJlc3MgZGV0ZWN0aW9uIHRvIHNtYzkxMTExIGRyaXZlcgoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI4IEFwciAyMDA0OgogIGZpeCB0eXBvIGluIGxpYl9hcm0vYm9hcmQuYwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAyMCBBcHIgMjAwNDoKICAtIFJFQURNRSB1cGRhdGU6IGFkZCBDT05GSUdfQ1NCMjcyIGFuZCBjc2IyNzJfY29uZmlnCiAgLSBhZGQgZGVzY3JpcHRpb25zIGZvciBzb21lIE1JSS9QSFkgb3B0aW9ucywgQ09ORklHX0kyQ0ZBU1QsIGFuZAogICAgaTJjZmFzdCBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxOSBBcHIgMjAwNDoKICAtIFJlbmFtZSBEVUVUX0FEUyB0byBNUEM4ODVBRFMKICAtIFJlbmFtZSBDT05GSUdfRFVFVCB0byBDT05GSUdfTVBDODg1X0ZBTUlMWQogIC0gUmVuYW1lIENPTkZJR184NjZfZXRfYWwgdG8gQ09ORklHX01QQzg2Nl9GQU1JTFkKICAtIENsZWFuIHVwIEZBRFMgZmFtaWx5IHBvcnQgdG8gdXNlIHRoZSBuZXcgZGVmaW5lcwoKKiBGaXggUENJIHN1cHBvcnQgb24gQ1BDNDUgYm9hcmQKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNSBBcHIgMjAwNDoKICBBZGQgTmlvcyBHREIvSlRBRyBDb25zb2xlIHN1cHBvcnQ6CiAgLSBBZGQgc3R1YnMgdG8gc3VwcG9ydCBnZGIgdmlhIEpUQUcuCiAgLSBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIEpUQUcuCiAgLSBNaW5vciBjbGVhbnVwLgoKKiBBZGQgc3VwcG9ydCBmb3IgQ0FUY2VudGVyIGJvYXJkIChiYXNlZCBvbiBQUENoYW1lbGVvbiBNRSBtb2R1bGUpCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDEyIE1heSAyMDA0OgogIFVzaW5nIGV4dGVybmFsIHdhdGNoZG9nIGZvciBLVVA0IGJvYXJkcyBpbiBtcGM4eHgvY3B1LmM7CiAgbG9hZF9zZXJudW1fZXRoYWRkcigpIGZvciBLVVA0IGJvYXJkcyBpbiBsaWJfcHBjL2JvYXJkLmM7CiAgdmFyaW91cyBjaGFuZ2VzIHRvIEtVUDQgYm9hcmQgc3BlY2lmaWMgZmlsZXMKCiogRml4IG1pbm9yIG5ldHdvcmsgcHJvYmxlbSBvbiBNUEM1MjAwOiBuZWVkIHNvbWUgZGVsYXkgYmV0d2VlbgogIHJlc2V0dGluZyB0aGUgUEhZIGFuZCBzZW5kaW5nIHRoZSBmaXJzdCBwYWNrZXQuIEltcGxlbWVudGVkIGluIGEKICAibmF0dXJhbCIgd2F5IGJ5IGludm9raW5nIHRoZSBQSFkgcmVzZXQgYW5kIGluaXRpYWxpemF0aW9uIGNvZGUKICBvbmx5IG9uY2UgYWZ0ZXIgcG93ZXIgb24gdnMuIGVhY2ggdGltZSB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuCgoqIEFkZCBzb21lIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbG93LXNwZWVkIGRldmljZXMgdG8gU0w4MTEgVVNCIGNvbnRyb2xsZXIKICAoYXQgbGVhc3QgInVzYiByZXNldCIgbm93IHBhc3NlcyBzdWNjZXNzZnVsbHkgYW5kICJ1c2IgaW5mbyIgZGlzcGxheXMKICBjb3JyZWN0IGluZm9ybWF0aW9uKQoKKiBDaGFuZ2UgaW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgbmV0d29yayBpbnRlcmZhY2VzOiBpbml0aWFsaXplCiAgb24tY2hpcCBpbnRlcmZhY2VzIGJlZm9yZSBleHRlcm5hbCBjYXJkcy4KCiogRml4IG1lbW9yeSBsZWFrIGluIHRoZSBOQU5ELXNwZWNpZmljIEpGRlMyIGNvZGUKCiogRml4IFNMODExIFVTQiBjb250cm9sbGVyIHdoZW4gYXR0YWNoZWQgdG8gYSBVU0IgaHViCgoqIEZpeCBjb25maWcgb3B0aW9uIHNwZWxsaW5nIGluIFBNNTIwIGNvbmZpZyBmaWxlCgoqIEZpeCBQSFkgZGlzY292ZXJ5IHByb2JsZW0gaW4gY3B1L21wYzh4eC9mZWMuYyAoaW50cm9kdWNlZCBieQogIHBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDMwIE1hciAyMDA0KQoKKiBGaXggbWlub3IgTkFORCBKRkZTMiByZWxhdGVkIGlzc3VlCgoqIEZpeGVzIGZvciBTTDgxMSBVU0IgY29udHJvbGxlcjoKICAtIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciBicm9rZW4gbWVtb3J5IHN0aWNrCiAgLSBpbXByb3ZlIGVycm9yIGhhbmRsaW5nCgoqIEluY3JlYXNlIHBhY2tldCBzZW5kIHRpbWVvdXQgdG8gMSBtcyBpbiBjcHUvbXBjOHh4L3NjYy5jIHRvIGJldHRlcgogIGNvcGUgd2l0aCBjb25nZXN0ZWQgbmV0d29ya3MuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMyBBcHIgMjAwNDoKICBGaXggVlNDL0NJUyA4MjAxIHBoeSBkZXNjcmFtYmxlciBpbnRlcm9wZXJhYmlsaXR5IHRpbWluZyBkdWUgdG8KICBlcnJhdGEgZnJvbSBWaXRlc3NlIFNlbWljb25kdWN0b3IuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyMiBBcHIgMjAwNDoKICBGaXggZXRoZXJuZXQgY29uZmlndXJhdGlvbiBmb3IgInZlcnNhdGlsZSIgYm9hcmQKCiogUGF0Y2ggYnkgS3NoaXRpaiBHdXB0YSwgMjEgQXByIDIwMDQ6CiAgUmVtb3ZlIGJ1c3kgbG9vcCBhbmQgdXNlIE1QVSB0aW1lciBmciB1c2xlZXAoKSBvbiBPTUFQMTUxMC8xNjEwIGJvYXJkcwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKICBGaXggYSBidWcgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXI6CiAgVGhlIE1JSSBpbnRlcmZhY2UgaXMgbm93IGluaXRpYWxpemVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIFBIWS4KCiogUGF0Y2ggYnkgSm9obiBLZXJsLCAxOSBBcHIgMjAwNDoKICBVc2UgVS1ib290J3MgbWlpcGh5LmggZm9yIFBIWSByZWdpc3RlciBuYW1lcywgcmF0aGVyIHRoYW4KICBpbnRyb2R1Y2luZyBhIG5ldyBoZWFkZXIgZmlsZS4KCiogVXBkYXRlIHBjaV9pZHMuaCBmcm9tIGxpbnV4LTIuNC4yNgoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxOSBBcHIgMjAwNDoKICBGaXggcHJvYmxlbSBjYXVzZSBieSBWTEFOIGZ1bmN0aW9uIG9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlCiAgd2l0aG91dCBWTEFOIGVudmlyb25tZW50CgoqIENsZWFuIHVwIHRoZSBUUU04eHhfWVlNSHogY29uZmlndXJhdGlvbnM7IGFsbG93IHRvIHVzZSB0aGUgc2FtZQogIGJpbmFyeSBpbWFnZSBmb3IgYWxsIGNsb2NrIGZyZXF1ZW5jaWVzLiBJbXBsZW1lbnQgcnVuLXRpbWUKICBvcHRpbWl6YXRpb24gb2YgZmxhc2ggYWNjZXNzIHRpbWluZyBiYXNlZCBvbiB0aGUgYWN0dWFsIGJ1cwogIGZyZXF1ZW5jeS4KCiogTW9kaWZ5IEtVUDRYIGJvYXJkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIFNMODExIGRyaXZlciBmb3IgVVNCIG1lbW9yeQogIHN0aWNrcyAoaW5jbHVkaW5nIEZBVCAvIFZGQVQgZmlsZXN5c3RlbSBzdXBwb3J0KQoKKiBBZGQgU0w4MTEgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIgZm9yIFVTQgoKKiBBZGQgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyBkZXNyaXB0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTkgQXByIDIwMDQ6CiAgQWxsb3cgdG8gdXNlIHNoZWxsIHN0eWxlIHN5bnRheCAoaS4gZS4gJHt2YXJ9ICkgd2l0aCBzdGFuZGFyZCBwYXJzZXIuCiAgTWlub3IgcGF0Y2hlcyBmb3IgSW50cmFjb20gYm9hcmRzLgoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMTkgQXByIDIwMDQ6CiAgY2xlYW51cCBzdXBwb3J0IGZvciBDRi9JREUgb24gUENNQ0lBIGZvciBQWEEyNVgKCiogVGVtcG9yYXJpbHkgZGlzYWJsZWQgSm9obiBLZXJsJ3MgZXh0ZW5kZWQgTUlJIGNvbW1hbmQgY29kZSBiZWNhdXNlCiAgIm1paXZhbHMuaCIgaXMgbWlzc2luZwoKKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDEzIEFwciAyMDA0OgogIC0gUmVtb3ZlIENTMCBjaGlwIHNlbGVjdCB0aW1pbmcgc2V0dGluZyBmcm9tIGNwdS9tcGM1eHh4L3N0YXJ0LlMKICAtIEFkZCBzeW5jIGluc3RydWN0aW9ucyB0byBJY2VDdWJlIFNEUkFNIGluaXQgY29kZQogIC0gTW92ZSBTRFJBTSBjaGlwIGNvbnN0YW50cyBpbnRvIHNlcGVyYXRlIGluY2x1ZGUgZmlsZXMKICAtIFVuaWZ5IEREUiBhbmQgU0RSIGluaXRpYWxpemF0aW9uIGNvZGUKICAtIFVuaWZ5IGFsbCBJY2VDdWJlIChMaXRlNXh4eCkgdGFyZ2V0IG5hbWVzCgoqIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTYgQXByIDIwMDQ6CiAgRW5hYmxlIHJhbmdlcyBpbiBtaWkgY29tbWFuZCwgZS5nLiBtaWkgcmVhZCAwLTFmIDAgb3IKICBtaWkgcmVhZCA0LTcgMTgtMWEuICBBbHNvIGFkZCBtaWkgZHVtcCBzdWJjb21tYW5kIGZvcgogIHByZXR0eS1wcmludGluZyBzdGFuZGFyZCByZWdzIDAtNS4KCiogUGF0Y2ggYnkgIFN0ZXBoZW4gV2lsbGlhbXMsIDE2IEFwcmlsIDIwMDQ6CiAgZml4IHR5cG8gaW4gSlNFLmg7IHVwZGF0ZSBNQUlOVEFJTkVSUwoKKiBQYXRjaCBieSBNYXR0aGV3IFMuIE1jQ2xpbnRvY2ssIDE0IEFwciAyMDA0OgogIGZpeCBpbml0ZHJhbSBmdW5jdGlvbiBmb3IgdXR4ODI0NSBib2FyZAoKKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMTQgQXByIDIwMDQ6CiAgdXNlIEFUQUdfSU5JVFJEMiBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgQVRBR19JTklUUkQgdGFnCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxOCBBcHIgMjAwNDoKICBwcm92aWRlIHRoZSBJREUgUmVzZXQgRnVuY3Rpb24gZm9yIEVNSyA1MjAwIGJvYXJkcwoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxMiBBcHIgMjAwNDoKICBmaXggcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3tieXRlLHdvcmR9X3ZpYV9kd29yZCBwcm9ibGVtcwoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDEyIEFwciAyMDA0OgogIFVwZGF0ZSBtYXggUkFNIHNpemUgZm9yIGRlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOCBBcHIgMjAwNDoKICBBZGQgVExCIGVudHJ5IGZvciBzZWNvbmQgRElNTSBzbG90IG9uIG9jb3RlYQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBBcHIgMjAwNDoKICBhZGQgUlRMODE2OSBuZXR3b3JrIGRyaXZlcgoKKiBQYXRjaCBieSBEYW4gTWFsZWssIDA3IEFwciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIFJQQy9TVHggR1AzLCBNb3Rvcm9sYSA4NTYwIGJvYXJkCiAgLSBVcGRhdGUgODV4eCBUU0VDIGRyaXZlciBzbyBpdCBzZWFyY2hlcyBNSUkgZm9yIGZpcnN0IGF2YWlsYWJsZSBQSFkKICAgIGFuZCB1c2VzIHRoYXQgb25lLgogIC0gQWRkIGZ1bmN0aW9ucyB0byBzdXBwb3J0IGNvbnNvbGUgTUlJIGNvbW1hbmRzLgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwNyBBcHIgMjAwNDoKICBNb3ZlIGluaXRpYWxpemF0aW9uIG9mIGJpX2lpY19mYXN0W10KICBmcm9tIGJvYXJkX2luaXRfZigpIHRvIGJvYXJkX2luaXRfcigpCgoqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgogIENsZWFudXAgbWljcm9ibGF6ZSBwb3J0CgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgQXByIDIwMDQ6CiAgQWRkIGF1dG8gU0RSQU0gbW9kdWxlIGRldGVjdGlvbiBmb3IgRGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAwNiBBcHIgMjAwNDoKICAtIEZpeCBzb21lIFBDSSBwcm9ibGVtcyBvbiB0aGUgTVBDODI2NkFEUyBib2FyZAogIC0gRml4IHRoZSBsb2NhdGlvbiBvZiBzb21lIFBDSSBlbnRyaWVzIGluIHRoZSBpbW1hcCBzdHJ1Y3R1cmUKCiogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMDcgQXByIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgbWljcm9ibGF6ZSBwcm9jZXNzb3JzCiAgLSBhZGQgc3VwcG9ydCBmb3IgQXRtYXJrVGVjaG5vICJzdXpha3UiIGJvYXJkCgoqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50IGluIGZsYXNoCgoqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgSkZGUzIgTkFORCBzdXBwb3J0LgoKKiBBZGRlZCBzdXBwb3J0IGZvciBKRkZTMiBmaWxlc3lzdGVtIChyZWFkLW9ubHkpIG9uIHRvcCBvZiBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNiBBcHIgMjAwNDoKICBMQkE0OCBmaXhlcwoKKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBBcHIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBhIG5ldyB2ZXJzaW9uIG9mIGFuIEludHJhY29tIGJvYXJkIGFuZCBmaXgKICAgIHZhcmlvdXMgb3RoZXIgdGhpbmdzIG9uIG90aGVycy4KICAtIGFkZCB2ZXJpZnkgc3VwcG9ydCB0byB0aGUgY3JjMzIgY29tbWFuZCAoZGVmaW5lCiAgICBDT05GSUdfQ1JDMzJfVkVSSUZZIHRvIGVuYWJsZSBpdCkKICAtIGZpeCBGRUMgZHJpdmVyIGZvciBNUEM4eHggc3lzdGVtczoKICAgIDEuIGZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyBmb3IgYm9hcmRzIHRoYXQgdXNlIGR5bmFtaWMKICAgICAgIGFsbG9jYXRpb24gb2YgRFBSQU0KICAgIDIuIHNodXQgZG93biBGRUMgYWZ0ZXIgbmV0d29yayB0cmFuc2ZlcnMKICAtIEhVU0ggcGFyc2VyIGZpeGVzOgogICAgMS4gQSBuZXcgdGVzdCBjb21tYW5kIHdhcyBhZGRlZC4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZgogICAgICAgdGhlIG9uZSBpbiB0aGUgYm91cm5lIHNoZWxsLgogICAgMi4gQSBuZXcgZXhpdCBjb21tYW5kIHdhcyBhZGRlZCB3aGljaCB0ZXJtaW5hdGVzIHRoZSBjdXJyZW50CiAgICAgICBleGVjdXRpbmcgc2NyaXB0LgogICAgMy4gRml4ZWQgaGFuZGluZyBvZiAkPyAoZXhpdCBjb2RlIG9mIGxhc3QgZXhlY3V0ZWQgY29tbWFuZCkKICAtIEZpeCBzb21lIGNvbXBpbGUgcHJvYmxlbXM7CiAgICBhZGQgIm9uY2UiIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBuZXRyZXRyeSB2YXJpYWJsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDAyIEFwciAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBBc3NhYmV0IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDAxIEFwciAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBQaWN0dXJlIEVsZW1lbnRzIEpTRSBib2FyZAoKKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMDEgQXByIDIwMDQ6CiAgQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBQWEEgc3lzdGVtcy4KCiogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQ6CiAgLSBhZGQgYXV0by1jb21wbGV0ZSBzdXBwb3J0IHRvIHRoZSBVLUJvb3QgQ0xJCiAgLSBhZGQgc3VwcG9ydCBmb3IgTkVUVEEgYW5kIE5FVFBIT05FIGJvYXJkczsgZml4IE5FVFZJQSBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFcHNvbiAxNTZ4IHNlcmllcyBvZiBncmFwaGljYWwgZGlzcGxheXMKICAgIChUaGVzZSBkaXNwbGF5cyBhcmUgc2VyaWFsIGFuZCBub3Qgc3VpdGFibGUgZm9yIHVzaW5nIGEgbm9ybWFsCiAgICBmcmFtZWJ1ZmZlciBjb25zb2xlIG9uIHRoZW0pCiAgLSBhZGQgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIGluIG9yZGVyIHRvIFBPU1QgYW55IERTUHMgaW4gYSBib2FyZAogIC0gaW1wcm92ZSBhbmQgZml4IHZhcmlvdXMgdGhpbmdzIGluIHRoZSBNUEM4eHggRkVDIGRyaXZlcjoKICAgIDEuIFRoZSBuZXcgODd4IGFuZCA4OHggc2VyaWVzIG9mIHByb2Nlc3NvcnMgaGF2ZSB0d28gRkVDcywKICAgICAgIGFuZCB0aGUgbmV3IGRyaXZlciBzdXBwb3J0cyB0aGVtIGJvdGguCiAgICAyLiBBbm90aGVyIGNoYW5nZSBpbiB0aGUgODd4Lzg4eCBzZXJpZXMgaXMgc3VwcG9ydCBmb3IKICAgICAgIHRoZSBSTUlJIChSZWR1Y2VkIE1JSSkgaW50ZXJmYWNlLiBIb3dldmVyIG51bWVyb3VzCiAgICAgICBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIHNpbmNlIHRoZSBQSFlzCiAgICAgICBhcmUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGxpbmVzLiBUaGF0IG1lYW5zIHRoYXQKICAgICAgIHlvdSBoYXZlIHRvIGFkZHJlc3MgdGhlbSBjb3JyZWN0bHkgb3ZlciB0aGUgTUlJCiAgICAgICBpbnRlcmZhY2UuCiAgICAzLiBXZSBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBNSUkvUk1JSSBpbnRlcmZhY2UKICAgICAgIGNvbmZpZ3VyYXRpb24gdG8gd2hhdCB0aGUgUEhZIHJlcG9ydHMuCiAgLSBGaXggcHJvYmxlbSB3aGVuIHJlYWRpbmd0aGUgTUlJIHN0YXR1cyByZWdpc3Rlci4gRHVlIHRvIHRoZQogICAgaW50ZXJuYWwgZGVzaWduIG9mIG1hbnkgUEhZcyB5b3UgaGF2ZSB0byByZWFkIHRoZSByZWdpc3RlcgogICAgdHdpY2UuIFRoZSBwcm9ibGVtIGlzIG1vcmUgYXBwYXJlbnQgaW4gMTBNYml0IG1vZGUuCiAgLSBhZGQgbmV3IG1vZGUgIi5qZmZzMnMiIGZvciByZWFkaW5nIGZyb20gYSBOQU5EIGRldmljZTogaXQganVzdAogICAgc2tpcHMgb3ZlciBiYWQgYmxvY2tzLgogIC0gYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgVkxBTnMgKDgwMi4xcSksIGFuZCBDRFAgKENpc2NvCiAgICBEaXNjb3ZlcnkgUHJvdG9jb2wpCiAgLSBzb21lIG1pbm9yIHBhdGNoZXMgLyBjbGVhbnVwCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI4IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzIgZmFtaWx5IGluY2x1ZGluZyBNUEM4MjQ3LzgyNDgvODI3MS84MjcyCiAgLSBBZGQgc3VwcG9ydCBmb3IgTVBDODI3MkFEUyBldmFsdWF0aW9uIGJvYXJkIChhbm90aGVyIGZsYXZvdXIgb2YgTVBDODI2MEFEUykKICAtIENoYW5nZSBjb25maWd1cmF0aW9uIG1ldGhvZCBmb3IgTVBDODI2MEFEUyBmYW1pbHkKCiogYWRkIHN0YXJ0dXAgY29kZSB0byBjbGVhciB0aGUgQlNTIG9mIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIEZpeCBpZiAvIGVsaWYgaGFuZGxpbmcgYnVnIGluIEhVU0ggc2hlbGwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXM6IFJlbW92ZSBjb25maWcudG1wIGZpbGVzIG9ubHkgd2hlbgogIHVuY29uZmlndXJpbmcgdGhlIGJvYXJkCgoqIEFkYXB0IFJNVSBib2FyZCBmb3IgYmlnZ2VyIGZsYXNoIG1lbW9yeQoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMyBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgS1VQNFggQm9hcmQKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE1hciAyMDA0CiAgQWRkIFJlaXNlcmZzIHN1cHBvcnQKCiogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjAgTWFyIDIwMDQKICAtIEFkZCBhdXRvLXJlbGVhc2UgZm9yIFNNU0MgTEFOOTFjMTExIGRyaXZlcgogIC0gQWRkIHNhdmUvcmVzdG9yZSBvZiBQVFIgYW5kIFBOUiByZWdzIGFzIHN1Z2dlc3RlZCBpbiBkYXRhc2hlZXQKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTkgTWFyY2ggMjAwNAogIEluY3JlYXNlIHNwZWVkIG9mIHNlY3RvciByZWFkcyBmcm9tIFN5c3RlbUFDRSwKICBzaG9ydGVuIHBvbGwgdGltZW91dCBhbmQgcmVtb3ZlIGEgdXNlbGVzcyByZXNldAoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxOSBNYXIgMjAwNDoKICBNYWtlIEdpZ0UgUEhZIDEwMDBNYnBzIFNwZWVkL0R1cGxleCBkZXRlY3Rpb24gY29uZGl0aW9uYWwKICAoQ09ORklHX1BIWV9HSUdFKQoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDE4IE1hciAyMDA0OgogIHByZXZlbnQgbWFjaGluZSBjaGVja3MgZHVyaW5nIGEgUENJIHNjYW4KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgRml4IHN0cmluZyBjbGVhbmluZyBpbiBJREUgaWRlbnRpZmljYXRpb24KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgLSBVbmlmeSB2aWRlbyBtb2RlIGhhbmRsaW5nIGZvciBDaGlwcyAmIFRlY2hub2xvZ2llcyA2OTAwMCBWaWRlbwogICAgY2hpcCBhbmQgU2lsaWNvbiBNb3Rpb24gU01JIDcxMi83MTAvODEwIFZpZGVvIGNoaXAKICAtIEFkZCBzZWxlY3Rpb24gb2YgdGhlIHZpZGVvIG91dHB1dCAoQ1JUIG9yIExDRCkgdmlhICd2aWRlb291dCcKICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUgU2lsaWNvbiBNb3Rpb24KICAtIFJFQURNRSB1cGRhdGUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CiAgaW5jbHVkZS9jb21tb24uaCB0eXBvIGZpeAoKKiBQYXRjaGVzIGJ5IFRvbHVuYXkgT3JrdW4sIDE3IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIGJkLT5iaV9paWNfZmFzdFtdIGluaXRpYWxpemF0aW9uIHZpYSBlbnZpcm9ubWVudAogICAgdmFyaWFibGUgImkyY2Zhc3QiIChDT05GSUdfSTJDRkFTVCkKICAtIEFkZCAiaTJjZmFzdCIgdS1ib290IGVudmlyb25tZW50IHZhcmlhYmxlIHN1cHBvcnQgZm9yIGNzYjI3MgoKKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxNyBNYXIgMjAwNDoKICBJZ25vcmUgJ1wwJyBjaGFyYWN0ZXJzIGluIGNvbnNvbGUgaW5wdXQgZm9yIHVzZSB3aXRoIHRlbG5ldCBhbmQKICB0ZWxjbyBwYWRzLgoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDE3IE1hciAyMDA0OgogIHR5cG8gZml4IGZvciBzdHJzd2FiIHByb3RvdHlwZSAjaWZkZWYKCiogUGF0Y2hlcyBieSBUaG9tYXMgVmllaHdlZ2VyLCAxNiBNYXIgMjAwNDoKICAtIHNob3cgUENJIGNsb2NrIGZyZXF1ZW5jeSBvbiBNUEM4MjYwIHN5c3RlbXMKICAtIGFkZCBGQ0NfUFNNUl9STUlJIGZsYWcgZm9yIEhpUDcgcHJvY2Vzc29ycwogIC0gaW4gZG9famZmczJfZnNsb2FkKCksIHRha2UgbG9hZCBhZGRyZXNzIGZyb20gbG9hZF9hZGRyIGlmIG5vdCBzZXQKICAgIGV4cGxpY2l0LCB1cGRhdGUgbG9hZF9hZGRyIG90aGVyd2lzZQogIC0gcmVwbGFjZWQgcHJpbnRmIGJ5IHB1dGMvcHV0cyB3aGVuIG5vIGZvcm1hdHRpbmcgaXMgbmVlZGVkCiAgICAoc21hbGxlciBjb2RlIHNpemUsIGZhc3RlciBleGVjdXRpb24pCgoqIFBhdGNoIGJ5IFBoaWxsaXBwZSBSb2JpbiwgMTYgTWFyIDIwMDQ6CiAgYXZvaWQgZGVyZWZlcmVuY2luZyBOVUxMIHBvaW50ZXIgaW4gbGliX2FybS9hcm1saW51eC5jCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IE1hciAyMDA0OgogIEZpeCBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gZG9jdW1lbnRhdGlvbgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNSBNYXIgMjAwNDoKICBJbml0aWFsaXplIGJpX29wYmZyZXEgdG8gcmVhbCBPUEIgZnJlcXVlbmN5IHZpYSBnZXRfT1BCX2ZyZXEoKQoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBNYXIgMjAwNDoKICBVcGRhdGUgQ1JFRElUUyAmIE1BSU5UQUlORVJTIGZpbGVzIGZvciBQUEM0NDBHWCAmIE9jb3RlYSBwb3J0CgoqIEFkZCBzdGFydC11cCBkZWxheSB0byBtYWtlIHN1cmUgcG93ZXIgaGFzIHN0YWJpbGl6ZWQgYmVmb3JlCiAgYXR0ZW1wdGluZyB0byBzd2l0Y2ggb24gVVNCIG9uIFNYMSBib2FyZC4KCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxOCBNYXIgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBYTTI1MCBib2FyZCAoUFhBMjU1KQogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODI4IGJvYXJkIChNUEM4MjgwKQogIC0gQWRkIHN1cHBvcnQgZm9yIDMyIE1CIEZsYXNoIG9uIFBNODI1LzgyNgogIC0gbmV3IFNEUkFNIHJlZnJlc2ggcmF0ZSBmb3IgUE04MjUvUE04MjYKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNNTIwIChNUEM1MjAwKQogIC0gcmVwbGFjZWQgUXVlcnkgYnkgSWRlbnRpZnkgY29tbWFuZCBpbiBDUFU4Ni9mbGFzaC5jCiAgICB0byBzdXBwb3J0IDI4RjE2MEYzQgoKKiBGaXggd3JhcCBhcm91bmQgcHJvYmxlbSB3aXRoIHVkZWxheSgpIG9uIEFSTTkyMFQKCiogQWRkIHN1cHBvcnQgZm9yIE1hY3Jvbml4IGZsYXNoIG9uIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTUgTWFyIDIwMDQ6CiAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBJREUgaWRlbnRpZmljYXRpb24KCiogRml4IHBvd2VyLW9mZiBvZiBMQ0QgZm9yIG91dC1vZi1iYW5kIHRlbXBlcmF0dXJlcyBvbiBMV01PTiBib2FyZAoKKiBSZW1vdmUgcmVkdW5kYW5kICNkZWZpbmUgaW4gSWNlQ3ViZS5oCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI3IEZlYiAyMDA0OgogIC0gQWRkaW5nIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBmb3IgQVQ5MVJNOTIwMAogIC0gTWFueSB3aGl0ZSBzcGFjZSBmaXhlcyBpbiBjcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMKCiogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKICBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCByZWxhdGVkIGNvZGUKCiogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAxMiBNYXIgMjAwNDoKICAtIEZpeCBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQgZm9yIDQ0MEdYCiAgLSBBZGQgR2lnYWJpdCBFdGhlcm5ldCBTdXBwb3J0IHRvIE1JSSBQSFkgdXRpbGl0aWVzCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTIgTWFyIDIwMDQ6CiAgRml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBCZXR0ZXIgc3VwcG9ydCBmb3IgeDgveDE2IGltcGxlbWVudGF0aW9ucwogIC0gQWRkZWQgZmFpbHVyZSBmb3IgQU1EIGNoaXBzIGF0dGVtcHRpbmcgdG8gdXNlIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCiAgLSBBZGRlZCBkZWZpbmVzIGZvciBBTUQgY29tbWFuZCBhbmQgYWRkcmVzcyBjb25zdGFudHMKCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBNYXIgMjAwNDoKICBGaXggZ2V0X2RlbnRmcm9tZGlyKCkgdG8gY29ycmVjdGx5IGhhbmRsZSBkZWxldGVkIGRlbnRyaWVzCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CiAgUmVtb3ZlIGhhcmQgY29kZWQgbmV0d29yayBzZXR0aW5ncyBpbiBUSSBPTUFQMTYxMCBIMgogIGRlZmF1bHQgYm9hcmQgY29uZmlnCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIEFEUyBHcmFwaGljc0NsaWVudCsgYm9hcmQuCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDExIE1hciAyMDA0OgogIC0gYWRkIGJpdG1hcCBjb21tYW5kIGFuZCBzcGxhc2ggc2NyZWVuIHN1cHBvcnQgaW4gY2ZiIGNvbnNvbGUKICAtIGFkZCBbb3B0aW9uYWxdIG9yaWdpbiBpbiB0aGUgYml0bWFwIGRpc3BsYXkgY29tbWFuZAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMSBNYXIgMjAwNDoKICBGaXggb2NvdGVhIGJvYXJkIGVhcmx5IGluaXQgaW50ZXJydXB0IHNldHVwLgoKKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxMSBNYXIgMjAwNDoKICBSZW1vdmUgcmVkdW5kYW5kIGNvZGU7IGFkZCAgUENJLXNwZWNpZmljIGJpdHMgdG8gaW5jbHVkZS9tcGM4MjYwLmgKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAwOSBNYXIgMjAwNAogIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBTU1YgQUROUC9FU0MxIChOaW9zIFNvZnRjb3JlKQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDkgTWFyIDIwMDQ6CiAgZml4IHJlY2VudCBidWlsZCBmYWlsdXJlIGZvciBTQTExMDAgdGFyZ2V0CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IE1hciAyMDA0OgogIFN1cHBvcnQgbmF0aXZlIGludGVycnVwdCBtb2RlIGZvciB0aGUgSUJNNDQwR1guCiAgUHJldmlvdXNseSBpdCB3YXMgcnVubmluZyBpbiA0NDBHUCBjb21wYXRpYmlsaXR5IG1vZGUuCgoqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAwOSBNYXIgMjAwNDoKICBBZGRlZCBBUk0gSW50ZWdyYXRvciBBUCwgQ1AgYW5kIFZlcnNhdGlsZSBQQjkyNkVKLVMgUmVmZXJlbmNlCiAgUGxhdGZvcm0gc3VwcG9ydC4KCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggTWFyIDIwMDQ6CiAgRG9uJ3Qgb3ZlcndyaXRlIHNlcnZlciBJUCBhZGRyZXNzIG9yIGJvb3QgZmlsZSBuYW1lCiAgd2hlbiB0aGUgYm9vdCBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgogIFJlbW92ZWQgY29tcGlsZSB0aW1lIHJlc3RyaWN0aW9uIG9uIENGR19JMkNfU1BFRUQgZm9yIERTMTMzOCBSVEMKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKICBGaXggZWFybHkgYm9hcmQgaW5pdGlhbGl6YXRpb24gZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKCiogUGF0Y2ggYnkgRWQgT2tlcnNvbiwgMyBNYXIgMjAwNDoKICBmaXggQ0ZJIGZsYXNoIHdyaXRlcyBmb3IgbGl0dGxlIGVuZGlhbiBzeXN0ZW1zCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwMSBNYXIgMjAwNDoKICBnZW5lcmFsaXplIFVTQiBhbmQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAgd2l0aCBhY2NvcmRpbmcKICBjaGFuZ2VzIHRvIEljZUN1YmUuaCBhbmQgVE9QNTIwMC5oCiAgYWRkIEFtMjlMVjI1NiAyNTYgTUJpdCBGTEFTSCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkcwogIGFkZCBpbmZvIGFib3V0IFVTQiBhbmQgSURFIHRvIFJFQURNRQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA0IE1hciAyMDA0OgogIEZpeCBwcm9ibGVtcyB3aXRoIEdDQyAzLjMueCB3aGljaCBjaGFuZ2VkIGhhbmRsaW5nIG9mIGdsb2JhbAogIHZhcmlhYmxlcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gKG5vdyBpbiAuYnNzIGluc3RlYWQgb2YKICAuZGF0YSBhcyBiZWZvcmUpLgoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDAyIE1hciAyMDA0OgogIGFkZCBzdHJzd2FiKCkgdG8gZml4IElERSBMQkEgY2FwYWNpdHksIGZpcm13YXJlIGFuZCBtb2RlbCBudW1iZXJzCiAgb24gbGl0dGxlIGVuZGlhbiBtYWNoaW5lcwoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwMiBNYXIgMjAwNDoKICAtIFJlbW92ZSBnZXRfdGlja3MoKSBmcm9tIE5GUyBjb2RlCiAgLSBBZGQgdmVyaWZpY2F0aW9uIG9mIFJQQyB0cmFuc2FjdGlvbiBJRAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMiBNYXIgMjAwNDoKICBjbGVhbnVwIGZvciBJREUgYW5kIFVTQiBkcml2ZXJzIGZvciBNUEM1MjAwCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDAxIE1hciAyMDA0OgogIE9jb3RlYToKICAtIEFkZCBJQk0gUFBDNDQwR1ggUmVmIFBsYXRmb3JtIHN1cHBvcnQgKE9jb3RlYSkKICAgIE9yaWdpbmFsIGNvZGUgYnkgUGF1bCBSZXlub2xkcyA8UGF1bFJleW5vbGRzQGxoc29sdXRpb25zLmNvbT4KICAgIEFkYXB0ZWQgdG8gVS1Cb290IGFuZCA0NDBHWCBwb3J0CiAgNDQwZ3hfZW5ldC5jOgogIC0gQWRkIGdyYWNpb3VzIGhhbmRsaW5nIG9mIGFsbCBFdGhlcm5ldCBQaW4gU2VsZWN0aW9ucyBmb3IgNDQwR1gKICAtIEFkZCBSR01JSSBzZWxlY3Rpb24gZm9yIENpY2FkYSBDSVM4MjAxIEdpZ2FiaXQgUEhZCiAgcHBjNDQwLmg6CiAgLSBBZGQgbmVlZGVkIGJpdCBkZWZpbml0aW9ucwogIC0gRml4IGZvcm1hdHRpbmcKCiogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMSBNYXIgMjAwNDoKICBBZGQgUFBDNDQwR1ggcHJiZHYwIGRpdmlkZXIgdG8gZml4IG1lbW9yeSBjbG9jayBjYWxjdWxhdGlvbi4KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyNyBGZWIgMjAwNAogIC0gYXZvaWQgcHJvYmxlbXMgZm9yIHRhcmdldHMgd2l0aG91dCBORlMgZG93bmxvYWQgc3VwcG9ydAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjcgRmViIDIwMDQ6CiAgLSBBZGRlZCBMQkE0OCBzdXBwb3J0IChDT05GSUdfTEJBNDggJiBDRkdfNjRCSVRfTEJBKQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgcHJpbnRpbmcgaW4gdnNwcmludGYgKENGR182NEJJVF9WU1BSSU5URikKICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHN0cnRvdWwgKENGR182NEJJVF9TVFJUT1VMKQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNyBGZWIgMjAwNDoKICBGaXggcmFycGJvb3Q6IGFkZCBhdXRvbG9hZCBieSBORlMKCiogUGF0Y2ggYnkgRGFuIEVpc2VuaHV0LCAyNiBGZWIgMjAwNDoKICBmaXggZmxhc2hfd3JpdGUgcmV0dXJuIHZhbHVlIGluIHNhdmVlbnYKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMwogIGV4cGFuZCBjb25maWcubWsgdG8gYXZvaWQgdHJpZ3JhcGggd2FybmluZ3Mgb24gTklPUwoKKiBSZW5hbWUgIkJNUzIwMDMiIGJvYXJkIGludG8gIkhNSTEwIgoKKiBTWDEgcGF0Y2hlczogdXNlICJzZXJpYWwjIiBmb3IgVVNCIHNlcmlhbCAjOyB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50CiAgc3RvcmFnZTsgYXV0by1zZXQgY29uc29sZSBvbiBVU0IgcG9ydCAodXNpbmcgcHJlYm9vdCBjb21tYW5kKQoKKiBBZGQgc3VwcG9ydCBmb3IgU1gxIG1vYmlsZSBwaG9uZTsgYWRkIHN1cHBvcnQgZm9yIFVTQi1iYXNlZCBjb25zb2xlCiAgKGVuYWJsZSB3aXRoICJzZXRlbnYgc3Rkb3V0IHVzYnR0eTsgc2V0ZW52IHN0ZGluIHVzYnR0eSIpCgoqIEZpeCBMT1dCT09UIGNvbmZpZ3VyYXRpb24gZm9yIE1QQzUyMDAgd2l0aCBERFIgbWVtb3J5CgoqIEZpeCBTRFJBTSB0aW1pbmdzIGZvciBMSVRFNTIwMCAvIEljZUN1YmUgYm9hcmQKCiogSGFuZGxlIEF1dGktTURJWCAvIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBJTkNBLUlQCgoqIEZpeCBVU0IgcHJvYmxlbXMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgMCBieXRlcwoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyNiBGZWIgMjAwNDoKICBGaXggYnJva2VuIGNvbXBpbGUgZm9yIFhQRURJVEUxSyB0YXJnZXQuCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjYgRmViIDIwMDQ6CiAgQnVnIGZpeCBmb3IgTkZTIGNvZGUgb24gTklPUyB0YXJnZXRzCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDI2IEZlYiAyMDA0OgogIEJyZWFrIHVwIFN5c3RlbUFDRSByZWFkcyBvZiBsYXJnZSBibG9jayBjb3VudHMKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjYgRmViIDIwMDQKICBhZGQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjYgRmViIDIwMDQ6CiAgYWRkIGF1dG9sb2FkIHZpYSBORlMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcwogIFVzZSBvZiBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gaW4gYm9hcmQuYyBjb25zaXN0ZW50IHdpdGggdXNlcwogIGVsc2V3aGVyZSBpbiB0aGUgc291cmNlLgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKICAtIFRpbWVvdXRzIGluIEZQR0EgY29kZSBzaG91bGQgYmUgYmFzZWQgb24gQ0ZHX0haCiAgLSBNaW5vciBjbGVhbnVwIGluIGNvZGUgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKICBDaGFuZ2VkICJEaXJlY3RvcnkgSGllcmFyY2h5IiBzZWN0aW9uIGluIFJFQURNRQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNSBGZWIgMjAwNDoKICBSZWR1Y2UgY29weSBjb3VudCBpbiBuZnNfcmVhZF9yZXBseSgpIG9mIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAyNCBGZWIgMjAwNDoKICBOUzk3NTAgRGV2Qm9hcmQgYWRkZWQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgRmViIDIwMDQKICBhZGQgVVNCIHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6CiAgLSBmaXggTUlJIGNvbW1hbmRzIHRvIHVzZSB2YWx1ZXMgZnJvbSBsYXN0IGNvbW1hbmQKCiogUGF0Y2ggYnkgVG9yc3RlbiBEZW1rZSwgMjQgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBlWGFsaW9uIHBsYXRmb3JtIChTUFNXLTgyNDAsIEYtMzAsIEYtMzAwKQoKKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMTkgRmViIDIwMDQ6CiAgRml4ZXMgZm9yIGZvciBPTUFQMTYxMCBib2FyZDoKICAtIHNoaWZ0IHNvbWUgSVJRIHNwZWNpZmljIGNvZGUgdG8gcGxhdGZvcm0uUyBmaWxlCiAgLSByZW1vdmUgZHVwbGljYXRld2F0Y2hkb2cgcmVzZXQgY29kZSBmcm9tIHN0YXJ0LlMKCiogTWFrZSBBdXRvLU1ESVggU3VwcG9ydCBjb25maWd1cmFibGUgb24gSU5DQS1JUCBib2FyZAoKKiBGaXggbGljZW5zZSBmb3IgbWtpbWFnZSB0b29sCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI0IEZlYiAyMDA0OgogIFVwZGF0ZSBOZXRCb290RmlsZVhmZXJTaXplIGluIE5GUyBjb2RlCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjQgRmViIDIwMDQ6CiAgZml4IHBhY2tldCBsZW5ndGggaW4gTkZTIGNvZGUKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5LCAyMiBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgTkZTIGZvciBmaWxlIGRvd25sb2FkCgoqIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMTcgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFMzQzQ0QjAgcHJvY2Vzc29yIGFuZCBEQVZFIEIyIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1JSSBjb21tYW5kcyBvbiBBVDkxUk05MjAwIGJvYXJkcwogIC0gc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgY29kZQoKKiBQYXRjaCBieSBQZXRlciBSeXNlciwgMjAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBYaWxpbnggTUwzMDAgcGxhdGZvcm0KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxNyBGZWIgMjAwNDoKICBGaXggd2F0Y2hkb2cgc3VwcG9ydCBmb3IgTklPUwoKKiBQYXRjaCBieSBKb3NoIEZyeW1hbiwgMTYgRmViIDIwMDQ6CiAgRml4IGJ5dGUtc3dhcHBpbmcgZm9yIGNmaV9mbGFzaC5jIGZvciBkaWZmZXJlbnQgYnVzIHdpZHRocwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgSmViIDIwMDQ6CiAgUmVtb3ZlIGR1cGxpY2F0ZSAiRlBHQSBTdXBwb3J0IiBub3RlcyBmcm9tIHRoZSBSRUFETUUgZmlsZQoKKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCAxNCBGZWIgMjAwNDoKICAtIHVwZGF0ZSBib2FyZC9lbWsgdHJlZTsgdXNlIGNvbW1vbiBmbGFzaCBkcml2ZXIKICAtIENvcnJlY3RlZCB0ZXN0ZWQgYml0cyBpbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBpbiBjcHUvbXBjNXh4eC90cmFwcy5jCiAgICBbYWRhcHRlZCBmb3Igb3RoZXIgUFBDIENQVXMgLS0gd2RdCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgTTQ4VDA4IG9uIHRoZSBFVkFMNTIwMCBib2FyZCBpbiBydGMvbWs0OHQ1OS5jCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMyBGZWIgMjAwNDoKICBDYWxsIHNob3dfYm9vdF9wcm9ncmVzcygpIHdoZW5ldmVyIFBPU1QgIkZBSUxFRCIgaXMgcHJpbnRlZC4KCiogUGF0Y2ggYnkgTmlzaGFudCBLYW1hdCwgMTMgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAxNjEwIEgyIEJvYXJkCiAgRml4ZXMgZm9yIGNwdS9hcm05MjZlanMvaW50ZXJydXB0LmMKCShiYXNlZCBvbiBSaWNoYXJkIFdvb2RydWZmJ3MgcGF0Y2ggZm9yIGFybTkyNSwgMTYgT2N0IDAzKQogIEZpeCBmb3IgYSB0aW1lciBidWcgaW4gT01BUDE2MTAgSW5ub3ZhdG9yCiAgQWRkIHN1cHBvcnQgZm9yIENTMCAoUk9NKS9DUzMgKEZsYXNoKSBib290IGluIE9NQVAxNjEwIElubm92YXRvciBhbmQgSDIKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDEyIEZlYiAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIE5JT1MgdGltZXIgd2l0aCB2YXJpYWJsZSBwZXJpb2QgcHJlbG9hZCBjb3VudGVyIHZhbHVlCiAgLSBwcmVwYXJlIFBPU1QgZnJhbWV3b3JrIHN1cHBvcnQgZm9yIE5JT1MgdGFyZ2V0cwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgRmViIDIwMDQ6CiAgYWRkIFBPU1Qgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBib2FyZAoKKiBQYXRjaCBieSBMYXVyZW50IE1vaGluLCAxMCBGZWIgMjAwNDoKICBGaXggYnVmZmVyIG92ZXJmbG93IGluIGNvbW1vbi91c2IuYwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjI3MiBib2FyZAoKKiBQYXRjaCBieSBUaG9tYXMgRWxzdGUsIDEwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBORVQrNTAgQ1BVIGFuZCBNb2RORVQ1MCBib2FyZAoKKiBQYXRjaCBieSBTYW0gU29uZywgMTAgRmViIDIwMDQ6CiAgRml4IHR5cG9zIGluIGNmaV9mbGFzaC5jCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTAgRmViIDIwMDQKICBGaXhlZCBsb25nIGRpciBlbnRyeSBzbG90IGlkIGNhbGN1bGF0aW9uIGluIGdldF92ZmF0bmFtZQoKKiBQYXRjaCBieSBSb2JpbiBHaWxrcywgMTAgRmViIDIwMDQ6CiAgYWRkICJpdGVzdCIgY29tbWFuZCAob3BlcmF0b3JzOiAtZXEsIC1uZSwgLWx0LCAtZ3QsIC1sZSwgLWdlLCA9PSwKICAhPSwgPD4sIDwsID4sIDw9LCA+PSkKCiogRml4IHByb2JsZW0gd2l0aCBzaWRlIGVmZmVjdHMgaW4gbWFjcm9zIGluIGluY2x1ZGUvdXNiLmgKCiogUGF0Y2ggYnkgRGF2aWQgQmVuc29uLCAxMyBOb3YgMjAwMzoKICBidWcgODQxMzU4IC0gZml4IFRGVFAgZG93bmxvYWQgc2l6ZSBsaW1pdAoKKiBGaXhpbmcgYnVnIDg1MDc2ODoKICBpbXByb3BlciBmbHVzaF9jYWNoZSgpIGluIGxvYWRfc2VyaWFsKCkKCiogRml4aW5nIGJ1ZyA4MzQ5NDM6CiAgTVBDODU0MCAtIG1pc3Npbmcgdm9sYXRpbGUgZGVjbGFyYXRpb25zCgoqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDA5IEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBYaWxpbnggU3lzdGVtQUNFIGNoaXA6CiAgLSBOZXcgZmlsZXMgY29tbW9uL2NtZF9hY2UuYyBhbmQgaW5jbHVkZS9zeXN0ZW1hY2UuaAogIC0gSG9vayBzeXN0ZW1hY2Ugc3VwcG9ydCBpbnRvIGNtZF9mYXQgYW5kIHRoZSBwYXJ0aXRpb24gbWFuYWdlcgoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKICBBZGQgYmlfb3BiZnJlcSAmIGJpX2lpY19mYXN0IHRvIDQ0MEdYIGJkX2luZm8gYXMgbmVlZGVkIGZvciBMaW51eAoKKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOSBGZWIgMjAwNDoKICBvIDQ0MEdYOgogICAgLSBGaXggUENJIEluZGlyZWN0IGFjY2VzcyBmb3IgdHlwZSAxIGNvbmZpZyBjeWNsZXMgd2l0aCBwcGM0NDAuCiAgICAtIEFkZCBwaHltb2RlIGZvciA0NDAgZW5ldAogICAgLSBmaXggcGNpIHByZSBpbml0CiAgbyBYUGVkaXRlMUs6CiAgICAtIENoYW5nZSBib2FyZF9wcmVfaW5pdCB0byBib2FyZF9lYXJseV9pbml0X2YKICAgIC0gQWRkIHVzZXIgZmxhc2ggdG8gYnVzIGNvbnRyb2xsZXIgc2V0dXAKICAgIC0gRml4IHBjaSBwcmUgaW5pdAogICAgLSBGaXggaXNfcGNpX2hvc3QgdG8gY2hlY2sgR1BJTyBmb3IgbW9uYXJjaCBiaXQKICAgIC0gRm9yY2UgeHBlZGl0ZTFrIHRvIHBjaSBjb252ZW50aW9uYWwgbW9kZSAodmlhICNkZWZpbmUgb3B0aW9uKQoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDQgRmViIDIwMDQ6CiAgLSBoYW5kbGUgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBpcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBQQ0kgc2NhbnMKICAgIG9uIDgyeHggcHJvY2Vzc29ycy4KICAtIGRlZmluZSB0aGUgcmVnaXN0ZXJzIHVzZWQgaW4gdGhlIElNTVIgYnkgdGhlIFBDSSBzdWJzeXN0ZW0uCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDAzIEZlYiAyMDA0OgogIGNwdS9tcGM1eHh4L3N0YXJ0LlM6IGNvcHkgTUJBUiBpbnRvIFNQUjMxMQoKKiBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDMgRmViIDIwMDQ6CiAgRml4IGNvcHkgJiBwYXN0ZSBlcnJvciBpbiBjcHUvbXBjODI2MC9wY2kuYwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjQgSmFuIDIwMDQ6CiAgRml4IHR5cG8gaW4gY3B1L21wYzV4eHgvcGNpX21wYzUyMDAuYwoKKiBBZGQgQXV0by1NRElYIHN1cHBvcnQgZm9yIElOQ0EtSVAKCiogU29tZSBjb2RlIGNsZWFudXAKCiogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDEwIEZlYiAyMDA0OgogIEZpeGVzIGZvciBDb2xkZmlyZSBwb3J0CgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTEgRmViIDIwMDQ6CiAgRml4IENGSSBmbGFzaCBkcml2ZXIgcHJvYmxlbXMKCiogTWFrZSBzdXJlIHRvIHVzZSBhIGJ1cyBjbG9jayBkaXZpZGVyIG9mIDIgb25seSB3aGVuIHJ1bm5pbmcgVFFNOHh4TQogIG1vZHVsZXMgYXQgQ1BVIGNsb2NrIGZyZXF1ZW5jaWVzIGFib3ZlIDY2IE1Iei4KCiogT3B0aW1pemUgZmxhc2ggcHJvZ3JhbW1pbmcgc3BlZWQgZm9yIExXTU9OIChieSBhbm90aGVyIDEwMCUgOi0pCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDMgRmViIDIwMDQ6CiAgLSBDaGFuZ2VkIHRoZSBpbmNvcnJlY3QgRkFUMTJCVUZTSVpFCiAgLSBkYXRhX2JlZ2luIGluIGZzZGF0YSBjYW4gYmUgbmVnYXRpdmUuIENoYW5nZWQgaXQgdG8gYmUgc2hvcnQuCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzMCBKYW4gMjAwNDoKICAxOiAtIGJvYXJkL2FsdGVyYS9jb21tb24vZmxhc2guYzpmbGFzaF9lcmFzZSgpOgogICAgICAgbyBhbGxvdyBpbnRlcnJ1cHRzIGJlZm9yIGdldF90aW1lcigpIGNhbGwKICAgICAgIG8gY2hlY2stdXAgZWFjaCBlcmFzZWQgc2VjdG9yIGFuZCBhdm9pZCB1bmV4cGVjdGVkIHRpbWVvdXRzCiAgICAgLSBib2FyZC9hbHRlcmEvZGsxYzIwL2RrMXMxMC5jOmJvYXJkX2Vhcmx5X2luaXRfZigpOgogICAgICAgbyBlbmNsb3NlIHNldmVuc2VnX3NldCgpIGluIGNwcCBjb25kaXRpb24KICAgICAtIHJlbW92ZSB0aGUgQVNNSSBjb25maWd1cmF0aW9uIGZvciBESzFTMTBfc3RhbmRhcmRfMzIgKG5ldmVyIHByZXNlbnQpCiAgICAgLSBmaXggc29tZSB0eXBlZCBpbiBtaXN0YWtlcyBpbiB0aGUgTklPUyBkb2N1bWVudGF0aW9uCiAgMjogLSBzcGxpdCBESzFDMjAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgogICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCiAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMUMyMC5oCiAgMzogLSBzcGxpdCBESzFTMTAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgogICAgICAgbyB0d28gbmV3IGZpbGVzIGZvciBlYWNoIE5JT1MgQ1BVIGRlc2NyaXB0aW9uCiAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMVMxMC5oCiAgNDogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdHJvbml4IExpbnV4IERldmVsb3BtZW50IEtpdAogICAgICAgTklPUyBDUFUgY29uZmlndXJhdGlvbiBhdCB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQogIDU6IC0gQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgICAgICBTdHJhdGl4IEVkaXRpb24gKERLLTFTMTApCiAgNjogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgU2VyaWFsIFBlcmlwaGFyZWwgSW50ZXJmYWNlIChTUEkpCiAgICAgICAobWFzdGVyIG9ubHkpCiAgNzogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbW1vbiBVLUJvb3QgU1BJIGZyYW1ld29yayBhdAogICAgICAgUlRDIGRyaXZlciBEUzEzMDYKCiogUGF0Y2ggYnkgUmFodWwgU2hhbmJoYWcsIDI4IEphbiAyMDA0OgogIEZpeCBmbGFzaCBwcm90ZWN0aW9uL2xvY2tpbmcgaGFuZGxpbmcgZm9yIE9NQVAxNjEwIGlubm92YXRvciBib2FyZC4KCiogUGF0Y2ggYnkgUm9sZiBQZXVrZXJ0LCAyOCBKYW4gMjAwNDoKICBmaXggZmxhc2ggd3JpdGUgcHJvYmxlbXMgb24gQ1NCMjI2IGJvYXJkICh3cml0ZSB3aXRoIDMyIGJpdCBidXMgd2lkdGgpCgoqIFBhdGNoZXMgYnkgTWFyayBKb25hcywgMTYgSmFuIDIwMDQ6CiAgLSBmaXggcm91bmRpbmcgZXJyb3Igd2hlbiBjYWxjdWxhdGluZyBiYXVkcmF0ZXMgZm9yIE1QQzUyMDAgUFNDcwogIC0gbWFrZSBzdXJlIENGR19SQU1CT09UIGFuZCBDRkdfTE9XQk9PVCBhcmUgbm90IGVuYWJsZWQgYXQgdGhlIHNhbWUKICAgIHRpbWUgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNiBKYW4gMjAwNDoKICBBbGxvdyBiemlwMiBjb21wcmVzc2lvbiBmb3Igc21hbGwgbWVtb3J5IGZvb3RwcmludCBib2FyZHMKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAyMSBKYW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQ0ZJIGZsYXNoIGRyaXZlciBmb3IgYm90aCB0aGUgSW50ZWwgYW5kIHRoZSBBTUQKICBjb21tYW5kIHNldHMuCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIwIEphbiAyMDA0OgogIEZpeCBwY2kgYnJpZGdlIGF1dG8gZW51bWVyYXRpb24gb2Ygc2libGluZyBwMnAgYnJpZGdlcy4KCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTIgSmFuIDIwMDQ6CiAgQWRkIHNvbWUgZGVsYXlzIGFzIG5lZWRlZCBmb3IgSW50ZWwgTFhUOTcxQSBQSFkgc3VwcG9ydAoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMDkgSmFuIDIwMDQ6CiAgLSBhdm9pZCB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgYHBpb3AnIGluIGJvYXJkL2FsdGVyYS9jb21tb24vc2V2ZW5zZWcuYwogIC0gbWFrZSBESzFDMjAgYm9hcmQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIEFTTUkgY29uZm9ybSB0bwogICAgZG9jdW1lbnRhdGlvbgoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOSBKYW4gMjAwNDoKCiAgQVJNIG1lbW9yeSBsYXlvdXQgZml4ZXM6IHRoZSBhYm9ydC1zdGFjayBpcyBub3cgc2V0IHVwIGluIHRoZQogIGNvcnJlY3QgUkFNIGFyZWEsIGFuZCB0aGUgQlNTIGlzIHplcm9lZCBvdXQgYXMgaXQgc2hvdWxkIGJlLgoKICBGdXJ0aGVybW9yZSwgdGhlIG1hZ2ljIHZhcmlhYmxlcyAnYXJtYm9vdF9lbmQnIGFuZCAnYXJtYm9vdF9lbmRfZGF0YScKICBvZiB0aGUgbGlua2VyIHNjcmlwdHMgYXJlIHJlcGxhY2VkIGJ5ICdfX2Jzc19zdGFydCcgYW5kICdfZW5kJywKICByZXNwLiwgd2hpY2ggaXMgYSBmdXJ0aGVyIHN0ZXAgdG8gZWxpbWluYXRlIHVubmVjZXNzYXJ5IGRpZmZlcmVuY2VzCiAgYmV0d2VlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIENQVSBhcmNoaXRlY3R1cmVzLgoKKiBQYXRjaCBieSBsaWFuZyBhIGxlaSwgOSBKYW4gMjAwNDoKICBGaXggSW50ZWwgMjhGMTI4SjMgSUQgaW4gaW5jbHVkZS9mbGFzaC5oCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA5IEphbiAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciBUQjAyMjkgYm9hcmQgKE5FQyBWUjQxMzEgTUlQUyBwcm9jZXNzb3IpCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgRGVjIDIwMDM6CiAgY2hhbmdlZCBleHRlcm4gX19pbmxpbmVfXyBpbnRvIHN0YXRpYyBfX2lubGluZV9fIGluCiAgaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDMwIERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBJQk0gUFBDNDQwR1guIE11bHRpcGxlIEVNQUMgRXRoZXJuZXQgZGV2aWNlcywKICBzZWxlY3QgTURJIHBvcnQgYmFzZWQgb24gZW5hYmxlZCBFTUFDIGRldmljZS4KICBBZGQgc3VwcG9ydCBmb3IgWEVTIEluYyA8aHR0cDovL3d3dy54ZXMtaW5jLmNvbT4gWFBlZGl0ZTEwMDAgNDQwR1gKICBiYXNlIFByUE1DIGJvYXJkLgoKKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDE1IERlYyAyMDAzOgogIG1hZGUgQ09ORklHX1NJTEVOVF9DT05TT0xFIHVzYWJsZSBvbiBhbGwgYXJjaGl0ZWN0dXJlcwoKKiBEaXNhYmxlIGRhdGUgY29tbWFuZCBvbiBUUU04NjZNIC0gdGhlcmUgaXMgbm8gUlRDIG9uIE1QQzg2NgoKKiBGaXggdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgZm9yIGxvdyBDUFUgY2xvY2tzCgoqIEltcGxlbWVudCBhZGFwdGl2ZSBTRFJBTSB0aW1pbmcgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBhY3R1YWwgQ1BVCiAgY2xvY2sgZnJlcXVlbmN5IGZvciBJTkNBLUlQOyBmaXggcHJvYmxlbSB3aXRoIGJvYXJkIGhhbmdpbmcgd2hlbgogIHN3aXRjaGluZyBmcm9tIDE1ME1IeiB0byAxMDBNSHoKCiogQWRkIFBDTUNJQSBDUyBzdXBwb3J0IGZvciBCTVMyMDAzIGJvYXJkCgoqIEFkZCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyAoc28gZmFyIG9ubHkgVFFNODY2TSk6CiAgc2VlIGRvYy9SRUFETUUuTVBDODY2IGZvciBkZXRhaWxzOwogIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciAiU0lVNCIgYW5kICJTSVU5IiBzaWxpY29uIGJ1Z3Mgb24gTVBDODY2OwogIGNhbGN1bGF0ZSBDUFUgY2xvY2sgZnJlcXVlbmN5IGZyb20gUExMIHJlZ2lzdGVyIHZhbHVlcy4KCiogQWRkIHN1cHBvcnQgZm9yIDEyOCBNQiBSQU0gb24gVFFNOHh4TC9NIG1vZHVsZXMKCiogRml4IFBTLzIga2V5Ym9hcmQgcHJvYmxlbSBjYXVzZWQgYnkgc3RhdGljYWxseSBpbml0aWFsaXplZCB2YXJpYWJsZQogIHBvaW50aW5nIHRvIGEgbG9jYXRpb24gaW4gZmxhc2gKCiogRml4IElOQ0EtSVAgY2xvY2sgY2FsY3VsYXRpb246IDQwMC8zID0gMTMzLjMgTUh6LCBub3QgMTMwLgoKKiBUaGUgUFMvMiBtdXggb24gdGhlIEJNUzIwMDMgYm9hcmQgbmVlZHMgNDUwIG1zIGFmdGVyIHBvd2VyIG9uCiAgYmVmb3JlIHdlIGNhbiBhY2Nlc3MgaXQ7IGFkZCBkZWxheSBpbiBjYXNlIHdlIGFyZSBmYXN0ZXIgKHdpdGggbm8KICBDRiBjYXJkIGluc2VydGVkKQoKKiBDbGVhbnVwIG9mIHNvbWUgaW5pdCBmdW5jdGlvbnMKCiogTWFrZSBzdXJlIFNDQyBFdGhlcm5ldCBpcyBhbHdheXMgc3RvcHBlZCBieSB0aGUgdGltZSB3ZSBib290IExpbnV4CiAgdG8gYXZvaWQgTGludXggY3Jhc2hlcyBieSBlYXJseSBwYWNrZXRzIGNvbWluZyBpbi4KCiogQWNjZWxlcmF0ZSBmbGFzaCBhY2Nlc3NlcyBvbiBMV01PTiBib2FyZCBieSB1c2luZyBidWZmZXJlZCB3cml0ZXMKCiogRml4IHR5cG8gaW4gTWFrZWZpbGU7CiAgZml4IHByb2JsZW0gd2l0aCBQQVJUTlVNIGRldGVjdGlvbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDkgSmFuIDIwMDQ6CiAgLSBhZGQgUlRDIHN1cHBvcnQgZm9yIE1QQzUyMDAgYmFzZWQgYm9hcmRzIChyZXF1aXJlcyBSVENfWFRBTCkKCiogQWRkIHN1cHBvcnQgZm9yIElERSBMRUQgb24gQk1TMjAwMyBib2FyZAogIChleGNsdXNpdmUgd2l0aCBzdGF0dXMgTEVEISkKCiogQWRkIHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgKHVzZWQgd2l0aCBQUy8yIG11bHRpcGxleG9yIG9uCiAgQk1TMjAwMyBib2FyZCkKCiogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgNCBKYW4gMjAwNCArIDcgSmFuIDIwMDQ6CiAgQWRkIGNvbW1vbiBmaWxlcyBmb3IgImVtayIgYm9hcmRzCgoqIEFkZCBhIGNvbW1vbiBnZXRfcmFtX3NpemUoKSBmdW5jdGlvbiBhbmQgbW9kaWZ5IHRoZSB0aGUKICBib2FyZC1zcGVjaWZpYyBmaWxlcyB0byBpbnZva2UgdGhhdCBjb21tb24gaW1wbGVtZW50YXRpb24uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBTZXQgZGVmYXVsdCBjbG9jayBmb3IgSU5DQS1JUCB0byAxNTAgTUh6CgoqIE1ha2UgQk1TMjAwMyB1c2UgYSBzZXBhcmF0ZSBjb25maWcgZmlsZSB0byBhdm9pZCAjaWZkZWYgbWVzczsKICBhZGQgSTJDIHN1cHBvcnQ7IGFkZCBzdXBwb3J0IGZvciBEUzEzMzcgUlRDCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCAgZm9yIEJNUzIwMDMgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIHN0YXR1cyBMRUQgb24gQk1TMjAwMyBib2FyZAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAyIEphbiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBBY3RpdmUgU2VyaWFsIE1lbW9yeSBJbnRlcmZhY2UgKEFTTUkpCiAgb24gQ3ljbG9uZSBkZXZpY2VzCgoqIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDE2IERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciB0aGUgUFBDaGFtZWxlb24gTUUgYW5kIEhJIG1vZHVsZXMKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIERVRVQgQURTIGJvYXJkIChNUEM4N3gvODh4KQoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IERlYyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBjcmFtZnMgKHVzZXMgSkZGUzIgY29tbWFuZCBpbnRlcmZhY2UpCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMzoKICAtIG1vcmUgZG9jdW1lbnRhdGlvbiBmb3IgTklPUyBwb3J0CiAgLSBuZXcgc3RydWN0IG5pb3NfcGlvX3QsIHN0cnVjdCBuaW9zX3NwaV90CiAgLSBSZWNvbmZpZ3VyYXRpb24gZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMUMyMDoKICAgIG8gbW92ZSBib2FyZCByZWxhdGVkIGNvZGUgZnJvbSBib2FyZC9kazFjMjAKICAgICAgdG8gYm9hcmQvYWx0ZXJhL2RrMWMyMAogICAgbyBjcmVhdGUgYSBuZXcgY29tbW9uIHNvdXJjZSBwYXRoIGJvYXJkL2FsdGVyYS9jb21tb24KICAgICAgYW5kIG1vdmUgZ2VuZXJpYyBmbGFzaCBhY2Nlc3Mgc3R1ZmYgaW50byBpdAogICAgbyBjaGFuZ2UvZXhwYW5kIGNvbmZpZ3VyYXRpb24gZmlsZSBESzFDMjAuaAogIC0gQWRkIHN1cHBvcnQgZm9yIE5JT1MgRGV2ZWxvcG1lbnQgS2l0IERLMVMxMAogIC0gQWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgTklPUyBzeXN0ZW1zCiAgLSBBZGQgZHVhbCA3LXNlZ21lbnQgTEVEIHN1cHBvcnQgZm9yIEFsdGVyYSBOSU9TIERldktpdHMKCiogUGF0Y2ggYnkgUm9uZW4gU2hpdHJpdCwgMTAgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIERCNjQzNjAgLyBEQjY0NDYwIGRldmVsb3BtZW50IGJvYXJkcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMCBEZWMgMjAwMzoKICBmaXggZGVwZW5kZW5jeSBwcm9ibGVtIGluIGV4YW1wbGVzL01ha2VmaWxlCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCA4IERlYyAyMDAzCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFBBVEkgYm9hcmQgKE1QQzU1NSkKICAtIGFkZCBTUEkgc3VwcG9ydCBmb3IgdGhlIE1QQzV4eAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOCBEZWMgMjAwMzoKICBhZGQgY29uZmlndXJhdGlvbiBvcHRpb25zIENPTkZJR19TRVJJQUxfVEFHIGFuZCBDT05GSUdfUkVWSVNJT05fVEFHCiAgdG8gcGFzcyBBVEFHX1NFUklBTCBhbmQgQVRBR19SRVZJU0lPTiwgcmVzcC4sIHRvIHRoZSBBUk0gdGFyZ2V0OwogIGNsZWFudXAgc29tZSByZWR1bmRhbmQgI2RlZmluZXMKCiogUGF0Y2ggYnkgQW5kcukgU2Nod2FyeiwgOCBEZWMgMjAwMzoKICBmaXhlcyBmb3IgRGF2aWNvbSBETTkxMDJBIEV0aGVybmV0IENoaXAgKCNkZWZpbmUgQ09ORklHX1RVTElQX0ZJWF9EQVZJQ09NKToKICAtIFRYIGFuZCBSWCBkZXNrcmlwdG9ycyBtdXN0IGJlIHF1YWQtd29yZCBhbGlnbmVkCiAgLSBkb2VzIG5vdCB3b3JrIHdpdGggb25seSBvbmUgVFggZGVza3JpcHRvcgogIC0gc3RhbmRhcmQgcmVzZXQgbWV0aG9kIGRvZXMgbm90IHdvcmsKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggRGVjIDIwMDM6CiAgYWRkIFJUTDgxMzkgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoZXMgYnkgRWQgT2tlcnNvbiwgMDcgRGVjIDIwMDM6CiAgLSBmaXggZXRoZXJuZXQgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuCiAgLSBleHRlbmQgbWVtc2V0dXAuUyBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIEJFIGFuZCBMRSBtb2RlcwoKKiBNaW5vciBjb2RlIGNsZWFudXAgKGNvZGluZyBzdHlsZSkKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDMwIERlYyAyMDAzOgogIC0gY3B1L21wYzV4eHgvZmVjLmM6IGFkZGVkIENPTkZJR19QSFlfQUREUiwgYWRkZWQgQ09ORklHX1BIWV9UWVBFLAogIC0gYWRkZWQgQ09ORklHX1BIWV9BRERSIHRvIGluY2x1ZGUvY29uZmlncy9JY2VDdWJlLmgsCiAgLSB0dXJuZWQgZGVidWcgcHJpbnQgb2YgUEhZIHJlZ2lzdGVycyBpbnRvIGEgZnVuY3Rpb24gKGNhbGxlZCBpbiB0d28gcGxhY2VzKQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgRU1LIE1QQzUyMDAgYmFzZWQgbW9kdWxlcwoKKiBGaXggTVBDOHh4IFBMUFJDUl9NRkRfU0hJRlQgdHlwbwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODY2TSBtb2R1bGVzCgoqIEZpeGVzIGZvciBUUU04NTVNIHdpdGggNCBNQiBmbGFzaCAoQW0yOURMMTYzID0gX25vXyBtaXJyb3IgYml0IGZsYXNoKQoKKiBGaXggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI4IERlYyAyMDAzOgogIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmQKCiogTWFrZSBDUFUgY2xvY2sgb24gSUNBLUlQIGJvYXJkIGNvbnRyb2xsYWJsZSBieSBhICJjcHVjbGsiCiAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggY2FuIHNldCB0byAiMTAwIiwgIjEzMyIsIG9yICIxNTAiLiBUaGUKICBDUFUgY2xvY2sgd2lsbCBiZSBjb25maWd1cmVkIGFjY29yZGluZ2x5IHVwb24gbmV4dCByZWJvb3QuIE90aGVyCiAgdmFsdWVzIGFyZSBpZ25vcmVkLiBJbiBjYXNlIG9mIGFuIGludmFsaWQgb3IgdW5kZWZpbmVkICJjcHVjbGsiCiAgdmFsdWUsIHRoZSBjb21waWxlLXRpbWUgZGVmYXVsdCBDUFUgY2xvY2sgc3BlZWQgd2lsbCBiZSB1c2VkLgoKKiBFbmFibGUgUXVhZC1VQVJUIG9uIEJNUzIwMDMgYm9hcmQgKGluaXRpYWxpemUgdGhlIFBDTUNJQSBtZW1vcnkKICB3aW5kb3cgdGhhdCBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgVUFSVCByZWdpc3RlcnMgYnkgdGhlIExpbnV4IGRyaXZlcikKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDIwIERlYyAyMDAzOgogIEZpeCBjbG9jayBjYWxjdWxhdGlvbiBmb3IgdGhlIE1QQzUyMDAgZm9yIGhpZ2hlciBjbG9jayBmcmVxdWVuY2llcwogIChhYm92ZSAyKiozMiAvIDEwID0gNDI5LjUgTUh6KS4KCiogRml4IENPTkZJR19QTExfUENJX1RPX01FTV9NVUxUSVBMSUVSIGRpdmlkZXIgZXJyb3IgaW4gU1A4MjQwIGNvbmZpZ3VyYXRpb24KCiogRml4IEljZUN1YmUgQ0xLSU4gY29uZmlndXJhdGlvbiAoaXQncyAzMy4wMDAwMDBNSHopCgoqIEFkZCBuZXcgY29uZmlndXJhdGlvbiBmb3IgSWNlQ3ViZSBib2FyZCB3aXRoIEREUiBtZW1vcnkKCiogVXBkYXRlIFRSQUIgbWVtb3J5IGNvbmZpZ3VyYXRpb25zCgoqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAwOSBEZWMgMjAwMzoKICAtIEJVQklOR0E0MDVFUDogY2hhbmdlZCBmbGFzaCBkcml2ZXIgdG8gcHJvdGVjdCB0b3Agc2VjdG9yIGNvbnRhaW5pbmcKICAgIGZpcnN0IGluc3RydWN0aW9uLgogIC0gQlVCSU5HQTQwNUVQOiBjb25maWd1cmVkICJlZXByb20iIGNvbW1hbmQgdG8gYWNjZXNzIGJvb3QgY29uZmlnIEVFUFJPTS4KICAtIEJVQklOR0E0MDVFUDogZml4ZWQgUExMIGluaXQgKGluaXQgY2hpcCBzZWxlY3RzIGJlZm9yZSBGUEdBL05WUkFNIGFjY2VzcykuCiAgLSA0MDVFUDogZml4ZWQgU1BELWJhc2VkIFNEUkFNIGluaXQgKG9ubHkgdXNlIGJhbmtzIDAgYW5kIDEpLgogIC0gNDA1RVA6IGFkZGVkL2ZpeGVkIHN1cHBvcnQgZm9yICJyZWdpbmZvIiBjb21tYW5kLgogIC0gNHh4OiByZW1vdmVkIHNwdXJpb3VzIE1JSSBlcnJvciBtZXNzYWdlcyBvbiAibWlpIGluZm8iIGNvbW1hbmQuCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBDb2xkZmlyZSBDUFUKICBhZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTTUyNzJDMyBhbmQgTTUyODJFVkIgYm9hcmRzCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI0IE5vdiAyMDAzOgogIC0gYWRkIGEgcmV0dXJuIHZhbHVlIGZvciB0aGUgZnBnYSBjb21tYW5kCiAgLSBhZGQgaWRlX3ByZWluaXQoKSBmdW5jdGlvbiBjYWxsZWQgaW4gaWRlX2luaXQgaWYgQ09ORklHX0lERV9QUkVJTklUCiAgICBpcyBkZWZpbmVkLiBJZiBpZGVfcHJlaW5pdCBmYWlscywgaWRlX2luaXQgaXMgYWJvcnRlZC4KICAtIGZpeCBhbiBlbmRpYW5lc3MgcHJvYmxlbSBpbiBmYXQuaAoKKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDA1IERlYyAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTTk1DJ3MgUVM4NTAvUVM4MjMvUVM4NjBUIGJvYXJkcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAzIERlYyAyMDAzOgogICJyZXZpdmUiIFUtQm9vdCBzdXBwb3J0IGZvciBvbGQgTW90b3JvbGEgTVBDODYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IENhbShpbG8/KSwgMDMgRGVjIDIwMDM6CiAgbWFrZSBleGFtcGxlcyBidWlsZCBldmVuIHdpdGggYnJva2VuIE1vbnRhdmlzdGEgb2JqY29weQoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjcgTm92IDIwMDM6CiAgZml4IGNvbnZlcnNpb24gcHJvYmxlbSB3aXRoICJib290cmV0cnkiIGV2aXJvbm1lbnQgdmFyaWFibGUKCiogUGF0Y2ggYnkgQW5kcmUgU2Nod2FyeiwgMjQgTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIG12Ymx1ZSAobXZCbHVlTFlOWCBhbmQgbXZCbHVlQk9YKSBib2FyZHMKCiogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE5vdiAyMDAzOgogIHNldCBaTUlJIGJyaWRnZSBzcGVlZCBvbiA0NDAKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgTm92IDIwMDM6CiAgRml4IG1pc21hdGNoZWQgI2lmZGVmIC8gI2VuZGlmIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxNCBOb3YgMjAwMzoKICAtIGJvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYwogICAgKiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgQlpJUDIgY29tcHJlc3NlZCBpbWFnZXMKICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKICAtIGJvYXJkL21wbC9jb21tb24vZmxhc2guYwogICAgKiByZXBvcnQgY29ycmVjdCBlcnJvcnMgdG8gdXBwZXIgbGF5ZXJzCiAgICAqIGNoZWNrIHRoZSBlcmFzZSBmYWlsIGFuZCBWUFAgbG93IGJpdHMgaW4gc3RhdHVzIHJlZwogIC0gYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCiAgLSBib2FyZC9tcGwvdmNtYTkvZmxhc2guYwogICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQogIC0gY29tbW9uL2NtZF91c2IuYwogICAgKiBmaXggdHlwbyBpbiBjb21tZW50CiAgLSBjcHUvYXJtOTIwdC91c2Jfb2hjaS5jCiAgICAqIHN1cHBvcnQgZm9yIFMzQzI0MTAgaXMgbWlzc2luZyBpbiAjaWYgbGluZQogIC0gZHJpdmVycy9jczg5MDAuYwogICAgKiByZWluaXQgc29tZSByZWdpc3RlcnMgaW4gY2FzZSBvZiBlcnJvciAoY2FibGUgbWlzc2luZywgLi4uKQogIC0gZnMvZmF0L2ZhdC5jCiAgICAqIHN1cHBvcnQgZm9yIFVTQi9NTUMgZGV2aWNlcyBpcyBtaXNzaW5nIGluICNpZiBsaW5lCiAgLSBpbmNsdWRlL2NvbmZpZ3MvTUlQNDA1LmgKICAtIGluY2x1ZGUvY29uZmlncy9QSVA0MDUuaAogICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAogICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAogIC0gaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKICAgICogZW5hYmxlIFVTQiBzdXBwb3J0CiAgLSBsaWJfYXJtL2FybWxpbnV4LmMKICAgICogY2hhbmdlIGNhbGxpbmcgY29udmVudGlvbiBvZiBBUk0gTGludXgga2VybmVsIGFzCiAgICAgIGRlc2NyaWJlZCBvbiBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL2Jvb3RpbmcucGhwCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6CiAgU3BsaXQgZGJhdTF4MDAgaW50byBkYmF1MTAwMCwgZGJhdTExMDAgYW5kIGRiYXUxNTAwIGNvbmZpZ3MgdG8KICBzdXBwb3J0IGFsbCB0aGVzZSBBTUQgYm9hcmRzLgoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgogIFdvcmthcm91bmQgZm9yIG1pcHMgYXUxeDAwIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3NlcyAodGhlIGF1MXgwMAogIHVzZXMgYSAzNiBiaXQgYnVzIGludGVybmFsbHkgYW5kIGNhbm5vdCBhY2Nlc3MgcGh5c2ljYWwgbWVtb3J5CiAgZGlyZWN0bHkuIFVzZSB0aGUgdW5jYWNoZWQgU0RSQU0gYWRkcmVzcyBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbAogIG9uZS4pCgoqIFBhdGNoIGJ5IFh1ZSBMaWdvbmcgKEpvZSksIDEzIE5vdiAyMDAzOgogIGFkZCBSZWFsdGVrIDgwMTkgZXRoZXJuZXQgZHJpdmVyCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIE5vdiAyMDAzOgogIE1QQzgyNnhBRFMvUFEyRkFEUyAgY2xlYW51cAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxMiBOb3YgMjAwMzoKICBVcGRhdGUgUkVBRE1FIHRvIG1hcmsgdGhlIFBPUlRJTyBjb21tYW5kcyBub24tc3RhbmRhcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMTIgTm92IDIwMDM6CiAgdXBkYXRlIGZvciBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIGRldmVsb3BtZW50IGtpdDoKICAtIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBEYXRhRmxhc2gKICAtIEF0bWVsIERhdGFGbGFzaCBBVDQ1REIxMjgyIHN1cHBvcnQKCiogUGF0Y2ggYnkgSmVmZiBDYXJyLCAxMSBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgbmV3IHZlcnNpb24gb2YgODI3MCBwcm9jZXNzb3JzCgoqIFBhdGNoZXMgYnkgR2VvcmdlIEcuIERhdmlzLCAwNSBOb3YgMjAwMzoKICAtIG9ubHkgcGFzcyB0aGUgQVJNIGxpbnV4IGluaXRyZCB0YWcgdG8gdGhlIGtlcm5lbCB3aGVuIGFuIGluaXRyZAogICAgaXMgYWN0dWFsbHkgcHJlc2VudAogIC0gdXBkYXRlIG9tYXAxNTEwaW5uIGNvbmZpZ3VyYXRpb24gZmlsZQoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMyBOb3YgMjAwMzoKICAtIG1vcmUgZW5kaWFuZXNzIGZpeGVzIGZvciBMQU45MUMxMTEgZHJpdmVyCiAgLSBDRkdfSFogY29uZmlndXJhdGlvbiBwYXRjaCBmb3IgTklPUyBDeWNsb25lIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CiAgZml4IFBIWV9JTlRfUkVHIHZzLiBQSFlfTUFTS19SRUcgYnVnIGluIGRyaXZlcnMvc21jOTExMTEuYwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMCBPY3QgMjAwMzoKICAtIG1ha2UgIm1paSBpbmZvIDxhZGRyPiIgc2hvdyBpbmZvciBmb3IgUEhZIGF0ICJhZGRyIiBvbmx5CiAgLSBFbmRpYW4gZml4IGZvciBtaWlwaHlfaW5mbygpCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTkgU2VwIDIwMDM6CiAgTW92ZSBtb3N0IG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgcmVsYXRlZCBQUEMgY29kZSB0byBwcGNfbGliL2ludGVycnVwdHMuYwoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKICBCcmluZyBBUk0gbWVtb3J5IGxheW91dCBpbiBzeW5jIHdpdGggdGhlIGRvY3VtZW50YXRpb246CiAgc3RhY2sgYW5kIG1hbGxvYy1oZWFwIGFyZSBub3cgbG9jYXRlZCBfYmVsb3dfIHRoZSBVLUJvb3QgY29kZQoKKiBBY2NlbGVyYXRlIGJvb3Rpbmcgb24gVFJBQiBib2FyZDogcmVhZCBhbmQgY2hlY2sgIGF1dG91cGRhdGUJaW1hZ2UKICBoZWFkZXJzIGZpcnN0IGluc3RlYWQgb2YgYWx3YXlzIHJlYWRpbmcgdGhlIHdob2xlIGltYWdlcy4KCiogRml4IHR5cGUgaW4gTVBDNVhYWCBjb2RlIChwb2ludGVkIG91dCBieSBWaWN0b3IgV3JlbikKCiogRW5hYmxlZCBwYXNzd29yZCBjaGVjayBvbiBSTVUgYm9hcmQKCiogRml4IGNvbmZpZ3VyYXRpb24gcHJvYmxlbSB3aXRoIEljZUN1YmUgaW4gTE9XQk9PVCBjb25maWd1cmF0aW9uOgogIGVudnJpb25tZW50IGdvdCBlbWJlZGRlZCwgY29ycnVwdGluZyB0aGUgaW1hZ2UgbGF5b3V0LgoKKiBGaXggTkVDIGRpc3BsYXkgbmFtZXMgKGl0J3MgNjQ0MCBbZm9yIDY0MHg0ODBdLCBub3QgNjY0MCkuCgoqIEFkZGVkIEJNUzIwMDMgYm9hcmQKICBhZGQgc3VwcG9ydCBmb3IgTkVDIE5MNjQ0OEJDMzMtNTQuIDEwLjQiLCA2NDB4NDgwIFRGVCBkaXNwbGF5CgoqIEZpeCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQgKG11c3QgdXNlIFVubG9jayBCeXBhc3MgUmVzZXQKICBjb21tYW5kIHRvIGV4aXQgVW5sb2NrIEJ5cGFzcyBNb2RlKTsgYWRqdXN0IHRpbWluZ3MgZm9yIGZsYXNoLCBTUkFNCiAgYW5kIENQTEQKCiogVXNlICItZlBJQyIgaW5zdGVhZCBvZiAiLW1yZWxvY2F0YWJsZSIgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoCiAgcmVjZW50IHRvb2xzCgoqIEFkZCBjaGVja3N1bSB2ZXJpZmljYXRpb24gdG8gJ2ltbHMnIGNvbW1hbmQKCiogQWRkIGJkX2luZm8gZmllbGRzIG5lZWRlZCBmb3IgNHh4IExpbnV4IEkyQyBkcml2ZXIKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgNCBOb3YuIDIwMDM6CiAgRml4IGVycm9yIGluIGNtZF92ZmQuYyAoVFJBQiBib2FyZDogInZmZCAvMSIgc2hvd3Mgbm93IG9ubHkgb25lIEJpdG1hcCkKCiogUHJpbnQgdXNlZCBuZXR3b3JrIGludGVyZmFjZSB3aGVuIENPTkZJR19ORVRfTVVMVEkgaXMgc2V0CgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE9jdCAyMDAzOgogIEFkZCBsb3cgYm9vdCBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIEZpeCBwcm9ibGVtIHdpdGggZHVhbCBQQ01DSUEgc3VwcG9ydCAoTlNDVSkKCiogRml4IE1QQzUyMDAgSTJDIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggcGFyYW1ldGVyIHBhc3NpbmcgdG8gc3RhbmRhbG9uZSBpbWFnZXMgd2l0aCBib290bSBjb21tYW5kCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAzMCBPY3QgMjAwMzoKICBGaXggYnVpbGQgZXJyb3JzIGZvciBpeGRwNDI1IGJvYXJkCgoqIFBhdGNoIGJ5IERhdmlkIE0uIEhvcm4sIDI5IE9jdCAyMDAzOgogIEZpeGVzIHRvIGJ1aWxkIHVuZGVyIENZR1dJTgoKKiBHZXQgSWNlQ3ViZSBNR1Q1MTAwIHdvcmtpbmcgKGFnYWluKQoKKiBGaXggcHJvYmxlbXMgaW4gbWVtb3J5IHRlc3Qgb24gc29tZSBib2FyZHMgKHdoaWNoIHdhcyBub3QKICBub24tZGVzdHJ1Y3RpdmUgYXMgaW50ZW5kZWQpCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAyOCBPY3QgMjAwMzoKICBDaGFuZ2UgZnMvZmF0L2ZhdC5jIHRvIHB1dCBJL08gYnVmZmVycyBpbiBCU1MgaW5zdGVhZCBvbiB0aGUgc3RhY2sKICB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IG9uIEFSTSBzeXN0ZW1zCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CiAgZml4IGluaXQgc2VxdWVuY2UgZXJyb3IgZm9yIE5JT1MgcG9ydAoKKiBBbGxvdyBsb3dlcmNhc2Ugc3BlbGxpbmcgZm9yIEljZUN1YmVfNTIwMDsgc3VwcG9ydCBNUEM1MjAwTElURSBuYW1lCgoqIEFkZCBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSB0byBUUkFCIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgWGlhbyBYaWFuZ2h1YSwgMjMgT2N0IDIwMDM6CiAgc21hbGwgcGF0Y2ggZm9yIG1wYzg1eHgKCiogRml4IHNtYWxsIHByb2JsZW0gaW4gTVBDNTIwMCBJMkMgZHJpdmVyCgoqIEZpeCBGQ0MzIHN1cHBvcnQgb24gQVRDIGJvYXJkCgoqIENvcnJlY3QgaGVhZGVyIHByaW50aW5nIGZvciBtdWx0aS1pbWFnZSBmaWxlcyBpbiBkb19ib290bSgpCgoqIE1ha2UgQ09ORklHX1NJTEVOVF9DT05TT0xFIHdvcmsgd2l0aCBDT05GSUdfQVVUT0JPT1RfS0VZRUQKCiogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbiBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOCBPY3QgMjAwMzoKICBGaXggQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgTnllIExpdSwgMTcgT2N0IDIwMDM6CiAgRml4IHR5cG8gaW4gaW5jbHVkZS9tcGM4eHguaAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNiBPY3QgMDM6CiAgRml4ZXMgZm9yIGNwdS9hcm05MjUvaW50ZXJydXB0LmMKICAtIEluaXRpYWxpemUgdGltZXN0YW1wICYgbGFzdGRlYyB2YXJzLgogIC0gZml4IHRpbWVzdGFtcCBvdmVyZmxvd3MuCiAgLSBmaXggbGFzdGRlYyBvdmVyZmxvdy4KICAtIHNtYXJ0ZXIgbm9ybWFsaXphdGlvbiB0byBhbGxvdyB1ZGVsYXkoKSBiZWxvdyAxbXMgdG8gd29yay4KCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAxNiBPY3QKICBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogIEN5Y2xvbmUgRWRpdGlvbiAoREstMUMyMCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IE9jdCAyMDAzOgogIGFkZCBoaW50IGFib3V0IGRvYy9SRUFETUUuc2lsZW50IHRvIFJFQURNRSBmaWxlCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgTlNDVQoKKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uRVZCCgoqIFRSQUIgYXV0by11cGRhdGU6IEJhc2UgZGVjaXNpb24gaWYgd2UgaGF2ZSB0byBzdHJpcCB0aGUgaW1hZ2UKICBoZWFkZXIgb24gaW1hZ2UgdHlwZSBhcyBlbmNvZGVkIGluIHRoZSBoZWFkZXIKICAoaW5jbHVkZSBpbWFnZSB0eXBlIHBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IE9jdCAyMDAzKQoKKiBQYXRjaGVzIGJ5IFhpYW5naHVhIFhpYW8sIDE1IE9jdCAyMDAzOgoKICAtIEFkZGVkIE1vdG9yb2xhIENQVSA4NTQwLzg1NjAgc3VwcG9ydCAoY3B1Lzg1eHgpCiAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTQwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NDBhZHMpCiAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTYwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NjBhZHMpCgoqIEZpeCBmbGFzaCB0aW1pbmdzIG9uIFRSQUIgYm9hcmQKCiogTWFrZSBzdXJlIEhVU0ggaXMgaW5pdGlhbGl6ZWQgZm9yIHJ1bm5pbmcgYXV0by11cGRhdGUgc2NyaXB0cwoKKiBNYWtlIDUyMDAgcmVzZXQgY29tbWFuZCBfcmVhbGx5XyByZXNldCB0aGUgYm9hcmQsIHdpdGhvdXQgcnVubmluZwogIGFueSBvdGhlciBjb2RlIGFmdGVyIGl0CgoqIEZpeCBlcnJvcnMgd2l0aCBmbGFzaCBlcmFzZSB3aGVuIHJhbmdlIHNwYW5zCWFjcm9zcyBiYW5rcwogIHRoYXQgYXJlIG1hcHBlZCBpbiByZXZlcnNlIG9yZGVyCgoqIEZpeCBmbGFzaCBtYXBwaW5nIGFuZCBkaXNwbGF5IG9uIFAzRzQgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE1IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIEludGVsIElYUDQyNSBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciBJWERQNDI1IGV2YWwgYm9hcmQKCiogQWRkZWQgY29uZmlnIG9wdGlvbiBDT05GSUdfU0lMRU5UX0NPTlNPTEUuICBTZWUgZG9jL1JFQURNRS5zaWxlbnQKICBmb3IgbW9yZSBpbmZvcm1hdGlvbgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBPY3QgMjAwMwogIC0gQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSwoKKiBQYXRjaGVzIGJ5IFRob21hcyBMYW5nZSwgMDkgT2N0IDIwMDM6CiAgLSBmaXggY21kX2lkZS5jIGZvciBub24gcHBjIGJvYXJkcyAocmVhZC93cml0ZSBmdW5jdGlvbnMgZGlkIG5vdAogICAgYWRkIEFUQSBiYXNlIGFkZHJlc3MpCiAgLSBmaXggZm9yIHNoYW5ub24gYm9hcmQKICAtICNpZmRlZiBDT05GSUdfSURFXzh4eF9ESVJFQ1Qgc29tZSBvdGhlcndpc2UgdW51c2VkIGNvZGUKICAtIEVuZGlhbiBzd2FwIEFUQSBpZGVudGl0eSBmb3IgYWxsIGJpZyBlbmRpYW4gQ1BVcywgbm90IGp1c3QgUFBDCiAgLSBNSVBTIG9ubHk6IE5ldyBvcHRpb24gQ09ORklHX01FTVNJWkVfSU5fQllURVMgZm9yIHBhc3NpbmcgbWVtc2l6ZQogICAgYXJncyB0byBsaW51eAogIC0gYWRkIHN1cHBvcnQgZm9yIGRiYXUxeDAwIGJvYXJkIChNSVBTMzIpCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgT2N0IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGRlYnJpcyBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOSBPY3QgMjAwMzoKICBGaXhlcyBmb3IgVFJBQiBib2FyZAogIC0gL2JvYXJkL3RyYWIvcnM0ODUuYzogY29ycmVjdCBiYXVkcmF0ZQogIC0gL2JvYXJkL3RyYWIvY21kX3RyYWIuYzogYnVnIGZpeCBmb3IgcHJvYmxlbSB3aXRoIHRpbWVyIG92ZXJmbG93IGluCiAgICB1ZGVsYXkoKTsgZml4IHNvbWUgdGltaW5nIHByb2JsZW1zIHdpdGggYWRjIGNvbnRyb2xsZXIKICAtIC9ib2FyZC90cmFiL3RyYWJfZmt0LmM6IGFkZCBuZXcgY29tbWFuZHM6IGdhaW4sIGVlcHJvbSBhbmQgcG93ZXI7CiAgICBtb2RpZnkgY29tbWFuZHM6IHRvdWNoIGFuZCBidXp6ZXIKCiogRGlzYWJsZSBDT05GSUdfU1VQUE9SVF9WRkFUIHdoZW4gdXNlZCB3aXRoIENPTkZJR19BVVRPX1VQREFURQogIChxdWljayAmIGRpcnR5IHdvcmthcm91bmQgZm9yIHJvZ3VlIHBvaW50ZXIgcHJvYmxlbSBpbiBnZXRfdmZhdG5hbWUoKSk7CiAgVXNlIGRpcmVjdCBmdW5jdGlvbiBjYWxscyBmb3IgYXV0b191cGRhdGUgaW5zdGVhZCBvZiBodXNoIGNvbW1hbmRzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDQgT2N0IDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtMzIgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgTmlvcyBDeWNsb25lIERldmVsb3BtZW50IEtpdCAoREstMUMyMCkKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjkgU2VwIDIwMDM6CiAgLSBBIHNlY29uZCBwYXJhbWV0ZXIgZm9yIGJvb3RtIG92ZXJ3cml0ZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IKICAgICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMuCiAgLSBib290bSBzZXRzIGVudmlyb25tZW50IHZhcmlhYmxlICJmaWxlc2l6ZSIgdG8gdGhlIHJlc3VsdGluZwogICAgKHVuY29tcHJlc3NlZCkgZGF0YSBsZW5ndGggZm9yICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMKICAgIHdoZW4gYXV0b3N0YXJ0IGlzIHNldCB0byAibm8iLiBOb3cgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZQoJaWYgYm9vdG0gJGZwZ2FkYXRhICRzb21lX2ZyZWVfcmFtIDsgdGhlbgoJCWZwZ2EgbG9hZCAwICRzb21lX2ZyZWVfcmFtICRmaWxlc2l6ZQoJZmkKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDI1IFNlcHQgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBSZXYuIEMgYm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjUgU2VwIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIFplcGh5ciBFbmdpbmVlcmluZyBaUEMuMTkwMCBib2FyZAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMyBTZXAgMjAwMzoKICBhZGQgQ01EX1BPUlRJTyB0byBDRkdfQ01EX05PTlNURCAoY29tbWFuZHMgaW4gcXVlc3Rpb24gYXJlIG9ubHkKICBpbXBsZW1lbnRlZCBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUpCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMjMgU2VwIDIwMDM6CiAgZml4IHBsbF9wY2lfdG9fbWVtX211bHRpcGxpZXIgdGFibGUgZm9yIE1QQzgyNDUKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjIgU2VwIDIwMDM6CiAgZW5hYmxlIHRpbWVkIGF1dG9ib290IG9uIFBYQQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDIyIFNlcCAyMDAzOgogIC0gYWRkICQoQ0ZMQUdTKSB0byAiLXByaW50LWxpYmdjYy1maWxlbmFtZSIgc28gY29tcGlsZXIgZHJpdmVyCiAgICByZXR1cm5zIGNvcnJlY3QgbGliZ2NjIGZpbGUgcGF0aAogIC0gImxhdGVuY3kiIHJlZHVjdGlvbiBvZiBidXN5LWxvb3Agd2FpdGluZyB0byBpbXByb3ZlICJVLUJvb3QiIGJvb3QKICAgIHRpbWUgb24gczNjMjR4MCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxOSBTZXAgMjAwMzoKICAtIEFkZCBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04gb3B0aW9uIHRvIGVjaG8gdGhlIGludmVydGVkIEV0aGVybmV0CiAgICBsaW5rIHN0YXRlIHRvIHRoZSBmYXVsdCBMRUQuCiAgLSBJbiBOZXRMb29wLCBtYWtlIHRoZSBGYXVsdCBMRUQgcmVmbGVjdCB0aGUgbGluayBzdGF0dXMuICBUaGUgbGluawogICAgc3RhdHVzIGdldHMgdXBkYXRlZCBvbiBlbnRyeSwgYW5kIG9uIHRpbWVvdXRzLgoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxOCBTZXAgMjAwMzoKICBhbGxvdyBta2ltYWdlIHRvIGJ1aWxkIGFuZCBydW4gb24gQ3lnd2luLWhvc3RlZCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IEZyYW5rIE38bGxlciwgMTggU2VwIDIwMDM6CiAgdXNlIGJpX2ludGZyZXEgaW5zdGVhZCBvZiBiaV9idXNmcmVxIHRvIGNvbXB1dGUgZmVjX21paV9zcGVlZCBpbgogIGNwdS9tcGM4eHgvZmVjLmMKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE2IFNlcCAyMDAzOgogIGFkZCB0b29sIHRvIGNvbXB1dGUgZmlsZWRzIGluIHRoZSBQTFBSQ1IgcmVnaXN0ZXIgZm9yIE1QQzg2eAoKKiBVc2UgSUhfVFlQRV9GSUxFU1lTVEVNIGZvciBUUkFCICJkaXNrIiBpbWFnZXMuCgoqIEZpeCBidWlsZCBwcm9ibGVtcyB1bmRlciBGcmVlQlNECgoqIEFkZCBnZW5lcmljIGZpbGVzeXN0ZW0gaW1hZ2UgdHlwZQoKKiBNYWtlIGZhdGxvYWQgc2V0IGZpbGVzaXplIGVudmlyb25tZW50IHZhcmlhYmxlCgoqIGVuYWJsZSBiYXNpYyAvIG1lZGl1bSAvIGhpZ2gtZW5kIGNvbmZpZ3VyYXRpb25zIGZvciBQUENoYW1lbGVvbkVWQgogIGJvYXJkOyBmaXggTkFORCBjb2RlCgoqIGVuYWJsZSBURlRQIGNsaWVudCBjb2RlIHRvIHNwZWNpZnkgdG8gdGhlIHNlcnZlciB0aGUgZGVzaXJlZAogIHRpbWVvdXQgdmFsdWUgKHNlZSBSRkMtMjM0OSkKCiogSW1wcm92ZSBTRFJBTSBzZXR1cCBmb3IgVFJBQiBib2FyZAoKKiBTdXBwcmVzcyBhbGwgb3V0cHV0IHdpdGggc3BsYXNoc2NyZWVuIGNvbmZpZ3VyZWQgb25seSBpZiAic3BsYXNoaW1hZ2UiCiAgaXMgc2V0CgoqIEZpeCBwcm9ibGVtcyB3aXRoIEkyQyBzdXBwb3J0IGZvciBtcGM1MjAwCgoqIEFkYXB0IFRSQUIgY29uZmlndXJhdGlvbiBhbmQgYXV0b191cGRhdGUgdG8gbmV3IG1lbW9yeSBsYXlvdXQKCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIHd0ayBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgdGhlIFNoYXJwIExRMDY1VDlEUjUxVSBMQ0QgZGlzcGxheQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTcgU2VwIDIwMDM6CiAgLSBGaXhlcyBmb3IgTVBDODI2NiBkZWZhdWx0IGNvbmZpZwogIC0gQWxsb3cgZXRoX2xvb3BiYWNrX3Rlc3QoKSBvbiA4MjYwIHRvIHVzZSBhIHN1YnNldCBvZiB0aGUgRkNDJ3MKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTcgU2VwIDIwMDM6CiAgLSB1cGRhdGUgUkVBRE1FIChTSE9XX0JPT1RfUFJPR1JFU1MgdmFsdWVzIGZvciBjbWRfbmFuZC5jIGFuZAogICAgZW52X2NvbW1vbi5jKQogIC0gc2JjODI2MCB0d2Vha3MKICAtIGFkanVzdCAiaGVscCIgb3V0cHV0CgoqIFBhdGNoZXMgYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CiAgLSBmaXggc3BlbGxpbmcgZXJyb3JzCiAgLSBzZXQgR0RfRkxHX0RFVklOSVQgZmxhZyBvbmx5IGFmdGVyIGRldmljZSBmdW5jdGlvbiBwb2ludGVycwogICAgYXJlIHZhbGlkCiAgLSBBbGxvdyBDRkdfQUxUX01FTVRFU1Qgb24gc3lzdGVtcyB3aGVyZSBhZGRyZXNzIHplcm8gaXNuJ3QKICAgIHdyaXRlYWJsZQogIC0gZW5hYmxlIDMucmQgVUFSVCAoU1QtVUFSVCkgb24gUFhBKFhTY2FsZSkgQ1BVcwogIC0gdHJpZ2dlciB3YXRjaGRvZyB3aGlsZSB3YWl0aW5nIGluIHNlcmlhbCBkcml2ZXIKCiogQWRkIGF1dG8tdXBkYXRlIGNvZGUgZm9yIFRSQUIgYm9hcmQgdXNpbmcgVVNCIG1lbW9yeSBzdGlja3MsCiAgc3VwcG9ydCBuZXcgY29uZmlndXJhdGlvbiB3aXRoIG1vcmUgbWVtb3J5CgoqIGRpc2FibGUgTVBDNTIwMCBidXMgcGlwZWxpbmluZyBhcyB3b3JrYXJvdW5kIGZvciBidXMgY29udGVudGlvbgoKKiBNb2RpZnkgWExCIGFyYml0ZXIgcHJpb3JpdGllcyBvbiBNUEM1MjAwIHNvIGFsbCBkZXZpY2VzIHVzZSBzYW1lCiAgcHJpb3JpdHk7IGNvbmZpZ3VyZSBjcml0aWNhbCBpbnRlcnJ1cHRzIHRvIGJlIGhhbmRsZWQgbGlrZSBleHRlcm5hbAogIGludGVycnVwdHMKCiogTWFrZSBJUEIgY2xvY2sgb24gTUdUNTEwMC9NUEM1MjAwIGNvbmZpZ3VyYWJsZSBpbiBib2FyZCBjb25maWcgZmlsZTsKICBnbyBiYWNrIHRvIDY2IE1IeiBmb3Igc3RhYmlsaXR5CgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE1IFNlcCAyMDAzOgogIC0gYWRkIGRlc2NyaXB0aW9uIGZvciBtaXNzaW5nIENGR19DTURfKiBlbnRyaWVzIGluIHRoZSBSRUFETUUgZmlsZQogIC0gc2Fjc25nIHR3ZWFrcwoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDE0IFNlcCAyMDAzOgogIGVuYWJsZSB3YXRjaGRvZyBzdXBwb3J0IGZvciBhbGwgTVBDODI0eCBib2FyZHMgdGhhdCBoYXZlIGEgd2F0Y2hkb2cKCiogT24gTVBDNTIwMCwgcmVzdHJpY3QgRkVDIHRvIGEgbWF4aW11bSBvZiAxMCBNYnBzIHRvIHdvcmsgYXJvdW5kIHRoZQogICJOb24tb2N0ZXQgQWxpZ25lZCBGcmFtZSIgZXJyb3JzIHdlIHNlZSBhdCAxMDAgTWJwcwoKKiBQYXRjaCBieSBTaGFyYWQgR3VwdGEsIDE0IFNlcCAyMDAzOgogIGZpeCBTUFIgbnVtYmVycyBmb3IgdXBwZXIgQkFUIHJlZ2lzdGVyIChbSURdQkFUWzQtN11bVUxdKQoKKiBQYXRjaCBieSBsbGFuZHJlLCAxMSBTZXAgMjAwMzoKICB1cGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb25FVkIgYm9hcmQKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAxMyBTZXAgMjAwMzoKICB2YXJpb3VzIGNoYW5nZXMgdG8gVkNNQTkgYm9hcmQgc3BlY2lmaWMgZmlsZXMKCiogQWRkIEkyQyBzdXBwb3J0IGZvciBNR1Q1MTAwIC8gTVBDNTIwMAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTEgU2VwIDIwMDM6CiAgQ2hhbmdlZCBkZWZhdWx0IG1lbW9yeSBvcHRpb24gb24gTVBDODI2NkFEUyB0byBOT1QgYmUgUGFnZSBCYXNlZAogIEludGVybGVhdmUsIHNpbmNlIHRoaXMgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSBzdGFuZGFyZAogIDE2TUIgRElNTQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDEyIFNlcCAyMDAzOgogIGZpeCBNYWtlZmlsZSBzZXR0aW5ncyBmb3Igc2s5OCBkcml2ZXIKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwMzoKICAtIG5ldyBib2FyZHMgYWRkZWQ6IERQNDA1LCBIVUI0MDUsIFBMVTQwNSwgVk9INDA1CiAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAogIC0gY3B1L3BwYzR4eC9zZHJhbS5jOiBkaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyIGJlZm9yZSBzZXR0aW5nCiAgICBmaXJzdCB2YWx1ZXMKICAtIGNwdS9wcGM0eHgvNDA1X3BjaS5jOiBzZXQgdmVuZG9yIGlkIG9uIFBQQzQwNUVQIHN5c3RlbXMKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTEgU2VwIDIwMDM6CiAgYWRkIGJ1cm4taW4gdGVzdHMgZm9yIFRSQUIgYm9hcmQKCiogRW5hYmxlIGluc3RydWN0aW9uIGNhY2hlIG9uIE1QQzUyMDAgYm9hcmQKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIFNlcCAyMDAzOgogIC0gZml4IFVTQiBkYXRhIHBvaW50ZXIgYXNzaWdubWVudCBmb3IgYnVsayBvbmx5IHRyYW5zZmVyLgogIC0gcHJldmVudCB0byBkaXNwbGF5IGVyYXNlZCBkaXJlY3RvcmllcyBpbiBGQVQgZmlsZXN5c3RlbS4KCiogQ2hhbmdlIG91dHB1dCBmb3JtYXQgZm9yIE5BTkQgZmxhc2ggLSBtYWtlIGl0IGxvb2sgbGlrZSBmb3Igb3RoZXIKICBtZW1vcnksIHRvbwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljg6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZAoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCA5IFNlcCAyMDAzOgogIGFkZCBGQVQgc3VwcG9ydCBmb3IgSURFLCBTQ1NJIGFuZCBVU0IKCiogUGF0Y2hlcyBieSBHbGViIE5hdGFwb3YsIDIgU2VwIDIwMDM6CiAgLSBjbGVhbnVwIG9mIFBPU1QgY29kZSBmb3IgdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcwogIC0gTVBDODI0eCBsb2NrcyB3YXkwIG9mIGRhdGEgY2FjaGUgZm9yIHVzZSBhcyBpbml0aWFsIFJBTTsKICAgIHRoaXMgcGF0Y2ggdW5sb2NrcyBpdCBhZnRlciByZWxvY2F0aW9uIHRvIFJBTSBhbmQgaW52YWxpZGF0ZXMKICAgIHRoZSBsb2NrZWQgZW50cmllcy4KCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAzMCBBdWcgMjAwMzoKICBuZXcgSTJDIGRyaXZlciBmb3IgbXBjMTA3IGJyaWRnZS4gTm93IHdvcmtzIGZyb20gZmxhc2guCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDExIEF1ZyAyMDAzOgogIC0gSkZGUzI6IGZpeCB0eXBvIGluIGNvbW1vbi9jbWRfamZmczIuYwogIC0gSkZGUzI6IGZpeCBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMgb3B0aW9uCiAgLSBKRkZTMjogcmVtb3ZlIG5vZGUgdmVyc2lvbiAwIHdhcm5pbmcKICAtIEpGRlMyOiBhY2NlcHQgSkZGUzIgUEFERElORyBub2RlcwogIC0gU1hOSTg1NVQ6IGFkZCBBTTI5TFY4MDAgc3VwcG9ydAogIC0gU1hOSTg1NVQ6IG1vdmUgZW52aXJvbm1lbnQgZnJvbSBFRVBST00gdG8gZmxhc2gKICAtIFNYTkk4NTVUOiBib290IGZyb20gSkZGUzIgaW4gTk9SIG9yIE5BTkQgZmxhc2gKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDExIEF1ZyAyMDAzOgogIGZpeGVzIGZvciBJMkMgb24gTVBDODI0MAogIC0gZml4IGkyY193cml0ZSByb3V0aW5lCiAgLSBmaXggaXByb2JlIGNvbW1hbmQKICAtIGVsaW1pbmF0ZXMgdXNlIG9mIGdsb2JhbCB2YXJpYWJsZXMsIHBsdXMgZGVhZCBjb2RlLCBjbGVhbnVwLgoKKiBBZGQgc3VwcG9ydCBmb3IgVVNCIE1hc3MgU3RvcmFnZSBEZXZpY2VzIChCQkIpCiAgKHRlc3RlZCB3aXRoIFVTQiBtZW1vcnkgc3RpY2tzIG9ubHkpCgoqIEF2b2lkIGZsaWNrZXIgb24gVFJBQidzIFZGRAoKKiBBZGQgc3VwcG9ydCBmb3IgU0s5OHh4IGRyaXZlcgoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBTdXBwb3J0IEljZUN1YmUgYm9hcmQgY29uZmlndXJhdGlvbnMgd2l0aCAxIHggQU1EIEFNMjlMVjA2NSAoOCBNQikKICBvciAxIHggQU0yOUxWNjUyICh0d28gTFYwNjUgaW4gb25lIGNoaXAgPSAxNiBNQik7CiAgUnVuIElQQiBhdCAxMzMgTWh6OyBhZGp1c3QgdGhlIE1JSSBjbG9jayBmcmVxdWVuY3kgYWNjb3JkaW5nbHkKCiogU2V0IEJSR19DTEsgb24gUE04MjUvODI2IHRvIDY0TUh6IChWQ09fT1VUIC8gNCwgaW5zdGVhZCBvZiAxNgkgTUh6KQogIHRvIGFsbG93IGZvciBtb3JlIGFjY3VyYXRlIGJhdWRyYXRlIHNldHRpbmdzCiAgKGVycm9yIG5vdyAwLjclIGF0IDExNSBrYnBzLCBpbnN0ZWFkIG9mIDMuNSUgYmVmb3JlKQoKKiBQYXRjaCBieSBBbmRyZWFzIE1vaHIsIDQgU2VwIDIwMDM6CiAgRml4IGEgbG90IG9mIHNwZWxsaW5nIGVycm9ycwoKKiBBZGQgc3VwcG9ydCBmb3IgUFBDaGFtZWxlb24gRXZhbCBCb2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgUDNHNCBib2FyZAoKKiBGaXggcHJvYmxlbSB3aXRoIE1HVDUxMDAgRkVDIGRyaXZlcjogYWRkICJlYXJseSIgTUFDIGFkZHJlc3MKICBpbml0aWFsaXphdGlvbgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA3IEF1ZyAyMDAzOgogIGNoZWNrIEJDU1IgdG8gZGV0ZWN0IGlmIHRoZSBib2FyZCBpcyBjb25maWd1cmVkIGluIFBDSSBtb2RlCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBSYWdodSBLcmlzaG5hcHJhc2FkLCA3IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBBZGRlciBJSSBNUEM4NTJUIG1vZHVsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDE5IEF1ZyAyMDAzOgogIGZpeCBUSSBJbm5vdmF0b3IvT01BUDE1MTAgcGluIGNvbmZpZ3MKCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAxOCBBdWcgMjAwMwogIC0gYWRkIHN1cHBvcnQgZm9yIGFybTkyNmVqcyBjcHUgY29yZQogIC0gYWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTYxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTQgQXVnIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGJ6aXAyIHVuY29tcHJlc3Npb24KCiogQWRkIEdDQyBsaWJyYXJ5IHRvIGV4YW1wbGVzL01ha2VmaWxlIHNvIEdDQyB1dGlsaXR5IGZ1bmN0aW9ucyB3aWxsCiAgYmUgcmVzb2x2ZWQsIHRvbwoKKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkIHVzaW5nIHNvZnR3YXJlIEkyQyBkcml2ZXIKICAoYmVjYXVzZSBvZiBiZXR0ZXIgcmVzcG9uc2UgdG8gaXByb2JlIGNvbW1hbmQpOyBmaXggcHJvYmxlbSB3aXRoCiAgInJlc2V0IiBjb21tYW5kCgoqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBBdWcgMjAwMzoKICBBZGRlZCBDT05GSUdfQk9PVFBfRE5TMiBhbmQgQ09ORklHX0JPT1RQX1NFTkRfSE9TVE5BTUUgdG8KICBDT05GSUdfQk9PVFBfTUFLUyAoc2VlIFJFQURNRSkuCgoqIEZpeCBJQ1U4NjIgZW52aXJvbm1lbnQgcHJvYmxlbQoKKiBGaXggUkFNIHNpemUgZGV0ZWN0aW9uIGZvciBSTVUgYm9hcmQKCiogSW1wbGVtZW50ICJyZXNldCIgZm9yIE1HVDUxMDAvTVBDNTIwMCBzeXN0ZW1zCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIEV0aGVybmV0IGF1dG9uZWdvdGlhdGlvbiBvbiBJTkNBLUlQIHdvcmsgZm9yIGFsbCBjbG9jayByYXRlczsKICBhbGxvdyBzZWxlY3Rpb24gb2YgY2xvY2sgZnJlcXVlbmN5IGFzICJtYWtlIiB0YXJnZXQKCiogSW1wbGVtZW50IG1lbW9yeSBhdXRvc2l6aW5nIGNvZGUgZm9yIEljZUN1YmUgYm9hcmRzCgoqIENvbmZpZ3VyZSBuZXR3b3JrIHBvcnQgb24gSU5DQS1JUCBmb3IgYXV0b25lZ290aWF0aW9uCgoqIEZpeCBvdmVyZmxvdyBwcm9ibGVtIGluIG5ldHdvcmsgdGltZW91dCBjb2RlCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDggQXVnIDIwMDM6CiAgQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwIChjcmMzMl9ub19jb21wLCB0b28pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjU6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXBkYXRlIGZvciBUUU0gYm9hcmQgZGVmYXVsdHM6CiAgZGlzYWJsZSBjbG9ja3NfaW5fbWh6LCBlbmFibGUgYm9vdCBjb3VudCBsaW1pdAoKKiBSZW1vdmVkIHRvb2xzL2dkYiBmcm9tICJtYWtlIGFsbCIgdGFyZ2V0LiAgQWRkZWQgbWFrZSB0YXJnZXQgImdkYnRvb2xzIgogIGluIHRvcGxldmVsIGRpcmVjdG9yeSBpbnN0ZWFkLiAgUmVtb3ZlZCBhc3Rlc3QuYyBmcm9tIHRvb2xzL2dkYiBiZWNhdXNlCiAgaXQgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LgoKKiBGaXggUENJIHN1cHBvcnQgZm9yIE1QQzUyMDAgLyBJY2VDdWJlIEJvYXJkCgoqIE1hcCBJU1AxMzYyIFVTQiBPVEcgY29udHJvbGxlciBmb3IgTlNDVSBib2FyZAoKKiBQYXRjaCBieSBCcmFkIFBhcmtlciwgMDIgQXVnIDIwMDM6CiAgZml4IHNjNTIwX2NkcCBwcm9ibGVtcwoKKiBJbXBsZW1lbnQgQm9vdCBDeWNsZSBEZXRlY3Rpb24gKFJlcS4gMi4zIG9mIE9TREwgQ0dMIFJlcWlyZW1lbnRzKQoKKiBBbGxvdyBlcmFzZSBjb21tYW5kIHRvIGNyb3NzIGZsYXNoIGJhbmsgYm91bmRhcmllcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIEp1bCAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBMeW51eFdvcmtzIEtlcm5lbCBEb3dubG9hZGFibGUgSW1hZ2VzIChLRElzKS4KICBCb3RoIEx5bnhPUyBhbmQgQmx1ZUNhdCBsaW51eCBLRElzIGFyZSBzdXBwb3J0ZWQuCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI1IEp1bCAyMDAzOgogIHVzZSBtb3JlIHJlbGlhYmxlIHJlc2V0IGZvciBPTUFQLzkyNVQKCiogUGF0Y2ggYnkgTnllIExpdSwgMjUgSnVsIDIwMDM6CiAgZml4IHR5cG8gaW4gbXBjOHh4LmgKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjQgSnVsIDIwMDM6CiAgRml4ZXMgZm9yIGNtZF9uYW5kLmM6CiAgLSBGaXhlZCBudWxsIGRlcmVmZXJlY2Ugd2hpY2ggY291bGQgcmVzdWx0IGluIGluY29ycmVjdCBFQ0MgdmFsdWVzLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgZGV2aWNlcyB3aXRoIG5vIFJlYWR5L0J1c3kgc2lnbmFsIGhvb2tlZCB1cC4KICAtIEFkZGVkIE9NQVAxNTEwIHJlYWQvd3JpdGUgcHJvdGVjdCBoYW5kbGluZy4KICAtIEZpeGVkIG5hbmQuaCdzIEVDQ1BPUy4gQSBjb25mbGljdCBleGlzdGVkIHdpdGggUE9TNSBhbmQgYmFkYmxvY2sKICAgIGZvciBub24tSkZGUzIuCiAgLSBTd2l0Y2hlZCBkZWZhdWx0IEVDQyB0byBiZSBKRkZTMi4KCiogQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwCgoqIFByb3ZpZGUgY29uc2lzdGVudCBpbnRlcmZhY2UgdG8gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8gYWNjZXNzCiAgdGhlICdnbG9iYWxfZGF0YScgc3RydWN0dXJlCiAgUHJvdmlkZSBhIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBtb3JlIHVzZWZ1bCB0byB1c2Vycy9kZXZlbG9wZXJzLgoKKiBNYWtlIEljZUN1YmUgTUdUNTEwMCBGRUMgZHJpdmVyIHdvcmsKCiogSW1wbGVtZW50IG5ldyBtZWNoYW5pc20gdG8gZXhwb3J0IFUtQm9vdCdzIGZ1bmN0aW9ucyB0byBzdGFuZGFsb25lCiAgYXBwbGljYXRpb25zOiBpbnN0ZWFkIG9mIHVzaW5nIChQUEMtc3BlY2lmaWMpIHN5c3RlbSBjYWxscyB3ZSBub3cKICB1c2UgYSBqdW1wIHRhYmxlOyBwbGVhc2Ugc2VlIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBmb3IgZGV0YWlscwoKKiBQYXRjaCBieSBEYXZlIFdlc3R3b29kLCAyNCBKdWwgMjAwMzoKICBhZGRlZCBzdXBwb3J0IGZvciBVbml0eSBPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjMgSnVsIDIwMDM6CiAgYWRkICJpbWxzIiBjb21tYW5kIHRvIHByaW50IGZsYXNoIHRhYmxlIG9mIGNvbnRlbnRzCgoqIEZpeCBjb2xkIGJvb3QgZGV0ZWN0aW9uIGZvciBsb2cgYnVmZmVyIHJlc2V0CgoqIFJldHVybiBlcnJvciBmb3IgaW52YWxpZCBsZW5ndGggc3BlY2lmaWVycyB3aXRoICJjcC5YIiBldGMuCgoqIEZpeCBzdGFydHVwIHByb2JsZW0gb24gTUlQUwoKKiBBbGxvdyBmb3IgQ09ORklHX1NQTEFTSF9TQ1JFRU4gZXZlbiB3aGVuIG5vIGV4cGxpY2l0CiAgYml0bWFwIHN1cHBvcnQgaXMgY29uZmlndXJlZAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTggSnVsIDIwMDM6CiAgLSBmaXggZW5kaW5hbmVzcyBwcm9ibGVtIGluIGNwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYzEuYwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTggSnVsIDIwMDM6CiAgLSBmaXggbWVtb3J5IGNvbmZpZ3VyYXRpb24gZm9yIE1JUDQwNVQKICAtIGZpeCBwcmludG91dCBvZiBiYXVkcmF0ZSBmb3IgImxvYWRiIDxsb2FkYWRkcj4gPGJhdWRyYXRlPiIKCiogQ2xlYW51cCBvZiBUUU04Mnh4IGNvbmZpZ3VyYXRpb25zOyB1c2UgIm9mZmljaWFsIiBib2FyZCB0eXBlcwogIHRvIG1ha2Ugc2VsZWN0aW9uIGVhc2llci4KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgSnVsIDIwMDM6CiAgYWRkIGRlbGF5IHRvIGdldCBJMkMgd29ya2luZyB3aXRoICJpbW0iIGNvbW1hbmQgYW5kIHMzYzI0eDBfaTJjLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTcgSnVseSAwMzoKICAtIEZpeGVkIGJ1ZyBpbiBPTUFQMTUxMCBiYXVkIHJhdGUgZGl2aXNvciBzZXR0aW5ncy4KCiogUGF0Y2ggYnkgTnllIExpdSwgMTYgSnVseSAyMDAzOgogIE1QQzg2MEZBRFMgZml4ZXM6CiAgLSBhZGQgTVBDODZ4QURTIHN1cHBvcnQgKHVzZXMgTVBDODZ4QURTLmgpCiAgLSBhZGQgODY2UC9UIGNvcmUgc3VwcG9ydCAoYWxzbyBNUEM4NTlUL01QQzg1OURTTC9NUEM4NTJUKQogICAgbyBQTFBSQ1IgY2hhbmdlcwogICAgbyBCUkcgY2hhbmdlcyAoRVhUQUwvWFRBTCByZXN0cmljdGVkIHRvIDEwTUh6KQogICAgbyBkb24ndCB0cnVzdCBnY2xrKCkgc29mdHdhcmUgbWVhc3VyZW1lbnQgYnkgZGVmYXVsdCwgZGVwZW5kIG9uCiAgICAgIENPTkZJR184eHhfR0NMS19GUkVRCiAgLSBhZGQgRFJBTSBTSU1NIG5vdCBpbnN0YWxsZWQgZGV0ZWN0aW9uCiAgLSB1c2UgbW9yZSAiY29ycmVjdCIgU0RSQU0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UKICAtIGFsbG93IGRpZmZlcmVudCBTRFJBTSBzaXplcyAoOHh4QURTIGhhcyA4TSkKICAtIGRlZmF1bHQgREVSIGlzIDAKICAtIHJlbW92ZSB1bnVzZWQgTUFNUiBkZWZpbmVzIGZyb20gRkFEUzg2MFQuaCAoYWxsIGRvbmUgaW4gZmFkcy5jKQogIC0gcmVuYW1lIE1BTVIvTUJNUiBkZWZpbmVzIHRvIGJlIG1vcmUgY29uc2lzdGVudC4gU2hvdWxkIGV2ZW50dWFsbHkKICAgIGJlIG1lcmdlZCBpbnRvIE14TVIgdG8gYmV0dGVyIHJlZmxlY3QgdGhlIFBvd2VyUVVJQ0MgZGF0YXNoZWV0LgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdWwgMjAwMzoKICBzdXBwb3J0IG5ldyBNb3Rvcm9sYSBQUTJGQURTLVpVIGV2YWx1YXRpb24gYm9hcmQgd2hpY2ggcmVwbGFjZWQKICBNUEM4MjYwQURTIGFuZCBNUEM4MjY2QURTCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgSWNlQ3ViZSBib2FyZCAod2l0aCBNR1Q1MTAwIGFuZCBNUEM1MjAwIENQVXMpCgoqIEFkZCBzdXBwb3J0IGZvciBNR1Q1MTAwIGFuZCBNUEM1MjAwIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDE1IEp1bCAyMDAzOgogIHVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjM6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAwNCBKdWwgMjAwMwogIC0gYWRkZWQgc3VwcG9ydCBmb3IgYXJtOTI1dCBjcHUgY29yZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNTEwIElubm92YXRvciBCb2FyZAoKKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDE0IEp1bCAyMDAzOgogIC0gYWRkIEkyQyBzdXBwb3J0IGZvciBzM2MyNDAwIHN5c3RlbXMgKHRyYWIgYm9hcmQpCiAgLSAocmUtKSBhZGQgInBpbmciIHRvIGNvbW1hbmQgdGFibGUKCiogRml4IGhhbmRsaW5nIG9mICJzbG93IiBQT1NUIHJvdXRpbmVzCgoqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDM6CiAgLSBDb3JyZWN0IGZsYXNoIGFuZCBKRkZTMiBzdXBwb3J0IGZvciBNUEM4MjYwQURTCiAgLSBmaXggUFZSIHZhbHVlcyBhbmQgY2xvY2sgZ2VuZXJhdGlvbiBmb3IgUG93ZXJRVUlDQyBJSSBmYW1pbHkKICAgICg4MjcwLzgyNzUvODI4MCkKCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMDggSnVsIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTTY4SyB0YXJnZXRzCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAzIEp1bDoKICAtIEZpeCBQQ0kgY29uZmlnIHRhYmxlIGZvciBBMzAwMAogIC0gRml4IGlvYmFzZSBmb3IgbmF0c2VtaS5jCiAgICAoUENJX0JBU0VfQUREUkVTU18wIGlzIHRoZSBJTyBiYXNlIHJlZ2lzdGVyIGZvciBEUDgzODE1KQoKKiBBbGxvdyB0byBlbmFibGUgInNsb3ciIFBPU1Qgcm91dGluZXMgYnkga2V5IHByZXNzIG9uIHBvd2VyLW9uCiogRml4IHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBzd2l0Y2hpbmcgb2YgTENEIGJhY2tsaWdodCBvbiBMV01PTgoqIFR3ZWFrIG91dHB1dCBmb3JtYXQgZm9yIExXTU9OCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgSnVsIDIwMDM6CiAgLSBGaXggYnVnIGluIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFLgogIC0gQVI0MDUgY29uZmlnIHVwZGF0ZWQuCiAgLSBPQ1JUQy9PUlNHOiBic3AgY29tbWFuZCBhZGRlZC4KICAtIEFTSDQwNSBic3AgdXBkYXRlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIE5TQ1UgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyM00sIFRRTTg1ME0sIFRRTTg1NU0gYW5kIFRRTTg2ME0gbW9kdWxlcwoKKiBBZGQgc3VwcG9ydCBmb3IgQW0yOUxWMTYwTUwsIEFtMjlMVjMyME1MLCBhbmQgQW0yOUxWNjQwTUwKICBtaXJyb3IgYml0IGZsYXNoIG9uIFRRTTh4eE0gbW9kdWxlcwoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMzAgSnVuIDIwMDM6CiAgZ2V0IHJpZCBvZiBNS19DTURfRU5UUlkgbWFjcm87IHVwZGF0ZSBkb2MvUkVBRE1FLmNvbW1hbmQKCiogUGF0Y2ggYnkgU2ViIEphbWVzLCAzMCBKdW4gMjAwMzoKICBJbXByb3ZlIGRvY3VtZW50YXRpb24gb2YgSTJDIGNvbmZpZ3VyYXRpb24gaW4gUkVBRE1FCgoqIEZpeCBwcm9ibGVtcyB3aXRoIHByZXZpb3VzIGxvZyBidWZmZXIgImZpeGVzIgoKKiBGaXggbWlub3IgaGVscCB0ZXh0IGlzc3VlcwoKKiAibG9nIGFwcGVuZCIgZGlkIG5vdCBhcHBlbmQgYSBuZXdsaW5lCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggc29tZSBtaXNzaW5nIGNvbW1hbmRzLCBjbGVhbnVwIGhlYWRlciBmaWxlcwogIChhdXRvc2NyaXB0LCBibXAsIGJzcCwgZmF0LCBtbWMsIG5hbmQsIHBvcnRpbywgLi4uKQoKKiBSZXdyaXRlIGNvbW1hbmQgbG9va3VwIGFuZCBoZWxwIGNvbW1hbmQgKGZpeCBwcm9ibGVtcyB3aXRoIGJ1YmJsZQogIHNvcnQgd2hlbiBzb3J0aW5nIGNvbW1hbmQgbmFtZSBsaXN0KS4gTWlub3IgY2xlYW51cCBoZXJlIGFuZCB0aGVyZS4KCiogTWVyZ2UgZnJvbSAic3RhYmxlIGJyYW5jaCIsIHRhZyBMQUJFTF8yMDAzXzA2XzI4XzE4MDAtc3RhYmxlOgogIC0gQWxsb3cgdG8gY2FsbCBzeXNtb24gZnVuY3Rpb24gaW50ZXJhY3RpdmVseQogIC0gUElDIG9uIExXTU9OIGJvYXJkIG5lZWRzIGRlbGF5IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgbWlzc2luZyBSU1IgZGVmaW5pdGlvbnMgZm9yIE1QQzh4eAogIC0gSW1wcm92ZSBsb2cgYnVmZmVyIGhhbmRsaW5nOiBndWFyYW50ZWUgY2xlYW4gcmVzZXQgYWZ0ZXIgcG93ZXItb24KICAtIEFkZCBzdXBwb3J0IGZvciBFWEJJVEdFTiBib2FyZCAoYWthICJnZW5pZSIpCiAgLSBBZGQgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCgoqIENvZGUgY2xlYW51cDoKICAtIHJlbW92ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgdHJhaWxpbmcgZW1wdHkgbGluZXMsIEMrKyBjb21tZW50cywgZXRjLgogIC0gc3BsaXQgY21kX2Jvb3QuYyAoc2VwYXJhdGUgY21kX2JkaW5mby5jIGFuZCBjbWRfbG9hZC5jKQoKKiBQYXRjaGVzIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNSBKdW4gMjAwMzoKICAtIG1ham9yIHJld29yayBvZiBjb21tYW5kIHN0cnVjdHVyZQogICAgKHdvcmsgZG9uZSBtb3N0bHkgYnkgTWljaGFsIENlbmRyb3dza2kgYW5kIEpvYWtpbSBLcmlzdGlhbnNlbikKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAyNiBKdW4gMjAwMzoKICAtIGNzYjIyNiBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGNyZWRpdHMgZm9yIGxvZ29kbCBwb3J0IHVwZGF0ZWQKICAtIGlubm9rb20gY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBsb2dvZGwgdHJlZSB1cGRhdGUsIHN0aWxsIHdpdGggY29kaW5nIHN0eWxlIGluY29uc2lzdGVuY2llcwogIC0gYWRkZWQgT0NNIGZvciBwcGM0MDUgd2FybmluZyB0byBSRUFETUUKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDI1IEp1biAyMDAzOgogIHVwZGF0ZSBOZXRWaWEgd2l0aCBWMiBib2FyZCBzdXBwb3J0CgoqIEhlYWRlciBmaWxlIGNsZWFudXAgZm9yIEFSTQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyNCBKdW4gMjAwMzoKICAtIG1ha2Ugc3VyZSB0byB1c2Ugb25seSBVLWJvb3QgcHJvdmlkZWQgaGVhZGVyIGZpbGVzCiAgLSBmaXggcHJvYmxlbXMgd2l0aCAiLnJvZGF0YS5zdHIxLjQiIHNlY3Rpb24gYXMgdXNlZCBieSBHQ0MtMy54CgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSnVuIDIwMDM6CiAgLSBVcGRhdGUgZXNkIEFTSDQwNSBib2FyZCBmaWxlcy4KICAtIFVwZGF0ZSBlc2QgREFTQV9TSU0gY29uZmlnIGZpbGUuCiAgLSBBZGQgcGluZyBjb21tYW5kIHRvIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjMgSnVuIDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIzIEp1biAyMDAzOgogIC0gY2xlYW51cCBvZiBHQ0MgMy54IGNvbXBpbGVyIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCA0IEp1biAyMDAzOgogIGFkZCBsYXJnZSBtZW1vcnkgc3VwcG9ydCBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRW5hYmxlZCBzdGFuZGFyZCB1LWJvb3QgZGV2aWNlIGFic3RyYWN0aW9uIGZvciBBUk0KICAtIEVuYWJsZWQgY29uc29sZSBkZXZpY2UgZm9yIEFSTQogIC0gSW5pdGlsaXplZCBiaV9iYXVkcmF0ZSBmb3IgQVJNCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAyMyBBcHIgMjAwMzoKICBmaXggYnl0ZSBvcmRlciBmb3IgODI0eCBJMkMgYWRkcmVzc2VzICh3cml0ZSBvcCkKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjAgSnVuIDIwMDM6CiAgLSBoeW1vZCB1cGRhdGUKICAtIGNsZWFudXAgKGVzcGVjaWFsbHkgZm9yIGdjYy0zLnggY29tcGlsZXJzKQoKKiBQYXRjaCBieSBUb20gR3VpbGxpYW1zLCAyMCBKdW4gMjAwMzoKICBhZGRlZCBDT05GSUdfNzUwRlggc3VwcG9ydCBmb3IgSUJNIDc1MEZYIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgRGV2aW4gQ3J1bWIsIDAyIEFwciAyMDAzOgogIEZpeCBjbG9jayBkaXZpZGVyIHJvdW5kaW5nIHByb2JsZW0gaW4gZHJpdmVycy9zZXJpYWwuYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRml4ZWQgc21jOTFjMTExIGRyaXZlciB0byBzeW5jIHdpdGggdGhlIHUtYm9vdCBlbnZpcm9ubWVudAogICAgKGRyaXZlci9zbWM5MWMxMTEuYykuCiAgLSBBZGRlZCBldGhfaW5pdCBlcnJvciByZXR1cm4gY2hlY2sgaW4gTmV0TG9vcCAobmV0L25ldC5jKS4KCiogUGF0Y2ggYnkgS2VuIENob3UsIDE5IEp1bmUgMjAwMzoKICBBZGRlZCBzdXBwb3J0IGZvciBBMzAwMCBTQkMgYm9hcmQgKEFydGlzIE1pY3Jvc3lzdGVtcyBJbmMuKQoKKiBQYXRjaGVzIGJ5IE11cnJheSBKZW5zZW4sIDE3IEp1biAyMDAzOgogIC0gSHltb2QgYm9hcmQgZGF0YWJhc2UgbW9kczogYWRkICJ3aG8iIGZpZWxkIGFuZCBuZXcgeGlsaW54IGNoaXAgdHlwZXMKICAtIHByb3ZpZGUgbmV3ICJpbml0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIHNvIGNvZGUgZXh0ZXJuYWwgdG8KICAgICJjb21tb24vbWFpbi5jIiBjYW4gdXNlIHRoZSAicmVzZXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gYmVmb3JlCiAgICBlbnRlcmluZyB0aGUgbWFpbiBsb29wCiAgLSBhZGQgRFRUIHN1cHBvcnQgZm9yIGFkbTEwMjEgKG5ldyBmaWxlIGR0dC9hZG0xMDIxLmM7IGNvbmZpZwogICAgc2xpZ2h0bHkgZGlmZmVyZW50LiBzZWUgaW5jbHVkZS9jb25maWdzL2h5bW9kLmggZm9yIGFuIGV4YW1wbGUKICAgIChyZXF1aXJlcyBDT05GSUdfRFRUX0FETTEwMjEsIENPTkZJR19EVFRfU0VOU09SUywgYW5kCiAgICBDRkdfRFRUX0FETTEwMjEgZGVmaW5lZCkKICAtIGFkZCBuZXcgImVlcHJvbV9wcm9iZSgpIiBmdW5jdGlvbiB3aGljaCBoYXMgc2ltaWxhciBhcmdzIGFuZAogICAgYmVoYXZlcyBpbiBhIHNpbWlsYXIgd2F5IHRvICJlZXByb21fcmVhZCgpIiBldGMuCiAgLSBhZGQgODI2MCBGQ0MgZXRoZXJuZXQgbG9vcGJhY2sgY29kZSAobmV3ICJldGhfbG9vcGJhY2tfdGVzdCgpIgogICAgZnVuY3Rpb24gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZpbmluZyBDT05GSUdfRVRIRVJfTE9PUEJBQ0tfVEVTVCkKICAtIGdkYnRvb2xzIGNvcHlyaWdodCB1cGRhdGUKICAtIGVuc3VyZSB0aGF0IHNldF9tc3IoKSBleGVjdXRlcyB0aGUgInN5bmMiIGFuZCAiaXN5bmMiIGluc3RydWN0aW9ucwogICAgYWZ0ZXIgdGhlICJtdG1zciIgaW5zdHJ1Y3Rpb24gaW4gY3B1L21wYzgyNjAvaW50ZXJydXB0cy5jCiAgLSA4MjYwIEkvTyBwb3J0cyBmaXg6IE9wZW4gRHJhaW4gc2hvdWxkIGJlIHNldCBsYXN0IHdoZW4gY29uZmlndXJpbmcKICAtIGFkZCBTSVUgSVJRIGRlZmluZXMgZm9yIDgyNjAKICAtIGFsbG93IExEU0NSSVBUIG92ZXJyaWRlIGFuZCBPQkpDRkxBR1MgaW5pdGlhbGl6YXRpb246IGNoYW5nZSB0bwogICAgY29uZmlnLm1rIHRvIGFsbG93IGJvYXJkIGNvbmZpZ3VyYXRpb25zIHRvIG92ZXJyaWRlIHRoZSBHTlUKICAgIGxpbmtlciBzY3JpcHQsIHNlbGVjdGVkIHZpYSB0aGUgTERTQ1JJUFQsIG1ha2UgdmFyaWFibGUsIGFuZCB0bwogICAgZ2l2ZSBhbiBpbml0aWFsIHZhbHVlIHRvIHRoZSBPQkpDRkxBR1MgbWFrZSB2YXJpYWJsZQogIC0gODI2MCBpMmMgZW5oYW5jZW1lbnQ6CiAgICBvIGNvcnJlY3RseSBleHRlbmRzIHRoZSB0aW1lb3V0IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBhbGwKICAgICAgcXVldWVkIG1lc3NhZ2VzIGZvciBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlCiAgICBvIHdpbGwgbm90IGNvbnRpbnVlIHdpdGggcmVjZWl2ZSBpZiB0cmFuc21pdCB0aW1lcyBvdXQKICAgIG8gZW5zdXJlcyB0aGF0IHRoZSBlcnJvciBjYWxsYmFjayBpcyBkb25lIGZvciBhbGwgcXVldWVkIHR4CiAgICAgIGFuZCByeCBtZXNzYWdlcwogICAgbyBjb3JyZWN0bHkgZGV0ZWN0cyBib3RoIHR4IGFuZCByeCB0aW1lb3V0cywgb25seSBkZWxpdmVycyBvbmUgdG8KICAgICAgdGhlIGNhbGxiYWNrLCBhbmQgZG9lcyBub3Qgb3ZlcndyaXRlIGFuIGVhcmxpZXIgZXJyb3IKICAgIG8gbG9naWMgaW4gaTJjX3Byb2JlIG5vdyBjb3JyZWN0CiAgLSBhZGQgInZwcmludGYoKSIgZnVuY3Rpb24gc28gdGhhdCAicGFuaWMoKSIgZnVuY3Rpb24gY2FuIGJlCiAgICB0ZWNobmljYWxseSBjb3JyZWN0CiAgLSBtYW55IEh5bW9kIGJvYXJkIGNoYW5nZXMKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE0IEp1biAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIExvZ290cm9uaWMgREwgZGF0YWxvZ2dlciBib2FyZAogIC0gY2xlYW51cCBzZXJpYWwgbGluZSBhZnRlciBrZXJtaXQgYmluYXJ5IGRvd25sb2FkCiAgLSBhZGQgZGVidWdYIG1hY3JvIChkZWJ1ZyBsZXZlbCBzdXBwb3J0KQogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdC4KCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDEyIEp1biAyMDAzOgogIC0gcmV3cml0ZSBvZiB0aGUgUzNDMjRYMCByZWdpc3RlciBkZWZpbml0aW9ucyBzdHVmZgogIC0gImRyaXZlciIgZm9yIHRoZSBidWlsdC1pbiBTM0MyNFgwIFJUQwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEyIEp1biAyMDAzOgogIC0gQWRkIE1JSSBzdXBwb3J0IGFuZCBFdGhlcm5ldCBQSFkgaW5pdGlhbGl6YXRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQKICAtIEZpeCBpbmNvcnJlY3QgU0lVTUNSIGluaXRpYWxpc2F0aW9uIGNhdXNlZCBieSB3cm9uZyBIYXJkIFJlc2V0CiAgICBjb25maWd1cmF0aW9uIHdvcmQgc3VwcGxpZWQgYnkgRlBHQSBvbiBzb21lIE1QQzgyNjBBRFMgYm9hcmRzCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMCBKdW4gMjAwMzoKICBVbmlmeSBzdGF0dXMgTEVEIGludGVyZmFjZQoKKiBBZGQgc3VwcG9ydCBmb3IgRFMxMjg4NyBSVEM7IGFkZCBSVEMgc3VwcG9ydCBmb3IgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDExIEp1biAyMDAzOgogIE1vZGlmaWNhdGlvbnMgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdAogIC0gQWRkIEF0bWVsIERhdGFGbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nIGFuZCB3cml0aW5nLgogIC0gQWRkIHBvc3NpYmlsaXR5IHRvIGJvb3QgYSBMaW51eCBmcm9tIERhdGFGbGFzaCB3aXRoIEJPT1RNIGNvbW1hbmQuCiAgLSBBZGQgRmxhc2ggZGV0ZWN0aW9uIG9uIEF0bWVsIEFUOTFSTTkyMDBESwogICAgKGJldHdlZW4gQXRtZWwgQVQ0OUJWMTYxNCBhbmQgQVQ0OUJWMTYxNEEgZmxhc2hlcykKICAtIFJlcGxhY2Ugb2xkIEV0aGVybmV0IFBIWSBsYXllciBmdW5jdGlvbnMKICAtIENoYW5nZSBsaW5rIGFkZHJlc3MKCiogUGF0Y2ggYnkgRnJhbmsgU21pdGgsIDkgSnVuIDIwMDM6CiAgdXNlIENSSVRfRVhDRVBUSU9OIGZvciBtYWNoaW5lIGNoZWNrIG9uIDR4eAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMyBKdW4gMjAwMzoKICBhZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgImNhcmluZm8iIGNvbW1hbmQgaW4gY21kX2ltbWFwLmMKCiogRml4IENPTkZJR19ORVRfTVVMVEkgc3VwcG9ydCBpbiBpbmNsdWRlL25ldC5oCgoqIFBhdGNoZXMgYnkgS3lsZSBIYXJyaXMsIDEzIE1hciAyMDAzOgogIC0gQWRkIEZBVCBwYXJ0aXRpb24gc3VwcG9ydAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgRkFUCiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIHZpZGVvCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEVuYWJsZSBNTUMgYW5kIEZBVCBmb3IgbHViYm9jayBib2FyZAogIC0gT3RoZXIgbWlzYyBjaGFuZ2VzIGZvciBsdWJib2NrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgQXByaWwgMDIsIDIwMDM6CiAgZml4IGZvciBTTVNDOTExMTEgZHJpdmVyCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNCBKdW4gMjAwMzoKICBtYWtlIHBwYzQwNSBldGhlcm5ldCBkcml2ZXIgY29tcGF0aWJsZSB3aXRoIENPTkZJR19ORVRfTVVMVEkgb3B0aW9uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgSnVuIDIwMDM6CiAgLSBQUEM0eHg6IEZpeCBidWcgZm9yIGluaXRpYWwgc3RhY2sgaW4gZGF0YSBjYWNoZSBhcyBwb2ludGVkIG91dCBieQogICAgVGhvbWFzIFNjaGFlZmVyICh0c2NoYWVmZXJAZ2lnYS1zdHJlYW0uZGUpLiBOb3cgaW5pdGFsIHN0YWNrIGluCiAgICBkYXRhIGNhY2hlIGNhbiBiZSB1c2VkIGV2ZW4gaWYgdGhlIGNoaXAgc2VsZWN0IGlzIGluIHVzZS4KICAtIENGR19SWF9FVEhfQlVGRkVSIGFkZGVkIHRvIHNldCB0aGUgZXRoZXJuZXQgcmVjZWl2ZSBidWZmZXIgY291bnQKICAgIChzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKS4KICAtIENoYW5nZWQgY29uZmlnIGZpbGVzIG9mIENPTkZJR19FRVBSTzEwMCBib2FyZHMgdG8gdXNlIHRoZQogICAgQ0ZHX1JYX0VUSF9CVUZGRVIgZGVmaW5lLgoKKiBBZGQgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIGF0IDEwMC81MCBNSHoKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIEp1biAyMDAzOgogIG1ham9yIHJlY29uc3RydWN0aW9uIG9mIG5ldHdvcmtpbmcgY29kZTsKICBhZGQgInBpbmciIHN1cHBvcnQgKG91dGdvaW5nIG9ubHkhKQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgSnVuZSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1VCBib2FyZAoKKiBQYXRjaGVzIGJ5IFVkaSBGaW5rZWxzdGVpbiwgMiBKdW5lIDIwMDM6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20ga2V5Ym9hcmRzLCBpbml0aWFsaXplZCBieSBkZWZpbmluZyBhCiAgICBib2FyZC1zcGVjaWZpYyBkcnZfa2V5Ym9hcmRfaW5pdCBhcyB3ZWxsIGFzIGRlZmluaW5nIENPTkZJR19LRVlCT0FSRCAuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUkJDODIzIGJvYXJkLgogIC0gY3B1L21wYzh4eC9sY2QuYyBub3cgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIHRoZQogICAgSG9yaXpvbnRhbCBQaXhlbCBDb3VudCBmaWVsZC4KCiogRml4IGFsaWdubWVudCBwcm9ibGVtIGluIEJPT1RQIChkaGNwX2xlYXNldGltZSBvcHRpb24pCiAgW3BvaW50ZWQgb3V0IGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDIgSnVuIDIwMDNdCgoqIFBhdGNoIGJ5IE1hcmsgUmFrZXMsIDE0IE1heSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBlMTAwMCBnaWcgY2FyZHMuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDMgSnVuIDIwMDM6CiAgZml4IGNyaXRpY2FsIHR5cG8gaW4gTUFNUiBkZWZpbml0aW9uIChpbmNsdWRlL21wYzh4eC5oKQoKKiBGaXggcmVxdWlyZW1lbnQgdG8gYWxpZ24gVS1Cb290IGltYWdlIG9uIDE2IGtCIGJvdW5kYXJpZXMgb24gUFBDLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAyIEp1biAyMDAzCiAgTWlub3IgY2hhbmdlcyBmb3IgS1VQNEsgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjkgTWF5IDIwMDM6CiAgRml4ZWQgcmFycCBib290IG1ldGhvZCBmb3IgSUEzMiBhbmQgb3RoZXIgbGl0dGxlLWVuZGlhbiBDUFVzLgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjggTWF5IDIwMDM6CiAgQWRkZWQgcG9ydCBJL08gY29tbWFuZHMuCgoqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMjggTWF5IDIwMDMKICAtIGNwdS9tcGM4MjR4L3N0YXJ0LlM6IGZpeCByZWxvY2F0aW9uIGNvZGUgd2hlbiBib290aW5nIGZyb20gUkFNCiAgLSBtaW5vciBwYXRjaGVzIGZvciB1dHg4MjQ1CgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMjggTWF5IDIwMDM6CiAgeDg2IHVwZGF0ZQoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCA5IE1heSAyMDAzICsgMjcgTWF5IDIwMDM6CiAgYWRkIG5hbmQgZmxhc2ggc3VwcG9ydCB0byBTWE5JODU1VCBjb25maWd1cmF0aW9uCiAgZml4L2V4dGVuZCBuYW5kIGZsYXNoIHN1cHBvcnQ6CiAgLSBmaXggJ25hbmQgZXJhc2UnIGNvbW1hbmQgc28gZG9lcyBub3QgZXJhc2UgYmFkIGJsb2NrcwogIC0gZml4ICduYW5kIHdyaXRlJyBjb21tYW5kIHNvIGRvZXMgbm90IHdyaXRlIHRvIGJhZCBibG9ja3MKICAtIGZpeCBuYW5kX3Byb2JlKCkgc28gaGFuZGxlcyBubyBmbGFzaCBkZXRlY3RlZCBwcm9wZXJseQogIC0gYWRkIGRvYy9SRUFETUUubmFuZAogIC0gYWRkIC5qZmZzMiBhbmQgLm9vYiBvcHRpb25zIHRvIG5hbmQgcmVhZC93cml0ZQogIC0gYWRkICduYW5kIGJhZCcgY29tbWFuZCB0byBsaXN0IGJhZCBibG9ja3MKICAtIGFkZCAnY2xlYW4nIG9wdGlvbiB0byAnbmFuZCBlcmFzZScgdG8gd3JpdGUgSkZGUzIgY2xlYW4gbWFya2VycwogIC0gbWFrZSBOQU5EIHJlYWQvd3JpdGUgZmFzdGVyCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyMyBNYXkgMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogR2V0IChtb3N0bHkpIHJpZCBvZiBDRkdfTU9OSVRPUl9MRU4gZGVmaW5pdGlvbjsgY29tcHV0ZSByZWFsIGxlbmd0aAogIGluc3RlYWQgQ0ZHX01PTklUT1JfTEVOIGlzIG5vdyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lCSBfYXRfY29tcGlsZV8KICBfdGltZV8gICghKSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBVLUJvb3QgaW1hZ2UsCiAgb3IgaW4gYSBzZXBhcmF0ZSBmbGFzaCBzZWN0b3IuCgoqIENsZWFudXAgQ0ZHX0RFUiAjZGVmaW5lcyBpbiBjb25maWcgZmlsZXMgKHdkIG1haW50YWluZWQgb25seSkKCiogRml4IGRhdGEgYWJvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBhcm05MjB0IENQVQoKKiBGaXggYWxpZ25tZW50IHByb2JsZW1zIHdpdGggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IERvbmFsZCBXaGl0ZSwgMjEgTWF5IDIwMDM6CiAgZml4IGNhbGN1bGF0aW9uIG9mIGJhc2UgYWRkcmVzcyBpbiBwY2lfaG9zZV9jb25maWdfZGV2aWNlKCkKCiogRml4IGJ1ZyBpbiBjb21tYW5kIGxpbmUgcGFyc2luZzogImNtZDE7Y21kMiIgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCiAgZXhlY3V0ZSAiY21kMiIsIGV2ZW4gaWYgImNtZDEiIGZhaWxzLiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQKICB0byAicnVuIHZhcjEgdmFyMiIgd2hlcmUgdGhlIGNvbnRlbnRzIG9mICJ2YXIyIiB3aWxsIE5PVCBiZQogIGV4ZWN1dGVkIHdoZW4gYSBjb21tYW5kIGluICJ2YXIxIiBmYWlscy4KCiogQWRkIHplcm8tY29weSByYW1kaXNrIHN1cHBvcnQgKHJlcXVpcmVzIGNvcnJlc3BvbmRpbmcga2VybmVsIHN1cHBvcnQhKQoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMjAgTWF5IDIwMDM6CiAgSW4gcHJlcGFyYXRpb24gZm9yIGFuIGl4cCBwb3J0LCByZW5hbWUgY3B1L3hzY2FsZSBhbmQgYXJjaC14c2NhbGUKICBpbnRvIGNwdS9weGEgYW5kIGFyY2gtcHhhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIzIE1heSAyMDAzOgogIC0gSUJNIFBQQzQwNUVQIHBvcnQgYWRkZWQuCiAgLSBDT05GSUdfVUFSVDFfQ09OU09MRSBhZGRlZC4gSWYgZGVmaW5lZCBpbnRlcm5hbCBVQVJUMSAoYW5kIG5vdAogICAgVUFSVDApIGlzIHVzZWQgYXMgZGVmYXVsdCBVLUJvb3QgY29uc29sZS4gUFBDNHh4IG9ubHkhCiAgLSBlc2QgQVNINDA1IGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCkuCiAgLSBCVUJJTkdBNDA1RVAgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkIC0gSUJNIEV2YWwgQm9hcmQpLgogIC0gZXNkIENQQ0k0MDVBQiBib2FyZCBhZGRlZC4KICAtIGVzZCBQTUM0MDUgYm9hcmQgYWRkZWQuCiAgLSBVcGRhdGUgb2Ygc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTkgTWFpIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUtMyBib2FyZAoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAyMiBNYXkgMjAwMzoKICBGaXggcHJvYmxlbSB3aXRoIG9ubHkgcGFydGlhbGx5IGNsZWFyZWQgLmJzcyBzZWdtZW50CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMiBNYXkgMjAwMzoKICBnZXQgUENJIHRvIHdvcmsgb24gYSBNUEM4MjY2QURTIGJvYXJkOyBpbmNvcnBvcmF0ZSBjaGFuZ2UgdG8KICBjcHUvbXBjODI2MC9wY2kuYyB0byBlbmFibGUgb3ZlcnJpZGVzIG9mIFBDSSBtZW1vcnkgcGFyYW1ldGVycwoKKiBQYXRjaCBieSBOeWUgTGl1LCAxIE1heSAyMDAzOgogIG1pbm9yIHBhdGNoZXMgZm9yIHRoZSBGQURTOHh4CgoqIFBhdGNoIGJ5IFRob21hcyBTY2jkZmVyLCAyOCBBcHIgMjAwMzoKICBGaXggU1BEIGhhbmRsaW5nIGZvciAyNTYgRUNDIERJTU0gb24gV2FsbnV0CgoqIEFkZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgYml0bWFwcyBmb3IgVFJBQidzCVZGRCBjb21tYW5kOwogIGFsbG93IHRvIHBhc3MgYm9vdCBiaXRtYXAgYWRkcmVzc2VzIGluIGVudmlyb25tZW50IHZhcmlhYmxlczsKICBhbGxvdyBmb3IgemVybyBib290IGRlbGF5CgoqIFBhdGNoIGJ5IENocmlzdGlhbiBHZWnfaW5nZXIsIDE5IE1heSAyMDAyOgogIE9uIFRSQUI6IHdhaXQgdW50aWwgdGhlIGR1bW15IGJ5dGUgaGFzIGJlZW4gY29tcGxldGVseSBzZW50CgoqIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMjIgQXByIDIwMDM6CiAgdXBkYXRlIGZvciBDcmF5TDEgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDIxIEFwciAyMDAzOgogIGFkZCBib290IHN1cHBvcnQgZm9yIEFSVE9TIChhIHByb3ByaWV0YXJ5IE9TKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMSBBcHIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMzOAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDI0IEphbiAyMDAzOgogIEZpeCBjb3VudGluZyBvZiBleHRlbmRlZCBwYXJ0aXRpb25zIGluIGRpc2tib290IGNvbW1hbmQKCiogUGF0Y2ggYnkgQ2hyaXN0b3BoZSBMaW5kaGVpbWVyLCAyMCBNYXkgMjAwMzoKICBhbGxvdyB0aGUgdXNlIG9mIENGR19MT0FEUyB3aGVuIENGR19OT19GTEFTSCBpcyBzZXQKCiogRml4IFNEUkFNIHRpbWluZyBvbiBQdXJwbGUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBvbiBBVEMgYm9hcmQKICAoaW5jbHVkZXMgc3VwcG9ydCBmb3IgSW50ZWwgODIzNjUgYW5kIGNvbXBhdGlibGUgUEMgQ2FyZCBjb250cm9sbGVycywKICBhbmQgWWVudGEtY29tcGF0aWJsZSBQQ0ktdG8tQ2FyZEJ1cyBjb250cm9sbGVycykKCiogUGF0Y2ggYnkgTWF0aGlqcyBIYWFybWFuLCAwOCBNYXkgMjAwMzoKICBBZGQgbGFuOTFjOTYgZHJpdmVyICh0ZXN0ZWQgb24gTHViYm9jayBhbmQgY3VzdG9tIFBYQTI1MCBib2FyZCBvbmx5KQoKKiBGaXggcHJvYmxlbSB3aXRoIHVzYWdlIG9mICJ0cnVlIiAodW5kZWZpbmVkIGluIGN1cnJlbnQgdmVyc2lvbnMgb2YgYmZkLmgpCgoqIEFkZCBzdXBwb3J0IGZvciBQcm9tZXNzIEFUQyBib2FyZAoKKiBQYXRjaCBieSBLZWl0aCBPdXR3YXRlciwgMjggQXByIDIwMDM6CiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIGFuZCBhZGRpdGlvbnMgdG8gR0VOODYwVCBib2FyZCBzcGVjaWZpYyBjb2RlLgogIC0gQWRkZWQgR0VOODYwX1NDIHZhcmlhbnQgdG8gR0VOODYwVC4KICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgdG8gR0VOODYwVCBkb2N1bWVudGF0aW9uLgogIC0gQ29ycmVjdCBkdXBsaWNhdGUgZW50cnkgaW4gVS1Cb290IENSRURJVFMgZmlsZS4KICAtIEFkZCBHRU44NjBUX1NDIGVudHJ5IGluIE1BSU5UQUlORVJTIGZpbGUuCiAgLSBVcGRhdGUgQ1JFRElUUyBmaWxlIHdpdGggR0VOODYwVF9TQyBpbmZvLgoKKiBVcGRhdGUgU21pdGhzIEFlcm9zcGFjZSBhZGRyZXNzZXMgaW4gTUFJTlRBSU5FUlMgZmlsZQoKKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gaHVzaCdzIHZlcnNpb24gb2YgInJ1biIgY29tbWFuZAoKKiBMV01PTiBleHRlbnNpb25zOgogIC0gU3BsYXNoc2NyZWVuIHN1cHBvcnQKICAtIG1vZGVtIHN1cHBvcnQKICAtIHN5c21vbiBzdXBwb3J0CiAgLSB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgZW5hYmxpbmcgb2YgTENECgoqIEFsbG93IGJvb3RpbmcgZnJvbSBvbGQgIlBQQ0Jvb3QiIGRpc2sgcGFydGl0aW9ucwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI1NSBCb2FyZCAvIE1QQzgyNTUgQ1BVCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIHN1cmUgQmxvY2sgTG9jayBCaXRzIGdldCBjbGVhcmVkIGluIFIzNjBNUEkgZmxhc2ggZHJpdmVyCgoqIE1QQzgyMyBMQ0QgZHJpdmVyOiBGaWxsIGNvbG9yIG1hcCBiYWNrd2FyZHMsIHRvIGFsbG93IGZvciBzdGVhZHkKICBkaXNwbGF5IHdoZW4gTGludXggdGFrZXMgb3ZlcgoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUyAodGhpcyB0aW1lIGZvciByZWFsKS4KCiogQWRkIHN1cHBvcnQgZm9yICJibXAgaW5mbyIgYW5kICJibXAgZGlzcGxheSIgY29tbWFuZHMgdG8gbG9hZAogIGJpdG1hcCBpbWFnZXM7IHRoaXMgY2FuIGJlIHVzZWQgKGZvciBleGFtcGxlIGluIGEgInByZWJvb3QiCiAgY29tbWFuZCkgdG8gZGlzcGxheSBhIHNwbGFzaCBzY3JlZW4gdmVyeSBxdWlja2x5IGFmdGVyIHBvd2Vyb24uCgoqIEFkZCBzdXBwb3J0IGZvciAxMzMgTUh6IGNsb2NrIG9uIElOQ0EtSVAgYm9hcmQKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDEwIEFwciAyMDAzOgogIFVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKKiBBZGQgbmV3IG1lYW5pbmcgdG8gImF1dG9zdGFydCIgZW52aXJvbm1lbnQgdmFyaWFibGU6CiAgSWYgc2V0IHRvICJubyIsIGEgc3RhbmRhbG9uZSBpbWFnZSBwYXNzZWQgdG8gdGhlCiAgImJvb3RtIiBjb21tYW5kIHdpbGwgYmUgY29waWVkIHRvIHRoZSBsb2FkIGFkZHJlc3MKICAoYW5kIGV2ZW50dWFsbHkgdW5jb21wcmVzc2VkKSwgYnV0IE5PVCBiZSBzdGFydGVkLgogIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9hZCBhbmQgdW5jb21wcmVzcyBhcmJpdHJhcnkKICBkYXRhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEFwciAyMDAzOgogIENoYW5nZWQgREhDUCBjbGllbnQgdG8gdXNlIElQIGFkZHJlc3MgZnJvbSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NAogIGZyb20gdGhlIE9GRkVSIHBhY2tldCBpbiB0aGUgc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQgaW4gdGhlIFJFUVVFU1QKICBwYWNrZXQuIFRoaXMgZml4ZXMgYSBwcm9ibGVtIHVzaW5nIGEgV2luZG93cyAyMDAwIERIQ1Agc2VydmVyLAogIHdoZXJlIHRoZSBESENQLXNlcnZlciBpcyBub3QgdGhlIFRGVFAtc2VydmVyLgoKKiBTZXQgbWF4IGJyaWdodG5lc3MgZm9yIE1OMTEyMzYgZGlzcGxheXMgb24gVFJBQiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBtb2R1bGVzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgNCBBcHIgMjAwMzoKICBBZGQgSURNQSBleGFtcGxlIGNvZGUgKHRlc3RlZCBvbiA4MjYwIG9ubHkpCgoqIEFkZCBzdXBwb3J0IGZvciBQdXJwbGUgQm9hcmQgKE1JUFM2NCA1S2MpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTNjQgNUtjIENQVXMKCiogRml4IG1pc3Npbmcgc2V0dGluZyBvZiAibG9hZGFkZHIiIGFuZCAiYm9vdGZpbGUiIG9uIEFSTSBhbmQgTUlQUwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgQXByIDIwMDM6CiAgLSB1cGRhdGUgTUlQNDA1LTQgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IEFwciAyMDAzOgogIC0gVS1Cb290IHZlcnNpb24gZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgYWRkZWQKICAgIChDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSkuCiAgLSBDaGFuZ2VkIFBQQzQwNUdQciB2ZXJzaW9uIGZyb20gQSB0byBCLgogIC0gQ2hhbmdlZCBDUENJNDA1IHRvIHVzZSBDVFMgaW5zdGVhZCBvZiBEU1Igb24gUFBDNDA1IFVBUlQxLgoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCAwMyBBcHJpbCAyMDAzOgogIC0gZml4IFBDSSBJUlFzIG9uIE1QTCBib2FyZHMKICAtIGZpeCB0d28gbW9yZSB1bi1yZWxvY2F0ZWQgcG9pbnRlciBwcm9ibGVtcwoKKiBGaXggYmVoYXZpb3VyIG9mICJydW4iIGNvbW1hbmQ6CiAgLSBwcmludCBlcnJvciBtZXNzYWdlIGl2IHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0CiAgLSB0ZXJtaW5hdGUgcHJvY2Vzc2luZyBvZiBhcmd1bWVudHMgaW4gY2FzZSBvZiBlcnJvcgoKKiBQYXRjaGVzIGJ5IFBldGVyIEZpZ3VsaSwgMTAgTWFyIDIwMDMKICAtIEFkZCBzdXBwb3J0IGZvciBCVFVBUlQgb24gUFhBIHBsYXRmb3JtCiAgLSBBZGQgc3VwcG9ydCBmb3IgV0VQIEVQMjUwIChQWEEpIGJvYXJkCgoqIEZpeCBmbGFzaCBwcm9ibGVtcyBvbiBJTkNBLUlQOyBhZGQgdG9vbCB0byBhbGxvdyBicnVuaW5nIGltYWdlcyAgdG8KICBmbGFzaCB1c2luZyBhIEJESTIwMDAKCiogSW1wbGVtZW50IGZpeCBmb3IgSTJDIEVkZ2UgQ29uZGl0aW9ucyBwcm9ibGVtIGZvciBhbGwgYm9hcmRzIHRoYXQKICB1c2UgdGhlIGJpdC1iYW5naW5nIGRyaXZlciAoY29tbW9uL3NvZnRfaTJjLmMpCgoqIFBhdGNoIGJ5IE1hcnRpbiBXaW5pc3RvZXJmZXIsIDIzIE1hciAyMDAzCiAgLSBBZGQgcG9ydCB0byBNUEM1NTUvNTU2IG1pY3JvY29udHJvbGxlcnMKICAtIEFkZCBzdXBwb3J0IGZvciBjbWkgY3VzdG9tZXIgYm9hcmQgd2l0aAogICAgSW50ZWwgMjhGMTI4SjNBLCAyOEYzMjBKM0Egb3IgMjhGNjQwSjNBIGZsYXNoLgoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDI4IE1hciAyMDAzOgogIC0gZml4IGNvbW1vbi9jbWRfbmFuZC5jCgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCAyNCBNYXIgMjAwMzoKICAtIGFkZCB0aHJlYWRzIC8gc2NoZWR1bGVyIGV4YW1wbGUgY29kZQoKKiBBZGQgcGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDMxIE1hciAyMDAzOgogIC0gYWRkIGN0cmwtYyBzdXBwb3J0IGZvciBrZXJtaXQgZG93bmxvYWQKICAtIGFsaWduIGJkaW5mbyBvdXRwdXQgb24gQVJNCiAgLSBjc2IyMjYgYm9hcmQ6IGJyaW5nIGluIHN5bmMgd2l0aCBpbm5va29tL21lbXNldHVwLlMKICAtIGNzYjIyNiBib2FyZDogZml4IE1EUkVGUiBoYW5kbGluZwogIC0gbWlzYyBkb2MgZml4ZXMgLyBleHRlbnNpb25zCiAgLSBpbm5va29tIGJvYXJkOiBjbGVhbnVwLCBNRFJFRlIgZml4IGluIG1lbXNldHVwLlMsIGNvbmZpZyB1cGRhdGUKICAtIGFkZCBCT09UX1BST0dSRVNTIHRvIGFybWxpbnV4LmMKCiogQWRkIENQVSBJRCwgdmVyc2lvbiwgYW5kIGNsb2NrIHNwZWVkIGZvciBJTkNBLUlQCgoqIFBhdGNoZXMgYnkgRGF2ZSBFbGxpcywgMTggTWFyIDIwMDMgZm9yIFNYTkk4NTVUIGJvYXJkOgogIC0gZml4IFNSQU0gYW5kIFNEUkFNIG1lbW9yeSBzaXppbmcKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQKICAtIGFkZCBNQUMgYWRkcmVzcyBmb3Igc2Vjb25kIChTQ0MxKSBldGhlcm5ldCBwb3J0CgoqIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBUUU04MjYwIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTYgTWFyIDIwMDM6CiAgLSBBZGQgTkFORCBmbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgZXJhc2luZyBOQU5ECiAgICBmbGFzaCAoY2VydGFpbiBmb3JtcyBvZiB3aGljaCBhcmUgY2FsbGVkIFNtYXJ0TWVkaWEpLgogIC0gQWRkIHN1cHBvcnQgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE5IE1hciAyMDAzOgogIC0gdXNlIGFybS1saW51eC1nY2MgYXMgZGVmYXVsdCBjb21waWxlciBmb3IgQVJNCiAgLSBmaXggaTJjIGZpeHVwIGNvZGUKICAtIGZpeCBtaXNzaW5nIGJhdWRyYXRlIHNldHRpbmcKICAtIGFkZGVkICRsb2FkYWRkciAvIENGR19MT0FEX0FERFIgc3VwcG9ydCB0byBsb2FkYgogIC0gbW92ZWQgImlnbm9yaW5nIHRyYWlsaW5nIGNoYXJhY3RlcnMiIF9iZWZvcmVfIHUtYm9vdCB3YW50cyB0bwogICAgcHJpbnQgb3V0IGRpYWdub3N0aWNzIG1lc3NhZ2VzOyByZW1vdmVzIGJvZ3VzIGNoYXJhY3RlcnMgYXQgdGhlCiAgICBlbmQgb2YgdHJhbnNtaXNzaW9uCgoqIFBhdGNoIGJ5IEpvaG4gWmhhbiwgMTggTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNpbm9WZWUgTWljcm9zeXN0ZW1zIFNDOHh4IGJvYXJkcwoKKiBQYXRjaCBieSBSb2xmIE9mZmVybWFubnMsIDIxIE1hciAyMDAzOgogIHBvcnRlZCB0aGUgZG5wMTExMCByZWxhdGVkIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCBhcm1ib290IGN2cyB0bwogIGN1cnJlbnQgdS1ib290IGN2cy4gc21jOTExMTEgZG9lcyBub3Qgd29yay4gcHJvYmxlbSBtYXJrZWQgaW4KICBzbWM5MTExMS5jLCBncmVwIGZvciAiRklYTUUiLgoKKiBQYXRjaCBieSBCcmlhbiBBdWxkLCAyNSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU1RNIGZsYXNoIGNoaXBzIG9uIGVib255IGJvYXJkCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODI1MCBCb2FyZHMgKFBNODI1IG1vZHVsZSkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNSBNYXIgMjAwMzoKICAtIFBDSTQwNSB1cGRhdGUuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgTWFyIDIwMDM6CiAgLSBDUENJNDA1MiB1cGRhdGUgKHN1cHBvcnQgZm9yIHJldmlzaW9uIDMpLgogIC0gU2V0IGVkZ2UgY29uZGl0aW9uaW5nIGNpcmN1aXRyeSBvbiBQUEM0MDVHUHIgZm9yIGNvbXBhdGliaWxpdHkKICAgIHRvIGV4aXN0aW5nIFBQQzQwNUdQIGRlc2lnbnMuCiAgLSBDbGlwIHVkaXYgdG8gNSBiaXRzIG9uIFBQQzQwNSAoc2VyaWFsLmMpLgoKKiBFeHRlbmQgSU5DQUlQIGJvYXJkIHN1cHBvcnQ6CiAgLSBhZGQgYXV0b21hdGljIFJBTSBzaXplIGRldGVjdGlvbgogIC0gYWRkICJiZGluZm8iIGNvbW1hbmQKICAtIHBhc3MgZmxhc2ggYWRkcmVzcyBhbmQgc2l6ZSB0byBMaW51eCBrZXJuZWwKICAtIHN3aXRjaCB0byAxNTAgTUh6IGNsb2NrCgoqIEF2b2lkIGZsaWNrZXIgb24gdGhlIFRSQUIncyBWRkQgYnkgc3luY2hyb25pemluZyB0aGUgZW5hYmxlIHdpdGgKICB0aGUgSFNZTkMvVlNZTkMuIFJlcXVpcmVzIG5ldyBDUExEIGNvZGUgKFZlcnNpb24gMTAxIGZvciBSZXYuIDEwMAogIGJvYXJkcywgdmVyc2lvbiAxNTMgZm9yIFJldi4gMjAwIGJvYXJkcykuCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAxMiBNYXIgMjAwMzoKICBGaXggcmVsb2NhdGlvbiBwcm9ibGVtIG9mIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc3RyaW5nIHBvaW50ZXJzCiAgaW4gY29tbW9uL2NtZF9wY2kuYwoKKiBQYXRjaCBieSBLYWktVXdlIEJs9m0sIDEyIE1hciAyMDAzOgogIENsZWFudXAgJiBidWcgZml4ZXMgZm9yIEpGRlMyIGNvZGU6CiAgLSB0aGUgbWVtb3J5IG1hbmdlbWVudCB3YXMgYnJva2VuLiBJdCBjYXVzZWQgaGF2b2Mgb24gbWFsbG9jIGJ5CiAgICB3cml0aW5nIGJleW9uZCB0aGUgYmxvY2sgYm91bmRhcmllcy4KICAtIHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIGZpbGVzIHdhcyB3cm9uZywgc29tZXRpbWVzIHJlc3VsdGluZwogICAgaW4gc2hvcnQgZmlsZSByZWFkcy4KICAtIGRhdGEgY29weWluZyBub3cgb3B0aW9uYWxseSB0YWtlcyBmcmFnbWVudCB2ZXJzaW9uIG51bWJlcnMgaW50bwogICAgYWNjb3VudCwgdG8gYXZvaWQgY29weWluZyBmcm9tIG9sZGVyIGRhdGEuCiAgU2VlIGRvYy9SRUFETUUuSkZGUzIgZm9yIGRldGFpbHMuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTIgTWFyIDIwMDM6CiAgLSAxNi8zMiBNQiBhbmQgNTAvODAgTUh6IHN1cHBvcnQgd2l0aCBhdXRvLWRldGVjdGlvbiBmb3IgSVA4NjAKICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQQzQ1CiAgLSBuZXcgQk9PVFJPTS9GTEFTSDAgYW5kIERPQyBiYXNlIGZvciBQTTgyNgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEyIE1hciAyMDAzOgogIEZpeCB0aGUgY2hwYXJ0IGNvbW1hbmQgb24gaW5ub2tvbSBib2FyZAoKKiBOYW1lIGNsZWFudXA6CiAgbXYgaW5jbHVkZS9hc20taTM4Ni9wcGNib290LWkzODYuaCBpbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKICBzL1BQQ0Jvb3QvVS1Cb290LyBpbiBzb21lIGZpbGVzCiAgcy9wSW1hZ2UvdUltYWdlLyAgaW4gc29tZSBmaWxlcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNSBKYW4gMjAwMzoKICBGaXggJycgY29tbWFuZCBsaW5lIHF1b3RpbmcKCiogUGF0Y2ggYnkgVGhlIExFT1ggdGVhbSwgMTkgSmFuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVMUFQ4NjAgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBEYWxsYXMgZHMxNjR4IFJUQwoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMzEgSmFuIDIwMDM6CiAgLSBtaW5pbWFsIHNldHVwIGZvciBDYXJkQnVzIGJyaWRnZXMKICAtIGFkZCBFRVBST00gcmVhZC93cml0ZSBzdXBwb3J0IGluIHRoZSBDUzg5MDAgZHJpdmVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0aW4gSTJDIGNvbnRyb2xsZXIgaW4gdGhlIFNhbXN1bmcgczNjMjR4MCBjaGlwcwogIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEZlYiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3CgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCA1IEZlYiAyMDAzOgogIGZpeCBQTFBSQ1IvU0NDUiBpbml0IHNlcXVlbmNlIG9uIDh4eCB0byBhbGxvdyBmb3IKICBjaGFuZ2VzIG9mIEVCREYgYnkgc29mdHdhcmUKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA3IEZlYiAyMDAzOgogICJBUEktY29tcGF0aWJpbGl0eSBwYXRjaCIgZm9yIDR4eCBJMkMgZHJpdmVyCgoqIFRSQUIgZml4ZXMgLyBleHRlbnNpb25zOgogIC0gUmVzdG9yZSBWRkQgYnJpZ2h0bmVzcyBhcyBzYXZlZCBpbiBlbnZpcm9ubWVudAogIC0gYWRkIHN1cHBvcnQgZm9yIEZ1aml0c3UgZmxhc2hlcwogIC0gbWFrZSBzdXJlIGJvdGggYnV6emVycyBhcmUgdHVybmVkIG9mZiAoZHJpdmUgbG93IGxldmVsKQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDYgTWFyIDIwMDM6CiAgLSBmaXggYnVnIGluIEJPT1RQIGNvZGUgKG11c3QgdXNlIE5ldENvcHlJUCkKICAtIHVwZGF0ZSBvZiBDU0IyMjYgcG9ydAogIC0gY2xlYXIgQlNTIHNlZ21lbnQgb24gWFNjYWxlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBpMmNfaW5pdF9ib2FyZCgpIGZ1bmN0aW9uCiAgLSB1cGRhdGUgdG8gdGhlIElubm9rb20gcGxhdHRmb3JtCgoqIEV4dGVuZCBzdXBwb3J0IGZvciByZWR1bmRhbmQgZW52aXJvbm1lbnRzIGZvciBjb25maWd1cmF0aW9ucyB3aGVyZQogIGVudmlyb25tZW50IHNpemUgPCBzZWN0b3Igc2l6ZQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTMgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE5IEZlYiAyMDAzOgogIHBhdGNoZXMgZm9yIHRoZSBJbnRlbCBsdWJib2NrIGJvYXJkOgogIG1lbXNldHVwLlMgLSBnZW5lcmFsIGNsZWFudXAgKGJhc2VkIG9uIFJvYmVydCdzIGNzYjIyNiBjb2RlKQogIGZsYXNoLmMgLSBvdmVyaGF1bCwgYWN0dWFsbHkgd29ya3Mgbm93CiAgbHViYm9jay5jIC0gZml4IGluaXQgZnVuY3MgdG8gcmV0dXJuIHByb3BlciB2YWx1ZQoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjYgRmViIDIwMDM6CiAgLSBGaXhlZCBvZmYgYnkgb25lIGluIFJGVEEgY2FsY3VsYXRpb24uCiAgLSBObyBuZWVkIHRvIGFib3J0IHdoZW4gTERGIGlzIGxvd2VyIHRoYW4gd2UgY2FuIHByb2dyYW0gaXQncyBvbmx5CiAgICBtaW5pbXVtIHRpbWluZyBzbyBjbGFtcCBpdCB0byB3aGF0IHdlIGNhbiBkby4KICAtIFRha2VzIGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIHNwZF9udnJhbS4gVXNlZnVsbAogICAgZm9yIGZha2luZyBkYXRhIG9yIGhhcmRjb2RlIGEgbW9kdWxlIHdpdGhvdXQgdGhlIG52cmFtLgogIC0gZml4IG90aGVyIHVzZXIgZm9yIGFib3ZlIGNoYW5nZQogIC0gZml4IHNvbWUgY29tbWVudHMuCgoqIFBhdGNoZXMgYnkgQnJpYW4gV2FpdGUsIDI2IEZlYiAyMDAzOgogIC0gZml4IHBvcnQgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBzY2FuCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxIE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBFTUsgVE9QODYwIE1vZHVsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwMiBNYXIgMjAwMzoKICBBZGQgU1BEIEVFUFJPTSBzdXBwb3J0IGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjEgSmFuIDIwMDM6CiAgLSBBZGQgc3VwcG9ydCBmb3IgSW5ub2tvbSBib2FyZAogIC0gRG9uJ3QgY29tcGxhaW4gaWYgImluc3RhbGwiIGZhaWxzCiAgLSBSRUFETUUgY2xlYW51cCAocmVtb3ZlIGR1cGxpY2F0ZWQgbGluZXMpCiAgLSBVcGRhdGUgUFhBIGhlYWRlciBmaWxlcwoKKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZXhpc3RpbmcgUE9TVCBjb2RlIChkb2MvUkVBRE1FLlBPU1QpCgoqIFBhdGNoIGJ5IExhdWRuZXkgUmVuLCAxNSBKYW4gMjAwMzoKICBGaXggaGFuZGxpbmcgb2YgcmVkdW5kYW5kIGVudmlyb25tZW50IGluICJ0b29scy9lbnZjcmMuYyIKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjggRmViIDIwMDM6CiAgQWRkIGJlZGJ1ZyBzdXBwb3J0IGZvciA4MjR4IHN5c3RlbXMKCiogQWRkIHN1cHBvcnQgZm9yIDE2IE1CIGZsYXNoIGNvbmZpZ3VyYXRpb24gb2YgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUwoKKiBBZGQgaW1hZ2UgaW5mb3JtYXRpb24gdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggRmViIDIwMDM6CiAgQ1BDSUlTRVI0IGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBGZWIgMjAwMzoKICBGaXhlZCBidWcgaW4gZXh0LiBzZXJpYWwgY2xvY2sgc2V0dXAgb24gUFBDNDA1IChzaW5jZSBQUEM0NDAgcG9ydCkuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgRmViIDIwMDM6CiAgQWRkICJwY2lkZWxheSIgZW52aXJvbm1lbnQgdmFyaWFibGUgKGluIG1zLCBlbmFibGVkIHZpYQogIENPTkZJR19QQ0lfQk9PVERFTEFZKS4KICBQQ0kgc3BlYyAyLjIgZGVmaW5lcywgdGhhdCBhIHBjaSB0YXJnZXQgaGFzIDJeMjUgcGNpIGNsb2NrcyBhZnRlcgogIFJTVCMgdG8gcmVzcG9uZCB0byBjb25maWd1cmF0aW9uIGN5Y2xlcyAoMzNNSHogLT4gMXMpLgoKKiBGaXggZHVhbCBQQ01DSUEgc2xvdCBzdXBwb3J0ICh3aGVuIHJ1bm5pbmcgd2l0aCBqdXN0IG9uZQogIHNsb3QgcG9wdWxhdGVkKQoKKiBBZGQgVkZEIHR5cGUgZGV0ZWN0aW9uIHRvIHRyYWIgYm9hcmQKCiogZXh0ZW5kIGRyaXZlcnMvY3M4OTAwLmMgZHJpdmVyIHRvIHN5bmNocm9uaXplCSBldGhhZGRyICBlbnZpcm9ubWVudAogIHZhcmlhYmxlIHdpdGggdmFsdWUgaW4gdGhlIEVFUFJPTQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciA0TUIgYW5kIDEyOE1CIG9uYm9hcmQgU0RSQU0gKGNwdS9wcGM0eHgvc2RyYW0uYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFMzMiA0S2MgQ1BVcwoKKiBBZGQgc3VwcG9ydCBmb3IgSU5DQS1JUCBCb2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIGR1YWwgZXRoZXJuZXQgc3VwcG9ydCBvbiBQTTgyNgoKKiBBZGQgc3VwcG9ydCBmb3IgTFhUOTcxIFBIWSBvbiBQTTgyNgoKKiBQYXRjaCBieSBUb3JkIEFuZGVyc3NvbiwgMTYgSmFuIDIwMDM6CiAgRml4IGZsYXNoIHNlY3RvciBjb3VudCBmb3IgVFFNOHh4TAoKKiBGaXggSTJDIEVFUFJPTSBwcm9ibGVtIG9uIElDVTg2MiBib2FyZCAod291bGQgb25seSB3cml0ZSB0aGUgZmlyc3QKICAxNiBieXRlcyBvdXQgb2YgZWFjaCAzMiBieXRlIGJsb2NrKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIFYzNyBib2FyZAogIChwYXRjaCBieSBK824gQmVuZWRpa3Rzc29uLCAxMSBEZWMgMjAwMikKCiogVXBkYXRlIGJhdWRyYXRlIGluIGJkX2luZm8gd2hlbiBpdCBnZXRzIGNoYW5nZWQKCiogQWRkIHdhdGNoZG9nIHRyaWdnZXIgcG9pbnRzIHdoaWxlIHdhaXRpbmcgZm9yIHNlcmlhbCBwb3J0CiAgKHNvIGZhciBvbmx5IDh4eCAtLSBuZWVkZWQgb24gTFdNT04gd2l0aCAxMDBtcyB3YXRjaGRvZykKCiogSW1wcm92ZSBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGZpZ3VyYXRpb24gb2YgdGhlIHV0aWxpdHksIHVzaW5nIGEgY29uZmlnIGZpbGUpCgoqIEFkZCBzaW5nbGUgcXVvdGUgc3VwcG9ydCBmb3IgKG9sZCkgY29tbWFuZCBsaW5lIHBhcnNlcgoKKiBTd2l0Y2ggTFdNT04gYm9hcmQgZGVmYXVsdCBjb25maWcgZnJvbSBGUkFNIHRvIEVFUFJPTTsKICBpbiBQT1NULCBFRVBST00gc2hvd3MgdXAgb24gOCBhZGRyZXNzZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVzZSAxLWJ5dGUtcmVhZCBpbnN0ZWFkIG9mIC13cml0ZSBmb3IgaXByb2JlKCkgZnVuY3Rpb24KICBBZGQgaTJjIGNvbW1hbmRzIHRvIFBNODI2IGNvbmZpZwoKKiBleHRlbmQgSTJDIFBPU1QgY29kZTogY2hlY2sgZm9yIGxpc3Qgb24ga25vd24gYWRkcmVzc2VzCgoqIEltcHJvdmUgbG9nIGJ1ZmZlciBjb2RlOyB1c2UgImxvZ2xldmVsIiB0byBkZWNpZGUgd2hpY2ggbWVzc2FnZXMKICB0byBsb2cgb24gdGhlIGNvbnNvbGUsIHRvbyAobGlrZSBpbiBMaW51eCk7IGdldCByaWQgb2YgImxvZ3N0YXJ0IgoKKiBBZGQgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChib2FyZC1zcGVjaWZpYyBmb3IgVFJBQiBub3csIHRvIGJlIGZpeGVkIGxhdGVyKQoKKiBQYXRjaCBieSBIYW5zLUpvZXJnIEZyaWVkZW4sIDA2IERlYyAyMDAyCiAgRml4IG1pc2MgcHJvYmxlbXMgd2l0aCBBbWlnYU9uZSBzdXBwb3J0CgoqIFBhdGNoIGJ5IENocmlzIEhhbGxpbmFuLCAzIERlYyAyMDAyOgogIG1pbm9yIGNsZWFudXAgdG8gdGhlIE1QQzgyNDUgRVBJQyBkcml2ZXIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIGV4dGVybmFsIChTSVUpIGludGVycnVwdHMgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEZpeCBuZXN0ZWQgc3lzY2FsbHMgYnVnIGluIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjcgTm92IDIwMDI6CiAgZml4IG91dHB1dCBvZiAicGNpaW5mbyIgY29tbWFuZCBmb3IgQ2FyZEJ1cyBicmlkZ2UgZGV2aWNlcy4KCiogRml4IGJ1ZyBpbiBUUU04MjYwIGJvYXJkIGRldGVjdGlvbiAtIGJvYXJkcyBnb3Qgc3R1Y2sgd2hlbiBib2FyZCBJRAogIHdhcyBub3QgcmVhZGFibGUKCiogQWRkIExFRCBpbmRpY2F0aW9uIGZvciBJREUgYWN0aXZpdHkgb24gS1VQNEsgYm9hcmQKCiogRml4IHN0YXJ0dXAgcHJvYmxlbXMgd2l0aCBWRkQgZGlzcGxheSBvbiBUUkFCCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDIwIE5vdiAyMDAyCiAgQWRkIGRyaXZlciBmb3IgRXBzb24gU0VEMTM4MDYgZ3JhcGhpYyBjb250cm9sbGVyLgogIEFkZCBzdXBwb3J0IGZvciBCTVAgbG9nb3MgaW4gY2ZiX2NvbnNvbGUgZHJpdmVyLgoKKiBBZGRlZCBzdXBwb3J0IGZvciBib3RoIFBDTUNJQSBzbG90cyAoYXQgdGhlIHNhbWUgdGltZSEpIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDIxIE5vdiAyMDAyOgogIGZpeCBQQ01DSUEgb24gTUJYOHh4IGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyMSBOb3YgMjAwMgogIEFkZCBDRkdfQ1BNX1BPU1RfV09SRF9BRERSIHRvIG1ha2UgdGhlIG9mZnNldCBvZiB0aGUKICBib290bW9kZSB3b3JkIGluIERQUkFNIGNvbmZpZ3VyYWJsZQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDE4IE5vdiAyMDAyOgogIEZpeGVzIGZvciB4ODYgcG9ydCAobW9zdGx5IHN0cmluZ3MgaXNzdWVzKQoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTggTm92IDIwMDI6CiAgRml4IGZvciBuYXRzZW1pIE5JQyBjYXJkcyAoRFA4MzgxNSkKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTkgTm92IDIwMDI6CiAgZml4IGEgYnVnIGZvciB0aGUgTUlJIGNvbmZpZ3VyYXRpb24sIGFuZCBzb21lIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFRob21hcyBGcmllZGVuLCAxMyBOb3YgMjAwMjoKICBBZGQgY29kZSBmb3IgQW1pZ2FPbmUgYm9hcmQKICAocHJlbGltaW5hcnkgbWVyZ2UgdG8gVS1Cb290LCBzdGlsbCBXSVApCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMiBOb3YgMjAwMjoKICAtIEFkZGluZyBVUkwgZm9yIElFRUUgT1VJIGxvb2t1cAogIC0gTWFraW5nIHRoZSBhdXRvYm9vdCAjZGVmaW5lcyBkZXBlbmRlbnQgb24gQ09ORklHX0FVVE9CT09UX0tFWUVECiAgICBiZWluZyBkZWZpbmVkLgogIC0gSW4gdGhlIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgI2RlZmluZSwgdGhlIHJvb3Qtb24taW5pdHJkIGFuZAogICAgcm9vdC1vbi1uZnMgbWFjcm9zIGFyZSBkZXNpZ25lZCB0byBzd2l0Y2ggaG93IHRoZSBkZWZhdWx0IGJvb3QKICAgIG1ldGhvZCBnZXRzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTMgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIGkzODYgYXJjaGl0ZWN0dXJlIGFuZCBBTUQgU0M1MjAgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTIgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIERPUyBmaWxlc3lzdGVtIGFuZCBib290aW5nIGZyb20gRE9TIGZsb3BweSBkaXNrCgoqIFBhdGNoIGJ5IEppbSBTYW5kb3osIDA3IE5vdiAyMDAyOgogIEluY3JlYXNlIG51bWJlciBvZiBuZXR3b3JrIFJYIGJ1ZmZlcnMgKFBLVEJVRlNSWCBpbgogICJpbmNsdWRlL25ldC5oIikgZm9yIEVFUFJPMTAwIGJhc2VkIGJvYXJkcyAoZXNwZWNpYWxseSBTUDgyNDApCiAgd2hpY2ggc2hvd2VkICJSZWNlaXZlciBpcyBub3QgcmVhZHkiIGVycm9ycyB3aGVuIFUtQm9vdCB3YXMKICBwcm9jZXNzaW5nIHRoZSByZWNlaXZlIGJ1ZmZlcnMgc2xvd2VyIHRoYW4gdGhlIG5ldHdvcmsgY29udHJvbGxlcgogIHdhcyBmaWxsaW5nIHRoZW0uCgoqIFBhdGNoIGJ5IEFuZHJlYXMgT2JlcnJpdHRlciwgMDkgTm92IDIwMDI6CiAgQ2hhbmdlIGJlaGF2aW91ciBvZiBOZXRMb29wKCk6IHJldHVybiAtMSBmb3IgZXJyb3JzLCBmaWxlc2l6ZQogIG90aGVyd2lzZTsgcmV0dXJuIGNvZGUgMCBpcyB2YWxpZCBhbiBtZWFucyBubyBmaWxlIGxvYWRlZCAtIGluIHRoaXMKICBjYXNlIHRoZSBlbnZpcm9ubWVudCBzdGlsbCBnZXRzIHVwZGF0ZWQhCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDkgTm92IDIwMDI6CiAgLSBpbXByb3ZlIEFEQy9EQUMgY2xvY2tpbmcgb24gdGhlIFNBQ1NuZyBib2FyZCB0byBhbGlnbgogICAgdGhlIGZhaWxpbmcgZWRnZXMgb2YgTFJDTEsgYW5kIFNDTEsKICAtIHNiYzgyNjAgY29uZmlndXJhdGlvbiB0d2Vha3MKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIDgyeHggc3lzdGVtcwogIC0gd2lyZSBzc3BpL3NzcG8gY29tbWFuZHMgaW50byBjb21tYW5kIGhhbmRsZXI7IGltcHJvdmVkIGVycm9yCiAgICBoYW5kbGVyaW5nCiAgLSBhZGQgdGltZXN0YW1wIHN1cHBvcnQgYW5kIGFsdGVybmF0ZSBtZW1vcnkgdGVzdCB0byB0aGUKICAgIFNBQ1NuZyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IFZpbmNlIEh1c292c2t5LCA3IE5vdiAyMDAyOgogIEFkZCAiLW4iIHRvIGxpbmtlciBvcHRpb25zIHRvIGdldCByaWQgb2YgIk5vdCBlbm91Z2ggcm9vbSBmb3IKICBwcm9ncmFtIGhlYWRlcnMiIHByb2JsZW0KCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAwNSBOb3YgMjAwMgogIFJlbmFtZSBDT05GSUdfUExMX0lOUFVUX0ZSRVEgdG8gQ09ORklHX1NZU19DTEtfRlJFUQogIHNvIHdlIGNhbiB1c2UgYW4gYWxyZWFkeSBleGlzdGluZyBuYW1lCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgSGFyZHdhcmUgcmVsYXRpZWQgaW1wcm92bWVudHMgaW4gRkRDIGJvb3QgY29kZQoKKiBQYXRjaCBieSBIb2xnZXIgU2NodXJpZywgNSBOb3YgMjAwMjoKICBNYWtlIHRoZSBQWEEgcmVhbGx5IGNoYW5nZSBpdCdzIGZyZXF1ZW5jeQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBzbGF2ZSBzZXJpYWwgU3BhcnRhbiAyIEZQR0FzCgoqIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeSAoTUFDCSBhZGRyZXNzKSAgaW4gIDh4eCAgU0NDL0ZFQyAgZXRoZXJuZXQKICBkcml2ZXJzCgoqIEFkZCBzdXBwb3J0IGZvciBsb2cgYnVmZmVyIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gTGludXgga2VybmVsJ3MKICBzeXNsb2cgbWVjaGFuaXNtOyB1c2VkIGVzcGVjaWFsbHkgZm9yIFBPU1QgcmVzdWx0cy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMzEgT2N0IDIwMDI6CiAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3Iga3VwNGsgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNCBOb3YgMjAwMjoKICAtIHVzZSB3YXRjaGRvZyB0byByZXNldCBQWEEyNTAgc3lzdGVtcwogIC0gYWRkZWQgcHJvZ3Jlc3MgY2FsbGJhY2tzIHRvIChzb21lIG9mIHRoZSkgQVJNIGNvZGUKICAtIHVwZGF0ZSBmb3IgQ29nZW50IENTQjIyNiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgRlBTODYwIGJvYXJkCgoqIFBhdGNoIGJ5IEd1aWxsYXVtZSBBbGV4YW5kcmUsLCAwNCBOb3YgMjAwMjoKICBJbXByb3ZlIFBDSSBhY2Nlc3Mgb24gMzItYml0cyBDb21wYWN0IFBDSSBidXMKCiogRml4IG1kZWxheSgpIG9uIFRSQUIgLSB0aGlzIHdhcyBzdGlsbCB0aGUgZGVidWdnaW5nIHZlcnNpb24gd2l0aAogIHNlY29uZHMgaW5zdGVhZCBvZiBtcy4KCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxIE5vdiAyMDAyOgogIFhTY2FsZSByZWxhdGVkIGNsZWFudXAgKGFmZmVjdHMgYWxsIEFSTSBib2FyZHMpCgoqIENsZWFudXAgb2YgbmFtZXMgYW5kIFJFQURNRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KTm90ZXMgZm9yIFUtQm9vdCAwLjEuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBpcyB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mICJEYXMgVS1Cb290IiwgdGhlIFVuaXZlcnNhbCBCb290IExvYWRlci4KCkl0IGlzIGJhc2VkIG9uIHZlcnNpb24gMi4wLjAgKHRoZSAiSGFsbG93ZWVuIFJlbGVhc2UiKSBvZiBQUENCb290LgpGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QgcGxlYXNlIHNlZSB0aGUKUFBDQm9vdCBwcm9qZWN0IHBhZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wcGNib290Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg==