From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 851D26EBD2 for ; Fri, 9 Mar 2018 16:35:55 +0000 (UTC) References: <20180309145034.25757-1-lionel.g.landwerlin@intel.com> <20180309145034.25757-3-lionel.g.landwerlin@intel.com> From: Tvrtko Ursulin Message-ID: Date: Fri, 9 Mar 2018 16:35:52 +0000 MIME-Version: 1.0 In-Reply-To: <20180309145034.25757-3-lionel.g.landwerlin@intel.com> Content-Language: en-GB Subject: Re: [igt-dev] [PATCH i-g-t v9 3/3] tests: add i915 query tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Lionel Landwerlin , igt-dev@lists.freedesktop.org List-ID: CldpdGggYSBjb21taXQgbWVzc2FnZSBhZGRlZDoKClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgoKUmVnYXJkcywKClR2cnRrbwoKT24gMDkvMDMv MjAxOCAxNDo1MCwgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4gdjI6IENvbXBsZXRlIGludmFs aWQgY2FzZXMgKENocmlzKQo+ICAgICAgU29tZSBzdHlsaW5nICh0b191c2VyX3BvaW50ZXIsIGV0 Yy4uLikgKENocmlzKQo+ICAgICAgTmV3IGVycm9yIGNoZWNrLCB0aHJvdWdoIGl0ZW0ubGVuZ3Ro IChDaHJpcykKPiAKPiB2MzogVXBkYXRlIGZvciBuZXcgdUFQSSBpdGVyYXRpb24gKExpb25lbCkK PiAKPiB2NDogUmV0dXJuIGVycm5vIGZyb20gYSBzaW5nbGUgcG9pbnQgKENocmlzKQo+ICAgICAg UG9pc2luZyBjaGVja3MgKENocmlzKQo+IAo+IHY1OiBBZGQgbW9yZSBkZWJ1ZyB0cmFjZXMgKExp b25lbCkKPiAgICAgIFVwZGF0ZSB1QVBJIChKb29uYXMvTGlvbmVsKQo+ICAgICAgTWFrZSBzdXJl IEhhc3dlbGwgaXMgdGVzdGVkIChMaW9uZWwpCj4gCj4gdjY6IHMvcXVlcnlfaXRlbS9xdWVyeV9p dGVtcy8gKFR2cnRrbykKPiAgICAgIHRlc3QgdGhhdCBmbGFncyBmaWVsZHMgIT0gMCBmYWlsIChU dnJ0a28pCj4gICAgICBTcGxpdCBrZXJuZWwgd3JpdGVzIGNoZWNrcyBvdXQgKFR2cnRrbykKPiAg ICAgIFZlcmlmeSB0aGF0IHdoZW4gYW4gRVUgaXMgYXZhaWxhYmxlLCBzbyBpcyBzbGljZSAmIHN1 YnNsaWNlIGl0Cj4gICAgICBiZWxvbmdzIHRvIChzYW1lIHdpdGggc3Vic2xpY2UpLiAoVHZydGtv KQo+ICAgICAgVmVyaWZ5IGtlcm5lbCBlcnJvcnMgb3V0IHdpdGggcmVhZCBvbmx5IG1lbW9yeSAo VHZydGtvKQo+IAo+IHY3OiBBZGQgYSBzcGVjaWFsIEhhc3dlbGwgdGVzdCB0byB2ZXJpZnkgY29y cmVjdCB2YWx1ZXMgKFR2cnRrbykKPiAgICAgIFNpbXBsaWZ5IGlndF9yZXF1aXJlKCkgaW4gZnJv bnQgb2YgdGVzdHMgKFR2cnRrbykKPiAKPiB2ODogUmV1c2UgdGhlIEdUIGZpZWxkIGZyb20gZGV2 aWNlIGluZm8gdG8gdmVyaWZ5IHNsaWNlL3N1YnNsaWNlcwo+ICAgICAgbnVtYmVycyBvbiB3aWRl ciBudW1iZXIgb2YgcGxhdGZvcm1zIChMaW9uZWwpCj4gCj4gdjk6IEZpeCBpbnZhbGlkIG51bWJl ciBvZiBzdWJzbGljZXMgb24gR1Q0IChMaW9uZWwpCj4gICAgICBVcGRhdGUgY29tbWVudHMgc3R5 bGUgKFR2cnRrbykKPiAgICAgIFRlc3QgaW52YWxpZCBxdWVyeSBwb2ludGVyIChUdnJ0a28pCj4g ICAgICBDaGVjayB0b3BvbG9neSBpdGVtIG1pbmltdW0gbGVuZ3RoIChUdnJ0a28pCj4gICAgICBU ZXN0IGludmFsaWQgaXRlbSBkYXRhIHBvaW50ZXJzIChUdnJ0a28pCj4gCj4gU2lnbmVkLW9mZi1i eTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgo+IC0t LQo+ICAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gICB0ZXN0cy9pOTE1X3F1ZXJ5 LmMgICAgIHwgNTE0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgIHRlc3RzL21lc29uLmJ1aWxkICAgICAgfCAgIDEgKwo+ICAgMyBmaWxlcyBjaGFu Z2VkLCA1MTYgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2k5MTVf cXVlcnkuYwo+IAo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMv TWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDRhODFhYzRhLi40ZTZmNTMxOSAxMDA2NDQKPiAtLS0g YS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ IEBAIC0xNjcsNiArMTY3LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4gICAJZ2VuM19yZW5kZXJfdGls ZWR4X2JsaXRzIFwKPiAgIAlnZW4zX3JlbmRlcl90aWxlZHlfYmxpdHMgXAo+ICAgCWd2dF9iYXNp YyBcCj4gKwlpOTE1X3F1ZXJ5IFwKPiAgIAlrbXNfM2QgXAo+ICAgCWttc19hZGRmYl9iYXNpYyBc Cj4gICAJa21zX2F0b21pYyBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTVfcXVlcnkuYyBiL3Rl c3RzL2k5MTVfcXVlcnkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAu LmJiMGYwNzA3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rlc3RzL2k5MTVfcXVlcnkuYwo+IEBA IC0wLDAgKzEsNTE0IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENvcnBv cmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks Cj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4g KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiAr ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg ImlndC5oIgo+ICsKPiArI2luY2x1ZGUgPGxpbWl0cy5oPgo+ICsKPiArSUdUX1RFU1RfREVTQ1JJ UFRJT04oIlRlc3RpbmcgdGhlIGk5MTUgcXVlcnkgdUFQSS4iKTsKPiArCj4gKy8qCj4gKyAqIFdl IHNob3VsZCBhdCBsZWFzdCBnZXQgMyBieXRlcyBmb3IgZGF0YSBmb3IgZWFjaCBzbGljZXMsIHN1 YnNsaWNlcyAmIEVVcwo+ICsgKiBtYXNrcy4KPiArICovCj4gKyNkZWZpbmUgTUlOX1RPUE9MT0dZ X0lURU1fU0laRSAoc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9xdWVyeV90b3BvbG9neV9pbmZvKSAr IDMpCj4gKwo+ICtzdGF0aWMgaW50Cj4gK19faTkxNV9xdWVyeShpbnQgZmQsIHN0cnVjdCBkcm1f aTkxNV9xdWVyeSAqcSkKPiArewo+ICsJaWYgKGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVf UVVFUlksIHEpKQo+ICsJCXJldHVybiAtZXJybm87Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludAo+ICtfX2k5MTVfcXVlcnlfaXRlbXMoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVf cXVlcnlfaXRlbSAqaXRlbXMsIHVpbnQzMl90IG5faXRlbXMpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9xdWVyeSBxID0gewo+ICsJCS5udW1faXRlbXMgPSBuX2l0ZW1zLAo+ICsJCS5pdGVtc19w dHIgPSB0b191c2VyX3BvaW50ZXIoaXRlbXMpLAo+ICsJfTsKPiArCXJldHVybiBfX2k5MTVfcXVl cnkoZmQsICZxKTsKPiArfQo+ICsKPiArI2RlZmluZSBpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCBpdGVt cywgbl9pdGVtcykgZG8geyBcCj4gKwkJaWd0X2Fzc2VydF9lcShfX2k5MTVfcXVlcnlfaXRlbXMo ZmQsIGl0ZW1zLCBuX2l0ZW1zKSwgMCk7IFwKPiArCQllcnJubyA9IDA7IFwKPiArCX0gd2hpbGUg KDApCj4gKyNkZWZpbmUgaTkxNV9xdWVyeV9pdGVtc19lcnIoZmQsIGl0ZW1zLCBuX2l0ZW1zLCBl cnIpIGRvIHsgXAo+ICsJCWlndF9hc3NlcnRfZXEoX19pOTE1X3F1ZXJ5X2l0ZW1zKGZkLCBpdGVt cywgbl9pdGVtcyksIC1lcnIpOyBcCj4gKwl9IHdoaWxlICgwKQo+ICsKPiArc3RhdGljIGJvb2wg aGFzX3F1ZXJ5X3N1cHBvcnRzKGludCBmZCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5 IHF1ZXJ5ID0ge307Cj4gKwo+ICsJcmV0dXJuIF9faTkxNV9xdWVyeShmZCwgJnF1ZXJ5KSA9PSAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0ZXN0X3F1ZXJ5X2dhcmJhZ2UoaW50IGZkKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnkgcXVlcnk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVl cnlfaXRlbSBpdGVtc1syXTsKPiArCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVtICppdGVtc19w dHI7Cj4gKwlpbnQgaSwgbl9pdGVtczsKPiArCj4gKwkvKiBWZXJpZnkgdGhhdCBpbnZhbGlkIHF1 ZXJ5IHBvaW50ZXJzIGFyZSByZWplY3RlZC4gKi8KPiArCWlndF9hc3NlcnRfZXEoX19pOTE1X3F1 ZXJ5KGZkLCBOVUxMKSwgLUVGQVVMVCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9faTkxNV9xdWVyeShm ZCwgKHZvaWQgKikgLTEpLCAtRUZBVUxUKTsKPiArCj4gKwkvKgo+ICsJICogUXVlcnkgZmxhZ3Mg ZmllbGQgaXMgY3VycmVudGx5IHZhbGlkIG9ubHkgaWYgZXF1YWxzIHRvIDAuIFRoaXMgbWlnaHQK PiArCSAqIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgo+ICsJICovCj4gKwltZW1zZXQoJnF1ZXJ5LCAw LCBzaXplb2YocXVlcnkpKTsKPiArCXF1ZXJ5LmZsYWdzID0gNDI7Cj4gKwlpZ3RfYXNzZXJ0X2Vx KF9faTkxNV9xdWVyeShmZCwgJnF1ZXJ5KSwgLUVJTlZBTCk7Cj4gKwo+ICsJLyogVGVzdCBhIGNv dXBsZSBvZiBpbnZhbGlkIHBvaW50ZXJzLiAqLwo+ICsJaTkxNV9xdWVyeV9pdGVtc19lcnIoZmQs ICh2b2lkICopIFVMT05HX01BWCwgMSwgRUZBVUxUKTsKPiArCWk5MTVfcXVlcnlfaXRlbXNfZXJy KGZkLCAodm9pZCAqKSAwLCAxLCBFRkFVTFQpOwo+ICsKPiArCS8qIFRlc3QgdGhlIGludmFsaWQg cXVlcnkgaWQgPSAwLiAqLwo+ICsJbWVtc2V0KGl0ZW1zLCAwLCBzaXplb2YoaXRlbXMpKTsKPiAr CWk5MTVfcXVlcnlfaXRlbXNfZXJyKGZkLCBpdGVtcywgMSwgRUlOVkFMKTsKPiArCj4gKwkvKgo+ ICsJICogUXVlcnkgaXRlbSBmbGFncyBmaWVsZCBpcyBjdXJyZW50bHkgdmFsaWQgb25seSBpZiBl cXVhbHMgdG8gMC4KPiArCSAqIFN1YmplY3QgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuCj4gKwkg Ki8KPiArCW1lbXNldChpdGVtcywgMCwgc2l6ZW9mKGl0ZW1zKSk7Cj4gKwlpdGVtc1swXS5xdWVy eV9pZCA9IERSTV9JOTE1X1FVRVJZX1RPUE9MT0dZX0lORk87Cj4gKwlpdGVtc1swXS5mbGFncyA9 IDQyOwo+ICsJaTkxNV9xdWVyeV9pdGVtcyhmZCwgaXRlbXMsIDEpOwo+ICsJaWd0X2Fzc2VydF9l cShpdGVtc1swXS5sZW5ndGgsIC1FSU5WQUwpOwo+ICsKPiArCS8qCj4gKwkgKiBUZXN0IGFuIGlu dmFsaWQgcXVlcnkgaWQgaW4gdGhlIHNlY29uZCBpdGVtIGFuZCB2ZXJpZnkgdGhhdCB0aGUgZmly c3QKPiArCSAqIG9uZSBpcyBwcm9wZXJseSBwcm9jZXNzZWQuCj4gKwkgKi8KPiArCW1lbXNldChp dGVtcywgMCwgc2l6ZW9mKGl0ZW1zKSk7Cj4gKwlpdGVtc1swXS5xdWVyeV9pZCA9IERSTV9JOTE1 X1FVRVJZX1RPUE9MT0dZX0lORk87Cj4gKwlpdGVtc1sxXS5xdWVyeV9pZCA9IFVMT05HX01BWDsK PiArCWk5MTVfcXVlcnlfaXRlbXMoZmQsIGl0ZW1zLCAyKTsKPiArCWlndF9hc3NlcnRfbHRlKE1J Tl9UT1BPTE9HWV9JVEVNX1NJWkUsIGl0ZW1zWzBdLmxlbmd0aCk7Cj4gKwlpZ3RfYXNzZXJ0X2Vx KGl0ZW1zWzFdLmxlbmd0aCwgLUVJTlZBTCk7Cj4gKwo+ICsJLyoKPiArCSAqIFRlc3QgYSBpbnZh bGlkIHF1ZXJ5IGlkIGluIHRoZSBmaXJzdCBpdGVtIGFuZCB2ZXJpZnkgdGhhdCB0aGUgc2Vjb25k Cj4gKwkgKiBvbmUgaXMgcHJvcGVybHkgcHJvY2Vzc2VkICh0aGUgZHJpdmVyIGlzIGV4cGVjdGVk IHRvIGdvIHRocm91Z2ggdGhlbQo+ICsJICogYWxsIGFuZCBwbGFjZSBlcnJvciBjb2RlcyBpbiB0 aGUgZmFpbGVkIGl0ZW1zKS4KPiArCSAqLwo+ICsJbWVtc2V0KGl0ZW1zLCAwLCBzaXplb2YoaXRl bXMpKTsKPiArCWl0ZW1zWzBdLnF1ZXJ5X2lkID0gVUxPTkdfTUFYOwo+ICsJaXRlbXNbMV0ucXVl cnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9UT1BPTE9HWV9JTkZPOwo+ICsJaTkxNV9xdWVyeV9pdGVt cyhmZCwgaXRlbXMsIDIpOwo+ICsJaWd0X2Fzc2VydF9lcShpdGVtc1swXS5sZW5ndGgsIC1FSU5W QUwpOwo+ICsJaWd0X2Fzc2VydF9sdGUoTUlOX1RPUE9MT0dZX0lURU1fU0laRSwgaXRlbXNbMV0u bGVuZ3RoKTsKPiArCj4gKwkvKiBUZXN0IGEgY291cGxlIG9mIGludmFsaWQgZGF0YSBwb2ludGVy IGluIHF1ZXJ5IGl0ZW0uICovCj4gKwltZW1zZXQoaXRlbXMsIDAsIHNpemVvZihpdGVtcykpOwo+ ICsJaXRlbXNbMF0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9UT1BPTE9HWV9JTkZPOwo+ICsJ aTkxNV9xdWVyeV9pdGVtcyhmZCwgaXRlbXMsIDEpOwo+ICsJaWd0X2Fzc2VydF9sdGUoTUlOX1RP UE9MT0dZX0lURU1fU0laRSwgaXRlbXNbMF0ubGVuZ3RoKTsKPiArCj4gKwlpdGVtc1swXS5kYXRh X3B0ciA9IDA7Cj4gKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCBpdGVtcywgMSk7Cj4gKwlpZ3RfYXNz ZXJ0X2VxKGl0ZW1zWzBdLmxlbmd0aCwgLUVGQVVMVCk7Cj4gKwo+ICsJaXRlbXNbMF0uZGF0YV9w dHIgPSBVTE9OR19NQVg7Cj4gKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCBpdGVtcywgMSk7Cj4gKwlp Z3RfYXNzZXJ0X2VxKGl0ZW1zWzBdLmxlbmd0aCwgLUVGQVVMVCk7Cj4gKwo+ICsKPiArCS8qIFRl c3QgYW4gaW52YWxpZCBxdWVyeSBpdGVtIGxlbmd0aC4gKi8KPiArCW1lbXNldChpdGVtcywgMCwg c2l6ZW9mKGl0ZW1zKSk7Cj4gKwlpdGVtc1swXS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1RP UE9MT0dZX0lORk87Cj4gKwlpdGVtc1sxXS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1RPUE9M T0dZX0lORk87Cj4gKwlpdGVtc1sxXS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3F1 ZXJ5X3RvcG9sb2d5X2luZm8pIC0gMTsKPiArCWk5MTVfcXVlcnlfaXRlbXMoZmQsIGl0ZW1zLCAy KTsKPiArCWlndF9hc3NlcnRfbHRlKE1JTl9UT1BPTE9HWV9JVEVNX1NJWkUsIGl0ZW1zWzBdLmxl bmd0aCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKGl0ZW1zWzFdLmxlbmd0aCwgLUVJTlZBTCk7Cj4gKwo+ ICsJLyoKPiArCSAqIE1hcCBtZW1vcnkgZm9yIGEgcXVlcnkgaXRlbSBpbiB3aGljaCB0aGUga2Vy bmVsIGlzIGdvaW5nIHRvIHdyaXRlIHRoZQo+ICsJICogbGVuZ3RoIG9mIHRoZSBpdGVtIGluIHRo ZSBmaXJzdCBpb2N0bCgpLiBUaGVuIHVubWFwIHRoYXQgbWVtb3J5IGFuZAo+ICsJICogdmVyaWZ5 IHRoYXQgdGhlIGtlcm5lbCBjb3JyZWN0bHkgcmV0dXJucyBFRkFVTFQgYXMgbWVtb3J5IG9mIHRo ZSBpdGVtCj4gKwkgKiBoYXMgYmVlbiByZW1vdmVkIGZyb20gb3VyIGFkZHJlc3Mgc3BhY2UuCj4g KwkgKi8KPiArCWl0ZW1zX3B0ciA9IG1tYXAoMCwgNDA5NiwgUFJPVF9XUklURSwgTUFQX1BSSVZB VEUgfCBNQVBfQU5PTiwgLTEsIDApOwo+ICsJaXRlbXNfcHRyWzBdLnF1ZXJ5X2lkID0gRFJNX0k5 MTVfUVVFUllfVE9QT0xPR1lfSU5GTzsKPiArCWk5MTVfcXVlcnlfaXRlbXMoZmQsIGl0ZW1zX3B0 ciwgMSk7Cj4gKwlpZ3RfYXNzZXJ0X2x0ZShNSU5fVE9QT0xPR1lfSVRFTV9TSVpFLCBpdGVtc19w dHJbMF0ubGVuZ3RoKTsKPiArCW11bm1hcChpdGVtc19wdHIsIDQwOTYpOwo+ICsJaTkxNV9xdWVy eV9pdGVtc19lcnIoZmQsIGl0ZW1zX3B0ciwgMSwgRUZBVUxUKTsKPiArCj4gKwkvKgo+ICsJICog TWFwIG1lbW9yeSBmb3IgYSBxdWVyeSBpdGVtLCB0aGVuIG1ha2UgaXQgcmVhZCBvbmx5IGFuZCB2 ZXJpZnkgdGhhdAo+ICsJICogdGhlIGtlcm5lbCBlcnJvcnMgb3V0IHdpdGggRUZBVUxULgo+ICsJ ICovCj4gKwlpdGVtc19wdHIgPSBtbWFwKDAsIDQwOTYsIFBST1RfV1JJVEUsIE1BUF9QUklWQVRF IHwgTUFQX0FOT04sIC0xLCAwKTsKPiArCWl0ZW1zX3B0clswXS5xdWVyeV9pZCA9IERSTV9JOTE1 X1FVRVJZX1RPUE9MT0dZX0lORk87Cj4gKwlpZ3RfYXNzZXJ0X2VxKDAsIG1wcm90ZWN0KGl0ZW1z X3B0ciwgNDA5NiwgUFJPVF9SRUFEKSk7Cj4gKwlpOTE1X3F1ZXJ5X2l0ZW1zX2VycihmZCwgaXRl bXNfcHRyLCAxLCBFRkFVTFQpOwo+ICsJbXVubWFwKGl0ZW1zX3B0ciwgNDA5Nik7Cj4gKwo+ICsJ LyoKPiArCSAqIEFsbG9jYXRlIDIgcGFnZXMsIHByZXBhcmUgdGhvc2UgMiBwYWdlcyB3aXRoIHZh bGlkIHF1ZXJ5IGl0ZW1zLCB0aGVuCj4gKwkgKiBzd2l0Y2ggdGhlIHNlY29uZCBwYWdlIHRvIHJl YWQgb25seSBhbmQgZXhwZWN0IGFuIEVGQVVMVCBlcnJvci4KPiArCSAqLwo+ICsJaXRlbXNfcHRy ID0gbW1hcCgwLCA4MTkyLCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwg MCk7Cj4gKwltZW1zZXQoaXRlbXNfcHRyLCAwLCA4MTkyKTsKPiArCW5faXRlbXMgPSA4MTkyIC8g c2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVtKTsKPiArCWZvciAoaSA9IDA7IGkgPCBu X2l0ZW1zOyBpKyspCj4gKwkJaXRlbXNfcHRyW2ldLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllf VE9QT0xPR1lfSU5GTzsKPiArCW1wcm90ZWN0KCgodWludDhfdCAqKWl0ZW1zX3B0cikgKyA0MDk2 LCA0MDk2LCBQUk9UX1JFQUQpOwo+ICsJaTkxNV9xdWVyeV9pdGVtc19lcnIoZmQsIGl0ZW1zX3B0 ciwgbl9pdGVtcywgRUZBVUxUKTsKPiArCW11bm1hcChpdGVtc19wdHIsIDgxOTIpOwo+ICt9Cj4g Kwo+ICsvKgo+ICsgKiBBbGxvY2F0ZSBtb3JlIG9uIGJvdGggc2lkZXMgb2Ygd2hlcmUgdGhlIGtl cm5lbCBpcyBnb2luZyB0byB3cml0ZSBhbmQgdmVyaWZ5Cj4gKyAqIHRoYXQgaXQgd3JpdGVzIG9u bHkgd2hlcmUgaXQncyBzdXBwb3NlZCB0by4KPiArICovCj4gK3N0YXRpYyB2b2lkIHRlc3RfcXVl cnlfdG9wb2xvZ3lfa2VybmVsX3dyaXRlcyhpbnQgZmQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkx NV9xdWVyeV9pdGVtIGl0ZW07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5m byAqdG9wb19pbmZvOwo+ICsJdWludDhfdCAqX3RvcG9faW5mbzsKPiArCWludCBiLCB0b3RhbF9z aXplOwo+ICsKPiArCW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKPiArCWl0ZW0ucXVl cnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9UT1BPTE9HWV9JTkZPOwo+ICsJaTkxNV9xdWVyeV9pdGVt cyhmZCwgJml0ZW0sIDEpOwo+ICsJaWd0X2Fzc2VydF9sdGUoTUlOX1RPUE9MT0dZX0lURU1fU0la RSwgaXRlbS5sZW5ndGgpOwo+ICsKPiArCXRvdGFsX3NpemUgPSBpdGVtLmxlbmd0aCArIDIgKiBz aXplb2YoKl90b3BvX2luZm8pOwo+ICsJX3RvcG9faW5mbyA9IG1hbGxvYyh0b3RhbF9zaXplKTsK PiArCW1lbXNldChfdG9wb19pbmZvLCAweGZmLCB0b3RhbF9zaXplKTsKPiArCXRvcG9faW5mbyA9 IChzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbyAqKSAoX3RvcG9faW5mbyArIHNp emVvZigqX3RvcG9faW5mbykpOwo+ICsJbWVtc2V0KHRvcG9faW5mbywgMCwgaXRlbS5sZW5ndGgp Owo+ICsKPiArCWl0ZW0uZGF0YV9wdHIgPSB0b191c2VyX3BvaW50ZXIodG9wb19pbmZvKTsKPiAr CWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPiArCj4gKwlmb3IgKGIgPSAwOyBiIDwg c2l6ZW9mKCpfdG9wb19pbmZvKTsgYisrKSB7Cj4gKwkJaWd0X2Fzc2VydF9lcShfdG9wb19pbmZv W2JdLCAweGZmKTsKPiArCQlpZ3RfYXNzZXJ0X2VxKF90b3BvX2luZm9bc2l6ZW9mKCpfdG9wb19p bmZvKSArIGl0ZW0ubGVuZ3RoICsgYl0sIDB4ZmYpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMg Ym9vbCBxdWVyeV90b3BvbG9neV9zdXBwb3J0ZWQoaW50IGZkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcXVlcnlfaXRlbSBpdGVtID0gewo+ICsJCS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZ X1RPUE9MT0dZX0lORk8sCj4gKwl9Owo+ICsKPiArCXJldHVybiBfX2k5MTVfcXVlcnlfaXRlbXMo ZmQsICZpdGVtLCAxKSA9PSAwICYmIGl0ZW0ubGVuZ3RoID4gMDsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgdGVzdF9xdWVyeV90b3BvbG9neV91bnN1cHBvcnRlZChpbnQgZmQpCj4gK3sKPiArCXN0 cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVtIGl0ZW0gPSB7Cj4gKwkJLnF1ZXJ5X2lkID0gRFJNX0k5 MTVfUVVFUllfVE9QT0xPR1lfSU5GTywKPiArCX07Cj4gKwo+ICsJaTkxNV9xdWVyeV9pdGVtcyhm ZCwgJml0ZW0sIDEpOwo+ICsJaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwgLUVOT0RFVik7Cj4g K30KPiArCj4gKyNkZWZpbmUgRElWX1JPVU5EX1VQKHZhbCwgZGl2KSAoQUxJR04odmFsLCBkaXYp IC8gZGl2KQo+ICsKPiArc3RhdGljIGJvb2wKPiArc2xpY2VfYXZhaWxhYmxlKGNvbnN0IHN0cnVj dCBkcm1faTkxNV9xdWVyeV90b3BvbG9neV9pbmZvICp0b3BvX2luZm8sCj4gKwkJaW50IHMpCj4g K3sKPiArCXJldHVybiAodG9wb19pbmZvLT5kYXRhW3MgLyA4XSA+PiAocyAlIDgpKSAmIDE7Cj4g K30KPiArCj4gK3N0YXRpYyBib29sCj4gK3N1YnNsaWNlX2F2YWlsYWJsZShjb25zdCBzdHJ1Y3Qg ZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbyAqdG9wb19pbmZvLAo+ICsJCSAgIGludCBzLCBp bnQgc3MpCj4gK3sKPiArCXJldHVybiAodG9wb19pbmZvLT5kYXRhW3RvcG9faW5mby0+c3Vic2xp Y2Vfb2Zmc2V0ICsKPiArCQkJCXMgKiB0b3BvX2luZm8tPnN1YnNsaWNlX3N0cmlkZSArCj4gKwkJ CQlzcyAvIDhdID4+IChzcyAlIDgpKSAmIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sCj4gK2V1 X2F2YWlsYWJsZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbyAqdG9w b19pbmZvLAo+ICsJICAgICBpbnQgcywgaW50IHNzLCBpbnQgZXUpCj4gK3sKPiArCXJldHVybiAo dG9wb19pbmZvLT5kYXRhW3RvcG9faW5mby0+ZXVfb2Zmc2V0ICsKPiArCQkJCShzICogdG9wb19p bmZvLT5tYXhfc3Vic2xpY2VzICsgc3MpICogdG9wb19pbmZvLT5ldV9zdHJpZGUgKwo+ICsJCQkJ ZXUgLyA4XSA+PiAoZXUgJSA4KSkgJiAxOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBWZXJpZnkgdGhh dCB3ZSBnZXQgY29oZXJlbnQgdmFsdWVzIGJldHdlZW4gdGhlIGxlZ2FjeSBnZXRwYXJhbSBzbGlj ZS9zdWJzbGljZQo+ICsgKiBtYXNrcyBhbmQgdGhlIG5ldyB0b3BvbG9neSBxdWVyeS4KPiArICov Cj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfcXVlcnlfdG9wb2xvZ3lfY29oZXJlbnRfc2xpY2VfbWFz ayhpbnQgZmQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVtIGl0ZW07Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbyAqdG9wb19pbmZvOwo+ICsJZHJtX2k5 MTVfZ2V0cGFyYW1fdCBncDsKPiArCWludCBzbGljZV9tYXNrLCBzdWJzbGljZV9tYXNrOwo+ICsJ aW50IHMsIHRvcG9sb2d5X3NsaWNlcywgdG9wb2xvZ3lfc3Vic2xpY2VzX3NsaWNlMDsKPiArCWlu dDMyX3QgZmlyc3RfcXVlcnlfbGVuZ3RoOwo+ICsKPiArCWdwLnBhcmFtID0gSTkxNV9QQVJBTV9T TElDRV9NQVNLOwo+ICsJZ3AudmFsdWUgPSAmc2xpY2VfbWFzazsKPiArCWlndF9za2lwX29uKGln dF9pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCkgIT0gMCk7Cj4gKwo+ICsJ Z3AucGFyYW0gPSBJOTE1X1BBUkFNX1NVQlNMSUNFX01BU0s7Cj4gKwlncC52YWx1ZSA9ICZzdWJz bGljZV9tYXNrOwo+ICsJaWd0X3NraXBfb24oaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9H RVRQQVJBTSwgJmdwKSAhPSAwKTsKPiArCj4gKwkvKiBTbGljZXMgKi8KPiArCW1lbXNldCgmaXRl bSwgMCwgc2l6ZW9mKGl0ZW0pKTsKPiArCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9U T1BPTE9HWV9JTkZPOwo+ICsJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOwo+ICsJLyog V2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBieXRlIGZvciBlYWNoIHNsaWNlcywgc3Vic2xpY2VzICYg RVVzIG1hc2tzLiAqLwo+ICsJaWd0X2Fzc2VydF9sdGUoTUlOX1RPUE9MT0dZX0lURU1fU0laRSwg aXRlbS5sZW5ndGgpOwo+ICsJZmlyc3RfcXVlcnlfbGVuZ3RoID0gaXRlbS5sZW5ndGg7Cj4gKwo+ ICsJdG9wb19pbmZvID0gY2FsbG9jKDEsIGl0ZW0ubGVuZ3RoKTsKPiArCj4gKwlpdGVtLmRhdGFf cHRyID0gdG9fdXNlcl9wb2ludGVyKHRvcG9faW5mbyk7Cj4gKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZk LCAmaXRlbSwgMSk7Cj4gKwkvKiBXZSBzaG91bGQgZ2V0IHRoZSBzYW1lIHNpemUgb25jZSB0aGUg ZGF0YSBoYXMgYmVlbiB3cml0dGVuLiAqLwo+ICsJaWd0X2Fzc2VydF9lcShmaXJzdF9xdWVyeV9s ZW5ndGgsIGl0ZW0ubGVuZ3RoKTsKPiArCS8qIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgYnl0ZSBm b3IgZWFjaCBzbGljZXMsIHN1YnNsaWNlcyAmIEVVcyBtYXNrcy4gKi8KPiArCWlndF9hc3NlcnRf bHRlKE1JTl9UT1BPTE9HWV9JVEVNX1NJWkUsIGl0ZW0ubGVuZ3RoKTsKPiArCj4gKwl0b3BvbG9n eV9zbGljZXMgPSAwOwo+ICsJZm9yIChzID0gMDsgcyA8IHRvcG9faW5mby0+bWF4X3NsaWNlczsg cysrKSB7Cj4gKwkJaWYgKHNsaWNlX2F2YWlsYWJsZSh0b3BvX2luZm8sIHMpKQo+ICsJCQl0b3Bv bG9neV9zbGljZXMgfD0gMVVMIDw8IHM7Cj4gKwl9Cj4gKwo+ICsJaWd0X2RlYnVnKCJzbGljZSBt YXNrIGdldHBhcmFtPTB4JXggLyBxdWVyeT0weCV4XG4iLAo+ICsJCSAgc2xpY2VfbWFzaywgdG9w b2xvZ3lfc2xpY2VzKTsKPiArCj4gKwkvKiBUaGVzZSAyIHNob3VsZCBhbHdheXMgbWF0Y2guICov Cj4gKwlpZ3RfYXNzZXJ0X2VxKHNsaWNlX21hc2ssIHRvcG9sb2d5X3NsaWNlcyk7Cj4gKwo+ICsJ dG9wb2xvZ3lfc3Vic2xpY2VzX3NsaWNlMCA9IDA7Cj4gKwlmb3IgKHMgPSAwOyBzIDwgdG9wb19p bmZvLT5tYXhfc3Vic2xpY2VzOyBzKyspIHsKPiArCQlpZiAoc3Vic2xpY2VfYXZhaWxhYmxlKHRv cG9faW5mbywgMCwgcykpCj4gKwkJCXRvcG9sb2d5X3N1YnNsaWNlc19zbGljZTAgfD0gMVVMIDw8 IHM7Cj4gKwl9Cj4gKwo+ICsJaWd0X2RlYnVnKCJzdWJzbGljZSBtYXNrIGdldHBhcmFtPTB4JXgg LyBxdWVyeT0weCV4XG4iLAo+ICsJCSAgc3Vic2xpY2VfbWFzaywgdG9wb2xvZ3lfc3Vic2xpY2Vz X3NsaWNlMCk7Cj4gKwo+ICsJLyoKPiArCSAqIEk5MTVfUEFSQU1fU1VCU0xJQ0VfTUFTSyByZXR1 cm5zIHRoZSB2YWx1ZSBmb3Igc2xpY2UwLCB3ZSBzaG91bGQKPiArCSAqIG1hdGNoIHRoZSB2YWx1 ZXMgZm9yIHRoZSBmaXJzdCBzbGljZSBvZiB0aGUgdG9wb2xvZ3kuCj4gKwkgKi8KPiArCWlndF9h c3NlcnRfZXEoc3Vic2xpY2VfbWFzaywgdG9wb2xvZ3lfc3Vic2xpY2VzX3NsaWNlMCk7Cj4gKwo+ ICsJZnJlZSh0b3BvX2luZm8pOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBWZXJpZnkgdGhhdCB3ZSBn ZXQgc2FtZSB0b3RhbCBudW1iZXIgb2YgRVVzIGZyb20gZ2V0cGFyYW0gYW5kIHRvcG9sb2d5IHF1 ZXJ5Lgo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiArdGVzdF9xdWVyeV90b3BvbG9neV9tYXRjaGVz X2V1X3RvdGFsKGludCBmZCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRl bTsKPiArCXN0cnVjdCBkcm1faTkxNV9xdWVyeV90b3BvbG9neV9pbmZvICp0b3BvX2luZm87Cj4g Kwlkcm1faTkxNV9nZXRwYXJhbV90IGdwOwo+ICsJaW50IG5fZXVzLCBuX2V1c190b3BvbG9neSwg czsKPiArCj4gKwlncC5wYXJhbSA9IEk5MTVfUEFSQU1fRVVfVE9UQUw7Cj4gKwlncC52YWx1ZSA9 ICZuX2V1czsKPiArCWRvX2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKTsK PiArCWlndF9kZWJ1Zygibl9ldXM9JWlcbiIsIG5fZXVzKTsKPiArCj4gKwltZW1zZXQoJml0ZW0s IDAsIHNpemVvZihpdGVtKSk7Cj4gKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfVE9Q T0xPR1lfSU5GTzsKPiArCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPiArCj4gKwl0 b3BvX2luZm8gPSBjYWxsb2MoMSwgaXRlbS5sZW5ndGgpOwo+ICsKPiArCWl0ZW0uZGF0YV9wdHIg PSB0b191c2VyX3BvaW50ZXIodG9wb19pbmZvKTsKPiArCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZp dGVtLCAxKTsKPiArCj4gKwlpZ3RfZGVidWcoIm1heF9zbGljZXM9JWh1IG1heF9zdWJzbGljZXM9 JWh1IG1heF9ldXNfcGVyX3N1YnNsaWNlPSVodVxuIiwKPiArCQkgIHRvcG9faW5mby0+bWF4X3Ns aWNlcywgdG9wb19pbmZvLT5tYXhfc3Vic2xpY2VzLAo+ICsJCSAgdG9wb19pbmZvLT5tYXhfZXVz X3Blcl9zdWJzbGljZSk7Cj4gKwlpZ3RfZGVidWcoIiBzdWJzbGljZV9vZmZzZXQ9JWh1IHN1YnNs aWNlX3N0cmlkZT0laHVcbiIsCj4gKwkJICB0b3BvX2luZm8tPnN1YnNsaWNlX29mZnNldCwgdG9w b19pbmZvLT5zdWJzbGljZV9zdHJpZGUpOwo+ICsJaWd0X2RlYnVnKCIgZXVfb2Zmc2V0PSVodSBl dV9zdHJpZGU9JWh1XG4iLAo+ICsJCSAgdG9wb19pbmZvLT5ldV9vZmZzZXQsIHRvcG9faW5mby0+ ZXVfc3RyaWRlKTsKPiArCj4gKwluX2V1c190b3BvbG9neSA9IDA7Cj4gKwlmb3IgKHMgPSAwOyBz IDwgdG9wb19pbmZvLT5tYXhfc2xpY2VzOyBzKyspIHsKPiArCQlpbnQgc3M7Cj4gKwo+ICsJCWln dF9kZWJ1Zygic2xpY2UlaTpcbiIsIHMpOwo+ICsKPiArCQlmb3IgKHNzID0gMDsgc3MgPCB0b3Bv X2luZm8tPm1heF9zdWJzbGljZXM7IHNzKyspIHsKPiArCQkJaW50IGV1LCBuX3N1YnNsaWNlX2V1 cyA9IDA7Cj4gKwo+ICsJCQlpZ3RfZGVidWcoIlx0c3Vic2xpY2U6ICVpXG4iLCBzcyk7Cj4gKwo+ ICsJCQlpZ3RfZGVidWcoIlx0XHRldV9tYXNrOiAwYiIpOwo+ICsJCQlmb3IgKGV1ID0gMDsgZXUg PCB0b3BvX2luZm8tPm1heF9ldXNfcGVyX3N1YnNsaWNlOyBldSsrKSB7Cj4gKwkJCQl1aW50OF90 IHZhbCA9IGV1X2F2YWlsYWJsZSh0b3BvX2luZm8sIHMsIHNzLAo+ICsJCQkJCQkJICAgdG9wb19p bmZvLT5tYXhfZXVzX3Blcl9zdWJzbGljZSAtIDEgLSBldSk7Cj4gKwkJCQlpZ3RfZGVidWcoIiVo aGkiLCB2YWwpOwo+ICsJCQkJbl9zdWJzbGljZV9ldXMgKz0gX19idWlsdGluX3BvcGNvdW50KHZh bCk7Cj4gKwkJCQluX2V1c190b3BvbG9neSArPSBfX2J1aWx0aW5fcG9wY291bnQodmFsKTsKPiAr CQkJfQo+ICsKPiArCQkJaWd0X2RlYnVnKCIgKCVpKVxuIiwgbl9zdWJzbGljZV9ldXMpOwo+ICsK PiArCQkJLyogU2FuaXR5IGNoZWNrcy4gKi8KPiArCQkJaWYgKG5fc3Vic2xpY2VfZXVzID4gMCkg ewo+ICsJCQkJaWd0X2Fzc2VydChzbGljZV9hdmFpbGFibGUodG9wb19pbmZvLCBzKSk7Cj4gKwkJ CQlpZ3RfYXNzZXJ0KHN1YnNsaWNlX2F2YWlsYWJsZSh0b3BvX2luZm8sIHMsIHNzKSk7Cj4gKwkJ CX0KPiArCQkJaWYgKHN1YnNsaWNlX2F2YWlsYWJsZSh0b3BvX2luZm8sIHMsIHNzKSkgewo+ICsJ CQkJaWd0X2Fzc2VydChzbGljZV9hdmFpbGFibGUodG9wb19pbmZvLCBzKSk7Cj4gKwkJCX0KPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJZnJlZSh0b3BvX2luZm8pOwo+ICsKPiArCWlndF9hc3NlcnQobl9l dXNfdG9wb2xvZ3kgPT0gbl9ldXMpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBWZXJpZnkgc29tZSBu dW1iZXJzIG9uIEdlbnMgdGhhdCB3ZSBrbm93IGZvciBzdXJlIHRoZSBjaGFyYWN0ZXJpc3RpY3Mg ZnJvbQo+ICsgKiB0aGUgUENJIGlkcy4KPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfcXVl cnlfdG9wb2xvZ3lfa25vd25fcGNpX2lkcyhpbnQgZmQsIGludCBkZXZpZCkKPiArewo+ICsJY29u c3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvICpkZXZfaW5mbyA9IGludGVsX2dldF9kZXZpY2Vf aW5mbyhkZXZpZCk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSBpdGVtOwo+ICsJc3Ry dWN0IGRybV9pOTE1X3F1ZXJ5X3RvcG9sb2d5X2luZm8gKnRvcG9faW5mbzsKPiArCWludCBuX3Ns aWNlcyA9IDAsIG5fc3Vic2xpY2VzID0gMDsKPiArCWludCBzLCBzczsKPiArCj4gKwkvKiBUaGUg R1Qgc2l6ZSBvbiBzb21lIEJyb2Fkd2VsbCBza3VzIGlzIG5vdCBkZWZpbmVkLCBza2lwIHRob3Nl LiAqLwo+ICsJaWd0X3NraXBfb24oZGV2X2luZm8tPmd0ID09IDApOwo+ICsKPiArCW1lbXNldCgm aXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKPiArCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVS WV9UT1BPTE9HWV9JTkZPOwo+ICsJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOwo+ICsK PiArCXRvcG9faW5mbyA9IChzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbyAqKSBj YWxsb2MoMSwgaXRlbS5sZW5ndGgpOwo+ICsKPiArCWl0ZW0uZGF0YV9wdHIgPSB0b191c2VyX3Bv aW50ZXIodG9wb19pbmZvKTsKPiArCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPiAr Cj4gKwlmb3IgKHMgPSAwOyBzIDwgdG9wb19pbmZvLT5tYXhfc2xpY2VzOyBzKyspIHsKPiArCQlp ZiAoc2xpY2VfYXZhaWxhYmxlKHRvcG9faW5mbywgcykpCj4gKwkJCW5fc2xpY2VzKys7Cj4gKwo+ ICsJCWZvciAoc3MgPSAwOyBzcyA8IHRvcG9faW5mby0+bWF4X3N1YnNsaWNlczsgc3MrKykgewo+ ICsJCQlpZiAoc3Vic2xpY2VfYXZhaWxhYmxlKHRvcG9faW5mbywgcywgc3MpKQo+ICsJCQkJbl9z dWJzbGljZXMrKzsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWd0X2RlYnVnKCJQbGF0Zm9ybT0lcyBH VD0ldSBzbGljZXM9JXUgc3Vic2xpY2VzPSV1XG4iLAo+ICsJCSAgZGV2X2luZm8tPmNvZGVuYW1l LCBkZXZfaW5mby0+Z3QsIG5fc2xpY2VzLCBuX3N1YnNsaWNlcyk7Cj4gKwo+ICsJc3dpdGNoIChk ZXZfaW5mby0+Z3QpIHsKPiArCWNhc2UgMToKPiArCQlpZ3RfYXNzZXJ0X2VxKG5fc2xpY2VzLCAx KTsKPiArCQlpZ3RfYXNzZXJ0KG5fc3Vic2xpY2VzID09IDIgfHwgbl9zdWJzbGljZXMgPT0gMyk7 Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDI6Cj4gKwkJaWd0X2Fzc2VydF9lcShuX3NsaWNlcywgMSk7 Cj4gKwkJaWd0X2Fzc2VydF9lcShuX3N1YnNsaWNlcywgMyk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNl IDM6Cj4gKwkJaWd0X2Fzc2VydF9lcShuX3NsaWNlcywgMik7Cj4gKwkJaWd0X2Fzc2VydF9lcShu X3N1YnNsaWNlcywgMiAqIDMpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA0Ogo+ICsJCWlndF9hc3Nl cnRfZXEobl9zbGljZXMsIDMpOwo+ICsJCWlndF9hc3NlcnRfZXEobl9zdWJzbGljZXMsIDMgKiAz KTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydChmYWxzZSk7Cj4gKwl9 Cj4gKwo+ICsJZnJlZSh0b3BvX2luZm8pOwo+ICt9Cj4gKwo+ICtpZ3RfbWFpbgo+ICt7Cj4gKwlp bnQgZmQgPSAtMTsKPiArCWludCBkZXZpZDsKPiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJZmQg PSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCQlpZ3RfcmVxdWlyZShoYXNfcXVl cnlfc3VwcG9ydHMoZmQpKTsKPiArCQlkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOwo+ ICsJfQo+ICsKPiArCWlndF9zdWJ0ZXN0KCJxdWVyeS1nYXJiYWdlIikKPiArCQl0ZXN0X3F1ZXJ5 X2dhcmJhZ2UoZmQpOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJxdWVyeS10b3BvbG9neS1rZXJuZWwt d3JpdGVzIikgewo+ICsJCWlndF9yZXF1aXJlKHF1ZXJ5X3RvcG9sb2d5X3N1cHBvcnRlZChmZCkp Owo+ICsJCXRlc3RfcXVlcnlfdG9wb2xvZ3lfa2VybmVsX3dyaXRlcyhmZCk7Cj4gKwl9Cj4gKwo+ ICsJaWd0X3N1YnRlc3QoInF1ZXJ5LXRvcG9sb2d5LXVuc3VwcG9ydGVkIikgewo+ICsJCWlndF9y ZXF1aXJlKCFxdWVyeV90b3BvbG9neV9zdXBwb3J0ZWQoZmQpKTsKPiArCQl0ZXN0X3F1ZXJ5X3Rv cG9sb2d5X3Vuc3VwcG9ydGVkKGZkKTsKPiArCX0KPiArCj4gKwlpZ3Rfc3VidGVzdCgicXVlcnkt dG9wb2xvZ3ktY29oZXJlbnQtc2xpY2UtbWFzayIpIHsKPiArCQlpZ3RfcmVxdWlyZShxdWVyeV90 b3BvbG9neV9zdXBwb3J0ZWQoZmQpKTsKPiArCQl0ZXN0X3F1ZXJ5X3RvcG9sb2d5X2NvaGVyZW50 X3NsaWNlX21hc2soZmQpOwo+ICsJfQo+ICsKPiArCWlndF9zdWJ0ZXN0KCJxdWVyeS10b3BvbG9n eS1tYXRjaGVzLWV1LXRvdGFsIikgewo+ICsJCWlndF9yZXF1aXJlKHF1ZXJ5X3RvcG9sb2d5X3N1 cHBvcnRlZChmZCkpOwo+ICsJCXRlc3RfcXVlcnlfdG9wb2xvZ3lfbWF0Y2hlc19ldV90b3RhbChm ZCk7Cj4gKwl9Cj4gKwo+ICsJaWd0X3N1YnRlc3QoInF1ZXJ5LXRvcG9sb2d5LWtub3duLXBjaS1p ZHMiKSB7Cj4gKwkJaWd0X3JlcXVpcmUocXVlcnlfdG9wb2xvZ3lfc3VwcG9ydGVkKGZkKSk7Cj4g KwkJaWd0X3JlcXVpcmUoSVNfSEFTV0VMTChkZXZpZCkgfHwgSVNfQlJPQURXRUxMKGRldmlkKSB8 fAo+ICsJCQkgICAgSVNfU0tZTEFLRShkZXZpZCkgfHwgSVNfS0FCWUxBS0UoZGV2aWQpIHx8Cj4g KwkJCSAgICBJU19DT0ZGRUVMQUtFKGRldmlkKSk7Cj4gKwkJdGVzdF9xdWVyeV90b3BvbG9neV9r bm93bl9wY2lfaWRzKGZkLCBkZXZpZCk7Cj4gKwl9Cj4gKwo+ICsJaWd0X2ZpeHR1cmUgewo+ICsJ CWNsb3NlKGZkKTsKPiArCX0KPiArfQo+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBi L3Rlc3RzL21lc29uLmJ1aWxkCj4gaW5kZXggNmU3NzZiYjcuLjBhYzZjMDVmIDEwMDY0NAo+IC0t LSBhL3Rlc3RzL21lc29uLmJ1aWxkCj4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBAQCAtMTQ0 LDYgKzE0NCw3IEBAIHRlc3RfcHJvZ3MgPSBbCj4gICAJJ2dlbjNfcmVuZGVyX3RpbGVkeF9ibGl0 cycsCj4gICAJJ2dlbjNfcmVuZGVyX3RpbGVkeV9ibGl0cycsCj4gICAJJ2d2dF9iYXNpYycsCj4g KwknaTkxNV9xdWVyeScsCj4gICAJJ2ttc18zZCcsCj4gICAJJ2ttc19hZGRmYl9iYXNpYycsCj4g ICAJJ2ttc19hdG9taWMnLAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1k ZXYK