From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-f195.google.com (mail-qk1-f195.google.com [209.85.222.195]) by gabe.freedesktop.org (Postfix) with ESMTPS id A1E0F6E682 for ; Thu, 6 Dec 2018 22:52:54 +0000 (UTC) Received: by mail-qk1-f195.google.com with SMTP id o125so1406208qkf.3 for ; Thu, 06 Dec 2018 14:52:54 -0800 (PST) Message-ID: <93099f191da513f931778ce4818e2f6bd0791026.camel@redhat.com> From: Lyude Paul Date: Thu, 06 Dec 2018 17:52:52 -0500 In-Reply-To: <20181206141132.23349-10-paul.kocialkowski@bootlin.com> References: <20181206141132.23349-1-paul.kocialkowski@bootlin.com> <20181206141132.23349-10-paul.kocialkowski@bootlin.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 9/9] chamelium: Add a CRC-based display test for randomized planes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Paul Kocialkowski , igt-dev@lists.freedesktop.org Cc: Petri Latvala , Eben Upton , Thomas Petazzoni List-ID: SSBhZ3JlZSB3aXRoIE1heGltZSwgdGhpcyBkZWZpbml0ZWx5IHNob3VsZCBiZSBzcGxpdCB1cCBp bnRvIHNvbWUgbW9yZQpmdW5jdGlvbnMuIFNvbWUgb3RoZXIgY29tbWVudHMgYmVsb3cgYmVsb3cK Ck9uIFRodSwgMjAxOC0xMi0wNiBhdCAxNToxMSArMDEwMCwgUGF1bCBLb2NpYWxrb3dza2kgd3Jv dGU6Cj4gVGhpcyBpbnRyb2R1Y2VzIGEgbmV3IHRlc3QgZm9yIHRoZSBDaGFtZWxpdW0sIHRoYXQg c2V0cyB1cCBwbGFuZXMKPiB3aXRoIHJhbmRvbWl6ZWQgcHJvcGVydGllcyBzdWNoIGFzIHRoZSBm b3JtYXQsIGRpbWVuc2lvbnMsIHBvc2l0aW9uLAo+IGluLWZyYW1lYnVmZmVyIG9mZnNldHMgYW5k IHN0cmlkZS4gVGhlIENoYW1lbGl1bSBjYXB0dXJlIGlzIGNoZWNrZWQKPiBhZ2FpbnN0IHRoZSBy ZWZlcmVuY2UgZ2VuZXJhdGVkIGJ5IGNhaXJvIHdpdGggYSBDUkMuCj4KPiBUaGlzIHRlc3QgYWxz byBpbmNsdWRlcyB0ZXN0aW5nIGZvciBzb21lIFZDNC1zcGVjaWZpYyBmZWF0dXJlcywgc3VjaCBh cwo+IFQtdGlsZWQgbW9kZSAoaW4gWFIyNCBmb3JtYXQpLCBiYW5kd2lkdGggbGltaXRhdGlvbiBh bmQgdW5kZXJydW4KPiAodGhhdCByZXF1aXJlIGtlcm5lbC1zaWRlIHBhdGNoZXMgdGhhdCBhcmUg Y3VycmVudGx5IHVuZGVyIHJldmlldykuCj4KPiBTaW5jZSB0aGlzIHRlc3QgZG9lcyBub3Qgc2hh cmUgbXVjaCB3aXRoIHByZXZpb3VzIENSQy1iYXNlZCBkaXNwbGF5Cj4gdGVzdHMgKGVzcGVjaWFs bHkgcmVnYXJkaW5nIEtNUyBjb25maWd1cmF0aW9uKSwgbW9zdCBvZiB0aGUgY29kZSBpcwo+IG5v dCBzaGFyZWQgd2l0aCBvdGhlciB0ZXN0cy4KPgo+IFRoaXMgdGVzdCBjYW4gYmUgZGVyaXZlZCB3 aXRoIHJlcHJvZHVjaWJsZSBwcm9wZXJ0aWVzIGZvciByZWdyZXNzaW9uCj4gdGVzdGluZyBpbiB0 aGUgZnV0dXJlLiBGb3Igbm93LCBpdCBzZXJ2ZXMgYXMgYSBraW5kIG9mIGZ1enppbmcgdGVzdC4K Pgo+IFNpZ25lZC1vZmYtYnk6IFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBi b290bGluLmNvbT4KPiAtLS0KPiAgdGVzdHMva21zX2NoYW1lbGl1bS5jIHwgMzMxICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAxIGZpbGUgY2hhbmdlZCwgMzMx IGluc2VydGlvbnMoKykKPgo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfY2hhbWVsaXVtLmMgYi90 ZXN0cy9rbXNfY2hhbWVsaXVtLmMKPiBpbmRleCA3ZDk1YThiYy4uYTQ5NzczMDkgMTAwNjQ0Cj4g LS0tIGEvdGVzdHMva21zX2NoYW1lbGl1bS5jCj4gKysrIGIvdGVzdHMva21zX2NoYW1lbGl1bS5j Cj4gQEAgLTI2LDYgKzI2LDggQEAKPgo+ICAjaW5jbHVkZSAiY29uZmlnLmgiCj4gICNpbmNsdWRl ICJpZ3QuaCIKPiArI2luY2x1ZGUgImlndF9zeXNmcy5oIgo+ICsjaW5jbHVkZSAiaWd0X3ZjNC5o Igo+Cj4gICNpbmNsdWRlIDxmY250bC5oPgo+ICAjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gQEAgLTcw Myw2ICs3MDUsMzMwIEBAIHRlc3RfZGlzcGxheV9mcmFtZV9kdW1wKGRhdGFfdCAqZGF0YSwgc3Ry dWN0Cj4gY2hhbWVsaXVtX3BvcnQgKnBvcnQpCj4gIAlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25u ZWN0b3IpOwo+ICB9Cj4KPiArc3RhdGljIHVpbnQzMl90IHJhbmRvbV9wbGFuZV9mb3JtYXRzW10g PSB7Cj4gKwlEUk1fRk9STUFUX0FCR1I4ODg4LAo+ICsJRFJNX0ZPUk1BVF9BUkdCMTU1NSwKPiAr CURSTV9GT1JNQVRfQVJHQjg4ODgsCj4gKwlEUk1fRk9STUFUX1JHQjU2NSwKPiArCURSTV9GT1JN QVRfQkdSNTY1LAo+ICsJRFJNX0ZPUk1BVF9SR0I4ODgsCj4gKwlEUk1fRk9STUFUX0JHUjg4OCwK PiArCURSTV9GT1JNQVRfWEJHUjg4ODgsCj4gKwlEUk1fRk9STUFUX1hSR0IxNTU1LAo+ICsJRFJN X0ZPUk1BVF9YUkdCODg4OCwKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHRlc3RfZGlzcGxheV9w bGFuZXNfcmFuZG9tKGRhdGFfdCAqZGF0YSwKPiArCQkJCSAgICAgICBzdHJ1Y3QgY2hhbWVsaXVt X3BvcnQgKnBvcnQsCj4gKwkJCQkgICAgICAgZW51bSBjaGFtZWxpdW1fY2hlY2sgY2hlY2spCj4g K3sKPiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ICsJaWd0X3BpcGVfdCAqcGlwZTsKPiArCWRy bU1vZGVNb2RlSW5mbyAqbW9kZTsKPiArCWlndF9wbGFuZV90ICpwcmltYXJ5X3BsYW5lOwo+ICsJ c3RydWN0IGlndF9mYiBwcmltYXJ5X2ZiOwo+ICsJc3RydWN0IGlndF9mYiByZXN1bHRfZmI7Cj4g KwlzdHJ1Y3QgaWd0X2ZiICpvdmVybGF5X2ZiczsKPiArCWlndF9jcmNfdCAqY3JjOwo+ICsJaWd0 X2NyY190ICpleHBlY3RlZF9jcmM7Cj4gKwlzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyY19hc3luY19k YXRhICpmYl9jcmM7Cj4gKwl1bnNpZ25lZCBpbnQgb3ZlcmxheV9wbGFuZXNfbWF4ID0gMDsKPiAr CXVuc2lnbmVkIGludCBvdmVybGF5X3BsYW5lc19jb3VudDsKPiArCXVuc2lnbmVkIGludCBvdmVy bGF5X3BsYW5lc19pbmRleDsKPiArCWJvb2wgYmFuZHdpZHRoX2V4Y2VlZGVkID0gZmFsc2U7Cj4g Kwlib29sIHVuZGVycnVuX2RldGVjdGVkID0gZmFsc2U7Cj4gKwljYWlyb19zdXJmYWNlX3QgKnJl c3VsdF9zdXJmYWNlOwo+ICsJY2Fpcm9fc3VyZmFjZV90ICpwcmltYXJ5X3N1cmZhY2U7Cj4gKwlj YWlyb19zdXJmYWNlX3QgKm92ZXJsYXlfc3VyZmFjZTsKPiArCWNhaXJvX3QgKmNyOwo+ICsJaW50 IGNhcHR1cmVkX2ZyYW1lX2NvdW50Owo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwljaGFyICp1bmRl cnJ1bjsKPiArCWludCBmYl9pZDsKPiArCWludCBkZWJ1Z2ZzOwo+ICsJaW50IHJldDsKPiArCj4g KwlpZ3RfYXNzZXJ0KGNoZWNrID09IENIQU1FTElVTV9DSEVDS19DUkMpOwo+ICsKPiArCXNyYW5k KHRpbWUoTlVMTCkpOwo+ICsKPiArCXJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwo+ICsKPiArCS8q IEZpbmQgdGhlIGNvbm5lY3RvciBhbmQgcGlwZS4gKi8KPiArCW91dHB1dCA9IHByZXBhcmVfb3V0 cHV0KGRhdGEsIHBvcnQpOwo+ICsJaWd0X2Fzc2VydChvdXRwdXQpOwpEbyB3ZSBhY3R1YWxseSBu ZWVkIHRoaXM/IFdlJ3JlIG5vdCBydW5uaW5nIGlndF9hc3NlcnQgb24gdGhlIHByZXBhcmVfb3V0 cHV0KCkKZnVuY3Rpb24gZm9yIGFueSBvZiB0aGUgb3RoZXIgdGVzdHMuCj4gKwo+ICsJaWYgKGlz X3ZjNF9kZXZpY2UoZGF0YS0+ZHJtX2ZkKSkgewo+ICsJCWRlYnVnZnMgPSBpZ3RfZGVidWdmc19k aXIoZGF0YS0+ZHJtX2ZkKTsKPiArCQlpZ3RfYXNzZXJ0KGRlYnVnZnMgPj0gMCk7Cj4gKwl9Cj4g Kwo+ICsJcGlwZSA9ICZkYXRhLT5kaXNwbGF5LnBpcGVzW291dHB1dC0+cGVuZGluZ19waXBlXTsK PiArCj4gKwltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwo+ICsJaWd0X2Fzc2Vy dChtb2RlKTsKVGhpcyBhc3NlcnQgZG9lc24ndCBsb29rIGxpa2UgaXQncyBuZWVkZWQgZWl0aGVy Cgo+ICsKPiArCS8qIEdldCBhIGZyYW1lYnVmZmVyIGZvciB0aGUgcHJpbWFyeSBwbGFuZS4gKi8K PiArCXByaW1hcnlfcGxhbmUgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwKPiBE Uk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiArCWlndF9hc3NlcnQocHJpbWFyeV9wbGFuZSk7Cj4g Kwo+ICsJZmJfaWQgPSBjaGFtZWxpdW1fZ2V0X3BhdHRlcm5fZmIoZGF0YSwgbW9kZS0+aGRpc3Bs YXksIG1vZGUtPnZkaXNwbGF5LAo+ICsJCQkJCSBEUk1fRk9STUFUX1hSR0I4ODg4LCA2NCwKPiAm cHJpbWFyeV9mYik7Cj4gKwlpZ3RfYXNzZXJ0KGZiX2lkID4gMCk7Cj4gKwo+ICsJaWd0X3BsYW5l X3NldF9mYihwcmltYXJ5X3BsYW5lLCAmcHJpbWFyeV9mYik7Cj4gKwo+ICsJcHJpbWFyeV9zdXJm YWNlID0gaWd0X2dldF9jYWlyb19zdXJmYWNlKGRhdGEtPmRybV9mZCwgJnByaW1hcnlfZmIpOwo+ ICsKPiArCS8qIEdldCBhIGZyYW1lYnVmZmVyIGZvciB0aGUgY2Fpcm8gY29tcG9zaXRpb24gcmVz dWx0LiAqLwo+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+aGRp c3BsYXksCj4gKwkJCSAgICAgIG1vZGUtPnZkaXNwbGF5LCBEUk1fRk9STUFUX1hSR0I4ODg4LAo+ ICsJCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLCAmcmVzdWx0X2ZiKTsKPiArCWln dF9hc3NlcnQoZmJfaWQgPiAwKTsKPiArCj4gKwkvKiBJbml0aWFsaXplIGNhaXJvIHdpdGggdGhl IHJlc3VsdCBzdXJmYWNlIGFzIHRhcmdldC4gKi8KPiArCXJlc3VsdF9zdXJmYWNlID0gaWd0X2dl dF9jYWlyb19zdXJmYWNlKGRhdGEtPmRybV9mZCwgJnJlc3VsdF9mYik7Cj4gKwo+ICsJY3IgPSBj YWlyb19jcmVhdGUocmVzdWx0X3N1cmZhY2UpOwo+ICsKPiArCS8qIEJsZW5kIHRoZSBwcmltYXJ5 IHN1cmZhY2UuICovCj4gKwljYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHByaW1hcnlfc3Vy ZmFjZSwgMCwgMCk7Cj4gKwljYWlyb19zdXJmYWNlX2Rlc3Ryb3kocHJpbWFyeV9zdXJmYWNlKTsK PiArCWNhaXJvX3BhaW50KGNyKTsKPiArCj4gKwljYWlyb19kZXN0cm95KGNyKTsKPiArCj4gKwkv KiBDb3VudCBhdmFpbGFibGUgb3ZlcmxheSBwbGFuZXMuICovCj4gKwlmb3IgKGkgPSAwOyBpIDwg cGlwZS0+bl9wbGFuZXM7IGkrKykgewo+ICsJCWlndF9wbGFuZV90ICpwbGFuZSA9ICZwaXBlLT5w bGFuZXNbaV07Cj4gKwo+ICsJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9PVkVS TEFZKQo+ICsJCQlvdmVybGF5X3BsYW5lc19tYXgrKzsKPiArCX0KV2h5IG5vdCBhZGQgYSBoZWxw ZXIgZm9yIHRoaXMgaW4gYSBzZXBlcmF0ZSBwYXRjaD8gVGhpcyBzZWVtcyBxdWl0ZQp1c2VmdWwK Cj4gKwo+ICsJLyogTGltaXQgdGhlIG51bWJlciBvZiBwbGFuZXMgdG8gYSByZWFzb25hYmxlIHNj ZW5lLiAqLwo+ICsJaWYgKG92ZXJsYXlfcGxhbmVzX21heCA+IDQpCj4gKwkJb3ZlcmxheV9wbGFu ZXNfbWF4ID0gNDsKPiArCj4gKwlvdmVybGF5X3BsYW5lc19jb3VudCA9IChyYW5kKCkgJSBvdmVy bGF5X3BsYW5lc19tYXgpICsgMTsKPiArCWlndF9kZWJ1ZygiVXNpbmcgJWQgb3ZlcmxheSBwbGFu ZXNcbiIsIG92ZXJsYXlfcGxhbmVzX2NvdW50KTsKPiArCj4gKwlvdmVybGF5X2ZicyA9IGNhbGxv YyhzaXplb2Yoc3RydWN0IGlndF9mYiksIG92ZXJsYXlfcGxhbmVzX2NvdW50KTsKaWd0X2Fzc2Vy dChvdmVybGF5X2ZicykKPiArCj4gKwlmb3IgKGkgPSAwLCBvdmVybGF5X3BsYW5lc19pbmRleCA9 IDA7Cj4gKwkgICAgIGkgPCBwaXBlLT5uX3BsYW5lcyAmJiBvdmVybGF5X3BsYW5lc19pbmRleCA8 Cj4gb3ZlcmxheV9wbGFuZXNfY291bnQ7Cj4gKwkgICAgIGkrKykgewo+ICsJCXN0cnVjdCBpZ3Rf ZmIgKm92ZXJsYXlfZmIgPQo+ICZvdmVybGF5X2Zic1tvdmVybGF5X3BsYW5lc19pbmRleF07Cj4g KwkJaWd0X3BsYW5lX3QgKnBsYW5lID0gJnBpcGUtPnBsYW5lc1tpXTsKPiArCQlzdHJ1Y3QgaWd0 X2ZiIHBhdHRlcm5fZmI7Cj4gKwkJdWludDMyX3Qgb3ZlcmxheV9mYl93LCBvdmVybGF5X2ZiX2g7 Cj4gKwkJaW50MzJfdCBvdmVybGF5X2NydGNfeCwgb3ZlcmxheV9jcnRjX3k7Cj4gKwkJdWludDMy X3Qgb3ZlcmxheV9jcnRjX3csIG92ZXJsYXlfY3J0Y19oOwo+ICsJCXVpbnQzMl90IG92ZXJsYXlf c3JjX3gsIG92ZXJsYXlfc3JjX3k7Cj4gKwkJdWludDMyX3Qgb3ZlcmxheV9zcmNfdywgb3Zlcmxh eV9zcmNfaDsKPiArCQlpbnQgb3ZlcmxheV9zdXJmYWNlX3gsIG92ZXJsYXlfc3VyZmFjZV95Owo+ ICsJCXVuc2lnbmVkIGludCBpbmRleDsKPiArCQl1bnNpZ25lZCBpbnQgc3RyaWRlX21pbjsKPiAr CQl1bnNpZ25lZCBpbnQgc3RyaWRlOwo+ICsJCWJvb2wgdmM0X3RfdGlsZWQ7Cj4gKwkJdWludDMy X3QgZm9ybWF0Owo+ICsKPiArCQlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfT1ZF UkxBWSkKPiArCQkJY29udGludWU7CldlIGNvdWxkIGFsc28gYWRkIGEgaGVscGVyIGZvciBsb29w aW5nIHRocm91Z2ggcGxhbmVzIG9mIHNwZWNpZmljIHR5cGVzLApzaW5jZSB3ZSBzZWVtIHRvIGRv IHRoYXQgbXVsdGlwbGUgdGltZXMgaGVyZSBhbmQgd2lsbCBwcm9iYWJseSBkbyBpdCBpbgpmdXR1 cmUgdGVzdHMgYXQgc29tZSBwb2l0Cgo+ICsKPiArCQkvKiBSYW5kb21pemUgd2lkdGggYW5kIGhl aWdodCBpbiB0aGUgbW9kZSBkaW1lbnNpb25zIHJhbmdlLiAqLwo+ICsJCW92ZXJsYXlfZmJfdyA9 IChyYW5kKCkgJSBtb2RlLT5oZGlzcGxheSkgKyAxOwo+ICsJCW92ZXJsYXlfZmJfaCA9IChyYW5k KCkgJSBtb2RlLT52ZGlzcGxheSkgKyAxOwo+ICsKPiArCQkvKgo+ICsJCSAqIFJhbmRvbWl6ZSBz b3VyY2Ugb2Zmc2V0LCBidXQga2VlcCBhdCBsZWFzdCBoYWxmIG9mIHRoZQo+ICsJCSAqIG9yaWdp bmFsIHNpemUuCj4gKwkJICovCj4gKwkJb3ZlcmxheV9zcmNfeCA9IHJhbmQoKSAlIChvdmVybGF5 X2ZiX3cgLyAyKTsKPiArCQlvdmVybGF5X3NyY195ID0gcmFuZCgpICUgKG92ZXJsYXlfZmJfaCAv IDIpOwo+ICsKPiArCQkvKgo+ICsJCSAqIFRoZSBvbi1jcnRjIHNpemUgZG9lcyBub3QgaW5jbHVk ZSB0aGUgc291cmNlIG9mZnNldCwgc28gaXQKPiArCQkgKiBuZWVkcyB0byBiZSBzdWJ0cmFjdGVk IHRvIGF2b2lkIHNjYWxpbmcuCj4gKwkJICovCj4gKwkJb3ZlcmxheV9jcnRjX3cgPSBvdmVybGF5 X2ZiX3cgLSBvdmVybGF5X3NyY194Owo+ICsJCW92ZXJsYXlfY3J0Y19oID0gb3ZlcmxheV9mYl9o IC0gb3ZlcmxheV9zcmNfeTsKPiArCj4gKwkJLyogU2FtZSBnb2VzIGZvciB0aGUgZnJhbWVidWZm ZXIgc291cmNlIHNpemUuICovCj4gKwkJb3ZlcmxheV9zcmNfdyA9IG92ZXJsYXlfY3J0Y193Owo+ ICsJCW92ZXJsYXlfc3JjX2ggPSBvdmVybGF5X2NydGNfaDsKPiArCj4gKwkJLyoKPiArCQkgKiBS YW5kb21pemUgdGhlIG9uLWNydGMgcG9zaXRpb24gYW5kIGFsbG93IHRoZSBwbGFuZSB0byBnbwo+ ICsJCSAqIG9mZi1kaXNwbGF5IGJ5IHVwIHRvIGhhbGYgb2YgaXRzIHdpZHRoIGFuZCBoZWlnaHQu Cj4gKwkJICovCj4gKwkJb3ZlcmxheV9jcnRjX3ggPSAocmFuZCgpICUgbW9kZS0+aGRpc3BsYXkp IC0gb3ZlcmxheV9jcnRjX3cgLwo+IDI7Cj4gKwkJb3ZlcmxheV9jcnRjX3kgPSAocmFuZCgpICUg bW9kZS0+dmRpc3BsYXkpIC0gb3ZlcmxheV9jcnRjX2ggLwo+IDI7Cj4gKwo+ICsJCWlndF9kZWJ1 ZygiUGxhbmUgJWQ6IG9uLWNydGMgc2l6ZSAlZHglZFxuIiwKPiArCQkJICBvdmVybGF5X3BsYW5l c19pbmRleCwgb3ZlcmxheV9jcnRjX3csCj4gb3ZlcmxheV9jcnRjX2gpOwo+ICsJCWlndF9kZWJ1 ZygiUGxhbmUgJWQ6IG9uLWNydGMgcG9zaXRpb24gJWR4JWRcbiIsCj4gKwkJCSAgb3ZlcmxheV9w bGFuZXNfaW5kZXgsIG92ZXJsYXlfY3J0Y194LAo+IG92ZXJsYXlfY3J0Y195KTsKPiArCQlpZ3Rf ZGVidWcoIlBsYW5lICVkOiBpbi1mcmFtZWJ1ZmZlciBwb3NpdGlvbiAlZHglZFxuIiwKPiArCQkJ ICBvdmVybGF5X3BsYW5lc19pbmRleCwgb3ZlcmxheV9zcmNfeCwgb3ZlcmxheV9zcmNfeSk7Cj4g Kwo+ICsJCS8qIEdldCBhIHBhdHRlcm4gZnJhbWVidWZmZXIgZm9yIHRoZSBvdmVybGF5IHBsYW5l LiAqLwo+ICsJCWZiX2lkID0gY2hhbWVsaXVtX2dldF9wYXR0ZXJuX2ZiKGRhdGEsIG92ZXJsYXlf ZmJfdywKPiArCQkJCQkJIG92ZXJsYXlfZmJfaCwKPiArCQkJCQkJIERSTV9GT1JNQVRfWFJHQjg4 ODgsCj4gKwkJCQkJCSAzMiwgJnBhdHRlcm5fZmIpOwo+ICsJCWlndF9hc3NlcnQoZmJfaWQgPiAw KTsKPiArCj4gKwkJLyogUmFuZG9taXplIHRoZSB1c2Ugb2YgdGlsZWQgbW9kZSB3aXRoIGEgMS80 IHByb2JhYmlsaXR5LiAqLwo+ICsJCWluZGV4ID0gcmFuZCgpICUgNDsKPiArCj4gKwkJaWYgKGlz X3ZjNF9kZXZpY2UoZGF0YS0+ZHJtX2ZkKSAmJiBpbmRleCA9PSAwKSB7Cj4gKwkJCWZvcm1hdCA9 IERSTV9GT1JNQVRfWFJHQjg4ODg7Cj4gKwkJCXZjNF90X3RpbGVkID0gdHJ1ZTsKPiArCj4gKwkJ CWlndF9kZWJ1ZygiUGxhbmUgJWQ6IFZDNCBULXRpbGVkICVzIGZvcm1hdFxuIiwKPiArCQkJCSAg b3ZlcmxheV9wbGFuZXNfaW5kZXgsCj4gaWd0X2Zvcm1hdF9zdHIoZm9ybWF0KSk7Cj4gKwkJfSBl bHNlIHsKPiArCQkJLyogUmFuZG9taXplIHRoZSBmb3JtYXQgdG8gdGVzdC4gKi8KPiArCQkJaW5k ZXggPSByYW5kKCkgJSBBUlJBWV9TSVpFKHJhbmRvbV9wbGFuZV9mb3JtYXRzKTsKPiArCQkJZm9y bWF0ID0gcmFuZG9tX3BsYW5lX2Zvcm1hdHNbaW5kZXhdOwo+ICsJCQl2YzRfdF90aWxlZCA9IGZh bHNlOwo+ICsKPiArCQkJaWd0X2RlYnVnKCJQbGFuZSAlZDogJXMgZm9ybWF0XG4iLAo+IG92ZXJs YXlfcGxhbmVzX2luZGV4LAo+ICsJCQkJICBpZ3RfZm9ybWF0X3N0cihmb3JtYXQpKTsKPiArCQl9 Cj4gKwo+ICsJCS8qIENvbnZlcnQgdGhlIHBhdHRlcm4gdG8gdGhlIHRlc3QgZm9ybWF0IGlmIG5l ZWRlZC4gKi8KPiArCQlpZiAodmM0X3RfdGlsZWQpIHsKPiArCQkJZmJfaWQgPSBpZ3RfdmM0X2Zi X3RfdGlsZWRfY29udmVydChvdmVybGF5X2ZiLAo+ICsJCQkJCQkJICAgJnBhdHRlcm5fZmIpOwo+ ICsJCQlpZ3RfYXNzZXJ0KGZiX2lkID4gMCk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJc3RyaWRlX21p biA9IG92ZXJsYXlfZmJfdyAqCj4gKwkJCQkgICAgIGlndF9mb3JtYXRfcGxhbmVfYnBwKGZvcm1h dCwgMCkgLyA4Owo+ICsKPiArCQkJLyogUmFuZG9taXplIHRoZSBzdHJpZGUgd2l0aCBhdCBtb3N0 IHR3aWNlIHRoZQo+IG1pbmltdW0uICovCj4gKwkJCXN0cmlkZSA9IChyYW5kKCkgJSBzdHJpZGVf bWluKSArIHN0cmlkZV9taW47Cj4gKwo+ICsJCQkvKiBQaXhtYW4gcmVxdWlyZXMgdGhlIHN0cmlk ZSB0byBiZSBhbGlnbmVkIHRvIDMyLWJ5dGUKPiB3b3Jkcy4gKi8KPiArCQkJc3RyaWRlID0gQUxJ R04oc3RyaWRlLCBzaXplb2YodWludDMyX3QpKTsKPiArCj4gKwkJCWlndF9kZWJ1ZygiUGxhbmUg JWQ6IHVzaW5nIHN0cmlkZSAlZFxuIiwKPiBvdmVybGF5X3BsYW5lc19pbmRleCwgc3RyaWRlKTsK PiArCj4gKwkJCWZiX2lkID0gaWd0X2ZiX2NvbnZlcnRfd2l0aF9zdHJpZGUob3ZlcmxheV9mYiwK PiArCQkJCQkJCSAgICZwYXR0ZXJuX2ZiLAo+ICsJCQkJCQkJICAgZm9ybWF0LCBzdHJpZGUpOwo+ ICsJCQlpZ3RfYXNzZXJ0KGZiX2lkKTsKPiArCQl9Cj4gKwo+ICsJCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsIG92ZXJsYXlfZmIpOwo+ICsKPiArCQlvdmVybGF5X3N1cmZhY2UgPSBpZ3RfZ2V0X2Nh aXJvX3N1cmZhY2UoZGF0YS0+ZHJtX2ZkLAo+ICsJCQkJCQkJJnBhdHRlcm5fZmIpOwo+ICsKPiAr CQkvKiBCbGVuZCB0aGUgb3ZlcmxheSBzdXJmYWNlLiAqLwo+ICsJCW92ZXJsYXlfc3VyZmFjZV94 ID0gb3ZlcmxheV9jcnRjX3ggLSAoaW50KSBvdmVybGF5X3NyY194Owo+ICsJCW92ZXJsYXlfc3Vy ZmFjZV95ID0gb3ZlcmxheV9jcnRjX3kgLSAoaW50KSBvdmVybGF5X3NyY195Owo+ICsKPiArCQlj ciA9IGNhaXJvX2NyZWF0ZShyZXN1bHRfc3VyZmFjZSk7Cj4gKwo+ICsJCWNhaXJvX3NldF9zb3Vy Y2Vfc3VyZmFjZShjciwgb3ZlcmxheV9zdXJmYWNlLAo+IG92ZXJsYXlfc3VyZmFjZV94LAo+ICsJ CQkJCSBvdmVybGF5X3N1cmZhY2VfeSk7Cj4gKwkJY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG92ZXJs YXlfc3VyZmFjZSk7Cj4gKwo+ICsJCS8qIENsaXAgdGhlIHN1cmZhY2UgdG8gYSByZWN0YW5nbGUu ICovCj4gKwkJY2Fpcm9fcmVjdGFuZ2xlKGNyLCBvdmVybGF5X2NydGNfeCwgb3ZlcmxheV9jcnRj X3ksCj4gKwkJCQlvdmVybGF5X2NydGNfdywgb3ZlcmxheV9jcnRjX2gpOwo+ICsJCWNhaXJvX2Ns aXAoY3IpOwo+ICsKPiArCQljYWlyb19wYWludChjcik7Cj4gKwo+ICsJCWNhaXJvX2Rlc3Ryb3ko Y3IpOwo+ICsKPiArCQkvKiBDb25maWd1cmUgdGhlIHBsYW5lIHdpdGggZnJhbWVidWZmZXIgc291 cmNlIGNvb3JkaW5hdGVzLiAqLwo+ICsJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIG92 ZXJsYXlfY3J0Y194LCBvdmVybGF5X2NydGNfeSk7Cj4gKwkJaWd0X3BsYW5lX3NldF9zaXplKHBs YW5lLCBvdmVybGF5X2NydGNfdywgb3ZlcmxheV9jcnRjX2gpOwo+ICsKPiArCQlpZ3RfZmJfc2V0 X3Bvc2l0aW9uKG92ZXJsYXlfZmIsIHBsYW5lLCBvdmVybGF5X3NyY194LAo+ICsJCQkJICAgIG92 ZXJsYXlfc3JjX3kpOwo+ICsJCWlndF9mYl9zZXRfc2l6ZShvdmVybGF5X2ZiLCBwbGFuZSwgb3Zl cmxheV9zcmNfdywKPiArCQkJCW92ZXJsYXlfc3JjX2gpOwo+ICsKPiArCQlpZ3RfcmVtb3ZlX2Zi KGRhdGEtPmRybV9mZCwgJnBhdHRlcm5fZmIpOwo+ICsKPiArCQlvdmVybGF5X3BsYW5lc19pbmRl eCsrOwo+ICsJfQo+ICsKPiArCWNhaXJvX3N1cmZhY2VfZGVzdHJveShyZXN1bHRfc3VyZmFjZSk7 Cj4gKwo+ICsJZmJfY3JjID0gY2hhbWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfYXN5bmNfc3RhcnQo ZGF0YS0+ZHJtX2ZkLAo+ICsJCQkJCQkJJnJlc3VsdF9mYik7Cj4gKwo+ICsJaWYgKGlzX3ZjNF9k ZXZpY2UoZGF0YS0+ZHJtX2ZkKSkgewo+ICsJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQy KCZkYXRhLT5kaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKPiArCQliYW5kd2lkdGhfZXhjZWVkZWQg PSAocmV0IDwgMCAmJiBlcnJubyA9PSBFTk9TUEMpOwo+ICsKPiArCQlpZ3RfZGVidWcoIkJhbmR3 aWR0aCBsaW1pdGF0aW9uIGV4ZWVkZWQ6ICVzXG4iLAo+ICsJCQkgIGJhbmR3aWR0aF9leGNlZWRl ZCA/ICJZZXMiIDogIk5vIik7Cj4gKwo+ICsJCWlndF9hc3NlcnQoIWJhbmR3aWR0aF9leGNlZWRl ZCk7Cj4gKwl9CldoeSBkb2VzIHRoaXMgbmVlZCB0byBiZSBoYW5kbGVkIHNlcGFyYXRlbHkgZm9y IFZDNCBkZXZpY2VzPyBXZSBhbHJlYWR5CnByaW50IHRoZSByZXR1cm4gY29kZSBmcm9tIGEgZmFp bGVkIGF0b21pYyBjb21taXQgaW50byB0aGUgZGVidWdnaW5nCm91dHB1dCwgYW5kIEknZCBhc3N1 bWUgYW55b25lIGxvb2tpbmcgYXQgdGhlIG91dHB1dCBmcm9tIHRoZSBmYWlsdXJlIG9mCm9uZSBv ZiB0aGVzZSB0ZXN0cyBwcm9iYWJseSBrbm93cyB3aGF0IHRoYXQgbWVhbnMuIEFkZGl0aW9uYWxs eSwgaWYgd2UKd2FudGVkIHRvIHByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyBmb3IgYmFuZHdpZHRo IGxpbWl0YXRpb25zIGJlaW5nCmV4Y2VlZGVkIGZvciBhdG9taWMgY29tbWl0cyBvbiB2YzQsIHNl ZW1zIGxpa2UgaXQgd291bGQgcHJvYmFibHkgYmUKYmV0dGVyIHRvIGp1c3QgYWRkIHRoYXQgY29k ZSB0byBpZ3RfZGlzcGxheV90cnlfY29tbWl0MigpCgo+ICsKPiArCWlndF9kaXNwbGF5X2NvbW1p dDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwo+ICsKPiArCWNoYW1lbGl1bV9jYXB0 dXJlKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgMCwgMCwgMCwgMCwgMSk7Cj4gKwljcmMgPSBjaGFt ZWxpdW1fcmVhZF9jYXB0dXJlZF9jcmNzKGRhdGEtPmNoYW1lbGl1bSwKPiArCQkJCQkgICAmY2Fw dHVyZWRfZnJhbWVfY291bnQpOwo+ICsKPiArCWlndF9hc3NlcnQoY2FwdHVyZWRfZnJhbWVfY291 bnQgPT0gMSk7Cj4gKwo+ICsJaWYgKGlzX3ZjNF9kZXZpY2UoZGF0YS0+ZHJtX2ZkKSkgewo+ICsJ CXVuZGVycnVuID0gaWd0X3N5c2ZzX2dldChkZWJ1Z2ZzLCAidW5kZXJydW4iKTsKPiArCQlpZ3Rf YXNzZXJ0KHVuZGVycnVuKTsKPiArCj4gKwkJdW5kZXJydW5fZGV0ZWN0ZWQgPSAodW5kZXJydW5b MF0gPT0gJ1knKTsKPiArCQlmcmVlKHVuZGVycnVuKTsKPiArCj4gKwkJaWd0X2RlYnVnKCJVbmRl cnJ1biBkZXRlY3RlZDogJXNcbiIsCj4gKwkJCSAgdW5kZXJydW5fZGV0ZWN0ZWQgPyAiWWVzIiA6 ICJObyIpOwo+ICsKPiArCQlpZ3RfYXNzZXJ0KCF1bmRlcnJ1bl9kZXRlY3RlZCk7Cj4gKwo+ICsJ CWNsb3NlKGRlYnVnZnMpOwo+ICsJfQpUaGlzIHdpbGwgZGVmaW5pdGVseSBiZSB1c2VkIGFnYWlu IGluIHRoZSBmdXR1cmUsIHRoaXMgc2hvdWxkIGFsc28gZ28KaW50byBhIGhlbHBlciBmb3IgdmM0 LgoKPiArCj4gKwlleHBlY3RlZF9jcmMgPSBjaGFtZWxpdW1fY2FsY3VsYXRlX2ZiX2NyY19hc3lu Y19maW5pc2goZmJfY3JjKTsKPiArCj4gKwljaGFtZWxpdW1fYXNzZXJ0X2NyY19lcV9vcl9kdW1w KGRhdGEtPmNoYW1lbGl1bSwKPiArCQkJCQlleHBlY3RlZF9jcmMsIGNyYywKPiArCQkJCQkmcmVz dWx0X2ZiLCBpKTsKPiArCj4gKwlpZ3RfZGVidWcoInJlZmVyZW5jZSBDUkM6ICVzXG4iLCBpZ3Rf Y3JjX3RvX3N0cmluZyhleHBlY3RlZF9jcmMpKTsKPiArCWlndF9kZWJ1ZygiY2FsY3VsYXRlZCBD UkM6ICVzXG4iLCBpZ3RfY3JjX3RvX3N0cmluZyhjcmMpKTsKV2h5IG5vdCBqdXN0IGFkZCB0aGlz IGRlYnVnZ2luZyBvdXRwdXQgdG8KY2hhbWVsaXVtX2Fzc2VydF9jcmNfZXFfb3JfZHVtcCgpPwoK PiArCj4gKwlmcmVlKGV4cGVjdGVkX2NyYyk7Cj4gKwlmcmVlKGNyYyk7Cj4gKwo+ICsJZm9yIChp ID0gMCwgb3ZlcmxheV9wbGFuZXNfaW5kZXggPSAwOwo+ICsJICAgICBpIDwgcGlwZS0+bl9wbGFu ZXMgJiYgb3ZlcmxheV9wbGFuZXNfaW5kZXggPAo+IG92ZXJsYXlfcGxhbmVzX2NvdW50Owo+ICsJ ICAgICBpKyspIHsKPiArCQlpZ3RfcGxhbmVfdCAqcGxhbmUgPSAmcGlwZS0+cGxhbmVzW2ldOwo+ ICsJCXN0cnVjdCBpZ3RfZmIgKm92ZXJsYXlfZmIgPQo+ICZvdmVybGF5X2Zic1tvdmVybGF5X3Bs YW5lc19pbmRleF07Cj4gKwo+ICsJCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9P VkVSTEFZKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1f ZmQsIG92ZXJsYXlfZmIpOwo+ICsKPiArCQlvdmVybGF5X3BsYW5lc19pbmRleCsrOwo+ICsJfQo+ ICsKPiArCWZyZWUob3ZlcmxheV9mYnMpOwo+ICsKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJt X2ZkLCAmcHJpbWFyeV9mYik7Cj4gKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJnJlc3Vs dF9mYik7Cj4gK30KPiArCj4gIHN0YXRpYyB2b2lkCj4gIHRlc3RfaHBkX3dpdGhvdXRfZGRjKGRh dGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ICB7Cj4gQEAgLTk4MSw2 ICsxMzA3LDExIEBAIGlndF9tYWluCj4gIAkJCXRlc3RfZGlzcGxheV9vbmVfbW9kZSgmZGF0YSwg cG9ydCwgRFJNX0ZPUk1BVF9OVjEyLAo+ICAJCQkJCSAgICAgIENIQU1FTElVTV9DSEVDS19BTkFM T0csIDEpOwo+Cj4gKwkJY29ubmVjdG9yX3N1YnRlc3QoImhkbWktY3JjLXBsYW5lcy1yYW5kb20i LCBIRE1JQSkKPiArCQkJdGVzdF9kaXNwbGF5X3BsYW5lc19yYW5kb20oJmRhdGEsIHBvcnQsCj4g KwkJCQkJCSAgIENIQU1FTElVTV9DSEVDS19DUkMpOwo+ICsKPiArCj4gIAkJY29ubmVjdG9yX3N1 YnRlc3QoImhkbWktZnJhbWUtZHVtcCIsIEhETUlBKQo+ICAJCQl0ZXN0X2Rpc3BsYXlfZnJhbWVf ZHVtcCgmZGF0YSwgcG9ydCk7Cj4gIAl9Ci0tIApDaGVlcnMsCglMeXVkZSBQYXVsCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcg bGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK