From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH 1/2] nouveau: make nouveau importing global buffers completely thread-safe, with tests Date: Wed, 25 Feb 2015 22:59:50 +0100 Message-ID: <54EE45D6.9030604@canonical.com> References: <1424768511-25156-1-git-send-email-maarten.lankhorst@ubuntu.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Emil Velikov , Maarten Lankhorst Cc: ML nouveau List-Id: nouveau.vger.kernel.org CgpPbiAyNS0wMi0xNSAxNToxNCwgRW1pbCBWZWxpa292IHdyb3RlOgo+IE9uIDI0IEZlYnJ1YXJ5 IDIwMTUgYXQgMDk6MDEsIE1hYXJ0ZW4gTGFua2hvcnN0Cj4gPG1hYXJ0ZW4ubGFua2hvcnN0QHVi dW50dS5jb20+IHdyb3RlOgo+PiBXaGlsZSBJJ3ZlIGNsb3NlZCBvZmYgbW9zdCByYWNlcyBpbiBh IHByZXZpb3VzIHBhdGNoLCBhIHNtYWxsIHJhY2Ugc3RpbGwgZXhpc3RlZAo+PiB3aGVyZSBpbXBv cnRpbmcgdGhlbiB1bnJlZmZpbmcgY291bmQgY2F1c2UgYW4gaW52YWxpZCBiby4gQWRkIGEgdGVz dCBmb3IgdGhpcyBjYXNlLgo+Pgo+PiBSYWNpbmcgc2VxdWVuY2UgZml4ZWQ6Cj4+Cj4+IC0gdGhy ZWFkIDEgcmVsZWFzZXMgYm8sIHJlZmNvdW50IGRyb3BzIHRvIHplcm8sIGJsb2NrcyBvbiBhY3F1 aXJpbmcgbnZkZXYtPmxvY2suCj4+IC0gdGhyZWFkIDIgaW5jcmVhc2VzIHJlZmNvdW50IHRvIDEu Cj4+IC0gdGhyZWFkIDIgZGVjcmVhc2VzIHJlZmNvdW50IHRvIHplcm8sIGJsb2NrcyBvbiBhY3F1 aXJpbmcgbnZkZXYtPmxvY2suCj4+Cj4+IEF0IHRoaXMgcG9pbnQgdGhlIDIgdGhyZWFkcyB3aWxs IGNsZWFuIHVwIHRoZSBzYW1lIGJvLgo+Pgo+PiBIb3cgaXMgdGhpcyBmaXhlZD8gV2hlbiB0aHJl YWQgMiBpbmNyZWFzZXMgcmVmY291bnQgdG8gMSBpdCByZW1vdmVzCj4+IHRoZSBibyBmcm9tIHRo ZSBsaXN0LCBhbmQgY3JlYXRlcyBhIG5ldyBiby4gVGhlIG9yaWdpbmFsIHRocmVhZAo+PiB3aWxs IG5vdGljZSByZWZjb3VudCB3YXMgaW5jcmVhc2VkIHRvIDEgYW5kIHNraXAgZGVsZXRpb24gZnJv bSBsaXN0Cj4+IGFuZCBjbG9zaW5nIHRoZSBoYW5kbGUuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IE1h YXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEB1YnVudHUuY29tPgo+PiAtLS0KPj4g IGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgfCAgIDEgKwo+PiAgbm91dmVhdS9ub3V2ZWF1LmMg ICAgICAgICB8ICA2OSArKysrKysrKysrKy0tLS0tLS0tLS0tLQo+PiAgdGVzdHMvTWFrZWZpbGUu YW0gICAgICAgICB8ICAgNCArKwo+PiAgdGVzdHMvbm91dmVhdS8uZ2l0aWdub3JlICB8ICAgMSAr Cj4+ICB0ZXN0cy9ub3V2ZWF1L01ha2VmaWxlLmFtIHwgIDE1ICsrKysrCj4+ICB0ZXN0cy9ub3V2 ZWF1L3RocmVhZGVkLmMgIHwgMTQwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPj4gIHhmODZhdG9taWMuaCAgICAgICAgICAgICAgfCAgIDYgKy0KPj4gIDcg ZmlsZXMgY2hhbmdlZCwgMTk4IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQo+PiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IHRlc3RzL25vdXZlYXUvLmdpdGlnbm9yZQo+PiAgY3JlYXRlIG1vZGUg MTAwNjQ0IHRlc3RzL25vdXZlYXUvTWFrZWZpbGUuYW0KPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 ZXN0cy9ub3V2ZWF1L3RocmVhZGVkLmMKPj4KPj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBi L2NvbmZpZ3VyZS5hYwo+PiBpbmRleCA4YWZlZTgzLi42ZGM1MDQ0IDEwMDY0NAo+PiAtLS0gYS9j b25maWd1cmUuYWMKPj4gKysrIGIvY29uZmlndXJlLmFjCj4+IEBAIC00NDEsNiArNDQxLDcgQEAg QUNfQ09ORklHX0ZJTEVTKFsKPj4gICAgICAgICB0ZXN0cy92Ymx0ZXN0L01ha2VmaWxlCj4+ICAg ICAgICAgdGVzdHMvZXh5bm9zL01ha2VmaWxlCj4+ICAgICAgICAgdGVzdHMvdGVncmEvTWFrZWZp bGUKPj4gKyAgICAgICB0ZXN0cy9ub3V2ZWF1L01ha2VmaWxlCj4+ICAgICAgICAgbWFuL01ha2Vm aWxlCj4+ICAgICAgICAgbGliZHJtLnBjXSkKPj4gIEFDX09VVFBVVAo+PiBkaWZmIC0tZ2l0IGEv bm91dmVhdS9ub3V2ZWF1LmMgYi9ub3V2ZWF1L25vdXZlYXUuYwo+PiBpbmRleCBjNmMxNTNhLi4x YzcyM2I5IDEwMDY0NAo+PiAtLS0gYS9ub3V2ZWF1L25vdXZlYXUuYwo+PiArKysgYi9ub3V2ZWF1 L25vdXZlYXUuYwo+PiBAQCAtMzUxLDI5ICszNTEsMTggQEAgbm91dmVhdV9ib19kZWwoc3RydWN0 IG5vdXZlYXVfYm8gKmJvKQo+Pgo+PiAgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbnZkZXYt PmxvY2spOwo+PiAgICAgICAgIGlmIChudmJvLT5uYW1lKSB7Cj4+IC0gICAgICAgICAgICAgICBp ZiAoYXRvbWljX3JlYWQoJm52Ym8tPnJlZmNudCkpIHsKPj4gKyAgICAgICAgICAgICAgIGlmIChh dG9taWNfcmVhZCgmbnZiby0+cmVmY250KSA9PSAwKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIERSTUxJU1RERUwoJm52Ym8tPmhlYWQpOwo+PiAgICAgICAgICAgICAgICAgICAgICAgICAv Kgo+PiAtICAgICAgICAgICAgICAgICAgICAgICAgKiBibyBoYXMgYmVlbiByZXZpdmVkIGJ5IGEg cmFjZSB3aXRoCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAqIG5vdXZlYXVfYm9fcHJpbWVf aGFuZGxlX3JlZiwgb3Igbm91dmVhdV9ib19uYW1lX3JlZi4KPj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICoKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICogSW4gdGhlb3J5IHRoZXJlJ3Mg c3RpbGwgYSByYWNlIHBvc3NpYmxlIHdpdGgKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICog bm91dmVhdV9ib193cmFwLCBidXQgd2hlbiB1c2luZyB0aGlzIGZ1bmN0aW9uCj4+IC0gICAgICAg ICAgICAgICAgICAgICAgICAqIHRoZSBsaWZldGltZSBvZiB0aGUgaGFuZGxlIGlzIHByb2JhYmx5 IGFscmVhZHkKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICogaGFuZGxlZCBpbiBhbm90aGVy IHdheS4gSWYgdGhlcmUgYXJlIHJhY2VzCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAqIHlv dSdyZSBwcm9iYWJseSB1c2luZyBub3V2ZWF1X2JvX3dyYXAgd3JvbmcuCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAqIFRoaXMgYm8gaGFzIHRvIGJlIGNsb3NlZCB3aXRoIHRoZSBsb2NrIGhl bGQgYmVjYXVzZQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgKiBnZW0gaGFuZGxlcyBhcmUg bm90IHJlZmNvdW50ZWQuIElmIGEgc2hhcmVkIGJvIGlzCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAqIGNsb3NlZCBhbmQgcmUtb3BlbmVkIGluIGFub3RoZXIgdGhyZWFkIGEgcmFjZQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgKiBhZ2FpbnN0IERSTV9JT0NUTF9HRU1fT1BFTiBvciBk cm1QcmltZUZEVG9IYW5kbGUKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogbWlnaHQgY2F1 c2UgdGhlIGJvIHRvIGJlIGNsb3NlZCBhY2NpZGVudGFsbHkgd2hpbGUKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICogcmUtaW1wb3J0aW5nLgo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KPj4gLSAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm52ZGV2 LT5sb2NrKTsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwo+PiArICAgICAgICAg ICAgICAgICAgICAgICBkcm1Jb2N0bChiby0+ZGV2aWNlLT5mZCwgRFJNX0lPQ1RMX0dFTV9DTE9T RSwgJnJlcSk7Cj4+ICAgICAgICAgICAgICAgICB9Cj4+IC0gICAgICAgICAgICAgICBEUk1MSVNU REVMKCZudmJvLT5oZWFkKTsKPj4gLSAgICAgICAgICAgICAgIC8qCj4+IC0gICAgICAgICAgICAg ICAgKiBUaGlzIGJvIGhhcyB0byBiZSBjbG9zZWQgd2l0aCB0aGUgbG9jayBoZWxkIGJlY2F1c2Ug Z2VtCj4+IC0gICAgICAgICAgICAgICAgKiBoYW5kbGVzIGFyZSBub3QgcmVmY291bnRlZC4gSWYg YSBzaGFyZWQgYm8gaXMgY2xvc2VkIGFuZAo+PiAtICAgICAgICAgICAgICAgICogcmUtb3BlbmVk IGluIGFub3RoZXIgdGhyZWFkIGEgcmFjZSBhZ2FpbnN0Cj4+IC0gICAgICAgICAgICAgICAgKiBE Uk1fSU9DVExfR0VNX09QRU4gb3IgZHJtUHJpbWVGRFRvSGFuZGxlIG1pZ2h0IGNhdXNlIHRoZQo+ PiAtICAgICAgICAgICAgICAgICogYm8gdG8gYmUgY2xvc2VkIGFjY2lkZW50YWxseSB3aGlsZSBy ZS1pbXBvcnRpbmcuCj4+IC0gICAgICAgICAgICAgICAgKi8KPj4gLSAgICAgICAgICAgICAgIGRy bUlvY3RsKGJvLT5kZXZpY2UtPmZkLCBEUk1fSU9DVExfR0VNX0NMT1NFLCAmcmVxKTsKPj4gICAg ICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZudmRldi0+bG9jayk7Cj4+ICAgICAg ICAgfSBlbHNlIHsKPj4gICAgICAgICAgICAgICAgIERSTUxJU1RERUwoJm52Ym8tPmhlYWQpOwo+ PiBAQCAtNDE4LDcgKzQwNyw3IEBAIG5vdXZlYXVfYm9fbmV3KHN0cnVjdCBub3V2ZWF1X2Rldmlj ZSAqZGV2LCB1aW50MzJfdCBmbGFncywgdWludDMyX3QgYWxpZ24sCj4+Cj4+ICBzdGF0aWMgaW50 Cj4+ICBub3V2ZWF1X2JvX3dyYXBfbG9ja2VkKHN0cnVjdCBub3V2ZWF1X2RldmljZSAqZGV2LCB1 aW50MzJfdCBoYW5kbGUsCj4+IC0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5vdXZlYXVf Ym8gKipwYm8pCj4+ICsgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5vdXZlYXVfYm8gKipw Ym8sIGludCBuYW1lKQo+PiAgewo+PiAgICAgICAgIHN0cnVjdCBub3V2ZWF1X2RldmljZV9wcml2 ICpudmRldiA9IG5vdXZlYXVfZGV2aWNlKGRldik7Cj4+ICAgICAgICAgc3RydWN0IGRybV9ub3V2 ZWF1X2dlbV9pbmZvIHJlcSA9IHsgLmhhbmRsZSA9IGhhbmRsZSB9Owo+PiBAQCAtNDI3LDggKzQx NiwyNCBAQCBub3V2ZWF1X2JvX3dyYXBfbG9ja2VkKHN0cnVjdCBub3V2ZWF1X2RldmljZSAqZGV2 LCB1aW50MzJfdCBoYW5kbGUsCj4+Cj4+ICAgICAgICAgRFJNTElTVEZPUkVBQ0hFTlRSWShudmJv LCAmbnZkZXYtPmJvX2xpc3QsIGhlYWQpIHsKPj4gICAgICAgICAgICAgICAgIGlmIChudmJvLT5i YXNlLmhhbmRsZSA9PSBoYW5kbGUpIHsKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgKnBibyA9 IE5VTEw7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIG5vdXZlYXVfYm9fcmVmKCZudmJvLT5i YXNlLCBwYm8pOwo+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXRvbWljX2luY19yZXR1 cm4oJm52Ym8tPnJlZmNudCkgPT0gMSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVWggb2gsIHRoaXMg Ym8gaXMgZGVhZCBhbmQgc29tZW9uZSBlbHNlCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogd2lsbCBmcmVlIGl0LCBidXQgYmVjYXVzZSByZWZjbnQgaXMKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBub3cgbm9uLXplcm8gZm9ydHVuYXRlbHkgdGhleSB3 b24ndAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNhbGwgdGhlIGlvY3Rs IHRvIGNsb3NlIHRoZSBiby4KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFJlbW92ZSB0aGlzIGJvIGZyb20g dGhlIGxpc3Qgc28gb3RoZXIKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBj YWxscyB0byBub3V2ZWF1X2JvX3dyYXBfbG9ja2VkIHdpbGwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKiBzZWUgb3VyIHJlcGxhY2VtZW50IG52Ym8uCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFJNTElTVERFTCgmbnZiby0+aGVhZCk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFuYW1lKQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmFtZSA9IG52Ym8tPm5hbWU7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgICAg ICAgICAgICAgICAqcGJvID0gJm52Ym8tPmJhc2U7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiAwOwo+PiAgICAgICAgICAgICAgICAgfQo+PiAgICAgICAgIH0KPj4gQEAgLTQ0Myw2 ICs0NDgsNyBAQCBub3V2ZWF1X2JvX3dyYXBfbG9ja2VkKHN0cnVjdCBub3V2ZWF1X2RldmljZSAq ZGV2LCB1aW50MzJfdCBoYW5kbGUsCj4+ICAgICAgICAgICAgICAgICBhdG9taWNfc2V0KCZudmJv LT5yZWZjbnQsIDEpOwo+PiAgICAgICAgICAgICAgICAgbnZiby0+YmFzZS5kZXZpY2UgPSBkZXY7 Cj4+ICAgICAgICAgICAgICAgICBhYmkxNl9ib19pbmZvKCZudmJvLT5iYXNlLCAmcmVxKTsKPj4g KyAgICAgICAgICAgICAgIG52Ym8tPm5hbWUgPSBuYW1lOwo+PiAgICAgICAgICAgICAgICAgRFJN TElTVEFERCgmbnZiby0+aGVhZCwgJm52ZGV2LT5ib19saXN0KTsKPj4gICAgICAgICAgICAgICAg ICpwYm8gPSAmbnZiby0+YmFzZTsKPj4gICAgICAgICAgICAgICAgIHJldHVybiAwOwo+PiBAQCAt NDU4LDcgKzQ2NCw3IEBAIG5vdXZlYXVfYm9fd3JhcChzdHJ1Y3Qgbm91dmVhdV9kZXZpY2UgKmRl diwgdWludDMyX3QgaGFuZGxlLAo+PiAgICAgICAgIHN0cnVjdCBub3V2ZWF1X2RldmljZV9wcml2 ICpudmRldiA9IG5vdXZlYXVfZGV2aWNlKGRldik7Cj4+ICAgICAgICAgaW50IHJldDsKPj4gICAg ICAgICBwdGhyZWFkX211dGV4X2xvY2soJm52ZGV2LT5sb2NrKTsKPj4gLSAgICAgICByZXQgPSBu b3V2ZWF1X2JvX3dyYXBfbG9ja2VkKGRldiwgaGFuZGxlLCBwYm8pOwo+PiArICAgICAgIHJldCA9 IG5vdXZlYXVfYm9fd3JhcF9sb2NrZWQoZGV2LCBoYW5kbGUsIHBibywgMCk7Cj4+ICAgICAgICAg cHRocmVhZF9tdXRleF91bmxvY2soJm52ZGV2LT5sb2NrKTsKPj4gICAgICAgICByZXR1cm4gcmV0 Owo+PiAgfQo+PiBAQCAtNDY4LDI0ICs0NzQsMTMgQEAgbm91dmVhdV9ib19uYW1lX3JlZihzdHJ1 Y3Qgbm91dmVhdV9kZXZpY2UgKmRldiwgdWludDMyX3QgbmFtZSwKPj4gICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgbm91dmVhdV9ibyAqKnBibykKPj4gIHsKPj4gICAgICAgICBzdHJ1Y3Qgbm91 dmVhdV9kZXZpY2VfcHJpdiAqbnZkZXYgPSBub3V2ZWF1X2RldmljZShkZXYpOwo+PiAtICAgICAg IHN0cnVjdCBub3V2ZWF1X2JvX3ByaXYgKm52Ym87Cj4+ICAgICAgICAgc3RydWN0IGRybV9nZW1f b3BlbiByZXEgPSB7IC5uYW1lID0gbmFtZSB9Owo+PiAgICAgICAgIGludCByZXQ7Cj4+Cj4+ICAg ICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZudmRldi0+bG9jayk7Cj4+IC0gICAgICAgRFJNTElT VEZPUkVBQ0hFTlRSWShudmJvLCAmbnZkZXYtPmJvX2xpc3QsIGhlYWQpIHsKPj4gLSAgICAgICAg ICAgICAgIGlmIChudmJvLT5uYW1lID09IG5hbWUpIHsKPj4gLSAgICAgICAgICAgICAgICAgICAg ICAgKnBibyA9IE5VTEw7Cj4+IC0gICAgICAgICAgICAgICAgICAgICAgIG5vdXZlYXVfYm9fcmVm KCZudmJvLT5iYXNlLCBwYm8pOwo+PiAtICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211 dGV4X3VubG9jaygmbnZkZXYtPmxvY2spOwo+PiAtICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gMDsKPj4gLSAgICAgICAgICAgICAgIH0KPj4gLSAgICAgICB9Cj4+IC0KPj4gICAgICAgICBy ZXQgPSBkcm1Jb2N0bChkZXYtPmZkLCBEUk1fSU9DVExfR0VNX09QRU4sICZyZXEpOwo+PiAgICAg ICAgIGlmIChyZXQgPT0gMCkgewo+PiAtICAgICAgICAgICAgICAgcmV0ID0gbm91dmVhdV9ib193 cmFwX2xvY2tlZChkZXYsIHJlcS5oYW5kbGUsIHBibyk7Cj4+IC0gICAgICAgICAgICAgICBub3V2 ZWF1X2JvKCgqcGJvKSktPm5hbWUgPSBuYW1lOwo+PiArICAgICAgICAgICAgICAgcmV0ID0gbm91 dmVhdV9ib193cmFwX2xvY2tlZChkZXYsIHJlcS5oYW5kbGUsIHBibywgbmFtZSk7Cj4+ICAgICAg ICAgfQo+Pgo+PiAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZudmRldi0+bG9jayk7Cj4+ IEBAIC01MzcsNyArNTMyLDcgQEAgbm91dmVhdV9ib19wcmltZV9oYW5kbGVfcmVmKHN0cnVjdCBu b3V2ZWF1X2RldmljZSAqZGV2LCBpbnQgcHJpbWVfZmQsCj4+ICAgICAgICAgcHRocmVhZF9tdXRl eF9sb2NrKCZudmRldi0+bG9jayk7Cj4+ICAgICAgICAgcmV0ID0gZHJtUHJpbWVGRFRvSGFuZGxl KGRldi0+ZmQsIHByaW1lX2ZkLCAmaGFuZGxlKTsKPj4gICAgICAgICBpZiAocmV0ID09IDApIHsK Pj4gLSAgICAgICAgICAgICAgIHJldCA9IG5vdXZlYXVfYm9fd3JhcF9sb2NrZWQoZGV2LCBoYW5k bGUsIGJvKTsKPj4gKyAgICAgICAgICAgICAgIHJldCA9IG5vdXZlYXVfYm9fd3JhcF9sb2NrZWQo ZGV2LCBoYW5kbGUsIGJvLCAwKTsKPj4gICAgICAgICAgICAgICAgIGlmICghcmV0KSB7Cj4+ICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBub3V2ZWF1X2JvX3ByaXYgKm52Ym8gPSBub3V2 ZWF1X2JvKCpibyk7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbnZiby0+bmFtZSkg ewo+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQo+ PiBpbmRleCAzN2I4ZDNhLi4zOGU0MDk0IDEwMDY0NAo+PiAtLS0gYS90ZXN0cy9NYWtlZmlsZS5h bQo+PiArKysgYi90ZXN0cy9NYWtlZmlsZS5hbQo+PiBAQCAtMjgsNiArMjgsMTAgQEAgaWYgSEFW RV9URUdSQQo+PiAgU1VCRElSUyArPSB0ZWdyYQo+PiAgZW5kaWYKPj4KPj4gK2lmIEhBVkVfTk9V VkVBVQo+PiArU1VCRElSUyArPSBub3V2ZWF1Cj4+ICtlbmRpZgo+PiArCj4+ICBpZiBIQVZFX0xJ QlVERVYKPj4KPj4gIGNoZWNrX0xUTElCUkFSSUVTID0gbGliZHJtdGVzdC5sYQo+PiBkaWZmIC0t Z2l0IGEvdGVzdHMvbm91dmVhdS8uZ2l0aWdub3JlIGIvdGVzdHMvbm91dmVhdS8uZ2l0aWdub3Jl Cj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjgzN2JmYjkKPj4gLS0t IC9kZXYvbnVsbAo+PiArKysgYi90ZXN0cy9ub3V2ZWF1Ly5naXRpZ25vcmUKPj4gQEAgLTAsMCAr MSBAQAo+PiArdGhyZWFkZWQKPj4gZGlmZiAtLWdpdCBhL3Rlc3RzL25vdXZlYXUvTWFrZWZpbGUu YW0gYi90ZXN0cy9ub3V2ZWF1L01ha2VmaWxlLmFtCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ IGluZGV4IDAwMDAwMDAuLjhlMzM5MmUKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi90ZXN0cy9u b3V2ZWF1L01ha2VmaWxlLmFtCj4+IEBAIC0wLDAgKzEsMTUgQEAKPj4gK0FNX0NQUEZMQUdTID0g XAo+PiArICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2RybSBcCj4+ICsgICAgICAgLUkk KHRvcF9zcmNkaXIpL25vdXZlYXUgXAo+PiArICAgICAgIC1JJCh0b3Bfc3JjZGlyKQo+PiArCj4+ ICtBTV9DRkxBR1MgPSAtV2FsbCAtV2Vycm9yCj4gUGxlYXNlIHVzZSAkKFdBUk5fQ0ZMQUdTKQo+ IAo+PiArQU1fTERGTEFHUyA9IC1wdGhyZWFkCj4+ICsKPiBJIGFzc3VtZSB0aGF0IGFkZGluZyAt bHB0aHJlYWQgdG8gdGhlIExEQUREIGJlbG93IHdpbGwgYmUgYmV0dGVyLCBidXQKPiBJJ20gbm90 IDEwMCUgc3VyZS4KPiAKPj4gK0xEQUREID0gLWxkbCBcCj4+ICsgICAgICAgLi4vLi4vbm91dmVh dS9saWJkcm1fbm91dmVhdS5sYSBcCj4+ICsgICAgICAgLi4vLi4vbGliZHJtLmxhCj4+ICsKPiBN b3ZlIC1sZGwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdCBzbyB0aGF0IGl0IGRvZXNuJ3QgYml0 ZSB1cyBpbiB0aGUgZnV0dXJlLgpPayBtaWdodCBiZSB1c2VmdWwgaW5kZWVkLgoKPj4gK25vaW5z dF9QUk9HUkFNUyA9IFwKPj4gKyAgICAgICB0aHJlYWRlZAo+IElmIHlvdSB3YW50IHlvdSBjYW4g YWRkIHRoaXMgdG8gdGhlIGluc3RhbGxlZCB0ZXN0cywgYW5kL29yIG1ha2UgY2hlY2sKbWFrZSBj aGVjayBtaWdodCBmYWlsIGlmIG5vdXZlYXUgaXMgbm90IGZvdW5kIG9yIG5vIHJlbmRlciBub2Rl cyBhcmUgYXZhaWxhYmxlLCBJJ2QgaGF2ZSB0byBhZGQgYSBza2lwIHRoZW4uCgo+PiArCj4+IGRp ZmYgLS1naXQgYS90ZXN0cy9ub3V2ZWF1L3RocmVhZGVkLmMgYi90ZXN0cy9ub3V2ZWF1L3RocmVh ZGVkLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNDkwYTdmYQo+ PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3Rlc3RzL25vdXZlYXUvdGhyZWFkZWQuYwo+PiBAQCAt MCwwICsxLDE0MCBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCDCqSAyMDE1IENhbm9uaWNhbCBM dGQuIChNYWFydGVuIExhbmtob3JzdCkKPj4gKyAqCj4+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+PiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+PiArICoK Pj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCj4+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPj4gKyAqCj4+ICsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP Ugo+PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPj4gKyAqIFRI RSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUgo+PiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4+ICsgKiBBUklTSU5HIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPj4g KyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPj4gKyAqLwo+PiArCj4+ICsjaWZk ZWYgSEFWRV9DT05GSUdfSAo+PiArIyAgaW5jbHVkZSAiY29uZmlnLmgiCj4+ICsjZW5kaWYKPj4g Kwo+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+PiArI2luY2x1ZGUgPGRsZmNuLmg+Cj4+ICsj aW5jbHVkZSA8ZmNudGwuaD4KPj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+PiArI2luY2x1ZGUgPHVu aXN0ZC5oPgo+PiArI2luY2x1ZGUgPGVycm5vLmg+Cj4+ICsjaW5jbHVkZSA8cHRocmVhZC5oPgo+ PiArCj4+ICsjaW5jbHVkZSAieGY4NmRybS5oIgo+PiArI2luY2x1ZGUgIm5vdXZlYXUuaCIKPj4g Kwo+PiArc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdF9kZXZpY2VbXSA9ICIvZGV2L2RyaS9yZW5k ZXJEMTI4IjsKPj4gKwo+IFJldXNlIHRoZSBkZWZpbmVzIGluIHhmODZkcm0uaCA/CgpIbW0sIHN3 aXRjaGluZyB0byBkcm1PcGVuV2l0aFR5cGUoIm5vdXZlYXUiLCBOVUxMLCBEUk1fTk9ERV9SRU5E RVIpIG1pZ2h0IGJlIGJldHRlci4uCgo+PiArc3RhdGljIHR5cGVvZihpb2N0bCkgKm9sZF9pb2N0 bDsKPj4gK3N0YXRpYyBpbnQgZmFpbGVkOwo+PiArCj4+ICtzdGF0aWMgaW50IGltcG9ydF9mZDsK Pj4gKwo+PiAraW50IGlvY3RsKGludCBmZCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LCAuLi4pCj4+ ICt7Cj4+ICsgICAgICAgdmFfbGlzdCB2YTsKPj4gKyAgICAgICBpbnQgcmV0Owo+PiArICAgICAg IHZvaWQgKmFyZzsKPj4gKwo+PiArICAgICAgIHZhX3N0YXJ0KHZhLCByZXF1ZXN0KTsKPj4gKyAg ICAgICBhcmcgPSB2YV9hcmcodmEsIHZvaWQgKik7Cj4+ICsgICAgICAgcmV0ID0gb2xkX2lvY3Rs KGZkLCByZXF1ZXN0LCBhcmcpOwo+PiArICAgICAgIHZhX2VuZCh2YSk7Cj4+ICsKPj4gKyAgICAg ICBpZiAocmV0IDwgMCAmJiByZXF1ZXN0ID09IERSTV9JT0NUTF9HRU1fQ0xPU0UgJiYgZXJybm8g PT0gRUlOVkFMKQo+PiArICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKPj4gKwo+PiArICAgICAg IHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkICoKPj4gK29wZW5jbG9zZSh2 b2lkICpkZXYpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0IG5vdXZlYXVfZGV2aWNlICpudmRldiA9 IGRldjsKPj4gKyAgICAgICBzdHJ1Y3Qgbm91dmVhdV9ibyAqYm8gPSBOVUxMOwo+PiArICAgICAg IGludCBpOwo+PiArCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7Cj4+ ICsgICAgICAgICAgICAgICBpZiAoIW5vdXZlYXVfYm9fcHJpbWVfaGFuZGxlX3JlZihudmRldiwg aW1wb3J0X2ZkLCAmYm8pKQo+PiArICAgICAgICAgICAgICAgICAgICAgICBub3V2ZWF1X2JvX3Jl ZihOVUxMLCAmYm8pOwo+PiArICAgICAgIH0KPj4gKyAgICAgICByZXR1cm4gTlVMTDsKPj4gK30K Pj4gKwo+PiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPj4gK3sKPj4gKyAgICAg ICBkcm1WZXJzaW9uUHRyIHZlcnNpb247Cj4+ICsgICAgICAgY29uc3QgY2hhciAqZGV2aWNlOwo+ PiArICAgICAgIGludCBlcnIsIGZkLCBmZDI7Cj4+ICsgICAgICAgc3RydWN0IG5vdXZlYXVfZGV2 aWNlICpudmRldiwgKm52ZGV2MjsKPj4gKyAgICAgICBzdHJ1Y3Qgbm91dmVhdV9ibyAqYm87Cj4+ ICsKPj4gKyAgICAgICBvbGRfaW9jdGwgPSBkbHN5bShSVExEX05FWFQsICJpb2N0bCIpOwo+PiAr Cj4+ICsgICAgICAgcHRocmVhZF90IHQxLCB0MjsKPj4gKwo+PiArICAgICAgIGlmIChhcmdjIDwg MikKPj4gKyAgICAgICAgICAgICAgIGRldmljZSA9IGRlZmF1bHRfZGV2aWNlOwo+PiArICAgICAg IGVsc2UKPj4gKyAgICAgICAgICAgICAgIGRldmljZSA9IGFyZ3ZbMV07Cj4+ICsKPj4gKyAgICAg ICBmZCA9IG9wZW4oZGV2aWNlLCBPX1JEV1IpOwo+PiArICAgICAgIGZkMiA9IG9wZW4oZGV2aWNl LCBPX1JEV1IpOwo+PiArICAgICAgIGlmIChmZCA8IDAgfHwgZmQyIDwgMCkKPj4gKyAgICAgICAg ICAgICAgIHJldHVybiAxOwo+PiArCj4+ICsgICAgICAgdmVyc2lvbiA9IGRybUdldFZlcnNpb24o ZmQpOwo+PiArICAgICAgIGlmICh2ZXJzaW9uKSB7Cj4+ICsgICAgICAgICAgICAgICBwcmludGYo IlZlcnNpb246ICVkLiVkLiVkXG4iLCB2ZXJzaW9uLT52ZXJzaW9uX21ham9yLAo+PiArICAgICAg ICAgICAgICAgICAgICAgIHZlcnNpb24tPnZlcnNpb25fbWlub3IsIHZlcnNpb24tPnZlcnNpb25f cGF0Y2hsZXZlbCk7Cj4+ICsgICAgICAgICAgICAgICBwcmludGYoIiAgTmFtZTogJXNcbiIsIHZl cnNpb24tPm5hbWUpOwo+PiArICAgICAgICAgICAgICAgcHJpbnRmKCIgIERhdGU6ICVzXG4iLCB2 ZXJzaW9uLT5kYXRlKTsKPj4gKyAgICAgICAgICAgICAgIHByaW50ZigiICBEZXNjcmlwdGlvbjog JXNcbiIsIHZlcnNpb24tPmRlc2MpOwo+PiArCj4+ICsgICAgICAgICAgICAgICBkcm1GcmVlVmVy c2lvbih2ZXJzaW9uKTsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICBlcnIgPSBub3V2ZWF1 X2RldmljZV93cmFwKGZkLCAwLCAmbnZkZXYpOwo+PiArICAgICAgIGlmICghZXJyKQo+PiArICAg ICAgICAgICAgICAgZXJyID0gbm91dmVhdV9kZXZpY2Vfd3JhcChmZDIsIDAsICZudmRldjIpOwo+ PiArICAgICAgIGlmIChlcnIgPCAwKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIDE7Cj4+ICsK Pj4gKyAgICAgICBlcnIgPSBub3V2ZWF1X2JvX25ldyhudmRldjIsIE5PVVZFQVVfQk9fR0FSVCwg MCwgNDA5NiwgTlVMTCwgJmJvKTsKPj4gKyAgICAgICBpZiAoIWVycikKPj4gKyAgICAgICAgICAg ICAgIGVyciA9IG5vdXZlYXVfYm9fc2V0X3ByaW1lKGJvLCAmaW1wb3J0X2ZkKTsKPj4gKwo+PiAr ICAgICAgIGlmICghZXJyKSB7Cj4+ICsgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmdDEs IE5VTEwsIG9wZW5jbG9zZSwgbnZkZXYpOwo+PiArICAgICAgICAgICAgICAgcHRocmVhZF9jcmVh dGUoJnQyLCBOVUxMLCBvcGVuY2xvc2UsIG52ZGV2KTsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAg ICAgICBwdGhyZWFkX2pvaW4odDEsIE5VTEwpOwo+PiArICAgICAgIHB0aHJlYWRfam9pbih0Miwg TlVMTCk7Cj4+ICsKPj4gKyAgICAgICBjbG9zZShpbXBvcnRfZmQpOwo+PiArICAgICAgIG5vdXZl YXVfYm9fcmVmKE5VTEwsICZibyk7Cj4+ICsKPj4gKyAgICAgICBub3V2ZWF1X2RldmljZV9kZWwo Jm52ZGV2Mik7Cj4+ICsgICAgICAgbm91dmVhdV9kZXZpY2VfZGVsKCZudmRldik7Cj4+ICsgICAg ICAgY2xvc2UoZmQyKTsKPj4gKyAgICAgICBjbG9zZShmZCk7Cj4+ICsKPj4gKyAgICAgICBpZiAo ZmFpbGVkKQo+PiArICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJEUk1fSU9DVExfR0VN X0NMT1NFIGZhaWxlZCB3aXRoIEVJTlZBTCxcbiIKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAicmFjZSBpbiBvcGVuaW5nL2Nsb3NpbmcgYm8gaXMgbGlrZWx5LlxuIik7Cj4+ICsK Pj4gKyAgICAgICByZXR1cm4gZmFpbGVkOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEveGY4NmF0b21p Yy5oIGIveGY4NmF0b21pYy5oCj4+IGluZGV4IDhjNGI2OTYuLjY2YThkOWEgMTAwNjQ0Cj4+IC0t LSBhL3hmODZhdG9taWMuaAo+PiArKysgYi94Zjg2YXRvbWljLmgKPj4gQEAgLTQ5LDcgKzQ5LDgg QEAgdHlwZWRlZiBzdHJ1Y3Qgewo+PiAgIyBkZWZpbmUgYXRvbWljX3JlYWQoeCkgKCh4KS0+YXRv bWljKQo+PiAgIyBkZWZpbmUgYXRvbWljX3NldCh4LCB2YWwpICgoeCktPmF0b21pYyA9ICh2YWwp KQo+PiAgIyBkZWZpbmUgYXRvbWljX2luYyh4KSAoKHZvaWQpIF9fc3luY19mZXRjaF9hbmRfYWRk ICgmKHgpLT5hdG9taWMsIDEpKQo+PiAtIyBkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh4KSAo X19zeW5jX2ZldGNoX2FuZF9hZGQgKCYoeCktPmF0b21pYywgLTEpID09IDEpCj4+ICsjIGRlZmlu ZSBhdG9taWNfaW5jX3JldHVybih4KSAoX19zeW5jX2FkZF9hbmRfZmV0Y2ggKCYoeCktPmF0b21p YywgMSkpCj4+ICsjIGRlZmluZSBhdG9taWNfZGVjX2FuZF90ZXN0KHgpIChfX3N5bmNfYWRkX2Fu ZF9mZXRjaCAoJih4KS0+YXRvbWljLCAtMSkgPT0gMCkKPiBUaGUgYXRvbWljX2RlY19hbmRfdGVz dCBjaGFuZ2Ugc2VlbXMgbGlrZSB1bnJlbGF0ZWQgYnVnZml4LiBTcGxpdCBpdAo+IG91dCBwZXJo YXBzID8KTm90IGEgYnVnIGZpeCwganVzdCBzd2FwcGluZyB0aGUgb3JkZXIuLgotIGF0b21pY19m ZXRjaF9hbmRfYWRkKC0xKSA9PSAxCisgYXRvbWljX2FkZF9hbmRfZmV0Y2goLTEpID09IDAKCj4g SW50cm9kdWN0aW9uIG9mIGF0b21pY19pbmNfcmV0dXJuIGNvdWxkL3Nob3VsZCBiZSBhIHNlcGFy YXRlIGNvbW1pdCBhcyB3ZWxsLgoKCgo+PiAgIyBkZWZpbmUgYXRvbWljX2FkZCh4LCB2KSAoKHZv aWQpIF9fc3luY19hZGRfYW5kX2ZldGNoKCYoeCktPmF0b21pYywgKHYpKSkKPj4gICMgZGVmaW5l IGF0b21pY19kZWMoeCwgdikgKCh2b2lkKSBfX3N5bmNfc3ViX2FuZF9mZXRjaCgmKHgpLT5hdG9t aWMsICh2KSkpCj4+ICAjIGRlZmluZSBhdG9taWNfY21weGNoZyh4LCBvbGR2LCBuZXd2KSBfX3N5 bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAgKCYoeCktPmF0b21pYywgb2xkdiwgbmV3dikKPj4gQEAg LTY4LDYgKzY5LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgewo+PiAgIyBkZWZpbmUgYXRvbWljX3JlYWQo eCkgQU9fbG9hZF9mdWxsKCYoeCktPmF0b21pYykKPj4gICMgZGVmaW5lIGF0b21pY19zZXQoeCwg dmFsKSBBT19zdG9yZV9mdWxsKCYoeCktPmF0b21pYywgKHZhbCkpCj4+ICAjIGRlZmluZSBhdG9t aWNfaW5jKHgpICgodm9pZCkgQU9fZmV0Y2hfYW5kX2FkZDFfZnVsbCgmKHgpLT5hdG9taWMpKQo+ PiArIyBkZWZpbmUgYXRvbWljX2luY19yZXR1cm4oeCkgKEFPX2ZldGNoX2FuZF9hZGQxX2Z1bGwo Jih4KS0+YXRvbWljKSArIDEpCj4+ICAjIGRlZmluZSBhdG9taWNfYWRkKHgsIHYpICgodm9pZCkg QU9fZmV0Y2hfYW5kX2FkZF9mdWxsKCYoeCktPmF0b21pYywgKHYpKSkKPj4gICMgZGVmaW5lIGF0 b21pY19kZWMoeCwgdikgKCh2b2lkKSBBT19mZXRjaF9hbmRfYWRkX2Z1bGwoJih4KS0+YXRvbWlj LCAtKHYpKSkKPj4gICMgZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QoeCkgKEFPX2ZldGNoX2Fu ZF9zdWIxX2Z1bGwoJih4KS0+YXRvbWljKSA9PSAxKQo+PiBAQCAtOTEsNiArOTMsNyBAQCB0eXBl ZGVmIHN0cnVjdCB7IExJQkRSTV9BVE9NSUNfVFlQRSBhdG9taWM7IH0gYXRvbWljX3Q7Cj4+ICAj IGRlZmluZSBhdG9taWNfcmVhZCh4KSAoaW50KSAoKHgpLT5hdG9taWMpCj4+ICAjIGRlZmluZSBh dG9taWNfc2V0KHgsIHZhbCkgKCh4KS0+YXRvbWljID0gKExJQkRSTV9BVE9NSUNfVFlQRSkodmFs KSkKPj4gICMgZGVmaW5lIGF0b21pY19pbmMoeCkgKGF0b21pY19pbmNfdWludCAoJih4KS0+YXRv bWljKSkKPj4gKyMgZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuIChhdG9taWNfaW5jX3VpbnRfbnYo Jih4KS0+YXRvbWljKSkKPj4gICMgZGVmaW5lIGF0b21pY19kZWNfYW5kX3Rlc3QoeCkgKGF0b21p Y19kZWNfdWludF9udigmKHgpLT5hdG9taWMpID09IDApCj4+ICAjIGRlZmluZSBhdG9taWNfYWRk KHgsIHYpIChhdG9taWNfYWRkX2ludCgmKHgpLT5hdG9taWMsICh2KSkpCj4+ICAjIGRlZmluZSBh dG9taWNfZGVjKHgsIHYpIChhdG9taWNfYWRkX2ludCgmKHgpLT5hdG9taWMsIC0odikpKQo+PiBA QCAtMTEyLDMgKzExNSw0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0 b21pY190ICp2LCBpbnQgYWRkLCBpbnQgdW5sZXNzKQo+PiAgfQo+Pgo+PiAgI2VuZGlmCj4+ICsK PiBFeHRyYSB3aGl0ZS1zcGFjZS4KPiAKPiBJTUhPIHNlbmRpbmcgdGhlIHNlcmllcyBmb3IgZHJp LWRldmVsIG1pZ2h0IGJlIG5pY2UsIGZvciBhdCBsZWFzdCB0aGUKPiB4Zjg2YXRvbWljLmggY2hh bmdlcy4KUHJvYmFibHksIG5vdCBzdXJlIGFueW9uZSB3aWxsIHJldmlldyBpdCB0aG91Z2gsIHNv IEkgdGhpbmsganVzdCBhZGRpbmcgaW4gYSBzZXBhcmF0ZSBjb21taXQgaXMgZmluZS4KCj4gUC5T LiBCbGVzcyB5b3UgZHVkZSBmb3IgZ29pbmcgdGhyb3VnaCB0aGUgbG92ZWx5IGV4cGVyaWVuY2Ug dG8gZml4IHRoaXMuCk5wLiBXaGVuIEkgZmluZCBzb21lIHRpbWUgSSdsbCB0cnkgbm91dmVhdSBp biBtZXNhIG5leHQuIDopCgp+TWFhcnRlbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v bm91dmVhdQo=