From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-f196.google.com (mail-qk1-f196.google.com [209.85.222.196]) by gabe.freedesktop.org (Postfix) with ESMTPS id 65E3B6E0D5 for ; Tue, 15 Jan 2019 22:56:13 +0000 (UTC) Received: by mail-qk1-f196.google.com with SMTP id z18so2610357qkj.10 for ; Tue, 15 Jan 2019 14:56:13 -0800 (PST) Message-ID: <6b128c813b480be98fcb68666884ca9bfb6c0c5d.camel@redhat.com> From: Lyude Paul Date: Tue, 15 Jan 2019 17:56:10 -0500 In-Reply-To: <20190111090532.19235-22-paul.kocialkowski@bootlin.com> References: <20190111090532.19235-1-paul.kocialkowski@bootlin.com> <20190111090532.19235-22-paul.kocialkowski@bootlin.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v3 21/21] chamelium: Add a 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: T24gRnJpLCAyMDE5LTAxLTExIGF0IDEwOjA1ICswMTAwLCBQYXVsIEtvY2lhbGtvd3NraSB3cm90 ZToKPiBUaGlzIGludHJvZHVjZXMgYSBuZXcgdGVzdCBmb3IgdGhlIENoYW1lbGl1bSwgdGhhdCBz ZXRzIHVwIHBsYW5lcwo+IHdpdGggcmFuZG9taXplZCBwcm9wZXJ0aWVzIHN1Y2ggYXMgdGhlIGZv cm1hdCwgZGltZW5zaW9ucywgcG9zaXRpb24sCj4gaW4tZnJhbWVidWZmZXIgb2Zmc2V0cyBhbmQg c3RyaWRlLiBUaGUgQ2hhbWVsaXVtIGNhcHR1cmUgaXMgY2hlY2tlZAo+IGFnYWluc3QgdGhlIHJl ZmVyZW5jZSBnZW5lcmF0ZWQgYnkgY2Fpcm8gd2l0aCBlaXRoZXIgYSBDUkMgb3IgdGhlCj4gY2hl Y2tlcmJvYXJkLXNwZWNpZmljIGNvbXBhcmlzb24gbWV0aG9kLgo+IAo+IFRoaXMgdGVzdCBhbHNv IGluY2x1ZGVzIHRlc3Rpbmcgb2YgdGhlIFZDNC1zcGVjaWZpYyBULXRpbGVkIGFuZAo+IFNBTkQt dGlsZWQgbW9kZXMsIGluIGFsbCBmb3JtYXRzIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuCj4g Cj4gU2luY2UgdGhpcyB0ZXN0IGRvZXMgbm90IHNoYXJlIG11Y2ggd2l0aCBwcmV2aW91cyBDaGFt ZWxpdW0gZGlzcGxheQo+IHRlc3RzIChlc3BlY2lhbGx5IHJlZ2FyZGluZyBLTVMgY29uZmlndXJh dGlvbiksIG1vc3Qgb2YgdGhlIGNvZGUgaXMKPiBub3Qgc2hhcmVkIHdpdGggb3RoZXIgdGVzdHMu Cj4gCj4gVGhpcyB0ZXN0IGNhbiBiZSBkZXJpdmVkIHdpdGggcmVwcm9kdWNpYmxlIHByb3BlcnRp ZXMgZm9yIHJlZ3Jlc3Npb24KPiB0ZXN0aW5nIGluIHRoZSBmdXR1cmUuIEZvciBub3csIGl0IHNl cnZlcyBhcyBhIGZ1enppbmcgdGVzdAo+IAo+IFNpZ25lZC1vZmYtYnk6IFBhdWwgS29jaWFsa293 c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KPiAtLS0KPiAgdGVzdHMva21zX2No YW1lbGl1bS5jIHwgNDQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICAxIGZpbGUgY2hhbmdlZCwgNDQ2IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEv dGVzdHMva21zX2NoYW1lbGl1bS5jIGIvdGVzdHMva21zX2NoYW1lbGl1bS5jCj4gaW5kZXggMjc3 OWQ3NGY1NWI2Li41OTYzOTY0ODc4YmEgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMva21zX2NoYW1lbGl1 bS5jCj4gKysrIGIvdGVzdHMva21zX2NoYW1lbGl1bS5jCj4gQEAgLTI2LDYgKzI2LDcgQEAKPiAg Cj4gICNpbmNsdWRlICJjb25maWcuaCIKPiAgI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAi aWd0X3ZjNC5oIgo+ICAKPiAgI2luY2x1ZGUgPGZjbnRsLmg+Cj4gICNpbmNsdWRlIDxzdHJpbmcu aD4KPiBAQCAtNzAyLDYgKzcwMyw0NDMgQEAgdGVzdF9kaXNwbGF5X2ZyYW1lX2R1bXAoZGF0YV90 ICpkYXRhLCBzdHJ1Y3QKPiBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKPiAgCWRybU1vZGVGcmVlQ29u bmVjdG9yKGNvbm5lY3Rvcik7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIHJhbmRvbWl6ZV9wbGFu ZV9mb3JtYXRfc3RyaWRlKGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMyX3QKPiB3aWR0aCwKPiAr CQkJCQkgIHVpbnQzMl90ICpmb3JtYXQsIHNpemVfdCAqc3RyaWRlLAo+ICsJCQkJCSAgYm9vbCAq dGlsZWQsIGJvb2wgYWxsb3dfeXV2KQo+ICt7Cj4gKwlzaXplX3Qgc3RyaWRlX21pbjsKPiArCXVp bnQzMl90ICpmb3JtYXRzX2FycmF5Owo+ICsJdW5zaWduZWQgaW50IGZvcm1hdHNfY291bnQ7Cj4g Kwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwlpbnQgaW5k ZXg7Cj4gKwo+ICsJaWd0X2Zvcm1hdF9hcnJheV9maWxsKCZmb3JtYXRzX2FycmF5LCAmZm9ybWF0 c19jb3VudCwgYWxsb3dfeXV2KTsKPiArCj4gKwkvKiBGaXJzdCBwYXNzIHRvIGNvdW50IHRoZSBz dXBwb3J0ZWQgZm9ybWF0cy4gKi8KPiArCWZvciAoaSA9IDA7IGkgPCBmb3JtYXRzX2NvdW50OyBp KyspCj4gKwkJaWYgKGlndF9wbGFuZV9oYXNfZm9ybWF0X21vZChwbGFuZSwgZm9ybWF0c19hcnJh eVtpXSwKPiArCQkJCQkgICAgIERSTV9GT1JNQVRfTU9EX0xJTkVBUikpCj4gKwkJCWNvdW50Kys7 Cj4gKwo+ICsJaWd0X2Fzc2VydChjb3VudCA+IDApOwo+ICsKPiArCWluZGV4ID0gcmFuZCgpICUg Y291bnQ7Cj4gKwo+ICsJLyogU2Vjb25kIHBhc3MgdG8gZ2V0IHRoZSBpbmRleC10aCBzdXBwb3J0 ZWQgZm9ybWF0LiAqLwo+ICsJZm9yIChpID0gMDsgaSA8IGZvcm1hdHNfY291bnQ7IGkrKykgewo+ ICsJCWlmICghaWd0X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBmb3JtYXRzX2FycmF5W2ld LAo+ICsJCQkJCSAgICAgIERSTV9GT1JNQVRfTU9EX0xJTkVBUikpCj4gKwkJCWNvbnRpbnVlOwo+ ICsKPiArCQlpZiAoIWluZGV4LS0pIHsKPiArCQkJKmZvcm1hdCA9IGZvcm1hdHNfYXJyYXlbaV07 Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlmcmVlKGZvcm1hdHNfYXJyYXkpOwo+ ICsKPiArCWlndF9hc3NlcnQoaW5kZXggPCAwKTsKPiArCj4gKwlzdHJpZGVfbWluID0gd2lkdGgg KiBpZ3RfZm9ybWF0X3BsYW5lX2JwcCgqZm9ybWF0LCAwKSAvIDg7Cj4gKwo+ICsJLyogUmFuZG9t aXplIHRoZSBzdHJpZGUgd2l0aCBhdCBtb3N0IHR3aWNlIHRoZSBtaW5pbXVtLiAqLwo+ICsJKnN0 cmlkZSA9IChyYW5kKCkgJSBzdHJpZGVfbWluKSArIHN0cmlkZV9taW47Ck1heWJlIG5lZWQgdG8g Y2hhbmdlIHRoZSBjb21tZW50IG9yIGZpeCB0aGlzIGxpbmU/IEdpdmVuCgpyYW5kKCkgPSA5OTk5 OTk5CnN0cmlkZV9taW4gPSAxMAoKVGhpcyB3b3VsZCBjb21lIG91dCB0byAxOSwgZS5nLiBsZXNz IHRoZW4gdHdpY2UgdGhlIG1heGltdW0uIE1heWJlIHlvdSBtZWFudAoKKnN0cmlkZSA9IChyYW5k KCkgJSAoc3RyaWRlX21pbiArIDEpKSArIHN0cmlkZV9taW47Cgo+ICsKPiArCS8qIFBpeG1hbiBy ZXF1aXJlcyB0aGUgc3RyaWRlIHRvIGJlIGFsaWduZWQgdG8gMzItYnl0ZSB3b3Jkcy4gKi8KPiAr CSpzdHJpZGUgPSBBTElHTigqc3RyaWRlLCBzaXplb2YodWludDMyX3QpKTsKPiArCj4gKwkvKiBS YW5kb21pemUgdGhlIHVzZSBvZiBhIHRpbGVkIG1vZGUgd2l0aCBhIDEvNCBwcm9iYWJpbGl0eS4g Ki8KPiArCSp0aWxlZCA9ICgocmFuZCgpICUgNCkgPT0gMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHJhbmRvbWl6ZV9wbGFuZV9kaW1lbnNpb25zKGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiAr CQkJCSAgICAgICB1aW50MzJfdCAqd2lkdGgsIHVpbnQzMl90ICpoZWlnaHQsCj4gKwkJCQkgICAg ICAgdWludDMyX3QgKnNyY193LCB1aW50MzJfdCAqc3JjX2gsCj4gKwkJCQkgICAgICAgdWludDMy X3QgKnNyY194LCB1aW50MzJfdCAqc3JjX3ksCj4gKwkJCQkgICAgICAgdWludDMyX3QgKmNydGNf dywgdWludDMyX3QgKmNydGNfaCwKPiArCQkJCSAgICAgICBpbnQzMl90ICpjcnRjX3gsIGludDMy X3QgKmNydGNfeSwKPiArCQkJCSAgICAgICBib29sIGFsbG93X3NjYWxpbmcpCj4gK3sKPiArCWRv dWJsZSByYXRpbzsKPiArCj4gKwkvKiBSYW5kb21pemUgd2lkdGggYW5kIGhlaWdodCBpbiB0aGUg bW9kZSBkaW1lbnNpb25zIHJhbmdlLiAqLwo+ICsJKndpZHRoID0gKHJhbmQoKSAlIG1vZGUtPmhk aXNwbGF5KSArIDE7Cj4gKwkqaGVpZ2h0ID0gKHJhbmQoKSAlIG1vZGUtPnZkaXNwbGF5KSArIDE7 Cj4gKwo+ICsJLyoKPiArCSAqIFJhbmRvbWl6ZSBzb3VyY2Ugb2Zmc2V0LCBidXQga2VlcCBhdCBs ZWFzdCBoYWxmIG9mIHRoZQo+ICsJICogb3JpZ2luYWwgc2l6ZS4KPiArCSAqLwo+ICsJKnNyY194 ID0gcmFuZCgpICUgKCp3aWR0aCAvIDIpOwo+ICsJKnNyY195ID0gcmFuZCgpICUgKCpoZWlnaHQg LyAyKTsKR2l2ZW4gYSB3aWR0aCBvZiAxOTIwLCB0aGlzIHdvdWxkIG1ha2UKCipzcmNfeCA+PSAw ICYmICpzcmNfeCA8IDk2MCAoZS5nLiBzcmNfeCBpcyBiZXR3ZWVuIDAgYW5kIDk1OSkKClNvIEkg dGhpbmsgeW91J3JlIG1pc3NpbmcgYSArMSBoZXJlCgo+ICsKPiArCS8qIFRoZSBzb3VyY2Ugc2l6 ZSBvbmx5IGluY2x1ZGVzIHRoZSBhY3RpdmUgc291cmNlIGFyZWEuICovCj4gKwkqc3JjX3cgPSAq d2lkdGggLSAqc3JjX3g7Cj4gKwkqc3JjX2ggPSAqaGVpZ2h0IC0gKnNyY195Owo+ICsKPiArCWlm IChhbGxvd19zY2FsaW5nKSB7Cj4gKwkJKmNydGNfdyA9IChyYW5kKCkgJSBtb2RlLT5oZGlzcGxh eSkgKyAxOwo+ICsJCSpjcnRjX2ggPSAocmFuZCgpICUgbW9kZS0+dmRpc3BsYXkpICsgMTsKPiAr Cj4gKwkJLyoKPiArCQkgKiBEb24ndCBib3RoZXIgd2l0aCBzY2FsaW5nIGlmIGRpbWVuc2lvbnMg YXJlIHF1aXRlIGNsb3NlIGluCj4gKwkJICogb3JkZXIgdG8gZ2V0IG5vbi1zY2FsaW5nIGNhc2Vz IG1vcmUgZnJlcXVlbnRseS4gQWxzbyBsaW1pdAo+ICsJCSAqIHNjYWxpbmcgdG8gM3ggdG8gYXZv aWQgYWdyZXNzaXZlIGZpbHRlcmluZyB0aGF0IG1ha2VzCj4gKwkJICogY29tcGFyaXNvbiBsZXNz IHJlbGlhYmxlLgo+ICsJCSAqLwo+ICsKPiArCQlyYXRpbyA9ICgoZG91YmxlKSAqY3J0Y193IC8g KnNyY193KTsKPiArCQlpZiAocmF0aW8gPiAwLjggJiYgcmF0aW8gPCAxLjIpCj4gKwkJCSpjcnRj X3cgPSAqc3JjX3c7Cj4gKwkJZWxzZSBpZiAocmF0aW8gPiAzLjApCj4gKwkJCSpjcnRjX3cgPSAq c3JjX3cgKiAzOwo+ICsKPiArCQlyYXRpbyA9ICgoZG91YmxlKSAqY3J0Y19oIC8gKnNyY19oKTsK PiArCQlpZiAocmF0aW8gPiAwLjggJiYgcmF0aW8gPCAxLjIpCj4gKwkJCSpjcnRjX2ggPSAqc3Jj X2g7Cj4gKwkJZWxzZSBpZiAocmF0aW8gPiAzLjApCj4gKwkJCSpjcnRjX2ggPSAqc3JjX2ggKiAz Owo+ICsJfSBlbHNlIHsKPiArCQkqY3J0Y193ID0gKnNyY193Owo+ICsJCSpjcnRjX2ggPSAqc3Jj X2g7Cj4gKwl9Cj4gKwo+ICsJaWYgKCpjcnRjX3cgIT0gKnNyY193IHx8ICpjcnRjX2ggIT0gKnNy Y19oKSB7Cj4gKwkJLyoKPiArCQkgKiBXaGVuIHNjYWxpbmcgaXMgaW52b2x2ZWQsIG1ha2Ugc3Vy ZSB0byBub3QgZ28gb2ZmLWJvdW5kcyBvcgo+ICsJCSAqIHNjYWxlZCBjbGlwcGluZyBtYXkgcmVz dWx0IGluIGRlY2ltYWwgZGltZW5zaW9ucywgdGhhdCBtb3N0Cj4gKwkJICogZHJpdmVycyBkb24n dCBzdXBwb3J0Lgo+ICsJCSAqLwo+ICsJCSpjcnRjX3ggPSByYW5kKCkgJSAobW9kZS0+aGRpc3Bs YXkgLSAqY3J0Y193KTsKPiArCQkqY3J0Y195ID0gcmFuZCgpICUgKG1vZGUtPnZkaXNwbGF5IC0g KmNydGNfaCk7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qCj4gKwkJICogUmFuZG9taXplIHRoZSBvbi1j cnRjIHBvc2l0aW9uIGFuZCBhbGxvdyB0aGUgcGxhbmUgdG8gZ28KPiArCQkgKiBvZmYtZGlzcGxh eSBieSB1cCB0byBoYWxmIG9mIGl0cyBvbi1jcnRjIHdpZHRoIGFuZCBoZWlnaHQuCj4gKwkJICov Cj4gKwkJKmNydGNfeCA9IChyYW5kKCkgJSBtb2RlLT5oZGlzcGxheSkgLSAqY3J0Y193IC8gMjsK PiArCQkqY3J0Y195ID0gKHJhbmQoKSAlIG1vZGUtPnZkaXNwbGF5KSAtICpjcnRjX2ggLyAyOwpJ IHRoaW5rIHlvdSdyZSBtaXNzaW5nICsxcyBoZXJlIGFzIHdlbGwgKHNob3VsZCBiZSByYW5kKCkg JSBtb2RlLT5oZGlzcGxheSsxLApldGMuKQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBi bGl0X3BsYW5lX2NhaXJvKGRhdGFfdCAqZGF0YSwgY2Fpcm9fc3VyZmFjZV90ICpyZXN1bHQsCj4g KwkJCSAgICAgdWludDMyX3Qgc3JjX3csIHVpbnQzMl90IHNyY19oLAo+ICsJCQkgICAgIHVpbnQz Ml90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKPiArCQkJICAgICB1aW50MzJfdCBjcnRjX3csIHVp bnQzMl90IGNydGNfaCwKPiArCQkJICAgICBpbnQzMl90IGNydGNfeCwgaW50MzJfdCBjcnRjX3ks Cj4gKwkJCSAgICAgc3RydWN0IGlndF9mYiAqZmIpCj4gK3sKPiArCWNhaXJvX3N1cmZhY2VfdCAq c3VyZmFjZTsKPiArCWNhaXJvX3N1cmZhY2VfdCAqY2xpcHBlZF9zdXJmYWNlOwo+ICsJY2Fpcm9f dCAqY3I7Cj4gKwo+ICsJc3VyZmFjZSA9IGlndF9nZXRfY2Fpcm9fc3VyZmFjZShkYXRhLT5kcm1f ZmQsIGZiKTsKPiArCj4gKwlpZiAoc3JjX3ggfHwgc3JjX3kpIHsKPiArCQljbGlwcGVkX3N1cmZh Y2UgPQo+IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9SR0IyNCwKPiAr CQkJCQkJCSAgICAgc3JjX3csIHNyY19oKTsKPiArCj4gKwkJY3IgPSBjYWlyb19jcmVhdGUoY2xp cHBlZF9zdXJmYWNlKTsKPiArCj4gKwkJY2Fpcm9fdHJhbnNsYXRlKGNyLCAtMS4gKiBzcmNfeCwg LTEuICogc3JjX3kpOwo+ICsKPiArCQljYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHN1cmZh Y2UsIDAsIDApOwo+ICsKPiArCQljYWlyb19wYWludChjcik7Cj4gKwkJY2Fpcm9fc3VyZmFjZV9m bHVzaChjbGlwcGVkX3N1cmZhY2UpOwo+ICsKPiArCQljYWlyb19kZXN0cm95KGNyKTsKPiArCX0g ZWxzZSB7Cj4gKwkJY2xpcHBlZF9zdXJmYWNlID0gc3VyZmFjZTsKPiArCX0KPiArCj4gKwljciA9 IGNhaXJvX2NyZWF0ZShyZXN1bHQpOwo+ICsKPiArCWNhaXJvX3RyYW5zbGF0ZShjciwgY3J0Y194 LCBjcnRjX3kpOwo+ICsKPiArCWlmIChzcmNfdyAhPSBjcnRjX3cgfHwgc3JjX2ggIT0gY3J0Y19o KSB7Cj4gKwkJY2Fpcm9fc2NhbGUoY3IsIChkb3VibGUpIGNydGNfdyAvIHNyY193LAo+ICsJCQkg ICAgKGRvdWJsZSkgY3J0Y19oIC8gc3JjX2gpOwo+ICsJfQo+ICsKPiArCWNhaXJvX3NldF9zb3Vy Y2Vfc3VyZmFjZShjciwgY2xpcHBlZF9zdXJmYWNlLCAwLCAwKTsKPiArCWNhaXJvX3N1cmZhY2Vf ZGVzdHJveShjbGlwcGVkX3N1cmZhY2UpOwo+ICsKPiArCWlmIChzcmNfdyAhPSBjcnRjX3cgfHwg c3JjX2ggIT0gY3J0Y19oKSB7Cj4gKwkJY2Fpcm9fcGF0dGVybl9zZXRfZmlsdGVyKGNhaXJvX2dl dF9zb3VyY2UoY3IpLAo+ICsJCQkJCSBDQUlST19GSUxURVJfQklMSU5FQVIpOwo+ICsJCWNhaXJv X3BhdHRlcm5fc2V0X2V4dGVuZChjYWlyb19nZXRfc291cmNlKGNyKSwKPiArCQkJCQkgQ0FJUk9f RVhURU5EX05PTkUpOwo+ICsJfQo+ICsKPiArCWNhaXJvX3BhaW50KGNyKTsKPiArCWNhaXJvX3N1 cmZhY2VfZmx1c2gocmVzdWx0KTsKPiArCj4gKwljYWlyb19kZXN0cm95KGNyKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgY29uZmlndXJlX3BsYW5lKGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMy X3Qgc3JjX3csIHVpbnQzMl90Cj4gc3JjX2gsCj4gKwkJCSAgICB1aW50MzJfdCBzcmNfeCwgdWlu dDMyX3Qgc3JjX3ksIHVpbnQzMl90IGNydGNfdywKPiArCQkJICAgIHVpbnQzMl90IGNydGNfaCwg aW50MzJfdCBjcnRjX3gsIGludDMyX3QgY3J0Y195LAo+ICsJCQkgICAgc3RydWN0IGlndF9mYiAq ZmIpCj4gK3sKPiArCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIGZiKTsKPiArCj4gKwlpZ3RfcGxh bmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCBjcnRjX3gsIGNydGNfeSk7Cj4gKwlpZ3RfcGxhbmVfc2V0 X3NpemUocGxhbmUsIGNydGNfdywgY3J0Y19oKTsKPiArCj4gKwlpZ3RfZmJfc2V0X3Bvc2l0aW9u KGZiLCBwbGFuZSwgc3JjX3gsIHNyY195KTsKPiArCWlndF9mYl9zZXRfc2l6ZShmYiwgcGxhbmUs IHNyY193LCBzcmNfaCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHByZXBhcmVfdGlsZWRfcGxh bmUoZGF0YV90ICpkYXRhLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCj4gKwkJCQl1bnNpZ25lZCBpbnQg aW5kZXgsIHVpbnQzMl90IGZvcm1hdCwKPiArCQkJCXN0cnVjdCBpZ3RfZmIgKm92ZXJsYXlfZmIp Cj4gK3sKPiArCXN0cnVjdCBpZ3RfZmIgdGlsZWRfZmI7Cj4gKwl1bnNpZ25lZCBpbnQgZmJfaWQ7 Cj4gKwo+ICsJaWYgKGlzX3ZjNF9kZXZpY2UoZGF0YS0+ZHJtX2ZkKSAmJgo+ICsJICAgIGlndF92 YzRfcGxhbmVfc3VwcG9ydHNfdF90aWxpbmcocGxhbmUsIGZvcm1hdCkpIHsKPiArCQlpZ3RfZGVi dWcoIlBsYW5lICVkOiB1c2luZyBWQzQgVC10aWxpbmdcbiIsIGluZGV4KTsKPiArCj4gKwkJZmJf aWQgPSBpZ3RfdmM0X2ZiX3RfdGlsZWRfY29udmVydCgmdGlsZWRfZmIsIG92ZXJsYXlfZmIpOwo+ ICsJfSBlbHNlIGlmIChpc192YzRfZGV2aWNlKGRhdGEtPmRybV9mZCkgJiYKPiArCQkgICBpZ3Rf dmM0X3BsYW5lX3N1cHBvcnRzX3NhbmRfdGlsaW5nKHBsYW5lLCBmb3JtYXQsIDI1NikpIHsKPiAr CQkvKiBSYW5kb21pemUgdGhlIGNvbHVtbiBoZWlnaHQgd2l0aCBhdCBtb3N0IHR3aWNlIHRoZSBo ZWlnaHQuCj4gKi8KPiArCQlzaXplX3QgY29sdW1uX2hlaWdodCA9IChyYW5kKCkgJSBvdmVybGF5 X2ZiLT5oZWlnaHQpICsKPiArCQkJCSAgICAgICBvdmVybGF5X2ZiLT5oZWlnaHQ7Cj4gKwo+ICsJ CWlndF9kZWJ1ZygiUGxhbmUgJWQ6IHVzaW5nIFZDNCBTQU5EMjU2IHRpbGluZyB3aXRoIGNvbHVt bgo+IGhlaWdodCAlbGRcbiIsCj4gKwkJCSAgaW5kZXgsIGNvbHVtbl9oZWlnaHQpOwo+ICsKPiAr CQlmYl9pZCA9IHZjNF9mYl9zYW5kX3RpbGVkX2NvbnZlcnQoJnRpbGVkX2ZiLCBvdmVybGF5X2Zi LCAyNTYsCj4gKwkJCQkJCSAgY29sdW1uX2hlaWdodCk7Cj4gKwl9IGVsc2Ugewo+ICsJCXJldHVy bjsKPiArCX0KCkJpa2VzaGVkOiBXaHkgbm90IHJlbW92ZSB0aGUgdHdvIGlzX3ZjNF9kZXZpY2Uo ZGF0YS0+ZHJtX2ZkKSBjaGVja3MgYW5kIGp1c3QKcHV0IHRoaXMgYXQgdGhlIHRvcCBvZiBwcmVw YXJlX3RpbGVkX3BsYW5lKCk6CgppZiAoIWlzX3ZjNF9kZXZpY2UoZGF0YS0+ZHJtX2ZkKSkKCXJl dHVybjsKCldvdWxkIG1ha2UgdGhlc2UgY29uZGl0aW9uYWxzIGEgYml0IGVhc2llciB0byByZWFk Cj4gKwo+ICsJaWd0X2Fzc2VydChmYl9pZCA+IDApOwo+ICsKPiArCS8qIE1ha2UgdGhlIHRpbGVk IGZyYW1lYnVmZmVyIHRoZSBvdmVybGF5LiAqLwo+ICsJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1f ZmQsIG92ZXJsYXlfZmIpOwo+ICsJKm92ZXJsYXlfZmIgPSB0aWxlZF9mYjsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgcHJlcGFyZV9yYW5kb21pemVkX3BsYW5lKGRhdGFfdCAqZGF0YSwKPiArCQkJ CSAgICAgZHJtTW9kZU1vZGVJbmZvICptb2RlLAo+ICsJCQkJICAgICBpZ3RfcGxhbmVfdCAqcGxh bmUsCj4gKwkJCQkgICAgIHN0cnVjdCBpZ3RfZmIgKm92ZXJsYXlfZmIsCj4gKwkJCQkgICAgIHVu c2lnbmVkIGludCBpbmRleCwKPiArCQkJCSAgICAgY2Fpcm9fc3VyZmFjZV90ICpyZXN1bHRfc3Vy ZmFjZSwKPiArCQkJCSAgICAgYm9vbCBhbGxvd19zY2FsaW5nLCBib29sIGFsbG93X3l1dikKPiAr ewo+ICsJc3RydWN0IGlndF9mYiBwYXR0ZXJuX2ZiOwo+ICsJdWludDMyX3Qgb3ZlcmxheV9mYl93 LCBvdmVybGF5X2ZiX2g7Cj4gKwl1aW50MzJfdCBvdmVybGF5X3NyY193LCBvdmVybGF5X3NyY19o Owo+ICsJdWludDMyX3Qgb3ZlcmxheV9zcmNfeCwgb3ZlcmxheV9zcmNfeTsKPiArCWludDMyX3Qg b3ZlcmxheV9jcnRjX3gsIG92ZXJsYXlfY3J0Y195Owo+ICsJdWludDMyX3Qgb3ZlcmxheV9jcnRj X3csIG92ZXJsYXlfY3J0Y19oOwo+ICsJdWludDMyX3QgZm9ybWF0Owo+ICsJc2l6ZV90IHN0cmlk ZTsKPiArCWJvb2wgdGlsZWQ7Cj4gKwlpbnQgZmJfaWQ7Cj4gKwo+ICsJcmFuZG9taXplX3BsYW5l X2RpbWVuc2lvbnMobW9kZSwgJm92ZXJsYXlfZmJfdywgJm92ZXJsYXlfZmJfaCwKPiArCQkJCSAg ICZvdmVybGF5X3NyY193LCAmb3ZlcmxheV9zcmNfaCwKPiArCQkJCSAgICZvdmVybGF5X3NyY194 LCAmb3ZlcmxheV9zcmNfeSwKPiArCQkJCSAgICZvdmVybGF5X2NydGNfdywgJm92ZXJsYXlfY3J0 Y19oLAo+ICsJCQkJICAgJm92ZXJsYXlfY3J0Y194LCAmb3ZlcmxheV9jcnRjX3ksCj4gKwkJCQkg ICBhbGxvd19zY2FsaW5nKTsKPiArCj4gKwlpZ3RfZGVidWcoIlBsYW5lICVkOiBmcmFtZWJ1ZmZl ciBzaXplICVkeCVkXG4iLCBpbmRleCwKPiArCQkgIG92ZXJsYXlfZmJfdywgb3ZlcmxheV9mYl9o KTsKPiArCWlndF9kZWJ1ZygiUGxhbmUgJWQ6IG9uLWNydGMgc2l6ZSAlZHglZFxuIiwgaW5kZXgs Cj4gKwkJICBvdmVybGF5X2NydGNfdywgb3ZlcmxheV9jcnRjX2gpOwo+ICsJaWd0X2RlYnVnKCJQ bGFuZSAlZDogb24tY3J0YyBwb3NpdGlvbiAlZHglZFxuIiwgaW5kZXgsCj4gKwkJICBvdmVybGF5 X2NydGNfeCwgb3ZlcmxheV9jcnRjX3kpOwo+ICsJaWd0X2RlYnVnKCJQbGFuZSAlZDogaW4tZnJh bWVidWZmZXIgc2l6ZSAlZHglZFxuIiwgaW5kZXgsCj4gKwkJICBvdmVybGF5X3NyY193LCBvdmVy bGF5X3NyY19oKTsKPiArCWlndF9kZWJ1ZygiUGxhbmUgJWQ6IGluLWZyYW1lYnVmZmVyIHBvc2l0 aW9uICVkeCVkXG4iLCBpbmRleCwKPiArCQkgIG92ZXJsYXlfc3JjX3gsIG92ZXJsYXlfc3JjX3kp Owo+ICsKPiArCS8qIEdldCBhIHBhdHRlcm4gZnJhbWVidWZmZXIgZm9yIHRoZSBvdmVybGF5IHBs YW5lLiAqLwo+ICsJZmJfaWQgPSBjaGFtZWxpdW1fZ2V0X3BhdHRlcm5fZmIoZGF0YSwgb3Zlcmxh eV9mYl93LCBvdmVybGF5X2ZiX2gsCj4gKwkJCQkJIERSTV9GT1JNQVRfWFJHQjg4ODgsIDMyLAo+ ICZwYXR0ZXJuX2ZiKTsKPiArCWlndF9hc3NlcnQoZmJfaWQgPiAwKTsKPiArCj4gKwlyYW5kb21p emVfcGxhbmVfZm9ybWF0X3N0cmlkZShwbGFuZSwgb3ZlcmxheV9mYl93LCAmZm9ybWF0LCAmc3Ry aWRlLAo+ICsJCQkJICAgICAgJnRpbGVkLCBhbGxvd195dXYpOwo+ICsKPiArCWlndF9kZWJ1Zygi UGxhbmUgJWQ6ICVzIGZvcm1hdCB3aXRoIHN0cmlkZSAlbGRcbiIsIGluZGV4LAo+ICsJCSAgaWd0 X2Zvcm1hdF9zdHIoZm9ybWF0KSwgc3RyaWRlKTsKPiArCj4gKwlmYl9pZCA9IGlndF9mYl9jb252 ZXJ0X3dpdGhfc3RyaWRlKG92ZXJsYXlfZmIsICZwYXR0ZXJuX2ZiLCBmb3JtYXQsCj4gKwkJCQkJ ICAgc3RyaWRlKTsKPiArCWlndF9hc3NlcnQoZmJfaWQgPiAwKTsKPiArCj4gKwlpZiAodGlsZWQp Cj4gKwkJcHJlcGFyZV90aWxlZF9wbGFuZShkYXRhLCBwbGFuZSwgaW5kZXgsIGZvcm1hdCwgb3Zl cmxheV9mYik7Cj4gKwo+ICsJYmxpdF9wbGFuZV9jYWlybyhkYXRhLCByZXN1bHRfc3VyZmFjZSwg b3ZlcmxheV9zcmNfdywgb3ZlcmxheV9zcmNfaCwKPiArCQkJIG92ZXJsYXlfc3JjX3gsIG92ZXJs YXlfc3JjX3ksCj4gKwkJCSBvdmVybGF5X2NydGNfdywgb3ZlcmxheV9jcnRjX2gsCj4gKwkJCSBv dmVybGF5X2NydGNfeCwgb3ZlcmxheV9jcnRjX3ksICZwYXR0ZXJuX2ZiKTsKPiArCj4gKwljb25m aWd1cmVfcGxhbmUocGxhbmUsIG92ZXJsYXlfc3JjX3csIG92ZXJsYXlfc3JjX2gsCj4gKwkJCW92 ZXJsYXlfc3JjX3gsIG92ZXJsYXlfc3JjX3ksCj4gKwkJCW92ZXJsYXlfY3J0Y193LCBvdmVybGF5 X2NydGNfaCwKPiArCQkJb3ZlcmxheV9jcnRjX3gsIG92ZXJsYXlfY3J0Y195LCBvdmVybGF5X2Zi KTsKPiArCj4gKwkvKiBSZW1vdmUgdGhlIG9yaWdpbmFsIHBhdHRlcm4gZnJhbWVidWZmZXIuICov Cj4gKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJnBhdHRlcm5fZmIpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB0ZXN0X2Rpc3BsYXlfcGxhbmVzX3JhbmRvbShkYXRhX3QgKmRhdGEsCj4g KwkJCQkgICAgICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAo+ICsJCQkJICAgICAgIGVu dW0gY2hhbWVsaXVtX2NoZWNrIGNoZWNrKQo+ICt7Cj4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsK PiArCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKPiArCWlndF9wbGFuZV90ICpwcmltYXJ5X3BsYW5l Owo+ICsJc3RydWN0IGlndF9mYiBwcmltYXJ5X2ZiOwo+ICsJc3RydWN0IGlndF9mYiByZXN1bHRf ZmI7Cj4gKwlzdHJ1Y3QgaWd0X2ZiICpvdmVybGF5X2ZiczsKPiArCWlndF9jcmNfdCAqY3JjOwo+ ICsJaWd0X2NyY190ICpleHBlY3RlZF9jcmM7Cj4gKwlzdHJ1Y3QgY2hhbWVsaXVtX2ZiX2NyY19h c3luY19kYXRhICpmYl9jcmM7Cj4gKwl1bnNpZ25lZCBpbnQgb3ZlcmxheV9wbGFuZXNfbWF4ID0g MDsKPiArCXVuc2lnbmVkIGludCBvdmVybGF5X3BsYW5lc19jb3VudDsKPiArCWNhaXJvX3N1cmZh Y2VfdCAqcmVzdWx0X3N1cmZhY2U7Cj4gKwlpbnQgY2FwdHVyZWRfZnJhbWVfY291bnQ7Cj4gKwli b29sIGFsbG93X3NjYWxpbmc7Cj4gKwlib29sIGFsbG93X3l1djsKPiArCXVuc2lnbmVkIGludCBp Owo+ICsJdW5zaWduZWQgaW50IGZiX2lkOwo+ICsKPiArCXN3aXRjaCAoY2hlY2spIHsKPiArCWNh c2UgQ0hBTUVMSVVNX0NIRUNLX0NSQzoKPiArCQlhbGxvd19zY2FsaW5nID0gZmFsc2U7Cj4gKwkJ YWxsb3dfeXV2ID0gZmFsc2U7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIENIQU1FTElVTV9DSEVDS19D SEVDS0VSQk9BUkQ6Cj4gKwkJYWxsb3dfc2NhbGluZyA9IHRydWU7Cj4gKwkJYWxsb3dfeXV2ID0g dHJ1ZTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydChmYWxzZSk7Cj4g Kwl9Cj4gKwo+ICsJc3JhbmQodGltZShOVUxMKSk7Cj4gKwo+ICsJcmVzZXRfc3RhdGUoZGF0YSwg cG9ydCk7Cj4gKwo+ICsJLyogRmluZCB0aGUgY29ubmVjdG9yIGFuZCBwaXBlLiAqLwo+ICsJb3V0 cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCk7Cj4gKwo+ICsJbW9kZSA9IGlndF9vdXRw dXRfZ2V0X21vZGUob3V0cHV0KTsKPiArCj4gKwkvKiBHZXQgYSBmcmFtZWJ1ZmZlciBmb3IgdGhl IHByaW1hcnkgcGxhbmUuICovCj4gKwlwcmltYXJ5X3BsYW5lID0gaWd0X291dHB1dF9nZXRfcGxh bmVfdHlwZShvdXRwdXQsCj4gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7Cj4gKwlpZ3RfYXNzZXJ0 KHByaW1hcnlfcGxhbmUpOwo+ICsKPiArCWZiX2lkID0gY2hhbWVsaXVtX2dldF9wYXR0ZXJuX2Zi KGRhdGEsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJCQkgRFJNX0ZPUk1B VF9YUkdCODg4OCwgNjQsCj4gJnByaW1hcnlfZmIpOwo+ICsJaWd0X2Fzc2VydChmYl9pZCA+IDAp Owo+ICsKPiArCS8qIEdldCBhIGZyYW1lYnVmZmVyIGZvciB0aGUgY2Fpcm8gY29tcG9zaXRpb24g cmVzdWx0LiAqLwo+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+ aGRpc3BsYXksCj4gKwkJCSAgICAgIG1vZGUtPnZkaXNwbGF5LCBEUk1fRk9STUFUX1hSR0I4ODg4 LAo+ICsJCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLCAmcmVzdWx0X2ZiKTsKPiAr CWlndF9hc3NlcnQoZmJfaWQgPiAwKTsKPiArCj4gKwlyZXN1bHRfc3VyZmFjZSA9IGlndF9nZXRf Y2Fpcm9fc3VyZmFjZShkYXRhLT5kcm1fZmQsICZyZXN1bHRfZmIpOwo+ICsKPiArCS8qIFBhaW50 IHRoZSBwcmltYXJ5IGZyYW1lYnVmZmVyIG9uIHRoZSByZXN1bHQgc3VyZmFjZS4gKi8KPiArCWJs aXRfcGxhbmVfY2Fpcm8oZGF0YSwgcmVzdWx0X3N1cmZhY2UsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsCj4gKwkJCSAmcHJpbWFyeV9mYik7Cj4gKwo+ICsJLyogQ29uZmlndXJlIHRoZSBwcmltYXJ5 IHBsYW5lLiAqLwo+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5X3BsYW5lLCAmcHJpbWFyeV9m Yik7Cj4gKwo+ICsJb3ZlcmxheV9wbGFuZXNfbWF4ID0KPiArCQlpZ3Rfb3V0cHV0X2NvdW50X3Bs YW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9PVkVSTEFZKTsKPiArCj4gKwkvKiBMaW1p dCB0aGUgbnVtYmVyIG9mIHBsYW5lcyB0byBhIHJlYXNvbmFibGUgc2NlbmUuICovCj4gKwlpZiAo b3ZlcmxheV9wbGFuZXNfbWF4ID4gNCkKPiArCQlvdmVybGF5X3BsYW5lc19tYXggPSA0OwoKV2h5 IG5vdCBqdXN0IHVzZSBtYXgoKSBoZXJlPwoKPiArCj4gKwlvdmVybGF5X3BsYW5lc19jb3VudCA9 IChyYW5kKCkgJSBvdmVybGF5X3BsYW5lc19tYXgpICsgMTsKPiArCWlndF9kZWJ1ZygiVXNpbmcg JWQgb3ZlcmxheSBwbGFuZXNcbiIsIG92ZXJsYXlfcGxhbmVzX2NvdW50KTsKPiArCj4gKwlvdmVy bGF5X2ZicyA9IGNhbGxvYyhzaXplb2Yoc3RydWN0IGlndF9mYiksIG92ZXJsYXlfcGxhbmVzX2Nv dW50KTsKaWd0X2Fzc2VydChvdmVybGF5X2Zicyk7CgpPdGhlciB0aGVuIHRoYXQsIGxvb2tzIHJl YWxseSBnb29kIQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBvdmVybGF5X3BsYW5lc19jb3VudDsg aSsrKSB7Cj4gKwkJc3RydWN0IGlndF9mYiAqb3ZlcmxheV9mYiA9ICZvdmVybGF5X2Zic1tpXTsK PiArCQlpZ3RfcGxhbmVfdCAqcGxhbmUgPQo+ICsJCQlpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBl X2luZGV4KG91dHB1dCwKPiArCQkJCQkJCURSTV9QTEFORV9UWVBFX09WRVJMQVkKPiAsCj4gKwkJ CQkJCQlpKTsKPiArCQlpZ3RfYXNzZXJ0KHBsYW5lKTsKPiArCj4gKwkJcHJlcGFyZV9yYW5kb21p emVkX3BsYW5lKGRhdGEsIG1vZGUsIHBsYW5lLCBvdmVybGF5X2ZiLCBpLAo+ICsJCQkJCSByZXN1 bHRfc3VyZmFjZSwgYWxsb3dfc2NhbGluZywKPiArCQkJCQkgYWxsb3dfeXV2KTsKPiArCX0KPiAr Cj4gKwljYWlyb19zdXJmYWNlX2Rlc3Ryb3kocmVzdWx0X3N1cmZhY2UpOwo+ICsKPiArCWlmIChj aGVjayA9PSBDSEFNRUxJVU1fQ0hFQ0tfQ1JDKQo+ICsJCWZiX2NyYyA9IGNoYW1lbGl1bV9jYWxj dWxhdGVfZmJfY3JjX2FzeW5jX3N0YXJ0KGRhdGEtPmRybV9mZCwKPiArCQkJCQkJCQkmcmVzdWx0 X2ZiKTsKPiArCj4gKwlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRf QVRPTUlDKTsKPiArCj4gKwlpZiAoY2hlY2sgPT0gQ0hBTUVMSVVNX0NIRUNLX0NSQykgewo+ICsJ CWNoYW1lbGl1bV9jYXB0dXJlKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgMCwgMCwgMCwgMCwgMSk7 Cj4gKwkJY3JjID0gY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfY3JjcyhkYXRhLT5jaGFtZWxpdW0s Cj4gKwkJCQkJCSAgICZjYXB0dXJlZF9mcmFtZV9jb3VudCk7Cj4gKwo+ICsJCWlndF9hc3NlcnQo Y2FwdHVyZWRfZnJhbWVfY291bnQgPT0gMSk7Cj4gKwo+ICsJCWV4cGVjdGVkX2NyYyA9Cj4gY2hh bWVsaXVtX2NhbGN1bGF0ZV9mYl9jcmNfYXN5bmNfZmluaXNoKGZiX2NyYyk7Cj4gKwo+ICsJCWNo YW1lbGl1bV9hc3NlcnRfY3JjX2VxX29yX2R1bXAoZGF0YS0+Y2hhbWVsaXVtLAo+ICsJCQkJCQll eHBlY3RlZF9jcmMsIGNyYywKPiArCQkJCQkJJnJlc3VsdF9mYiwgMCk7Cj4gKwo+ICsJCWZyZWUo ZXhwZWN0ZWRfY3JjKTsKPiArCQlmcmVlKGNyYyk7Cj4gKwl9IGVsc2UgaWYgKGNoZWNrID09IENI QU1FTElVTV9DSEVDS19DSEVDS0VSQk9BUkQpIHsKPiArCQlzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1l X2R1bXAgKmR1bXA7Cj4gKwo+ICsJCWR1bXAgPSBjaGFtZWxpdW1fcG9ydF9kdW1wX3BpeGVscyhk YXRhLT5jaGFtZWxpdW0sIHBvcnQsIDAsIDAsCj4gKwkJCQkJCSAgMCwgMCk7Cj4gKwkJY2hhbWVs aXVtX2Fzc2VydF9mcmFtZV9tYXRjaF9vcl9kdW1wKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwKPiAr CQkJCQkJICAgICBkdW1wLCAmcmVzdWx0X2ZiLCBjaGVjayk7Cj4gKwkJY2hhbWVsaXVtX2Rlc3Ry b3lfZnJhbWVfZHVtcChkdW1wKTsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgb3Zlcmxh eV9wbGFuZXNfY291bnQ7IGkrKykgewo+ICsJCXN0cnVjdCBpZ3RfZmIgKm92ZXJsYXlfZmIgPSAm b3ZlcmxheV9mYnNbaV07Cj4gKwkJaWd0X3BsYW5lX3QgKnBsYW5lOwo+ICsKPiArCQlwbGFuZSA9 IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGVfaW5kZXgob3V0cHV0LAo+ICsJCQkJCQkJRFJNX1BM QU5FX1RZUEVfT1ZFUkxBWQo+ICwKPiArCQkJCQkJCWkpOwo+ICsJCWlndF9hc3NlcnQocGxhbmUp Owo+ICsKPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgb3ZlcmxheV9mYik7Cj4gKwl9 Cj4gKwo+ICsJZnJlZShvdmVybGF5X2Zicyk7Cj4gKwo+ICsJaWd0X3JlbW92ZV9mYihkYXRhLT5k cm1fZmQsICZwcmltYXJ5X2ZiKTsKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmcmVz dWx0X2ZiKTsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQKPiAgdGVzdF9ocGRfd2l0aG91dF9kZGMo ZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQpCj4gIHsKPiBAQCAtOTc2 LDYgKzE0MTQsMTAgQEAgaWd0X21haW4KPiAgCQkJdGVzdF9kaXNwbGF5X29uZV9tb2RlKCZkYXRh LCBwb3J0LAo+IERSTV9GT1JNQVRfWFJHQjE1NTUsCj4gIAkJCQkJICAgICAgQ0hBTUVMSVVNX0NI RUNLX0NSQywgMSk7Cj4gIAo+ICsJCWNvbm5lY3Rvcl9zdWJ0ZXN0KCJoZG1pLWNyYy1wbGFuZXMt cmFuZG9tIiwgSERNSUEpCj4gKwkJCXRlc3RfZGlzcGxheV9wbGFuZXNfcmFuZG9tKCZkYXRhLCBw b3J0LAo+ICsJCQkJCQkgICBDSEFNRUxJVU1fQ0hFQ0tfQ1JDKTsKPiArCj4gIAkJY29ubmVjdG9y X3N1YnRlc3QoImhkbWktY21wLW52MTIiLCBIRE1JQSkKPiAgCQkJdGVzdF9kaXNwbGF5X29uZV9t b2RlKCZkYXRhLCBwb3J0LCBEUk1fRk9STUFUX05WMTIsCj4gIAkJCQkJICAgICAgQ0hBTUVMSVVN X0NIRUNLX0NIRUNLRVJCT0FSRCwKPiAxKTsKPiBAQCAtMTAwOCw2ICsxNDUwLDEwIEBAIGlndF9t YWluCj4gIAkJCXRlc3RfZGlzcGxheV9vbmVfbW9kZSgmZGF0YSwgcG9ydCwgRFJNX0ZPUk1BVF9Z VlU0MjIsCj4gIAkJCQkJICAgICAgQ0hBTUVMSVVNX0NIRUNLX0NIRUNLRVJCT0FSRCwKPiAxKTsK PiAgCj4gKwkJY29ubmVjdG9yX3N1YnRlc3QoImhkbWktY21wLXBsYW5lcy1yYW5kb20iLCBIRE1J QSkKPiArCQkJdGVzdF9kaXNwbGF5X3BsYW5lc19yYW5kb20oJmRhdGEsIHBvcnQsCj4gKwkJCQkJ CSAgIENIQU1FTElVTV9DSEVDS19DSEVDS0VSQk9BUgo+IEQpOwo+ICsKPiAgCQljb25uZWN0b3Jf c3VidGVzdCgiaGRtaS1mcmFtZS1kdW1wIiwgSERNSUEpCj4gIAkJCXRlc3RfZGlzcGxheV9mcmFt ZV9kdW1wKCZkYXRhLCBwb3J0KTsKPiAgCX0KLS0gCkNoZWVycywKCUx5dWRlIFBhdWwKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGlu ZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=