From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2FA266E0F5 for ; Thu, 27 Sep 2018 13:47:37 +0000 (UTC) Date: Thu, 27 Sep 2018 16:46:30 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Message-ID: <20180927134630.GC9144@intel.com> References: <20180925134741.19428-1-ville.syrjala@linux.intel.com> <20180925134741.19428-4-ville.syrjala@linux.intel.com> <1537922950.2714.36.camel@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1537922950.2714.36.camel@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t 4/5] lib/igt_fb: Pass around igt_fb internally 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: Paulo Zanoni Cc: igt-dev@lists.freedesktop.org List-ID: T24gVHVlLCBTZXAgMjUsIDIwMTggYXQgMDU6NDk6MTBQTSAtMDcwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IEVtIFRlciwgMjAxOC0wOS0yNSDDoHMgMTY6NDcgKzAzMDAsIFZpbGxlIFN5cmphbGEg ZXNjcmV2ZXU6Cj4gPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXgu aW50ZWwuY29tPgo+ID4gCj4gPiBJbnN0ZWFkIG9mIHBhc3NpbmcgYXJvdW5kIGEgYm9hdGxvYWQg b2YgaW50ZWdlcnMgZXZlcnl3aGVyZSBsZXQncwo+ID4ganVzdCBwYXNzIGFyb3VuZCB0aGUgaWd0 X2ZiIHN0cnVjdC4gVGhhdCBvYnZpb3VzbHkgbWVhbnMgd2UgaGF2ZSB0bwo+ID4gcG9wdWxhdGUg aXQgZmlyc3Qgc3VmZmljaWVudGx5LCB0byB3aGljaCBlbmQgd2UnbGwgYWRkIGEgc21hbGwKPiA+ IGhlbHBlci4KPiA+IExhdGVyIG9uIHRoZSBzdHJpZGUvc2l6ZSBjYWxjdWxhdGlvbnMgd2lsbCBj b25zdWx0IHRoZSBhbHJlYWR5Cj4gPiBwcmUtcG9wdWxhdGVkIGlndF9mYiBhbmQgZmlsbCBpbiB0 aGUgcmVzdCBhcyBuZWVkZWQuCj4gPiAKPiA+IFRoaXMgbWFrZXMgdGhlIHdob2xlIHRoaW5nIGEg bG90IGxlc3MgZXJyb3IgcHJvbmUgYXMgaXQncyBpbXBvc3NpYmxlCj4gPiB0byBhY2NpZGVudGFs bHkgcGFzcyB0aGUgYXJndW1lbnRzIGluIHRoZSB3cm9uZyBvcmRlciB3aGVuIHRoZXJlJ3MKPiA+ IGp1c3QgdGhlIG9uZSBvZiB0aGVtLCBhbmQgaXQncyBhIHBvaW50ZXIuCj4gCj4gV2hpbGUgSSBj b21wbGV0ZWx5IGFncmVlIHdpdGggdGhlc2UgYXJndW1lbnRzLCB0aGlzIGNoYW5nZSBkb2VzIG5v dAo+IGNvbWUgd2l0aG91dCBpdHMgb3duIG1pbm9yIGRvd25zaWRlcy4gQ29kZSB0aGF0IGRlYWxz LXdpdGgvaW5pdGlhbGl6ZXMKPiBpZ3RfZmJfdCBpcyBub3cgYSBsaXR0bGUgcmlza2llciBkdWUg dG8gdGhlIHRoZSBmYWN0IHRoYXQgdGhlIG9yZGVyCj4gd2hpY2ggdGhpbmdzIGFyZSBpbml0aWFs aXplZCBpcyB3YXkgbW9yZSBpbXBvcnRhbnQgbm93LiBBbmQgd2UgYWxzbwo+IG1vdmVkIGEgd2hv bGUgbGF5ZXIgb2Ygb3VyIGFic3RyYWN0aW9ucyB1cCwgYnV0IHRoYXQgZGlkbid0IHNlZW0gdG8g YmUKPiBhIHByb2JsZW0gbm93IHNvIGxldCdzIGhvcGUgaXQgc3RpbGwgd29uJ3QgYmUgYSBwcm9i bGVtIGxhdGVyLgo+IAo+IFN0aWxsLCBhIHBvc2l0aXZlIGNoYW5nZSBldmVuIHdoZW4gZG93bnNp ZGVzIGFyZSBjb25zaWRlcmVkLgo+IAo+ID4gCj4gPiB2MjogUmViYXNlIGR1ZSB0byB1aW50NjRf dCBzaXplCj4gPiAKPiA+IENjOiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNv bT4KPiA+IFNpZ25lZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51 eC5pbnRlbC5jb20+Cj4gPiAtLS0KPiA+ICBsaWIvaWd0X2RyYXcuYyAgICAgICAgICAgICAgICAg ICB8ICAgMiArLQo+ID4gIGxpYi9pZ3RfZmIuYyAgICAgICAgICAgICAgICAgICAgIHwgNDA4ICsr KysrKysrKysrKysrKysrKystLS0tLS0tLQo+ID4gLS0tLS0tLS0tLS0tCj4gPiAgbGliL2lndF9m Yi5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KPiA+ICB0ZXN0cy9rbXNfY2NzLmMgICAg ICAgICAgICAgICAgICB8ICAgMiArLQo+ID4gIHRlc3RzL2ttc19mbGlwLmMgICAgICAgICAgICAg ICAgIHwgICA0ICstCj4gPiAgdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMgfCAgIDYg Ky0KPiA+ICB0ZXN0cy9wbV9ycG0uYyAgICAgICAgICAgICAgICAgICB8ICAgMiArLQo+ID4gIDcg ZmlsZXMgY2hhbmdlZCwgMjA3IGluc2VydGlvbnMoKyksIDIyMSBkZWxldGlvbnMoLSkKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZHJhdy5jIGIvbGliL2lndF9kcmF3LmMKPiA+IGluZGV4 IGM3ZDU3NzBkY2EyOC4uMDU4MjE0ODBiYzgwIDEwMDY0NAo+ID4gLS0tIGEvbGliL2lndF9kcmF3 LmMKPiA+ICsrKyBiL2xpYi9pZ3RfZHJhdy5jCj4gPiBAQCAtNzIwLDcgKzcyMCw3IEBAIHZvaWQg aWd0X2RyYXdfcmVjdF9mYihpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IKPiA+ICpidWZtZ3IsCj4g PiAgCQkgICAgICBlbnVtIGlndF9kcmF3X21ldGhvZCBtZXRob2QsIGludCByZWN0X3gsIGludAo+ ID4gcmVjdF95LAo+ID4gIAkJICAgICAgaW50IHJlY3RfdywgaW50IHJlY3RfaCwgdWludDMyX3Qg Y29sb3IpCj4gPiAgewo+ID4gLQlpZ3RfZHJhd19yZWN0KGZkLCBidWZtZ3IsIGNvbnRleHQsIGZi LT5nZW1faGFuZGxlLCBmYi0+c2l6ZSwgCj4gPiBmYi0+c3RyaWRlLAo+ID4gKwlpZ3RfZHJhd19y ZWN0KGZkLCBidWZtZ3IsIGNvbnRleHQsIGZiLT5nZW1faGFuZGxlLCBmYi0+c2l6ZSwgCj4gPiBm Yi0+c3RyaWRlc1swXSwKPiA+ICAJCSAgICAgIG1ldGhvZCwgcmVjdF94LCByZWN0X3ksIHJlY3Rf dywgcmVjdF9oLCBjb2xvciwKPiA+ICAJCSAgICAgIGlndF9kcm1fZm9ybWF0X3RvX2JwcChmYi0+ ZHJtX2Zvcm1hdCkpOwo+ID4gIH0KPiA+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ZiLmMgYi9saWIv aWd0X2ZiLmMKPiA+IGluZGV4IDNjNjk3NDUwMzMxMy4uMjYwMTlmMDQyMGRjIDEwMDY0NAo+ID4g LS0tIGEvbGliL2lndF9mYi5jCj4gPiArKysgYi9saWIvaWd0X2ZiLmMKPiA+IEBAIC0xOTAsNTAg KzE5MCw3MiBAQCB2b2lkIGlndF9nZXRfZmJfdGlsZV9zaXplKGludCBmZCwgdWludDY0X3QKPiA+ IHRpbGluZywgaW50IGZiX2JwcCwKPiA+ICAJfQo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgdW5z aWduZWQgZmJfcGxhbmVfd2lkdGgoY29uc3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdAo+ID4g KmZvcm1hdCwKPiA+IC0JCQkgICAgICAgaW50IHBsYW5lLCB1bnNpZ25lZCB3aWR0aCkKPiA+ICtz dGF0aWMgdW5zaWduZWQgZmJfcGxhbmVfd2lkdGgoY29uc3Qgc3RydWN0IGlndF9mYiAqZmIsIGlu dCBwbGFuZSkKPiA+ICB7Cj4gPiAtCWlmIChmb3JtYXQtPmRybV9pZCA9PSBEUk1fRk9STUFUX05W MTIgJiYgcGxhbmUgPT0gMSkKPiA+IC0JCXJldHVybiBESVZfUk9VTkRfVVAod2lkdGgsIDIpOwo+ ID4gKwlpZiAoZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyICYmIHBsYW5lID09IDEp Cj4gPiArCQlyZXR1cm4gRElWX1JPVU5EX1VQKGZiLT53aWR0aCwgMik7Cj4gPiAgCj4gPiAtCXJl dHVybiB3aWR0aDsKPiA+ICsJcmV0dXJuIGZiLT53aWR0aDsKPiA+ICB9Cj4gPiAgCj4gPiAtc3Rh dGljIHVuc2lnbmVkIGZiX3BsYW5lX2JwcChjb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0 Cj4gPiAqZm9ybWF0LCBpbnQgcGxhbmUpCj4gPiArc3RhdGljIHVuc2lnbmVkIGZiX3BsYW5lX2Jw cChjb25zdCBzdHJ1Y3QgaWd0X2ZiICpmYiwgaW50IHBsYW5lKQo+ID4gIHsKPiA+ICsJY29uc3Qg c3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0ID0KPiA+IGxvb2t1cF9kcm1fZm9ybWF0 KGZiLT5kcm1fZm9ybWF0KTsKPiA+ICsKPiA+ICAJcmV0dXJuIGZvcm1hdC0+cGxhbmVfYnBwW3Bs YW5lXTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHVuc2lnbmVkIGZiX3BsYW5lX21pbl9zdHJp ZGUoY29uc3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdAo+ID4gKmZvcm1hdCwKPiA+IC0JCQkJ ICAgIGludCBwbGFuZSwgdW5zaWduZWQgd2lkdGgpCj4gPiArc3RhdGljIHVuc2lnbmVkIGZiX3Bs YW5lX2hlaWdodChjb25zdCBzdHJ1Y3QgaWd0X2ZiICpmYiwgaW50IHBsYW5lKQo+ID4gIHsKPiA+ IC0JdW5zaWduZWQgY3BwID0gZmJfcGxhbmVfYnBwKGZvcm1hdCwgcGxhbmUpIC8gODsKPiA+ICsJ aWYgKGZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfTlYxMiAmJiBwbGFuZSA9PSAxKQo+ID4g KwkJcmV0dXJuIERJVl9ST1VORF9VUChmYi0+aGVpZ2h0LCAyKTsKPiA+ICAKPiA+IC0JcmV0dXJu IGZiX3BsYW5lX3dpZHRoKGZvcm1hdCwgd2lkdGgsIHBsYW5lKSAqIGNwcDsKPiA+ICsJcmV0dXJu IGZiLT5oZWlnaHQ7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB1bnNpZ25lZCBmYl9wbGFuZV9o ZWlnaHQoY29uc3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdAo+ID4gKmZvcm1hdCwKPiA+IC0J CQkJaW50IHBsYW5lLCB1bnNpZ25lZCBoZWlnaHQpCj4gPiArc3RhdGljIGludCBmYl9udW1fcGxh bmVzKGNvbnN0IHN0cnVjdCBpZ3RfZmIgKmZiKQo+ID4gIHsKPiA+IC0JaWYgKGZvcm1hdC0+ZHJt X2lkID09IERSTV9GT1JNQVRfTlYxMiAmJiBwbGFuZSA9PSAxKQo+ID4gLQkJcmV0dXJuIERJVl9S T1VORF9VUChoZWlnaHQsIDIpOwo+ID4gKwljb25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0 ICpmb3JtYXQgPQo+ID4gbG9va3VwX2RybV9mb3JtYXQoZmItPmRybV9mb3JtYXQpOwo+ID4gIAo+ ID4gLQlyZXR1cm4gaGVpZ2h0Owo+ID4gLX0KPiA+IC0KPiA+IC1zdGF0aWMgaW50IGZiX251bV9w bGFuZXMoY29uc3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0KQo+ID4gLXsKPiA+ ICAJcmV0dXJuIGZvcm1hdC0+bnVtX3BsYW5lczsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHVu c2lnbmVkIGNhbGNfcGxhbmVfc3RyaWRlKGludCBmZCwKPiA+IC0JCQkJICBjb25zdCBzdHJ1Y3Qg Zm9ybWF0X2Rlc2Nfc3RydWN0Cj4gPiAqZm9ybWF0LAo+ID4gLQkJCQkgIGludCB3aWR0aCwgdWlu dDY0X3QgdGlsaW5nLCBpbnQKPiA+IHBsYW5lKQo+ID4gK3N0YXRpYyB2b2lkIGZiX2luaXQoc3Ry dWN0IGlndF9mYiAqZmIsCj4gPiArCQkgICAgaW50IGZkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs Cj4gPiArCQkgICAgdWludDMyX3QgZHJtX2Zvcm1hdCwKPiA+ICsJCSAgICB1aW50NjRfdCBtb2Rp ZmllciwKPiA+ICsJCSAgICBlbnVtIGlndF9jb2xvcl9lbmNvZGluZyBjb2xvcl9lbmNvZGluZywK PiA+ICsJCSAgICBlbnVtIGlndF9jb2xvcl9yYW5nZSBjb2xvcl9yYW5nZSkKPiA+ICB7Cj4gPiAt CXVpbnQzMl90IG1pbl9zdHJpZGUgPSBmYl9wbGFuZV9taW5fc3RyaWRlKGZvcm1hdCwgd2lkdGgs Cj4gPiBwbGFuZSk7Cj4gPiArCWNvbnN0IHN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3QgKmYgPQo+ ID4gbG9va3VwX2RybV9mb3JtYXQoZHJtX2Zvcm1hdCk7Cj4gPiAgCj4gPiAtCWlmICh0aWxpbmcg IT0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSAmJgo+ID4gLQkgICAgaW50ZWxfZ2VuKGludGVs X2dldF9kcm1fZGV2aWQoZmQpKSA8PSAzKSB7Cj4gPiArCWlndF9hc3NlcnRfZihmLCAiRFJNIGZv cm1hdCAlMDh4IG5vdCBmb3VuZFxuIiwgZHJtX2Zvcm1hdCk7Cj4gPiArCj4gPiArCW1lbXNldChm YiwgMCwgc2l6ZW9mKCpmYikpOwo+ID4gKwo+ID4gKwlmYi0+d2lkdGggPSB3aWR0aDsKPiA+ICsJ ZmItPmhlaWdodCA9IGhlaWdodDsKPiA+ICsJZmItPnRpbGluZyA9IG1vZGlmaWVyOwo+IAo+IFNo b3VsZG4ndCB3ZSByZW5hbWUgZmItPnRpbGluZyBub3c/IChvZiBjb3Vyc2UsIGluIGEgc2VwYXJh dGUgcGF0Y2gpCgpZZWFoLCB3b3VsZCBiZSBnb29kIHRvIHVuY29uZnVzZWQgdGhlIHdob2xlIHRp bGluZyB2cy4gbW9kaWZpZXIKdGhpbmcgaW4gdGhpcyBjb2RlLgoKPiAKPiBFdmVyeXRoaW5nIGVs c2UgbG9va3MgY29ycmVjdC4KPiAKPiBSZXZpZXdlZC1ieTogUGF1bG8gWmFub25pIDxwYXVsby5y Lnphbm9uaUBpbnRlbC5jb20+CgpUaGFua3MuCgo+IAo+ID4gKwlmYi0+ZHJtX2Zvcm1hdCA9IGRy bV9mb3JtYXQ7Cj4gPiArCWZiLT5mZCA9IGZkOwo+ID4gKwlmYi0+bnVtX3BsYW5lcyA9IGZiX251 bV9wbGFuZXMoZmIpOwo+ID4gKwlmYi0+Y29sb3JfZW5jb2RpbmcgPSBjb2xvcl9lbmNvZGluZzsK PiA+ICsJZmItPmNvbG9yX3JhbmdlID0gY29sb3JfcmFuZ2U7Cj4gPiArCj4gPiArCWZvciAoaW50 IGkgPSAwOyBpIDwgZmItPm51bV9wbGFuZXM7IGkrKykgewo+ID4gKwkJZmItPnBsYW5lX2JwcFtp XSA9IGZiX3BsYW5lX2JwcChmYiwgaSk7Cj4gPiArCQlmYi0+cGxhbmVfaGVpZ2h0W2ldID0gZmJf cGxhbmVfaGVpZ2h0KGZiLCBpKTsKPiA+ICsJCWZiLT5wbGFuZV93aWR0aFtpXSA9IGZiX3BsYW5l X3dpZHRoKGZiLCBpKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdWludDMyX3Qg Y2FsY19wbGFuZV9zdHJpZGUoc3RydWN0IGlndF9mYiAqZmIsIGludCBwbGFuZSkKPiA+ICt7Cj4g PiArCXVpbnQzMl90IG1pbl9zdHJpZGUgPSBmYi0+cGxhbmVfd2lkdGhbcGxhbmVdICoKPiA+ICsJ CShmYi0+cGxhbmVfYnBwW3BsYW5lXSAvIDgpOwo+ID4gKwo+ID4gKwlpZiAoZmItPnRpbGluZyAh PSBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FICYmCj4gPiArCSAgICBpbnRlbF9nZW4oaW50ZWxf Z2V0X2RybV9kZXZpZChmYi0+ZmQpKSA8PSAzKSB7Cj4gPiAgCQl1aW50MzJfdCBzdHJpZGU7Cj4g PiAgCj4gPiAgCQkvKiBSb3VuZCB0aGUgdGlsaW5nIHVwIHRvIHRoZSBuZXh0IHBvd2VyLW9mLXR3 byBhbmQKPiA+IHRoZSByZWdpb24KPiA+IEBAIC0yNTEsMjIgKzI3MywxOSBAQCBzdGF0aWMgdW5z aWduZWQgY2FsY19wbGFuZV9zdHJpZGUoaW50IGZkLAo+ID4gIAl9IGVsc2Ugewo+ID4gIAkJdW5z aWduZWQgaW50IHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+ID4gIAo+ID4gLQkJaWd0X2dldF9m Yl90aWxlX3NpemUoZmQsIHRpbGluZywKPiA+IC0JCQkJICAgICBmYl9wbGFuZV9icHAoZm9ybWF0 LCBwbGFuZSksCj4gPiArCQlpZ3RfZ2V0X2ZiX3RpbGVfc2l6ZShmYi0+ZmQsIGZiLT50aWxpbmcs IGZiLQo+ID4gPnBsYW5lX2JwcFtwbGFuZV0sCj4gPiAgCQkJCSAgICAgJnRpbGVfd2lkdGgsICZ0 aWxlX2hlaWdodCk7Cj4gPiAgCj4gPiAgCQlyZXR1cm4gQUxJR04obWluX3N0cmlkZSwgdGlsZV93 aWR0aCk7Cj4gPiAgCX0KPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHVpbnQ2NF90IGNhbGNfcGxh bmVfc2l6ZShpbnQgZmQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKPiA+IC0JCQkJY29uc3Qgc3Ry dWN0IGZvcm1hdF9kZXNjX3N0cnVjdAo+ID4gKmZvcm1hdCwKPiA+IC0JCQkJdWludDY0X3QgdGls aW5nLCBpbnQgcGxhbmUsCj4gPiAtCQkJCXVpbnQzMl90IHN0cmlkZSkKPiA+ICtzdGF0aWMgdWlu dDY0X3QgY2FsY19wbGFuZV9zaXplKHN0cnVjdCBpZ3RfZmIgKmZiLCBpbnQgcGxhbmUpCj4gPiAg ewo+ID4gLQlpZiAodGlsaW5nICE9IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUgJiYKPiA+IC0J ICAgIGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkgPD0gMykgewo+ID4gLQkJdWlu dDY0X3QgbWluX3NpemUgPSAodWludDY0X3QpIHN0cmlkZSAqIGhlaWdodDsKPiA+ICsJaWYgKGZi LT50aWxpbmcgIT0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSAmJgo+ID4gKwkgICAgaW50ZWxf Z2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmItPmZkKSkgPD0gMykgewo+ID4gKwkJdWludDY0X3Qg bWluX3NpemUgPSAodWludDY0X3QpIGZiLT5zdHJpZGVzW3BsYW5lXSAqCj4gPiArCQkJZmItPnBs YW5lX2hlaWdodFtwbGFuZV07Cj4gPiAgCQl1aW50NjRfdCBzaXplOwo+ID4gIAo+ID4gIAkJLyog Um91bmQgdGhlIHRpbGluZyB1cCB0byB0aGUgbmV4dCBwb3dlci1vZi10d28gYW5kCj4gPiB0aGUg cmVnaW9uCj4gPiBAQCAtMjg0LDM4ICszMDMsMjcgQEAgc3RhdGljIHVpbnQ2NF90IGNhbGNfcGxh bmVfc2l6ZShpbnQgZmQsIGludAo+ID4gd2lkdGgsIGludCBoZWlnaHQsCj4gPiAgCX0gZWxzZSB7 Cj4gPiAgCQl1bnNpZ25lZCBpbnQgdGlsZV93aWR0aCwgdGlsZV9oZWlnaHQ7Cj4gPiAgCj4gPiAt CQlpZ3RfZ2V0X2ZiX3RpbGVfc2l6ZShmZCwgdGlsaW5nLAo+ID4gZmJfcGxhbmVfYnBwKGZvcm1h dCwgcGxhbmUpLAo+ID4gKwkJaWd0X2dldF9mYl90aWxlX3NpemUoZmItPmZkLCBmYi0+dGlsaW5n LCBmYi0KPiA+ID5wbGFuZV9icHBbcGxhbmVdLAo+ID4gIAkJCQkgICAgICZ0aWxlX3dpZHRoLCAm dGlsZV9oZWlnaHQpOwo+ID4gIAo+ID4gLQkJcmV0dXJuICh1aW50NjRfdCkgc3RyaWRlICogQUxJ R04oaGVpZ2h0LAo+ID4gdGlsZV9oZWlnaHQpOwo+ID4gKwkJcmV0dXJuICh1aW50NjRfdCkgZmIt PnN0cmlkZXNbcGxhbmVdICoKPiA+ICsJCQlBTElHTihmYi0+cGxhbmVfaGVpZ2h0W3BsYW5lXSwg dGlsZV9oZWlnaHQpOwo+ID4gIAl9Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyB1aW50NjRfdCBj YWxjX2ZiX3NpemUoaW50IGZkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCj4gPiAtCQkJICAgICBj b25zdCBzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0Cj4gPiAqZm9ybWF0LAo+ID4gLQkJCSAgICAg dWludDY0X3QgdGlsaW5nLAo+ID4gLQkJCSAgICAgdWludDMyX3Qgc3RyaWRlc1s0XSwgdWludDMy X3QKPiA+IG9mZnNldHNbNF0pCj4gPiArc3RhdGljIHVpbnQ2NF90IGNhbGNfZmJfc2l6ZShzdHJ1 Y3QgaWd0X2ZiICpmYikKPiA+ICB7Cj4gPiAgCXVpbnQ2NF90IHNpemUgPSAwOwo+ID4gIAlpbnQg cGxhbmU7Cj4gPiAgCj4gPiAtCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IGZiX251bV9wbGFuZXMo Zm9ybWF0KTsgcGxhbmUrKykgewo+ID4gLQkJaWYgKCFzdHJpZGVzW3BsYW5lXSkKPiA+IC0JCQlz dHJpZGVzW3BsYW5lXSA9IGNhbGNfcGxhbmVfc3RyaWRlKGZkLAo+ID4gZm9ybWF0LAo+ID4gLQkJ CQkJCQkgICB3aWR0aCwKPiA+IHRpbGluZywgcGxhbmUpOwo+ID4gKwlmb3IgKHBsYW5lID0gMDsg cGxhbmUgPCBmYi0+bnVtX3BsYW5lczsgcGxhbmUrKykgewo+ID4gKwkJLyogcmVzcGVjdCB0aGUg c3RyaWRlIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyICovCj4gPiArCQlpZiAoIWZiLT5zdHJpZGVz W3BsYW5lXSkKPiA+ICsJCQlmYi0+c3RyaWRlc1twbGFuZV0gPSBjYWxjX3BsYW5lX3N0cmlkZShm YiwKPiA+IHBsYW5lKTsKPiA+ICAKPiA+IC0JCWlmIChvZmZzZXRzKQo+ID4gLQkJCW9mZnNldHNb cGxhbmVdID0gc2l6ZTsKPiA+ICsJCWZiLT5vZmZzZXRzW3BsYW5lXSA9IHNpemU7Cj4gPiAgCj4g PiAtCQlzaXplICs9IGNhbGNfcGxhbmVfc2l6ZShmZCwgd2lkdGgsIGhlaWdodCwKPiA+IC0JCQkJ CWZvcm1hdCwgdGlsaW5nLCBwbGFuZSwKPiA+IC0JCQkJCXN0cmlkZXNbcGxhbmVdKTsKPiA+IC0J fQo+ID4gLQo+ID4gLQlmb3IgKDsgcGxhbmUgPCBBUlJBWV9TSVpFKGZvcm1hdC0+cGxhbmVfYnBw KTsgcGxhbmUrKykgewo+ID4gLQkJc3RyaWRlc1twbGFuZV0gPSAwOwo+ID4gLQkJaWYgKG9mZnNl dHMpCj4gPiAtCQkJb2Zmc2V0c1twbGFuZV0gPSAwOwo+ID4gKwkJc2l6ZSArPSBjYWxjX3BsYW5l X3NpemUoZmIsIHBsYW5lKTsKPiA+ICAJfQo+ID4gIAo+ID4gIAlyZXR1cm4gc2l6ZTsKPiA+IEBA IC0zMzcsMTMgKzM0NSwxNyBAQCBzdGF0aWMgdWludDY0X3QgY2FsY19mYl9zaXplKGludCBmZCwg aW50IHdpZHRoLAo+ID4gaW50IGhlaWdodCwKPiA+ICB2b2lkIGlndF9jYWxjX2ZiX3NpemUoaW50 IGZkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90Cj4gPiBkcm1fZm9ybWF0LCB1aW50 NjRfdCB0aWxpbmcsCj4gPiAgCQkgICAgICB1aW50NjRfdCAqc2l6ZV9yZXQsIHVuc2lnbmVkICpz dHJpZGVfcmV0KQo+ID4gIHsKPiA+IC0JY29uc3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAq Zm9ybWF0ID0KPiA+IGxvb2t1cF9kcm1fZm9ybWF0KGRybV9mb3JtYXQpOwo+ID4gLQl1aW50MzJf dCBzdHJpZGVzWzRdID0ge307Cj4gPiArCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gPiAgCj4gPiAtCWln dF9hc3NlcnQoZm9ybWF0KTsKPiA+ICsJZmJfaW5pdCgmZmIsIGZkLCB3aWR0aCwgaGVpZ2h0LCBk cm1fZm9ybWF0LCB0aWxpbmcsCj4gPiArCQlJR1RfQ09MT1JfWUNCQ1JfQlQ3MDksCj4gPiBJR1Rf Q09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSk7Cj4gPiAgCj4gPiAtCSpzaXplX3JldCA9IGNhbGNf ZmJfc2l6ZShmZCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0aWxpbmcsCj4gPiBzdHJpZGVzLCBO VUxMKTsKPiA+IC0JKnN0cmlkZV9yZXQgPSBzdHJpZGVzWzBdOwo+ID4gKwlmYi5zaXplID0gY2Fs Y19mYl9zaXplKCZmYik7Cj4gPiArCj4gPiArCWlmIChzaXplX3JldCkKPiA+ICsJCSpzaXplX3Jl dCA9IGZiLnNpemU7Cj4gPiArCWlmIChzdHJpZGVfcmV0KQo+ID4gKwkJKnN0cmlkZV9yZXQgPSBm Yi5zdHJpZGVzWzBdOwo+ID4gIH0KPiA+ICAKPiA+ICAvKioKPiA+IEBAIC0zOTksODAgKzQxMSw2 NCBAQCB1aW50NjRfdCBpZ3RfZmJfdGlsaW5nX3RvX21vZCh1aW50NjRfdCB0aWxpbmcpCj4gPiAg fQo+ID4gIAo+ID4gIC8qIGhlbHBlcnMgdG8gY3JlYXRlIG5pY2UtbG9va2luZyBmcmFtZWJ1ZmZl cnMgKi8KPiA+IC1zdGF0aWMgaW50IGNyZWF0ZV9ib19mb3JfZmIoaW50IGZkLCBpbnQgd2lkdGgs IGludCBoZWlnaHQsCj4gPiAtCQkJICAgIGVudW0gaWd0X2NvbG9yX2VuY29kaW5nIGNvbG9yX2Vu Y29kaW5nLAo+ID4gLQkJCSAgICBlbnVtIGlndF9jb2xvcl9yYW5nZSBjb2xvcl9yYW5nZSwKPiA+ IC0JCQkgICAgY29uc3Qgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0LAo+ID4gLQkJ CSAgICB1aW50NjRfdCB0aWxpbmcsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkCj4gPiBzdHJpZGUs Cj4gPiAtCQkJICAgIHVpbnQ2NF90ICpzaXplX3JldCwgdW5zaWduZWQKPiA+ICpzdHJpZGVfcmV0 LAo+ID4gLQkJCSAgICB1aW50MzJfdCBvZmZzZXRzWzRdLCBib29sICppc19kdW1iKQo+ID4gK3N0 YXRpYyBpbnQgY3JlYXRlX2JvX2Zvcl9mYihzdHJ1Y3QgaWd0X2ZiICpmYikKPiA+ICB7Cj4gPiAt CWludCBibzsKPiA+ICsJaW50IGZkID0gZmItPmZkOwo+ID4gIAo+ID4gLQlpZ3RfYXNzZXJ0KGZv cm1hdCk7Cj4gPiArCWlmIChmYi0+dGlsaW5nIHx8IGZiLT5zaXplIHx8IGZiLT5zdHJpZGVzWzBd IHx8Cj4gPiBpZ3RfZm9ybWF0X2lzX3l1dihmYi0+ZHJtX2Zvcm1hdCkpIHsKPiA+ICsJCXVpbnQ2 NF90IHNpemU7Cj4gPiAgCj4gPiAtCWlmIChvZmZzZXRzKQo+ID4gLQkJbWVtc2V0KG9mZnNldHMs IDAsIEFSUkFZX1NJWkUoZm9ybWF0LT5wbGFuZV9icHApICoKPiA+IHNpemVvZigqb2Zmc2V0cykp Owo+ID4gKwkJc2l6ZSA9IGNhbGNfZmJfc2l6ZShmYik7Cj4gPiAgCj4gPiAtCWlmICh0aWxpbmcg fHwgc2l6ZSB8fCBzdHJpZGUgfHwgaWd0X2Zvcm1hdF9pc195dXYoZm9ybWF0LQo+ID4gPmRybV9p ZCkpIHsKPiA+IC0JCXVpbnQ2NF90IGNhbGN1bGF0ZWRfc2l6ZTsKPiA+IC0JCXVpbnQzMl90IHN0 cmlkZXNbNF0gPSB7Cj4gPiAtCQkJc3RyaWRlLAo+ID4gLQkJfTsKPiA+ICsJCS8qIHJlc3BlY3Qg dGhlIHNpemUgcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIgKi8KPiA+ICsJCWlmIChmYi0+c2l6ZSA9 PSAwKQo+ID4gKwkJCWZiLT5zaXplID0gc2l6ZTsKPiA+ICAKPiA+IC0JCWNhbGN1bGF0ZWRfc2l6 ZSA9IGNhbGNfZmJfc2l6ZShmZCwgd2lkdGgsIGhlaWdodCwKPiA+IC0JCQkJCSAgICAgICBmb3Jt YXQsIHRpbGluZywKPiA+IC0JCQkJCSAgICAgICBzdHJpZGVzLCBvZmZzZXRzKTsKPiA+IC0KPiA+ IC0JCWlmIChzdHJpZGUgPT0gMCkKPiA+IC0JCQlzdHJpZGUgPSBzdHJpZGVzWzBdOwo+ID4gLQkJ aWYgKHNpemUgPT0gMCkKPiA+IC0JCQlzaXplID0gY2FsY3VsYXRlZF9zaXplOwo+ID4gLQo+ID4g LQkJaWYgKGlzX2R1bWIpCj4gPiAtCQkJKmlzX2R1bWIgPSBmYWxzZTsKPiA+ICsJCWZiLT5pc19k dW1iID0gZmFsc2U7Cj4gPiAgCj4gPiAgCQlpZiAoaXNfaTkxNV9kZXZpY2UoZmQpKSB7Cj4gPiAg CQkJdm9pZCAqcHRyOwo+ID4gLQkJCWJvb2wgZnVsbF9yYW5nZSA9IGNvbG9yX3JhbmdlID09Cj4g PiBJR1RfQ09MT1JfWUNCQ1JfRlVMTF9SQU5HRTsKPiA+ICsJCQlib29sIGZ1bGxfcmFuZ2UgPSBm Yi0+Y29sb3JfcmFuZ2UgPT0KPiA+IElHVF9DT0xPUl9ZQ0JDUl9GVUxMX1JBTkdFOwo+ID4gIAo+ ID4gLQkJCWJvID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZSk7Cj4gPiAtCQkJZ2VtX3NldF90aWxpbmco ZmQsIGJvLAo+ID4gaWd0X2ZiX21vZF90b190aWxpbmcodGlsaW5nKSwgc3RyaWRlKTsKPiA+ICsJ CQlmYi0+Z2VtX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIGZiLT5zaXplKTsKPiA+ICAKPiA+IC0J CQlnZW1fc2V0X2RvbWFpbihmZCwgYm8sCj4gPiArCQkJZ2VtX3NldF90aWxpbmcoZmQsIGZiLT5n ZW1faGFuZGxlLAo+ID4gKwkJCQkgICAgICAgaWd0X2ZiX21vZF90b190aWxpbmcoZmItCj4gPiA+ dGlsaW5nKSwKPiA+ICsJCQkJICAgICAgIGZiLT5zdHJpZGVzWzBdKTsKPiA+ICsKPiA+ICsJCQln ZW1fc2V0X2RvbWFpbihmZCwgZmItPmdlbV9oYW5kbGUsCj4gPiAgCQkJCSAgICAgICBJOTE1X0dF TV9ET01BSU5fR1RULAo+ID4gSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4gPiAgCj4gPiAgCQkJLyog RW5zdXJlIHRoZSBmcmFtZWJ1ZmZlciBpcyBwcmVhbGxvY2F0ZWQgKi8KPiA+IC0JCQlwdHIgPSBn ZW1fbW1hcF9fZ3R0KGZkLCBibywgc2l6ZSwgUFJPVF9SRUFECj4gPiB8IFBST1RfV1JJVEUpOwo+ ID4gKwkJCXB0ciA9IGdlbV9tbWFwX19ndHQoZmQsIGZiLT5nZW1faGFuZGxlLAo+ID4gKwkJCQkJ ICAgIGZiLT5zaXplLCBQUk9UX1JFQUQgfAo+ID4gUFJPVF9XUklURSk7Cj4gPiAgCQkJaWd0X2Fz c2VydCgqKHVpbnQzMl90ICopcHRyID09IDApOwo+ID4gIAo+ID4gLQkJCXN3aXRjaCAoZm9ybWF0 LT5kcm1faWQpIHsKPiA+ICsJCQlzd2l0Y2ggKGZiLT5kcm1fZm9ybWF0KSB7Cj4gPiAgCQkJY2Fz ZSBEUk1fRk9STUFUX05WMTI6Cj4gPiAtCQkJCW1lbXNldChwdHIgKyBvZmZzZXRzWzBdLCBmdWxs X3JhbmdlCj4gPiA/IDB4MDAgOiAweDEwLAo+ID4gLQkJCQkgICAgICAgc3RyaWRlc1swXSAqIGhl aWdodCk7Cj4gPiAtCQkJCW1lbXNldChwdHIgKyBvZmZzZXRzWzFdLCAweDgwLAo+ID4gLQkJCQkg ICAgICAgc3RyaWRlc1sxXSAqIGhlaWdodC8yKTsKPiA+ICsJCQkJbWVtc2V0KHB0ciArIGZiLT5v ZmZzZXRzWzBdLAo+ID4gKwkJCQkgICAgICAgZnVsbF9yYW5nZSA/IDB4MDAgOiAweDEwLAo+ID4g KwkJCQkgICAgICAgZmItPnN0cmlkZXNbMF0gKiBmYi0KPiA+ID5wbGFuZV9oZWlnaHRbMF0pOwo+ ID4gKwkJCQltZW1zZXQocHRyICsgZmItPm9mZnNldHNbMV0sCj4gPiArCQkJCSAgICAgICAweDgw LAo+ID4gKwkJCQkgICAgICAgZmItPnN0cmlkZXNbMV0gKiBmYi0KPiA+ID5wbGFuZV9oZWlnaHRb MV0pOwo+ID4gIAkJCQlicmVhazsKPiA+ICAJCQljYXNlIERSTV9GT1JNQVRfWVVZVjoKPiA+ICAJ CQljYXNlIERSTV9GT1JNQVRfWVZZVToKPiA+IC0JCQkJd21lbXNldChwdHIsIGZ1bGxfcmFuZ2Ug PyAweDgwMDA4MDAwCj4gPiA6IDB4ODAxMDgwMTAsCj4gPiAtCQkJCQlzdHJpZGVzWzBdICogaGVp Z2h0IC8KPiA+IHNpemVvZih3Y2hhcl90KSk7Cj4gPiArCQkJCXdtZW1zZXQocHRyICsgZmItPm9m ZnNldHNbMF0sCj4gPiArCQkJCQlmdWxsX3JhbmdlID8gMHg4MDAwODAwMCA6Cj4gPiAweDgwMTA4 MDEwLAo+ID4gKwkJCQkJZmItPnN0cmlkZXNbMF0gKiBmYi0KPiA+ID5wbGFuZV9oZWlnaHRbMF0g LyBzaXplb2Yod2NoYXJfdCkpOwo+ID4gIAkJCQlicmVhazsKPiA+ICAJCQljYXNlIERSTV9GT1JN QVRfVVlWWToKPiA+ICAJCQljYXNlIERSTV9GT1JNQVRfVllVWToKPiA+IC0JCQkJd21lbXNldChw dHIsIGZ1bGxfcmFuZ2UgPyAweDAwODAwMDgwCj4gPiA6IDB4MTA4MDEwODAsCj4gPiAtCQkJCQlz dHJpZGVzWzBdICogaGVpZ2h0IC8KPiA+IHNpemVvZih3Y2hhcl90KSk7Cj4gPiArCQkJCXdtZW1z ZXQocHRyICsgZmItPm9mZnNldHNbMF0sCj4gPiArCQkJCQlmdWxsX3JhbmdlID8gMHgwMDgwMDA4 MCA6Cj4gPiAweDEwODAxMDgwLAo+ID4gKwkJCQkJZmItPnN0cmlkZXNbMF0gKiBmYi0KPiA+ID5w bGFuZV9oZWlnaHRbMF0gLyBzaXplb2Yod2NoYXJfdCkpOwo+ID4gIAkJCQlicmVhazsKPiA+ICAJ CQl9Cj4gPiAtCQkJZ2VtX211bm1hcChwdHIsIHNpemUpOwo+ID4gKwkJCWdlbV9tdW5tYXAocHRy LCBmYi0+c2l6ZSk7Cj4gPiAgCj4gPiAtCQkJaWYgKHNpemVfcmV0KQo+ID4gLQkJCQkqc2l6ZV9y ZXQgPSBzaXplOwo+ID4gLQo+ID4gLQkJCWlmIChzdHJpZGVfcmV0KQo+ID4gLQkJCQkqc3RyaWRl X3JldCA9IHN0cmlkZXNbMF07Cj4gPiAtCj4gPiAtCQkJcmV0dXJuIGJvOwo+ID4gKwkJCXJldHVy biBmYi0+Z2VtX2hhbmRsZTsKPiA+ICAJCX0gZWxzZSB7Cj4gPiAgCQkJYm9vbCBkcml2ZXJfaGFz X2dlbV9hcGkgPSBmYWxzZTsKPiA+ICAKPiA+IEBAIC00ODAsMTIgKzQ3NiwxMyBAQCBzdGF0aWMg aW50IGNyZWF0ZV9ib19mb3JfZmIoaW50IGZkLCBpbnQgd2lkdGgsCj4gPiBpbnQgaGVpZ2h0LAo+ ID4gIAkJCXJldHVybiAtRUlOVkFMOwo+ID4gIAkJfQo+ID4gIAl9IGVsc2Ugewo+ID4gLQkJaWYg KGlzX2R1bWIpCj4gPiAtCQkJKmlzX2R1bWIgPSB0cnVlOwo+ID4gKwkJZmItPmlzX2R1bWIgPSB0 cnVlOwo+ID4gIAo+ID4gLQkJcmV0dXJuIGttc3Rlc3RfZHVtYl9jcmVhdGUoZmQsIHdpZHRoLCBo ZWlnaHQsCj4gPiAtCQkJCQkgICBmYl9wbGFuZV9icHAoZm9ybWF0LCAwKSwKPiA+IC0JCQkJCSAg IHN0cmlkZV9yZXQsIHNpemVfcmV0KTsKPiA+ICsJCWZiLT5nZW1faGFuZGxlID0ga21zdGVzdF9k dW1iX2NyZWF0ZShmZCwgZmItPndpZHRoLAo+ID4gZmItPmhlaWdodCwKPiA+ICsJCQkJCQkgICAg IGZiLQo+ID4gPnBsYW5lX2JwcFswXSwKPiA+ICsJCQkJCQkgICAgICZmYi0KPiA+ID5zdHJpZGVz WzBdLCAmZmItPnNpemUpOwo+ID4gKwo+ID4gKwkJcmV0dXJuIGZiLT5nZW1faGFuZGxlOwo+ID4g IAl9Cj4gPiAgfQo+ID4gIAo+ID4gQEAgLTUxMiwxMSArNTA5LDI0IEBAIGludCBpZ3RfY3JlYXRl X2JvX3dpdGhfZGltZW5zaW9ucyhpbnQgZmQsIGludAo+ID4gd2lkdGgsIGludCBoZWlnaHQsCj4g PiAgCQkJCSAgdW5zaWduZWQgc3RyaWRlLCB1aW50NjRfdAo+ID4gKnNpemVfcmV0LAo+ID4gIAkJ CQkgIHVuc2lnbmVkICpzdHJpZGVfcmV0LCBib29sCj4gPiAqaXNfZHVtYikKPiA+ICB7Cj4gPiAt CXJldHVybiBjcmVhdGVfYm9fZm9yX2ZiKGZkLCB3aWR0aCwgaGVpZ2h0LAo+ID4gLQkJCQlJR1Rf Q09MT1JfWUNCQ1JfQlQ3MDksCj4gPiAtCQkJCUlHVF9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdF LAo+ID4gLQkJCQlsb29rdXBfZHJtX2Zvcm1hdChmb3JtYXQpLAo+ID4gLQkJCQltb2RpZmllciwg MCwgc3RyaWRlLCBzaXplX3JldCwKPiA+IHN0cmlkZV9yZXQsIE5VTEwsIGlzX2R1bWIpOwo+ID4g KwlzdHJ1Y3QgaWd0X2ZiIGZiOwo+ID4gKwo+ID4gKwlmYl9pbml0KCZmYiwgZmQsIHdpZHRoLCBo ZWlnaHQsIGZvcm1hdCwgbW9kaWZpZXIsCj4gPiArCQlJR1RfQ09MT1JfWUNCQ1JfQlQ3MDksCj4g PiBJR1RfQ09MT1JfWUNCQ1JfTElNSVRFRF9SQU5HRSk7Cj4gPiArCj4gPiArCWZvciAoaW50IGkg PSAwOyBpIDwgZmIubnVtX3BsYW5lczsgaSsrKQo+ID4gKwkJZmIuc3RyaWRlc1tpXSA9IHN0cmlk ZTsKPiA+ICsKPiA+ICsJY3JlYXRlX2JvX2Zvcl9mYigmZmIpOwo+ID4gKwo+ID4gKwlpZiAoc2l6 ZV9yZXQpCj4gPiArCQkqc2l6ZV9yZXQgPSBmYi5zaXplOwo+ID4gKwlpZiAoc3RyaWRlX3JldCkK PiA+ICsJCSpzdHJpZGVfcmV0ID0gZmIuc3RyaWRlc1swXTsKPiA+ICsJaWYgKGlzX2R1bWIpCj4g PiArCQkqaXNfZHVtYiA9IGZiLmlzX2R1bWI7Cj4gPiArCj4gPiArCXJldHVybiBmYi5nZW1faGFu ZGxlOwo+ID4gIH0KPiA+ICAKPiA+ICAvKioKPiA+IEBAIC04NjAsNTIgKzg3MCwzMiBAQCBpZ3Rf Y3JlYXRlX2ZiX3dpdGhfYm9fc2l6ZShpbnQgZmQsIGludCB3aWR0aCwKPiA+IGludCBoZWlnaHQs Cj4gPiAgCS8qIEZJWE1FIGFsbG93IHRoZSBjYWxsZXIgdG8gcGFzcyB0aGVzZSBpbiAqLwo+ID4g IAllbnVtIGlndF9jb2xvcl9lbmNvZGluZyBjb2xvcl9lbmNvZGluZyA9Cj4gPiBJR1RfQ09MT1Jf WUNCQ1JfQlQ3MDk7Cj4gPiAgCWVudW0gaWd0X2NvbG9yX3JhbmdlIGNvbG9yX3JhbmdlID0KPiA+ IElHVF9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFOwo+ID4gLQljb25zdCBzdHJ1Y3QgZm9ybWF0 X2Rlc2Nfc3RydWN0ICpmID0KPiA+IGxvb2t1cF9kcm1fZm9ybWF0KGZvcm1hdCk7Cj4gPiAtCXVp bnQzMl90IHBpdGNoZXNbNF07Cj4gPiAtCXVpbnQzMl90IGZiX2lkOwo+ID4gLQlpbnQgaTsKPiA+ ICAKPiA+IC0JaWd0X2Fzc2VydF9mKGYsICJEUk0gZm9ybWF0ICUwOHggbm90IGZvdW5kXG4iLCBm b3JtYXQpOwo+ID4gKwlmYl9pbml0KGZiLCBmZCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0aWxp bmcsCj4gPiArCQljb2xvcl9lbmNvZGluZywgY29sb3JfcmFuZ2UpOwo+ID4gIAo+ID4gLQltZW1z ZXQoZmIsIDAsIHNpemVvZigqZmIpKTsKPiA+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBmYi0+bnVt X3BsYW5lczsgaSsrKQo+ID4gKwkJZmItPnN0cmlkZXNbaV0gPSBib19zdHJpZGU7Cj4gPiArCj4g PiArCWZiLT5zaXplID0gYm9fc2l6ZTsKPiA+ICAKPiA+ICAJaWd0X2RlYnVnKCIlcyh3aWR0aD0l ZCwgaGVpZ2h0PSVkLCBmb3JtYXQ9MHgleCwKPiA+IHRpbGluZz0weCUiUFJJeDY0Iiwgc2l6ZT0l IlBSSXU2NCIpXG4iLAo+ID4gIAkJICBfX2Z1bmNfXywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0 aWxpbmcsIGJvX3NpemUpOwo+ID4gLQlmYi0+Z2VtX2hhbmRsZSA9IGNyZWF0ZV9ib19mb3JfZmIo ZmQsIHdpZHRoLCBoZWlnaHQsCj4gPiAtCQkJCQkgIGNvbG9yX2VuY29kaW5nLAo+ID4gY29sb3Jf cmFuZ2UsCj4gPiAtCQkJCQkgIGYsIHRpbGluZywgYm9fc2l6ZSwKPiA+IGJvX3N0cmlkZSwKPiA+ IC0JCQkJCSAgJmZiLT5zaXplLCAmZmItPnN0cmlkZSwKPiA+IC0JCQkJCSAgZmItPm9mZnNldHMs ICZmYi0KPiA+ID5pc19kdW1iKTsKPiA+ICsKPiA+ICsJY3JlYXRlX2JvX2Zvcl9mYihmYik7Cj4g PiAgCWlndF9hc3NlcnQoZmItPmdlbV9oYW5kbGUgPiAwKTsKPiA+ICAKPiA+ICAJaWd0X2RlYnVn KCIlcyhoYW5kbGU9JWQsIHBpdGNoPSVkKVxuIiwKPiA+IC0JCSAgX19mdW5jX18sIGZiLT5nZW1f aGFuZGxlLCBmYi0+c3RyaWRlKTsKPiA+ICsJCSAgX19mdW5jX18sIGZiLT5nZW1faGFuZGxlLCBm Yi0+c3RyaWRlc1swXSk7Cj4gPiAgCj4gPiAtCWZvciAoaSA9IDA7IGkgPCBmYl9udW1fcGxhbmVz KGYpOyBpKyspCj4gPiAtCQlwaXRjaGVzW2ldID0gZmItPnN0cmlkZTsKPiA+ICsJZG9fb3JfZGll KF9fa21zX2FkZGZiKGZiLT5mZCwgZmItPmdlbV9oYW5kbGUsCj4gPiArCQkJICAgICAgZmItPndp ZHRoLCBmYi0+aGVpZ2h0LAo+ID4gKwkJCSAgICAgIGZiLT5kcm1fZm9ybWF0LCBmYi0+dGlsaW5n LAo+ID4gKwkJCSAgICAgIGZiLT5zdHJpZGVzLCBmYi0+b2Zmc2V0cywgZmItCj4gPiA+bnVtX3Bs YW5lcywKPiA+ICsJCQkgICAgICBMT0NBTF9EUk1fTU9ERV9GQl9NT0RJRklFUlMsCj4gPiArCQkJ ICAgICAgJmZiLT5mYl9pZCkpOwo+ID4gIAo+ID4gLQlkb19vcl9kaWUoX19rbXNfYWRkZmIoZmQs IGZiLT5nZW1faGFuZGxlLCB3aWR0aCwgaGVpZ2h0LAo+ID4gLQkJCSAgICAgIGZvcm1hdCwgdGls aW5nLCBwaXRjaGVzLCBmYi0+b2Zmc2V0cywKPiA+IC0JCQkgICAgICBmYl9udW1fcGxhbmVzKGYp LAo+ID4gLQkJCSAgICAgIExPQ0FMX0RSTV9NT0RFX0ZCX01PRElGSUVSUywgJmZiX2lkKSk7Cj4g PiAtCj4gPiAtCWZiLT53aWR0aCA9IHdpZHRoOwo+ID4gLQlmYi0+aGVpZ2h0ID0gaGVpZ2h0Owo+ ID4gLQlmYi0+dGlsaW5nID0gdGlsaW5nOwo+ID4gLQlmYi0+ZHJtX2Zvcm1hdCA9IGZvcm1hdDsK PiA+IC0JZmItPmZiX2lkID0gZmJfaWQ7Cj4gPiAtCWZiLT5mZCA9IGZkOwo+ID4gLQlmYi0+bnVt X3BsYW5lcyA9IGZiX251bV9wbGFuZXMoZik7Cj4gPiAtCWZiLT5jb2xvcl9lbmNvZGluZyA9IGNv bG9yX2VuY29kaW5nOwo+ID4gLQlmYi0+Y29sb3JfcmFuZ2UgPSBjb2xvcl9yYW5nZTsKPiA+IC0K PiA+IC0JZm9yIChpID0gMDsgaSA8IGZiX251bV9wbGFuZXMoZik7IGkrKykgewo+ID4gLQkJZmIt PnBsYW5lX2JwcFtpXSA9IGZiX3BsYW5lX2JwcChmLCBpKTsKPiA+IC0JCWZiLT5wbGFuZV9oZWln aHRbaV0gPSBmYl9wbGFuZV9oZWlnaHQoZiwgaGVpZ2h0LCBpKTsKPiA+IC0JCWZiLT5wbGFuZV93 aWR0aFtpXSA9IGZiX3BsYW5lX3dpZHRoKGYsIHdpZHRoLCBpKTsKPiA+IC0JfQo+ID4gLQo+ID4g LQlyZXR1cm4gZmJfaWQ7Cj4gPiArCXJldHVybiBmYi0+ZmJfaWQ7Cj4gPiAgfQo+ID4gIAo+ID4g IC8qKgo+ID4gQEAgLTEyMTEsMTIgKzEyMDEsOCBAQCBzdGF0aWMgY2Fpcm9fZm9ybWF0X3QKPiA+ IGRybV9mb3JtYXRfdG9fY2Fpcm8odWludDMyX3QgZHJtX2Zvcm1hdCkKPiA+ICB9Cj4gPiAgCj4g PiAgc3RydWN0IGZiX2JsaXRfbGluZWFyIHsKPiA+IC0JdWludDY0X3Qgc2l6ZTsKPiA+IC0JdWlu dDMyX3QgaGFuZGxlOwo+ID4gLQl1bnNpZ25lZCBpbnQgc3RyaWRlOwo+ID4gKwlzdHJ1Y3QgaWd0 X2ZiIGZiOwo+ID4gIAl1aW50OF90ICptYXA7Cj4gPiAtCWJvb2wgaXNfZHVtYjsKPiA+IC0JdWlu dDMyX3Qgb2Zmc2V0c1s0XTsKPiA+ICB9Owo+ID4gIAo+ID4gIHN0cnVjdCBmYl9ibGl0X3VwbG9h ZCB7Cj4gPiBAQCAtMTIzMywyNyArMTIxOSwyNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2xpbmVhcl9t YXBwaW5nKHN0cnVjdAo+ID4gZmJfYmxpdF91cGxvYWQgKmJsaXQpCj4gPiAgCXVuc2lnbmVkIGlu dCBvYmpfdGlsaW5nID0gaWd0X2ZiX21vZF90b190aWxpbmcoZmItPnRpbGluZyk7Cj4gPiAgCWlu dCBpOwo+ID4gIAo+ID4gLQlnZW1fbXVubWFwKGxpbmVhci0+bWFwLCBsaW5lYXItPnNpemUpOwo+ ID4gLQlnZW1fc2V0X2RvbWFpbihmZCwgbGluZWFyLT5oYW5kbGUsCj4gPiArCWdlbV9tdW5tYXAo bGluZWFyLT5tYXAsIGxpbmVhci0+ZmIuc2l6ZSk7Cj4gPiArCWdlbV9zZXRfZG9tYWluKGZkLCBs aW5lYXItPmZiLmdlbV9oYW5kbGUsCj4gPiAgCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwg MCk7Cj4gPiAgCj4gPiAgCWZvciAoaSA9IDA7IGkgPCBmYi0+bnVtX3BsYW5lczsgaSsrKQo+ID4g IAkJaWd0X2JsaXR0ZXJfZmFzdF9jb3B5X19yYXcoZmQsCj4gPiAtCQkJCQkgICBsaW5lYXItPmhh bmRsZSwKPiA+IC0JCQkJCSAgIGxpbmVhci0+b2Zmc2V0c1tpXSwKPiA+IC0JCQkJCSAgIGxpbmVh ci0+c3RyaWRlLAo+ID4gKwkJCQkJICAgbGluZWFyLT5mYi5nZW1faGFuZGxlLAo+ID4gKwkJCQkJ ICAgbGluZWFyLT5mYi5vZmZzZXRzW2ldLAo+ID4gKwkJCQkJICAgbGluZWFyLT5mYi5zdHJpZGVz W2ldLAo+ID4gIAkJCQkJICAgSTkxNV9USUxJTkdfTk9ORSwKPiA+ICAJCQkJCSAgIDAsIDAsIC8q IHNyY194LCBzcmNfeSAqLwo+ID4gIAkJCQkJICAgZmItPnBsYW5lX3dpZHRoW2ldLCBmYi0KPiA+ ID5wbGFuZV9oZWlnaHRbaV0sCj4gPiAgCQkJCQkgICBmYi0+cGxhbmVfYnBwW2ldLAo+ID4gIAkJ CQkJICAgZmItPmdlbV9oYW5kbGUsCj4gPiAgCQkJCQkgICBmYi0+b2Zmc2V0c1tpXSwKPiA+IC0J CQkJCSAgIGZiLT5zdHJpZGUsCj4gPiArCQkJCQkgICBmYi0+c3RyaWRlc1tpXSwKPiA+ICAJCQkJ CSAgIG9ial90aWxpbmcsCj4gPiAgCQkJCQkgICAwLCAwIC8qIGRzdF94LCBkc3RfeSAqLyk7Cj4g PiAgCj4gPiAtCWdlbV9zeW5jKGZkLCBsaW5lYXItPmhhbmRsZSk7Cj4gPiAtCWdlbV9jbG9zZShm ZCwgbGluZWFyLT5oYW5kbGUpOwo+ID4gKwlnZW1fc3luYyhmZCwgbGluZWFyLT5mYi5nZW1faGFu ZGxlKTsKPiA+ICsJZ2VtX2Nsb3NlKGZkLCBsaW5lYXItPmZiLmdlbV9oYW5kbGUpOwo+ID4gIH0K PiA+ICAKPiA+ICBzdGF0aWMgdm9pZCBkZXN0cm95X2NhaXJvX3N1cmZhY2VfX2JsaXQodm9pZCAq YXJnKQo+ID4gQEAgLTEyNzcsNDIgKzEyNjMsNDIgQEAgc3RhdGljIHZvaWQgc2V0dXBfbGluZWFy X21hcHBpbmcoaW50IGZkLAo+ID4gc3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9ibGl0X2xp bmVhCj4gPiAgCSAqIGNhaXJvKS4gVGhpcyBsaW5lYXIgYm8gd2lsbCBiZSB0aGVuIGJsaXR0ZWQg dG8gaXRzIGZpbmFsCj4gPiAgCSAqIGRlc3RpbmF0aW9uLCB0aWxpbmcgaXQgYXQgdGhlIHNhbWUg dGltZS4KPiA+ICAJICovCj4gPiAtCWxpbmVhci0+aGFuZGxlID0gY3JlYXRlX2JvX2Zvcl9mYihm ZCwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAo+ID4gLQkJCQkJICBmYi0+Y29sb3JfZW5jb2Rpbmcs IGZiLQo+ID4gPmNvbG9yX3JhbmdlLAo+ID4gLQkJCQkJICBsb29rdXBfZHJtX2Zvcm1hdChmYi0K PiA+ID5kcm1fZm9ybWF0KSwKPiA+IC0JCQkJCSAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwK PiA+IDAsCj4gPiAtCQkJCQkgIDAsICZsaW5lYXItPnNpemUsCj4gPiAtCQkJCQkgICZsaW5lYXIt PnN0cmlkZSwKPiA+IC0JCQkJCSAgbGluZWFyLT5vZmZzZXRzLCAmbGluZWFyLQo+ID4gPmlzX2R1 bWIpOwo+ID4gIAo+ID4gLQlpZ3RfYXNzZXJ0KGxpbmVhci0+aGFuZGxlID4gMCk7Cj4gPiArCWZi X2luaXQoJmxpbmVhci0+ZmIsIGZiLT5mZCwgZmItPndpZHRoLCBmYi0+aGVpZ2h0LAo+ID4gKwkJ ZmItPmRybV9mb3JtYXQsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gPiArCQlmYi0+Y29s b3JfZW5jb2RpbmcsIGZiLT5jb2xvcl9yYW5nZSk7Cj4gPiArCj4gPiArCWNyZWF0ZV9ib19mb3Jf ZmIoJmxpbmVhci0+ZmIpOwo+ID4gKwo+ID4gKwlpZ3RfYXNzZXJ0KGxpbmVhci0+ZmIuZ2VtX2hh bmRsZSA+IDApOwo+ID4gIAo+ID4gIAkvKiBDb3B5IGZiIGNvbnRlbnQgdG8gbGluZWFyIEJPICov Cj4gPiAtCWdlbV9zZXRfZG9tYWluKGZkLCBsaW5lYXItPmhhbmRsZSwKPiA+ICsJZ2VtX3NldF9k b21haW4oZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwKPiA+ICAJCQlJOTE1X0dFTV9ET01BSU5f R1RULCAwKTsKPiA+ICAKPiA+ICAJZm9yIChpID0gMDsgaSA8IGZiLT5udW1fcGxhbmVzOyBpKysp Cj4gPiAgCQlpZ3RfYmxpdHRlcl9mYXN0X2NvcHlfX3JhdyhmZCwKPiA+IC0JCQkJCSAgZmItPmdl bV9oYW5kbGUsCj4gPiAtCQkJCQkgIGZiLT5vZmZzZXRzW2ldLAo+ID4gLQkJCQkJICBmYi0+c3Ry aWRlLAo+ID4gLQkJCQkJICBvYmpfdGlsaW5nLAo+ID4gLQkJCQkJICAwLCAwLCAvKiBzcmNfeCwg c3JjX3kgKi8KPiA+IC0JCQkJCSAgZmItPnBsYW5lX3dpZHRoW2ldLCBmYi0KPiA+ID5wbGFuZV9o ZWlnaHRbaV0sCj4gPiAtCQkJCQkgIGZiLT5wbGFuZV9icHBbaV0sCj4gPiAtCQkJCQkgIGxpbmVh ci0+aGFuZGxlLCBsaW5lYXItCj4gPiA+b2Zmc2V0c1tpXSwKPiA+IC0JCQkJCSAgbGluZWFyLT5z dHJpZGUsCj4gPiAtCQkJCQkgIEk5MTVfVElMSU5HX05PTkUsCj4gPiAtCQkJCQkgIDAsIDAgLyog ZHN0X3gsIGRzdF95ICovKTsKPiA+ICsJCQkJCSAgIGZiLT5nZW1faGFuZGxlLAo+ID4gKwkJCQkJ ICAgZmItPm9mZnNldHNbaV0sCj4gPiArCQkJCQkgICBmYi0+c3RyaWRlc1tpXSwKPiA+ICsJCQkJ CSAgIG9ial90aWxpbmcsCj4gPiArCQkJCQkgICAwLCAwLCAvKiBzcmNfeCwgc3JjX3kgKi8KPiA+ ICsJCQkJCSAgIGZiLT5wbGFuZV93aWR0aFtpXSwgZmItCj4gPiA+cGxhbmVfaGVpZ2h0W2ldLAo+ ID4gKwkJCQkJICAgZmItPnBsYW5lX2JwcFtpXSwKPiA+ICsJCQkJCSAgIGxpbmVhci0+ZmIuZ2Vt X2hhbmRsZSwKPiA+ICsJCQkJCSAgIGxpbmVhci0+ZmIub2Zmc2V0c1tpXSwKPiA+ICsJCQkJCSAg IGxpbmVhci0+ZmIuc3RyaWRlc1tpXSwKPiA+ICsJCQkJCSAgIEk5MTVfVElMSU5HX05PTkUsCj4g PiArCQkJCQkgICAwLCAwIC8qIGRzdF94LCBkc3RfeSAqLyk7Cj4gPiAgCj4gPiAtCWdlbV9zeW5j KGZkLCBsaW5lYXItPmhhbmRsZSk7Cj4gPiArCWdlbV9zeW5jKGZkLCBsaW5lYXItPmZiLmdlbV9o YW5kbGUpOwo+ID4gIAo+ID4gLQlnZW1fc2V0X2RvbWFpbihmZCwgbGluZWFyLT5oYW5kbGUsCj4g PiArCWdlbV9zZXRfZG9tYWluKGZkLCBsaW5lYXItPmZiLmdlbV9oYW5kbGUsCj4gPiAgCQkgICAg ICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gPiAgCj4gPiAg CS8qIFNldHVwIGNhaXJvIGNvbnRleHQgKi8KPiA+IC0JbGluZWFyLT5tYXAgPSBnZW1fbW1hcF9f Y3B1KGZkLCBsaW5lYXItPmhhbmRsZSwKPiA+IC0JCQkJICAgIDAsIGxpbmVhci0+c2l6ZSwgUFJP VF9SRUFEIHwKPiA+IFBST1RfV1JJVEUpOwo+ID4gKwlsaW5lYXItPm1hcCA9IGdlbV9tbWFwX19j cHUoZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwKPiA+ICsJCQkJICAgIDAsIGxpbmVhci0+ZmIu c2l6ZSwgUFJPVF9SRUFEIHwKPiA+IFBST1RfV1JJVEUpOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0 aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fYmxpdChpbnQgZmQsIHN0cnVjdCBpZ3RfZmIg KmZiKQo+ID4gQEAgLTEzMzIsNyArMTMxOCw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV9jYWlyb19z dXJmYWNlX19ibGl0KGludCBmZCwKPiA+IHN0cnVjdCBpZ3RfZmIgKmZiKQo+ID4gIAkJY2Fpcm9f aW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoYmxpdC0KPiA+ID5saW5lYXIubWFwLAo+ID4g IAkJCQkJCSAgICBjYWlyb19mb3JtYXQsCj4gPiAgCQkJCQkJICAgIGZiLT53aWR0aCwgZmItCj4g PiA+aGVpZ2h0LAo+ID4gLQkJCQkJCSAgICBibGl0LQo+ID4gPmxpbmVhci5zdHJpZGUpOwo+ID4g KwkJCQkJCSAgICBibGl0LQo+ID4gPmxpbmVhci5mYi5zdHJpZGVzWzBdKTsKPiA+ICAJZmItPmRv bWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9HVFQ7Cj4gPiAgCj4gPiAgCWNhaXJvX3N1cmZhY2Vfc2V0 X3VzZXJfZGF0YShmYi0+Y2Fpcm9fc3VyZmFjZSwKPiA+IEBAIC0xMzgyLDcgKzEzNjgsNyBAQCBz dGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3R0KGludCBmZCwKPiA+IHN0cnVjdCBp Z3RfZmIgKmZiKQo+ID4gIAlmYi0+Y2Fpcm9fc3VyZmFjZSA9Cj4gPiAgCQljYWlyb19pbWFnZV9z dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShwdHIsCj4gPiAgCQkJCQkJICAgIGRybV9mb3JtYXRfdG9f Y2EKPiA+IGlybyhmYi0+ZHJtX2Zvcm1hdCksCj4gPiAtCQkJCQkJICAgIGZiLT53aWR0aCwgZmIt Cj4gPiA+aGVpZ2h0LCBmYi0+c3RyaWRlKTsKPiA+ICsJCQkJCQkgICAgZmItPndpZHRoLCBmYi0K PiA+ID5oZWlnaHQsIGZiLT5zdHJpZGVzWzBdKTsKPiA+ICAJZmItPmRvbWFpbiA9IEk5MTVfR0VN X0RPTUFJTl9HVFQ7Cj4gPiAgCj4gPiAgCWNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShmYi0+ Y2Fpcm9fc3VyZmFjZSwKPiA+IEBAIC0xNDI1LDggKzE0MTEsOCBAQCBzdGF0aWMgdm9pZCBjb252 ZXJ0X252MTJfdG9fcmdiMjQoc3RydWN0IGlndF9mYgo+ID4gKmZiLCBzdHJ1Y3QgZmJfY29udmVy dF9ibGl0X3VwbG8KPiA+ICAJaW50IGksIGo7Cj4gPiAgCWNvbnN0IHVpbnQ4X3QgKnksICp1djsK PiA+ICAJdWludDhfdCAqcmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7Cj4gPiAtCXVuc2lnbmVkIHJn YjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0cmlkZSwgcGxhbmFyX3N0cmlkZSA9Cj4gPiBibGl0 LT5iYXNlLmxpbmVhci5zdHJpZGU7Cj4gPiAtCXVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhibGl0LT5i YXNlLmxpbmVhci5zaXplKTsKPiA+ICsJdW5zaWduZWQgcmdiMjRfc3RyaWRlID0gYmxpdC0+cmdi MjQuc3RyaWRlLCBwbGFuYXJfc3RyaWRlID0KPiA+IGJsaXQtPmJhc2UubGluZWFyLmZiLnN0cmlk ZXNbMF07Cj4gPiArCXVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhibGl0LT5iYXNlLmxpbmVhci5mYi5z aXplKTsKPiA+ICAJc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3RfeWNiY3JfdG9fcmdiX21hdHJpeChm Yi0KPiA+ID5jb2xvcl9lbmNvZGluZywKPiA+ICAJCQkJCQkgICAgZmItCj4gPiA+Y29sb3JfcmFu Z2UpOwo+ID4gIAo+ID4gQEAgLTE0MzUsOSArMTQyMSw5IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRf bnYxMl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiCj4gPiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2Js aXRfdXBsbwo+ID4gIAkgKiBpdCdzIGZhc3RlciB0byBjb3B5IHRoZSB3aG9sZSBCTyB0byBhIHRl bXBvcmFyeSBidWZmZXIKPiA+IGFuZCBjb252ZXJ0Cj4gPiAgCSAqIGZyb20gdGhlcmUuCj4gPiAg CSAqLwo+ID4gLQlpZ3RfbWVtY3B5X2Zyb21fd2MoYnVmLCBibGl0LT5iYXNlLmxpbmVhci5tYXAs IGJsaXQtCj4gPiA+YmFzZS5saW5lYXIuc2l6ZSk7Cj4gPiAtCXkgPSAmYnVmW2JsaXQtPmJhc2Uu bGluZWFyLm9mZnNldHNbMF1dOwo+ID4gLQl1diA9ICZidWZbYmxpdC0+YmFzZS5saW5lYXIub2Zm c2V0c1sxXV07Cj4gPiArCWlndF9tZW1jcHlfZnJvbV93YyhidWYsIGJsaXQtPmJhc2UubGluZWFy Lm1hcCwgYmxpdC0KPiA+ID5iYXNlLmxpbmVhci5mYi5zaXplKTsKPiA+ICsJeSA9ICZidWZbYmxp dC0+YmFzZS5saW5lYXIuZmIub2Zmc2V0c1swXV07Cj4gPiArCXV2ID0gJmJ1ZltibGl0LT5iYXNl LmxpbmVhci5mYi5vZmZzZXRzWzFdXTsKPiA+ICAKPiA+ICAJZm9yIChpID0gMDsgaSA8IGZiLT5o ZWlnaHQgLyAyOyBpKyspIHsKPiA+ICAJCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAyOyBq KyspIHsKPiA+IEBAIC0xNTMxLDExICsxNTE3LDExIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfbnYx Ml90b19yZ2IyNChzdHJ1Y3QKPiA+IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRf dXBsbwo+ID4gIHN0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9fbnYxMihzdHJ1Y3QgaWd0X2Zi ICpmYiwgc3RydWN0Cj4gPiBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkICpibGl0KQo+ID4gIHsKPiA+ ICAJaW50IGksIGo7Cj4gPiAtCXVpbnQ4X3QgKnkgPSAmYmxpdC0+YmFzZS5saW5lYXIubWFwW2Js aXQtCj4gPiA+YmFzZS5saW5lYXIub2Zmc2V0c1swXV07Cj4gPiAtCXVpbnQ4X3QgKnV2ID0gJmJs aXQtPmJhc2UubGluZWFyLm1hcFtibGl0LQo+ID4gPmJhc2UubGluZWFyLm9mZnNldHNbMV1dOwo+ ID4gKwl1aW50OF90ICp5ID0gJmJsaXQtPmJhc2UubGluZWFyLm1hcFtibGl0LQo+ID4gPmJhc2Uu bGluZWFyLmZiLm9mZnNldHNbMF1dOwo+ID4gKwl1aW50OF90ICp1diA9ICZibGl0LT5iYXNlLmxp bmVhci5tYXBbYmxpdC0KPiA+ID5iYXNlLmxpbmVhci5mYi5vZmZzZXRzWzFdXTsKPiA+ICAJY29u c3QgdWludDhfdCAqcmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7Cj4gPiAgCXVuc2lnbmVkIHJnYjI0 X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0cmlkZTsKPiA+IC0JdW5zaWduZWQgcGxhbmFyX3N0cmlk ZSA9IGJsaXQtPmJhc2UubGluZWFyLnN0cmlkZTsKPiA+ICsJdW5zaWduZWQgcGxhbmFyX3N0cmlk ZSA9IGJsaXQtPmJhc2UubGluZWFyLmZiLnN0cmlkZXNbMF07Cj4gPiAgCXN0cnVjdCBpZ3RfbWF0 NCBtID0gaWd0X3JnYl90b195Y2Jjcl9tYXRyaXgoZmItCj4gPiA+Y29sb3JfZW5jb2RpbmcsCj4g PiAgCQkJCQkJICAgIGZiLQo+ID4gPmNvbG9yX3JhbmdlKTsKPiA+ICAKPiA+IEBAIC0xNjYyLDgg KzE2NDgsOCBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3l1eXZfdG9fcmdiMjQoc3RydWN0IGlndF9m Ygo+ID4gKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG8KPiA+ICAJaW50IGksIGo7Cj4g PiAgCWNvbnN0IHVpbnQ4X3QgKnl1eXY7Cj4gPiAgCXVpbnQ4X3QgKnJnYjI0ID0gYmxpdC0+cmdi MjQubWFwOwo+ID4gLQl1bnNpZ25lZCByZ2IyNF9zdHJpZGUgPSBibGl0LT5yZ2IyNC5zdHJpZGUs IHl1eXZfc3RyaWRlID0KPiA+IGJsaXQtPmJhc2UubGluZWFyLnN0cmlkZTsKPiA+IC0JdWludDhf dCAqYnVmID0gbWFsbG9jKGJsaXQtPmJhc2UubGluZWFyLnNpemUpOwo+ID4gKwl1bnNpZ25lZCBy Z2IyNF9zdHJpZGUgPSBibGl0LT5yZ2IyNC5zdHJpZGUsIHl1eXZfc3RyaWRlID0KPiA+IGJsaXQt PmJhc2UubGluZWFyLmZiLnN0cmlkZXNbMF07Cj4gPiArCXVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhi bGl0LT5iYXNlLmxpbmVhci5mYi5zaXplKTsKPiA+ICAJc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3Rf eWNiY3JfdG9fcmdiX21hdHJpeChmYi0KPiA+ID5jb2xvcl9lbmNvZGluZywKPiA+ICAJCQkJCQkg ICAgZmItCj4gPiA+Y29sb3JfcmFuZ2UpOwo+ID4gIAo+ID4gQEAgLTE2NzIsNyArMTY1OCw3IEBA IHN0YXRpYyB2b2lkIGNvbnZlcnRfeXV5dl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiCj4gPiAqZmIs IHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwo+ID4gIAkgKiBpdCdzIGZhc3RlciB0byBjb3B5 IHRoZSB3aG9sZSBCTyB0byBhIHRlbXBvcmFyeSBidWZmZXIKPiA+IGFuZCBjb252ZXJ0Cj4gPiAg CSAqIGZyb20gdGhlcmUuCj4gPiAgCSAqLwo+ID4gLQlpZ3RfbWVtY3B5X2Zyb21fd2MoYnVmLCBi bGl0LT5iYXNlLmxpbmVhci5tYXAsIGJsaXQtCj4gPiA+YmFzZS5saW5lYXIuc2l6ZSk7Cj4gPiAr CWlndF9tZW1jcHlfZnJvbV93YyhidWYsIGJsaXQtPmJhc2UubGluZWFyLm1hcCwgYmxpdC0KPiA+ ID5iYXNlLmxpbmVhci5mYi5zaXplKTsKPiA+ICAJeXV5diA9IGJ1ZjsKPiA+ICAKPiA+ICAJZm9y IChpID0gMDsgaSA8IGZiLT5oZWlnaHQ7IGkrKykgewo+ID4gQEAgLTE3MjIsNyArMTcwOCw3IEBA IHN0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9feXV5dihzdHJ1Y3QgaWd0X2ZiCj4gPiAqZmIs IHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwo+ID4gIAl1aW50OF90ICp5dXl2ID0gYmxpdC0+ YmFzZS5saW5lYXIubWFwOwo+ID4gIAljb25zdCB1aW50OF90ICpyZ2IyNCA9IGJsaXQtPnJnYjI0 Lm1hcDsKPiA+ICAJdW5zaWduZWQgcmdiMjRfc3RyaWRlID0gYmxpdC0+cmdiMjQuc3RyaWRlOwo+ ID4gLQl1bnNpZ25lZCB5dXl2X3N0cmlkZSA9IGJsaXQtPmJhc2UubGluZWFyLnN0cmlkZTsKPiA+ ICsJdW5zaWduZWQgeXV5dl9zdHJpZGUgPSBibGl0LT5iYXNlLmxpbmVhci5mYi5zdHJpZGVzWzBd Owo+ID4gIAlzdHJ1Y3QgaWd0X21hdDQgbSA9IGlndF9yZ2JfdG9feWNiY3JfbWF0cml4KGZiLQo+ ID4gPmNvbG9yX2VuY29kaW5nLAo+ID4gIAkJCQkJCSAgICBmYi0KPiA+ID5jb2xvcl9yYW5nZSk7 Cj4gPiAgCj4gPiBAQCAtMTc5MSw3ICsxNzc3LDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9jYWly b19zdXJmYWNlX19jb252ZXJ0KHZvaWQKPiA+ICphcmcpCj4gPiAgCj4gPiAgCW11bm1hcChibGl0 LT5yZ2IyNC5tYXAsIGJsaXQtPnJnYjI0LnNpemUpOwo+ID4gIAo+ID4gLQlpZiAoYmxpdC0+YmFz ZS5saW5lYXIuaGFuZGxlKQo+ID4gKwlpZiAoYmxpdC0+YmFzZS5saW5lYXIuZmIuZ2VtX2hhbmRs ZSkKPiA+ICAJCWZyZWVfbGluZWFyX21hcHBpbmcoJmJsaXQtPmJhc2UpOwo+ID4gIAllbHNlCj4g PiAgCQlnZW1fbXVubWFwKGJsaXQtPmJhc2UubGluZWFyLm1hcCwgZmItPnNpemUpOwo+ID4gQEAg LTE4MTcsMTUgKzE4MDMsMTUgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2Nv bnZlcnQoaW50Cj4gPiBmZCwgc3RydWN0IGlndF9mYiAqZmIpCj4gPiAgCSAgICBmYi0+dGlsaW5n ID09IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkgewo+ID4gIAkJc2V0dXBfbGluZWFy X21hcHBpbmcoZmQsIGZiLCAmYmxpdC0+YmFzZS5saW5lYXIpOwo+ID4gIAl9IGVsc2Ugewo+ID4g LQkJYmxpdC0+YmFzZS5saW5lYXIuaGFuZGxlID0gMDsKPiA+ICsJCWJsaXQtPmJhc2UubGluZWFy LmZiLmdlbV9oYW5kbGUgPSAwOwo+ID4gIAkJZ2VtX3NldF9kb21haW4oZmQsIGZiLT5nZW1faGFu ZGxlLAo+ID4gIAkJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULAo+ID4gSTkxNV9HRU1fRE9N QUlOX0dUVCk7Cj4gPiAgCQlibGl0LT5iYXNlLmxpbmVhci5tYXAgPSBnZW1fbW1hcF9fZ3R0KGZk LCBmYi0KPiA+ID5nZW1faGFuZGxlLCBmYi0+c2l6ZSwKPiA+ICAJCQkJCQkgICAgICBQUk9UX1JF QUQgfAo+ID4gUFJPVF9XUklURSk7Cj4gPiAgCQlpZ3RfYXNzZXJ0KGJsaXQtPmJhc2UubGluZWFy Lm1hcCk7Cj4gPiAtCQlibGl0LT5iYXNlLmxpbmVhci5zdHJpZGUgPSBmYi0+c3RyaWRlOwo+ID4g LQkJYmxpdC0+YmFzZS5saW5lYXIuc2l6ZSA9IGZiLT5zaXplOwo+ID4gLQkJbWVtY3B5KGJsaXQt PmJhc2UubGluZWFyLm9mZnNldHMsIGZiLT5vZmZzZXRzLAo+ID4gc2l6ZW9mKGZiLT5vZmZzZXRz KSk7Cj4gPiArCQlibGl0LT5iYXNlLmxpbmVhci5mYi5zaXplID0gZmItPnNpemU7Cj4gPiArCQlt ZW1jcHkoYmxpdC0+YmFzZS5saW5lYXIuZmIuc3RyaWRlcywgZmItPnN0cmlkZXMsCj4gPiBzaXpl b2YoZmItPnN0cmlkZXMpKTsKPiA+ICsJCW1lbWNweShibGl0LT5iYXNlLmxpbmVhci5mYi5vZmZz ZXRzLCBmYi0+b2Zmc2V0cywKPiA+IHNpemVvZihmYi0+b2Zmc2V0cykpOwo+ID4gIAl9Cj4gPiAg Cj4gPiAgCS8qIENvbnZlcnQgdG8gbGluZWFyIHJnYiEgKi8KPiA+IGRpZmYgLS1naXQgYS9saWIv aWd0X2ZiLmggYi9saWIvaWd0X2ZiLmgKPiA+IGluZGV4IDIzNDNmZTUwNWYyOC4uMzViZjMwN2E5 MzBiIDEwMDY0NAo+ID4gLS0tIGEvbGliL2lndF9mYi5oCj4gPiArKysgYi9saWIvaWd0X2ZiLmgK PiA+IEBAIC00NywxMiArNDcsMTIgQEAKPiA+ICAgKiBAZHJtX2Zvcm1hdDogRFJNIEZPVVJDQyBj b2RlCj4gPiAgICogQHdpZHRoOiB3aWR0aCBpbiBwaXhlbHMKPiA+ICAgKiBAaGVpZ2h0OiBoZWln aHQgaW4gcGl4ZWxzCj4gPiAtICogQHN0cmlkZTogbGluZSBzdHJpZGUgaW4gYnl0ZXMKPiA+ICAg KiBAdGlsaW5nOiB0aWxpbmcgbW9kZSBhcyBhIERSTSBmcmFtZWJ1ZmZlciBtb2RpZmllcgo+ID4g ICAqIEBzaXplOiBzaXplIGluIGJ5dGVzIG9mIHRoZSB1bmRlcmx5aW5nIGJhY2tpbmcgc3RvcmFn ZQo+ID4gICAqIEBjYWlyb19zdXJmYWNlOiBvcHRpb25hbGx5IGF0dGFjaGVkIGNhaXJvIGRyYXdp bmcgc3VyZmFjZQo+ID4gICAqIEBkb21haW46IGN1cnJlbnQgZG9tYWluIGZvciBjYWNoZSBmbHVz aGluZyB0cmFja2luZyBvbiBpOTE1LmtvCj4gPiAgICogQG51bV9wbGFuZXM6IEFtb3VudCBvZiBw bGFuZXMgb24gdGhpcyBmYi4gPjEgZm9yIHBsYW5hciBmb3JtYXRzLgo+ID4gKyAqIEBzdHJpZGVz OiBsaW5lIHN0cmlkZSBmb3IgZWFjaCBwbGFuZSBpbiBieXRlcwo+ID4gICAqIEBvZmZzZXRzOiBP ZmZzZXQgZm9yIGVhY2ggcGxhbmUgaW4gYnl0ZXMuCj4gPiAgICogQHBsYW5lX2JwcDogVGhlIGJw cCBmb3IgZWFjaCBwbGFuZS4KPiA+ICAgKiBAcGxhbmVfd2lkdGg6IFRoZSB3aWR0aCBmb3IgZWFj aCBwbGFuZS4KPiA+IEBAIC03MCwxMiArNzAsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgaWd0X2ZiIHsK PiA+ICAJaW50IGhlaWdodDsKPiA+ICAJZW51bSBpZ3RfY29sb3JfZW5jb2RpbmcgY29sb3JfZW5j b2Rpbmc7Cj4gPiAgCWVudW0gaWd0X2NvbG9yX3JhbmdlIGNvbG9yX3JhbmdlOwo+ID4gLQl1bnNp Z25lZCBpbnQgc3RyaWRlOwo+ID4gIAl1aW50NjRfdCB0aWxpbmc7Cj4gPiAgCXVpbnQ2NF90IHNp emU7Cj4gPiAgCWNhaXJvX3N1cmZhY2VfdCAqY2Fpcm9fc3VyZmFjZTsKPiA+ICAJdW5zaWduZWQg aW50IGRvbWFpbjsKPiA+ICAJdW5zaWduZWQgaW50IG51bV9wbGFuZXM7Cj4gPiArCXVpbnQzMl90 IHN0cmlkZXNbNF07Cj4gPiAgCXVpbnQzMl90IG9mZnNldHNbNF07Cj4gPiAgCXVuc2lnbmVkIGlu dCBwbGFuZV9icHBbNF07Cj4gPiAgCXVuc2lnbmVkIGludCBwbGFuZV93aWR0aFs0XTsKPiA+IGRp ZmYgLS1naXQgYS90ZXN0cy9rbXNfY2NzLmMgYi90ZXN0cy9rbXNfY2NzLmMKPiA+IGluZGV4IGUx ZWU1ODgwMWFjMy4uZTAzZjk0N2VhZTExIDEwMDY0NAo+ID4gLS0tIGEvdGVzdHMva21zX2Njcy5j Cj4gPiArKysgYi90ZXN0cy9rbXNfY2NzLmMKPiA+IEBAIC0zNzgsNyArMzc4LDcgQEAgc3RhdGlj IHZvaWQgZ2VuZXJhdGVfZmIoZGF0YV90ICpkYXRhLCBzdHJ1Y3QKPiA+IGlndF9mYiAqZmIsCj4g PiAgCWZiLT5kcm1fZm9ybWF0ID0gZi5waXhlbF9mb3JtYXQ7Cj4gPiAgCWZiLT53aWR0aCA9IGYu d2lkdGg7Cj4gPiAgCWZiLT5oZWlnaHQgPSBmLmhlaWdodDsKPiA+IC0JZmItPnN0cmlkZSA9IGYu cGl0Y2hlc1swXTsKPiA+ICsJZmItPnN0cmlkZXNbMF0gPSBmLnBpdGNoZXNbMF07Cj4gPiAgCWZi LT50aWxpbmcgPSBmLm1vZGlmaWVyWzBdOwo+ID4gIAlmYi0+c2l6ZSA9IHNpemVbMF07Cj4gPiAg CWZiLT5jYWlyb19zdXJmYWNlID0gTlVMTDsKPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfZmxp cC5jIGIvdGVzdHMva21zX2ZsaXAuYwo+ID4gaW5kZXggMzkzZDY5MGFiNTM1Li5mN2QwOGE2MGFl ZWEgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9rbXNfZmxpcC5jCj4gPiArKysgYi90ZXN0cy9rbXNf ZmxpcC5jCj4gPiBAQCAtNTkyLDcgKzU5Miw3IEBAIHN0YXRpYyB2b2lkIHJlY3JlYXRlX2ZiKHN0 cnVjdCB0ZXN0X291dHB1dCAqbykKPiA+ICAJaWd0X2Fzc2VydChyKTsKPiA+ICAKPiA+ICAJZG9f b3JfZGllKGRybU1vZGVBZGRGQihkcm1fZmQsIG8tPmZiX3dpZHRoLCBvLT5mYl9oZWlnaHQsIG8t Cj4gPiA+ZGVwdGgsCj4gPiAtCQkJICAgICAgIG8tPmJwcCwgZmJfaW5mby0+c3RyaWRlLAo+ID4g KwkJCSAgICAgICBvLT5icHAsIGZiX2luZm8tPnN0cmlkZXNbMF0sCj4gPiAgCQkJICAgICAgIHIt PmhhbmRsZSwgJm5ld19mYl9pZCkpOwo+ID4gIAo+ID4gIAlnZW1fY2xvc2UoZHJtX2ZkLCByLT5o YW5kbGUpOwo+ID4gQEAgLTYxMiw3ICs2MTIsNyBAQCBzdGF0aWMgdm9pZCBzZXRfeV90aWxpbmco c3RydWN0IHRlc3Rfb3V0cHV0ICpvLAo+ID4gaW50IGZiX2lkeCkKPiA+ICAJciA9IGRybU1vZGVH ZXRGQihkcm1fZmQsIGZiX2luZm8tPmZiX2lkKTsKPiA+ICAJaWd0X2Fzc2VydChyKTsKPiA+ICAJ LyogTmV3ZXIga2VybmVscyBkb24ndCBhbGxvdyBzdWNoIHNoZW5hZ2lhbnMgYW55IG1vcmUsIHNv Cj4gPiBza2lwIHRoZSB0ZXN0LiAqLwo+ID4gLQlpZ3RfcmVxdWlyZShfX2dlbV9zZXRfdGlsaW5n KGRybV9mZCwgci0+aGFuZGxlLAo+ID4gSTkxNV9USUxJTkdfWSwgZmJfaW5mby0+c3RyaWRlKSA9 PSAwKTsKPiA+ICsJaWd0X3JlcXVpcmUoX19nZW1fc2V0X3RpbGluZyhkcm1fZmQsIHItPmhhbmRs ZSwKPiA+IEk5MTVfVElMSU5HX1ksIGZiX2luZm8tPnN0cmlkZXNbMF0pID09IDApOwo+ID4gIAln ZW1fY2xvc2UoZHJtX2ZkLCByLT5oYW5kbGUpOwo+ID4gIAlkcm1GcmVlKHIpOwo+ID4gIH0KPiA+ IGRpZmYgLS1naXQgYS90ZXN0cy9rbXNfZnJvbnRidWZmZXJfdHJhY2tpbmcuYwo+ID4gYi90ZXN0 cy9rbXNfZnJvbnRidWZmZXJfdHJhY2tpbmcuYwo+ID4gaW5kZXggMWJjZTY3NjA4MWI0Li4yNjVj MzEzYTM4ODYgMTAwNjQ0Cj4gPiAtLS0gYS90ZXN0cy9rbXNfZnJvbnRidWZmZXJfdHJhY2tpbmcu Ywo+ID4gKysrIGIvdGVzdHMva21zX2Zyb250YnVmZmVyX3RyYWNraW5nLmMKPiA+IEBAIC0xMTU3 LDcgKzExNTcsNyBAQCBzdGF0aWMgdm9pZCBzdGFydF9idXN5X3RocmVhZChzdHJ1Y3QgaWd0X2Zi Cj4gPiAqZmIpCj4gPiAgCWJ1c3lfdGhyZWFkLnN0b3AgPSBmYWxzZTsKPiA+ICAJYnVzeV90aHJl YWQuaGFuZGxlID0gZmItPmdlbV9oYW5kbGU7Cj4gPiAgCWJ1c3lfdGhyZWFkLnNpemUgPSBmYi0+ c2l6ZTsKPiA+IC0JYnVzeV90aHJlYWQuc3RyaWRlID0gZmItPnN0cmlkZTsKPiA+ICsJYnVzeV90 aHJlYWQuc3RyaWRlID0gZmItPnN0cmlkZXNbMF07Cj4gPiAgCWJ1c3lfdGhyZWFkLndpZHRoID0g ZmItPndpZHRoOwo+ID4gIAlidXN5X3RocmVhZC5oZWlnaHQgPSBmYi0+aGVpZ2h0Owo+ID4gIAli dXN5X3RocmVhZC5jb2xvciA9IHBpY2tfY29sb3IoZmIsIENPTE9SX1BSSU1fQkcpOwo+ID4gQEAg LTI4NTksNyArMjg1OSw3IEBAIHN0YXRpYyB2b2lkIGJhZHN0cmlkZV9zdWJ0ZXN0KGNvbnN0IHN0 cnVjdAo+ID4gdGVzdF9tb2RlICp0KQo+ID4gIAo+ID4gIAljcmVhdGVfZmIodC0+Zm9ybWF0LCBw YXJhbXMtPnByaW1hcnkuZmItPndpZHRoICsgNDA5NiwKPiA+IHBhcmFtcy0+cHJpbWFyeS5mYi0+ aGVpZ2h0LAo+ID4gIAkJICBvcHQudGlsaW5nLCB0LT5wbGFuZSwgJndpZGVfZmIpOwo+ID4gLQlp Z3RfYXNzZXJ0KHdpZGVfZmIuc3RyaWRlID4gMTYzODQpOwo+ID4gKwlpZ3RfYXNzZXJ0KHdpZGVf ZmIuc3RyaWRlc1swXSA+IDE2Mzg0KTsKPiA+ICAKPiA+ICAJZmlsbF9mYigmd2lkZV9mYiwgQ09M T1JfUFJJTV9CRyk7Cj4gPiAgCj4gPiBAQCAtMjkyOCw3ICsyOTI4LDcgQEAgc3RhdGljIHZvaWQg c3RyaWRlY2hhbmdlX3N1YnRlc3QoY29uc3Qgc3RydWN0Cj4gPiB0ZXN0X21vZGUgKnQpCj4gPiAg CQkgIG9wdC50aWxpbmcsIHQtPnBsYW5lLCAmbmV3X2ZiKTsKPiA+ICAJZmlsbF9mYigmbmV3X2Zi LCBDT0xPUl9QUklNX0JHKTsKPiA+ICAKPiA+IC0JaWd0X2Fzc2VydChvbGRfZmItPnN0cmlkZSAh PSBuZXdfZmIuc3RyaWRlKTsKPiA+ICsJaWd0X2Fzc2VydChvbGRfZmItPnN0cmlkZXNbMF0gIT0g bmV3X2ZiLnN0cmlkZXNbMF0pOwo+ID4gIAo+ID4gIAkvKiBXZSBjYW4ndCBhc3NlcnQgdGhhdCBG QkMgd2lsbCBiZSBlbmFibGVkIHNpbmNlIHRoZXJlIG1heQo+ID4gbm90IGJlCj4gPiAgCSAqIGVu b3VnaCBzcGFjZSBmb3IgdGhlIENGQiwgYnV0IHdlIGNhbiBjaGVjayB0aGUgQ1JDLiAqLwo+ID4g ZGlmZiAtLWdpdCBhL3Rlc3RzL3BtX3JwbS5jIGIvdGVzdHMvcG1fcnBtLmMKPiA+IGluZGV4IGMy NGZkOTViYjBmMy4uMmQ2YzViNDljOWQ1IDEwMDY0NAo+ID4gLS0tIGEvdGVzdHMvcG1fcnBtLmMK PiA+ICsrKyBiL3Rlc3RzL3BtX3JwbS5jCj4gPiBAQCAtMTU0Nyw3ICsxNTQ3LDcgQEAgc3RhdGlj IHZvaWQgY3Vyc29yX3N1YnRlc3QoYm9vbCBkcG1zKQo+ID4gIAkgKiBob3BlZnVsbHkgaXQgaGFz IHNvbWUgZmVuY2VzIGFyb3VuZCBpdC4gKi8KPiA+ICAJcmMgPSBkcm1Nb2RlUm1GQihkcm1fZmQs IGN1cnNvcl9mYjMuZmJfaWQpOwo+ID4gIAlpZ3RfYXNzZXJ0X2VxKHJjLCAwKTsKPiA+IC0JZ2Vt X3NldF90aWxpbmcoZHJtX2ZkLCBjdXJzb3JfZmIzLmdlbV9oYW5kbGUsIGZhbHNlLAo+ID4gY3Vy c29yX2ZiMy5zdHJpZGUpOwo+ID4gKwlnZW1fc2V0X3RpbGluZyhkcm1fZmQsIGN1cnNvcl9mYjMu Z2VtX2hhbmRsZSwgZmFsc2UsCj4gPiBjdXJzb3JfZmIzLnN0cmlkZXNbMF0pOwo+ID4gIAlpZ3Rf YXNzZXJ0KHdhaXRfZm9yX3N1c3BlbmRlZCgpKTsKPiA+ICAKPiA+ICAJcmMgPSBkcm1Nb2RlU2V0 Q3Vyc29yKGRybV9mZCwgY3J0Y19pZCwKPiA+IGN1cnNvcl9mYjMuZ2VtX2hhbmRsZSwKCi0tIApW aWxsZSBTeXJqw6Rsw6QKSW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3Qt ZGV2Cg==