From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 21682893D0 for ; Fri, 10 May 2019 08:53:56 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id w37so4446099edw.4 for ; Fri, 10 May 2019 01:53:56 -0700 (PDT) Date: Fri, 10 May 2019 10:53:51 +0200 From: Daniel Vetter Message-ID: <20190510085351.GJ17751@phenom.ffwll.local> References: <20190508162906.20808-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190508162906.20808-1-ville.syrjala@linux.intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v3] tests/kms_big_fb: Make sure huge fbs work correctly 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: Ville Syrjala Cc: igt-dev@lists.freedesktop.org List-ID: T24gV2VkLCBNYXkgMDgsIDIwMTkgYXQgMDc6Mjk6MDZQTSArMDMwMCwgVmlsbGUgU3lyamFsYSB3 cm90ZToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+IAo+IEFkZCB2YXJpb3VzIHRlc3RzIHRvIGV4Y2VyY2lzZSBodWdlIGZyYW1lYnVmZmVy cy4gRmlyc3Qgc29tZSBiYXNpYwo+IHNhbml0eSBjaGVja3MgdGhhdCB0aGUga2VybmVsIGFjY2Vw dHMvcmVqZWN0cyBnb29kL2JhZCBhZGRmYjIgaW9jdGxzLAo+IGFuZCBmaW5hbGx5IGFjdHVhbCBz Y2Fub3V0IHRlc3RzIHRvIG1ha2Ugc3VyZSB3ZSBzY2FuIG91dCB0aGUgY29ycmVjdAo+IHRoaW5n IHdoZW4gcGFubmluZyBhcm91bmQgaW5zaWRlIGxhcmdlIGZyYW1lYnVmZmVycy4KPiAKPiBUaGUg aW1wbGVtZW50YXRpb24gaXMgaTkxNSBzcGVjaWZpYyBmb3Igbm93IHNpbmNlIEkgY2hvc2UgdG8g dXNlCj4gcmVuZGVyY29weS9ibGl0dGVyIHdoZW4gZ2VuZXJhdGluZyB0aGUgZnJhbWVidWZmZXIg Y29udGVudHMuIFVzaW5nCj4gdGhlIG5vcm1hbCBjYWlybyBzdHVmZiB3YXMganVzdCB0b28gc2xv dyB3aGVuIGRlYWxpbmcgd2l0aCAxR2lCKwo+IGZyYW1lYnVmZmVycy4gSXQgc2hvdWxkbid0IGJl IHRvbyBoYXJkIHRvIHBsdWcgaW4gc29tZSBvdGhlciBtZWNoYW5pc21zCj4gaWYgc29tZW9uZSBl bHNlIHdhbnRzIHRvIHJldXNlIHRoaXMgdGVzdC4KPiAKPiB2MjogQWRkIGlndF9yZXF1aXJlKGZv cm1hdCttb2QpIGZvciB0aGUgYWRkZmIvb3ZlcmZsb3cgdGVzdHMKPiAgICAgVW5zZXQgcGxhbmUg ZmIgYWZ0ZXIgVEVTVF9PTkxZIGZhaWwKPiAgICAgTGltaXQgbWF4IGZiIHRvIGF0IG1vc3QgMS8y IFJBTSBvciBHUFUgYWRkcmVzcyBzcGFjZQo+ICAgICBUd2VhayBjb29yZHMgdG8gYXZvaWQgZmFp bHMgd2l0aCA2NGJwcCBsaW5lYXIgd2l0aCA0ayBzY3JlZW4KPiAgICAgTWFrZSBjb29yZHMgZXZl biBmb3IgOTAvMjcwIHJvdGF0ZWQgMTZicHAKPiAgICAgU3RvcmUgYnBwIGFzIHVpbnQ4X3QgaW5z dGVhZCBvZiB3YXN0aW5nIGFuIGVudGlyZSBjaGFyKgo+IHYzOiBBZGQgYmxpdHRlciBwYXRoIGZv ciBnZW4zIChyZW5kZXIgZW5naW5lIGlzIG5vdCBjYXBhYmxlIG9mCj4gICAgIGhhbmRsaW5nIGJp ZyBmYnMpLgo+ICAgICBTZXQgZmVuY2UgdGlsaW5nIG9uIGdlbjIvMyBpbiByYXcgYWRkZmIgdGVz dHMuCj4gICAgIERlYWwgd2l0aCB3ZWFrIG1heCBmZW5jZSBzdHJpZGUgb24gZ2VuMy4KPiAgICAg RG9uJ3QgdHJ5IHRvIHVzZSByb3RhdGlvbiB3aGVuIHRoZSBwcm9wIGlzbid0IHByZXNlbnQuCj4g ICAgIFNraXAgOTAvMjcwIHRlc3QgZm9yIGdlbjQgKG5vIGF0b21pYyBvbiB0aG9zZSB5ZXQgc28g d2UKPiAgICAgY2FuJ3QgbmVhdGx5IGNoZWNrIHdoYXQncyBzdXBwb3J0ZWQpLgo+ICAgICBLZXJu ZWwgcmVzdHJpY3RzIHNjYW5vdXQgdG8gbWFwcGFibGUgcG9ydGlvbiBvZiBnZ3R0IG9uCj4gICAg IGdtY2ggcGxhdGZvcm1zLCBzbyBjaGVjayBpdHMgc2l6ZSBhcyB3ZWxsCj4gICAgIFVzZSB0aGUg Y29ycmVjdCBmYiBmb3IgdGhlIGxlZ2FjeSBzZXRjcnRjCj4gCj4gU2lnbmVkLW9mZi1ieTogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiAgdGVz dHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gIHRlc3RzL2ttc19iaWdfZmIuYyAgICAgfCA2 NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgdGVzdHMvbWVz b24uYnVpbGQgICAgICB8ICAgMSArCj4gIDMgZmlsZXMgY2hhbmdlZCwgNjY4IGluc2VydGlvbnMo KykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19iaWdfZmIuYwo+IAo+IGRpZmYgLS1n aXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IGlu ZGV4IDdmOTIxZjZjNTk4OC4uMmQ1YzkyOWUzMmZjIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTI3LDYgKzI3 LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4gIAlrbXNfYXRvbWljX2ludGVycnVwdGlibGUgXAo+ICAJ a21zX2F0b21pY190cmFuc2l0aW9uIFwKPiAgCWttc19hdmFpbGFibGVfbW9kZXNfY3JjIFwKPiAr CWttc19iaWdfZmIgXAo+ICAJa21zX2J1c3kgXAo+ICAJa21zX2NjcyBcCj4gIAlrbXNfY29sb3Ig XAo+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfYmlnX2ZiLmMgYi90ZXN0cy9rbXNfYmlnX2ZiLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTIzNTk1NGUyZDhj Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2ttc19iaWdfZmIuYwo+IEBAIC0wLDAgKzEs NjY2IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4g KyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S Cj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H Uwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImlndC5oIgo+ ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiArI2luY2x1ZGUg PHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArCj4gK0lHVF9URVNUX0RFU0NSSVBU SU9OKCJUZXN0IGJpZyBmcmFtZWJ1ZmZlcnMiKTsKPiArCj4gK3R5cGVkZWYgc3RydWN0IHsKPiAr CWludCBkcm1fZmQ7Cj4gKwl1aW50MzJfdCBkZXZpZDsKPiArCWlndF9kaXNwbGF5X3QgZGlzcGxh eTsKPiArCWVudW0gcGlwZSBwaXBlOwo+ICsJaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4gKwlpZ3Rf cGxhbmVfdCAqcGxhbmU7Cj4gKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7Cj4gKwlzdHJ1Y3Qg aWd0X2ZiIHNtYWxsX2ZiLCBiaWdfZmI7Cj4gKwl1aW50MzJfdCBmb3JtYXQ7Cj4gKwl1aW50NjRf dCBtb2RpZmllcjsKPiArCWludCB3aWR0aCwgaGVpZ2h0Owo+ICsJaWd0X3JvdGF0aW9uX3Qgcm90 YXRpb247Cj4gKwlpbnQgbWF4X2ZiX3dpZHRoLCBtYXhfZmJfaGVpZ2h0Owo+ICsJdWludDY0X3Qg cmFtX3NpemUsIGFwZXJfc2l6ZSwgbWFwcGFibGVfc2l6ZTsKPiArCWlndF9yZW5kZXJfY29weWZ1 bmNfdCByZW5kZXJfY29weTsKPiArCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKPiArCXN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Cj4gK30gZGF0YV90Owo+ICsKPiArc3RhdGljIHZv aWQgaW5pdF9idWYoZGF0YV90ICpkYXRhLAo+ICsJCSAgICAgc3RydWN0IGlndF9idWYgKmJ1ZiwK PiArCQkgICAgIGNvbnN0IHN0cnVjdCBpZ3RfZmIgKmZiLAo+ICsJCSAgICAgY29uc3QgY2hhciAq bmFtZSkKPiArewo+ICsJaWd0X2Fzc2VydF9lcShmYi0+b2Zmc2V0c1swXSwgMCk7Cj4gKwo+ICsJ YnVmLT5ibyA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZHJt X2ZkLAo+ICsJCQkJCSAgbmFtZSwgZmItPmdlbV9oYW5kbGUpOwo+ICsJYnVmLT50aWxpbmcgPSBp Z3RfZmJfbW9kX3RvX3RpbGluZyhmYi0+bW9kaWZpZXIpOwo+ICsJYnVmLT5zdHJpZGUgPSBmYi0+ c3RyaWRlc1swXTsKPiArCWJ1Zi0+YnBwID0gZmItPnBsYW5lX2JwcFswXTsKPiArCWJ1Zi0+c2l6 ZSA9IGZiLT5zaXplOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmaW5pX2J1ZihzdHJ1Y3QgaWd0 X2J1ZiAqYnVmKQo+ICt7Cj4gKwlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYnVmLT5ibyk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGNvcHlfcGF0dGVybihkYXRhX3QgKmRhdGEsCj4gKwkJCSBz dHJ1Y3QgaWd0X2ZiICpkc3RfZmIsIGludCBkeCwgaW50IGR5LAo+ICsJCQkgc3RydWN0IGlndF9m YiAqc3JjX2ZiLCBpbnQgc3gsIGludCBzeSwKPiArCQkJIGludCB3LCBpbnQgaCkKPiArewo+ICsJ c3RydWN0IGlndF9idWYgc3JjID0ge30sIGRzdCA9IHt9Owo+ICsKPiArCWluaXRfYnVmKGRhdGEs ICZzcmMsIHNyY19mYiwgImJpZyBmYiBzcmMiKTsKPiArCWluaXRfYnVmKGRhdGEsICZkc3QsIGRz dF9mYiwgImJpZyBmYiBkc3QiKTsKPiArCj4gKwlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQs IGRzdF9mYi0+Z2VtX2hhbmRsZSwKPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkx NV9HRU1fRE9NQUlOX0dUVCk7Cj4gKwlnZW1fc2V0X2RvbWFpbihkYXRhLT5kcm1fZmQsIHNyY19m Yi0+Z2VtX2hhbmRsZSwKPiArCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Cj4gKwoK TWF5YmUgYSBjb21tZW50IGhlcmUgdGhhdCB3ZSByZWx5IG9uIHRoZSBrZXJuZWwgbm90IGJ1bXBp bmcgdGhlIGZiIGxpbWl0cwpwYXN0IHdoYXQgd2UgY2FuIHJlbmRlciBpbnRvPwoKPiArCWlmIChk YXRhLT5yZW5kZXJfY29weSkgewo+ICsJCWRhdGEtPnJlbmRlcl9jb3B5KGRhdGEtPmJhdGNoLCBO VUxMLCAmc3JjLCBzeCwgc3ksIHcsIGgsICZkc3QsIGR4LCBkeSk7Cj4gKwl9IGVsc2Ugewo+ICsJ CXcgPSBtaW4odywgc3JjX2ZiLT53aWR0aCAtIHN4KTsKPiArCQl3ID0gbWluKHcsIGRzdF9mYi0+ d2lkdGggLSBkeCk7Cj4gKwo+ICsJCWggPSBtaW4oaCwgc3JjX2ZiLT5oZWlnaHQgLSBzeSk7Cj4g KwkJaCA9IG1pbihoLCBkc3RfZmItPmhlaWdodCAtIGR5KTsKPiArCj4gKwkJaW50ZWxfYmx0X2Nv cHkoZGF0YS0+YmF0Y2gsIHNyYy5ibywgc3gsIHN5LCBzcmMuc3RyaWRlLAo+ICsJCQkgICAgICAg ZHN0LmJvLCBkeCwgZHksIGRzdC5zdHJpZGUsIHcsIGgsIGRzdC5icHApOwo+ICsJfQo+ICsKPiAr CWZpbmlfYnVmKCZkc3QpOwo+ICsJZmluaV9idWYoJnNyYyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGdlbmVyYXRlX3BhdHRlcm4oZGF0YV90ICpkYXRhLAo+ICsJCQkgICAgIHN0cnVjdCBpZ3Rf ZmIgKmZiLAo+ICsJCQkgICAgIGludCB3LCBpbnQgaCkKPiArewo+ICsJc3RydWN0IGlndF9mYiBw YXRfZmI7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwgdywgaCwK PiArCQkJICAgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5tb2RpZmllciwKPiArCQkJICAgICAgJnBh dF9mYik7Cj4gKwo+ICsJZm9yIChpbnQgeSA9IDA7IHkgPCBmYi0+aGVpZ2h0OyB5ICs9IGgpIHsK PiArCQlmb3IgKGludCB4ID0gMDsgeCA8IGZiLT53aWR0aDsgeCArPSB3KSB7Cj4gKwkJCWNvcHlf cGF0dGVybihkYXRhLCBmYiwgeCwgeSwKPiArCQkJCSAgICAgJnBhdF9mYiwgMCwgMCwKPiArCQkJ CSAgICAgcGF0X2ZiLndpZHRoLCBwYXRfZmIuaGVpZ2h0KTsKPiArCQkJdysrOwo+ICsJCQloKys7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmcGF0X2Zi KTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgc2l6ZV9vayhkYXRhX3QgKmRhdGEsIHVpbnQ2NF90 IHNpemUpCj4gK3sKPiArCS8qCj4gKwkgKiBUaGUga2VybmVsIGxpbWl0cyBzY2Fub3V0IHRvIHRo ZQo+ICsJICogbWFwcGFibGUgcG9ydGlvbiBvZiBnZ3R0IG9uIGdtY2ggcGxhdGZvcm1zLgo+ICsJ ICovCj4gKwlpZiAoKGludGVsX2dlbihkYXRhLT5kZXZpZCkgPCA1IHx8Cj4gKwkgICAgIElTX1ZB TExFWVZJRVcoZGF0YS0+ZGV2aWQpIHx8Cj4gKwkgICAgIElTX0NIRVJSWVZJRVcoZGF0YS0+ZGV2 aWQpKSAmJgo+ICsJICAgIHNpemUgPiBkYXRhLT5tYXBwYWJsZV9zaXplIC8gMikKPiArCQlyZXR1 cm4gZmFsc2U7Cj4gKwo+ICsJLyoKPiArCSAqIExpbWl0IHRoZSBiaWcgZmIgc2l6ZSB0byBhdCBt b3N0IGhhbGYgdGhlIFJBTSBvciBoYWxmCj4gKwkgKiB0aGUgYXBlcnR1cmUgc2l6ZS4gQ291bGQg Z28gYSBiaXQgaGlnaGVyIEkgc3VwcG9zZSBzaW5jZQo+ICsJICogd2Ugc2hvdWxkbid0IG5lZWQg bW9yZSB0aGFuIG9uZSBiaWcgZmIgYXQgYSB0aW1lLgo+ICsJICovCj4gKwlpZiAoc2l6ZSA+IGRh dGEtPnJhbV9zaXplIC8gMiB8fCBzaXplID4gZGF0YS0+YXBlcl9zaXplIC8gMikKPiArCQlyZXR1 cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gKwo+ICtzdGF0aWMgdm9p ZCBtYXhfZmJfc2l6ZShkYXRhX3QgKmRhdGEsIGludCAqd2lkdGgsIGludCAqaGVpZ2h0LAo+ICsJ CQl1aW50MzJfdCBmb3JtYXQsIHVpbnQ2NF90IG1vZGlmaWVyKQo+ICt7Cj4gKwl1bnNpZ25lZCBp bnQgc3RyaWRlOwo+ICsJdWludDY0X3Qgc2l6ZTsKPiArCWludCBpID0gMDsKPiArCj4gKwkqd2lk dGggPSBkYXRhLT5tYXhfZmJfd2lkdGg7Cj4gKwkqaGVpZ2h0ID0gZGF0YS0+bWF4X2ZiX2hlaWdo dDsKPiArCj4gKwkvKiBtYXggZmVuY2Ugc3RyaWRlIGlzIG9ubHkgOGsgYnl0ZXMgb24gZ2VuMyAq Lwo+ICsJaWYgKGludGVsX2dlbihkYXRhLT5kZXZpZCkgPCA0ICYmCj4gKwkgICAgZm9ybWF0ID09 IERSTV9GT1JNQVRfWFJHQjg4ODgpCj4gKwkJKndpZHRoID0gbWluKCp3aWR0aCwgODE5MiAvIDQp Owo+ICsKPiArCWlndF9jYWxjX2ZiX3NpemUoZGF0YS0+ZHJtX2ZkLCAqd2lkdGgsICpoZWlnaHQs Cj4gKwkJCSBmb3JtYXQsIG1vZGlmaWVyLCAmc2l6ZSwgJnN0cmlkZSk7Cj4gKwo+ICsJd2hpbGUg KCFzaXplX29rKGRhdGEsIHNpemUpKSB7Cj4gKwkJaWYgKGkrKyAmIDEpCj4gKwkJCSp3aWR0aCA+ Pj0gMTsKPiArCQllbHNlCj4gKwkJCSpoZWlnaHQgPj49IDE7Cj4gKwo+ICsJCWlndF9jYWxjX2Zi X3NpemUoZGF0YS0+ZHJtX2ZkLCAqd2lkdGgsICpoZWlnaHQsCj4gKwkJCQkgZm9ybWF0LCBtb2Rp ZmllciwgJnNpemUsICZzdHJpZGUpOwo+ICsJfQo+ICsKPiArCWlndF9pbmZvKCJNYXggdXNhYmxl IGZyYW1lYnVmZmVyIHNpemUgZm9yIGZvcm1hdCAiSUdUX0ZPUk1BVF9GTVQiIC8gbW9kaWZpZXIg MHglIlBSSXg2NCI6ICVkeCVkXG4iLAo+ICsJCSBJR1RfRk9STUFUX0FSR1MoZm9ybWF0KSwgbW9k aWZpZXIsCj4gKwkJICp3aWR0aCwgKmhlaWdodCk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHRl c3RfcGxhbmUoZGF0YV90ICpkYXRhKQo+ICt7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmUgPSBkYXRh LT5wbGFuZTsKPiArCXN0cnVjdCBpZ3RfZmIgKnNtYWxsX2ZiID0gJmRhdGEtPnNtYWxsX2ZiOwo+ ICsJc3RydWN0IGlndF9mYiAqYmlnX2ZiID0gJmRhdGEtPmJpZ19mYjsKPiArCWludCB3ID0gYmln X2ZiLT53aWR0aCAtIHNtYWxsX2ZiLT53aWR0aDsKPiArCWludCBoID0gYmlnX2ZiLT5oZWlnaHQg LSBzbWFsbF9mYi0+aGVpZ2h0Owo+ICsJc3RydWN0IHsKPiArCQlpbnQgeCwgeTsKPiArCX0gY29v cmRzW10gPSB7Cj4gKwkJLyogYnVuY2ggb2YgY29vcmRpbmF0ZXMgcHVsbGVkIG91dCBvZiB0aGlu IGFpciAqLwo+ICsJCXsgMCwgMCwgfSwKPiArCQl7IHcgKiA0IC8gNywgaCAvIDUsIH0sCj4gKwkJ eyB3ICogMyAvIDcsIGggLyAzLCB9LAo+ICsJCXsgdyAvIDIsIGggLyAyLCB9LAo+ICsJCXsgdyAv IDMsIGggKiAzIC8gNCwgfSwKPiArCQl7IHcsIGgsIH0sCj4gKwl9Owo+ICsKPiArCWlmICghaWd0 X3BsYW5lX2hhc19mb3JtYXRfbW9kKHBsYW5lLCBkYXRhLT5mb3JtYXQsIGRhdGEtPm1vZGlmaWVy KSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYgKGRhdGEtPnJvdGF0aW9uICE9IElHVF9S T1RBVElPTl8wICYmCj4gKwkgICAgIWlndF9wbGFuZV9oYXNfcHJvcChwbGFuZSwgSUdUX1BMQU5F X1JPVEFUSU9OKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJLyogRklYTUUgbmVlZCBhdG9t aWMgb24gaTk2NS9nNHggKi8KPiArCWlmIChkYXRhLT5yb3RhdGlvbiAhPSBJR1RfUk9UQVRJT05f MCAmJgo+ICsJICAgIGRhdGEtPnJvdGF0aW9uICE9IElHVF9ST1RBVElPTl8xODAgJiYKPiArCSAg ICAhZGF0YS0+ZGlzcGxheS5pc19hdG9taWMpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlm IChpZ3RfcGxhbmVfaGFzX3Byb3AocGxhbmUsIElHVF9QTEFORV9ST1RBVElPTikpCj4gKwkJaWd0 X3BsYW5lX3NldF9yb3RhdGlvbihwbGFuZSwgZGF0YS0+cm90YXRpb24pOwo+ICsJaWd0X3BsYW5l X3NldF9wb3NpdGlvbihwbGFuZSwgMCwgMCk7Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGNvb3Jkcyk7IGkrKykgewo+ICsJCWlndF9jcmNfdCBzbWFsbF9jcmMsIGJpZ19j cmM7Cj4gKwkJaW50IHggPSBjb29yZHNbaV0ueDsKPiArCQlpbnQgeSA9IGNvb3Jkc1tpXS55Owo+ ICsKPiArCQkvKiBIYXJkd2FyZSBsaW1pdGF0aW9uICovCj4gKwkJaWYgKGRhdGEtPmZvcm1hdCA9 PSBEUk1fRk9STUFUX1JHQjU2NSAmJgo+ICsJCSAgICAoZGF0YS0+cm90YXRpb24gPT0gSUdUX1JP VEFUSU9OXzkwIHx8Cj4gKwkJICAgICBkYXRhLT5yb3RhdGlvbiA9PSBJR1RfUk9UQVRJT05fMjcw KSkgewo+ICsJCQl4ICY9IH4xOwo+ICsJCQl5ICY9IH4xOwo+ICsJCX0KPiArCj4gKwkJLyoKPiAr CQkgKiBNYWtlIGEgMToxIGNvcHkgb2YgdGhlIGRlc2lyZWQgcGFydCBvZiB0aGUgYmlnIGZiCj4g KwkJICogcmF0aGVyIHRoYW4gdHJ5IHRvIHJlbmRlciB0aGUgc2FtZSBwYXR0ZXJuICh0cmFuc2xh dGVkCj4gKwkJICogYWNjb3JkaW5seSkgYWdhaW4gdmlhIGNhaXJvLiBTb21ldGhpbmcgaW4gY2Fp cm8ncwo+ICsJCSAqIHJlbmRlcmluZyBwaXBlbGluZSBpbnRyb2R1Y2VzIHNsaWdodCBkaWZmZXJl bmNlcyBpbnRvCj4gKwkJICogdGhlIHJlc3VsdCBpZiB3ZSB0cnkgdGhhdCwgYW5kIHNvIHRoZSBj cmMgd2lsbCBub3QgbWF0Y2guCj4gKwkJICovCj4gKwkJY29weV9wYXR0ZXJuKGRhdGEsIHNtYWxs X2ZiLCAwLCAwLCBiaWdfZmIsIHgsIHksCj4gKwkJCSAgICAgc21hbGxfZmItPndpZHRoLCBzbWFs bF9mYi0+aGVpZ2h0KTsKPiArCj4gKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgc21hbGxfZmIp Owo+ICsJCWlndF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgZGF0YS0+d2lkdGgsIGRhdGEtPmhlaWdo dCk7Cj4gKwo+ICsJCS8qCj4gKwkJICogVHJ5IHRvIGNoZWNrIHRoYXQgdGhlIHJvdGF0aW9uK2Zv cm1hdCttb2RpZmllcgo+ICsJCSAqIGNvbWJvIGlzIHN1cHBvcnRlZC4KPiArCQkgKi8KPiArCQlp ZiAoaSA9PSAwICYmIGRhdGEtPmRpc3BsYXkuaXNfYXRvbWljICYmCj4gKwkJICAgIGlndF9kaXNw bGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LAo+ICsJCQkJCQkgIERSTV9NT0RF X0FUT01JQ19URVNUX09OTFksCj4gKwkJCQkJCSAgTlVMTCkgIT0gMCkgewo+ICsJCQlpZiAoaWd0 X3BsYW5lX2hhc19wcm9wKHBsYW5lLCBJR1RfUExBTkVfUk9UQVRJT04pKQo+ICsJCQkJaWd0X3Bs YW5lX3NldF9yb3RhdGlvbihwbGFuZSwgSUdUX1JPVEFUSU9OXzApOwo+ICsJCQlpZ3RfcGxhbmVf c2V0X2ZiKHBsYW5lLCBOVUxMKTsKPiArCQkJaWd0X3NraXAoInVuc3VwcG9ydGVkIHBsYW5lIGNv bmZpZ3VyYXRpb25cbiIpOwoKVGhpcyBpcyBraW5kYSB1bmNvb2wgaWYgd2UgaGF2ZSBhIHBsYW5l IGxhdGVyIG9uIHRoYXQgcHJvdm9rZXMgYSBza2lwLCBidXQKd2UndmUgYWxyZWFkeSBydW4gc29t ZSB0ZXN0cy4gSXQncyBhIGdhcCBpbiBpZ3QgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBJIG5lZWQKdG8g Zml4IGV2ZW50dWFsbHksIGJ1dCBtZWFud2hpbGUgeW91IG5lZWQgdG8gY291bnQgaG93IG1hbnkg c2tpcHMgeW91CmhhdmUsIGFuZCBvbmx5IHNraXAgYXQgdGhlIHZlcnkgZW5kIG9mIHlvdXIgc3Vi dGVzdCBpZiB5b3Ugc2tpcHBlZCBhbGwKcG9zc2libGUgY29tYmluYXRpb25zIHlvdSBtaWdodCB3 YW50IHRvIHRlc3QuCgpJIHRoaW5rIGEgcmV0dXJuIGZhbHNlIGhlcmUgYW5kIGNoYW5naW5nIHRo ZSBoaWdoZXIgbGV2ZWwgbG9naWMgdG8KaWd0X3NraXAgaWYgeW91IGRpZG4ndCBicmVhayBvdXQg b2YgdGhlIGxvb3Agc2hvdWxkIGRvIHRoZSB0cmljay4KCj4gKwkJfQo+ICsKPiArCQlpZ3RfZGlz cGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBkYXRhLT5kaXNwbGF5LmlzX2F0b21pYyA/Cj4g KwkJCQkgICAgQ09NTUlUX0FUT01JQyA6IENPTU1JVF9VTklWRVJTQUwpOwo+ICsKPiArCj4gKwkJ aWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmc21hbGxfY3JjKTsKPiAr Cj4gKwkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgYmlnX2ZiKTsKPiArCQlpZ3RfZmJfc2V0X3Bv c2l0aW9uKGJpZ19mYiwgcGxhbmUsIHgsIHkpOwo+ICsJCWlndF9mYl9zZXRfc2l6ZShiaWdfZmIs IHBsYW5lLCBzbWFsbF9mYi0+d2lkdGgsIHNtYWxsX2ZiLT5oZWlnaHQpOwo+ICsJCWlndF9wbGFu ZV9zZXRfc2l6ZShwbGFuZSwgZGF0YS0+d2lkdGgsIGRhdGEtPmhlaWdodCk7Cj4gKwkJaWd0X2Rp c3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+ZGlzcGxheS5pc19hdG9taWMgPwo+ ICsJCQkJICAgIENPTU1JVF9BVE9NSUMgOiBDT01NSVRfVU5JVkVSU0FMKTsKPiArCj4gKwkJaWd0 X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmYmlnX2NyYyk7Cj4gKwo+ICsJ CWlndF9wbGFuZV9zZXRfZmIocGxhbmUsIE5VTEwpOwo+ICsKPiArCQlpZ3RfYXNzZXJ0X2NyY19l cXVhbCgmYmlnX2NyYywgJnNtYWxsX2NyYyk7Cj4gKwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVl Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB0ZXN0X3BpcGUoZGF0YV90ICpkYXRhKQo+ICt7Cj4g Kwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiArCWlu dCB3aWR0aCwgaGVpZ2h0Owo+ICsJYm9vbCByZXQgPSBmYWxzZTsKPiArCj4gKwltb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShkYXRhLT5vdXRwdXQpOwo+ICsKPiArCWRhdGEtPndpZHRoID0gbW9k ZS0+aGRpc3BsYXk7Cj4gKwlkYXRhLT5oZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKPiArCj4gKwl3 aWR0aCA9IG1vZGUtPmhkaXNwbGF5Owo+ICsJaGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7Cj4gKwlp ZiAoZGF0YS0+cm90YXRpb24gPT0gSUdUX1JPVEFUSU9OXzkwIHx8Cj4gKwkgICAgZGF0YS0+cm90 YXRpb24gPT0gSUdUX1JPVEFUSU9OXzI3MCkKPiArCQlpZ3Rfc3dhcCh3aWR0aCwgaGVpZ2h0KTsK PiArCj4gKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgd2lkdGgsIGhlaWdodCwK PiArCQkJICAgIGRhdGEtPmZvcm1hdCwgZGF0YS0+bW9kaWZpZXIsCj4gKwkJCSAgICAwLCAxLCAw LCAmZGF0YS0+c21hbGxfZmIpOwo+ICsKPiArCWlndF9vdXRwdXRfc2V0X3BpcGUoZGF0YS0+b3V0 cHV0LCBkYXRhLT5waXBlKTsKPiArCj4gKwlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVf dHlwZShkYXRhLT5vdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ICsJaWd0X3BsYW5l X3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiArCj4gKwlpZiAoIWRhdGEtPmRpc3BsYXkuaXNfYXRv bWljKSB7Cj4gKwkJc3RydWN0IGlndF9mYiBmYjsKPiArCj4gKwkJaWd0X2NyZWF0ZV9mYihkYXRh LT5kcm1fZmQsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKPiArCQkJICAgICAgRFJN X0ZPUk1BVF9YUkdCODg4OCwgRFJNX0ZPUk1BVF9NT0RfTElORUFSLAo+ICsJCQkgICAgICAmZmIp Owo+ICsKPiArCQkvKiBsZWdhY3kgc2V0Y3J0YyBuZWVkcyBhbiBmYiAqLwo+ICsJCWlndF9wbGFu ZV9zZXRfZmIocHJpbWFyeSwgJmZiKTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5k aXNwbGF5LCBDT01NSVRfTEVHQUNZKTsKPiArCj4gKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5 LCBOVUxMKTsKPiArCQlpZ3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRf VU5JVkVSU0FMKTsKPiArCj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZmYik7Cj4g Kwl9Cj4gKwo+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+ZGlz cGxheS5pc19hdG9taWMgPwo+ICsJCQkgICAgQ09NTUlUX0FUT01JQyA6IENPTU1JVF9VTklWRVJT QUwpOwo+ICsKPiArCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkYXRhLT5kcm1f ZmQsIGRhdGEtPnBpcGUsCj4gKwkJCQkJICBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7Cj4g Kwo+ICsJZm9yX2VhY2hfcGxhbmVfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgZGF0YS0+cGlwZSwg ZGF0YS0+cGxhbmUpIHsKPiArCQlyZXQgPSB0ZXN0X3BsYW5lKGRhdGEpOwo+ICsJCWlmIChyZXQp Cj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWlndF9waXBlX2NyY19mcmVlKGRhdGEtPnBpcGVf Y3JjKTsKPiArCj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKGRhdGEtPm91dHB1dCwgUElQRV9BTlkp Owo+ICsJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgZGF0YS0+ZGlzcGxheS5p c19hdG9taWMgPwo+ICsJCQkgICAgQ09NTUlUX0FUT01JQyA6IENPTU1JVF9VTklWRVJTQUwpOwo+ ICsKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+c21hbGxfZmIpOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRlc3Rfc2Nhbm91dChkYXRh X3QgKmRhdGEpCj4gK3sKPiArCWZvcl9lYWNoX3BpcGVfd2l0aF92YWxpZF9vdXRwdXQoJmRhdGEt PmRpc3BsYXksIGRhdGEtPnBpcGUsIGRhdGEtPm91dHB1dCkgewo+ICsJCWlmICh0ZXN0X3BpcGUo ZGF0YSkpCj4gKwkJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZ3Rfc2tpcCgibm8gdmFsaWQgY3J0 Yy9jb25uZWN0b3IgY29tYmluYXRpb25zIGZvdW5kXG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgcHJlcF9mYihkYXRhX3QgKmRhdGEpCj4gK3sKPiArCWludCB3aWR0aCwgaGVpZ2h0Owo+ICsK PiArCWlmIChkYXRhLT5iaWdfZmIuZmJfaWQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW1heF9mYl9z aXplKGRhdGEsICZ3aWR0aCwgJmhlaWdodCwKPiArCQkgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5t b2RpZmllcik7Cj4gKwo+ICsJaWd0X2NyZWF0ZV9mYihkYXRhLT5kcm1fZmQsIHdpZHRoLCBoZWln aHQsCj4gKwkJICAgICAgZGF0YS0+Zm9ybWF0LCBkYXRhLT5tb2RpZmllciwKPiArCQkgICAgICAm ZGF0YS0+YmlnX2ZiKTsKPiArCj4gKwlnZW5lcmF0ZV9wYXR0ZXJuKGRhdGEsICZkYXRhLT5iaWdf ZmIsIDY0MCwgNDgwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2xlYW51cF9mYihkYXRhX3Qg KmRhdGEpCj4gK3sKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+YmlnX2Zi KTsKPiArCWRhdGEtPmJpZ19mYi5mYl9pZCA9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4g K3Rlc3Rfc2l6ZV9vdmVyZmxvdyhkYXRhX3QgKmRhdGEpCj4gK3sKPiArCXVpbnQzMl90IGZiX2lk Owo+ICsJdWludDMyX3QgYm87Cj4gKwl1aW50MzJfdCBvZmZzZXRzWzRdID0ge307Cj4gKwl1aW50 MzJfdCBzdHJpZGVzWzRdID0geyAyNTYqMTAyNCwgfTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWd0 X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFzX2Zvcm1hdF9tb2QoJmRhdGEtPmRpc3BsYXksCj4gKwkJ CQkJICAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwkJCQkJICAgICAgIGRhdGEtPm1vZGlm aWVyKSk7Cj4gKwo+ICsJLyoKPiArCSAqIFRyeSB0byBoaXQgYSBzcGVjaWZpYyBpbnRlZ2VyIG92 ZXJmbG93IGluIGk5MTUgZmIgc2l6ZQo+ICsJICogY2FsY3VsYXRpb25zLiAyNTZrICogMTZrID09 IDE8PDMyIHdoaWNoIGlzIGNoZWNrZWQKPiArCSAqIGFnYWluc3QgdGhlIGJvIHNpemUuIFRoZSBj aGVjayBzaG91bGQgZmFpbCBvbiBhY2NvdW50Cj4gKwkgKiBvZiB0aGUgYm8gYmVpbmcgc21hbGxl ciwgYnV0IGR1ZSB0byB0aGUgb3ZlcmZsb3cgdGhlCj4gKwkgKiBjb21wdXRlZCBmYiBzaXplIGlz IDAgYW5kIHRodXMgdGhlIGNoZWNrIG5ldmVyIHRyaXBzLgo+ICsJICovCj4gKwlpZ3RfcmVxdWly ZShkYXRhLT5tYXhfZmJfd2lkdGggPj0gMTYzODMgJiYKPiArCQkgICAgZGF0YS0+bWF4X2ZiX2hl aWdodCA+PSAxNjM4Myk7Cj4gKwo+ICsJYm8gPSBnZW1fY3JlYXRlKGRhdGEtPmRybV9mZCwgKDFV TEwgPDwgMzIpIC0gNDA5Nik7Cj4gKwlpZ3RfcmVxdWlyZShibyk7Cj4gKwo+ICsJcmV0ID0gX19r bXNfYWRkZmIoZGF0YS0+ZHJtX2ZkLCBibywKPiArCQkJICAxNjM4MywgMTYzODMsCj4gKwkJCSAg RFJNX0ZPUk1BVF9YUkdCODg4OCwKPiArCQkJICBkYXRhLT5tb2RpZmllciwKPiArCQkJICBzdHJp ZGVzLCBvZmZzZXRzLCAxLAo+ICsJCQkgIERSTV9NT0RFX0ZCX01PRElGSUVSUywgJmZiX2lkKTsK PiArCj4gKwlpZ3RfYXNzZXJ0X25lcShyZXQsIDApOwo+ICsKPiArCWdlbV9jbG9zZShkYXRhLT5k cm1fZmQsIGJvKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9zaXplX29mZnNldF9v dmVyZmxvdyhkYXRhX3QgKmRhdGEpCj4gK3sKPiArCXVpbnQzMl90IGZiX2lkOwo+ICsJdWludDMy X3QgYm87Cj4gKwl1aW50MzJfdCBvZmZzZXRzWzRdID0ge307Cj4gKwl1aW50MzJfdCBzdHJpZGVz WzRdID0geyA4MTkyLCB9Owo+ICsJaW50IHJldDsKPiArCj4gKwlpZ3RfcmVxdWlyZShpZ3RfZGlz cGxheV9oYXNfZm9ybWF0X21vZCgmZGF0YS0+ZGlzcGxheSwKPiArCQkJCQkgICAgICAgRFJNX0ZP Uk1BVF9OVjEyLAo+ICsJCQkJCSAgICAgICBkYXRhLT5tb2RpZmllcikpOwo+ICsKPiArCS8qCj4g KwkgKiBUcnkgdG8gYSBzcGVjaWZpYyBpbnRlZ2VyIG92ZXJmbG93IGluIGk5MTUgZmIgc2l6ZQo+ ICsJICogY2FsY3VsYXRpb25zLiBUaGlzIHRpbWUgaXQncyBvZmZzZXRzWzFdICsgdGhlIHRpbGUK PiArCSAqIGFsaWduZWQgY2hyb21hIHBsYW5lIHNpemUgdGhhdCBvdmVyZmxvd3MgYW5kCj4gKwkg KiBpbmNvcnJlY3RseSBwYXNzZXMgdGhlIGJvIHNpemUgY2hlY2suCj4gKwkgKi8KPiArCWlndF9y ZXF1aXJlKGlndF9kaXNwbGF5X2hhc19mb3JtYXRfbW9kKCZkYXRhLT5kaXNwbGF5LAo+ICsJCQkJ CSAgICAgICBEUk1fRk9STUFUX05WMTIsCj4gKwkJCQkJICAgICAgIGRhdGEtPm1vZGlmaWVyKSk7 Cj4gKwo+ICsJYm8gPSBnZW1fY3JlYXRlKGRhdGEtPmRybV9mZCwgKDFVTEwgPDwgMzIpIC0gNDA5 Nik7Cj4gKwlpZ3RfcmVxdWlyZShibyk7Cj4gKwo+ICsJb2Zmc2V0c1swXSA9IDA7Cj4gKwlvZmZz ZXRzWzFdID0gKDFVTEwgPDwgMzIpIC0gODE5MiAqIDQwOTY7Cj4gKwo+ICsJcmV0ID0gX19rbXNf YWRkZmIoZGF0YS0+ZHJtX2ZkLCBibywKPiArCQkJICA4MTkyLCA4MTg4LAo+ICsJCQkgIERSTV9G T1JNQVRfTlYxMiwKPiArCQkJICBkYXRhLT5tb2RpZmllciwKPiArCQkJICBzdHJpZGVzLCBvZmZz ZXRzLCAxLAo+ICsJCQkgIERSTV9NT0RFX0ZCX01PRElGSUVSUywgJmZiX2lkKTsKPiArCWlndF9h c3NlcnRfbmVxKHJldCwgMCk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGRhdGEtPmRybV9mZCwgYm8pOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJtZmIoaW50IGZkLCB1aW50MzJfdCBpZCkKPiArewo+ICsJ aW50IGVycjsKPiArCj4gKwllcnIgPSAwOwo+ICsJaWYgKGlndF9pb2N0bChmZCwgRFJNX0lPQ1RM X01PREVfUk1GQiwgJmlkKSkKPiArCQllcnIgPSAtZXJybm87Cj4gKwo+ICsJZXJybm8gPSAwOwo+ ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9hZGRmYihkYXRh X3QgKmRhdGEpCj4gK3sKPiArCXVpbnQ2NF90IHNpemU7Cj4gKwl1aW50MzJfdCBmYl9pZDsKPiAr CXVpbnQzMl90IGJvOwo+ICsJdWludDMyX3Qgb2Zmc2V0c1s0XSA9IHt9Owo+ICsJdWludDMyX3Qg c3RyaWRlc1s0XSA9IHt9Owo+ICsJdWludDMyX3QgZm9ybWF0Owo+ICsJaW50IHJldDsKPiArCj4g KwkvKgo+ICsJICogZ2VuMyBtYXggdGlsZWQgc3RyaWRlIGlzIDhrIGJ5dGVzLCBidXQKPiArCSAq IG1heCBmYiBzaXplIG9mIDRrIHBpeGVscywgaGVuY2Ugd2UgY2FuJ3QgdGVzdAo+ICsJICogd2l0 aCAzMmJwcCBhbmQgbXVzdCB1c2UgMTZicHAgaW5zdGVhZC4KPiArCSAqLwo+ICsJaWYgKGludGVs X2dlbihkYXRhLT5kZXZpZCkgPT0gMykKPiArCQlmb3JtYXQgPSBEUk1fRk9STUFUX1JHQjU2NTsK PiArCWVsc2UKPiArCQlmb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4Owo+ICsKPiArCWlndF9y ZXF1aXJlKGlndF9kaXNwbGF5X2hhc19mb3JtYXRfbW9kKCZkYXRhLT5kaXNwbGF5LAo+ICsJCQkJ CSAgICAgICBmb3JtYXQsIGRhdGEtPm1vZGlmaWVyKSk7Cj4gKwo+ICsJaWd0X2NhbGNfZmJfc2l6 ZShkYXRhLT5kcm1fZmQsCj4gKwkJCSBkYXRhLT5tYXhfZmJfd2lkdGgsCj4gKwkJCSBkYXRhLT5t YXhfZmJfaGVpZ2h0LAo+ICsJCQkgZm9ybWF0LCBkYXRhLT5tb2RpZmllciwKPiArCQkJICZzaXpl LCAmc3RyaWRlc1swXSk7Cj4gKwo+ICsJYm8gPSBnZW1fY3JlYXRlKGRhdGEtPmRybV9mZCwgc2l6 ZSk7Cj4gKwlpZ3RfcmVxdWlyZShibyk7Cj4gKwo+ICsJaWYgKGludGVsX2dlbihkYXRhLT5kZXZp ZCkgPCA0KQo+ICsJCWdlbV9zZXRfdGlsaW5nKGRhdGEtPmRybV9mZCwgYm8sCj4gKwkJCSAgICAg ICBpZ3RfZmJfbW9kX3RvX3RpbGluZyhkYXRhLT5tb2RpZmllciksIHN0cmlkZXNbMF0pOwo+ICsK PiArCXJldCA9IF9fa21zX2FkZGZiKGRhdGEtPmRybV9mZCwgYm8sCj4gKwkJCSAgZGF0YS0+bWF4 X2ZiX3dpZHRoLAo+ICsJCQkgIGRhdGEtPm1heF9mYl9oZWlnaHQsCj4gKwkJCSAgZm9ybWF0LCBk YXRhLT5tb2RpZmllciwKPiArCQkJICBzdHJpZGVzLCBvZmZzZXRzLCAxLAo+ICsJCQkgIERSTV9N T0RFX0ZCX01PRElGSUVSUywgJmZiX2lkKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiAr Cj4gKwlybWZiKGRhdGEtPmRybV9mZCwgZmJfaWQpOwo+ICsJZ2VtX2Nsb3NlKGRhdGEtPmRybV9m ZCwgYm8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZGF0YV90IGRhdGE7Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHsKPiArCXVpbnQ2NF90IG1vZGlmaWVyOwo+ICsJY29uc3QgY2hhciAqbmFtZTsK PiArfSBtb2RpZmllcnNbXSA9IHsKPiArCXsgRFJNX0ZPUk1BVF9NT0RfTElORUFSLCAibGluZWFy IiwgfSwKPiArCXsgSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsICJ4LXRpbGVkIiwgfSwKPiArCXsg STkxNV9GT1JNQVRfTU9EX1lfVElMRUQsICJ5LXRpbGVkIiwgfSwKPiArCXsgSTkxNV9GT1JNQVRf TU9EX1lmX1RJTEVELCAieWYtdGlsZWQiLCB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCB7Cj4gKwl1aW50MzJfdCBmb3JtYXQ7Cj4gKwl1aW50OF90IGJwcDsKPiArfSBmb3JtYXRz W10gPSB7Cj4gKwkvKiBGSVhNRSBpZ3RfZmIgZG9lc24ndCBzdXBwb3J0IEM4IGN1cnJlbnRseSAq Lwo+ICsJeyBEUk1fRk9STUFUX0M4LCA4LCB9LAo+ICsJeyBEUk1fRk9STUFUX1JHQjU2NSwgMTYs IH0sCj4gKwl7IERSTV9GT1JNQVRfWFJHQjg4ODgsIDMyLCB9LAo+ICsJeyBEUk1fRk9STUFUX1hC R1IxNjE2MTYxNkYsIDY0LCB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4g KwlpZ3Rfcm90YXRpb25fdCByb3RhdGlvbjsKPiArCXVpbnQxNl90IGFuZ2xlOwo+ICt9IHJvdGF0 aW9uc1tdID0gewo+ICsJeyBJR1RfUk9UQVRJT05fMCwgMCwgfSwKPiArCXsgSUdUX1JPVEFUSU9O XzkwLCA5MCwgfSwKPiArCXsgSUdUX1JPVEFUSU9OXzE4MCwgMTgwLCB9LAo+ICsJeyBJR1RfUk9U QVRJT05fMjcwLCAyNzAsIH0sCj4gK307Cj4gKwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlpZ3RfZml4 dHVyZSB7Cj4gKwkJZHJtTW9kZVJlc1B0ciByZXM7Cj4gKwo+ICsJCWlndF9za2lwX29uX3NpbXVs YXRpb24oKTsKPiArCj4gKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERS SVZFUl9JTlRFTCk7Cj4gKwo+ICsJCWlndF9yZXF1aXJlKGlzX2k5MTVfZGV2aWNlKGRhdGEuZHJt X2ZkKSk7Cj4gKwo+ICsJCWRhdGEuZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEuZHJt X2ZkKTsKPiArCj4gKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ICsKPiArCQlp Z3RfcmVxdWlyZV9waXBlX2NyYyhkYXRhLmRybV9mZCk7Cj4gKwkJaWd0X2Rpc3BsYXlfcmVxdWly ZSgmZGF0YS5kaXNwbGF5LCBkYXRhLmRybV9mZCk7Cj4gKwo+ICsJCXJlcyA9IGRybU1vZGVHZXRS ZXNvdXJjZXMoZGF0YS5kcm1fZmQpOwo+ICsJCWlndF9hc3NlcnQocmVzKTsKPiArCj4gKwkJZGF0 YS5tYXhfZmJfd2lkdGggPSByZXMtPm1heF93aWR0aDsKPiArCQlkYXRhLm1heF9mYl9oZWlnaHQg PSByZXMtPm1heF9oZWlnaHQ7Cj4gKwo+ICsJCWRybU1vZGVGcmVlUmVzb3VyY2VzKHJlcyk7Cj4g Kwo+ICsJCWlndF9pbmZvKCJNYXggZHJpdmVyIGZyYW1lYnVmZmVyIHNpemUgJWR4JWRcbiIsCj4g KwkJCSBkYXRhLm1heF9mYl93aWR0aCwgZGF0YS5tYXhfZmJfaGVpZ2h0KTsKPiArCj4gKwkJZGF0 YS5yYW1fc2l6ZSA9IGludGVsX2dldF90b3RhbF9yYW1fbWIoKSA8PCAyMDsKPiArCQlkYXRhLmFw ZXJfc2l6ZSA9IGdlbV9hcGVydHVyZV9zaXplKGRhdGEuZHJtX2ZkKTsKPiArCQlkYXRhLm1hcHBh YmxlX3NpemUgPSBnZW1fbWFwcGFibGVfYXBlcnR1cmVfc2l6ZSgpOwo+ICsKPiArCQlpZ3RfaW5m bygiUkFNOiAlIlBSSXU2NCIgTWlCLCBHUFUgYWRkcmVzcyBzcGFjZTogJSJQUklkNjQiIE1pQiwg R0dUVCBtYXBwYWJsZSBzaXplOiAlIlBSSWQ2NCIgTWlCXG4iLAo+ICsJCQkgZGF0YS5yYW1fc2l6 ZSA+PiAyMCwgZGF0YS5hcGVyX3NpemUgPj4gMjAsCj4gKwkJCSBkYXRhLm1hcHBhYmxlX3NpemUg Pj4gMjApOwo+ICsKPiArCQkvKgo+ICsJCSAqIEdlbjMgcmVuZGVyIGVuZ2luZSBpcyBsaW1pdGVk IHRvIDJreDJrLCB3aGVyZWFzCj4gKwkJICogdGhlIGRpc3BsYXkgZW5naW5lIGNhbiBkbyA0a3g0 ay4gVXNlIHRoZSBibGl0dGVyCj4gKwkJICogb24gZ2VuMyB0byBhdm9pZCBleGNlZWRpbmcgdGhl IHJlbmRlciBlbmdpbmUgbGltaXRzLgo+ICsJCSAqIE9uIGdlbjIgd2UgY291bGQgdXNlIGVpdGhl ciwgYnV0IGxldCdzIGdvIGZvciB0aGUKPiArCQkgKiBibGl0dGVyIHRoZXJlIGFzIHdlbGwuCj4g KwkJICovCj4gKwkJaWYgKGludGVsX2dlbihkYXRhLmRldmlkKSA+PSA0KQo+ICsJCQlkYXRhLnJl bmRlcl9jb3B5ID0gaWd0X2dldF9yZW5kZXJfY29weWZ1bmMoZGF0YS5kZXZpZCk7Cj4gKwo+ICsJ CWRhdGEuYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChkYXRhLmRybV9mZCwgNDA5 Nik7Cj4gKwkJZGF0YS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEuYnVmbWdy LCBkYXRhLmRldmlkKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogU2tpcCBsaW5lYXIgYXMgaXQg ZG9lc24ndCBoaXQgdGhlIG92ZXJmbG93IHdlIHdhbnQKPiArCSAqIG9uIGFjY291bnQgb2YgdGhl IHRpbGUgaGVpZ2h0IGJlaW5nIGVmZmVjdGl2ZWx5IG9uZSwKPiArCSAqIGFuZCB0aHVzIHRoZSBr ZW5ybmVsIHJvdW5kaW5nIHVwIHRvIHRoZSBuZXh0IHRpbGUKPiArCSAqIGhlaWdodCB3b24ndCBk byBhbnl0aGluZy4KPiArCSAqLwo+ICsJZm9yIChpbnQgaSA9IDE7IGkgPCBBUlJBWV9TSVpFKG1v ZGlmaWVycyk7IGkrKykgewo+ICsJCWlndF9zdWJ0ZXN0X2YoIiVzLWFkZGZiLXNpemUtb3ZlcmZs b3ciLAo+ICsJCQkgICAgICBtb2RpZmllcnNbaV0ubmFtZSkgewo+ICsJCQlkYXRhLm1vZGlmaWVy ID0gbW9kaWZpZXJzW2ldLm1vZGlmaWVyOwo+ICsJCQl0ZXN0X3NpemVfb3ZlcmZsb3coJmRhdGEp Owo+ICsJCX0KPiArCX0KPiArCj4gKwlmb3IgKGludCBpID0gMTsgaSA8IEFSUkFZX1NJWkUobW9k aWZpZXJzKTsgaSsrKSB7Cj4gKwkJaWd0X3N1YnRlc3RfZigiJXMtYWRkZmItc2l6ZS1vZmZzZXQt b3ZlcmZsb3ciLAo+ICsJCQkgICAgICBtb2RpZmllcnNbaV0ubmFtZSkgewo+ICsJCQlkYXRhLm1v ZGlmaWVyID0gbW9kaWZpZXJzW2ldLm1vZGlmaWVyOwo+ICsJCQl0ZXN0X3NpemVfb2Zmc2V0X292 ZXJmbG93KCZkYXRhKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBB UlJBWV9TSVpFKG1vZGlmaWVycyk7IGkrKykgewo+ICsJCWlndF9zdWJ0ZXN0X2YoIiVzLWFkZGZi IiwgbW9kaWZpZXJzW2ldLm5hbWUpIHsKPiArCQkJZGF0YS5tb2RpZmllciA9IG1vZGlmaWVyc1tp XS5tb2RpZmllcjsKPiArCj4gKwkJCXRlc3RfYWRkZmIoJmRhdGEpOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUobW9kaWZpZXJzKTsgaSsrKSB7Cj4g KwkJZGF0YS5tb2RpZmllciA9IG1vZGlmaWVyc1tpXS5tb2RpZmllcjsKPiArCj4gKwkJZm9yIChp bnQgaiA9IDA7IGogPCBBUlJBWV9TSVpFKGZvcm1hdHMpOyBqKyspIHsKPiArCQkJZGF0YS5mb3Jt YXQgPSBmb3JtYXRzW2pdLmZvcm1hdDsKPiArCj4gKwkJCWZvciAoaW50IGsgPSAwOyBrIDwgQVJS QVlfU0laRShyb3RhdGlvbnMpOyBrKyspIHsKPiArCQkJCWRhdGEucm90YXRpb24gPSByb3RhdGlv bnNba10ucm90YXRpb247Cj4gKwo+ICsJCQkJaWd0X3N1YnRlc3RfZigiJXMtJWRicHAtcm90YXRl LSVkIiwgbW9kaWZpZXJzW2ldLm5hbWUsCj4gKwkJCQkJICAgICAgZm9ybWF0c1tqXS5icHAsIHJv dGF0aW9uc1trXS5hbmdsZSkgewo+ICsJCQkJCWlndF9yZXF1aXJlKGlndF9mYl9zdXBwb3J0ZWRf Zm9ybWF0KGRhdGEuZm9ybWF0KSk7Cj4gKwkJCQkJaWd0X3JlcXVpcmUoaWd0X2Rpc3BsYXlfaGFz X2Zvcm1hdF9tb2QoJmRhdGEuZGlzcGxheSwgZGF0YS5mb3JtYXQsIGRhdGEubW9kaWZpZXIpKTsK PiArCQkJCQlwcmVwX2ZiKCZkYXRhKTsKPiArCQkJCQl0ZXN0X3NjYW5vdXQoJmRhdGEpOwo+ICsJ CQkJfQo+ICsJCQl9Cj4gKwo+ICsJCQlpZ3RfZml4dHVyZQo+ICsJCQkJY2xlYW51cF9mYigmZGF0 YSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlndF9maXh0dXJlIHsKPiArCQlpZ3RfZGlzcGxheV9m aW5pKCZkYXRhLmRpc3BsYXkpOwo+ICsKPiArCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGRhdGEu YmF0Y2gpOwo+ICsJCWRybV9pbnRlbF9idWZtZ3JfZGVzdHJveShkYXRhLmJ1Zm1ncik7Cj4gKwl9 Cj4gK30KCmxndG0KClJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPgoKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5i dWlsZAo+IGluZGV4IDcxMTk3OWI0YTFjMi4uYWQ4NDQ0ODc1MzAyIDEwMDY0NAo+IC0tLSBhL3Rl c3RzL21lc29uLmJ1aWxkCj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBAQCAtMTQsNiArMTQs NyBAQCB0ZXN0X3Byb2dzID0gWwo+ICAJJ2ttc19hdG9taWNfaW50ZXJydXB0aWJsZScsCj4gIAkn a21zX2F0b21pY190cmFuc2l0aW9uJywKPiAgCSdrbXNfYXZhaWxhYmxlX21vZGVzX2NyYycsCj4g Kwkna21zX2JpZ19mYicsCj4gIAkna21zX2J1c3knLAo+ICAJJ2ttc19jY3MnLAo+ICAJJ2ttc19j b2xvcicsCj4gLS0gCj4gMi4yMS4wCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KPiBpZ3QtZGV2IG1haWxpbmcgbGlzdAo+IGlndC1kZXZAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pZ3QtZGV2CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50 ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pZ3QtZGV2