From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Huang, Kai" Subject: Re: [PATCH 08/15] xen: x86: add SGX cpuid handling support. Date: Thu, 13 Jul 2017 17:42:07 +1200 Message-ID: <7519e471-7fd5-748d-2191-31f9a486f81d@linux.intel.com> References: <1ca2e437e21b0684518ff32dad292aa6080dcb11.1499586046.git.kai.huang@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper , Kai Huang , xen-devel@lists.xen.org Cc: jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org CgpPbiA3LzEyLzIwMTcgMTA6NTYgUE0sIEFuZHJldyBDb29wZXIgd3JvdGU6Cj4gT24gMDkvMDcv MTcgMTA6MTAsIEthaSBIdWFuZyB3cm90ZToKPj4gVGhpcyBwYXRjaCBhZGRzIFNHWCB0byBjcHVp ZCBoYW5kbGluZyBzdXBwb3J0LiBJbiBpbml0X2d1ZXN0X2NwdWlkLCBmb3IKPj4gcmF3X3BvbGlj eSBhbmQgaG9zdF9wb2xpY3ksIHBoeXNpY2FsIEVQQyBpbmZvIGlzIHJlcG9ydGVkLCBidXQgZm9y IAo+PiBwdl9tYXhfcG9saWN5Cj4+IGFuZCBodm1fbWF4X3BvbGljeSBFUEMgaXMgaGlkZGVuLCBh cyBmb3IgcGFydGljdWxhciBkb21haW4sIGl0J3MgRVBDIAo+PiBiYXNlIGFuZAo+PiBzaXplIGFy ZSBmcm9tIHRvb2tzdGFjaywgYW5kIGl0IGlzIG1lYW5pbmdsZXNzIHRvIGNvbnRhaW4gcGh5c2lj YWwgRVBDIAo+PiBpbmZvIGluCj4+IHRoZW0uIEJlZm9yZSBkb21haW4ncyBFUEMgYmFzZSBhbmQg c2l6ZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZCwgCj4+IGd1ZXN0J3MgU0dYCj4+IGNwdWlkIHNo b3VsZCByZXBvcnQgaW52YWxpZCBFUEMsIHdoaWNoIGlzIGFsc28gY29uc2lzdGVudCB3aXRoIEhX IAo+PiBiZWhhdmlvci4KPj4KPj4gQ3VycmVudGx5IGFsbCBFUEMgcGFnZXMgYXJlIGZ1bGx5IHBv cHVsYXRlZCBmb3IgZG9tYWluIHdoZW4gaXQgaXMgCj4+IGNyZWF0ZWQuCj4+IFhlbiBnZXRzIGRv bWFpbidzIEVQQyBiYXNlIGFuZCBzaXplIGZyb20gdG9vbHN0YWNrIHZpYSAKPj4gWEVOX0RPTUNU TF9zZXRfY3B1aWQsCj4+IHNvIGRvbWFpbidzIEVQQyBwYWdlcyBhcmUgYWxzbyBwb3B1bGF0ZWQg aW4gWEVOX0RPTUNUTF9zZXRfY3B1aWQsIGFmdGVyCj4+IHJlY2VpdmluZyB2YWxpZCBFUEMgYmFz ZSBhbmQgc2l6ZS4gRmFpbHVyZSB0byBwb3B1bGF0ZSBFUEMgKHN1Y2ggYXMgCj4+IHRoZXJlJ3MK Pj4gbm8gZW5vdWdoIGZyZWUgRVBDIHBhZ2VzKSByZXN1bHRzIGluIGRvbWFpbiBjcmVhdGlvbiBm YWlsdXJlIGJ5IG1ha2luZwo+PiBYRU5fRE9NQ1RMX3NldF9jcHVpZCByZXR1cm4gZXJyb3IuCj4+ Cj4+IFNpZ25lZC1vZmYtYnk6IEthaSBIdWFuZyA8a2FpLmh1YW5nQGxpbnV4LmludGVsLmNvbT4K Pj4gLS0tCj4+ICAgeGVuL2FyY2gveDg2L2NwdWlkLmMgICAgICAgIHwgODcgCj4+ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+PiAgIHhlbi9hcmNoL3g4Ni9k b21jdGwuYyAgICAgICB8IDQ3ICsrKysrKysrKysrKysrKysrKysrKysrLQo+PiAgIHhlbi9pbmNs dWRlL2FzbS14ODYvY3B1aWQuaCB8IDI2ICsrKysrKysrKysrKystCj4+ICAgMyBmaWxlcyBjaGFu Z2VkLCAxNTcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9jcHVpZC5jIGIveGVuL2FyY2gveDg2L2NwdWlkLmMKPj4gaW5kZXggZDM1 OWUwOTBmMy4uZGI4OTZiZTJlOCAxMDA2NDQKPj4gLS0tIGEveGVuL2FyY2gveDg2L2NwdWlkLmMK Pj4gKysrIGIveGVuL2FyY2gveDg2L2NwdWlkLmMKPj4gQEAgLTksNiArOSw3IEBACj4+ICAgI2lu Y2x1ZGUgPGFzbS9wYWdpbmcuaD4KPj4gICAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgo+PiAg ICNpbmNsdWRlIDxhc20veHN0YXRlLmg+Cj4+ICsjaW5jbHVkZSA8YXNtL2h2bS92bXgvc2d4Lmg+ Cj4+ICAgY29uc3QgdWludDMyX3Qga25vd25fZmVhdHVyZXNbXSA9IElOSVRfS05PV05fRkVBVFVS RVM7Cj4+ICAgY29uc3QgdWludDMyX3Qgc3BlY2lhbF9mZWF0dXJlc1tdID0gSU5JVF9TUEVDSUFM X0ZFQVRVUkVTOwo+PiBAQCAtMTU4LDYgKzE1OSw0NCBAQCBzdGF0aWMgdm9pZCByZWNhbGN1bGF0 ZV94c3RhdGUoc3RydWN0IAo+PiBjcHVpZF9wb2xpY3kgKnApCj4+ICAgICAgIH0KPj4gICB9Cj4+ ICtzdGF0aWMgdm9pZCByZWNhbGN1bGF0ZV9zZ3goc3RydWN0IGNwdWlkX3BvbGljeSAqcCwgYm9v bF90IGhpZGVfZXBjKQo+IAo+IEFjcm9zcyB0aGUgZW50aXJlIHNlcmllcywgcGxlYXNlIHVzZSBi b29sIHJhdGhlciB0aGFuIGJvb2xfdC4KSGkgQW5kcmV3LAoKVGhhbmsgeW91IHZlcnkgbXVjaCBm b3IgY29tbWVudHMuCgpXaWxsIGRvLgoKPiAKPiBXaHkgZG8gd2UgbmVlZCB0aGlzIGhpZGVfZXBj IHBhcmFtZXRlcj8gIElmIHdlIGFyZW4ndCBwcm92aWRpbmcgYW55IGVwYyAKPiByZXNvdXJjZSB0 byB0aGUgZ3Vlc3QsIHRoZSBlbnRpcmUgc2d4IHVuaW9uIHNob3VsZCBiZSB6ZXJvIGFuZCB0aGUg U0dYIAo+IGZlYXR1cmUgYml0IHNob3VsZCBiZSBoaWRkZW4uCgpNeSBpbnRlbnRpb24gd2FzIHRv IGhpZGUgcGh5c2ljYWwgRVBDIGluZm8gZm9yIHB2X21heF9wb2xpY3kgYW5kIApodm1fbWF4X3Bv bGljeSAocmVjYWxjdWxhdGVfc2d4IGlzIGFsc28gY2FsbGVkIGJ5IApjYWxjdWxhdGVfcHZfbWF4 X3BvbGljeSBhbmQgY2FsY3VsYXRlX2h2bV9tYXhfcG9saWN5KSwgYXMgdGhleSBhcmUgZm9yIApn dWVzdCBhbmQgZG9uJ3QgbmVlZCBwaHlzaWNhbCBFUEMgaW5mby4gQnV0IGtlZXBpbmcgcGh5c2lj YWwgRVBDIGluZm8gaW4gCnRoZW0gZG9lcyBubyBoYXJtIHNvIEkgdGhpbmsgd2UgY2FuIHNpbXBs eSByZW1vdmUgaGlkZV9lcGMuCgpJTU8gd2UgY2Fubm90IGNoZWNrIHdoZXRoZXIgRVBDIGlzIHZh bGlkIGFuZCB6ZXJvIHNneCB1bmlvbiBpbiAKcmVjYWxjdWxhdGVfc2d4LCBhcyBpdCBpcyBjYWxs ZWQgZm9yIGVhY2ggQ1BVSUQuIEZvciBleGFtcGxlLCBpdCBpcyAKY2FsbGVkIGZvciBTR1ggc3Vi bGVhZiAwLCBhbmQgMSwgYW5kIHRoZW4gMiwgYW5kIHdoZW4gc3VibGVhZiAwIGFuZCAxIAphcmUg Y2FsbGVkLCB0aGUgRVBDIHJlc291cmNlIGlzIDAgKGhhc24ndCBiZWVuIGNvbmZpZ3VyZWQpLgoK PiAKPj4gK3sKPj4gKyAgICBpZiAoICFwLT5mZWF0LnNneCApCj4+ICsgICAgewo+PiArICAgICAg ICBtZW1zZXQoJnAtPnNneCwgMCwgc2l6ZW9mIChwLT5zZ3gpKTsKPj4gKyAgICAgICAgcmV0dXJu Owo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmICggIXAtPnNneC5zZ3gxICkKPj4gKyAgICB7Cj4+ ICsgICAgICAgIG1lbXNldCgmcC0+c2d4LCAwLCBzaXplb2YgKHAtPnNneCkpOwo+PiArICAgICAg ICByZXR1cm47Cj4+ICsgICAgfQo+IAo+IFRoZXNlIHR3byBjbGF1c2VzIGNhbiBiZSBjb21iaW5l ZC4KCldpbGwgZG8uCgo+IAo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBTRE0gNDIuNy4yLjEg U0VDUy5BVFRSSUJVVEUuWEZSTToKPj4gKyAgICAgKgo+PiArICAgICAqIExlZ2FsIHZhbHVlIGZv ciBTRUNTLkFUVFJJQlVURS5YRlJNIGNvbmZvcm0gdG8gdGhlc2UgCj4+IHJlcXVpcmVtZW50czoK Pj4gKyAgICAgKiAgLSBYRlJNWzE6MF0gbXVzdCBiZSBzZXQgdG8gMHgzOwo+PiArICAgICAqICAt IElmIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFhTQVZFLCBvciBpZiB0aGUgc3lzdGVtIAo+ PiBzb2Z0d2FyZSBoYXMgbm90Cj4+ICsgICAgICogICAgZW5hYmxlZCBYU0FWRSwgdGhlbiBYRlJN WzYzOjJdIG11c3QgYmUgMC4KPj4gKyAgICAgKiAgLSBJZiB0aGUgcHJvY2Vzc29yIGRvZXMgc3Vw cG9ydCBYU0FWRSwgWEZSTSBtdXN0IGNvbnRhaW4gYSAKPj4gdmFsdWUgdGhhdAo+PiArICAgICAq ICAgIHdvdWxkIGJlIGxlZ2FsIGlmIGxvYWRlZCBpbnRvIFhDUjAuCj4+ICsgICAgICovCj4+ICsg ICAgcC0+c2d4Lnhmcm1fbG93ID0gMHgzOwo+PiArICAgIHAtPnNneC54ZnJtX2hpZ2ggPSAwOwo+ PiArICAgIGlmICggcC0+YmFzaWMueHNhdmUgKQo+PiArICAgIHsKPj4gKyAgICAgICAgcC0+c2d4 Lnhmcm1fbG93IHw9IHAtPnhzdGF0ZS54Y3IwX2xvdzsKPj4gKyAgICAgICAgcC0+c2d4Lnhmcm1f aGlnaCB8PSBwLT54c3RhdGUueGNyMF9oaWdoOwo+PiArICAgIH0KPiAKPiBUaGVyZSBpcyBhIGJ1 ZyBoZXJlLCBidXQgaXQgd2lsbCBkaXNhcHBlYXIgd2l0aCBteSBDUFVJRCB3b3JrLiAgQXQgdGhl IAo+IG1vbWVudCwgdGhlIGpvYiBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHNhbml0aXNlIHZhbHVl cyBoYW5kZWQgYnkgdGhlIAo+IHRvb2xzdGFjaywgd2hpY2ggaW5jbHVkZXMgemVyb2luZyBhbGwg dGhlIHJlc2VydmVkIGJpdHMuICBUaGlzIGlzIAo+IGJlY2F1c2UgdGhlcmUgaXMgY3VycmVudGx5 IG5vIHdheSB0byBzaWduYWwgYSBmYWlsdXJlLgo+IAo+IFdoZW4gSSBmaXggdGhlIHRvb2xzdGFj ayBpbnRlcmZhY2UsIHRoZSB0b29sc3RhY2sgd2lsbCBwcm9wb3NlIGEgbmV3IAo+IENQVUlEIHBv bGljeSwgYW5kIFhlbiB3aWxsIGhhdmUgYSBmdW5jdGlvbiB0byBjaGVjayBpdCBhZ2FpbnN0IHRo ZSAKPiBhcmNoaXRlY3R1cmFsIHJlcXVpcmVtZW50cy4gIEF0IHRoYXQgcG9pbnQsIHdlIHdpbGwg YmUgYXBwbHlpbmcgY2hlY2tzLCAKPiBidXQgbm90IG1vZGlmeWluZyB0aGUgY29udGVudHMuCgpJ IHRoaW5rIEkgbmVlZCB0byBsb29rIGF0IHlvdXIgZGVzaWduIGZpcnN0IGFuZCB0aGVuIEkgc2hv dWxkIGJlIGFibGUgdG8gCnVuZGVyc3RhbmQgeW91ciBjb21tZW50LiA6KQoKPiAKPj4gKwo+PiAr ICAgIGlmICggaGlkZV9lcGMgKQo+PiArICAgIHsKPj4gKyAgICAgICAgbWVtc2V0KCZwLT5zZ3gu cmF3WzB4Ml0sIDAsIHNpemVvZiAoc3RydWN0IGNwdWlkX2xlYWYpKTsKPj4gKyAgICB9Cj4+ICt9 Cj4+ICsKPj4gICAvKgo+PiAgICAqIE1pc2MgYWRqdXN0bWVudHMgdG8gdGhlIHBvbGljeS4gIE1v c3RseSBjbG9iYmVyaW5nIHJlc2VydmVkIAo+PiBmaWVsZHMgYW5kCj4+ICAgICogZHVwbGljYXRp bmcgc2hhcmVkIGZpZWxkcy4gIEludGVudGlvbmFsbHkgaGlkZGVuIGZpZWxkcyBhcmUgCj4+IGFu bm90YXRlZC4KPj4gQEAgLTIzOSw3ICsyNzgsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY2FsY3Vs YXRlX3Jhd19wb2xpY3kodm9pZCkKPj4gICAgICAgewo+PiAgICAgICAgICAgc3dpdGNoICggaSAp Cj4+ICAgICAgICAgICB7Cj4+IC0gICAgICAgIGNhc2UgMHg0OiBjYXNlIDB4NzogY2FzZSAweGQ6 Cj4+ICsgICAgICAgIGNhc2UgMHg0OiBjYXNlIDB4NzogY2FzZSAweGQ6IGNhc2UgMHgxMjoKPj4g ICAgICAgICAgICAgICAvKiBNdWx0aS1pbnZvY2F0aW9uIGxlYXZlcy4gIERlZmVycmVkLiAqLwo+ PiAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiAgICAgICAgICAgfQo+PiBAQCAtMjk5LDYgKzMz OCwxOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRlX3Jhd19wb2xpY3kodm9pZCkKPj4g ICAgICAgICAgIH0KPj4gICAgICAgfQo+PiArICAgIGlmICggcC0+YmFzaWMubWF4X2xlYWYgPj0g U0dYX0NQVUlEICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIEZvciBy YXcgcG9saWN5IHdlIGp1c3QgcmVwb3J0IG5hdGl2ZSBDUFVJRC4gRm9yIEVQQyBvbiAKPj4gbmF0 aXZlIGl0J3MKPj4gKyAgICAgICAgICogcG9zc2libGUgdGhhdCB3ZSB3aWxsIGhhdmUgbXVsdGlw bGUgRVBDIHNlY3Rpb25zIChtZWFuaW5nIAo+PiBzdWJsZWFmIDMsCj4+ICsgICAgICAgICAqIDQs IC4uLiBtYXkgYWxzbyBiZSB2YWxpZCksIGJ1dCBhcyB0aGUgcG9saWN5IGlzIGZvciBndWVzdCAK Pj4gc28gd2Ugb25seQo+PiArICAgICAgICAgKiBuZWVkIG9uZSBFUEMgc2VjdGlvbiAoc3VibGVh ZiAyKS4KPj4gKyAgICAgICAgICovCj4+ICsgICAgICAgIGNwdWlkX2NvdW50X2xlYWYoU0dYX0NQ VUlELCAwLCAmcC0+c2d4LnJhd1swXSk7Cj4+ICsgICAgICAgIGNwdWlkX2NvdW50X2xlYWYoU0dY X0NQVUlELCAwLCAmcC0+c2d4LnJhd1swXSk7Cj4+ICsgICAgICAgIGNwdWlkX2NvdW50X2xlYWYo U0dYX0NQVUlELCAwLCAmcC0+c2d4LnJhd1swXSk7Cj4gCj4gQ29weSAmIHBhc3RlIGVycm9yPyAg SSBwcmVzdW1lIHlvdSBtZWFudCB0byB1c2UgbGVhdmVzIDEgYW5kIDIgaGVyZSwgCj4gcmF0aGVy IHRoYW4gbGVhZiAwIGVhY2ggdGltZT8KCk9oIHNvcnJ5LiBZZXMgaW5kZWVkIEkgbWVhbnQgemVy byBvdXQgc3VibGVhZiAxIGFuZCAyLgoKPiAKPj4gKyAgICB9Cj4+ICsKPj4gICAgICAgLyogRXh0 ZW5kZWQgbGVhdmVzLiAqLwo+PiAgICAgICBjcHVpZF9sZWFmKDB4ODAwMDAwMDAsICZwLT5leHRk LnJhd1swXSk7Cj4+ICAgICAgIGZvciAoIGkgPSAxOyBpIDwgbWluKEFSUkFZX1NJWkUocC0+ZXh0 ZC5yYXcpLAo+PiBAQCAtMzI0LDYgKzM3Niw4IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxh dGVfaG9zdF9wb2xpY3kodm9pZCkKPj4gICAgICAgY3B1aWRfZmVhdHVyZXNldF90b19wb2xpY3ko Ym9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSwgcCk7Cj4+ICAgICAgIHJlY2FsY3VsYXRlX3hz dGF0ZShwKTsKPj4gICAgICAgcmVjYWxjdWxhdGVfbWlzYyhwKTsKPj4gKyAgICAvKiBGb3IgaG9z dCBwb2xpY3kgd2UgcmVwb3J0IHBoeXNpY2FsIEVQQyAqLwo+PiArICAgIHJlY2FsY3VsYXRlX3Nn eChwLCAwKTsKPj4gICAgICAgaWYgKCBwLT5leHRkLnN2bSApCj4+ICAgICAgIHsKPj4gQEAgLTM1 Nyw2ICs0MTEsMTEgQEAgc3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9wdl9tYXhfcG9saWN5 KHZvaWQpCj4+ICAgICAgIHNhbml0aXNlX2ZlYXR1cmVzZXQocHZfZmVhdHVyZXNldCk7Cj4+ICAg ICAgIGNwdWlkX2ZlYXR1cmVzZXRfdG9fcG9saWN5KHB2X2ZlYXR1cmVzZXQsIHApOwo+PiAgICAg ICByZWNhbGN1bGF0ZV94c3RhdGUocCk7Cj4+ICsgICAgLyoKPj4gKyAgICAgKiBGb3IgUFYgcG9s aWN5IHdlIGRvbid0IHJlcG9ydCBwaHlzaWNhbCBFUEMuIEFjdHVhbGx5IGZvciBQViAKPj4gcG9s aWN5Cj4+ICsgICAgICogY3VycmVudGx5IFNHWCB3aWxsIGJlIGRpc2FibGVkLgo+PiArICAgICAq Lwo+PiArICAgIHJlY2FsY3VsYXRlX3NneChwLCAxKTsKPj4gICAgICAgcC0+ZXh0ZC5yYXdbMHhh XSA9IEVNUFRZX0xFQUY7IC8qIE5vIFNWTSBmb3IgUFYgZ3Vlc3RzLiAqLwo+PiAgIH0KPj4gQEAg LTQxMyw2ICs0NzIsMTMgQEAgc3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9odm1fbWF4X3Bv bGljeSh2b2lkKQo+PiAgICAgICBzYW5pdGlzZV9mZWF0dXJlc2V0KGh2bV9mZWF0dXJlc2V0KTsK Pj4gICAgICAgY3B1aWRfZmVhdHVyZXNldF90b19wb2xpY3koaHZtX2ZlYXR1cmVzZXQsIHApOwo+ PiAgICAgICByZWNhbGN1bGF0ZV94c3RhdGUocCk7Cj4+ICsgICAgLyoKPj4gKyAgICAgKiBGb3Ig SFZNIHBvbGljeSB3ZSBkb24ndCByZXBvcnQgcGh5c2ljYWwgRVBDLiBBY3R1YWxseSBjcHVpZCAK Pj4gcG9saWN5Cj4+ICsgICAgICogc2hvdWxkIHJlcG9ydCBWTSdzIHZpcnR1YWwgRVBDIGJhc2Ug YW5kIHNpemUuIEhvd2V2ZXIgVk0ncyAKPj4gdmlydHVhbAo+PiArICAgICAqIEVQQyBpbmZvIHdp bGwgY29tZSBmcm9tIHRvb2xzdGFjaywgYW5kIG9ubHkgYWZ0ZXIgWGVuIGlzIG5vdGlmaWVkCj4+ ICsgICAgICogVk0ncyBjcHVpZCBwb2xpY3kgc2hvdWxkIHJlcG9ydCBpbnZhbGlkIEVQQy4KPj4g KyAgICAgKi8KPj4gKyAgICByZWNhbGN1bGF0ZV9zZ3gocCwgMSk7Cj4+ICAgfQo+PiAgIHZvaWQg X19pbml0IGluaXRfZ3Vlc3RfY3B1aWQodm9pZCkKPj4gQEAgLTUyOCw2ICs1OTQsMTIgQEAgdm9p ZCByZWNhbGN1bGF0ZV9jcHVpZF9wb2xpY3koc3RydWN0IGRvbWFpbiAqZCkKPj4gICAgICAgaWYg KCBwLT5iYXNpYy5tYXhfbGVhZiA8IFhTVEFURV9DUFVJRCApCj4+ICAgICAgICAgICBfX2NsZWFy X2JpdChYODZfRkVBVFVSRV9YU0FWRSwgZnMpOwo+PiArICAgIGlmICggcC0+YmFzaWMubWF4X2xl YWYgPCBTR1hfQ1BVSUQgKQo+PiArICAgIHsKPj4gKyAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZF QVRVUkVfU0dYLCBmcyk7Cj4+ICsgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1NHWF9M QVVOQ0hfQ09OVFJPTCwgZnMpOwo+IAo+IEJlY2F1c2UgeW91IGZpbGxlZCBpbiB0aGUgZmVhdHVy ZSBkZXBlbmRlbmN5IGdyYXBoIGZvciBTR1hfTEFVTkNIIAo+IGRlcGVuZGluZyBvbiBTR1gsIHRo aXMgc2Vjb25kIGNsZWFyIGJpdCBpc24ndCBuZWNlc3NhcnkuICBDbGVhcmluZyBTR1ggCj4gd2ls bCBjYXVzZSBzYW5pdGlzZV9mZWF0dXJlc2V0KCkgdG8gYXV0b21hdGljYWxseSBjbGVhciBTR1hf TEFVTkNIIChhbmQgCj4gYW55IGZ1dHVyZSBmZWF0dXJlIGJpdHMpLgoKWWVzIHlvdSBhcmUgcmln aHQuIEknbGwganVzdCBjbGVhciBTR1ggaW4gbmV4dCB2ZXJzaW9uLgoKPiAKPj4gKyAgICB9Cj4+ ICsKPj4gICAgICAgc2FuaXRpc2VfZmVhdHVyZXNldChmcyk7Cj4+ICAgICAgIC8qIEZvbGQgaG9z dCdzIEZEUF9FWENQX09OTFkgYW5kIE5PX0ZQVV9TRUwgaW50byBndWVzdCdzIHZpZXcuICovCj4+ IEBAIC01NTAsNiArNjIyLDEyIEBAIHZvaWQgcmVjYWxjdWxhdGVfY3B1aWRfcG9saWN5KHN0cnVj dCBkb21haW4gKmQpCj4+ICAgICAgIHJlY2FsY3VsYXRlX3hzdGF0ZShwKTsKPj4gICAgICAgcmVj YWxjdWxhdGVfbWlzYyhwKTsKPj4gKyAgICAvKgo+PiArICAgICAqIHJlY2FsY3VsYXRlX2NwdWlk X3BvbGljeSBpcyBhbHNvIGNhbGxlZCBmb3IgZG9tYWluJ3MgY3B1aWQgCj4+IHBvbGljeSwKPj4g KyAgICAgKiB3aGljaCBpcyBmcm9tIHRvb2xzdGFjayB2aWEgWEVOX0RPTUNUTF9zZXRfY3B1aWQs IHRoZXJlZm9yZSB3ZSAKPj4gY2Fubm90Cj4+ICsgICAgICogaGlkZSBkb21haW4ncyB2aXJ0dWFs IEVQQyBmcm9tIHRvb2xzdGFjay4KPj4gKyAgICAgKi8KPj4gKyAgICByZWNhbGN1bGF0ZV9zZ3go cCwgMCk7Cj4+ICAgICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShwLT5jYWNoZS5yYXcp OyArK2kgKQo+PiAgICAgICB7Cj4+IEBAIC02NDUsNiArNzIzLDEzIEBAIHZvaWQgZ3Vlc3RfY3B1 aWQoY29uc3Qgc3RydWN0IHZjcHUgKnYsIHVpbnQzMl90IAo+PiBsZWFmLAo+PiAgICAgICAgICAg ICAgICpyZXMgPSBwLT54c3RhdGUucmF3W3N1YmxlYWZdOwo+PiAgICAgICAgICAgICAgIGJyZWFr Owo+PiArICAgICAgICBjYXNlIFNHWF9DUFVJRDoKPj4gKyAgICAgICAgICAgIGlmICggIXAtPmZl YXQuc2d4ICkKPj4gKyAgICAgICAgICAgICAgICByZXR1cm47Cj4gCj4gfHwgc3VibGVhZiA+PSBB UlJBWV9TSVpFKHAtPnNneC5yYXcpCj4gCj4gT3RoZXJ3aXNlLCBhIGd1ZXN0IENQVUlEIHF1ZXJ5 IGNhbiB3YWxrIHJlYWQgb2ZmIHRoZSBlbmQgb2YgcmF3W10uCgpPaCB5ZXMuIFRoYW5rcyBmb3Ig cG9pbnRpbmcgb3V0LgoKPiAKPj4gKwo+PiArICAgICAgICAgICAgKnJlcyA9IHAtPnNneC5yYXdb c3VibGVhZl07Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKwo+PiAgICAgICAgICAgZGVmYXVs dDoKPj4gICAgICAgICAgICAgICAqcmVzID0gcC0+YmFzaWMucmF3W2xlYWZdOwo+PiAgICAgICAg ICAgICAgIGJyZWFrOwo+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2RvbWN0bC5jIGIveGVu L2FyY2gveDg2L2RvbWN0bC5jCj4+IGluZGV4IGY0MGU5ODlmZDguLjdkNDk5NDdhM2UgMTAwNjQ0 Cj4+IC0tLSBhL3hlbi9hcmNoL3g4Ni9kb21jdGwuYwo+PiArKysgYi94ZW4vYXJjaC94ODYvZG9t Y3RsLmMKPj4gQEAgLTUzLDYgKzUzLDcgQEAgc3RhdGljIGludCB1cGRhdGVfZG9tYWluX2NwdWlk X2luZm8oc3RydWN0IGRvbWFpbiAqZCwKPj4gICAgICAgc3RydWN0IGNwdWlkX3BvbGljeSAqcCA9 IGQtPmFyY2guY3B1aWQ7Cj4+ICAgICAgIGNvbnN0IHN0cnVjdCBjcHVpZF9sZWFmIGxlYWYgPSB7 IGN0bC0+ZWF4LCBjdGwtPmVieCwgY3RsLT5lY3gsIAo+PiBjdGwtPmVkeCB9Owo+PiAgICAgICBp bnQgb2xkX3ZlbmRvciA9IHAtPng4Nl92ZW5kb3I7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ICAg ICAgIC8qCj4+ICAgICAgICAqIFNraXAgdXBkYXRlIGZvciBsZWF2ZXMgd2UgZG9uJ3QgY2FyZSBh Ym91dC4gIFRoaXMgYXZvaWRzIHRoZSAKPj4gb3ZlcmhlYWQKPj4gQEAgLTc0LDYgKzc1LDcgQEAg c3RhdGljIGludCB1cGRhdGVfZG9tYWluX2NwdWlkX2luZm8oc3RydWN0IGRvbWFpbiAqZCwKPj4g ICAgICAgICAgIGlmICggY3RsLT5pbnB1dFswXSA9PSBYU1RBVEVfQ1BVSUQgJiYKPj4gICAgICAg ICAgICAgICAgY3RsLT5pbnB1dFsxXSAhPSAxICkgLyogRXZlcnl0aGluZyBlbHNlIGF1dG9tYXRp Y2FsbHkgCj4+IGNhbGN1bGF0ZWQuICovCj4+ICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+ICsK Pj4gICAgICAgICAgIGJyZWFrOwo+PiAgICAgICBjYXNlIDB4NDAwMDAwMDA6IGNhc2UgMHg0MDAw MDEwMDoKPj4gQEAgLTEwNCw2ICsxMDYsMTAgQEAgc3RhdGljIGludCB1cGRhdGVfZG9tYWluX2Nw dWlkX2luZm8oc3RydWN0IGRvbWFpbiAKPj4gKmQsCj4+ICAgICAgICAgICAgICAgcC0+eHN0YXRl LnJhd1tjdGwtPmlucHV0WzFdXSA9IGxlYWY7Cj4+ICAgICAgICAgICAgICAgYnJlYWs7Cj4+ICsg ICAgICAgIGNhc2UgU0dYX0NQVUlEOgo+PiArICAgICAgICAgICAgcC0+c2d4LnJhd1tjdGwtPmlu cHV0WzFdXSA9IGxlYWY7Cj4+ICsgICAgICAgICAgICBicmVhazsKPiAKPiBZb3UgYWxzbyBuZWVk IHRvIG1vZGlmeSB0aGUgaGlnaGVyIHN3aXRjaCBzdGF0ZW1lbnQgc28gdGhlIHRvb2xzdGFjayAK PiBjYW4ndCBjYXVzZSBYZW4gdG8gd3JpdGUgYmV5b25kIHRoZSBlbmQgb2YgLnJhd1tdLgoKWWVz IEkgdW5kZXJzdGFuZCB5b3VyIHBvaW50IG5vdy4gV2lsbCBkby4KCj4gCj4+ICsKPj4gICAgICAg ICAgIGRlZmF1bHQ6Cj4+ICAgICAgICAgICAgICAgcC0+YmFzaWMucmF3W2N0bC0+aW5wdXRbMF1d ID0gbGVhZjsKPj4gICAgICAgICAgICAgICBicmVhazsKPj4gQEAgLTI1NSw2ICsyNjEsNDUgQEAg c3RhdGljIGludCB1cGRhdGVfZG9tYWluX2NwdWlkX2luZm8oc3RydWN0IGRvbWFpbiAKPj4gKmQs Cj4+ICAgICAgICAgICB9Cj4+ICAgICAgICAgICBicmVhazsKPj4gKyAgICBjYXNlIDB4MTI6Cj4+ ICsgICAgewo+PiArICAgICAgICB1aW50NjRfdCBiYXNlX3BmbiwgbnBhZ2VzOwo+PiArCj4+ICsg ICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwg KQo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICAgICAgaWYgKCBjdGwtPmlucHV0 WzFdICE9IDIgKQo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICAgICAgLyogU0dY IGhhcyBub3QgZW5hYmxlZCAqLwo+PiArICAgICAgICBpZiAoICFwLT5mZWF0LnNneCB8fCAhcC0+ c2d4LnNneDEgKQo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICAgICAgLyoKPj4g KyAgICAgICAgICogSWYgU0dYIGlzIGVuYWJsZWQgaW4gQ1BVSUQsIHRoZW4gd2UgYXJlIGV4cGVj dGluZyB2YWxpZCAKPj4gRVBDIHJlc291cmNlCj4+ICsgICAgICAgICAqIGluIHN1Yi1sZWFmIDB4 Mi4gUmV0dXJuIC1FRkFVTFQgdG8gbm90aWZ5IHRvb2xzdGFjayB0aGF0IAo+PiB0aGVyZSdzCj4+ ICsgICAgICAgICAqIHNvbWV0aGluZyB3cm9uZy4KPj4gKyAgICAgICAgICovCj4+ICsgICAgICAg IGlmICggIXAtPnNneC5iYXNlX3ZhbGlkIHx8ICFwLT5zZ3guc2l6ZV92YWxpZCApCj4gCj4gSXMg dGhlcmUgYW55IHBsYXVzaWJsZSB1c2VjYXNlIHdoZXJlIG9ubHkgb25lIG9mIHRoZXNlIGlzIHZh bGlkPyAgSWYgCj4gbm90LCB3aHkgYXJlIHRoZXkgc3BsaXQ/CgpZb3UgbWVhbiB3aHkgYXJlIHRo ZXkgc3BsaXQgaW4gU0RNPyBJIGRvbid0IHRoaW5rIHRoZXJlJ3MgYW55IHVzZWNhc2UgCndoZXJl IG9ubHkgb25lIGlzIHZhbGlkLiBJbiByZWFsaXR5LCBlaXRoZXIgdGhleSBib3RoIHZhbGlkLCBv ciB0aGV5IApib3RoIGludmFsaWQsIG90aGVyd2lzZSB0aGVyZSdzIGJ1ZyBpbiBlaXRoZXIgQ1BV IHVjb2RlIG9yIEJJT1MuIFRoaXMgaXMgCmp1c3QgdGhlIGRlZmluaXRpb24gaW4gU0RNLgoKPiAK Pj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPj4gKyAgICAgICAg ICAgIGJyZWFrOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgYmFzZV9wZm4gPSAoKCh1 aW50NjRfdCkocC0+c2d4LmJhc2VfcGZuX2hpZ2gpKSA8PCAyMCkgfAo+PiArICAgICAgICAgICAg KHVpbnQ2NF90KXAtPnNneC5iYXNlX3Bmbl9sb3c7Cj4+ICsgICAgICAgIG5wYWdlcyA9ICgoKHVp bnQ2NF90KShwLT5zZ3gubnBhZ2VzX2hpZ2gpKSA8PCAyMCkgfAo+PiArICAgICAgICAgICAgKHVp bnQ2NF90KXAtPnNneC5ucGFnZXNfbG93Owo+PiArCj4+ICsgICAgICAgIGlmICggIWh2bV9lcGNf cG9wdWxhdGVkKGQpICkKPj4gKyAgICAgICAgICAgIHJldCA9IGh2bV9wb3B1bGF0ZV9lcGMoZCwg YmFzZV9wZm4sIG5wYWdlcyk7Cj4+ICsgICAgICAgIGVsc2UKPj4gKyAgICAgICAgICAgIGlmICgg YmFzZV9wZm4gIT0gdG9fc2d4KGQpLT5lcGNfYmFzZV9wZm4gfHwKPj4gKyAgICAgICAgICAgICAg ICAgICAgbnBhZ2VzICE9IHRvX3NneChkKS0+ZXBjX25wYWdlcyApCj4+ICsgICAgICAgICAgICAg ICAgcmV0ID0gLUVJTlZBTDsKPj4gKwo+PiArICAgICAgICBicmVhazsKPj4gKyAgICB9Cj4+ICAg ICAgIGNhc2UgMHg4MDAwMDAwMToKPj4gICAgICAgICAgIGlmICggaXNfcHZfZG9tYWluKGQpICYm ICgobGV2ZWxsaW5nX2NhcHMgJiBMQ0FQX2UxY2QpID09IAo+PiBMQ0FQX2UxY2QpICkKPj4gICAg ICAgICAgIHsKPj4gQEAgLTI5OSw3ICszNDQsNyBAQCBzdGF0aWMgaW50IHVwZGF0ZV9kb21haW5f Y3B1aWRfaW5mbyhzdHJ1Y3QgZG9tYWluICpkLAo+PiAgICAgICAgICAgYnJlYWs7Cj4+ICAgICAg IH0KPj4gLSAgICByZXR1cm4gMDsKPj4gKyAgICByZXR1cm4gcmV0Owo+PiAgIH0KPj4gICB2b2lk IGFyY2hfZ2V0X2RvbWFpbl9pbmZvKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsCj4+IGRpZmYgLS1n aXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2Nw dWlkLmgKPj4gaW5kZXggYWMyNTkwOGVjYS4uMzI2ZjI2NzI2MyAxMDA2NDQKPj4gLS0tIGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9jcHVpZC5oCj4+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1 aWQuaAo+PiBAQCAtNjEsMTAgKzYxLDExIEBAIGV4dGVybiBzdHJ1Y3QgY3B1aWRtYXNrcyBjcHVp ZG1hc2tfZGVmYXVsdHM7Cj4+ICAgLyogV2hldGhlciBvciBub3QgY3B1aWQgZmF1bHRpbmcgaXMg YXZhaWxhYmxlIGZvciB0aGUgY3VycmVudCAKPj4gZG9tYWluLiAqLwo+PiAgIERFQ0xBUkVfUEVS X0NQVShib29sLCBjcHVpZF9mYXVsdGluZ19lbmFibGVkKTsKPj4gLSNkZWZpbmUgQ1BVSURfR1VF U1RfTlJfQkFTSUMgICAgICAoMHhkdSArIDEpCj4+ICsjZGVmaW5lIENQVUlEX0dVRVNUX05SX0JB U0lDICAgICAgKDB4MTJ1ICsgMSkKPj4gICAjZGVmaW5lIENQVUlEX0dVRVNUX05SX0ZFQVQgICAg ICAgKDB1ICsgMSkKPj4gICAjZGVmaW5lIENQVUlEX0dVRVNUX05SX0NBQ0hFICAgICAgKDV1ICsg MSkKPj4gICAjZGVmaW5lIENQVUlEX0dVRVNUX05SX1hTVEFURSAgICAgKDYydSArIDEpCj4+ICsj ZGVmaW5lIENQVUlEX0dVRVNUX05SX1NHWCAgICAgICAgKDB4MnUgKyAxKQo+PiAgICNkZWZpbmUg Q1BVSURfR1VFU1RfTlJfRVhURF9JTlRFTCAoMHg4dSArIDEpCj4+ICAgI2RlZmluZSBDUFVJRF9H VUVTVF9OUl9FWFREX0FNRCAgICgweDFjdSArIDEpCj4+ICAgI2RlZmluZSBDUFVJRF9HVUVTVF9O Ul9FWFREICAgICAgIE1BWChDUFVJRF9HVUVTVF9OUl9FWFREX0lOVEVMLCBcCj4+IEBAIC0xNjks NiArMTcwLDI5IEBAIHN0cnVjdCBjcHVpZF9wb2xpY3kKPj4gICAgICAgICAgIH0gY29tcFtDUFVJ RF9HVUVTVF9OUl9YU1RBVEVdOwo+PiAgICAgICB9IHhzdGF0ZTsKPj4gKyAgICB1bmlvbiB7Cj4+ ICsgICAgICAgIHN0cnVjdCBjcHVpZF9sZWFmIHJhd1tDUFVJRF9HVUVTVF9OUl9TR1hdOwo+PiAr Cj4+ICsgICAgICAgIHN0cnVjdCB7Cj4+ICsgICAgICAgICAgICAvKiBTdWJsZWFmIDAuICovCj4+ ICsgICAgICAgICAgICB1aW50MzJfdCBzZ3gxOjEsIHNneDI6MSwgOjMwOwo+IAo+IFBsZWFzZSB1 c2UgYm9vbCBiaXRmaWVsZHMgZm9yIHRoZXNlLgo+IAo+IFNvbWV0aGluZyBsaWtlOgo+IAo+IGJv b2wgc2d4MToxIHNneDI6MjsKPiB1aW50MzJfdCA6MzA7Cj4gCj4gc2hvdWxkIGJlIGZpbmUuCj4g CgpPSy4gV2lsbCBkby4gVGhhbmtzLgoKPj4gKyAgICAgICAgICAgIHVpbnQzMl90IG1pc2NzZWxl Y3QsIC8qIGMgKi8gOjMyOwo+PiArICAgICAgICAgICAgdWludDMyX3QgbWF4ZW5jbGF2ZXNpemVf bjY0OjgsIG1heGVuY2xhdmVzaXplXzY0OjgsIDoxNjsKPiAKPiB1aW50OF90IGZvciB0aGVzZSBw bGVhc2UsIHJhdGhlciB0aGFuIGFuIDggYml0IGJpdGZpZWxkLgo+IAo+IENhbiB3ZSB1c2UgY2xl YXJlciBuYW1lcywgc3VjaCBhcyBtYXhzaXplX2xlZ2FjeSBhbmQgbWF4c2l6ZV9sb25nPyBUaGV5 IAo+IHdpbGwgYmUgYWNjZXNzZWQgdmlhIHAtPnNneC4gYW55d2F5LCBzbyB0aGUgImVuY2xhdmUi IGJpdCBvZiBjb250ZXh0IGlzIAo+IGFscmVhZHkgcHJlc2VudC4KClN1cmUuIEknbGwgY2hhbmdl IHRvIHRoZSBuYW1lIHlvdSBzdWdnZXN0ZWQuCgo+IAo+PiArCj4+ICsgICAgICAgICAgICAvKiBT dWJsZWFmIDEuICovCj4+ICsgICAgICAgICAgICB1aW50MzJfdCBpbml0OjEsIGRlYnVnOjEsIG1v ZGU2NDoxLCAvKnJlc2VydmUqLzoxLCAKPj4gcHJvdmlzaW9ua2V5OjEsCj4+ICsgICAgICAgICAg ICAgICAgICAgICBlaW5pdHRva2Vua2V5OjEsIDoyNjsKPiAKPiBib29scyBhcyB3ZWxsIHBsZWFz ZSBoZXJlLgoKV2lsbCBkby4KCj4gCj4+ICsgICAgICAgICAgICB1aW50MzJfdCAvKiByZXNlcnZl ICovOjMyOwo+PiArICAgICAgICAgICAgdWludDMyX3QgeGZybV9sb3csIHhmcm1faGlnaDsKPiAK PiB1aW50NjRfdCB4ZnJtID8KPiAKPiBUaGUgWFNBVkUgd29yZHMgYXJlIGFwYXJ0IGJlY2F1c2Ug dGhleSBhcmUgbm90IGFkamFjZW50IGluIHRoZSAKPiBhcmNoaXRlY3R1cmFsIGxheW91dCwgYnV0 IHRoZXNlIGFyZS4KCkkgdGhpbmsgdGhlIHJlYXNvbiBJIGNob3NlIHhmcm1fbG93IGFuZCB4ZnJt X2hpZ2ggaXMgaW4gcmVjYWxjdWxhdGVfc2d4LCAKSSBuZWVkIHRvIHJlZmVyZW5jZSB0aGVtOgoK CWlmICggcC0+YmFzaWMueHNhdmUgKQoJewogICAgICAgICAgICAgcC0+c2d4Lnhmcm1fbG93IHw9 IHAtPnhzdGF0ZS54Y3IwX2xvdzsKICAgICAgICAgICAgIHAtPnNneC54ZnJtX2hpZ2ggfD0gcC0+ eHN0YXRlLnhjcjBfaGlnaDsKICAgICAgICAgfQoKQnV0IEkgaGF2ZSBubyBwcm9ibGVtIGNoYW5n ZSB0byB4ZnJtLgoKPiAKPj4gKwo+PiArICAgICAgICAgICAgLyogU3VibGVhZiAyLiAqLwo+PiAr ICAgICAgICAgICAgdWludDMyX3QgYmFzZV92YWxpZDoxLCA6MTEsIGJhc2VfcGZuX2xvdzoyMDsK Pj4gKyAgICAgICAgICAgIHVpbnQzMl90IGJhc2VfcGZuX2hpZ2g6MjAsIDoxMjsKPj4gKyAgICAg ICAgICAgIHVpbnQzMl90IHNpemVfdmFsaWQ6MSwgOjExLCBucGFnZXNfbG93OjIwOwo+PiArICAg ICAgICAgICAgdWludDMyX3QgbnBhZ2VzX2hpZ2g6MjAsIDoxMjsKPj4gKyAgICAgICAgfTsKPiAK PiBBcmUgdGhlIHtiYXNlLHNpemV9X3ZhbGlkIGZpZWxkcyBjb3JyZWN0PyAgVGhlIG1hbnVhbCBz YXlzIHRoZSBhcmUgNC1iaXQgCj4gZmllbGRzIHJhdGhlciB0aGFuIHNpbmdsZSBiaXQgZmllbGRz LgoKVGhleSBhcmUgNCBiaXRzIGluIFNETSBidXQgYWN0dWFsbHkgY3VycmVudGx5IG9ubHkgYml0 IDEgaXMgdmFsaWQgKG90aGVyIAp2YWx1ZXMgYXJlIHJlc2VydmVkKS4gSSB0aGluayBmb3Igbm93 IGJvb2wgYmFzZV92YWxpZCBzaG91bGQgYmUgZW5vdWdoLiAKV2UgY2FuIGV4dGVuZCB3aGVuIG5l dyB2YWx1ZXMgY29tZSBvdXQuIFdoYXQncyB5b3VyIHN1Z2dlc3Rpb24/Cgo+IAo+IEkgd291bGQg YWxzbyBkcm9wIHRoZSBfcGZuIGZyb20gdGhlIGJhc2UgbmFtZXMuICBUaGUgZmllbGRzIHN0aWxs IG5lZWQgCj4gc2hpZnRpbmcgdG8gZ2V0IGEgc2Vuc2libGUgdmFsdWUuCgpPSy4gV2lsbCBkby4K Cj4gCj4gfkFuZHJldwo+IAo+PiArICAgIH0gc2d4Owo+PiArCj4+ICAgICAgIC8qIEV4dGVuZGVk IGxlYXZlczogMHg4MDAwMDB4eCAqLwo+PiAgICAgICB1bmlvbiB7Cj4+ICAgICAgICAgICBzdHJ1 Y3QgY3B1aWRfbGVhZiByYXdbQ1BVSURfR1VFU1RfTlJfRVhURF07Cj4gCj4gCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Cj4gWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKPiBodHRwczovL2xpc3RzLnhlbi5vcmcv eGVuLWRldmVsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK