From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id BA0C6480A0 for ; Thu, 9 Nov 2023 13:06:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 34E0268CAA1; Thu, 9 Nov 2023 15:06:48 +0200 (EET) Received: from out203-205-221-153.mail.qq.com (out203-205-221-153.mail.qq.com [203.205.221.153]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6F8B468BE6C for ; Thu, 9 Nov 2023 15:06:38 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1699535194; bh=Y/bb26vNJnIAVgybdJgmlCDHOrvVjwGXaJPg1VbuvYc=; h=From:Subject:Date:References:To:In-Reply-To; b=VVur+/FH2uXUZc/BhLP62yRUImWCFoZDruWCJmF/yh6Mox/ks+9agH8GZuXIgJzEp HTOK9x0ihACXBl59FesE0hpi4ab24OgLYElRfZTjEz3EpPnVprSm3+URvYNJ95ggar YnN21wLCYsG8OwvUbpJSFsFCb2nZAd4U354teY0Q= Received: from smtpclient.apple ([113.108.77.54]) by newxmesmtplogicsvrszc2-0.qq.com (NewEsmtp) with SMTP id 1A1354AB; Thu, 09 Nov 2023 21:06:33 +0800 X-QQ-mid: xmsmtpt1699535193tkvwpizv4 Message-ID: X-QQ-XMAILINFO: OLnGMPzD2sDV4RrMrRFOpKgDtm3USaOyN8/wwLAIs+20SAJ7Fkogd7rPL3KOm4 QlMtUxlEXezUyl3nNv/H5Y8ISR6mESvhzB0Xdjzl/0QafXqLqSdf/Kl9qg/d1ugo9BFCnlbEZZU1 LP/zx/ggEW42Eb9UIX7j8vqRCNM24tlXPlIHFUvby8MssIxPewGvuFprCPmY02G4fFgZrv9nIBBh mauCljD2bu9pY9eZ+Pv1+/2I/6Voe3w7s7KZZgb4O6zT3k35R1fxn65XH2JnX5VpDKaOILbgrnTl nRoRMVoy7Z8V9Y8BdNhDtHiyr2dZ4mxOrCVNL8qGeN9W6WA6kl9kI4aerfXrJ5xseW4dnAsUuDRa ZSb+Ou2QK2h86OAFMxpPYADEOY2+X824E7Ux1CUqGtJF8I859MAGm4RAR3Ohg8y5hKf/3zXu+/C+ ymCk6TCkQw9yyfmJOlcD9i5b1M6g9oAmZxo57Vq3lKf59WCo4+rXVu415+fK7k2YnDPpgKFa6tmC ZHmo45iQGfjNrq5UxWRRGl5w3ugzi7MU7WH/khdWJ5nk3sP9+4db6JVMCRwkA71supoKbh5sap5S im1ybGzSdq1YDC4ix+tyFXb31qtqKS/ap165Lxlt0hEQFmhZeSJUJrFCp/PbJHYFOQrD1pxWVTwV ++4+o/CvFv3Ng/g34H059ofU5vvhLo1gDEZhCORBMUifEezNq+fnWJj7hn4hQ0jU790vbidg7X+l RCaadVADWA+Zkn3y9iJizZ/0tr4DJrVKqNSbpAQJSaQJg0QGlB1LdRNwu2PkAB8uv6Wgwr9xKPky M22zTsZ3HvRChAOl7V5hG2o5ecSBPxRidjZrqs16sRPo4x0/eqYVa62d+lTthMx1OJNdKmmhpPhU GAjQ8kuSFYcwpC/s4ItL07ORGaiMi8pfYfuwBT5yQ95F0rnXfUOwuW9rbLyIpjc0aMYIOtRcN5fU 8xr/mUPZbHSh5JaTEnKAJMCbtIVI35wE+MwX5S7f49Oa3iwjBnCrOV6iomr9CL X-QQ-XMRINFO: NS+P29fieYNw95Bth2bWPxk= From: Zhao Zhili Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Date: Thu, 9 Nov 2023 21:06:23 +0800 References: To: FFmpeg development discussions and patches In-Reply-To: X-OQ-MSGID: X-Mailer: Apple Mail (2.3774.200.91.1.1) Subject: Re: [FFmpeg-devel] [PATCH v6] fftools/ffplay: add hwaccel decoding support X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: UGluZy4gdjYgZGlkbuKAmXQgY2hhbmdlZCBtdWNoIGNvbXBhcmUgdG8gdjUuCgo+IE9uIE5vdiA4 LCAyMDIzLCBhdCAwMDo0NSwgWmhhbyBaaGlsaSA8cXVpbmtibGFja0Bmb3htYWlsLmNvbT4gd3Jv dGU6Cj4gCj4gRnJvbTogWmhhbyBaaGlsaSA8emhpbGl6aGFvQHRlbmNlbnQuY29tPgo+IAo+IEFk ZCB2dWxrYW4gcmVuZGVyZXIgdmlhIGxpYnBsYWNlYm8uCj4gCj4gU2ltcGxlIHVzYWdlOgo+ICQg ZmZwbGF5IC1od2FjY2VsIHZ1bGthbiBmb28ubXA0Cj4gCj4gVXNlIGN1ZGEgdG8gdnVsa2FuIG1h cDoKPiAkIGZmcGxheSAtaHdhY2NlbCBjdWRhIGZvby5tcDQKPiAKPiBDcmVhdGUgdnVsa2FuIGlu c3RhbmNlIGJ5IGxpYnBsYWNlYm8sIGFuZCBlbmFibGUgZGVidWc6Cj4gJCBmZnBsYXkgLWh3YWNj ZWwgdnVsa2FuIFwKPiAJLXZ1bGthbl9wYXJhbXMgY3JlYXRlX2J5X3BsYWNlYm89MTpkZWJ1Zz0x IGZvby5tcDQKPiAtLS0KPiB2NjoKPiAgICAxLiBjaGVjayBQTF9BUElfVkVSID49IDI3OAo+ICAg IDIuIGNoZWNrIGh3Y3R4LT5nZXRfcHJvY19hZGRyIGFnYWluc3QgU0RMX1Z1bGthbl9HZXRWa0dl dEluc3RhbmNlUHJvY0FkZHIoKQo+IAo+IHY1Ogo+ICAgIDEuIGFkZCB2dWxrYW5fcGFyYW1zIG9w dGlvbi4KPiAgICAyLiB2dWxrYW4gaW5zdGFuY2UgY2FuIGJlIGNyZWF0ZSBieSBod2NvbnRleHQg b3IgbGlicGxhY2Viby4KPiAKPiB2NDogYWRkIG1vcmUgb3B0aW9uYWwgZXh0ZW5zaW9ucwo+IHYz OiBzaGFyZWQgdnVsa2FuIGluc3RhbmNlIGJldHdlZW4gbGlicGxhY2VibyBhbmQgaHdjb250ZXh0 Cj4gCj4gY29uZmlndXJlICAgICAgICAgICAgICAgICB8ICAgMiArLQo+IGRvYy9mZnBsYXkudGV4 aSAgICAgICAgICAgfCAgMTIgKwo+IGZmdG9vbHMvTWFrZWZpbGUgICAgICAgICAgfCAgIDIgKwo+ IGZmdG9vbHMvZmZwbGF5LmMgICAgICAgICAgfCAgOTYgKysrKy0KPiBmZnRvb2xzL2ZmcGxheV9y ZW5kZXJlci5jIHwgODI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g ZmZ0b29scy9mZnBsYXlfcmVuZGVyZXIuaCB8ICA0MSArKwo+IDYgZmlsZXMgY2hhbmdlZCwgOTcx IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGZmdG9v bHMvZmZwbGF5X3JlbmRlcmVyLmMKPiBjcmVhdGUgbW9kZSAxMDA2NDQgZmZ0b29scy9mZnBsYXlf cmVuZGVyZXIuaAo+IAo+IGRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKPiBpbmRl eCA4YWI2NThmNzMwLi44MGJmYTg1NTdjIDEwMDc1NQo+IC0tLSBhL2NvbmZpZ3VyZQo+ICsrKyBi L2NvbmZpZ3VyZQo+IEBAIC0zOTAzLDcgKzM5MDMsNyBAQCBmZm1wZWdfc2VsZWN0PSJhZm9ybWF0 X2ZpbHRlciBhbnVsbF9maWx0ZXIgYXRyaW1fZmlsdGVyIGZvcm1hdF9maWx0ZXIKPiBmZm1wZWdf c3VnZ2VzdD0ib2xlMzIgcHNhcGkgc2hlbGwzMiIKPiBmZnBsYXlfZGVwcz0iYXZjb2RlYyBhdmZv cm1hdCBhdmZpbHRlciBzd3NjYWxlIHN3cmVzYW1wbGUgc2RsMiIKPiBmZnBsYXlfc2VsZWN0PSJj cm9wX2ZpbHRlciB0cmFuc3Bvc2VfZmlsdGVyIGhmbGlwX2ZpbHRlciB2ZmxpcF9maWx0ZXIgcm90 YXRlX2ZpbHRlciIKPiAtZmZwbGF5X3N1Z2dlc3Q9InNoZWxsMzIiCj4gK2ZmcGxheV9zdWdnZXN0 PSJzaGVsbDMyIGxpYnBsYWNlYm8gdnVsa2FuIgo+IGZmcHJvYmVfZGVwcz0iYXZjb2RlYyBhdmZv cm1hdCIKPiBmZnByb2JlX3N1Z2dlc3Q9InNoZWxsMzIiCj4gCj4gZGlmZiAtLWdpdCBhL2RvYy9m ZnBsYXkudGV4aSBiL2RvYy9mZnBsYXkudGV4aQo+IGluZGV4IDVkZDg2MGI4NDYuLjkzZjc3ZWVl Y2UgMTAwNjQ0Cj4gLS0tIGEvZG9jL2ZmcGxheS50ZXhpCj4gKysrIGIvZG9jL2ZmcGxheS50ZXhp Cj4gQEAgLTE5Niw2ICsxOTYsMTggQEAgd2lsbCBwcm9kdWNlIGEgdGhyZWFkIHBvb2wgd2l0aCB0 aGlzIG1hbnkgdGhyZWFkcyBhdmFpbGFibGUgZm9yIHBhcmFsbGVsCj4gcHJvY2Vzc2luZy4gVGhl IGRlZmF1bHQgaXMgMCB3aGljaCBtZWFucyB0aGF0IHRoZSB0aHJlYWQgY291bnQgd2lsbCBiZQo+ IGRldGVybWluZWQgYnkgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVcy4KPiAKPiArQGl0ZW0g LWVuYWJsZV92dWxrYW4KPiArVXNlIHZ1bGthbiByZW5kZXJlciByYXRoZXIgdGhhbiBTREwgYnVp bHRpbiByZW5kZXJlci4gRGVwZW5kcyBvbiBsaWJwbGFjZWJvLgo+ICsKPiArQGl0ZW0gLXZ1bGth bl9wYXJhbXMKPiArCj4gK1Z1bGthbiBjb25maWd1cmF0aW9uIHVzaW5nIGEgbGlzdCBvZiBAdmFy e2tleX09QHZhcnt2YWx1ZX0gcGFpcnMgc2VwYXJhdGVkIGJ5Cj4gKyI6Ii4KPiArCj4gK0BpdGVt IC1od2FjY2VsCj4gK1VzZSBIVyBhY2NlbGVyYXRlZCBkZWNvZGluZy4gRW5hYmxlIHRoaXMgb3B0 aW9uIHdpbGwgZW5hYmxlIHZ1bGthbiByZW5kZXJlcgo+ICthdXRvbWF0aWNhbGx5Lgo+ICsKPiBA ZW5kIHRhYmxlCj4gCj4gQHNlY3Rpb24gV2hpbGUgcGxheWluZwo+IGRpZmYgLS1naXQgYS9mZnRv b2xzL01ha2VmaWxlIGIvZmZ0b29scy9NYWtlZmlsZQo+IGluZGV4IDU2ODIwZTZiYzguLjNjNzYz ZTNkYjkgMTAwNjQ0Cj4gLS0tIGEvZmZ0b29scy9NYWtlZmlsZQo+ICsrKyBiL2ZmdG9vbHMvTWFr ZWZpbGUKPiBAQCAtMjIsNiArMjIsOCBAQCBPQkpTLWZmbXBlZyArPSAgICAgICAgICAgICAgICAg IFwKPiAgICAgZmZ0b29scy9zeW5jX3F1ZXVlLm8gICAgICAgIFwKPiAgICAgZmZ0b29scy90aHJl YWRfcXVldWUubyAgICAgIFwKPiAKPiArT0JKUy1mZnBsYXkgKz0gZmZ0b29scy9mZnBsYXlfcmVu ZGVyZXIubwo+ICsKPiBkZWZpbmUgRE9GRlRPT0wKPiBPQkpTLSQoMSkgKz0gZmZ0b29scy9jbWR1 dGlscy5vIGZmdG9vbHMvb3B0X2NvbW1vbi5vIGZmdG9vbHMvJCgxKS5vICQoT0JKUy0kKDEpLXll cykKPiBpZmRlZiBIQVZFX0dOVV9XSU5EUkVTCj4gZGlmZiAtLWdpdCBhL2ZmdG9vbHMvZmZwbGF5 LmMgYi9mZnRvb2xzL2ZmcGxheS5jCj4gaW5kZXggZDhjNjllMTBiYy4uODczZWU4Y2M3NCAxMDA2 NDQKPiAtLS0gYS9mZnRvb2xzL2ZmcGxheS5jCj4gKysrIGIvZmZ0b29scy9mZnBsYXkuYwo+IEBA IC01OCw2ICs1OCw3IEBACj4gI2luY2x1ZGUgPFNETF90aHJlYWQuaD4KPiAKPiAjaW5jbHVkZSAi Y21kdXRpbHMuaCIKPiArI2luY2x1ZGUgImZmcGxheV9yZW5kZXJlci5oIgo+ICNpbmNsdWRlICJv cHRfY29tbW9uLmgiCj4gCj4gY29uc3QgY2hhciBwcm9ncmFtX25hbWVbXSA9ICJmZnBsYXkiOwo+ IEBAIC0zNTAsNiArMzUxLDkgQEAgc3RhdGljIGNoYXIgKmFmaWx0ZXJzID0gTlVMTDsKPiBzdGF0 aWMgaW50IGF1dG9yb3RhdGUgPSAxOwo+IHN0YXRpYyBpbnQgZmluZF9zdHJlYW1faW5mbyA9IDE7 Cj4gc3RhdGljIGludCBmaWx0ZXJfbmJ0aHJlYWRzID0gMDsKPiArc3RhdGljIGludCBlbmFibGVf dnVsa2FuID0gMDsKPiArc3RhdGljIGNoYXIgKnZ1bGthbl9wYXJhbXMgPSBOVUxMOwo+ICtzdGF0 aWMgY29uc3QgY2hhciAqaHdhY2NlbCA9IE5VTEw7Cj4gCj4gLyogY3VycmVudCBjb250ZXh0ICov Cj4gc3RhdGljIGludCBpc19mdWxsX3NjcmVlbjsKPiBAQCAtMzYyLDYgKzM2Niw4IEBAIHN0YXRp YyBTRExfUmVuZGVyZXIgKnJlbmRlcmVyOwo+IHN0YXRpYyBTRExfUmVuZGVyZXJJbmZvIHJlbmRl cmVyX2luZm8gPSB7MH07Cj4gc3RhdGljIFNETF9BdWRpb0RldmljZUlEIGF1ZGlvX2RldjsKPiAK PiArc3RhdGljIFZrUmVuZGVyZXIgKnZrX3JlbmRlcmVyOwo+ICsKPiBzdGF0aWMgY29uc3Qgc3Ry dWN0IFRleHR1cmVGb3JtYXRFbnRyeSB7Cj4gICAgIGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQ7 Cj4gICAgIGludCB0ZXh0dXJlX2ZtdDsKPiBAQCAtOTU0LDYgKzk2MCwxMSBAQCBzdGF0aWMgdm9p ZCB2aWRlb19pbWFnZV9kaXNwbGF5KFZpZGVvU3RhdGUgKmlzKQo+ICAgICBTRExfUmVjdCByZWN0 Owo+IAo+ICAgICB2cCA9IGZyYW1lX3F1ZXVlX3BlZWtfbGFzdCgmaXMtPnBpY3RxKTsKPiArICAg IGlmICh2a19yZW5kZXJlcikgewo+ICsgICAgICAgIHZrX3JlbmRlcmVyX2Rpc3BsYXkodmtfcmVu ZGVyZXIsIHZwLT5mcmFtZSk7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiAgICAg aWYgKGlzLT5zdWJ0aXRsZV9zdCkgewo+ICAgICAgICAgaWYgKGZyYW1lX3F1ZXVlX25iX3JlbWFp bmluZygmaXMtPnN1YnBxKSA+IDApIHsKPiAgICAgICAgICAgICBzcCA9IGZyYW1lX3F1ZXVlX3Bl ZWsoJmlzLT5zdWJwcSk7Cj4gQEAgLTEyODksNiArMTMwMCw4IEBAIHN0YXRpYyB2b2lkIGRvX2V4 aXQoVmlkZW9TdGF0ZSAqaXMpCj4gICAgIH0KPiAgICAgaWYgKHJlbmRlcmVyKQo+ICAgICAgICAg U0RMX0Rlc3Ryb3lSZW5kZXJlcihyZW5kZXJlcik7Cj4gKyAgICBpZiAodmtfcmVuZGVyZXIpCj4g KyAgICAgICAgdmtfcmVuZGVyZXJfZGVzdHJveSh2a19yZW5kZXJlcik7Cj4gICAgIGlmICh3aW5k b3cpCj4gICAgICAgICBTRExfRGVzdHJveVdpbmRvdyh3aW5kb3cpOwo+ICAgICB1bmluaXRfb3B0 cygpOwo+IEBAIC0yNTQ2LDYgKzI1NTksMzcgQEAgc3RhdGljIGludCBhdWRpb19vcGVuKHZvaWQg Km9wYXF1ZSwgQVZDaGFubmVsTGF5b3V0ICp3YW50ZWRfY2hhbm5lbF9sYXlvdXQsIGludAo+ICAg ICByZXR1cm4gc3BlYy5zaXplOwo+IH0KPiAKPiArc3RhdGljIGludCBjcmVhdGVfaHdhY2NlbChB VkJ1ZmZlclJlZiAqKmRldmljZV9jdHgpCj4gK3sKPiArICAgIGVudW0gQVZIV0RldmljZVR5cGUg dHlwZTsKPiArICAgIGludCByZXQ7Cj4gKyAgICBBVkJ1ZmZlclJlZiAqdmtfZGV2Owo+ICsKPiAr ICAgICpkZXZpY2VfY3R4ID0gTlVMTDsKPiArCj4gKyAgICBpZiAoIWh3YWNjZWwpCj4gKyAgICAg ICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgdHlwZSA9IGF2X2h3ZGV2aWNlX2ZpbmRfdHlwZV9ieV9u YW1lKGh3YWNjZWwpOwo+ICsgICAgaWYgKHR5cGUgPT0gQVZfSFdERVZJQ0VfVFlQRV9OT05FKQo+ ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1RTVVApOwo+ICsKPiArICAgIHJldCA9IHZrX3Jl bmRlcmVyX2dldF9od19kZXYodmtfcmVuZGVyZXIsICZ2a19kZXYpOwo+ICsgICAgaWYgKHJldCA8 IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXQgPSBhdl9od2RldmljZV9j dHhfY3JlYXRlX2Rlcml2ZWQoZGV2aWNlX2N0eCwgdHlwZSwgdmtfZGV2LCAwKTsKPiArICAgIGlm ICghcmV0KQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAgIGlmIChyZXQgIT0gQVZFUlJP UihFTk9TWVMpKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKwo+ICsgICAgYXZfbG9nKE5VTEws IEFWX0xPR19XQVJOSU5HLCAiRGVyaXZlICVzIGZyb20gdnVsa2FuIG5vdCBzdXBwb3J0ZWQuXG4i LCBod2FjY2VsKTsKPiArICAgIHJldCA9IGF2X2h3ZGV2aWNlX2N0eF9jcmVhdGUoZGV2aWNlX2N0 eCwgdHlwZSwgTlVMTCwgTlVMTCwgMCk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+IC8q IG9wZW4gYSBnaXZlbiBzdHJlYW0uIFJldHVybiAwIGlmIE9LICovCj4gc3RhdGljIGludCBzdHJl YW1fY29tcG9uZW50X29wZW4oVmlkZW9TdGF0ZSAqaXMsIGludCBzdHJlYW1faW5kZXgpCj4gewo+ IEBAIC0yNjEzLDYgKzI2NTcsMTIgQEAgc3RhdGljIGludCBzdHJlYW1fY29tcG9uZW50X29wZW4o VmlkZW9TdGF0ZSAqaXMsIGludCBzdHJlYW1faW5kZXgpCj4gCj4gICAgIGF2X2RpY3Rfc2V0KCZv cHRzLCAiZmxhZ3MiLCAiK2NvcHlfb3BhcXVlIiwgQVZfRElDVF9NVUxUSUtFWSk7Cj4gCj4gKyAg ICBpZiAoYXZjdHgtPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPKSB7Cj4gKyAgICAg ICAgcmV0ID0gY3JlYXRlX2h3YWNjZWwoJmF2Y3R4LT5od19kZXZpY2VfY3R4KTsKPiArICAgICAg ICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiAg ICAgaWYgKChyZXQgPSBhdmNvZGVjX29wZW4yKGF2Y3R4LCBjb2RlYywgJm9wdHMpKSA8IDApIHsK PiAgICAgICAgIGdvdG8gZmFpbDsKPiAgICAgfQo+IEBAIC0zNDQ3LDYgKzM0OTcsOCBAQCBzdGF0 aWMgdm9pZCBldmVudF9sb29wKFZpZGVvU3RhdGUgKmN1cl9zdHJlYW0pCj4gICAgICAgICAgICAg ICAgICAgICAgICAgU0RMX0Rlc3Ryb3lUZXh0dXJlKGN1cl9zdHJlYW0tPnZpc190ZXh0dXJlKTsK PiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfc3RyZWFtLT52aXNfdGV4dHVyZSA9IE5VTEw7 Cj4gICAgICAgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgICAgICAgaWYgKHZrX3Jl bmRlcmVyKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICB2a19yZW5kZXJlcl9yZXNpemUodmtf cmVuZGVyZXIsIHNjcmVlbl93aWR0aCwgc2NyZWVuX2hlaWdodCk7Cj4gICAgICAgICAgICAgICAg IGNhc2UgU0RMX1dJTkRPV0VWRU5UX0VYUE9TRUQ6Cj4gICAgICAgICAgICAgICAgICAgICBjdXJf c3RyZWFtLT5mb3JjZV9yZWZyZXNoID0gMTsKPiAgICAgICAgICAgICB9Cj4gQEAgLTM2MTEsNiAr MzY2Myw5IEBAIHN0YXRpYyBjb25zdCBPcHRpb25EZWYgb3B0aW9uc1tdID0gewo+ICAgICB7ICJm aW5kX3N0cmVhbV9pbmZvIiwgT1BUX0JPT0wgfCBPUFRfSU5QVVQgfCBPUFRfRVhQRVJULCB7ICZm aW5kX3N0cmVhbV9pbmZvIH0sCj4gICAgICAgICAicmVhZCBhbmQgZGVjb2RlIHRoZSBzdHJlYW1z IHRvIGZpbGwgbWlzc2luZyBpbmZvcm1hdGlvbiB3aXRoIGhldXJpc3RpY3MiIH0sCj4gICAgIHsg ImZpbHRlcl90aHJlYWRzIiwgSEFTX0FSRyB8IE9QVF9JTlQgfCBPUFRfRVhQRVJULCB7ICZmaWx0 ZXJfbmJ0aHJlYWRzIH0sICJudW1iZXIgb2YgZmlsdGVyIHRocmVhZHMgcGVyIGdyYXBoIiB9LAo+ ICsgICAgeyAiZW5hYmxlX3Z1bGthbiIsIE9QVF9CT09MLCB7ICZlbmFibGVfdnVsa2FuIH0sICJl bmFibGUgdnVsa2FuIHJlbmRlcmVyIiB9LAo+ICsgICAgeyAidnVsa2FuX3BhcmFtcyIsIEhBU19B UkcgfCBPUFRfU1RSSU5HIHwgT1BUX0VYUEVSVCwgeyAmdnVsa2FuX3BhcmFtcyB9LCAidnVsa2Fu IGNvbmZpZ3VyYXRpb24gdXNpbmcgYSBsaXN0IG9mIGtleT12YWx1ZSBwYWlycyBzZXBhcmF0ZWQg YnkgJzonIiB9LAo+ICsgICAgeyAiaHdhY2NlbCIsIEhBU19BUkcgfCBPUFRfU1RSSU5HIHwgT1BU X0VYUEVSVCwgeyAmaHdhY2NlbCB9LCAidXNlIEhXIGFjY2VsZXJhdGVkIGRlY29kaW5nIiB9LAo+ ICAgICB7IE5VTEwsIH0sCj4gfTsKPiAKPiBAQCAtMzcyNSw5ICszNzgwLDQwIEBAIGludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKPiAjaWZkZWYgU0RMX0hJTlRfVklERU9fWDExX05FVF9X TV9CWVBBU1NfQ09NUE9TSVRPUgo+ICAgICAgICAgU0RMX1NldEhpbnQoU0RMX0hJTlRfVklERU9f WDExX05FVF9XTV9CWVBBU1NfQ09NUE9TSVRPUiwgIjAiKTsKPiAjZW5kaWYKPiArICAgICAgICBp ZiAoaHdhY2NlbCAmJiAhZW5hYmxlX3Z1bGthbikgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVM TCwgQVZfTE9HX0lORk8sICJFbmFibGUgdnVsa2FuIHJlbmRlcmVyIHRvIHN1cHBvcnQgaHdhY2Nl bCAlc1xuIiwgaHdhY2NlbCk7Cj4gKyAgICAgICAgICAgIGVuYWJsZV92dWxrYW4gPSAxOwo+ICsg ICAgICAgIH0KPiArICAgICAgICBpZiAoZW5hYmxlX3Z1bGthbikgewo+ICsgICAgICAgICAgICB2 a19yZW5kZXJlciA9IHZrX2dldF9yZW5kZXJlcigpOwo+ICsgICAgICAgICAgICBpZiAodmtfcmVu ZGVyZXIpIHsKPiArI2lmIFNETF9WRVJTSU9OX0FUTEVBU1QoMiwgMCwgNikKPiArICAgICAgICAg ICAgICAgIGZsYWdzIHw9IFNETF9XSU5ET1dfVlVMS0FOOwo+ICsjZW5kaWYKPiArICAgICAgICAg ICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfV0FSTklO RywgIkRvZXNuJ3Qgc3VwcG9ydCB2dWxrYW4gcmVuZGVyZXIsIGZhbGxiYWNrIHRvIFNETCByZW5k ZXJlclxuIik7Cj4gKyAgICAgICAgICAgICAgICBlbmFibGVfdnVsa2FuID0gMDsKPiArICAgICAg ICAgICAgfQo+ICsgICAgICAgIH0KPiAgICAgICAgIHdpbmRvdyA9IFNETF9DcmVhdGVXaW5kb3co cHJvZ3JhbV9uYW1lLCBTRExfV0lORE9XUE9TX1VOREVGSU5FRCwgU0RMX1dJTkRPV1BPU19VTkRF RklORUQsIGRlZmF1bHRfd2lkdGgsIGRlZmF1bHRfaGVpZ2h0LCBmbGFncyk7Cj4gICAgICAgICBT RExfU2V0SGludChTRExfSElOVF9SRU5ERVJfU0NBTEVfUVVBTElUWSwgImxpbmVhciIpOwo+IC0g ICAgICAgIGlmICh3aW5kb3cpIHsKPiArICAgICAgICBpZiAoIXdpbmRvdykgewo+ICsgICAgICAg ICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0ZBVEFMLCAiRmFpbGVkIHRvIGNyZWF0ZSB3aW5kb3c6 ICVzIiwgU0RMX0dldEVycm9yKCkpOwo+ICsgICAgICAgICAgICBkb19leGl0KE5VTEwpOwo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKHZrX3JlbmRlcmVyKSB7Cj4gKyAgICAgICAgICAg IEFWRGljdGlvbmFyeSAqZGljdCA9IE5VTEw7Cj4gKwo+ICsgICAgICAgICAgICBpZiAodnVsa2Fu X3BhcmFtcykKPiArICAgICAgICAgICAgICAgIGF2X2RpY3RfcGFyc2Vfc3RyaW5nKCZkaWN0LCB2 dWxrYW5fcGFyYW1zLCAiPSIsICI6IiwgMCk7Cj4gKyAgICAgICAgICAgIHJldCA9IHZrX3JlbmRl cmVyX2NyZWF0ZSh2a19yZW5kZXJlciwgd2luZG93LCBkaWN0KTsKPiArICAgICAgICAgICAgYXZf ZGljdF9mcmVlKCZkaWN0KTsKPiArICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAg ICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRkFUQUwsICJGYWlsZWQgdG8gY3JlYXRlIHZ1 bGthbiByZW5kZXJlciwgJXNcbiIsIGF2X2VycjJzdHIocmV0KSk7Cj4gKyAgICAgICAgICAgICAg ICBkb19leGl0KE5VTEwpOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfSBlbHNlIHsKPiAg ICAgICAgICAgICByZW5kZXJlciA9IFNETF9DcmVhdGVSZW5kZXJlcih3aW5kb3csIC0xLCBTRExf UkVOREVSRVJfQUNDRUxFUkFURUQgfCBTRExfUkVOREVSRVJfUFJFU0VOVFZTWU5DKTsKPiAgICAg ICAgICAgICBpZiAoIXJlbmRlcmVyKSB7Cj4gICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfV0FSTklORywgIkZhaWxlZCB0byBpbml0aWFsaXplIGEgaGFyZHdhcmUgYWNjZWxlcmF0 ZWQgcmVuZGVyZXI6ICVzXG4iLCBTRExfR2V0RXJyb3IoKSk7Cj4gQEAgLTM3MzcsMTAgKzM4MjMs MTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICAgICAgICAgICAgICAgICBp ZiAoIVNETF9HZXRSZW5kZXJlckluZm8ocmVuZGVyZXIsICZyZW5kZXJlcl9pbmZvKSkKPiAgICAg ICAgICAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVkVSQk9TRSwgIkluaXRpYWxpemVk ICVzIHJlbmRlcmVyLlxuIiwgcmVuZGVyZXJfaW5mby5uYW1lKTsKPiAgICAgICAgICAgICB9Cj4g LSAgICAgICAgfQo+IC0gICAgICAgIGlmICghd2luZG93IHx8ICFyZW5kZXJlciB8fCAhcmVuZGVy ZXJfaW5mby5udW1fdGV4dHVyZV9mb3JtYXRzKSB7Cj4gLSAgICAgICAgICAgIGF2X2xvZyhOVUxM LCBBVl9MT0dfRkFUQUwsICJGYWlsZWQgdG8gY3JlYXRlIHdpbmRvdyBvciByZW5kZXJlcjogJXMi LCBTRExfR2V0RXJyb3IoKSk7Cj4gLSAgICAgICAgICAgIGRvX2V4aXQoTlVMTCk7Cj4gKyAgICAg ICAgICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyX2luZm8ubnVtX3RleHR1cmVfZm9ybWF0 cykgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19GQVRBTCwgIkZhaWxl ZCB0byBjcmVhdGUgd2luZG93IG9yIHJlbmRlcmVyOiAlcyIsIFNETF9HZXRFcnJvcigpKTsKPiAr ICAgICAgICAgICAgICAgIGRvX2V4aXQoTlVMTCk7Cj4gKyAgICAgICAgICAgIH0KPiAgICAgICAg IH0KPiAgICAgfQo+IAo+IGRpZmYgLS1naXQgYS9mZnRvb2xzL2ZmcGxheV9yZW5kZXJlci5jIGIv ZmZ0b29scy9mZnBsYXlfcmVuZGVyZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMC4uYTU3ZTQ5ODBlYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9mZnRvb2xzL2Zm cGxheV9yZW5kZXJlci5jCj4gQEAgLTAsMCArMSw4MjQgQEAKPiArLyoKPiArICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCj4gKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgo+ICsgKgo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiArICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKPiArICovCj4gKwo+ ICsjZGVmaW5lIFZLX05PX1BST1RPVFlQRVMKPiArI2RlZmluZSBWS19FTkFCTEVfQkVUQV9FWFRF TlNJT05TCj4gKwo+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gKyNpbmNsdWRlICJmZnBsYXlfcmVu ZGVyZXIuaCIKPiArCj4gKyNpZiAoU0RMX1ZFUlNJT05fQVRMRUFTVCgyLCAwLCA2KSAmJiBDT05G SUdfTElCUExBQ0VCTykKPiArLyogR2V0IFBMX0FQSV9WRVIgKi8KPiArI2luY2x1ZGUgPGxpYnBs YWNlYm8vY29uZmlnLmg+Cj4gKyNkZWZpbmUgSEFWRV9WVUxLQU5fUkVOREVSRVIgKFBMX0FQSV9W RVIgPj0gMjc4KQo+ICsjZWxzZQo+ICsjZGVmaW5lIEhBVkVfVlVMS0FOX1JFTkRFUkVSIDAKPiAr I2VuZGlmCj4gKwo+ICsjaWYgSEFWRV9WVUxLQU5fUkVOREVSRVIKPiArCj4gKyNpZiBkZWZpbmVk KF9XSU4zMikgJiYgIWRlZmluZWQoVktfVVNFX1BMQVRGT1JNX1dJTjMyX0tIUikKPiArI2RlZmlu ZSBWS19VU0VfUExBVEZPUk1fV0lOMzJfS0hSCj4gKyNlbmRpZgo+ICsKPiArI2luY2x1ZGUgPGxp YnBsYWNlYm8vdnVsa2FuLmg+Cj4gKyNpbmNsdWRlIDxsaWJwbGFjZWJvL3V0aWxzL2ZyYW1lX3F1 ZXVlLmg+Cj4gKyNpbmNsdWRlIDxsaWJwbGFjZWJvL3V0aWxzL2xpYmF2Lmg+Cj4gKyNpbmNsdWRl IDxTRExfdnVsa2FuLmg+Cj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2JwcmludC5oIgo+ICsK PiArI2VuZGlmCj4gKwo+ICtzdHJ1Y3QgVmtSZW5kZXJlciB7Cj4gKyAgICBjb25zdCBBVkNsYXNz ICpjbGFzczsKPiArCj4gKyAgICBpbnQgKCpjcmVhdGUpKFZrUmVuZGVyZXIgKnJlbmRlcmVyLCBT RExfV2luZG93ICp3aW5kb3csIEFWRGljdGlvbmFyeSAqZGljdCk7Cj4gKwo+ICsgICAgaW50ICgq Z2V0X2h3X2RldikoVmtSZW5kZXJlciAqcmVuZGVyZXIsIEFWQnVmZmVyUmVmICoqZGV2KTsKPiAr Cj4gKyAgICBpbnQgKCpkaXNwbGF5KShWa1JlbmRlcmVyICpyZW5kZXJlciwgQVZGcmFtZSAqZnJh bWUpOwo+ICsKPiArICAgIGludCAoKnJlc2l6ZSkoVmtSZW5kZXJlciAqcmVuZGVyZXIsIGludCB3 aWR0aCwgaW50IGhlaWdodCk7Cj4gKwo+ICsgICAgdm9pZCAoKmRlc3Ryb3kpKFZrUmVuZGVyZXIg KnJlbmRlcmVyKTsKPiArfTsKPiArCj4gKyNpZiBIQVZFX1ZVTEtBTl9SRU5ERVJFUgo+ICsKPiAr dHlwZWRlZiBzdHJ1Y3QgUmVuZGVyZXJDb250ZXh0IHsKPiArICAgIFZrUmVuZGVyZXIgYXBpOwo+ ICsKPiArICAgIC8vIENhbiBiZSBOVUxMIHdoZW4gdnVsa2FuIGluc3RhbmNlIGlzIGNyZWF0ZWQg YnkgYXZ1dGlsCj4gKyAgICBwbF92a19pbnN0IHBsYWNlYm9faW5zdGFuY2U7Cj4gKyAgICBwbF92 dWxrYW4gcGxhY2Vib192dWxrYW47Cj4gKyAgICBwbF9zd2FwY2hhaW4gc3dhcGNoYWluOwo+ICsg ICAgVmtTdXJmYWNlS0hSIHZrX3N1cmZhY2U7Cj4gKyAgICBwbF9yZW5kZXJlciByZW5kZXJlcjsK PiArICAgIHBsX3RleCB0ZXhbNF07Cj4gKwo+ICsgICAgcGxfbG9nIHZrX2xvZzsKPiArCj4gKyAg ICBBVkJ1ZmZlclJlZiAqaHdfZGV2aWNlX3JlZjsKPiArICAgIEFWQnVmZmVyUmVmICpod19mcmFt ZV9yZWY7Cj4gKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgKnRyYW5zZmVyX2Zvcm1hdHM7Cj4gKyAg ICBBVkhXRnJhbWVzQ29uc3RyYWludHMgKmNvbnN0cmFpbnRzOwo+ICsKPiArICAgIFBGTl92a0dl dEluc3RhbmNlUHJvY0FkZHIgZ2V0X3Byb2NfYWRkcjsKPiArICAgIC8vIFRoaXMgZmllbGQgaXMg YSBjb3B5IGZyb20gcGxfdmtfaW5zdC0+aW5zdGFuY2Ugb3IgaHdfZGV2aWNlX3JlZiBpbnN0YW5j ZS4KPiArICAgIFZrSW5zdGFuY2UgaW5zdDsKPiArCj4gKyAgICBBVkZyYW1lICp2a19mcmFtZTsK PiArfSBSZW5kZXJlckNvbnRleHQ7Cj4gKwo+ICtzdGF0aWMgdm9pZCB2a19sb2dfY2Iodm9pZCAq bG9nX3ByaXYsIGVudW0gcGxfbG9nX2xldmVsIGxldmVsLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqbXNnKQo+ICt7Cj4gKyAgICBzdGF0aWMgY29uc3QgaW50IGxldmVsX21h cFtdID0gewo+ICsgICAgICAgICAgICBBVl9MT0dfUVVJRVQsCj4gKyAgICAgICAgICAgIEFWX0xP R19GQVRBTCwKPiArICAgICAgICAgICAgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAgICAgICBBVl9M T0dfV0FSTklORywKPiArICAgICAgICAgICAgQVZfTE9HX0lORk8sCj4gKyAgICAgICAgICAgIEFW X0xPR19ERUJVRywKPiArICAgICAgICAgICAgQVZfTE9HX1RSQUNFLAo+ICsgICAgfTsKPiArCj4g KyAgICBpZiAobGV2ZWwgPiAwICYmIGxldmVsIDwgRkZfQVJSQVlfRUxFTVMobGV2ZWxfbWFwKSkK PiArICAgICAgICBhdl9sb2cobG9nX3ByaXYsIGxldmVsX21hcFtsZXZlbF0sICIlc1xuIiwgbXNn KTsKPiArfQo+ICsKPiArLy8gU2hvdWxkIGtlZXAgc3luYyB3aXRoIG9wdGlvbmFsX2RldmljZV9l eHRzIGluc2lkZSBod2NvbnRleHRfdnVsa2FuLmMKPiArc3RhdGljIGNvbnN0IGNoYXIgKm9wdGlv bmFsX2RldmljZV9leHRzW10gPSB7Cj4gKyAgICAvKiBNaXNjIG9yIHJlcXVpcmVkIGJ5IG90aGVy IGV4dGVuc2lvbnMgKi8KPiArICAgIFZLX0tIUl9QT1JUQUJJTElUWV9TVUJTRVRfRVhURU5TSU9O X05BTUUsCj4gKyAgICBWS19LSFJfUFVTSF9ERVNDUklQVE9SX0VYVEVOU0lPTl9OQU1FLAo+ICsg ICAgVktfS0hSX1NBTVBMRVJfWUNCQ1JfQ09OVkVSU0lPTl9FWFRFTlNJT05fTkFNRSwKPiArICAg IFZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUl9FWFRFTlNJT05fTkFNRSwKPiArICAgIFZLX0VYVF9Q SFlTSUNBTF9ERVZJQ0VfRFJNX0VYVEVOU0lPTl9OQU1FLAo+ICsgICAgVktfRVhUX1NIQURFUl9B VE9NSUNfRkxPQVRfRVhURU5TSU9OX05BTUUsCj4gKyAgICBWS19LSFJfQ09PUEVSQVRJVkVfTUFU UklYX0VYVEVOU0lPTl9OQU1FLAo+ICsKPiArICAgIC8qIEltcG9ydHMvZXhwb3J0cyAqLwo+ICsg ICAgVktfS0hSX0VYVEVSTkFMX01FTU9SWV9GRF9FWFRFTlNJT05fTkFNRSwKPiArICAgIFZLX0VY VF9FWFRFUk5BTF9NRU1PUllfRE1BX0JVRl9FWFRFTlNJT05fTkFNRSwKPiArICAgIFZLX0VYVF9J TUFHRV9EUk1fRk9STUFUX01PRElGSUVSX0VYVEVOU0lPTl9OQU1FLAo+ICsgICAgVktfS0hSX0VY VEVSTkFMX1NFTUFQSE9SRV9GRF9FWFRFTlNJT05fTkFNRSwKPiArICAgIFZLX0VYVF9FWFRFUk5B TF9NRU1PUllfSE9TVF9FWFRFTlNJT05fTkFNRSwKPiArI2lmZGVmIF9XSU4zMgo+ICsgICAgVktf S0hSX0VYVEVSTkFMX01FTU9SWV9XSU4zMl9FWFRFTlNJT05fTkFNRSwKPiArICAgIFZLX0tIUl9F WFRFUk5BTF9TRU1BUEhPUkVfV0lOMzJfRVhURU5TSU9OX05BTUUsCj4gKyNlbmRpZgo+ICsKPiAr ICAgIC8qIFZpZGVvIGVuY29kaW5nL2RlY29kaW5nICovCj4gKyAgICBWS19LSFJfVklERU9fUVVF VUVfRVhURU5TSU9OX05BTUUsCj4gKyAgICBWS19LSFJfVklERU9fREVDT0RFX1FVRVVFX0VYVEVO U0lPTl9OQU1FLAo+ICsgICAgVktfS0hSX1ZJREVPX0RFQ09ERV9IMjY0X0VYVEVOU0lPTl9OQU1F LAo+ICsgICAgVktfS0hSX1ZJREVPX0RFQ09ERV9IMjY1X0VYVEVOU0lPTl9OQU1FLAo+ICsgICAg IlZLX01FU0FfdmlkZW9fZGVjb2RlX2F2MSIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGlu dCBlbmFibGVfZGVidWcoQVZEaWN0aW9uYXJ5ICpvcHQpCj4gK3sKPiArICAgIEFWRGljdGlvbmFy eUVudHJ5ICplbnRyeSA9IGF2X2RpY3RfZ2V0KG9wdCwgImRlYnVnIiwgTlVMTCwgMCk7Cj4gKyAg ICBpbnQgZGVidWcgPSBlbnRyeSAmJiBzdHJ0b2woZW50cnktPnZhbHVlLCBOVUxMLCAxMCk7Cj4g KyAgICByZXR1cm4gZGVidWc7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGh3Y3R4X2xvY2tfcXVl dWUodm9pZCAqcHJpdiwgdWludDMyX3QgcWYsIHVpbnQzMl90IHFpZHgpCj4gK3sKPiArICAgIEFW SFdEZXZpY2VDb250ZXh0ICphdmh3Y3R4ID0gcHJpdjsKPiArICAgIGNvbnN0IEFWVnVsa2FuRGV2 aWNlQ29udGV4dCAqaHdjdHggPSBhdmh3Y3R4LT5od2N0eDsKPiArICAgIGh3Y3R4LT5sb2NrX3F1 ZXVlKGF2aHdjdHgsIHFmLCBxaWR4KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaHdjdHhfdW5s b2NrX3F1ZXVlKHZvaWQgKnByaXYsIHVpbnQzMl90IHFmLCB1aW50MzJfdCBxaWR4KQo+ICt7Cj4g KyAgICBBVkhXRGV2aWNlQ29udGV4dCAqYXZod2N0eCA9IHByaXY7Cj4gKyAgICBjb25zdCBBVlZ1 bGthbkRldmljZUNvbnRleHQgKmh3Y3R4ID0gYXZod2N0eC0+aHdjdHg7Cj4gKyAgICBod2N0eC0+ dW5sb2NrX3F1ZXVlKGF2aHdjdHgsIHFmLCBxaWR4KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBh ZGRfaW5zdGFuY2VfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKipleHQsIHVuc2lnbmVkIG51bV9leHQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkRpY3Rpb25hcnkg Km9wdCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRGljdGlvbmFyeSAq KmRpY3QpCj4gK3sKPiArICAgIGNvbnN0IGNoYXIgKmluc3RfZXh0X2tleSA9ICJpbnN0YW5jZV9l eHRlbnNpb25zIjsKPiArICAgIEFWRGljdGlvbmFyeUVudHJ5ICplbnRyeTsKPiArICAgIEFWQlBy aW50IGJ1ZjsKPiArICAgIGNoYXIgKmV4dF9saXN0ID0gTlVMTDsKPiArICAgIGludCByZXQ7Cj4g Kwo+ICsgICAgYXZfYnByaW50X2luaXQoJmJ1ZiwgMCwgQVZfQlBSSU5UX1NJWkVfQVVUT01BVElD KTsKPiArICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2V4dDsgaSsrKSB7Cj4gKyAgICAgICAg aWYgKGkpCj4gKyAgICAgICAgICAgIGF2X2JwcmludGYoJmJ1ZiwgIislcyIsIGV4dFtpXSk7Cj4g KyAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICBhdl9icHJpbnRmKCZidWYsICIlcyIsIGV4dFtp XSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZW50cnkgPSBhdl9kaWN0X2dldChvcHQsIGluc3RfZXh0 X2tleSwgTlVMTCwgMCk7Cj4gKyAgICBpZiAoZW50cnkgJiYgZW50cnktPnZhbHVlICYmIGVudHJ5 LT52YWx1ZVswXSkgewo+ICsgICAgICAgIGlmIChudW1fZXh0KQo+ICsgICAgICAgICAgICBhdl9i cHJpbnRmKCZidWYsICIrIik7Cj4gKyAgICAgICAgYXZfYnByaW50ZigmYnVmLCAiJXMiLCBlbnRy eS0+dmFsdWUpOwo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGF2X2JwcmludF9maW5hbGl6ZSgm YnVmLCAmZXh0X2xpc3QpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJl dDsKPiArICAgIHJldHVybiBhdl9kaWN0X3NldChkaWN0LCBpbnN0X2V4dF9rZXksIGV4dF9saXN0 LCBBVl9ESUNUX0RPTlRfU1RSRFVQX1ZBTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWRkX2Rl dmljZV9leHRlbnNpb24oY29uc3QgQVZEaWN0aW9uYXJ5ICpvcHQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVZEaWN0aW9uYXJ5ICoqZGljdCkKPiArewo+ICsgICAgY29uc3Qg Y2hhciAqZGV2X2V4dF9rZXkgPSAiZGV2aWNlX2V4dGVuc2lvbnMiOwo+ICsgICAgQVZEaWN0aW9u YXJ5RW50cnkgKmVudHJ5Owo+ICsgICAgQVZCUHJpbnQgYnVmOwo+ICsgICAgY2hhciAqZXh0X2xp c3QgPSBOVUxMOwo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBhdl9icHJpbnRfaW5pdCgmYnVm LCAwLCBBVl9CUFJJTlRfU0laRV9BVVRPTUFUSUMpOwo+ICsgICAgYXZfYnByaW50ZigmYnVmLCAi JXMiLCBWS19LSFJfU1dBUENIQUlOX0VYVEVOU0lPTl9OQU1FKTsKPiArICAgIGZvciAoaW50IGkg PSAwOyBpIDwgcGxfdnVsa2FuX251bV9yZWNvbW1lbmRlZF9leHRlbnNpb25zOyBpKyspCj4gKyAg ICAgICAgYXZfYnByaW50ZigmYnVmLCAiKyVzIiwgcGxfdnVsa2FuX3JlY29tbWVuZGVkX2V4dGVu c2lvbnNbaV0pOwo+ICsKPiArICAgIGVudHJ5ID0gYXZfZGljdF9nZXQob3B0LCBkZXZfZXh0X2tl eSwgTlVMTCwgMCk7Cj4gKyAgICBpZiAoZW50cnkgJiYgZW50cnktPnZhbHVlICYmIGVudHJ5LT52 YWx1ZVswXSkKPiArICAgICAgICBhdl9icHJpbnRmKCZidWYsICIrJXMiLCBlbnRyeS0+dmFsdWUp Owo+ICsKPiArICAgIHJldCA9IGF2X2JwcmludF9maW5hbGl6ZSgmYnVmLCAmZXh0X2xpc3QpOwo+ ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIHJldHVybiBh dl9kaWN0X3NldChkaWN0LCBkZXZfZXh0X2tleSwgZXh0X2xpc3QsIEFWX0RJQ1RfRE9OVF9TVFJE VVBfVkFMKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBjcmVhdGVfdmtfYnlfaHdjb250ZXh0KFZr UmVuZGVyZXIgKnJlbmRlcmVyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqKmV4dCwgdW5zaWduZWQgbnVtX2V4dCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFWRGljdGlvbmFyeSAqb3B0KQo+ICt7Cj4gKyAgICBSZW5k ZXJlckNvbnRleHQgKmN0eCA9IChSZW5kZXJlckNvbnRleHQgKikgcmVuZGVyZXI7Cj4gKyAgICBB VkhXRGV2aWNlQ29udGV4dCAqZGV2Owo+ICsgICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0 eDsKPiArICAgIEFWRGljdGlvbmFyeSAqZGljdCA9IE5VTEw7Cj4gKyAgICBpbnQgcmV0Owo+ICsK PiArICAgIHJldCA9IGFkZF9pbnN0YW5jZV9leHRlbnNpb24oZXh0LCBudW1fZXh0LCBvcHQsICZk aWN0KTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICBy ZXQgPSBhZGRfZGV2aWNlX2V4dGVuc2lvbihvcHQsICZkaWN0KTsKPiArICAgIGlmIChyZXQpIHsK PiArICAgICAgICBhdl9kaWN0X2ZyZWUoJmRpY3QpOwo+ICsgICAgICAgIHJldHVybiByZXQ7Cj4g KyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gYXZfaHdkZXZpY2VfY3R4X2NyZWF0ZSgmY3R4LT5od19k ZXZpY2VfcmVmLCBBVl9IV0RFVklDRV9UWVBFX1ZVTEtBTiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgZGljdCwgMCk7Cj4gKyAgICBhdl9kaWN0X2ZyZWUoJmRpY3QpOwo+ICsg ICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBkZXYgPSAo QVZIV0RldmljZUNvbnRleHQgKikgY3R4LT5od19kZXZpY2VfcmVmLT5kYXRhOwo+ICsgICAgaHdj dHggPSBkZXYtPmh3Y3R4Owo+ICsKPiArICAgIC8vIFRoZXJlIGlzIG5vIHdheSB0byBwYXNzIFNE TCBHZXRJbnN0YW5jZVByb2NBZGRyIHRvIGh3ZGV2aWNlLgo+ICsgICAgLy8gQ2hlY2sgdGhlIHJl c3VsdCBhbmQgcmV0dXJuIGVycm9yIGlmIHRoZXkgZG9uJ3QgbWF0Y2guCj4gKyAgICBpZiAoaHdj dHgtPmdldF9wcm9jX2FkZHIgIT0gU0RMX1Z1bGthbl9HZXRWa0dldEluc3RhbmNlUHJvY0FkZHIo KSkgewo+ICsgICAgICAgIGF2X2xvZyhyZW5kZXJlciwgQVZfTE9HX0VSUk9SLAo+ICsgICAgICAg ICAgICAgICAiaHdkZXZpY2UgYW5kIFNETCB1c2UgZGlmZmVyZW50IGdldF9wcm9jX2FkZHIuICIK PiArICAgICAgICAgICAgICAgIlRyeSAtdnVsa2FuX3BhcmFtcyBjcmVhdGVfYnlfcGxhY2Vibz0x XG4iKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gKyAgICB9Cj4g Kwo+ICsgICAgY3R4LT5nZXRfcHJvY19hZGRyID0gaHdjdHgtPmdldF9wcm9jX2FkZHI7Cj4gKyAg ICBjdHgtPmluc3QgPSBod2N0eC0+aW5zdDsKPiArICAgIGN0eC0+cGxhY2Vib192dWxrYW4gPSBw bF92dWxrYW5faW1wb3J0KGN0eC0+dmtfbG9nLAo+ICsgICAgICAgIHBsX3Z1bGthbl9pbXBvcnRf cGFyYW1zKAo+ICsgICAgICAgICAgICAuaW5zdGFuY2UgPSBod2N0eC0+aW5zdCwKPiArICAgICAg ICAgICAgLmdldF9wcm9jX2FkZHIgPSBod2N0eC0+Z2V0X3Byb2NfYWRkciwKPiArICAgICAgICAg ICAgLnBoeXNfZGV2aWNlID0gaHdjdHgtPnBoeXNfZGV2LAo+ICsgICAgICAgICAgICAuZGV2aWNl ICAgICAgICAgPSBod2N0eC0+YWN0X2RldiwKPiArICAgICAgICAgICAgLmV4dGVuc2lvbnMgICAg ID0gaHdjdHgtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsCj4gKyAgICAgICAgICAgIC5udW1fZXh0 ZW5zaW9ucyA9IGh3Y3R4LT5uYl9lbmFibGVkX2Rldl9leHRlbnNpb25zLAo+ICsgICAgICAgICAg ICAuZmVhdHVyZXMgICAgICAgPSAmaHdjdHgtPmRldmljZV9mZWF0dXJlcywKPiArICAgICAgICAg ICAgLmxvY2tfcXVldWUgICAgID0gaHdjdHhfbG9ja19xdWV1ZSwKPiArICAgICAgICAgICAgLnVu bG9ja19xdWV1ZSAgID0gaHdjdHhfdW5sb2NrX3F1ZXVlLAo+ICsgICAgICAgICAgICAucXVldWVf Y3R4ICAgICAgPSBkZXYsCj4gKyAgICAgICAgICAgIC5xdWV1ZV9ncmFwaGljcyA9IHsKPiArICAg ICAgICAgICAgICAgIC5pbmRleCA9IGh3Y3R4LT5xdWV1ZV9mYW1pbHlfaW5kZXgsCj4gKyAgICAg ICAgICAgICAgICAuY291bnQgPSBod2N0eC0+bmJfZ3JhcGhpY3NfcXVldWVzLAo+ICsgICAgICAg ICAgICB9LAo+ICsgICAgICAgICAgICAucXVldWVfY29tcHV0ZSA9IHsKPiArICAgICAgICAgICAg ICAgIC5pbmRleCA9IGh3Y3R4LT5xdWV1ZV9mYW1pbHlfY29tcF9pbmRleCwKPiArICAgICAgICAg ICAgICAgIC5jb3VudCA9IGh3Y3R4LT5uYl9jb21wX3F1ZXVlcywKPiArICAgICAgICAgICAgfSwK PiArICAgICAgICAgICAgLnF1ZXVlX3RyYW5zZmVyID0gewo+ICsgICAgICAgICAgICAgICAgLmlu ZGV4ID0gaHdjdHgtPnF1ZXVlX2ZhbWlseV90eF9pbmRleCwKPiArICAgICAgICAgICAgICAgIC5j b3VudCA9IGh3Y3R4LT5uYl90eF9xdWV1ZXMsCj4gKyAgICAgICAgICAgIH0sCj4gKyAgICAgICAg KSk7Cj4gKyAgICBpZiAoIWN0eC0+cGxhY2Vib192dWxrYW4pCj4gKyAgICAgICAgcmV0dXJuIEFW RVJST1JfRVhURVJOQUw7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHBsYWNlYm9fbG9ja19xdWV1ZShzdHJ1Y3QgQVZIV0RldmljZUNvbnRleHQgKmRldl9jdHgs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcXVldWVfZmFtaWx5LCB1aW50MzJf dCBpbmRleCkKPiArewo+ICsgICAgUmVuZGVyZXJDb250ZXh0ICpjdHggPSBkZXZfY3R4LT51c2Vy X29wYXF1ZTsKPiArICAgIHBsX3Z1bGthbiB2ayA9IGN0eC0+cGxhY2Vib192dWxrYW47Cj4gKyAg ICB2ay0+bG9ja19xdWV1ZSh2aywgcXVldWVfZmFtaWx5LCBpbmRleCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHBsYWNlYm9fdW5sb2NrX3F1ZXVlKHN0cnVjdCBBVkhXRGV2aWNlQ29udGV4dCAq ZGV2X2N0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHF1ZXVlX2ZhbWls eSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4KQo+ICt7Cj4gKyAg ICBSZW5kZXJlckNvbnRleHQgKmN0eCA9IGRldl9jdHgtPnVzZXJfb3BhcXVlOwo+ICsgICAgcGxf dnVsa2FuIHZrID0gY3R4LT5wbGFjZWJvX3Z1bGthbjsKPiArICAgIHZrLT51bmxvY2tfcXVldWUo dmssIHF1ZXVlX2ZhbWlseSwgaW5kZXgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGdldF9kZWNv ZGVfcXVldWUoVmtSZW5kZXJlciAqcmVuZGVyZXIsIGludCAqaW5kZXgsIGludCAqY291bnQpCj4g K3sKPiArICAgIFJlbmRlcmVyQ29udGV4dCAqY3R4ID0gKFJlbmRlcmVyQ29udGV4dCAqKSByZW5k ZXJlcjsKPiArICAgIFZrUXVldWVGYW1pbHlQcm9wZXJ0aWVzICpxdWV1ZV9mYW1pbHlfcHJvcCA9 IE5VTEw7Cj4gKyAgICB1aW50MzJfdCBudW1fcXVldWVfZmFtaWx5X3Byb3AgPSAwOwo+ICsgICAg UEZOX3ZrR2V0UGh5c2ljYWxEZXZpY2VRdWV1ZUZhbWlseVByb3BlcnRpZXMgZ2V0X3F1ZXVlX2Zh bWlseV9wcm9wOwo+ICsgICAgUEZOX3ZrR2V0SW5zdGFuY2VQcm9jQWRkciBnZXRfcHJvY19hZGRy ID0gY3R4LT5nZXRfcHJvY19hZGRyOwo+ICsKPiArICAgICppbmRleCA9IC0xOwo+ICsgICAgKmNv dW50ID0gMDsKPiArICAgIGdldF9xdWV1ZV9mYW1pbHlfcHJvcCA9IChQRk5fdmtHZXRQaHlzaWNh bERldmljZVF1ZXVlRmFtaWx5UHJvcGVydGllcykKPiArICAgICAgICAgICAgZ2V0X3Byb2NfYWRk cihjdHgtPnBsYWNlYm9faW5zdGFuY2UtPmluc3RhbmNlLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICJ2a0dldFBoeXNpY2FsRGV2aWNlUXVldWVGYW1pbHlQcm9wZXJ0aWVzIik7Cj4gKyAg ICBnZXRfcXVldWVfZmFtaWx5X3Byb3AoY3R4LT5wbGFjZWJvX3Z1bGthbi0+cGh5c19kZXZpY2Us Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bV9xdWV1ZV9mYW1pbHlfcHJvcCwgTlVM TCk7Cj4gKyAgICBpZiAoIW51bV9xdWV1ZV9mYW1pbHlfcHJvcCkKPiArICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKPiArCj4gKyAgICBxdWV1ZV9mYW1pbHlfcHJvcCA9IGF2X2NhbGxv YyhudW1fcXVldWVfZmFtaWx5X3Byb3AsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2YoKnF1ZXVlX2ZhbWlseV9wcm9wKSk7Cj4gKyAgICBpZiAoIXF1ZXVlX2ZhbWls eV9wcm9wKQo+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKwo+ICsgICAgZ2V0 X3F1ZXVlX2ZhbWlseV9wcm9wKGN0eC0+cGxhY2Vib192dWxrYW4tPnBoeXNfZGV2aWNlLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICZudW1fcXVldWVfZmFtaWx5X3Byb3AsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgcXVldWVfZmFtaWx5X3Byb3ApOwo+ICsKPiArICAgIGZvciAo aW50IGkgPSAwOyBpIDwgbnVtX3F1ZXVlX2ZhbWlseV9wcm9wOyBpKyspIHsKPiArICAgICAgICBp ZiAocXVldWVfZmFtaWx5X3Byb3BbaV0ucXVldWVGbGFncyAmIFZLX1FVRVVFX1ZJREVPX0RFQ09E RV9CSVRfS0hSKSB7Cj4gKyAgICAgICAgICAgICppbmRleCA9IGk7Cj4gKyAgICAgICAgICAgICpj b3VudCA9IHF1ZXVlX2ZhbWlseV9wcm9wW2ldLnF1ZXVlQ291bnQ7Cj4gKyAgICAgICAgICAgIGJy ZWFrOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIGF2X2ZyZWUocXVldWVfZmFtaWx5X3By b3ApOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNyZWF0ZV92 a19ieV9wbGFjZWJvKFZrUmVuZGVyZXIgKnJlbmRlcmVyLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipleHQsIHVuc2lnbmVkIG51bV9leHQsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZEaWN0aW9uYXJ5ICpvcHQpCj4gK3sK PiArICAgIFJlbmRlcmVyQ29udGV4dCAqY3R4ID0gKFJlbmRlcmVyQ29udGV4dCAqKSByZW5kZXJl cjsKPiArICAgIEFWSFdEZXZpY2VDb250ZXh0ICpkZXZpY2VfY3R4Owo+ICsgICAgQVZWdWxrYW5E ZXZpY2VDb250ZXh0ICp2a19kZXZfY3R4Owo+ICsgICAgaW50IGRlY29kZV9pbmRleDsKPiArICAg IGludCBkZWNvZGVfY291bnQ7Cj4gKyAgICBpbnQgcmV0Owo+ICsKPiArICAgIGN0eC0+Z2V0X3By b2NfYWRkciA9IFNETF9WdWxrYW5fR2V0VmtHZXRJbnN0YW5jZVByb2NBZGRyKCk7Cj4gKwo+ICsg ICAgY3R4LT5wbGFjZWJvX2luc3RhbmNlID0gcGxfdmtfaW5zdF9jcmVhdGUoY3R4LT52a19sb2cs IHBsX3ZrX2luc3RfcGFyYW1zKAo+ICsgICAgICAgICAgICAuZ2V0X3Byb2NfYWRkciA9IGN0eC0+ Z2V0X3Byb2NfYWRkciwKPiArICAgICAgICAgICAgLmRlYnVnID0gZW5hYmxlX2RlYnVnKG9wdCks Cj4gKyAgICAgICAgICAgIC5leHRlbnNpb25zID0gZXh0LAo+ICsgICAgICAgICAgICAubnVtX2V4 dGVuc2lvbnMgPSBudW1fZXh0Cj4gKyAgICApKTsKPiArICAgIGlmICghY3R4LT5wbGFjZWJvX2lu c3RhbmNlKSB7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9Cj4g KyAgICBjdHgtPmluc3QgPSBjdHgtPnBsYWNlYm9faW5zdGFuY2UtPmluc3RhbmNlOwo+ICsKPiAr ICAgIGN0eC0+cGxhY2Vib192dWxrYW4gPSBwbF92dWxrYW5fY3JlYXRlKGN0eC0+dmtfbG9nLCBw bF92dWxrYW5fcGFyYW1zKAo+ICsgICAgICAgICAgICAuaW5zdGFuY2UgPSBjdHgtPnBsYWNlYm9f aW5zdGFuY2UtPmluc3RhbmNlLAo+ICsgICAgICAgICAgICAuZ2V0X3Byb2NfYWRkciA9IGN0eC0+ cGxhY2Vib19pbnN0YW5jZS0+Z2V0X3Byb2NfYWRkciwKPiArICAgICAgICAgICAgLnN1cmZhY2Ug PSBjdHgtPnZrX3N1cmZhY2UsCj4gKyAgICAgICAgICAgIC5hbGxvd19zb2Z0d2FyZSA9IGZhbHNl LAo+ICsgICAgICAgICAgICAub3B0X2V4dGVuc2lvbnMgPSBvcHRpb25hbF9kZXZpY2VfZXh0cywK PiArICAgICAgICAgICAgLm51bV9vcHRfZXh0ZW5zaW9ucyA9IEZGX0FSUkFZX0VMRU1TKG9wdGlv bmFsX2RldmljZV9leHRzKSwKPiArICAgICAgICAgICAgLmV4dHJhX3F1ZXVlcyA9IFZLX1FVRVVF X1ZJREVPX0RFQ09ERV9CSVRfS0hSLAo+ICsgICAgKSk7Cj4gKyAgICBpZiAoIWN0eC0+cGxhY2Vi b192dWxrYW4pCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICBjdHgt Pmh3X2RldmljZV9yZWYgPSBhdl9od2RldmljZV9jdHhfYWxsb2MoQVZfSFdERVZJQ0VfVFlQRV9W VUxLQU4pOwo+ICsgICAgaWYgKCFjdHgtPmh3X2RldmljZV9yZWYpIHsKPiArICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsgICAgfQo+ICsKPiArICAgIGRldmljZV9jdHggPSAoQVZI V0RldmljZUNvbnRleHQgKikgY3R4LT5od19kZXZpY2VfcmVmLT5kYXRhOwo+ICsgICAgZGV2aWNl X2N0eC0+dXNlcl9vcGFxdWUgPSBjdHg7Cj4gKwo+ICsgICAgdmtfZGV2X2N0eCA9IGRldmljZV9j dHgtPmh3Y3R4Owo+ICsgICAgdmtfZGV2X2N0eC0+bG9ja19xdWV1ZSA9IHBsYWNlYm9fbG9ja19x dWV1ZSwKPiArICAgICAgICAgICAgdmtfZGV2X2N0eC0+dW5sb2NrX3F1ZXVlID0gcGxhY2Vib191 bmxvY2tfcXVldWU7Cj4gKwo+ICsgICAgdmtfZGV2X2N0eC0+Z2V0X3Byb2NfYWRkciA9IGN0eC0+ cGxhY2Vib19pbnN0YW5jZS0+Z2V0X3Byb2NfYWRkcjsKPiArCj4gKyAgICB2a19kZXZfY3R4LT5p bnN0ID0gY3R4LT5wbGFjZWJvX2luc3RhbmNlLT5pbnN0YW5jZTsKPiArICAgIHZrX2Rldl9jdHgt PnBoeXNfZGV2ID0gY3R4LT5wbGFjZWJvX3Z1bGthbi0+cGh5c19kZXZpY2U7Cj4gKyAgICB2a19k ZXZfY3R4LT5hY3RfZGV2ID0gY3R4LT5wbGFjZWJvX3Z1bGthbi0+ZGV2aWNlOwo+ICsKPiArICAg IHZrX2Rldl9jdHgtPmRldmljZV9mZWF0dXJlcyA9ICpjdHgtPnBsYWNlYm9fdnVsa2FuLT5mZWF0 dXJlczsKPiArCj4gKyAgICB2a19kZXZfY3R4LT5lbmFibGVkX2luc3RfZXh0ZW5zaW9ucyA9IGN0 eC0+cGxhY2Vib19pbnN0YW5jZS0+ZXh0ZW5zaW9uczsKPiArICAgIHZrX2Rldl9jdHgtPm5iX2Vu YWJsZWRfaW5zdF9leHRlbnNpb25zID0gY3R4LT5wbGFjZWJvX2luc3RhbmNlLT5udW1fZXh0ZW5z aW9uczsKPiArCj4gKyAgICB2a19kZXZfY3R4LT5lbmFibGVkX2Rldl9leHRlbnNpb25zID0gY3R4 LT5wbGFjZWJvX3Z1bGthbi0+ZXh0ZW5zaW9uczsKPiArICAgIHZrX2Rldl9jdHgtPm5iX2VuYWJs ZWRfZGV2X2V4dGVuc2lvbnMgPSBjdHgtPnBsYWNlYm9fdnVsa2FuLT5udW1fZXh0ZW5zaW9uczsK PiArCj4gKyAgICB2a19kZXZfY3R4LT5xdWV1ZV9mYW1pbHlfaW5kZXggPSBjdHgtPnBsYWNlYm9f dnVsa2FuLT5xdWV1ZV9ncmFwaGljcy5pbmRleDsKPiArICAgIHZrX2Rldl9jdHgtPm5iX2dyYXBo aWNzX3F1ZXVlcyA9IGN0eC0+cGxhY2Vib192dWxrYW4tPnF1ZXVlX2dyYXBoaWNzLmNvdW50Owo+ ICsKPiArICAgIHZrX2Rldl9jdHgtPnF1ZXVlX2ZhbWlseV90eF9pbmRleCA9IGN0eC0+cGxhY2Vi b192dWxrYW4tPnF1ZXVlX3RyYW5zZmVyLmluZGV4Owo+ICsgICAgdmtfZGV2X2N0eC0+bmJfdHhf cXVldWVzID0gY3R4LT5wbGFjZWJvX3Z1bGthbi0+cXVldWVfdHJhbnNmZXIuY291bnQ7Cj4gKwo+ ICsgICAgdmtfZGV2X2N0eC0+cXVldWVfZmFtaWx5X2NvbXBfaW5kZXggPSBjdHgtPnBsYWNlYm9f dnVsa2FuLT5xdWV1ZV9jb21wdXRlLmluZGV4Owo+ICsgICAgdmtfZGV2X2N0eC0+bmJfY29tcF9x dWV1ZXMgPSBjdHgtPnBsYWNlYm9fdnVsa2FuLT5xdWV1ZV9jb21wdXRlLmNvdW50Owo+ICsKPiAr ICAgIHJldCA9IGdldF9kZWNvZGVfcXVldWUocmVuZGVyZXIsICZkZWNvZGVfaW5kZXgsICZkZWNv ZGVfY291bnQpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiAr Cj4gKyAgICB2a19kZXZfY3R4LT5xdWV1ZV9mYW1pbHlfZGVjb2RlX2luZGV4ID0gZGVjb2RlX2lu ZGV4Owo+ICsgICAgdmtfZGV2X2N0eC0+bmJfZGVjb2RlX3F1ZXVlcyA9IGRlY29kZV9jb3VudDsK PiArCj4gKyAgICByZXQgPSBhdl9od2RldmljZV9jdHhfaW5pdChjdHgtPmh3X2RldmljZV9yZWYp Owo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBjcmVhdGUoVmtSZW5kZXJlciAqcmVuZGVy ZXIsIFNETF9XaW5kb3cgKndpbmRvdywgQVZEaWN0aW9uYXJ5ICpvcHQpCj4gK3sKPiArICAgIGlu dCByZXQgPSAwOwo+ICsgICAgdW5zaWduZWQgbnVtX2V4dCA9IDA7Cj4gKyAgICBjb25zdCBjaGFy ICoqZXh0ID0gTlVMTDsKPiArICAgIGludCB3LCBoOwo+ICsgICAgc3RydWN0IHBsX2xvZ19wYXJh bXMgdmtfbG9nX3BhcmFtcyA9IHsKPiArICAgICAgICAgICAgLmxvZ19jYiA9IHZrX2xvZ19jYiwK PiArICAgICAgICAgICAgLmxvZ19sZXZlbCA9IFBMX0xPR19ERUJVRywKPiArICAgICAgICAgICAg LmxvZ19wcml2ID0gcmVuZGVyZXIsCj4gKyAgICB9Owo+ICsgICAgUmVuZGVyZXJDb250ZXh0ICpj dHggPSAoUmVuZGVyZXJDb250ZXh0ICopIHJlbmRlcmVyOwo+ICsgICAgQVZEaWN0aW9uYXJ5RW50 cnkgKmVudHJ5Owo+ICsKPiArICAgIGN0eC0+dmtfbG9nID0gcGxfbG9nX2NyZWF0ZShQTF9BUElf VkVSLCAmdmtfbG9nX3BhcmFtcyk7Cj4gKwo+ICsgICAgaWYgKCFTRExfVnVsa2FuX0dldEluc3Rh bmNlRXh0ZW5zaW9ucyh3aW5kb3csICZudW1fZXh0LCBOVUxMKSkgewo+ICsgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRkFUQUwsICJGYWlsZWQgdG8gZ2V0IHZ1bGthbiBleHRlbnNpb25zOiAl c1xuIiwKPiArICAgICAgICAgICAgICAgU0RMX0dldEVycm9yKCkpOwo+ICsgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgfQo+ICsKPiArICAgIGV4dCA9IGF2X2NhbGxvYyhu dW1fZXh0LCBzaXplb2YoKmV4dCkpOwo+ICsgICAgaWYgKCFleHQpIHsKPiArICAgICAgICByZXQg PSBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgU0RMX1Z1bGthbl9HZXRJbnN0YW5jZUV4dGVuc2lvbnMod2luZG93LCAmbnVtX2V4dCwgZXh0 KTsKPiArCj4gKyAgICBlbnRyeSA9IGF2X2RpY3RfZ2V0KG9wdCwgImNyZWF0ZV9ieV9wbGFjZWJv IiwgTlVMTCwgMCk7Cj4gKyAgICBpZiAoZW50cnkgJiYgc3RydG9sKGVudHJ5LT52YWx1ZSwgTlVM TCwgMTApKQo+ICsgICAgICAgIHJldCA9IGNyZWF0ZV92a19ieV9wbGFjZWJvKHJlbmRlcmVyLCBl eHQsIG51bV9leHQsIG9wdCk7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcmV0ID0gY3JlYXRlX3Zr X2J5X2h3Y29udGV4dChyZW5kZXJlciwgZXh0LCBudW1fZXh0LCBvcHQpOwo+ICsgICAgaWYgKHJl dCA8IDApCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgaWYgKCFTRExfVnVsa2FuX0Ny ZWF0ZVN1cmZhY2Uod2luZG93LCBjdHgtPmluc3QsICZjdHgtPnZrX3N1cmZhY2UpKSB7Cj4gKyAg ICAgICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAg IH0KPiArCj4gKyAgICBjdHgtPnN3YXBjaGFpbiA9IHBsX3Z1bGthbl9jcmVhdGVfc3dhcGNoYWlu KAo+ICsgICAgICAgICAgICBjdHgtPnBsYWNlYm9fdnVsa2FuLAo+ICsgICAgICAgICAgICBwbF92 dWxrYW5fc3dhcGNoYWluX3BhcmFtcygKPiArICAgICAgICAgICAgICAgICAgICAuc3VyZmFjZSA9 IGN0eC0+dmtfc3VyZmFjZSwKPiArICAgICAgICAgICAgICAgICAgICAucHJlc2VudF9tb2RlID0g VktfUFJFU0VOVF9NT0RFX0ZJRk9fS0hSKSk7Cj4gKyAgICBpZiAoIWN0eC0+c3dhcGNoYWluKSB7 Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUl9FWFRFUk5BTDsKPiArICAgICAgICBnb3RvIG91dDsK PiArICAgIH0KPiArCj4gKyAgICBTRExfVnVsa2FuX0dldERyYXdhYmxlU2l6ZSh3aW5kb3csICZ3 LCAmaCk7Cj4gKyAgICBwbF9zd2FwY2hhaW5fcmVzaXplKGN0eC0+c3dhcGNoYWluLCAmdywgJmgp Owo+ICsKPiArICAgIGN0eC0+cmVuZGVyZXIgPSBwbF9yZW5kZXJlcl9jcmVhdGUoY3R4LT52a19s b2csIGN0eC0+cGxhY2Vib192dWxrYW4tPmdwdSk7Cj4gKyAgICBpZiAoIWN0eC0+cmVuZGVyZXIp IHsKPiArICAgICAgICByZXQgPSBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgICAgIGdvdG8gb3V0 Owo+ICsgICAgfQo+ICsKPiArICAgIGN0eC0+dmtfZnJhbWUgPSBhdl9mcmFtZV9hbGxvYygpOwo+ ICsgICAgaWYgKCFjdHgtPnZrX2ZyYW1lKSB7Cj4gKyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9N RU0pOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IDA7Cj4g Kwo+ICtvdXQ6Cj4gKyAgICBhdl9mcmVlKGV4dCk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGdldF9od19kZXYoVmtSZW5kZXJlciAqcmVuZGVyZXIsIEFWQnVmZmVy UmVmICoqZGV2KQo+ICt7Cj4gKyAgICBSZW5kZXJlckNvbnRleHQgKmN0eCA9IChSZW5kZXJlckNv bnRleHQgKikgcmVuZGVyZXI7Cj4gKwo+ICsgICAgKmRldiA9IGN0eC0+aHdfZGV2aWNlX3JlZjsK PiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNyZWF0ZV9od19mcmFtZShW a1JlbmRlcmVyICpyZW5kZXJlciwgQVZGcmFtZSAqZnJhbWUpCj4gK3sKPiArICAgIFJlbmRlcmVy Q29udGV4dCAqY3R4ID0gKFJlbmRlcmVyQ29udGV4dCAqKSByZW5kZXJlcjsKPiArICAgIEFWSFdG cmFtZXNDb250ZXh0ICpzcmNfaHdfZnJhbWUgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKikKPiArICAg ICAgICAgICAgZnJhbWUtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Cj4gKyAgICBBVkhXRnJhbWVzQ29u dGV4dCAqaHdfZnJhbWU7Cj4gKyAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKnZrX2ZyYW1lX2N0 eDsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgaWYgKGN0eC0+aHdfZnJhbWVfcmVmKSB7Cj4g KyAgICAgICAgaHdfZnJhbWUgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKikgY3R4LT5od19mcmFtZV9y ZWYtPmRhdGE7Cj4gKwo+ICsgICAgICAgIGlmIChod19mcmFtZS0+d2lkdGggPT0gZnJhbWUtPndp ZHRoICYmCj4gKyAgICAgICAgICAgIGh3X2ZyYW1lLT5oZWlnaHQgPT0gZnJhbWUtPmhlaWdodCAm Jgo+ICsgICAgICAgICAgICBod19mcmFtZS0+c3dfZm9ybWF0ID09IHNyY19od19mcmFtZS0+c3df Zm9ybWF0KQo+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICAgICAgYXZfYnVmZmVy X3VucmVmKCZjdHgtPmh3X2ZyYW1lX3JlZik7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKCFjdHgt PmNvbnN0cmFpbnRzKSB7Cj4gKyAgICAgICAgY3R4LT5jb25zdHJhaW50cyA9IGF2X2h3ZGV2aWNl X2dldF9od2ZyYW1lX2NvbnN0cmFpbnRzKAo+ICsgICAgICAgICAgICAgICAgY3R4LT5od19kZXZp Y2VfcmVmLCBOVUxMKTsKPiArICAgICAgICBpZiAoIWN0eC0+Y29uc3RyYWludHMpCj4gKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8gQ2hl Y2sgY29uc3RyYWludHMgYW5kIHNraXAgY3JlYXRlIGh3ZnJhbWUuIERvbid0IHRha2UgaXQgYXMg ZXJyb3Igc2luY2UKPiArICAgIC8vIHdlIGNhbiBmYWxsYmFjayB0byBtZW1vcnkgY29weSBmcm9t IEdQVSB0byBDUFUuCj4gKyAgICBpZiAoKGN0eC0+Y29uc3RyYWludHMtPm1heF93aWR0aCAmJgo+ ICsgICAgICAgICBjdHgtPmNvbnN0cmFpbnRzLT5tYXhfd2lkdGggPCBmcmFtZS0+d2lkdGgpIHx8 Cj4gKyAgICAgICAgKGN0eC0+Y29uc3RyYWludHMtPm1heF9oZWlnaHQgJiYKPiArICAgICAgICAg Y3R4LT5jb25zdHJhaW50cy0+bWF4X2hlaWdodCA8IGZyYW1lLT5oZWlnaHQpIHx8Cj4gKyAgICAg ICAgKGN0eC0+Y29uc3RyYWludHMtPm1pbl93aWR0aCAmJgo+ICsgICAgICAgICBjdHgtPmNvbnN0 cmFpbnRzLT5taW5fd2lkdGggPiBmcmFtZS0+d2lkdGgpIHx8Cj4gKyAgICAgICAgKGN0eC0+Y29u c3RyYWludHMtPm1pbl9oZWlnaHQgJiYKPiArICAgICAgICAgY3R4LT5jb25zdHJhaW50cy0+bWlu X2hlaWdodCA+IGZyYW1lLT5oZWlnaHQpKQo+ICsgICAgICAgIHJldHVybiAwOwo+ICsKPiArICAg IGlmIChjdHgtPmNvbnN0cmFpbnRzLT52YWxpZF9zd19mb3JtYXRzKSB7Cj4gKyAgICAgICAgZW51 bSBBVlBpeGVsRm9ybWF0ICpzd19mb3JtYXRzID0gY3R4LT5jb25zdHJhaW50cy0+dmFsaWRfc3df Zm9ybWF0czsKPiArICAgICAgICB3aGlsZSAoKnN3X2Zvcm1hdHMgIT0gQVZfUElYX0ZNVF9OT05F KSB7Cj4gKyAgICAgICAgICAgIGlmICgqc3dfZm9ybWF0cyA9PSBzcmNfaHdfZnJhbWUtPnN3X2Zv cm1hdCkKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBzd19mb3JtYXRz Kys7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmICgqc3dfZm9ybWF0cyA9PSBBVl9QSVhfRk1U X05PTkUpCj4gKyAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiArICAgIGN0eC0+ aHdfZnJhbWVfcmVmID0gYXZfaHdmcmFtZV9jdHhfYWxsb2MoY3R4LT5od19kZXZpY2VfcmVmKTsK PiArICAgIGlmICghY3R4LT5od19mcmFtZV9yZWYpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKPiArCj4gKyAgICBod19mcmFtZSA9IChBVkhXRnJhbWVzQ29udGV4dCAqKSBjdHgt Pmh3X2ZyYW1lX3JlZi0+ZGF0YTsKPiArICAgIGh3X2ZyYW1lLT5mb3JtYXQgPSBBVl9QSVhfRk1U X1ZVTEtBTjsKPiArICAgIGh3X2ZyYW1lLT5zd19mb3JtYXQgPSBzcmNfaHdfZnJhbWUtPnN3X2Zv cm1hdDsKPiArICAgIGh3X2ZyYW1lLT53aWR0aCA9IGZyYW1lLT53aWR0aDsKPiArICAgIGh3X2Zy YW1lLT5oZWlnaHQgPSBmcmFtZS0+aGVpZ2h0Owo+ICsKPiArICAgIGlmIChmcmFtZS0+Zm9ybWF0 ID09IEFWX1BJWF9GTVRfQ1VEQSkgewo+ICsgICAgICAgIHZrX2ZyYW1lX2N0eCA9IGh3X2ZyYW1l LT5od2N0eDsKPiArICAgICAgICB2a19mcmFtZV9jdHgtPmZsYWdzID0gQVZfVktfRlJBTUVfRkxB R19ESVNBQkxFX01VTFRJUExBTkU7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gYXZfaHdmcmFt ZV9jdHhfaW5pdChjdHgtPmh3X2ZyYW1lX3JlZik7Cj4gKyAgICBpZiAocmV0IDwgMCkgewo+ICsg ICAgICAgIGF2X2xvZyhyZW5kZXJlciwgQVZfTE9HX0VSUk9SLCAiQ3JlYXRlIGh3ZnJhbWUgY29u dGV4dCBmYWlsZWQsICVzXG4iLAo+ICsgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOwo+ ICsgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfaHdmcmFtZV90cmFu c2Zlcl9nZXRfZm9ybWF0cyhjdHgtPmh3X2ZyYW1lX3JlZiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVZfSFdGUkFNRV9UUkFOU0ZFUl9ESVJFQ1RJT05fVE8sCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPnRyYW5zZmVyX2Zvcm1hdHMs IDApOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGludCBj aGVja19od190cmFuc2ZlcihSZW5kZXJlckNvbnRleHQgKmN0eCwgQVZGcmFtZSAqZnJhbWUpCj4g K3sKPiArICAgIGlmICghY3R4LT5od19mcmFtZV9yZWYgfHwgIWN0eC0+dHJhbnNmZXJfZm9ybWF0 cykKPiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBmb3IgKGludCBpID0gMDsgY3R4LT50 cmFuc2Zlcl9mb3JtYXRzW2ldICE9IEFWX1BJWF9GTVRfTk9ORTsgaSsrKQo+ICsgICAgICAgIGlm IChjdHgtPnRyYW5zZmVyX2Zvcm1hdHNbaV0gPT0gZnJhbWUtPmZvcm1hdCkKPiArICAgICAgICAg ICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxp bmUgaW50IG1vdmVfdG9fb3V0cHV0X2ZyYW1lKFJlbmRlcmVyQ29udGV4dCAqY3R4LCBBVkZyYW1l ICpmcmFtZSkKPiArewo+ICsgICAgaW50IHJldCA9IGF2X2ZyYW1lX2NvcHlfcHJvcHMoY3R4LT52 a19mcmFtZSwgZnJhbWUpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJl dDsKPiArICAgIGF2X2ZyYW1lX3VucmVmKGZyYW1lKTsKPiArICAgIGF2X2ZyYW1lX21vdmVfcmVm KGZyYW1lLCBjdHgtPnZrX2ZyYW1lKTsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IG1hcF9mcmFtZShWa1JlbmRlcmVyICpyZW5kZXJlciwgQVZGcmFtZSAqZnJhbWUsIGlu dCB1c2VfaHdfZnJhbWUpCj4gK3sKPiArICAgIFJlbmRlcmVyQ29udGV4dCAqY3R4ID0gKFJlbmRl cmVyQ29udGV4dCAqKSByZW5kZXJlcjsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgaWYgKHVz ZV9od19mcmFtZSAmJiAhY3R4LT5od19mcmFtZV9yZWYpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PU1lTKTsKPiArCj4gKyAgICAvLyBUcnkgbWFwIGRhdGEgZmlyc3QKPiArICAgIGF2X2Zy YW1lX3VucmVmKGN0eC0+dmtfZnJhbWUpOwo+ICsgICAgaWYgKHVzZV9od19mcmFtZSkgewo+ICsg ICAgICAgIGN0eC0+dmtfZnJhbWUtPmh3X2ZyYW1lc19jdHggPSBhdl9idWZmZXJfcmVmKGN0eC0+ aHdfZnJhbWVfcmVmKTsKPiArICAgICAgICBjdHgtPnZrX2ZyYW1lLT5mb3JtYXQgPSBBVl9QSVhf Rk1UX1ZVTEtBTjsKPiArICAgIH0KPiArICAgIHJldCA9IGF2X2h3ZnJhbWVfbWFwKGN0eC0+dmtf ZnJhbWUsIGZyYW1lLCAwKTsKPiArICAgIGlmICghcmV0KQo+ICsgICAgICAgIHJldHVybiBtb3Zl X3RvX291dHB1dF9mcmFtZShjdHgsIGZyYW1lKTsKPiArCj4gKyAgICBpZiAocmV0ICE9IEFWRVJS T1IoRU5PU1lTKSkKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0ZBVEFMLCAiTWFwIGZy YW1lIGZhaWxlZDogJXNcbiIsIGF2X2VycjJzdHIocmV0KSk7Cj4gKyAgICByZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRyYW5zZmVyX2ZyYW1lKFZrUmVuZGVyZXIgKnJlbmRlcmVy LCBBVkZyYW1lICpmcmFtZSwgaW50IHVzZV9od19mcmFtZSkKPiArewo+ICsgICAgUmVuZGVyZXJD b250ZXh0ICpjdHggPSAoUmVuZGVyZXJDb250ZXh0ICopIHJlbmRlcmVyOwo+ICsgICAgaW50IHJl dDsKPiArCj4gKyAgICBpZiAodXNlX2h3X2ZyYW1lICYmICFjaGVja19od190cmFuc2ZlcihjdHgs IGZyYW1lKSkKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOwo+ICsKPiArICAgIGF2 X2ZyYW1lX3VucmVmKGN0eC0+dmtfZnJhbWUpOwo+ICsgICAgaWYgKHVzZV9od19mcmFtZSkKPiAr ICAgICAgICBhdl9od2ZyYW1lX2dldF9idWZmZXIoY3R4LT5od19mcmFtZV9yZWYsIGN0eC0+dmtf ZnJhbWUsIDApOwo+ICsgICAgcmV0ID0gYXZfaHdmcmFtZV90cmFuc2Zlcl9kYXRhKGN0eC0+dmtf ZnJhbWUsIGZyYW1lLCAxKTsKPiArICAgIGlmICghcmV0KQo+ICsgICAgICAgIHJldHVybiBtb3Zl X3RvX291dHB1dF9mcmFtZShjdHgsIGZyYW1lKTsKPiArCj4gKyAgICBpZiAocmV0ICE9IEFWRVJS T1IoRU5PU1lTKSkKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0ZBVEFMLCAiVHJhbnNm ZXIgZnJhbWUgZmFpbGVkOiAlc1xuIiwKPiArICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQp KTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY29udmVydF9mcmFt ZShWa1JlbmRlcmVyICpyZW5kZXJlciwgQVZGcmFtZSAqZnJhbWUpCj4gK3sKPiArICAgIGludCBy ZXQ7Cj4gKwo+ICsgICAgaWYgKCFmcmFtZS0+aHdfZnJhbWVzX2N0eCkKPiArICAgICAgICByZXR1 cm4gMDsKPiArCj4gKyAgICBpZiAoZnJhbWUtPmZvcm1hdCA9PSBBVl9QSVhfRk1UX1ZVTEtBTikK PiArICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICByZXQgPSBjcmVhdGVfaHdfZnJhbWUocmVu ZGVyZXIsIGZyYW1lKTsKPiArICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgIHJldHVybiByZXQ7 Cj4gKwo+ICsgICAgZm9yIChpbnQgdXNlX2h3ID0gMTsgdXNlX2h3ID49MDsgdXNlX2h3LS0pIHsK PiArICAgICAgICByZXQgPSBtYXBfZnJhbWUocmVuZGVyZXIsIGZyYW1lLCB1c2VfaHcpOwo+ICsg ICAgICAgIGlmICghcmV0KQo+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgICBpZiAo cmV0ICE9IEFWRVJST1IoRU5PU1lTKSkKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4g KyAgICAgICAgcmV0ID0gdHJhbnNmZXJfZnJhbWUocmVuZGVyZXIsIGZyYW1lLCB1c2VfaHcpOwo+ ICsgICAgICAgIGlmICghcmV0KQo+ICsgICAgICAgICAgICByZXR1cm4gMDsKPiArICAgICAgICBp ZiAocmV0ICE9IEFWRVJST1IoRU5PU1lTKSkKPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAr ICAgIH0KPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRpc3Bs YXkoVmtSZW5kZXJlciAqcmVuZGVyZXIsIEFWRnJhbWUgKmZyYW1lKQo+ICt7Cj4gKyAgICBzdHJ1 Y3QgcGxfc3dhcGNoYWluX2ZyYW1lIHN3YXBfZnJhbWUgPSB7MH07Cj4gKyAgICBzdHJ1Y3QgcGxf ZnJhbWUgcGxfZnJhbWUgPSB7MH07Cj4gKyAgICBzdHJ1Y3QgcGxfZnJhbWUgdGFyZ2V0ID0gezB9 Owo+ICsgICAgUmVuZGVyZXJDb250ZXh0ICpjdHggPSAoUmVuZGVyZXJDb250ZXh0ICopIHJlbmRl cmVyOwo+ICsgICAgaW50IHJldCA9IDA7Cj4gKwo+ICsgICAgcmV0ID0gY29udmVydF9mcmFtZShy ZW5kZXJlciwgZnJhbWUpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJl dDsKPiArCj4gKyAgICBpZiAoIXBsX21hcF9hdmZyYW1lX2V4KGN0eC0+cGxhY2Vib192dWxrYW4t PmdwdSwgJnBsX2ZyYW1lLCBwbF9hdmZyYW1lX3BhcmFtcygKPiArICAgICAgICAgICAgLmZyYW1l ID0gZnJhbWUsCj4gKyAgICAgICAgICAgIC50ZXggPSBjdHgtPnRleCkpKSB7Cj4gKyAgICAgICAg YXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgInBsX21hcF9hdmZyYW1lX2V4IGZhaWxlZFxuIik7 Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICB9Cj4gKwo+ICsgICAg aWYgKCFwbF9zd2FwY2hhaW5fc3RhcnRfZnJhbWUoY3R4LT5zd2FwY2hhaW4sICZzd2FwX2ZyYW1l KSkgewo+ICsgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsICJzdGFydCBmcmFtZSBm YWlsZWRcbiIpOwo+ICsgICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7Cj4gKyAgICAgICAg Z290byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcGxfZnJhbWVfZnJvbV9zd2FwY2hhaW4oJnRh cmdldCwgJnN3YXBfZnJhbWUpOwo+ICsgICAgaWYgKCFwbF9yZW5kZXJfaW1hZ2UoY3R4LT5yZW5k ZXJlciwgJnBsX2ZyYW1lLCAmdGFyZ2V0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgJnBs X3JlbmRlcl9kZWZhdWx0X3BhcmFtcykpIHsKPiArICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9H X0VSUk9SLCAicGxfcmVuZGVyX2ltYWdlIGZhaWxlZFxuIik7Cj4gKyAgICAgICAgcmV0ID0gQVZF UlJPUl9FWFRFUk5BTDsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICBp ZiAoIXBsX3N3YXBjaGFpbl9zdWJtaXRfZnJhbWUoY3R4LT5zd2FwY2hhaW4pKSB7Cj4gKyAgICAg ICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgInBsX3N3YXBjaGFpbl9zdWJtaXRfZnJhbWUg ZmFpbGVkXG4iKTsKPiArICAgICAgICByZXQgPSBBVkVSUk9SX0VYVEVSTkFMOwo+ICsgICAgICAg IGdvdG8gb3V0Owo+ICsgICAgfQo+ICsgICAgcGxfc3dhcGNoYWluX3N3YXBfYnVmZmVycyhjdHgt PnN3YXBjaGFpbik7Cj4gKwo+ICtvdXQ6Cj4gKyAgICBwbF91bm1hcF9hdmZyYW1lKGN0eC0+cGxh Y2Vib192dWxrYW4tPmdwdSwgJnBsX2ZyYW1lKTsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgcmVzaXplKFZrUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQpCj4gK3sKPiArICAgIFJlbmRlcmVyQ29udGV4dCAqY3R4ID0gKFJlbmRlcmVyQ29u dGV4dCAqKSByZW5kZXJlcjsKPiArCj4gKyAgICBpZiAoIXBsX3N3YXBjaGFpbl9yZXNpemUoY3R4 LT5zd2FwY2hhaW4sICZ3aWR0aCwgJmhlaWdodCkpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGVzdHJv eShWa1JlbmRlcmVyICpyZW5kZXJlcikKPiArewo+ICsgICAgUmVuZGVyZXJDb250ZXh0ICpjdHgg PSAoUmVuZGVyZXJDb250ZXh0ICopIHJlbmRlcmVyOwo+ICsgICAgUEZOX3ZrRGVzdHJveVN1cmZh Y2VLSFIgdmtEZXN0cm95U3VyZmFjZUtIUjsKPiArCj4gKyAgICBhdl9mcmFtZV9mcmVlKCZjdHgt PnZrX2ZyYW1lKTsKPiArICAgIGF2X2ZyZWVwKCZjdHgtPnRyYW5zZmVyX2Zvcm1hdHMpOwo+ICsg ICAgYXZfaHdmcmFtZV9jb25zdHJhaW50c19mcmVlKCZjdHgtPmNvbnN0cmFpbnRzKTsKPiArICAg IGF2X2J1ZmZlcl91bnJlZigmY3R4LT5od19mcmFtZV9yZWYpOwo+ICsKPiArICAgIGlmIChjdHgt PnBsYWNlYm9fdnVsa2FuKSB7Cj4gKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJB WV9FTEVNUyhjdHgtPnRleCk7IGkrKykKPiArICAgICAgICAgICAgcGxfdGV4X2Rlc3Ryb3koY3R4 LT5wbGFjZWJvX3Z1bGthbi0+Z3B1LCAmY3R4LT50ZXhbaV0pOwo+ICsgICAgICAgIHBsX3JlbmRl cmVyX2Rlc3Ryb3koJmN0eC0+cmVuZGVyZXIpOwo+ICsgICAgICAgIHBsX3N3YXBjaGFpbl9kZXN0 cm95KCZjdHgtPnN3YXBjaGFpbik7Cj4gKyAgICAgICAgcGxfdnVsa2FuX2Rlc3Ryb3koJmN0eC0+ cGxhY2Vib192dWxrYW4pOwo+ICsgICAgfQo+ICsKPiArICAgIGlmIChjdHgtPnZrX3N1cmZhY2Up IHsKPiArICAgICAgICB2a0Rlc3Ryb3lTdXJmYWNlS0hSID0gKFBGTl92a0Rlc3Ryb3lTdXJmYWNl S0hSKQo+ICsgICAgICAgICAgICAgICAgY3R4LT5nZXRfcHJvY19hZGRyKGN0eC0+aW5zdCwgInZr RGVzdHJveVN1cmZhY2VLSFIiKTsKPiArICAgICAgICB2a0Rlc3Ryb3lTdXJmYWNlS0hSKGN0eC0+ aW5zdCwgY3R4LT52a19zdXJmYWNlLCBOVUxMKTsKPiArICAgICAgICBjdHgtPnZrX3N1cmZhY2Ug PSBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2J1ZmZlcl91bnJlZigmY3R4LT5od19kZXZp Y2VfcmVmKTsKPiArICAgIHBsX3ZrX2luc3RfZGVzdHJveSgmY3R4LT5wbGFjZWJvX2luc3RhbmNl KTsKPiArCj4gKyAgICBwbF9sb2dfZGVzdHJveSgmY3R4LT52a19sb2cpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3QgQVZDbGFzcyB2dWxrYW5fcmVuZGVyZXJfY2xhc3MgPSB7Cj4gKyAgICAgICAg LmNsYXNzX25hbWUgPSAiVnVsa2FuIFJlbmRlcmVyIiwKPiArICAgICAgICAuaXRlbV9uYW1lICA9 IGF2X2RlZmF1bHRfaXRlbV9uYW1lLAo+ICsgICAgICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElM X1ZFUlNJT05fSU5ULAo+ICt9Owo+ICsKPiArVmtSZW5kZXJlciAqdmtfZ2V0X3JlbmRlcmVyKHZv aWQpCj4gK3sKPiArICAgIFJlbmRlcmVyQ29udGV4dCAqY3R4ID0gYXZfbWFsbG9jeihzaXplb2Yo KmN0eCkpOwo+ICsgICAgVmtSZW5kZXJlciAqcmVuZGVyZXI7Cj4gKwo+ICsgICAgaWYgKCFjdHgp Cj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgICAgcmVuZGVyZXIgPSAmY3R4LT5hcGk7 Cj4gKyAgICByZW5kZXJlci0+Y2xhc3MgPSAmdnVsa2FuX3JlbmRlcmVyX2NsYXNzOwo+ICsgICAg cmVuZGVyZXItPmdldF9od19kZXYgPSBnZXRfaHdfZGV2Owo+ICsgICAgcmVuZGVyZXItPmNyZWF0 ZSA9IGNyZWF0ZTsKPiArICAgIHJlbmRlcmVyLT5kaXNwbGF5ID0gZGlzcGxheTsKPiArICAgIHJl bmRlcmVyLT5yZXNpemUgPSByZXNpemU7Cj4gKyAgICByZW5kZXJlci0+ZGVzdHJveSA9IGRlc3Ry b3k7Cj4gKwo+ICsgICAgcmV0dXJuIHJlbmRlcmVyOwo+ICt9Cj4gKwo+ICsjZWxzZQo+ICsKPiAr VmtSZW5kZXJlciAqdmtfZ2V0X3JlbmRlcmVyKHZvaWQpCj4gK3sKPiArICAgIHJldHVybiBOVUxM Owo+ICt9Cj4gKwo+ICsjZW5kaWYKPiArCj4gK2ludCB2a19yZW5kZXJlcl9jcmVhdGUoVmtSZW5k ZXJlciAqcmVuZGVyZXIsIFNETF9XaW5kb3cgKndpbmRvdywKPiArICAgICAgICAgICAgICAgICAg ICAgICBBVkRpY3Rpb25hcnkgKm9wdCkKPiArewo+ICsgICAgcmV0dXJuIHJlbmRlcmVyLT5jcmVh dGUocmVuZGVyZXIsIHdpbmRvdywgb3B0KTsKPiArfQo+ICsKPiAraW50IHZrX3JlbmRlcmVyX2dl dF9od19kZXYoVmtSZW5kZXJlciAqcmVuZGVyZXIsIEFWQnVmZmVyUmVmICoqZGV2KQo+ICt7Cj4g KyAgICByZXR1cm4gcmVuZGVyZXItPmdldF9od19kZXYocmVuZGVyZXIsIGRldik7Cj4gK30KPiAr Cj4gK2ludCB2a19yZW5kZXJlcl9kaXNwbGF5KFZrUmVuZGVyZXIgKnJlbmRlcmVyLCBBVkZyYW1l ICpmcmFtZSkKPiArewo+ICsgICAgcmV0dXJuIHJlbmRlcmVyLT5kaXNwbGF5KHJlbmRlcmVyLCBm cmFtZSk7Cj4gK30KPiArCj4gK2ludCB2a19yZW5kZXJlcl9yZXNpemUoVmtSZW5kZXJlciAqcmVu ZGVyZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkKPiArewo+ICsgICAgcmV0dXJuIHJlbmRlcmVy LT5yZXNpemUocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQpOwo+ICt9Cj4gKwo+ICt2b2lkIHZrX3Jl bmRlcmVyX2Rlc3Ryb3koVmtSZW5kZXJlciAqcmVuZGVyZXIpCj4gK3sKPiArICAgIHJlbmRlcmVy LT5kZXN0cm95KHJlbmRlcmVyKTsKPiArfQo+IGRpZmYgLS1naXQgYS9mZnRvb2xzL2ZmcGxheV9y ZW5kZXJlci5oIGIvZmZ0b29scy9mZnBsYXlfcmVuZGVyZXIuaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uZGQ4ZTljMDZlNwo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9mZnRvb2xzL2ZmcGxheV9yZW5kZXJlci5oCj4gQEAgLTAsMCArMSw0MSBAQAo+ICsvKgo+ICsg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQo+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+ ICsgKi8KPiArCj4gKyNpZm5kZWYgRkZUT09MU19GRlBMQVlfUkVOREVSRVJfSAo+ICsjZGVmaW5l IEZGVE9PTFNfRkZQTEFZX1JFTkRFUkVSX0gKPiArCj4gKyNpbmNsdWRlIDxTREwuaD4KPiArCj4g KyNpbmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKPiArCj4gK3R5cGVkZWYgc3RydWN0IFZrUmVu ZGVyZXIgVmtSZW5kZXJlcjsKPiArCj4gK1ZrUmVuZGVyZXIgKnZrX2dldF9yZW5kZXJlcih2b2lk KTsKPiArCj4gK2ludCB2a19yZW5kZXJlcl9jcmVhdGUoVmtSZW5kZXJlciAqcmVuZGVyZXIsIFNE TF9XaW5kb3cgKndpbmRvdywKPiArICAgICAgICAgICAgICAgICAgICAgICBBVkRpY3Rpb25hcnkg Km9wdCk7Cj4gKwo+ICtpbnQgdmtfcmVuZGVyZXJfZ2V0X2h3X2RldihWa1JlbmRlcmVyICpyZW5k ZXJlciwgQVZCdWZmZXJSZWYgKipkZXYpOwo+ICsKPiAraW50IHZrX3JlbmRlcmVyX2Rpc3BsYXko VmtSZW5kZXJlciAqcmVuZGVyZXIsIEFWRnJhbWUgKmZyYW1lKTsKPiArCj4gK2ludCB2a19yZW5k ZXJlcl9yZXNpemUoVmtSZW5kZXJlciAqcmVuZGVyZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCk7 Cj4gKwo+ICt2b2lkIHZrX3JlbmRlcmVyX2Rlc3Ryb3koVmtSZW5kZXJlciAqcmVuZGVyZXIpOwo+ ICsKPiArI2VuZGlmIC8qIEZGVE9PTFNfRkZQTEFZX1JFTkRFUkVSX0ggKi8KPiAtLSAKPiAyLjQy LjAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0 dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+IAo+IFRvIHVu c3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbAo+IGZmbXBlZy1kZXZlbC1yZXF1 ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGluZyBs aXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9y IGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1bnN1 YnNjcmliZSIuCg==