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=-1.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,PDS_BTC_ID,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 CBA13FC6194 for ; Thu, 7 Nov 2019 02:08:22 +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 A673621D6C for ; Thu, 7 Nov 2019 02:08:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A673621D6C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 477696E348; Thu, 7 Nov 2019 02:08:22 +0000 (UTC) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) by gabe.freedesktop.org (Postfix) with ESMTPS id 901386E348 for ; Thu, 7 Nov 2019 02:08:21 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-251-vYaKpkspMBqRrJUS4jgCJw-1; Wed, 06 Nov 2019 21:08:16 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8F5831005502; Thu, 7 Nov 2019 02:08:13 +0000 (UTC) Received: from redhat.com (ovpn-125-216.rdu2.redhat.com [10.10.125.216]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 04F095C299; Thu, 7 Nov 2019 02:08:09 +0000 (UTC) Date: Wed, 6 Nov 2019 21:08:07 -0500 From: Jerome Glisse To: John Hubbard Subject: Re: [PATCH v2 02/15] mm/mmu_notifier: add an interval tree notifier Message-ID: <20191107020807.GA747656@redhat.com> References: <20191028201032.6352-1-jgg@ziepe.ca> <20191028201032.6352-3-jgg@ziepe.ca> <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> MIME-Version: 1.0 In-Reply-To: <35c2b322-004e-0e18-87e4-1920dc71bfd5@nvidia.com> User-Agent: Mutt/1.12.1 (2019-06-15) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: vYaKpkspMBqRrJUS4jgCJw-1 X-Mimecast-Spam-Score: 0 Content-Disposition: inline X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1573092500; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3pEC4ofbH9GmBg4Hvo6IdX7Sd6lzjmsN2FQ75gU3Q+g=; b=a9csM+XnEOWcmFZyPqDkd6JsfS4P3nA5dQEcCTCMlId/XJi0a93YJEVJpnND3vWT/NTij4 m4VUWxr/AFL2X+1jjItewD6THtHvzX74gH4ZoL/R7r+SkOH8wiq341xIiDnyUxvHMcAUG1 DX1wl0kZPZ+P789j7NpEZrh1nDgQ6ig= X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Michal Hocko , linux-mm@kvack.org, Andrea Arcangeli , David Zhou , Stefano Stabellini , Oleksandr Andrushchenko , linux-rdma@vger.kernel.org, amd-gfx@lists.freedesktop.org, Christoph Hellwig , Jason Gunthorpe , Jason Gunthorpe , Ben Skeggs , xen-devel@lists.xenproject.org, Ralph Campbell , Boris Ostrovsky , Petr Cvek , Juergen Gross , Mike Marciniszyn , Dennis Dalessandro , Christian =?iso-8859-1?Q?K=F6nig?= , Alex Deucher , Felix.Kuehling@amd.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Message-ID: <20191107020807.HqGKVnjFCQOvlVtCI9gpH-3yq_RkBv4IVmmnyr7jaAs@z> T24gV2VkLCBOb3YgMDYsIDIwMTkgYXQgMDQ6MjM6MjFQTSAtMDgwMCwgSm9obiBIdWJiYXJkIHdy b3RlOgo+IE9uIDEwLzI4LzE5IDE6MTAgUE0sIEphc29uIEd1bnRob3JwZSB3cm90ZToKClsuLi5d Cgo+ID4gIC8qKgo+ID4gICAqIGVudW0gbW11X25vdGlmaWVyX2V2ZW50IC0gcmVhc29uIGZvciB0 aGUgbW11IG5vdGlmaWVyIGNhbGxiYWNrCj4gPiBAQCAtMzIsNiArMzQsOSBAQCBzdHJ1Y3QgbW11 X25vdGlmaWVyX3JhbmdlOwo+ID4gICAqIGFjY2VzcyBmbGFncykuIFVzZXIgc2hvdWxkIHNvZnQg ZGlydHkgdGhlIHBhZ2UgaW4gdGhlIGVuZCBjYWxsYmFjayB0byBtYWtlCj4gPiAgICogc3VyZSB0 aGF0IGFueW9uZSByZWx5aW5nIG9uIHNvZnQgZGlydHluZXNzIGNhdGNoIHBhZ2VzIHRoYXQgbWln aHQgYmUgd3JpdHRlbgo+ID4gICAqIHRocm91Z2ggbm9uIENQVSBtYXBwaW5ncy4KPiA+ICsgKgo+ ID4gKyAqIEBNTVVfTk9USUZZX1JFTEVBU0U6IHVzZWQgZHVyaW5nIG1tdV9yYW5nZV9ub3RpZmll ciBpbnZhbGlkYXRlIHRvIHNpZ25hbCB0aGF0Cj4gPiArICogdGhlIG1tIHJlZmNvdW50IGlzIHpl cm8gYW5kIHRoZSByYW5nZSBpcyBubyBsb25nZXIgYWNjZXNzaWJsZS4KPiA+ICAgKi8KPiA+ICBl bnVtIG1tdV9ub3RpZmllcl9ldmVudCB7Cj4gPiAgCU1NVV9OT1RJRllfVU5NQVAgPSAwLAo+ID4g QEAgLTM5LDYgKzQ0LDcgQEAgZW51bSBtbXVfbm90aWZpZXJfZXZlbnQgewo+ID4gIAlNTVVfTk9U SUZZX1BST1RFQ1RJT05fVk1BLAo+ID4gIAlNTVVfTk9USUZZX1BST1RFQ1RJT05fUEFHRSwKPiA+ ICAJTU1VX05PVElGWV9TT0ZUX0RJUlRZLAo+ID4gKwlNTVVfTk9USUZZX1JFTEVBU0UsCj4gPiAg fTsKPiAKPiAKPiBPSywgbGV0IHRoZSBuYW1pbmcgZGViYXRlcyBiZWdpbiEgaGEuIEFueXdheSwg YWZ0ZXIgY2FyZWZ1bCBzdHVkeSBvZiB0aGUgb3ZlcmFsbAo+IHBhdGNoLCBhbmQgc29tZSBicm93 c2luZyBvZiB0aGUgbGFyZ2VyIHBhdGNoc2V0LCBpdCdzIGNsZWFyIHRoYXQ6Cj4gCj4gKiBUaGUg bmV3ICJNTVUgcmFuZ2Ugbm90aWZpZXIiIHRoYXQgeW91J3ZlIGNyZWF0ZWQgaXMsIGFwcHJveGlt YXRlbHksIGEgbmV3Cj4gb2JqZWN0LiBJdCB1c2VzIGNsYXNzaWMgbW11IG5vdGlmaWVycyBpbnNp ZGUsIGFzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kCj4gaXQgZG9lcyAqc2ltaWxhciog dGhpbmdzIChub3RpZmljYXRpb25zKSBhcyBtbW4ncy4gQnV0IGl0J3MgY2VydGFpbmx5IG5vdCB0 aGUgc2FtZQo+IGFzIG1tbidzLCBhcyBzaG93biBsYXRlciB3aGVuIHlvdSBzYXkgdGhlIG5lZWQg dG8gYW4gZW50aXJlbHkgbmV3IG9wcyBzdHJ1Y3QsIGFuZCAKPiBkYXRhIHN0cnVjdCB0b28uCj4g Cj4gVGhlcmVmb3JlLCB5b3UgbmVlZCBhIHNlcGFyYXRlIGV2ZW50cyBlbnVtIGFzIHdlbGwuIFRo aXMgaXMgaW1wb3J0YW50LiBNTU4ncwo+IHdvbid0IGJlIGlzc3VpbmcgTU1OX05PVElGWV9SRUxF QVNFIGV2ZW50cywgbm9yIHdpbGwgTU5SJ3MgYmUgaXNzdWluZyB0aGUgZmlyc3QKPiBmb3VyIHBy ZXhpc3RpbmcgTU1VX05PVElGWV8qIGl0ZW1zLiBTbyBpdCB3b3VsZCBiZSBhIGRlc2lnbiBtaXN0 YWtlIHRvIGdsb20gdGhlbQo+IHRvZ2V0aGVyLCB1bmxlc3MgeW91IHVsdGltYXRlbHkgZGVjaWRl ZCB0byBtZXJnZSB0aGVzZSBNTU4gYW5kIE1OUiBvYmplY3RzICh3aGljaAo+IEkgZG9uJ3QgcmVh bGx5IHNlZSBhbnkgaW50ZW50aW9uIG9mLCBhbmQgdGhhdCdzIGZpbmUpLgo+IAo+IFNvIHRoaXMg c2hvdWxkIHJlYWQ6Cj4gCj4gZW51bSBtbXVfcmFuZ2Vfbm90aWZpZXJfZXZlbnQgewo+IAlNTVVf Tk9USUZZX1JFTEVBU0UsCj4gfTsKPiAKPiAuLi5hc3N1bWluZyB0aGF0IHdlIHN0YXkgd2l0aCAi bW11X3JhbmdlX25vdGlmaWVyIiBhcyBhIGNvcmUgbmFtZSBmb3IgdGhpcyAKPiB3aG9sZSB0aGlu Zy4KPiAKPiBBbHNvLCBpdCBpcyBiZXN0IG1vdmVkIGRvd24gdG8gYmUgbmV4dCB0byB0aGUgbmV3 IE1OUiBzdHJ1Y3RzLCBzbyB0aGF0IGFsbCB0aGUKPiBNTlIgc3R1ZmYgaXMgaW4gb25lIGdyb3Vw Lgo+IAo+IEV4dHJhIGNyZWRpdDogSU1ITywgdGhpcyBjbGVhcmx5IGRlc2VydmVzIHRvIGFsbCBi ZSBpbiBhIG5ldyBtbXVfcmFuZ2Vfbm90aWZpZXIuaAo+IGhlYWRlciBmaWxlLCBidXQgSSBrbm93 IHRoYXQncyBleHRyYSB3b3JrLiBNYXliZSBsYXRlciBhcyBhIGZvbGxvdy11cCBwYXRjaCwKPiBp ZiBhbnlvbmUgaGFzIHRoZSB0aW1lLgoKVGhlIHJhbmdlIG5vdGlmaWVyIHNob3VsZCBnZXQgdGhl IGV2ZW50IHRvbywgaXQgd291bGQgYmUgYSB3YXN0ZSwgaSB0aGluayBpdCBpcwphbiBvdmVyc2ln aHQgaGVyZS4gVGhlIHJlbGVhc2UgZXZlbnQgaXMgZmluZSBzbyBOQUsgdG8geW91IHNlcGFyYXRl IGV2ZW50LiBFdmVudAppcyByZWFsbHkgYW4gaGVscGVyIGZvciBub3RpZmllciBpIGhhZCBhIHNl dCBvZiBwYXRjaCBmb3Igbm91dmVhdSB0byBsZXZlcmFnZQp0aGlzIGkgbmVlZCB0byByZXN1Y2l0 ZSB0aGVtLiBTbyBubyBuZWVkIHRvIHNwbGl0IHRoaW5nLCBpIHdvdWxkIGp1c3QgZm9yd2FyZAp0 aGUgZXZlbnQgaWUgYWRkIGV2ZW50IHRvIG1tdV9yYW5nZV9ub3RpZmllcl9vcHMuaW52YWxpZGF0 ZSgpIGkgZmFpbGVkIHRvIGNhdGNoCnRoYXQgaW4gdjEgc29ycnkuCgoKWy4uLl0KCj4gPiArc3Ry dWN0IG1tdV9yYW5nZV9ub3RpZmllcl9vcHMgewo+ID4gKwlib29sICgqaW52YWxpZGF0ZSkoc3Ry dWN0IG1tdV9yYW5nZV9ub3RpZmllciAqbXJuLAo+ID4gKwkJCSAgIGNvbnN0IHN0cnVjdCBtbXVf bm90aWZpZXJfcmFuZ2UgKnJhbmdlLAo+ID4gKwkJCSAgIHVuc2lnbmVkIGxvbmcgY3VyX3NlcSk7 Cj4gPiArfTsKPiA+ICsKPiA+ICtzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVyIHsKPiA+ICsJc3Ry dWN0IGludGVydmFsX3RyZWVfbm9kZSBpbnRlcnZhbF90cmVlOwo+ID4gKwljb25zdCBzdHJ1Y3Qg bW11X3JhbmdlX25vdGlmaWVyX29wcyAqb3BzOwo+ID4gKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBkZWZl cnJlZF9pdGVtOwo+ID4gKwl1bnNpZ25lZCBsb25nIGludmFsaWRhdGVfc2VxOwo+ID4gKwlzdHJ1 Y3QgbW1fc3RydWN0ICptbTsKPiA+ICt9Owo+ID4gKwo+IAo+IEFnYWluLCBub3cgd2UgaGF2ZSB0 aGUgbmV3IHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIsIGFuZCB0aGUgb2xkIAo+IHN0cnVjdCBt bXVfbm90aWZpZXJfcmFuZ2UsIGFuZCBpdCdzIG5vdCBnb29kLgo+IAo+IElkZWFzOgo+IAo+IGEp IExpdmUgd2l0aCBpdC4KPiAKPiBiKSAoRGlzY2FyZGVkLCB0b28gbWFueSBjYWxsZXJzKTogcmVu YW1lIG9sZCBvbmUuIE5vcGUuCj4gCj4gYykgUmVuYW1lIG5ldyBvbmUuIElkZWFzOgo+IAo+ICAg ICBzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyCj4gICAgIHN0cnVjdCBtbXVfcmFuZ2VfaW50 ZXJzZWN0aW9uCj4gICAgIC4uLm90aGVyIGlkZWFzPwoKSSB2b3RlIGZvciBpbnRlcnZhbF9ub3Rp ZmllciB3ZSBkbyB3YW50IG5vdGlmaWVyIGluIG5hbWUgYnV0IGkgYW0gYWxzbwpmaW5lIHdpdGgg Y3VycmVudCBuYW1lLgoKWy4uLl0KCj4gPiArICoKPiA+ICsgKiBOb3RlIHRoYXQgdGhlIGNvcmUg bW0gY3JlYXRlcyBuZXN0ZWQgaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgpL2VuZCgpIHJlZ2lvbnMK PiA+ICsgKiB3aXRoaW4gdGhlIHNhbWUgdGhyZWFkLCBhbmQgcnVucyBpbnZhbGlkYXRlX3Jhbmdl X3N0YXJ0KCkvZW5kKCkgaW4gcGFyYWxsZWwKPiA+ICsgKiBvbiBtdWx0aXBsZSBDUFVzLiBUaGlz IGlzIGRlc2lnbmVkIHRvIG5vdCByZWR1Y2UgY29uY3VycmVuY3kgb3IgYmxvY2sKPiA+ICsgKiBw cm9ncmVzcyBvbiB0aGUgbW0gc2lkZS4KPiA+ICsgKgo+ID4gKyAqIEFzIGEgc2Vjb25kYXJ5IGZ1 bmN0aW9uLCBob2xkaW5nIHRoZSBmdWxsIHdyaXRlIHNpZGUgYWxzbyBzZXJ2ZXMgdG8gcHJldmVu dAo+ID4gKyAqIHdyaXRlcnMgZm9yIHRoZSBpdHJlZSwgdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24g dG8gYXZvaWQgZXh0cmEgbG9ja2luZwo+ID4gKyAqIGR1cmluZyBpbnZhbGlkYXRlX3JhbmdlX3N0 YXJ0L2VuZCBub3RpZmllcnMuCj4gPiArICoKPiA+ICsgKiBUaGUgd3JpdGUgc2lkZSBoYXMgdHdv IHN0YXRlcywgZnVsbHkgZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZhbGlkYXRl X3JhbmdlcyAhPSAwCj4gPiArICogIC0gbW5uLT5pbnZhbGlkYXRlX3NlcSAmIDEgPT0gVHJ1ZQo+ ID4gKyAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0cnVjdCBpcyBiZWluZyBpbnZhbGlkYXRl ZAo+ID4gKyAqICAtIHRoZSBpdHJlZSBpcyBub3QgYWxsb3dlZCB0byBjaGFuZ2UKPiA+ICsgKgo+ ID4gKyAqIEFuZCBwYXJ0aWFsbHkgZXhjbHVkZWQ6Cj4gPiArICogIC0gbW0tPmFjdGl2ZV9pbnZh bGlkYXRlX3JhbmdlcyAhPSAwCj4gCj4gSSBhc3N1bWUgdGhpcyBpbXBsaWVzIG1ubi0+aW52YWxp ZGF0ZV9zZXEgJiAxID09IEZhbHNlIGluIHRoaXMgY2FzZT8gSWYgc28sCj4gbGV0J3Mgc2F5IHNv LiBJJ20gcHJvYmFibHkgZ2V0dGluZyB0aGF0IHdyb25nLCB0b28uCgpZZXMgKG1ubi0+aW52YWxp ZGF0ZV9zZXEgJiAxKSA9PSAwCgo+IAo+ID4gKyAqICAtIHNvbWUgcmFuZ2Ugb24gdGhlIG1tX3N0 cnVjdCBpcyBiZWluZyBpbnZhbGlkYXRlZAo+ID4gKyAqICAtIHRoZSBpdHJlZSBpcyBhbGxvd2Vk IHRvIGNoYW5nZQo+ID4gKyAqCj4gPiArICogVGhlIGxhdGVyIHN0YXRlIGF2b2lkcyBzb21lIGV4 cGVuc2l2ZSB3b3JrIG9uIGludl9lbmQgaW4gdGhlIGNvbW1vbiBjYXNlIG9mCj4gPiArICogbm8g bXJuIG1vbml0b3JpbmcgdGhlIFZBLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBib29sIG1uX2l0cmVl X2lzX2ludmFsaWRhdGluZyhzdHJ1Y3QgbW11X25vdGlmaWVyX21tICptbW5fbW0pCj4gPiArewo+ ID4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtbW5fbW0tPmxvY2spOwo+ID4gKwlyZXR1cm4gbW1u X21tLT5pbnZhbGlkYXRlX3NlcSAmIDE7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3Qg bW11X3JhbmdlX25vdGlmaWVyICoKPiA+ICttbl9pdHJlZV9pbnZfc3RhcnRfcmFuZ2Uoc3RydWN0 IG1tdV9ub3RpZmllcl9tbSAqbW1uX21tLAo+ID4gKwkJCSBjb25zdCBzdHJ1Y3QgbW11X25vdGlm aWVyX3JhbmdlICpyYW5nZSwKPiA+ICsJCQkgdW5zaWduZWQgbG9uZyAqc2VxKQo+ID4gK3sKPiA+ ICsJc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSAqbm9kZTsKPiA+ICsJc3RydWN0IG1tdV9yYW5n ZV9ub3RpZmllciAqcmVzID0gTlVMTDsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrKCZtbW5fbW0tPmxv Y2spOwo+ID4gKwltbW5fbW0tPmFjdGl2ZV9pbnZhbGlkYXRlX3JhbmdlcysrOwo+ID4gKwlub2Rl ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KCZtbW5fbW0tPml0cmVlLCByYW5nZS0+c3RhcnQs Cj4gPiArCQkJCQlyYW5nZS0+ZW5kIC0gMSk7Cj4gPiArCWlmIChub2RlKSB7Cj4gPiArCQltbW5f bW0tPmludmFsaWRhdGVfc2VxIHw9IDE7Cj4gCj4gCj4gT0ssIHRoaXMgZWl0aGVyIG5lZWRzIG1v cmUgZG9jdW1lbnRhdGlvbiBhbmQgYXNzZXJ0aW9ucywgb3IgYSBkaWZmZXJlbnQKPiBhcHByb2Fj aC4gQmVjYXVzZSBJIHNlZSBhZGRpdGlvbiwgc3VidHJhY3Rpb24sIEFORCwgT1IgYW5kIGJvb2xl YW5zCj4gYWxsIGJlaW5nIGFwcGxpZWQgdG8gdGhpcyBmaWVsZCwgYW5kIGl0J3MgZGFybiBuZWFy IGhvcGVsZXNzIHRvIGZpZ3VyZQo+IG91dCB3aGV0aGVyIG9yIG5vdCBpdCByZWFsbHkgaXMgZXZl biBvciBvZGQgYXQgdGhlIHJpZ2h0IHRpbWVzLgo+IAo+IERpZmZlcmVudCBhcHByb2FjaDogd2h5 IG5vdCBqdXN0IGFkZCBhIG1tbl9tbS0+aXNfaW52YWxpZGF0aW5nIAo+IG1lbWJlciB2YXJpYWJs ZT8gSXQncyBub3QgbGlrZSB5b3UncmUgc2hvcnQgb2Ygc3BhY2UgaW4gdGhhdCBzdHJ1Y3QuCgpU aGUgaW52YWxpZGF0ZV9zZXEgc2NoZW1lIGxvb2tzIGZpbmUgdG8gbWUsIG1heWJlIGl0IGNhbiB1 c2UgbW9yZSBjb21tZW50cy4KCgo+IAo+IAo+ID4gKwkJcmVzID0gY29udGFpbmVyX29mKG5vZGUs IHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIsCj4gPiArCQkJCSAgIGludGVydmFsX3RyZWUpOwo+ ID4gKwl9Cj4gPiArCj4gPiArCSpzZXEgPSBtbW5fbW0tPmludmFsaWRhdGVfc2VxOwo+ID4gKwlz cGluX3VubG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJcmV0dXJuIHJlczsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKgo+ID4gK21uX2l0cmVlX2lu dl9uZXh0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKPiA+ICsJCSAgY29uc3Qgc3Ry dWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZXJ2 YWxfdHJlZV9ub2RlICpub2RlOwo+ID4gKwo+ID4gKwlub2RlID0gaW50ZXJ2YWxfdHJlZV9pdGVy X25leHQoJm1ybi0+aW50ZXJ2YWxfdHJlZSwgcmFuZ2UtPnN0YXJ0LAo+ID4gKwkJCQkgICAgICAg cmFuZ2UtPmVuZCAtIDEpOwo+ID4gKwlpZiAoIW5vZGUpCj4gPiArCQlyZXR1cm4gTlVMTDsKPiA+ ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgbW11X3JhbmdlX25vdGlmaWVyLCBp bnRlcnZhbF90cmVlKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbW5faXRyZWVfaW52 X2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX21tICptbW5fbW0pCj4gPiArewo+ID4gKwlzdHJ1Y3Qg bW11X3JhbmdlX25vdGlmaWVyICptcm47Cj4gPiArCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0Owo+ ID4gKwlib29sIG5lZWRfd2FrZSA9IGZhbHNlOwo+ID4gKwo+ID4gKwlzcGluX2xvY2soJm1tbl9t bS0+bG9jayk7Cj4gPiArCWlmICgtLW1tbl9tbS0+YWN0aXZlX2ludmFsaWRhdGVfcmFuZ2VzIHx8 Cj4gPiArCSAgICAhbW5faXRyZWVfaXNfaW52YWxpZGF0aW5nKG1tbl9tbSkpIHsKPiA+ICsJCXNw aW5fdW5sb2NrKCZtbW5fbW0tPmxvY2spOwo+ID4gKwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4g PiArCW1tbl9tbS0+aW52YWxpZGF0ZV9zZXErKzsKPiAKPiBJcyB0aGlzIHRoZSByaWdodCBwbGFj ZSBmb3IgYW4gYXNzZXJ0aW9uIHRoYXQgdGhpcyBpcyBub3cgYW4gZXZlbiB2YWx1ZT8KClllcyBh dCB0aGF0IHBvaW50IGl0IHNob3VsZCBiZSBldmVuIGllIG1tbl9tbS0+YWN0aXZlX2ludmFsaWRh dGVfcmFuZ2VzID09IDAKYW5kIHdlIGFyZSBob2xkaW5nIHRoZSBsb2NrIHRodXMgbm90aGluZyBj YW4gc2V0IHRoZSBsb3dlciBiaXQgb2YgaW52YWxpZGF0ZV9zZXEKYW5kICsrIHNob3VsZCBsZWFk IHRvIGV2ZW4gbnVtYmVyLgoKPiAKPiA+ICsJbmVlZF93YWtlID0gdHJ1ZTsKPiA+ICsKPiA+ICsJ LyoKPiA+ICsJICogVGhlIGludl9lbmQgaW5jb3Jwb3JhdGVzIGEgZGVmZXJyZWQgbWVjaGFuaXNt IGxpa2UKPiA+ICsJICogcnRubF9sb2NrKCkuIEFkZHMgYW5kIHJlbW92ZXMgYXJlIHF1ZXVlZCB1 bnRpbCB0aGUgZmluYWwgaW52X2VuZAo+IAo+IExldCBtZSBwb2ludCBvdXQgdGhhdCBydG5sX2xv Y2soKSBpdHNlbGYgaXMgYSBvbmUtbGluZXIgdGhhdCBjYWxscyBtdXRleF9sb2NrKCkuCj4gQnV0 IEkgc3VwcG9zZSBpZiBvbmUgc3R1ZGllcyB0aGF0IGZpbGUgY2xvc2VseSB0aGVyZSBpcyBtb3Jl LiA6KQoKSSB0aGluayBpIGNvbW1lbnRlZCBpbiB2MSBhYm91dCBydG5sX2xvY2soKSBiZWluZyBz b21ldGhpbmcgbmV0d29yayBwZW9wbGUgb25seQptaWdodCBiZSBmYW1pbGlhciwgaSB0aGluayBp IHNhdyBpdCBkb2N1bWVudGVkIHNvbWV3aGVyZSwgbWF5YmUgYSBsd24gYXJ0aWNsZS4KQnV0IGlm IHlvdSBhcmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIGl0IGlzIGEgdGhpbmsgd2VsbCB1bmRlcnN0 b29kIC4uLiBmb3IgYW55CnJlYXNvbmFibGUgbmV0d29yayBzY2hvbGFyIDspCgo+IC4uLgo+IAo+ ID4gK3Vuc2lnbmVkIGxvbmcgbW11X3JhbmdlX3JlYWRfYmVnaW4oc3RydWN0IG1tdV9yYW5nZV9u b3RpZmllciAqbXJuKQo+ID4gK3sKPiA+ICsJc3RydWN0IG1tdV9ub3RpZmllcl9tbSAqbW1uX21t ID0gbXJuLT5tbS0+bW11X25vdGlmaWVyX21tOwo+ID4gKwl1bnNpZ25lZCBsb25nIHNlcTsKPiA+ ICsJYm9vbCBpc19pbnZhbGlkYXRpbmc7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIElmIHRoZSBt cm4gaGFzIGEgZGlmZmVyZW50IHNlcSB2YWx1ZSB1bmRlciB0aGUgdXNlcl9sb2NrIHRoYW4gd2UK PiA+ICsJICogc3RhcnRlZCB3aXRoIHRoZW4gaXQgaGFzIGNvbGxpZGVkLgo+ID4gKwkgKgo+ID4g KwkgKiBJZiB0aGUgbXJuIGN1cnJlbnRseSBoYXMgdGhlIHNhbWUgc2VxIHZhbHVlIGFzIHRoZSBt bW5fbW0gc2VxLCB0aGVuCj4gPiArCSAqIGl0IGlzIGN1cnJlbnRseSBiZXR3ZWVuIGludmFsaWRh dGVfc3RhcnQvZW5kIGFuZCBpcyBjb2xsaWRpbmcuCj4gPiArCSAqCj4gPiArCSAqIFRoZSBsb2Nr aW5nIGxvb2tzIGJyb2FkbHkgbGlrZSB0aGlzOgo+ID4gKwkgKiAgIG1uX3RyZWVfaW52YWxpZGF0 ZV9zdGFydCgpOiAgICAgICAgICBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpOgo+ID4gKwkgKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrCj4gPiArCSAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxID0gUkVBRF9PTkNFKG1y bi0+aW52YWxpZGF0ZV9zZXEpOwo+ID4gKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlcSA9PSBtbW5fbW0tPmludmFsaWRhdGVfc2VxCj4gPiArCSAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9jawo+ID4gKwkgKiAg ICBzcGluX2xvY2sKPiA+ICsJICogICAgIHNlcSA9ICsrbW1uX21tLT5pbnZhbGlkYXRlX3NlcQo+ ID4gKwkgKiAgICBzcGluX3VubG9jawo+ID4gKwkgKiAgICAgb3AtPmludmFsaWRhdGVfcmFuZ2Uo KToKPiA+ICsJICogICAgICAgdXNlcl9sb2NrCj4gPiArCSAqICAgICAgICBtbXVfcmFuZ2Vfc2V0 X3NlcSgpCj4gPiArCSAqICAgICAgICAgbXJuLT5pbnZhbGlkYXRlX3NlcSA9IHNlcQo+ID4gKwkg KiAgICAgICB1c2VyX3VubG9jawo+ID4gKwkgKgo+ID4gKwkgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgW1JlcXVpcmVkOiBtbXVfcmFuZ2VfcmVhZF9yZXRyeSgpID09IHRydWVdCj4gPiArCSAq Cj4gPiArCSAqICAgbW5faXRyZWVfaW52X2VuZCgpOgo+ID4gKwkgKiAgICBzcGluX2xvY2sKPiA+ ICsJICogICAgIHNlcSA9ICsrbW1uX21tLT5pbnZhbGlkYXRlX3NlcQo+ID4gKwkgKiAgICBzcGlu X3VubG9jawo+ID4gKwkgKgo+ID4gKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1c2VyX2xvY2sKPiA+ICsJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1tdV9yYW5nZV9yZWFkX3JldHJ5KCk6Cj4gPiArCSAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXJuLT5pbnZhbGlkYXRlX3NlcSAhPSBzZXEKPiA+ ICsJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl91bmxvY2sK PiA+ICsJICoKPiA+ICsJICogQmFycmllcnMgYXJlIG5vdCBuZWVkZWQgaGVyZSBhcyBhbnkgcmFj ZXMgaGVyZSBhcmUgY2xvc2VkIGJ5IGFuCj4gPiArCSAqIGV2ZW50dWFsIG1tdV9yYW5nZV9yZWFk X3JldHJ5KCksIHdoaWNoIHByb3ZpZGVzIGEgYmFycmllciB2aWEgdGhlCj4gPiArCSAqIHVzZXJf bG9jay4KPiA+ICsJICovCj4gPiArCXNwaW5fbG9jaygmbW1uX21tLT5sb2NrKTsKPiA+ICsJLyog UGFpcnMgd2l0aCB0aGUgV1JJVEVfT05DRSBpbiBtbXVfcmFuZ2Vfc2V0X3NlcSgpICovCj4gPiAr CXNlcSA9IFJFQURfT05DRShtcm4tPmludmFsaWRhdGVfc2VxKTsKPiA+ICsJaXNfaW52YWxpZGF0 aW5nID0gc2VxID09IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXE7Cj4gPiArCXNwaW5fdW5sb2NrKCZt bW5fbW0tPmxvY2spOwo+ID4gKwo+ID4gKwkvKgo+ID4gKwkgKiBtcm4tPmludmFsaWRhdGVfc2Vx IGlzIGFsd2F5cyBzZXQgdG8gYW4gb2RkIHZhbHVlLiBUaGlzIGVuc3VyZXMKPiAKPiBUaGlzIGNs YWltIGp1c3QgbG9va3Mgd3JvbmcgdGhlIGZpcnN0IE4gdGltZXMgb25lIHJlYWRzIHRoZSBjb2Rl LCBnaXZlbiB0aGF0Cj4gdGhlcmUgaXMgbW11X3JhbmdlX3NldF9zZXEoKSB0byBzZXQgaXQgdG8g YW4gYXJiaXRyYXJ5IHZhbHVlISAgTWF5YmUgeW91IG1lYW4KPiAKPiAiaXMgYWx3YXlzIHNldCB0 byBhbiBvZGQgdmFsdWUgd2hlbiBpbnZhbGlkYXRpbmciPz8KCk5vIGl0IGlzIGFsd2F5cyBvZGQs IHlvdSBtdXN0IGNhbGwgbW11X3JhbmdlX3NldF9zZXEoKSBvbmx5IGZyb20gdGhlCm9wLT5pbnZh bGlkYXRlX3JhbmdlKCkgY2FsbGJhY2sgYXQgd2hpY2ggcG9pbnQgdGhlIHNlcSBpcyBvZGQuIEFz IHdlbGwKd2hlbiBtcm4gaXMgYWRkZWQgYW5kIGl0cyBzZXEgZmlyc3Qgc2V0IGl0IGlzIHNldCB0 byBhbiBvZGQgdmFsdWUKYWx3YXlzLiBNYXliZSB0aGUgY29tbWVudCwgc2hvdWxkIHJlYWQ6Cgog KiBtcm4tPmludmFsaWRhdGVfc2VxIGlzIGFsd2F5cywgeWVzIGFsd2F5cywgc2V0IHRvIGFuIG9k ZCB2YWx1ZS4gVGhpcyBlbnN1cmVzCgpUbyBzdHJlc3MgdGhhdCBpdCBpcyBub3QgYW4gZXJyb3Iu Cgo+IAo+ID4gKwkgKiB0aGF0IGlmIHNlcSBkb2VzIHdyYXAgd2Ugd2lsbCBhbHdheXMgY2xlYXIg dGhlIGJlbG93IHNsZWVwIGluIHNvbWUKPiA+ICsJICogcmVhc29uYWJsZSB0aW1lIGFzIG1tbl9t bS0+aW52YWxpZGF0ZV9zZXEgaXMgZXZlbiBpbiB0aGUgaWRsZQo+ID4gKwkgKiBzdGF0ZS4KPiA+ ICsJICovCj4gCj4gTGV0J3MgbW92ZSB0aGF0IGNvbW1lbnQgaGlnaGVyIHVwLiBUaGUgY29kZSB0 aGF0IGZvbGxvd3MgaXQgaGFzIG5vdGhpbmcgdG8KPiBkbyB3aXRoIGl0LCBzbyBpdCdzIGNvbmZ1 c2luZyBoZXJlLgoKTm8gdGhlIGNvbW1lbnQgaXMgaW4gdGhlIHJpZ2h0IHBsYWNlLCB0aGUgZmFj dCB0aGF0IGl0IGlzIG9kZCBhbmQgdGhhdAppZGxlIHN0YXRlIGlzIGV2ZW4gZXhwbGFpbnMgd2h5 IHRoZSB3YWl0KCkgd2lsbCBuZXZlciBsYXN0IGZvcmV2ZXIuCkFscmVhZHkgaGFkIGEgZGlzY3Vz c2lvbiBvbiB0aGlzIGluIHYxLgoKWy4uLl0KCj4gPiArCS8qCj4gPiArCSAqIElmIHNvbWUgaW52 YWxpZGF0ZV9yYW5nZV9zdGFydC9lbmQgcmVnaW9uIGlzIGdvaW5nIG9uIGluIHBhcmFsbGVsCj4g PiArCSAqIHdlIGRvbid0IGtub3cgd2hhdCBWQSByYW5nZXMgYXJlIGFmZmVjdGVkLCBzbyB3ZSBt dXN0IGFzc3VtZSB0aGlzCj4gPiArCSAqIG5ldyByYW5nZSBpcyBpbmNsdWRlZC4KPiA+ICsJICoK PiA+ICsJICogSWYgdGhlIGl0cmVlIGlzIGludmFsaWRhdGluZyB0aGVuIHdlIGFyZSBub3QgYWxs b3dlZCB0byBjaGFuZ2UKPiA+ICsJICogaXQuIFJldHJ5aW5nIHVudGlsIGludmFsaWRhdGlvbiBp cyBkb25lIGlzIHRyaWNreSBkdWUgdG8gdGhlCj4gPiArCSAqIHBvc3NpYmlsaXR5IGZvciBsaXZl IGxvY2ssIGluc3RlYWQgZGVmZXIgdGhlIGFkZCB0byB0aGUgdW5sb2NrIHNvCj4gPiArCSAqIHRo aXMgYWxnb3JpdGhtIGlzIGRldGVybWluaXN0aWMuCj4gPiArCSAqCj4gPiArCSAqIEluIGFsbCBj YXNlcyB0aGUgdmFsdWUgZm9yIHRoZSBtcm4tPm1yX2ludmFsaWRhdGVfc2VxIHNob3VsZCBiZQo+ ID4gKwkgKiBvZGQsIHNlZSBtbXVfcmFuZ2VfcmVhZF9iZWdpbigpCj4gPiArCSAqLwo+ID4gKwlz cGluX2xvY2soJm1tbl9tbS0+bG9jayk7Cj4gPiArCWlmIChtbW5fbW0tPmFjdGl2ZV9pbnZhbGlk YXRlX3Jhbmdlcykgewo+ID4gKwkJaWYgKG1uX2l0cmVlX2lzX2ludmFsaWRhdGluZyhtbW5fbW0p KQo+ID4gKwkJCWhsaXN0X2FkZF9oZWFkKCZtcm4tPmRlZmVycmVkX2l0ZW0sCj4gPiArCQkJCSAg ICAgICAmbW1uX21tLT5kZWZlcnJlZF9saXN0KTsKPiA+ICsJCWVsc2Ugewo+ID4gKwkJCW1tbl9t bS0+aW52YWxpZGF0ZV9zZXEgfD0gMTsKPiA+ICsJCQlpbnRlcnZhbF90cmVlX2luc2VydCgmbXJu LT5pbnRlcnZhbF90cmVlLAo+ID4gKwkJCQkJICAgICAmbW1uX21tLT5pdHJlZSk7Cj4gPiArCQl9 Cj4gPiArCQltcm4tPmludmFsaWRhdGVfc2VxID0gbW1uX21tLT5pbnZhbGlkYXRlX3NlcTsKPiA+ ICsJfSBlbHNlIHsKPiA+ICsJCVdBUk5fT04obW5faXRyZWVfaXNfaW52YWxpZGF0aW5nKG1tbl9t bSkpOwo+ID4gKwkJbXJuLT5pbnZhbGlkYXRlX3NlcSA9IG1tbl9tbS0+aW52YWxpZGF0ZV9zZXEg LSAxOwo+IAo+IE9oaGgsIGNoZWNrbWF0ZS4gSSBsb3NlLiBXaHkgaXMgKnN1YnRyYWN0aW5nKiB0 aGUgcmlnaHQgdGhpbmcgdG8gZG8KPiBmb3Igc2VxIG51bWJlcnMgaGVyZT8gIEknbSBhY3V0ZWx5 IHVuaGFwcHkgdHJ5aW5nIHRvIGZpZ3VyZSB0aGlzIG91dC4KPiBJIHN1c3BlY3QgaXQncyBhbm90 aGVyIHVuZm9ydHVuYXRlIHNpZGUgZWZmZWN0IG9mIHRyeWluZyB0byB1c2UgdGhlCj4gbG93ZXIg Yml0IG9mIHRoZSBzZXEgbnVtYmVyIChldmVuL29kZCkgZm9yIHNvbWV0aGluZyBlbHNlLgoKSWYg dGhlcmUgaXMgbm8gbW1uX21tLT5hY3RpdmVfaW52YWxpZGF0ZV9yYW5nZXMgdGhlbiBpdCBtZWFu cyB0aGF0Cm1tbl9tbS0+aW52YWxpZGF0ZV9zZXEgaXMgZXZlbiBhbmQgdGh1cyBtbW5fbW0tPmlu dmFsaWRhdGVfc2VxIC0gMQppcyBhbiBvZGQgbnVtYmVyIHdoaWNoIG1lYW5zIHRoYXQgbXJuLT5p bnZhbGlkYXRlX3NlcSBpcyBpbml0aWFsaXplZAp0byBvZGQgdmFsdWUgYW5kIGlmIHlvdSBmb2xs b3cgdGhlIHJ1bGUgZm9yIGNhbGxpbmcgbW11X3JhbmdlX3NldF9zZXEoKQp0aGVuIGl0IHdpbGwg X2Fsd2F5c18gYmUgYW4gb2RkIG51bWJlciBhbmQgdGhpcyBjbG9zZSB0aGUgbG9vcCB3aXRoCnRo ZSBhYm92ZSBjb21tZW50cyA6KQoKPiAKPiA+ICsJCWludGVydmFsX3RyZWVfaW5zZXJ0KCZtcm4t PmludGVydmFsX3RyZWUsICZtbW5fbW0tPml0cmVlKTsKPiA+ICsJfQo+ID4gKwlzcGluX3VubG9j aygmbW1uX21tLT5sb2NrKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ ID4gKyAqIG1tdV9yYW5nZV9ub3RpZmllcl9pbnNlcnQgLSBJbnNlcnQgYSByYW5nZSBub3RpZmll cgo+ID4gKyAqIEBtcm46IFJhbmdlIG5vdGlmaWVyIHRvIHJlZ2lzdGVyCj4gPiArICogQHN0YXJ0 OiBTdGFydGluZyB2aXJ0dWFsIGFkZHJlc3MgdG8gbW9uaXRvcgo+ID4gKyAqIEBsZW5ndGg6IExl bmd0aCBvZiB0aGUgcmFuZ2UgdG8gbW9uaXRvcgo+ID4gKyAqIEBtbSA6IG1tX3N0cnVjdCB0byBh dHRhY2ggdG8KPiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gc3Vic2NyaWJlcyB0aGUgcmFu Z2Ugbm90aWZpZXIgZm9yIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgbW0uCj4gPiArICogVXBvbiBy ZXR1cm4gdGhlIG9wcyByZWxhdGVkIHRvIG1tdV9yYW5nZV9ub3RpZmllciB3aWxsIGJlIGNhbGxl ZCB3aGVuZXZlcgo+ID4gKyAqIGFuIGV2ZW50IHRoYXQgaW50ZXJzZWN0cyB3aXRoIHRoZSBnaXZl biByYW5nZSBvY2N1cnMuCj4gPiArICoKPiA+ICsgKiBVcG9uIHJldHVybiB0aGUgcmFuZ2Vfbm90 aWZpZXIgbWF5IG5vdCBiZSBwcmVzZW50IGluIHRoZSBpbnRlcnZhbCB0cmVlIHlldC4KPiA+ICsg KiBUaGUgY2FsbGVyIG11c3QgdXNlIHRoZSBub3JtYWwgcmFuZ2Ugbm90aWZpZXIgbG9ja2luZyBm bG93IHZpYQo+ID4gKyAqIG1tdV9yYW5nZV9yZWFkX2JlZ2luKCkgdG8gZXN0YWJsaXNoIFNQVEVz IGZvciB0aGlzIHJhbmdlLgo+ID4gKyAqLwo+ID4gK2ludCBtbXVfcmFuZ2Vfbm90aWZpZXJfaW5z ZXJ0KHN0cnVjdCBtbXVfcmFuZ2Vfbm90aWZpZXIgKm1ybiwKPiA+ICsJCQkgICAgICB1bnNpZ25l ZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbmd0aCwKPiA+ICsJCQkgICAgICBzdHJ1Y3Qg bW1fc3RydWN0ICptbSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBtbXVfbm90aWZpZXJfbW0gKm1tbl9t bTsKPiA+ICsJaW50IHJldDsKPiAKPiBIbW1tLCBJIHRoaW5rIGEgbGF0ZXIgcGF0Y2ggaW1wcm9w ZXJseSBjaGFuZ2VzIHRoZSBhYm92ZSB0byAiaW50IHJldCA9IDA7Ii4KPiBJJ2xsIGNoZWNrIG9u IHRoYXQuIEl0J3MgY29ycmVjdCBoZXJlLCB0aG91Z2guCj4gCj4gPiArCj4gPiArCW1pZ2h0X2xv Y2soJm1tLT5tbWFwX3NlbSk7Cj4gPiArCj4gPiArCW1tbl9tbSA9IHNtcF9sb2FkX2FjcXVpcmUo Jm1tLT5tbXVfbm90aWZpZXJfbW0pOwo+IAo+IFdoYXQgZG9lcyB0aGUgYWJvdmUgcGFpciB3aXRo PyBTaG91bGQgaGF2ZSBhIGNvbW1lbnQgdGhhdCBzcGVjaWZpZXMgdGhhdC4KCkl0IHdhcyBkaXNj dXNzZWQgaW4gdjEgYnV0IG1heWJlIGEgY29tbWVudCBvZiB3aGF0IHdhcyBzYWlkIGJhY2sgdGhl biB3b3VsZApiZSBoZWxwZnVsLiBTb21ldGhpbmcgbGlrZToKCi8qCiAqIFdlIG5lZWQgdG8gaW5z dXJlIHRoYXQgYWxsIHdyaXRlcyB0byBtbS0+bW11X25vdGlmaWVyX21tIGFyZSB2aXNpYmxlIGJl Zm9yZQogKiBhbnkgY2hlY2tzIHdlIGRvIG9uIG1tbl9tbSBiZWxvdyBhcyBvdGhlcndpc2UgQ1BV IG1pZ2h0IHJlLW9yZGVyIHdyaXRlIGRvbmUKICogYnkgYW5vdGhlciBDUFUgY29yZSB0byBtbS0+ bW11X25vdGlmaWVyX21tIHN0cnVjdHVyZSBmaWVsZHMgYWZ0ZXIgdGhlIHJlYWQKICogYmVsb3dz LgogKi8KCkNoZWVycywKSsOpcsO0bWUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v YW1kLWdmeA==