From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH v10 6/6] drm/i915: expose rcs topology through query uAPI Date: Fri, 19 Jan 2018 14:58:58 +0000 Message-ID: References: <20180119132221.1496-1-lionel.g.landwerlin@intel.com> <20180119132221.1496-7-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id AE1366E94C for ; Fri, 19 Jan 2018 14:59:00 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMTkvMDEvMTggMTQ6MjQsIFR2cnRrbyBVcnN1bGluIHdyb3RlOgo+Cj4gT24gMTkvMDEvMjAx OCAxMzoyMiwgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+IFdpdGggdGhlIGludHJvZHVjdGlv biBvZiBhc3ltbWV0cmljIHNsaWNlcyBpbiBDTkwsIHdlIGNhbm5vdCByZWx5IG9uCj4+IHRoZSBw cmV2aW91cyBTVUJTTElDRV9NQVNLIGdldHBhcmFtIHRvIHRlbGwgdXNlcnNwYWNlIHdoYXQgc3Vi c2xpY2VzCj4+IGFyZSBhdmFpbGFibGUuIEhlcmUgd2UgaW50cm9kdWNlIGEgbW9yZSBkZXRhaWxl ZCB3YXkgb2YgcXVlcnlpbmcgdGhlCj4+IEdlbidzIEdQVSB0b3BvbG9neSB0aGF0IGRvZXNuJ3Qg YWdncmVnYXRlIG51bWJlcnMuCj4+Cj4+IFRoaXMgaXMgZXNzZW50aWFsIGZvciBtb25pdG9yaW5n IHBhcnRzIG9mIHRoZSBHUFUgd2l0aCB0aGUgT0EgdW5pdCwKPj4gYmVjYXVzZSBjb3VudGVycyBu ZWVkIHRvIGJlIG5vcm1hbGl6ZWQgdG8gdGhlIG51bWJlciBvZgo+PiBFVXMvc3Vic2xpY2VzL3Ns aWNlcy4gVGhlIGN1cnJlbnQgYWdncmVnYXRlZCBudW1iZXJzIGxpa2UgRVVfVE9UQUwgZG8KPj4g bm90IGdpdmVzIHVzIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24uCj4+Cj4+IEFzIGEgYm9udXMgd2Ug Y2FuIGRyYXcgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBHUFUgOgo+Pgo+PiDCoMKgwqDCoMKgwqDC oMKgIGh0dHBzOi8vaW1ndXIuY29tL2EvdnVxcGEKPj4KPj4gdjI6IFJlbmFtZSB1YXBpIHN0cnVj dCBzL19tYXNrL19pbmZvLyAoVHZydGtvKQo+PiDCoMKgwqDCoCBSZXBvcnQgbWF4X3NsaWNlL3N1 YnNsaWNlL2V1c19wZXJfc3Vic2xpY2UgcmF0aGVyIHRoYW4gc3RyaWRlcyAKPj4gKFR2cnRrbykK Pj4gwqDCoMKgwqAgQWRkIHVhcGkgbWFjcm9zIHRvIHJlYWQgZGF0YSBmcm9tICpfaW5mbyBzdHJ1 Y3RzIChUdnJ0a28pCj4+Cj4+IHYzOiBVc2UgISEodiAmIERSTV9JOTE1X0JJVCgpKSBmb3IgdWFw aSBtYWNyb3MgaW5zdGVhZCBvZiBjdXN0b20gCj4+IHNoaWZ0cyAoVHZydGtvKQo+Pgo+PiB2NDog ZmFjdG9yaXplIHF1ZXJ5IGl0ZW0gd3JpdHRpbmcgKFR2cnRrbykKPj4gwqDCoMKgwqAgdHdlYWsg dWFwaSBzdHJ1Y3QvZGVmaW5lIG5hbWVzIChUdnJ0a28pCj4+Cj4+IHY1OiBSZXBsYWNlIEFMSUdO KCkgbWFjcm8gKENocmlzKQo+Pgo+PiB2NjogVXBkYXRlZCB1YXBpIGNvbW1lbnRzIChUdnJ0a28p Cj4+IMKgwqDCoMKgIE1vdmVkIGZsYWdzICE9IDAgY2hlY2tzIGludG8gdmZ1bmNzIChUdnJ0a28p Cj4+Cj4+IHY3OiBVc2UgYWNjZXNzX29rKCkgYmVmb3JlIGNvcHlpbmcgYW55dGhpbmcsIHRvIGF2 b2lkIG92ZXJmbG93cyAoQ2hyaXMpCj4+IMKgwqDCoMKgIFN3aXRjaCBCVUdfT04oKSB0byBHRU1f V0FSTl9PTigpIChUdnJ0a28pCj4+Cj4+IHY4OiBUd2VhayB1YXBpIGNvbW1lbnRzIHN0eWxlIHRv IG1hdGNoIHRoZSBjb2Rpbmcgc3R5bGUgKExpb25lbCkKPj4KPj4gU2lnbmVkLW9mZi1ieTogTGlv bmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgo+PiBDYzogSm9v bmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+PiAtLS0KPj4g wqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9xdWVyeS5jIHwgMTEwIAo+PiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiDCoCBpbmNsdWRlL3VhcGkvZHJtL2k5MTVf ZHJtLmjCoMKgwqDCoMKgwqAgfMKgIDcxICsrKysrKysrKysrKysrKysrKysrKysrKwo+PiDCoCAy IGZpbGVzIGNoYW5nZWQsIDE4MSBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3F1ZXJ5LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9xdWVyeS5jCj4+IGluZGV4IDVhYTg4NjMxM2NmOS4uZmY4N2VjOGEzMjFhIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3F1ZXJ5LmMKPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9xdWVyeS5jCj4+IEBAIC0yNSw4ICsyNSwxMTggQEAKPj4gwqAg I2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4+IMKgICNpbmNsdWRlIDx1YXBpL2RybS9pOTE1X2RybS5o Pgo+Pgo+PiArc3RhdGljIGludCBjb3B5X3F1ZXJ5X2RhdGEoc3RydWN0IGRybV9pOTE1X3F1ZXJ5 X2l0ZW0gKnF1ZXJ5X2l0ZW0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0 IHZvaWQgKml0ZW1fcHRyLCB1MzIgaXRlbV9sZW5ndGgsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnN0IHZvaWQgKmRhdGFfcHRyLCB1MzIgZGF0YV9sZW5ndGgpCj4+ICt7Cj4+ ICvCoMKgwqAgdTMyIHRvdGFsX2xlbmd0aCA9IGl0ZW1fbGVuZ3RoICsgZGF0YV9sZW5ndGg7Cj4+ ICsKPj4gK8KgwqDCoCBpZiAoR0VNX1dBUk5fT04oYWRkX292ZXJmbG93cyhpdGVtX2xlbmd0aCwg ZGF0YV9sZW5ndGgpKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArCj4+ ICvCoMKgwqAgaWYgKHF1ZXJ5X2l0ZW0tPmxlbmd0aCA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIHRvdGFsX2xlbmd0aDsKPj4gKwo+PiArwqDCoMKgIGlmIChxdWVyeV9pdGVtLT5sZW5n dGggPCB0b3RhbF9sZW5ndGgpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4g Kwo+PiArwqDCoMKgIGlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdTY0X3RvX3VzZXJfcHRy KHF1ZXJ5X2l0ZW0tPmRhdGFfcHRyKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dG90YWxfbGVuZ3RoKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUZBVUxUOwo+PiArCj4+ ICvCoMKgwqAgaWYgKF9fY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihxdWVyeV9pdGVtLT5k YXRhX3B0ciksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGl0ZW1fcHRyLCBpdGVt X2xlbmd0aCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVGQVVMVDsKPj4gKwo+PiArwqDC oMKgIGlmIChfX2NvcHlfdG9fdXNlcih1NjRfdG9fdXNlcl9wdHIocXVlcnlfaXRlbS0+ZGF0YV9w dHIgKyAKPj4gaXRlbV9sZW5ndGgpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBk YXRhX3B0ciwgZGF0YV9sZW5ndGgpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FRkFVTFQ7 Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gdG90YWxfbGVuZ3RoOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IHF1ZXJ5X3NsaWNlX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9xdWVy eV9pdGVtICpxdWVyeV9pdGVtKQo+PiArewo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBzc2V1X2Rl dl9pbmZvICpzc2V1ID0gJklOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1Owo+PiArwqDCoMKgIHN0 cnVjdCBkcm1faTkxNV9xdWVyeV9zbGljZV9pbmZvIHNsaWNlX2luZm87Cj4+ICsKPj4gK8KgwqDC oCBpZiAocXVlcnlfaXRlbS0+ZmxhZ3MgIT0gMCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt RUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgaWYgKHNzZXUtPm1heF9zbGljZXMgPT0gMCkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREVWOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDC oMKgICogSWYgd2UgZXZlciBjaGFuZ2UgdGhlIGludGVybmFsIHNsaWNlIG1hc2sgZGF0YSB0eXBl LCB3ZSdsbCAKPj4gbmVlZCB0bwo+PiArwqDCoMKgwqAgKiB1cGRhdGUgdGhpcyBmdW5jdGlvbi4K Pj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgQlVJTERfQlVHX09OKHNpemVvZih1OCkgIT0gc2l6 ZW9mKHNzZXUtPnNsaWNlX21hc2spKTsKPj4gKwo+PiArwqDCoMKgIG1lbXNldCgmc2xpY2VfaW5m bywgMCwgc2l6ZW9mKHNsaWNlX2luZm8pKTsKPj4gK8KgwqDCoCBzbGljZV9pbmZvLm1heF9zbGlj ZXMgPSBzc2V1LT5tYXhfc2xpY2VzOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGNvcHlfcXVlcnlf ZGF0YShxdWVyeV9pdGVtLCAmc2xpY2VfaW5mbywgc2l6ZW9mKHNsaWNlX2luZm8pLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzc2V1LT5zbGljZV9tYXNrLCBzaXpl b2Yoc3NldS0+c2xpY2VfbWFzaykpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHF1ZXJ5X3N1 YnNsaWNlX2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9xdWVyeV9pdGVt ICpxdWVyeV9pdGVtKQo+PiArewo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZv ICpzc2V1ID0gJklOVEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1Owo+PiArwqDCoMKgIHN0cnVjdCBk cm1faTkxNV9xdWVyeV9zdWJzbGljZV9pbmZvIHN1YnNsaWNlX2luZm87Cj4+ICvCoMKgwqAgdTMy IGRhdGFfbGVuZ3RoOwo+PiArCj4+ICvCoMKgwqAgaWYgKHF1ZXJ5X2l0ZW0tPmZsYWdzICE9IDAp Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIGlmIChz c2V1LT5tYXhfc2xpY2VzID09IDApCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsK Pj4gKwo+PiArwqDCoMKgIG1lbXNldCgmc3Vic2xpY2VfaW5mbywgMCwgc2l6ZW9mKHN1YnNsaWNl X2luZm8pKTsKPj4gK8KgwqDCoCBzdWJzbGljZV9pbmZvLm1heF9zbGljZXMgPSBzc2V1LT5tYXhf c2xpY2VzOwo+PiArwqDCoMKgIHN1YnNsaWNlX2luZm8ubWF4X3N1YnNsaWNlcyA9IHNzZXUtPm1h eF9zdWJzbGljZXM7Cj4+ICsKPj4gK8KgwqDCoCBkYXRhX2xlbmd0aCA9IHN1YnNsaWNlX2luZm8u bWF4X3NsaWNlcyAqCj4+ICvCoMKgwqDCoMKgwqDCoCBESVZfUk9VTkRfVVAoc3Vic2xpY2VfaW5m by5tYXhfc3Vic2xpY2VzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6 ZW9mKHNzZXUtPnN1YnNsaWNlX21hc2tbMF0pICogQklUU19QRVJfQllURSk7Cj4+ICsKPj4gK8Kg wqDCoCByZXR1cm4gY29weV9xdWVyeV9kYXRhKHF1ZXJ5X2l0ZW0sCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnN1YnNsaWNlX2luZm8sIHNpemVvZihzdWJzbGljZV9p bmZvKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJz bGljZV9tYXNrLCBkYXRhX2xlbmd0aCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcXVlcnlf ZXVfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gKnF1ZXJ5X2l0ZW0pCj4+ ICt7Cj4+ICvCoMKgwqAgY29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUgPSAmSU5URUxf SU5GTyhkZXZfcHJpdiktPnNzZXU7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2V1 X2luZm8gZXVfaW5mbzsKPj4gK8KgwqDCoCB1MzIgZGF0YV9sZW5ndGg7Cj4+ICsKPj4gK8KgwqDC oCBpZiAocXVlcnlfaXRlbS0+ZmxhZ3MgIT0gMCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAt RUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgaWYgKHNzZXUtPm1heF9zbGljZXMgPT0gMCkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAtRU5PREVWOwo+PiArCj4+ICvCoMKgwqAgbWVtc2V0KCZldV9p bmZvLCAwLCBzaXplb2YoZXVfaW5mbykpOwo+PiArwqDCoMKgIGV1X2luZm8ubWF4X3NsaWNlcyA9 IHNzZXUtPm1heF9zbGljZXM7Cj4+ICvCoMKgwqAgZXVfaW5mby5tYXhfc3Vic2xpY2VzID0gc3Nl dS0+bWF4X3N1YnNsaWNlczsKPj4gK8KgwqDCoCBldV9pbmZvLm1heF9ldXNfcGVyX3N1YnNsaWNl ID0gc3NldS0+bWF4X2V1c19wZXJfc3Vic2xpY2U7Cj4+ICsKPj4gK8KgwqDCoCBkYXRhX2xlbmd0 aCA9IGV1X2luZm8ubWF4X3NsaWNlcyAqIGV1X2luZm8ubWF4X3N1YnNsaWNlcyAqCj4+ICvCoMKg wqDCoMKgwqDCoCBESVZfUk9VTkRfVVAoZXVfaW5mby5tYXhfZXVzX3Blcl9zdWJzbGljZSwgQklU U19QRVJfQllURSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gY29weV9xdWVyeV9kYXRhKHF1ZXJ5 X2l0ZW0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmV1X2luZm8s IHNpemVvZihldV9pbmZvKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzc2V1LT5ldV9tYXNrLCBkYXRhX2xlbmd0aCk7Cj4+ICt9Cj4+ICsKPj4gwqAgc3RhdGljIGlu dCAoKiBjb25zdCBpOTE1X3F1ZXJ5X2Z1bmNzW10pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+ PiAqZGV2X3ByaXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSAqcXVlcnlfaXRlbSkgPSB7Cj4+ICvCoMKgwqAg cXVlcnlfc2xpY2VfaW5mbywKPj4gK8KgwqDCoCBxdWVyeV9zdWJzbGljZV9pbmZvLAo+PiArwqDC oMKgIHF1ZXJ5X2V1X2luZm8sCj4+IMKgIH07Cj4+Cj4+IMKgIGludCBpOTE1X3F1ZXJ5X2lvY3Rs KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCAKPj4gZHJtX2ZpbGUg KmZpbGUpCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNs dWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPj4gaW5kZXggMDNmMDMxNjUyZDg2Li4wYTRmNGNkZDdl OTIgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAo+PiArKysgYi9p bmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmgKPj4gQEAgLTE2MTgsNiArMTYxOCw5IEBAIHN0cnVj dCBkcm1faTkxNV9wZXJmX29hX2NvbmZpZyB7Cj4+Cj4+IMKgIHN0cnVjdCBkcm1faTkxNV9xdWVy eV9pdGVtIHsKPj4gwqDCoMKgwqDCoCBfX3U2NCBxdWVyeV9pZDsKPj4gKyNkZWZpbmUgRFJNX0k5 MTVfUVVFUllfU0xJQ0VfSU5GT8KgwqDCoCAweDAxCj4+ICsjZGVmaW5lIERSTV9JOTE1X1FVRVJZ X1NVQlNMSUNFX0lORk/CoMKgwqAgMHgwMgo+PiArI2RlZmluZSBEUk1fSTkxNV9RVUVSWV9FVV9J TkZPwqDCoMKgwqDCoMKgwqAgMHgwMwo+Pgo+PiDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDC oCAqIFdoZW4gc2V0IHRvIHplcm8gYnkgdXNlcnNwYWNlLCB0aGlzIGlzIGZpbGxlZCB3aXRoIHRo ZSBzaXplIAo+PiBvZiB0aGUKPj4gQEAgLTE2NTQsNiArMTY1Nyw3NCBAQCBzdHJ1Y3QgZHJtX2k5 MTVfcXVlcnkgewo+PiDCoMKgwqDCoMKgIF9fdTY0IGl0ZW1zX3B0cjsKPj4gwqAgfTsKPj4KPj4g KyNkZWZpbmUgRFJNX0k5MTVfQklUKGJpdCkgKChfX3UzMikxIDw8IChiaXQpKQo+PiArI2RlZmlu ZSBEUk1fSTkxNV9ESVZfUk9VTkRfVVAodmFsLCBkaXYpICgoKHZhbCkgKyAoZGl2KSAtIDEpIC8g KGRpdikpCj4+ICsKPj4gKy8qCj4+ICsgKiBEYXRhIHdyaXR0ZW4gYnkgdGhlIGtlcm5lbCB3aXRo IHF1ZXJ5IERSTV9JOTE1X1FVRVJZX1NMSUNFX0lORk8gOgo+PiArICoKPj4gKyAqIGRhdGE6IGVh Y2ggYml0IGluZGljYXRlcyB3aGV0aGVyIGEgc2xpY2UgaXMgYXZhaWxhYmxlICgxKSBvciAKPj4g ZnVzZWQgb2ZmICgwKS4KPj4gKyAqwqDCoMKgwqDCoMKgIEZvcm11bGEgdG8gdGVsbCBpZiBzbGlj ZSBYIGlzIGF2YWlsYWJsZSA6Cj4+ICsgKgo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChk YXRhW1ggLyA4XSA+PiAoWCAlIDgpKSAmIDEKPj4gKyAqCj4+ICsgKsKgwqDCoMKgwqDCoCBBbHRl cm5hdGl2ZWx5LCB1c2UgRFJNX0k5MTVfUVVFUllfU0xJQ0VfQVZBSUxBQkxFKCkgdG8gcXVlcnkg YQo+PiArICrCoMKgwqDCoMKgwqAgZ2l2ZW4gc3Vic2xpY2UncyBhdmFpbGFiaWxpdHkuCj4+ICsg Ki8KPj4gK3N0cnVjdCBkcm1faTkxNV9xdWVyeV9zbGljZV9pbmZvIHsKPj4gK8KgwqDCoCBfX3Uz MiBtYXhfc2xpY2VzOwo+Cj4gV291bGQgaXQgYmUgd29ydGggYWxzbyByZXR1cm5pbmcgbnVtX3Ns aWNlcz8gSSBoYXZlIG5vIGlkZWEsIGp1c3QgCj4gd29uZGVyaW5nIGlmIHVzZXJzcGFjZSBjYXJl cyBtb3JlIGFib3V0IHRoZSBtYXNrIG9yIGNvdW50IG9mIGVuYWJsZWQgCj4gb25lcy4gUHJvYmFi bHkgbm90IHdvcnRoIGl0IHNpbmNlIGRvaW5nIHRoZSBzaW1pbGFyIGluIG90aGVyIHF1ZXJpZXMg Cj4gd291bGQgYmUgbXVjaCBoYXJkZXIuCgpJIGp1c3QgY291bnQgdGhlIGJpdHMgaW4gdXNlcnNw YWNlLgoKPgo+PiArCj4+ICsjZGVmaW5lIERSTV9JOTE1X1FVRVJZX1NMSUNFX0FWQUlMQUJMRShp bmZvLCBzbGljZSkgXAo+PiArwqDCoMKgICEhKChpbmZvKS0+ZGF0YVsoc2xpY2UpIC8gOF0gJiBE Uk1fSTkxNV9CSVQoKHNsaWNlKSAlIDgpKQo+PiArwqDCoMKgIF9fdTggZGF0YVtdOwo+PiArfTsK Pj4gKwo+PiArLyoKPj4gKyAqIERhdGEgd3JpdHRlbiBieSB0aGUga2VybmVsIHdpdGggcXVlcnkg RFJNX0k5MTVfUVVFUllfU1VCU0xJQ0VfSU5GTyA6Cj4+ICsgKgo+PiArICogZGF0YTogZWFjaCBi aXQgaW5kaWNhdGVzIHdoZXRoZXIgYSBzdWJzbGljZSBpcyBhdmFpbGFibGUgKDEpIG9yIAo+PiBm dXNlZCBvZmYKPj4gKyAqwqDCoMKgwqDCoMKgICgwKS4gRm9ybXVsYSB0byB0ZWxsIGlmIHNsaWNl IFggc3Vic2xpY2UgWSBpcyBhdmFpbGFibGUgOgo+PiArICoKPj4gKyAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAoZGF0YVsoWCAqIG1heF9zdWJzbGljZXMpICsgWSAvIDhdID4+IChZICUgOCkpICYg MQo+Cj4gIlggKiBtYXhfc3Vic2xpY2VzIiBpcyBJIHRoaW5rIHdyb25nLCBuZWVkIHRvIGV4cHJl c3MgdGhlIERJVl9ST1VORF9VUCAKPiBpbiB0aGlzIGNvbW1lbnQgc29tZWhvdy4gQWgsICJYICog QUxJR04obWF4X3N1YnNsaWNlcywgOCkgLyA4IiwgYXMgaW4gCj4gdGhlIEVVIHF1ZXJ5PwoKT29w cyBpbmRlZWQuLi4gVGhlIG1hY3JvIGdvdCBpdCByaWdodC4KCj4KPj4gKyAqCj4+ICsgKsKgwqDC oMKgwqDCoCBBbHRlcm5hdGl2ZWx5LCB1c2UgRFJNX0k5MTVfUVVFUllfU1VCU0xJQ0VfQVZBSUxB QkxFKCkgdG8gCj4+IHF1ZXJ5IGEKPj4gKyAqwqDCoMKgwqDCoMKgIGdpdmVuIHN1YnNsaWNlJ3Mg YXZhaWxhYmlsaXR5Lgo+PiArICovCj4+ICtzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfc3Vic2xpY2Vf aW5mbyB7Cj4+ICvCoMKgwqAgX191MzIgbWF4X3NsaWNlczsKPj4gK8KgwqDCoCBfX3UzMiBtYXhf c3Vic2xpY2VzOwo+PiArCj4+ICsjZGVmaW5lIERSTV9JOTE1X1FVRVJZX1NVQlNMSUNFX0FWQUlM QUJMRShpbmZvLCBzbGljZSwgc3Vic2xpY2UpIFwKPj4gK8KgwqDCoCAhISgoaW5mbyktPmRhdGFb KHNsaWNlKSAqIAo+PiBEUk1fSTkxNV9ESVZfUk9VTkRfVVAoKGluZm8pLT5tYXhfc3Vic2xpY2Vz LCA4KSArIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHN1YnNsaWNlKSAvIDhdICYgRFJN X0k5MTVfQklUKChzdWJzbGljZSkgJSA4KSkKPj4gK8KgwqDCoCBfX3U4IGRhdGFbXTsKPj4gK307 Cj4+ICsKPj4gKy8qCj4+ICsgKiBEYXRhIHdyaXR0ZW4gYnkgdGhlIGtlcm5lbCB3aXRoIHF1ZXJ5 IERSTV9JOTE1X1FVRVJZX0VVX0lORk8gOgo+PiArICoKPj4gKyAqIGRhdGE6IEVhY2ggYml0IGlu ZGljYXRlcyB3aGV0aGVyIGFuIEVVIGlzIGF2YWlsYWJsZSAoMSkgb3IgZnVzZWQgCj4+IG9mZiAo MCkuCj4+ICsgKsKgwqDCoMKgwqDCoCBGb3JtdWxhIHRvIHRlbGwgaWYgc2xpY2UgWCBzdWJzbGlj ZSBZIGV1IFogaXMgYXZhaWxhYmxlIDoKPj4gKyAqCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKg IChkYXRhW1ggKiBtYXhfc3Vic2xpY2VzICogQUxJR04obWF4X2V1c19wZXJfc3Vic2xpY2UsIAo+ PiA4KSAvIDggKwo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBZICogQUxJ R04obWF4X2V1c19wZXJfc3Vic2xpY2UsIDgpIC8gOCArCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFogLyA4XSA+PiAoWiAlIDgpKSAmIDEKPj4gKyAqCj4+ICsgKsKgwqDC oMKgwqDCoCBBbHRlcm5hdGl2ZWx5LCB1c2UgRFJNX0k5MTVfUVVFUllfRVVfQVZBSUxBQkxFKCkg dG8gcXVlcnkgYSAKPj4gZ2l2ZW4KPj4gKyAqwqDCoMKgwqDCoMKgIEVVJ3MgYXZhaWxhYmlsaXR5 Lgo+PiArICovCj4+ICtzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZXVfaW5mbyB7Cj4+ICvCoMKgwqAg X191MzIgbWF4X3NsaWNlczsKPj4gK8KgwqDCoCBfX3UzMiBtYXhfc3Vic2xpY2VzOwo+PiArwqDC oMKgIF9fdTMyIG1heF9ldXNfcGVyX3N1YnNsaWNlOwo+PiArCj4+ICsjZGVmaW5lIERSTV9JOTE1 X1FVRVJZX0VVX0FWQUlMQUJMRShpbmZvLCBzbGljZSwgc3Vic2xpY2UsIGV1KSBcCj4+ICvCoMKg wqAgISEoKGluZm8pLT5kYXRhWyhzbGljZSkgKiAKPj4gRFJNX0k5MTVfRElWX1JPVU5EX1VQKChp bmZvKS0+bWF4X2V1c19wZXJfc3Vic2xpY2UsIDgpICogCj4+IChpbmZvKS0+bWF4X3N1YnNsaWNl cyArIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHN1YnNsaWNlKSAqIAo+PiBEUk1fSTkx NV9ESVZfUk9VTkRfVVAoKGluZm8pLT5tYXhfZXVzX3Blcl9zdWJzbGljZSwgOCkgKyBcCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIChldSkgLyA4XSAmIERSTV9JOTE1X0JJVCgoZXUpICUgOCkp Cj4+ICvCoMKgwqAgX191OCBkYXRhW107Cj4+ICt9Owo+PiArCj4+IMKgICNpZiBkZWZpbmVkKF9f Y3BsdXNwbHVzKQo+PiDCoCB9Cj4+IMKgICNlbmRpZgo+Cj4gUmVnYXJkcywKPgo+IFR2cnRrbwo+ Cj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=