From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t v2 1/7] igt: lib/igt_crc: Split out CRC functionality Date: Mon, 25 Jun 2018 17:27:28 +0200 Message-ID: <20180625152728.GP2958@phenom.ffwll.local> References: <20170714151856.32041-1-liviu.dudau@arm.com> <20170714151856.32041-2-liviu.dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9553D6E23C for ; Mon, 25 Jun 2018 15:27:33 +0000 (UTC) Received: by mail-ed1-x52e.google.com with SMTP id x22-v6so1369690edq.12 for ; Mon, 25 Jun 2018 08:27:33 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20170714151856.32041-2-liviu.dudau@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Liviu Dudau Cc: Boris Brezillon , Intel GFX discussion , DRI devel List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBKdWwgMTQsIDIwMTcgYXQgMDQ6MTg6NTBQTSArMDEwMCwgTGl2aXUgRHVkYXUgd3Jv dGU6Cj4gRnJvbTogQnJpYW4gU3RhcmtleSA8YnJpYW4uc3RhcmtleUBhcm0uY29tPgo+IAo+IFNl cGFyYXRlIG91dCB0aGUgQ1JDIGNvZGUgZm9yIGJldHRlciBjb21wYXJ0bWVudGFsaXNhdGlvbi4g U2hvdWxkIGVhc2UKPiB0aGUgYWRkaXRpb24gb2YgbW9yZS9kaWZmZXJlbnQgQ1JDIHNvdXJjZXMg aW4gdGhlIGZ1dHVyZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBCcmlhbiBTdGFya2V5IDxicmlhbi5z dGFya2V5QGFybS5jb20+CgpOZWVkcyBhZGp1c3RlbWVudHMgdG8gZ3RrZG9jIEkgYXNzdW1lLCBw bHVzIGEgcHJvcGVyIGludHJvIHRleHQgZm9yCmlndF9jcmMuYy4gV2l0aCB0aGF0LCBhbmQgYXNz dW1pbmcgeW91IGRpZG4ndCBjaGFuZ2UgdGhlIGNvZGU6CgpBY2tlZC1ieTogRGFuaWVsIFZldHRl ciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiAtLS0KPiAgbGliL01ha2VmaWxlLnNvdXJjZXMg ICAgICAgICAgICAgIHwgICAyICsKPiAgbGliL2lndF9jaGFtZWxpdW0uaCAgICAgICAgICAgICAg IHwgICAxICsKPiAgbGliL2lndF9jcmMuYyAgICAgICAgICAgICAgICAgICAgIHwgNTYzICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGxpYi9pZ3RfY3JjLmggICAgICAg ICAgICAgICAgICAgICB8IDEyNSArKysrKysrKysKPiAgbGliL2lndF9kZWJ1Z2ZzLmMgICAgICAg ICAgICAgICAgIHwgNTQ3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBs aWIvaWd0X2RlYnVnZnMuaCAgICAgICAgICAgICAgICAgfCAgODEgLS0tLS0tCj4gIHRlc3RzL2No YW1lbGl1bS5jICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19hdG9taWNfdHJh bnNpdGlvbi5jICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19jY3MuYyAgICAgICAgICAgICAgICAg ICB8ICAgMSArCj4gIHRlc3RzL2ttc19jaHZfY3Vyc29yX2ZhaWwuYyAgICAgICB8ICAgMSArCj4g IHRlc3RzL2ttc19jcnRjX2JhY2tncm91bmRfY29sb3IuYyB8ICAgMSArCj4gIHRlc3RzL2ttc19j dXJzb3JfY3JjLmMgICAgICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19jdXJzb3JfbGVnYWN5 LmMgICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19kcmF3X2NyYy5jICAgICAgICAgICAgICB8 ICAgMSArCj4gIHRlc3RzL2ttc19mYmNfY3JjLmMgICAgICAgICAgICAgICB8ICAgMSArCj4gIHRl c3RzL2ttc19mbGlwX3RpbGluZy5jICAgICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19mcm9u dGJ1ZmZlcl90cmFja2luZy5jICB8ICAgMSArCj4gIHRlc3RzL2ttc19tbWFwX3dyaXRlX2NyYy5j ICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19tbWlvX3ZzX2NzX2ZsaXAuYyAgICAgICB8ICAg MSArCj4gIHRlc3RzL2ttc19waXBlX2NvbG9yLmMgICAgICAgICAgICB8ICAgMSArCj4gIHRlc3Rz L2ttc19waXBlX2NyY19iYXNpYy5jICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19wbGFuZS5j ICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19wbGFuZV9sb3dyZXMuYyAgICAg ICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19wbGFuZV9tdWx0aXBsZS5jICAgICAgICB8ICAgMSAr Cj4gIHRlc3RzL2ttc19wbGFuZV9zY2FsaW5nLmMgICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2tt c19wd3JpdGVfY3JjLmMgICAgICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc19yb3RhdGlvbl9j cmMuYyAgICAgICAgICB8ICAgMSArCj4gIHRlc3RzL2ttc191bml2ZXJzYWxfcGxhbmUuYyAgICAg ICB8ICAgMSArCj4gIHRvb2xzL2ludGVsX2Rpc3BsYXlfY3JjLmMgICAgICAgICB8ICAgMSArCj4g IDI5IGZpbGVzIGNoYW5nZWQsIDcxNCBpbnNlcnRpb25zKCspLCA2MjggZGVsZXRpb25zKC0pCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2NyYy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWIvaWd0X2NyYy5oCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGli L01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCA1M2ZkYjU0Yy4uY2ZiYTE1YzkgMTAwNjQ0Cj4gLS0t IGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IEBA IC0xMSw2ICsxMSw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAo+ICAJaWd0X2RlYnVnZnMuaAkJ XAo+ICAJaWd0X2F1eC5jCQlcCj4gIAlpZ3RfYXV4LmgJCVwKPiArCWlndF9jcmMuYwkJXAo+ICsJ aWd0X2NyYy5oCQlcCj4gIAlpZ3RfZWRpZF90ZW1wbGF0ZS5oCVwKPiAgCWlndF9ndC5jCQlcCj4g IAlpZ3RfZ3QuaAkJXAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5oIGIvbGliL2ln dF9jaGFtZWxpdW0uaAo+IGluZGV4IDgxMzIyYWQyLi5lYTVhYmMyZSAxMDA2NDQKPiAtLS0gYS9s aWIvaWd0X2NoYW1lbGl1bS5oCj4gKysrIGIvbGliL2lndF9jaGFtZWxpdW0uaAo+IEBAIC0zMSw2 ICszMSw3IEBACj4gICNlbmRpZgo+ICAKPiAgI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAi aWd0X2NyYy5oIgo+ICAjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICAKPiAgc3RydWN0IGNoYW1lbGl1 bTsKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9jcmMuYyBiL2xpYi9pZ3RfY3JjLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi45MWEwYjVhOAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9saWIvaWd0X2NyYy5jCj4gQEAgLTAsMCArMSw1NjMgQEAKPiArLyoKPiArICogQ29w eXJpZ2h0IMKpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAq Cj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0 d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks Cj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FS RS4KPiArICoKPiArICovCj4gKyNpbmNsdWRlIDxkaXJlbnQuaD4KPiArI2luY2x1ZGUgPGVycm5v Lmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArI2luY2x1 ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3Rh dC5oPgo+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaWd0X2F1eC5o Igo+ICsjaW5jbHVkZSAiaWd0X2NyYy5oIgo+ICsjaW5jbHVkZSAiaWd0X2NvcmUuaCIKPiArI2lu Y2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCj4gKyNpbmNsdWRlICJpZ3Rfa21zLmgiCj4gKwo+ICsvKioK PiArICogaWd0X2Fzc2VydF9jcmNfZXF1YWw6Cj4gKyAqIEBhOiBmaXJzdCBwaXBlIENSQyB2YWx1 ZQo+ICsgKiBAYjogc2Vjb25kIHBpcGUgQ1JDIHZhbHVlCj4gKyAqCj4gKyAqIENvbXBhcmVzIHR3 byBDUkMgdmFsdWVzIGFuZCBmYWlscyB0aGUgdGVzdGNhc2UgaWYgdGhleSBkb24ndCBtYXRjaCB3 aXRoCj4gKyAqIGlndF9mYWlsKCkuIE5vdGUgdGhhdCBkdWUgdG8gQ1JDIGNvbGxpc2lvbnMgQ1JD IGJhc2VkIHRlc3RjYXNlIGNhbiBvbmx5Cj4gKyAqIGFzc2VydCB0aGF0IENSQ3MgbWF0Y2gsIG5l dmVyIHRoYXQgdGhleSBhcmUgZGlmZmVyZW50LiBPdGhlcndpc2UgdGhlcmUgbWlnaHQKPiArICog YmUgcmFuZG9tIHRlc3RjYXNlIGZhaWx1cmVzIHdoZW4gZGlmZmVyZW50IHNjcmVlbiBjb250ZW50 cyBlbmQgdXAgd2l0aCB0aGUKPiArICogc2FtZSBDUkMgYnkgY2hhbmNlLgo+ICsgKi8KPiArdm9p ZCBpZ3RfYXNzZXJ0X2NyY19lcXVhbChjb25zdCBpZ3RfY3JjX3QgKmEsIGNvbnN0IGlndF9jcmNf dCAqYikKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGEtPm5fd29yZHM7 IGkrKykKPiArCQlpZ3RfYXNzZXJ0X2VxX3UzMihhLT5jcmNbaV0sIGItPmNyY1tpXSk7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBpZ3RfY3JjX3RvX3N0cmluZzoKPiArICogQGNyYzogcGlwZSBDUkMg dmFsdWUgdG8gcHJpbnQKPiArICoKPiArICogVGhpcyBmb3JtYXRzIEBjcmMgaW50byBhIHN0cmlu ZyBidWZmZXIgd2hpY2ggaXMgb3duZWQgYnkgaWd0X2NyY190b19zdHJpbmcoKS4KPiArICogVGhl IG5leHQgY2FsbCB3aWxsIG92ZXJyaWRlIHRoZSBidWZmZXIgYWdhaW4sIHdoaWNoIG1ha2VzIHRo aXMgbXVsdGl0aHJlYWRpbmcKPiArICogdW5zYWZlLgo+ICsgKgo+ICsgKiBUaGlzIHNob3VsZCBv bmx5IGV2ZXIgYmUgdXNlZCBmb3IgZGlhZ25vc3RpYyBkZWJ1ZyBvdXRwdXQuCj4gKyAqLwo+ICtj aGFyICppZ3RfY3JjX3RvX3N0cmluZyhpZ3RfY3JjX3QgKmNyYykKPiArewo+ICsJaW50IGk7Cj4g KwljaGFyIGJ1ZlsxMjhdID0geyAwIH07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGNyYy0+bl93 b3JkczsgaSsrKQo+ICsJCXNwcmludGYoYnVmICsgc3RybGVuKGJ1ZiksICIlMDh4ICIsIGNyYy0+ Y3JjW2ldKTsKPiArCj4gKwlyZXR1cm4gc3RyZHVwKGJ1Zik7Cj4gK30KPiArCj4gKyNkZWZpbmUg TUFYX0NSQ19FTlRSSUVTIDEwCj4gKyNkZWZpbmUgTUFYX0xJTkVfTEVOICgxMCArIDExICogTUFY X0NSQ19FTlRSSUVTICsgMSkKPiArCj4gKy8qICg2IGZpZWxkcywgOCBjaGFycyBlYWNoLCBzcGFj ZSBzZXBhcmF0ZWQgKDUpICsgJ1xuJykgKi8KPiArI2RlZmluZSBMRUdBQ1lfTElORV9MRU4gICAg ICAgKDYgKiA4ICsgNSArIDEpCj4gKwo+ICtzdHJ1Y3QgX2lndF9waXBlX2NyYyB7Cj4gKwlpbnQg ZmQ7Cj4gKwlpbnQgZGlyOwo+ICsJaW50IGN0bF9mZDsKPiArCWludCBjcmNfZmQ7Cj4gKwlpbnQg ZmxhZ3M7Cj4gKwlib29sIGlzX2xlZ2FjeTsKPiArCj4gKwllbnVtIHBpcGUgcGlwZTsKPiArCWVu dW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHNvdXJjZTsKPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBjaGFyICpwaXBlX2NyY19zb3VyY2VzW10gPSB7Cj4gKwkibm9uZSIsCj4gKwkicGxhbmUxIiwK PiArCSJwbGFuZTIiLAo+ICsJInBmIiwKPiArCSJwaXBlIiwKPiArCSJUViIsCj4gKwkiRFAtQiIs Cj4gKwkiRFAtQyIsCj4gKwkiRFAtRCIsCj4gKwkiYXV0byIKPiArfTsKPiArCj4gK3N0YXRpYyBj b25zdCBjaGFyICpwaXBlX2NyY19zb3VyY2VfbmFtZShlbnVtIGludGVsX3BpcGVfY3JjX3NvdXJj ZSBzb3VyY2UpCj4gK3sKPiArICAgICAgICByZXR1cm4gcGlwZV9jcmNfc291cmNlc1tzb3VyY2Vd Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpZ3RfcGlwZV9jcmNfZG9fc3RhcnQoaWd0X3BpcGVf Y3JjX3QgKnBpcGVfY3JjKQo+ICt7Cj4gKwljaGFyIGJ1Zls2NF07Cj4gKwo+ICsJLyogU3RvcCBm aXJzdCBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGxpbmdlcmluZyBzdGF0ZSBsZWZ0 LiAqLwo+ICsJaWd0X3BpcGVfY3JjX3N0b3AocGlwZV9jcmMpOwo+ICsKPiArCWlmIChwaXBlX2Ny Yy0+aXNfbGVnYWN5KQo+ICsJCXNwcmludGYoYnVmLCAicGlwZSAlcyAlcyIsIGttc3Rlc3RfcGlw ZV9uYW1lKHBpcGVfY3JjLT5waXBlKSwKPiArCQkJcGlwZV9jcmNfc291cmNlX25hbWUocGlwZV9j cmMtPnNvdXJjZSkpOwo+ICsJZWxzZQo+ICsJCXNwcmludGYoYnVmLCAiJXMiLCBwaXBlX2NyY19z b3VyY2VfbmFtZShwaXBlX2NyYy0+c291cmNlKSk7Cj4gKwo+ICsJaWd0X2Fzc2VydF9lcSh3cml0 ZShwaXBlX2NyYy0+Y3RsX2ZkLCBidWYsIHN0cmxlbihidWYpKSwgc3RybGVuKGJ1ZikpOwo+ICsK PiArCWlmICghcGlwZV9jcmMtPmlzX2xlZ2FjeSkgewo+ICsJCWludCBlcnI7Cj4gKwo+ICsJCXNw cmludGYoYnVmLCAiY3J0Yy0lZC9jcmMvZGF0YSIsIHBpcGVfY3JjLT5waXBlKTsKPiArCQllcnIg PSAwOwo+ICsKPiArCQlwaXBlX2NyYy0+Y3JjX2ZkID0gb3BlbmF0KHBpcGVfY3JjLT5kaXIsIGJ1 ZiwgcGlwZV9jcmMtPmZsYWdzKTsKPiArCQlpZiAocGlwZV9jcmMtPmNyY19mZCA8IDApCj4gKwkJ CWVyciA9IC1lcnJubzsKPiArCj4gKwkJaWYgKGVyciA9PSAtRUlOVkFMKQo+ICsJCQlyZXR1cm4g ZmFsc2U7Cj4gKwo+ICsJCWlndF9hc3NlcnRfZXEoZXJyLCAwKTsKPiArCX0KPiArCj4gKwllcnJu byA9IDA7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaWd0X3BpcGVf Y3JjX3BpcGVfb2ZmKGludCBmZCwgZW51bSBwaXBlIHBpcGUpCj4gK3sKPiArCWNoYXIgYnVmWzMy XTsKPiArCj4gKwlzcHJpbnRmKGJ1ZiwgInBpcGUgJXMgbm9uZSIsIGttc3Rlc3RfcGlwZV9uYW1l KHBpcGUpKTsKPiArCWlndF9hc3NlcnRfZXEod3JpdGUoZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpLCBz dHJsZW4oYnVmKSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGlndF9waXBlX2NyY19yZXNldChp bnQgZHJtX2ZkKQo+ICt7Cj4gKwlzdHJ1Y3QgZGlyZW50ICpkaXJlbnQ7Cj4gKwljb25zdCBjaGFy ICpjbWQgPSAibm9uZSI7Cj4gKwlib29sIGRvbmUgPSBmYWxzZTsKPiArCURJUiAqZGlyOwo+ICsJ aW50IGZkaXI7Cj4gKwlpbnQgZmQ7Cj4gKwo+ICsJZmRpciA9IGlndF9kZWJ1Z2ZzX2Rpcihkcm1f ZmQpOwo+ICsJaWYgKGZkaXIgPCAwKQo+ICsJCXJldHVybjsKPiArCj4gKwlkaXIgPSBmZG9wZW5k aXIoZmRpcik7Cj4gKwlpZiAoIWRpcikgewo+ICsJCWNsb3NlKGZkaXIpOwo+ICsJCXJldHVybjsK PiArCX0KPiArCj4gKwl3aGlsZSAoKGRpcmVudCA9IHJlYWRkaXIoZGlyKSkpIHsKPiArCQljaGFy IGJ1ZlsxMjhdOwo+ICsKPiArCQlpZiAoc3RyY21wKGRpcmVudC0+ZF9uYW1lLCAiY3J0Yy0iKSAh PSAwKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJc3ByaW50ZihidWYsICIlcy9jcmMvY29udHJv bCIsIGRpcmVudC0+ZF9uYW1lKTsKPiArCQlmZCA9IG9wZW5hdChmZGlyLCBidWYsIE9fV1JPTkxZ KTsKPiArCQlpZiAoZmQgPCAwKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWd0X2Fzc2VydF9l cSh3cml0ZShmZCwgY21kLCBzdHJsZW4oY21kKSksIHN0cmxlbihjbWQpKTsKPiArCQljbG9zZShm ZCk7Cj4gKwo+ICsJCWRvbmUgPSB0cnVlOwo+ICsJfQo+ICsJY2xvc2VkaXIoZGlyKTsKPiArCj4g KwlpZiAoIWRvbmUpIHsKPiArCQlmZCA9IG9wZW5hdChmZGlyLCAiaTkxNV9kaXNwbGF5X2NydGNf Y3RsIiwgT19XUk9OTFkpOwo+ICsJCWlmIChmZCAhPSAtMSkgewo+ICsJCQlpZ3RfcGlwZV9jcmNf cGlwZV9vZmYoZmQsIFBJUEVfQSk7Cj4gKwkJCWlndF9waXBlX2NyY19waXBlX29mZihmZCwgUElQ RV9CKTsKPiArCQkJaWd0X3BpcGVfY3JjX3BpcGVfb2ZmKGZkLCBQSVBFX0MpOwo+ICsKPiArCQkJ Y2xvc2UoZmQpOwo+ICsJCX0KPiArCX0KPiArCj4gKwljbG9zZShmZGlyKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgcGlwZV9jcmNfZXhpdF9oYW5kbGVyKGludCBzaWcpCj4gK3sKPiArCXN0cnVj dCBkaXJlbnQgKmRpcmVudDsKPiArCWNoYXIgYnVmWzEyOF07Cj4gKwlESVIgKmRpcjsKPiArCWlu dCBmZDsKPiArCj4gKwlkaXIgPSBvcGVuZGlyKCIvZGV2L2RyaSIpOwo+ICsJaWYgKCFkaXIpCj4g KwkJcmV0dXJuOwo+ICsKPiArCS8qCj4gKwkgKiBUcnkgdG8gcmVzZXQgQ1JDIGNhcHR1cmUgZm9y IGFsbCBEUk0gZGV2aWNlcywgdGhpcyBpcyBvbmx5IG5lZWRlZAo+ICsJICogZm9yIHRoZSBsZWdh Y3kgQ1JDIEFCSSBhbmQgY2FuIGJlIGNvbXBsZXRlbHkgcmVtb3ZlZCBvbmNlIHRoZQo+ICsJICog bGVnYWN5IGNvZGVwYXRocyBhcmUgcmVtb3ZlZC4KPiArCSAqLwo+ICsJd2hpbGUgKChkaXJlbnQg PSByZWFkZGlyKGRpcikpKSB7Cj4gKwkJaWYgKHN0cm5jbXAoZGlyZW50LT5kX25hbWUsICJjYXJk IiwgNCkgIT0gMCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXNwcmludGYoYnVmLCAiL2Rldi9k cmkvJXMiLCBkaXJlbnQtPmRfbmFtZSk7Cj4gKwkJZmQgPSBvcGVuKGJ1ZiwgT19XUk9OTFkpOwo+ ICsKPiArCQlpZ3RfcGlwZV9jcmNfcmVzZXQoZmQpOwo+ICsKPiArCQljbG9zZShmZCk7Cj4gKwl9 Cj4gKwljbG9zZWRpcihkaXIpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0X3JlcXVpcmVfcGlw ZV9jcmM6Cj4gKyAqCj4gKyAqIENvbnZlbmllbmNlIGhlbHBlciB0byBjaGVjayB3aGV0aGVyIHBp cGUgQ1JDIGNhcHR1cmluZyBpcyBzdXBwb3J0ZWQgYnkgdGhlCj4gKyAqIGtlcm5lbC4gVXNlcyBp Z3Rfc2tpcCB0byBhdXRvbWF0aWNhbGx5IHNraXAgdGhlIHRlc3Qvc3VidGVzdCBpZiB0aGlzIGlz bid0Cj4gKyAqIHRoZSBjYXNlLgo+ICsgKi8KPiArdm9pZCBpZ3RfcmVxdWlyZV9waXBlX2NyYyhp bnQgZmQpCj4gK3sKPiArCWNvbnN0IGNoYXIgKmNtZCA9ICJwaXBlIEEgbm9uZSI7Cj4gKwlpbnQg Y3RsLCB3cml0dGVuOwo+ICsKPiArCWN0bCA9IGlndF9kZWJ1Z2ZzX29wZW4oZmQsICJjcnRjLTAv Y3JjL2NvbnRyb2wiLCBPX1JET05MWSk7Cj4gKwlpZiAoY3RsIDwgMCkgewo+ICsJCWN0bCA9IGln dF9kZWJ1Z2ZzX29wZW4oZmQsICJpOTE1X2Rpc3BsYXlfY3JjX2N0bCIsIE9fV1JPTkxZKTsKPiAr CQlpZ3RfcmVxdWlyZV9mKGN0bCwKPiArCQkJICAgICAgIk5vIGRpc3BsYXlfY3JjX2N0bCBmb3Vu ZCwga2VybmVsIHRvbyBvbGRcbiIpOwo+ICsKPiArCQl3cml0dGVuID0gd3JpdGUoY3RsLCBjbWQs IHN0cmxlbihjbWQpKTsKPiArCQlpZ3RfcmVxdWlyZV9mKHdyaXR0ZW4gPCAwLAo+ICsJCQkgICAg ICAiQ1JDcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm1cbiIpOwo+ICsJfQo+ICsJY2xv c2UoY3RsKTsKPiArfQo+ICsKPiArc3RhdGljIGlndF9waXBlX2NyY190ICoKPiArcGlwZV9jcmNf bmV3KGludCBmZCwgZW51bSBwaXBlIHBpcGUsIGVudW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHNv dXJjZSwgaW50IGZsYWdzKQo+ICt7Cj4gKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gKwlj aGFyIGJ1ZlsxMjhdOwo+ICsJaW50IGRlYnVnZnM7Cj4gKwo+ICsJZGVidWdmcyA9IGlndF9kZWJ1 Z2ZzX2RpcihmZCk7Cj4gKwlpZ3RfYXNzZXJ0KGRlYnVnZnMgIT0gLTEpOwo+ICsKPiArCWlndF9p bnN0YWxsX2V4aXRfaGFuZGxlcihwaXBlX2NyY19leGl0X2hhbmRsZXIpOwo+ICsKPiArCXBpcGVf Y3JjID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgX2lndF9waXBlX2NyYykpOwo+ICsKPiArCXNw cmludGYoYnVmLCAiY3J0Yy0lZC9jcmMvY29udHJvbCIsIHBpcGUpOwo+ICsJcGlwZV9jcmMtPmN0 bF9mZCA9IG9wZW5hdChkZWJ1Z2ZzLCBidWYsIE9fV1JPTkxZKTsKPiArCWlmIChwaXBlX2NyYy0+ Y3RsX2ZkID09IC0xKSB7Cj4gKwkJcGlwZV9jcmMtPmN0bF9mZCA9IG9wZW5hdChkZWJ1Z2ZzLAo+ ICsJCQkJCSAgImk5MTVfZGlzcGxheV9jcmNfY3RsIiwgT19XUk9OTFkpOwo+ICsJCWlndF9hc3Nl cnQocGlwZV9jcmMtPmN0bF9mZCAhPSAtMSk7Cj4gKwkJcGlwZV9jcmMtPmlzX2xlZ2FjeSA9IHRy dWU7Cj4gKwl9Cj4gKwo+ICsJaWYgKHBpcGVfY3JjLT5pc19sZWdhY3kpIHsKPiArCQlzcHJpbnRm KGJ1ZiwgImk5MTVfcGlwZV8lc19jcmMiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSk7Cj4gKwkJ cGlwZV9jcmMtPmNyY19mZCA9IG9wZW5hdChkZWJ1Z2ZzLCBidWYsIGZsYWdzKTsKPiArCQlpZ3Rf YXNzZXJ0KHBpcGVfY3JjLT5jcmNfZmQgIT0gLTEpOwo+ICsJCWlndF9kZWJ1ZygiVXNpbmcgbGVn YWN5IGZyYW1lIENSQyBBQklcbiIpOwo+ICsJfSBlbHNlIHsKPiArCQlwaXBlX2NyYy0+Y3JjX2Zk ID0gLTE7Cj4gKwkJaWd0X2RlYnVnKCJVc2luZyBnZW5lcmljIGZyYW1lIENSQyBBQklcbiIpOwo+ ICsJfQo+ICsKPiArCXBpcGVfY3JjLT5mZCA9IGZkOwo+ICsJcGlwZV9jcmMtPmRpciA9IGRlYnVn ZnM7Cj4gKwlwaXBlX2NyYy0+cGlwZSA9IHBpcGU7Cj4gKwlwaXBlX2NyYy0+c291cmNlID0gc291 cmNlOwo+ICsJcGlwZV9jcmMtPmZsYWdzID0gZmxhZ3M7Cj4gKwo+ICsJcmV0dXJuIHBpcGVfY3Jj Owo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0X3BpcGVfY3JjX25ldzoKPiArICogQHBpcGU6IGRp c3BsYXkgcGlwZSB0byB1c2UgYXMgc291cmNlCj4gKyAqIEBzb3VyY2U6IENSQyB0YXAgcG9pbnQg dG8gdXNlIGFzIHNvdXJjZQo+ICsgKgo+ICsgKiBUaGlzIHNldHMgdXAgYSBuZXcgcGlwZSBDUkMg Y2FwdHVyZSBvYmplY3QgZm9yIHRoZSBnaXZlbiBAcGlwZSBhbmQgQHNvdXJjZQo+ICsgKiBpbiBi bG9ja2luZyBtb2RlLgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBBIHBpcGUgQ1JDIG9iamVjdCBmb3Ig dGhlIGdpdmVuIEBwaXBlIGFuZCBAc291cmNlLiBUaGUgbGlicmFyeQo+ICsgKiBhc3N1bWVzIHRo YXQgdGhlIHNvdXJjZSBpcyBhbHdheXMgYXZhaWxhYmxlIHNpbmNlIHJlY2VudCBrZXJuZWxzIHN1 cHBvcnQgYXQKPiArICogbGVhc3QgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8gZXZlcnl3aGVy ZS4KPiArICovCj4gK2lndF9waXBlX2NyY190ICoKPiAraWd0X3BpcGVfY3JjX25ldyhpbnQgZmQs IGVudW0gcGlwZSBwaXBlLCBlbnVtIGludGVsX3BpcGVfY3JjX3NvdXJjZSBzb3VyY2UpCj4gK3sK PiArCXJldHVybiBwaXBlX2NyY19uZXcoZmQsIHBpcGUsIHNvdXJjZSwgT19SRE9OTFkpOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogaWd0X3BpcGVfY3JjX25ld19ub25ibG9jazoKPiArICogQHBpcGU6 IGRpc3BsYXkgcGlwZSB0byB1c2UgYXMgc291cmNlCj4gKyAqIEBzb3VyY2U6IENSQyB0YXAgcG9p bnQgdG8gdXNlIGFzIHNvdXJjZQo+ICsgKgo+ICsgKiBUaGlzIHNldHMgdXAgYSBuZXcgcGlwZSBD UkMgY2FwdHVyZSBvYmplY3QgZm9yIHRoZSBnaXZlbiBAcGlwZSBhbmQgQHNvdXJjZQo+ICsgKiBp biBub25ibG9ja2luZyBtb2RlLgo+ICsgKgo+ICsgKiBSZXR1cm5zOiBBIHBpcGUgQ1JDIG9iamVj dCBmb3IgdGhlIGdpdmVuIEBwaXBlIGFuZCBAc291cmNlLiBUaGUgbGlicmFyeQo+ICsgKiBhc3N1 bWVzIHRoYXQgdGhlIHNvdXJjZSBpcyBhbHdheXMgYXZhaWxhYmxlIHNpbmNlIHJlY2VudCBrZXJu ZWxzIHN1cHBvcnQgYXQKPiArICogbGVhc3QgSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8gZXZl cnl3aGVyZS4KPiArICovCj4gK2lndF9waXBlX2NyY190ICoKPiAraWd0X3BpcGVfY3JjX25ld19u b25ibG9jayhpbnQgZmQsIGVudW0gcGlwZSBwaXBlLCBlbnVtIGludGVsX3BpcGVfY3JjX3NvdXJj ZSBzb3VyY2UpCj4gK3sKPiArCXJldHVybiBwaXBlX2NyY19uZXcoZmQsIHBpcGUsIHNvdXJjZSwg T19SRE9OTFkgfCBPX05PTkJMT0NLKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9waXBlX2Ny Y19mcmVlOgo+ICsgKiBAcGlwZV9jcmM6IHBpcGUgQ1JDIG9iamVjdAo+ICsgKgo+ICsgKiBGcmVl cyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBAcGlwZV9jcmMuCj4gKyAqLwo+ICt2b2lk IGlndF9waXBlX2NyY19mcmVlKGlndF9waXBlX2NyY190ICpwaXBlX2NyYykKPiArewo+ICsJaWYg KCFwaXBlX2NyYykKPiArCQlyZXR1cm47Cj4gKwo+ICsJY2xvc2UocGlwZV9jcmMtPmN0bF9mZCk7 Cj4gKwljbG9zZShwaXBlX2NyYy0+Y3JjX2ZkKTsKPiArCWNsb3NlKHBpcGVfY3JjLT5kaXIpOwo+ ICsJZnJlZShwaXBlX2NyYyk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHBpcGVfY3JjX2luaXRf ZnJvbV9zdHJpbmcoaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjLCBpZ3RfY3JjX3QgKmNyYywKPiAr CQkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUpCj4gK3sKPiArCWludCBuLCBpOwo+ICsJY29uc3Qg Y2hhciAqYnVmOwo+ICsKPiArCWlmIChwaXBlX2NyYy0+aXNfbGVnYWN5KSB7Cj4gKwkJY3JjLT5o YXNfdmFsaWRfZnJhbWUgPSB0cnVlOwo+ICsJCWNyYy0+bl93b3JkcyA9IDU7Cj4gKwkJbiA9IHNz Y2FuZihsaW5lLCAiJTh1ICU4eCAlOHggJTh4ICU4eCAlOHgiLCAmY3JjLT5mcmFtZSwKPiArCQkJ ICAgJmNyYy0+Y3JjWzBdLCAmY3JjLT5jcmNbMV0sICZjcmMtPmNyY1syXSwKPiArCQkJICAgJmNy Yy0+Y3JjWzNdLCAmY3JjLT5jcmNbNF0pOwo+ICsJCXJldHVybiBuID09IDY7Cj4gKwl9Cj4gKwo+ ICsJaWYgKHN0cm5jbXAobGluZSwgIlhYWFhYWFhYWFgiLCAxMCkgPT0gMCkKPiArCQljcmMtPmhh c192YWxpZF9mcmFtZSA9IGZhbHNlOwo+ICsJZWxzZSB7Cj4gKwkJY3JjLT5oYXNfdmFsaWRfZnJh bWUgPSB0cnVlOwo+ICsJCWNyYy0+ZnJhbWUgPSBzdHJ0b3VsKGxpbmUsIE5VTEwsIDE2KTsKPiAr CX0KPiArCj4gKwlidWYgPSBsaW5lICsgMTA7Cj4gKwlmb3IgKGkgPSAwOyAqYnVmICE9ICdcbic7 IGkrKywgYnVmICs9IDExKQo+ICsJCWNyYy0+Y3JjW2ldID0gc3RydG91bChidWYsIE5VTEwsIDE2 KTsKPiArCj4gKwljcmMtPm5fd29yZHMgPSBpOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHJlYWRfY3JjKGlndF9waXBlX2NyY190ICpwaXBlX2NyYywgaWd0X2Ny Y190ICpvdXQpCj4gK3sKPiArCXNzaXplX3QgYnl0ZXNfcmVhZDsKPiArCWNoYXIgYnVmW01BWF9M SU5FX0xFTiArIDFdOwo+ICsJc2l6ZV90IHJlYWRfbGVuOwo+ICsKPiArCWlmIChwaXBlX2NyYy0+ aXNfbGVnYWN5KQo+ICsJCXJlYWRfbGVuID0gTEVHQUNZX0xJTkVfTEVOOwo+ICsJZWxzZQo+ICsJ CXJlYWRfbGVuID0gTUFYX0xJTkVfTEVOOwo+ICsKPiArCWlndF9zZXRfdGltZW91dCg1LCAiQ1JD IHJlYWRpbmciKTsKPiArCWJ5dGVzX3JlYWQgPSByZWFkKHBpcGVfY3JjLT5jcmNfZmQsICZidWYs IHJlYWRfbGVuKTsKPiArCWlndF9yZXNldF90aW1lb3V0KCk7Cj4gKwo+ICsJaWYgKGJ5dGVzX3Jl YWQgPCAwICYmIGVycm5vID09IEVBR0FJTikKPiArCQlpZ3RfYXNzZXJ0KHBpcGVfY3JjLT5mbGFn cyAmIE9fTk9OQkxPQ0spOwo+ICsKPiArCWlmIChieXRlc19yZWFkIDwgMCkKPiArCQlieXRlc19y ZWFkID0gMDsKPiArCj4gKwlidWZbYnl0ZXNfcmVhZF0gPSAnXDAnOwo+ICsKPiArCWlmIChieXRl c19yZWFkICYmICFwaXBlX2NyY19pbml0X2Zyb21fc3RyaW5nKHBpcGVfY3JjLCBvdXQsIGJ1Zikp Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIGJ5dGVzX3JlYWQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHJlYWRfb25lX2NyYyhpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmMsIGln dF9jcmNfdCAqb3V0KQo+ICt7Cj4gKwl3aGlsZSAocmVhZF9jcmMocGlwZV9jcmMsIG91dCkgPT0g MCkKPiArCQl1c2xlZXAoMTAwMCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfcGlwZV9jcmNf c3RhcnQ6Cj4gKyAqIEBwaXBlX2NyYzogcGlwZSBDUkMgb2JqZWN0Cj4gKyAqCj4gKyAqIFN0YXJ0 cyB0aGUgQ1JDIGNhcHR1cmUgcHJvY2VzcyBvbiBAcGlwZV9jcmMuCj4gKyAqLwo+ICt2b2lkIGln dF9waXBlX2NyY19zdGFydChpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmMpCj4gK3sKPiArCWlndF9j cmNfdCBjcmM7Cj4gKwo+ICsJaWd0X2Fzc2VydChpZ3RfcGlwZV9jcmNfZG9fc3RhcnQocGlwZV9j cmMpKTsKPiArCj4gKwlpZiAocGlwZV9jcmMtPmlzX2xlZ2FjeSkgewo+ICsJCS8qCj4gKwkJICog Rm9yIHNvbWUgbm8geWV0IGlkZW50aWZpZWQgcmVhc29uLCB0aGUgZmlyc3QgQ1JDIGlzCj4gKwkJ ICogYm9ua2Vycy4gU28gbGV0J3MganVzdCB3YWl0IGZvciB0aGUgbmV4dCB2YmxhbmsgYW5kIHJl YWQKPiArCQkgKiBvdXQgdGhlIGJ1Z2d5IHJlc3VsdC4KPiArCQkgKgo+ICsJCSAqIE9uIENIViBz b21ldGltZXMgdGhlIHNlY29uZCBDUkMgaXMgYm9ua2VycyBhcyB3ZWxsLCBzbwo+ICsJCSAqIGRv bid0IHRydXN0IHRoYXQgb25lIGVpdGhlci4KPiArCQkgKi8KPiArCQlyZWFkX29uZV9jcmMocGlw ZV9jcmMsICZjcmMpOwo+ICsJCXJlYWRfb25lX2NyYyhwaXBlX2NyYywgJmNyYyk7Cj4gKwl9Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfcGlwZV9jcmNfc3RvcDoKPiArICogQHBpcGVfY3JjOiBw aXBlIENSQyBvYmplY3QKPiArICoKPiArICogU3RvcHMgdGhlIENSQyBjYXB0dXJlIHByb2Nlc3Mg b24gQHBpcGVfY3JjLgo+ICsgKi8KPiArdm9pZCBpZ3RfcGlwZV9jcmNfc3RvcChpZ3RfcGlwZV9j cmNfdCAqcGlwZV9jcmMpCj4gK3sKPiArCWNoYXIgYnVmWzMyXTsKPiArCj4gKwlpZiAocGlwZV9j cmMtPmlzX2xlZ2FjeSkgewo+ICsJCXNwcmludGYoYnVmLCAicGlwZSAlcyBub25lIiwga21zdGVz dF9waXBlX25hbWUocGlwZV9jcmMtPnBpcGUpKTsKPiArCQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKHBp cGVfY3JjLT5jdGxfZmQsIGJ1Ziwgc3RybGVuKGJ1ZikpLAo+ICsJCQkgICAgICBzdHJsZW4oYnVm KSk7Cj4gKwl9IGVsc2Ugewo+ICsJCWNsb3NlKHBpcGVfY3JjLT5jcmNfZmQpOwo+ICsJCXBpcGVf Y3JjLT5jcmNfZmQgPSAtMTsKPiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9waXBlX2Ny Y19nZXRfY3JjczoKPiArICogQHBpcGVfY3JjOiBwaXBlIENSQyBvYmplY3QKPiArICogQG5fY3Jj czogbnVtYmVyIG9mIENSQ3MgdG8gY2FwdHVyZQo+ICsgKiBAb3V0X2NyY3M6IGJ1ZmZlciBwb2lu dGVyIGZvciB0aGUgY2FwdHVyZWQgQ1JDIHZhbHVlcwo+ICsgKgo+ICsgKiBSZWFkIHVwIHRvIEBu X2NyY3MgZnJvbSBAcGlwZV9jcmMuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYmxvY2ssIGFuZCB3 aWxsCj4gKyAqIHJldHVybiBlYXJseSBpZiBub3QgZW5vdWdoIENSQ3MgY2FuIGJlIGNhcHR1cmVk LCBpZiBAcGlwZV9jcmMgaGFzIGJlZW4KPiArICogb3BlbmVkIHVzaW5nIGlndF9waXBlX2NyY19u ZXdfbm9uYmxvY2soKS4gSXQgd2lsbCBibG9jayB1bnRpbCBAbl9jcmNzIGFyZQo+ICsgKiByZXRy aWV2ZWQgaWYgQHBpcGVfY3JjIGhhcyBiZWVuIG9wZW5lZCB1c2luZyBpZ3RfcGlwZV9jcmNfbmV3 KCkuIEBvdXRfY3JjcyBpcwo+ICsgKiBhbGxvY2VkIGJ5IHRoaXMgZnVuY3Rpb24gYW5kIG11c3Qg YmUgcmVsZWFzZWQgd2l0aCBmcmVlKCkgYnkgdGhlIGNhbGxlci4KPiArICoKPiArICogQ2FsbGVy cyBtdXN0IHN0YXJ0IGFuZCBzdG9wIHRoZSBjYXB0dXJpbmcgdGhlbXNlbHZlcyBieSBjYWxsaW5n Cj4gKyAqIGlndF9waXBlX2NyY19zdGFydCgpIGFuZCBpZ3RfcGlwZV9jcmNfc3RvcCgpLiBGb3Ig b25lLXNob3QgQ1JDIGNvbGxlY3RpbmcKPiArICogbG9vayBhdCBpZ3RfcGlwZV9jcmNfY29sbGVj dF9jcmMoKS4KPiArICoKPiArICogUmV0dXJuczoKPiArICogVGhlIG51bWJlciBvZiBDUkNzIGNh cHR1cmVkLiBTaG91bGQgYmUgZXF1YWwgdG8gQG5fY3JjcyBpbiBibG9ja2luZyBtb2RlLCBidXQK PiArICogY2FuIGJlIGxlc3MgKGV2ZW4gemVybykgaW4gbm9uLWJsb2NraW5nIG1vZGUuCj4gKyAq Lwo+ICtpbnQKPiAraWd0X3BpcGVfY3JjX2dldF9jcmNzKGlndF9waXBlX2NyY190ICpwaXBlX2Ny YywgaW50IG5fY3JjcywKPiArCQkgICAgICBpZ3RfY3JjX3QgKipvdXRfY3JjcykKPiArewo+ICsJ aWd0X2NyY190ICpjcmNzOwo+ICsJaW50IG4gPSAwOwo+ICsKPiArCWNyY3MgPSBjYWxsb2Mobl9j cmNzLCBzaXplb2YoaWd0X2NyY190KSk7Cj4gKwo+ICsJZG8gewo+ICsJCWlndF9jcmNfdCAqY3Jj ID0gJmNyY3Nbbl07Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJcmV0ID0gcmVhZF9jcmMocGlwZV9j cmMsIGNyYyk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCWNvbnRpbnVlOwo+ICsJCWlmIChyZXQg PT0gMCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCW4rKzsKPiArCX0gd2hpbGUgKG4gPCBuX2NyY3Mp Owo+ICsKPiArCSpvdXRfY3JjcyA9IGNyY3M7Cj4gKwlyZXR1cm4gbjsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgY3JjX3Nhbml0eV9jaGVja3MoaWd0X2NyY190ICpjcmMpCj4gK3sKPiArCWludCBp Owo+ICsJYm9vbCBhbGxfemVybyA9IHRydWU7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGNyYy0+ bl93b3JkczsgaSsrKSB7Cj4gKwkJaWd0X3dhcm5fb25fZihjcmMtPmNyY1tpXSA9PSAweGZmZmZm ZmZmLAo+ICsJCQkgICAgICAiU3VzcGljaW91cyBDUkM6IGl0IGxvb2tzIGxpa2UgdGhlIENSQyAi Cj4gKwkJCSAgICAgICJyZWFkIGJhY2sgd2FzIGZyb20gYSByZWdpc3RlciBpbiBhIHBvd2VyZWQg Igo+ICsJCQkgICAgICAiZG93biB3ZWxsXG4iKTsKPiArCQlpZiAoY3JjLT5jcmNbaV0pCj4gKwkJ CWFsbF96ZXJvID0gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJaWd0X3dhcm5fb25fZihhbGxfemVybywg IlN1c3BpY2lvdXMgQ1JDOiBBbGwgdmFsdWVzIGFyZSAwLlxuIik7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiBpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmM6Cj4gKyAqIEBwaXBlX2NyYzogcGlwZSBDUkMg b2JqZWN0Cj4gKyAqIEBvdXRfY3JjOiBidWZmZXIgZm9yIHRoZSBjYXB0dXJlZCBDUkMgdmFsdWVz Cj4gKyAqCj4gKyAqIFJlYWQgYSBzaW5nbGUgQ1JDIGZyb20gQHBpcGVfY3JjLiBUaGlzIGZ1bmN0 aW9uIGJsb2NrcyB1bnRpbCB0aGUgQ1JDIGlzCj4gKyAqIHJldHJpZXZlZCwgaXJyZXNwZWN0aXZl IG9mIHdoZXRoZXIgQHBpcGVfY3JjIGhhcyBiZWVuIG9wZW5lZCB3aXRoCj4gKyAqIGlndF9waXBl X2NyY19uZXcoKSBvciBpZ3RfcGlwZV9jcmNfbmV3X25vbmJsb2NrKCkuICBAb3V0X2NyYyBtdXN0 IGJlCj4gKyAqIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVyLgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0 aW9uIHRha2VzIGNhcmUgb2YgdGhlIHBpcGVfY3JjIGJvb2sta2VlcGluZywgaXQgd2lsbCBzdGFy dC9zdG9wCj4gKyAqIHRoZSBjb2xsZWN0aW9uIG9mIHRoZSBDUkMuCj4gKyAqCj4gKyAqIFRoaXMg ZnVuY3Rpb24gYWxzbyBjYWxscyB0aGUgaW50ZXJhY3RpdmUgZGVidWcgd2l0aCB0aGUgImNyYyIg ZG9tYWluLCBzbyB5b3UKPiArICogY2FuIG1ha2UgdXNlIG9mIHRoaXMgZmVhdHVyZSB0byBhY3R1 YWxseSBzZWUgdGhlIHNjcmVlbiB0aGF0IGlzIGJlaW5nIENSQydkLgo+ICsgKgo+ICsgKiBGb3Ig Y29udGludW91cyBDUkMgY29sbGVjdGlvbiBsb29rIGF0IGlndF9waXBlX2NyY19zdGFydCgpLAo+ ICsgKiBpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MoKSBhbmQgaWd0X3BpcGVfY3JjX3N0b3AoKS4KPiAr ICovCj4gK3ZvaWQgaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGlndF9waXBlX2NyY190ICpwaXBl X2NyYywgaWd0X2NyY190ICpvdXRfY3JjKQo+ICt7Cj4gKwlpZ3RfZGVidWdfd2FpdF9mb3Jfa2V5 cHJlc3MoImNyYyIpOwo+ICsKPiArCWlndF9waXBlX2NyY19zdGFydChwaXBlX2NyYyk7Cj4gKwly ZWFkX29uZV9jcmMocGlwZV9jcmMsIG91dF9jcmMpOwo+ICsJaWd0X3BpcGVfY3JjX3N0b3AocGlw ZV9jcmMpOwo+ICsKPiArCWNyY19zYW5pdHlfY2hlY2tzKG91dF9jcmMpOwo+ICt9Cj4gKwo+IGRp ZmYgLS1naXQgYS9saWIvaWd0X2NyYy5oIGIvbGliL2lndF9jcmMuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLmIwNjIzYmFmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2xpYi9pZ3RfY3JjLmgKPiBAQCAtMCwwICsxLDEyNSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQg wqkgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsg Kgo+ICsgKiAjIFBpcGUgQ1JDIFN1cHBvcnQKPiArICoKPiArICogVGhpcyBsaWJyYXJ5IHdyYXBz IHVwIHRoZSBrZXJuZWwncyBzdXBwb3J0IGZvciBjYXB0dXJpbmcgcGlwZSBDUkNzIGludG8gYQo+ ICsgKiBuZWF0IGFuZCB0aWR5IHBhY2thZ2UuIEZvciB0aGUgZGV0YWlsZWQgdXNhZ2Ugc2VlIGFs bCB0aGUgZnVuY3Rpb25zIHdoaWNoCj4gKyAqIHdvcmsgb24gI2lndF9waXBlX2NyY190LiBUaGlz IGlzIHN1cHBvcnRlZCBvbiBhbGwgcGxhdGZvcm1zIGFuZCBvdXRwdXRzLgo+ICsgKgo+ICsgKiBB Y3R1YWxseSB1c2luZyBwaXBlIENSQ3MgdG8gd3JpdGUgbW9kZXNldCB0ZXN0cyBpcyBhIGJpdCB0 cmlja3kgdGhvdWdoLCBzbwo+ICsgKiB0aGVyZSBpcyBubyB3YXkgdG8gZGlyZWN0bHkgY2hlY2sg YSBDUkM6IEJvdGggdGhlIGRldGFpbHMgb2YgdGhlIHBsYW5lCj4gKyAqIGJsZW5kaW5nLCBjb2xv ciBjb3JyZWN0aW9uIGFuZCBvdGhlciBoYXJkd2FyZSBhbmQgaG93IGV4YWN0bHkgdGhlIENSQyBp cwo+ICsgKiBjb21wdXRlZCBhdCBlYWNoIHRhcCBwb2ludCB2YXJ5IGJ5IGhhcmR3YXJlIGdlbmVy YXRpb24gYW5kIGFyZSBub3QgZGlzY2xvc2VkLgo+ICsgKgo+ICsgKiBUaGUgb25seSB3YXkgdG8g dXNlICNpZ3RfY3JjX3QgQ1JDcyB0aGVyZWZvcmUgaXMgdG8gY29tcGFyZSBDUkNzIGFtb25nIGVh Y2gKPiArICogYW5vdGhlciBlaXRoZXIgZm9yIGVxdWFsaXR5IG9yIGRpZmZlcmVuY2UuIE90aGVy d2lzZSBDUkNzIG11c3QgYmUgdHJlYXRlZCBhcwo+ICsgKiBjb21wbGV0ZWx5IG9wYXF1ZSB2YWx1 ZXMuIE5vdGUgdGhhdCBub3QgZXZlbiBDUkNzIGZyb20gZGlmZmVyZW50IHBpcGVzIG9yIHRhcAo+ ICsgKiBwb2ludHMgb24gdGhlIHNhbWUgcGxhdGZvcm0gY2FuIGJlIGNvbXBhcmVkLiBIZW5jZSBv bmx5IHVzZQo+ICsgKiBpZ3RfYXNzZXJ0X2NyY19lcXVhbCgpIHRvIGluc3BlY3QgQ1JDIHZhbHVl cyBjYXB0dXJlZCBieSB0aGUgc2FtZQo+ICsgKiAjaWd0X3BpcGVfY3JjX3Qgb2JqZWN0Lgo+ICsg Ki8KPiArCj4gKyNpZm5kZWYgX19JR1RfQ1JDX0hfXwo+ICsjZGVmaW5lIF9fSUdUX0NSQ19IX18K PiArCj4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiArCj4g K2VudW0gcGlwZTsKPiArCj4gKy8qKgo+ICsgKiBpZ3RfcGlwZV9jcmNfdDoKPiArICoKPiArICog UGlwZSBDUkMgc3VwcG9ydCBzdHJ1Y3R1cmUuIE5lZWRzIHRvIGJlIGFsbG9jYXRlZCBhbmQgc2V0 IHVwIHdpdGgKPiArICogaWd0X3BpcGVfY3JjX25ldygpIGZvciBhIHNwZWNpZmljIHBpcGUgYW5k IHBpcGUgQ1JDIHNvdXJjZSB2YWx1ZS4KPiArICovCj4gK3R5cGVkZWYgc3RydWN0IF9pZ3RfcGlw ZV9jcmMgaWd0X3BpcGVfY3JjX3Q7Cj4gKwo+ICsjZGVmaW5lIERSTV9NQVhfQ1JDX05SIDEwCj4g Ky8qKgo+ICsgKiBpZ3RfY3JjX3Q6Cj4gKyAqIEBmcmFtZTogZnJhbWUgbnVtYmVyIG9mIHRoZSBj YXB0dXJlIENSQwo+ICsgKiBAbl93b3JkczogaW50ZXJuYWwgZmllbGQsIGRvbid0IGFjY2Vzcwo+ ICsgKiBAY3JjOiBpbnRlcm5hbCBmaWVsZCwgZG9uJ3QgYWNjZXNzCj4gKyAqCj4gKyAqIFBpcGUg Q1JDIHZhbHVlLiBBbGwgb3RoZXIgbWVtYmVycyB0aGFuIEBmcmFtZSBhcmUgcHJpdmF0ZSBhbmQg c2hvdWxkIG5vdCBiZQo+ICsgKiBpbnNwZWN0ZWQgYnkgdGVzdGNhc2VzLgo+ICsgKi8KPiArdHlw ZWRlZiBzdHJ1Y3Qgewo+ICsJdWludDMyX3QgZnJhbWU7Cj4gKwlib29sIGhhc192YWxpZF9mcmFt ZTsKPiArCWludCBuX3dvcmRzOwo+ICsJdWludDMyX3QgY3JjW0RSTV9NQVhfQ1JDX05SXTsKPiAr fSBpZ3RfY3JjX3Q7Cj4gKwo+ICsvKioKPiArICogaW50ZWxfcGlwZV9jcmNfc291cmNlOgo+ICsg KiBASU5URUxfUElQRV9DUkNfU09VUkNFX05PTkU6IE5vIHNvdXJjZQo+ICsgKiBASU5URUxfUElQ RV9DUkNfU09VUkNFX1BMQU5FMTogUGxhbmUgMQo+ICsgKiBASU5URUxfUElQRV9DUkNfU09VUkNF X1BMQU5FMjogUGxhbmUgMgo+ICsgKiBASU5URUxfUElQRV9DUkNfU09VUkNFX1BGOiBQYW5lbCBG aWx0ZXIKPiArICogQElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9QSVBFOiBQaXBlCj4gKyAqIEBJTlRF TF9QSVBFX0NSQ19TT1VSQ0VfVFY6IFRWCj4gKyAqIEBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfRFBf QjogRGlzcGxheVBvcnQgQgo+ICsgKiBASU5URUxfUElQRV9DUkNfU09VUkNFX0RQX0M6IERpc3Bs YXlQb3J0IEMKPiArICogQElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9EUF9EOiBEaXNwbGF5UG9ydCBE Cj4gKyAqIEBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTzogQXV0b21hdGljIHNvdXJjZSBzZWxl Y3Rpb24KPiArICogQElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9NQVg6IE51bWJlciBvZiBhdmFpbGFi bGUgc291cmNlcwo+ICsgKgo+ICsgKiBFbnVtZXJhdGlvbiBvZiBhbGwgc3VwcG9ydGVkIHBpcGUg Q1JDIHNvdXJjZXMuIE5vdCBhbGwgcGxhdGZvcm1zIGFuZCBhbGwKPiArICogb3V0cHV0cyBzdXBw b3J0IGFsbCBvZiB0aGVtLiBHZW5lcmljIHRlc3RzIHNob3VsZCBqdXN0IHVzZQo+ICsgKiBJTlRF TF9QSVBFX0NSQ19TT1VSQ0VfQVVUTy4gSXQgc2hvdWxkIGFsd2F5cyBtYXAgdG8gYW4gZW5kLW9m LXBpcGUgQ1JDCj4gKyAqIHN1aXRhYmxlIGZvciBjaGVja2luZyBwbGFuZXMsIGN1cnNvciwgY29s b3IgY29ycmVjdGlvbiBhbmQgYW55IG90aGVyCj4gKyAqIG91dHB1dC1hZ25vc3RpYyBmZWF0dXJl cy4KPiArICovCj4gK2VudW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHsKPiArICAgICAgICBJTlRF TF9QSVBFX0NSQ19TT1VSQ0VfTk9ORSwKPiArICAgICAgICBJTlRFTF9QSVBFX0NSQ19TT1VSQ0Vf UExBTkUxLAo+ICsgICAgICAgIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9QTEFORTIsCj4gKyAgICAg ICAgSU5URUxfUElQRV9DUkNfU09VUkNFX1BGLAo+ICsgICAgICAgIElOVEVMX1BJUEVfQ1JDX1NP VVJDRV9QSVBFLAo+ICsgICAgICAgIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9UViwKPiArICAgICAg ICBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfRFBfQiwKPiArICAgICAgICBJTlRFTF9QSVBFX0NSQ19T T1VSQ0VfRFBfQywKPiArICAgICAgICBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfRFBfRCwKPiArICAg ICAgICBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTywKPiArICAgICAgICBJTlRFTF9QSVBFX0NS Q19TT1VSQ0VfTUFYLAo+ICt9Owo+ICsKPiArdm9pZCBpZ3RfYXNzZXJ0X2NyY19lcXVhbChjb25z dCBpZ3RfY3JjX3QgKmEsIGNvbnN0IGlndF9jcmNfdCAqYik7Cj4gK2NoYXIgKmlndF9jcmNfdG9f c3RyaW5nKGlndF9jcmNfdCAqY3JjKTsKPiArCj4gK3ZvaWQgaWd0X3JlcXVpcmVfcGlwZV9jcmMo aW50IGZkKTsKPiAraWd0X3BpcGVfY3JjX3QgKgo+ICtpZ3RfcGlwZV9jcmNfbmV3KGludCBmZCwg ZW51bSBwaXBlIHBpcGUsIGVudW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHNvdXJjZSk7Cj4gK2ln dF9waXBlX2NyY190ICoKPiAraWd0X3BpcGVfY3JjX25ld19ub25ibG9jayhpbnQgZmQsIGVudW0g cGlwZSBwaXBlLCBlbnVtIGludGVsX3BpcGVfY3JjX3NvdXJjZSBzb3VyY2UpOwo+ICt2b2lkIGln dF9waXBlX2NyY19mcmVlKGlndF9waXBlX2NyY190ICpwaXBlX2NyYyk7Cj4gK3ZvaWQgaWd0X3Bp cGVfY3JjX3N0YXJ0KGlndF9waXBlX2NyY190ICpwaXBlX2NyYyk7Cj4gK3ZvaWQgaWd0X3BpcGVf Y3JjX3N0b3AoaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjKTsKPiArX19hdHRyaWJ1dGVfXygod2Fy bl91bnVzZWRfcmVzdWx0KSkKPiAraW50IGlndF9waXBlX2NyY19nZXRfY3JjcyhpZ3RfcGlwZV9j cmNfdCAqcGlwZV9jcmMsIGludCBuX2NyY3MsCj4gKwkJCSAgaWd0X2NyY190ICoqb3V0X2NyY3Mp Owo+ICt2b2lkIGlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhpZ3RfcGlwZV9jcmNfdCAqcGlwZV9j cmMsIGlndF9jcmNfdCAqb3V0X2NyYyk7Cj4gKwo+ICsjZW5kaWYgLyogX19JR1RfQ1JDX0hfXyAq Lwo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2RlYnVnZnMuYyBiL2xpYi9pZ3RfZGVidWdmcy5jCj4g aW5kZXggODBmMjVjNjEuLmUwOGI3YWU4IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfZGVidWdmcy5j Cj4gKysrIGIvbGliL2lndF9kZWJ1Z2ZzLmMKPiBAQCAtNTEsMjQgKzUxLDYgQEAKPiAgICogYmFz aWMgZnVuY3Rpb25zIHRvIGFjY2VzcyBkZWJ1Z2ZzIGZpbGVzIHdpdGggZS5nLiBpZ3RfZGVidWdm c19vcGVuKCkgaXQgYWxzbwo+ICAgKiBwcm92aWRlcyBoaWdoZXItbGV2ZWwgd3JhcHBlcnMgZm9y IHNvbWUgZGVidWdmcyBmZWF0dXJlcy4KPiAgICoKPiAtICogIyBQaXBlIENSQyBTdXBwb3J0Cj4g LSAqCj4gLSAqIFRoaXMgbGlicmFyeSB3cmFwcyB1cCB0aGUga2VybmVsJ3Mgc3VwcG9ydCBmb3Ig Y2FwdHVyaW5nIHBpcGUgQ1JDcyBpbnRvIGEKPiAtICogbmVhdCBhbmQgdGlkeSBwYWNrYWdlLiBG b3IgdGhlIGRldGFpbGVkIHVzYWdlIHNlZSBhbGwgdGhlIGZ1bmN0aW9ucyB3aGljaAo+IC0gKiB3 b3JrIG9uICNpZ3RfcGlwZV9jcmNfdC4gVGhpcyBpcyBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jt cyBhbmQgb3V0cHV0cy4KPiAtICoKPiAtICogQWN0dWFsbHkgdXNpbmcgcGlwZSBDUkNzIHRvIHdy aXRlIG1vZGVzZXQgdGVzdHMgaXMgYSBiaXQgdHJpY2t5IHRob3VnaCwgc28KPiAtICogdGhlcmUg aXMgbm8gd2F5IHRvIGRpcmVjdGx5IGNoZWNrIGEgQ1JDOiBCb3RoIHRoZSBkZXRhaWxzIG9mIHRo ZSBwbGFuZQo+IC0gKiBibGVuZGluZywgY29sb3IgY29ycmVjdGlvbiBhbmQgb3RoZXIgaGFyZHdh cmUgYW5kIGhvdyBleGFjdGx5IHRoZSBDUkMgaXMKPiAtICogY29tcHV0ZWQgYXQgZWFjaCB0YXAg cG9pbnQgdmFyeSBieSBoYXJkd2FyZSBnZW5lcmF0aW9uIGFuZCBhcmUgbm90IGRpc2Nsb3NlZC4K PiAtICoKPiAtICogVGhlIG9ubHkgd2F5IHRvIHVzZSAjaWd0X2NyY190IENSQ3MgdGhlcmVmb3Jl IGlzIHRvIGNvbXBhcmUgQ1JDcyBhbW9uZyBlYWNoCj4gLSAqIGFub3RoZXIgZWl0aGVyIGZvciBl cXVhbGl0eSBvciBkaWZmZXJlbmNlLiBPdGhlcndpc2UgQ1JDcyBtdXN0IGJlIHRyZWF0ZWQgYXMK PiAtICogY29tcGxldGVseSBvcGFxdWUgdmFsdWVzLiBOb3RlIHRoYXQgbm90IGV2ZW4gQ1JDcyBm cm9tIGRpZmZlcmVudCBwaXBlcyBvciB0YXAKPiAtICogcG9pbnRzIG9uIHRoZSBzYW1lIHBsYXRm b3JtIGNhbiBiZSBjb21wYXJlZC4gSGVuY2Ugb25seSB1c2UKPiAtICogaWd0X2Fzc2VydF9jcmNf ZXF1YWwoKSB0byBpbnNwZWN0IENSQyB2YWx1ZXMgY2FwdHVyZWQgYnkgdGhlIHNhbWUKPiAtICog I2lndF9waXBlX2NyY190IG9iamVjdC4KPiAtICoKPiAgICogIyBPdGhlciBkZWJ1Z2ZzIGludGVy ZmFjZSB3cmFwcGVycwo+ICAgKgo+ICAgKiBUaGlzIGNvdmVycyB0aGUgbWlzY2VsbGFuZW91cyBk ZWJ1Z2ZzIGludGVyZmFjZSB3cmFwcGVyczoKPiBAQCAtMjc3LDIzNSArMjU5LDYgQEAgYm9vbCBp Z3RfZGVidWdmc19zZWFyY2goaW50IGRldmljZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0 IGNoYXIgKnN1YnN0cmluZykKPiAgCXJldHVybiBtYXRjaGVkOwo+ICB9Cj4gIAo+IC0vKgo+IC0g KiBQaXBlIENSQwo+IC0gKi8KPiAtCj4gLS8qKgo+IC0gKiBpZ3RfYXNzZXJ0X2NyY19lcXVhbDoK PiAtICogQGE6IGZpcnN0IHBpcGUgQ1JDIHZhbHVlCj4gLSAqIEBiOiBzZWNvbmQgcGlwZSBDUkMg dmFsdWUKPiAtICoKPiAtICogQ29tcGFyZXMgdHdvIENSQyB2YWx1ZXMgYW5kIGZhaWxzIHRoZSB0 ZXN0Y2FzZSBpZiB0aGV5IGRvbid0IG1hdGNoIHdpdGgKPiAtICogaWd0X2ZhaWwoKS4gTm90ZSB0 aGF0IGR1ZSB0byBDUkMgY29sbGlzaW9ucyBDUkMgYmFzZWQgdGVzdGNhc2UgY2FuIG9ubHkKPiAt ICogYXNzZXJ0IHRoYXQgQ1JDcyBtYXRjaCwgbmV2ZXIgdGhhdCB0aGV5IGFyZSBkaWZmZXJlbnQu IE90aGVyd2lzZSB0aGVyZSBtaWdodAo+IC0gKiBiZSByYW5kb20gdGVzdGNhc2UgZmFpbHVyZXMg d2hlbiBkaWZmZXJlbnQgc2NyZWVuIGNvbnRlbnRzIGVuZCB1cCB3aXRoIHRoZQo+IC0gKiBzYW1l IENSQyBieSBjaGFuY2UuCj4gLSAqLwo+IC12b2lkIGlndF9hc3NlcnRfY3JjX2VxdWFsKGNvbnN0 IGlndF9jcmNfdCAqYSwgY29uc3QgaWd0X2NyY190ICpiKQo+IC17Cj4gLQlpbnQgaTsKPiAtCj4g LQlmb3IgKGkgPSAwOyBpIDwgYS0+bl93b3JkczsgaSsrKQo+IC0JCWlndF9hc3NlcnRfZXFfdTMy KGEtPmNyY1tpXSwgYi0+Y3JjW2ldKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGlndF9jcmNfdG9f c3RyaW5nOgo+IC0gKiBAY3JjOiBwaXBlIENSQyB2YWx1ZSB0byBwcmludAo+IC0gKgo+IC0gKiBU aGlzIGZvcm1hdHMgQGNyYyBpbnRvIGEgc3RyaW5nIGJ1ZmZlciB3aGljaCBpcyBvd25lZCBieSBp Z3RfY3JjX3RvX3N0cmluZygpLgo+IC0gKiBUaGUgbmV4dCBjYWxsIHdpbGwgb3ZlcnJpZGUgdGhl IGJ1ZmZlciBhZ2Fpbiwgd2hpY2ggbWFrZXMgdGhpcyBtdWx0aXRocmVhZGluZwo+IC0gKiB1bnNh ZmUuCj4gLSAqCj4gLSAqIFRoaXMgc2hvdWxkIG9ubHkgZXZlciBiZSB1c2VkIGZvciBkaWFnbm9z dGljIGRlYnVnIG91dHB1dC4KPiAtICovCj4gLWNoYXIgKmlndF9jcmNfdG9fc3RyaW5nKGlndF9j cmNfdCAqY3JjKQo+IC17Cj4gLQlpbnQgaTsKPiAtCWNoYXIgYnVmWzEyOF0gPSB7IDAgfTsKPiAt Cj4gLQlmb3IgKGkgPSAwOyBpIDwgY3JjLT5uX3dvcmRzOyBpKyspCj4gLQkJc3ByaW50ZihidWYg KyBzdHJsZW4oYnVmKSwgIiUwOHggIiwgY3JjLT5jcmNbaV0pOwo+IC0KPiAtCXJldHVybiBzdHJk dXAoYnVmKTsKPiAtfQo+IC0KPiAtI2RlZmluZSBNQVhfQ1JDX0VOVFJJRVMgMTAKPiAtI2RlZmlu ZSBNQVhfTElORV9MRU4gKDEwICsgMTEgKiBNQVhfQ1JDX0VOVFJJRVMgKyAxKQo+IC0KPiAtLyog KDYgZmllbGRzLCA4IGNoYXJzIGVhY2gsIHNwYWNlIHNlcGFyYXRlZCAoNSkgKyAnXG4nKSAqLwo+ IC0jZGVmaW5lIExFR0FDWV9MSU5FX0xFTiAgICAgICAoNiAqIDggKyA1ICsgMSkKPiAtCj4gLXN0 cnVjdCBfaWd0X3BpcGVfY3JjIHsKPiAtCWludCBmZDsKPiAtCWludCBkaXI7Cj4gLQlpbnQgY3Rs X2ZkOwo+IC0JaW50IGNyY19mZDsKPiAtCWludCBmbGFnczsKPiAtCWJvb2wgaXNfbGVnYWN5Owo+ IC0KPiAtCWVudW0gcGlwZSBwaXBlOwo+IC0JZW51bSBpbnRlbF9waXBlX2NyY19zb3VyY2Ugc291 cmNlOwo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IGNoYXIgKnBpcGVfY3JjX3NvdXJjZXNbXSA9 IHsKPiAtCSJub25lIiwKPiAtCSJwbGFuZTEiLAo+IC0JInBsYW5lMiIsCj4gLQkicGYiLAo+IC0J InBpcGUiLAo+IC0JIlRWIiwKPiAtCSJEUC1CIiwKPiAtCSJEUC1DIiwKPiAtCSJEUC1EIiwKPiAt CSJhdXRvIgo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IGNoYXIgKnBpcGVfY3JjX3NvdXJjZV9u YW1lKGVudW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHNvdXJjZSkKPiAtewo+IC0gICAgICAgIHJl dHVybiBwaXBlX2NyY19zb3VyY2VzW3NvdXJjZV07Cj4gLX0KPiAtCj4gLXN0YXRpYyBib29sIGln dF9waXBlX2NyY19kb19zdGFydChpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmMpCj4gLXsKPiAtCWNo YXIgYnVmWzY0XTsKPiAtCj4gLQkvKiBTdG9wIGZpcnN0IGp1c3QgdG8gbWFrZSBzdXJlIHdlIGRv bid0IGhhdmUgbGluZ2VyaW5nIHN0YXRlIGxlZnQuICovCj4gLQlpZ3RfcGlwZV9jcmNfc3RvcChw aXBlX2NyYyk7Cj4gLQo+IC0JaWYgKHBpcGVfY3JjLT5pc19sZWdhY3kpCj4gLQkJc3ByaW50Zihi dWYsICJwaXBlICVzICVzIiwga21zdGVzdF9waXBlX25hbWUocGlwZV9jcmMtPnBpcGUpLAo+IC0J CQlwaXBlX2NyY19zb3VyY2VfbmFtZShwaXBlX2NyYy0+c291cmNlKSk7Cj4gLQllbHNlCj4gLQkJ c3ByaW50ZihidWYsICIlcyIsIHBpcGVfY3JjX3NvdXJjZV9uYW1lKHBpcGVfY3JjLT5zb3VyY2Up KTsKPiAtCj4gLQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKHBpcGVfY3JjLT5jdGxfZmQsIGJ1Ziwgc3Ry bGVuKGJ1ZikpLCBzdHJsZW4oYnVmKSk7Cj4gLQo+IC0JaWYgKCFwaXBlX2NyYy0+aXNfbGVnYWN5 KSB7Cj4gLQkJaW50IGVycjsKPiAtCj4gLQkJc3ByaW50ZihidWYsICJjcnRjLSVkL2NyYy9kYXRh IiwgcGlwZV9jcmMtPnBpcGUpOwo+IC0JCWVyciA9IDA7Cj4gLQo+IC0JCXBpcGVfY3JjLT5jcmNf ZmQgPSBvcGVuYXQocGlwZV9jcmMtPmRpciwgYnVmLCBwaXBlX2NyYy0+ZmxhZ3MpOwo+IC0JCWlm IChwaXBlX2NyYy0+Y3JjX2ZkIDwgMCkKPiAtCQkJZXJyID0gLWVycm5vOwo+IC0KPiAtCQlpZiAo ZXJyID09IC1FSU5WQUwpCj4gLQkJCXJldHVybiBmYWxzZTsKPiAtCj4gLQkJaWd0X2Fzc2VydF9l cShlcnIsIDApOwo+IC0JfQo+IC0KPiAtCWVycm5vID0gMDsKPiAtCXJldHVybiB0cnVlOwo+IC19 Cj4gLQo+IC1zdGF0aWMgdm9pZCBpZ3RfcGlwZV9jcmNfcGlwZV9vZmYoaW50IGZkLCBlbnVtIHBp cGUgcGlwZSkKPiAtewo+IC0JY2hhciBidWZbMzJdOwo+IC0KPiAtCXNwcmludGYoYnVmLCAicGlw ZSAlcyBub25lIiwga21zdGVzdF9waXBlX25hbWUocGlwZSkpOwo+IC0JaWd0X2Fzc2VydF9lcSh3 cml0ZShmZCwgYnVmLCBzdHJsZW4oYnVmKSksIHN0cmxlbihidWYpKTsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgaWd0X3BpcGVfY3JjX3Jlc2V0KGludCBkcm1fZmQpCj4gLXsKPiAtCXN0cnVjdCBk aXJlbnQgKmRpcmVudDsKPiAtCWNvbnN0IGNoYXIgKmNtZCA9ICJub25lIjsKPiAtCWJvb2wgZG9u ZSA9IGZhbHNlOwo+IC0JRElSICpkaXI7Cj4gLQlpbnQgZmRpcjsKPiAtCWludCBmZDsKPiAtCj4g LQlmZGlyID0gaWd0X2RlYnVnZnNfZGlyKGRybV9mZCk7Cj4gLQlpZiAoZmRpciA8IDApCj4gLQkJ cmV0dXJuOwo+IC0KPiAtCWRpciA9IGZkb3BlbmRpcihmZGlyKTsKPiAtCWlmICghZGlyKSB7Cj4g LQkJY2xvc2UoZmRpcik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCXdoaWxlICgoZGlyZW50 ID0gcmVhZGRpcihkaXIpKSkgewo+IC0JCWNoYXIgYnVmWzEyOF07Cj4gLQo+IC0JCWlmIChzdHJj bXAoZGlyZW50LT5kX25hbWUsICJjcnRjLSIpICE9IDApCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAt CQlzcHJpbnRmKGJ1ZiwgIiVzL2NyYy9jb250cm9sIiwgZGlyZW50LT5kX25hbWUpOwo+IC0JCWZk ID0gb3BlbmF0KGZkaXIsIGJ1ZiwgT19XUk9OTFkpOwo+IC0JCWlmIChmZCA8IDApCj4gLQkJCWNv bnRpbnVlOwo+IC0KPiAtCQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGZkLCBjbWQsIHN0cmxlbihjbWQp KSwgc3RybGVuKGNtZCkpOwo+IC0JCWNsb3NlKGZkKTsKPiAtCj4gLQkJZG9uZSA9IHRydWU7Cj4g LQl9Cj4gLQljbG9zZWRpcihkaXIpOwo+IC0KPiAtCWlmICghZG9uZSkgewo+IC0JCWZkID0gb3Bl bmF0KGZkaXIsICJpOTE1X2Rpc3BsYXlfY3J0Y19jdGwiLCBPX1dST05MWSk7Cj4gLQkJaWYgKGZk ICE9IC0xKSB7Cj4gLQkJCWlndF9waXBlX2NyY19waXBlX29mZihmZCwgUElQRV9BKTsKPiAtCQkJ aWd0X3BpcGVfY3JjX3BpcGVfb2ZmKGZkLCBQSVBFX0IpOwo+IC0JCQlpZ3RfcGlwZV9jcmNfcGlw ZV9vZmYoZmQsIFBJUEVfQyk7Cj4gLQo+IC0JCQljbG9zZShmZCk7Cj4gLQkJfQo+IC0JfQo+IC0K PiAtCWNsb3NlKGZkaXIpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwaXBlX2NyY19leGl0X2hh bmRsZXIoaW50IHNpZykKPiAtewo+IC0Jc3RydWN0IGRpcmVudCAqZGlyZW50Owo+IC0JY2hhciBi dWZbMTI4XTsKPiAtCURJUiAqZGlyOwo+IC0JaW50IGZkOwo+IC0KPiAtCWRpciA9IG9wZW5kaXIo Ii9kZXYvZHJpIik7Cj4gLQlpZiAoIWRpcikKPiAtCQlyZXR1cm47Cj4gLQo+IC0JLyoKPiAtCSAq IFRyeSB0byByZXNldCBDUkMgY2FwdHVyZSBmb3IgYWxsIERSTSBkZXZpY2VzLCB0aGlzIGlzIG9u bHkgbmVlZGVkCj4gLQkgKiBmb3IgdGhlIGxlZ2FjeSBDUkMgQUJJIGFuZCBjYW4gYmUgY29tcGxl dGVseSByZW1vdmVkIG9uY2UgdGhlCj4gLQkgKiBsZWdhY3kgY29kZXBhdGhzIGFyZSByZW1vdmVk Lgo+IC0JICovCj4gLQl3aGlsZSAoKGRpcmVudCA9IHJlYWRkaXIoZGlyKSkpIHsKPiAtCQlpZiAo c3RybmNtcChkaXJlbnQtPmRfbmFtZSwgImNhcmQiLCA0KSAhPSAwKQo+IC0JCQljb250aW51ZTsK PiAtCj4gLQkJc3ByaW50ZihidWYsICIvZGV2L2RyaS8lcyIsIGRpcmVudC0+ZF9uYW1lKTsKPiAt CQlmZCA9IG9wZW4oYnVmLCBPX1dST05MWSk7Cj4gLQo+IC0JCWlndF9waXBlX2NyY19yZXNldChm ZCk7Cj4gLQo+IC0JCWNsb3NlKGZkKTsKPiAtCX0KPiAtCWNsb3NlZGlyKGRpcik7Cj4gLX0KPiAt Cj4gLS8qKgo+IC0gKiBpZ3RfcmVxdWlyZV9waXBlX2NyYzoKPiAtICoKPiAtICogQ29udmVuaWVu Y2UgaGVscGVyIHRvIGNoZWNrIHdoZXRoZXIgcGlwZSBDUkMgY2FwdHVyaW5nIGlzIHN1cHBvcnRl ZCBieSB0aGUKPiAtICoga2VybmVsLiBVc2VzIGlndF9za2lwIHRvIGF1dG9tYXRpY2FsbHkgc2tp cCB0aGUgdGVzdC9zdWJ0ZXN0IGlmIHRoaXMgaXNuJ3QKPiAtICogdGhlIGNhc2UuCj4gLSAqLwo+ IC12b2lkIGlndF9yZXF1aXJlX3BpcGVfY3JjKGludCBmZCkKPiAtewo+IC0JY29uc3QgY2hhciAq Y21kID0gInBpcGUgQSBub25lIjsKPiAtCWludCBjdGwsIHdyaXR0ZW47Cj4gLQo+IC0JY3RsID0g aWd0X2RlYnVnZnNfb3BlbihmZCwgImNydGMtMC9jcmMvY29udHJvbCIsIE9fUkRPTkxZKTsKPiAt CWlmIChjdGwgPCAwKSB7Cj4gLQkJY3RsID0gaWd0X2RlYnVnZnNfb3BlbihmZCwgImk5MTVfZGlz cGxheV9jcmNfY3RsIiwgT19XUk9OTFkpOwo+IC0JCWlndF9yZXF1aXJlX2YoY3RsLAo+IC0JCQkg ICAgICAiTm8gZGlzcGxheV9jcmNfY3RsIGZvdW5kLCBrZXJuZWwgdG9vIG9sZFxuIik7Cj4gLQo+ IC0JCXdyaXR0ZW4gPSB3cml0ZShjdGwsIGNtZCwgc3RybGVuKGNtZCkpOwo+IC0JCWlndF9yZXF1 aXJlX2Yod3JpdHRlbiA8IDAsCj4gLQkJCSAgICAgICJDUkNzIG5vdCBzdXBwb3J0ZWQgb24gdGhp cyBwbGF0Zm9ybVxuIik7Cj4gLQl9Cj4gLQljbG9zZShjdGwpOwo+IC19Cj4gLQo+ICBzdGF0aWMg dm9pZCBpZ3RfaHBkX3N0b3JtX2V4aXRfaGFuZGxlcihpbnQgc2lnKQo+ICB7Cj4gIAlpbnQgZmQg PSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7Cj4gQEAgLTYyNywzMDYgKzM4 MCw2IEBAIHZvaWQgaWd0X3JlcXVpcmVfaHBkX3N0b3JtX2N0bChpbnQgZHJtX2ZkKQo+ICAJY2xv c2UoZmQpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaWd0X3BpcGVfY3JjX3QgKgo+IC1waXBlX2NyY19u ZXcoaW50IGZkLCBlbnVtIHBpcGUgcGlwZSwgZW51bSBpbnRlbF9waXBlX2NyY19zb3VyY2Ugc291 cmNlLCBpbnQgZmxhZ3MpCj4gLXsKPiAtCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKPiAtCWNo YXIgYnVmWzEyOF07Cj4gLQlpbnQgZGVidWdmczsKPiAtCj4gLQlkZWJ1Z2ZzID0gaWd0X2RlYnVn ZnNfZGlyKGZkKTsKPiAtCWlndF9hc3NlcnQoZGVidWdmcyAhPSAtMSk7Cj4gLQo+IC0JaWd0X2lu c3RhbGxfZXhpdF9oYW5kbGVyKHBpcGVfY3JjX2V4aXRfaGFuZGxlcik7Cj4gLQo+IC0JcGlwZV9j cmMgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBfaWd0X3BpcGVfY3JjKSk7Cj4gLQo+IC0Jc3By aW50ZihidWYsICJjcnRjLSVkL2NyYy9jb250cm9sIiwgcGlwZSk7Cj4gLQlwaXBlX2NyYy0+Y3Rs X2ZkID0gb3BlbmF0KGRlYnVnZnMsIGJ1ZiwgT19XUk9OTFkpOwo+IC0JaWYgKHBpcGVfY3JjLT5j dGxfZmQgPT0gLTEpIHsKPiAtCQlwaXBlX2NyYy0+Y3RsX2ZkID0gb3BlbmF0KGRlYnVnZnMsCj4g LQkJCQkJICAiaTkxNV9kaXNwbGF5X2NyY19jdGwiLCBPX1dST05MWSk7Cj4gLQkJaWd0X2Fzc2Vy dChwaXBlX2NyYy0+Y3RsX2ZkICE9IC0xKTsKPiAtCQlwaXBlX2NyYy0+aXNfbGVnYWN5ID0gdHJ1 ZTsKPiAtCX0KPiAtCj4gLQlpZiAocGlwZV9jcmMtPmlzX2xlZ2FjeSkgewo+IC0JCXNwcmludGYo YnVmLCAiaTkxNV9waXBlXyVzX2NyYyIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKTsKPiAtCQlw aXBlX2NyYy0+Y3JjX2ZkID0gb3BlbmF0KGRlYnVnZnMsIGJ1ZiwgZmxhZ3MpOwo+IC0JCWlndF9h c3NlcnQocGlwZV9jcmMtPmNyY19mZCAhPSAtMSk7Cj4gLQkJaWd0X2RlYnVnKCJVc2luZyBsZWdh Y3kgZnJhbWUgQ1JDIEFCSVxuIik7Cj4gLQl9IGVsc2Ugewo+IC0JCXBpcGVfY3JjLT5jcmNfZmQg PSAtMTsKPiAtCQlpZ3RfZGVidWcoIlVzaW5nIGdlbmVyaWMgZnJhbWUgQ1JDIEFCSVxuIik7Cj4g LQl9Cj4gLQo+IC0JcGlwZV9jcmMtPmZkID0gZmQ7Cj4gLQlwaXBlX2NyYy0+ZGlyID0gZGVidWdm czsKPiAtCXBpcGVfY3JjLT5waXBlID0gcGlwZTsKPiAtCXBpcGVfY3JjLT5zb3VyY2UgPSBzb3Vy Y2U7Cj4gLQlwaXBlX2NyYy0+ZmxhZ3MgPSBmbGFnczsKPiAtCj4gLQlyZXR1cm4gcGlwZV9jcmM7 Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBpZ3RfcGlwZV9jcmNfbmV3Ogo+IC0gKiBAcGlwZTogZGlz cGxheSBwaXBlIHRvIHVzZSBhcyBzb3VyY2UKPiAtICogQHNvdXJjZTogQ1JDIHRhcCBwb2ludCB0 byB1c2UgYXMgc291cmNlCj4gLSAqCj4gLSAqIFRoaXMgc2V0cyB1cCBhIG5ldyBwaXBlIENSQyBj YXB0dXJlIG9iamVjdCBmb3IgdGhlIGdpdmVuIEBwaXBlIGFuZCBAc291cmNlCj4gLSAqIGluIGJs b2NraW5nIG1vZGUuCj4gLSAqCj4gLSAqIFJldHVybnM6IEEgcGlwZSBDUkMgb2JqZWN0IGZvciB0 aGUgZ2l2ZW4gQHBpcGUgYW5kIEBzb3VyY2UuIFRoZSBsaWJyYXJ5Cj4gLSAqIGFzc3VtZXMgdGhh dCB0aGUgc291cmNlIGlzIGFsd2F5cyBhdmFpbGFibGUgc2luY2UgcmVjZW50IGtlcm5lbHMgc3Vw cG9ydCBhdAo+IC0gKiBsZWFzdCBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyBldmVyeXdoZXJl Lgo+IC0gKi8KPiAtaWd0X3BpcGVfY3JjX3QgKgo+IC1pZ3RfcGlwZV9jcmNfbmV3KGludCBmZCwg ZW51bSBwaXBlIHBpcGUsIGVudW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHNvdXJjZSkKPiAtewo+ IC0JcmV0dXJuIHBpcGVfY3JjX25ldyhmZCwgcGlwZSwgc291cmNlLCBPX1JET05MWSk7Cj4gLX0K PiAtCj4gLS8qKgo+IC0gKiBpZ3RfcGlwZV9jcmNfbmV3X25vbmJsb2NrOgo+IC0gKiBAcGlwZTog ZGlzcGxheSBwaXBlIHRvIHVzZSBhcyBzb3VyY2UKPiAtICogQHNvdXJjZTogQ1JDIHRhcCBwb2lu dCB0byB1c2UgYXMgc291cmNlCj4gLSAqCj4gLSAqIFRoaXMgc2V0cyB1cCBhIG5ldyBwaXBlIENS QyBjYXB0dXJlIG9iamVjdCBmb3IgdGhlIGdpdmVuIEBwaXBlIGFuZCBAc291cmNlCj4gLSAqIGlu IG5vbmJsb2NraW5nIG1vZGUuCj4gLSAqCj4gLSAqIFJldHVybnM6IEEgcGlwZSBDUkMgb2JqZWN0 IGZvciB0aGUgZ2l2ZW4gQHBpcGUgYW5kIEBzb3VyY2UuIFRoZSBsaWJyYXJ5Cj4gLSAqIGFzc3Vt ZXMgdGhhdCB0aGUgc291cmNlIGlzIGFsd2F5cyBhdmFpbGFibGUgc2luY2UgcmVjZW50IGtlcm5l bHMgc3VwcG9ydCBhdAo+IC0gKiBsZWFzdCBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyBldmVy eXdoZXJlLgo+IC0gKi8KPiAtaWd0X3BpcGVfY3JjX3QgKgo+IC1pZ3RfcGlwZV9jcmNfbmV3X25v bmJsb2NrKGludCBmZCwgZW51bSBwaXBlIHBpcGUsIGVudW0gaW50ZWxfcGlwZV9jcmNfc291cmNl IHNvdXJjZSkKPiAtewo+IC0JcmV0dXJuIHBpcGVfY3JjX25ldyhmZCwgcGlwZSwgc291cmNlLCBP X1JET05MWSB8IE9fTk9OQkxPQ0spOwo+IC19Cj4gLQo+IC0vKioKPiAtICogaWd0X3BpcGVfY3Jj X2ZyZWU6Cj4gLSAqIEBwaXBlX2NyYzogcGlwZSBDUkMgb2JqZWN0Cj4gLSAqCj4gLSAqIEZyZWVz IGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIEBwaXBlX2NyYy4KPiAtICovCj4gLXZvaWQg aWd0X3BpcGVfY3JjX2ZyZWUoaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjKQo+IC17Cj4gLQlpZiAo IXBpcGVfY3JjKQo+IC0JCXJldHVybjsKPiAtCj4gLQljbG9zZShwaXBlX2NyYy0+Y3RsX2ZkKTsK PiAtCWNsb3NlKHBpcGVfY3JjLT5jcmNfZmQpOwo+IC0JY2xvc2UocGlwZV9jcmMtPmRpcik7Cj4g LQlmcmVlKHBpcGVfY3JjKTsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgcGlwZV9jcmNfaW5pdF9m cm9tX3N0cmluZyhpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmMsIGlndF9jcmNfdCAqY3JjLAo+IC0J CQkJICAgICAgY29uc3QgY2hhciAqbGluZSkKPiAtewo+IC0JaW50IG4sIGk7Cj4gLQljb25zdCBj aGFyICpidWY7Cj4gLQo+IC0JaWYgKHBpcGVfY3JjLT5pc19sZWdhY3kpIHsKPiAtCQljcmMtPmhh c192YWxpZF9mcmFtZSA9IHRydWU7Cj4gLQkJY3JjLT5uX3dvcmRzID0gNTsKPiAtCQluID0gc3Nj YW5mKGxpbmUsICIlOHUgJTh4ICU4eCAlOHggJTh4ICU4eCIsICZjcmMtPmZyYW1lLAo+IC0JCQkg ICAmY3JjLT5jcmNbMF0sICZjcmMtPmNyY1sxXSwgJmNyYy0+Y3JjWzJdLAo+IC0JCQkgICAmY3Jj LT5jcmNbM10sICZjcmMtPmNyY1s0XSk7Cj4gLQkJcmV0dXJuIG4gPT0gNjsKPiAtCX0KPiAtCj4g LQlpZiAoc3RybmNtcChsaW5lLCAiWFhYWFhYWFhYWCIsIDEwKSA9PSAwKQo+IC0JCWNyYy0+aGFz X3ZhbGlkX2ZyYW1lID0gZmFsc2U7Cj4gLQllbHNlIHsKPiAtCQljcmMtPmhhc192YWxpZF9mcmFt ZSA9IHRydWU7Cj4gLQkJY3JjLT5mcmFtZSA9IHN0cnRvdWwobGluZSwgTlVMTCwgMTYpOwo+IC0J fQo+IC0KPiAtCWJ1ZiA9IGxpbmUgKyAxMDsKPiAtCWZvciAoaSA9IDA7ICpidWYgIT0gJ1xuJzsg aSsrLCBidWYgKz0gMTEpCj4gLQkJY3JjLT5jcmNbaV0gPSBzdHJ0b3VsKGJ1ZiwgTlVMTCwgMTYp Owo+IC0KPiAtCWNyYy0+bl93b3JkcyA9IGk7Cj4gLQo+IC0JcmV0dXJuIHRydWU7Cj4gLX0KPiAt Cj4gLXN0YXRpYyBpbnQgcmVhZF9jcmMoaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjLCBpZ3RfY3Jj X3QgKm91dCkKPiAtewo+IC0Jc3NpemVfdCBieXRlc19yZWFkOwo+IC0JY2hhciBidWZbTUFYX0xJ TkVfTEVOICsgMV07Cj4gLQlzaXplX3QgcmVhZF9sZW47Cj4gLQo+IC0JaWYgKHBpcGVfY3JjLT5p c19sZWdhY3kpCj4gLQkJcmVhZF9sZW4gPSBMRUdBQ1lfTElORV9MRU47Cj4gLQllbHNlCj4gLQkJ cmVhZF9sZW4gPSBNQVhfTElORV9MRU47Cj4gLQo+IC0JaWd0X3NldF90aW1lb3V0KDUsICJDUkMg cmVhZGluZyIpOwo+IC0JYnl0ZXNfcmVhZCA9IHJlYWQocGlwZV9jcmMtPmNyY19mZCwgJmJ1Ziwg cmVhZF9sZW4pOwo+IC0JaWd0X3Jlc2V0X3RpbWVvdXQoKTsKPiAtCj4gLQlpZiAoYnl0ZXNfcmVh ZCA8IDAgJiYgZXJybm8gPT0gRUFHQUlOKQo+IC0JCWlndF9hc3NlcnQocGlwZV9jcmMtPmZsYWdz ICYgT19OT05CTE9DSyk7Cj4gLQo+IC0JaWYgKGJ5dGVzX3JlYWQgPCAwKQo+IC0JCWJ5dGVzX3Jl YWQgPSAwOwo+IC0KPiAtCWJ1ZltieXRlc19yZWFkXSA9ICdcMCc7Cj4gLQo+IC0JaWYgKGJ5dGVz X3JlYWQgJiYgIXBpcGVfY3JjX2luaXRfZnJvbV9zdHJpbmcocGlwZV9jcmMsIG91dCwgYnVmKSkK PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlyZXR1cm4gYnl0ZXNfcmVhZDsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgcmVhZF9vbmVfY3JjKGlndF9waXBlX2NyY190ICpwaXBlX2NyYywgaWd0 X2NyY190ICpvdXQpCj4gLXsKPiAtCXdoaWxlIChyZWFkX2NyYyhwaXBlX2NyYywgb3V0KSA9PSAw KQo+IC0JCXVzbGVlcCgxMDAwKTsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGlndF9waXBlX2NyY19z dGFydDoKPiAtICogQHBpcGVfY3JjOiBwaXBlIENSQyBvYmplY3QKPiAtICoKPiAtICogU3RhcnRz IHRoZSBDUkMgY2FwdHVyZSBwcm9jZXNzIG9uIEBwaXBlX2NyYy4KPiAtICovCj4gLXZvaWQgaWd0 X3BpcGVfY3JjX3N0YXJ0KGlndF9waXBlX2NyY190ICpwaXBlX2NyYykKPiAtewo+IC0JaWd0X2Ny Y190IGNyYzsKPiAtCj4gLQlpZ3RfYXNzZXJ0KGlndF9waXBlX2NyY19kb19zdGFydChwaXBlX2Ny YykpOwo+IC0KPiAtCWlmIChwaXBlX2NyYy0+aXNfbGVnYWN5KSB7Cj4gLQkJLyoKPiAtCQkgKiBG b3Igc29tZSBubyB5ZXQgaWRlbnRpZmllZCByZWFzb24sIHRoZSBmaXJzdCBDUkMgaXMKPiAtCQkg KiBib25rZXJzLiBTbyBsZXQncyBqdXN0IHdhaXQgZm9yIHRoZSBuZXh0IHZibGFuayBhbmQgcmVh ZAo+IC0JCSAqIG91dCB0aGUgYnVnZ3kgcmVzdWx0Lgo+IC0JCSAqCj4gLQkJICogT24gQ0hWIHNv bWV0aW1lcyB0aGUgc2Vjb25kIENSQyBpcyBib25rZXJzIGFzIHdlbGwsIHNvCj4gLQkJICogZG9u J3QgdHJ1c3QgdGhhdCBvbmUgZWl0aGVyLgo+IC0JCSAqLwo+IC0JCXJlYWRfb25lX2NyYyhwaXBl X2NyYywgJmNyYyk7Cj4gLQkJcmVhZF9vbmVfY3JjKHBpcGVfY3JjLCAmY3JjKTsKPiAtCX0KPiAt fQo+IC0KPiAtLyoqCj4gLSAqIGlndF9waXBlX2NyY19zdG9wOgo+IC0gKiBAcGlwZV9jcmM6IHBp cGUgQ1JDIG9iamVjdAo+IC0gKgo+IC0gKiBTdG9wcyB0aGUgQ1JDIGNhcHR1cmUgcHJvY2VzcyBv biBAcGlwZV9jcmMuCj4gLSAqLwo+IC12b2lkIGlndF9waXBlX2NyY19zdG9wKGlndF9waXBlX2Ny Y190ICpwaXBlX2NyYykKPiAtewo+IC0JY2hhciBidWZbMzJdOwo+IC0KPiAtCWlmIChwaXBlX2Ny Yy0+aXNfbGVnYWN5KSB7Cj4gLQkJc3ByaW50ZihidWYsICJwaXBlICVzIG5vbmUiLCBrbXN0ZXN0 X3BpcGVfbmFtZShwaXBlX2NyYy0+cGlwZSkpOwo+IC0JCWlndF9hc3NlcnRfZXEod3JpdGUocGlw ZV9jcmMtPmN0bF9mZCwgYnVmLCBzdHJsZW4oYnVmKSksCj4gLQkJCSAgICAgIHN0cmxlbihidWYp KTsKPiAtCX0gZWxzZSB7Cj4gLQkJY2xvc2UocGlwZV9jcmMtPmNyY19mZCk7Cj4gLQkJcGlwZV9j cmMtPmNyY19mZCA9IC0xOwo+IC0JfQo+IC19Cj4gLQo+IC0vKioKPiAtICogaWd0X3BpcGVfY3Jj X2dldF9jcmNzOgo+IC0gKiBAcGlwZV9jcmM6IHBpcGUgQ1JDIG9iamVjdAo+IC0gKiBAbl9jcmNz OiBudW1iZXIgb2YgQ1JDcyB0byBjYXB0dXJlCj4gLSAqIEBvdXRfY3JjczogYnVmZmVyIHBvaW50 ZXIgZm9yIHRoZSBjYXB0dXJlZCBDUkMgdmFsdWVzCj4gLSAqCj4gLSAqIFJlYWQgdXAgdG8gQG5f Y3JjcyBmcm9tIEBwaXBlX2NyYy4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBibG9jaywgYW5kIHdp bGwKPiAtICogcmV0dXJuIGVhcmx5IGlmIG5vdCBlbm91Z2ggQ1JDcyBjYW4gYmUgY2FwdHVyZWQs IGlmIEBwaXBlX2NyYyBoYXMgYmVlbgo+IC0gKiBvcGVuZWQgdXNpbmcgaWd0X3BpcGVfY3JjX25l d19ub25ibG9jaygpLiBJdCB3aWxsIGJsb2NrIHVudGlsIEBuX2NyY3MgYXJlCj4gLSAqIHJldHJp ZXZlZCBpZiBAcGlwZV9jcmMgaGFzIGJlZW4gb3BlbmVkIHVzaW5nIGlndF9waXBlX2NyY19uZXco KS4gQG91dF9jcmNzIGlzCj4gLSAqIGFsbG9jZWQgYnkgdGhpcyBmdW5jdGlvbiBhbmQgbXVzdCBi ZSByZWxlYXNlZCB3aXRoIGZyZWUoKSBieSB0aGUgY2FsbGVyLgo+IC0gKgo+IC0gKiBDYWxsZXJz IG11c3Qgc3RhcnQgYW5kIHN0b3AgdGhlIGNhcHR1cmluZyB0aGVtc2VsdmVzIGJ5IGNhbGxpbmcK PiAtICogaWd0X3BpcGVfY3JjX3N0YXJ0KCkgYW5kIGlndF9waXBlX2NyY19zdG9wKCkuIEZvciBv bmUtc2hvdCBDUkMgY29sbGVjdGluZwo+IC0gKiBsb29rIGF0IGlndF9waXBlX2NyY19jb2xsZWN0 X2NyYygpLgo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBUaGUgbnVtYmVyIG9mIENSQ3MgY2Fw dHVyZWQuIFNob3VsZCBiZSBlcXVhbCB0byBAbl9jcmNzIGluIGJsb2NraW5nIG1vZGUsIGJ1dAo+ IC0gKiBjYW4gYmUgbGVzcyAoZXZlbiB6ZXJvKSBpbiBub24tYmxvY2tpbmcgbW9kZS4KPiAtICov Cj4gLWludAo+IC1pZ3RfcGlwZV9jcmNfZ2V0X2NyY3MoaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3Jj LCBpbnQgbl9jcmNzLAo+IC0JCSAgICAgIGlndF9jcmNfdCAqKm91dF9jcmNzKQo+IC17Cj4gLQlp Z3RfY3JjX3QgKmNyY3M7Cj4gLQlpbnQgbiA9IDA7Cj4gLQo+IC0JY3JjcyA9IGNhbGxvYyhuX2Ny Y3MsIHNpemVvZihpZ3RfY3JjX3QpKTsKPiAtCj4gLQlkbyB7Cj4gLQkJaWd0X2NyY190ICpjcmMg PSAmY3Jjc1tuXTsKPiAtCQlpbnQgcmV0Owo+IC0KPiAtCQlyZXQgPSByZWFkX2NyYyhwaXBlX2Ny YywgY3JjKTsKPiAtCQlpZiAocmV0IDwgMCkKPiAtCQkJY29udGludWU7Cj4gLQkJaWYgKHJldCA9 PSAwKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJbisrOwo+IC0JfSB3aGlsZSAobiA8IG5fY3Jjcyk7 Cj4gLQo+IC0JKm91dF9jcmNzID0gY3JjczsKPiAtCXJldHVybiBuOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBjcmNfc2FuaXR5X2NoZWNrcyhpZ3RfY3JjX3QgKmNyYykKPiAtewo+IC0JaW50IGk7 Cj4gLQlib29sIGFsbF96ZXJvID0gdHJ1ZTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgY3JjLT5u X3dvcmRzOyBpKyspIHsKPiAtCQlpZ3Rfd2Fybl9vbl9mKGNyYy0+Y3JjW2ldID09IDB4ZmZmZmZm ZmYsCj4gLQkJCSAgICAgICJTdXNwaWNpb3VzIENSQzogaXQgbG9va3MgbGlrZSB0aGUgQ1JDICIK PiAtCQkJICAgICAgInJlYWQgYmFjayB3YXMgZnJvbSBhIHJlZ2lzdGVyIGluIGEgcG93ZXJlZCAi Cj4gLQkJCSAgICAgICJkb3duIHdlbGxcbiIpOwo+IC0JCWlmIChjcmMtPmNyY1tpXSkKPiAtCQkJ YWxsX3plcm8gPSBmYWxzZTsKPiAtCX0KPiAtCj4gLQlpZ3Rfd2Fybl9vbl9mKGFsbF96ZXJvLCAi U3VzcGljaW91cyBDUkM6IEFsbCB2YWx1ZXMgYXJlIDAuXG4iKTsKPiAtfQo+IC0KPiAtLyoqCj4g LSAqIGlndF9waXBlX2NyY19jb2xsZWN0X2NyYzoKPiAtICogQHBpcGVfY3JjOiBwaXBlIENSQyBv YmplY3QKPiAtICogQG91dF9jcmM6IGJ1ZmZlciBmb3IgdGhlIGNhcHR1cmVkIENSQyB2YWx1ZXMK PiAtICoKPiAtICogUmVhZCBhIHNpbmdsZSBDUkMgZnJvbSBAcGlwZV9jcmMuIFRoaXMgZnVuY3Rp b24gYmxvY2tzIHVudGlsIHRoZSBDUkMgaXMKPiAtICogcmV0cmlldmVkLCBpcnJlc3BlY3RpdmUg b2Ygd2hldGhlciBAcGlwZV9jcmMgaGFzIGJlZW4gb3BlbmVkIHdpdGgKPiAtICogaWd0X3BpcGVf Y3JjX25ldygpIG9yIGlndF9waXBlX2NyY19uZXdfbm9uYmxvY2soKS4gIEBvdXRfY3JjIG11c3Qg YmUKPiAtICogYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIuCj4gLSAqCj4gLSAqIFRoaXMgZnVuY3Rp b24gdGFrZXMgY2FyZSBvZiB0aGUgcGlwZV9jcmMgYm9vay1rZWVwaW5nLCBpdCB3aWxsIHN0YXJ0 L3N0b3AKPiAtICogdGhlIGNvbGxlY3Rpb24gb2YgdGhlIENSQy4KPiAtICoKPiAtICogVGhpcyBm dW5jdGlvbiBhbHNvIGNhbGxzIHRoZSBpbnRlcmFjdGl2ZSBkZWJ1ZyB3aXRoIHRoZSAiY3JjIiBk b21haW4sIHNvIHlvdQo+IC0gKiBjYW4gbWFrZSB1c2Ugb2YgdGhpcyBmZWF0dXJlIHRvIGFjdHVh bGx5IHNlZSB0aGUgc2NyZWVuIHRoYXQgaXMgYmVpbmcgQ1JDJ2QuCj4gLSAqCj4gLSAqIEZvciBj b250aW51b3VzIENSQyBjb2xsZWN0aW9uIGxvb2sgYXQgaWd0X3BpcGVfY3JjX3N0YXJ0KCksCj4g LSAqIGlndF9waXBlX2NyY19nZXRfY3JjcygpIGFuZCBpZ3RfcGlwZV9jcmNfc3RvcCgpLgo+IC0g Ki8KPiAtdm9pZCBpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoaWd0X3BpcGVfY3JjX3QgKnBpcGVf Y3JjLCBpZ3RfY3JjX3QgKm91dF9jcmMpCj4gLXsKPiAtCWlndF9kZWJ1Z193YWl0X2Zvcl9rZXlw cmVzcygiY3JjIik7Cj4gLQo+IC0JaWd0X3BpcGVfY3JjX3N0YXJ0KHBpcGVfY3JjKTsKPiAtCXJl YWRfb25lX2NyYyhwaXBlX2NyYywgb3V0X2NyYyk7Cj4gLQlpZ3RfcGlwZV9jcmNfc3RvcChwaXBl X2NyYyk7Cj4gLQo+IC0JY3JjX3Nhbml0eV9jaGVja3Mob3V0X2NyYyk7Cj4gLX0KPiAtCj4gIC8q Cj4gICAqIERyb3AgY2FjaGVzCj4gICAqLwo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2RlYnVnZnMu aCBiL2xpYi9pZ3RfZGVidWdmcy5oCj4gaW5kZXggN2I4NDZhODMuLjAxYTVlZTA3IDEwMDY0NAo+ IC0tLSBhL2xpYi9pZ3RfZGVidWdmcy5oCj4gKysrIGIvbGliL2lndF9kZWJ1Z2ZzLmgKPiBAQCAt MjksOCArMjksNiBAQAo+ICAjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gICNpbmNsdWRlIDxzdGRpby5o Pgo+ICAKPiAtZW51bSBwaXBlOwo+IC0KPiAgY29uc3QgY2hhciAqaWd0X2RlYnVnZnNfbW91bnQo dm9pZCk7Cj4gIAo+ICBpbnQgaWd0X2RlYnVnZnNfZGlyKGludCBkZXZpY2UpOwo+IEBAIC01MCw4 NSArNDgsNiBAQCBib29sIGlndF9kZWJ1Z2ZzX3NlYXJjaChpbnQgZmQsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLCBjb25zdCBjaGFyICpzdWJzdHJpbmcpOwo+ICAjZGVmaW5lIGlndF9kZWJ1Z2ZzX3Jl YWQoZmQsIGZpbGVuYW1lLCBidWYpIFwKPiAgCQlfX2lndF9kZWJ1Z2ZzX3JlYWQoZmQsIChmaWxl bmFtZSksIChidWYpLCBzaXplb2YoYnVmKSkKPiAgCj4gLS8qCj4gLSAqIFBpcGUgQ1JDCj4gLSAq Lwo+IC0KPiAtLyoqCj4gLSAqIGlndF9waXBlX2NyY190Ogo+IC0gKgo+IC0gKiBQaXBlIENSQyBz dXBwb3J0IHN0cnVjdHVyZS4gTmVlZHMgdG8gYmUgYWxsb2NhdGVkIGFuZCBzZXQgdXAgd2l0aAo+ IC0gKiBpZ3RfcGlwZV9jcmNfbmV3KCkgZm9yIGEgc3BlY2lmaWMgcGlwZSBhbmQgcGlwZSBDUkMg c291cmNlIHZhbHVlLgo+IC0gKi8KPiAtdHlwZWRlZiBzdHJ1Y3QgX2lndF9waXBlX2NyYyBpZ3Rf cGlwZV9jcmNfdDsKPiAtCj4gLSNkZWZpbmUgRFJNX01BWF9DUkNfTlIgMTAKPiAtLyoqCj4gLSAq IGlndF9jcmNfdDoKPiAtICogQGZyYW1lOiBmcmFtZSBudW1iZXIgb2YgdGhlIGNhcHR1cmUgQ1JD Cj4gLSAqIEBuX3dvcmRzOiBpbnRlcm5hbCBmaWVsZCwgZG9uJ3QgYWNjZXNzCj4gLSAqIEBjcmM6 IGludGVybmFsIGZpZWxkLCBkb24ndCBhY2Nlc3MKPiAtICoKPiAtICogUGlwZSBDUkMgdmFsdWUu IEFsbCBvdGhlciBtZW1iZXJzIHRoYW4gQGZyYW1lIGFyZSBwcml2YXRlIGFuZCBzaG91bGQgbm90 IGJlCj4gLSAqIGluc3BlY3RlZCBieSB0ZXN0Y2FzZXMuCj4gLSAqLwo+IC10eXBlZGVmIHN0cnVj dCB7Cj4gLQl1aW50MzJfdCBmcmFtZTsKPiAtCWJvb2wgaGFzX3ZhbGlkX2ZyYW1lOwo+IC0JaW50 IG5fd29yZHM7Cj4gLQl1aW50MzJfdCBjcmNbRFJNX01BWF9DUkNfTlJdOwo+IC19IGlndF9jcmNf dDsKPiAtCj4gLS8qKgo+IC0gKiBpbnRlbF9waXBlX2NyY19zb3VyY2U6Cj4gLSAqIEBJTlRFTF9Q SVBFX0NSQ19TT1VSQ0VfTk9ORTogTm8gc291cmNlCj4gLSAqIEBJTlRFTF9QSVBFX0NSQ19TT1VS Q0VfUExBTkUxOiBQbGFuZSAxCj4gLSAqIEBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfUExBTkUyOiBQ bGFuZSAyCj4gLSAqIEBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfUEY6IFBhbmVsIEZpbHRlcgo+IC0g KiBASU5URUxfUElQRV9DUkNfU09VUkNFX1BJUEU6IFBpcGUKPiAtICogQElOVEVMX1BJUEVfQ1JD X1NPVVJDRV9UVjogVFYKPiAtICogQElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9EUF9COiBEaXNwbGF5 UG9ydCBCCj4gLSAqIEBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfRFBfQzogRGlzcGxheVBvcnQgQwo+ IC0gKiBASU5URUxfUElQRV9DUkNfU09VUkNFX0RQX0Q6IERpc3BsYXlQb3J0IEQKPiAtICogQElO VEVMX1BJUEVfQ1JDX1NPVVJDRV9BVVRPOiBBdXRvbWF0aWMgc291cmNlIHNlbGVjdGlvbgo+IC0g KiBASU5URUxfUElQRV9DUkNfU09VUkNFX01BWDogTnVtYmVyIG9mIGF2YWlsYWJsZSBzb3VyY2Vz Cj4gLSAqCj4gLSAqIEVudW1lcmF0aW9uIG9mIGFsbCBzdXBwb3J0ZWQgcGlwZSBDUkMgc291cmNl cy4gTm90IGFsbCBwbGF0Zm9ybXMgYW5kIGFsbAo+IC0gKiBvdXRwdXRzIHN1cHBvcnQgYWxsIG9m IHRoZW0uIEdlbmVyaWMgdGVzdHMgc2hvdWxkIGp1c3QgdXNlCj4gLSAqIElOVEVMX1BJUEVfQ1JD X1NPVVJDRV9BVVRPLiBJdCBzaG91bGQgYWx3YXlzIG1hcCB0byBhbiBlbmQtb2YtcGlwZSBDUkMK PiAtICogc3VpdGFibGUgZm9yIGNoZWNraW5nIHBsYW5lcywgY3Vyc29yLCBjb2xvciBjb3JyZWN0 aW9uIGFuZCBhbnkgb3RoZXIKPiAtICogb3V0cHV0LWFnbm9zdGljIGZlYXR1cmVzLgo+IC0gKi8K PiAtZW51bSBpbnRlbF9waXBlX2NyY19zb3VyY2Ugewo+IC0gICAgICAgIElOVEVMX1BJUEVfQ1JD X1NPVVJDRV9OT05FLAo+IC0gICAgICAgIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9QTEFORTEsCj4g LSAgICAgICAgSU5URUxfUElQRV9DUkNfU09VUkNFX1BMQU5FMiwKPiAtICAgICAgICBJTlRFTF9Q SVBFX0NSQ19TT1VSQ0VfUEYsCj4gLSAgICAgICAgSU5URUxfUElQRV9DUkNfU09VUkNFX1BJUEUs Cj4gLSAgICAgICAgSU5URUxfUElQRV9DUkNfU09VUkNFX1RWLAo+IC0gICAgICAgIElOVEVMX1BJ UEVfQ1JDX1NPVVJDRV9EUF9CLAo+IC0gICAgICAgIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9EUF9D LAo+IC0gICAgICAgIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9EUF9ELAo+IC0gICAgICAgIElOVEVM X1BJUEVfQ1JDX1NPVVJDRV9BVVRPLAo+IC0gICAgICAgIElOVEVMX1BJUEVfQ1JDX1NPVVJDRV9N QVgsCj4gLX07Cj4gLQo+IC12b2lkIGlndF9hc3NlcnRfY3JjX2VxdWFsKGNvbnN0IGlndF9jcmNf dCAqYSwgY29uc3QgaWd0X2NyY190ICpiKTsKPiAtY2hhciAqaWd0X2NyY190b19zdHJpbmcoaWd0 X2NyY190ICpjcmMpOwo+IC0KPiAtdm9pZCBpZ3RfcmVxdWlyZV9waXBlX2NyYyhpbnQgZmQpOwo+ IC1pZ3RfcGlwZV9jcmNfdCAqCj4gLWlndF9waXBlX2NyY19uZXcoaW50IGZkLCBlbnVtIHBpcGUg cGlwZSwgZW51bSBpbnRlbF9waXBlX2NyY19zb3VyY2Ugc291cmNlKTsKPiAtaWd0X3BpcGVfY3Jj X3QgKgo+IC1pZ3RfcGlwZV9jcmNfbmV3X25vbmJsb2NrKGludCBmZCwgZW51bSBwaXBlIHBpcGUs IGVudW0gaW50ZWxfcGlwZV9jcmNfc291cmNlIHNvdXJjZSk7Cj4gLXZvaWQgaWd0X3BpcGVfY3Jj X2ZyZWUoaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjKTsKPiAtdm9pZCBpZ3RfcGlwZV9jcmNfc3Rh cnQoaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjKTsKPiAtdm9pZCBpZ3RfcGlwZV9jcmNfc3RvcChp Z3RfcGlwZV9jcmNfdCAqcGlwZV9jcmMpOwo+IC1fX2F0dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9y ZXN1bHQpKQo+IC1pbnQgaWd0X3BpcGVfY3JjX2dldF9jcmNzKGlndF9waXBlX2NyY190ICpwaXBl X2NyYywgaW50IG5fY3JjcywKPiAtCQkJICBpZ3RfY3JjX3QgKipvdXRfY3Jjcyk7Cj4gLXZvaWQg aWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGlndF9waXBlX2NyY190ICpwaXBlX2NyYywgaWd0X2Ny Y190ICpvdXRfY3JjKTsKPiAtCj4gIHZvaWQgaWd0X2hwZF9zdG9ybV9zZXRfdGhyZXNob2xkKGlu dCBmZCwgdW5zaWduZWQgaW50IHRocmVzaG9sZCk7Cj4gIHZvaWQgaWd0X2hwZF9zdG9ybV9yZXNl dChpbnQgZmQpOwo+ICBib29sIGlndF9ocGRfc3Rvcm1fZGV0ZWN0ZWQoaW50IGZkKTsKPiBkaWZm IC0tZ2l0IGEvdGVzdHMvY2hhbWVsaXVtLmMgYi90ZXN0cy9jaGFtZWxpdW0uYwo+IGluZGV4IGUy NmYwNTU3Li41NDgyZWI1YiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9jaGFtZWxpdW0uYwo+ICsrKyBi L3Rlc3RzL2NoYW1lbGl1bS5jCj4gQEAgLTI2LDYgKzI2LDcgQEAKPiAgCj4gICNpbmNsdWRlICJj b25maWcuaCIKPiAgI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2NyYy5oIgo+ICAK PiAgI2luY2x1ZGUgPGZjbnRsLmg+Cj4gICNpbmNsdWRlIDxzdHJpbmcuaD4KPiBkaWZmIC0tZ2l0 IGEvdGVzdHMva21zX2F0b21pY190cmFuc2l0aW9uLmMgYi90ZXN0cy9rbXNfYXRvbWljX3RyYW5z aXRpb24uYwo+IGluZGV4IGUyMjc2M2JkLi4xYjkyMzNhZCAxMDA2NDQKPiAtLS0gYS90ZXN0cy9r bXNfYXRvbWljX3RyYW5zaXRpb24uYwo+ICsrKyBiL3Rlc3RzL2ttc19hdG9taWNfdHJhbnNpdGlv bi5jCj4gQEAgLTIyLDYgKzIyLDcgQEAKPiAgICovCj4gIAo+ICAjaW5jbHVkZSAiaWd0LmgiCj4g KyNpbmNsdWRlICJpZ3RfY3JjLmgiCj4gICNpbmNsdWRlICJkcm10ZXN0LmgiCj4gICNpbmNsdWRl ICJzd19zeW5jLmgiCj4gICNpbmNsdWRlIDxlcnJuby5oPgo+IGRpZmYgLS1naXQgYS90ZXN0cy9r bXNfY2NzLmMgYi90ZXN0cy9rbXNfY2NzLmMKPiBpbmRleCAyOWQ2NzZhZi4uNjZiZDBmMjkgMTAw NjQ0Cj4gLS0tIGEvdGVzdHMva21zX2Njcy5jCj4gKysrIGIvdGVzdHMva21zX2Njcy5jCj4gQEAg LTIzLDYgKzIzLDcgQEAKPiAgICovCj4gIAo+ICAjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRl ICJpZ3RfY3JjLmgiCj4gIAo+ICBJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdCByZW5kZXIgY29t cHJlc3Npb24gKFJDKSwgaW4gd2hpY2ggdGhlIG1haW4gc3VyZmFjZSAiCj4gIAkJICAgICAiaXMg Y29tcGxlbWVudGVkIGJ5IGEgY29sb3IgY29udHJvbCBzdXJmYWNlIChDQ1MpIHRoYXQgIgo+IGRp ZmYgLS1naXQgYS90ZXN0cy9rbXNfY2h2X2N1cnNvcl9mYWlsLmMgYi90ZXN0cy9rbXNfY2h2X2N1 cnNvcl9mYWlsLmMKPiBpbmRleCAzZTc0ZGYxMS4uYjAyOTU4YmQgMTAwNjQ0Cj4gLS0tIGEvdGVz dHMva21zX2Nodl9jdXJzb3JfZmFpbC5jCj4gKysrIGIvdGVzdHMva21zX2Nodl9jdXJzb3JfZmFp bC5jCj4gQEAgLTIzLDYgKzIzLDcgQEAKPiAgICovCj4gIAo+ICAjaW5jbHVkZSAiaWd0LmgiCj4g KyNpbmNsdWRlICJpZ3RfY3JjLmgiCj4gICNpbmNsdWRlIDxlcnJuby5oPgo+ICAjaW5jbHVkZSA8 bGltaXRzLmg+Cj4gICNpbmNsdWRlIDxzdGRib29sLmg+Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2tt c19jcnRjX2JhY2tncm91bmRfY29sb3IuYyBiL3Rlc3RzL2ttc19jcnRjX2JhY2tncm91bmRfY29s b3IuYwo+IGluZGV4IGUxMmUxNjM0Li4zYmNhYmNhYyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9rbXNf Y3J0Y19iYWNrZ3JvdW5kX2NvbG9yLmMKPiArKysgYi90ZXN0cy9rbXNfY3J0Y19iYWNrZ3JvdW5k X2NvbG9yLmMKPiBAQCAtMjMsNiArMjMsNyBAQAo+ICAgKi8KPiAgCj4gICNpbmNsdWRlICJpZ3Qu aCIKPiArI2luY2x1ZGUgImlndF9jcmMuaCIKPiAgI2luY2x1ZGUgPG1hdGguaD4KPiAgCj4gIAo+ IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfY3Vyc29yX2NyYy5jIGIvdGVzdHMva21zX2N1cnNvcl9j cmMuYwo+IGluZGV4IDRjNWUwMGMwLi40NjkzZTlmNCAxMDA2NDQKPiAtLS0gYS90ZXN0cy9rbXNf Y3Vyc29yX2NyYy5jCj4gKysrIGIvdGVzdHMva21zX2N1cnNvcl9jcmMuYwo+IEBAIC0yMyw2ICsy Myw3IEBACj4gICAqLwo+ICAKPiAgI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2Ny Yy5oIgo+ICAjaW5jbHVkZSA8ZXJybm8uaD4KPiAgI2luY2x1ZGUgPGxpbWl0cy5oPgo+ICAjaW5j bHVkZSA8c3RkYm9vbC5oPgo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfY3Vyc29yX2xlZ2FjeS5j IGIvdGVzdHMva21zX2N1cnNvcl9sZWdhY3kuYwo+IGluZGV4IDgxODBiMDQzLi41MDVlM2Y5ZCAx MDA2NDQKPiAtLS0gYS90ZXN0cy9rbXNfY3Vyc29yX2xlZ2FjeS5jCj4gKysrIGIvdGVzdHMva21z X2N1cnNvcl9sZWdhY3kuYwo+IEBAIC0yNyw2ICsyNyw3IEBACj4gICNpbmNsdWRlIDxzeXMvcG9s bC5oPgo+ICAKPiAgI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2NyYy5oIgo+ICAj aW5jbHVkZSAiaWd0X3JhbmQuaCIKPiAgI2luY2x1ZGUgImlndF9zdGF0cy5oIgo+ICAKPiBkaWZm IC0tZ2l0IGEvdGVzdHMva21zX2RyYXdfY3JjLmMgYi90ZXN0cy9rbXNfZHJhd19jcmMuYwo+IGlu ZGV4IGM1N2QzYTM1Li44Y2I0ZTE0NyAxMDA2NDQKPiAtLS0gYS90ZXN0cy9rbXNfZHJhd19jcmMu Ywo+ICsrKyBiL3Rlc3RzL2ttc19kcmF3X2NyYy5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgLyog VGhpcyBwcm9ncmFtIHRlc3RzIHdoZXRoZXIgdGhlIGlndF9kcmF3IGxpYnJhcnkgYWN0dWFsbHkg d29ya3MuICovCj4gIAo+ICAjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlICJpZ3RfY3JjLmgi Cj4gIAo+ICAjZGVmaW5lIE1BWF9DT05ORUNUT1JTIDMyCj4gIAo+IGRpZmYgLS1naXQgYS90ZXN0 cy9rbXNfZmJjX2NyYy5jIGIvdGVzdHMva21zX2ZiY19jcmMuYwo+IGluZGV4IDc5NjRlMDUyLi4x MDY1NmI4OSAxMDA2NDQKPiAtLS0gYS90ZXN0cy9rbXNfZmJjX2NyYy5jCj4gKysrIGIvdGVzdHMv a21zX2ZiY19jcmMuYwo+IEBAIC0yMyw2ICsyMyw3IEBACj4gICAqLwo+ICAKPiAgI2luY2x1ZGUg ImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2NyYy5oIgo+ICAjaW5jbHVkZSA8ZXJybm8uaD4KPiAg I2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiAgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gZGlmZiAtLWdpdCBh L3Rlc3RzL2ttc19mbGlwX3RpbGluZy5jIGIvdGVzdHMva21zX2ZsaXBfdGlsaW5nLmMKPiBpbmRl eCA1YWFlMjlhOC4uOGUxYTJmYjQgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX2ZsaXBfdGlsaW5n LmMKPiArKysgYi90ZXN0cy9rbXNfZmxpcF90aWxpbmcuYwo+IEBAIC0yNSw2ICsyNSw3IEBACj4g ICAqLwo+ICAKPiAgI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2NyYy5oIgo+ICAj aW5jbHVkZSA8ZXJybm8uaD4KPiAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiAgI2luY2x1ZGUgPHN0 ZGlvLmg+Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19mcm9udGJ1ZmZlcl90cmFja2luZy5jIGIv dGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMKPiBpbmRleCBlMDM1MjRmMS4uYzFiMDg2 NjkgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMKPiArKysg Yi90ZXN0cy9rbXNfZnJvbnRidWZmZXJfdHJhY2tpbmcuYwo+IEBAIC0yNSw2ICsyNSw3IEBACj4g ICAqLwo+ICAKPiAgI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2NyYy5oIgo+ICAj aW5jbHVkZSAiaWd0X3N5c2ZzLmgiCj4gICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KPiAgI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19tbWFwX3dyaXRlX2NyYy5j IGIvdGVzdHMva21zX21tYXBfd3JpdGVfY3JjLmMKPiBpbmRleCBlNWYwODlmNi4uNzllZmE3OTIg MTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX21tYXBfd3JpdGVfY3JjLmMKPiArKysgYi90ZXN0cy9r bXNfbW1hcF93cml0ZV9jcmMuYwo+IEBAIC0zMSw2ICszMSw3IEBACj4gICNpbmNsdWRlIDxzdHJp bmcuaD4KPiAgCj4gICNpbmNsdWRlICJkcm10ZXN0LmgiCj4gKyNpbmNsdWRlICJpZ3RfY3JjLmgi Cj4gICNpbmNsdWRlICJpZ3RfZGVidWdmcy5oIgo+ICAjaW5jbHVkZSAiaWd0X2ttcy5oIgo+ICAj aW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfbW1pb192 c19jc19mbGlwLmMgYi90ZXN0cy9rbXNfbW1pb192c19jc19mbGlwLmMKPiBpbmRleCBmYTk0N2Q5 Yy4uZWUxZDIwMmEgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX21taW9fdnNfY3NfZmxpcC5jCj4g KysrIGIvdGVzdHMva21zX21taW9fdnNfY3NfZmxpcC5jCj4gQEAgLTIyLDYgKzIyLDcgQEAKPiAg ICovCj4gIAo+ICAjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlICJpZ3RfY3JjLmgiCj4gICNp bmNsdWRlIDxlcnJuby5oPgo+ICAjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICAjaW5jbHVkZSA8c3Rk aW8uaD4KPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3BpcGVfY29sb3IuYyBiL3Rlc3RzL2ttc19w aXBlX2NvbG9yLmMKPiBpbmRleCBhMzEwMGZhZS4uMzg5ZmIzZGUgMTAwNjQ0Cj4gLS0tIGEvdGVz dHMva21zX3BpcGVfY29sb3IuYwo+ICsrKyBiL3Rlc3RzL2ttc19waXBlX2NvbG9yLmMKPiBAQCAt MjgsNiArMjgsNyBAQAo+ICAjaW5jbHVkZSAiZHJtLmgiCj4gICNpbmNsdWRlICJkcm10ZXN0Lmgi Cj4gICNpbmNsdWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF9jcmMuaCIKPiAgCj4gIElHVF9U RVNUX0RFU0NSSVBUSU9OKCJUZXN0IENvbG9yIEZlYXR1cmVzIGF0IFBpcGUgbGV2ZWwiKTsKPiAg Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19waXBlX2NyY19iYXNpYy5jIGIvdGVzdHMva21zX3Bp cGVfY3JjX2Jhc2ljLmMKPiBpbmRleCAzNWFkZGRiYS4uMzhkYTNhNDIgMTAwNjQ0Cj4gLS0tIGEv dGVzdHMva21zX3BpcGVfY3JjX2Jhc2ljLmMKPiArKysgYi90ZXN0cy9rbXNfcGlwZV9jcmNfYmFz aWMuYwo+IEBAIC0yMyw2ICsyMyw3IEBACj4gICAqLwo+ICAKPiAgI2luY2x1ZGUgImlndC5oIgo+ ICsjaW5jbHVkZSAiaWd0X2NyYy5oIgo+ICAjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCj4gICNpbmNs dWRlIDxlcnJuby5oPgo+ICAjaW5jbHVkZSA8c3RkYm9vbC5oPgo+IGRpZmYgLS1naXQgYS90ZXN0 cy9rbXNfcGxhbmUuYyBiL3Rlc3RzL2ttc19wbGFuZS5jCj4gaW5kZXggMWQ5MmE2MmIuLjJmYTU4 ZThmIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2ttc19wbGFuZS5jCj4gKysrIGIvdGVzdHMva21zX3Bs YW5lLmMKPiBAQCAtMjUsNiArMjUsNyBAQAo+ICAgKi8KPiAgCj4gICNpbmNsdWRlICJpZ3QuaCIK PiArI2luY2x1ZGUgImlndF9jcmMuaCIKPiAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICNpbmNsdWRl IDxzdGRib29sLmg+Cj4gICNpbmNsdWRlIDxzdGRpby5oPgo+IGRpZmYgLS1naXQgYS90ZXN0cy9r bXNfcGxhbmVfbG93cmVzLmMgYi90ZXN0cy9rbXNfcGxhbmVfbG93cmVzLmMKPiBpbmRleCBlZTM5 NzU5Yy4uYTRlMzcyNzUgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX3BsYW5lX2xvd3Jlcy5jCj4g KysrIGIvdGVzdHMva21zX3BsYW5lX2xvd3Jlcy5jCj4gQEAgLTIzLDYgKzIzLDcgQEAKPiAgICov Cj4gIAo+ICAjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlICJpZ3RfY3JjLmgiCj4gICNpbmNs dWRlICJkcm10ZXN0LmgiCj4gICNpbmNsdWRlIDxlcnJuby5oPgo+ICAjaW5jbHVkZSA8c3RkYm9v bC5oPgo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfcGxhbmVfbXVsdGlwbGUuYyBiL3Rlc3RzL2tt c19wbGFuZV9tdWx0aXBsZS5jCj4gaW5kZXggZjZjNjIyMzUuLjFiNjBhMDY3IDEwMDY0NAo+IC0t LSBhL3Rlc3RzL2ttc19wbGFuZV9tdWx0aXBsZS5jCj4gKysrIGIvdGVzdHMva21zX3BsYW5lX211 bHRpcGxlLmMKPiBAQCAtMjMsNiArMjMsNyBAQAo+ICAgKi8KPiAgCj4gICNpbmNsdWRlICJpZ3Qu aCIKPiArI2luY2x1ZGUgImlndF9jcmMuaCIKPiAgI2luY2x1ZGUgImRybXRlc3QuaCIKPiAgI2lu Y2x1ZGUgPGVycm5vLmg+Cj4gICNpbmNsdWRlIDxzdGRib29sLmg+Cj4gZGlmZiAtLWdpdCBhL3Rl c3RzL2ttc19wbGFuZV9zY2FsaW5nLmMgYi90ZXN0cy9rbXNfcGxhbmVfc2NhbGluZy5jCj4gaW5k ZXggMTQ1Nzg5NGEuLmQ1NTRmMjdmIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2ttc19wbGFuZV9zY2Fs aW5nLmMKPiArKysgYi90ZXN0cy9rbXNfcGxhbmVfc2NhbGluZy5jCj4gQEAgLTIzLDYgKzIzLDcg QEAKPiAgICovCj4gIAo+ICAjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRlICJpZ3RfY3JjLmgi Cj4gICNpbmNsdWRlIDxtYXRoLmg+Cj4gIAo+ICAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX3B3 cml0ZV9jcmMuYyBiL3Rlc3RzL2ttc19wd3JpdGVfY3JjLmMKPiBpbmRleCBlZTg5NWRiNi4uZjFl NmYwMjMgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX3B3cml0ZV9jcmMuYwo+ICsrKyBiL3Rlc3Rz L2ttc19wd3JpdGVfY3JjLmMKPiBAQCAtMjMsNiArMjMsNyBAQAo+ICAgKi8KPiAgCj4gICNpbmNs dWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF9jcmMuaCIKPiAgI2luY2x1ZGUgPGVycm5vLmg+ Cj4gICNpbmNsdWRlIDxsaW1pdHMuaD4KPiAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiBkaWZmIC0t Z2l0IGEvdGVzdHMva21zX3JvdGF0aW9uX2NyYy5jIGIvdGVzdHMva21zX3JvdGF0aW9uX2NyYy5j Cj4gaW5kZXggODNlMzdmMTIuLmZhMzYxMTAwIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2ttc19yb3Rh dGlvbl9jcmMuYwo+ICsrKyBiL3Rlc3RzL2ttc19yb3RhdGlvbl9jcmMuYwo+IEBAIC0yMyw2ICsy Myw3IEBACj4gICAqLwo+ICAKPiAgI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2Ny Yy5oIgo+ICAjaW5jbHVkZSA8bWF0aC5oPgo+ICAKPiAgI2RlZmluZSBNQVhfRkVOQ0VTIDMyCj4g ZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc191bml2ZXJzYWxfcGxhbmUuYyBiL3Rlc3RzL2ttc191bml2 ZXJzYWxfcGxhbmUuYwo+IGluZGV4IDMxZjA3ODA0Li4xNDMwMGI3YSAxMDA2NDQKPiAtLS0gYS90 ZXN0cy9rbXNfdW5pdmVyc2FsX3BsYW5lLmMKPiArKysgYi90ZXN0cy9rbXNfdW5pdmVyc2FsX3Bs YW5lLmMKPiBAQCAtMjIsNiArMjIsNyBAQAo+ICAgKi8KPiAgCj4gICNpbmNsdWRlICJpZ3QuaCIK PiArI2luY2x1ZGUgImlndF9jcmMuaCIKPiAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICNpbmNsdWRl IDxzdGRib29sLmg+Cj4gICNpbmNsdWRlIDxzdGRpby5oPgo+IGRpZmYgLS1naXQgYS90b29scy9p bnRlbF9kaXNwbGF5X2NyYy5jIGIvdG9vbHMvaW50ZWxfZGlzcGxheV9jcmMuYwo+IGluZGV4IGQx YjI4ZWE3Li4xMDRmNDMyZiAxMDA2NDQKPiAtLS0gYS90b29scy9pbnRlbF9kaXNwbGF5X2NyYy5j Cj4gKysrIGIvdG9vbHMvaW50ZWxfZGlzcGxheV9jcmMuYwo+IEBAIC0zMCw2ICszMCw3IEBACj4g ICNpbmNsdWRlIDx1bmlzdGQuaD4KPiAgCj4gICNpbmNsdWRlICJpZ3RfY29yZS5oIgo+ICsjaW5j bHVkZSAiaWd0X2NyYy5oIgo+ICAjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKPiAgI2luY2x1ZGUg ImlndF9rbXMuaCIKPiAgCj4gLS0gCj4gMi4xMy4yCj4gCj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==