From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH i-g-t v3 1/4] chamelium: Calculate CRC from framebuffer instead of hardcoding it Date: Wed, 05 Jul 2017 16:49:27 -0400 Message-ID: <1499287767.20388.6.camel@redhat.com> References: <20170705080435.26789-1-paul.kocialkowski@linux.intel.com> <1499286840.20388.4.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9062B6E524 for ; Wed, 5 Jul 2017 20:49:30 +0000 (UTC) In-Reply-To: <1499286840.20388.4.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paul Kocialkowski , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE3LTA3LTA1IGF0IDE2OjM0IC0wNDAwLCBMeXVkZSBQYXVsIHdyb3RlOgo+IFNv IGEgY291cGxlIG9mIG5vdGVzIGhlcmUgdGhhdCB3aWxsIG1ha2UgaXQgYSBsb3QgZWFzaWVyIGZv ciBtZSB0bwo+IHJldmlldyB0aGVzZSBpbiB0aGUgZnV0dXJlCj4gCj4gwqAqIFdoZW4geW91J3Jl IGRvaW5nIGEgbmV3IHJldmlzaW9uIG9mIGEgcGF0Y2ggc2VyaWVzLCBpdCdzIGhlbHBmdWwKPiB0 bwo+IMKgwqDCoGtlZXAgaXQgaW4gdGhlIHNhbWUgZW1haWwgdGhyZWFkIGFzIHRoZSBvcmlnaW5h bCB2MSBzbyBpdCdzIGVhc2llcgo+IMKgwqDCoHRvIGtlZXAgdHJhY2sgb2YgaW4gcGVvcGxlJ3Mg bWFpbCBjbGllbnRzIChhcyB3ZWxsIGFzIGF2b2lkaW5nCj4gwqDCoMKgYWNjaWRlbnRhbGx5IHJl dmlld2luZyBvbGRlciBwYXRjaCB2ZXJzaW9ucy4gSSB1c3VhbGx5IGRvCj4gc29tZXRoaW5nCj4g wqDCoMKgbGlrZSB0aGlzIChvdGhlciBwcm9qZWN0cyBtaWdodCByZXF1ZXN0IHlvdSBkbyB0aGlz IHNsaWdodGx5Cj4gwqDCoMKgZGlmZmVyZW50bHksIGJ1dCB0aGlzIHNob3VsZCBiZSBmaW5lIGhl cmUpOgo+IMKgwqDCoMKgKiBbUEFUQ0ggMC8yXSBDbGVhbmluZyB1cCB0aGUgYWxpZ25tZW50IG9m IHZhcmlvdXMgZm9vcwo+IMKgwqDCoMKgwqDCoMKgKiBbUEFUQ0ggMS8yXSBGb28gdGhlIGJhciwg bm90IHRoZSBiYXoKPiDCoMKgwqDCoMKgwqDCoCogW1BBVENIIDIvMl0gSW50cm9kdWNlIHRoZSBh bWF6aW5nIG5ldyBmb29fYmFyCj4gwqDCoMKgwqDCoMKgwqAqIFtQQVRDSCB2MiAwLzJdIENsZWFu aW5nIHVwIHRoZSBhbGlnbm1lbnQgb2YgdmFyaW91cyBmb29zCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqAqIFtQQVRDSCB2MiAxLzJdIEZvbyB0aGUgYmFyLCBub3QgdGhlIGJhego+IMKgwqDCoMKgwqDC oMKgwqDCoMKgKiBbUEFUQ0ggdjIgMi8yXSBJbnRyb2R1Y2UgdGhlIGFtYXppbmcgbmV3IGZvb19i YXIKPiDCoMKgwqDCoMKgwqDCoCogW1BBVENIIHYzIDAvMl0gQ2xlYW5pbmcgdXAgdGhlIGFsaWdu bWVudCBvZiB2YXJpb3VzIGZvb3MKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCogW1BBVENIIHYzIDEv Ml0gRm9vIHRoZSBiYXIsIG5vdCB0aGUgYmF6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAqIFtQQVRD SCB2MyAyLzJdIEludHJvZHVjZSB0aGUgYW1hemluZyBuZXcgZm9vX2Jhcgo+IMKgKiBUcnkgbm90 IHRvIGdyb3VwIHVucmVsYXRlZCBwYXRjaGVzIHRvZ2V0aGVyIGluIHRoZSBzYW1lIHRocmVhZC4K PiBUaGlzCj4gwqDCoMKgYWxzbyBtYWtlcyBzb3J0aW5nIHRocm91Z2ggYWxsIG9mIHRoZW0gYSBs aXR0bGUgbW9yZSBkaWZmaWN1bHQuCj4gwqAqIFdoZW4geW91IG1ha2UgbmV3IHJldmlzaW9ucyBv ZiBwYXRjaGVzLCBpdCdzIHZlcnkgdXNlZnVsIGlmIHlvdQo+IGFsc28KPiDCoMKgwqBpbmNsdWRl IGEgbGlzdCBvZiBjaGFuZ2VzIHlvdSBtYWRlIHRvIHRoZSBwYXRjaCBzaW5jZSB0aGUgbGFzdAo+ IMKgwqDCoHJldmlzaW9uLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgdmVyeSBmaW5lbHkgZGV0YWls ZWQsIHNvbWV0aGluZwo+IGxpa2UKPiDCoMKgwqB0aGlzIHdvdWxkIHN1ZmZpY2U6Cj4gwqDCoMKg wqAqIFZhcmlvdXMgc3R5bGUgZml4ZXMKPiDCoMKgwqDCoCogUmVuYW1lIGJheiB0byBtb28sIGFk ZCBjb3cgbm9pc2VzCj4gwqDCoMKgwqAqIFNwbGl0IGluaXRfY293KCkgaW50byBpbml0X3doaXRl X2NvdygpIGFuZCBpbml0X2JsYWNrX2NvdygpCj4gwqDCoMKgwqDCoMKgaW5zdGVhZCBvZiBoYW5k bGluZyBib3RoIGtpbmRzIG9mIGNvd3MgaW4gdGhlIHNhbWUgZnVuY3Rpb24KPiDCoMKgwqDCoCog Rml4IGRvY3VtZW50YXRpb24KPiDCoMKgwqDCoEZvciBpbnRlbC1ncHUtdG9vbHMsIGl0J3MgZmlu ZSB0byBqdXN0IHN0aWNrIHRoaXMgaW4gdGhlIGNvbW1pdAo+IMKgwqDCoMKgbWVzc2FnZS4gT3Ro ZXIgcHJvamVjdHMgbWF5IHJlcXVlc3QgeW91IHB1dCB0aGUgY2hhbmdlbG9nIGJlbG93Cj4gdGhl Cj4gwqDCoMKgwqAtLS0tLSByaWdodCBhYm92ZSB0aGUgZGlmZiBzdGF0cyAodGhpcyBhbGxvd3Mg dGhlIGNvbW1lbnRzIG5vdCB0bwo+IMKgwqDCoMKgZ2V0IGluY2x1ZGVkIGluIHRoZSBmaW5hbCBj b21taXQgbWVzc2FnZSkKPiDCoCogVW5sZXNzIHRoZXkgYXJlIGFsbCB2ZXJ5IHNtYWxsIGFuZCBs ZXNzIGltcG9ydGFudCBmaXhlcywgaW5jbHVkaW5nCj4gwqDCoMKgY292ZXIgbGV0dGVycyBoZWxw cyBhcyB3ZWxsIHNpbmNlIGl0IGxldHMgcGF0Y2h3b3JrIGdyb3VwIHRvZ2V0aGVyCj4gwqDCoMKg cGF0Y2ggc2VyaWVzIGxpa2UgdGhpcy4KPiAKPiBBbnl3YXksIGJhY2sgdG8gdGhlIGFjdHVhbCBw YXRjaDoKPiBBIGdvb2Qgc3RhcnQhIFdpbGwgbmVlZCBhIGNvdXBsZSBvZiBjaGFuZ2VzIHRob3Vn aAo+IAo+IE9uIFdlZCwgMjAxNy0wNy0wNSBhdCAxMTowNCArMDMwMCwgUGF1bCBLb2NpYWxrb3dz a2kgd3JvdGU6Cj4gPiBUaGlzIGludHJvZHVjZXMgQ1JDIGNhbGN1bGF0aW9uIGZvciByZWZlcmVu Y2UgZnJhbWVzLCBpbnN0ZWFkIG9mCj4gPiB1c2luZwo+ID4gaGFyZGNvZGVkIHZhbHVlcyBmb3Ig dGhlbS4gVGhlIHJlbmRlcmluZyBvZiByZWZlcmVuY2UgZnJhbWVzIG1heQo+ID4gZGlmZmVyCj4g PiBmcm9tIG1hY2hpbmUgdG8gbWFjaGluZSwgZXNwZWNpYWxseSBkdWUgdG8gZm9udCByZW5kZXJp bmcsIGFuZCB0aGUKPiA+IGZyYW1lIGl0c2VsZiBtYXkgY2hhbmdlIHdpdGggc3Vic2VxdWVudCBJ R1QgY2hhbmdlcy4KPiA+IAo+ID4gVGhlc2UgZGlmZmVyZW5jZXMgd291bGQgY2F1c2UgdGhlIENS QyBjaGVja3MgdG8gZmFpbCBvbiBkaWZmZXJlbnQKPiA+IHNldHVwcy4gVGhpcyBhbGxvd3MgdGhl bSB0byBwYXNzIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHVwLgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5 OiBQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAbGludXguaW50ZWwuY29tCj4g PiA+Cj4gPiAtLS0KPiA+IMKgbGliL2lndF9jaGFtZWxpdW0uYyB8IDE2MAo+ID4gKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gwqBsaWIvaWd0 X2NoYW1lbGl1bS5oIHzCoMKgwqA1ICsrCj4gPiDCoHRlc3RzL2NoYW1lbGl1bS5jwqDCoMKgfMKg wqA3NiArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiDCoDMgZmlsZXMgY2hhbmdlZCwgMTgz IGluc2VydGlvbnMoKyksIDU4IGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvbGli L2lndF9jaGFtZWxpdW0uYyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+IGluZGV4IGJmZjA4YzBl Li5iOWQ4MGI2YiAxMDA2NDQKPiA+IC0tLSBhL2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+ICsrKyBi L2xpYi9pZ3RfY2hhbWVsaXVtLmMKPiA+IEBAIC05NCw2ICs5NCwxNCBAQCBzdHJ1Y3QgY2hhbWVs aXVtX2ZyYW1lX2R1bXAgewo+ID4gwqAJc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0Owo+ID4g wqB9Owo+ID4gwqAKPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYyB7Cj4gPiArCWludCBmZDsK PiA+ICsJc3RydWN0IGlndF9mYiAqZmI7Cj4gPiArCj4gPiArCXB0aHJlYWRfdCB0aHJlYWRfaWQ7 Cj4gPiArCWlndF9jcmNfdCAqcmV0Owo+ID4gK307Cj4gPiArCj4gCj4gVGhlIG5hbWUgb2YgdGhp cyBzdHJ1Y3R1cmUgaXMgYSBsaXR0bGUgbWlzbGVhZGluZywgYmVjYXVzZSBub3cgd2UKPiBoYXZl Cj4gYW4gQVBJIHRoYXQgZXhwb3NlcyBib3RoIGEgc3RydWN0IGNoYW1lbGl1bV9mYl9jcmMgc3Ry dWN0IGluIGFkZGl0aW9uCj4gdG8gdGhlIGlndF9jcmNfdCBzdHJ1Y3QuIFJlbmFtZSB0aGlzIHRv IHNvbWV0aGluZyBsaWtlIHN0cnVjdAo+IGNoYW1lbGl1bV9mYl9jcmNfd29yawo+IAo+ID4gwqBz dHJ1Y3QgY2hhbWVsaXVtIHsKPiA+IMKgCXhtbHJwY19lbnYgZW52Owo+ID4gwqAJeG1scnBjX2Ns aWVudCAqY2xpZW50Owo+ID4gQEAgLTEwMDMsNiArMTAxMSwxNTggQEAgaW50IGNoYW1lbGl1bV9n ZXRfZnJhbWVfbGltaXQoc3RydWN0Cj4gPiBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKPiA+IMKgCXJl dHVybiByZXQ7Cj4gPiDCoH0KPiA+IMKgCj4gPiArc3RhdGljIHVpbnQzMl90IGNoYW1lbGl1bV94 cmdiX2hhc2gxNih1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludAo+ID4gd2lkdGgsCj4gPiArCQkJ CcKgwqDCoMKgwqDCoGludCBoZWlnaHQsIGludCBrLCBpbnQgbSkKPiA+ICt7Cj4gCj4gV2UncmUg bm90IG1vZGlmeWluZyBidWZmZXIsIHNvIG1ha2UgaXQgYSBjb25zdC4gQXMgd2VsbCwgZmVlbCBm cmVlIHRvCj4gbWFyayB0aGlzIGZ1bmN0aW9uIGFzIGlubGluZS4KPiAKPiA+ICsJdW5zaWduZWQg Y2hhciByLCBnLCBiOwo+ID4gKwl1aW50NjRfdCBzdW0gPSAwOwo+ID4gKwl1aW50NjRfdCBjb3Vu dCA9IDA7Cj4gPiArCXVpbnQ2NF90IHZhbHVlOwo+ID4gKwl1aW50MzJfdCBoYXNoOwo+ID4gKwlp bnQgaW5kZXg7Cj4gPiArCWludCBpOwo+ID4gKwo+ID4gKwlmb3IgKGk9MDsgaSA8IHdpZHRoICog aGVpZ2h0OyBpKyspIHsKPiA+ICsJCWlmICgoaSAlIG0pICE9IGspCj4gPiArCQkJY29udGludWU7 Cj4gPiArCj4gPiArCQlpbmRleCA9IGkgKiA0Owo+ID4gKwo+ID4gKwkJciA9IGJ1ZmZlcltpbmRl eCArIDJdOwo+ID4gKwkJZyA9IGJ1ZmZlcltpbmRleCArIDFdOwo+ID4gKwkJYiA9IGJ1ZmZlcltp bmRleCArIDBdOwo+ID4gKwo+ID4gKwkJdmFsdWUgPSByIHwgKGcgPDwgOCkgfCAoYiA8PCAxNik7 Cj4gPiArCQlzdW0gKz0gKytjb3VudCAqIHZhbHVlOwo+ID4gKwl9Cj4gPiArCj4gPiArCWhhc2gg PSAoKHN1bSA+PiAwKSBeIChzdW0gPj4gMTYpIF4gKHN1bSA+PiAzMikgXiAoc3VtID4+Cj4gPiA0 OCkpICYgMHhmZmZmOwo+ID4gKwo+ID4gKwlyZXR1cm4gaGFzaDsKPiA+ICt9Cj4gPiArCj4gPiAr LyoqCj4gPiArICogY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmM6Cj4gPiArICogQGZkOiBUaGUg ZHJtIGZpbGUgZGVzY3JpcHRvcgo+ID4gKyAqIEBmYjogVGhlIGZyYW1lYnVmZmVyIHRvIGNhbGN1 bGF0ZSB0aGUgQ1JDIGZvcgo+ID4gKyAqCj4gPiArICogQ2FsY3VsYXRlcyBhIENSQyBmb3IgdGhl IHByb3ZpZGVkIGZyYW1lYnVmZmVyLCB0aGUgc2FtZSB3YXkgYXMKPiA+IHRoZSBDaGFtZWxpdW0u Cj4gCj4gQ2FsY3VsYXRlIHRoZSBDUkMgZm9yIHRoZSBwcm92aWRlZCBmcmFtZWJ1ZmZlciwgdXNp bmcgdGhlIENoYW1lbGl1bSdzCj4gQ1JDIGFsZ29yaXRobQo+ID4gKyAqIFRoaXMgY2FsY3VsYXRl cyB0aGUgQ1JDIGluIGEgbm9uLXRocmVhZGVkIGZhc2hpb24uCj4gPiArICoKPiA+ICsgKiBSZXR1 cm5zOiBUaGUgY2FsY3VsYXRlZCBDUkMKPiA+ICsgKi8KPiA+ICtpZ3RfY3JjX3QgKmNoYW1lbGl1 bV9jYWxjdWxhdGVfZmJfY3JjKGludCBmZCwgc3RydWN0IGlndF9mYiAqZmIpCj4gPiArewo+ID4g KwlpZ3RfY3JjX3QgKnJldDsKPiA+ICsJY2Fpcm9fdCAqY3I7Cj4gPiArCWNhaXJvX3N1cmZhY2Vf dCAqZmJfc3VyZmFjZTsKPiA+ICsJdW5zaWduZWQgY2hhciAqYnVmZmVyOwo+ID4gKwlpbnQgbiA9 IDQ7Cj4gPiArCWludCB3LCBoOwo+ID4gKwlpbnQgaSwgajsKPiA+ICsKPiA+ICsJcmV0ID0gY2Fs bG9jKDEsIHNpemVvZihpZ3RfY3JjX3QpKTsKPiA+ICsKPiA+ICsJLyogR2V0IHRoZSBjYWlybyBz dXJmYWNlIGZvciB0aGUgZnJhbWVidWZmZXIgKi8KPiA+ICsJY3IgPSBpZ3RfZ2V0X2NhaXJvX2N0 eChmZCwgZmIpOwo+ID4gKwlmYl9zdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjcik7Cj4gPiAr CWNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKGZiX3N1cmZhY2UpOwo+ID4gKwljYWlyb19kZXN0cm95 KGNyKTsKPiA+ICsKPiA+ICsJYnVmZmVyID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShm Yl9zdXJmYWNlKTsKPiA+ICsJdyA9IGZiLT53aWR0aDsKPiA+ICsJaCA9IGZiLT5oZWlnaHQ7Cj4g PiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKPiA+ICsJCWogPSBuIC0gaSAtIDE7 Cj4gPiArCQlyZXQtPmNyY1tpXSA9IGNoYW1lbGl1bV94cmdiX2hhc2gxNihidWZmZXIsIHcsIGgs Cj4gPiBqLAo+ID4gbik7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0LT5uX3dvcmRzID0gbjsKPiA+ ICsJY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGZiX3N1cmZhY2UpOwo+ID4gKwo+ID4gKwlyZXR1cm4g cmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCAqY2hhbWVsaXVtX2NhbGN1bGF0ZV9m Yl9jcmNfdGhyZWFkKHZvaWQgKmRhdGEpCj4gPiArewo+ID4gKwlzdHJ1Y3QgY2hhbWVsaXVtX2Zi X2NyYyAqZmJfY3JjID0gKHN0cnVjdCBjaGFtZWxpdW1fZmJfY3JjCj4gPiAqKSBkYXRhOwo+ID4g KwljYWlyb190ICpjcjsKPiA+ICsJY2Fpcm9fc3VyZmFjZV90ICpmYl9zdXJmYWNlOwo+ID4gKwl1 bnNpZ25lZCBjaGFyICpidWZmZXI7Cj4gPiArCWludCBuID0gNDsKPiA+ICsJaW50IHcsIGg7Cj4g PiArCWludCBpLCBqOwo+ID4gKwo+ID4gKwkvKiBHZXQgdGhlIGNhaXJvIHN1cmZhY2UgZm9yIHRo ZSBmcmFtZWJ1ZmZlciAqLwo+ID4gKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGZiX2NyYy0+ZmQs IGZiX2NyYy0+ZmIpOwo+ID4gKwlmYl9zdXJmYWNlID0gY2Fpcm9fZ2V0X3RhcmdldChjcik7Cj4g PiArCWNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKGZiX3N1cmZhY2UpOwo+ID4gKwljYWlyb19kZXN0 cm95KGNyKTsKPiA+ICsKPiA+ICsJYnVmZmVyID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0 YShmYl9zdXJmYWNlKTsKPiA+ICsJdyA9IGZiX2NyYy0+ZmItPndpZHRoOwo+ID4gKwloID0gZmJf Y3JjLT5mYi0+aGVpZ2h0Owo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4g PiArCQlqID0gbiAtIGkgLSAxOwo+ID4gKwkJZmJfY3JjLT5yZXQtPmNyY1tpXSA9Cj4gPiBjaGFt ZWxpdW1feHJnYl9oYXNoMTYoYnVmZmVyLAo+ID4gdywgaCwgaiwgbik7Cj4gPiArCX0KPiA+ICsK PiA+ICsJZmJfY3JjLT5yZXQtPm5fd29yZHMgPSBuOwo+ID4gKwljYWlyb19zdXJmYWNlX2Rlc3Ry b3koZmJfc3VyZmFjZSk7Cj4gPiArCj4gPiArCXJldHVybiBOVUxMOwo+ID4gK30KQmxlaCwgSSBj b21wbGV0ZWx5IGZvcmdvdCB0byBtZW50aW9uIHRoaXM6CgpUaGlzIHBhcnQgb2YgY29kZSBkZWZp bml0ZWx5IG5lZWRzIHRvIGJlIGRlZHVwbGljYXRlZC4gVGhlIG9ubHkKZGlmZmVyZW5jZSBiZXR3 ZWVuIHRoZSB0aHJlYWRlZCB2ZXJzaW9uIGFuZCB0aGUgbm9uIHRocmVhZGVkIHZlcnNpb24gaXMK d2hlcmUgdGhleSB0YWtlIHRoZWlyIGlucHV0IGZyb20gYW5kIHdoZXJlL2hvdyB0aGV5IHN0b3Jl IHRoZWlyCnJlc3VsdHMuIEkgd291bGQganVzdCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzIChhbnl0 aGluZyBtYXJrZWQgYXMgc3RhdGljCmhlcmUgaXMgbm90IGV4cG9zZWQgdGhyb3VnaCB0aGUgYXBp IG9mIGNvdXJzZSkKCnN0YXRpYyBjaGFtZWxpdW1fZG9fY2FsY3VsYXRlX2ZiX2NyYyhmZCwgZmIs IG91dCkKICAgIFBlcmZvcm1zIGFjdHVhbCBDUkMgY2FsY3VsYXRpb25zCgpjaGFtZWxpdW1fY2Fs Y3VsYXRlX2ZiX2NyYyhmZCwgZmIpCiAgICBBbGxvY2F0ZXMgc3RvcmFnZSBmb3IgcmVzdWx0cyBh bmQgcnVucwogICAgY2hhbWVsaXVtX2RvX2NhbGN1bGF0ZV9mYl9jcmMoKSBpbiBzaW5nbGUgdGhy ZWFkZWQgY29udGV4dAoKc3RhdGljIGNoYW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjX2FzeW5jX3dv cmsoZGF0YSkKICAgIEFjdHVhbCBmdW5jdGlvbiB0aGF0J3MgcnVuIGZvciB0aGUgY2FsY3VsYXRp b24gdGhyZWFkLCBjYWxscwogICAgY2hhbWVsaXVtX2RvX2NhbGN1bGF0ZV9mYl9jcmMgd2l0aCB0 aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzIGdpdmVuCiAgICB0byB1cyBmcm9tIHRoZSBnZW5lcmlj IGRhdGEgcG9pbnRlcgoKY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfYXN5bmMoZmQsIGZiKQog ICAgRW50cnlwb2ludCBmb3Igc3RhcnRpbmcgYW4gYXN5bmMgZmIgY3JjIGNhbGN1bGF0aW9uLCBy ZXR1cm5zIGEKICAgIGZiX2NyY19hc3luY193b3JrIHN0cnVjdAoKY2hhbWVsaXVtX2NhbGN1bGF0 ZV9mYl9jcmNfZmluaXNoKHdvcmspCiAgICBTeW5jaHJvbml6ZXMgd2l0aCB0aGUgY2FsY3VsYXRp b24gdGhyZWFkLCB3YWl0cyBmb3IgdGhlIHJlc3VsdCBhbmQKICAgIGJsb2NrcyB1bnRpbCBpdCdz IHJlYWR5IHRoZW4gcmV0dXJucyBpdC4KCj4gPiArCj4gPiArLyoqCj4gPiArICogY2hhbWVsaXVt X2NhbGN1bGF0ZV9mYl9jcmNfbGF1bmNoOgo+ID4gKyAqIEBmZDogVGhlIGRybSBmaWxlIGRlc2Ny aXB0b3IKPiA+ICsgKiBAZmI6IFRoZSBmcmFtZWJ1ZmZlciB0byBjYWxjdWxhdGUgdGhlIENSQyBm b3IKPiA+ICsgKgo+ID4gKyAqIExhdW5jaGVzIHRoZSBDUkMgY2FsY3VsYXRpb24gZm9yIHRoZSBw cm92aWRlZCBmcmFtZWJ1ZmZlciwgdGhlCj4gPiBzYW1lIHdheSBhcwo+ID4gKyAqIHRoZSBDaGFt ZWxpdW0uIFRoaXMgY2FsY3VsYXRlcyB0aGUgQ1JDIGluIGEgdGhyZWFkZWQgZmFzaGlvbi4KPiA+ ICsgKiBUaHJlYWQtcmVsYXRlZCBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCBhbmQgc2hvdWxkIGJl IHBhc3NlZCB0bwo+ID4gYQo+ID4gc3Vic2VxdWVudAo+ID4gKyAqIGNhbGwgdG8gY2hhbWVsaXVt X2NhbGN1bGF0ZV9mYl9jcmNfcmVzdWx0LiBJdCBzaG91bGQgbm90IGJlCj4gPiBmcmVlZC4KPiA+ ICsgKgo+ID4gKyAqIFJldHVybnM6IEFuIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUgd2l0aCB0aHJl YWQtcmVsYXRlZAo+ID4gaW5mb3JtYXRpb24KPiAKPiBUaGUgdXNlciBkb2Vzbid0IG5lZWQgdG8g a25vdyBhYm91dCB0aGUgbWFnaWMgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsCj4gc2luY2Ugd2UncmUg bm90IGdvaW5nIHRvIGV4cG9zZSBpdCdzIGRlZmluaXRpb24gb3V0c2lkZSBvZiB0aGlzIGZpbGUK PiBhbnl3YXkuCj4gPiArICovCj4gPiArc3RydWN0IGNoYW1lbGl1bV9mYl9jcmMgKmNoYW1lbGl1 bV9jYWxjdWxhdGVfZmJfY3JjX2xhdW5jaChpbnQgZmQsCj4gPiArCQkJCQkJCcKgwqDCoHN0cnVj dAo+ID4gaWd0X2ZiICpmYikKPiA+ICt7Cj4gPiArCXN0cnVjdCBjaGFtZWxpdW1fZmJfY3JjICpm Yl9jcmM7Cj4gPiArCj4gPiArCWZiX2NyYyA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNoYW1l bGl1bV9mYl9jcmMpKTsKPiA+ICsJZmJfY3JjLT5yZXQgPSBjYWxsb2MoMSwgc2l6ZW9mKGlndF9j cmNfdCkpOwo+ID4gKwlmYl9jcmMtPmZkID0gZmQ7Cj4gPiArCWZiX2NyYy0+ZmIgPSBmYjsKPiA+ ICsKPiA+ICsJcHRocmVhZF9jcmVhdGUoJmZiX2NyYy0+dGhyZWFkX2lkLCBOVUxMLAo+ID4gKwkJ wqDCoMKgwqDCoMKgwqBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY190aHJlYWQsIGZiX2NyYyk7 Cj4gPiArCj4gPiArCXJldHVybiBmYl9jcmM7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq IGNoYW1lbGl1bV9jYWxjdWxhdGVfZmJfY3JjX3Jlc3VsdDoKPiA+ICsgKiBAZmJfY3JjOiBBbiBp bnRlcm1lZGlhdGUgc3RydWN0dXJlIHdpdGggdGhyZWFkLXJlbGF0ZWQKPiA+IGluZm9ybWF0aW9u Cj4gPiArICoKPiA+ICsgKiBQcm92aWRlcyB0aGUgcmVzdWx0IGZvciB0aGUgcHJldmlvdXNseS1s YXVuY2hlZCBDUkMKPiA+IGNhbGN1bGF0aW9uLgo+IAo+IEJsb2NrcyB1bnRpbCB0aGUgYXN5bmMg Q1JDIGNhbGN1bGF0aW9uIGlzIGZpbmlzaGVkLCBhbmQgdGhlbiByZXR1cm5zCj4gdGhlIHJlc3Vs dC4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6IFRoZSBjYWxjdWxhdGVkIENSQwo+ID4gKyAqLwo+ ID4gK2lndF9jcmNfdCAqY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfcmVzdWx0KHN0cnVjdAo+ ID4gY2hhbWVsaXVtX2ZiX2NyYwo+ID4gKmZiX2NyYykKPiA+ICt7Cj4gPiArCWlndF9jcmNfdCAq cmV0Owo+ID4gKwo+ID4gKwlwdGhyZWFkX2pvaW4oZmJfY3JjLT50aHJlYWRfaWQsIE5VTEwpOwo+ ID4gKwo+ID4gKwlyZXQgPSBmYl9jcmMtPnJldDsKPiA+ICsJZnJlZShmYl9jcmMpOwo+ID4gKwo+ ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+IMKgc3RhdGljIHVuc2lnbmVkIGludCBj aGFtZWxpdW1fZ2V0X3BvcnRfdHlwZShzdHJ1Y3QgY2hhbWVsaXVtCj4gPiAqY2hhbWVsaXVtLAo+ ID4gwqAJCQkJCcKgwqDCoMKgc3RydWN0IGNoYW1lbGl1bV9wb3J0Cj4gPiAqcG9ydCkKPiA+IMKg ewo+ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfY2hhbWVsaXVtLmggYi9saWIvaWd0X2NoYW1lbGl1 bS5oCj4gPiBpbmRleCA4MTMyMmFkMi4uZTUxY2Y0ZjkgMTAwNjQ0Cj4gPiAtLS0gYS9saWIvaWd0 X2NoYW1lbGl1bS5oCj4gPiArKysgYi9saWIvaWd0X2NoYW1lbGl1bS5oCj4gPiBAQCAtMzYsNiAr MzYsNyBAQAo+ID4gwqBzdHJ1Y3QgY2hhbWVsaXVtOwo+ID4gwqBzdHJ1Y3QgY2hhbWVsaXVtX3Bv cnQ7Cj4gPiDCoHN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcDsKPiA+ICtzdHJ1Y3QgY2hhbWVs aXVtX2ZiX2NyYzsKPiA+IMKgCj4gPiDCoHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bV9pbml0 KGludCBkcm1fZmQpOwo+ID4gwqB2b2lkIGNoYW1lbGl1bV9kZWluaXQoc3RydWN0IGNoYW1lbGl1 bSAqY2hhbWVsaXVtKTsKPiA+IEBAIC05Miw2ICs5MywxMCBAQCBzdHJ1Y3QgY2hhbWVsaXVtX2Zy YW1lX2R1bXAKPiA+ICpjaGFtZWxpdW1fcG9ydF9kdW1wX3BpeGVscyhzdHJ1Y3QgY2hhbWVsaXVt ICpjaGFtZWwKPiA+IMKgCQkJCQkJCXN0cnVjdAo+ID4gY2hhbWVsaXVtX3BvcnQgKnBvcnQsCj4g PiDCoAkJCQkJCQlpbnQgeCwgaW50Cj4gPiB5LAo+ID4gwqAJCQkJCQkJaW50IHcsIGludAo+ID4g aCk7Cj4gPiAraWd0X2NyY190ICpjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyYyhpbnQgZmQsIHN0 cnVjdCBpZ3RfZmIgKmZiKTsKPiA+ICtzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyYyAqY2hhbWVsaXVt X2NhbGN1bGF0ZV9mYl9jcmNfbGF1bmNoKGludCBmZCwKPiA+ICsJCQkJCQkJwqDCoMKgc3RydWN0 Cj4gPiBpZ3RfZmIgKmZiKTsKPiA+ICtpZ3RfY3JjX3QgKmNoYW1lbGl1bV9jYWxjdWxhdGVfZmJf Y3JjX3Jlc3VsdChzdHJ1Y3QKPiA+IGNoYW1lbGl1bV9mYl9jcmMKPiA+ICpmYl9jcmMpOwo+ID4g wqBpbnQgY2hhbWVsaXVtX2dldF9jYXB0dXJlZF9mcmFtZV9jb3VudChzdHJ1Y3QgY2hhbWVsaXVt Cj4gPiAqY2hhbWVsaXVtKTsKPiA+IMKgaW50IGNoYW1lbGl1bV9nZXRfZnJhbWVfbGltaXQoc3Ry dWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAo+ID4gwqAJCQnCoMKgwqDCoMKgwqBzdHJ1Y3QgY2hh bWVsaXVtX3BvcnQgKnBvcnQsCj4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvY2hhbWVsaXVtLmMgYi90 ZXN0cy9jaGFtZWxpdW0uYwo+ID4gaW5kZXggZTMwNjc2NjQuLjNmZDJiMDJjIDEwMDY0NAo+ID4g LS0tIGEvdGVzdHMvY2hhbWVsaXVtLmMKPiA+ICsrKyBiL3Rlc3RzL2NoYW1lbGl1bS5jCj4gPiBA QCAtNDksNDMgKzQ5LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qgewo+ID4gwqAjZGVmaW5lIEhQRF9UT0dH TEVfQ09VTlRfVkdBIDUKPiA+IMKgI2RlZmluZSBIUERfVE9HR0xFX0NPVU5UX0RQX0hETUkgMTUK PiA+IMKgCj4gPiAtLyogUHJlLWNhbGN1bGF0ZWQgQ1JDcyBmb3IgdGhlIHBhdHRlcm4gZmIsIGZv ciBhbGwgdGhlIG1vZGVzIGluCj4gPiB0aGUKPiA+IGRlZmF1bHQKPiA+IC0gKiBjaGFtZWxpdW0g ZWRpZAo+ID4gLSAqLwo+ID4gLXN0cnVjdCBjcmNfZW50cnkgewo+ID4gLQlpbnQgd2lkdGg7Cj4g PiAtCWludCBoZWlnaHQ7Cj4gPiAtCWlndF9jcmNfdCBjcmM7Cj4gPiAtfTsKPiA+IC0KPiA+IC0j ZGVmaW5lIENSQ19FTlRSWSh3XywgaF8sIC4uLikgXAo+ID4gLQl7IHdfLCBoXywgeyAubl93b3Jk cyA9IDQsIC5jcmMgPSB7IF9fVkFfQVJHU19fIH0gfSB9Cj4gPiAtCj4gPiAtc3RhdGljIGNvbnN0 IHN0cnVjdCBjcmNfZW50cnkgcGF0dGVybl9mYl9jcmNzW10gPSB7Cj4gPiAtCUNSQ19FTlRSWSgx OTIwLCAxMDgwLCAweGY4NTksIDB4YTc1MSwgMHg4YzgxLCAweDQ1YTEpLAo+ID4gLQlDUkNfRU5U UlkoMTI4MCzCoMKgNzIwLCAweGNlYzIsIDB4NDI0NiwgMHg2Y2ZkLCAweGViNDMpLAo+ID4gLQlD UkNfRU5UUlkoMTAyNCzCoMKgNzY4LCAweDg1ZTUsIDB4ZjBjZCwgMHhhZmUzLCAweDdmMTgpLAo+ ID4gLQlDUkNfRU5UUlkoIDgwMCzCoMKgNjAwLCAweDZiMzksIDB4MzJiNiwgMHg4MzFhLCAweGIw M2UpLAo+ID4gLQlDUkNfRU5UUlkoIDY0MCzCoMKgNDgwLCAweGExMjEsIDB4MjQ3MywgMHhiMTUw LCAweDhjNDcpLAo+ID4gLX07Cj4gPiAtI3VuZGVmIENSQ19FTlRSWQo+ID4gLQo+ID4gLXN0YXRp YyBjb25zdCBpZ3RfY3JjX3QgKgo+ID4gLWdldF9wcmVjYWxjdWxhdGVkX2NyYyhzdHJ1Y3QgY2hh bWVsaXVtX3BvcnQgKnBvcnQsIGludCB3LCBpbnQgaCkKPiA+IC17Cj4gPiAtCWludCBpOwo+ID4g LQljb25zdCBzdHJ1Y3QgY3JjX2VudHJ5ICplbnRyeTsKPiA+IC0KPiA+IC0JZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUocGF0dGVybl9mYl9jcmNzKTsgaSsrKSB7Cj4gPiAtCQllbnRyeSA9ICZw YXR0ZXJuX2ZiX2NyY3NbaV07Cj4gPiAtCj4gPiAtCQlpZiAoZW50cnktPndpZHRoID09IHcgJiYg ZW50cnktPmhlaWdodCA9PSBoKQo+ID4gLQkJCXJldHVybiAmZW50cnktPmNyYzsKPiA+IC0JfQo+ ID4gLQo+ID4gLQlyZXR1cm4gTlVMTDsKPiA+IC19Cj4gPiAtCj4gPiDCoHN0YXRpYyB2b2lkCj4g PiDCoHJlcXVpcmVfY29ubmVjdG9yX3ByZXNlbnQoZGF0YV90ICpkYXRhLCB1bnNpZ25lZCBpbnQg dHlwZSkKPiA+IMKgewo+ID4gQEAgLTQyNCw3ICszODcsOCBAQCB0ZXN0X2Rpc3BsYXlfY3JjX3Np bmdsZShkYXRhX3QgKmRhdGEsIHN0cnVjdAo+ID4gY2hhbWVsaXVtX3BvcnQgKnBvcnQpCj4gPiDC oAlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKPiA+IMKgCWlndF9wbGFuZV90ICpwcmltYXJ5Owo+ID4g wqAJaWd0X2NyY190ICpjcmM7Cj4gPiAtCWNvbnN0IGlndF9jcmNfdCAqZXhwZWN0ZWRfY3JjOwo+ ID4gKwlpZ3RfY3JjX3QgKmV4cGVjdGVkX2NyYzsKPiA+ICsJc3RydWN0IGNoYW1lbGl1bV9mYl9j cmMgKmZiX2NyYzsKPiA+IMKgCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gPiDCoAlkcm1Nb2RlTW9kZUlu Zm8gKm1vZGU7Cj4gPiDCoAlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiBAQCAtNDQ3 LDI0ICs0MTEsMjEgQEAgdGVzdF9kaXNwbGF5X2NyY19zaW5nbGUoZGF0YV90ICpkYXRhLCBzdHJ1 Y3QKPiA+IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ID4gwqAJCQkJCQnCoMKgwqDCoDAsIDAsIDAs ICZmYik7Cj4gPiDCoAkJaWd0X2Fzc2VydChmYl9pZCA+IDApOwo+ID4gwqAKPiA+IC0JCWVuYWJs ZV9vdXRwdXQoZGF0YSwgcG9ydCwgb3V0cHV0LCBtb2RlLCAmZmIpOwo+ID4gKwkJZmJfY3JjID0g Y2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfbGF1bmNoKGRhdGEtCj4gPiA+IGRybV9mZCwgJmZi KTsKPiA+IAo+ID4gwqAKPiA+IC0JCWV4cGVjdGVkX2NyYyA9IGdldF9wcmVjYWxjdWxhdGVkX2Ny Yyhwb3J0LAo+ID4gLQkJCQkJCcKgwqDCoMKgwqBtb2RlLQo+ID4gPmhkaXNwbGF5LAo+ID4gLQkJ CQkJCcKgwqDCoMKgwqBtb2RlLQo+ID4gPiB2ZGlzcGxheSk7Cj4gPiAKPiA+IC0JCWlmICghZXhw ZWN0ZWRfY3JjKSB7Cj4gPiAtCQkJaWd0X3dhcm4oIk5vIHByZWNhbGN1bGF0ZWQgQ1JDIGZvdW5k IGZvcgo+ID4gJWR4JWQsIHNraXBwaW5nIENSQyBjaGVja1xuIiwKPiA+IC0JCQkJwqBtb2RlLT5o ZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOwo+ID4gLQkJCWdvdG8gbmV4dDsKPiA+IC0JCX0KPiA+ ICsJCWVuYWJsZV9vdXRwdXQoZGF0YSwgcG9ydCwgb3V0cHV0LCBtb2RlLCAmZmIpOwo+ID4gwqAK PiA+IMKgCQlpZ3RfZGVidWcoIlRlc3Rpbmcgc2luZ2xlIENSQyBmZXRjaFxuIik7Cj4gPiArCj4g PiDCoAkJY3JjID0gY2hhbWVsaXVtX2dldF9jcmNfZm9yX2FyZWEoZGF0YS0+Y2hhbWVsaXVtLAo+ ID4gcG9ydCwKPiA+IMKgCQkJCQkJwqAwLCAwLCAwLCAwKTsKPiA+ICsKPiA+ICsJCWV4cGVjdGVk X2NyYyA9Cj4gPiBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19yZXN1bHQoZmJfY3JjKTsKPiA+ ICsKPiA+IMKgCQlpZ3RfYXNzZXJ0X2NyY19lcXVhbChjcmMsIGV4cGVjdGVkX2NyYyk7Cj4gPiAr CQlmcmVlKGV4cGVjdGVkX2NyYyk7Cj4gPiDCoAkJZnJlZShjcmMpOwo+ID4gwqAKPiA+IC1uZXh0 Ogo+ID4gwqAJCWRpc2FibGVfb3V0cHV0KGRhdGEsIHBvcnQsIG91dHB1dCk7Cj4gPiDCoAkJaWd0 X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZmYik7Cj4gPiDCoAl9Cj4gPiBAQCAtNDgwLDcgKzQ0 MSw4IEBAIHRlc3RfZGlzcGxheV9jcmNfbXVsdGlwbGUoZGF0YV90ICpkYXRhLCBzdHJ1Y3QKPiA+ IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ID4gwqAJaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4gPiDC oAlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiA+IMKgCWlndF9jcmNfdCAqY3JjOwo+ID4gLQljb25z dCBpZ3RfY3JjX3QgKmV4cGVjdGVkX2NyYzsKPiA+ICsJaWd0X2NyY190ICpleHBlY3RlZF9jcmM7 Cj4gPiArCXN0cnVjdCBjaGFtZWxpdW1fZmJfY3JjICpmYl9jcmM7Cj4gPiDCoAlzdHJ1Y3QgaWd0 X2ZiIGZiOwo+ID4gwqAJZHJtTW9kZU1vZGVJbmZvICptb2RlOwo+ID4gwqAJZHJtTW9kZUNvbm5l Y3RvciAqY29ubmVjdG9yOwo+ID4gQEAgLTUwMywxNSArNDY1LDkgQEAgdGVzdF9kaXNwbGF5X2Ny Y19tdWx0aXBsZShkYXRhX3QgKmRhdGEsIHN0cnVjdAo+ID4gY2hhbWVsaXVtX3BvcnQgKnBvcnQp Cj4gPiDCoAkJCQkJCcKgwqDCoMKgMCwgMCwgMCwgJmZiKTsKPiA+IMKgCQlpZ3RfYXNzZXJ0KGZi X2lkID4gMCk7Cj4gPiDCoAo+ID4gLQkJZW5hYmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQs IG1vZGUsICZmYik7Cj4gPiArCQlmYl9jcmMgPSBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19s YXVuY2goZGF0YS0KPiA+ID4gZHJtX2ZkLCAmZmIpOwo+ID4gCj4gPiDCoAo+ID4gLQkJZXhwZWN0 ZWRfY3JjID0gZ2V0X3ByZWNhbGN1bGF0ZWRfY3JjKHBvcnQsIG1vZGUtCj4gPiA+IGhkaXNwbGF5 LAo+ID4gCj4gPiAtCQkJCQkJwqDCoMKgwqDCoG1vZGUtCj4gPiA+IHZkaXNwbGF5KTsKPiA+IAo+ ID4gLQkJaWYgKCFleHBlY3RlZF9jcmMpIHsKPiA+IC0JCQlpZ3Rfd2FybigiTm8gcHJlY2FsY3Vs YXRlZCBDUkMgZm91bmQgZm9yCj4gPiAlZHglZCwgc2tpcHBpbmcgQ1JDIGNoZWNrXG4iLAo+ID4g LQkJCQnCoG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7Cj4gPiAtCQkJZ290byBuZXh0 Owo+ID4gLQkJfQo+ID4gKwkJZW5hYmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQsIG1vZGUs ICZmYik7Cj4gPiDCoAo+ID4gwqAJCS8qIFdlIHdhbnQgdG8ga2VlcCB0aGUgZGlzcGxheSBydW5u aW5nIGZvciBhCj4gPiBsaXR0bGUKPiA+IGJpdCwgc2luY2UKPiA+IMKgCQnCoCogdGhlcmUncyBh bHdheXMgdGhlIHBvdGVudGlhbCB0aGUgZHJpdmVyIGlzbid0Cj4gPiBhYmxlIHRvIGtlZXAKPiA+ IEBAIC01MjIsMTEgKzQ3OCwxNSBAQCB0ZXN0X2Rpc3BsYXlfY3JjX211bHRpcGxlKGRhdGFfdCAq ZGF0YSwKPiA+IHN0cnVjdAo+ID4gY2hhbWVsaXVtX3BvcnQgKnBvcnQpCj4gPiDCoAkJCQkJCcKg wqDCoCZjYXB0dXJlZF9mcmFtZQo+ID4gX2MKPiA+IG91bnQpOwo+ID4gwqAKPiA+IMKgCQlpZ3Rf ZGVidWcoIkNhcHR1cmVkICVkIGZyYW1lc1xuIiwKPiA+IGNhcHR1cmVkX2ZyYW1lX2NvdW50KTsK PiA+ICsKPiA+ICsJCWV4cGVjdGVkX2NyYyA9Cj4gPiBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2Ny Y19yZXN1bHQoZmJfY3JjKTsKPiA+ICsKPiA+IMKgCQlmb3IgKGogPSAwOyBqIDwgY2FwdHVyZWRf ZnJhbWVfY291bnQ7IGorKykKPiA+IMKgCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY1tqXSwK PiA+IGV4cGVjdGVkX2NyYyk7Cj4gPiArCj4gPiArCQlmcmVlKGV4cGVjdGVkX2NyYyk7Cj4gPiDC oAkJZnJlZShjcmMpOwo+ID4gwqAKPiA+IC1uZXh0Ogo+ID4gwqAJCWRpc2FibGVfb3V0cHV0KGRh dGEsIHBvcnQsIG91dHB1dCk7Cj4gPiDCoAkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZm Yik7Cj4gPiDCoAl9Ci0tIApDaGVlcnMsCglMeXVkZQpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK