From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v4 1/6] drm/i915: store all subslice masks Date: Mon, 15 Jan 2018 18:09:31 +0000 Message-ID: <09d92328-5deb-2a90-7a20-484468f1e5c8@intel.com> References: <20180115144159.25913-1-lionel.g.landwerlin@intel.com> <20180115144159.25913-2-lionel.g.landwerlin@intel.com> <61e6c5d8-4c40-1ab5-1105-caadc5a752b7@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5BAFA89F43 for ; Mon, 15 Jan 2018 18:09:33 +0000 (UTC) In-Reply-To: <61e6c5d8-4c40-1ab5-1105-caadc5a752b7@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTUvMDEvMTggMTc6MzcsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMTUvMDEvMjAx OCAxNDo0MSwgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+IFVwIHRvIG5vdywgc3Vic2xpY2Ug bWFzayB3YXMgYXNzdW1lZCB0byBiZSB1bmlmb3JtIGFjcm9zcyBzbGljZXMuIEJ1dAo+PiBzdGFy dGluZyB3aXRoIENhbm5vbmxha2UsIHNsaWNlcyBjYW4gYmUgYXN5bW1ldHJpYyAoZm9yIGV4YW1w bGUgc2xpY2UwCj4+IGhhcyBkaWZmZXJlbnQgbnVtYmVyIG9mIHN1YnNsaWNlcyBhcyBzbGljZTEr KS4gVGhpcyBjaGFuZ2Ugc3RvcmVzIGFsbAo+PiBzdWJzbGljZXMgbWFza3MgZm9yIGFsbCBzbGlj ZXMgcmF0aGVyIHRoYW4gaGF2aW5nIGEgc2luZ2xlIG1hc2sgdGhhdAo+PiBhcHBsaWVzIHRvIGFs bCBzbGljZXMuCj4+Cj4+IHYyOiBSZXdvcmsgaG93IHdlIHN0b3JlIHRvdGFsIG51bWJlcnMgaW4g c3NldV9kZXZfaW5mbyAoVHZydGtvKQo+PiDCoMKgwqDCoCBGaXggQ0hWIGV1IG1hc2tzLCB3YXMg cmVhZGluZyBkaXNhYmxlZCBhcyBlbmFibGVkIChUdnJ0a28pCj4+IMKgwqDCoMKgIFJlYWRhYmls aXR5IGNoYW5nZXMgKFR2cnRrbykKPj4gwqDCoMKgwqAgQWRkIEVVIGluZGV4IGhlbHBlciAoVHZy dGtvKQo+Pgo+PiB2MzogVHVybiBBTElHTih2LCA4KSAvIDggaW50byBESVZfUk9VTkRfVVAodiwg QklUU19QRVJfQllURSkgKFR2cnRrbykKPj4gwqDCoMKgwqAgUmV1c2Ugc3NldV9ldV9pZHgoKSBm b3Igc2V0dGluZyBldV9tYXNrIG9uIENIViAoVHZydGtvKQo+PiDCoMKgwqDCoCBSZWZvcm1hdCBk ZWJ1ZyBwcmludHMgZm9yIHN1YnNsaWNlcyAoVHZydGtvKQo+Pgo+PiB2NDogQ2hhbmdlIGV1X21h c2sgaGVscGVyIGludG8gc3NldV9zZXRfZXVzKCkgKFR2cnRrbykKPj4KPj4gU2lnbmVkLW9mZi1i eTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgo+PiAt LS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmPCoMKgwqDCoMKgIHzC oCAyNSArKy0tCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmPCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqAgMiArLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZp Y2VfaW5mby5jIHwgMjAxIAo+PiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCj4+IMKg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RldmljZV9pbmZvLmggfMKgIDQ3ICsrKysrKyst Cj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jwqDCoMKgwqDCoMKgwqDCoCB8 wqDCoCAyICstCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaMKg IHzCoMKgIDIgKy0KPj4gwqAgNiBmaWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9ucygrKSwgNjMg ZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+PiBp bmRleCBjYzY1OWI0YjJhNDUuLjY4NDU1MTExNDk2NSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMKPj4gQEAgLTQyODksNyArNDI4OSw3IEBAIHN0YXRpYyB2b2lkIAo+PiBj aGVycnl2aWV3X3NzZXVfZGV2aWNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiDCoCDCoMKg wqDCoMKgwqDCoMKgwqAgc3NldS0+c2xpY2VfbWFzayA9IEJJVCgwKTsKPj4gLcKgwqDCoMKgwqDC oMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgfD0gQklUKHNzKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHNz ZXUtPnN1YnNsaWNlX21hc2tbMF0gfD0gQklUKHNzKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGV1 X2NudCA9ICgoc2lnMVtzc10gJiBDSFZfRVUwOF9QR19FTkFCTEUpID8gMCA6IDIpICsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKHNpZzFbc3NdICYgQ0hWX0VVMTlfUEdfRU5BQkxF KSA/IDAgOiAyKSArCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKChzaWcxW3NzXSAm IENIVl9FVTIxMF9QR19FTkFCTEUpID8gMCA6IDIpICsKPj4gQEAgLTQzMzYsNyArNDMzNiw3IEBA IHN0YXRpYyB2b2lkIGdlbjEwX3NzZXVfZGV2aWNlX3N0YXR1cyhzdHJ1Y3QgCj4+IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51 ZTsKPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2sgfD0gQklUKHMpOwo+ PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFzayA9IGluZm8tPnNzZXUuc3Vic2xp Y2VfbWFzazsKPj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2tbc10gPSBpbmZv LT5zc2V1LnN1YnNsaWNlX21hc2tbc107Cj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKHNz ID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dW5zaWduZWQgaW50IGV1X2NudDsKPj4gQEAgLTQzOTEsOCArNDM5MSw4IEBAIHN0YXRpYyB2b2lk IGdlbjlfc3NldV9kZXZpY2Vfc3RhdHVzKHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5zbGljZV9tYXNrIHw9IEJJVChzKTsK Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChJU19HRU45X0JDKGRldl9wcml2KSkKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFzayA9Cj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuc3Vic2xpY2Vf bWFzazsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFza1tzXSA9 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfSU5GTyhkZXZfcHJpdikt PnNzZXUuc3Vic2xpY2VfbWFza1tzXTsKPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAoc3Mg PSAwOyBzcyA8IHNzX21heDsgc3MrKykgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 bnNpZ25lZCBpbnQgZXVfY250Owo+PiBAQCAtNDQwMiw3ICs0NDAyLDcgQEAgc3RhdGljIHZvaWQg Z2VuOV9zc2V1X2RldmljZV9zdGF0dXMoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHNr aXAgZGlzYWJsZWQgc3Vic2xpY2UgKi8KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiDCoCAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgfD0gQklUKHNzKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrW3NdIHw9IEJJVChzcyk7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZXVfY250ID0gMiAqIGh3ZWlnaHQzMihldV9yZWdbMipzICsgc3MvMl0gJgo+PiBAQCAtNDQyNCw5 ICs0NDI0LDEyIEBAIHN0YXRpYyB2b2lkIAo+PiBicm9hZHdlbGxfc3NldV9kZXZpY2Vfc3RhdHVz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPj4gwqDCoMKgwqDCoCBzc2V1LT5z bGljZV9tYXNrID0gc2xpY2VfaW5mbyAmIEdFTjhfTFNMSUNFU1RBVF9NQVNLOwo+PiDCoCDCoMKg wqDCoMKgIGlmIChzc2V1LT5zbGljZV9tYXNrKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzc2V1LT5z dWJzbGljZV9tYXNrID0gSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuc3Vic2xpY2VfbWFzazsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPmV1X3Blcl9zdWJzbGljZSA9Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuZXVf cGVyX3N1YnNsaWNlOwo+PiArwqDCoMKgwqDCoMKgwqAgZm9yIChzID0gMDsgcyA8IGZscyhzc2V1 LT5zbGljZV9tYXNrKTsgcysrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1 YnNsaWNlX21hc2tbc10gPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElOVEVM X0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlX21hc2tbc107Cj4+ICvCoMKgwqDCoMKgwqDC oCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV90b3RhbCA9IHNzZXUtPmV1X3Blcl9z dWJzbGljZSAqCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1X3N1 YnNsaWNlX3RvdGFsKHNzZXUpOwo+PiDCoCBAQCAtNDQ0NSw2ICs0NDQ4LDcgQEAgc3RhdGljIHZv aWQgaTkxNV9wcmludF9zc2V1X2luZm8oc3RydWN0IAo+PiBzZXFfZmlsZSAqbSwgYm9vbCBpc19h dmFpbGFibGVfaW5mbywKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKPj4gwqDCoMKgwqDCoCBj b25zdCBjaGFyICp0eXBlID0gaXNfYXZhaWxhYmxlX2luZm8gPyAiQXZhaWxhYmxlIiA6ICJFbmFi bGVkIjsKPj4gK8KgwqDCoCBpbnQgczsKPj4gwqAgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICLC oCAlcyBTbGljZSBNYXNrOiAlMDR4XG4iLCB0eXBlLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3NldS0+c2xpY2VfbWFzayk7Cj4+IEBAIC00NDUyLDEwICs0NDU2LDExIEBAIHN0YXRpYyB2 b2lkIGk5MTVfcHJpbnRfc3NldV9pbmZvKHN0cnVjdCAKPj4gc2VxX2ZpbGUgKm0sIGJvb2wgaXNf YXZhaWxhYmxlX2luZm8sCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2VpZ2h0OChzc2V1 LT5zbGljZV9tYXNrKSk7Cj4+IMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAiwqAgJXMgU3Vic2xp Y2UgVG90YWw6ICV1XG4iLCB0eXBlLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldV9z dWJzbGljZV90b3RhbChzc2V1KSk7Cj4+IC3CoMKgwqAgc2VxX3ByaW50ZihtLCAiwqAgJXMgU3Vi c2xpY2UgTWFzazogJTA0eFxuIiwgdHlwZSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUt PnN1YnNsaWNlX21hc2spOwo+PiAtwqDCoMKgIHNlcV9wcmludGYobSwgIsKgICVzIFN1YnNsaWNl IFBlciBTbGljZTogJXVcbiIsIHR5cGUsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCBod2VpZ2h0 OChzc2V1LT5zdWJzbGljZV9tYXNrKSk7Cj4+ICvCoMKgwqAgZm9yIChzID0gMDsgcyA8IGZscyhz c2V1LT5zbGljZV9tYXNrKTsgcysrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0s ICLCoCAlcyBTbGljZSVpICV1IHN1YnNsaWNlcywgbWFzaz0lMDR4XG4iLCB0eXBlLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzLCBod2VpZ2h0OChzc2V1LT5zdWJzbGljZV9tYXNr W3NdKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFz a1tzXSk7Cj4+ICvCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwgIsKgICVzIEVV IFRvdGFsOiAldVxuIiwgdHlwZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPmV1 X3RvdGFsKTsKPj4gwqDCoMKgwqDCoCBzZXFfcHJpbnRmKG0sICLCoCAlcyBFVSBQZXIgU3Vic2xp Y2U6ICV1XG4iLCB0eXBlLAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4+IGluZGV4IDZj OGRhOWQyMGMzMy4uOTY5ODM1ZDNjYmNkIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMK Pj4gQEAgLTQxNCw3ICs0MTQsNyBAQCBzdGF0aWMgaW50IGk5MTVfZ2V0cGFyYW0oc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgCj4+IHZvaWQgKmRhdGEsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAtRU5PREVWOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IMKgwqDC oMKgwqAgY2FzZSBJOTE1X1BBUkFNX1NVQlNMSUNFX01BU0s6Cj4+IC3CoMKgwqDCoMKgwqDCoCB2 YWx1ZSA9IElOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlX21hc2s7Cj4+ICvCoMKg wqDCoMKgwqDCoCB2YWx1ZSA9IElOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlX21h c2tbMF07Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXZhbHVlKQo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Owo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8u YyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5jCj4+IGluZGV4 IGQyODU5MmU0MzUxMi4uZWQxNDk5NDUyN2ZjIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RldmljZV9pbmZvLmMKPj4gQEAgLTgwLDEyICs4MCwxNiBAQCB2b2lkIGludGVsX2Rl dmljZV9pbmZvX2R1bXBfZmxhZ3MoY29uc3Qgc3RydWN0IAo+PiBpbnRlbF9kZXZpY2VfaW5mbyAq aW5mbywKPj4gwqAgwqAgc3RhdGljIHZvaWQgc3NldV9kdW1wKGNvbnN0IHN0cnVjdCBzc2V1X2Rl dl9pbmZvICpzc2V1LCBzdHJ1Y3QgCj4+IGRybV9wcmludGVyICpwKQo+PiDCoCB7Cj4+ICvCoMKg wqAgaW50IHM7Cj4+ICsKPj4gwqDCoMKgwqDCoCBkcm1fcHJpbnRmKHAsICJzbGljZSBtYXNrOiAl MDR4XG4iLCBzc2V1LT5zbGljZV9tYXNrKTsKPj4gwqDCoMKgwqDCoCBkcm1fcHJpbnRmKHAsICJz bGljZSB0b3RhbDogJXVcbiIsIGh3ZWlnaHQ4KHNzZXUtPnNsaWNlX21hc2spKTsKPj4gwqDCoMKg wqDCoCBkcm1fcHJpbnRmKHAsICJzdWJzbGljZSB0b3RhbDogJXVcbiIsIHNzZXVfc3Vic2xpY2Vf dG90YWwoc3NldSkpOwo+PiAtwqDCoMKgIGRybV9wcmludGYocCwgInN1YnNsaWNlIG1hc2sgJTA0 eFxuIiwgc3NldS0+c3Vic2xpY2VfbWFzayk7Cj4+IC3CoMKgwqAgZHJtX3ByaW50ZihwLCAic3Vi c2xpY2UgcGVyIHNsaWNlOiAldVxuIiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3ZWlnaHQ4 KHNzZXUtPnN1YnNsaWNlX21hc2spKTsKPj4gK8KgwqDCoCBmb3IgKHMgPSAwOyBzIDwgQVJSQVlf U0laRShzc2V1LT5zdWJzbGljZV9tYXNrKTsgcysrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1f cHJpbnRmKHAsICJzbGljZSVkICV1IHN1YnNsaWNlcyBtYXNrPSUwNHhcbiIsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMsIGh3ZWlnaHQ4KHNzZXUtPnN1YnNsaWNlX21hc2tbc10p LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrW3Nd KTsKPj4gK8KgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgZHJtX3ByaW50ZihwLCAiRVUgdG90YWw6ICV1 XG4iLCBzc2V1LT5ldV90b3RhbCk7Cj4+IMKgwqDCoMKgwqAgZHJtX3ByaW50ZihwLCAiRVUgcGVy IHN1YnNsaWNlOiAldVxuIiwgc3NldS0+ZXVfcGVyX3N1YnNsaWNlKTsKPj4gwqDCoMKgwqDCoCBk cm1fcHJpbnRmKHAsICJoYXMgc2xpY2UgcG93ZXIgZ2F0aW5nOiAlc1xuIiwKPj4gQEAgLTExOSwy MiArMTIzLDg3IEBAIHZvaWQgaW50ZWxfZGV2aWNlX2luZm9fZHVtcChjb25zdCBzdHJ1Y3QgCj4+ IGludGVsX2RldmljZV9pbmZvICppbmZvLAo+PiDCoMKgwqDCoMKgIGludGVsX2RldmljZV9pbmZv X2R1bXBfZmxhZ3MoaW5mbywgcCk7Cj4+IMKgIH0KPj4gwqAgK3N0YXRpYyB1MTYgY29tcHV0ZV9l dV90b3RhbChjb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSkKPj4gK3sKPj4gK8KgwqDC oCB1MTYgaSwgdG90YWwgPSAwOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoc3NldS0+ZXVfbWFzayk7IGkrKykKPj4gK8KgwqDCoMKgwqDCoMKgIHRvdGFsICs9IGh3 ZWlnaHQ4KHNzZXUtPmV1X21hc2tbaV0pOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHRvdGFsOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdTE2IGNvbXB1dGVfc3Vic2xpY2VfdG90YWwoY29uc3Qgc3Ry dWN0IHNzZXVfZGV2X2luZm8gKnNzZXUpCj4+ICt7Cj4+ICvCoMKgwqAgdTE2IGksIHRvdGFsID0g MDsKPj4gKwo+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNzZXUtPnN1YnNs aWNlX21hc2spOyBpKyspCj4+ICvCoMKgwqDCoMKgwqDCoCB0b3RhbCArPSBod2VpZ2h0OChzc2V1 LT5zdWJzbGljZV9tYXNrW2ldKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiB0b3RhbDsKPj4gK30K Pj4gKwo+PiDCoCBzdGF0aWMgdm9pZCBnZW4xMF9zc2V1X2luZm9faW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qgc3NldV9k ZXZfaW5mbyAqc3NldSA9ICZta3dyaXRlX2RldmljZV9pbmZvKGRldl9wcml2KS0+c3NldTsKPj4g wqDCoMKgwqDCoCBjb25zdCB1MzIgZnVzZTIgPSBJOTE1X1JFQUQoR0VOOF9GVVNFMik7Cj4+ICvC oMKgwqAgaW50IHMsIHNzOwo+PiArwqDCoMKgIGNvbnN0IGludCBldV9tYXNrID0gMHhmZjsKPj4g K8KgwqDCoCB1MzIgc3Vic2xpY2VfbWFzaywgZXVfZW47Cj4+IMKgIMKgwqDCoMKgwqAgc3NldS0+ c2xpY2VfbWFzayA9IChmdXNlMiAmIEdFTjEwX0YyX1NfRU5BX01BU0spID4+Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOMTBfRjJfU19FTkFfU0hJRlQ7Cj4+IC3CoMKg wqAgc3NldS0+c3Vic2xpY2VfbWFzayA9ICgxIDw8IDQpIC0gMTsKPj4gLcKgwqDCoCBzc2V1LT5z dWJzbGljZV9tYXNrICY9IH4oKGZ1c2UyICYgR0VOMTBfRjJfU1NfRElTX01BU0spID4+Cj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU4xMF9GMl9TU19ESVNfU0hJRlQpOwo+ PiArwqDCoMKgIHNzZXUtPm1heF9zbGljZXMgPSA2Owo+PiArwqDCoMKgIHNzZXUtPm1heF9zdWJz bGljZXMgPSA0Owo+PiArwqDCoMKgIHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlID0gODsKPj4g wqAgLcKgwqDCoCBzc2V1LT5ldV90b3RhbCA9IGh3ZWlnaHQzMih+STkxNV9SRUFEKEdFTjhfRVVf RElTQUJMRTApKTsKPj4gLcKgwqDCoCBzc2V1LT5ldV90b3RhbCArPSBod2VpZ2h0MzIofkk5MTVf UkVBRChHRU44X0VVX0RJU0FCTEUxKSk7Cj4+IC3CoMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gaHdl aWdodDMyKH5JOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMikpOwo+PiAtwqDCoMKgIHNzZXUtPmV1 X3RvdGFsICs9IGh3ZWlnaHQ4KH4oSTkxNV9SRUFEKEdFTjEwX0VVX0RJU0FCTEUzKSAmCj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjEwX0VVX0RJU19TU19N QVNLKSk7Cj4+ICvCoMKgwqAgc3Vic2xpY2VfbWFzayA9ICgxIDw8IDQpIC0gMTsKPj4gK8KgwqDC oCBzdWJzbGljZV9tYXNrICY9IH4oKGZ1c2UyICYgR0VOMTBfRjJfU1NfRElTX01BU0spID4+Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjEwX0YyX1NTX0RJU19TSElGVCk7Cj4+ ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBTbGljZTAgY2FuIGhhdmUgdXAgdG8gMyBz dWJzbGljZXMsIGJ1dCB0aGVyZSBhcmUgb25seSAyIGluCj4+ICvCoMKgwqDCoCAqIHNsaWNlMS8y Lgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrWzBdID0gc3Vi c2xpY2VfbWFzazsKPj4gK8KgwqDCoCBmb3IgKHMgPSAxOyBzIDwgc3NldS0+bWF4X3NsaWNlczsg cysrKQo+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFza1tzXSA9IHN1YnNsaWNl X21hc2sgJiAweDM7Cj4+ICsKPj4gK8KgwqDCoCAvKiBTbGljZTAgKi8KPj4gK8KgwqDCoCBldV9l biA9IH5JOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMCk7Cj4+ICvCoMKgwqAgZm9yIChzcyA9IDA7 IHNzIDwgc3NldS0+bWF4X3N1YnNsaWNlczsgc3MrKykKPj4gK8KgwqDCoMKgwqDCoMKgIHNzZXVf c2V0X2V1cyhzc2V1LCAwLCBzcywgKGV1X2VuID4+ICg4ICogc3MpKSAmIGV1X21hc2spOwo+PiAr wqDCoMKgIC8qIFNsaWNlMSAqLwo+PiArwqDCoMKgIHNzZXVfc2V0X2V1cyhzc2V1LCAxLCAwLCAo ZXVfZW4gPj4gMjQpICYgZXVfbWFzayk7Cj4+ICvCoMKgwqAgZXVfZW4gPSB+STkxNV9SRUFEKEdF TjhfRVVfRElTQUJMRTEpOwo+PiArwqDCoMKgIHNzZXVfc2V0X2V1cyhzc2V1LCAxLCAxLCBldV9l biAmIGV1X21hc2spOwo+PiArwqDCoMKgIC8qIFNsaWNlMiAqLwo+PiArwqDCoMKgIHNzZXVfc2V0 X2V1cyhzc2V1LCAyLCAwLCAoZXVfZW4gPj4gOCkgJiBldV9tYXNrKTsKPj4gK8KgwqDCoCBzc2V1 X3NldF9ldXMoc3NldSwgMiwgMSwgKGV1X2VuID4+IDE2KSAmIGV1X21hc2spOwo+PiArwqDCoMKg IC8qIFNsaWNlMyAqLwo+PiArwqDCoMKgIHNzZXVfc2V0X2V1cyhzc2V1LCAzLCAwLCAoZXVfZW4g Pj4gMjQpICYgZXVfbWFzayk7Cj4+ICvCoMKgwqAgZXVfZW4gPSB+STkxNV9SRUFEKEdFTjhfRVVf RElTQUJMRTIpOwo+PiArwqDCoMKgIHNzZXVfc2V0X2V1cyhzc2V1LCAzLCAxLCBldV9lbiAmIGV1 X21hc2spOwo+PiArwqDCoMKgIC8qIFNsaWNlNCAqLwo+PiArwqDCoMKgIHNzZXVfc2V0X2V1cyhz c2V1LCA0LCAwLCAoZXVfZW4gPj4gOCkgJiBldV9tYXNrKTsKPj4gK8KgwqDCoCBzc2V1X3NldF9l dXMoc3NldSwgNCwgMSwgKGV1X2VuID4+IDE2KSAmIGV1X21hc2spOwo+PiArwqDCoMKgIC8qIFNs aWNlNSAqLwo+PiArwqDCoMKgIHNzZXVfc2V0X2V1cyhzc2V1LCA1LCAwLCAoZXVfZW4gPj4gMjQp ICYgZXVfbWFzayk7Cj4+ICvCoMKgwqAgZXVfZW4gPSB+STkxNV9SRUFEKEdFTjEwX0VVX0RJU0FC TEUzKTsKPj4gK8KgwqDCoCBzc2V1X3NldF9ldXMoc3NldSwgNSwgMSwgZXVfZW4gJiBldV9tYXNr KTsKPj4gKwo+PiArwqDCoMKgIC8qIERvIGEgc2Vjb25kIHBhc3Mgd2hlcmUgd2UgbWFyayB0aGUg c3Vic2xpY2VzIGRpc2FibGVkIGlmIGFsbCAKPj4gdGhlaXIKPj4gK8KgwqDCoMKgICogZXVzIGFy ZSBvZmYuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGZvciAocyA9IDA7IHMgPCBzc2V1LT5t YXhfc2xpY2VzOyBzKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoc3MgPSAwOyBzcyA8IHNz ZXUtPm1heF9zdWJzbGljZXM7IHNzKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHNzZXVfZ2V0X2V1cyhzc2V1LCBzLCBzcykgPT0gMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrW3NdICY9IH5CSVQoc3MpOwo+PiArwqDCoMKg wqDCoMKgwqAgfQo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHNzZXUtPnN1YnNsaWNlX3Rv dGFsID0gY29tcHV0ZV9zdWJzbGljZV90b3RhbChzc2V1KTsKPj4gK8KgwqDCoCBzc2V1LT5ldV90 b3RhbCA9IGNvbXB1dGVfZXVfdG90YWwoc3NldSk7Cj4+IMKgIMKgwqDCoMKgwqAgLyoKPj4gwqDC oMKgwqDCoMKgICogQ05MIGlzIGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0 cmlidXRpb24KPj4gQEAgLTE1NSwyNiArMjI0LDQwIEBAIHN0YXRpYyB2b2lkIGdlbjEwX3NzZXVf aW5mb19pbml0KHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IMKgIHN0 YXRpYyB2b2lkIGNoZXJyeXZpZXdfc3NldV9pbmZvX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgCj4+ICpkZXZfcHJpdikKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBzc2V1X2Rldl9p bmZvICpzc2V1ID0gJm1rd3JpdGVfZGV2aWNlX2luZm8oZGV2X3ByaXYpLT5zc2V1Owo+PiAtwqDC oMKgIHUzMiBmdXNlLCBldV9kaXM7Cj4+ICvCoMKgwqAgdTMyIGZ1c2U7Cj4+IMKgIMKgwqDCoMKg wqAgZnVzZSA9IEk5MTVfUkVBRChDSFZfRlVTRV9HVCk7Cj4+IMKgIMKgwqDCoMKgwqAgc3NldS0+ c2xpY2VfbWFzayA9IEJJVCgwKTsKPj4gK8KgwqDCoCBzc2V1LT5tYXhfc2xpY2VzID0gMTsKPj4g K8KgwqDCoCBzc2V1LT5tYXhfc3Vic2xpY2VzID0gMjsKPj4gK8KgwqDCoCBzc2V1LT5tYXhfZXVz X3Blcl9zdWJzbGljZSA9IDg7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKCEoZnVzZSAmIENIVl9GR1Rf RElTQUJMRV9TUzApKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrIHw9 IEJJVCgwKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGV1X2RpcyA9IGZ1c2UgJiAoQ0hWX0ZHVF9FVV9E SVNfU1MwX1IwX01BU0sgfAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0hW X0ZHVF9FVV9ESVNfU1MwX1IxX01BU0spOwo+PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90 YWwgKz0gOCAtIGh3ZWlnaHQzMihldV9kaXMpOwo+PiArwqDCoMKgwqDCoMKgwqAgdTggZGlzYWJs ZWRfbWFzayA9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgoZnVzZSAmIENIVl9GR1RfRVVf RElTX1NTMF9SMF9NQVNLKSA+Pgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENIVl9GR1Rf RVVfRElTX1NTMF9SMF9TSElGVCkgfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKChmdXNl ICYgQ0hWX0ZHVF9FVV9ESVNfU1MwX1IxX01BU0spID4+Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBDSFZfRkdUX0VVX0RJU19TUzBfUjFfU0hJRlQpIDw8IDQpOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrWzBdIHw9IEJJVCgwKTsKPj4gK8KgwqDCoMKg wqDCoMKgIHNzZXVfc2V0X2V1cyhzc2V1LCAwLCAwLCB+ZGlzYWJsZWRfbWFzayk7Cj4+IMKgwqDC oMKgwqAgfQo+PiDCoCDCoMKgwqDCoMKgIGlmICghKGZ1c2UgJiBDSFZfRkdUX0RJU0FCTEVfU1Mx KSkgewo+PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFzayB8PSBCSVQoMSk7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBldV9kaXMgPSBmdXNlICYgKENIVl9GR1RfRVVfRElTX1NTMV9SMF9N QVNLIHwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENIVl9GR1RfRVVfRElT X1NTMV9SMV9NQVNLKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHNzZXUtPmV1X3RvdGFsICs9IDggLSBo d2VpZ2h0MzIoZXVfZGlzKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHU4IGRpc2FibGVkX21hc2sgPQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKGZ1c2UgJiBDSFZfRkdUX0VVX0RJU19TUzFfUjBf TUFTSykgPj4KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDSFZfRkdUX0VVX0RJU19TUzFf UjBfU0hJRlQpIHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKCgoZnVzZSAmIENIVl9GR1Rf RVVfRElTX1NTMV9SMV9NQVNLKSA+Pgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0hW X0ZHVF9FVV9ESVNfU1MxX1IxX1NISUZUKSA8PCA0KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAg c3NldS0+c3Vic2xpY2VfbWFza1swXSB8PSBCSVQoMSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1 X3NldF9ldXMoc3NldSwgMCwgMSwgfmRpc2FibGVkX21hc2spOwo+PiDCoMKgwqDCoMKgIH0KPj4g wqAgK8KgwqDCoCBzc2V1LT5zdWJzbGljZV90b3RhbCA9IGNvbXB1dGVfc3Vic2xpY2VfdG90YWwo c3NldSk7Cj4+ICvCoMKgwqAgc3NldS0+ZXVfdG90YWwgPSBjb21wdXRlX2V1X3RvdGFsKHNzZXUp Owo+PiArCj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgICogQ0hWIGV4cGVjdGVkIHRv IGFsd2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0cmlidXRpb24gb2YgRVUKPj4gwqDCoMKgwqDCoMKg ICogYWNyb3NzIHN1YnNsaWNlcy4KPj4gQEAgLTE5Niw0MSArMjc5LDUyIEBAIHN0YXRpYyB2b2lk IGdlbjlfc3NldV9pbmZvX2luaXQoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyAqaW5mbyA9 IG1rd3JpdGVfZGV2aWNlX2luZm8oZGV2X3ByaXYpOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBzc2V1 X2Rldl9pbmZvICpzc2V1ID0gJmluZm8tPnNzZXU7Cj4+IC3CoMKgwqAgaW50IHNfbWF4ID0gMywg c3NfbWF4ID0gNCwgZXVfbWF4ID0gODsKPj4gwqDCoMKgwqDCoCBpbnQgcywgc3M7Cj4+IC3CoMKg wqAgdTMyIGZ1c2UyLCBldV9kaXNhYmxlOwo+PiAtwqDCoMKgIHU4IGV1X21hc2sgPSAweGZmOwo+ PiArwqDCoMKgIHUzMiBmdXNlMiwgZXVfZGlzYWJsZSwgc3Vic2xpY2VfbWFzazsKPj4gK8KgwqDC oCBjb25zdCB1OCBldV9tYXNrID0gMHhmZjsKPj4gwqAgwqDCoMKgwqDCoCBmdXNlMiA9IEk5MTVf UkVBRChHRU44X0ZVU0UyKTsKPj4gwqDCoMKgwqDCoCBzc2V1LT5zbGljZV9tYXNrID0gKGZ1c2Uy ICYgR0VOOF9GMl9TX0VOQV9NQVNLKSA+PiAKPj4gR0VOOF9GMl9TX0VOQV9TSElGVDsKPj4gwqAg K8KgwqDCoCAvKiBCWFQgaGFzIGEgc2luZ2xlIHNsaWNlIGFuZCBhdCBtb3N0IDMgc3Vic2xpY2Vz LiAqLwo+PiArwqDCoMKgIHNzZXUtPm1heF9zbGljZXMgPSBJU19HRU45X0xQKGRldl9wcml2KSA/ IDEgOiAzOwo+PiArwqDCoMKgIHNzZXUtPm1heF9zdWJzbGljZXMgPSBJU19HRU45X0xQKGRldl9w cml2KSA/IDMgOiA0Owo+PiArwqDCoMKgIHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlID0gODsK Pj4gKwo+PiDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDCoCAqIFRoZSBzdWJzbGljZSBkaXNh YmxlIGZpZWxkIGlzIGdsb2JhbCwgaS5lLiBpdCBhcHBsaWVzCj4+IMKgwqDCoMKgwqDCoCAqIHRv IGVhY2ggb2YgdGhlIGVuYWJsZWQgc2xpY2VzLgo+PiDCoMKgwqDCoMKgICovCj4+IC3CoMKgwqAg c3NldS0+c3Vic2xpY2VfbWFzayA9ICgxIDw8IHNzX21heCkgLSAxOwo+PiAtwqDCoMKgIHNzZXUt PnN1YnNsaWNlX21hc2sgJj0gfigoZnVzZTIgJiBHRU45X0YyX1NTX0RJU19NQVNLKSA+Pgo+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOOV9GMl9TU19ESVNfU0hJRlQpOwo+ PiArwqDCoMKgIHN1YnNsaWNlX21hc2sgPSAoMSA8PCBzc2V1LT5tYXhfc3Vic2xpY2VzKSAtIDE7 Cj4+ICvCoMKgwqAgc3Vic2xpY2VfbWFzayAmPSB+KChmdXNlMiAmIEdFTjlfRjJfU1NfRElTX01B U0spID4+Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjlfRjJfU1NfRElTX1NI SUZUKTsKPj4gwqAgwqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDCoMKgwqAgKiBJdGVyYXRlIHRocm91 Z2ggZW5hYmxlZCBzbGljZXMgYW5kIHN1YnNsaWNlcyB0bwo+PiDCoMKgwqDCoMKgwqAgKiBjb3Vu dCB0aGUgdG90YWwgZW5hYmxlZCBFVS4KPj4gwqDCoMKgwqDCoCAqLwo+PiAtwqDCoMKgIGZvciAo cyA9IDA7IHMgPCBzX21heDsgcysrKSB7Cj4+ICvCoMKgwqAgZm9yIChzID0gMDsgcyA8IHNzZXUt Pm1heF9zbGljZXM7IHMrKykgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCEoc3NldS0+c2xp Y2VfbWFzayAmIEJJVChzKSkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHNraXAg ZGlzYWJsZWQgc2xpY2UgKi8KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7 Cj4+IMKgICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrW3NdID0gc3Vic2xpY2Vf bWFzazsKPj4gKwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXVfZGlzYWJsZSA9IEk5MTVfUkVBRChH RU45X0VVX0RJU0FCTEUocykpOwo+PiAtwqDCoMKgwqDCoMKgwqAgZm9yIChzcyA9IDA7IHNzIDwg c3NfbWF4OyBzcysrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc2V1 LT5tYXhfc3Vic2xpY2VzOyBzcysrKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlu dCBldV9wZXJfc3M7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU4IGV1X2Rpc2FibGVkX21h c2s7Cj4+IMKgIC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghKHNzZXUtPnN1YnNsaWNlX21h c2sgJiBCSVQoc3MpKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCEoc3NldS0+c3Vi c2xpY2VfbWFza1tzXSAmIEJJVChzcykpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qIHNraXAgZGlzYWJsZWQgc3Vic2xpY2UgKi8KPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZXVfcGVyX3NzID0gZXVfbWF4IC0gaHdlaWdodDgoKGV1X2Rpc2FibGUgPj4gKHNzKjgpKSAmCj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGV1X21hc2spOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldV9kaXNhYmxlZF9tYXNr ID0gKGV1X2Rpc2FibGUgPj4gKHNzKjgpKSAmIGV1X21hc2s7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3NldV9zZXRfZXVzKHNzZXUsIHMsIHNzLCB+ZXVfZGlzYWJsZWRfbWFzayk7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXVfcGVyX3NzID0gc3NldS0+bWF4X2V1 c19wZXJfc3Vic2xpY2UgLQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3ZWln aHQ4KGV1X2Rpc2FibGVkX21hc2spOwo+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAv Kgo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogUmVjb3JkIHdoaWNoIHN1YnNsaWNl KHMpIGhhcyhoYXZlKSA3IEVVcy4gd2UKPj4gQEAgLTIzOSwxMSArMzMzLDEyIEBAIHN0YXRpYyB2 b2lkIGdlbjlfc3NldV9pbmZvX2luaXQoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoZXVfcGVyX3NzID09IDcpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfN2V1W3NdIHw9IEJJVChzcyk7Cj4+IC0KPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gZXVfcGVyX3NzOwo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgK8KgwqDCoCBzc2V1LT5z dWJzbGljZV90b3RhbCA9IGNvbXB1dGVfc3Vic2xpY2VfdG90YWwoc3NldSk7Cj4+ICvCoMKgwqAg c3NldS0+ZXVfdG90YWwgPSBjb21wdXRlX2V1X3RvdGFsKHNzZXUpOwo+PiArCj4+IMKgwqDCoMKg wqAgLyoKPj4gwqDCoMKgwqDCoMKgICogU0tMIGlzIGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEg dW5pZm9ybSBkaXN0cmlidXRpb24KPj4gwqDCoMKgwqDCoMKgICogb2YgRVUgYWNyb3NzIHN1YnNs aWNlcyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBhbnkgb25lCj4+IEBAIC0yNjksOCArMzY0LDgg QEAgc3RhdGljIHZvaWQgZ2VuOV9zc2V1X2luZm9faW5pdChzdHJ1Y3QgCj4+IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+PiDCoMKgwqDCoMKgIHNzZXUtPmhhc19ldV9wZyA9IHNzZXUtPmV1 X3Blcl9zdWJzbGljZSA+IDI7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKElTX0dFTjlfTFAoZGV2X3By aXYpKSB7Cj4+IC0jZGVmaW5lIElTX1NTX0RJU0FCTEVEKHNzKcKgwqDCoCAoIShzc2V1LT5zdWJz bGljZV9tYXNrICYgQklUKHNzKSkpCj4+IC3CoMKgwqDCoMKgwqDCoCBpbmZvLT5oYXNfcG9vbGVk X2V1ID0gaHdlaWdodDgoc3NldS0+c3Vic2xpY2VfbWFzaykgPT0gMzsKPj4gKyNkZWZpbmUgSVNf U1NfRElTQUJMRUQoc3MpwqDCoMKgICghKHNzZXUtPnN1YnNsaWNlX21hc2tbMF0gJiBCSVQoc3Mp KSkKPj4gK8KgwqDCoMKgwqDCoMKgIGluZm8tPmhhc19wb29sZWRfZXUgPSBod2VpZ2h0OChzc2V1 LT5zdWJzbGljZV9tYXNrWzBdKSA9PSAzOwo+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ bWluX2V1X2luX3Bvb2wgPSAwOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGluZm8tPmhhc19w b29sZWRfZXUpIHsKPj4gQEAgLTI4OCwxOSArMzgzLDIyIEBAIHN0YXRpYyB2b2lkIGdlbjlfc3Nl dV9pbmZvX2luaXQoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqAg c3RhdGljIHZvaWQgYnJvYWR3ZWxsX3NzZXVfaW5mb19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlIAo+PiAqZGV2X3ByaXYpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qgc3NldV9kZXZf aW5mbyAqc3NldSA9ICZta3dyaXRlX2RldmljZV9pbmZvKGRldl9wcml2KS0+c3NldTsKPj4gLcKg wqDCoCBjb25zdCBpbnQgc19tYXggPSAzLCBzc19tYXggPSAzLCBldV9tYXggPSA4Owo+PiDCoMKg wqDCoMKgIGludCBzLCBzczsKPj4gLcKgwqDCoCB1MzIgZnVzZTIsIGV1X2Rpc2FibGVbM107IC8q IHNfbWF4ICovCj4+ICvCoMKgwqAgdTMyIGZ1c2UyLCBzdWJzbGljZV9tYXNrLCBldV9kaXNhYmxl WzNdOyAvKiBzX21heCAqLwo+PiDCoCDCoMKgwqDCoMKgIGZ1c2UyID0gSTkxNV9SRUFEKEdFTjhf RlVTRTIpOwo+PiDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2sgPSAoZnVzZTIgJiBHRU44X0Yy X1NfRU5BX01BU0spID4+IAo+PiBHRU44X0YyX1NfRU5BX1NISUZUOwo+PiArwqDCoMKgIHNzZXUt Pm1heF9zbGljZXMgPSAzOwo+PiArwqDCoMKgIHNzZXUtPm1heF9zdWJzbGljZXMgPSAzOwo+PiAr wqDCoMKgIHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlID0gODsKPj4gKwo+PiDCoMKgwqDCoMKg IC8qCj4+IMKgwqDCoMKgwqDCoCAqIFRoZSBzdWJzbGljZSBkaXNhYmxlIGZpZWxkIGlzIGdsb2Jh bCwgaS5lLiBpdCBhcHBsaWVzCj4+IMKgwqDCoMKgwqDCoCAqIHRvIGVhY2ggb2YgdGhlIGVuYWJs ZWQgc2xpY2VzLgo+PiDCoMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoCBzc2V1LT5zdWJzbGljZV9t YXNrID0gR0VOTUFTSyhzc19tYXggLSAxLCAwKTsKPj4gLcKgwqDCoCBzc2V1LT5zdWJzbGljZV9t YXNrICY9IH4oKGZ1c2UyICYgR0VOOF9GMl9TU19ESVNfTUFTSykgPj4KPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfRjJfU1NfRElTX1NISUZUKTsKPj4gK8KgwqDCoCBz dWJzbGljZV9tYXNrID0gR0VOTUFTSyhzc2V1LT5tYXhfc3Vic2xpY2VzIC0gMSwgMCk7Cj4+ICvC oMKgwqAgc3Vic2xpY2VfbWFzayAmPSB+KChmdXNlMiAmIEdFTjhfRjJfU1NfRElTX01BU0spID4+ Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfRjJfU1NfRElTX1NISUZUKTsK Pj4gwqAgwqDCoMKgwqDCoCBldV9kaXNhYmxlWzBdID0gSTkxNV9SRUFEKEdFTjhfRVVfRElTQUJM RTApICYgCj4+IEdFTjhfRVVfRElTMF9TMF9NQVNLOwo+PiDCoMKgwqDCoMKgIGV1X2Rpc2FibGVb MV0gPSAoSTkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTApID4+IAo+PiBHRU44X0VVX0RJUzBfUzFf U0hJRlQpIHwKPj4gQEAgLTMxNCwzMCArNDEyLDM5IEBAIHN0YXRpYyB2b2lkIGJyb2Fkd2VsbF9z c2V1X2luZm9faW5pdChzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiDC oMKgwqDCoMKgwqAgKiBJdGVyYXRlIHRocm91Z2ggZW5hYmxlZCBzbGljZXMgYW5kIHN1YnNsaWNl cyB0bwo+PiDCoMKgwqDCoMKgwqAgKiBjb3VudCB0aGUgdG90YWwgZW5hYmxlZCBFVS4KPj4gwqDC oMKgwqDCoMKgICovCj4+IC3CoMKgwqAgZm9yIChzID0gMDsgcyA8IHNfbWF4OyBzKyspIHsKPj4g K8KgwqDCoCBmb3IgKHMgPSAwOyBzIDwgc3NldS0+bWF4X3NsaWNlczsgcysrKSB7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoIShzc2V1LT5zbGljZV9tYXNrICYgQklUKHMpKSkKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogc2tpcCBkaXNhYmxlZCBzbGljZSAqLwo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gwqAgLcKgwqDCoMKgwqDCoMKgIGZvciAo c3MgPSAwOyBzcyA8IHNzX21heDsgc3MrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vi c2xpY2VfbWFza1tzXSA9IHN1YnNsaWNlX21hc2s7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGZv ciAoc3MgPSAwOyBzcyA8IHNzZXUtPm1heF9zdWJzbGljZXM7IHNzKyspIHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdTggZXVfZGlzYWJsZWRfbWFzazsKPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdTMyIG5fZGlzYWJsZWQ7Cj4+IMKgIC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm ICghKHNzZXUtPnN1YnNsaWNlX21hc2sgJiBCSVQoc3MpKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKCEoc3NldS0+c3Vic2xpY2VfbWFza1tzc10gJiBCSVQoc3MpKSkKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBza2lwIGRpc2FibGVkIHN1YnNsaWNlICov Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+IMKgIC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5fZGlzYWJsZWQgPSBod2VpZ2h0OChldV9kaXNhYmxlW3Nd ID4+IChzcyAqIGV1X21heCkpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldV9kaXNhYmxl ZF9tYXNrID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldV9kaXNhYmxlW3Nd ID4+IChzcyAqIHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlKTsKPj4gKwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzc2V1X3NldF9ldXMoc3NldSwgcywgc3MsIH5ldV9kaXNhYmxlZF9tYXNr KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuX2Rpc2FibGVkID0gaHdlaWdodDgo ZXVfZGlzYWJsZWRfbWFzayk7Cj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBSZWNvcmQgd2hpY2ggc3Vic2xpY2VzIGhh dmUgNyBFVXMuCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKGV1X21heCAtIG5fZGlzYWJsZWQgPT0gNykKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaWYgKHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlIC0gbl9kaXNhYmxl ZCA9PSA3KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNs aWNlXzdldVtzXSB8PSAxIDw8IHNzOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNz ZXUtPmV1X3RvdGFsICs9IGV1X21heCAtIG5fZGlzYWJsZWQ7Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oCB9Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCArwqDCoMKgIHNzZXUtPnN1YnNsaWNlX3RvdGFsID0g Y29tcHV0ZV9zdWJzbGljZV90b3RhbChzc2V1KTsKPj4gK8KgwqDCoCBzc2V1LT5ldV90b3RhbCA9 IGNvbXB1dGVfZXVfdG90YWwoc3NldSk7Cj4+ICsKPj4gwqDCoMKgwqDCoCAvKgo+PiDCoMKgwqDC oMKgwqAgKiBCRFcgaXMgZXhwZWN0ZWQgdG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1 dGlvbiBvZiBFVSAKPj4gYWNyb3NzCj4+IMKgwqDCoMKgwqDCoCAqIHN1YnNsaWNlcyB3aXRoIHRo ZSBleGNlcHRpb24gdGhhdCBhbnkgb25lIEVVIGluIGFueSBvbmUgCj4+IHN1YnNsaWNlIG1heQo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uaCAK Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5oCj4+IGluZGV4IDQ5 Y2IyN2JkMDRjMS4uMzZlMGRmODc4NjJkIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kZXZpY2VfaW5mby5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RldmljZV9pbmZvLmgKPj4gQEAgLTExMCwxMCArMTEwLDE0IEBAIGVudW0gaW50ZWxfcGxh dGZvcm0gewo+PiDCoMKgwqDCoMKgIGZ1bmMoc3VwcG9ydHNfdHYpOyBcCj4+IMKgwqDCoMKgwqAg ZnVuYyhoYXNfaXBjKTsKPj4gwqAgKyNkZWZpbmUgR0VOX01BWF9TTElDRVPCoMKgwqDCoMKgwqDC oCAoNikgLyogQ05MIHVwcGVyIGJvdW5kICovCj4+ICsjZGVmaW5lIEdFTl9NQVhfU1VCU0xJQ0VT wqDCoMKgICg3KQo+PiArCj4+IMKgIHN0cnVjdCBzc2V1X2Rldl9pbmZvIHsKPj4gwqDCoMKgwqDC oCB1OCBzbGljZV9tYXNrOwo+PiAtwqDCoMKgIHU4IHN1YnNsaWNlX21hc2s7Cj4+IC3CoMKgwqAg dTggZXVfdG90YWw7Cj4+ICvCoMKgwqAgdTggc3Vic2xpY2VfbWFza1tHRU5fTUFYX1NVQlNMSUNF U107Cj4+ICvCoMKgwqAgdTE2IHN1YnNsaWNlX3RvdGFsOwo+PiArwqDCoMKgIHUxNiBldV90b3Rh bDsKPj4gwqDCoMKgwqDCoCB1OCBldV9wZXJfc3Vic2xpY2U7Cj4+IMKgwqDCoMKgwqAgdTggbWlu X2V1X2luX3Bvb2w7Cj4+IMKgwqDCoMKgwqAgLyogRm9yIGVhY2ggc2xpY2UsIHdoaWNoIHN1YnNs aWNlKHMpIGhhcyhoYXZlKSA3IEVVcyAKPj4gKGJpdGZpZWxkKT8gKi8KPj4gQEAgLTEyMSw2ICsx MjUsMTcgQEAgc3RydWN0IHNzZXVfZGV2X2luZm8gewo+PiDCoMKgwqDCoMKgIHU4IGhhc19zbGlj ZV9wZzoxOwo+PiDCoMKgwqDCoMKgIHU4IGhhc19zdWJzbGljZV9wZzoxOwo+PiDCoMKgwqDCoMKg IHU4IGhhc19ldV9wZzoxOwo+PiArCj4+ICvCoMKgwqAgLyogVG9wb2xvZ3kgZmllbGRzICovCj4+ ICvCoMKgwqAgdTggbWF4X3NsaWNlczsKPj4gK8KgwqDCoCB1OCBtYXhfc3Vic2xpY2VzOwo+PiAr wqDCoMKgIHU4IG1heF9ldXNfcGVyX3N1YnNsaWNlOwo+PiArCj4+ICvCoMKgwqAgLyogV2UgZG9u J3QgaGF2ZSBtb3JlIHRoYW4gOCBldXMgcGVyIHN1YnNsaWNlIGF0IHRoZSBtb21lbnQgYW5kIAo+ PiBhcyB3ZQo+PiArwqDCoMKgwqAgKiBzdG9yZSBldXMgZW5hYmxlZCB1c2luZyBiaXRzLCBubyBu ZWVkIHRvIG11bHRpcGx5IGJ5IGV1cyBwZXIKPj4gK8KgwqDCoMKgICogc3Vic2xpY2UuCj4+ICvC oMKgwqDCoCAqLwo+PiArwqDCoMKgIHU4IGV1X21hc2tbR0VOX01BWF9TTElDRVMgKiBHRU5fTUFY X1NVQlNMSUNFU107Cj4+IMKgIH07Cj4+IMKgIMKgIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyB7 Cj4+IEBAIC0xNjcsNyArMTgyLDMzIEBAIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyB7Cj4+IMKg IMKgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNzZXVfc3Vic2xpY2VfdG90YWwoY29uc3Qg c3RydWN0IAo+PiBzc2V1X2Rldl9pbmZvICpzc2V1KQo+PiDCoCB7Cj4+IC3CoMKgwqAgcmV0dXJu IGh3ZWlnaHQ4KHNzZXUtPnNsaWNlX21hc2spICogaHdlaWdodDgoc3NldS0+c3Vic2xpY2VfbWFz ayk7Cj4+ICvCoMKgwqAgcmV0dXJuIHNzZXUtPnN1YnNsaWNlX3RvdGFsOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW5saW5lIGludCBzc2V1X2V1X2lkeChjb25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5m byAqc3NldSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHNsaWNl LCBpbnQgc3Vic2xpY2UpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IHN1YnNsaWNlX3N0cmlkZSA9IERJ Vl9ST1VORF9VUChzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVFNfUEVSX0JZVEUpOwo+PiArwqDCoMKg IGludCBzbGljZV9zdHJpZGUgPSBzc2V1LT5tYXhfc3Vic2xpY2VzICogc3Vic2xpY2Vfc3RyaWRl Owo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHNsaWNlICogc2xpY2Vfc3RyaWRlICsgc3Vic2xpY2Ug KiBzdWJzbGljZV9zdHJpZGU7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBUaGUgZm9sbG93aW5n IGZ1bmN0aW9ucyBwcm90b3R5cGVzIHNob3VsZCBiZSB1cGRhdGVkIHdpdGggYSAKPj4gbGFyZ2Vy IHR5cGUKPj4gKyAqIHRoYW4gdTggaWYgd2UgZXZlciBoYXZlIG1vcmUgdGhhbiA4IEVVcyBwZXIg c3Vic2xpY2UuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbmxpbmUgdTggc3NldV9nZXRfZXVzKGNvbnN0 IHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpbnQgc2xpY2UsIGludCBzdWJzbGljZSkKPj4gK3sKPj4gK8KgwqDCoCByZXR1 cm4gc3NldS0+ZXVfbWFza1tzc2V1X2V1X2lkeChzc2V1LCBzbGljZSwgc3Vic2xpY2UpXTsKPj4g K30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIHNzZXVfc2V0X2V1cyhzdHJ1Y3Qgc3NldV9k ZXZfaW5mbyAqc3NldSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgc2xp Y2UsIGludCBzdWJzbGljZSwgdTggZXVfbWFzaykKPj4gK3sKPj4gK8KgwqDCoCBzc2V1LT5ldV9t YXNrW3NzZXVfZXVfaWR4KHNzZXUsIHNsaWNlLCBzdWJzbGljZSldID0gZXVfbWFzazsKPj4gwqAg fQo+PiDCoCDCoCBjb25zdCBjaGFyICppbnRlbF9wbGF0Zm9ybV9uYW1lKGVudW0gaW50ZWxfcGxh dGZvcm0gcGxhdGZvcm0pOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfbHJjLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPj4gaW5kZXgg ZmYyNWYyMDlkMGE1Li5hYzc4OTYwMzFiOGQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jCj4+IEBAIC0yMDk4LDcgKzIwOTgsNyBAQCBtYWtlX3JwY3Moc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+PiDCoCDCoMKgwqDCoMKgIGlmIChJTlRFTF9JTkZPKGRldl9wcml2 KS0+c3NldS5oYXNfc3Vic2xpY2VfcGcpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJwY3MgfD0g R0VOOF9SUENTX1NTX0NOVF9FTkFCTEU7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycGNzIHw9IGh3ZWln aHQ4KElOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlX21hc2spIDw8Cj4+ICvCoMKg wqDCoMKgwqDCoCBycGNzIHw9IAo+PiBod2VpZ2h0OChJTlRFTF9JTkZPKGRldl9wcml2KS0+c3Nl dS5zdWJzbGljZV9tYXNrWzBdKSA8PAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU44 X1JQQ1NfU1NfQ05UX1NISUZUOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBHRU44X1JQ Q1NfRU5BQkxFOwo+PiDCoMKgwqDCoMKgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmgKPj4gaW5kZXggYzVmZjIwM2U0MmQ2Li4yM2FlOWE5NTdmYWIgMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPj4gQEAgLTkwLDcgKzkw LDcgQEAgaGFuZ2NoZWNrX2FjdGlvbl90b19zdHIoY29uc3QgZW51bSAKPj4gaW50ZWxfZW5naW5l X2hhbmdjaGVja19hY3Rpb24gYSkKPj4gwqAgwqAgI2RlZmluZSBpbnN0ZG9uZV9zdWJzbGljZV9t YXNrKGRldl9wcml2X18pIFwKPj4gwqDCoMKgwqDCoCAoSU5URUxfR0VOKGRldl9wcml2X18pID09 IDcgPyBcCj4+IC3CoMKgwqDCoCAxIDogSU5URUxfSU5GTyhkZXZfcHJpdl9fKS0+c3NldS5zdWJz bGljZV9tYXNrKQo+PiArwqDCoMKgwqAgMSA6IElOVEVMX0lORk8oZGV2X3ByaXZfXyktPnNzZXUu c3Vic2xpY2VfbWFza1swXSkKPj4gwqAgwqAgI2RlZmluZSBmb3JfZWFjaF9pbnN0ZG9uZV9zbGlj ZV9zdWJzbGljZShkZXZfcHJpdl9fLCBzbGljZV9fLCAKPj4gc3Vic2xpY2VfXykgXAo+PiDCoMKg wqDCoMKgIGZvciAoKHNsaWNlX18pID0gMCwgKHN1YnNsaWNlX18pID0gMDsgXAo+Pgo+Cj4gSSBh bSBoYXBweSB3aXRoIHRoaXMgdmVyc2lvbiBhbmQgSSBkaWQgbm90IHNwb3QgYW55IG1pc3Rha2Vz Lgo+Cj4gUmV2aWV3ZWQtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5j b20+Cj4KPiBEbyB5b3Uga25vdyBpZiB3ZSBoYXZlIGFueSB0ZXN0IGNvdmVyYWdlIHdoaWNoIHdv dWxkIGJlIGFibGUgdG8gdGVsbCAKPiB1cyBpZiB0aGUgcmVwb3J0ZWQgbnVtYmVycyBiZWZvcmUg YW5kIGFmdGVyIG1hdGNoPwo+CgpJIGhhdmUgc29tZSBJR1QgdGVzdHMgKHdoaWNoIEkgc2hvdWxk IHJlc2VuZCkgdGhhdCB2ZXJpZnkgdGhhdCB0aGUgb2xkIApHRVRfUEFSQU0gdmFsdWVzIG1hdGNo IHRoZSBuZXcgdWFwaS4KQnV0IGJlY2F1c2UgdGhpcyByZWZhY3RvcnMgY29kZSwgdGhlIG9sZCBi ZWhhdmlvciBpcyBsb3N0IDooCgpUaGFua3MgZm9yIHRoZSByZXZpZXcuCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=