From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v3] drm/dp: Use large transactions for I2C over AUX Date: Fri, 30 Jan 2015 08:11:44 +0200 Message-ID: <874mr8ztjz.fsf@intel.com> References: <1422373429-10137-1-git-send-email-simon.farnsworth@onelan.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id A57526E81D for ; Thu, 29 Jan 2015 22:10:52 -0800 (PST) In-Reply-To: <1422373429-10137-1-git-send-email-simon.farnsworth@onelan.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Simon Farnsworth , dri-devel@lists.freedesktop.org Cc: Thierry Reding , aidanamarks@gmail.com List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCAyNyBKYW4gMjAxNSwgU2ltb24gRmFybnN3b3J0aCA8c2ltb24uZmFybnN3b3J0aEBv bmVsYW4uY28udWs+IHdyb3RlOgo+IERpc3BsYXlQb3J0IHRvIERWSS1EIER1YWwgTGluayBhZGFw dGVycyBkZXNpZ25lZCBieSBCaXpsaW5rIGhhdmUgYnVncyBpbgo+IHRoZWlyIEkyQyBvdmVyIEFV WCBpbXBsZW1lbnRhdGlvbi4gVGhleSB3b3JrIGZpbmUgd2l0aCBXaW5kb3dzLCBidXQgZmFpbAo+ IHdpdGggTGludXguCj4KPiBJdCB0dXJucyBvdXQgdGhhdCB0aGV5IGNhbm5vdCBrZWVwIGFuIEky QyB0cmFuc2FjdGlvbiBvcGVuIHVubGVzcyB0aGUKPiBwcmV2aW91cyByZWFkIHdhcyAxNiBieXRl czsgc2hvcnRlciByZWFkcyBjYW4gb25seSBiZSBmb2xsb3dlZCBieSBhIHplcm8KPiBieXRlIHRy YW5zZmVyIGVuZGluZyB0aGUgSTJDIHRyYW5zYWN0aW9uLgo+Cj4gQ29weSBXaW5kb3dzJ3MgYmVo YXZpb3VyLCBhbmQgcmVhZCAxNiBieXRlcyBhdCBhIHRpbWUuIElmIHdlIGdldCBhIHNob3J0Cj4g cmVwbHksIGFzc3VtZSB0aGF0IHRoZXJlJ3MgYSBoYXJkd2FyZSBib3R0bGVuZWNrLCBhbmQgc2hy aW5rIG91ciByZWFkIHNpemUKPiB0byBtYXRjaC4gRm9yIHRoaXMgcHVycG9zZSwgdXNlIHRoZSBh bGdvcml0aG0gaW4gdGhlIERpc3BsYXlQb3J0IDEuMiBzcGVjLAo+IGluIHRoZSBob3BlcyB0aGF0 IGl0J2xsIGJlIGNsb3Nlc3QgdG8gd2hhdCBXaW5kb3dzIGRvZXMsIGFzIG5vIHNpbmsgSSd2ZQo+ IGZvdW5kIGFjdHVhbGx5IGdpdmVzIHNob3J0IHJlcGxpZXMuCj4KPiBBbHNvIHByb3ZpZGUgYSBt b2R1bGUgcGFyYW1ldGVyIGZvciB0ZXN0aW5nIHNtYWxsZXIgdHJhbnNmZXIgc2l6ZXMsIGluIGNh c2UKPiB0aGVyZSBhcmUgc2lua3Mgb3V0IHRoZXJlIHRoYXQgY2Fubm90IHdvcmsgd2l0aCBXaW5k b3dzLgo+Cj4gU2lnbmVkLW9mZi1ieTogU2ltb24gRmFybnN3b3J0aCA8c2ltb24uZmFybnN3b3J0 aEBvbmVsYW4uY28udWs+CgpTaW1vbiAtCgpJJ3ZlIGJlZW4gcmVxdWVzdGluZyB0ZXN0aW5nIG9m IHlvdXIgcGF0Y2ggb24gdmFyaW91cyByZWxhdGVkIGJ1Z3MsIGFuZAp3ZSBoYXZlIGEgd2lubmVy LiBBbmQgeW91IHByb2JhYmx5IGhhdmUgYSBuZXcgZnJpZW5kIG92ZXIgdGhlcmUgdG9vISA7KQoK QnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTU1 MjI4ClRlc3RlZC1ieTogQWlkYW4gTWFya3MgPGFpZGFuYW1hcmtzQGdtYWlsLmNvbT4KClBsZWFz ZSBhZGQgdGhvc2UgdG8gdGhlIG5leHQgdmVyc2lvbi4gQW5kIHRoYW5rcyBmb3IgcHVyc3Vpbmcg dGhpcywgZ29vZApqb2IhCgpCUiwKSmFuaS4KCgo+IC0tLQo+Cj4gdjMgY2hhbmdlcywgYWZ0ZXIg ZmVlZGJhY2sgZnJvbSBWaWxsZSBhbmQgbW9yZSB0ZXN0aW5nIG9mIFdpbmRvd3M6Cj4KPiAgKiBD aGFuZ2UgdGhlIHNob3J0IHJlcGx5IGFsZ29yaXRobSB0byBtYXRjaCBWaWxsZSdzIGRlc2NyaXB0 aW9uIG9mIHRoZQo+ICAgIERpc3BsYXlQb3J0IDEuMiBzcGVjIHdvcmRpbmcuCj4KPiAgKiBBZGQg YSBtb2R1bGUgcGFyYW1ldGVyIHRvIHNldCB0aGUgZGVmYXVsdCB0cmFuc2ZlciBzaXplIGZvcgo+ ICAgIGV4cGVyaW1lbnRzLiBSZXF1ZXN0ZWQgb3ZlciBJUkMgYnkgVmlsbGUuCj4KPiBOby1vbmUn cyBiZWVuIGFibGUgdG8gZmluZCBhIGRldmljZSB0aGF0IGRvZXMgc2hvcnQgcmVwbGllcywgYnV0 IGV4cGVyaW1lbnRzCj4gc2hvdyB0aGF0IGJpZ2dlciByZWFkcyBhcmUgZmFzdGVyIG9uIG1vc3Qg ZGV2aWNlcy4gVmlsbGUgZ290Ogo+Cj4gIERQLT5EVkkgKE9VSSAwMDFjZjgpOiAgNDBtcyAtPiAz NW1zCj4gIERQLT5WR0EgKE9VSSAwMDIyYjkpOiAgNDVtcyAtPiAzOG1zCj4gIFpvdGFjIERQLT4y eEhETUk6ICAgICAgMjVtcyAtPiAgNG1zCj4KPiB2MiBjaGFuZ2VzLCBhZnRlciBmZWVkYmFjayBm cm9tIFRoaWVycnkgYW5kIFZpbGxlOgo+Cj4gICogSGFuZGxlIHNob3J0IHJlcGxpZXMuIEkndmUg ZGVjaWRlZCAoYXJiaXRyYXJpbHkpIHRoYXQgYSBzaG9ydCByZXBseQo+ICAgIHJlc3VsdHMgaW4g dXMgZHJvcHBpbmcgYmFjayB0byB0aGUgbmV3bHkgY2hvc2VuIHNpemUgZm9yIHRoZSByZXN0IG9m IHRoaXMKPiAgICBJMkMgdHJhbnNhY3Rpb24uIFRodXMsIGdpdmVuIGFuIGF0dGVtcHQgdG8gcmVh ZCB0aGUgZmlyc3QgMTYgYnl0ZXMgb2YKPiAgICBFRElELCBhbmQgYSBzaW5rIHRoYXQgb25seSBk b2VzIDQgYnl0ZXMgb2YgYnVmZmVyaW5nLCB3ZSB3aWxsIHNlZSB0aGUKPiAgICBmb2xsb3dpbmcg QVVYIHRyYW5zZmVycyBmb3IgdGhlIEVESUQgcmVhZCAoYWZ0ZXIgYWRkcmVzcyBpcyBzZXQpOgo+ Cj4gICAgPHNldCBhZGRyZXNzLCBibG9jayBldGM+Cj4gICAgUmVhZCAxNiBieXRlcyBmcm9tIEky QyBvdmVyIEFVWC4KPiAgICBSZXBseSB3aXRoIDQgYnl0ZXMKPiAgICBSZWFkIDQgYnl0ZXMKPiAg ICBSZXBseSB3aXRoIDQgYnl0ZXMKPiAgICBSZWFkIDQgYnl0ZXMKPiAgICBSZXBseSB3aXRoIDQg Ynl0ZXMKPiAgICBSZWFkIDQgYnl0ZXMKPiAgICBSZXBseSB3aXRoIDQgYnl0ZXMKPiAgICA8ZW5k IEkyQyB0cmFuc2FjdGlvbj4KPgo+IE5vdGUgdGhhdCBJJ3ZlIG5vdCBsb29rZWQgYXQgTVNUIHN1 cHBvcnQgLSBJIGhhdmUgbmVpdGhlciB0aGUgRFAgMS4yIHNwZWMKPiBub3IgYW55IE1TVCBicmFu Y2ggZGV2aWNlcywgc28gSSBjYW4ndCB0ZXN0IGFueXRoaW5nIEkgd3JpdGUgb3IgY2hlY2sgaXQK PiBhZ2FpbnN0IGEgc3BlYy4gSXQgbG9va3MgZnJvbSB0aGUgY29kZSwgaG93ZXZlciwgYXMgaWYg TVNUIGhhcyB0aGUgYnJhbmNoCj4gZGV2aWNlIGRvIHRoZSBzcGxpdCBmcm9tIGEgYmlnIHJlcXVl c3QgaW50byBzbWFsbCB0cmFuc2FjdGlvbnMuCj4KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9o ZWxwZXIuYyB8IDkxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCj4g IGluY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaCAgICAgfCAgNSArKysKPiAgMiBmaWxlcyBjaGFu Z2VkLCA3NyBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9o ZWxwZXIuYwo+IGluZGV4IDc5OTY4ZTMuLjNkYjExNmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVs cGVyLmMKPiBAQCAtMzk2LDExICszOTYsMTMgQEAgc3RhdGljIHUzMiBkcm1fZHBfaTJjX2Z1bmN0 aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQo+ICAgKiByZXRyeWluZyB0aGUg dHJhbnNhY3Rpb24gYXMgYXBwcm9wcmlhdGUuICBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlCj4gICAq IGF1eC0+dHJhbnNmZXIgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGFueXRoaW5nIGluIHRoZSBt c2cgb3RoZXIgdGhhbiB0aGUKPiAgICogcmVwbHkgZmllbGQuCj4gKyAqCj4gKyAqIFJldHVybnMg Ynl0ZXMgdHJhbnNmZXJyZWQgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9u IGZhaWx1cmUuCj4gICAqLwo+ICBzdGF0aWMgaW50IGRybV9kcF9pMmNfZG9fbXNnKHN0cnVjdCBk cm1fZHBfYXV4ICphdXgsIHN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ICB7Cj4gIAl1bnNp Z25lZCBpbnQgcmV0cnk7Cj4gLQlpbnQgZXJyOwo+ICsJaW50IHJldDsKPiAgCj4gIAkvKgo+ICAJ ICogRFAxLjIgc2VjdGlvbnMgMi43LjcuMS41LjYuMSBhbmQgMi43LjcuMS42LjYuMTogQSBEUCBT b3VyY2UgZGV2aWNlCj4gQEAgLTQwOSwxNCArNDExLDE0IEBAIHN0YXRpYyBpbnQgZHJtX2RwX2ky Y19kb19tc2coc3RydWN0IGRybV9kcF9hdXggKmF1eCwgc3RydWN0IGRybV9kcF9hdXhfbXNnICpt c2cpCj4gIAkgKi8KPiAgCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDc7IHJldHJ5KyspIHsKPiAg CQltdXRleF9sb2NrKCZhdXgtPmh3X211dGV4KTsKPiAtCQllcnIgPSBhdXgtPnRyYW5zZmVyKGF1 eCwgbXNnKTsKPiArCQlyZXQgPSBhdXgtPnRyYW5zZmVyKGF1eCwgbXNnKTsKPiAgCQltdXRleF91 bmxvY2soJmF1eC0+aHdfbXV0ZXgpOwo+IC0JCWlmIChlcnIgPCAwKSB7Cj4gLQkJCWlmIChlcnIg PT0gLUVCVVNZKQo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCWlmIChyZXQgPT0gLUVCVVNZKQo+ ICAJCQkJY29udGludWU7Cj4gIAo+IC0JCQlEUk1fREVCVUdfS01TKCJ0cmFuc2FjdGlvbiBmYWls ZWQ6ICVkXG4iLCBlcnIpOwo+IC0JCQlyZXR1cm4gZXJyOwo+ICsJCQlEUk1fREVCVUdfS01TKCJ0 cmFuc2FjdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICAJCX0K PiAgCj4gIAo+IEBAIC00NTcsOSArNDU5LDcgQEAgc3RhdGljIGludCBkcm1fZHBfaTJjX2RvX21z ZyhzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKPiAg CQkJICogQm90aCBuYXRpdmUgQUNLIGFuZCBJMkMgQUNLIHJlcGxpZXMgcmVjZWl2ZWQuIFdlCj4g IAkJCSAqIGNhbiBhc3N1bWUgdGhlIHRyYW5zZmVyIHdhcyBzdWNjZXNzZnVsLgo+ICAJCQkgKi8K PiAtCQkJaWYgKGVyciA8IG1zZy0+c2l6ZSkKPiAtCQkJCXJldHVybiAtRVBST1RPOwo+IC0JCQly ZXR1cm4gMDsKPiArCQkJcmV0dXJuIHJldDsKPiAgCj4gIAkJY2FzZSBEUF9BVVhfSTJDX1JFUExZ X05BQ0s6Cj4gIAkJCURSTV9ERUJVR19LTVMoIkkyQyBuYWNrXG4iKTsKPiBAQCAtNDgyLDE0ICs0 ODIsNjcgQEAgc3RhdGljIGludCBkcm1fZHBfaTJjX2RvX21zZyhzdHJ1Y3QgZHJtX2RwX2F1eCAq YXV4LCBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKPiAgCXJldHVybiAtRVJFTU9URUlPOwo+ ICB9Cj4gIAo+ICsvKgo+ICsgKiBLZWVwIHJldHJ5aW5nIGRybV9kcF9pMmNfZG9fbXNnIHVudGls IGFsbCBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkLgo+ICsgKgo+ICsgKiBSZXR1cm5zIGFuIGVy cm9yIGNvZGUgb24gZmFpbHVyZSwgb3IgYSByZWNvbW1lbmRlZCB0cmFuc2ZlciBzaXplIG9uIHN1 Y2Nlc3MuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGRybV9kcF9pMmNfZHJhaW5fbXNnKHN0cnVjdCBk cm1fZHBfYXV4ICphdXgsIHN0cnVjdCBkcm1fZHBfYXV4X21zZyAqbXNnKQo+ICt7Cj4gKwlpbnQg cmV0Owo+ICsJc3RydWN0IGRybV9kcF9hdXhfbXNnIGRyYWluX21zZzsKPiArCWludCBkcmFpbl9i eXRlczsKPiArCj4gKwlyZXQgPSBkcm1fZHBfaTJjX2RvX21zZyhhdXgsIG1zZyk7Cj4gKwo+ICsJ aWYgKHJldCA9PSBtc2ctPnNpemUgfHwgcmV0IDw9IDApCj4gKwkJcmV0dXJuIHJldCA9PSAwID8g LUVQUk9UTyA6IHJldDsKPiArCj4gKwkvKgo+ICsJICogV2UgaGFkIGEgcGFydGlhbCByZXBseS4g RHJhaW4gb3V0IHRoZSByZXN0IG9mIHRoZSBieXRlcyB3ZQo+ICsJICogb3JpZ2luYWxseSByZXF1 ZXN0ZWQsIHRoZW4gcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBwYXJ0aWFsCj4gKwkgKiByZXBseS4g SW4gdGhlb3J5LCB0aGlzIHNob3VsZCBtYXRjaCBEUCAxLjIncyBkZXNpcmVkIGJlaGF2aW91cgo+ ICsJICogZm9yIEkyQyBvdmVyIEFVWC4KPiArCSAqLwo+ICsJRFJNX0RFQlVHX0tNUygiUGFydGlh bCBJMkMgcmVwbHk6IHJlcXVlc3RlZCAlenUgYnl0ZXMgZ290ICVkIGJ5dGVzXG4iLCBtc2ctPnNp emUsIHJldCk7Cj4gKwlkcmFpbl9tc2cgPSAqbXNnOwo+ICsJZHJhaW5fbXNnLnNpemUgLT0gcmV0 Owo+ICsJZHJhaW5fbXNnLmJ1ZmZlciArPSByZXQ7Cj4gKwl3aGlsZSAoZHJhaW5fbXNnLnNpemUg IT0gMCkgewo+ICsJCWRyYWluX2J5dGVzID0gZHJtX2RwX2kyY19kb19tc2coYXV4LCAmZHJhaW5f bXNnKTsKPiArCQlpZiAoZHJhaW5fYnl0ZXMgPD0gMCkKPiArCQkJcmV0dXJuIGRyYWluX2J5dGVz ID09IDAgPyAtRVBST1RPIDogZHJhaW5fYnl0ZXM7Cj4gKwkJZHJhaW5fbXNnLnNpemUgLT0gZHJh aW5fYnl0ZXM7Cj4gKwkJZHJhaW5fbXNnLmJ1ZmZlciArPSBkcmFpbl9ieXRlczsKPiArCX0KPiAr CXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEJpemxpbmsgZGVzaWduZWQgRFAtPkRW SS1EIER1YWwgTGluayBhZGFwdGVycyByZXF1aXJlIHRoZSBJMkMgb3ZlciBBVVgKPiArICogcGFj a2V0cyB0byBiZSBhcyBsYXJnZSBhcyBwb3NzaWJsZS4gSWYgbm90LCB0aGUgSTJDIHRyYW5zYWN0 aW9ucyBuZXZlcgo+ICsgKiBzdWNjZWVkLiBIZW5jZSB0aGUgZGVmYXVsdCBpcyBtYXhpbXVtLgo+ ICsgKi8KPiArc3RhdGljIGludCBkcF9hdXhfaTJjX3RyYW5zZmVyX3NpemUgX19yZWFkX21vc3Rs eSA9IERQX0FVWF9NQVhfUEFZTE9BRF9CWVRFUzsKPiArbW9kdWxlX3BhcmFtX25hbWVkKGRwX2F1 eF9pMmNfdHJhbnNmZXJfc2l6ZSwgZHBfYXV4X2kyY190cmFuc2Zlcl9zaXplLCBpbnQsIDA2MDAp Owo+ICtNT0RVTEVfUEFSTV9ERVNDKGRwX2F1eF9pMmNfdHJhbnNmZXJfc2l6ZSwKPiArCQkgIk51 bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciBpbiBhIHNpbmdsZSBJMkMgb3ZlciBEUCBBVVggQ0gg bWVzc2FnZSwgKDEtMTYsIGRlZmF1bHQgMTYpIik7Cj4gKwo+ICBzdGF0aWMgaW50IGRybV9kcF9p MmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dz LAo+ICAJCQkgICBpbnQgbnVtKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4ID0gYWRh cHRlci0+YWxnb19kYXRhOwo+ICAJdW5zaWduZWQgaW50IGksIGo7Cj4gKwlpbnQgdHJhbnNmZXJf c2l6ZTsKPiAgCXN0cnVjdCBkcm1fZHBfYXV4X21zZyBtc2c7Cj4gIAlpbnQgZXJyID0gMDsKPiAg Cj4gKwlpZiAoZHBfYXV4X2kyY190cmFuc2Zlcl9zaXplIDwgMSB8fCBkcF9hdXhfaTJjX3RyYW5z ZmVyX3NpemUgPiBEUF9BVVhfTUFYX1BBWUxPQURfQllURVMpIHsKPiArCQlEUk1fRVJST1IoImRw X2F1eF9pMmNfdHJhbnNmZXJfc2l6ZSBpbnZhbGlkIC0gY2hhbmdpbmcgZnJvbSAlZCB0byAlZFxu IiwKPiArCQkJICBkcF9hdXhfaTJjX3RyYW5zZmVyX3NpemUsIERQX0FVWF9NQVhfUEFZTE9BRF9C WVRFUyk7Cj4gKwkJZHBfYXV4X2kyY190cmFuc2Zlcl9zaXplID0gRFBfQVVYX01BWF9QQVlMT0FE X0JZVEVTOwo+ICsJfQo+ICsKPiAgCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7Cj4gIAo+ ICAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Cj4gQEAgLTUwNywyMCArNTYwLDIwIEBAIHN0 YXRpYyBpbnQgZHJtX2RwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgc3Ry dWN0IGkyY19tc2cgKm1zZ3MsCj4gIAkJZXJyID0gZHJtX2RwX2kyY19kb19tc2coYXV4LCAmbXNn KTsKPiAgCQlpZiAoZXJyIDwgMCkKPiAgCQkJYnJlYWs7Cj4gLQkJLyoKPiAtCQkgKiBNYW55IGhh cmR3YXJlIGltcGxlbWVudGF0aW9ucyBzdXBwb3J0IEZJRk9zIGxhcmdlciB0aGFuIGEKPiAtCQkg KiBzaW5nbGUgYnl0ZSwgYnV0IGl0IGhhcyBiZWVuIGVtcGlyaWNhbGx5IGRldGVybWluZWQgdGhh dAo+IC0JCSAqIHRyYW5zZmVycmluZyBkYXRhIGluIGxhcmdlciBjaHVua3MgY2FuIGFjdHVhbGx5 IGxlYWQgdG8KPiAtCQkgKiBkZWNyZWFzZWQgcGVyZm9ybWFuY2UuIFRoZXJlZm9yZSBlYWNoIG1l c3NhZ2UgaXMgc2ltcGx5Cj4gLQkJICogdHJhbnNmZXJyZWQgYnl0ZS1ieS1ieXRlLgo+ICsJCS8q IFdlIHdhbnQgZWFjaCB0cmFuc2FjdGlvbiB0byBiZSBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYnV0 Cj4gKwkJICogd2UnbGwgZ28gdG8gc21hbGxlciBzaXplcyBpZiB0aGUgaGFyZHdhcmUgZ2l2ZXMg dXMgYQo+ICsJCSAqIHNob3J0IHJlcGx5Lgo+ICAJCSAqLwo+IC0JCWZvciAoaiA9IDA7IGogPCBt c2dzW2ldLmxlbjsgaisrKSB7Cj4gKwkJdHJhbnNmZXJfc2l6ZSA9IGRwX2F1eF9pMmNfdHJhbnNm ZXJfc2l6ZTsKPiArCQlmb3IgKGogPSAwOyBqIDwgbXNnc1tpXS5sZW47IGogKz0gbXNnLnNpemUp IHsKPiAgCQkJbXNnLmJ1ZmZlciA9IG1zZ3NbaV0uYnVmICsgajsKPiAtCQkJbXNnLnNpemUgPSAx Owo+ICsJCQltc2cuc2l6ZSA9IG1pbigodW5zaWduZWQpdHJhbnNmZXJfc2l6ZSwgbXNnc1tpXS5s ZW4gLSBqKTsKPiAgCj4gLQkJCWVyciA9IGRybV9kcF9pMmNfZG9fbXNnKGF1eCwgJm1zZyk7Cj4g LQkJCWlmIChlcnIgPCAwKQo+ICsJCQl0cmFuc2Zlcl9zaXplID0gZHJtX2RwX2kyY19kcmFpbl9t c2coYXV4LCAmbXNnKTsKPiArCQkJaWYgKHRyYW5zZmVyX3NpemUgPCAwKSB7Cj4gKwkJCQllcnIg PSB0cmFuc2Zlcl9zaXplOwo+ICAJCQkJYnJlYWs7Cj4gKwkJCX0KPiAgCQl9Cj4gIAkJaWYgKGVy ciA8IDApCj4gIAkJCWJyZWFrOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfaGVs cGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmgKPiBpbmRleCAxMWY4Yzg0Li40NDRk NTFiIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+ICsrKyBiL2lu Y2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAo+IEBAIC00Miw2ICs0Miw4IEBACj4gICAqIDEuMiBm b3JtYWxseSBpbmNsdWRlcyBib3RoIGVEUCBhbmQgRFBJIGRlZmluaXRpb25zLgo+ICAgKi8KPiAg Cj4gKyNkZWZpbmUgRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTCTE2Cj4gKwo+ICAjZGVmaW5lIERQ X0FVWF9JMkNfV1JJVEUJCTB4MAo+ICAjZGVmaW5lIERQX0FVWF9JMkNfUkVBRAkJCTB4MQo+ICAj ZGVmaW5lIERQX0FVWF9JMkNfU1RBVFVTCQkweDIKPiBAQCAtNTE5LDYgKzUyMSw5IEBAIHN0cnVj dCBkcm1fZHBfYXV4X21zZyB7Cj4gICAqIHRyYW5zYWN0aW9ucy4gVGhlIGRybV9kcF9hdXhfcmVn aXN0ZXJfaTJjX2J1cygpIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbgo+ICAgKiBJMkMgYWRhcHRlciB0 aGF0IGNhbiBiZSBwYXNzZWQgdG8gZHJtX3Byb2JlX2RkYygpLiBVcG9uIHJlbW92YWwsIGRyaXZl cnMKPiAgICogc2hvdWxkIGNhbGwgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2kyY19idXMoKSB0byBy ZW1vdmUgdGhlIEkyQyBhZGFwdGVyLgo+ICsgKiBUaGUgSTJDIGFkYXB0ZXIgdXNlcyBsb25nIHRy YW5zZmVycyBieSBkZWZhdWx0OyBpZiBhIHBhcnRpYWwgcmVzcG9uc2UgaXMKPiArICogcmVjZWl2 ZWQsIHRoZSBhZGFwdGVyIHdpbGwgZHJvcCBkb3duIHRvIHRoZSBzaXplIGdpdmVuIGJ5IHRoZSBw YXJ0aWFsCj4gKyAqIHJlc3BvbnNlIGZvciB0aGlzIHRyYW5zYWN0aW9uIG9ubHkuCj4gICAqCj4g ICAqIE5vdGUgdGhhdCB0aGUgYXV4IGhlbHBlciBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgLnRyYW5z ZmVyKCkgZnVuY3Rpb24KPiAgICogb25seSBtb2RpZmllcyB0aGUgcmVwbHkgZmllbGQgb2YgdGhl IGRybV9kcF9hdXhfbXNnIHN0cnVjdHVyZS4gIFRoZQo+IC0tIAo+IDIuMS4wCj4KPiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWls aW5nIGxpc3QKPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkphbmkgTmlr dWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRlcgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=