From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v3 2/2] drm/i915: Make sure we have enough memory bandwidth on ICL Date: Mon, 13 May 2019 17:13:10 +0300 Message-ID: <20190513141310.GO24299@intel.com> References: <20190503190831.1759-1-ville.syrjala@linux.intel.com> <20190503190831.1759-2-ville.syrjala@linux.intel.com> <20190511004209.GL13184@mdroper-desk.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8A05789DD8 for ; Mon, 13 May 2019 14:13:14 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190511004209.GL13184@mdroper-desk.amr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBNYXkgMTAsIDIwMTkgYXQgMDU6NDI6MDlQTSAtMDcwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBPbiBGcmksIE1heSAwMywgMjAxOSBhdCAxMDowODozMVBNICswMzAwLCBWaWxsZSBTeXJq YWxhIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+IAo+ID4gSUNMIGhhcyBzbyBtYW55IHBsYW5lcyB0aGF0IGl0IGNhbiBl YXNpbHkgZXhjZWVkIHRoZSBtYXhpbXVtCj4gPiBlZmZlY3RpdmUgbWVtb3J5IGJhbmR3aWR0aCBv ZiB0aGUgc3lzdGVtLiBXZSBtdXN0IHRoZXJlZm9yZSBjaGVjawo+ID4gdGhhdCB3ZSBkb24ndCBl eGNlZWQgdGhhdCBsaW1pdC4KPiA+IAo+ID4gVGhlIGFsZ29yaXRobSBpcyB2ZXJ5IG1hZ2ljIG51 bWJlciBoZWF2eSBhbmQgbGFja3Mgc3VmZmljaWVudAo+ID4gZXhwbGFuYXRpb24gZm9yIG5vdy4g V2UgYWxzbyBoYXZlIG5vIHNhbmUgd2F5IHRvIHF1ZXJ5IHRoZQo+ID4gbWVtb3J5IGNsb2NrIGFu ZCB0aW1pbmdzLCBzbyB3ZSBtdXN0IHJlbHkgb24gYSBjb21iaW5hdGlvbiBvZgo+ID4gcmF3IHJl YWRvdXQgZnJvbSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgYW5kIGhhcmRjb2RlZCBhc3N1bXB0aW9u cy4KPiA+IFRoZSBtZW1vcnkgY29udHJvbGxlciB2YWx1ZXMgb2J2aW91c2x5IGNoYW5nZSBhcyB0 aGUgc3lzdGVtCj4gPiBqdW1wcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgU0FHViBwb2ludHMsIHNv IHdlIHRyeSB0byBzdGFiaWxpemUKPiA+IGl0IGZpcnN0IGJ5IGRpc2FibGluZyBTQUdWIGZvciB0 aGUgZHVyYXRpb24gb2YgdGhlIHJlYWRvdXQuCj4gPiAKPiA+IFRoZSB1dGlsaXplZCBiYW5kd2lk dGggaXMgdHJhY2tlZCB2aWEgYSBkZXZpY2Ugd2lkZSBhdG9taWMKPiA+IHByaXZhdGUgb2JqZWN0 LiBUaGF0IGlzIGFjdHVhbGx5IG5vdCByb2J1c3QgYmVjYXVzZSB3ZSBjYW4ndAo+ID4gYWZmb3Jk IHRvIGVuZm9yY2Ugc3RyaWN0IGdsb2JhbCBvcmRlcmluZyBiZXR3ZWVuIHRoZSBwaXBlcy4KPiA+ IFRodXMgSSB0aGluayBJJ2xsIG5lZWQgdG8gY2hhbmdlIHRoaXMgdG8gc2ltcGx5IGNob3AgdXAg dGhlCj4gPiBhdmFpbGFibGUgYmFuZHdpZHRoIGJldHdlZW4gYWxsIHRoZSBhY3RpdmUgcGlwZXMu IEVhY2ggcGlwZQo+ID4gY2FuIHRoZW4gZG8gd2hhdGV2ZXIgaXQgd2FudHMgYXMgbG9uZyBhcyBp dCBkb2Vzbid0IGV4Y2VlZAo+ID4gaXRzIGJ1ZGdldC4gVGhhdCBzY2hlbWUgd2lsbCBhbHNvIHJl cXVpcmUgdGhhdCB3ZSBhc3N1bWUgdGhhdAo+ID4gYW55IG51bWJlciBvZiBwbGFuZXMgY291bGQg YmUgYWN0aXZlIGF0IGFueSB0aW1lLgo+ID4gCj4gPiBUT0RPOiBtYWtlIGl0IHJvYnVzdCBhbmQg ZGVhbCB3aXRoIGFsbCB0aGUgb3BlbiBxdWVzdGlvbnMKPiA+IAo+ID4gdjI6IFNsZWVwIGxvbmdl ciBhZnRlciBkaXNhYmxpbmcgU0FHVgo+ID4gdjM6IFBvbGwgZm9yIHRoZSBkY2xrIHRvIGdldCBy YWlzZWQgKHNlZW4gaXQgdGFrZSAyNTBtcyEpCj4gPiAgICAgSWYgdGhlIHN5c3RlbSBoYXMgMjEz M01UL3MgbWVtb3J5IHRoZW4gd2UgcG9pbnRsZXNzbHkKPiA+ICAgICB3YWl0IG9uZSBmdWxsIHNl Y29uZCA6KAo+ID4gdjQ6IFVzZSB0aGUgbmV3IHBjb2RlIGludGVyZmFjZSB0byBnZXQgdGhlIHFn diBwb2ludHMgcmF0aGVyCj4gPiAgICAgdGhhdCB1c2luZyBoYXJkY29kZWQgbnVtYmVycwo+ID4g Cj4gPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXgu aW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAg ICAgICAgICAgfCAgIDEgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAg ICAgICAgIHwgMjI5ICsrKysrKysrKysrKysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oICAgICAgICAgICB8ICAxMCArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZWcuaCAgICAgICAgICAgfCAgIDMgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2F0b21pY19wbGFuZS5jIHwgIDIwICsrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfYXRvbWljX3BsYW5lLmggfCAgIDIgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2J3LmMgICAgICAgICAgIHwgMTgxICsrKysrKysrKysrKysrKysrCj4gPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYncuaCAgICAgICAgICAgfCAgNDYgKysrKysKPiA+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgICB8ICA0MCArKystCj4gPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAgfCAgIDIgKwo+ID4gIDEwIGZpbGVz IGNoYW5nZWQsIDUzMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmMKPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYncuaAo+ID4gCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQo+ID4gaW5kZXggNjgxMDZmZTM1YTA0Li4xMzlhMGZjMTkzOTAgMTAwNjQ0Cj4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPiA+IEBAIC0xMzgsNiArMTM4LDcgQEAgaTkxNS15ICs9IGlu dGVsX2F1ZGlvLm8gXAo+ID4gIAkgIGludGVsX2F0b21pYy5vIFwKPiA+ICAJICBpbnRlbF9hdG9t aWNfcGxhbmUubyBcCj4gPiAgCSAgaW50ZWxfYmlvcy5vIFwKPiA+ICsJICBpbnRlbF9idy5vIFwK PiA+ICAJICBpbnRlbF9jZGNsay5vIFwKPiA+ICAJICBpbnRlbF9jb2xvci5vIFwKPiA+ICAJICBp bnRlbF9jb21ib19waHkubyBcCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiA+IGluZGV4IDVl ZDg2NDc1MmM3Yi4uYjdmYTdiNTFjMmUyIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu Ywo+ID4gQEAgLTcwLDYgKzcwLDcgQEAKPiA+ICAjaW5jbHVkZSAiaW50ZWxfb3ZlcmxheS5oIgo+ ID4gICNpbmNsdWRlICJpbnRlbF9waXBlX2NyYy5oIgo+ID4gICNpbmNsdWRlICJpbnRlbF9wbS5o Igo+ID4gKyNpbmNsdWRlICJpbnRlbF9zaWRlYmFuZC5oIgo+ID4gICNpbmNsdWRlICJpbnRlbF9z cHJpdGUuaCIKPiA+ICAjaW5jbHVkZSAiaW50ZWxfdWMuaCIKPiA+ICAKPiA+IEBAIC0xNDM1LDYg KzE0MzYsMjMyIEBAIGJ4dF9nZXRfZHJhbV9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiA+ICAJcmV0dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0cnVjdCBpbnRlbF9x Z3ZfcG9pbnQgewo+ID4gKwl1MTYgZGNsaywgdF9ycCwgdF9yZHByZSwgdF9yYywgdF9yYXMsIHRf cmNkOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGludGVsX3NhZ3ZfaW5mbyB7Cj4gPiArCXN0 cnVjdCBpbnRlbF9xZ3ZfcG9pbnQgcG9pbnRzWzNdOwo+ID4gKwl1OCBudW1fcG9pbnRzOwo+ID4g Kwl1OCBudW1fY2hhbm5lbHM7Cj4gPiArCXU4IHRfYmw7Cj4gPiArCWVudW0gaW50ZWxfZHJhbV90 eXBlIGRyYW1fdHlwZTsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaWNsX3Bjb2RlX3Jl YWRfbWVtX2dsb2JhbF9pbmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ ICsJCQkJCSAgc3RydWN0IGludGVsX3NhZ3ZfaW5mbyAqc2kpCj4gPiArewo+ID4gKwl1MzIgdmFs ID0gMDsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gc2FuZHlicmlkZ2VfcGNvZGVf cmVhZChkZXZfcHJpdiwKPiA+ICsJCQkJICAgICBJQ0xfUENPREVfTUVNX1NVQlNZU1lTVEVNX0lO Rk8gfAo+ID4gKwkJCQkgICAgIElDTF9QQ09ERV9NRU1fU1NfUkVBRF9HTE9CQUxfSU5GTywKPiA+ ICsJCQkJICAgICAmdmFsLCBOVUxMKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7 Cj4gPiArCj4gPiArCXN3aXRjaCAodmFsICYgMHhmKSB7Cj4gPiArCWNhc2UgMDoKPiA+ICsJCXNp LT5kcmFtX3R5cGUgPSBJTlRFTF9EUkFNX0REUjQ7Cj4gPiArCQlicmVhazsKPiA+ICsJY2FzZSAx Ogo+ID4gKwkJc2ktPmRyYW1fdHlwZSA9IElOVEVMX0RSQU1fRERSMzsKPiA+ICsJCWJyZWFrOwo+ ID4gKwljYXNlIDI6Cj4gPiArCQlzaS0+ZHJhbV90eXBlID0gSU5URUxfRFJBTV9MUEREUjM7Cj4g PiArCQlicmVhazsKPiA+ICsJY2FzZSAzOgo+ID4gKwkJc2ktPmRyYW1fdHlwZSA9IElOVEVMX0RS QU1fTFBERFIzOwo+ID4gKwkJYnJlYWs7Cj4gPiArCWRlZmF1bHQ6Cj4gPiArCQlNSVNTSU5HX0NB U0UodmFsICYgMHhmKTsKPiA+ICsJCWJyZWFrOwo+ID4gKwl9Cj4gPiArCj4gPiArCXNpLT5udW1f Y2hhbm5lbHMgPSAodmFsICYgMHhmMCkgPj4gNDsKPiA+ICsJc2ktPm51bV9wb2ludHMgPSAodmFs ICYgMHhmMDApID4+IDg7Cj4gPiArCj4gPiArCXNpLT50X2JsID0gc2ktPmRyYW1fdHlwZSA9PSBJ TlRFTF9EUkFNX0REUjQgPyA0IDogODsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgaWNsX3Bjb2RlX3JlYWRfcWd2X3BvaW50X2luZm8oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCQkJIHN0cnVjdCBpbnRlbF9xZ3ZfcG9p bnQgKnNwLAo+ID4gKwkJCQkJIGludCBwb2ludCkKPiA+ICt7Cj4gPiArCXUzMiB2YWwgPSAwLCB2 YWwyOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBzYW5keWJyaWRnZV9wY29kZV9y ZWFkKGRldl9wcml2LAo+ID4gKwkJCQkgICAgIElDTF9QQ09ERV9NRU1fU1VCU1lTWVNURU1fSU5G TyB8Cj4gPiArCQkJCSAgICAgSUNMX1BDT0RFX01FTV9TU19SRUFEX1FHVl9QT0lOVF9JTkZPKHBv aW50KSwKPiA+ICsJCQkJICAgICAmdmFsLCAmdmFsMik7Cj4gPiArCWlmIChyZXQpCj4gPiArCQly ZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlzcC0+ZGNsayA9IHZhbCAmIDB4ZmZmZjsKPiA+ICsJc3At PnRfcnAgPSAodmFsICYgMHhmZjAwMDApID4+IDE2Owo+ID4gKwlzcC0+dF9yY2QgPSAodmFsICYg MHhmZjAwMDAwMCkgPj4gMjQ7Cj4gPiArCj4gPiArCXNwLT50X3JkcHJlID0gdmFsMiAmIDB4ZmY7 Cj4gPiArCXNwLT50X3JhcyA9ICh2YWwyICYgMHhmZjAwKSA+PiA4Owo+ID4gKwo+ID4gKwlzcC0+ dF9yYyA9IHNwLT50X3JwICsgc3AtPnRfcmFzOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIGludCBpY2xfZ2V0X3Fndl9wb2ludHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ID4gKwkJCSAgICAgIHN0cnVjdCBpbnRlbF9zYWd2X2luZm8g KnNpKQo+ID4gK3sKPiA+ICsJaW50IGksIHJldDsKPiA+ICsKPiA+ICsJcmV0ID0gaWNsX3Bjb2Rl X3JlYWRfbWVtX2dsb2JhbF9pbmZvKGRldl9wcml2LCBzaSk7Cj4gPiArCWlmIChyZXQpCj4gPiAr CQlyZXR1cm4gcmV0Owo+ID4gKwo+ID4gKwlpZiAoV0FSTl9PTihzaS0+bnVtX3BvaW50cyA+IEFS UkFZX1NJWkUoc2ktPnBvaW50cykpKQo+ID4gKwkJc2ktPm51bV9wb2ludHMgPSBBUlJBWV9TSVpF KHNpLT5wb2ludHMpOwo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgc2ktPm51bV9wb2ludHM7 IGkrKykgewo+ID4gKwkJc3RydWN0IGludGVsX3Fndl9wb2ludCAqc3AgPSAmc2ktPnBvaW50c1tp XTsKPiA+ICsKPiA+ICsJCXJldCA9IGljbF9wY29kZV9yZWFkX3Fndl9wb2ludF9pbmZvKGRldl9w cml2LCBzcCwgaSk7Cj4gPiArCQlpZiAocmV0KQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCj4g PiArCQlEUk1fREVCVUdfS01TKCJRR1YgJWQ6IERDTEs9JWQgdFJQPSVkIHRSRFBSRT0lZCB0UkFT PSVkIHRSQ0Q9JWQgdFJDPSVkXG4iLAo+ID4gKwkJCSAgICAgIGksIHNwLT5kY2xrLCBzcC0+dF9y cCwgc3AtPnRfcmRwcmUsIHNwLT50X3JhcywKPiA+ICsJCQkgICAgICBzcC0+dF9yY2QsIHNwLT50 X3JjKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gCj4gSXQgbWlnaHQg bWFrZSBzZW5zZSB0byBzZXBhcmF0ZSB0aGUgcGNvZGUgcmVhZG91dCBzdHVmZiBpbnRvIGEgcGF0 Y2ggb2YKPiBpdHMgb3duLiAgQXNpZGUgZnJvbSB0aGUgc2ktPnRfYmwgYXNzaWdubWVudCwgdGhl IGZ1bmN0aW9ucyBhYm92ZSBhcmUKPiBzdHJhaWdodGZvcndhcmQgZGV0YWlscyBmcm9tIHRoZSBw Y29kZSBIQVMuICBJZiB3ZSB3aW5kIHVwIG5lZWRpbmcgdG8KPiBkcm9wIHRoZSBjb21wbGljYXRl ZCBhbGdvcml0aG0gYmVsb3cgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIGRpZmZlcmVudAo+IG9uZSwg dGhlIHBjb2RlIHJlYWRvdXQgcGFydCB3b24ndCBuZWVkIHRvIGNoYW5nZS4KClBlcmhhcHMuIE9U T0ggaXQgZG9lcyBtZWFuIGhhdmluZyBhIHBhdGNoIHRoYXQgYWRkcyBhIGJ1bmNoCm9mIHVudXNl ZCBjb2RlLgoKPiAKPiA+ICsKPiA+ICtzdGF0aWMgaW50IGljbF9jYWxjX2J3KGludCBkY2xrLCBp bnQgbnVtLCBpbnQgZGVuKQo+ID4gK3sKPiA+ICsJLyogbXVsdGlwbGVzIG9mIDE2LjY2Nk1IeiAo MTAwLzYpICovCj4gPiArCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChudW0gKiBkY2xrICogMTAw LCBkZW4gKiA2KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBpY2xfc2Fndl9tYXhfZGNs ayhjb25zdCBzdHJ1Y3QgaW50ZWxfc2Fndl9pbmZvICpzaSkKPiA+ICt7Cj4gPiArCXUxNiBkY2xr ID0gMDsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBzaS0+bnVtX3Bv aW50czsgaSsrKQo+ID4gKwkJZGNsayA9IG1heChkY2xrLCBzaS0+cG9pbnRzW2ldLmRjbGspOwo+ ID4gKwo+ID4gKwlyZXR1cm4gZGNsazsKPiA+ICt9Cj4gPiArCj4gPiArc3RydWN0IGludGVsX3Nh X2luZm8gewo+ID4gKwl1OCBkZWJ1cnN0LCBtcGFnZXNpemUsIGRlcHJvZ2J3bGltaXQsIGRpc3Bs YXlydGlkczsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfc2Ff aW5mbyBpY2xfc2FfaW5mbyA9IHsKPiA+ICsJLmRlYnVyc3QgPSA4LAo+ID4gKwkubXBhZ2VzaXpl ID0gMTYsCj4gPiArCS5kZXByb2did2xpbWl0ID0gMjUsIC8qIEdCL3MgKi8KPiA+ICsJLmRpc3Bs YXlydGlkcyA9IDEyOCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgaWNsX2dldF9id19p bmZvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICt7Cj4gPiArCXN0cnVj dCBpbnRlbF9zYWd2X2luZm8gc2kgPSB7fTsKPiA+ICsJY29uc3Qgc3RydWN0IGludGVsX3NhX2lu Zm8gKnNhID0gJmljbF9zYV9pbmZvOwo+ID4gKwlib29sIGlzX3lfdGlsZSA9IHRydWU7IC8qIGFz c3VtZSB5IHRpbGUgbWF5IGJlIHVzZWQgKi8KPiA+ICsJaW50IG51bV9jaGFubmVsczsKPiA+ICsJ aW50IGRlaW50ZXJsZWF2ZTsKPiA+ICsJaW50IGlwcWRlcHRoLCBpcHFkZXB0aHBjaDsKPiA+ICsJ aW50IGRjbGtfbWF4Owo+ID4gKwlpbnQgbWF4ZGVidzsKPiA+ICsJaW50IGksIHJldDsKPiA+ICsK PiA+ICsJcmV0ID0gaWNsX2dldF9xZ3ZfcG9pbnRzKGRldl9wcml2LCAmc2kpOwo+ID4gKwlpZiAo cmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJbnVtX2NoYW5uZWxzID0gc2kubnVtX2NoYW5u ZWxzOwo+ID4gKwo+ID4gKwlkZWludGVybGVhdmUgPSBESVZfUk9VTkRfVVAobnVtX2NoYW5uZWxz LCBpc195X3RpbGUgPyA0IDogMik7Cj4gPiArCWRjbGtfbWF4ID0gaWNsX3NhZ3ZfbWF4X2RjbGso JnNpKTsKPiA+ICsKPiA+ICsJaXBxZGVwdGhwY2ggPSAxNjsKPiA+ICsKPiA+ICsJbWF4ZGVidyA9 IG1pbihzYS0+ZGVwcm9nYndsaW1pdCAqIDEwMDAsCj4gPiArCQkgICAgICBpY2xfY2FsY19idyhk Y2xrX21heCwgMTYsIDEpICogNiAvIDEwKTsgLyogNjAlICovCj4gPiArCWlwcWRlcHRoID0gbWlu KGlwcWRlcHRocGNoLCBzYS0+ZGlzcGxheXJ0aWRzIC8gbnVtX2NoYW5uZWxzKTsKPiA+ICsKPiA+ ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2X3ByaXYtPm1heF9idyk7IGkrKykgewo+ ID4gKwkJc3RydWN0IGludGVsX2J3X2luZm8gKmJpID0gJmRldl9wcml2LT5tYXhfYndbaV07Cj4g PiArCQlpbnQgY2xwY2hncm91cDsKPiA+ICsJCWludCBqOwo+ID4gKwo+ID4gKwkJY2xwY2hncm91 cCA9IChzYS0+ZGVidXJzdCAqIGRlaW50ZXJsZWF2ZSAvIG51bV9jaGFubmVscykgPDwgaTsKPiA+ ICsJCWJpLT5udW1fcGxhbmVzID0gKGlwcWRlcHRoIC0gY2xwY2hncm91cCkgLyBjbHBjaGdyb3Vw ICsgMTsKPiA+ICsKPiA+ICsJCWZvciAoaiA9IDA7IGogPCBzaS5udW1fcG9pbnRzOyBqKyspIHsK PiA+ICsJCQljb25zdCBzdHJ1Y3QgaW50ZWxfcWd2X3BvaW50ICpzcCA9ICZzaS5wb2ludHNbal07 Cj4gPiArCQkJaW50IGN0LCBidzsKPiA+ICsKPiA+ICsJCQkvKgo+ID4gKwkJCSAqIE1heCByb3cg Y3ljbGUgdGltZQo+ID4gKwkJCSAqCj4gPiArCQkJICogRklYTUUgd2hhdCBpcyB0aGUgbG9naWMg YmVoaW5kIHRoZQo+ID4gKwkJCSAqIGFzc3VtZWQgYnVyc3QgbGVuZ3RoPwo+ID4gKwkJCSAqLwo+ ID4gKwkJCWN0ID0gbWF4X3QoaW50LCBzcC0+dF9yYywgc3AtPnRfcnAgKyBzcC0+dF9yY2QgKwo+ ID4gKwkJCQkgICAoY2xwY2hncm91cCAtIDEpICogc2kudF9ibCArIHNwLT50X3JkcHJlKTsKPiA+ ICsJCQlidyA9IGljbF9jYWxjX2J3KHNwLT5kY2xrLCBjbHBjaGdyb3VwICogMzIgKiBudW1fY2hh bm5lbHMsIGN0KTsKPiAKPiBUaGUgSEFTIGRvY3VtZW50IHVzZXMgKjY0IGluc3RlYWQgb2YgKjMy IGZvciB0aGUgQlcgY2FsY3VsYXRpb24gaGVyZS4KPiBBcmUgd2UgZG91YmxpbmcgdGhlIHZhbHVl IHNvbWV3aGVyZSBlbHNlIHRoYXQgSSdtIG92ZXJsb29raW5nPwoKSXQgd2FzIDMyIG9yaWdpbmFs bHksIHRoZW4gd2FzIHVwZGF0ZWQgdG8gNjQsIGFuZCB0aGUgZHJvcHBlZCBiYWNrIHRvCjMyIGJl Y2F1c2UgNjQgY2F1c2VkIGV2ZXJ5dGhpbmcgdG8gZ2V0IGRvdWJsZWQgZnJvbSB3aGF0IGl0IHdh cyBzdXBwb3NlZAp0byBiZS4gVGhlIHJlYXNvbiB3YXMgdGhhdCBwY29kZSBpcyBnaXZpbmcgZG91 YmxlZCB2YWx1ZXMgdG8gd2hhdCB0aGUgNjQKdmVyc2lvbiBvZiB0aGUgYWxnb3JpdGhtIHdhcyBl eHBlY3RpbmcuCgo+IAo+IAo+ID4gKwo+ID4gKwkJCWJpLT5kZXJhdGVkYndbal0gPSBtaW4obWF4 ZGVidywKPiA+ICsJCQkJCSAgICAgICBidyAqIDkgLyAxMCk7IC8qIDkwJSAqLwo+ID4gKwo+ID4g KwkJCURSTV9ERUJVR19LTVMoIkJXJWQgLyBRR1YgJWQ6IG51bV9wbGFuZXM9JWQgZGVyYXRlZGJ3 PSVkXG4iLAo+ID4gKwkJCQkgICAgICBpLCBqLCBiaS0+bnVtX3BsYW5lcywgYmktPmRlcmF0ZWRi d1tqXSk7Cj4gPiArCQl9Cj4gPiArCj4gPiArCQlpZiAoYmktPm51bV9wbGFuZXMgPT0gMSkKPiA+ ICsJCQlicmVhazsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHVuc2lnbmVkIGludCBpY2xfbWF4X2J3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiA+ICsJCQkgICAgICAgaW50IG51bV9wbGFuZXMsIGludCBxZ3ZfcG9pbnQp Cj4gPiArewo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoZGV2X3ByaXYtPm1heF9idyk7IGkrKykgewo+ID4gKwkJY29uc3Qgc3RydWN0IGludGVsX2J3 X2luZm8gKmJpID0KPiA+ICsJCQkmZGV2X3ByaXYtPm1heF9id1tpXTsKPiA+ICsKPiA+ICsJCWlm IChudW1fcGxhbmVzID49IGJpLT5udW1fcGxhbmVzKQo+ID4gKwkJCXJldHVybiBiaS0+ZGVyYXRl ZGJ3W3Fndl9wb2ludF07Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4g Kwo+ID4gK3Vuc2lnbmVkIGludCBpbnRlbF9tYXhfZGF0YV9yYXRlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPiA+ICsJCQkJIGludCBudW1fcGxhbmVzKQo+ID4gK3sKPiA+ICsJ aWYgKElTX0lDRUxBS0UoZGV2X3ByaXYpKQo+ID4gKwkJLyoKPiA+ICsJCSAqIEZJWE1FIHdpdGgg U0FHViBkaXNhYmxlZCBtYXliZSB3ZSBjYW4gYXNzdW1lCj4gPiArCQkgKiBwb2ludCAxIHdpbGwg YWx3YXlzIGJlIHVzZWQ/IFNlZW1zIHRvIG1hdGNoCj4gPiArCQkgKiB0aGUgYmVoYXZpb3VyIG9i c2VydmVkIGluIHRoZSB3aWxkLgo+ID4gKwkJICovCj4gPiArCQlyZXR1cm4gbWluMyhpY2xfbWF4 X2J3KGRldl9wcml2LCBudW1fcGxhbmVzLCAwKSwKPiA+ICsJCQkgICAgaWNsX21heF9idyhkZXZf cHJpdiwgbnVtX3BsYW5lcywgMSksCj4gPiArCQkJICAgIGljbF9tYXhfYncoZGV2X3ByaXYsIG51 bV9wbGFuZXMsIDIpKTsKPiA+ICsJZWxzZQo+ID4gKwkJcmV0dXJuIFVJTlRfTUFYOwo+ID4gK30K PiAKPiBBbnkgc3BlY2lmaWMgcmVhc29uIHJlYXNvbiBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBh cmUgaW4gaTkxNV9kcnYuYz8KPiBTZWVtcyBsaWtlIHRoZXkgY291bGQganVzdCBnbyBpbiB0aGUg bmV3IGludGVsX2J3LmMuCgpUaGV5J3JlIGhlcmUgbW9zdGx5IGJlY2F1c2UgdGhlIERSQU0gcmVh ZG91dCB3YXMgaGVyZS4gQnV0IHllYWgsIHNob3VsZApwcm9iYWJseSBtb3ZlIGl0IGFsbCB0byBp bnRlbF9idy5jLgoKPiAKPiA+ICsKPiA+ICBzdGF0aWMgdm9pZAo+ID4gIGludGVsX2dldF9kcmFt X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gIHsKPiA+IEBAIC0x NjU1LDYgKzE4ODIsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2luaXRfaHcoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ID4gIAkgKi8KPiA+ICAJaW50ZWxfZ2V0X2RyYW1f aW5mbyhkZXZfcHJpdik7Cj4gPiAgCj4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEx KQo+ID4gKwkJaWNsX2dldF9id19pbmZvKGRldl9wcml2KTsKPiA+ICAKPiA+ICAJcmV0dXJuIDA7 Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+IGluZGV4IDY0ZmEzNTNhNjJiYi4u ZDFiOWMzZmU1ODAyIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gQEAgLTU0 LDYgKzU0LDcgQEAKPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9jYWNoZS5oPgo+ID4gICNpbmNsdWRl IDxkcm0vZHJtX3V0aWwuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9kc2MuaD4KPiA+ICsjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3Iu aD4KPiA+ICAjaW5jbHVkZSA8ZHJtL2k5MTVfbWVpX2hkY3BfaW50ZXJmYWNlLmg+Cj4gPiAgCj4g PiBAQCAtMTgzNyw2ICsxODM4LDEzIEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsKPiA+ICAJ CX0gdHlwZTsKPiA+ICAJfSBkcmFtX2luZm87Cj4gPiAgCj4gPiArCXN0cnVjdCBpbnRlbF9id19p bmZvIHsKPiA+ICsJCWludCBudW1fcGxhbmVzOwo+ID4gKwkJaW50IGRlcmF0ZWRid1szXTsKPiA+ ICsJfSBtYXhfYndbNl07Cj4gPiArCj4gPiArCXN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogYndfb2Jq Owo+ID4gKwo+ID4gIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHJ1bnRpbWVfcG07Cj4gPiAgCj4g PiAgCXN0cnVjdCB7Cj4gPiBAQCAtMjcwNiw2ICsyNzE0LDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxv bmcgaTkxNV9tY2hfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gPiAg ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaTkxNV9nZnhfdmFsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7Cj4gPiAgZXh0ZXJuIHZvaWQgaTkxNV91cGRhdGVfZ2Z4X3ZhbChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ID4gIGludCB2bHZfZm9yY2VfZ2Z4X2Nsb2Nr KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgYm9vbCBvbik7Cj4gPiArdW5zaWdu ZWQgaW50IGludGVsX21heF9kYXRhX3JhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ID4gKwkJCQkgaW50IG51bV9wbGFuZXMpOwo+ID4gIAo+ID4gIHUzMiBpbnRlbF9jYWxj dWxhdGVfbWNyX3Nfc3Nfc2VsZWN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiA+IGluZGV4IGU5N2M0N2ZjYTY0NS4u Mzk5MzY2YTQxNTI0IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZWcuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ID4gQEAgLTg3 NzQsNiArODc3NCw5IEBAIGVudW0gewo+ID4gICNkZWZpbmUgICBHRU42X1BDT0RFX1dSSVRFX01J Tl9GUkVRX1RBQkxFCTB4OAo+ID4gICNkZWZpbmUgICBHRU42X1BDT0RFX1JFQURfTUlOX0ZSRVFf VEFCTEUJMHg5Cj4gPiAgI2RlZmluZSAgIEdFTjZfUkVBRF9PQ19QQVJBTVMJCQkweGMKPiA+ICsj ZGVmaW5lICAgSUNMX1BDT0RFX01FTV9TVUJTWVNZU1RFTV9JTkZPCTB4ZAo+ID4gKyNkZWZpbmUg ICAgIElDTF9QQ09ERV9NRU1fU1NfUkVBRF9HTE9CQUxfSU5GTwkoMHgwIDw8IDgpCj4gPiArI2Rl ZmluZSAgICAgSUNMX1BDT0RFX01FTV9TU19SRUFEX1FHVl9QT0lOVF9JTkZPKHBvaW50KQkoKChw b2ludCkgPDwgMTYpIHwgKDB4MSA8PCA4KSkKPiA+ICAjZGVmaW5lICAgR0VONl9QQ09ERV9SRUFE X0RfQ09NUAkJMHgxMAo+ID4gICNkZWZpbmUgICBHRU42X1BDT0RFX1dSSVRFX0RfQ09NUAkJMHgx MQo+ID4gICNkZWZpbmUgICBIU1dfUENPREVfREVfV1JJVEVfRlJFUV9SRVEJCTB4MTcKPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCj4gPiBpbmRleCBkMTE2ODFk NzFhZGQuLmYxNDJjNWMyMmQ3ZSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2F0b21pY19wbGFuZS5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9hdG9taWNfcGxhbmUuYwo+ID4gQEAgLTExNCw2ICsxMTQsMjIgQEAgaW50ZWxfcGxhbmVfZGVz dHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+ICAJZHJtX2F0b21pY19oZWxw ZXJfcGxhbmVfZGVzdHJveV9zdGF0ZShwbGFuZSwgc3RhdGUpOwo+ID4gIH0KPiA+ICAKPiA+ICt1 bnNpZ25lZCBpbnQgaW50ZWxfcGxhbmVfZGF0YV9yYXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlLAo+ID4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlKQo+ID4gK3sKPiA+ICsJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiA+ICsJdW5zaWduZWQgaW50IGNwcCA9 IDA7Cj4gPiArCWludCBpOwo+ID4gKwo+ID4gKwlpZiAoIXBsYW5lX3N0YXRlLT5iYXNlLnZpc2li bGUpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IGZiLT5mb3Jt YXQtPm51bV9wbGFuZXM7IGkrKykKPiA+ICsJCWNwcCArPSBmYi0+Zm9ybWF0LT5jcHBbaV07Cj4g Cj4gV2lsbCB0aGlzIGhhbmRsZSBOVjEyIHByb3Blcmx5PyAgVGhpcyB3aWxsIGdpdmUgdXMgMSsy LCBidXQgdGhlCj4gYWxnb3JpdGhtIGRvY3VtZW50IGluZGljYXRlcyAiTlYxMiBzaG91bGQgYmUg Y29uc2lkZXJlZCBhcyA0IGJ5dGVzIHBlcgo+IHBpeGVsLiIKCkhtbS4gVGhhdCBpcyBhIGJpdCBv ZiBhIHN0cmFuZ2Ugd2F5IHRvIGhhbmRsZSBOVjEyLiBQcm9iYWJseSBuZWVkIHRvIGFzawp3aHkg dGhhdCBpcyB0aGUgcmVjb21tZW5kYXRpb24uCgo+IAo+ID4gKwo+ID4gKwlyZXR1cm4gY3BwICog Y3J0Y19zdGF0ZS0+cGl4ZWxfcmF0ZTsKPiA+ICt9Cj4gPiArCj4gPiAgaW50IGludGVsX3BsYW5l X2F0b21pY19jaGVja193aXRoX3N0YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpv bGRfY3J0Y19zdGF0ZSwKPiA+ICAJCQkJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0 Y19zdGF0ZSwKPiA+ICAJCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3Bs YW5lX3N0YXRlLAo+ID4gQEAgLTEyNSw2ICsxNDEsNyBAQCBpbnQgaW50ZWxfcGxhbmVfYXRvbWlj X2NoZWNrX3dpdGhfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRj Xwo+ID4gIAluZXdfY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5lcyAmPSB+QklUKHBsYW5lLT5pZCk7 Cj4gPiAgCW5ld19jcnRjX3N0YXRlLT5udjEyX3BsYW5lcyAmPSB+QklUKHBsYW5lLT5pZCk7Cj4g PiAgCW5ld19jcnRjX3N0YXRlLT5jOF9wbGFuZXMgJj0gfkJJVChwbGFuZS0+aWQpOwo+ID4gKwlu ZXdfY3J0Y19zdGF0ZS0+ZGF0YV9yYXRlW3BsYW5lLT5pZF0gPSAwOwo+ID4gIAluZXdfcGxhbmVf c3RhdGUtPmJhc2UudmlzaWJsZSA9IGZhbHNlOwo+ID4gIAo+ID4gIAlpZiAoIW5ld19wbGFuZV9z dGF0ZS0+YmFzZS5jcnRjICYmICFvbGRfcGxhbmVfc3RhdGUtPmJhc2UuY3J0YykKPiA+IEBAIC0x NDksNiArMTY2LDkgQEAgaW50IGludGVsX3BsYW5lX2F0b21pY19jaGVja193aXRoX3N0YXRlKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y18KPiA+ICAJaWYgKG5ld19wbGFu ZV9zdGF0ZS0+YmFzZS52aXNpYmxlIHx8IG9sZF9wbGFuZV9zdGF0ZS0+YmFzZS52aXNpYmxlKQo+ ID4gIAkJbmV3X2NydGNfc3RhdGUtPnVwZGF0ZV9wbGFuZXMgfD0gQklUKHBsYW5lLT5pZCk7Cj4g PiAgCj4gPiArCW5ld19jcnRjX3N0YXRlLT5kYXRhX3JhdGVbcGxhbmUtPmlkXSA9Cj4gPiArCQlp bnRlbF9wbGFuZV9kYXRhX3JhdGUobmV3X2NydGNfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSk7Cj4g PiArCj4gPiAgCXJldHVybiBpbnRlbF9wbGFuZV9hdG9taWNfY2FsY19jaGFuZ2VzKG9sZF9jcnRj X3N0YXRlLAo+ID4gIAkJCQkJICAgICAgICZuZXdfY3J0Y19zdGF0ZS0+YmFzZSwKPiA+ICAJCQkJ CSAgICAgICBvbGRfcGxhbmVfc3RhdGUsCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9h dG9taWNfcGxhbmUuaAo+ID4gaW5kZXggMTQ2Nzg2MjA0NDBmLi4wYTk2NTEzNzZkMGUgMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuaAo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmgKPiA+IEBAIC0x NSw2ICsxNSw4IEBAIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZTsKPiA+ICAKPiA+ICBleHRlcm4g Y29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgaW50ZWxfcGxhbmVfaGVscGVyX2Z1 bmNzOwo+ID4gIAo+ID4gK3Vuc2lnbmVkIGludCBpbnRlbF9wbGFuZV9kYXRhX3JhdGUoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiArCQkJCSAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpOwo+ID4gIHZvaWQgaW50ZWxfdXBk YXRlX3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAgCQkJY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gPiAgCQkJY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfYncuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmMKPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjMwNGJmODdmMGEy ZQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf YncuYwo+ID4gQEAgLTAsMCArMSwxODEgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlv bgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19zdGF0ZV9oZWxw ZXIuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSAiaW50ZWxfYncuaCIKPiA+ICsjaW5jbHVkZSAiaW50 ZWxfZHJ2LmgiCj4gPiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCBpbnRlbF9id19jcnRjX251 bV9hY3RpdmVfcGxhbmVzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KQo+ID4gK3sKPiA+ICsJLyoKPiA+ICsJICogV2UgYXNzdW1lIGN1cnNvcnMgYXJlIHNtYWxsIGVu b3VnaAo+ID4gKwkgKiB0byBub3Qgbm90IGNhdXNlIGJhbmR3aWR0aCBwcm9ibGVtcy4KPiA+ICsJ ICovCj4gPiArCXJldHVybiBod2VpZ2h0OChjcnRjX3N0YXRlLT5hY3RpdmVfcGxhbmVzICYgfkJJ VChQTEFORV9DVVJTT1IpKTsKPiAKPiBEbyB3ZSBhbHNvIG5lZWQgdG8gYWNjb3VudCBmb3IgTlYx MiBzbGF2ZSBwbGFuZXM/ICBJSVJDLCB0aGV5J3JlIG5vdCBzZXQKPiBpbiB0aGUgYWN0aXZlX3Bs YW5lcyBiaXRtYXNrLCBidXQgdGhleSdyZSBzdGlsbCByZWFkaW5nIGZyb20gRFJBTSwgc28gSQo+ IGltYWdpbmUgdGhleSdkIGNvdW50IHRvd2FyZCB0aGUgY2FsY3VsYXRpb25zIGhlcmU/CgpUaGV5 IHNob3VsZCBiZSBwYXJ0IG9mIGFjdGl2ZV9wbGFuZXMuCgo+IAo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgdW5zaWduZWQgaW50IGludGVsX2J3X2NydGNfZGF0YV9yYXRlKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGludGVsX2Ny dGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7Cj4gPiArCXVu c2lnbmVkIGludCBkYXRhX3JhdGUgPSAwOwo+ID4gKwllbnVtIHBsYW5lX2lkIHBsYW5lX2lkOwo+ ID4gKwo+ID4gKwlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGNydGMsIHBsYW5lX2lkKSB7Cj4g PiArCQkvKgo+ID4gKwkJICogV2UgYXNzdW1lIGN1cnNvcnMgYXJlIHNtYWxsIGVub3VnaAo+ID4g KwkJICogdG8gbm90IG5vdCBjYXVzZSBiYW5kd2lkdGggcHJvYmxlbXMuCj4gPiArCQkgKi8KPiA+ ICsJCWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCj4gPiArCQkJY29udGludWU7Cj4gPiAr Cj4gPiArCQlkYXRhX3JhdGUgKz0gY3J0Y19zdGF0ZS0+ZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiA+ ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gZGF0YV9yYXRlOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lk IGludGVsX2J3X2NydGNfdXBkYXRlKHN0cnVjdCBpbnRlbF9id19zdGF0ZSAqYndfc3RhdGUsCj4g PiArCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRl LT5iYXNlLmNydGMpOwo+ID4gKwo+ID4gKwlid19zdGF0ZS0+ZGF0YV9yYXRlW2NydGMtPnBpcGVd ID0KPiA+ICsJCWludGVsX2J3X2NydGNfZGF0YV9yYXRlKGNydGNfc3RhdGUpOwo+ID4gKwlid19z dGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXNbY3J0Yy0+cGlwZV0gPQo+ID4gKwkJaW50ZWxfYndfY3J0 Y19udW1fYWN0aXZlX3BsYW5lcyhjcnRjX3N0YXRlKTsKPiA+ICsKPiA+ICsJRFJNX0RFQlVHX0tN UygicGlwZSAlYyBkYXRhIHJhdGUgJXUgbnVtIGFjdGl2ZSBwbGFuZXMgJXVcbiIsCj4gPiArCQkg ICAgICBwaXBlX25hbWUoY3J0Yy0+cGlwZSksCj4gPiArCQkgICAgICBid19zdGF0ZS0+ZGF0YV9y YXRlW2NydGMtPnBpcGVdLAo+ID4gKwkJICAgICAgYndfc3RhdGUtPm51bV9hY3RpdmVfcGxhbmVz W2NydGMtPnBpcGVdKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCBpbnRl bF9id19udW1fYWN0aXZlX3BsYW5lcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gPiArCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2J3X3N0YXRlICpid19zdGF0ZSkK PiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCBudW1fYWN0aXZlX3BsYW5lcyA9IDA7Cj4gPiArCWVu dW0gcGlwZSBwaXBlOwo+ID4gKwo+ID4gKwlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBwaXBlKQo+ ID4gKwkJbnVtX2FjdGl2ZV9wbGFuZXMgKz0gYndfc3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzW3Bp cGVdOwo+ID4gKwo+ID4gKwlyZXR1cm4gbnVtX2FjdGl2ZV9wbGFuZXM7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW50ZWxfYndfZGF0YV9yYXRlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiA+ICsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9i d19zdGF0ZSAqYndfc3RhdGUpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlID0g MDsKPiA+ICsJZW51bSBwaXBlIHBpcGU7Cj4gPiArCj4gPiArCWZvcl9lYWNoX3BpcGUoZGV2X3By aXYsIHBpcGUpCj4gPiArCQlkYXRhX3JhdGUgKz0gYndfc3RhdGUtPmRhdGFfcmF0ZVtwaXBlXTsK PiA+ICsKPiA+ICsJcmV0dXJuIGRhdGFfcmF0ZTsKPiA+ICt9Cj4gPiArCj4gPiAraW50IGludGVs X2J3X2F0b21pY19jaGVjayhzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoc3RhdGUt PmJhc2UuZGV2KTsKPiA+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRl LCAqb2xkX2NydGNfc3RhdGU7Cj4gPiArCXN0cnVjdCBpbnRlbF9id19zdGF0ZSAqYndfc3RhdGUg PSBOVUxMOwo+ID4gKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRlLCBtYXhfZGF0YV9yYXRlOwo+ID4g Kwl1bnNpZ25lZCBpbnQgbnVtX2FjdGl2ZV9wbGFuZXM7Cj4gPiArCXN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJLyogRklYTUUgZWFybGllciBnZW5zIG5l ZWQgc29tZSBjaGVja3MgdG9vICovCj4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEp Cj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJZm9yX2VhY2hfb2xkbmV3X2ludGVsX2NydGNf aW5fc3RhdGUoc3RhdGUsIGNydGMsIG9sZF9jcnRjX3N0YXRlLAo+ID4gKwkJCQkJICAgIG5ld19j cnRjX3N0YXRlLCBpKSB7Cj4gPiArCQl1bnNpZ25lZCBpbnQgb2xkX2RhdGFfcmF0ZSA9Cj4gPiAr CQkJaW50ZWxfYndfY3J0Y19kYXRhX3JhdGUob2xkX2NydGNfc3RhdGUpOwo+ID4gKwkJdW5zaWdu ZWQgaW50IG5ld19kYXRhX3JhdGUgPQo+ID4gKwkJCWludGVsX2J3X2NydGNfZGF0YV9yYXRlKG5l d19jcnRjX3N0YXRlKTsKPiA+ICsJCXVuc2lnbmVkIGludCBvbGRfYWN0aXZlX3BsYW5lcyA9Cj4g PiArCQkJaW50ZWxfYndfY3J0Y19udW1fYWN0aXZlX3BsYW5lcyhvbGRfY3J0Y19zdGF0ZSk7Cj4g PiArCQl1bnNpZ25lZCBpbnQgbmV3X2FjdGl2ZV9wbGFuZXMgPQo+ID4gKwkJCWludGVsX2J3X2Ny dGNfbnVtX2FjdGl2ZV9wbGFuZXMobmV3X2NydGNfc3RhdGUpOwo+ID4gKwo+ID4gKwkJLyoKPiA+ ICsJCSAqIEF2b2lkIGxvY2tpbmcgdGhlIGJ3IHN0YXRlIHdoZW4KPiA+ICsJCSAqIG5vdGhpbmcg c2lnbmlmaWNhbnQgaGFzIGNoYW5nZWQuCj4gPiArCQkgKi8KPiA+ICsJCWlmIChvbGRfZGF0YV9y YXRlID09IG5ld19kYXRhX3JhdGUgJiYKPiA+ICsJCSAgICBvbGRfYWN0aXZlX3BsYW5lcyA9PSBu ZXdfYWN0aXZlX3BsYW5lcykKPiA+ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCWJ3X3N0YXRl ICA9IGludGVsX2F0b21pY19nZXRfYndfc3RhdGUoc3RhdGUpOwo+ID4gKwkJaWYgKElTX0VSUihi d19zdGF0ZSkpCj4gPiArCQkJcmV0dXJuIFBUUl9FUlIoYndfc3RhdGUpOwo+ID4gKwo+ID4gKwkJ Yndfc3RhdGUtPmRhdGFfcmF0ZVtjcnRjLT5waXBlXSA9IG5ld19kYXRhX3JhdGU7Cj4gPiArCQli d19zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXNbY3J0Yy0+cGlwZV0gPSBuZXdfYWN0aXZlX3BsYW5l czsKPiA+ICsKPiA+ICsJCURSTV9ERUJVR19LTVMoInBpcGUgJWMgZGF0YSByYXRlICV1IG51bSBh Y3RpdmUgcGxhbmVzICV1XG4iLAo+ID4gKwkJCSAgICAgIHBpcGVfbmFtZShjcnRjLT5waXBlKSwK PiA+ICsJCQkgICAgICBid19zdGF0ZS0+ZGF0YV9yYXRlW2NydGMtPnBpcGVdLAo+ID4gKwkJCSAg ICAgIGJ3X3N0YXRlLT5udW1fYWN0aXZlX3BsYW5lc1tjcnRjLT5waXBlXSk7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJaWYgKCFid19zdGF0ZSkKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlkYXRh X3JhdGUgPSBpbnRlbF9id19kYXRhX3JhdGUoZGV2X3ByaXYsIGJ3X3N0YXRlKTsKPiA+ICsJbnVt X2FjdGl2ZV9wbGFuZXMgPSBpbnRlbF9id19udW1fYWN0aXZlX3BsYW5lcyhkZXZfcHJpdiwgYndf c3RhdGUpOwo+ID4gKwo+ID4gKwltYXhfZGF0YV9yYXRlID0gaW50ZWxfbWF4X2RhdGFfcmF0ZShk ZXZfcHJpdiwgbnVtX2FjdGl2ZV9wbGFuZXMpOwo+ID4gKwo+ID4gKwlkYXRhX3JhdGUgPSBESVZf Uk9VTkRfVVAoZGF0YV9yYXRlLCAxMDAwKTsKPiA+ICsKPiA+ICsJaWYgKGRhdGFfcmF0ZSA+IG1h eF9kYXRhX3JhdGUpIHsKPiA+ICsJCURSTV9ERUJVR19LTVMoIkJhbmR3aWR0aCAldSBNQi9zIGV4 Y2VlZHMgbWF4IGF2YWlsYWJsZSAlZCBNQi9zICglZCBhY3RpdmUgcGxhbmVzKVxuIiwKPiA+ICsJ CQkgICAgICBkYXRhX3JhdGUsIG1heF9kYXRhX3JhdGUsIG51bV9hY3RpdmVfcGxhbmVzKTsKPiA+ ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30K PiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICppbnRlbF9id19kdXBs aWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IGludGVsX2J3X3N0YXRlICpzdGF0ZTsKPiA+ICsKPiA+ICsJc3RhdGUgPSBrbWVtZHVwKG9i ai0+c3RhdGUsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFzdGF0ZSkK PiA+ICsJCXJldHVybiBOVUxMOwo+ID4gKwo+ID4gKwlfX2RybV9hdG9taWNfaGVscGVyX3ByaXZh dGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0ZS0+YmFzZSk7Cj4gPiArCj4gPiArCXJl dHVybiAmc3RhdGUtPmJhc2U7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGludGVsX2J3 X2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAo+ID4gKwkJCQkgICBz dHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJa2ZyZWUoc3RhdGUp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRl X2Z1bmNzIGludGVsX2J3X2Z1bmNzID0gewo+ID4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IGludGVsX2J3X2R1cGxpY2F0ZV9zdGF0ZSwKPiA+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0g aW50ZWxfYndfZGVzdHJveV9zdGF0ZSwKPiA+ICt9Owo+ID4gKwo+ID4gK2ludCBpbnRlbF9id19p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ICt7Cj4gPiArCXN0cnVj dCBpbnRlbF9id19zdGF0ZSAqc3RhdGU7Cj4gPiArCj4gPiArCXN0YXRlID0ga3phbGxvYyhzaXpl b2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghc3RhdGUpCj4gPiArCQlyZXR1cm4g LUVOT01FTTsKPiA+ICsKPiA+ICsJZHJtX2F0b21pY19wcml2YXRlX29ial9pbml0KCZkZXZfcHJp di0+ZHJtLCAmZGV2X3ByaXYtPmJ3X29iaiwKPiA+ICsJCQkJICAgICZzdGF0ZS0+YmFzZSwgJmlu dGVsX2J3X2Z1bmNzKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2J3LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9idy5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi5jMTQyNzJjYTViNTkKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2J3LmgKPiA+IEBAIC0wLDAgKzEsNDYgQEAKPiA+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUICovCj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAx OSBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX19JTlRFTF9C V19IX18KPiA+ICsjZGVmaW5lIF9fSU5URUxfQldfSF9fCj4gPiArCj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gPiArI2lu Y2x1ZGUgImludGVsX2Rpc3BsYXkuaCIKPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZTsKPiA+ICtzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlOwo+ID4gK3N0cnVjdCBpbnRlbF9jcnRj X3N0YXRlOwo+ID4gKwo+ID4gK3N0cnVjdCBpbnRlbF9id19zdGF0ZSB7Cj4gPiArCXN0cnVjdCBk cm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOwo+ID4gKwo+ID4gKwl1bnNpZ25lZCBpbnQgZGF0YV9yYXRl W0k5MTVfTUFYX1BJUEVTXTsKPiA+ICsJdTggbnVtX2FjdGl2ZV9wbGFuZXNbSTkxNV9NQVhfUElQ RVNdOwo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSB0b19pbnRlbF9id19zdGF0ZSh4KSBjb250 YWluZXJfb2YoKHgpLCBzdHJ1Y3QgaW50ZWxfYndfc3RhdGUsIGJhc2UpCj4gPiArCj4gPiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfYndfc3RhdGUgKgo+ID4gK2ludGVsX2F0b21pY19nZXRf Yndfc3RhdGUoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiArewo+ID4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5iYXNlLmRl dik7Cj4gPiArCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqYndfc3RhdGU7Cj4gPiArCj4gCj4g RG8gd2UgbmVlZCB0byBncmFiIGEgbG9jayBoZXJlPyAgT3RoZXJ3aXNlIEkgZG9uJ3Qgc2VlIGFu eXRoaW5nCj4gcHJldmVudGluZyBwYXJhbGxlbCBjb21taXRzIHRoYXQgdXBkYXRlIGRpc2pvaW50 IHNldHMgb2YgQ1JUQ3MgCj4gZnJvbSBleGNlZWRpbmcgdGhlIGNvbWJpbmVkIG1lbW9yeSBiYW5k d2lkdGguCgpQcml2YXRlIG9ianMgaGF2ZSBhIGxvY2sgZW1iZWRkZWQgaW4gdGhlbSBub3cuIEJ1 dCBldmVuIHdpdGggdGhhdAppdCBpcyBub3QgcXVpdGUgcmFjZSBmcmVlIHNpbmNlIHdlIGRvbid0 IHNlcmlhbGl6ZSB0aGUgYWN0dWFsIGNvbW1pdHMuClNvIHRoZXJlIGlzIHN0aWxsIGEgY2hhbmNl IG9mIHRlbXBvcmFyeSBleGN1cnNpb24gYWJvdmUgdGhlIGxpbWl0LgoKPiAKPiBHcmFudGVkLCBn cmFiYmluZyBhIGNlbnRyYWwgbG9jayBzZWVtcyByZWFsbHkgcGFpbmZ1bCBzaW5jZSB0aGVuIHBs YW5lCj4gdXBkYXRlcyBvbiBvbmUgQ1JUQyBtYXkgd2luZCB1cCBibG9ja2luZyBwbGFuZSB1cGRh dGVzIG9uIGFub3RoZXIgQ1JUQy4KPiBCdXQgSSBkb24ndCBrbm93IGlmIHRoZXJlJ3MgYW4gZWFz eSB3YXkgYXJvdW5kIHRoYXQgd2l0aCB0aGUgYWxnb3JpdGhtCj4gd2UndmUgYmVlbiBnaXZlbiBl aXRoZXIuICBXYXMgdGhlIG1lbnRpb24gb2YgcG90ZW50aWFsbHkgY2hvcHBpbmcgdXAgdGhlCj4g YmFuZHdpZHRoIGluIHRoZSBjb21taXQgbWVzc2FnZSBob3cgeW91IHBsYW4gdG8gYWRkcmVzcyB0 aGlzPyAgSS5lLiwKPiB0cmVhdCBpdCBsaWtlIHdlIGRvIHdpdGggRERCIHNwYWNlIG9uIG1vZGVz ZXRzIC0tLSBzaW5jZSB3ZSBnbG9iYWxseQo+IGxvY2sgZXZlcnl0aGluZyBvbiBhbnkgbW9kZXNl dCB3ZSBjYW4gZGl2aWRlIGl0IHVwIGF0IHRoYXQgcG9pbnQgYW5kCj4gdGhlbiBpbnRyYS1DUlRD IHVwZGF0ZXMgd2lsbCBvbmx5IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlaXIgb3duCj4gYWxsb2Nh dGlvbiB0aGVyZWFmdGVyPyAgVGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsaW1pdCBwbGFuZSB1c2Fn ZSBtb3JlCj4gdGhhbiBpcyBhY3R1YWxseSBuZWNlc3NhcnkgaW4gc29tZSBjYXNlczsgbm90IHN1 cmUgaG93IHRvIHdlaWdoIHRoZQo+IGltcGFjdCBvZiB0aGF0IHZzIHRoZSBkb3duc2lkZSBvZiBz dHVmZiBsaWtlIGFkZGluZy9yZW1vdmluZy9yZXNpemluZwo+IHBsYW5lcyBibG9ja2luZyBibG9j ayB1cGRhdGVzIHRvIHVucmVsYXRlZCBDUlRDJ3MuCgpZZWFoLCB0aGF0IHdhcyB0aGUgaWRlYS4g VGhpcyBzaG91bGQgYXZvaWQgdGhlIGFmb3JlbWVudGlvbmVkCnByb2JsZW0gb2YgdGVtcG9yYXJp bHkgZXhjZWVkaW5nIHRoZSBidyBsaW1pdCBkdWUgdG8gYXJiaXRyYXJ5CmNvbW1pdCBvcmRlci4g SSBldmVuIHN0YXJ0ZWQgaW1wbGVtZW50aW5nIHRoaXMgYnV0IHJhbiBpbnRvCnRvbyBtdWNoIGNv ZGUgdGhhdCBuZWVkcyByZXdvcmssIHNvIEkgcHV0IGl0IG9uIGhvbGQgZm9yIG5vdy4KCkFuZCBh cyB5b3Ugbm90ZSBpdCB3b3VsZCBsaWtlbHkgbGVhdmUgc29tZSBiYW5kd2lkdGggdW51dGlsaXpl ZC4KSSB3YXMgYWxzbyBwb25kZXJpbmcgYWJvdXQgc29tZSBraW5kIG9mIGh5YnJpZCBhcHByb2Fj aCB3aGVyZSBlYWNoCnBpcGUgd291bGQgc3RpbGwgaGF2ZSBpdHMgb3duIGFsbG9jYXRpb24sIGJ1 dCB3ZSBjb3VsZCBzb21laG93CnJlYWxsb2NhdGUgdGhhdCBkeW5hbWljYWxseSB3aXRob3V0IHJl c29ydGluZyB0byBhIGZ1bGwgbW9kZXNldC4KU28gZWFjaCBwaXBlIHdvdWxkIGJlIGluZGVwZW5k ZW50IHVudGlsIG9uZSByZWFjaGVzIGl0cyBjdXJyZW50CmJ3IGxpbWl0LCBhdCB3aGljaCBwb2lu dCB3ZSB0cnkgdG8gc3RlYWwgdW51c2VkIGJ3IGZyb20gdGhlIG90aGVyCnBpcGVzIGZvciB0aGUg cGlwZSB0aGF0IHJhbiBvdXQuIEllLiB0aGUgZ2xvYmFsIHNlcmlhbGl6YXRpb24Kd291bGQgb25s eSBoYXBwZW4gd2hlbiBzb21lb25lIGlzIGFjdHVhbGx5IHB1c2hpbmcgdGhlIGxpbWl0cy4KCi0t IApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4