PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBVcGRhdGUgZm9yIFNDNTIwIGJvYXJkLgogIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMDIgRGVjIDIwMDUKCiogRml4ZWQgY29tbW9uLmggc3BlbGxpbmcgZXJyb3IuCiAgUGF0Y2ggYnkgQ29yeSBUdXNhciwgMzAgTm92IDIwMDUKCiogRml4IHR5cG8uCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMjggTm92IDIwMDUKCiogRml4IGZhdGxvYWQgY29tbWFuZCBvbiBGQVQzMiBmb3JtYXR0ZWQgcGFydGl0aW9ucy4KICBQYXRjaCBieSBKb2FjaGltIEphZWdlciwgMTggTm92IDIwMDUKCiogRml4IGRyaXZlcnMvZG05MDAwLmMgd2hlbiBjb25maWd1cmVkIGluIDMyIGJpdCBtb2RlLgogIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAxNyBOb3YgMjAwNQoKKiBGaXggY29udHJvbC1jIGhhbmRpbmcgaW4gQ09ORklHX0NNRExJTkVfRURJVElORwogIFByb3Blcmx5IHBhc3MgYnJlYWsgY29kZSBiYWNrIGZyb20gcmVhZGxpbmUuCiAgUGF0Y2ggYnkgUm9nZXIgQmxvZmVsZCwgMzEgSnVsIDIwMDYKCiogQWRkIGNvbW1hbmRsaW5lIGhpc3Rvcnkgc3VwcG9ydCB0byBhbGwgQU1DQyBldmFsIGJvYXJkcwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgQXVnIDIwMDYKCiogQWRkIE1hY3Jvbml4IE1YTFYzMjBUIGZsYXNoIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgoKKiBDaGFuZ2UgIm1paSBpbmZvIiB0byBub3QgcHJpbnQgYW4gZXJyb3IgdXBvbiBtaXNzaW5nIFBIWSBhdCBhZGRyZXNzCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgoKKiBGaXggUENJLUV4cHJlc3Mgb24gUFBDNDQwU1BlIHJldi4gQS4KCiogRml4IHByZWJvb3QgbWVzc2FnZSBvbiBUUU04NXh4IGFmdGVyIHN3aXRjaGluZyB0byBodXNoIHBhcnNlci4KCiogQWRhcHQgVFFNODV4eCByYW1kaXNrIGFkZHJlc3MgdG8gTGludXgga2VybmVsIG1lbW9yeSBtYXAKCiogQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgUENJLUV4cHJlc3Mgb24gUFBDNDQwU1BlIChZdWNjYSBib2FyZCkuCgoqIEZpeCBjb21waWxlciB3YXJuaW5nIGZvciBUUkFCIGJvYXJkLgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEF1ZyAyMDA2CgoqIFByZXZlbnQgVVNCIGNvbW1hbmRzIGZyb20gd29ya2luZyB3aGVuIFVTQiBpcyBzdG9wcGVkLgoKKiBBZGQgcnVkaW1lbnRhcnkgaGFuZGxpbmcgb2YgYWx0ZXJuYXRlIHNldHRpbmdzIG9mIFVTQiBpbnRlcmZhY2VzLgogIFRoaXMgaXMgaW4gb3JkZXIgdG8gZml4IGlzc3VlcyB3aXRoIHNvbWUgVVNCIHN0aWNrcyB0aW1pbmcgb3V0CiAgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBTb21lIGNvZGUgcmVhZGFiaWxpdHkgaW1wcm92ZW1lbnRzLgoKKiBQUEM0NDAgRERSIHNldHVwOiBTZXQgU0RSQU0wX0NGRzBbUE1VXT0wIGZvciBiZXN0IHBlcmZvcm1hbmNlCiAgQU1DQyBzdWdnZXN0ZWQgdG8gc2V0IHRoZSBQTVUgYml0IHRvIDAgZm9yIGJlc3QgcGVyZm9ybWFjZSBvbgogIHRoZSBQUEM0NDAgRERSIGNvbnRyb2xsZXIuCiAgUGxlYXNlIHNlZSBkb2MvUkVBRE1FLjQ0MC1ERFItcGVyZm9ybWFuY2UgZm9yIGRldGFpbHMuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBKdWwgMjAwNgoKKiBBTUNDIGJhbWJvbyAoNDQwRVApIFUtQm9vdCBpbWFnZSByZWR1Y2VkIHRvIDM4NGtieXRlCiAgUGxlYXNlIHNlZSBkb2MvUkVBRE1FLmJhbWJvbyBmb3IgZGV0YWlscy4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IEp1bCAyMDA2CgoqIEZpeCBDT05GSUdfQ01ETElORV9FRElUSU5HIGltcGxlbWVudGF0aW9uCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBKdWwgMjAwNgoKKiBGaXggcHJlYm9vdCBtZXNzYWdlIG9uIFRRTTUyMDAgYWZ0ZXIgc3dpdGNoaW5nIHRvIGh1c2ggcGFyc2VyLgoKKiBNQ0MyMDA6IHNldCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gbG93X2Jvb3QgRERSLAogIGFuZCBzdXBwb3J0IGZvciBjb25maWd1cmFibGUgb3B0aW9ucyBoaWdoX2Jvb3QgYW5kL29yIFNEUkFNLgoKKiBBZGQgc3VwcG9ydCBmb3IgMjU2IE1CIFNEUkFNIG9uIENQVTg3CiAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAyNSBOb3YgMjAwNQoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgY2FtNTIwMCBib2FyZCAoYmFzZWQgb24gVFFNNTIwMFMpLgoKKiBNb3JlIGNvZGUgY2xlYW51cAoKKiBEaXNhYmxlZCBrdm1lMDgwIGJvYXJkIGluIE1BS0VBTEwgYmVjYXVzZSBvZiBidWlsZCBwcm9ibGVtcy4KCiogQ29kZSBjbGVhbnVwCgoqIFVwZGF0ZSBOZXRTdGFyIGJvYXJkCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDAzIE5vdiAyMDA1CgoqIE1ha2UgY29kZSBiZXR0ZXIgcmVhZGFibGUuCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE0IFNlcCAyMDA1CgoqIEVuYWJsZSBpbml0cmQgQVRBRyBmb3IgeG0yNTAgYm9hcmQuCiAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwNSBTZXAgMjAwNQoKKiBBZGQgcmVhZGxpbmUgY21kbGluZS1lZGl0aW5nIGV4dGVuc2lvbgogIFBhdGNoIGJ5IEppbkh1YSBMdW8sIDAxIFNlcCAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBmcmllbmRseS1hcm0gU0JDLTI0MTBYIGJvYXJkCiAgUGF0Y2ggYnkgSmluSHVhIEx1bywgMDEgU2VwIDIwMDUKCiogRml4IG11bHRpLXBhcnQgaW1hZ2Ugc3VwcG9ydCBvbiBpMzg2IHBsYXRmb3JtLgogIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMTkgQXVnIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEtWTUUwODAgYm9hcmQKICBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDE4IEF1ZyAyMDA1CgoqIEZpeCBNSVBTIExFIGJ1aWxkIHByb2JsZW0KICBQYXRjaCBieSBNYXRlaiBLdXBsamVuLCAxMCBBdWcgMjAwNQoKKiBDaGVjayBhcmd1bWVudCBjb3VudCBpbiAibWlpIiBjb21tYW5kLgogIFByb2JsZW0gcG9pbnRlZCBvdXQgYnkgQW5kcmV3IER5ZXIsIDEzIEp1biAyMDA1CgoqIENsZWFudXAgVFFNNTIwMCBib2FyZCBjb25maWd1cmF0aW9uczoKICAtIG1ha2UgaGlnaGJvb3QgY29uZmlndXJhdGlvbnMgdXNlIGVudmlyb25tZW50IGF0IGhpZ2ggZW5kLCB0b28sCiAgICB0byBhdm9pZCBmbGFzaCBmcmFnbWVudGF0aW9uCiAgLSBhbHdheXMgdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudAogIC0gZG9uJ3QgZW5hYmxlIHZpZGVvIGNvZGUgZm9yIG1vZHVsZXMgd2l0aG91dCBncmFwaGljcyBjb250cm9sbGVyCiAgLSBwcm92aWRlIHVzZWZ1bCAodGhvdWdoIGRpZmZlcmVudCkgbXRkcGFydHMgc2V0dGluZ3MKICAtIGdldCByaWQgb2YgQ09ORklHX0NTX0FVVE9DT05GIHdoaWNoIHdhcyBhbHdheXMgc2V0IGFueXdheQoKKiBFeHRlbmQgbWtjb25maWcgdG9vbCB0byBwcmludCBtb3JlIHVzZWZ1bCB0YXJnZXQgbmFtZQoKKiBBZGQgc3VwcG9ydCBmb3IgaGlnaC1ib290IG9uIFRRTTUyMDAgYW5kIFRRTTUyMDBTIGJvYXJkcy4KICBIaW50OiB0aGUgQ1BMRCBvbiB0aGUgVFFNNTIwMCBtdXN0IGJlIHByb2dyYW1tZWQgd2l0aCBhIHNvZnR3YXJlCiAgdmVyc2lvbiBzdXBwb3J0aW5nIHRoZSBoaWdoIGJvb3Qgb3B0aW9uISBUaGUgbmV3IFRRTTUyMDBTIGlzCiAgYWxyZWFkeSBzdXBwb3J0aW5nIHRoaXMgb3B0aW9uLiBPbiB0aGUgVFFNNTIwMCB0aGlzIG9wdGlvbiB3aWxsIGJlCiAgc3VwcG9ydGVkIGluIGNvbmZpZ3VyYXRpb25zIHdpdGggTVBDNTIwMCByZXYgQiBwcm9jZXNzb3JzLgogIFRvIGFjdHVhbGx5ICJoaWdoIGJvb3QiLCBzZXQganVtcGVyIFgzMCBvbiB0aGUgU1RLNTJ4eC4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMiBKdWwgMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgbmV3IFRRTTUyMDAgcmV2aXNpb25zCiAgLSBTdXBwb3J0IGZvciBUUU01MjAwUyAoc2hvcnQgdmVyc2lvbiB3aXRob3V0IGdyYXBoaWMgY29udHJvbGxlcikKICAtIFN1cHBvcnQgZm9yIG1vZHVsZXMgd2l0aCAnTicgdHlwZSBTMjlHTDEyOE4gU3BhbnNpb24gZmxhc2hlcwogICAgKHJlcXVpcmVzIGNoYW5nZXMgdG8gZmxhc2ggbGF5b3V0KQogIC0gU3VwcG9ydCBmb3IgTVBDNTIwMEIgY3B1IChtb3N0bHkgc3VwcG9ydCBmb3Igc2Vjb25kIFNEUkFNIGJhbmspCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgSnVsIDIwMDYKCiogRml4IHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgb24gVFFNODV4eCBib2FyZHMKICBUaGUgUFMvMiBrZXlvYmFyZCBkcml2ZXIgZm9yIHRoZSBUUU04NXh4IG1vZHVsZXMgb25seSBzdXBwb3J0cyB0aGUKICBpbnRlcm5hbCBEVUFSVCBvZiB0aGUgTVBDODV4eCBDUFUuIFNpbmNlIHRoZSBNUEM4NTYwIGRvZXNuJ3QKICBpbmNsdWRlIGEgRFVBUlQsIHRoZSBUUU04NTYwIG1vZHVsZXMgY2FuJ3QgYmUgdXNlZCB3aXRoIHRoZSBQUy8yCiAga2V5Ym9hcmQgY29udHJvbGxlciBvbiB0aGUgU1RLODV4eCBib2FyZC4KICBUaGUgUFMvMiBrZXlib2FyZCBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCB0aGUgbW9kdWxlcyBUUU04NTQwLAogIFRRTTg1NDEgYW5kIFRRTTg1NTUsIGJ1dCBpdCBvbmx5IGhhcyBiZWVuIHRlc3RlZCBvbiBhIFRRTTg1NDAsIHlldC4KICBNYWtlIHN1cmUgdGhlIFBTLzIgY29udHJvbGxlciBvbiB0aGUgU1RLODV4eCBpcyBwcm9ncmFtbWVkLiBKdW1wZXIKICBzZXR0aW5nczogWDY2IDEtMiwgOS0xMDsgWDYxIDItMwogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIxIEp1biAyMDA2CgoqIEFkanVzdCBSVEMgY2VudHVyeSBoYW5kbGluZyBvbiBTVEs1Mnh4IGJvYXJkIHRvIG1hdGNoIExpbnV4IGRyaXZlci4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMiBKdW4gMjAwNgoKKiBBZGp1c3QgZmlsZW5hbWVzIGZvciBVU0IgdXBkYXRlIGltYWdlcyBvbiBUUkFCIGJvYXJkLgogIER1cmluZyBhbiBhdXRvbWF0aWMgdXBkYXRlIHZpYSBVU0Igc3RpY2ssIFUtQm9vdCBzZWFyY2hlcyBmb3IKICBpbWFnZXMgd2l0aCB0aGUgbmFtZSAiZmlybXdhcmUuaW1nIiBhbmQgImtlcm5lbC5pbWciLiBUaGlzIG5hbWVzCiAgYXJlIG5vdyBjaGFuZ2VkIHRvICJmaXJtd18wMS5pbWciIGFuZCAia2VybmxfMDEuaW1nIi4gVGhpcyBpcyBkb25lLAogIHRvIHByZXZlbnQgdXBkYXRlcyBvZiBuZXcgYm9hcmRzICh3aXRoIHRoZSBuZXcgbWFjcm9uaWNzICJjIiBzdGVwCiAgZmxhc2hlcykgd2l0aCBvbGQsIGluY29tcGF0aWJsZSBmaXJtd2FyZSBvciBrZXJuZWwgdmVyc2lvbnMuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjEgSnVuIDIwMDYKCiogQnVnZml4IGluIFZGRCByb3V0aW5lIG9uIFRSQUIgYm9hcmQuCiAgTWFrZSBzdXJlIHVwcGVyIGxleHQgcGl4ZWwgY2FuIGJlIHNldCB0byBibHVlLCB0b28KICAoc28gZmFyIG9ubHkgcmVkIHdhcyBwb3NzaWJsZSkuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTUgRmViIDIwMDYKCiogRW5hYmxlIGJ1ZmZlcmVkIGZsYXNoIHdyaXRlcyBmb3IgVEI1MjAwIGJvYXJkLgoKKiBGaXggc29tZSBidWdzIGluIFRSQUIgYm9hcmQgZmxhc2ggZHJpdmVyLgogIC0gaW5jcmVhc2UgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgZnJvbSAyIHRvIDE1IHNlY29uZHMKICAtIHVzZSBDRkdfRkxBU0hfV1JJVEVfVE9VVCBmb3IgcHJvZ3JhbW1pbmcgaW5zdGVhZCBvZiBDRkdfRkxBU0hfRVJBU0VfVE9VVAogIC0gcmVtb3ZlICJVbmxvY2sgQnlwYXNzIiBtb2RlLCBiZWNhdXNlIG1hY3Jvbml4IGZsYXNoZXMgZG8gbm90IHN1cHBvcnQKICAgIHRoaXMgbW9kZSBvZmZpY2lhbGx5CiAgLSBmaXggZmxhc2ggcmVzZXQgY29tbWFuZCBmcm9tIDB4MDBGRiB0byAweDAwRjAuIDB4MDBGRiBpcyBvbmx5IHNwZWNpZmllZAogICAgZm9yIEludGVsIGNvbXBhdGlibGUgZmxhc2hlcywgbm90IGZvciBBTUQgY29tcGF0aWJsZS4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNSBGZWIgMjAwNgoKKiBBZGQgYWRkaXRpb25hbCBlcnJvciBtZXNzYWdlcyB0byBmbGFzaCBkcml2ZXIgb24gVFJBQiBib2FyZAogIChmb3IgZXJhc2UgZXJyb3JzIGFuZCB0aW1lb3V0IGVycm9ycykKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNCBGZWIgMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgVEI1MjAwIGJvYXJkCiAgVGhlIFRCNTIwMCAoIlRpbnlib3giKSBpcyBhIHNtYWxsIGJhc2Vib2FyZCBmb3IgdGhlIFRRTTUyMDAgbW9kdWxlCiAgaW50ZWdyYXRlZCBpbiBhIGxpdHRsZSBhbHVtaW5pdW0gY2FzZS4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCA4IEp1biAyMDA2CgoqIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRRTTUyMDAgYm9hcmQuCgoqIEZpeCBwcm9ibGVtcyB3aXRoIFNhbkRpc2sgQ29ycG9yYXRpb24gQ3J1emVyIE1pY3JvIFVTQiBtZW1vcnkgc3RpY2suCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04ODVEIGJvYXJkLgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIwIE1hciAyMDA2CgoqIEZpeCBGRUMgaW5pdGlhbGlzYXRpb246IEFsbCBNSUkgY29uZmlndXJhdGlvbiBpcyBkb25lIHZpYSBGRUMxCiAgcmVnaXN0ZXJzLCBidXQgTUlJX1NQRUVEIHdhcyBjb25maWd1cmVkIGFjY29yZGluZyB0byBGRUMgdXNlZC4gU28KICBpZiBvbmx5IEZFQzIgd2FzIHVzZWQsIHRoaXMgY2F1c2VkIHRoZSByZWFsIE1JSV9TUEVFRCByZWdpc3RlciBpbgogIEZFQzEgdG8gc3RheSB1bmluaXRhbGlzZWQsIGxlcWFkaW5nIHRvICJtaWlfc2VuZCBTVFVDSyEiIG1lc3NhZ2VzLgogIEZpeDogYWx3YXlzIGNvbmZpZ3VyZSBNSUlfU1BFRUQgb24gRkVDMSBvbmx5LgogIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDEyIEp1bCAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciBTUEMxOTIwIGJvYXJkLgogIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDEyIEp1bCAyMDA2CgoqIE1DQzIwMCBib2FyZDogc3VwcG9ydCBjb25zb2xlIG9uIGFueSBvbmUgb2YgdGhlIFF1YWQgVUFSVCBwb3J0cy4KCiogRml4IGVycm9yIGluIGZsYXNoIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gb24gTUNDMjAwIGJvYXJkLgoKKiBNYWpvciBQQ01DSUEgQ2xlYW51cCB0byBtYWtlIGNvZGUgYmV0dGVyIHJlYWRhYmxlIGFuZCBtYWludGFpbmFibGUuCiAgTm90ZXM6CiAgLSBCb2FyZC1kZXBlbmRlbmQgY29kZSBmb3IgUlBYTElURSBhbmQgUlBYQ0xBU1NJQy1iYXNlZCBib2FyZHMKICAgIHBsYWNlZCB0byB0aGUgZHJpdmVycy9ycHhfcG1jaWEuYyBmaWxlIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgogICAgU2FtZSBmb3IgVFFNOHh4LWJhc2VkIGJvYXJkcyAoZHJpdmVycy90cW04eHhfcG1jaWEuYykuCiAgLSBkcml2ZXJzL2k4MjM2NS5jIGhhcyBiZWVuIHNwbGl0IGludG8gdHdvIHBhcnRzIGxvY2F0ZWQgYXQKICAgIGJvYXJkL2F0Yy90aTExM3guYyBhbmQgYm9hcmQvY3BjNDUvcGQ2NzI5MC5jIChBVEMgYW5kIENQQzQ1IGFyZQogICAgdGhlIG9ubHkgYm9hcmRzIHVzaW5nIENPTkZJR184MjM2NSkuCiAgLSBDaGFuZ2VzIHdlcmUgdGVzdGVkIGZvciBjbGVhbiBidWlsZCBhbmQgKnZlcnkqICpmZXcqIGJvYXJkcy4KCiogRml4IHRpbWVyIHByb2JsZW1zIG9uIEFNQ0MgeXVjY2EgYm9hcmQuCiAgU2V0IFRpbWVyIENsb2NrIFNlbGVjdCB0byB1c2UgQ1BVIGNsb2NrIGFzIGEgdGltZXIgaW5wdXQgc291cmNlLgoKKiBCcmluZyB5dWNjYSBjb25maWcgbW9yZSBpbiBsaW5lIHdpdGggb3RoZXIgQU1DQyBib2FyZHMuCgoqIEFkZCBBTUNDIGJhbWJvbyBib2FyZCB0byBNQUtFQUxMIGJ1aWxkIHNjcmlwdC4KCiogRml4IEFNQ0MgYmFtYm9vIGV2YWwgYm9hcmQgY29tcGlsYXRpb24gZXJyb3JzLgoKKiBBZGQgc3lzdGVtIG1lbW9yeSB0byB0aGUgUENJIHJlZ2lvbiBsaXN0IGZvciBBTUNDIFBQQzQ0eCBDUFVzLgogIEVuYWJsZWQgaXQgZm9yIFl1Y2NhIGJvYXJkLgoKKiBDbGVhbnVwIGNvbmZpZyBmaWxlIGFuZCBib290dXAgb3V0cHV0IGZvciBZdWNjYSBib2FyZC4KCiogRml4IENPTkZJR180NDBfR1ggZGVmaW5lIHVzYWdlLgoKKiBSZW1vdmUgYXV0b2dlbmVyYXRlZCBibXBfbG9nby5oIGZpbGUuCgoqIEFkZCBzdXBwb3J0IGZvciBBTUNDIDQ0MFNQZSBDUFUgYmFzZWQgZXZhbCBib2FyZCAoWXVjY2EpLgoKKiBDYWxsIHNlcmlhbF9pbml0aWFsaXplKCkgYmVmb3JlIGZpcnN0IGRlYnVnKCkgaXMgdXNlZC4KCiogQ2xlYW51cCB0cmFiIGJvYXJkIGZvciBHQ0MtNC54CgoqIFZvaWNlQmx1ZSB1cGRhdGU6IHVzZSBuZXcgTVREIGZsYXNoIHBhcnRpdGlvbmluZyBtZXRob2RzLCB1c2UgbW9yZQogIHJlYXNvbmFibGUgVEVYVF9CQVNFLCB1cGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBhbmQgZW5hYmxlIGtleWVkCiAgYXV0b2Jvb3QuCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2LiBBdWcgMjAwNQoKKiBBZGQgZm9yZ290dGVuIGNoYW5nZXMgZm9yIHRoZSBQTEVCIDIgQm9hcmQuCiAgUGF0Y2ggYnkgRGF2aWQgU25vd2RvbiwgMTMuIEF1ZyAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciB3clBQTUM3eHgvNzR4eCBib2FyZHMKICBQYXRjaCBieSBSaWNoYXJkIERhbnRlciwgMTIgQXVnIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIGd0aDIgYm9hcmQKICBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIEF1ZyAxMSAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBDT05GSUdfU0VSSUFMX01VTFRJIG9uIE1QQzV4eHgKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCA4IEp1biAyMDA2CgogIFRoaXMgcGF0Y2ggc3VwcG9ydHMgdHdvIHNlcmlhbCBjb25zb2xlcyBvbiBib2FyZHMgd2l0aAogIGEgTVBDNXh4eCBDUFUuIFRoZSBjb25zb2xlIGNhbiBiZSBzd2l0Y2hlZCBhdCBydW50aW1lCiAgYnkgc2V0dGluZyBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIGRlc2lyZWQgc2VyaWFsCiAgaW50ZXJmYWNlIChzZXJpYWwwIG9yIHNlcmlhbDEpLiBUaGUgUFNDcyB0byBiZSB1c2VkIGFzCiAgY29uc29sZSBwb3J0IGFyZSBkZWZpbmRlZCBieSBDT05GSUdfUFNDX0NPTlNPTEUKICBhbmQgQ09ORklHX1BTQ19DT05TT0xFMi4KICBTZWUgUkVBRE1FLnNlcmlhbF9tdWx0aSBmb3IgZGV0YWlscy4KCiogQnVnZml4IGluIEkyQyBpbml0aWFsaXNhdGlvbiBvbiBTM0MyNDAwLgogIElmIHRoZSBidXMgaXMgYmxvY2tlZCBiZWNhdXNlIG9mIGEgcHJldmlvdXNseSBpbnRlcnJ1cHRlZAogIHRyYW5zZmVyLCB1cCB0byBlbGV2ZW4gY2xvY2tzIGFyZSBnZW5lcmF0ZWQgb24gdGhlIEkyQ1NDTAogIGxpbmUgdG8gY29tcGxldGUgdGhlIHRyYW5zZmVyIGFuZCB0byBmcmVlIHRoZSBidXMuCiAgV2l0aCB0aGlzIGZpeCBwaW4gSTJDU0NMIChQRzYpIGlzIHJlYWxseSBjb25maWd1cmVkIGFzIEdQSU8KICBzbyB0aGUgY2xvY2sgcHVsc2VzIGFyZSByZWFsbHkgZ2VuZXJhdGVkLgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA0IEFwciAyMDA2CgoqIEZpeCBERFI2IGVycmF0YSBvbiBUUU04MzR4IGJvYXJkcwogIFBhdGNoIGJ5IFRob21hcyBXYWVobmVyLCAwNyBNYXIgMjAwNgoKKiBSZW1vdmUgb2Jzb2xldGUgZmxhc2ggZHJpdmVyIGJvYXJkL3RxbTUyMDAvZmxhc2guYwogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIEphbiAyMDA2CgoqIFVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBDTUMtUFUyIGJvYXJkCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgTm92IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgb24gVFFNODV4eCBib2FyZAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IE5vdiAyMDA1CgogIFRlc3RlZCBvbiBhIFNUSzg1WFggYmFzZWJvYXJkLiBNYWtlIHN1cmUgdGhlIFBTLzIgY29udHJvbGxlcgogIGhhcyBiZWVuIHByb2dyYW1tZWQuIEp1bXBlciBTZXR0aW5nczogWDY2IDEtMiwgOS0xMDsgWDYxIDItMwoKKiBGaXggVFJBQiBjaGFubmVsIHN3aXRjaGluZyBkZWxheSBmb3IgdHJhYl9ma3QuYmluIHN0YW5kYWxvbmUgYXBwbGlrYXRpb24KICBJbiB0c2MyMDAwX3JlYWRfY2hhbm5lbCgpIHRoZSBkZWxheSBhZnRlciBzZXR0aW5nIHRoZSBtdWx0aXBsZXhlcgogIHRvIGEgdGVtcGVyYXR1cmUgY2hhbm5lbCBpcyBpbmNyZWFzZWQgZnJvbSAxLDUgbXMgdG8gMTAgbXMuIFRoaXMKICBpcyB0byBhbGxvdyB0aGUgbXVsdGlwbGV4ZXIgaW5wdXRzIHRvIHN0YWJpbGl6ZSBhZnRlciBodWdlIHN0ZXBzCiAgb2YgdGhlIGlucHV0IHNpZ25hbCBsZXZlbC4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBOb3YgMjAwNQoKKiBBZGp1c3QgVFFNNTIwMCBtYWtlIHRhcmdldHMKICBNYWtlIHRoZSBhdXRvbWF0aWMgQ1MgY29uZmlndXJhdGlvbiB0aGUgZGVmYXVsdC4KICBUaGUgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb25zIENPTkZJR19UUU01MjAwX0FBLCBDT05GSUdfVFFNNTIwMF9BQgogIGFuZCBDT05GSUdfVFFNNTIwMF9BQyBhcmUgcmVtb3ZlZC4KICAiVFFNNTIwMF9jb25maWciIGlzIG5vdyB0aGUgZGVmYXVsdCBmb3IgU1RLNTJYWC4yMDAgYmFzZSBib2FyZHMuCiAgT24gYSBTVEs1MlhYLjEwMCBiYXNlIGJvYXJkICJUUU01MjAwX1NUSzEwMF9jb25maWciIG11c3QgYmUgdXNlZC4KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBOb3YgMjAwNQoKKiBGaXggc2V0dGluZyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBvbiB0cmFiIGJvYXJkCiAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJ2ZXIiIGlzIG5vdyBzZXQgYmVmb3JlCiAgZG9fYXV0b191cGRhdGUoKSBpcyBjYWxsZWQsIHNvIHRoYXQgInZlciIgY2FuIGJlIHVzZWQKICBpbiBVU0IgdXBkYXRlIHNjcmlwdHMuCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKCiogRml4IHdyb25nIHVzYWdlIG9mIHVkZWxheSgpIGluIGxlZF9ibGluaygpIG9uIHRyYWIgYm9hcmQKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQoKKiBGaXggdWRlbGF5IGJ1ZyBpbiB2ZmQuYyBmb3IgdHJhYiBib2FyZAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA1CgoqIERpc2FibGUgSkZGUzIgc3VwcG9ydCBmb3IgdHJhYiBib2FyZAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA1CgoqIENoYW5nZSBtdGRwYXJ0cyBkZWZpbml0aW9uIG9uIHRyYWIgYm9hcmQgdG8gbWF0Y2ggY3VycmVudCBmbGFzaCBtYXAKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQoKKiBGaXggbWVtb3J5IGluaXQgcHJvYmxlbXMgb24gTUNDMjAwIGJvYXJkCgoqIEZpeCBJeEV0aERCLmggdG8gY29tcGlsZSBhZ2FpbgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgSnVuIDIwMDYKCiogTWlub3IgY2xlYW51cCBmb3IgUENTNDQwRVAgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEp1biAyMDA2CgoqIEFkZCBNQ0Y1MjgyIHN1cHBvcnQgKHdpdGhvdXQgcHJlbG9hZGVyKQogIHJlbG9jYXRlIGljaGFjaGVfU3RhdGUgdG8gcmFtCiAgdS1ib290IGNhbiBydW4gZnJvbSBpbnRlcm5hbCBmbGFzaAogIEFkZCBFQitNQ0YtRVYxMjMgYm9hcmQgc3VwcG9ydC4KICBBZGQgbTY4ayBCb2FyZHMgdG8gTUFLRUFMTAogIFBhdGNoIGZyb20gSmVucyBTY2hhcnNpZywgMDggQXVnIDIwMDUKCiogTmlvcyBJSSAtIEFkZCBBbHRlcmEgRVAxQzIwLCBFUDFTMTAgYW5kIEVQMVM0MCBib2FyZHMKICBQYXRjaCBieSBTY290dCBNY051dHQsIDA4IEp1biAyMDA2CgoqIE5pb3MgSUkgLSBBZGQgRVBDUyBDb250cm9sbGVyIGJvb3Ryb20gd29yay1hcm91bmQKICAtV2hlbiBib290aW5nIGZyb20gYW4gZXBjcyBjb250cm9sbGVyLCB0aGUgZXBjcyBib290cm9tIG1heSBsZWF2ZSB0aGUKICBzbGF2ZSBzZWxlY3QgaW4gYW4gYXNzZXJ0ZWQgc3RhdGUgY2F1c2luZyBzb2Z0IHJlc2V0IGhhbmcuIFRoaXMKICBwYXRjaCBlbnN1cmVzIHNsYXZlIHNlbGVjdCBpcyBuZWdhdGVkIGF0IHJlc2V0LgogIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKCiogVXBkYXRlIFBLMUMyMCBib2FyZAogIC1VcGRhdGUgYmFzZSBhZGRyZXNzZXMgZm9yIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24KICAtRWxpbWluYXRlIHVzZSBvZiBDQUNIRV9CWVBBU1MgaW4gYm9hcmQgY29kZQogIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKCiogTmlvcyBJSSAtIEZpeCBJL08gTWFjcm9zIGFuZCBtaW5pLWFwcCBzdHVicwogIC1GaXggYXNtL2lvLmggbWFjcm9zCiAgLUVsaW1pbmF0ZSB1c2Ugb2YgQ0FDSEVfQllQQVNTIGluIGNwdSBjb2RlCiAgLUVsaW1pbmF0ZSBhc3NlbWJsZXIgd2FybmluZ3MKICAtRml4IG1pbmktYXBwIHN0dWJzIGFuZCBmb3JjZSBubyBzbWFsbCBkYXRhCiAgUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwOCBKdW4gMjAwNgoKKiBGaXggVS1Cb290IGVudmlyb25tZW50IHNlY3RvciBwcm90ZWN0aW9uIG9uIE1DQzIwMCBib2FyZAoKKiBNaW5vciBjbGVhbnVwIGZvciBQQ1M0NDBFUCBib2FyZAoKKiBVcGRhdGUgUENTNDQwRVAgcG9ydCB0byBmaXQgaW50byBvbmUgZmxhc2ggZGV2aWNlIChpbmNsLiBlbnZpcm9ubWVudCkKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA2IEp1biAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciBQQ1M0NDBFUCBib2FyZAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDIgSnVuIDIwMDYKCiogRml4IGV4YW1wbGVzL01ha2VmaWxlOyBzb21lIGJ1aWxkIHRhcmdldHMgd2VyZSBsb3N0CgoqIEZpeCB3YXRjaGRvZyBoYW5kbGluZyBpbiBDRkkgZmxhc2ggZHJpdmVyCiAgSnVzdCB1c2UgdWRlbGF5KCkgd2hlbiB3YWl0aW5nIGZvciBzdGF0dXMgY2hhbmdlcyB3aGljaCB3aWxsCiAgaW1wbGljaXRlbHkgdHJpZ2dlciB0aGUgd2F0Y2hkb2cuCgoqIEZpeCBQQ0kgdG8gbWVtb3J5IHdpbmRvdyBzaXplIHByb2JsZW1zIG9uIFBNODJ4IGJvYXJkcwogIFdlIHVzZSB0aGUgImF1dG9tYXRpYyIgbW9kZSB0aGF0IHdhcyB1c2VkIGZvciAgdGhlICBNUEM4MjY2QURTICBhbmQKICBNUEM4MjcyIGJvYXJkcy4gRXZlbnR1YWxseSB0aGlzIHNob3VsZCBiZSB1c2VkIG9uIGFsbCBib2FyZHM/XQogIFBhdGNoIGJ5IFdvbGZnYW5nIEdyYW5kZWdnZXIsIDE3IEphbiAyMDA2CgoqIENvcnJlY3QgR1BJTyBzZXR1cCAoVUFSVDEvSVJRJ3MpIG9uIHlvc2VtaXRlICYgeWVsbG93c3RvbmUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI5IE1heSAyMDA2CgoqIFVwZGF0ZSBJbnRlbCBJWFA0eHggc3VwcG9ydAogIC0gQWRkIElYUDR4eCBOUEUgZXRoZXJuZXQgTUFDIHN1cHBvcnQKICAtIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBJWERQRzQyNSBib2FyZAogIC0gQWRkIHN1cHBvcnQgZm9yIFByb2RyaXZlIFBETkIzIGJvYXJkCiAgLSBBZGQgSVJRIHN1cHBvcnQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIzIE1heSAyMDA2CgoqIEZpeCBwcm9ibGVtIGluIFBWUiBkZXRlY3Rpb24gZm9yIDQ0MEdSCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBNYXkgMjAwNgoKKiBGaXggZ2NjIDMuNC54IEFGTEFHUyBzZXR0aW5nIGZvciBtNjhrIHBsYXRmb3JtLgoKKiBFbmFibGUgYXV0b2Jvb3QgZm9yIE01MjcxRVZCIGJvYXJkLgoKKiBDaGFuZ2VkIGRlZmF1bHQgcmFtZGlzayBhZGRyIGluIHlvc2VtaXRlL3llbGxvd3N0b25lIHBvcnRzCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBNYXkgMjAwNgoKKiBGaXggUENNQ0lBIHN1cHBvcnQgb24gdmlydGxhYjIKCiogQWRkIHN1cHBvcnQgZm9yIFZpcnRMYWIyIGJvYXJkCiAgKG5lZWRlZCBiZWNhdXNlIG9mIGRpZmZlcmVuY2VzIGluIHRoZSBQQ01DSUEgaGFyZHdhcmUpLgoKKiBNaW5vciBjbGVhbnVwLgoKKiBVcGRhdGUgeW9zZW1pdGUgY29uZmlndXJhdGlvbiB0byBlbmFibGUgZmxhc2ggd3JpdGUgYnVmZmVyIHN1cHBvcnQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE1heSAyMDA2CgoqIEZpeCBjb21waWxlIHdhcm5pbmdzIGluIGNvbW1vbi94eXpNb2RlbS5jCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBNYXkgMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBFUCBSZXYgQyBhbmQgNDQwR1IgUmV2IEIKICBQYXRjaCBieSBKb2huIE90a2VuLCAwOCBNYXkgMjAwNgoKKiBPTUFQIDU5MTIvT1NLOiB1cGRhdGUgRU1JRlMgQ1MxIHRpbWluZ3M6CiAgUHJvYmxlbXMgaGF2ZSBiZWVuIHNlZW4gaW4gdGhlIGxpbnV4IGtlcm5lbCdzIHNtYzkxeCBuZXR3b3JrIGRyaXZlcgogIGR1ZSB0byBpbXByb3BlciBidXMgdGltaW5ncy4gIFRoZSBsYXRlc3QgMi42IE9NQVAga2VybmVscyBjdXJyZW50bHkKICBoYXZlIGEgd29ya2Fyb3VuZCwgYnV0IHRoaXMgZml4IGJlbG9uZ3MgaW4gdS1ib290LgogIFBhdGNoIGJ5IEtldmluIEhpbG1hbiwgMTMgT2N0IDIwMDUKCiogRml4IFJFR19NUFVfTE9BRF9USU1FUiBkZWZpbml0aW9uIGluIG11bHRpcGxlIE9NQVAgcG9ydHMKICBQYXRjaCBieSBIaXJva2kgS2FtaW5hZ2EsIDExIE1hciAyMDA2CgoqIFVwZGF0ZSBvbWFwNTkxMm9zayBib2FyZCBzdXBwb3J0CiAgLSBGaXggT01BUCBzdXBwb3J0IHRoYXQgb21hcDU5MTJvc2sgY29tcGlsZXMgaW4gY3VycmVudCBzb3VyY2UgdHJlZQogIC0gVXBkYXRlIHdpdGggY29kZSBmcm9tICJodHRwOi8vb21hcC5zcGVjdHJ1bWRpZ2l0YWwuY29tL29zazU5MTIiCiAgICB0byBmaXggcHJvYmxlbXMgd2l0aCBERFIgaW5pdGlhbGl6YXRpb24KICAtIEZpeCB0aW1lciBzZXR1cAogIC0gVXNlIENGSSBmbGFzaCBkcml2ZXIgYW5kIHN1cHBvcnQgY29tcGxldGUgMzJNQiBvZiBvbmJvYXJkIGZsYXNoCiAgLSBBZGQgInByaW50X2NwdWluZm8oKSIgYW5kICJjaGVja2JvYXJkKCkiIGZ1bmN0aW9ucyB0byBkaXNwbGF5CiAgICBDUFUgKHdpdGggZnJlcXVlbmN5KSBhbmQgQm9hcmQgaW5mb3MKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE1heSAyMDA2CgoqIEZpeCB3YXRjaGRvZyBpc3N1ZXMgZm9yIENvbGRGaXJlIGJvYXJkcy4KCiogQWRkIE01MjcxRVZCIGJvYXJkIHN1cHBvcnQuCgoqIE1ha2UgUjUyMDAgc3BlY2lmaWMgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGJvYXJkIGNvbmRpdGlvbmFsLgoKKiBVcGRhdGUgQ1BVIHRhcmdldCBpZGVudGlmaWNhdGlvbiBzdHJpbmdzIGZvciBDb2xkRmlyZSBmYW1pbHkuCgoqIFVwZGF0ZSByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgTUNGNTI3MS4KCiogRml4IHNlcmlhbCBjb25zb2xlIHN1cHBvcnQgZm9yIE1DRjUyNzEuCgoqIEZpeGVzIGZvciBnY2MgMy40IGJhc2VkIG02OGsgdG9vbGNoYWluLAogIGJhc2VkIG9uIHBhdGNoIGJ5IEphdGUgU3VqamF2YW5pY2guCgoqIEZpeCBsb3dib290IHN1cHBvcnQgb24gTUNDMjAwIGJvYXJkCgoqIE1lcmdlZCBNUEM4MzQ5QURTIGFuZCBNUEM4MzQ5RU1EUyBwb3J0cyBpbnRvIE1QQzgzNDlFTURTIHBvcnQ6CiAgLSBSZW1vdmVkIE1QQzgzNDlBRFMgcG9ydAogIC0gQWRkZWQgUENJIHN1cHBvcnQgdG8gTVBDODM0OUFEUwogIC0gcmV3b3JrZWQgbWVtb3J5IG1hcCB0byBhbGxvdyBtYXBwaW5nIG9mIGFsbCByZWdpb25zIHdpdGggQkFUcwogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDIwIEFwciAyMDA2CgoqIENvZGluZyBTdHlsZSBjbGVhbnVwCgoqIFdyaXRlIFJUQyBzZWNvbmRzIGZpcnN0IHRvIG1haW50YWluIHNldHRpbmdzIGludGVncml0eSBwZXIKICBNYXhpbS9EYWxsYXMgRFMxMzA2IGRhdGEgc2hlZXQuCiAgUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAwMiBNYXkgMjAwNgoKKiBTY2hlZHVsZWQgZm9yIHJlbW92YWw6IHN0cm5pY21wKCkgd2hpY2ggaXMgdW51c2VkCgoqIFVwZGF0ZSBmb3IgSW50ZWwgTW9uYWhhbnMgYm9hcmRzOgogIC0gc3VwcG9ydCBmb3IgbWFnaWMga2V5IGRldGVjdGlvbiBhbmQgaGFuZGxpbmcgb24gZGVsdGEgYm9hcmQKICAtIE5BTkQgc3VwcG9ydCBmb3Igenlsb25pdGUgYm9hcmQgKyBzb21lIG1pbm9yIGNsZWFudXAKCiogRGVjbGFyZSBsb2FkX3NlcmlhbF95bW9kZW0oKSB3aGVuIHVzaW5nIENGR19DTURfTE9BREIuCiAgUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwMSBNYXkgMjAwNgoKKiBGaXhlZCBoYW5kbGluZyBvZiBiYWQgY2hlY2tzdW1zIHdpdGggIm1raW1hZ2UgLWwiCgoqIEFkZGVkIHN1cHBvcnQgZm9yIEJDMzQ1MCBib2FyZAogIFBhdGNoIGJ5IFN0ZWZhbiBTdHJvYmwsIDIxIE9jdCAyMDA1CgoqIFVwZGF0ZSBmb3IgTkM2NTAgYm9hcmQ6CiAgLSBTdXBwb3J0IHJldjEgYW5kIHJldjIgaGFyZHdhcmUKICAtIGFkYXB0IHRvIG5ldyBOQU5EIGxheWVyCiAgLSBhZGQgQ1A4NTAgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBOQzY1MAoKKiBNUEM1MjAwOiBlbmFibGUgc25vb3Bpbmcgb2YgRE1BIHRyYW5zYWN0aW9ucyBvbiBYTEIgZXZlbiBpZiBubyBQQ0kKICBpcyBjb25maWd1cmVkOyBvdGhyd2lzZSBETUEgYWNjZXNzZXMgYXJlbid0IGNhY2hlIGNvaGVyZW50IHdoaWNoCiAgY2F1c2VzIGZvciBleGFtcGxlIFVTQiB0byBmYWlsLgoKKiBTb21lIGNvZGUgY2xlYW51cAoKKiBGaXggZGJhdTF4MDAgYm9hcmRzIGJyb2tlbiBieSBkYmF1MTU1MCBwYXRjaAogIFBMTDpzIHdlcmUgbm90IHNldCBmb3IgYm9hcmRzIG90aGVyIHRoYW4gMTU1MC4KICBGbGFzaCBDRkkgY2F1c2VkIGNhcmQgdG8gaGFuZyBkdWUgdG8gdW5kZWZpbmVkIENGR19GTEFTSF9CQU5LU19MSVNULgogIERlZmF1bHQgYm9vdCBpcyBub3cgYm9vdHAgZm9yIGNhcmRzIG90aGVyIHRoYW4gMTU1MC4KICBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDEwIEF1ZyAyMDA1CgoqIEZpeGVzIGNvbW1vbi9jbWRfZmxhc2guYzoKICAtIGZpeCBzb21lIGNvbXBpbGVyL3BhcnNlciBlcnJvciwgaWYgdXNpbmcgbTY4ayB0b29sIGNoYWluCiAgLSBvcHRpY2FsIGZpeCBmb3IgcHJvdGVjdCBvbi9vZmYgYWxsIG1lc3NhZ2VzLCBpZiB1c2luZyBtb3JlCiAgICB0aGVuIG9uZSBiYW5rCiAgUGF0Y2ggYnkgSmVucyBTY2hhcnNpZywgMjggSnVsIDIwMDUKCiogRml4IFF1YWQgVUFSVCBtYXBwaW5nIG9uIE1DQzIwMCBib2FyZCBkdWUgdG8gbmV3IEhXIHJldmlzaW9uCgoqIEZpeCBKRkZTMiBzdXBwb3J0IGZvciBsZWdhY3kgTkFORCBkcml2ZXIuCgoqIFJlbW92ZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBEb0MgY29kZSBhbmQgb2xkIGxlZ2FjeSBOQU5EIGRyaXZlci4KCiogRml4IFBNODI4X1BDSSB0YXJnZXQsIGZvciB3aGljaCBQQ0kgd2FzICpub3QqIGNvbmZpZ3VyZWQgaW4uCgoqIEZpeCBMaXRlNTIwMEIgc3VwcG9ydDogaW5pdGlhbGl6ZSBTRGVsYXkgcmVnaXN0ZXIKICBTZWUgRnJlZXNjYWxlJ3MgQU4zMjIxICJNUEM1MjAwQiBTRFJBTSBJbml0aWFsaXphdGlvbiBhbmQKICBDb25maWd1cmF0aW9uIiwgMy4zLjEgU0RlbGF5LS1NQkFSICsgMHgwMTkwCgoqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CgogIC0gQWRkIEludGVsIGxlZ2FjeSBsb2NrL3VubG9jayBzdXBwb3J0IHRvIGNvbW1vbiBDRkkgZHJpdmVyCgogICAgT24gc29tZSBJbnRlbCBmbGFzaCdzIChlLmcuIEludGVsIEozKSBsZWdhY3kgdW5sb2NraW5nIGlzCiAgICBzdXBwb3J0ZWQsIG1lYW5pbmcgdGhhdCB1bmxvY2tpbmcgb2Ygb25lIHNlY3RvciB3aWxsIHVubG9jawogICAgYWxsIHNlY3RvcnMgb2YgdGhpcyBiYW5rLiBVc2luZyB0aGlzIGZlYXR1cmUsIHVubG9ja2luZwogICAgb2YgYWxsIHNlY3RvcnMgdXBvbiBzdGFydHVwICh2aWEgZW52IHZhciAidW5sb2NrPXllcyIpIHdpbGwKICAgIGdldCBtdWNoIGZhc3Rlci4KCiAgLSBGaXhlZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgcmVhZHMgb2YgZW52cm9ubWVudCB2YXJpYWJsZQogICAgInVubG9jayIgYXMgcG9pbnRlZCBvdXQgYnkgUmVpbmhhcmQgQXJsdCAmIEFuZGVycyBMYXJzZW4uCgogIC0gUmVtb3ZlZCB1bndhbnRlZCBsaW5lZmVlZHMgZnJvbSAicHJvdGVjdCIgY29tbWFuZCB3aGVuCiAgICBDRkdfRkxBU0hfUFJPVEVDVElPTiBpcyBlbmFibGVkLgoKICAtIENoYW5nZWQgcDNwNDAwIGJvYXJkIHRvIHVzZSBDRkdfRkxBU0hfUFJPVEVDVElPTgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIEFwciAyMDA2CgoqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBDb3JyZWN0bHkgaGFuZGxlIHRoZSBjYXNlcyB3aGVyZSBDRkdfSFogIT0gMTAwMCAoc2V2ZXJhbAogICAgWFNjYWxlLWJhc2VkIGJvYXJkcykKICAtIEZpeCB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiBvZiBidWZmZXJlZCB3cml0ZXMgKG9mZiBieSBhCiAgICBmYWN0b3Igb2YgMTAwMCkKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAzMSBNYXIgMjAwNgoKKiBVcGRhdGVzIHRvIGNvbW1vbiBQUEM0eHggb25ib2FyZCAoRERSKVNEUkFNIGluaXQgY29kZSAoNDA1IGFuZCA0NDApCgogIDQwNSBTRFJBTTogLSBUaGUgU0RSQU0gcGFyYW1ldGVycyBjYW4gbm93IGJlIGRlZmluZWQgaW4gdGhlIGJvYXJkCgkgICAgICAgY29uZmlnIGZpbGUgYW5kIHRoZSA0MDUgU0RSQU0gY29udHJvbGxlciB2YWx1ZXMgd2lsbAoJICAgICAgIGJlIGNhbGN1bGF0ZWQgdXBvbiBib290dXAgKHNlZSBQUENoYW1lbGVvbkVWQikuCgkgICAgICAgV2hlbiB0aG9zZSBzZXR0aW5ncyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGJvYXJkCgkgICAgICAgY29uZmlnIGZpbGUsIHRoZSByZWdpc3RlciBzZXR1cCB3aWxsIGJlIGFzIGl0IGlzIG5vdywKCSAgICAgICBzbyB0aGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgYnJlYWsgYW55IGN1cnJlbnQKCSAgICAgICBkZXNpZ24gdXNpbmcgdGhpcyBjb2RlLgoKCSAgICAgICBUaGFua3MgdG8gQW5kcmVhIE1hcnNvbiBmcm9tIERBVkUgZm9yIHRoaXMgcGF0Y2guCgogIDQ0MCBERFI6ICAgLSBBZGRlZCBmdW5jdGlvbiBzZHJhbV90cjFfc2V0IHRvIGF1dG8gY2FsY3VsYXRlIHRoZQoJICAgICAgIFRSMSB2YWx1ZSBmb3IgdGhlIEREUi4KCSAgICAgLSBBZGRlZCBFQ0Mgc3VwcG9ydCAoc2VlIHAzcDQ0MCkuCgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgTWFyIDIwMDYKCiogRml4IENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgZGVwZW5kZW5jeSBpbiBjcHUvYXJtOTIwdC9zdGFydC5TCiAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAxMyBPY3QgMjAwNSBbRE5YIzIwMDYwNDAxNDIwMDA0NzNdCgoqIEFkZCBzdXBwb3J0IGZvciB5bW9kZW0gcHJvdG9jb2wgZG93bmxvYWQKICBQYXRjaCBieSBTdGVmYW5vIEJhYmljLCAyOSBNYXIgMjAwNgoKKiBNZW1vcnkgTWFwIFVwZGF0ZSBmb3IgRGVsdGEgYm9hcmQ6IFUtQm9vdCBpcyBhdCAweDgwMDAwMDAwLTB4ODQwMDAwMDAKICBNZXJnZSBmcm9tIE1hcmt1cyBLbG90emL8Y2hlcidzIHJlcG8sIDAxIEFwciAyMDA2CgoqIEdDQy00LnggZml4ZXM6IGNsZWFuIHVwIGdsb2JhbCBkYXRhIHBvaW50ZXIgaW5pdGlhbGl6YXRpb24gZm9yIGFsbAogIGJvYXJkcwoKKiBVcGRhdGUgZm9yIERlbHRhIGJvYXJkOgogIC0gcmVkdW5kYW50IE5BTkQgZW52aXJvbm1lbnQKICAtIG1pc2MgTW9uYWhhbnMgY2xlYW51cHMgKHJlbW92ZSBkZWFkIGNvZGUgZXRjLikKICAtIERBOTAzMCBJbml0aWFsaXphdGlvbjsgc29tZSBtaW5pbWFsIGNoYW5nZXMgdG8gUFhBIEkyQyBkcml2ZXIgdG8KICAgIG1ha2UgaXQgd29yayB3aXRoIHRoZSBNb25haGFucy4KICAtIE1ha2UgTW9uYWhhbnMgY2xvY2sgZnJlcXVlbmN5IGNvbmZpZ3VyYWJsZSB1c2luZwogICAgQ0ZHX01PTkFIQU5TX1JVTl9NT0RFX09TQ19SQVRJTyBhbmQKICAgIENGR19NT05BSEFOU19UVVJCT19SVU5fTU9ERV9SQVRJTy4KICBNZXJnZSBmcm9tIE1hcmt1cyBLbG90emL8Y2hlcidzIHJlcG8sIDI1IE1hciAyMDA2CgoqIEVuYWJsZSBRdWFkIFVBUlQgb20gTUNDMjAwIGJvYXJkLgoKKiBDbGVhbnVwIE1DQzIwMCBib2FyZCBjb25maWd1cmF0aW9uOyBvbWl0IG5vbi1leGlzdGVudCBzdHVmZi4KCiogQWRkIHN1cHBvcnQgZm9yIE1QQzg1OS84NjYgUmV2LiBBLjAKCiogQWRkIGNvbW1hbmQgZm9yIGhhbmRsaW5nIEREUiBFQ0MgcmVnaXN0ZXJzIG9uIE1QQzgzNDlFRSBNRFMgYm9hcmQuCgoqIEZpeCBERFIgRUNDIGJpdCBkZWZpbml0aW9ucyBmb3IgTVBDODN4eC4KCiogQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgTVBDODM0OUUgTURTIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgRUNDIEREUiBpbml0aWFsaXphdGlvbiBvbiBNUEM4M3h4LgoKKiBBZGQgRE1BIHN1cHBvcnQgZm9yIE1QQzgzeHguCgoqIEFkZCBzeW5jIGluIGRvX3Jlc2V0KCkgcm91dGluZSBmb3IgTVBDODN4eCBhZnRlciBSUFIgcmVnaXN0ZXIKICB3YXMgd3JpdHRlbiB0by4gSXQgaXMgbmVlZCBvbiBzb21lIHRhcmdldHMgd2hlbiBCQVQgdHJhbnNsYXRpb24KICBpcyBlbmFibGVkLgoKKiBBZGQgYml0IGRlZmluaXRpb25zIGZvciBNUEM4M3h4IEREUiBjb250cm9sbGVyIHJlZ2lzdGVycy4KCiogQWRkIERjYnooKSwgRGNiaSgpIGFuZCBEY2JmKCkgcm91dGluZXMgZm9yIE1QQzgzeHguCgoqIENvcnJlY3Qgc2hpZnQgb2Zmc2V0cyBpbiBpY2FjaGVfc3RhdHVzIGFuZCBkY2FjaGVfc3RhdHVzIGZvciBNUEM4M3h4LgoKKiBBZGQgc3VwcG9ydCBmb3IgRFMxMzc0IFJUQyBjaGlwLgoKKiBBZGQgc3VwcG9ydCBmb3IgTGl0ZTUyMDBCIGJvYXJkLgogIFBhdGNoIGJ5ICBQYXRjaCBieSBKb3NlIE1hcmlhIChUeGVtYSkgTG9wZXosIDE2IEphbiAyMDA2CgoqIEFwcGx5IFNvQyBjb25jZXB0IHRvIGFybTkyNmVqcyBDUFVzLCBpLmUuIG1vdmUgdGhlIFNvQyBzcGVjaWZpYwogIHRpbWVyIGFuZCBjcHVfcmVzZXQgY29kZSBmcm9tIGNwdS8kKENQVSkgaW50byB0aGUgbmV3CiAgY3B1LyQoQ1BVKS8kKFNPQykgZGlyZWN0b3JpZXMKICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxMyBNYXIgMjAwNgoKKiBDaGFuZ2UgbWF4IHNpemUgb2YgdW5jb21wcmVzc2VkIHVJbWFnZSdzIHRvIDhNQnl0ZSBhbmQgYWRkCiAgQ0ZHX0JPT1RNX0xFTiB0byBhZGp1c3QgdGhpcyBzZXR0aW5nLgoKICBBcyBtZW50aW9uZWQgYnkgUm9iaW4gR2V0eiBvbiAyMDA1LTA1LTI0IHRoZSBzaXplIG9mIHVuY29tcHJlc3NlZAogIHVJbWFnZXMgd2FzIHJlc3RyaWN0ZWQgdG8gNE1CeXRlcy4gVGhpcyBkZWZhdWx0IHNpemUgaXMgbm93CiAgaW5jcmVhc2VkIHRvIDhNYnl0ZXMgYW5kIGNhbiBiZSBvdmVycmlkZWQgYnkgc2V0dGluZyBDRkdfQk9PVE1fTEVOCiAgaW4gdGhlIGJvYXJkIGNvbmZpZyBmaWxlLgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIE1hciAyMDA2CgoqIEZpeCBwcm9ibGVtIHdpdGggdXBkYXRlZCBQQ0kgY29kZSBpbiBjcHUvcHBjNHh4LzQwNWdwX3BjaS5jCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgoKKiBjcHUvcHBjNHh4L3N0YXJ0LlMgOiBleGNlcHRpb25zIGFyZSBlbmFibGVkIGFmdGVyIHJlbG9jYXRpb24KICBQYXRjaCBieSBDZWRyaWMgVmluY2VudCwgMDYgSnVsIDIwMDUKCiogYXUxeDAwX2V0aC5jOiBjaGVjayBtYWxsb2MgcmV0dXJuIHZhbHVlIGFuZCBhYm9ydCBpZiBpdCBmYWlsZWQKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMjYgSnVsIDIwMDUKCiogQ2hhbmdlIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaW4gc29mdF9pMmMuYzpzZW5kX2FjaygpIHRvIGtlZXAgZnJvbQogIGluY29ycmVjdGx5IGdlbmVyYXRpbmcgc3RhcnQvc3RvcCBjb25kaXRpb25zIG9uIHRoZSBidXMuCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1CgoqIEZpeCBidWcgaW4gW2lkXWNhY2hlX3N0YXR1cyBjb21tYW5kcyBmb3IgTVBDODV4eCBwcm9jZXNzb3JzOwogIHNob3VsZCBsb29rIGF0IExTQiBvZiBMMUNTUm4gcmVnaXN0ZXJzIHRvIGRldGVybWluZSBpZiBMMSBjYWNoZSBpcwogIGVuYWJsZWQsIG5vdCB0aGUgTVNCLgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE5IEp1bCAyMDA1CgoqIEZpeCBhcnJheSBvdmVyZmxvdyB3aXRoIGZ3X3NldGVudiBvbiB1bmluaXRpYWxpc2VkIGVudmlyb25tZW50CiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTUgSnVsIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEVtYmVkZGVkUGxhbmV0IEVQODh4IGJvYXJkcwogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDA1CgoqIFJlbW92ZSBib2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIGZyb20gdGhlIGNvbW1vbiB4aWxpbngKICBldGhlcm5ldCBhbmQgaWljIGFkYXB0ZXIgY29kZS4KICBQYXRjaCBieSBNaWNoYWVsIExpYmVza2luZCwgMTIgSnVsIDIwMDUKCiogQWRkIE5hdCBTZW1pIERQODM4NjUgUEhZIHN1cHBvcnQgdG8gTVBDODV4eCBUU0VDIGRyaXZlcgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDA4IEp1bCAyMDA1CgoqIEFkZCAoc29tZSkgZGVmaW5pdGlvbnMgZm9yIHRoZSBNUEM4NXh4IGxvY2FsIGJ1cyBjb250cm9sbGVyCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKCiogQWRkIENQTTIgSS9PIHBpbiBmdW5jdGlvbnMgZm9yIE1QQzg1eHggcHJvY2Vzc29ycwogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDA4IEp1bCAyMDA1CgoqIEZpeCBjb21waWxlIHByb2JsZW0KCiogQWRkZWQgUENJIHN1cHBvcnQgZm9yIE1QQzgzNDlBRFMgYm9hcmQKICBQYXRjaCBieSBLdW1hciBHYWxhIDExIEphbiAyMDA2CgoqIEVuYWJsZSBhZGRyZXNzIHRyYW5zbGF0aW9uIG9uIE1QQzgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMCBGZWIgMjAwNgoKKiBEZWNvcHVsZWQgc2V0dGluZyBvZiBPUi9CUiBhbmQgTEJMQVdCQVIvTEJMQVdBUiBvbiBNUEM4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjUgSmFuIDIwMDYKCiogRml4ZWQgZGVmaW5lcyBmb3IgTVBDODN4eCBTSUNSTCByZWdpc3RlciB0byBtYXRjaCBjdXJyZW50IHNwZWNzCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjMgSmFuIDIwMDYKCiogT25seSBkaXNhYmxlIHRoZSBNUEM4M3h4IHdhdGNoZG9nIGlmIGl0cyBlbmFibGVkIG91dCBvZiByZXNldC4KICBJZiBpdHMgZGlzYWJsZWQgb3V0IG9mIHJlc2V0IFNXIGNhbiBsYXRlciBlbmFibGUgaXQgaWYgc28gZGVzaXJlZAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFsbG93IGNvbmZpZyBvZiBHUElPIGRpcmVjdGlvbiAmIGRhdGEgcmVnaXN0ZXJzIGF0IGJvb3Qgb24gODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEVuYWJsZSB0aW1lIGhhbmRsaW5nIG9uIDgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBNYWtlIFN5c3RlbSBJTyBDb25maWcgUmVnaXN0ZXJzIGJvYXJkIGNvbmZpZ3VyYWJsZSBvbiBNUEM4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogRml4ZWQgUENJIGluZGlyZWN0IGNvbmZpZyBvcHMgdG8gaGFuZGxlIG11bHRpcGxlIFBDSSBjb250cm9sbGVycwogIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBidXMgbnVtYmVyIHdlIGFyZSB0cnlpbmcgdG8gYWNjZXNzIGJhc2VkCiAgb24gd2hpY2ggUENJIGNvbnRyb2xsZXIgaXRzIG9uCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTIgSmFuIDIwMDYKCiogUmVwb3J0IGJhY2sgUENJIGJ1cyB3aGVuIGRvaW5nIHRhYmxlIGJhc2VkIGRldmljZSBjb25maWcKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGRlZCBzdXBwb3J0IGZvciBQQ0kgcHJlZmV0Y2hhYmxlIHJlZ2lvbiBhbmQgQkFScwogIElmIGEgaG9zdCBjb250cm9sbGVyIHNldHMgdXAgYSByZWdpb24gYXMgcHJlZmV0Y2hhYmxlIGFuZAogIGEgZGV2aWNlJ3MgQkFSIGRlbm90ZXMgaXQgYXMgcHJlZmV0Y2hhYmxlLCBhbGxvY2F0ZSB0aGUKICBCQVIgaW50byB0aGUgcHJlZmV0Y2ggcmVnaW9uLgoKICBJZiBhIEJBUiBpcyBwcmVmZXRjaGFibGUgYW5kIG5vIHByZWZldGNoYWJsZSByZWdpb24gaGFzCiAgYmVlbiBzZXR1cCBieSB0aGUgY29udHJvbGxlciB3ZSBmYWxsIGJhY2sgdG8gYWxsb2NhdGluZwogIHRoZSBCQVIgaW50byB0aGUgbm9ybWFsbHkgbWVtb3J5IHJlZ2lvbi4KICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGQgaGVscGVyIGZ1bmN0aW9uIGZvciBnZW5lcmljIGZsYXQgZGV2aWNlIHRyZWUgZml4dXBzIGZvciBtcGM4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIHBhc3NpbmcgaW5pdHJkIGluZm9ybWF0aW9uIHZpYSBmbGF0IGRldmljZSB0cmVlCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkZWQgT0ZfU1RET1VUX1BBVEggYW5kIE9GX1NPQwoKICBPRl9TVERPVVRfUEFUSCBzcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRldmljZSB0aGUga2VybmVsIGNhbiB1c2UKICBmb3IgY29uc29sZSBvdXRwdXQKCiAgT0ZfU09DIHNwZWNpZmllcyB0aGUgcHJvcGVyIG5hbWUgb2YgdGhlIFNPQyBub2RlIGlmIG9uZSBleGlzdHMuCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWxsb3cgYm9hcmQgY29kZSB0byBmaXh1cCB0aGUgZmxhdCBkZXZpY2UgdHJlZSBiZWZvcmUgYm9vdGluZyBhIGtlcm5lbAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZGVkIENPTkZJR18gb3B0aW9ucyBmb3IgYmRfdCBhbmQgZW52IGluIGZsYXQgZGV2IHRyZWUKCglDT05GSUdfT0ZfSEFTX0JEX1Qgd2lsbCBwdXQgYSBjb3B5IG9mIHRoZSBiZF90CglpbnRvIHRoZSByZXN1bHRpbmcgZmxhdCBkZXZpY2UgdHJlZS4KCglDT05GSUdfT0ZfSEFTX1VCT09UX0VOViB3aWxsIGNvcHkgdGhlIGVudmlyb25tZW50Cgl2YXJpYWJsZXMgZnJvbSB1LWJvb3QgaW50byB0aGUgZmxhdCBkZXZpY2UgdHJlZQoKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgdGhlIERIQ1AgdmVuZG9yIG9wdGlvbmFsIGJvb3RmaWxlICgjNjcpLgogIElnbm9yZXMgdGhlIHZlbmRvciBURlRQIHNlcnZlciBuYW1lIG9wdGlvbiAoIzY2KS4KICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQoKKiBGaXggYSBIVyB0aW1pbmcgaXNzdWUgb24gODU0OCBDRFMgZm9yIGVUU0VDIDMgaW4gUkdNSUkgbW9kZQogIFBhdGNoIGJ5IEFuZHkgRmxlbWluZywgMTQgSnVuIDIwMDUKCiogRml4IGJhZCByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgTFRYOTcxIFBIWSBvbiBNUEM4NXh4IGJvYXJkcy4KICBQYXRjaCBieSBHZXJoYXJkIEphZWdlciwgMjEgSnVuIDIwMDUKCiogQWRkIG5ldGNvbnNvbGUgYW5kIHNvbWUgbW9yZSBjb21tYW5kcyB0byBSUFhsaXRlX0RXIGJvYXJkCiAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1CgoqIEZpeCBiYWQgZGVjbGFyYXRpb24gb24gcGNpX2NmZ2Z1bmNfbm90aGluZwogIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQoKKiBBZGp1c3QgImVjaG8iIGFzIGEgZGVmYXVsdCBjb21tYW5kCiAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1CgoqIEZpeCBQQ0lERiBjYWxjdWxhdGlvbiBpbiBjcHUvbXBjODI2MC9zcGVlZC5jIGZvciBNUEM4MjgwRUMKICBQYXRjaCBieSBLb2tIb3cgVGVoLCAxNiBKdW4gMjAwNQoKKiBBZGQgY3JjIG9mIGRhdGEgdG8gamZmczIgKGluIGpmZnMyXzFwYXNzX2J1aWxkX2xpc3RzKCkpLgogIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTUgSnVuIDIwMDUKCiogQ29kaW5nIFN0eWxlIGNsZWFudXAKCiogQXZvaWQgZGVyZWZlcmVuY2luZyBOVUxMIGluIGZpbmRfY21kKCkgaWYgbm8gdmFsaWQgY29tbWFuZHMgd2VyZSBmb3VuZAogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMyBKdW4gMjAwNQoKKiBBZGQgQURJIEJsYWNrZmluIHN1cHBvcnQKICAtIGFkZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBCbGFja2ZpbiBCRjUzMyBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgQURJIEJGNTMzIFN0YW1wIHVDbGludXggYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgQURJIEJGNTMzIEVaS2l0IGJvYXJkCiAgUGF0Y2hlcyBieSBSaWNoYXJkIEtsaW5nbGVyLCAxMSBKdW4gMjAwNQoKKiBBZGQgbG9hZHMgb2YgbnRvaGwoKSBpbiBpbWFnZSBoZWFkZXIgaGFuZGxpbmcKICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBKdW4gMjAwNQoKKiBTd2l0Y2ggTVBDODZ4QURTIGFuZCBNUEM4ODVBRFMgYm9hcmRzIHRvIHVzZSBjcHVjbGsgZW52aXJvbm1lbnQKICB2YXJpYWJsZSB0byBzZXQgY2xvY2sKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQoKKiBSUFhsaXRlIGNvbmZpZ3VyYXRpb24gZml4ZXMKICAtIFVzZSBjb3JyZWN0IGZsYXNoIHNlY3RvciBzaXplCiAgLSBVc2UgY29ycmVjdCBtZW1vcnkgdGVzdCBlbmQgYWRkcmVzcwogIC0gQWRkIHN1cHBvcnQgZm9yIGJ6aXAyIGNvbXByZXNzaW9uCiAgLSBWYXJpb3VzIHNtYWxsIGZpeGVzCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKCiogTWVtb3J5IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBmb3IgWlBDLjE5MDAgYm9hcmQKICAtIEZpeCBTRFJBTSB0aW1pbmcgb24gYm90aCBsb2NhbCBidXMgYW5kIDYweCBidXMKICAtIEFkZCBzdXBwb3J0IGZvciBzZWNvbmQgZmxhc2ggYmFuayAoU0lNTSkKICAtIENoYW5nZSBib290IGZsYXNoIGJhc2UKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgQWRkZXIgYm9hcmRzIHdpdGggMTZNQiBTRFJBTTsKICBhZGQgc3VwcG9ydCBmb3Igc2Vjb25kIEZFQyBvbiBBZGRlcjg3eCBib2FyZC4KICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQoKKiBGaXggY29uZGl0aW9uYWwgZm9yIGluY2x1ZGluZyBrczg2OTVldGggZHJpdmVyCiAgUGF0Y2ggYnkgR3JlZyBVbmdlcmVyLCAwNCBKdW4gMjAwNQoKKiBGaXggTWFrZWZpbGU6IGluY2x1ZGUgY29uZmlnLm1rIG9ubHkgYWZ0ZXIgQ1JPU1NfQ09NUElMRSBpcyBkZWZpbmVkCiAgUGF0Y2ggYnkgRnJpZWRyaWNoIExvYmVuc3RvY2ssIDAyIEp1biAyMDA1CgoqIEZpeCBjb21tZW50IGluIGNvbW1vbi9zb2Z0X2kyYy5jCiAgUGF0Y2hlcyBieSBQZXRlciBLb3JzZ2FhcmQvVG9sdW5heSBPcmt1biwgMjYgTWF5IDIwMDUKCiogQ2xlYW51cCBjb21waWxlciB3YXJuaW5ncy4KICBQYXRjaCBieSBHcmVnIFVuZ2VyZXIsIDIxIE1heSAyMDA1CgoqIFdvcmQgYWxpZ25tZW50IGZpeGVzIGZvciB3b3JkIGFsaWduZWQgTlMxNjU1MCBVQVJUCiAgUGF0Y2ggYnkgSmVhbi1QYXVsIFNhbWFuLCAwMSBNYXIgMjAwNQoKICBGaXhlcyBidWcgd2l0aCBVQVJUIHRoYXQgb25seSBzdXBwb3J0cyB3b3JkIGFsaWduZWQgYWNjZXNzOiByZW1vdmVkCiAgIl9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsiIGZvciAiKENGR19OUzE2NTUwX1JFR19TSVpFID09IDQpIiBzb21lCiAgKGJyb2tlbiEpIHZlcnNpb25zIG9mIEdDQyBnZW5lcmF0ZSBieXRlIGFjY2Vzc2VzIHdoZW4gZW5jb3VudGVyaW5nCiAgdGhlIHBhY2tlZCBhdHRyaWJ1dGUgcmVnYXJkbGVzcyBpZiB0aGUgc3RydWN0IGlzIGFscmVhZHkgY29ycmVjdGx5CiAgYWxpZ25lZCBmb3IgYSBwbGF0Zm9ybS4gUGVyaXBoZXJhbHMgdGhhdCBjYW4gb25seSBoYW5kbGUgd29yZAogIGFsaWduZWQgYWNjZXNzIHdvbid0IHdvcmsgcHJvcGVybHkgd2hlbiBhY2Nlc3NlZCB3aXRoIGJ5dGUgYWNjZXNzLgogIFRoZSBzdHJ1Y3QgTlMxNjU1MCBpcyBhbHJlYWR5IHdvcmQgYWxpZ25lZCBmb3IgUkVHX1NJWkUgPSA0LCBzbwogIHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFja2VkIHRoZSBzdHJ1Y3QgaW4gdGhhdCBjYXNlLgoKKiBGaXggYmVoYXZpb3VyIGlmIGdhdGV3YXlpcCBpcyBub3Qgc2V0CiAgUGF0Y2ggYnkgUm9iaW4gR2lsa3MsIDIzIERlYyAyMDA0CgoqIEZpeCBjbGVhbnVwIGZvciBuZXRzdGFydCBib2FyZC4KICBSZW1vdmUgYnVpbGQgcmVzdWx0cyBmcm9tIHJlcG9zaXRvcnkKCiogU29tZSBjb2RlIGNsZWFudXAgZm9yIEdDQyA0LngKCiogRml4ZXMgdG8gc3VwcG9ydCBlbnZpcm9ubWVudCBpbiBOQU5EIGZsYXNoOwogIGVuYWJsZSBOQU5EIGZsYXNoIGJhc2VkIGVudmlyb25tZW50IGZvciBkZWx0YSBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIEludGVsIE1vbmFoYW5zIENQVSBvbiBaeWxvbml0ZSBhbmQgRGVsdGEgYm9hcmRzCiAgKFRoaXMgaXMgV29yayBpbiBQcm9ncmVzcyEpCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjYwLUFJIGJvYXJkcy4KCiogTWlub3IgY29kZSBjbGVhbnVwCgoqIE1lcmdlIHRoZSBuZXcgTkFORCBjb2RlICh0ZXN0aW5nLU5BTkQgYnJhY2gpOyBzZWUgZG9jL1JFQURNRS5uYW5kCiAgUmV3cml0ZSBvZiBOQU5EIGNvZGUgYmFzZWQgb24gd2hhdCBpcyBpbiAyLjYuMTIgTGludXgga2VybmVsCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDI5IEp1biAyMDA1CgoqIEFkZCBsb3dib290IHRhcmdldCB0byBtY2MyMDAgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDQgTWFyIDIwMDYKCiogRml4IHByb2JsZW0gd2l0aCBmbGFzaF9nZXRfc2l6ZSgpIGZyb20gQ0ZJIGRyaXZlciB1cGRhdGUKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEgTWFyIDIwMDYKCiogTWFrZSBDRkdfTk9fRkxBU0ggd29yayBvbiBBUk0gc3lzdGVtcwogIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDI3IEZlYiAyMDA2CgoqIFVwZGF0ZSBtY2MyMDAgY29uZmlnOiBEaXNhYmxlIFBDSSBhbmQgRG9DLCB1c2UgMTMzIE1IeiBJUEIgY2xvY2ssCiAgdXNlIGh1c2ggc2hlbGwuCgoqIENvbnZlcnQgbWNjMjAwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggRmViIDIwMDYKCiogQWRkIGVudi12YXJpYWJsZSAidW5sb2NrIiB0byBoYW5kbGUgaW5pdGlhbCBzdGF0ZSBvZiBzZWN0b3JzCiAgKGxvY2tlZC91bmxvY2tlZCkuCgogIE9ubHkgdGhlIFUtQm9vdCBpbWFnZSBhbmQgaXQncyBlbnZpcm9ubWVudCBpcyBwcm90ZWN0ZWQsCiAgYWxsIG90aGVyIHNlY3RvcnMgYXJlIHVucHJvdGVjdGVkICh1bmxvY2tlZCkgaWYgZmxhc2gKICBoYXJkd2FyZSBwcm90ZWN0aW9uIGlzIHVzZWQgKENGR19GTEFTSF9QUk9URUNUSU9OKSBhbmQKICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgInVubG9jayIgaXMgc2V0IHRvICJ5ZXMiLgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEZlYiAyMDA2CgoqIFVwZGF0ZSBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gZmluZF9zZWN0b3IoKSBjYWxsZWQgaW4gYm90aCB2ZXJzaW9ucyBvZiBmbGFzaF93cml0ZV9jZml3b3JkKCkKICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDI3dGggRmViIDIwMDYKCiogQ0ZJIHN1cHBvcnQgZm9yIGEgeDgveDE2IEFNRC9TcGFuc2lvbiBmbGFzaCBjb25maWd1cmVkIGluIHg4IG1vZGUKICBQYXRjaCBieSBKb3NlIE1hcmlhIExvcGV6LCAxNiBKYW4gMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgQU1EL1NwYW5zaW9uIEZsYXNoZXMgaW4gZmxhc2hfd3JpdGVfY2ZpYnVmZmVyCiAgUGF0Y2ggYnkgQWxleCBCYXN0b3MgYW5kIFRob21hcyBTY2hhZWZlciwgMjAwNS0wOC0yOQoKKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIFdlICpzaG91bGQqIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3IgYml0cyBpZiB0aGUgcHJldmlvdXMgY2FsbAogIHJldHVybmVkIEVSUl9PSyAoT3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSBvdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSBpbgogIGZsYXNoX3N0YXR1c19jaGVjaygpIGFscmVhZHkuKSAgVGhlIG9yaWdpbmFsIGNvZGUgd291bGQgb25seSBjaGVjayBmb3IKICBlcnJvciBiaXRzIGlmIGZsYXNoX3N0YXR1c19jaGVjaygpIHJldHVybnMgRVJSX1RJTUVPVVQuCiAgUGF0Y2ggYnkgTWFyY3VzIEhhbGwsIDIzIEF1ZyAyMDA1CgoqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBBZGQgQ0ZHX0ZMQVNIX1BST1RFQ1RfQ0xFQVIgb24gZHJpdmVycy9jZmlfZmxhc2guYwogIC0gUHJvaGliaXQgYnVmZmVyIHdyaXRlIHdoZW4gYnVmZmVyX3NpemUgaXMgMSBvbiBkcml2ZXJzL2NmaV9mbGFzaC5jCiAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOSBBdWcgMjAwNQoKKiBGaXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIEZpeCB3cm9uZyB0aW1lb3V0IHZhbHVlIHVzYWdlIGluIGZsYXNoX3N0YXR1c19jaGVjaygpCiAgLSBSb3VuZCB3cml0ZV90b3V0IHVwIHdoZW4gY29udmVydGluZyB0byBtc2VjIGluIGZsYXNoX2dldF9zaXplKCkKICAtIFJlbW92ZSBjbGVhcmluZyBmbGFzaCBzdGF0dXMgYXQgdGhlIGVuZCBvZiBmbGFzaF93cml0ZV9jZmlidWZmZXIoKQogICAgd2hpY2ggc2V0cyBJbnRlbCAyOEY2NDBKMyBmbGFzaCBiYWNrIHRvIGNvbW1hbmQgbW9kZSBvbiBDU0I0NzIKICBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwMiBKdWx5IDIwMDUKCiogQWRkIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBTTU1BQ080IEJvYXJkIGZyb20gUGFuRGFDb20uCiAgUGF0Y2ggYnkgSGVpa28gU2Nob2NoZXIsIDIwIEZlYiAyMDA2CgoqIEFkZCBHSVQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoY29tbWlkIElEKSB0byB1bnRhZ2dlZCBVLUJvb3QgdmVyc2lvbnMKCiAgQXMgZG9uZSBpbiB0aGUgbGludXgga2VybmVsLCB0aGUgVS1Cb290IHZlcnNpb24gKFVfQk9PVF9WRVJTSU9OKQogIG9mIGFsbCB1bnJlbGVhc2VkICh1bnRhZ2dlZCkgVS1Cb290IGltYWdlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKICBleHRlbmRlZCB1cG9uIGNvbXBpbGV0aW1lIHdpdGggYSBwYXJ0IG9mIHRoZSBHSVQgY29tbWl0IElEIGFuZAogIHBvc3NpYmx5IHdpdGggImRpcnR5IiBpZiB1bmNvbW1pdGVkIGNoYW5nZXMgYXJlIGRldGVjdGVkLgoKICBIZXJlIGFuIGV4YW1wbGUgZm9yIHRoZSByZXN1bHRpbmcgdmVyc2lvbjoKICAiVS1Cb290IDEuMS40LWczNDU3YWMxOC1kaXJ0eSIKCiAgVGhlIHZlcnNpb24gaXMgbm93IG1haW50YWluZWQgaW4gdGhlIHRvcGxldmVsIE1ha2VmaWxlIGFuZCB0aGUKICB2ZXJzaW9uIGhlYWRlcnMgYXJlIGF1dG9nZW5lcmF0ZWQuCgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgOSBGZWIgMjAwNgoKKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgSU5LQTR4MDAgYm9hcmQuCgoqIENvbnZlcnQgQ1BDSTc1MCB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCA4IEZlYiAyMDA2CgoqIFZhcmlvdXMgY2hhbmdlcyB0byBlc2QgSEg0MDUgYm9hcmQgc3BlY2lmaWMgZmlsZXMKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDcgRmViIDIwMDYKCiogQ2xlYW51cCBVLUJvb3QgYm9vdCBtZXNzYWdlcyBvbiBBUk0uCgogIFRvIG1hdGNoIHRoZSBVLUJvb3QgdXNlciBpbnRlcmZhY2Ugb24gQVJNIHBsYXRmb3JtcyB0byB0aGUgVS1Cb290CiAgc3RhbmRhcmQgKGFzIG9uIFBQQyBwbGF0Zm9ybXMpLCBzb21lIG1lc3NhZ2VzIHdpdGggZGVidWcgY2hhcmFjdGVyCiAgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGVmYXVsdCBVLUJvb3QgYnVpbGQuCiAgRW5hYmxlIERFQlVHIGZvciBsaWJfYXJtL2JvYXJkLmMgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2VzLgogIE5ldyBDT05GSUdfRElTUExBWV9DUFVJTkZPIGFuZCBDT05GSUdfRElTUExBWV9CT0FSRElORk8gb3B0aW9ucy4KICBQYXRjaAkgYnkgU3RlZmFuIFJvZXNlLCAyNCBKYW4gMjAwNgoKKiBGaXggdmFyaW91cyBjb21waWxlciB3YXJuaW5ncyBvbiBwcGM0eHggYnVpbGRzIChFTERLIDQuMCkKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEphbiAyMDA2CgoqIEFkZCBWR0Egc3VwcG9ydCAoQ1Q2OTAwMCkgdG8gQ1BDSTc1MCBib2FyZC4KICBJbnNlcnQgbWlzc2luZyBfX2xlMzJfdG9fY3B1KCkgZm9yIGZpbGVzaXplIGluIGV4dDJmc19yZWFkX2ZpbGUoKS4KICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAzMCBEZWMgMjAwNQoKKiBQTUM0MDUgYW5kIENQQ0k0MDU6IE1vdmVkIGNvbmZpZ3VyYXRpb24gb2YgcGNpIHJlc291cmNlcwogIGludG8gY29uZmlnIGZpbGUuCiAgUE1DNDA1IGFuZCBDUENJMkRQOiBBZGRlZCBmaXJtd2FyZSBkb3dubG9hZCBhbmQgYm9vdGluZyB2aWEgcGNpLgogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMCBEZWMgMjAwNQoKKiBBZGQgQ29sZEZpcmUgdGFyZ2V0cyB0byBNQUtFQUxMIHNjcmlwdAogIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAyNiBKYW4gMjAwNgoKKiBBZGQgc3VwcG9ydCBmb3IgcjUyMDAgYm9hcmQKICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjYgSmFuIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBNNTI3MSBwcm9jZXNzb3IKICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjYgSmFuIDIwMDYKCiogRml4IDI4RjI1NkozQSBzdXBwb3J0IG9uIFBNNTIwIGJvYXJkCiAgKHdpdGhvdXQgYmFuay1zd2l0Y2hpbmcgb25seSAzMiBNQiBjYW4gYmUgYWNjZXNzZWQpCgoqIEZpeCBta2ltYWdlIGJ1ZyB3aXRoIG11bHRpZmlsZSBpbWFnZXMgY3JlYXRlZCBvbiA2NCBiaXQgc3lzdGVtcy4KCiogQWRkIHN1cHBvcnQgZm9yIDI4RjI1NkozQSBmbGFzaCAoPT4gNjQgTUIpIG9uIFBNNTIwIGJvYXJkCgoqIEZpeCBjb21waWxlciBwcm9ibGVtIHdpdGggYXQ5MXJtOTIwMGRrIGJvYXJkLgogIFBhdGNoIGJ5IEV1Z2VuIEJpZ3osIDE5IERlYyAyMDA1Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBDaGFuZ2VzIHRvIFllbGxvd3N0b25lICYgWW9zZW1pdGUgNDQwRVAvR1IgZXZhbCBib2FyZHM6CiAgLSBDaGFuZ2VkIEdQSU8gc2V0dXAgdG8gZW5hYmxlIGFub3RoZXIgYWRkcmVzcyBsaW5lIGluIG9yZGVyIHRvCiAgICBhZGRyZXNzIDY0TSBvZiBGTEFTSC4KICAtIEFkZGVkIGZ1bmN0aW9uIHNkcmFtX3RyMV9zZXQgdG8gYXV0byBjYWxjdWxhdGUgdGhlIHRyMSB2YWx1ZSBmb3IKICAgIHRoZSBERFIuCiAgUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMTIgRGVjIDIwMDUKCiogTVBDNTIwMDogIFNldCBQQ0kgcmV0cnkgY291bnRlciB0byAwID0gaW5maW5pdGUgcmV0cnk7CiAgVGhlIGRlZmF1bHQgb2YgMjU1IGlzIHRvbyBzaG9ydCBmb3Igc2xvdyBkZXZpY2VzLgogIFBhdGNoIGJ5IE1hcnRpbiBOeWtvZHltLCAxMiBEZWMgMjAwNQoKKiBDaGFuZ2UgcG9ydCBjb25maWd1cmF0aW9uIGZvciBPMkROVCAoQ09ERUMxIG9uIFBTQzEpLgoKKiBGaXggcmVnaXN0ZXIgZm9yIFBDSSBhc3luYyBtb2RlIG9uIFBQQzQ0MEVQCiAgUGF0Y2ggYnkgWW91bmdjaHVsIEJhbmcsIDA4IERlYyAyMDA1CgoqIEZpeCBVLUJvb3QgbGlua2luZyBwcm9ibGVtcyAoYWRkIC5laF9mcmFtZSBzZWdtZW50IHRvIGxpbmtlciBzY3JpcHQpCiAgVGhpcyBzZWdtZW50IG1heSBiZSByZXF1aXJlZCBieSBzb21lIGxpYmdjYy5hIGZ1bmN0aW9ucwogIChsaWtlIF91ZGl2ZGkzKS4KCiogRml4IERQUkFNIG9mZnNldC9zaXplIGZvciBNUEM4NTQxLzg1NTUuCiAgU2ltcGxpZnkgVFFNODV4eCBNYWtlZmlsZSBoYW5kbGluZy4KCiogRml4IGRhdGEgb3ZlcmZsb3cgKHR5cG8/KSBpbiBydGMvZHMxMzAyLmMKCiogRml4IFUtQm9vdCBjb21waWxhdGlvbiBmb3IgTUlQUyBib2FyZHMgdXNpbmcgRUxESyA0LjAKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NDEvODU1NSBib2FyZHMsIFRRTTg1eHggc3VwcG9ydCByZXdvcmtlZDoKICAtIFN1cHBvcnQgZm9yIFRRTTg1NDEvODU1NSBib2FyZHMgYWRkZWQuCiAgLSBDb21wbGV0ZSByZXdvcmsgb2YgVFFNODU0MC84NTYwIHN1cHBvcnQuCiAgLSBDb21tb24gVFFNODV4eCBjb2RlIG5vdyBzdXBwb3J0cyBhbGwgY3VycmVudCBUUU04NXh4IHBsYXRmb3JtcwogICAgKFRRTTg1NDAvODU0MS84NTU1Lzg1NjApLgogIC0gRERSIFNEUkFNIHNpemUgZGV0ZWN0aW9uIGFkZGVkLgogIC0gQ0FTIGxhdGVuY3kgZGVmYXVsdCB2YWx1ZXMgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHNldHRpbmcgInNlcmlhbCMiCiAgICB0byBlLmcuICJBQkMwMDAxIGNhc2w9MjUiIC0+IENBUyBsYXRlbmN5IDIuNSB3aWxsIGJlIHVzZWQuCiAgICBJZiBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgd2l0aCB0aGlzIG5vbiBkZWZhdWx0IENBUyBsYXRlbmN5LAogICAgdGhlIGRlZmF1bHQgdmFsdWVzIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgogIC0gRmxhc2ggc2l6ZSBkZXRlY3Rpb24gYWRkZWQuCiAgLSBNb3ZlZCBGQ0MgZXRoZXJuZXQgZHJpdmVyIGluaXRpYWxpemF0aW9uIGJlaGluZCBUU0VDIGRyaXZlciBpbml0CiAgICAtPiBUU0VDIGlzIGZpcnN0IGRldmljZS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMwIE5vdiAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBTUNDIDQ0MFNQLCBhZGQgc3VwcG9ydCBmb3IgQU1DQyBMdWFuIDQ0MFNQIGV2YWwgYm9hcmQuCiAgUGF0Y2ggYnkgSm9obiBPdGtlbiwgMjMgTm92IDIwMDUKCiogQ2hhbmdlZCBQUEM0NHggc3RhcnR1cCBtZXNzYWdlIChjcHUgaW5mbywgc3BlZWQuLi4pIHRvIGNvbW1vbiBzdHlsZToKICBPbiBQUEM0NHggcGxhdGZvcm1zLCB0aGUgc3RhcnR1cCBtZXNzYWdlIGdlbmVyYXRlZCBpbiAiY3B1LmMiIG9ubHkKICBjb21wcmlzZWQgdGhlIHBwYyB0eXBlIGFuZCByZXZpc2lvbiBidXQgbm90IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KICBsaWtlIHNwZWVkIGV0Yy4gVGhvc2Ugc3BlZWQgaW5mb3Mgd2hlcmUgcHJpbnRlZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMKICBjb2RlLiBUaGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBub3cgcHJpbnRzIGFsbCBDUFUgaW5mb3MgaW4gdGhlIGNvbW1vbgogIGNwdSBzcGVjaWZpYyBjb2RlLiBObyBib2FyZCBzcGVjaWZpYyBjb2RlIGlzIG5lZWRlZCBhbnltb3JlIGFuZAogIHRoZXJlZm9yZSByZW1vdmVkIGZyb20gYWxsIGN1cnJlbnQgNDR4IGltcGxlbWVudGF0aW9ucy4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IE5vdiAyMDA1CgoqIEFkanVzdCBUUU04MzR4IFBIWSBhZGRyZXNzZXMgZm9yIGxhdGVzdCBoYXJkd2FyZSByZXZpc2lvbi4KCiogSW5jcmVhc2UgbWFsbG9jIGFyZW5hIG9uIFRRTTUyMDAgYm9hcmQgdG8gMjU2IGtCLgogIFdpdGggNjQga2IgdW5pZm9ybSBmbGFzaCBzZWN0b3Igc2l6ZSB0aGUgb2xkIHZhbHVlIG9mIDEyOCBrQiB3YXMKICB0b28gc21hbGwuCgoqIEZpeCBtaWlwaHkgZ2xvYmFsIGRhdGEgaW5pdGlhbGl6YXRpb24gKHByb2JsZW0gb24gNHh4IGJvYXJkcyB3aGVuCiAgbm8gZXRoYWRkciBpcyBhc3NpZ25lZCkuIEluaXRpYWxpemF0aW9uIG1vdmVkIGZyb20KICBtaWlwaHlfcmVnaXN0ZXIoKSB0byBldGhfaW5pdGlhbGl6ZSgpLgoKICBCYXNlZCBvbiBpbml0aWFsIHBhdGNoIGZvciA0eHggcGxhdGZvcm0gYnkgTWF0dGhpYXMgRnVjaHMuCgoqIFJlbW92ZSB1bm5uZWNlc3NhcnkgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+IGZyb20gaW5jbHVkZS9hc20tKi91LWJvb3QuaAoKKiBBbGxvdyB1c2Ugb2YgaW5jbHVkZS9pbWFnZS5oIGFuZCBpbmNsdWRlL2FzbS0qL3UtYm9vdC5oIGluIHByb3ByaWV0YXJ5IGNvZGUuCiAgVGhlIENPUFlJTkcgZmlsZSB3YXMgZXh0ZW5kZWQgdG8gbWFrZSBjbGVhciB0aGF0IHRoZXNlIGZpbGVzIGNhbiBiZQogIHVzZWQgaW4gbm9uLUdQTCBjb2RlLCB0b28uCiAgQWxzbywgYSBjb3JyZXNwb25kaW5nIG5vdGUgd2FzIHBsYWNlZCBpbiB0aGUgaGVhZGVycyBvZiB0aGUgYWZmZWN0ZWQgZmlsZXMuCgoqIEFkZCBzdXBwb3J0IGZvciBQcm9kcml2ZSBQM1A0NDAgYm9hcmQ6CiAgLSBBZGRlZCBvbmJvYXJkIFBQQzQ0MCBERFIgYXV0b2RldGVjdGlvbiBpbiBjcHUvcHBjL3NkcmFtLmMKICAtIENGR19GTEFTSF9RVUlFVF9URVNUIGFkZGVkIHRvIHVzZSB0aGUgY29tbW9uIENGSSBkcml2ZXIKICAgIGZvciBiYW5rIGF1dG9kZXRlY3Rpb24KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIyIE5vdiAyMDA1CgoqIENoYW5nZSBhbGwgJyQoLi4uKScgdmFyaWFibGUgcmVmZXJlbmNlcyBpbnRvICckey4uLn0nCiAgd2hpY2ggbWFrZXMgdGhlIGVudmlyb25tZW50IGNvbXBhdGlibGUgd2l0aCB0aGUgaHVzaCBzaGVsbC4KICBXQVJOSU5HOiBTdXBwb3J0IGZvciB0aGUgb2xkICckKC4uLiknIHN5bnRheCB3aWxsIGJlCiAgZGlzY29udGludWVkIGluIGEgbGF0ZXIgdmVyc2lvbi4KCiogTWlub3IgY2hhbmdlcyB0byBpbml0IGZsYWdzIGluIFRRTTgzNHggUENJLgoKKiBGaXggQmFtYm9vIEREUiBTRFJBTSBpbml0aWFsaXphdGlvbiAocHJvYmxlbSB3aXRoIG9uYm9hcmQgU0RSQU0pCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBOb3YgMjAwNQoKKiBOZXcgUFBDIDQwNUVQIGJvYXJkIGFkZGVkOiBDTVM3MDAKICBBZGRlZCBDT05GSUdfTkVUX01VTFRJIGZvciBWT000MDUgYm9hcmQuCiAgQWRkZWQgcmVzZXRfcGh5KCkgZm9yIFZPTTQwNSBib2FyZC4KICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDkgTm92IDIwMDUKCiogVXBkYXRlZCBQQ0kgbWFwcGluZyBmb3IgZXNkIENQQ0kyRFAgYm9hcmQuCiAgQWRkIHN1cHBvcnQgZm9yIGVycm9yIExFRC4KICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDcgTm92IDIwMDUKCiogRml4IE1QQzg1eHggUENJIHN1cHBvcnQgKHBjaV9yZWdpc3Rlcl9ob3NlKCkgYmVmb3JlIHBjaSBjb25maWcgYWNjZXNzKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgTm92IDIwMDUKCiogQ29ycmVjdCBQUEMgVGltZWJhc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKFNQUk5fVEJSTC4uLikKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE5vdiAyMDA1CgoqIEFkanVzdCBiZC0+YmlfZmxhc2hzdGFydCBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIHRvIGNvcnJlY3Qgc2l6ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgTm92IDIwMDUKCiogQWRkaXRpb25hbCBmaXggZm9yIGV4dGVybmFsIElSUSBjb25maWcgb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgTm92IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIE9jb3RlYSBwYXNzIDMgd2l0aCA0NDBHWCBSZXYuIEYKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIE5vdiAyMDA1CgoqIEZpeCBleHRlcm5hbCBJUlEgY29uZmlndXJhdGlvbiBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBPY3QgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgUEhZcy4KICBUZXN0ZWQgb24gdGhlIGZvbGxvd2luZyBib2FyZHM6CgljbWNwdTIJICAgIChhdDkxcm05MjAwL2V0aGVyLmMpCglQUENoYW1lbGVvbiAocHBjNHh4LzR4eF9lbmV0LmMpCgl5dWtvbgkgICAgKG1wYzgyMjAvZmVjLmMpCgl1YzEwMAkgICAgKG1wYzh4eC9mZWMuYykKCXRxbTgzNHgJICAgIChtcGM4MzR4L3RzZWMuYykgd2l0aCBFRVBSTzEwMAoJbGl0ZTUyMDAgICAgKG1wYzV4eHgvZmVjLmMpIHdpdGggRUVQUk8xMDAgY2FyZCAoZHJpdmVycy9lZXBybzEwMC5jKQogIE1haW4gY2hhbmdlcyBpbmNsdWRlOgogIGNvbW1vbi9taWlwaHl1dGlsLmMKICAtIG1paXBoeV9yZWdpc3RlciByb3V0aW5lIHdhcyBhZGRlZCB0byBhbGxvdyBtdWx0aXBsZSBQSFlzIHRvIGJlIHJlZ2lzdGVyZWQKICAtIG1paXBoeV9yZWFkIGFuZCBtaWlwaHlfd3JpdGUgYXJlIG5vdyBkZWZpbmVkIGluIHRoaXMgZmlsZSwgYW5kCiAgICByZXF1aXJlIGFkZGl0aW9uYWwgYXJndW1lbnQgKGNoYXIgKmRldm5hbWUpCiAgLSBvdGhlciBtaWlwaHlfKiByb3V0aW5lcyBhbHNvIHJlcXVpcmUgYWRkaXRpb25hbCBkZXZpY2UgbmFtZSBhcmd1bWVudAogIC4uL2xpYl9pMzg2L2JvYXJkLmMKICAuLi9saWJfcHBjL2JvYXJkLmMKICBDYWxsaW5nIHJlc2V0X3BoeSgpIHdhcyBtb3ZlZCB0byBiZSBleGVjdXRlZCAqYWZ0ZXIqIGV0aF9pbml0aWFsaXplKCkuCiAgVGhpcyBpcyBuZWNlc3NhcnkgYXMgbm93IHNvbWUgb2YgdGhlIGltcGxlbWVudGF0aW9ucyBvZiByZXNldF9waHkoKQogIG1heSBuZWVkIHRvIHVzZSBtaWlwaHlfcmVzZXQoKSB3aGljaCBpcyBub3QgYWxsb3dlZCBiZWZvcmUgZXRoX2luaXRpYWxpemUoKQogIGFzIGV0aF9pbml0aWFsaXplIHJlZ2lzdGVycyBhbGwgcmVxdWlyZWQgbWlpcGh5Xyogcm91dGluZXMuCiAgVGVzdGVkIG9uIElQODYwIGFuZCBQSFkgaW5pdGlhbGl6ZXMgcHJvcGVybHkgYWZ0ZXIgdGhpcyBjaGFuZ2UuCgoqIENvcnJlY3QgaW5jbHVkZXMgZm9yIGZsYXQgdHJlZSBidWlsZGVyLgoKKiBGaXggY29uZmxpY3RpbmcgdHlwZXMgKGZsYXNoX3dyaXRlKCkpIGluIHRyYWIgYXV0b191cGRhdGUuYy4KCiogQWRkIFBDSSBzdXBwb3J0IGZvciB0aGUgVFFNODM0eCBib2FyZC4KCiogQWRkIG1pc3NpbmcgNHh4IGJvYXJkIHRvIE1BS0VBTEwKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CgoqIEZpeCBjb25mbGljdGluZyB0eXBlcyAoZmxhc2hfd3JpdGUoKSkgaW4gZXNkIGF1dG9fdXBkYXRlLmMKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CgoqIEZpeCBwcm9ibGVtIHdpdGggc2xlZXAgaW4gTmV0Q29uc29sZSAodXNlIGdldF90aW1lcigpKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKCiogQWRkIE5ldENvbnNvbGUgU3VwcG9ydCBmb3IgQU1DQyBldmFsIGJvYXJkcwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKCiogRml4IE5ldENvbnNvbGUgc3VwcG9ydCBvbiA0eHggKG9ubHkgcHJpbnQgZXRoIGxpbmsgb24gMXN0IHRyYW5zZmVyKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggT2N0IDIwMDUKCiogQWRkIGZhdCAmIGV4dDIgc3VwcG9ydCB0byBBTUNDIDQ0MEVQIGJvYXJkcyBZb3NlbWl0ZSAmIEJhbWJvby4KICBGaXggaWRlbnRhdGlvbiBvbiBleHQybHMgaGVscCBlbnRyeS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IE9jdCAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MzR4IGJvYXJkcy4KICBDbGVhbnVwLgoKKiBDbGVhbnVwIGZvciBHQ0MtNC54CgoqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBPcGVuIEZpcm13YXJlIEZsYXQgVHJlZSBhbmQgdXNhZ2UuCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDEzIE9jdCAyMDA1CgoqIEFkZCBtaXNzaW5nIGZpbGVzIGZvciBQYW50ZWxpcyBBbnRvbmlvdSdzIHBhdGNoCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1CgoqIEZpeCBwcm9ibGVtIGluIHBwYzR4eCBldGgtZHJpdmVyIHdpdGhvdXQgZXRoYWRkciAob25seSB3aXRob3V0CiAgQ09ORklHX05FVF9NVUxUSSBzZXQpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBPY3QgMjAwNQoKKiBGaXggZ3ppcCBibXAgc3VwcG9ydCAodGVzdCBpZiBtYWxsb2MgZmFpbHMsIHdhcm5pbmcgd2hlbiB0cnVuY2F0ZWQpLgogIEluY3JlYXNlIENGR19WSURFT19MT0dPX01BWF9TSVpFIG9uIEhINDA1IGJvYXJkLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgT2N0IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIE9GIGZsYXQgdHJlZSBmb3IgdGhlIFNUWHRjIGJvYXJkLgogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQoKKiBTdXBwb3J0IHBhc3Npbmcgb2YgT0YgZmxhdCB0cmVlcyB0byB0aGUga2VybmVsLgogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQoKKiBDbGVhbnVwCgoqIEFkZCBzdXBwb3J0IGZvciBOZXRTaWxpY29uIE5TNzUyMCBwcm9jZXNzb3IuCiAgUGF0Y2ggYnkgQXJ0IFNoaXBrb3dza2ksIDEyIE1heSAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBUDEwMDAgYm9hcmQuCiAgUGF0Y2ggYnkgSmFtZXMgTWFjQXVsYXksIDA3IE9jdCAyMDA1CgoqIEVsaW1pbmF0ZSBoYXJkLWNvZGVkIGFkZHJlc3Mgb2YgRXRoZXJuZXQgdHJhbnNmZXIgYnVmZmVyIG9uIGF0OTFybTkyMDAKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNyBPY3QgMjAwNQoKICBUaGUgQXRtZWwgZXJyYXRhICMxMSBzdGF0ZXMgdGhhdCB0aGUgdHJhbnNmZXIgYnVmZmVyIGRlc2NyaXB0b3IKICB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSAxNi13b3JkIGJvdW5kYXJ5LiBBcyBpdCB0dXJuZWQgb3V0LCB0aGlzCiAgaXMgaW5zdWZmaWNpZW50IC0gaXQgc2VlbXMgdGhlIHRhYmxlIG11c3QgYmUgYWxpZ25lZCBvbiBhIGJvdW5kYXJ5CiAgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIHRhYmxlIGl0c2VsZiAoaW4gTGludXggdGhpcyBpcyBub3QgYW4KICBpc3N1ZSAtIHRoZSB0YWJsZSBpcyBhbGlnbmVkIG9uIGEgUEFHRV9TSVpFICg0MDk2KSBib3VuZGFyeSkuCgoqIEZpeGVkIGNvbXBpbGF0aW9uIGZvciBBUk0gd2hlbiB1c2luZyBhIChzdGFuZGFyZCkgaGFyZC1GUCB0b29sY2hhaW4KICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNyBPY3QgMjAwNQoKKiBDbGVhbnVwIHdhcm5pbmdzIGZvciBjcHUvYXJtNzIwdCAmIGNwdS9hcm0xMTM2IGZpbGVzLgogIHNlZCB0aGUgbGlua2VyIHNjcmlwdHMsIHJhdGhlciB0aGFuIHByZS1wcm9jZXNzIHRoZW0uCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNyBPY3QgMjAwNQoKKiBVcGRhdGUgbWFrZSB0YXJnZXQgZm9yIEFSTSBzdXBwb3J0ZWQgYm9hcmRzLgogIFVzZSBsb3dsZXZlbF9pbml0KCkgaW5zdGVhZCBvZiBwbGF0Zm9ybXNldHVwKCkgW3JlbmFtZV0uCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNiBPY3QgMjAwNQoKKiBGaXggYm9vdGluZyBmcm9tIHNlcmlhbCBkYXRhZmxhc2ggb24gQVQ5MVJNOTIwMAogIFBhdGNoIGJ5IFBldGVyIE1lbnplYmFjaCwgMjkgQXVnIDIwMDUKCiogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIFRSQUIgYm9hcmQKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNSBBdWcgMjAwNQoKKiBSZW1vdmUgdW5uZWNlc3NhcnkgZGVwZW5kZW5jeSBvZiBuZXRjb25zb2xlIG9uIENPTkZJR19ORVRfTVVMVEkKICBQYXRjaCBieSBNYXJjdXMgSGFsbCwgMjQgQXVnIDIwMDUKCiogRml4IHRoZSBtYWNoaW5lLWlkIG9mIHRoZSBDb2dlbnQgY3NiNjM3IGJvYXJkCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDUgT2N0IDIwMDUKCiogQ29tcGxldGUgc3VwcG9ydCBmb3IgdGhlIEt3aWtCeXRlIEtCOTIweCBib2FyZHMKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNSBPY3QgMjAwNQoKKiBTZXQgdGhlIEFUOTFSTTkyMDAgY2xvY2sgdG8gYXN5bmNocm9ub3VzIG1vZGUKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwMyBNYXkgMjAwNQoKKiBTZXQgdGhlIEFUOTFSTTkyMDAgY2xvY2sgdG8gc3luY2hyb25vdXMgbW9kZQogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgY3NiNjM3CiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKCiogRml4IGRtOTE2MS5jIGluaXRpYWxpemF0aW9uCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKCiogRml4IHByb2JsZW1zIGludHJvZHVjZWQgYnkgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDIgTWFyIDIwMDUKICAoOGUyYmU1MWRlOGRkMDNjMWNlNGQwNmNiYjE4YWQwNjEzM2Q0N2NkNSkKCiogTW92ZSBkbTkxNjEuYyBhbmQgbHh0OTcyLmMgaW50byBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKCiogRml4IGRldmljZSBwYXJ0aXRpb24gaW50aWFsaXphdGlvbiBmb3IgU3lzdGVtQUNFIGRpc2tzLgogIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDI4IEFwciAyMDA1CgoqIEFkZGVkIHN1cHBvcnQgZm9yIEt3aWtCeXRlIEtCOTIweCBib2FyZHMgKGJhc2VkIG9uIEFUOTFSTTkyMDApCiAgUGF0Y2ggYnkgTWF0dCA/PyA8a2I5MjAwX2RldkBrd2lrYnl0ZS5jb20+LCAyNyBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgUzI5R0wwNjRNLVIzIGZsYXNoIGNoaXAgb24geHNlbmdpbmUgYm9hcmQKICBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMTggQXByIDIwMDUKCiogRTUwMCB1cGRhdGU6IHJlcG9pbnQgSVZQUiB0byBSQU0gd2hlbiBjb2RlIGlzIHJlbG9jYXRlZAogIFBhdGNoIGJ5IEt5bG8gR2luc2JlcmcsIDEzIEFwciAyMDA1CgoqIEZpeCBsb29wIGVuZCB0ZXN0IGluIGxpYl9nZW5lcmljL3N0cmluZy5jOnN0cnN3YWIoKQogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCBPY3RvYmVyIDEwLCAyMDA1CiAgU2lnbmVkLW9mZi1ieTogQW5kcmV3IER5ZXIgPGFtZHllckBnbWFpbC5jb20+CgoqIENsZWFudXAKCiogVXBkYXRlIEFSTSBJbnRlZ3JhdG9yIGJvYXJkczoKICBDb3JyZWN0IGFkZGVzc2luZyBlcnJvcnMgaW4gcGxhdGZvcm0gZmlsZXMuCiAgU3BsaXQgb2ZmIGNvbW1vbiBjb3JlIG1vZHVsZSBkYXRhIGZyb20gSW50ZWdyYXRvciBoZWFkZXIgZmlsZXMgdG8KICBpbmNsdWRlL2FybWNvcmVtb2R1bGUuaC4KICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA0IE9jdCAyMDA1CgoqIE1ha2Ugc3VyZSBvbmx5IHN1cHBvcnRlZCBjb21waWxlciBvcHRpb25zIGFyZSB1c2VkCiAgSW1wb3J0ICJjYy1vcHRpb24iIHNoZWxsIGZ1bmN0aW9uIGZyb20ga2VybmVsIGFuZAogIHVzZSBpdCB0byBnZXQgdGhlIGNvcnJlY3QgQVJNIEdDQyBvcHRpb25zIGZvciBpbmRpdmlkdWFsIENQVXMKICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDMwIEp1biAyMDA1CgoqIEZpeCA0NDBHUiB0byBwcmludCBjb3JyZWN0IGNwdSByZXZpc2lvbgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDQgT2N0IDIwMDUKCiogQ2hhbmdlIGJvYXJkIG1lc3NhZ2Ugb24gQU1DQyBZb3NlbWl0ZSAmIFllbGxvd3N0b25lIHRvIGNvbW1vbiBzdHlsZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgT2N0IDIwMDUKCiogRml4IGNvbXBpbGVyIHdhcm5pbmcKCiogRml4IEZFQyBQSFkgYWRkcmVzc2VzIGZvciBUUU04NXh4IGJvYXJkcwoKKiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBwcm9ibGVtIGluIGh1c2ggc2hlbGwKICBQYXRjaCBieSBMYXJzIFJvc3RvY2ssIDI2IFNlcCAyMDA1CgoqIFVuZG8gY2hhbmdlIG9mIGY2ZTIwZmM2Y2EuLi4gdG8gaW5jbHVkZS9jb25maWdzL3RyYWIuaAogIChNdXN0IGhhdmUgYmVlbiBhbiBhY2NpZGVudD8pCgoqIEFkZCBzdXBwb3J0IGZvciBBVDkxUk05MjAwIE9IQ0kgQ29udHJvbGxlci4KICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKCiogVXBkYXRlIEFSTSBtYWNoLXR5cGVzLmgKICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIE1QMlVTQiBib2FyZC4KICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMDcgQXByIDIwMDUKCiogQWRkIGJvYXJkIHN1cHBvcnQgZm9yIGFybWFkaWxsbyBIVDEwNzAKICBQYXRjaCBieSBSb3dlbCBBdGllbnphLCAwNiBBcHIgMjAwNQoKKiBTZWNvbmQgRXRoZXJuZXQgYWRkcmVzcyBlbmFibGVkIGZvciBNUEM4ODVBRFMgYW5kIE1QQzgyNzJBRFMuCiAgUGF0Y2ggYnkgVml0YWx5IEJvcmR1ZywgMzAgTWFyIDIwMDUKCiogQWRkIGlvcHNldCBjb21tYW5kIG9uIG1wYzh4eAogIFBhdGNoIGJ5IERhbmllbCBFaXNlbmh1dCwgMjUgTWFyIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIE1JSSBpbiBlZXBybzEwMCBkcml2ZXIuCiAgUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAyMSBNYXIgMjAwNQoKKiBGaXhlcyB0byB0aGUgTHViYm9jayAoUFhBIDI1eCkgc3VwcG9ydDoKICAtIFJlc29sdmUgdGhlIEZJWE1FIHdpdGggcmVzcGVjdCB0byBzYXZpbmcgdGhlIHUtYm9vdCBlbnZpcm9ubWVudC4KICAtIE1ha2UgdGhlIGRlZmF1bHQgbG9hZCBhZGRyZXNzIGxhbmQgaW4gcmVhbCBtZW1vcnkuCiAgLSBGaXggbGFuOTFjOTYgU01DX3tpbixvdXR9e2IsdyxsfSgpIG1hY3JvcwogIFBhdGNoIGJ5IERhdmlkIEJyb3duZWxsLCAxMCBNYXIgMjAwNQoKKiBBZGQgQmFyY28gU3RyZWFtaW5nIFZpZGVvIENhcmQgKFNWQykgYW5kIFNhbXBsZSBDb21wcmVzcyBOZXR3b3JrIChTQ04pIGJvYXJkCiAgUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDA0IE1hciAyMDA1CgoqIE9NQVAyNDJ4IEg0IGJvYXJkIHVwZGF0ZQogIC0gZml4IGZvciBFUzIgZGlmZmVyZW5jZXMuCiAgLSBzd2l0Y2ggdG8gdXNpbmcgdGhlIGNmaV9mbGFzaCBkcml2ZXIuCiAgLSBmaXggU1JBTSBidWlsZCBhZGRyZXNzLgogIC0gZml4IGZvciBHUCBkZXZpY2Ugb3BlcmF0aW9uLgogIC0gdW5sb2NrIFNSQU0gZm9yIEdQIGRldmljZXMuCiAgLSBkaXNwbGF5IG1vcmUgZGV2aWNlIGluZm9ybWF0aW9uLgogIC0gZml4IHBvdGVudGlhbCBkZWFkbG9jayBpbiBvbWFwMjR4eF9pMmMgZHJpdmVyLgogIC0gZml4IERMTCBsb2FkIHZhbHVlcyB0byBtYXRjaCBkcGxsb3V0KjEgb3BlcmF0aW9uLgogIC0gZml4IDJuZCBjaGlwIHNlbGVjdCBpbml0IGZvciBjb21ibyBERFIgZGV2aWNlLgogIC0gYWRkIHN1cHBvcnQgZm9yIENGSSBJbnRlbCAyOEYyNTZMMTggb24gSDQgYm9hcmQuCiAgUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMDMgTWFyIDIwMDUKCiogRml4IGZvcm1hdGluZyBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL0FUOTFSTTkyMDAuaAogIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAyIE1hciAyMDA1CgoqIEZpeCB0eXBvIGluIGV0aC5jCiAgUGF0Y2ggYnkgQXJhIEF2YW5lc3lhbiwgMjQgRmViIDIwMDUKCiogUmVtb3ZlIHVubmVlZGVkICNpbmNsdWRlIDxtYWxsb2MuaD4KICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjIgRmViIDIwMDUKCiogQWRkIGNyYW1mcyBzdXBwb3J0IGZvciBtNjhrCiAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDIxIEZlYiAyMDA1CgoqIFVwZGF0ZSBlcDgyNjA6IEZpeCBmbGFzaCB0aW1lb3V0czsgaW1wcm92ZSBjbG9jayByZXNvbHV0aW9uIGZvciBmYXN0ZXIgVUFSVHMKICBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMjEgRmViIDIwMDUKCiogRml4IGF1MXgwMF9zZXJpYWwgYmF1ZCByYXRlIGNhbGN1bGF0aW9uOgogIHJlbW92ZSBoYXJkY29kZWQgY3B1IGNsb2NrIGRpdmlzb3IgYW5kIHVzZSByZWdpc3RlciBpbnN0ZWFkOwogIHJvdW5kIHVwIGluc3RlYWQgb2YgdHJ1bmNhdGUKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTUgRmViIDIwMDUKCiogQWRkIFhpbGlueCBTcGFydGFuMyBmYW1pbHkgRlBHQSBzdXBwb3J0CiAgUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDE0IEZlYiAyMDA1CgoqIEZpeCBkcml2ZXJzL2NmaV9mbGFzaC5jOiB1c2UgaW5mby0+cmVzZXRfY21kIGluc3RlYWQgb2YgRkxBU0hfQ01EX1JFU0VUCiAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDExIEZlYiAyMDA1CgoqIEZpeCBWT0g0MDUgU3VwcG9ydAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyNSBTZXAgMjAwNQoKKiBBZGRlZCBzdXBwb3J0IGZvciBQQ0kgYnJpZGdlIG9uIE1QQzgyNzJBRFMKICBQYXRjaCBieSBWaXRhbHkgQm9yZHVnLCBGZWIgMDkgMjAwNQoKKiBVcGRhdGUgbXVsdGljb3JlIENNOVhYIHN1cHBvcnQgZm9yIEludGVncmF0b3IgQVAgdG8gYWxsb3cgYm9vdGluZyBmcm9tIGZsYXNoCiAgUGF0Y2ggYnkgSmVhbi1QYXVsIFNhbWFuLCA4IEZlYiAyMDA1CgoqIEZpeCBzdHJzd2FiKCkgdG8gcmVsaWFibHkgZmluZCBlbmQgb2Ygc3RyaW5nCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDA4IEZlYiAyMDA1CgoqIEZpeCB0eXBvcyBpbiBpbmNsdWRlL3BwYzQ0MC5oCiAgUGF0Y2ggYnkgQW5kcmV3IEUgTWlsZXNraSwgMDQgRmViIDIwMDUKCiogQWRkIFZpYnJlbiAod2FzIEFjY2VsZW50KSBQWEEyNTUgSURQIFN1cHBvcnQKICBQYXRjaCBieSBDbGlmZiBCcmFrZSwgMDQgRmViIDIwMDUKCiogRml4IHRvb2xzL2JtcF9sb2dvLmMgdXNpbmcgaW5jb3JyZWN0IG9mZnNldCB0byBwaXhlbCBkYXRhCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDMxIEphbiAyMDA1CgoqIEFkZCBBUk05NDZFIGNwdSBhbmQgY29yZSBtb2R1bGUgdGFyZ2V0czsgcmVtYXAgbWVtb3J5IHRvIDB4MDAwMDAwMDAKICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDIgRmViIDIwMDUKCiogRml4IGVycm9yIGhhbmRsaW5nIGluIHRvb2xzL2Vudi9md19lbnYuYwogIFBhdGNoIGJ5IEFyYSBBdmFuZXN5YW4sIDAxIEZlYiAyMDA1CgoqIEZpeCBNR1Q1MTAwIFBTQyBiYXVkcmF0ZSBjYWxjdWxhdGlvbgogIFBhdGNoIGJ5IFNlYmFzdGlhbiBTY2hhdSwgMjcgSmFuIDIwMDUKCiogT01BUDI0MnggZml4IGZvciBHUCBkZXZpY2UgYm9vdGluZwogIC0gQWRkIFNSQU0gdW5sb2NrIGZvciBHUCBkZXZpY2VzLgogIC0gQ2hhbmdlIEREUiBETEwgdW5sb2NrIHZhbHVlIHRvIGFsbG93IERQTExvdXQqMSBvcGVyYXRpb24uCiAgUGF0Y2hlcyBieSBSaWNoYXJkIFdvb2RydWZmLCAyMSBKYW4gMjAwNToKCiogQWRkIHN1cHBvcnQgZm9yIEFNRCdzIFBiMXgwMCBldmFsIGJvYXJkOwogIGFkZCBNSUkgcm91dGluZXMgdG8gdGhlIGF1MXgwMCBldGhlcm5ldCBkcml2ZXI7CiAgYWRkIFVTQiBvaGNpIGRyaXZlciAod29yayBpbiBwcm9ncmVzcykKICBQYXRjaCBieSBUaG9tYXMgU2FpbGVyLCAyMCBKYW4gMjAwNQoKKiBVcGRhdGUgb21hcDU5MTJvc2sgYm9hcmQKICBVc2UgZHJpdmVycy9jZmlfZmxhc2guYyBpbnN0ZWFkIG9mIHByaXZhdGUgZmxhc2ggZHJpdmVyOwogIFJlbW92ZSBoYXJkY29kZWQgcGVyc29uYWxpemVkIHNldHRpbmdzIGZyb20gb21hcDU5MTJvc2suaDsKICBGaXggc3BhY2luZyB3aXRoIChSTykgbWFya3MgaW4gJ2ZsaW5mbycgb3V0cHV0LgogIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDE0IEphbiAyMDA1CgoqIEZpeCB3YXJuaW5ncyBmb3IgUENJIGNvZGUgb24gaXhwCiAgUGF0Y2ggYnkgSm9lIDxsZ3h1ZUB5YWhvby5jb20+LCAxMyBKYW4gMjAwNQoKKiB2aXJ0ZXgyIGZpeCBmb3IgYm9ndXMgZG93bmxvYWQgZXJyb3IgbWVzc2FnZXMKICBUaGUgdmlydGV4MiBGUEdBIGRvd25sb2FkIGNvZGUgd2F0Y2hlcyBmb3IgaW5pdCBnb2luZyBhY3RpdmUgZHVyaW5nCiAgYSBkb3dubG9hZCBvZiBjb25maWcgZGF0YSBhcyBhbiBlcnJvciBjb25kaXRpb24uIGluaXQgYWxzbyBnb2VzCiAgYWN0aXZlIGFmdGVyIGEgY29uZmlndXJhdGlvbiBpcyBmaW5pc2hlZCBpbiBjb25jZXJ0IHdpdGggdGhlIGRvbmUKICBzaWduYWwuIFNvIGZhciwgdGhlIGNvZGUgZG9lcyBub3QgY2hlY2sgZm9yIGRvbmUgYWN0aXZlIHVudGlsIGFsbAogIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgc2VudC4gSWYgY29uZmlndXJhdGlvbiBkYXRhIGhhcyBhIGZldwogIGV4dHJhIHBhZCBieXRlcyBhdCB0aGUgZW5kLCB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yIG1lc3NhZ2UgZXZlbgogIHRob3VnaCB0aGUgZG93bmxvYWQgaGFkIHN1Y2VlZGVkLgogIE5PVEU6IHZpcnRleDIgc2xhdmUgc2VyaWFsIGFuZCBzcGFydGFuMiB2ZXJzaW9ucyBtYXkgc3RpbGwgaGF2ZSB0aGUKICBzYW1lIHByb2JsZW0uCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDEyIEphbiAyMDA1CgoqIE9wdGltaXplIGZsYXNoX21ha2VfY21kIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgZm9yIGxpdHRsZSBlbmRpYW4KICBGaXggIldBUk5JTkc6IGZsYXNoX21ha2VfY21kOiB1bnN1cHBwb3J0ZWQgTGl0dGxlRW5kaWFuIG1vZGUiCiAgbWVzc2FnZSB3aGVuIHByb2JpbmcgZm9yIG5vbmV4aXN0ZW50IGZsYXNoIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4KICBBcyBhIHNpZGUgZWZmZWN0IG1vcmUgZWZmaWNpZW50IGFuZCBzbWFsbGVyIGNvZGUgaXMgZ2VuZXJhdGVkLAogIHdoaWNoIGlzIGFsd2F5cyBhIEdvb2QgVGhpbmcgKFRNKS4KICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjQgU2VwIDIwMDUKCiogVXBkYXRlIGZvciBURlRQIHVzaW5nIGEgZml4ZWQgVURQIHBvcnQKICBVc2UgdGhlIGFwcHJvdmVkIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLiBBZGRlZCAidGZ0cGRzdHAiIHRvCiAgYWxsb3cgcG9ydHMgb3RoZXIgdGhhbiA2OSBwZXIgVG9sdW5heSBPcmt1bidzIHJlY29tbWVuZGF0aW9uLgogIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMTIgSmFuIDIwMDUKCiogQWxsb3cgdG8gZm9yY2UgVEZUUCB0byB1c2UgYSBmaXhlZCBVRFAgcG9ydAogIChBZGQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBDT05GSUdfVEZUUF9QT1JUIGFuZCBvcHRpb25hbCBlbnYKICB2YXJpYWJsZSB0ZnRwcG9ydCkKICBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDEwIEphbiAyMDA1CgoqIEZpeCBldGhlcm5ldCB0aW1lb3V0cyBvbiBkYmF1MTU1MCBhbmQgb3RoZXIgYXUxeDAwIHN5c3RlbXMKICBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyOSBEZWMgMjAwNAoKKiBDbGVhbnVwOiBmaXggYnJva2VuIGJ1aWxkcwoKKiBGaXggUEhZIGFkZHJlc3MgYXJndW1lbnQgcGFzc2luZyB3aXRoIG1paSBpbmZvIGNvbW1hbmQKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMjggRGVjIDIwMDQKCiogQ2xlYW51cCAoUFBDNHh4IGlzIEFNQ0Mgbm93KQoKKiBlc2QgQ1BDSTJEUCBib2FyZCBhZGRlZAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMiBTZXAgMjAwNQoKKiBlc2QgUE1DNDA1IGJvYXJkIHVwZGF0ZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjIgU2VwIDIwMDUKCiogQWRkIFNNNTAxIHN1cHBvcnQgdG8gSEg0MDUgYm9hcmQuCiAgQWRkIHN1cHBvcnQgZm9yIGd6aXAgY29tcHJlc3NlZCBibXAncyAoQ09ORklHX1ZJREVPX0JNUF9HWklQKS4KICBBZGQgc3VwcG9ydCBmb3IgZWVwcm9tIHdyaXRlLWVuYWJsZSAoQ0ZHX0VFUFJPTV9XUkVOKS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIyIFNlcCAyMDA1CgoqIEZpeCBhdXRvbmVnb3RpYXRpb24gaW4gdHNlYyBldGhlcm5ldCBkcml2ZXIKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIxIFNlcCAyMDA1CgoqIEZpeCBidWcgaW4gYXV0b191cGRhdGUgKHRyYWIgYm9hcmQpCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTYgU2VwIDIwMDUKCiogRml4IGNvbXB1dGF0aW9uIG9mIGZyYW1lYnVmZmVyIHBhbGV0dGUgZm9yIDhicHAgTENEIGJpdG1hcHMKICBQYXRjaCBieSBGcmFuY2VzY28gTWFuZHJhY2NpLCAxNiBTZXAgMjAwNQoKKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgSU5LQTR4MCBib2FyZAoKKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUE04NTQgYm9hcmQKICBCYXNlZCBvbiBwYXRjaCBieSBSLiBMb2VmZmwsIDIwIEp1bCAyMDA1CgoqIEFkZCBQQ0kgc3VwcG9ydCB0byBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgU2VwIDIwMDUKCiogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAogIGJvYXJkcyAoYmF1ZHJhdGUsIGVudmlyb25tZW50Li4uKS4gRmxhc2ggZHJpdmVyIGZpeGVkLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgU2VwIDIwMDUKCiogRml4IHByb2JsZW0gaW4gNDQwR1AgZXRoZXJuZXQgZHJpdmVyIChlYm9ueSkuIEFkZCBzdXBwb3J0IGZvciAybmQKICBldGhlcm5ldCBwb3J0IG9uIGVib255LgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNyBTZXAgMjAwNQoKKiBBZGRlZCBzdXBwb3J0IGZvciBtdGRkZXZudW0gYW5kIG10ZGRldm5hbWUgdmFyaWFibGVzIChtdGRwYXJ0cyBjb21tYW5kKQoKKiBDaGFuZ2UgZGVmYXVsdCBjb25zb2xlIGJhdWQgcmF0ZSBmb3Igc3R4eHRjIGJvYXJkCgoqIEFkZCBJMkMgc3VwcG9ydCB0byBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcyAoRUVQUk9NLCBSVEMsIExNNzUtRFRUKS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMxIEF1ZyAyMDA1CgoqIEZpeCBkZWZhdWx0IGNvbW1hbmQgc2V0IChkb24ndCBpbmNsdWRlIENGR19DTURfRElTUExBWSBjb21tYW5kKQogIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwMiBTZXAgMjAwNQoKKiBDbGVhbnVwCgoqIEVuYWJsZSBTTTcxMiBkcml2ZXIgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KCiogRml4IHByb2JsZW1zIHdpdGggbGQgdmVyc2lvbiAyLjE2IChkb3Qgb3V0c2lkZSBzZWN0aW9ucyBwcm9ibGVtKQogIFBvaW50ZWQgb3V0IGJ5IEdlcmhhcmQgSmFlZ2VyLCAzMSBBdWcgMjAwNTsKICBjZi4gaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMDUtMDgvbXNnMDA0MTIuaHRtbAoKKiBQcmVwYXJlIFUtQm9vdCBmb3IgZ2NjLTQueDogZml4IGdsb2JhbCBkYXRhIHBvaW50ZXIgaW5pdGlhbGl6YXRpb24KCiogQWRqdXN0IENTMyB0aW1pbmdzIG9uIEhNSTEwMDEgYm9hcmQgZm9yIGRvdCBtYXRyaXggZGlzcGxheSB1bmRlciBMaW51eAoKKiBBZGQga2V5Ym9hcmQgYW5kIGRvdCBtYXRyaXggZGlzcGxheSBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgoKKiBQcmVwYXJlIFUtQm9vdCBmb3IgZ2NjLTQueAoKKiBGaXhlZCBCYW1ib28gcG9ydCB0byBlbmFibGUgcnVubmluZyB3aXRob3V0IEREUi1ESU1NCiAgKEJhbWJvbyBoYXMgYWxzbyA2NE1CIG9uYm9hcmQgRERSKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgQXVnIDIwMDUKCiogTWVyZ2VkIDQwNWdwX2VuZXQuYyBhbmQgNDQwZ3hfZW5ldC5jIHRvIGdlbmVyaWMgNHh4X2VuZXQuYwogIG5vdyBoYW5kbGluZyBhbGwgNHh4IGNwdSdzCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBBdWcgMjAwNQoKKiBGaXggbWFrZSBkZXBlbmRlbmNpZXMgZm9yIGF0OTFybTkyMDAgYW5kIGtzODY5NSBjcHVzCiAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjMgQXVnIDIwMDUKCiogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKCiogQWRkIGVzZCBjcGNpNTIwMCBhbmQgcGY1MjAwIGJvYXJkcwogIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDIyIEF1ZyAyMDA1CgoqIEZpeCBzeXNjbG9jayBmb3IgVFFNODU0MCBhbmQgVFFNODU2MCBib2FyZHMKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNSBKdWwgMjAwNQoKKiBJbml0aWFsaXplIHNlcmlhbCMgYW5kIGV0aGFkZHIgZnJvbSBtYW51ZmFjdHVyZXIgZGF0YSBpbiBFRVBST00gb24gQ01DLVBVMgogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IEp1biAyMDA1CgoqIEFkZCBuZXcgYm9hcmQgc3BlY2lmaWMgY29tbWFuZHMgZm9yIFRRTTUyMDAvU1RLNTJYWAogIC0gU291bmQgY29tbWFuZHMgKGJlZXAsIHdhdiwgc291bmQpCiAgLSBUZXN0IGNvbW1hbmRzIChsZWQsIGNhbiwgYmFja2xpZ2h0LCByczIzMikKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwMiBNYXkgMjAwNQoKKiBDaGFuZ2UgbWFpbiBjbG9jayBvbiBDTUMtUFUyIGJvYXJkIGZyb20gMjA3IE1IeiB0byAxNzkgTUh6CiAgYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgQVQ5MVJNOTIwMCBDUFUgUExMCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjIgQXByIDIwMDUKCiogQWRkIGF1dG9tYXRpYyBIVyBkZXRlY3Rpb24gZm9yIGFub3RoZXIgQ01DX1BVMiB2YXJpYW50CiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjAgQXByIDIwMDUKCiogUmVtb3ZlIENPTkZJR19BVDkxUk05MjAwREsgaW4gQ01DLVBVMiBjb25maWd1cmF0aW9uCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTkgQXByIDIwMDUKCiogRml4IGluaXRpYWxpemF0aW9uIHByb2JsZW0gb24gVFFNNTIwMCB3aXRob3V0IFNNNTAxCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDggQXByIDIwMDUKCiogQWRkIFJUQyBzdXBwb3J0IGZvciBTVEs1MlhYLjIwMAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEFwciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBJRk0gbzJkbnQgYm9hcmQKCiogRW5hYmxlIFBDSSBvbiBobWkxMDAxIGJvYXJkCgoqIEZpeCByZXR1cm4gdmFsdWVzIG9mIHRoZSBqZmZzMiBjb21tYW5kcyBscy9mc2xvYWQvZnNpbmZvLAogIHNvIHdlIGNhbiB1c2UgdGhlbSB0bywgZS5nLiwgY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBhIGZpbGUgd2l0aAogICJpZiBscyBmb287IHRoZW4gdGhpczsgZWxzZSB0aGF0OyBmaSIgaW4gdGhlIGh1c2ggc2hlbGwKICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxNiBBdWd1c3QgMjAwNQoKKiBDb2Rpbmcgc3R5bGUgY2xlYW51cAoKKiBBZGQgc3VwcG9ydCBmb3IgU2lsaWNvbiBUdXJua2V5IGVYcHJlc3MgWFRjIChtcGM4N3gvODh4KSBib2FyZC4KICBQYXRjaCBieSBEYW4gTWFsZWsgYW5kIFBhbnRlbGlzIEFudG9uaW91LCAxNSBBdWcgMjAwNQoKKiBDaGVjayByZXR1cm4gdmFsdWUgb2YgbWFsbG9jIGluIDQ0MGd4X2VuZXQuYwogIFBhdGNoIGJ5IFRyYXZpcyBCLiBTYXd5ZXIsIDE4IEp1bCAyMDA1CgoqIEFkZCBTYW5kYnVyc3QgTWV0cm9ib3ggYW5kIFNhbmRidXJzdCBLYXJlZiBib2FyZCBzdXBwb3J0IHBhY2thZ2VzLgogIFNlY29uZCBzZXJpYWwgcG9ydCBvbiA0NDBHWCBub3cgZGVmaW5lZCBhcyBhIHN5c3RlbSBkZXZpY2UuCiAgQWRkICdTaG9ydCBFdGNoJyBjb2RlIGZvciBDaWNhZGEgUEhZIHdpdGhpbiA0NDBneF9lbmV0LmMKICBQYXRjaCBieSBUcmF2aXMgQi4gU2F3eWVyLCAxMiBKdWwgMjAwNQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjM6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWlub3IgY29kZSBjbGVhbnVwCgoqIEFkZCBmb3Jnb3R0ZW4gbmV3IGZpbHMgZnJvbSBsYXRlc3QgVm9pY2VCbHVlIHVwZGF0ZQoKKiBNYWtlIGJvb3RyZXRyeSBmZWF0dXJlIHdvcmsgd2l0aCBodXNoIHNoZWxsLgogIENhdmVhdDogdGhpcyBjdXJyZW50bHkgKnJlcXVpcmVzKiBDT05GSUdfUkVTRVRfVE9fUkVUUlkgdG8gYmUgc2V0LCB0b28uCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTkgSnVsIDIwMDUKCiogVXBkYXRlIEh5bW9kIEJvYXJkIERhdGFiYXNlIFBIUCBjb2RlIGluICJ0b29scyIgZGlyZWN0b3J5CiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDEgSnVsIDIwMDUKCiogTWFrZSAidHIiIGNvbW1hbmQgdXNlIFBPU0lYIGNvbXBsaWFudDsgZXhwb3J0IEhPU1RPUyBtYWtlIHZhcmlhYmxlCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKCiogRml4IE11cnJheSBKZW5zZW4ncyBtYWlsIGFkZHJlc3MuCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKCiogUHJlc2VydmUgUEhZX0JNQ1IgZHVyaW5nIGEgc29mdCByZXNldC4KICBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAyNCBKdW4gMjAwNQoKKiBWb2ljZUJsdWUgdXBkYXRlOiBlZXByb20gdG9vbCBjYW4gYWxzbyBzdG9yZSBmaXJtd2FyZSB2ZXJzaW9uIG5vdy4KICBlZXByb20uYmluIGlzIHJ1bmFibGUgYnkganVtcGluZyBhdCBsb2FkIGFkZHJlc3MuCiAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDIzIE1heSAyMDA1CgoqIE1vdmUgdGhlIEFUOTFSTTkyMDBESyB0byB0aGUgQVJNIFN5c3RlbXMgbGlzdC4KICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyNiBBcHIgMjAwNQoKKiBFbGltaW5hdGUgY2FsbHMgb2YgQVJNIGxpYmdjYy5hIGhlbHBlciBmdW5jdGlvbnMgX2RpdnNpMyBhbmQgX21vZHNpMwogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI2IEFwciAyMDA1CgoqIG1lYXN1cmVfZ2NsaygpIGlzIG5lZWRlZCB3aGVuIERFQlVHIGlzIGVuYWJsZWQKICBQYXRjaCBieSBCcnlhbiBPJ0Rvbm9naHVlLCAyNSBBcHIgMjAwNQoKKiBBZGQgVVBELUNoZWNrc3VtIGNvZGUsIGZpeCBwcm9ibGVtIGluIG5ldC5jIChyZXR1cm4gaW5zdGVhZCBvZiBicmVhaykKICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAxMiBBdWcgMjAwNQoKKiBlc2QgUENJNDA1IGJvYXJkIHVwZGF0ZWQKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjggSnVsIDIwMDUKCiogZXNkIFdVSDQwNSBhbmQgRFU0MDUgYm9hcmQgdXBkYXRlZAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyNyBKdWwgMjAwNQoKKiBGaXggcHJvYmxlbSBpbiBjbWRfbmFuZC5jIChvbmx5IHdoZW4gZGVmaW5lZCBDRkdfTkFORF9TS0lQX0JBRF9ET1RfSSkKICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgNCBNYXkgMjAwNQoKKiBVcGRhdGUgQU1DQyBZb3NlbWl0ZSB0byBnZXQgYSBjb25zaXN0ZW50IHNldHVwIGZvciBhbGwgQU1DQyBldmFsCiAgYm9hcmRzIChiYXVkcmF0ZSwgZW52aXJvbm1lbnQuLi4pLiBGbGFzaCBkcml2ZXIgZml4ZWQuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQoKKiBDaGFuZ2VkIEFNQ0MgQnViaW5nYSAoNDA1RVApIGNvbmZpZ3VyYXRpb24gdG8gc3VwcG9ydCAybmQgZXRoIHBvcnQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CgoqIEFkZCBOQU5EIEZMQVNIIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vIDQ0MEVQIGV2YWwgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CgoqIEFkZCBjb25maWd1cmF0aW9uIGZvciBJRk0gQUVWIEZJRk8gYm9hcmQuCiAgTWlub3IgY29kaW5nIHN0eWxlIGNsZWFudXAuCgoqIEFkZCBjb25maWd1cmF0aW9uIGZvciBJRk0gU1BJIGV2YWwgYm9hcmQKCiogRml4IENvbXBhY3RGbGFzaCBwcm9ibGVtIG9uIEhNSTEwMDEgYm9hcmQKCiogTWFrZSBuZXcgIm10ZHBhcnRzIiBjb2RlIGJ1aWxkIHdpdGggb2xkZXIgY29tcGlsZXJzCiAgUGF0Y2ggYnkgQW5kcmVhIFNjaWFuLCAwOSBBdWcgMjAwNQoKKiBDaGFuZ2VkIENPTkZJR180NDBfR1gsIENPTkZJR180NDBfRVAgYW5kIENPTkZJR180NDBfR1Igb3B0aW9ucyB0bwogIENPTkZJR180NEdYLCBDT05GSUdfNDQwRVAgYW5kIENPTkZJR180NDBHUiBmb3IgYSBjb25zaXN0ZW50IGRlc2lnbgogIHdpdGggdGhlIDQwNSBkZWZpbmVzIGFuZCB0aGUgbGludXgga2VybmVsIGRlZmluZXMuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwOCBBdWcgMjAwNQoKKiBGaXggY29tcGlsZXIgd2FybmluZ3Mgd2l0aCBvbGRlciBHQ0MgdmVyc2lvbnMKCiogQWRkIGNvbW1vbiAod2l0aCBMaW51eCkgTVREIHBhcnRpdGlvbiBzY2hlbWUgYW5kICJtdGRwYXJ0cyIgY29tbWFuZAoKICBPbGQsIG9ic29sZXRlIGFuZCBkdXBsaWNhdGVkIGNvZGUgd2FzIGNsZWFuZWQgdXAgYW5kIHJlcGxhY2UgYnkgdGhlCiAgbmV3IHBhcnRpdGlvbmluZyBtZXRob2QuIFRoZXJlIGFyZSB0d28gcG9zc2libGUgYXBwcm9hY2hlcyBub3c6CgogIFRoZSBmaXJzdCBvbmUgaXMgdG8gZGVmaW5lIGEgc2luZ2xlLCBzdGF0aWMgcGFydGl0aW9uOgoKICAjdW5kZWYgQ09ORklHX0pGRlMyX0NNRExJTkUKICAjZGVmaW5lIENPTkZJR19KRkZTMl9ERVYJCSAibm9yMCIKICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJIDB4RkZGRkZGRkYJLyogdXNlIHdob2xlIGRldmljZSAqLwogICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRQkgMHgwMDEwMDAwMAkvKiB1c2UgMU1CICovCiAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQJIDB4MDAwMDAwMDAKCiAgVGhlIHNlY29uZCBtZXRob2QgdXNlcyB0aGUgbXRkcGFydHMgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgZHluYW1pYwogIHBhcnRpdGlvbmluZzoKCiAgLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KICAjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCiAgI2RlZmluZSBNVERJRFNfREVGQVVMVAkgIm5vcjE9enVtYS0xLG5vcjI9enVtYS0yIgogICNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkgIm10ZHBhcnRzPXp1bWEtMTotKGpmZnMyKSx6dW1hLTI6LSh1c2VyKSIKCiAgQ29tbWFuZCBsaW5lIG9mIGNvdXJzZSBwcm9kdWNlcyBiaWdnZXIgaW1hZ2VzLCBhbmQgbWF5IGJlIGluYXBwcm9wcmlhdGUKICBmb3Igc29tZSB0YXJnZXRzLCBzbyBieSBkZWZhdWx0IGl0J3Mgb2ZmLgoKKiBGaXggYnVpbGQgcHJvYmxlbXMgZm9yIFBNODU2IEJvYXJkCgoqIEZpeCBzaWduIGV4dGVuc2lvbiBidWcgaW4gJ2ZwZ2EgbG9hZGInIGNvbW1hbmQ7CiAgbWFrZSAnZnBnYSBsb2FkYicgYWx3YXlzIHByaW50IHRoZSBmaWxlIGhlYWRlciBpbmZvCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDExIEphbiAyMDA1CgoqIEZpeCBlcnJvcnMgdGhhdCBvY2N1ciB3aGVuIGFjY2Vzc2luZyBTeXN0ZW1BQ0UgQ0YKICBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDkgSmFuIDIwMDUKCiogRG9jdW1lbnQgc3dpdGNoaW5nIGJldHdlZW4gVS1Cb290IGFuZCBQbGFuZXRDb3JlIG9uIFJQWGxpdGUKICBieSBTYW0gU29uZywgMjQgRGVjIDIwMDQKCiogRml4IFBvd2VyUVVJQ0MgSUkgbWFzayBkZXRlY3Rpb24uCiAgUGF0Y2ggYnkgRXVnZW5lIFN1cm92ZWdpbiwgMjAgRGVjIDIwMDQKCiogQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOSU9TIERLMUMyMCBib2FyZAogIFBhdGNoIGJ5IFNobG9tbyBLdXQsIDEzIERlYyAyMDA0CgoqIEFkZCBzdXBwb3J0IGZvciBlcDgyNDggYm9hcmQKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMiBEZWMgMjAwNAoKICBNaW5vciBjb2RlIGNsZWFudXAuCgoqIEZpeCBiYXVkcmF0ZSBzZXR0aW5nIGZvciBLR0RCIG9uIE1QQzgyNjAKICBQYXRjaCBieSBIb0ppbiwgMTEgRGVjIDIwMDQKCiogRml4ICdtaWkgaGVscCcgdGV4dCBmb3JtYXR0aW5nCiAgUGF0Y2ggYnkgQ29yeSBUdXNhciwgMTAgRGVjIDIwMDQKCiogRml4IHJldHVybiBjb2RlIG9mIE5GUyBjb21tYW5kCiAgUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDExIERlYyAyMDA0CgoqIEZpeCB0eXBvCgoqIEZpeCBjb21waWxlciB3YXJuaW5ncyBpbiBjcHUvcHBjNHh4L3VzYmRldi5jCiAgUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMDQgQXVnIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vIFBQQzQ0MEVQIGV2YWwgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA0IEF1ZyAyMDA1CgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlcgogIEZpeCBzdHlsZSBpc3N1ZXMgcHJpbWFyaWx5IGluIDg1eHggYW5kIDgzeHggYm9hcmRzLgogICAgLSBDKysgY29tbWVudHMKICAgIC0gVHJhaWxpbmcgd2hpdGUgc3BhY2UKICAgIC0gSW5kZW50YXRpb24gbm90IGJ5IFRBQgogICAgLSBFeGNlc3NpdmUgYW1vdW50IG9mIGVtcHR5IGxpbmVzCiAgICAtIFRyYWlsaW5nIGVtcHR5IGxpbmVzCgoqIFBhdGNoIGJ5IFJvbiBBbGRlciwgMTEgSnVsIDIwMDUKICAgIEFkZCBYaWFuZ2h1YSBYaWFvIGFuZCBMdW5zaGVuZyBXYW5nJ3Mgc3VwcG9ydCBmb3IgdGhlCiAgICBHREEgTVBDODU0MCBFVkFMIGJvYXJkLgoKKiBQYXRjaCBieSBFcmFuIExpYmVydHkKICBBZGQgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4MzQ5QURTIGJvYXJkLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDI1IEp1bCAyMDA1CiAgTW92ZSB0aGUgVFNFQyBkcml2ZXIgb3V0IG9mIGNwdS9tcGM4NXh4IGFzIGl0IHdpbGwgYmUgc2hhcmVkCiAgYnkgdGhlIHVwY29taW5nIG1wYzgzeHggZmFtaWx5IGFzIHdlbGwuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDUgTWF5IDIwMDUKICBJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBNUEM4NTQ4Q0RTIGJvYXJkLgogIEFkZGVkIEREUiBJSSBzdXBwb3J0IGJhc2VkIG9uIFNQRCB2YWx1ZXMgZm9yIE1QQzg1eHggYm9hcmRzLgogIFRoaXMgcm9sbC11cCBwYXRjaCBhbHNvIGluY2x1ZGVzIGJ1Z2ZpZXMgZm9yIHRoZSBwcmV2aW91c2x5CiAgcHVibGlzaGVkIHBhdGNoZXM6CiAgICBERFJJSSBDUE8sIHByZSBlVFNFQywgODU0OCBMQklVLCBBbmR5J3MgVFNFQywgZVRTRUMgMyY0IEkvTwoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDEwIEZlYiAyMDA1CiAgQWRkIGNvbmZpZyBvcHRpb24gQ09ORklHX0hBU19GRUMgY2FsbGluZyBvdXQgODU0MCBGRUMgZmVhdHVyZXMuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSwgMDggRmViIDIwMDUKICBGb3IgTVBDODV4eENEUzoKICAgIEFkZHMgUmVsYXhlZCBUaW1pbmcgVFJMWCBiaXQgdG8gRkxBU0ggT1J4IHJlZ3MgdG8gYWxsb3cKICAgIGZvciBmYXN0ZXIgZmxhc2ggcGFydHMuCiAgICBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgQlIvT1IgZm9yIEZMQVNILgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIgMDggRmViIDIwMDUKICBEZXRlcm1pbmUgTDIgQ2FjaGUgc2l6ZSBkeW5hbWljYWxseSBvbiA4NVhYIGJvYXJkcy4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCBLdW1hciBHYWxhIDA4IEZlYiAyMDA1CiAgLSBDb252ZXJ0IHRoZSBDUE0yIGJhc2VkIGZ1bmN0aW9uYWxpdHkgdG8gdXNlIG5ldyBDT05GSUdfQ1BNMgogICAgb3B0aW9uIHJhdGhlciB0aGFuIGEgbXlyaWFkIG9mIENPTkZJR19NUEM4NTYwLWxpa2UgdmFyaWFudHMuCiAgICBBcHBsaWVzIHRvIE1QQzg1eHggYW5kIE1QQzgyNjAgYm9hcmRzLCBpbmNsdWRlcyBzdHhncDMgYW5kIHNiYzg1NjAuCiAgICBFbGltaW5hdGVzIHRoZSBDT05GSUdfTVBDODU2MCBvcHRpb24gZW50aXJlbHkuICBEaXN0cmlidXRlcyB0aGUKICAgIG5ldyBDT05GSUdfQ1BNMiBvcHRpb24gdG8gZWFjaCA4MjYwIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04NTYgYm9hcmQKICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDAzIEF1ZyAyMDA1CgoqIE1pbm9yIGZpeGVzIHRvIFBNODU0IGJvYXJkCiAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwMyBBdWcgMjAwNQoKKiBBZGp1c3QgY29uZmlndXJhdGlvbiBvZiBYRU5JQVggYm9hcmQKICAoY2hpcCBzZWxlY3QgYW5kIEdQSU8gcmVxdWlyZWQgZm9yIFVTQiBvcGVyYXRpb24pCgoqIEZpeCB0eXBvcyBpbiBjcHUvODV4eC9zdGFydC5TIHdoaWNoIGNhdXNlZCBEYXRhVExCIGV4Y2VwdGlvbiB0byBiZQogIHJvdXRlZCB0byB0aGUgV2F0Y2hkb2cgaGFuZGxlcgogIFBhdGNoIGJ5IEV1Z2VuZSBTdXJvdmVnaW4sIDE4IEp1biAyMDA1CgoqIChyZSllbmFibGVkIHNjc2kgY29tbWFuZHMgZG9fc2NzaSgpIGFuZCBkb19zY3NpYm9vdCgpCiAgUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA2IERlYyAyMDA0CgoqIEZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBURlRQIC8gTkZTIGRlZmF1bHQgZmlsZW5hbWVzCiAgUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDA2IERlYyAyMDA0CgoqIElnbm9yZSBicm9hZGNhc3Qgc3RhdHVzIGJpdCBpbiByZWNlaXZlZCBmcmFtZXMgaW4gODI2MCBGQ0MgZXRoZXJuZXQKICBsb29wYmFjayB0ZXN0IGNvZGUKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOCBKdWwgMjAwNQoKKiBGaXggdHlwbyBpbiBta2NvbmZpZyBzY3JpcHQgKHVzZWQgPT0gaW5zdGVhZCBvZiA9KQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE4IEp1bCAyMDA1CgoqIENsZWFudXAgYnVpbGQgcHJvYmxlbXMgb24gNjQgYml0IGJ1aWxkIGhvc3RzCgoqIFVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgQXVnIDIwMDU6CiAgLSBNYWpvciBjbGVhbnVwIGZvciBBTUNDIGV2YWwgYm9hcmRzIFdhbG51dCwgQnViaW5nYSwgRWJvbnksIE9jb3RlYQogICAgKGZvcm1lciBJQk0gZXZhbCBib2FyZCkuIFBsZWFzZSBzZWUgImRvYy9SRUFETUUuQU1DQy1ldmFsLWJvYXJkcy1jbGVhbnVwIgogICAgZm9yIGRldGFpbHMuCiAgLSBTeWNhbW9yZSAoUFBDNDA1R1ByKSBldmFsIGJvYXJkIGFkZGVkIChXYWxudXQgcG9ydCBpcyBleHRlbmRlZAogICAgdG8gcnVuIG9uIGJvdGggNDA1R1AgYW5kIDQwNUdQciBldmFsIGJvYXJkcykuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDI3IEp1bCAyMDA1OgogIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgUFBDNDQwRVAvR1IuCiAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBZb3NlbWl0ZSBQUEM0NDBFUCBldmFsIGJvYXJkLgogIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgWWVsbG93c3RvbmUgUFBDNDQwR1IgZXZhbCBib2FyZC4KCiogTWlub3IgZml4ZXMgZm9yIFBQQ2hhbWVsZW9uIEJvYXJkOgogIC0gZml4IGFsaWdubWVudCBvZiBOQU5EIHNpemUKICAtIG1ha2UgY29kZSBkbyB3aGF0IHRoZSBjb21tZW50IHNheXMKCiogSW1wbGVtZW50IGgvdyBzZWN0b3IgcHJvdGVjdGlvbiBzdGF0dXMgc3luY2hyb25pemF0aW9uIGF0IGJvb3QuCiAgVGhlIGNvZGUgaXMgcHJvdmlkZWQgZm9yLCBhbmQgd2FzIHRlc3RlZCBvbiwgdGhlIFl1a29uL0FsYXNrYQogIGFuZCBQTTUyMCBib2FyZHMgb25seS4KCiAgQSBidWcgaW4gZmxhc2hfcmVhbF9wcm90ZWN0KCkgZm9yIHRoZSBZdWtvbiBib2FyZCB3YXMgZml4ZWQgYnkKICBhZGRpbmcgYSBmdW5jdGlvbiB0aGF0IHRlbGxzIGlmIHR3byBiYW5rcyBhcmUgb24gb25lIGZsYXNoIGNoaXAuCgoqIEZpeCBzeXNtb24gUE9TVCBwcm9ibGVtOiBjaGVjayBJMkMgZXJyb3IgY29kZXMKICBUaGlzIGZpeGVzIGEgcHJvYmxlbSBvZiBkaXNwbGF5aW5nIGJvZ3VzIHZvbHRhZ2VzIHdoZW4gdGhlIHZvbHRhZ2VzCiAgYXJlIHNvIGxvdyB0aGF0IHRoZSBJMkMgZGV2aWNlcyBzdGFydCBmYWlsaW5nIHdoaWxlIHRoZSByZXN0IG9mIHRoZQogIHN5c3RlbSBrZWVwcyBydW5uaW5nLgoKKiBQYXRjaCBieSBDZWRyaWMgVmluY2VudCwgNiBKdWwgMjAwNToKICBGaXggQ0ZHX0NNRF9TRVRHRVREQ1IgaGFuZGxpbmcgaW4gImNvbW1vbi9jbWRfZGNyLmMiCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMjAgSnVsIDIwMDU6CiAgQWRkIG1pc3NpbmcgUENJIElPIHBvcnQgZGVmaW5pdGlvbnMuCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KCiogQWRqdXN0IHByaW50ZWQgYm9hcmQgSUQgZm9yIExXTU9OIGJvYXJkLgoKKiBGaXggbG93LWxldmVsIE9IQ0kgdHJhbnNmZXJzIGZvciBBUk05MjB0IGFuZCBNUEM1eHh4CgoqIEFkZCBuZXcgYXJndW1lbnQgZm9ybWF0IGZvciBmbGFzaCBjb21tYW5kcyB0byBhbGxvdyBmb3IgdXNhZ2UgbGlrZQogICJlcmFzZSAkKGFkZHIpICskKGZpbGVzaXplKSIsIGkuIGUuIGEgc2l6ZSBhcmd1bWVudCBjYW4gYmUgdXNlZCBhbmQKICBVLUJvb3Qgd2lsbCBhdXRvbWF0aWNpYWxseSBmaW5kIHRoZSBlbmQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VjdG9yLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDUgSnVsIDIwMDU6CiAgVXBkYXRlIHVjMTAwIGJvYXJkIFBIWSBzZXR1cAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEgSnVsIDIwMDU6CiAgRml4IFBIWSBhZGRyZXNzIGZvciBDQVRjZW50ZXIgYm9hcmQgKG5vdyBjb3JyZWN0ISkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBKdW4gMjAwNToKICBGaXggUEhZIGFkZHJlc3NlcyBmb3IgUFBDaGFtZWxlb24gYW5kIENBVGNlbnRlciBib2FyZHMKICBDaGFuZ2UgTUFJTlRBSU5FUiBmb3IgbW9zdCBlc2QgYm9hcmRzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDMwIEp1biAyMDA1OgogIEZpeCBMQ0QgbG9nbyBmb3IgbHdtb24gYm9hcmQgd2hpY2ggZ290IGxvc3QgaW4gdGhlIG1lcmdlIG9mIDh4eCBhbmQgUFhBIExDRCBjb2RlCgoqIEZpeCBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBwcm9ibGVtIG9uIE1QQzUyMDAgc3lzdGVtcwoKKiBBZGQgRUVQUk9NIGFuZCBSVEMgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyMCBKdW4gMjAwNToKICBGaXggaW5pdGlhbGl6YXRpb24gb2YgbG93IGFjdGl2ZSBHUElPIHBpbnMgb24gaW5rYTR4MCBib2FyZAoKKiBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50LCBkaXNhYmxlIEhXIGZsYXNoIHByb3RlY3Rpb24gb2YKICBITUkxMDAxIGJvYXJkCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDEwIEp1biAyMDA1OgogIEluaXRpYWxpemUgYWxsb2NhdGVkIGRldiBhbmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVzCiAgYWZ0ZXIgdGhlaXIgcmVzcGVjdGl2ZSBhbGxvY2F0aW9uIGluIDQ0MGd4X2VuZXQuYwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBKdW4gMjAwNToKICBGaXggYnl0ZW9yZGVyIHByb2JsZW1zIHdpdGggc2Vjb25kIGFyZ3VtZW50IG9mICJib290bSIgd2l0aAogIHN0YW5kYWxvbmUgaW1hZ2VzOwoKKiBBZGQgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZAoKKiBEaXNhYmxlICJkYXRlIiBhbmQgInNudHAiIGNvbW1hbmRzIG9uIFRRTTg2Nk0KCiogRml4IHdhdGNoZG9nIHJlc2V0IHByb2JsZW1zIG9uIExXTU9OIGJvYXJkCgoqIFBhdGNoIGJ5IEp1ZXJnZW4gU2VsZW50LCAxNyBNYXkgMjAwNToKICBBZGQgc3VwcG9ydCBmb3IgRnVua3dlcmsgVm9WUE4gZ2F0ZXdheSBtb2R1bGUuCgoqIENsZWFudXAgZGVidWcgY29kZSBmb3IgTVBDODIyMCBGRUMgZHJpdmVyCgoqIEV4dGVuZCBidXJzdCBtb2RlIFJBTSB0ZXN0IHByb2dyYW0gdG8gdGFrZSBhIGxvb3AgY291bnQKICAoMCA9IGluZmluaXRlKQoKKiBVc2UgQ09ORklHX0RSSVZFUl9LUzg2OTVFVEggdG8gZW5hYmxlIEtTODY5NSBldGhlcm5ldCBkcml2ZXIgb24KICB0aG9zZSBib2FyZHMgdGhhdCB1c2UgaXQuCgoqIFBhdGNoZXMgYnkgR3JlZyBVbmdlcmVyLCAxOSBNYXkgMjAwNToKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgS1M4Njk1UCAoQVJNIDkyMiBiYXNlZCkgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIE9wZW5HZWFyIENNNDAwOCwgQ000MTE2IGFuZCBDTTQxNDggYm9hcmRzCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE5IE1heSAyMDA1OgogIEFkZCBzdXBwb3J0IGZvciBDT05GSUdfU0VSSUFMX1RBRyBvbiBBUk0gYm9hcmRzCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgU29yY2VyeSBib2FyZC4KICBDb2RlIGNsZWFudXAgKGVzcGVjaWFsbHkgU29yY2VyeSAvIEFsYXNrYSAvIFl1a29uIHNlcmlhbCBkcml2ZXIpLgoKKiBGaXggY29tcGlsZSBwcm9ibGVtcyBjYXVzZWQgYnkgbmV3IGJ1cnN0IG1vZGUgU0RSQU0gdGVzdDsKICBtYWtlIHBvcnQgcGlucyB0byB0cmlnZ2VyIGxvZ2ljIGFuYWx5emVyIGNvbmZpZ3VyYWJsZQoKKiBGaXggdGltZXIgaGFuZGxpbmcgb24gTVBDODV4eCBzeXN0ZW1zCgoqIEZpeCBkZWJ1ZyBjb2RlIGluIG9tYXA1OTEyb3NrIGZsYXNoIGRyaXZlcgoKKiBBZGQgc3VwcG9ydCBmb3IgTVBDODI0NyBiYXNlZCAiSURTODI0NyIgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciAyIHggVFNFQyBpbnRlcmZhY2VzIG9uIHRoZSBUUU04NTQwIGJvYXJkLgoKKiBPbiBMV01PTiB3ZSBtdXN0IHVzZSB0aGUgd2F0Y2hkb2cgdG8gcmVzZXQgdGhlIGJvYXJkIGFzIHRoZSBDUFUKICBnZW5lcmVhdGVkIEhSRVNFVCBwdWxzZSBpcyB0b28gc2hvcnQgdG8gcmVzZXQgdGhlIGV4dGVybmFsCiAgY2lyY3VpdHJ5LgoKKiBBZGQgdGVzdCB0b29sIHRvIGV4ZXJjaXNlIFNEUkFNIGFjY2Vzc2VzIGluIGJ1cnN0IG1vZGUKICAoYXMgc3RhbmRhbG9uZSBwcm9ncmFtLCBNUEM4eHgvUG93ZXJQQyBvbmx5KQoKKiBJbmNyZWFzZSBDRkdfTU9OSVRPUl9MRU4gZm9yIFJhdHRsZXIgYm9hcmQgdG8gbWF0Y2ggYWN0dWFsIGNvZGUKICBzaXplLgoKKiBNYWpvciB1cGF0ZSBvZiBKRkZTMiBjb2RlOyBub3cgaW4gc3luYyB3aXRoIHNuYXBzaG90IG9mIE1URCBDVlMgb2YKICBNYXJjaCAxMywgMjAwNSk7IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBDT05GSUdfSkZGUzJfTFpPX0xaQVJJCiAgYWRkZWQgdG8gc3VwcG9ydCBMWk8gYW5kIExaQVJJIGNvbXByZXNzaW9uIG1vZGVzICh1bmRlZmluZWQgYnkKICBkZWZhdWx0KS4KCiogRml4IHByb2JsZW0gd2l0aCBzeW1ib2xpYyBsaW5rcyBpbiBKRkZTMiBjb2RlLgoKKiBVc2UgbGlua2VyIEFTU0VSVCBzdGF0ZW1lbnQgdG8gcHJldmVudCB1bmRldGVjdGVkIG92ZXJsYXBwaW5nIG9mCiAgc2VjdGlvbnMgb24gUFBDaGFtZWxlb24gYm9hcmQ7IG90aGVyIGJvYXJkcyBtaWdodCB1c2UgdGhpcywgdG9vLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE1heSAyMDA1OgogIFVwZGF0ZSBmb3IgUDNHNAogIEZpeCBwcm9ibGVtcyBpbiBjbWRfdW5pdmVyc2UuYwoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDMgTWF5IDIwMDU6CiAgQWRkZWQgbWlzc2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiBjbWRfbmFuZC5jCiAgTW9kaWZpZWQgQ0ZHX1BDSV9QVE0xTVMgaW4gY29uZmlncy9QTFU0MDUuaCB0byBtYXAgMTI4TUIgcmFtCgoqIEZpeCBJTktBNHgwOiB1c2UgQ1MxIGFzIGdwaW9fd2t1cF82IG91dHB1dAoKKiBGaXggYnVnIGluIHRoZSBTRFJBTSBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBjYW5tYiwgSWNlQ3ViZSBhbmQKICBQTTUyMCBib2FyZHMuCiAgRml4IFBIWSBhZGRyZXNzIGZvciBjYW5tYiBib2FyZC4KCiogQ2xlYW51cCBzZXJpYWwgY29uc29sZSBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBvbiBBVDkxUk05MjAwOwogIGdldCByaWQgb2Ygb2Jzb2xldGUgQ0ZHX0FUOTFDX0JSR1JfRElWSVNPUiBkZWZpbml0aW9uCgoqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAxOCBBcHIgMjAwNToKICBNYWtlIFBDSSB0YXJnZXQgYWRkcmVzcyBzcGFjZXMgb24gUE1DNDA1IGFuZCBDUENJNDA1IGJvYXJkcwogIGNvbmZpZ3VyYWJsZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzCgoqIEF1dG8tc2l6ZSBSQU0gb24gY2FubWIgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBjYW5tYiBib2FyZAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEFwciAyMDA1OgogIFVwZGF0ZSBmb3IgZXNkIGFwYzQwNQoKKiBGaXhlcyBmb3IgVFFNODU2MCBib2FyZDoKICAtIGZpeCBjbG9jayByYXRlcwogIC0gcmVtb3ZlIGRlYnVnIG1lc3NhZ2VzCiAgLSBmaXggZmxhc2ggc2VjdG9yIHByb3RlY3Rpb24KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDcgQXByIDIwMDU6CiAgQWRkIGkyY19yZWdfd3JpdGUoKSBhbmQgaTJjX3JlZ193cml0ZSgpIGZvciBhdDkxcm05MjAwIEkyQwoKKiBQYXRjaGVzIGJ5IFN0ZXZlbiBTY2hvbHosIDA3IEFwciAyMDA1OgogIEZpeCBjb21waWxlciB3YXJuaW5nIGluIGFsdGVyYS5jCiAgRml4IHdhcm5pbmcgaW4gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9pMmMuYwoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDYgQXByIDIwMDU6CiAgRml4IHZvaWNlYmx1ZSBjb25maWd1cmF0aW9uLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA2IEFwciAyMDA1OgogIFVwZGF0ZXMgZm9yIE9DT1RFQSBib2FyZDoKICAtIENoYW5nZWQgVS1Cb290IHNpemUgZnJvbSA1MTJrQnl0ZSB0byAyNTZrQnl0ZQogIC0gRml4ZWQgZmxhc2ggZHJpdmVyIHRvIHN1cHBvcnQgYm9vdCBmcm9tIHNvbGRlcmVkIHVzZXIgZmxhc2gKICAtIEFkZGVkIFJFQURNRSBmb3Igc3dpdGNoIGZyb20gUElCUyBmaXJtd2FyZSB0byBVLUJvb3QKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDUgQXByIDIwMDU6CiAgLSBDaGFuZ2UgdGltZXIgZnJlcXVlbmN5IGZvciBwcGMgNDQwIGZyb20gMTAgbXMgdG8gMSBtcy4KICAgIFByb2JsZW0gZm91bmQgYnkgQW5kcmV3IFdvem5pYWsuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA2IEFwciAyMDA1OgogIC0gY3JlYXRpbmcgU29DIHN1YmRpciBmb3IgQXRtZWwgQVQ5MVJNOTIwMCBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCiAgLSBtb3ZpbmcgY29kZSBvdXQgb2YgY3B1L2F0OTFybTkyMDAgaW50byBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFdoYWxleSwgMjkgTm92IDIwMDQ6CiAgLSB1cGRhdGUgdGhlIHB4YS1yZWdzLmggZmlsZSBmb3IgUFhBMjd4IGNoaXBzCiAgLSBhZGQgUFhBMjd4IGJhc2VkIEFEU1ZJWCBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIE1NQyBvbiBQWEEyN3ggcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBBbmRyZXcgRS4gTWlsZXNraSwgMjggTm92IDIwMDQ6CiAgRml4IFBQQzR4eCBTUEQgU0RSQU0gZGV0ZWN0aW9uIGJ1ZwoKKiBQYXRjaCBieSBIaXJvc2hpIEl0bywgMjYgTm92IDIwMDQ6CiAgRml4IGxvZ2ljIG9mICJ0ZXN0IC16IiBhbmQgInRlc3QgLW4iIGNvbW1hbmRzCgoqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNSBBcHIgMjAwNToKICBBZGQgc3VwcG9ydCBmb3IgVm9pY2VCbHVlIGJvYXJkLgoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDUgQXByIDIwMDU6CiAgRml4IG5ldGJvb3RfY29tbW9uKCkgcHJvdG90eXBlcy4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDUgQXByIDIwMDU6CiAgVXNlIGkuTVggd2F0Y2hkb2cgdGltZXIgZm9yIHJlc2V0X2NwdSgpCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA1IEFwciAyMDA1OgogIE1vdmUgcmVzZXRfY3B1KCkgb3V0IG9mIGNwdS9hcm05MjB0L3N0YXJ0LlMgaW50byB0aGUgU29DIHNwZWNpZmljCiAgc3ViZGlyZWN0b3JpZXMgY3B1L2FybTkyMHQvaW14LyBhbmQgY3B1L2FybTkyMHQvczNjMjR4MC8KICAobm93IGluIGludGVydXB0cy5jKQoKKiBBZGQgc3VwcG9ydCBmb3IgTVBDODIyMCBiYXNlZCAic29yY2VyeSIgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NTYwIGJvYXJkLgoKKiBBZGQgRkVDIHN1cHBvcnQgZm9yIFRRTTg1NDAgYm9hcmQuCiAgSW50ZXJmYWNlcyBhcmUgbmFtZWQgYXMgZm9sbG93czogIkVORVQxIiAtIFRTRUMyLCAiRU5FVDIiIC0gRkVDCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA0IEFwciAyMDA1OgogIFVwZGF0ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIENNQ19QVTIgYm9hcmQuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEFwciAyMDA1OgogIC0gcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIENPTkZJR19JTklUX0NSSVRJQ0FMIGZvciBBUk0gYmFzZWQgYm9hcmRzCiAgLSBpbnRyb2R1Y2UgdHdvIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW5zdGVhZDoKICAgIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgYW5kIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEFwciAyMDA1OgogIE1ha2Ugc3VyZSB0aGF0IE1ESU8gY2xvY2sgZG9lcyBub3QgZXhjZWVkIDIuNSBNSHogb24gQVQ5MQoKKiBGaXggdGltZXIgY29kZSBmb3IgQVJNIHN5c3RlbXM6IG1ha2Ugc3VyZSB0aGF0IHVkZWxheSgpIGRvZXMgbm90CiAgcmVzZXQgdGltZXJzIHNvIGl0J3Mgc2F2ZSB0byB1c2UgdWRlbGF5KCkgaW4gdGltZW91dCBjb2RlLgoKKiBQYXRjaCBieSBNYXRoaWFzIEv8c3RlciwgMjMgTm92IDIwMDQ6CiAgYWRkIHVkZWxheSBzdXBwb3J0IGZvciB0aGUgbWNmNTI4MiBjcHUKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTYgTm92ZW1iZXIgMjAwNDoKICBmaXggaW5jb3JyZWN0IG9uYm9hcmQgWGlsaW54IENQTEQgYmFzZSBhZGRyZXNzCgoqIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMDggTm92IDIwMDQ6CiAgLSBBZGQgbG93LWJvb3Qgb3B0aW9uIGZvciBNUEM4MjYwQURTIGJvYXJkIChpZiBsb3dib290IGlzIHNlbGVjdGVkLAogICAgdGhlIGp1bXBlciBmb3IgdGhlIEhSQ1cgc291cmNlIHNob3VsZCBzZWxlY3QgZmxhc2guIElmIGxvd2Jvb3QgaXMKICAgIG5vdCBzZWxlY3RlZCwgdGhlIGp1bXBlciBmb3IgdGhlIEhSQ1cgc291cmNlIHNob3VsZCBzZWxlY3QgdGhlCiAgICBCQ1NSLgogIC0gY2hhbmdlIGRlZmF1bHQgbG9hZCBiYXNlIGFkZHJlc3MgdG8gMHgwMDQwMDAwMAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOCBOb3YgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUgJiBNaWNybyBSYXR0bGVyIGJvYXJkcy4KICBUZXN0ZWQgb24gUmF0dGxlcjgyNDguCgoqIFBhdGNoIGJ5IEFuZHJlIFJlbmF1ZCwgMDggTm92IDIwMDQ6CiAgRml4IHdhdGNoZG9nIHN1cHBvcnQgaW4gY29tbW9uL2xjZC5jCgoqIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAwNSBOb3YgMjAwMzoKICBFbmFibGUgYWxsIDQgUENNQlJXIGJ1ZmZlcnMgZm9yIHRoZSBNUEM4MjQ1IHByb2Nlc3NvciBzaW5jZSB0aGUgQ1BVCiAgYnVnIG9ubHkgYWZmZWN0cyB0aGUgWFBDODI0NSBwcm9jZXNzb3JzCgoqIFBhdGNoZXMgYnkgSm9zZWYgV2FnbmVyLCAyOSBPY3QgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUFU4NyBib2FyZAogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU0IGJvYXJkCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDAyIE5vdiAyMDA0OgogIEFkZCAxNi1iaXQgTkFORCBzdXBwb3J0CgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDEgTm92IDIwMDQ6CiAgQWRkIG1pc3NpbmcgTklPUy9OSU9TMiBzdXBwb3J0IGZvciAiaW1pbmZvIiBjb21tYW5kCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI5IE9jdCAyMDA0OgogIEFkZCBtaXNzaW5nIE5JT1MvTklPUzIgc3VwcG9ydCBmb3IgIm1raW1hZ2UiIHRvb2wuCgoqIFBhdGNoIGJ5IERhdmlkIEFkYWlyLCAyNyBPY3QgMjAwNDoKICBBZGQgbWlzc2luZyA0NDBHWCBTRFJBTSBDb250cm9sbGVyIHJlc2V0CgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IE9jdCAyMDA0OgogIERlY2xhcmUgcmVzZXRfY3B1KCkgaW4gaW5jbHVkZS9jb21tb24uaCBpbnN0ZWFkIGxvY2FsbHkKCiogUGF0Y2ggYnkgWXVzZGkgU2FudG9zbywgMjIgT2N0IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgSElEREVOX0RSQUdPTiBib2FyZAogIC0gZml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGRyaXZlci9ydGwxODM5LmMKCiogUGF0Y2ggYnkgQWxsZW4gQ3VydGlzLCAyMSBPY3QgMjAwNDoKICBzdXBwb3J0IG11bHRpcGxlIHNlcmlhbCBwb3J0cwoKKiBQYXRjaCBieSBSaWNoYXJkIEtsaW5nbGVyLCAwMyBBcHIgMjAwNToKICBBZGQgY2FsbCB0byBldGhfaGFsdCgpIGluIG5ldC9uZXQuYyB3aGVuIGNhbGxlZCBmdW5jdGlvbnMgZmFpbAogIGFmdGVyIGV0aF9pbml0KCkgaGFzIGJlZW4gY2FsbGVkLgoKKiBQYXRjaCBieSBTYW0gU29uZywgMyBBcHJpbCAyMDA1OgogIC0gVXBkYXRlIFJFQURNRS5OZXRjb25zb2xlCiAgLSBVcGRhdGUgUkVBRE1FCgoqIFByZXBhcmUgZm9yIFNvQyByZXdvcmsgb2YgQVJNIGNvZGU6CiAgLSByZW5hbWUgQ09ORklHX0JPT1RCSU5GVU5DIGludG8gIENPTkZJR19JTklUX0NSSVRJQ0FMCiAgLSByZW5hbWUgbWVtc2V0dXAgaW50byBsb3dsZXZlbF9pbml0IChmdW5jdGlvbiBuYW1lIGFuZCBzb3VyY2UgZmlsZXMpCiAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDMgQXByIDIwMDU6CiAgLSBjcmVhdGUgU29DIHNwZWNpZmljIGRpcmVjdG9yaWVzIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlteCBhbmQKICAgIGluY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0eDAKCiogRml4IHByb2JsZW1zIHdpdGggU05UUCBzdXBwb3J0OwogIGVuYWJsZSBTTlRQIHN1cHBvcnQgaW4gc29tZSBib2FyZHMuCgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMDEgQXByIDIwMDU6CiAgLSBGaXggZmxhc2ggZXJhc2UgdGltZW91dCBvbiBDTUNfUFUyCiAgLSBBZGQgYXV0b21hdGljIEhXIGRldGVjdGlvbiBmb3IgQ01DX1BVMiBhbmQgQ01DX0JBU0lDCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIE1hcmNoIDIwMDU6CiAgZml4IGNhY2hlIGVuYWJsaW5nIGZvciBBVDkxUk05MjAwCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDMwIE1hciAyMDA1OgogIGFkZCBTTlRQIHN1cHBvcnQgYW5kIGV4cGFuZCB0aW1lIHNlcnZlciBhbmQgdGltZSBvZmZzZXQgZmllbGRzIG9mCiAgREhDUCBzdXBwb3J0LiBTZWUgZG9jL1JFQURNRS5TTlRQCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIERlYyAyMDA0OgogIEZpeCBidWcgaW4gYXQ5MXJtOTIwIGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBEZWMgMjAwNDoKICBSZW1vdmUgZHVwbGljYXRlZCBjb2RlIGJ5IG1lcmdpbmcgbWVtc2V0dXAuUyBmaWxlcyBmb3IKICBhdDkxcm05MjAwIGJvYXJkcyBpbnRvIG9uZSBjcHUvYXQ5MXJtOTIwMC9sb3dsZXZlbC5TCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDMxIE1hciAyMDA1OgogIENsZWFudXAgZHVwbGljYXRlIGRlZmluaXRpb24gb2Ygb3ZlcndyaXRlX2NvbnNvbGUoKQoKKiBVcGRhdGUgVFFNNTIwMCBjb25maWd1cmF0aW9uOwogIHByZXBhcmUgZm9yIFJldi4gMjAwIHN0YXJ0ZXIga2l0IGJvYXJkcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIE9jdCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBOaW9zLUlJIEVQQ1MgQ29udHJvbGxlciBjb3JlLgoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIwIE9jdCAyMDA0OgogIE5pb3MtSUkgY2xlYW51cHM6CiAgLSBBZGQgc3lzaWQgY29tbWFuZCAoTmlvcy1JSSBvbmx5KS4KICAtIExvY2F0ZSBkZWZhdWx0IGV4Y2VwdGlvbiB0cmFtcG9saW5lIGF0IHByb3BlciBvZmZzZXQuCiAgLSBJbXBsZW1lbnQgSS9PIHJvdXRpbmVzIChyZWFkYiwgd3JpdGViLCBldGMpCiAgLSBJbXBsZW1lbnQgZG9fYm9vdG1fbGludXgKCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAyMiBNYXIgMjAwNToKICAtIHVzZSBUUU01MjAwX2F1dG8gYXMgTUFLRUFMTCB0YXJnZXQgZm9yIFRRTTUyMDAgc3lzdGVtcwogIC0gYWRkIHN1cHBvcnQgZm9yIFNNNTAxIGdyYXBoaWNzIGNvbnRyb2xsZXIKICAtIGFkZCBzdXBwb3J0IGZvciBncmFwaGljIGNvbnNvbGUgb24gVFFNNTIwMAogIC0gYWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgUmV2IDIwMAogIC0gY2xlYW51cCwgZml4IHR5cG8gaW4gaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAoKKiBQYXRjaCBieSBNYW5mcmVkIEJhcmFsLCAxNyBNYXIgMjAwNToKICBGaXggdHlwbwoKKiBGaXggUlRDIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uIGJvYXJkCgoqIENsZWFudXAsIGZpeCB0eXBvIGluIGluY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBNYXIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCBhdXRvX3VwZGF0ZSBhbmQgaGg0MDUgYm9hcmQKCiogQWRhcHQgZm9yIFUtQm9vdCBpbWFnZSBzaXplIChuZXcgZmVhdHVyZXMgZW5hYmxlZCkgb24gVFFNNTIwMAoKKiBVcGRhdGUgY29kZSBmb3IgVFFNODU0MCBib2FyZCAoYW5kIDg1eHggaW4gZ2VuZXJhbCk6CiAgLSBDaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIEV0aGVybmV0IGRyaXZlcjogTU9UTyBFTkVUIC0+IEVORVQKICAtIFJlZm9ybWF0IGJvb3QgbWVzc2FnZXMKICAtIEVuYWJsZSByZWR1bmRhbnQgZW52aXJvbm1lbnQKICAtIFJlcGxhY2UgdGhlIC1PMiBvcHRpbWl6YXRpb24gZmxhZyB3aXRoIC1tbm8tc3RyaW5nCgoqIFBhdGNoIGJ5IERhdmlkIEJyb3duZWxsLCAxMCBNYXIgMjAwNToKICBSZXN0b3JlIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGluIE9IQ0kgZHJpdmVycy4KCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NDAgYm9hcmQKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTQgTWFyIDIwMDU6CiAgTkM2NTA6IGNoYW5nZWQgTkFORCBmbGFzaCBhZGRyZXNzaW5nIHRvIHVzaW5nIFVQTUIKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNCBNYXIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCB2b2g0MDUgZnBnYSBpbWFnZQoKKiBJTktBNHgwOiBBbGxvdyBpbml0aWFsaXphdGlvbiBvZiBMQ0QgYmFja2xpZ2h0IGRpbW1pbmcgZnJvbQogICJicmlnaHRuZXNzIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCiogQWRkIHBvcnQgaW5pdGlhbGl6YXRpb24gZm9yIGRpZ2l0YWwgSS9PIG9uIElOS0E0eDAKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBNYXIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCBib2FyZHMgZHA0MDUgYW5kIGh1YjQwNQoKKiBGaXggZ2V0X3BhcnRpdGlvbl9pbmZvKCkgcGFyYW1ldGVyIGVycm9yIGluIGFsbCBvdGhlciBjYWxscwogIChjb21tb24vY21kX2lkZS5jLCBjb21tb24vY21kX3JlaXNlci5jLCBjb21tb24vY21kX3Njc2kuYykuCgoqIEVuYWJsZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBJTktBNHgwIGJvYXJkCgoqIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyOCBGZWIgMjAwNToKICBmaXggZXh0MmxvYWQgcGFzc2luZyBhbiBpbmNvcnJlY3QgcG9pbnRlciB0byBnZXRfcGFydGl0aW9uX2luZm8oKQogIHJlc3VsdGluZyBpbiBsb2FkIGZhaWx1cmUgZm9yIGRldmljZXMgb3RoZXIgdGhhbiAwCgoqIEFkZCBzdXBwb3J0IGZvciBTUkFNIGFuZCAyIHggUXVhZCBVQVJUcyBvbiBJTktBNHgwIGJvYXJkCgoqIENsZWFudXAgVVNCIGFuZCBwYXJ0aXRpb24gZGVmaW5lcwoKKiBBZGQgc3VwcG9ydCBmb3IgZXh0MiBmaWxlc3lzdGVtcyBhbmQgaW1hZ2UgdGltZXN0YW1wcyB0byBUUU01MjAwIGJvYXJkCgoqIEFkZCByZXNldCBjb2RlIGZvciBDb3JhbC1QIG9uIElOS0E0eDAgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjggSnVuIDIwMDQ6CiAgVXBkYXRlIGZvciBUUkFCIGJvYXJkLgoKKiBGaXggc29tZSBtaXNzaW5nICJ2b2xhdGlsZSJzIGluIE1QQzV4eHggRkVDIGRyaXZlcgoKKiBGaXggY2lycnVzIHZvbHRhZ2UgZGV0ZWN0aW9uIChmb3IgQ1BDNDUpCgoqIEZpeCBieXRlb3JkZXIgcHJvYmxlbSBpbiB1c2Jib290IGFuZCBzY3NpYm9vdCBjb21tYW5kcy4KCiogUGF0Y2ggYnkgQ2FqdXMgSGFobiwgMDQgRmViIDIwMDU6CiAgLSBkb24ndCBpbnNpc3Qgb24gbGVhZGluZyAnLycgZm9yIGZpbGVuYW1lIGluIGV4dDJsb2FkCiAgLSBzZXQgZGVmYXVsdCBwYXJ0aXRpb24gdG8gdXNlZnVsIHZhbHVlICgxKSBpbiBleHQybG9hZAoKKiBQYXRjaCBieSBBbmRyZXcgRHllciwgMDggSmFuIDIwMDU6CiAgZml4IHdyb25nIHJldHVybiBjb2RlcyBpbiBleHQyIGNvZGUKCiogUmVtb3ZlZCAnLS1uby13YXJuLW1pc21hdGNoJyBvcHRpb24gZnJvbSBNYWtlZmlsZS4gVGhpcyBvcHRpb24KICBtYWtlcyAnbGQnIHRvIG92ZXJsb29rIGJpbmFyeSBvYmplY3RzIGNvbXBhdGliaWxpdHkuCgoqIE1vdmVkICQoUExBVEZPUk1fTElCUykgZnJvbSB0aGUgbGlicmFyeSBncm91cCAoLS1zdGFydC1ncm91cCAuLi4KICAtLWVuZC1ncm91cCkgb3V0c2lkZSBvZiB0aGUgZ3JvdXAuIFRoaXMgd2lsbCBtYWtlICdsZCcgdG8gZG8KICBfbXVsdGlwbGVfIHNlYXJjaCBpbiB0aGUgbGlicmFyeSBncm91cCB3aGVuIHJlc29sdmluZyBzeW1ib2wKICByZWZlcmVuY2VzIGFuZCBkbyBvbmx5IGEgX3NpbmdsZV8gc2VhY2ggaW4gbGliZ2NjLmEgYWZ0ZXIgdGhlIGdyb3VwCiAgc2VhcmNoLgoKKiBGaXggc3RhYmlsaXR5IHByb2JsZW1zIG9uIENQQzQ1IGJvYXJkIGFnYWluLgoKKiBNYWtlIGltYWdlIGRldGVjdGlvbiBmb3IgZGlza2Jvb3QgLyB1c2Jib290IC8gc2NzaWJvb3QgbW9yZSByb2J1c3QKICAoYWxzbyBjaGVjayBoZWFkZXIgY2hlY2tzdW0pCgoqIFVwZGF0ZSBDUEM0NSBib2FyZCBjb25maWd1cmF0aW9uLgoKKiBBZGQgVVNCIGFuZCBQQ0kgc3VwcG9ydCBmb3IgSU5LQTR4MCBib2FyZAoKKiBGaXggSURFIHN0YWJpbGl0eSBwcm9ibGVtcyBvbiBDUEM0NSBib2FyZCAobmVlZHMgMiB4IEVJRUlPKS4KCiogQ29kZSBjbGVhbnVwCgoqIFBhdGNoIGJ5IFJvYmluIEdldHosIDEzIE9jdCAyMDA0OgogIEFkZCBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIHRvIGNoYW5nZSBTTUM5MUMxMTEgTUFDIGFkZHJlc3NlcywKICBzZWUgZXhhbXBsZXMvUkVBRE1FLnNtYzkxMTExX2VlcHJvbQoKKiBQYXRjaCBieSBYaWFvZ2VuZyAoU2hhd24pIEppbiwgMTIgT2N0IDIwMDQ6CiAgRml4IEZsYXNoIHN1cHBvcnQgZm9yIEFSTSBJbnRlZ3JhdG9yIENQLgoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxMCBKYW4gMjAwNToKICBVcGRhdGUgc3VwcG9ydCBmb3IgT01BUDI0MjAgKEFSTTExKSBhbmQgSDQgYm9hcmQ6CiAgbyBjbGVhbiB1cCBhbmQgYWRkIG5ldyB0eXBlcyB0byBINCBtZW1vcnkgcHJvYmUgY29kZS4KICBvIGZpeCB0byB3b3JrIHdpdGggaW50ZXJuYWwgYm9vdC4KICBvIGFkZGVkIFBSQ00gY29uZmlnIElJSSBvcGVyYXRpb24uCiAgbyBmaXggbWFyZ2luYWwgZmxhc2ggdGltaW5ncy4KICBvIGFkZCByZXZpc29uIEFUQUcgdXNhZ2UuCiAgbyBlbmFibGUgdm9sdGFnZSBzY2FsaW5nIGF0IHBvd2VyIGNoaXAuCiAgbyBmaXggY29tcGlsZSBlcnJvciBmb3IgaTJjLgoKKiBGaXggbmV0d29yayBwcm9ibGVtIChlcnJvciB3aGVuIHJlY2VpdmluZyBtdWx0aXBsZSBBUlAgcGFja2V0cykKCiogUGF0Y2ggYnkgRGFuaWVsIFBvaXJvdCwgMTIgT2N0IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFdpbmQgUml2ZXIgc2JjNDA1IGJvYXJkCgoqIFBhdGNoIGJ5IFJhaW5lciBCcmVzdGFuLCAxMiBPY3QgMjAwNDoKICBNYWtlIGV4YW1wbGVzL01ha2VmaWxlIG1vcmUgcm9idXN0CgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAxMSBPY3RvYmVyIDIwMDQ6CiAgLSBBZGQgUkVTRVQvUFJFQk9PVC9BVVRPQk9PVCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCiAgLSBBZGp1c3QgQ1BVOkJVUyBmcmVxdWVuY3kgcmF0aW8gMToxIHdoZW4gY29yZSBmcmVxdWVuY3kKICAgIGxlc3MgdGhhbiA1ME1IegoKKiBQYXRjaCBieSBTYW0gU29uZywgMTAgT2N0IDIwMDQ6CiAgRml4IGEgcGFyYW1ldGVyIGVycm9yIGluIHJ1bl9jb21tYW5kKCkgaW4gbWFpbi5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDAxIE9jdCAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciB0aGUgVEkgT01BUDI0MjAgcHJvY2Vzc29yIGFuZCBpdHMgSDQgcmVmZXJlbmNlCiAgYm9hcmQKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGxlZ3JpbiwgMjQgU2VwIDIwMDQ6CiAgQWRkZWQgc3VwcG9ydCBmb3IgTkUyMDAwIGNvbXBhdGlibGUgKERQODM5MCwgRFA4MzkwMikgTklDcy4KCiogUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjMgU2VwIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBBTUQgZGIxNTUwIGJvYXJkCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDE1IFNlcCAyMDA0OgogIEFkZCBDT05GSUdfU0VSSUFMX01VTFRJIHN1cHBvcnQgZm9yIHBwYzR4eCwKICB1cGRhdGUgUkVBRE1FLnNlcmlhbF9tdWx0aQoKKiBQYXRjaGVzIGJ5IERhdmlkIFNub3dkb24sIDA3IFNlcCAyMDA0OgogIC0gYWRkIHUtYm9vdC5oZXggdGFyZ2V0IGluIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgVU5TVy9OSUNUQSBQTEVCIDIgYm9hcmQgKHBsZWIyKQogIC0gdXNlIC1tdHVuZT14c2NhbGUgYW5kIC1tYXJjaD1hcm12NSBvcHRpb25zIGZvciBQWEEKCiogUGF0Y2ggYnkgRmxvcmlhbiBTY2hsb3RlLCAwOCBTZXAgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgU2VuVGVjLUNPQlJBNTI3Mi1ib2FyZCAoQ29sZEZpcmUpLgoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDA3IFNlcCAyMDA0OgogIG1wYzgyNHg6IHNldCBQQ0kgbGF0ZW5jeSB0aW1lciB0byBhIHNhbmUgdmFsdWUKICAoaXMgMCBhZnRlciByZXNldCkuCgoqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAwMyBTZXAgMjAwNDoKICBBZGQgYml0c3RyZWFtIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBmcGdhIGNvbW1hbmQgKFhpbGlueCBvbmx5KS4KCiogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDAzIFNlcCAyMDA0OgogIEFkZCBYaWxpbnggU3BhcnRhbjJFIGZhbWlseSBGUEdBIHN1cHBvcnQKCiogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAyIFNlcCAyMDA0OgogIEFkZCBBZGRlZCBzdXBwb3J0IGZvciBIMiByZXZpc2lvbiBvZiB0aGUgRVA4MjYwIGJvYXJkLgogIEZpeGVkIGZvcm1hdHRpbmcgZm9yIHNvbWUgb2YgdGhlIEVQODI2MCByZWxhdGVkIHNvdXJjZSBmaWxlcy4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwMiBTZXAgMjAwNDoKICBSZXNldCBtb25pdG9yIHNpemUgYmFjayB0byAyNTYgc28gZW52aXJvbm1lbnQgY2FuIGJlIHdyaXR0ZW4KICB0byBmbGFzaCBvbiBNUEM4NXh4IEFEUyBhbmQgQ0RTIHJlbGVhc2VzLgoKKiBQYXRjaCBieSBQYW9sbyBCcm9nZ2luaSwgMDIgU2VwIDIwMDQ6CiAgTWFrZSBCU1MgY2xlYXJpbmcgb24gQVJNIHN5c3RlbXMgbW9yZSByb2J1c3QKCiogUGF0Y2ggYnkgWXVlIEh1IGFuZCBKb2UsIDAxIFNlcCAyMDA0OgogIC0gYWRkIFBDSSBzdXBwb3J0IGZvciBpeHA0MjU7CiAgLSBhZGQgRUVQUk8xMDAgc3VwcG9yIHRmb3IgaXhkcDQyNSBib2FyZC4KCiogRml4IHByb2JsZW0gd2l0aCBwcm90ZWN0ZWQgc2VjdG9yIGRldGVjdGlvbiBpbiBkcml2ZXIvY2ZpX2ZsYXNoLmMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIENvZGUgY2xlYW51cCwgbW9zdGx5IGZvciBHQ0MtMy4zLngKCiogQ2xlYW51cCBjb25mdXNpbmcgdXNlIG9mIENPTkZJR19FVEgqQUREUiAtIHVzdCBoaXMgb25seSB0bwogIHByZS1kZWZpbmUgYSBNQUMgYWRkcmVzczsgdXNlIENPTkZJR19IQVNfRVRIKiB0byBlbmFibGUgc3VwcG9ydCBmb3IKICBhZGRpdGlvbmFsIGV0aGVybmV0IGFkZHJlc3Nlcy4KCiogQ2xlYW51cCBkcml2ZXJzL2k4MjM2NS5jIC0gYXZvaWQgZHVwbGljYXRpb24gb2YgY29kZQoKKiBGaXggYm9ndXMgImNhbm5vdCBzcGFuIGFjcm9zcyBiYW5rcyIgZmxhc2ggZXJyb3IgbWVzc2FnZQoKKiBDb2RlIGNsZWFudXAKCiogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBmb3IgdGhlIENQQzQ1IEJvYXJkLgoKKiBGaXggcHJvYmxlbXMgd2l0aCBDTUNfUFUyIGZsYXNoIGRyaXZlci4KCiogQ2xlYW51cDoKICAtIGF2b2lkIHRyaWdyYXBoIHdhcm5pbmcgaW4gZnMvZXh0Mi9leHQyZnMuYwogIC0gcmVuYW1lIFVDMTAwIC0+IHVjMTAwCgoqIEFkZCBzdXBwb3J0IGZvciBVQzEwMCBib2FyZAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IERleiAyMDA0OgogIC0gZXh0MmZzIHN1cHBvcnQgYWRkZWQKICAtIFR1bmRyYSB1bml2ZXJzZSBzdXBwb3J0IGFkZGVkCiAgLSBDb2xkRmlyZSBNQ0Y1MjQ5IHN1cHBvcnQgYWRkZWQgKG5vIHByZWxvYWRlciBuZWVkZWQhKQogIC0gTUNGNTI0OSBib2FyZCBUQVNSRUcgYWRkZWQKICAtIFBQQyBib2FyZHMgYWRkZWQ6IEFQQzQwNSwgQ1BDSTQwNURULCBDUENJNzUwLCBHMjAwMCwgSEg0MDUsCiAgICBWT000MDUsIFdVSDQwNQogIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKICAtIG1lbW9yeSBjb21tYW5kcyAibWRjIiBhbmQgIm13YyIgYWRkZWQgZm9yIGN5Y2xpYyByZWFkL3dyaXRlCiAgICAoQ09ORklHX01YX0NZQ0xJQywgc2VlIFJFQURNRSBmb3IgZnVydGhlciBkZXNjcmlwdGlvbikKCiogQWRkIHN1cHBvcnQgZm9yIElOS0E0WDAgYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTIgRGVjIDIwMDQ6CiAgRml4IHR5cG8gaW4gQVQ5MSBtZW1vcnkgc2V0dXAuCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yICJTVEs1Mnh4IiBib2FyZCAoaW5jbHVkaW5nIFBTLzIgbXVsdGlwbGV4ZXIpCiAgLSBhZGQgaGFyZHdhcmUgZGV0ZWN0aW9uIGZvciBUUU01MjAwCgoqIENsZWFuIHVwIENNQyBQVTIgZmxhc2ggZHJpdmVyCgoqIFVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlCgoqIEZpeCBidWcgaW4gTVBDODIzIExDRCBkcml2ZXIKCiogRml4IHVkZWxheSgpIG9uIEFUOTFSTTkyMDAgZm9yIGRlbGF5cyA8IDEgbXMuCgoqIEVuYWJsZSBsb25nIGhlbHAgb24gQ01DIFBVMiBib2FyZDsKICBmaXggcmVzZXQgaXNzdWU7CiAgaW5jcmVhc2UgQ1BVIHNwZWVkIGZyb20gMTc5IHRvIDIwNyBNSHouCgoqIEZpeCBzbWM5MTExMSBldGhlcm5ldCBkcml2ZXIgZm9yIFhhZW5pYXggYm9hcmQgKG5lZWQgdG8gaGFuZGxlCiAgdW5hbGlnbmVkIHRhaWwgcGFydCBzcGVjaWFsbHkpLgoKKiBVcGRhdGUgZm9yIEFUOTFSTTkyMDBESyBhbmQgQ01DX1BVMiBib2FyZHM6CiAgLSBFbmFibGUgYm9vdGluZyBkaXJlY3RseSBmcm9tIGZsYXNoCiAgLSBmaXggQ01DX1BVMiBmbGFzaCBkcml2ZXIKCiogRml4IG1raW1hZ2UgdXNhZ2UgbWVzc2FnZQoKKiBNYXAgU1JBTSBvbiBOQzY1MCBib2FyZAoKKiBXb3JrIGFyb3VuZCBmb3IgRXRoZXJuZXQgcHJvYmxlbXMgb24gWGFlbmlheCBib2FyZAoKKiBQYXRjaCBieSBUc2lDaHVuZyBMaWV3LCAyMyBTZXAgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBNUEM4MjIwIENQVQogIC0gQWRkIHN1cHBvcnQgZm9yIEFsYXNrYSBhbmQgWXVrb24gYm9hcmRzCgoqIEZpeCBjb25maWd1cmF0aW9uIGZvciBFUklDIGJvYXJkIChuZWVkcyBtb3JlIHJvb20pCgoqIEFkanVzdCBNSVBTIGNvbXBpbGVyIG9wdGlvbnMgYXQgcnVuLXRpbWUgZGVwZW5kaW5nIG9uIHRvb2xzIHZlcnNpb24KICAoIi1tYXJjaD00a2MgLW10dW5lPTRrYyAtV2EsLW1pcHNfYWxsb3dfYnJhbmNoX3RvX3VuZGVmaW5lZCIgZm9yIG5ldywKICAiLW1jcHU9NGtjIiBmb3Igb2xkIHRvb2xzKQoKKiBBZGQgcGFzc2luZyBvZiB0aGUgY29tbWFuZCBsaW5lIGFuZCBtZW1vcnkgc2l6ZSBpbmZvcm1hdGlvbiB0byAgdGhlCiAga2VybmVsIG9uIHhhZW5pYXggYm9hcmQuCgoqIEVuYWJsZSBOQU5EIGZsYXNoIHN1cHBvcnQgZm9yIE5DNjUwIGJvYXJkLgoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UgMDcgT2N0IDIwMDQ6CiAgVXBkYXRlZCBSRUFETUUgZm9yIERCQXUxeDAwIGJvYXJkcyB0byBtYXRjaCBjdXJyZW50IHN0YXR1cwoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMjggU2VwdCAyMDA0OgogIEZpeCBGbGFzaCBzdXBwb3J0IGZvciBWZXJzYXRpbGUuCgoqIFBhdGNoIGJ5IFJvZ2VyIEJsb2ZlbGQsIDE2IFNlcCAyMDA0OgogIEZpeCB0aW1lb3V0IGZvciBESENQIGNvbW1hbmQgcmV0cnkKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE0IFNlcCAyMDA0OgogIEZpeCBlYXJseSBzZXJpYWwgaGFuZyB3aGVuIENPTkZJR19TRVJJQUxfTVVMVEkgaXMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE0IFNlcCAyMDA0OgogIEtpY2sgd2F0Y2hkb2cgd2hlbiBiei1kZWNvbXByZXNzaW5nCgoqIEZpeCBDRkdfSFogcHJvYmxlbXMgb24gQVQ5MVJNOTIwMCBzeXN0ZW1zCiAgW1JlbWVtYmVyOiBDRkdfSFogc2hvdWxkIGJlIDEwMDAgb24gQUxMIHN5c3RlbXMhXQoKKiBQYXRjaCBieSBHcmlkaXNoIFNobG9taSwgMzAgQXVnIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCB0byByZXZBIHZlcnNpb24gb2YgUFEyNyBhbmQgUFEyN0UuCiAgLSBSZXZlcnRlZCBNUEM4MjYwQURTIGJhdWRyYXRlIGJhY2sgdG8gb3JpZ2luYWwgMTE1MjAwCgoqIFBhdGNoIGJ5IEhvamluLCAxNyBTZXAgMjAwNDoKICBGaXggdHlwbyBpbiBjZmlfZmxhc2guYwoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwOSBTZXB0ZW1iZXIgMjAwNDoKICBtdGVzdCdzIGRhdGEgbGluZSB0ZXN0ICh3aXRoIENGR19BTFRfTUVNVEVTVCBzZXQpIHJldHVybmVkIGEgd3JvbmcKICBlcnJvciBtZXNzYWdlCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDMxIEF1Z3VzdCAyMDA0OgogIEFkZGVkIG9wdGlvbiBDRkdfWExCX1BJUEVMSU5JTkcgdG8gZW5hYmxlIFhMQiBwaXBlbGluaW5nLiBUaGlzCiAgaW1wcm92ZXMgRlRQIHBlcmZvcm1hbmNlIGZvciBNUEM1MjAwIHN5c3RlbXMuIEVuYWJsZWQgZm9yIEljZUN1YmUKICBieSBkZWZhdWx0LgoKKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAzMCBBdWcgMjAwNDoKICAtIEltcHJvdmUgcGxhdGZvcm0uUyBjb2RlIGZvciBvbWFwMTUxMGlubiB0aGF0IGRldGVjdHMgd2hldGhlciBjb2RlCiAgICBpcyBydW5uaW5nIGZyb20gU0RSQU0gb3Igbm90LiBQYXRjaCBhbGxvd3MgU0RSQU0gdG8gYmUgY29uZmlndXJlZAogICAgaWYgY29kZSBpcyBydW5uaW5nIG91dCBvZiBTUkFNIGF0IDB4MjAwMDAwMDAuCgoqIFBhdGNoIGJ5IEZyZWRlcmljayBLbGF0dCwgMzAgQXVnIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBXaW5kIFJpdmVyIFNCQzg1NDAvU0JDODU2MCBib2FyZHMKCiogQ29uZmlndXJlIFNYMSBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYwoKKiBQYXRjaGVzIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDMwIEF1ZyAyMDA0OgogIC0gQ29uZmlndXJlIG9tYXAxNTEwaW5uIGJvYXJkIHRvIHVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jCiAgLSBNYWtlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgcHJvdGVjdCBlbnZpcm9ubWVudCBhbmQgcmVkdW5kYW50CiAgICBlbnZpcm9ubWVudC4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjMgSnVuIDIwMDQ6CiAgLSBBZGQgc2NyaXB0ICh0b29scy9pbWcyYnJlYy5zaCkgdG8gcHJvZ3JhbW0gVS1Cb290IGludG8KICAgIChTeW5jaClGbGFzaCB1c2luZyB0aGUgQm9vdHN0cmFwIE1vZGUgb2YgdGhlIE1DOTMyOE1YMS9MCgoqIFBhdGNoZXMgYnkgU2NvdHQgTWNOdXR0LCAyNCBBdWcgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy1JSSBwcm9jZXNzb3JzLgogIC0gQWRkIHN1cHBvcnQgZm9yIFBzeWVudCBQQ0ktNTQ0MSBib2FyZC4KICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUEsxQzIwIGJvYXJkLgoKKiBQYXRjaGVzIGJ5IEpvbiBMb2VsaWdlciwgMjQgQXVnIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1QQzg1NDEgYW5kIE1QQzg1NTUgQ0RTIGJvYXJkcwogIC0gQ2xlYW51cCBldGg/YWRkciBoYW5kbGluZzogbWFrZSBkZXBlbmRlbnQgb24gQ09ORklHX0VUSD9BRERSCiAgLSBDb252ZXJ0IE1QQzg1eHhBRFMgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCiAgLSBGaXggUENJIHdpbmRvdyBvbiBNUEM4NXh4OyByZW1vdmUgdW5uZWVkZWQgUENJIGluaXRpYWxpemF0aW9uCiAgICBmcm9tIGJvYXJkX2Vhcmx5X2luaXRfZigpCiAgLSBQcm92aWRlIFNXIHdvcmthcm91bmQgZm9yIFBDSSBpbml0aWFsaXphdGlvbiBvbiA4NXh4IENEUwoKKiBQYXRjaGVzIGJ5IEdlb3JnZSBHLiBEYXZpcywgMjQgQXVnIDIwMDQ6CiAgLSBFbmFibGUgcmFtZGlzay9pbml0cmQgdGFnZ2VkIHBhcmFtIHN1cHBvcnQgZm9yIG9tYXAxNjEwaDJfY29uZmlnCiAgLSBSZW1vdmUgc3RhdGljIG5ldHdvcmsgc2V0dXAgZGVmYXVsdHMgZnJvbSBteDFhZHNfY29uZmlnCiAgLSB1cGRhdGUgQVJNIGJvYXJkcyB0byB1c2UgY29uc3RhbnRzIGZyb20gbWFjaC10eXBlcy5oCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwNCBPY3QgMjAwNDoKICAtIGZpeCBJMkMgb24gYXQ5MXJtOTIwMAogIC0gYWRkIHN1cHBvcnQgZm9yIFJpY29oIFJTNUMzNzJBIFJUQwoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDEgT2N0IDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgQ01DIFBVMiBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIEkyQyBvbiBhdDkxcm05MjAwCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAyOCBTZXAgMjAwNDoKICBmaXggYmF1ZHJhdGUgaGFuZGxpbmcgb24gYXQ5MXJtOTIwMAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMiBBdWcgMjAwNDoKICAtIHJlbW92ZSBaUEMuMTkwMCBib2FyZC1zcGVjaWZpYyBmbGFzaCBkcml2ZXI7CiAgICBzd2l0Y2ggdGhlIHBvcnQgdG8gZ2VuZXJpYyBDRkkgZHJpdmVyOwogIC0gcG9ydCBjbGVhbi11cAoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKICBBZGQgY2FsY19mYnNpemUoKSBmdW5jdGlvbiB1c2VkIHdpdGggVklERU9MRkJfVEFHIG9uIFRSQUIKCiogQ2xlYW4gdXAgdG9vbHMvYm1wX2xvZ28uYyB0byBub3QgYWRkIHRyYWlsaW5nIHdoaXRlIHNwYWNlCgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgogIC0gR3JvdXAgY29tbW9uIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucyBpbiBjb21tb24vbGNkLmMKICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBtYWNyb3MgYW5kICNkZWZpbmVzIGluIGluY2x1ZGUvbGNkLmgKICAtIFByb3ZpZGUgY2FsY19mYnNpemUoKSBmb3IgdmlkZW8gQVRBRwoKKiBQYXRjaCBieSBTYW0gU29uZywgMjEgQXVndXN0IDIwMDQ6CiAgLSBGaXggYSB0eXBvIGluIFJFQURNRQogIC0gQWxpZ24gIihSTykiIG91dHB1dCBmb3IgImZsaW5mbyIgYWZ0ZXIgInByb3RlY3Qgb24iCiAgLSBBZGQgUkVTRVQgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZDsgYWRqdXN0IENQVTpCVVMgZnJlcXVlbmN5CiAgICByYXRpbyAxOjEgd2hlbiBjb3JlIGZyZXF1ZW5jeSBsZXNzIHRoYW4gNTBNSHoKCiogUGF0Y2hlcyBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKICAtIGZpeCBzb21lICJ1c2Ugb2YgbGFiZWwgYXQgZW5kIG9mIGNvbXBvdW5kIHN0YXRlbWVudCIgd2FybmluZ3MKICAtIERlZmluZSB0eXBlIG9mIExDRCBwYW5lbCBvbiBsdWJib2NrIGJvYXJkIGlmIENPTkZJR19MQ0QgaXMgdXNlZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxNiBBdWcgMjAwNDoKICAtIEludHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIFNvQ3MgIi4vY3B1LyQoQ1BVKS8kKFNPQykiCiAgLSBjcmVhdGluZyBzdWJkaXJzIGZvciBTb0NzIC4vY3B1L2FybTkyMHQvaW14IGFuZCAuL2NwdS9hcm05MjB0L3MzYzI0eDAKICAtIG1vdmluZyBTb0Mgc3BlY2lmaWMgY29kZSBvdXQgb2YgY3B1L2FybTkyMHQvIGludG8gY3B1L2FybTkyMHQvJChTT0MpLwogIC0gbW92aW5nIGRyaXZlcnMvczNjMjR4MF9pMmMuYyBhbmQgZHJpdmVycy9zZXJpYWxfaW14LmMgb3V0IG9mIGRyaXZlcnMvCiAgICBpbnRvIGNwdS9hcm05MjB0LyQoU09DKS8KCiogUGF0Y2hlcyBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKICAtIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggOCBhbmQgMTYgYml0IG1vZGUgYWNjZXNzIHRvIFN5c3RlbSBBQ0UgQ0YKICAgIHRocm91Z2ggTVBVLgogIC0gRml4ZWQgbWlzc2luZyBTeXN0ZW0gQUNFIENGIGRldmljZSBkdXJpbmcgZ2V0IEZBVCBwYXJ0aXRpb24gaW5mbwogICAgaW4gZmF0X3JlZ2lzdGVyX2RldmljZSBmdW5jdGlvbi4KICAtIEVuYWJsZWQgU3lzdGVtIEFDRSBDRiBzdXBwb3J0IG9uIE1MMzAwLgoKKiBQYXRjaCBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKICBTeW5jaCBkZWZpbmVzIGZvciBzYXZlZW52IGFuZCBkb19zYXZlZW52IGZ1bmN0aW9ucyBzbyB0aGV5IGdldAogIGNvbXBpbGVkIHVuZGVyIHRoZSBzYW1lIHN0YXRlbWVudC4KCiogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgLSBBZGRlZCBJMkMgc3VwcG9ydCBmb3IgTUwzMDAuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciBNTDMwMCB0byByZWFkIG91dCBpdHMgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24KICAgIHN0b3JlZCBvbiB0aGUgRUVQUk9NLgogIC0gQWRkZWQgc3VwcG9ydCB0byB1c2UgYm9hcmQgc3BlY2lmaWMgcGFyYW1ldGVycyBhcyBwYXJ0IG9mCiAgICBVLUJvb3QncyBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KICAtIFVwZGF0ZWQgTUxEIGZpbGVzIHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiBmb3IgbmV3IGZlYXR1cmVzCiAgICBhYm92ZS4KCiogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAwNSBBdWcgMjAwNDoKICAtIFJlbW92ZSBpbmNvcnJlY3QgYnJpZGdlIHNldHRpbmdzIGZvciBldGggZ3JvdXAgNgogIC0gQWRkIGNhbGwgdG8gc2V0dXAgYnJpZGdlIGluIHBwY180NDB4X2V0aF9pbml0aWFsaXplCiAgLSBGaXggcHBjXzQ0MHhfZXRoX2luaXQgdG8gcmVzZXQgdGhlIHBoeSBvbmx5IGlmIGl0cyB0aGUKICAgIGZpcnN0IHRpbWUgdGhyb3VnaCwgb3RoZXJ3aXNlLCBqdXN0IGNoZWNrIHRoZSBwaHkgZm9yIHRoZQogICAgYXV0b25lZ290aWF0ZWQgc3BlZWQvZHVwbGV4LiAgVGhpcyBhbGxvd3MgdGhlIHVzZSBvZiBuZXRjb25zb2xlCiAgLSBvbmx5IHByaW50IHRoZSBzcGVlZC9kdXBsZXggdGhlIGZpcnN0IHRpbWUgdGhlIHBoeSBpcyByZXNldC4KCiogUGF0Y2ggYnkgU2hsb21vIEt1dCwgMjkgTWFyIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE1LUyBJbnN0cnVtZW50cyAiUXVhbnR1bSIgYm9hcmQKCiogRml4IGJ1aWxkIHByb2JsZW0gd2l0aCBDb2dlbnQgYm9hcmRzOwogIGF2b2lkIHVzaW5nIDxhc20vYnl0ZW9yZGVyLmg+IHdoZW4gdXNpbmcgdGhlIGhvc3QgY29tcGlsZXIKCiogUGF0Y2ggYnkgR2FuYXBhdGhpIEMsIDA0IEF1ZyAyMDA0OgogIEZpeCBORlMgdGltZW91dCBpc3N1ZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxOSBKdWwgMjAwNDoKICAtIEZpeCBob3N0IHRvb2xzIGJ1aWxkaW5nIGluIEN5Z3dpbiBlbnZpcm9ubWVudAogIC0gRml4IGhlYWRlciBmaWxlcyBzZWFyY2ggb3JkZXIgZm9yIGhvc3QgdG9vbHMKCiogUGF0Y2ggYnkgVG9tIEFybWlzdGVhZCwgMTkgSnVsIDIwMDQ6CiAgRml4IGtnZGIuUyBzdXBwb3J0IGZvciA3NHh4Xzc1eCBjcHUKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNSBKdWwgMjAwNDoKICBGaXggTVBDODV4eCBJMkMgZHJpdmVyCgoqIEZpeCBwcm9ibGVtcyB3aXRoIENEUk9NIGRyaXZlIGFzIHNsYXZlIGRldmljZSBvbiBMaXRlNTIwMCBJREUgYnVzLgoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxNSBKdWx5IDIwMDQKICBTZXQgdGhlIFBDSSBjbGFzcyBjb2RlIGZvciBKU0UgYm9hcmQgYXMgcGFydCBvZiBQQ0kgaW50ZXJmYWNlIHNldHVwCgoqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDE1IEp1bCAyMDA0OgogIEZpeCBwcm9ibGVtIHdpdGggd3JpdGVzIHdpdGggb2RkIHNpemVzIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgd2hlbgogIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFIGlzIHNldAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwNDoKICBBbGxvdyBjbG9jayBzZXR0aW5nIG9uIE1QQzg2Ni9NUEM4ODUgc2VyaWVzIGNoaXBzIGFjY29yZGluZyB0bwogIGVudmlyb25tZW50IHZhcmlhYmxlIGBjcHVjbGsnCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIEFwciAyMDA0OgogIFJlbW92ZSB1bm5lY2Vzc2FyeSByZWRlZmluZSBvZiBDUE1fREFUQU9OTFlfU0laRSBmb3IgTVBDODI2eAoKKiBQYXRjaCBieSBWaW5jZW50IER1YmV5LCAyNCBTZXAgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgeGFlbmlheCBib2FyZAoKKiBBZGQgY29tbWVudCBhYm91dCBub24tR1BMIGNoYXJhY3RlciBvZiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0bwogIENPUFlJTkcgZmlsZQoKKiBGaXggRkVDIGV0aGVybmV0IHByb2JsZW0gb24gTlNDVSBib2FyZC4KCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDA5IFNlcCAyMDA0OgogIGFsbG93IHRvIHVzZSBVU0FSVDEgYXMgY29uc29sZSBwb3J0IG9uIGF0OTFybTkyMDBkayBib2FyZHMKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBTZXAgMjAwNDoKICBVcGRhdGUgQVI0MDUgYm9hcmQuCgoqIEZpeCBTeXNDbGsgaGFuZGxpbmcgZm9yIFBQQ2hhbWVsZW9uIGFuZCBDQVRjZW50ZXIgYm9hcmRzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDA4IFNlcCAyMDA0OgogIFVwZGF0ZSBldGFncyBidWlsZCB0YXJnZXQKCiogSW1wcm92ZSBOZXRDb25zb2xlIHN1cHBvcnQ6IGFkZCBzdXBwb3J0IGZvciBicm9hZGNhc3QgZGVzdGluYXRpb24KICBhZGRyZXNzIGFuZCBidWZmZXJlZCBpbnB1dC4KCiogQ2xlYW51cCBjb21waWxlciB3YXJuaW5ncyBmb3IgR0NDIDMuMy54IGFuZCBsYXRlcgoKKiBGaXggcHJvYmxlbSBpbiBjbWRfamZmczIuYyBpbnRyb2R1Y2VkIGJ5IENGR19KRkZTX1NJTkdMRV9QQVJUIHBhdGNoCgoqIEFkZCBzdXBwb3J0IGZvciBJRFMgIk5DNjUwIiBib2FyZAoKKiBBZGQgYXV0b21hdGljIHVwZGF0ZSBzdXBwb3J0IGZvciBMV01PTiBib2FyZAoKKiBDbGVhciBCbG9jayBMb2NrLUJpdHMgd2hlbiBlcmFzaW5nIGZsYXNoIG9uIExXTU9OIGJvYXJkLgoKKiBGaXggcmV0dXJuIGNvZGUgb2YgImZhdGxvYWQiIGNvbW1hbmQKCiogRW5hYmxlIE1TRE9TL1ZGQVQgZmlsZXN5c3RlbSBzdXBwb3J0IGZvciBMV01PTiBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwMyBBdWcgMjAwNDoKICBjaGFuZ2UgdGltaW5nIGZvciBTTTUwMSBncmFwaGljcyBjb250cm9sbGVyIG9uIFRRTTUyMDAgbW9kdWxlCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDEzIEp1bHkgMjAwNDoKICAtIFRvdGFsNTIwMCBMQ0Qgbm93IHJ1biBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuIEVuZGlhbmVzcyBjb252ZXJzaW9uCiAgICBpcyBkb25lIGluIGhhcmR3YXJlLgogIC0gUmVtb3ZlZCBsYXN0IHJlZmVyZW5jZSB0byAiY29uc29sZSIgZW52aXJvbm1lbnQgdmFyaWFibGUuCgoqIFBhdGNoZXMgYnkgTGFycyBNdW5jaCwgMTIgSnVsIDIwMDQ6CiAgLSBtb3ZlIGF0NDUuYyB0byBib2FyZC9hdDkxcm05MjAwZGsvIHNpbmNlIHRoaXMgaXMgYXQ5MXJtOTIwMGRrCiAgICBib2FyZCBzcGVjaWZpYwogIC0gc3BsaXQgb3V0IHRoZSBMWFQ5NzFBIFBIWSBmcm9tIG5zXzk3NTBfZXRoLmgKICAtIHNwbGl0IHRoZSBkbTkxNjEgcGh5IHBhcnQgb3V0IG9mIGF0OTFybTkyMDBfZXRoZXIuYwoKKiBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxMiBKdWwgMjAwNDoKICBSZXBsYWNlZCBoYXJkY29kZWQgUEwwMTEgY2xvY2sgZnJlcXVlbmN5IHdpdGggY29uZmlnIHZhcmlhYmxlLgogIEZpeGVkIHdyb25nIENPTkZJR19DTURfREZMIGRvYy4KCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMDkgSnVuIDIwMDQ6CiAgbWFrZSBpdCBwb3NzaWJsZSB0byByZW1vdmUgY2hwYXJ0IHdoZW4gdGhlcmUgaXMgb25seSBvbmUgcGFydGl0aW9uCgoqIEFkZCBzdXBwb3J0IGZvciBjb25zb2xlIG92ZXIgVURQIChjb21wYXRpYmxlIHRvIEluZ28gTW9sbmFyJ3MKICBuZXRjb25zb2xlIHBhdGNoIHVuZGVyIExpbnV4KQoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE2IEp1bCAyMDA0OgogIC0gc3VwcG9ydCBsYXJnZXIgRERSIG1lbW9yaWVzIHVwIHRvIDJHIG9uIHRoZSBQQzg1NDAvODU2MEFEUyBhbmQKICAgIFNUWEdQMyBib2FyZHMKICAtIE1hZGUgTVBDODU0MC84NTYwQURTIGJlIDMzTWh6IFBDSSBieSBkZWZhdWx0LgogIC0gUmVtb3ZlZCBtb2xkeSBDT05GSUdfUkFNX0FTX0ZMQVNILCBDRkdfRkxBU0hfUE9SVF9XSURUSF8xNgogICAgYW5kIENPTkZJR19MMl9JTklUX1JBTSBvcHRpb25zLgogIC0gUmVmYWN0b3IgTG9jYWwgQnVzIGluaXRpYWxpemF0aW9uIG91dCBvZiBTRFJBTSBzZXR1cC4KICAtIFJlLWltcGxlbWVudCBuZXcgdmVyc2lvbiBvZiBMQkMxMS9ERFIxMSBlcnJhdGEgd29ya2Fyb3VuZHMuCiAgLSBNb3ZlZCBib2FyZCBzcGVjaWZpYyBQQ0kgaW5pdCBwYXJ0cyBvdXQgb2YgQ1BVIGRpcmVjdG9yeS4KICAtIEFkZGVkIFRMQiBlbnRyeSBmb3IgUENJLTEgSU8gTWVtb3J5CiAgLSBVcGRhdGVkIFJFQURNRS5tcGM4NXh4YWRzCgoqIFBhdGNoIGJ5IFNhc2NoYSBIYXVlciwgMjggSnVuOgogIC0gYWRkIGdlbmVyaWMgc3VwcG9ydCBmb3IgTW90b3JvbGEgaS5NWCBhcmNoaXRlY3R1cmUKICAtIGFkZCBzdXBwb3J0IGZvciBteDFhZHMsIG14MWZzMiBhbmQgc2NiOTMyOCBib2FyZHMKCiogUGF0Y2hlcyBieSBNYXJjIExlZW1hbiwgMjMgSnVsIDIwMDQ6CiAgLSBBZGQgZGVmaW5lIGZvciB0aGUgUENJL01lbW9yeSBCdWZmZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgogIC0gY29ycmVjdGVkIGNvbW1lbnRzIGluIGNwdS9tcGM4MjR4L2NwdV9pbml0LmMKCiogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNlcmlhbCBpbnRlcmZhY2VzCiAgKGZvciBleGFtcGxlIHRvIGFsbG93IG1vZGVtIGRpYWwtaW4gLyBkaWFsLW91dCkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBKdWwgMjAwNDoKICBjcHUvcHBjNHh4L3NkcmFtLmMgcmV3cml0dGVuIG5vdyB1c2luZyBnZXRfcmFtX3NpemUoKQoKKiBGaXggTlNDVSBjb25maWc7IGFkZCBldGhlcm5ldCB3YWtldXAgY29kZS4KCiogQWRkIGxpbmsgZm9yIHByZWxvYWRlciBmb3IgTW90b3JvbGEgQ29sZEZpcmUgdG8gUkVBRE1FLm02OGsKCiogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTIgSnVsIDIwMDQ6CiAgZml4IG91dHB1dCBmb3JtYXR0aW5nIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDIgSnVsIDIwMDQ6CiAgRml4IGxvd2Jvb3QgKGFnYWluKSBvbiBNUEM1eHh4CgoqIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDA3IEp1bCAyMDA0OgogIHJlbG9jYXRlIGV4Y2VwdGlvbiB2ZWN0b3JzIG9uIGFybTcyMHQgaWYgbmVlZGVkCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDYgSnVsIDIwMDQ6CiAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0CiAgLSBTZXQgY29ycmVjdCBPTUFQMTYxMCBiaV9hcmNoX251bWJlciBmb3IgYnVpbGQgdGFyZ2V0CgoqIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDA2IEp1bCAyMDA0OgogIGV2YjQ1MTA6IGFkZCBzdXBwb3J0IGZvciB0aW1lciBpbnRlcnJ1cHQ7IGNsZWFudXAKCiogUGF0Y2ggYnkgRGFuIFBvaXJvdCwgMDYgSnVsIDIwMDQ6CiAgRml4IHNiYzgyNjAgZW52aXJvbm1lbnQgdmFyaWFibGVzCgoqIENsZWFudXAgcmVkdW5kYW5kICJjb25zb2xlIiBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwNSBKdWwgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIFRvdGFsNTEwMCdzIGFuZCBUb3RhbDUyMDAncyBMQ0Qgc2NyZWVuCgoqIFBhdGNoZXMgYnkgRGFuIEVpc2VuaHV0LCAwMSBKdWwgMjAwNDoKICAtIFJFQURNRSBmaXhlcy4KICAtIE1vdmUgZG9jMjAwMC5oIGluY2x1ZGUgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5nIG9uIHNvbWUgYm9hcmRzCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAxIEp1bCAyMDA0OgogIEFkZGVkIHN1cHBvcnQgZm9yIFRvdGFsNTEwMCBhbmQgVG90YWw1MjAwIChSZXYuMSBhbmQgUmV2LjIpCiAgTUdUNTEwMCBhbmQgTVBDNTIwMCBiYXNlZCBGcmVlc2NhbGUgcGxhdGZvcm1zLgoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDEgSnVsIDIwMDQ6CiAgQWRkIGluaXRpYWxpemF0aW9uIGZvciBJbnRlZ3JhdG9yIGFuZCB2ZXJzYXRpbGUgYm9hcmQgZmlsZXMuCgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDAxIEp1biAyMDA0OgogIEZpeCBWRkQgRkIgYWxsb2NhdGlvbiwgYWRkIExDRCBGQiBhbGxvY2F0aW9uIG9uIEFSTQoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAzMCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgVFFNNTIwMCBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyOSBKdW4gMjAwNDoKICBBZGQgbG9vcHcgY29tbWFuZDogaW5maW5pdGUgd3JpdGUgbG9vcCBvbiBhZGRyZXNzIHJhbmdlCgoqIFBhdGNoZXMgYnkgWWFzdXNoaSBTaG9qaSwgMjkgSnVuIDIwMDQ6CiAgLSBhZGQgZW1wdHkgaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9wcm9jZXNzb3IuaAogIC0gYWRkIHRvIENSRURJVFMgYW5kIE1BSU5UQUlORVJTCiAgLSBhZGQgZ2QgaW5pdGlhbGl6YXRpb24KICAtIGFkZCBNaWNyb0JsYXplIGFuZCBTVVpBS1UgYm9hcmQgdG8gTUFLRUFMTCBzY3JpcHQKICAtIGFkZCByZXNldCBzdXBwb3J0IGZvciBTVVpBS1UKICAtIGFkZCBmbHVzaF9jYWNoZSgpIGZvciBNaWNyb0JsYXplCiAgLSBhZGQgQ0ZHX0ZMQVNIX1NJWkUgdG8gaW5jbHVkZS9jb25maWdzL3N1emFrdS5oIHNpbmNlIHdlIGhhdmUgZml4ZWQKICAgIHNpemUgZmxhc2ggbWVtb3J5IG9uIFNVWkFLVQoKKiBQYXRjaCBieSBQcmFrYXNoIEt1bWFyLCAyNyBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBYQTI1MCBiYXNlZCBJbnRyaW5zeWMgQ2VyZiBib2FyZC4KCiogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMjcgSnVuIDIwMDQ6CiAgZml4IGNvbW1lbnQgaW4gaW5jbHVkZS9jb21tb24uaAoKKiBSZW5hbWUgU0JDODU2MCBpbnRvIHNiYzg1NjAgZm9yIGNvbnNpc3RlbmN5CgoqIFBhdGNoIGJ5IERhbmllbCBQb2lyb3QsIDI0IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBXaW5kIFJpdmVyJ3Mgc2JjODI0MCBib2FyZAoKKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI2IEp1biAyMDA0OgogIC0gZHJpdmVycy9zZXJpYWxfeHVhcnRsaXRlLmM6IGZpeCAicmV0dXJuIDAiIGluIHZvaWQgZnVuY3Rpb24KICAtIGFkZCBtaWNyb2JsYXplIHN1cHBvcnQgdG8gbWtpbWFnZSB0b29sCgoqIFBhdGNoIGJ5IEZyZWQgS2xhdHQsIDI1IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBXaW5kUml2ZXIncyBzYmM4NTYwIGJvYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDI0IEp1biAyMDA0CiAgU21hbGwgQnVncyBmaXhlcyBmb3IgImF0OTFybTkyMDBkayIgYm9hcmQ6CiAgLSBUaW1pbmcgbW9kaWZpY2F0aW9ucyBmb3IgU1BJIERhdGFGbGFzaCBhY2Nlc3MKICAtIEZpeCBOQU5EIGZsYXNoIGRldGVjdGlvbiBidWcKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMjQgSnVuIDIwMDQ6CiAgQWRkIFN1cHBvcnQgZm9yIEZsYXNoIEFUNDlCVjY0MTYgZm9yIEFUOTFSTTkyMDBESyBib2FyZAoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE3IEp1bmUgMjAwNDoKICBDb21wbGV0aW9uIG9mIHRoZSA4NTQwQURTLzg1NjBBRFMgdXBkYXRlczoKICBGaXggc29tZSBQQ0kgYW5kIFJhcGlkIEkvTyBtZW1vcnkgbWFwcywKICBJbml0aWFsaXplIGJvdGggVFNFQyAxIGFuZCAyLAogIEluaXRpYWxpemUgU0RSQU0KICBVcGRhdGUgTUFJTlRBSU5FUiBmb3IgODV4eCBib2FyZHMgYW5kIFJFQURNRS5tcGM4NXh4YWRzCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE2IEp1biAyMDA0OgogIFJlbW92ZSBvYnNvbGV0ZSBBZGRlcklJIHBvcnQgd2hpY2ggd2FzIHN1cGVyc2VkZWQgYnkgdW5pZmllZAogIEFkZGVySUkvQWRkZXI4N3ggcG9ydAoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMTYgSnVuIDIwMDQ6CiAgRml4IGdjYy0zLjMuMyB3YXJuaW5ncyBmb3Igc21jOTExMTEuYwoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAyIEp1bCAyMDA0OgogIC0gRml4IGJ1ZyBpbiA0MDUgZXRoZXJuZXQgZHJpdmVyOyBhbGxvY2F0ZWQgZGF0YSBub3QgY2xlYXJlZCEKICAtIEZpeCBwcm9ibGVtIGluIDQwNSBpMmMgZHJpdmVyOyBkb24ndCB0cnkgdG8gcHJpbnQgd2l0aG91dCBjb25zb2xlIQoKKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDExIEp1biAyMDA0OgogIFJlbW92ZSBkZWJ1ZyBjb2RlIGZyb20gJ2JvYXJkL2xwZDdhNDB4L2ZsYXNoLmMnCgoqIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDExIEp1biAyMDA0OgogIFVwZGF0ZSBmb3IgUFBDaGFtZWxlb24gYm9hcmQ6CiAgLSBzdXBwb3J0IGZvciBTeXNDbGsgQCAyNU1IegogIC0gc3VwcG9ydCBmb3IgU2lsaWNvbiBNb3Rpb24gU003MTIgVkdBIGNvbnRyb2xsZXIKICAtIHNvbWUgY2xlYW4gdXBzCgoqIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMTAgSnVuIDIwMDQ6CiAgLSBmaXggcHJvYmxlbXMgd2l0aCBleGFtcGxlcy9zdHVicy5jIGZvciBHQ0MgPj0gMy40CiAgLSBmaXggcHJvYmxlbXMgd2l0aCBnZCBpbml0aWFsaXphdGlvbgoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAxNyBNYXkgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBTYW1zdW5nIFMzQzQ1MTBCIENQVSAoQVJNN3RkbWkgYmFzZWQgU29DKQogIC0gQWRkIHN1cHBvcnQgZm9yIEVTUEQtSW5jLiBFVkI0NTEwIEJvYXJkCgoqIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAxMSBNYXkgMjAwNDoKICBGaXggZm9yIE1QQzgyNDUgLSByZWFkaW5nIFBQQyBNZW1vcnkgZnJvbSBhbm90aGVyIGRldmljZSB3aXRoIHRoZQogIFBQQyBhcyBQQ0kgdGFyZ2V0IGRldmljZSBjb3JydXB0cyBkYXRhIGR1ZSB0byBpbnRlcmVuYWwgaGFyZHdhcmUKICBidWZmZXJpbmcuCgoqIEZpeCAiY2xzIiBjb21tYW5kIHdoZW4gdXNlZCB3aXRoIHNwbGFzaCBzY3JlZW4KCiogSW5jcmVhc2UgTkZTIGRvd25sb2FkIHRpbWVvdXQgKG5vdyAxIG1pbiAtIDEwIHNlYyBpcyB0byBzaG9ydCBmb3IgYQogIHNsb3cgZG93bmxvYWQgb2YgYSBiaWcgaW1hZ2UpCgoqIEFkZCAiY2xzIiBmdW5jdGlvbiB0byBNUEM4MjMgTENEIGRyaXZlciBzbyB3ZSBjYW4gcmVpbml0aWFsaXplIHRoZQogIGRpc3BsYXkgZXZlbiBhZnRlciBzaG93aW5nIGEgYml0bWFwCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDQgSnVuIDIwMDQ6CiAgLSBERFIgUmFtIHN1cHBvcnQgZm9yIFBNNTIwIChNUEM1MjAwKQogIC0gc3VwcG9ydCBmb3IgZGlmZmVyZW50IGZsYXNoIHR5cGVzIChQTTUyMCkKICAtIFVTQiAvIElERSAvIENGLUNhcmQgLyBEaXNrT25DaGlwIHN1cHBvcnQgZm9yIFBNNTIwCiAgLSA4IGJpdCBib290IHJvbSBzdXBwb3J0IGZvciBQTTUyMC9DRTUyMAogIC0gQWRkIGF1dG8gU0RSQU0gbW9kdWxlIGRldGVjdGlvbiBmb3IgTWljcm9TeXMgQ1BDNDUgYm9hcmQgKE1QQzgyNDUpCiAgLSBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBDUEM0NQogIC0gc3VwcG9ydCBvZiBuZXcgZmxhc2ggdHlwZSAoMjhGMTYwQzNUKSBmb3IgQ1BDNDUKCiogRml4IGZsYXNoIHBhcmFtZXRlcnMgcGFzc2VkIHRvIExpbnV4IGZvciBQUENoYW1lbGVvbiBib2FyZAoKKiBSZW1vdmUgZXRoX2luaXQoKSBmcm9tIGxpYl9hcm0vYm9hcmQuYzsgaXQncyBkb25lIGluIG5ldC5uZXQuYy4KCiogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAxMCBKdW4gMjAwNDoKICBmaXggc3VwcG9ydCBmb3IgTG9naWMgU0RLLUxIN0E0MDQgYm9hcmQgYW5kIGNsZWFuIHVwIHRoZQogIExIN0E0MDQgcmVnaXN0ZXIgbWFjcm9zLgoKKiBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2ssIDEwIEp1biAyMDA0OgogIE1vZGlmeSBjb2RlIHRvIHNlbGVjdCBjb3JyZWN0IHNlcmlhbCBjbG9jayBvbiBTYW5kcG9pbnQ4MjQ1CgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTAgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEludGVsIEszIHN0cmF0YSBmbGFzaC4KCiogUGF0Y2ggYnkgVGhvbWFzIEJyYW5kLCAxMCBKdW4gMjAwNDoKICBGaXggImxvYWRzIiBjb21tYW5kIG9uIERLMVMxMCBib2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgOE1CIGZsYXNoIFNJTU0gYW5kIEpGRlMyIGZpbGUgc3lzdGVtIG9uCiAgTW90b3JvbGEgRkFEUyBib2FyZCBhbmQgaXRzIGRlcml2YXRpdmVzIChNUEM4NnhBRFMsIE1QQzg4NUFEUykuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA5IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBBbmFsb2d1ZSZNaWNybyBBZGRlcjg3eCBhbmQgdGhlIG9sZGVyIEFkZGVySUkgYm9hcmQuCgoqIFBhdGNoIGJ5IE1pbmctTGVuIFd1LCAwOSBKdW4gMjAwNDoKICBBZGQgc3VwcHBvcnQgZm9yIE1DOTMyOCAoRGFyZ29uYmFsbCkgQ1BVIGFuZCBNb3Rvcm9sYSBNWDFBRFMgYm9hcmQKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDA5IEp1biAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQKICAtIFVwZGF0ZSBGTEFTSCBkcml2ZXIgZm9yIDQqQU0yOURMMzIzREI5MFZJCiAgLSBBZGQgb3B0aW9uIGNvbmZpZ3VyYXRpb24gb2YgQ0ZHX0VOVl9JU19JTl9OVlJBTSBvbiBSUFhsaXRlX0RXIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA4IEp1bmUgMjAwNDoKICAtIE1ha2UgTVBDNTIwMCBib2FyZHMgZXZhbHVhdGUgdGhlIFNWUiB0byBwcmludCBwcm9jZXNzb3IgbmFtZSBhbmQKICAgIHZlcnNpb24gaW4gY2hlY2tjcHUoKSAoY3B1L21wYzV4eHgvY3B1LmMpLgoKKiBQYXRjaCBieSBLYWktVXdlIEJsb2VtLCAwNiBNYXkgMjAwNDoKICBGaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gY3JhbWZzIGNvZGUKCiogUGF0Y2ggYnkgVG9tIEFybWlzdGVhZCwgMDQgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE1BWDY5MDAgUlRDCgoqIFBhdGNoZXMgYnkgTGFkaXNsYXYgTWljaGwsIDAzIEp1biAyMDA0OgogIC0gZml4IGNmaV9mbGFzaC5jIG9uIExFIHN5c3RlbXMKICAtIGxldCAnbWFrZSBtcnByb3BlcicgZGVsZXRlIHUtYm9vdC5pbWcgYXMgd2VsbAogIC0gdHVybiBwcmludGYgaW50byBkZWJ1ZyBpbiBjZmlfZmxhc2guYwoKKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMjggTWF5IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEV4eXMgWFNFbmdpbmUgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgTWF5IDIwMDQ6CiAgRml4IGEgTVBDNXh4eCBJMkMgdGltaW5nIGlzc3VlIGluIGkyY19wcm9iZSgpLgoKKiBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyNyBNYXkgMjAwNDoKICBGaXggYm9hcmRfaW5pdF9mKCkgZm9yIGRiYXUxeDAwIGJvYXJkLgoKKiBQYXRjaCBieSBJbXJlIERlYWssIDI2IE1heSAyMDA0OgogIE9uIE9NQVAxNjEwIHBsYXRmb3JtcyBjaGVjayBpZiBib290aW5nIGZyb20gUkFNKENTMCkgb3IgZmxhc2goQ1MzKS4KICBTZXQgZmxhc2ggYmFzZSBhY2NvcmRpbmdseSwgYW5kIGRlY2lkZSB3aGV0aGVyIHRvIGRvIG9yIHNraXAgYm9hcmQKICBzcGVjaWZpYyBzZXR1cCBzdGVwcy4KCiogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDI2IE1heSAyMDA0OgogIEFkZCBtaXNzaW5nIGRlZmluZSBpbiBpbmNsdWRlL2FzbS1tNjhrL2dsb2JhbF9kYXRhLmgKCiogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDI1IE1heSAyMDA0OgogIEFkZCBtaXNzaW5nIGZ1bmN0aW9ucyBnZXRfdGlja3MoKSBhbmQgZ2V0X3RiY2xrKCkgaW4gbGliX202OGsvdGltZS5jCgoqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMjQgTWF5IDIwMDQ6CiAgZml4IFNEUkFNIGluaXRpYWxpemF0aW9uIGZvciBMUEQ3QTQwMCBib2FyZC4KCiogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMjAgTWF5IDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IGluIE5BTkQgZmxhc2gKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjAgTWF5IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEludGVycGhhc2UgaVNQQU4gYm9hcmRzLgoKKiBQYXRjaGVzIGJ5IFBhdWwgUnVobGFuZCwgMTcgTWF5IDIwMDQ6CiAgLSBBZGQgSS9PIGZ1bmN0aW9ucyB0byB0aGUgc21jOTExMTEgZXRoZXJuZXQgZHJpdmVyIHRvIHN1cHBvcnQgdGhlCiAgICBMb2dpYyBMUEQ3QTQweCBib2FyZHMuCiAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIExvZ2ljIFpvb20gTEg3QTQweCBiYXNlZCBTREsgYm9hcmQocyksCiAgICBzcGVjaWZpY2FsbHkgdGhlIExQRDdBNDAwLgoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTUgTWF5IDIwMDQ6CiAgLSBjYWxsIE1BQyBhZGRyZXNzIHJlYWRpbmcgY29kZSBhbHNvIGZvciBTTVNDOTFDMTExOwogIC0gbWFrZSBTTVNDOTFDMTExIHRpbWVvdXQgY29uZmlndXJhYmxlLCByZW1vdmUgZHVwbGljYXRlIGNvZGUKICAtIGZpeCBnZXRfdGltZXIoKSBmb3IgUFhBCiAgLSB1cGRhdGUgZG9jL1JFQURNRS5KRkZTMgogIC0gdXNlICJib290ZmlsZSIgZW52IHZhcmlhYmxlIGFsc28gZm9yIGpmZnMyCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE0IE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgQ1NCNDcyIGJvYXJkICg4TUIgRmxhc2ggUmV2KQoKKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxNCBNYXkgMjAwNDoKICAtIGZsYXNoLmg6IG1vcmUgZmxhc2ggdHlwZXMgYWRkZWQKICAtIGltbWFwXzgyNjAuaDogc29tZSBiaXRzIGFkZGVkICh1c2VmdWwgZm9yIFJNSUkpCiAgLSBjbWRfY29uaW5mby5jOiB0eXBvIGNvcnJlY3RlZCwgcHJpbnRmIC0+IHB1dHMKICAtIHJlZHVjZWQgc2l6ZSBieSByZXBsYWNpbmcgc3BhY2VzIHdpdGggdGFiCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTMgTWF5IDIwMDQ6CiAgQWRkICdpbWdleHRyYWN0JyBjb21tYW5kOiBleHRyYWN0IG9uZSBwYXJ0IG9mIGEgbXVsdGkgZmlsZSBpbWFnZS4KCiogUGF0Y2hlcyBieSBKb24gTG9lbGlnZXIsIDExIE1heSAyMDA0OgogIER5bmFtaWNhbGx5IGhhbmRsZSBSRVYxIGFuZCBSRVYyIE1QQzg1eHggcGFydHMuCiAgICAoSm9uIExvZWxpZ2VyLCAxMC1NYXktMjAwNCkuCiAgTmV3IGNvbnNpc3RlbnQgbWVtb3J5IG1hcCBhbmQgTG9jYWwgQWNjZXNzIFdpbmRvdyBhY3Jvc3MgTVBDODV4eCBsaW5lLgogIE5ldyBDQ1NSQkFSIGF0IDB4RTAwMF8wMDAwIG5vdy4KICBBZGQgUkFQSUQgSS9PIG1lbW9yeSBtYXAuCiAgTmV3IG1lbW9yeSBtYXAgaW4gUkVBRE1FLk1QQzg1eHhhZHMKICAgIChLdW1hciBHYWxhLCAxMC1NYXktMjAwNCkKICBCZXR0ZXIgYm9hcmQgYW5kIENQVSBpZGVudGlmaWNhdGlvbiBvbiBNUEM4NXh4IGJvYXJkcyBhdCBib290LgogICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpCiAgU0RSQU0gY2xvY2sgY29udHJvbCBmaXhlcyBvbiBNUEM4NTQwQURTICYgTVBDODU2MCBib2FyZHMuCiAgU29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE1QQzg1NDBBRFMgJiBNUEM4NTYwQURTIGNsZWFuZWQgdXAuCiAgICAoSmltIFJvYmVydHNvbiwgMTAtTWF5LTIwMDQpCiAgUmV3cml0ZSBvZiB0aGUgTVBDODV4eCBUaHJlZSBTcGVlZCBFdGhlcm5ldCBDb250cm9sbGVyIChUU0VDKSBkcml2ZXIuCiAgU3VwcG9ydHMgbXVsdGlwbGUgUEhZcy4KICAgIChBbmR5IEZsZW1pbmcsIDEwLU1heS0yMDA0KQogIFNvbWUgUkVBRE1FLk1QQzg1eHhhZHMgdXBkYXRlcy4KICAgIChLdW1hciBHYWxhLCAxMC1NYXktMjAwNCkKICBDb3B5cmlnaHQgdXBkYXRlcyBmb3IgIkZyZWVzY2FsZSIKICAgIChBbmR5IEZsZW1pbmcsIDEwLU1heS0yMDA0KQoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxMSBNYXkgMjAwNDoKICBBZGQgZmxhc2ggc3VwcG9ydCBmb3IgU1QgTTI5VzA0MEIKICBSZWR1Y2UgSlNFIHNwZWNpZmljIGZsYXNoLmMgdG8gcmVtb3ZlIGRlYWQgY29kZS4KCiogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDA0IE1heSAyMDA0OgogIEZpeCBjbGVhcl9ic3MgY29kZSBmb3IgQVJNIHN5c3RlbXMgKGFsbCBleGNlcHQgczNjNDRiMCB3aGljaAogIGRvZXNuJ3QgY2xlYXIgQlNTIGF0IGFsbD8pCgoqIEZpeCAicGluZyIgcHJvYmxlbSBvbiBJTkMtSVAgYm9hcmQuIFN0cmFuZ2UgcHJvYmxlbToKICBTb21ldGltZXMgdGhlIHN0b3JlIHdvcmQgaW5zdHJ1Y3Rpb24gaGFuZ3Mgd2hpbGUgd3JpdGluZyB0byBvbmUgb2YKICB0aGUgU3dpdGNoIHJlZ2lzdGVycywgYnV0IG9ubHkgaWYgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgMTYtYnl0ZQogIGFsaWduZWQuIE1vdmluZyB0aGUgaW5zdHJ1Y3Rpb24gaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvbWVob3cKICBtYWtlcyB0aGUgcHJvYmxlbSBnbyBhd2F5LgoKKiBQYXRjaCBieSBSaXNoaSBCaGF0dGFjaGFyeWEsIDA4IE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBUSSBPTUFQNTkxMiBPU0sgQm9hcmQKCiogUGF0Y2ggYnkgU2FtIFNvbmcgTWF5LCAwNyBNYXkgMjAwNDoKICBGaXggdHlwbyBvZiBVUE0gdGFibGUgZm9yIHJtdSBib2FyZAoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDUgTWF5IDIwMDQ6CiAgLSBJbnRyYWNvbSBib2FyZCB1cGRhdGUuCiAgLSBBZGQgQ29kZWMgUE9TVC4KCiogQWRkIHN1cHBvcnQgZm9yIHRoZSBzZWNvbmQgRXRoZXJuZXQgaW50ZXJmYWNlIGZvciB0aGUgJ1BQQ2hhbWVsZW9uJwogIGJvYXJkLgoKKiBQYXRjaCBieSBEYXZlIFBldmVybGV5LCAzMCBBcHIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgT01BUDczMCBQZXJzZXVzMiBEZXZlbG9wbWVudCBib2FyZAoKKiBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDI5IEFwciAyMDA0OgogIEZpeCBmbGFzaCBjaGlwLXNlbGVjdCAoT1IwKSBvcHRpb24gcmVnaXN0ZXIgc2V0dGluZyBvbiBGQURTIGJvYXJkcy4KCiogUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAyOSBBcHIgMjAwNDoKICBSZXBvcnQgTUlJIG5ldHdvcmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5nIHByb3Blcmx5IHdoZW4KICBhdXRvLW5lZ290aWF0ZSBpcyBub3QgZW5hYmxlZC4KCiogUGF0Y2ggYnkgSmFycmV0dCBSZWRkLCAyOSBBcHIgMjAwNDoKICBGaXggaGFuZyBvbiByZXNldCBvbiBPY290ZWEgYm9hcmQgZHVlIHRvIGZsYXNoIGluIHdyb25nIG1vZGUuCgoqIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDI5IEFwciAyMDA0OgogIGFkZCBNQUMgYWRkcmVzcyBkZXRlY3Rpb24gdG8gc21jOTExMTEgZHJpdmVyCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjggQXByIDIwMDQ6CiAgZml4IHR5cG8gaW4gbGliX2FybS9ib2FyZC5jCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDIwIEFwciAyMDA0OgogIC0gUkVBRE1FIHVwZGF0ZTogYWRkIENPTkZJR19DU0IyNzIgYW5kIGNzYjI3Ml9jb25maWcKICAtIGFkZCBkZXNjcmlwdGlvbnMgZm9yIHNvbWUgTUlJL1BIWSBvcHRpb25zLCBDT05GSUdfSTJDRkFTVCwgYW5kCiAgICBpMmNmYXN0IGVudmlyb25tZW50IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE5IEFwciAyMDA0OgogIC0gUmVuYW1lIERVRVRfQURTIHRvIE1QQzg4NUFEUwogIC0gUmVuYW1lIENPTkZJR19EVUVUIHRvIENPTkZJR19NUEM4ODVfRkFNSUxZCiAgLSBSZW5hbWUgQ09ORklHXzg2Nl9ldF9hbCB0byBDT05GSUdfTVBDODY2X0ZBTUlMWQogIC0gQ2xlYW4gdXAgRkFEUyBmYW1pbHkgcG9ydCB0byB1c2UgdGhlIG5ldyBkZWZpbmVzCgoqIEZpeCBQQ0kgc3VwcG9ydCBvbiBDUEM0NSBib2FyZAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDI1IEFwciAyMDA0OgogIEFkZCBOaW9zIEdEQi9KVEFHIENvbnNvbGUgc3VwcG9ydDoKICAtIEFkZCBzdHVicyB0byBzdXBwb3J0IGdkYiB2aWEgSlRBRy4KICAtIEFkZCBzdXBwb3J0IGZvciBjb25zb2xlIG92ZXIgSlRBRy4KICAtIE1pbm9yIGNsZWFudXAuCgoqIEFkZCBzdXBwb3J0IGZvciBDQVRjZW50ZXIgYm9hcmQgKGJhc2VkIG9uIFBQQ2hhbWVsZW9uIE1FIG1vZHVsZSkKCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMTIgTWF5IDIwMDQ6CiAgVXNpbmcgZXh0ZXJuYWwgd2F0Y2hkb2cgZm9yIEtVUDQgYm9hcmRzIGluIG1wYzh4eC9jcHUuYzsKICBsb2FkX3Nlcm51bV9ldGhhZGRyKCkgZm9yIEtVUDQgYm9hcmRzIGluIGxpYl9wcGMvYm9hcmQuYzsKICB2YXJpb3VzIGNoYW5nZXMgdG8gS1VQNCBib2FyZCBzcGVjaWZpYyBmaWxlcwoKKiBGaXggbWlub3IgbmV0d29yayBwcm9ibGVtIG9uIE1QQzUyMDA6IG5lZWQgc29tZSBkZWxheSBiZXR3ZWVuCiAgcmVzZXR0aW5nIHRoZSBQSFkgYW5kIHNlbmRpbmcgdGhlIGZpcnN0IHBhY2tldC4gSW1wbGVtZW50ZWQgaW4gYQogICJuYXR1cmFsIiB3YXkgYnkgaW52b2tpbmcgdGhlIFBIWSByZXNldCBhbmQgaW5pdGlhbGl6YXRpb24gY29kZQogIG9ubHkgb25jZSBhZnRlciBwb3dlciBvbiB2cy4gZWFjaCB0aW1lIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4KCiogQWRkIHNvbWUgbGltaXRlZCBzdXBwb3J0IGZvciBsb3ctc3BlZWQgZGV2aWNlcyB0byBTTDgxMSBVU0IgY29udHJvbGxlcgogIChhdCBsZWFzdCAidXNiIHJlc2V0IiBub3cgcGFzc2VzIHN1Y2Nlc3NmdWxseSBhbmQgInVzYiBpbmZvIiBkaXNwbGF5cwogIGNvcnJlY3QgaW5mb3JtYXRpb24pCgoqIENoYW5nZSBpbml0IHNlcXVlbmNlIGZvciBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXM6IGluaXRpYWxpemUKICBvbi1jaGlwIGludGVyZmFjZXMgYmVmb3JlIGV4dGVybmFsIGNhcmRzLgoKKiBGaXggbWVtb3J5IGxlYWsgaW4gdGhlIE5BTkQtc3BlY2lmaWMgSkZGUzIgY29kZQoKKiBGaXggU0w4MTEgVVNCIGNvbnRyb2xsZXIgd2hlbiBhdHRhY2hlZCB0byBhIFVTQiBodWIKCiogRml4IGNvbmZpZyBvcHRpb24gc3BlbGxpbmcgaW4gUE01MjAgY29uZmlnIGZpbGUKCiogRml4IFBIWSBkaXNjb3ZlcnkgcHJvYmxlbSBpbiBjcHUvbXBjOHh4L2ZlYy5jIChpbnRyb2R1Y2VkIGJ5CiAgcGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQpCgoqIEZpeCBtaW5vciBOQU5EIEpGRlMyIHJlbGF0ZWQgaXNzdWUKCiogRml4ZXMgZm9yIFNMODExIFVTQiBjb250cm9sbGVyOgogIC0gaW1wbGVtZW50IHdvcmthcm91bmQgZm9yIGJyb2tlbiBtZW1vcnkgc3RpY2sKICAtIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcKCiogSW5jcmVhc2UgcGFja2V0IHNlbmQgdGltZW91dCB0byAxIG1zIGluIGNwdS9tcGM4eHgvc2NjLmMgdG8gYmV0dGVyCiAgY29wZSB3aXRoIGNvbmdlc3RlZCBuZXR3b3Jrcy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIzIEFwciAyMDA0OgogIEZpeCBWU0MvQ0lTIDgyMDEgcGh5IGRlc2NyYW1ibGVyIGludGVyb3BlcmFiaWxpdHkgdGltaW5nIGR1ZSB0bwogIGVycmF0YSBmcm9tIFZpdGVzc2UgU2VtaWNvbmR1Y3Rvci4KCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDIyIEFwciAyMDA0OgogIEZpeCBldGhlcm5ldCBjb25maWd1cmF0aW9uIGZvciAidmVyc2F0aWxlIiBib2FyZAoKKiBQYXRjaCBieSBLc2hpdGlqIEd1cHRhLCAyMSBBcHIgMjAwNDoKICBSZW1vdmUgYnVzeSBsb29wIGFuZCB1c2UgTVBVIHRpbWVyIGZyIHVzbGVlcCgpIG9uIE9NQVAxNTEwLzE2MTAgYm9hcmRzCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI0IEZlYiAyMDA0OgogIEZpeCBhIGJ1ZyBpbiBBVDkxUk05MjAwIGV0aGVybmV0IGRyaXZlcjoKICBUaGUgTUlJIGludGVyZmFjZSBpcyBub3cgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzc2luZyB0aGUgUEhZLgoKKiBQYXRjaCBieSBKb2huIEtlcmwsIDE5IEFwciAyMDA0OgogIFVzZSBVLWJvb3QncyBtaWlwaHkuaCBmb3IgUEhZIHJlZ2lzdGVyIG5hbWVzLCByYXRoZXIgdGhhbgogIGludHJvZHVjaW5nIGEgbmV3IGhlYWRlciBmaWxlLgoKKiBVcGRhdGUgcGNpX2lkcy5oIGZyb20gbGludXgtMi40LjI2CgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDE5IEFwciAyMDA0OgogIEZpeCBwcm9ibGVtIGNhdXNlIGJ5IFZMQU4gZnVuY3Rpb24gb24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmUKICB3aXRob3V0IFZMQU4gZW52aXJvbm1lbnQKCiogQ2xlYW4gdXAgdGhlIFRRTTh4eF9ZWU1IeiBjb25maWd1cmF0aW9uczsgYWxsb3cgdG8gdXNlIHRoZSBzYW1lCiAgYmluYXJ5IGltYWdlIGZvciBhbGwgY2xvY2sgZnJlcXVlbmNpZXMuIEltcGxlbWVudCBydW4tdGltZQogIG9wdGltaXphdGlvbiBvZiBmbGFzaCBhY2Nlc3MgdGltaW5nIGJhc2VkIG9uIHRoZSBhY3R1YWwgYnVzCiAgZnJlcXVlbmN5LgoKKiBNb2RpZnkgS1VQNFggYm9hcmQgY29uZmlndXJhdGlvbiB0byB1c2UgU0w4MTEgZHJpdmVyIGZvciBVU0IgbWVtb3J5CiAgc3RpY2tzIChpbmNsdWRpbmcgRkFUIC8gVkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQpCgoqIEFkZCBTTDgxMSBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciBmb3IgVVNCCgoqIEFkZCBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XIGRlc3JpcHRpb24gdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxOSBBcHIgMjAwNDoKICBBbGxvdyB0byB1c2Ugc2hlbGwgc3R5bGUgc3ludGF4IChpLiBlLiAke3Zhcn0gKSB3aXRoIHN0YW5kYXJkIHBhcnNlci4KICBNaW5vciBwYXRjaGVzIGZvciBJbnRyYWNvbSBib2FyZHMuCgoqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsLCAxOSBBcHIgMjAwNDoKICBjbGVhbnVwIHN1cHBvcnQgZm9yIENGL0lERSBvbiBQQ01DSUEgZm9yIFBYQTI1WAoKKiBUZW1wb3JhcmlseSBkaXNhYmxlZCBKb2huIEtlcmwncyBleHRlbmRlZCBNSUkgY29tbWFuZCBjb2RlIGJlY2F1c2UKICAibWlpdmFscy5oIiBpcyBtaXNzaW5nCgoqIFBhdGNoZXMgYnkgTWFyayBKb25hcywgMTMgQXByIDIwMDQ6CiAgLSBSZW1vdmUgQ1MwIGNoaXAgc2VsZWN0IHRpbWluZyBzZXR0aW5nIGZyb20gY3B1L21wYzV4eHgvc3RhcnQuUwogIC0gQWRkIHN5bmMgaW5zdHJ1Y3Rpb25zIHRvIEljZUN1YmUgU0RSQU0gaW5pdCBjb2RlCiAgLSBNb3ZlIFNEUkFNIGNoaXAgY29uc3RhbnRzIGludG8gc2VwZXJhdGUgaW5jbHVkZSBmaWxlcwogIC0gVW5pZnkgRERSIGFuZCBTRFIgaW5pdGlhbGl6YXRpb24gY29kZQogIC0gVW5pZnkgYWxsIEljZUN1YmUgKExpdGU1eHh4KSB0YXJnZXQgbmFtZXMKCiogUGF0Y2ggYnkgSm9obiBLZXJsLCAxNiBBcHIgMjAwNDoKICBFbmFibGUgcmFuZ2VzIGluIG1paSBjb21tYW5kLCBlLmcuIG1paSByZWFkIDAtMWYgMCBvcgogIG1paSByZWFkIDQtNyAxOC0xYS4gIEFsc28gYWRkIG1paSBkdW1wIHN1YmNvbW1hbmQgZm9yCiAgcHJldHR5LXByaW50aW5nIHN0YW5kYXJkIHJlZ3MgMC01LgoKKiBQYXRjaCBieSAgU3RlcGhlbiBXaWxsaWFtcywgMTYgQXByaWwgMjAwNDoKICBmaXggdHlwbyBpbiBKU0UuaDsgdXBkYXRlIE1BSU5UQUlORVJTCgoqIFBhdGNoIGJ5IE1hdHRoZXcgUy4gTWNDbGludG9jaywgMTQgQXByIDIwMDQ6CiAgZml4IGluaXRkcmFtIGZ1bmN0aW9uIGZvciB1dHg4MjQ1IGJvYXJkCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAxNCBBcHIgMjAwNDoKICB1c2UgQVRBR19JTklUUkQyIGluc3RlYWQgb2YgZGVwcmVjYXRlZCBBVEFHX0lOSVRSRCB0YWcKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDE4IEFwciAyMDA0OgogIHByb3ZpZGUgdGhlIElERSBSZXNldCBGdW5jdGlvbiBmb3IgRU1LIDUyMDAgYm9hcmRzCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDEyIEFwciAyMDA0OgogIGZpeCBwY2lfaG9zZV93cml0ZV9jb25maWdfe2J5dGUsd29yZH1fdmlhX2R3b3JkIHByb2JsZW1zCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMTIgQXByIDIwMDQ6CiAgVXBkYXRlIG1heCBSQU0gc2l6ZSBmb3IgZGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA4IEFwciAyMDA0OgogIEFkZCBUTEIgZW50cnkgZm9yIHNlY29uZCBESU1NIHNsb3Qgb24gb2NvdGVhCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IEFwciAyMDA0OgogIGFkZCBSVEw4MTY5IG5ldHdvcmsgZHJpdmVyCgoqIFBhdGNoIGJ5IERhbiBNYWxlaywgMDcgQXByIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgUlBDL1NUeCBHUDMsIE1vdG9yb2xhIDg1NjAgYm9hcmQKICAtIFVwZGF0ZSA4NXh4IFRTRUMgZHJpdmVyIHNvIGl0IHNlYXJjaGVzIE1JSSBmb3IgZmlyc3QgYXZhaWxhYmxlIFBIWQogICAgYW5kIHVzZXMgdGhhdCBvbmUuCiAgLSBBZGQgZnVuY3Rpb25zIHRvIHN1cHBvcnQgY29uc29sZSBNSUkgY29tbWFuZHMuCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDA3IEFwciAyMDA0OgogIE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgYmlfaWljX2Zhc3RbXQogIGZyb20gYm9hcmRfaW5pdF9mKCkgdG8gYm9hcmRfaW5pdF9yKCkKCiogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMDcgQXByIDIwMDQ6CiAgQ2xlYW51cCBtaWNyb2JsYXplIHBvcnQKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAwNyBBcHIgMjAwNDoKICBBZGQgYXV0byBTRFJBTSBtb2R1bGUgZGV0ZWN0aW9uIGZvciBEZWJyaXMgYm9hcmQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDA2IEFwciAyMDA0OgogIC0gRml4IHNvbWUgUENJIHByb2JsZW1zIG9uIHRoZSBNUEM4MjY2QURTIGJvYXJkCiAgLSBGaXggdGhlIGxvY2F0aW9uIG9mIHNvbWUgUENJIGVudHJpZXMgaW4gdGhlIGltbWFwIHN0cnVjdHVyZQoKKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBtaWNyb2JsYXplIHByb2Nlc3NvcnMKICAtIGFkZCBzdXBwb3J0IGZvciBBdG1hcmtUZWNobm8gInN1emFrdSIgYm9hcmQKCiogQ29uZmlndXJlIFBQQ2hhbWVsZW9uIGJvYXJkIHRvIHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gZmxhc2gKCiogQ29uZmlndXJlIFBQQ2hhbWVsZW9uIGJvYXJkIHRvIHVzZSBKRkZTMiBOQU5EIHN1cHBvcnQuCgoqIEFkZGVkIHN1cHBvcnQgZm9yIEpGRlMyIGZpbGVzeXN0ZW0gKHJlYWQtb25seSkgb24gdG9wIG9mIE5BTkQgZmxhc2gKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE2IEFwciAyMDA0OgogIExCQTQ4IGZpeGVzCgoqIFBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDE2IEFwciAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIGEgbmV3IHZlcnNpb24gb2YgYW4gSW50cmFjb20gYm9hcmQgYW5kIGZpeAogICAgdmFyaW91cyBvdGhlciB0aGluZ3Mgb24gb3RoZXJzLgogIC0gYWRkIHZlcmlmeSBzdXBwb3J0IHRvIHRoZSBjcmMzMiBjb21tYW5kIChkZWZpbmUKICAgIENPTkZJR19DUkMzMl9WRVJJRlkgdG8gZW5hYmxlIGl0KQogIC0gZml4IEZFQyBkcml2ZXIgZm9yIE1QQzh4eCBzeXN0ZW1zOgogICAgMS4gZml4IGNvbXBpbGF0aW9uIHByb2JsZW1zIGZvciBib2FyZHMgdGhhdCB1c2UgZHluYW1pYwogICAgICAgYWxsb2NhdGlvbiBvZiBEUFJBTQogICAgMi4gc2h1dCBkb3duIEZFQyBhZnRlciBuZXR3b3JrIHRyYW5zZmVycwogIC0gSFVTSCBwYXJzZXIgZml4ZXM6CiAgICAxLiBBIG5ldyB0ZXN0IGNvbW1hbmQgd2FzIGFkZGVkLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mCiAgICAgICB0aGUgb25lIGluIHRoZSBib3VybmUgc2hlbGwuCiAgICAyLiBBIG5ldyBleGl0IGNvbW1hbmQgd2FzIGFkZGVkIHdoaWNoIHRlcm1pbmF0ZXMgdGhlIGN1cnJlbnQKICAgICAgIGV4ZWN1dGluZyBzY3JpcHQuCiAgICAzLiBGaXhlZCBoYW5kaW5nIG9mICQ/IChleGl0IGNvZGUgb2YgbGFzdCBleGVjdXRlZCBjb21tYW5kKQogIC0gRml4IHNvbWUgY29tcGlsZSBwcm9ibGVtczsKICAgIGFkZCAib25jZSIgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG5ldHJldHJ5IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDIgQXByIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIEludGVsIEFzc2FiZXQgYm9hcmQKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMDEgQXByIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFBpY3R1cmUgRWxlbWVudHMgSlNFIGJvYXJkCgoqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsLCAwMSBBcHIgMjAwNDoKICBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIFBYQSBzeXN0ZW1zLgoKKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAzMCBNYXIgMjAwNDoKICAtIGFkZCBhdXRvLWNvbXBsZXRlIHN1cHBvcnQgdG8gdGhlIFUtQm9vdCBDTEkKICAtIGFkZCBzdXBwb3J0IGZvciBORVRUQSBhbmQgTkVUUEhPTkUgYm9hcmRzOyBmaXggTkVUVklBIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVwc29uIDE1Nnggc2VyaWVzIG9mIGdyYXBoaWNhbCBkaXNwbGF5cwogICAgKFRoZXNlIGRpc3BsYXlzIGFyZSBzZXJpYWwgYW5kIG5vdCBzdWl0YWJsZSBmb3IgdXNpbmcgYSBub3JtYWwKICAgIGZyYW1lYnVmZmVyIGNvbnNvbGUgb24gdGhlbSkKICAtIGFkZCBpbmZyYXN0cnVjdHVyZSBuZWVkZWQgaW4gb3JkZXIgdG8gUE9TVCBhbnkgRFNQcyBpbiBhIGJvYXJkCiAgLSBpbXByb3ZlIGFuZCBmaXggdmFyaW91cyB0aGluZ3MgaW4gdGhlIE1QQzh4eCBGRUMgZHJpdmVyOgogICAgMS4gVGhlIG5ldyA4N3ggYW5kIDg4eCBzZXJpZXMgb2YgcHJvY2Vzc29ycyBoYXZlIHR3byBGRUNzLAogICAgICAgYW5kIHRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIHRoZW0gYm90aC4KICAgIDIuIEFub3RoZXIgY2hhbmdlIGluIHRoZSA4N3gvODh4IHNlcmllcyBpcyBzdXBwb3J0IGZvcgogICAgICAgdGhlIFJNSUkgKFJlZHVjZWQgTUlJKSBpbnRlcmZhY2UuIEhvd2V2ZXIgbnVtZXJvdXMKICAgICAgIGNoYW5nZXMgYXJlIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgc2luY2UgdGhlIFBIWXMKICAgICAgIGFyZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbGluZXMuIFRoYXQgbWVhbnMgdGhhdAogICAgICAgeW91IGhhdmUgdG8gYWRkcmVzcyB0aGVtIGNvcnJlY3RseSBvdmVyIHRoZSBNSUkKICAgICAgIGludGVyZmFjZS4KICAgIDMuIFdlIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIE1JSS9STUlJIGludGVyZmFjZQogICAgICAgY29uZmlndXJhdGlvbiB0byB3aGF0IHRoZSBQSFkgcmVwb3J0cy4KICAtIEZpeCBwcm9ibGVtIHdoZW4gcmVhZGluZ3RoZSBNSUkgc3RhdHVzIHJlZ2lzdGVyLiBEdWUgdG8gdGhlCiAgICBpbnRlcm5hbCBkZXNpZ24gb2YgbWFueSBQSFlzIHlvdSBoYXZlIHRvIHJlYWQgdGhlIHJlZ2lzdGVyCiAgICB0d2ljZS4gVGhlIHByb2JsZW0gaXMgbW9yZSBhcHBhcmVudCBpbiAxME1iaXQgbW9kZS4KICAtIGFkZCBuZXcgbW9kZSAiLmpmZnMycyIgZm9yIHJlYWRpbmcgZnJvbSBhIE5BTkQgZGV2aWNlOiBpdCBqdXN0CiAgICBza2lwcyBvdmVyIGJhZCBibG9ja3MuCiAgLSBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciBWTEFOcyAoODAyLjFxKSwgYW5kIENEUCAoQ2lzY28KICAgIERpc2NvdmVyeSBQcm90b2NvbCkKICAtIHNvbWUgbWlub3IgcGF0Y2hlcyAvIGNsZWFudXAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjggTWFyIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTVBDODI3MiBmYW1pbHkgaW5jbHVkaW5nIE1QQzgyNDcvODI0OC84MjcxLzgyNzIKICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyQURTIGV2YWx1YXRpb24gYm9hcmQgKGFub3RoZXIgZmxhdm91ciBvZiBNUEM4MjYwQURTKQogIC0gQ2hhbmdlIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGZvciBNUEM4MjYwQURTIGZhbWlseQoKKiBhZGQgc3RhcnR1cCBjb2RlIHRvIGNsZWFyIHRoZSBCU1Mgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKCiogRml4IGlmIC8gZWxpZiBoYW5kbGluZyBidWcgaW4gSFVTSCBzaGVsbAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgTWFyayBKb25hczogUmVtb3ZlIGNvbmZpZy50bXAgZmlsZXMgb25seSB3aGVuCiAgdW5jb25maWd1cmluZyB0aGUgYm9hcmQKCiogQWRhcHQgUk1VIGJvYXJkIGZvciBiaWdnZXIgZmxhc2ggbWVtb3J5CgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDEzIE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBLVVA0WCBCb2FyZAoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjEgTWFyIDIwMDQKICBBZGQgUmVpc2VyZnMgc3VwcG9ydAoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMCBNYXIgMjAwNAogIC0gQWRkIGF1dG8tcmVsZWFzZSBmb3IgU01TQyBMQU45MWMxMTEgZHJpdmVyCiAgLSBBZGQgc2F2ZS9yZXN0b3JlIG9mIFBUUiBhbmQgUE5SIHJlZ3MgYXMgc3VnZ2VzdGVkIGluIGRhdGFzaGVldAoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxOSBNYXJjaCAyMDA0CiAgSW5jcmVhc2Ugc3BlZWQgb2Ygc2VjdG9yIHJlYWRzIGZyb20gU3lzdGVtQUNFLAogIHNob3J0ZW4gcG9sbCB0aW1lb3V0IGFuZCByZW1vdmUgYSB1c2VsZXNzIHJlc2V0CgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE5IE1hciAyMDA0OgogIE1ha2UgR2lnRSBQSFkgMTAwME1icHMgU3BlZWQvRHVwbGV4IGRldGVjdGlvbiBjb25kaXRpb25hbAogIChDT05GSUdfUEhZX0dJR0UpCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTggTWFyIDIwMDQ6CiAgcHJldmVudCBtYWNoaW5lIGNoZWNrcyBkdXJpbmcgYSBQQ0kgc2NhbgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKICBGaXggc3RyaW5nIGNsZWFuaW5nIGluIElERSBpZGVudGlmaWNhdGlvbgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKICAtIFVuaWZ5IHZpZGVvIG1vZGUgaGFuZGxpbmcgZm9yIENoaXBzICYgVGVjaG5vbG9naWVzIDY5MDAwIFZpZGVvCiAgICBjaGlwIGFuZCBTaWxpY29uIE1vdGlvbiBTTUkgNzEyLzcxMC84MTAgVmlkZW8gY2hpcAogIC0gQWRkIHNlbGVjdGlvbiBvZiB0aGUgdmlkZW8gb3V0cHV0IChDUlQgb3IgTENEKSB2aWEgJ3ZpZGVvb3V0JwogICAgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHRoZSBTaWxpY29uIE1vdGlvbgogIC0gUkVBRE1FIHVwZGF0ZQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKICBpbmNsdWRlL2NvbW1vbi5oIHR5cG8gZml4CgoqIFBhdGNoZXMgYnkgVG9sdW5heSBPcmt1biwgMTcgTWFyIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgYmQtPmJpX2lpY19mYXN0W10gaW5pdGlhbGl6YXRpb24gdmlhIGVudmlyb25tZW50CiAgICB2YXJpYWJsZSAiaTJjZmFzdCIgKENPTkZJR19JMkNGQVNUKQogIC0gQWRkICJpMmNmYXN0IiB1LWJvb3QgZW52aXJvbm1lbnQgdmFyaWFibGUgc3VwcG9ydCBmb3IgY3NiMjcyCgoqIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDE3IE1hciAyMDA0OgogIElnbm9yZSAnXDAnIGNoYXJhY3RlcnMgaW4gY29uc29sZSBpbnB1dCBmb3IgdXNlIHdpdGggdGVsbmV0IGFuZAogIHRlbGNvIHBhZHMuCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTcgTWFyIDIwMDQ6CiAgdHlwbyBmaXggZm9yIHN0cnN3YWIgcHJvdG90eXBlICNpZmRlZgoKKiBQYXRjaGVzIGJ5IFRob21hcyBWaWVod2VnZXIsIDE2IE1hciAyMDA0OgogIC0gc2hvdyBQQ0kgY2xvY2sgZnJlcXVlbmN5IG9uIE1QQzgyNjAgc3lzdGVtcwogIC0gYWRkIEZDQ19QU01SX1JNSUkgZmxhZyBmb3IgSGlQNyBwcm9jZXNzb3JzCiAgLSBpbiBkb19qZmZzMl9mc2xvYWQoKSwgdGFrZSBsb2FkIGFkZHJlc3MgZnJvbSBsb2FkX2FkZHIgaWYgbm90IHNldAogICAgZXhwbGljaXQsIHVwZGF0ZSBsb2FkX2FkZHIgb3RoZXJ3aXNlCiAgLSByZXBsYWNlZCBwcmludGYgYnkgcHV0Yy9wdXRzIHdoZW4gbm8gZm9ybWF0dGluZyBpcyBuZWVkZWQKICAgIChzbWFsbGVyIGNvZGUgc2l6ZSwgZmFzdGVyIGV4ZWN1dGlvbikKCiogUGF0Y2ggYnkgUGhpbGxpcHBlIFJvYmluLCAxNiBNYXIgMjAwNDoKICBhdm9pZCBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlciBpbiBsaWJfYXJtL2FybWxpbnV4LmMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTUgTWFyIDIwMDQ6CiAgRml4IENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyBkb2N1bWVudGF0aW9uCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE1IE1hciAyMDA0OgogIEluaXRpYWxpemUgYmlfb3BiZnJlcSB0byByZWFsIE9QQiBmcmVxdWVuY3kgdmlhIGdldF9PUEJfZnJlcSgpCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDE1IE1hciAyMDA0OgogIFVwZGF0ZSBDUkVESVRTICYgTUFJTlRBSU5FUlMgZmlsZXMgZm9yIFBQQzQ0MEdYICYgT2NvdGVhIHBvcnQKCiogQWRkIHN0YXJ0LXVwIGRlbGF5IHRvIG1ha2Ugc3VyZSBwb3dlciBoYXMgc3RhYmlsaXplZCBiZWZvcmUKICBhdHRlbXB0aW5nIHRvIHN3aXRjaCBvbiBVU0Igb24gU1gxIGJvYXJkLgoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDE4IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFhNMjUwIGJvYXJkIChQWEEyNTUpCiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04MjggYm9hcmQgKE1QQzgyODApCiAgLSBBZGQgc3VwcG9ydCBmb3IgMzIgTUIgRmxhc2ggb24gUE04MjUvODI2CiAgLSBuZXcgU0RSQU0gcmVmcmVzaCByYXRlIGZvciBQTTgyNS9QTTgyNgogIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE01MjAgKE1QQzUyMDApCiAgLSByZXBsYWNlZCBRdWVyeSBieSBJZGVudGlmeSBjb21tYW5kIGluIENQVTg2L2ZsYXNoLmMKICAgIHRvIHN1cHBvcnQgMjhGMTYwRjNCCgoqIEZpeCB3cmFwIGFyb3VuZCBwcm9ibGVtIHdpdGggdWRlbGF5KCkgb24gQVJNOTIwVAoKKiBBZGQgc3VwcG9ydCBmb3IgTWFjcm9uaXggZmxhc2ggb24gVFJBQiBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxNSBNYXIgMjAwNDoKICBGaXggYnVmZmVyIG92ZXJmbG93IGluIElERSBpZGVudGlmaWNhdGlvbgoKKiBGaXggcG93ZXItb2ZmIG9mIExDRCBmb3Igb3V0LW9mLWJhbmQgdGVtcGVyYXR1cmVzIG9uIExXTU9OIGJvYXJkCgoqIFJlbW92ZSByZWR1bmRhbmQgI2RlZmluZSBpbiBJY2VDdWJlLmgKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjcgRmViIDIwMDQ6CiAgLSBBZGRpbmcgZ2V0X3RpY2tzKCkgYW5kIGdldF90YmNsaygpIGZvciBBVDkxUk05MjAwCiAgLSBNYW55IHdoaXRlIHNwYWNlIGZpeGVzIGluIGNwdS9hdDkxcm05MjAwL2ludGVycnVwdHMuYwoKKiBQYXRjaGVzIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgogIHNvbWUgY2xlYW51cCBpbiBBVDkxUk05MjAwIHJlbGF0ZWQgY29kZQoKKiBQYXRjaGVzIGJ5IFRyYXZpcyBTYXd5ZXIsIDEyIE1hciAyMDA0OgogIC0gRml4IEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCBmb3IgNDQwR1gKICAtIEFkZCBHaWdhYml0IEV0aGVybmV0IFN1cHBvcnQgdG8gTUlJIFBIWSB1dGlsaXRpZXMKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxMiBNYXIgMjAwNDoKICBGaXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIEJldHRlciBzdXBwb3J0IGZvciB4OC94MTYgaW1wbGVtZW50YXRpb25zCiAgLSBBZGRlZCBmYWlsdXJlIGZvciBBTUQgY2hpcHMgYXR0ZW1wdGluZyB0byB1c2UgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKICAtIEFkZGVkIGRlZmluZXMgZm9yIEFNRCBjb21tYW5kIGFuZCBhZGRyZXNzIGNvbnN0YW50cwoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEyIE1hciAyMDA0OgogIEZpeCBnZXRfZGVudGZyb21kaXIoKSB0byBjb3JyZWN0bHkgaGFuZGxlIGRlbGV0ZWQgZGVudHJpZXMKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMSBNYXIgMjAwNDoKICBSZW1vdmUgaGFyZCBjb2RlZCBuZXR3b3JrIHNldHRpbmdzIGluIFRJIE9NQVAxNjEwIEgyCiAgZGVmYXVsdCBib2FyZCBjb25maWcKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMSBNYXIgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgQURTIEdyYXBoaWNzQ2xpZW50KyBib2FyZC4KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTEgTWFyIDIwMDQ6CiAgLSBhZGQgYml0bWFwIGNvbW1hbmQgYW5kIHNwbGFzaCBzY3JlZW4gc3VwcG9ydCBpbiBjZmIgY29uc29sZQogIC0gYWRkIFtvcHRpb25hbF0gb3JpZ2luIGluIHRoZSBiaXRtYXAgZGlzcGxheSBjb21tYW5kCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDExIE1hciAyMDA0OgogIEZpeCBvY290ZWEgYm9hcmQgZWFybHkgaW5pdCBpbnRlcnJ1cHQgc2V0dXAuCgoqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDExIE1hciAyMDA0OgogIFJlbW92ZSByZWR1bmRhbmQgY29kZTsgYWRkICBQQ0ktc3BlY2lmaWMgYml0cyB0byBpbmNsdWRlL21wYzgyNjAuaAoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDA5IE1hciAyMDA0CiAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFNTViBBRE5QL0VTQzEgKE5pb3MgU29mdGNvcmUpCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgOSBNYXIgMjAwNDoKICBmaXggcmVjZW50IGJ1aWxkIGZhaWx1cmUgZm9yIFNBMTEwMCB0YXJnZXQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgTWFyIDIwMDQ6CiAgU3VwcG9ydCBuYXRpdmUgaW50ZXJydXB0IG1vZGUgZm9yIHRoZSBJQk00NDBHWC4KICBQcmV2aW91c2x5IGl0IHdhcyBydW5uaW5nIGluIDQ0MEdQIGNvbXBhdGliaWxpdHkgbW9kZS4KCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDA5IE1hciAyMDA0OgogIEFkZGVkIEFSTSBJbnRlZ3JhdG9yIEFQLCBDUCBhbmQgVmVyc2F0aWxlIFBCOTI2RUotUyBSZWZlcmVuY2UKICBQbGF0Zm9ybSBzdXBwb3J0LgoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBNYXIgMjAwNDoKICBEb24ndCBvdmVyd3JpdGUgc2VydmVyIElQIGFkZHJlc3Mgb3IgYm9vdCBmaWxlIG5hbWUKICB3aGVuIHRoZSBib290IHNlcnZlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDUgTWFyIDIwMDQ6CiAgUmVtb3ZlZCBjb21waWxlIHRpbWUgcmVzdHJpY3Rpb24gb24gQ0ZHX0kyQ19TUEVFRCBmb3IgRFMxMzM4IFJUQwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgogIEZpeCBlYXJseSBib2FyZCBpbml0aWFsaXphdGlvbiBmb3IgQ29nZW50IENTQjI3MiBib2FyZAoKKiBQYXRjaCBieSBFZCBPa2Vyc29uLCAzIE1hciAyMDA0OgogIGZpeCBDRkkgZmxhc2ggd3JpdGVzIGZvciBsaXR0bGUgZW5kaWFuIHN5c3RlbXMKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDAxIE1hciAyMDA0OgogIGdlbmVyYWxpemUgVVNCIGFuZCBJREUgc3VwcG9ydCBmb3IgTVBDNTIwMCB3aXRoIGFjY29yZGluZwogIGNoYW5nZXMgdG8gSWNlQ3ViZS5oIGFuZCBUT1A1MjAwLmgKICBhZGQgQW0yOUxWMjU2IDI1NiBNQml0IEZMQVNIIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmRzCiAgYWRkIGluZm8gYWJvdXQgVVNCIGFuZCBJREUgdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDQgTWFyIDIwMDQ6CiAgRml4IHByb2JsZW1zIHdpdGggR0NDIDMuMy54IHdoaWNoIGNoYW5nZWQgaGFuZGxpbmcgb2YgZ2xvYmFsCiAgdmFyaWFibGVzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybyAobm93IGluIC5ic3MgaW5zdGVhZCBvZgogIC5kYXRhIGFzIGJlZm9yZSkuCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMDIgTWFyIDIwMDQ6CiAgYWRkIHN0cnN3YWIoKSB0byBmaXggSURFIExCQSBjYXBhY2l0eSwgZmlybXdhcmUgYW5kIG1vZGVsIG51bWJlcnMKICBvbiBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDAyIE1hciAyMDA0OgogIC0gUmVtb3ZlIGdldF90aWNrcygpIGZyb20gTkZTIGNvZGUKICAtIEFkZCB2ZXJpZmljYXRpb24gb2YgUlBDIHRyYW5zYWN0aW9uIElECgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDAyIE1hciAyMDA0OgogIGNsZWFudXAgZm9yIElERSBhbmQgVVNCIGRyaXZlcnMgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDEgTWFyIDIwMDQ6CiAgT2NvdGVhOgogIC0gQWRkIElCTSBQUEM0NDBHWCBSZWYgUGxhdGZvcm0gc3VwcG9ydCAoT2NvdGVhKQogICAgT3JpZ2luYWwgY29kZSBieSBQYXVsIFJleW5vbGRzIDxQYXVsUmV5bm9sZHNAbGhzb2x1dGlvbnMuY29tPgogICAgQWRhcHRlZCB0byBVLUJvb3QgYW5kIDQ0MEdYIHBvcnQKICA0NDBneF9lbmV0LmM6CiAgLSBBZGQgZ3JhY2lvdXMgaGFuZGxpbmcgb2YgYWxsIEV0aGVybmV0IFBpbiBTZWxlY3Rpb25zIGZvciA0NDBHWAogIC0gQWRkIFJHTUlJIHNlbGVjdGlvbiBmb3IgQ2ljYWRhIENJUzgyMDEgR2lnYWJpdCBQSFkKICBwcGM0NDAuaDoKICAtIEFkZCBuZWVkZWQgYml0IGRlZmluaXRpb25zCiAgLSBGaXggZm9ybWF0dGluZwoKKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxIE1hciAyMDA0OgogIEFkZCBQUEM0NDBHWCBwcmJkdjAgZGl2aWRlciB0byBmaXggbWVtb3J5IGNsb2NrIGNhbGN1bGF0aW9uLgoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI3IEZlYiAyMDA0CiAgLSBhdm9pZCBwcm9ibGVtcyBmb3IgdGFyZ2V0cyB3aXRob3V0IE5GUyBkb3dubG9hZCBzdXBwb3J0CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyNyBGZWIgMjAwNDoKICAtIEFkZGVkIExCQTQ4IHN1cHBvcnQgKENPTkZJR19MQkE0OCAmIENGR182NEJJVF9MQkEpCiAgLSBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBwcmludGluZyBpbiB2c3ByaW50ZiAoQ0ZHXzY0QklUX1ZTUFJJTlRGKQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgc3RydG91bCAoQ0ZHXzY0QklUX1NUUlRPVUwpCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI3IEZlYiAyMDA0OgogIEZpeCByYXJwYm9vdDogYWRkIGF1dG9sb2FkIGJ5IE5GUwoKKiBQYXRjaCBieSBEYW4gRWlzZW5odXQsIDI2IEZlYiAyMDA0OgogIGZpeCBmbGFzaF93cml0ZSByZXR1cm4gdmFsdWUgaW4gc2F2ZWVudgoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDExIERlYyAyMDAzCiAgZXhwYW5kIGNvbmZpZy5tayB0byBhdm9pZCB0cmlncmFwaCB3YXJuaW5ncyBvbiBOSU9TCgoqIFJlbmFtZSAiQk1TMjAwMyIgYm9hcmQgaW50byAiSE1JMTAiCgoqIFNYMSBwYXRjaGVzOiB1c2UgInNlcmlhbCMiIGZvciBVU0Igc2VyaWFsICM7IHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQKICBzdG9yYWdlOyBhdXRvLXNldCBjb25zb2xlIG9uIFVTQiBwb3J0ICh1c2luZyBwcmVib290IGNvbW1hbmQpCgoqIEFkZCBzdXBwb3J0IGZvciBTWDEgbW9iaWxlIHBob25lOyBhZGQgc3VwcG9ydCBmb3IgVVNCLWJhc2VkIGNvbnNvbGUKICAoZW5hYmxlIHdpdGggInNldGVudiBzdGRvdXQgdXNidHR5OyBzZXRlbnYgc3RkaW4gdXNidHR5IikKCiogRml4IExPV0JPT1QgY29uZmlndXJhdGlvbiBmb3IgTVBDNTIwMCB3aXRoIEREUiBtZW1vcnkKCiogRml4IFNEUkFNIHRpbWluZ3MgZm9yIExJVEU1MjAwIC8gSWNlQ3ViZSBib2FyZAoKKiBIYW5kbGUgQXV0aS1NRElYIC8gY29ubmVjdGlvbiBzdGF0dXMgZm9yIElOQ0EtSVAKCiogRml4IFVTQiBwcm9ibGVtcyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVhZCAwIGJ5dGVzCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDI2IEZlYiAyMDA0OgogIEZpeCBicm9rZW4gY29tcGlsZSBmb3IgWFBFRElURTFLIHRhcmdldC4KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyNiBGZWIgMjAwNDoKICBCdWcgZml4IGZvciBORlMgY29kZSBvbiBOSU9TIHRhcmdldHMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMjYgRmViIDIwMDQ6CiAgQnJlYWsgdXAgU3lzdGVtQUNFIHJlYWRzIG9mIGxhcmdlIGJsb2NrIGNvdW50cwoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNiBGZWIgMjAwNAogIGFkZCBJREUgc3VwcG9ydCBmb3IgTVBDNTIwMAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNiBGZWIgMjAwNDoKICBhZGQgYXV0b2xvYWQgdmlhIE5GUwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zCiAgVXNlIG9mIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyBpbiBib2FyZC5jIGNvbnNpc3RlbnQgd2l0aCB1c2VzCiAgZWxzZXdoZXJlIGluIHRoZSBzb3VyY2UuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IEZlYiAyMDA0OgogIC0gVGltZW91dHMgaW4gRlBHQSBjb2RlIHNob3VsZCBiZSBiYXNlZCBvbiBDRkdfSFoKICAtIE1pbm9yIGNsZWFudXAgaW4gY29kZSBmb3IgQWx0ZXJhIEZQR0EgQUNFWDFLCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IEZlYiAyMDA0OgogIENoYW5nZWQgIkRpcmVjdG9yeSBIaWVyYXJjaHkiIHNlY3Rpb24gaW4gUkVBRE1FCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI1IEZlYiAyMDA0OgogIFJlZHVjZSBjb3B5IGNvdW50IGluIG5mc19yZWFkX3JlcGx5KCkgb2YgTkZTIGNvZGUKCiogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDI0IEZlYiAyMDA0OgogIE5TOTc1MCBEZXZCb2FyZCBhZGRlZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNCBGZWIgMjAwNAogIGFkZCBVU0Igc3VwcG9ydCBmb3IgTVBDNTIwMAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKICAtIGZpeCBNSUkgY29tbWFuZHMgdG8gdXNlIHZhbHVlcyBmcm9tIGxhc3QgY29tbWFuZAoKKiBQYXRjaCBieSBUb3JzdGVuIERlbWtlLCAyNCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIGVYYWxpb24gcGxhdGZvcm0gKFNQU1ctODI0MCwgRi0zMCwgRi0zMDApCgoqIFBhdGNoIGJ5IFJhaHVsIFNoYW5iaGFnLCAxOSBGZWIgMjAwNDoKICBGaXhlcyBmb3IgZm9yIE9NQVAxNjEwIGJvYXJkOgogIC0gc2hpZnQgc29tZSBJUlEgc3BlY2lmaWMgY29kZSB0byBwbGF0Zm9ybS5TIGZpbGUKICAtIHJlbW92ZSBkdXBsaWNhdGV3YXRjaGRvZyByZXNldCBjb2RlIGZyb20gc3RhcnQuUwoKKiBNYWtlIEF1dG8tTURJWCBTdXBwb3J0IGNvbmZpZ3VyYWJsZSBvbiBJTkNBLUlQIGJvYXJkCgoqIEZpeCBsaWNlbnNlIGZvciBta2ltYWdlIHRvb2wKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjQgRmViIDIwMDQ6CiAgVXBkYXRlIE5ldEJvb3RGaWxlWGZlclNpemUgaW4gTkZTIGNvZGUKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNCBGZWIgMjAwNDoKICBmaXggcGFja2V0IGxlbmd0aCBpbiBORlMgY29kZQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXksIDIyIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBORlMgZm9yIGZpbGUgZG93bmxvYWQKCiogUGF0Y2ggYnkgQW5kcmVhIFNjaWFuLCAxNyBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgUzNDNDRCMCBwcm9jZXNzb3IgYW5kIERBVkUgQjIgYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjAgRmViIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTUlJIGNvbW1hbmRzIG9uIEFUOTFSTTkyMDAgYm9hcmRzCiAgLSBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBjb2RlCgoqIFBhdGNoIGJ5IFBldGVyIFJ5c2VyLCAyMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBNTDMwMCBwbGF0Zm9ybQoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDE3IEZlYiAyMDA0OgogIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGZvciBOSU9TCgoqIFBhdGNoIGJ5IEpvc2ggRnJ5bWFuLCAxNiBGZWIgMjAwNDoKICBGaXggYnl0ZS1zd2FwcGluZyBmb3IgY2ZpX2ZsYXNoLmMgZm9yIGRpZmZlcmVudCBidXMgd2lkdGhzCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxNCBKZWIgMjAwNDoKICBSZW1vdmUgZHVwbGljYXRlICJGUEdBIFN1cHBvcnQiIG5vdGVzIGZyb20gdGhlIFJFQURNRSBmaWxlCgoqIFBhdGNoZXMgYnkgUmVpbmhhcmQgTWV5ZXIsIDE0IEZlYiAyMDA0OgogIC0gdXBkYXRlIGJvYXJkL2VtayB0cmVlOyB1c2UgY29tbW9uIGZsYXNoIGRyaXZlcgogIC0gQ29ycmVjdGVkIHRlc3RlZCBiaXRzIGluIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uIGluIGNwdS9tcGM1eHh4L3RyYXBzLmMKICAgIFthZGFwdGVkIGZvciBvdGhlciBQUEMgQ1BVcyAtLSB3ZF0KICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBNNDhUMDggb24gdGhlIEVWQUw1MjAwIGJvYXJkIGluIHJ0Yy9tazQ4dDU5LmMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEzIEZlYiAyMDA0OgogIENhbGwgc2hvd19ib290X3Byb2dyZXNzKCkgd2hlbmV2ZXIgUE9TVCAiRkFJTEVEIiBpcyBwcmludGVkLgoKKiBQYXRjaCBieSBOaXNoYW50IEthbWF0LCAxMyBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDE2MTAgSDIgQm9hcmQKICBGaXhlcyBmb3IgY3B1L2FybTkyNmVqcy9pbnRlcnJ1cHQuYwoJKGJhc2VkIG9uIFJpY2hhcmQgV29vZHJ1ZmYncyBwYXRjaCBmb3IgYXJtOTI1LCAxNiBPY3QgMDMpCiAgRml4IGZvciBhIHRpbWVyIGJ1ZyBpbiBPTUFQMTYxMCBJbm5vdmF0b3IKICBBZGQgc3VwcG9ydCBmb3IgQ1MwIChST00pL0NTMyAoRmxhc2gpIGJvb3QgaW4gT01BUDE2MTAgSW5ub3ZhdG9yIGFuZCBIMgoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMTIgRmViIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTklPUyB0aW1lciB3aXRoIHZhcmlhYmxlIHBlcmlvZCBwcmVsb2FkIGNvdW50ZXIgdmFsdWUKICAtIHByZXBhcmUgUE9TVCBmcmFtZXdvcmsgc3VwcG9ydCBmb3IgTklPUyB0YXJnZXRzCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBGZWIgMjAwNDoKICBhZGQgUE9TVCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1IGJvYXJkCgoqIFBhdGNoIGJ5IExhdXJlbnQgTW9oaW4sIDEwIEZlYiAyMDA0OgogIEZpeCBidWZmZXIgb3ZlcmZsb3cgaW4gY29tbW9uL3VzYi5jCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDEwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgQ1NCMjcyIGJvYXJkCgoqIFBhdGNoIGJ5IFRob21hcyBFbHN0ZSwgMTAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE5FVCs1MCBDUFUgYW5kIE1vZE5FVDUwIGJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAxMCBGZWIgMjAwNDoKICBGaXggdHlwb3MgaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMCBGZWIgMjAwNAogIEZpeGVkIGxvbmcgZGlyIGVudHJ5IHNsb3QgaWQgY2FsY3VsYXRpb24gaW4gZ2V0X3ZmYXRuYW1lCgoqIFBhdGNoIGJ5IFJvYmluIEdpbGtzLCAxMCBGZWIgMjAwNDoKICBhZGQgIml0ZXN0IiBjb21tYW5kIChvcGVyYXRvcnM6IC1lcSwgLW5lLCAtbHQsIC1ndCwgLWxlLCAtZ2UsID09LAogICE9LCA8PiwgPCwgPiwgPD0sID49KQoKKiBGaXggcHJvYmxlbSB3aXRoIHNpZGUgZWZmZWN0cyBpbiBtYWNyb3MgaW4gaW5jbHVkZS91c2IuaAoKKiBQYXRjaCBieSBEYXZpZCBCZW5zb24sIDEzIE5vdiAyMDAzOgogIGJ1ZyA4NDEzNTggLSBmaXggVEZUUCBkb3dubG9hZCBzaXplIGxpbWl0CgoqIEZpeGluZyBidWcgODUwNzY4OgogIGltcHJvcGVyIGZsdXNoX2NhY2hlKCkgaW4gbG9hZF9zZXJpYWwoKQoKKiBGaXhpbmcgYnVnIDgzNDk0MzoKICBNUEM4NTQwIC0gbWlzc2luZyB2b2xhdGlsZSBkZWNsYXJhdGlvbnMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMDkgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFhpbGlueCBTeXN0ZW1BQ0UgY2hpcDoKICAtIE5ldyBmaWxlcyBjb21tb24vY21kX2FjZS5jIGFuZCBpbmNsdWRlL3N5c3RlbWFjZS5oCiAgLSBIb29rIHN5c3RlbWFjZSBzdXBwb3J0IGludG8gY21kX2ZhdCBhbmQgdGhlIHBhcnRpdGlvbiBtYW5hZ2VyCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IEZlYiAyMDA0OgogIEFkZCBiaV9vcGJmcmVxICYgYmlfaWljX2Zhc3QgdG8gNDQwR1ggYmRfaW5mbyBhcyBuZWVkZWQgZm9yIExpbnV4CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IEZlYiAyMDA0OgogIG8gNDQwR1g6CiAgICAtIEZpeCBQQ0kgSW5kaXJlY3QgYWNjZXNzIGZvciB0eXBlIDEgY29uZmlnIGN5Y2xlcyB3aXRoIHBwYzQ0MC4KICAgIC0gQWRkIHBoeW1vZGUgZm9yIDQ0MCBlbmV0CiAgICAtIGZpeCBwY2kgcHJlIGluaXQKICBvIFhQZWRpdGUxSzoKICAgIC0gQ2hhbmdlIGJvYXJkX3ByZV9pbml0IHRvIGJvYXJkX2Vhcmx5X2luaXRfZgogICAgLSBBZGQgdXNlciBmbGFzaCB0byBidXMgY29udHJvbGxlciBzZXR1cAogICAgLSBGaXggcGNpIHByZSBpbml0CiAgICAtIEZpeCBpc19wY2lfaG9zdCB0byBjaGVjayBHUElPIGZvciBtb25hcmNoIGJpdAogICAgLSBGb3JjZSB4cGVkaXRlMWsgdG8gcGNpIGNvbnZlbnRpb25hbCBtb2RlICh2aWEgI2RlZmluZSBvcHRpb24pCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgNCBGZWIgMjAwNDoKICAtIGhhbmRsZSB0aGUgbWFjaGluZSBjaGVjayB0aGF0IGlzIGdlbmVyYXRlZCBkdXJpbmcgdGhlIFBDSSBzY2FucwogICAgb24gODJ4eCBwcm9jZXNzb3JzLgogIC0gZGVmaW5lIHRoZSByZWdpc3RlcnMgdXNlZCBpbiB0aGUgSU1NUiBieSB0aGUgUENJIHN1YnN5c3RlbS4KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDMgRmViIDIwMDQ6CiAgY3B1L21wYzV4eHgvc3RhcnQuUzogY29weSBNQkFSIGludG8gU1BSMzExCgoqIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwMyBGZWIgMjAwNDoKICBGaXggY29weSAmIHBhc3RlIGVycm9yIGluIGNwdS9tcGM4MjYwL3BjaS5jCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyNCBKYW4gMjAwNDoKICBGaXggdHlwbyBpbiBjcHUvbXBjNXh4eC9wY2lfbXBjNTIwMC5jCgoqIEFkZCBBdXRvLU1ESVggc3VwcG9ydCBmb3IgSU5DQS1JUAoKKiBTb21lIGNvZGUgY2xlYW51cAoKKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMTAgRmViIDIwMDQ6CiAgRml4ZXMgZm9yIENvbGRGaXJlIHBvcnQKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxMSBGZWIgMjAwNDoKICBGaXggQ0ZJIGZsYXNoIGRyaXZlciBwcm9ibGVtcwoKKiBNYWtlIHN1cmUgdG8gdXNlIGEgYnVzIGNsb2NrIGRpdmlkZXIgb2YgMiBvbmx5IHdoZW4gcnVubmluZyBUUU04eHhNCiAgbW9kdWxlcyBhdCBDUFUgY2xvY2sgZnJlcXVlbmNpZXMgYWJvdmUgNjYgTUh6LgoKKiBPcHRpbWl6ZSBmbGFzaCBwcm9ncmFtbWluZyBzcGVlZCBmb3IgTFdNT04gKGJ5IGFub3RoZXIgMTAwJSA6LSkKCiogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMyBGZWIgMjAwNDoKICAtIENoYW5nZWQgdGhlIGluY29ycmVjdCBGQVQxMkJVRlNJWkUKICAtIGRhdGFfYmVnaW4gaW4gZnNkYXRhIGNhbiBiZSBuZWdhdGl2ZS4gQ2hhbmdlZCBpdCB0byBiZSBzaG9ydC4KCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMwIEphbiAyMDA0OgogIDE6IC0gYm9hcmQvYWx0ZXJhL2NvbW1vbi9mbGFzaC5jOmZsYXNoX2VyYXNlKCk6CiAgICAgICBvIGFsbG93IGludGVycnVwdHMgYmVmb3IgZ2V0X3RpbWVyKCkgY2FsbAogICAgICAgbyBjaGVjay11cCBlYWNoIGVyYXNlZCBzZWN0b3IgYW5kIGF2b2lkIHVuZXhwZWN0ZWQgdGltZW91dHMKICAgICAtIGJvYXJkL2FsdGVyYS9kazFjMjAvZGsxczEwLmM6Ym9hcmRfZWFybHlfaW5pdF9mKCk6CiAgICAgICBvIGVuY2xvc2Ugc2V2ZW5zZWdfc2V0KCkgaW4gY3BwIGNvbmRpdGlvbgogICAgIC0gcmVtb3ZlIHRoZSBBU01JIGNvbmZpZ3VyYXRpb24gZm9yIERLMVMxMF9zdGFuZGFyZF8zMiAobmV2ZXIgcHJlc2VudCkKICAgICAtIGZpeCBzb21lIHR5cGVkIGluIG1pc3Rha2VzIGluIHRoZSBOSU9TIGRvY3VtZW50YXRpb24KICAyOiAtIHNwbGl0IERLMUMyMCBjb25maWd1cmF0aW9uIGludG8gc2V2ZXJhbCBoZWFkZXIgZmlsZXM6CiAgICAgICBvIHR3byBuZXcgZmlsZXMgZm9yIGVhY2ggTklPUyBDUFUgZGVzY3JpcHRpb24KICAgICAgIG8gVS1Cb290IHJlbGF0ZWQgcGFydCBpcyByZW1haW5pbmcgaW4gREsxQzIwLmgKICAzOiAtIHNwbGl0IERLMVMxMCBjb25maWd1cmF0aW9uIGludG8gc2V2ZXJhbCBoZWFkZXIgZmlsZXM6CiAgICAgICBvIHR3byBuZXcgZmlsZXMgZm9yIGVhY2ggTklPUyBDUFUgZGVzY3JpcHRpb24KICAgICAgIG8gVS1Cb290IHJlbGF0ZWQgcGFydCBpcyByZW1haW5pbmcgaW4gREsxUzEwLmgKICA0OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTWljcm90cm9uaXggTGludXggRGV2ZWxvcG1lbnQgS2l0CiAgICAgICBOSU9TIENQVSBjb25maWd1cmF0aW9uIGF0IHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgICAgICBTdHJhdGl4IEVkaXRpb24gKERLLTFTMTApCiAgNTogLSBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKICAgICAgIFN0cmF0aXggRWRpdGlvbiAoREstMVMxMCkKICA2OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBTZXJpYWwgUGVyaXBoYXJlbCBJbnRlcmZhY2UgKFNQSSkKICAgICAgIChtYXN0ZXIgb25seSkKICA3OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgY29tbW9uIFUtQm9vdCBTUEkgZnJhbWV3b3JrIGF0CiAgICAgICBSVEMgZHJpdmVyIERTMTMwNgoKKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMjggSmFuIDIwMDQ6CiAgRml4IGZsYXNoIHByb3RlY3Rpb24vbG9ja2luZyBoYW5kbGluZyBmb3IgT01BUDE2MTAgaW5ub3ZhdG9yIGJvYXJkLgoKKiBQYXRjaCBieSBSb2xmIFBldWtlcnQsIDI4IEphbiAyMDA0OgogIGZpeCBmbGFzaCB3cml0ZSBwcm9ibGVtcyBvbiBDU0IyMjYgYm9hcmQgKHdyaXRlIHdpdGggMzIgYml0IGJ1cyB3aWR0aCkKCiogUGF0Y2hlcyBieSBNYXJrIEpvbmFzLCAxNiBKYW4gMjAwNDoKICAtIGZpeCByb3VuZGluZyBlcnJvciB3aGVuIGNhbGN1bGF0aW5nIGJhdWRyYXRlcyBmb3IgTVBDNTIwMCBQU0NzCiAgLSBtYWtlIHN1cmUgQ0ZHX1JBTUJPT1QgYW5kIENGR19MT1dCT09UIGFyZSBub3QgZW5hYmxlZCBhdCB0aGUgc2FtZQogICAgdGltZSB3aGljaCBpcyBub3Qgc3VwcG9ydGVkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI2IEphbiAyMDA0OgogIEFsbG93IGJ6aXAyIGNvbXByZXNzaW9uIGZvciBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGJvYXJkcwoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDIxIEphbiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBDRkkgZmxhc2ggZHJpdmVyIGZvciBib3RoIHRoZSBJbnRlbCBhbmQgdGhlIEFNRAogIGNvbW1hbmQgc2V0cy4KCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjAgSmFuIDIwMDQ6CiAgRml4IHBjaSBicmlkZ2UgYXV0byBlbnVtZXJhdGlvbiBvZiBzaWJsaW5nIHAycCBicmlkZ2VzLgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMiBKYW4gMjAwNDoKICBBZGQgc29tZSBkZWxheXMgYXMgbmVlZGVkIGZvciBJbnRlbCBMWFQ5NzFBIFBIWSBzdXBwb3J0CgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAwOSBKYW4gMjAwNDoKICAtIGF2b2lkIHdhcm5pbmc6IHVudXNlZCB2YXJpYWJsZSBgcGlvcCcgaW4gYm9hcmQvYWx0ZXJhL2NvbW1vbi9zZXZlbnNlZy5jCiAgLSBtYWtlIERLMUMyMCBib2FyZCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQVNNSSBjb25mb3JtIHRvCiAgICBkb2N1bWVudGF0aW9uCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA5IEphbiAyMDA0OgoKICBBUk0gbWVtb3J5IGxheW91dCBmaXhlczogdGhlIGFib3J0LXN0YWNrIGlzIG5vdyBzZXQgdXAgaW4gdGhlCiAgY29ycmVjdCBSQU0gYXJlYSwgYW5kIHRoZSBCU1MgaXMgemVyb2VkIG91dCBhcyBpdCBzaG91bGQgYmUuCgogIEZ1cnRoZXJtb3JlLCB0aGUgbWFnaWMgdmFyaWFibGVzICdhcm1ib290X2VuZCcgYW5kICdhcm1ib290X2VuZF9kYXRhJwogIG9mIHRoZSBsaW5rZXIgc2NyaXB0cyBhcmUgcmVwbGFjZWQgYnkgJ19fYnNzX3N0YXJ0JyBhbmQgJ19lbmQnLAogIHJlc3AuLCB3aGljaCBpcyBhIGZ1cnRoZXIgc3RlcCB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgZGlmZmVyZW5jZXMKICBiZXR3ZWVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ1BVIGFyY2hpdGVjdHVyZXMuCgoqIFBhdGNoIGJ5IGxpYW5nIGEgbGVpLCA5IEphbiAyMDA0OgogIEZpeCBJbnRlbCAyOEYxMjhKMyBJRCBpbiBpbmNsdWRlL2ZsYXNoLmgKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDkgSmFuIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIFRCMDIyOSBib2FyZCAoTkVDIFZSNDEzMSBNSVBTIHByb2Nlc3NvcikKCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBEZWMgMjAwMzoKICBjaGFuZ2VkIGV4dGVybiBfX2lubGluZV9fIGludG8gc3RhdGljIF9faW5saW5lX18gaW4KICBpbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMzAgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIElCTSBQUEM0NDBHWC4gTXVsdGlwbGUgRU1BQyBFdGhlcm5ldCBkZXZpY2VzLAogIHNlbGVjdCBNREkgcG9ydCBiYXNlZCBvbiBlbmFibGVkIEVNQUMgZGV2aWNlLgogIEFkZCBzdXBwb3J0IGZvciBYRVMgSW5jIDxodHRwOi8vd3d3Lnhlcy1pbmMuY29tPiBYUGVkaXRlMTAwMCA0NDBHWAogIGJhc2UgUHJQTUMgYm9hcmQuCgoqIFBhdGNoIGJ5IFdvbHRlciBLYW1waHVpcywgMTUgRGVjIDIwMDM6CiAgbWFkZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUgdXNhYmxlIG9uIGFsbCBhcmNoaXRlY3R1cmVzCgoqIERpc2FibGUgZGF0ZSBjb21tYW5kIG9uIFRRTTg2Nk0gLSB0aGVyZSBpcyBubyBSVEMgb24gTVBDODY2CgoqIEZpeCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyBmb3IgbG93IENQVSBjbG9ja3MKCiogSW1wbGVtZW50IGFkYXB0aXZlIFNEUkFNIHRpbWluZyBjb25maWd1cmF0aW9uIGJhc2VkIG9uIGFjdHVhbCBDUFUKICBjbG9jayBmcmVxdWVuY3kgZm9yIElOQ0EtSVA7IGZpeCBwcm9ibGVtIHdpdGggYm9hcmQgaGFuZ2luZyB3aGVuCiAgc3dpdGNoaW5nIGZyb20gMTUwTUh6IHRvIDEwME1IegoKKiBBZGQgUENNQ0lBIENTIHN1cHBvcnQgZm9yIEJNUzIwMDMgYm9hcmQKCiogQWRkIHZhcmlhYmxlIENQVSBjbG9jayBmb3IgTVBDODU5Lzg2NiBzeXN0ZW1zIChzbyBmYXIgb25seSBUUU04NjZNKToKICBzZWUgZG9jL1JFQURNRS5NUEM4NjYgZm9yIGRldGFpbHM7CiAgaW1wbGVtZW50IHdvcmthcm91bmQgZm9yICJTSVU0IiBhbmQgIlNJVTkiIHNpbGljb24gYnVncyBvbiBNUEM4NjY7CiAgY2FsY3VsYXRlIENQVSBjbG9jayBmcmVxdWVuY3kgZnJvbSBQTEwgcmVnaXN0ZXIgdmFsdWVzLgoKKiBBZGQgc3VwcG9ydCBmb3IgMTI4IE1CIFJBTSBvbiBUUU04eHhML00gbW9kdWxlcwoKKiBGaXggUFMvMiBrZXlib2FyZCBwcm9ibGVtIGNhdXNlZCBieSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHZhcmlhYmxlCiAgcG9pbnRpbmcgdG8gYSBsb2NhdGlvbiBpbiBmbGFzaAoKKiBGaXggSU5DQS1JUCBjbG9jayBjYWxjdWxhdGlvbjogNDAwLzMgPSAxMzMuMyBNSHosIG5vdCAxMzAuCgoqIFRoZSBQUy8yIG11eCBvbiB0aGUgQk1TMjAwMyBib2FyZCBuZWVkcyA0NTAgbXMgYWZ0ZXIgcG93ZXIgb24KICBiZWZvcmUgd2UgY2FuIGFjY2VzcyBpdDsgYWRkIGRlbGF5IGluIGNhc2Ugd2UgYXJlIGZhc3RlciAod2l0aCBubwogIENGIGNhcmQgaW5zZXJ0ZWQpCgoqIENsZWFudXAgb2Ygc29tZSBpbml0IGZ1bmN0aW9ucwoKKiBNYWtlIHN1cmUgU0NDIEV0aGVybmV0IGlzIGFsd2F5cyBzdG9wcGVkIGJ5IHRoZSB0aW1lIHdlIGJvb3QgTGludXgKICB0byBhdm9pZCBMaW51eCBjcmFzaGVzIGJ5IGVhcmx5IHBhY2tldHMgY29taW5nIGluLgoKKiBBY2NlbGVyYXRlIGZsYXNoIGFjY2Vzc2VzIG9uIExXTU9OIGJvYXJkIGJ5IHVzaW5nIGJ1ZmZlcmVkIHdyaXRlcwoKKiBGaXggdHlwbyBpbiBNYWtlZmlsZTsKICBmaXggcHJvYmxlbSB3aXRoIFBBUlROVU0gZGV0ZWN0aW9uCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwOSBKYW4gMjAwNDoKICAtIGFkZCBSVEMgc3VwcG9ydCBmb3IgTVBDNTIwMCBiYXNlZCBib2FyZHMgKHJlcXVpcmVzIFJUQ19YVEFMKQoKKiBBZGQgc3VwcG9ydCBmb3IgSURFIExFRCBvbiBCTVMyMDAzIGJvYXJkCiAgKGV4Y2x1c2l2ZSB3aXRoIHN0YXR1cyBMRUQhKQoKKiBBZGQgc3VwcG9ydCBmb3IgUFMvMiBrZXlib2FyZCAodXNlZCB3aXRoIFBTLzIgbXVsdGlwbGV4b3Igb24KICBCTVMyMDAzIGJvYXJkKQoKKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCA0IEphbiAyMDA0ICsgNyBKYW4gMjAwNDoKICBBZGQgY29tbW9uIGZpbGVzIGZvciAiZW1rIiBib2FyZHMKCiogQWRkIGEgY29tbW9uIGdldF9yYW1fc2l6ZSgpIGZ1bmN0aW9uIGFuZCBtb2RpZnkgdGhlIHRoZQogIGJvYXJkLXNwZWNpZmljIGZpbGVzIHRvIGludm9rZSB0aGF0IGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMC4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFNldCBkZWZhdWx0IGNsb2NrIGZvciBJTkNBLUlQIHRvIDE1MCBNSHoKCiogTWFrZSBCTVMyMDAzIHVzZSBhIHNlcGFyYXRlIGNvbmZpZyBmaWxlIHRvIGF2b2lkICNpZmRlZiBtZXNzOwogIGFkZCBJMkMgc3VwcG9ydDsgYWRkIHN1cHBvcnQgZm9yIERTMTMzNyBSVEMKCiogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0ICBmb3IgQk1TMjAwMyBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3Igc3RhdHVzIExFRCBvbiBCTVMyMDAzIGJvYXJkCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDIgSmFuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBOaW9zIEFjdGl2ZSBTZXJpYWwgTWVtb3J5IEludGVyZmFjZSAoQVNNSSkKICBvbiBDeWNsb25lIGRldmljZXMKCiogUGF0Y2ggYnkgQW5kcmVhIE1hcnNvbiwgMTYgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBQUENoYW1lbGVvbiBNRSBhbmQgSEkgbW9kdWxlcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMiBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgRFVFVCBBRFMgYm9hcmQgKE1QQzg3eC84OHgpCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTUgRGVjIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGNyYW1mcyAodXNlcyBKRkZTMiBjb21tYW5kIGludGVyZmFjZSkKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDExIERlYyAyMDAzOgogIC0gbW9yZSBkb2N1bWVudGF0aW9uIGZvciBOSU9TIHBvcnQKICAtIG5ldyBzdHJ1Y3Qgbmlvc19waW9fdCwgc3RydWN0IG5pb3Nfc3BpX3QKICAtIFJlY29uZmlndXJhdGlvbiBmb3IgTklPUyBEZXZlbG9wbWVudCBLaXQgREsxQzIwOgogICAgbyBtb3ZlIGJvYXJkIHJlbGF0ZWQgY29kZSBmcm9tIGJvYXJkL2RrMWMyMAogICAgICB0byBib2FyZC9hbHRlcmEvZGsxYzIwCiAgICBvIGNyZWF0ZSBhIG5ldyBjb21tb24gc291cmNlIHBhdGggYm9hcmQvYWx0ZXJhL2NvbW1vbgogICAgICBhbmQgbW92ZSBnZW5lcmljIGZsYXNoIGFjY2VzcyBzdHVmZiBpbnRvIGl0CiAgICBvIGNoYW5nZS9leHBhbmQgY29uZmlndXJhdGlvbiBmaWxlIERLMUMyMC5oCiAgLSBBZGQgc3VwcG9ydCBmb3IgTklPUyBEZXZlbG9wbWVudCBLaXQgREsxUzEwCiAgLSBBZGQgc3RhdHVzIExFRCBzdXBwb3J0IGZvciBOSU9TIHN5c3RlbXMKICAtIEFkZCBkdWFsIDctc2VnbWVudCBMRUQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5JT1MgRGV2S2l0cwoKKiBQYXRjaCBieSBSb25lbiBTaGl0cml0LCAxMCBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgREI2NDM2MCAvIERCNjQ0NjAgZGV2ZWxvcG1lbnQgYm9hcmRzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDEwIERlYyAyMDAzOgogIGZpeCBkZXBlbmRlbmN5IHByb2JsZW0gaW4gZXhhbXBsZXMvTWFrZWZpbGUKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDggRGVjIDIwMDMKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgUEFUSSBib2FyZCAoTVBDNTU1KQogIC0gYWRkIFNQSSBzdXBwb3J0IGZvciB0aGUgTVBDNXh4CgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA4IERlYyAyMDAzOgogIGFkZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgQ09ORklHX1NFUklBTF9UQUcgYW5kIENPTkZJR19SRVZJU0lPTl9UQUcKICB0byBwYXNzIEFUQUdfU0VSSUFMIGFuZCBBVEFHX1JFVklTSU9OLCByZXNwLiwgdG8gdGhlIEFSTSB0YXJnZXQ7CiAgY2xlYW51cCBzb21lIHJlZHVuZGFuZCAjZGVmaW5lcwoKKiBQYXRjaCBieSBBbmRy6SBTY2h3YXJ6LCA4IERlYyAyMDAzOgogIGZpeGVzIGZvciBEYXZpY29tIERNOTEwMkEgRXRoZXJuZXQgQ2hpcCAoI2RlZmluZSBDT05GSUdfVFVMSVBfRklYX0RBVklDT00pOgogIC0gVFggYW5kIFJYIGRlc2tyaXB0b3JzIG11c3QgYmUgcXVhZC13b3JkIGFsaWduZWQKICAtIGRvZXMgbm90IHdvcmsgd2l0aCBvbmx5IG9uZSBUWCBkZXNrcmlwdG9yCiAgLSBzdGFuZGFyZCByZXNldCBtZXRob2QgZG9lcyBub3Qgd29yawoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBEZWMgMjAwMzoKICBhZGQgUlRMODEzOSBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2hlcyBieSBFZCBPa2Vyc29uLCAwNyBEZWMgMjAwMzoKICAtIGZpeCBldGhlcm5ldCBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4KICAtIGV4dGVuZCBtZW1zZXR1cC5TIGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gQkUgYW5kIExFIG1vZGVzCgoqIE1pbm9yIGNvZGUgY2xlYW51cCAoY29kaW5nIHN0eWxlKQoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMzAgRGVjIDIwMDM6CiAgLSBjcHUvbXBjNXh4eC9mZWMuYzogYWRkZWQgQ09ORklHX1BIWV9BRERSLCBhZGRlZCBDT05GSUdfUEhZX1RZUEUsCiAgLSBhZGRlZCBDT05GSUdfUEhZX0FERFIgdG8gaW5jbHVkZS9jb25maWdzL0ljZUN1YmUuaCwKICAtIHR1cm5lZCBkZWJ1ZyBwcmludCBvZiBQSFkgcmVnaXN0ZXJzIGludG8gYSBmdW5jdGlvbiAoY2FsbGVkIGluIHR3byBwbGFjZXMpCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBFTUsgTVBDNTIwMCBiYXNlZCBtb2R1bGVzCgoqIEZpeCBNUEM4eHggUExQUkNSX01GRF9TSElGVCB0eXBvCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjZNIG1vZHVsZXMKCiogRml4ZXMgZm9yIFRRTTg1NU0gd2l0aCA0IE1CIGZsYXNoIChBbTI5REwxNjMgPSBfbm9fIG1pcnJvciBiaXQgZmxhc2gpCgoqIEZpeCBhIGZldyBjb21waWxlciB3YXJuaW5ncwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjggRGVjIDIwMDM6CiAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgVE9QNTIwMCBib2FyZAoKKiBNYWtlIENQVSBjbG9jayBvbiBJQ0EtSVAgYm9hcmQgY29udHJvbGxhYmxlIGJ5IGEgImNwdWNsayIKICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGljaCBjYW4gc2V0IHRvICIxMDAiLCAiMTMzIiwgb3IgIjE1MCIuIFRoZQogIENQVSBjbG9jayB3aWxsIGJlIGNvbmZpZ3VyZWQgYWNjb3JkaW5nbHkgdXBvbiBuZXh0IHJlYm9vdC4gT3RoZXIKICB2YWx1ZXMgYXJlIGlnbm9yZWQuIEluIGNhc2Ugb2YgYW4gaW52YWxpZCBvciB1bmRlZmluZWQgImNwdWNsayIKICB2YWx1ZSwgdGhlIGNvbXBpbGUtdGltZSBkZWZhdWx0IENQVSBjbG9jayBzcGVlZCB3aWxsIGJlIHVzZWQuCgoqIEVuYWJsZSBRdWFkLVVBUlQgb24gQk1TMjAwMyBib2FyZCAoaW5pdGlhbGl6ZSB0aGUgUENNQ0lBIG1lbW9yeQogIHdpbmRvdyB0aGF0IGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBVQVJUIHJlZ2lzdGVycyBieSB0aGUgTGludXggZHJpdmVyKQoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjAgRGVjIDIwMDM6CiAgRml4IGNsb2NrIGNhbGN1bGF0aW9uIGZvciB0aGUgTVBDNTIwMCBmb3IgaGlnaGVyIGNsb2NrIGZyZXF1ZW5jaWVzCiAgKGFib3ZlIDIqKjMyIC8gMTAgPSA0MjkuNSBNSHopLgoKKiBGaXggQ09ORklHX1BMTF9QQ0lfVE9fTUVNX01VTFRJUExJRVIgZGl2aWRlciBlcnJvciBpbiBTUDgyNDAgY29uZmlndXJhdGlvbgoKKiBGaXggSWNlQ3ViZSBDTEtJTiBjb25maWd1cmF0aW9uIChpdCdzIDMzLjAwMDAwME1IeikKCiogQWRkIG5ldyBjb25maWd1cmF0aW9uIGZvciBJY2VDdWJlIGJvYXJkIHdpdGggRERSIG1lbW9yeQoKKiBVcGRhdGUgVFJBQiBtZW1vcnkgY29uZmlndXJhdGlvbnMKCiogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIElOQ0EtSVAgYm9hcmQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDA5IERlYyAyMDAzOgogIC0gQlVCSU5HQTQwNUVQOiBjaGFuZ2VkIGZsYXNoIGRyaXZlciB0byBwcm90ZWN0IHRvcCBzZWN0b3IgY29udGFpbmluZwogICAgZmlyc3QgaW5zdHJ1Y3Rpb24uCiAgLSBCVUJJTkdBNDA1RVA6IGNvbmZpZ3VyZWQgImVlcHJvbSIgY29tbWFuZCB0byBhY2Nlc3MgYm9vdCBjb25maWcgRUVQUk9NLgogIC0gQlVCSU5HQTQwNUVQOiBmaXhlZCBQTEwgaW5pdCAoaW5pdCBjaGlwIHNlbGVjdHMgYmVmb3JlIEZQR0EvTlZSQU0gYWNjZXNzKS4KICAtIDQwNUVQOiBmaXhlZCBTUEQtYmFzZWQgU0RSQU0gaW5pdCAob25seSB1c2UgYmFua3MgMCBhbmQgMSkuCiAgLSA0MDVFUDogYWRkZWQvZml4ZWQgc3VwcG9ydCBmb3IgInJlZ2luZm8iIGNvbW1hbmQuCiAgLSA0eHg6IHJlbW92ZWQgc3B1cmlvdXMgTUlJIGVycm9yIG1lc3NhZ2VzIG9uICJtaWkgaW5mbyIgY29tbWFuZC4KCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMjggTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIENvbGRGaXJlIENQVQogIGFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNNTI3MkMzIGFuZCBNNTI4MkVWQiBib2FyZHMKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgTm92IDIwMDM6CiAgLSBhZGQgYSByZXR1cm4gdmFsdWUgZm9yIHRoZSBmcGdhIGNvbW1hbmQKICAtIGFkZCBpZGVfcHJlaW5pdCgpIGZ1bmN0aW9uIGNhbGxlZCBpbiBpZGVfaW5pdCBpZiBDT05GSUdfSURFX1BSRUlOSVQKICAgIGlzIGRlZmluZWQuIElmIGlkZV9wcmVpbml0IGZhaWxzLCBpZGVfaW5pdCBpcyBhYm9ydGVkLgogIC0gZml4IGFuIGVuZGlhbmVzcyBwcm9ibGVtIGluIGZhdC5oCgoqIFBhdGNoIGJ5IFdvbHRlciBLYW1waHVpcywgMDUgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNOTUMncyBRUzg1MC9RUzgyMy9RUzg2MFQgYm9hcmRzCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDMgRGVjIDIwMDM6CiAgInJldml2ZSIgVS1Cb290IHN1cHBvcnQgZm9yIG9sZCBNb3Rvcm9sYSBNUEM4NjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgQ2FtKGlsbz8pLCAwMyBEZWMgMjAwMzoKICBtYWtlIGV4YW1wbGVzIGJ1aWxkIGV2ZW4gd2l0aCBicm9rZW4gTW9udGF2aXN0YSBvYmpjb3B5CgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyNyBOb3YgMjAwMzoKICBmaXggY29udmVyc2lvbiBwcm9ibGVtIHdpdGggImJvb3RyZXRyeSIgZXZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBBbmRyZSBTY2h3YXJ6LCAyNCBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgbXZibHVlIChtdkJsdWVMWU5YIGFuZCBtdkJsdWVCT1gpIGJvYXJkcwoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjEgTm92IDIwMDM6CiAgc2V0IFpNSUkgYnJpZGdlIHNwZWVkIG9uIDQ0MAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBOb3YgMjAwMzoKICBGaXggbWlzbWF0Y2hlZCAjaWZkZWYgLyAjZW5kaWYgaW4gaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2hhcmR3YXJlLmgKCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDE0IE5vdiAyMDAzOgogIC0gYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5jCiAgICAqIGltcGxlbWVudCBzdXBwb3J0IGZvciBCWklQMiBjb21wcmVzc2VkIGltYWdlcwogICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQogIC0gYm9hcmQvbXBsL2NvbW1vbi9mbGFzaC5jCiAgICAqIHJlcG9ydCBjb3JyZWN0IGVycm9ycyB0byB1cHBlciBsYXllcnMKICAgICogY2hlY2sgdGhlIGVyYXNlIGZhaWwgYW5kIFZQUCBsb3cgYml0cyBpbiBzdGF0dXMgcmVnCiAgLSBib2FyZC9tcGwvdmNtYTkvY21kX3ZjbWE5LmMKICAtIGJvYXJkL21wbC92Y21hOS9mbGFzaC5jCiAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCiAgLSBjb21tb24vY21kX3VzYi5jCiAgICAqIGZpeCB0eXBvIGluIGNvbW1lbnQKICAtIGNwdS9hcm05MjB0L3VzYl9vaGNpLmMKICAgICogc3VwcG9ydCBmb3IgUzNDMjQxMCBpcyBtaXNzaW5nIGluICNpZiBsaW5lCiAgLSBkcml2ZXJzL2NzODkwMC5jCiAgICAqIHJlaW5pdCBzb21lIHJlZ2lzdGVycyBpbiBjYXNlIG9mIGVycm9yIChjYWJsZSBtaXNzaW5nLCAuLi4pCiAgLSBmcy9mYXQvZmF0LmMKICAgICogc3VwcG9ydCBmb3IgVVNCL01NQyBkZXZpY2VzIGlzIG1pc3NpbmcgaW4gI2lmIGxpbmUKICAtIGluY2x1ZGUvY29uZmlncy9NSVA0MDUuaAogIC0gaW5jbHVkZS9jb25maWdzL1BJUDQwNS5oCiAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0CiAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0CiAgLSBpbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaAogICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAogICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAogICAgKiBlbmFibGUgVVNCIHN1cHBvcnQKICAtIGxpYl9hcm0vYXJtbGludXguYwogICAgKiBjaGFuZ2UgY2FsbGluZyBjb252ZW50aW9uIG9mIEFSTSBMaW51eCBrZXJuZWwgYXMKICAgICAgZGVzY3JpYmVkIG9uIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvYm9vdGluZy5waHAKCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKICBTcGxpdCBkYmF1MXgwMCBpbnRvIGRiYXUxMDAwLCBkYmF1MTEwMCBhbmQgZGJhdTE1MDAgY29uZmlncyB0bwogIHN1cHBvcnQgYWxsIHRoZXNlIEFNRCBib2FyZHMuCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6CiAgV29ya2Fyb3VuZCBmb3IgbWlwcyBhdTF4MDAgcGh5c2ljYWwgbWVtb3J5IGFjY2Vzc2VzICh0aGUgYXUxeDAwCiAgdXNlcyBhIDM2IGJpdCBidXMgaW50ZXJuYWxseSBhbmQgY2Fubm90IGFjY2VzcyBwaHlzaWNhbCBtZW1vcnkKICBkaXJlY3RseS4gVXNlIHRoZSB1bmNhY2hlZCBTRFJBTSBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIHBoeXNpY2FsCiAgb25lLikKCiogUGF0Y2ggYnkgWHVlIExpZ29uZyAoSm9lKSwgMTMgTm92IDIwMDM6CiAgYWRkIFJlYWx0ZWsgODAxOSBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgTm92IDIwMDM6CiAgTVBDODI2eEFEUy9QUTJGQURTICBjbGVhbnVwCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDEyIE5vdiAyMDAzOgogIFVwZGF0ZSBSRUFETUUgdG8gbWFyayB0aGUgUE9SVElPIGNvbW1hbmRzIG5vbi1zdGFuZGFyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAxMiBOb3YgMjAwMzoKICB1cGRhdGUgZm9yIGZvciBBdG1lbCBBVDkxUk05MjAwREsgZGV2ZWxvcG1lbnQga2l0OgogIC0gc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIERhdGFGbGFzaAogIC0gQXRtZWwgRGF0YUZsYXNoIEFUNDVEQjEyODIgc3VwcG9ydAoKKiBQYXRjaCBieSBKZWZmIENhcnIsIDExIE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBuZXcgdmVyc2lvbiBvZiA4MjcwIHByb2Nlc3NvcnMKCiogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDA1IE5vdiAyMDAzOgogIC0gb25seSBwYXNzIHRoZSBBUk0gbGludXggaW5pdHJkIHRhZyB0byB0aGUga2VybmVsIHdoZW4gYW4gaW5pdHJkCiAgICBpcyBhY3R1YWxseSBwcmVzZW50CiAgLSB1cGRhdGUgb21hcDE1MTBpbm4gY29uZmlndXJhdGlvbiBmaWxlCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzIE5vdiAyMDAzOgogIC0gbW9yZSBlbmRpYW5lc3MgZml4ZXMgZm9yIExBTjkxQzExMSBkcml2ZXIKICAtIENGR19IWiBjb25maWd1cmF0aW9uIHBhdGNoIGZvciBOSU9TIEN5Y2xvbmUgYm9hcmQKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyOCBPY3QgMjAwMzoKICBmaXggUEhZX0lOVF9SRUcgdnMuIFBIWV9NQVNLX1JFRyBidWcgaW4gZHJpdmVycy9zbWM5MTExMS5jCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIE9jdCAyMDAzOgogIC0gbWFrZSAibWlpIGluZm8gPGFkZHI+IiBzaG93IGluZm9yIGZvciBQSFkgYXQgImFkZHIiIG9ubHkKICAtIEVuZGlhbiBmaXggZm9yIG1paXBoeV9pbmZvKCkKCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxOSBTZXAgMjAwMzoKICBNb3ZlIG1vc3Qgb2YgdGhlIHRpbWVyIGludGVycnVwdCByZWxhdGVkIFBQQyBjb2RlIHRvIHBwY19saWIvaW50ZXJydXB0cy5jCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgogIEJyaW5nIEFSTSBtZW1vcnkgbGF5b3V0IGluIHN5bmMgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbjoKICBzdGFjayBhbmQgbWFsbG9jLWhlYXAgYXJlIG5vdyBsb2NhdGVkIF9iZWxvd18gdGhlIFUtQm9vdCBjb2RlCgoqIEFjY2VsZXJhdGUgYm9vdGluZyBvbiBUUkFCIGJvYXJkOiByZWFkIGFuZCBjaGVjayAgYXV0b3VwZGF0ZQlpbWFnZQogIGhlYWRlcnMgZmlyc3QgaW5zdGVhZCBvZiBhbHdheXMgcmVhZGluZyB0aGUgd2hvbGUgaW1hZ2VzLgoKKiBGaXggdHlwZSBpbiBNUEM1WFhYIGNvZGUgKHBvaW50ZWQgb3V0IGJ5IFZpY3RvciBXcmVuKQoKKiBFbmFibGVkIHBhc3N3b3JkIGNoZWNrIG9uIFJNVSBib2FyZAoKKiBGaXggY29uZmlndXJhdGlvbiBwcm9ibGVtIHdpdGggSWNlQ3ViZSBpbiBMT1dCT09UIGNvbmZpZ3VyYXRpb246CiAgZW52cmlvbm1lbnQgZ290IGVtYmVkZGVkLCBjb3JydXB0aW5nIHRoZSBpbWFnZSBsYXlvdXQuCgoqIEZpeCBORUMgZGlzcGxheSBuYW1lcyAoaXQncyA2NDQwIFtmb3IgNjQweDQ4MF0sIG5vdCA2NjQwKS4KCiogQWRkZWQgQk1TMjAwMyBib2FyZAogIGFkZCBzdXBwb3J0IGZvciBORUMgTkw2NDQ4QkMzMy01NC4gMTAuNCIsIDY0MHg0ODAgVEZUIGRpc3BsYXkKCiogRml4IGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZCAobXVzdCB1c2UgVW5sb2NrIEJ5cGFzcyBSZXNldAogIGNvbW1hbmQgdG8gZXhpdCBVbmxvY2sgQnlwYXNzIE1vZGUpOyBhZGp1c3QgdGltaW5ncyBmb3IgZmxhc2gsIFNSQU0KICBhbmQgQ1BMRAoKKiBVc2UgIi1mUElDIiBpbnN0ZWFkIG9mICItbXJlbG9jYXRhYmxlIiB0byBwcmV2ZW50IHByb2JsZW1zIHdpdGgKICByZWNlbnQgdG9vbHMKCiogQWRkIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiB0byAnaW1scycgY29tbWFuZAoKKiBBZGQgYmRfaW5mbyBmaWVsZHMgbmVlZGVkIGZvciA0eHggTGludXggSTJDIGRyaXZlcgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCA0IE5vdi4gMjAwMzoKICBGaXggZXJyb3IgaW4gY21kX3ZmZC5jIChUUkFCIGJvYXJkOiAidmZkIC8xIiBzaG93cyBub3cgb25seSBvbmUgQml0bWFwKQoKKiBQcmludCB1c2VkIG5ldHdvcmsgaW50ZXJmYWNlIHdoZW4gQ09ORklHX05FVF9NVUxUSSBpcyBzZXQKCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMjggT2N0IDIwMDM6CiAgQWRkIGxvdyBib290IHN1cHBvcnQgZm9yIE1QQzUyMDAKCiogRml4IHByb2JsZW0gd2l0aCBkdWFsIFBDTUNJQSBzdXBwb3J0IChOU0NVKQoKKiBGaXggTVBDNTIwMCBJMkMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMC4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEZpeCBwYXJhbWV0ZXIgcGFzc2luZyB0byBzdGFuZGFsb25lIGltYWdlcyB3aXRoIGJvb3RtIGNvbW1hbmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDMwIE9jdCAyMDAzOgogIEZpeCBidWlsZCBlcnJvcnMgZm9yIGl4ZHA0MjUgYm9hcmQKCiogUGF0Y2ggYnkgRGF2aWQgTS4gSG9ybiwgMjkgT2N0IDIwMDM6CiAgRml4ZXMgdG8gYnVpbGQgdW5kZXIgQ1lHV0lOCgoqIEdldCBJY2VDdWJlIE1HVDUxMDAgd29ya2luZyAoYWdhaW4pCgoqIEZpeCBwcm9ibGVtcyBpbiBtZW1vcnkgdGVzdCBvbiBzb21lIGJvYXJkcyAod2hpY2ggd2FzIG5vdAogIG5vbi1kZXN0cnVjdGl2ZSBhcyBpbnRlbmRlZCkKCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDI4IE9jdCAyMDAzOgogIENoYW5nZSBmcy9mYXQvZmF0LmMgdG8gcHV0IEkvTyBidWZmZXJzIGluIEJTUyBpbnN0ZWFkIG9uIHRoZSBzdGFjawogIHRvIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3cgb24gQVJNIHN5c3RlbXMKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyOCBPY3QgMjAwMzoKICBmaXggaW5pdCBzZXF1ZW5jZSBlcnJvciBmb3IgTklPUyBwb3J0CgoqIEFsbG93IGxvd2VyY2FzZSBzcGVsbGluZyBmb3IgSWNlQ3ViZV81MjAwOyBzdXBwb3J0IE1QQzUyMDBMSVRFIG5hbWUKCiogQWRkIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIHRvIFRSQUIgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBYaWFvIFhpYW5naHVhLCAyMyBPY3QgMjAwMzoKICBzbWFsbCBwYXRjaCBmb3IgbXBjODV4eAoKKiBGaXggc21hbGwgcHJvYmxlbSBpbiBNUEM1MjAwIEkyQyBkcml2ZXIKCiogRml4IEZDQzMgc3VwcG9ydCBvbiBBVEMgYm9hcmQKCiogQ29ycmVjdCBoZWFkZXIgcHJpbnRpbmcgZm9yIG11bHRpLWltYWdlIGZpbGVzIGluIGRvX2Jvb3RtKCkKCiogTWFrZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUgd29yayB3aXRoIENPTkZJR19BVVRPQk9PVF9LRVlFRAoKKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE4IE9jdCAyMDAzOgogIEZpeCBBVDkxUk05MjAwIGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaCBieSBOeWUgTGl1LCAxNyBPY3QgMjAwMzoKICBGaXggdHlwbyBpbiBpbmNsdWRlL21wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE2IE9jdCAwMzoKICBGaXhlcyBmb3IgY3B1L2FybTkyNS9pbnRlcnJ1cHQuYwogIC0gSW5pdGlhbGl6ZSB0aW1lc3RhbXAgJiBsYXN0ZGVjIHZhcnMuCiAgLSBmaXggdGltZXN0YW1wIG92ZXJmbG93cy4KICAtIGZpeCBsYXN0ZGVjIG92ZXJmbG93LgogIC0gc21hcnRlciBub3JtYWxpemF0aW9uIHRvIGFsbG93IHVkZWxheSgpIGJlbG93IDFtcyB0byB3b3JrLgoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDE2IE9jdAogIGFkZCBuZXR3b3JraW5nIHN1cHBvcnQgZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgQ3ljbG9uZSBFZGl0aW9uIChESy0xQzIwKQoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgT2N0IDIwMDM6CiAgYWRkIGhpbnQgYWJvdXQgZG9jL1JFQURNRS5zaWxlbnQgdG8gUkVBRE1FIGZpbGUKCiogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBOU0NVCgoqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb25FVkIKCiogVFJBQiBhdXRvLXVwZGF0ZTogQmFzZSBkZWNpc2lvbiBpZiB3ZSBoYXZlIHRvIHN0cmlwIHRoZSBpbWFnZQogIGhlYWRlciBvbiBpbWFnZSB0eXBlIGFzIGVuY29kZWQgaW4gdGhlIGhlYWRlcgogIChpbmNsdWRlIGltYWdlIHR5cGUgcGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgT2N0IDIwMDMpCgoqIFBhdGNoZXMgYnkgWGlhbmdodWEgWGlhbywgMTUgT2N0IDIwMDM6CgogIC0gQWRkZWQgTW90b3JvbGEgQ1BVIDg1NDAvODU2MCBzdXBwb3J0IChjcHUvODV4eCkKICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NDBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU0MGFkcykKICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NjBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU2MGFkcykKCiogRml4IGZsYXNoIHRpbWluZ3Mgb24gVFJBQiBib2FyZAoKKiBNYWtlIHN1cmUgSFVTSCBpcyBpbml0aWFsaXplZCBmb3IgcnVubmluZyBhdXRvLXVwZGF0ZSBzY3JpcHRzCgoqIE1ha2UgNTIwMCByZXNldCBjb21tYW5kIF9yZWFsbHlfIHJlc2V0IHRoZSBib2FyZCwgd2l0aG91dCBydW5uaW5nCiAgYW55IG90aGVyIGNvZGUgYWZ0ZXIgaXQKCiogRml4IGVycm9ycyB3aXRoIGZsYXNoIGVyYXNlIHdoZW4gcmFuZ2Ugc3BhbnMJYWNyb3NzIGJhbmtzCiAgdGhhdCBhcmUgbWFwcGVkIGluIHJldmVyc2Ugb3JkZXIKCiogRml4IGZsYXNoIG1hcHBpbmcgYW5kIGRpc3BsYXkgb24gUDNHNCBib2FyZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTUgSnVsIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgSVhQNDI1IENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIElYRFA0MjUgZXZhbCBib2FyZAoKKiBBZGRlZCBjb25maWcgb3B0aW9uIENPTkZJR19TSUxFTlRfQ09OU09MRS4gIFNlZSBkb2MvUkVBRE1FLnNpbGVudAogIGZvciBtb3JlIGluZm9ybWF0aW9uCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIE9jdCAyMDAzCiAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIEZQR0EgQUNFWDFLCgoqIFBhdGNoZXMgYnkgVGhvbWFzIExhbmdlLCAwOSBPY3QgMjAwMzoKICAtIGZpeCBjbWRfaWRlLmMgZm9yIG5vbiBwcGMgYm9hcmRzIChyZWFkL3dyaXRlIGZ1bmN0aW9ucyBkaWQgbm90CiAgICBhZGQgQVRBIGJhc2UgYWRkcmVzcykKICAtIGZpeCBmb3Igc2hhbm5vbiBib2FyZAogIC0gI2lmZGVmIENPTkZJR19JREVfOHh4X0RJUkVDVCBzb21lIG90aGVyd2lzZSB1bnVzZWQgY29kZQogIC0gRW5kaWFuIHN3YXAgQVRBIGlkZW50aXR5IGZvciBhbGwgYmlnIGVuZGlhbiBDUFVzLCBub3QganVzdCBQUEMKICAtIE1JUFMgb25seTogTmV3IG9wdGlvbiBDT05GSUdfTUVNU0laRV9JTl9CWVRFUyBmb3IgcGFzc2luZyBtZW1zaXplCiAgICBhcmdzIHRvIGxpbnV4CiAgLSBhZGQgc3VwcG9ydCBmb3IgZGJhdTF4MDAgYm9hcmQgKE1JUFMzMikKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAwNyBPY3QgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgZGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA5IE9jdCAyMDAzOgogIEZpeGVzIGZvciBUUkFCIGJvYXJkCiAgLSAvYm9hcmQvdHJhYi9yczQ4NS5jOiBjb3JyZWN0IGJhdWRyYXRlCiAgLSAvYm9hcmQvdHJhYi9jbWRfdHJhYi5jOiBidWcgZml4IGZvciBwcm9ibGVtIHdpdGggdGltZXIgb3ZlcmZsb3cgaW4KICAgIHVkZWxheSgpOyBmaXggc29tZSB0aW1pbmcgcHJvYmxlbXMgd2l0aCBhZGMgY29udHJvbGxlcgogIC0gL2JvYXJkL3RyYWIvdHJhYl9ma3QuYzogYWRkIG5ldyBjb21tYW5kczogZ2FpbiwgZWVwcm9tIGFuZCBwb3dlcjsKICAgIG1vZGlmeSBjb21tYW5kczogdG91Y2ggYW5kIGJ1enplcgoKKiBEaXNhYmxlIENPTkZJR19TVVBQT1JUX1ZGQVQgd2hlbiB1c2VkIHdpdGggQ09ORklHX0FVVE9fVVBEQVRFCiAgKHF1aWNrICYgZGlydHkgd29ya2Fyb3VuZCBmb3Igcm9ndWUgcG9pbnRlciBwcm9ibGVtIGluIGdldF92ZmF0bmFtZSgpKTsKICBVc2UgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGZvciBhdXRvX3VwZGF0ZSBpbnN0ZWFkIG9mIGh1c2ggY29tbWFuZHMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwNCBPY3QgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy0zMiBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciBOaW9zIEN5Y2xvbmUgRGV2ZWxvcG1lbnQgS2l0IChESy0xQzIwKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyOSBTZXAgMjAwMzoKICAtIEEgc2Vjb25kIHBhcmFtZXRlciBmb3IgYm9vdG0gb3ZlcndyaXRlcyB0aGUgbG9hZCBhZGRyZXNzIGZvcgogICAgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcy4KICAtIGJvb3RtIHNldHMgZW52aXJvbm1lbnQgdmFyaWFibGUgImZpbGVzaXplIiB0byB0aGUgcmVzdWx0aW5nCiAgICAodW5jb21wcmVzc2VkKSBkYXRhIGxlbmd0aCBmb3IgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcwogICAgd2hlbiBhdXRvc3RhcnQgaXMgc2V0IHRvICJubyIuIE5vdyB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlCglpZiBib290bSAkZnBnYWRhdGEgJHNvbWVfZnJlZV9yYW0gOyB0aGVuCgkJZnBnYSBsb2FkIDAgJHNvbWVfZnJlZV9yYW0gJGZpbGVzaXplCglmaQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMjUgU2VwdCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1IFJldi4gQyBib2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNSBTZXAgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgWmVwaHlyIEVuZ2luZWVyaW5nIFpQQy4xOTAwIGJvYXJkCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIzIFNlcCAyMDAzOgogIGFkZCBDTURfUE9SVElPIHRvIENGR19DTURfTk9OU1REIChjb21tYW5kcyBpbiBxdWVzdGlvbiBhcmUgb25seQogIGltcGxlbWVudGVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSkKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAyMyBTZXAgMjAwMzoKICBmaXggcGxsX3BjaV90b19tZW1fbXVsdGlwbGllciB0YWJsZSBmb3IgTVBDODI0NQoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMiBTZXAgMjAwMzoKICBlbmFibGUgdGltZWQgYXV0b2Jvb3Qgb24gUFhBCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjIgU2VwIDIwMDM6CiAgLSBhZGQgJChDRkxBR1MpIHRvICItcHJpbnQtbGliZ2NjLWZpbGVuYW1lIiBzbyBjb21waWxlciBkcml2ZXIKICAgIHJldHVybnMgY29ycmVjdCBsaWJnY2MgZmlsZSBwYXRoCiAgLSAibGF0ZW5jeSIgcmVkdWN0aW9uIG9mIGJ1c3ktbG9vcCB3YWl0aW5nIHRvIGltcHJvdmUgIlUtQm9vdCIgYm9vdAogICAgdGltZSBvbiBzM2MyNHgwIHN5c3RlbXMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE5IFNlcCAyMDAzOgogIC0gQWRkIENGR19GQVVMVF9FQ0hPX0xJTktfRE9XTiBvcHRpb24gdG8gZWNobyB0aGUgaW52ZXJ0ZWQgRXRoZXJuZXQKICAgIGxpbmsgc3RhdGUgdG8gdGhlIGZhdWx0IExFRC4KICAtIEluIE5ldExvb3AsIG1ha2UgdGhlIEZhdWx0IExFRCByZWZsZWN0IHRoZSBsaW5rIHN0YXR1cy4gIFRoZSBsaW5rCiAgICBzdGF0dXMgZ2V0cyB1cGRhdGVkIG9uIGVudHJ5LCBhbmQgb24gdGltZW91dHMuCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE4IFNlcCAyMDAzOgogIGFsbG93IG1raW1hZ2UgdG8gYnVpbGQgYW5kIHJ1biBvbiBDeWd3aW4taG9zdGVkIHN5c3RlbXMKCiogUGF0Y2ggYnkgRnJhbmsgTfxsbGVyLCAxOCBTZXAgMjAwMzoKICB1c2UgYmlfaW50ZnJlcSBpbnN0ZWFkIG9mIGJpX2J1c2ZyZXEgdG8gY29tcHV0ZSBmZWNfbWlpX3NwZWVkIGluCiAgY3B1L21wYzh4eC9mZWMuYwoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTYgU2VwIDIwMDM6CiAgYWRkIHRvb2wgdG8gY29tcHV0ZSBmaWxlZHMgaW4gdGhlIFBMUFJDUiByZWdpc3RlciBmb3IgTVBDODZ4CgoqIFVzZSBJSF9UWVBFX0ZJTEVTWVNURU0gZm9yIFRSQUIgImRpc2siIGltYWdlcy4KCiogRml4IGJ1aWxkIHByb2JsZW1zIHVuZGVyIEZyZWVCU0QKCiogQWRkIGdlbmVyaWMgZmlsZXN5c3RlbSBpbWFnZSB0eXBlCgoqIE1ha2UgZmF0bG9hZCBzZXQgZmlsZXNpemUgZW52aXJvbm1lbnQgdmFyaWFibGUKCiogZW5hYmxlIGJhc2ljIC8gbWVkaXVtIC8gaGlnaC1lbmQgY29uZmlndXJhdGlvbnMgZm9yIFBQQ2hhbWVsZW9uRVZCCiAgYm9hcmQ7IGZpeCBOQU5EIGNvZGUKCiogZW5hYmxlIFRGVFAgY2xpZW50IGNvZGUgdG8gc3BlY2lmeSB0byB0aGUgc2VydmVyIHRoZSBkZXNpcmVkCiAgdGltZW91dCB2YWx1ZSAoc2VlIFJGQy0yMzQ5KQoKKiBJbXByb3ZlIFNEUkFNIHNldHVwIGZvciBUUkFCIGJvYXJkCgoqIFN1cHByZXNzIGFsbCBvdXRwdXQgd2l0aCBzcGxhc2hzY3JlZW4gY29uZmlndXJlZCBvbmx5IGlmICJzcGxhc2hpbWFnZSIKICBpcyBzZXQKCiogRml4IHByb2JsZW1zIHdpdGggSTJDIHN1cHBvcnQgZm9yIG1wYzUyMDAKCiogQWRhcHQgVFJBQiBjb25maWd1cmF0aW9uIGFuZCBhdXRvX3VwZGF0ZSB0byBuZXcgbWVtb3J5IGxheW91dAoKKiBBZGQgY29uZmlndXJhdGlvbiBmb3Igd3RrIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciB0aGUgU2hhcnAgTFEwNjVUOURSNTFVIExDRCBkaXNwbGF5CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNyBTZXAgMjAwMzoKICAtIEZpeGVzIGZvciBNUEM4MjY2IGRlZmF1bHQgY29uZmlnCiAgLSBBbGxvdyBldGhfbG9vcGJhY2tfdGVzdCgpIG9uIDgyNjAgdG8gdXNlIGEgc3Vic2V0IG9mIHRoZSBGQ0MncwoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNyBTZXAgMjAwMzoKICAtIHVwZGF0ZSBSRUFETUUgKFNIT1dfQk9PVF9QUk9HUkVTUyB2YWx1ZXMgZm9yIGNtZF9uYW5kLmMgYW5kCiAgICBlbnZfY29tbW9uLmMpCiAgLSBzYmM4MjYwIHR3ZWFrcwogIC0gYWRqdXN0ICJoZWxwIiBvdXRwdXQKCiogUGF0Y2hlcyBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKICAtIGZpeCBzcGVsbGluZyBlcnJvcnMKICAtIHNldCBHRF9GTEdfREVWSU5JVCBmbGFnIG9ubHkgYWZ0ZXIgZGV2aWNlIGZ1bmN0aW9uIHBvaW50ZXJzCiAgICBhcmUgdmFsaWQKICAtIEFsbG93IENGR19BTFRfTUVNVEVTVCBvbiBzeXN0ZW1zIHdoZXJlIGFkZHJlc3MgemVybyBpc24ndAogICAgd3JpdGVhYmxlCiAgLSBlbmFibGUgMy5yZCBVQVJUIChTVC1VQVJUKSBvbiBQWEEoWFNjYWxlKSBDUFVzCiAgLSB0cmlnZ2VyIHdhdGNoZG9nIHdoaWxlIHdhaXRpbmcgaW4gc2VyaWFsIGRyaXZlcgoKKiBBZGQgYXV0by11cGRhdGUgY29kZSBmb3IgVFJBQiBib2FyZCB1c2luZyBVU0IgbWVtb3J5IHN0aWNrcywKICBzdXBwb3J0IG5ldyBjb25maWd1cmF0aW9uIHdpdGggbW9yZSBtZW1vcnkKCiogZGlzYWJsZSBNUEM1MjAwIGJ1cyBwaXBlbGluaW5nIGFzIHdvcmthcm91bmQgZm9yIGJ1cyBjb250ZW50aW9uCgoqIE1vZGlmeSBYTEIgYXJiaXRlciBwcmlvcml0aWVzIG9uIE1QQzUyMDAgc28gYWxsIGRldmljZXMgdXNlIHNhbWUKICBwcmlvcml0eTsgY29uZmlndXJlIGNyaXRpY2FsIGludGVycnVwdHMgdG8gYmUgaGFuZGxlZCBsaWtlIGV4dGVybmFsCiAgaW50ZXJydXB0cwoKKiBNYWtlIElQQiBjbG9jayBvbiBNR1Q1MTAwL01QQzUyMDAgY29uZmlndXJhYmxlIGluIGJvYXJkIGNvbmZpZyBmaWxlOwogIGdvIGJhY2sgdG8gNjYgTUh6IGZvciBzdGFiaWxpdHkKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTUgU2VwIDIwMDM6CiAgLSBhZGQgZGVzY3JpcHRpb24gZm9yIG1pc3NpbmcgQ0ZHX0NNRF8qIGVudHJpZXMgaW4gdGhlIFJFQURNRSBmaWxlCiAgLSBzYWNzbmcgdHdlYWtzCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTQgU2VwIDIwMDM6CiAgZW5hYmxlIHdhdGNoZG9nIHN1cHBvcnQgZm9yIGFsbCBNUEM4MjR4IGJvYXJkcyB0aGF0IGhhdmUgYSB3YXRjaGRvZwoKKiBPbiBNUEM1MjAwLCByZXN0cmljdCBGRUMgdG8gYSBtYXhpbXVtIG9mIDEwIE1icHMgdG8gd29yayBhcm91bmQgdGhlCiAgIk5vbi1vY3RldCBBbGlnbmVkIEZyYW1lIiBlcnJvcnMgd2Ugc2VlIGF0IDEwMCBNYnBzCgoqIFBhdGNoIGJ5IFNoYXJhZCBHdXB0YSwgMTQgU2VwIDIwMDM6CiAgZml4IFNQUiBudW1iZXJzIGZvciB1cHBlciBCQVQgcmVnaXN0ZXIgKFtJRF1CQVRbNC03XVtVTF0pCgoqIFBhdGNoIGJ5IGxsYW5kcmUsIDExIFNlcCAyMDAzOgogIHVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBQUENoYW1lbGVvbkVWQiBib2FyZAoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDEzIFNlcCAyMDAzOgogIHZhcmlvdXMgY2hhbmdlcyB0byBWQ01BOSBib2FyZCBzcGVjaWZpYyBmaWxlcwoKKiBBZGQgSTJDIHN1cHBvcnQgZm9yIE1HVDUxMDAgLyBNUEM1MjAwCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMSBTZXAgMjAwMzoKICBDaGFuZ2VkIGRlZmF1bHQgbWVtb3J5IG9wdGlvbiBvbiBNUEM4MjY2QURTIHRvIE5PVCBiZSBQYWdlIEJhc2VkCiAgSW50ZXJsZWF2ZSwgc2luY2UgdGhpcyBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdpdGggdGhlIHN0YW5kYXJkCiAgMTZNQiBESU1NCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTIgU2VwIDIwMDM6CiAgZml4IE1ha2VmaWxlIHNldHRpbmdzIGZvciBzazk4IGRyaXZlcgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDAzOgogIC0gbmV3IGJvYXJkcyBhZGRlZDogRFA0MDUsIEhVQjQwNSwgUExVNDA1LCBWT0g0MDUKICAtIHNvbWUgZXNkIGJvYXJkcyB1cGRhdGVkCiAgLSBjcHUvcHBjNHh4L3NkcmFtLmM6IGRpc2FibGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVmb3JlIHNldHRpbmcKICAgIGZpcnN0IHZhbHVlcwogIC0gY3B1L3BwYzR4eC80MDVfcGNpLmM6IHNldCB2ZW5kb3IgaWQgb24gUFBDNDA1RVAgc3lzdGVtcwoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMSBTZXAgMjAwMzoKICBhZGQgYnVybi1pbiB0ZXN0cyBmb3IgVFJBQiBib2FyZAoKKiBFbmFibGUgaW5zdHJ1Y3Rpb24gY2FjaGUgb24gTVBDNTIwMCBib2FyZAoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgU2VwIDIwMDM6CiAgLSBmaXggVVNCIGRhdGEgcG9pbnRlciBhc3NpZ25tZW50IGZvciBidWxrIG9ubHkgdHJhbnNmZXIuCiAgLSBwcmV2ZW50IHRvIGRpc3BsYXkgZXJhc2VkIGRpcmVjdG9yaWVzIGluIEZBVCBmaWxlc3lzdGVtLgoKKiBDaGFuZ2Ugb3V0cHV0IGZvcm1hdCBmb3IgTkFORCBmbGFzaCAtIG1ha2UgaXQgbG9vayBsaWtlIGZvciBvdGhlcgogIG1lbW9yeSwgdG9vCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuODoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCgoqIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDkgU2VwIDIwMDM6CiAgYWRkIEZBVCBzdXBwb3J0IGZvciBJREUsIFNDU0kgYW5kIFVTQgoKKiBQYXRjaGVzIGJ5IEdsZWIgTmF0YXBvdiwgMiBTZXAgMjAwMzoKICAtIGNsZWFudXAgb2YgUE9TVCBjb2RlIGZvciB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCiAgLSBNUEM4MjR4IGxvY2tzIHdheTAgb2YgZGF0YSBjYWNoZSBmb3IgdXNlIGFzIGluaXRpYWwgUkFNOwogICAgdGhpcyBwYXRjaCB1bmxvY2tzIGl0IGFmdGVyIHJlbG9jYXRpb24gdG8gUkFNIGFuZCBpbnZhbGlkYXRlcwogICAgdGhlIGxvY2tlZCBlbnRyaWVzLgoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDMwIEF1ZyAyMDAzOgogIG5ldyBJMkMgZHJpdmVyIGZvciBtcGMxMDcgYnJpZGdlLiBOb3cgd29ya3MgZnJvbSBmbGFzaC4KCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMTEgQXVnIDIwMDM6CiAgLSBKRkZTMjogZml4IHR5cG8gaW4gY29tbW9uL2NtZF9qZmZzMi5jCiAgLSBKRkZTMjogZml4IENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUyBvcHRpb24KICAtIEpGRlMyOiByZW1vdmUgbm9kZSB2ZXJzaW9uIDAgd2FybmluZwogIC0gSkZGUzI6IGFjY2VwdCBKRkZTMiBQQURESU5HIG5vZGVzCiAgLSBTWE5JODU1VDogYWRkIEFNMjlMVjgwMCBzdXBwb3J0CiAgLSBTWE5JODU1VDogbW92ZSBlbnZpcm9ubWVudCBmcm9tIEVFUFJPTSB0byBmbGFzaAogIC0gU1hOSTg1NVQ6IGJvb3QgZnJvbSBKRkZTMiBpbiBOT1Igb3IgTkFORCBmbGFzaAoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTEgQXVnIDIwMDM6CiAgZml4ZXMgZm9yIEkyQyBvbiBNUEM4MjQwCiAgLSBmaXggaTJjX3dyaXRlIHJvdXRpbmUKICAtIGZpeCBpcHJvYmUgY29tbWFuZAogIC0gZWxpbWluYXRlcyB1c2Ugb2YgZ2xvYmFsIHZhcmlhYmxlcywgcGx1cyBkZWFkIGNvZGUsIGNsZWFudXAuCgoqIEFkZCBzdXBwb3J0IGZvciBVU0IgTWFzcyBTdG9yYWdlIERldmljZXMgKEJCQikKICAodGVzdGVkIHdpdGggVVNCIG1lbW9yeSBzdGlja3Mgb25seSkKCiogQXZvaWQgZmxpY2tlciBvbiBUUkFCJ3MgVkZECgoqIEFkZCBzdXBwb3J0IGZvciBTSzk4eHggZHJpdmVyCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCgoqIFN1cHBvcnQgSWNlQ3ViZSBib2FyZCBjb25maWd1cmF0aW9ucyB3aXRoIDEgeCBBTUQgQU0yOUxWMDY1ICg4IE1CKQogIG9yIDEgeCBBTTI5TFY2NTIgKHR3byBMVjA2NSBpbiBvbmUgY2hpcCA9IDE2IE1CKTsKICBSdW4gSVBCIGF0IDEzMyBNaHo7IGFkanVzdCB0aGUgTUlJIGNsb2NrIGZyZXF1ZW5jeSBhY2NvcmRpbmdseQoKKiBTZXQgQlJHX0NMSyBvbiBQTTgyNS84MjYgdG8gNjRNSHogKFZDT19PVVQgLyA0LCBpbnN0ZWFkIG9mIDE2CSBNSHopCiAgdG8gYWxsb3cgZm9yIG1vcmUgYWNjdXJhdGUgYmF1ZHJhdGUgc2V0dGluZ3MKICAoZXJyb3Igbm93IDAuNyUgYXQgMTE1IGticHMsIGluc3RlYWQgb2YgMy41JSBiZWZvcmUpCgoqIFBhdGNoIGJ5IEFuZHJlYXMgTW9ociwgNCBTZXAgMjAwMzoKICBGaXggYSBsb3Qgb2Ygc3BlbGxpbmcgZXJyb3JzCgoqIEFkZCBzdXBwb3J0IGZvciBQUENoYW1lbGVvbiBFdmFsIEJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBQM0c0IGJvYXJkCgoqIEZpeCBwcm9ibGVtIHdpdGggTUdUNTEwMCBGRUMgZHJpdmVyOiBhZGQgImVhcmx5IiBNQUMgYWRkcmVzcwogIGluaXRpYWxpemF0aW9uCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDcgQXVnIDIwMDM6CiAgY2hlY2sgQkNTUiB0byBkZXRlY3QgaWYgdGhlIGJvYXJkIGlzIGNvbmZpZ3VyZWQgaW4gUENJIG1vZGUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC43Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IFJhZ2h1IEtyaXNobmFwcmFzYWQsIDcgQXVnIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIEFkZGVyIElJIE1QQzg1MlQgbW9kdWxlCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTkgQXVnIDIwMDM6CiAgZml4IFRJIElubm92YXRvci9PTUFQMTUxMCBwaW4gY29uZmlncwoKKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDE4IEF1ZyAyMDAzCiAgLSBhZGQgc3VwcG9ydCBmb3IgYXJtOTI2ZWpzIGNwdSBjb3JlCiAgLSBhZGQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNjEwIElubm92YXRvciBCb2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNCBBdWcgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgYnppcDIgdW5jb21wcmVzc2lvbgoKKiBBZGQgR0NDIGxpYnJhcnkgdG8gZXhhbXBsZXMvTWFrZWZpbGUgc28gR0NDIHV0aWxpdHkgZnVuY3Rpb25zIHdpbGwKICBiZSByZXNvbHZlZCwgdG9vCgoqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQgdXNpbmcgc29mdHdhcmUgSTJDIGRyaXZlcgogIChiZWNhdXNlIG9mIGJldHRlciByZXNwb25zZSB0byBpcHJvYmUgY29tbWFuZCk7IGZpeCBwcm9ibGVtIHdpdGgKICAicmVzZXQiIGNvbW1hbmQKCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEF1ZyAyMDAzOgogIEFkZGVkIENPTkZJR19CT09UUF9ETlMyIGFuZCBDT05GSUdfQk9PVFBfU0VORF9IT1NUTkFNRSB0bwogIENPTkZJR19CT09UUF9NQUtTIChzZWUgUkVBRE1FKS4KCiogRml4IElDVTg2MiBlbnZpcm9ubWVudCBwcm9ibGVtCgoqIEZpeCBSQU0gc2l6ZSBkZXRlY3Rpb24gZm9yIFJNVSBib2FyZAoKKiBJbXBsZW1lbnQgInJlc2V0IiBmb3IgTUdUNTEwMC9NUEM1MjAwIHN5c3RlbXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC42Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1ha2UgRXRoZXJuZXQgYXV0b25lZ290aWF0aW9uIG9uIElOQ0EtSVAgd29yayBmb3IgYWxsIGNsb2NrIHJhdGVzOwogIGFsbG93IHNlbGVjdGlvbiBvZiBjbG9jayBmcmVxdWVuY3kgYXMgIm1ha2UiIHRhcmdldAoKKiBJbXBsZW1lbnQgbWVtb3J5IGF1dG9zaXppbmcgY29kZSBmb3IgSWNlQ3ViZSBib2FyZHMKCiogQ29uZmlndXJlIG5ldHdvcmsgcG9ydCBvbiBJTkNBLUlQIGZvciBhdXRvbmVnb3RpYXRpb24KCiogRml4IG92ZXJmbG93IHByb2JsZW0gaW4gbmV0d29yayB0aW1lb3V0IGNvZGUKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgOCBBdWcgMjAwMzoKICBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAgKGNyYzMyX25vX2NvbXAsIHRvbykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBVcGRhdGUgZm9yIFRRTSBib2FyZCBkZWZhdWx0czoKICBkaXNhYmxlIGNsb2Nrc19pbl9taHosIGVuYWJsZSBib290IGNvdW50IGxpbWl0CgoqIFJlbW92ZWQgdG9vbHMvZ2RiIGZyb20gIm1ha2UgYWxsIiB0YXJnZXQuICBBZGRlZCBtYWtlIHRhcmdldCAiZ2RidG9vbHMiCiAgaW4gdG9wbGV2ZWwgZGlyZWN0b3J5IGluc3RlYWQuICBSZW1vdmVkIGFzdGVzdC5jIGZyb20gdG9vbHMvZ2RiIGJlY2F1c2UKICBpdCBpcyBubyBsb25nZXIgcmVsZXZhbnQuCgoqIEZpeCBQQ0kgc3VwcG9ydCBmb3IgTVBDNTIwMCAvIEljZUN1YmUgQm9hcmQKCiogTWFwIElTUDEzNjIgVVNCIE9URyBjb250cm9sbGVyIGZvciBOU0NVIGJvYXJkCgoqIFBhdGNoIGJ5IEJyYWQgUGFya2VyLCAwMiBBdWcgMjAwMzoKICBmaXggc2M1MjBfY2RwIHByb2JsZW1zCgoqIEltcGxlbWVudCBCb290IEN5Y2xlIERldGVjdGlvbiAoUmVxLiAyLjMgb2YgT1NETCBDR0wgUmVxaXJlbWVudHMpCgoqIEFsbG93IGVyYXNlIGNvbW1hbmQgdG8gY3Jvc3MgZmxhc2ggYmFuayBib3VuZGFyaWVzCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjEgSnVsIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEx5bnV4V29ya3MgS2VybmVsIERvd25sb2FkYWJsZSBJbWFnZXMgKEtESXMpLgogIEJvdGggTHlueE9TIGFuZCBCbHVlQ2F0IGxpbnV4IEtESXMgYXJlIHN1cHBvcnRlZC4KCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjUgSnVsIDIwMDM6CiAgdXNlIG1vcmUgcmVsaWFibGUgcmVzZXQgZm9yIE9NQVAvOTI1VAoKKiBQYXRjaCBieSBOeWUgTGl1LCAyNSBKdWwgMjAwMzoKICBmaXggdHlwbyBpbiBtcGM4eHguaAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNCBKdWwgMjAwMzoKICBGaXhlcyBmb3IgY21kX25hbmQuYzoKICAtIEZpeGVkIG51bGwgZGVyZWZlcmVjZSB3aGljaCBjb3VsZCByZXN1bHQgaW4gaW5jb3JyZWN0IEVDQyB2YWx1ZXMuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciBkZXZpY2VzIHdpdGggbm8gUmVhZHkvQnVzeSBzaWduYWwgaG9va2VkIHVwLgogIC0gQWRkZWQgT01BUDE1MTAgcmVhZC93cml0ZSBwcm90ZWN0IGhhbmRsaW5nLgogIC0gRml4ZWQgbmFuZC5oJ3MgRUNDUE9TLiBBIGNvbmZsaWN0IGV4aXN0ZWQgd2l0aCBQT1M1IGFuZCBiYWRibG9jawogICAgZm9yIG5vbi1KRkZTMi4KICAtIFN3aXRjaGVkIGRlZmF1bHQgRUNDIHRvIGJlIEpGRlMyLgoKKiBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAKCiogUHJvdmlkZSBjb25zaXN0ZW50IGludGVyZmFjZSB0byBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MKICB0aGUgJ2dsb2JhbF9kYXRhJyBzdHJ1Y3R1cmUKICBQcm92aWRlIGEgZG9jL1JFQURNRS5zdGFuZGFsb25lIG1vcmUgdXNlZnVsIHRvIHVzZXJzL2RldmVsb3BlcnMuCgoqIE1ha2UgSWNlQ3ViZSBNR1Q1MTAwIEZFQyBkcml2ZXIgd29yawoKKiBJbXBsZW1lbnQgbmV3IG1lY2hhbmlzbSB0byBleHBvcnQgVS1Cb290J3MgZnVuY3Rpb25zIHRvIHN0YW5kYWxvbmUKICBhcHBsaWNhdGlvbnM6IGluc3RlYWQgb2YgdXNpbmcgKFBQQy1zcGVjaWZpYykgc3lzdGVtIGNhbGxzIHdlIG5vdwogIHVzZSBhIGp1bXAgdGFibGU7IHBsZWFzZSBzZWUgZG9jL1JFQURNRS5zdGFuZGFsb25lIGZvciBkZXRhaWxzCgoqIFBhdGNoIGJ5IERhdmUgV2VzdHdvb2QsIDI0IEp1bCAyMDAzOgogIGFkZGVkIHN1cHBvcnQgZm9yIFVuaXR5IE9TIChhIHByb3ByaWV0YXJ5IE9TKQoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyMyBKdWwgMjAwMzoKICBhZGQgImltbHMiIGNvbW1hbmQgdG8gcHJpbnQgZmxhc2ggdGFibGUgb2YgY29udGVudHMKCiogRml4IGNvbGQgYm9vdCBkZXRlY3Rpb24gZm9yIGxvZyBidWZmZXIgcmVzZXQKCiogUmV0dXJuIGVycm9yIGZvciBpbnZhbGlkIGxlbmd0aCBzcGVjaWZpZXJzIHdpdGggImNwLlgiIGV0Yy4KCiogRml4IHN0YXJ0dXAgcHJvYmxlbSBvbiBNSVBTCgoqIEFsbG93IGZvciBDT05GSUdfU1BMQVNIX1NDUkVFTiBldmVuIHdoZW4gbm8gZXhwbGljaXQKICBiaXRtYXAgc3VwcG9ydCBpcyBjb25maWd1cmVkCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxOCBKdWwgMjAwMzoKICAtIGZpeCBlbmRpbmFuZXNzIHByb2JsZW0gaW4gY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjMS5jCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOCBKdWwgMjAwMzoKICAtIGZpeCBtZW1vcnkgY29uZmlndXJhdGlvbiBmb3IgTUlQNDA1VAogIC0gZml4IHByaW50b3V0IG9mIGJhdWRyYXRlIGZvciAibG9hZGIgPGxvYWRhZGRyPiA8YmF1ZHJhdGU+IgoKKiBDbGVhbnVwIG9mIFRRTTgyeHggY29uZmlndXJhdGlvbnM7IHVzZSAib2ZmaWNpYWwiIGJvYXJkIHR5cGVzCiAgdG8gbWFrZSBzZWxlY3Rpb24gZWFzaWVyLgoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBKdWwgMjAwMzoKICBhZGQgZGVsYXkgdG8gZ2V0IEkyQyB3b3JraW5nIHdpdGggImltbSIgY29tbWFuZCBhbmQgczNjMjR4MF9pMmMuYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNyBKdWx5IDAzOgogIC0gRml4ZWQgYnVnIGluIE9NQVAxNTEwIGJhdWQgcmF0ZSBkaXZpc29yIHNldHRpbmdzLgoKKiBQYXRjaCBieSBOeWUgTGl1LCAxNiBKdWx5IDIwMDM6CiAgTVBDODYwRkFEUyBmaXhlczoKICAtIGFkZCBNUEM4NnhBRFMgc3VwcG9ydCAodXNlcyBNUEM4NnhBRFMuaCkKICAtIGFkZCA4NjZQL1QgY29yZSBzdXBwb3J0IChhbHNvIE1QQzg1OVQvTVBDODU5RFNML01QQzg1MlQpCiAgICBvIFBMUFJDUiBjaGFuZ2VzCiAgICBvIEJSRyBjaGFuZ2VzIChFWFRBTC9YVEFMIHJlc3RyaWN0ZWQgdG8gMTBNSHopCiAgICBvIGRvbid0IHRydXN0IGdjbGsoKSBzb2Z0d2FyZSBtZWFzdXJlbWVudCBieSBkZWZhdWx0LCBkZXBlbmQgb24KICAgICAgQ09ORklHXzh4eF9HQ0xLX0ZSRVEKICAtIGFkZCBEUkFNIFNJTU0gbm90IGluc3RhbGxlZCBkZXRlY3Rpb24KICAtIHVzZSBtb3JlICJjb3JyZWN0IiBTRFJBTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQogIC0gYWxsb3cgZGlmZmVyZW50IFNEUkFNIHNpemVzICg4eHhBRFMgaGFzIDhNKQogIC0gZGVmYXVsdCBERVIgaXMgMAogIC0gcmVtb3ZlIHVudXNlZCBNQU1SIGRlZmluZXMgZnJvbSBGQURTODYwVC5oIChhbGwgZG9uZSBpbiBmYWRzLmMpCiAgLSByZW5hbWUgTUFNUi9NQk1SIGRlZmluZXMgdG8gYmUgbW9yZSBjb25zaXN0ZW50LiBTaG91bGQgZXZlbnR1YWxseQogICAgYmUgbWVyZ2VkIGludG8gTXhNUiB0byBiZXR0ZXIgcmVmbGVjdCB0aGUgUG93ZXJRVUlDQyBkYXRhc2hlZXQuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE2IEp1bCAyMDAzOgogIHN1cHBvcnQgbmV3IE1vdG9yb2xhIFBRMkZBRFMtWlUgZXZhbHVhdGlvbiBib2FyZCB3aGljaCByZXBsYWNlZAogIE1QQzgyNjBBRFMgYW5kIE1QQzgyNjZBRFMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC40Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBJY2VDdWJlIGJvYXJkICh3aXRoIE1HVDUxMDAgYW5kIE1QQzUyMDAgQ1BVcykKCiogQWRkIHN1cHBvcnQgZm9yIE1HVDUxMDAgYW5kIE1QQzUyMDAgcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTUgSnVsIDIwMDM6CiAgdXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDA0IEp1bCAyMDAzCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBhcm05MjV0IGNwdSBjb3JlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE1MTAgSW5ub3ZhdG9yIEJvYXJkCgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMTQgSnVsIDIwMDM6CiAgLSBhZGQgSTJDIHN1cHBvcnQgZm9yIHMzYzI0MDAgc3lzdGVtcyAodHJhYiBib2FyZCkKICAtIChyZS0pIGFkZCAicGluZyIgdG8gY29tbWFuZCB0YWJsZQoKKiBGaXggaGFuZGxpbmcgb2YgInNsb3ciIFBPU1Qgcm91dGluZXMKCiogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwMzoKICAtIENvcnJlY3QgZmxhc2ggYW5kIEpGRlMyIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMKICAtIGZpeCBQVlIgdmFsdWVzIGFuZCBjbG9jayBnZW5lcmF0aW9uIGZvciBQb3dlclFVSUNDIElJIGZhbWlseQogICAgKDgyNzAvODI3NS84MjgwKQoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAwOCBKdWwgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBNNjhLIHRhcmdldHMKCiogUGF0Y2ggYnkgS2VuIENob3UsIDMgSnVsOgogIC0gRml4IFBDSSBjb25maWcgdGFibGUgZm9yIEEzMDAwCiAgLSBGaXggaW9iYXNlIGZvciBuYXRzZW1pLmMKICAgIChQQ0lfQkFTRV9BRERSRVNTXzAgaXMgdGhlIElPIGJhc2UgcmVnaXN0ZXIgZm9yIERQODM4MTUpCgoqIEFsbG93IHRvIGVuYWJsZSAic2xvdyIgUE9TVCByb3V0aW5lcyBieSBrZXkgcHJlc3Mgb24gcG93ZXItb24KKiBGaXggdGVtcGVyYXR1cmUgZGVwZW5kZW5kIHN3aXRjaGluZyBvZiBMQ0QgYmFja2xpZ2h0IG9uIExXTU9OCiogVHdlYWsgb3V0cHV0IGZvcm1hdCBmb3IgTFdNT04KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBKdWwgMjAwMzoKICAtIEZpeCBidWcgaW4gQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUuCiAgLSBBUjQwNSBjb25maWcgdXBkYXRlZC4KICAtIE9DUlRDL09SU0c6IGJzcCBjb21tYW5kIGFkZGVkLgogIC0gQVNINDA1IGJzcCB1cGRhdGUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgTlNDVSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODIzTSwgVFFNODUwTSwgVFFNODU1TSBhbmQgVFFNODYwTSBtb2R1bGVzCgoqIEFkZCBzdXBwb3J0IGZvciBBbTI5TFYxNjBNTCwgQW0yOUxWMzIwTUwsIGFuZCBBbTI5TFY2NDBNTAogIG1pcnJvciBiaXQgZmxhc2ggb24gVFFNOHh4TSBtb2R1bGVzCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAzMCBKdW4gMjAwMzoKICBnZXQgcmlkIG9mIE1LX0NNRF9FTlRSWSBtYWNybzsgdXBkYXRlIGRvYy9SRUFETUUuY29tbWFuZAoKKiBQYXRjaCBieSBTZWIgSmFtZXMsIDMwIEp1biAyMDAzOgogIEltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBJMkMgY29uZmlndXJhdGlvbiBpbiBSRUFETUUKCiogRml4IHByb2JsZW1zIHdpdGggcHJldmlvdXMgbG9nIGJ1ZmZlciAiZml4ZXMiCgoqIEZpeCBtaW5vciBoZWxwIHRleHQgaXNzdWVzCgoqICJsb2cgYXBwZW5kIiBkaWQgbm90IGFwcGVuZCBhIG5ld2xpbmUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEZpeCBzb21lIG1pc3NpbmcgY29tbWFuZHMsIGNsZWFudXAgaGVhZGVyIGZpbGVzCiAgKGF1dG9zY3JpcHQsIGJtcCwgYnNwLCBmYXQsIG1tYywgbmFuZCwgcG9ydGlvLCAuLi4pCgoqIFJld3JpdGUgY29tbWFuZCBsb29rdXAgYW5kIGhlbHAgY29tbWFuZCAoZml4IHByb2JsZW1zIHdpdGggYnViYmxlCiAgc29ydCB3aGVuIHNvcnRpbmcgY29tbWFuZCBuYW1lIGxpc3QpLiBNaW5vciBjbGVhbnVwIGhlcmUgYW5kIHRoZXJlLgoKKiBNZXJnZSBmcm9tICJzdGFibGUgYnJhbmNoIiwgdGFnIExBQkVMXzIwMDNfMDZfMjhfMTgwMC1zdGFibGU6CiAgLSBBbGxvdyB0byBjYWxsIHN5c21vbiBmdW5jdGlvbiBpbnRlcmFjdGl2ZWx5CiAgLSBQSUMgb24gTFdNT04gYm9hcmQgbmVlZHMgZGVsYXkgYWZ0ZXIgcG93ZXItb24KICAtIEFkZCBtaXNzaW5nIFJTUiBkZWZpbml0aW9ucyBmb3IgTVBDOHh4CiAgLSBJbXByb3ZlIGxvZyBidWZmZXIgaGFuZGxpbmc6IGd1YXJhbnRlZSBjbGVhbiByZXNldCBhZnRlciBwb3dlci1vbgogIC0gQWRkIHN1cHBvcnQgZm9yIEVYQklUR0VOIGJvYXJkIChha2EgImdlbmllIikKICAtIEFkZCBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKCiogQ29kZSBjbGVhbnVwOgogIC0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCB0cmFpbGluZyBlbXB0eSBsaW5lcywgQysrIGNvbW1lbnRzLCBldGMuCiAgLSBzcGxpdCBjbWRfYm9vdC5jIChzZXBhcmF0ZSBjbWRfYmRpbmZvLmMgYW5kIGNtZF9sb2FkLmMpCgoqIFBhdGNoZXMgYnkgS2VubmV0aCBKb2hhbnNzb24sIDI1IEp1biAyMDAzOgogIC0gbWFqb3IgcmV3b3JrIG9mIGNvbW1hbmQgc3RydWN0dXJlCiAgICAod29yayBkb25lIG1vc3RseSBieSBNaWNoYWwgQ2VuZHJvd3NraSBhbmQgSm9ha2ltIEtyaXN0aWFuc2VuKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDI2IEp1biAyMDAzOgogIC0gY3NiMjI2IGNvbmZpZ3VyYXRpb24gdXBkYXRlZAogIC0gY3JlZGl0cyBmb3IgbG9nb2RsIHBvcnQgdXBkYXRlZAogIC0gaW5ub2tvbSBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGxvZ29kbCB0cmVlIHVwZGF0ZSwgc3RpbGwgd2l0aCBjb2Rpbmcgc3R5bGUgaW5jb25zaXN0ZW5jaWVzCiAgLSBhZGRlZCBPQ00gZm9yIHBwYzQwNSB3YXJuaW5nIHRvIFJFQURNRQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjUgSnVuIDIwMDM6CiAgdXBkYXRlIE5ldFZpYSB3aXRoIFYyIGJvYXJkIHN1cHBvcnQKCiogSGVhZGVyIGZpbGUgY2xlYW51cCBmb3IgQVJNCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDI0IEp1biAyMDAzOgogIC0gbWFrZSBzdXJlIHRvIHVzZSBvbmx5IFUtYm9vdCBwcm92aWRlZCBoZWFkZXIgZmlsZXMKICAtIGZpeCBwcm9ibGVtcyB3aXRoICIucm9kYXRhLnN0cjEuNCIgc2VjdGlvbiBhcyB1c2VkIGJ5IEdDQy0zLngKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBKdW4gMjAwMzoKICAtIFVwZGF0ZSBlc2QgQVNINDA1IGJvYXJkIGZpbGVzLgogIC0gVXBkYXRlIGVzZCBEQVNBX1NJTSBjb25maWcgZmlsZS4KICAtIEFkZCBwaW5nIGNvbW1hbmQgdG8gc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMyBKdW4gMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjMgSnVuIDIwMDM6CiAgLSBjbGVhbnVwIG9mIEdDQyAzLnggY29tcGlsZXIgd2FybmluZ3MKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDQgSnVuIDIwMDM6CiAgYWRkIGxhcmdlIG1lbW9yeSBzdXBwb3J0IGZvciBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CiAgLSBFbmFibGVkIHN0YW5kYXJkIHUtYm9vdCBkZXZpY2UgYWJzdHJhY3Rpb24gZm9yIEFSTQogIC0gRW5hYmxlZCBjb25zb2xlIGRldmljZSBmb3IgQVJNCiAgLSBJbml0aWxpemVkIGJpX2JhdWRyYXRlIGZvciBBUk0KCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDIzIEFwciAyMDAzOgogIGZpeCBieXRlIG9yZGVyIGZvciA4MjR4IEkyQyBhZGRyZXNzZXMgKHdyaXRlIG9wKQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMCBKdW4gMjAwMzoKICAtIGh5bW9kIHVwZGF0ZQogIC0gY2xlYW51cCAoZXNwZWNpYWxseSBmb3IgZ2NjLTMueCBjb21waWxlcnMpCgoqIFBhdGNoIGJ5IFRvbSBHdWlsbGlhbXMsIDIwIEp1biAyMDAzOgogIGFkZGVkIENPTkZJR183NTBGWCBzdXBwb3J0IGZvciBJQk0gNzUwRlggcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBEZXZpbiBDcnVtYiwgMDIgQXByIDIwMDM6CiAgRml4IGNsb2NrIGRpdmlkZXIgcm91bmRpbmcgcHJvYmxlbSBpbiBkcml2ZXJzL3NlcmlhbC5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CiAgLSBGaXhlZCBzbWM5MWMxMTEgZHJpdmVyIHRvIHN5bmMgd2l0aCB0aGUgdS1ib290IGVudmlyb25tZW50CiAgICAoZHJpdmVyL3NtYzkxYzExMS5jKS4KICAtIEFkZGVkIGV0aF9pbml0IGVycm9yIHJldHVybiBjaGVjayBpbiBOZXRMb29wIChuZXQvbmV0LmMpLgoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTkgSnVuZSAyMDAzOgogIEFkZGVkIHN1cHBvcnQgZm9yIEEzMDAwIFNCQyBib2FyZCAoQXJ0aXMgTWljcm9zeXN0ZW1zIEluYy4pCgoqIFBhdGNoZXMgYnkgTXVycmF5IEplbnNlbiwgMTcgSnVuIDIwMDM6CiAgLSBIeW1vZCBib2FyZCBkYXRhYmFzZSBtb2RzOiBhZGQgIndobyIgZmllbGQgYW5kIG5ldyB4aWxpbnggY2hpcCB0eXBlcwogIC0gcHJvdmlkZSBuZXcgImluaXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gc28gY29kZSBleHRlcm5hbCB0bwogICAgImNvbW1vbi9tYWluLmMiIGNhbiB1c2UgdGhlICJyZXNldF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBiZWZvcmUKICAgIGVudGVyaW5nIHRoZSBtYWluIGxvb3AKICAtIGFkZCBEVFQgc3VwcG9ydCBmb3IgYWRtMTAyMSAobmV3IGZpbGUgZHR0L2FkbTEwMjEuYzsgY29uZmlnCiAgICBzbGlnaHRseSBkaWZmZXJlbnQuIHNlZSBpbmNsdWRlL2NvbmZpZ3MvaHltb2QuaCBmb3IgYW4gZXhhbXBsZQogICAgKHJlcXVpcmVzIENPTkZJR19EVFRfQURNMTAyMSwgQ09ORklHX0RUVF9TRU5TT1JTLCBhbmQKICAgIENGR19EVFRfQURNMTAyMSBkZWZpbmVkKQogIC0gYWRkIG5ldyAiZWVwcm9tX3Byb2JlKCkiIGZ1bmN0aW9uIHdoaWNoIGhhcyBzaW1pbGFyIGFyZ3MgYW5kCiAgICBiZWhhdmVzIGluIGEgc2ltaWxhciB3YXkgdG8gImVlcHJvbV9yZWFkKCkiIGV0Yy4KICAtIGFkZCA4MjYwIEZDQyBldGhlcm5ldCBsb29wYmFjayBjb2RlIChuZXcgImV0aF9sb29wYmFja190ZXN0KCkiCiAgICBmdW5jdGlvbiB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmluaW5nIENPTkZJR19FVEhFUl9MT09QQkFDS19URVNUKQogIC0gZ2RidG9vbHMgY29weXJpZ2h0IHVwZGF0ZQogIC0gZW5zdXJlIHRoYXQgc2V0X21zcigpIGV4ZWN1dGVzIHRoZSAic3luYyIgYW5kICJpc3luYyIgaW5zdHJ1Y3Rpb25zCiAgICBhZnRlciB0aGUgIm10bXNyIiBpbnN0cnVjdGlvbiBpbiBjcHUvbXBjODI2MC9pbnRlcnJ1cHRzLmMKICAtIDgyNjAgSS9PIHBvcnRzIGZpeDogT3BlbiBEcmFpbiBzaG91bGQgYmUgc2V0IGxhc3Qgd2hlbiBjb25maWd1cmluZwogIC0gYWRkIFNJVSBJUlEgZGVmaW5lcyBmb3IgODI2MAogIC0gYWxsb3cgTERTQ1JJUFQgb3ZlcnJpZGUgYW5kIE9CSkNGTEFHUyBpbml0aWFsaXphdGlvbjogY2hhbmdlIHRvCiAgICBjb25maWcubWsgdG8gYWxsb3cgYm9hcmQgY29uZmlndXJhdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIEdOVQogICAgbGlua2VyIHNjcmlwdCwgc2VsZWN0ZWQgdmlhIHRoZSBMRFNDUklQVCwgbWFrZSB2YXJpYWJsZSwgYW5kIHRvCiAgICBnaXZlIGFuIGluaXRpYWwgdmFsdWUgdG8gdGhlIE9CSkNGTEFHUyBtYWtlIHZhcmlhYmxlCiAgLSA4MjYwIGkyYyBlbmhhbmNlbWVudDoKICAgIG8gY29ycmVjdGx5IGV4dGVuZHMgdGhlIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGFsbAogICAgICBxdWV1ZWQgbWVzc2FnZXMgZm9yIGJvdGggdHJhbnNtaXQgYW5kIHJlY2VpdmUKICAgIG8gd2lsbCBub3QgY29udGludWUgd2l0aCByZWNlaXZlIGlmIHRyYW5zbWl0IHRpbWVzIG91dAogICAgbyBlbnN1cmVzIHRoYXQgdGhlIGVycm9yIGNhbGxiYWNrIGlzIGRvbmUgZm9yIGFsbCBxdWV1ZWQgdHgKICAgICAgYW5kIHJ4IG1lc3NhZ2VzCiAgICBvIGNvcnJlY3RseSBkZXRlY3RzIGJvdGggdHggYW5kIHJ4IHRpbWVvdXRzLCBvbmx5IGRlbGl2ZXJzIG9uZSB0bwogICAgICB0aGUgY2FsbGJhY2ssIGFuZCBkb2VzIG5vdCBvdmVyd3JpdGUgYW4gZWFybGllciBlcnJvcgogICAgbyBsb2dpYyBpbiBpMmNfcHJvYmUgbm93IGNvcnJlY3QKICAtIGFkZCAidnByaW50ZigpIiBmdW5jdGlvbiBzbyB0aGF0ICJwYW5pYygpIiBmdW5jdGlvbiBjYW4gYmUKICAgIHRlY2huaWNhbGx5IGNvcnJlY3QKICAtIG1hbnkgSHltb2QgYm9hcmQgY2hhbmdlcwoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTQgSnVuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTG9nb3Ryb25pYyBETCBkYXRhbG9nZ2VyIGJvYXJkCiAgLSBjbGVhbnVwIHNlcmlhbCBsaW5lIGFmdGVyIGtlcm1pdCBiaW5hcnkgZG93bmxvYWQKICAtIGFkZCBkZWJ1Z1ggbWFjcm8gKGRlYnVnIGxldmVsIHN1cHBvcnQpCiAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0LgoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTIgSnVuIDIwMDM6CiAgLSByZXdyaXRlIG9mIHRoZSBTM0MyNFgwIHJlZ2lzdGVyIGRlZmluaXRpb25zIHN0dWZmCiAgLSAiZHJpdmVyIiBmb3IgdGhlIGJ1aWx0LWluIFMzQzI0WDAgUlRDCgoqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTIgSnVuIDIwMDM6CiAgLSBBZGQgTUlJIHN1cHBvcnQgYW5kIEV0aGVybmV0IFBIWSBpbml0aWFsaXphdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZAogIC0gRml4IGluY29ycmVjdCBTSVVNQ1IgaW5pdGlhbGlzYXRpb24gY2F1c2VkIGJ5IHdyb25nIEhhcmQgUmVzZXQKICAgIGNvbmZpZ3VyYXRpb24gd29yZCBzdXBwbGllZCBieSBGUEdBIG9uIHNvbWUgTVBDODI2MEFEUyBib2FyZHMKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDEwIEp1biAyMDAzOgogIFVuaWZ5IHN0YXR1cyBMRUQgaW50ZXJmYWNlCgoqIEFkZCBzdXBwb3J0IGZvciBEUzEyODg3IFJUQzsgYWRkIFJUQyBzdXBwb3J0IGZvciBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMTEgSnVuIDIwMDM6CiAgTW9kaWZpY2F0aW9ucyBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0CiAgLSBBZGQgQXRtZWwgRGF0YUZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuCiAgLSBBZGQgcG9zc2liaWxpdHkgdG8gYm9vdCBhIExpbnV4IGZyb20gRGF0YUZsYXNoIHdpdGggQk9PVE0gY29tbWFuZC4KICAtIEFkZCBGbGFzaCBkZXRlY3Rpb24gb24gQXRtZWwgQVQ5MVJNOTIwMERLCiAgICAoYmV0d2VlbiBBdG1lbCBBVDQ5QlYxNjE0IGFuZCBBVDQ5QlYxNjE0QSBmbGFzaGVzKQogIC0gUmVwbGFjZSBvbGQgRXRoZXJuZXQgUEhZIGxheWVyIGZ1bmN0aW9ucwogIC0gQ2hhbmdlIGxpbmsgYWRkcmVzcwoKKiBQYXRjaCBieSBGcmFuayBTbWl0aCwgOSBKdW4gMjAwMzoKICB1c2UgQ1JJVF9FWENFUFRJT04gZm9yIG1hY2hpbmUgY2hlY2sgb24gNHh4CgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDEzIEp1biAyMDAzOgogIGFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSAiY2FyaW5mbyIgY29tbWFuZCBpbiBjbWRfaW1tYXAuYwoKKiBGaXggQ09ORklHX05FVF9NVUxUSSBzdXBwb3J0IGluIGluY2x1ZGUvbmV0LmgKCiogUGF0Y2hlcyBieSBLeWxlIEhhcnJpcywgMTMgTWFyIDIwMDM6CiAgLSBBZGQgRkFUIHBhcnRpdGlvbiBzdXBwb3J0CiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBGQVQKICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgdmlkZW8KICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgTU1DCiAgLS0tLQogIC0gRW5hYmxlIE1NQyBhbmQgRkFUIGZvciBsdWJib2NrIGJvYXJkCiAgLSBPdGhlciBtaXNjIGNoYW5nZXMgZm9yIGx1YmJvY2sgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCBBcHJpbCAwMiwgMjAwMzoKICBmaXggZm9yIFNNU0M5MTExMSBkcml2ZXIKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA0IEp1biAyMDAzOgogIG1ha2UgcHBjNDA1IGV0aGVybmV0IGRyaXZlciBjb21wYXRpYmxlIHdpdGggQ09ORklHX05FVF9NVUxUSSBvcHRpb24KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNSBKdW4gMjAwMzoKICAtIFBQQzR4eDogRml4IGJ1ZyBmb3IgaW5pdGlhbCBzdGFjayBpbiBkYXRhIGNhY2hlIGFzIHBvaW50ZWQgb3V0IGJ5CiAgICBUaG9tYXMgU2NoYWVmZXIgKHRzY2hhZWZlckBnaWdhLXN0cmVhbS5kZSkuIE5vdyBpbml0YWwgc3RhY2sgaW4KICAgIGRhdGEgY2FjaGUgY2FuIGJlIHVzZWQgZXZlbiBpZiB0aGUgY2hpcCBzZWxlY3QgaXMgaW4gdXNlLgogIC0gQ0ZHX1JYX0VUSF9CVUZGRVIgYWRkZWQgdG8gc2V0IHRoZSBldGhlcm5ldCByZWNlaXZlIGJ1ZmZlciBjb3VudAogICAgKHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pLgogIC0gQ2hhbmdlZCBjb25maWcgZmlsZXMgb2YgQ09ORklHX0VFUFJPMTAwIGJvYXJkcyB0byB1c2UgdGhlCiAgICBDRkdfUlhfRVRIX0JVRkZFUiBkZWZpbmUuCgoqIEFkZCBzdXBwb3J0IGZvciBSTVUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgYXQgMTAwLzUwIE1IegoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgSnVuIDIwMDM6CiAgbWFqb3IgcmVjb25zdHJ1Y3Rpb24gb2YgbmV0d29ya2luZyBjb2RlOwogIGFkZCAicGluZyIgc3VwcG9ydCAob3V0Z29pbmcgb25seSEpCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBKdW5lIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDVUIGJvYXJkCgoqIFBhdGNoZXMgYnkgVWRpIEZpbmtlbHN0ZWluLCAyIEp1bmUgMjAwMzoKICAtIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSBrZXlib2FyZHMsIGluaXRpYWxpemVkIGJ5IGRlZmluaW5nIGEKICAgIGJvYXJkLXNwZWNpZmljIGRydl9rZXlib2FyZF9pbml0IGFzIHdlbGwgYXMgZGVmaW5pbmcgQ09ORklHX0tFWUJPQVJEIC4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBSQkM4MjMgYm9hcmQuCiAgLSBjcHUvbXBjOHh4L2xjZC5jIG5vdyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZXMgdGhlCiAgICBIb3Jpem9udGFsIFBpeGVsIENvdW50IGZpZWxkLgoKKiBGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gQk9PVFAgKGRoY3BfbGVhc2V0aW1lIG9wdGlvbikKICBbcG9pbnRlZCBvdXQgYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMiBKdW4gMjAwM10KCiogUGF0Y2ggYnkgTWFyayBSYWtlcywgMTQgTWF5IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIEludGVsIGUxMDAwIGdpZyBjYXJkcy4KCiogUGF0Y2ggYnkgTnllIExpdSwgMyBKdW4gMjAwMzoKICBmaXggY3JpdGljYWwgdHlwbyBpbiBNQU1SIGRlZmluaXRpb24gKGluY2x1ZGUvbXBjOHh4LmgpCgoqIEZpeCByZXF1aXJlbWVudCB0byBhbGlnbiBVLUJvb3QgaW1hZ2Ugb24gMTYga0IgYm91bmRhcmllcyBvbiBQUEMuCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDIgSnVuIDIwMDMKICBNaW5vciBjaGFuZ2VzIGZvciBLVVA0SyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOSBNYXkgMjAwMzoKICBGaXhlZCByYXJwIGJvb3QgbWV0aG9kIGZvciBJQTMyIGFuZCBvdGhlciBsaXR0bGUtZW5kaWFuIENQVXMuCgoqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOCBNYXkgMjAwMzoKICBBZGRlZCBwb3J0IEkvTyBjb21tYW5kcy4KCiogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAyOCBNYXkgMjAwMwogIC0gY3B1L21wYzgyNHgvc3RhcnQuUzogZml4IHJlbG9jYXRpb24gY29kZSB3aGVuIGJvb3RpbmcgZnJvbSBSQU0KICAtIG1pbm9yIHBhdGNoZXMgZm9yIHV0eDgyNDUKCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAyOCBNYXkgMjAwMzoKICB4ODYgdXBkYXRlCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDkgTWF5IDIwMDMgKyAyNyBNYXkgMjAwMzoKICBhZGQgbmFuZCBmbGFzaCBzdXBwb3J0IHRvIFNYTkk4NTVUIGNvbmZpZ3VyYXRpb24KICBmaXgvZXh0ZW5kIG5hbmQgZmxhc2ggc3VwcG9ydDoKICAtIGZpeCAnbmFuZCBlcmFzZScgY29tbWFuZCBzbyBkb2VzIG5vdCBlcmFzZSBiYWQgYmxvY2tzCiAgLSBmaXggJ25hbmQgd3JpdGUnIGNvbW1hbmQgc28gZG9lcyBub3Qgd3JpdGUgdG8gYmFkIGJsb2NrcwogIC0gZml4IG5hbmRfcHJvYmUoKSBzbyBoYW5kbGVzIG5vIGZsYXNoIGRldGVjdGVkIHByb3Blcmx5CiAgLSBhZGQgZG9jL1JFQURNRS5uYW5kCiAgLSBhZGQgLmpmZnMyIGFuZCAub29iIG9wdGlvbnMgdG8gbmFuZCByZWFkL3dyaXRlCiAgLSBhZGQgJ25hbmQgYmFkJyBjb21tYW5kIHRvIGxpc3QgYmFkIGJsb2NrcwogIC0gYWRkICdjbGVhbicgb3B0aW9uIHRvICduYW5kIGVyYXNlJyB0byB3cml0ZSBKRkZTMiBjbGVhbiBtYXJrZXJzCiAgLSBtYWtlIE5BTkQgcmVhZC93cml0ZSBmYXN0ZXIKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDIzIE1heSAyMDAzOgogIFVwZGF0ZSBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBHZXQgKG1vc3RseSkgcmlkIG9mIENGR19NT05JVE9SX0xFTiBkZWZpbml0aW9uOyBjb21wdXRlIHJlYWwgbGVuZ3RoCiAgaW5zdGVhZCBDRkdfTU9OSVRPUl9MRU4gaXMgbm93IG9ubHkgdXNlZCB0byBkZXRlcm1pbmUJIF9hdF9jb21waWxlXwogIF90aW1lXyAgKCEpIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBlbWJlZGRlZCB3aXRoaW4gdGhlIFUtQm9vdCBpbWFnZSwKICBvciBpbiBhIHNlcGFyYXRlIGZsYXNoIHNlY3Rvci4KCiogQ2xlYW51cCBDRkdfREVSICNkZWZpbmVzIGluIGNvbmZpZyBmaWxlcyAod2QgbWFpbnRhaW5lZCBvbmx5KQoKKiBGaXggZGF0YSBhYm9ydCBleGNlcHRpb24gaGFuZGxpbmcgZm9yIGFybTkyMHQgQ1BVCgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbXMgd2l0aCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRG9uYWxkIFdoaXRlLCAyMSBNYXkgMjAwMzoKICBmaXggY2FsY3VsYXRpb24gb2YgYmFzZSBhZGRyZXNzIGluIHBjaV9ob3NlX2NvbmZpZ19kZXZpY2UoKQoKKiBGaXggYnVnIGluIGNvbW1hbmQgbGluZSBwYXJzaW5nOiAiY21kMTtjbWQyIiBpcyBzdXBwb3NlZCB0byBhbHdheXMKICBleGVjdXRlICJjbWQyIiwgZXZlbiBpZiAiY21kMSIgZmFpbHMuIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudAogIHRvICJydW4gdmFyMSB2YXIyIiB3aGVyZSB0aGUgY29udGVudHMgb2YgInZhcjIiIHdpbGwgTk9UIGJlCiAgZXhlY3V0ZWQgd2hlbiBhIGNvbW1hbmQgaW4gInZhcjEiIGZhaWxzLgoKKiBBZGQgemVyby1jb3B5IHJhbWRpc2sgc3VwcG9ydCAocmVxdWlyZXMgY29ycmVzcG9uZGluZyBrZXJuZWwgc3VwcG9ydCEpCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAyMCBNYXkgMjAwMzoKICBJbiBwcmVwYXJhdGlvbiBmb3IgYW4gaXhwIHBvcnQsIHJlbmFtZSBjcHUveHNjYWxlIGFuZCBhcmNoLXhzY2FsZQogIGludG8gY3B1L3B4YSBhbmQgYXJjaC1weGEuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjMgTWF5IDIwMDM6CiAgLSBJQk0gUFBDNDA1RVAgcG9ydCBhZGRlZC4KICAtIENPTkZJR19VQVJUMV9DT05TT0xFIGFkZGVkLiBJZiBkZWZpbmVkIGludGVybmFsIFVBUlQxIChhbmQgbm90CiAgICBVQVJUMCkgaXMgdXNlZCBhcyBkZWZhdWx0IFUtQm9vdCBjb25zb2xlLiBQUEM0eHggb25seSEKICAtIGVzZCBBU0g0MDUgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkKS4KICAtIEJVQklOR0E0MDVFUCBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQgLSBJQk0gRXZhbCBCb2FyZCkuCiAgLSBlc2QgQ1BDSTQwNUFCIGJvYXJkIGFkZGVkLgogIC0gZXNkIFBNQzQwNSBib2FyZCBhZGRlZC4KICAtIFVwZGF0ZSBvZiBzb21lIGVzZCBib2FyZHMuCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOSBNYWkgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNS0zIGJvYXJkCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDIyIE1heSAyMDAzOgogIEZpeCBwcm9ibGVtIHdpdGggb25seSBwYXJ0aWFsbHkgY2xlYXJlZCAuYnNzIHNlZ21lbnQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEyIE1heSAyMDAzOgogIGdldCBQQ0kgdG8gd29yayBvbiBhIE1QQzgyNjZBRFMgYm9hcmQ7IGluY29ycG9yYXRlIGNoYW5nZSB0bwogIGNwdS9tcGM4MjYwL3BjaS5jIHRvIGVuYWJsZSBvdmVycmlkZXMgb2YgUENJIG1lbW9yeSBwYXJhbWV0ZXJzCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDEgTWF5IDIwMDM6CiAgbWlub3IgcGF0Y2hlcyBmb3IgdGhlIEZBRFM4eHgKCiogUGF0Y2ggYnkgVGhvbWFzIFNjaORmZXIsIDI4IEFwciAyMDAzOgogIEZpeCBTUEQgaGFuZGxpbmcgZm9yIDI1NiBFQ0MgRElNTSBvbiBXYWxudXQKCiogQWRkIHN1cHBvcnQgZm9yIGFyYml0cmFyeSBiaXRtYXBzIGZvciBUUkFCJ3MJVkZEIGNvbW1hbmQ7CiAgYWxsb3cgdG8gcGFzcyBib290IGJpdG1hcCBhZGRyZXNzZXMgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzOwogIGFsbG93IGZvciB6ZXJvIGJvb3QgZGVsYXkKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIEdlad9pbmdlciwgMTkgTWF5IDIwMDI6CiAgT24gVFJBQjogd2FpdCB1bnRpbCB0aGUgZHVtbXkgYnl0ZSBoYXMgYmVlbiBjb21wbGV0ZWx5IHNlbnQKCiogUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAyMiBBcHIgMjAwMzoKICB1cGRhdGUgZm9yIENyYXlMMSBib2FyZAoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjEgQXByIDIwMDM6CiAgYWRkIGJvb3Qgc3VwcG9ydCBmb3IgQVJUT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDExIEFwciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzM4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjQgSmFuIDIwMDM6CiAgRml4IGNvdW50aW5nIG9mIGV4dGVuZGVkIHBhcnRpdGlvbnMgaW4gZGlza2Jvb3QgY29tbWFuZAoKKiBQYXRjaCBieSBDaHJpc3RvcGhlIExpbmRoZWltZXIsIDIwIE1heSAyMDAzOgogIGFsbG93IHRoZSB1c2Ugb2YgQ0ZHX0xPQURTIHdoZW4gQ0ZHX05PX0ZMQVNIIGlzIHNldAoKKiBGaXggU0RSQU0gdGltaW5nIG9uIFB1cnBsZSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIG9uIEFUQyBib2FyZAogIChpbmNsdWRlcyBzdXBwb3J0IGZvciBJbnRlbCA4MjM2NSBhbmQgY29tcGF0aWJsZSBQQyBDYXJkIGNvbnRyb2xsZXJzLAogIGFuZCBZZW50YS1jb21wYXRpYmxlIFBDSS10by1DYXJkQnVzIGNvbnRyb2xsZXJzKQoKKiBQYXRjaCBieSBNYXRoaWpzIEhhYXJtYW4sIDA4IE1heSAyMDAzOgogIEFkZCBsYW45MWM5NiBkcml2ZXIgKHRlc3RlZCBvbiBMdWJib2NrIGFuZCBjdXN0b20gUFhBMjUwIGJvYXJkIG9ubHkpCgoqIEZpeCBwcm9ibGVtIHdpdGggdXNhZ2Ugb2YgInRydWUiICh1bmRlZmluZWQgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBiZmQuaCkKCiogQWRkIHN1cHBvcnQgZm9yIFByb21lc3MgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IEtlaXRoIE91dHdhdGVyLCAyOCBBcHIgMjAwMzoKICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgYW5kIGFkZGl0aW9ucyB0byBHRU44NjBUIGJvYXJkIHNwZWNpZmljIGNvZGUuCiAgLSBBZGRlZCBHRU44NjBfU0MgdmFyaWFudCB0byBHRU44NjBULgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyB0byBHRU44NjBUIGRvY3VtZW50YXRpb24uCiAgLSBDb3JyZWN0IGR1cGxpY2F0ZSBlbnRyeSBpbiBVLUJvb3QgQ1JFRElUUyBmaWxlLgogIC0gQWRkIEdFTjg2MFRfU0MgZW50cnkgaW4gTUFJTlRBSU5FUlMgZmlsZS4KICAtIFVwZGF0ZSBDUkVESVRTIGZpbGUgd2l0aCBHRU44NjBUX1NDIGluZm8uCgoqIFVwZGF0ZSBTbWl0aHMgQWVyb3NwYWNlIGFkZHJlc3NlcyBpbiBNQUlOVEFJTkVSUyBmaWxlCgoqIEZpeCBlcnJvciBoYW5kbGluZyBpbiBodXNoJ3MgdmVyc2lvbiBvZiAicnVuIiBjb21tYW5kCgoqIExXTU9OIGV4dGVuc2lvbnM6CiAgLSBTcGxhc2hzY3JlZW4gc3VwcG9ydAogIC0gbW9kZW0gc3VwcG9ydAogIC0gc3lzbW9uIHN1cHBvcnQKICAtIHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBlbmFibGluZyBvZiBMQ0QKCiogQWxsb3cgYm9vdGluZyBmcm9tIG9sZCAiUFBDQm9vdCIgZGlzayBwYXJ0aXRpb25zCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjU1IEJvYXJkIC8gTVBDODI1NSBDUFUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1ha2Ugc3VyZSBCbG9jayBMb2NrIEJpdHMgZ2V0IGNsZWFyZWQgaW4gUjM2ME1QSSBmbGFzaCBkcml2ZXIKCiogTVBDODIzIExDRCBkcml2ZXI6IEZpbGwgY29sb3IgbWFwIGJhY2t3YXJkcywgdG8gYWxsb3cgZm9yIHN0ZWFkeQogIGRpc3BsYXkgd2hlbiBMaW51eCB0YWtlcyBvdmVyCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TICh0aGlzIHRpbWUgZm9yIHJlYWwpLgoKKiBBZGQgc3VwcG9ydCBmb3IgImJtcCBpbmZvIiBhbmQgImJtcCBkaXNwbGF5IiBjb21tYW5kcyB0byBsb2FkCiAgYml0bWFwIGltYWdlczsgdGhpcyBjYW4gYmUgdXNlZCAoZm9yIGV4YW1wbGUgaW4gYSAicHJlYm9vdCIKICBjb21tYW5kKSB0byBkaXNwbGF5IGEgc3BsYXNoIHNjcmVlbiB2ZXJ5IHF1aWNrbHkgYWZ0ZXIgcG93ZXJvbi4KCiogQWRkIHN1cHBvcnQgZm9yIDEzMyBNSHogY2xvY2sgb24gSU5DQS1JUCBib2FyZAoKKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTAgQXByIDIwMDM6CiAgVXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCgoqIEFkZCBuZXcgbWVhbmluZyB0byAiYXV0b3N0YXJ0IiBlbnZpcm9ubWVudCB2YXJpYWJsZToKICBJZiBzZXQgdG8gIm5vIiwgYSBzdGFuZGFsb25lIGltYWdlIHBhc3NlZCB0byB0aGUKICAiYm9vdG0iIGNvbW1hbmQgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGxvYWQgYWRkcmVzcwogIChhbmQgZXZlbnR1YWxseSB1bmNvbXByZXNzZWQpLCBidXQgTk9UIGJlIHN0YXJ0ZWQuCiAgVGhpcyBjYW4gYmUgdXNlZCB0byBsb2FkIGFuZCB1bmNvbXByZXNzIGFyYml0cmFyeQogIGRhdGEuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgQXByIDIwMDM6CiAgQ2hhbmdlZCBESENQIGNsaWVudCB0byB1c2UgSVAgYWRkcmVzcyBmcm9tIHNlcnZlciBvcHRpb24gZmllbGQgIzU0CiAgZnJvbSB0aGUgT0ZGRVIgcGFja2V0IGluIHRoZSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NCBpbiB0aGUgUkVRVUVTVAogIHBhY2tldC4gVGhpcyBmaXhlcyBhIHByb2JsZW0gdXNpbmcgYSBXaW5kb3dzIDIwMDAgREhDUCBzZXJ2ZXIsCiAgd2hlcmUgdGhlIERIQ1Atc2VydmVyIGlzIG5vdCB0aGUgVEZUUC1zZXJ2ZXIuCgoqIFNldCBtYXggYnJpZ2h0bmVzcyBmb3IgTU4xMTIzNiBkaXNwbGF5cyBvbiBUUkFCIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIG1vZHVsZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCA0IEFwciAyMDAzOgogIEFkZCBJRE1BIGV4YW1wbGUgY29kZSAodGVzdGVkIG9uIDgyNjAgb25seSkKCiogQWRkIHN1cHBvcnQgZm9yIFB1cnBsZSBCb2FyZCAoTUlQUzY0IDVLYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFM2NCA1S2MgQ1BVcwoKKiBGaXggbWlzc2luZyBzZXR0aW5nIG9mICJsb2FkYWRkciIgYW5kICJib290ZmlsZSIgb24gQVJNIGFuZCBNSVBTCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBBcHIgMjAwMzoKICAtIHVwZGF0ZSBNSVA0MDUtNCBib2FyZAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDQgQXByIDIwMDM6CiAgLSBVLUJvb3QgdmVyc2lvbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBhZGRlZAogICAgKENPTkZJR19WRVJTSU9OX1ZBUklBQkxFKS4KICAtIENoYW5nZWQgUFBDNDA1R1ByIHZlcnNpb24gZnJvbSBBIHRvIEIuCiAgLSBDaGFuZ2VkIENQQ0k0MDUgdG8gdXNlIENUUyBpbnN0ZWFkIG9mIERTUiBvbiBQUEM0MDUgVUFSVDEuCgoqIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDAzIEFwcmlsIDIwMDM6CiAgLSBmaXggUENJIElSUXMgb24gTVBMIGJvYXJkcwogIC0gZml4IHR3byBtb3JlIHVuLXJlbG9jYXRlZCBwb2ludGVyIHByb2JsZW1zCgoqIEZpeCBiZWhhdmlvdXIgb2YgInJ1biIgY29tbWFuZDoKICAtIHByaW50IGVycm9yIG1lc3NhZ2UgaXYgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QKICAtIHRlcm1pbmF0ZSBwcm9jZXNzaW5nIG9mIGFyZ3VtZW50cyBpbiBjYXNlIG9mIGVycm9yCgoqIFBhdGNoZXMgYnkgUGV0ZXIgRmlndWxpLCAxMCBNYXIgMjAwMwogIC0gQWRkIHN1cHBvcnQgZm9yIEJUVUFSVCBvbiBQWEEgcGxhdGZvcm0KICAtIEFkZCBzdXBwb3J0IGZvciBXRVAgRVAyNTAgKFBYQSkgYm9hcmQKCiogRml4IGZsYXNoIHByb2JsZW1zIG9uIElOQ0EtSVA7IGFkZCB0b29sIHRvIGFsbG93IGJydW5pbmcgaW1hZ2VzICB0bwogIGZsYXNoIHVzaW5nIGEgQkRJMjAwMAoKKiBJbXBsZW1lbnQgZml4IGZvciBJMkMgRWRnZSBDb25kaXRpb25zIHByb2JsZW0gZm9yIGFsbCBib2FyZHMgdGhhdAogIHVzZSB0aGUgYml0LWJhbmdpbmcgZHJpdmVyIChjb21tb24vc29mdF9pMmMuYykKCiogUGF0Y2ggYnkgTWFydGluIFdpbmlzdG9lcmZlciwgMjMgTWFyIDIwMDMKICAtIEFkZCBwb3J0IHRvIE1QQzU1NS81NTYgbWljcm9jb250cm9sbGVycwogIC0gQWRkIHN1cHBvcnQgZm9yIGNtaSBjdXN0b21lciBib2FyZCB3aXRoCiAgICBJbnRlbCAyOEYxMjhKM0EsIDI4RjMyMEozQSBvciAyOEY2NDBKM0EgZmxhc2guCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMjggTWFyIDIwMDM6CiAgLSBmaXggY29tbW9uL2NtZF9uYW5kLmMKCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDI0IE1hciAyMDAzOgogIC0gYWRkIHRocmVhZHMgLyBzY2hlZHVsZXIgZXhhbXBsZSBjb2RlCgoqIEFkZCBwYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMzEgTWFyIDIwMDM6CiAgLSBhZGQgY3RybC1jIHN1cHBvcnQgZm9yIGtlcm1pdCBkb3dubG9hZAogIC0gYWxpZ24gYmRpbmZvIG91dHB1dCBvbiBBUk0KICAtIGNzYjIyNiBib2FyZDogYnJpbmcgaW4gc3luYyB3aXRoIGlubm9rb20vbWVtc2V0dXAuUwogIC0gY3NiMjI2IGJvYXJkOiBmaXggTURSRUZSIGhhbmRsaW5nCiAgLSBtaXNjIGRvYyBmaXhlcyAvIGV4dGVuc2lvbnMKICAtIGlubm9rb20gYm9hcmQ6IGNsZWFudXAsIE1EUkVGUiBmaXggaW4gbWVtc2V0dXAuUywgY29uZmlnIHVwZGF0ZQogIC0gYWRkIEJPT1RfUFJPR1JFU1MgdG8gYXJtbGludXguYwoKKiBBZGQgQ1BVIElELCB2ZXJzaW9uLCBhbmQgY2xvY2sgc3BlZWQgZm9yIElOQ0EtSVAKCiogUGF0Y2hlcyBieSBEYXZlIEVsbGlzLCAxOCBNYXIgMjAwMyBmb3IgU1hOSTg1NVQgYm9hcmQ6CiAgLSBmaXggU1JBTSBhbmQgU0RSQU0gbWVtb3J5IHNpemluZwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydAogIC0gYWRkIE1BQyBhZGRyZXNzIGZvciBzZWNvbmQgKFNDQzEpIGV0aGVybmV0IHBvcnQKCiogVXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgZm9yIFRRTTgyNjAgYm9hcmQKCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNiBNYXIgMjAwMzoKICAtIEFkZCBOQU5EIGZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBlcmFzaW5nIE5BTkQKICAgIGZsYXNoIChjZXJ0YWluIGZvcm1zIG9mIHdoaWNoIGFyZSBjYWxsZWQgU21hcnRNZWRpYSkuCiAgLSBBZGQgc3VwcG9ydCBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0LgoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTkgTWFyIDIwMDM6CiAgLSB1c2UgYXJtLWxpbnV4LWdjYyBhcyBkZWZhdWx0IGNvbXBpbGVyIGZvciBBUk0KICAtIGZpeCBpMmMgZml4dXAgY29kZQogIC0gZml4IG1pc3NpbmcgYmF1ZHJhdGUgc2V0dGluZwogIC0gYWRkZWQgJGxvYWRhZGRyIC8gQ0ZHX0xPQURfQUREUiBzdXBwb3J0IHRvIGxvYWRiCiAgLSBtb3ZlZCAiaWdub3JpbmcgdHJhaWxpbmcgY2hhcmFjdGVycyIgX2JlZm9yZV8gdS1ib290IHdhbnRzIHRvCiAgICBwcmludCBvdXQgZGlhZ25vc3RpY3MgbWVzc2FnZXM7IHJlbW92ZXMgYm9ndXMgY2hhcmFjdGVycyBhdCB0aGUKICAgIGVuZCBvZiB0cmFuc21pc3Npb24KCiogUGF0Y2ggYnkgSm9obiBaaGFuLCAxOCBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU2lub1ZlZSBNaWNyb3N5c3RlbXMgU0M4eHggYm9hcmRzCgoqIFBhdGNoIGJ5IFJvbGYgT2ZmZXJtYW5ucywgMjEgTWFyIDIwMDM6CiAgcG9ydGVkIHRoZSBkbnAxMTEwIHJlbGF0ZWQgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IGFybWJvb3QgY3ZzIHRvCiAgY3VycmVudCB1LWJvb3QgY3ZzLiBzbWM5MTExMSBkb2VzIG5vdCB3b3JrLiBwcm9ibGVtIG1hcmtlZCBpbgogIHNtYzkxMTExLmMsIGdyZXAgZm9yICJGSVhNRSIuCgoqIFBhdGNoIGJ5IEJyaWFuIEF1bGQsIDI1IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTVE0gZmxhc2ggY2hpcHMgb24gZWJvbnkgYm9hcmQKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBNUEM4MjUwIEJvYXJkcyAoUE04MjUgbW9kdWxlKQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI1IE1hciAyMDAzOgogIC0gUENJNDA1IHVwZGF0ZS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBNYXIgMjAwMzoKICAtIENQQ0k0MDUyIHVwZGF0ZSAoc3VwcG9ydCBmb3IgcmV2aXNpb24gMykuCiAgLSBTZXQgZWRnZSBjb25kaXRpb25pbmcgY2lyY3VpdHJ5IG9uIFBQQzQwNUdQciBmb3IgY29tcGF0aWJpbGl0eQogICAgdG8gZXhpc3RpbmcgUFBDNDA1R1AgZGVzaWducy4KICAtIENsaXAgdWRpdiB0byA1IGJpdHMgb24gUFBDNDA1IChzZXJpYWwuYykuCgoqIEV4dGVuZCBJTkNBSVAgYm9hcmQgc3VwcG9ydDoKICAtIGFkZCBhdXRvbWF0aWMgUkFNIHNpemUgZGV0ZWN0aW9uCiAgLSBhZGQgImJkaW5mbyIgY29tbWFuZAogIC0gcGFzcyBmbGFzaCBhZGRyZXNzIGFuZCBzaXplIHRvIExpbnV4IGtlcm5lbAogIC0gc3dpdGNoIHRvIDE1MCBNSHogY2xvY2sKCiogQXZvaWQgZmxpY2tlciBvbiB0aGUgVFJBQidzIFZGRCBieSBzeW5jaHJvbml6aW5nIHRoZSBlbmFibGUgd2l0aAogIHRoZSBIU1lOQy9WU1lOQy4gUmVxdWlyZXMgbmV3IENQTEQgY29kZSAoVmVyc2lvbiAxMDEgZm9yIFJldi4gMTAwCiAgYm9hcmRzLCB2ZXJzaW9uIDE1MyBmb3IgUmV2LiAyMDAgYm9hcmRzKS4KCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDEyIE1hciAyMDAzOgogIEZpeCByZWxvY2F0aW9uIHByb2JsZW0gb2Ygc3RhdGljYWxseSBpbml0aWFsaXplZCBzdHJpbmcgcG9pbnRlcnMKICBpbiBjb21tb24vY21kX3BjaS5jCgoqIFBhdGNoIGJ5IEthaS1Vd2UgQmz2bSwgMTIgTWFyIDIwMDM6CiAgQ2xlYW51cCAmIGJ1ZyBmaXhlcyBmb3IgSkZGUzIgY29kZToKICAtIHRoZSBtZW1vcnkgbWFuZ2VtZW50IHdhcyBicm9rZW4uIEl0IGNhdXNlZCBoYXZvYyBvbiBtYWxsb2MgYnkKICAgIHdyaXRpbmcgYmV5b25kIHRoZSBibG9jayBib3VuZGFyaWVzLgogIC0gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBmb3IgZmlsZXMgd2FzIHdyb25nLCBzb21ldGltZXMgcmVzdWx0aW5nCiAgICBpbiBzaG9ydCBmaWxlIHJlYWRzLgogIC0gZGF0YSBjb3B5aW5nIG5vdyBvcHRpb25hbGx5IHRha2VzIGZyYWdtZW50IHZlcnNpb24gbnVtYmVycyBpbnRvCiAgICBhY2NvdW50LCB0byBhdm9pZCBjb3B5aW5nIGZyb20gb2xkZXIgZGF0YS4KICBTZWUgZG9jL1JFQURNRS5KRkZTMiBmb3IgZGV0YWlscy4KCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxMiBNYXIgMjAwMzoKICAtIDE2LzMyIE1CIGFuZCA1MC84MCBNSHogc3VwcG9ydCB3aXRoIGF1dG8tZGV0ZWN0aW9uIGZvciBJUDg2MAogIC0gRVRIMDUgYW5kIEJFREJVRyBzdXBwb3J0IGZvciBDVTgyNAogIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BDNDUKICAtIG5ldyBCT09UUk9NL0ZMQVNIMCBhbmQgRE9DIGJhc2UgZm9yIFBNODI2CgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTIgTWFyIDIwMDM6CiAgRml4IHRoZSBjaHBhcnQgY29tbWFuZCBvbiBpbm5va29tIGJvYXJkCgoqIE5hbWUgY2xlYW51cDoKICBtdiBpbmNsdWRlL2FzbS1pMzg2L3BwY2Jvb3QtaTM4Ni5oIGluY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaAogIHMvUFBDQm9vdC9VLUJvb3QvIGluIHNvbWUgZmlsZXMKICBzL3BJbWFnZS91SW1hZ2UvICBpbiBzb21lIGZpbGVzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE1IEphbiAyMDAzOgogIEZpeCAnJyBjb21tYW5kIGxpbmUgcXVvdGluZwoKKiBQYXRjaCBieSBUaGUgTEVPWCB0ZWFtLCAxOSBKYW4gMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRUxQVDg2MCBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIERhbGxhcyBkczE2NHggUlRDCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAzMSBKYW4gMjAwMzoKICAtIG1pbmltYWwgc2V0dXAgZm9yIENhcmRCdXMgYnJpZGdlcwogIC0gYWRkIEVFUFJPTSByZWFkL3dyaXRlIHN1cHBvcnQgaW4gdGhlIENTODkwMCBkcml2ZXIKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgYnVpbHRpbiBJMkMgY29udHJvbGxlciBpbiB0aGUgU2Ftc3VuZyBzM2MyNHgwIGNoaXBzCiAgLSBhZGQgc3VwcG9ydCBmb3IgTVBMJ3MgVkNNQTkgKFNhbXN1bmcgczNjMjQxMCBiYXNlZCkgYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgRmViIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMDcKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDUgRmViIDIwMDM6CiAgZml4IFBMUFJDUi9TQ0NSIGluaXQgc2VxdWVuY2Ugb24gOHh4IHRvIGFsbG93IGZvcgogIGNoYW5nZXMgb2YgRUJERiBieSBzb2Z0d2FyZQoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDcgRmViIDIwMDM6CiAgIkFQSS1jb21wYXRpYmlsaXR5IHBhdGNoIiBmb3IgNHh4IEkyQyBkcml2ZXIKCiogVFJBQiBmaXhlcyAvIGV4dGVuc2lvbnM6CiAgLSBSZXN0b3JlIFZGRCBicmlnaHRuZXNzIGFzIHNhdmVkIGluIGVudmlyb25tZW50CiAgLSBhZGQgc3VwcG9ydCBmb3IgRnVqaXRzdSBmbGFzaGVzCiAgLSBtYWtlIHN1cmUgYm90aCBidXp6ZXJzIGFyZSB0dXJuZWQgb2ZmIChkcml2ZSBsb3cgbGV2ZWwpCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNiBNYXIgMjAwMzoKICAtIGZpeCBidWcgaW4gQk9PVFAgY29kZSAobXVzdCB1c2UgTmV0Q29weUlQKQogIC0gdXBkYXRlIG9mIENTQjIyNiBwb3J0CiAgLSBjbGVhciBCU1Mgc2VnbWVudCBvbiBYU2NhbGUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGkyY19pbml0X2JvYXJkKCkgZnVuY3Rpb24KICAtIHVwZGF0ZSB0byB0aGUgSW5ub2tvbSBwbGF0dGZvcm0KCiogRXh0ZW5kIHN1cHBvcnQgZm9yIHJlZHVuZGFuZCBlbnZpcm9ubWVudHMgZm9yIGNvbmZpZ3VyYXRpb25zIHdoZXJlCiAgZW52aXJvbm1lbnQgc2l6ZSA8IHNlY3RvciBzaXplCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTkgRmViIDIwMDM6CiAgcGF0Y2hlcyBmb3IgdGhlIEludGVsIGx1YmJvY2sgYm9hcmQ6CiAgbWVtc2V0dXAuUyAtIGdlbmVyYWwgY2xlYW51cCAoYmFzZWQgb24gUm9iZXJ0J3MgY3NiMjI2IGNvZGUpCiAgZmxhc2guYyAtIG92ZXJoYXVsLCBhY3R1YWxseSB3b3JrcyBub3cKICBsdWJib2NrLmMgLSBmaXggaW5pdCBmdW5jcyB0byByZXR1cm4gcHJvcGVyIHZhbHVlCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNiBGZWIgMjAwMzoKICAtIEZpeGVkIG9mZiBieSBvbmUgaW4gUkZUQSBjYWxjdWxhdGlvbi4KICAtIE5vIG5lZWQgdG8gYWJvcnQgd2hlbiBMREYgaXMgbG93ZXIgdGhhbiB3ZSBjYW4gcHJvZ3JhbSBpdCdzIG9ubHkKICAgIG1pbmltdW0gdGltaW5nIHNvIGNsYW1wIGl0IHRvIHdoYXQgd2UgY2FuIGRvLgogIC0gVGFrZXMgZnVuY3Rpb24gcG9pbnRlciB0byBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgc3BkX252cmFtLiBVc2VmdWxsCiAgICBmb3IgZmFraW5nIGRhdGEgb3IgaGFyZGNvZGUgYSBtb2R1bGUgd2l0aG91dCB0aGUgbnZyYW0uCiAgLSBmaXggb3RoZXIgdXNlciBmb3IgYWJvdmUgY2hhbmdlCiAgLSBmaXggc29tZSBjb21tZW50cy4KCiogUGF0Y2hlcyBieSBCcmlhbiBXYWl0ZSwgMjYgRmViIDIwMDM6CiAgLSBmaXggcG9ydCBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIHNjYW4KCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDEgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEVNSyBUT1A4NjAgTW9kdWxlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDAyIE1hciAyMDAzOgogIEFkZCBTUEQgRUVQUk9NIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAyMSBKYW4gMjAwMzoKICAtIEFkZCBzdXBwb3J0IGZvciBJbm5va29tIGJvYXJkCiAgLSBEb24ndCBjb21wbGFpbiBpZiAiaW5zdGFsbCIgZmFpbHMKICAtIFJFQURNRSBjbGVhbnVwIChyZW1vdmUgZHVwbGljYXRlZCBsaW5lcykKICAtIFVwZGF0ZSBQWEEgaGVhZGVyIGZpbGVzCgoqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBleGlzdGluZyBQT1NUIGNvZGUgKGRvYy9SRUFETUUuUE9TVCkKCiogUGF0Y2ggYnkgTGF1ZG5leSBSZW4sIDE1IEphbiAyMDAzOgogIEZpeCBoYW5kbGluZyBvZiByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gInRvb2xzL2VudmNyYy5jIgoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOCBGZWIgMjAwMzoKICBBZGQgYmVkYnVnIHN1cHBvcnQgZm9yIDgyNHggc3lzdGVtcwoKKiBBZGQgc3VwcG9ydCBmb3IgMTYgTUIgZmxhc2ggY29uZmlndXJhdGlvbiBvZiBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TCgoqIEFkZCBpbWFnZSBpbmZvcm1hdGlvbiB0byBSRUFETUUKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBGZWIgMjAwMzoKICBDUENJSVNFUjQgY29uZmlndXJhdGlvbiB1cGRhdGVkLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IEZlYiAyMDAzOgogIEZpeGVkIGJ1ZyBpbiBleHQuIHNlcmlhbCBjbG9jayBzZXR1cCBvbiBQUEM0MDUgKHNpbmNlIFBQQzQ0MCBwb3J0KS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBGZWIgMjAwMzoKICBBZGQgInBjaWRlbGF5IiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoaW4gbXMsIGVuYWJsZWQgdmlhCiAgQ09ORklHX1BDSV9CT09UREVMQVkpLgogIFBDSSBzcGVjIDIuMiBkZWZpbmVzLCB0aGF0IGEgcGNpIHRhcmdldCBoYXMgMl4yNSBwY2kgY2xvY2tzIGFmdGVyCiAgUlNUIyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gY3ljbGVzICgzM01IeiAtPiAxcykuCgoqIEZpeCBkdWFsIFBDTUNJQSBzbG90IHN1cHBvcnQgKHdoZW4gcnVubmluZyB3aXRoIGp1c3Qgb25lCiAgc2xvdCBwb3B1bGF0ZWQpCgoqIEFkZCBWRkQgdHlwZSBkZXRlY3Rpb24gdG8gdHJhYiBib2FyZAoKKiBleHRlbmQgZHJpdmVycy9jczg5MDAuYyBkcml2ZXIgdG8gc3luY2hyb25pemUJIGV0aGFkZHIgIGVudmlyb25tZW50CiAgdmFyaWFibGUgd2l0aCB2YWx1ZSBpbiB0aGUgRUVQUk9NCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIDRNQiBhbmQgMTI4TUIgb25ib2FyZCBTRFJBTSAoY3B1L3BwYzR4eC9zZHJhbS5jKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzMyIDRLYyBDUFVzCgoqIEFkZCBzdXBwb3J0IGZvciBJTkNBLUlQIEJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgZHVhbCBldGhlcm5ldCBzdXBwb3J0IG9uIFBNODI2CgoqIEFkZCBzdXBwb3J0IGZvciBMWFQ5NzEgUEhZIG9uIFBNODI2CgoqIFBhdGNoIGJ5IFRvcmQgQW5kZXJzc29uLCAxNiBKYW4gMjAwMzoKICBGaXggZmxhc2ggc2VjdG9yIGNvdW50IGZvciBUUU04eHhMCgoqIEZpeCBJMkMgRUVQUk9NIHByb2JsZW0gb24gSUNVODYyIGJvYXJkICh3b3VsZCBvbmx5IHdyaXRlIHRoZSBmaXJzdAogIDE2IGJ5dGVzIG91dCBvZiBlYWNoIDMyIGJ5dGUgYmxvY2spCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgVjM3IGJvYXJkCiAgKHBhdGNoIGJ5IErzbiBCZW5lZGlrdHNzb24sIDExIERlYyAyMDAyKQoKKiBVcGRhdGUgYmF1ZHJhdGUgaW4gYmRfaW5mbyB3aGVuIGl0IGdldHMgY2hhbmdlZAoKKiBBZGQgd2F0Y2hkb2cgdHJpZ2dlciBwb2ludHMgd2hpbGUgd2FpdGluZyBmb3Igc2VyaWFsIHBvcnQKICAoc28gZmFyIG9ubHkgOHh4IC0tIG5lZWRlZCBvbiBMV01PTiB3aXRoIDEwMG1zIHdhdGNoZG9nKQoKKiBJbXByb3ZlIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoZmlndXJhdGlvbiBvZiB0aGUgdXRpbGl0eSwgdXNpbmcgYSBjb25maWcgZmlsZSkKCiogQWRkIHNpbmdsZSBxdW90ZSBzdXBwb3J0IGZvciAob2xkKSBjb21tYW5kIGxpbmUgcGFyc2VyCgoqIFN3aXRjaCBMV01PTiBib2FyZCBkZWZhdWx0IGNvbmZpZyBmcm9tIEZSQU0gdG8gRUVQUk9NOwogIGluIFBPU1QsIEVFUFJPTSBzaG93cyB1cCBvbiA4IGFkZHJlc3NlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXNlIDEtYnl0ZS1yZWFkIGluc3RlYWQgb2YgLXdyaXRlIGZvciBpcHJvYmUoKSBmdW5jdGlvbgogIEFkZCBpMmMgY29tbWFuZHMgdG8gUE04MjYgY29uZmlnCgoqIGV4dGVuZCBJMkMgUE9TVCBjb2RlOiBjaGVjayBmb3IgbGlzdCBvbiBrbm93biBhZGRyZXNzZXMKCiogSW1wcm92ZSBsb2cgYnVmZmVyIGNvZGU7IHVzZSAibG9nbGV2ZWwiIHRvIGRlY2lkZSB3aGljaCBtZXNzYWdlcwogIHRvIGxvZyBvbiB0aGUgY29uc29sZSwgdG9vIChsaWtlIGluIExpbnV4KTsgZ2V0IHJpZCBvZiAibG9nc3RhcnQiCgoqIEFkZCBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGJvYXJkLXNwZWNpZmljIGZvciBUUkFCIG5vdywgdG8gYmUgZml4ZWQgbGF0ZXIpCgoqIFBhdGNoIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiwgMDYgRGVjIDIwMDIKICBGaXggbWlzYyBwcm9ibGVtcyB3aXRoIEFtaWdhT25lIHN1cHBvcnQKCiogUGF0Y2ggYnkgQ2hyaXMgSGFsbGluYW4sIDMgRGVjIDIwMDI6CiAgbWlub3IgY2xlYW51cCB0byB0aGUgTVBDODI0NSBFUElDIGRyaXZlcgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgKFNJVSkgaW50ZXJydXB0cyBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgRml4IG5lc3RlZCBzeXNjYWxscyBidWcgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyNyBOb3YgMjAwMjoKICBmaXggb3V0cHV0IG9mICJwY2lpbmZvIiBjb21tYW5kIGZvciBDYXJkQnVzIGJyaWRnZSBkZXZpY2VzLgoKKiBGaXggYnVnIGluIFRRTTgyNjAgYm9hcmQgZGV0ZWN0aW9uIC0gYm9hcmRzIGdvdCBzdHVjayB3aGVuIGJvYXJkIElECiAgd2FzIG5vdCByZWFkYWJsZQoKKiBBZGQgTEVEIGluZGljYXRpb24gZm9yIElERSBhY3Rpdml0eSBvbiBLVVA0SyBib2FyZAoKKiBGaXggc3RhcnR1cCBwcm9ibGVtcyB3aXRoIFZGRCBkaXNwbGF5IG9uIFRSQUIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjAgTm92IDIwMDIKICBBZGQgZHJpdmVyIGZvciBFcHNvbiBTRUQxMzgwNiBncmFwaGljIGNvbnRyb2xsZXIuCiAgQWRkIHN1cHBvcnQgZm9yIEJNUCBsb2dvcyBpbiBjZmJfY29uc29sZSBkcml2ZXIuCgoqIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggUENNQ0lBIHNsb3RzIChhdCB0aGUgc2FtZSB0aW1lISkgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjEgTm92IDIwMDI6CiAgZml4IFBDTUNJQSBvbiBNQlg4eHggYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDIxIE5vdiAyMDAyCiAgQWRkIENGR19DUE1fUE9TVF9XT1JEX0FERFIgdG8gbWFrZSB0aGUgb2Zmc2V0IG9mIHRoZQogIGJvb3Rtb2RlIHdvcmQgaW4gRFBSQU0gY29uZmlndXJhYmxlCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTggTm92IDIwMDI6CiAgRml4ZXMgZm9yIHg4NiBwb3J0IChtb3N0bHkgc3RyaW5ncyBpc3N1ZXMpCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOCBOb3YgMjAwMjoKICBGaXggZm9yIG5hdHNlbWkgTklDIGNhcmRzIChEUDgzODE1KQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOSBOb3YgMjAwMjoKICBmaXggYSBidWcgZm9yIHRoZSBNSUkgY29uZmlndXJhdGlvbiwgYW5kIHNvbWUgd2FybmluZ3MKCiogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgogIEFkZCBjb2RlIGZvciBBbWlnYU9uZSBib2FyZAogIChwcmVsaW1pbmFyeSBtZXJnZSB0byBVLUJvb3QsIHN0aWxsIFdJUCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEyIE5vdiAyMDAyOgogIC0gQWRkaW5nIFVSTCBmb3IgSUVFRSBPVUkgbG9va3VwCiAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKICAgIGJlaW5nIGRlZmluZWQuCiAgLSBJbiB0aGUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAjZGVmaW5lLCB0aGUgcm9vdC1vbi1pbml0cmQgYW5kCiAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAogICAgbWV0aG9kIGdldHMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIEFNRCBTQzUyMCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgRE9TIGZpbGVzeXN0ZW0gYW5kIGJvb3RpbmcgZnJvbSBET1MgZmxvcHB5IGRpc2sKCiogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6CiAgSW5jcmVhc2UgbnVtYmVyIG9mIG5ldHdvcmsgUlggYnVmZmVycyAoUEtUQlVGU1JYIGluCiAgImluY2x1ZGUvbmV0LmgiKSBmb3IgRUVQUk8xMDAgYmFzZWQgYm9hcmRzIChlc3BlY2lhbGx5IFNQODI0MCkKICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcwogIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmUgYnVmZmVycyBzbG93ZXIgdGhhbiB0aGUgbmV0d29yayBjb250cm9sbGVyCiAgd2FzIGZpbGxpbmcgdGhlbS4KCiogUGF0Y2ggYnkgQW5kcmVhcyBPYmVycml0dGVyLCAwOSBOb3YgMjAwMjoKICBDaGFuZ2UgYmVoYXZpb3VyIG9mIE5ldExvb3AoKTogcmV0dXJuIC0xIGZvciBlcnJvcnMsIGZpbGVzaXplCiAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcwogIGNhc2UgdGhlIGVudmlyb25tZW50IHN0aWxsIGdldHMgdXBkYXRlZCEKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgOSBOb3YgMjAwMjoKICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCiAgICB0aGUgZmFpbGluZyBlZGdlcyBvZiBMUkNMSyBhbmQgU0NMSwogIC0gc2JjODI2MCBjb25maWd1cmF0aW9uIHR3ZWFrcwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCiAgLSB3aXJlIHNzcGkvc3NwbyBjb21tYW5kcyBpbnRvIGNvbW1hbmQgaGFuZGxlcjsgaW1wcm92ZWQgZXJyb3IKICAgIGhhbmRsZXJpbmcKICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQogICAgU0FDU25nIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6CiAgQWRkICItbiIgdG8gbGlua2VyIG9wdGlvbnMgdG8gZ2V0IHJpZCBvZiAiTm90IGVub3VnaCByb29tIGZvcgogIHByb2dyYW0gaGVhZGVycyIgcHJvYmxlbQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCiAgUmVuYW1lIENPTkZJR19QTExfSU5QVVRfRlJFUSB0byBDT05GSUdfU1lTX0NMS19GUkVRCiAgc28gd2UgY2FuIHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIG5hbWUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBIYXJkd2FyZSByZWxhdGllZCBpbXByb3ZtZW50cyBpbiBGREMgYm9vdCBjb2RlCgoqIFBhdGNoIGJ5IEhvbGdlciBTY2h1cmlnLCA1IE5vdiAyMDAyOgogIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKCiogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMJIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAogIGRyaXZlcnMKCiogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwogIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAzMSBPY3QgMjAwMjoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDA0IE5vdiAyMDAyOgogIC0gdXNlIHdhdGNoZG9nIHRvIHJlc2V0IFBYQTI1MCBzeXN0ZW1zCiAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQogIC0gdXBkYXRlIGZvciBDb2dlbnQgQ1NCMjI2IGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBGUFM4NjAgYm9hcmQKCiogUGF0Y2ggYnkgR3VpbGxhdW1lIEFsZXhhbmRyZSwsIDA0IE5vdiAyMDAyOgogIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cwoKKiBGaXggbWRlbGF5KCkgb24gVFJBQiAtIHRoaXMgd2FzIHN0aWxsIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbiB3aXRoCiAgc2Vjb25kcyBpbnN0ZWFkIG9mIG1zLgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEgTm92IDIwMDI6CiAgWFNjYWxlIHJlbGF0ZWQgY2xlYW51cCAoYWZmZWN0cyBhbGwgQVJNIGJvYXJkcykKCiogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpOb3RlcyBmb3IgVS1Cb290IDAuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgIkRhcyBVLUJvb3QiLCB0aGUgVW5pdmVyc2FsIEJvb3QgTG9hZGVyLgoKSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdCBwbGVhc2Ugc2VlIHRoZQpQUENCb290IHByb2plY3QgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BwY2Jvb3QKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K