ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCBiOWRkNDQ2Li4xMGU0YTk2IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDU1OTggKzEsMTEwMSBAQAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS41OgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorY29tbWl0IDdhZGUwYzYzNGE5NzljMzJmYTkxYTc0ZThmNTc3NWYyNDY1MWZiZTYKK0F1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDE4OjA2OjQ4IDIwMDYgKzAyMDAKIAotKiBGaXggc2VxdW9pYSBzZXBhcmF0ZSBvYmplY3QgZGlyZWNvcnkgYnVpbGRpbmcgcHJvYmxlbXMuCisgICAgRml4IGJ1ZyBpbiBQUEM0NDAgTkFORCBkcml2ZXIgY3B1L3BwYzR4eC9uZGZjLmMKKyAgICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IE9jdCAyMDA2CiAKLSogRml4IGJ1ZyBpbiBQUEM0NDAgTkFORCBkcml2ZXIgY3B1L3BwYzR4eC9uZGZjLmMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBPY3QgMjAwNgorY29tbWl0IDhhZTNiNzEzYjIyODZlMGMzMjEzYjc4MDIwNjJlNGMxNTk5MDEwZGUKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+CitEYXRlOiAgIFR1ZSBPY3QgMjQgMTc6MjQ6NTUgMjAwNiArMDIwMAogCi0qIENsZWFudXAgY29tcGlsZSB3YXJuaW5ncy4gUHJlcGFyZSBmb3IgcmVsZWFzZSAxLjEuNQorICAgIE1lcmdlIHdpdGggL2hvbWUvd2QvZ2l0L3UtYm9vdC9tYXN0ZXIKIAotKiBGaXggY29tcGlsZSBwcm9ibGVtIGluIGluY2x1ZGUvY29uZmlncy9lcDgyeHhtLmgKLSAgKG11c3QgaGF2ZSBuZXZlciBiZWVuIHRlc3RlZCBiZWZvcmUhKQorY29tbWl0IDQ3YTY5ODljMTA2ODVkMmFiM2VmY2Y5NTIyOGNlNTBkMmE0OTZkM2UKK0F1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+CitEYXRlOiAgIFR1ZSBPY3QgMjQgMTU6MzI6NTcgMjAwNiArMDIwMAogCi0qIE1DQzIwMDogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcHJvYmxlbSBpbiBMQ0QgZHJpdmVyCisgICAgQ29kZSBjbGVhbnVwCiAKLSogQWRkIGJvYXJkL2NwdSBzcGVjaWZpYyBOQU5EIGNoaXAgc2VsZWN0IGZ1bmN0aW9uIHRvIDQ0MCBOREZDCi0gIEJhc2VkIG9uIGlkZWEgYW5kIGltcGxlbWVudGF0aW9uIGZyb20gSmVmZiBNYW5uCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDYKK2NvbW1pdCAzYTc4ZTNlNzViNjMzZWNiNjQxMzExNGZmZDExZTJmMDAwYzRmMTFlCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDE0OjUxOjM2IDIwMDYgKzAyMDAKIAotKiBNYWtlIDR4eCBib290dXAgbWVzc2FnZSBzaG9ydGVyIG9uIDQ0MEVQeC9HUnggcGxhdGZvcm1zCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggT2N0IDIwMDYKKyAgICBNb3ZlIGF0c3RrMTAwMCBmaWxlcyBpbnRvIHZlbmRvciBzcGVjaWZpYyBkaXJlY3RvcnkuCisgICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAxMiBTZXAgMjAwNgogCi0qIEFkZCAocHJlbGltaW5hcnkpIHN1cHBvcnQgZm9yIFYzOEIgYm9hcmQKK2NvbW1pdCA2Y2NlYzQ0OTJlNzc0MjhmZDZlYWZkM2RmZTk0ZmJkZjA4ZTkxZDM3CitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDE0OjQyOjM3IDIwMDYgKzAyMDAKIAotKiBQUEM0MDVFUDogQWRkIHN1cHBvcnQgZm9yIGJvYXJkIGNvbmZpZ3VyYXRpb24gb2YgQ1BDMF9QQ0kgcmVnaXN0ZXIKLSAgVGhpcyBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBjb25maWd1cmUgUGVyV0UqL1BDSV9JTlQqIHBpbiBhcyBQZXJXRSoKLSAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDcgQXByIDIwMDYKKyAgICBBZGQgQVRTVEsxMDAwIGFuZCBBVFNUSzEwMDIgYm9hcmQgc3VwcG9ydAorICAgIFBhdGNoIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgMDYgU2VwIDIwMDYKKyAgICAKKyAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFUU1RLMTAwMCB3aXRoIHRoZSBBVFNUSzEwMDIgQ1BVCisgICAgZGF1Z2h0ZXJib2FyZC4KKyAgICAKKyAgICBBVFNUSzEwMDAgaXMgYSBmdWxsLWZlYXR1cmVkIGRldmVsb3BtZW50IGJvYXJkIGZvciBBVDMyQVAgQ1BVcy4gSXQKKyAgICBoYXMgdHdvIGV0aGVybmV0IHBvcnRzLCBhIGhpZ2ggcXVhbGl0eSBRVkdBIExDRCBwYW5lbCwgYSBsb3Vkc3BlYWtlciwKKyAgICBhbmQgY29ubmVjdG9ycyBmb3IgVVNBUlQsIFBTLzIsIFZHQSwgVVNCLCBNTUMvU0QgY2FyZHMgYW5kCisgICAgQ29tcGFjdEZsYXNoIGNhcmRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGlzIHBhZ2U6CisgICAgCisgICAgaHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Byb2R1Y3RzL3Rvb2xzLmFzcD9mYW1pbHlfaWQ9NjgyCisgICAgCisgICAgVGhlIEFUU1RLMTAwMiBpcyBhIGRhdWdodGVyYm9hcmQgZm9yIHRoZSBBVFNUSzEwMDAgc3VwcG9ydGluZyB0aGUKKyAgICBBVDMyQVA3MDAwIGNoaXAuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CiAKLSogUFBDNDA1RVA6IEFkZCBDRkdfR1BJTzBfT1IsIENGR19HUElPMF9PRFIgdG8gc2V0dXAgR1BJTyBjb21wbGV0ZWx5LgotICAtIEFkZCBjb25maWd1cmF0aW9uIG9mIE9wZW4gRHJhaW4gR1BJTyBPdXRwdXQgc2VsZWN0aW9uCi0gIC0gQWRkIGNvbmZpZ3VyYXRpb24gb2YgaW5pdGlhbCB2YWx1ZSBvZiBHUElPIG91dHB1dCBwaW5zCi0gIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDA3IEFwciAyMDA2Citjb21taXQgZjkzYWU3ODhjMzY0MGZjZGU1ZGIzODM0NzFkNDU1NDhmZjQwNjBkMAorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KK0RhdGU6ICAgVHVlIE9jdCAyNCAxNDozMToyNCAyMDA2ICswMjAwCiAKLSogRml4IHNwZWxsaW5nOyBtaW5vciBjb2RlIGNsZWFudXAuCisgICAgQWRkIGNvbW1vbiBzZXJpYWwgZHJpdmVyIGZvciBBdG1lbCBBVDMyIGFuZCBBVDkxIGNoaXBzCisgICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAwNiBTZXAgMjAwNgorICAgIAorICAgIFRoaXMgaXMgYSBmaXJzdCBhdHRlbXB0IGF0IGNyZWF0aW5nIGEgY29tbW9uIHNlcmlhbCBkcml2ZXIgZm9yIEF0bWVsCisgICAgY2hpcHMuIEZvciBub3csIGl0IHN1cHBvcnRzIHRoZSBBVDMyQVA3MDAwIEFWUjMyIGNoaXAsIGJ1dCBpdCBzaG91bGQKKyAgICBiZSBwb3NzaWJsZSB0byBzdXBwb3J0IEFUOTFSTTkyMDAgYW5kIG90aGVyIEFSTS1iYXNlZCBjaGlwcyB3aXRoIHNvbWUKKyAgICBtaW5vciBtb2RpZmljYXRpb25zLgorICAgIAorICAgIFRoZXJlJ3Mgbm90aGluZyBmdW5kYW1lbnRhbGx5IEFWUjMyLXNwZWNpZmljIGluIHRoaXMgZHJpdmVyLCBidXQgaXQKKyAgICBkb2VzIHVzZSBzb21lIGZlYXR1cmVzIHdoaWNoIGFyZSBjdXJyZW50bHkgb25seSBkZWZpbmVkIGZvciB0aGUKKyAgICBBVDMyQVAgQ1BVIHBvcnQ6CisgICAgICAqIHBtX2dldF9jbG9ja19mcmVxOiBPYnRhaW4gdGhlIGNsb2NrIGZyZXF1ZW5jeSBvZiBhIGdpdmVuIGRvbWFpbgorICAgICAgKiBnZC0+Y29uc29sZV91YXJ0OiBBICJzdHJ1Y3QgZGV2aWNlIiBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgIHJlZ2lzdGVyIG1hcHBpbmdzLCBncGlvIHJlc291cmNlcyBhbmQgY2xvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgICAgICAgVUFSVCBkZXZpY2UuCisgICAgCisgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZmVhdHVyZXMsIHBsZWFzZSBzZWUgdGhlICJBVDMyQVAKKyAgICBDUFUiIHBhdGNoLgogCi0qIEZpeCBKRkZTMiBjb21waWxhdGlvbiBwcm9ibGVtCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgT2N0IDIwMDYKK2NvbW1pdCA3MmEwODdlMDQ3MDVjMjZjYWQ5ODI4NzllYmQwNmI1MjgxYmY4MjVhCitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDE0OjI3OjM1IDIwMDYgKzAyMDAKIAotKiBDbGVhbnVwIG9mIE5BTkQgdXBkYXRlIHBhdGNoIChyZW1vdmUgY2hhbmdlbG9nIGZyb20gY21kX25hbmQuYykKLSAgUGF0Y2ggYnkgR3VpZG8gQ2xhc3NlbiwgMTAgT2N0IDIwMDYKKyAgICBBZGQgQVQzMkFQIENQVSBhbmQgQVQzMkFQNzAwMCBTb0Mgc3VwcG9ydAorICAgIFBhdGNoIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgMDYgU2VwIDIwMDYKKyAgICAKKyAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFUMzJBUCBDUFUgZmFtaWx5IGFuZCB0aGUgQVQzMkFQNzAwMAorICAgIGNoaXAsIHdoaWNoIGlzIHRoZSBmaXJzdCBjaGlwIGltcGxlbWVudGluZyB0aGUgQVZSMzIgYXJjaGl0ZWN0dXJlLgorICAgIAorICAgIFRoZSBBVDMyQVAgQ1BVIGNvcmUgaXMgYSBoaWdoLXBlcmZvcm1hbmNlIGltcGxlbWVudGF0aW9uIGZlYXR1cmluZyBhCisgICAgNy1zdGFnZSBwaXBlbGluZSwgc2VwYXJhdGUgaW5zdHJ1Y3Rpb24tIGFuZCBkYXRhIGNhY2hlcywgYW5kIGEgTU1VLgorICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSAiQVZSMzIgQVAgVGVjaG5pY2FsIFJlZmVyZW5jZSI6CisgICAgCisgICAgaHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Jlc291cmNlcy9wcm9kX2RvY3VtZW50cy9kb2MzMjAwMS5wZGYKKyAgICAKKyAgICBJbiBhZGRpdGlvbiB0byB0aGlzLCB0aGUgQVQzMkFQNzAwMCBjaGlwIGNvbWVzIHdpdGggYSBsYXJnZSBzZXQgb2YKKyAgICBpbnRlZ3JhdGVkIHBlcmlwaGVyYWxzLCBtYW55IG9mIHdoaWNoIGFyZSBzaGFyZWQgd2l0aCB0aGUgQVQ5MSBzZXJpZXMKKyAgICBvZiBBUk0tYmFzZWQgbWljcm9jb250cm9sbGVycyBmcm9tIEF0bWVsLiBGdWxsIGRhdGEgc2hlZXQgaXMKKyAgICBhdmFpbGFibGUgaGVyZToKKyAgICAKKyAgICBodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcmVzb3VyY2VzL3Byb2RfZG9jdW1lbnRzL2RvYzMyMDAzLnBkZgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgogCi0qIFNldmVyYWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBuZXcgTkFORCBzdWJzeXN0ZW06Ci0gIC0gSkZGUzIgcmVsYXRlZCBjb21tYW5kcyBpbXBsZW1lbnRlZCBpbiBtdGQtdXRpbHMgc3R5bGUKLSAgLSBTdXBwb3J0IGZvciBiYWQgYmxvY2tzCi0gIC0gQmFkIGJsb2NrIHRlc3RpbmcgY29tbWFuZHMKLSAgLSBOQU5EIGxvY2sgY29tbWFuZHMKLSAgUGxlYXNlIHRha2UgYSBsb29rIGF0IGRvYy9SRUFETUUubmFuZCBmb3IgbW9yZSBkZXRhaWxzCi0gIFBhdGNoIGJ5IEd1aWRvIENsYXNzZW4sIDEwIE9jdCAyMDA2Citjb21taXQgN2I2NGZlZjMzYzY2YmU2NDg4MjZjMGZmOTc1ODI5OGVmMTNkMDYwNAorQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KK0RhdGU6ICAgVHVlIE9jdCAyNCAxNDoyMToxNiAyMDA2ICswMjAwCiAKLSogRGVmaW5lIElIX0NQVV9BVlIzMgotICBNYWtlIGl0IHBvc3NpYmxlIHRvIGdlbmVyYXRlIEFWUjMyIHVJbWFnZSBmaWxlcyB3aXRoIG1raW1hZ2UgYW5kCi0gIG1ha2UgY21kX2Jvb3RtIHJlY29nbml6ZSB0aGVtLgotICBQYXRjaCBieSBIYWF2YXJkIFNraW5uZW1vZW4sIDIyIFNlcCAyMDA2CisgICAgQWRkIEFWUjMyIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCA2IFNlcCAyMDA2IDE2OjIzOjAyICswMjAwCisgICAgCisgICAgVGhpcyBwYXRjaCBhZGRzIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBjb2RlIGZvciB0aGUgQXRtZWwgQVZSMzIKKyAgICBhcmNoaXRlY3R1cmUuIFNlZSBkb2MvUkVBRE1FLkFWUjMyIGZvciBkZXRhaWxzLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgogCi0qIEZpeCBidWZmZXIgb3ZlcmZsb3cgcHJvYmxlbSBpbiBmdF9idWlsZC5jCi0gIFBhdGNoIGJ5IEZyZWRyaWsgUm91YmVydCwgMDkgT2N0IDIwMDYKK2NvbW1pdCAyZGEyZDlhNDc2NjA2M2I5ODQ4ZjNhMzVhZDYwMjU0OTljZjg3MjY1CitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDEzOjU3OjMzIDIwMDYgKzAyMDAKIAotKiBNYWtlIGJvb3RwIGltcGxlbWVudGF0aW9uIFJGQzMwNDYgY29tcGxpYW50Ci0gIFBhdGNoIGJ5IEpvYWtpbSBMYXJzc29uLCAyNyBKdW4gMjAwNgorICAgIFVzZSAtZyBpbnN0ZWFkIG9mIC1nc3RhYnMgaW4gQUZMQUdTX0RFQlVHCisgICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAzMCBBdWcgMjAwNgorICAgIAorICAgIEluIGNvbmZpZy5taywgLVdhLC1nc3RhYnMgaXMgdW5jb25kaXRpb25hbGx5IGFwcGVuZGVkIHRvIEFGTEFHUyBubworICAgIG1hdHRlciB3aGF0IHRoZSB0YXJnZXQncyBwcmVmZXJyZWQgZGVidWdnaW5nIGZvcm1hdCBpcy4gVGhpcyBwYXRjaAorICAgIHNpbXBseSByZXBsYWNlcyAtZ3N0YWJzIHdpdGggLWcsIHNvIHRoYXQgdGhlIGRlZmF1bHQgZGVidWdnaW5nIGZvcm1hdAorICAgIGZvciB0aGUgYXJjaGl0ZWN0dXJlIGlzIHVzZWQuCiAKLSogVFFNNTIwMDogcGVyZm9ybSBQT1NUIG1lbW9yeSB0ZXN0IG9ubHkgb24gU1RLNTJ4eCBjYXJyaWVyIGJvYXJkLgotICAoYW5kIHRoZW4gb25seSBpZiBQU0M2XzMgaXMgcmVhZCBhcyAiMSIgd2hlbiBib290aW5nKS4KLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjEgSnVuIDIwMDYKK2NvbW1pdCA5NjU4Mjk4NzIxNjljMjk5NjAyMzg0MGQ5OGUxZDg1YWQxNDhkNjI5CitBdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgorRGF0ZTogICBUdWUgT2N0IDI0IDEzOjU1OjE4IDIwMDYgKzAyMDAKIAotKiBNb3ZlICJhciIgZmxhZ3MgdG8gY29uZmlnLm1rIHRvIGFsbG93IGZvciBzaWxlbnQgIm1ha2UgLXMiCi0gIEJhc2VkIG9uIHBhdGNoIGJ5IE1pa2UgRnJ5c2luZ2VyLCAyMCBKdW4gMjAwNgorICAgIEZpeC93b3JrYXJvdW5kIGJyb2tlbiBkZXBlbmRlbmN5IGhhbmRsaW5nIHdpdGggbWFrZSAzLjgxCisgICAgQmFzZWQgb24gcGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAyOSBBdWcgMjAwNiAxMToyMDozOSArMDIwMAogCi0qIENvZGluZyBzdHlsZSBjbGVhbnVwCitjb21taXQgODMxOGZiZjhjYzMwNDE4YjYyMWVhOWYzOWI4NGI0YzFhMDhmMDAzYQorQXV0aG9yOiBNYXJpYW4gQmFsYWtvd2ljeiA8bThAc2VtaWhhbGYuY29tPgorRGF0ZTogICBNb24gT2N0IDIzIDIyOjE3OjA1IDIwMDYgKzAyMDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgRVA4Mnh4TSBib2FyZHMKLSAgUGF0Y2ggYnkgQWFyb24gU2VsbHMsIDIwIEp1biAyMDA2CisgICAgRml4IHNlcXVvaWEgc2VwYXJhdGUgb2JqZWN0IGRpcmVjb3J5IGJ1aWxkaW5nIHByb2JsZW1zLgogCi0qIEZpeCBjb21tZW50cyBpbiBpbmNsdWRlL3BwYzQ0MC5oCi0gIFBhdGNoIGJ5IE1hcnRpbiBIaWNrcywgMTYgSnVuIDIwMDYKK2NvbW1pdCAzZGZhOWNmZGNlZTc4YjMwZGEzNDMyMzE4YjMyODIxZmZhYmU5NzRiCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBPY3QgMjAgMTc6MTY6MzUgMjAwNiAtMDUwMAogCi0qIFVwZGF0ZSBmb3IgQ0FNNTIwMCBib2FyZDoKLSAgLSBNYXAgaW4gYSBhZGRpdGlvbmFsIGNoaXAgc2VsZWN0cyBDUzQgYW5kIENTNS4KLSAgLSBNb2RpZnkgdGhlIHBvcnQgY29uZmlncmF0aW9uLCBjb25maWd1cmUgc2l4IFVBUlRzIGFuZCBubyBQQ0ksCi0gICAgQVRBIGFuZCBVU0IuCi0gIC0gQWRkIGN1c3RvbSBmbGFzaCBkcml2ZXIgdG8gaGFuZGxlIHNwZWNpZmljIGJ5dGUgc3dhcHBpbmcKKyAgICBVc2UgZ2VuZXJpYyBJMkMgcmVnaXN0ZXIgYmxvY2sgb24gODV4eCBhbmQgODZ4eC4KKyAgICAKKyAgICBSZXBsYWNlIHByaXZhdGUgSU1NQVAgSTJDIHN0cnVjdHVyZXMgd2l0aCBnZW5lcmljIHJlZyBibG9jaworICAgIGFuZCBhbGxvdyA4Nnh4IHRvIGhhdmUgbXVsdGlwbGUgSTJDIGRldmljZSBidXNzZXMuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggVExCIHNldHVwIGZvciBPY290ZWEgYm9hcmQKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBTZXAgMjAwNgorY29tbWl0IGY1MDEyODI3ZGYxMWNhMGM5YmUxZGY1ZjhiMTUzZTE4OGRjMmZhN2MKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIE9jdCAyMCAxNTo1NDozNCAyMDA2IC0wNTAwCiAKLSogRml4IHJlc2V0IHByb2JsZW0gaW4gc2VxdW9pYSBzZHJhbSBpbml0IGNvZGUKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBTZXAgMjAwNgorICAgIEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncyBvbiBhIGZldyA4NXh4IGJvYXJkcy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIERpc2FibGUgYXV0b2Jvb3QgYWJvcnQgZm9yIEZPMzAwIHdoZW4gc2lsZW50IG1vZGUgaXMgZW5hYmxlZAotICAoYWNjb3JkaW5nIHRvIFMxIHN3aXRjaCBzZXR0aW5nKS4KK2NvbW1pdCAyMDQ3NjcyNjg0Y2Y4NWNiNmY5NmExZmJjOTkzMTgwYWFhZjE5YTk5CitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBPY3QgMjAgMTU6NTA6MTUgMjAwNiAtMDUwMAogCi0qIENsZWFudXAgZXhhbXBsZXMgYmluYXJpZXMKKyAgICBDb252ZXJ0ZWQgYWxsIDg1eHggYm9hcmRzIHRvIHVzZSBhIGNvbW1vbiBGU0wgSTJDIGRyaXZlci4KKyAgICBJbnRyb2R1Y2VkIENPRklHX0ZTTF9JMkMgdG8gc2VsZWN0IHRoZSBjb21tb24gRlNMIEkyQyBkcml2ZXIuCisgICAgQW5kIHJlbW92ZWQgaGFyZCBpMmMgcGF0aCBmcm9tIGEgZmV3IHUtYm9vdC5sZHMgc2NpcHRzIHRvby4KKyAgICBNaW5vciB3aGl0ZXNwYWNlIGNsZWFudXBzIGFsb25nIHRoZSB3YXkuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KIAotKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyBSYWluaWVyIFBQWDQ0MEdSeCBldmFsIGJvYXJkCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgU2VwIDIwMDYKK2NvbW1pdCA0ZDQ1ZjY5ZTM2MmIwNTg5MmM5ZTkyYTc5MDdlNTgyMDk5NTYxMmFhCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgMTkgMTI6MDI6MjQgMjAwNiAtMDUwMAogCi0qIEFkZCBOQU5EIGVudmlyb25tZW50IHN1cHBvcnQgZm9yIFBQQzQ0MEVQeCBTZXF1b2lhIE5BTkQgYm9vdCBjb25maWcKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwNgorICAgIFJld3JpdGUgYSBzZXJpZXMgb2YgZ290byBzdGF0ZW1lbnRzIGFzIGEgc2VxdWVuY2VzIG9mCisgICAgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgaW5zdGVhZC4KKyAgICAKKyAgICBVc2UgY29uc2lzdGVudCByZXR1cm4gY29kZSAwLy0xIGZvciBnb29kL2JhZCBpbmRpY2F0b3JzLgorICAgIAorICAgIEluY2x1ZGUgb25lIGZld2VyIGZpbGUgaWYgdGhlIGRyaXZlciBpc24ndCB1c2VkIGF0IGFsbC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIFVwZGF0ZSBOQU5EIGJvb3QgZG9jdW1lbnRhdGlvbgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDA2Citjb21taXQgNzIzN2MwMzNiMDJmZTI5NTg4MDQzNWYxZWI4MDgxOWEwYzk4NzUzMgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgT2N0IDE5IDExOjAyOjE2IDIwMDYgLTA1MDAKIAotKiBGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gIm10ZHBhcnRzIiBjb21tYW5kCisgICAgTW92ZWQgaTJjIGRyaXZlciBvdXQgb2YgY3B1L21wYzg2eHgvaTJjLmMgaW50byBkcml2ZXJzL2ZzbF9pMmMuYworICAgIAorICAgIGluIGFuIGVmZm9ydCB0byBiZWdpbiB0byB1bmlmeSB0aGUgdW1wdGVlbiBGU0wgSTJDIGRyaXZlcnMgdGhhdAorICAgIGFyZSBhbGwgb3RoZXJ3aXNlIHZlcnkgc2ltaWxhci4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBkb2N1bWVudGF0aW9uIG9uIHRoZSBsYXRlc3QgYnVpbGQgZW52aXJvbm1lbnQgZXh0ZW5zaW9ucyB0bwotICB0aGUgUkVBRE1FIGZpbGUuCitjb21taXQgMTNhN2ZjZGYzN2Y2ZWE5NDI5YWUwNGM5ZGY2N2Y4OTMzNjRjZmU0YgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgT2N0IDE5IDExOjMzOjUyIDIwMDYgLTA1MDAKIAotKiBSZW1vdmUgZGVhZCBjb2RlIChpMm8gYW5kIGRtYSkgZnJvbSBjcHUvbXBjODI0eC9kcml2ZXJzLyBkaXJlY3RvcnkuCisgICAgKiBGaXggYSBidW5jaCBvZiBjb21waWxlciB3YXJuaW5ncyBmb3IgZ2NjIDQuMAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IExPR19ESVIgZGlyZWN0b3J5IGNyZWF0aW9uIGVycm9yLgotICBBZGQgc3VwcG9ydCBmb3IgYXV0b21hdGljIGNyZWF0aW9uIG9mIEJVSUxEX0RJUiBkaXJlY3RvcnkuCitjb21taXQgNWYzMjQ5YTBhMTY4ZTQ0NmE0Y2M5NjY5YjJiY2UwYmM0NTZmMGEwOQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBGcmkgT2N0IDEzIDE2OjQ3OjUzIDIwMDYgLTA1MDAKIAotKiBGaXggYnVpbGQgcHJvYmxlbSBjcHUvcHBjNHh4L25kZmMuYwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CisgICAgRml4ZWQgbGVhZGluZyB3aGl0ZXNwYWNlIGlzc3Vlcy4KKyAgICBSZW1vdmVkIHNwdXJpb3VzIExBV0FSIHRoaW5nLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IGJ1aWxkIHByb2JsZW0gd2l0aCBDUENJNDQwCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgU2VwIDIwMDYKK2NvbW1pdCAwZWU5MGNiNzdlMDFkNmU4Y2NkMzdlMWJkOTY2Nzg1OTc4NzVjMzkxCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBPY3QgMTIgMTA6NDI6MzYgMjAwNiAtMDUwMAogCi0qIENoYW5nZSBZZWxsb3dzdG9uZSB0byB1c2UgQ0ZJIHdyaXRlIGJ1ZmZlcgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CisgICAgUmVtb3ZlIHVubmVlZGVkIGluY2x1ZGUgZmlsZXMgYW5kIGxvY2FsIHZhcmlhYmxlLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgU2VxdW9pYSBQUEM0NDBFUHggZXZhbCBib2FyZAotICAtIEFkZCBzdXBwb3J0IGZvciBQUEM0NDBFUHggJiBQUEM0NDBHUngKLSAgLSBBZGQgc3VwcG9ydCBmb3IgUFBDNDQwRVAoeCkvR1IoeCkgTkFORCBjb250cm9sbGVyCi0gICAgaW4gY3B1L3BwYzR4eCBkaXJlY3RvcnkKLSAgLSBBZGQgTkFORCBib290IGZ1bmN0aW9uYWxpdHkgZm9yIFNlcXVvaWEgYm9hcmQsCi0gICAgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLm5hbmQtYm9vdC1wcGM0NDAgZm9yIGRldGFpbHMKLSAgLSBUaGlzIFNlcXVvaWEgTkFORCBpbWFnZSBkb2Vzbid0IHN1cHBvcnQgZW52aXJvbm1lbnQKLSAgICBpbiBOQU5EIGZvciBub3cuIFRoaXMgd2lsbCBiZSBhZGRlZCBpbiBhIHNob3J0IHdoaWxlLgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2Citjb21taXQgMWVhZjNhNWZmNDk2MGE0NmYzYTkwNjM1NjhiYTJhZjc4ODNmMDdjNQorQXV0aG9yOiBHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CitEYXRlOiAgIFR1ZSBPY3QgMTAgMDA6MjM6MzIgMjAwNiAtMDYwMAogCi0qIEZpeCBta2ltYWdlIC1sIGJ1ZyB3aXRoIG11bHRpZmlsZSBpbWFnZXMgb24gNjRiaXQgcGxhdGZvcm1zCi0gIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMDYgU2VwIDIwMDYKKyAgICBGaXggcG9zc2libGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBjb21waWxlciB3YXJuaW5nLgorICAgIAorICAgIFdoZW4gQ09ORklHX09GX0ZMQUdfVFJFRSBpcyBzZXQsIHRoZSBjb21waWxlciBjb21wbGFpbnMgdGhhdCAnbGVuJyBpbgorICAgIGRvX2Jvb3RtX2xpbnV4KCkgbWF5IGJlIHVuaW5pdGlhbGl6ZWQuICBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSBpbiB0aGUKKyAgICBjdXJyZW50IGNvZGUgdGhhdCBsZW4gd2lsbCBnZXQgdXNlZCB1bmluaXRpYWxpemVkLCBidXQgdGhpcyBmaXggZm9sbG93cworICAgIHRoZSBleGlzdGluZyBjb252ZW50aW9uIG9mIHNldHRpbmcgYm90aCBsZW4gYW5kIGRhdGEgdG8gemVybyBhdCB0aGUgc2FtZQorICAgIHRpbWUuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgogCi0qIEZpeCBidWlsZCBwcm9ibGVtcyBvbiBzb3JjZXJ5IGJvYXJkLgorY29tbWl0IDczNzZlYjg3YWFhNjAxZjcyOGY5YjhlNWU5Y2QyNzExYTY3ZjUyOWUKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIE9jdCAxMSAxNToxMzowMSAyMDA2IC0wNTAwCiAKLSogRml4IGNvbGRmaXJlIGJ1aWxkIHByb2JsZW1zLgotICBQYXRjaCBieSBNYXJpYW4gQmFsYWtvd2ljeiwgMDEgU2VwIDIwMDYKKyAgICAqIEZpeCBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBnY2MgNC4wCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KIAotKiBBZGQgc3VwcG9ydCBmb3IgYSBzYXZpbmcgYnVpbGQgb2JqZWN0cyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeS4KLSAgTW9kaWZpY2F0aW9ucyBhcmUgYmFzZWQgb24gdGhlIExpbnV4IGtlcm5lbCBhcHByb2FjaCBhbmQgc3VwcG9ydAotICB0d28gdXNlIGNhc2VzOgotICAxKSBBZGQgTz0gdG8gdGhlIG1ha2UgY29tbWFuZCBsaW5lICdtYWtlIE89L3RtcC9idWlsZCBhbGwnCi0gIDIpIFNldCBlbnZpcm9uZW1lbnQgdmFyaWFibGUgQlVJTERfRElSIHRvIHBvaW50IHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uCi0JJ2V4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZCcKLQknbWFrZScKLSAgVGhlIHNlY29uZCBhcHByb2FjaCBjYW4gYWxzbyBiZSB1c2VkIHdpdGggYSBNQUtFQUxMIHNjcmlwdAotCSdleHBvcnQgQlVJTERfRElSPS90bXAvYnVpbGQnCi0JJy4vTUFLRUFMTCcKLSAgQ29tbWFuZCBsaW5lICdPPScgc2V0dGluZyBvdmVycmlkZXMgdGhlIEJVSUxEX0RJUiBlbnZpcm9uZW50IHZhcmlhYmxlLgotICBXaGVuIG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgaXMgdXNlZCB0aGUgbG9jYWwgYnVpbGQgaXMgcGVyZm9ybWVkCi0gIGFuZCB0aGUgb2JqZWN0IGZpbGVzIGFyZSBwbGFjZWQgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCitjb21taXQgYmY2NTFiYWEzNjVlNTQ0NzI0NmFhZDZhNjMzY2NkNjY3Y2YyNGEzOQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgT2N0IDExIDEwOjEwOjQzIDIwMDYgLTA1MDAKIAotKiBSZW1vdmUgdGhlIGJvYXJkL25ldHN0YXIvY3JjaXQgYmluYXJ5IGZyb20gZ2l0IHJlcG9zaXRvcnkuCisgICAgTW92ZSAiYXIiIGZsYWdzIHRvIGNvbmZpZy5tayB0byBhbGxvdyBmb3Igc2lsZW50ICJtYWtlIC1zIgogCi0qIEZpeCB0b29scy91cGRhdGVyIGJ1aWxkIGVycm9yLgorY29tbWl0IDFmZDU2OTlhNGEyNGY1YzFkYWIxYjMyZjQ4MGJhY2UxZWJiOWZjM2UKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAxMCAxNzoxOTowMyAyMDA2IC0wNTAwCiAKLSogRml4IHRvb2xzL2Vhc3lsb2dvIGJ1aWxkIGVycm9yLgorICAgIENvZGluZyBzdHlsZSBjaGFuZ2VzIHRvIHJlbW92ZSBsb2NhbCB2YXJpYmxlIGJsb2NrcworICAgIGFuZCByZWZvcm1hdCBhIGJpdCBuaWNlci4KIAotKiBGaXhlZCBwcm9ibGVtcyBvbiBQUlMyMDAgYm9hcmQgY2F1c2VkIGJ5IGFkZGluZyBzcGxhc2ggc2NyZWVuIG9uIE1DQzIwMAorY29tbWl0IDhiMjgzZGJiM2EwOGQxYjhkNDA2YmMxNWYxMTllMDgxYjNlMjYwNmEKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAxMCAxNzoxNjowNCAyMDA2IC0wNTAwCiAKLSogRXh0ZW5kZWQgUkVBRE1FIGVudHJ5IG9uIGNvZGluZyBzdHlsZQorICAgIEZpeCB3aGl0ZXNwYWNlIGlzc3Vlcy4KIAotKiBBZGRlZCBhbm90aGVyIGV4YW1wbGUgc2hvd2luZyBzaW1wbGUgaW50ZXJydXB0IGludGVyY2VwdGlvbi4KK2NvbW1pdCA3YjM4MmI3MTI1ZjIzOTdjY2U2MzI1M2RmNjJmMTgzZTNkZmEyNzcwCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMTAgMTc6MTQ6NDUgMjAwNiAtMDUwMAogCi0qIEFkZGVkIHNpbXBsZV9zdHJ0b3VsKCksIGdldGVudigpIGFuZCBzZXRlbnYoKSB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgotICBBbHNvIGJ1bXBlZCB1cCBBQkkgdmVyc2lvbiB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgorICAgIEZpeCB3aGl0ZXNwYWNlIGlzc3Vlcy4KIAotKiBBZGRlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgY2FwYWJpbGl0aWVzIGZvciBtcGM1eHh4IHByb2Nlc3NvcnMuCi0gIEFsc28gYWRkZWQgTGludXggbGlrZSBCVUcoKSBtYWNyb3MuCitjb21taXQgZTEwMzkwZGRkNzM2YjBkYWQxNTI4ZWVjNGIwZmUzNWMwODI3MTM5YQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgT2N0IDEwIDE3OjA2OjUzIDIwMDYgLTA1MDAKIAotKiBDb2RpbmcgU3R5bGUgY2xlYW51cC4KLSAgUGF0Y2ggYnkgU3RlZmFubyBCYWJpYywgMzEgQXVnIDIwMDYKKyAgICBGaXggd2hpdGVzcGFjZSBpc3N1ZXMuCiAKLSogQWRkIHNwbGFzaHNjcmVlbiBzdXBwb3J0IGZvciBNQ0MyMDAgYm9hcmQuCitjb21taXQgODk4NzVlOTZiYTNmMDIzMTU3YmY1MGQ1ZjhlMzNiZjI1NDk2NGE3NgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgT2N0IDEwIDE3OjAzOjQzIDIwMDYgLTA1MDAKIAotKiBNYWtlIHRoZSBzZXJpYWwgZHJpdmVyIGZyYW1ld29yayB3b3JrIHdpdGggQ09ORklHX1NFUklBTF9NVUxUSQotICBlbmFibGVkCisgICAgUmFuIGxpbmRlbnQgYW5kIGNsZWFuZWQgdXAgd2hpdGVzcGFjZSBpc3N1ZXMuCisgICAgRm9ybWF0IGZvciA4MC1jb2x1bW5zIHRvby4KIAotKiBQQ0llIGVuZHBvaW50IHN1cHBvcnQgZm9yIEFNQ0MgWXVjY2EgNDQwU1BlIGJvYXJkCi0gIFBhdGNoIGJ5IFRpcnVtYWxhIFIgTWFycmksIDI2IEF1ZyAyMDA2Citjb21taXQgMzMzOTYxYWU3MDk1ZmM2NmQ4YTA0MWZjZTFhYzllZTg3M2IwOWQ4NgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgT2N0IDEwIDE3OjAyOjIyIDIwMDYgLTA1MDAKIAotKiBJbXByb3ZlIERJTU0gZGV0ZWN0aW9uIGZvciBBTUNDIFl1Y2NhIDQ0MFNQZSBib2FyZAotICBJbXByb3ZlZCB0aGUgbWVtb3J5IERJTU0gZGV0ZWN0aW9uIGZvciB0aGUgWXVjY2EgNDQwU1BlIGJvYXJkIGZvcgotICB0aGUgY2FzZSB3aGVyZSBhIG1lbW9yeSBESU1NIGlzIGZhbHNlbHkgZGV0ZWN0ZWQgYXMgcHJlc2VudC4KLSAgVGhpcyBpc3N1ZSBpcyBzZWVuIG9uIHNvbWUgQU1DQyBZdWNjYSA0NDBTUGUgdmFsaWRhdGlvbiBib2FyZHMgaWYKLSAgb25seSBvbmUgNTEyTUIgbWVtb3J5IERJTU0gaXMgaW5zdGFsbGVkLCBpLmUuIERJTU0gc2xvdCAwIGlzCi0gIHBvcHVsYXRlZCBhbmQgRElNTSBzbG90IDEgaXMgZW1wdHkuICBJbiB0aGlzIGNhc2UsIFUtQm9vdCBkb2VzCi0gIG5vdCBjb3JyZWN0bHkgZGV0ZWN0IHRoYXQgdGhlcmUgaXMgb25seSBvbmUgRElNTSBtZW1vcnkgbW9kdWxlCi0gIGluc3RhbGxlZCBhbmQgd2lsbCBmYWxzZWx5IGRldGVjdCB0d28gRElNTSBtZW1vcnkgbW9kdWxlcyBhcmUKLSAgcHJlc2VudCBhbmQgdGhlcmVmb3JlIFUtQm9vdCB3aWxsIG5vdCBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgYW1vdW50Ci0gIG9mIHRvdGFsIG1lbW9yeSBhbmQgdS1ib290IHdpbGwgbm90IGJvb3RpbmcgdXAuCi0gIFBhdGNoIGJ5IEFkYW0gR3JhaGFtLCAyNCBBdWcgMjAwNgorICAgIEZpeCB3aGl0ZXNwYWNlIGFuZCA4MC1jb2wgaXNzdWVzLgogCi0qIEZpeCB0eXBvLgorY29tbWl0IGY1NWRmMTgxODdlN2E0NWNiNzNmZWM0MzcwZDEyMTM1ZTY2OTFhZTEKK0F1dGhvcjogSm9obiBUcmFpbGwgPGpvaG4udHJhaWxsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBTZXAgMjkgMDg6MjM6MTIgMjAwNiArMDEwMAogCi0qIENvZGUgY2xlYW51cAorICAgIEZpeCBtaXNzaW5nIHRDeWNsZS9tb2RmcmVxIGNhbGN1bGF0aW9uLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgogCi0qIFVwZGF0ZSBmb3IgTUNDMjAwIC8gUFJTMjAwIGJvYXJkczoKLSAgLSBhdXRvLWFkanVzdCBjb25zb2xlIGRldmljZSBmb3IgTGludXguCi0gIC0gZml4IHR5cG9zLgorY29tbWl0IDgyNzJkYzJmNThmMjQ3M2Q4OTk1ZmNjOWI5MTY0NDBjZmJhMDgwZjAKK0F1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgU2VwIDEzIDEwOjMzOjM1IDIwMDYgLTA1MDAKIAotKiBBZGQgYSBmaXggZm9yIGEgYnVnZ3kgVVNCIGRldmljZSBvbiB0aGUgRk8zMDAgYm9hcmQuCisgICAgVXBkYXRlZCBjb25maWcgaGVhZGVycyB0byBhZGQgZGVmYXVsdCBGRFQtYmFzZWQgYm9vdGluZwogCi0qIFVwZGF0ZXMgZm9yIE1DQzIwMCAvIFBSUzIwMCBib2FyZHM6Ci0gIC0gc3VwcG9ydCBmb3IgY29uZmlndXJhdGlvbnMgd2l0aCBTRFJBTSBvciBERFIgbWVtb3J5LAotICAtIHN1cHBvcnQgZm9yIGhpZ2hib290IGFuZCBsb3dib290Ci0gIC0gYWRqdXN0aW5nIGVudmlyb25tZW50IGRlZmluaXRpb25zCitjb21taXQgMDlmM2UwOWU5ZWJjZmE3OTE5Y2E4OTMxYTRiNTUwNGZhZGQxZjFkMworQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBTZXAgMTMgMTA6MzQ6MTggMjAwNiAtMDUwMAogCi0qIEFkZCBzdXBwb3J0IGZvciBXVEsgRk8zMDAgYm9hcmQgKFRRTTUyMDAgYmFzZWQpLgorICAgIEFkZCBzdXBwb3J0IGZvciBlVFNFQyAzICYgNCBvbiA4NTQ4IENEUworICAgIAorICAgICogQWRkZWQgc3VwcG9ydCBmb3IgdXNpbmcgZVRTRUMgMyBhbmQgZVRTRUMgNCBvbiB0aGUgODU0OCBDRFMuCisgICAgICBUaGlzIHdpbGwgb25seSB3b3JrIG9uIHJldiAxLjMgYm9hcmRzIChidXQgZG9lc24ndCBicmVhayBvbGRlciBib2FyZHMpCisgICAgKiBDbGVhbmVkIHVwIHNvbWUgY29tbWVudHMgdG8gcmVmbGVjdCB0aGUgZXhwYW5kZWQgcm9sZSBvZiB0c2VjCisgICAgICBpbiBvdGhlciBzeXN0ZW1zCiAKLSogRml4IFRRTTgzNHggaGFuZy4KK2NvbW1pdCAwODRkNjQ4YjEwOWM4OTg0ZjgzNjc0MDQzYzFhN2ZhMzg4NWVmODAxCitBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIFNlcCAxMyAxMDozMzo1NiAyMDA2IC0wNTAwCiAKLSogVXBkYXRlIGZvciBTQzUyMCBib2FyZC4KLSAgUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAwMiBEZWMgMjAwNQorICAgIEFkZGVkIGNvZGUgdG8gc3VwcG9ydCAyLjYuMTggUENJIGNoYW5nZXMgaW4gdS1ib290CisgICAgCisgICAgKiBBZGRlZCBjb2RlIHRvIHN3aXp6bGUgdGhlIElSUSBtYXAgZm9yIHRoZSBQQ0kKIAotKiBGaXhlZCBjb21tb24uaCBzcGVsbGluZyBlcnJvci4KLSAgUGF0Y2ggYnkgQ29yeSBUdXNhciwgMzAgTm92IDIwMDUKK2NvbW1pdCBhZmJkYzY0OWY4NzUxZTRmNGYxYTZmNTI3ZWRmZTEzOTc3M2YyYzE1CitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBTZXAgMTkgMDk6MzQ6MTAgMjAwNiAtMDUwMAogCi0qIEZpeCB0eXBvLgotICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAyOCBOb3YgMjAwNQorICAgIE1vZGlmaWVkIG1ha2VmaWxlIGZvciBuZXcgYnVpbGQgbWVjaGFuaXNtLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IGZhdGxvYWQgY29tbWFuZCBvbiBGQVQzMiBmb3JtYXR0ZWQgcGFydGl0aW9ucy4KLSAgUGF0Y2ggYnkgSm9hY2hpbSBKYWVnZXIsIDE4IE5vdiAyMDA1Citjb21taXQgZDE0YmE2YTc5OGJlYjc1M2U3YTg2NDUwMDQxNGZjYzJkMTk4YjhiYworQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgU2VwIDE0IDA4OjQwOjM2IDIwMDYgLTA1MDAKIAotKiBGaXggZHJpdmVycy9kbTkwMDAuYyB3aGVuIGNvbmZpZ3VyZWQgaW4gMzIgYml0IG1vZGUuCi0gIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAxNyBOb3YgMjAwNQorICAgIEhhbmRsZSA4Nnh4IFNWUiB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBuZXcgUmVmZXJlbmNlIE1hbnVhbC4KKyAgICBCb3RoIDg2NDEgYW5kIDg2NDFEIGhhdmUgU1ZSID09IDB4ODA5MCwgYW5kIGFyZSBkaXN0aW5ndWlzaGVkCisgICAgYnkgdGhlIGJ5dGUgaW4gYml0cyAxNi0yMyBpbnN0ZWFkLgorICAgIFRoYW5rcyB0byBKYXNvbiBKaW4gZm9yIG5vdGljaW5nLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogQ2xlYW51cCBkZWJ1ZyBjb2RlIGZvciB5dWNjYSBib2FyZC4KK2NvbW1pdCA4OGM4ZjQ5MjFmYzQ3ZmIwZWIyMzg0YjE2NTg2ZjFiZDdmMjc1YmU3CitBdXRob3I6IFpoYW5nIFdlaSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIE1vbiBBdWcgMjggMTQ6MjU6MzEgMjAwNiArMDgwMAogCi0qIE1DQzIwMDogcmVzdHJpY3QgYWRkcmVzc2FibGUgZmxhc2ggc3BhY2UgdG8gMzIgTUIKKyAgICBGaXhlZCBhbiBPRi10cmVlIG9mZi1ieS1vbmUgYnVnIHdoZW4gYWRkaW5nIGEgbmV3IHByb3BlcnR5IG5hbWUuCisgICAgVGhpcyBidWcgd2lsbCBjYXVzZSB0aGUga2VybmVsIGJvb3RpbmcgdG8gcGF1c2UgYSBsb25nIHRpbWUuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIDJmMTU3NzZjY2M2ZGMzMjM3N2Q4YmE5NjUyYjhmNTgwNTljMjdjNmQgY29tbWl0KQogCi0qIEFkZCBkZWJ1ZyBjb25zb2xlIG9uIENPTTEyIGZvciBNQ0MyMDAgYm9hcmQKK2NvbW1pdCA5YmZmN2E2OWE4ODVhZGViYmQyYmQ0NTk5MDQ5NGVjNGNmOTk4YTMwCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMjkgMTE6MDU6MDkgMjAwNiAtMDUwMAogCi0qIEZpeCBjb250cm9sLWMgaGFuZGluZyBpbiBDT05GSUdfQ01ETElORV9FRElUSU5HCi0gIFByb3Blcmx5IHBhc3MgYnJlYWsgY29kZSBiYWNrIGZyb20gcmVhZGxpbmUuCi0gIFBhdGNoIGJ5IFJvZ2VyIEJsb2ZlbGQsIDMxIEp1bCAyMDA2CisgICAgUmVtb3ZlIHRyYWlsaW5nIGVtcHR5IGxpbmVzLgogCi0qIEFkZCBjb21tYW5kbGluZSBoaXN0b3J5IHN1cHBvcnQgdG8gYWxsIEFNQ0MgZXZhbCBib2FyZHMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgorY29tbWl0IGNkNmQ3M2Q1Yjg5NWE1OTM1YWM0ZmRlMGEzNTYyODgxNDJhNTg0ZTAKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAyOSAwOTo0ODo0OSAyMDA2IC0wNTAwCiAKLSogQWRkIE1hY3Jvbml4IE1YTFYzMjBUIGZsYXNoIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgQXVnIDIwMDYKKyAgICBSZW1vdmUgYm9ndXMgbXN5bmMgYW5kIHVzZSB2b2xhdGlsZSBhc20uCiAKLSogQ2hhbmdlICJtaWkgaW5mbyIgdG8gbm90IHByaW50IGFuIGVycm9yIHVwb24gbWlzc2luZyBQSFkgYXQgYWRkcmVzcwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IEF1ZyAyMDA2Citjb21taXQgNzc4ZDQ1MDQ5Y2U1OTI3YjY1YjNmZjFkOGU2NjkyYjY1NGJkZDQ5ZQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDI5IDA4OjE3OjE0IDIwMDYgLTA1MDAKIAotKiBGaXggUENJLUV4cHJlc3Mgb24gUFBDNDQwU1BlIHJldi4gQS4KKyAgICBBZGQgbXlzZWxmIGFzIG1haW50YWluZXIgZm9yIE1QQzg2NDFIUENOLgogCi0qIEZpeCBwcmVib290IG1lc3NhZ2Ugb24gVFFNODV4eCBhZnRlciBzd2l0Y2hpbmcgdG8gaHVzaCBwYXJzZXIuCitjb21taXQgMmYxNTc3NmNjYzZkYzMyMzc3ZDhiYTk2NTJiOGY1ODA1OWMyN2M2ZAorQXV0aG9yOiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gQXVnIDI4IDE0OjI1OjMxIDIwMDYgKzA4MDAKIAotKiBBZGFwdCBUUU04NXh4IHJhbWRpc2sgYWRkcmVzcyB0byBMaW51eCBrZXJuZWwgbWVtb3J5IG1hcAorICAgIEZpeGVkIGFuIE9GLXRyZWUgb2ZmLWJ5LW9uZSBidWcgd2hlbiBhZGRpbmcgYSBuZXcgcHJvcGVydHkgbmFtZS4KKyAgICBUaGlzIGJ1ZyB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgYm9vdGluZyB0byBwYXVzZSBhIGxvbmcgdGltZS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFBDSS1FeHByZXNzIG9uIFBQQzQ0MFNQZSAoWXVjY2EgYm9hcmQpLgorY29tbWl0IDU1Njc4MDZiNjdkMGFlODM0OTNhYTg4MjNhZDNiNmM5MTRmNTgxZDcKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIEF1ZyAyNSAxNDozODozNCAyMDA2IC0wNDAwCiAKLSogRml4IGNvbXBpbGVyIHdhcm5pbmcgZm9yIFRSQUIgYm9hcmQuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEF1ZyAyMDA2CisgICAgQ2hhbmdlIHJhbWRpc2thZGRyIGFuZCBkdGJhZGRyCisgICAgUmVtb3ZlIFBFWCBmbHVmZiBjb21tYW5kcy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogUHJldmVudCBVU0IgY29tbWFuZHMgZnJvbSB3b3JraW5nIHdoZW4gVVNCIGlzIHN0b3BwZWQuCitjb21taXQgYjJiNzg0MjFkOWRiNDljMjFhODIxYWY4YTE5YzIxYzFmN2RmYjI5ZQorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgQXVnIDIzIDEzOjMyOjQ1IDIwMDYgLTA1MDAKIAotKiBBZGQgcnVkaW1lbnRhcnkgaGFuZGxpbmcgb2YgYWx0ZXJuYXRlIHNldHRpbmdzIG9mIFVTQiBpbnRlcmZhY2VzLgotICBUaGlzIGlzIGluIG9yZGVyIHRvIGZpeCBpc3N1ZXMgd2l0aCBzb21lIFVTQiBzdGlja3MgdGltaW5nIG91dAotICBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFNvbWUgY29kZSByZWFkYWJpbGl0eSBpbXByb3ZlbWVudHMuCisgICAgKiBBbm90aGVyIHNtYWxsIGZpeCBmb3IgYm9vdGluZyB3aXRoIGRpc2FibGVfb2YKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgogCi0qIFBQQzQ0MCBERFIgc2V0dXA6IFNldCBTRFJBTTBfQ0ZHMFtQTVVdPTAgZm9yIGJlc3QgcGVyZm9ybWFuY2UKLSAgQU1DQyBzdWdnZXN0ZWQgdG8gc2V0IHRoZSBQTVUgYml0IHRvIDAgZm9yIGJlc3QgcGVyZm9ybWFjZSBvbgotICB0aGUgUFBDNDQwIEREUiBjb250cm9sbGVyLgotICBQbGVhc2Ugc2VlIGRvYy9SRUFETUUuNDQwLUREUi1wZXJmb3JtYW5jZSBmb3IgZGV0YWlscy4KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBKdWwgMjAwNgorY29tbWl0IDRhN2NjMGYyMTkxOGU2ZWNmMDdlZDU3MDc1ZDY3ZGYyYzRhMTI5OWMKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEF1ZyAyMyAxMTowNDo0MyAyMDA2IC0wNTAwCiAKLSogQU1DQyBiYW1ib28gKDQ0MEVQKSBVLUJvb3QgaW1hZ2UgcmVkdWNlZCB0byAzODRrYnl0ZQotICBQbGVhc2Ugc2VlIGRvYy9SRUFETUUuYmFtYm9vIGZvciBkZXRhaWxzLgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IEp1bCAyMDA2CisgICAgQ2xlYW51cCBhbmQgbGluZGVudCBuZXcgQUhDSSBkcml2ZXIuCiAKLSogRml4IENPTkZJR19DTURMSU5FX0VESVRJTkcgaW1wbGVtZW50YXRpb24KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBKdWwgMjAwNgorY29tbWl0IGRhYmY5ZWY4YzEwYjRkZWFkNWVmMjEwNmVmNzQyYjFjMDZiNTQyZGUKK0F1dGhvcjogSmluIFpoZW5neGlvbmcgPGphc29uQGJ1cy5hcC5mcmVlc2NhbGUubmV0PgorRGF0ZTogICBXZWQgQXVnIDIzIDE5OjE1OjEyIDIwMDYgKzA4MDAKIAotKiBGaXggcHJlYm9vdCBtZXNzYWdlIG9uIFRRTTUyMDAgYWZ0ZXIgc3dpdGNoaW5nIHRvIGh1c2ggcGFyc2VyLgorICAgIEFkZCBBSENJIGRlZmluZSBhbmQgc2F0YSBzdXBwb3J0IGZvciBNUEM4NjQxSFBDTiBib2FyZC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5Okphc29uIEppbjxqYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KIAotKiBNQ0MyMDA6IHNldCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gbG93X2Jvb3QgRERSLAotICBhbmQgc3VwcG9ydCBmb3IgY29uZmlndXJhYmxlIG9wdGlvbnMgaGlnaF9ib290IGFuZC9vciBTRFJBTS4KK2NvbW1pdCA0NzgyYWM4MGIwMmYwZDAxYWZkMzA5ZTIyMDBkZDNjNzAzN2YyYmE0CitBdXRob3I6IEppbiBaaGVuZ3hpb25nIDxqYXNvbkBidXMuYXAuZnJlZXNjYWxlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAyMyAxOToxMDo0NCAyMDA2ICswODAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIDI1NiBNQiBTRFJBTSBvbiBDUFU4NwotICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDI1IE5vdiAyMDA1CisgICAgQWRkIEFIQ0kgc3VwcG9ydCB0byB1LWJvb3QKKyAgICAKKyAgICBBZGQgQUhDSSBzdXBwb3J0IGluIHUtYm9vdCwgZW5hYmxlIHRoZSBzYXRhIGRpc2sgY29udHJvbGxlcnMgd2hpY2gKKyAgICBmb2xsb3dpbmcgdGhlIEFIQ0kgcHJvdG9jb2wuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTpKYXNvbiBKaW48amFzb24uamluQGZyZWVzY2FsZS5jb20+CiAKLSogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIGNhbTUyMDAgYm9hcmQgKGJhc2VkIG9uIFRRTTUyMDBTKS4KK2NvbW1pdCBkOGVhMmFjZjVmMTM3Y2FlOTk0MTdkZjRmNTczZDAzNmVlMzg0NjY4CitBdXRob3I6IFpoYW5nIFdlaSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBBdWcgMjMgMTc6NTQ6MzIgMjAwNiArMDgwMAogCi0qIE1vcmUgY29kZSBjbGVhbnVwCisgICAgQWRkIGR0YiBib290LXVwIHBhcmFtZXRlciB0byBkZWZhdWx0IGJvb3QgY29tbWFuZHMuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KIAotKiBEaXNhYmxlZCBrdm1lMDgwIGJvYXJkIGluIE1BS0VBTEwgYmVjYXVzZSBvZiBidWlsZCBwcm9ibGVtcy4KK2NvbW1pdCBiOTM3NzVjMjAzNmI5OWJhYTM5MGVhNDI1YzQ3NzE4OTViYmM2M2M0CitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMjIgMTg6MjY6MDggMjAwNiAtMDUwMAogCi0qIENvZGUgY2xlYW51cAorICAgIENsZWFudXAgZXZlbiBtb3JlIHBvb3JseSBpbnRyb2R1Y2VkIHdoaXRlc3BhY2UuCiAKLSogVXBkYXRlIE5ldFN0YXIgYm9hcmQKLSAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDAzIE5vdiAyMDA1Citjb21taXQgYWU2MjQxNjg1Y2JjZjBjNzlhMzYzNjUzMGQyY2VhYjFmYjI5MWE5NAorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDE4OjA3OjAwIDIwMDYgLTA1MDAKIAotKiBNYWtlIGNvZGUgYmV0dGVyIHJlYWRhYmxlLgotICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMTQgU2VwIDIwMDUKKyAgICBDbGVhbnVwIG1vcmUgcG9vcmx5IGludHJvZHVjZWQgd2hpdGVzcGFjZS4KIAotKiBFbmFibGUgaW5pdHJkIEFUQUcgZm9yIHhtMjUwIGJvYXJkLgotICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDA1IFNlcCAyMDA1Citjb21taXQgMmMzM2U4YTFjNTM1YjNhZTkxY2YwYjI4NDQ4MDYwMGJmM2Y1N2M1NworQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDE3OjU0OjA1IDIwMDYgLTA1MDAKIAotKiBBZGQgcmVhZGxpbmUgY21kbGluZS1lZGl0aW5nIGV4dGVuc2lvbgotICBQYXRjaCBieSBKaW5IdWEgTHVvLCAwMSBTZXAgMjAwNQorICAgIENsZWFudXAgcG9vcmx5IGludHJvZHVjZWQgd2hpdGVzcGFjZS4KIAotKiBBZGQgc3VwcG9ydCBmb3IgZnJpZW5kbHktYXJtIFNCQy0yNDEwWCBib2FyZAotICBQYXRjaCBieSBKaW5IdWEgTHVvLCAwMSBTZXAgMjAwNQorY29tbWl0IDgwZTk1NWM3ZGQ5OGY0YjRmZDIzYzIxMTNjYWY3NWVkMmI3N2I1YjMKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAyMiAxMjoyNToyNyAyMDA2IC0wNTAwCiAKLSogRml4IG11bHRpLXBhcnQgaW1hZ2Ugc3VwcG9ydCBvbiBpMzg2IHBsYXRmb3JtLgotICBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDE5IEF1ZyAyMDA1CisgICAgR2VuZXJhbCBpbmRlbnQgYW5kIHdoaXRlc3BhY2UgY2xlYW51cHMuCiAKLSogQWRkIHN1cHBvcnQgZm9yIEtWTUUwODAgYm9hcmQKLSAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOCBBdWcgMjAwNQorY29tbWl0IGZmZmYzYWU1NmY1ODQyY2EzNjc5ZTRjZTc5MjJiODE5YTg3YWFkOWYKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAyMiAxMjowNjoxOCAyMDA2IC0wNTAwCiAKLSogRml4IE1JUFMgTEUgYnVpbGQgcHJvYmxlbQotICBQYXRjaCBieSBNYXRlaiBLdXBsamVuLCAxMCBBdWcgMjAwNQorICAgIEdlbmVyYWwgaW5kZW50IGFuZCB3aGl0ZXNwYWNlIGNsZWFudXBzLgogCi0qIENoZWNrIGFyZ3VtZW50IGNvdW50IGluICJtaWkiIGNvbW1hbmQuCi0gIFByb2JsZW0gcG9pbnRlZCBvdXQgYnkgQW5kcmV3IER5ZXIsIDEzIEp1biAyMDA1Citjb21taXQgNDFhMGU4YjMwNGQzZmY1NWZlMjdhMjMwNTA3YWFjNzk2ODQwMTZhYworQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDEwOjQyOjIxIDIwMDYgLTA1MDAKIAotKiBDbGVhbnVwIFRRTTUyMDAgYm9hcmQgY29uZmlndXJhdGlvbnM6Ci0gIC0gbWFrZSBoaWdoYm9vdCBjb25maWd1cmF0aW9ucyB1c2UgZW52aXJvbm1lbnQgYXQgaGlnaCBlbmQsIHRvbywKLSAgICB0byBhdm9pZCBmbGFzaCBmcmFnbWVudGF0aW9uCi0gIC0gYWx3YXlzIHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQKLSAgLSBkb24ndCBlbmFibGUgdmlkZW8gY29kZSBmb3IgbW9kdWxlcyB3aXRob3V0IGdyYXBoaWNzIGNvbnRyb2xsZXIKLSAgLSBwcm92aWRlIHVzZWZ1bCAodGhvdWdoIGRpZmZlcmVudCkgbXRkcGFydHMgc2V0dGluZ3MKLSAgLSBnZXQgcmlkIG9mIENPTkZJR19DU19BVVRPQ09ORiB3aGljaCB3YXMgYWx3YXlzIHNldCBhbnl3YXkKKyAgICBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzLgogCi0qIEV4dGVuZCBta2NvbmZpZyB0b29sIHRvIHByaW50IG1vcmUgdXNlZnVsIHRhcmdldCBuYW1lCitjb21taXQgNWRlNjJjNDdhODYyOGIzZGE0ZDczZjdjMDcwMjdmMzJhMzM0MmQ0MAorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDA5OjMxOjU5IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgaGlnaC1ib290IG9uIFRRTTUyMDAgYW5kIFRRTTUyMDBTIGJvYXJkcy4KLSAgSGludDogdGhlIENQTEQgb24gdGhlIFRRTTUyMDAgbXVzdCBiZSBwcm9ncmFtbWVkIHdpdGggYSBzb2Z0d2FyZQotICB2ZXJzaW9uIHN1cHBvcnRpbmcgdGhlIGhpZ2ggYm9vdCBvcHRpb24hIFRoZSBuZXcgVFFNNTIwMFMgaXMKLSAgYWxyZWFkeSBzdXBwb3J0aW5nIHRoaXMgb3B0aW9uLiBPbiB0aGUgVFFNNTIwMCB0aGlzIG9wdGlvbiB3aWxsIGJlCi0gIHN1cHBvcnRlZCBpbiBjb25maWd1cmF0aW9ucyB3aXRoIE1QQzUyMDAgcmV2IEIgcHJvY2Vzc29ycy4KLSAgVG8gYWN0dWFsbHkgImhpZ2ggYm9vdCIsIHNldCBqdW1wZXIgWDMwIG9uIHRoZSBTVEs1Mnh4LgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMiBKdWwgMjAwNgorICAgIEZpeCBkaXNhYmxlX29mIGJvb3RpbmcKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBzdXBwb3J0IGZvciBuZXcgVFFNNTIwMCByZXZpc2lvbnMKLSAgLSBTdXBwb3J0IGZvciBUUU01MjAwUyAoc2hvcnQgdmVyc2lvbiB3aXRob3V0IGdyYXBoaWMgY29udHJvbGxlcikKLSAgLSBTdXBwb3J0IGZvciBtb2R1bGVzIHdpdGggJ04nIHR5cGUgUzI5R0wxMjhOIFNwYW5zaW9uIGZsYXNoZXMKLSAgICAocmVxdWlyZXMgY2hhbmdlcyB0byBmbGFzaCBsYXlvdXQpCi0gIC0gU3VwcG9ydCBmb3IgTVBDNTIwMEIgY3B1IChtb3N0bHkgc3VwcG9ydCBmb3Igc2Vjb25kIFNEUkFNIGJhbmspCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEp1bCAyMDA2Citjb21taXQgODdhNDQ5YzhhYzM5NjQyMGNiMjQyNjBmNzE3ZWE5ZTZmYWE4MjA0NworQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgQXVnIDIyIDA5OjIzOjU1IDIwMDYgLTA1MDAKIAotKiBGaXggc3VwcG9ydCBmb3IgUFMvMiBrZXlib2FyZCBvbiBUUU04NXh4IGJvYXJkcwotICBUaGUgUFMvMiBrZXlvYmFyZCBkcml2ZXIgZm9yIHRoZSBUUU04NXh4IG1vZHVsZXMgb25seSBzdXBwb3J0cyB0aGUKLSAgaW50ZXJuYWwgRFVBUlQgb2YgdGhlIE1QQzg1eHggQ1BVLiBTaW5jZSB0aGUgTVBDODU2MCBkb2Vzbid0Ci0gIGluY2x1ZGUgYSBEVUFSVCwgdGhlIFRRTTg1NjAgbW9kdWxlcyBjYW4ndCBiZSB1c2VkIHdpdGggdGhlIFBTLzIKLSAga2V5Ym9hcmQgY29udHJvbGxlciBvbiB0aGUgU1RLODV4eCBib2FyZC4KLSAgVGhlIFBTLzIga2V5Ym9hcmQgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggdGhlIG1vZHVsZXMgVFFNODU0MCwKLSAgVFFNODU0MSBhbmQgVFFNODU1NSwgYnV0IGl0IG9ubHkgaGFzIGJlZW4gdGVzdGVkIG9uIGEgVFFNODU0MCwgeWV0LgotICBNYWtlIHN1cmUgdGhlIFBTLzIgY29udHJvbGxlciBvbiB0aGUgU1RLODV4eCBpcyBwcm9ncmFtbWVkLiBKdW1wZXIKLSAgc2V0dGluZ3M6IFg2NiAxLTIsIDktMTA7IFg2MSAyLTMKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjEgSnVuIDIwMDYKKyAgICBTdXBwb3J0IGZvciBGRFQgaW4gdUltYWdlIGZvcm1hdCwgZXJyb3Igd2hlbiB1c2luZyBGRFQgZnJvbSBmbGFzaAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CiAKLSogQWRqdXN0IFJUQyBjZW50dXJ5IGhhbmRsaW5nIG9uIFNUSzUyeHggYm9hcmQgdG8gbWF0Y2ggTGludXggZHJpdmVyLgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMiBKdW4gMjAwNgorY29tbWl0IDc1YzI5OWMzODM2OWQwMWFkZGQ1ZTA1NGI4YTE2MjE3YjcwZjRhODYKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAxNSAxNToxMjo1NSAyMDA2IC0wNDAwCiAKLSogQWRqdXN0IGZpbGVuYW1lcyBmb3IgVVNCIHVwZGF0ZSBpbWFnZXMgb24gVFJBQiBib2FyZC4KLSAgRHVyaW5nIGFuIGF1dG9tYXRpYyB1cGRhdGUgdmlhIFVTQiBzdGljaywgVS1Cb290IHNlYXJjaGVzIGZvcgotICBpbWFnZXMgd2l0aCB0aGUgbmFtZSAiZmlybXdhcmUuaW1nIiBhbmQgImtlcm5lbC5pbWciLiBUaGlzIG5hbWVzCi0gIGFyZSBub3cgY2hhbmdlZCB0byAiZmlybXdfMDEuaW1nIiBhbmQgImtlcm5sXzAxLmltZyIuIFRoaXMgaXMgZG9uZSwKLSAgdG8gcHJldmVudCB1cGRhdGVzIG9mIG5ldyBib2FyZHMgKHdpdGggdGhlIG5ldyBtYWNyb25pY3MgImMiIHN0ZXAKLSAgZmxhc2hlcykgd2l0aCBvbGQsIGluY29tcGF0aWJsZSBmaXJtd2FyZSBvciBrZXJuZWwgdmVyc2lvbnMuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIxIEp1biAyMDA2CisgICAgVW5sb2NrIGNhY2hlIGJlZm9yZSBrZXJuZWwgc3RhcnRzIHVwIGZvciBNUEM4Nnh4CiAKLSogQnVnZml4IGluIFZGRCByb3V0aW5lIG9uIFRSQUIgYm9hcmQuCi0gIE1ha2Ugc3VyZSB1cHBlciBsZXh0IHBpeGVsIGNhbiBiZSBzZXQgdG8gYmx1ZSwgdG9vCi0gIChzbyBmYXIgb25seSByZWQgd2FzIHBvc3NpYmxlKS4KLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTUgRmViIDIwMDYKK2NvbW1pdCA2NzI1NjY3OGYwMGMwOWIwYTdmMTllODYyZTVjMTg0NzU1M2QzMWJjCitBdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMTUgMTU6MTM6MTUgMjAwNiAtMDQwMAogCi0qIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRCNTIwMCBib2FyZC4KKyAgICBDb3B5IEdsb2JhbCBEYXRhIFBvaW50ZXIgdG8gcjI5IGZvciBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUgogCi0qIEZpeCBzb21lIGJ1Z3MgaW4gVFJBQiBib2FyZCBmbGFzaCBkcml2ZXIuCi0gIC0gaW5jcmVhc2UgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgZnJvbSAyIHRvIDE1IHNlY29uZHMKLSAgLSB1c2UgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgZm9yIHByb2dyYW1taW5nIGluc3RlYWQgb2YgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQKLSAgLSByZW1vdmUgIlVubG9jayBCeXBhc3MiIG1vZGUsIGJlY2F1c2UgbWFjcm9uaXggZmxhc2hlcyBkbyBub3Qgc3VwcG9ydAotICAgIHRoaXMgbW9kZSBvZmZpY2lhbGx5Ci0gIC0gZml4IGZsYXNoIHJlc2V0IGNvbW1hbmQgZnJvbSAweDAwRkYgdG8gMHgwMEYwLiAweDAwRkYgaXMgb25seSBzcGVjaWZpZWQKLSAgICBmb3IgSW50ZWwgY29tcGF0aWJsZSBmbGFzaGVzLCBub3QgZm9yIEFNRCBjb21wYXRpYmxlLgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNSBGZWIgMjAwNgorY29tbWl0IDFjOGY2ZDhmYjAyOGYxNTYwOTRkMDVmMmQxNDI5OGU2NDc5MzY0YWMKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAxNSAxNToxMjo1NSAyMDA2IC0wNDAwCiAKLSogQWRkIGFkZGl0aW9uYWwgZXJyb3IgbWVzc2FnZXMgdG8gZmxhc2ggZHJpdmVyIG9uIFRSQUIgYm9hcmQKLSAgKGZvciBlcmFzZSBlcnJvcnMgYW5kIHRpbWVvdXQgZXJyb3JzKQotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNCBGZWIgMjAwNgorICAgIFVubG9jayBjYWNoZSBiZWZvcmUga2VybmVsIHN0YXJ0cyB1cCBmb3IgTVBDODZ4eAogCi0qIEFkZCBzdXBwb3J0IGZvciBUQjUyMDAgYm9hcmQKLSAgVGhlIFRCNTIwMCAoIlRpbnlib3giKSBpcyBhIHNtYWxsIGJhc2Vib2FyZCBmb3IgdGhlIFRRTTUyMDAgbW9kdWxlCi0gIGludGVncmF0ZWQgaW4gYSBsaXR0bGUgYWx1bWluaXVtIGNhc2UuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDggSnVuIDIwMDYKK2NvbW1pdCAwZDljY2M1NWVkZjlhN2YzYzViMmI2MjYzNTgwYTZlYThkNzAyYTA0CitBdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMTUgMTU6MTM6MTUgMjAwNiAtMDQwMAogCi0qIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRRTTUyMDAgYm9hcmQuCisgICAgQ29weSBHbG9iYWwgRGF0YSBQb2ludGVyIHRvIHIyOSBmb3IgREVDTEFSRV9HTE9CQUxfREFUQV9QVFIKIAotKiBGaXggcHJvYmxlbXMgd2l0aCBTYW5EaXNrIENvcnBvcmF0aW9uIENydXplciBNaWNybyBVU0IgbWVtb3J5IHN0aWNrLgorY29tbWl0IDg2YzhlMTdmMjVlOTcyYTdlMjcyOTUwYTA3MzVmYWQ4NGUwODJiODgKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEF1ZyAxNiAxMzo1OTo0NyAyMDA2IC0wNTAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIFRRTTg4NUQgYm9hcmQuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIwIE1hciAyMDA2CisgICAgKiBGaXggZGlzYWJsZV9vZiBib290aW5nCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggRkVDIGluaXRpYWxpc2F0aW9uOiBBbGwgTUlJIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB2aWEgRkVDMQotICByZWdpc3RlcnMsIGJ1dCBNSUlfU1BFRUQgd2FzIGNvbmZpZ3VyZWQgYWNjb3JkaW5nIHRvIEZFQyB1c2VkLiBTbwotICBpZiBvbmx5IEZFQzIgd2FzIHVzZWQsIHRoaXMgY2F1c2VkIHRoZSByZWFsIE1JSV9TUEVFRCByZWdpc3RlciBpbgotICBGRUMxIHRvIHN0YXkgdW5pbml0YWxpc2VkLCBsZXFhZGluZyB0byAibWlpX3NlbmQgU1RVQ0shIiBtZXNzYWdlcy4KLSAgRml4OiBhbHdheXMgY29uZmlndXJlIE1JSV9TUEVFRCBvbiBGRUMxIG9ubHkuCi0gIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDEyIEp1bCAyMDA2Citjb21taXQgMjVjNzUxZTlhZGM4NmUyMmZlM2I1YjQ3Y2YyODA2Mzc5YjU3NWRiNworQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgQXVnIDE2IDEwOjU0OjA5IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgU1BDMTkyMCBib2FyZC4KLSAgUGF0Y2ggYnkgTWFya3VzIEtsb3R6YnVlY2hlciwgMTIgSnVsIDIwMDYKKyAgICAqIFN1cHBvcnQgZm9yIEZEVCBpbiB1SW1hZ2UgZm9ybWF0LCBlcnJvciB3aGVuIHVzaW5nIEZEVCBmcm9tIGZsYXNoCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KIAotKiBNQ0MyMDAgYm9hcmQ6IHN1cHBvcnQgY29uc29sZSBvbiBhbnkgb25lIG9mIHRoZSBRdWFkIFVBUlQgcG9ydHMuCitjb21taXQgZmVjZjFjN2U0ZGUxYjI3NzllZGMxODc0MmI5MWMyMmJkYzMyYjY4YgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gQXVnIDE0IDE1OjMzOjM4IDIwMDYgLTA1MDAKIAotKiBGaXggZXJyb3IgaW4gZmxhc2ggcHJvdGVjdGlvbiBjYWxjdWxhdGlvbiBvbiBNQ0MyMDAgYm9hcmQuCisgICAgRml4IEJBVDAgdG8gYWN0dWFsbHkgYmUgY2FjaGVhYmxlLCBub24tZ3VhcmRlZCBhcyBkb2N1bWVudGVkLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogTWFqb3IgUENNQ0lBIENsZWFudXAgdG8gbWFrZSBjb2RlIGJldHRlciByZWFkYWJsZSBhbmQgbWFpbnRhaW5hYmxlLgotICBOb3RlczoKLSAgLSBCb2FyZC1kZXBlbmRlbmQgY29kZSBmb3IgUlBYTElURSBhbmQgUlBYQ0xBU1NJQy1iYXNlZCBib2FyZHMKLSAgICBwbGFjZWQgdG8gdGhlIGRyaXZlcnMvcnB4X3BtY2lhLmMgZmlsZSB0byBhdm9pZCBkdXBsaWNhdGlvbi4KLSAgICBTYW1lIGZvciBUUU04eHgtYmFzZWQgYm9hcmRzIChkcml2ZXJzL3RxbTh4eF9wbWNpYS5jKS4KLSAgLSBkcml2ZXJzL2k4MjM2NS5jIGhhcyBiZWVuIHNwbGl0IGludG8gdHdvIHBhcnRzIGxvY2F0ZWQgYXQKLSAgICBib2FyZC9hdGMvdGkxMTN4LmMgYW5kIGJvYXJkL2NwYzQ1L3BkNjcyOTAuYyAoQVRDIGFuZCBDUEM0NSBhcmUKLSAgICB0aGUgb25seSBib2FyZHMgdXNpbmcgQ09ORklHXzgyMzY1KS4KLSAgLSBDaGFuZ2VzIHdlcmUgdGVzdGVkIGZvciBjbGVhbiBidWlsZCBhbmQgKnZlcnkqICpmZXcqIGJvYXJkcy4KK2NvbW1pdCA0MGJjODM1NTlkYjU3NDU2ODE5MDlmZDczODJhZTUwOTU2N2UxMTZkCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBBdWcgOSAxNTozMjoxNiAyMDA2IC0wNTAwCiAKLSogRml4IHRpbWVyIHByb2JsZW1zIG9uIEFNQ0MgeXVjY2EgYm9hcmQuCi0gIFNldCBUaW1lciBDbG9jayBTZWxlY3QgdG8gdXNlIENQVSBjbG9jayBhcyBhIHRpbWVyIGlucHV0IHNvdXJjZS4KKyAgICBSZW1vdmVkIE1QQzg2NDFIUENOIERUUyBzb3VyY2UgZmlsZSBmcm9tIGJ1aWxkLgorICAgIEl0IGlzIG5vIGxvbmdlciBsaW5rZWQgaW50byBVLUJvb3Q7IGl0cyBzb3VyY2VzIGFyZQorICAgIG5vdyBsb2NhdGVkIGluIHRoZSBrZXJuZWwgdHJlZS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIEJyaW5nIHl1Y2NhIGNvbmZpZyBtb3JlIGluIGxpbmUgd2l0aCBvdGhlciBBTUNDIGJvYXJkcy4KK2NvbW1pdCAzNGMzYzBlMDFkYmYxZjhjYzJiZDA4ZGU5MmYyYjg5YmE4NDkyMWViCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDc6MDMgMjAwNiAtMDUwMAogCi0qIEFkZCBBTUNDIGJhbWJvbyBib2FyZCB0byBNQUtFQUxMIGJ1aWxkIHNjcmlwdC4KKyAgICAqIFN3aXRjaGVkIGRlZmF1bHQgUENJIHNwZWVkIGZvciA4NTQwIEFEUyBiYWNrIHRvIDMzTUh6CisgICAgCisgICAgKiBBZGRlZCBjb21tZW50cyBhbmQgYSBwcmludGYgdG8gd2FybiB0aGF0IFBDSS1YIHdvbid0CisgICAgICB3b3JrIGF0IDMzTUh6CisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IEFNQ0MgYmFtYm9vIGV2YWwgYm9hcmQgY29tcGlsYXRpb24gZXJyb3JzLgorY29tbWl0IGI2YzVlMTM3M2I2ZWEwYmIzN2ExOGU0YWVlY2VjMDA2MTNkMWNkMzkKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NjozNSAyMDA2IC0wNTAwCiAKLSogQWRkIHN5c3RlbSBtZW1vcnkgdG8gdGhlIFBDSSByZWdpb24gbGlzdCBmb3IgQU1DQyBQUEM0NHggQ1BVcy4KLSAgRW5hYmxlZCBpdCBmb3IgWXVjY2EgYm9hcmQuCisgICAgKiBGaXhlZCBhIGJ1ZyB3aGVyZSA4NTU1IFBDSSBjb2RlIHVzZWQgdGhlIG9sZCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIENsZWFudXAgY29uZmlnIGZpbGUgYW5kIGJvb3R1cCBvdXRwdXQgZm9yIFl1Y2NhIGJvYXJkLgorY29tbWl0IGJmMWRmZmZkOGMyNmY4ZWNkZDYzMGEwYWU0YzgzNGU3NTFlNGU0NTIKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NjoxMyAyMDA2IC0wNTAwCiAKLSogRml4IENPTkZJR180NDBfR1ggZGVmaW5lIHVzYWdlLgorICAgICogQWRkZWQgVklBIGNvbmZpZ3VyYXRpb24gdGFibGUKKyAgICAKKyAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSTIgb24gQ0RTCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogUmVtb3ZlIGF1dG9nZW5lcmF0ZWQgYm1wX2xvZ28uaCBmaWxlLgorY29tbWl0IGM4OGY5ZmU2NmI2NDI0N2U1YjZhMzg0MTBiYTMxNWNhMjU1OTZkMTYKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NTo0MSAyMDA2IC0wNTAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgNDQwU1BlIENQVSBiYXNlZCBldmFsIGJvYXJkIChZdWNjYSkuCisgICAgKiBGaXhlZCBQQ0kgbWVtb3J5IGRlZmluaXRpb25zIFBhdGNoIGJ5IEFuZHkgRmxlbWluZyAxNy1NYXItMjAwNgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KIAotKiBDYWxsIHNlcmlhbF9pbml0aWFsaXplKCkgYmVmb3JlIGZpcnN0IGRlYnVnKCkgaXMgdXNlZC4KK2NvbW1pdCA5NzA3NGVkOTY1NTMwOWI2NDIzMWJjMmNlZTY5ZmU4NTM5OWY4MDU1CitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDU6MTcgMjAwNiAtMDUwMAogCi0qIENsZWFudXAgdHJhYiBib2FyZCBmb3IgR0NDLTQueAorICAgICogQWRkZWQgc3VwcG9ydCBmb3IgaW5pdGlhbGl6aW5nIHNlY29uZCBQQ0kgYnVzIG9uIDg1eHggUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIFZvaWNlQmx1ZSB1cGRhdGU6IHVzZSBuZXcgTVREIGZsYXNoIHBhcnRpdGlvbmluZyBtZXRob2RzLCB1c2UgbW9yZQotICByZWFzb25hYmxlIFRFWFRfQkFTRSwgdXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgYW5kIGVuYWJsZSBrZXllZAotICBhdXRvYm9vdC4KLSAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2LiBBdWcgMjAwNQorY29tbWl0IGYwZTZmNTdmNzFiM2M0ZmRkMTMwMjhlYjAzYzNmM2U5MTkyNmRkYTIKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NDo0OSAyMDA2IC0wNTAwCiAKLSogQWRkIGZvcmdvdHRlbiBjaGFuZ2VzIGZvciB0aGUgUExFQiAyIEJvYXJkLgotICBQYXRjaCBieSBEYXZpZCBTbm93ZG9uLCAxMy4gQXVnIDIwMDUKKyAgICAqIEFkZGVkIFBDSS1YICNkZWZpbmVzIGZvciBQQ0ktWCBpbml0aWFsaXphdGlvbiBQYXRjaCBieSBBbmR5IEZsZW1pbmcgb24gMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogQWRkIHN1cHBvcnQgZm9yIHdyUFBNQzd4eC83NHh4IGJvYXJkcwotICBQYXRjaCBieSBSaWNoYXJkIERhbnRlciwgMTIgQXVnIDIwMDUKK2NvbW1pdCBhNGUxMTU1OGI4MTBlZjJjZGRmZmRmN2I5ZDg2YmMxMTMwNDQxOTYwCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDQ6MjMgMjAwNiAtMDUwMAogCi0qIEFkZCBzdXBwb3J0IGZvciBndGgyIGJvYXJkCi0gIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgQXVnIDExIDIwMDUKKyAgICAqIE1hZGUgc3VyZSB0aGUgY29kZSB3aGljaCBkaXNhYmxlcyBwcmVmZXRjaCBmb3IgUENJIGRldmljZXMgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgcHJlZmV0Y2ggcmVnaW9uIHRvIDAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIG9uIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBzdXBwb3J0IGZvciBDT05GSUdfU0VSSUFMX01VTFRJIG9uIE1QQzV4eHgKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgOCBKdW4gMjAwNgorY29tbWl0IDBlMTYzODdkYjFkNGFhY2Q1YmYzNWNiNmQ3YzE5NDI3NjVjMDM0N2IKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0MzozNiAyMDA2IC0wNTAwCiAKLSAgVGhpcyBwYXRjaCBzdXBwb3J0cyB0d28gc2VyaWFsIGNvbnNvbGVzIG9uIGJvYXJkcyB3aXRoCi0gIGEgTVBDNXh4eCBDUFUuIFRoZSBjb25zb2xlIGNhbiBiZSBzd2l0Y2hlZCBhdCBydW50aW1lCi0gIGJ5IHNldHRpbmcgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSBkZXNpcmVkIHNlcmlhbAotICBpbnRlcmZhY2UgKHNlcmlhbDAgb3Igc2VyaWFsMSkuIFRoZSBQU0NzIHRvIGJlIHVzZWQgYXMKLSAgY29uc29sZSBwb3J0IGFyZSBkZWZpbmRlZCBieSBDT05GSUdfUFNDX0NPTlNPTEUKLSAgYW5kIENPTkZJR19QU0NfQ09OU09MRTIuCi0gIFNlZSBSRUFETUUuc2VyaWFsX211bHRpIGZvciBkZXRhaWxzLgorICAgICogQWRkIEZsYXQgRGV2IFRyZWUgY29uc3RydWN0aW9uIGZvciBNUEM4NXh4IEFEUyBhbmQgQ0RTIGJvYXJkcyBQYXRjaCBieSBKb24gTG9lbGlnZXIgMTctSmFuLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIEJ1Z2ZpeCBpbiBJMkMgaW5pdGlhbGlzYXRpb24gb24gUzNDMjQwMC4KLSAgSWYgdGhlIGJ1cyBpcyBibG9ja2VkIGJlY2F1c2Ugb2YgYSBwcmV2aW91c2x5IGludGVycnVwdGVkCi0gIHRyYW5zZmVyLCB1cCB0byBlbGV2ZW4gY2xvY2tzIGFyZSBnZW5lcmF0ZWQgb24gdGhlIEkyQ1NDTAotICBsaW5lIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2ZlciBhbmQgdG8gZnJlZSB0aGUgYnVzLgotICBXaXRoIHRoaXMgZml4IHBpbiBJMkNTQ0wgKFBHNikgaXMgcmVhbGx5IGNvbmZpZ3VyZWQgYXMgR1BJTwotICBzbyB0aGUgY2xvY2sgcHVsc2VzIGFyZSByZWFsbHkgZ2VuZXJhdGVkLgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNgorY29tbWl0IDg1NWU2ZmIwNzNmOWQwNGZlNGE3ZjA2YzEwN2VjYmFjNjM0NGRkZDQKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0MzowMCAyMDA2IC0wNTAwCiAKLSogRml4IEREUjYgZXJyYXRhIG9uIFRRTTgzNHggYm9hcmRzCi0gIFBhdGNoIGJ5IFRob21hcyBXYWVobmVyLCAwNyBNYXIgMjAwNgorICAgICogUmVtb3ZlZCB0aGUgb2Z0cmVlLmR0cyBmb3Igc3R4eHR4IGluIGxpZ2h0IG9mIHRoZSBjaGFuZ2VzIHRvIHRoZSBmbGF0IGRldmljZSB0cmVlIGhhbmRsaW5nIGNvZGUgUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrIDI2LUp1bmUtMjAwNgogCi0qIFJlbW92ZSBvYnNvbGV0ZSBmbGFzaCBkcml2ZXIgYm9hcmQvdHFtNTIwMC9mbGFzaC5jCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIEphbiAyMDA2Citjb21taXQgNTQ5OGQ5MDMxMmFhZDlmNmJkYmYwNDc5ODYwMjdjMzViMDNjZDE2MworQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQyOjI0IDIwMDYgLTA1MDAKIAotKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgQ01DLVBVMiBib2FyZAotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBOb3YgMjAwNQorICAgICogUGF0Y2ggdG8gbW9kaWZ5IGZ0X2J1aWxkLmMgdG8gdXBkYXRlIGZsYXQgZGV2aWNlIHRyZWVzIGluIHBsYWNlIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jayAyNi1KdW5lLTIwMDYKIAotKiBBZGQgc3VwcG9ydCBmb3IgUFMvMiBrZXlib2FyZCBvbiBUUU04NXh4IGJvYXJkCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IE5vdiAyMDA1Citjb21taXQgMDI2Nzc2OGVkZGM1Y2E3YmMxODY1YmM0MGM4NjY4MjlhYzVlZmJmZQorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQxOjM3IDIwMDYgLTA1MDAKIAotICBUZXN0ZWQgb24gYSBTVEs4NVhYIGJhc2Vib2FyZC4gTWFrZSBzdXJlIHRoZSBQUy8yIGNvbnRyb2xsZXIKLSAgaGFzIGJlZW4gcHJvZ3JhbW1lZC4gSnVtcGVyIFNldHRpbmdzOiBYNjYgMS0yLCA5LTEwOyBYNjEgMi0zCisgICAgKiBNb2RpZnkgYm9vdG0gY29tbWFuZCB0byBzdXBwb3J0IGJvb3Rpbmcgd2l0aCBmbGF0IGRldmljZSB0cmVlcyBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CiAKLSogRml4IFRSQUIgY2hhbm5lbCBzd2l0Y2hpbmcgZGVsYXkgZm9yIHRyYWJfZmt0LmJpbiBzdGFuZGFsb25lIGFwcGxpa2F0aW9uCi0gIEluIHRzYzIwMDBfcmVhZF9jaGFubmVsKCkgdGhlIGRlbGF5IGFmdGVyIHNldHRpbmcgdGhlIG11bHRpcGxleGVyCi0gIHRvIGEgdGVtcGVyYXR1cmUgY2hhbm5lbCBpcyBpbmNyZWFzZWQgZnJvbSAxLDUgbXMgdG8gMTAgbXMuIFRoaXMKLSAgaXMgdG8gYWxsb3cgdGhlIG11bHRpcGxleGVyIGlucHV0cyB0byBzdGFiaWxpemUgYWZ0ZXIgaHVnZSBzdGVwcwotICBvZiB0aGUgaW5wdXQgc2lnbmFsIGxldmVsLgotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBOb3YgMjAwNQorY29tbWl0IDhmYzhiZDJjYzQ3OWI2Y2QxODhmZGVkZTQwMTBlMGUwNTI5NzBiOGEKK0F1dGhvcjogSm9obiBUcmFpbGwgPGpvaG4udHJhaWxsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBBdWcgOSAxNDozMzo1MCAyMDA2ICswMTAwCiAKLSogQWRqdXN0IFRRTTUyMDAgbWFrZSB0YXJnZXRzCi0gIE1ha2UgdGhlIGF1dG9tYXRpYyBDUyBjb25maWd1cmF0aW9uIHRoZSBkZWZhdWx0LgotICBUaGUgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb25zIENPTkZJR19UUU01MjAwX0FBLCBDT05GSUdfVFFNNTIwMF9BQgotICBhbmQgQ09ORklHX1RRTTUyMDBfQUMgYXJlIHJlbW92ZWQuCi0gICJUUU01MjAwX2NvbmZpZyIgaXMgbm93IHRoZSBkZWZhdWx0IGZvciBTVEs1MlhYLjIwMCBiYXNlIGJvYXJkcy4KLSAgT24gYSBTVEs1MlhYLjEwMCBiYXNlIGJvYXJkICJUUU01MjAwX1NUSzEwMF9jb25maWciIG11c3QgYmUgdXNlZC4KLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgTm92IDIwMDUKKyAgICBBZGQgUmFwaWRpbyBzdXBwb3J0IGZvciB0aGUgTVBDODY0MUhQQ04KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb2huIFRyYWlsbCA8am9obi50cmFpbGxAZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggc2V0dGluZyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBvbiB0cmFiIGJvYXJkCi0gIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBpcyBub3cgc2V0IGJlZm9yZQotICBkb19hdXRvX3VwZGF0ZSgpIGlzIGNhbGxlZCwgc28gdGhhdCAidmVyIiBjYW4gYmUgdXNlZAotICBpbiBVU0IgdXBkYXRlIHNjcmlwdHMuCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA1Citjb21taXQgOTFhNDE0YzdkMWZiMGVhYzkxMjU5MmNkOTk1YjMwYzlmMjMwNDVjOQorQXV0aG9yOiBKb2huIFRyYWlsbCA8am9obi50cmFpbGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyA4IDExOjMyOjQzIDIwMDYgKzAxMDAKIAotKiBGaXggd3JvbmcgdXNhZ2Ugb2YgdWRlbGF5KCkgaW4gbGVkX2JsaW5rKCkgb24gdHJhYiBib2FyZAotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQorICAgIEZpeCBjYXNsYXQgY2FsY3VsYXRpb24KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb2huIFRyYWlsbCA8am9obi50cmFpbGxAZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggdWRlbGF5IGJ1ZyBpbiB2ZmQuYyBmb3IgdHJhYiBib2FyZAotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQorY29tbWl0IDcwOWQzMDczZTc0MTUzMjc4ZTc5MDRhNzA4MTliYmVmN2RmNTBlMWEKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyAzIDE2OjE3OjU2IDIwMDYgLTA1MDAKIAotKiBEaXNhYmxlIEpGRlMyIHN1cHBvcnQgZm9yIHRyYWIgYm9hcmQKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKKyAgICBDb252ZXJ0IHRvIG1hYy1hZGRyZXNzIGluIGV0aGVybmV0IG5vZGVzLgogCi0qIENoYW5nZSBtdGRwYXJ0cyBkZWZpbml0aW9uIG9uIHRyYWIgYm9hcmQgdG8gbWF0Y2ggY3VycmVudCBmbGFzaCBtYXAKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKK2NvbW1pdCA3MTc0OGFmODMzY2ExMDE3ZWRmMTQxNWJlMzc2MzY2ZmYyOTM3ZDE3CitBdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBKdWwgMjggMTI6NDE6MzUgMjAwNiAtMDQwMAogCi0qIEZpeCBtZW1vcnkgaW5pdCBwcm9ibGVtcyBvbiBNQ0MyMDAgYm9hcmQKKyAgICBDb3JyZWN0IHRoZSBpcnEgdmFsdWUgb2YgRFVBUlQyCiAKLSogRml4IEl4RXRoREIuaCB0byBjb21waWxlIGFnYWluCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgSnVuIDIwMDYKK2NvbW1pdCA5Y2IzZTg4MTZhZTRkODU0ZTdkYzIyMTI4YzNlZWEzZDcwYmI5ODJjCitBdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBKdWwgMjggMTI6NDE6NDEgMjAwNiAtMDQwMAogCi0qIE1pbm9yIGNsZWFudXAgZm9yIFBDUzQ0MEVQIGJvYXJkCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgSnVuIDIwMDYKKyAgICBDaGFuZ2UgdGhlIHNwYWNlIHNpemUgb2YgUEVYIElPIGluIFJFQURNRQogCi0qIEFkZCBNQ0Y1MjgyIHN1cHBvcnQgKHdpdGhvdXQgcHJlbG9hZGVyKQotICByZWxvY2F0ZSBpY2hhY2hlX1N0YXRlIHRvIHJhbQotICB1LWJvb3QgY2FuIHJ1biBmcm9tIGludGVybmFsIGZsYXNoCi0gIEFkZCBFQitNQ0YtRVYxMjMgYm9hcmQgc3VwcG9ydC4KLSAgQWRkIG02OGsgQm9hcmRzIHRvIE1BS0VBTEwKLSAgUGF0Y2ggZnJvbSBKZW5zIFNjaGFyc2lnLCAwOCBBdWcgMjAwNQorY29tbWl0IDIzOWRiMzdjOTRmN2E5Mjk0MWM0NDY1ZmVjZWI4NjdjNjA5MjQxYzUKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIEp1bCAyOCAxMjo0MToxOCAyMDA2IC0wNDAwCiAKLSogTmlvcyBJSSAtIEFkZCBBbHRlcmEgRVAxQzIwLCBFUDFTMTAgYW5kIEVQMVM0MCBib2FyZHMKLSAgUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwOCBKdW4gMjAwNgorICAgIE1vdmUgZ2V0X2JvYXJkX3N5c19jbGsgdG8gYm9hcmQgZGlyZWN0b3J5CiAKLSogTmlvcyBJSSAtIEFkZCBFUENTIENvbnRyb2xsZXIgYm9vdHJvbSB3b3JrLWFyb3VuZAotICAtV2hlbiBib290aW5nIGZyb20gYW4gZXBjcyBjb250cm9sbGVyLCB0aGUgZXBjcyBib290cm9tIG1heSBsZWF2ZSB0aGUKLSAgc2xhdmUgc2VsZWN0IGluIGFuIGFzc2VydGVkIHN0YXRlIGNhdXNpbmcgc29mdCByZXNldCBoYW5nLiBUaGlzCi0gIHBhdGNoIGVuc3VyZXMgc2xhdmUgc2VsZWN0IGlzIG5lZ2F0ZWQgYXQgcmVzZXQuCi0gIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKK2NvbW1pdCA0OTI5MDBiOTg1NDM5ZmJjZTFhMTE4YWZkZTFlMzVkZWY4NzBkYjAzCitBdXRob3I6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBGcmkgSnVsIDI4IDA5OjAzOjU0IDIwMDYgKzAxMDAKIAotKiBVcGRhdGUgUEsxQzIwIGJvYXJkCi0gIC1VcGRhdGUgYmFzZSBhZGRyZXNzZXMgZm9yIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24KLSAgLUVsaW1pbmF0ZSB1c2Ugb2YgQ0FDSEVfQllQQVNTIGluIGJvYXJkIGNvZGUKLSAgUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwOCBKdW4gMjAwNgorICAgIEZpeCA4NjQxSFBDTiBwb2xsdXRpb24KIAotKiBOaW9zIElJIC0gRml4IEkvTyBNYWNyb3MgYW5kIG1pbmktYXBwIHN0dWJzCi0gIC1GaXggYXNtL2lvLmggbWFjcm9zCi0gIC1FbGltaW5hdGUgdXNlIG9mIENBQ0hFX0JZUEFTUyBpbiBjcHUgY29kZQotICAtRWxpbWluYXRlIGFzc2VtYmxlciB3YXJuaW5ncwotICAtRml4IG1pbmktYXBwIHN0dWJzIGFuZCBmb3JjZSBubyBzbWFsbCBkYXRhCi0gIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKK2NvbW1pdCA1MTVhYjhhNjJlODU3NGUyYmFiYzZlOGRjYzQzNTQ0YWQyMjFjNWIyCitBdXRob3I6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBGcmkgSnVsIDI4IDA4OjE2OjA2IDIwMDYgKzAxMDAKIAotKiBGaXggVS1Cb290IGVudmlyb25tZW50IHNlY3RvciBwcm90ZWN0aW9uIG9uIE1DQzIwMCBib2FyZAorICAgIEZpeCA4NjQxSFBDTiB0aW1lYmFzZQogCi0qIE1pbm9yIGNsZWFudXAgZm9yIFBDUzQ0MEVQIGJvYXJkCitjb21taXQgYzg2MzYwYjgzMGYxZWVjZDdhNzIyMDg1NzVkZGU0ZjU3ODc5ZmFlYQorQXV0aG9yOiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBGcmkgSnVsIDI4IDAwOjAxOjM0IDIwMDYgKzA4MDAKIAotKiBVcGRhdGUgUENTNDQwRVAgcG9ydCB0byBmaXQgaW50byBvbmUgZmxhc2ggZGV2aWNlIChpbmNsLiBlbnZpcm9ubWVudCkKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNiBKdW4gMjAwNgorICAgIEZpeGVkIE9GIGRldmljZSB0cmVlIG9mIG1wYzg2eHhocGNuIGJvYXJkLgorICAgIAorICAgIFRoZSBjaGFuZ2VzIHdvcmtzIGluIHdpdGgga2VybmVsIGlycSBtYXBwaW5nIHJld29yay4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBzdXBwb3J0IGZvciBQQ1M0NDBFUCBib2FyZAotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAyIEp1biAyMDA2Citjb21taXQgYmVhM2YyOGQyODU5NDJiZjNmN2FiMzM5Y2U4NTE3OGRlZDU0NDIyNQorQXV0aG9yOiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVsIDEyIDEwOjQ4OjA1IDIwMDYgLTA0MDAKIAotKiBGaXggZXhhbXBsZXMvTWFrZWZpbGU7IHNvbWUgYnVpbGQgdGFyZ2V0cyB3ZXJlIGxvc3QKKyAgICBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBtYWMgYWRkcmVzc2VzIHRvIG9yIGZyb20gSUQgRUVQUk9NLgorICAgIAorICAgIEFkZGVkIGNvZGUgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgTWFjIGFkZHJlc3NlcyB0by9mcm9tIElEIEVFUFJPTSgweDU3KS4KKyAgICBXaXRoIGF0dGFjaGVkIHBhdGNoLCB3ZSBjYW4gdXNlIGNvbW1hbmQgIm1hYy9tYWMgcmVhZC9tYWMgc2F2ZS8iCisgICAgdG8gcmVhZCBhbmQgd3JpdGUgRUVQUk9NIHVuZGVyIHUtYm9vdCBwcm9tcHQuCisgICAgCisgICAgVS1ib290IHdpbGwgY2FsY3VsYXRlIHRoZSBjaGVja3N1bSBvZiBFRVBST00gd2hpbGUgYm9vdHVwLAorICAgIGlmIGl0IGlzIHJpZ2h0LCB0aGVuIHUtYm9vdCB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlIG1hYyBhZGRyZXNzCisgICAgb2YgZVRTRUMwLzEvMi8zIGlzIGF2YWlsYWxiZSAobm9uLXplcm8pLgorICAgIAorICAgIElmIHRoZXJlIGlzIG1hYyBhZGRyZXNzIGF2YWlsYWJlIGluIEVFUFJPTSwgdS1ib290IHdpbGwgdXNlIGl0LAorICAgIG90aGVyZXdpc2UsIHUtYm9vdCB3aWxsIHVzZSB0aGUgbWFjIGFkZHJlc3MgZGVmaW5lZCBpbgorICAgIE1QQzg2NDFIUENOLmguIFRoaXMgbWF0Y2hlcyB0aGUgcmVxdWlyZW1lbnQgdG8gc2V0IHVuaXF1ZSBtYWMgYWRkcmVzcworICAgIGZvciBlYWNoIFRTRUMgcG9ydC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgorICAgIFNpZ25lZC1vZmYtYnk6IFlvcmsgU3VuIDx5b3Jrc3VuQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IHdhdGNoZG9nIGhhbmRsaW5nIGluIENGSSBmbGFzaCBkcml2ZXIKLSAgSnVzdCB1c2UgdWRlbGF5KCkgd2hlbiB3YWl0aW5nIGZvciBzdGF0dXMgY2hhbmdlcyB3aGljaCB3aWxsCi0gIGltcGxpY2l0ZWx5IHRyaWdnZXIgdGhlIHdhdGNoZG9nLgorY29tbWl0IGZjYjI4ZTc2MzQxNWUwZTRlNjZiMGY0NTg0MmQxNTU3YWUxOThlNWUKK0F1dGhvcjogSmluIFpoZW5neGlvbmcgPEphc29uLkppbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgSnVsIDEzIDEwOjM1OjEwIDIwMDYgLTA1MDAKIAotKiBGaXggUENJIHRvIG1lbW9yeSB3aW5kb3cgc2l6ZSBwcm9ibGVtcyBvbiBQTTgyeCBib2FyZHMKLSAgV2UgdXNlIHRoZSAiYXV0b21hdGljIiBtb2RlIHRoYXQgd2FzIHVzZWQgZm9yICB0aGUgIE1QQzgyNjZBRFMgIGFuZAotICBNUEM4MjcyIGJvYXJkcy4gRXZlbnR1YWxseSB0aGlzIHNob3VsZCBiZSB1c2VkIG9uIGFsbCBib2FyZHM/XQotICBQYXRjaCBieSBXb2xmZ2FuZyBHcmFuZGVnZ2VyLCAxNyBKYW4gMjAwNgorICAgIEZpeGVkIGluaXRyZCBpc3N1ZSBieSBkZWZpbmUgYmlnIFJBTQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6SmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KIAotKiBDb3JyZWN0IEdQSU8gc2V0dXAgKFVBUlQxL0lSUSdzKSBvbiB5b3NlbWl0ZSAmIHllbGxvd3N0b25lCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjkgTWF5IDIwMDYKK2NvbW1pdCBlNmNkMmExNzg1ZDc0ZWMzZDMwYTg2ZjFjYjM2MGJlOGRlNDc4MTUxCitBdXRob3I6IEphc29uIEppbiA8SmFzb24uamluQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBKdWwgNyAxMDowMTo0NSAyMDA2IC0wNTAwCiAKLSogVXBkYXRlIEludGVsIElYUDR4eCBzdXBwb3J0Ci0gIC0gQWRkIElYUDR4eCBOUEUgZXRoZXJuZXQgTUFDIHN1cHBvcnQKLSAgLSBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgSVhEUEc0MjUgYm9hcmQKLSAgLSBBZGQgc3VwcG9ydCBmb3IgUHJvZHJpdmUgUEROQjMgYm9hcmQKLSAgLSBBZGQgSVJRIHN1cHBvcnQKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBNYXkgMjAwNgorICAgIFdlIG1hZGUgYSB1LWJvb3QgcGF0Y2ggdG8gZml4IHRoZSBoYW5nIHVwIGlzc3VlCisgICAgd2hlbiBib290aW5nIGZpbGVzeXN0ZW0gZnJvbSByYW1kaXNrLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6SmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggcHJvYmxlbSBpbiBQVlIgZGV0ZWN0aW9uIGZvciA0NDBHUgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IE1heSAyMDA2Citjb21taXQgMzg0MzNjY2M1ODUwZWU3MDU0OWFmMGIyYmM1YjkyMDM1NWVmNTM4OAorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQ3OjAzIDIwMDYgLTA1MDAKIAotKiBGaXggZ2NjIDMuNC54IEFGTEFHUyBzZXR0aW5nIGZvciBtNjhrIHBsYXRmb3JtLgorICAgICogU3dpdGNoZWQgZGVmYXVsdCBQQ0kgc3BlZWQgZm9yIDg1NDAgQURTIGJhY2sgdG8gMzNNSHoKKyAgICAqIEFkZGVkIGNvbW1lbnRzIGFuZCBhIHByaW50ZiB0byB3YXJuIHRoYXQgUENJLVggd29uJ3QKKyAgICAgIHdvcmsgYXQgMzNNSHoKKyAgICAgIFBhdGNoIGJ5IEFuZHkgRmxlbWluZyAxNy1NYXItMjAwNgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KIAotKiBFbmFibGUgYXV0b2Jvb3QgZm9yIE01MjcxRVZCIGJvYXJkLgorY29tbWl0IGU0YzJhMGViMGMzZTNmZmJmODI0ODAwMTg0ZWU0MmJkYzk5ZDViMTkKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NjozNSAyMDA2IC0wNTAwCiAKLSogQ2hhbmdlZCBkZWZhdWx0IHJhbWRpc2sgYWRkciBpbiB5b3NlbWl0ZS95ZWxsb3dzdG9uZSBwb3J0cwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IE1heSAyMDA2CisgICAgKiBGaXhlZCBhIGJ1ZyB3aGVyZSA4NTU1IFBDSSBjb2RlIHVzZWQgdGhlIG9sZCB2YXJpYWJsZSBhbmQKKyAgICAgIGZ1bmN0aW9uIG5hbWVzCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IFBDTUNJQSBzdXBwb3J0IG9uIHZpcnRsYWIyCitjb21taXQgY2JmYzdjZTc1NmI4OGViMjZlNTUzN2JjN2I2MjVjNDQ1YzZkY2ZhYworQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQ2OjEzIDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgVmlydExhYjIgYm9hcmQKLSAgKG5lZWRlZCBiZWNhdXNlIG9mIGRpZmZlcmVuY2VzIGluIHRoZSBQQ01DSUEgaGFyZHdhcmUpLgorICAgICogQWRkZWQgVklBIGNvbmZpZ3VyYXRpb24gdGFibGUKKyAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSTIgb24gQ0RTCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogTWlub3IgY2xlYW51cC4KK2NvbW1pdCA1MmM3YTY4YjhkNTg3ZWJjZjVhNmIwNTFiNThiM2QzZmZhMzc3ZGRjCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDU6NDEgMjAwNiAtMDUwMAogCi0qIFVwZGF0ZSB5b3NlbWl0ZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBmbGFzaCB3cml0ZSBidWZmZXIgc3VwcG9ydAotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE1heSAyMDA2CisgICAgKiBGaXhlZCBQQ0kgbWVtb3J5IGRlZmluaXRpb25zCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IGNvbXBpbGUgd2FybmluZ3MgaW4gY29tbW9uL3h5ek1vZGVtLmMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBNYXkgMjAwNgorY29tbWl0IDA4NzQ1NDYwOWU0NzI5NTQ0M2FmNzkzYTI4MmNkZGNkOTFhNWY0OWMKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0NToxNyAyMDA2IC0wNTAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgNDQwRVAgUmV2IEMgYW5kIDQ0MEdSIFJldiBCCi0gIFBhdGNoIGJ5IEpvaG4gT3RrZW4sIDA4IE1heSAyMDA2CisgICAgKiBBZGRlZCBzdXBwb3J0IGZvciBpbml0aWFsaXppbmcgc2Vjb25kIFBDSSBidXMgb24gODV4eAorICAgICAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIE9NQVAgNTkxMi9PU0s6IHVwZGF0ZSBFTUlGUyBDUzEgdGltaW5nczoKLSAgUHJvYmxlbXMgaGF2ZSBiZWVuIHNlZW4gaW4gdGhlIGxpbnV4IGtlcm5lbCdzIHNtYzkxeCBuZXR3b3JrIGRyaXZlcgotICBkdWUgdG8gaW1wcm9wZXIgYnVzIHRpbWluZ3MuICBUaGUgbGF0ZXN0IDIuNiBPTUFQIGtlcm5lbHMgY3VycmVudGx5Ci0gIGhhdmUgYSB3b3JrYXJvdW5kLCBidXQgdGhpcyBmaXggYmVsb25ncyBpbiB1LWJvb3QuCi0gIFBhdGNoIGJ5IEtldmluIEhpbG1hbiwgMTMgT2N0IDIwMDUKK2NvbW1pdCBiNjM2YWFlYjZmZDUxNmE0NDJmYjYxMWJiZWVkZGYzMDc3YTY4N2ZiCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDQ6NDkgMjAwNiAtMDUwMAogCi0qIEZpeCBSRUdfTVBVX0xPQURfVElNRVIgZGVmaW5pdGlvbiBpbiBtdWx0aXBsZSBPTUFQIHBvcnRzCi0gIFBhdGNoIGJ5IEhpcm9raSBLYW1pbmFnYSwgMTEgTWFyIDIwMDYKKyAgICAqIEFkZGVkIFBDSS1YICNkZWZpbmVzIGZvciBQQ0ktWCBpbml0aWFsaXphdGlvbgorICAgICAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIG9uIDE3LU1hci0yMDA2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgogCi0qIFVwZGF0ZSBvbWFwNTkxMm9zayBib2FyZCBzdXBwb3J0Ci0gIC0gRml4IE9NQVAgc3VwcG9ydCB0aGF0IG9tYXA1OTEyb3NrIGNvbXBpbGVzIGluIGN1cnJlbnQgc291cmNlIHRyZWUKLSAgLSBVcGRhdGUgd2l0aCBjb2RlIGZyb20gImh0dHA6Ly9vbWFwLnNwZWN0cnVtZGlnaXRhbC5jb20vb3NrNTkxMiIKLSAgICB0byBmaXggcHJvYmxlbXMgd2l0aCBERFIgaW5pdGlhbGl6YXRpb24KLSAgLSBGaXggdGltZXIgc2V0dXAKLSAgLSBVc2UgQ0ZJIGZsYXNoIGRyaXZlciBhbmQgc3VwcG9ydCBjb21wbGV0ZSAzMk1CIG9mIG9uYm9hcmQgZmxhc2gKLSAgLSBBZGQgInByaW50X2NwdWluZm8oKSIgYW5kICJjaGVja2JvYXJkKCkiIGZ1bmN0aW9ucyB0byBkaXNwbGF5Ci0gICAgQ1BVICh3aXRoIGZyZXF1ZW5jeSkgYW5kIEJvYXJkIGluZm9zCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgTWF5IDIwMDYKK2NvbW1pdCAyMGFiYmM2ZmZmYTExNTY5MDEwN2NjOTQyYzdhYmY4NGJkYzAzYTFiCitBdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFdlZCBKdW4gMjggMTA6NDQ6MjMgMjAwNiAtMDUwMAogCi0qIEZpeCB3YXRjaGRvZyBpc3N1ZXMgZm9yIENvbGRGaXJlIGJvYXJkcy4KKyAgICAqIE1hZGUgc3VyZSB0aGUgY29kZSB3aGljaCBkaXNhYmxlcyBwcmVmZXRjaCBmb3IgUENJIGRldmljZXMKKyAgICAgIHNldHMgdGhlIHNpemUgb2YgdGhlIHByZWZldGNoIHJlZ2lvbiB0byAwCisgICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgb24gMTctTWFyLTIwMDYKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CiAKLSogQWRkIE01MjcxRVZCIGJvYXJkIHN1cHBvcnQuCitjb21taXQgNDBkNWZhMzVkMDJkZjIyNTgwNTkzYmYwMDM5YWIxNzMzNjdlOGVmMAorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQzOjM2IDIwMDYgLTA1MDAKIAotKiBNYWtlIFI1MjAwIHNwZWNpZmljIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBib2FyZCBjb25kaXRpb25hbC4KKyAgICAqIEFkZCBGbGF0IERldiBUcmVlIGNvbnN0cnVjdGlvbiBmb3IgTVBDODV4eCBBRFMgYW5kIENEUyBib2FyZHMKKyAgICAgIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciAxNy1KYW4tMjAwNgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogVXBkYXRlIENQVSB0YXJnZXQgaWRlbnRpZmljYXRpb24gc3RyaW5ncyBmb3IgQ29sZEZpcmUgZmFtaWx5LgorY29tbWl0IGJlN2U4YjBjYjVhMGM0OWRjMTgwMDc1Yjk2ZGYyOTZhODkzYmYxNDYKK0F1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAxMDo0MzowMCAyMDA2IC0wNTAwCiAKLSogVXBkYXRlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBNQ0Y1MjcxLgorICAgICogUmVtb3ZlZCB0aGUgb2Z0cmVlLmR0cyBmb3Igc3R4eHR4IGluIGxpZ2h0IG9mIHRoZSBjaGFuZ2VzCisgICAgICB0byB0aGUgZmxhdCBkZXZpY2UgdHJlZSBoYW5kbGluZyBjb2RlCisgICAgICBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CiAKLSogRml4IHNlcmlhbCBjb25zb2xlIHN1cHBvcnQgZm9yIE1DRjUyNzEuCitjb21taXQgMWIzODBlYzIyNTY2NWU3Mzk1OTY3N2YzODkzZGM2NThjNTkyNWUwNQorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQyOjI0IDIwMDYgLTA1MDAKIAotKiBGaXhlcyBmb3IgZ2NjIDMuNCBiYXNlZCBtNjhrIHRvb2xjaGFpbiwKLSAgYmFzZWQgb24gcGF0Y2ggYnkgSmF0ZSBTdWpqYXZhbmljaC4KKyAgICAqIFBhdGNoIHRvIG1vZGlmeSBmdF9idWlsZC5jIHRvIHVwZGF0ZSBmbGF0IGRldmljZSB0cmVlcyBpbiBwbGFjZQorICAgICAgUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrIDI2LUp1bmUtMjAwNgogCi0qIEZpeCBsb3dib290IHN1cHBvcnQgb24gTUNDMjAwIGJvYXJkCitjb21taXQgOThhOWM0ZDQ2OGE5NDJhMDllYmU4OTc5YmVjNTA4MDE3ZjNlNDQ2MgorQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgSnVuIDI4IDEwOjQxOjM3IDIwMDYgLTA1MDAKIAotKiBNZXJnZWQgTVBDODM0OUFEUyBhbmQgTVBDODM0OUVNRFMgcG9ydHMgaW50byBNUEM4MzQ5RU1EUyBwb3J0OgotICAtIFJlbW92ZWQgTVBDODM0OUFEUyBwb3J0Ci0gIC0gQWRkZWQgUENJIHN1cHBvcnQgdG8gTVBDODM0OUFEUwotICAtIHJld29ya2VkIG1lbW9yeSBtYXAgdG8gYWxsb3cgbWFwcGluZyBvZiBhbGwgcmVnaW9ucyB3aXRoIEJBVHMKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjAgQXByIDIwMDYKKyAgICAqIE1vZGlmeSBib290bSBjb21tYW5kIHRvIHN1cHBvcnQgYm9vdGluZyB3aXRoIGZsYXQgZGV2aWNlIHRyZWVzCisgICAgICBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CiAKLSogQ29kaW5nIFN0eWxlIGNsZWFudXAKK2NvbW1pdCBkYTAxMmFiNjYxZmQ0YWIxNjlkZDdiOWIzMjIwMWE0ZGY2MmNmMzRhCitBdXRob3I6IEppbiBaaGVuZ3hpb25nIDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEp1biAyOCAwODo0Mzo1NiAyMDA2IC0wNTAwCiAKLSogV3JpdGUgUlRDIHNlY29uZHMgZmlyc3QgdG8gbWFpbnRhaW4gc2V0dGluZ3MgaW50ZWdyaXR5IHBlcgotICBNYXhpbS9EYWxsYXMgRFMxMzA2IGRhdGEgc2hlZXQuCi0gIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMDIgTWF5IDIwMDYKKyAgICBDaGFuZ2UgSWQgdG8gc3ltYm9saWMgbmFtZSBmb3IgUlRMODEzOQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEphc29uIEppbiA8SmFzb24uamluQGZyZWVzY2FsZS5jb20+CiAKLSogU2NoZWR1bGVkIGZvciByZW1vdmFsOiBzdHJuaWNtcCgpIHdoaWNoIGlzIHVudXNlZAorY29tbWl0IGJjMDljZjNjMmJmYjhkNTRjNjU5Y2JiMzMyZjc5ZDA5NTA5ODJmZDAKK0F1dGhvcjogSmluIFpoZW5neGlvbmctUjY0MTg4IDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biAyNyAxODoxMjoxMCAyMDA2ICswODAwCiAKLSogVXBkYXRlIGZvciBJbnRlbCBNb25haGFucyBib2FyZHM6Ci0gIC0gc3VwcG9ydCBmb3IgbWFnaWMga2V5IGRldGVjdGlvbiBhbmQgaGFuZGxpbmcgb24gZGVsdGEgYm9hcmQKLSAgLSBOQU5EIHN1cHBvcnQgZm9yIHp5bG9uaXRlIGJvYXJkICsgc29tZSBtaW5vciBjbGVhbnVwCisgICAgRml4IFJUTDgxMzkgaW4gYmlnIGVuZGlhbgorICAgIAorICAgIHNpZ25lZC1vZmYtYnk6IEphc29uIEppbiA8SmFzb24uSmluQGZyZWVzY2FsZS5jb20+CisgICAgc2lnbmVkLW9mZi1ieTogV2VpIFpoYW5nIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KIAotKiBEZWNsYXJlIGxvYWRfc2VyaWFsX3ltb2RlbSgpIHdoZW4gdXNpbmcgQ0ZHX0NNRF9MT0FEQi4KLSAgUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwMSBNYXkgMjAwNgorY29tbWl0IGZjZmI5YTU3OTQ3ZmMyMDNiOTlmZTgxYWIwNTc4ZjcyODYyNjFmOWYKK0F1dGhvcjogSmluIFpoZW5neGlvbmctUjY0MTg4IDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biAyNyAxODoxMjoyMyAyMDA2ICswODAwCiAKLSogRml4ZWQgaGFuZGxpbmcgb2YgYmFkIGNoZWNrc3VtcyB3aXRoICJta2ltYWdlIC1sIgorICAgIEZpeCBUc2VjIGJ1ZyB3aGVuIG5vIGxpbmsKKyAgICAKKyAgICAgV2hlbiB0ZnRwIGEgbm9uLWV4aXN0IGZpbGUgZnJvbSB0aGUgdGZ0cCBzZXJ2ZXIsIHUtYm9vdCB3aWxsIGNoZWNrCisgICAgIHRoZSBsaW5rIG9mIGFsbCBldGggcG9ydC4gVGhlIG9yaWdpbmFsIGZpbGUgd2lsbCByZXR1cm4gd3JvbmcgbGluaworICAgICBzdGF0ZSBvbiB0aGUgbm8gbGluayBwb3J0cy4KKyAgICAKKyAgICBzaWduZWQtb2ZmLWJ5OiBKYXNvbiBKaW4gPEphc29uLkppbkBmcmVlc2NhbGUuY29tPgogCi0qIEFkZGVkIHN1cHBvcnQgZm9yIEJDMzQ1MCBib2FyZAotICBQYXRjaCBieSBTdGVmYW4gU3Ryb2JsLCAyMSBPY3QgMjAwNQorY29tbWl0IGJkMjJjMmI5NzUxNGZiZmIwZTAzYmQ5YzcyYjM0NDVlNGRiZDU3ZTIKK0F1dGhvcjogSmluIFpoZW5neGlvbmctUjY0MTg4IDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biAyNyAxODoxMjowMiAyMDA2ICswODAwCiAKLSogVXBkYXRlIGZvciBOQzY1MCBib2FyZDoKLSAgLSBTdXBwb3J0IHJldjEgYW5kIHJldjIgaGFyZHdhcmUKLSAgLSBhZGFwdCB0byBuZXcgTkFORCBsYXllcgotICAtIGFkZCBDUDg1MCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIE5DNjUwCisgICAgRml4IGJ1ZyBmb3IgaW9fYmFyIHNpemUgZHVyaW5nIHBjaSBzY2FuCisgICAgCisgICAgRHVyaW5nIHRoZSBwY2kgc2NhbiBwcm9jZXNzLCBTb21lIGRldmljZXMgcmV0dXJuIGJhcl9yZXBvbnNlIHdpdGggdGhlCisgICAgaGlnaGVzdCBieXRlcyAwLCBzdWNoIGFzIHRoZSBwY2kgYnJpZGdlIGluIHVsaTE1NzUgcmV0dXJuIGJhcl9yZXNwb25zZQorICAgIHdpdGggMHhmZmZmZmYsIFNvIHRoZSBiYXJfc2l6ZSBzaG91bGQgYmUgbWFudWFsbHkgc2V0IHVuZGVyIDY0Sy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBKaW4gPGphc29uLmppbkBmcmVlc2NhbGUuY29tPgogCi0qIE1QQzUyMDA6IGVuYWJsZSBzbm9vcGluZyBvZiBETUEgdHJhbnNhY3Rpb25zIG9uIFhMQiBldmVuIGlmIG5vIFBDSQotICBpcyBjb25maWd1cmVkOyBvdGhyd2lzZSBETUEgYWNjZXNzZXMgYXJlbid0IGNhY2hlIGNvaGVyZW50IHdoaWNoCi0gIGNhdXNlcyBmb3IgZXhhbXBsZSBVU0IgdG8gZmFpbC4KK2NvbW1pdCBmYTdkYjljMzc3YmMyMzUzYTE3YmYxZDM4MWQ2NWE2YzQxODcyOGYwCitBdXRob3I6IEppbiBaaGVuZ3hpb25nLVI2NDE4OCA8SmFzb24uSmluQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBKdW4gMjcgMTg6MTE6NTQgMjAwNiArMDgwMAogCi0qIFNvbWUgY29kZSBjbGVhbnVwCisgICAgRW5hYmxlIFBDSUUxIGZvciBNUEM4NjQxSFBDTiBib2FyZAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEphc29uIEppbiA8SmFzb24uamluQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IGRiYXUxeDAwIGJvYXJkcyBicm9rZW4gYnkgZGJhdTE1NTAgcGF0Y2gKLSAgUExMOnMgd2VyZSBub3Qgc2V0IGZvciBib2FyZHMgb3RoZXIgdGhhbiAxNTUwLgotICBGbGFzaCBDRkkgY2F1c2VkIGNhcmQgdG8gaGFuZyBkdWUgdG8gdW5kZWZpbmVkIENGR19GTEFTSF9CQU5LU19MSVNULgotICBEZWZhdWx0IGJvb3QgaXMgbm93IGJvb3RwIGZvciBjYXJkcyBvdGhlciB0aGFuIDE1NTAuCi0gIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTAgQXVnIDIwMDUKK2NvbW1pdCA2ODQ2MjNjZTkyYzVmZDMyZTdkYjJkNmUwMTY5NDVhNjdjNWZmYWJhCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBKdW4gMjIgMDg6NTE6NDYgMjAwNiAtMDUwMAogCi0qIEZpeGVzIGNvbW1vbi9jbWRfZmxhc2guYzoKLSAgLSBmaXggc29tZSBjb21waWxlci9wYXJzZXIgZXJyb3IsIGlmIHVzaW5nIG02OGsgdG9vbCBjaGFpbgotICAtIG9wdGljYWwgZml4IGZvciBwcm90ZWN0IG9uL29mZiBhbGwgbWVzc2FnZXMsIGlmIHVzaW5nIG1vcmUKLSAgICB0aGVuIG9uZSBiYW5rCi0gIFBhdGNoIGJ5IEplbnMgU2NoYXJzaWcsIDI4IEp1bCAyMDA1CisgICAgRml4IGJ1ZyBpbiA4NjQxaHBjbiByZXNldCBjb21tYW5kIHdpdGggbm8gYXJncy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgorICAgIEFja2VkLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIEZpeCBRdWFkIFVBUlQgbWFwcGluZyBvbiBNQ0MyMDAgYm9hcmQgZHVlIHRvIG5ldyBIVyByZXZpc2lvbgorY29tbWl0IDhiZTQyOWE1ZGRiZjBlYmUyZDk0MTc0YmE1OGZjZmM3YTI0Mjg1ZGMKK0F1dGhvcjogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biAyMCAxNzo0NzoxNSAyMDA2ICswODAwCiAKLSogRml4IEpGRlMyIHN1cHBvcnQgZm9yIGxlZ2FjeSBOQU5EIGRyaXZlci4KKyAgICBSZXdvcmtlZCBJUlEgbWFwcGluZyBpbiBPRi10cmVlLgogCi0qIFJlbW92ZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBEb0MgY29kZSBhbmQgb2xkIGxlZ2FjeSBOQU5EIGRyaXZlci4KK2NvbW1pdCAwZTRjMmExN2NhMzQwMDFlZDM2ZDI1OWYxM2NiODhhZGE0NjExYThjCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBKdW4gMTUgMjE6MzM6MzcgMjAwNiAtMDUwMAogCi0qIEZpeCBQTTgyOF9QQ0kgdGFyZ2V0LCBmb3Igd2hpY2ggUENJIHdhcyAqbm90KiBjb25maWd1cmVkIGluLgorICAgIERvIG5vdCBlbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBvbiBzZWNvbmRhcnkgQ1BVcy4KKyAgICBEbyBub3Qgc2V0IHVwIEJBVHMgb24gc2Vjb25kYXJ5IENQVXMuICBMZXQgTGludXggZG8gdGhlIG5hc3R5LgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSogRml4IExpdGU1MjAwQiBzdXBwb3J0OiBpbml0aWFsaXplIFNEZWxheSByZWdpc3RlcgotICBTZWUgRnJlZXNjYWxlJ3MgQU4zMjIxICJNUEM1MjAwQiBTRFJBTSBJbml0aWFsaXphdGlvbiBhbmQKLSAgQ29uZmlndXJhdGlvbiIsIDMuMy4xIFNEZWxheS0tTUJBUiArIDB4MDE5MAorY29tbWl0IDhlY2M5NzE2MThmNTYwMjlhZDk5ZDM1MTZmOGIyOTdhNmVkNTg5NzEKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgV2VkIEp1biA3IDEwOjUzOjU1IDIwMDYgLTA1MDAKIAotKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgorICAgIEZpeCBhIGdldF9ib2FyZF9zeXNfY2xrKCkgdXNlLWJlZm9yZS1kZWYgd2FybmluZy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgogCi0gIC0gQWRkIEludGVsIGxlZ2FjeSBsb2NrL3VubG9jayBzdXBwb3J0IHRvIGNvbW1vbiBDRkkgZHJpdmVyCitjb21taXQgZDliZjQ4NThmY2E1YWE0ZDY1MWIyODMyNzBmNzdkYTcyZWJhZGZkNQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgorRGF0ZTogICBXZWQgSnVuIDcgMTA6NTI6NDkgMjAwNiAtMDUwMAogCi0gICAgT24gc29tZSBJbnRlbCBmbGFzaCdzIChlLmcuIEludGVsIEozKSBsZWdhY3kgdW5sb2NraW5nIGlzCi0gICAgc3VwcG9ydGVkLCBtZWFuaW5nIHRoYXQgdW5sb2NraW5nIG9mIG9uZSBzZWN0b3Igd2lsbCB1bmxvY2sKLSAgICBhbGwgc2VjdG9ycyBvZiB0aGlzIGJhbmsuIFVzaW5nIHRoaXMgZmVhdHVyZSwgdW5sb2NraW5nCi0gICAgb2YgYWxsIHNlY3RvcnMgdXBvbiBzdGFydHVwICh2aWEgZW52IHZhciAidW5sb2NrPXllcyIpIHdpbGwKLSAgICBnZXQgbXVjaCBmYXN0ZXIuCisgICAgQWxsb3cgRFRDIHBhdGggdG8gYmUgcGFzc2VkIGluLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CiAKLSAgLSBGaXhlZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgcmVhZHMgb2YgZW52cm9ubWVudCB2YXJpYWJsZQotICAgICJ1bmxvY2siIGFzIHBvaW50ZWQgb3V0IGJ5IFJlaW5oYXJkIEFybHQgJiBBbmRlcnMgTGFyc2VuLgorY29tbWl0IGM4M2FlOWVhNmQ5M2FiYmU3NTFiZjhhMzM5NjIzNmEwODRlNTZmODcKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIEp1biA2IDE2OjU0OjI5IDIwMDYgLTA0MDAKIAotICAtIFJlbW92ZWQgdW53YW50ZWQgbGluZWZlZWRzIGZyb20gInByb3RlY3QiIGNvbW1hbmQgd2hlbgotICAgIENGR19GTEFTSF9QUk9URUNUSU9OIGlzIGVuYWJsZWQuCisgICAgTW9kaWZ5IHRoZSBJUlEgb2YgRFVBUlQyCiAKLSAgLSBDaGFuZ2VkIHAzcDQwMCBib2FyZCB0byB1c2UgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KK2NvbW1pdCBjOTM0ZjY1NWY5YWVjYTcwYTVjNWY4OGI0NjVkOWU5ZDU3YThkMjJlCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CitEYXRlOiAgIFdlZCBNYXkgMzEgMTM6NTU6MzUgMjAwNiAtMDUwMAogCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgQXByIDIwMDYKKyAgICBSZXZpZXcgY2xlYW51cHMuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KIAotKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgotICAtIENvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIENGR19IWiAhPSAxMDAwIChzZXZlcmFsCi0gICAgWFNjYWxlLWJhc2VkIGJvYXJkcykKLSAgLSBGaXggdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gb2YgYnVmZmVyZWQgd3JpdGVzIChvZmYgYnkgYQotICAgIGZhY3RvciBvZiAxMDAwKQotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAzMSBNYXIgMjAwNgorY29tbWl0IGNiNTk2NWZiOTViNzdhNDlmNGU2YWY5NTI0OGUwYzg0OWY0YWYwM2UKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgV2VkIE1heSAzMSAxMjo0NDo0NCAyMDA2IC0wNTAwCiAKLSogVXBkYXRlcyB0byBjb21tb24gUFBDNHh4IG9uYm9hcmQgKEREUilTRFJBTSBpbml0IGNvZGUgKDQwNSBhbmQgNDQwKQorICAgIFdoaXRlIHNwYWNlIGNsZWFudXAuCisgICAgU29tZSA4MC1jb2x1bW4gY2xlYW51cHMuCisgICAgQ29udmVydCBwcmludGYoKSB0byBwdXRzKCkgd2hlcmUgcG9zc2libGUuCisgICAgVXNlICNpbmNsdWRlICJzcGRfc2RyYW0uaCIgYXMgbmVlZGVkLgorICAgIEVuaGFuY2VkIHJlc2V0IGNvbW1hbmQgdXNhZ2UgbWVzc2FnZSBhIGJpdC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0gIDQwNSBTRFJBTTogLSBUaGUgU0RSQU0gcGFyYW1ldGVycyBjYW4gbm93IGJlIGRlZmluZWQgaW4gdGhlIGJvYXJkCi0JICAgICAgIGNvbmZpZyBmaWxlIGFuZCB0aGUgNDA1IFNEUkFNIGNvbnRyb2xsZXIgdmFsdWVzIHdpbGwKLQkgICAgICAgYmUgY2FsY3VsYXRlZCB1cG9uIGJvb3R1cCAoc2VlIFBQQ2hhbWVsZW9uRVZCKS4KLQkgICAgICAgV2hlbiB0aG9zZSBzZXR0aW5ncyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGJvYXJkCi0JICAgICAgIGNvbmZpZyBmaWxlLCB0aGUgcmVnaXN0ZXIgc2V0dXAgd2lsbCBiZSBhcyBpdCBpcyBub3csCi0JICAgICAgIHNvIHRoaXMgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBicmVhayBhbnkgY3VycmVudAotCSAgICAgICBkZXNpZ24gdXNpbmcgdGhpcyBjb2RlLgorY29tbWl0IDNkNWM1YmU1NDc0NDVkZDNiZDJlYjczNjhkODBkZjAzZWE0Mzc5NzAKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgV2VkIE1heSAzMSAxMTozOTozNCAyMDA2IC0wNTAwCiAKLQkgICAgICAgVGhhbmtzIHRvIEFuZHJlYSBNYXJzb24gZnJvbSBEQVZFIGZvciB0aGlzIHBhdGNoLgorICAgIFJlbW92ZWQgdW5uZWVkZWQgbG9jYWxfYnVzX2luaXQoKSBmcm9tIDg2NDFIUENOIGJvYXJkLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CiAKLSAgNDQwIEREUjogICAtIEFkZGVkIGZ1bmN0aW9uIHNkcmFtX3RyMV9zZXQgdG8gYXV0byBjYWxjdWxhdGUgdGhlCi0JICAgICAgIFRSMSB2YWx1ZSBmb3IgdGhlIEREUi4KLQkgICAgIC0gQWRkZWQgRUNDIHN1cHBvcnQgKHNlZSBwM3A0NDApLgorY29tbWl0IDRkM2Q3MjljMTZjMzkyZDI5ODJkMzI2NmI2NTlkMzMzYzkyNzY5N2QKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgV2VkIE1heSAzMSAxMToyNDoyOCAyMDA2IC0wNTAwCiAKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBNYXIgMjAwNgorICAgIE1vdmVkIG1wYzg2NDFocGNuX2JvYXJkX3Jlc2V0KCkgb3V0IG9mIGNwdS8gaW50byBib2FyZC8uCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KIAotKiBGaXggQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCBkZXBlbmRlbmN5IGluIGNwdS9hcm05MjB0L3N0YXJ0LlMKLSAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAxMyBPY3QgMjAwNSBbRE5YIzIwMDYwNDAxNDIwMDA0NzNdCitjb21taXQgYjJhOTQxZGUwNjAzNTBhZDE1ODc4ZDgyMTk4MjVmNDk1MGU5YmI4ZQorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgorRGF0ZTogICBXZWQgTWF5IDMxIDEwOjA3OjI4IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgeW1vZGVtIHByb3RvY29sIGRvd25sb2FkCi0gIFBhdGNoIGJ5IFN0ZWZhbm8gQmFiaWMsIDI5IE1hciAyMDA2CisgICAgUmVtb3ZlIGRlYWQgZGVidWcgY29kZS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgogCi0qIE1lbW9yeSBNYXAgVXBkYXRlIGZvciBEZWx0YSBib2FyZDogVS1Cb290IGlzIGF0IDB4ODAwMDAwMDAtMHg4NDAwMDAwMAotICBNZXJnZSBmcm9tIE1hcmt1cyBLbG90emL8Y2hlcidzIHJlcG8sIDAxIEFwciAyMDA2Citjb21taXQgMTI2YWE3MGYxMGJhM2QyMGUwYTZmNGQzMjMyODI1MDUxM2I3Nzc3MAorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgTWF5IDMwIDE3OjQ3OjAwIDIwMDYgLTA1MDAKIAotKiBHQ0MtNC54IGZpeGVzOiBjbGVhbiB1cCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uIGZvciBhbGwKLSAgYm9hcmRzCisgICAgTW92ZSBtcGM4Nnh4IFBJWElTIGNvZGUgdG8gYm9hcmQgZGlyZWN0b3J5CisgICAgCisgICAgRmlyc3QgY3V0IGF0IG1vdmluZyB0aGUgUElYSVMgcGxhdGZvcm0gY29kZSBvdXQgb2YKKyAgICB0aGUgODZ4eCBjcHUgZGlyZWN0b3J5IGFuZCBpbnRvIGJvYXJkL21wYzg2NDFocGNuCisgICAgd2hlcmUgaXQgYmVsb25ncy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgogCi0qIFVwZGF0ZSBmb3IgRGVsdGEgYm9hcmQ6Ci0gIC0gcmVkdW5kYW50IE5BTkQgZW52aXJvbm1lbnQKLSAgLSBtaXNjIE1vbmFoYW5zIGNsZWFudXBzIChyZW1vdmUgZGVhZCBjb2RlIGV0Yy4pCi0gIC0gREE5MDMwIEluaXRpYWxpemF0aW9uOyBzb21lIG1pbmltYWwgY2hhbmdlcyB0byBQWEEgSTJDIGRyaXZlciB0bwotICAgIG1ha2UgaXQgd29yayB3aXRoIHRoZSBNb25haGFucy4KLSAgLSBNYWtlIE1vbmFoYW5zIGNsb2NrIGZyZXF1ZW5jeSBjb25maWd1cmFibGUgdXNpbmcKLSAgICBDRkdfTU9OQUhBTlNfUlVOX01PREVfT1NDX1JBVElPIGFuZAotICAgIENGR19NT05BSEFOU19UVVJCT19SVU5fTU9ERV9SQVRJTy4KLSAgTWVyZ2UgZnJvbSBNYXJrdXMgS2xvdHpi/GNoZXIncyByZXBvLCAyNSBNYXIgMjAwNgorY29tbWl0IDM4Y2VlMTJkY2ZjYzI1NzM3MWM5MDFjN2UxM2U1OGVjYWIwYTM1ZDgKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVHVlIE1heSAzMCAwOToxMDozMiAyMDA2IC0wNTAwCiAKLSogRW5hYmxlIFF1YWQgVUFSVCBvbSBNQ0MyMDAgYm9hcmQuCisgICAgSW1wcm92ZSAicmVzZXQiIGNvbW1hbmQncyBpbnRlcmFjdGlvbiB3aXRoIHdhdGNoZG9nLgorICAgIAorICAgICAgICAicmVzZXQgYWx0YmFuayIgd2lsbCByZXNldCBhbm90aGVyIGJhbmsgV0lUSE9VVCB3YXRjaCBkb2cgdGltZXIgZW5hYmxlZAorICAgICAgICAicmVzZXQgYWx0YmFuayB3ZCIgd2lsbCByZXNldCBhbm90aGVyIGJhbmsgV0lUSCB3YXRjaCBkb2cgZW5hYmxlZAorICAgICAgICAiZGlzd2QiIHdpbGwgZGlzYWJsZSB3YXRjaCBkb2cgYWZ0ZXIgdS1ib290IGJvb3RzIHVwIHN1Y2Nlc3NmdWxseQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+CiAKLSogQ2xlYW51cCBNQ0MyMDAgYm9hcmQgY29uZmlndXJhdGlvbjsgb21pdCBub24tZXhpc3RlbnQgc3R1ZmYuCitjb21taXQgNzAyMDVlNWE2ZGRjODUyOGIxMWRiOWViNGQzZmEwMjA5ZDlmY2UyYQorQXV0aG9yOiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUdWUgTWF5IDMwIDA4OjUxOjE5IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgTVBDODU5Lzg2NiBSZXYuIEEuMAorICAgIEZpeCB0d28gU0RSQU0gc2V0dXAgYnVncy4KKyAgICAKKyAgICAgICAgRml4IEVDQyBzZXR1cCBidWcuCisgICAgICAgIEVuYWJsZSAxVC8yVCBiYXNlZCBvbiBudW1iZXIgb2YgRElNTXMgcHJlc2VudC4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgogCi0qIEFkZCBjb21tYW5kIGZvciBoYW5kbGluZyBERFIgRUNDIHJlZ2lzdGVycyBvbiBNUEM4MzQ5RUUgTURTIGJvYXJkLgorY29tbWl0IGQxMWZlYzUwMTUzMzRkZWIyMDEwZTM2Y2UwMGJiMTE4Y2M1NDI5YTUKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAyNiAxMDoyNDo0OCAyMDA2IC0wNTAwCiAKLSogRml4IEREUiBFQ0MgYml0IGRlZmluaXRpb25zIGZvciBNUEM4M3h4LgorICAgIEFkZCBmaXJzdCBkcmFmdCBvZiB0aGUgTVBDODY0MUhQQ04gZG9jL1JFQURNRS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgogCi0qIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIE1QQzgzNDlFIE1EUyBib2FyZC4KK2NvbW1pdCBlZDQ1ZDZjOTMwYjU5Mzk3MThhODdlZTEyZTI1Y2Y5YTA1OTc4ZDRhCitBdXRob3I6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIEZyaSBNYXkgMjYgMTA6MTM6MDQgMjAwNiAtMDUwMAogCi0qIEFkZCBzdXBwb3J0IGZvciBFQ0MgRERSIGluaXRpYWxpemF0aW9uIG9uIE1QQzgzeHguCisgICAgQWRkZWQgcGNpQDgwMDAgYmxvY2suCisgICAgVXBkYXRlZCBldGhlcm5ldCBpbnRlcnJ1cHQgbWFwcGluZ3MgKG1vdmVkIHVwIDQ4KS4KKyAgICBDbGVhbmVkIHVwIGEgZmV3IGNvbW1lbnRzLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CiAKLSogQWRkIERNQSBzdXBwb3J0IGZvciBNUEM4M3h4LgorY29tbWl0IDMwMzNlYmIyMGZkN2MzNzJjN2JjYTNjOTk1NWE0NjkyYmIyMjQwYjcKK0F1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAyNiAxMDowMToxNiAyMDA2IC0wNTAwCiAKLSogQWRkIHN5bmMgaW4gZG9fcmVzZXQoKSByb3V0aW5lIGZvciBNUEM4M3h4IGFmdGVyIFJQUiByZWdpc3RlcgotICB3YXMgd3JpdHRlbiB0by4gSXQgaXMgbmVlZCBvbiBzb21lIHRhcmdldHMgd2hlbiBCQVQgdHJhbnNsYXRpb24KLSAgaXMgZW5hYmxlZC4KKyAgICBBbGxvdyBhcmdzIG9uIHJlc2V0IGNvbW1hbmQuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KIAotKiBBZGQgYml0IGRlZmluaXRpb25zIGZvciBNUEM4M3h4IEREUiBjb250cm9sbGVyIHJlZ2lzdGVycy4KK2NvbW1pdCAxNGUzNzA4MWZmM2NhYzdlYmU2ZTkzODM2NTIzNDI5ODUzYjZiMjkyCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CitEYXRlOiAgIEZyaSBNYXkgMTkgMTM6Mjg6MzkgMjAwNiAtMDUwMAogCi0qIEFkZCBEY2J6KCksIERjYmkoKSBhbmQgRGNiZigpIHJvdXRpbmVzIGZvciBNUEM4M3h4LgorICAgIENoYW5nZSBhcmJpdHJhdGlvbiB0byByb3VuZC1yb2JpbiBmb3IgU01QIGxpbnV4LgogCi0qIENvcnJlY3Qgc2hpZnQgb2Zmc2V0cyBpbiBpY2FjaGVfc3RhdHVzIGFuZCBkY2FjaGVfc3RhdHVzIGZvciBNUEM4M3h4LgorY29tbWl0IDlhNjU1ODc2ZTU5OTViZTgwZjQ5MDU0ZTI1MDk1MDBlODcxZTRkM2EKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAxOSAxMzoyNjozNCAyMDA2IC0wNTAwCiAKLSogQWRkIHN1cHBvcnQgZm9yIERTMTM3NCBSVEMgY2hpcC4KKyAgICBFbmFibGUgZHVhbCBERFIgY29udHJvbGxlcnMgYW5kIGludGVybGVhdmluZy4KIAotKiBBZGQgc3VwcG9ydCBmb3IgTGl0ZTUyMDBCIGJvYXJkLgotICBQYXRjaCBieSAgUGF0Y2ggYnkgSm9zZSBNYXJpYSAoVHhlbWEpIExvcGV6LCAxNiBKYW4gMjAwNgorY29tbWl0IDU4NmQxZDVhYmQzZTUyNWYxZTFkOWI4MWU1YTYxYTRkYTZiMmZhM2MKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAxOSAxMzoyMjo0NCAyMDA2IC0wNTAwCiAKLSogQXBwbHkgU29DIGNvbmNlcHQgdG8gYXJtOTI2ZWpzIENQVXMsIGkuZS4gbW92ZSB0aGUgU29DIHNwZWNpZmljCi0gIHRpbWVyIGFuZCBjcHVfcmVzZXQgY29kZSBmcm9tIGNwdS8kKENQVSkgaW50byB0aGUgbmV3Ci0gIGNwdS8kKENQVSkvJChTT0MpIGRpcmVjdG9yaWVzCi0gIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDEzIE1hciAyMDA2CisgICAgVXBkYXRlIDg2eHggYWRkcmVzcyBtYXAgYW5kIExBV0JBUnMuCiAKLSogQ2hhbmdlIG1heCBzaXplIG9mIHVuY29tcHJlc3NlZCB1SW1hZ2UncyB0byA4TUJ5dGUgYW5kIGFkZAotICBDRkdfQk9PVE1fTEVOIHRvIGFkanVzdCB0aGlzIHNldHRpbmcuCitjb21taXQgY2NjY2U1ZDA1ODFiYjBiYTQ2MDI3OTlhNGI1MTEyZTU4ZDE1NzljYgorQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgorRGF0ZTogICBGcmkgTWF5IDE5IDEzOjE0OjE1IDIwMDYgLTA1MDAKIAotICBBcyBtZW50aW9uZWQgYnkgUm9iaW4gR2V0eiBvbiAyMDA1LTA1LTI0IHRoZSBzaXplIG9mIHVuY29tcHJlc3NlZAotICB1SW1hZ2VzIHdhcyByZXN0cmljdGVkIHRvIDRNQnl0ZXMuIFRoaXMgZGVmYXVsdCBzaXplIGlzIG5vdwotICBpbmNyZWFzZWQgdG8gOE1ieXRlcyBhbmQgY2FuIGJlIG92ZXJyaWRlZCBieSBzZXR0aW5nIENGR19CT09UTV9MRU4KLSAgaW4gdGhlIGJvYXJkIGNvbmZpZyBmaWxlLgorICAgIFJlbW92ZSBMMiBDYWNoZSBpbnZhbGlkYXRlIHBvbGxpbmcuCiAKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgorY29tbWl0IGYzNWVjNjhmYjA2NmNlYzBlMzYyOTRiZmUwN2RlYzJkNGU4YWQzYTgKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KK0RhdGU6ICAgRnJpIE1heSAxOSAxMjozMzowOSAyMDA2IC0wNTAwCiAKLSogRml4IHByb2JsZW0gd2l0aCB1cGRhdGVkIFBDSSBjb2RlIGluIGNwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgorICAgIEVuYWJsZSAybmQgQ1BVIGFuZCBJMkMuCiAKLSogY3B1L3BwYzR4eC9zdGFydC5TIDogZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBhZnRlciByZWxvY2F0aW9uCi0gIFBhdGNoIGJ5IENlZHJpYyBWaW5jZW50LCAwNiBKdWwgMjAwNQorY29tbWl0IGJmNjkwZGNiNTEyZDM0YzRmY2VlYzBlYjFlNWMwZTg4YTlkYjVkNTQKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgTW9uIE1heSAxNSAwNzoyNjo1NiAyMDA2IC0wNTAwCiAKLSogYXUxeDAwX2V0aC5jOiBjaGVjayBtYWxsb2MgcmV0dXJuIHZhbHVlIGFuZCBhYm9ydCBpZiBpdCBmYWlsZWQKLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1CisgICAgVXBkYXRlIGludGVycnVwdCBtYXBwaW5nLgogCi0qIENoYW5nZSB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIHNvZnRfaTJjLmM6c2VuZF9hY2soKSB0byBrZWVwIGZyb20KLSAgaW5jb3JyZWN0bHkgZ2VuZXJhdGluZyBzdGFydC9zdG9wIGNvbmRpdGlvbnMgb24gdGhlIGJ1cy4KLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1Citjb21taXQgNmNmZWEzMzQ3N2IwNGI2M2VkNDczODZlZDE2Mjk1Mjk0ODRjMzNiYQorQXV0aG9yOiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgTWF5IDEwIDA5OjM4OjA2IDIwMDYgLTA1MDAKIAotKiBGaXggYnVnIGluIFtpZF1jYWNoZV9zdGF0dXMgY29tbWFuZHMgZm9yIE1QQzg1eHggcHJvY2Vzc29yczsKLSAgc2hvdWxkIGxvb2sgYXQgTFNCIG9mIEwxQ1NSbiByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lIGlmIEwxIGNhY2hlIGlzCi0gIGVuYWJsZWQsIG5vdCB0aGUgTVNCLgotICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOSBKdWwgMjAwNQorICAgIFJlbW92ZSB1bm5lZWRlZCBJTklUX1JBTV9MT0NLIGNhY2hlIHR3aWRkbGluZy4KKyAgICBDb3JyZWN0bHkgdHJhY2tzIHIyOSBhcyBnbG9iYWwgZGF0YSBwb2ludGVyIG5vdy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgogCi0qIEZpeCBhcnJheSBvdmVyZmxvdyB3aXRoIGZ3X3NldGVudiBvbiB1bmluaXRpYWxpc2VkIGVudmlyb25tZW50Ci0gIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE1IEp1bCAyMDA1Citjb21taXQgZDRkZDMxN2I1OGMxMjZhMmE3ZTczZjQ3NjRlY2MxYTdjOTdmODc2YworQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBXZWQgTWF5IDEwIDA5OjMzOjA3IDIwMDYgLTA1MDAKIAotKiBBZGQgc3VwcG9ydCBmb3IgRW1iZWRkZWRQbGFuZXQgRVA4OHggYm9hcmRzCi0gIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDA1CisgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGZsYXNoLmMgZmlsZS4KIAotKiBSZW1vdmUgYm9hcmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBmcm9tIHRoZSBjb21tb24geGlsaW54Ci0gIGV0aGVybmV0IGFuZCBpaWMgYWRhcHRlciBjb2RlLgotICBQYXRjaCBieSBNaWNoYWVsIExpYmVza2luZCwgMTIgSnVsIDIwMDUKK2NvbW1pdCAxOGI2YzhjZDhhZjZjYzdmMzUxODBjZWRjNGFkYjMyMzZjYzFhMWI4CitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFR1ZSBNYXkgOSAwODoyMzo0OSAyMDA2IC0wNTAwCiAKLSogQWRkIE5hdCBTZW1pIERQODM4NjUgUEhZIHN1cHBvcnQgdG8gTVBDODV4eCBUU0VDIGRyaXZlcgotICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwOCBKdWwgMjAwNQorICAgIEdldCBNUEM4NjQxSFBDTiBmbGFzaCBpbWFnZXMgd29ya2luZy4KKyAgICAKKyAgICAgICAgRW5hYmxlIHRoZSBDRkkgZHJpdmVyLgorICAgICAgICBSZW1vdmUgYm9ndXMgTEFXQkFSNyBjcnVmdC4KKyAgICAgICAgVXNlIGNvcnJlY3QgVEVYVF9CQVNFLCBGaXh1cCBsb2FkIHNjcmlwdC4KKyAgICAgICAgRW5hYmxlIFNQRCBFRVBST00gZHVyaW5nIEREUiBzZXR1cC4KKyAgICAgICAgVXNlIGdlbmVyaWMgUkZDIDE5MTggSVAgYWRkcmVzc2VzIGJ5IGRlZmF1bHQuCiAKLSogQWRkIChzb21lKSBkZWZpbml0aW9ucyBmb3IgdGhlIE1QQzg1eHggbG9jYWwgYnVzIGNvbnRyb2xsZXIKLSAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKK2NvbW1pdCA1YzllZmIzNmE2YjU0MzE0MjNmNTI4ODhhMGUzYjRiNTE1ZmU3ZWNhCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgMjcgMTA6MTU6MTYgMjAwNiAtMDUwMAogCi0qIEFkZCBDUE0yIEkvTyBwaW4gZnVuY3Rpb25zIGZvciBNUEM4NXh4IHByb2Nlc3NvcnMKLSAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKKyAgICBDbGVhbnVwIHdoaXRlc3BhY2VzIGFuZCBzdHlsZSBpc3N1ZXMuCisgICAgUmVtb3ZlZCAvLy1zdHlsZSBjb21tZW50cy4KKyAgICBVc2UgODAtY29sdW1uIGxpbmVzLgorICAgIFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgIFJlbW92ZSBkZWFkIGNvZGUgYW5kIGRlYnVnIGNydWZ0LgogCi0qIEZpeCBjb21waWxlIHByb2JsZW0KK2NvbW1pdCBhMjMyMGE2YmY4MTEzYTA5NTQ0YzQyZDE2MGQxMGFjNjlkMDQ5YTAzCitBdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgMjcgMDg6MjI6MzkgMjAwNiAtMDUwMAogCi0qIEFkZGVkIFBDSSBzdXBwb3J0IGZvciBNUEM4MzQ5QURTIGJvYXJkCi0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEgMTEgSmFuIDIwMDYKKyAgICBSZXZlcnQgYmFkIFBDSSBwcmVmZXRjaCBsaW1pdCBjaGFuZ2UuCiAKLSogRW5hYmxlIGFkZHJlc3MgdHJhbnNsYXRpb24gb24gTVBDODN4eAotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMCBGZWIgMjAwNgorY29tbWl0IGRlYmI3MzU0ZDFlYTRmNjk0MTU0ODE4ZGY1ZTViNTIzZjVjMWNjMWQKK0F1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgV2VkIEFwciAyNiAxNzo1ODo1NiAyMDA2IC0wNTAwCiAKLSogRGVjb3B1bGVkIHNldHRpbmcgb2YgT1IvQlIgYW5kIExCTEFXQkFSL0xCTEFXQVIgb24gTVBDODN4eAotICBQYXRjaCBieSBLdW1hciBHYWxhLCAyNSBKYW4gMjAwNgotCi0qIEZpeGVkIGRlZmluZXMgZm9yIE1QQzgzeHggU0lDUkwgcmVnaXN0ZXIgdG8gbWF0Y2ggY3VycmVudCBzcGVjcwotICBQYXRjaCBieSBLdW1hciBHYWxhLCAyMyBKYW4gMjAwNgotCi0qIE9ubHkgZGlzYWJsZSB0aGUgTVBDODN4eCB3YXRjaGRvZyBpZiBpdHMgZW5hYmxlZCBvdXQgb2YgcmVzZXQuCi0gIElmIGl0cyBkaXNhYmxlZCBvdXQgb2YgcmVzZXQgU1cgY2FuIGxhdGVyIGVuYWJsZSBpdCBpZiBzbyBkZXNpcmVkCi0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2Ci0KLSogQWxsb3cgY29uZmlnIG9mIEdQSU8gZGlyZWN0aW9uICYgZGF0YSByZWdpc3RlcnMgYXQgYm9vdCBvbiA4M3h4Ci0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2Ci0KLSogRW5hYmxlIHRpbWUgaGFuZGxpbmcgb24gODN4eAotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgotCi0qIE1ha2UgU3lzdGVtIElPIENvbmZpZyBSZWdpc3RlcnMgYm9hcmQgY29uZmlndXJhYmxlIG9uIE1QQzgzeHgKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKLQotKiBGaXhlZCBQQ0kgaW5kaXJlY3QgY29uZmlnIG9wcyB0byBoYW5kbGUgbXVsdGlwbGUgUENJIGNvbnRyb2xsZXJzCi0gIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBidXMgbnVtYmVyIHdlIGFyZSB0cnlpbmcgdG8gYWNjZXNzIGJhc2VkCi0gIG9uIHdoaWNoIFBDSSBjb250cm9sbGVyIGl0cyBvbgotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMiBKYW4gMjAwNgotCi0qIFJlcG9ydCBiYWNrIFBDSSBidXMgd2hlbiBkb2luZyB0YWJsZSBiYXNlZCBkZXZpY2UgY29uZmlnCi0gIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2Ci0KLSogQWRkZWQgc3VwcG9ydCBmb3IgUENJIHByZWZldGNoYWJsZSByZWdpb24gYW5kIEJBUnMKLSAgSWYgYSBob3N0IGNvbnRyb2xsZXIgc2V0cyB1cCBhIHJlZ2lvbiBhcyBwcmVmZXRjaGFibGUgYW5kCi0gIGEgZGV2aWNlJ3MgQkFSIGRlbm90ZXMgaXQgYXMgcHJlZmV0Y2hhYmxlLCBhbGxvY2F0ZSB0aGUKLSAgQkFSIGludG8gdGhlIHByZWZldGNoIHJlZ2lvbi4KLQotICBJZiBhIEJBUiBpcyBwcmVmZXRjaGFibGUgYW5kIG5vIHByZWZldGNoYWJsZSByZWdpb24gaGFzCi0gIGJlZW4gc2V0dXAgYnkgdGhlIGNvbnRyb2xsZXIgd2UgZmFsbCBiYWNrIHRvIGFsbG9jYXRpbmcKLSAgdGhlIEJBUiBpbnRvIHRoZSBub3JtYWxseSBtZW1vcnkgcmVnaW9uLgotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgotCi0qIEFkZCBoZWxwZXIgZnVuY3Rpb24gZm9yIGdlbmVyaWMgZmxhdCBkZXZpY2UgdHJlZSBmaXh1cHMgZm9yIG1wYzgzeHgKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKLQotKiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBpbml0cmQgaW5mb3JtYXRpb24gdmlhIGZsYXQgZGV2aWNlIHRyZWUKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKLQotKiBBZGRlZCBPRl9TVERPVVRfUEFUSCBhbmQgT0ZfU09DCi0KLSAgT0ZfU1RET1VUX1BBVEggc3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBkZXZpY2UgdGhlIGtlcm5lbCBjYW4gdXNlCi0gIGZvciBjb25zb2xlIG91dHB1dAotCi0gIE9GX1NPQyBzcGVjaWZpZXMgdGhlIHByb3BlciBuYW1lIG9mIHRoZSBTT0Mgbm9kZSBpZiBvbmUgZXhpc3RzLgotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgotCi0qIEFsbG93IGJvYXJkIGNvZGUgdG8gZml4dXAgdGhlIGZsYXQgZGV2aWNlIHRyZWUgYmVmb3JlIGJvb3RpbmcgYSBrZXJuZWwKLSAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKLQotKiBBZGRlZCBDT05GSUdfIG9wdGlvbnMgZm9yIGJkX3QgYW5kIGVudiBpbiBmbGF0IGRldiB0cmVlCi0KLQlDT05GSUdfT0ZfSEFTX0JEX1Qgd2lsbCBwdXQgYSBjb3B5IG9mIHRoZSBiZF90Ci0JaW50byB0aGUgcmVzdWx0aW5nIGZsYXQgZGV2aWNlIHRyZWUuCi0KLQlDT05GSUdfT0ZfSEFTX1VCT09UX0VOViB3aWxsIGNvcHkgdGhlIGVudmlyb25tZW50Ci0JdmFyaWFibGVzIGZyb20gdS1ib290IGludG8gdGhlIGZsYXQgZGV2aWNlIHRyZWUKLQotICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgotCi0qIEFkZCBzdXBwb3J0IGZvciB0aGUgREhDUCB2ZW5kb3Igb3B0aW9uYWwgYm9vdGZpbGUgKCM2NykuCi0gIElnbm9yZXMgdGhlIHZlbmRvciBURlRQIHNlcnZlciBuYW1lIG9wdGlvbiAoIzY2KS4KLSAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKLQotKiBGaXggYSBIVyB0aW1pbmcgaXNzdWUgb24gODU0OCBDRFMgZm9yIGVUU0VDIDMgaW4gUkdNSUkgbW9kZQotICBQYXRjaCBieSBBbmR5IEZsZW1pbmcsIDE0IEp1biAyMDA1Ci0KLSogRml4IGJhZCByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgTFRYOTcxIFBIWSBvbiBNUEM4NXh4IGJvYXJkcy4KLSAgUGF0Y2ggYnkgR2VyaGFyZCBKYWVnZXIsIDIxIEp1biAyMDA1Ci0KLSogQWRkIG5ldGNvbnNvbGUgYW5kIHNvbWUgbW9yZSBjb21tYW5kcyB0byBSUFhsaXRlX0RXIGJvYXJkCi0gIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQotCi0qIEZpeCBiYWQgZGVjbGFyYXRpb24gb24gcGNpX2NmZ2Z1bmNfbm90aGluZwotICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKLQotKiBBZGp1c3QgImVjaG8iIGFzIGEgZGVmYXVsdCBjb21tYW5kCi0gIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQotCi0qIEZpeCBQQ0lERiBjYWxjdWxhdGlvbiBpbiBjcHUvbXBjODI2MC9zcGVlZC5jIGZvciBNUEM4MjgwRUMKLSAgUGF0Y2ggYnkgS29rSG93IFRlaCwgMTYgSnVuIDIwMDUKLQotKiBBZGQgY3JjIG9mIGRhdGEgdG8gamZmczIgKGluIGpmZnMyXzFwYXNzX2J1aWxkX2xpc3RzKCkpLgotICBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE1IEp1biAyMDA1Ci0KLSogQ29kaW5nIFN0eWxlIGNsZWFudXAKLQotKiBBdm9pZCBkZXJlZmVyZW5jaW5nIE5VTEwgaW4gZmluZF9jbWQoKSBpZiBubyB2YWxpZCBjb21tYW5kcyB3ZXJlIGZvdW5kCi0gIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMyBKdW4gMjAwNQotCi0qIEFkZCBBREkgQmxhY2tmaW4gc3VwcG9ydAotICAtIGFkZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBCbGFja2ZpbiBCRjUzMyBDUFUKLSAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEFESSBCRjUzMyBTdGFtcCB1Q2xpbnV4IGJvYXJkCi0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBBREkgQkY1MzMgRVpLaXQgYm9hcmQKLSAgUGF0Y2hlcyBieSBSaWNoYXJkIEtsaW5nbGVyLCAxMSBKdW4gMjAwNQotCi0qIEFkZCBsb2FkcyBvZiBudG9obCgpIGluIGltYWdlIGhlYWRlciBoYW5kbGluZwotICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBKdW4gMjAwNQotCi0qIFN3aXRjaCBNUEM4NnhBRFMgYW5kIE1QQzg4NUFEUyBib2FyZHMgdG8gdXNlIGNwdWNsayBlbnZpcm9ubWVudAotICB2YXJpYWJsZSB0byBzZXQgY2xvY2sKLSAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKLQotKiBSUFhsaXRlIGNvbmZpZ3VyYXRpb24gZml4ZXMKLSAgLSBVc2UgY29ycmVjdCBmbGFzaCBzZWN0b3Igc2l6ZQotICAtIFVzZSBjb3JyZWN0IG1lbW9yeSB0ZXN0IGVuZCBhZGRyZXNzCi0gIC0gQWRkIHN1cHBvcnQgZm9yIGJ6aXAyIGNvbXByZXNzaW9uCi0gIC0gVmFyaW91cyBzbWFsbCBmaXhlcwotICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQotCi0qIE1lbW9yeSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIFpQQy4xOTAwIGJvYXJkCi0gIC0gRml4IFNEUkFNIHRpbWluZyBvbiBib3RoIGxvY2FsIGJ1cyBhbmQgNjB4IGJ1cwotICAtIEFkZCBzdXBwb3J0IGZvciBzZWNvbmQgZmxhc2ggYmFuayAoU0lNTSkKLSAgLSBDaGFuZ2UgYm9vdCBmbGFzaCBiYXNlCi0gIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIEFkZGVyIGJvYXJkcyB3aXRoIDE2TUIgU0RSQU07Ci0gIGFkZCBzdXBwb3J0IGZvciBzZWNvbmQgRkVDIG9uIEFkZGVyODd4IGJvYXJkLgotICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQotCi0qIEZpeCBjb25kaXRpb25hbCBmb3IgaW5jbHVkaW5nIGtzODY5NWV0aCBkcml2ZXIKLSAgUGF0Y2ggYnkgR3JlZyBVbmdlcmVyLCAwNCBKdW4gMjAwNQotCi0qIEZpeCBNYWtlZmlsZTogaW5jbHVkZSBjb25maWcubWsgb25seSBhZnRlciBDUk9TU19DT01QSUxFIGlzIGRlZmluZWQKLSAgUGF0Y2ggYnkgRnJpZWRyaWNoIExvYmVuc3RvY2ssIDAyIEp1biAyMDA1Ci0KLSogRml4IGNvbW1lbnQgaW4gY29tbW9uL3NvZnRfaTJjLmMKLSAgUGF0Y2hlcyBieSBQZXRlciBLb3JzZ2FhcmQvVG9sdW5heSBPcmt1biwgMjYgTWF5IDIwMDUKLQotKiBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzLgotICBQYXRjaCBieSBHcmVnIFVuZ2VyZXIsIDIxIE1heSAyMDA1Ci0KLSogV29yZCBhbGlnbm1lbnQgZml4ZXMgZm9yIHdvcmQgYWxpZ25lZCBOUzE2NTUwIFVBUlQKLSAgUGF0Y2ggYnkgSmVhbi1QYXVsIFNhbWFuLCAwMSBNYXIgMjAwNQotCi0gIEZpeGVzIGJ1ZyB3aXRoIFVBUlQgdGhhdCBvbmx5IHN1cHBvcnRzIHdvcmQgYWxpZ25lZCBhY2Nlc3M6IHJlbW92ZWQKLSAgIl9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsiIGZvciAiKENGR19OUzE2NTUwX1JFR19TSVpFID09IDQpIiBzb21lCi0gIChicm9rZW4hKSB2ZXJzaW9ucyBvZiBHQ0MgZ2VuZXJhdGUgYnl0ZSBhY2Nlc3NlcyB3aGVuIGVuY291bnRlcmluZwotICB0aGUgcGFja2VkIGF0dHJpYnV0ZSByZWdhcmRsZXNzIGlmIHRoZSBzdHJ1Y3QgaXMgYWxyZWFkeSBjb3JyZWN0bHkKLSAgYWxpZ25lZCBmb3IgYSBwbGF0Zm9ybS4gUGVyaXBoZXJhbHMgdGhhdCBjYW4gb25seSBoYW5kbGUgd29yZAotICBhbGlnbmVkIGFjY2VzcyB3b24ndCB3b3JrIHByb3Blcmx5IHdoZW4gYWNjZXNzZWQgd2l0aCBieXRlIGFjY2Vzcy4KLSAgVGhlIHN0cnVjdCBOUzE2NTUwIGlzIGFscmVhZHkgd29yZCBhbGlnbmVkIGZvciBSRUdfU0laRSA9IDQsIHNvCi0gIHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFja2VkIHRoZSBzdHJ1Y3QgaW4gdGhhdCBjYXNlLgotCi0qIEZpeCBiZWhhdmlvdXIgaWYgZ2F0ZXdheWlwIGlzIG5vdCBzZXQKLSAgUGF0Y2ggYnkgUm9iaW4gR2lsa3MsIDIzIERlYyAyMDA0Ci0KLSogRml4IGNsZWFudXAgZm9yIG5ldHN0YXJ0IGJvYXJkLgotICBSZW1vdmUgYnVpbGQgcmVzdWx0cyBmcm9tIHJlcG9zaXRvcnkKLQotKiBTb21lIGNvZGUgY2xlYW51cCBmb3IgR0NDIDQueAotCi0qIEZpeGVzIHRvIHN1cHBvcnQgZW52aXJvbm1lbnQgaW4gTkFORCBmbGFzaDsKLSAgZW5hYmxlIE5BTkQgZmxhc2ggYmFzZWQgZW52aXJvbm1lbnQgZm9yIGRlbHRhIGJvYXJkLgotCi0qIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBNb25haGFucyBDUFUgb24gWnlsb25pdGUgYW5kIERlbHRhIGJvYXJkcwotICAoVGhpcyBpcyBXb3JrIGluIFByb2dyZXNzISkKLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI2MC1BSSBib2FyZHMuCi0KLSogTWlub3IgY29kZSBjbGVhbnVwCi0KLSogTWVyZ2UgdGhlIG5ldyBOQU5EIGNvZGUgKHRlc3RpbmctTkFORCBicmFjaCk7IHNlZSBkb2MvUkVBRE1FLm5hbmQKLSAgUmV3cml0ZSBvZiBOQU5EIGNvZGUgYmFzZWQgb24gd2hhdCBpcyBpbiAyLjYuMTIgTGludXgga2VybmVsCi0gIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyOSBKdW4gMjAwNQotCi0qIEFkZCBsb3dib290IHRhcmdldCB0byBtY2MyMDAgYm9hcmQKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IE1hciAyMDA2Ci0KLSogRml4IHByb2JsZW0gd2l0aCBmbGFzaF9nZXRfc2l6ZSgpIGZyb20gQ0ZJIGRyaXZlciB1cGRhdGUKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIE1hciAyMDA2Ci0KLSogTWFrZSBDRkdfTk9fRkxBU0ggd29yayBvbiBBUk0gc3lzdGVtcwotICBQYXRjaCBieSBNYXJrdXMgS2xvdHpidWVjaGVyLCAyNyBGZWIgMjAwNgotCi0qIFVwZGF0ZSBtY2MyMDAgY29uZmlnOiBEaXNhYmxlIFBDSSBhbmQgRG9DLCB1c2UgMTMzIE1IeiBJUEIgY2xvY2ssCi0gIHVzZSBodXNoIHNoZWxsLgotCi0qIENvbnZlcnQgbWNjMjAwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEZlYiAyMDA2Ci0KLSogQWRkIGVudi12YXJpYWJsZSAidW5sb2NrIiB0byBoYW5kbGUgaW5pdGlhbCBzdGF0ZSBvZiBzZWN0b3JzCi0gIChsb2NrZWQvdW5sb2NrZWQpLgotCi0gIE9ubHkgdGhlIFUtQm9vdCBpbWFnZSBhbmQgaXQncyBlbnZpcm9ubWVudCBpcyBwcm90ZWN0ZWQsCi0gIGFsbCBvdGhlciBzZWN0b3JzIGFyZSB1bnByb3RlY3RlZCAodW5sb2NrZWQpIGlmIGZsYXNoCi0gIGhhcmR3YXJlIHByb3RlY3Rpb24gaXMgdXNlZCAoQ0ZHX0ZMQVNIX1BST1RFQ1RJT04pIGFuZAotICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgInVubG9jayIgaXMgc2V0IHRvICJ5ZXMiLgotCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggRmViIDIwMDYKLQotKiBVcGRhdGUgZHJpdmVycy9jZmlfZmxhc2guYzoKLSAgLSBmaW5kX3NlY3RvcigpIGNhbGxlZCBpbiBib3RoIHZlcnNpb25zIG9mIGZsYXNoX3dyaXRlX2NmaXdvcmQoKQotICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDI3dGggRmViIDIwMDYKLQotKiBDRkkgc3VwcG9ydCBmb3IgYSB4OC94MTYgQU1EL1NwYW5zaW9uIGZsYXNoIGNvbmZpZ3VyZWQgaW4geDggbW9kZQotICBQYXRjaCBieSBKb3NlIE1hcmlhIExvcGV6LCAxNiBKYW4gMjAwNgotCi0qIEFkZCBzdXBwb3J0IGZvciBBTUQvU3BhbnNpb24gRmxhc2hlcyBpbiBmbGFzaF93cml0ZV9jZmlidWZmZXIKLSAgUGF0Y2ggYnkgQWxleCBCYXN0b3MgYW5kIFRob21hcyBTY2hhZWZlciwgMjAwNS0wOC0yOQotCi0qIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6Ci0gIFdlICpzaG91bGQqIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3IgYml0cyBpZiB0aGUgcHJldmlvdXMgY2FsbAotICByZXR1cm5lZCBFUlJfT0sgKE90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgb3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4KLSAgZmxhc2hfc3RhdHVzX2NoZWNrKCkgYWxyZWFkeS4pICBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBvbmx5IGNoZWNrIGZvcgotICBlcnJvciBiaXRzIGlmIGZsYXNoX3N0YXR1c19jaGVjaygpIHJldHVybnMgRVJSX1RJTUVPVVQuCi0gIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyMyBBdWcgMjAwNQotCi0qIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6Ci0gIC0gQWRkIENGR19GTEFTSF9QUk9URUNUX0NMRUFSIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKLSAgLSBQcm9oaWJpdCBidWZmZXIgd3JpdGUgd2hlbiBidWZmZXJfc2l6ZSBpcyAxIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKLSAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOSBBdWcgMjAwNQotCi0qIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgotICAtIEZpeCB3cm9uZyB0aW1lb3V0IHZhbHVlIHVzYWdlIGluIGZsYXNoX3N0YXR1c19jaGVjaygpCi0gIC0gUm91bmQgd3JpdGVfdG91dCB1cCB3aGVuIGNvbnZlcnRpbmcgdG8gbXNlYyBpbiBmbGFzaF9nZXRfc2l6ZSgpCi0gIC0gUmVtb3ZlIGNsZWFyaW5nIGZsYXNoIHN0YXR1cyBhdCB0aGUgZW5kIG9mIGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcigpCi0gICAgd2hpY2ggc2V0cyBJbnRlbCAyOEY2NDBKMyBmbGFzaCBiYWNrIHRvIGNvbW1hbmQgbW9kZSBvbiBDU0I0NzIKLSAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDIgSnVseSAyMDA1Ci0KLSogQWRkIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBTTU1BQ080IEJvYXJkIGZyb20gUGFuRGFDb20uCi0gIFBhdGNoIGJ5IEhlaWtvIFNjaG9jaGVyLCAyMCBGZWIgMjAwNgotCi0qIEFkZCBHSVQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoY29tbWlkIElEKSB0byB1bnRhZ2dlZCBVLUJvb3QgdmVyc2lvbnMKLQotICBBcyBkb25lIGluIHRoZSBsaW51eCBrZXJuZWwsIHRoZSBVLUJvb3QgdmVyc2lvbiAoVV9CT09UX1ZFUlNJT04pCi0gIG9mIGFsbCB1bnJlbGVhc2VkICh1bnRhZ2dlZCkgVS1Cb290IGltYWdlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKLSAgZXh0ZW5kZWQgdXBvbiBjb21waWxldGltZSB3aXRoIGEgcGFydCBvZiB0aGUgR0lUIGNvbW1pdCBJRCBhbmQKLSAgcG9zc2libHkgd2l0aCAiZGlydHkiIGlmIHVuY29tbWl0ZWQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuCi0KLSAgSGVyZSBhbiBleGFtcGxlIGZvciB0aGUgcmVzdWx0aW5nIHZlcnNpb246Ci0gICJVLUJvb3QgMS4xLjQtZzM0NTdhYzE4LWRpcnR5IgotCi0gIFRoZSB2ZXJzaW9uIGlzIG5vdyBtYWludGFpbmVkIGluIHRoZSB0b3BsZXZlbCBNYWtlZmlsZSBhbmQgdGhlCi0gIHZlcnNpb24gaGVhZGVycyBhcmUgYXV0b2dlbmVyYXRlZC4KLQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDkgRmViIDIwMDYKLQotKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgSU5LQTR4MDAgYm9hcmQuCi0KLSogQ29udmVydCBDUENJNzUwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgotICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCA4IEZlYiAyMDA2Ci0KLSogVmFyaW91cyBjaGFuZ2VzIHRvIGVzZCBISDQwNSBib2FyZCBzcGVjaWZpYyBmaWxlcwotICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDcgRmViIDIwMDYKLQotKiBDbGVhbnVwIFUtQm9vdCBib290IG1lc3NhZ2VzIG9uIEFSTS4KLQotICBUbyBtYXRjaCB0aGUgVS1Cb290IHVzZXIgaW50ZXJmYWNlIG9uIEFSTSBwbGF0Zm9ybXMgdG8gdGhlIFUtQm9vdAotICBzdGFuZGFyZCAoYXMgb24gUFBDIHBsYXRmb3JtcyksIHNvbWUgbWVzc2FnZXMgd2l0aCBkZWJ1ZyBjaGFyYWN0ZXIKLSAgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGVmYXVsdCBVLUJvb3QgYnVpbGQuCi0gIEVuYWJsZSBERUJVRyBmb3IgbGliX2FybS9ib2FyZC5jIHRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcy4KLSAgTmV3IENPTkZJR19ESVNQTEFZX0NQVUlORk8gYW5kIENPTkZJR19ESVNQTEFZX0JPQVJESU5GTyBvcHRpb25zLgotICBQYXRjaAkgYnkgU3RlZmFuIFJvZXNlLCAyNCBKYW4gMjAwNgotCi0qIEZpeCB2YXJpb3VzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIHBwYzR4eCBidWlsZHMgKEVMREsgNC4wKQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEphbiAyMDA2Ci0KLSogQWRkIFZHQSBzdXBwb3J0IChDVDY5MDAwKSB0byBDUENJNzUwIGJvYXJkLgotICBJbnNlcnQgbWlzc2luZyBfX2xlMzJfdG9fY3B1KCkgZm9yIGZpbGVzaXplIGluIGV4dDJmc19yZWFkX2ZpbGUoKS4KLSAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMzAgRGVjIDIwMDUKLQotKiBQTUM0MDUgYW5kIENQQ0k0MDU6IE1vdmVkIGNvbmZpZ3VyYXRpb24gb2YgcGNpIHJlc291cmNlcwotICBpbnRvIGNvbmZpZyBmaWxlLgotICBQTUM0MDUgYW5kIENQQ0kyRFA6IEFkZGVkIGZpcm13YXJlIGRvd25sb2FkIGFuZCBib290aW5nIHZpYSBwY2kuCi0gIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMCBEZWMgMjAwNQotCi0qIEFkZCBDb2xkRmlyZSB0YXJnZXRzIHRvIE1BS0VBTEwgc2NyaXB0Ci0gIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAyNiBKYW4gMjAwNgotCi0qIEFkZCBzdXBwb3J0IGZvciByNTIwMCBib2FyZAotICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjYgSmFuIDIwMDYKLQotKiBBZGQgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIE01MjcxIHByb2Nlc3NvcgotICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjYgSmFuIDIwMDYKLQotKiBGaXggMjhGMjU2SjNBIHN1cHBvcnQgb24gUE01MjAgYm9hcmQKLSAgKHdpdGhvdXQgYmFuay1zd2l0Y2hpbmcgb25seSAzMiBNQiBjYW4gYmUgYWNjZXNzZWQpCi0KLSogRml4IG1raW1hZ2UgYnVnIHdpdGggbXVsdGlmaWxlIGltYWdlcyBjcmVhdGVkIG9uIDY0IGJpdCBzeXN0ZW1zLgotCi0qIEFkZCBzdXBwb3J0IGZvciAyOEYyNTZKM0EgZmxhc2ggKD0+IDY0IE1CKSBvbiBQTTUyMCBib2FyZAotCi0qIEZpeCBjb21waWxlciBwcm9ibGVtIHdpdGggYXQ5MXJtOTIwMGRrIGJvYXJkLgotICBQYXRjaCBieSBFdWdlbiBCaWd6LCAxOSBEZWMgMjAwNQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjQ6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogQ2hhbmdlcyB0byBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIDQ0MEVQL0dSIGV2YWwgYm9hcmRzOgotICAtIENoYW5nZWQgR1BJTyBzZXR1cCB0byBlbmFibGUgYW5vdGhlciBhZGRyZXNzIGxpbmUgaW4gb3JkZXIgdG8KLSAgICBhZGRyZXNzIDY0TSBvZiBGTEFTSC4KLSAgLSBBZGRlZCBmdW5jdGlvbiBzZHJhbV90cjFfc2V0IHRvIGF1dG8gY2FsY3VsYXRlIHRoZSB0cjEgdmFsdWUgZm9yCi0gICAgdGhlIEREUi4KLSAgUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMTIgRGVjIDIwMDUKLQotKiBNUEM1MjAwOiAgU2V0IFBDSSByZXRyeSBjb3VudGVyIHRvIDAgPSBpbmZpbml0ZSByZXRyeTsKLSAgVGhlIGRlZmF1bHQgb2YgMjU1IGlzIHRvbyBzaG9ydCBmb3Igc2xvdyBkZXZpY2VzLgotICBQYXRjaCBieSBNYXJ0aW4gTnlrb2R5bSwgMTIgRGVjIDIwMDUKLQotKiBDaGFuZ2UgcG9ydCBjb25maWd1cmF0aW9uIGZvciBPMkROVCAoQ09ERUMxIG9uIFBTQzEpLgotCi0qIEZpeCByZWdpc3RlciBmb3IgUENJIGFzeW5jIG1vZGUgb24gUFBDNDQwRVAKLSAgUGF0Y2ggYnkgWW91bmdjaHVsIEJhbmcsIDA4IERlYyAyMDA1Ci0KLSogRml4IFUtQm9vdCBsaW5raW5nIHByb2JsZW1zIChhZGQgLmVoX2ZyYW1lIHNlZ21lbnQgdG8gbGlua2VyIHNjcmlwdCkKLSAgVGhpcyBzZWdtZW50IG1heSBiZSByZXF1aXJlZCBieSBzb21lIGxpYmdjYy5hIGZ1bmN0aW9ucwotICAobGlrZSBfdWRpdmRpMykuCi0KLSogRml4IERQUkFNIG9mZnNldC9zaXplIGZvciBNUEM4NTQxLzg1NTUuCi0gIFNpbXBsaWZ5IFRRTTg1eHggTWFrZWZpbGUgaGFuZGxpbmcuCi0KLSogRml4IGRhdGEgb3ZlcmZsb3cgKHR5cG8/KSBpbiBydGMvZHMxMzAyLmMKLQotKiBGaXggVS1Cb290IGNvbXBpbGF0aW9uIGZvciBNSVBTIGJvYXJkcyB1c2luZyBFTERLIDQuMAotCi0qIEFkZCBzdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzLCBUUU04NXh4IHN1cHBvcnQgcmV3b3JrZWQ6Ci0gIC0gU3VwcG9ydCBmb3IgVFFNODU0MS84NTU1IGJvYXJkcyBhZGRlZC4KLSAgLSBDb21wbGV0ZSByZXdvcmsgb2YgVFFNODU0MC84NTYwIHN1cHBvcnQuCi0gIC0gQ29tbW9uIFRRTTg1eHggY29kZSBub3cgc3VwcG9ydHMgYWxsIGN1cnJlbnQgVFFNODV4eCBwbGF0Zm9ybXMKLSAgICAoVFFNODU0MC84NTQxLzg1NTUvODU2MCkuCi0gIC0gRERSIFNEUkFNIHNpemUgZGV0ZWN0aW9uIGFkZGVkLgotICAtIENBUyBsYXRlbmN5IGRlZmF1bHQgdmFsdWVzIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzZXR0aW5nICJzZXJpYWwjIgotICAgIHRvIGUuZy4gIkFCQzAwMDEgY2FzbD0yNSIgLT4gQ0FTIGxhdGVuY3kgMi41IHdpbGwgYmUgdXNlZC4KLSAgICBJZiBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgd2l0aCB0aGlzIG5vbiBkZWZhdWx0IENBUyBsYXRlbmN5LAotICAgIHRoZSBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KLSAgLSBGbGFzaCBzaXplIGRldGVjdGlvbiBhZGRlZC4KLSAgLSBNb3ZlZCBGQ0MgZXRoZXJuZXQgZHJpdmVyIGluaXRpYWxpemF0aW9uIGJlaGluZCBUU0VDIGRyaXZlciBpbml0Ci0gICAgLT4gVFNFQyBpcyBmaXJzdCBkZXZpY2UuCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzAgTm92IDIwMDUKLQotKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBTUCwgYWRkIHN1cHBvcnQgZm9yIEFNQ0MgTHVhbiA0NDBTUCBldmFsIGJvYXJkLgotICBQYXRjaCBieSBKb2huIE90a2VuLCAyMyBOb3YgMjAwNQotCi0qIENoYW5nZWQgUFBDNDR4IHN0YXJ0dXAgbWVzc2FnZSAoY3B1IGluZm8sIHNwZWVkLi4uKSB0byBjb21tb24gc3R5bGU6Ci0gIE9uIFBQQzQ0eCBwbGF0Zm9ybXMsIHRoZSBzdGFydHVwIG1lc3NhZ2UgZ2VuZXJhdGVkIGluICJjcHUuYyIgb25seQotICBjb21wcmlzZWQgdGhlIHBwYyB0eXBlIGFuZCByZXZpc2lvbiBidXQgbm90IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgbGlrZSBzcGVlZCBldGMuIFRob3NlIHNwZWVkIGluZm9zIHdoZXJlIHByaW50ZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljCi0gIGNvZGUuIFRoaXMgbmV3IGltcGxlbWVudGF0aW9uIG5vdyBwcmludHMgYWxsIENQVSBpbmZvcyBpbiB0aGUgY29tbW9uCi0gIGNwdSBzcGVjaWZpYyBjb2RlLiBObyBib2FyZCBzcGVjaWZpYyBjb2RlIGlzIG5lZWRlZCBhbnltb3JlIGFuZAotICB0aGVyZWZvcmUgcmVtb3ZlZCBmcm9tIGFsbCBjdXJyZW50IDQ0eCBpbXBsZW1lbnRhdGlvbnMuCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjcgTm92IDIwMDUKLQotKiBBZGp1c3QgVFFNODM0eCBQSFkgYWRkcmVzc2VzIGZvciBsYXRlc3QgaGFyZHdhcmUgcmV2aXNpb24uCi0KLSogSW5jcmVhc2UgbWFsbG9jIGFyZW5hIG9uIFRRTTUyMDAgYm9hcmQgdG8gMjU2IGtCLgotICBXaXRoIDY0IGtiIHVuaWZvcm0gZmxhc2ggc2VjdG9yIHNpemUgdGhlIG9sZCB2YWx1ZSBvZiAxMjgga0Igd2FzCi0gIHRvbyBzbWFsbC4KLQotKiBGaXggbWlpcGh5IGdsb2JhbCBkYXRhIGluaXRpYWxpemF0aW9uIChwcm9ibGVtIG9uIDR4eCBib2FyZHMgd2hlbgotICBubyBldGhhZGRyIGlzIGFzc2lnbmVkKS4gSW5pdGlhbGl6YXRpb24gbW92ZWQgZnJvbQotICBtaWlwaHlfcmVnaXN0ZXIoKSB0byBldGhfaW5pdGlhbGl6ZSgpLgotCi0gIEJhc2VkIG9uIGluaXRpYWwgcGF0Y2ggZm9yIDR4eCBwbGF0Zm9ybSBieSBNYXR0aGlhcyBGdWNocy4KLQotKiBSZW1vdmUgdW5ubmVjZXNzYXJ5ICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiBmcm9tIGluY2x1ZGUvYXNtLSovdS1ib290LmgKLQotKiBBbGxvdyB1c2Ugb2YgaW5jbHVkZS9pbWFnZS5oIGFuZCBpbmNsdWRlL2FzbS0qL3UtYm9vdC5oIGluIHByb3ByaWV0YXJ5IGNvZGUuCi0gIFRoZSBDT1BZSU5HIGZpbGUgd2FzIGV4dGVuZGVkIHRvIG1ha2UgY2xlYXIgdGhhdCB0aGVzZSBmaWxlcyBjYW4gYmUKLSAgdXNlZCBpbiBub24tR1BMIGNvZGUsIHRvby4KLSAgQWxzbywgYSBjb3JyZXNwb25kaW5nIG5vdGUgd2FzIHBsYWNlZCBpbiB0aGUgaGVhZGVycyBvZiB0aGUgYWZmZWN0ZWQgZmlsZXMuCi0KLSogQWRkIHN1cHBvcnQgZm9yIFByb2RyaXZlIFAzUDQ0MCBib2FyZDoKLSAgLSBBZGRlZCBvbmJvYXJkIFBQQzQ0MCBERFIgYXV0b2RldGVjdGlvbiBpbiBjcHUvcHBjL3NkcmFtLmMKLSAgLSBDRkdfRkxBU0hfUVVJRVRfVEVTVCBhZGRlZCB0byB1c2UgdGhlIGNvbW1vbiBDRkkgZHJpdmVyCi0gICAgZm9yIGJhbmsgYXV0b2RldGVjdGlvbgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIyIE5vdiAyMDA1Ci0KLSogQ2hhbmdlIGFsbCAnJCguLi4pJyB2YXJpYWJsZSByZWZlcmVuY2VzIGludG8gJyR7Li4ufScKLSAgd2hpY2ggbWFrZXMgdGhlIGVudmlyb25tZW50IGNvbXBhdGlibGUgd2l0aCB0aGUgaHVzaCBzaGVsbC4KLSAgV0FSTklORzogU3VwcG9ydCBmb3IgdGhlIG9sZCAnJCguLi4pJyBzeW50YXggd2lsbCBiZQotICBkaXNjb250aW51ZWQgaW4gYSBsYXRlciB2ZXJzaW9uLgotCi0qIE1pbm9yIGNoYW5nZXMgdG8gaW5pdCBmbGFncyBpbiBUUU04MzR4IFBDSS4KLQotKiBGaXggQmFtYm9vIEREUiBTRFJBTSBpbml0aWFsaXphdGlvbiAocHJvYmxlbSB3aXRoIG9uYm9hcmQgU0RSQU0pCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgTm92IDIwMDUKLQotKiBOZXcgUFBDIDQwNUVQIGJvYXJkIGFkZGVkOiBDTVM3MDAKLSAgQWRkZWQgQ09ORklHX05FVF9NVUxUSSBmb3IgVk9NNDA1IGJvYXJkLgotICBBZGRlZCByZXNldF9waHkoKSBmb3IgVk9NNDA1IGJvYXJkLgotICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDkgTm92IDIwMDUKLQotKiBVcGRhdGVkIFBDSSBtYXBwaW5nIGZvciBlc2QgQ1BDSTJEUCBib2FyZC4KLSAgQWRkIHN1cHBvcnQgZm9yIGVycm9yIExFRC4KLSAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA3IE5vdiAyMDA1Ci0KLSogRml4IE1QQzg1eHggUENJIHN1cHBvcnQgKHBjaV9yZWdpc3Rlcl9ob3NlKCkgYmVmb3JlIHBjaSBjb25maWcgYWNjZXNzKQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE5vdiAyMDA1Ci0KLSogQ29ycmVjdCBQUEMgVGltZWJhc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKFNQUk5fVEJSTC4uLikKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBOb3YgMjAwNQotCi0qIEFkanVzdCBiZC0+YmlfZmxhc2hzdGFydCBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIHRvIGNvcnJlY3Qgc2l6ZQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IE5vdiAyMDA1Ci0KLSogQWRkaXRpb25hbCBmaXggZm9yIGV4dGVybmFsIElSUSBjb25maWcgb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE5vdiAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIE9jb3RlYSBwYXNzIDMgd2l0aCA0NDBHWCBSZXYuIEYKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBOb3YgMjAwNQotCi0qIEZpeCBleHRlcm5hbCBJUlEgY29uZmlndXJhdGlvbiBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggT2N0IDIwMDUKLQotKiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgUEhZcy4KLSAgVGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgYm9hcmRzOgotCWNtY3B1MgkgICAgKGF0OTFybTkyMDAvZXRoZXIuYykKLQlQUENoYW1lbGVvbiAocHBjNHh4LzR4eF9lbmV0LmMpCi0JeXVrb24JICAgIChtcGM4MjIwL2ZlYy5jKQotCXVjMTAwCSAgICAobXBjOHh4L2ZlYy5jKQotCXRxbTgzNHgJICAgIChtcGM4MzR4L3RzZWMuYykgd2l0aCBFRVBSTzEwMAotCWxpdGU1MjAwICAgIChtcGM1eHh4L2ZlYy5jKSB3aXRoIEVFUFJPMTAwIGNhcmQgKGRyaXZlcnMvZWVwcm8xMDAuYykKLSAgTWFpbiBjaGFuZ2VzIGluY2x1ZGU6Ci0gIGNvbW1vbi9taWlwaHl1dGlsLmMKLSAgLSBtaWlwaHlfcmVnaXN0ZXIgcm91dGluZSB3YXMgYWRkZWQgdG8gYWxsb3cgbXVsdGlwbGUgUEhZcyB0byBiZSByZWdpc3RlcmVkCi0gIC0gbWlpcGh5X3JlYWQgYW5kIG1paXBoeV93cml0ZSBhcmUgbm93IGRlZmluZWQgaW4gdGhpcyBmaWxlLCBhbmQKLSAgICByZXF1aXJlIGFkZGl0aW9uYWwgYXJndW1lbnQgKGNoYXIgKmRldm5hbWUpCi0gIC0gb3RoZXIgbWlpcGh5Xyogcm91dGluZXMgYWxzbyByZXF1aXJlIGFkZGl0aW9uYWwgZGV2aWNlIG5hbWUgYXJndW1lbnQKLSAgLi4vbGliX2kzODYvYm9hcmQuYwotICAuLi9saWJfcHBjL2JvYXJkLmMKLSAgQ2FsbGluZyByZXNldF9waHkoKSB3YXMgbW92ZWQgdG8gYmUgZXhlY3V0ZWQgKmFmdGVyKiBldGhfaW5pdGlhbGl6ZSgpLgotICBUaGlzIGlzIG5lY2Vzc2FyeSBhcyBub3cgc29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHJlc2V0X3BoeSgpCi0gIG1heSBuZWVkIHRvIHVzZSBtaWlwaHlfcmVzZXQoKSB3aGljaCBpcyBub3QgYWxsb3dlZCBiZWZvcmUgZXRoX2luaXRpYWxpemUoKQotICBhcyBldGhfaW5pdGlhbGl6ZSByZWdpc3RlcnMgYWxsIHJlcXVpcmVkIG1paXBoeV8qIHJvdXRpbmVzLgotICBUZXN0ZWQgb24gSVA4NjAgYW5kIFBIWSBpbml0aWFsaXplcyBwcm9wZXJseSBhZnRlciB0aGlzIGNoYW5nZS4KLQotKiBDb3JyZWN0IGluY2x1ZGVzIGZvciBmbGF0IHRyZWUgYnVpbGRlci4KLQotKiBGaXggY29uZmxpY3RpbmcgdHlwZXMgKGZsYXNoX3dyaXRlKCkpIGluIHRyYWIgYXV0b191cGRhdGUuYy4KLQotKiBBZGQgUENJIHN1cHBvcnQgZm9yIHRoZSBUUU04MzR4IGJvYXJkLgotCi0qIEFkZCBtaXNzaW5nIDR4eCBib2FyZCB0byBNQUtFQUxMCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKLQotKiBGaXggY29uZmxpY3RpbmcgdHlwZXMgKGZsYXNoX3dyaXRlKCkpIGluIGVzZCBhdXRvX3VwZGF0ZS5jCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKLQotKiBGaXggcHJvYmxlbSB3aXRoIHNsZWVwIGluIE5ldENvbnNvbGUgKHVzZSBnZXRfdGltZXIoKSkKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQotCi0qIEFkZCBOZXRDb25zb2xlIFN1cHBvcnQgZm9yIEFNQ0MgZXZhbCBib2FyZHMKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQotCi0qIEZpeCBOZXRDb25zb2xlIHN1cHBvcnQgb24gNHh4IChvbmx5IHByaW50IGV0aCBsaW5rIG9uIDFzdCB0cmFuc2ZlcikKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBPY3QgMjAwNQotCi0qIEFkZCBmYXQgJiBleHQyIHN1cHBvcnQgdG8gQU1DQyA0NDBFUCBib2FyZHMgWW9zZW1pdGUgJiBCYW1ib28uCi0gIEZpeCBpZGVudGF0aW9uIG9uIGV4dDJscyBoZWxwIGVudHJ5LgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IE9jdCAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIFRRTTgzNHggYm9hcmRzLgotICBDbGVhbnVwLgotCi0qIENsZWFudXAgZm9yIEdDQy00LngKLQotKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgT3BlbiBGaXJtd2FyZSBGbGF0IFRyZWUgYW5kIHVzYWdlLgotICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTMgT2N0IDIwMDUKLQotKiBBZGQgbWlzc2luZyBmaWxlcyBmb3IgUGFudGVsaXMgQW50b25pb3UncyBwYXRjaAotICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKLQotKiBGaXggcHJvYmxlbSBpbiBwcGM0eHggZXRoLWRyaXZlciB3aXRob3V0IGV0aGFkZHIgKG9ubHkgd2l0aG91dAotICBDT05GSUdfTkVUX01VTFRJIHNldCkKLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBPY3QgMjAwNQotCi0qIEZpeCBnemlwIGJtcCBzdXBwb3J0ICh0ZXN0IGlmIG1hbGxvYyBmYWlscywgd2FybmluZyB3aGVuIHRydW5jYXRlZCkuCi0gIEluY3JlYXNlIENGR19WSURFT19MT0dPX01BWF9TSVpFIG9uIEhINDA1IGJvYXJkLgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE9jdCAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIE9GIGZsYXQgdHJlZSBmb3IgdGhlIFNUWHRjIGJvYXJkLgotICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKLQotKiBTdXBwb3J0IHBhc3Npbmcgb2YgT0YgZmxhdCB0cmVlcyB0byB0aGUga2VybmVsLgotICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKLQotKiBDbGVhbnVwCi0KLSogQWRkIHN1cHBvcnQgZm9yIE5ldFNpbGljb24gTlM3NTIwIHByb2Nlc3Nvci4KLSAgUGF0Y2ggYnkgQXJ0IFNoaXBrb3dza2ksIDEyIE1heSAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIEFQMTAwMCBib2FyZC4KLSAgUGF0Y2ggYnkgSmFtZXMgTWFjQXVsYXksIDA3IE9jdCAyMDA1Ci0KLSogRWxpbWluYXRlIGhhcmQtY29kZWQgYWRkcmVzcyBvZiBFdGhlcm5ldCB0cmFuc2ZlciBidWZmZXIgb24gYXQ5MXJtOTIwMAotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNyBPY3QgMjAwNQotCi0gIFRoZSBBdG1lbCBlcnJhdGEgIzExIHN0YXRlcyB0aGF0IHRoZSB0cmFuc2ZlciBidWZmZXIgZGVzY3JpcHRvcgotICB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSAxNi13b3JkIGJvdW5kYXJ5LiBBcyBpdCB0dXJuZWQgb3V0LCB0aGlzCi0gIGlzIGluc3VmZmljaWVudCAtIGl0IHNlZW1zIHRoZSB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSBib3VuZGFyeQotICBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgdGFibGUgaXRzZWxmIChpbiBMaW51eCB0aGlzIGlzIG5vdCBhbgotICBpc3N1ZSAtIHRoZSB0YWJsZSBpcyBhbGlnbmVkIG9uIGEgUEFHRV9TSVpFICg0MDk2KSBib3VuZGFyeSkuCi0KLSogRml4ZWQgY29tcGlsYXRpb24gZm9yIEFSTSB3aGVuIHVzaW5nIGEgKHN0YW5kYXJkKSBoYXJkLUZQIHRvb2xjaGFpbgotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNyBPY3QgMjAwNQotCi0qIENsZWFudXAgd2FybmluZ3MgZm9yIGNwdS9hcm03MjB0ICYgY3B1L2FybTExMzYgZmlsZXMuCi0gIHNlZCB0aGUgbGlua2VyIHNjcmlwdHMsIHJhdGhlciB0aGFuIHByZS1wcm9jZXNzIHRoZW0uCi0gIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDcgT2N0IDIwMDUKLQotKiBVcGRhdGUgbWFrZSB0YXJnZXQgZm9yIEFSTSBzdXBwb3J0ZWQgYm9hcmRzLgotICBVc2UgbG93bGV2ZWxfaW5pdCgpIGluc3RlYWQgb2YgcGxhdGZvcm1zZXR1cCgpIFtyZW5hbWVdLgotICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA2IE9jdCAyMDA1Ci0KLSogRml4IGJvb3RpbmcgZnJvbSBzZXJpYWwgZGF0YWZsYXNoIG9uIEFUOTFSTTkyMDAKLSAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAyOSBBdWcgMjAwNQotCi0qIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBUUkFCIGJvYXJkCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI1IEF1ZyAyMDA1Ci0KLSogUmVtb3ZlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgb2YgbmV0Y29uc29sZSBvbiBDT05GSUdfTkVUX01VTFRJCi0gIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyNCBBdWcgMjAwNQotCi0qIEZpeCB0aGUgbWFjaGluZS1pZCBvZiB0aGUgQ29nZW50IGNzYjYzNyBib2FyZAotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNSBPY3QgMjAwNQotCi0qIENvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBLd2lrQnl0ZSBLQjkyMHggYm9hcmRzCi0gIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA1IE9jdCAyMDA1Ci0KLSogU2V0IHRoZSBBVDkxUk05MjAwIGNsb2NrIHRvIGFzeW5jaHJvbm91cyBtb2RlCi0gIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDAzIE1heSAyMDA1Ci0KLSogU2V0IHRoZSBBVDkxUk05MjAwIGNsb2NrIHRvIHN5bmNocm9ub3VzIG1vZGUKLSAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKLQotKiBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IGNzYjYzNwotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQotCi0qIEZpeCBkbTkxNjEuYyBpbml0aWFsaXphdGlvbgotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQotCi0qIEZpeCBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAyIE1hciAyMDA1Ci0gICg4ZTJiZTUxZGU4ZGQwM2MxY2U0ZDA2Y2JiMThhZDA2MTMzZDQ3Y2Q1KQotCi0qIE1vdmUgZG05MTYxLmMgYW5kIGx4dDk3Mi5jIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAotICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQotCi0qIEZpeCBkZXZpY2UgcGFydGl0aW9uIGludGlhbGl6YXRpb24gZm9yIFN5c3RlbUFDRSBkaXNrcy4KLSAgUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMjggQXByIDIwMDUKLQotKiBBZGRlZCBzdXBwb3J0IGZvciBLd2lrQnl0ZSBLQjkyMHggYm9hcmRzIChiYXNlZCBvbiBBVDkxUk05MjAwKQotICBQYXRjaCBieSBNYXR0ID8/IDxrYjkyMDBfZGV2QGt3aWtieXRlLmNvbT4sIDI3IEFwciAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIFMyOUdMMDY0TS1SMyBmbGFzaCBjaGlwIG9uIHhzZW5naW5lIGJvYXJkCi0gIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAxOCBBcHIgMjAwNQotCi0qIEU1MDAgdXBkYXRlOiByZXBvaW50IElWUFIgdG8gUkFNIHdoZW4gY29kZSBpcyByZWxvY2F0ZWQKLSAgUGF0Y2ggYnkgS3lsbyBHaW5zYmVyZywgMTMgQXByIDIwMDUKLQotKiBGaXggbG9vcCBlbmQgdGVzdCBpbiBsaWJfZ2VuZXJpYy9zdHJpbmcuYzpzdHJzd2FiKCkKLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIE9jdG9iZXIgMTAsIDIwMDUKLSAgU2lnbmVkLW9mZi1ieTogQW5kcmV3IER5ZXIgPGFtZHllckBnbWFpbC5jb20+Ci0KLSogQ2xlYW51cAotCi0qIFVwZGF0ZSBBUk0gSW50ZWdyYXRvciBib2FyZHM6Ci0gIENvcnJlY3QgYWRkZXNzaW5nIGVycm9ycyBpbiBwbGF0Zm9ybSBmaWxlcy4KLSAgU3BsaXQgb2ZmIGNvbW1vbiBjb3JlIG1vZHVsZSBkYXRhIGZyb20gSW50ZWdyYXRvciBoZWFkZXIgZmlsZXMgdG8KLSAgaW5jbHVkZS9hcm1jb3JlbW9kdWxlLmguCi0gIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDQgT2N0IDIwMDUKLQotKiBNYWtlIHN1cmUgb25seSBzdXBwb3J0ZWQgY29tcGlsZXIgb3B0aW9ucyBhcmUgdXNlZAotICBJbXBvcnQgImNjLW9wdGlvbiIgc2hlbGwgZnVuY3Rpb24gZnJvbSBrZXJuZWwgYW5kCi0gIHVzZSBpdCB0byBnZXQgdGhlIGNvcnJlY3QgQVJNIEdDQyBvcHRpb25zIGZvciBpbmRpdmlkdWFsIENQVXMKLSAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAzMCBKdW4gMjAwNQotCi0qIEZpeCA0NDBHUiB0byBwcmludCBjb3JyZWN0IGNwdSByZXZpc2lvbgotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA0IE9jdCAyMDA1Ci0KLSogQ2hhbmdlIGJvYXJkIG1lc3NhZ2Ugb24gQU1DQyBZb3NlbWl0ZSAmIFllbGxvd3N0b25lIHRvIGNvbW1vbiBzdHlsZQotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE9jdCAyMDA1Ci0KLSogRml4IGNvbXBpbGVyIHdhcm5pbmcKLQotKiBGaXggRkVDIFBIWSBhZGRyZXNzZXMgZm9yIFRRTTg1eHggYm9hcmRzCi0KLSogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcHJvYmxlbSBpbiBodXNoIHNoZWxsCi0gIFBhdGNoIGJ5IExhcnMgUm9zdG9jaywgMjYgU2VwIDIwMDUKLQotKiBVbmRvIGNoYW5nZSBvZiBmNmUyMGZjNmNhLi4uIHRvIGluY2x1ZGUvY29uZmlncy90cmFiLmgKLSAgKE11c3QgaGF2ZSBiZWVuIGFuIGFjY2lkZW50PykKLQotKiBBZGQgc3VwcG9ydCBmb3IgQVQ5MVJNOTIwMCBPSENJIENvbnRyb2xsZXIuCi0gIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQotCi0qIFVwZGF0ZSBBUk0gbWFjaC10eXBlcy5oCi0gIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBNUDJVU0IgYm9hcmQuCi0gIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQotCi0qIEFkZCBib2FyZCBzdXBwb3J0IGZvciBhcm1hZGlsbG8gSFQxMDcwCi0gIFBhdGNoIGJ5IFJvd2VsIEF0aWVuemEsIDA2IEFwciAyMDA1Ci0KLSogU2Vjb25kIEV0aGVybmV0IGFkZHJlc3MgZW5hYmxlZCBmb3IgTVBDODg1QURTIGFuZCBNUEM4MjcyQURTLgotICBQYXRjaCBieSBWaXRhbHkgQm9yZHVnLCAzMCBNYXIgMjAwNQotCi0qIEFkZCBpb3BzZXQgY29tbWFuZCBvbiBtcGM4eHgKLSAgUGF0Y2ggYnkgRGFuaWVsIEVpc2VuaHV0LCAyNSBNYXIgMjAwNQotCi0qIEFkZCBzdXBwb3J0IGZvciBNSUkgaW4gZWVwcm8xMDAgZHJpdmVyLgotICBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDIxIE1hciAyMDA1Ci0KLSogRml4ZXMgdG8gdGhlIEx1YmJvY2sgKFBYQSAyNXgpIHN1cHBvcnQ6Ci0gIC0gUmVzb2x2ZSB0aGUgRklYTUUgd2l0aCByZXNwZWN0IHRvIHNhdmluZyB0aGUgdS1ib290IGVudmlyb25tZW50LgotICAtIE1ha2UgdGhlIGRlZmF1bHQgbG9hZCBhZGRyZXNzIGxhbmQgaW4gcmVhbCBtZW1vcnkuCi0gIC0gRml4IGxhbjkxYzk2IFNNQ197aW4sb3V0fXtiLHcsbH0oKSBtYWNyb3MKLSAgUGF0Y2ggYnkgRGF2aWQgQnJvd25lbGwsIDEwIE1hciAyMDA1Ci0KLSogQWRkIEJhcmNvIFN0cmVhbWluZyBWaWRlbyBDYXJkIChTVkMpIGFuZCBTYW1wbGUgQ29tcHJlc3MgTmV0d29yayAoU0NOKSBib2FyZAotICBQYXRjaCBieSBNYXJjIExlZW1hbiwgMDQgTWFyIDIwMDUKLQotKiBPTUFQMjQyeCBINCBib2FyZCB1cGRhdGUKLSAgLSBmaXggZm9yIEVTMiBkaWZmZXJlbmNlcy4KLSAgLSBzd2l0Y2ggdG8gdXNpbmcgdGhlIGNmaV9mbGFzaCBkcml2ZXIuCi0gIC0gZml4IFNSQU0gYnVpbGQgYWRkcmVzcy4KLSAgLSBmaXggZm9yIEdQIGRldmljZSBvcGVyYXRpb24uCi0gIC0gdW5sb2NrIFNSQU0gZm9yIEdQIGRldmljZXMuCi0gIC0gZGlzcGxheSBtb3JlIGRldmljZSBpbmZvcm1hdGlvbi4KLSAgLSBmaXggcG90ZW50aWFsIGRlYWRsb2NrIGluIG9tYXAyNHh4X2kyYyBkcml2ZXIuCi0gIC0gZml4IERMTCBsb2FkIHZhbHVlcyB0byBtYXRjaCBkcGxsb3V0KjEgb3BlcmF0aW9uLgotICAtIGZpeCAybmQgY2hpcCBzZWxlY3QgaW5pdCBmb3IgY29tYm8gRERSIGRldmljZS4KLSAgLSBhZGQgc3VwcG9ydCBmb3IgQ0ZJIEludGVsIDI4RjI1NkwxOCBvbiBINCBib2FyZC4KLSAgUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMDMgTWFyIDIwMDUKLQotKiBGaXggZm9ybWF0aW5nIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvQVQ5MVJNOTIwMC5oCi0gIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAyIE1hciAyMDA1Ci0KLSogRml4IHR5cG8gaW4gZXRoLmMKLSAgUGF0Y2ggYnkgQXJhIEF2YW5lc3lhbiwgMjQgRmViIDIwMDUKLQotKiBSZW1vdmUgdW5uZWVkZWQgI2luY2x1ZGUgPG1hbGxvYy5oPgotICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjIgRmViIDIwMDUKLQotKiBBZGQgY3JhbWZzIHN1cHBvcnQgZm9yIG02OGsKLSAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDIxIEZlYiAyMDA1Ci0KLSogVXBkYXRlIGVwODI2MDogRml4IGZsYXNoIHRpbWVvdXRzOyBpbXByb3ZlIGNsb2NrIHJlc29sdXRpb24gZm9yIGZhc3RlciBVQVJUcwotICBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMjEgRmViIDIwMDUKLQotKiBGaXggYXUxeDAwX3NlcmlhbCBiYXVkIHJhdGUgY2FsY3VsYXRpb246Ci0gIHJlbW92ZSBoYXJkY29kZWQgY3B1IGNsb2NrIGRpdmlzb3IgYW5kIHVzZSByZWdpc3RlciBpbnN0ZWFkOwotICByb3VuZCB1cCBpbnN0ZWFkIG9mIHRydW5jYXRlCi0gIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxNSBGZWIgMjAwNQotCi0qIEFkZCBYaWxpbnggU3BhcnRhbjMgZmFtaWx5IEZQR0Egc3VwcG9ydAotICBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMTQgRmViIDIwMDUKLQotKiBGaXggZHJpdmVycy9jZmlfZmxhc2guYzogdXNlIGluZm8tPnJlc2V0X2NtZCBpbnN0ZWFkIG9mIEZMQVNIX0NNRF9SRVNFVAotICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMTEgRmViIDIwMDUKLQotKiBGaXggVk9INDA1IFN1cHBvcnQKLSAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI1IFNlcCAyMDA1Ci0KLSogQWRkZWQgc3VwcG9ydCBmb3IgUENJIGJyaWRnZSBvbiBNUEM4MjcyQURTCi0gIFBhdGNoIGJ5IFZpdGFseSBCb3JkdWcsIEZlYiAwOSAyMDA1Ci0KLSogVXBkYXRlIG11bHRpY29yZSBDTTlYWCBzdXBwb3J0IGZvciBJbnRlZ3JhdG9yIEFQIHRvIGFsbG93IGJvb3RpbmcgZnJvbSBmbGFzaAotICBQYXRjaCBieSBKZWFuLVBhdWwgU2FtYW4sIDggRmViIDIwMDUKLQotKiBGaXggc3Ryc3dhYigpIHRvIHJlbGlhYmx5IGZpbmQgZW5kIG9mIHN0cmluZwotICBQYXRjaCBieSBBbmRyZXcgRHllciwgMDggRmViIDIwMDUKLQotKiBGaXggdHlwb3MgaW4gaW5jbHVkZS9wcGM0NDAuaAotICBQYXRjaCBieSBBbmRyZXcgRSBNaWxlc2tpLCAwNCBGZWIgMjAwNQotCi0qIEFkZCBWaWJyZW4gKHdhcyBBY2NlbGVudCkgUFhBMjU1IElEUCBTdXBwb3J0Ci0gIFBhdGNoIGJ5IENsaWZmIEJyYWtlLCAwNCBGZWIgMjAwNQotCi0qIEZpeCB0b29scy9ibXBfbG9nby5jIHVzaW5nIGluY29ycmVjdCBvZmZzZXQgdG8gcGl4ZWwgZGF0YQotICBQYXRjaCBieSBBbmRyZXcgRHllciwgMzEgSmFuIDIwMDUKLQotKiBBZGQgQVJNOTQ2RSBjcHUgYW5kIGNvcmUgbW9kdWxlIHRhcmdldHM7IHJlbWFwIG1lbW9yeSB0byAweDAwMDAwMDAwCi0gIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMiBGZWIgMjAwNQotCi0qIEZpeCBlcnJvciBoYW5kbGluZyBpbiB0b29scy9lbnYvZndfZW52LmMKLSAgUGF0Y2ggYnkgQXJhIEF2YW5lc3lhbiwgMDEgRmViIDIwMDUKLQotKiBGaXggTUdUNTEwMCBQU0MgYmF1ZHJhdGUgY2FsY3VsYXRpb24KLSAgUGF0Y2ggYnkgU2ViYXN0aWFuIFNjaGF1LCAyNyBKYW4gMjAwNQotCi0qIE9NQVAyNDJ4IGZpeCBmb3IgR1AgZGV2aWNlIGJvb3RpbmcKLSAgLSBBZGQgU1JBTSB1bmxvY2sgZm9yIEdQIGRldmljZXMuCi0gIC0gQ2hhbmdlIEREUiBETEwgdW5sb2NrIHZhbHVlIHRvIGFsbG93IERQTExvdXQqMSBvcGVyYXRpb24uCi0gIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMjEgSmFuIDIwMDU6Ci0KLSogQWRkIHN1cHBvcnQgZm9yIEFNRCdzIFBiMXgwMCBldmFsIGJvYXJkOwotICBhZGQgTUlJIHJvdXRpbmVzIHRvIHRoZSBhdTF4MDAgZXRoZXJuZXQgZHJpdmVyOwotICBhZGQgVVNCIG9oY2kgZHJpdmVyICh3b3JrIGluIHByb2dyZXNzKQotICBQYXRjaCBieSBUaG9tYXMgU2FpbGVyLCAyMCBKYW4gMjAwNQotCi0qIFVwZGF0ZSBvbWFwNTkxMm9zayBib2FyZAotICBVc2UgZHJpdmVycy9jZmlfZmxhc2guYyBpbnN0ZWFkIG9mIHByaXZhdGUgZmxhc2ggZHJpdmVyOwotICBSZW1vdmUgaGFyZGNvZGVkIHBlcnNvbmFsaXplZCBzZXR0aW5ncyBmcm9tIG9tYXA1OTEyb3NrLmg7Ci0gIEZpeCBzcGFjaW5nIHdpdGggKFJPKSBtYXJrcyBpbiAnZmxpbmZvJyBvdXRwdXQuCi0gIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDE0IEphbiAyMDA1Ci0KLSogRml4IHdhcm5pbmdzIGZvciBQQ0kgY29kZSBvbiBpeHAKLSAgUGF0Y2ggYnkgSm9lIDxsZ3h1ZUB5YWhvby5jb20+LCAxMyBKYW4gMjAwNQotCi0qIHZpcnRleDIgZml4IGZvciBib2d1cyBkb3dubG9hZCBlcnJvciBtZXNzYWdlcwotICBUaGUgdmlydGV4MiBGUEdBIGRvd25sb2FkIGNvZGUgd2F0Y2hlcyBmb3IgaW5pdCBnb2luZyBhY3RpdmUgZHVyaW5nCi0gIGEgZG93bmxvYWQgb2YgY29uZmlnIGRhdGEgYXMgYW4gZXJyb3IgY29uZGl0aW9uLiBpbml0IGFsc28gZ29lcwotICBhY3RpdmUgYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGlzIGZpbmlzaGVkIGluIGNvbmNlcnQgd2l0aCB0aGUgZG9uZQotICBzaWduYWwuIFNvIGZhciwgdGhlIGNvZGUgZG9lcyBub3QgY2hlY2sgZm9yIGRvbmUgYWN0aXZlIHVudGlsIGFsbAotICBvZiB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIHNlbnQuIElmIGNvbmZpZ3VyYXRpb24gZGF0YSBoYXMgYSBmZXcKLSAgZXh0cmEgcGFkIGJ5dGVzIGF0IHRoZSBlbmQsIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3IgbWVzc2FnZSBldmVuCi0gIHRob3VnaCB0aGUgZG93bmxvYWQgaGFkIHN1Y2VlZGVkLgotICBOT1RFOiB2aXJ0ZXgyIHNsYXZlIHNlcmlhbCBhbmQgc3BhcnRhbjIgdmVyc2lvbnMgbWF5IHN0aWxsIGhhdmUgdGhlCi0gIHNhbWUgcHJvYmxlbS4KLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDEyIEphbiAyMDA1Ci0KLSogT3B0aW1pemUgZmxhc2hfbWFrZV9jbWQgaW4gZHJpdmVycy9jZmlfZmxhc2guYyBmb3IgbGl0dGxlIGVuZGlhbgotICBGaXggIldBUk5JTkc6IGZsYXNoX21ha2VfY21kOiB1bnN1cHBwb3J0ZWQgTGl0dGxlRW5kaWFuIG1vZGUiCi0gIG1lc3NhZ2Ugd2hlbiBwcm9iaW5nIGZvciBub25leGlzdGVudCBmbGFzaCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuCi0gIEFzIGEgc2lkZSBlZmZlY3QgbW9yZSBlZmZpY2llbnQgYW5kIHNtYWxsZXIgY29kZSBpcyBnZW5lcmF0ZWQsCi0gIHdoaWNoIGlzIGFsd2F5cyBhIEdvb2QgVGhpbmcgKFRNKS4KLSAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDI0IFNlcCAyMDA1Ci0KLSogVXBkYXRlIGZvciBURlRQIHVzaW5nIGEgZml4ZWQgVURQIHBvcnQKLSAgVXNlIHRoZSBhcHByb3ZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy4gQWRkZWQgInRmdHBkc3RwIiB0bwotICBhbGxvdyBwb3J0cyBvdGhlciB0aGFuIDY5IHBlciBUb2x1bmF5IE9ya3VuJ3MgcmVjb21tZW5kYXRpb24uCi0gIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMTIgSmFuIDIwMDUKLQotKiBBbGxvdyB0byBmb3JjZSBURlRQIHRvIHVzZSBhIGZpeGVkIFVEUCBwb3J0Ci0gIChBZGQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBDT05GSUdfVEZUUF9QT1JUIGFuZCBvcHRpb25hbCBlbnYKLSAgdmFyaWFibGUgdGZ0cHBvcnQpCi0gIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMTAgSmFuIDIwMDUKLQotKiBGaXggZXRoZXJuZXQgdGltZW91dHMgb24gZGJhdTE1NTAgYW5kIG90aGVyIGF1MXgwMCBzeXN0ZW1zCi0gIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDI5IERlYyAyMDA0Ci0KLSogQ2xlYW51cDogZml4IGJyb2tlbiBidWlsZHMKLQotKiBGaXggUEhZIGFkZHJlc3MgYXJndW1lbnQgcGFzc2luZyB3aXRoIG1paSBpbmZvIGNvbW1hbmQKLSAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IERlYyAyMDA0Ci0KLSogQ2xlYW51cCAoUFBDNHh4IGlzIEFNQ0Mgbm93KQotCi0qIGVzZCBDUENJMkRQIGJvYXJkIGFkZGVkCi0gIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMiBTZXAgMjAwNQotCi0qIGVzZCBQTUM0MDUgYm9hcmQgdXBkYXRlZAotICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjIgU2VwIDIwMDUKLQotKiBBZGQgU001MDEgc3VwcG9ydCB0byBISDQwNSBib2FyZC4KLSAgQWRkIHN1cHBvcnQgZm9yIGd6aXAgY29tcHJlc3NlZCBibXAncyAoQ09ORklHX1ZJREVPX0JNUF9HWklQKS4KLSAgQWRkIHN1cHBvcnQgZm9yIGVlcHJvbSB3cml0ZS1lbmFibGUgKENGR19FRVBST01fV1JFTikuCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjIgU2VwIDIwMDUKLQotKiBGaXggYXV0b25lZ290aWF0aW9uIGluIHRzZWMgZXRoZXJuZXQgZHJpdmVyCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjEgU2VwIDIwMDUKLQotKiBGaXggYnVnIGluIGF1dG9fdXBkYXRlICh0cmFiIGJvYXJkKQotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNiBTZXAgMjAwNQotCi0qIEZpeCBjb21wdXRhdGlvbiBvZiBmcmFtZWJ1ZmZlciBwYWxldHRlIGZvciA4YnBwIExDRCBiaXRtYXBzCi0gIFBhdGNoIGJ5IEZyYW5jZXNjbyBNYW5kcmFjY2ksIDE2IFNlcCAyMDA1Ci0KLSogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIElOS0E0eDAgYm9hcmQKLQotKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUE04NTQgYm9hcmQKLSAgQmFzZWQgb24gcGF0Y2ggYnkgUi4gTG9lZmZsLCAyMCBKdWwgMjAwNQotCi0qIEFkZCBQQ0kgc3VwcG9ydCB0byBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcwotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1Ci0KLSogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAotICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBTZXAgMjAwNQotCi0qIEZpeCBwcm9ibGVtIGluIDQ0MEdQIGV0aGVybmV0IGRyaXZlciAoZWJvbnkpLiBBZGQgc3VwcG9ydCBmb3IgMm5kCi0gIGV0aGVybmV0IHBvcnQgb24gZWJvbnkuCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNyBTZXAgMjAwNQotCi0qIEFkZGVkIHN1cHBvcnQgZm9yIG10ZGRldm51bSBhbmQgbXRkZGV2bmFtZSB2YXJpYWJsZXMgKG10ZHBhcnRzIGNvbW1hbmQpCi0KLSogQ2hhbmdlIGRlZmF1bHQgY29uc29sZSBiYXVkIHJhdGUgZm9yIHN0eHh0YyBib2FyZAotCi0qIEFkZCBJMkMgc3VwcG9ydCB0byBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcyAoRUVQUk9NLCBSVEMsIExNNzUtRFRUKS4KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMSBBdWcgMjAwNQotCi0qIEZpeCBkZWZhdWx0IGNvbW1hbmQgc2V0IChkb24ndCBpbmNsdWRlIENGR19DTURfRElTUExBWSBjb21tYW5kKQotICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgU2VwIDIwMDUKLQotKiBDbGVhbnVwCi0KLSogRW5hYmxlIFNNNzEyIGRyaXZlciBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgotCi0qIEZpeCBwcm9ibGVtcyB3aXRoIGxkIHZlcnNpb24gMi4xNiAoZG90IG91dHNpZGUgc2VjdGlvbnMgcHJvYmxlbSkKLSAgUG9pbnRlZCBvdXQgYnkgR2VyaGFyZCBKYWVnZXIsIDMxIEF1ZyAyMDA1OwotICBjZi4gaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMDUtMDgvbXNnMDA0MTIuaHRtbAotCi0qIFByZXBhcmUgVS1Cb290IGZvciBnY2MtNC54OiBmaXggZ2xvYmFsIGRhdGEgcG9pbnRlciBpbml0aWFsaXphdGlvbgotCi0qIEFkanVzdCBDUzMgdGltaW5ncyBvbiBITUkxMDAxIGJvYXJkIGZvciBkb3QgbWF0cml4IGRpc3BsYXkgdW5kZXIgTGludXgKLQotKiBBZGQga2V5Ym9hcmQgYW5kIGRvdCBtYXRyaXggZGlzcGxheSBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgotCi0qIFByZXBhcmUgVS1Cb290IGZvciBnY2MtNC54Ci0KLSogRml4ZWQgQmFtYm9vIHBvcnQgdG8gZW5hYmxlIHJ1bm5pbmcgd2l0aG91dCBERFItRElNTQotICAoQmFtYm9vIGhhcyBhbHNvIDY0TUIgb25ib2FyZCBERFIpCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgQXVnIDIwMDUKLQotKiBNZXJnZWQgNDA1Z3BfZW5ldC5jIGFuZCA0NDBneF9lbmV0LmMgdG8gZ2VuZXJpYyA0eHhfZW5ldC5jCi0gIG5vdyBoYW5kbGluZyBhbGwgNHh4IGNwdSdzCi0gIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgQXVnIDIwMDUKLQotKiBGaXggbWFrZSBkZXBlbmRlbmNpZXMgZm9yIGF0OTFybTkyMDAgYW5kIGtzODY5NSBjcHVzCi0gIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEF1ZyAyMDA1Ci0KLSogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKLQotKiBBZGQgZXNkIGNwY2k1MjAwIGFuZCBwZjUyMDAgYm9hcmRzCi0gIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDIyIEF1ZyAyMDA1Ci0KLSogRml4IHN5c2Nsb2NrIGZvciBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcwotICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNSBKdWwgMjAwNQotCi0qIEluaXRpYWxpemUgc2VyaWFsIyBhbmQgZXRoYWRkciBmcm9tIG1hbnVmYWN0dXJlciBkYXRhIGluIEVFUFJPTSBvbiBDTUMtUFUyCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IEp1biAyMDA1Ci0KLSogQWRkIG5ldyBib2FyZCBzcGVjaWZpYyBjb21tYW5kcyBmb3IgVFFNNTIwMC9TVEs1MlhYCi0gIC0gU291bmQgY29tbWFuZHMgKGJlZXAsIHdhdiwgc291bmQpCi0gIC0gVGVzdCBjb21tYW5kcyAobGVkLCBjYW4sIGJhY2tsaWdodCwgcnMyMzIpCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDAyIE1heSAyMDA1Ci0KLSogQ2hhbmdlIG1haW4gY2xvY2sgb24gQ01DLVBVMiBib2FyZCBmcm9tIDIwNyBNSHogdG8gMTc5IE1IegotICBiZWNhdXNlIG9mIGEgYnVnIGluIHRoZSBBVDkxUk05MjAwIENQVSBQTEwKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjIgQXByIDIwMDUKLQotKiBBZGQgYXV0b21hdGljIEhXIGRldGVjdGlvbiBmb3IgYW5vdGhlciBDTUNfUFUyIHZhcmlhbnQKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjAgQXByIDIwMDUKLQotKiBSZW1vdmUgQ09ORklHX0FUOTFSTTkyMDBESyBpbiBDTUMtUFUyIGNvbmZpZ3VyYXRpb24KLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTkgQXByIDIwMDUKLQotKiBGaXggaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBvbiBUUU01MjAwIHdpdGhvdXQgU001MDEKLSAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDggQXByIDIwMDUKLQotKiBBZGQgUlRDIHN1cHBvcnQgZm9yIFNUSzUyWFguMjAwCi0gIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEFwciAyMDA1Ci0KLSogQWRkIHN1cHBvcnQgZm9yIElGTSBvMmRudCBib2FyZAotCi0qIEVuYWJsZSBQQ0kgb24gaG1pMTAwMSBib2FyZAotCi0qIEZpeCByZXR1cm4gdmFsdWVzIG9mIHRoZSBqZmZzMiBjb21tYW5kcyBscy9mc2xvYWQvZnNpbmZvLAotICBzbyB3ZSBjYW4gdXNlIHRoZW0gdG8sIGUuZy4sIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBmaWxlIHdpdGgKLSAgImlmIGxzIGZvbzsgdGhlbiB0aGlzOyBlbHNlIHRoYXQ7IGZpIiBpbiB0aGUgaHVzaCBzaGVsbAotICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxNiBBdWd1c3QgMjAwNQotCi0qIENvZGluZyBzdHlsZSBjbGVhbnVwCi0KLSogQWRkIHN1cHBvcnQgZm9yIFNpbGljb24gVHVybmtleSBlWHByZXNzIFhUYyAobXBjODd4Lzg4eCkgYm9hcmQuCi0gIFBhdGNoIGJ5IERhbiBNYWxlayBhbmQgUGFudGVsaXMgQW50b25pb3UsIDE1IEF1ZyAyMDA1Ci0KLSogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIG1hbGxvYyBpbiA0NDBneF9lbmV0LmMKLSAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTggSnVsIDIwMDUKLQotKiBBZGQgU2FuZGJ1cnN0IE1ldHJvYm94IGFuZCBTYW5kYnVyc3QgS2FyZWYgYm9hcmQgc3VwcG9ydCBwYWNrYWdlcy4KLSAgU2Vjb25kIHNlcmlhbCBwb3J0IG9uIDQ0MEdYIG5vdyBkZWZpbmVkIGFzIGEgc3lzdGVtIGRldmljZS4KLSAgQWRkICdTaG9ydCBFdGNoJyBjb2RlIGZvciBDaWNhZGEgUEhZIHdpdGhpbiA0NDBneF9lbmV0LmMKLSAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTIgSnVsIDIwMDUKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4zOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIE1pbm9yIGNvZGUgY2xlYW51cAotCi0qIEFkZCBmb3Jnb3R0ZW4gbmV3IGZpbHMgZnJvbSBsYXRlc3QgVm9pY2VCbHVlIHVwZGF0ZQotCi0qIE1ha2UgYm9vdHJldHJ5IGZlYXR1cmUgd29yayB3aXRoIGh1c2ggc2hlbGwuCi0gIENhdmVhdDogdGhpcyBjdXJyZW50bHkgKnJlcXVpcmVzKiBDT05GSUdfUkVTRVRfVE9fUkVUUlkgdG8gYmUgc2V0LCB0b28uCi0gIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDE5IEp1bCAyMDA1Ci0KLSogVXBkYXRlIEh5bW9kIEJvYXJkIERhdGFiYXNlIFBIUCBjb2RlIGluICJ0b29scyIgZGlyZWN0b3J5Ci0gIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDAxIEp1bCAyMDA1Ci0KLSogTWFrZSAidHIiIGNvbW1hbmQgdXNlIFBPU0lYIGNvbXBsaWFudDsgZXhwb3J0IEhPU1RPUyBtYWtlIHZhcmlhYmxlCi0gIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1Ci0KLSogRml4IE11cnJheSBKZW5zZW4ncyBtYWlsIGFkZHJlc3MuCi0gIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1Ci0KLSogUHJlc2VydmUgUEhZX0JNQ1IgZHVyaW5nIGEgc29mdCByZXNldC4KLSAgUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMjQgSnVuIDIwMDUKLQotKiBWb2ljZUJsdWUgdXBkYXRlOiBlZXByb20gdG9vbCBjYW4gYWxzbyBzdG9yZSBmaXJtd2FyZSB2ZXJzaW9uIG5vdy4KLSAgZWVwcm9tLmJpbiBpcyBydW5hYmxlIGJ5IGp1bXBpbmcgYXQgbG9hZCBhZGRyZXNzLgotICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjMgTWF5IDIwMDUKLQotKiBNb3ZlIHRoZSBBVDkxUk05MjAwREsgdG8gdGhlIEFSTSBTeXN0ZW1zIGxpc3QuCi0gIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI2IEFwciAyMDA1Ci0KLSogRWxpbWluYXRlIGNhbGxzIG9mIEFSTSBsaWJnY2MuYSBoZWxwZXIgZnVuY3Rpb25zIF9kaXZzaTMgYW5kIF9tb2RzaTMKLSAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjYgQXByIDIwMDUKLQotKiBtZWFzdXJlX2djbGsoKSBpcyBuZWVkZWQgd2hlbiBERUJVRyBpcyBlbmFibGVkCi0gIFBhdGNoIGJ5IEJyeWFuIE8nRG9ub2dodWUsIDI1IEFwciAyMDA1Ci0KLSogQWRkIFVQRC1DaGVja3N1bSBjb2RlLCBmaXggcHJvYmxlbSBpbiBuZXQuYyAocmV0dXJuIGluc3RlYWQgb2YgYnJlYWspCi0gIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDEyIEF1ZyAyMDA1Ci0KLSogZXNkIFBDSTQwNSBib2FyZCB1cGRhdGVkCi0gIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBKdWwgMjAwNQotCi0qIGVzZCBXVUg0MDUgYW5kIERVNDA1IGJvYXJkIHVwZGF0ZWQKLSAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI3IEp1bCAyMDA1Ci0KLSogRml4IHByb2JsZW0gaW4gY21kX25hbmQuYyAob25seSB3aGVuIGRlZmluZWQgQ0ZHX05BTkRfU0tJUF9CQURfRE9UX0kpCi0gIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCA0IE1heSAyMDA1Ci0KLSogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAotICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQotCi0qIENoYW5nZWQgQU1DQyBCdWJpbmdhICg0MDVFUCkgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IDJuZCBldGggcG9ydAotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1Ci0KLSogQWRkIE5BTkQgRkxBU0ggc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28gNDQwRVAgZXZhbCBib2FyZAotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1Ci0KLSogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIElGTSBBRVYgRklGTyBib2FyZC4KLSAgTWlub3IgY29kaW5nIHN0eWxlIGNsZWFudXAuCi0KLSogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIElGTSBTUEkgZXZhbCBib2FyZAotCi0qIEZpeCBDb21wYWN0Rmxhc2ggcHJvYmxlbSBvbiBITUkxMDAxIGJvYXJkCi0KLSogTWFrZSBuZXcgIm10ZHBhcnRzIiBjb2RlIGJ1aWxkIHdpdGggb2xkZXIgY29tcGlsZXJzCi0gIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMDkgQXVnIDIwMDUKLQotKiBDaGFuZ2VkIENPTkZJR180NDBfR1gsIENPTkZJR180NDBfRVAgYW5kIENPTkZJR180NDBfR1Igb3B0aW9ucyB0bwotICBDT05GSUdfNDRHWCwgQ09ORklHXzQ0MEVQIGFuZCBDT05GSUdfNDQwR1IgZm9yIGEgY29uc2lzdGVudCBkZXNpZ24KLSAgd2l0aCB0aGUgNDA1IGRlZmluZXMgYW5kIHRoZSBsaW51eCBrZXJuZWwgZGVmaW5lcy4KLSAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwOCBBdWcgMjAwNQotCi0qIEZpeCBjb21waWxlciB3YXJuaW5ncyB3aXRoIG9sZGVyIEdDQyB2ZXJzaW9ucwotCi0qIEFkZCBjb21tb24gKHdpdGggTGludXgpIE1URCBwYXJ0aXRpb24gc2NoZW1lIGFuZCAibXRkcGFydHMiIGNvbW1hbmQKLQotICBPbGQsIG9ic29sZXRlIGFuZCBkdXBsaWNhdGVkIGNvZGUgd2FzIGNsZWFuZWQgdXAgYW5kIHJlcGxhY2UgYnkgdGhlCi0gIG5ldyBwYXJ0aXRpb25pbmcgbWV0aG9kLiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGFwcHJvYWNoZXMgbm93OgotCi0gIFRoZSBmaXJzdCBvbmUgaXMgdG8gZGVmaW5lIGEgc2luZ2xlLCBzdGF0aWMgcGFydGl0aW9uOgotCi0gICN1bmRlZiBDT05GSUdfSkZGUzJfQ01ETElORQotICAjZGVmaW5lIENPTkZJR19KRkZTMl9ERVYJCSAibm9yMCIKLSAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweEZGRkZGRkZGCS8qIHVzZSB3aG9sZSBkZXZpY2UgKi8KLSAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweDAwMTAwMDAwCS8qIHVzZSAxTUIgKi8KLSAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQJIDB4MDAwMDAwMDAKLQotICBUaGUgc2Vjb25kIG1ldGhvZCB1c2VzIHRoZSBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBkeW5hbWljCi0gIHBhcnRpdGlvbmluZzoKLQotICAvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLwotICAjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCi0gICNkZWZpbmUgTVRESURTX0RFRkFVTFQJICJub3IxPXp1bWEtMSxub3IyPXp1bWEtMiIKLSAgI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSAibXRkcGFydHM9enVtYS0xOi0oamZmczIpLHp1bWEtMjotKHVzZXIpIgotCi0gIENvbW1hbmQgbGluZSBvZiBjb3Vyc2UgcHJvZHVjZXMgYmlnZ2VyIGltYWdlcywgYW5kIG1heSBiZSBpbmFwcHJvcHJpYXRlCi0gIGZvciBzb21lIHRhcmdldHMsIHNvIGJ5IGRlZmF1bHQgaXQncyBvZmYuCi0KLSogRml4IGJ1aWxkIHByb2JsZW1zIGZvciBQTTg1NiBCb2FyZAotCi0qIEZpeCBzaWduIGV4dGVuc2lvbiBidWcgaW4gJ2ZwZ2EgbG9hZGInIGNvbW1hbmQ7Ci0gIG1ha2UgJ2ZwZ2EgbG9hZGInIGFsd2F5cyBwcmludCB0aGUgZmlsZSBoZWFkZXIgaW5mbwotICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTEgSmFuIDIwMDUKLQotKiBGaXggZXJyb3JzIHRoYXQgb2NjdXIgd2hlbiBhY2Nlc3NpbmcgU3lzdGVtQUNFIENGCi0gIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwOSBKYW4gMjAwNQotCi0qIERvY3VtZW50IHN3aXRjaGluZyBiZXR3ZWVuIFUtQm9vdCBhbmQgUGxhbmV0Q29yZSBvbiBSUFhsaXRlCi0gIGJ5IFNhbSBTb25nLCAyNCBEZWMgMjAwNAotCi0qIEZpeCBQb3dlclFVSUNDIElJIG1hc2sgZGV0ZWN0aW9uLgotICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAyMCBEZWMgMjAwNAotCi0qIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBESzFDMjAgYm9hcmQKLSAgUGF0Y2ggYnkgU2hsb21vIEt1dCwgMTMgRGVjIDIwMDQKLQotKiBBZGQgc3VwcG9ydCBmb3IgZXA4MjQ4IGJvYXJkCi0gIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEyIERlYyAyMDA0Ci0KLSAgTWlub3IgY29kZSBjbGVhbnVwLgotCi0qIEZpeCBiYXVkcmF0ZSBzZXR0aW5nIGZvciBLR0RCIG9uIE1QQzgyNjAKLSAgUGF0Y2ggYnkgSG9KaW4sIDExIERlYyAyMDA0Ci0KLSogRml4ICdtaWkgaGVscCcgdGV4dCBmb3JtYXR0aW5nCi0gIFBhdGNoIGJ5IENvcnkgVHVzYXIsIDEwIERlYyAyMDA0Ci0KLSogRml4IHJldHVybiBjb2RlIG9mIE5GUyBjb21tYW5kCi0gIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAxMSBEZWMgMjAwNAotCi0qIEZpeCB0eXBvCi0KLSogRml4IGNvbXBpbGVyIHdhcm5pbmdzIGluIGNwdS9wcGM0eHgvdXNiZGV2LmMKLSAgUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMDQgQXVnIDIwMDUKLQotKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28gUFBDNDQwRVAgZXZhbCBib2FyZAotICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA0IEF1ZyAyMDA1Ci0KLSogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyCi0gIEZpeCBzdHlsZSBpc3N1ZXMgcHJpbWFyaWx5IGluIDg1eHggYW5kIDgzeHggYm9hcmRzLgotICAgIC0gQysrIGNvbW1lbnRzCi0gICAgLSBUcmFpbGluZyB3aGl0ZSBzcGFjZQotICAgIC0gSW5kZW50YXRpb24gbm90IGJ5IFRBQgotICAgIC0gRXhjZXNzaXZlIGFtb3VudCBvZiBlbXB0eSBsaW5lcwotICAgIC0gVHJhaWxpbmcgZW1wdHkgbGluZXMKLQotKiBQYXRjaCBieSBSb24gQWxkZXIsIDExIEp1bCAyMDA1Ci0gICAgQWRkIFhpYW5naHVhIFhpYW8gYW5kIEx1bnNoZW5nIFdhbmcncyBzdXBwb3J0IGZvciB0aGUKLSAgICBHREEgTVBDODU0MCBFVkFMIGJvYXJkLgotCi0qIFBhdGNoIGJ5IEVyYW4gTGliZXJ0eQotICBBZGQgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4MzQ5QURTIGJvYXJkLgotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMjUgSnVsIDIwMDUKLSAgTW92ZSB0aGUgVFNFQyBkcml2ZXIgb3V0IG9mIGNwdS9tcGM4NXh4IGFzIGl0IHdpbGwgYmUgc2hhcmVkCi0gIGJ5IHRoZSB1cGNvbWluZyBtcGM4M3h4IGZhbWlseSBhcyB3ZWxsLgotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDUgTWF5IDIwMDUKLSAgSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgTVBDODU0OENEUyBib2FyZC4KLSAgQWRkZWQgRERSIElJIHN1cHBvcnQgYmFzZWQgb24gU1BEIHZhbHVlcyBmb3IgTVBDODV4eCBib2FyZHMuCi0gIFRoaXMgcm9sbC11cCBwYXRjaCBhbHNvIGluY2x1ZGVzIGJ1Z2ZpZXMgZm9yIHRoZSBwcmV2aW91c2x5Ci0gIHB1Ymxpc2hlZCBwYXRjaGVzOgotICAgIEREUklJIENQTywgcHJlIGVUU0VDLCA4NTQ4IExCSVUsIEFuZHkncyBUU0VDLCBlVFNFQyAzJjQgSS9PCi0KLSogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxMCBGZWIgMjAwNQotICBBZGQgY29uZmlnIG9wdGlvbiBDT05GSUdfSEFTX0ZFQyBjYWxsaW5nIG91dCA4NTQwIEZFQyBmZWF0dXJlcy4KLQotKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIEt1bWFyIEdhbGEsIDA4IEZlYiAyMDA1Ci0gIEZvciBNUEM4NXh4Q0RTOgotICAgIEFkZHMgUmVsYXhlZCBUaW1pbmcgVFJMWCBiaXQgdG8gRkxBU0ggT1J4IHJlZ3MgdG8gYWxsb3cKLSAgICBmb3IgZmFzdGVyIGZsYXNoIHBhcnRzLgotICAgIEFkZCBkb2N1bWVudGF0aW9uIGZvciBCUi9PUiBmb3IgRkxBU0guCi0KLSogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyIDA4IEZlYiAyMDA1Ci0gIERldGVybWluZSBMMiBDYWNoZSBzaXplIGR5bmFtaWNhbGx5IG9uIDg1WFggYm9hcmRzLgotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSAwOCBGZWIgMjAwNQotICAtIENvbnZlcnQgdGhlIENQTTIgYmFzZWQgZnVuY3Rpb25hbGl0eSB0byB1c2UgbmV3IENPTkZJR19DUE0yCi0gICAgb3B0aW9uIHJhdGhlciB0aGFuIGEgbXlyaWFkIG9mIENPTkZJR19NUEM4NTYwLWxpa2UgdmFyaWFudHMuCi0gICAgQXBwbGllcyB0byBNUEM4NXh4IGFuZCBNUEM4MjYwIGJvYXJkcywgaW5jbHVkZXMgc3R4Z3AzIGFuZCBzYmM4NTYwLgotICAgIEVsaW1pbmF0ZXMgdGhlIENPTkZJR19NUEM4NTYwIG9wdGlvbiBlbnRpcmVseS4gIERpc3RyaWJ1dGVzIHRoZQotICAgIG5ldyBDT05GSUdfQ1BNMiBvcHRpb24gdG8gZWFjaCA4MjYwIGJvYXJkLgotCi0qIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTg1NiBib2FyZAotICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDAzIEF1ZyAyMDA1Ci0KLSogTWlub3IgZml4ZXMgdG8gUE04NTQgYm9hcmQKLSAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwMyBBdWcgMjAwNQotCi0qIEFkanVzdCBjb25maWd1cmF0aW9uIG9mIFhFTklBWCBib2FyZAotICAoY2hpcCBzZWxlY3QgYW5kIEdQSU8gcmVxdWlyZWQgZm9yIFVTQiBvcGVyYXRpb24pCi0KLSogRml4IHR5cG9zIGluIGNwdS84NXh4L3N0YXJ0LlMgd2hpY2ggY2F1c2VkIERhdGFUTEIgZXhjZXB0aW9uIHRvIGJlCi0gIHJvdXRlZCB0byB0aGUgV2F0Y2hkb2cgaGFuZGxlcgotICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAxOCBKdW4gMjAwNQotCi0qIChyZSllbmFibGVkIHNjc2kgY29tbWFuZHMgZG9fc2NzaSgpIGFuZCBkb19zY3NpYm9vdCgpCi0gIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNiBEZWMgMjAwNAotCi0qIEZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBURlRQIC8gTkZTIGRlZmF1bHQgZmlsZW5hbWVzCi0gIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAwNiBEZWMgMjAwNAotCi0qIElnbm9yZSBicm9hZGNhc3Qgc3RhdHVzIGJpdCBpbiByZWNlaXZlZCBmcmFtZXMgaW4gODI2MCBGQ0MgZXRoZXJuZXQKLSAgbG9vcGJhY2sgdGVzdCBjb2RlCi0gIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE4IEp1bCAyMDA1Ci0KLSogRml4IHR5cG8gaW4gbWtjb25maWcgc2NyaXB0ICh1c2VkID09IGluc3RlYWQgb2YgPSkKLSAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTggSnVsIDIwMDUKLQotKiBDbGVhbnVwIGJ1aWxkIHByb2JsZW1zIG9uIDY0IGJpdCBidWlsZCBob3N0cwotCi0qIFVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBBdWcgMjAwNToKLSAgLSBNYWpvciBjbGVhbnVwIGZvciBBTUNDIGV2YWwgYm9hcmRzIFdhbG51dCwgQnViaW5nYSwgRWJvbnksIE9jb3RlYQotICAgIChmb3JtZXIgSUJNIGV2YWwgYm9hcmQpLiBQbGVhc2Ugc2VlICJkb2MvUkVBRE1FLkFNQ0MtZXZhbC1ib2FyZHMtY2xlYW51cCIKLSAgICBmb3IgZGV0YWlscy4KLSAgLSBTeWNhbW9yZSAoUFBDNDA1R1ByKSBldmFsIGJvYXJkIGFkZGVkIChXYWxudXQgcG9ydCBpcyBleHRlbmRlZAotICAgIHRvIHJ1biBvbiBib3RoIDQwNUdQIGFuZCA0MDVHUHIgZXZhbCBib2FyZHMpLgotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDI3IEp1bCAyMDA1OgotICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFBQQzQ0MEVQL0dSLgotICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFlvc2VtaXRlIFBQQzQ0MEVQIGV2YWwgYm9hcmQuCi0gIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgWWVsbG93c3RvbmUgUFBDNDQwR1IgZXZhbCBib2FyZC4KLQotKiBNaW5vciBmaXhlcyBmb3IgUFBDaGFtZWxlb24gQm9hcmQ6Ci0gIC0gZml4IGFsaWdubWVudCBvZiBOQU5EIHNpemUKLSAgLSBtYWtlIGNvZGUgZG8gd2hhdCB0aGUgY29tbWVudCBzYXlzCi0KLSogSW1wbGVtZW50IGgvdyBzZWN0b3IgcHJvdGVjdGlvbiBzdGF0dXMgc3luY2hyb25pemF0aW9uIGF0IGJvb3QuCi0gIFRoZSBjb2RlIGlzIHByb3ZpZGVkIGZvciwgYW5kIHdhcyB0ZXN0ZWQgb24sIHRoZSBZdWtvbi9BbGFza2EKLSAgYW5kIFBNNTIwIGJvYXJkcyBvbmx5LgotCi0gIEEgYnVnIGluIGZsYXNoX3JlYWxfcHJvdGVjdCgpIGZvciB0aGUgWXVrb24gYm9hcmQgd2FzIGZpeGVkIGJ5Ci0gIGFkZGluZyBhIGZ1bmN0aW9uIHRoYXQgdGVsbHMgaWYgdHdvIGJhbmtzIGFyZSBvbiBvbmUgZmxhc2ggY2hpcC4KLQotKiBGaXggc3lzbW9uIFBPU1QgcHJvYmxlbTogY2hlY2sgSTJDIGVycm9yIGNvZGVzCi0gIFRoaXMgZml4ZXMgYSBwcm9ibGVtIG9mIGRpc3BsYXlpbmcgYm9ndXMgdm9sdGFnZXMgd2hlbiB0aGUgdm9sdGFnZXMKLSAgYXJlIHNvIGxvdyB0aGF0IHRoZSBJMkMgZGV2aWNlcyBzdGFydCBmYWlsaW5nIHdoaWxlIHRoZSByZXN0IG9mIHRoZQotICBzeXN0ZW0ga2VlcHMgcnVubmluZy4KLQotKiBQYXRjaCBieSBDZWRyaWMgVmluY2VudCwgNiBKdWwgMjAwNToKLSAgRml4IENGR19DTURfU0VUR0VURENSIGhhbmRsaW5nIGluICJjb21tb24vY21kX2Rjci5jIgotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMjAgSnVsIDIwMDU6Ci0gIEFkZCBtaXNzaW5nIFBDSSBJTyBwb3J0IGRlZmluaXRpb25zLgotCi0qIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KLQotKiBBZGp1c3QgcHJpbnRlZCBib2FyZCBJRCBmb3IgTFdNT04gYm9hcmQuCi0KLSogRml4IGxvdy1sZXZlbCBPSENJIHRyYW5zZmVycyBmb3IgQVJNOTIwdCBhbmQgTVBDNXh4eAotCi0qIEFkZCBuZXcgYXJndW1lbnQgZm9ybWF0IGZvciBmbGFzaCBjb21tYW5kcyB0byBhbGxvdyBmb3IgdXNhZ2UgbGlrZQotICAiZXJhc2UgJChhZGRyKSArJChmaWxlc2l6ZSkiLCBpLiBlLiBhIHNpemUgYXJndW1lbnQgY2FuIGJlIHVzZWQgYW5kCi0gIFUtQm9vdCB3aWxsIGF1dG9tYXRpY2lhbGx5IGZpbmQgdGhlIGVuZCBvZiB0aGUgY29ycmVzcG9uZGluZyBzZWN0b3IuCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA1IEp1bCAyMDA1OgotICBVcGRhdGUgdWMxMDAgYm9hcmQgUEhZIHNldHVwCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIEp1bCAyMDA1OgotICBGaXggUEhZIGFkZHJlc3MgZm9yIENBVGNlbnRlciBib2FyZCAobm93IGNvcnJlY3QhKQotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzAgSnVuIDIwMDU6Ci0gIEZpeCBQSFkgYWRkcmVzc2VzIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcwotICBDaGFuZ2UgTUFJTlRBSU5FUiBmb3IgbW9zdCBlc2QgYm9hcmRzCi0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMzAgSnVuIDIwMDU6Ci0gIEZpeCBMQ0QgbG9nbyBmb3IgbHdtb24gYm9hcmQgd2hpY2ggZ290IGxvc3QgaW4gdGhlIG1lcmdlIG9mIDh4eCBhbmQgUFhBIExDRCBjb2RlCi0KLSogRml4IGJhdWRyYXRlIGNhbGN1bGF0aW9uIHByb2JsZW0gb24gTVBDNTIwMCBzeXN0ZW1zCi0KLSogQWRkIEVFUFJPTSBhbmQgUlRDIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKLQotKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyMCBKdW4gMjAwNToKLSAgRml4IGluaXRpYWxpemF0aW9uIG9mIGxvdyBhY3RpdmUgR1BJTyBwaW5zIG9uIGlua2E0eDAgYm9hcmQKLQotKiBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50LCBkaXNhYmxlIEhXIGZsYXNoIHByb3RlY3Rpb24gb2YKLSAgSE1JMTAwMSBib2FyZAotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDEwIEp1biAyMDA1OgotICBJbml0aWFsaXplIGFsbG9jYXRlZCBkZXYgYW5kIHByaXZhdGUgaHcgc3RydWN0dXJlcwotICBhZnRlciB0aGVpciByZXNwZWN0aXZlIGFsbG9jYXRpb24gaW4gNDQwZ3hfZW5ldC5jCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgSnVuIDIwMDU6Ci0gIEZpeCBieXRlb3JkZXIgcHJvYmxlbXMgd2l0aCBzZWNvbmQgYXJndW1lbnQgb2YgImJvb3RtIiB3aXRoCi0gIHN0YW5kYWxvbmUgaW1hZ2VzOwotCi0qIEFkZCBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkCi0KLSogRGlzYWJsZSAiZGF0ZSIgYW5kICJzbnRwIiBjb21tYW5kcyBvbiBUUU04NjZNCi0KLSogRml4IHdhdGNoZG9nIHJlc2V0IHByb2JsZW1zIG9uIExXTU9OIGJvYXJkCi0KLSogUGF0Y2ggYnkgSnVlcmdlbiBTZWxlbnQsIDE3IE1heSAyMDA1OgotICBBZGQgc3VwcG9ydCBmb3IgRnVua3dlcmsgVm9WUE4gZ2F0ZXdheSBtb2R1bGUuCi0KLSogQ2xlYW51cCBkZWJ1ZyBjb2RlIGZvciBNUEM4MjIwIEZFQyBkcml2ZXIKLQotKiBFeHRlbmQgYnVyc3QgbW9kZSBSQU0gdGVzdCBwcm9ncmFtIHRvIHRha2UgYSBsb29wIGNvdW50Ci0gICgwID0gaW5maW5pdGUpCi0KLSogVXNlIENPTkZJR19EUklWRVJfS1M4Njk1RVRIIHRvIGVuYWJsZSBLUzg2OTUgZXRoZXJuZXQgZHJpdmVyIG9uCi0gIHRob3NlIGJvYXJkcyB0aGF0IHVzZSBpdC4KLQotKiBQYXRjaGVzIGJ5IEdyZWcgVW5nZXJlciwgMTkgTWF5IDIwMDU6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBLUzg2OTVQIChBUk0gOTIyIGJhc2VkKSBDUFUKLSAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIE9wZW5HZWFyIENNNDAwOCwgQ000MTE2IGFuZCBDTTQxNDggYm9hcmRzCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTkgTWF5IDIwMDU6Ci0gIEFkZCBzdXBwb3J0IGZvciBDT05GSUdfU0VSSUFMX1RBRyBvbiBBUk0gYm9hcmRzCi0KLSogQWRkIFBDSSBzdXBwb3J0IGZvciBTb3JjZXJ5IGJvYXJkLgotICBDb2RlIGNsZWFudXAgKGVzcGVjaWFsbHkgU29yY2VyeSAvIEFsYXNrYSAvIFl1a29uIHNlcmlhbCBkcml2ZXIpLgotCi0qIEZpeCBjb21waWxlIHByb2JsZW1zIGNhdXNlZCBieSBuZXcgYnVyc3QgbW9kZSBTRFJBTSB0ZXN0OwotICBtYWtlIHBvcnQgcGlucyB0byB0cmlnZ2VyIGxvZ2ljIGFuYWx5emVyIGNvbmZpZ3VyYWJsZQotCi0qIEZpeCB0aW1lciBoYW5kbGluZyBvbiBNUEM4NXh4IHN5c3RlbXMKLQotKiBGaXggZGVidWcgY29kZSBpbiBvbWFwNTkxMm9zayBmbGFzaCBkcml2ZXIKLQotKiBBZGQgc3VwcG9ydCBmb3IgTVBDODI0NyBiYXNlZCAiSURTODI0NyIgYm9hcmQuCi0KLSogQWRkIHN1cHBvcnQgZm9yIDIgeCBUU0VDIGludGVyZmFjZXMgb24gdGhlIFRRTTg1NDAgYm9hcmQuCi0KLSogT24gTFdNT04gd2UgbXVzdCB1c2UgdGhlIHdhdGNoZG9nIHRvIHJlc2V0IHRoZSBib2FyZCBhcyB0aGUgQ1BVCi0gIGdlbmVyZWF0ZWQgSFJFU0VUIHB1bHNlIGlzIHRvbyBzaG9ydCB0byByZXNldCB0aGUgZXh0ZXJuYWwKLSAgY2lyY3VpdHJ5LgotCi0qIEFkZCB0ZXN0IHRvb2wgdG8gZXhlcmNpc2UgU0RSQU0gYWNjZXNzZXMgaW4gYnVyc3QgbW9kZQotICAoYXMgc3RhbmRhbG9uZSBwcm9ncmFtLCBNUEM4eHgvUG93ZXJQQyBvbmx5KQotCi0qIEluY3JlYXNlIENGR19NT05JVE9SX0xFTiBmb3IgUmF0dGxlciBib2FyZCB0byBtYXRjaCBhY3R1YWwgY29kZQotICBzaXplLgotCi0qIE1ham9yIHVwYXRlIG9mIEpGRlMyIGNvZGU7IG5vdyBpbiBzeW5jIHdpdGggc25hcHNob3Qgb2YgTVREIENWUyBvZgotICBNYXJjaCAxMywgMjAwNSk7IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBDT05GSUdfSkZGUzJfTFpPX0xaQVJJCi0gIGFkZGVkIHRvIHN1cHBvcnQgTFpPIGFuZCBMWkFSSSBjb21wcmVzc2lvbiBtb2RlcyAodW5kZWZpbmVkIGJ5Ci0gIGRlZmF1bHQpLgotCi0qIEZpeCBwcm9ibGVtIHdpdGggc3ltYm9saWMgbGlua3MgaW4gSkZGUzIgY29kZS4KLQotKiBVc2UgbGlua2VyIEFTU0VSVCBzdGF0ZW1lbnQgdG8gcHJldmVudCB1bmRldGVjdGVkIG92ZXJsYXBwaW5nIG9mCi0gIHNlY3Rpb25zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkOyBvdGhlciBib2FyZHMgbWlnaHQgdXNlIHRoaXMsIHRvby4KLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE1heSAyMDA1OgotICBVcGRhdGUgZm9yIFAzRzQKLSAgRml4IHByb2JsZW1zIGluIGNtZF91bml2ZXJzZS5jCi0KLSogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDAzIE1heSAyMDA1OgotICBBZGRlZCBtaXNzaW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIGNtZF9uYW5kLmMKLSAgTW9kaWZpZWQgQ0ZHX1BDSV9QVE0xTVMgaW4gY29uZmlncy9QTFU0MDUuaCB0byBtYXAgMTI4TUIgcmFtCi0KLSogRml4IElOS0E0eDA6IHVzZSBDUzEgYXMgZ3Bpb193a3VwXzYgb3V0cHV0Ci0KLSogRml4IGJ1ZyBpbiB0aGUgU0RSQU0gaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgY2FubWIsIEljZUN1YmUgYW5kCi0gIFBNNTIwIGJvYXJkcy4KLSAgRml4IFBIWSBhZGRyZXNzIGZvciBjYW5tYiBib2FyZC4KLQotKiBDbGVhbnVwIHNlcmlhbCBjb25zb2xlIGJhdWRyYXRlIGNhbGN1bGF0aW9uIG9uIEFUOTFSTTkyMDA7Ci0gIGdldCByaWQgb2Ygb2Jzb2xldGUgQ0ZHX0FUOTFDX0JSR1JfRElWSVNPUiBkZWZpbml0aW9uCi0KLSogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDE4IEFwciAyMDA1OgotICBNYWtlIFBDSSB0YXJnZXQgYWRkcmVzcyBzcGFjZXMgb24gUE1DNDA1IGFuZCBDUENJNDA1IGJvYXJkcwotICBjb25maWd1cmFibGUgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcwotCi0qIEF1dG8tc2l6ZSBSQU0gb24gY2FubWIgYm9hcmQuCi0KLSogQWRkIHN1cHBvcnQgZm9yIGNhbm1iIGJvYXJkCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBBcHIgMjAwNToKLSAgVXBkYXRlIGZvciBlc2QgYXBjNDA1Ci0KLSogRml4ZXMgZm9yIFRRTTg1NjAgYm9hcmQ6Ci0gIC0gZml4IGNsb2NrIHJhdGVzCi0gIC0gcmVtb3ZlIGRlYnVnIG1lc3NhZ2VzCi0gIC0gZml4IGZsYXNoIHNlY3RvciBwcm90ZWN0aW9uCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDcgQXByIDIwMDU6Ci0gIEFkZCBpMmNfcmVnX3dyaXRlKCkgYW5kIGkyY19yZWdfd3JpdGUoKSBmb3IgYXQ5MXJtOTIwMCBJMkMKLQotKiBQYXRjaGVzIGJ5IFN0ZXZlbiBTY2hvbHosIDA3IEFwciAyMDA1OgotICBGaXggY29tcGlsZXIgd2FybmluZyBpbiBhbHRlcmEuYwotICBGaXggd2FybmluZyBpbiBjcHUvYXJtOTIwdC9hdDkxcm05MjAwL2kyYy5jCi0KLSogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA2IEFwciAyMDA1OgotICBGaXggdm9pY2VibHVlIGNvbmZpZ3VyYXRpb24uCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNiBBcHIgMjAwNToKLSAgVXBkYXRlcyBmb3IgT0NPVEVBIGJvYXJkOgotICAtIENoYW5nZWQgVS1Cb290IHNpemUgZnJvbSA1MTJrQnl0ZSB0byAyNTZrQnl0ZQotICAtIEZpeGVkIGZsYXNoIGRyaXZlciB0byBzdXBwb3J0IGJvb3QgZnJvbSBzb2xkZXJlZCB1c2VyIGZsYXNoCi0gIC0gQWRkZWQgUkVBRE1FIGZvciBzd2l0Y2ggZnJvbSBQSUJTIGZpcm13YXJlIHRvIFUtQm9vdAotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA1IEFwciAyMDA1OgotICAtIENoYW5nZSB0aW1lciBmcmVxdWVuY3kgZm9yIHBwYyA0NDAgZnJvbSAxMCBtcyB0byAxIG1zLgotICAgIFByb2JsZW0gZm91bmQgYnkgQW5kcmV3IFdvem5pYWsuCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDYgQXByIDIwMDU6Ci0gIC0gY3JlYXRpbmcgU29DIHN1YmRpciBmb3IgQXRtZWwgQVQ5MVJNOTIwMCBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCi0gIC0gbW92aW5nIGNvZGUgb3V0IG9mIGNwdS9hdDkxcm05MjAwIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAotCi0qIFBhdGNoZXMgYnkgUm9iZXJ0IFdoYWxleSwgMjkgTm92IDIwMDQ6Ci0gIC0gdXBkYXRlIHRoZSBweGEtcmVncy5oIGZpbGUgZm9yIFBYQTI3eCBjaGlwcwotICAtIGFkZCBQWEEyN3ggYmFzZWQgQURTVklYIGJvYXJkCi0gIC0gYWRkIHN1cHBvcnQgZm9yIE1NQyBvbiBQWEEyN3ggcHJvY2Vzc29ycwotCi0qIFBhdGNoIGJ5IEFuZHJldyBFLiBNaWxlc2tpLCAyOCBOb3YgMjAwNDoKLSAgRml4IFBQQzR4eCBTUEQgU0RSQU0gZGV0ZWN0aW9uIGJ1ZwotCi0qIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAyNiBOb3YgMjAwNDoKLSAgRml4IGxvZ2ljIG9mICJ0ZXN0IC16IiBhbmQgInRlc3QgLW4iIGNvbW1hbmRzCi0KLSogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA1IEFwciAyMDA1OgotICBBZGQgc3VwcG9ydCBmb3IgVm9pY2VCbHVlIGJvYXJkLgotCi0qIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNSBBcHIgMjAwNToKLSAgRml4IG5ldGJvb3RfY29tbW9uKCkgcHJvdG90eXBlcy4KLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNSBBcHIgMjAwNToKLSAgVXNlIGkuTVggd2F0Y2hkb2cgdGltZXIgZm9yIHJlc2V0X2NwdSgpCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDUgQXByIDIwMDU6Ci0gIE1vdmUgcmVzZXRfY3B1KCkgb3V0IG9mIGNwdS9hcm05MjB0L3N0YXJ0LlMgaW50byB0aGUgU29DIHNwZWNpZmljCi0gIHN1YmRpcmVjdG9yaWVzIGNwdS9hcm05MjB0L2lteC8gYW5kIGNwdS9hcm05MjB0L3MzYzI0eDAvCi0gIChub3cgaW4gaW50ZXJ1cHRzLmMpCi0KLSogQWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgYmFzZWQgInNvcmNlcnkiIGJvYXJkLgotCi0qIEFkZCBzdXBwb3J0IGZvciBUUU04NTYwIGJvYXJkLgotCi0qIEFkZCBGRUMgc3VwcG9ydCBmb3IgVFFNODU0MCBib2FyZC4KLSAgSW50ZXJmYWNlcyBhcmUgbmFtZWQgYXMgZm9sbG93czogIkVORVQxIiAtIFRTRUMyLCAiRU5FVDIiIC0gRkVDCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDQgQXByIDIwMDU6Ci0gIFVwZGF0ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIENNQ19QVTIgYm9hcmQuCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgQXByIDIwMDU6Ci0gIC0gcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIENPTkZJR19JTklUX0NSSVRJQ0FMIGZvciBBUk0gYmFzZWQgYm9hcmRzCi0gIC0gaW50cm9kdWNlIHR3byBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGluc3RlYWQ6Ci0gICAgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCBhbmQgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKLSAgTWFrZSBzdXJlIHRoYXQgTURJTyBjbG9jayBkb2VzIG5vdCBleGNlZWQgMi41IE1IeiBvbiBBVDkxCi0KLSogRml4IHRpbWVyIGNvZGUgZm9yIEFSTSBzeXN0ZW1zOiBtYWtlIHN1cmUgdGhhdCB1ZGVsYXkoKSBkb2VzIG5vdAotICByZXNldCB0aW1lcnMgc28gaXQncyBzYXZlIHRvIHVzZSB1ZGVsYXkoKSBpbiB0aW1lb3V0IGNvZGUuCi0KLSogUGF0Y2ggYnkgTWF0aGlhcyBL/HN0ZXIsIDIzIE5vdiAyMDA0OgotICBhZGQgdWRlbGF5IHN1cHBvcnQgZm9yIHRoZSBtY2Y1MjgyIGNwdQotCi0qIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE2IE5vdmVtYmVyIDIwMDQ6Ci0gIGZpeCBpbmNvcnJlY3Qgb25ib2FyZCBYaWxpbnggQ1BMRCBiYXNlIGFkZHJlc3MKLQotKiBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDA4IE5vdiAyMDA0OgotICAtIEFkZCBsb3ctYm9vdCBvcHRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQgKGlmIGxvd2Jvb3QgaXMgc2VsZWN0ZWQsCi0gICAgdGhlIGp1bXBlciBmb3IgdGhlIEhSQ1cgc291cmNlIHNob3VsZCBzZWxlY3QgZmxhc2guIElmIGxvd2Jvb3QgaXMKLSAgICBub3Qgc2VsZWN0ZWQsIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IHRoZQotICAgIEJDU1IuCi0gIC0gY2hhbmdlIGRlZmF1bHQgbG9hZCBiYXNlIGFkZHJlc3MgdG8gMHgwMDQwMDAwMAotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA4IE5vdiAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUgJiBNaWNybyBSYXR0bGVyIGJvYXJkcy4KLSAgVGVzdGVkIG9uIFJhdHRsZXI4MjQ4LgotCi0qIFBhdGNoIGJ5IEFuZHJlIFJlbmF1ZCwgMDggTm92IDIwMDQ6Ci0gIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGluIGNvbW1vbi9sY2QuYwotCi0qIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAwNSBOb3YgMjAwMzoKLSAgRW5hYmxlIGFsbCA0IFBDTUJSVyBidWZmZXJzIGZvciB0aGUgTVBDODI0NSBwcm9jZXNzb3Igc2luY2UgdGhlIENQVQotICBidWcgb25seSBhZmZlY3RzIHRoZSBYUEM4MjQ1IHByb2Nlc3NvcnMKLQotKiBQYXRjaGVzIGJ5IEpvc2VmIFdhZ25lciwgMjkgT2N0IDIwMDQ6Ci0gIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQVTg3IGJvYXJkCi0gIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU0IGJvYXJkCi0KLSogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMDIgTm92IDIwMDQ6Ci0gIEFkZCAxNi1iaXQgTkFORCBzdXBwb3J0Ci0KLSogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMSBOb3YgMjAwNDoKLSAgQWRkIG1pc3NpbmcgTklPUy9OSU9TMiBzdXBwb3J0IGZvciAiaW1pbmZvIiBjb21tYW5kCi0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjkgT2N0IDIwMDQ6Ci0gIEFkZCBtaXNzaW5nIE5JT1MvTklPUzIgc3VwcG9ydCBmb3IgIm1raW1hZ2UiIHRvb2wuCi0KLSogUGF0Y2ggYnkgRGF2aWQgQWRhaXIsIDI3IE9jdCAyMDA0OgotICBBZGQgbWlzc2luZyA0NDBHWCBTRFJBTSBDb250cm9sbGVyIHJlc2V0Ci0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgT2N0IDIwMDQ6Ci0gIERlY2xhcmUgcmVzZXRfY3B1KCkgaW4gaW5jbHVkZS9jb21tb24uaCBpbnN0ZWFkIGxvY2FsbHkKLQotKiBQYXRjaCBieSBZdXNkaSBTYW50b3NvLCAyMiBPY3QgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgSElEREVOX0RSQUdPTiBib2FyZAotICAtIGZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBkcml2ZXIvcnRsMTgzOS5jCi0KLSogUGF0Y2ggYnkgQWxsZW4gQ3VydGlzLCAyMSBPY3QgMjAwNDoKLSAgc3VwcG9ydCBtdWx0aXBsZSBzZXJpYWwgcG9ydHMKLQotKiBQYXRjaCBieSBSaWNoYXJkIEtsaW5nbGVyLCAwMyBBcHIgMjAwNToKLSAgQWRkIGNhbGwgdG8gZXRoX2hhbHQoKSBpbiBuZXQvbmV0LmMgd2hlbiBjYWxsZWQgZnVuY3Rpb25zIGZhaWwKLSAgYWZ0ZXIgZXRoX2luaXQoKSBoYXMgYmVlbiBjYWxsZWQuCi0KLSogUGF0Y2ggYnkgU2FtIFNvbmcsIDMgQXByaWwgMjAwNToKLSAgLSBVcGRhdGUgUkVBRE1FLk5ldGNvbnNvbGUKLSAgLSBVcGRhdGUgUkVBRE1FCi0KLSogUHJlcGFyZSBmb3IgU29DIHJld29yayBvZiBBUk0gY29kZToKLSAgLSByZW5hbWUgQ09ORklHX0JPT1RCSU5GVU5DIGludG8gIENPTkZJR19JTklUX0NSSVRJQ0FMCi0gIC0gcmVuYW1lIG1lbXNldHVwIGludG8gbG93bGV2ZWxfaW5pdCAoZnVuY3Rpb24gbmFtZSBhbmQgc291cmNlIGZpbGVzKQotICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMyBBcHIgMjAwNToKLSAgLSBjcmVhdGUgU29DIHNwZWNpZmljIGRpcmVjdG9yaWVzIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlteCBhbmQKLSAgICBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwCi0KLSogRml4IHByb2JsZW1zIHdpdGggU05UUCBzdXBwb3J0OwotICBlbmFibGUgU05UUCBzdXBwb3J0IGluIHNvbWUgYm9hcmRzLgotCi0qIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMDEgQXByIDIwMDU6Ci0gIC0gRml4IGZsYXNoIGVyYXNlIHRpbWVvdXQgb24gQ01DX1BVMgotICAtIEFkZCBhdXRvbWF0aWMgSFcgZGV0ZWN0aW9uIGZvciBDTUNfUFUyIGFuZCBDTUNfQkFTSUMKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBNYXJjaCAyMDA1OgotICBmaXggY2FjaGUgZW5hYmxpbmcgZm9yIEFUOTFSTTkyMDAKLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAzMCBNYXIgMjAwNToKLSAgYWRkIFNOVFAgc3VwcG9ydCBhbmQgZXhwYW5kIHRpbWUgc2VydmVyIGFuZCB0aW1lIG9mZnNldCBmaWVsZHMgb2YKLSAgREhDUCBzdXBwb3J0LiBTZWUgZG9jL1JFQURNRS5TTlRQCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgRGVjIDIwMDQ6Ci0gIEZpeCBidWcgaW4gYXQ5MXJtOTIwIGV0aGVybmV0IGRyaXZlcgotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIERlYyAyMDA0OgotICBSZW1vdmUgZHVwbGljYXRlZCBjb2RlIGJ5IG1lcmdpbmcgbWVtc2V0dXAuUyBmaWxlcyBmb3IKLSAgYXQ5MXJtOTIwMCBib2FyZHMgaW50byBvbmUgY3B1L2F0OTFybTkyMDAvbG93bGV2ZWwuUwotCi0qIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDMxIE1hciAyMDA1OgotICBDbGVhbnVwIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIG92ZXJ3cml0ZV9jb25zb2xlKCkKLQotKiBVcGRhdGUgVFFNNTIwMCBjb25maWd1cmF0aW9uOwotICBwcmVwYXJlIGZvciBSZXYuIDIwMCBzdGFydGVyIGtpdCBib2FyZHMKLQotKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIE9jdCAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgTmlvcy1JSSBFUENTIENvbnRyb2xsZXIgY29yZS4KLQotKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIwIE9jdCAyMDA0OgotICBOaW9zLUlJIGNsZWFudXBzOgotICAtIEFkZCBzeXNpZCBjb21tYW5kIChOaW9zLUlJIG9ubHkpLgotICAtIExvY2F0ZSBkZWZhdWx0IGV4Y2VwdGlvbiB0cmFtcG9saW5lIGF0IHByb3BlciBvZmZzZXQuCi0gIC0gSW1wbGVtZW50IEkvTyByb3V0aW5lcyAocmVhZGIsIHdyaXRlYiwgZXRjKQotICAtIEltcGxlbWVudCBkb19ib290bV9saW51eAotCi0qIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMjIgTWFyIDIwMDU6Ci0gIC0gdXNlIFRRTTUyMDBfYXV0byBhcyBNQUtFQUxMIHRhcmdldCBmb3IgVFFNNTIwMCBzeXN0ZW1zCi0gIC0gYWRkIHN1cHBvcnQgZm9yIFNNNTAxIGdyYXBoaWNzIGNvbnRyb2xsZXIKLSAgLSBhZGQgc3VwcG9ydCBmb3IgZ3JhcGhpYyBjb25zb2xlIG9uIFRRTTUyMDAKLSAgLSBhZGQgc3VwcG9ydCBmb3IgVFFNNTIwMCBSZXYgMjAwCi0gIC0gY2xlYW51cCwgZml4IHR5cG8gaW4gaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAotCi0qIFBhdGNoIGJ5IE1hbmZyZWQgQmFyYWwsIDE3IE1hciAyMDA1OgotICBGaXggdHlwbwotCi0qIEZpeCBSVEMgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb24gYm9hcmQKLQotKiBDbGVhbnVwLCBmaXggdHlwbyBpbiBpbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBNYXIgMjAwNToKLSAgVXBkYXRlIGZvciBlc2QgYXV0b191cGRhdGUgYW5kIGhoNDA1IGJvYXJkCi0KLSogQWRhcHQgZm9yIFUtQm9vdCBpbWFnZSBzaXplIChuZXcgZmVhdHVyZXMgZW5hYmxlZCkgb24gVFFNNTIwMAotCi0qIFVwZGF0ZSBjb2RlIGZvciBUUU04NTQwIGJvYXJkIChhbmQgODV4eCBpbiBnZW5lcmFsKToKLSAgLSBDaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIEV0aGVybmV0IGRyaXZlcjogTU9UTyBFTkVUIC0+IEVORVQKLSAgLSBSZWZvcm1hdCBib290IG1lc3NhZ2VzCi0gIC0gRW5hYmxlIHJlZHVuZGFudCBlbnZpcm9ubWVudAotICAtIFJlcGxhY2UgdGhlIC1PMiBvcHRpbWl6YXRpb24gZmxhZyB3aXRoIC1tbm8tc3RyaW5nCi0KLSogUGF0Y2ggYnkgRGF2aWQgQnJvd25lbGwsIDEwIE1hciAyMDA1OgotICBSZXN0b3JlIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGluIE9IQ0kgZHJpdmVycy4KLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU0MCBib2FyZAotCi0qIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE0IE1hciAyMDA1OgotICBOQzY1MDogY2hhbmdlZCBOQU5EIGZsYXNoIGFkZHJlc3NpbmcgdG8gdXNpbmcgVVBNQgotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgTWFyIDIwMDU6Ci0gIFVwZGF0ZSBmb3IgZXNkIHZvaDQwNSBmcGdhIGltYWdlCi0KLSogSU5LQTR4MDogQWxsb3cgaW5pdGlhbGl6YXRpb24gb2YgTENEIGJhY2tsaWdodCBkaW1taW5nIGZyb20KLSAgImJyaWdodG5lc3MiIGVudmlyb25tZW50IHZhcmlhYmxlLgotCi0qIEFkZCBwb3J0IGluaXRpYWxpemF0aW9uIGZvciBkaWdpdGFsIEkvTyBvbiBJTktBNHgwCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBNYXIgMjAwNToKLSAgVXBkYXRlIGZvciBlc2QgYm9hcmRzIGRwNDA1IGFuZCBodWI0MDUKLQotKiBGaXggZ2V0X3BhcnRpdGlvbl9pbmZvKCkgcGFyYW1ldGVyIGVycm9yIGluIGFsbCBvdGhlciBjYWxscwotICAoY29tbW9uL2NtZF9pZGUuYywgY29tbW9uL2NtZF9yZWlzZXIuYywgY29tbW9uL2NtZF9zY3NpLmMpLgotCi0qIEVuYWJsZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBJTktBNHgwIGJvYXJkCi0KLSogUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IEZlYiAyMDA1OgotICBmaXggZXh0MmxvYWQgcGFzc2luZyBhbiBpbmNvcnJlY3QgcG9pbnRlciB0byBnZXRfcGFydGl0aW9uX2luZm8oKQotICByZXN1bHRpbmcgaW4gbG9hZCBmYWlsdXJlIGZvciBkZXZpY2VzIG90aGVyIHRoYW4gMAotCi0qIEFkZCBzdXBwb3J0IGZvciBTUkFNIGFuZCAyIHggUXVhZCBVQVJUcyBvbiBJTktBNHgwIGJvYXJkCi0KLSogQ2xlYW51cCBVU0IgYW5kIHBhcnRpdGlvbiBkZWZpbmVzCi0KLSogQWRkIHN1cHBvcnQgZm9yIGV4dDIgZmlsZXN5c3RlbXMgYW5kIGltYWdlIHRpbWVzdGFtcHMgdG8gVFFNNTIwMCBib2FyZAotCi0qIEFkZCByZXNldCBjb2RlIGZvciBDb3JhbC1QIG9uIElOS0E0eDAgYm9hcmQKLQotKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyOCBKdW4gMjAwNDoKLSAgVXBkYXRlIGZvciBUUkFCIGJvYXJkLgotCi0qIEZpeCBzb21lIG1pc3NpbmcgInZvbGF0aWxlInMgaW4gTVBDNXh4eCBGRUMgZHJpdmVyCi0KLSogRml4IGNpcnJ1cyB2b2x0YWdlIGRldGVjdGlvbiAoZm9yIENQQzQ1KQotCi0qIEZpeCBieXRlb3JkZXIgcHJvYmxlbSBpbiB1c2Jib290IGFuZCBzY3NpYm9vdCBjb21tYW5kcy4KLQotKiBQYXRjaCBieSBDYWp1cyBIYWhuLCAwNCBGZWIgMjAwNToKLSAgLSBkb24ndCBpbnNpc3Qgb24gbGVhZGluZyAnLycgZm9yIGZpbGVuYW1lIGluIGV4dDJsb2FkCi0gIC0gc2V0IGRlZmF1bHQgcGFydGl0aW9uIHRvIHVzZWZ1bCB2YWx1ZSAoMSkgaW4gZXh0MmxvYWQKLQotKiBQYXRjaCBieSBBbmRyZXcgRHllciwgMDggSmFuIDIwMDU6Ci0gIGZpeCB3cm9uZyByZXR1cm4gY29kZXMgaW4gZXh0MiBjb2RlCi0KLSogUmVtb3ZlZCAnLS1uby13YXJuLW1pc21hdGNoJyBvcHRpb24gZnJvbSBNYWtlZmlsZS4gVGhpcyBvcHRpb24KLSAgbWFrZXMgJ2xkJyB0byBvdmVybG9vayBiaW5hcnkgb2JqZWN0cyBjb21wYXRpYmlsaXR5LgotCi0qIE1vdmVkICQoUExBVEZPUk1fTElCUykgZnJvbSB0aGUgbGlicmFyeSBncm91cCAoLS1zdGFydC1ncm91cCAuLi4KLSAgLS1lbmQtZ3JvdXApIG91dHNpZGUgb2YgdGhlIGdyb3VwLiBUaGlzIHdpbGwgbWFrZSAnbGQnIHRvIGRvCi0gIF9tdWx0aXBsZV8gc2VhcmNoIGluIHRoZSBsaWJyYXJ5IGdyb3VwIHdoZW4gcmVzb2x2aW5nIHN5bWJvbAotICByZWZlcmVuY2VzIGFuZCBkbyBvbmx5IGEgX3NpbmdsZV8gc2VhY2ggaW4gbGliZ2NjLmEgYWZ0ZXIgdGhlIGdyb3VwCi0gIHNlYXJjaC4KLQotKiBGaXggc3RhYmlsaXR5IHByb2JsZW1zIG9uIENQQzQ1IGJvYXJkIGFnYWluLgotCi0qIE1ha2UgaW1hZ2UgZGV0ZWN0aW9uIGZvciBkaXNrYm9vdCAvIHVzYmJvb3QgLyBzY3NpYm9vdCBtb3JlIHJvYnVzdAotICAoYWxzbyBjaGVjayBoZWFkZXIgY2hlY2tzdW0pCi0KLSogVXBkYXRlIENQQzQ1IGJvYXJkIGNvbmZpZ3VyYXRpb24uCi0KLSogQWRkIFVTQiBhbmQgUENJIHN1cHBvcnQgZm9yIElOS0E0eDAgYm9hcmQKLQotKiBGaXggSURFIHN0YWJpbGl0eSBwcm9ibGVtcyBvbiBDUEM0NSBib2FyZCAobmVlZHMgMiB4IEVJRUlPKS4KLQotKiBDb2RlIGNsZWFudXAKLQotKiBQYXRjaCBieSBSb2JpbiBHZXR6LCAxMyBPY3QgMjAwNDoKLSAgQWRkIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gdG8gY2hhbmdlIFNNQzkxQzExMSBNQUMgYWRkcmVzc2VzLAotICBzZWUgZXhhbXBsZXMvUkVBRE1FLnNtYzkxMTExX2VlcHJvbQotCi0qIFBhdGNoIGJ5IFhpYW9nZW5nIChTaGF3bikgSmluLCAxMiBPY3QgMjAwNDoKLSAgRml4IEZsYXNoIHN1cHBvcnQgZm9yIEFSTSBJbnRlZ3JhdG9yIENQLgotCi0qIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEphbiAyMDA1OgotICBVcGRhdGUgc3VwcG9ydCBmb3IgT01BUDI0MjAgKEFSTTExKSBhbmQgSDQgYm9hcmQ6Ci0gIG8gY2xlYW4gdXAgYW5kIGFkZCBuZXcgdHlwZXMgdG8gSDQgbWVtb3J5IHByb2JlIGNvZGUuCi0gIG8gZml4IHRvIHdvcmsgd2l0aCBpbnRlcm5hbCBib290LgotICBvIGFkZGVkIFBSQ00gY29uZmlnIElJSSBvcGVyYXRpb24uCi0gIG8gZml4IG1hcmdpbmFsIGZsYXNoIHRpbWluZ3MuCi0gIG8gYWRkIHJldmlzb24gQVRBRyB1c2FnZS4KLSAgbyBlbmFibGUgdm9sdGFnZSBzY2FsaW5nIGF0IHBvd2VyIGNoaXAuCi0gIG8gZml4IGNvbXBpbGUgZXJyb3IgZm9yIGkyYy4KLQotKiBGaXggbmV0d29yayBwcm9ibGVtIChlcnJvciB3aGVuIHJlY2VpdmluZyBtdWx0aXBsZSBBUlAgcGFja2V0cykKLQotKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAxMiBPY3QgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFdpbmQgUml2ZXIgc2JjNDA1IGJvYXJkCi0KLSogUGF0Y2ggYnkgUmFpbmVyIEJyZXN0YW4sIDEyIE9jdCAyMDA0OgotICBNYWtlIGV4YW1wbGVzL01ha2VmaWxlIG1vcmUgcm9idXN0Ci0KLSogUGF0Y2ggYnkgU2FtIFNvbmcsIDExIE9jdG9iZXIgMjAwNDoKLSAgLSBBZGQgUkVTRVQvUFJFQk9PVC9BVVRPQk9PVCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCi0gIC0gQWRqdXN0IENQVTpCVVMgZnJlcXVlbmN5IHJhdGlvIDE6MSB3aGVuIGNvcmUgZnJlcXVlbmN5Ci0gICAgbGVzcyB0aGFuIDUwTUh6Ci0KLSogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIE9jdCAyMDA0OgotICBGaXggYSBwYXJhbWV0ZXIgZXJyb3IgaW4gcnVuX2NvbW1hbmQoKSBpbiBtYWluLmMKLQotKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAwMSBPY3QgMjAwNDoKLSAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUSSBPTUFQMjQyMCBwcm9jZXNzb3IgYW5kIGl0cyBINCByZWZlcmVuY2UKLSAgYm9hcmQKLQotKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbGVncmluLCAyNCBTZXAgMjAwNDoKLSAgQWRkZWQgc3VwcG9ydCBmb3IgTkUyMDAwIGNvbXBhdGlibGUgKERQODM5MCwgRFA4MzkwMikgTklDcy4KLQotKiBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyMyBTZXAgMjAwNDoKLSAgYWRkIHN1cHBvcnQgZm9yIHRoZSBBTUQgZGIxNTUwIGJvYXJkCi0KLSogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTUgU2VwIDIwMDQ6Ci0gIEFkZCBDT05GSUdfU0VSSUFMX01VTFRJIHN1cHBvcnQgZm9yIHBwYzR4eCwKLSAgdXBkYXRlIFJFQURNRS5zZXJpYWxfbXVsdGkKLQotKiBQYXRjaGVzIGJ5IERhdmlkIFNub3dkb24sIDA3IFNlcCAyMDA0OgotICAtIGFkZCB1LWJvb3QuaGV4IHRhcmdldCBpbiB0aGUgdG9wIGxldmVsIE1ha2VmaWxlCi0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBVTlNXL05JQ1RBIFBMRUIgMiBib2FyZCAocGxlYjIpCi0gIC0gdXNlIC1tdHVuZT14c2NhbGUgYW5kIC1tYXJjaD1hcm12NSBvcHRpb25zIGZvciBQWEEKLQotKiBQYXRjaCBieSBGbG9yaWFuIFNjaGxvdGUsIDA4IFNlcCAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgU2VuVGVjLUNPQlJBNTI3Mi1ib2FyZCAoQ29sZEZpcmUpLgotCi0qIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMDcgU2VwIDIwMDQ6Ci0gIG1wYzgyNHg6IHNldCBQQ0kgbGF0ZW5jeSB0aW1lciB0byBhIHNhbmUgdmFsdWUKLSAgKGlzIDAgYWZ0ZXIgcmVzZXQpLgotCi0qIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAwMyBTZXAgMjAwNDoKLSAgQWRkIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZnBnYSBjb21tYW5kIChYaWxpbnggb25seSkuCi0KLSogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDAzIFNlcCAyMDA0OgotICBBZGQgWGlsaW54IFNwYXJ0YW4yRSBmYW1pbHkgRlBHQSBzdXBwb3J0Ci0KLSogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAyIFNlcCAyMDA0OgotICBBZGQgQWRkZWQgc3VwcG9ydCBmb3IgSDIgcmV2aXNpb24gb2YgdGhlIEVQODI2MCBib2FyZC4KLSAgRml4ZWQgZm9ybWF0dGluZyBmb3Igc29tZSBvZiB0aGUgRVA4MjYwIHJlbGF0ZWQgc291cmNlIGZpbGVzLgotCi0qIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDIgU2VwIDIwMDQ6Ci0gIFJlc2V0IG1vbml0b3Igc2l6ZSBiYWNrIHRvIDI1NiBzbyBlbnZpcm9ubWVudCBjYW4gYmUgd3JpdHRlbgotICB0byBmbGFzaCBvbiBNUEM4NXh4IEFEUyBhbmQgQ0RTIHJlbGVhc2VzLgotCi0qIFBhdGNoIGJ5IFBhb2xvIEJyb2dnaW5pLCAwMiBTZXAgMjAwNDoKLSAgTWFrZSBCU1MgY2xlYXJpbmcgb24gQVJNIHN5c3RlbXMgbW9yZSByb2J1c3QKLQotKiBQYXRjaCBieSBZdWUgSHUgYW5kIEpvZSwgMDEgU2VwIDIwMDQ6Ci0gIC0gYWRkIFBDSSBzdXBwb3J0IGZvciBpeHA0MjU7Ci0gIC0gYWRkIEVFUFJPMTAwIHN1cHBvciB0Zm9yIGl4ZHA0MjUgYm9hcmQuCi0KLSogRml4IHByb2JsZW0gd2l0aCBwcm90ZWN0ZWQgc2VjdG9yIGRldGVjdGlvbiBpbiBkcml2ZXIvY2ZpX2ZsYXNoLmMKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4yOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIENvZGUgY2xlYW51cCwgbW9zdGx5IGZvciBHQ0MtMy4zLngKLQotKiBDbGVhbnVwIGNvbmZ1c2luZyB1c2Ugb2YgQ09ORklHX0VUSCpBRERSIC0gdXN0IGhpcyBvbmx5IHRvCi0gIHByZS1kZWZpbmUgYSBNQUMgYWRkcmVzczsgdXNlIENPTkZJR19IQVNfRVRIKiB0byBlbmFibGUgc3VwcG9ydCBmb3IKLSAgYWRkaXRpb25hbCBldGhlcm5ldCBhZGRyZXNzZXMuCi0KLSogQ2xlYW51cCBkcml2ZXJzL2k4MjM2NS5jIC0gYXZvaWQgZHVwbGljYXRpb24gb2YgY29kZQotCi0qIEZpeCBib2d1cyAiY2Fubm90IHNwYW4gYWNyb3NzIGJhbmtzIiBmbGFzaCBlcnJvciBtZXNzYWdlCi0KLSogQ29kZSBjbGVhbnVwCi0KLSogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBmb3IgdGhlIENQQzQ1IEJvYXJkLgotCi0qIEZpeCBwcm9ibGVtcyB3aXRoIENNQ19QVTIgZmxhc2ggZHJpdmVyLgotCi0qIENsZWFudXA6Ci0gIC0gYXZvaWQgdHJpZ3JhcGggd2FybmluZyBpbiBmcy9leHQyL2V4dDJmcy5jCi0gIC0gcmVuYW1lIFVDMTAwIC0+IHVjMTAwCi0KLSogQWRkIHN1cHBvcnQgZm9yIFVDMTAwIGJvYXJkCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBEZXogMjAwNDoKLSAgLSBleHQyZnMgc3VwcG9ydCBhZGRlZAotICAtIFR1bmRyYSB1bml2ZXJzZSBzdXBwb3J0IGFkZGVkCi0gIC0gQ29sZEZpcmUgTUNGNTI0OSBzdXBwb3J0IGFkZGVkIChubyBwcmVsb2FkZXIgbmVlZGVkISkKLSAgLSBNQ0Y1MjQ5IGJvYXJkIFRBU1JFRyBhZGRlZAotICAtIFBQQyBib2FyZHMgYWRkZWQ6IEFQQzQwNSwgQ1BDSTQwNURULCBDUENJNzUwLCBHMjAwMCwgSEg0MDUsCi0gICAgVk9NNDA1LCBXVUg0MDUKLSAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAotICAtIG1lbW9yeSBjb21tYW5kcyAibWRjIiBhbmQgIm13YyIgYWRkZWQgZm9yIGN5Y2xpYyByZWFkL3dyaXRlCi0gICAgKENPTkZJR19NWF9DWUNMSUMsIHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pCi0KLSogQWRkIHN1cHBvcnQgZm9yIElOS0E0WDAgYm9hcmQKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMiBEZWMgMjAwNDoKLSAgRml4IHR5cG8gaW4gQVQ5MSBtZW1vcnkgc2V0dXAuCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDQ6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yICJTVEs1Mnh4IiBib2FyZCAoaW5jbHVkaW5nIFBTLzIgbXVsdGlwbGV4ZXIpCi0gIC0gYWRkIGhhcmR3YXJlIGRldGVjdGlvbiBmb3IgVFFNNTIwMAotCi0qIENsZWFuIHVwIENNQyBQVTIgZmxhc2ggZHJpdmVyCi0KLSogVXBkYXRlIE1BSU5UQUlORVJTIGZpbGUKLQotKiBGaXggYnVnIGluIE1QQzgyMyBMQ0QgZHJpdmVyCi0KLSogRml4IHVkZWxheSgpIG9uIEFUOTFSTTkyMDAgZm9yIGRlbGF5cyA8IDEgbXMuCi0KLSogRW5hYmxlIGxvbmcgaGVscCBvbiBDTUMgUFUyIGJvYXJkOwotICBmaXggcmVzZXQgaXNzdWU7Ci0gIGluY3JlYXNlIENQVSBzcGVlZCBmcm9tIDE3OSB0byAyMDcgTUh6LgotCi0qIEZpeCBzbWM5MTExMSBldGhlcm5ldCBkcml2ZXIgZm9yIFhhZW5pYXggYm9hcmQgKG5lZWQgdG8gaGFuZGxlCi0gIHVuYWxpZ25lZCB0YWlsIHBhcnQgc3BlY2lhbGx5KS4KLQotKiBVcGRhdGUgZm9yIEFUOTFSTTkyMDBESyBhbmQgQ01DX1BVMiBib2FyZHM6Ci0gIC0gRW5hYmxlIGJvb3RpbmcgZGlyZWN0bHkgZnJvbSBmbGFzaAotICAtIGZpeCBDTUNfUFUyIGZsYXNoIGRyaXZlcgotCi0qIEZpeCBta2ltYWdlIHVzYWdlIG1lc3NhZ2UKLQotKiBNYXAgU1JBTSBvbiBOQzY1MCBib2FyZAotCi0qIFdvcmsgYXJvdW5kIGZvciBFdGhlcm5ldCBwcm9ibGVtcyBvbiBYYWVuaWF4IGJvYXJkCi0KLSogUGF0Y2ggYnkgVHNpQ2h1bmcgTGlldywgMjMgU2VwIDIwMDQ6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgQ1BVCi0gIC0gQWRkIHN1cHBvcnQgZm9yIEFsYXNrYSBhbmQgWXVrb24gYm9hcmRzCi0KLSogRml4IGNvbmZpZ3VyYXRpb24gZm9yIEVSSUMgYm9hcmQgKG5lZWRzIG1vcmUgcm9vbSkKLQotKiBBZGp1c3QgTUlQUyBjb21waWxlciBvcHRpb25zIGF0IHJ1bi10aW1lIGRlcGVuZGluZyBvbiB0b29scyB2ZXJzaW9uCi0gICgiLW1hcmNoPTRrYyAtbXR1bmU9NGtjIC1XYSwtbWlwc19hbGxvd19icmFuY2hfdG9fdW5kZWZpbmVkIiBmb3IgbmV3LAotICAiLW1jcHU9NGtjIiBmb3Igb2xkIHRvb2xzKQotCi0qIEFkZCBwYXNzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUgYW5kIG1lbW9yeSBzaXplIGluZm9ybWF0aW9uIHRvICB0aGUKLSAga2VybmVsIG9uIHhhZW5pYXggYm9hcmQuCi0KLSogRW5hYmxlIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgTkM2NTAgYm9hcmQuCi0KLSogUGF0Y2ggYnkgVGhvbWFzIExhbmdlIDA3IE9jdCAyMDA0OgotICBVcGRhdGVkIFJFQURNRSBmb3IgREJBdTF4MDAgYm9hcmRzIHRvIG1hdGNoIGN1cnJlbnQgc3RhdHVzCi0KLSogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDI4IFNlcHQgMjAwNDoKLSAgRml4IEZsYXNoIHN1cHBvcnQgZm9yIFZlcnNhdGlsZS4KLQotKiBQYXRjaCBieSBSb2dlciBCbG9mZWxkLCAxNiBTZXAgMjAwNDoKLSAgRml4IHRpbWVvdXQgZm9yIERIQ1AgY29tbWFuZCByZXRyeQotCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKLSAgRml4IGVhcmx5IHNlcmlhbCBoYW5nIHdoZW4gQ09ORklHX1NFUklBTF9NVUxUSSBpcyBkZWZpbmVkLgotCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKLSAgS2ljayB3YXRjaGRvZyB3aGVuIGJ6LWRlY29tcHJlc3NpbmcKLQotKiBGaXggQ0ZHX0haIHByb2JsZW1zIG9uIEFUOTFSTTkyMDAgc3lzdGVtcwotICBbUmVtZW1iZXI6IENGR19IWiBzaG91bGQgYmUgMTAwMCBvbiBBTEwgc3lzdGVtcyFdCi0KLSogUGF0Y2ggYnkgR3JpZGlzaCBTaGxvbWksIDMwIEF1ZyAyMDA0OgotICAtIEFkZCBzdXBwb3J0IHRvIHJldkEgdmVyc2lvbiBvZiBQUTI3IGFuZCBQUTI3RS4KLSAgLSBSZXZlcnRlZCBNUEM4MjYwQURTIGJhdWRyYXRlIGJhY2sgdG8gb3JpZ2luYWwgMTE1MjAwCi0KLSogUGF0Y2ggYnkgSG9qaW4sIDE3IFNlcCAyMDA0OgotICBGaXggdHlwbyBpbiBjZmlfZmxhc2guYwotCi0qIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA5IFNlcHRlbWJlciAyMDA0OgotICBtdGVzdCdzIGRhdGEgbGluZSB0ZXN0ICh3aXRoIENGR19BTFRfTUVNVEVTVCBzZXQpIHJldHVybmVkIGEgd3JvbmcKLSAgZXJyb3IgbWVzc2FnZQotCi0qIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDMxIEF1Z3VzdCAyMDA0OgotICBBZGRlZCBvcHRpb24gQ0ZHX1hMQl9QSVBFTElOSU5HIHRvIGVuYWJsZSBYTEIgcGlwZWxpbmluZy4gVGhpcwotICBpbXByb3ZlcyBGVFAgcGVyZm9ybWFuY2UgZm9yIE1QQzUyMDAgc3lzdGVtcy4gRW5hYmxlZCBmb3IgSWNlQ3ViZQotICBieSBkZWZhdWx0LgotCi0qIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDMwIEF1ZyAyMDA0OgotICAtIEltcHJvdmUgcGxhdGZvcm0uUyBjb2RlIGZvciBvbWFwMTUxMGlubiB0aGF0IGRldGVjdHMgd2hldGhlciBjb2RlCi0gICAgaXMgcnVubmluZyBmcm9tIFNEUkFNIG9yIG5vdC4gUGF0Y2ggYWxsb3dzIFNEUkFNIHRvIGJlIGNvbmZpZ3VyZWQKLSAgICBpZiBjb2RlIGlzIHJ1bm5pbmcgb3V0IG9mIFNSQU0gYXQgMHgyMDAwMDAwMC4KLQotKiBQYXRjaCBieSBGcmVkZXJpY2sgS2xhdHQsIDMwIEF1ZyAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdpbmQgUml2ZXIgU0JDODU0MC9TQkM4NTYwIGJvYXJkcwotCi0qIENvbmZpZ3VyZSBTWDEgYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKLQotKiBQYXRjaGVzIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDMwIEF1ZyAyMDA0OgotICAtIENvbmZpZ3VyZSBvbWFwMTUxMGlubiBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYwotICAtIE1ha2UgZHJpdmVycy9jZmlfZmxhc2guYyBwcm90ZWN0IGVudmlyb25tZW50IGFuZCByZWR1bmRhbnQKLSAgICBlbnZpcm9ubWVudC4KLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMyBKdW4gMjAwNDoKLSAgLSBBZGQgc2NyaXB0ICh0b29scy9pbWcyYnJlYy5zaCkgdG8gcHJvZ3JhbW0gVS1Cb290IGludG8KLSAgICAoU3luY2gpRmxhc2ggdXNpbmcgdGhlIEJvb3RzdHJhcCBNb2RlIG9mIHRoZSBNQzkzMjhNWDEvTAotCi0qIFBhdGNoZXMgYnkgU2NvdHQgTWNOdXR0LCAyNCBBdWcgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtSUkgcHJvY2Vzc29ycy4KLSAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBDSS01NDQxIGJvYXJkLgotICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUEsxQzIwIGJvYXJkLgotCi0qIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAyNCBBdWcgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1QQzg1NDEgYW5kIE1QQzg1NTUgQ0RTIGJvYXJkcwotICAtIENsZWFudXAgZXRoP2FkZHIgaGFuZGxpbmc6IG1ha2UgZGVwZW5kZW50IG9uIENPTkZJR19FVEg/QUREUgotICAtIENvbnZlcnQgTVBDODV4eEFEUyB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKLSAgLSBGaXggUENJIHdpbmRvdyBvbiBNUEM4NXh4OyByZW1vdmUgdW5uZWVkZWQgUENJIGluaXRpYWxpemF0aW9uCi0gICAgZnJvbSBib2FyZF9lYXJseV9pbml0X2YoKQotICAtIFByb3ZpZGUgU1cgd29ya2Fyb3VuZCBmb3IgUENJIGluaXRpYWxpemF0aW9uIG9uIDg1eHggQ0RTCi0KLSogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDI0IEF1ZyAyMDA0OgotICAtIEVuYWJsZSByYW1kaXNrL2luaXRyZCB0YWdnZWQgcGFyYW0gc3VwcG9ydCBmb3Igb21hcDE2MTBoMl9jb25maWcKLSAgLSBSZW1vdmUgc3RhdGljIG5ldHdvcmsgc2V0dXAgZGVmYXVsdHMgZnJvbSBteDFhZHNfY29uZmlnCi0gIC0gdXBkYXRlIEFSTSBib2FyZHMgdG8gdXNlIGNvbnN0YW50cyBmcm9tIG1hY2gtdHlwZXMuaAotCi0qIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwNCBPY3QgMjAwNDoKLSAgLSBmaXggSTJDIG9uIGF0OTFybTkyMDAKLSAgLSBhZGQgc3VwcG9ydCBmb3IgUmljb2ggUlM1QzM3MkEgUlRDCi0KLSogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDAxIE9jdCAyMDA0OgotICAtIGFkZCBzdXBwb3J0IGZvciBDTUMgUFUyIGJvYXJkCi0gIC0gYWRkIHN1cHBvcnQgZm9yIEkyQyBvbiBhdDkxcm05MjAwCi0KLSogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDI4IFNlcCAyMDA0OgotICBmaXggYmF1ZHJhdGUgaGFuZGxpbmcgb24gYXQ5MXJtOTIwMAotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIyIEF1ZyAyMDA0OgotICAtIHJlbW92ZSBaUEMuMTkwMCBib2FyZC1zcGVjaWZpYyBmbGFzaCBkcml2ZXI7Ci0gICAgc3dpdGNoIHRoZSBwb3J0IHRvIGdlbmVyaWMgQ0ZJIGRyaXZlcjsKLSAgLSBwb3J0IGNsZWFuLXVwCi0KLSogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6Ci0gIEFkZCBjYWxjX2Zic2l6ZSgpIGZ1bmN0aW9uIHVzZWQgd2l0aCBWSURFT0xGQl9UQUcgb24gVFJBQgotCi0qIENsZWFuIHVwIHRvb2xzL2JtcF9sb2dvLmMgdG8gbm90IGFkZCB0cmFpbGluZyB3aGl0ZSBzcGFjZQotCi0qIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgotICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMgaW4gY29tbW9uL2xjZC5jCi0gIC0gR3JvdXAgY29tbW9uIGZyYW1lYnVmZmVyIG1hY3JvcyBhbmQgI2RlZmluZXMgaW4gaW5jbHVkZS9sY2QuaAotICAtIFByb3ZpZGUgY2FsY19mYnNpemUoKSBmb3IgdmlkZW8gQVRBRwotCi0qIFBhdGNoIGJ5IFNhbSBTb25nLCAyMSBBdWd1c3QgMjAwNDoKLSAgLSBGaXggYSB0eXBvIGluIFJFQURNRQotICAtIEFsaWduICIoUk8pIiBvdXRwdXQgZm9yICJmbGluZm8iIGFmdGVyICJwcm90ZWN0IG9uIgotICAtIEFkZCBSRVNFVCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkOyBhZGp1c3QgQ1BVOkJVUyBmcmVxdWVuY3kKLSAgICByYXRpbyAxOjEgd2hlbiBjb3JlIGZyZXF1ZW5jeSBsZXNzIHRoYW4gNTBNSHoKLQotKiBQYXRjaGVzIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgotICAtIGZpeCBzb21lICJ1c2Ugb2YgbGFiZWwgYXQgZW5kIG9mIGNvbXBvdW5kIHN0YXRlbWVudCIgd2FybmluZ3MKLSAgLSBEZWZpbmUgdHlwZSBvZiBMQ0QgcGFuZWwgb24gbHViYm9jayBib2FyZCBpZiBDT05GSUdfTENEIGlzIHVzZWQKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxNiBBdWcgMjAwNDoKLSAgLSBJbnRyb2R1Y2luZyB0aGUgY29uY2VwdCBvZiBTb0NzICIuL2NwdS8kKENQVSkvJChTT0MpIgotICAtIGNyZWF0aW5nIHN1YmRpcnMgZm9yIFNvQ3MgLi9jcHUvYXJtOTIwdC9pbXggYW5kIC4vY3B1L2FybTkyMHQvczNjMjR4MAotICAtIG1vdmluZyBTb0Mgc3BlY2lmaWMgY29kZSBvdXQgb2YgY3B1L2FybTkyMHQvIGludG8gY3B1L2FybTkyMHQvJChTT0MpLwotICAtIG1vdmluZyBkcml2ZXJzL3MzYzI0eDBfaTJjLmMgYW5kIGRyaXZlcnMvc2VyaWFsX2lteC5jIG91dCBvZiBkcml2ZXJzLwotICAgIGludG8gY3B1L2FybTkyMHQvJChTT0MpLwotCi0qIFBhdGNoZXMgYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6Ci0gIC0gQWRkZWQgc3VwcG9ydCBmb3IgYm90aCA4IGFuZCAxNiBiaXQgbW9kZSBhY2Nlc3MgdG8gU3lzdGVtIEFDRSBDRgotICAgIHRocm91Z2ggTVBVLgotICAtIEZpeGVkIG1pc3NpbmcgU3lzdGVtIEFDRSBDRiBkZXZpY2UgZHVyaW5nIGdldCBGQVQgcGFydGl0aW9uIGluZm8KLSAgICBpbiBmYXRfcmVnaXN0ZXJfZGV2aWNlIGZ1bmN0aW9uLgotICAtIEVuYWJsZWQgU3lzdGVtIEFDRSBDRiBzdXBwb3J0IG9uIE1MMzAwLgotCi0qIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgotICBTeW5jaCBkZWZpbmVzIGZvciBzYXZlZW52IGFuZCBkb19zYXZlZW52IGZ1bmN0aW9ucyBzbyB0aGV5IGdldAotICBjb21waWxlZCB1bmRlciB0aGUgc2FtZSBzdGF0ZW1lbnQuCi0KLSogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6Ci0gIC0gQWRkZWQgSTJDIHN1cHBvcnQgZm9yIE1MMzAwLgotICAtIEFkZGVkIHN1cHBvcnQgZm9yIE1MMzAwIHRvIHJlYWQgb3V0IGl0cyBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbgotICAgIHN0b3JlZCBvbiB0aGUgRUVQUk9NLgotICAtIEFkZGVkIHN1cHBvcnQgdG8gdXNlIGJvYXJkIHNwZWNpZmljIHBhcmFtZXRlcnMgYXMgcGFydCBvZgotICAgIFUtQm9vdCdzIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgotICAtIFVwZGF0ZWQgTUxEIGZpbGVzIHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiBmb3IgbmV3IGZlYXR1cmVzCi0gICAgYWJvdmUuCi0KLSogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAwNSBBdWcgMjAwNDoKLSAgLSBSZW1vdmUgaW5jb3JyZWN0IGJyaWRnZSBzZXR0aW5ncyBmb3IgZXRoIGdyb3VwIDYKLSAgLSBBZGQgY2FsbCB0byBzZXR1cCBicmlkZ2UgaW4gcHBjXzQ0MHhfZXRoX2luaXRpYWxpemUKLSAgLSBGaXggcHBjXzQ0MHhfZXRoX2luaXQgdG8gcmVzZXQgdGhlIHBoeSBvbmx5IGlmIGl0cyB0aGUKLSAgICBmaXJzdCB0aW1lIHRocm91Z2gsIG90aGVyd2lzZSwganVzdCBjaGVjayB0aGUgcGh5IGZvciB0aGUKLSAgICBhdXRvbmVnb3RpYXRlZCBzcGVlZC9kdXBsZXguICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIG5ldGNvbnNvbGUKLSAgLSBvbmx5IHByaW50IHRoZSBzcGVlZC9kdXBsZXggdGhlIGZpcnN0IHRpbWUgdGhlIHBoeSBpcyByZXNldC4KLQotKiBQYXRjaCBieSBTaGxvbW8gS3V0LCAyOSBNYXIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIE1LUyBJbnN0cnVtZW50cyAiUXVhbnR1bSIgYm9hcmQKLQotKiBGaXggYnVpbGQgcHJvYmxlbSB3aXRoIENvZ2VudCBib2FyZHM7Ci0gIGF2b2lkIHVzaW5nIDxhc20vYnl0ZW9yZGVyLmg+IHdoZW4gdXNpbmcgdGhlIGhvc3QgY29tcGlsZXIKLQotKiBQYXRjaCBieSBHYW5hcGF0aGkgQywgMDQgQXVnIDIwMDQ6Ci0gIEZpeCBORlMgdGltZW91dCBpc3N1ZQotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE5IEp1bCAyMDA0OgotICAtIEZpeCBob3N0IHRvb2xzIGJ1aWxkaW5nIGluIEN5Z3dpbiBlbnZpcm9ubWVudAotICAtIEZpeCBoZWFkZXIgZmlsZXMgc2VhcmNoIG9yZGVyIGZvciBob3N0IHRvb2xzCi0KLSogUGF0Y2ggYnkgVG9tIEFybWlzdGVhZCwgMTkgSnVsIDIwMDQ6Ci0gIEZpeCBrZ2RiLlMgc3VwcG9ydCBmb3IgNzR4eF83NXggY3B1Ci0KLSogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNSBKdWwgMjAwNDoKLSAgRml4IE1QQzg1eHggSTJDIGRyaXZlcgotCi0qIEZpeCBwcm9ibGVtcyB3aXRoIENEUk9NIGRyaXZlIGFzIHNsYXZlIGRldmljZSBvbiBMaXRlNTIwMCBJREUgYnVzLgotCi0qIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IEp1bHkgMjAwNAotICBTZXQgdGhlIFBDSSBjbGFzcyBjb2RlIGZvciBKU0UgYm9hcmQgYXMgcGFydCBvZiBQQ0kgaW50ZXJmYWNlIHNldHVwCi0KLSogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTUgSnVsIDIwMDQ6Ci0gIEZpeCBwcm9ibGVtIHdpdGggd3JpdGVzIHdpdGggb2RkIHNpemVzIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgd2hlbgotICBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSBpcyBzZXQKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwNDoKLSAgQWxsb3cgY2xvY2sgc2V0dGluZyBvbiBNUEM4NjYvTVBDODg1IHNlcmllcyBjaGlwcyBhY2NvcmRpbmcgdG8KLSAgZW52aXJvbm1lbnQgdmFyaWFibGUgYGNwdWNsaycKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBBcHIgMjAwNDoKLSAgUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZGVmaW5lIG9mIENQTV9EQVRBT05MWV9TSVpFIGZvciBNUEM4MjZ4Ci0KLSogUGF0Y2ggYnkgVmluY2VudCBEdWJleSwgMjQgU2VwIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciB4YWVuaWF4IGJvYXJkCi0KLSogQWRkIGNvbW1lbnQgYWJvdXQgbm9uLUdQTCBjaGFyYWN0ZXIgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8KLSAgQ09QWUlORyBmaWxlCi0KLSogRml4IEZFQyBldGhlcm5ldCBwcm9ibGVtIG9uIE5TQ1UgYm9hcmQuCi0KLSogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDA5IFNlcCAyMDA0OgotICBhbGxvdyB0byB1c2UgVVNBUlQxIGFzIGNvbnNvbGUgcG9ydCBvbiBhdDkxcm05MjAwZGsgYm9hcmRzCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBTZXAgMjAwNDoKLSAgVXBkYXRlIEFSNDA1IGJvYXJkLgotCi0qIEZpeCBTeXNDbGsgaGFuZGxpbmcgZm9yIFBQQ2hhbWVsZW9uIGFuZCBDQVRjZW50ZXIgYm9hcmRzCi0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMDggU2VwIDIwMDQ6Ci0gIFVwZGF0ZSBldGFncyBidWlsZCB0YXJnZXQKLQotKiBJbXByb3ZlIE5ldENvbnNvbGUgc3VwcG9ydDogYWRkIHN1cHBvcnQgZm9yIGJyb2FkY2FzdCBkZXN0aW5hdGlvbgotICBhZGRyZXNzIGFuZCBidWZmZXJlZCBpbnB1dC4KLQotKiBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBHQ0MgMy4zLnggYW5kIGxhdGVyCi0KLSogRml4IHByb2JsZW0gaW4gY21kX2pmZnMyLmMgaW50cm9kdWNlZCBieSBDRkdfSkZGU19TSU5HTEVfUEFSVCBwYXRjaAotCi0qIEFkZCBzdXBwb3J0IGZvciBJRFMgIk5DNjUwIiBib2FyZAotCi0qIEFkZCBhdXRvbWF0aWMgdXBkYXRlIHN1cHBvcnQgZm9yIExXTU9OIGJvYXJkCi0KLSogQ2xlYXIgQmxvY2sgTG9jay1CaXRzIHdoZW4gZXJhc2luZyBmbGFzaCBvbiBMV01PTiBib2FyZC4KLQotKiBGaXggcmV0dXJuIGNvZGUgb2YgImZhdGxvYWQiIGNvbW1hbmQKLQotKiBFbmFibGUgTVNET1MvVkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQgZm9yIExXTU9OIGJvYXJkCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDMgQXVnIDIwMDQ6Ci0gIGNoYW5nZSB0aW1pbmcgZm9yIFNNNTAxIGdyYXBoaWNzIGNvbnRyb2xsZXIgb24gVFFNNTIwMCBtb2R1bGUKLQotKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAxMyBKdWx5IDIwMDQ6Ci0gIC0gVG90YWw1MjAwIExDRCBub3cgcnVuIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4gRW5kaWFuZXNzIGNvbnZlcnNpb24KLSAgICBpcyBkb25lIGluIGhhcmR3YXJlLgotICAtIFJlbW92ZWQgbGFzdCByZWZlcmVuY2UgdG8gImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlLgotCi0qIFBhdGNoZXMgYnkgTGFycyBNdW5jaCwgMTIgSnVsIDIwMDQ6Ci0gIC0gbW92ZSBhdDQ1LmMgdG8gYm9hcmQvYXQ5MXJtOTIwMGRrLyBzaW5jZSB0aGlzIGlzIGF0OTFybTkyMDBkawotICAgIGJvYXJkIHNwZWNpZmljCi0gIC0gc3BsaXQgb3V0IHRoZSBMWFQ5NzFBIFBIWSBmcm9tIG5zXzk3NTBfZXRoLmgKLSAgLSBzcGxpdCB0aGUgZG05MTYxIHBoeSBwYXJ0IG91dCBvZiBhdDkxcm05MjAwX2V0aGVyLmMKLQotKiBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxMiBKdWwgMjAwNDoKLSAgUmVwbGFjZWQgaGFyZGNvZGVkIFBMMDExIGNsb2NrIGZyZXF1ZW5jeSB3aXRoIGNvbmZpZyB2YXJpYWJsZS4KLSAgRml4ZWQgd3JvbmcgQ09ORklHX0NNRF9ERkwgZG9jLgotCi0qIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDA5IEp1biAyMDA0OgotICBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlbW92ZSBjaHBhcnQgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJ0aXRpb24KLQotKiBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIFVEUCAoY29tcGF0aWJsZSB0byBJbmdvIE1vbG5hcidzCi0gIG5ldGNvbnNvbGUgcGF0Y2ggdW5kZXIgTGludXgpCi0KLSogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNiBKdWwgMjAwNDoKLSAgLSBzdXBwb3J0IGxhcmdlciBERFIgbWVtb3JpZXMgdXAgdG8gMkcgb24gdGhlIFBDODU0MC84NTYwQURTIGFuZAotICAgIFNUWEdQMyBib2FyZHMKLSAgLSBNYWRlIE1QQzg1NDAvODU2MEFEUyBiZSAzM01oeiBQQ0kgYnkgZGVmYXVsdC4KLSAgLSBSZW1vdmVkIG1vbGR5IENPTkZJR19SQU1fQVNfRkxBU0gsIENGR19GTEFTSF9QT1JUX1dJRFRIXzE2Ci0gICAgYW5kIENPTkZJR19MMl9JTklUX1JBTSBvcHRpb25zLgotICAtIFJlZmFjdG9yIExvY2FsIEJ1cyBpbml0aWFsaXphdGlvbiBvdXQgb2YgU0RSQU0gc2V0dXAuCi0gIC0gUmUtaW1wbGVtZW50IG5ldyB2ZXJzaW9uIG9mIExCQzExL0REUjExIGVycmF0YSB3b3JrYXJvdW5kcy4KLSAgLSBNb3ZlZCBib2FyZCBzcGVjaWZpYyBQQ0kgaW5pdCBwYXJ0cyBvdXQgb2YgQ1BVIGRpcmVjdG9yeS4KLSAgLSBBZGRlZCBUTEIgZW50cnkgZm9yIFBDSS0xIElPIE1lbW9yeQotICAtIFVwZGF0ZWQgUkVBRE1FLm1wYzg1eHhhZHMKLQotKiBQYXRjaCBieSBTYXNjaGEgSGF1ZXIsIDI4IEp1bjoKLSAgLSBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciBNb3Rvcm9sYSBpLk1YIGFyY2hpdGVjdHVyZQotICAtIGFkZCBzdXBwb3J0IGZvciBteDFhZHMsIG14MWZzMiBhbmQgc2NiOTMyOCBib2FyZHMKLQotKiBQYXRjaGVzIGJ5IE1hcmMgTGVlbWFuLCAyMyBKdWwgMjAwNDoKLSAgLSBBZGQgZGVmaW5lIGZvciB0aGUgUENJL01lbW9yeSBCdWZmZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotICAtIGNvcnJlY3RlZCBjb21tZW50cyBpbiBjcHUvbXBjODI0eC9jcHVfaW5pdC5jCi0KLSogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNlcmlhbCBpbnRlcmZhY2VzCi0gIChmb3IgZXhhbXBsZSB0byBhbGxvdyBtb2RlbSBkaWFsLWluIC8gZGlhbC1vdXQpCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBKdWwgMjAwNDoKLSAgY3B1L3BwYzR4eC9zZHJhbS5jIHJld3JpdHRlbiBub3cgdXNpbmcgZ2V0X3JhbV9zaXplKCkKLQotKiBGaXggTlNDVSBjb25maWc7IGFkZCBldGhlcm5ldCB3YWtldXAgY29kZS4KLQotKiBBZGQgbGluayBmb3IgcHJlbG9hZGVyIGZvciBNb3Rvcm9sYSBDb2xkRmlyZSB0byBSRUFETUUubTY4awotCi0qIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDEyIEp1bCAyMDA0OgotICBmaXggb3V0cHV0IGZvcm1hdHRpbmcgaW4gZHJpdmVycy9jZmlfZmxhc2guYwotCi0qIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAyIEp1bCAyMDA0OgotICBGaXggbG93Ym9vdCAoYWdhaW4pIG9uIE1QQzV4eHgKLQotKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNyBKdWwgMjAwNDoKLSAgcmVsb2NhdGUgZXhjZXB0aW9uIHZlY3RvcnMgb24gYXJtNzIwdCBpZiBuZWVkZWQKLQotKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDA2IEp1bCAyMDA0OgotICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QKLSAgLSBTZXQgY29ycmVjdCBPTUFQMTYxMCBiaV9hcmNoX251bWJlciBmb3IgYnVpbGQgdGFyZ2V0Ci0KLSogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMDYgSnVsIDIwMDQ6Ci0gIGV2YjQ1MTA6IGFkZCBzdXBwb3J0IGZvciB0aW1lciBpbnRlcnJ1cHQ7IGNsZWFudXAKLQotKiBQYXRjaCBieSBEYW4gUG9pcm90LCAwNiBKdWwgMjAwNDoKLSAgRml4IHNiYzgyNjAgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0KLSogQ2xlYW51cCByZWR1bmRhbmQgImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlCi0KLSogUGF0Y2ggYnkgTWFyayBKb25hcywgMDUgSnVsIDIwMDQ6Ci0gIGFkZCBzdXBwb3J0IGZvciB0aGUgVG90YWw1MTAwJ3MgYW5kIFRvdGFsNTIwMCdzIExDRCBzY3JlZW4KLQotKiBQYXRjaGVzIGJ5IERhbiBFaXNlbmh1dCwgMDEgSnVsIDIwMDQ6Ci0gIC0gUkVBRE1FIGZpeGVzLgotICAtIE1vdmUgZG9jMjAwMC5oIGluY2x1ZGUgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5nIG9uIHNvbWUgYm9hcmRzCi0KLSogUGF0Y2ggYnkgTWFyayBKb25hcywgMDEgSnVsIDIwMDQ6Ci0gIEFkZGVkIHN1cHBvcnQgZm9yIFRvdGFsNTEwMCBhbmQgVG90YWw1MjAwIChSZXYuMSBhbmQgUmV2LjIpCi0gIE1HVDUxMDAgYW5kIE1QQzUyMDAgYmFzZWQgRnJlZXNjYWxlIHBsYXRmb3Jtcy4KLQotKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDEgSnVsIDIwMDQ6Ci0gIEFkZCBpbml0aWFsaXphdGlvbiBmb3IgSW50ZWdyYXRvciBhbmQgdmVyc2F0aWxlIGJvYXJkIGZpbGVzLgotCi0qIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDAxIEp1biAyMDA0OgotICBGaXggVkZEIEZCIGFsbG9jYXRpb24sIGFkZCBMQ0QgRkIgYWxsb2NhdGlvbiBvbiBBUk0KLQotKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAzMCBKdW4gMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKLQotKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyOSBKdW4gMjAwNDoKLSAgQWRkIGxvb3B3IGNvbW1hbmQ6IGluZmluaXRlIHdyaXRlIGxvb3Agb24gYWRkcmVzcyByYW5nZQotCi0qIFBhdGNoZXMgYnkgWWFzdXNoaSBTaG9qaSwgMjkgSnVuIDIwMDQ6Ci0gIC0gYWRkIGVtcHR5IGluY2x1ZGUvYXNtLW1pY3JvYmxhemUvcHJvY2Vzc29yLmgKLSAgLSBhZGQgdG8gQ1JFRElUUyBhbmQgTUFJTlRBSU5FUlMKLSAgLSBhZGQgZ2QgaW5pdGlhbGl6YXRpb24KLSAgLSBhZGQgTWljcm9CbGF6ZSBhbmQgU1VaQUtVIGJvYXJkIHRvIE1BS0VBTEwgc2NyaXB0Ci0gIC0gYWRkIHJlc2V0IHN1cHBvcnQgZm9yIFNVWkFLVQotICAtIGFkZCBmbHVzaF9jYWNoZSgpIGZvciBNaWNyb0JsYXplCi0gIC0gYWRkIENGR19GTEFTSF9TSVpFIHRvIGluY2x1ZGUvY29uZmlncy9zdXpha3UuaCBzaW5jZSB3ZSBoYXZlIGZpeGVkCi0gICAgc2l6ZSBmbGFzaCBtZW1vcnkgb24gU1VaQUtVCi0KLSogUGF0Y2ggYnkgUHJha2FzaCBLdW1hciwgMjcgSnVuIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciB0aGUgUFhBMjUwIGJhc2VkIEludHJpbnN5YyBDZXJmIGJvYXJkLgotCi0qIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDI3IEp1biAyMDA0OgotICBmaXggY29tbWVudCBpbiBpbmNsdWRlL2NvbW1vbi5oCi0KLSogUmVuYW1lIFNCQzg1NjAgaW50byBzYmM4NTYwIGZvciBjb25zaXN0ZW5jeQotCi0qIFBhdGNoIGJ5IERhbmllbCBQb2lyb3QsIDI0IEp1biAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlcidzIHNiYzgyNDAgYm9hcmQKLQotKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI2IEp1biAyMDA0OgotICAtIGRyaXZlcnMvc2VyaWFsX3h1YXJ0bGl0ZS5jOiBmaXggInJldHVybiAwIiBpbiB2b2lkIGZ1bmN0aW9uCi0gIC0gYWRkIG1pY3JvYmxhemUgc3VwcG9ydCB0byBta2ltYWdlIHRvb2wKLQotKiBQYXRjaCBieSBGcmVkIEtsYXR0LCAyNSBKdW4gMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFdpbmRSaXZlcidzIHNiYzg1NjAgYm9hcmQKLQotKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNAotICBTbWFsbCBCdWdzIGZpeGVzIGZvciAiYXQ5MXJtOTIwMGRrIiBib2FyZDoKLSAgLSBUaW1pbmcgbW9kaWZpY2F0aW9ucyBmb3IgU1BJIERhdGFGbGFzaCBhY2Nlc3MKLSAgLSBGaXggTkFORCBmbGFzaCBkZXRlY3Rpb24gYnVnCi0KLSogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMjQgSnVuIDIwMDQ6Ci0gIEFkZCBTdXBwb3J0IGZvciBGbGFzaCBBVDQ5QlY2NDE2IGZvciBBVDkxUk05MjAwREsgYm9hcmQKLQotKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE3IEp1bmUgMjAwNDoKLSAgQ29tcGxldGlvbiBvZiB0aGUgODU0MEFEUy84NTYwQURTIHVwZGF0ZXM6Ci0gIEZpeCBzb21lIFBDSSBhbmQgUmFwaWQgSS9PIG1lbW9yeSBtYXBzLAotICBJbml0aWFsaXplIGJvdGggVFNFQyAxIGFuZCAyLAotICBJbml0aWFsaXplIFNEUkFNCi0gIFVwZGF0ZSBNQUlOVEFJTkVSIGZvciA4NXh4IGJvYXJkcyBhbmQgUkVBRE1FLm1wYzg1eHhhZHMKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdW4gMjAwNDoKLSAgUmVtb3ZlIG9ic29sZXRlIEFkZGVySUkgcG9ydCB3aGljaCB3YXMgc3VwZXJzZWRlZCBieSB1bmlmaWVkCi0gIEFkZGVySUkvQWRkZXI4N3ggcG9ydAotCi0qIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNiBKdW4gMjAwNDoKLSAgRml4IGdjYy0zLjMuMyB3YXJuaW5ncyBmb3Igc21jOTExMTEuYwotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDIgSnVsIDIwMDQ6Ci0gIC0gRml4IGJ1ZyBpbiA0MDUgZXRoZXJuZXQgZHJpdmVyOyBhbGxvY2F0ZWQgZGF0YSBub3QgY2xlYXJlZCEKLSAgLSBGaXggcHJvYmxlbSBpbiA0MDUgaTJjIGRyaXZlcjsgZG9uJ3QgdHJ5IHRvIHByaW50IHdpdGhvdXQgY29uc29sZSEKLQotKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDExIEp1biAyMDA0OgotICBSZW1vdmUgZGVidWcgY29kZSBmcm9tICdib2FyZC9scGQ3YTQweC9mbGFzaC5jJwotCi0qIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDExIEp1biAyMDA0OgotICBVcGRhdGUgZm9yIFBQQ2hhbWVsZW9uIGJvYXJkOgotICAtIHN1cHBvcnQgZm9yIFN5c0NsayBAIDI1TUh6Ci0gIC0gc3VwcG9ydCBmb3IgU2lsaWNvbiBNb3Rpb24gU003MTIgVkdBIGNvbnRyb2xsZXIKLSAgLSBzb21lIGNsZWFuIHVwcwotCi0qIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMTAgSnVuIDIwMDQ6Ci0gIC0gZml4IHByb2JsZW1zIHdpdGggZXhhbXBsZXMvc3R1YnMuYyBmb3IgR0NDID49IDMuNAotICAtIGZpeCBwcm9ibGVtcyB3aXRoIGdkIGluaXRpYWxpemF0aW9uCi0KLSogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMTcgTWF5IDIwMDQ6Ci0gIC0gQWRkIHN1cHBvcnQgZm9yIFNhbXN1bmcgUzNDNDUxMEIgQ1BVIChBUk03dGRtaSBiYXNlZCBTb0MpCi0gIC0gQWRkIHN1cHBvcnQgZm9yIEVTUEQtSW5jLiBFVkI0NTEwIEJvYXJkCi0KLSogUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDExIE1heSAyMDA0OgotICBGaXggZm9yIE1QQzgyNDUgLSByZWFkaW5nIFBQQyBNZW1vcnkgZnJvbSBhbm90aGVyIGRldmljZSB3aXRoIHRoZQotICBQUEMgYXMgUENJIHRhcmdldCBkZXZpY2UgY29ycnVwdHMgZGF0YSBkdWUgdG8gaW50ZXJlbmFsIGhhcmR3YXJlCi0gIGJ1ZmZlcmluZy4KLQotKiBGaXggImNscyIgY29tbWFuZCB3aGVuIHVzZWQgd2l0aCBzcGxhc2ggc2NyZWVuCi0KLSogSW5jcmVhc2UgTkZTIGRvd25sb2FkIHRpbWVvdXQgKG5vdyAxIG1pbiAtIDEwIHNlYyBpcyB0byBzaG9ydCBmb3IgYQotICBzbG93IGRvd25sb2FkIG9mIGEgYmlnIGltYWdlKQotCi0qIEFkZCAiY2xzIiBmdW5jdGlvbiB0byBNUEM4MjMgTENEIGRyaXZlciBzbyB3ZSBjYW4gcmVpbml0aWFsaXplIHRoZQotICBkaXNwbGF5IGV2ZW4gYWZ0ZXIgc2hvd2luZyBhIGJpdG1hcAotCi0qIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDQgSnVuIDIwMDQ6Ci0gIC0gRERSIFJhbSBzdXBwb3J0IGZvciBQTTUyMCAoTVBDNTIwMCkKLSAgLSBzdXBwb3J0IGZvciBkaWZmZXJlbnQgZmxhc2ggdHlwZXMgKFBNNTIwKQotICAtIFVTQiAvIElERSAvIENGLUNhcmQgLyBEaXNrT25DaGlwIHN1cHBvcnQgZm9yIFBNNTIwCi0gIC0gOCBiaXQgYm9vdCByb20gc3VwcG9ydCBmb3IgUE01MjAvQ0U1MjAKLSAgLSBBZGQgYXV0byBTRFJBTSBtb2R1bGUgZGV0ZWN0aW9uIGZvciBNaWNyb1N5cyBDUEM0NSBib2FyZCAoTVBDODI0NSkKLSAgLSBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBDUEM0NQotICAtIHN1cHBvcnQgb2YgbmV3IGZsYXNoIHR5cGUgKDI4RjE2MEMzVCkgZm9yIENQQzQ1Ci0KLSogRml4IGZsYXNoIHBhcmFtZXRlcnMgcGFzc2VkIHRvIExpbnV4IGZvciBQUENoYW1lbGVvbiBib2FyZAotCi0qIFJlbW92ZSBldGhfaW5pdCgpIGZyb20gbGliX2FybS9ib2FyZC5jOyBpdCdzIGRvbmUgaW4gbmV0Lm5ldC5jLgotCi0qIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTAgSnVuIDIwMDQ6Ci0gIGZpeCBzdXBwb3J0IGZvciBMb2dpYyBTREstTEg3QTQwNCBib2FyZCBhbmQgY2xlYW4gdXAgdGhlCi0gIExIN0E0MDQgcmVnaXN0ZXIgbWFjcm9zLgotCi0qIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMTAgSnVuIDIwMDQ6Ci0gIE1vZGlmeSBjb2RlIHRvIHNlbGVjdCBjb3JyZWN0IHNlcmlhbCBjbG9jayBvbiBTYW5kcG9pbnQ4MjQ1Ci0KLSogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMCBKdW4gMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIEludGVsIEszIHN0cmF0YSBmbGFzaC4KLQotKiBQYXRjaCBieSBUaG9tYXMgQnJhbmQsIDEwIEp1biAyMDA0OgotICBGaXggImxvYWRzIiBjb21tYW5kIG9uIERLMVMxMCBib2FyZAotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA5IEp1biAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgOE1CIGZsYXNoIFNJTU0gYW5kIEpGRlMyIGZpbGUgc3lzdGVtIG9uCi0gIE1vdG9yb2xhIEZBRFMgYm9hcmQgYW5kIGl0cyBkZXJpdmF0aXZlcyAoTVBDODZ4QURTLCBNUEM4ODVBRFMpLgotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA5IEp1biAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUmTWljcm8gQWRkZXI4N3ggYW5kIHRoZSBvbGRlciBBZGRlcklJIGJvYXJkLgotCi0qIFBhdGNoIGJ5IE1pbmctTGVuIFd1LCAwOSBKdW4gMjAwNDoKLSAgQWRkIHN1cHBwb3J0IGZvciBNQzkzMjggKERhcmdvbmJhbGwpIENQVSBhbmQgTW90b3JvbGEgTVgxQURTIGJvYXJkCi0KLSogUGF0Y2ggYnkgU2FtIFNvbmcsIDA5IEp1biAyMDA0OgotICAtIEFkZCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCi0gIC0gVXBkYXRlIEZMQVNIIGRyaXZlciBmb3IgNCpBTTI5REwzMjNEQjkwVkkKLSAgLSBBZGQgb3B0aW9uIGNvbmZpZ3VyYXRpb24gb2YgQ0ZHX0VOVl9JU19JTl9OVlJBTSBvbiBSUFhsaXRlX0RXIGJvYXJkCi0KLSogUGF0Y2ggYnkgTWFyayBKb25hcywgMDggSnVuZSAyMDA0OgotICAtIE1ha2UgTVBDNTIwMCBib2FyZHMgZXZhbHVhdGUgdGhlIFNWUiB0byBwcmludCBwcm9jZXNzb3IgbmFtZSBhbmQKLSAgICB2ZXJzaW9uIGluIGNoZWNrY3B1KCkgKGNwdS9tcGM1eHh4L2NwdS5jKS4KLQotKiBQYXRjaCBieSBLYWktVXdlIEJsb2VtLCAwNiBNYXkgMjAwNDoKLSAgRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGNyYW1mcyBjb2RlCi0KLSogUGF0Y2ggYnkgVG9tIEFybWlzdGVhZCwgMDQgSnVuIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBNQVg2OTAwIFJUQwotCi0qIFBhdGNoZXMgYnkgTGFkaXNsYXYgTWljaGwsIDAzIEp1biAyMDA0OgotICAtIGZpeCBjZmlfZmxhc2guYyBvbiBMRSBzeXN0ZW1zCi0gIC0gbGV0ICdtYWtlIG1ycHJvcGVyJyBkZWxldGUgdS1ib290LmltZyBhcyB3ZWxsCi0gIC0gdHVybiBwcmludGYgaW50byBkZWJ1ZyBpbiBjZmlfZmxhc2guYwotCi0qIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAyOCBNYXkgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIEV4eXMgWFNFbmdpbmUgYm9hcmQKLQotKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBNYXkgMjAwNDoKLSAgRml4IGEgTVBDNXh4eCBJMkMgdGltaW5nIGlzc3VlIGluIGkyY19wcm9iZSgpLgotCi0qIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDI3IE1heSAyMDA0OgotICBGaXggYm9hcmRfaW5pdF9mKCkgZm9yIGRiYXUxeDAwIGJvYXJkLgotCi0qIFBhdGNoIGJ5IEltcmUgRGVhaywgMjYgTWF5IDIwMDQ6Ci0gIE9uIE9NQVAxNjEwIHBsYXRmb3JtcyBjaGVjayBpZiBib290aW5nIGZyb20gUkFNKENTMCkgb3IgZmxhc2goQ1MzKS4KLSAgU2V0IGZsYXNoIGJhc2UgYWNjb3JkaW5nbHksIGFuZCBkZWNpZGUgd2hldGhlciB0byBkbyBvciBza2lwIGJvYXJkCi0gIHNwZWNpZmljIHNldHVwIHN0ZXBzLgotCi0qIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNiBNYXkgMjAwNDoKLSAgQWRkIG1pc3NpbmcgZGVmaW5lIGluIGluY2x1ZGUvYXNtLW02OGsvZ2xvYmFsX2RhdGEuaAotCi0qIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNSBNYXkgMjAwNDoKLSAgQWRkIG1pc3NpbmcgZnVuY3Rpb25zIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBpbiBsaWJfbTY4ay90aW1lLmMKLQotKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDI0IE1heSAyMDA0OgotICBmaXggU0RSQU0gaW5pdGlhbGl6YXRpb24gZm9yIExQRDdBNDAwIGJvYXJkLgotCi0qIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDIwIE1heSAyMDA0OgotICBhZGQgc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgaW4gTkFORCBmbGFzaAotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIE1heSAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgSW50ZXJwaGFzZSBpU1BBTiBib2FyZHMuCi0KLSogUGF0Y2hlcyBieSBQYXVsIFJ1aGxhbmQsIDE3IE1heSAyMDA0OgotICAtIEFkZCBJL08gZnVuY3Rpb25zIHRvIHRoZSBzbWM5MTExMSBldGhlcm5ldCBkcml2ZXIgdG8gc3VwcG9ydCB0aGUKLSAgICBMb2dpYyBMUEQ3QTQweCBib2FyZHMuCi0gIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBMb2dpYyBab29tIExIN0E0MHggYmFzZWQgU0RLIGJvYXJkKHMpLAotICAgIHNwZWNpZmljYWxseSB0aGUgTFBEN0E0MDAuCi0KLSogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IE1heSAyMDA0OgotICAtIGNhbGwgTUFDIGFkZHJlc3MgcmVhZGluZyBjb2RlIGFsc28gZm9yIFNNU0M5MUMxMTE7Ci0gIC0gbWFrZSBTTVNDOTFDMTExIHRpbWVvdXQgY29uZmlndXJhYmxlLCByZW1vdmUgZHVwbGljYXRlIGNvZGUKLSAgLSBmaXggZ2V0X3RpbWVyKCkgZm9yIFBYQQotICAtIHVwZGF0ZSBkb2MvUkVBRE1FLkpGRlMyCi0gIC0gdXNlICJib290ZmlsZSIgZW52IHZhcmlhYmxlIGFsc28gZm9yIGpmZnMyCi0KLSogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTQgTWF5IDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgQ1NCNDcyIGJvYXJkICg4TUIgRmxhc2ggUmV2KQotCi0qIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDE0IE1heSAyMDA0OgotICAtIGZsYXNoLmg6IG1vcmUgZmxhc2ggdHlwZXMgYWRkZWQKLSAgLSBpbW1hcF84MjYwLmg6IHNvbWUgYml0cyBhZGRlZCAodXNlZnVsIGZvciBSTUlJKQotICAtIGNtZF9jb25pbmZvLmM6IHR5cG8gY29ycmVjdGVkLCBwcmludGYgLT4gcHV0cwotICAtIHJlZHVjZWQgc2l6ZSBieSByZXBsYWNpbmcgc3BhY2VzIHdpdGggdGFiCi0KLSogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMyBNYXkgMjAwNDoKLSAgQWRkICdpbWdleHRyYWN0JyBjb21tYW5kOiBleHRyYWN0IG9uZSBwYXJ0IG9mIGEgbXVsdGkgZmlsZSBpbWFnZS4KLQotKiBQYXRjaGVzIGJ5IEpvbiBMb2VsaWdlciwgMTEgTWF5IDIwMDQ6Ci0gIER5bmFtaWNhbGx5IGhhbmRsZSBSRVYxIGFuZCBSRVYyIE1QQzg1eHggcGFydHMuCi0gICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpLgotICBOZXcgY29uc2lzdGVudCBtZW1vcnkgbWFwIGFuZCBMb2NhbCBBY2Nlc3MgV2luZG93IGFjcm9zcyBNUEM4NXh4IGxpbmUuCi0gIE5ldyBDQ1NSQkFSIGF0IDB4RTAwMF8wMDAwIG5vdy4KLSAgQWRkIFJBUElEIEkvTyBtZW1vcnkgbWFwLgotICBOZXcgbWVtb3J5IG1hcCBpbiBSRUFETUUuTVBDODV4eGFkcwotICAgIChLdW1hciBHYWxhLCAxMC1NYXktMjAwNCkKLSAgQmV0dGVyIGJvYXJkIGFuZCBDUFUgaWRlbnRpZmljYXRpb24gb24gTVBDODV4eCBib2FyZHMgYXQgYm9vdC4KLSAgICAoSm9uIExvZWxpZ2VyLCAxMC1NYXktMjAwNCkKLSAgU0RSQU0gY2xvY2sgY29udHJvbCBmaXhlcyBvbiBNUEM4NTQwQURTICYgTVBDODU2MCBib2FyZHMuCi0gIFNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBNUEM4NTQwQURTICYgTVBDODU2MEFEUyBjbGVhbmVkIHVwLgotICAgIChKaW0gUm9iZXJ0c29uLCAxMC1NYXktMjAwNCkKLSAgUmV3cml0ZSBvZiB0aGUgTVBDODV4eCBUaHJlZSBTcGVlZCBFdGhlcm5ldCBDb250cm9sbGVyIChUU0VDKSBkcml2ZXIuCi0gIFN1cHBvcnRzIG11bHRpcGxlIFBIWXMuCi0gICAgKEFuZHkgRmxlbWluZywgMTAtTWF5LTIwMDQpCi0gIFNvbWUgUkVBRE1FLk1QQzg1eHhhZHMgdXBkYXRlcy4KLSAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCi0gIENvcHlyaWdodCB1cGRhdGVzIGZvciAiRnJlZXNjYWxlIgotICAgIChBbmR5IEZsZW1pbmcsIDEwLU1heS0yMDA0KQotCi0qIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDExIE1heSAyMDA0OgotICBBZGQgZmxhc2ggc3VwcG9ydCBmb3IgU1QgTTI5VzA0MEIKLSAgUmVkdWNlIEpTRSBzcGVjaWZpYyBmbGFzaC5jIHRvIHJlbW92ZSBkZWFkIGNvZGUuCi0KLSogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDA0IE1heSAyMDA0OgotICBGaXggY2xlYXJfYnNzIGNvZGUgZm9yIEFSTSBzeXN0ZW1zIChhbGwgZXhjZXB0IHMzYzQ0YjAgd2hpY2gKLSAgZG9lc24ndCBjbGVhciBCU1MgYXQgYWxsPykKLQotKiBGaXggInBpbmciIHByb2JsZW0gb24gSU5DLUlQIGJvYXJkLiBTdHJhbmdlIHByb2JsZW06Ci0gIFNvbWV0aW1lcyB0aGUgc3RvcmUgd29yZCBpbnN0cnVjdGlvbiBoYW5ncyB3aGlsZSB3cml0aW5nIHRvIG9uZSBvZgotICB0aGUgU3dpdGNoIHJlZ2lzdGVycywgYnV0IG9ubHkgaWYgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgMTYtYnl0ZQotICBhbGlnbmVkLiBNb3ZpbmcgdGhlIGluc3RydWN0aW9uIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzb21laG93Ci0gIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkuCi0KLSogUGF0Y2ggYnkgUmlzaGkgQmhhdHRhY2hhcnlhLCAwOCBNYXkgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVA1OTEyIE9TSyBCb2FyZAotCi0qIFBhdGNoIGJ5IFNhbSBTb25nIE1heSwgMDcgTWF5IDIwMDQ6Ci0gIEZpeCB0eXBvIG9mIFVQTSB0YWJsZSBmb3Igcm11IGJvYXJkCi0KLSogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA1IE1heSAyMDA0OgotICAtIEludHJhY29tIGJvYXJkIHVwZGF0ZS4KLSAgLSBBZGQgQ29kZWMgUE9TVC4KLQotKiBBZGQgc3VwcG9ydCBmb3IgdGhlIHNlY29uZCBFdGhlcm5ldCBpbnRlcmZhY2UgZm9yIHRoZSAnUFBDaGFtZWxlb24nCi0gIGJvYXJkLgotCi0qIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDMwIEFwciAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgT01BUDczMCBQZXJzZXVzMiBEZXZlbG9wbWVudCBib2FyZAotCi0qIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6Ci0gIEZpeCBmbGFzaCBjaGlwLXNlbGVjdCAoT1IwKSBvcHRpb24gcmVnaXN0ZXIgc2V0dGluZyBvbiBGQURTIGJvYXJkcy4KLQotKiBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDI5IEFwciAyMDA0OgotICBSZXBvcnQgTUlJIG5ldHdvcmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5nIHByb3Blcmx5IHdoZW4KLSAgYXV0by1uZWdvdGlhdGUgaXMgbm90IGVuYWJsZWQuCi0KLSogUGF0Y2ggYnkgSmFycmV0dCBSZWRkLCAyOSBBcHIgMjAwNDoKLSAgRml4IGhhbmcgb24gcmVzZXQgb24gT2NvdGVhIGJvYXJkIGR1ZSB0byBmbGFzaCBpbiB3cm9uZyBtb2RlLgotCi0qIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDI5IEFwciAyMDA0OgotICBhZGQgTUFDIGFkZHJlc3MgZGV0ZWN0aW9uIHRvIHNtYzkxMTExIGRyaXZlcgotCi0qIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjggQXByIDIwMDQ6Ci0gIGZpeCB0eXBvIGluIGxpYl9hcm0vYm9hcmQuYwotCi0qIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDIwIEFwciAyMDA0OgotICAtIFJFQURNRSB1cGRhdGU6IGFkZCBDT05GSUdfQ1NCMjcyIGFuZCBjc2IyNzJfY29uZmlnCi0gIC0gYWRkIGRlc2NyaXB0aW9ucyBmb3Igc29tZSBNSUkvUEhZIG9wdGlvbnMsIENPTkZJR19JMkNGQVNULCBhbmQKLSAgICBpMmNmYXN0IGVudmlyb25tZW50IHZhcmlhYmxlCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgQXByIDIwMDQ6Ci0gIC0gUmVuYW1lIERVRVRfQURTIHRvIE1QQzg4NUFEUwotICAtIFJlbmFtZSBDT05GSUdfRFVFVCB0byBDT05GSUdfTVBDODg1X0ZBTUlMWQotICAtIFJlbmFtZSBDT05GSUdfODY2X2V0X2FsIHRvIENPTkZJR19NUEM4NjZfRkFNSUxZCi0gIC0gQ2xlYW4gdXAgRkFEUyBmYW1pbHkgcG9ydCB0byB1c2UgdGhlIG5ldyBkZWZpbmVzCi0KLSogRml4IFBDSSBzdXBwb3J0IG9uIENQQzQ1IGJvYXJkCi0KLSogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNSBBcHIgMjAwNDoKLSAgQWRkIE5pb3MgR0RCL0pUQUcgQ29uc29sZSBzdXBwb3J0OgotICAtIEFkZCBzdHVicyB0byBzdXBwb3J0IGdkYiB2aWEgSlRBRy4KLSAgLSBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIEpUQUcuCi0gIC0gTWlub3IgY2xlYW51cC4KLQotKiBBZGQgc3VwcG9ydCBmb3IgQ0FUY2VudGVyIGJvYXJkIChiYXNlZCBvbiBQUENoYW1lbGVvbiBNRSBtb2R1bGUpCi0KLSogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMTIgTWF5IDIwMDQ6Ci0gIFVzaW5nIGV4dGVybmFsIHdhdGNoZG9nIGZvciBLVVA0IGJvYXJkcyBpbiBtcGM4eHgvY3B1LmM7Ci0gIGxvYWRfc2VybnVtX2V0aGFkZHIoKSBmb3IgS1VQNCBib2FyZHMgaW4gbGliX3BwYy9ib2FyZC5jOwotICB2YXJpb3VzIGNoYW5nZXMgdG8gS1VQNCBib2FyZCBzcGVjaWZpYyBmaWxlcwotCi0qIEZpeCBtaW5vciBuZXR3b3JrIHByb2JsZW0gb24gTVBDNTIwMDogbmVlZCBzb21lIGRlbGF5IGJldHdlZW4KLSAgcmVzZXR0aW5nIHRoZSBQSFkgYW5kIHNlbmRpbmcgdGhlIGZpcnN0IHBhY2tldC4gSW1wbGVtZW50ZWQgaW4gYQotICAibmF0dXJhbCIgd2F5IGJ5IGludm9raW5nIHRoZSBQSFkgcmVzZXQgYW5kIGluaXRpYWxpemF0aW9uIGNvZGUKLSAgb25seSBvbmNlIGFmdGVyIHBvd2VyIG9uIHZzLiBlYWNoIHRpbWUgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLgotCi0qIEFkZCBzb21lIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbG93LXNwZWVkIGRldmljZXMgdG8gU0w4MTEgVVNCIGNvbnRyb2xsZXIKLSAgKGF0IGxlYXN0ICJ1c2IgcmVzZXQiIG5vdyBwYXNzZXMgc3VjY2Vzc2Z1bGx5IGFuZCAidXNiIGluZm8iIGRpc3BsYXlzCi0gIGNvcnJlY3QgaW5mb3JtYXRpb24pCi0KLSogQ2hhbmdlIGluaXQgc2VxdWVuY2UgZm9yIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlczogaW5pdGlhbGl6ZQotICBvbi1jaGlwIGludGVyZmFjZXMgYmVmb3JlIGV4dGVybmFsIGNhcmRzLgotCi0qIEZpeCBtZW1vcnkgbGVhayBpbiB0aGUgTkFORC1zcGVjaWZpYyBKRkZTMiBjb2RlCi0KLSogRml4IFNMODExIFVTQiBjb250cm9sbGVyIHdoZW4gYXR0YWNoZWQgdG8gYSBVU0IgaHViCi0KLSogRml4IGNvbmZpZyBvcHRpb24gc3BlbGxpbmcgaW4gUE01MjAgY29uZmlnIGZpbGUKLQotKiBGaXggUEhZIGRpc2NvdmVyeSBwcm9ibGVtIGluIGNwdS9tcGM4eHgvZmVjLmMgKGludHJvZHVjZWQgYnkKLSAgcGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQpCi0KLSogRml4IG1pbm9yIE5BTkQgSkZGUzIgcmVsYXRlZCBpc3N1ZQotCi0qIEZpeGVzIGZvciBTTDgxMSBVU0IgY29udHJvbGxlcjoKLSAgLSBpbXBsZW1lbnQgd29ya2Fyb3VuZCBmb3IgYnJva2VuIG1lbW9yeSBzdGljawotICAtIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcKLQotKiBJbmNyZWFzZSBwYWNrZXQgc2VuZCB0aW1lb3V0IHRvIDEgbXMgaW4gY3B1L21wYzh4eC9zY2MuYyB0byBiZXR0ZXIKLSAgY29wZSB3aXRoIGNvbmdlc3RlZCBuZXR3b3Jrcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4xOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIzIEFwciAyMDA0OgotICBGaXggVlNDL0NJUyA4MjAxIHBoeSBkZXNjcmFtYmxlciBpbnRlcm9wZXJhYmlsaXR5IHRpbWluZyBkdWUgdG8KLSAgZXJyYXRhIGZyb20gVml0ZXNzZSBTZW1pY29uZHVjdG9yLgotCi0qIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyMiBBcHIgMjAwNDoKLSAgRml4IGV0aGVybmV0IGNvbmZpZ3VyYXRpb24gZm9yICJ2ZXJzYXRpbGUiIGJvYXJkCi0KLSogUGF0Y2ggYnkgS3NoaXRpaiBHdXB0YSwgMjEgQXByIDIwMDQ6Ci0gIFJlbW92ZSBidXN5IGxvb3AgYW5kIHVzZSBNUFUgdGltZXIgZnIgdXNsZWVwKCkgb24gT01BUDE1MTAvMTYxMCBib2FyZHMKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKLSAgRml4IGEgYnVnIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgZHJpdmVyOgotICBUaGUgTUlJIGludGVyZmFjZSBpcyBub3cgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzc2luZyB0aGUgUEhZLgotCi0qIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTkgQXByIDIwMDQ6Ci0gIFVzZSBVLWJvb3QncyBtaWlwaHkuaCBmb3IgUEhZIHJlZ2lzdGVyIG5hbWVzLCByYXRoZXIgdGhhbgotICBpbnRyb2R1Y2luZyBhIG5ldyBoZWFkZXIgZmlsZS4KLQotKiBVcGRhdGUgcGNpX2lkcy5oIGZyb20gbGludXgtMi40LjI2Ci0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMTkgQXByIDIwMDQ6Ci0gIEZpeCBwcm9ibGVtIGNhdXNlIGJ5IFZMQU4gZnVuY3Rpb24gb24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmUKLSAgd2l0aG91dCBWTEFOIGVudmlyb25tZW50Ci0KLSogQ2xlYW4gdXAgdGhlIFRRTTh4eF9ZWU1IeiBjb25maWd1cmF0aW9uczsgYWxsb3cgdG8gdXNlIHRoZSBzYW1lCi0gIGJpbmFyeSBpbWFnZSBmb3IgYWxsIGNsb2NrIGZyZXF1ZW5jaWVzLiBJbXBsZW1lbnQgcnVuLXRpbWUKLSAgb3B0aW1pemF0aW9uIG9mIGZsYXNoIGFjY2VzcyB0aW1pbmcgYmFzZWQgb24gdGhlIGFjdHVhbCBidXMKLSAgZnJlcXVlbmN5LgotCi0qIE1vZGlmeSBLVVA0WCBib2FyZCBjb25maWd1cmF0aW9uIHRvIHVzZSBTTDgxMSBkcml2ZXIgZm9yIFVTQiBtZW1vcnkKLSAgc3RpY2tzIChpbmNsdWRpbmcgRkFUIC8gVkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQpCi0KLSogQWRkIFNMODExIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIGZvciBVU0IKLQotKiBBZGQgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyBkZXNyaXB0aW9uIHRvIFJFQURNRQotCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxOSBBcHIgMjAwNDoKLSAgQWxsb3cgdG8gdXNlIHNoZWxsIHN0eWxlIHN5bnRheCAoaS4gZS4gJHt2YXJ9ICkgd2l0aCBzdGFuZGFyZCBwYXJzZXIuCi0gIE1pbm9yIHBhdGNoZXMgZm9yIEludHJhY29tIGJvYXJkcy4KLQotKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMTkgQXByIDIwMDQ6Ci0gIGNsZWFudXAgc3VwcG9ydCBmb3IgQ0YvSURFIG9uIFBDTUNJQSBmb3IgUFhBMjVYCi0KLSogVGVtcG9yYXJpbHkgZGlzYWJsZWQgSm9obiBLZXJsJ3MgZXh0ZW5kZWQgTUlJIGNvbW1hbmQgY29kZSBiZWNhdXNlCi0gICJtaWl2YWxzLmgiIGlzIG1pc3NpbmcKLQotKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDEzIEFwciAyMDA0OgotICAtIFJlbW92ZSBDUzAgY2hpcCBzZWxlY3QgdGltaW5nIHNldHRpbmcgZnJvbSBjcHUvbXBjNXh4eC9zdGFydC5TCi0gIC0gQWRkIHN5bmMgaW5zdHJ1Y3Rpb25zIHRvIEljZUN1YmUgU0RSQU0gaW5pdCBjb2RlCi0gIC0gTW92ZSBTRFJBTSBjaGlwIGNvbnN0YW50cyBpbnRvIHNlcGVyYXRlIGluY2x1ZGUgZmlsZXMKLSAgLSBVbmlmeSBERFIgYW5kIFNEUiBpbml0aWFsaXphdGlvbiBjb2RlCi0gIC0gVW5pZnkgYWxsIEljZUN1YmUgKExpdGU1eHh4KSB0YXJnZXQgbmFtZXMKLQotKiBQYXRjaCBieSBKb2huIEtlcmwsIDE2IEFwciAyMDA0OgotICBFbmFibGUgcmFuZ2VzIGluIG1paSBjb21tYW5kLCBlLmcuIG1paSByZWFkIDAtMWYgMCBvcgotICBtaWkgcmVhZCA0LTcgMTgtMWEuICBBbHNvIGFkZCBtaWkgZHVtcCBzdWJjb21tYW5kIGZvcgotICBwcmV0dHktcHJpbnRpbmcgc3RhbmRhcmQgcmVncyAwLTUuCi0KLSogUGF0Y2ggYnkgIFN0ZXBoZW4gV2lsbGlhbXMsIDE2IEFwcmlsIDIwMDQ6Ci0gIGZpeCB0eXBvIGluIEpTRS5oOyB1cGRhdGUgTUFJTlRBSU5FUlMKLQotKiBQYXRjaCBieSBNYXR0aGV3IFMuIE1jQ2xpbnRvY2ssIDE0IEFwciAyMDA0OgotICBmaXggaW5pdGRyYW0gZnVuY3Rpb24gZm9yIHV0eDgyNDUgYm9hcmQKLQotKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMTQgQXByIDIwMDQ6Ci0gIHVzZSBBVEFHX0lOSVRSRDIgaW5zdGVhZCBvZiBkZXByZWNhdGVkIEFUQUdfSU5JVFJEIHRhZwotCi0qIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxOCBBcHIgMjAwNDoKLSAgcHJvdmlkZSB0aGUgSURFIFJlc2V0IEZ1bmN0aW9uIGZvciBFTUsgNTIwMCBib2FyZHMKLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxMiBBcHIgMjAwNDoKLSAgZml4IHBjaV9ob3NlX3dyaXRlX2NvbmZpZ197Ynl0ZSx3b3JkfV92aWFfZHdvcmQgcHJvYmxlbXMKLQotKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDEyIEFwciAyMDA0OgotICBVcGRhdGUgbWF4IFJBTSBzaXplIGZvciBkZWJyaXMgYm9hcmQKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOCBBcHIgMjAwNDoKLSAgQWRkIFRMQiBlbnRyeSBmb3Igc2Vjb25kIERJTU0gc2xvdCBvbiBvY290ZWEKLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBBcHIgMjAwNDoKLSAgYWRkIFJUTDgxNjkgbmV0d29yayBkcml2ZXIKLQotKiBQYXRjaCBieSBEYW4gTWFsZWssIDA3IEFwciAyMDA0OgotICAtIEFkZCBzdXBwb3J0IGZvciBSUEMvU1R4IEdQMywgTW90b3JvbGEgODU2MCBib2FyZAotICAtIFVwZGF0ZSA4NXh4IFRTRUMgZHJpdmVyIHNvIGl0IHNlYXJjaGVzIE1JSSBmb3IgZmlyc3QgYXZhaWxhYmxlIFBIWQotICAgIGFuZCB1c2VzIHRoYXQgb25lLgotICAtIEFkZCBmdW5jdGlvbnMgdG8gc3VwcG9ydCBjb25zb2xlIE1JSSBjb21tYW5kcy4KLQotKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwNyBBcHIgMjAwNDoKLSAgTW92ZSBpbml0aWFsaXphdGlvbiBvZiBiaV9paWNfZmFzdFtdCi0gIGZyb20gYm9hcmRfaW5pdF9mKCkgdG8gYm9hcmRfaW5pdF9yKCkKLQotKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKLSAgQ2xlYW51cCBtaWNyb2JsYXplIHBvcnQKLQotKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IEFwciAyMDA0OgotICBBZGQgYXV0byBTRFJBTSBtb2R1bGUgZGV0ZWN0aW9uIGZvciBEZWJyaXMgYm9hcmQKLQotKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMDYgQXByIDIwMDQ6Ci0gIC0gRml4IHNvbWUgUENJIHByb2JsZW1zIG9uIHRoZSBNUEM4MjY2QURTIGJvYXJkCi0gIC0gRml4IHRoZSBsb2NhdGlvbiBvZiBzb21lIFBDSSBlbnRyaWVzIGluIHRoZSBpbW1hcCBzdHJ1Y3R1cmUKLQotKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKLSAgLSBhZGQgc3VwcG9ydCBmb3IgbWljcm9ibGF6ZSBwcm9jZXNzb3JzCi0gIC0gYWRkIHN1cHBvcnQgZm9yIEF0bWFya1RlY2hubyAic3V6YWt1IiBib2FyZAotCi0qIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50IGluIGZsYXNoCi0KLSogQ29uZmlndXJlIFBQQ2hhbWVsZW9uIGJvYXJkIHRvIHVzZSBKRkZTMiBOQU5EIHN1cHBvcnQuCi0KLSogQWRkZWQgc3VwcG9ydCBmb3IgSkZGUzIgZmlsZXN5c3RlbSAocmVhZC1vbmx5KSBvbiB0b3Agb2YgTkFORCBmbGFzaAotCi0qIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNiBBcHIgMjAwNDoKLSAgTEJBNDggZml4ZXMKLQotKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBBcHIgMjAwNDoKLSAgLSBhZGQgc3VwcG9ydCBmb3IgYSBuZXcgdmVyc2lvbiBvZiBhbiBJbnRyYWNvbSBib2FyZCBhbmQgZml4Ci0gICAgdmFyaW91cyBvdGhlciB0aGluZ3Mgb24gb3RoZXJzLgotICAtIGFkZCB2ZXJpZnkgc3VwcG9ydCB0byB0aGUgY3JjMzIgY29tbWFuZCAoZGVmaW5lCi0gICAgQ09ORklHX0NSQzMyX1ZFUklGWSB0byBlbmFibGUgaXQpCi0gIC0gZml4IEZFQyBkcml2ZXIgZm9yIE1QQzh4eCBzeXN0ZW1zOgotICAgIDEuIGZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyBmb3IgYm9hcmRzIHRoYXQgdXNlIGR5bmFtaWMKLSAgICAgICBhbGxvY2F0aW9uIG9mIERQUkFNCi0gICAgMi4gc2h1dCBkb3duIEZFQyBhZnRlciBuZXR3b3JrIHRyYW5zZmVycwotICAtIEhVU0ggcGFyc2VyIGZpeGVzOgotICAgIDEuIEEgbmV3IHRlc3QgY29tbWFuZCB3YXMgYWRkZWQuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YKLSAgICAgICB0aGUgb25lIGluIHRoZSBib3VybmUgc2hlbGwuCi0gICAgMi4gQSBuZXcgZXhpdCBjb21tYW5kIHdhcyBhZGRlZCB3aGljaCB0ZXJtaW5hdGVzIHRoZSBjdXJyZW50Ci0gICAgICAgZXhlY3V0aW5nIHNjcmlwdC4KLSAgICAzLiBGaXhlZCBoYW5kaW5nIG9mICQ/IChleGl0IGNvZGUgb2YgbGFzdCBleGVjdXRlZCBjb21tYW5kKQotICAtIEZpeCBzb21lIGNvbXBpbGUgcHJvYmxlbXM7Ci0gICAgYWRkICJvbmNlIiBmdW5jdGlvbmFsaXR5IGZvciB0aGUgbmV0cmV0cnkgdmFyaWFibGUKLQotKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDAyIEFwciAyMDA0OgotICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgQXNzYWJldCBib2FyZAotCi0qIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDAxIEFwciAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgUGljdHVyZSBFbGVtZW50cyBKU0UgYm9hcmQKLQotKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMDEgQXByIDIwMDQ6Ci0gIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgUFhBIHN5c3RlbXMuCi0KLSogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQ6Ci0gIC0gYWRkIGF1dG8tY29tcGxldGUgc3VwcG9ydCB0byB0aGUgVS1Cb290IENMSQotICAtIGFkZCBzdXBwb3J0IGZvciBORVRUQSBhbmQgTkVUUEhPTkUgYm9hcmRzOyBmaXggTkVUVklBIGJvYXJkCi0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFcHNvbiAxNTZ4IHNlcmllcyBvZiBncmFwaGljYWwgZGlzcGxheXMKLSAgICAoVGhlc2UgZGlzcGxheXMgYXJlIHNlcmlhbCBhbmQgbm90IHN1aXRhYmxlIGZvciB1c2luZyBhIG5vcm1hbAotICAgIGZyYW1lYnVmZmVyIGNvbnNvbGUgb24gdGhlbSkKLSAgLSBhZGQgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIGluIG9yZGVyIHRvIFBPU1QgYW55IERTUHMgaW4gYSBib2FyZAotICAtIGltcHJvdmUgYW5kIGZpeCB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgTVBDOHh4IEZFQyBkcml2ZXI6Ci0gICAgMS4gVGhlIG5ldyA4N3ggYW5kIDg4eCBzZXJpZXMgb2YgcHJvY2Vzc29ycyBoYXZlIHR3byBGRUNzLAotICAgICAgIGFuZCB0aGUgbmV3IGRyaXZlciBzdXBwb3J0cyB0aGVtIGJvdGguCi0gICAgMi4gQW5vdGhlciBjaGFuZ2UgaW4gdGhlIDg3eC84OHggc2VyaWVzIGlzIHN1cHBvcnQgZm9yCi0gICAgICAgdGhlIFJNSUkgKFJlZHVjZWQgTUlJKSBpbnRlcmZhY2UuIEhvd2V2ZXIgbnVtZXJvdXMKLSAgICAgICBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIHNpbmNlIHRoZSBQSFlzCi0gICAgICAgYXJlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBsaW5lcy4gVGhhdCBtZWFucyB0aGF0Ci0gICAgICAgeW91IGhhdmUgdG8gYWRkcmVzcyB0aGVtIGNvcnJlY3RseSBvdmVyIHRoZSBNSUkKLSAgICAgICBpbnRlcmZhY2UuCi0gICAgMy4gV2Ugbm93IGNvcnJlY3RseSBtYXRjaCB0aGUgTUlJL1JNSUkgaW50ZXJmYWNlCi0gICAgICAgY29uZmlndXJhdGlvbiB0byB3aGF0IHRoZSBQSFkgcmVwb3J0cy4KLSAgLSBGaXggcHJvYmxlbSB3aGVuIHJlYWRpbmd0aGUgTUlJIHN0YXR1cyByZWdpc3Rlci4gRHVlIHRvIHRoZQotICAgIGludGVybmFsIGRlc2lnbiBvZiBtYW55IFBIWXMgeW91IGhhdmUgdG8gcmVhZCB0aGUgcmVnaXN0ZXIKLSAgICB0d2ljZS4gVGhlIHByb2JsZW0gaXMgbW9yZSBhcHBhcmVudCBpbiAxME1iaXQgbW9kZS4KLSAgLSBhZGQgbmV3IG1vZGUgIi5qZmZzMnMiIGZvciByZWFkaW5nIGZyb20gYSBOQU5EIGRldmljZTogaXQganVzdAotICAgIHNraXBzIG92ZXIgYmFkIGJsb2Nrcy4KLSAgLSBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciBWTEFOcyAoODAyLjFxKSwgYW5kIENEUCAoQ2lzY28KLSAgICBEaXNjb3ZlcnkgUHJvdG9jb2wpCi0gIC0gc29tZSBtaW5vciBwYXRjaGVzIC8gY2xlYW51cAotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI4IE1hciAyMDA0OgotICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyIGZhbWlseSBpbmNsdWRpbmcgTVBDODI0Ny84MjQ4LzgyNzEvODI3MgotICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyQURTIGV2YWx1YXRpb24gYm9hcmQgKGFub3RoZXIgZmxhdm91ciBvZiBNUEM4MjYwQURTKQotICAtIENoYW5nZSBjb25maWd1cmF0aW9uIG1ldGhvZCBmb3IgTVBDODI2MEFEUyBmYW1pbHkKLQotKiBhZGQgc3RhcnR1cCBjb2RlIHRvIGNsZWFyIHRoZSBCU1Mgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKLQotKiBGaXggaWYgLyBlbGlmIGhhbmRsaW5nIGJ1ZyBpbiBIVVNIIHNoZWxsCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMDoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBQYXRjaCBieSBNYXJrIEpvbmFzOiBSZW1vdmUgY29uZmlnLnRtcCBmaWxlcyBvbmx5IHdoZW4KLSAgdW5jb25maWd1cmluZyB0aGUgYm9hcmQKLQotKiBBZGFwdCBSTVUgYm9hcmQgZm9yIGJpZ2dlciBmbGFzaCBtZW1vcnkKLQotKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMyBNYXIgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIEtVUDRYIEJvYXJkCi0KLSogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE1hciAyMDA0Ci0gIEFkZCBSZWlzZXJmcyBzdXBwb3J0Ci0KLSogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjAgTWFyIDIwMDQKLSAgLSBBZGQgYXV0by1yZWxlYXNlIGZvciBTTVNDIExBTjkxYzExMSBkcml2ZXIKLSAgLSBBZGQgc2F2ZS9yZXN0b3JlIG9mIFBUUiBhbmQgUE5SIHJlZ3MgYXMgc3VnZ2VzdGVkIGluIGRhdGFzaGVldAotCi0qIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE5IE1hcmNoIDIwMDQKLSAgSW5jcmVhc2Ugc3BlZWQgb2Ygc2VjdG9yIHJlYWRzIGZyb20gU3lzdGVtQUNFLAotICBzaG9ydGVuIHBvbGwgdGltZW91dCBhbmQgcmVtb3ZlIGEgdXNlbGVzcyByZXNldAotCi0qIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE5IE1hciAyMDA0OgotICBNYWtlIEdpZ0UgUEhZIDEwMDBNYnBzIFNwZWVkL0R1cGxleCBkZXRlY3Rpb24gY29uZGl0aW9uYWwKLSAgKENPTkZJR19QSFlfR0lHRSkKLQotKiBQYXRjaCBieSBCcmFkIEtlbXAsIDE4IE1hciAyMDA0OgotICBwcmV2ZW50IG1hY2hpbmUgY2hlY2tzIGR1cmluZyBhIFBDSSBzY2FuCi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6Ci0gIEZpeCBzdHJpbmcgY2xlYW5pbmcgaW4gSURFIGlkZW50aWZpY2F0aW9uCi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6Ci0gIC0gVW5pZnkgdmlkZW8gbW9kZSBoYW5kbGluZyBmb3IgQ2hpcHMgJiBUZWNobm9sb2dpZXMgNjkwMDAgVmlkZW8KLSAgICBjaGlwIGFuZCBTaWxpY29uIE1vdGlvbiBTTUkgNzEyLzcxMC84MTAgVmlkZW8gY2hpcAotICAtIEFkZCBzZWxlY3Rpb24gb2YgdGhlIHZpZGVvIG91dHB1dCAoQ1JUIG9yIExDRCkgdmlhICd2aWRlb291dCcKLSAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlIFNpbGljb24gTW90aW9uCi0gIC0gUkVBRE1FIHVwZGF0ZQotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgotICBpbmNsdWRlL2NvbW1vbi5oIHR5cG8gZml4Ci0KLSogUGF0Y2hlcyBieSBUb2x1bmF5IE9ya3VuLCAxNyBNYXIgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgYmQtPmJpX2lpY19mYXN0W10gaW5pdGlhbGl6YXRpb24gdmlhIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGUgImkyY2Zhc3QiIChDT05GSUdfSTJDRkFTVCkKLSAgLSBBZGQgImkyY2Zhc3QiIHUtYm9vdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdXBwb3J0IGZvciBjc2IyNzIKLQotKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxNyBNYXIgMjAwNDoKLSAgSWdub3JlICdcMCcgY2hhcmFjdGVycyBpbiBjb25zb2xlIGlucHV0IGZvciB1c2Ugd2l0aCB0ZWxuZXQgYW5kCi0gIHRlbGNvIHBhZHMuCi0KLSogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxNyBNYXIgMjAwNDoKLSAgdHlwbyBmaXggZm9yIHN0cnN3YWIgcHJvdG90eXBlICNpZmRlZgotCi0qIFBhdGNoZXMgYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTYgTWFyIDIwMDQ6Ci0gIC0gc2hvdyBQQ0kgY2xvY2sgZnJlcXVlbmN5IG9uIE1QQzgyNjAgc3lzdGVtcwotICAtIGFkZCBGQ0NfUFNNUl9STUlJIGZsYWcgZm9yIEhpUDcgcHJvY2Vzc29ycwotICAtIGluIGRvX2pmZnMyX2ZzbG9hZCgpLCB0YWtlIGxvYWQgYWRkcmVzcyBmcm9tIGxvYWRfYWRkciBpZiBub3Qgc2V0Ci0gICAgZXhwbGljaXQsIHVwZGF0ZSBsb2FkX2FkZHIgb3RoZXJ3aXNlCi0gIC0gcmVwbGFjZWQgcHJpbnRmIGJ5IHB1dGMvcHV0cyB3aGVuIG5vIGZvcm1hdHRpbmcgaXMgbmVlZGVkCi0gICAgKHNtYWxsZXIgY29kZSBzaXplLCBmYXN0ZXIgZXhlY3V0aW9uKQotCi0qIFBhdGNoIGJ5IFBoaWxsaXBwZSBSb2JpbiwgMTYgTWFyIDIwMDQ6Ci0gIGF2b2lkIGRlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVyIGluIGxpYl9hcm0vYXJtbGludXguYwotCi0qIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IE1hciAyMDA0OgotICBGaXggQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGRvY3VtZW50YXRpb24KLQotKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNSBNYXIgMjAwNDoKLSAgSW5pdGlhbGl6ZSBiaV9vcGJmcmVxIHRvIHJlYWwgT1BCIGZyZXF1ZW5jeSB2aWEgZ2V0X09QQl9mcmVxKCkKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBNYXIgMjAwNDoKLSAgVXBkYXRlIENSRURJVFMgJiBNQUlOVEFJTkVSUyBmaWxlcyBmb3IgUFBDNDQwR1ggJiBPY290ZWEgcG9ydAotCi0qIEFkZCBzdGFydC11cCBkZWxheSB0byBtYWtlIHN1cmUgcG93ZXIgaGFzIHN0YWJpbGl6ZWQgYmVmb3JlCi0gIGF0dGVtcHRpbmcgdG8gc3dpdGNoIG9uIFVTQiBvbiBTWDEgYm9hcmQuCi0KLSogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxOCBNYXIgMjAwNDoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgWE0yNTAgYm9hcmQgKFBYQTI1NSkKLSAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04MjggYm9hcmQgKE1QQzgyODApCi0gIC0gQWRkIHN1cHBvcnQgZm9yIDMyIE1CIEZsYXNoIG9uIFBNODI1LzgyNgotICAtIG5ldyBTRFJBTSByZWZyZXNoIHJhdGUgZm9yIFBNODI1L1BNODI2Ci0gIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE01MjAgKE1QQzUyMDApCi0gIC0gcmVwbGFjZWQgUXVlcnkgYnkgSWRlbnRpZnkgY29tbWFuZCBpbiBDUFU4Ni9mbGFzaC5jCi0gICAgdG8gc3VwcG9ydCAyOEYxNjBGM0IKLQotKiBGaXggd3JhcCBhcm91bmQgcHJvYmxlbSB3aXRoIHVkZWxheSgpIG9uIEFSTTkyMFQKLQotKiBBZGQgc3VwcG9ydCBmb3IgTWFjcm9uaXggZmxhc2ggb24gVFJBQiBib2FyZAotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE1IE1hciAyMDA0OgotICBGaXggYnVmZmVyIG92ZXJmbG93IGluIElERSBpZGVudGlmaWNhdGlvbgotCi0qIEZpeCBwb3dlci1vZmYgb2YgTENEIGZvciBvdXQtb2YtYmFuZCB0ZW1wZXJhdHVyZXMgb24gTFdNT04gYm9hcmQKLQotKiBSZW1vdmUgcmVkdW5kYW5kICNkZWZpbmUgaW4gSWNlQ3ViZS5oCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjcgRmViIDIwMDQ6Ci0gIC0gQWRkaW5nIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBmb3IgQVQ5MVJNOTIwMAotICAtIE1hbnkgd2hpdGUgc3BhY2UgZml4ZXMgaW4gY3B1L2F0OTFybTkyMDAvaW50ZXJydXB0cy5jCi0KLSogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKLSAgc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgcmVsYXRlZCBjb2RlCi0KLSogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAxMiBNYXIgMjAwNDoKLSAgLSBGaXggR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IGZvciA0NDBHWAotICAtIEFkZCBHaWdhYml0IEV0aGVybmV0IFN1cHBvcnQgdG8gTUlJIFBIWSB1dGlsaXRpZXMKLQotKiBQYXRjaCBieSBCcmFkIEtlbXAsIDEyIE1hciAyMDA0OgotICBGaXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKLSAgLSBCZXR0ZXIgc3VwcG9ydCBmb3IgeDgveDE2IGltcGxlbWVudGF0aW9ucwotICAtIEFkZGVkIGZhaWx1cmUgZm9yIEFNRCBjaGlwcyBhdHRlbXB0aW5nIHRvIHVzZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQotICAtIEFkZGVkIGRlZmluZXMgZm9yIEFNRCBjb21tYW5kIGFuZCBhZGRyZXNzIGNvbnN0YW50cwotCi0qIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgTWFyIDIwMDQ6Ci0gIEZpeCBnZXRfZGVudGZyb21kaXIoKSB0byBjb3JyZWN0bHkgaGFuZGxlIGRlbGV0ZWQgZGVudHJpZXMKLQotKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgotICBSZW1vdmUgaGFyZCBjb2RlZCBuZXR3b3JrIHNldHRpbmdzIGluIFRJIE9NQVAxNjEwIEgyCi0gIGRlZmF1bHQgYm9hcmQgY29uZmlnCi0KLSogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMSBNYXIgMjAwNDoKLSAgYWRkIHN1cHBvcnQgZm9yIEFEUyBHcmFwaGljc0NsaWVudCsgYm9hcmQuCi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTEgTWFyIDIwMDQ6Ci0gIC0gYWRkIGJpdG1hcCBjb21tYW5kIGFuZCBzcGxhc2ggc2NyZWVuIHN1cHBvcnQgaW4gY2ZiIGNvbnNvbGUKLSAgLSBhZGQgW29wdGlvbmFsXSBvcmlnaW4gaW4gdGhlIGJpdG1hcCBkaXNwbGF5IGNvbW1hbmQKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMSBNYXIgMjAwNDoKLSAgRml4IG9jb3RlYSBib2FyZCBlYXJseSBpbml0IGludGVycnVwdCBzZXR1cC4KLQotKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxMSBNYXIgMjAwNDoKLSAgUmVtb3ZlIHJlZHVuZGFuZCBjb2RlOyBhZGQgIFBDSS1zcGVjaWZpYyBiaXRzIHRvIGluY2x1ZGUvbXBjODI2MC5oCi0KLSogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAwOSBNYXIgMjAwNAotICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgU1NWIEFETlAvRVNDMSAoTmlvcyBTb2Z0Y29yZSkKLQotKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDkgTWFyIDIwMDQ6Ci0gIGZpeCByZWNlbnQgYnVpbGQgZmFpbHVyZSBmb3IgU0ExMTAwIHRhcmdldAotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IE1hciAyMDA0OgotICBTdXBwb3J0IG5hdGl2ZSBpbnRlcnJ1cHQgbW9kZSBmb3IgdGhlIElCTTQ0MEdYLgotICBQcmV2aW91c2x5IGl0IHdhcyBydW5uaW5nIGluIDQ0MEdQIGNvbXBhdGliaWxpdHkgbW9kZS4KLQotKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDkgTWFyIDIwMDQ6Ci0gIEFkZGVkIEFSTSBJbnRlZ3JhdG9yIEFQLCBDUCBhbmQgVmVyc2F0aWxlIFBCOTI2RUotUyBSZWZlcmVuY2UKLSAgUGxhdGZvcm0gc3VwcG9ydC4KLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBNYXIgMjAwNDoKLSAgRG9uJ3Qgb3ZlcndyaXRlIHNlcnZlciBJUCBhZGRyZXNzIG9yIGJvb3QgZmlsZSBuYW1lCi0gIHdoZW4gdGhlIGJvb3Qgc2VydmVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMKLQotKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgotICBSZW1vdmVkIGNvbXBpbGUgdGltZSByZXN0cmljdGlvbiBvbiBDRkdfSTJDX1NQRUVEIGZvciBEUzEzMzggUlRDCi0KLSogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKLSAgRml4IGVhcmx5IGJvYXJkIGluaXRpYWxpemF0aW9uIGZvciBDb2dlbnQgQ1NCMjcyIGJvYXJkCi0KLSogUGF0Y2ggYnkgRWQgT2tlcnNvbiwgMyBNYXIgMjAwNDoKLSAgZml4IENGSSBmbGFzaCB3cml0ZXMgZm9yIGxpdHRsZSBlbmRpYW4gc3lzdGVtcwotCi0qIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwMSBNYXIgMjAwNDoKLSAgZ2VuZXJhbGl6ZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBNUEM1MjAwIHdpdGggYWNjb3JkaW5nCi0gIGNoYW5nZXMgdG8gSWNlQ3ViZS5oIGFuZCBUT1A1MjAwLmgKLSAgYWRkIEFtMjlMVjI1NiAyNTYgTUJpdCBGTEFTSCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkcwotICBhZGQgaW5mbyBhYm91dCBVU0IgYW5kIElERSB0byBSRUFETUUKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA0IE1hciAyMDA0OgotICBGaXggcHJvYmxlbXMgd2l0aCBHQ0MgMy4zLnggd2hpY2ggY2hhbmdlZCBoYW5kbGluZyBvZiBnbG9iYWwKLSAgdmFyaWFibGVzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybyAobm93IGluIC5ic3MgaW5zdGVhZCBvZgotICAuZGF0YSBhcyBiZWZvcmUpLgotCi0qIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMDIgTWFyIDIwMDQ6Ci0gIGFkZCBzdHJzd2FiKCkgdG8gZml4IElERSBMQkEgY2FwYWNpdHksIGZpcm13YXJlIGFuZCBtb2RlbCBudW1iZXJzCi0gIG9uIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMKLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwMiBNYXIgMjAwNDoKLSAgLSBSZW1vdmUgZ2V0X3RpY2tzKCkgZnJvbSBORlMgY29kZQotICAtIEFkZCB2ZXJpZmljYXRpb24gb2YgUlBDIHRyYW5zYWN0aW9uIElECi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDIgTWFyIDIwMDQ6Ci0gIGNsZWFudXAgZm9yIElERSBhbmQgVVNCIGRyaXZlcnMgZm9yIE1QQzUyMDAKLQotKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwMSBNYXIgMjAwNDoKLSAgT2NvdGVhOgotICAtIEFkZCBJQk0gUFBDNDQwR1ggUmVmIFBsYXRmb3JtIHN1cHBvcnQgKE9jb3RlYSkKLSAgICBPcmlnaW5hbCBjb2RlIGJ5IFBhdWwgUmV5bm9sZHMgPFBhdWxSZXlub2xkc0BsaHNvbHV0aW9ucy5jb20+Ci0gICAgQWRhcHRlZCB0byBVLUJvb3QgYW5kIDQ0MEdYIHBvcnQKLSAgNDQwZ3hfZW5ldC5jOgotICAtIEFkZCBncmFjaW91cyBoYW5kbGluZyBvZiBhbGwgRXRoZXJuZXQgUGluIFNlbGVjdGlvbnMgZm9yIDQ0MEdYCi0gIC0gQWRkIFJHTUlJIHNlbGVjdGlvbiBmb3IgQ2ljYWRhIENJUzgyMDEgR2lnYWJpdCBQSFkKLSAgcHBjNDQwLmg6Ci0gIC0gQWRkIG5lZWRlZCBiaXQgZGVmaW5pdGlvbnMKLSAgLSBGaXggZm9ybWF0dGluZwotCi0qIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDEgTWFyIDIwMDQ6Ci0gIEFkZCBQUEM0NDBHWCBwcmJkdjAgZGl2aWRlciB0byBmaXggbWVtb3J5IGNsb2NrIGNhbGN1bGF0aW9uLgotCi0qIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjcgRmViIDIwMDQKLSAgLSBhdm9pZCBwcm9ibGVtcyBmb3IgdGFyZ2V0cyB3aXRob3V0IE5GUyBkb3dubG9hZCBzdXBwb3J0Ci0KLSogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDI3IEZlYiAyMDA0OgotICAtIEFkZGVkIExCQTQ4IHN1cHBvcnQgKENPTkZJR19MQkE0OCAmIENGR182NEJJVF9MQkEpCi0gIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgcHJpbnRpbmcgaW4gdnNwcmludGYgKENGR182NEJJVF9WU1BSSU5URikKLSAgLSBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBzdHJ0b3VsIChDRkdfNjRCSVRfU1RSVE9VTCkKLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNyBGZWIgMjAwNDoKLSAgRml4IHJhcnBib290OiBhZGQgYXV0b2xvYWQgYnkgTkZTCi0KLSogUGF0Y2ggYnkgRGFuIEVpc2VuaHV0LCAyNiBGZWIgMjAwNDoKLSAgZml4IGZsYXNoX3dyaXRlIHJldHVybiB2YWx1ZSBpbiBzYXZlZW52Ci0KLSogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMwotICBleHBhbmQgY29uZmlnLm1rIHRvIGF2b2lkIHRyaWdyYXBoIHdhcm5pbmdzIG9uIE5JT1MKLQotKiBSZW5hbWUgIkJNUzIwMDMiIGJvYXJkIGludG8gIkhNSTEwIgotCi0qIFNYMSBwYXRjaGVzOiB1c2UgInNlcmlhbCMiIGZvciBVU0Igc2VyaWFsICM7IHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQKLSAgc3RvcmFnZTsgYXV0by1zZXQgY29uc29sZSBvbiBVU0IgcG9ydCAodXNpbmcgcHJlYm9vdCBjb21tYW5kKQotCi0qIEFkZCBzdXBwb3J0IGZvciBTWDEgbW9iaWxlIHBob25lOyBhZGQgc3VwcG9ydCBmb3IgVVNCLWJhc2VkIGNvbnNvbGUKLSAgKGVuYWJsZSB3aXRoICJzZXRlbnYgc3Rkb3V0IHVzYnR0eTsgc2V0ZW52IHN0ZGluIHVzYnR0eSIpCi0KLSogRml4IExPV0JPT1QgY29uZmlndXJhdGlvbiBmb3IgTVBDNTIwMCB3aXRoIEREUiBtZW1vcnkKLQotKiBGaXggU0RSQU0gdGltaW5ncyBmb3IgTElURTUyMDAgLyBJY2VDdWJlIGJvYXJkCi0KLSogSGFuZGxlIEF1dGktTURJWCAvIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBJTkNBLUlQCi0KLSogRml4IFVTQiBwcm9ibGVtcyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVhZCAwIGJ5dGVzCi0KLSogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjYgRmViIDIwMDQ6Ci0gIEZpeCBicm9rZW4gY29tcGlsZSBmb3IgWFBFRElURTFLIHRhcmdldC4KLQotKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI2IEZlYiAyMDA0OgotICBCdWcgZml4IGZvciBORlMgY29kZSBvbiBOSU9TIHRhcmdldHMKLQotKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAyNiBGZWIgMjAwNDoKLSAgQnJlYWsgdXAgU3lzdGVtQUNFIHJlYWRzIG9mIGxhcmdlIGJsb2NrIGNvdW50cwotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI2IEZlYiAyMDA0Ci0gIGFkZCBJREUgc3VwcG9ydCBmb3IgTVBDNTIwMAotCi0qIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI2IEZlYiAyMDA0OgotICBhZGQgYXV0b2xvYWQgdmlhIE5GUwotCi0qIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMKLSAgVXNlIG9mIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyBpbiBib2FyZC5jIGNvbnNpc3RlbnQgd2l0aCB1c2VzCi0gIGVsc2V3aGVyZSBpbiB0aGUgc291cmNlLgotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IEZlYiAyMDA0OgotICAtIFRpbWVvdXRzIGluIEZQR0EgY29kZSBzaG91bGQgYmUgYmFzZWQgb24gQ0ZHX0haCi0gIC0gTWlub3IgY2xlYW51cCBpbiBjb2RlIGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKLSAgQ2hhbmdlZCAiRGlyZWN0b3J5IEhpZXJhcmNoeSIgc2VjdGlvbiBpbiBSRUFETUUKLQotKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNSBGZWIgMjAwNDoKLSAgUmVkdWNlIGNvcHkgY291bnQgaW4gbmZzX3JlYWRfcmVwbHkoKSBvZiBORlMgY29kZQotCi0qIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAyNCBGZWIgMjAwNDoKLSAgTlM5NzUwIERldkJvYXJkIGFkZGVkCi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgRmViIDIwMDQKLSAgYWRkIFVTQiBzdXBwb3J0IGZvciBNUEM1MjAwCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6Ci0gIC0gZml4IE1JSSBjb21tYW5kcyB0byB1c2UgdmFsdWVzIGZyb20gbGFzdCBjb21tYW5kCi0KLSogUGF0Y2ggYnkgVG9yc3RlbiBEZW1rZSwgMjQgRmViIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciB0aGUgZVhhbGlvbiBwbGF0Zm9ybSAoU1BTVy04MjQwLCBGLTMwLCBGLTMwMCkKLQotKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMTkgRmViIDIwMDQ6Ci0gIEZpeGVzIGZvciBmb3IgT01BUDE2MTAgYm9hcmQ6Ci0gIC0gc2hpZnQgc29tZSBJUlEgc3BlY2lmaWMgY29kZSB0byBwbGF0Zm9ybS5TIGZpbGUKLSAgLSByZW1vdmUgZHVwbGljYXRld2F0Y2hkb2cgcmVzZXQgY29kZSBmcm9tIHN0YXJ0LlMKLQotKiBNYWtlIEF1dG8tTURJWCBTdXBwb3J0IGNvbmZpZ3VyYWJsZSBvbiBJTkNBLUlQIGJvYXJkCi0KLSogRml4IGxpY2Vuc2UgZm9yIG1raW1hZ2UgdG9vbAotCi0qIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI0IEZlYiAyMDA0OgotICBVcGRhdGUgTmV0Qm9vdEZpbGVYZmVyU2l6ZSBpbiBORlMgY29kZQotCi0qIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjQgRmViIDIwMDQ6Ci0gIGZpeCBwYWNrZXQgbGVuZ3RoIGluIE5GUyBjb2RlCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5LCAyMiBGZWIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIE5GUyBmb3IgZmlsZSBkb3dubG9hZAotCi0qIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMTcgRmViIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBTM0M0NEIwIHByb2Nlc3NvciBhbmQgREFWRSBCMiBib2FyZAotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgotICAtIEFkZCBzdXBwb3J0IGZvciBNSUkgY29tbWFuZHMgb24gQVQ5MVJNOTIwMCBib2FyZHMKLSAgLSBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBjb2RlCi0KLSogUGF0Y2ggYnkgUGV0ZXIgUnlzZXIsIDIwIEZlYiAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBNTDMwMCBwbGF0Zm9ybQotCi0qIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTcgRmViIDIwMDQ6Ci0gIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGZvciBOSU9TCi0KLSogUGF0Y2ggYnkgSm9zaCBGcnltYW4sIDE2IEZlYiAyMDA0OgotICBGaXggYnl0ZS1zd2FwcGluZyBmb3IgY2ZpX2ZsYXNoLmMgZm9yIGRpZmZlcmVudCBidXMgd2lkdGhzCi0KLSogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IEplYiAyMDA0OgotICBSZW1vdmUgZHVwbGljYXRlICJGUEdBIFN1cHBvcnQiIG5vdGVzIGZyb20gdGhlIFJFQURNRSBmaWxlCi0KLSogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgMTQgRmViIDIwMDQ6Ci0gIC0gdXBkYXRlIGJvYXJkL2VtayB0cmVlOyB1c2UgY29tbW9uIGZsYXNoIGRyaXZlcgotICAtIENvcnJlY3RlZCB0ZXN0ZWQgYml0cyBpbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBpbiBjcHUvbXBjNXh4eC90cmFwcy5jCi0gICAgW2FkYXB0ZWQgZm9yIG90aGVyIFBQQyBDUFVzIC0tIHdkXQotICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBNNDhUMDggb24gdGhlIEVWQUw1MjAwIGJvYXJkIGluIHJ0Yy9tazQ4dDU5LmMKLQotKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTMgRmViIDIwMDQ6Ci0gIENhbGwgc2hvd19ib290X3Byb2dyZXNzKCkgd2hlbmV2ZXIgUE9TVCAiRkFJTEVEIiBpcyBwcmludGVkLgotCi0qIFBhdGNoIGJ5IE5pc2hhbnQgS2FtYXQsIDEzIEZlYiAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDE2MTAgSDIgQm9hcmQKLSAgRml4ZXMgZm9yIGNwdS9hcm05MjZlanMvaW50ZXJydXB0LmMKLQkoYmFzZWQgb24gUmljaGFyZCBXb29kcnVmZidzIHBhdGNoIGZvciBhcm05MjUsIDE2IE9jdCAwMykKLSAgRml4IGZvciBhIHRpbWVyIGJ1ZyBpbiBPTUFQMTYxMCBJbm5vdmF0b3IKLSAgQWRkIHN1cHBvcnQgZm9yIENTMCAoUk9NKS9DUzMgKEZsYXNoKSBib290IGluIE9NQVAxNjEwIElubm92YXRvciBhbmQgSDIKLQotKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMTIgRmViIDIwMDQ6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIE5JT1MgdGltZXIgd2l0aCB2YXJpYWJsZSBwZXJpb2QgcHJlbG9hZCBjb3VudGVyIHZhbHVlCi0gIC0gcHJlcGFyZSBQT1NUIGZyYW1ld29yayBzdXBwb3J0IGZvciBOSU9TIHRhcmdldHMKLQotKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgRmViIDIwMDQ6Ci0gIGFkZCBQT1NUIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgYm9hcmQKLQotKiBQYXRjaCBieSBMYXVyZW50IE1vaGluLCAxMCBGZWIgMjAwNDoKLSAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBjb21tb24vdXNiLmMKLQotKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMCBGZWIgMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKLQotKiBQYXRjaCBieSBUaG9tYXMgRWxzdGUsIDEwIEZlYiAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgTkVUKzUwIENQVSBhbmQgTW9kTkVUNTAgYm9hcmQKLQotKiBQYXRjaCBieSBTYW0gU29uZywgMTAgRmViIDIwMDQ6Ci0gIEZpeCB0eXBvcyBpbiBjZmlfZmxhc2guYwotCi0qIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTAgRmViIDIwMDQKLSAgRml4ZWQgbG9uZyBkaXIgZW50cnkgc2xvdCBpZCBjYWxjdWxhdGlvbiBpbiBnZXRfdmZhdG5hbWUKLQotKiBQYXRjaCBieSBSb2JpbiBHaWxrcywgMTAgRmViIDIwMDQ6Ci0gIGFkZCAiaXRlc3QiIGNvbW1hbmQgKG9wZXJhdG9yczogLWVxLCAtbmUsIC1sdCwgLWd0LCAtbGUsIC1nZSwgPT0sCi0gICE9LCA8PiwgPCwgPiwgPD0sID49KQotCi0qIEZpeCBwcm9ibGVtIHdpdGggc2lkZSBlZmZlY3RzIGluIG1hY3JvcyBpbiBpbmNsdWRlL3VzYi5oCi0KLSogUGF0Y2ggYnkgRGF2aWQgQmVuc29uLCAxMyBOb3YgMjAwMzoKLSAgYnVnIDg0MTM1OCAtIGZpeCBURlRQIGRvd25sb2FkIHNpemUgbGltaXQKLQotKiBGaXhpbmcgYnVnIDg1MDc2ODoKLSAgaW1wcm9wZXIgZmx1c2hfY2FjaGUoKSBpbiBsb2FkX3NlcmlhbCgpCi0KLSogRml4aW5nIGJ1ZyA4MzQ5NDM6Ci0gIE1QQzg1NDAgLSBtaXNzaW5nIHZvbGF0aWxlIGRlY2xhcmF0aW9ucwotCi0qIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDA5IEZlYiAyMDA0OgotICBBZGQgc3VwcG9ydCBmb3IgWGlsaW54IFN5c3RlbUFDRSBjaGlwOgotICAtIE5ldyBmaWxlcyBjb21tb24vY21kX2FjZS5jIGFuZCBpbmNsdWRlL3N5c3RlbWFjZS5oCi0gIC0gSG9vayBzeXN0ZW1hY2Ugc3VwcG9ydCBpbnRvIGNtZF9mYXQgYW5kIHRoZSBwYXJ0aXRpb24gbWFuYWdlcgotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IEZlYiAyMDA0OgotICBBZGQgYmlfb3BiZnJlcSAmIGJpX2lpY19mYXN0IHRvIDQ0MEdYIGJkX2luZm8gYXMgbmVlZGVkIGZvciBMaW51eAotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IEZlYiAyMDA0OgotICBvIDQ0MEdYOgotICAgIC0gRml4IFBDSSBJbmRpcmVjdCBhY2Nlc3MgZm9yIHR5cGUgMSBjb25maWcgY3ljbGVzIHdpdGggcHBjNDQwLgotICAgIC0gQWRkIHBoeW1vZGUgZm9yIDQ0MCBlbmV0Ci0gICAgLSBmaXggcGNpIHByZSBpbml0Ci0gIG8gWFBlZGl0ZTFLOgotICAgIC0gQ2hhbmdlIGJvYXJkX3ByZV9pbml0IHRvIGJvYXJkX2Vhcmx5X2luaXRfZgotICAgIC0gQWRkIHVzZXIgZmxhc2ggdG8gYnVzIGNvbnRyb2xsZXIgc2V0dXAKLSAgICAtIEZpeCBwY2kgcHJlIGluaXQKLSAgICAtIEZpeCBpc19wY2lfaG9zdCB0byBjaGVjayBHUElPIGZvciBtb25hcmNoIGJpdAotICAgIC0gRm9yY2UgeHBlZGl0ZTFrIHRvIHBjaSBjb252ZW50aW9uYWwgbW9kZSAodmlhICNkZWZpbmUgb3B0aW9uKQotCi0qIFBhdGNoIGJ5IEJyYWQgS2VtcCwgNCBGZWIgMjAwNDoKLSAgLSBoYW5kbGUgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBpcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBQQ0kgc2NhbnMKLSAgICBvbiA4Mnh4IHByb2Nlc3NvcnMuCi0gIC0gZGVmaW5lIHRoZSByZWdpc3RlcnMgdXNlZCBpbiB0aGUgSU1NUiBieSB0aGUgUENJIHN1YnN5c3RlbS4KLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMyBGZWIgMjAwNDoKLSAgY3B1L21wYzV4eHgvc3RhcnQuUzogY29weSBNQkFSIGludG8gU1BSMzExCi0KLSogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAzIEZlYiAyMDA0OgotICBGaXggY29weSAmIHBhc3RlIGVycm9yIGluIGNwdS9tcGM4MjYwL3BjaS5jCi0KLSogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI0IEphbiAyMDA0OgotICBGaXggdHlwbyBpbiBjcHUvbXBjNXh4eC9wY2lfbXBjNTIwMC5jCi0KLSogQWRkIEF1dG8tTURJWCBzdXBwb3J0IGZvciBJTkNBLUlQCi0KLSogU29tZSBjb2RlIGNsZWFudXAKLQotKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMTAgRmViIDIwMDQ6Ci0gIEZpeGVzIGZvciBDb2xkRmlyZSBwb3J0Ci0KLSogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxMSBGZWIgMjAwNDoKLSAgRml4IENGSSBmbGFzaCBkcml2ZXIgcHJvYmxlbXMKLQotKiBNYWtlIHN1cmUgdG8gdXNlIGEgYnVzIGNsb2NrIGRpdmlkZXIgb2YgMiBvbmx5IHdoZW4gcnVubmluZyBUUU04eHhNCi0gIG1vZHVsZXMgYXQgQ1BVIGNsb2NrIGZyZXF1ZW5jaWVzIGFib3ZlIDY2IE1Iei4KLQotKiBPcHRpbWl6ZSBmbGFzaCBwcm9ncmFtbWluZyBzcGVlZCBmb3IgTFdNT04gKGJ5IGFub3RoZXIgMTAwJSA6LSkKLQotKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAzIEZlYiAyMDA0OgotICAtIENoYW5nZWQgdGhlIGluY29ycmVjdCBGQVQxMkJVRlNJWkUKLSAgLSBkYXRhX2JlZ2luIGluIGZzZGF0YSBjYW4gYmUgbmVnYXRpdmUuIENoYW5nZWQgaXQgdG8gYmUgc2hvcnQuCi0KLSogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMwIEphbiAyMDA0OgotICAxOiAtIGJvYXJkL2FsdGVyYS9jb21tb24vZmxhc2guYzpmbGFzaF9lcmFzZSgpOgotICAgICAgIG8gYWxsb3cgaW50ZXJydXB0cyBiZWZvciBnZXRfdGltZXIoKSBjYWxsCi0gICAgICAgbyBjaGVjay11cCBlYWNoIGVyYXNlZCBzZWN0b3IgYW5kIGF2b2lkIHVuZXhwZWN0ZWQgdGltZW91dHMKLSAgICAgLSBib2FyZC9hbHRlcmEvZGsxYzIwL2RrMXMxMC5jOmJvYXJkX2Vhcmx5X2luaXRfZigpOgotICAgICAgIG8gZW5jbG9zZSBzZXZlbnNlZ19zZXQoKSBpbiBjcHAgY29uZGl0aW9uCi0gICAgIC0gcmVtb3ZlIHRoZSBBU01JIGNvbmZpZ3VyYXRpb24gZm9yIERLMVMxMF9zdGFuZGFyZF8zMiAobmV2ZXIgcHJlc2VudCkKLSAgICAgLSBmaXggc29tZSB0eXBlZCBpbiBtaXN0YWtlcyBpbiB0aGUgTklPUyBkb2N1bWVudGF0aW9uCi0gIDI6IC0gc3BsaXQgREsxQzIwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKLSAgICAgICBvIHR3byBuZXcgZmlsZXMgZm9yIGVhY2ggTklPUyBDUFUgZGVzY3JpcHRpb24KLSAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMUMyMC5oCi0gIDM6IC0gc3BsaXQgREsxUzEwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKLSAgICAgICBvIHR3byBuZXcgZmlsZXMgZm9yIGVhY2ggTklPUyBDUFUgZGVzY3JpcHRpb24KLSAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMVMxMC5oCi0gIDQ6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3Ryb25peCBMaW51eCBEZXZlbG9wbWVudCBLaXQKLSAgICAgICBOSU9TIENQVSBjb25maWd1cmF0aW9uIGF0IHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCi0gICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQotICA1OiAtIEFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAotICAgICAgIFN0cmF0aXggRWRpdGlvbiAoREstMVMxMCkKLSAgNjogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgU2VyaWFsIFBlcmlwaGFyZWwgSW50ZXJmYWNlIChTUEkpCi0gICAgICAgKG1hc3RlciBvbmx5KQotICA3OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgY29tbW9uIFUtQm9vdCBTUEkgZnJhbWV3b3JrIGF0Ci0gICAgICAgUlRDIGRyaXZlciBEUzEzMDYKLQotKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMjggSmFuIDIwMDQ6Ci0gIEZpeCBmbGFzaCBwcm90ZWN0aW9uL2xvY2tpbmcgaGFuZGxpbmcgZm9yIE9NQVAxNjEwIGlubm92YXRvciBib2FyZC4KLQotKiBQYXRjaCBieSBSb2xmIFBldWtlcnQsIDI4IEphbiAyMDA0OgotICBmaXggZmxhc2ggd3JpdGUgcHJvYmxlbXMgb24gQ1NCMjI2IGJvYXJkICh3cml0ZSB3aXRoIDMyIGJpdCBidXMgd2lkdGgpCi0KLSogUGF0Y2hlcyBieSBNYXJrIEpvbmFzLCAxNiBKYW4gMjAwNDoKLSAgLSBmaXggcm91bmRpbmcgZXJyb3Igd2hlbiBjYWxjdWxhdGluZyBiYXVkcmF0ZXMgZm9yIE1QQzUyMDAgUFNDcwotICAtIG1ha2Ugc3VyZSBDRkdfUkFNQk9PVCBhbmQgQ0ZHX0xPV0JPT1QgYXJlIG5vdCBlbmFibGVkIGF0IHRoZSBzYW1lCi0gICAgdGltZSB3aGljaCBpcyBub3Qgc3VwcG9ydGVkCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjYgSmFuIDIwMDQ6Ci0gIEFsbG93IGJ6aXAyIGNvbXByZXNzaW9uIGZvciBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGJvYXJkcwotCi0qIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMjEgSmFuIDIwMDQ6Ci0gIEFkZCBzdXBwb3J0IGZvciBDRkkgZmxhc2ggZHJpdmVyIGZvciBib3RoIHRoZSBJbnRlbCBhbmQgdGhlIEFNRAotICBjb21tYW5kIHNldHMuCi0KLSogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjAgSmFuIDIwMDQ6Ci0gIEZpeCBwY2kgYnJpZGdlIGF1dG8gZW51bWVyYXRpb24gb2Ygc2libGluZyBwMnAgYnJpZGdlcy4KLQotKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMiBKYW4gMjAwNDoKLSAgQWRkIHNvbWUgZGVsYXlzIGFzIG5lZWRlZCBmb3IgSW50ZWwgTFhUOTcxQSBQSFkgc3VwcG9ydAotCi0qIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAwOSBKYW4gMjAwNDoKLSAgLSBhdm9pZCB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgYHBpb3AnIGluIGJvYXJkL2FsdGVyYS9jb21tb24vc2V2ZW5zZWcuYwotICAtIG1ha2UgREsxQzIwIGJvYXJkIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBBU01JIGNvbmZvcm0gdG8KLSAgICBkb2N1bWVudGF0aW9uCi0KLSogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDkgSmFuIDIwMDQ6Ci0KLSAgQVJNIG1lbW9yeSBsYXlvdXQgZml4ZXM6IHRoZSBhYm9ydC1zdGFjayBpcyBub3cgc2V0IHVwIGluIHRoZQotICBjb3JyZWN0IFJBTSBhcmVhLCBhbmQgdGhlIEJTUyBpcyB6ZXJvZWQgb3V0IGFzIGl0IHNob3VsZCBiZS4KLQotICBGdXJ0aGVybW9yZSwgdGhlIG1hZ2ljIHZhcmlhYmxlcyAnYXJtYm9vdF9lbmQnIGFuZCAnYXJtYm9vdF9lbmRfZGF0YScKLSAgb2YgdGhlIGxpbmtlciBzY3JpcHRzIGFyZSByZXBsYWNlZCBieSAnX19ic3Nfc3RhcnQnIGFuZCAnX2VuZCcsCi0gIHJlc3AuLCB3aGljaCBpcyBhIGZ1cnRoZXIgc3RlcCB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgZGlmZmVyZW5jZXMKLSAgYmV0d2VlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIENQVSBhcmNoaXRlY3R1cmVzLgotCi0qIFBhdGNoIGJ5IGxpYW5nIGEgbGVpLCA5IEphbiAyMDA0OgotICBGaXggSW50ZWwgMjhGMTI4SjMgSUQgaW4gaW5jbHVkZS9mbGFzaC5oCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDkgSmFuIDIwMDQ6Ci0gIGFkZCBzdXBwb3J0IGZvciBUQjAyMjkgYm9hcmQgKE5FQyBWUjQxMzEgTUlQUyBwcm9jZXNzb3IpCi0KLSogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBEZWMgMjAwMzoKLSAgY2hhbmdlZCBleHRlcm4gX19pbmxpbmVfXyBpbnRvIHN0YXRpYyBfX2lubGluZV9fIGluCi0gIGluY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaAotCi0qIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDMwIERlYyAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgSUJNIFBQQzQ0MEdYLiBNdWx0aXBsZSBFTUFDIEV0aGVybmV0IGRldmljZXMsCi0gIHNlbGVjdCBNREkgcG9ydCBiYXNlZCBvbiBlbmFibGVkIEVNQUMgZGV2aWNlLgotICBBZGQgc3VwcG9ydCBmb3IgWEVTIEluYyA8aHR0cDovL3d3dy54ZXMtaW5jLmNvbT4gWFBlZGl0ZTEwMDAgNDQwR1gKLSAgYmFzZSBQclBNQyBib2FyZC4KLQotKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDE1IERlYyAyMDAzOgotICBtYWRlIENPTkZJR19TSUxFTlRfQ09OU09MRSB1c2FibGUgb24gYWxsIGFyY2hpdGVjdHVyZXMKLQotKiBEaXNhYmxlIGRhdGUgY29tbWFuZCBvbiBUUU04NjZNIC0gdGhlcmUgaXMgbm8gUlRDIG9uIE1QQzg2NgotCi0qIEZpeCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyBmb3IgbG93IENQVSBjbG9ja3MKLQotKiBJbXBsZW1lbnQgYWRhcHRpdmUgU0RSQU0gdGltaW5nIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gYWN0dWFsIENQVQotICBjbG9jayBmcmVxdWVuY3kgZm9yIElOQ0EtSVA7IGZpeCBwcm9ibGVtIHdpdGggYm9hcmQgaGFuZ2luZyB3aGVuCi0gIHN3aXRjaGluZyBmcm9tIDE1ME1IeiB0byAxMDBNSHoKLQotKiBBZGQgUENNQ0lBIENTIHN1cHBvcnQgZm9yIEJNUzIwMDMgYm9hcmQKLQotKiBBZGQgdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgKHNvIGZhciBvbmx5IFRRTTg2Nk0pOgotICBzZWUgZG9jL1JFQURNRS5NUEM4NjYgZm9yIGRldGFpbHM7Ci0gIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciAiU0lVNCIgYW5kICJTSVU5IiBzaWxpY29uIGJ1Z3Mgb24gTVBDODY2OwotICBjYWxjdWxhdGUgQ1BVIGNsb2NrIGZyZXF1ZW5jeSBmcm9tIFBMTCByZWdpc3RlciB2YWx1ZXMuCi0KLSogQWRkIHN1cHBvcnQgZm9yIDEyOCBNQiBSQU0gb24gVFFNOHh4TC9NIG1vZHVsZXMKLQotKiBGaXggUFMvMiBrZXlib2FyZCBwcm9ibGVtIGNhdXNlZCBieSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHZhcmlhYmxlCi0gIHBvaW50aW5nIHRvIGEgbG9jYXRpb24gaW4gZmxhc2gKLQotKiBGaXggSU5DQS1JUCBjbG9jayBjYWxjdWxhdGlvbjogNDAwLzMgPSAxMzMuMyBNSHosIG5vdCAxMzAuCi0KLSogVGhlIFBTLzIgbXV4IG9uIHRoZSBCTVMyMDAzIGJvYXJkIG5lZWRzIDQ1MCBtcyBhZnRlciBwb3dlciBvbgotICBiZWZvcmUgd2UgY2FuIGFjY2VzcyBpdDsgYWRkIGRlbGF5IGluIGNhc2Ugd2UgYXJlIGZhc3RlciAod2l0aCBubwotICBDRiBjYXJkIGluc2VydGVkKQotCi0qIENsZWFudXAgb2Ygc29tZSBpbml0IGZ1bmN0aW9ucwotCi0qIE1ha2Ugc3VyZSBTQ0MgRXRoZXJuZXQgaXMgYWx3YXlzIHN0b3BwZWQgYnkgdGhlIHRpbWUgd2UgYm9vdCBMaW51eAotICB0byBhdm9pZCBMaW51eCBjcmFzaGVzIGJ5IGVhcmx5IHBhY2tldHMgY29taW5nIGluLgotCi0qIEFjY2VsZXJhdGUgZmxhc2ggYWNjZXNzZXMgb24gTFdNT04gYm9hcmQgYnkgdXNpbmcgYnVmZmVyZWQgd3JpdGVzCi0KLSogRml4IHR5cG8gaW4gTWFrZWZpbGU7Ci0gIGZpeCBwcm9ibGVtIHdpdGggUEFSVE5VTSBkZXRlY3Rpb24KLQotKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDkgSmFuIDIwMDQ6Ci0gIC0gYWRkIFJUQyBzdXBwb3J0IGZvciBNUEM1MjAwIGJhc2VkIGJvYXJkcyAocmVxdWlyZXMgUlRDX1hUQUwpCi0KLSogQWRkIHN1cHBvcnQgZm9yIElERSBMRUQgb24gQk1TMjAwMyBib2FyZAotICAoZXhjbHVzaXZlIHdpdGggc3RhdHVzIExFRCEpCi0KLSogQWRkIHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgKHVzZWQgd2l0aCBQUy8yIG11bHRpcGxleG9yIG9uCi0gIEJNUzIwMDMgYm9hcmQpCi0KLSogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgNCBKYW4gMjAwNCArIDcgSmFuIDIwMDQ6Ci0gIEFkZCBjb21tb24gZmlsZXMgZm9yICJlbWsiIGJvYXJkcwotCi0qIEFkZCBhIGNvbW1vbiBnZXRfcmFtX3NpemUoKSBmdW5jdGlvbiBhbmQgbW9kaWZ5IHRoZSB0aGUKLSAgYm9hcmQtc3BlY2lmaWMgZmlsZXMgdG8gaW52b2tlIHRoYXQgY29tbW9uIGltcGxlbWVudGF0aW9uLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjE6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogU2V0IGRlZmF1bHQgY2xvY2sgZm9yIElOQ0EtSVAgdG8gMTUwIE1IegotCi0qIE1ha2UgQk1TMjAwMyB1c2UgYSBzZXBhcmF0ZSBjb25maWcgZmlsZSB0byBhdm9pZCAjaWZkZWYgbWVzczsKLSAgYWRkIEkyQyBzdXBwb3J0OyBhZGQgc3VwcG9ydCBmb3IgRFMxMzM3IFJUQwotCi0qIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCAgZm9yIEJNUzIwMDMgYm9hcmQKLQotKiBBZGQgc3VwcG9ydCBmb3Igc3RhdHVzIExFRCBvbiBCTVMyMDAzIGJvYXJkCi0KLSogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMiBKYW4gMjAwNDoKLSAgQWRkIHN1cHBvcnQgZm9yIHRoZSBOaW9zIEFjdGl2ZSBTZXJpYWwgTWVtb3J5IEludGVyZmFjZSAoQVNNSSkKLSAgb24gQ3ljbG9uZSBkZXZpY2VzCi0KLSogUGF0Y2ggYnkgQW5kcmVhIE1hcnNvbiwgMTYgRGVjIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciB0aGUgUFBDaGFtZWxlb24gTUUgYW5kIEhJIG1vZHVsZXMKLQotKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMiBEZWMgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIERVRVQgQURTIGJvYXJkIChNUEM4N3gvODh4KQotCi0qIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTUgRGVjIDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciBjcmFtZnMgKHVzZXMgSkZGUzIgY29tbWFuZCBpbnRlcmZhY2UpCi0KLSogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDExIERlYyAyMDAzOgotICAtIG1vcmUgZG9jdW1lbnRhdGlvbiBmb3IgTklPUyBwb3J0Ci0gIC0gbmV3IHN0cnVjdCBuaW9zX3Bpb190LCBzdHJ1Y3Qgbmlvc19zcGlfdAotICAtIFJlY29uZmlndXJhdGlvbiBmb3IgTklPUyBEZXZlbG9wbWVudCBLaXQgREsxQzIwOgotICAgIG8gbW92ZSBib2FyZCByZWxhdGVkIGNvZGUgZnJvbSBib2FyZC9kazFjMjAKLSAgICAgIHRvIGJvYXJkL2FsdGVyYS9kazFjMjAKLSAgICBvIGNyZWF0ZSBhIG5ldyBjb21tb24gc291cmNlIHBhdGggYm9hcmQvYWx0ZXJhL2NvbW1vbgotICAgICAgYW5kIG1vdmUgZ2VuZXJpYyBmbGFzaCBhY2Nlc3Mgc3R1ZmYgaW50byBpdAotICAgIG8gY2hhbmdlL2V4cGFuZCBjb25maWd1cmF0aW9uIGZpbGUgREsxQzIwLmgKLSAgLSBBZGQgc3VwcG9ydCBmb3IgTklPUyBEZXZlbG9wbWVudCBLaXQgREsxUzEwCi0gIC0gQWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgTklPUyBzeXN0ZW1zCi0gIC0gQWRkIGR1YWwgNy1zZWdtZW50IExFRCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBEZXZLaXRzCi0KLSogUGF0Y2ggYnkgUm9uZW4gU2hpdHJpdCwgMTAgRGVjIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCBEQjY0MzYwIC8gREI2NDQ2MCBkZXZlbG9wbWVudCBib2FyZHMKLQotKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMCBEZWMgMjAwMzoKLSAgZml4IGRlcGVuZGVuY3kgcHJvYmxlbSBpbiBleGFtcGxlcy9NYWtlZmlsZQotCi0qIFBhdGNoIGJ5IERlbmlzIFBldGVyLCA4IERlYyAyMDAzCi0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBQQVRJIGJvYXJkIChNUEM1NTUpCi0gIC0gYWRkIFNQSSBzdXBwb3J0IGZvciB0aGUgTVBDNXh4Ci0KLSogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDggRGVjIDIwMDM6Ci0gIGFkZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgQ09ORklHX1NFUklBTF9UQUcgYW5kIENPTkZJR19SRVZJU0lPTl9UQUcKLSAgdG8gcGFzcyBBVEFHX1NFUklBTCBhbmQgQVRBR19SRVZJU0lPTiwgcmVzcC4sIHRvIHRoZSBBUk0gdGFyZ2V0OwotICBjbGVhbnVwIHNvbWUgcmVkdW5kYW5kICNkZWZpbmVzCi0KLSogUGF0Y2ggYnkgQW5kcukgU2Nod2FyeiwgOCBEZWMgMjAwMzoKLSAgZml4ZXMgZm9yIERhdmljb20gRE05MTAyQSBFdGhlcm5ldCBDaGlwICgjZGVmaW5lIENPTkZJR19UVUxJUF9GSVhfREFWSUNPTSk6Ci0gIC0gVFggYW5kIFJYIGRlc2tyaXB0b3JzIG11c3QgYmUgcXVhZC13b3JkIGFsaWduZWQKLSAgLSBkb2VzIG5vdCB3b3JrIHdpdGggb25seSBvbmUgVFggZGVza3JpcHRvcgotICAtIHN0YW5kYXJkIHJlc2V0IG1ldGhvZCBkb2VzIG5vdCB3b3JrCi0KLSogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggRGVjIDIwMDM6Ci0gIGFkZCBSVEw4MTM5IGV0aGVybmV0IGRyaXZlcgotCi0qIFBhdGNoZXMgYnkgRWQgT2tlcnNvbiwgMDcgRGVjIDIwMDM6Ci0gIC0gZml4IGV0aGVybmV0IGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgotICAtIGV4dGVuZCBtZW1zZXR1cC5TIGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gQkUgYW5kIExFIG1vZGVzCi0KLSogTWlub3IgY29kZSBjbGVhbnVwIChjb2Rpbmcgc3R5bGUpCi0KLSogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDMwIERlYyAyMDAzOgotICAtIGNwdS9tcGM1eHh4L2ZlYy5jOiBhZGRlZCBDT05GSUdfUEhZX0FERFIsIGFkZGVkIENPTkZJR19QSFlfVFlQRSwKLSAgLSBhZGRlZCBDT05GSUdfUEhZX0FERFIgdG8gaW5jbHVkZS9jb25maWdzL0ljZUN1YmUuaCwKLSAgLSB0dXJuZWQgZGVidWcgcHJpbnQgb2YgUEhZIHJlZ2lzdGVycyBpbnRvIGEgZnVuY3Rpb24gKGNhbGxlZCBpbiB0d28gcGxhY2VzKQotICAtIGFkZGVkIHN1cHBvcnQgZm9yIEVNSyBNUEM1MjAwIGJhc2VkIG1vZHVsZXMKLQotKiBGaXggTVBDOHh4IFBMUFJDUl9NRkRfU0hJRlQgdHlwbwotCi0qIEFkZCBzdXBwb3J0IGZvciBUUU04NjZNIG1vZHVsZXMKLQotKiBGaXhlcyBmb3IgVFFNODU1TSB3aXRoIDQgTUIgZmxhc2ggKEFtMjlETDE2MyA9IF9ub18gbWlycm9yIGJpdCBmbGFzaCkKLQotKiBGaXggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MKLQotKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjggRGVjIDIwMDM6Ci0gIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmQKLQotKiBNYWtlIENQVSBjbG9jayBvbiBJQ0EtSVAgYm9hcmQgY29udHJvbGxhYmxlIGJ5IGEgImNwdWNsayIKLSAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggY2FuIHNldCB0byAiMTAwIiwgIjEzMyIsIG9yICIxNTAiLiBUaGUKLSAgQ1BVIGNsb2NrIHdpbGwgYmUgY29uZmlndXJlZCBhY2NvcmRpbmdseSB1cG9uIG5leHQgcmVib290LiBPdGhlcgotICB2YWx1ZXMgYXJlIGlnbm9yZWQuIEluIGNhc2Ugb2YgYW4gaW52YWxpZCBvciB1bmRlZmluZWQgImNwdWNsayIKLSAgdmFsdWUsIHRoZSBjb21waWxlLXRpbWUgZGVmYXVsdCBDUFUgY2xvY2sgc3BlZWQgd2lsbCBiZSB1c2VkLgotCi0qIEVuYWJsZSBRdWFkLVVBUlQgb24gQk1TMjAwMyBib2FyZCAoaW5pdGlhbGl6ZSB0aGUgUENNQ0lBIG1lbW9yeQotICB3aW5kb3cgdGhhdCBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgVUFSVCByZWdpc3RlcnMgYnkgdGhlIExpbnV4IGRyaXZlcikKLQotKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjAgRGVjIDIwMDM6Ci0gIEZpeCBjbG9jayBjYWxjdWxhdGlvbiBmb3IgdGhlIE1QQzUyMDAgZm9yIGhpZ2hlciBjbG9jayBmcmVxdWVuY2llcwotICAoYWJvdmUgMioqMzIgLyAxMCA9IDQyOS41IE1IeikuCi0KLSogRml4IENPTkZJR19QTExfUENJX1RPX01FTV9NVUxUSVBMSUVSIGRpdmlkZXIgZXJyb3IgaW4gU1A4MjQwIGNvbmZpZ3VyYXRpb24KLQotKiBGaXggSWNlQ3ViZSBDTEtJTiBjb25maWd1cmF0aW9uIChpdCdzIDMzLjAwMDAwME1IeikKLQotKiBBZGQgbmV3IGNvbmZpZ3VyYXRpb24gZm9yIEljZUN1YmUgYm9hcmQgd2l0aCBERFIgbWVtb3J5Ci0KLSogVXBkYXRlIFRSQUIgbWVtb3J5IGNvbmZpZ3VyYXRpb25zCi0KLSogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIElOQ0EtSVAgYm9hcmQKLQotKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMDkgRGVjIDIwMDM6Ci0gIC0gQlVCSU5HQTQwNUVQOiBjaGFuZ2VkIGZsYXNoIGRyaXZlciB0byBwcm90ZWN0IHRvcCBzZWN0b3IgY29udGFpbmluZwotICAgIGZpcnN0IGluc3RydWN0aW9uLgotICAtIEJVQklOR0E0MDVFUDogY29uZmlndXJlZCAiZWVwcm9tIiBjb21tYW5kIHRvIGFjY2VzcyBib290IGNvbmZpZyBFRVBST00uCi0gIC0gQlVCSU5HQTQwNUVQOiBmaXhlZCBQTEwgaW5pdCAoaW5pdCBjaGlwIHNlbGVjdHMgYmVmb3JlIEZQR0EvTlZSQU0gYWNjZXNzKS4KLSAgLSA0MDVFUDogZml4ZWQgU1BELWJhc2VkIFNEUkFNIGluaXQgKG9ubHkgdXNlIGJhbmtzIDAgYW5kIDEpLgotICAtIDQwNUVQOiBhZGRlZC9maXhlZCBzdXBwb3J0IGZvciAicmVnaW5mbyIgY29tbWFuZC4KLSAgLSA0eHg6IHJlbW92ZWQgc3B1cmlvdXMgTUlJIGVycm9yIG1lc3NhZ2VzIG9uICJtaWkgaW5mbyIgY29tbWFuZC4KLQotKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBOb3YgMjAwMzoKLSAgYWRkIHN1cHBvcnQgZm9yIENvbGRGaXJlIENQVQotICBhZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTTUyNzJDMyBhbmQgTTUyODJFVkIgYm9hcmRzCi0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgTm92IDIwMDM6Ci0gIC0gYWRkIGEgcmV0dXJuIHZhbHVlIGZvciB0aGUgZnBnYSBjb21tYW5kCi0gIC0gYWRkIGlkZV9wcmVpbml0KCkgZnVuY3Rpb24gY2FsbGVkIGluIGlkZV9pbml0IGlmIENPTkZJR19JREVfUFJFSU5JVAotICAgIGlzIGRlZmluZWQuIElmIGlkZV9wcmVpbml0IGZhaWxzLCBpZGVfaW5pdCBpcyBhYm9ydGVkLgotICAtIGZpeCBhbiBlbmRpYW5lc3MgcHJvYmxlbSBpbiBmYXQuaAotCi0qIFBhdGNoIGJ5IFdvbHRlciBLYW1waHVpcywgMDUgRGVjIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBTTk1DJ3MgUVM4NTAvUVM4MjMvUVM4NjBUIGJvYXJkcwotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDMgRGVjIDIwMDM6Ci0gICJyZXZpdmUiIFUtQm9vdCBzdXBwb3J0IGZvciBvbGQgTW90b3JvbGEgTVBDODYwQURTIGJvYXJkCi0KLSogUGF0Y2ggYnkgQ2FtKGlsbz8pLCAwMyBEZWMgMjAwMzoKLSAgbWFrZSBleGFtcGxlcyBidWlsZCBldmVuIHdpdGggYnJva2VuIE1vbnRhdmlzdGEgb2JqY29weQotCi0qIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyNyBOb3YgMjAwMzoKLSAgZml4IGNvbnZlcnNpb24gcHJvYmxlbSB3aXRoICJib290cmV0cnkiIGV2aXJvbm1lbnQgdmFyaWFibGUKLQotKiBQYXRjaCBieSBBbmRyZSBTY2h3YXJ6LCAyNCBOb3YgMjAwMzoKLSAgYWRkIHN1cHBvcnQgZm9yIG12Ymx1ZSAobXZCbHVlTFlOWCBhbmQgbXZCbHVlQk9YKSBib2FyZHMKLQotKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjEgTm92IDIwMDM6Ci0gIHNldCBaTUlJIGJyaWRnZSBzcGVlZCBvbiA0NDAKLQotKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBOb3YgMjAwMzoKLSAgRml4IG1pc21hdGNoZWQgI2lmZGVmIC8gI2VuZGlmIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9oYXJkd2FyZS5oCi0KLSogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDE0IE5vdiAyMDAzOgotICAtIGJvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYwotICAgICogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEJaSVAyIGNvbXByZXNzZWQgaW1hZ2VzCi0gICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQotICAtIGJvYXJkL21wbC9jb21tb24vZmxhc2guYwotICAgICogcmVwb3J0IGNvcnJlY3QgZXJyb3JzIHRvIHVwcGVyIGxheWVycwotICAgICogY2hlY2sgdGhlIGVyYXNlIGZhaWwgYW5kIFZQUCBsb3cgYml0cyBpbiBzdGF0dXMgcmVnCi0gIC0gYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCi0gIC0gYm9hcmQvbXBsL3ZjbWE5L2ZsYXNoLmMKLSAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCi0gIC0gY29tbW9uL2NtZF91c2IuYwotICAgICogZml4IHR5cG8gaW4gY29tbWVudAotICAtIGNwdS9hcm05MjB0L3VzYl9vaGNpLmMKLSAgICAqIHN1cHBvcnQgZm9yIFMzQzI0MTAgaXMgbWlzc2luZyBpbiAjaWYgbGluZQotICAtIGRyaXZlcnMvY3M4OTAwLmMKLSAgICAqIHJlaW5pdCBzb21lIHJlZ2lzdGVycyBpbiBjYXNlIG9mIGVycm9yIChjYWJsZSBtaXNzaW5nLCAuLi4pCi0gIC0gZnMvZmF0L2ZhdC5jCi0gICAgKiBzdXBwb3J0IGZvciBVU0IvTU1DIGRldmljZXMgaXMgbWlzc2luZyBpbiAjaWYgbGluZQotICAtIGluY2x1ZGUvY29uZmlncy9NSVA0MDUuaAotICAtIGluY2x1ZGUvY29uZmlncy9QSVA0MDUuaAotICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKLSAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0Ci0gIC0gaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKLSAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0Ci0gICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAotICAgICogZW5hYmxlIFVTQiBzdXBwb3J0Ci0gIC0gbGliX2FybS9hcm1saW51eC5jCi0gICAgKiBjaGFuZ2UgY2FsbGluZyBjb252ZW50aW9uIG9mIEFSTSBMaW51eCBrZXJuZWwgYXMKLSAgICAgIGRlc2NyaWJlZCBvbiBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL2Jvb3RpbmcucGhwCi0KLSogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKLSAgU3BsaXQgZGJhdTF4MDAgaW50byBkYmF1MTAwMCwgZGJhdTExMDAgYW5kIGRiYXUxNTAwIGNvbmZpZ3MgdG8KLSAgc3VwcG9ydCBhbGwgdGhlc2UgQU1EIGJvYXJkcy4KLQotKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgotICBXb3JrYXJvdW5kIGZvciBtaXBzIGF1MXgwMCBwaHlzaWNhbCBtZW1vcnkgYWNjZXNzZXMgKHRoZSBhdTF4MDAKLSAgdXNlcyBhIDM2IGJpdCBidXMgaW50ZXJuYWxseSBhbmQgY2Fubm90IGFjY2VzcyBwaHlzaWNhbCBtZW1vcnkKLSAgZGlyZWN0bHkuIFVzZSB0aGUgdW5jYWNoZWQgU0RSQU0gYWRkcmVzcyBpbnN0ZWFkIG9mIHRoZSBwaHlzaWNhbAotICBvbmUuKQotCi0qIFBhdGNoIGJ5IFh1ZSBMaWdvbmcgKEpvZSksIDEzIE5vdiAyMDAzOgotICBhZGQgUmVhbHRlayA4MDE5IGV0aGVybmV0IGRyaXZlcgotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIE5vdiAyMDAzOgotICBNUEM4MjZ4QURTL1BRMkZBRFMgIGNsZWFudXAKLQotKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxMiBOb3YgMjAwMzoKLSAgVXBkYXRlIFJFQURNRSB0byBtYXJrIHRoZSBQT1JUSU8gY29tbWFuZHMgbm9uLXN0YW5kYXJkCi0KLSogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMTIgTm92IDIwMDM6Ci0gIHVwZGF0ZSBmb3IgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBkZXZlbG9wbWVudCBraXQ6Ci0gIC0gc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIERhdGFGbGFzaAotICAtIEF0bWVsIERhdGFGbGFzaCBBVDQ1REIxMjgyIHN1cHBvcnQKLQotKiBQYXRjaCBieSBKZWZmIENhcnIsIDExIE5vdiAyMDAzOgotICBhZGQgc3VwcG9ydCBmb3IgbmV3IHZlcnNpb24gb2YgODI3MCBwcm9jZXNzb3JzCi0KLSogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDA1IE5vdiAyMDAzOgotICAtIG9ubHkgcGFzcyB0aGUgQVJNIGxpbnV4IGluaXRyZCB0YWcgdG8gdGhlIGtlcm5lbCB3aGVuIGFuIGluaXRyZAotICAgIGlzIGFjdHVhbGx5IHByZXNlbnQKLSAgLSB1cGRhdGUgb21hcDE1MTBpbm4gY29uZmlndXJhdGlvbiBmaWxlCi0KLSogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMgTm92IDIwMDM6Ci0gIC0gbW9yZSBlbmRpYW5lc3MgZml4ZXMgZm9yIExBTjkxQzExMSBkcml2ZXIKLSAgLSBDRkdfSFogY29uZmlndXJhdGlvbiBwYXRjaCBmb3IgTklPUyBDeWNsb25lIGJvYXJkCi0KLSogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyOCBPY3QgMjAwMzoKLSAgZml4IFBIWV9JTlRfUkVHIHZzLiBQSFlfTUFTS19SRUcgYnVnIGluIGRyaXZlcnMvc21jOTExMTEuYwotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIE9jdCAyMDAzOgotICAtIG1ha2UgIm1paSBpbmZvIDxhZGRyPiIgc2hvdyBpbmZvciBmb3IgUEhZIGF0ICJhZGRyIiBvbmx5Ci0gIC0gRW5kaWFuIGZpeCBmb3IgbWlpcGh5X2luZm8oKQotCi0qIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTkgU2VwIDIwMDM6Ci0gIE1vdmUgbW9zdCBvZiB0aGUgdGltZXIgaW50ZXJydXB0IHJlbGF0ZWQgUFBDIGNvZGUgdG8gcHBjX2xpYi9pbnRlcnJ1cHRzLmMKLQotKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBTZXAgMjAwMzoKLSAgQnJpbmcgQVJNIG1lbW9yeSBsYXlvdXQgaW4gc3luYyB3aXRoIHRoZSBkb2N1bWVudGF0aW9uOgotICBzdGFjayBhbmQgbWFsbG9jLWhlYXAgYXJlIG5vdyBsb2NhdGVkIF9iZWxvd18gdGhlIFUtQm9vdCBjb2RlCi0KLSogQWNjZWxlcmF0ZSBib290aW5nIG9uIFRSQUIgYm9hcmQ6IHJlYWQgYW5kIGNoZWNrICBhdXRvdXBkYXRlCWltYWdlCi0gIGhlYWRlcnMgZmlyc3QgaW5zdGVhZCBvZiBhbHdheXMgcmVhZGluZyB0aGUgd2hvbGUgaW1hZ2VzLgotCi0qIEZpeCB0eXBlIGluIE1QQzVYWFggY29kZSAocG9pbnRlZCBvdXQgYnkgVmljdG9yIFdyZW4pCi0KLSogRW5hYmxlZCBwYXNzd29yZCBjaGVjayBvbiBSTVUgYm9hcmQKLQotKiBGaXggY29uZmlndXJhdGlvbiBwcm9ibGVtIHdpdGggSWNlQ3ViZSBpbiBMT1dCT09UIGNvbmZpZ3VyYXRpb246Ci0gIGVudnJpb25tZW50IGdvdCBlbWJlZGRlZCwgY29ycnVwdGluZyB0aGUgaW1hZ2UgbGF5b3V0LgotCi0qIEZpeCBORUMgZGlzcGxheSBuYW1lcyAoaXQncyA2NDQwIFtmb3IgNjQweDQ4MF0sIG5vdCA2NjQwKS4KLQotKiBBZGRlZCBCTVMyMDAzIGJvYXJkCi0gIGFkZCBzdXBwb3J0IGZvciBORUMgTkw2NDQ4QkMzMy01NC4gMTAuNCIsIDY0MHg0ODAgVEZUIGRpc3BsYXkKLQotKiBGaXggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkIChtdXN0IHVzZSBVbmxvY2sgQnlwYXNzIFJlc2V0Ci0gIGNvbW1hbmQgdG8gZXhpdCBVbmxvY2sgQnlwYXNzIE1vZGUpOyBhZGp1c3QgdGltaW5ncyBmb3IgZmxhc2gsIFNSQU0KLSAgYW5kIENQTEQKLQotKiBVc2UgIi1mUElDIiBpbnN0ZWFkIG9mICItbXJlbG9jYXRhYmxlIiB0byBwcmV2ZW50IHByb2JsZW1zIHdpdGgKLSAgcmVjZW50IHRvb2xzCi0KLSogQWRkIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiB0byAnaW1scycgY29tbWFuZAotCi0qIEFkZCBiZF9pbmZvIGZpZWxkcyBuZWVkZWQgZm9yIDR4eCBMaW51eCBJMkMgZHJpdmVyCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgNCBOb3YuIDIwMDM6Ci0gIEZpeCBlcnJvciBpbiBjbWRfdmZkLmMgKFRSQUIgYm9hcmQ6ICJ2ZmQgLzEiIHNob3dzIG5vdyBvbmx5IG9uZSBCaXRtYXApCi0KLSogUHJpbnQgdXNlZCBuZXR3b3JrIGludGVyZmFjZSB3aGVuIENPTkZJR19ORVRfTVVMVEkgaXMgc2V0Ci0KLSogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMjggT2N0IDIwMDM6Ci0gIEFkZCBsb3cgYm9vdCBzdXBwb3J0IGZvciBNUEM1MjAwCi0KLSogRml4IHByb2JsZW0gd2l0aCBkdWFsIFBDTUNJQSBzdXBwb3J0IChOU0NVKQotCi0qIEZpeCBNUEM1MjAwIEkyQyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjA6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogRml4IHBhcmFtZXRlciBwYXNzaW5nIHRvIHN0YW5kYWxvbmUgaW1hZ2VzIHdpdGggYm9vdG0gY29tbWFuZAotCi0qIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAzMCBPY3QgMjAwMzoKLSAgRml4IGJ1aWxkIGVycm9ycyBmb3IgaXhkcDQyNSBib2FyZAotCi0qIFBhdGNoIGJ5IERhdmlkIE0uIEhvcm4sIDI5IE9jdCAyMDAzOgotICBGaXhlcyB0byBidWlsZCB1bmRlciBDWUdXSU4KLQotKiBHZXQgSWNlQ3ViZSBNR1Q1MTAwIHdvcmtpbmcgKGFnYWluKQotCi0qIEZpeCBwcm9ibGVtcyBpbiBtZW1vcnkgdGVzdCBvbiBzb21lIGJvYXJkcyAod2hpY2ggd2FzIG5vdAotICBub24tZGVzdHJ1Y3RpdmUgYXMgaW50ZW5kZWQpCi0KLSogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDI4IE9jdCAyMDAzOgotICBDaGFuZ2UgZnMvZmF0L2ZhdC5jIHRvIHB1dCBJL08gYnVmZmVycyBpbiBCU1MgaW5zdGVhZCBvbiB0aGUgc3RhY2sKLSAgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyBvbiBBUk0gc3lzdGVtcwotCi0qIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6Ci0gIGZpeCBpbml0IHNlcXVlbmNlIGVycm9yIGZvciBOSU9TIHBvcnQKLQotKiBBbGxvdyBsb3dlcmNhc2Ugc3BlbGxpbmcgZm9yIEljZUN1YmVfNTIwMDsgc3VwcG9ydCBNUEM1MjAwTElURSBuYW1lCi0KLSogQWRkIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIHRvIFRSQUIgY29uZmlndXJhdGlvbgotCi0qIFBhdGNoIGJ5IFhpYW8gWGlhbmdodWEsIDIzIE9jdCAyMDAzOgotICBzbWFsbCBwYXRjaCBmb3IgbXBjODV4eAotCi0qIEZpeCBzbWFsbCBwcm9ibGVtIGluIE1QQzUyMDAgSTJDIGRyaXZlcgotCi0qIEZpeCBGQ0MzIHN1cHBvcnQgb24gQVRDIGJvYXJkCi0KLSogQ29ycmVjdCBoZWFkZXIgcHJpbnRpbmcgZm9yIG11bHRpLWltYWdlIGZpbGVzIGluIGRvX2Jvb3RtKCkKLQotKiBNYWtlIENPTkZJR19TSUxFTlRfQ09OU09MRSB3b3JrIHdpdGggQ09ORklHX0FVVE9CT09UX0tFWUVECi0KLSogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbiBib2FyZAotCi0qIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE4IE9jdCAyMDAzOgotICBGaXggQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXIKLQotKiBQYXRjaCBieSBOeWUgTGl1LCAxNyBPY3QgMjAwMzoKLSAgRml4IHR5cG8gaW4gaW5jbHVkZS9tcGM4eHguaAotCi0qIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE2IE9jdCAwMzoKLSAgRml4ZXMgZm9yIGNwdS9hcm05MjUvaW50ZXJydXB0LmMKLSAgLSBJbml0aWFsaXplIHRpbWVzdGFtcCAmIGxhc3RkZWMgdmFycy4KLSAgLSBmaXggdGltZXN0YW1wIG92ZXJmbG93cy4KLSAgLSBmaXggbGFzdGRlYyBvdmVyZmxvdy4KLSAgLSBzbWFydGVyIG5vcm1hbGl6YXRpb24gdG8gYWxsb3cgdWRlbGF5KCkgYmVsb3cgMW1zIHRvIHdvcmsuCi0KLSogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAxNiBPY3QKLSAgYWRkIG5ldHdvcmtpbmcgc3VwcG9ydCBmb3IgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKLSAgQ3ljbG9uZSBFZGl0aW9uIChESy0xQzIwKQotCi0qIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxNCBPY3QgMjAwMzoKLSAgYWRkIGhpbnQgYWJvdXQgZG9jL1JFQURNRS5zaWxlbnQgdG8gUkVBRE1FIGZpbGUKLQotKiBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIE5TQ1UKLQotKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uRVZCCi0KLSogVFJBQiBhdXRvLXVwZGF0ZTogQmFzZSBkZWNpc2lvbiBpZiB3ZSBoYXZlIHRvIHN0cmlwIHRoZSBpbWFnZQotICBoZWFkZXIgb24gaW1hZ2UgdHlwZSBhcyBlbmNvZGVkIGluIHRoZSBoZWFkZXIKLSAgKGluY2x1ZGUgaW1hZ2UgdHlwZSBwYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBPY3QgMjAwMykKLQotKiBQYXRjaGVzIGJ5IFhpYW5naHVhIFhpYW8sIDE1IE9jdCAyMDAzOgotCi0gIC0gQWRkZWQgTW90b3JvbGEgQ1BVIDg1NDAvODU2MCBzdXBwb3J0IChjcHUvODV4eCkKLSAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTQwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NDBhZHMpCi0gIC0gQWRkZWQgTW90b3JvbGEgTVBDODU2MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTYwYWRzKQotCi0qIEZpeCBmbGFzaCB0aW1pbmdzIG9uIFRSQUIgYm9hcmQKLQotKiBNYWtlIHN1cmUgSFVTSCBpcyBpbml0aWFsaXplZCBmb3IgcnVubmluZyBhdXRvLXVwZGF0ZSBzY3JpcHRzCi0KLSogTWFrZSA1MjAwIHJlc2V0IGNvbW1hbmQgX3JlYWxseV8gcmVzZXQgdGhlIGJvYXJkLCB3aXRob3V0IHJ1bm5pbmcKLSAgYW55IG90aGVyIGNvZGUgYWZ0ZXIgaXQKLQotKiBGaXggZXJyb3JzIHdpdGggZmxhc2ggZXJhc2Ugd2hlbiByYW5nZSBzcGFucwlhY3Jvc3MgYmFua3MKLSAgdGhhdCBhcmUgbWFwcGVkIGluIHJldmVyc2Ugb3JkZXIKLQotKiBGaXggZmxhc2ggbWFwcGluZyBhbmQgZGlzcGxheSBvbiBQM0c0IGJvYXJkCi0KLSogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE1IEp1bCAyMDAzOgotICAtIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBJWFA0MjUgQ1BVCi0gIC0gYWRkIHN1cHBvcnQgZm9yIElYRFA0MjUgZXZhbCBib2FyZAotCi0qIEFkZGVkIGNvbmZpZyBvcHRpb24gQ09ORklHX1NJTEVOVF9DT05TT0xFLiAgU2VlIGRvYy9SRUFETUUuc2lsZW50Ci0gIGZvciBtb3JlIGluZm9ybWF0aW9uCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgT2N0IDIwMDMKLSAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIEZQR0EgQUNFWDFLCi0KLSogUGF0Y2hlcyBieSBUaG9tYXMgTGFuZ2UsIDA5IE9jdCAyMDAzOgotICAtIGZpeCBjbWRfaWRlLmMgZm9yIG5vbiBwcGMgYm9hcmRzIChyZWFkL3dyaXRlIGZ1bmN0aW9ucyBkaWQgbm90Ci0gICAgYWRkIEFUQSBiYXNlIGFkZHJlc3MpCi0gIC0gZml4IGZvciBzaGFubm9uIGJvYXJkCi0gIC0gI2lmZGVmIENPTkZJR19JREVfOHh4X0RJUkVDVCBzb21lIG90aGVyd2lzZSB1bnVzZWQgY29kZQotICAtIEVuZGlhbiBzd2FwIEFUQSBpZGVudGl0eSBmb3IgYWxsIGJpZyBlbmRpYW4gQ1BVcywgbm90IGp1c3QgUFBDCi0gIC0gTUlQUyBvbmx5OiBOZXcgb3B0aW9uIENPTkZJR19NRU1TSVpFX0lOX0JZVEVTIGZvciBwYXNzaW5nIG1lbXNpemUKLSAgICBhcmdzIHRvIGxpbnV4Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIGRiYXUxeDAwIGJvYXJkIChNSVBTMzIpCi0KLSogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAwNyBPY3QgMjAwMzoKLSAgYWRkIHN1cHBvcnQgZm9yIGRlYnJpcyBib2FyZAotCi0qIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA5IE9jdCAyMDAzOgotICBGaXhlcyBmb3IgVFJBQiBib2FyZAotICAtIC9ib2FyZC90cmFiL3JzNDg1LmM6IGNvcnJlY3QgYmF1ZHJhdGUKLSAgLSAvYm9hcmQvdHJhYi9jbWRfdHJhYi5jOiBidWcgZml4IGZvciBwcm9ibGVtIHdpdGggdGltZXIgb3ZlcmZsb3cgaW4KLSAgICB1ZGVsYXkoKTsgZml4IHNvbWUgdGltaW5nIHByb2JsZW1zIHdpdGggYWRjIGNvbnRyb2xsZXIKLSAgLSAvYm9hcmQvdHJhYi90cmFiX2ZrdC5jOiBhZGQgbmV3IGNvbW1hbmRzOiBnYWluLCBlZXByb20gYW5kIHBvd2VyOwotICAgIG1vZGlmeSBjb21tYW5kczogdG91Y2ggYW5kIGJ1enplcgotCi0qIERpc2FibGUgQ09ORklHX1NVUFBPUlRfVkZBVCB3aGVuIHVzZWQgd2l0aCBDT05GSUdfQVVUT19VUERBVEUKLSAgKHF1aWNrICYgZGlydHkgd29ya2Fyb3VuZCBmb3Igcm9ndWUgcG9pbnRlciBwcm9ibGVtIGluIGdldF92ZmF0bmFtZSgpKTsKLSAgVXNlIGRpcmVjdCBmdW5jdGlvbiBjYWxscyBmb3IgYXV0b191cGRhdGUgaW5zdGVhZCBvZiBodXNoIGNvbW1hbmRzCi0KLSogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwNCBPY3QgMjAwMzoKLSAgLSBhZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtMzIgQ1BVCi0gIC0gYWRkIHN1cHBvcnQgZm9yIE5pb3MgQ3ljbG9uZSBEZXZlbG9wbWVudCBLaXQgKERLLTFDMjApCi0KLSogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjkgU2VwIDIwMDM6Ci0gIC0gQSBzZWNvbmQgcGFyYW1ldGVyIGZvciBib290bSBvdmVyd3JpdGVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yCi0gICAgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcy4KLSAgLSBib290bSBzZXRzIGVudmlyb25tZW50IHZhcmlhYmxlICJmaWxlc2l6ZSIgdG8gdGhlIHJlc3VsdGluZwotICAgICh1bmNvbXByZXNzZWQpIGRhdGEgbGVuZ3RoIGZvciAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzCi0gICAgd2hlbiBhdXRvc3RhcnQgaXMgc2V0IHRvICJubyIuIE5vdyB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlCi0JaWYgYm9vdG0gJGZwZ2FkYXRhICRzb21lX2ZyZWVfcmFtIDsgdGhlbgotCQlmcGdhIGxvYWQgMCAkc29tZV9mcmVlX3JhbSAkZmlsZXNpemUKLQlmaQotCi0qIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAyNSBTZXB0IDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1IFJldi4gQyBib2FyZAotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI1IFNlcCAyMDAzOgotICBhZGQgc3VwcG9ydCBmb3IgWmVwaHlyIEVuZ2luZWVyaW5nIFpQQy4xOTAwIGJvYXJkCi0KLSogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjMgU2VwIDIwMDM6Ci0gIGFkZCBDTURfUE9SVElPIHRvIENGR19DTURfTk9OU1REIChjb21tYW5kcyBpbiBxdWVzdGlvbiBhcmUgb25seQotICBpbXBsZW1lbnRlZCBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUpCi0KLSogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAyMyBTZXAgMjAwMzoKLSAgZml4IHBsbF9wY2lfdG9fbWVtX211bHRpcGxpZXIgdGFibGUgZm9yIE1QQzgyNDUKLQotKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMiBTZXAgMjAwMzoKLSAgZW5hYmxlIHRpbWVkIGF1dG9ib290IG9uIFBYQQotCi0qIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjIgU2VwIDIwMDM6Ci0gIC0gYWRkICQoQ0ZMQUdTKSB0byAiLXByaW50LWxpYmdjYy1maWxlbmFtZSIgc28gY29tcGlsZXIgZHJpdmVyCi0gICAgcmV0dXJucyBjb3JyZWN0IGxpYmdjYyBmaWxlIHBhdGgKLSAgLSAibGF0ZW5jeSIgcmVkdWN0aW9uIG9mIGJ1c3ktbG9vcCB3YWl0aW5nIHRvIGltcHJvdmUgIlUtQm9vdCIgYm9vdAotICAgIHRpbWUgb24gczNjMjR4MCBzeXN0ZW1zCi0KLSogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE5IFNlcCAyMDAzOgotICAtIEFkZCBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04gb3B0aW9uIHRvIGVjaG8gdGhlIGludmVydGVkIEV0aGVybmV0Ci0gICAgbGluayBzdGF0ZSB0byB0aGUgZmF1bHQgTEVELgotICAtIEluIE5ldExvb3AsIG1ha2UgdGhlIEZhdWx0IExFRCByZWZsZWN0IHRoZSBsaW5rIHN0YXR1cy4gIFRoZSBsaW5rCi0gICAgc3RhdHVzIGdldHMgdXBkYXRlZCBvbiBlbnRyeSwgYW5kIG9uIHRpbWVvdXRzLgotCi0qIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE4IFNlcCAyMDAzOgotICBhbGxvdyBta2ltYWdlIHRvIGJ1aWxkIGFuZCBydW4gb24gQ3lnd2luLWhvc3RlZCBzeXN0ZW1zCi0KLSogUGF0Y2ggYnkgRnJhbmsgTfxsbGVyLCAxOCBTZXAgMjAwMzoKLSAgdXNlIGJpX2ludGZyZXEgaW5zdGVhZCBvZiBiaV9idXNmcmVxIHRvIGNvbXB1dGUgZmVjX21paV9zcGVlZCBpbgotICBjcHUvbXBjOHh4L2ZlYy5jCi0KLSogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE2IFNlcCAyMDAzOgotICBhZGQgdG9vbCB0byBjb21wdXRlIGZpbGVkcyBpbiB0aGUgUExQUkNSIHJlZ2lzdGVyIGZvciBNUEM4NngKLQotKiBVc2UgSUhfVFlQRV9GSUxFU1lTVEVNIGZvciBUUkFCICJkaXNrIiBpbWFnZXMuCi0KLSogRml4IGJ1aWxkIHByb2JsZW1zIHVuZGVyIEZyZWVCU0QKLQotKiBBZGQgZ2VuZXJpYyBmaWxlc3lzdGVtIGltYWdlIHR5cGUKLQotKiBNYWtlIGZhdGxvYWQgc2V0IGZpbGVzaXplIGVudmlyb25tZW50IHZhcmlhYmxlCi0KLSogZW5hYmxlIGJhc2ljIC8gbWVkaXVtIC8gaGlnaC1lbmQgY29uZmlndXJhdGlvbnMgZm9yIFBQQ2hhbWVsZW9uRVZCCi0gIGJvYXJkOyBmaXggTkFORCBjb2RlCi0KLSogZW5hYmxlIFRGVFAgY2xpZW50IGNvZGUgdG8gc3BlY2lmeSB0byB0aGUgc2VydmVyIHRoZSBkZXNpcmVkCi0gIHRpbWVvdXQgdmFsdWUgKHNlZSBSRkMtMjM0OSkKLQotKiBJbXByb3ZlIFNEUkFNIHNldHVwIGZvciBUUkFCIGJvYXJkCi0KLSogU3VwcHJlc3MgYWxsIG91dHB1dCB3aXRoIHNwbGFzaHNjcmVlbiBjb25maWd1cmVkIG9ubHkgaWYgInNwbGFzaGltYWdlIgotICBpcyBzZXQKLQotKiBGaXggcHJvYmxlbXMgd2l0aCBJMkMgc3VwcG9ydCBmb3IgbXBjNTIwMAotCi0qIEFkYXB0IFRSQUIgY29uZmlndXJhdGlvbiBhbmQgYXV0b191cGRhdGUgdG8gbmV3IG1lbW9yeSBsYXlvdXQKLQotKiBBZGQgY29uZmlndXJhdGlvbiBmb3Igd3RrIGJvYXJkCi0KLSogQWRkIHN1cHBvcnQgZm9yIHRoZSBTaGFycCBMUTA2NVQ5RFI1MVUgTENEIGRpc3BsYXkKLQotKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTcgU2VwIDIwMDM6Ci0gIC0gRml4ZXMgZm9yIE1QQzgyNjYgZGVmYXVsdCBjb25maWcKLSAgLSBBbGxvdyBldGhfbG9vcGJhY2tfdGVzdCgpIG9uIDgyNjAgdG8gdXNlIGEgc3Vic2V0IG9mIHRoZSBGQ0MncwotCi0qIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE3IFNlcCAyMDAzOgotICAtIHVwZGF0ZSBSRUFETUUgKFNIT1dfQk9PVF9QUk9HUkVTUyB2YWx1ZXMgZm9yIGNtZF9uYW5kLmMgYW5kCi0gICAgZW52X2NvbW1vbi5jKQotICAtIHNiYzgyNjAgdHdlYWtzCi0gIC0gYWRqdXN0ICJoZWxwIiBvdXRwdXQKLQotKiBQYXRjaGVzIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgotICAtIGZpeCBzcGVsbGluZyBlcnJvcnMKLSAgLSBzZXQgR0RfRkxHX0RFVklOSVQgZmxhZyBvbmx5IGFmdGVyIGRldmljZSBmdW5jdGlvbiBwb2ludGVycwotICAgIGFyZSB2YWxpZAotICAtIEFsbG93IENGR19BTFRfTUVNVEVTVCBvbiBzeXN0ZW1zIHdoZXJlIGFkZHJlc3MgemVybyBpc24ndAotICAgIHdyaXRlYWJsZQotICAtIGVuYWJsZSAzLnJkIFVBUlQgKFNULVVBUlQpIG9uIFBYQShYU2NhbGUpIENQVXMKLSAgLSB0cmlnZ2VyIHdhdGNoZG9nIHdoaWxlIHdhaXRpbmcgaW4gc2VyaWFsIGRyaXZlcgotCi0qIEFkZCBhdXRvLXVwZGF0ZSBjb2RlIGZvciBUUkFCIGJvYXJkIHVzaW5nIFVTQiBtZW1vcnkgc3RpY2tzLAotICBzdXBwb3J0IG5ldyBjb25maWd1cmF0aW9uIHdpdGggbW9yZSBtZW1vcnkKLQotKiBkaXNhYmxlIE1QQzUyMDAgYnVzIHBpcGVsaW5pbmcgYXMgd29ya2Fyb3VuZCBmb3IgYnVzIGNvbnRlbnRpb24KLQotKiBNb2RpZnkgWExCIGFyYml0ZXIgcHJpb3JpdGllcyBvbiBNUEM1MjAwIHNvIGFsbCBkZXZpY2VzIHVzZSBzYW1lCi0gIHByaW9yaXR5OyBjb25maWd1cmUgY3JpdGljYWwgaW50ZXJydXB0cyB0byBiZSBoYW5kbGVkIGxpa2UgZXh0ZXJuYWwKLSAgaW50ZXJydXB0cwotCi0qIE1ha2UgSVBCIGNsb2NrIG9uIE1HVDUxMDAvTVBDNTIwMCBjb25maWd1cmFibGUgaW4gYm9hcmQgY29uZmlnIGZpbGU7Ci0gIGdvIGJhY2sgdG8gNjYgTUh6IGZvciBzdGFiaWxpdHkKLQotKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNSBTZXAgMjAwMzoKLSAgLSBhZGQgZGVzY3JpcHRpb24gZm9yIG1pc3NpbmcgQ0ZHX0NNRF8qIGVudHJpZXMgaW4gdGhlIFJFQURNRSBmaWxlCi0gIC0gc2Fjc25nIHR3ZWFrcwotCi0qIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTQgU2VwIDIwMDM6Ci0gIGVuYWJsZSB3YXRjaGRvZyBzdXBwb3J0IGZvciBhbGwgTVBDODI0eCBib2FyZHMgdGhhdCBoYXZlIGEgd2F0Y2hkb2cKLQotKiBPbiBNUEM1MjAwLCByZXN0cmljdCBGRUMgdG8gYSBtYXhpbXVtIG9mIDEwIE1icHMgdG8gd29yayBhcm91bmQgdGhlCi0gICJOb24tb2N0ZXQgQWxpZ25lZCBGcmFtZSIgZXJyb3JzIHdlIHNlZSBhdCAxMDAgTWJwcwotCi0qIFBhdGNoIGJ5IFNoYXJhZCBHdXB0YSwgMTQgU2VwIDIwMDM6Ci0gIGZpeCBTUFIgbnVtYmVycyBmb3IgdXBwZXIgQkFUIHJlZ2lzdGVyIChbSURdQkFUWzQtN11bVUxdKQotCi0qIFBhdGNoIGJ5IGxsYW5kcmUsIDExIFNlcCAyMDAzOgotICB1cGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb25FVkIgYm9hcmQKLQotKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDEzIFNlcCAyMDAzOgotICB2YXJpb3VzIGNoYW5nZXMgdG8gVkNNQTkgYm9hcmQgc3BlY2lmaWMgZmlsZXMKLQotKiBBZGQgSTJDIHN1cHBvcnQgZm9yIE1HVDUxMDAgLyBNUEM1MjAwCi0KLSogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDExIFNlcCAyMDAzOgotICBDaGFuZ2VkIGRlZmF1bHQgbWVtb3J5IG9wdGlvbiBvbiBNUEM4MjY2QURTIHRvIE5PVCBiZSBQYWdlIEJhc2VkCi0gIEludGVybGVhdmUsIHNpbmNlIHRoaXMgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSBzdGFuZGFyZAotICAxNk1CIERJTU0KLQotKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDEyIFNlcCAyMDAzOgotICBmaXggTWFrZWZpbGUgc2V0dGluZ3MgZm9yIHNrOTggZHJpdmVyCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwMzoKLSAgLSBuZXcgYm9hcmRzIGFkZGVkOiBEUDQwNSwgSFVCNDA1LCBQTFU0MDUsIFZPSDQwNQotICAtIHNvbWUgZXNkIGJvYXJkcyB1cGRhdGVkCi0gIC0gY3B1L3BwYzR4eC9zZHJhbS5jOiBkaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyIGJlZm9yZSBzZXR0aW5nCi0gICAgZmlyc3QgdmFsdWVzCi0gIC0gY3B1L3BwYzR4eC80MDVfcGNpLmM6IHNldCB2ZW5kb3IgaWQgb24gUFBDNDA1RVAgc3lzdGVtcwotCi0qIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIFNlcCAyMDAzOgotICBhZGQgYnVybi1pbiB0ZXN0cyBmb3IgVFJBQiBib2FyZAotCi0qIEVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSBvbiBNUEM1MjAwIGJvYXJkCi0KLSogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDExIFNlcCAyMDAzOgotICAtIGZpeCBVU0IgZGF0YSBwb2ludGVyIGFzc2lnbm1lbnQgZm9yIGJ1bGsgb25seSB0cmFuc2Zlci4KLSAgLSBwcmV2ZW50IHRvIGRpc3BsYXkgZXJhc2VkIGRpcmVjdG9yaWVzIGluIEZBVCBmaWxlc3lzdGVtLgotCi0qIENoYW5nZSBvdXRwdXQgZm9ybWF0IGZvciBOQU5EIGZsYXNoIC0gbWFrZSBpdCBsb29rIGxpa2UgZm9yIG90aGVyCi0gIG1lbW9yeSwgdG9vCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuODoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCi0KLSogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgOSBTZXAgMjAwMzoKLSAgYWRkIEZBVCBzdXBwb3J0IGZvciBJREUsIFNDU0kgYW5kIFVTQgotCi0qIFBhdGNoZXMgYnkgR2xlYiBOYXRhcG92LCAyIFNlcCAyMDAzOgotICAtIGNsZWFudXAgb2YgUE9TVCBjb2RlIGZvciB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCi0gIC0gTVBDODI0eCBsb2NrcyB3YXkwIG9mIGRhdGEgY2FjaGUgZm9yIHVzZSBhcyBpbml0aWFsIFJBTTsKLSAgICB0aGlzIHBhdGNoIHVubG9ja3MgaXQgYWZ0ZXIgcmVsb2NhdGlvbiB0byBSQU0gYW5kIGludmFsaWRhdGVzCi0gICAgdGhlIGxvY2tlZCBlbnRyaWVzLgotCi0qIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMzAgQXVnIDIwMDM6Ci0gIG5ldyBJMkMgZHJpdmVyIGZvciBtcGMxMDcgYnJpZGdlLiBOb3cgd29ya3MgZnJvbSBmbGFzaC4KLQotKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAxMSBBdWcgMjAwMzoKLSAgLSBKRkZTMjogZml4IHR5cG8gaW4gY29tbW9uL2NtZF9qZmZzMi5jCi0gIC0gSkZGUzI6IGZpeCBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMgb3B0aW9uCi0gIC0gSkZGUzI6IHJlbW92ZSBub2RlIHZlcnNpb24gMCB3YXJuaW5nCi0gIC0gSkZGUzI6IGFjY2VwdCBKRkZTMiBQQURESU5HIG5vZGVzCi0gIC0gU1hOSTg1NVQ6IGFkZCBBTTI5TFY4MDAgc3VwcG9ydAotICAtIFNYTkk4NTVUOiBtb3ZlIGVudmlyb25tZW50IGZyb20gRUVQUk9NIHRvIGZsYXNoCi0gIC0gU1hOSTg1NVQ6IGJvb3QgZnJvbSBKRkZTMiBpbiBOT1Igb3IgTkFORCBmbGFzaAotCi0qIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxMSBBdWcgMjAwMzoKLSAgZml4ZXMgZm9yIEkyQyBvbiBNUEM4MjQwCi0gIC0gZml4IGkyY193cml0ZSByb3V0aW5lCi0gIC0gZml4IGlwcm9iZSBjb21tYW5kCi0gIC0gZWxpbWluYXRlcyB1c2Ugb2YgZ2xvYmFsIHZhcmlhYmxlcywgcGx1cyBkZWFkIGNvZGUsIGNsZWFudXAuCi0KLSogQWRkIHN1cHBvcnQgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgRGV2aWNlcyAoQkJCKQotICAodGVzdGVkIHdpdGggVVNCIG1lbW9yeSBzdGlja3Mgb25seSkKLQotKiBBdm9pZCBmbGlja2VyIG9uIFRSQUIncyBWRkQKLQotKiBBZGQgc3VwcG9ydCBmb3IgU0s5OHh4IGRyaXZlcgotCi0qIEFkZCBQQ0kgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCi0KLSogU3VwcG9ydCBJY2VDdWJlIGJvYXJkIGNvbmZpZ3VyYXRpb25zIHdpdGggMSB4IEFNRCBBTTI5TFYwNjUgKDggTUIpCi0gIG9yIDEgeCBBTTI5TFY2NTIgKHR3byBMVjA2NSBpbiBvbmUgY2hpcCA9IDE2IE1CKTsKLSAgUnVuIElQQiBhdCAxMzMgTWh6OyBhZGp1c3QgdGhlIE1JSSBjbG9jayBmcmVxdWVuY3kgYWNjb3JkaW5nbHkKLQotKiBTZXQgQlJHX0NMSyBvbiBQTTgyNS84MjYgdG8gNjRNSHogKFZDT19PVVQgLyA0LCBpbnN0ZWFkIG9mIDE2CSBNSHopCi0gIHRvIGFsbG93IGZvciBtb3JlIGFjY3VyYXRlIGJhdWRyYXRlIHNldHRpbmdzCi0gIChlcnJvciBub3cgMC43JSBhdCAxMTUga2JwcywgaW5zdGVhZCBvZiAzLjUlIGJlZm9yZSkKLQotKiBQYXRjaCBieSBBbmRyZWFzIE1vaHIsIDQgU2VwIDIwMDM6Ci0gIEZpeCBhIGxvdCBvZiBzcGVsbGluZyBlcnJvcnMKLQotKiBBZGQgc3VwcG9ydCBmb3IgUFBDaGFtZWxlb24gRXZhbCBCb2FyZAotCi0qIEFkZCBzdXBwb3J0IGZvciBQM0c0IGJvYXJkCi0KLSogRml4IHByb2JsZW0gd2l0aCBNR1Q1MTAwIEZFQyBkcml2ZXI6IGFkZCAiZWFybHkiIE1BQyBhZGRyZXNzCi0gIGluaXRpYWxpemF0aW9uCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgNyBBdWcgMjAwMzoKLSAgY2hlY2sgQkNTUiB0byBkZXRlY3QgaWYgdGhlIGJvYXJkIGlzIGNvbmZpZ3VyZWQgaW4gUENJIG1vZGUKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC43OgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIFBhdGNoIGJ5IFJhZ2h1IEtyaXNobmFwcmFzYWQsIDcgQXVnIDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciBBZGRlciBJSSBNUEM4NTJUIG1vZHVsZQotCi0qIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTkgQXVnIDIwMDM6Ci0gIGZpeCBUSSBJbm5vdmF0b3IvT01BUDE1MTAgcGluIGNvbmZpZ3MKLQotKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDE4IEF1ZyAyMDAzCi0gIC0gYWRkIHN1cHBvcnQgZm9yIGFybTkyNmVqcyBjcHUgY29yZQotICAtIGFkZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE2MTAgSW5ub3ZhdG9yIEJvYXJkCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTQgQXVnIDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciBiemlwMiB1bmNvbXByZXNzaW9uCi0KLSogQWRkIEdDQyBsaWJyYXJ5IHRvIGV4YW1wbGVzL01ha2VmaWxlIHNvIEdDQyB1dGlsaXR5IGZ1bmN0aW9ucyB3aWxsCi0gIGJlIHJlc29sdmVkLCB0b28KLQotKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkIHVzaW5nIHNvZnR3YXJlIEkyQyBkcml2ZXIKLSAgKGJlY2F1c2Ugb2YgYmV0dGVyIHJlc3BvbnNlIHRvIGlwcm9iZSBjb21tYW5kKTsgZml4IHByb2JsZW0gd2l0aAotICAicmVzZXQiIGNvbW1hbmQKLQotKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjggQXVnIDIwMDM6Ci0gIEFkZGVkIENPTkZJR19CT09UUF9ETlMyIGFuZCBDT05GSUdfQk9PVFBfU0VORF9IT1NUTkFNRSB0bwotICBDT05GSUdfQk9PVFBfTUFLUyAoc2VlIFJFQURNRSkuCi0KLSogRml4IElDVTg2MiBlbnZpcm9ubWVudCBwcm9ibGVtCi0KLSogRml4IFJBTSBzaXplIGRldGVjdGlvbiBmb3IgUk1VIGJvYXJkCi0KLSogSW1wbGVtZW50ICJyZXNldCIgZm9yIE1HVDUxMDAvTVBDNTIwMCBzeXN0ZW1zCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNjoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBNYWtlIEV0aGVybmV0IGF1dG9uZWdvdGlhdGlvbiBvbiBJTkNBLUlQIHdvcmsgZm9yIGFsbCBjbG9jayByYXRlczsKLSAgYWxsb3cgc2VsZWN0aW9uIG9mIGNsb2NrIGZyZXF1ZW5jeSBhcyAibWFrZSIgdGFyZ2V0Ci0KLSogSW1wbGVtZW50IG1lbW9yeSBhdXRvc2l6aW5nIGNvZGUgZm9yIEljZUN1YmUgYm9hcmRzCi0KLSogQ29uZmlndXJlIG5ldHdvcmsgcG9ydCBvbiBJTkNBLUlQIGZvciBhdXRvbmVnb3RpYXRpb24KLQotKiBGaXggb3ZlcmZsb3cgcHJvYmxlbSBpbiBuZXR3b3JrIHRpbWVvdXQgY29kZQotCi0qIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDggQXVnIDIwMDM6Ci0gIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMCAoY3JjMzJfbm9fY29tcCwgdG9vKS4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC41OgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIFVwZGF0ZSBmb3IgVFFNIGJvYXJkIGRlZmF1bHRzOgotICBkaXNhYmxlIGNsb2Nrc19pbl9taHosIGVuYWJsZSBib290IGNvdW50IGxpbWl0Ci0KLSogUmVtb3ZlZCB0b29scy9nZGIgZnJvbSAibWFrZSBhbGwiIHRhcmdldC4gIEFkZGVkIG1ha2UgdGFyZ2V0ICJnZGJ0b29scyIKLSAgaW4gdG9wbGV2ZWwgZGlyZWN0b3J5IGluc3RlYWQuICBSZW1vdmVkIGFzdGVzdC5jIGZyb20gdG9vbHMvZ2RiIGJlY2F1c2UKLSAgaXQgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LgotCi0qIEZpeCBQQ0kgc3VwcG9ydCBmb3IgTVBDNTIwMCAvIEljZUN1YmUgQm9hcmQKLQotKiBNYXAgSVNQMTM2MiBVU0IgT1RHIGNvbnRyb2xsZXIgZm9yIE5TQ1UgYm9hcmQKLQotKiBQYXRjaCBieSBCcmFkIFBhcmtlciwgMDIgQXVnIDIwMDM6Ci0gIGZpeCBzYzUyMF9jZHAgcHJvYmxlbXMKLQotKiBJbXBsZW1lbnQgQm9vdCBDeWNsZSBEZXRlY3Rpb24gKFJlcS4gMi4zIG9mIE9TREwgQ0dMIFJlcWlyZW1lbnRzKQotCi0qIEFsbG93IGVyYXNlIGNvbW1hbmQgdG8gY3Jvc3MgZmxhc2ggYmFuayBib3VuZGFyaWVzCi0KLSogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBKdWwgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIEx5bnV4V29ya3MgS2VybmVsIERvd25sb2FkYWJsZSBJbWFnZXMgKEtESXMpLgotICBCb3RoIEx5bnhPUyBhbmQgQmx1ZUNhdCBsaW51eCBLRElzIGFyZSBzdXBwb3J0ZWQuCi0KLSogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMjUgSnVsIDIwMDM6Ci0gIHVzZSBtb3JlIHJlbGlhYmxlIHJlc2V0IGZvciBPTUFQLzkyNVQKLQotKiBQYXRjaCBieSBOeWUgTGl1LCAyNSBKdWwgMjAwMzoKLSAgZml4IHR5cG8gaW4gbXBjOHh4LmgKLQotKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNCBKdWwgMjAwMzoKLSAgRml4ZXMgZm9yIGNtZF9uYW5kLmM6Ci0gIC0gRml4ZWQgbnVsbCBkZXJlZmVyZWNlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgRUNDIHZhbHVlcy4KLSAgLSBBZGRlZCBzdXBwb3J0IGZvciBkZXZpY2VzIHdpdGggbm8gUmVhZHkvQnVzeSBzaWduYWwgaG9va2VkIHVwLgotICAtIEFkZGVkIE9NQVAxNTEwIHJlYWQvd3JpdGUgcHJvdGVjdCBoYW5kbGluZy4KLSAgLSBGaXhlZCBuYW5kLmgncyBFQ0NQT1MuIEEgY29uZmxpY3QgZXhpc3RlZCB3aXRoIFBPUzUgYW5kIGJhZGJsb2NrCi0gICAgZm9yIG5vbi1KRkZTMi4KLSAgLSBTd2l0Y2hlZCBkZWZhdWx0IEVDQyB0byBiZSBKRkZTMi4KLQotKiBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAKLQotKiBQcm92aWRlIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvIGFjY2VzcwotICB0aGUgJ2dsb2JhbF9kYXRhJyBzdHJ1Y3R1cmUKLSAgUHJvdmlkZSBhIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBtb3JlIHVzZWZ1bCB0byB1c2Vycy9kZXZlbG9wZXJzLgotCi0qIE1ha2UgSWNlQ3ViZSBNR1Q1MTAwIEZFQyBkcml2ZXIgd29yawotCi0qIEltcGxlbWVudCBuZXcgbWVjaGFuaXNtIHRvIGV4cG9ydCBVLUJvb3QncyBmdW5jdGlvbnMgdG8gc3RhbmRhbG9uZQotICBhcHBsaWNhdGlvbnM6IGluc3RlYWQgb2YgdXNpbmcgKFBQQy1zcGVjaWZpYykgc3lzdGVtIGNhbGxzIHdlIG5vdwotICB1c2UgYSBqdW1wIHRhYmxlOyBwbGVhc2Ugc2VlIGRvYy9SRUFETUUuc3RhbmRhbG9uZSBmb3IgZGV0YWlscwotCi0qIFBhdGNoIGJ5IERhdmUgV2VzdHdvb2QsIDI0IEp1bCAyMDAzOgotICBhZGRlZCBzdXBwb3J0IGZvciBVbml0eSBPUyAoYSBwcm9wcmlldGFyeSBPUykKLQotKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyMyBKdWwgMjAwMzoKLSAgYWRkICJpbWxzIiBjb21tYW5kIHRvIHByaW50IGZsYXNoIHRhYmxlIG9mIGNvbnRlbnRzCi0KLSogRml4IGNvbGQgYm9vdCBkZXRlY3Rpb24gZm9yIGxvZyBidWZmZXIgcmVzZXQKLQotKiBSZXR1cm4gZXJyb3IgZm9yIGludmFsaWQgbGVuZ3RoIHNwZWNpZmllcnMgd2l0aCAiY3AuWCIgZXRjLgotCi0qIEZpeCBzdGFydHVwIHByb2JsZW0gb24gTUlQUwotCi0qIEFsbG93IGZvciBDT05GSUdfU1BMQVNIX1NDUkVFTiBldmVuIHdoZW4gbm8gZXhwbGljaXQKLSAgYml0bWFwIHN1cHBvcnQgaXMgY29uZmlndXJlZAotCi0qIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxOCBKdWwgMjAwMzoKLSAgLSBmaXggZW5kaW5hbmVzcyBwcm9ibGVtIGluIGNwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYzEuYwotCi0qIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOCBKdWwgMjAwMzoKLSAgLSBmaXggbWVtb3J5IGNvbmZpZ3VyYXRpb24gZm9yIE1JUDQwNVQKLSAgLSBmaXggcHJpbnRvdXQgb2YgYmF1ZHJhdGUgZm9yICJsb2FkYiA8bG9hZGFkZHI+IDxiYXVkcmF0ZT4iCi0KLSogQ2xlYW51cCBvZiBUUU04Mnh4IGNvbmZpZ3VyYXRpb25zOyB1c2UgIm9mZmljaWFsIiBib2FyZCB0eXBlcwotICB0byBtYWtlIHNlbGVjdGlvbiBlYXNpZXIuCi0KLSogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgSnVsIDIwMDM6Ci0gIGFkZCBkZWxheSB0byBnZXQgSTJDIHdvcmtpbmcgd2l0aCAiaW1tIiBjb21tYW5kIGFuZCBzM2MyNHgwX2kyYy5jCi0KLSogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTcgSnVseSAwMzoKLSAgLSBGaXhlZCBidWcgaW4gT01BUDE1MTAgYmF1ZCByYXRlIGRpdmlzb3Igc2V0dGluZ3MuCi0KLSogUGF0Y2ggYnkgTnllIExpdSwgMTYgSnVseSAyMDAzOgotICBNUEM4NjBGQURTIGZpeGVzOgotICAtIGFkZCBNUEM4NnhBRFMgc3VwcG9ydCAodXNlcyBNUEM4NnhBRFMuaCkKLSAgLSBhZGQgODY2UC9UIGNvcmUgc3VwcG9ydCAoYWxzbyBNUEM4NTlUL01QQzg1OURTTC9NUEM4NTJUKQotICAgIG8gUExQUkNSIGNoYW5nZXMKLSAgICBvIEJSRyBjaGFuZ2VzIChFWFRBTC9YVEFMIHJlc3RyaWN0ZWQgdG8gMTBNSHopCi0gICAgbyBkb24ndCB0cnVzdCBnY2xrKCkgc29mdHdhcmUgbWVhc3VyZW1lbnQgYnkgZGVmYXVsdCwgZGVwZW5kIG9uCi0gICAgICBDT05GSUdfOHh4X0dDTEtfRlJFUQotICAtIGFkZCBEUkFNIFNJTU0gbm90IGluc3RhbGxlZCBkZXRlY3Rpb24KLSAgLSB1c2UgbW9yZSAiY29ycmVjdCIgU0RSQU0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UKLSAgLSBhbGxvdyBkaWZmZXJlbnQgU0RSQU0gc2l6ZXMgKDh4eEFEUyBoYXMgOE0pCi0gIC0gZGVmYXVsdCBERVIgaXMgMAotICAtIHJlbW92ZSB1bnVzZWQgTUFNUiBkZWZpbmVzIGZyb20gRkFEUzg2MFQuaCAoYWxsIGRvbmUgaW4gZmFkcy5jKQotICAtIHJlbmFtZSBNQU1SL01CTVIgZGVmaW5lcyB0byBiZSBtb3JlIGNvbnNpc3RlbnQuIFNob3VsZCBldmVudHVhbGx5Ci0gICAgYmUgbWVyZ2VkIGludG8gTXhNUiB0byBiZXR0ZXIgcmVmbGVjdCB0aGUgUG93ZXJRVUlDQyBkYXRhc2hlZXQuCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVsIDIwMDM6Ci0gIHN1cHBvcnQgbmV3IE1vdG9yb2xhIFBRMkZBRFMtWlUgZXZhbHVhdGlvbiBib2FyZCB3aGljaCByZXBsYWNlZAotICBNUEM4MjYwQURTIGFuZCBNUEM4MjY2QURTCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNDoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBBZGQgc3VwcG9ydCBmb3IgSWNlQ3ViZSBib2FyZCAod2l0aCBNR1Q1MTAwIGFuZCBNUEM1MjAwIENQVXMpCi0KLSogQWRkIHN1cHBvcnQgZm9yIE1HVDUxMDAgYW5kIE1QQzUyMDAgcHJvY2Vzc29ycwotCi0qIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxNSBKdWwgMjAwMzoKLSAgdXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMzoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDA0IEp1bCAyMDAzCi0gIC0gYWRkZWQgc3VwcG9ydCBmb3IgYXJtOTI1dCBjcHUgY29yZQotICAtIGFkZGVkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTUxMCBJbm5vdmF0b3IgQm9hcmQKLQotKiBQYXRjaGVzIGJ5IE1hcnRpbiBLcmF1c2UsIDE0IEp1bCAyMDAzOgotICAtIGFkZCBJMkMgc3VwcG9ydCBmb3IgczNjMjQwMCBzeXN0ZW1zICh0cmFiIGJvYXJkKQotICAtIChyZS0pIGFkZCAicGluZyIgdG8gY29tbWFuZCB0YWJsZQotCi0qIEZpeCBoYW5kbGluZyBvZiAic2xvdyIgUE9TVCByb3V0aW5lcwotCi0qIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDM6Ci0gIC0gQ29ycmVjdCBmbGFzaCBhbmQgSkZGUzIgc3VwcG9ydCBmb3IgTVBDODI2MEFEUwotICAtIGZpeCBQVlIgdmFsdWVzIGFuZCBjbG9jayBnZW5lcmF0aW9uIGZvciBQb3dlclFVSUNDIElJIGZhbWlseQotICAgICg4MjcwLzgyNzUvODI4MCkKLQotKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAwOCBKdWwgMjAwMzoKLSAgLSBhZGQgc3VwcG9ydCBmb3IgTTY4SyB0YXJnZXRzCi0KLSogUGF0Y2ggYnkgS2VuIENob3UsIDMgSnVsOgotICAtIEZpeCBQQ0kgY29uZmlnIHRhYmxlIGZvciBBMzAwMAotICAtIEZpeCBpb2Jhc2UgZm9yIG5hdHNlbWkuYwotICAgIChQQ0lfQkFTRV9BRERSRVNTXzAgaXMgdGhlIElPIGJhc2UgcmVnaXN0ZXIgZm9yIERQODM4MTUpCi0KLSogQWxsb3cgdG8gZW5hYmxlICJzbG93IiBQT1NUIHJvdXRpbmVzIGJ5IGtleSBwcmVzcyBvbiBwb3dlci1vbgotKiBGaXggdGVtcGVyYXR1cmUgZGVwZW5kZW5kIHN3aXRjaGluZyBvZiBMQ0QgYmFja2xpZ2h0IG9uIExXTU9OCi0qIFR3ZWFrIG91dHB1dCBmb3JtYXQgZm9yIExXTU9OCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBKdWwgMjAwMzoKLSAgLSBGaXggYnVnIGluIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFLgotICAtIEFSNDA1IGNvbmZpZyB1cGRhdGVkLgotICAtIE9DUlRDL09SU0c6IGJzcCBjb21tYW5kIGFkZGVkLgotICAtIEFTSDQwNSBic3AgdXBkYXRlLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIGZvciBVLUJvb3QgMC40LjI6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSogQWRkIHN1cHBvcnQgZm9yIE5TQ1UgYm9hcmQKLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODIzTSwgVFFNODUwTSwgVFFNODU1TSBhbmQgVFFNODYwTSBtb2R1bGVzCi0KLSogQWRkIHN1cHBvcnQgZm9yIEFtMjlMVjE2ME1MLCBBbTI5TFYzMjBNTCwgYW5kIEFtMjlMVjY0ME1MCi0gIG1pcnJvciBiaXQgZmxhc2ggb24gVFFNOHh4TSBtb2R1bGVzCi0KLSogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDMwIEp1biAyMDAzOgotICBnZXQgcmlkIG9mIE1LX0NNRF9FTlRSWSBtYWNybzsgdXBkYXRlIGRvYy9SRUFETUUuY29tbWFuZAotCi0qIFBhdGNoIGJ5IFNlYiBKYW1lcywgMzAgSnVuIDIwMDM6Ci0gIEltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBJMkMgY29uZmlndXJhdGlvbiBpbiBSRUFETUUKLQotKiBGaXggcHJvYmxlbXMgd2l0aCBwcmV2aW91cyBsb2cgYnVmZmVyICJmaXhlcyIKLQotKiBGaXggbWlub3IgaGVscCB0ZXh0IGlzc3VlcwotCi0qICJsb2cgYXBwZW5kIiBkaWQgbm90IGFwcGVuZCBhIG5ld2xpbmUKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4xOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIEZpeCBzb21lIG1pc3NpbmcgY29tbWFuZHMsIGNsZWFudXAgaGVhZGVyIGZpbGVzCi0gIChhdXRvc2NyaXB0LCBibXAsIGJzcCwgZmF0LCBtbWMsIG5hbmQsIHBvcnRpbywgLi4uKQotCi0qIFJld3JpdGUgY29tbWFuZCBsb29rdXAgYW5kIGhlbHAgY29tbWFuZCAoZml4IHByb2JsZW1zIHdpdGggYnViYmxlCi0gIHNvcnQgd2hlbiBzb3J0aW5nIGNvbW1hbmQgbmFtZSBsaXN0KS4gTWlub3IgY2xlYW51cCBoZXJlIGFuZCB0aGVyZS4KLQotKiBNZXJnZSBmcm9tICJzdGFibGUgYnJhbmNoIiwgdGFnIExBQkVMXzIwMDNfMDZfMjhfMTgwMC1zdGFibGU6Ci0gIC0gQWxsb3cgdG8gY2FsbCBzeXNtb24gZnVuY3Rpb24gaW50ZXJhY3RpdmVseQotICAtIFBJQyBvbiBMV01PTiBib2FyZCBuZWVkcyBkZWxheSBhZnRlciBwb3dlci1vbgotICAtIEFkZCBtaXNzaW5nIFJTUiBkZWZpbml0aW9ucyBmb3IgTVBDOHh4Ci0gIC0gSW1wcm92ZSBsb2cgYnVmZmVyIGhhbmRsaW5nOiBndWFyYW50ZWUgY2xlYW4gcmVzZXQgYWZ0ZXIgcG93ZXItb24KLSAgLSBBZGQgc3VwcG9ydCBmb3IgRVhCSVRHRU4gYm9hcmQgKGFrYSAiZ2VuaWUiKQotICAtIEFkZCBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKLQotKiBDb2RlIGNsZWFudXA6Ci0gIC0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCB0cmFpbGluZyBlbXB0eSBsaW5lcywgQysrIGNvbW1lbnRzLCBldGMuCi0gIC0gc3BsaXQgY21kX2Jvb3QuYyAoc2VwYXJhdGUgY21kX2JkaW5mby5jIGFuZCBjbWRfbG9hZC5jKQotCi0qIFBhdGNoZXMgYnkgS2VubmV0aCBKb2hhbnNzb24sIDI1IEp1biAyMDAzOgotICAtIG1ham9yIHJld29yayBvZiBjb21tYW5kIHN0cnVjdHVyZQotICAgICh3b3JrIGRvbmUgbW9zdGx5IGJ5IE1pY2hhbCBDZW5kcm93c2tpIGFuZCBKb2FraW0gS3Jpc3RpYW5zZW4pCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMDoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjYgSnVuIDIwMDM6Ci0gIC0gY3NiMjI2IGNvbmZpZ3VyYXRpb24gdXBkYXRlZAotICAtIGNyZWRpdHMgZm9yIGxvZ29kbCBwb3J0IHVwZGF0ZWQKLSAgLSBpbm5va29tIGNvbmZpZ3VyYXRpb24gdXBkYXRlZAotICAtIGxvZ29kbCB0cmVlIHVwZGF0ZSwgc3RpbGwgd2l0aCBjb2Rpbmcgc3R5bGUgaW5jb25zaXN0ZW5jaWVzCi0gIC0gYWRkZWQgT0NNIGZvciBwcGM0MDUgd2FybmluZyB0byBSRUFETUUKLQotKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjUgSnVuIDIwMDM6Ci0gIHVwZGF0ZSBOZXRWaWEgd2l0aCBWMiBib2FyZCBzdXBwb3J0Ci0KLSogSGVhZGVyIGZpbGUgY2xlYW51cCBmb3IgQVJNCi0KLSogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjQgSnVuIDIwMDM6Ci0gIC0gbWFrZSBzdXJlIHRvIHVzZSBvbmx5IFUtYm9vdCBwcm92aWRlZCBoZWFkZXIgZmlsZXMKLSAgLSBmaXggcHJvYmxlbXMgd2l0aCAiLnJvZGF0YS5zdHIxLjQiIHNlY3Rpb24gYXMgdXNlZCBieSBHQ0MtMy54Ci0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBKdW4gMjAwMzoKLSAgLSBVcGRhdGUgZXNkIEFTSDQwNSBib2FyZCBmaWxlcy4KLSAgLSBVcGRhdGUgZXNkIERBU0FfU0lNIGNvbmZpZyBmaWxlLgotICAtIEFkZCBwaW5nIGNvbW1hbmQgdG8gc29tZSBlc2QgYm9hcmRzLgotCi0qIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIzIEp1biAyMDAzOgotICBVcGRhdGUgZm9yIE1QQzgyNjBBRFMgYm9hcmQKLQotKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMyBKdW4gMjAwMzoKLSAgLSBjbGVhbnVwIG9mIEdDQyAzLnggY29tcGlsZXIgd2FybmluZ3MKLQotKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgNCBKdW4gMjAwMzoKLSAgYWRkIGxhcmdlIG1lbW9yeSBzdXBwb3J0IGZvciBNUEM4MjY2QURTIGJvYXJkCi0KLSogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKLSAgLSBFbmFibGVkIHN0YW5kYXJkIHUtYm9vdCBkZXZpY2UgYWJzdHJhY3Rpb24gZm9yIEFSTQotICAtIEVuYWJsZWQgY29uc29sZSBkZXZpY2UgZm9yIEFSTQotICAtIEluaXRpbGl6ZWQgYmlfYmF1ZHJhdGUgZm9yIEFSTQotCi0qIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAyMyBBcHIgMjAwMzoKLSAgZml4IGJ5dGUgb3JkZXIgZm9yIDgyNHggSTJDIGFkZHJlc3NlcyAod3JpdGUgb3ApCi0KLSogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjAgSnVuIDIwMDM6Ci0gIC0gaHltb2QgdXBkYXRlCi0gIC0gY2xlYW51cCAoZXNwZWNpYWxseSBmb3IgZ2NjLTMueCBjb21waWxlcnMpCi0KLSogUGF0Y2ggYnkgVG9tIEd1aWxsaWFtcywgMjAgSnVuIDIwMDM6Ci0gIGFkZGVkIENPTkZJR183NTBGWCBzdXBwb3J0IGZvciBJQk0gNzUwRlggcHJvY2Vzc29ycwotCi0qIFBhdGNoIGJ5IERldmluIENydW1iLCAwMiBBcHIgMjAwMzoKLSAgRml4IGNsb2NrIGRpdmlkZXIgcm91bmRpbmcgcHJvYmxlbSBpbiBkcml2ZXJzL3NlcmlhbC5jCi0KLSogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKLSAgLSBGaXhlZCBzbWM5MWMxMTEgZHJpdmVyIHRvIHN5bmMgd2l0aCB0aGUgdS1ib290IGVudmlyb25tZW50Ci0gICAgKGRyaXZlci9zbWM5MWMxMTEuYykuCi0gIC0gQWRkZWQgZXRoX2luaXQgZXJyb3IgcmV0dXJuIGNoZWNrIGluIE5ldExvb3AgKG5ldC9uZXQuYykuCi0KLSogUGF0Y2ggYnkgS2VuIENob3UsIDE5IEp1bmUgMjAwMzoKLSAgQWRkZWQgc3VwcG9ydCBmb3IgQTMwMDAgU0JDIGJvYXJkIChBcnRpcyBNaWNyb3N5c3RlbXMgSW5jLikKLQotKiBQYXRjaGVzIGJ5IE11cnJheSBKZW5zZW4sIDE3IEp1biAyMDAzOgotICAtIEh5bW9kIGJvYXJkIGRhdGFiYXNlIG1vZHM6IGFkZCAid2hvIiBmaWVsZCBhbmQgbmV3IHhpbGlueCBjaGlwIHR5cGVzCi0gIC0gcHJvdmlkZSBuZXcgImluaXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gc28gY29kZSBleHRlcm5hbCB0bwotICAgICJjb21tb24vbWFpbi5jIiBjYW4gdXNlIHRoZSAicmVzZXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gYmVmb3JlCi0gICAgZW50ZXJpbmcgdGhlIG1haW4gbG9vcAotICAtIGFkZCBEVFQgc3VwcG9ydCBmb3IgYWRtMTAyMSAobmV3IGZpbGUgZHR0L2FkbTEwMjEuYzsgY29uZmlnCi0gICAgc2xpZ2h0bHkgZGlmZmVyZW50LiBzZWUgaW5jbHVkZS9jb25maWdzL2h5bW9kLmggZm9yIGFuIGV4YW1wbGUKLSAgICAocmVxdWlyZXMgQ09ORklHX0RUVF9BRE0xMDIxLCBDT05GSUdfRFRUX1NFTlNPUlMsIGFuZAotICAgIENGR19EVFRfQURNMTAyMSBkZWZpbmVkKQotICAtIGFkZCBuZXcgImVlcHJvbV9wcm9iZSgpIiBmdW5jdGlvbiB3aGljaCBoYXMgc2ltaWxhciBhcmdzIGFuZAotICAgIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byAiZWVwcm9tX3JlYWQoKSIgZXRjLgotICAtIGFkZCA4MjYwIEZDQyBldGhlcm5ldCBsb29wYmFjayBjb2RlIChuZXcgImV0aF9sb29wYmFja190ZXN0KCkiCi0gICAgZnVuY3Rpb24gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZpbmluZyBDT05GSUdfRVRIRVJfTE9PUEJBQ0tfVEVTVCkKLSAgLSBnZGJ0b29scyBjb3B5cmlnaHQgdXBkYXRlCi0gIC0gZW5zdXJlIHRoYXQgc2V0X21zcigpIGV4ZWN1dGVzIHRoZSAic3luYyIgYW5kICJpc3luYyIgaW5zdHJ1Y3Rpb25zCi0gICAgYWZ0ZXIgdGhlICJtdG1zciIgaW5zdHJ1Y3Rpb24gaW4gY3B1L21wYzgyNjAvaW50ZXJydXB0cy5jCi0gIC0gODI2MCBJL08gcG9ydHMgZml4OiBPcGVuIERyYWluIHNob3VsZCBiZSBzZXQgbGFzdCB3aGVuIGNvbmZpZ3VyaW5nCi0gIC0gYWRkIFNJVSBJUlEgZGVmaW5lcyBmb3IgODI2MAotICAtIGFsbG93IExEU0NSSVBUIG92ZXJyaWRlIGFuZCBPQkpDRkxBR1MgaW5pdGlhbGl6YXRpb246IGNoYW5nZSB0bwotICAgIGNvbmZpZy5tayB0byBhbGxvdyBib2FyZCBjb25maWd1cmF0aW9ucyB0byBvdmVycmlkZSB0aGUgR05VCi0gICAgbGlua2VyIHNjcmlwdCwgc2VsZWN0ZWQgdmlhIHRoZSBMRFNDUklQVCwgbWFrZSB2YXJpYWJsZSwgYW5kIHRvCi0gICAgZ2l2ZSBhbiBpbml0aWFsIHZhbHVlIHRvIHRoZSBPQkpDRkxBR1MgbWFrZSB2YXJpYWJsZQotICAtIDgyNjAgaTJjIGVuaGFuY2VtZW50OgotICAgIG8gY29ycmVjdGx5IGV4dGVuZHMgdGhlIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGFsbAotICAgICAgcXVldWVkIG1lc3NhZ2VzIGZvciBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlCi0gICAgbyB3aWxsIG5vdCBjb250aW51ZSB3aXRoIHJlY2VpdmUgaWYgdHJhbnNtaXQgdGltZXMgb3V0Ci0gICAgbyBlbnN1cmVzIHRoYXQgdGhlIGVycm9yIGNhbGxiYWNrIGlzIGRvbmUgZm9yIGFsbCBxdWV1ZWQgdHgKLSAgICAgIGFuZCByeCBtZXNzYWdlcwotICAgIG8gY29ycmVjdGx5IGRldGVjdHMgYm90aCB0eCBhbmQgcnggdGltZW91dHMsIG9ubHkgZGVsaXZlcnMgb25lIHRvCi0gICAgICB0aGUgY2FsbGJhY2ssIGFuZCBkb2VzIG5vdCBvdmVyd3JpdGUgYW4gZWFybGllciBlcnJvcgotICAgIG8gbG9naWMgaW4gaTJjX3Byb2JlIG5vdyBjb3JyZWN0Ci0gIC0gYWRkICJ2cHJpbnRmKCkiIGZ1bmN0aW9uIHNvIHRoYXQgInBhbmljKCkiIGZ1bmN0aW9uIGNhbiBiZQotICAgIHRlY2huaWNhbGx5IGNvcnJlY3QKLSAgLSBtYW55IEh5bW9kIGJvYXJkIGNoYW5nZXMKLQotKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTQgSnVuIDIwMDM6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIExvZ290cm9uaWMgREwgZGF0YWxvZ2dlciBib2FyZAotICAtIGNsZWFudXAgc2VyaWFsIGxpbmUgYWZ0ZXIga2VybWl0IGJpbmFyeSBkb3dubG9hZAotICAtIGFkZCBkZWJ1Z1ggbWFjcm8gKGRlYnVnIGxldmVsIHN1cHBvcnQpCi0gIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdC4KLQotKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTIgSnVuIDIwMDM6Ci0gIC0gcmV3cml0ZSBvZiB0aGUgUzNDMjRYMCByZWdpc3RlciBkZWZpbml0aW9ucyBzdHVmZgotICAtICJkcml2ZXIiIGZvciB0aGUgYnVpbHQtaW4gUzNDMjRYMCBSVEMKLQotKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEyIEp1biAyMDAzOgotICAtIEFkZCBNSUkgc3VwcG9ydCBhbmQgRXRoZXJuZXQgUEhZIGluaXRpYWxpemF0aW9uIGZvciBNUEM4MjYwQURTIGJvYXJkCi0gIC0gRml4IGluY29ycmVjdCBTSVVNQ1IgaW5pdGlhbGlzYXRpb24gY2F1c2VkIGJ5IHdyb25nIEhhcmQgUmVzZXQKLSAgICBjb25maWd1cmF0aW9uIHdvcmQgc3VwcGxpZWQgYnkgRlBHQSBvbiBzb21lIE1QQzgyNjBBRFMgYm9hcmRzCi0KLSogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDEwIEp1biAyMDAzOgotICBVbmlmeSBzdGF0dXMgTEVEIGludGVyZmFjZQotCi0qIEFkZCBzdXBwb3J0IGZvciBEUzEyODg3IFJUQzsgYWRkIFJUQyBzdXBwb3J0IGZvciBBVEMgYm9hcmQKLQotKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAxMSBKdW4gMjAwMzoKLSAgTW9kaWZpY2F0aW9ucyBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0Ci0gIC0gQWRkIEF0bWVsIERhdGFGbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nIGFuZCB3cml0aW5nLgotICAtIEFkZCBwb3NzaWJpbGl0eSB0byBib290IGEgTGludXggZnJvbSBEYXRhRmxhc2ggd2l0aCBCT09UTSBjb21tYW5kLgotICAtIEFkZCBGbGFzaCBkZXRlY3Rpb24gb24gQXRtZWwgQVQ5MVJNOTIwMERLCi0gICAgKGJldHdlZW4gQXRtZWwgQVQ0OUJWMTYxNCBhbmQgQVQ0OUJWMTYxNEEgZmxhc2hlcykKLSAgLSBSZXBsYWNlIG9sZCBFdGhlcm5ldCBQSFkgbGF5ZXIgZnVuY3Rpb25zCi0gIC0gQ2hhbmdlIGxpbmsgYWRkcmVzcwotCi0qIFBhdGNoIGJ5IEZyYW5rIFNtaXRoLCA5IEp1biAyMDAzOgotICB1c2UgQ1JJVF9FWENFUFRJT04gZm9yIG1hY2hpbmUgY2hlY2sgb24gNHh4Ci0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTMgSnVuIDIwMDM6Ci0gIGFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSAiY2FyaW5mbyIgY29tbWFuZCBpbiBjbWRfaW1tYXAuYwotCi0qIEZpeCBDT05GSUdfTkVUX01VTFRJIHN1cHBvcnQgaW4gaW5jbHVkZS9uZXQuaAotCi0qIFBhdGNoZXMgYnkgS3lsZSBIYXJyaXMsIDEzIE1hciAyMDAzOgotICAtIEFkZCBGQVQgcGFydGl0aW9uIHN1cHBvcnQKLSAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBGQVQKLSAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBNTUMKLSAgLS0tLQotICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgdmlkZW8KLSAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIE1NQwotICAtLS0tCi0gIC0gRW5hYmxlIE1NQyBhbmQgRkFUIGZvciBsdWJib2NrIGJvYXJkCi0gIC0gT3RoZXIgbWlzYyBjaGFuZ2VzIGZvciBsdWJib2NrIGJvYXJkCi0KLSogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCBBcHJpbCAwMiwgMjAwMzoKLSAgZml4IGZvciBTTVNDOTExMTEgZHJpdmVyCi0KLSogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA0IEp1biAyMDAzOgotICBtYWtlIHBwYzQwNSBldGhlcm5ldCBkcml2ZXIgY29tcGF0aWJsZSB3aXRoIENPTkZJR19ORVRfTVVMVEkgb3B0aW9uCi0KLSogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNSBKdW4gMjAwMzoKLSAgLSBQUEM0eHg6IEZpeCBidWcgZm9yIGluaXRpYWwgc3RhY2sgaW4gZGF0YSBjYWNoZSBhcyBwb2ludGVkIG91dCBieQotICAgIFRob21hcyBTY2hhZWZlciAodHNjaGFlZmVyQGdpZ2Etc3RyZWFtLmRlKS4gTm93IGluaXRhbCBzdGFjayBpbgotICAgIGRhdGEgY2FjaGUgY2FuIGJlIHVzZWQgZXZlbiBpZiB0aGUgY2hpcCBzZWxlY3QgaXMgaW4gdXNlLgotICAtIENGR19SWF9FVEhfQlVGRkVSIGFkZGVkIHRvIHNldCB0aGUgZXRoZXJuZXQgcmVjZWl2ZSBidWZmZXIgY291bnQKLSAgICAoc2VlIFJFQURNRSBmb3IgZnVydGhlciBkZXNjcmlwdGlvbikuCi0gIC0gQ2hhbmdlZCBjb25maWcgZmlsZXMgb2YgQ09ORklHX0VFUFJPMTAwIGJvYXJkcyB0byB1c2UgdGhlCi0gICAgQ0ZHX1JYX0VUSF9CVUZGRVIgZGVmaW5lLgotCi0qIEFkZCBzdXBwb3J0IGZvciBSTVUgYm9hcmQKLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBhdCAxMDAvNTAgTUh6Ci0KLSogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIEp1biAyMDAzOgotICBtYWpvciByZWNvbnN0cnVjdGlvbiBvZiBuZXR3b3JraW5nIGNvZGU7Ci0gIGFkZCAicGluZyIgc3VwcG9ydCAob3V0Z29pbmcgb25seSEpCi0KLSogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEp1bmUgMjAwMzoKLSAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDVUIGJvYXJkCi0KLSogUGF0Y2hlcyBieSBVZGkgRmlua2Vsc3RlaW4sIDIgSnVuZSAyMDAzOgotICAtIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSBrZXlib2FyZHMsIGluaXRpYWxpemVkIGJ5IGRlZmluaW5nIGEKLSAgICBib2FyZC1zcGVjaWZpYyBkcnZfa2V5Ym9hcmRfaW5pdCBhcyB3ZWxsIGFzIGRlZmluaW5nIENPTkZJR19LRVlCT0FSRCAuCi0gIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFJCQzgyMyBib2FyZC4KLSAgLSBjcHUvbXBjOHh4L2xjZC5jIG5vdyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZXMgdGhlCi0gICAgSG9yaXpvbnRhbCBQaXhlbCBDb3VudCBmaWVsZC4KLQotKiBGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gQk9PVFAgKGRoY3BfbGVhc2V0aW1lIG9wdGlvbikKLSAgW3BvaW50ZWQgb3V0IGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDIgSnVuIDIwMDNdCi0KLSogUGF0Y2ggYnkgTWFyayBSYWtlcywgMTQgTWF5IDIwMDM6Ci0gIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBlMTAwMCBnaWcgY2FyZHMuCi0KLSogUGF0Y2ggYnkgTnllIExpdSwgMyBKdW4gMjAwMzoKLSAgZml4IGNyaXRpY2FsIHR5cG8gaW4gTUFNUiBkZWZpbml0aW9uIChpbmNsdWRlL21wYzh4eC5oKQotCi0qIEZpeCByZXF1aXJlbWVudCB0byBhbGlnbiBVLUJvb3QgaW1hZ2Ugb24gMTYga0IgYm91bmRhcmllcyBvbiBQUEMuCi0KLSogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMiBKdW4gMjAwMwotICBNaW5vciBjaGFuZ2VzIGZvciBLVVA0SyBjb25maWd1cmF0aW9uCi0KLSogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI5IE1heSAyMDAzOgotICBGaXhlZCByYXJwIGJvb3QgbWV0aG9kIGZvciBJQTMyIGFuZCBvdGhlciBsaXR0bGUtZW5kaWFuIENQVXMuCi0KLSogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI4IE1heSAyMDAzOgotICBBZGRlZCBwb3J0IEkvTyBjb21tYW5kcy4KLQotKiBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2ssIDI4IE1heSAyMDAzCi0gIC0gY3B1L21wYzgyNHgvc3RhcnQuUzogZml4IHJlbG9jYXRpb24gY29kZSB3aGVuIGJvb3RpbmcgZnJvbSBSQU0KLSAgLSBtaW5vciBwYXRjaGVzIGZvciB1dHg4MjQ1Ci0KLSogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAyOCBNYXkgMjAwMzoKLSAgeDg2IHVwZGF0ZQotCi0qIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDkgTWF5IDIwMDMgKyAyNyBNYXkgMjAwMzoKLSAgYWRkIG5hbmQgZmxhc2ggc3VwcG9ydCB0byBTWE5JODU1VCBjb25maWd1cmF0aW9uCi0gIGZpeC9leHRlbmQgbmFuZCBmbGFzaCBzdXBwb3J0OgotICAtIGZpeCAnbmFuZCBlcmFzZScgY29tbWFuZCBzbyBkb2VzIG5vdCBlcmFzZSBiYWQgYmxvY2tzCi0gIC0gZml4ICduYW5kIHdyaXRlJyBjb21tYW5kIHNvIGRvZXMgbm90IHdyaXRlIHRvIGJhZCBibG9ja3MKLSAgLSBmaXggbmFuZF9wcm9iZSgpIHNvIGhhbmRsZXMgbm8gZmxhc2ggZGV0ZWN0ZWQgcHJvcGVybHkKLSAgLSBhZGQgZG9jL1JFQURNRS5uYW5kCi0gIC0gYWRkIC5qZmZzMiBhbmQgLm9vYiBvcHRpb25zIHRvIG5hbmQgcmVhZC93cml0ZQotICAtIGFkZCAnbmFuZCBiYWQnIGNvbW1hbmQgdG8gbGlzdCBiYWQgYmxvY2tzCi0gIC0gYWRkICdjbGVhbicgb3B0aW9uIHRvICduYW5kIGVyYXNlJyB0byB3cml0ZSBKRkZTMiBjbGVhbiBtYXJrZXJzCi0gIC0gbWFrZSBOQU5EIHJlYWQvd3JpdGUgZmFzdGVyCi0KLSogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDIzIE1heSAyMDAzOgotICBVcGRhdGUgZm9yIE1QQzgyNjZBRFMgYm9hcmQKLQotKiBHZXQgKG1vc3RseSkgcmlkIG9mIENGR19NT05JVE9SX0xFTiBkZWZpbml0aW9uOyBjb21wdXRlIHJlYWwgbGVuZ3RoCi0gIGluc3RlYWQgQ0ZHX01PTklUT1JfTEVOIGlzIG5vdyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lCSBfYXRfY29tcGlsZV8KLSAgX3RpbWVfICAoISkgaWYgdGhlIGVudmlyb25tZW50IGlzIGVtYmVkZGVkIHdpdGhpbiB0aGUgVS1Cb290IGltYWdlLAotICBvciBpbiBhIHNlcGFyYXRlIGZsYXNoIHNlY3Rvci4KLQotKiBDbGVhbnVwIENGR19ERVIgI2RlZmluZXMgaW4gY29uZmlnIGZpbGVzICh3ZCBtYWludGFpbmVkIG9ubHkpCi0KLSogRml4IGRhdGEgYWJvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBhcm05MjB0IENQVQotCi0qIEZpeCBhbGlnbm1lbnQgcHJvYmxlbXMgd2l0aCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQKLQotKiBQYXRjaCBieSBEb25hbGQgV2hpdGUsIDIxIE1heSAyMDAzOgotICBmaXggY2FsY3VsYXRpb24gb2YgYmFzZSBhZGRyZXNzIGluIHBjaV9ob3NlX2NvbmZpZ19kZXZpY2UoKQotCi0qIEZpeCBidWcgaW4gY29tbWFuZCBsaW5lIHBhcnNpbmc6ICJjbWQxO2NtZDIiIGlzIHN1cHBvc2VkIHRvIGFsd2F5cwotICBleGVjdXRlICJjbWQyIiwgZXZlbiBpZiAiY21kMSIgZmFpbHMuIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudAotICB0byAicnVuIHZhcjEgdmFyMiIgd2hlcmUgdGhlIGNvbnRlbnRzIG9mICJ2YXIyIiB3aWxsIE5PVCBiZQotICBleGVjdXRlZCB3aGVuIGEgY29tbWFuZCBpbiAidmFyMSIgZmFpbHMuCi0KLSogQWRkIHplcm8tY29weSByYW1kaXNrIHN1cHBvcnQgKHJlcXVpcmVzIGNvcnJlc3BvbmRpbmcga2VybmVsIHN1cHBvcnQhKQotCi0qIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAyMCBNYXkgMjAwMzoKLSAgSW4gcHJlcGFyYXRpb24gZm9yIGFuIGl4cCBwb3J0LCByZW5hbWUgY3B1L3hzY2FsZSBhbmQgYXJjaC14c2NhbGUKLSAgaW50byBjcHUvcHhhIGFuZCBhcmNoLXB4YS4KLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIzIE1heSAyMDAzOgotICAtIElCTSBQUEM0MDVFUCBwb3J0IGFkZGVkLgotICAtIENPTkZJR19VQVJUMV9DT05TT0xFIGFkZGVkLiBJZiBkZWZpbmVkIGludGVybmFsIFVBUlQxIChhbmQgbm90Ci0gICAgVUFSVDApIGlzIHVzZWQgYXMgZGVmYXVsdCBVLUJvb3QgY29uc29sZS4gUFBDNHh4IG9ubHkhCi0gIC0gZXNkIEFTSDQwNSBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQpLgotICAtIEJVQklOR0E0MDVFUCBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQgLSBJQk0gRXZhbCBCb2FyZCkuCi0gIC0gZXNkIENQQ0k0MDVBQiBib2FyZCBhZGRlZC4KLSAgLSBlc2QgUE1DNDA1IGJvYXJkIGFkZGVkLgotICAtIFVwZGF0ZSBvZiBzb21lIGVzZCBib2FyZHMuCi0KLSogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE5IE1haSAyMDAzOgotICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNS0zIGJvYXJkCi0KLSogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMjIgTWF5IDIwMDM6Ci0gIEZpeCBwcm9ibGVtIHdpdGggb25seSBwYXJ0aWFsbHkgY2xlYXJlZCAuYnNzIHNlZ21lbnQKLQotKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTIgTWF5IDIwMDM6Ci0gIGdldCBQQ0kgdG8gd29yayBvbiBhIE1QQzgyNjZBRFMgYm9hcmQ7IGluY29ycG9yYXRlIGNoYW5nZSB0bwotICBjcHUvbXBjODI2MC9wY2kuYyB0byBlbmFibGUgb3ZlcnJpZGVzIG9mIFBDSSBtZW1vcnkgcGFyYW1ldGVycwotCi0qIFBhdGNoIGJ5IE55ZSBMaXUsIDEgTWF5IDIwMDM6Ci0gIG1pbm9yIHBhdGNoZXMgZm9yIHRoZSBGQURTOHh4Ci0KLSogUGF0Y2ggYnkgVGhvbWFzIFNjaORmZXIsIDI4IEFwciAyMDAzOgotICBGaXggU1BEIGhhbmRsaW5nIGZvciAyNTYgRUNDIERJTU0gb24gV2FsbnV0Ci0KLSogQWRkIHN1cHBvcnQgZm9yIGFyYml0cmFyeSBiaXRtYXBzIGZvciBUUkFCJ3MJVkZEIGNvbW1hbmQ7Ci0gIGFsbG93IHRvIHBhc3MgYm9vdCBiaXRtYXAgYWRkcmVzc2VzIGluIGVudmlyb25tZW50IHZhcmlhYmxlczsKLSAgYWxsb3cgZm9yIHplcm8gYm9vdCBkZWxheQotCi0qIFBhdGNoIGJ5IENocmlzdGlhbiBHZWnfaW5nZXIsIDE5IE1heSAyMDAyOgotICBPbiBUUkFCOiB3YWl0IHVudGlsIHRoZSBkdW1teSBieXRlIGhhcyBiZWVuIGNvbXBsZXRlbHkgc2VudAotCi0qIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMjIgQXByIDIwMDM6Ci0gIHVwZGF0ZSBmb3IgQ3JheUwxIGJvYXJkCi0KLSogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDIxIEFwciAyMDAzOgotICBhZGQgYm9vdCBzdXBwb3J0IGZvciBBUlRPUyAoYSBwcm9wcmlldGFyeSBPUykKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMSBBcHIgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMzgKLQotKiBQYXRjaCBieSBSb2QgQm95Y2UsIDI0IEphbiAyMDAzOgotICBGaXggY291bnRpbmcgb2YgZXh0ZW5kZWQgcGFydGl0aW9ucyBpbiBkaXNrYm9vdCBjb21tYW5kCi0KLSogUGF0Y2ggYnkgQ2hyaXN0b3BoZSBMaW5kaGVpbWVyLCAyMCBNYXkgMjAwMzoKLSAgYWxsb3cgdGhlIHVzZSBvZiBDRkdfTE9BRFMgd2hlbiBDRkdfTk9fRkxBU0ggaXMgc2V0Ci0KLSogRml4IFNEUkFNIHRpbWluZyBvbiBQdXJwbGUgYm9hcmQKLQotKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIG9uIEFUQyBib2FyZAotICAoaW5jbHVkZXMgc3VwcG9ydCBmb3IgSW50ZWwgODIzNjUgYW5kIGNvbXBhdGlibGUgUEMgQ2FyZCBjb250cm9sbGVycywKLSAgYW5kIFllbnRhLWNvbXBhdGlibGUgUENJLXRvLUNhcmRCdXMgY29udHJvbGxlcnMpCi0KLSogUGF0Y2ggYnkgTWF0aGlqcyBIYWFybWFuLCAwOCBNYXkgMjAwMzoKLSAgQWRkIGxhbjkxYzk2IGRyaXZlciAodGVzdGVkIG9uIEx1YmJvY2sgYW5kIGN1c3RvbSBQWEEyNTAgYm9hcmQgb25seSkKLQotKiBGaXggcHJvYmxlbSB3aXRoIHVzYWdlIG9mICJ0cnVlIiAodW5kZWZpbmVkIGluIGN1cnJlbnQgdmVyc2lvbnMgb2YgYmZkLmgpCi0KLSogQWRkIHN1cHBvcnQgZm9yIFByb21lc3MgQVRDIGJvYXJkCi0KLSogUGF0Y2ggYnkgS2VpdGggT3V0d2F0ZXIsIDI4IEFwciAyMDAzOgotICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgYW5kIGFkZGl0aW9ucyB0byBHRU44NjBUIGJvYXJkIHNwZWNpZmljIGNvZGUuCi0gIC0gQWRkZWQgR0VOODYwX1NDIHZhcmlhbnQgdG8gR0VOODYwVC4KLSAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIHRvIEdFTjg2MFQgZG9jdW1lbnRhdGlvbi4KLSAgLSBDb3JyZWN0IGR1cGxpY2F0ZSBlbnRyeSBpbiBVLUJvb3QgQ1JFRElUUyBmaWxlLgotICAtIEFkZCBHRU44NjBUX1NDIGVudHJ5IGluIE1BSU5UQUlORVJTIGZpbGUuCi0gIC0gVXBkYXRlIENSRURJVFMgZmlsZSB3aXRoIEdFTjg2MFRfU0MgaW5mby4KLQotKiBVcGRhdGUgU21pdGhzIEFlcm9zcGFjZSBhZGRyZXNzZXMgaW4gTUFJTlRBSU5FUlMgZmlsZQotCi0qIEZpeCBlcnJvciBoYW5kbGluZyBpbiBodXNoJ3MgdmVyc2lvbiBvZiAicnVuIiBjb21tYW5kCi0KLSogTFdNT04gZXh0ZW5zaW9uczoKLSAgLSBTcGxhc2hzY3JlZW4gc3VwcG9ydAotICAtIG1vZGVtIHN1cHBvcnQKLSAgLSBzeXNtb24gc3VwcG9ydAotICAtIHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBlbmFibGluZyBvZiBMQ0QKLQotKiBBbGxvdyBib290aW5nIGZyb20gb2xkICJQUENCb290IiBkaXNrIHBhcnRpdGlvbnMKLQotKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI1NSBCb2FyZCAvIE1QQzgyNTUgQ1BVCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMToKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBNYWtlIHN1cmUgQmxvY2sgTG9jayBCaXRzIGdldCBjbGVhcmVkIGluIFIzNjBNUEkgZmxhc2ggZHJpdmVyCi0KLSogTVBDODIzIExDRCBkcml2ZXI6IEZpbGwgY29sb3IgbWFwIGJhY2t3YXJkcywgdG8gYWxsb3cgZm9yIHN0ZWFkeQotICBkaXNwbGF5IHdoZW4gTGludXggdGFrZXMgb3ZlcgotCi0qIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBSVEVNUyAodGhpcyB0aW1lIGZvciByZWFsKS4KLQotKiBBZGQgc3VwcG9ydCBmb3IgImJtcCBpbmZvIiBhbmQgImJtcCBkaXNwbGF5IiBjb21tYW5kcyB0byBsb2FkCi0gIGJpdG1hcCBpbWFnZXM7IHRoaXMgY2FuIGJlIHVzZWQgKGZvciBleGFtcGxlIGluIGEgInByZWJvb3QiCi0gIGNvbW1hbmQpIHRvIGRpc3BsYXkgYSBzcGxhc2ggc2NyZWVuIHZlcnkgcXVpY2tseSBhZnRlciBwb3dlcm9uLgotCi0qIEFkZCBzdXBwb3J0IGZvciAxMzMgTUh6IGNsb2NrIG9uIElOQ0EtSVAgYm9hcmQKLQotKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTAgQXByIDIwMDM6Ci0gIFVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAotCi0qIEFkZCBuZXcgbWVhbmluZyB0byAiYXV0b3N0YXJ0IiBlbnZpcm9ubWVudCB2YXJpYWJsZToKLSAgSWYgc2V0IHRvICJubyIsIGEgc3RhbmRhbG9uZSBpbWFnZSBwYXNzZWQgdG8gdGhlCi0gICJib290bSIgY29tbWFuZCB3aWxsIGJlIGNvcGllZCB0byB0aGUgbG9hZCBhZGRyZXNzCi0gIChhbmQgZXZlbnR1YWxseSB1bmNvbXByZXNzZWQpLCBidXQgTk9UIGJlIHN0YXJ0ZWQuCi0gIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9hZCBhbmQgdW5jb21wcmVzcyBhcmJpdHJhcnkKLSAgZGF0YS4KLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEFwciAyMDAzOgotICBDaGFuZ2VkIERIQ1AgY2xpZW50IHRvIHVzZSBJUCBhZGRyZXNzIGZyb20gc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQKLSAgZnJvbSB0aGUgT0ZGRVIgcGFja2V0IGluIHRoZSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NCBpbiB0aGUgUkVRVUVTVAotICBwYWNrZXQuIFRoaXMgZml4ZXMgYSBwcm9ibGVtIHVzaW5nIGEgV2luZG93cyAyMDAwIERIQ1Agc2VydmVyLAotICB3aGVyZSB0aGUgREhDUC1zZXJ2ZXIgaXMgbm90IHRoZSBURlRQLXNlcnZlci4KLQotKiBTZXQgbWF4IGJyaWdodG5lc3MgZm9yIE1OMTEyMzYgZGlzcGxheXMgb24gVFJBQiBib2FyZAotCi0qIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIG1vZHVsZXMKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4wOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCA0IEFwciAyMDAzOgotICBBZGQgSURNQSBleGFtcGxlIGNvZGUgKHRlc3RlZCBvbiA4MjYwIG9ubHkpCi0KLSogQWRkIHN1cHBvcnQgZm9yIFB1cnBsZSBCb2FyZCAoTUlQUzY0IDVLYykKLQotKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzY0IDVLYyBDUFVzCi0KLSogRml4IG1pc3Npbmcgc2V0dGluZyBvZiAibG9hZGFkZHIiIGFuZCAiYm9vdGZpbGUiIG9uIEFSTSBhbmQgTUlQUwotCi0qIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBBcHIgMjAwMzoKLSAgLSB1cGRhdGUgTUlQNDA1LTQgYm9hcmQKLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDQgQXByIDIwMDM6Ci0gIC0gVS1Cb290IHZlcnNpb24gZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgYWRkZWQKLSAgICAoQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUpLgotICAtIENoYW5nZWQgUFBDNDA1R1ByIHZlcnNpb24gZnJvbSBBIHRvIEIuCi0gIC0gQ2hhbmdlZCBDUENJNDA1IHRvIHVzZSBDVFMgaW5zdGVhZCBvZiBEU1Igb24gUFBDNDA1IFVBUlQxLgotCi0qIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDAzIEFwcmlsIDIwMDM6Ci0gIC0gZml4IFBDSSBJUlFzIG9uIE1QTCBib2FyZHMKLSAgLSBmaXggdHdvIG1vcmUgdW4tcmVsb2NhdGVkIHBvaW50ZXIgcHJvYmxlbXMKLQotKiBGaXggYmVoYXZpb3VyIG9mICJydW4iIGNvbW1hbmQ6Ci0gIC0gcHJpbnQgZXJyb3IgbWVzc2FnZSBpdiB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdAotICAtIHRlcm1pbmF0ZSBwcm9jZXNzaW5nIG9mIGFyZ3VtZW50cyBpbiBjYXNlIG9mIGVycm9yCi0KLSogUGF0Y2hlcyBieSBQZXRlciBGaWd1bGksIDEwIE1hciAyMDAzCi0gIC0gQWRkIHN1cHBvcnQgZm9yIEJUVUFSVCBvbiBQWEEgcGxhdGZvcm0KLSAgLSBBZGQgc3VwcG9ydCBmb3IgV0VQIEVQMjUwIChQWEEpIGJvYXJkCi0KLSogRml4IGZsYXNoIHByb2JsZW1zIG9uIElOQ0EtSVA7IGFkZCB0b29sIHRvIGFsbG93IGJydW5pbmcgaW1hZ2VzICB0bwotICBmbGFzaCB1c2luZyBhIEJESTIwMDAKLQotKiBJbXBsZW1lbnQgZml4IGZvciBJMkMgRWRnZSBDb25kaXRpb25zIHByb2JsZW0gZm9yIGFsbCBib2FyZHMgdGhhdAotICB1c2UgdGhlIGJpdC1iYW5naW5nIGRyaXZlciAoY29tbW9uL3NvZnRfaTJjLmMpCi0KLSogUGF0Y2ggYnkgTWFydGluIFdpbmlzdG9lcmZlciwgMjMgTWFyIDIwMDMKLSAgLSBBZGQgcG9ydCB0byBNUEM1NTUvNTU2IG1pY3JvY29udHJvbGxlcnMKLSAgLSBBZGQgc3VwcG9ydCBmb3IgY21pIGN1c3RvbWVyIGJvYXJkIHdpdGgKLSAgICBJbnRlbCAyOEYxMjhKM0EsIDI4RjMyMEozQSBvciAyOEY2NDBKM0EgZmxhc2guCi0KLSogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAyOCBNYXIgMjAwMzoKLSAgLSBmaXggY29tbW9uL2NtZF9uYW5kLmMKLQotKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgMjQgTWFyIDIwMDM6Ci0gIC0gYWRkIHRocmVhZHMgLyBzY2hlZHVsZXIgZXhhbXBsZSBjb2RlCi0KLSogQWRkIHBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAzMSBNYXIgMjAwMzoKLSAgLSBhZGQgY3RybC1jIHN1cHBvcnQgZm9yIGtlcm1pdCBkb3dubG9hZAotICAtIGFsaWduIGJkaW5mbyBvdXRwdXQgb24gQVJNCi0gIC0gY3NiMjI2IGJvYXJkOiBicmluZyBpbiBzeW5jIHdpdGggaW5ub2tvbS9tZW1zZXR1cC5TCi0gIC0gY3NiMjI2IGJvYXJkOiBmaXggTURSRUZSIGhhbmRsaW5nCi0gIC0gbWlzYyBkb2MgZml4ZXMgLyBleHRlbnNpb25zCi0gIC0gaW5ub2tvbSBib2FyZDogY2xlYW51cCwgTURSRUZSIGZpeCBpbiBtZW1zZXR1cC5TLCBjb25maWcgdXBkYXRlCi0gIC0gYWRkIEJPT1RfUFJPR1JFU1MgdG8gYXJtbGludXguYwotCi0qIEFkZCBDUFUgSUQsIHZlcnNpb24sIGFuZCBjbG9jayBzcGVlZCBmb3IgSU5DQS1JUAotCi0qIFBhdGNoZXMgYnkgRGF2ZSBFbGxpcywgMTggTWFyIDIwMDMgZm9yIFNYTkk4NTVUIGJvYXJkOgotICAtIGZpeCBTUkFNIGFuZCBTRFJBTSBtZW1vcnkgc2l6aW5nCi0gIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydAotICAtIGFkZCBNQUMgYWRkcmVzcyBmb3Igc2Vjb25kIChTQ0MxKSBldGhlcm5ldCBwb3J0Ci0KLSogVXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgZm9yIFRRTTgyNjAgYm9hcmQKLQotKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE2IE1hciAyMDAzOgotICAtIEFkZCBOQU5EIGZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBlcmFzaW5nIE5BTkQKLSAgICBmbGFzaCAoY2VydGFpbiBmb3JtcyBvZiB3aGljaCBhcmUgY2FsbGVkIFNtYXJ0TWVkaWEpLgotICAtIEFkZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQuCi0KLSogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE5IE1hciAyMDAzOgotICAtIHVzZSBhcm0tbGludXgtZ2NjIGFzIGRlZmF1bHQgY29tcGlsZXIgZm9yIEFSTQotICAtIGZpeCBpMmMgZml4dXAgY29kZQotICAtIGZpeCBtaXNzaW5nIGJhdWRyYXRlIHNldHRpbmcKLSAgLSBhZGRlZCAkbG9hZGFkZHIgLyBDRkdfTE9BRF9BRERSIHN1cHBvcnQgdG8gbG9hZGIKLSAgLSBtb3ZlZCAiaWdub3JpbmcgdHJhaWxpbmcgY2hhcmFjdGVycyIgX2JlZm9yZV8gdS1ib290IHdhbnRzIHRvCi0gICAgcHJpbnQgb3V0IGRpYWdub3N0aWNzIG1lc3NhZ2VzOyByZW1vdmVzIGJvZ3VzIGNoYXJhY3RlcnMgYXQgdGhlCi0gICAgZW5kIG9mIHRyYW5zbWlzc2lvbgotCi0qIFBhdGNoIGJ5IEpvaG4gWmhhbiwgMTggTWFyIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBib2FyZHMKLQotKiBQYXRjaCBieSBSb2xmIE9mZmVybWFubnMsIDIxIE1hciAyMDAzOgotICBwb3J0ZWQgdGhlIGRucDExMTAgcmVsYXRlZCBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgYXJtYm9vdCBjdnMgdG8KLSAgY3VycmVudCB1LWJvb3QgY3ZzLiBzbWM5MTExMSBkb2VzIG5vdCB3b3JrLiBwcm9ibGVtIG1hcmtlZCBpbgotICBzbWM5MTExMS5jLCBncmVwIGZvciAiRklYTUUiLgotCi0qIFBhdGNoIGJ5IEJyaWFuIEF1bGQsIDI1IE1hciAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgU1RNIGZsYXNoIGNoaXBzIG9uIGVib255IGJvYXJkCi0KLSogQWRkIFBDSSBzdXBwb3J0IGZvciBNUEM4MjUwIEJvYXJkcyAoUE04MjUgbW9kdWxlKQotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjUgTWFyIDIwMDM6Ci0gIC0gUENJNDA1IHVwZGF0ZS4KLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE1hciAyMDAzOgotICAtIENQQ0k0MDUyIHVwZGF0ZSAoc3VwcG9ydCBmb3IgcmV2aXNpb24gMykuCi0gIC0gU2V0IGVkZ2UgY29uZGl0aW9uaW5nIGNpcmN1aXRyeSBvbiBQUEM0MDVHUHIgZm9yIGNvbXBhdGliaWxpdHkKLSAgICB0byBleGlzdGluZyBQUEM0MDVHUCBkZXNpZ25zLgotICAtIENsaXAgdWRpdiB0byA1IGJpdHMgb24gUFBDNDA1IChzZXJpYWwuYykuCi0KLSogRXh0ZW5kIElOQ0FJUCBib2FyZCBzdXBwb3J0OgotICAtIGFkZCBhdXRvbWF0aWMgUkFNIHNpemUgZGV0ZWN0aW9uCi0gIC0gYWRkICJiZGluZm8iIGNvbW1hbmQKLSAgLSBwYXNzIGZsYXNoIGFkZHJlc3MgYW5kIHNpemUgdG8gTGludXgga2VybmVsCi0gIC0gc3dpdGNoIHRvIDE1MCBNSHogY2xvY2sKLQotKiBBdm9pZCBmbGlja2VyIG9uIHRoZSBUUkFCJ3MgVkZEIGJ5IHN5bmNocm9uaXppbmcgdGhlIGVuYWJsZSB3aXRoCi0gIHRoZSBIU1lOQy9WU1lOQy4gUmVxdWlyZXMgbmV3IENQTEQgY29kZSAoVmVyc2lvbiAxMDEgZm9yIFJldi4gMTAwCi0gIGJvYXJkcywgdmVyc2lvbiAxNTMgZm9yIFJldi4gMjAwIGJvYXJkcykuCi0KLSogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDEyIE1hciAyMDAzOgotICBGaXggcmVsb2NhdGlvbiBwcm9ibGVtIG9mIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc3RyaW5nIHBvaW50ZXJzCi0gIGluIGNvbW1vbi9jbWRfcGNpLmMKLQotKiBQYXRjaCBieSBLYWktVXdlIEJs9m0sIDEyIE1hciAyMDAzOgotICBDbGVhbnVwICYgYnVnIGZpeGVzIGZvciBKRkZTMiBjb2RlOgotICAtIHRoZSBtZW1vcnkgbWFuZ2VtZW50IHdhcyBicm9rZW4uIEl0IGNhdXNlZCBoYXZvYyBvbiBtYWxsb2MgYnkKLSAgICB3cml0aW5nIGJleW9uZCB0aGUgYmxvY2sgYm91bmRhcmllcy4KLSAgLSB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciBmaWxlcyB3YXMgd3JvbmcsIHNvbWV0aW1lcyByZXN1bHRpbmcKLSAgICBpbiBzaG9ydCBmaWxlIHJlYWRzLgotICAtIGRhdGEgY29weWluZyBub3cgb3B0aW9uYWxseSB0YWtlcyBmcmFnbWVudCB2ZXJzaW9uIG51bWJlcnMgaW50bwotICAgIGFjY291bnQsIHRvIGF2b2lkIGNvcHlpbmcgZnJvbSBvbGRlciBkYXRhLgotICBTZWUgZG9jL1JFQURNRS5KRkZTMiBmb3IgZGV0YWlscy4KLQotKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDEyIE1hciAyMDAzOgotICAtIDE2LzMyIE1CIGFuZCA1MC84MCBNSHogc3VwcG9ydCB3aXRoIGF1dG8tZGV0ZWN0aW9uIGZvciBJUDg2MAotICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKLSAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUEM0NQotICAtIG5ldyBCT09UUk9NL0ZMQVNIMCBhbmQgRE9DIGJhc2UgZm9yIFBNODI2Ci0KLSogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMiBNYXIgMjAwMzoKLSAgRml4IHRoZSBjaHBhcnQgY29tbWFuZCBvbiBpbm5va29tIGJvYXJkCi0KLSogTmFtZSBjbGVhbnVwOgotICBtdiBpbmNsdWRlL2FzbS1pMzg2L3BwY2Jvb3QtaTM4Ni5oIGluY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaAotICBzL1BQQ0Jvb3QvVS1Cb290LyBpbiBzb21lIGZpbGVzCi0gIHMvcEltYWdlL3VJbWFnZS8gIGluIHNvbWUgZmlsZXMKLQotKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNSBKYW4gMjAwMzoKLSAgRml4ICcnIGNvbW1hbmQgbGluZSBxdW90aW5nCi0KLSogUGF0Y2ggYnkgVGhlIExFT1ggdGVhbSwgMTkgSmFuIDIwMDM6Ci0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFTFBUODYwIGJvYXJkCi0gIC0gYWRkIHN1cHBvcnQgZm9yIERhbGxhcyBkczE2NHggUlRDCi0KLSogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDMxIEphbiAyMDAzOgotICAtIG1pbmltYWwgc2V0dXAgZm9yIENhcmRCdXMgYnJpZGdlcwotICAtIGFkZCBFRVBST00gcmVhZC93cml0ZSBzdXBwb3J0IGluIHRoZSBDUzg5MDAgZHJpdmVyCi0gIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBidWlsdGluIEkyQyBjb250cm9sbGVyIGluIHRoZSBTYW1zdW5nIHMzYzI0eDAgY2hpcHMKLSAgLSBhZGQgc3VwcG9ydCBmb3IgTVBMJ3MgVkNNQTkgKFNhbXN1bmcgczNjMjQxMCBiYXNlZCkgYm9hcmQKLQotKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBGZWIgMjAwMzoKLSAgYWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMDcKLQotKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgNSBGZWIgMjAwMzoKLSAgZml4IFBMUFJDUi9TQ0NSIGluaXQgc2VxdWVuY2Ugb24gOHh4IHRvIGFsbG93IGZvcgotICBjaGFuZ2VzIG9mIEVCREYgYnkgc29mdHdhcmUKLQotKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDcgRmViIDIwMDM6Ci0gICJBUEktY29tcGF0aWJpbGl0eSBwYXRjaCIgZm9yIDR4eCBJMkMgZHJpdmVyCi0KLSogVFJBQiBmaXhlcyAvIGV4dGVuc2lvbnM6Ci0gIC0gUmVzdG9yZSBWRkQgYnJpZ2h0bmVzcyBhcyBzYXZlZCBpbiBlbnZpcm9ubWVudAotICAtIGFkZCBzdXBwb3J0IGZvciBGdWppdHN1IGZsYXNoZXMKLSAgLSBtYWtlIHN1cmUgYm90aCBidXp6ZXJzIGFyZSB0dXJuZWQgb2ZmIChkcml2ZSBsb3cgbGV2ZWwpCi0KLSogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDA2IE1hciAyMDAzOgotICAtIGZpeCBidWcgaW4gQk9PVFAgY29kZSAobXVzdCB1c2UgTmV0Q29weUlQKQotICAtIHVwZGF0ZSBvZiBDU0IyMjYgcG9ydAotICAtIGNsZWFyIEJTUyBzZWdtZW50IG9uIFhTY2FsZQotICAtIGFkZGVkIHN1cHBvcnQgZm9yIGkyY19pbml0X2JvYXJkKCkgZnVuY3Rpb24KLSAgLSB1cGRhdGUgdG8gdGhlIElubm9rb20gcGxhdHRmb3JtCi0KLSogRXh0ZW5kIHN1cHBvcnQgZm9yIHJlZHVuZGFuZCBlbnZpcm9ubWVudHMgZm9yIGNvbmZpZ3VyYXRpb25zIHdoZXJlCi0gIGVudmlyb25tZW50IHNpemUgPCBzZWN0b3Igc2l6ZQotCi0qIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMyBGZWIgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE1QQzgyNjZBRFMgYm9hcmQKLQotKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTkgRmViIDIwMDM6Ci0gIHBhdGNoZXMgZm9yIHRoZSBJbnRlbCBsdWJib2NrIGJvYXJkOgotICBtZW1zZXR1cC5TIC0gZ2VuZXJhbCBjbGVhbnVwIChiYXNlZCBvbiBSb2JlcnQncyBjc2IyMjYgY29kZSkKLSAgZmxhc2guYyAtIG92ZXJoYXVsLCBhY3R1YWxseSB3b3JrcyBub3cKLSAgbHViYm9jay5jIC0gZml4IGluaXQgZnVuY3MgdG8gcmV0dXJuIHByb3BlciB2YWx1ZQotCi0qIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNiBGZWIgMjAwMzoKLSAgLSBGaXhlZCBvZmYgYnkgb25lIGluIFJGVEEgY2FsY3VsYXRpb24uCi0gIC0gTm8gbmVlZCB0byBhYm9ydCB3aGVuIExERiBpcyBsb3dlciB0aGFuIHdlIGNhbiBwcm9ncmFtIGl0J3Mgb25seQotICAgIG1pbmltdW0gdGltaW5nIHNvIGNsYW1wIGl0IHRvIHdoYXQgd2UgY2FuIGRvLgotICAtIFRha2VzIGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIHNwZF9udnJhbS4gVXNlZnVsbAotICAgIGZvciBmYWtpbmcgZGF0YSBvciBoYXJkY29kZSBhIG1vZHVsZSB3aXRob3V0IHRoZSBudnJhbS4KLSAgLSBmaXggb3RoZXIgdXNlciBmb3IgYWJvdmUgY2hhbmdlCi0gIC0gZml4IHNvbWUgY29tbWVudHMuCi0KLSogUGF0Y2hlcyBieSBCcmlhbiBXYWl0ZSwgMjYgRmViIDIwMDM6Ci0gIC0gZml4IHBvcnQgZm9yIGV2YjY0MjYwIGJvYXJkCi0gIC0gZml4IFBDSSBmb3IgZXZiNjQyNjAgYm9hcmQKLSAgLSBmaXggUENJIHNjYW4KLQotKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMSBNYXIgMjAwMzoKLSAgQWRkIHN1cHBvcnQgZm9yIEVNSyBUT1A4NjAgTW9kdWxlCi0KLSogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDIgTWFyIDIwMDM6Ci0gIEFkZCBTUEQgRUVQUk9NIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMgYm9hcmQKLQotKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDIxIEphbiAyMDAzOgotICAtIEFkZCBzdXBwb3J0IGZvciBJbm5va29tIGJvYXJkCi0gIC0gRG9uJ3QgY29tcGxhaW4gaWYgImluc3RhbGwiIGZhaWxzCi0gIC0gUkVBRE1FIGNsZWFudXAgKHJlbW92ZSBkdXBsaWNhdGVkIGxpbmVzKQotICAtIFVwZGF0ZSBQWEEgaGVhZGVyIGZpbGVzCi0KLSogQWRkIGRvY3VtZW50YXRpb24gZm9yIGV4aXN0aW5nIFBPU1QgY29kZSAoZG9jL1JFQURNRS5QT1NUKQotCi0qIFBhdGNoIGJ5IExhdWRuZXkgUmVuLCAxNSBKYW4gMjAwMzoKLSAgRml4IGhhbmRsaW5nIG9mIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiAidG9vbHMvZW52Y3JjLmMiCi0KLSogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjggRmViIDIwMDM6Ci0gIEFkZCBiZWRidWcgc3VwcG9ydCBmb3IgODI0eCBzeXN0ZW1zCi0KLSogQWRkIHN1cHBvcnQgZm9yIDE2IE1CIGZsYXNoIGNvbmZpZ3VyYXRpb24gb2YgVFJBQiBib2FyZAotCi0qIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBSVEVNUwotCi0qIEFkZCBpbWFnZSBpbmZvcm1hdGlvbiB0byBSRUFETUUKLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEZlYiAyMDAzOgotICBDUENJSVNFUjQgY29uZmlndXJhdGlvbiB1cGRhdGVkLgotCi0qIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgRmViIDIwMDM6Ci0gIEZpeGVkIGJ1ZyBpbiBleHQuIHNlcmlhbCBjbG9jayBzZXR1cCBvbiBQUEM0MDUgKHNpbmNlIFBQQzQ0MCBwb3J0KS4KLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEZlYiAyMDAzOgotICBBZGQgInBjaWRlbGF5IiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoaW4gbXMsIGVuYWJsZWQgdmlhCi0gIENPTkZJR19QQ0lfQk9PVERFTEFZKS4KLSAgUENJIHNwZWMgMi4yIGRlZmluZXMsIHRoYXQgYSBwY2kgdGFyZ2V0IGhhcyAyXjI1IHBjaSBjbG9ja3MgYWZ0ZXIKLSAgUlNUIyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gY3ljbGVzICgzM01IeiAtPiAxcykuCi0KLSogRml4IGR1YWwgUENNQ0lBIHNsb3Qgc3VwcG9ydCAod2hlbiBydW5uaW5nIHdpdGgganVzdCBvbmUKLSAgc2xvdCBwb3B1bGF0ZWQpCi0KLSogQWRkIFZGRCB0eXBlIGRldGVjdGlvbiB0byB0cmFiIGJvYXJkCi0KLSogZXh0ZW5kIGRyaXZlcnMvY3M4OTAwLmMgZHJpdmVyIHRvIHN5bmNocm9uaXplCSBldGhhZGRyICBlbnZpcm9ubWVudAotICB2YXJpYWJsZSB3aXRoIHZhbHVlIGluIHRoZSBFRVBST00KLQotKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEZlYiAyMDAzOgotICBBZGQgc3VwcG9ydCBmb3IgNE1CIGFuZCAxMjhNQiBvbmJvYXJkIFNEUkFNIChjcHUvcHBjNHh4L3NkcmFtLmMpCi0KLSogQWRkIHN1cHBvcnQgZm9yIE1JUFMzMiA0S2MgQ1BVcwotCi0qIEFkZCBzdXBwb3J0IGZvciBJTkNBLUlQIEJvYXJkCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMjoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBBZGQgZHVhbCBldGhlcm5ldCBzdXBwb3J0IG9uIFBNODI2Ci0KLSogQWRkIHN1cHBvcnQgZm9yIExYVDk3MSBQSFkgb24gUE04MjYKLQotKiBQYXRjaCBieSBUb3JkIEFuZGVyc3NvbiwgMTYgSmFuIDIwMDM6Ci0gIEZpeCBmbGFzaCBzZWN0b3IgY291bnQgZm9yIFRRTTh4eEwKLQotKiBGaXggSTJDIEVFUFJPTSBwcm9ibGVtIG9uIElDVTg2MiBib2FyZCAod291bGQgb25seSB3cml0ZSB0aGUgZmlyc3QKLSAgMTYgYnl0ZXMgb3V0IG9mIGVhY2ggMzIgYnl0ZSBibG9jaykKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4xOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIEFkZCBzdXBwb3J0IGZvciBWMzcgYm9hcmQKLSAgKHBhdGNoIGJ5IErzbiBCZW5lZGlrdHNzb24sIDExIERlYyAyMDAyKQotCi0qIFVwZGF0ZSBiYXVkcmF0ZSBpbiBiZF9pbmZvIHdoZW4gaXQgZ2V0cyBjaGFuZ2VkCi0KLSogQWRkIHdhdGNoZG9nIHRyaWdnZXIgcG9pbnRzIHdoaWxlIHdhaXRpbmcgZm9yIHNlcmlhbCBwb3J0Ci0gIChzbyBmYXIgb25seSA4eHggLS0gbmVlZGVkIG9uIExXTU9OIHdpdGggMTAwbXMgd2F0Y2hkb2cpCi0KLSogSW1wcm92ZSBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50Ci0gIChmaWd1cmF0aW9uIG9mIHRoZSB1dGlsaXR5LCB1c2luZyBhIGNvbmZpZyBmaWxlKQotCi0qIEFkZCBzaW5nbGUgcXVvdGUgc3VwcG9ydCBmb3IgKG9sZCkgY29tbWFuZCBsaW5lIHBhcnNlcgotCi0qIFN3aXRjaCBMV01PTiBib2FyZCBkZWZhdWx0IGNvbmZpZyBmcm9tIEZSQU0gdG8gRUVQUk9NOwotICBpbiBQT1NULCBFRVBST00gc2hvd3MgdXAgb24gOCBhZGRyZXNzZXMKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4wOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qIFVzZSAxLWJ5dGUtcmVhZCBpbnN0ZWFkIG9mIC13cml0ZSBmb3IgaXByb2JlKCkgZnVuY3Rpb24KLSAgQWRkIGkyYyBjb21tYW5kcyB0byBQTTgyNiBjb25maWcKLQotKiBleHRlbmQgSTJDIFBPU1QgY29kZTogY2hlY2sgZm9yIGxpc3Qgb24ga25vd24gYWRkcmVzc2VzCi0KLSogSW1wcm92ZSBsb2cgYnVmZmVyIGNvZGU7IHVzZSAibG9nbGV2ZWwiIHRvIGRlY2lkZSB3aGljaCBtZXNzYWdlcwotICB0byBsb2cgb24gdGhlIGNvbnNvbGUsIHRvbyAobGlrZSBpbiBMaW51eCk7IGdldCByaWQgb2YgImxvZ3N0YXJ0IgotCi0qIEFkZCBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50Ci0gIChib2FyZC1zcGVjaWZpYyBmb3IgVFJBQiBub3csIHRvIGJlIGZpeGVkIGxhdGVyKQotCi0qIFBhdGNoIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiwgMDYgRGVjIDIwMDIKLSAgRml4IG1pc2MgcHJvYmxlbXMgd2l0aCBBbWlnYU9uZSBzdXBwb3J0Ci0KLSogUGF0Y2ggYnkgQ2hyaXMgSGFsbGluYW4sIDMgRGVjIDIwMDI6Ci0gIG1pbm9yIGNsZWFudXAgdG8gdGhlIE1QQzgyNDUgRVBJQyBkcml2ZXIKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKLSAgQWRkIHN1cHBvcnQgZm9yIGV4dGVybmFsIChTSVUpIGludGVycnVwdHMgb24gTVBDOHh4Ci0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCi0gIEZpeCBuZXN0ZWQgc3lzY2FsbHMgYnVnIGluIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCi0KLSogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyNyBOb3YgMjAwMjoKLSAgZml4IG91dHB1dCBvZiAicGNpaW5mbyIgY29tbWFuZCBmb3IgQ2FyZEJ1cyBicmlkZ2UgZGV2aWNlcy4KLQotKiBGaXggYnVnIGluIFRRTTgyNjAgYm9hcmQgZGV0ZWN0aW9uIC0gYm9hcmRzIGdvdCBzdHVjayB3aGVuIGJvYXJkIElECi0gIHdhcyBub3QgcmVhZGFibGUKLQotKiBBZGQgTEVEIGluZGljYXRpb24gZm9yIElERSBhY3Rpdml0eSBvbiBLVVA0SyBib2FyZAotCi0qIEZpeCBzdGFydHVwIHByb2JsZW1zIHdpdGggVkZEIGRpc3BsYXkgb24gVFJBQgotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDIwIE5vdiAyMDAyCi0gIEFkZCBkcml2ZXIgZm9yIEVwc29uIFNFRDEzODA2IGdyYXBoaWMgY29udHJvbGxlci4KLSAgQWRkIHN1cHBvcnQgZm9yIEJNUCBsb2dvcyBpbiBjZmJfY29uc29sZSBkcml2ZXIuCi0KLSogQWRkZWQgc3VwcG9ydCBmb3IgYm90aCBQQ01DSUEgc2xvdHMgKGF0IHRoZSBzYW1lIHRpbWUhKSBvbiBNUEM4eHgKLQotKiBQYXRjaCBieSBSb2QgQm95Y2UsIDIxIE5vdiAyMDAyOgotICBmaXggUENNQ0lBIG9uIE1CWDh4eCBib2FyZAotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyMSBOb3YgMjAwMgotICBBZGQgQ0ZHX0NQTV9QT1NUX1dPUkRfQUREUiB0byBtYWtlIHRoZSBvZmZzZXQgb2YgdGhlCi0gIGJvb3Rtb2RlIHdvcmQgaW4gRFBSQU0gY29uZmlndXJhYmxlCi0KLSogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxOCBOb3YgMjAwMjoKLSAgRml4ZXMgZm9yIHg4NiBwb3J0IChtb3N0bHkgc3RyaW5ncyBpc3N1ZXMpCi0KLSogUGF0Y2ggYnkgS2VuIENob3UsIDE4IE5vdiAyMDAyOgotICBGaXggZm9yIG5hdHNlbWkgTklDIGNhcmRzIChEUDgzODE1KQotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE5IE5vdiAyMDAyOgotICBmaXggYSBidWcgZm9yIHRoZSBNSUkgY29uZmlndXJhdGlvbiwgYW5kIHNvbWUgd2FybmluZ3MKLQotKiBQYXRjaCBieSBUaG9tYXMgRnJpZWRlbiwgMTMgTm92IDIwMDI6Ci0gIEFkZCBjb2RlIGZvciBBbWlnYU9uZSBib2FyZAotICAocHJlbGltaW5hcnkgbWVyZ2UgdG8gVS1Cb290LCBzdGlsbCBXSVApCi0KLSogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEyIE5vdiAyMDAyOgotICAtIEFkZGluZyBVUkwgZm9yIElFRUUgT1VJIGxvb2t1cAotICAtIE1ha2luZyB0aGUgYXV0b2Jvb3QgI2RlZmluZXMgZGVwZW5kZW50IG9uIENPTkZJR19BVVRPQk9PVF9LRVlFRAotICAgIGJlaW5nIGRlZmluZWQuCi0gIC0gSW4gdGhlIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgI2RlZmluZSwgdGhlIHJvb3Qtb24taW5pdHJkIGFuZAotICAgIHJvb3Qtb24tbmZzIG1hY3JvcyBhcmUgZGVzaWduZWQgdG8gc3dpdGNoIGhvdyB0aGUgZGVmYXVsdCBib290Ci0gICAgbWV0aG9kIGdldHMgZGVmaW5lZC4KLQotKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDEzIE5vdiAyMDAyOgotICBBZGQgc3VwcG9ydCBmb3IgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIEFNRCBTQzUyMCBib2FyZAotCi0qIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDEyIE5vdiAyMDAyOgotICBBZGQgc3VwcG9ydCBmb3IgRE9TIGZpbGVzeXN0ZW0gYW5kIGJvb3RpbmcgZnJvbSBET1MgZmxvcHB5IGRpc2sKLQotKiBQYXRjaCBieSBKaW0gU2FuZG96LCAwNyBOb3YgMjAwMjoKLSAgSW5jcmVhc2UgbnVtYmVyIG9mIG5ldHdvcmsgUlggYnVmZmVycyAoUEtUQlVGU1JYIGluCi0gICJpbmNsdWRlL25ldC5oIikgZm9yIEVFUFJPMTAwIGJhc2VkIGJvYXJkcyAoZXNwZWNpYWxseSBTUDgyNDApCi0gIHdoaWNoIHNob3dlZCAiUmVjZWl2ZXIgaXMgbm90IHJlYWR5IiBlcnJvcnMgd2hlbiBVLUJvb3Qgd2FzCi0gIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmUgYnVmZmVycyBzbG93ZXIgdGhhbiB0aGUgbmV0d29yayBjb250cm9sbGVyCi0gIHdhcyBmaWxsaW5nIHRoZW0uCi0KLSogUGF0Y2ggYnkgQW5kcmVhcyBPYmVycml0dGVyLCAwOSBOb3YgMjAwMjoKLSAgQ2hhbmdlIGJlaGF2aW91ciBvZiBOZXRMb29wKCk6IHJldHVybiAtMSBmb3IgZXJyb3JzLCBmaWxlc2l6ZQotICBvdGhlcndpc2U7IHJldHVybiBjb2RlIDAgaXMgdmFsaWQgYW4gbWVhbnMgbm8gZmlsZSBsb2FkZWQgLSBpbiB0aGlzCi0gIGNhc2UgdGhlIGVudmlyb25tZW50IHN0aWxsIGdldHMgdXBkYXRlZCEKLQotKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCA5IE5vdiAyMDAyOgotICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCi0gICAgdGhlIGZhaWxpbmcgZWRnZXMgb2YgTFJDTEsgYW5kIFNDTEsKLSAgLSBzYmM4MjYwIGNvbmZpZ3VyYXRpb24gdHdlYWtzCi0gIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCi0gIC0gd2lyZSBzc3BpL3NzcG8gY29tbWFuZHMgaW50byBjb21tYW5kIGhhbmRsZXI7IGltcHJvdmVkIGVycm9yCi0gICAgaGFuZGxlcmluZwotICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQotICAgIFNBQ1NuZyBjb25maWd1cmF0aW9uCi0KLSogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6Ci0gIEFkZCAiLW4iIHRvIGxpbmtlciBvcHRpb25zIHRvIGdldCByaWQgb2YgIk5vdCBlbm91Z2ggcm9vbSBmb3IKLSAgcHJvZ3JhbSBoZWFkZXJzIiBwcm9ibGVtCi0KLSogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAwNSBOb3YgMjAwMgotICBSZW5hbWUgQ09ORklHX1BMTF9JTlBVVF9GUkVRIHRvIENPTkZJR19TWVNfQ0xLX0ZSRVEKLSAgc28gd2UgY2FuIHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIG5hbWUKLQotKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgotICBIYXJkd2FyZSByZWxhdGllZCBpbXByb3ZtZW50cyBpbiBGREMgYm9vdCBjb2RlCi0KLSogUGF0Y2ggYnkgSG9sZ2VyIFNjaHVyaWcsIDUgTm92IDIwMDI6Ci0gIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5Ci0KLSogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKLSAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKLQotKiBGaXggdW5pbml0aWFsaXplZCBtZW1vcnkgKE1BQwkgYWRkcmVzcykgIGluICA4eHggIFNDQy9GRUMgIGV0aGVybmV0Ci0gIGRyaXZlcnMKLQotKiBBZGQgc3VwcG9ydCBmb3IgbG9nIGJ1ZmZlciB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIExpbnV4IGtlcm5lbCdzCi0gIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgotCi0qIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDMxIE9jdCAyMDAyOgotICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAotCi0qIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDQgTm92IDIwMDI6Ci0gIC0gdXNlIHdhdGNoZG9nIHRvIHJlc2V0IFBYQTI1MCBzeXN0ZW1zCi0gIC0gYWRkZWQgcHJvZ3Jlc3MgY2FsbGJhY2tzIHRvIChzb21lIG9mIHRoZSkgQVJNIGNvZGUKLSAgLSB1cGRhdGUgZm9yIENvZ2VudCBDU0IyMjYgYm9hcmQKLQotKiBBZGQgc3VwcG9ydCBmb3IgRlBTODYwIGJvYXJkCi0KLSogUGF0Y2ggYnkgR3VpbGxhdW1lIEFsZXhhbmRyZSwsIDA0IE5vdiAyMDAyOgotICBJbXByb3ZlIFBDSSBhY2Nlc3Mgb24gMzItYml0cyBDb21wYWN0IFBDSSBidXMKLQotKiBGaXggbWRlbGF5KCkgb24gVFJBQiAtIHRoaXMgd2FzIHN0aWxsIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbiB3aXRoCi0gIHNlY29uZHMgaW5zdGVhZCBvZiBtcy4KLQotKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEgTm92IDIwMDI6Ci0gIFhTY2FsZSByZWxhdGVkIGNsZWFudXAgKGFmZmVjdHMgYWxsIEFSTSBib2FyZHMpCi0KLSogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1Ob3RlcyBmb3IgVS1Cb290IDAuMS4wOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgIkRhcyBVLUJvb3QiLCB0aGUgVW5pdmVyc2FsIEJvb3QgTG9hZGVyLgotCi1JdCBpcyBiYXNlZCBvbiB2ZXJzaW9uIDIuMC4wICh0aGUgIkhhbGxvd2VlbiBSZWxlYXNlIikgb2YgUFBDQm9vdC4KLUZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdCBwbGVhc2Ugc2VlIHRoZQotUFBDQm9vdCBwcm9qZWN0IHBhZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wcGNib290Ci0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBJbml0aWFsIHN1cHBvcnQgZm9yIE1QQzg2NDEgSFBDTiBib2FyZC4KZGlmZiAtLWdpdCBhL0NIQU5HRUxPRy1iZWZvcmUtVS1Cb290LTEuMS41IGIvQ0hBTkdFTE9HLWJlZm9yZS1VLUJvb3QtMS4xLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3YTdiNgotLS0gL2Rldi9udWxsCisrKyBiL0NIQU5HRUxPRy1iZWZvcmUtVS1Cb290LTEuMS41CkBAIC0wLDAgKzEsNTU5MyBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS41OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIENsZWFudXAgY29tcGlsZSB3YXJuaW5ncy4gUHJlcGFyZSBmb3IgcmVsZWFzZSAxLjEuNQorCisqIEZpeCBjb21waWxlIHByb2JsZW0gaW4gaW5jbHVkZS9jb25maWdzL2VwODJ4eG0uaAorICAobXVzdCBoYXZlIG5ldmVyIGJlZW4gdGVzdGVkIGJlZm9yZSEpCisKKyogTUNDMjAwOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBwcm9ibGVtIGluIExDRCBkcml2ZXIKKworKiBBZGQgYm9hcmQvY3B1IHNwZWNpZmljIE5BTkQgY2hpcCBzZWxlY3QgZnVuY3Rpb24gdG8gNDQwIE5ERkMKKyAgQmFzZWQgb24gaWRlYSBhbmQgaW1wbGVtZW50YXRpb24gZnJvbSBKZWZmIE1hbm4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNgorCisqIE1ha2UgNHh4IGJvb3R1cCBtZXNzYWdlIHNob3J0ZXIgb24gNDQwRVB4L0dSeCBwbGF0Zm9ybXMKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBPY3QgMjAwNgorCisqIEFkZCAocHJlbGltaW5hcnkpIHN1cHBvcnQgZm9yIFYzOEIgYm9hcmQKKworKiBQUEM0MDVFUDogQWRkIHN1cHBvcnQgZm9yIGJvYXJkIGNvbmZpZ3VyYXRpb24gb2YgQ1BDMF9QQ0kgcmVnaXN0ZXIKKyAgVGhpcyBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBjb25maWd1cmUgUGVyV0UqL1BDSV9JTlQqIHBpbiBhcyBQZXJXRSoKKyAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDcgQXByIDIwMDYKKworKiBQUEM0MDVFUDogQWRkIENGR19HUElPMF9PUiwgQ0ZHX0dQSU8wX09EUiB0byBzZXR1cCBHUElPIGNvbXBsZXRlbHkuCisgIC0gQWRkIGNvbmZpZ3VyYXRpb24gb2YgT3BlbiBEcmFpbiBHUElPIE91dHB1dCBzZWxlY3Rpb24KKyAgLSBBZGQgY29uZmlndXJhdGlvbiBvZiBpbml0aWFsIHZhbHVlIG9mIEdQSU8gb3V0cHV0IHBpbnMKKyAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDcgQXByIDIwMDYKKworKiBGaXggc3BlbGxpbmc7IG1pbm9yIGNvZGUgY2xlYW51cC4KKworKiBGaXggSkZGUzIgY29tcGlsYXRpb24gcHJvYmxlbQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIE9jdCAyMDA2CisKKyogQ2xlYW51cCBvZiBOQU5EIHVwZGF0ZSBwYXRjaCAocmVtb3ZlIGNoYW5nZWxvZyBmcm9tIGNtZF9uYW5kLmMpCisgIFBhdGNoIGJ5IEd1aWRvIENsYXNzZW4sIDEwIE9jdCAyMDA2CisKKyogU2V2ZXJhbCBpbXByb3ZlbWVudHMgdG8gdGhlIG5ldyBOQU5EIHN1YnN5c3RlbToKKyAgLSBKRkZTMiByZWxhdGVkIGNvbW1hbmRzIGltcGxlbWVudGVkIGluIG10ZC11dGlscyBzdHlsZQorICAtIFN1cHBvcnQgZm9yIGJhZCBibG9ja3MKKyAgLSBCYWQgYmxvY2sgdGVzdGluZyBjb21tYW5kcworICAtIE5BTkQgbG9jayBjb21tYW5kcworICBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgZG9jL1JFQURNRS5uYW5kIGZvciBtb3JlIGRldGFpbHMKKyAgUGF0Y2ggYnkgR3VpZG8gQ2xhc3NlbiwgMTAgT2N0IDIwMDYKKworKiBEZWZpbmUgSUhfQ1BVX0FWUjMyCisgIE1ha2UgaXQgcG9zc2libGUgdG8gZ2VuZXJhdGUgQVZSMzIgdUltYWdlIGZpbGVzIHdpdGggbWtpbWFnZSBhbmQKKyAgbWFrZSBjbWRfYm9vdG0gcmVjb2duaXplIHRoZW0uCisgIFBhdGNoIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgMjIgU2VwIDIwMDYKKworKiBGaXggYnVmZmVyIG92ZXJmbG93IHByb2JsZW0gaW4gZnRfYnVpbGQuYworICBQYXRjaCBieSBGcmVkcmlrIFJvdWJlcnQsIDA5IE9jdCAyMDA2CisKKyogTWFrZSBib290cCBpbXBsZW1lbnRhdGlvbiBSRkMzMDQ2IGNvbXBsaWFudAorICBQYXRjaCBieSBKb2FraW0gTGFyc3NvbiwgMjcgSnVuIDIwMDYKKworKiBUUU01MjAwOiBwZXJmb3JtIFBPU1QgbWVtb3J5IHRlc3Qgb25seSBvbiBTVEs1Mnh4IGNhcnJpZXIgYm9hcmQuCisgIChhbmQgdGhlbiBvbmx5IGlmIFBTQzZfMyBpcyByZWFkIGFzICIxIiB3aGVuIGJvb3RpbmcpLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMSBKdW4gMjAwNgorCisqIE1vdmUgImFyIiBmbGFncyB0byBjb25maWcubWsgdG8gYWxsb3cgZm9yIHNpbGVudCAibWFrZSAtcyIKKyAgQmFzZWQgb24gcGF0Y2ggYnkgTWlrZSBGcnlzaW5nZXIsIDIwIEp1biAyMDA2CisKKyogQ29kaW5nIHN0eWxlIGNsZWFudXAKKworKiBBZGQgc3VwcG9ydCBmb3IgRVA4Mnh4TSBib2FyZHMKKyAgUGF0Y2ggYnkgQWFyb24gU2VsbHMsIDIwIEp1biAyMDA2CisKKyogRml4IGNvbW1lbnRzIGluIGluY2x1ZGUvcHBjNDQwLmgKKyAgUGF0Y2ggYnkgTWFydGluIEhpY2tzLCAxNiBKdW4gMjAwNgorCisqIFVwZGF0ZSBmb3IgQ0FNNTIwMCBib2FyZDoKKyAgLSBNYXAgaW4gYSBhZGRpdGlvbmFsIGNoaXAgc2VsZWN0cyBDUzQgYW5kIENTNS4KKyAgLSBNb2RpZnkgdGhlIHBvcnQgY29uZmlncmF0aW9uLCBjb25maWd1cmUgc2l4IFVBUlRzIGFuZCBubyBQQ0ksCisgICAgQVRBIGFuZCBVU0IuCisgIC0gQWRkIGN1c3RvbSBmbGFzaCBkcml2ZXIgdG8gaGFuZGxlIHNwZWNpZmljIGJ5dGUgc3dhcHBpbmcKKworKiBGaXggVExCIHNldHVwIGZvciBPY290ZWEgYm9hcmQKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBTZXAgMjAwNgorCisqIEZpeCByZXNldCBwcm9ibGVtIGluIHNlcXVvaWEgc2RyYW0gaW5pdCBjb2RlCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjMgU2VwIDIwMDYKKworKiBEaXNhYmxlIGF1dG9ib290IGFib3J0IGZvciBGTzMwMCB3aGVuIHNpbGVudCBtb2RlIGlzIGVuYWJsZWQKKyAgKGFjY29yZGluZyB0byBTMSBzd2l0Y2ggc2V0dGluZykuCisKKyogQ2xlYW51cCBleGFtcGxlcyBiaW5hcmllcworCisqIEFkZCBzdXBwb3J0IGZvciBBTUNDIFJhaW5pZXIgUFBYNDQwR1J4IGV2YWwgYm9hcmQKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBTZXAgMjAwNgorCisqIEFkZCBOQU5EIGVudmlyb25tZW50IHN1cHBvcnQgZm9yIFBQQzQ0MEVQeCBTZXF1b2lhIE5BTkQgYm9vdCBjb25maWcKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwNgorCisqIFVwZGF0ZSBOQU5EIGJvb3QgZG9jdW1lbnRhdGlvbgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDA2CisKKyogRml4IGFsaWdubWVudCBwcm9ibGVtIGluICJtdGRwYXJ0cyIgY29tbWFuZAorCisqIEFkZCBkb2N1bWVudGF0aW9uIG9uIHRoZSBsYXRlc3QgYnVpbGQgZW52aXJvbm1lbnQgZXh0ZW5zaW9ucyB0bworICB0aGUgUkVBRE1FIGZpbGUuCisKKyogUmVtb3ZlIGRlYWQgY29kZSAoaTJvIGFuZCBkbWEpIGZyb20gY3B1L21wYzgyNHgvZHJpdmVycy8gZGlyZWN0b3J5LgorCisqIEZpeCBMT0dfRElSIGRpcmVjdG9yeSBjcmVhdGlvbiBlcnJvci4KKyAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiBCVUlMRF9ESVIgZGlyZWN0b3J5LgorCisqIEZpeCBidWlsZCBwcm9ibGVtIGNwdS9wcGM0eHgvbmRmYy5jCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgU2VwIDIwMDYKKworKiBGaXggYnVpbGQgcHJvYmxlbSB3aXRoIENQQ0k0NDAKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBTZXAgMjAwNgorCisqIENoYW5nZSBZZWxsb3dzdG9uZSB0byB1c2UgQ0ZJIHdyaXRlIGJ1ZmZlcgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgU2VxdW9pYSBQUEM0NDBFUHggZXZhbCBib2FyZAorICAtIEFkZCBzdXBwb3J0IGZvciBQUEM0NDBFUHggJiBQUEM0NDBHUngKKyAgLSBBZGQgc3VwcG9ydCBmb3IgUFBDNDQwRVAoeCkvR1IoeCkgTkFORCBjb250cm9sbGVyCisgICAgaW4gY3B1L3BwYzR4eCBkaXJlY3RvcnkKKyAgLSBBZGQgTkFORCBib290IGZ1bmN0aW9uYWxpdHkgZm9yIFNlcXVvaWEgYm9hcmQsCisgICAgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLm5hbmQtYm9vdC1wcGM0NDAgZm9yIGRldGFpbHMKKyAgLSBUaGlzIFNlcXVvaWEgTkFORCBpbWFnZSBkb2Vzbid0IHN1cHBvcnQgZW52aXJvbm1lbnQKKyAgICBpbiBOQU5EIGZvciBub3cuIFRoaXMgd2lsbCBiZSBhZGRlZCBpbiBhIHNob3J0IHdoaWxlLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CisKKyogRml4IG1raW1hZ2UgLWwgYnVnIHdpdGggbXVsdGlmaWxlIGltYWdlcyBvbiA2NGJpdCBwbGF0Zm9ybXMKKyAgUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAwNiBTZXAgMjAwNgorCisqIEZpeCBidWlsZCBwcm9ibGVtcyBvbiBzb3JjZXJ5IGJvYXJkLgorCisqIEZpeCBjb2xkZmlyZSBidWlsZCBwcm9ibGVtcy4KKyAgUGF0Y2ggYnkgTWFyaWFuIEJhbGFrb3dpY3osIDAxIFNlcCAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIGEgc2F2aW5nIGJ1aWxkIG9iamVjdHMgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkuCisgIE1vZGlmaWNhdGlvbnMgYXJlIGJhc2VkIG9uIHRoZSBMaW51eCBrZXJuZWwgYXBwcm9hY2ggYW5kIHN1cHBvcnQKKyAgdHdvIHVzZSBjYXNlczoKKyAgMSkgQWRkIE89IHRvIHRoZSBtYWtlIGNvbW1hbmQgbGluZSAnbWFrZSBPPS90bXAvYnVpbGQgYWxsJworICAyKSBTZXQgZW52aXJvbmVtZW50IHZhcmlhYmxlIEJVSUxEX0RJUiB0byBwb2ludCB0byB0aGUgZGVzaXJlZCBsb2NhdGlvbgorCSdleHBvcnQgQlVJTERfRElSPS90bXAvYnVpbGQnCisJJ21ha2UnCisgIFRoZSBzZWNvbmQgYXBwcm9hY2ggY2FuIGFsc28gYmUgdXNlZCB3aXRoIGEgTUFLRUFMTCBzY3JpcHQKKwknZXhwb3J0IEJVSUxEX0RJUj0vdG1wL2J1aWxkJworCScuL01BS0VBTEwnCisgIENvbW1hbmQgbGluZSAnTz0nIHNldHRpbmcgb3ZlcnJpZGVzIHRoZSBCVUlMRF9ESVIgZW52aXJvbmVudCB2YXJpYWJsZS4KKyAgV2hlbiBub25lIG9mIHRoZSBhYm92ZSBtZXRob2RzIGlzIHVzZWQgdGhlIGxvY2FsIGJ1aWxkIGlzIHBlcmZvcm1lZAorICBhbmQgdGhlIG9iamVjdCBmaWxlcyBhcmUgcGxhY2VkIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorCisqIFJlbW92ZSB0aGUgYm9hcmQvbmV0c3Rhci9jcmNpdCBiaW5hcnkgZnJvbSBnaXQgcmVwb3NpdG9yeS4KKworKiBGaXggdG9vbHMvdXBkYXRlciBidWlsZCBlcnJvci4KKworKiBGaXggdG9vbHMvZWFzeWxvZ28gYnVpbGQgZXJyb3IuCisKKyogRml4ZWQgcHJvYmxlbXMgb24gUFJTMjAwIGJvYXJkIGNhdXNlZCBieSBhZGRpbmcgc3BsYXNoIHNjcmVlbiBvbiBNQ0MyMDAKKworKiBFeHRlbmRlZCBSRUFETUUgZW50cnkgb24gY29kaW5nIHN0eWxlCisKKyogQWRkZWQgYW5vdGhlciBleGFtcGxlIHNob3dpbmcgc2ltcGxlIGludGVycnVwdCBpbnRlcmNlcHRpb24uCisKKyogQWRkZWQgc2ltcGxlX3N0cnRvdWwoKSwgZ2V0ZW52KCkgYW5kIHNldGVudigpIHRvIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMuCisgIEFsc28gYnVtcGVkIHVwIEFCSSB2ZXJzaW9uIHRvIHJlZmxlY3QgdGhpcyBjaGFuZ2UuCisKKyogQWRkZWQgaW50ZXJydXB0IGhhbmRsaW5nIGNhcGFiaWxpdGllcyBmb3IgbXBjNXh4eCBwcm9jZXNzb3JzLgorICBBbHNvIGFkZGVkIExpbnV4IGxpa2UgQlVHKCkgbWFjcm9zLgorCisqIENvZGluZyBTdHlsZSBjbGVhbnVwLgorICBQYXRjaCBieSBTdGVmYW5vIEJhYmljLCAzMSBBdWcgMjAwNgorCisqIEFkZCBzcGxhc2hzY3JlZW4gc3VwcG9ydCBmb3IgTUNDMjAwIGJvYXJkLgorCisqIE1ha2UgdGhlIHNlcmlhbCBkcml2ZXIgZnJhbWV3b3JrIHdvcmsgd2l0aCBDT05GSUdfU0VSSUFMX01VTFRJCisgIGVuYWJsZWQKKworKiBQQ0llIGVuZHBvaW50IHN1cHBvcnQgZm9yIEFNQ0MgWXVjY2EgNDQwU1BlIGJvYXJkCisgIFBhdGNoIGJ5IFRpcnVtYWxhIFIgTWFycmksIDI2IEF1ZyAyMDA2CisKKyogSW1wcm92ZSBESU1NIGRldGVjdGlvbiBmb3IgQU1DQyBZdWNjYSA0NDBTUGUgYm9hcmQKKyAgSW1wcm92ZWQgdGhlIG1lbW9yeSBESU1NIGRldGVjdGlvbiBmb3IgdGhlIFl1Y2NhIDQ0MFNQZSBib2FyZCBmb3IKKyAgdGhlIGNhc2Ugd2hlcmUgYSBtZW1vcnkgRElNTSBpcyBmYWxzZWx5IGRldGVjdGVkIGFzIHByZXNlbnQuCisgIFRoaXMgaXNzdWUgaXMgc2VlbiBvbiBzb21lIEFNQ0MgWXVjY2EgNDQwU1BlIHZhbGlkYXRpb24gYm9hcmRzIGlmCisgIG9ubHkgb25lIDUxMk1CIG1lbW9yeSBESU1NIGlzIGluc3RhbGxlZCwgaS5lLiBESU1NIHNsb3QgMCBpcworICBwb3B1bGF0ZWQgYW5kIERJTU0gc2xvdCAxIGlzIGVtcHR5LiAgSW4gdGhpcyBjYXNlLCBVLUJvb3QgZG9lcworICBub3QgY29ycmVjdGx5IGRldGVjdCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIERJTU0gbWVtb3J5IG1vZHVsZQorICBpbnN0YWxsZWQgYW5kIHdpbGwgZmFsc2VseSBkZXRlY3QgdHdvIERJTU0gbWVtb3J5IG1vZHVsZXMgYXJlCisgIHByZXNlbnQgYW5kIHRoZXJlZm9yZSBVLUJvb3Qgd2lsbCBub3QgY2FsY3VsYXRlIHRoZSBjb3JyZWN0IGFtb3VudAorICBvZiB0b3RhbCBtZW1vcnkgYW5kIHUtYm9vdCB3aWxsIG5vdCBib290aW5nIHVwLgorICBQYXRjaCBieSBBZGFtIEdyYWhhbSwgMjQgQXVnIDIwMDYKKworKiBGaXggdHlwby4KKworKiBDb2RlIGNsZWFudXAKKworKiBVcGRhdGUgZm9yIE1DQzIwMCAvIFBSUzIwMCBib2FyZHM6CisgIC0gYXV0by1hZGp1c3QgY29uc29sZSBkZXZpY2UgZm9yIExpbnV4LgorICAtIGZpeCB0eXBvcy4KKworKiBBZGQgYSBmaXggZm9yIGEgYnVnZ3kgVVNCIGRldmljZSBvbiB0aGUgRk8zMDAgYm9hcmQuCisKKyogVXBkYXRlcyBmb3IgTUNDMjAwIC8gUFJTMjAwIGJvYXJkczoKKyAgLSBzdXBwb3J0IGZvciBjb25maWd1cmF0aW9ucyB3aXRoIFNEUkFNIG9yIEREUiBtZW1vcnksCisgIC0gc3VwcG9ydCBmb3IgaGlnaGJvb3QgYW5kIGxvd2Jvb3QKKyAgLSBhZGp1c3RpbmcgZW52aXJvbm1lbnQgZGVmaW5pdGlvbnMKKworKiBBZGQgc3VwcG9ydCBmb3IgV1RLIEZPMzAwIGJvYXJkIChUUU01MjAwIGJhc2VkKS4KKworKiBGaXggVFFNODM0eCBoYW5nLgorCisqIFVwZGF0ZSBmb3IgU0M1MjAgYm9hcmQuCisgIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMDIgRGVjIDIwMDUKKworKiBGaXhlZCBjb21tb24uaCBzcGVsbGluZyBlcnJvci4KKyAgUGF0Y2ggYnkgQ29yeSBUdXNhciwgMzAgTm92IDIwMDUKKworKiBGaXggdHlwby4KKyAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMjggTm92IDIwMDUKKworKiBGaXggZmF0bG9hZCBjb21tYW5kIG9uIEZBVDMyIGZvcm1hdHRlZCBwYXJ0aXRpb25zLgorICBQYXRjaCBieSBKb2FjaGltIEphZWdlciwgMTggTm92IDIwMDUKKworKiBGaXggZHJpdmVycy9kbTkwMDAuYyB3aGVuIGNvbmZpZ3VyZWQgaW4gMzIgYml0IG1vZGUuCisgIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAxNyBOb3YgMjAwNQorCisqIENsZWFudXAgZGVidWcgY29kZSBmb3IgeXVjY2EgYm9hcmQuCisKKyogTUNDMjAwOiByZXN0cmljdCBhZGRyZXNzYWJsZSBmbGFzaCBzcGFjZSB0byAzMiBNQgorCisqIEFkZCBkZWJ1ZyBjb25zb2xlIG9uIENPTTEyIGZvciBNQ0MyMDAgYm9hcmQKKworKiBGaXggY29udHJvbC1jIGhhbmRpbmcgaW4gQ09ORklHX0NNRExJTkVfRURJVElORworICBQcm9wZXJseSBwYXNzIGJyZWFrIGNvZGUgYmFjayBmcm9tIHJlYWRsaW5lLgorICBQYXRjaCBieSBSb2dlciBCbG9mZWxkLCAzMSBKdWwgMjAwNgorCisqIEFkZCBjb21tYW5kbGluZSBoaXN0b3J5IHN1cHBvcnQgdG8gYWxsIEFNQ0MgZXZhbCBib2FyZHMKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgorCisqIEFkZCBNYWNyb25peCBNWExWMzIwVCBmbGFzaCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IEF1ZyAyMDA2CisKKyogQ2hhbmdlICJtaWkgaW5mbyIgdG8gbm90IHByaW50IGFuIGVycm9yIHVwb24gbWlzc2luZyBQSFkgYXQgYWRkcmVzcworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IEF1ZyAyMDA2CisKKyogRml4IFBDSS1FeHByZXNzIG9uIFBQQzQ0MFNQZSByZXYuIEEuCisKKyogRml4IHByZWJvb3QgbWVzc2FnZSBvbiBUUU04NXh4IGFmdGVyIHN3aXRjaGluZyB0byBodXNoIHBhcnNlci4KKworKiBBZGFwdCBUUU04NXh4IHJhbWRpc2sgYWRkcmVzcyB0byBMaW51eCBrZXJuZWwgbWVtb3J5IG1hcAorCisqIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFBDSS1FeHByZXNzIG9uIFBQQzQ0MFNQZSAoWXVjY2EgYm9hcmQpLgorCisqIEZpeCBjb21waWxlciB3YXJuaW5nIGZvciBUUkFCIGJvYXJkLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBBdWcgMjAwNgorCisqIFByZXZlbnQgVVNCIGNvbW1hbmRzIGZyb20gd29ya2luZyB3aGVuIFVTQiBpcyBzdG9wcGVkLgorCisqIEFkZCBydWRpbWVudGFyeSBoYW5kbGluZyBvZiBhbHRlcm5hdGUgc2V0dGluZ3Mgb2YgVVNCIGludGVyZmFjZXMuCisgIFRoaXMgaXMgaW4gb3JkZXIgdG8gZml4IGlzc3VlcyB3aXRoIHNvbWUgVVNCIHN0aWNrcyB0aW1pbmcgb3V0CisgIGR1cmluZyBpbml0aWFsaXphdGlvbi4gU29tZSBjb2RlIHJlYWRhYmlsaXR5IGltcHJvdmVtZW50cy4KKworKiBQUEM0NDAgRERSIHNldHVwOiBTZXQgU0RSQU0wX0NGRzBbUE1VXT0wIGZvciBiZXN0IHBlcmZvcm1hbmNlCisgIEFNQ0Mgc3VnZ2VzdGVkIHRvIHNldCB0aGUgUE1VIGJpdCB0byAwIGZvciBiZXN0IHBlcmZvcm1hY2Ugb24KKyAgdGhlIFBQQzQ0MCBERFIgY29udHJvbGxlci4KKyAgUGxlYXNlIHNlZSBkb2MvUkVBRE1FLjQ0MC1ERFItcGVyZm9ybWFuY2UgZm9yIGRldGFpbHMuCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggSnVsIDIwMDYKKworKiBBTUNDIGJhbWJvbyAoNDQwRVApIFUtQm9vdCBpbWFnZSByZWR1Y2VkIHRvIDM4NGtieXRlCisgIFBsZWFzZSBzZWUgZG9jL1JFQURNRS5iYW1ib28gZm9yIGRldGFpbHMuCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjcgSnVsIDIwMDYKKworKiBGaXggQ09ORklHX0NNRExJTkVfRURJVElORyBpbXBsZW1lbnRhdGlvbgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IEp1bCAyMDA2CisKKyogRml4IHByZWJvb3QgbWVzc2FnZSBvbiBUUU01MjAwIGFmdGVyIHN3aXRjaGluZyB0byBodXNoIHBhcnNlci4KKworKiBNQ0MyMDA6IHNldCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gbG93X2Jvb3QgRERSLAorICBhbmQgc3VwcG9ydCBmb3IgY29uZmlndXJhYmxlIG9wdGlvbnMgaGlnaF9ib290IGFuZC9vciBTRFJBTS4KKworKiBBZGQgc3VwcG9ydCBmb3IgMjU2IE1CIFNEUkFNIG9uIENQVTg3CisgIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMjUgTm92IDIwMDUKKworKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgY2FtNTIwMCBib2FyZCAoYmFzZWQgb24gVFFNNTIwMFMpLgorCisqIE1vcmUgY29kZSBjbGVhbnVwCisKKyogRGlzYWJsZWQga3ZtZTA4MCBib2FyZCBpbiBNQUtFQUxMIGJlY2F1c2Ugb2YgYnVpbGQgcHJvYmxlbXMuCisKKyogQ29kZSBjbGVhbnVwCisKKyogVXBkYXRlIE5ldFN0YXIgYm9hcmQKKyAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDAzIE5vdiAyMDA1CisKKyogTWFrZSBjb2RlIGJldHRlciByZWFkYWJsZS4KKyAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE0IFNlcCAyMDA1CisKKyogRW5hYmxlIGluaXRyZCBBVEFHIGZvciB4bTI1MCBib2FyZC4KKyAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwNSBTZXAgMjAwNQorCisqIEFkZCByZWFkbGluZSBjbWRsaW5lLWVkaXRpbmcgZXh0ZW5zaW9uCisgIFBhdGNoIGJ5IEppbkh1YSBMdW8sIDAxIFNlcCAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIGZyaWVuZGx5LWFybSBTQkMtMjQxMFggYm9hcmQKKyAgUGF0Y2ggYnkgSmluSHVhIEx1bywgMDEgU2VwIDIwMDUKKworKiBGaXggbXVsdGktcGFydCBpbWFnZSBzdXBwb3J0IG9uIGkzODYgcGxhdGZvcm0uCisgIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMTkgQXVnIDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgS1ZNRTA4MCBib2FyZAorICBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDE4IEF1ZyAyMDA1CisKKyogRml4IE1JUFMgTEUgYnVpbGQgcHJvYmxlbQorICBQYXRjaCBieSBNYXRlaiBLdXBsamVuLCAxMCBBdWcgMjAwNQorCisqIENoZWNrIGFyZ3VtZW50IGNvdW50IGluICJtaWkiIGNvbW1hbmQuCisgIFByb2JsZW0gcG9pbnRlZCBvdXQgYnkgQW5kcmV3IER5ZXIsIDEzIEp1biAyMDA1CisKKyogQ2xlYW51cCBUUU01MjAwIGJvYXJkIGNvbmZpZ3VyYXRpb25zOgorICAtIG1ha2UgaGlnaGJvb3QgY29uZmlndXJhdGlvbnMgdXNlIGVudmlyb25tZW50IGF0IGhpZ2ggZW5kLCB0b28sCisgICAgdG8gYXZvaWQgZmxhc2ggZnJhZ21lbnRhdGlvbgorICAtIGFsd2F5cyB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50CisgIC0gZG9uJ3QgZW5hYmxlIHZpZGVvIGNvZGUgZm9yIG1vZHVsZXMgd2l0aG91dCBncmFwaGljcyBjb250cm9sbGVyCisgIC0gcHJvdmlkZSB1c2VmdWwgKHRob3VnaCBkaWZmZXJlbnQpIG10ZHBhcnRzIHNldHRpbmdzCisgIC0gZ2V0IHJpZCBvZiBDT05GSUdfQ1NfQVVUT0NPTkYgd2hpY2ggd2FzIGFsd2F5cyBzZXQgYW55d2F5CisKKyogRXh0ZW5kIG1rY29uZmlnIHRvb2wgdG8gcHJpbnQgbW9yZSB1c2VmdWwgdGFyZ2V0IG5hbWUKKworKiBBZGQgc3VwcG9ydCBmb3IgaGlnaC1ib290IG9uIFRRTTUyMDAgYW5kIFRRTTUyMDBTIGJvYXJkcy4KKyAgSGludDogdGhlIENQTEQgb24gdGhlIFRRTTUyMDAgbXVzdCBiZSBwcm9ncmFtbWVkIHdpdGggYSBzb2Z0d2FyZQorICB2ZXJzaW9uIHN1cHBvcnRpbmcgdGhlIGhpZ2ggYm9vdCBvcHRpb24hIFRoZSBuZXcgVFFNNTIwMFMgaXMKKyAgYWxyZWFkeSBzdXBwb3J0aW5nIHRoaXMgb3B0aW9uLiBPbiB0aGUgVFFNNTIwMCB0aGlzIG9wdGlvbiB3aWxsIGJlCisgIHN1cHBvcnRlZCBpbiBjb25maWd1cmF0aW9ucyB3aXRoIE1QQzUyMDAgcmV2IEIgcHJvY2Vzc29ycy4KKyAgVG8gYWN0dWFsbHkgImhpZ2ggYm9vdCIsIHNldCBqdW1wZXIgWDMwIG9uIHRoZSBTVEs1Mnh4LgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMiBKdWwgMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBuZXcgVFFNNTIwMCByZXZpc2lvbnMKKyAgLSBTdXBwb3J0IGZvciBUUU01MjAwUyAoc2hvcnQgdmVyc2lvbiB3aXRob3V0IGdyYXBoaWMgY29udHJvbGxlcikKKyAgLSBTdXBwb3J0IGZvciBtb2R1bGVzIHdpdGggJ04nIHR5cGUgUzI5R0wxMjhOIFNwYW5zaW9uIGZsYXNoZXMKKyAgICAocmVxdWlyZXMgY2hhbmdlcyB0byBmbGFzaCBsYXlvdXQpCisgIC0gU3VwcG9ydCBmb3IgTVBDNTIwMEIgY3B1IChtb3N0bHkgc3VwcG9ydCBmb3Igc2Vjb25kIFNEUkFNIGJhbmspCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEp1bCAyMDA2CisKKyogRml4IHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgb24gVFFNODV4eCBib2FyZHMKKyAgVGhlIFBTLzIga2V5b2JhcmQgZHJpdmVyIGZvciB0aGUgVFFNODV4eCBtb2R1bGVzIG9ubHkgc3VwcG9ydHMgdGhlCisgIGludGVybmFsIERVQVJUIG9mIHRoZSBNUEM4NXh4IENQVS4gU2luY2UgdGhlIE1QQzg1NjAgZG9lc24ndAorICBpbmNsdWRlIGEgRFVBUlQsIHRoZSBUUU04NTYwIG1vZHVsZXMgY2FuJ3QgYmUgdXNlZCB3aXRoIHRoZSBQUy8yCisgIGtleWJvYXJkIGNvbnRyb2xsZXIgb24gdGhlIFNUSzg1eHggYm9hcmQuCisgIFRoZSBQUy8yIGtleWJvYXJkIGRyaXZlciBzaG91bGQgd29yayB3aXRoIHRoZSBtb2R1bGVzIFRRTTg1NDAsCisgIFRRTTg1NDEgYW5kIFRRTTg1NTUsIGJ1dCBpdCBvbmx5IGhhcyBiZWVuIHRlc3RlZCBvbiBhIFRRTTg1NDAsIHlldC4KKyAgTWFrZSBzdXJlIHRoZSBQUy8yIGNvbnRyb2xsZXIgb24gdGhlIFNUSzg1eHggaXMgcHJvZ3JhbW1lZC4gSnVtcGVyCisgIHNldHRpbmdzOiBYNjYgMS0yLCA5LTEwOyBYNjEgMi0zCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDIxIEp1biAyMDA2CisKKyogQWRqdXN0IFJUQyBjZW50dXJ5IGhhbmRsaW5nIG9uIFNUSzUyeHggYm9hcmQgdG8gbWF0Y2ggTGludXggZHJpdmVyLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMiBKdW4gMjAwNgorCisqIEFkanVzdCBmaWxlbmFtZXMgZm9yIFVTQiB1cGRhdGUgaW1hZ2VzIG9uIFRSQUIgYm9hcmQuCisgIER1cmluZyBhbiBhdXRvbWF0aWMgdXBkYXRlIHZpYSBVU0Igc3RpY2ssIFUtQm9vdCBzZWFyY2hlcyBmb3IKKyAgaW1hZ2VzIHdpdGggdGhlIG5hbWUgImZpcm13YXJlLmltZyIgYW5kICJrZXJuZWwuaW1nIi4gVGhpcyBuYW1lcworICBhcmUgbm93IGNoYW5nZWQgdG8gImZpcm13XzAxLmltZyIgYW5kICJrZXJubF8wMS5pbWciLiBUaGlzIGlzIGRvbmUsCisgIHRvIHByZXZlbnQgdXBkYXRlcyBvZiBuZXcgYm9hcmRzICh3aXRoIHRoZSBuZXcgbWFjcm9uaWNzICJjIiBzdGVwCisgIGZsYXNoZXMpIHdpdGggb2xkLCBpbmNvbXBhdGlibGUgZmlybXdhcmUgb3Iga2VybmVsIHZlcnNpb25zLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMSBKdW4gMjAwNgorCisqIEJ1Z2ZpeCBpbiBWRkQgcm91dGluZSBvbiBUUkFCIGJvYXJkLgorICBNYWtlIHN1cmUgdXBwZXIgbGV4dCBwaXhlbCBjYW4gYmUgc2V0IHRvIGJsdWUsIHRvbworICAoc28gZmFyIG9ubHkgcmVkIHdhcyBwb3NzaWJsZSkuCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE1IEZlYiAyMDA2CisKKyogRW5hYmxlIGJ1ZmZlcmVkIGZsYXNoIHdyaXRlcyBmb3IgVEI1MjAwIGJvYXJkLgorCisqIEZpeCBzb21lIGJ1Z3MgaW4gVFJBQiBib2FyZCBmbGFzaCBkcml2ZXIuCisgIC0gaW5jcmVhc2UgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgZnJvbSAyIHRvIDE1IHNlY29uZHMKKyAgLSB1c2UgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgZm9yIHByb2dyYW1taW5nIGluc3RlYWQgb2YgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQKKyAgLSByZW1vdmUgIlVubG9jayBCeXBhc3MiIG1vZGUsIGJlY2F1c2UgbWFjcm9uaXggZmxhc2hlcyBkbyBub3Qgc3VwcG9ydAorICAgIHRoaXMgbW9kZSBvZmZpY2lhbGx5CisgIC0gZml4IGZsYXNoIHJlc2V0IGNvbW1hbmQgZnJvbSAweDAwRkYgdG8gMHgwMEYwLiAweDAwRkYgaXMgb25seSBzcGVjaWZpZWQKKyAgICBmb3IgSW50ZWwgY29tcGF0aWJsZSBmbGFzaGVzLCBub3QgZm9yIEFNRCBjb21wYXRpYmxlLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNSBGZWIgMjAwNgorCisqIEFkZCBhZGRpdGlvbmFsIGVycm9yIG1lc3NhZ2VzIHRvIGZsYXNoIGRyaXZlciBvbiBUUkFCIGJvYXJkCisgIChmb3IgZXJhc2UgZXJyb3JzIGFuZCB0aW1lb3V0IGVycm9ycykKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTQgRmViIDIwMDYKKworKiBBZGQgc3VwcG9ydCBmb3IgVEI1MjAwIGJvYXJkCisgIFRoZSBUQjUyMDAgKCJUaW55Ym94IikgaXMgYSBzbWFsbCBiYXNlYm9hcmQgZm9yIHRoZSBUUU01MjAwIG1vZHVsZQorICBpbnRlZ3JhdGVkIGluIGEgbGl0dGxlIGFsdW1pbml1bSBjYXNlLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCA4IEp1biAyMDA2CisKKyogRW5hYmxlIGJ1ZmZlcmVkIGZsYXNoIHdyaXRlcyBmb3IgVFFNNTIwMCBib2FyZC4KKworKiBGaXggcHJvYmxlbXMgd2l0aCBTYW5EaXNrIENvcnBvcmF0aW9uIENydXplciBNaWNybyBVU0IgbWVtb3J5IHN0aWNrLgorCisqIEFkZCBzdXBwb3J0IGZvciBUUU04ODVEIGJvYXJkLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMCBNYXIgMjAwNgorCisqIEZpeCBGRUMgaW5pdGlhbGlzYXRpb246IEFsbCBNSUkgY29uZmlndXJhdGlvbiBpcyBkb25lIHZpYSBGRUMxCisgIHJlZ2lzdGVycywgYnV0IE1JSV9TUEVFRCB3YXMgY29uZmlndXJlZCBhY2NvcmRpbmcgdG8gRkVDIHVzZWQuIFNvCisgIGlmIG9ubHkgRkVDMiB3YXMgdXNlZCwgdGhpcyBjYXVzZWQgdGhlIHJlYWwgTUlJX1NQRUVEIHJlZ2lzdGVyIGluCisgIEZFQzEgdG8gc3RheSB1bmluaXRhbGlzZWQsIGxlcWFkaW5nIHRvICJtaWlfc2VuZCBTVFVDSyEiIG1lc3NhZ2VzLgorICBGaXg6IGFsd2F5cyBjb25maWd1cmUgTUlJX1NQRUVEIG9uIEZFQzEgb25seS4KKyAgUGF0Y2ggYnkgTWFya3VzIEtsb3R6YnVlY2hlciwgMTIgSnVsIDIwMDYKKworKiBBZGQgc3VwcG9ydCBmb3IgU1BDMTkyMCBib2FyZC4KKyAgUGF0Y2ggYnkgTWFya3VzIEtsb3R6YnVlY2hlciwgMTIgSnVsIDIwMDYKKworKiBNQ0MyMDAgYm9hcmQ6IHN1cHBvcnQgY29uc29sZSBvbiBhbnkgb25lIG9mIHRoZSBRdWFkIFVBUlQgcG9ydHMuCisKKyogRml4IGVycm9yIGluIGZsYXNoIHByb3RlY3Rpb24gY2FsY3VsYXRpb24gb24gTUNDMjAwIGJvYXJkLgorCisqIE1ham9yIFBDTUNJQSBDbGVhbnVwIHRvIG1ha2UgY29kZSBiZXR0ZXIgcmVhZGFibGUgYW5kIG1haW50YWluYWJsZS4KKyAgTm90ZXM6CisgIC0gQm9hcmQtZGVwZW5kZW5kIGNvZGUgZm9yIFJQWExJVEUgYW5kIFJQWENMQVNTSUMtYmFzZWQgYm9hcmRzCisgICAgcGxhY2VkIHRvIHRoZSBkcml2ZXJzL3JweF9wbWNpYS5jIGZpbGUgdG8gYXZvaWQgZHVwbGljYXRpb24uCisgICAgU2FtZSBmb3IgVFFNOHh4LWJhc2VkIGJvYXJkcyAoZHJpdmVycy90cW04eHhfcG1jaWEuYykuCisgIC0gZHJpdmVycy9pODIzNjUuYyBoYXMgYmVlbiBzcGxpdCBpbnRvIHR3byBwYXJ0cyBsb2NhdGVkIGF0CisgICAgYm9hcmQvYXRjL3RpMTEzeC5jIGFuZCBib2FyZC9jcGM0NS9wZDY3MjkwLmMgKEFUQyBhbmQgQ1BDNDUgYXJlCisgICAgdGhlIG9ubHkgYm9hcmRzIHVzaW5nIENPTkZJR184MjM2NSkuCisgIC0gQ2hhbmdlcyB3ZXJlIHRlc3RlZCBmb3IgY2xlYW4gYnVpbGQgYW5kICp2ZXJ5KiAqZmV3KiBib2FyZHMuCisKKyogRml4IHRpbWVyIHByb2JsZW1zIG9uIEFNQ0MgeXVjY2EgYm9hcmQuCisgIFNldCBUaW1lciBDbG9jayBTZWxlY3QgdG8gdXNlIENQVSBjbG9jayBhcyBhIHRpbWVyIGlucHV0IHNvdXJjZS4KKworKiBCcmluZyB5dWNjYSBjb25maWcgbW9yZSBpbiBsaW5lIHdpdGggb3RoZXIgQU1DQyBib2FyZHMuCisKKyogQWRkIEFNQ0MgYmFtYm9vIGJvYXJkIHRvIE1BS0VBTEwgYnVpbGQgc2NyaXB0LgorCisqIEZpeCBBTUNDIGJhbWJvbyBldmFsIGJvYXJkIGNvbXBpbGF0aW9uIGVycm9ycy4KKworKiBBZGQgc3lzdGVtIG1lbW9yeSB0byB0aGUgUENJIHJlZ2lvbiBsaXN0IGZvciBBTUNDIFBQQzQ0eCBDUFVzLgorICBFbmFibGVkIGl0IGZvciBZdWNjYSBib2FyZC4KKworKiBDbGVhbnVwIGNvbmZpZyBmaWxlIGFuZCBib290dXAgb3V0cHV0IGZvciBZdWNjYSBib2FyZC4KKworKiBGaXggQ09ORklHXzQ0MF9HWCBkZWZpbmUgdXNhZ2UuCisKKyogUmVtb3ZlIGF1dG9nZW5lcmF0ZWQgYm1wX2xvZ28uaCBmaWxlLgorCisqIEFkZCBzdXBwb3J0IGZvciBBTUNDIDQ0MFNQZSBDUFUgYmFzZWQgZXZhbCBib2FyZCAoWXVjY2EpLgorCisqIENhbGwgc2VyaWFsX2luaXRpYWxpemUoKSBiZWZvcmUgZmlyc3QgZGVidWcoKSBpcyB1c2VkLgorCisqIENsZWFudXAgdHJhYiBib2FyZCBmb3IgR0NDLTQueAorCisqIFZvaWNlQmx1ZSB1cGRhdGU6IHVzZSBuZXcgTVREIGZsYXNoIHBhcnRpdGlvbmluZyBtZXRob2RzLCB1c2UgbW9yZQorICByZWFzb25hYmxlIFRFWFRfQkFTRSwgdXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgYW5kIGVuYWJsZSBrZXllZAorICBhdXRvYm9vdC4KKyAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2LiBBdWcgMjAwNQorCisqIEFkZCBmb3Jnb3R0ZW4gY2hhbmdlcyBmb3IgdGhlIFBMRUIgMiBCb2FyZC4KKyAgUGF0Y2ggYnkgRGF2aWQgU25vd2RvbiwgMTMuIEF1ZyAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIHdyUFBNQzd4eC83NHh4IGJvYXJkcworICBQYXRjaCBieSBSaWNoYXJkIERhbnRlciwgMTIgQXVnIDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgZ3RoMiBib2FyZAorICBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIEF1ZyAxMSAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIENPTkZJR19TRVJJQUxfTVVMVEkgb24gTVBDNXh4eAorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCA4IEp1biAyMDA2CisKKyAgVGhpcyBwYXRjaCBzdXBwb3J0cyB0d28gc2VyaWFsIGNvbnNvbGVzIG9uIGJvYXJkcyB3aXRoCisgIGEgTVBDNXh4eCBDUFUuIFRoZSBjb25zb2xlIGNhbiBiZSBzd2l0Y2hlZCBhdCBydW50aW1lCisgIGJ5IHNldHRpbmcgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSBkZXNpcmVkIHNlcmlhbAorICBpbnRlcmZhY2UgKHNlcmlhbDAgb3Igc2VyaWFsMSkuIFRoZSBQU0NzIHRvIGJlIHVzZWQgYXMKKyAgY29uc29sZSBwb3J0IGFyZSBkZWZpbmRlZCBieSBDT05GSUdfUFNDX0NPTlNPTEUKKyAgYW5kIENPTkZJR19QU0NfQ09OU09MRTIuCisgIFNlZSBSRUFETUUuc2VyaWFsX211bHRpIGZvciBkZXRhaWxzLgorCisqIEJ1Z2ZpeCBpbiBJMkMgaW5pdGlhbGlzYXRpb24gb24gUzNDMjQwMC4KKyAgSWYgdGhlIGJ1cyBpcyBibG9ja2VkIGJlY2F1c2Ugb2YgYSBwcmV2aW91c2x5IGludGVycnVwdGVkCisgIHRyYW5zZmVyLCB1cCB0byBlbGV2ZW4gY2xvY2tzIGFyZSBnZW5lcmF0ZWQgb24gdGhlIEkyQ1NDTAorICBsaW5lIHRvIGNvbXBsZXRlIHRoZSB0cmFuc2ZlciBhbmQgdG8gZnJlZSB0aGUgYnVzLgorICBXaXRoIHRoaXMgZml4IHBpbiBJMkNTQ0wgKFBHNikgaXMgcmVhbGx5IGNvbmZpZ3VyZWQgYXMgR1BJTworICBzbyB0aGUgY2xvY2sgcHVsc2VzIGFyZSByZWFsbHkgZ2VuZXJhdGVkLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNgorCisqIEZpeCBERFI2IGVycmF0YSBvbiBUUU04MzR4IGJvYXJkcworICBQYXRjaCBieSBUaG9tYXMgV2FlaG5lciwgMDcgTWFyIDIwMDYKKworKiBSZW1vdmUgb2Jzb2xldGUgZmxhc2ggZHJpdmVyIGJvYXJkL3RxbTUyMDAvZmxhc2guYworICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxMSBKYW4gMjAwNgorCisqIFVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBDTUMtUFUyIGJvYXJkCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IE5vdiAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgb24gVFFNODV4eCBib2FyZAorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBOb3YgMjAwNQorCisgIFRlc3RlZCBvbiBhIFNUSzg1WFggYmFzZWJvYXJkLiBNYWtlIHN1cmUgdGhlIFBTLzIgY29udHJvbGxlcgorICBoYXMgYmVlbiBwcm9ncmFtbWVkLiBKdW1wZXIgU2V0dGluZ3M6IFg2NiAxLTIsIDktMTA7IFg2MSAyLTMKKworKiBGaXggVFJBQiBjaGFubmVsIHN3aXRjaGluZyBkZWxheSBmb3IgdHJhYl9ma3QuYmluIHN0YW5kYWxvbmUgYXBwbGlrYXRpb24KKyAgSW4gdHNjMjAwMF9yZWFkX2NoYW5uZWwoKSB0aGUgZGVsYXkgYWZ0ZXIgc2V0dGluZyB0aGUgbXVsdGlwbGV4ZXIKKyAgdG8gYSB0ZW1wZXJhdHVyZSBjaGFubmVsIGlzIGluY3JlYXNlZCBmcm9tIDEsNSBtcyB0byAxMCBtcy4gVGhpcworICBpcyB0byBhbGxvdyB0aGUgbXVsdGlwbGV4ZXIgaW5wdXRzIHRvIHN0YWJpbGl6ZSBhZnRlciBodWdlIHN0ZXBzCisgIG9mIHRoZSBpbnB1dCBzaWduYWwgbGV2ZWwuCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IE5vdiAyMDA1CisKKyogQWRqdXN0IFRRTTUyMDAgbWFrZSB0YXJnZXRzCisgIE1ha2UgdGhlIGF1dG9tYXRpYyBDUyBjb25maWd1cmF0aW9uIHRoZSBkZWZhdWx0LgorICBUaGUgZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb25zIENPTkZJR19UUU01MjAwX0FBLCBDT05GSUdfVFFNNTIwMF9BQgorICBhbmQgQ09ORklHX1RRTTUyMDBfQUMgYXJlIHJlbW92ZWQuCisgICJUUU01MjAwX2NvbmZpZyIgaXMgbm93IHRoZSBkZWZhdWx0IGZvciBTVEs1MlhYLjIwMCBiYXNlIGJvYXJkcy4KKyAgT24gYSBTVEs1MlhYLjEwMCBiYXNlIGJvYXJkICJUUU01MjAwX1NUSzEwMF9jb25maWciIG11c3QgYmUgdXNlZC4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgTm92IDIwMDUKKworKiBGaXggc2V0dGluZyBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBvbiB0cmFiIGJvYXJkCisgIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBpcyBub3cgc2V0IGJlZm9yZQorICBkb19hdXRvX3VwZGF0ZSgpIGlzIGNhbGxlZCwgc28gdGhhdCAidmVyIiBjYW4gYmUgdXNlZAorICBpbiBVU0IgdXBkYXRlIHNjcmlwdHMuCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA1CisKKyogRml4IHdyb25nIHVzYWdlIG9mIHVkZWxheSgpIGluIGxlZF9ibGluaygpIG9uIHRyYWIgYm9hcmQKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKKworKiBGaXggdWRlbGF5IGJ1ZyBpbiB2ZmQuYyBmb3IgdHJhYiBib2FyZAorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQorCisqIERpc2FibGUgSkZGUzIgc3VwcG9ydCBmb3IgdHJhYiBib2FyZAorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQorCisqIENoYW5nZSBtdGRwYXJ0cyBkZWZpbml0aW9uIG9uIHRyYWIgYm9hcmQgdG8gbWF0Y2ggY3VycmVudCBmbGFzaCBtYXAKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKKworKiBGaXggbWVtb3J5IGluaXQgcHJvYmxlbXMgb24gTUNDMjAwIGJvYXJkCisKKyogRml4IEl4RXRoREIuaCB0byBjb21waWxlIGFnYWluCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgSnVuIDIwMDYKKworKiBNaW5vciBjbGVhbnVwIGZvciBQQ1M0NDBFUCBib2FyZAorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEp1biAyMDA2CisKKyogQWRkIE1DRjUyODIgc3VwcG9ydCAod2l0aG91dCBwcmVsb2FkZXIpCisgIHJlbG9jYXRlIGljaGFjaGVfU3RhdGUgdG8gcmFtCisgIHUtYm9vdCBjYW4gcnVuIGZyb20gaW50ZXJuYWwgZmxhc2gKKyAgQWRkIEVCK01DRi1FVjEyMyBib2FyZCBzdXBwb3J0LgorICBBZGQgbTY4ayBCb2FyZHMgdG8gTUFLRUFMTAorICBQYXRjaCBmcm9tIEplbnMgU2NoYXJzaWcsIDA4IEF1ZyAyMDA1CisKKyogTmlvcyBJSSAtIEFkZCBBbHRlcmEgRVAxQzIwLCBFUDFTMTAgYW5kIEVQMVM0MCBib2FyZHMKKyAgUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwOCBKdW4gMjAwNgorCisqIE5pb3MgSUkgLSBBZGQgRVBDUyBDb250cm9sbGVyIGJvb3Ryb20gd29yay1hcm91bmQKKyAgLVdoZW4gYm9vdGluZyBmcm9tIGFuIGVwY3MgY29udHJvbGxlciwgdGhlIGVwY3MgYm9vdHJvbSBtYXkgbGVhdmUgdGhlCisgIHNsYXZlIHNlbGVjdCBpbiBhbiBhc3NlcnRlZCBzdGF0ZSBjYXVzaW5nIHNvZnQgcmVzZXQgaGFuZy4gVGhpcworICBwYXRjaCBlbnN1cmVzIHNsYXZlIHNlbGVjdCBpcyBuZWdhdGVkIGF0IHJlc2V0LgorICBQYXRjaCBieSBTY290dCBNY051dHQsIDA4IEp1biAyMDA2CisKKyogVXBkYXRlIFBLMUMyMCBib2FyZAorICAtVXBkYXRlIGJhc2UgYWRkcmVzc2VzIGZvciBzdGFuZGFyZCBjb25maWd1cmF0aW9uCisgIC1FbGltaW5hdGUgdXNlIG9mIENBQ0hFX0JZUEFTUyBpbiBib2FyZCBjb2RlCisgIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKKworKiBOaW9zIElJIC0gRml4IEkvTyBNYWNyb3MgYW5kIG1pbmktYXBwIHN0dWJzCisgIC1GaXggYXNtL2lvLmggbWFjcm9zCisgIC1FbGltaW5hdGUgdXNlIG9mIENBQ0hFX0JZUEFTUyBpbiBjcHUgY29kZQorICAtRWxpbWluYXRlIGFzc2VtYmxlciB3YXJuaW5ncworICAtRml4IG1pbmktYXBwIHN0dWJzIGFuZCBmb3JjZSBubyBzbWFsbCBkYXRhCisgIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKKworKiBGaXggVS1Cb290IGVudmlyb25tZW50IHNlY3RvciBwcm90ZWN0aW9uIG9uIE1DQzIwMCBib2FyZAorCisqIE1pbm9yIGNsZWFudXAgZm9yIFBDUzQ0MEVQIGJvYXJkCisKKyogVXBkYXRlIFBDUzQ0MEVQIHBvcnQgdG8gZml0IGludG8gb25lIGZsYXNoIGRldmljZSAoaW5jbC4gZW52aXJvbm1lbnQpCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDYgSnVuIDIwMDYKKworKiBBZGQgc3VwcG9ydCBmb3IgUENTNDQwRVAgYm9hcmQKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMiBKdW4gMjAwNgorCisqIEZpeCBleGFtcGxlcy9NYWtlZmlsZTsgc29tZSBidWlsZCB0YXJnZXRzIHdlcmUgbG9zdAorCisqIEZpeCB3YXRjaGRvZyBoYW5kbGluZyBpbiBDRkkgZmxhc2ggZHJpdmVyCisgIEp1c3QgdXNlIHVkZWxheSgpIHdoZW4gd2FpdGluZyBmb3Igc3RhdHVzIGNoYW5nZXMgd2hpY2ggd2lsbAorICBpbXBsaWNpdGVseSB0cmlnZ2VyIHRoZSB3YXRjaGRvZy4KKworKiBGaXggUENJIHRvIG1lbW9yeSB3aW5kb3cgc2l6ZSBwcm9ibGVtcyBvbiBQTTgyeCBib2FyZHMKKyAgV2UgdXNlIHRoZSAiYXV0b21hdGljIiBtb2RlIHRoYXQgd2FzIHVzZWQgZm9yICB0aGUgIE1QQzgyNjZBRFMgIGFuZAorICBNUEM4MjcyIGJvYXJkcy4gRXZlbnR1YWxseSB0aGlzIHNob3VsZCBiZSB1c2VkIG9uIGFsbCBib2FyZHM/XQorICBQYXRjaCBieSBXb2xmZ2FuZyBHcmFuZGVnZ2VyLCAxNyBKYW4gMjAwNgorCisqIENvcnJlY3QgR1BJTyBzZXR1cCAoVUFSVDEvSVJRJ3MpIG9uIHlvc2VtaXRlICYgeWVsbG93c3RvbmUKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOSBNYXkgMjAwNgorCisqIFVwZGF0ZSBJbnRlbCBJWFA0eHggc3VwcG9ydAorICAtIEFkZCBJWFA0eHggTlBFIGV0aGVybmV0IE1BQyBzdXBwb3J0CisgIC0gQWRkIHN1cHBvcnQgZm9yIEludGVsIElYRFBHNDI1IGJvYXJkCisgIC0gQWRkIHN1cHBvcnQgZm9yIFByb2RyaXZlIFBETkIzIGJvYXJkCisgIC0gQWRkIElSUSBzdXBwb3J0CisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjMgTWF5IDIwMDYKKworKiBGaXggcHJvYmxlbSBpbiBQVlIgZGV0ZWN0aW9uIGZvciA0NDBHUgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IE1heSAyMDA2CisKKyogRml4IGdjYyAzLjQueCBBRkxBR1Mgc2V0dGluZyBmb3IgbTY4ayBwbGF0Zm9ybS4KKworKiBFbmFibGUgYXV0b2Jvb3QgZm9yIE01MjcxRVZCIGJvYXJkLgorCisqIENoYW5nZWQgZGVmYXVsdCByYW1kaXNrIGFkZHIgaW4geW9zZW1pdGUveWVsbG93c3RvbmUgcG9ydHMKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBNYXkgMjAwNgorCisqIEZpeCBQQ01DSUEgc3VwcG9ydCBvbiB2aXJ0bGFiMgorCisqIEFkZCBzdXBwb3J0IGZvciBWaXJ0TGFiMiBib2FyZAorICAobmVlZGVkIGJlY2F1c2Ugb2YgZGlmZmVyZW5jZXMgaW4gdGhlIFBDTUNJQSBoYXJkd2FyZSkuCisKKyogTWlub3IgY2xlYW51cC4KKworKiBVcGRhdGUgeW9zZW1pdGUgY29uZmlndXJhdGlvbiB0byBlbmFibGUgZmxhc2ggd3JpdGUgYnVmZmVyIHN1cHBvcnQKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBNYXkgMjAwNgorCisqIEZpeCBjb21waWxlIHdhcm5pbmdzIGluIGNvbW1vbi94eXpNb2RlbS5jCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgTWF5IDIwMDYKKworKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBFUCBSZXYgQyBhbmQgNDQwR1IgUmV2IEIKKyAgUGF0Y2ggYnkgSm9obiBPdGtlbiwgMDggTWF5IDIwMDYKKworKiBPTUFQIDU5MTIvT1NLOiB1cGRhdGUgRU1JRlMgQ1MxIHRpbWluZ3M6CisgIFByb2JsZW1zIGhhdmUgYmVlbiBzZWVuIGluIHRoZSBsaW51eCBrZXJuZWwncyBzbWM5MXggbmV0d29yayBkcml2ZXIKKyAgZHVlIHRvIGltcHJvcGVyIGJ1cyB0aW1pbmdzLiAgVGhlIGxhdGVzdCAyLjYgT01BUCBrZXJuZWxzIGN1cnJlbnRseQorICBoYXZlIGEgd29ya2Fyb3VuZCwgYnV0IHRoaXMgZml4IGJlbG9uZ3MgaW4gdS1ib290LgorICBQYXRjaCBieSBLZXZpbiBIaWxtYW4sIDEzIE9jdCAyMDA1CisKKyogRml4IFJFR19NUFVfTE9BRF9USU1FUiBkZWZpbml0aW9uIGluIG11bHRpcGxlIE9NQVAgcG9ydHMKKyAgUGF0Y2ggYnkgSGlyb2tpIEthbWluYWdhLCAxMSBNYXIgMjAwNgorCisqIFVwZGF0ZSBvbWFwNTkxMm9zayBib2FyZCBzdXBwb3J0CisgIC0gRml4IE9NQVAgc3VwcG9ydCB0aGF0IG9tYXA1OTEyb3NrIGNvbXBpbGVzIGluIGN1cnJlbnQgc291cmNlIHRyZWUKKyAgLSBVcGRhdGUgd2l0aCBjb2RlIGZyb20gImh0dHA6Ly9vbWFwLnNwZWN0cnVtZGlnaXRhbC5jb20vb3NrNTkxMiIKKyAgICB0byBmaXggcHJvYmxlbXMgd2l0aCBERFIgaW5pdGlhbGl6YXRpb24KKyAgLSBGaXggdGltZXIgc2V0dXAKKyAgLSBVc2UgQ0ZJIGZsYXNoIGRyaXZlciBhbmQgc3VwcG9ydCBjb21wbGV0ZSAzMk1CIG9mIG9uYm9hcmQgZmxhc2gKKyAgLSBBZGQgInByaW50X2NwdWluZm8oKSIgYW5kICJjaGVja2JvYXJkKCkiIGZ1bmN0aW9ucyB0byBkaXNwbGF5CisgICAgQ1BVICh3aXRoIGZyZXF1ZW5jeSkgYW5kIEJvYXJkIGluZm9zCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgTWF5IDIwMDYKKworKiBGaXggd2F0Y2hkb2cgaXNzdWVzIGZvciBDb2xkRmlyZSBib2FyZHMuCisKKyogQWRkIE01MjcxRVZCIGJvYXJkIHN1cHBvcnQuCisKKyogTWFrZSBSNTIwMCBzcGVjaWZpYyBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24gYm9hcmQgY29uZGl0aW9uYWwuCisKKyogVXBkYXRlIENQVSB0YXJnZXQgaWRlbnRpZmljYXRpb24gc3RyaW5ncyBmb3IgQ29sZEZpcmUgZmFtaWx5LgorCisqIFVwZGF0ZSByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgTUNGNTI3MS4KKworKiBGaXggc2VyaWFsIGNvbnNvbGUgc3VwcG9ydCBmb3IgTUNGNTI3MS4KKworKiBGaXhlcyBmb3IgZ2NjIDMuNCBiYXNlZCBtNjhrIHRvb2xjaGFpbiwKKyAgYmFzZWQgb24gcGF0Y2ggYnkgSmF0ZSBTdWpqYXZhbmljaC4KKworKiBGaXggbG93Ym9vdCBzdXBwb3J0IG9uIE1DQzIwMCBib2FyZAorCisqIE1lcmdlZCBNUEM4MzQ5QURTIGFuZCBNUEM4MzQ5RU1EUyBwb3J0cyBpbnRvIE1QQzgzNDlFTURTIHBvcnQ6CisgIC0gUmVtb3ZlZCBNUEM4MzQ5QURTIHBvcnQKKyAgLSBBZGRlZCBQQ0kgc3VwcG9ydCB0byBNUEM4MzQ5QURTCisgIC0gcmV3b3JrZWQgbWVtb3J5IG1hcCB0byBhbGxvdyBtYXBwaW5nIG9mIGFsbCByZWdpb25zIHdpdGggQkFUcworICBQYXRjaCBieSBLdW1hciBHYWxhLCAyMCBBcHIgMjAwNgorCisqIENvZGluZyBTdHlsZSBjbGVhbnVwCisKKyogV3JpdGUgUlRDIHNlY29uZHMgZmlyc3QgdG8gbWFpbnRhaW4gc2V0dGluZ3MgaW50ZWdyaXR5IHBlcgorICBNYXhpbS9EYWxsYXMgRFMxMzA2IGRhdGEgc2hlZXQuCisgIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMDIgTWF5IDIwMDYKKworKiBTY2hlZHVsZWQgZm9yIHJlbW92YWw6IHN0cm5pY21wKCkgd2hpY2ggaXMgdW51c2VkCisKKyogVXBkYXRlIGZvciBJbnRlbCBNb25haGFucyBib2FyZHM6CisgIC0gc3VwcG9ydCBmb3IgbWFnaWMga2V5IGRldGVjdGlvbiBhbmQgaGFuZGxpbmcgb24gZGVsdGEgYm9hcmQKKyAgLSBOQU5EIHN1cHBvcnQgZm9yIHp5bG9uaXRlIGJvYXJkICsgc29tZSBtaW5vciBjbGVhbnVwCisKKyogRGVjbGFyZSBsb2FkX3NlcmlhbF95bW9kZW0oKSB3aGVuIHVzaW5nIENGR19DTURfTE9BREIuCisgIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDEgTWF5IDIwMDYKKworKiBGaXhlZCBoYW5kbGluZyBvZiBiYWQgY2hlY2tzdW1zIHdpdGggIm1raW1hZ2UgLWwiCisKKyogQWRkZWQgc3VwcG9ydCBmb3IgQkMzNDUwIGJvYXJkCisgIFBhdGNoIGJ5IFN0ZWZhbiBTdHJvYmwsIDIxIE9jdCAyMDA1CisKKyogVXBkYXRlIGZvciBOQzY1MCBib2FyZDoKKyAgLSBTdXBwb3J0IHJldjEgYW5kIHJldjIgaGFyZHdhcmUKKyAgLSBhZGFwdCB0byBuZXcgTkFORCBsYXllcgorICAtIGFkZCBDUDg1MCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIE5DNjUwCisKKyogTVBDNTIwMDogZW5hYmxlIHNub29waW5nIG9mIERNQSB0cmFuc2FjdGlvbnMgb24gWExCIGV2ZW4gaWYgbm8gUENJCisgIGlzIGNvbmZpZ3VyZWQ7IG90aHJ3aXNlIERNQSBhY2Nlc3NlcyBhcmVuJ3QgY2FjaGUgY29oZXJlbnQgd2hpY2gKKyAgY2F1c2VzIGZvciBleGFtcGxlIFVTQiB0byBmYWlsLgorCisqIFNvbWUgY29kZSBjbGVhbnVwCisKKyogRml4IGRiYXUxeDAwIGJvYXJkcyBicm9rZW4gYnkgZGJhdTE1NTAgcGF0Y2gKKyAgUExMOnMgd2VyZSBub3Qgc2V0IGZvciBib2FyZHMgb3RoZXIgdGhhbiAxNTUwLgorICBGbGFzaCBDRkkgY2F1c2VkIGNhcmQgdG8gaGFuZyBkdWUgdG8gdW5kZWZpbmVkIENGR19GTEFTSF9CQU5LU19MSVNULgorICBEZWZhdWx0IGJvb3QgaXMgbm93IGJvb3RwIGZvciBjYXJkcyBvdGhlciB0aGFuIDE1NTAuCisgIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTAgQXVnIDIwMDUKKworKiBGaXhlcyBjb21tb24vY21kX2ZsYXNoLmM6CisgIC0gZml4IHNvbWUgY29tcGlsZXIvcGFyc2VyIGVycm9yLCBpZiB1c2luZyBtNjhrIHRvb2wgY2hhaW4KKyAgLSBvcHRpY2FsIGZpeCBmb3IgcHJvdGVjdCBvbi9vZmYgYWxsIG1lc3NhZ2VzLCBpZiB1c2luZyBtb3JlCisgICAgdGhlbiBvbmUgYmFuaworICBQYXRjaCBieSBKZW5zIFNjaGFyc2lnLCAyOCBKdWwgMjAwNQorCisqIEZpeCBRdWFkIFVBUlQgbWFwcGluZyBvbiBNQ0MyMDAgYm9hcmQgZHVlIHRvIG5ldyBIVyByZXZpc2lvbgorCisqIEZpeCBKRkZTMiBzdXBwb3J0IGZvciBsZWdhY3kgTkFORCBkcml2ZXIuCisKKyogUmVtb3ZlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIERvQyBjb2RlIGFuZCBvbGQgbGVnYWN5IE5BTkQgZHJpdmVyLgorCisqIEZpeCBQTTgyOF9QQ0kgdGFyZ2V0LCBmb3Igd2hpY2ggUENJIHdhcyAqbm90KiBjb25maWd1cmVkIGluLgorCisqIEZpeCBMaXRlNTIwMEIgc3VwcG9ydDogaW5pdGlhbGl6ZSBTRGVsYXkgcmVnaXN0ZXIKKyAgU2VlIEZyZWVzY2FsZSdzIEFOMzIyMSAiTVBDNTIwMEIgU0RSQU0gSW5pdGlhbGl6YXRpb24gYW5kCisgIENvbmZpZ3VyYXRpb24iLCAzLjMuMSBTRGVsYXktLU1CQVIgKyAweDAxOTAKKworKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgorCisgIC0gQWRkIEludGVsIGxlZ2FjeSBsb2NrL3VubG9jayBzdXBwb3J0IHRvIGNvbW1vbiBDRkkgZHJpdmVyCisKKyAgICBPbiBzb21lIEludGVsIGZsYXNoJ3MgKGUuZy4gSW50ZWwgSjMpIGxlZ2FjeSB1bmxvY2tpbmcgaXMKKyAgICBzdXBwb3J0ZWQsIG1lYW5pbmcgdGhhdCB1bmxvY2tpbmcgb2Ygb25lIHNlY3RvciB3aWxsIHVubG9jaworICAgIGFsbCBzZWN0b3JzIG9mIHRoaXMgYmFuay4gVXNpbmcgdGhpcyBmZWF0dXJlLCB1bmxvY2tpbmcKKyAgICBvZiBhbGwgc2VjdG9ycyB1cG9uIHN0YXJ0dXAgKHZpYSBlbnYgdmFyICJ1bmxvY2s9eWVzIikgd2lsbAorICAgIGdldCBtdWNoIGZhc3Rlci4KKworICAtIEZpeGVkIHByb2JsZW0gd2l0aCBtdWx0aXBsZSByZWFkcyBvZiBlbnZyb25tZW50IHZhcmlhYmxlCisgICAgInVubG9jayIgYXMgcG9pbnRlZCBvdXQgYnkgUmVpbmhhcmQgQXJsdCAmIEFuZGVycyBMYXJzZW4uCisKKyAgLSBSZW1vdmVkIHVud2FudGVkIGxpbmVmZWVkcyBmcm9tICJwcm90ZWN0IiBjb21tYW5kIHdoZW4KKyAgICBDRkdfRkxBU0hfUFJPVEVDVElPTiBpcyBlbmFibGVkLgorCisgIC0gQ2hhbmdlZCBwM3A0MDAgYm9hcmQgdG8gdXNlIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBBcHIgMjAwNgorCisqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CisgIC0gQ29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgQ0ZHX0haICE9IDEwMDAgKHNldmVyYWwKKyAgICBYU2NhbGUtYmFzZWQgYm9hcmRzKQorICAtIEZpeCB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiBvZiBidWZmZXJlZCB3cml0ZXMgKG9mZiBieSBhCisgICAgZmFjdG9yIG9mIDEwMDApCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDMxIE1hciAyMDA2CisKKyogVXBkYXRlcyB0byBjb21tb24gUFBDNHh4IG9uYm9hcmQgKEREUilTRFJBTSBpbml0IGNvZGUgKDQwNSBhbmQgNDQwKQorCisgIDQwNSBTRFJBTTogLSBUaGUgU0RSQU0gcGFyYW1ldGVycyBjYW4gbm93IGJlIGRlZmluZWQgaW4gdGhlIGJvYXJkCisJICAgICAgIGNvbmZpZyBmaWxlIGFuZCB0aGUgNDA1IFNEUkFNIGNvbnRyb2xsZXIgdmFsdWVzIHdpbGwKKwkgICAgICAgYmUgY2FsY3VsYXRlZCB1cG9uIGJvb3R1cCAoc2VlIFBQQ2hhbWVsZW9uRVZCKS4KKwkgICAgICAgV2hlbiB0aG9zZSBzZXR0aW5ncyBhcmUgbm90IGRlZmluZWQgaW4gdGhlIGJvYXJkCisJICAgICAgIGNvbmZpZyBmaWxlLCB0aGUgcmVnaXN0ZXIgc2V0dXAgd2lsbCBiZSBhcyBpdCBpcyBub3csCisJICAgICAgIHNvIHRoaXMgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBicmVhayBhbnkgY3VycmVudAorCSAgICAgICBkZXNpZ24gdXNpbmcgdGhpcyBjb2RlLgorCisJICAgICAgIFRoYW5rcyB0byBBbmRyZWEgTWFyc29uIGZyb20gREFWRSBmb3IgdGhpcyBwYXRjaC4KKworICA0NDAgRERSOiAgIC0gQWRkZWQgZnVuY3Rpb24gc2RyYW1fdHIxX3NldCB0byBhdXRvIGNhbGN1bGF0ZSB0aGUKKwkgICAgICAgVFIxIHZhbHVlIGZvciB0aGUgRERSLgorCSAgICAgLSBBZGRlZCBFQ0Mgc3VwcG9ydCAoc2VlIHAzcDQ0MCkuCisKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBNYXIgMjAwNgorCisqIEZpeCBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGRlcGVuZGVuY3kgaW4gY3B1L2FybTkyMHQvc3RhcnQuUworICBQYXRjaCBieSBQZXRlciBNZW56ZWJhY2gsIDEzIE9jdCAyMDA1IFtETlgjMjAwNjA0MDE0MjAwMDQ3M10KKworKiBBZGQgc3VwcG9ydCBmb3IgeW1vZGVtIHByb3RvY29sIGRvd25sb2FkCisgIFBhdGNoIGJ5IFN0ZWZhbm8gQmFiaWMsIDI5IE1hciAyMDA2CisKKyogTWVtb3J5IE1hcCBVcGRhdGUgZm9yIERlbHRhIGJvYXJkOiBVLUJvb3QgaXMgYXQgMHg4MDAwMDAwMC0weDg0MDAwMDAwCisgIE1lcmdlIGZyb20gTWFya3VzIEtsb3R6YvxjaGVyJ3MgcmVwbywgMDEgQXByIDIwMDYKKworKiBHQ0MtNC54IGZpeGVzOiBjbGVhbiB1cCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uIGZvciBhbGwKKyAgYm9hcmRzCisKKyogVXBkYXRlIGZvciBEZWx0YSBib2FyZDoKKyAgLSByZWR1bmRhbnQgTkFORCBlbnZpcm9ubWVudAorICAtIG1pc2MgTW9uYWhhbnMgY2xlYW51cHMgKHJlbW92ZSBkZWFkIGNvZGUgZXRjLikKKyAgLSBEQTkwMzAgSW5pdGlhbGl6YXRpb247IHNvbWUgbWluaW1hbCBjaGFuZ2VzIHRvIFBYQSBJMkMgZHJpdmVyIHRvCisgICAgbWFrZSBpdCB3b3JrIHdpdGggdGhlIE1vbmFoYW5zLgorICAtIE1ha2UgTW9uYWhhbnMgY2xvY2sgZnJlcXVlbmN5IGNvbmZpZ3VyYWJsZSB1c2luZworICAgIENGR19NT05BSEFOU19SVU5fTU9ERV9PU0NfUkFUSU8gYW5kCisgICAgQ0ZHX01PTkFIQU5TX1RVUkJPX1JVTl9NT0RFX1JBVElPLgorICBNZXJnZSBmcm9tIE1hcmt1cyBLbG90emL8Y2hlcidzIHJlcG8sIDI1IE1hciAyMDA2CisKKyogRW5hYmxlIFF1YWQgVUFSVCBvbSBNQ0MyMDAgYm9hcmQuCisKKyogQ2xlYW51cCBNQ0MyMDAgYm9hcmQgY29uZmlndXJhdGlvbjsgb21pdCBub24tZXhpc3RlbnQgc3R1ZmYuCisKKyogQWRkIHN1cHBvcnQgZm9yIE1QQzg1OS84NjYgUmV2LiBBLjAKKworKiBBZGQgY29tbWFuZCBmb3IgaGFuZGxpbmcgRERSIEVDQyByZWdpc3RlcnMgb24gTVBDODM0OUVFIE1EUyBib2FyZC4KKworKiBGaXggRERSIEVDQyBiaXQgZGVmaW5pdGlvbnMgZm9yIE1QQzgzeHguCisKKyogQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgTVBDODM0OUUgTURTIGJvYXJkLgorCisqIEFkZCBzdXBwb3J0IGZvciBFQ0MgRERSIGluaXRpYWxpemF0aW9uIG9uIE1QQzgzeHguCisKKyogQWRkIERNQSBzdXBwb3J0IGZvciBNUEM4M3h4LgorCisqIEFkZCBzeW5jIGluIGRvX3Jlc2V0KCkgcm91dGluZSBmb3IgTVBDODN4eCBhZnRlciBSUFIgcmVnaXN0ZXIKKyAgd2FzIHdyaXR0ZW4gdG8uIEl0IGlzIG5lZWQgb24gc29tZSB0YXJnZXRzIHdoZW4gQkFUIHRyYW5zbGF0aW9uCisgIGlzIGVuYWJsZWQuCisKKyogQWRkIGJpdCBkZWZpbml0aW9ucyBmb3IgTVBDODN4eCBERFIgY29udHJvbGxlciByZWdpc3RlcnMuCisKKyogQWRkIERjYnooKSwgRGNiaSgpIGFuZCBEY2JmKCkgcm91dGluZXMgZm9yIE1QQzgzeHguCisKKyogQ29ycmVjdCBzaGlmdCBvZmZzZXRzIGluIGljYWNoZV9zdGF0dXMgYW5kIGRjYWNoZV9zdGF0dXMgZm9yIE1QQzgzeHguCisKKyogQWRkIHN1cHBvcnQgZm9yIERTMTM3NCBSVEMgY2hpcC4KKworKiBBZGQgc3VwcG9ydCBmb3IgTGl0ZTUyMDBCIGJvYXJkLgorICBQYXRjaCBieSAgUGF0Y2ggYnkgSm9zZSBNYXJpYSAoVHhlbWEpIExvcGV6LCAxNiBKYW4gMjAwNgorCisqIEFwcGx5IFNvQyBjb25jZXB0IHRvIGFybTkyNmVqcyBDUFVzLCBpLmUuIG1vdmUgdGhlIFNvQyBzcGVjaWZpYworICB0aW1lciBhbmQgY3B1X3Jlc2V0IGNvZGUgZnJvbSBjcHUvJChDUFUpIGludG8gdGhlIG5ldworICBjcHUvJChDUFUpLyQoU09DKSBkaXJlY3RvcmllcworICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxMyBNYXIgMjAwNgorCisqIENoYW5nZSBtYXggc2l6ZSBvZiB1bmNvbXByZXNzZWQgdUltYWdlJ3MgdG8gOE1CeXRlIGFuZCBhZGQKKyAgQ0ZHX0JPT1RNX0xFTiB0byBhZGp1c3QgdGhpcyBzZXR0aW5nLgorCisgIEFzIG1lbnRpb25lZCBieSBSb2JpbiBHZXR6IG9uIDIwMDUtMDUtMjQgdGhlIHNpemUgb2YgdW5jb21wcmVzc2VkCisgIHVJbWFnZXMgd2FzIHJlc3RyaWN0ZWQgdG8gNE1CeXRlcy4gVGhpcyBkZWZhdWx0IHNpemUgaXMgbm93CisgIGluY3JlYXNlZCB0byA4TWJ5dGVzIGFuZCBjYW4gYmUgb3ZlcnJpZGVkIGJ5IHNldHRpbmcgQ0ZHX0JPT1RNX0xFTgorICBpbiB0aGUgYm9hcmQgY29uZmlnIGZpbGUuCisKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgorCisqIEZpeCBwcm9ibGVtIHdpdGggdXBkYXRlZCBQQ0kgY29kZSBpbiBjcHUvcHBjNHh4LzQwNWdwX3BjaS5jCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgTWFyIDIwMDYKKworKiBjcHUvcHBjNHh4L3N0YXJ0LlMgOiBleGNlcHRpb25zIGFyZSBlbmFibGVkIGFmdGVyIHJlbG9jYXRpb24KKyAgUGF0Y2ggYnkgQ2VkcmljIFZpbmNlbnQsIDA2IEp1bCAyMDA1CisKKyogYXUxeDAwX2V0aC5jOiBjaGVjayBtYWxsb2MgcmV0dXJuIHZhbHVlIGFuZCBhYm9ydCBpZiBpdCBmYWlsZWQKKyAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1CisKKyogQ2hhbmdlIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaW4gc29mdF9pMmMuYzpzZW5kX2FjaygpIHRvIGtlZXAgZnJvbQorICBpbmNvcnJlY3RseSBnZW5lcmF0aW5nIHN0YXJ0L3N0b3AgY29uZGl0aW9ucyBvbiB0aGUgYnVzLgorICBQYXRjaCBieSBBbmRyZXcgRHllciwgMjYgSnVsIDIwMDUKKworKiBGaXggYnVnIGluIFtpZF1jYWNoZV9zdGF0dXMgY29tbWFuZHMgZm9yIE1QQzg1eHggcHJvY2Vzc29yczsKKyAgc2hvdWxkIGxvb2sgYXQgTFNCIG9mIEwxQ1NSbiByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lIGlmIEwxIGNhY2hlIGlzCisgIGVuYWJsZWQsIG5vdCB0aGUgTVNCLgorICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOSBKdWwgMjAwNQorCisqIEZpeCBhcnJheSBvdmVyZmxvdyB3aXRoIGZ3X3NldGVudiBvbiB1bmluaXRpYWxpc2VkIGVudmlyb25tZW50CisgIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE1IEp1bCAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIEVtYmVkZGVkUGxhbmV0IEVQODh4IGJvYXJkcworICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwNQorCisqIFJlbW92ZSBib2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIGZyb20gdGhlIGNvbW1vbiB4aWxpbngKKyAgZXRoZXJuZXQgYW5kIGlpYyBhZGFwdGVyIGNvZGUuCisgIFBhdGNoIGJ5IE1pY2hhZWwgTGliZXNraW5kLCAxMiBKdWwgMjAwNQorCisqIEFkZCBOYXQgU2VtaSBEUDgzODY1IFBIWSBzdXBwb3J0IHRvIE1QQzg1eHggVFNFQyBkcml2ZXIKKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKKworKiBBZGQgKHNvbWUpIGRlZmluaXRpb25zIGZvciB0aGUgTVBDODV4eCBsb2NhbCBidXMgY29udHJvbGxlcgorICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwOCBKdWwgMjAwNQorCisqIEFkZCBDUE0yIEkvTyBwaW4gZnVuY3Rpb25zIGZvciBNUEM4NXh4IHByb2Nlc3NvcnMKKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKKworKiBGaXggY29tcGlsZSBwcm9ibGVtCisKKyogQWRkZWQgUENJIHN1cHBvcnQgZm9yIE1QQzgzNDlBRFMgYm9hcmQKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSAxMSBKYW4gMjAwNgorCisqIEVuYWJsZSBhZGRyZXNzIHRyYW5zbGF0aW9uIG9uIE1QQzgzeHgKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTAgRmViIDIwMDYKKworKiBEZWNvcHVsZWQgc2V0dGluZyBvZiBPUi9CUiBhbmQgTEJMQVdCQVIvTEJMQVdBUiBvbiBNUEM4M3h4CisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDI1IEphbiAyMDA2CisKKyogRml4ZWQgZGVmaW5lcyBmb3IgTVBDODN4eCBTSUNSTCByZWdpc3RlciB0byBtYXRjaCBjdXJyZW50IHNwZWNzCisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDIzIEphbiAyMDA2CisKKyogT25seSBkaXNhYmxlIHRoZSBNUEM4M3h4IHdhdGNoZG9nIGlmIGl0cyBlbmFibGVkIG91dCBvZiByZXNldC4KKyAgSWYgaXRzIGRpc2FibGVkIG91dCBvZiByZXNldCBTVyBjYW4gbGF0ZXIgZW5hYmxlIGl0IGlmIHNvIGRlc2lyZWQKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKKworKiBBbGxvdyBjb25maWcgb2YgR1BJTyBkaXJlY3Rpb24gJiBkYXRhIHJlZ2lzdGVycyBhdCBib290IG9uIDgzeHgKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKKworKiBFbmFibGUgdGltZSBoYW5kbGluZyBvbiA4M3h4CisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CisKKyogTWFrZSBTeXN0ZW0gSU8gQ29uZmlnIFJlZ2lzdGVycyBib2FyZCBjb25maWd1cmFibGUgb24gTVBDODN4eAorICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgorCisqIEZpeGVkIFBDSSBpbmRpcmVjdCBjb25maWcgb3BzIHRvIGhhbmRsZSBtdWx0aXBsZSBQQ0kgY29udHJvbGxlcnMKKyAgV2UgbmVlZCB0byBhZGp1c3QgdGhlIGJ1cyBudW1iZXIgd2UgYXJlIHRyeWluZyB0byBhY2Nlc3MgYmFzZWQKKyAgb24gd2hpY2ggUENJIGNvbnRyb2xsZXIgaXRzIG9uCisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDEyIEphbiAyMDA2CisKKyogUmVwb3J0IGJhY2sgUENJIGJ1cyB3aGVuIGRvaW5nIHRhYmxlIGJhc2VkIGRldmljZSBjb25maWcKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKKworKiBBZGRlZCBzdXBwb3J0IGZvciBQQ0kgcHJlZmV0Y2hhYmxlIHJlZ2lvbiBhbmQgQkFScworICBJZiBhIGhvc3QgY29udHJvbGxlciBzZXRzIHVwIGEgcmVnaW9uIGFzIHByZWZldGNoYWJsZSBhbmQKKyAgYSBkZXZpY2UncyBCQVIgZGVub3RlcyBpdCBhcyBwcmVmZXRjaGFibGUsIGFsbG9jYXRlIHRoZQorICBCQVIgaW50byB0aGUgcHJlZmV0Y2ggcmVnaW9uLgorCisgIElmIGEgQkFSIGlzIHByZWZldGNoYWJsZSBhbmQgbm8gcHJlZmV0Y2hhYmxlIHJlZ2lvbiBoYXMKKyAgYmVlbiBzZXR1cCBieSB0aGUgY29udHJvbGxlciB3ZSBmYWxsIGJhY2sgdG8gYWxsb2NhdGluZworICB0aGUgQkFSIGludG8gdGhlIG5vcm1hbGx5IG1lbW9yeSByZWdpb24uCisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CisKKyogQWRkIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBmbGF0IGRldmljZSB0cmVlIGZpeHVwcyBmb3IgbXBjODN4eAorICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBwYXNzaW5nIGluaXRyZCBpbmZvcm1hdGlvbiB2aWEgZmxhdCBkZXZpY2UgdHJlZQorICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgorCisqIEFkZGVkIE9GX1NURE9VVF9QQVRIIGFuZCBPRl9TT0MKKworICBPRl9TVERPVVRfUEFUSCBzcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRldmljZSB0aGUga2VybmVsIGNhbiB1c2UKKyAgZm9yIGNvbnNvbGUgb3V0cHV0CisKKyAgT0ZfU09DIHNwZWNpZmllcyB0aGUgcHJvcGVyIG5hbWUgb2YgdGhlIFNPQyBub2RlIGlmIG9uZSBleGlzdHMuCisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CisKKyogQWxsb3cgYm9hcmQgY29kZSB0byBmaXh1cCB0aGUgZmxhdCBkZXZpY2UgdHJlZSBiZWZvcmUgYm9vdGluZyBhIGtlcm5lbAorICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgorCisqIEFkZGVkIENPTkZJR18gb3B0aW9ucyBmb3IgYmRfdCBhbmQgZW52IGluIGZsYXQgZGV2IHRyZWUKKworCUNPTkZJR19PRl9IQVNfQkRfVCB3aWxsIHB1dCBhIGNvcHkgb2YgdGhlIGJkX3QKKwlpbnRvIHRoZSByZXN1bHRpbmcgZmxhdCBkZXZpY2UgdHJlZS4KKworCUNPTkZJR19PRl9IQVNfVUJPT1RfRU5WIHdpbGwgY29weSB0aGUgZW52aXJvbm1lbnQKKwl2YXJpYWJsZXMgZnJvbSB1LWJvb3QgaW50byB0aGUgZmxhdCBkZXZpY2UgdHJlZQorCisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIHRoZSBESENQIHZlbmRvciBvcHRpb25hbCBib290ZmlsZSAoIzY3KS4KKyAgSWdub3JlcyB0aGUgdmVuZG9yIFRGVFAgc2VydmVyIG5hbWUgb3B0aW9uICgjNjYpLgorICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQorCisqIEZpeCBhIEhXIHRpbWluZyBpc3N1ZSBvbiA4NTQ4IENEUyBmb3IgZVRTRUMgMyBpbiBSR01JSSBtb2RlCisgIFBhdGNoIGJ5IEFuZHkgRmxlbWluZywgMTQgSnVuIDIwMDUKKworKiBGaXggYmFkIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBMVFg5NzEgUEhZIG9uIE1QQzg1eHggYm9hcmRzLgorICBQYXRjaCBieSBHZXJoYXJkIEphZWdlciwgMjEgSnVuIDIwMDUKKworKiBBZGQgbmV0Y29uc29sZSBhbmQgc29tZSBtb3JlIGNvbW1hbmRzIHRvIFJQWGxpdGVfRFcgYm9hcmQKKyAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1CisKKyogRml4IGJhZCBkZWNsYXJhdGlvbiBvbiBwY2lfY2ZnZnVuY19ub3RoaW5nCisgIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQorCisqIEFkanVzdCAiZWNobyIgYXMgYSBkZWZhdWx0IGNvbW1hbmQKKyAgUGF0Y2ggYnkgU2FtIFNvbmcsIDE5IEp1biAyMDA1CisKKyogRml4IFBDSURGIGNhbGN1bGF0aW9uIGluIGNwdS9tcGM4MjYwL3NwZWVkLmMgZm9yIE1QQzgyODBFQworICBQYXRjaCBieSBLb2tIb3cgVGVoLCAxNiBKdW4gMjAwNQorCisqIEFkZCBjcmMgb2YgZGF0YSB0byBqZmZzMiAoaW4gamZmczJfMXBhc3NfYnVpbGRfbGlzdHMoKSkuCisgIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTUgSnVuIDIwMDUKKworKiBDb2RpbmcgU3R5bGUgY2xlYW51cAorCisqIEF2b2lkIGRlcmVmZXJlbmNpbmcgTlVMTCBpbiBmaW5kX2NtZCgpIGlmIG5vIHZhbGlkIGNvbW1hbmRzIHdlcmUgZm91bmQKKyAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDEzIEp1biAyMDA1CisKKyogQWRkIEFESSBCbGFja2ZpbiBzdXBwb3J0CisgIC0gYWRkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluIEJGNTMzIENQVQorICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgQURJIEJGNTMzIFN0YW1wIHVDbGludXggYm9hcmQKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEFESSBCRjUzMyBFWktpdCBib2FyZAorICBQYXRjaGVzIGJ5IFJpY2hhcmQgS2xpbmdsZXIsIDExIEp1biAyMDA1CisKKyogQWRkIGxvYWRzIG9mIG50b2hsKCkgaW4gaW1hZ2UgaGVhZGVyIGhhbmRsaW5nCisgIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEwIEp1biAyMDA1CisKKyogU3dpdGNoIE1QQzg2eEFEUyBhbmQgTVBDODg1QURTIGJvYXJkcyB0byB1c2UgY3B1Y2xrIGVudmlyb25tZW50CisgIHZhcmlhYmxlIHRvIHNldCBjbG9jaworICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQorCisqIFJQWGxpdGUgY29uZmlndXJhdGlvbiBmaXhlcworICAtIFVzZSBjb3JyZWN0IGZsYXNoIHNlY3RvciBzaXplCisgIC0gVXNlIGNvcnJlY3QgbWVtb3J5IHRlc3QgZW5kIGFkZHJlc3MKKyAgLSBBZGQgc3VwcG9ydCBmb3IgYnppcDIgY29tcHJlc3Npb24KKyAgLSBWYXJpb3VzIHNtYWxsIGZpeGVzCisgIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CisKKyogTWVtb3J5IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBmb3IgWlBDLjE5MDAgYm9hcmQKKyAgLSBGaXggU0RSQU0gdGltaW5nIG9uIGJvdGggbG9jYWwgYnVzIGFuZCA2MHggYnVzCisgIC0gQWRkIHN1cHBvcnQgZm9yIHNlY29uZCBmbGFzaCBiYW5rIChTSU1NKQorICAtIENoYW5nZSBib290IGZsYXNoIGJhc2UKKyAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgQWRkZXIgYm9hcmRzIHdpdGggMTZNQiBTRFJBTTsKKyAgYWRkIHN1cHBvcnQgZm9yIHNlY29uZCBGRUMgb24gQWRkZXI4N3ggYm9hcmQuCisgIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CisKKyogRml4IGNvbmRpdGlvbmFsIGZvciBpbmNsdWRpbmcga3M4Njk1ZXRoIGRyaXZlcgorICBQYXRjaCBieSBHcmVnIFVuZ2VyZXIsIDA0IEp1biAyMDA1CisKKyogRml4IE1ha2VmaWxlOiBpbmNsdWRlIGNvbmZpZy5tayBvbmx5IGFmdGVyIENST1NTX0NPTVBJTEUgaXMgZGVmaW5lZAorICBQYXRjaCBieSBGcmllZHJpY2ggTG9iZW5zdG9jaywgMDIgSnVuIDIwMDUKKworKiBGaXggY29tbWVudCBpbiBjb21tb24vc29mdF9pMmMuYworICBQYXRjaGVzIGJ5IFBldGVyIEtvcnNnYWFyZC9Ub2x1bmF5IE9ya3VuLCAyNiBNYXkgMjAwNQorCisqIENsZWFudXAgY29tcGlsZXIgd2FybmluZ3MuCisgIFBhdGNoIGJ5IEdyZWcgVW5nZXJlciwgMjEgTWF5IDIwMDUKKworKiBXb3JkIGFsaWdubWVudCBmaXhlcyBmb3Igd29yZCBhbGlnbmVkIE5TMTY1NTAgVUFSVAorICBQYXRjaCBieSBKZWFuLVBhdWwgU2FtYW4sIDAxIE1hciAyMDA1CisKKyAgRml4ZXMgYnVnIHdpdGggVUFSVCB0aGF0IG9ubHkgc3VwcG9ydHMgd29yZCBhbGlnbmVkIGFjY2VzczogcmVtb3ZlZAorICAiX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOyIgZm9yICIoQ0ZHX05TMTY1NTBfUkVHX1NJWkUgPT0gNCkiIHNvbWUKKyAgKGJyb2tlbiEpIHZlcnNpb25zIG9mIEdDQyBnZW5lcmF0ZSBieXRlIGFjY2Vzc2VzIHdoZW4gZW5jb3VudGVyaW5nCisgIHRoZSBwYWNrZWQgYXR0cmlidXRlIHJlZ2FyZGxlc3MgaWYgdGhlIHN0cnVjdCBpcyBhbHJlYWR5IGNvcnJlY3RseQorICBhbGlnbmVkIGZvciBhIHBsYXRmb3JtLiBQZXJpcGhlcmFscyB0aGF0IGNhbiBvbmx5IGhhbmRsZSB3b3JkCisgIGFsaWduZWQgYWNjZXNzIHdvbid0IHdvcmsgcHJvcGVybHkgd2hlbiBhY2Nlc3NlZCB3aXRoIGJ5dGUgYWNjZXNzLgorICBUaGUgc3RydWN0IE5TMTY1NTAgaXMgYWxyZWFkeSB3b3JkIGFsaWduZWQgZm9yIFJFR19TSVpFID0gNCwgc28KKyAgdGhlcmUgaXMgbm8gbmVlZCB0byBwYWNrZWQgdGhlIHN0cnVjdCBpbiB0aGF0IGNhc2UuCisKKyogRml4IGJlaGF2aW91ciBpZiBnYXRld2F5aXAgaXMgbm90IHNldAorICBQYXRjaCBieSBSb2JpbiBHaWxrcywgMjMgRGVjIDIwMDQKKworKiBGaXggY2xlYW51cCBmb3IgbmV0c3RhcnQgYm9hcmQuCisgIFJlbW92ZSBidWlsZCByZXN1bHRzIGZyb20gcmVwb3NpdG9yeQorCisqIFNvbWUgY29kZSBjbGVhbnVwIGZvciBHQ0MgNC54CisKKyogRml4ZXMgdG8gc3VwcG9ydCBlbnZpcm9ubWVudCBpbiBOQU5EIGZsYXNoOworICBlbmFibGUgTkFORCBmbGFzaCBiYXNlZCBlbnZpcm9ubWVudCBmb3IgZGVsdGEgYm9hcmQuCisKKyogQWRkIHN1cHBvcnQgZm9yIEludGVsIE1vbmFoYW5zIENQVSBvbiBaeWxvbml0ZSBhbmQgRGVsdGEgYm9hcmRzCisgIChUaGlzIGlzIFdvcmsgaW4gUHJvZ3Jlc3MhKQorCisqIEFkZCBzdXBwb3J0IGZvciBUUU04MjYwLUFJIGJvYXJkcy4KKworKiBNaW5vciBjb2RlIGNsZWFudXAKKworKiBNZXJnZSB0aGUgbmV3IE5BTkQgY29kZSAodGVzdGluZy1OQU5EIGJyYWNoKTsgc2VlIGRvYy9SRUFETUUubmFuZAorICBSZXdyaXRlIG9mIE5BTkQgY29kZSBiYXNlZCBvbiB3aGF0IGlzIGluIDIuNi4xMiBMaW51eCBrZXJuZWwKKyAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDI5IEp1biAyMDA1CisKKyogQWRkIGxvd2Jvb3QgdGFyZ2V0IHRvIG1jYzIwMCBib2FyZAorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDQgTWFyIDIwMDYKKworKiBGaXggcHJvYmxlbSB3aXRoIGZsYXNoX2dldF9zaXplKCkgZnJvbSBDRkkgZHJpdmVyIHVwZGF0ZQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEgTWFyIDIwMDYKKworKiBNYWtlIENGR19OT19GTEFTSCB3b3JrIG9uIEFSTSBzeXN0ZW1zCisgIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDI3IEZlYiAyMDA2CisKKyogVXBkYXRlIG1jYzIwMCBjb25maWc6IERpc2FibGUgUENJIGFuZCBEb0MsIHVzZSAxMzMgTUh6IElQQiBjbG9jaywKKyAgdXNlIGh1c2ggc2hlbGwuCisKKyogQ29udmVydCBtY2MyMDAgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggRmViIDIwMDYKKworKiBBZGQgZW52LXZhcmlhYmxlICJ1bmxvY2siIHRvIGhhbmRsZSBpbml0aWFsIHN0YXRlIG9mIHNlY3RvcnMKKyAgKGxvY2tlZC91bmxvY2tlZCkuCisKKyAgT25seSB0aGUgVS1Cb290IGltYWdlIGFuZCBpdCdzIGVudmlyb25tZW50IGlzIHByb3RlY3RlZCwKKyAgYWxsIG90aGVyIHNlY3RvcnMgYXJlIHVucHJvdGVjdGVkICh1bmxvY2tlZCkgaWYgZmxhc2gKKyAgaGFyZHdhcmUgcHJvdGVjdGlvbiBpcyB1c2VkIChDRkdfRkxBU0hfUFJPVEVDVElPTikgYW5kCisgIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAidW5sb2NrIiBpcyBzZXQgdG8gInllcyIuCisKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBGZWIgMjAwNgorCisqIFVwZGF0ZSBkcml2ZXJzL2NmaV9mbGFzaC5jOgorICAtIGZpbmRfc2VjdG9yKCkgY2FsbGVkIGluIGJvdGggdmVyc2lvbnMgb2YgZmxhc2hfd3JpdGVfY2Zpd29yZCgpCisgIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMjd0aCBGZWIgMjAwNgorCisqIENGSSBzdXBwb3J0IGZvciBhIHg4L3gxNiBBTUQvU3BhbnNpb24gZmxhc2ggY29uZmlndXJlZCBpbiB4OCBtb2RlCisgIFBhdGNoIGJ5IEpvc2UgTWFyaWEgTG9wZXosIDE2IEphbiAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIEFNRC9TcGFuc2lvbiBGbGFzaGVzIGluIGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcgorICBQYXRjaCBieSBBbGV4IEJhc3RvcyBhbmQgVGhvbWFzIFNjaGFlZmVyLCAyMDA1LTA4LTI5CisKKyogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKKyAgV2UgKnNob3VsZCogY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBlcnJvciBiaXRzIGlmIHRoZSBwcmV2aW91cyBjYWxsCisgIHJldHVybmVkIEVSUl9PSyAoT3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSBvdXRwdXQgYW4gZXJyb3IgbWVzc2FnZSBpbgorICBmbGFzaF9zdGF0dXNfY2hlY2soKSBhbHJlYWR5LikgIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIG9ubHkgY2hlY2sgZm9yCisgIGVycm9yIGJpdHMgaWYgZmxhc2hfc3RhdHVzX2NoZWNrKCkgcmV0dXJucyBFUlJfVElNRU9VVC4KKyAgUGF0Y2ggYnkgTWFyY3VzIEhhbGwsIDIzIEF1ZyAyMDA1CisKKyogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKKyAgLSBBZGQgQ0ZHX0ZMQVNIX1BST1RFQ1RfQ0xFQVIgb24gZHJpdmVycy9jZmlfZmxhc2guYworICAtIFByb2hpYml0IGJ1ZmZlciB3cml0ZSB3aGVuIGJ1ZmZlcl9zaXplIGlzIDEgb24gZHJpdmVycy9jZmlfZmxhc2guYworICBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDE5IEF1ZyAyMDA1CisKKyogRml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CisgIC0gRml4IHdyb25nIHRpbWVvdXQgdmFsdWUgdXNhZ2UgaW4gZmxhc2hfc3RhdHVzX2NoZWNrKCkKKyAgLSBSb3VuZCB3cml0ZV90b3V0IHVwIHdoZW4gY29udmVydGluZyB0byBtc2VjIGluIGZsYXNoX2dldF9zaXplKCkKKyAgLSBSZW1vdmUgY2xlYXJpbmcgZmxhc2ggc3RhdHVzIGF0IHRoZSBlbmQgb2YgZmxhc2hfd3JpdGVfY2ZpYnVmZmVyKCkKKyAgICB3aGljaCBzZXRzIEludGVsIDI4RjY0MEozIGZsYXNoIGJhY2sgdG8gY29tbWFuZCBtb2RlIG9uIENTQjQ3MgorICBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwMiBKdWx5IDIwMDUKKworKiBBZGQgYmFzaWMgc3VwcG9ydCBmb3IgdGhlIFNNTUFDTzQgQm9hcmQgZnJvbSBQYW5EYUNvbS4KKyAgUGF0Y2ggYnkgSGVpa28gU2Nob2NoZXIsIDIwIEZlYiAyMDA2CisKKyogQWRkIEdJVCB2ZXJzaW9uIGluZm9ybWF0aW9uIChjb21taWQgSUQpIHRvIHVudGFnZ2VkIFUtQm9vdCB2ZXJzaW9ucworCisgIEFzIGRvbmUgaW4gdGhlIGxpbnV4IGtlcm5lbCwgdGhlIFUtQm9vdCB2ZXJzaW9uIChVX0JPT1RfVkVSU0lPTikKKyAgb2YgYWxsIHVucmVsZWFzZWQgKHVudGFnZ2VkKSBVLUJvb3QgaW1hZ2VzIHdpbGwgYmUgYXV0b21hdGljYWxseQorICBleHRlbmRlZCB1cG9uIGNvbXBpbGV0aW1lIHdpdGggYSBwYXJ0IG9mIHRoZSBHSVQgY29tbWl0IElEIGFuZAorICBwb3NzaWJseSB3aXRoICJkaXJ0eSIgaWYgdW5jb21taXRlZCBjaGFuZ2VzIGFyZSBkZXRlY3RlZC4KKworICBIZXJlIGFuIGV4YW1wbGUgZm9yIHRoZSByZXN1bHRpbmcgdmVyc2lvbjoKKyAgIlUtQm9vdCAxLjEuNC1nMzQ1N2FjMTgtZGlydHkiCisKKyAgVGhlIHZlcnNpb24gaXMgbm93IG1haW50YWluZWQgaW4gdGhlIHRvcGxldmVsIE1ha2VmaWxlIGFuZCB0aGUKKyAgdmVyc2lvbiBoZWFkZXJzIGFyZSBhdXRvZ2VuZXJhdGVkLgorCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgOSBGZWIgMjAwNgorCisqIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBJTktBNHgwMCBib2FyZC4KKworKiBDb252ZXJ0IENQQ0k3NTAgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCisgIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDggRmViIDIwMDYKKworKiBWYXJpb3VzIGNoYW5nZXMgdG8gZXNkIEhINDA1IGJvYXJkIHNwZWNpZmljIGZpbGVzCisgIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwNyBGZWIgMjAwNgorCisqIENsZWFudXAgVS1Cb290IGJvb3QgbWVzc2FnZXMgb24gQVJNLgorCisgIFRvIG1hdGNoIHRoZSBVLUJvb3QgdXNlciBpbnRlcmZhY2Ugb24gQVJNIHBsYXRmb3JtcyB0byB0aGUgVS1Cb290CisgIHN0YW5kYXJkIChhcyBvbiBQUEMgcGxhdGZvcm1zKSwgc29tZSBtZXNzYWdlcyB3aXRoIGRlYnVnIGNoYXJhY3RlcgorICBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBkZWZhdWx0IFUtQm9vdCBidWlsZC4KKyAgRW5hYmxlIERFQlVHIGZvciBsaWJfYXJtL2JvYXJkLmMgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2VzLgorICBOZXcgQ09ORklHX0RJU1BMQVlfQ1BVSU5GTyBhbmQgQ09ORklHX0RJU1BMQVlfQk9BUkRJTkZPIG9wdGlvbnMuCisgIFBhdGNoCSBieSBTdGVmYW4gUm9lc2UsIDI0IEphbiAyMDA2CisKKyogRml4IHZhcmlvdXMgY29tcGlsZXIgd2FybmluZ3Mgb24gcHBjNHh4IGJ1aWxkcyAoRUxESyA0LjApCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggSmFuIDIwMDYKKworKiBBZGQgVkdBIHN1cHBvcnQgKENUNjkwMDApIHRvIENQQ0k3NTAgYm9hcmQuCisgIEluc2VydCBtaXNzaW5nIF9fbGUzMl90b19jcHUoKSBmb3IgZmlsZXNpemUgaW4gZXh0MmZzX3JlYWRfZmlsZSgpLgorICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCAzMCBEZWMgMjAwNQorCisqIFBNQzQwNSBhbmQgQ1BDSTQwNTogTW92ZWQgY29uZmlndXJhdGlvbiBvZiBwY2kgcmVzb3VyY2VzCisgIGludG8gY29uZmlnIGZpbGUuCisgIFBNQzQwNSBhbmQgQ1BDSTJEUDogQWRkZWQgZmlybXdhcmUgZG93bmxvYWQgYW5kIGJvb3RpbmcgdmlhIHBjaS4KKyAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIwIERlYyAyMDA1CisKKyogQWRkIENvbGRGaXJlIHRhcmdldHMgdG8gTUFLRUFMTCBzY3JpcHQKKyAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDI2IEphbiAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIHI1MjAwIGJvYXJkCisgIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAyNiBKYW4gMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBGcmVlc2NhbGUgTTUyNzEgcHJvY2Vzc29yCisgIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAyNiBKYW4gMjAwNgorCisqIEZpeCAyOEYyNTZKM0Egc3VwcG9ydCBvbiBQTTUyMCBib2FyZAorICAod2l0aG91dCBiYW5rLXN3aXRjaGluZyBvbmx5IDMyIE1CIGNhbiBiZSBhY2Nlc3NlZCkKKworKiBGaXggbWtpbWFnZSBidWcgd2l0aCBtdWx0aWZpbGUgaW1hZ2VzIGNyZWF0ZWQgb24gNjQgYml0IHN5c3RlbXMuCisKKyogQWRkIHN1cHBvcnQgZm9yIDI4RjI1NkozQSBmbGFzaCAoPT4gNjQgTUIpIG9uIFBNNTIwIGJvYXJkCisKKyogRml4IGNvbXBpbGVyIHByb2JsZW0gd2l0aCBhdDkxcm05MjAwZGsgYm9hcmQuCisgIFBhdGNoIGJ5IEV1Z2VuIEJpZ3osIDE5IERlYyAyMDA1CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAxLjEuNDoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBDaGFuZ2VzIHRvIFllbGxvd3N0b25lICYgWW9zZW1pdGUgNDQwRVAvR1IgZXZhbCBib2FyZHM6CisgIC0gQ2hhbmdlZCBHUElPIHNldHVwIHRvIGVuYWJsZSBhbm90aGVyIGFkZHJlc3MgbGluZSBpbiBvcmRlciB0bworICAgIGFkZHJlc3MgNjRNIG9mIEZMQVNILgorICAtIEFkZGVkIGZ1bmN0aW9uIHNkcmFtX3RyMV9zZXQgdG8gYXV0byBjYWxjdWxhdGUgdGhlIHRyMSB2YWx1ZSBmb3IKKyAgICB0aGUgRERSLgorICBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAxMiBEZWMgMjAwNQorCisqIE1QQzUyMDA6ICBTZXQgUENJIHJldHJ5IGNvdW50ZXIgdG8gMCA9IGluZmluaXRlIHJldHJ5OworICBUaGUgZGVmYXVsdCBvZiAyNTUgaXMgdG9vIHNob3J0IGZvciBzbG93IGRldmljZXMuCisgIFBhdGNoIGJ5IE1hcnRpbiBOeWtvZHltLCAxMiBEZWMgMjAwNQorCisqIENoYW5nZSBwb3J0IGNvbmZpZ3VyYXRpb24gZm9yIE8yRE5UIChDT0RFQzEgb24gUFNDMSkuCisKKyogRml4IHJlZ2lzdGVyIGZvciBQQ0kgYXN5bmMgbW9kZSBvbiBQUEM0NDBFUAorICBQYXRjaCBieSBZb3VuZ2NodWwgQmFuZywgMDggRGVjIDIwMDUKKworKiBGaXggVS1Cb290IGxpbmtpbmcgcHJvYmxlbXMgKGFkZCAuZWhfZnJhbWUgc2VnbWVudCB0byBsaW5rZXIgc2NyaXB0KQorICBUaGlzIHNlZ21lbnQgbWF5IGJlIHJlcXVpcmVkIGJ5IHNvbWUgbGliZ2NjLmEgZnVuY3Rpb25zCisgIChsaWtlIF91ZGl2ZGkzKS4KKworKiBGaXggRFBSQU0gb2Zmc2V0L3NpemUgZm9yIE1QQzg1NDEvODU1NS4KKyAgU2ltcGxpZnkgVFFNODV4eCBNYWtlZmlsZSBoYW5kbGluZy4KKworKiBGaXggZGF0YSBvdmVyZmxvdyAodHlwbz8pIGluIHJ0Yy9kczEzMDIuYworCisqIEZpeCBVLUJvb3QgY29tcGlsYXRpb24gZm9yIE1JUFMgYm9hcmRzIHVzaW5nIEVMREsgNC4wCisKKyogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NDEvODU1NSBib2FyZHMsIFRRTTg1eHggc3VwcG9ydCByZXdvcmtlZDoKKyAgLSBTdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzIGFkZGVkLgorICAtIENvbXBsZXRlIHJld29yayBvZiBUUU04NTQwLzg1NjAgc3VwcG9ydC4KKyAgLSBDb21tb24gVFFNODV4eCBjb2RlIG5vdyBzdXBwb3J0cyBhbGwgY3VycmVudCBUUU04NXh4IHBsYXRmb3JtcworICAgIChUUU04NTQwLzg1NDEvODU1NS84NTYwKS4KKyAgLSBERFIgU0RSQU0gc2l6ZSBkZXRlY3Rpb24gYWRkZWQuCisgIC0gQ0FTIGxhdGVuY3kgZGVmYXVsdCB2YWx1ZXMgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHNldHRpbmcgInNlcmlhbCMiCisgICAgdG8gZS5nLiAiQUJDMDAwMSBjYXNsPTI1IiAtPiBDQVMgbGF0ZW5jeSAyLjUgd2lsbCBiZSB1c2VkLgorICAgIElmIHByb2JsZW1zIGFyZSBkZXRlY3RlZCB3aXRoIHRoaXMgbm9uIGRlZmF1bHQgQ0FTIGxhdGVuY3ksCisgICAgdGhlIGRlZmF1bHQgdmFsdWVzIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorICAtIEZsYXNoIHNpemUgZGV0ZWN0aW9uIGFkZGVkLgorICAtIE1vdmVkIEZDQyBldGhlcm5ldCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYmVoaW5kIFRTRUMgZHJpdmVyIGluaXQKKyAgICAtPiBUU0VDIGlzIGZpcnN0IGRldmljZS4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBOb3YgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBBTUNDIDQ0MFNQLCBhZGQgc3VwcG9ydCBmb3IgQU1DQyBMdWFuIDQ0MFNQIGV2YWwgYm9hcmQuCisgIFBhdGNoIGJ5IEpvaG4gT3RrZW4sIDIzIE5vdiAyMDA1CisKKyogQ2hhbmdlZCBQUEM0NHggc3RhcnR1cCBtZXNzYWdlIChjcHUgaW5mbywgc3BlZWQuLi4pIHRvIGNvbW1vbiBzdHlsZToKKyAgT24gUFBDNDR4IHBsYXRmb3JtcywgdGhlIHN0YXJ0dXAgbWVzc2FnZSBnZW5lcmF0ZWQgaW4gImNwdS5jIiBvbmx5CisgIGNvbXByaXNlZCB0aGUgcHBjIHR5cGUgYW5kIHJldmlzaW9uIGJ1dCBub3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICBsaWtlIHNwZWVkIGV0Yy4gVGhvc2Ugc3BlZWQgaW5mb3Mgd2hlcmUgcHJpbnRlZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMKKyAgY29kZS4gVGhpcyBuZXcgaW1wbGVtZW50YXRpb24gbm93IHByaW50cyBhbGwgQ1BVIGluZm9zIGluIHRoZSBjb21tb24KKyAgY3B1IHNwZWNpZmljIGNvZGUuIE5vIGJvYXJkIHNwZWNpZmljIGNvZGUgaXMgbmVlZGVkIGFueW1vcmUgYW5kCisgIHRoZXJlZm9yZSByZW1vdmVkIGZyb20gYWxsIGN1cnJlbnQgNDR4IGltcGxlbWVudGF0aW9ucy4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBOb3YgMjAwNQorCisqIEFkanVzdCBUUU04MzR4IFBIWSBhZGRyZXNzZXMgZm9yIGxhdGVzdCBoYXJkd2FyZSByZXZpc2lvbi4KKworKiBJbmNyZWFzZSBtYWxsb2MgYXJlbmEgb24gVFFNNTIwMCBib2FyZCB0byAyNTYga0IuCisgIFdpdGggNjQga2IgdW5pZm9ybSBmbGFzaCBzZWN0b3Igc2l6ZSB0aGUgb2xkIHZhbHVlIG9mIDEyOCBrQiB3YXMKKyAgdG9vIHNtYWxsLgorCisqIEZpeCBtaWlwaHkgZ2xvYmFsIGRhdGEgaW5pdGlhbGl6YXRpb24gKHByb2JsZW0gb24gNHh4IGJvYXJkcyB3aGVuCisgIG5vIGV0aGFkZHIgaXMgYXNzaWduZWQpLiBJbml0aWFsaXphdGlvbiBtb3ZlZCBmcm9tCisgIG1paXBoeV9yZWdpc3RlcigpIHRvIGV0aF9pbml0aWFsaXplKCkuCisKKyAgQmFzZWQgb24gaW5pdGlhbCBwYXRjaCBmb3IgNHh4IHBsYXRmb3JtIGJ5IE1hdHRoaWFzIEZ1Y2hzLgorCisqIFJlbW92ZSB1bm5uZWNlc3NhcnkgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+IGZyb20gaW5jbHVkZS9hc20tKi91LWJvb3QuaAorCisqIEFsbG93IHVzZSBvZiBpbmNsdWRlL2ltYWdlLmggYW5kIGluY2x1ZGUvYXNtLSovdS1ib290LmggaW4gcHJvcHJpZXRhcnkgY29kZS4KKyAgVGhlIENPUFlJTkcgZmlsZSB3YXMgZXh0ZW5kZWQgdG8gbWFrZSBjbGVhciB0aGF0IHRoZXNlIGZpbGVzIGNhbiBiZQorICB1c2VkIGluIG5vbi1HUEwgY29kZSwgdG9vLgorICBBbHNvLCBhIGNvcnJlc3BvbmRpbmcgbm90ZSB3YXMgcGxhY2VkIGluIHRoZSBoZWFkZXJzIG9mIHRoZSBhZmZlY3RlZCBmaWxlcy4KKworKiBBZGQgc3VwcG9ydCBmb3IgUHJvZHJpdmUgUDNQNDQwIGJvYXJkOgorICAtIEFkZGVkIG9uYm9hcmQgUFBDNDQwIEREUiBhdXRvZGV0ZWN0aW9uIGluIGNwdS9wcGMvc2RyYW0uYworICAtIENGR19GTEFTSF9RVUlFVF9URVNUIGFkZGVkIHRvIHVzZSB0aGUgY29tbW9uIENGSSBkcml2ZXIKKyAgICBmb3IgYmFuayBhdXRvZGV0ZWN0aW9uCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjIgTm92IDIwMDUKKworKiBDaGFuZ2UgYWxsICckKC4uLiknIHZhcmlhYmxlIHJlZmVyZW5jZXMgaW50byAnJHsuLi59JworICB3aGljaCBtYWtlcyB0aGUgZW52aXJvbm1lbnQgY29tcGF0aWJsZSB3aXRoIHRoZSBodXNoIHNoZWxsLgorICBXQVJOSU5HOiBTdXBwb3J0IGZvciB0aGUgb2xkICckKC4uLiknIHN5bnRheCB3aWxsIGJlCisgIGRpc2NvbnRpbnVlZCBpbiBhIGxhdGVyIHZlcnNpb24uCisKKyogTWlub3IgY2hhbmdlcyB0byBpbml0IGZsYWdzIGluIFRRTTgzNHggUENJLgorCisqIEZpeCBCYW1ib28gRERSIFNEUkFNIGluaXRpYWxpemF0aW9uIChwcm9ibGVtIHdpdGggb25ib2FyZCBTRFJBTSkKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBOb3YgMjAwNQorCisqIE5ldyBQUEMgNDA1RVAgYm9hcmQgYWRkZWQ6IENNUzcwMAorICBBZGRlZCBDT05GSUdfTkVUX01VTFRJIGZvciBWT000MDUgYm9hcmQuCisgIEFkZGVkIHJlc2V0X3BoeSgpIGZvciBWT000MDUgYm9hcmQuCisgIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAwOSBOb3YgMjAwNQorCisqIFVwZGF0ZWQgUENJIG1hcHBpbmcgZm9yIGVzZCBDUENJMkRQIGJvYXJkLgorICBBZGQgc3VwcG9ydCBmb3IgZXJyb3IgTEVELgorICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDcgTm92IDIwMDUKKworKiBGaXggTVBDODV4eCBQQ0kgc3VwcG9ydCAocGNpX3JlZ2lzdGVyX2hvc2UoKSBiZWZvcmUgcGNpIGNvbmZpZyBhY2Nlc3MpCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgTm92IDIwMDUKKworKiBDb3JyZWN0IFBQQyBUaW1lYmFzZSByZWdpc3RlciBkZWZpbml0aW9ucyAoU1BSTl9UQlJMLi4uKQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE5vdiAyMDA1CisKKyogQWRqdXN0IGJkLT5iaV9mbGFzaHN0YXJ0IG9uIFllbGxvd3N0b25lICYgWW9zZW1pdGUgdG8gY29ycmVjdCBzaXplCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgTm92IDIwMDUKKworKiBBZGRpdGlvbmFsIGZpeCBmb3IgZXh0ZXJuYWwgSVJRIGNvbmZpZyBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgTm92IDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgT2NvdGVhIHBhc3MgMyB3aXRoIDQ0MEdYIFJldi4gRgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIE5vdiAyMDA1CisKKyogRml4IGV4dGVybmFsIElSUSBjb25maWd1cmF0aW9uIG9uIFllbGxvd3N0b25lICYgWW9zZW1pdGUKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBPY3QgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBQSFlzLgorICBUZXN0ZWQgb24gdGhlIGZvbGxvd2luZyBib2FyZHM6CisJY21jcHUyCSAgICAoYXQ5MXJtOTIwMC9ldGhlci5jKQorCVBQQ2hhbWVsZW9uIChwcGM0eHgvNHh4X2VuZXQuYykKKwl5dWtvbgkgICAgKG1wYzgyMjAvZmVjLmMpCisJdWMxMDAJICAgIChtcGM4eHgvZmVjLmMpCisJdHFtODM0eAkgICAgKG1wYzgzNHgvdHNlYy5jKSB3aXRoIEVFUFJPMTAwCisJbGl0ZTUyMDAgICAgKG1wYzV4eHgvZmVjLmMpIHdpdGggRUVQUk8xMDAgY2FyZCAoZHJpdmVycy9lZXBybzEwMC5jKQorICBNYWluIGNoYW5nZXMgaW5jbHVkZToKKyAgY29tbW9uL21paXBoeXV0aWwuYworICAtIG1paXBoeV9yZWdpc3RlciByb3V0aW5lIHdhcyBhZGRlZCB0byBhbGxvdyBtdWx0aXBsZSBQSFlzIHRvIGJlIHJlZ2lzdGVyZWQKKyAgLSBtaWlwaHlfcmVhZCBhbmQgbWlpcGh5X3dyaXRlIGFyZSBub3cgZGVmaW5lZCBpbiB0aGlzIGZpbGUsIGFuZAorICAgIHJlcXVpcmUgYWRkaXRpb25hbCBhcmd1bWVudCAoY2hhciAqZGV2bmFtZSkKKyAgLSBvdGhlciBtaWlwaHlfKiByb3V0aW5lcyBhbHNvIHJlcXVpcmUgYWRkaXRpb25hbCBkZXZpY2UgbmFtZSBhcmd1bWVudAorICAuLi9saWJfaTM4Ni9ib2FyZC5jCisgIC4uL2xpYl9wcGMvYm9hcmQuYworICBDYWxsaW5nIHJlc2V0X3BoeSgpIHdhcyBtb3ZlZCB0byBiZSBleGVjdXRlZCAqYWZ0ZXIqIGV0aF9pbml0aWFsaXplKCkuCisgIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIG5vdyBzb21lIG9mIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgcmVzZXRfcGh5KCkKKyAgbWF5IG5lZWQgdG8gdXNlIG1paXBoeV9yZXNldCgpIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGJlZm9yZSBldGhfaW5pdGlhbGl6ZSgpCisgIGFzIGV0aF9pbml0aWFsaXplIHJlZ2lzdGVycyBhbGwgcmVxdWlyZWQgbWlpcGh5Xyogcm91dGluZXMuCisgIFRlc3RlZCBvbiBJUDg2MCBhbmQgUEhZIGluaXRpYWxpemVzIHByb3Blcmx5IGFmdGVyIHRoaXMgY2hhbmdlLgorCisqIENvcnJlY3QgaW5jbHVkZXMgZm9yIGZsYXQgdHJlZSBidWlsZGVyLgorCisqIEZpeCBjb25mbGljdGluZyB0eXBlcyAoZmxhc2hfd3JpdGUoKSkgaW4gdHJhYiBhdXRvX3VwZGF0ZS5jLgorCisqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgdGhlIFRRTTgzNHggYm9hcmQuCisKKyogQWRkIG1pc3NpbmcgNHh4IGJvYXJkIHRvIE1BS0VBTEwKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQorCisqIEZpeCBjb25mbGljdGluZyB0eXBlcyAoZmxhc2hfd3JpdGUoKSkgaW4gZXNkIGF1dG9fdXBkYXRlLmMKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQorCisqIEZpeCBwcm9ibGVtIHdpdGggc2xlZXAgaW4gTmV0Q29uc29sZSAodXNlIGdldF90aW1lcigpKQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CisKKyogQWRkIE5ldENvbnNvbGUgU3VwcG9ydCBmb3IgQU1DQyBldmFsIGJvYXJkcworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE9jdCAyMDA1CisKKyogRml4IE5ldENvbnNvbGUgc3VwcG9ydCBvbiA0eHggKG9ubHkgcHJpbnQgZXRoIGxpbmsgb24gMXN0IHRyYW5zZmVyKQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IE9jdCAyMDA1CisKKyogQWRkIGZhdCAmIGV4dDIgc3VwcG9ydCB0byBBTUNDIDQ0MEVQIGJvYXJkcyBZb3NlbWl0ZSAmIEJhbWJvby4KKyAgRml4IGlkZW50YXRpb24gb24gZXh0MmxzIGhlbHAgZW50cnkuCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgT2N0IDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgVFFNODM0eCBib2FyZHMuCisgIENsZWFudXAuCisKKyogQ2xlYW51cCBmb3IgR0NDLTQueAorCisqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBPcGVuIEZpcm13YXJlIEZsYXQgVHJlZSBhbmQgdXNhZ2UuCisgIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMyBPY3QgMjAwNQorCisqIEFkZCBtaXNzaW5nIGZpbGVzIGZvciBQYW50ZWxpcyBBbnRvbmlvdSdzIHBhdGNoCisgIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQorCisqIEZpeCBwcm9ibGVtIGluIHBwYzR4eCBldGgtZHJpdmVyIHdpdGhvdXQgZXRoYWRkciAob25seSB3aXRob3V0CisgIENPTkZJR19ORVRfTVVMVEkgc2V0KQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE9jdCAyMDA1CisKKyogRml4IGd6aXAgYm1wIHN1cHBvcnQgKHRlc3QgaWYgbWFsbG9jIGZhaWxzLCB3YXJuaW5nIHdoZW4gdHJ1bmNhdGVkKS4KKyAgSW5jcmVhc2UgQ0ZHX1ZJREVPX0xPR09fTUFYX1NJWkUgb24gSEg0MDUgYm9hcmQuCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgT2N0IDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgT0YgZmxhdCB0cmVlIGZvciB0aGUgU1RYdGMgYm9hcmQuCisgIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQorCisqIFN1cHBvcnQgcGFzc2luZyBvZiBPRiBmbGF0IHRyZWVzIHRvIHRoZSBrZXJuZWwuCisgIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwNCBTZXAgMjAwNQorCisqIENsZWFudXAKKworKiBBZGQgc3VwcG9ydCBmb3IgTmV0U2lsaWNvbiBOUzc1MjAgcHJvY2Vzc29yLgorICBQYXRjaCBieSBBcnQgU2hpcGtvd3NraSwgMTIgTWF5IDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgQVAxMDAwIGJvYXJkLgorICBQYXRjaCBieSBKYW1lcyBNYWNBdWxheSwgMDcgT2N0IDIwMDUKKworKiBFbGltaW5hdGUgaGFyZC1jb2RlZCBhZGRyZXNzIG9mIEV0aGVybmV0IHRyYW5zZmVyIGJ1ZmZlciBvbiBhdDkxcm05MjAwCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA3IE9jdCAyMDA1CisKKyAgVGhlIEF0bWVsIGVycmF0YSAjMTEgc3RhdGVzIHRoYXQgdGhlIHRyYW5zZmVyIGJ1ZmZlciBkZXNjcmlwdG9yCisgIHRhYmxlIG11c3QgYmUgYWxpZ25lZCBvbiBhIDE2LXdvcmQgYm91bmRhcnkuIEFzIGl0IHR1cm5lZCBvdXQsIHRoaXMKKyAgaXMgaW5zdWZmaWNpZW50IC0gaXQgc2VlbXMgdGhlIHRhYmxlIG11c3QgYmUgYWxpZ25lZCBvbiBhIGJvdW5kYXJ5CisgIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSB0YWJsZSBpdHNlbGYgKGluIExpbnV4IHRoaXMgaXMgbm90IGFuCisgIGlzc3VlIC0gdGhlIHRhYmxlIGlzIGFsaWduZWQgb24gYSBQQUdFX1NJWkUgKDQwOTYpIGJvdW5kYXJ5KS4KKworKiBGaXhlZCBjb21waWxhdGlvbiBmb3IgQVJNIHdoZW4gdXNpbmcgYSAoc3RhbmRhcmQpIGhhcmQtRlAgdG9vbGNoYWluCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA3IE9jdCAyMDA1CisKKyogQ2xlYW51cCB3YXJuaW5ncyBmb3IgY3B1L2FybTcyMHQgJiBjcHUvYXJtMTEzNiBmaWxlcy4KKyAgc2VkIHRoZSBsaW5rZXIgc2NyaXB0cywgcmF0aGVyIHRoYW4gcHJlLXByb2Nlc3MgdGhlbS4KKyAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNyBPY3QgMjAwNQorCisqIFVwZGF0ZSBtYWtlIHRhcmdldCBmb3IgQVJNIHN1cHBvcnRlZCBib2FyZHMuCisgIFVzZSBsb3dsZXZlbF9pbml0KCkgaW5zdGVhZCBvZiBwbGF0Zm9ybXNldHVwKCkgW3JlbmFtZV0uCisgIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDYgT2N0IDIwMDUKKworKiBGaXggYm9vdGluZyBmcm9tIHNlcmlhbCBkYXRhZmxhc2ggb24gQVQ5MVJNOTIwMAorICBQYXRjaCBieSBQZXRlciBNZW56ZWJhY2gsIDI5IEF1ZyAyMDA1CisKKyogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIFRSQUIgYm9hcmQKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjUgQXVnIDIwMDUKKworKiBSZW1vdmUgdW5uZWNlc3NhcnkgZGVwZW5kZW5jeSBvZiBuZXRjb25zb2xlIG9uIENPTkZJR19ORVRfTVVMVEkKKyAgUGF0Y2ggYnkgTWFyY3VzIEhhbGwsIDI0IEF1ZyAyMDA1CisKKyogRml4IHRoZSBtYWNoaW5lLWlkIG9mIHRoZSBDb2dlbnQgY3NiNjM3IGJvYXJkCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA1IE9jdCAyMDA1CisKKyogQ29tcGxldGUgc3VwcG9ydCBmb3IgdGhlIEt3aWtCeXRlIEtCOTIweCBib2FyZHMKKyAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDUgT2N0IDIwMDUKKworKiBTZXQgdGhlIEFUOTFSTTkyMDAgY2xvY2sgdG8gYXN5bmNocm9ub3VzIG1vZGUKKyAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDMgTWF5IDIwMDUKKworKiBTZXQgdGhlIEFUOTFSTTkyMDAgY2xvY2sgdG8gc3luY2hyb25vdXMgbW9kZQorICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgY3NiNjM3CisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CisKKyogRml4IGRtOTE2MS5jIGluaXRpYWxpemF0aW9uCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CisKKyogRml4IHByb2JsZW1zIGludHJvZHVjZWQgYnkgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDIgTWFyIDIwMDUKKyAgKDhlMmJlNTFkZThkZDAzYzFjZTRkMDZjYmIxOGFkMDYxMzNkNDdjZDUpCisKKyogTW92ZSBkbTkxNjEuYyBhbmQgbHh0OTcyLmMgaW50byBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI5IEFwciAyMDA1CisKKyogRml4IGRldmljZSBwYXJ0aXRpb24gaW50aWFsaXphdGlvbiBmb3IgU3lzdGVtQUNFIGRpc2tzLgorICBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAyOCBBcHIgMjAwNQorCisqIEFkZGVkIHN1cHBvcnQgZm9yIEt3aWtCeXRlIEtCOTIweCBib2FyZHMgKGJhc2VkIG9uIEFUOTFSTTkyMDApCisgIFBhdGNoIGJ5IE1hdHQgPz8gPGtiOTIwMF9kZXZAa3dpa2J5dGUuY29tPiwgMjcgQXByIDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgUzI5R0wwNjRNLVIzIGZsYXNoIGNoaXAgb24geHNlbmdpbmUgYm9hcmQKKyAgUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDE4IEFwciAyMDA1CisKKyogRTUwMCB1cGRhdGU6IHJlcG9pbnQgSVZQUiB0byBSQU0gd2hlbiBjb2RlIGlzIHJlbG9jYXRlZAorICBQYXRjaCBieSBLeWxvIEdpbnNiZXJnLCAxMyBBcHIgMjAwNQorCisqIEZpeCBsb29wIGVuZCB0ZXN0IGluIGxpYl9nZW5lcmljL3N0cmluZy5jOnN0cnN3YWIoKQorICBQYXRjaCBieSBBbmRyZXcgRHllciwgT2N0b2JlciAxMCwgMjAwNQorICBTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgRHllciA8YW1keWVyQGdtYWlsLmNvbT4KKworKiBDbGVhbnVwCisKKyogVXBkYXRlIEFSTSBJbnRlZ3JhdG9yIGJvYXJkczoKKyAgQ29ycmVjdCBhZGRlc3NpbmcgZXJyb3JzIGluIHBsYXRmb3JtIGZpbGVzLgorICBTcGxpdCBvZmYgY29tbW9uIGNvcmUgbW9kdWxlIGRhdGEgZnJvbSBJbnRlZ3JhdG9yIGhlYWRlciBmaWxlcyB0bworICBpbmNsdWRlL2FybWNvcmVtb2R1bGUuaC4KKyAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAwNCBPY3QgMjAwNQorCisqIE1ha2Ugc3VyZSBvbmx5IHN1cHBvcnRlZCBjb21waWxlciBvcHRpb25zIGFyZSB1c2VkCisgIEltcG9ydCAiY2Mtb3B0aW9uIiBzaGVsbCBmdW5jdGlvbiBmcm9tIGtlcm5lbCBhbmQKKyAgdXNlIGl0IHRvIGdldCB0aGUgY29ycmVjdCBBUk0gR0NDIG9wdGlvbnMgZm9yIGluZGl2aWR1YWwgQ1BVcworICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDMwIEp1biAyMDA1CisKKyogRml4IDQ0MEdSIHRvIHByaW50IGNvcnJlY3QgY3B1IHJldmlzaW9uCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDQgT2N0IDIwMDUKKworKiBDaGFuZ2UgYm9hcmQgbWVzc2FnZSBvbiBBTUNDIFlvc2VtaXRlICYgWWVsbG93c3RvbmUgdG8gY29tbW9uIHN0eWxlCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgT2N0IDIwMDUKKworKiBGaXggY29tcGlsZXIgd2FybmluZworCisqIEZpeCBGRUMgUEhZIGFkZHJlc3NlcyBmb3IgVFFNODV4eCBib2FyZHMKKworKiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBwcm9ibGVtIGluIGh1c2ggc2hlbGwKKyAgUGF0Y2ggYnkgTGFycyBSb3N0b2NrLCAyNiBTZXAgMjAwNQorCisqIFVuZG8gY2hhbmdlIG9mIGY2ZTIwZmM2Y2EuLi4gdG8gaW5jbHVkZS9jb25maWdzL3RyYWIuaAorICAoTXVzdCBoYXZlIGJlZW4gYW4gYWNjaWRlbnQ/KQorCisqIEFkZCBzdXBwb3J0IGZvciBBVDkxUk05MjAwIE9IQ0kgQ29udHJvbGxlci4KKyAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CisKKyogVXBkYXRlIEFSTSBtYWNoLXR5cGVzLmgKKyAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIE1QMlVTQiBib2FyZC4KKyAgUGF0Y2ggYnkgRXJpYyBCZW5hcmQsIDA3IEFwciAyMDA1CisKKyogQWRkIGJvYXJkIHN1cHBvcnQgZm9yIGFybWFkaWxsbyBIVDEwNzAKKyAgUGF0Y2ggYnkgUm93ZWwgQXRpZW56YSwgMDYgQXByIDIwMDUKKworKiBTZWNvbmQgRXRoZXJuZXQgYWRkcmVzcyBlbmFibGVkIGZvciBNUEM4ODVBRFMgYW5kIE1QQzgyNzJBRFMuCisgIFBhdGNoIGJ5IFZpdGFseSBCb3JkdWcsIDMwIE1hciAyMDA1CisKKyogQWRkIGlvcHNldCBjb21tYW5kIG9uIG1wYzh4eAorICBQYXRjaCBieSBEYW5pZWwgRWlzZW5odXQsIDI1IE1hciAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIE1JSSBpbiBlZXBybzEwMCBkcml2ZXIuCisgIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMjEgTWFyIDIwMDUKKworKiBGaXhlcyB0byB0aGUgTHViYm9jayAoUFhBIDI1eCkgc3VwcG9ydDoKKyAgLSBSZXNvbHZlIHRoZSBGSVhNRSB3aXRoIHJlc3BlY3QgdG8gc2F2aW5nIHRoZSB1LWJvb3QgZW52aXJvbm1lbnQuCisgIC0gTWFrZSB0aGUgZGVmYXVsdCBsb2FkIGFkZHJlc3MgbGFuZCBpbiByZWFsIG1lbW9yeS4KKyAgLSBGaXggbGFuOTFjOTYgU01DX3tpbixvdXR9e2IsdyxsfSgpIG1hY3JvcworICBQYXRjaCBieSBEYXZpZCBCcm93bmVsbCwgMTAgTWFyIDIwMDUKKworKiBBZGQgQmFyY28gU3RyZWFtaW5nIFZpZGVvIENhcmQgKFNWQykgYW5kIFNhbXBsZSBDb21wcmVzcyBOZXR3b3JrIChTQ04pIGJvYXJkCisgIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAwNCBNYXIgMjAwNQorCisqIE9NQVAyNDJ4IEg0IGJvYXJkIHVwZGF0ZQorICAtIGZpeCBmb3IgRVMyIGRpZmZlcmVuY2VzLgorICAtIHN3aXRjaCB0byB1c2luZyB0aGUgY2ZpX2ZsYXNoIGRyaXZlci4KKyAgLSBmaXggU1JBTSBidWlsZCBhZGRyZXNzLgorICAtIGZpeCBmb3IgR1AgZGV2aWNlIG9wZXJhdGlvbi4KKyAgLSB1bmxvY2sgU1JBTSBmb3IgR1AgZGV2aWNlcy4KKyAgLSBkaXNwbGF5IG1vcmUgZGV2aWNlIGluZm9ybWF0aW9uLgorICAtIGZpeCBwb3RlbnRpYWwgZGVhZGxvY2sgaW4gb21hcDI0eHhfaTJjIGRyaXZlci4KKyAgLSBmaXggRExMIGxvYWQgdmFsdWVzIHRvIG1hdGNoIGRwbGxvdXQqMSBvcGVyYXRpb24uCisgIC0gZml4IDJuZCBjaGlwIHNlbGVjdCBpbml0IGZvciBjb21ibyBERFIgZGV2aWNlLgorICAtIGFkZCBzdXBwb3J0IGZvciBDRkkgSW50ZWwgMjhGMjU2TDE4IG9uIEg0IGJvYXJkLgorICBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAwMyBNYXIgMjAwNQorCisqIEZpeCBmb3JtYXRpbmcgaW4gaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9BVDkxUk05MjAwLmgKKyAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDIgTWFyIDIwMDUKKworKiBGaXggdHlwbyBpbiBldGguYworICBQYXRjaCBieSBBcmEgQXZhbmVzeWFuLCAyNCBGZWIgMjAwNQorCisqIFJlbW92ZSB1bm5lZWRlZCAjaW5jbHVkZSA8bWFsbG9jLmg+CisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyMiBGZWIgMjAwNQorCisqIEFkZCBjcmFtZnMgc3VwcG9ydCBmb3IgbTY4aworICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjEgRmViIDIwMDUKKworKiBVcGRhdGUgZXA4MjYwOiBGaXggZmxhc2ggdGltZW91dHM7IGltcHJvdmUgY2xvY2sgcmVzb2x1dGlvbiBmb3IgZmFzdGVyIFVBUlRzCisgIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAyMSBGZWIgMjAwNQorCisqIEZpeCBhdTF4MDBfc2VyaWFsIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbjoKKyAgcmVtb3ZlIGhhcmRjb2RlZCBjcHUgY2xvY2sgZGl2aXNvciBhbmQgdXNlIHJlZ2lzdGVyIGluc3RlYWQ7CisgIHJvdW5kIHVwIGluc3RlYWQgb2YgdHJ1bmNhdGUKKyAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDE1IEZlYiAyMDA1CisKKyogQWRkIFhpbGlueCBTcGFydGFuMyBmYW1pbHkgRlBHQSBzdXBwb3J0CisgIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAxNCBGZWIgMjAwNQorCisqIEZpeCBkcml2ZXJzL2NmaV9mbGFzaC5jOiB1c2UgaW5mby0+cmVzZXRfY21kIGluc3RlYWQgb2YgRkxBU0hfQ01EX1JFU0VUCisgIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAxMSBGZWIgMjAwNQorCisqIEZpeCBWT0g0MDUgU3VwcG9ydAorICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjUgU2VwIDIwMDUKKworKiBBZGRlZCBzdXBwb3J0IGZvciBQQ0kgYnJpZGdlIG9uIE1QQzgyNzJBRFMKKyAgUGF0Y2ggYnkgVml0YWx5IEJvcmR1ZywgRmViIDA5IDIwMDUKKworKiBVcGRhdGUgbXVsdGljb3JlIENNOVhYIHN1cHBvcnQgZm9yIEludGVncmF0b3IgQVAgdG8gYWxsb3cgYm9vdGluZyBmcm9tIGZsYXNoCisgIFBhdGNoIGJ5IEplYW4tUGF1bCBTYW1hbiwgOCBGZWIgMjAwNQorCisqIEZpeCBzdHJzd2FiKCkgdG8gcmVsaWFibHkgZmluZCBlbmQgb2Ygc3RyaW5nCisgIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAwOCBGZWIgMjAwNQorCisqIEZpeCB0eXBvcyBpbiBpbmNsdWRlL3BwYzQ0MC5oCisgIFBhdGNoIGJ5IEFuZHJldyBFIE1pbGVza2ksIDA0IEZlYiAyMDA1CisKKyogQWRkIFZpYnJlbiAod2FzIEFjY2VsZW50KSBQWEEyNTUgSURQIFN1cHBvcnQKKyAgUGF0Y2ggYnkgQ2xpZmYgQnJha2UsIDA0IEZlYiAyMDA1CisKKyogRml4IHRvb2xzL2JtcF9sb2dvLmMgdXNpbmcgaW5jb3JyZWN0IG9mZnNldCB0byBwaXhlbCBkYXRhCisgIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAzMSBKYW4gMjAwNQorCisqIEFkZCBBUk05NDZFIGNwdSBhbmQgY29yZSBtb2R1bGUgdGFyZ2V0czsgcmVtYXAgbWVtb3J5IHRvIDB4MDAwMDAwMDAKKyAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAyIEZlYiAyMDA1CisKKyogRml4IGVycm9yIGhhbmRsaW5nIGluIHRvb2xzL2Vudi9md19lbnYuYworICBQYXRjaCBieSBBcmEgQXZhbmVzeWFuLCAwMSBGZWIgMjAwNQorCisqIEZpeCBNR1Q1MTAwIFBTQyBiYXVkcmF0ZSBjYWxjdWxhdGlvbgorICBQYXRjaCBieSBTZWJhc3RpYW4gU2NoYXUsIDI3IEphbiAyMDA1CisKKyogT01BUDI0MnggZml4IGZvciBHUCBkZXZpY2UgYm9vdGluZworICAtIEFkZCBTUkFNIHVubG9jayBmb3IgR1AgZGV2aWNlcy4KKyAgLSBDaGFuZ2UgRERSIERMTCB1bmxvY2sgdmFsdWUgdG8gYWxsb3cgRFBMTG91dCoxIG9wZXJhdGlvbi4KKyAgUGF0Y2hlcyBieSBSaWNoYXJkIFdvb2RydWZmLCAyMSBKYW4gMjAwNToKKworKiBBZGQgc3VwcG9ydCBmb3IgQU1EJ3MgUGIxeDAwIGV2YWwgYm9hcmQ7CisgIGFkZCBNSUkgcm91dGluZXMgdG8gdGhlIGF1MXgwMCBldGhlcm5ldCBkcml2ZXI7CisgIGFkZCBVU0Igb2hjaSBkcml2ZXIgKHdvcmsgaW4gcHJvZ3Jlc3MpCisgIFBhdGNoIGJ5IFRob21hcyBTYWlsZXIsIDIwIEphbiAyMDA1CisKKyogVXBkYXRlIG9tYXA1OTEyb3NrIGJvYXJkCisgIFVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jIGluc3RlYWQgb2YgcHJpdmF0ZSBmbGFzaCBkcml2ZXI7CisgIFJlbW92ZSBoYXJkY29kZWQgcGVyc29uYWxpemVkIHNldHRpbmdzIGZyb20gb21hcDU5MTJvc2suaDsKKyAgRml4IHNwYWNpbmcgd2l0aCAoUk8pIG1hcmtzIGluICdmbGluZm8nIG91dHB1dC4KKyAgUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTQgSmFuIDIwMDUKKworKiBGaXggd2FybmluZ3MgZm9yIFBDSSBjb2RlIG9uIGl4cAorICBQYXRjaCBieSBKb2UgPGxneHVlQHlhaG9vLmNvbT4sIDEzIEphbiAyMDA1CisKKyogdmlydGV4MiBmaXggZm9yIGJvZ3VzIGRvd25sb2FkIGVycm9yIG1lc3NhZ2VzCisgIFRoZSB2aXJ0ZXgyIEZQR0EgZG93bmxvYWQgY29kZSB3YXRjaGVzIGZvciBpbml0IGdvaW5nIGFjdGl2ZSBkdXJpbmcKKyAgYSBkb3dubG9hZCBvZiBjb25maWcgZGF0YSBhcyBhbiBlcnJvciBjb25kaXRpb24uIGluaXQgYWxzbyBnb2VzCisgIGFjdGl2ZSBhZnRlciBhIGNvbmZpZ3VyYXRpb24gaXMgZmluaXNoZWQgaW4gY29uY2VydCB3aXRoIHRoZSBkb25lCisgIHNpZ25hbC4gU28gZmFyLCB0aGUgY29kZSBkb2VzIG5vdCBjaGVjayBmb3IgZG9uZSBhY3RpdmUgdW50aWwgYWxsCisgIG9mIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgaXMgc2VudC4gSWYgY29uZmlndXJhdGlvbiBkYXRhIGhhcyBhIGZldworICBleHRyYSBwYWQgYnl0ZXMgYXQgdGhlIGVuZCwgdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvciBtZXNzYWdlIGV2ZW4KKyAgdGhvdWdoIHRoZSBkb3dubG9hZCBoYWQgc3VjZWVkZWQuCisgIE5PVEU6IHZpcnRleDIgc2xhdmUgc2VyaWFsIGFuZCBzcGFydGFuMiB2ZXJzaW9ucyBtYXkgc3RpbGwgaGF2ZSB0aGUKKyAgc2FtZSBwcm9ibGVtLgorICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTIgSmFuIDIwMDUKKworKiBPcHRpbWl6ZSBmbGFzaF9tYWtlX2NtZCBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jIGZvciBsaXR0bGUgZW5kaWFuCisgIEZpeCAiV0FSTklORzogZmxhc2hfbWFrZV9jbWQ6IHVuc3VwcHBvcnRlZCBMaXR0bGVFbmRpYW4gbW9kZSIKKyAgbWVzc2FnZSB3aGVuIHByb2JpbmcgZm9yIG5vbmV4aXN0ZW50IGZsYXNoIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4KKyAgQXMgYSBzaWRlIGVmZmVjdCBtb3JlIGVmZmljaWVudCBhbmQgc21hbGxlciBjb2RlIGlzIGdlbmVyYXRlZCwKKyAgd2hpY2ggaXMgYWx3YXlzIGEgR29vZCBUaGluZyAoVE0pLgorICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjQgU2VwIDIwMDUKKworKiBVcGRhdGUgZm9yIFRGVFAgdXNpbmcgYSBmaXhlZCBVRFAgcG9ydAorICBVc2UgdGhlIGFwcHJvdmVkIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLiBBZGRlZCAidGZ0cGRzdHAiIHRvCisgIGFsbG93IHBvcnRzIG90aGVyIHRoYW4gNjkgcGVyIFRvbHVuYXkgT3JrdW4ncyByZWNvbW1lbmRhdGlvbi4KKyAgUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAxMiBKYW4gMjAwNQorCisqIEFsbG93IHRvIGZvcmNlIFRGVFAgdG8gdXNlIGEgZml4ZWQgVURQIHBvcnQKKyAgKEFkZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIENPTkZJR19URlRQX1BPUlQgYW5kIG9wdGlvbmFsIGVudgorICB2YXJpYWJsZSB0ZnRwcG9ydCkKKyAgUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAxMCBKYW4gMjAwNQorCisqIEZpeCBldGhlcm5ldCB0aW1lb3V0cyBvbiBkYmF1MTU1MCBhbmQgb3RoZXIgYXUxeDAwIHN5c3RlbXMKKyAgUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjkgRGVjIDIwMDQKKworKiBDbGVhbnVwOiBmaXggYnJva2VuIGJ1aWxkcworCisqIEZpeCBQSFkgYWRkcmVzcyBhcmd1bWVudCBwYXNzaW5nIHdpdGggbWlpIGluZm8gY29tbWFuZAorICBQYXRjaCBieSBBbmRyZXcgRHllciwgMjggRGVjIDIwMDQKKworKiBDbGVhbnVwIChQUEM0eHggaXMgQU1DQyBub3cpCisKKyogZXNkIENQQ0kyRFAgYm9hcmQgYWRkZWQKKyAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIyIFNlcCAyMDA1CisKKyogZXNkIFBNQzQwNSBib2FyZCB1cGRhdGVkCisgIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMiBTZXAgMjAwNQorCisqIEFkZCBTTTUwMSBzdXBwb3J0IHRvIEhINDA1IGJvYXJkLgorICBBZGQgc3VwcG9ydCBmb3IgZ3ppcCBjb21wcmVzc2VkIGJtcCdzIChDT05GSUdfVklERU9fQk1QX0daSVApLgorICBBZGQgc3VwcG9ydCBmb3IgZWVwcm9tIHdyaXRlLWVuYWJsZSAoQ0ZHX0VFUFJPTV9XUkVOKS4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMiBTZXAgMjAwNQorCisqIEZpeCBhdXRvbmVnb3RpYXRpb24gaW4gdHNlYyBldGhlcm5ldCBkcml2ZXIKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMSBTZXAgMjAwNQorCisqIEZpeCBidWcgaW4gYXV0b191cGRhdGUgKHRyYWIgYm9hcmQpCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE2IFNlcCAyMDA1CisKKyogRml4IGNvbXB1dGF0aW9uIG9mIGZyYW1lYnVmZmVyIHBhbGV0dGUgZm9yIDhicHAgTENEIGJpdG1hcHMKKyAgUGF0Y2ggYnkgRnJhbmNlc2NvIE1hbmRyYWNjaSwgMTYgU2VwIDIwMDUKKworKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgSU5LQTR4MCBib2FyZAorCisqIFVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBQTTg1NCBib2FyZAorICBCYXNlZCBvbiBwYXRjaCBieSBSLiBMb2VmZmwsIDIwIEp1bCAyMDA1CisKKyogQWRkIFBDSSBzdXBwb3J0IHRvIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgU2VwIDIwMDUKKworKiBVcGRhdGUgQU1DQyBZb3NlbWl0ZSB0byBnZXQgYSBjb25zaXN0ZW50IHNldHVwIGZvciBhbGwgQU1DQyBldmFsCisgIGJvYXJkcyAoYmF1ZHJhdGUsIGVudmlyb25tZW50Li4uKS4gRmxhc2ggZHJpdmVyIGZpeGVkLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1CisKKyogRml4IHByb2JsZW0gaW4gNDQwR1AgZXRoZXJuZXQgZHJpdmVyIChlYm9ueSkuIEFkZCBzdXBwb3J0IGZvciAybmQKKyAgZXRoZXJuZXQgcG9ydCBvbiBlYm9ueS4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA3IFNlcCAyMDA1CisKKyogQWRkZWQgc3VwcG9ydCBmb3IgbXRkZGV2bnVtIGFuZCBtdGRkZXZuYW1lIHZhcmlhYmxlcyAobXRkcGFydHMgY29tbWFuZCkKKworKiBDaGFuZ2UgZGVmYXVsdCBjb25zb2xlIGJhdWQgcmF0ZSBmb3Igc3R4eHRjIGJvYXJkCisKKyogQWRkIEkyQyBzdXBwb3J0IHRvIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzIChFRVBST00sIFJUQywgTE03NS1EVFQpLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMxIEF1ZyAyMDA1CisKKyogRml4IGRlZmF1bHQgY29tbWFuZCBzZXQgKGRvbid0IGluY2x1ZGUgQ0ZHX0NNRF9ESVNQTEFZIGNvbW1hbmQpCisgIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwMiBTZXAgMjAwNQorCisqIENsZWFudXAKKworKiBFbmFibGUgU003MTIgZHJpdmVyIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCisKKyogRml4IHByb2JsZW1zIHdpdGggbGQgdmVyc2lvbiAyLjE2IChkb3Qgb3V0c2lkZSBzZWN0aW9ucyBwcm9ibGVtKQorICBQb2ludGVkIG91dCBieSBHZXJoYXJkIEphZWdlciwgMzEgQXVnIDIwMDU7CisgIGNmLiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvYmludXRpbHMvMjAwNS0wOC9tc2cwMDQxMi5odG1sCisKKyogUHJlcGFyZSBVLUJvb3QgZm9yIGdjYy00Lng6IGZpeCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uCisKKyogQWRqdXN0IENTMyB0aW1pbmdzIG9uIEhNSTEwMDEgYm9hcmQgZm9yIGRvdCBtYXRyaXggZGlzcGxheSB1bmRlciBMaW51eAorCisqIEFkZCBrZXlib2FyZCBhbmQgZG90IG1hdHJpeCBkaXNwbGF5IHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCisKKyogUHJlcGFyZSBVLUJvb3QgZm9yIGdjYy00LngKKworKiBGaXhlZCBCYW1ib28gcG9ydCB0byBlbmFibGUgcnVubmluZyB3aXRob3V0IEREUi1ESU1NCisgIChCYW1ib28gaGFzIGFsc28gNjRNQiBvbmJvYXJkIEREUikKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBBdWcgMjAwNQorCisqIE1lcmdlZCA0MDVncF9lbmV0LmMgYW5kIDQ0MGd4X2VuZXQuYyB0byBnZW5lcmljIDR4eF9lbmV0LmMKKyAgbm93IGhhbmRsaW5nIGFsbCA0eHggY3B1J3MKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBBdWcgMjAwNQorCisqIEZpeCBtYWtlIGRlcGVuZGVuY2llcyBmb3IgYXQ5MXJtOTIwMCBhbmQga3M4Njk1IGNwdXMKKyAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjMgQXVnIDIwMDUKKworKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgVFFNNTIwMCBib2FyZAorCisqIEFkZCBlc2QgY3BjaTUyMDAgYW5kIHBmNTIwMCBib2FyZHMKKyAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMjIgQXVnIDIwMDUKKworKiBGaXggc3lzY2xvY2sgZm9yIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI1IEp1bCAyMDA1CisKKyogSW5pdGlhbGl6ZSBzZXJpYWwjIGFuZCBldGhhZGRyIGZyb20gbWFudWZhY3R1cmVyIGRhdGEgaW4gRUVQUk9NIG9uIENNQy1QVTIKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDggSnVuIDIwMDUKKworKiBBZGQgbmV3IGJvYXJkIHNwZWNpZmljIGNvbW1hbmRzIGZvciBUUU01MjAwL1NUSzUyWFgKKyAgLSBTb3VuZCBjb21tYW5kcyAoYmVlcCwgd2F2LCBzb3VuZCkKKyAgLSBUZXN0IGNvbW1hbmRzIChsZWQsIGNhbiwgYmFja2xpZ2h0LCByczIzMikKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDIgTWF5IDIwMDUKKworKiBDaGFuZ2UgbWFpbiBjbG9jayBvbiBDTUMtUFUyIGJvYXJkIGZyb20gMjA3IE1IeiB0byAxNzkgTUh6CisgIGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlIEFUOTFSTTkyMDAgQ1BVIFBMTAorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMiBBcHIgMjAwNQorCisqIEFkZCBhdXRvbWF0aWMgSFcgZGV0ZWN0aW9uIGZvciBhbm90aGVyIENNQ19QVTIgdmFyaWFudAorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMCBBcHIgMjAwNQorCisqIFJlbW92ZSBDT05GSUdfQVQ5MVJNOTIwMERLIGluIENNQy1QVTIgY29uZmlndXJhdGlvbgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxOSBBcHIgMjAwNQorCisqIEZpeCBpbml0aWFsaXphdGlvbiBwcm9ibGVtIG9uIFRRTTUyMDAgd2l0aG91dCBTTTUwMQorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBBcHIgMjAwNQorCisqIEFkZCBSVEMgc3VwcG9ydCBmb3IgU1RLNTJYWC4yMDAKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgQXByIDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgSUZNIG8yZG50IGJvYXJkCisKKyogRW5hYmxlIFBDSSBvbiBobWkxMDAxIGJvYXJkCisKKyogRml4IHJldHVybiB2YWx1ZXMgb2YgdGhlIGpmZnMyIGNvbW1hbmRzIGxzL2ZzbG9hZC9mc2luZm8sCisgIHNvIHdlIGNhbiB1c2UgdGhlbSB0bywgZS5nLiwgY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBhIGZpbGUgd2l0aAorICAiaWYgbHMgZm9vOyB0aGVuIHRoaXM7IGVsc2UgdGhhdDsgZmkiIGluIHRoZSBodXNoIHNoZWxsCisgIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDE2IEF1Z3VzdCAyMDA1CisKKyogQ29kaW5nIHN0eWxlIGNsZWFudXAKKworKiBBZGQgc3VwcG9ydCBmb3IgU2lsaWNvbiBUdXJua2V5IGVYcHJlc3MgWFRjIChtcGM4N3gvODh4KSBib2FyZC4KKyAgUGF0Y2ggYnkgRGFuIE1hbGVrIGFuZCBQYW50ZWxpcyBBbnRvbmlvdSwgMTUgQXVnIDIwMDUKKworKiBDaGVjayByZXR1cm4gdmFsdWUgb2YgbWFsbG9jIGluIDQ0MGd4X2VuZXQuYworICBQYXRjaCBieSBUcmF2aXMgQi4gU2F3eWVyLCAxOCBKdWwgMjAwNQorCisqIEFkZCBTYW5kYnVyc3QgTWV0cm9ib3ggYW5kIFNhbmRidXJzdCBLYXJlZiBib2FyZCBzdXBwb3J0IHBhY2thZ2VzLgorICBTZWNvbmQgc2VyaWFsIHBvcnQgb24gNDQwR1ggbm93IGRlZmluZWQgYXMgYSBzeXN0ZW0gZGV2aWNlLgorICBBZGQgJ1Nob3J0IEV0Y2gnIGNvZGUgZm9yIENpY2FkYSBQSFkgd2l0aGluIDQ0MGd4X2VuZXQuYworICBQYXRjaCBieSBUcmF2aXMgQi4gU2F3eWVyLCAxMiBKdWwgMjAwNQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjM6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogTWlub3IgY29kZSBjbGVhbnVwCisKKyogQWRkIGZvcmdvdHRlbiBuZXcgZmlscyBmcm9tIGxhdGVzdCBWb2ljZUJsdWUgdXBkYXRlCisKKyogTWFrZSBib290cmV0cnkgZmVhdHVyZSB3b3JrIHdpdGggaHVzaCBzaGVsbC4KKyAgQ2F2ZWF0OiB0aGlzIGN1cnJlbnRseSAqcmVxdWlyZXMqIENPTkZJR19SRVNFVF9UT19SRVRSWSB0byBiZSBzZXQsIHRvby4KKyAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTkgSnVsIDIwMDUKKworKiBVcGRhdGUgSHltb2QgQm9hcmQgRGF0YWJhc2UgUEhQIGNvZGUgaW4gInRvb2xzIiBkaXJlY3RvcnkKKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDEgSnVsIDIwMDUKKworKiBNYWtlICJ0ciIgY29tbWFuZCB1c2UgUE9TSVggY29tcGxpYW50OyBleHBvcnQgSE9TVE9TIG1ha2UgdmFyaWFibGUKKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKKworKiBGaXggTXVycmF5IEplbnNlbidzIG1haWwgYWRkcmVzcy4KKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKKworKiBQcmVzZXJ2ZSBQSFlfQk1DUiBkdXJpbmcgYSBzb2Z0IHJlc2V0LgorICBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAyNCBKdW4gMjAwNQorCisqIFZvaWNlQmx1ZSB1cGRhdGU6IGVlcHJvbSB0b29sIGNhbiBhbHNvIHN0b3JlIGZpcm13YXJlIHZlcnNpb24gbm93LgorICBlZXByb20uYmluIGlzIHJ1bmFibGUgYnkganVtcGluZyBhdCBsb2FkIGFkZHJlc3MuCisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyMyBNYXkgMjAwNQorCisqIE1vdmUgdGhlIEFUOTFSTTkyMDBESyB0byB0aGUgQVJNIFN5c3RlbXMgbGlzdC4KKyAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjYgQXByIDIwMDUKKworKiBFbGltaW5hdGUgY2FsbHMgb2YgQVJNIGxpYmdjYy5hIGhlbHBlciBmdW5jdGlvbnMgX2RpdnNpMyBhbmQgX21vZHNpMworICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyNiBBcHIgMjAwNQorCisqIG1lYXN1cmVfZ2NsaygpIGlzIG5lZWRlZCB3aGVuIERFQlVHIGlzIGVuYWJsZWQKKyAgUGF0Y2ggYnkgQnJ5YW4gTydEb25vZ2h1ZSwgMjUgQXByIDIwMDUKKworKiBBZGQgVVBELUNoZWNrc3VtIGNvZGUsIGZpeCBwcm9ibGVtIGluIG5ldC5jIChyZXR1cm4gaW5zdGVhZCBvZiBicmVhaykKKyAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMTIgQXVnIDIwMDUKKworKiBlc2QgUENJNDA1IGJvYXJkIHVwZGF0ZWQKKyAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEp1bCAyMDA1CisKKyogZXNkIFdVSDQwNSBhbmQgRFU0MDUgYm9hcmQgdXBkYXRlZAorICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjcgSnVsIDIwMDUKKworKiBGaXggcHJvYmxlbSBpbiBjbWRfbmFuZC5jIChvbmx5IHdoZW4gZGVmaW5lZCBDRkdfTkFORF9TS0lQX0JBRF9ET1RfSSkKKyAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDQgTWF5IDIwMDUKKworKiBVcGRhdGUgQU1DQyBZb3NlbWl0ZSB0byBnZXQgYSBjb25zaXN0ZW50IHNldHVwIGZvciBhbGwgQU1DQyBldmFsCisgIGJvYXJkcyAoYmF1ZHJhdGUsIGVudmlyb25tZW50Li4uKS4gRmxhc2ggZHJpdmVyIGZpeGVkLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CisKKyogQ2hhbmdlZCBBTUNDIEJ1YmluZ2EgKDQwNUVQKSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQgMm5kIGV0aCBwb3J0CisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKKworKiBBZGQgTkFORCBGTEFTSCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbyA0NDBFUCBldmFsIGJvYXJkCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKKworKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgSUZNIEFFViBGSUZPIGJvYXJkLgorICBNaW5vciBjb2Rpbmcgc3R5bGUgY2xlYW51cC4KKworKiBBZGQgY29uZmlndXJhdGlvbiBmb3IgSUZNIFNQSSBldmFsIGJvYXJkCisKKyogRml4IENvbXBhY3RGbGFzaCBwcm9ibGVtIG9uIEhNSTEwMDEgYm9hcmQKKworKiBNYWtlIG5ldyAibXRkcGFydHMiIGNvZGUgYnVpbGQgd2l0aCBvbGRlciBjb21waWxlcnMKKyAgUGF0Y2ggYnkgQW5kcmVhIFNjaWFuLCAwOSBBdWcgMjAwNQorCisqIENoYW5nZWQgQ09ORklHXzQ0MF9HWCwgQ09ORklHXzQ0MF9FUCBhbmQgQ09ORklHXzQ0MF9HUiBvcHRpb25zIHRvCisgIENPTkZJR180NEdYLCBDT05GSUdfNDQwRVAgYW5kIENPTkZJR180NDBHUiBmb3IgYSBjb25zaXN0ZW50IGRlc2lnbgorICB3aXRoIHRoZSA0MDUgZGVmaW5lcyBhbmQgdGhlIGxpbnV4IGtlcm5lbCBkZWZpbmVzLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA4IEF1ZyAyMDA1CisKKyogRml4IGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggb2xkZXIgR0NDIHZlcnNpb25zCisKKyogQWRkIGNvbW1vbiAod2l0aCBMaW51eCkgTVREIHBhcnRpdGlvbiBzY2hlbWUgYW5kICJtdGRwYXJ0cyIgY29tbWFuZAorCisgIE9sZCwgb2Jzb2xldGUgYW5kIGR1cGxpY2F0ZWQgY29kZSB3YXMgY2xlYW5lZCB1cCBhbmQgcmVwbGFjZSBieSB0aGUKKyAgbmV3IHBhcnRpdGlvbmluZyBtZXRob2QuIFRoZXJlIGFyZSB0d28gcG9zc2libGUgYXBwcm9hY2hlcyBub3c6CisKKyAgVGhlIGZpcnN0IG9uZSBpcyB0byBkZWZpbmUgYSBzaW5nbGUsIHN0YXRpYyBwYXJ0aXRpb246CisKKyAgI3VuZGVmIENPTkZJR19KRkZTMl9DTURMSU5FCisgICNkZWZpbmUgQ09ORklHX0pGRlMyX0RFVgkJICJub3IwIgorICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJIDB4RkZGRkZGRkYJLyogdXNlIHdob2xlIGRldmljZSAqLworICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX1NJWkUJIDB4MDAxMDAwMDAJLyogdXNlIDFNQiAqLworICAjZGVmaW5lIENPTkZJR19KRkZTMl9QQVJUX09GRlNFVAkgMHgwMDAwMDAwMAorCisgIFRoZSBzZWNvbmQgbWV0aG9kIHVzZXMgdGhlIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kIGR5bmFtaWMKKyAgcGFydGl0aW9uaW5nOgorCisgIC8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisgICNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyAgI2RlZmluZSBNVERJRFNfREVGQVVMVAkgIm5vcjE9enVtYS0xLG5vcjI9enVtYS0yIgorICAjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJICJtdGRwYXJ0cz16dW1hLTE6LShqZmZzMiksenVtYS0yOi0odXNlcikiCisKKyAgQ29tbWFuZCBsaW5lIG9mIGNvdXJzZSBwcm9kdWNlcyBiaWdnZXIgaW1hZ2VzLCBhbmQgbWF5IGJlIGluYXBwcm9wcmlhdGUKKyAgZm9yIHNvbWUgdGFyZ2V0cywgc28gYnkgZGVmYXVsdCBpdCdzIG9mZi4KKworKiBGaXggYnVpbGQgcHJvYmxlbXMgZm9yIFBNODU2IEJvYXJkCisKKyogRml4IHNpZ24gZXh0ZW5zaW9uIGJ1ZyBpbiAnZnBnYSBsb2FkYicgY29tbWFuZDsKKyAgbWFrZSAnZnBnYSBsb2FkYicgYWx3YXlzIHByaW50IHRoZSBmaWxlIGhlYWRlciBpbmZvCisgIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMSBKYW4gMjAwNQorCisqIEZpeCBlcnJvcnMgdGhhdCBvY2N1ciB3aGVuIGFjY2Vzc2luZyBTeXN0ZW1BQ0UgQ0YKKyAgUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDA5IEphbiAyMDA1CisKKyogRG9jdW1lbnQgc3dpdGNoaW5nIGJldHdlZW4gVS1Cb290IGFuZCBQbGFuZXRDb3JlIG9uIFJQWGxpdGUKKyAgYnkgU2FtIFNvbmcsIDI0IERlYyAyMDA0CisKKyogRml4IFBvd2VyUVVJQ0MgSUkgbWFzayBkZXRlY3Rpb24uCisgIFBhdGNoIGJ5IEV1Z2VuZSBTdXJvdmVnaW4sIDIwIERlYyAyMDA0CisKKyogQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOSU9TIERLMUMyMCBib2FyZAorICBQYXRjaCBieSBTaGxvbW8gS3V0LCAxMyBEZWMgMjAwNAorCisqIEFkZCBzdXBwb3J0IGZvciBlcDgyNDggYm9hcmQKKyAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTIgRGVjIDIwMDQKKworICBNaW5vciBjb2RlIGNsZWFudXAuCisKKyogRml4IGJhdWRyYXRlIHNldHRpbmcgZm9yIEtHREIgb24gTVBDODI2MAorICBQYXRjaCBieSBIb0ppbiwgMTEgRGVjIDIwMDQKKworKiBGaXggJ21paSBoZWxwJyB0ZXh0IGZvcm1hdHRpbmcKKyAgUGF0Y2ggYnkgQ29yeSBUdXNhciwgMTAgRGVjIDIwMDQKKworKiBGaXggcmV0dXJuIGNvZGUgb2YgTkZTIGNvbW1hbmQKKyAgUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDExIERlYyAyMDA0CisKKyogRml4IHR5cG8KKworKiBGaXggY29tcGlsZXIgd2FybmluZ3MgaW4gY3B1L3BwYzR4eC91c2JkZXYuYworICBQYXRjaCBieSBTdGV2ZW4gQmxha2VzbGVlLCAwNCBBdWcgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBBTUNDIEJhbWJvbyBQUEM0NDBFUCBldmFsIGJvYXJkCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDQgQXVnIDIwMDUKKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIKKyAgRml4IHN0eWxlIGlzc3VlcyBwcmltYXJpbHkgaW4gODV4eCBhbmQgODN4eCBib2FyZHMuCisgICAgLSBDKysgY29tbWVudHMKKyAgICAtIFRyYWlsaW5nIHdoaXRlIHNwYWNlCisgICAgLSBJbmRlbnRhdGlvbiBub3QgYnkgVEFCCisgICAgLSBFeGNlc3NpdmUgYW1vdW50IG9mIGVtcHR5IGxpbmVzCisgICAgLSBUcmFpbGluZyBlbXB0eSBsaW5lcworCisqIFBhdGNoIGJ5IFJvbiBBbGRlciwgMTEgSnVsIDIwMDUKKyAgICBBZGQgWGlhbmdodWEgWGlhbyBhbmQgTHVuc2hlbmcgV2FuZydzIHN1cHBvcnQgZm9yIHRoZQorICAgIEdEQSBNUEM4NTQwIEVWQUwgYm9hcmQuCisKKyogUGF0Y2ggYnkgRXJhbiBMaWJlcnR5CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzgzNDlBRFMgYm9hcmQuCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAyNSBKdWwgMjAwNQorICBNb3ZlIHRoZSBUU0VDIGRyaXZlciBvdXQgb2YgY3B1L21wYzg1eHggYXMgaXQgd2lsbCBiZSBzaGFyZWQKKyAgYnkgdGhlIHVwY29taW5nIG1wYzgzeHggZmFtaWx5IGFzIHdlbGwuCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwNSBNYXkgMjAwNQorICBJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBNUEM4NTQ4Q0RTIGJvYXJkLgorICBBZGRlZCBERFIgSUkgc3VwcG9ydCBiYXNlZCBvbiBTUEQgdmFsdWVzIGZvciBNUEM4NXh4IGJvYXJkcy4KKyAgVGhpcyByb2xsLXVwIHBhdGNoIGFsc28gaW5jbHVkZXMgYnVnZmllcyBmb3IgdGhlIHByZXZpb3VzbHkKKyAgcHVibGlzaGVkIHBhdGNoZXM6CisgICAgRERSSUkgQ1BPLCBwcmUgZVRTRUMsIDg1NDggTEJJVSwgQW5keSdzIFRTRUMsIGVUU0VDIDMmNCBJL08KKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDEwIEZlYiAyMDA1CisgIEFkZCBjb25maWcgb3B0aW9uIENPTkZJR19IQVNfRkVDIGNhbGxpbmcgb3V0IDg1NDAgRkVDIGZlYXR1cmVzLgorCisqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSwgMDggRmViIDIwMDUKKyAgRm9yIE1QQzg1eHhDRFM6CisgICAgQWRkcyBSZWxheGVkIFRpbWluZyBUUkxYIGJpdCB0byBGTEFTSCBPUnggcmVncyB0byBhbGxvdworICAgIGZvciBmYXN0ZXIgZmxhc2ggcGFydHMuCisgICAgQWRkIGRvY3VtZW50YXRpb24gZm9yIEJSL09SIGZvciBGTEFTSC4KKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIgMDggRmViIDIwMDUKKyAgRGV0ZXJtaW5lIEwyIENhY2hlIHNpemUgZHluYW1pY2FsbHkgb24gODVYWCBib2FyZHMuCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCBLdW1hciBHYWxhIDA4IEZlYiAyMDA1CisgIC0gQ29udmVydCB0aGUgQ1BNMiBiYXNlZCBmdW5jdGlvbmFsaXR5IHRvIHVzZSBuZXcgQ09ORklHX0NQTTIKKyAgICBvcHRpb24gcmF0aGVyIHRoYW4gYSBteXJpYWQgb2YgQ09ORklHX01QQzg1NjAtbGlrZSB2YXJpYW50cy4KKyAgICBBcHBsaWVzIHRvIE1QQzg1eHggYW5kIE1QQzgyNjAgYm9hcmRzLCBpbmNsdWRlcyBzdHhncDMgYW5kIHNiYzg1NjAuCisgICAgRWxpbWluYXRlcyB0aGUgQ09ORklHX01QQzg1NjAgb3B0aW9uIGVudGlyZWx5LiAgRGlzdHJpYnV0ZXMgdGhlCisgICAgbmV3IENPTkZJR19DUE0yIG9wdGlvbiB0byBlYWNoIDgyNjAgYm9hcmQuCisKKyogQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU2IGJvYXJkCisgIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDMgQXVnIDIwMDUKKworKiBNaW5vciBmaXhlcyB0byBQTTg1NCBib2FyZAorICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDAzIEF1ZyAyMDA1CisKKyogQWRqdXN0IGNvbmZpZ3VyYXRpb24gb2YgWEVOSUFYIGJvYXJkCisgIChjaGlwIHNlbGVjdCBhbmQgR1BJTyByZXF1aXJlZCBmb3IgVVNCIG9wZXJhdGlvbikKKworKiBGaXggdHlwb3MgaW4gY3B1Lzg1eHgvc3RhcnQuUyB3aGljaCBjYXVzZWQgRGF0YVRMQiBleGNlcHRpb24gdG8gYmUKKyAgcm91dGVkIHRvIHRoZSBXYXRjaGRvZyBoYW5kbGVyCisgIFBhdGNoIGJ5IEV1Z2VuZSBTdXJvdmVnaW4sIDE4IEp1biAyMDA1CisKKyogKHJlKWVuYWJsZWQgc2NzaSBjb21tYW5kcyBkb19zY3NpKCkgYW5kIGRvX3Njc2lib290KCkKKyAgUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA2IERlYyAyMDA0CisKKyogRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIFRGVFAgLyBORlMgZGVmYXVsdCBmaWxlbmFtZXMKKyAgUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDA2IERlYyAyMDA0CisKKyogSWdub3JlIGJyb2FkY2FzdCBzdGF0dXMgYml0IGluIHJlY2VpdmVkIGZyYW1lcyBpbiA4MjYwIEZDQyBldGhlcm5ldAorICBsb29wYmFjayB0ZXN0IGNvZGUKKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTggSnVsIDIwMDUKKworKiBGaXggdHlwbyBpbiBta2NvbmZpZyBzY3JpcHQgKHVzZWQgPT0gaW5zdGVhZCBvZiA9KQorICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOCBKdWwgMjAwNQorCisqIENsZWFudXAgYnVpbGQgcHJvYmxlbXMgb24gNjQgYml0IGJ1aWxkIGhvc3RzCisKKyogVXBkYXRlIE1BSU5UQUlORVJTIGZpbGUKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIEF1ZyAyMDA1OgorICAtIE1ham9yIGNsZWFudXAgZm9yIEFNQ0MgZXZhbCBib2FyZHMgV2FsbnV0LCBCdWJpbmdhLCBFYm9ueSwgT2NvdGVhCisgICAgKGZvcm1lciBJQk0gZXZhbCBib2FyZCkuIFBsZWFzZSBzZWUgImRvYy9SRUFETUUuQU1DQy1ldmFsLWJvYXJkcy1jbGVhbnVwIgorICAgIGZvciBkZXRhaWxzLgorICAtIFN5Y2Ftb3JlIChQUEM0MDVHUHIpIGV2YWwgYm9hcmQgYWRkZWQgKFdhbG51dCBwb3J0IGlzIGV4dGVuZGVkCisgICAgdG8gcnVuIG9uIGJvdGggNDA1R1AgYW5kIDQwNUdQciBldmFsIGJvYXJkcykuCisKKyogUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMjcgSnVsIDIwMDU6CisgIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgUFBDNDQwRVAvR1IuCisgIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgWW9zZW1pdGUgUFBDNDQwRVAgZXZhbCBib2FyZC4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBZZWxsb3dzdG9uZSBQUEM0NDBHUiBldmFsIGJvYXJkLgorCisqIE1pbm9yIGZpeGVzIGZvciBQUENoYW1lbGVvbiBCb2FyZDoKKyAgLSBmaXggYWxpZ25tZW50IG9mIE5BTkQgc2l6ZQorICAtIG1ha2UgY29kZSBkbyB3aGF0IHRoZSBjb21tZW50IHNheXMKKworKiBJbXBsZW1lbnQgaC93IHNlY3RvciBwcm90ZWN0aW9uIHN0YXR1cyBzeW5jaHJvbml6YXRpb24gYXQgYm9vdC4KKyAgVGhlIGNvZGUgaXMgcHJvdmlkZWQgZm9yLCBhbmQgd2FzIHRlc3RlZCBvbiwgdGhlIFl1a29uL0FsYXNrYQorICBhbmQgUE01MjAgYm9hcmRzIG9ubHkuCisKKyAgQSBidWcgaW4gZmxhc2hfcmVhbF9wcm90ZWN0KCkgZm9yIHRoZSBZdWtvbiBib2FyZCB3YXMgZml4ZWQgYnkKKyAgYWRkaW5nIGEgZnVuY3Rpb24gdGhhdCB0ZWxscyBpZiB0d28gYmFua3MgYXJlIG9uIG9uZSBmbGFzaCBjaGlwLgorCisqIEZpeCBzeXNtb24gUE9TVCBwcm9ibGVtOiBjaGVjayBJMkMgZXJyb3IgY29kZXMKKyAgVGhpcyBmaXhlcyBhIHByb2JsZW0gb2YgZGlzcGxheWluZyBib2d1cyB2b2x0YWdlcyB3aGVuIHRoZSB2b2x0YWdlcworICBhcmUgc28gbG93IHRoYXQgdGhlIEkyQyBkZXZpY2VzIHN0YXJ0IGZhaWxpbmcgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlCisgIHN5c3RlbSBrZWVwcyBydW5uaW5nLgorCisqIFBhdGNoIGJ5IENlZHJpYyBWaW5jZW50LCA2IEp1bCAyMDA1OgorICBGaXggQ0ZHX0NNRF9TRVRHRVREQ1IgaGFuZGxpbmcgaW4gImNvbW1vbi9jbWRfZGNyLmMiCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAyMCBKdWwgMjAwNToKKyAgQWRkIG1pc3NpbmcgUENJIElPIHBvcnQgZGVmaW5pdGlvbnMuCisKKyogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgorCisqIEFkanVzdCBwcmludGVkIGJvYXJkIElEIGZvciBMV01PTiBib2FyZC4KKworKiBGaXggbG93LWxldmVsIE9IQ0kgdHJhbnNmZXJzIGZvciBBUk05MjB0IGFuZCBNUEM1eHh4CisKKyogQWRkIG5ldyBhcmd1bWVudCBmb3JtYXQgZm9yIGZsYXNoIGNvbW1hbmRzIHRvIGFsbG93IGZvciB1c2FnZSBsaWtlCisgICJlcmFzZSAkKGFkZHIpICskKGZpbGVzaXplKSIsIGkuIGUuIGEgc2l6ZSBhcmd1bWVudCBjYW4gYmUgdXNlZCBhbmQKKyAgVS1Cb290IHdpbGwgYXV0b21hdGljaWFsbHkgZmluZCB0aGUgZW5kIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlY3Rvci4KKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDUgSnVsIDIwMDU6CisgIFVwZGF0ZSB1YzEwMCBib2FyZCBQSFkgc2V0dXAKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEgSnVsIDIwMDU6CisgIEZpeCBQSFkgYWRkcmVzcyBmb3IgQ0FUY2VudGVyIGJvYXJkIChub3cgY29ycmVjdCEpCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBKdW4gMjAwNToKKyAgRml4IFBIWSBhZGRyZXNzZXMgZm9yIFBQQ2hhbWVsZW9uIGFuZCBDQVRjZW50ZXIgYm9hcmRzCisgIENoYW5nZSBNQUlOVEFJTkVSIGZvciBtb3N0IGVzZCBib2FyZHMKKworKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAzMCBKdW4gMjAwNToKKyAgRml4IExDRCBsb2dvIGZvciBsd21vbiBib2FyZCB3aGljaCBnb3QgbG9zdCBpbiB0aGUgbWVyZ2Ugb2YgOHh4IGFuZCBQWEEgTENEIGNvZGUKKworKiBGaXggYmF1ZHJhdGUgY2FsY3VsYXRpb24gcHJvYmxlbSBvbiBNUEM1MjAwIHN5c3RlbXMKKworKiBBZGQgRUVQUk9NIGFuZCBSVEMgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZAorCisqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIwIEp1biAyMDA1OgorICBGaXggaW5pdGlhbGl6YXRpb24gb2YgbG93IGFjdGl2ZSBHUElPIHBpbnMgb24gaW5rYTR4MCBib2FyZAorCisqIEVuYWJsZSByZWR1bmRhbnQgZW52aXJvbm1lbnQsIGRpc2FibGUgSFcgZmxhc2ggcHJvdGVjdGlvbiBvZgorICBITUkxMDAxIGJvYXJkCisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTAgSnVuIDIwMDU6CisgIEluaXRpYWxpemUgYWxsb2NhdGVkIGRldiBhbmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVzCisgIGFmdGVyIHRoZWlyIHJlc3BlY3RpdmUgYWxsb2NhdGlvbiBpbiA0NDBneF9lbmV0LmMKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBKdW4gMjAwNToKKyAgRml4IGJ5dGVvcmRlciBwcm9ibGVtcyB3aXRoIHNlY29uZCBhcmd1bWVudCBvZiAiYm9vdG0iIHdpdGgKKyAgc3RhbmRhbG9uZSBpbWFnZXM7CisKKyogQWRkIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKKworKiBEaXNhYmxlICJkYXRlIiBhbmQgInNudHAiIGNvbW1hbmRzIG9uIFRRTTg2Nk0KKworKiBGaXggd2F0Y2hkb2cgcmVzZXQgcHJvYmxlbXMgb24gTFdNT04gYm9hcmQKKworKiBQYXRjaCBieSBKdWVyZ2VuIFNlbGVudCwgMTcgTWF5IDIwMDU6CisgIEFkZCBzdXBwb3J0IGZvciBGdW5rd2VyayBWb1ZQTiBnYXRld2F5IG1vZHVsZS4KKworKiBDbGVhbnVwIGRlYnVnIGNvZGUgZm9yIE1QQzgyMjAgRkVDIGRyaXZlcgorCisqIEV4dGVuZCBidXJzdCBtb2RlIFJBTSB0ZXN0IHByb2dyYW0gdG8gdGFrZSBhIGxvb3AgY291bnQKKyAgKDAgPSBpbmZpbml0ZSkKKworKiBVc2UgQ09ORklHX0RSSVZFUl9LUzg2OTVFVEggdG8gZW5hYmxlIEtTODY5NSBldGhlcm5ldCBkcml2ZXIgb24KKyAgdGhvc2UgYm9hcmRzIHRoYXQgdXNlIGl0LgorCisqIFBhdGNoZXMgYnkgR3JlZyBVbmdlcmVyLCAxOSBNYXkgMjAwNToKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEtTODY5NVAgKEFSTSA5MjIgYmFzZWQpIENQVQorICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgT3BlbkdlYXIgQ000MDA4LCBDTTQxMTYgYW5kIENNNDE0OCBib2FyZHMKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOSBNYXkgMjAwNToKKyAgQWRkIHN1cHBvcnQgZm9yIENPTkZJR19TRVJJQUxfVEFHIG9uIEFSTSBib2FyZHMKKworKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNvcmNlcnkgYm9hcmQuCisgIENvZGUgY2xlYW51cCAoZXNwZWNpYWxseSBTb3JjZXJ5IC8gQWxhc2thIC8gWXVrb24gc2VyaWFsIGRyaXZlcikuCisKKyogRml4IGNvbXBpbGUgcHJvYmxlbXMgY2F1c2VkIGJ5IG5ldyBidXJzdCBtb2RlIFNEUkFNIHRlc3Q7CisgIG1ha2UgcG9ydCBwaW5zIHRvIHRyaWdnZXIgbG9naWMgYW5hbHl6ZXIgY29uZmlndXJhYmxlCisKKyogRml4IHRpbWVyIGhhbmRsaW5nIG9uIE1QQzg1eHggc3lzdGVtcworCisqIEZpeCBkZWJ1ZyBjb2RlIGluIG9tYXA1OTEyb3NrIGZsYXNoIGRyaXZlcgorCisqIEFkZCBzdXBwb3J0IGZvciBNUEM4MjQ3IGJhc2VkICJJRFM4MjQ3IiBib2FyZC4KKworKiBBZGQgc3VwcG9ydCBmb3IgMiB4IFRTRUMgaW50ZXJmYWNlcyBvbiB0aGUgVFFNODU0MCBib2FyZC4KKworKiBPbiBMV01PTiB3ZSBtdXN0IHVzZSB0aGUgd2F0Y2hkb2cgdG8gcmVzZXQgdGhlIGJvYXJkIGFzIHRoZSBDUFUKKyAgZ2VuZXJlYXRlZCBIUkVTRVQgcHVsc2UgaXMgdG9vIHNob3J0IHRvIHJlc2V0IHRoZSBleHRlcm5hbAorICBjaXJjdWl0cnkuCisKKyogQWRkIHRlc3QgdG9vbCB0byBleGVyY2lzZSBTRFJBTSBhY2Nlc3NlcyBpbiBidXJzdCBtb2RlCisgIChhcyBzdGFuZGFsb25lIHByb2dyYW0sIE1QQzh4eC9Qb3dlclBDIG9ubHkpCisKKyogSW5jcmVhc2UgQ0ZHX01PTklUT1JfTEVOIGZvciBSYXR0bGVyIGJvYXJkIHRvIG1hdGNoIGFjdHVhbCBjb2RlCisgIHNpemUuCisKKyogTWFqb3IgdXBhdGUgb2YgSkZGUzIgY29kZTsgbm93IGluIHN5bmMgd2l0aCBzbmFwc2hvdCBvZiBNVEQgQ1ZTIG9mCisgIE1hcmNoIDEzLCAyMDA1KTsgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uIENPTkZJR19KRkZTMl9MWk9fTFpBUkkKKyAgYWRkZWQgdG8gc3VwcG9ydCBMWk8gYW5kIExaQVJJIGNvbXByZXNzaW9uIG1vZGVzICh1bmRlZmluZWQgYnkKKyAgZGVmYXVsdCkuCisKKyogRml4IHByb2JsZW0gd2l0aCBzeW1ib2xpYyBsaW5rcyBpbiBKRkZTMiBjb2RlLgorCisqIFVzZSBsaW5rZXIgQVNTRVJUIHN0YXRlbWVudCB0byBwcmV2ZW50IHVuZGV0ZWN0ZWQgb3ZlcmxhcHBpbmcgb2YKKyAgc2VjdGlvbnMgb24gUFBDaGFtZWxlb24gYm9hcmQ7IG90aGVyIGJvYXJkcyBtaWdodCB1c2UgdGhpcywgdG9vLgorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgTWF5IDIwMDU6CisgIFVwZGF0ZSBmb3IgUDNHNAorICBGaXggcHJvYmxlbXMgaW4gY21kX3VuaXZlcnNlLmMKKworKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDMgTWF5IDIwMDU6CisgIEFkZGVkIG1pc3NpbmcgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gY21kX25hbmQuYworICBNb2RpZmllZCBDRkdfUENJX1BUTTFNUyBpbiBjb25maWdzL1BMVTQwNS5oIHRvIG1hcCAxMjhNQiByYW0KKworKiBGaXggSU5LQTR4MDogdXNlIENTMSBhcyBncGlvX3drdXBfNiBvdXRwdXQKKworKiBGaXggYnVnIGluIHRoZSBTRFJBTSBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBjYW5tYiwgSWNlQ3ViZSBhbmQKKyAgUE01MjAgYm9hcmRzLgorICBGaXggUEhZIGFkZHJlc3MgZm9yIGNhbm1iIGJvYXJkLgorCisqIENsZWFudXAgc2VyaWFsIGNvbnNvbGUgYmF1ZHJhdGUgY2FsY3VsYXRpb24gb24gQVQ5MVJNOTIwMDsKKyAgZ2V0IHJpZCBvZiBvYnNvbGV0ZSBDRkdfQVQ5MUNfQlJHUl9ESVZJU09SIGRlZmluaXRpb24KKworKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMTggQXByIDIwMDU6CisgIE1ha2UgUENJIHRhcmdldCBhZGRyZXNzIHNwYWNlcyBvbiBQTUM0MDUgYW5kIENQQ0k0MDUgYm9hcmRzCisgIGNvbmZpZ3VyYWJsZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKKyogQXV0by1zaXplIFJBTSBvbiBjYW5tYiBib2FyZC4KKworKiBBZGQgc3VwcG9ydCBmb3IgY2FubWIgYm9hcmQKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEFwciAyMDA1OgorICBVcGRhdGUgZm9yIGVzZCBhcGM0MDUKKworKiBGaXhlcyBmb3IgVFFNODU2MCBib2FyZDoKKyAgLSBmaXggY2xvY2sgcmF0ZXMKKyAgLSByZW1vdmUgZGVidWcgbWVzc2FnZXMKKyAgLSBmaXggZmxhc2ggc2VjdG9yIHByb3RlY3Rpb24KKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNyBBcHIgMjAwNToKKyAgQWRkIGkyY19yZWdfd3JpdGUoKSBhbmQgaTJjX3JlZ193cml0ZSgpIGZvciBhdDkxcm05MjAwIEkyQworCisqIFBhdGNoZXMgYnkgU3RldmVuIFNjaG9seiwgMDcgQXByIDIwMDU6CisgIEZpeCBjb21waWxlciB3YXJuaW5nIGluIGFsdGVyYS5jCisgIEZpeCB3YXJuaW5nIGluIGNwdS9hcm05MjB0L2F0OTFybTkyMDAvaTJjLmMKKworKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDYgQXByIDIwMDU6CisgIEZpeCB2b2ljZWJsdWUgY29uZmlndXJhdGlvbi4KKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA2IEFwciAyMDA1OgorICBVcGRhdGVzIGZvciBPQ09URUEgYm9hcmQ6CisgIC0gQ2hhbmdlZCBVLUJvb3Qgc2l6ZSBmcm9tIDUxMmtCeXRlIHRvIDI1NmtCeXRlCisgIC0gRml4ZWQgZmxhc2ggZHJpdmVyIHRvIHN1cHBvcnQgYm9vdCBmcm9tIHNvbGRlcmVkIHVzZXIgZmxhc2gKKyAgLSBBZGRlZCBSRUFETUUgZm9yIHN3aXRjaCBmcm9tIFBJQlMgZmlybXdhcmUgdG8gVS1Cb290CisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDUgQXByIDIwMDU6CisgIC0gQ2hhbmdlIHRpbWVyIGZyZXF1ZW5jeSBmb3IgcHBjIDQ0MCBmcm9tIDEwIG1zIHRvIDEgbXMuCisgICAgUHJvYmxlbSBmb3VuZCBieSBBbmRyZXcgV296bmlhay4KKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNiBBcHIgMjAwNToKKyAgLSBjcmVhdGluZyBTb0Mgc3ViZGlyIGZvciBBdG1lbCBBVDkxUk05MjAwIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKKyAgLSBtb3ZpbmcgY29kZSBvdXQgb2YgY3B1L2F0OTFybTkyMDAgaW50byBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCisKKyogUGF0Y2hlcyBieSBSb2JlcnQgV2hhbGV5LCAyOSBOb3YgMjAwNDoKKyAgLSB1cGRhdGUgdGhlIHB4YS1yZWdzLmggZmlsZSBmb3IgUFhBMjd4IGNoaXBzCisgIC0gYWRkIFBYQTI3eCBiYXNlZCBBRFNWSVggYm9hcmQKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTU1DIG9uIFBYQTI3eCBwcm9jZXNzb3JzCisKKyogUGF0Y2ggYnkgQW5kcmV3IEUuIE1pbGVza2ksIDI4IE5vdiAyMDA0OgorICBGaXggUFBDNHh4IFNQRCBTRFJBTSBkZXRlY3Rpb24gYnVnCisKKyogUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDI2IE5vdiAyMDA0OgorICBGaXggbG9naWMgb2YgInRlc3QgLXoiIGFuZCAidGVzdCAtbiIgY29tbWFuZHMKKworKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDUgQXByIDIwMDU6CisgIEFkZCBzdXBwb3J0IGZvciBWb2ljZUJsdWUgYm9hcmQuCisKKyogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA1IEFwciAyMDA1OgorICBGaXggbmV0Ym9vdF9jb21tb24oKSBwcm90b3R5cGVzLgorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA1IEFwciAyMDA1OgorICBVc2UgaS5NWCB3YXRjaGRvZyB0aW1lciBmb3IgcmVzZXRfY3B1KCkKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNSBBcHIgMjAwNToKKyAgTW92ZSByZXNldF9jcHUoKSBvdXQgb2YgY3B1L2FybTkyMHQvc3RhcnQuUyBpbnRvIHRoZSBTb0Mgc3BlY2lmaWMKKyAgc3ViZGlyZWN0b3JpZXMgY3B1L2FybTkyMHQvaW14LyBhbmQgY3B1L2FybTkyMHQvczNjMjR4MC8KKyAgKG5vdyBpbiBpbnRlcnVwdHMuYykKKworKiBBZGQgc3VwcG9ydCBmb3IgTVBDODIyMCBiYXNlZCAic29yY2VyeSIgYm9hcmQuCisKKyogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NjAgYm9hcmQuCisKKyogQWRkIEZFQyBzdXBwb3J0IGZvciBUUU04NTQwIGJvYXJkLgorICBJbnRlcmZhY2VzIGFyZSBuYW1lZCBhcyBmb2xsb3dzOiAiRU5FVDEiIC0gVFNFQzIsICJFTkVUMiIgLSBGRUMKKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNCBBcHIgMjAwNToKKyAgVXBkYXRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgQ01DX1BVMiBib2FyZC4KKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKKyAgLSByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gQ09ORklHX0lOSVRfQ1JJVElDQUwgZm9yIEFSTSBiYXNlZCBib2FyZHMKKyAgLSBpbnRyb2R1Y2UgdHdvIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW5zdGVhZDoKKyAgICBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGFuZCBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEFwciAyMDA1OgorICBNYWtlIHN1cmUgdGhhdCBNRElPIGNsb2NrIGRvZXMgbm90IGV4Y2VlZCAyLjUgTUh6IG9uIEFUOTEKKworKiBGaXggdGltZXIgY29kZSBmb3IgQVJNIHN5c3RlbXM6IG1ha2Ugc3VyZSB0aGF0IHVkZWxheSgpIGRvZXMgbm90CisgIHJlc2V0IHRpbWVycyBzbyBpdCdzIHNhdmUgdG8gdXNlIHVkZWxheSgpIGluIHRpbWVvdXQgY29kZS4KKworKiBQYXRjaCBieSBNYXRoaWFzIEv8c3RlciwgMjMgTm92IDIwMDQ6CisgIGFkZCB1ZGVsYXkgc3VwcG9ydCBmb3IgdGhlIG1jZjUyODIgY3B1CisKKyogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTYgTm92ZW1iZXIgMjAwNDoKKyAgZml4IGluY29ycmVjdCBvbmJvYXJkIFhpbGlueCBDUExEIGJhc2UgYWRkcmVzcworCisqIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMDggTm92IDIwMDQ6CisgIC0gQWRkIGxvdy1ib290IG9wdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZCAoaWYgbG93Ym9vdCBpcyBzZWxlY3RlZCwKKyAgICB0aGUganVtcGVyIGZvciB0aGUgSFJDVyBzb3VyY2Ugc2hvdWxkIHNlbGVjdCBmbGFzaC4gSWYgbG93Ym9vdCBpcworICAgIG5vdCBzZWxlY3RlZCwgdGhlIGp1bXBlciBmb3IgdGhlIEhSQ1cgc291cmNlIHNob3VsZCBzZWxlY3QgdGhlCisgICAgQkNTUi4KKyAgLSBjaGFuZ2UgZGVmYXVsdCBsb2FkIGJhc2UgYWRkcmVzcyB0byAweDAwNDAwMDAwCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDggTm92IDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBBbmFsb2d1ZSAmIE1pY3JvIFJhdHRsZXIgYm9hcmRzLgorICBUZXN0ZWQgb24gUmF0dGxlcjgyNDguCisKKyogUGF0Y2ggYnkgQW5kcmUgUmVuYXVkLCAwOCBOb3YgMjAwNDoKKyAgRml4IHdhdGNoZG9nIHN1cHBvcnQgaW4gY29tbW9uL2xjZC5jCisKKyogUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDA1IE5vdiAyMDAzOgorICBFbmFibGUgYWxsIDQgUENNQlJXIGJ1ZmZlcnMgZm9yIHRoZSBNUEM4MjQ1IHByb2Nlc3NvciBzaW5jZSB0aGUgQ1BVCisgIGJ1ZyBvbmx5IGFmZmVjdHMgdGhlIFhQQzgyNDUgcHJvY2Vzc29ycworCisqIFBhdGNoZXMgYnkgSm9zZWYgV2FnbmVyLCAyOSBPY3QgMjAwNDoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BVODcgYm9hcmQKKyAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04NTQgYm9hcmQKKworKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAwMiBOb3YgMjAwNDoKKyAgQWRkIDE2LWJpdCBOQU5EIHN1cHBvcnQKKworKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAxIE5vdiAyMDA0OgorICBBZGQgbWlzc2luZyBOSU9TL05JT1MyIHN1cHBvcnQgZm9yICJpbWluZm8iIGNvbW1hbmQKKworKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOSBPY3QgMjAwNDoKKyAgQWRkIG1pc3NpbmcgTklPUy9OSU9TMiBzdXBwb3J0IGZvciAibWtpbWFnZSIgdG9vbC4KKworKiBQYXRjaCBieSBEYXZpZCBBZGFpciwgMjcgT2N0IDIwMDQ6CisgIEFkZCBtaXNzaW5nIDQ0MEdYIFNEUkFNIENvbnRyb2xsZXIgcmVzZXQKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBPY3QgMjAwNDoKKyAgRGVjbGFyZSByZXNldF9jcHUoKSBpbiBpbmNsdWRlL2NvbW1vbi5oIGluc3RlYWQgbG9jYWxseQorCisqIFBhdGNoIGJ5IFl1c2RpIFNhbnRvc28sIDIyIE9jdCAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciBISURERU5fRFJBR09OIGJvYXJkCisgIC0gZml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGRyaXZlci9ydGwxODM5LmMKKworKiBQYXRjaCBieSBBbGxlbiBDdXJ0aXMsIDIxIE9jdCAyMDA0OgorICBzdXBwb3J0IG11bHRpcGxlIHNlcmlhbCBwb3J0cworCisqIFBhdGNoIGJ5IFJpY2hhcmQgS2xpbmdsZXIsIDAzIEFwciAyMDA1OgorICBBZGQgY2FsbCB0byBldGhfaGFsdCgpIGluIG5ldC9uZXQuYyB3aGVuIGNhbGxlZCBmdW5jdGlvbnMgZmFpbAorICBhZnRlciBldGhfaW5pdCgpIGhhcyBiZWVuIGNhbGxlZC4KKworKiBQYXRjaCBieSBTYW0gU29uZywgMyBBcHJpbCAyMDA1OgorICAtIFVwZGF0ZSBSRUFETUUuTmV0Y29uc29sZQorICAtIFVwZGF0ZSBSRUFETUUKKworKiBQcmVwYXJlIGZvciBTb0MgcmV3b3JrIG9mIEFSTSBjb2RlOgorICAtIHJlbmFtZSBDT05GSUdfQk9PVEJJTkZVTkMgaW50byAgQ09ORklHX0lOSVRfQ1JJVElDQUwKKyAgLSByZW5hbWUgbWVtc2V0dXAgaW50byBsb3dsZXZlbF9pbml0IChmdW5jdGlvbiBuYW1lIGFuZCBzb3VyY2UgZmlsZXMpCisgIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAzIEFwciAyMDA1OgorICAtIGNyZWF0ZSBTb0Mgc3BlY2lmaWMgZGlyZWN0b3JpZXMgaW5jbHVkZS9hc20tYXJtL2FyY2gtaW14IGFuZAorICAgIGluY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0eDAKKworKiBGaXggcHJvYmxlbXMgd2l0aCBTTlRQIHN1cHBvcnQ7CisgIGVuYWJsZSBTTlRQIHN1cHBvcnQgaW4gc29tZSBib2FyZHMuCisKKyogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAwMSBBcHIgMjAwNToKKyAgLSBGaXggZmxhc2ggZXJhc2UgdGltZW91dCBvbiBDTUNfUFUyCisgIC0gQWRkIGF1dG9tYXRpYyBIVyBkZXRlY3Rpb24gZm9yIENNQ19QVTIgYW5kIENNQ19CQVNJQworCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIE1hcmNoIDIwMDU6CisgIGZpeCBjYWNoZSBlbmFibGluZyBmb3IgQVQ5MVJNOTIwMAorCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDMwIE1hciAyMDA1OgorICBhZGQgU05UUCBzdXBwb3J0IGFuZCBleHBhbmQgdGltZSBzZXJ2ZXIgYW5kIHRpbWUgb2Zmc2V0IGZpZWxkcyBvZgorICBESENQIHN1cHBvcnQuIFNlZSBkb2MvUkVBRE1FLlNOVFAKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBEZWMgMjAwNDoKKyAgRml4IGJ1ZyBpbiBhdDkxcm05MjAgZXRoZXJuZXQgZHJpdmVyCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgRGVjIDIwMDQ6CisgIFJlbW92ZSBkdXBsaWNhdGVkIGNvZGUgYnkgbWVyZ2luZyBtZW1zZXR1cC5TIGZpbGVzIGZvcgorICBhdDkxcm05MjAwIGJvYXJkcyBpbnRvIG9uZSBjcHUvYXQ5MXJtOTIwMC9sb3dsZXZlbC5TCisKKyogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMzEgTWFyIDIwMDU6CisgIENsZWFudXAgZHVwbGljYXRlIGRlZmluaXRpb24gb2Ygb3ZlcndyaXRlX2NvbnNvbGUoKQorCisqIFVwZGF0ZSBUUU01MjAwIGNvbmZpZ3VyYXRpb247CisgIHByZXBhcmUgZm9yIFJldi4gMjAwIHN0YXJ0ZXIga2l0IGJvYXJkcworCisqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjEgT2N0IDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBOaW9zLUlJIEVQQ1MgQ29udHJvbGxlciBjb3JlLgorCisqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjAgT2N0IDIwMDQ6CisgIE5pb3MtSUkgY2xlYW51cHM6CisgIC0gQWRkIHN5c2lkIGNvbW1hbmQgKE5pb3MtSUkgb25seSkuCisgIC0gTG9jYXRlIGRlZmF1bHQgZXhjZXB0aW9uIHRyYW1wb2xpbmUgYXQgcHJvcGVyIG9mZnNldC4KKyAgLSBJbXBsZW1lbnQgSS9PIHJvdXRpbmVzIChyZWFkYiwgd3JpdGViLCBldGMpCisgIC0gSW1wbGVtZW50IGRvX2Jvb3RtX2xpbnV4CisKKyogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAyMiBNYXIgMjAwNToKKyAgLSB1c2UgVFFNNTIwMF9hdXRvIGFzIE1BS0VBTEwgdGFyZ2V0IGZvciBUUU01MjAwIHN5c3RlbXMKKyAgLSBhZGQgc3VwcG9ydCBmb3IgU001MDEgZ3JhcGhpY3MgY29udHJvbGxlcgorICAtIGFkZCBzdXBwb3J0IGZvciBncmFwaGljIGNvbnNvbGUgb24gVFFNNTIwMAorICAtIGFkZCBzdXBwb3J0IGZvciBUUU01MjAwIFJldiAyMDAKKyAgLSBjbGVhbnVwLCBmaXggdHlwbyBpbiBpbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCisKKyogUGF0Y2ggYnkgTWFuZnJlZCBCYXJhbCwgMTcgTWFyIDIwMDU6CisgIEZpeCB0eXBvCisKKyogRml4IFJUQyBjb25maWd1cmF0aW9uIGZvciBQUENoYW1lbGVvbiBib2FyZAorCisqIENsZWFudXAsIGZpeCB0eXBvIGluIGluY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IE1hciAyMDA1OgorICBVcGRhdGUgZm9yIGVzZCBhdXRvX3VwZGF0ZSBhbmQgaGg0MDUgYm9hcmQKKworKiBBZGFwdCBmb3IgVS1Cb290IGltYWdlIHNpemUgKG5ldyBmZWF0dXJlcyBlbmFibGVkKSBvbiBUUU01MjAwCisKKyogVXBkYXRlIGNvZGUgZm9yIFRRTTg1NDAgYm9hcmQgKGFuZCA4NXh4IGluIGdlbmVyYWwpOgorICAtIENoYW5nZSB0aGUgbmFtZSBvZiB0aGUgRXRoZXJuZXQgZHJpdmVyOiBNT1RPIEVORVQgLT4gRU5FVAorICAtIFJlZm9ybWF0IGJvb3QgbWVzc2FnZXMKKyAgLSBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50CisgIC0gUmVwbGFjZSB0aGUgLU8yIG9wdGltaXphdGlvbiBmbGFnIHdpdGggLW1uby1zdHJpbmcKKworKiBQYXRjaCBieSBEYXZpZCBCcm93bmVsbCwgMTAgTWFyIDIwMDU6CisgIFJlc3RvcmUgY29weXJpZ2h0IHN0YXRlbWVudHMgaW4gT0hDSSBkcml2ZXJzLgorCisqIEFkZCBzdXBwb3J0IGZvciBUUU04NTQwIGJvYXJkCisKKyogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTQgTWFyIDIwMDU6CisgIE5DNjUwOiBjaGFuZ2VkIE5BTkQgZmxhc2ggYWRkcmVzc2luZyB0byB1c2luZyBVUE1CCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNCBNYXIgMjAwNToKKyAgVXBkYXRlIGZvciBlc2Qgdm9oNDA1IGZwZ2EgaW1hZ2UKKworKiBJTktBNHgwOiBBbGxvdyBpbml0aWFsaXphdGlvbiBvZiBMQ0QgYmFja2xpZ2h0IGRpbW1pbmcgZnJvbQorICAiYnJpZ2h0bmVzcyIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyogQWRkIHBvcnQgaW5pdGlhbGl6YXRpb24gZm9yIGRpZ2l0YWwgSS9PIG9uIElOS0E0eDAKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIE1hciAyMDA1OgorICBVcGRhdGUgZm9yIGVzZCBib2FyZHMgZHA0MDUgYW5kIGh1YjQwNQorCisqIEZpeCBnZXRfcGFydGl0aW9uX2luZm8oKSBwYXJhbWV0ZXIgZXJyb3IgaW4gYWxsIG90aGVyIGNhbGxzCisgIChjb21tb24vY21kX2lkZS5jLCBjb21tb24vY21kX3JlaXNlci5jLCBjb21tb24vY21kX3Njc2kuYykuCisKKyogRW5hYmxlIFVTQiBhbmQgSURFIHN1cHBvcnQgZm9yIElOS0E0eDAgYm9hcmQKKworKiBQYXRjaCBieSBBbmRyZXcgRHllciwgMjggRmViIDIwMDU6CisgIGZpeCBleHQybG9hZCBwYXNzaW5nIGFuIGluY29ycmVjdCBwb2ludGVyIHRvIGdldF9wYXJ0aXRpb25faW5mbygpCisgIHJlc3VsdGluZyBpbiBsb2FkIGZhaWx1cmUgZm9yIGRldmljZXMgb3RoZXIgdGhhbiAwCisKKyogQWRkIHN1cHBvcnQgZm9yIFNSQU0gYW5kIDIgeCBRdWFkIFVBUlRzIG9uIElOS0E0eDAgYm9hcmQKKworKiBDbGVhbnVwIFVTQiBhbmQgcGFydGl0aW9uIGRlZmluZXMKKworKiBBZGQgc3VwcG9ydCBmb3IgZXh0MiBmaWxlc3lzdGVtcyBhbmQgaW1hZ2UgdGltZXN0YW1wcyB0byBUUU01MjAwIGJvYXJkCisKKyogQWRkIHJlc2V0IGNvZGUgZm9yIENvcmFsLVAgb24gSU5LQTR4MCBib2FyZAorCisqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI4IEp1biAyMDA0OgorICBVcGRhdGUgZm9yIFRSQUIgYm9hcmQuCisKKyogRml4IHNvbWUgbWlzc2luZyAidm9sYXRpbGUicyBpbiBNUEM1eHh4IEZFQyBkcml2ZXIKKworKiBGaXggY2lycnVzIHZvbHRhZ2UgZGV0ZWN0aW9uIChmb3IgQ1BDNDUpCisKKyogRml4IGJ5dGVvcmRlciBwcm9ibGVtIGluIHVzYmJvb3QgYW5kIHNjc2lib290IGNvbW1hbmRzLgorCisqIFBhdGNoIGJ5IENhanVzIEhhaG4sIDA0IEZlYiAyMDA1OgorICAtIGRvbid0IGluc2lzdCBvbiBsZWFkaW5nICcvJyBmb3IgZmlsZW5hbWUgaW4gZXh0MmxvYWQKKyAgLSBzZXQgZGVmYXVsdCBwYXJ0aXRpb24gdG8gdXNlZnVsIHZhbHVlICgxKSBpbiBleHQybG9hZAorCisqIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAwOCBKYW4gMjAwNToKKyAgZml4IHdyb25nIHJldHVybiBjb2RlcyBpbiBleHQyIGNvZGUKKworKiBSZW1vdmVkICctLW5vLXdhcm4tbWlzbWF0Y2gnIG9wdGlvbiBmcm9tIE1ha2VmaWxlLiBUaGlzIG9wdGlvbgorICBtYWtlcyAnbGQnIHRvIG92ZXJsb29rIGJpbmFyeSBvYmplY3RzIGNvbXBhdGliaWxpdHkuCisKKyogTW92ZWQgJChQTEFURk9STV9MSUJTKSBmcm9tIHRoZSBsaWJyYXJ5IGdyb3VwICgtLXN0YXJ0LWdyb3VwIC4uLgorICAtLWVuZC1ncm91cCkgb3V0c2lkZSBvZiB0aGUgZ3JvdXAuIFRoaXMgd2lsbCBtYWtlICdsZCcgdG8gZG8KKyAgX211bHRpcGxlXyBzZWFyY2ggaW4gdGhlIGxpYnJhcnkgZ3JvdXAgd2hlbiByZXNvbHZpbmcgc3ltYm9sCisgIHJlZmVyZW5jZXMgYW5kIGRvIG9ubHkgYSBfc2luZ2xlXyBzZWFjaCBpbiBsaWJnY2MuYSBhZnRlciB0aGUgZ3JvdXAKKyAgc2VhcmNoLgorCisqIEZpeCBzdGFiaWxpdHkgcHJvYmxlbXMgb24gQ1BDNDUgYm9hcmQgYWdhaW4uCisKKyogTWFrZSBpbWFnZSBkZXRlY3Rpb24gZm9yIGRpc2tib290IC8gdXNiYm9vdCAvIHNjc2lib290IG1vcmUgcm9idXN0CisgIChhbHNvIGNoZWNrIGhlYWRlciBjaGVja3N1bSkKKworKiBVcGRhdGUgQ1BDNDUgYm9hcmQgY29uZmlndXJhdGlvbi4KKworKiBBZGQgVVNCIGFuZCBQQ0kgc3VwcG9ydCBmb3IgSU5LQTR4MCBib2FyZAorCisqIEZpeCBJREUgc3RhYmlsaXR5IHByb2JsZW1zIG9uIENQQzQ1IGJvYXJkIChuZWVkcyAyIHggRUlFSU8pLgorCisqIENvZGUgY2xlYW51cAorCisqIFBhdGNoIGJ5IFJvYmluIEdldHosIDEzIE9jdCAyMDA0OgorICBBZGQgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiB0byBjaGFuZ2UgU01DOTFDMTExIE1BQyBhZGRyZXNzZXMsCisgIHNlZSBleGFtcGxlcy9SRUFETUUuc21jOTExMTFfZWVwcm9tCisKKyogUGF0Y2ggYnkgWGlhb2dlbmcgKFNoYXduKSBKaW4sIDEyIE9jdCAyMDA0OgorICBGaXggRmxhc2ggc3VwcG9ydCBmb3IgQVJNIEludGVncmF0b3IgQ1AuCisKKyogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTAgSmFuIDIwMDU6CisgIFVwZGF0ZSBzdXBwb3J0IGZvciBPTUFQMjQyMCAoQVJNMTEpIGFuZCBINCBib2FyZDoKKyAgbyBjbGVhbiB1cCBhbmQgYWRkIG5ldyB0eXBlcyB0byBINCBtZW1vcnkgcHJvYmUgY29kZS4KKyAgbyBmaXggdG8gd29yayB3aXRoIGludGVybmFsIGJvb3QuCisgIG8gYWRkZWQgUFJDTSBjb25maWcgSUlJIG9wZXJhdGlvbi4KKyAgbyBmaXggbWFyZ2luYWwgZmxhc2ggdGltaW5ncy4KKyAgbyBhZGQgcmV2aXNvbiBBVEFHIHVzYWdlLgorICBvIGVuYWJsZSB2b2x0YWdlIHNjYWxpbmcgYXQgcG93ZXIgY2hpcC4KKyAgbyBmaXggY29tcGlsZSBlcnJvciBmb3IgaTJjLgorCisqIEZpeCBuZXR3b3JrIHByb2JsZW0gKGVycm9yIHdoZW4gcmVjZWl2aW5nIG11bHRpcGxlIEFSUCBwYWNrZXRzKQorCisqIFBhdGNoIGJ5IERhbmllbCBQb2lyb3QsIDEyIE9jdCAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlciBzYmM0MDUgYm9hcmQKKworKiBQYXRjaCBieSBSYWluZXIgQnJlc3RhbiwgMTIgT2N0IDIwMDQ6CisgIE1ha2UgZXhhbXBsZXMvTWFrZWZpbGUgbW9yZSByb2J1c3QKKworKiBQYXRjaCBieSBTYW0gU29uZywgMTEgT2N0b2JlciAyMDA0OgorICAtIEFkZCBSRVNFVC9QUkVCT09UL0FVVE9CT09UIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQKKyAgLSBBZGp1c3QgQ1BVOkJVUyBmcmVxdWVuY3kgcmF0aW8gMToxIHdoZW4gY29yZSBmcmVxdWVuY3kKKyAgICBsZXNzIHRoYW4gNTBNSHoKKworKiBQYXRjaCBieSBTYW0gU29uZywgMTAgT2N0IDIwMDQ6CisgIEZpeCBhIHBhcmFtZXRlciBlcnJvciBpbiBydW5fY29tbWFuZCgpIGluIG1haW4uYworCisqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDAxIE9jdCAyMDA0OgorICBhZGQgc3VwcG9ydCBmb3IgdGhlIFRJIE9NQVAyNDIwIHByb2Nlc3NvciBhbmQgaXRzIEg0IHJlZmVyZW5jZQorICBib2FyZAorCisqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsZWdyaW4sIDI0IFNlcCAyMDA0OgorICBBZGRlZCBzdXBwb3J0IGZvciBORTIwMDAgY29tcGF0aWJsZSAoRFA4MzkwLCBEUDgzOTAyKSBOSUNzLgorCisqIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDIzIFNlcCAyMDA0OgorICBhZGQgc3VwcG9ydCBmb3IgdGhlIEFNRCBkYjE1NTAgYm9hcmQKKworKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBTZXAgMjAwNDoKKyAgQWRkIENPTkZJR19TRVJJQUxfTVVMVEkgc3VwcG9ydCBmb3IgcHBjNHh4LAorICB1cGRhdGUgUkVBRE1FLnNlcmlhbF9tdWx0aQorCisqIFBhdGNoZXMgYnkgRGF2aWQgU25vd2RvbiwgMDcgU2VwIDIwMDQ6CisgIC0gYWRkIHUtYm9vdC5oZXggdGFyZ2V0IGluIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFVOU1cvTklDVEEgUExFQiAyIGJvYXJkIChwbGViMikKKyAgLSB1c2UgLW10dW5lPXhzY2FsZSBhbmQgLW1hcmNoPWFybXY1IG9wdGlvbnMgZm9yIFBYQQorCisqIFBhdGNoIGJ5IEZsb3JpYW4gU2NobG90ZSwgMDggU2VwIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBTZW5UZWMtQ09CUkE1MjcyLWJvYXJkIChDb2xkRmlyZSkuCisKKyogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAwNyBTZXAgMjAwNDoKKyAgbXBjODI0eDogc2V0IFBDSSBsYXRlbmN5IHRpbWVyIHRvIGEgc2FuZSB2YWx1ZQorICAoaXMgMCBhZnRlciByZXNldCkuCisKKyogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDAzIFNlcCAyMDA0OgorICBBZGQgYml0c3RyZWFtIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBmcGdhIGNvbW1hbmQgKFhpbGlueCBvbmx5KS4KKworKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMDMgU2VwIDIwMDQ6CisgIEFkZCBYaWxpbnggU3BhcnRhbjJFIGZhbWlseSBGUEdBIHN1cHBvcnQKKworKiBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDIgU2VwIDIwMDQ6CisgIEFkZCBBZGRlZCBzdXBwb3J0IGZvciBIMiByZXZpc2lvbiBvZiB0aGUgRVA4MjYwIGJvYXJkLgorICBGaXhlZCBmb3JtYXR0aW5nIGZvciBzb21lIG9mIHRoZSBFUDgyNjAgcmVsYXRlZCBzb3VyY2UgZmlsZXMuCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwMiBTZXAgMjAwNDoKKyAgUmVzZXQgbW9uaXRvciBzaXplIGJhY2sgdG8gMjU2IHNvIGVudmlyb25tZW50IGNhbiBiZSB3cml0dGVuCisgIHRvIGZsYXNoIG9uIE1QQzg1eHggQURTIGFuZCBDRFMgcmVsZWFzZXMuCisKKyogUGF0Y2ggYnkgUGFvbG8gQnJvZ2dpbmksIDAyIFNlcCAyMDA0OgorICBNYWtlIEJTUyBjbGVhcmluZyBvbiBBUk0gc3lzdGVtcyBtb3JlIHJvYnVzdAorCisqIFBhdGNoIGJ5IFl1ZSBIdSBhbmQgSm9lLCAwMSBTZXAgMjAwNDoKKyAgLSBhZGQgUENJIHN1cHBvcnQgZm9yIGl4cDQyNTsKKyAgLSBhZGQgRUVQUk8xMDAgc3VwcG9yIHRmb3IgaXhkcDQyNSBib2FyZC4KKworKiBGaXggcHJvYmxlbSB3aXRoIHByb3RlY3RlZCBzZWN0b3IgZGV0ZWN0aW9uIGluIGRyaXZlci9jZmlfZmxhc2guYworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjI6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogQ29kZSBjbGVhbnVwLCBtb3N0bHkgZm9yIEdDQy0zLjMueAorCisqIENsZWFudXAgY29uZnVzaW5nIHVzZSBvZiBDT05GSUdfRVRIKkFERFIgLSB1c3QgaGlzIG9ubHkgdG8KKyAgcHJlLWRlZmluZSBhIE1BQyBhZGRyZXNzOyB1c2UgQ09ORklHX0hBU19FVEgqIHRvIGVuYWJsZSBzdXBwb3J0IGZvcgorICBhZGRpdGlvbmFsIGV0aGVybmV0IGFkZHJlc3Nlcy4KKworKiBDbGVhbnVwIGRyaXZlcnMvaTgyMzY1LmMgLSBhdm9pZCBkdXBsaWNhdGlvbiBvZiBjb2RlCisKKyogRml4IGJvZ3VzICJjYW5ub3Qgc3BhbiBhY3Jvc3MgYmFua3MiIGZsYXNoIGVycm9yIG1lc3NhZ2UKKworKiBDb2RlIGNsZWFudXAKKworKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIGZvciB0aGUgQ1BDNDUgQm9hcmQuCisKKyogRml4IHByb2JsZW1zIHdpdGggQ01DX1BVMiBmbGFzaCBkcml2ZXIuCisKKyogQ2xlYW51cDoKKyAgLSBhdm9pZCB0cmlncmFwaCB3YXJuaW5nIGluIGZzL2V4dDIvZXh0MmZzLmMKKyAgLSByZW5hbWUgVUMxMDAgLT4gdWMxMDAKKworKiBBZGQgc3VwcG9ydCBmb3IgVUMxMDAgYm9hcmQKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IERleiAyMDA0OgorICAtIGV4dDJmcyBzdXBwb3J0IGFkZGVkCisgIC0gVHVuZHJhIHVuaXZlcnNlIHN1cHBvcnQgYWRkZWQKKyAgLSBDb2xkRmlyZSBNQ0Y1MjQ5IHN1cHBvcnQgYWRkZWQgKG5vIHByZWxvYWRlciBuZWVkZWQhKQorICAtIE1DRjUyNDkgYm9hcmQgVEFTUkVHIGFkZGVkCisgIC0gUFBDIGJvYXJkcyBhZGRlZDogQVBDNDA1LCBDUENJNDA1RFQsIENQQ0k3NTAsIEcyMDAwLCBISDQwNSwKKyAgICBWT000MDUsIFdVSDQwNQorICAtIHNvbWUgZXNkIGJvYXJkcyB1cGRhdGVkCisgIC0gbWVtb3J5IGNvbW1hbmRzICJtZGMiIGFuZCAibXdjIiBhZGRlZCBmb3IgY3ljbGljIHJlYWQvd3JpdGUKKyAgICAoQ09ORklHX01YX0NZQ0xJQywgc2VlIFJFQURNRSBmb3IgZnVydGhlciBkZXNjcmlwdGlvbikKKworKiBBZGQgc3VwcG9ydCBmb3IgSU5LQTRYMCBib2FyZAorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEyIERlYyAyMDA0OgorICBGaXggdHlwbyBpbiBBVDkxIG1lbW9yeSBzZXR1cC4KKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNDoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgIlNUSzUyeHgiIGJvYXJkIChpbmNsdWRpbmcgUFMvMiBtdWx0aXBsZXhlcikKKyAgLSBhZGQgaGFyZHdhcmUgZGV0ZWN0aW9uIGZvciBUUU01MjAwCisKKyogQ2xlYW4gdXAgQ01DIFBVMiBmbGFzaCBkcml2ZXIKKworKiBVcGRhdGUgTUFJTlRBSU5FUlMgZmlsZQorCisqIEZpeCBidWcgaW4gTVBDODIzIExDRCBkcml2ZXIKKworKiBGaXggdWRlbGF5KCkgb24gQVQ5MVJNOTIwMCBmb3IgZGVsYXlzIDwgMSBtcy4KKworKiBFbmFibGUgbG9uZyBoZWxwIG9uIENNQyBQVTIgYm9hcmQ7CisgIGZpeCByZXNldCBpc3N1ZTsKKyAgaW5jcmVhc2UgQ1BVIHNwZWVkIGZyb20gMTc5IHRvIDIwNyBNSHouCisKKyogRml4IHNtYzkxMTExIGV0aGVybmV0IGRyaXZlciBmb3IgWGFlbmlheCBib2FyZCAobmVlZCB0byBoYW5kbGUKKyAgdW5hbGlnbmVkIHRhaWwgcGFydCBzcGVjaWFsbHkpLgorCisqIFVwZGF0ZSBmb3IgQVQ5MVJNOTIwMERLIGFuZCBDTUNfUFUyIGJvYXJkczoKKyAgLSBFbmFibGUgYm9vdGluZyBkaXJlY3RseSBmcm9tIGZsYXNoCisgIC0gZml4IENNQ19QVTIgZmxhc2ggZHJpdmVyCisKKyogRml4IG1raW1hZ2UgdXNhZ2UgbWVzc2FnZQorCisqIE1hcCBTUkFNIG9uIE5DNjUwIGJvYXJkCisKKyogV29yayBhcm91bmQgZm9yIEV0aGVybmV0IHByb2JsZW1zIG9uIFhhZW5pYXggYm9hcmQKKworKiBQYXRjaCBieSBUc2lDaHVuZyBMaWV3LCAyMyBTZXAgMjAwNDoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTVBDODIyMCBDUFUKKyAgLSBBZGQgc3VwcG9ydCBmb3IgQWxhc2thIGFuZCBZdWtvbiBib2FyZHMKKworKiBGaXggY29uZmlndXJhdGlvbiBmb3IgRVJJQyBib2FyZCAobmVlZHMgbW9yZSByb29tKQorCisqIEFkanVzdCBNSVBTIGNvbXBpbGVyIG9wdGlvbnMgYXQgcnVuLXRpbWUgZGVwZW5kaW5nIG9uIHRvb2xzIHZlcnNpb24KKyAgKCItbWFyY2g9NGtjIC1tdHVuZT00a2MgLVdhLC1taXBzX2FsbG93X2JyYW5jaF90b191bmRlZmluZWQiIGZvciBuZXcsCisgICItbWNwdT00a2MiIGZvciBvbGQgdG9vbHMpCisKKyogQWRkIHBhc3Npbmcgb2YgdGhlIGNvbW1hbmQgbGluZSBhbmQgbWVtb3J5IHNpemUgaW5mb3JtYXRpb24gdG8gIHRoZQorICBrZXJuZWwgb24geGFlbmlheCBib2FyZC4KKworKiBFbmFibGUgTkFORCBmbGFzaCBzdXBwb3J0IGZvciBOQzY1MCBib2FyZC4KKworKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UgMDcgT2N0IDIwMDQ6CisgIFVwZGF0ZWQgUkVBRE1FIGZvciBEQkF1MXgwMCBib2FyZHMgdG8gbWF0Y2ggY3VycmVudCBzdGF0dXMKKworKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMjggU2VwdCAyMDA0OgorICBGaXggRmxhc2ggc3VwcG9ydCBmb3IgVmVyc2F0aWxlLgorCisqIFBhdGNoIGJ5IFJvZ2VyIEJsb2ZlbGQsIDE2IFNlcCAyMDA0OgorICBGaXggdGltZW91dCBmb3IgREhDUCBjb21tYW5kIHJldHJ5CisKKyogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE0IFNlcCAyMDA0OgorICBGaXggZWFybHkgc2VyaWFsIGhhbmcgd2hlbiBDT05GSUdfU0VSSUFMX01VTFRJIGlzIGRlZmluZWQuCisKKyogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE0IFNlcCAyMDA0OgorICBLaWNrIHdhdGNoZG9nIHdoZW4gYnotZGVjb21wcmVzc2luZworCisqIEZpeCBDRkdfSFogcHJvYmxlbXMgb24gQVQ5MVJNOTIwMCBzeXN0ZW1zCisgIFtSZW1lbWJlcjogQ0ZHX0haIHNob3VsZCBiZSAxMDAwIG9uIEFMTCBzeXN0ZW1zIV0KKworKiBQYXRjaCBieSBHcmlkaXNoIFNobG9taSwgMzAgQXVnIDIwMDQ6CisgIC0gQWRkIHN1cHBvcnQgdG8gcmV2QSB2ZXJzaW9uIG9mIFBRMjcgYW5kIFBRMjdFLgorICAtIFJldmVydGVkIE1QQzgyNjBBRFMgYmF1ZHJhdGUgYmFjayB0byBvcmlnaW5hbCAxMTUyMDAKKworKiBQYXRjaCBieSBIb2ppbiwgMTcgU2VwIDIwMDQ6CisgIEZpeCB0eXBvIGluIGNmaV9mbGFzaC5jCisKKyogUGF0Y2ggYnkgTWFyayBKb25hcywgMDkgU2VwdGVtYmVyIDIwMDQ6CisgIG10ZXN0J3MgZGF0YSBsaW5lIHRlc3QgKHdpdGggQ0ZHX0FMVF9NRU1URVNUIHNldCkgcmV0dXJuZWQgYSB3cm9uZworICBlcnJvciBtZXNzYWdlCisKKyogUGF0Y2ggYnkgTWFyayBKb25hcywgMzEgQXVndXN0IDIwMDQ6CisgIEFkZGVkIG9wdGlvbiBDRkdfWExCX1BJUEVMSU5JTkcgdG8gZW5hYmxlIFhMQiBwaXBlbGluaW5nLiBUaGlzCisgIGltcHJvdmVzIEZUUCBwZXJmb3JtYW5jZSBmb3IgTVBDNTIwMCBzeXN0ZW1zLiBFbmFibGVkIGZvciBJY2VDdWJlCisgIGJ5IGRlZmF1bHQuCisKKyogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMzAgQXVnIDIwMDQ6CisgIC0gSW1wcm92ZSBwbGF0Zm9ybS5TIGNvZGUgZm9yIG9tYXAxNTEwaW5uIHRoYXQgZGV0ZWN0cyB3aGV0aGVyIGNvZGUKKyAgICBpcyBydW5uaW5nIGZyb20gU0RSQU0gb3Igbm90LiBQYXRjaCBhbGxvd3MgU0RSQU0gdG8gYmUgY29uZmlndXJlZAorICAgIGlmIGNvZGUgaXMgcnVubmluZyBvdXQgb2YgU1JBTSBhdCAweDIwMDAwMDAwLgorCisqIFBhdGNoIGJ5IEZyZWRlcmljayBLbGF0dCwgMzAgQXVnIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgV2luZCBSaXZlciBTQkM4NTQwL1NCQzg1NjAgYm9hcmRzCisKKyogQ29uZmlndXJlIFNYMSBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYworCisqIFBhdGNoZXMgYnkgTWljaGFlbCBCZW5kemljaywgMzAgQXVnIDIwMDQ6CisgIC0gQ29uZmlndXJlIG9tYXAxNTEwaW5uIGJvYXJkIHRvIHVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jCisgIC0gTWFrZSBkcml2ZXJzL2NmaV9mbGFzaC5jIHByb3RlY3QgZW52aXJvbm1lbnQgYW5kIHJlZHVuZGFudAorICAgIGVudmlyb25tZW50LgorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEp1biAyMDA0OgorICAtIEFkZCBzY3JpcHQgKHRvb2xzL2ltZzJicmVjLnNoKSB0byBwcm9ncmFtbSBVLUJvb3QgaW50bworICAgIChTeW5jaClGbGFzaCB1c2luZyB0aGUgQm9vdHN0cmFwIE1vZGUgb2YgdGhlIE1DOTMyOE1YMS9MCisKKyogUGF0Y2hlcyBieSBTY290dCBNY051dHQsIDI0IEF1ZyAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy1JSSBwcm9jZXNzb3JzLgorICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUENJLTU0NDEgYm9hcmQuCisgIC0gQWRkIHN1cHBvcnQgZm9yIFBzeWVudCBQSzFDMjAgYm9hcmQuCisKKyogUGF0Y2hlcyBieSBKb24gTG9lbGlnZXIsIDI0IEF1ZyAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTVBDODU0MSBhbmQgTVBDODU1NSBDRFMgYm9hcmRzCisgIC0gQ2xlYW51cCBldGg/YWRkciBoYW5kbGluZzogbWFrZSBkZXBlbmRlbnQgb24gQ09ORklHX0VUSD9BRERSCisgIC0gQ29udmVydCBNUEM4NXh4QURTIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgorICAtIEZpeCBQQ0kgd2luZG93IG9uIE1QQzg1eHg7IHJlbW92ZSB1bm5lZWRlZCBQQ0kgaW5pdGlhbGl6YXRpb24KKyAgICBmcm9tIGJvYXJkX2Vhcmx5X2luaXRfZigpCisgIC0gUHJvdmlkZSBTVyB3b3JrYXJvdW5kIGZvciBQQ0kgaW5pdGlhbGl6YXRpb24gb24gODV4eCBDRFMKKworKiBQYXRjaGVzIGJ5IEdlb3JnZSBHLiBEYXZpcywgMjQgQXVnIDIwMDQ6CisgIC0gRW5hYmxlIHJhbWRpc2svaW5pdHJkIHRhZ2dlZCBwYXJhbSBzdXBwb3J0IGZvciBvbWFwMTYxMGgyX2NvbmZpZworICAtIFJlbW92ZSBzdGF0aWMgbmV0d29yayBzZXR1cCBkZWZhdWx0cyBmcm9tIG14MWFkc19jb25maWcKKyAgLSB1cGRhdGUgQVJNIGJvYXJkcyB0byB1c2UgY29uc3RhbnRzIGZyb20gbWFjaC10eXBlcy5oCisKKyogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDA0IE9jdCAyMDA0OgorICAtIGZpeCBJMkMgb24gYXQ5MXJtOTIwMAorICAtIGFkZCBzdXBwb3J0IGZvciBSaWNvaCBSUzVDMzcyQSBSVEMKKworKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDEgT2N0IDIwMDQ6CisgIC0gYWRkIHN1cHBvcnQgZm9yIENNQyBQVTIgYm9hcmQKKyAgLSBhZGQgc3VwcG9ydCBmb3IgSTJDIG9uIGF0OTFybTkyMDAKKworKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggU2VwIDIwMDQ6CisgIGZpeCBiYXVkcmF0ZSBoYW5kbGluZyBvbiBhdDkxcm05MjAwCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjIgQXVnIDIwMDQ6CisgIC0gcmVtb3ZlIFpQQy4xOTAwIGJvYXJkLXNwZWNpZmljIGZsYXNoIGRyaXZlcjsKKyAgICBzd2l0Y2ggdGhlIHBvcnQgdG8gZ2VuZXJpYyBDRkkgZHJpdmVyOworICAtIHBvcnQgY2xlYW4tdXAKKworKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKKyAgQWRkIGNhbGNfZmJzaXplKCkgZnVuY3Rpb24gdXNlZCB3aXRoIFZJREVPTEZCX1RBRyBvbiBUUkFCCisKKyogQ2xlYW4gdXAgdG9vbHMvYm1wX2xvZ28uYyB0byBub3QgYWRkIHRyYWlsaW5nIHdoaXRlIHNwYWNlCisKKyogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CisgIC0gR3JvdXAgY29tbW9uIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucyBpbiBjb21tb24vbGNkLmMKKyAgLSBHcm91cCBjb21tb24gZnJhbWVidWZmZXIgbWFjcm9zIGFuZCAjZGVmaW5lcyBpbiBpbmNsdWRlL2xjZC5oCisgIC0gUHJvdmlkZSBjYWxjX2Zic2l6ZSgpIGZvciB2aWRlbyBBVEFHCisKKyogUGF0Y2ggYnkgU2FtIFNvbmcsIDIxIEF1Z3VzdCAyMDA0OgorICAtIEZpeCBhIHR5cG8gaW4gUkVBRE1FCisgIC0gQWxpZ24gIihSTykiIG91dHB1dCBmb3IgImZsaW5mbyIgYWZ0ZXIgInByb3RlY3Qgb24iCisgIC0gQWRkIFJFU0VUIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQ7IGFkanVzdCBDUFU6QlVTIGZyZXF1ZW5jeQorICAgIHJhdGlvIDE6MSB3aGVuIGNvcmUgZnJlcXVlbmN5IGxlc3MgdGhhbiA1ME1IegorCisqIFBhdGNoZXMgYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CisgIC0gZml4IHNvbWUgInVzZSBvZiBsYWJlbCBhdCBlbmQgb2YgY29tcG91bmQgc3RhdGVtZW50IiB3YXJuaW5ncworICAtIERlZmluZSB0eXBlIG9mIExDRCBwYW5lbCBvbiBsdWJib2NrIGJvYXJkIGlmIENPTkZJR19MQ0QgaXMgdXNlZAorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE2IEF1ZyAyMDA0OgorICAtIEludHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIFNvQ3MgIi4vY3B1LyQoQ1BVKS8kKFNPQykiCisgIC0gY3JlYXRpbmcgc3ViZGlycyBmb3IgU29DcyAuL2NwdS9hcm05MjB0L2lteCBhbmQgLi9jcHUvYXJtOTIwdC9zM2MyNHgwCisgIC0gbW92aW5nIFNvQyBzcGVjaWZpYyBjb2RlIG91dCBvZiBjcHUvYXJtOTIwdC8gaW50byBjcHUvYXJtOTIwdC8kKFNPQykvCisgIC0gbW92aW5nIGRyaXZlcnMvczNjMjR4MF9pMmMuYyBhbmQgZHJpdmVycy9zZXJpYWxfaW14LmMgb3V0IG9mIGRyaXZlcnMvCisgICAgaW50byBjcHUvYXJtOTIwdC8kKFNPQykvCisKKyogUGF0Y2hlcyBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKKyAgLSBBZGRlZCBzdXBwb3J0IGZvciBib3RoIDggYW5kIDE2IGJpdCBtb2RlIGFjY2VzcyB0byBTeXN0ZW0gQUNFIENGCisgICAgdGhyb3VnaCBNUFUuCisgIC0gRml4ZWQgbWlzc2luZyBTeXN0ZW0gQUNFIENGIGRldmljZSBkdXJpbmcgZ2V0IEZBVCBwYXJ0aXRpb24gaW5mbworICAgIGluIGZhdF9yZWdpc3Rlcl9kZXZpY2UgZnVuY3Rpb24uCisgIC0gRW5hYmxlZCBTeXN0ZW0gQUNFIENGIHN1cHBvcnQgb24gTUwzMDAuCisKKyogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CisgIFN5bmNoIGRlZmluZXMgZm9yIHNhdmVlbnYgYW5kIGRvX3NhdmVlbnYgZnVuY3Rpb25zIHNvIHRoZXkgZ2V0CisgIGNvbXBpbGVkIHVuZGVyIHRoZSBzYW1lIHN0YXRlbWVudC4KKworKiBQYXRjaCBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKKyAgLSBBZGRlZCBJMkMgc3VwcG9ydCBmb3IgTUwzMDAuCisgIC0gQWRkZWQgc3VwcG9ydCBmb3IgTUwzMDAgdG8gcmVhZCBvdXQgaXRzIGVudmlyb25tZW50IGluZm9ybWF0aW9uCisgICAgc3RvcmVkIG9uIHRoZSBFRVBST00uCisgIC0gQWRkZWQgc3VwcG9ydCB0byB1c2UgYm9hcmQgc3BlY2lmaWMgcGFyYW1ldGVycyBhcyBwYXJ0IG9mCisgICAgVS1Cb290J3MgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uCisgIC0gVXBkYXRlZCBNTEQgZmlsZXMgdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uIGZvciBuZXcgZmVhdHVyZXMKKyAgICBhYm92ZS4KKworKiBQYXRjaGVzIGJ5IFRyYXZpcyBTYXd5ZXIsIDA1IEF1ZyAyMDA0OgorICAtIFJlbW92ZSBpbmNvcnJlY3QgYnJpZGdlIHNldHRpbmdzIGZvciBldGggZ3JvdXAgNgorICAtIEFkZCBjYWxsIHRvIHNldHVwIGJyaWRnZSBpbiBwcGNfNDQweF9ldGhfaW5pdGlhbGl6ZQorICAtIEZpeCBwcGNfNDQweF9ldGhfaW5pdCB0byByZXNldCB0aGUgcGh5IG9ubHkgaWYgaXRzIHRoZQorICAgIGZpcnN0IHRpbWUgdGhyb3VnaCwgb3RoZXJ3aXNlLCBqdXN0IGNoZWNrIHRoZSBwaHkgZm9yIHRoZQorICAgIGF1dG9uZWdvdGlhdGVkIHNwZWVkL2R1cGxleC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgbmV0Y29uc29sZQorICAtIG9ubHkgcHJpbnQgdGhlIHNwZWVkL2R1cGxleCB0aGUgZmlyc3QgdGltZSB0aGUgcGh5IGlzIHJlc2V0LgorCisqIFBhdGNoIGJ5IFNobG9tbyBLdXQsIDI5IE1hciAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgTUtTIEluc3RydW1lbnRzICJRdWFudHVtIiBib2FyZAorCisqIEZpeCBidWlsZCBwcm9ibGVtIHdpdGggQ29nZW50IGJvYXJkczsKKyAgYXZvaWQgdXNpbmcgPGFzbS9ieXRlb3JkZXIuaD4gd2hlbiB1c2luZyB0aGUgaG9zdCBjb21waWxlcgorCisqIFBhdGNoIGJ5IEdhbmFwYXRoaSBDLCAwNCBBdWcgMjAwNDoKKyAgRml4IE5GUyB0aW1lb3V0IGlzc3VlCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgSnVsIDIwMDQ6CisgIC0gRml4IGhvc3QgdG9vbHMgYnVpbGRpbmcgaW4gQ3lnd2luIGVudmlyb25tZW50CisgIC0gRml4IGhlYWRlciBmaWxlcyBzZWFyY2ggb3JkZXIgZm9yIGhvc3QgdG9vbHMKKworKiBQYXRjaCBieSBUb20gQXJtaXN0ZWFkLCAxOSBKdWwgMjAwNDoKKyAgRml4IGtnZGIuUyBzdXBwb3J0IGZvciA3NHh4Xzc1eCBjcHUKKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE1IEp1bCAyMDA0OgorICBGaXggTVBDODV4eCBJMkMgZHJpdmVyCisKKyogRml4IHByb2JsZW1zIHdpdGggQ0RST00gZHJpdmUgYXMgc2xhdmUgZGV2aWNlIG9uIExpdGU1MjAwIElERSBidXMuCisKKyogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTUgSnVseSAyMDA0CisgIFNldCB0aGUgUENJIGNsYXNzIGNvZGUgZm9yIEpTRSBib2FyZCBhcyBwYXJ0IG9mIFBDSSBpbnRlcmZhY2Ugc2V0dXAKKworKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAxNSBKdWwgMjAwNDoKKyAgRml4IHByb2JsZW0gd2l0aCB3cml0ZXMgd2l0aCBvZGQgc2l6ZXMgaW4gZHJpdmVycy9jZmlfZmxhc2guYyB3aGVuCisgIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFIGlzIHNldAorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDA0OgorICBBbGxvdyBjbG9jayBzZXR0aW5nIG9uIE1QQzg2Ni9NUEM4ODUgc2VyaWVzIGNoaXBzIGFjY29yZGluZyB0bworICBlbnZpcm9ubWVudCB2YXJpYWJsZSBgY3B1Y2xrJworCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIEFwciAyMDA0OgorICBSZW1vdmUgdW5uZWNlc3NhcnkgcmVkZWZpbmUgb2YgQ1BNX0RBVEFPTkxZX1NJWkUgZm9yIE1QQzgyNngKKworKiBQYXRjaCBieSBWaW5jZW50IER1YmV5LCAyNCBTZXAgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIHhhZW5pYXggYm9hcmQKKworKiBBZGQgY29tbWVudCBhYm91dCBub24tR1BMIGNoYXJhY3RlciBvZiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0bworICBDT1BZSU5HIGZpbGUKKworKiBGaXggRkVDIGV0aGVybmV0IHByb2JsZW0gb24gTlNDVSBib2FyZC4KKworKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDkgU2VwIDIwMDQ6CisgIGFsbG93IHRvIHVzZSBVU0FSVDEgYXMgY29uc29sZSBwb3J0IG9uIGF0OTFybTkyMDBkayBib2FyZHMKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IFNlcCAyMDA0OgorICBVcGRhdGUgQVI0MDUgYm9hcmQuCisKKyogRml4IFN5c0NsayBoYW5kbGluZyBmb3IgUFBDaGFtZWxlb24gYW5kIENBVGNlbnRlciBib2FyZHMKKworKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAwOCBTZXAgMjAwNDoKKyAgVXBkYXRlIGV0YWdzIGJ1aWxkIHRhcmdldAorCisqIEltcHJvdmUgTmV0Q29uc29sZSBzdXBwb3J0OiBhZGQgc3VwcG9ydCBmb3IgYnJvYWRjYXN0IGRlc3RpbmF0aW9uCisgIGFkZHJlc3MgYW5kIGJ1ZmZlcmVkIGlucHV0LgorCisqIENsZWFudXAgY29tcGlsZXIgd2FybmluZ3MgZm9yIEdDQyAzLjMueCBhbmQgbGF0ZXIKKworKiBGaXggcHJvYmxlbSBpbiBjbWRfamZmczIuYyBpbnRyb2R1Y2VkIGJ5IENGR19KRkZTX1NJTkdMRV9QQVJUIHBhdGNoCisKKyogQWRkIHN1cHBvcnQgZm9yIElEUyAiTkM2NTAiIGJvYXJkCisKKyogQWRkIGF1dG9tYXRpYyB1cGRhdGUgc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKKworKiBDbGVhciBCbG9jayBMb2NrLUJpdHMgd2hlbiBlcmFzaW5nIGZsYXNoIG9uIExXTU9OIGJvYXJkLgorCisqIEZpeCByZXR1cm4gY29kZSBvZiAiZmF0bG9hZCIgY29tbWFuZAorCisqIEVuYWJsZSBNU0RPUy9WRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCBmb3IgTFdNT04gYm9hcmQKKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwMyBBdWcgMjAwNDoKKyAgY2hhbmdlIHRpbWluZyBmb3IgU001MDEgZ3JhcGhpY3MgY29udHJvbGxlciBvbiBUUU01MjAwIG1vZHVsZQorCisqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDEzIEp1bHkgMjAwNDoKKyAgLSBUb3RhbDUyMDAgTENEIG5vdyBydW4gaW4gbGl0dGxlIGVuZGlhbiBtb2RlLiBFbmRpYW5lc3MgY29udmVyc2lvbgorICAgIGlzIGRvbmUgaW4gaGFyZHdhcmUuCisgIC0gUmVtb3ZlZCBsYXN0IHJlZmVyZW5jZSB0byAiY29uc29sZSIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyogUGF0Y2hlcyBieSBMYXJzIE11bmNoLCAxMiBKdWwgMjAwNDoKKyAgLSBtb3ZlIGF0NDUuYyB0byBib2FyZC9hdDkxcm05MjAwZGsvIHNpbmNlIHRoaXMgaXMgYXQ5MXJtOTIwMGRrCisgICAgYm9hcmQgc3BlY2lmaWMKKyAgLSBzcGxpdCBvdXQgdGhlIExYVDk3MUEgUEhZIGZyb20gbnNfOTc1MF9ldGguaAorICAtIHNwbGl0IHRoZSBkbTkxNjEgcGh5IHBhcnQgb3V0IG9mIGF0OTFybTkyMDBfZXRoZXIuYworCisqIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDEyIEp1bCAyMDA0OgorICBSZXBsYWNlZCBoYXJkY29kZWQgUEwwMTEgY2xvY2sgZnJlcXVlbmN5IHdpdGggY29uZmlnIHZhcmlhYmxlLgorICBGaXhlZCB3cm9uZyBDT05GSUdfQ01EX0RGTCBkb2MuCisKKyogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMDkgSnVuIDIwMDQ6CisgIG1ha2UgaXQgcG9zc2libGUgdG8gcmVtb3ZlIGNocGFydCB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHBhcnRpdGlvbgorCisqIEFkZCBzdXBwb3J0IGZvciBjb25zb2xlIG92ZXIgVURQIChjb21wYXRpYmxlIHRvIEluZ28gTW9sbmFyJ3MKKyAgbmV0Y29uc29sZSBwYXRjaCB1bmRlciBMaW51eCkKKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE2IEp1bCAyMDA0OgorICAtIHN1cHBvcnQgbGFyZ2VyIEREUiBtZW1vcmllcyB1cCB0byAyRyBvbiB0aGUgUEM4NTQwLzg1NjBBRFMgYW5kCisgICAgU1RYR1AzIGJvYXJkcworICAtIE1hZGUgTVBDODU0MC84NTYwQURTIGJlIDMzTWh6IFBDSSBieSBkZWZhdWx0LgorICAtIFJlbW92ZWQgbW9sZHkgQ09ORklHX1JBTV9BU19GTEFTSCwgQ0ZHX0ZMQVNIX1BPUlRfV0lEVEhfMTYKKyAgICBhbmQgQ09ORklHX0wyX0lOSVRfUkFNIG9wdGlvbnMuCisgIC0gUmVmYWN0b3IgTG9jYWwgQnVzIGluaXRpYWxpemF0aW9uIG91dCBvZiBTRFJBTSBzZXR1cC4KKyAgLSBSZS1pbXBsZW1lbnQgbmV3IHZlcnNpb24gb2YgTEJDMTEvRERSMTEgZXJyYXRhIHdvcmthcm91bmRzLgorICAtIE1vdmVkIGJvYXJkIHNwZWNpZmljIFBDSSBpbml0IHBhcnRzIG91dCBvZiBDUFUgZGlyZWN0b3J5LgorICAtIEFkZGVkIFRMQiBlbnRyeSBmb3IgUENJLTEgSU8gTWVtb3J5CisgIC0gVXBkYXRlZCBSRUFETUUubXBjODV4eGFkcworCisqIFBhdGNoIGJ5IFNhc2NoYSBIYXVlciwgMjggSnVuOgorICAtIGFkZCBnZW5lcmljIHN1cHBvcnQgZm9yIE1vdG9yb2xhIGkuTVggYXJjaGl0ZWN0dXJlCisgIC0gYWRkIHN1cHBvcnQgZm9yIG14MWFkcywgbXgxZnMyIGFuZCBzY2I5MzI4IGJvYXJkcworCisqIFBhdGNoZXMgYnkgTWFyYyBMZWVtYW4sIDIzIEp1bCAyMDA0OgorICAtIEFkZCBkZWZpbmUgZm9yIHRoZSBQQ0kvTWVtb3J5IEJ1ZmZlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgIC0gY29ycmVjdGVkIGNvbW1lbnRzIGluIGNwdS9tcGM4MjR4L2NwdV9pbml0LmMKKworKiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc2VyaWFsIGludGVyZmFjZXMKKyAgKGZvciBleGFtcGxlIHRvIGFsbG93IG1vZGVtIGRpYWwtaW4gLyBkaWFsLW91dCkKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IEp1bCAyMDA0OgorICBjcHUvcHBjNHh4L3NkcmFtLmMgcmV3cml0dGVuIG5vdyB1c2luZyBnZXRfcmFtX3NpemUoKQorCisqIEZpeCBOU0NVIGNvbmZpZzsgYWRkIGV0aGVybmV0IHdha2V1cCBjb2RlLgorCisqIEFkZCBsaW5rIGZvciBwcmVsb2FkZXIgZm9yIE1vdG9yb2xhIENvbGRGaXJlIHRvIFJFQURNRS5tNjhrCisKKyogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTIgSnVsIDIwMDQ6CisgIGZpeCBvdXRwdXQgZm9ybWF0dGluZyBpbiBkcml2ZXJzL2NmaV9mbGFzaC5jCisKKyogUGF0Y2ggYnkgTWFyayBKb25hcywgMDIgSnVsIDIwMDQ6CisgIEZpeCBsb3dib290IChhZ2Fpbikgb24gTVBDNXh4eAorCisqIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDA3IEp1bCAyMDA0OgorICByZWxvY2F0ZSBleGNlcHRpb24gdmVjdG9ycyBvbiBhcm03MjB0IGlmIG5lZWRlZAorCisqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDYgSnVsIDIwMDQ6CisgIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdAorICAtIFNldCBjb3JyZWN0IE9NQVAxNjEwIGJpX2FyY2hfbnVtYmVyIGZvciBidWlsZCB0YXJnZXQKKworKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNiBKdWwgMjAwNDoKKyAgZXZiNDUxMDogYWRkIHN1cHBvcnQgZm9yIHRpbWVyIGludGVycnVwdDsgY2xlYW51cAorCisqIFBhdGNoIGJ5IERhbiBQb2lyb3QsIDA2IEp1bCAyMDA0OgorICBGaXggc2JjODI2MCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworKiBDbGVhbnVwIHJlZHVuZGFuZCAiY29uc29sZSIgZW52aXJvbm1lbnQgdmFyaWFibGUKKworKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwNSBKdWwgMjAwNDoKKyAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUb3RhbDUxMDAncyBhbmQgVG90YWw1MjAwJ3MgTENEIHNjcmVlbgorCisqIFBhdGNoZXMgYnkgRGFuIEVpc2VuaHV0LCAwMSBKdWwgMjAwNDoKKyAgLSBSRUFETUUgZml4ZXMuCisgIC0gTW92ZSBkb2MyMDAwLmggaW5jbHVkZSB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmcgb24gc29tZSBib2FyZHMKKworKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwMSBKdWwgMjAwNDoKKyAgQWRkZWQgc3VwcG9ydCBmb3IgVG90YWw1MTAwIGFuZCBUb3RhbDUyMDAgKFJldi4xIGFuZCBSZXYuMikKKyAgTUdUNTEwMCBhbmQgTVBDNTIwMCBiYXNlZCBGcmVlc2NhbGUgcGxhdGZvcm1zLgorCisqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAwMSBKdWwgMjAwNDoKKyAgQWRkIGluaXRpYWxpemF0aW9uIGZvciBJbnRlZ3JhdG9yIGFuZCB2ZXJzYXRpbGUgYm9hcmQgZmlsZXMuCisKKyogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMDEgSnVuIDIwMDQ6CisgIEZpeCBWRkQgRkIgYWxsb2NhdGlvbiwgYWRkIExDRCBGQiBhbGxvY2F0aW9uIG9uIEFSTQorCisqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDMwIEp1biAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgVFFNNTIwMCBib2FyZAorCisqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI5IEp1biAyMDA0OgorICBBZGQgbG9vcHcgY29tbWFuZDogaW5maW5pdGUgd3JpdGUgbG9vcCBvbiBhZGRyZXNzIHJhbmdlCisKKyogUGF0Y2hlcyBieSBZYXN1c2hpIFNob2ppLCAyOSBKdW4gMjAwNDoKKyAgLSBhZGQgZW1wdHkgaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9wcm9jZXNzb3IuaAorICAtIGFkZCB0byBDUkVESVRTIGFuZCBNQUlOVEFJTkVSUworICAtIGFkZCBnZCBpbml0aWFsaXphdGlvbgorICAtIGFkZCBNaWNyb0JsYXplIGFuZCBTVVpBS1UgYm9hcmQgdG8gTUFLRUFMTCBzY3JpcHQKKyAgLSBhZGQgcmVzZXQgc3VwcG9ydCBmb3IgU1VaQUtVCisgIC0gYWRkIGZsdXNoX2NhY2hlKCkgZm9yIE1pY3JvQmxhemUKKyAgLSBhZGQgQ0ZHX0ZMQVNIX1NJWkUgdG8gaW5jbHVkZS9jb25maWdzL3N1emFrdS5oIHNpbmNlIHdlIGhhdmUgZml4ZWQKKyAgICBzaXplIGZsYXNoIG1lbW9yeSBvbiBTVVpBS1UKKworKiBQYXRjaCBieSBQcmFrYXNoIEt1bWFyLCAyNyBKdW4gMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIHRoZSBQWEEyNTAgYmFzZWQgSW50cmluc3ljIENlcmYgYm9hcmQuCisKKyogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMjcgSnVuIDIwMDQ6CisgIGZpeCBjb21tZW50IGluIGluY2x1ZGUvY29tbW9uLmgKKworKiBSZW5hbWUgU0JDODU2MCBpbnRvIHNiYzg1NjAgZm9yIGNvbnNpc3RlbmN5CisKKyogUGF0Y2ggYnkgRGFuaWVsIFBvaXJvdCwgMjQgSnVuIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBXaW5kIFJpdmVyJ3Mgc2JjODI0MCBib2FyZAorCisqIFBhdGNoZXMgYnkgWWFzdXNoaSBTaG9qaSwgMjYgSnVuIDIwMDQ6CisgIC0gZHJpdmVycy9zZXJpYWxfeHVhcnRsaXRlLmM6IGZpeCAicmV0dXJuIDAiIGluIHZvaWQgZnVuY3Rpb24KKyAgLSBhZGQgbWljcm9ibGF6ZSBzdXBwb3J0IHRvIG1raW1hZ2UgdG9vbAorCisqIFBhdGNoIGJ5IEZyZWQgS2xhdHQsIDI1IEp1biAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgV2luZFJpdmVyJ3Mgc2JjODU2MCBib2FyZAorCisqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDI0IEp1biAyMDA0CisgIFNtYWxsIEJ1Z3MgZml4ZXMgZm9yICJhdDkxcm05MjAwZGsiIGJvYXJkOgorICAtIFRpbWluZyBtb2RpZmljYXRpb25zIGZvciBTUEkgRGF0YUZsYXNoIGFjY2VzcworICAtIEZpeCBOQU5EIGZsYXNoIGRldGVjdGlvbiBidWcKKworKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNDoKKyAgQWRkIFN1cHBvcnQgZm9yIEZsYXNoIEFUNDlCVjY0MTYgZm9yIEFUOTFSTTkyMDBESyBib2FyZAorCisqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMTcgSnVuZSAyMDA0OgorICBDb21wbGV0aW9uIG9mIHRoZSA4NTQwQURTLzg1NjBBRFMgdXBkYXRlczoKKyAgRml4IHNvbWUgUENJIGFuZCBSYXBpZCBJL08gbWVtb3J5IG1hcHMsCisgIEluaXRpYWxpemUgYm90aCBUU0VDIDEgYW5kIDIsCisgIEluaXRpYWxpemUgU0RSQU0KKyAgVXBkYXRlIE1BSU5UQUlORVIgZm9yIDg1eHggYm9hcmRzIGFuZCBSRUFETUUubXBjODV4eGFkcworCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE2IEp1biAyMDA0OgorICBSZW1vdmUgb2Jzb2xldGUgQWRkZXJJSSBwb3J0IHdoaWNoIHdhcyBzdXBlcnNlZGVkIGJ5IHVuaWZpZWQKKyAgQWRkZXJJSS9BZGRlcjg3eCBwb3J0CisKKyogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDE2IEp1biAyMDA0OgorICBGaXggZ2NjLTMuMy4zIHdhcm5pbmdzIGZvciBzbWM5MTExMS5jCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMiBKdWwgMjAwNDoKKyAgLSBGaXggYnVnIGluIDQwNSBldGhlcm5ldCBkcml2ZXI7IGFsbG9jYXRlZCBkYXRhIG5vdCBjbGVhcmVkIQorICAtIEZpeCBwcm9ibGVtIGluIDQwNSBpMmMgZHJpdmVyOyBkb24ndCB0cnkgdG8gcHJpbnQgd2l0aG91dCBjb25zb2xlIQorCisqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTEgSnVuIDIwMDQ6CisgIFJlbW92ZSBkZWJ1ZyBjb2RlIGZyb20gJ2JvYXJkL2xwZDdhNDB4L2ZsYXNoLmMnCisKKyogUGF0Y2ggYnkgQW5kcmVhIE1hcnNvbiwgMTEgSnVuIDIwMDQ6CisgIFVwZGF0ZSBmb3IgUFBDaGFtZWxlb24gYm9hcmQ6CisgIC0gc3VwcG9ydCBmb3IgU3lzQ2xrIEAgMjVNSHoKKyAgLSBzdXBwb3J0IGZvciBTaWxpY29uIE1vdGlvbiBTTTcxMiBWR0EgY29udHJvbGxlcgorICAtIHNvbWUgY2xlYW4gdXBzCisKKyogUGF0Y2hlcyBieSBSaWNoYXJkIFdvb2RydWZmLCAxMCBKdW4gMjAwNDoKKyAgLSBmaXggcHJvYmxlbXMgd2l0aCBleGFtcGxlcy9zdHVicy5jIGZvciBHQ0MgPj0gMy40CisgIC0gZml4IHByb2JsZW1zIHdpdGggZ2QgaW5pdGlhbGl6YXRpb24KKworKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAxNyBNYXkgMjAwNDoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0M0NTEwQiBDUFUgKEFSTTd0ZG1pIGJhc2VkIFNvQykKKyAgLSBBZGQgc3VwcG9ydCBmb3IgRVNQRC1JbmMuIEVWQjQ1MTAgQm9hcmQKKworKiBQYXRjaCBieSBNYXJjIExlZW1hbiwgMTEgTWF5IDIwMDQ6CisgIEZpeCBmb3IgTVBDODI0NSAtIHJlYWRpbmcgUFBDIE1lbW9yeSBmcm9tIGFub3RoZXIgZGV2aWNlIHdpdGggdGhlCisgIFBQQyBhcyBQQ0kgdGFyZ2V0IGRldmljZSBjb3JydXB0cyBkYXRhIGR1ZSB0byBpbnRlcmVuYWwgaGFyZHdhcmUKKyAgYnVmZmVyaW5nLgorCisqIEZpeCAiY2xzIiBjb21tYW5kIHdoZW4gdXNlZCB3aXRoIHNwbGFzaCBzY3JlZW4KKworKiBJbmNyZWFzZSBORlMgZG93bmxvYWQgdGltZW91dCAobm93IDEgbWluIC0gMTAgc2VjIGlzIHRvIHNob3J0IGZvciBhCisgIHNsb3cgZG93bmxvYWQgb2YgYSBiaWcgaW1hZ2UpCisKKyogQWRkICJjbHMiIGZ1bmN0aW9uIHRvIE1QQzgyMyBMQ0QgZHJpdmVyIHNvIHdlIGNhbiByZWluaXRpYWxpemUgdGhlCisgIGRpc3BsYXkgZXZlbiBhZnRlciBzaG93aW5nIGEgYml0bWFwCisKKyogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwNCBKdW4gMjAwNDoKKyAgLSBERFIgUmFtIHN1cHBvcnQgZm9yIFBNNTIwIChNUEM1MjAwKQorICAtIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBmbGFzaCB0eXBlcyAoUE01MjApCisgIC0gVVNCIC8gSURFIC8gQ0YtQ2FyZCAvIERpc2tPbkNoaXAgc3VwcG9ydCBmb3IgUE01MjAKKyAgLSA4IGJpdCBib290IHJvbSBzdXBwb3J0IGZvciBQTTUyMC9DRTUyMAorICAtIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIE1pY3JvU3lzIENQQzQ1IGJvYXJkIChNUEM4MjQ1KQorICAtIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIENQQzQ1CisgIC0gc3VwcG9ydCBvZiBuZXcgZmxhc2ggdHlwZSAoMjhGMTYwQzNUKSBmb3IgQ1BDNDUKKworKiBGaXggZmxhc2ggcGFyYW1ldGVycyBwYXNzZWQgdG8gTGludXggZm9yIFBQQ2hhbWVsZW9uIGJvYXJkCisKKyogUmVtb3ZlIGV0aF9pbml0KCkgZnJvbSBsaWJfYXJtL2JvYXJkLmM7IGl0J3MgZG9uZSBpbiBuZXQubmV0LmMuCisKKyogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAxMCBKdW4gMjAwNDoKKyAgZml4IHN1cHBvcnQgZm9yIExvZ2ljIFNESy1MSDdBNDA0IGJvYXJkIGFuZCBjbGVhbiB1cCB0aGUKKyAgTEg3QTQwNCByZWdpc3RlciBtYWNyb3MuCisKKyogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAxMCBKdW4gMjAwNDoKKyAgTW9kaWZ5IGNvZGUgdG8gc2VsZWN0IGNvcnJlY3Qgc2VyaWFsIGNsb2NrIG9uIFNhbmRwb2ludDgyNDUKKworKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEwIEp1biAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgSW50ZWwgSzMgc3RyYXRhIGZsYXNoLgorCisqIFBhdGNoIGJ5IFRob21hcyBCcmFuZCwgMTAgSnVuIDIwMDQ6CisgIEZpeCAibG9hZHMiIGNvbW1hbmQgb24gREsxUzEwIGJvYXJkCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDkgSnVuIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciA4TUIgZmxhc2ggU0lNTSBhbmQgSkZGUzIgZmlsZSBzeXN0ZW0gb24KKyAgTW90b3JvbGEgRkFEUyBib2FyZCBhbmQgaXRzIGRlcml2YXRpdmVzIChNUEM4NnhBRFMsIE1QQzg4NUFEUykuCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDkgSnVuIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBBbmFsb2d1ZSZNaWNybyBBZGRlcjg3eCBhbmQgdGhlIG9sZGVyIEFkZGVySUkgYm9hcmQuCisKKyogUGF0Y2ggYnkgTWluZy1MZW4gV3UsIDA5IEp1biAyMDA0OgorICBBZGQgc3VwcHBvcnQgZm9yIE1DOTMyOCAoRGFyZ29uYmFsbCkgQ1BVIGFuZCBNb3Rvcm9sYSBNWDFBRFMgYm9hcmQKKworKiBQYXRjaCBieSBTYW0gU29uZywgMDkgSnVuIDIwMDQ6CisgIC0gQWRkIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQKKyAgLSBVcGRhdGUgRkxBU0ggZHJpdmVyIGZvciA0KkFNMjlETDMyM0RCOTBWSQorICAtIEFkZCBvcHRpb24gY29uZmlndXJhdGlvbiBvZiBDRkdfRU5WX0lTX0lOX05WUkFNIG9uIFJQWGxpdGVfRFcgYm9hcmQKKworKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwOCBKdW5lIDIwMDQ6CisgIC0gTWFrZSBNUEM1MjAwIGJvYXJkcyBldmFsdWF0ZSB0aGUgU1ZSIHRvIHByaW50IHByb2Nlc3NvciBuYW1lIGFuZAorICAgIHZlcnNpb24gaW4gY2hlY2tjcHUoKSAoY3B1L21wYzV4eHgvY3B1LmMpLgorCisqIFBhdGNoIGJ5IEthaS1Vd2UgQmxvZW0sIDA2IE1heSAyMDA0OgorICBGaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gY3JhbWZzIGNvZGUKKworKiBQYXRjaCBieSBUb20gQXJtaXN0ZWFkLCAwNCBKdW4gMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIE1BWDY5MDAgUlRDCisKKyogUGF0Y2hlcyBieSBMYWRpc2xhdiBNaWNobCwgMDMgSnVuIDIwMDQ6CisgIC0gZml4IGNmaV9mbGFzaC5jIG9uIExFIHN5c3RlbXMKKyAgLSBsZXQgJ21ha2UgbXJwcm9wZXInIGRlbGV0ZSB1LWJvb3QuaW1nIGFzIHdlbGwKKyAgLSB0dXJuIHByaW50ZiBpbnRvIGRlYnVnIGluIGNmaV9mbGFzaC5jCisKKyogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDI4IE1heSAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgRXh5cyBYU0VuZ2luZSBib2FyZAorCisqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE1heSAyMDA0OgorICBGaXggYSBNUEM1eHh4IEkyQyB0aW1pbmcgaXNzdWUgaW4gaTJjX3Byb2JlKCkuCisKKyogUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjcgTWF5IDIwMDQ6CisgIEZpeCBib2FyZF9pbml0X2YoKSBmb3IgZGJhdTF4MDAgYm9hcmQuCisKKyogUGF0Y2ggYnkgSW1yZSBEZWFrLCAyNiBNYXkgMjAwNDoKKyAgT24gT01BUDE2MTAgcGxhdGZvcm1zIGNoZWNrIGlmIGJvb3RpbmcgZnJvbSBSQU0oQ1MwKSBvciBmbGFzaChDUzMpLgorICBTZXQgZmxhc2ggYmFzZSBhY2NvcmRpbmdseSwgYW5kIGRlY2lkZSB3aGV0aGVyIHRvIGRvIG9yIHNraXAgYm9hcmQKKyAgc3BlY2lmaWMgc2V0dXAgc3RlcHMuCisKKyogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDI2IE1heSAyMDA0OgorICBBZGQgbWlzc2luZyBkZWZpbmUgaW4gaW5jbHVkZS9hc20tbTY4ay9nbG9iYWxfZGF0YS5oCisKKyogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDI1IE1heSAyMDA0OgorICBBZGQgbWlzc2luZyBmdW5jdGlvbnMgZ2V0X3RpY2tzKCkgYW5kIGdldF90YmNsaygpIGluIGxpYl9tNjhrL3RpbWUuYworCisqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMjQgTWF5IDIwMDQ6CisgIGZpeCBTRFJBTSBpbml0aWFsaXphdGlvbiBmb3IgTFBEN0E0MDAgYm9hcmQuCisKKyogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMjAgTWF5IDIwMDQ6CisgIGFkZCBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCBpbiBOQU5EIGZsYXNoCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjAgTWF5IDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBJbnRlcnBoYXNlIGlTUEFOIGJvYXJkcy4KKworKiBQYXRjaGVzIGJ5IFBhdWwgUnVobGFuZCwgMTcgTWF5IDIwMDQ6CisgIC0gQWRkIEkvTyBmdW5jdGlvbnMgdG8gdGhlIHNtYzkxMTExIGV0aGVybmV0IGRyaXZlciB0byBzdXBwb3J0IHRoZQorICAgIExvZ2ljIExQRDdBNDB4IGJvYXJkcy4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIExvZ2ljIFpvb20gTEg3QTQweCBiYXNlZCBTREsgYm9hcmQocyksCisgICAgc3BlY2lmaWNhbGx5IHRoZSBMUEQ3QTQwMC4KKworKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTUgTWF5IDIwMDQ6CisgIC0gY2FsbCBNQUMgYWRkcmVzcyByZWFkaW5nIGNvZGUgYWxzbyBmb3IgU01TQzkxQzExMTsKKyAgLSBtYWtlIFNNU0M5MUMxMTEgdGltZW91dCBjb25maWd1cmFibGUsIHJlbW92ZSBkdXBsaWNhdGUgY29kZQorICAtIGZpeCBnZXRfdGltZXIoKSBmb3IgUFhBCisgIC0gdXBkYXRlIGRvYy9SRUFETUUuSkZGUzIKKyAgLSB1c2UgImJvb3RmaWxlIiBlbnYgdmFyaWFibGUgYWxzbyBmb3IgamZmczIKKworKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNCBNYXkgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBDU0I0NzIgYm9hcmQgKDhNQiBGbGFzaCBSZXYpCisKKyogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTQgTWF5IDIwMDQ6CisgIC0gZmxhc2guaDogbW9yZSBmbGFzaCB0eXBlcyBhZGRlZAorICAtIGltbWFwXzgyNjAuaDogc29tZSBiaXRzIGFkZGVkICh1c2VmdWwgZm9yIFJNSUkpCisgIC0gY21kX2NvbmluZm8uYzogdHlwbyBjb3JyZWN0ZWQsIHByaW50ZiAtPiBwdXRzCisgIC0gcmVkdWNlZCBzaXplIGJ5IHJlcGxhY2luZyBzcGFjZXMgd2l0aCB0YWIKKworKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEzIE1heSAyMDA0OgorICBBZGQgJ2ltZ2V4dHJhY3QnIGNvbW1hbmQ6IGV4dHJhY3Qgb25lIHBhcnQgb2YgYSBtdWx0aSBmaWxlIGltYWdlLgorCisqIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAxMSBNYXkgMjAwNDoKKyAgRHluYW1pY2FsbHkgaGFuZGxlIFJFVjEgYW5kIFJFVjIgTVBDODV4eCBwYXJ0cy4KKyAgICAoSm9uIExvZWxpZ2VyLCAxMC1NYXktMjAwNCkuCisgIE5ldyBjb25zaXN0ZW50IG1lbW9yeSBtYXAgYW5kIExvY2FsIEFjY2VzcyBXaW5kb3cgYWNyb3NzIE1QQzg1eHggbGluZS4KKyAgTmV3IENDU1JCQVIgYXQgMHhFMDAwXzAwMDAgbm93LgorICBBZGQgUkFQSUQgSS9PIG1lbW9yeSBtYXAuCisgIE5ldyBtZW1vcnkgbWFwIGluIFJFQURNRS5NUEM4NXh4YWRzCisgICAgKEt1bWFyIEdhbGEsIDEwLU1heS0yMDA0KQorICBCZXR0ZXIgYm9hcmQgYW5kIENQVSBpZGVudGlmaWNhdGlvbiBvbiBNUEM4NXh4IGJvYXJkcyBhdCBib290LgorICAgIChKb24gTG9lbGlnZXIsIDEwLU1heS0yMDA0KQorICBTRFJBTSBjbG9jayBjb250cm9sIGZpeGVzIG9uIE1QQzg1NDBBRFMgJiBNUEM4NTYwIGJvYXJkcy4KKyAgU29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE1QQzg1NDBBRFMgJiBNUEM4NTYwQURTIGNsZWFuZWQgdXAuCisgICAgKEppbSBSb2JlcnRzb24sIDEwLU1heS0yMDA0KQorICBSZXdyaXRlIG9mIHRoZSBNUEM4NXh4IFRocmVlIFNwZWVkIEV0aGVybmV0IENvbnRyb2xsZXIgKFRTRUMpIGRyaXZlci4KKyAgU3VwcG9ydHMgbXVsdGlwbGUgUEhZcy4KKyAgICAoQW5keSBGbGVtaW5nLCAxMC1NYXktMjAwNCkKKyAgU29tZSBSRUFETUUuTVBDODV4eGFkcyB1cGRhdGVzLgorICAgIChLdW1hciBHYWxhLCAxMC1NYXktMjAwNCkKKyAgQ29weXJpZ2h0IHVwZGF0ZXMgZm9yICJGcmVlc2NhbGUiCisgICAgKEFuZHkgRmxlbWluZywgMTAtTWF5LTIwMDQpCisKKyogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTEgTWF5IDIwMDQ6CisgIEFkZCBmbGFzaCBzdXBwb3J0IGZvciBTVCBNMjlXMDQwQgorICBSZWR1Y2UgSlNFIHNwZWNpZmljIGZsYXNoLmMgdG8gcmVtb3ZlIGRlYWQgY29kZS4KKworKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMDQgTWF5IDIwMDQ6CisgIEZpeCBjbGVhcl9ic3MgY29kZSBmb3IgQVJNIHN5c3RlbXMgKGFsbCBleGNlcHQgczNjNDRiMCB3aGljaAorICBkb2Vzbid0IGNsZWFyIEJTUyBhdCBhbGw/KQorCisqIEZpeCAicGluZyIgcHJvYmxlbSBvbiBJTkMtSVAgYm9hcmQuIFN0cmFuZ2UgcHJvYmxlbToKKyAgU29tZXRpbWVzIHRoZSBzdG9yZSB3b3JkIGluc3RydWN0aW9uIGhhbmdzIHdoaWxlIHdyaXRpbmcgdG8gb25lIG9mCisgIHRoZSBTd2l0Y2ggcmVnaXN0ZXJzLCBidXQgb25seSBpZiB0aGUgbmV4dCBpbnN0cnVjdGlvbiBpcyAxNi1ieXRlCisgIGFsaWduZWQuIE1vdmluZyB0aGUgaW5zdHJ1Y3Rpb24gaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvbWVob3cKKyAgbWFrZXMgdGhlIHByb2JsZW0gZ28gYXdheS4KKworKiBQYXRjaCBieSBSaXNoaSBCaGF0dGFjaGFyeWEsIDA4IE1heSAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDU5MTIgT1NLIEJvYXJkCisKKyogUGF0Y2ggYnkgU2FtIFNvbmcgTWF5LCAwNyBNYXkgMjAwNDoKKyAgRml4IHR5cG8gb2YgVVBNIHRhYmxlIGZvciBybXUgYm9hcmQKKworKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDUgTWF5IDIwMDQ6CisgIC0gSW50cmFjb20gYm9hcmQgdXBkYXRlLgorICAtIEFkZCBDb2RlYyBQT1NULgorCisqIEFkZCBzdXBwb3J0IGZvciB0aGUgc2Vjb25kIEV0aGVybmV0IGludGVyZmFjZSBmb3IgdGhlICdQUENoYW1lbGVvbicKKyAgYm9hcmQuCisKKyogUGF0Y2ggYnkgRGF2ZSBQZXZlcmxleSwgMzAgQXByIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBPTUFQNzMwIFBlcnNldXMyIERldmVsb3BtZW50IGJvYXJkCisKKyogUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAyOSBBcHIgMjAwNDoKKyAgRml4IGZsYXNoIGNoaXAtc2VsZWN0IChPUjApIG9wdGlvbiByZWdpc3RlciBzZXR0aW5nIG9uIEZBRFMgYm9hcmRzLgorCisqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CisgIFJlcG9ydCBNSUkgbmV0d29yayBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmcgcHJvcGVybHkgd2hlbgorICBhdXRvLW5lZ290aWF0ZSBpcyBub3QgZW5hYmxlZC4KKworKiBQYXRjaCBieSBKYXJyZXR0IFJlZGQsIDI5IEFwciAyMDA0OgorICBGaXggaGFuZyBvbiByZXNldCBvbiBPY290ZWEgYm9hcmQgZHVlIHRvIGZsYXNoIGluIHdyb25nIG1vZGUuCisKKyogUGF0Y2ggYnkgRGF2ZSBQZXZlcmxleSwgMjkgQXByIDIwMDQ6CisgIGFkZCBNQUMgYWRkcmVzcyBkZXRlY3Rpb24gdG8gc21jOTExMTEgZHJpdmVyCisKKyogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyOCBBcHIgMjAwNDoKKyAgZml4IHR5cG8gaW4gbGliX2FybS9ib2FyZC5jCisKKyogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMjAgQXByIDIwMDQ6CisgIC0gUkVBRE1FIHVwZGF0ZTogYWRkIENPTkZJR19DU0IyNzIgYW5kIGNzYjI3Ml9jb25maWcKKyAgLSBhZGQgZGVzY3JpcHRpb25zIGZvciBzb21lIE1JSS9QSFkgb3B0aW9ucywgQ09ORklHX0kyQ0ZBU1QsIGFuZAorICAgIGkyY2Zhc3QgZW52aXJvbm1lbnQgdmFyaWFibGUKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxOSBBcHIgMjAwNDoKKyAgLSBSZW5hbWUgRFVFVF9BRFMgdG8gTVBDODg1QURTCisgIC0gUmVuYW1lIENPTkZJR19EVUVUIHRvIENPTkZJR19NUEM4ODVfRkFNSUxZCisgIC0gUmVuYW1lIENPTkZJR184NjZfZXRfYWwgdG8gQ09ORklHX01QQzg2Nl9GQU1JTFkKKyAgLSBDbGVhbiB1cCBGQURTIGZhbWlseSBwb3J0IHRvIHVzZSB0aGUgbmV3IGRlZmluZXMKKworKiBGaXggUENJIHN1cHBvcnQgb24gQ1BDNDUgYm9hcmQKKworKiBQYXRjaCBieSBTY290dCBNY051dHQsIDI1IEFwciAyMDA0OgorICBBZGQgTmlvcyBHREIvSlRBRyBDb25zb2xlIHN1cHBvcnQ6CisgIC0gQWRkIHN0dWJzIHRvIHN1cHBvcnQgZ2RiIHZpYSBKVEFHLgorICAtIEFkZCBzdXBwb3J0IGZvciBjb25zb2xlIG92ZXIgSlRBRy4KKyAgLSBNaW5vciBjbGVhbnVwLgorCisqIEFkZCBzdXBwb3J0IGZvciBDQVRjZW50ZXIgYm9hcmQgKGJhc2VkIG9uIFBQQ2hhbWVsZW9uIE1FIG1vZHVsZSkKKworKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMiBNYXkgMjAwNDoKKyAgVXNpbmcgZXh0ZXJuYWwgd2F0Y2hkb2cgZm9yIEtVUDQgYm9hcmRzIGluIG1wYzh4eC9jcHUuYzsKKyAgbG9hZF9zZXJudW1fZXRoYWRkcigpIGZvciBLVVA0IGJvYXJkcyBpbiBsaWJfcHBjL2JvYXJkLmM7CisgIHZhcmlvdXMgY2hhbmdlcyB0byBLVVA0IGJvYXJkIHNwZWNpZmljIGZpbGVzCisKKyogRml4IG1pbm9yIG5ldHdvcmsgcHJvYmxlbSBvbiBNUEM1MjAwOiBuZWVkIHNvbWUgZGVsYXkgYmV0d2VlbgorICByZXNldHRpbmcgdGhlIFBIWSBhbmQgc2VuZGluZyB0aGUgZmlyc3QgcGFja2V0LiBJbXBsZW1lbnRlZCBpbiBhCisgICJuYXR1cmFsIiB3YXkgYnkgaW52b2tpbmcgdGhlIFBIWSByZXNldCBhbmQgaW5pdGlhbGl6YXRpb24gY29kZQorICBvbmx5IG9uY2UgYWZ0ZXIgcG93ZXIgb24gdnMuIGVhY2ggdGltZSB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAuCisKKyogQWRkIHNvbWUgbGltaXRlZCBzdXBwb3J0IGZvciBsb3ctc3BlZWQgZGV2aWNlcyB0byBTTDgxMSBVU0IgY29udHJvbGxlcgorICAoYXQgbGVhc3QgInVzYiByZXNldCIgbm93IHBhc3NlcyBzdWNjZXNzZnVsbHkgYW5kICJ1c2IgaW5mbyIgZGlzcGxheXMKKyAgY29ycmVjdCBpbmZvcm1hdGlvbikKKworKiBDaGFuZ2UgaW5pdCBzZXF1ZW5jZSBmb3IgbXVsdGlwbGUgbmV0d29yayBpbnRlcmZhY2VzOiBpbml0aWFsaXplCisgIG9uLWNoaXAgaW50ZXJmYWNlcyBiZWZvcmUgZXh0ZXJuYWwgY2FyZHMuCisKKyogRml4IG1lbW9yeSBsZWFrIGluIHRoZSBOQU5ELXNwZWNpZmljIEpGRlMyIGNvZGUKKworKiBGaXggU0w4MTEgVVNCIGNvbnRyb2xsZXIgd2hlbiBhdHRhY2hlZCB0byBhIFVTQiBodWIKKworKiBGaXggY29uZmlnIG9wdGlvbiBzcGVsbGluZyBpbiBQTTUyMCBjb25maWcgZmlsZQorCisqIEZpeCBQSFkgZGlzY292ZXJ5IHByb2JsZW0gaW4gY3B1L21wYzh4eC9mZWMuYyAoaW50cm9kdWNlZCBieQorICBwYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAzMCBNYXIgMjAwNCkKKworKiBGaXggbWlub3IgTkFORCBKRkZTMiByZWxhdGVkIGlzc3VlCisKKyogRml4ZXMgZm9yIFNMODExIFVTQiBjb250cm9sbGVyOgorICAtIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciBicm9rZW4gbWVtb3J5IHN0aWNrCisgIC0gaW1wcm92ZSBlcnJvciBoYW5kbGluZworCisqIEluY3JlYXNlIHBhY2tldCBzZW5kIHRpbWVvdXQgdG8gMSBtcyBpbiBjcHUvbXBjOHh4L3NjYy5jIHRvIGJldHRlcgorICBjb3BlIHdpdGggY29uZ2VzdGVkIG5ldHdvcmtzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjE6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjMgQXByIDIwMDQ6CisgIEZpeCBWU0MvQ0lTIDgyMDEgcGh5IGRlc2NyYW1ibGVyIGludGVyb3BlcmFiaWxpdHkgdGltaW5nIGR1ZSB0bworICBlcnJhdGEgZnJvbSBWaXRlc3NlIFNlbWljb25kdWN0b3IuCisKKyogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDIyIEFwciAyMDA0OgorICBGaXggZXRoZXJuZXQgY29uZmlndXJhdGlvbiBmb3IgInZlcnNhdGlsZSIgYm9hcmQKKworKiBQYXRjaCBieSBLc2hpdGlqIEd1cHRhLCAyMSBBcHIgMjAwNDoKKyAgUmVtb3ZlIGJ1c3kgbG9vcCBhbmQgdXNlIE1QVSB0aW1lciBmciB1c2xlZXAoKSBvbiBPTUFQMTUxMC8xNjEwIGJvYXJkcworCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI0IEZlYiAyMDA0OgorICBGaXggYSBidWcgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXI6CisgIFRoZSBNSUkgaW50ZXJmYWNlIGlzIG5vdyBpbml0aWFsaXplZCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBQSFkuCisKKyogUGF0Y2ggYnkgSm9obiBLZXJsLCAxOSBBcHIgMjAwNDoKKyAgVXNlIFUtYm9vdCdzIG1paXBoeS5oIGZvciBQSFkgcmVnaXN0ZXIgbmFtZXMsIHJhdGhlciB0aGFuCisgIGludHJvZHVjaW5nIGEgbmV3IGhlYWRlciBmaWxlLgorCisqIFVwZGF0ZSBwY2lfaWRzLmggZnJvbSBsaW51eC0yLjQuMjYKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxOSBBcHIgMjAwNDoKKyAgRml4IHByb2JsZW0gY2F1c2UgYnkgVkxBTiBmdW5jdGlvbiBvbiBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZQorICB3aXRob3V0IFZMQU4gZW52aXJvbm1lbnQKKworKiBDbGVhbiB1cCB0aGUgVFFNOHh4X1lZTUh6IGNvbmZpZ3VyYXRpb25zOyBhbGxvdyB0byB1c2UgdGhlIHNhbWUKKyAgYmluYXJ5IGltYWdlIGZvciBhbGwgY2xvY2sgZnJlcXVlbmNpZXMuIEltcGxlbWVudCBydW4tdGltZQorICBvcHRpbWl6YXRpb24gb2YgZmxhc2ggYWNjZXNzIHRpbWluZyBiYXNlZCBvbiB0aGUgYWN0dWFsIGJ1cworICBmcmVxdWVuY3kuCisKKyogTW9kaWZ5IEtVUDRYIGJvYXJkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIFNMODExIGRyaXZlciBmb3IgVVNCIG1lbW9yeQorICBzdGlja3MgKGluY2x1ZGluZyBGQVQgLyBWRkFUIGZpbGVzeXN0ZW0gc3VwcG9ydCkKKworKiBBZGQgU0w4MTEgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBkcml2ZXIgZm9yIFVTQgorCisqIEFkZCBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XIGRlc3JpcHRpb24gdG8gUkVBRE1FCisKKyogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE5IEFwciAyMDA0OgorICBBbGxvdyB0byB1c2Ugc2hlbGwgc3R5bGUgc3ludGF4IChpLiBlLiAke3Zhcn0gKSB3aXRoIHN0YW5kYXJkIHBhcnNlci4KKyAgTWlub3IgcGF0Y2hlcyBmb3IgSW50cmFjb20gYm9hcmRzLgorCisqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsLCAxOSBBcHIgMjAwNDoKKyAgY2xlYW51cCBzdXBwb3J0IGZvciBDRi9JREUgb24gUENNQ0lBIGZvciBQWEEyNVgKKworKiBUZW1wb3JhcmlseSBkaXNhYmxlZCBKb2huIEtlcmwncyBleHRlbmRlZCBNSUkgY29tbWFuZCBjb2RlIGJlY2F1c2UKKyAgIm1paXZhbHMuaCIgaXMgbWlzc2luZworCisqIFBhdGNoZXMgYnkgTWFyayBKb25hcywgMTMgQXByIDIwMDQ6CisgIC0gUmVtb3ZlIENTMCBjaGlwIHNlbGVjdCB0aW1pbmcgc2V0dGluZyBmcm9tIGNwdS9tcGM1eHh4L3N0YXJ0LlMKKyAgLSBBZGQgc3luYyBpbnN0cnVjdGlvbnMgdG8gSWNlQ3ViZSBTRFJBTSBpbml0IGNvZGUKKyAgLSBNb3ZlIFNEUkFNIGNoaXAgY29uc3RhbnRzIGludG8gc2VwZXJhdGUgaW5jbHVkZSBmaWxlcworICAtIFVuaWZ5IEREUiBhbmQgU0RSIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgLSBVbmlmeSBhbGwgSWNlQ3ViZSAoTGl0ZTV4eHgpIHRhcmdldCBuYW1lcworCisqIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTYgQXByIDIwMDQ6CisgIEVuYWJsZSByYW5nZXMgaW4gbWlpIGNvbW1hbmQsIGUuZy4gbWlpIHJlYWQgMC0xZiAwIG9yCisgIG1paSByZWFkIDQtNyAxOC0xYS4gIEFsc28gYWRkIG1paSBkdW1wIHN1YmNvbW1hbmQgZm9yCisgIHByZXR0eS1wcmludGluZyBzdGFuZGFyZCByZWdzIDAtNS4KKworKiBQYXRjaCBieSAgU3RlcGhlbiBXaWxsaWFtcywgMTYgQXByaWwgMjAwNDoKKyAgZml4IHR5cG8gaW4gSlNFLmg7IHVwZGF0ZSBNQUlOVEFJTkVSUworCisqIFBhdGNoIGJ5IE1hdHRoZXcgUy4gTWNDbGludG9jaywgMTQgQXByIDIwMDQ6CisgIGZpeCBpbml0ZHJhbSBmdW5jdGlvbiBmb3IgdXR4ODI0NSBib2FyZAorCisqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAxNCBBcHIgMjAwNDoKKyAgdXNlIEFUQUdfSU5JVFJEMiBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgQVRBR19JTklUUkQgdGFnCisKKyogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDE4IEFwciAyMDA0OgorICBwcm92aWRlIHRoZSBJREUgUmVzZXQgRnVuY3Rpb24gZm9yIEVNSyA1MjAwIGJvYXJkcworCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDEyIEFwciAyMDA0OgorICBmaXggcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3tieXRlLHdvcmR9X3ZpYV9kd29yZCBwcm9ibGVtcworCisqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMTIgQXByIDIwMDQ6CisgIFVwZGF0ZSBtYXggUkFNIHNpemUgZm9yIGRlYnJpcyBib2FyZAorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA4IEFwciAyMDA0OgorICBBZGQgVExCIGVudHJ5IGZvciBzZWNvbmQgRElNTSBzbG90IG9uIG9jb3RlYQorCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IEFwciAyMDA0OgorICBhZGQgUlRMODE2OSBuZXR3b3JrIGRyaXZlcgorCisqIFBhdGNoIGJ5IERhbiBNYWxlaywgMDcgQXByIDIwMDQ6CisgIC0gQWRkIHN1cHBvcnQgZm9yIFJQQy9TVHggR1AzLCBNb3Rvcm9sYSA4NTYwIGJvYXJkCisgIC0gVXBkYXRlIDg1eHggVFNFQyBkcml2ZXIgc28gaXQgc2VhcmNoZXMgTUlJIGZvciBmaXJzdCBhdmFpbGFibGUgUEhZCisgICAgYW5kIHVzZXMgdGhhdCBvbmUuCisgIC0gQWRkIGZ1bmN0aW9ucyB0byBzdXBwb3J0IGNvbnNvbGUgTUlJIGNvbW1hbmRzLgorCisqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDA3IEFwciAyMDA0OgorICBNb3ZlIGluaXRpYWxpemF0aW9uIG9mIGJpX2lpY19mYXN0W10KKyAgZnJvbSBib2FyZF9pbml0X2YoKSB0byBib2FyZF9pbml0X3IoKQorCisqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgorICBDbGVhbnVwIG1pY3JvYmxhemUgcG9ydAorCisqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgQXByIDIwMDQ6CisgIEFkZCBhdXRvIFNEUkFNIG1vZHVsZSBkZXRlY3Rpb24gZm9yIERlYnJpcyBib2FyZAorCisqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAwNiBBcHIgMjAwNDoKKyAgLSBGaXggc29tZSBQQ0kgcHJvYmxlbXMgb24gdGhlIE1QQzgyNjZBRFMgYm9hcmQKKyAgLSBGaXggdGhlIGxvY2F0aW9uIG9mIHNvbWUgUENJIGVudHJpZXMgaW4gdGhlIGltbWFwIHN0cnVjdHVyZQorCisqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDA3IEFwciAyMDA0OgorICAtIGFkZCBzdXBwb3J0IGZvciBtaWNyb2JsYXplIHByb2Nlc3NvcnMKKyAgLSBhZGQgc3VwcG9ydCBmb3IgQXRtYXJrVGVjaG5vICJzdXpha3UiIGJvYXJkCisKKyogQ29uZmlndXJlIFBQQ2hhbWVsZW9uIGJvYXJkIHRvIHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gZmxhc2gKKworKiBDb25maWd1cmUgUFBDaGFtZWxlb24gYm9hcmQgdG8gdXNlIEpGRlMyIE5BTkQgc3VwcG9ydC4KKworKiBBZGRlZCBzdXBwb3J0IGZvciBKRkZTMiBmaWxlc3lzdGVtIChyZWFkLW9ubHkpIG9uIHRvcCBvZiBOQU5EIGZsYXNoCisKKyogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE2IEFwciAyMDA0OgorICBMQkE0OCBmaXhlcworCisqIFBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDE2IEFwciAyMDA0OgorICAtIGFkZCBzdXBwb3J0IGZvciBhIG5ldyB2ZXJzaW9uIG9mIGFuIEludHJhY29tIGJvYXJkIGFuZCBmaXgKKyAgICB2YXJpb3VzIG90aGVyIHRoaW5ncyBvbiBvdGhlcnMuCisgIC0gYWRkIHZlcmlmeSBzdXBwb3J0IHRvIHRoZSBjcmMzMiBjb21tYW5kIChkZWZpbmUKKyAgICBDT05GSUdfQ1JDMzJfVkVSSUZZIHRvIGVuYWJsZSBpdCkKKyAgLSBmaXggRkVDIGRyaXZlciBmb3IgTVBDOHh4IHN5c3RlbXM6CisgICAgMS4gZml4IGNvbXBpbGF0aW9uIHByb2JsZW1zIGZvciBib2FyZHMgdGhhdCB1c2UgZHluYW1pYworICAgICAgIGFsbG9jYXRpb24gb2YgRFBSQU0KKyAgICAyLiBzaHV0IGRvd24gRkVDIGFmdGVyIG5ldHdvcmsgdHJhbnNmZXJzCisgIC0gSFVTSCBwYXJzZXIgZml4ZXM6CisgICAgMS4gQSBuZXcgdGVzdCBjb21tYW5kIHdhcyBhZGRlZC4gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZgorICAgICAgIHRoZSBvbmUgaW4gdGhlIGJvdXJuZSBzaGVsbC4KKyAgICAyLiBBIG5ldyBleGl0IGNvbW1hbmQgd2FzIGFkZGVkIHdoaWNoIHRlcm1pbmF0ZXMgdGhlIGN1cnJlbnQKKyAgICAgICBleGVjdXRpbmcgc2NyaXB0LgorICAgIDMuIEZpeGVkIGhhbmRpbmcgb2YgJD8gKGV4aXQgY29kZSBvZiBsYXN0IGV4ZWN1dGVkIGNvbW1hbmQpCisgIC0gRml4IHNvbWUgY29tcGlsZSBwcm9ibGVtczsKKyAgICBhZGQgIm9uY2UiIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBuZXRyZXRyeSB2YXJpYWJsZQorCisqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDIgQXByIDIwMDQ6CisgIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBBc3NhYmV0IGJvYXJkCisKKyogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMDEgQXByIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBQaWN0dXJlIEVsZW1lbnRzIEpTRSBib2FyZAorCisqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsLCAwMSBBcHIgMjAwNDoKKyAgQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBQWEEgc3lzdGVtcy4KKworKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAzMCBNYXIgMjAwNDoKKyAgLSBhZGQgYXV0by1jb21wbGV0ZSBzdXBwb3J0IHRvIHRoZSBVLUJvb3QgQ0xJCisgIC0gYWRkIHN1cHBvcnQgZm9yIE5FVFRBIGFuZCBORVRQSE9ORSBib2FyZHM7IGZpeCBORVRWSUEgYm9hcmQKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVwc29uIDE1Nnggc2VyaWVzIG9mIGdyYXBoaWNhbCBkaXNwbGF5cworICAgIChUaGVzZSBkaXNwbGF5cyBhcmUgc2VyaWFsIGFuZCBub3Qgc3VpdGFibGUgZm9yIHVzaW5nIGEgbm9ybWFsCisgICAgZnJhbWVidWZmZXIgY29uc29sZSBvbiB0aGVtKQorICAtIGFkZCBpbmZyYXN0cnVjdHVyZSBuZWVkZWQgaW4gb3JkZXIgdG8gUE9TVCBhbnkgRFNQcyBpbiBhIGJvYXJkCisgIC0gaW1wcm92ZSBhbmQgZml4IHZhcmlvdXMgdGhpbmdzIGluIHRoZSBNUEM4eHggRkVDIGRyaXZlcjoKKyAgICAxLiBUaGUgbmV3IDg3eCBhbmQgODh4IHNlcmllcyBvZiBwcm9jZXNzb3JzIGhhdmUgdHdvIEZFQ3MsCisgICAgICAgYW5kIHRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIHRoZW0gYm90aC4KKyAgICAyLiBBbm90aGVyIGNoYW5nZSBpbiB0aGUgODd4Lzg4eCBzZXJpZXMgaXMgc3VwcG9ydCBmb3IKKyAgICAgICB0aGUgUk1JSSAoUmVkdWNlZCBNSUkpIGludGVyZmFjZS4gSG93ZXZlciBudW1lcm91cworICAgICAgIGNoYW5nZXMgYXJlIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgc2luY2UgdGhlIFBIWXMKKyAgICAgICBhcmUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGxpbmVzLiBUaGF0IG1lYW5zIHRoYXQKKyAgICAgICB5b3UgaGF2ZSB0byBhZGRyZXNzIHRoZW0gY29ycmVjdGx5IG92ZXIgdGhlIE1JSQorICAgICAgIGludGVyZmFjZS4KKyAgICAzLiBXZSBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBNSUkvUk1JSSBpbnRlcmZhY2UKKyAgICAgICBjb25maWd1cmF0aW9uIHRvIHdoYXQgdGhlIFBIWSByZXBvcnRzLgorICAtIEZpeCBwcm9ibGVtIHdoZW4gcmVhZGluZ3RoZSBNSUkgc3RhdHVzIHJlZ2lzdGVyLiBEdWUgdG8gdGhlCisgICAgaW50ZXJuYWwgZGVzaWduIG9mIG1hbnkgUEhZcyB5b3UgaGF2ZSB0byByZWFkIHRoZSByZWdpc3RlcgorICAgIHR3aWNlLiBUaGUgcHJvYmxlbSBpcyBtb3JlIGFwcGFyZW50IGluIDEwTWJpdCBtb2RlLgorICAtIGFkZCBuZXcgbW9kZSAiLmpmZnMycyIgZm9yIHJlYWRpbmcgZnJvbSBhIE5BTkQgZGV2aWNlOiBpdCBqdXN0CisgICAgc2tpcHMgb3ZlciBiYWQgYmxvY2tzLgorICAtIGFkZCBuZXR3b3JraW5nIHN1cHBvcnQgZm9yIFZMQU5zICg4MDIuMXEpLCBhbmQgQ0RQIChDaXNjbworICAgIERpc2NvdmVyeSBQcm90b2NvbCkKKyAgLSBzb21lIG1pbm9yIHBhdGNoZXMgLyBjbGVhbnVwCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjggTWFyIDIwMDQ6CisgIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzIgZmFtaWx5IGluY2x1ZGluZyBNUEM4MjQ3LzgyNDgvODI3MS84MjcyCisgIC0gQWRkIHN1cHBvcnQgZm9yIE1QQzgyNzJBRFMgZXZhbHVhdGlvbiBib2FyZCAoYW5vdGhlciBmbGF2b3VyIG9mIE1QQzgyNjBBRFMpCisgIC0gQ2hhbmdlIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGZvciBNUEM4MjYwQURTIGZhbWlseQorCisqIGFkZCBzdGFydHVwIGNvZGUgdG8gY2xlYXIgdGhlIEJTUyBvZiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucworCisqIEZpeCBpZiAvIGVsaWYgaGFuZGxpbmcgYnVnIGluIEhVU0ggc2hlbGwKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4wOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIFBhdGNoIGJ5IE1hcmsgSm9uYXM6IFJlbW92ZSBjb25maWcudG1wIGZpbGVzIG9ubHkgd2hlbgorICB1bmNvbmZpZ3VyaW5nIHRoZSBib2FyZAorCisqIEFkYXB0IFJNVSBib2FyZCBmb3IgYmlnZ2VyIGZsYXNoIG1lbW9yeQorCisqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDEzIE1hciAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgS1VQNFggQm9hcmQKKworKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjEgTWFyIDIwMDQKKyAgQWRkIFJlaXNlcmZzIHN1cHBvcnQKKworKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMCBNYXIgMjAwNAorICAtIEFkZCBhdXRvLXJlbGVhc2UgZm9yIFNNU0MgTEFOOTFjMTExIGRyaXZlcgorICAtIEFkZCBzYXZlL3Jlc3RvcmUgb2YgUFRSIGFuZCBQTlIgcmVncyBhcyBzdWdnZXN0ZWQgaW4gZGF0YXNoZWV0CisKKyogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTkgTWFyY2ggMjAwNAorICBJbmNyZWFzZSBzcGVlZCBvZiBzZWN0b3IgcmVhZHMgZnJvbSBTeXN0ZW1BQ0UsCisgIHNob3J0ZW4gcG9sbCB0aW1lb3V0IGFuZCByZW1vdmUgYSB1c2VsZXNzIHJlc2V0CisKKyogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTkgTWFyIDIwMDQ6CisgIE1ha2UgR2lnRSBQSFkgMTAwME1icHMgU3BlZWQvRHVwbGV4IGRldGVjdGlvbiBjb25kaXRpb25hbAorICAoQ09ORklHX1BIWV9HSUdFKQorCisqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTggTWFyIDIwMDQ6CisgIHByZXZlbnQgbWFjaGluZSBjaGVja3MgZHVyaW5nIGEgUENJIHNjYW4KKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKKyAgRml4IHN0cmluZyBjbGVhbmluZyBpbiBJREUgaWRlbnRpZmljYXRpb24KKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKKyAgLSBVbmlmeSB2aWRlbyBtb2RlIGhhbmRsaW5nIGZvciBDaGlwcyAmIFRlY2hub2xvZ2llcyA2OTAwMCBWaWRlbworICAgIGNoaXAgYW5kIFNpbGljb24gTW90aW9uIFNNSSA3MTIvNzEwLzgxMCBWaWRlbyBjaGlwCisgIC0gQWRkIHNlbGVjdGlvbiBvZiB0aGUgdmlkZW8gb3V0cHV0IChDUlQgb3IgTENEKSB2aWEgJ3ZpZGVvb3V0JworICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUgU2lsaWNvbiBNb3Rpb24KKyAgLSBSRUFETUUgdXBkYXRlCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CisgIGluY2x1ZGUvY29tbW9uLmggdHlwbyBmaXgKKworKiBQYXRjaGVzIGJ5IFRvbHVuYXkgT3JrdW4sIDE3IE1hciAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciBiZC0+YmlfaWljX2Zhc3RbXSBpbml0aWFsaXphdGlvbiB2aWEgZW52aXJvbm1lbnQKKyAgICB2YXJpYWJsZSAiaTJjZmFzdCIgKENPTkZJR19JMkNGQVNUKQorICAtIEFkZCAiaTJjZmFzdCIgdS1ib290IGVudmlyb25tZW50IHZhcmlhYmxlIHN1cHBvcnQgZm9yIGNzYjI3MgorCisqIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDE3IE1hciAyMDA0OgorICBJZ25vcmUgJ1wwJyBjaGFyYWN0ZXJzIGluIGNvbnNvbGUgaW5wdXQgZm9yIHVzZSB3aXRoIHRlbG5ldCBhbmQKKyAgdGVsY28gcGFkcy4KKworKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDE3IE1hciAyMDA0OgorICB0eXBvIGZpeCBmb3Igc3Ryc3dhYiBwcm90b3R5cGUgI2lmZGVmCisKKyogUGF0Y2hlcyBieSBUaG9tYXMgVmllaHdlZ2VyLCAxNiBNYXIgMjAwNDoKKyAgLSBzaG93IFBDSSBjbG9jayBmcmVxdWVuY3kgb24gTVBDODI2MCBzeXN0ZW1zCisgIC0gYWRkIEZDQ19QU01SX1JNSUkgZmxhZyBmb3IgSGlQNyBwcm9jZXNzb3JzCisgIC0gaW4gZG9famZmczJfZnNsb2FkKCksIHRha2UgbG9hZCBhZGRyZXNzIGZyb20gbG9hZF9hZGRyIGlmIG5vdCBzZXQKKyAgICBleHBsaWNpdCwgdXBkYXRlIGxvYWRfYWRkciBvdGhlcndpc2UKKyAgLSByZXBsYWNlZCBwcmludGYgYnkgcHV0Yy9wdXRzIHdoZW4gbm8gZm9ybWF0dGluZyBpcyBuZWVkZWQKKyAgICAoc21hbGxlciBjb2RlIHNpemUsIGZhc3RlciBleGVjdXRpb24pCisKKyogUGF0Y2ggYnkgUGhpbGxpcHBlIFJvYmluLCAxNiBNYXIgMjAwNDoKKyAgYXZvaWQgZGVyZWZlcmVuY2luZyBOVUxMIHBvaW50ZXIgaW4gbGliX2FybS9hcm1saW51eC5jCisKKyogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTUgTWFyIDIwMDQ6CisgIEZpeCBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8gZG9jdW1lbnRhdGlvbgorCisqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE1IE1hciAyMDA0OgorICBJbml0aWFsaXplIGJpX29wYmZyZXEgdG8gcmVhbCBPUEIgZnJlcXVlbmN5IHZpYSBnZXRfT1BCX2ZyZXEoKQorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDE1IE1hciAyMDA0OgorICBVcGRhdGUgQ1JFRElUUyAmIE1BSU5UQUlORVJTIGZpbGVzIGZvciBQUEM0NDBHWCAmIE9jb3RlYSBwb3J0CisKKyogQWRkIHN0YXJ0LXVwIGRlbGF5IHRvIG1ha2Ugc3VyZSBwb3dlciBoYXMgc3RhYmlsaXplZCBiZWZvcmUKKyAgYXR0ZW1wdGluZyB0byBzd2l0Y2ggb24gVVNCIG9uIFNYMSBib2FyZC4KKworKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDE4IE1hciAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBYTTI1MCBib2FyZCAoUFhBMjU1KQorICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTgyOCBib2FyZCAoTVBDODI4MCkKKyAgLSBBZGQgc3VwcG9ydCBmb3IgMzIgTUIgRmxhc2ggb24gUE04MjUvODI2CisgIC0gbmV3IFNEUkFNIHJlZnJlc2ggcmF0ZSBmb3IgUE04MjUvUE04MjYKKyAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTUyMCAoTVBDNTIwMCkKKyAgLSByZXBsYWNlZCBRdWVyeSBieSBJZGVudGlmeSBjb21tYW5kIGluIENQVTg2L2ZsYXNoLmMKKyAgICB0byBzdXBwb3J0IDI4RjE2MEYzQgorCisqIEZpeCB3cmFwIGFyb3VuZCBwcm9ibGVtIHdpdGggdWRlbGF5KCkgb24gQVJNOTIwVAorCisqIEFkZCBzdXBwb3J0IGZvciBNYWNyb25peCBmbGFzaCBvbiBUUkFCIGJvYXJkCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTUgTWFyIDIwMDQ6CisgIEZpeCBidWZmZXIgb3ZlcmZsb3cgaW4gSURFIGlkZW50aWZpY2F0aW9uCisKKyogRml4IHBvd2VyLW9mZiBvZiBMQ0QgZm9yIG91dC1vZi1iYW5kIHRlbXBlcmF0dXJlcyBvbiBMV01PTiBib2FyZAorCisqIFJlbW92ZSByZWR1bmRhbmQgI2RlZmluZSBpbiBJY2VDdWJlLmgKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNyBGZWIgMjAwNDoKKyAgLSBBZGRpbmcgZ2V0X3RpY2tzKCkgYW5kIGdldF90YmNsaygpIGZvciBBVDkxUk05MjAwCisgIC0gTWFueSB3aGl0ZSBzcGFjZSBmaXhlcyBpbiBjcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMKKworKiBQYXRjaGVzIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgorICBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCByZWxhdGVkIGNvZGUKKworKiBQYXRjaGVzIGJ5IFRyYXZpcyBTYXd5ZXIsIDEyIE1hciAyMDA0OgorICAtIEZpeCBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQgZm9yIDQ0MEdYCisgIC0gQWRkIEdpZ2FiaXQgRXRoZXJuZXQgU3VwcG9ydCB0byBNSUkgUEhZIHV0aWxpdGllcworCisqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTIgTWFyIDIwMDQ6CisgIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgorICAtIEJldHRlciBzdXBwb3J0IGZvciB4OC94MTYgaW1wbGVtZW50YXRpb25zCisgIC0gQWRkZWQgZmFpbHVyZSBmb3IgQU1EIGNoaXBzIGF0dGVtcHRpbmcgdG8gdXNlIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCisgIC0gQWRkZWQgZGVmaW5lcyBmb3IgQU1EIGNvbW1hbmQgYW5kIGFkZHJlc3MgY29uc3RhbnRzCisKKyogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBNYXIgMjAwNDoKKyAgRml4IGdldF9kZW50ZnJvbWRpcigpIHRvIGNvcnJlY3RseSBoYW5kbGUgZGVsZXRlZCBkZW50cmllcworCisqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTEgTWFyIDIwMDQ6CisgIFJlbW92ZSBoYXJkIGNvZGVkIG5ldHdvcmsgc2V0dGluZ3MgaW4gVEkgT01BUDE2MTAgSDIKKyAgZGVmYXVsdCBib2FyZCBjb25maWcKKworKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgorICBhZGQgc3VwcG9ydCBmb3IgQURTIEdyYXBoaWNzQ2xpZW50KyBib2FyZC4KKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMSBNYXIgMjAwNDoKKyAgLSBhZGQgYml0bWFwIGNvbW1hbmQgYW5kIHNwbGFzaCBzY3JlZW4gc3VwcG9ydCBpbiBjZmIgY29uc29sZQorICAtIGFkZCBbb3B0aW9uYWxdIG9yaWdpbiBpbiB0aGUgYml0bWFwIGRpc3BsYXkgY29tbWFuZAorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDExIE1hciAyMDA0OgorICBGaXggb2NvdGVhIGJvYXJkIGVhcmx5IGluaXQgaW50ZXJydXB0IHNldHVwLgorCisqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDExIE1hciAyMDA0OgorICBSZW1vdmUgcmVkdW5kYW5kIGNvZGU7IGFkZCAgUENJLXNwZWNpZmljIGJpdHMgdG8gaW5jbHVkZS9tcGM4MjYwLmgKKworKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDA5IE1hciAyMDA0CisgIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBTU1YgQUROUC9FU0MxIChOaW9zIFNvZnRjb3JlKQorCisqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgOSBNYXIgMjAwNDoKKyAgZml4IHJlY2VudCBidWlsZCBmYWlsdXJlIGZvciBTQTExMDAgdGFyZ2V0CisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgTWFyIDIwMDQ6CisgIFN1cHBvcnQgbmF0aXZlIGludGVycnVwdCBtb2RlIGZvciB0aGUgSUJNNDQwR1guCisgIFByZXZpb3VzbHkgaXQgd2FzIHJ1bm5pbmcgaW4gNDQwR1AgY29tcGF0aWJpbGl0eSBtb2RlLgorCisqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAwOSBNYXIgMjAwNDoKKyAgQWRkZWQgQVJNIEludGVncmF0b3IgQVAsIENQIGFuZCBWZXJzYXRpbGUgUEI5MjZFSi1TIFJlZmVyZW5jZQorICBQbGF0Zm9ybSBzdXBwb3J0LgorCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IE1hciAyMDA0OgorICBEb24ndCBvdmVyd3JpdGUgc2VydmVyIElQIGFkZHJlc3Mgb3IgYm9vdCBmaWxlIG5hbWUKKyAgd2hlbiB0aGUgYm9vdCBzZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcworCisqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDUgTWFyIDIwMDQ6CisgIFJlbW92ZWQgY29tcGlsZSB0aW1lIHJlc3RyaWN0aW9uIG9uIENGR19JMkNfU1BFRUQgZm9yIERTMTMzOCBSVEMKKworKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgorICBGaXggZWFybHkgYm9hcmQgaW5pdGlhbGl6YXRpb24gZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKKworKiBQYXRjaCBieSBFZCBPa2Vyc29uLCAzIE1hciAyMDA0OgorICBmaXggQ0ZJIGZsYXNoIHdyaXRlcyBmb3IgbGl0dGxlIGVuZGlhbiBzeXN0ZW1zCisKKyogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDAxIE1hciAyMDA0OgorICBnZW5lcmFsaXplIFVTQiBhbmQgSURFIHN1cHBvcnQgZm9yIE1QQzUyMDAgd2l0aCBhY2NvcmRpbmcKKyAgY2hhbmdlcyB0byBJY2VDdWJlLmggYW5kIFRPUDUyMDAuaAorICBhZGQgQW0yOUxWMjU2IDI1NiBNQml0IEZMQVNIIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmRzCisgIGFkZCBpbmZvIGFib3V0IFVTQiBhbmQgSURFIHRvIFJFQURNRQorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDQgTWFyIDIwMDQ6CisgIEZpeCBwcm9ibGVtcyB3aXRoIEdDQyAzLjMueCB3aGljaCBjaGFuZ2VkIGhhbmRsaW5nIG9mIGdsb2JhbAorICB2YXJpYWJsZXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIChub3cgaW4gLmJzcyBpbnN0ZWFkIG9mCisgIC5kYXRhIGFzIGJlZm9yZSkuCisKKyogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAwMiBNYXIgMjAwNDoKKyAgYWRkIHN0cnN3YWIoKSB0byBmaXggSURFIExCQSBjYXBhY2l0eSwgZmlybXdhcmUgYW5kIG1vZGVsIG51bWJlcnMKKyAgb24gbGl0dGxlIGVuZGlhbiBtYWNoaW5lcworCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDAyIE1hciAyMDA0OgorICAtIFJlbW92ZSBnZXRfdGlja3MoKSBmcm9tIE5GUyBjb2RlCisgIC0gQWRkIHZlcmlmaWNhdGlvbiBvZiBSUEMgdHJhbnNhY3Rpb24gSUQKKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMiBNYXIgMjAwNDoKKyAgY2xlYW51cCBmb3IgSURFIGFuZCBVU0IgZHJpdmVycyBmb3IgTVBDNTIwMAorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDAxIE1hciAyMDA0OgorICBPY290ZWE6CisgIC0gQWRkIElCTSBQUEM0NDBHWCBSZWYgUGxhdGZvcm0gc3VwcG9ydCAoT2NvdGVhKQorICAgIE9yaWdpbmFsIGNvZGUgYnkgUGF1bCBSZXlub2xkcyA8UGF1bFJleW5vbGRzQGxoc29sdXRpb25zLmNvbT4KKyAgICBBZGFwdGVkIHRvIFUtQm9vdCBhbmQgNDQwR1ggcG9ydAorICA0NDBneF9lbmV0LmM6CisgIC0gQWRkIGdyYWNpb3VzIGhhbmRsaW5nIG9mIGFsbCBFdGhlcm5ldCBQaW4gU2VsZWN0aW9ucyBmb3IgNDQwR1gKKyAgLSBBZGQgUkdNSUkgc2VsZWN0aW9uIGZvciBDaWNhZGEgQ0lTODIwMSBHaWdhYml0IFBIWQorICBwcGM0NDAuaDoKKyAgLSBBZGQgbmVlZGVkIGJpdCBkZWZpbml0aW9ucworICAtIEZpeCBmb3JtYXR0aW5nCisKKyogUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMSBNYXIgMjAwNDoKKyAgQWRkIFBQQzQ0MEdYIHByYmR2MCBkaXZpZGVyIHRvIGZpeCBtZW1vcnkgY2xvY2sgY2FsY3VsYXRpb24uCisKKyogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyNyBGZWIgMjAwNAorICAtIGF2b2lkIHByb2JsZW1zIGZvciB0YXJnZXRzIHdpdGhvdXQgTkZTIGRvd25sb2FkIHN1cHBvcnQKKworKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjcgRmViIDIwMDQ6CisgIC0gQWRkZWQgTEJBNDggc3VwcG9ydCAoQ09ORklHX0xCQTQ4ICYgQ0ZHXzY0QklUX0xCQSkKKyAgLSBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBwcmludGluZyBpbiB2c3ByaW50ZiAoQ0ZHXzY0QklUX1ZTUFJJTlRGKQorICAtIEFkZGVkIHN1cHBvcnQgZm9yIDY0Yml0IHN0cnRvdWwgKENGR182NEJJVF9TVFJUT1VMKQorCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI3IEZlYiAyMDA0OgorICBGaXggcmFycGJvb3Q6IGFkZCBhdXRvbG9hZCBieSBORlMKKworKiBQYXRjaCBieSBEYW4gRWlzZW5odXQsIDI2IEZlYiAyMDA0OgorICBmaXggZmxhc2hfd3JpdGUgcmV0dXJuIHZhbHVlIGluIHNhdmVlbnYKKworKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDExIERlYyAyMDAzCisgIGV4cGFuZCBjb25maWcubWsgdG8gYXZvaWQgdHJpZ3JhcGggd2FybmluZ3Mgb24gTklPUworCisqIFJlbmFtZSAiQk1TMjAwMyIgYm9hcmQgaW50byAiSE1JMTAiCisKKyogU1gxIHBhdGNoZXM6IHVzZSAic2VyaWFsIyIgZm9yIFVTQiBzZXJpYWwgIzsgdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudAorICBzdG9yYWdlOyBhdXRvLXNldCBjb25zb2xlIG9uIFVTQiBwb3J0ICh1c2luZyBwcmVib290IGNvbW1hbmQpCisKKyogQWRkIHN1cHBvcnQgZm9yIFNYMSBtb2JpbGUgcGhvbmU7IGFkZCBzdXBwb3J0IGZvciBVU0ItYmFzZWQgY29uc29sZQorICAoZW5hYmxlIHdpdGggInNldGVudiBzdGRvdXQgdXNidHR5OyBzZXRlbnYgc3RkaW4gdXNidHR5IikKKworKiBGaXggTE9XQk9PVCBjb25maWd1cmF0aW9uIGZvciBNUEM1MjAwIHdpdGggRERSIG1lbW9yeQorCisqIEZpeCBTRFJBTSB0aW1pbmdzIGZvciBMSVRFNTIwMCAvIEljZUN1YmUgYm9hcmQKKworKiBIYW5kbGUgQXV0aS1NRElYIC8gY29ubmVjdGlvbiBzdGF0dXMgZm9yIElOQ0EtSVAKKworKiBGaXggVVNCIHByb2JsZW1zIHdoZW4gYXR0ZW1wdGluZyB0byByZWFkIDAgYnl0ZXMKKworKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyNiBGZWIgMjAwNDoKKyAgRml4IGJyb2tlbiBjb21waWxlIGZvciBYUEVESVRFMUsgdGFyZ2V0LgorCisqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjYgRmViIDIwMDQ6CisgIEJ1ZyBmaXggZm9yIE5GUyBjb2RlIG9uIE5JT1MgdGFyZ2V0cworCisqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDI2IEZlYiAyMDA0OgorICBCcmVhayB1cCBTeXN0ZW1BQ0UgcmVhZHMgb2YgbGFyZ2UgYmxvY2sgY291bnRzCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjYgRmViIDIwMDQKKyAgYWRkIElERSBzdXBwb3J0IGZvciBNUEM1MjAwCisKKyogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjYgRmViIDIwMDQ6CisgIGFkZCBhdXRvbG9hZCB2aWEgTkZTCisKKyogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcworICBVc2Ugb2YgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGluIGJvYXJkLmMgY29uc2lzdGVudCB3aXRoIHVzZXMKKyAgZWxzZXdoZXJlIGluIHRoZSBzb3VyY2UuCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgRmViIDIwMDQ6CisgIC0gVGltZW91dHMgaW4gRlBHQSBjb2RlIHNob3VsZCBiZSBiYXNlZCBvbiBDRkdfSFoKKyAgLSBNaW5vciBjbGVhbnVwIGluIGNvZGUgZm9yIEFsdGVyYSBGUEdBIEFDRVgxSworCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IEZlYiAyMDA0OgorICBDaGFuZ2VkICJEaXJlY3RvcnkgSGllcmFyY2h5IiBzZWN0aW9uIGluIFJFQURNRQorCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI1IEZlYiAyMDA0OgorICBSZWR1Y2UgY29weSBjb3VudCBpbiBuZnNfcmVhZF9yZXBseSgpIG9mIE5GUyBjb2RlCisKKyogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDI0IEZlYiAyMDA0OgorICBOUzk3NTAgRGV2Qm9hcmQgYWRkZWQKKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNCBGZWIgMjAwNAorICBhZGQgVVNCIHN1cHBvcnQgZm9yIE1QQzUyMDAKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKKyAgLSBmaXggTUlJIGNvbW1hbmRzIHRvIHVzZSB2YWx1ZXMgZnJvbSBsYXN0IGNvbW1hbmQKKworKiBQYXRjaCBieSBUb3JzdGVuIERlbWtlLCAyNCBGZWIgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIHRoZSBlWGFsaW9uIHBsYXRmb3JtIChTUFNXLTgyNDAsIEYtMzAsIEYtMzAwKQorCisqIFBhdGNoIGJ5IFJhaHVsIFNoYW5iaGFnLCAxOSBGZWIgMjAwNDoKKyAgRml4ZXMgZm9yIGZvciBPTUFQMTYxMCBib2FyZDoKKyAgLSBzaGlmdCBzb21lIElSUSBzcGVjaWZpYyBjb2RlIHRvIHBsYXRmb3JtLlMgZmlsZQorICAtIHJlbW92ZSBkdXBsaWNhdGV3YXRjaGRvZyByZXNldCBjb2RlIGZyb20gc3RhcnQuUworCisqIE1ha2UgQXV0by1NRElYIFN1cHBvcnQgY29uZmlndXJhYmxlIG9uIElOQ0EtSVAgYm9hcmQKKworKiBGaXggbGljZW5zZSBmb3IgbWtpbWFnZSB0b29sCisKKyogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjQgRmViIDIwMDQ6CisgIFVwZGF0ZSBOZXRCb290RmlsZVhmZXJTaXplIGluIE5GUyBjb2RlCisKKyogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNCBGZWIgMjAwNDoKKyAgZml4IHBhY2tldCBsZW5ndGggaW4gTkZTIGNvZGUKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXksIDIyIEZlYiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgTkZTIGZvciBmaWxlIGRvd25sb2FkCisKKyogUGF0Y2ggYnkgQW5kcmVhIFNjaWFuLCAxNyBGZWIgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIFMzQzQ0QjAgcHJvY2Vzc29yIGFuZCBEQVZFIEIyIGJvYXJkCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjAgRmViIDIwMDQ6CisgIC0gQWRkIHN1cHBvcnQgZm9yIE1JSSBjb21tYW5kcyBvbiBBVDkxUk05MjAwIGJvYXJkcworICAtIHNvbWUgY2xlYW51cCBpbiBBVDkxUk05MjAwIGV0aGVybmV0IGNvZGUKKworKiBQYXRjaCBieSBQZXRlciBSeXNlciwgMjAgRmViIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgWGlsaW54IE1MMzAwIHBsYXRmb3JtCisKKyogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxNyBGZWIgMjAwNDoKKyAgRml4IHdhdGNoZG9nIHN1cHBvcnQgZm9yIE5JT1MKKworKiBQYXRjaCBieSBKb3NoIEZyeW1hbiwgMTYgRmViIDIwMDQ6CisgIEZpeCBieXRlLXN3YXBwaW5nIGZvciBjZmlfZmxhc2guYyBmb3IgZGlmZmVyZW50IGJ1cyB3aWR0aHMKKworKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgSmViIDIwMDQ6CisgIFJlbW92ZSBkdXBsaWNhdGUgIkZQR0EgU3VwcG9ydCIgbm90ZXMgZnJvbSB0aGUgUkVBRE1FIGZpbGUKKworKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCAxNCBGZWIgMjAwNDoKKyAgLSB1cGRhdGUgYm9hcmQvZW1rIHRyZWU7IHVzZSBjb21tb24gZmxhc2ggZHJpdmVyCisgIC0gQ29ycmVjdGVkIHRlc3RlZCBiaXRzIGluIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uIGluIGNwdS9tcGM1eHh4L3RyYXBzLmMKKyAgICBbYWRhcHRlZCBmb3Igb3RoZXIgUFBDIENQVXMgLS0gd2RdCisgIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIE00OFQwOCBvbiB0aGUgRVZBTDUyMDAgYm9hcmQgaW4gcnRjL21rNDh0NTkuYworCisqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMyBGZWIgMjAwNDoKKyAgQ2FsbCBzaG93X2Jvb3RfcHJvZ3Jlc3MoKSB3aGVuZXZlciBQT1NUICJGQUlMRUQiIGlzIHByaW50ZWQuCisKKyogUGF0Y2ggYnkgTmlzaGFudCBLYW1hdCwgMTMgRmViIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBUSSBPTUFQMTYxMCBIMiBCb2FyZAorICBGaXhlcyBmb3IgY3B1L2FybTkyNmVqcy9pbnRlcnJ1cHQuYworCShiYXNlZCBvbiBSaWNoYXJkIFdvb2RydWZmJ3MgcGF0Y2ggZm9yIGFybTkyNSwgMTYgT2N0IDAzKQorICBGaXggZm9yIGEgdGltZXIgYnVnIGluIE9NQVAxNjEwIElubm92YXRvcgorICBBZGQgc3VwcG9ydCBmb3IgQ1MwIChST00pL0NTMyAoRmxhc2gpIGJvb3QgaW4gT01BUDE2MTAgSW5ub3ZhdG9yIGFuZCBIMgorCisqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAxMiBGZWIgMjAwNDoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTklPUyB0aW1lciB3aXRoIHZhcmlhYmxlIHBlcmlvZCBwcmVsb2FkIGNvdW50ZXIgdmFsdWUKKyAgLSBwcmVwYXJlIFBPU1QgZnJhbWV3b3JrIHN1cHBvcnQgZm9yIE5JT1MgdGFyZ2V0cworCisqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBGZWIgMjAwNDoKKyAgYWRkIFBPU1Qgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBib2FyZAorCisqIFBhdGNoIGJ5IExhdXJlbnQgTW9oaW4sIDEwIEZlYiAyMDA0OgorICBGaXggYnVmZmVyIG92ZXJmbG93IGluIGNvbW1vbi91c2IuYworCisqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDEwIEZlYiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IENTQjI3MiBib2FyZAorCisqIFBhdGNoIGJ5IFRob21hcyBFbHN0ZSwgMTAgRmViIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBORVQrNTAgQ1BVIGFuZCBNb2RORVQ1MCBib2FyZAorCisqIFBhdGNoIGJ5IFNhbSBTb25nLCAxMCBGZWIgMjAwNDoKKyAgRml4IHR5cG9zIGluIGNmaV9mbGFzaC5jCisKKyogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMCBGZWIgMjAwNAorICBGaXhlZCBsb25nIGRpciBlbnRyeSBzbG90IGlkIGNhbGN1bGF0aW9uIGluIGdldF92ZmF0bmFtZQorCisqIFBhdGNoIGJ5IFJvYmluIEdpbGtzLCAxMCBGZWIgMjAwNDoKKyAgYWRkICJpdGVzdCIgY29tbWFuZCAob3BlcmF0b3JzOiAtZXEsIC1uZSwgLWx0LCAtZ3QsIC1sZSwgLWdlLCA9PSwKKyAgIT0sIDw+LCA8LCA+LCA8PSwgPj0pCisKKyogRml4IHByb2JsZW0gd2l0aCBzaWRlIGVmZmVjdHMgaW4gbWFjcm9zIGluIGluY2x1ZGUvdXNiLmgKKworKiBQYXRjaCBieSBEYXZpZCBCZW5zb24sIDEzIE5vdiAyMDAzOgorICBidWcgODQxMzU4IC0gZml4IFRGVFAgZG93bmxvYWQgc2l6ZSBsaW1pdAorCisqIEZpeGluZyBidWcgODUwNzY4OgorICBpbXByb3BlciBmbHVzaF9jYWNoZSgpIGluIGxvYWRfc2VyaWFsKCkKKworKiBGaXhpbmcgYnVnIDgzNDk0MzoKKyAgTVBDODU0MCAtIG1pc3Npbmcgdm9sYXRpbGUgZGVjbGFyYXRpb25zCisKKyogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMDkgRmViIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBYaWxpbnggU3lzdGVtQUNFIGNoaXA6CisgIC0gTmV3IGZpbGVzIGNvbW1vbi9jbWRfYWNlLmMgYW5kIGluY2x1ZGUvc3lzdGVtYWNlLmgKKyAgLSBIb29rIHN5c3RlbWFjZSBzdXBwb3J0IGludG8gY21kX2ZhdCBhbmQgdGhlIHBhcnRpdGlvbiBtYW5hZ2VyCisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgRmViIDIwMDQ6CisgIEFkZCBiaV9vcGJmcmVxICYgYmlfaWljX2Zhc3QgdG8gNDQwR1ggYmRfaW5mbyBhcyBuZWVkZWQgZm9yIExpbnV4CisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgRmViIDIwMDQ6CisgIG8gNDQwR1g6CisgICAgLSBGaXggUENJIEluZGlyZWN0IGFjY2VzcyBmb3IgdHlwZSAxIGNvbmZpZyBjeWNsZXMgd2l0aCBwcGM0NDAuCisgICAgLSBBZGQgcGh5bW9kZSBmb3IgNDQwIGVuZXQKKyAgICAtIGZpeCBwY2kgcHJlIGluaXQKKyAgbyBYUGVkaXRlMUs6CisgICAgLSBDaGFuZ2UgYm9hcmRfcHJlX2luaXQgdG8gYm9hcmRfZWFybHlfaW5pdF9mCisgICAgLSBBZGQgdXNlciBmbGFzaCB0byBidXMgY29udHJvbGxlciBzZXR1cAorICAgIC0gRml4IHBjaSBwcmUgaW5pdAorICAgIC0gRml4IGlzX3BjaV9ob3N0IHRvIGNoZWNrIEdQSU8gZm9yIG1vbmFyY2ggYml0CisgICAgLSBGb3JjZSB4cGVkaXRlMWsgdG8gcGNpIGNvbnZlbnRpb25hbCBtb2RlICh2aWEgI2RlZmluZSBvcHRpb24pCisKKyogUGF0Y2ggYnkgQnJhZCBLZW1wLCA0IEZlYiAyMDA0OgorICAtIGhhbmRsZSB0aGUgbWFjaGluZSBjaGVjayB0aGF0IGlzIGdlbmVyYXRlZCBkdXJpbmcgdGhlIFBDSSBzY2FucworICAgIG9uIDgyeHggcHJvY2Vzc29ycy4KKyAgLSBkZWZpbmUgdGhlIHJlZ2lzdGVycyB1c2VkIGluIHRoZSBJTU1SIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtLgorCisqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDAzIEZlYiAyMDA0OgorICBjcHUvbXBjNXh4eC9zdGFydC5TOiBjb3B5IE1CQVIgaW50byBTUFIzMTEKKworKiBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDMgRmViIDIwMDQ6CisgIEZpeCBjb3B5ICYgcGFzdGUgZXJyb3IgaW4gY3B1L21wYzgyNjAvcGNpLmMKKworKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjQgSmFuIDIwMDQ6CisgIEZpeCB0eXBvIGluIGNwdS9tcGM1eHh4L3BjaV9tcGM1MjAwLmMKKworKiBBZGQgQXV0by1NRElYIHN1cHBvcnQgZm9yIElOQ0EtSVAKKworKiBTb21lIGNvZGUgY2xlYW51cAorCisqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAxMCBGZWIgMjAwNDoKKyAgRml4ZXMgZm9yIENvbGRGaXJlIHBvcnQKKworKiBQYXRjaCBieSBCcmFkIEtlbXAsIDExIEZlYiAyMDA0OgorICBGaXggQ0ZJIGZsYXNoIGRyaXZlciBwcm9ibGVtcworCisqIE1ha2Ugc3VyZSB0byB1c2UgYSBidXMgY2xvY2sgZGl2aWRlciBvZiAyIG9ubHkgd2hlbiBydW5uaW5nIFRRTTh4eE0KKyAgbW9kdWxlcyBhdCBDUFUgY2xvY2sgZnJlcXVlbmNpZXMgYWJvdmUgNjYgTUh6LgorCisqIE9wdGltaXplIGZsYXNoIHByb2dyYW1taW5nIHNwZWVkIGZvciBMV01PTiAoYnkgYW5vdGhlciAxMDAlIDotKQorCisqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDMgRmViIDIwMDQ6CisgIC0gQ2hhbmdlZCB0aGUgaW5jb3JyZWN0IEZBVDEyQlVGU0laRQorICAtIGRhdGFfYmVnaW4gaW4gZnNkYXRhIGNhbiBiZSBuZWdhdGl2ZS4gQ2hhbmdlZCBpdCB0byBiZSBzaG9ydC4KKworKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMzAgSmFuIDIwMDQ6CisgIDE6IC0gYm9hcmQvYWx0ZXJhL2NvbW1vbi9mbGFzaC5jOmZsYXNoX2VyYXNlKCk6CisgICAgICAgbyBhbGxvdyBpbnRlcnJ1cHRzIGJlZm9yIGdldF90aW1lcigpIGNhbGwKKyAgICAgICBvIGNoZWNrLXVwIGVhY2ggZXJhc2VkIHNlY3RvciBhbmQgYXZvaWQgdW5leHBlY3RlZCB0aW1lb3V0cworICAgICAtIGJvYXJkL2FsdGVyYS9kazFjMjAvZGsxczEwLmM6Ym9hcmRfZWFybHlfaW5pdF9mKCk6CisgICAgICAgbyBlbmNsb3NlIHNldmVuc2VnX3NldCgpIGluIGNwcCBjb25kaXRpb24KKyAgICAgLSByZW1vdmUgdGhlIEFTTUkgY29uZmlndXJhdGlvbiBmb3IgREsxUzEwX3N0YW5kYXJkXzMyIChuZXZlciBwcmVzZW50KQorICAgICAtIGZpeCBzb21lIHR5cGVkIGluIG1pc3Rha2VzIGluIHRoZSBOSU9TIGRvY3VtZW50YXRpb24KKyAgMjogLSBzcGxpdCBESzFDMjAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgorICAgICAgIG8gdHdvIG5ldyBmaWxlcyBmb3IgZWFjaCBOSU9TIENQVSBkZXNjcmlwdGlvbgorICAgICAgIG8gVS1Cb290IHJlbGF0ZWQgcGFydCBpcyByZW1haW5pbmcgaW4gREsxQzIwLmgKKyAgMzogLSBzcGxpdCBESzFTMTAgY29uZmlndXJhdGlvbiBpbnRvIHNldmVyYWwgaGVhZGVyIGZpbGVzOgorICAgICAgIG8gdHdvIG5ldyBmaWxlcyBmb3IgZWFjaCBOSU9TIENQVSBkZXNjcmlwdGlvbgorICAgICAgIG8gVS1Cb290IHJlbGF0ZWQgcGFydCBpcyByZW1haW5pbmcgaW4gREsxUzEwLmgKKyAgNDogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1pY3JvdHJvbml4IExpbnV4IERldmVsb3BtZW50IEtpdAorICAgICAgIE5JT1MgQ1BVIGNvbmZpZ3VyYXRpb24gYXQgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKKyAgICAgICBTdHJhdGl4IEVkaXRpb24gKERLLTFTMTApCisgIDU6IC0gQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCisgICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQorICA2OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBTZXJpYWwgUGVyaXBoYXJlbCBJbnRlcmZhY2UgKFNQSSkKKyAgICAgICAobWFzdGVyIG9ubHkpCisgIDc6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBjb21tb24gVS1Cb290IFNQSSBmcmFtZXdvcmsgYXQKKyAgICAgICBSVEMgZHJpdmVyIERTMTMwNgorCisqIFBhdGNoIGJ5IFJhaHVsIFNoYW5iaGFnLCAyOCBKYW4gMjAwNDoKKyAgRml4IGZsYXNoIHByb3RlY3Rpb24vbG9ja2luZyBoYW5kbGluZyBmb3IgT01BUDE2MTAgaW5ub3ZhdG9yIGJvYXJkLgorCisqIFBhdGNoIGJ5IFJvbGYgUGV1a2VydCwgMjggSmFuIDIwMDQ6CisgIGZpeCBmbGFzaCB3cml0ZSBwcm9ibGVtcyBvbiBDU0IyMjYgYm9hcmQgKHdyaXRlIHdpdGggMzIgYml0IGJ1cyB3aWR0aCkKKworKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDE2IEphbiAyMDA0OgorICAtIGZpeCByb3VuZGluZyBlcnJvciB3aGVuIGNhbGN1bGF0aW5nIGJhdWRyYXRlcyBmb3IgTVBDNTIwMCBQU0NzCisgIC0gbWFrZSBzdXJlIENGR19SQU1CT09UIGFuZCBDRkdfTE9XQk9PVCBhcmUgbm90IGVuYWJsZWQgYXQgdGhlIHNhbWUKKyAgICB0aW1lIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNiBKYW4gMjAwNDoKKyAgQWxsb3cgYnppcDIgY29tcHJlc3Npb24gZm9yIHNtYWxsIG1lbW9yeSBmb290cHJpbnQgYm9hcmRzCisKKyogUGF0Y2ggYnkgQnJhZCBLZW1wLCAyMSBKYW4gMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIENGSSBmbGFzaCBkcml2ZXIgZm9yIGJvdGggdGhlIEludGVsIGFuZCB0aGUgQU1ECisgIGNvbW1hbmQgc2V0cy4KKworKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAyMCBKYW4gMjAwNDoKKyAgRml4IHBjaSBicmlkZ2UgYXV0byBlbnVtZXJhdGlvbiBvZiBzaWJsaW5nIHAycCBicmlkZ2VzLgorCisqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDEyIEphbiAyMDA0OgorICBBZGQgc29tZSBkZWxheXMgYXMgbmVlZGVkIGZvciBJbnRlbCBMWFQ5NzFBIFBIWSBzdXBwb3J0CisKKyogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDA5IEphbiAyMDA0OgorICAtIGF2b2lkIHdhcm5pbmc6IHVudXNlZCB2YXJpYWJsZSBgcGlvcCcgaW4gYm9hcmQvYWx0ZXJhL2NvbW1vbi9zZXZlbnNlZy5jCisgIC0gbWFrZSBESzFDMjAgYm9hcmQgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIEFTTUkgY29uZm9ybSB0bworICAgIGRvY3VtZW50YXRpb24KKworKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOSBKYW4gMjAwNDoKKworICBBUk0gbWVtb3J5IGxheW91dCBmaXhlczogdGhlIGFib3J0LXN0YWNrIGlzIG5vdyBzZXQgdXAgaW4gdGhlCisgIGNvcnJlY3QgUkFNIGFyZWEsIGFuZCB0aGUgQlNTIGlzIHplcm9lZCBvdXQgYXMgaXQgc2hvdWxkIGJlLgorCisgIEZ1cnRoZXJtb3JlLCB0aGUgbWFnaWMgdmFyaWFibGVzICdhcm1ib290X2VuZCcgYW5kICdhcm1ib290X2VuZF9kYXRhJworICBvZiB0aGUgbGlua2VyIHNjcmlwdHMgYXJlIHJlcGxhY2VkIGJ5ICdfX2Jzc19zdGFydCcgYW5kICdfZW5kJywKKyAgcmVzcC4sIHdoaWNoIGlzIGEgZnVydGhlciBzdGVwIHRvIGVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBkaWZmZXJlbmNlcworICBiZXR3ZWVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ1BVIGFyY2hpdGVjdHVyZXMuCisKKyogUGF0Y2ggYnkgbGlhbmcgYSBsZWksIDkgSmFuIDIwMDQ6CisgIEZpeCBJbnRlbCAyOEYxMjhKMyBJRCBpbiBpbmNsdWRlL2ZsYXNoLmgKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOSBKYW4gMjAwNDoKKyAgYWRkIHN1cHBvcnQgZm9yIFRCMDIyOSBib2FyZCAoTkVDIFZSNDEzMSBNSVBTIHByb2Nlc3NvcikKKworKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEyIERlYyAyMDAzOgorICBjaGFuZ2VkIGV4dGVybiBfX2lubGluZV9fIGludG8gc3RhdGljIF9faW5saW5lX18gaW4KKyAgaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oCisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMzAgRGVjIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBJQk0gUFBDNDQwR1guIE11bHRpcGxlIEVNQUMgRXRoZXJuZXQgZGV2aWNlcywKKyAgc2VsZWN0IE1ESSBwb3J0IGJhc2VkIG9uIGVuYWJsZWQgRU1BQyBkZXZpY2UuCisgIEFkZCBzdXBwb3J0IGZvciBYRVMgSW5jIDxodHRwOi8vd3d3Lnhlcy1pbmMuY29tPiBYUGVkaXRlMTAwMCA0NDBHWAorICBiYXNlIFByUE1DIGJvYXJkLgorCisqIFBhdGNoIGJ5IFdvbHRlciBLYW1waHVpcywgMTUgRGVjIDIwMDM6CisgIG1hZGUgQ09ORklHX1NJTEVOVF9DT05TT0xFIHVzYWJsZSBvbiBhbGwgYXJjaGl0ZWN0dXJlcworCisqIERpc2FibGUgZGF0ZSBjb21tYW5kIG9uIFRRTTg2Nk0gLSB0aGVyZSBpcyBubyBSVEMgb24gTVBDODY2CisKKyogRml4IHZhcmlhYmxlIENQVSBjbG9jayBmb3IgTVBDODU5Lzg2NiBzeXN0ZW1zIGZvciBsb3cgQ1BVIGNsb2NrcworCisqIEltcGxlbWVudCBhZGFwdGl2ZSBTRFJBTSB0aW1pbmcgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBhY3R1YWwgQ1BVCisgIGNsb2NrIGZyZXF1ZW5jeSBmb3IgSU5DQS1JUDsgZml4IHByb2JsZW0gd2l0aCBib2FyZCBoYW5naW5nIHdoZW4KKyAgc3dpdGNoaW5nIGZyb20gMTUwTUh6IHRvIDEwME1IegorCisqIEFkZCBQQ01DSUEgQ1Mgc3VwcG9ydCBmb3IgQk1TMjAwMyBib2FyZAorCisqIEFkZCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyAoc28gZmFyIG9ubHkgVFFNODY2TSk6CisgIHNlZSBkb2MvUkVBRE1FLk1QQzg2NiBmb3IgZGV0YWlsczsKKyAgaW1wbGVtZW50IHdvcmthcm91bmQgZm9yICJTSVU0IiBhbmQgIlNJVTkiIHNpbGljb24gYnVncyBvbiBNUEM4NjY7CisgIGNhbGN1bGF0ZSBDUFUgY2xvY2sgZnJlcXVlbmN5IGZyb20gUExMIHJlZ2lzdGVyIHZhbHVlcy4KKworKiBBZGQgc3VwcG9ydCBmb3IgMTI4IE1CIFJBTSBvbiBUUU04eHhML00gbW9kdWxlcworCisqIEZpeCBQUy8yIGtleWJvYXJkIHByb2JsZW0gY2F1c2VkIGJ5IHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdmFyaWFibGUKKyAgcG9pbnRpbmcgdG8gYSBsb2NhdGlvbiBpbiBmbGFzaAorCisqIEZpeCBJTkNBLUlQIGNsb2NrIGNhbGN1bGF0aW9uOiA0MDAvMyA9IDEzMy4zIE1Ieiwgbm90IDEzMC4KKworKiBUaGUgUFMvMiBtdXggb24gdGhlIEJNUzIwMDMgYm9hcmQgbmVlZHMgNDUwIG1zIGFmdGVyIHBvd2VyIG9uCisgIGJlZm9yZSB3ZSBjYW4gYWNjZXNzIGl0OyBhZGQgZGVsYXkgaW4gY2FzZSB3ZSBhcmUgZmFzdGVyICh3aXRoIG5vCisgIENGIGNhcmQgaW5zZXJ0ZWQpCisKKyogQ2xlYW51cCBvZiBzb21lIGluaXQgZnVuY3Rpb25zCisKKyogTWFrZSBzdXJlIFNDQyBFdGhlcm5ldCBpcyBhbHdheXMgc3RvcHBlZCBieSB0aGUgdGltZSB3ZSBib290IExpbnV4CisgIHRvIGF2b2lkIExpbnV4IGNyYXNoZXMgYnkgZWFybHkgcGFja2V0cyBjb21pbmcgaW4uCisKKyogQWNjZWxlcmF0ZSBmbGFzaCBhY2Nlc3NlcyBvbiBMV01PTiBib2FyZCBieSB1c2luZyBidWZmZXJlZCB3cml0ZXMKKworKiBGaXggdHlwbyBpbiBNYWtlZmlsZTsKKyAgZml4IHByb2JsZW0gd2l0aCBQQVJUTlVNIGRldGVjdGlvbgorCisqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwOSBKYW4gMjAwNDoKKyAgLSBhZGQgUlRDIHN1cHBvcnQgZm9yIE1QQzUyMDAgYmFzZWQgYm9hcmRzIChyZXF1aXJlcyBSVENfWFRBTCkKKworKiBBZGQgc3VwcG9ydCBmb3IgSURFIExFRCBvbiBCTVMyMDAzIGJvYXJkCisgIChleGNsdXNpdmUgd2l0aCBzdGF0dXMgTEVEISkKKworKiBBZGQgc3VwcG9ydCBmb3IgUFMvMiBrZXlib2FyZCAodXNlZCB3aXRoIFBTLzIgbXVsdGlwbGV4b3Igb24KKyAgQk1TMjAwMyBib2FyZCkKKworKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCA0IEphbiAyMDA0ICsgNyBKYW4gMjAwNDoKKyAgQWRkIGNvbW1vbiBmaWxlcyBmb3IgImVtayIgYm9hcmRzCisKKyogQWRkIGEgY29tbW9uIGdldF9yYW1fc2l6ZSgpIGZ1bmN0aW9uIGFuZCBtb2RpZnkgdGhlIHRoZQorICBib2FyZC1zcGVjaWZpYyBmaWxlcyB0byBpbnZva2UgdGhhdCBjb21tb24gaW1wbGVtZW50YXRpb24uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBTZXQgZGVmYXVsdCBjbG9jayBmb3IgSU5DQS1JUCB0byAxNTAgTUh6CisKKyogTWFrZSBCTVMyMDAzIHVzZSBhIHNlcGFyYXRlIGNvbmZpZyBmaWxlIHRvIGF2b2lkICNpZmRlZiBtZXNzOworICBhZGQgSTJDIHN1cHBvcnQ7IGFkZCBzdXBwb3J0IGZvciBEUzEzMzcgUlRDCisKKyogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0ICBmb3IgQk1TMjAwMyBib2FyZAorCisqIEFkZCBzdXBwb3J0IGZvciBzdGF0dXMgTEVEIG9uIEJNUzIwMDMgYm9hcmQKKworKiBQYXRjaCBieSBTY290dCBNY051dHQsIDAyIEphbiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgQWN0aXZlIFNlcmlhbCBNZW1vcnkgSW50ZXJmYWNlIChBU01JKQorICBvbiBDeWNsb25lIGRldmljZXMKKworKiBQYXRjaCBieSBBbmRyZWEgTWFyc29uLCAxNiBEZWMgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIHRoZSBQUENoYW1lbGVvbiBNRSBhbmQgSEkgbW9kdWxlcworCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIyIERlYyAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgRFVFVCBBRFMgYm9hcmQgKE1QQzg3eC84OHgpCisKKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNSBEZWMgMjAwMzoKKyAgYWRkIHN1cHBvcnQgZm9yIGNyYW1mcyAodXNlcyBKRkZTMiBjb21tYW5kIGludGVyZmFjZSkKKworKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMTEgRGVjIDIwMDM6CisgIC0gbW9yZSBkb2N1bWVudGF0aW9uIGZvciBOSU9TIHBvcnQKKyAgLSBuZXcgc3RydWN0IG5pb3NfcGlvX3QsIHN0cnVjdCBuaW9zX3NwaV90CisgIC0gUmVjb25maWd1cmF0aW9uIGZvciBOSU9TIERldmVsb3BtZW50IEtpdCBESzFDMjA6CisgICAgbyBtb3ZlIGJvYXJkIHJlbGF0ZWQgY29kZSBmcm9tIGJvYXJkL2RrMWMyMAorICAgICAgdG8gYm9hcmQvYWx0ZXJhL2RrMWMyMAorICAgIG8gY3JlYXRlIGEgbmV3IGNvbW1vbiBzb3VyY2UgcGF0aCBib2FyZC9hbHRlcmEvY29tbW9uCisgICAgICBhbmQgbW92ZSBnZW5lcmljIGZsYXNoIGFjY2VzcyBzdHVmZiBpbnRvIGl0CisgICAgbyBjaGFuZ2UvZXhwYW5kIGNvbmZpZ3VyYXRpb24gZmlsZSBESzFDMjAuaAorICAtIEFkZCBzdXBwb3J0IGZvciBOSU9TIERldmVsb3BtZW50IEtpdCBESzFTMTAKKyAgLSBBZGQgc3RhdHVzIExFRCBzdXBwb3J0IGZvciBOSU9TIHN5c3RlbXMKKyAgLSBBZGQgZHVhbCA3LXNlZ21lbnQgTEVEIHN1cHBvcnQgZm9yIEFsdGVyYSBOSU9TIERldktpdHMKKworKiBQYXRjaCBieSBSb25lbiBTaGl0cml0LCAxMCBEZWMgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIERCNjQzNjAgLyBEQjY0NDYwIGRldmVsb3BtZW50IGJvYXJkcworCisqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDEwIERlYyAyMDAzOgorICBmaXggZGVwZW5kZW5jeSBwcm9ibGVtIGluIGV4YW1wbGVzL01ha2VmaWxlCisKKyogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDggRGVjIDIwMDMKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIFBBVEkgYm9hcmQgKE1QQzU1NSkKKyAgLSBhZGQgU1BJIHN1cHBvcnQgZm9yIHRoZSBNUEM1eHgKKworKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwOCBEZWMgMjAwMzoKKyAgYWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBDT05GSUdfU0VSSUFMX1RBRyBhbmQgQ09ORklHX1JFVklTSU9OX1RBRworICB0byBwYXNzIEFUQUdfU0VSSUFMIGFuZCBBVEFHX1JFVklTSU9OLCByZXNwLiwgdG8gdGhlIEFSTSB0YXJnZXQ7CisgIGNsZWFudXAgc29tZSByZWR1bmRhbmQgI2RlZmluZXMKKworKiBQYXRjaCBieSBBbmRy6SBTY2h3YXJ6LCA4IERlYyAyMDAzOgorICBmaXhlcyBmb3IgRGF2aWNvbSBETTkxMDJBIEV0aGVybmV0IENoaXAgKCNkZWZpbmUgQ09ORklHX1RVTElQX0ZJWF9EQVZJQ09NKToKKyAgLSBUWCBhbmQgUlggZGVza3JpcHRvcnMgbXVzdCBiZSBxdWFkLXdvcmQgYWxpZ25lZAorICAtIGRvZXMgbm90IHdvcmsgd2l0aCBvbmx5IG9uZSBUWCBkZXNrcmlwdG9yCisgIC0gc3RhbmRhcmQgcmVzZXQgbWV0aG9kIGRvZXMgbm90IHdvcmsKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBEZWMgMjAwMzoKKyAgYWRkIFJUTDgxMzkgZXRoZXJuZXQgZHJpdmVyCisKKyogUGF0Y2hlcyBieSBFZCBPa2Vyc29uLCAwNyBEZWMgMjAwMzoKKyAgLSBmaXggZXRoZXJuZXQgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBsaXR0bGUtZW5kaWFuIG1vZGUuCisgIC0gZXh0ZW5kIG1lbXNldHVwLlMgZm9yIHRoZSBBVTF4MDAgcHJvY2Vzc29ycyBpbiBCRSBhbmQgTEUgbW9kZXMKKworKiBNaW5vciBjb2RlIGNsZWFudXAgKGNvZGluZyBzdHlsZSkKKworKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMzAgRGVjIDIwMDM6CisgIC0gY3B1L21wYzV4eHgvZmVjLmM6IGFkZGVkIENPTkZJR19QSFlfQUREUiwgYWRkZWQgQ09ORklHX1BIWV9UWVBFLAorICAtIGFkZGVkIENPTkZJR19QSFlfQUREUiB0byBpbmNsdWRlL2NvbmZpZ3MvSWNlQ3ViZS5oLAorICAtIHR1cm5lZCBkZWJ1ZyBwcmludCBvZiBQSFkgcmVnaXN0ZXJzIGludG8gYSBmdW5jdGlvbiAoY2FsbGVkIGluIHR3byBwbGFjZXMpCisgIC0gYWRkZWQgc3VwcG9ydCBmb3IgRU1LIE1QQzUyMDAgYmFzZWQgbW9kdWxlcworCisqIEZpeCBNUEM4eHggUExQUkNSX01GRF9TSElGVCB0eXBvCisKKyogQWRkIHN1cHBvcnQgZm9yIFRRTTg2Nk0gbW9kdWxlcworCisqIEZpeGVzIGZvciBUUU04NTVNIHdpdGggNCBNQiBmbGFzaCAoQW0yOURMMTYzID0gX25vXyBtaXJyb3IgYml0IGZsYXNoKQorCisqIEZpeCBhIGZldyBjb21waWxlciB3YXJuaW5ncworCisqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyOCBEZWMgMjAwMzoKKyAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgVE9QNTIwMCBib2FyZAorCisqIE1ha2UgQ1BVIGNsb2NrIG9uIElDQS1JUCBib2FyZCBjb250cm9sbGFibGUgYnkgYSAiY3B1Y2xrIgorICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGljaCBjYW4gc2V0IHRvICIxMDAiLCAiMTMzIiwgb3IgIjE1MCIuIFRoZQorICBDUFUgY2xvY2sgd2lsbCBiZSBjb25maWd1cmVkIGFjY29yZGluZ2x5IHVwb24gbmV4dCByZWJvb3QuIE90aGVyCisgIHZhbHVlcyBhcmUgaWdub3JlZC4gSW4gY2FzZSBvZiBhbiBpbnZhbGlkIG9yIHVuZGVmaW5lZCAiY3B1Y2xrIgorICB2YWx1ZSwgdGhlIGNvbXBpbGUtdGltZSBkZWZhdWx0IENQVSBjbG9jayBzcGVlZCB3aWxsIGJlIHVzZWQuCisKKyogRW5hYmxlIFF1YWQtVUFSVCBvbiBCTVMyMDAzIGJvYXJkIChpbml0aWFsaXplIHRoZSBQQ01DSUEgbWVtb3J5CisgIHdpbmRvdyB0aGF0IGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBVQVJUIHJlZ2lzdGVycyBieSB0aGUgTGludXggZHJpdmVyKQorCisqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyMCBEZWMgMjAwMzoKKyAgRml4IGNsb2NrIGNhbGN1bGF0aW9uIGZvciB0aGUgTVBDNTIwMCBmb3IgaGlnaGVyIGNsb2NrIGZyZXF1ZW5jaWVzCisgIChhYm92ZSAyKiozMiAvIDEwID0gNDI5LjUgTUh6KS4KKworKiBGaXggQ09ORklHX1BMTF9QQ0lfVE9fTUVNX01VTFRJUExJRVIgZGl2aWRlciBlcnJvciBpbiBTUDgyNDAgY29uZmlndXJhdGlvbgorCisqIEZpeCBJY2VDdWJlIENMS0lOIGNvbmZpZ3VyYXRpb24gKGl0J3MgMzMuMDAwMDAwTUh6KQorCisqIEFkZCBuZXcgY29uZmlndXJhdGlvbiBmb3IgSWNlQ3ViZSBib2FyZCB3aXRoIEREUiBtZW1vcnkKKworKiBVcGRhdGUgVFJBQiBtZW1vcnkgY29uZmlndXJhdGlvbnMKKworKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgSU5DQS1JUCBib2FyZAorCisqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAwOSBEZWMgMjAwMzoKKyAgLSBCVUJJTkdBNDA1RVA6IGNoYW5nZWQgZmxhc2ggZHJpdmVyIHRvIHByb3RlY3QgdG9wIHNlY3RvciBjb250YWluaW5nCisgICAgZmlyc3QgaW5zdHJ1Y3Rpb24uCisgIC0gQlVCSU5HQTQwNUVQOiBjb25maWd1cmVkICJlZXByb20iIGNvbW1hbmQgdG8gYWNjZXNzIGJvb3QgY29uZmlnIEVFUFJPTS4KKyAgLSBCVUJJTkdBNDA1RVA6IGZpeGVkIFBMTCBpbml0IChpbml0IGNoaXAgc2VsZWN0cyBiZWZvcmUgRlBHQS9OVlJBTSBhY2Nlc3MpLgorICAtIDQwNUVQOiBmaXhlZCBTUEQtYmFzZWQgU0RSQU0gaW5pdCAob25seSB1c2UgYmFua3MgMCBhbmQgMSkuCisgIC0gNDA1RVA6IGFkZGVkL2ZpeGVkIHN1cHBvcnQgZm9yICJyZWdpbmZvIiBjb21tYW5kLgorICAtIDR4eDogcmVtb3ZlZCBzcHVyaW91cyBNSUkgZXJyb3IgbWVzc2FnZXMgb24gIm1paSBpbmZvIiBjb21tYW5kLgorCisqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE5vdiAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgQ29sZEZpcmUgQ1BVCisgIGFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNNTI3MkMzIGFuZCBNNTI4MkVWQiBib2FyZHMKKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNCBOb3YgMjAwMzoKKyAgLSBhZGQgYSByZXR1cm4gdmFsdWUgZm9yIHRoZSBmcGdhIGNvbW1hbmQKKyAgLSBhZGQgaWRlX3ByZWluaXQoKSBmdW5jdGlvbiBjYWxsZWQgaW4gaWRlX2luaXQgaWYgQ09ORklHX0lERV9QUkVJTklUCisgICAgaXMgZGVmaW5lZC4gSWYgaWRlX3ByZWluaXQgZmFpbHMsIGlkZV9pbml0IGlzIGFib3J0ZWQuCisgIC0gZml4IGFuIGVuZGlhbmVzcyBwcm9ibGVtIGluIGZhdC5oCisKKyogUGF0Y2ggYnkgV29sdGVyIEthbXBodWlzLCAwNSBEZWMgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIFNOTUMncyBRUzg1MC9RUzgyMy9RUzg2MFQgYm9hcmRzCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMyBEZWMgMjAwMzoKKyAgInJldml2ZSIgVS1Cb290IHN1cHBvcnQgZm9yIG9sZCBNb3Rvcm9sYSBNUEM4NjBBRFMgYm9hcmQKKworKiBQYXRjaCBieSBDYW0oaWxvPyksIDAzIERlYyAyMDAzOgorICBtYWtlIGV4YW1wbGVzIGJ1aWxkIGV2ZW4gd2l0aCBicm9rZW4gTW9udGF2aXN0YSBvYmpjb3B5CisKKyogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDI3IE5vdiAyMDAzOgorICBmaXggY29udmVyc2lvbiBwcm9ibGVtIHdpdGggImJvb3RyZXRyeSIgZXZpcm9ubWVudCB2YXJpYWJsZQorCisqIFBhdGNoIGJ5IEFuZHJlIFNjaHdhcnosIDI0IE5vdiAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgbXZibHVlIChtdkJsdWVMWU5YIGFuZCBtdkJsdWVCT1gpIGJvYXJkcworCisqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyMSBOb3YgMjAwMzoKKyAgc2V0IFpNSUkgYnJpZGdlIHNwZWVkIG9uIDQ0MAorCisqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE3IE5vdiAyMDAzOgorICBGaXggbWlzbWF0Y2hlZCAjaWZkZWYgLyAjZW5kaWYgaW4gaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2hhcmR3YXJlLmgKKworKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTQgTm92IDIwMDM6CisgIC0gYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5jCisgICAgKiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgQlpJUDIgY29tcHJlc3NlZCBpbWFnZXMKKyAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCisgIC0gYm9hcmQvbXBsL2NvbW1vbi9mbGFzaC5jCisgICAgKiByZXBvcnQgY29ycmVjdCBlcnJvcnMgdG8gdXBwZXIgbGF5ZXJzCisgICAgKiBjaGVjayB0aGUgZXJhc2UgZmFpbCBhbmQgVlBQIGxvdyBiaXRzIGluIHN0YXR1cyByZWcKKyAgLSBib2FyZC9tcGwvdmNtYTkvY21kX3ZjbWE5LmMKKyAgLSBib2FyZC9tcGwvdmNtYTkvZmxhc2guYworICAgICogdmFyaW91cyBjbGVhbnVwcyAocHJpbnRmIC0+IHB1dHMsIC4uLikKKyAgLSBjb21tb24vY21kX3VzYi5jCisgICAgKiBmaXggdHlwbyBpbiBjb21tZW50CisgIC0gY3B1L2FybTkyMHQvdXNiX29oY2kuYworICAgICogc3VwcG9ydCBmb3IgUzNDMjQxMCBpcyBtaXNzaW5nIGluICNpZiBsaW5lCisgIC0gZHJpdmVycy9jczg5MDAuYworICAgICogcmVpbml0IHNvbWUgcmVnaXN0ZXJzIGluIGNhc2Ugb2YgZXJyb3IgKGNhYmxlIG1pc3NpbmcsIC4uLikKKyAgLSBmcy9mYXQvZmF0LmMKKyAgICAqIHN1cHBvcnQgZm9yIFVTQi9NTUMgZGV2aWNlcyBpcyBtaXNzaW5nIGluICNpZiBsaW5lCisgIC0gaW5jbHVkZS9jb25maWdzL01JUDQwNS5oCisgIC0gaW5jbHVkZS9jb25maWdzL1BJUDQwNS5oCisgICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAorICAgICogZW5sYXJnZSBtYWxsb2Mgc3BhY2UgdG8gMU1pQiBiZWNhdXNlIG9mIEJaSVAyIHN1cHBvcnQKKyAgLSBpbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaAorICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKKyAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0CisgICAgKiBlbmFibGUgVVNCIHN1cHBvcnQKKyAgLSBsaWJfYXJtL2FybWxpbnV4LmMKKyAgICAqIGNoYW5nZSBjYWxsaW5nIGNvbnZlbnRpb24gb2YgQVJNIExpbnV4IGtlcm5lbCBhcworICAgICAgZGVzY3JpYmVkIG9uIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvYm9vdGluZy5waHAKKworKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgorICBTcGxpdCBkYmF1MXgwMCBpbnRvIGRiYXUxMDAwLCBkYmF1MTEwMCBhbmQgZGJhdTE1MDAgY29uZmlncyB0bworICBzdXBwb3J0IGFsbCB0aGVzZSBBTUQgYm9hcmRzLgorCisqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6CisgIFdvcmthcm91bmQgZm9yIG1pcHMgYXUxeDAwIHBoeXNpY2FsIG1lbW9yeSBhY2Nlc3NlcyAodGhlIGF1MXgwMAorICB1c2VzIGEgMzYgYml0IGJ1cyBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYWNjZXNzIHBoeXNpY2FsIG1lbW9yeQorICBkaXJlY3RseS4gVXNlIHRoZSB1bmNhY2hlZCBTRFJBTSBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIHBoeXNpY2FsCisgIG9uZS4pCisKKyogUGF0Y2ggYnkgWHVlIExpZ29uZyAoSm9lKSwgMTMgTm92IDIwMDM6CisgIGFkZCBSZWFsdGVrIDgwMTkgZXRoZXJuZXQgZHJpdmVyCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgTm92IDIwMDM6CisgIE1QQzgyNnhBRFMvUFEyRkFEUyAgY2xlYW51cAorCisqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDEyIE5vdiAyMDAzOgorICBVcGRhdGUgUkVBRE1FIHRvIG1hcmsgdGhlIFBPUlRJTyBjb21tYW5kcyBub24tc3RhbmRhcmQKKworKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAxMiBOb3YgMjAwMzoKKyAgdXBkYXRlIGZvciBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIGRldmVsb3BtZW50IGtpdDoKKyAgLSBzdXBwb3J0IGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gRGF0YUZsYXNoCisgIC0gQXRtZWwgRGF0YUZsYXNoIEFUNDVEQjEyODIgc3VwcG9ydAorCisqIFBhdGNoIGJ5IEplZmYgQ2FyciwgMTEgTm92IDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciBuZXcgdmVyc2lvbiBvZiA4MjcwIHByb2Nlc3NvcnMKKworKiBQYXRjaGVzIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDUgTm92IDIwMDM6CisgIC0gb25seSBwYXNzIHRoZSBBUk0gbGludXggaW5pdHJkIHRhZyB0byB0aGUga2VybmVsIHdoZW4gYW4gaW5pdHJkCisgICAgaXMgYWN0dWFsbHkgcHJlc2VudAorICAtIHVwZGF0ZSBvbWFwMTUxMGlubiBjb25maWd1cmF0aW9uIGZpbGUKKworKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMyBOb3YgMjAwMzoKKyAgLSBtb3JlIGVuZGlhbmVzcyBmaXhlcyBmb3IgTEFOOTFDMTExIGRyaXZlcgorICAtIENGR19IWiBjb25maWd1cmF0aW9uIHBhdGNoIGZvciBOSU9TIEN5Y2xvbmUgYm9hcmQKKworKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgorICBmaXggUEhZX0lOVF9SRUcgdnMuIFBIWV9NQVNLX1JFRyBidWcgaW4gZHJpdmVycy9zbWM5MTExMS5jCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjAgT2N0IDIwMDM6CisgIC0gbWFrZSAibWlpIGluZm8gPGFkZHI+IiBzaG93IGluZm9yIGZvciBQSFkgYXQgImFkZHIiIG9ubHkKKyAgLSBFbmRpYW4gZml4IGZvciBtaWlwaHlfaW5mbygpCisKKyogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxOSBTZXAgMjAwMzoKKyAgTW92ZSBtb3N0IG9mIHRoZSB0aW1lciBpbnRlcnJ1cHQgcmVsYXRlZCBQUEMgY29kZSB0byBwcGNfbGliL2ludGVycnVwdHMuYworCisqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgorICBCcmluZyBBUk0gbWVtb3J5IGxheW91dCBpbiBzeW5jIHdpdGggdGhlIGRvY3VtZW50YXRpb246CisgIHN0YWNrIGFuZCBtYWxsb2MtaGVhcCBhcmUgbm93IGxvY2F0ZWQgX2JlbG93XyB0aGUgVS1Cb290IGNvZGUKKworKiBBY2NlbGVyYXRlIGJvb3Rpbmcgb24gVFJBQiBib2FyZDogcmVhZCBhbmQgY2hlY2sgIGF1dG91cGRhdGUJaW1hZ2UKKyAgaGVhZGVycyBmaXJzdCBpbnN0ZWFkIG9mIGFsd2F5cyByZWFkaW5nIHRoZSB3aG9sZSBpbWFnZXMuCisKKyogRml4IHR5cGUgaW4gTVBDNVhYWCBjb2RlIChwb2ludGVkIG91dCBieSBWaWN0b3IgV3JlbikKKworKiBFbmFibGVkIHBhc3N3b3JkIGNoZWNrIG9uIFJNVSBib2FyZAorCisqIEZpeCBjb25maWd1cmF0aW9uIHByb2JsZW0gd2l0aCBJY2VDdWJlIGluIExPV0JPT1QgY29uZmlndXJhdGlvbjoKKyAgZW52cmlvbm1lbnQgZ290IGVtYmVkZGVkLCBjb3JydXB0aW5nIHRoZSBpbWFnZSBsYXlvdXQuCisKKyogRml4IE5FQyBkaXNwbGF5IG5hbWVzIChpdCdzIDY0NDAgW2ZvciA2NDB4NDgwXSwgbm90IDY2NDApLgorCisqIEFkZGVkIEJNUzIwMDMgYm9hcmQKKyAgYWRkIHN1cHBvcnQgZm9yIE5FQyBOTDY0NDhCQzMzLTU0LiAxMC40IiwgNjQweDQ4MCBURlQgZGlzcGxheQorCisqIEZpeCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQgKG11c3QgdXNlIFVubG9jayBCeXBhc3MgUmVzZXQKKyAgY29tbWFuZCB0byBleGl0IFVubG9jayBCeXBhc3MgTW9kZSk7IGFkanVzdCB0aW1pbmdzIGZvciBmbGFzaCwgU1JBTQorICBhbmQgQ1BMRAorCisqIFVzZSAiLWZQSUMiIGluc3RlYWQgb2YgIi1tcmVsb2NhdGFibGUiIHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aAorICByZWNlbnQgdG9vbHMKKworKiBBZGQgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIHRvICdpbWxzJyBjb21tYW5kCisKKyogQWRkIGJkX2luZm8gZmllbGRzIG5lZWRlZCBmb3IgNHh4IExpbnV4IEkyQyBkcml2ZXIKKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCA0IE5vdi4gMjAwMzoKKyAgRml4IGVycm9yIGluIGNtZF92ZmQuYyAoVFJBQiBib2FyZDogInZmZCAvMSIgc2hvd3Mgbm93IG9ubHkgb25lIEJpdG1hcCkKKworKiBQcmludCB1c2VkIG5ldHdvcmsgaW50ZXJmYWNlIHdoZW4gQ09ORklHX05FVF9NVUxUSSBpcyBzZXQKKworKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBPY3QgMjAwMzoKKyAgQWRkIGxvdyBib290IHN1cHBvcnQgZm9yIE1QQzUyMDAKKworKiBGaXggcHJvYmxlbSB3aXRoIGR1YWwgUENNQ0lBIHN1cHBvcnQgKE5TQ1UpCisKKyogRml4IE1QQzUyMDAgSTJDIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMDoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBGaXggcGFyYW1ldGVyIHBhc3NpbmcgdG8gc3RhbmRhbG9uZSBpbWFnZXMgd2l0aCBib290bSBjb21tYW5kCisKKyogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDMwIE9jdCAyMDAzOgorICBGaXggYnVpbGQgZXJyb3JzIGZvciBpeGRwNDI1IGJvYXJkCisKKyogUGF0Y2ggYnkgRGF2aWQgTS4gSG9ybiwgMjkgT2N0IDIwMDM6CisgIEZpeGVzIHRvIGJ1aWxkIHVuZGVyIENZR1dJTgorCisqIEdldCBJY2VDdWJlIE1HVDUxMDAgd29ya2luZyAoYWdhaW4pCisKKyogRml4IHByb2JsZW1zIGluIG1lbW9yeSB0ZXN0IG9uIHNvbWUgYm9hcmRzICh3aGljaCB3YXMgbm90CisgIG5vbi1kZXN0cnVjdGl2ZSBhcyBpbnRlbmRlZCkKKworKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggT2N0IDIwMDM6CisgIENoYW5nZSBmcy9mYXQvZmF0LmMgdG8gcHV0IEkvTyBidWZmZXJzIGluIEJTUyBpbnN0ZWFkIG9uIHRoZSBzdGFjaworICB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IG9uIEFSTSBzeXN0ZW1zCisKKyogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyOCBPY3QgMjAwMzoKKyAgZml4IGluaXQgc2VxdWVuY2UgZXJyb3IgZm9yIE5JT1MgcG9ydAorCisqIEFsbG93IGxvd2VyY2FzZSBzcGVsbGluZyBmb3IgSWNlQ3ViZV81MjAwOyBzdXBwb3J0IE1QQzUyMDBMSVRFIG5hbWUKKworKiBBZGQgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUgdG8gVFJBQiBjb25maWd1cmF0aW9uCisKKyogUGF0Y2ggYnkgWGlhbyBYaWFuZ2h1YSwgMjMgT2N0IDIwMDM6CisgIHNtYWxsIHBhdGNoIGZvciBtcGM4NXh4CisKKyogRml4IHNtYWxsIHByb2JsZW0gaW4gTVBDNTIwMCBJMkMgZHJpdmVyCisKKyogRml4IEZDQzMgc3VwcG9ydCBvbiBBVEMgYm9hcmQKKworKiBDb3JyZWN0IGhlYWRlciBwcmludGluZyBmb3IgbXVsdGktaW1hZ2UgZmlsZXMgaW4gZG9fYm9vdG0oKQorCisqIE1ha2UgQ09ORklHX1NJTEVOVF9DT05TT0xFIHdvcmsgd2l0aCBDT05GSUdfQVVUT0JPT1RfS0VZRUQKKworKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTggT2N0IDIwMDM6CisgIEZpeCBBVDkxUk05MjAwIGV0aGVybmV0IGRyaXZlcgorCisqIFBhdGNoIGJ5IE55ZSBMaXUsIDE3IE9jdCAyMDAzOgorICBGaXggdHlwbyBpbiBpbmNsdWRlL21wYzh4eC5oCisKKyogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTYgT2N0IDAzOgorICBGaXhlcyBmb3IgY3B1L2FybTkyNS9pbnRlcnJ1cHQuYworICAtIEluaXRpYWxpemUgdGltZXN0YW1wICYgbGFzdGRlYyB2YXJzLgorICAtIGZpeCB0aW1lc3RhbXAgb3ZlcmZsb3dzLgorICAtIGZpeCBsYXN0ZGVjIG92ZXJmbG93LgorICAtIHNtYXJ0ZXIgbm9ybWFsaXphdGlvbiB0byBhbGxvdyB1ZGVsYXkoKSBiZWxvdyAxbXMgdG8gd29yay4KKworKiBQYXRjaCBieSBTY290dCBNY051dHQsIDE2IE9jdAorICBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAorICBDeWNsb25lIEVkaXRpb24gKERLLTFDMjApCisKKyogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IE9jdCAyMDAzOgorICBhZGQgaGludCBhYm91dCBkb2MvUkVBRE1FLnNpbGVudCB0byBSRUFETUUgZmlsZQorCisqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgTlNDVQorCisqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb25FVkIKKworKiBUUkFCIGF1dG8tdXBkYXRlOiBCYXNlIGRlY2lzaW9uIGlmIHdlIGhhdmUgdG8gc3RyaXAgdGhlIGltYWdlCisgIGhlYWRlciBvbiBpbWFnZSB0eXBlIGFzIGVuY29kZWQgaW4gdGhlIGhlYWRlcgorICAoaW5jbHVkZSBpbWFnZSB0eXBlIHBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IE9jdCAyMDAzKQorCisqIFBhdGNoZXMgYnkgWGlhbmdodWEgWGlhbywgMTUgT2N0IDIwMDM6CisKKyAgLSBBZGRlZCBNb3Rvcm9sYSBDUFUgODU0MC84NTYwIHN1cHBvcnQgKGNwdS84NXh4KQorICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NDBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU0MGFkcykKKyAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTYwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NjBhZHMpCisKKyogRml4IGZsYXNoIHRpbWluZ3Mgb24gVFJBQiBib2FyZAorCisqIE1ha2Ugc3VyZSBIVVNIIGlzIGluaXRpYWxpemVkIGZvciBydW5uaW5nIGF1dG8tdXBkYXRlIHNjcmlwdHMKKworKiBNYWtlIDUyMDAgcmVzZXQgY29tbWFuZCBfcmVhbGx5XyByZXNldCB0aGUgYm9hcmQsIHdpdGhvdXQgcnVubmluZworICBhbnkgb3RoZXIgY29kZSBhZnRlciBpdAorCisqIEZpeCBlcnJvcnMgd2l0aCBmbGFzaCBlcmFzZSB3aGVuIHJhbmdlIHNwYW5zCWFjcm9zcyBiYW5rcworICB0aGF0IGFyZSBtYXBwZWQgaW4gcmV2ZXJzZSBvcmRlcgorCisqIEZpeCBmbGFzaCBtYXBwaW5nIGFuZCBkaXNwbGF5IG9uIFAzRzQgYm9hcmQKKworKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTUgSnVsIDIwMDM6CisgIC0gYWRkIHN1cHBvcnQgZm9yIEludGVsIElYUDQyNSBDUFUKKyAgLSBhZGQgc3VwcG9ydCBmb3IgSVhEUDQyNSBldmFsIGJvYXJkCisKKyogQWRkZWQgY29uZmlnIG9wdGlvbiBDT05GSUdfU0lMRU5UX0NPTlNPTEUuICBTZWUgZG9jL1JFQURNRS5zaWxlbnQKKyAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBPY3QgMjAwMworICAtIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKKworKiBQYXRjaGVzIGJ5IFRob21hcyBMYW5nZSwgMDkgT2N0IDIwMDM6CisgIC0gZml4IGNtZF9pZGUuYyBmb3Igbm9uIHBwYyBib2FyZHMgKHJlYWQvd3JpdGUgZnVuY3Rpb25zIGRpZCBub3QKKyAgICBhZGQgQVRBIGJhc2UgYWRkcmVzcykKKyAgLSBmaXggZm9yIHNoYW5ub24gYm9hcmQKKyAgLSAjaWZkZWYgQ09ORklHX0lERV84eHhfRElSRUNUIHNvbWUgb3RoZXJ3aXNlIHVudXNlZCBjb2RlCisgIC0gRW5kaWFuIHN3YXAgQVRBIGlkZW50aXR5IGZvciBhbGwgYmlnIGVuZGlhbiBDUFVzLCBub3QganVzdCBQUEMKKyAgLSBNSVBTIG9ubHk6IE5ldyBvcHRpb24gQ09ORklHX01FTVNJWkVfSU5fQllURVMgZm9yIHBhc3NpbmcgbWVtc2l6ZQorICAgIGFyZ3MgdG8gbGludXgKKyAgLSBhZGQgc3VwcG9ydCBmb3IgZGJhdTF4MDAgYm9hcmQgKE1JUFMzMikKKworKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IE9jdCAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgZGVicmlzIGJvYXJkCisKKyogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDkgT2N0IDIwMDM6CisgIEZpeGVzIGZvciBUUkFCIGJvYXJkCisgIC0gL2JvYXJkL3RyYWIvcnM0ODUuYzogY29ycmVjdCBiYXVkcmF0ZQorICAtIC9ib2FyZC90cmFiL2NtZF90cmFiLmM6IGJ1ZyBmaXggZm9yIHByb2JsZW0gd2l0aCB0aW1lciBvdmVyZmxvdyBpbgorICAgIHVkZWxheSgpOyBmaXggc29tZSB0aW1pbmcgcHJvYmxlbXMgd2l0aCBhZGMgY29udHJvbGxlcgorICAtIC9ib2FyZC90cmFiL3RyYWJfZmt0LmM6IGFkZCBuZXcgY29tbWFuZHM6IGdhaW4sIGVlcHJvbSBhbmQgcG93ZXI7CisgICAgbW9kaWZ5IGNvbW1hbmRzOiB0b3VjaCBhbmQgYnV6emVyCisKKyogRGlzYWJsZSBDT05GSUdfU1VQUE9SVF9WRkFUIHdoZW4gdXNlZCB3aXRoIENPTkZJR19BVVRPX1VQREFURQorICAocXVpY2sgJiBkaXJ0eSB3b3JrYXJvdW5kIGZvciByb2d1ZSBwb2ludGVyIHByb2JsZW0gaW4gZ2V0X3ZmYXRuYW1lKCkpOworICBVc2UgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGZvciBhdXRvX3VwZGF0ZSBpbnN0ZWFkIG9mIGh1c2ggY29tbWFuZHMKKworKiBQYXRjaCBieSBTY290dCBNY051dHQsIDA0IE9jdCAyMDAzOgorICAtIGFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy0zMiBDUFUKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTmlvcyBDeWNsb25lIERldmVsb3BtZW50IEtpdCAoREstMUMyMCkKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyOSBTZXAgMjAwMzoKKyAgLSBBIHNlY29uZCBwYXJhbWV0ZXIgZm9yIGJvb3RtIG92ZXJ3cml0ZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IKKyAgICAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzLgorICAtIGJvb3RtIHNldHMgZW52aXJvbm1lbnQgdmFyaWFibGUgImZpbGVzaXplIiB0byB0aGUgcmVzdWx0aW5nCisgICAgKHVuY29tcHJlc3NlZCkgZGF0YSBsZW5ndGggZm9yICJTdGFuZGFsb25lIEFwcGxpY2F0aW9uIiBpbWFnZXMKKyAgICB3aGVuIGF1dG9zdGFydCBpcyBzZXQgdG8gIm5vIi4gTm93IHlvdSBjYW4gZG8gc29tZXRoaW5nIGxpa2UKKwlpZiBib290bSAkZnBnYWRhdGEgJHNvbWVfZnJlZV9yYW0gOyB0aGVuCisJCWZwZ2EgbG9hZCAwICRzb21lX2ZyZWVfcmFtICRmaWxlc2l6ZQorCWZpCisKKyogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDI1IFNlcHQgMjAwMzoKKyAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgUmV2LiBDIGJvYXJkCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjUgU2VwIDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciBaZXBoeXIgRW5naW5lZXJpbmcgWlBDLjE5MDAgYm9hcmQKKworKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMyBTZXAgMjAwMzoKKyAgYWRkIENNRF9QT1JUSU8gdG8gQ0ZHX0NNRF9OT05TVEQgKGNvbW1hbmRzIGluIHF1ZXN0aW9uIGFyZSBvbmx5CisgIGltcGxlbWVudGVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSkKKworKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDIzIFNlcCAyMDAzOgorICBmaXggcGxsX3BjaV90b19tZW1fbXVsdGlwbGllciB0YWJsZSBmb3IgTVBDODI0NQorCisqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIyIFNlcCAyMDAzOgorICBlbmFibGUgdGltZWQgYXV0b2Jvb3Qgb24gUFhBCisKKyogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyMiBTZXAgMjAwMzoKKyAgLSBhZGQgJChDRkxBR1MpIHRvICItcHJpbnQtbGliZ2NjLWZpbGVuYW1lIiBzbyBjb21waWxlciBkcml2ZXIKKyAgICByZXR1cm5zIGNvcnJlY3QgbGliZ2NjIGZpbGUgcGF0aAorICAtICJsYXRlbmN5IiByZWR1Y3Rpb24gb2YgYnVzeS1sb29wIHdhaXRpbmcgdG8gaW1wcm92ZSAiVS1Cb290IiBib290CisgICAgdGltZSBvbiBzM2MyNHgwIHN5c3RlbXMKKworKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTkgU2VwIDIwMDM6CisgIC0gQWRkIENGR19GQVVMVF9FQ0hPX0xJTktfRE9XTiBvcHRpb24gdG8gZWNobyB0aGUgaW52ZXJ0ZWQgRXRoZXJuZXQKKyAgICBsaW5rIHN0YXRlIHRvIHRoZSBmYXVsdCBMRUQuCisgIC0gSW4gTmV0TG9vcCwgbWFrZSB0aGUgRmF1bHQgTEVEIHJlZmxlY3QgdGhlIGxpbmsgc3RhdHVzLiAgVGhlIGxpbmsKKyAgICBzdGF0dXMgZ2V0cyB1cGRhdGVkIG9uIGVudHJ5LCBhbmQgb24gdGltZW91dHMuCisKKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTggU2VwIDIwMDM6CisgIGFsbG93IG1raW1hZ2UgdG8gYnVpbGQgYW5kIHJ1biBvbiBDeWd3aW4taG9zdGVkIHN5c3RlbXMKKworKiBQYXRjaCBieSBGcmFuayBN/GxsZXIsIDE4IFNlcCAyMDAzOgorICB1c2UgYmlfaW50ZnJlcSBpbnN0ZWFkIG9mIGJpX2J1c2ZyZXEgdG8gY29tcHV0ZSBmZWNfbWlpX3NwZWVkIGluCisgIGNwdS9tcGM4eHgvZmVjLmMKKworKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTYgU2VwIDIwMDM6CisgIGFkZCB0b29sIHRvIGNvbXB1dGUgZmlsZWRzIGluIHRoZSBQTFBSQ1IgcmVnaXN0ZXIgZm9yIE1QQzg2eAorCisqIFVzZSBJSF9UWVBFX0ZJTEVTWVNURU0gZm9yIFRSQUIgImRpc2siIGltYWdlcy4KKworKiBGaXggYnVpbGQgcHJvYmxlbXMgdW5kZXIgRnJlZUJTRAorCisqIEFkZCBnZW5lcmljIGZpbGVzeXN0ZW0gaW1hZ2UgdHlwZQorCisqIE1ha2UgZmF0bG9hZCBzZXQgZmlsZXNpemUgZW52aXJvbm1lbnQgdmFyaWFibGUKKworKiBlbmFibGUgYmFzaWMgLyBtZWRpdW0gLyBoaWdoLWVuZCBjb25maWd1cmF0aW9ucyBmb3IgUFBDaGFtZWxlb25FVkIKKyAgYm9hcmQ7IGZpeCBOQU5EIGNvZGUKKworKiBlbmFibGUgVEZUUCBjbGllbnQgY29kZSB0byBzcGVjaWZ5IHRvIHRoZSBzZXJ2ZXIgdGhlIGRlc2lyZWQKKyAgdGltZW91dCB2YWx1ZSAoc2VlIFJGQy0yMzQ5KQorCisqIEltcHJvdmUgU0RSQU0gc2V0dXAgZm9yIFRSQUIgYm9hcmQKKworKiBTdXBwcmVzcyBhbGwgb3V0cHV0IHdpdGggc3BsYXNoc2NyZWVuIGNvbmZpZ3VyZWQgb25seSBpZiAic3BsYXNoaW1hZ2UiCisgIGlzIHNldAorCisqIEZpeCBwcm9ibGVtcyB3aXRoIEkyQyBzdXBwb3J0IGZvciBtcGM1MjAwCisKKyogQWRhcHQgVFJBQiBjb25maWd1cmF0aW9uIGFuZCBhdXRvX3VwZGF0ZSB0byBuZXcgbWVtb3J5IGxheW91dAorCisqIEFkZCBjb25maWd1cmF0aW9uIGZvciB3dGsgYm9hcmQKKworKiBBZGQgc3VwcG9ydCBmb3IgdGhlIFNoYXJwIExRMDY1VDlEUjUxVSBMQ0QgZGlzcGxheQorCisqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNyBTZXAgMjAwMzoKKyAgLSBGaXhlcyBmb3IgTVBDODI2NiBkZWZhdWx0IGNvbmZpZworICAtIEFsbG93IGV0aF9sb29wYmFja190ZXN0KCkgb24gODI2MCB0byB1c2UgYSBzdWJzZXQgb2YgdGhlIEZDQydzCisKKyogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTcgU2VwIDIwMDM6CisgIC0gdXBkYXRlIFJFQURNRSAoU0hPV19CT09UX1BST0dSRVNTIHZhbHVlcyBmb3IgY21kX25hbmQuYyBhbmQKKyAgICBlbnZfY29tbW9uLmMpCisgIC0gc2JjODI2MCB0d2Vha3MKKyAgLSBhZGp1c3QgImhlbHAiIG91dHB1dAorCisqIFBhdGNoZXMgYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CisgIC0gZml4IHNwZWxsaW5nIGVycm9ycworICAtIHNldCBHRF9GTEdfREVWSU5JVCBmbGFnIG9ubHkgYWZ0ZXIgZGV2aWNlIGZ1bmN0aW9uIHBvaW50ZXJzCisgICAgYXJlIHZhbGlkCisgIC0gQWxsb3cgQ0ZHX0FMVF9NRU1URVNUIG9uIHN5c3RlbXMgd2hlcmUgYWRkcmVzcyB6ZXJvIGlzbid0CisgICAgd3JpdGVhYmxlCisgIC0gZW5hYmxlIDMucmQgVUFSVCAoU1QtVUFSVCkgb24gUFhBKFhTY2FsZSkgQ1BVcworICAtIHRyaWdnZXIgd2F0Y2hkb2cgd2hpbGUgd2FpdGluZyBpbiBzZXJpYWwgZHJpdmVyCisKKyogQWRkIGF1dG8tdXBkYXRlIGNvZGUgZm9yIFRSQUIgYm9hcmQgdXNpbmcgVVNCIG1lbW9yeSBzdGlja3MsCisgIHN1cHBvcnQgbmV3IGNvbmZpZ3VyYXRpb24gd2l0aCBtb3JlIG1lbW9yeQorCisqIGRpc2FibGUgTVBDNTIwMCBidXMgcGlwZWxpbmluZyBhcyB3b3JrYXJvdW5kIGZvciBidXMgY29udGVudGlvbgorCisqIE1vZGlmeSBYTEIgYXJiaXRlciBwcmlvcml0aWVzIG9uIE1QQzUyMDAgc28gYWxsIGRldmljZXMgdXNlIHNhbWUKKyAgcHJpb3JpdHk7IGNvbmZpZ3VyZSBjcml0aWNhbCBpbnRlcnJ1cHRzIHRvIGJlIGhhbmRsZWQgbGlrZSBleHRlcm5hbAorICBpbnRlcnJ1cHRzCisKKyogTWFrZSBJUEIgY2xvY2sgb24gTUdUNTEwMC9NUEM1MjAwIGNvbmZpZ3VyYWJsZSBpbiBib2FyZCBjb25maWcgZmlsZTsKKyAgZ28gYmFjayB0byA2NiBNSHogZm9yIHN0YWJpbGl0eQorCisqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE1IFNlcCAyMDAzOgorICAtIGFkZCBkZXNjcmlwdGlvbiBmb3IgbWlzc2luZyBDRkdfQ01EXyogZW50cmllcyBpbiB0aGUgUkVBRE1FIGZpbGUKKyAgLSBzYWNzbmcgdHdlYWtzCisKKyogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxNCBTZXAgMjAwMzoKKyAgZW5hYmxlIHdhdGNoZG9nIHN1cHBvcnQgZm9yIGFsbCBNUEM4MjR4IGJvYXJkcyB0aGF0IGhhdmUgYSB3YXRjaGRvZworCisqIE9uIE1QQzUyMDAsIHJlc3RyaWN0IEZFQyB0byBhIG1heGltdW0gb2YgMTAgTWJwcyB0byB3b3JrIGFyb3VuZCB0aGUKKyAgIk5vbi1vY3RldCBBbGlnbmVkIEZyYW1lIiBlcnJvcnMgd2Ugc2VlIGF0IDEwMCBNYnBzCisKKyogUGF0Y2ggYnkgU2hhcmFkIEd1cHRhLCAxNCBTZXAgMjAwMzoKKyAgZml4IFNQUiBudW1iZXJzIGZvciB1cHBlciBCQVQgcmVnaXN0ZXIgKFtJRF1CQVRbNC03XVtVTF0pCisKKyogUGF0Y2ggYnkgbGxhbmRyZSwgMTEgU2VwIDIwMDM6CisgIHVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBQUENoYW1lbGVvbkVWQiBib2FyZAorCisqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMTMgU2VwIDIwMDM6CisgIHZhcmlvdXMgY2hhbmdlcyB0byBWQ01BOSBib2FyZCBzcGVjaWZpYyBmaWxlcworCisqIEFkZCBJMkMgc3VwcG9ydCBmb3IgTUdUNTEwMCAvIE1QQzUyMDAKKworKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTEgU2VwIDIwMDM6CisgIENoYW5nZWQgZGVmYXVsdCBtZW1vcnkgb3B0aW9uIG9uIE1QQzgyNjZBRFMgdG8gTk9UIGJlIFBhZ2UgQmFzZWQKKyAgSW50ZXJsZWF2ZSwgc2luY2UgdGhpcyBkb2Vzbid0IHdvcmsgdmVyeSB3ZWxsIHdpdGggdGhlIHN0YW5kYXJkCisgIDE2TUIgRElNTQorCisqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTIgU2VwIDIwMDM6CisgIGZpeCBNYWtlZmlsZSBzZXR0aW5ncyBmb3Igc2s5OCBkcml2ZXIKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDAzOgorICAtIG5ldyBib2FyZHMgYWRkZWQ6IERQNDA1LCBIVUI0MDUsIFBMVTQwNSwgVk9INDA1CisgIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKKyAgLSBjcHUvcHBjNHh4L3NkcmFtLmM6IGRpc2FibGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVmb3JlIHNldHRpbmcKKyAgICBmaXJzdCB2YWx1ZXMKKyAgLSBjcHUvcHBjNHh4LzQwNV9wY2kuYzogc2V0IHZlbmRvciBpZCBvbiBQUEM0MDVFUCBzeXN0ZW1zCisKKyogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTEgU2VwIDIwMDM6CisgIGFkZCBidXJuLWluIHRlc3RzIGZvciBUUkFCIGJvYXJkCisKKyogRW5hYmxlIGluc3RydWN0aW9uIGNhY2hlIG9uIE1QQzUyMDAgYm9hcmQKKworKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgU2VwIDIwMDM6CisgIC0gZml4IFVTQiBkYXRhIHBvaW50ZXIgYXNzaWdubWVudCBmb3IgYnVsayBvbmx5IHRyYW5zZmVyLgorICAtIHByZXZlbnQgdG8gZGlzcGxheSBlcmFzZWQgZGlyZWN0b3JpZXMgaW4gRkFUIGZpbGVzeXN0ZW0uCisKKyogQ2hhbmdlIG91dHB1dCBmb3JtYXQgZm9yIE5BTkQgZmxhc2ggLSBtYWtlIGl0IGxvb2sgbGlrZSBmb3Igb3RoZXIKKyAgbWVtb3J5LCB0b28KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC44OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQKKworKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCA5IFNlcCAyMDAzOgorICBhZGQgRkFUIHN1cHBvcnQgZm9yIElERSwgU0NTSSBhbmQgVVNCCisKKyogUGF0Y2hlcyBieSBHbGViIE5hdGFwb3YsIDIgU2VwIDIwMDM6CisgIC0gY2xlYW51cCBvZiBQT1NUIGNvZGUgZm9yIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMKKyAgLSBNUEM4MjR4IGxvY2tzIHdheTAgb2YgZGF0YSBjYWNoZSBmb3IgdXNlIGFzIGluaXRpYWwgUkFNOworICAgIHRoaXMgcGF0Y2ggdW5sb2NrcyBpdCBhZnRlciByZWxvY2F0aW9uIHRvIFJBTSBhbmQgaW52YWxpZGF0ZXMKKyAgICB0aGUgbG9ja2VkIGVudHJpZXMuCisKKyogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAzMCBBdWcgMjAwMzoKKyAgbmV3IEkyQyBkcml2ZXIgZm9yIG1wYzEwNyBicmlkZ2UuIE5vdyB3b3JrcyBmcm9tIGZsYXNoLgorCisqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDExIEF1ZyAyMDAzOgorICAtIEpGRlMyOiBmaXggdHlwbyBpbiBjb21tb24vY21kX2pmZnMyLmMKKyAgLSBKRkZTMjogZml4IENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUyBvcHRpb24KKyAgLSBKRkZTMjogcmVtb3ZlIG5vZGUgdmVyc2lvbiAwIHdhcm5pbmcKKyAgLSBKRkZTMjogYWNjZXB0IEpGRlMyIFBBRERJTkcgbm9kZXMKKyAgLSBTWE5JODU1VDogYWRkIEFNMjlMVjgwMCBzdXBwb3J0CisgIC0gU1hOSTg1NVQ6IG1vdmUgZW52aXJvbm1lbnQgZnJvbSBFRVBST00gdG8gZmxhc2gKKyAgLSBTWE5JODU1VDogYm9vdCBmcm9tIEpGRlMyIGluIE5PUiBvciBOQU5EIGZsYXNoCisKKyogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDExIEF1ZyAyMDAzOgorICBmaXhlcyBmb3IgSTJDIG9uIE1QQzgyNDAKKyAgLSBmaXggaTJjX3dyaXRlIHJvdXRpbmUKKyAgLSBmaXggaXByb2JlIGNvbW1hbmQKKyAgLSBlbGltaW5hdGVzIHVzZSBvZiBnbG9iYWwgdmFyaWFibGVzLCBwbHVzIGRlYWQgY29kZSwgY2xlYW51cC4KKworKiBBZGQgc3VwcG9ydCBmb3IgVVNCIE1hc3MgU3RvcmFnZSBEZXZpY2VzIChCQkIpCisgICh0ZXN0ZWQgd2l0aCBVU0IgbWVtb3J5IHN0aWNrcyBvbmx5KQorCisqIEF2b2lkIGZsaWNrZXIgb24gVFJBQidzIFZGRAorCisqIEFkZCBzdXBwb3J0IGZvciBTSzk4eHggZHJpdmVyCisKKyogQWRkIFBDSSBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKKworKiBTdXBwb3J0IEljZUN1YmUgYm9hcmQgY29uZmlndXJhdGlvbnMgd2l0aCAxIHggQU1EIEFNMjlMVjA2NSAoOCBNQikKKyAgb3IgMSB4IEFNMjlMVjY1MiAodHdvIExWMDY1IGluIG9uZSBjaGlwID0gMTYgTUIpOworICBSdW4gSVBCIGF0IDEzMyBNaHo7IGFkanVzdCB0aGUgTUlJIGNsb2NrIGZyZXF1ZW5jeSBhY2NvcmRpbmdseQorCisqIFNldCBCUkdfQ0xLIG9uIFBNODI1LzgyNiB0byA2NE1IeiAoVkNPX09VVCAvIDQsIGluc3RlYWQgb2YgMTYJIE1IeikKKyAgdG8gYWxsb3cgZm9yIG1vcmUgYWNjdXJhdGUgYmF1ZHJhdGUgc2V0dGluZ3MKKyAgKGVycm9yIG5vdyAwLjclIGF0IDExNSBrYnBzLCBpbnN0ZWFkIG9mIDMuNSUgYmVmb3JlKQorCisqIFBhdGNoIGJ5IEFuZHJlYXMgTW9ociwgNCBTZXAgMjAwMzoKKyAgRml4IGEgbG90IG9mIHNwZWxsaW5nIGVycm9ycworCisqIEFkZCBzdXBwb3J0IGZvciBQUENoYW1lbGVvbiBFdmFsIEJvYXJkCisKKyogQWRkIHN1cHBvcnQgZm9yIFAzRzQgYm9hcmQKKworKiBGaXggcHJvYmxlbSB3aXRoIE1HVDUxMDAgRkVDIGRyaXZlcjogYWRkICJlYXJseSIgTUFDIGFkZHJlc3MKKyAgaW5pdGlhbGl6YXRpb24KKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA3IEF1ZyAyMDAzOgorICBjaGVjayBCQ1NSIHRvIGRldGVjdCBpZiB0aGUgYm9hcmQgaXMgY29uZmlndXJlZCBpbiBQQ0kgbW9kZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljc6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogUGF0Y2ggYnkgUmFnaHUgS3Jpc2huYXByYXNhZCwgNyBBdWcgMjAwMzoKKyAgYWRkIHN1cHBvcnQgZm9yIEFkZGVyIElJIE1QQzg1MlQgbW9kdWxlCisKKyogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxOSBBdWcgMjAwMzoKKyAgZml4IFRJIElubm92YXRvci9PTUFQMTUxMCBwaW4gY29uZmlncworCisqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMTggQXVnIDIwMDMKKyAgLSBhZGQgc3VwcG9ydCBmb3IgYXJtOTI2ZWpzIGNwdSBjb3JlCisgIC0gYWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTYxMCBJbm5vdmF0b3IgQm9hcmQKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNCBBdWcgMjAwMzoKKyAgYWRkIHN1cHBvcnQgZm9yIGJ6aXAyIHVuY29tcHJlc3Npb24KKworKiBBZGQgR0NDIGxpYnJhcnkgdG8gZXhhbXBsZXMvTWFrZWZpbGUgc28gR0NDIHV0aWxpdHkgZnVuY3Rpb25zIHdpbGwKKyAgYmUgcmVzb2x2ZWQsIHRvbworCisqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQgdXNpbmcgc29mdHdhcmUgSTJDIGRyaXZlcgorICAoYmVjYXVzZSBvZiBiZXR0ZXIgcmVzcG9uc2UgdG8gaXByb2JlIGNvbW1hbmQpOyBmaXggcHJvYmxlbSB3aXRoCisgICJyZXNldCIgY29tbWFuZAorCisqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBBdWcgMjAwMzoKKyAgQWRkZWQgQ09ORklHX0JPT1RQX0ROUzIgYW5kIENPTkZJR19CT09UUF9TRU5EX0hPU1ROQU1FIHRvCisgIENPTkZJR19CT09UUF9NQUtTIChzZWUgUkVBRE1FKS4KKworKiBGaXggSUNVODYyIGVudmlyb25tZW50IHByb2JsZW0KKworKiBGaXggUkFNIHNpemUgZGV0ZWN0aW9uIGZvciBSTVUgYm9hcmQKKworKiBJbXBsZW1lbnQgInJlc2V0IiBmb3IgTUdUNTEwMC9NUEM1MjAwIHN5c3RlbXMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC42OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIE1ha2UgRXRoZXJuZXQgYXV0b25lZ290aWF0aW9uIG9uIElOQ0EtSVAgd29yayBmb3IgYWxsIGNsb2NrIHJhdGVzOworICBhbGxvdyBzZWxlY3Rpb24gb2YgY2xvY2sgZnJlcXVlbmN5IGFzICJtYWtlIiB0YXJnZXQKKworKiBJbXBsZW1lbnQgbWVtb3J5IGF1dG9zaXppbmcgY29kZSBmb3IgSWNlQ3ViZSBib2FyZHMKKworKiBDb25maWd1cmUgbmV0d29yayBwb3J0IG9uIElOQ0EtSVAgZm9yIGF1dG9uZWdvdGlhdGlvbgorCisqIEZpeCBvdmVyZmxvdyBwcm9ibGVtIGluIG5ldHdvcmsgdGltZW91dCBjb2RlCisKKyogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgOCBBdWcgMjAwMzoKKyAgQWxsb3cgY3JjMzIgdG8gYmUgdXNlZCBhdCBhZGRyZXNzIDB4MDAwIChjcmMzMl9ub19jb21wLCB0b28pLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogVXBkYXRlIGZvciBUUU0gYm9hcmQgZGVmYXVsdHM6CisgIGRpc2FibGUgY2xvY2tzX2luX21oeiwgZW5hYmxlIGJvb3QgY291bnQgbGltaXQKKworKiBSZW1vdmVkIHRvb2xzL2dkYiBmcm9tICJtYWtlIGFsbCIgdGFyZ2V0LiAgQWRkZWQgbWFrZSB0YXJnZXQgImdkYnRvb2xzIgorICBpbiB0b3BsZXZlbCBkaXJlY3RvcnkgaW5zdGVhZC4gIFJlbW92ZWQgYXN0ZXN0LmMgZnJvbSB0b29scy9nZGIgYmVjYXVzZQorICBpdCBpcyBubyBsb25nZXIgcmVsZXZhbnQuCisKKyogRml4IFBDSSBzdXBwb3J0IGZvciBNUEM1MjAwIC8gSWNlQ3ViZSBCb2FyZAorCisqIE1hcCBJU1AxMzYyIFVTQiBPVEcgY29udHJvbGxlciBmb3IgTlNDVSBib2FyZAorCisqIFBhdGNoIGJ5IEJyYWQgUGFya2VyLCAwMiBBdWcgMjAwMzoKKyAgZml4IHNjNTIwX2NkcCBwcm9ibGVtcworCisqIEltcGxlbWVudCBCb290IEN5Y2xlIERldGVjdGlvbiAoUmVxLiAyLjMgb2YgT1NETCBDR0wgUmVxaXJlbWVudHMpCisKKyogQWxsb3cgZXJhc2UgY29tbWFuZCB0byBjcm9zcyBmbGFzaCBiYW5rIGJvdW5kYXJpZXMKKworKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIEp1bCAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgTHludXhXb3JrcyBLZXJuZWwgRG93bmxvYWRhYmxlIEltYWdlcyAoS0RJcykuCisgIEJvdGggTHlueE9TIGFuZCBCbHVlQ2F0IGxpbnV4IEtESXMgYXJlIHN1cHBvcnRlZC4KKworKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNSBKdWwgMjAwMzoKKyAgdXNlIG1vcmUgcmVsaWFibGUgcmVzZXQgZm9yIE9NQVAvOTI1VAorCisqIFBhdGNoIGJ5IE55ZSBMaXUsIDI1IEp1bCAyMDAzOgorICBmaXggdHlwbyBpbiBtcGM4eHguaAorCisqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI0IEp1bCAyMDAzOgorICBGaXhlcyBmb3IgY21kX25hbmQuYzoKKyAgLSBGaXhlZCBudWxsIGRlcmVmZXJlY2Ugd2hpY2ggY291bGQgcmVzdWx0IGluIGluY29ycmVjdCBFQ0MgdmFsdWVzLgorICAtIEFkZGVkIHN1cHBvcnQgZm9yIGRldmljZXMgd2l0aCBubyBSZWFkeS9CdXN5IHNpZ25hbCBob29rZWQgdXAuCisgIC0gQWRkZWQgT01BUDE1MTAgcmVhZC93cml0ZSBwcm90ZWN0IGhhbmRsaW5nLgorICAtIEZpeGVkIG5hbmQuaCdzIEVDQ1BPUy4gQSBjb25mbGljdCBleGlzdGVkIHdpdGggUE9TNSBhbmQgYmFkYmxvY2sKKyAgICBmb3Igbm9uLUpGRlMyLgorICAtIFN3aXRjaGVkIGRlZmF1bHQgRUNDIHRvIGJlIEpGRlMyLgorCisqIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMAorCisqIFByb3ZpZGUgY29uc2lzdGVudCBpbnRlcmZhY2UgdG8gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8gYWNjZXNzCisgIHRoZSAnZ2xvYmFsX2RhdGEnIHN0cnVjdHVyZQorICBQcm92aWRlIGEgZG9jL1JFQURNRS5zdGFuZGFsb25lIG1vcmUgdXNlZnVsIHRvIHVzZXJzL2RldmVsb3BlcnMuCisKKyogTWFrZSBJY2VDdWJlIE1HVDUxMDAgRkVDIGRyaXZlciB3b3JrCisKKyogSW1wbGVtZW50IG5ldyBtZWNoYW5pc20gdG8gZXhwb3J0IFUtQm9vdCdzIGZ1bmN0aW9ucyB0byBzdGFuZGFsb25lCisgIGFwcGxpY2F0aW9uczogaW5zdGVhZCBvZiB1c2luZyAoUFBDLXNwZWNpZmljKSBzeXN0ZW0gY2FsbHMgd2Ugbm93CisgIHVzZSBhIGp1bXAgdGFibGU7IHBsZWFzZSBzZWUgZG9jL1JFQURNRS5zdGFuZGFsb25lIGZvciBkZXRhaWxzCisKKyogUGF0Y2ggYnkgRGF2ZSBXZXN0d29vZCwgMjQgSnVsIDIwMDM6CisgIGFkZGVkIHN1cHBvcnQgZm9yIFVuaXR5IE9TIChhIHByb3ByaWV0YXJ5IE9TKQorCisqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIzIEp1bCAyMDAzOgorICBhZGQgImltbHMiIGNvbW1hbmQgdG8gcHJpbnQgZmxhc2ggdGFibGUgb2YgY29udGVudHMKKworKiBGaXggY29sZCBib290IGRldGVjdGlvbiBmb3IgbG9nIGJ1ZmZlciByZXNldAorCisqIFJldHVybiBlcnJvciBmb3IgaW52YWxpZCBsZW5ndGggc3BlY2lmaWVycyB3aXRoICJjcC5YIiBldGMuCisKKyogRml4IHN0YXJ0dXAgcHJvYmxlbSBvbiBNSVBTCisKKyogQWxsb3cgZm9yIENPTkZJR19TUExBU0hfU0NSRUVOIGV2ZW4gd2hlbiBubyBleHBsaWNpdAorICBiaXRtYXAgc3VwcG9ydCBpcyBjb25maWd1cmVkCisKKyogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDE4IEp1bCAyMDAzOgorICAtIGZpeCBlbmRpbmFuZXNzIHByb2JsZW0gaW4gY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjMS5jCisKKyogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE4IEp1bCAyMDAzOgorICAtIGZpeCBtZW1vcnkgY29uZmlndXJhdGlvbiBmb3IgTUlQNDA1VAorICAtIGZpeCBwcmludG91dCBvZiBiYXVkcmF0ZSBmb3IgImxvYWRiIDxsb2FkYWRkcj4gPGJhdWRyYXRlPiIKKworKiBDbGVhbnVwIG9mIFRRTTgyeHggY29uZmlndXJhdGlvbnM7IHVzZSAib2ZmaWNpYWwiIGJvYXJkIHR5cGVzCisgIHRvIG1ha2Ugc2VsZWN0aW9uIGVhc2llci4KKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBKdWwgMjAwMzoKKyAgYWRkIGRlbGF5IHRvIGdldCBJMkMgd29ya2luZyB3aXRoICJpbW0iIGNvbW1hbmQgYW5kIHMzYzI0eDBfaTJjLmMKKworKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNyBKdWx5IDAzOgorICAtIEZpeGVkIGJ1ZyBpbiBPTUFQMTUxMCBiYXVkIHJhdGUgZGl2aXNvciBzZXR0aW5ncy4KKworKiBQYXRjaCBieSBOeWUgTGl1LCAxNiBKdWx5IDIwMDM6CisgIE1QQzg2MEZBRFMgZml4ZXM6CisgIC0gYWRkIE1QQzg2eEFEUyBzdXBwb3J0ICh1c2VzIE1QQzg2eEFEUy5oKQorICAtIGFkZCA4NjZQL1QgY29yZSBzdXBwb3J0IChhbHNvIE1QQzg1OVQvTVBDODU5RFNML01QQzg1MlQpCisgICAgbyBQTFBSQ1IgY2hhbmdlcworICAgIG8gQlJHIGNoYW5nZXMgKEVYVEFML1hUQUwgcmVzdHJpY3RlZCB0byAxME1IeikKKyAgICBvIGRvbid0IHRydXN0IGdjbGsoKSBzb2Z0d2FyZSBtZWFzdXJlbWVudCBieSBkZWZhdWx0LCBkZXBlbmQgb24KKyAgICAgIENPTkZJR184eHhfR0NMS19GUkVRCisgIC0gYWRkIERSQU0gU0lNTSBub3QgaW5zdGFsbGVkIGRldGVjdGlvbgorICAtIHVzZSBtb3JlICJjb3JyZWN0IiBTRFJBTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQorICAtIGFsbG93IGRpZmZlcmVudCBTRFJBTSBzaXplcyAoOHh4QURTIGhhcyA4TSkKKyAgLSBkZWZhdWx0IERFUiBpcyAwCisgIC0gcmVtb3ZlIHVudXNlZCBNQU1SIGRlZmluZXMgZnJvbSBGQURTODYwVC5oIChhbGwgZG9uZSBpbiBmYWRzLmMpCisgIC0gcmVuYW1lIE1BTVIvTUJNUiBkZWZpbmVzIHRvIGJlIG1vcmUgY29uc2lzdGVudC4gU2hvdWxkIGV2ZW50dWFsbHkKKyAgICBiZSBtZXJnZWQgaW50byBNeE1SIHRvIGJldHRlciByZWZsZWN0IHRoZSBQb3dlclFVSUNDIGRhdGFzaGVldC4KKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdWwgMjAwMzoKKyAgc3VwcG9ydCBuZXcgTW90b3JvbGEgUFEyRkFEUy1aVSBldmFsdWF0aW9uIGJvYXJkIHdoaWNoIHJlcGxhY2VkCisgIE1QQzgyNjBBRFMgYW5kIE1QQzgyNjZBRFMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC40OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIEFkZCBzdXBwb3J0IGZvciBJY2VDdWJlIGJvYXJkICh3aXRoIE1HVDUxMDAgYW5kIE1QQzUyMDAgQ1BVcykKKworKiBBZGQgc3VwcG9ydCBmb3IgTUdUNTEwMCBhbmQgTVBDNTIwMCBwcm9jZXNzb3JzCisKKyogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDE1IEp1bCAyMDAzOgorICB1cGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4zOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMDQgSnVsIDIwMDMKKyAgLSBhZGRlZCBzdXBwb3J0IGZvciBhcm05MjV0IGNwdSBjb3JlCisgIC0gYWRkZWQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNTEwIElubm92YXRvciBCb2FyZAorCisqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMTQgSnVsIDIwMDM6CisgIC0gYWRkIEkyQyBzdXBwb3J0IGZvciBzM2MyNDAwIHN5c3RlbXMgKHRyYWIgYm9hcmQpCisgIC0gKHJlLSkgYWRkICJwaW5nIiB0byBjb21tYW5kIHRhYmxlCisKKyogRml4IGhhbmRsaW5nIG9mICJzbG93IiBQT1NUIHJvdXRpbmVzCisKKyogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwMzoKKyAgLSBDb3JyZWN0IGZsYXNoIGFuZCBKRkZTMiBzdXBwb3J0IGZvciBNUEM4MjYwQURTCisgIC0gZml4IFBWUiB2YWx1ZXMgYW5kIGNsb2NrIGdlbmVyYXRpb24gZm9yIFBvd2VyUVVJQ0MgSUkgZmFtaWx5CisgICAgKDgyNzAvODI3NS84MjgwKQorCisqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDA4IEp1bCAyMDAzOgorICAtIGFkZCBzdXBwb3J0IGZvciBNNjhLIHRhcmdldHMKKworKiBQYXRjaCBieSBLZW4gQ2hvdSwgMyBKdWw6CisgIC0gRml4IFBDSSBjb25maWcgdGFibGUgZm9yIEEzMDAwCisgIC0gRml4IGlvYmFzZSBmb3IgbmF0c2VtaS5jCisgICAgKFBDSV9CQVNFX0FERFJFU1NfMCBpcyB0aGUgSU8gYmFzZSByZWdpc3RlciBmb3IgRFA4MzgxNSkKKworKiBBbGxvdyB0byBlbmFibGUgInNsb3ciIFBPU1Qgcm91dGluZXMgYnkga2V5IHByZXNzIG9uIHBvd2VyLW9uCisqIEZpeCB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgc3dpdGNoaW5nIG9mIExDRCBiYWNrbGlnaHQgb24gTFdNT04KKyogVHdlYWsgb3V0cHV0IGZvcm1hdCBmb3IgTFdNT04KKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEp1bCAyMDAzOgorICAtIEZpeCBidWcgaW4gQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUuCisgIC0gQVI0MDUgY29uZmlnIHVwZGF0ZWQuCisgIC0gT0NSVEMvT1JTRzogYnNwIGNvbW1hbmQgYWRkZWQuCisgIC0gQVNINDA1IGJzcCB1cGRhdGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMjoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBBZGQgc3VwcG9ydCBmb3IgTlNDVSBib2FyZAorCisqIEFkZCBzdXBwb3J0IGZvciBUUU04MjNNLCBUUU04NTBNLCBUUU04NTVNIGFuZCBUUU04NjBNIG1vZHVsZXMKKworKiBBZGQgc3VwcG9ydCBmb3IgQW0yOUxWMTYwTUwsIEFtMjlMVjMyME1MLCBhbmQgQW0yOUxWNjQwTUwKKyAgbWlycm9yIGJpdCBmbGFzaCBvbiBUUU04eHhNIG1vZHVsZXMKKworKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMzAgSnVuIDIwMDM6CisgIGdldCByaWQgb2YgTUtfQ01EX0VOVFJZIG1hY3JvOyB1cGRhdGUgZG9jL1JFQURNRS5jb21tYW5kCisKKyogUGF0Y2ggYnkgU2ViIEphbWVzLCAzMCBKdW4gMjAwMzoKKyAgSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIEkyQyBjb25maWd1cmF0aW9uIGluIFJFQURNRQorCisqIEZpeCBwcm9ibGVtcyB3aXRoIHByZXZpb3VzIGxvZyBidWZmZXIgImZpeGVzIgorCisqIEZpeCBtaW5vciBoZWxwIHRleHQgaXNzdWVzCisKKyogImxvZyBhcHBlbmQiIGRpZCBub3QgYXBwZW5kIGEgbmV3bGluZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjE6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogRml4IHNvbWUgbWlzc2luZyBjb21tYW5kcywgY2xlYW51cCBoZWFkZXIgZmlsZXMKKyAgKGF1dG9zY3JpcHQsIGJtcCwgYnNwLCBmYXQsIG1tYywgbmFuZCwgcG9ydGlvLCAuLi4pCisKKyogUmV3cml0ZSBjb21tYW5kIGxvb2t1cCBhbmQgaGVscCBjb21tYW5kIChmaXggcHJvYmxlbXMgd2l0aCBidWJibGUKKyAgc29ydCB3aGVuIHNvcnRpbmcgY29tbWFuZCBuYW1lIGxpc3QpLiBNaW5vciBjbGVhbnVwIGhlcmUgYW5kIHRoZXJlLgorCisqIE1lcmdlIGZyb20gInN0YWJsZSBicmFuY2giLCB0YWcgTEFCRUxfMjAwM18wNl8yOF8xODAwLXN0YWJsZToKKyAgLSBBbGxvdyB0byBjYWxsIHN5c21vbiBmdW5jdGlvbiBpbnRlcmFjdGl2ZWx5CisgIC0gUElDIG9uIExXTU9OIGJvYXJkIG5lZWRzIGRlbGF5IGFmdGVyIHBvd2VyLW9uCisgIC0gQWRkIG1pc3NpbmcgUlNSIGRlZmluaXRpb25zIGZvciBNUEM4eHgKKyAgLSBJbXByb3ZlIGxvZyBidWZmZXIgaGFuZGxpbmc6IGd1YXJhbnRlZSBjbGVhbiByZXNldCBhZnRlciBwb3dlci1vbgorICAtIEFkZCBzdXBwb3J0IGZvciBFWEJJVEdFTiBib2FyZCAoYWthICJnZW5pZSIpCisgIC0gQWRkIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAorCisqIENvZGUgY2xlYW51cDoKKyAgLSByZW1vdmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIHRyYWlsaW5nIGVtcHR5IGxpbmVzLCBDKysgY29tbWVudHMsIGV0Yy4KKyAgLSBzcGxpdCBjbWRfYm9vdC5jIChzZXBhcmF0ZSBjbWRfYmRpbmZvLmMgYW5kIGNtZF9sb2FkLmMpCisKKyogUGF0Y2hlcyBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjUgSnVuIDIwMDM6CisgIC0gbWFqb3IgcmV3b3JrIG9mIGNvbW1hbmQgc3RydWN0dXJlCisgICAgKHdvcmsgZG9uZSBtb3N0bHkgYnkgTWljaGFsIENlbmRyb3dza2kgYW5kIEpvYWtpbSBLcmlzdGlhbnNlbikKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4wOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAyNiBKdW4gMjAwMzoKKyAgLSBjc2IyMjYgY29uZmlndXJhdGlvbiB1cGRhdGVkCisgIC0gY3JlZGl0cyBmb3IgbG9nb2RsIHBvcnQgdXBkYXRlZAorICAtIGlubm9rb20gY29uZmlndXJhdGlvbiB1cGRhdGVkCisgIC0gbG9nb2RsIHRyZWUgdXBkYXRlLCBzdGlsbCB3aXRoIGNvZGluZyBzdHlsZSBpbmNvbnNpc3RlbmNpZXMKKyAgLSBhZGRlZCBPQ00gZm9yIHBwYzQwNSB3YXJuaW5nIHRvIFJFQURNRQorCisqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyNSBKdW4gMjAwMzoKKyAgdXBkYXRlIE5ldFZpYSB3aXRoIFYyIGJvYXJkIHN1cHBvcnQKKworKiBIZWFkZXIgZmlsZSBjbGVhbnVwIGZvciBBUk0KKworKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyNCBKdW4gMjAwMzoKKyAgLSBtYWtlIHN1cmUgdG8gdXNlIG9ubHkgVS1ib290IHByb3ZpZGVkIGhlYWRlciBmaWxlcworICAtIGZpeCBwcm9ibGVtcyB3aXRoICIucm9kYXRhLnN0cjEuNCIgc2VjdGlvbiBhcyB1c2VkIGJ5IEdDQy0zLngKKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEp1biAyMDAzOgorICAtIFVwZGF0ZSBlc2QgQVNINDA1IGJvYXJkIGZpbGVzLgorICAtIFVwZGF0ZSBlc2QgREFTQV9TSU0gY29uZmlnIGZpbGUuCisgIC0gQWRkIHBpbmcgY29tbWFuZCB0byBzb21lIGVzZCBib2FyZHMuCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjMgSnVuIDIwMDM6CisgIFVwZGF0ZSBmb3IgTVBDODI2MEFEUyBib2FyZAorCisqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIzIEp1biAyMDAzOgorICAtIGNsZWFudXAgb2YgR0NDIDMueCBjb21waWxlciB3YXJuaW5ncworCisqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCA0IEp1biAyMDAzOgorICBhZGQgbGFyZ2UgbWVtb3J5IHN1cHBvcnQgZm9yIE1QQzgyNjZBRFMgYm9hcmQKKworKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgorICAtIEVuYWJsZWQgc3RhbmRhcmQgdS1ib290IGRldmljZSBhYnN0cmFjdGlvbiBmb3IgQVJNCisgIC0gRW5hYmxlZCBjb25zb2xlIGRldmljZSBmb3IgQVJNCisgIC0gSW5pdGlsaXplZCBiaV9iYXVkcmF0ZSBmb3IgQVJNCisKKyogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDIzIEFwciAyMDAzOgorICBmaXggYnl0ZSBvcmRlciBmb3IgODI0eCBJMkMgYWRkcmVzc2VzICh3cml0ZSBvcCkKKworKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMCBKdW4gMjAwMzoKKyAgLSBoeW1vZCB1cGRhdGUKKyAgLSBjbGVhbnVwIChlc3BlY2lhbGx5IGZvciBnY2MtMy54IGNvbXBpbGVycykKKworKiBQYXRjaCBieSBUb20gR3VpbGxpYW1zLCAyMCBKdW4gMjAwMzoKKyAgYWRkZWQgQ09ORklHXzc1MEZYIHN1cHBvcnQgZm9yIElCTSA3NTBGWCBwcm9jZXNzb3JzCisKKyogUGF0Y2ggYnkgRGV2aW4gQ3J1bWIsIDAyIEFwciAyMDAzOgorICBGaXggY2xvY2sgZGl2aWRlciByb3VuZGluZyBwcm9ibGVtIGluIGRyaXZlcnMvc2VyaWFsLmMKKworKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgorICAtIEZpeGVkIHNtYzkxYzExMSBkcml2ZXIgdG8gc3luYyB3aXRoIHRoZSB1LWJvb3QgZW52aXJvbm1lbnQKKyAgICAoZHJpdmVyL3NtYzkxYzExMS5jKS4KKyAgLSBBZGRlZCBldGhfaW5pdCBlcnJvciByZXR1cm4gY2hlY2sgaW4gTmV0TG9vcCAobmV0L25ldC5jKS4KKworKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTkgSnVuZSAyMDAzOgorICBBZGRlZCBzdXBwb3J0IGZvciBBMzAwMCBTQkMgYm9hcmQgKEFydGlzIE1pY3Jvc3lzdGVtcyBJbmMuKQorCisqIFBhdGNoZXMgYnkgTXVycmF5IEplbnNlbiwgMTcgSnVuIDIwMDM6CisgIC0gSHltb2QgYm9hcmQgZGF0YWJhc2UgbW9kczogYWRkICJ3aG8iIGZpZWxkIGFuZCBuZXcgeGlsaW54IGNoaXAgdHlwZXMKKyAgLSBwcm92aWRlIG5ldyAiaW5pdF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBzbyBjb2RlIGV4dGVybmFsIHRvCisgICAgImNvbW1vbi9tYWluLmMiIGNhbiB1c2UgdGhlICJyZXNldF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBiZWZvcmUKKyAgICBlbnRlcmluZyB0aGUgbWFpbiBsb29wCisgIC0gYWRkIERUVCBzdXBwb3J0IGZvciBhZG0xMDIxIChuZXcgZmlsZSBkdHQvYWRtMTAyMS5jOyBjb25maWcKKyAgICBzbGlnaHRseSBkaWZmZXJlbnQuIHNlZSBpbmNsdWRlL2NvbmZpZ3MvaHltb2QuaCBmb3IgYW4gZXhhbXBsZQorICAgIChyZXF1aXJlcyBDT05GSUdfRFRUX0FETTEwMjEsIENPTkZJR19EVFRfU0VOU09SUywgYW5kCisgICAgQ0ZHX0RUVF9BRE0xMDIxIGRlZmluZWQpCisgIC0gYWRkIG5ldyAiZWVwcm9tX3Byb2JlKCkiIGZ1bmN0aW9uIHdoaWNoIGhhcyBzaW1pbGFyIGFyZ3MgYW5kCisgICAgYmVoYXZlcyBpbiBhIHNpbWlsYXIgd2F5IHRvICJlZXByb21fcmVhZCgpIiBldGMuCisgIC0gYWRkIDgyNjAgRkNDIGV0aGVybmV0IGxvb3BiYWNrIGNvZGUgKG5ldyAiZXRoX2xvb3BiYWNrX3Rlc3QoKSIKKyAgICBmdW5jdGlvbiB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmluaW5nIENPTkZJR19FVEhFUl9MT09QQkFDS19URVNUKQorICAtIGdkYnRvb2xzIGNvcHlyaWdodCB1cGRhdGUKKyAgLSBlbnN1cmUgdGhhdCBzZXRfbXNyKCkgZXhlY3V0ZXMgdGhlICJzeW5jIiBhbmQgImlzeW5jIiBpbnN0cnVjdGlvbnMKKyAgICBhZnRlciB0aGUgIm10bXNyIiBpbnN0cnVjdGlvbiBpbiBjcHUvbXBjODI2MC9pbnRlcnJ1cHRzLmMKKyAgLSA4MjYwIEkvTyBwb3J0cyBmaXg6IE9wZW4gRHJhaW4gc2hvdWxkIGJlIHNldCBsYXN0IHdoZW4gY29uZmlndXJpbmcKKyAgLSBhZGQgU0lVIElSUSBkZWZpbmVzIGZvciA4MjYwCisgIC0gYWxsb3cgTERTQ1JJUFQgb3ZlcnJpZGUgYW5kIE9CSkNGTEFHUyBpbml0aWFsaXphdGlvbjogY2hhbmdlIHRvCisgICAgY29uZmlnLm1rIHRvIGFsbG93IGJvYXJkIGNvbmZpZ3VyYXRpb25zIHRvIG92ZXJyaWRlIHRoZSBHTlUKKyAgICBsaW5rZXIgc2NyaXB0LCBzZWxlY3RlZCB2aWEgdGhlIExEU0NSSVBULCBtYWtlIHZhcmlhYmxlLCBhbmQgdG8KKyAgICBnaXZlIGFuIGluaXRpYWwgdmFsdWUgdG8gdGhlIE9CSkNGTEFHUyBtYWtlIHZhcmlhYmxlCisgIC0gODI2MCBpMmMgZW5oYW5jZW1lbnQ6CisgICAgbyBjb3JyZWN0bHkgZXh0ZW5kcyB0aGUgdGltZW91dCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgYWxsCisgICAgICBxdWV1ZWQgbWVzc2FnZXMgZm9yIGJvdGggdHJhbnNtaXQgYW5kIHJlY2VpdmUKKyAgICBvIHdpbGwgbm90IGNvbnRpbnVlIHdpdGggcmVjZWl2ZSBpZiB0cmFuc21pdCB0aW1lcyBvdXQKKyAgICBvIGVuc3VyZXMgdGhhdCB0aGUgZXJyb3IgY2FsbGJhY2sgaXMgZG9uZSBmb3IgYWxsIHF1ZXVlZCB0eAorICAgICAgYW5kIHJ4IG1lc3NhZ2VzCisgICAgbyBjb3JyZWN0bHkgZGV0ZWN0cyBib3RoIHR4IGFuZCByeCB0aW1lb3V0cywgb25seSBkZWxpdmVycyBvbmUgdG8KKyAgICAgIHRoZSBjYWxsYmFjaywgYW5kIGRvZXMgbm90IG92ZXJ3cml0ZSBhbiBlYXJsaWVyIGVycm9yCisgICAgbyBsb2dpYyBpbiBpMmNfcHJvYmUgbm93IGNvcnJlY3QKKyAgLSBhZGQgInZwcmludGYoKSIgZnVuY3Rpb24gc28gdGhhdCAicGFuaWMoKSIgZnVuY3Rpb24gY2FuIGJlCisgICAgdGVjaG5pY2FsbHkgY29ycmVjdAorICAtIG1hbnkgSHltb2QgYm9hcmQgY2hhbmdlcworCisqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNCBKdW4gMjAwMzoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTG9nb3Ryb25pYyBETCBkYXRhbG9nZ2VyIGJvYXJkCisgIC0gY2xlYW51cCBzZXJpYWwgbGluZSBhZnRlciBrZXJtaXQgYmluYXJ5IGRvd25sb2FkCisgIC0gYWRkIGRlYnVnWCBtYWNybyAoZGVidWcgbGV2ZWwgc3VwcG9ydCkKKyAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0LgorCisqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxMiBKdW4gMjAwMzoKKyAgLSByZXdyaXRlIG9mIHRoZSBTM0MyNFgwIHJlZ2lzdGVyIGRlZmluaXRpb25zIHN0dWZmCisgIC0gImRyaXZlciIgZm9yIHRoZSBidWlsdC1pbiBTM0MyNFgwIFJUQworCisqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTIgSnVuIDIwMDM6CisgIC0gQWRkIE1JSSBzdXBwb3J0IGFuZCBFdGhlcm5ldCBQSFkgaW5pdGlhbGl6YXRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQKKyAgLSBGaXggaW5jb3JyZWN0IFNJVU1DUiBpbml0aWFsaXNhdGlvbiBjYXVzZWQgYnkgd3JvbmcgSGFyZCBSZXNldAorICAgIGNvbmZpZ3VyYXRpb24gd29yZCBzdXBwbGllZCBieSBGUEdBIG9uIHNvbWUgTVBDODI2MEFEUyBib2FyZHMKKworKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTAgSnVuIDIwMDM6CisgIFVuaWZ5IHN0YXR1cyBMRUQgaW50ZXJmYWNlCisKKyogQWRkIHN1cHBvcnQgZm9yIERTMTI4ODcgUlRDOyBhZGQgUlRDIHN1cHBvcnQgZm9yIEFUQyBib2FyZAorCisqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDExIEp1biAyMDAzOgorICBNb2RpZmljYXRpb25zIGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQKKyAgLSBBZGQgQXRtZWwgRGF0YUZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuCisgIC0gQWRkIHBvc3NpYmlsaXR5IHRvIGJvb3QgYSBMaW51eCBmcm9tIERhdGFGbGFzaCB3aXRoIEJPT1RNIGNvbW1hbmQuCisgIC0gQWRkIEZsYXNoIGRldGVjdGlvbiBvbiBBdG1lbCBBVDkxUk05MjAwREsKKyAgICAoYmV0d2VlbiBBdG1lbCBBVDQ5QlYxNjE0IGFuZCBBVDQ5QlYxNjE0QSBmbGFzaGVzKQorICAtIFJlcGxhY2Ugb2xkIEV0aGVybmV0IFBIWSBsYXllciBmdW5jdGlvbnMKKyAgLSBDaGFuZ2UgbGluayBhZGRyZXNzCisKKyogUGF0Y2ggYnkgRnJhbmsgU21pdGgsIDkgSnVuIDIwMDM6CisgIHVzZSBDUklUX0VYQ0VQVElPTiBmb3IgbWFjaGluZSBjaGVjayBvbiA0eHgKKworKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMyBKdW4gMjAwMzoKKyAgYWRkZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlICJjYXJpbmZvIiBjb21tYW5kIGluIGNtZF9pbW1hcC5jCisKKyogRml4IENPTkZJR19ORVRfTVVMVEkgc3VwcG9ydCBpbiBpbmNsdWRlL25ldC5oCisKKyogUGF0Y2hlcyBieSBLeWxlIEhhcnJpcywgMTMgTWFyIDIwMDM6CisgIC0gQWRkIEZBVCBwYXJ0aXRpb24gc3VwcG9ydAorICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIEZBVAorICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIE1NQworICAtLS0tCisgIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciB2aWRlbworICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgTU1DCisgIC0tLS0KKyAgLSBFbmFibGUgTU1DIGFuZCBGQVQgZm9yIGx1YmJvY2sgYm9hcmQKKyAgLSBPdGhlciBtaXNjIGNoYW5nZXMgZm9yIGx1YmJvY2sgYm9hcmQKKworKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIEFwcmlsIDAyLCAyMDAzOgorICBmaXggZm9yIFNNU0M5MTExMSBkcml2ZXIKKworKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDQgSnVuIDIwMDM6CisgIG1ha2UgcHBjNDA1IGV0aGVybmV0IGRyaXZlciBjb21wYXRpYmxlIHdpdGggQ09ORklHX05FVF9NVUxUSSBvcHRpb24KKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IEp1biAyMDAzOgorICAtIFBQQzR4eDogRml4IGJ1ZyBmb3IgaW5pdGlhbCBzdGFjayBpbiBkYXRhIGNhY2hlIGFzIHBvaW50ZWQgb3V0IGJ5CisgICAgVGhvbWFzIFNjaGFlZmVyICh0c2NoYWVmZXJAZ2lnYS1zdHJlYW0uZGUpLiBOb3cgaW5pdGFsIHN0YWNrIGluCisgICAgZGF0YSBjYWNoZSBjYW4gYmUgdXNlZCBldmVuIGlmIHRoZSBjaGlwIHNlbGVjdCBpcyBpbiB1c2UuCisgIC0gQ0ZHX1JYX0VUSF9CVUZGRVIgYWRkZWQgdG8gc2V0IHRoZSBldGhlcm5ldCByZWNlaXZlIGJ1ZmZlciBjb3VudAorICAgIChzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKS4KKyAgLSBDaGFuZ2VkIGNvbmZpZyBmaWxlcyBvZiBDT05GSUdfRUVQUk8xMDAgYm9hcmRzIHRvIHVzZSB0aGUKKyAgICBDRkdfUlhfRVRIX0JVRkZFUiBkZWZpbmUuCisKKyogQWRkIHN1cHBvcnQgZm9yIFJNVSBib2FyZAorCisqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIGF0IDEwMC81MCBNSHoKKworKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgSnVuIDIwMDM6CisgIG1ham9yIHJlY29uc3RydWN0aW9uIG9mIG5ldHdvcmtpbmcgY29kZTsKKyAgYWRkICJwaW5nIiBzdXBwb3J0IChvdXRnb2luZyBvbmx5ISkKKworKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgSnVuZSAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNVQgYm9hcmQKKworKiBQYXRjaGVzIGJ5IFVkaSBGaW5rZWxzdGVpbiwgMiBKdW5lIDIwMDM6CisgIC0gQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIGtleWJvYXJkcywgaW5pdGlhbGl6ZWQgYnkgZGVmaW5pbmcgYQorICAgIGJvYXJkLXNwZWNpZmljIGRydl9rZXlib2FyZF9pbml0IGFzIHdlbGwgYXMgZGVmaW5pbmcgQ09ORklHX0tFWUJPQVJEIC4KKyAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUkJDODIzIGJvYXJkLgorICAtIGNwdS9tcGM4eHgvbGNkLmMgbm93IGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlcyB0aGUKKyAgICBIb3Jpem9udGFsIFBpeGVsIENvdW50IGZpZWxkLgorCisqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiBCT09UUCAoZGhjcF9sZWFzZXRpbWUgb3B0aW9uKQorICBbcG9pbnRlZCBvdXQgYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMiBKdW4gMjAwM10KKworKiBQYXRjaCBieSBNYXJrIFJha2VzLCAxNCBNYXkgMjAwMzoKKyAgYWRkIHN1cHBvcnQgZm9yIEludGVsIGUxMDAwIGdpZyBjYXJkcy4KKworKiBQYXRjaCBieSBOeWUgTGl1LCAzIEp1biAyMDAzOgorICBmaXggY3JpdGljYWwgdHlwbyBpbiBNQU1SIGRlZmluaXRpb24gKGluY2x1ZGUvbXBjOHh4LmgpCisKKyogRml4IHJlcXVpcmVtZW50IHRvIGFsaWduIFUtQm9vdCBpbWFnZSBvbiAxNiBrQiBib3VuZGFyaWVzIG9uIFBQQy4KKworKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAyIEp1biAyMDAzCisgIE1pbm9yIGNoYW5nZXMgZm9yIEtVUDRLIGNvbmZpZ3VyYXRpb24KKworKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjkgTWF5IDIwMDM6CisgIEZpeGVkIHJhcnAgYm9vdCBtZXRob2QgZm9yIElBMzIgYW5kIG90aGVyIGxpdHRsZS1lbmRpYW4gQ1BVcy4KKworKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjggTWF5IDIwMDM6CisgIEFkZGVkIHBvcnQgSS9PIGNvbW1hbmRzLgorCisqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMjggTWF5IDIwMDMKKyAgLSBjcHUvbXBjODI0eC9zdGFydC5TOiBmaXggcmVsb2NhdGlvbiBjb2RlIHdoZW4gYm9vdGluZyBmcm9tIFJBTQorICAtIG1pbm9yIHBhdGNoZXMgZm9yIHV0eDgyNDUKKworKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDI4IE1heSAyMDAzOgorICB4ODYgdXBkYXRlCisKKyogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgOSBNYXkgMjAwMyArIDI3IE1heSAyMDAzOgorICBhZGQgbmFuZCBmbGFzaCBzdXBwb3J0IHRvIFNYTkk4NTVUIGNvbmZpZ3VyYXRpb24KKyAgZml4L2V4dGVuZCBuYW5kIGZsYXNoIHN1cHBvcnQ6CisgIC0gZml4ICduYW5kIGVyYXNlJyBjb21tYW5kIHNvIGRvZXMgbm90IGVyYXNlIGJhZCBibG9ja3MKKyAgLSBmaXggJ25hbmQgd3JpdGUnIGNvbW1hbmQgc28gZG9lcyBub3Qgd3JpdGUgdG8gYmFkIGJsb2NrcworICAtIGZpeCBuYW5kX3Byb2JlKCkgc28gaGFuZGxlcyBubyBmbGFzaCBkZXRlY3RlZCBwcm9wZXJseQorICAtIGFkZCBkb2MvUkVBRE1FLm5hbmQKKyAgLSBhZGQgLmpmZnMyIGFuZCAub29iIG9wdGlvbnMgdG8gbmFuZCByZWFkL3dyaXRlCisgIC0gYWRkICduYW5kIGJhZCcgY29tbWFuZCB0byBsaXN0IGJhZCBibG9ja3MKKyAgLSBhZGQgJ2NsZWFuJyBvcHRpb24gdG8gJ25hbmQgZXJhc2UnIHRvIHdyaXRlIEpGRlMyIGNsZWFuIG1hcmtlcnMKKyAgLSBtYWtlIE5BTkQgcmVhZC93cml0ZSBmYXN0ZXIKKworKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjMgTWF5IDIwMDM6CisgIFVwZGF0ZSBmb3IgTVBDODI2NkFEUyBib2FyZAorCisqIEdldCAobW9zdGx5KSByaWQgb2YgQ0ZHX01PTklUT1JfTEVOIGRlZmluaXRpb247IGNvbXB1dGUgcmVhbCBsZW5ndGgKKyAgaW5zdGVhZCBDRkdfTU9OSVRPUl9MRU4gaXMgbm93IG9ubHkgdXNlZCB0byBkZXRlcm1pbmUJIF9hdF9jb21waWxlXworICBfdGltZV8gICghKSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBVLUJvb3QgaW1hZ2UsCisgIG9yIGluIGEgc2VwYXJhdGUgZmxhc2ggc2VjdG9yLgorCisqIENsZWFudXAgQ0ZHX0RFUiAjZGVmaW5lcyBpbiBjb25maWcgZmlsZXMgKHdkIG1haW50YWluZWQgb25seSkKKworKiBGaXggZGF0YSBhYm9ydCBleGNlcHRpb24gaGFuZGxpbmcgZm9yIGFybTkyMHQgQ1BVCisKKyogRml4IGFsaWdubWVudCBwcm9ibGVtcyB3aXRoIGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZAorCisqIFBhdGNoIGJ5IERvbmFsZCBXaGl0ZSwgMjEgTWF5IDIwMDM6CisgIGZpeCBjYWxjdWxhdGlvbiBvZiBiYXNlIGFkZHJlc3MgaW4gcGNpX2hvc2VfY29uZmlnX2RldmljZSgpCisKKyogRml4IGJ1ZyBpbiBjb21tYW5kIGxpbmUgcGFyc2luZzogImNtZDE7Y21kMiIgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCisgIGV4ZWN1dGUgImNtZDIiLCBldmVuIGlmICJjbWQxIiBmYWlscy4gTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CisgIHRvICJydW4gdmFyMSB2YXIyIiB3aGVyZSB0aGUgY29udGVudHMgb2YgInZhcjIiIHdpbGwgTk9UIGJlCisgIGV4ZWN1dGVkIHdoZW4gYSBjb21tYW5kIGluICJ2YXIxIiBmYWlscy4KKworKiBBZGQgemVyby1jb3B5IHJhbWRpc2sgc3VwcG9ydCAocmVxdWlyZXMgY29ycmVzcG9uZGluZyBrZXJuZWwgc3VwcG9ydCEpCisKKyogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDIwIE1heSAyMDAzOgorICBJbiBwcmVwYXJhdGlvbiBmb3IgYW4gaXhwIHBvcnQsIHJlbmFtZSBjcHUveHNjYWxlIGFuZCBhcmNoLXhzY2FsZQorICBpbnRvIGNwdS9weGEgYW5kIGFyY2gtcHhhLgorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjMgTWF5IDIwMDM6CisgIC0gSUJNIFBQQzQwNUVQIHBvcnQgYWRkZWQuCisgIC0gQ09ORklHX1VBUlQxX0NPTlNPTEUgYWRkZWQuIElmIGRlZmluZWQgaW50ZXJuYWwgVUFSVDEgKGFuZCBub3QKKyAgICBVQVJUMCkgaXMgdXNlZCBhcyBkZWZhdWx0IFUtQm9vdCBjb25zb2xlLiBQUEM0eHggb25seSEKKyAgLSBlc2QgQVNINDA1IGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCkuCisgIC0gQlVCSU5HQTQwNUVQIGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCAtIElCTSBFdmFsIEJvYXJkKS4KKyAgLSBlc2QgQ1BDSTQwNUFCIGJvYXJkIGFkZGVkLgorICAtIGVzZCBQTUM0MDUgYm9hcmQgYWRkZWQuCisgIC0gVXBkYXRlIG9mIHNvbWUgZXNkIGJvYXJkcy4KKworKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTkgTWFpIDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1LTMgYm9hcmQKKworKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAyMiBNYXkgMjAwMzoKKyAgRml4IHByb2JsZW0gd2l0aCBvbmx5IHBhcnRpYWxseSBjbGVhcmVkIC5ic3Mgc2VnbWVudAorCisqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMiBNYXkgMjAwMzoKKyAgZ2V0IFBDSSB0byB3b3JrIG9uIGEgTVBDODI2NkFEUyBib2FyZDsgaW5jb3Jwb3JhdGUgY2hhbmdlIHRvCisgIGNwdS9tcGM4MjYwL3BjaS5jIHRvIGVuYWJsZSBvdmVycmlkZXMgb2YgUENJIG1lbW9yeSBwYXJhbWV0ZXJzCisKKyogUGF0Y2ggYnkgTnllIExpdSwgMSBNYXkgMjAwMzoKKyAgbWlub3IgcGF0Y2hlcyBmb3IgdGhlIEZBRFM4eHgKKworKiBQYXRjaCBieSBUaG9tYXMgU2No5GZlciwgMjggQXByIDIwMDM6CisgIEZpeCBTUEQgaGFuZGxpbmcgZm9yIDI1NiBFQ0MgRElNTSBvbiBXYWxudXQKKworKiBBZGQgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IGJpdG1hcHMgZm9yIFRSQUIncwlWRkQgY29tbWFuZDsKKyAgYWxsb3cgdG8gcGFzcyBib290IGJpdG1hcCBhZGRyZXNzZXMgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzOworICBhbGxvdyBmb3IgemVybyBib290IGRlbGF5CisKKyogUGF0Y2ggYnkgQ2hyaXN0aWFuIEdlad9pbmdlciwgMTkgTWF5IDIwMDI6CisgIE9uIFRSQUI6IHdhaXQgdW50aWwgdGhlIGR1bW15IGJ5dGUgaGFzIGJlZW4gY29tcGxldGVseSBzZW50CisKKyogUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAyMiBBcHIgMjAwMzoKKyAgdXBkYXRlIGZvciBDcmF5TDEgYm9hcmQKKworKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjEgQXByIDIwMDM6CisgIGFkZCBib290IHN1cHBvcnQgZm9yIEFSVE9TIChhIHByb3ByaWV0YXJ5IE9TKQorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDExIEFwciAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMzOAorCisqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjQgSmFuIDIwMDM6CisgIEZpeCBjb3VudGluZyBvZiBleHRlbmRlZCBwYXJ0aXRpb25zIGluIGRpc2tib290IGNvbW1hbmQKKworKiBQYXRjaCBieSBDaHJpc3RvcGhlIExpbmRoZWltZXIsIDIwIE1heSAyMDAzOgorICBhbGxvdyB0aGUgdXNlIG9mIENGR19MT0FEUyB3aGVuIENGR19OT19GTEFTSCBpcyBzZXQKKworKiBGaXggU0RSQU0gdGltaW5nIG9uIFB1cnBsZSBib2FyZAorCisqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggb24gQVRDIGJvYXJkCisgIChpbmNsdWRlcyBzdXBwb3J0IGZvciBJbnRlbCA4MjM2NSBhbmQgY29tcGF0aWJsZSBQQyBDYXJkIGNvbnRyb2xsZXJzLAorICBhbmQgWWVudGEtY29tcGF0aWJsZSBQQ0ktdG8tQ2FyZEJ1cyBjb250cm9sbGVycykKKworKiBQYXRjaCBieSBNYXRoaWpzIEhhYXJtYW4sIDA4IE1heSAyMDAzOgorICBBZGQgbGFuOTFjOTYgZHJpdmVyICh0ZXN0ZWQgb24gTHViYm9jayBhbmQgY3VzdG9tIFBYQTI1MCBib2FyZCBvbmx5KQorCisqIEZpeCBwcm9ibGVtIHdpdGggdXNhZ2Ugb2YgInRydWUiICh1bmRlZmluZWQgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBiZmQuaCkKKworKiBBZGQgc3VwcG9ydCBmb3IgUHJvbWVzcyBBVEMgYm9hcmQKKworKiBQYXRjaCBieSBLZWl0aCBPdXR3YXRlciwgMjggQXByIDIwMDM6CisgIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyBhbmQgYWRkaXRpb25zIHRvIEdFTjg2MFQgYm9hcmQgc3BlY2lmaWMgY29kZS4KKyAgLSBBZGRlZCBHRU44NjBfU0MgdmFyaWFudCB0byBHRU44NjBULgorICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgdG8gR0VOODYwVCBkb2N1bWVudGF0aW9uLgorICAtIENvcnJlY3QgZHVwbGljYXRlIGVudHJ5IGluIFUtQm9vdCBDUkVESVRTIGZpbGUuCisgIC0gQWRkIEdFTjg2MFRfU0MgZW50cnkgaW4gTUFJTlRBSU5FUlMgZmlsZS4KKyAgLSBVcGRhdGUgQ1JFRElUUyBmaWxlIHdpdGggR0VOODYwVF9TQyBpbmZvLgorCisqIFVwZGF0ZSBTbWl0aHMgQWVyb3NwYWNlIGFkZHJlc3NlcyBpbiBNQUlOVEFJTkVSUyBmaWxlCisKKyogRml4IGVycm9yIGhhbmRsaW5nIGluIGh1c2gncyB2ZXJzaW9uIG9mICJydW4iIGNvbW1hbmQKKworKiBMV01PTiBleHRlbnNpb25zOgorICAtIFNwbGFzaHNjcmVlbiBzdXBwb3J0CisgIC0gbW9kZW0gc3VwcG9ydAorICAtIHN5c21vbiBzdXBwb3J0CisgIC0gdGVtcGVyYXR1cmUgZGVwZW5kZW5kIGVuYWJsaW5nIG9mIExDRAorCisqIEFsbG93IGJvb3RpbmcgZnJvbSBvbGQgIlBQQ0Jvb3QiIGRpc2sgcGFydGl0aW9ucworCisqIEFkZCBzdXBwb3J0IGZvciBUUU04MjU1IEJvYXJkIC8gTVBDODI1NSBDUFUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4xOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIE1ha2Ugc3VyZSBCbG9jayBMb2NrIEJpdHMgZ2V0IGNsZWFyZWQgaW4gUjM2ME1QSSBmbGFzaCBkcml2ZXIKKworKiBNUEM4MjMgTENEIGRyaXZlcjogRmlsbCBjb2xvciBtYXAgYmFja3dhcmRzLCB0byBhbGxvdyBmb3Igc3RlYWR5CisgIGRpc3BsYXkgd2hlbiBMaW51eCB0YWtlcyBvdmVyCisKKyogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIFJURU1TICh0aGlzIHRpbWUgZm9yIHJlYWwpLgorCisqIEFkZCBzdXBwb3J0IGZvciAiYm1wIGluZm8iIGFuZCAiYm1wIGRpc3BsYXkiIGNvbW1hbmRzIHRvIGxvYWQKKyAgYml0bWFwIGltYWdlczsgdGhpcyBjYW4gYmUgdXNlZCAoZm9yIGV4YW1wbGUgaW4gYSAicHJlYm9vdCIKKyAgY29tbWFuZCkgdG8gZGlzcGxheSBhIHNwbGFzaCBzY3JlZW4gdmVyeSBxdWlja2x5IGFmdGVyIHBvd2Vyb24uCisKKyogQWRkIHN1cHBvcnQgZm9yIDEzMyBNSHogY2xvY2sgb24gSU5DQS1JUCBib2FyZAorCisqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxMCBBcHIgMjAwMzoKKyAgVXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCisKKyogQWRkIG5ldyBtZWFuaW5nIHRvICJhdXRvc3RhcnQiIGVudmlyb25tZW50IHZhcmlhYmxlOgorICBJZiBzZXQgdG8gIm5vIiwgYSBzdGFuZGFsb25lIGltYWdlIHBhc3NlZCB0byB0aGUKKyAgImJvb3RtIiBjb21tYW5kIHdpbGwgYmUgY29waWVkIHRvIHRoZSBsb2FkIGFkZHJlc3MKKyAgKGFuZCBldmVudHVhbGx5IHVuY29tcHJlc3NlZCksIGJ1dCBOT1QgYmUgc3RhcnRlZC4KKyAgVGhpcyBjYW4gYmUgdXNlZCB0byBsb2FkIGFuZCB1bmNvbXByZXNzIGFyYml0cmFyeQorICBkYXRhLgorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgQXByIDIwMDM6CisgIENoYW5nZWQgREhDUCBjbGllbnQgdG8gdXNlIElQIGFkZHJlc3MgZnJvbSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NAorICBmcm9tIHRoZSBPRkZFUiBwYWNrZXQgaW4gdGhlIHNlcnZlciBvcHRpb24gZmllbGQgIzU0IGluIHRoZSBSRVFVRVNUCisgIHBhY2tldC4gVGhpcyBmaXhlcyBhIHByb2JsZW0gdXNpbmcgYSBXaW5kb3dzIDIwMDAgREhDUCBzZXJ2ZXIsCisgIHdoZXJlIHRoZSBESENQLXNlcnZlciBpcyBub3QgdGhlIFRGVFAtc2VydmVyLgorCisqIFNldCBtYXggYnJpZ2h0bmVzcyBmb3IgTU4xMTIzNiBkaXNwbGF5cyBvbiBUUkFCIGJvYXJkCisKKyogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgbW9kdWxlcworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjA6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDQgQXByIDIwMDM6CisgIEFkZCBJRE1BIGV4YW1wbGUgY29kZSAodGVzdGVkIG9uIDgyNjAgb25seSkKKworKiBBZGQgc3VwcG9ydCBmb3IgUHVycGxlIEJvYXJkIChNSVBTNjQgNUtjKQorCisqIEFkZCBzdXBwb3J0IGZvciBNSVBTNjQgNUtjIENQVXMKKworKiBGaXggbWlzc2luZyBzZXR0aW5nIG9mICJsb2FkYWRkciIgYW5kICJib290ZmlsZSIgb24gQVJNIGFuZCBNSVBTCisKKyogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEFwciAyMDAzOgorICAtIHVwZGF0ZSBNSVA0MDUtNCBib2FyZAorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBBcHIgMjAwMzoKKyAgLSBVLUJvb3QgdmVyc2lvbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBhZGRlZAorICAgIChDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSkuCisgIC0gQ2hhbmdlZCBQUEM0MDVHUHIgdmVyc2lvbiBmcm9tIEEgdG8gQi4KKyAgLSBDaGFuZ2VkIENQQ0k0MDUgdG8gdXNlIENUUyBpbnN0ZWFkIG9mIERTUiBvbiBQUEM0MDUgVUFSVDEuCisKKyogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgMDMgQXByaWwgMjAwMzoKKyAgLSBmaXggUENJIElSUXMgb24gTVBMIGJvYXJkcworICAtIGZpeCB0d28gbW9yZSB1bi1yZWxvY2F0ZWQgcG9pbnRlciBwcm9ibGVtcworCisqIEZpeCBiZWhhdmlvdXIgb2YgInJ1biIgY29tbWFuZDoKKyAgLSBwcmludCBlcnJvciBtZXNzYWdlIGl2IHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0CisgIC0gdGVybWluYXRlIHByb2Nlc3Npbmcgb2YgYXJndW1lbnRzIGluIGNhc2Ugb2YgZXJyb3IKKworKiBQYXRjaGVzIGJ5IFBldGVyIEZpZ3VsaSwgMTAgTWFyIDIwMDMKKyAgLSBBZGQgc3VwcG9ydCBmb3IgQlRVQVJUIG9uIFBYQSBwbGF0Zm9ybQorICAtIEFkZCBzdXBwb3J0IGZvciBXRVAgRVAyNTAgKFBYQSkgYm9hcmQKKworKiBGaXggZmxhc2ggcHJvYmxlbXMgb24gSU5DQS1JUDsgYWRkIHRvb2wgdG8gYWxsb3cgYnJ1bmluZyBpbWFnZXMgIHRvCisgIGZsYXNoIHVzaW5nIGEgQkRJMjAwMAorCisqIEltcGxlbWVudCBmaXggZm9yIEkyQyBFZGdlIENvbmRpdGlvbnMgcHJvYmxlbSBmb3IgYWxsIGJvYXJkcyB0aGF0CisgIHVzZSB0aGUgYml0LWJhbmdpbmcgZHJpdmVyIChjb21tb24vc29mdF9pMmMuYykKKworKiBQYXRjaCBieSBNYXJ0aW4gV2luaXN0b2VyZmVyLCAyMyBNYXIgMjAwMworICAtIEFkZCBwb3J0IHRvIE1QQzU1NS81NTYgbWljcm9jb250cm9sbGVycworICAtIEFkZCBzdXBwb3J0IGZvciBjbWkgY3VzdG9tZXIgYm9hcmQgd2l0aAorICAgIEludGVsIDI4RjEyOEozQSwgMjhGMzIwSjNBIG9yIDI4RjY0MEozQSBmbGFzaC4KKworKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDI4IE1hciAyMDAzOgorICAtIGZpeCBjb21tb24vY21kX25hbmQuYworCisqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCAyNCBNYXIgMjAwMzoKKyAgLSBhZGQgdGhyZWFkcyAvIHNjaGVkdWxlciBleGFtcGxlIGNvZGUKKworKiBBZGQgcGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDMxIE1hciAyMDAzOgorICAtIGFkZCBjdHJsLWMgc3VwcG9ydCBmb3Iga2VybWl0IGRvd25sb2FkCisgIC0gYWxpZ24gYmRpbmZvIG91dHB1dCBvbiBBUk0KKyAgLSBjc2IyMjYgYm9hcmQ6IGJyaW5nIGluIHN5bmMgd2l0aCBpbm5va29tL21lbXNldHVwLlMKKyAgLSBjc2IyMjYgYm9hcmQ6IGZpeCBNRFJFRlIgaGFuZGxpbmcKKyAgLSBtaXNjIGRvYyBmaXhlcyAvIGV4dGVuc2lvbnMKKyAgLSBpbm5va29tIGJvYXJkOiBjbGVhbnVwLCBNRFJFRlIgZml4IGluIG1lbXNldHVwLlMsIGNvbmZpZyB1cGRhdGUKKyAgLSBhZGQgQk9PVF9QUk9HUkVTUyB0byBhcm1saW51eC5jCisKKyogQWRkIENQVSBJRCwgdmVyc2lvbiwgYW5kIGNsb2NrIHNwZWVkIGZvciBJTkNBLUlQCisKKyogUGF0Y2hlcyBieSBEYXZlIEVsbGlzLCAxOCBNYXIgMjAwMyBmb3IgU1hOSTg1NVQgYm9hcmQ6CisgIC0gZml4IFNSQU0gYW5kIFNEUkFNIG1lbW9yeSBzaXppbmcKKyAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0CisgIC0gYWRkIE1BQyBhZGRyZXNzIGZvciBzZWNvbmQgKFNDQzEpIGV0aGVybmV0IHBvcnQKKworKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgVFFNODI2MCBib2FyZAorCisqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTYgTWFyIDIwMDM6CisgIC0gQWRkIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIGVyYXNpbmcgTkFORAorICAgIGZsYXNoIChjZXJ0YWluIGZvcm1zIG9mIHdoaWNoIGFyZSBjYWxsZWQgU21hcnRNZWRpYSkuCisgIC0gQWRkIHN1cHBvcnQgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdC4KKworKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTkgTWFyIDIwMDM6CisgIC0gdXNlIGFybS1saW51eC1nY2MgYXMgZGVmYXVsdCBjb21waWxlciBmb3IgQVJNCisgIC0gZml4IGkyYyBmaXh1cCBjb2RlCisgIC0gZml4IG1pc3NpbmcgYmF1ZHJhdGUgc2V0dGluZworICAtIGFkZGVkICRsb2FkYWRkciAvIENGR19MT0FEX0FERFIgc3VwcG9ydCB0byBsb2FkYgorICAtIG1vdmVkICJpZ25vcmluZyB0cmFpbGluZyBjaGFyYWN0ZXJzIiBfYmVmb3JlXyB1LWJvb3Qgd2FudHMgdG8KKyAgICBwcmludCBvdXQgZGlhZ25vc3RpY3MgbWVzc2FnZXM7IHJlbW92ZXMgYm9ndXMgY2hhcmFjdGVycyBhdCB0aGUKKyAgICBlbmQgb2YgdHJhbnNtaXNzaW9uCisKKyogUGF0Y2ggYnkgSm9obiBaaGFuLCAxOCBNYXIgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIFNpbm9WZWUgTWljcm9zeXN0ZW1zIFNDOHh4IGJvYXJkcworCisqIFBhdGNoIGJ5IFJvbGYgT2ZmZXJtYW5ucywgMjEgTWFyIDIwMDM6CisgIHBvcnRlZCB0aGUgZG5wMTExMCByZWxhdGVkIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCBhcm1ib290IGN2cyB0bworICBjdXJyZW50IHUtYm9vdCBjdnMuIHNtYzkxMTExIGRvZXMgbm90IHdvcmsuIHByb2JsZW0gbWFya2VkIGluCisgIHNtYzkxMTExLmMsIGdyZXAgZm9yICJGSVhNRSIuCisKKyogUGF0Y2ggYnkgQnJpYW4gQXVsZCwgMjUgTWFyIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBTVE0gZmxhc2ggY2hpcHMgb24gZWJvbnkgYm9hcmQKKworKiBBZGQgUENJIHN1cHBvcnQgZm9yIE1QQzgyNTAgQm9hcmRzIChQTTgyNSBtb2R1bGUpCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNSBNYXIgMjAwMzoKKyAgLSBQQ0k0MDUgdXBkYXRlLgorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgTWFyIDIwMDM6CisgIC0gQ1BDSTQwNTIgdXBkYXRlIChzdXBwb3J0IGZvciByZXZpc2lvbiAzKS4KKyAgLSBTZXQgZWRnZSBjb25kaXRpb25pbmcgY2lyY3VpdHJ5IG9uIFBQQzQwNUdQciBmb3IgY29tcGF0aWJpbGl0eQorICAgIHRvIGV4aXN0aW5nIFBQQzQwNUdQIGRlc2lnbnMuCisgIC0gQ2xpcCB1ZGl2IHRvIDUgYml0cyBvbiBQUEM0MDUgKHNlcmlhbC5jKS4KKworKiBFeHRlbmQgSU5DQUlQIGJvYXJkIHN1cHBvcnQ6CisgIC0gYWRkIGF1dG9tYXRpYyBSQU0gc2l6ZSBkZXRlY3Rpb24KKyAgLSBhZGQgImJkaW5mbyIgY29tbWFuZAorICAtIHBhc3MgZmxhc2ggYWRkcmVzcyBhbmQgc2l6ZSB0byBMaW51eCBrZXJuZWwKKyAgLSBzd2l0Y2ggdG8gMTUwIE1IeiBjbG9jaworCisqIEF2b2lkIGZsaWNrZXIgb24gdGhlIFRSQUIncyBWRkQgYnkgc3luY2hyb25pemluZyB0aGUgZW5hYmxlIHdpdGgKKyAgdGhlIEhTWU5DL1ZTWU5DLiBSZXF1aXJlcyBuZXcgQ1BMRCBjb2RlIChWZXJzaW9uIDEwMSBmb3IgUmV2LiAxMDAKKyAgYm9hcmRzLCB2ZXJzaW9uIDE1MyBmb3IgUmV2LiAyMDAgYm9hcmRzKS4KKworKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMTIgTWFyIDIwMDM6CisgIEZpeCByZWxvY2F0aW9uIHByb2JsZW0gb2Ygc3RhdGljYWxseSBpbml0aWFsaXplZCBzdHJpbmcgcG9pbnRlcnMKKyAgaW4gY29tbW9uL2NtZF9wY2kuYworCisqIFBhdGNoIGJ5IEthaS1Vd2UgQmz2bSwgMTIgTWFyIDIwMDM6CisgIENsZWFudXAgJiBidWcgZml4ZXMgZm9yIEpGRlMyIGNvZGU6CisgIC0gdGhlIG1lbW9yeSBtYW5nZW1lbnQgd2FzIGJyb2tlbi4gSXQgY2F1c2VkIGhhdm9jIG9uIG1hbGxvYyBieQorICAgIHdyaXRpbmcgYmV5b25kIHRoZSBibG9jayBib3VuZGFyaWVzLgorICAtIHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIGZpbGVzIHdhcyB3cm9uZywgc29tZXRpbWVzIHJlc3VsdGluZworICAgIGluIHNob3J0IGZpbGUgcmVhZHMuCisgIC0gZGF0YSBjb3B5aW5nIG5vdyBvcHRpb25hbGx5IHRha2VzIGZyYWdtZW50IHZlcnNpb24gbnVtYmVycyBpbnRvCisgICAgYWNjb3VudCwgdG8gYXZvaWQgY29weWluZyBmcm9tIG9sZGVyIGRhdGEuCisgIFNlZSBkb2MvUkVBRE1FLkpGRlMyIGZvciBkZXRhaWxzLgorCisqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTIgTWFyIDIwMDM6CisgIC0gMTYvMzIgTUIgYW5kIDUwLzgwIE1IeiBzdXBwb3J0IHdpdGggYXV0by1kZXRlY3Rpb24gZm9yIElQODYwCisgIC0gRVRIMDUgYW5kIEJFREJVRyBzdXBwb3J0IGZvciBDVTgyNAorICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQQzQ1CisgIC0gbmV3IEJPT1RST00vRkxBU0gwIGFuZCBET0MgYmFzZSBmb3IgUE04MjYKKworKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEyIE1hciAyMDAzOgorICBGaXggdGhlIGNocGFydCBjb21tYW5kIG9uIGlubm9rb20gYm9hcmQKKworKiBOYW1lIGNsZWFudXA6CisgIG12IGluY2x1ZGUvYXNtLWkzODYvcHBjYm9vdC1pMzg2LmggaW5jbHVkZS9hc20taTM4Ni91LWJvb3QtaTM4Ni5oCisgIHMvUFBDQm9vdC9VLUJvb3QvIGluIHNvbWUgZmlsZXMKKyAgcy9wSW1hZ2UvdUltYWdlLyAgaW4gc29tZSBmaWxlcworCisqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE1IEphbiAyMDAzOgorICBGaXggJycgY29tbWFuZCBsaW5lIHF1b3RpbmcKKworKiBQYXRjaCBieSBUaGUgTEVPWCB0ZWFtLCAxOSBKYW4gMjAwMzoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVMUFQ4NjAgYm9hcmQKKyAgLSBhZGQgc3VwcG9ydCBmb3IgRGFsbGFzIGRzMTY0eCBSVEMKKworKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMzEgSmFuIDIwMDM6CisgIC0gbWluaW1hbCBzZXR1cCBmb3IgQ2FyZEJ1cyBicmlkZ2VzCisgIC0gYWRkIEVFUFJPTSByZWFkL3dyaXRlIHN1cHBvcnQgaW4gdGhlIENTODkwMCBkcml2ZXIKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0aW4gSTJDIGNvbnRyb2xsZXIgaW4gdGhlIFNhbXN1bmcgczNjMjR4MCBjaGlwcworICAtIGFkZCBzdXBwb3J0IGZvciBNUEwncyBWQ01BOSAoU2Ftc3VuZyBzM2MyNDEwIGJhc2VkKSBib2FyZAorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEZlYiAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMwNworCisqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCA1IEZlYiAyMDAzOgorICBmaXggUExQUkNSL1NDQ1IgaW5pdCBzZXF1ZW5jZSBvbiA4eHggdG8gYWxsb3cgZm9yCisgIGNoYW5nZXMgb2YgRUJERiBieSBzb2Z0d2FyZQorCisqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNyBGZWIgMjAwMzoKKyAgIkFQSS1jb21wYXRpYmlsaXR5IHBhdGNoIiBmb3IgNHh4IEkyQyBkcml2ZXIKKworKiBUUkFCIGZpeGVzIC8gZXh0ZW5zaW9uczoKKyAgLSBSZXN0b3JlIFZGRCBicmlnaHRuZXNzIGFzIHNhdmVkIGluIGVudmlyb25tZW50CisgIC0gYWRkIHN1cHBvcnQgZm9yIEZ1aml0c3UgZmxhc2hlcworICAtIG1ha2Ugc3VyZSBib3RoIGJ1enplcnMgYXJlIHR1cm5lZCBvZmYgKGRyaXZlIGxvdyBsZXZlbCkKKworKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDYgTWFyIDIwMDM6CisgIC0gZml4IGJ1ZyBpbiBCT09UUCBjb2RlIChtdXN0IHVzZSBOZXRDb3B5SVApCisgIC0gdXBkYXRlIG9mIENTQjIyNiBwb3J0CisgIC0gY2xlYXIgQlNTIHNlZ21lbnQgb24gWFNjYWxlCisgIC0gYWRkZWQgc3VwcG9ydCBmb3IgaTJjX2luaXRfYm9hcmQoKSBmdW5jdGlvbgorICAtIHVwZGF0ZSB0byB0aGUgSW5ub2tvbSBwbGF0dGZvcm0KKworKiBFeHRlbmQgc3VwcG9ydCBmb3IgcmVkdW5kYW5kIGVudmlyb25tZW50cyBmb3IgY29uZmlndXJhdGlvbnMgd2hlcmUKKyAgZW52aXJvbm1lbnQgc2l6ZSA8IHNlY3RvciBzaXplCisKKyogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEzIEZlYiAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTVBDODI2NkFEUyBib2FyZAorCisqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxOSBGZWIgMjAwMzoKKyAgcGF0Y2hlcyBmb3IgdGhlIEludGVsIGx1YmJvY2sgYm9hcmQ6CisgIG1lbXNldHVwLlMgLSBnZW5lcmFsIGNsZWFudXAgKGJhc2VkIG9uIFJvYmVydCdzIGNzYjIyNiBjb2RlKQorICBmbGFzaC5jIC0gb3ZlcmhhdWwsIGFjdHVhbGx5IHdvcmtzIG5vdworICBsdWJib2NrLmMgLSBmaXggaW5pdCBmdW5jcyB0byByZXR1cm4gcHJvcGVyIHZhbHVlCisKKyogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDI2IEZlYiAyMDAzOgorICAtIEZpeGVkIG9mZiBieSBvbmUgaW4gUkZUQSBjYWxjdWxhdGlvbi4KKyAgLSBObyBuZWVkIHRvIGFib3J0IHdoZW4gTERGIGlzIGxvd2VyIHRoYW4gd2UgY2FuIHByb2dyYW0gaXQncyBvbmx5CisgICAgbWluaW11bSB0aW1pbmcgc28gY2xhbXAgaXQgdG8gd2hhdCB3ZSBjYW4gZG8uCisgIC0gVGFrZXMgZnVuY3Rpb24gcG9pbnRlciB0byBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgc3BkX252cmFtLiBVc2VmdWxsCisgICAgZm9yIGZha2luZyBkYXRhIG9yIGhhcmRjb2RlIGEgbW9kdWxlIHdpdGhvdXQgdGhlIG52cmFtLgorICAtIGZpeCBvdGhlciB1c2VyIGZvciBhYm92ZSBjaGFuZ2UKKyAgLSBmaXggc29tZSBjb21tZW50cy4KKworKiBQYXRjaGVzIGJ5IEJyaWFuIFdhaXRlLCAyNiBGZWIgMjAwMzoKKyAgLSBmaXggcG9ydCBmb3IgZXZiNjQyNjAgYm9hcmQKKyAgLSBmaXggUENJIGZvciBldmI2NDI2MCBib2FyZAorICAtIGZpeCBQQ0kgc2NhbgorCisqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxIE1hciAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgRU1LIFRPUDg2MCBNb2R1bGUKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwMiBNYXIgMjAwMzoKKyAgQWRkIFNQRCBFRVBST00gc3VwcG9ydCBmb3IgTVBDODI2MEFEUyBib2FyZAorCisqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjEgSmFuIDIwMDM6CisgIC0gQWRkIHN1cHBvcnQgZm9yIElubm9rb20gYm9hcmQKKyAgLSBEb24ndCBjb21wbGFpbiBpZiAiaW5zdGFsbCIgZmFpbHMKKyAgLSBSRUFETUUgY2xlYW51cCAocmVtb3ZlIGR1cGxpY2F0ZWQgbGluZXMpCisgIC0gVXBkYXRlIFBYQSBoZWFkZXIgZmlsZXMKKworKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZXhpc3RpbmcgUE9TVCBjb2RlIChkb2MvUkVBRE1FLlBPU1QpCisKKyogUGF0Y2ggYnkgTGF1ZG5leSBSZW4sIDE1IEphbiAyMDAzOgorICBGaXggaGFuZGxpbmcgb2YgcmVkdW5kYW5kIGVudmlyb25tZW50IGluICJ0b29scy9lbnZjcmMuYyIKKworKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOCBGZWIgMjAwMzoKKyAgQWRkIGJlZGJ1ZyBzdXBwb3J0IGZvciA4MjR4IHN5c3RlbXMKKworKiBBZGQgc3VwcG9ydCBmb3IgMTYgTUIgZmxhc2ggY29uZmlndXJhdGlvbiBvZiBUUkFCIGJvYXJkCisKKyogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIFJURU1TCisKKyogQWRkIGltYWdlIGluZm9ybWF0aW9uIHRvIFJFQURNRQorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggRmViIDIwMDM6CisgIENQQ0lJU0VSNCBjb25maWd1cmF0aW9uIHVwZGF0ZWQuCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBGZWIgMjAwMzoKKyAgRml4ZWQgYnVnIGluIGV4dC4gc2VyaWFsIGNsb2NrIHNldHVwIG9uIFBQQzQwNSAoc2luY2UgUFBDNDQwIHBvcnQpLgorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgRmViIDIwMDM6CisgIEFkZCAicGNpZGVsYXkiIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiBtcywgZW5hYmxlZCB2aWEKKyAgQ09ORklHX1BDSV9CT09UREVMQVkpLgorICBQQ0kgc3BlYyAyLjIgZGVmaW5lcywgdGhhdCBhIHBjaSB0YXJnZXQgaGFzIDJeMjUgcGNpIGNsb2NrcyBhZnRlcgorICBSU1QjIHRvIHJlc3BvbmQgdG8gY29uZmlndXJhdGlvbiBjeWNsZXMgKDMzTUh6IC0+IDFzKS4KKworKiBGaXggZHVhbCBQQ01DSUEgc2xvdCBzdXBwb3J0ICh3aGVuIHJ1bm5pbmcgd2l0aCBqdXN0IG9uZQorICBzbG90IHBvcHVsYXRlZCkKKworKiBBZGQgVkZEIHR5cGUgZGV0ZWN0aW9uIHRvIHRyYWIgYm9hcmQKKworKiBleHRlbmQgZHJpdmVycy9jczg5MDAuYyBkcml2ZXIgdG8gc3luY2hyb25pemUJIGV0aGFkZHIgIGVudmlyb25tZW50CisgIHZhcmlhYmxlIHdpdGggdmFsdWUgaW4gdGhlIEVFUFJPTQorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgRmViIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciA0TUIgYW5kIDEyOE1CIG9uYm9hcmQgU0RSQU0gKGNwdS9wcGM0eHgvc2RyYW0uYykKKworKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzMyIDRLYyBDUFVzCisKKyogQWRkIHN1cHBvcnQgZm9yIElOQ0EtSVAgQm9hcmQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4yOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIEFkZCBkdWFsIGV0aGVybmV0IHN1cHBvcnQgb24gUE04MjYKKworKiBBZGQgc3VwcG9ydCBmb3IgTFhUOTcxIFBIWSBvbiBQTTgyNgorCisqIFBhdGNoIGJ5IFRvcmQgQW5kZXJzc29uLCAxNiBKYW4gMjAwMzoKKyAgRml4IGZsYXNoIHNlY3RvciBjb3VudCBmb3IgVFFNOHh4TAorCisqIEZpeCBJMkMgRUVQUk9NIHByb2JsZW0gb24gSUNVODYyIGJvYXJkICh3b3VsZCBvbmx5IHdyaXRlIHRoZSBmaXJzdAorICAxNiBieXRlcyBvdXQgb2YgZWFjaCAzMiBieXRlIGJsb2NrKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjE6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogQWRkIHN1cHBvcnQgZm9yIFYzNyBib2FyZAorICAocGF0Y2ggYnkgSvNuIEJlbmVkaWt0c3NvbiwgMTEgRGVjIDIwMDIpCisKKyogVXBkYXRlIGJhdWRyYXRlIGluIGJkX2luZm8gd2hlbiBpdCBnZXRzIGNoYW5nZWQKKworKiBBZGQgd2F0Y2hkb2cgdHJpZ2dlciBwb2ludHMgd2hpbGUgd2FpdGluZyBmb3Igc2VyaWFsIHBvcnQKKyAgKHNvIGZhciBvbmx5IDh4eCAtLSBuZWVkZWQgb24gTFdNT04gd2l0aCAxMDBtcyB3YXRjaGRvZykKKworKiBJbXByb3ZlIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKKyAgKGZpZ3VyYXRpb24gb2YgdGhlIHV0aWxpdHksIHVzaW5nIGEgY29uZmlnIGZpbGUpCisKKyogQWRkIHNpbmdsZSBxdW90ZSBzdXBwb3J0IGZvciAob2xkKSBjb21tYW5kIGxpbmUgcGFyc2VyCisKKyogU3dpdGNoIExXTU9OIGJvYXJkIGRlZmF1bHQgY29uZmlnIGZyb20gRlJBTSB0byBFRVBST007CisgIGluIFBPU1QsIEVFUFJPTSBzaG93cyB1cCBvbiA4IGFkZHJlc3NlcworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjA6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogVXNlIDEtYnl0ZS1yZWFkIGluc3RlYWQgb2YgLXdyaXRlIGZvciBpcHJvYmUoKSBmdW5jdGlvbgorICBBZGQgaTJjIGNvbW1hbmRzIHRvIFBNODI2IGNvbmZpZworCisqIGV4dGVuZCBJMkMgUE9TVCBjb2RlOiBjaGVjayBmb3IgbGlzdCBvbiBrbm93biBhZGRyZXNzZXMKKworKiBJbXByb3ZlIGxvZyBidWZmZXIgY29kZTsgdXNlICJsb2dsZXZlbCIgdG8gZGVjaWRlIHdoaWNoIG1lc3NhZ2VzCisgIHRvIGxvZyBvbiB0aGUgY29uc29sZSwgdG9vIChsaWtlIGluIExpbnV4KTsgZ2V0IHJpZCBvZiAibG9nc3RhcnQiCisKKyogQWRkIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKKyAgKGJvYXJkLXNwZWNpZmljIGZvciBUUkFCIG5vdywgdG8gYmUgZml4ZWQgbGF0ZXIpCisKKyogUGF0Y2ggYnkgSGFucy1Kb2VyZyBGcmllZGVuLCAwNiBEZWMgMjAwMgorICBGaXggbWlzYyBwcm9ibGVtcyB3aXRoIEFtaWdhT25lIHN1cHBvcnQKKworKiBQYXRjaCBieSBDaHJpcyBIYWxsaW5hbiwgMyBEZWMgMjAwMjoKKyAgbWlub3IgY2xlYW51cCB0byB0aGUgTVBDODI0NSBFUElDIGRyaXZlcgorCisqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgorICBBZGQgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgKFNJVSkgaW50ZXJydXB0cyBvbiBNUEM4eHgKKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKKyAgRml4IG5lc3RlZCBzeXNjYWxscyBidWcgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKKworKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI3IE5vdiAyMDAyOgorICBmaXggb3V0cHV0IG9mICJwY2lpbmZvIiBjb21tYW5kIGZvciBDYXJkQnVzIGJyaWRnZSBkZXZpY2VzLgorCisqIEZpeCBidWcgaW4gVFFNODI2MCBib2FyZCBkZXRlY3Rpb24gLSBib2FyZHMgZ290IHN0dWNrIHdoZW4gYm9hcmQgSUQKKyAgd2FzIG5vdCByZWFkYWJsZQorCisqIEFkZCBMRUQgaW5kaWNhdGlvbiBmb3IgSURFIGFjdGl2aXR5IG9uIEtVUDRLIGJvYXJkCisKKyogRml4IHN0YXJ0dXAgcHJvYmxlbXMgd2l0aCBWRkQgZGlzcGxheSBvbiBUUkFCCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjAgTm92IDIwMDIKKyAgQWRkIGRyaXZlciBmb3IgRXBzb24gU0VEMTM4MDYgZ3JhcGhpYyBjb250cm9sbGVyLgorICBBZGQgc3VwcG9ydCBmb3IgQk1QIGxvZ29zIGluIGNmYl9jb25zb2xlIGRyaXZlci4KKworKiBBZGRlZCBzdXBwb3J0IGZvciBib3RoIFBDTUNJQSBzbG90cyAoYXQgdGhlIHNhbWUgdGltZSEpIG9uIE1QQzh4eAorCisqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjEgTm92IDIwMDI6CisgIGZpeCBQQ01DSUEgb24gTUJYOHh4IGJvYXJkCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDIxIE5vdiAyMDAyCisgIEFkZCBDRkdfQ1BNX1BPU1RfV09SRF9BRERSIHRvIG1ha2UgdGhlIG9mZnNldCBvZiB0aGUKKyAgYm9vdG1vZGUgd29yZCBpbiBEUFJBTSBjb25maWd1cmFibGUKKworKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDE4IE5vdiAyMDAyOgorICBGaXhlcyBmb3IgeDg2IHBvcnQgKG1vc3RseSBzdHJpbmdzIGlzc3VlcykKKworKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTggTm92IDIwMDI6CisgIEZpeCBmb3IgbmF0c2VtaSBOSUMgY2FyZHMgKERQODM4MTUpCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTkgTm92IDIwMDI6CisgIGZpeCBhIGJ1ZyBmb3IgdGhlIE1JSSBjb25maWd1cmF0aW9uLCBhbmQgc29tZSB3YXJuaW5ncworCisqIFBhdGNoIGJ5IFRob21hcyBGcmllZGVuLCAxMyBOb3YgMjAwMjoKKyAgQWRkIGNvZGUgZm9yIEFtaWdhT25lIGJvYXJkCisgIChwcmVsaW1pbmFyeSBtZXJnZSB0byBVLUJvb3QsIHN0aWxsIFdJUCkKKworKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTIgTm92IDIwMDI6CisgIC0gQWRkaW5nIFVSTCBmb3IgSUVFRSBPVUkgbG9va3VwCisgIC0gTWFraW5nIHRoZSBhdXRvYm9vdCAjZGVmaW5lcyBkZXBlbmRlbnQgb24gQ09ORklHX0FVVE9CT09UX0tFWUVECisgICAgYmVpbmcgZGVmaW5lZC4KKyAgLSBJbiB0aGUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAjZGVmaW5lLCB0aGUgcm9vdC1vbi1pbml0cmQgYW5kCisgICAgcm9vdC1vbi1uZnMgbWFjcm9zIGFyZSBkZXNpZ25lZCB0byBzd2l0Y2ggaG93IHRoZSBkZWZhdWx0IGJvb3QKKyAgICBtZXRob2QgZ2V0cyBkZWZpbmVkLgorCisqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTMgTm92IDIwMDI6CisgIEFkZCBzdXBwb3J0IGZvciBpMzg2IGFyY2hpdGVjdHVyZSBhbmQgQU1EIFNDNTIwIGJvYXJkCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTIgTm92IDIwMDI6CisgIEFkZCBzdXBwb3J0IGZvciBET1MgZmlsZXN5c3RlbSBhbmQgYm9vdGluZyBmcm9tIERPUyBmbG9wcHkgZGlzaworCisqIFBhdGNoIGJ5IEppbSBTYW5kb3osIDA3IE5vdiAyMDAyOgorICBJbmNyZWFzZSBudW1iZXIgb2YgbmV0d29yayBSWCBidWZmZXJzIChQS1RCVUZTUlggaW4KKyAgImluY2x1ZGUvbmV0LmgiKSBmb3IgRUVQUk8xMDAgYmFzZWQgYm9hcmRzIChlc3BlY2lhbGx5IFNQODI0MCkKKyAgd2hpY2ggc2hvd2VkICJSZWNlaXZlciBpcyBub3QgcmVhZHkiIGVycm9ycyB3aGVuIFUtQm9vdCB3YXMKKyAgcHJvY2Vzc2luZyB0aGUgcmVjZWl2ZSBidWZmZXJzIHNsb3dlciB0aGFuIHRoZSBuZXR3b3JrIGNvbnRyb2xsZXIKKyAgd2FzIGZpbGxpbmcgdGhlbS4KKworKiBQYXRjaCBieSBBbmRyZWFzIE9iZXJyaXR0ZXIsIDA5IE5vdiAyMDAyOgorICBDaGFuZ2UgYmVoYXZpb3VyIG9mIE5ldExvb3AoKTogcmV0dXJuIC0xIGZvciBlcnJvcnMsIGZpbGVzaXplCisgIG90aGVyd2lzZTsgcmV0dXJuIGNvZGUgMCBpcyB2YWxpZCBhbiBtZWFucyBubyBmaWxlIGxvYWRlZCAtIGluIHRoaXMKKyAgY2FzZSB0aGUgZW52aXJvbm1lbnQgc3RpbGwgZ2V0cyB1cGRhdGVkIQorCisqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDkgTm92IDIwMDI6CisgIC0gaW1wcm92ZSBBREMvREFDIGNsb2NraW5nIG9uIHRoZSBTQUNTbmcgYm9hcmQgdG8gYWxpZ24KKyAgICB0aGUgZmFpbGluZyBlZGdlcyBvZiBMUkNMSyBhbmQgU0NMSworICAtIHNiYzgyNjAgY29uZmlndXJhdGlvbiB0d2Vha3MKKyAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0IGZvciA4Mnh4IHN5c3RlbXMKKyAgLSB3aXJlIHNzcGkvc3NwbyBjb21tYW5kcyBpbnRvIGNvbW1hbmQgaGFuZGxlcjsgaW1wcm92ZWQgZXJyb3IKKyAgICBoYW5kbGVyaW5nCisgIC0gYWRkIHRpbWVzdGFtcCBzdXBwb3J0IGFuZCBhbHRlcm5hdGUgbWVtb3J5IHRlc3QgdG8gdGhlCisgICAgU0FDU25nIGNvbmZpZ3VyYXRpb24KKworKiBQYXRjaCBieSBWaW5jZSBIdXNvdnNreSwgNyBOb3YgMjAwMjoKKyAgQWRkICItbiIgdG8gbGlua2VyIG9wdGlvbnMgdG8gZ2V0IHJpZCBvZiAiTm90IGVub3VnaCByb29tIGZvcgorICBwcm9ncmFtIGhlYWRlcnMiIHByb2JsZW0KKworKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCisgIFJlbmFtZSBDT05GSUdfUExMX0lOUFVUX0ZSRVEgdG8gQ09ORklHX1NZU19DTEtfRlJFUQorICBzbyB3ZSBjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcgbmFtZQorCisqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCisgIEhhcmR3YXJlIHJlbGF0aWVkIGltcHJvdm1lbnRzIGluIEZEQyBib290IGNvZGUKKworKiBQYXRjaCBieSBIb2xnZXIgU2NodXJpZywgNSBOb3YgMjAwMjoKKyAgTWFrZSB0aGUgUFhBIHJlYWxseSBjaGFuZ2UgaXQncyBmcmVxdWVuY3kKKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgorICBBZGQgc3VwcG9ydCBmb3Igc2xhdmUgc2VyaWFsIFNwYXJ0YW4gMiBGUEdBcworCisqIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeSAoTUFDCSBhZGRyZXNzKSAgaW4gIDh4eCAgU0NDL0ZFQyAgZXRoZXJuZXQKKyAgZHJpdmVycworCisqIEFkZCBzdXBwb3J0IGZvciBsb2cgYnVmZmVyIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gTGludXgga2VybmVsJ3MKKyAgc3lzbG9nIG1lY2hhbmlzbTsgdXNlZCBlc3BlY2lhbGx5IGZvciBQT1NUIHJlc3VsdHMuCisKKyogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMzEgT2N0IDIwMDI6CisgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGt1cDRrIGJvYXJkCisKKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNCBOb3YgMjAwMjoKKyAgLSB1c2Ugd2F0Y2hkb2cgdG8gcmVzZXQgUFhBMjUwIHN5c3RlbXMKKyAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQorICAtIHVwZGF0ZSBmb3IgQ29nZW50IENTQjIyNiBib2FyZAorCisqIEFkZCBzdXBwb3J0IGZvciBGUFM4NjAgYm9hcmQKKworKiBQYXRjaCBieSBHdWlsbGF1bWUgQWxleGFuZHJlLCwgMDQgTm92IDIwMDI6CisgIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cworCisqIEZpeCBtZGVsYXkoKSBvbiBUUkFCIC0gdGhpcyB3YXMgc3RpbGwgdGhlIGRlYnVnZ2luZyB2ZXJzaW9uIHdpdGgKKyAgc2Vjb25kcyBpbnN0ZWFkIG9mIG1zLgorCisqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMSBOb3YgMjAwMjoKKyAgWFNjYWxlIHJlbGF0ZWQgY2xlYW51cCAoYWZmZWN0cyBhbGwgQVJNIGJvYXJkcykKKworKiBDbGVhbnVwIG9mIG5hbWVzIGFuZCBSRUFETUUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05vdGVzIGZvciBVLUJvb3QgMC4xLjA6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiAiRGFzIFUtQm9vdCIsIHRoZSBVbml2ZXJzYWwgQm9vdCBMb2FkZXIuCisKK0l0IGlzIGJhc2VkIG9uIHZlcnNpb24gMi4wLjAgKHRoZSAiSGFsbG93ZWVuIFJlbGVhc2UiKSBvZiBQUENCb290LgorRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoaXN0b3J5IG9mIHRoZSBwcm9qZWN0IHBsZWFzZSBzZWUgdGhlCitQUENCb290IHByb2plY3QgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BwY2Jvb3QKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAyNGE1YTNhLi4wYWYyNmJmIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMzE4LDYgKzMxOCw5IEBACiAJCWdyZXAgLXYgJ1woY29tcGlsZWRcKVx8XChcLm8kJFwpXHxcKCBbYVV3XSBcKVx8XChcLlwubmckJFwpXHxcKExBU0hbUkxdRElcKScgfCBcCiAJCXNvcnQgPiAkKG9iailTeXN0ZW0ubWFwCiAKK0NIQU5HRUxPRzoKKwlnaXQgbG9nIC0tbm8tbWVyZ2VzIFUtQm9vdC0xXzFfNS4uID4gJEAKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogZWxzZQogYWxsICQob2JqKXUtYm9vdC5oZXggJChvYmopdS1ib290LnNyZWMgJChvYmopdS1ib290LmJpbiBcCg==