From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7428AC2D0F4 for ; Wed, 8 Apr 2020 19:49:23 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 46C972075E for ; Wed, 8 Apr 2020 19:49:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 46C972075E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id F14276EAC7; Wed, 8 Apr 2020 19:49:22 +0000 (UTC) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5B67F6EAC7 for ; Wed, 8 Apr 2020 19:49:21 +0000 (UTC) IronPort-SDR: h12ZgzKXuFILLDQmiLIYaSNGKnnH/OHRXpaqSdaWpyGPK5tGEVNhTU57Tz9ASeWJ92TmXYz+SD RzXwcfXH+PbQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2020 12:49:20 -0700 IronPort-SDR: Xl2Gl44OdX0TIevMxXitfcwTV+KU6M0q7DnaA4JmrXcZrgd5NwevOi52JQOQBbDUknF9XF1Jrn b+cQHDaYhllA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,359,1580803200"; d="scan'208";a="240398439" Received: from linux.fm.intel.com (HELO intel.com) ([10.1.27.42]) by orsmga007.jf.intel.com with ESMTP; 08 Apr 2020 12:49:20 -0700 Date: Wed, 8 Apr 2020 12:49:20 -0700 From: Venkata Sandeep Dhanalakota To: Chris Wilson Message-ID: <20200408194920.GC22556@intel.com> References: <20200403091300.14734-1-chris@chris-wilson.co.uk> <20200403091300.14734-5-chris@chris-wilson.co.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200403091300.14734-5-chris@chris-wilson.co.uk> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [Intel-gfx] [PATCH 05/10] dma-buf: Exercise dma-fence-chain under selftests X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: intel-gfx@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gMjAvMDQvMDMgMTA6MTIsIENocmlzIFdpbHNvbiB3cm90ZToKPiBBIGZldyB2ZXJ5IHNpbXBs ZSB0ZXN0Y2FzZXMgdG8gZXhlcmNpc2UgdGhlIGRtYS1mZW5jZS1jaGFpbiBBUEkuCj4gCj4gU2ln bmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0t Cj4gIGRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMyArLQo+ICBkcml2 ZXJzL2RtYS1idWYvc2VsZnRlc3RzLmggICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2RtYS1i dWYvc3QtZG1hLWZlbmNlLWNoYWluLmMgfCA3MTMgKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIDMgZmlsZXMgY2hhbmdlZCwgNzE2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEtZmVuY2UtY2hhaW4uYwo+ IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS1i dWYvTWFrZWZpbGUKPiBpbmRleCA5YzE5MDAyNmJmYWIuLjk5NWUwNWY2MDlmZiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2RtYS1idWYvTWFr ZWZpbGUKPiBAQCAtOSw2ICs5LDcgQEAgb2JqLSQoQ09ORklHX1VETUFCVUYpCQkrPSB1ZG1hYnVm Lm8KPiAgCj4gIGRtYWJ1Zl9zZWxmdGVzdHMteSA6PSBcCj4gIAlzZWxmdGVzdC5vIFwKPiAtCXN0 LWRtYS1mZW5jZS5vCj4gKwlzdC1kbWEtZmVuY2UubyBcCj4gKwlzdC1kbWEtZmVuY2UtY2hhaW4u bwo+ICAKPiAgb2JqLSQoQ09ORklHX0RNQUJVRl9TRUxGVEVTVFMpCSs9IGRtYWJ1Zl9zZWxmdGVz dHMubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvc2VsZnRlc3RzLmggYi9kcml2ZXJz L2RtYS1idWYvc2VsZnRlc3RzLmgKPiBpbmRleCA1MzIwMzg2ZjAyZTUuLjU1OTE4ZWY5YWRhYiAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvc2VsZnRlc3RzLmgKPiArKysgYi9kcml2ZXJz L2RtYS1idWYvc2VsZnRlc3RzLmgKPiBAQCAtMTEsMyArMTEsNCBAQAo+ICAgKi8KPiAgc2VsZnRl c3Qoc2FuaXR5Y2hlY2ssIF9fc2FuaXR5Y2hlY2tfXykgLyoga2VlcCBmaXJzdCAoaWd0IHNlbGZj aGVjaykgKi8KPiAgc2VsZnRlc3QoZG1hX2ZlbmNlLCBkbWFfZmVuY2UpCj4gK3NlbGZ0ZXN0KGRt YV9mZW5jZV9jaGFpbiwgZG1hX2ZlbmNlX2NoYWluKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Rt YS1idWYvc3QtZG1hLWZlbmNlLWNoYWluLmMgYi9kcml2ZXJzL2RtYS1idWYvc3QtZG1hLWZlbmNl LWNoYWluLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmQw OGJhNjdiMDNiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9zdC1kbWEt ZmVuY2UtY2hhaW4uYwo+IEBAIC0wLDAgKzEsNzEzIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBNSVQKPiArCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9kbWEtZmVuY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS1jaGFpbi5o Pgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFk Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tbS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQvc2ln bmFsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Cj4gKwo+ICsjaW5jbHVkZSAic2Vs ZnRlc3QuaCIKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYl9mZW5jZXM7Cj4g Kwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtb2NrX2ZlbmNlIHsKPiArCXN0cnVjdCBkbWFfZmVu Y2UgYmFzZTsKPiArCXNwaW5sb2NrX3QgbG9jazsKPiArfSAqdG9fbW9ja19mZW5jZShzdHJ1Y3Qg ZG1hX2ZlbmNlICpmKSB7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGYsIHN0cnVjdCBtb2NrX2Zl bmNlLCBiYXNlKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKm1vY2tfbmFtZShzdHJ1 Y3QgZG1hX2ZlbmNlICpmKQo+ICt7Cj4gKwlyZXR1cm4gIm1vY2siOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBtb2NrX2ZlbmNlX3JlbGVhc2Uoc3RydWN0IGRtYV9mZW5jZSAqZikKPiArewo+ICsJ a21lbV9jYWNoZV9mcmVlKHNsYWJfZmVuY2VzLCB0b19tb2NrX2ZlbmNlKGYpKTsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIG1vY2tfb3BzID0gewo+ICsJLmdl dF9kcml2ZXJfbmFtZSA9IG1vY2tfbmFtZSwKPiArCS5nZXRfdGltZWxpbmVfbmFtZSA9IG1vY2tf bmFtZSwKPiArCS5yZWxlYXNlID0gbW9ja19mZW5jZV9yZWxlYXNlLAo+ICt9Owo+ICsKPiArc3Rh dGljIHN0cnVjdCBkbWFfZmVuY2UgKm1vY2tfZmVuY2Uodm9pZCkKPiArewo+ICsJc3RydWN0IG1v Y2tfZmVuY2UgKmY7Cj4gKwo+ICsJZiA9IGttZW1fY2FjaGVfYWxsb2Moc2xhYl9mZW5jZXMsIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFmKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCXNwaW5fbG9j a19pbml0KCZmLT5sb2NrKTsKPiArCWRtYV9mZW5jZV9pbml0KCZmLT5iYXNlLCAmbW9ja19vcHMs ICZmLT5sb2NrLCAwLCAwKTsKPiArCj4gKwlyZXR1cm4gJmYtPmJhc2U7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgc3RydWN0IG1vY2tfY2hhaW4gewo+ICsJc3RydWN0IGRtYV9mZW5jZV9jaGFp biBiYXNlOwo+ICt9ICp0b19tb2NrX2NoYWluKHN0cnVjdCBkbWFfZmVuY2UgKmYpIHsKPiArCXJl dHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IG1vY2tfY2hhaW4sIGJhc2UuYmFzZSk7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICptb2NrX2NoYWluKHN0cnVjdCBkbWFfZmVu Y2UgKnByZXYsCj4gKwkJCQkgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCj4gKwkJCQkgICAg dTY0IHNlcW5vKQo+ICt7Cj4gKwlzdHJ1Y3QgbW9ja19jaGFpbiAqZjsKPiArCj4gKwlmID0ga21h bGxvYyhzaXplb2YoKmYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZikKPiArCQlyZXR1cm4gTlVM TDsKPiArCj4gKwlkbWFfZmVuY2VfY2hhaW5faW5pdCgmZi0+YmFzZSwKPiArCQkJICAgICBkbWFf ZmVuY2VfZ2V0KHByZXYpLAo+ICsJCQkgICAgIGRtYV9mZW5jZV9nZXQoZmVuY2UpLAo+ICsJCQkg ICAgIHNlcW5vKTsKPiArCj4gKwlyZXR1cm4gJmYtPmJhc2UuYmFzZTsKPiArfQo+ICsKPiArc3Rh dGljIGludCBzYW5pdHljaGVjayh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkbWFfZmVuY2Ug KmYsICpjaGFpbjsKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCWYgPSBtb2NrX2ZlbmNlKCk7Cj4g KwlpZiAoIWYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY2hhaW4gPSBtb2NrX2NoYWlu KE5VTEwsIGYsIDEpOwo+ICsJaWYgKCFjaGFpbikKPiArCQllcnIgPSAtRU5PTUVNOwo+ICsKPiAr CWRtYV9mZW5jZV9zaWduYWwoZik7Cj4gKwlkbWFfZmVuY2VfcHV0KGYpOwo+ICsKPiArCWRtYV9m ZW5jZV9wdXQoY2hhaW4pOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0cnVjdCBm ZW5jZV9jaGFpbnMgewo+ICsJdW5zaWduZWQgaW50IGNoYWluX2xlbmd0aDsKPiArCXN0cnVjdCBk bWFfZmVuY2UgKipmZW5jZXM7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICoqY2hhaW5zOwo+ICsKPiAr CXN0cnVjdCBkbWFfZmVuY2UgKnRhaWw7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdWludDY0X3Qgc2Vx bm9faW5jKHVuc2lnbmVkIGludCBpKQo+ICt7Cj4gKwlyZXR1cm4gaSArIDE7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgZmVuY2VfY2hhaW5zX2luaXQoc3RydWN0IGZlbmNlX2NoYWlucyAqZmMsIHVu c2lnbmVkIGludCBjb3VudCwKPiArCQkJICAgICB1aW50NjRfdCAoKnNlcW5vX2ZuKSh1bnNpZ25l ZCBpbnQpKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCWludCBlcnIgPSAwOwo+ICsKPiAr CWZjLT5jaGFpbnMgPSBrdm1hbGxvY19hcnJheShjb3VudCwgc2l6ZW9mKCpmYy0+Y2hhaW5zKSwK PiArCQkJCSAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4gKwlpZiAoIWZjLT5jaGFpbnMp Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZmMtPmZlbmNlcyA9IGt2bWFsbG9jX2FycmF5 KGNvdW50LCBzaXplb2YoKmZjLT5mZW5jZXMpLAo+ICsJCQkJICAgIEdGUF9LRVJORUwgfCBfX0dG UF9aRVJPKTsKPiArCWlmICghZmMtPmZlbmNlcykgewo+ICsJCWVyciA9IC1FTk9NRU07Cj4gKwkJ Z290byBlcnJfY2hhaW5zOwo+ICsJfQo+ICsKPiArCWZjLT50YWlsID0gTlVMTDsKPiArCWZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gKwkJZmMtPmZlbmNlc1tpXSA9IG1vY2tfZmVuY2Uo KTsKPiArCQlpZiAoIWZjLT5mZW5jZXNbaV0pIHsKPiArCQkJZXJyID0gLUVOT01FTTsKPiArCQkJ Z290byB1bndpbmQ7Cj4gKwkJfQo+ICsKPiArCQlmYy0+Y2hhaW5zW2ldID0gbW9ja19jaGFpbihm Yy0+dGFpbCwKPiArCQkJCQkgICBmYy0+ZmVuY2VzW2ldLAo+ICsJCQkJCSAgIHNlcW5vX2ZuKGkp KTsKPiArCQlpZiAoIWZjLT5jaGFpbnNbaV0pIHsKPiArCQkJZXJyID0gLUVOT01FTTsKPiArCQkJ Z290byB1bndpbmQ7Cj4gKwkJfQo+ICsKPiArCQlmYy0+dGFpbCA9IGZjLT5jaGFpbnNbaV07Cj4g Kwl9Cj4gKwo+ICsJZmMtPmNoYWluX2xlbmd0aCA9IGk7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK3Vu d2luZDoKPiArCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gKwkJZG1hX2ZlbmNlX3B1 dChmYy0+ZmVuY2VzW2ldKTsKPiArCQlkbWFfZmVuY2VfcHV0KGZjLT5jaGFpbnNbaV0pOwo+ICsJ fQo+ICsJa3ZmcmVlKGZjLT5mZW5jZXMpOwo+ICtlcnJfY2hhaW5zOgo+ICsJa3ZmcmVlKGZjLT5j aGFpbnMpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZmVuY2VfY2hh aW5zX2Zpbmkoc3RydWN0IGZlbmNlX2NoYWlucyAqZmMpCj4gK3sKPiArCXVuc2lnbmVkIGludCBp Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBmYy0+Y2hhaW5fbGVuZ3RoOyBpKyspIHsKPiArCQlk bWFfZmVuY2Vfc2lnbmFsKGZjLT5mZW5jZXNbaV0pOwo+ICsJCWRtYV9mZW5jZV9wdXQoZmMtPmZl bmNlc1tpXSk7Cj4gKwl9Cj4gKwlrdmZyZWUoZmMtPmZlbmNlcyk7Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IGZjLT5jaGFpbl9sZW5ndGg7IGkrKykKPiArCQlkbWFfZmVuY2VfcHV0KGZjLT5jaGFp bnNbaV0pOwo+ICsJa3ZmcmVlKGZjLT5jaGFpbnMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZp bmRfc2Vxbm8odm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZmVuY2VfY2hhaW5zIGZjOwo+ICsJ c3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gKwlpbnQgZXJyOwo+ICsJaW50IGk7Cj4gKwo+ICsJ ZXJyID0gZmVuY2VfY2hhaW5zX2luaXQoJmZjLCA2NCwgc2Vxbm9faW5jKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwlmZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmMudGFpbCk7 Cj4gKwllcnIgPSBkbWFfZmVuY2VfY2hhaW5fZmluZF9zZXFubygmZmVuY2UsIDApOwo+ICsJZG1h X2ZlbmNlX3B1dChmZW5jZSk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJcHJfZXJyKCJSZXBvcnRlZCAl ZCBmb3IgZmluZF9zZXFubygwKSFcbiIsIGVycik7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IGZjLmNoYWluX2xlbmd0aDsgaSsrKSB7Cj4gKwkJZmVuY2UgPSBk bWFfZmVuY2VfZ2V0KGZjLnRhaWwpOwo+ICsJCWVyciA9IGRtYV9mZW5jZV9jaGFpbl9maW5kX3Nl cW5vKCZmZW5jZSwgaSArIDEpOwo+ICsJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsJCWlmIChl cnIpIHsKPiArCQkJcHJfZXJyKCJSZXBvcnRlZCAlZCBmb3IgZmluZF9zZXFubyglZDolZCkhXG4i LAo+ICsJCQkgICAgICAgZXJyLCBmYy5jaGFpbl9sZW5ndGggKyAxLCBpICsgMSk7Cj4gKwkJCWdv dG8gZXJyOwo+ICsJCX0KPiArCQlpZiAoZmVuY2UgIT0gZmMuY2hhaW5zW2ldKSB7Cj4gKwkJCXBy X2VycigiSW5jb3JyZWN0IGZlbmNlIHJlcG9ydGVkIGJ5IGZpbmRfc2Vxbm8oJWQ6JWQpXG4iLAo+ ICsJCQkgICAgICAgZmMuY2hhaW5fbGVuZ3RoICsgMSwgaSArIDEpOwo+ICsJCQllcnIgPSAtRUlO VkFMOwo+ICsJCQlnb3RvIGVycjsKPiArCQl9Cj4gKwo+ICsJCWRtYV9mZW5jZV9nZXQoZmVuY2Up Owo+ICsJCWVyciA9IGRtYV9mZW5jZV9jaGFpbl9maW5kX3NlcW5vKCZmZW5jZSwgaSArIDEpOwo+ ICsJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsJCWlmIChlcnIpIHsKPiArCQkJcHJfZXJyKCJF cnJvciByZXBvcnRlZCBmb3IgZmluZGluZyBzZWxmXG4iKTsKPiArCQkJZ290byBlcnI7Cj4gKwkJ fQo+ICsJCWlmIChmZW5jZSAhPSBmYy5jaGFpbnNbaV0pIHsKPiArCQkJcHJfZXJyKCJJbmNvcnJl Y3QgZmVuY2UgcmVwb3J0ZWQgYnkgZmluZCBzZWxmXG4iKTsKPiArCQkJZXJyID0gLUVJTlZBTDsK PiArCQkJZ290byBlcnI7Cj4gKwkJfQo+ICsKPiArCQlkbWFfZmVuY2VfZ2V0KGZlbmNlKTsKPiAr CQllcnIgPSBkbWFfZmVuY2VfY2hhaW5fZmluZF9zZXFubygmZmVuY2UsIGkgKyAyKTsKPiArCQlk bWFfZmVuY2VfcHV0KGZlbmNlKTsKPiArCQlpZiAoIWVycikgewo+ICsJCQlwcl9lcnIoIkVycm9y IG5vdCByZXBvcnRlZCBmb3IgZnV0dXJlIGZlbmNlOiBmaW5kX3NlcW5vKCVkOiVkKSFcbiIsCj4g KwkJCSAgICAgICBpICsgMSwgaSArIDIpOwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQlnb3Rv IGVycjsKPiArCQl9Cj4gKwo+ICsJCWRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+ICsJCWVyciA9IGRt YV9mZW5jZV9jaGFpbl9maW5kX3NlcW5vKCZmZW5jZSwgaSk7Cj4gKwkJZG1hX2ZlbmNlX3B1dChm ZW5jZSk7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlwcl9lcnIoIkVycm9yIHJlcG9ydGVkIGZvciBw cmV2aW91cyBmZW5jZSFcbiIpOwo+ICsJCQlnb3RvIGVycjsKPiArCQl9Cj4gKwkJaWYgKGkgPiAw ICYmIGZlbmNlICE9IGZjLmNoYWluc1tpIC0gMV0pIHsKPiArCQkJcHJfZXJyKCJJbmNvcnJlY3Qg ZmVuY2UgcmVwb3J0ZWQgYnkgZmluZF9zZXFubyglZDolZClcbiIsCj4gKwkJCSAgICAgICBpICsg MSwgaSk7Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJCX0KPiArCX0K PiArCj4gK2VycjoKPiArCWZlbmNlX2NoYWluc19maW5pKCZmYyk7Cj4gKwlyZXR1cm4gZXJyOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbmRfc2lnbmFsZWQodm9pZCAqYXJnKQo+ICt7Cj4gKwlz dHJ1Y3QgZmVuY2VfY2hhaW5zIGZjOwo+ICsJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4gKwlp bnQgZXJyOwo+ICsKPiArCWVyciA9IGZlbmNlX2NoYWluc19pbml0KCZmYywgMiwgc2Vxbm9faW5j KTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwlkbWFfZmVuY2Vfc2lnbmFs KGZjLmZlbmNlc1swXSk7Cj4gKwo+ICsJZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KGZjLnRhaWwpOwo+ ICsJZXJyID0gZG1hX2ZlbmNlX2NoYWluX2ZpbmRfc2Vxbm8oJmZlbmNlLCAxKTsKPiArCWRtYV9m ZW5jZV9wdXQoZmVuY2UpOwo+ICsJaWYgKGVycikgewo+ICsJCXByX2VycigiUmVwb3J0ZWQgJWQg Zm9yIGZpbmRfc2Vxbm8oKSFcbiIsIGVycik7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwo+ICsJ aWYgKGZlbmNlICYmIGZlbmNlICE9IGZjLmNoYWluc1swXSkgewo+ICsJCXByX2VycigiSW5jb3Jy ZWN0IGNoYWluLWZlbmNlLnNlcW5vOiVsbGQgcmVwb3J0ZWQgZm9yIGNvbXBsZXRlZCBzZXFubzox XG4iLAo+ICsJCSAgICAgICBmZW5jZS0+c2Vxbm8pOwo+ICsKPiArCQlkbWFfZmVuY2VfZ2V0KGZl bmNlKTsKPiArCQllcnIgPSBkbWFfZmVuY2VfY2hhaW5fZmluZF9zZXFubygmZmVuY2UsIDEpOwo+ ICsJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsJCWlmIChlcnIpCj4gKwkJCXByX2VycigiUmVw b3J0ZWQgJWQgZm9yIGZpbmRpbmcgc2VsZiFcbiIsIGVycik7Cj4gKwo+ICsJCWVyciA9IC1FSU5W QUw7Cj4gKwl9Cj4gKwo+ICtlcnI6Cj4gKwlmZW5jZV9jaGFpbnNfZmluaSgmZmMpOwo+ICsJcmV0 dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBmaW5kX291dF9vZl9vcmRlcih2b2lkICph cmcpCj4gK3sKPiArCXN0cnVjdCBmZW5jZV9jaGFpbnMgZmM7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZTsKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gZmVuY2VfY2hhaW5zX2luaXQoJmZj LCAzLCBzZXFub19pbmMpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWRt YV9mZW5jZV9zaWduYWwoZmMuZmVuY2VzWzFdKTsKPiArCj4gKwlmZW5jZSA9IGRtYV9mZW5jZV9n ZXQoZmMudGFpbCk7Cj4gKwllcnIgPSBkbWFfZmVuY2VfY2hhaW5fZmluZF9zZXFubygmZmVuY2Us IDIpOwo+ICsJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJcHJfZXJy KCJSZXBvcnRlZCAlZCBmb3IgZmluZF9zZXFubygpIVxuIiwgZXJyKTsKPiArCQlnb3RvIGVycjsK PiArCX0KPiArCj4gKwlpZiAoZmVuY2UgJiYgZmVuY2UgIT0gZmMuY2hhaW5zWzFdKSB7Cj4gKwkJ cHJfZXJyKCJJbmNvcnJlY3QgY2hhaW4tZmVuY2Uuc2Vxbm86JWxsZCByZXBvcnRlZCBmb3IgY29t cGxldGVkIHNlcW5vOjJcbiIsCj4gKwkJICAgICAgIGZlbmNlLT5zZXFubyk7Cj4gKwo+ICsJCWRt YV9mZW5jZV9nZXQoZmVuY2UpOwo+ICsJCWVyciA9IGRtYV9mZW5jZV9jaGFpbl9maW5kX3NlcW5v KCZmZW5jZSwgMik7Cj4gKwkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gKwkJaWYgKGVycikKPiAr CQkJcHJfZXJyKCJSZXBvcnRlZCAlZCBmb3IgZmluZGluZyBzZWxmIVxuIiwgZXJyKTsKPiArCj4g KwkJZXJyID0gLUVJTlZBTDsKPiArCX0KPiArCj4gK2VycjoKPiArCWZlbmNlX2NoYWluc19maW5p KCZmYyk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDY0X3Qgc2Vxbm9f aW5jMih1bnNpZ25lZCBpbnQgaSkKPiArewo+ICsJcmV0dXJuIDIgKiBpICsgMjsKPiArfQo+ICsK PiArc3RhdGljIGludCBmaW5kX2dhcCh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBmZW5jZV9j aGFpbnMgZmM7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPiArCWludCBlcnI7Cj4gKwlp bnQgaTsKPiArCj4gKwllcnIgPSBmZW5jZV9jaGFpbnNfaW5pdCgmZmMsIDY0LCBzZXFub19pbmMy KTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg ZmMuY2hhaW5fbGVuZ3RoOyBpKyspIHsKPiArCQlmZW5jZSA9IGRtYV9mZW5jZV9nZXQoZmMudGFp bCk7Cj4gKwkJZXJyID0gZG1hX2ZlbmNlX2NoYWluX2ZpbmRfc2Vxbm8oJmZlbmNlLCAyICogaSAr IDEpOwo+ICsJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsJCWlmIChlcnIpIHsKPiArCQkJcHJf ZXJyKCJSZXBvcnRlZCAlZCBmb3IgZmluZF9zZXFubyglZDolZCkhXG4iLAo+ICsJCQkgICAgICAg ZXJyLCBmYy5jaGFpbl9sZW5ndGggKyAxLCAyICogaSArIDEpOwo+ICsJCQlnb3RvIGVycjsKPiAr CQl9Cj4gKwkJaWYgKGZlbmNlICE9IGZjLmNoYWluc1tpXSkgewo+ICsJCQlwcl9lcnIoIkluY29y cmVjdCBmZW5jZS5zZXFubzolbGxkIHJlcG9ydGVkIGJ5IGZpbmRfc2Vxbm8oJWQ6JWQpXG4iLAo+ ICsJCQkgICAgICAgZmVuY2UtPnNlcW5vLAo+ICsJCQkgICAgICAgZmMuY2hhaW5fbGVuZ3RoICsg MSwKPiArCQkJICAgICAgIDIgKiBpICsgMSk7Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCWdv dG8gZXJyOwo+ICsJCX0KPiArCj4gKwkJZG1hX2ZlbmNlX2dldChmZW5jZSk7Cj4gKwkJZXJyID0g ZG1hX2ZlbmNlX2NoYWluX2ZpbmRfc2Vxbm8oJmZlbmNlLCAyICogaSArIDIpOwo+ICsJCWRtYV9m ZW5jZV9wdXQoZmVuY2UpOwo+ICsJCWlmIChlcnIpIHsKPiArCQkJcHJfZXJyKCJFcnJvciByZXBv cnRlZCBmb3IgZmluZGluZyBzZWxmXG4iKTsKPiArCQkJZ290byBlcnI7Cj4gKwkJfQo+ICsJCWlm IChmZW5jZSAhPSBmYy5jaGFpbnNbaV0pIHsKPiArCQkJcHJfZXJyKCJJbmNvcnJlY3QgZmVuY2Ug cmVwb3J0ZWQgYnkgZmluZCBzZWxmXG4iKTsKPiArCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJZ290 byBlcnI7Cj4gKwkJfQo+ICsJfQo+ICsKPiArZXJyOgo+ICsJZmVuY2VfY2hhaW5zX2ZpbmkoJmZj KTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0cnVjdCBmaW5kX3JhY2Ugewo+ICsJc3Ry dWN0IGZlbmNlX2NoYWlucyBmYzsKPiArCWF0b21pY190IGNoaWxkcmVuOwo+ICt9Owo+ICsKPiAr c3RhdGljIGludCBfX2ZpbmRfcmFjZSh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBmaW5kX3Jh Y2UgKmRhdGEgPSBhcmc7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwl3aGlsZSAoIWt0aHJlYWRf c2hvdWxkX3N0b3AoKSkgewo+ICsJCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlID0gZG1hX2ZlbmNl X2dldChkYXRhLT5mYy50YWlsKTsKPiArCQlpbnQgc2Vxbm87Cj4gKwo+ICsJCXNlcW5vID0gcHJh bmRvbV91MzJfbWF4KGRhdGEtPmZjLmNoYWluX2xlbmd0aCkgKyAxOwo+ICsKPiArCQllcnIgPSBk bWFfZmVuY2VfY2hhaW5fZmluZF9zZXFubygmZmVuY2UsIHNlcW5vKTsKPiArCQlpZiAoZXJyKSB7 Cj4gKwkJCXByX2VycigiRmFpbGVkIHRvIGZpbmQgZmVuY2Ugc2Vxbm86JWRcbiIsCj4gKwkJCSAg ICAgICBzZXFubyk7Cj4gKwkJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsJCQlicmVhazsKPiAr CQl9Cj4gKwkJaWYgKCFmZW5jZSkKPiArCQkJZ290byBzaWduYWw7Cj4gKwo+ICsJCWVyciA9IGRt YV9mZW5jZV9jaGFpbl9maW5kX3NlcW5vKCZmZW5jZSwgc2Vxbm8pOwo+ICsJCWlmIChlcnIpIHsK PiArCQkJcHJfZXJyKCJSZXBvcnRlZCBhbiBpbnZhbGlkIGZlbmNlIGZvciBmaW5kLXNlbGY6JWRc biIsCj4gKwkJCSAgICAgICBzZXFubyk7Cj4gKwkJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsJ CQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmIChmZW5jZS0+c2Vxbm8gPCBzZXFubykgewo+ICsJ CQlwcl9lcnIoIlJlcG9ydGVkIGFuIGVhcmxpZXIgZmVuY2Uuc2Vxbm86JWxsZCBmb3Igc2Vxbm86 JWRcbiIsCj4gKwkJCSAgICAgICBmZW5jZS0+c2Vxbm8sIHNlcW5vKTsKPiArCQkJZXJyID0gLUVJ TlZBTDsKPiArCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiAr Cj4gKwkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gKwo+ICtzaWduYWw6Cj4gKwkJc2Vxbm8gPSBw cmFuZG9tX3UzMl9tYXgoZGF0YS0+ZmMuY2hhaW5fbGVuZ3RoIC0gMSk7Cj4gKwkJZG1hX2ZlbmNl X3NpZ25hbChkYXRhLT5mYy5mZW5jZXNbc2Vxbm9dKTsKPiArCQljb25kX3Jlc2NoZWQoKTsKPiAr CX0KPiArCj4gKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGF0YS0+Y2hpbGRyZW4pKQo+ICsJ CXdha2VfdXBfdmFyKCZkYXRhLT5jaGlsZHJlbik7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGZpbmRfcmFjZSh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBmaW5kX3Jh Y2UgZGF0YTsKPiArCWludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOwo+ICsJc3RydWN0IHRh c2tfc3RydWN0ICoqdGhyZWFkczsKPiArCXVuc2lnbmVkIGxvbmcgY291bnQ7Cj4gKwlpbnQgZXJy Owo+ICsJaW50IGk7Cj4gKwo+ICsJZXJyID0gZmVuY2VfY2hhaW5zX2luaXQoJmRhdGEuZmMsIDY0 IDw8IDEwLCBzZXFub19pbmMpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiAr CXRocmVhZHMgPSBrbWFsbG9jX2FycmF5KG5jcHVzLCBzaXplb2YoKnRocmVhZHMpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghdGhyZWFkcykgewo+ICsJCWVyciA9IC1FTk9NRU07Cj4gKwkJZ290byBl cnI7Cj4gKwl9Cj4gKwo+ICsJYXRvbWljX3NldCgmZGF0YS5jaGlsZHJlbiwgMCk7Cj4gKwlmb3Ig KGkgPSAwOyBpIDwgbmNwdXM7IGkrKykgewo+ICsJCXRocmVhZHNbaV0gPSBrdGhyZWFkX3J1bihf X2ZpbmRfcmFjZSwgJmRhdGEsICJkbWFidWYvJWQiLCBpKTsKPiArCQlpZiAoSVNfRVJSKHRocmVh ZHNbaV0pKSB7Cj4gKwkJCW5jcHVzID0gaTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWF0b21p Y19pbmMoJmRhdGEuY2hpbGRyZW4pOwo+ICsJCWdldF90YXNrX3N0cnVjdCh0aHJlYWRzW2ldKTsK PiArCX0KPiArCj4gKwl3YWl0X3Zhcl9ldmVudF90aW1lb3V0KCZkYXRhLmNoaWxkcmVuLAo+ICsJ CQkgICAgICAgIWF0b21pY19yZWFkKCZkYXRhLmNoaWxkcmVuKSwKPiArCQkJICAgICAgIDUgKiBI Wik7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG5jcHVzOyBpKyspIHsKPiArCQlpbnQgcmV0Owo+ ICsKPiArCQlyZXQgPSBrdGhyZWFkX3N0b3AodGhyZWFkc1tpXSk7Cj4gKwkJaWYgKHJldCAmJiAh ZXJyKQo+ICsJCQllcnIgPSByZXQ7Cj4gKwkJcHV0X3Rhc2tfc3RydWN0KHRocmVhZHNbaV0pOwo+ ICsJfQo+ICsJa2ZyZWUodGhyZWFkcyk7Cj4gKwo+ICsJY291bnQgPSAwOwo+ICsJZm9yIChpID0g MDsgaSA8IGRhdGEuZmMuY2hhaW5fbGVuZ3RoOyBpKyspCj4gKwkJaWYgKGRtYV9mZW5jZV9pc19z aWduYWxlZChkYXRhLmZjLmZlbmNlc1tpXSkpCj4gKwkJCWNvdW50Kys7Cj4gKwlwcl9pbmZvKCJD b21wbGV0ZWQgJWx1IGN5Y2xlc1xuIiwgY291bnQpOwo+ICsKPiArZXJyOgo+ICsJZmVuY2VfY2hh aW5zX2ZpbmkoJmRhdGEuZmMpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBzaWduYWxfZm9yd2FyZCh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBmZW5jZV9jaGFpbnMg ZmM7Cj4gKwlpbnQgZXJyOwo+ICsJaW50IGk7Cj4gKwo+ICsJZXJyID0gZmVuY2VfY2hhaW5zX2lu aXQoJmZjLCA2NCwgc2Vxbm9faW5jKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgZmMuY2hhaW5fbGVuZ3RoOyBpKyspIHsKPiArCQlkbWFfZmVu Y2Vfc2lnbmFsKGZjLmZlbmNlc1tpXSk7Cj4gKwo+ICsJCWlmICghZG1hX2ZlbmNlX2lzX3NpZ25h bGVkKGZjLmNoYWluc1tpXSkpIHsKPiArCQkJcHJfZXJyKCJjaGFpblslZF0gbm90IHNpZ25hbGVk IVxuIiwgaSk7Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJCX0KPiAr Cj4gKwkJaWYgKGkgKyAxIDwgZmMuY2hhaW5fbGVuZ3RoICYmCj4gKwkJICAgIGRtYV9mZW5jZV9p c19zaWduYWxlZChmYy5jaGFpbnNbaSArIDFdKSkgewo+ICsJCQlwcl9lcnIoImNoYWluWyVkXSBp cyBzaWduYWxlZCFcbiIsIGkpOwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQlnb3RvIGVycjsK PiArCQl9Cj4gKwl9Cj4gKwo+ICtlcnI6Cj4gKwlmZW5jZV9jaGFpbnNfZmluaSgmZmMpOwo+ICsJ cmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBzaWduYWxfYmFja3dhcmQodm9pZCAq YXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZmVuY2VfY2hhaW5zIGZjOwo+ICsJaW50IGVycjsKPiArCWlu dCBpOwo+ICsKPiArCWVyciA9IGZlbmNlX2NoYWluc19pbml0KCZmYywgNjQsIHNlcW5vX2luYyk7 Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJZm9yIChpID0gZmMuY2hhaW5f bGVuZ3RoOyBpLS07ICkgewo+ICsJCWRtYV9mZW5jZV9zaWduYWwoZmMuZmVuY2VzW2ldKTsKPiAr Cj4gKwkJaWYgKGkgPiAwICYmIGRtYV9mZW5jZV9pc19zaWduYWxlZChmYy5jaGFpbnNbaV0pKSB7 Cj4gKwkJCXByX2VycigiY2hhaW5bJWRdIGlzIHNpZ25hbGVkIVxuIiwgaSk7Cj4gKwkJCWVyciA9 IC1FSU5WQUw7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJCX0KPiArCX0KPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgZmMuY2hhaW5fbGVuZ3RoOyBpKyspIHsKPiArCQlpZiAoIWRtYV9mZW5jZV9pc19zaWdu YWxlZChmYy5jaGFpbnNbaV0pKSB7Cj4gKwkJCXByX2VycigiY2hhaW5bJWRdIHdhcyBub3Qgc2ln bmFsZWQhXG4iLCBpKTsKPiArCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJZ290byBlcnI7Cj4gKwkJ fQo+ICsJfQo+ICsKPiArZXJyOgo+ICsJZmVuY2VfY2hhaW5zX2ZpbmkoJmZjKTsKPiArCXJldHVy biBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX193YWl0X2ZlbmNlX2NoYWlucyh2b2lkICph cmcpCj4gK3sKPiArCXN0cnVjdCBmZW5jZV9jaGFpbnMgKmZjID0gYXJnOwo+ICsKPiArCWlmIChk bWFfZmVuY2Vfd2FpdChmYy0+dGFpbCwgZmFsc2UpKQo+ICsJCXJldHVybiAtRUlPOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHdhaXRfZm9yd2FyZCh2b2lkICphcmcp Cj4gK3sKPiArCXN0cnVjdCBmZW5jZV9jaGFpbnMgZmM7Cj4gKwlzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnRzazsKPiArCWludCBlcnI7Cj4gKwlpbnQgaTsKPiArCj4gKwllcnIgPSBmZW5jZV9jaGFpbnNf aW5pdCgmZmMsIDY0IDw8IDEwLCBzZXFub19pbmMpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4g ZXJyOwo+ICsKPiArCXRzayA9IGt0aHJlYWRfcnVuKF9fd2FpdF9mZW5jZV9jaGFpbnMsICZmYywg ImRtYWJ1Zi93YWl0Iik7Cj4gKwlpZiAoSVNfRVJSKHRzaykpIHsKPiArCQllcnIgPSBQVFJfRVJS KHRzayk7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwlnZXRfdGFza19zdHJ1Y3QodHNrKTsKPiAr CXlpZWxkX3RvKHRzaywgdHJ1ZSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGZjLmNoYWluX2xl bmd0aDsgaSsrKQo+ICsJCWRtYV9mZW5jZV9zaWduYWwoZmMuZmVuY2VzW2ldKTsKPiArCj4gKwll cnIgPSBrdGhyZWFkX3N0b3AodHNrKTsKPiArCXB1dF90YXNrX3N0cnVjdCh0c2spOwo+ICsKPiAr ZXJyOgo+ICsJZmVuY2VfY2hhaW5zX2ZpbmkoJmZjKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgd2FpdF9iYWNrd2FyZCh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBm ZW5jZV9jaGFpbnMgZmM7Cj4gKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKPiArCWludCBlcnI7 Cj4gKwlpbnQgaTsKPiArCj4gKwllcnIgPSBmZW5jZV9jaGFpbnNfaW5pdCgmZmMsIDY0IDw8IDEw LCBzZXFub19pbmMpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXRzayA9 IGt0aHJlYWRfcnVuKF9fd2FpdF9mZW5jZV9jaGFpbnMsICZmYywgImRtYWJ1Zi93YWl0Iik7Cj4g KwlpZiAoSVNfRVJSKHRzaykpIHsKPiArCQllcnIgPSBQVFJfRVJSKHRzayk7Cj4gKwkJZ290byBl cnI7Cj4gKwl9Cj4gKwlnZXRfdGFza19zdHJ1Y3QodHNrKTsKPiArCXlpZWxkX3RvKHRzaywgdHJ1 ZSk7Cj4gKwo+ICsJZm9yIChpID0gZmMuY2hhaW5fbGVuZ3RoOyBpLS07ICkKPiArCQlkbWFfZmVu Y2Vfc2lnbmFsKGZjLmZlbmNlc1tpXSk7Cj4gKwo+ICsJZXJyID0ga3RocmVhZF9zdG9wKHRzayk7 Cj4gKwlwdXRfdGFza19zdHJ1Y3QodHNrKTsKPiArCj4gK2VycjoKPiArCWZlbmNlX2NoYWluc19m aW5pKCZmYyk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCByYW5kb21p c2VfZmVuY2VzKHN0cnVjdCBmZW5jZV9jaGFpbnMgKmZjKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQg Y291bnQgPSBmYy0+Y2hhaW5fbGVuZ3RoOwo+ICsKPiArCS8qIEZpc2hlci1ZYXRlcyBzaHVmZmxl IGNvdXJ0ZXN5IG9mIEtudXRoICovCj4gKwl3aGlsZSAoLS1jb3VudCkgewo+ICsJCXVuc2lnbmVk IGludCBzd3A7Cj4gKwo+ICsJCXN3cCA9IHByYW5kb21fdTMyX21heChjb3VudCArIDEpOwo+ICsJ CWlmIChzd3AgPT0gY291bnQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlzd2FwKGZjLT5mZW5j ZXNbY291bnRdLCBmYy0+ZmVuY2VzW3N3cF0pOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHdhaXRfcmFuZG9tKHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGZlbmNlX2NoYWlucyBmYzsK PiArCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwo+ICsJaW50IGVycjsKPiArCWludCBpOwo+ICsK PiArCWVyciA9IGZlbmNlX2NoYWluc19pbml0KCZmYywgNjQgPDwgMTAsIHNlcW5vX2luYyk7Cj4g KwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJcmFuZG9taXNlX2ZlbmNlcygmZmMp Owo+ICsKPiArCXRzayA9IGt0aHJlYWRfcnVuKF9fd2FpdF9mZW5jZV9jaGFpbnMsICZmYywgImRt YWJ1Zi93YWl0Iik7Cj4gKwlpZiAoSVNfRVJSKHRzaykpIHsKPiArCQllcnIgPSBQVFJfRVJSKHRz ayk7Cj4gKwkJZ290byBlcnI7Cj4gKwl9Cj4gKwlnZXRfdGFza19zdHJ1Y3QodHNrKTsKPiArCXlp ZWxkX3RvKHRzaywgdHJ1ZSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGZjLmNoYWluX2xlbmd0 aDsgaSsrKQo+ICsJCWRtYV9mZW5jZV9zaWduYWwoZmMuZmVuY2VzW2ldKTsKPiArCj4gKwllcnIg PSBrdGhyZWFkX3N0b3AodHNrKTsKPiArCXB1dF90YXNrX3N0cnVjdCh0c2spOwo+ICsKPiArZXJy Ogo+ICsJZmVuY2VfY2hhaW5zX2ZpbmkoJmZjKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4g K2ludCBkbWFfZmVuY2VfY2hhaW4odm9pZCkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBz dWJ0ZXN0IHRlc3RzW10gPSB7Cj4gKwkJU1VCVEVTVChzYW5pdHljaGVjayksCj4gKwkJU1VCVEVT VChmaW5kX3NlcW5vKSwKPiArCQlTVUJURVNUKGZpbmRfc2lnbmFsZWQpLAo+ICsJCVNVQlRFU1Qo ZmluZF9vdXRfb2Zfb3JkZXIpLAo+ICsJCVNVQlRFU1QoZmluZF9nYXApLAo+ICsJCVNVQlRFU1Qo ZmluZF9yYWNlKSwKPiArCQlTVUJURVNUKHNpZ25hbF9mb3J3YXJkKSwKPiArCQlTVUJURVNUKHNp Z25hbF9iYWNrd2FyZCksCj4gKwkJU1VCVEVTVCh3YWl0X2ZvcndhcmQpLAo+ICsJCVNVQlRFU1Qo d2FpdF9iYWNrd2FyZCksCj4gKwkJU1VCVEVTVCh3YWl0X3JhbmRvbSksCj4gKwl9Owo+ICsJaW50 IHJldDsKPiArCj4gKwlwcl9pbmZvKCJzaXplb2YoZG1hX2ZlbmNlX2NoYWluKT0lenVcbiIsCj4g KwkJc2l6ZW9mKHN0cnVjdCBkbWFfZmVuY2VfY2hhaW4pKTsKPiArCj4gKwlzbGFiX2ZlbmNlcyA9 IEtNRU1fQ0FDSEUobW9ja19mZW5jZSwKPiArCQkJCSBTTEFCX1RZUEVTQUZFX0JZX1JDVSB8Cj4g KwkJCQkgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKPiArCWlmICghc2xhYl9mZW5jZXMpCj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmV0ID0gc3VidGVzdHModGVzdHMsIE5VTEwpOwo+ICsKPiAr CWttZW1fY2FjaGVfZGVzdHJveShzbGFiX2ZlbmNlcyk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Ckkg dGhpbmsgaXQgY292ZXJzIGFsbCBhcGkgcmVxdWlyZWQgZm9yIGZlbmNlLWNoYWluLgpSZXZpZXdl ZC1ieTogVmVua2F0YSBTYW5kZWVwIERoYW5hbGFrb3RhIDx2ZW5rYXRhLnMuZGhhbmFsYWtvdGFA aW50ZWwuY29tPgo+IC0tIAo+IDIuMjAuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK