From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8116E89CDF for ; Tue, 25 Sep 2018 23:38:51 +0000 (UTC) Message-ID: <1537918654.2714.28.camel@intel.com> From: Paulo Zanoni Date: Tue, 25 Sep 2018 16:37:34 -0700 In-Reply-To: <20180925134741.19428-2-ville.syrjala@linux.intel.com> References: <20180925134741.19428-1-ville.syrjala@linux.intel.com> <20180925134741.19428-2-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 2/5] lib/igt_fb: Consolidate fb size calculation to one function List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Ville Syrjala , igt-dev@lists.freedesktop.org List-ID: RW0gVGVyLCAyMDE4LTA5LTI1IMOgcyAxNjo0NyArMDMwMCwgVmlsbGUgU3lyamFsYSBlc2NyZXZl dToKPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29t Pgo+IAo+IEVsaW1pbmF0ZSB0aGUgcGxhbmFyIHZzLiBwYWNrZWQgc2l6ZSBjYWxjdWxhdGlvbiBk aWZmZXJlbmNlcyBhbmQganVzdAo+IHVzZSBvbmUgZnVuY3Rpb24gZm9yIHRoZSBlbnRpcmUgdGhp bmcuCgpNdWNoIGJldHRlciEKClJldmlld2VkLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFu b25pQGludGVsLmNvbT4KCj4gCj4gdjI6IFJlYmFzZSBkdWUgdG8gdWludDY0X3Qgc2l6ZQo+IAo+ IENjOiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IC0t LQo+ICBsaWIvaWd0X2ZiLmMgfCAxNDMgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+IC0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDY0IGluc2Vy dGlvbnMoKyksIDc5IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2ZiLmMg Yi9saWIvaWd0X2ZiLmMKPiBpbmRleCBlZDQ5YTNlZGU4NzQuLmFkNzI4ODYzNzU4ZSAxMDA2NDQK PiAtLS0gYS9saWIvaWd0X2ZiLmMKPiArKysgYi9saWIvaWd0X2ZiLmMKPiBAQCAtMjU5LDgwICsy NTksNjYgQEAgc3RhdGljIHVuc2lnbmVkIGNhbGNfcGxhbmVfc3RyaWRlKGludCBmZCwKPiAgCX0K PiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgY2FsY19mYl9zaXplX3BsYW5hcihpbnQgZmQsIGludCB3 aWR0aCwgaW50IGhlaWdodCwKPiArc3RhdGljIHVpbnQ2NF90IGNhbGNfcGxhbmVfc2l6ZShpbnQg ZmQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKPiAgCQkJCXN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1 Y3QgKmZvcm1hdCwKPiAtCQkJCXVpbnQ2NF90IHRpbGluZywgdW5zaWduZWQgc3RyaWRlLAo+IC0J CQkJdWludDY0X3QgKnNpemVfcmV0LCB1bnNpZ25lZAo+ICpzdHJpZGVfcmV0LAo+IC0JCQkJdW5z aWduZWQgKm9mZnNldHMpCj4gKwkJCQl1aW50NjRfdCB0aWxpbmcsIGludCBwbGFuZSwKPiArCQkJ CXVpbnQzMl90IHN0cmlkZSkKPiAgewo+ICsJaWYgKHRpbGluZyAhPSBMT0NBTF9EUk1fRk9STUFU X01PRF9OT05FICYmCj4gKwkgICAgaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSA8 PSAzKSB7Cj4gKwkJdWludDY0X3QgbWluX3NpemUgPSAodWludDY0X3QpIHN0cmlkZSAqIGhlaWdo dDsKPiArCQl1aW50NjRfdCBzaXplOwo+ICsKPiArCQkvKiBSb3VuZCB0aGUgdGlsaW5nIHVwIHRv IHRoZSBuZXh0IHBvd2VyLW9mLXR3byBhbmQKPiB0aGUgcmVnaW9uCj4gKwkJICogdXAgdG8gdGhl IG5leHQgcG90IGZlbmNlIHNpemUgc28gdGhhdCB0aGlzIHdvcmtzCj4gb24gYWxsCj4gKwkJICog Z2VuZXJhdGlvbnMuCj4gKwkJICoKPiArCQkgKiBUaGlzIGNhbiBzdGlsbCBmYWlsIGlmIHRoZSBm cmFtZWJ1ZmZlciBpcyB0b28KPiBsYXJnZSB0byBiZQo+ICsJCSAqIHRpbGVkLiBCdXQgdGhlbiB0 aGF0IGZhaWx1cmUgaXMgZXhwZWN0ZWQuCj4gKwkJICovCj4gKwo+ICsJCXNpemUgPSBtYXgobWlu X3NpemUsIDEwMjQqMTAyNCk7Cj4gKwkJc2l6ZSA9IHJvdW5kdXBfcG93ZXJfb2ZfdHdvKHNpemUp Owo+ICsKPiArCQlyZXR1cm4gc2l6ZTsKPiArCX0gZWxzZSB7Cj4gKwkJdW5zaWduZWQgaW50IHRp bGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+ICsKPiArCQlpZ3RfZ2V0X2ZiX3RpbGVfc2l6ZShmZCwg dGlsaW5nLAo+IGZiX3BsYW5lX2JwcChmb3JtYXQsIHBsYW5lKSwKPiArCQkJCSAgICAgJnRpbGVf d2lkdGgsICZ0aWxlX2hlaWdodCk7Cj4gKwo+ICsJCXJldHVybiAodWludDY0X3QpIHN0cmlkZSAq IEFMSUdOKGhlaWdodCwKPiB0aWxlX2hlaWdodCk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB1 aW50NjRfdCBjYWxjX2ZiX3NpemUoaW50IGZkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCj4gKwkJ CSAgICAgc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0LAo+ICsJCQkgICAgIHVpbnQ2 NF90IHRpbGluZywKPiArCQkJICAgICB1aW50MzJfdCBzdHJpZGVzWzRdLCB1aW50MzJfdAo+IG9m ZnNldHNbNF0pCj4gK3sKPiArCXVpbnQ2NF90IHNpemUgPSAwOwo+ICAJaW50IHBsYW5lOwo+IC0J dW5zaWduZWQgbWF4X3N0cmlkZSA9IDAsIHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0Owo+IC0KPiAt CSpzaXplX3JldCA9IDA7Cj4gIAo+ICAJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgZmJfbnVtX3Bs YW5lcyhmb3JtYXQpOyBwbGFuZSsrKSB7Cj4gLQkJdW5zaWduZWQgcGxhbmVfc3RyaWRlOwo+IC0K PiAtCQlpZ3RfZ2V0X2ZiX3RpbGVfc2l6ZShmZCwgdGlsaW5nLAo+IGZiX3BsYW5lX2JwcChmb3Jt YXQsIHBsYW5lKSwKPiAtCQkJCSAgICAgJnRpbGVfd2lkdGgsICZ0aWxlX2hlaWdodCk7Cj4gLQo+ IC0JCXBsYW5lX3N0cmlkZSA9IEFMSUdOKGZiX3BsYW5lX21pbl9zdHJpZGUoZm9ybWF0LAo+IHdp ZHRoLCBwbGFuZSksIHRpbGVfd2lkdGgpOwo+IC0JCWlmIChtYXhfc3RyaWRlIDwgcGxhbmVfc3Ry aWRlKQo+IC0JCQltYXhfc3RyaWRlID0gcGxhbmVfc3RyaWRlOwo+IC0JfQo+ICsJCWlmICghc3Ry aWRlc1twbGFuZV0pCj4gKwkJCXN0cmlkZXNbcGxhbmVdID0gY2FsY19wbGFuZV9zdHJpZGUoZmQs Cj4gZm9ybWF0LAo+ICsJCQkJCQkJICAgd2lkdGgsCj4gdGlsaW5nLCBwbGFuZSk7Cj4gIAo+IC0J aWYgKCFzdHJpZGUpCj4gLQkJc3RyaWRlID0gbWF4X3N0cmlkZTsKPiAtCj4gLQlmb3IgKHBsYW5l ID0gMDsgcGxhbmUgPCBmYl9udW1fcGxhbmVzKGZvcm1hdCk7IHBsYW5lKyspIHsKPiAgCQlpZiAo b2Zmc2V0cykKPiAtCQkJb2Zmc2V0c1twbGFuZV0gPSAqc2l6ZV9yZXQ7Cj4gKwkJCW9mZnNldHNb cGxhbmVdID0gc2l6ZTsKPiAgCj4gLQkJaWd0X2dldF9mYl90aWxlX3NpemUoZmQsIHRpbGluZywK PiBmYl9wbGFuZV9icHAoZm9ybWF0LCBwbGFuZSksCj4gLQkJCQkgICAgICZ0aWxlX3dpZHRoLCAm dGlsZV9oZWlnaHQpOwo+IC0KPiAtCQkqc2l6ZV9yZXQgKz0gc3RyaWRlICogQUxJR04oZmJfcGxh bmVfaGVpZ2h0KGZvcm1hdCwKPiBoZWlnaHQsIHBsYW5lKSwgdGlsZV9oZWlnaHQpOwo+ICsJCXNp emUgKz0gY2FsY19wbGFuZV9zaXplKGZkLCB3aWR0aCwgaGVpZ2h0LAo+ICsJCQkJCWZvcm1hdCwg dGlsaW5nLCBwbGFuZSwKPiArCQkJCQlzdHJpZGVzW3BsYW5lXSk7Cj4gIAl9Cj4gIAo+IC0JaWYg KG9mZnNldHMpCj4gLQkJZm9yICg7IHBsYW5lIDwgQVJSQVlfU0laRShmb3JtYXQtPnBsYW5lX2Jw cCk7Cj4gcGxhbmUrKykKPiArCWZvciAoOyBwbGFuZSA8IEFSUkFZX1NJWkUoZm9ybWF0LT5wbGFu ZV9icHApOyBwbGFuZSsrKSB7Cj4gKwkJc3RyaWRlc1twbGFuZV0gPSAwOwo+ICsJCWlmIChvZmZz ZXRzKQo+ICAJCQlvZmZzZXRzW3BsYW5lXSA9IDA7Cj4gLQo+IC0JKnN0cmlkZV9yZXQgPSBzdHJp ZGU7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGNhbGNfZmJfc2l6ZV9wYWNrZWQoaW50IGZkLCBp bnQgd2lkdGgsIGludCBoZWlnaHQsCj4gLQkJCQlzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0ICpm b3JtYXQsCj4gdWludDY0X3QgdGlsaW5nLAo+IC0JCQkJdW5zaWduZWQgc3RyaWRlLCB1aW50NjRf dCAqc2l6ZV9yZXQsCj4gdW5zaWduZWQgKnN0cmlkZV9yZXQpCj4gLXsKPiAtCXVpbnQ2NF90IHNp emU7Cj4gLQo+IC0JaWYgKCFzdHJpZGUpCj4gLQkJc3RyaWRlID0gY2FsY19wbGFuZV9zdHJpZGUo ZmQsIGZvcm1hdCwgd2lkdGgsCj4gdGlsaW5nLCAwKTsKPiAtCj4gLQlpZiAodGlsaW5nICE9IExP Q0FMX0RSTV9GT1JNQVRfTU9EX05PTkUgJiYKPiAtCSAgICBpbnRlbF9nZW4oaW50ZWxfZ2V0X2Ry bV9kZXZpZChmZCkpIDw9IDMpIHsKPiAtCQkvKiBSb3VuZCB0aGUgdGlsaW5nIHVwIHRvIHRoZSBu ZXh0IHBvd2VyLW9mLXR3byBhbmQKPiB0aGUgcmVnaW9uCj4gLQkJICogdXAgdG8gdGhlIG5leHQg cG90IGZlbmNlIHNpemUgc28gdGhhdCB0aGlzIHdvcmtzCj4gb24gYWxsCj4gLQkJICogZ2VuZXJh dGlvbnMuCj4gLQkJICoKPiAtCQkgKiBUaGlzIGNhbiBzdGlsbCBmYWlsIGlmIHRoZSBmcmFtZWJ1 ZmZlciBpcyB0b28KPiBsYXJnZSB0byBiZQo+IC0JCSAqIHRpbGVkLiBCdXQgdGhlbiB0aGF0IGZh aWx1cmUgaXMgZXhwZWN0ZWQuCj4gLQkJICovCj4gLQo+IC0JCXNpemUgPSBtYXgoKHVpbnQ2NF90 KSBzdHJpZGUgKiBoZWlnaHQsIDEwMjQqMTAyNCk7Cj4gLQkJc2l6ZSA9IHJvdW5kdXBfcG93ZXJf b2ZfdHdvKHNpemUpOwo+IC0JfSBlbHNlIHsKPiAtCQl1bnNpZ25lZCBpbnQgdGlsZV93aWR0aCwg dGlsZV9oZWlnaHQ7Cj4gLQo+IC0JCWlndF9nZXRfZmJfdGlsZV9zaXplKGZkLCB0aWxpbmcsCj4g ZmJfcGxhbmVfYnBwKGZvcm1hdCwgMCksCj4gLQkJCQkgICAgICZ0aWxlX3dpZHRoLCAmdGlsZV9o ZWlnaHQpOwo+IC0KPiAtCQlzaXplID0gKHVpbnQ2NF90KSBzdHJpZGUgKiBBTElHTihoZWlnaHQs Cj4gdGlsZV9oZWlnaHQpOwo+ICAJfQo+ICAKPiAtCSpzdHJpZGVfcmV0ID0gc3RyaWRlOwo+IC0J KnNpemVfcmV0ID0gc2l6ZTsKPiArCXJldHVybiBzaXplOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAt MzUyLDEyICszMzgsMTIgQEAgdm9pZCBpZ3RfY2FsY19mYl9zaXplKGludCBmZCwgaW50IHdpZHRo LCBpbnQKPiBoZWlnaHQsIHVpbnQzMl90IGRybV9mb3JtYXQsIHVpbnQ2NAo+ICAJCSAgICAgIHVp bnQ2NF90ICpzaXplX3JldCwgdW5zaWduZWQgKnN0cmlkZV9yZXQpCj4gIHsKPiAgCXN0cnVjdCBm b3JtYXRfZGVzY19zdHJ1Y3QgKmZvcm1hdCA9Cj4gbG9va3VwX2RybV9mb3JtYXQoZHJtX2Zvcm1h dCk7Cj4gKwl1aW50MzJfdCBzdHJpZGVzWzRdID0ge307Cj4gKwo+ICAJaWd0X2Fzc2VydChmb3Jt YXQpOwo+ICAKPiAtCWlmIChmYl9udW1fcGxhbmVzKGZvcm1hdCkgPiAxKQo+IC0JCWNhbGNfZmJf c2l6ZV9wbGFuYXIoZmQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwKPiB0aWxpbmcsIDAsIHNpemVf cmV0LCBzdHJpZGVfcmV0LCBOVUxMKTsKPiAtCWVsc2UKPiAtCQljYWxjX2ZiX3NpemVfcGFja2Vk KGZkLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsCj4gdGlsaW5nLCAwLCBzaXplX3JldCwgc3RyaWRl X3JldCk7Cj4gKwkqc2l6ZV9yZXQgPSBjYWxjX2ZiX3NpemUoZmQsIHdpZHRoLCBoZWlnaHQsIGZv cm1hdCwgdGlsaW5nLAo+IHN0cmlkZXMsIE5VTEwpOwo+ICsJKnN0cmlkZV9yZXQgPSBzdHJpZGVz WzBdOwo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtNDE5LDcgKzQwNSw3IEBAIHN0YXRpYyBpbnQgY3Jl YXRlX2JvX2Zvcl9mYihpbnQgZmQsIGludCB3aWR0aCwKPiBpbnQgaGVpZ2h0LAo+ICAJCQkgICAg c3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0LAo+ICAJCQkgICAgdWludDY0X3QgdGls aW5nLCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZAo+IHN0cmlkZSwKPiAgCQkJICAgIHVpbnQ2NF90 ICpzaXplX3JldCwgdW5zaWduZWQKPiAqc3RyaWRlX3JldCwKPiAtCQkJICAgIHVpbnQzMl90ICpv ZmZzZXRzLCBib29sICppc19kdW1iKQo+ICsJCQkgICAgdWludDMyX3Qgb2Zmc2V0c1s0XSwgYm9v bCAqaXNfZHVtYikKPiAgewo+ICAJaW50IGJvOwo+ICAKPiBAQCAtNDMwLDE3ICs0MTYsMTYgQEAg c3RhdGljIGludCBjcmVhdGVfYm9fZm9yX2ZiKGludCBmZCwgaW50IHdpZHRoLAo+IGludCBoZWln aHQsCj4gIAo+ICAJaWYgKHRpbGluZyB8fCBzaXplIHx8IHN0cmlkZSB8fCBpZ3RfZm9ybWF0X2lz X3l1dihmb3JtYXQtCj4gPmRybV9pZCkpIHsKPiAgCQl1aW50NjRfdCBjYWxjdWxhdGVkX3NpemU7 Cj4gLQkJdW5zaWduZWQgaW50IGNhbGN1bGF0ZWRfc3RyaWRlOwo+ICsJCXVpbnQzMl90IHN0cmlk ZXNbNF0gPSB7Cj4gKwkJCXN0cmlkZSwKPiArCQl9Owo+ICAKPiAtCQlpZiAoZmJfbnVtX3BsYW5l cyhmb3JtYXQpID4gMSkKPiAtCQkJY2FsY19mYl9zaXplX3BsYW5hcihmZCwgd2lkdGgsIGhlaWdo dCwKPiBmb3JtYXQsIHRpbGluZywgc3RyaWRlLAo+IC0JCQkJCSAgICAmY2FsY3VsYXRlZF9zaXpl LAo+ICZjYWxjdWxhdGVkX3N0cmlkZSwgb2Zmc2V0cyk7Cj4gLQkJZWxzZQo+IC0JCQljYWxjX2Zi X3NpemVfcGFja2VkKGZkLCB3aWR0aCwgaGVpZ2h0LAo+IGZvcm1hdCwgdGlsaW5nLCBzdHJpZGUs Cj4gLQkJCQkJICAgICZjYWxjdWxhdGVkX3NpemUsCj4gJmNhbGN1bGF0ZWRfc3RyaWRlKTsKPiAr CQljYWxjdWxhdGVkX3NpemUgPSBjYWxjX2ZiX3NpemUoZmQsIHdpZHRoLCBoZWlnaHQsCj4gKwkJ CQkJICAgICAgIGZvcm1hdCwgdGlsaW5nLAo+ICsJCQkJCSAgICAgICBzdHJpZGVzLCBvZmZzZXRz KTsKPiAgCj4gIAkJaWYgKHN0cmlkZSA9PSAwKQo+IC0JCQlzdHJpZGUgPSBjYWxjdWxhdGVkX3N0 cmlkZTsKPiArCQkJc3RyaWRlID0gc3RyaWRlc1swXTsKPiAgCQlpZiAoc2l6ZSA9PSAwKQo+ICAJ CQlzaXplID0gY2FsY3VsYXRlZF9zaXplOwo+ICAKPiBAQCAtNDY0LDE5ICs0NDksMTkgQEAgc3Rh dGljIGludCBjcmVhdGVfYm9fZm9yX2ZiKGludCBmZCwgaW50IHdpZHRoLAo+IGludCBoZWlnaHQs Cj4gIAkJCXN3aXRjaCAoZm9ybWF0LT5kcm1faWQpIHsKPiAgCQkJY2FzZSBEUk1fRk9STUFUX05W MTI6Cj4gIAkJCQltZW1zZXQocHRyICsgb2Zmc2V0c1swXSwgZnVsbF9yYW5nZQo+ID8gMHgwMCA6 IDB4MTAsCj4gLQkJCQkgICAgICAgY2FsY3VsYXRlZF9zdHJpZGUgKiBoZWlnaHQpOwo+ICsJCQkJ ICAgICAgIHN0cmlkZXNbMF0gKiBoZWlnaHQpOwo+ICAJCQkJbWVtc2V0KHB0ciArIG9mZnNldHNb MV0sIDB4ODAsCj4gLQkJCQkgICAgICAgY2FsY3VsYXRlZF9zdHJpZGUgKgo+IGhlaWdodC8yKTsK PiArCQkJCSAgICAgICBzdHJpZGVzWzFdICogaGVpZ2h0LzIpOwo+ICAJCQkJYnJlYWs7Cj4gIAkJ CWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+ICAJCQljYXNlIERSTV9GT1JNQVRfWVZZVToKPiAgCQkJ CXdtZW1zZXQocHRyLCBmdWxsX3JhbmdlID8gMHg4MDAwODAwMAo+IDogMHg4MDEwODAxMCwKPiAt CQkJCQljYWxjdWxhdGVkX3N0cmlkZSAqIGhlaWdodCAvCj4gc2l6ZW9mKHdjaGFyX3QpKTsKPiAr CQkJCQlzdHJpZGVzWzBdICogaGVpZ2h0IC8KPiBzaXplb2Yod2NoYXJfdCkpOwo+ICAJCQkJYnJl YWs7Cj4gIAkJCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICAJCQljYXNlIERSTV9GT1JNQVRfVllV WToKPiAgCQkJCXdtZW1zZXQocHRyLCBmdWxsX3JhbmdlID8gMHgwMDgwMDA4MAo+IDogMHgxMDgw MTA4MCwKPiAtCQkJCQljYWxjdWxhdGVkX3N0cmlkZSAqIGhlaWdodCAvCj4gc2l6ZW9mKHdjaGFy X3QpKTsKPiArCQkJCQlzdHJpZGVzWzBdICogaGVpZ2h0IC8KPiBzaXplb2Yod2NoYXJfdCkpOwo+ ICAJCQkJYnJlYWs7Cj4gIAkJCX0KPiAgCQkJZ2VtX211bm1hcChwdHIsIHNpemUpOwo+IEBAIC00 ODUsNyArNDcwLDcgQEAgc3RhdGljIGludCBjcmVhdGVfYm9fZm9yX2ZiKGludCBmZCwgaW50IHdp ZHRoLAo+IGludCBoZWlnaHQsCj4gIAkJCQkqc2l6ZV9yZXQgPSBzaXplOwo+ICAKPiAgCQkJaWYg KHN0cmlkZV9yZXQpCj4gLQkJCQkqc3RyaWRlX3JldCA9IHN0cmlkZTsKPiArCQkJCSpzdHJpZGVf cmV0ID0gc3RyaWRlc1swXTsKPiAgCj4gIAkJCXJldHVybiBibzsKPiAgCQl9IGVsc2UgewpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK