From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Hubbard Subject: [PATCH v5 10/24] mm/gup: introduce pin_user_pages*() and FOLL_PIN Date: Thu, 14 Nov 2019 21:53:26 -0800 Message-ID: <20191115055340.1825745-11-jhubbard@nvidia.com> References: <20191115055340.1825745-1-jhubbard@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from hqemgate16.nvidia.com (hqemgate16.nvidia.com [216.228.121.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id C82426E061 for ; Fri, 15 Nov 2019 05:53:45 +0000 (UTC) In-Reply-To: <20191115055340.1825745-1-jhubbard@nvidia.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Andrew Morton Cc: Michal Hocko , Jan Kara , kvm@vger.kernel.org, linux-doc@vger.kernel.org, David Airlie , Dave Chinner , dri-devel@lists.freedesktop.org, LKML , linux-mm@kvack.org, Paul Mackerras , linux-kselftest@vger.kernel.org, Ira Weiny , Jonathan Corbet , linux-rdma@vger.kernel.org, Michael Ellerman , Mike Rapoport , Christoph Hellwig , Jason Gunthorpe , Vlastimil Babka , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-media@vger.kernel.org, Shuah Khan , John Hubbard , linux-block@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Al Viro List-Id: dri-devel@lists.freedesktop.org SW50cm9kdWNlIHBpbl91c2VyX3BhZ2VzKigpIHZhcmlhdGlvbnMgb2YgZ2V0X3VzZXJfcGFnZXMq KCkgY2FsbHMsCmFuZCBhbHNvIHBpbl9sb25ndGVybV9wYWdlcyooKSB2YXJpYXRpb25zLgoKRm9y IG5vdywgdGhlc2UgYXJlIHBsYWNlaG9sZGVyIGNhbGxzLCB1bnRpbCB0aGUgdmFyaW91cyBjYWxs IHNpdGVzCmFyZSBjb252ZXJ0ZWQgdG8gdXNlIHRoZSBjb3JyZWN0IGdldF91c2VyX3BhZ2VzKigp IG9yCnBpbl91c2VyX3BhZ2VzKigpIEFQSS4KClRoZXNlIHZhcmlhbnRzIHdpbGwgZXZlbnR1YWxs eSBhbGwgc2V0IEZPTExfUElOLCB3aGljaCBpcyBhbHNvCmludHJvZHVjZWQsIGFuZCB0aG9yb3Vn aGx5IGRvY3VtZW50ZWQuCgogICAgcGluX3VzZXJfcGFnZXMoKQogICAgcGluX3VzZXJfcGFnZXNf cmVtb3RlKCkKICAgIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKQoKQWxsIHBhZ2VzIHRoYXQgYXJlIHBp bm5lZCB2aWEgdGhlIGFib3ZlIGNhbGxzLCBtdXN0IGJlIHVucGlubmVkIHZpYQpwdXRfdXNlcl9w YWdlKCkuCgpUaGUgdW5kZXJseWluZyBydWxlcyBhcmU6CgoqIEZPTExfUElOIGlzIGEgZ3VwLWlu dGVybmFsIGZsYWcsIHNvIHRoZSBjYWxsIHNpdGVzIHNob3VsZCBub3QgZGlyZWN0bHkKc2V0IGl0 LiBUaGF0IGJlaGF2aW9yIGlzIGVuZm9yY2VkIHdpdGggYXNzZXJ0aW9ucy4KCiogQ2FsbCBzaXRl cyB0aGF0IHdhbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGV5IGFyZSBnb2luZyB0byBkbyBEaXJlY3RJ TwogICgiRElPIikgb3Igc29tZXRoaW5nIHdpdGggc2ltaWxhciBjaGFyYWN0ZXJpc3RpY3MsIHNo b3VsZCBjYWxsIGEKICBnZXRfdXNlcl9wYWdlcygpLWxpa2Ugd3JhcHBlciBjYWxsIHRoYXQgc2V0 cyBGT0xMX1BJTi4gVGhlc2Ugd3JhcHBlcnMKICB3aWxsOgogICAgICAgICogU3RhcnQgd2l0aCAi cGluX3VzZXJfcGFnZXMiIGluc3RlYWQgb2YgImdldF91c2VyX3BhZ2VzIi4gVGhhdAogICAgICAg ICAgbWFrZXMgaXQgZWFzeSB0byBmaW5kIGFuZCBhdWRpdCB0aGUgY2FsbCBzaXRlcy4KICAgICAg ICAqIFNldCBGT0xMX1BJTgoKKiBGb3IgcGFnZXMgdGhhdCBhcmUgcmVjZWl2ZWQgdmlhIEZPTExf UElOLCB0aG9zZSBwYWdlcyBtdXN0IGJlIHJldHVybmVkCiAgdmlhIHB1dF91c2VyX3BhZ2UoKS4K ClRoYW5rcyB0byBKYW4gS2FyYSBhbmQgVmxhc3RpbWlsIEJhYmthIGZvciBleHBsYWluaW5nIHRo ZSA0IGNhc2VzCmluIHRoaXMgZG9jdW1lbnRhdGlvbi4gKEkndmUgcmV3b3JkZWQgaXQgYW5kIGV4 cGFuZGVkIHVwb24gaXQuKQoKUmV2aWV3ZWQtYnk6IE1pa2UgUmFwb3BvcnQgPHJwcHRAbGludXgu aWJtLmNvbT4gICMgRG9jdW1lbnRhdGlvbgpSZXZpZXdlZC1ieTogSsOpcsO0bWUgR2xpc3NlIDxq Z2xpc3NlQHJlZGhhdC5jb20+CkNjOiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgpD YzogSXJhIFdlaW55IDxpcmEud2VpbnlAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBKb2huIEh1 YmJhcmQgPGpodWJiYXJkQG52aWRpYS5jb20+Ci0tLQogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9p bmRleC5yc3QgICAgICAgICAgfCAgIDEgKwogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNl cl9wYWdlcy5yc3QgfCAyMzMgKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9t bS5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjMgKysrKy0tCiBtbS9ndXAuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1MyArKysrKysrKysrKystLQogNCBmaWxlcyBj aGFuZ2VkLCA0MTYgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QKCmRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vY29y ZS1hcGkvaW5kZXgucnN0CmluZGV4IGFiMGVhZTFjMTUzYS4uNDEzZjdkN2M4NjQyIDEwMDY0NAot LS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2luZGV4LnJzdAorKysgYi9Eb2N1bWVudGF0aW9u L2NvcmUtYXBpL2luZGV4LnJzdApAQCAtMzEsNiArMzEsNyBAQCBDb3JlIHV0aWxpdGllcwogICAg Z2VuZXJpYy1yYWRpeC10cmVlCiAgICBtZW1vcnktYWxsb2NhdGlvbgogICAgbW0tYXBpCisgICBw aW5fdXNlcl9wYWdlcwogICAgZ2ZwX21hc2stZnJvbS1mcy1pbwogICAgdGltZWtlZXBpbmcKICAg IGJvb3QtdGltZS1tbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNl cl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRmMjY2MzdhNTAwNQotLS0g L2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0 CkBAIC0wLDAgKzEsMjMzIEBACisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAor Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citw aW5fdXNlcl9wYWdlcygpIGFuZCByZWxhdGVkIGNhbGxzCis9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIGNvbnRlbnRzOjogOmxvY2FsOgor CitPdmVydmlldworPT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGZvbGxv d2luZyBmdW5jdGlvbnM6IDo6CisKKyBwaW5fdXNlcl9wYWdlcworIHBpbl91c2VyX3BhZ2VzX2Zh c3QKKyBwaW5fdXNlcl9wYWdlc19yZW1vdGUKKworQmFzaWMgZGVzY3JpcHRpb24gb2YgRk9MTF9Q SU4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZPTExfUElOIGFuZCBGT0xMX0xP TkdURVJNIGFyZSBmbGFncyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGdldF91c2VyX3BhZ2Vz KigpCisoImd1cCIpIGZhbWlseSBvZiBmdW5jdGlvbnMuIEZPTExfUElOIGhhcyBzaWduaWZpY2Fu dCBpbnRlcmFjdGlvbnMgYW5kCitpbnRlcmRlcGVuZGVuY2llcyB3aXRoIEZPTExfTE9OR1RFUk0s IHNvIGJvdGggYXJlIGNvdmVyZWQgaGVyZS4KKworRk9MTF9QSU4gaXMgaW50ZXJuYWwgdG8gZ3Vw LCBtZWFuaW5nIHRoYXQgaXQgc2hvdWxkIG5vdCBhcHBlYXIgYXQgdGhlIGd1cCBjYWxsCitzaXRl cy4gVGhpcyBhbGxvd3MgdGhlIGFzc29jaWF0ZWQgd3JhcHBlciBmdW5jdGlvbnMgIChwaW5fdXNl cl9wYWdlcyooKSBhbmQKK290aGVycykgdG8gc2V0IHRoZSBjb3JyZWN0IGNvbWJpbmF0aW9uIG9m IHRoZXNlIGZsYWdzLCBhbmQgdG8gY2hlY2sgZm9yIHByb2JsZW1zCithcyB3ZWxsLgorCitGT0xM X0xPTkdURVJNLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmlzKiBhbGxvd2VkIHRvIGJlIHNldCBhdCB0 aGUgZ3VwIGNhbGwgc2l0ZXMuCitUaGlzIGlzIGluIG9yZGVyIHRvIGF2b2lkIGNyZWF0aW5nIGEg bGFyZ2UgbnVtYmVyIG9mIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGNvdmVyCithbGwgY29tYmluYXRp b25zIG9mIGdldCooKSwgcGluKigpLCBGT0xMX0xPTkdURVJNLCBhbmQgbW9yZS4gQWxzbywgdGhl CitwaW5fdXNlcl9wYWdlcyooKSBBUElzIGFyZSBjbGVhcmx5IGRpc3RpbmN0IGZyb20gdGhlIGdl dF91c2VyX3BhZ2VzKigpIEFQSXMsIHNvCit0aGF0J3MgYSBuYXR1cmFsIGRpdmlkaW5nIGxpbmUs IGFuZCBhIGdvb2QgcG9pbnQgdG8gbWFrZSBzZXBhcmF0ZSB3cmFwcGVyIGNhbGxzLgorSW4gb3Ro ZXIgd29yZHMsIHVzZSBwaW5fdXNlcl9wYWdlcyooKSBmb3IgRE1BLXBpbm5lZCBwYWdlcywgYW5k CitnZXRfdXNlcl9wYWdlcyooKSBmb3Igb3RoZXIgY2FzZXMuIFRoZXJlIGFyZSBmb3VyIGNhc2Vz IGRlc2NyaWJlZCBsYXRlciBvbiBpbgordGhpcyBkb2N1bWVudCwgdG8gZnVydGhlciBjbGFyaWZ5 IHRoYXQgY29uY2VwdC4KKworRk9MTF9QSU4gYW5kIEZPTExfR0VUIGFyZSBtdXR1YWxseSBleGNs dXNpdmUgZm9yIGEgZ2l2ZW4gZ3VwIGNhbGwuIEhvd2V2ZXIsCittdWx0aXBsZSB0aHJlYWRzIGFu ZCBjYWxsIHNpdGVzIGFyZSBmcmVlIHRvIHBpbiB0aGUgc2FtZSBzdHJ1Y3QgcGFnZXMsIHZpYSBi b3RoCitGT0xMX1BJTiBhbmQgRk9MTF9HRVQuIEl0J3MganVzdCB0aGUgY2FsbCBzaXRlIHRoYXQg bmVlZHMgdG8gY2hvb3NlIG9uZSBvciB0aGUKK290aGVyLCBub3QgdGhlIHN0cnVjdCBwYWdlKHMp LgorCitUaGUgRk9MTF9QSU4gaW1wbGVtZW50YXRpb24gaXMgbmVhcmx5IHRoZSBzYW1lIGFzIEZP TExfR0VULCBleGNlcHQgdGhhdCBGT0xMX1BJTgordXNlcyBhIGRpZmZlcmVudCByZWZlcmVuY2Ug Y291bnRpbmcgdGVjaG5pcXVlLgorCitGT0xMX1BJTiBpcyBhIHByZXJlcXVpc2l0ZSB0byBGT0xM X0xPTkdUR0VSTS4gQW5vdGhlciB3YXkgb2Ygc2F5aW5nIHRoYXQgaXMsCitGT0xMX0xPTkdURVJN IGlzIGEgc3BlY2lmaWMgY2FzZSwgbW9yZSByZXN0cmljdGl2ZSBjYXNlIG9mIEZPTExfUElOLgor CitXaGljaCBmbGFncyBhcmUgc2V0IGJ5IGVhY2ggd3JhcHBlcgorPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKworRm9yIHRoZXNlIHBpbl91c2VyX3BhZ2VzKigpIGZ1bmN0aW9u cywgRk9MTF9QSU4gaXMgT1InZCBpbiB3aXRoIHdoYXRldmVyIGd1cAorZmxhZ3MgdGhlIGNhbGxl ciBwcm92aWRlcy4gVGhlIGNhbGxlciBpcyByZXF1aXJlZCB0byBwYXNzIGluIGEgbm9uLW51bGwg c3RydWN0CitwYWdlcyogYXJyYXksIGFuZCB0aGUgZnVuY3Rpb24gdGhlbiBwaW4gcGFnZXMgYnkg aW5jcmVtZW50aW5nIGVhY2ggYnkgYSBzcGVjaWFsCit2YWx1ZS4gRm9yIG5vdywgdGhhdCB2YWx1 ZSBpcyArMSwganVzdCBsaWtlIGdldF91c2VyX3BhZ2VzKigpLjo6CisKKyBGdW5jdGlvbgorIC0t LS0tLS0tCisgcGluX3VzZXJfcGFnZXMgICAgICAgICAgRk9MTF9QSU4gaXMgYWx3YXlzIHNldCBp bnRlcm5hbGx5IGJ5IHRoaXMgZnVuY3Rpb24uCisgcGluX3VzZXJfcGFnZXNfZmFzdCAgICAgRk9M TF9QSU4gaXMgYWx3YXlzIHNldCBpbnRlcm5hbGx5IGJ5IHRoaXMgZnVuY3Rpb24uCisgcGluX3Vz ZXJfcGFnZXNfcmVtb3RlICAgRk9MTF9QSU4gaXMgYWx3YXlzIHNldCBpbnRlcm5hbGx5IGJ5IHRo aXMgZnVuY3Rpb24uCisKK0ZvciB0aGVzZSBnZXRfdXNlcl9wYWdlcyooKSBmdW5jdGlvbnMsIEZP TExfR0VUIG1pZ2h0IG5vdCBldmVuIGJlIHNwZWNpZmllZC4KK0JlaGF2aW9yIGlzIGEgbGl0dGxl IG1vcmUgY29tcGxleCB0aGFuIGFib3ZlLiBJZiBGT0xMX0dFVCB3YXMgKm5vdCogc3BlY2lmaWVk LAorYnV0IHRoZSBjYWxsZXIgcGFzc2VkIGluIGEgbm9uLW51bGwgc3RydWN0IHBhZ2VzKiBhcnJh eSwgdGhlbiB0aGUgZnVuY3Rpb24KK3NldHMgRk9MTF9HRVQgZm9yIHlvdSwgYW5kIHByb2NlZWRz IHRvIHBpbiBwYWdlcyBieSBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50CitvZiBlYWNoIHBhZ2Ug YnkgKzEuOjoKKworIEZ1bmN0aW9uCisgLS0tLS0tLS0KKyBnZXRfdXNlcl9wYWdlcyAgICAgICAg ICAgRk9MTF9HRVQgaXMgc29tZXRpbWVzIHNldCBpbnRlcm5hbGx5IGJ5IHRoaXMgZnVuY3Rpb24u CisgZ2V0X3VzZXJfcGFnZXNfZmFzdCAgICAgIEZPTExfR0VUIGlzIHNvbWV0aW1lcyBzZXQgaW50 ZXJuYWxseSBieSB0aGlzIGZ1bmN0aW9uLgorIGdldF91c2VyX3BhZ2VzX3JlbW90ZSAgICBGT0xM X0dFVCBpcyBzb21ldGltZXMgc2V0IGludGVybmFsbHkgYnkgdGhpcyBmdW5jdGlvbi4KKworVHJh Y2tpbmcgZG1hLXBpbm5lZCBwYWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitTb21l IG9mIHRoZSBrZXkgZGVzaWduIGNvbnN0cmFpbnRzLCBhbmQgc29sdXRpb25zLCBmb3IgdHJhY2tp bmcgZG1hLXBpbm5lZAorcGFnZXM6CisKKyogQW4gYWN0dWFsIHJlZmVyZW5jZSBjb3VudCwgcGVy IHN0cnVjdCBwYWdlLCBpcyByZXF1aXJlZC4gVGhpcyBpcyBiZWNhdXNlCisgIG11bHRpcGxlIHBy b2Nlc3NlcyBtYXkgcGluIGFuZCB1bnBpbiBhIHBhZ2UuCisKKyogRmFsc2UgcG9zaXRpdmVzIChy ZXBvcnRpbmcgdGhhdCBhIHBhZ2UgaXMgZG1hLXBpbm5lZCwgd2hlbiBpbiBmYWN0IGl0IGlzIG5v dCkKKyAgYXJlIGFjY2VwdGFibGUsIGJ1dCBmYWxzZSBuZWdhdGl2ZXMgYXJlIG5vdC4KKworKiBz dHJ1Y3QgcGFnZSBtYXkgbm90IGJlIGluY3JlYXNlZCBpbiBzaXplIGZvciB0aGlzLCBhbmQgYWxs IGZpZWxkcyBhcmUgYWxyZWFkeQorICB1c2VkLgorCisqIEdpdmVuIHRoZSBhYm92ZSwgd2UgY2Fu IG92ZXJsb2FkIHRoZSBwYWdlLT5fcmVmY291bnQgZmllbGQgYnkgdXNpbmcsIHNvcnQgb2YsCisg IHRoZSB1cHBlciBiaXRzIGluIHRoYXQgZmllbGQgZm9yIGEgZG1hLXBpbm5lZCBjb3VudC4gIlNv cnQgb2YiLCBtZWFucyB0aGF0LAorICByYXRoZXIgdGhhbiBkaXZpZGluZyBwYWdlLT5fcmVmY291 bnQgaW50byBiaXQgZmllbGRzLCB3ZSBzaW1wbGUgYWRkIGEgbWVkaXVtLQorICBsYXJnZSB2YWx1 ZSAoR1VQX1BJTl9DT1VOVElOR19CSUFTLCBpbml0aWFsbHkgY2hvc2VuIHRvIGJlIDEwMjQ6IDEw IGJpdHMpIHRvCisgIHBhZ2UtPl9yZWZjb3VudC4gVGhpcyBwcm92aWRlcyBmdXp6eSBiZWhhdmlv cjogaWYgYSBwYWdlIGhhcyBnZXRfcGFnZSgpIGNhbGxlZAorICBvbiBpdCAxMDI0IHRpbWVzLCB0 aGVuIGl0IHdpbGwgYXBwZWFyIHRvIGhhdmUgYSBzaW5nbGUgZG1hLXBpbm5lZCBjb3VudC4KKyAg QW5kIGFnYWluLCB0aGF0J3MgYWNjZXB0YWJsZS4KKworVGhpcyBhbHNvIGxlYWRzIHRvIGxpbWl0 YXRpb25zOiB0aGVyZSBhcmUgb25seSAzMS0xMD09MjEgYml0cyBhdmFpbGFibGUgZm9yIGEKK2Nv dW50ZXIgdGhhdCBpbmNyZW1lbnRzIDEwIGJpdHMgYXQgYSB0aW1lLgorCitUT0RPOiBmb3IgMUdC IGFuZCBsYXJnZXIgaHVnZSBwYWdlcywgdGhpcyBpcyBjdXR0aW5nIGl0IGNsb3NlLiBUaGF0J3Mg YmVjYXVzZQord2hlbiBwaW5fdXNlcl9wYWdlcygpIGZvbGxvd3Mgc3VjaCBwYWdlcywgaXQgaW5j cmVtZW50cyB0aGUgaGVhZCBwYWdlIGJ5ICIxIgorKHdoZXJlICIxIiB1c2VkIHRvIG1lYW4gIisx IiBmb3IgZ2V0X3VzZXJfcGFnZXMoKSwgYnV0IG5vdyBtZWFucyAiKzEwMjQiIGZvcgorcGluX3Vz ZXJfcGFnZXMoKSkgZm9yIGVhY2ggdGFpbCBwYWdlLiBTbyBpZiB5b3UgaGF2ZSBhIDFHQiBodWdl IHBhZ2U6CisKKyogVGhlcmUgYXJlIDI1NksgKDE4IGJpdHMpIHdvcnRoIG9mIDQgS0IgdGFpbCBw YWdlcy4KKyogVGhlcmUgYXJlIDIxIGJpdHMgYXZhaWxhYmxlIHRvIGNvdW50IHVwIHZpYSBHVVBf UElOX0NPVU5USU5HX0JJQVMgKHRoYXQgaXMsCisgIDEwIGJpdHMgYXQgYSB0aW1lKQorKiBUaGVy ZSBhcmUgMjEgLSAxOCA9PSAzIGJpdHMgYXZhaWxhYmxlIHRvIGNvdW50LiBFeGNlcHQgdGhhdCB0 aGVyZSBhcmVuJ3QsCisgIGJlY2F1c2UgeW91IG5lZWQgdG8gYWxsb3cgZm9yIGEgZmV3IG5vcm1h bCBnZXRfcGFnZSgpIGNhbGxzIG9uIHRoZSBoZWFkIHBhZ2UsCisgIGFzIHdlbGwuIEZvcnR1bmF0 ZWx5LCB0aGUgYXBwcm9hY2ggb2YgdXNpbmcgYWRkaXRpb24sIHJhdGhlciB0aGFuICJoYXJkIgor ICBiaXRmaWVsZHMsIHdpdGhpbiBwYWdlLT5fcmVmY291bnQsIGFsbG93cyBmb3Igc2hhcmluZyB0 aGVzZSBiaXRzIGdyYWNlZnVsbHkuCisgIEJ1dCB3ZSdyZSBzdGlsbCBsb29raW5nIGF0IGFib3V0 IDggcmVmZXJlbmNlcy4KKworVGhpcywgaG93ZXZlciwgaXMgYSBtaXNzaW5nIGZlYXR1cmUgbW9y ZSB0aGFuIGFueXRoaW5nIGVsc2UsIGJlY2F1c2UgaXQncyBlYXNpbHkKK3NvbHZlZCBieSBhZGRy ZXNzaW5nIGFuIG9idmlvdXMgaW5lZmZpY2llbmN5IGluIHRoZSBvcmlnaW5hbCBnZXRfdXNlcl9w YWdlcygpCithcHByb2FjaCBvZiByZXRyaWV2aW5nIHBhZ2VzOiBzdG9wIHRyZWF0aW5nIGFsbCB0 aGUgcGFnZXMgYXMgaWYgdGhleSB3ZXJlCitQQUdFX1NJWkUuIFJldHJpZXZlIGh1Z2UgcGFnZXMg YXMgaHVnZSBwYWdlcy4gVGhlIGNhbGxlcnMgbmVlZCB0byBiZSBhd2FyZSBvZgordGhpcywgc28g c29tZSB3b3JrIGlzIHJlcXVpcmVkLiBPbmNlIHRoYXQncyBpbiBwbGFjZSwgdGhpcyBsaW1pdGF0 aW9uIG1vc3RseQorZGlzYXBwZWFycyBmcm9tIHZpZXcsIGJlY2F1c2UgdGhlcmUgd2lsbCBiZSBh bXBsZSByZWZjb3VudGluZyByYW5nZSBhdmFpbGFibGUuCisKKyogQ2FsbGVycyBtdXN0IHNwZWNp ZmljYWxseSByZXF1ZXN0ICJkbWEtcGlubmVkIHRyYWNraW5nIG9mIHBhZ2VzIi4gSW4gb3RoZXIK KyAgd29yZHMsIGp1c3QgY2FsbGluZyBnZXRfdXNlcl9wYWdlcygpIHdpbGwgbm90IHN1ZmZpY2U7 IGEgbmV3IHNldCBvZiBmdW5jdGlvbnMsCisgIHBpbl91c2VyX3BhZ2UoKSBhbmQgcmVsYXRlZCwg bXVzdCBiZSB1c2VkLgorCitGT0xMX1BJTiwgRk9MTF9HRVQsIEZPTExfTE9OR1RFUk06IHdoZW4g dG8gdXNlIHdoaWNoIGZsYWdzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisKK1RoYW5rcyB0byBKYW4gS2FyYSwgVmxhc3RpbWlsIEJh YmthIGFuZCBzZXZlcmFsIG90aGVyIC1tbSBwZW9wbGUsIGZvciBkZXNjcmliaW5nCit0aGVzZSBj YXRlZ29yaWVzOgorCitDQVNFIDE6IERpcmVjdCBJTyAoRElPKQorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KK1RoZXJlIGFyZSBHVVAgcmVmZXJlbmNlcyB0byBwYWdlcyB0aGF0IGFyZSBzZXJ2aW5n CithcyBESU8gYnVmZmVycy4gVGhlc2UgYnVmZmVycyBhcmUgbmVlZGVkIGZvciBhIHJlbGF0aXZl bHkgc2hvcnQgdGltZSAoc28gdGhleQorYXJlIG5vdCAibG9uZyB0ZXJtIikuIE5vIHNwZWNpYWwg c3luY2hyb25pemF0aW9uIHdpdGggcGFnZV9ta2NsZWFuKCkgb3IKK211bm1hcCgpIGlzIHByb3Zp ZGVkLiBUaGVyZWZvcmUsIGZsYWdzIHRvIHNldCBhdCB0aGUgY2FsbCBzaXRlIGFyZTogOjoKKwor ICAgIEZPTExfUElOCisKKy4uLmJ1dCByYXRoZXIgdGhhbiBzZXR0aW5nIEZPTExfUElOIGRpcmVj dGx5LCBjYWxsIHNpdGVzIHNob3VsZCB1c2Ugb25lIG9mCit0aGUgcGluX3VzZXJfcGFnZXMqKCkg cm91dGluZXMgdGhhdCBzZXQgRk9MTF9QSU4uCisKK0NBU0UgMjogUkRNQQorLS0tLS0tLS0tLS0t CitUaGVyZSBhcmUgR1VQIHJlZmVyZW5jZXMgdG8gcGFnZXMgdGhhdCBhcmUgc2VydmluZyBhcyBE TUEKK2J1ZmZlcnMuIFRoZXNlIGJ1ZmZlcnMgYXJlIG5lZWRlZCBmb3IgYSBsb25nIHRpbWUgKCJs b25nIHRlcm0iKS4gTm8gc3BlY2lhbAorc3luY2hyb25pemF0aW9uIHdpdGggcGFnZV9ta2NsZWFu KCkgb3IgbXVubWFwKCkgaXMgcHJvdmlkZWQuIFRoZXJlZm9yZSwgZmxhZ3MKK3RvIHNldCBhdCB0 aGUgY2FsbCBzaXRlIGFyZTogOjoKKworICAgIEZPTExfUElOIHwgRk9MTF9MT05HVEVSTQorCitO T1RFOiBTb21lIHBhZ2VzLCBzdWNoIGFzIERBWCBwYWdlcywgY2Fubm90IGJlIHBpbm5lZCB3aXRo IGxvbmd0ZXJtIHBpbnMuIFRoYXQncworYmVjYXVzZSBEQVggcGFnZXMgZG8gbm90IGhhdmUgYSBz ZXBhcmF0ZSBwYWdlIGNhY2hlLCBhbmQgc28gInBpbm5pbmciIGltcGxpZXMKK2xvY2tpbmcgZG93 biBmaWxlIHN5c3RlbSBibG9ja3MsIHdoaWNoIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQgaW4gdGhh dCB3YXkuCisKK0NBU0UgMzogSGFyZHdhcmUgd2l0aCBwYWdlIGZhdWx0aW5nIHN1cHBvcnQKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hlcmUsIGEgd2VsbC13 cml0dGVuIGRyaXZlciBkb2Vzbid0IG5vcm1hbGx5IG5lZWQgdG8gcGluIHBhZ2VzIGF0IGFsbC4g SG93ZXZlciwKK2lmIHRoZSBkcml2ZXIgZG9lcyBjaG9vc2UgdG8gZG8gc28sIGl0IGNhbiByZWdp c3RlciBNTVUgbm90aWZpZXJzIGZvciB0aGUgcmFuZ2UsCithbmQgd2lsbCBiZSBjYWxsZWQgYmFj ayB1cG9uIGludmFsaWRhdGlvbi4gRWl0aGVyIHdheSAoYXZvaWRpbmcgcGFnZSBwaW5uaW5nLCBv cgordXNpbmcgTU1VIG5vdGlmaWVycyB0byB1bnBpbiB1cG9uIHJlcXVlc3QpLCB0aGVyZSBpcyBw cm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGgKK2JvdGggZmlsZXN5c3RlbSBhbmQgbW0gKHBhZ2Vf bWtjbGVhbigpLCBtdW5tYXAoKSwgZXRjKS4KKworVGhlcmVmb3JlLCBuZWl0aGVyIGZsYWcgbmVl ZHMgdG8gYmUgc2V0LgorCitJbiB0aGlzIGNhc2UsIGlkZWFsbHksIG5laXRoZXIgZ2V0X3VzZXJf cGFnZXMoKSBub3IgcGluX3VzZXJfcGFnZXMoKSBzaG91bGQgYmUKK2NhbGxlZC4gSW5zdGVhZCwg dGhlIHNvZnR3YXJlIHNob3VsZCBiZSB3cml0dGVuIHNvIHRoYXQgaXQgZG9lcyBub3QgcGluIHBh Z2VzLgorVGhpcyBhbGxvd3MgbW0gYW5kIGZpbGVzeXN0ZW1zIHRvIG9wZXJhdGUgbW9yZSBlZmZp Y2llbnRseSBhbmQgcmVsaWFibHkuCisKK0NBU0UgNDogUGlubmluZyBmb3Igc3RydWN0IHBhZ2Ug bWFuaXB1bGF0aW9uIG9ubHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK0hlcmUsIG5vcm1hbCBHVVAgY2FsbHMgYXJlIHN1ZmZpY2llbnQsIHNvIG5l aXRoZXIgZmxhZyBuZWVkcyB0byBiZSBzZXQuCisKK3BhZ2VfZG1hX3Bpbm5lZCgpOiB0aGUgd2hv bGUgcG9pbnQgb2YgcGlubmluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisKK1RoZSB3aG9sZSBwb2ludCBvZiBtYXJraW5nIHBhZ2VzIGFzICJETUEtcGlu bmVkIiBvciAiZ3VwLXBpbm5lZCIgaXMgdG8gYmUgYWJsZQordG8gcXVlcnksICJpcyB0aGlzIHBh Z2UgRE1BLXBpbm5lZD8iIFRoYXQgYWxsb3dzIGNvZGUgc3VjaCBhcyBwYWdlX21rY2xlYW4oKQor KGFuZCBmaWxlIHN5c3RlbSB3cml0ZWJhY2sgY29kZSBpbiBnZW5lcmFsKSB0byBtYWtlIGluZm9y bWVkIGRlY2lzaW9ucyBhYm91dAord2hhdCB0byBkbyB3aGVuIGEgcGFnZSBjYW5ub3QgYmUgdW5t YXBwZWQgZHVlIHRvIHN1Y2ggcGlucy4KKworV2hhdCB0byBkbyBpbiB0aG9zZSBjYXNlcyBpcyB0 aGUgc3ViamVjdCBvZiBhIHllYXJzLWxvbmcgc2VyaWVzIG9mIGRpc2N1c3Npb25zCithbmQgZGVi YXRlcyAoc2VlIHRoZSBSZWZlcmVuY2VzIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudCkuIEl0 J3MgYSBUT0RPIGl0ZW0KK2hlcmU6IGZpbGwgaW4gdGhlIGRldGFpbHMgb25jZSB0aGF0J3Mgd29y a2VkIG91dC4gTWVhbndoaWxlLCBpdCdzIHNhZmUgdG8gc2F5Cit0aGF0IGhhdmluZyB0aGlzIGF2 YWlsYWJsZTogOjoKKworICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgcGFnZV9kbWFfcGlubmVk KHN0cnVjdCBwYWdlICpwYWdlKQorCisuLi5pcyBhIHByZXJlcXVpc2l0ZSB0byBzb2x2aW5nIHRo ZSBsb25nLXJ1bm5pbmcgZ3VwK0RNQSBwcm9ibGVtLgorCitBbm90aGVyIHdheSBvZiB0aGlua2lu ZyBhYm91dCBGT0xMX0dFVCwgRk9MTF9QSU4sIGFuZCBGT0xMX0xPTkdURVJNCis9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisKK0Fub3RoZXIgd2F5IG9mIHRoaW5raW5nIGFib3V0IHRoZXNlIGZsYWdzIGlzIGFzIGEgcHJv Z3Jlc3Npb24gb2YgcmVzdHJpY3Rpb25zOgorRk9MTF9HRVQgaXMgZm9yIHN0cnVjdCBwYWdlIG1h bmlwdWxhdGlvbiwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGRhdGEgdGhhdCB0aGUKK3N0cnVjdCBw YWdlIHJlZmVycyB0by4gRk9MTF9QSU4gaXMgYSAqcmVwbGFjZW1lbnQqIGZvciBGT0xMX0dFVCwg YW5kIGlzIGZvcgorc2hvcnQgdGVybSBwaW5zIG9uIHBhZ2VzIHdob3NlIGRhdGEgKndpbGwqIGdl dCBhY2Nlc3NlZC4gQXMgc3VjaCwgRk9MTF9QSU4gaXMKK2EgIm1vcmUgc2V2ZXJlIiBmb3JtIG9m IHBpbm5pbmcuIEFuZCBmaW5hbGx5LCBGT0xMX0xPTkdURVJNIGlzIGFuIGV2ZW4gbW9yZQorcmVz dHJpY3RpdmUgY2FzZSB0aGF0IGhhcyBGT0xMX1BJTiBhcyBhIHByZXJlcXVpc2l0ZTogdGhpcyBp cyBmb3IgcGFnZXMgdGhhdAord2lsbCBiZSBwaW5uZWQgbG9uZ3Rlcm0sIGFuZCB3aG9zZSBkYXRh IHdpbGwgYmUgYWNjZXNzZWQuCisKK1VuaXQgdGVzdGluZworPT09PT09PT09PT09CitUaGlzIGZp bGU6OgorCisgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdm0vZ3VwX2JlbmNobWFyay5jCisKK2hh cyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFw cGVyIGZ1bmN0aW9uczoKKworKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX2JlbmNobWFyayAt YSkKKyogUElOX0xPTkdURVJNX0JFTkNITUFSSyAoLi9ndXBfYmVuY2htYXJrIC1hKQorKiBQSU5f QkVOQ0hNQVJLICguL2d1cF9iZW5jaG1hcmsgLWEpCisKK1lvdSBjYW4gbW9uaXRvciBob3cgbWFu eSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWQK K3NpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVu dHJpZXM6IDo6CisKKyAgICAvcHJvYy92bXN0YXQvbnJfZm9sbF9waW5fcmVxdWVzdGVkCisgICAg L3Byb2Mvdm1zdGF0L25yX2ZvbGxfcGluX3JlcXVlc3RlZAorCitUaG9zZSBhcmUgYm90aCBnb2lu ZyB0byBzaG93IHplcm8sIHVubGVzcyBDT05GSUdfREVCVUdfVk0gaXMgc2V0LiBUaGlzIGlzCiti ZWNhdXNlIHRoZXJlIGlzIGEgbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBkcm9wIGluIHB1dF91c2Vy X3BhZ2UoKSwgd2hlbiB0aGV5CithcmUgYWN0aXZhdGVkLgorCitSZWZlcmVuY2VzCis9PT09PT09 PT09CisKKyogYFNvbWUgc2xvdyBwcm9ncmVzcyBvbiBnZXRfdXNlcl9wYWdlcygpIChBcHIgMiwg MjAxOSkgPGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy83ODQ1NzQvPmBfCisqIGBETUEgYW5kIGdl dF91c2VyX3BhZ2VzKCkgKExQQzogRGVjIDEyLCAyMDE4KSA8aHR0cHM6Ly9sd24ubmV0L0FydGlj bGVzLzc3NDQxMS8+YF8KKyogYFRoZSB0cm91YmxlIHdpdGggZ2V0X3VzZXJfcGFnZXMoKSAoQXBy IDMwLCAyMDE4KSA8aHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzc1MzAyNy8+YF8KKworSm9obiBI dWJiYXJkLCBPY3RvYmVyLCAyMDE5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9p bmNsdWRlL2xpbnV4L21tLmgKaW5kZXggOTYyMjgzNzYxMzljLi42NTg4ZDJlMDI2MjggMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEw NzUsMTYgKzEwNzUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9wYWdlKHN0cnVjdCBwYWdl ICpwYWdlKQogICogcHV0X3VzZXJfcGFnZSgpIC0gcmVsZWFzZSBhIGd1cC1waW5uZWQgcGFnZQog ICogQHBhZ2U6ICAgICAgICAgICAgcG9pbnRlciB0byBwYWdlIHRvIGJlIHJlbGVhc2VkCiAgKgot ICogUGFnZXMgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgZ2V0X3VzZXJfcGFnZXMqKCkgbXVzdCBiZSBy ZWxlYXNlZCB2aWEKLSAqIGVpdGhlciBwdXRfdXNlcl9wYWdlKCksIG9yIG9uZSBvZiB0aGUgcHV0 X3VzZXJfcGFnZXMqKCkgcm91dGluZXMKLSAqIGJlbG93LiBUaGlzIGlzIHNvIHRoYXQgZXZlbnR1 YWxseSwgcGFnZXMgdGhhdCBhcmUgcGlubmVkIHZpYQotICogZ2V0X3VzZXJfcGFnZXMqKCkgY2Fu IGJlIHNlcGFyYXRlbHkgdHJhY2tlZCBhbmQgdW5pcXVlbHkgaGFuZGxlZC4gSW4KLSAqIHBhcnRp Y3VsYXIsIGludGVyYWN0aW9ucyB3aXRoIFJETUEgYW5kIGZpbGVzeXN0ZW1zIG5lZWQgc3BlY2lh bAotICogaGFuZGxpbmcuCisgKiBQYWdlcyB0aGF0IHdlcmUgcGlubmVkIHZpYSBwaW5fdXNlcl9w YWdlcyooKSBtdXN0IGJlIHJlbGVhc2VkIHZpYSBlaXRoZXIKKyAqIHB1dF91c2VyX3BhZ2UoKSwg b3Igb25lIG9mIHRoZSBwdXRfdXNlcl9wYWdlcyooKSByb3V0aW5lcy4gVGhpcyBpcyBzbyB0aGF0 CisgKiBldmVudHVhbGx5IHN1Y2ggcGFnZXMgY2FuIGJlIHNlcGFyYXRlbHkgdHJhY2tlZCBhbmQg dW5pcXVlbHkgaGFuZGxlZC4gSW4KKyAqIHBhcnRpY3VsYXIsIGludGVyYWN0aW9ucyB3aXRoIFJE TUEgYW5kIGZpbGVzeXN0ZW1zIG5lZWQgc3BlY2lhbCBoYW5kbGluZy4KICAqCiAgKiBwdXRfdXNl cl9wYWdlKCkgYW5kIHB1dF9wYWdlKCkgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIGRlc3BpdGUg dGhpcyBlYXJseQogICogaW1wbGVtZW50YXRpb24gdGhhdCBtYWtlcyB0aGVtIGxvb2sgdGhlIHNh bWUuIHB1dF91c2VyX3BhZ2UoKSBjYWxscyBtdXN0Ci0gKiBiZSBwZXJmZWN0bHkgbWF0Y2hlZCB1 cCB3aXRoIGdldF91c2VyX3BhZ2UoKSBjYWxscy4KKyAqIGJlIHBlcmZlY3RseSBtYXRjaGVkIHVw IHdpdGggcGluKigpIGNhbGxzLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3VzZXJfcGFn ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTE1NDIsOSArMTU0MCwxNiBAQCBsb25nIGdldF91 c2VyX3BhZ2VzX3JlbW90ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVj dCAqbW0sCiAJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdl cywKIAkJCSAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAog CQkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMsIGludCAqbG9ja2VkKTsKK2xvbmcg cGluX3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1f c3RydWN0ICptbSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJf cGFnZXMsCisJCQkgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2Vz LAorCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcywgaW50ICpsb2NrZWQpOwogbG9u ZyBnZXRfdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3Bh Z2VzLAogCQkJICAgIHVuc2lnbmVkIGludCBndXBfZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMs CiAJCQkgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcyk7Citsb25nIHBpbl91c2VyX3Bh Z2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCSAgICB1 bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkgICAgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICoqdm1hcyk7CiBsb25nIGdldF91c2VyX3BhZ2VzX2xvY2tlZCh1bnNp Z25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkgICAgdW5zaWduZWQg aW50IGd1cF9mbGFncywgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpsb2NrZWQpOwogbG9uZyBn ZXRfdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25n IG5yX3BhZ2VzLApAQCAtMTU1Miw2ICsxNTU3LDggQEAgbG9uZyBnZXRfdXNlcl9wYWdlc191bmxv Y2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCiBpbnQg Z2V0X3VzZXJfcGFnZXNfZmFzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsCiAJ CQl1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKK2ludCBwaW5f dXNlcl9wYWdlc19mYXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBucl9wYWdlcywKKwkJCXVu c2lnbmVkIGludCBndXBfZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMpOwogCiBpbnQgYWNjb3Vu dF9sb2NrZWRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGFnZXMsIGJv b2wgaW5jKTsKIGludCBfX2FjY291bnRfbG9ja2VkX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1 bnNpZ25lZCBsb25nIHBhZ2VzLCBib29sIGluYywKQEAgLTI2MTAsMTMgKzI2MTcsMTUgQEAgc3Ry dWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25l ZCBsb25nIGFkZHJlc3MsCiAjZGVmaW5lIEZPTExfQU5PTgkweDgwMDAJLyogZG9uJ3QgZG8gZmls ZSBtYXBwaW5ncyAqLwogI2RlZmluZSBGT0xMX0xPTkdURVJNCTB4MTAwMDAJLyogbWFwcGluZyBs aWZldGltZSBpcyBpbmRlZmluaXRlOiBzZWUgYmVsb3cgKi8KICNkZWZpbmUgRk9MTF9TUExJVF9Q TUQJMHgyMDAwMAkvKiBzcGxpdCBodWdlIHBtZCBiZWZvcmUgcmV0dXJuaW5nICovCisjZGVmaW5l IEZPTExfUElOCTB4NDAwMDAJLyogcGFnZXMgbXVzdCBiZSByZWxlYXNlZCB2aWEgcHV0X3VzZXJf cGFnZSgpICovCiAKIC8qCi0gKiBOT1RFIG9uIEZPTExfTE9OR1RFUk06CisgKiBGT0xMX1BJTiBh bmQgRk9MTF9MT05HVEVSTSBtYXkgYmUgdXNlZCBpbiB2YXJpb3VzIGNvbWJpbmF0aW9ucyB3aXRo IGVhY2gKKyAqIG90aGVyLiBIZXJlIGlzIHdoYXQgdGhleSBtZWFuLCBhbmQgaG93IHRvIHVzZSB0 aGVtOgogICoKICAqIEZPTExfTE9OR1RFUk0gaW5kaWNhdGVzIHRoYXQgdGhlIHBhZ2Ugd2lsbCBi ZSBoZWxkIGZvciBhbiBpbmRlZmluaXRlIHRpbWUKLSAqIHBlcmlvZCBfb2Z0ZW5fIHVuZGVyIHVz ZXJzcGFjZSBjb250cm9sLiAgVGhpcyBpcyBjb250cmFzdGVkIHdpdGgKLSAqIGlvdl9pdGVyX2dl dF9wYWdlcygpIHdoZXJlIHVzYWdlcyB3aGljaCBhcmUgdHJhbnNpZW50LgorICogcGVyaW9kIF9v ZnRlbl8gdW5kZXIgdXNlcnNwYWNlIGNvbnRyb2wuICBUaGlzIGlzIGluIGNvbnRyYXN0IHRvCisg KiBpb3ZfaXRlcl9nZXRfcGFnZXMoKSwgd2hlcmUgdXNhZ2VzIHdoaWNoIGFyZSB0cmFuc2llbnQu CiAgKgogICogRklYTUU6IEZvciBwYWdlcyB3aGljaCBhcmUgcGFydCBvZiBhIGZpbGVzeXN0ZW0s IG1hcHBpbmdzIGFyZSBzdWJqZWN0IHRvIHRoZQogICogbGlmZXRpbWUgZW5mb3JjZWQgYnkgdGhl IGZpbGVzeXN0ZW0gYW5kIHdlIG5lZWQgZ3VhcmFudGVlcyB0aGF0IGxvbmd0ZXJtCkBAIC0yNjMx LDExICsyNjQwLDM5IEBAIHN0cnVjdCBwYWdlICpmb2xsb3dfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogICogQ3VycmVudGx5IG9ubHkgZ2V0 X3VzZXJfcGFnZXMoKSBhbmQgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHN1cHBvcnQgdGhpcyBmbGFn CiAgKiBhbmQgY2FsbHMgdG8gZ2V0X3VzZXJfcGFnZXNfW3VuXWxvY2tlZCBhcmUgc3BlY2lmaWNh bGx5IG5vdCBhbGxvd2VkLiAgVGhpcwogICogaXMgZHVlIHRvIGFuIGluY29tcGF0aWJpbGl0eSB3 aXRoIHRoZSBGUyBEQVggY2hlY2sgYW5kCi0gKiBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZCisgKiBG QVVMVF9GTEFHX0FMTE9XX1JFVFJZLgogICoKLSAqIEluIHRoZSBDTUEgY2FzZTogbG9uZ3Rlcm0g cGlucyBpbiBhIENNQSByZWdpb24gd291bGQgdW5uZWNlc3NhcmlseSBmcmFnbWVudAotICogdGhh dCByZWdpb24uICBBbmQgc28gQ01BIGF0dGVtcHRzIHRvIG1pZ3JhdGUgdGhlIHBhZ2UgYmVmb3Jl IHBpbm5pbmcgd2hlbgorICogSW4gdGhlIENNQSBjYXNlOiBsb25nIHRlcm0gcGlucyBpbiBhIENN QSByZWdpb24gd291bGQgdW5uZWNlc3NhcmlseSBmcmFnbWVudAorICogdGhhdCByZWdpb24uICBB bmQgc28sIENNQSBhdHRlbXB0cyB0byBtaWdyYXRlIHRoZSBwYWdlIGJlZm9yZSBwaW5uaW5nLCB3 aGVuCiAgKiBGT0xMX0xPTkdURVJNIGlzIHNwZWNpZmllZC4KKyAqCisgKiBGT0xMX1BJTiBpbmRp Y2F0ZXMgdGhhdCBhIHNwZWNpYWwga2luZCBvZiB0cmFja2luZyAobm90IGp1c3QgcGFnZS0+X3Jl ZmNvdW50LAorICogYnV0IGFuIGFkZGl0aW9uYWwgcGluIGNvdW50aW5nIHN5c3RlbSkgd2lsbCBi ZSBpbnZva2VkLiBUaGlzIGlzIGludGVuZGVkIGZvcgorICogYW55dGhpbmcgdGhhdCBnZXRzIGEg cGFnZSByZWZlcmVuY2UgYW5kIHRoZW4gdG91Y2hlcyBwYWdlIGRhdGEgKGZvciBleGFtcGxlLAor ICogRGlyZWN0IElPKS4gVGhpcyBsZXRzIHRoZSBmaWxlc3lzdGVtIGtub3cgdGhhdCBzb21lIG5v bi1maWxlLXN5c3RlbSBlbnRpdHkgaXMKKyAqIHBvdGVudGlhbGx5IGNoYW5naW5nIHRoZSBwYWdl cycgZGF0YS4gSW4gY29udHJhc3QgdG8gRk9MTF9HRVQgKHdob3NlIHBhZ2VzCisgKiBhcmUgcmVs ZWFzZWQgdmlhIHB1dF9wYWdlKCkpLCBGT0xMX1BJTiBwYWdlcyBtdXN0IGJlIHJlbGVhc2VkLCB1 bHRpbWF0ZWx5LCBieQorICogYSBjYWxsIHRvIHB1dF91c2VyX3BhZ2UoKS4KKyAqCisgKiBGT0xM X1BJTiBpcyBzaW1pbGFyIHRvIEZPTExfR0VUOiBib3RoIG9mIHRoZXNlIHBpbiBwYWdlcy4gVGhl eSB1c2UgZGlmZmVyZW50CisgKiBhbmQgc2VwYXJhdGUgcmVmY291bnRpbmcgbWVjaGFuaXNtcywg aG93ZXZlciwgYW5kIHRoYXQgbWVhbnMgdGhhdCBlYWNoIGhhcworICogaXRzIG93biBhY3F1aXJl IGFuZCByZWxlYXNlIG1lY2hhbmlzbXM6CisgKgorICogICAgIEZPTExfR0VUOiBnZXRfdXNlcl9w YWdlcyooKSB0byBhY3F1aXJlLCBhbmQgcHV0X3BhZ2UoKSB0byByZWxlYXNlLgorICoKKyAqICAg ICBGT0xMX1BJTjogcGluX3VzZXJfcGFnZXMqKCkgdG8gYWNxdWlyZSwgYW5kIHB1dF91c2VyX3Bh Z2VzIHRvIHJlbGVhc2UuCisgKgorICogRk9MTF9QSU4gYW5kIEZPTExfR0VUIGFyZSBtdXR1YWxs eSBleGNsdXNpdmUgZm9yIGEgZ2l2ZW4gZnVuY3Rpb24gY2FsbC4KKyAqIChUaGUgdW5kZXJseWlu ZyBwYWdlcyBtYXkgZXhwZXJpZW5jZSBib3RoIEZPTExfR0VULWJhc2VkIGFuZCBGT0xMX1BJTi1i YXNlZAorICogY2FsbHMgYXBwbGllZCB0byB0aGVtLCBhbmQgdGhhdCdzIHBlcmZlY3RseSBPSy4g VGhpcyBpcyBhIGNvbnN0cmFpbnQgb24gdGhlCisgKiBjYWxsZXJzLCBub3Qgb24gdGhlIHBhZ2Vz LikKKyAqCisgKiBGT0xMX1BJTiBzaG91bGQgYmUgc2V0IGludGVybmFsbHkgYnkgdGhlIHBpbl91 c2VyX3BhZ2VzKigpIEFQSXMsIG5ldmVyCisgKiBkaXJlY3RseSBieSB0aGUgY2FsbGVyLiBUaGF0 J3MgaW4gb3JkZXIgdG8gaGVscCBhdm9pZCBtaXNtYXRjaGVzIHdoZW4KKyAqIHJlbGVhc2luZyBw YWdlczogZ2V0X3VzZXJfcGFnZXMqKCkgcGFnZXMgbXVzdCBiZSByZWxlYXNlZCB2aWEgcHV0X3Bh Z2UoKSwKKyAqIHdoaWxlIHBpbl91c2VyX3BhZ2VzKigpIHBhZ2VzIG11c3QgYmUgcmVsZWFzZWQg dmlhIHB1dF91c2VyX3BhZ2UoKS4KKyAqCisgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vdm0v cGluX3VzZXJfcGFnZXMucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCiAKIHN0YXRpYyBp bmxpbmUgaW50IHZtX2ZhdWx0X3RvX2Vycm5vKHZtX2ZhdWx0X3Qgdm1fZmF1bHQsIGludCBmb2xs X2ZsYWdzKQpkaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuYwppbmRleCA2Y2Y2MTNiZmU3 ZGMuLjg3YzI4ZDk0ZWQzNyAxMDA2NDQKLS0tIGEvbW0vZ3VwLmMKKysrIGIvbW0vZ3VwLmMKQEAg LTIwMSw2ICsyMDEsMTAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpmb2xsb3dfcGFnZV9wdGUoc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJc3BpbmxvY2tfdCAqcHRsOwogCXB0ZV90ICpwdGVw LCBwdGU7CiAKKwkvKiBGT0xMX0dFVCBhbmQgRk9MTF9QSU4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2 ZS4gKi8KKwlpZiAoV0FSTl9PTl9PTkNFKChmbGFncyAmIChGT0xMX1BJTiB8IEZPTExfR0VUKSkg PT0KKwkJCSAoRk9MTF9QSU4gfCBGT0xMX0dFVCkpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKIHJldHJ5OgogCWlmICh1bmxpa2VseShwbWRfYmFkKCpwbWQpKSkKIAkJcmV0dXJuIG5vX3Bh Z2VfdGFibGUodm1hLCBmbGFncyk7CkBAIC04MTIsNyArODE2LDcgQEAgc3RhdGljIGxvbmcgX19n ZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAq bW0sCiAKIAlzdGFydCA9IHVudGFnZ2VkX2FkZHIoc3RhcnQpOwogCi0JVk1fQlVHX09OKCEhcGFn ZXMgIT0gISEoZ3VwX2ZsYWdzICYgRk9MTF9HRVQpKTsKKwlWTV9CVUdfT04oISFwYWdlcyAhPSAh IShndXBfZmxhZ3MgJiAoRk9MTF9HRVQgfCBGT0xMX1BJTikpKTsKIAogCS8qCiAJICogSWYgRk9M TF9GT1JDRSBpcyBzZXQgdGhlbiBkbyBub3QgZm9yY2UgYSBmdWxsIGZhdWx0IGFzIHRoZSBoaW50 aW5nCkBAIC0xMDM2LDcgKzEwNDAsMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIF9f Z2V0X3VzZXJfcGFnZXNfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQlCVUdfT04o KmxvY2tlZCAhPSAxKTsKIAl9CiAKLQlpZiAocGFnZXMpCisJLyoKKwkgKiBGT0xMX1BJTiBhbmQg Rk9MTF9HRVQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gVHJhZGl0aW9uYWwgYmVoYXZpb3IKKwkg KiBpcyB0byBzZXQgRk9MTF9HRVQgaWYgdGhlIGNhbGxlciB3YW50cyBwYWdlc1tdIGZpbGxlZCBp biAoYnV0IGhhcworCSAqIGNhcmVsZXNzbHkgZmFpbGVkIHRvIHNwZWNpZnkgRk9MTF9HRVQpLCBz byBrZWVwIGRvaW5nIHRoYXQsIGJ1dCBvbmx5CisJICogZm9yIEZPTExfR0VULCBub3QgZm9yIHRo ZSBuZXdlciBGT0xMX1BJTi4KKwkgKgorCSAqIEZPTExfUElOIGFsd2F5cyBleHBlY3RzIHBhZ2Vz IHRvIGJlIG5vbi1udWxsLCBidXQgbm8gbmVlZCB0byBhc3NlcnQKKwkgKiB0aGF0IGhlcmUsIGFz IGFueSBmYWlsdXJlcyB3aWxsIGJlIG9idmlvdXMgZW5vdWdoLgorCSAqLworCWlmIChwYWdlcyAm JiAhKGZsYWdzICYgRk9MTF9QSU4pKQogCQlmbGFncyB8PSBGT0xMX0dFVDsKIAogCXBhZ2VzX2Rv bmUgPSAwOwpAQCAtMTE3Myw2ICsxMTg2LDEzIEBAIGxvbmcgZ2V0X3VzZXJfcGFnZXNfcmVtb3Rl KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJdW5zaWdu ZWQgaW50IGd1cF9mbGFncywgc3RydWN0IHBhZ2UgKipwYWdlcywKIAkJc3RydWN0IHZtX2FyZWFf c3RydWN0ICoqdm1hcywgaW50ICpsb2NrZWQpCiB7CisJLyoKKwkgKiBGT0xMX1BJTiBtdXN0IG9u bHkgYmUgc2V0IGludGVybmFsbHkgYnkgdGhlIHBpbl91c2VyX3BhZ2VzKigpIEFQSXMsCisJICog bmV2ZXIgZGlyZWN0bHkgYnkgdGhlIGNhbGxlciwgc28gZW5mb3JjZSB0aGF0IHdpdGggYW4gYXNz ZXJ0aW9uOgorCSAqLworCWlmIChXQVJOX09OX09OQ0UoZ3VwX2ZsYWdzICYgRk9MTF9QSU4pKQor CQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qCiAJICogUGFydHMgb2YgRk9MTF9MT05HVEVSTSBiZWhh dmlvciBhcmUgaW5jb21wYXRpYmxlIHdpdGgKIAkgKiBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIGJl Y2F1c2Ugb2YgdGhlIEZTIERBWCBjaGVjayByZXF1aXJlbWVudCBvbgpAQCAtMTY0MCw2ICsxNjYw LDEzIEBAIGxvbmcgZ2V0X3VzZXJfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQg bG9uZyBucl9wYWdlcywKIAkJdW5zaWduZWQgaW50IGd1cF9mbGFncywgc3RydWN0IHBhZ2UgKipw YWdlcywKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKIHsKKwkvKgorCSAqIEZPTExf UElOIG11c3Qgb25seSBiZSBzZXQgaW50ZXJuYWxseSBieSB0aGUgcGluX3VzZXJfcGFnZXMqKCkg QVBJcywKKwkgKiBuZXZlciBkaXJlY3RseSBieSB0aGUgY2FsbGVyLCBzbyBlbmZvcmNlIHRoYXQg d2l0aCBhbiBhc3NlcnRpb246CisJICovCisJaWYgKFdBUk5fT05fT05DRShndXBfZmxhZ3MgJiBG T0xMX1BJTikpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xv Y2tlZChjdXJyZW50LCBjdXJyZW50LT5tbSwgc3RhcnQsIG5yX3BhZ2VzLAogCQkJCSAgICAgcGFn ZXMsIHZtYXMsIGd1cF9mbGFncyB8IEZPTExfVE9VQ0gpOwogfQpAQCAtMjM5MCwyOSArMjQxNywx NCBAQCBzdGF0aWMgaW50IF9fZ3VwX2xvbmd0ZXJtX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3Rh cnQsIGludCBucl9wYWdlcywKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIGdldF91c2VyX3Bh Z2VzX2Zhc3QoKSAtIHBpbiB1c2VyIHBhZ2VzIGluIG1lbW9yeQotICogQHN0YXJ0OglzdGFydGlu ZyB1c2VyIGFkZHJlc3MKLSAqIEBucl9wYWdlczoJbnVtYmVyIG9mIHBhZ2VzIGZyb20gc3RhcnQg dG8gcGluCi0gKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgcGluIGJlaGF2aW91cgotICog QHBhZ2VzOglhcnJheSB0aGF0IHJlY2VpdmVzIHBvaW50ZXJzIHRvIHRoZSBwYWdlcyBwaW5uZWQu Ci0gKgkJU2hvdWxkIGJlIGF0IGxlYXN0IG5yX3BhZ2VzIGxvbmcuCi0gKgotICogQXR0ZW1wdCB0 byBwaW4gdXNlciBwYWdlcyBpbiBtZW1vcnkgd2l0aG91dCB0YWtpbmcgbW0tPm1tYXBfc2VtLgot ICogSWYgbm90IHN1Y2Nlc3NmdWwsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRha2luZyB0aGUgbG9j ayBhbmQKLSAqIGNhbGxpbmcgZ2V0X3VzZXJfcGFnZXMoKS4KLSAqCi0gKiBSZXR1cm5zIG51bWJl ciBvZiBwYWdlcyBwaW5uZWQuIFRoaXMgbWF5IGJlIGZld2VyIHRoYW4gdGhlIG51bWJlcgotICog cmVxdWVzdGVkLiBJZiBucl9wYWdlcyBpcyAwIG9yIG5lZ2F0aXZlLCByZXR1cm5zIDAuIElmIG5v IHBhZ2VzCi0gKiB3ZXJlIHBpbm5lZCwgcmV0dXJucyAtZXJybm8uCi0gKi8KLWludCBnZXRfdXNl cl9wYWdlc19mYXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBucl9wYWdlcywKLQkJCXVuc2ln bmVkIGludCBndXBfZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMpCitzdGF0aWMgaW50IGludGVy bmFsX2dldF91c2VyX3BhZ2VzX2Zhc3QodW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3BhZ2Vz LAorCQkJCQl1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLAorCQkJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2Vz KQogewogCXVuc2lnbmVkIGxvbmcgYWRkciwgbGVuLCBlbmQ7CiAJaW50IG5yID0gMCwgcmV0ID0g MDsKIAotCWlmIChXQVJOX09OX09OQ0UoZ3VwX2ZsYWdzICYgfihGT0xMX1dSSVRFIHwgRk9MTF9M T05HVEVSTSkpKQorCWlmIChXQVJOX09OX09OQ0UoZ3VwX2ZsYWdzICYgfihGT0xMX1dSSVRFIHwg Rk9MTF9MT05HVEVSTSB8IEZPTExfUElOKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3RhcnQg PSB1bnRhZ2dlZF9hZGRyKHN0YXJ0KSAmIFBBR0VfTUFTSzsKQEAgLTI0NTIsNCArMjQ2NCwxMDMg QEAgaW50IGdldF91c2VyX3BhZ2VzX2Zhc3QodW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3Bh Z2VzLAogCiAJcmV0dXJuIHJldDsKIH0KKworLyoqCisgKiBnZXRfdXNlcl9wYWdlc19mYXN0KCkg LSBwaW4gdXNlciBwYWdlcyBpbiBtZW1vcnkKKyAqIEBzdGFydDoJc3RhcnRpbmcgdXNlciBhZGRy ZXNzCisgKiBAbnJfcGFnZXM6CW51bWJlciBvZiBwYWdlcyBmcm9tIHN0YXJ0IHRvIHBpbgorICog QGd1cF9mbGFnczoJZmxhZ3MgbW9kaWZ5aW5nIHBpbiBiZWhhdmlvdXIKKyAqIEBwYWdlczoJYXJy YXkgdGhhdCByZWNlaXZlcyBwb2ludGVycyB0byB0aGUgcGFnZXMgcGlubmVkLgorICoJCVNob3Vs ZCBiZSBhdCBsZWFzdCBucl9wYWdlcyBsb25nLgorICoKKyAqIEF0dGVtcHQgdG8gcGluIHVzZXIg cGFnZXMgaW4gbWVtb3J5IHdpdGhvdXQgdGFraW5nIG1tLT5tbWFwX3NlbS4KKyAqIElmIG5vdCBz dWNjZXNzZnVsLCBpdCB3aWxsIGZhbGwgYmFjayB0byB0YWtpbmcgdGhlIGxvY2sgYW5kCisgKiBj YWxsaW5nIGdldF91c2VyX3BhZ2VzKCkuCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgcGFnZXMg cGlubmVkLiBUaGlzIG1heSBiZSBmZXdlciB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLgorICog SWYgbnJfcGFnZXMgaXMgMCBvciBuZWdhdGl2ZSwgcmV0dXJucyAwLiBJZiBubyBwYWdlcyB3ZXJl IHBpbm5lZCwgcmV0dXJucworICogLWVycm5vLgorICovCitpbnQgZ2V0X3VzZXJfcGFnZXNfZmFz dCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsCisJCQl1bnNpZ25lZCBpbnQgZ3Vw X2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQoreworCS8qCisJICogRk9MTF9QSU4gbXVzdCBv bmx5IGJlIHNldCBpbnRlcm5hbGx5IGJ5IHRoZSBwaW5fdXNlcl9wYWdlcyooKSBBUElzLAorCSAq IG5ldmVyIGRpcmVjdGx5IGJ5IHRoZSBjYWxsZXIsIHNvIGVuZm9yY2UgdGhhdDoKKwkgKi8KKwlp ZiAoV0FSTl9PTl9PTkNFKGd1cF9mbGFncyAmIEZPTExfUElOKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlyZXR1cm4gaW50ZXJuYWxfZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgbnJfcGFnZXMs IGd1cF9mbGFncywgcGFnZXMpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X3VzZXJfcGFnZXNf ZmFzdCk7CisKKy8qKgorICogcGluX3VzZXJfcGFnZXNfZmFzdCgpIC0gcGluIHVzZXIgcGFnZXMg aW4gbWVtb3J5IHdpdGhvdXQgdGFraW5nIGxvY2tzCisgKgorICogRm9yIG5vdywgdGhpcyBpcyBh IHBsYWNlaG9sZGVyIGZ1bmN0aW9uLCB1bnRpbCB2YXJpb3VzIGNhbGwgc2l0ZXMgYXJlCisgKiBj b252ZXJ0ZWQgdG8gdXNlIHRoZSBjb3JyZWN0IGdldF91c2VyX3BhZ2VzKigpIG9yIHBpbl91c2Vy X3BhZ2VzKigpIEFQSS4gU28sCisgKiB0aGlzIGlzIGlkZW50aWNhbCB0byBnZXRfdXNlcl9wYWdl c19mYXN0KCkuCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCBmb3IgQ2FzZSAxIChESU8pIGluIERv Y3VtZW50YXRpb24vdm0vcGluX3VzZXJfcGFnZXMucnN0LiBJdAorICogaXMgTk9UIGludGVuZGVk IGZvciBDYXNlIDIgKFJETUE6IGxvbmctdGVybSBwaW5zKS4KKyAqLworaW50IHBpbl91c2VyX3Bh Z2VzX2Zhc3QodW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3BhZ2VzLAorCQkJdW5zaWduZWQg aW50IGd1cF9mbGFncywgc3RydWN0IHBhZ2UgKipwYWdlcykKK3sKKwkvKgorCSAqIFRoaXMgaXMg YSBwbGFjZWhvbGRlciwgdW50aWwgdGhlIHBpbiBmdW5jdGlvbmFsaXR5IGlzIGFjdGl2YXRlZC4K KwkgKiBVbnRpbCB0aGVuLCBqdXN0IGJlaGF2ZSBsaWtlIHRoZSBjb3JyZXNwb25kaW5nIGdldF91 c2VyX3BhZ2VzKigpCisJICogcm91dGluZS4KKwkgKi8KKwlyZXR1cm4gZ2V0X3VzZXJfcGFnZXNf ZmFzdChzdGFydCwgbnJfcGFnZXMsIGd1cF9mbGFncywgcGFnZXMpOworfQorRVhQT1JUX1NZTUJP TF9HUEwocGluX3VzZXJfcGFnZXNfZmFzdCk7CisKKy8qKgorICogcGluX3VzZXJfcGFnZXNfcmVt b3RlKCkgLSBwaW4gcGFnZXMgb2YgYSByZW1vdGUgcHJvY2VzcyAodGFzayAhPSBjdXJyZW50KQor ICoKKyAqIEZvciBub3csIHRoaXMgaXMgYSBwbGFjZWhvbGRlciBmdW5jdGlvbiwgdW50aWwgdmFy aW91cyBjYWxsIHNpdGVzIGFyZQorICogY29udmVydGVkIHRvIHVzZSB0aGUgY29ycmVjdCBnZXRf dXNlcl9wYWdlcyooKSBvciBwaW5fdXNlcl9wYWdlcyooKSBBUEkuIFNvLAorICogdGhpcyBpcyBp ZGVudGljYWwgdG8gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKCkuCisgKgorICogVGhpcyBpcyBpbnRl bmRlZCBmb3IgQ2FzZSAxIChESU8pIGluIERvY3VtZW50YXRpb24vdm0vcGluX3VzZXJfcGFnZXMu cnN0LiBJdAorICogaXMgTk9UIGludGVuZGVkIGZvciBDYXNlIDIgKFJETUE6IGxvbmctdGVybSBw aW5zKS4KKyAqLworbG9uZyBwaW5fdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IHRhc2tfc3RydWN0 ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwg dW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSAgIHVuc2lnbmVkIGludCBndXBfZmxhZ3MsIHN0 cnVjdCBwYWdlICoqcGFnZXMsCisJCQkgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzLCBp bnQgKmxvY2tlZCkKK3sKKwkvKgorCSAqIFRoaXMgaXMgYSBwbGFjZWhvbGRlciwgdW50aWwgdGhl IHBpbiBmdW5jdGlvbmFsaXR5IGlzIGFjdGl2YXRlZC4KKwkgKiBVbnRpbCB0aGVuLCBqdXN0IGJl aGF2ZSBsaWtlIHRoZSBjb3JyZXNwb25kaW5nIGdldF91c2VyX3BhZ2VzKigpCisJICogcm91dGlu ZS4KKwkgKi8KKwlyZXR1cm4gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKHRzaywgbW0sIHN0YXJ0LCBu cl9wYWdlcywgZ3VwX2ZsYWdzLCBwYWdlcywKKwkJCQkgICAgIHZtYXMsIGxvY2tlZCk7Cit9CitF WFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzX3JlbW90ZSk7CisKKy8qKgorICogcGluX3VzZXJf cGFnZXMoKSAtIHBpbiB1c2VyIHBhZ2VzIGluIG1lbW9yeSBmb3IgdXNlIGJ5IG90aGVyIGRldmlj ZXMKKyAqCisgKiBGb3Igbm93LCB0aGlzIGlzIGEgcGxhY2Vob2xkZXIgZnVuY3Rpb24sIHVudGls IHZhcmlvdXMgY2FsbCBzaXRlcyBhcmUKKyAqIGNvbnZlcnRlZCB0byB1c2UgdGhlIGNvcnJlY3Qg Z2V0X3VzZXJfcGFnZXMqKCkgb3IgcGluX3VzZXJfcGFnZXMqKCkgQVBJLiBTbywKKyAqIHRoaXMg aXMgaWRlbnRpY2FsIHRvIGdldF91c2VyX3BhZ2VzKCkuCisgKgorICogVGhpcyBpcyBpbnRlbmRl ZCBmb3IgQ2FzZSAxIChESU8pIGluIERvY3VtZW50YXRpb24vdm0vcGluX3VzZXJfcGFnZXMucnN0 LiBJdAorICogaXMgTk9UIGludGVuZGVkIGZvciBDYXNlIDIgKFJETUE6IGxvbmctdGVybSBwaW5z KS4KKyAqLworbG9uZyBwaW5fdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25l ZCBsb25nIG5yX3BhZ2VzLAorCQkgICAgdW5zaWduZWQgaW50IGd1cF9mbGFncywgc3RydWN0IHBh Z2UgKipwYWdlcywKKwkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCit7CisJLyoK KwkgKiBUaGlzIGlzIGEgcGxhY2Vob2xkZXIsIHVudGlsIHRoZSBwaW4gZnVuY3Rpb25hbGl0eSBp cyBhY3RpdmF0ZWQuCisJICogVW50aWwgdGhlbiwganVzdCBiZWhhdmUgbGlrZSB0aGUgY29ycmVz cG9uZGluZyBnZXRfdXNlcl9wYWdlcyooKQorCSAqIHJvdXRpbmUuCisJICovCisJcmV0dXJuIGdl dF91c2VyX3BhZ2VzKHN0YXJ0LCBucl9wYWdlcywgZ3VwX2ZsYWdzLCBwYWdlcywgdm1hcyk7Cit9 CitFWFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzKTsKLS0gCjIuMjQuMAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs 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=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT 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 7907AC43141 for ; Fri, 15 Nov 2019 05:54:00 +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 56CFA2073A for ; Fri, 15 Nov 2019 05:54:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 56CFA2073A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nvidia.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E4F9C6E15A; Fri, 15 Nov 2019 05:53:56 +0000 (UTC) Received: from hqemgate16.nvidia.com (hqemgate16.nvidia.com [216.228.121.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id C82426E061 for ; Fri, 15 Nov 2019 05:53:45 +0000 (UTC) Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate16.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Thu, 14 Nov 2019 21:53:45 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Thu, 14 Nov 2019 21:53:45 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Thu, 14 Nov 2019 21:53:45 -0800 Received: from HQMAIL109.nvidia.com (172.20.187.15) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 15 Nov 2019 05:53:44 +0000 Received: from HQMAIL111.nvidia.com (172.20.187.18) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 15 Nov 2019 05:53:44 +0000 Received: from hqnvemgw03.nvidia.com (10.124.88.68) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Fri, 15 Nov 2019 05:53:44 +0000 Received: from blueforge.nvidia.com (Not Verified[10.110.48.28]) by hqnvemgw03.nvidia.com with Trustwave SEG (v7, 5, 8, 10121) id ; Thu, 14 Nov 2019 21:53:44 -0800 From: John Hubbard To: Andrew Morton Subject: [PATCH v5 10/24] mm/gup: introduce pin_user_pages*() and FOLL_PIN Date: Thu, 14 Nov 2019 21:53:26 -0800 Message-ID: <20191115055340.1825745-11-jhubbard@nvidia.com> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191115055340.1825745-1-jhubbard@nvidia.com> References: <20191115055340.1825745-1-jhubbard@nvidia.com> MIME-Version: 1.0 X-NVConfidentiality: public X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1573797225; bh=jrlziN/kWOdMUS2Xie1x6U9h/2FdaoWzHunmu+MjX9M=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:X-NVConfidentiality: Content-Type:Content-Transfer-Encoding; b=PNGXJXt6adTTa6jor+eP2ltsddiHVQGdcU4vPGssYf6AsX7k1/UOSBJlQpSs53Zvf P1BhevhVJyAPAycVg1h2xqELDfqfLW170O3GPagxkz+FA0kR19tdMiZUURSfIYo1po chkjSqKEoqA5y+DKfGTpStOpKXvM2mRZncBeltUTi1/tY7veb8D5mkJ3sfRh+L1vuv 2AjH5U/TuLVjdjyuy0IdR4GPytpjMFVELWlYvlzEtKqRkvs8e5yunVmdnQgPMgSDRK 0OrmZqRZ1++WoNtFiO6bogpZAJ77VNtcrKAYIX/076OYZZhkAkdoGXduuenfVJcG6r 5W75NWlXSudcw== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michal Hocko , Jan Kara , kvm@vger.kernel.org, linux-doc@vger.kernel.org, David Airlie , Dave Chinner , dri-devel@lists.freedesktop.org, LKML , linux-mm@kvack.org, Paul Mackerras , linux-kselftest@vger.kernel.org, Ira Weiny , Jonathan Corbet , linux-rdma@vger.kernel.org, Michael Ellerman , Mike Rapoport , Christoph Hellwig , Jason Gunthorpe , Vlastimil Babka , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , linux-media@vger.kernel.org, Shuah Khan , John Hubbard , linux-block@vger.kernel.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Al Viro , Dan Williams , Mauro Carvalho Chehab , Magnus Karlsson , Jens Axboe , netdev@vger.kernel.org, Alex Williamson , linux-fsdevel@vger.kernel.org, bpf@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, "David S . Miller" , Mike Kravetz Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191115055326.GWycWhZy8poGF6ouqb49XGcah7F-7Gx8mY7or2zhgws@z> SW50cm9kdWNlIHBpbl91c2VyX3BhZ2VzKigpIHZhcmlhdGlvbnMgb2YgZ2V0X3VzZXJfcGFnZXMq KCkgY2FsbHMsCmFuZCBhbHNvIHBpbl9sb25ndGVybV9wYWdlcyooKSB2YXJpYXRpb25zLgoKRm9y IG5vdywgdGhlc2UgYXJlIHBsYWNlaG9sZGVyIGNhbGxzLCB1bnRpbCB0aGUgdmFyaW91cyBjYWxs IHNpdGVzCmFyZSBjb252ZXJ0ZWQgdG8gdXNlIHRoZSBjb3JyZWN0IGdldF91c2VyX3BhZ2VzKigp IG9yCnBpbl91c2VyX3BhZ2VzKigpIEFQSS4KClRoZXNlIHZhcmlhbnRzIHdpbGwgZXZlbnR1YWxs eSBhbGwgc2V0IEZPTExfUElOLCB3aGljaCBpcyBhbHNvCmludHJvZHVjZWQsIGFuZCB0aG9yb3Vn aGx5IGRvY3VtZW50ZWQuCgogICAgcGluX3VzZXJfcGFnZXMoKQogICAgcGluX3VzZXJfcGFnZXNf cmVtb3RlKCkKICAgIHBpbl91c2VyX3BhZ2VzX2Zhc3QoKQoKQWxsIHBhZ2VzIHRoYXQgYXJlIHBp bm5lZCB2aWEgdGhlIGFib3ZlIGNhbGxzLCBtdXN0IGJlIHVucGlubmVkIHZpYQpwdXRfdXNlcl9w YWdlKCkuCgpUaGUgdW5kZXJseWluZyBydWxlcyBhcmU6CgoqIEZPTExfUElOIGlzIGEgZ3VwLWlu dGVybmFsIGZsYWcsIHNvIHRoZSBjYWxsIHNpdGVzIHNob3VsZCBub3QgZGlyZWN0bHkKc2V0IGl0 LiBUaGF0IGJlaGF2aW9yIGlzIGVuZm9yY2VkIHdpdGggYXNzZXJ0aW9ucy4KCiogQ2FsbCBzaXRl cyB0aGF0IHdhbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGV5IGFyZSBnb2luZyB0byBkbyBEaXJlY3RJ TwogICgiRElPIikgb3Igc29tZXRoaW5nIHdpdGggc2ltaWxhciBjaGFyYWN0ZXJpc3RpY3MsIHNo b3VsZCBjYWxsIGEKICBnZXRfdXNlcl9wYWdlcygpLWxpa2Ugd3JhcHBlciBjYWxsIHRoYXQgc2V0 cyBGT0xMX1BJTi4gVGhlc2Ugd3JhcHBlcnMKICB3aWxsOgogICAgICAgICogU3RhcnQgd2l0aCAi cGluX3VzZXJfcGFnZXMiIGluc3RlYWQgb2YgImdldF91c2VyX3BhZ2VzIi4gVGhhdAogICAgICAg ICAgbWFrZXMgaXQgZWFzeSB0byBmaW5kIGFuZCBhdWRpdCB0aGUgY2FsbCBzaXRlcy4KICAgICAg ICAqIFNldCBGT0xMX1BJTgoKKiBGb3IgcGFnZXMgdGhhdCBhcmUgcmVjZWl2ZWQgdmlhIEZPTExf UElOLCB0aG9zZSBwYWdlcyBtdXN0IGJlIHJldHVybmVkCiAgdmlhIHB1dF91c2VyX3BhZ2UoKS4K ClRoYW5rcyB0byBKYW4gS2FyYSBhbmQgVmxhc3RpbWlsIEJhYmthIGZvciBleHBsYWluaW5nIHRo ZSA0IGNhc2VzCmluIHRoaXMgZG9jdW1lbnRhdGlvbi4gKEkndmUgcmV3b3JkZWQgaXQgYW5kIGV4 cGFuZGVkIHVwb24gaXQuKQoKUmV2aWV3ZWQtYnk6IE1pa2UgUmFwb3BvcnQgPHJwcHRAbGludXgu aWJtLmNvbT4gICMgRG9jdW1lbnRhdGlvbgpSZXZpZXdlZC1ieTogSsOpcsO0bWUgR2xpc3NlIDxq Z2xpc3NlQHJlZGhhdC5jb20+CkNjOiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgpD YzogSXJhIFdlaW55IDxpcmEud2VpbnlAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBKb2huIEh1 YmJhcmQgPGpodWJiYXJkQG52aWRpYS5jb20+Ci0tLQogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9p bmRleC5yc3QgICAgICAgICAgfCAgIDEgKwogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNl cl9wYWdlcy5yc3QgfCAyMzMgKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9t bS5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjMgKysrKy0tCiBtbS9ndXAuYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1MyArKysrKysrKysrKystLQogNCBmaWxlcyBj aGFuZ2VkLCA0MTYgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNlcl9wYWdlcy5yc3QKCmRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vY29y ZS1hcGkvaW5kZXgucnN0CmluZGV4IGFiMGVhZTFjMTUzYS4uNDEzZjdkN2M4NjQyIDEwMDY0NAot LS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2luZGV4LnJzdAorKysgYi9Eb2N1bWVudGF0aW9u L2NvcmUtYXBpL2luZGV4LnJzdApAQCAtMzEsNiArMzEsNyBAQCBDb3JlIHV0aWxpdGllcwogICAg Z2VuZXJpYy1yYWRpeC10cmVlCiAgICBtZW1vcnktYWxsb2NhdGlvbgogICAgbW0tYXBpCisgICBw aW5fdXNlcl9wYWdlcwogICAgZ2ZwX21hc2stZnJvbS1mcy1pbwogICAgdGltZWtlZXBpbmcKICAg IGJvb3QtdGltZS1tbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9waW5fdXNl cl9wYWdlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL3Bpbl91c2VyX3BhZ2VzLnJzdApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRmMjY2MzdhNTAwNQotLS0g L2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvcGluX3VzZXJfcGFnZXMucnN0 CkBAIC0wLDAgKzEsMjMzIEBACisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAor Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Citw aW5fdXNlcl9wYWdlcygpIGFuZCByZWxhdGVkIGNhbGxzCis9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIGNvbnRlbnRzOjogOmxvY2FsOgor CitPdmVydmlldworPT09PT09PT0KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGZvbGxv d2luZyBmdW5jdGlvbnM6IDo6CisKKyBwaW5fdXNlcl9wYWdlcworIHBpbl91c2VyX3BhZ2VzX2Zh c3QKKyBwaW5fdXNlcl9wYWdlc19yZW1vdGUKKworQmFzaWMgZGVzY3JpcHRpb24gb2YgRk9MTF9Q SU4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZPTExfUElOIGFuZCBGT0xMX0xP TkdURVJNIGFyZSBmbGFncyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGdldF91c2VyX3BhZ2Vz KigpCisoImd1cCIpIGZhbWlseSBvZiBmdW5jdGlvbnMuIEZPTExfUElOIGhhcyBzaWduaWZpY2Fu dCBpbnRlcmFjdGlvbnMgYW5kCitpbnRlcmRlcGVuZGVuY2llcyB3aXRoIEZPTExfTE9OR1RFUk0s IHNvIGJvdGggYXJlIGNvdmVyZWQgaGVyZS4KKworRk9MTF9QSU4gaXMgaW50ZXJuYWwgdG8gZ3Vw LCBtZWFuaW5nIHRoYXQgaXQgc2hvdWxkIG5vdCBhcHBlYXIgYXQgdGhlIGd1cCBjYWxsCitzaXRl cy4gVGhpcyBhbGxvd3MgdGhlIGFzc29jaWF0ZWQgd3JhcHBlciBmdW5jdGlvbnMgIChwaW5fdXNl cl9wYWdlcyooKSBhbmQKK290aGVycykgdG8gc2V0IHRoZSBjb3JyZWN0IGNvbWJpbmF0aW9uIG9m IHRoZXNlIGZsYWdzLCBhbmQgdG8gY2hlY2sgZm9yIHByb2JsZW1zCithcyB3ZWxsLgorCitGT0xM X0xPTkdURVJNLCBvbiB0aGUgb3RoZXIgaGFuZCwgKmlzKiBhbGxvd2VkIHRvIGJlIHNldCBhdCB0 aGUgZ3VwIGNhbGwgc2l0ZXMuCitUaGlzIGlzIGluIG9yZGVyIHRvIGF2b2lkIGNyZWF0aW5nIGEg bGFyZ2UgbnVtYmVyIG9mIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGNvdmVyCithbGwgY29tYmluYXRp b25zIG9mIGdldCooKSwgcGluKigpLCBGT0xMX0xPTkdURVJNLCBhbmQgbW9yZS4gQWxzbywgdGhl CitwaW5fdXNlcl9wYWdlcyooKSBBUElzIGFyZSBjbGVhcmx5IGRpc3RpbmN0IGZyb20gdGhlIGdl dF91c2VyX3BhZ2VzKigpIEFQSXMsIHNvCit0aGF0J3MgYSBuYXR1cmFsIGRpdmlkaW5nIGxpbmUs IGFuZCBhIGdvb2QgcG9pbnQgdG8gbWFrZSBzZXBhcmF0ZSB3cmFwcGVyIGNhbGxzLgorSW4gb3Ro ZXIgd29yZHMsIHVzZSBwaW5fdXNlcl9wYWdlcyooKSBmb3IgRE1BLXBpbm5lZCBwYWdlcywgYW5k CitnZXRfdXNlcl9wYWdlcyooKSBmb3Igb3RoZXIgY2FzZXMuIFRoZXJlIGFyZSBmb3VyIGNhc2Vz IGRlc2NyaWJlZCBsYXRlciBvbiBpbgordGhpcyBkb2N1bWVudCwgdG8gZnVydGhlciBjbGFyaWZ5 IHRoYXQgY29uY2VwdC4KKworRk9MTF9QSU4gYW5kIEZPTExfR0VUIGFyZSBtdXR1YWxseSBleGNs dXNpdmUgZm9yIGEgZ2l2ZW4gZ3VwIGNhbGwuIEhvd2V2ZXIsCittdWx0aXBsZSB0aHJlYWRzIGFu ZCBjYWxsIHNpdGVzIGFyZSBmcmVlIHRvIHBpbiB0aGUgc2FtZSBzdHJ1Y3QgcGFnZXMsIHZpYSBi b3RoCitGT0xMX1BJTiBhbmQgRk9MTF9HRVQuIEl0J3MganVzdCB0aGUgY2FsbCBzaXRlIHRoYXQg bmVlZHMgdG8gY2hvb3NlIG9uZSBvciB0aGUKK290aGVyLCBub3QgdGhlIHN0cnVjdCBwYWdlKHMp LgorCitUaGUgRk9MTF9QSU4gaW1wbGVtZW50YXRpb24gaXMgbmVhcmx5IHRoZSBzYW1lIGFzIEZP TExfR0VULCBleGNlcHQgdGhhdCBGT0xMX1BJTgordXNlcyBhIGRpZmZlcmVudCByZWZlcmVuY2Ug Y291bnRpbmcgdGVjaG5pcXVlLgorCitGT0xMX1BJTiBpcyBhIHByZXJlcXVpc2l0ZSB0byBGT0xM X0xPTkdUR0VSTS4gQW5vdGhlciB3YXkgb2Ygc2F5aW5nIHRoYXQgaXMsCitGT0xMX0xPTkdURVJN IGlzIGEgc3BlY2lmaWMgY2FzZSwgbW9yZSByZXN0cmljdGl2ZSBjYXNlIG9mIEZPTExfUElOLgor CitXaGljaCBmbGFncyBhcmUgc2V0IGJ5IGVhY2ggd3JhcHBlcgorPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKworRm9yIHRoZXNlIHBpbl91c2VyX3BhZ2VzKigpIGZ1bmN0aW9u cywgRk9MTF9QSU4gaXMgT1InZCBpbiB3aXRoIHdoYXRldmVyIGd1cAorZmxhZ3MgdGhlIGNhbGxl ciBwcm92aWRlcy4gVGhlIGNhbGxlciBpcyByZXF1aXJlZCB0byBwYXNzIGluIGEgbm9uLW51bGwg c3RydWN0CitwYWdlcyogYXJyYXksIGFuZCB0aGUgZnVuY3Rpb24gdGhlbiBwaW4gcGFnZXMgYnkg aW5jcmVtZW50aW5nIGVhY2ggYnkgYSBzcGVjaWFsCit2YWx1ZS4gRm9yIG5vdywgdGhhdCB2YWx1 ZSBpcyArMSwganVzdCBsaWtlIGdldF91c2VyX3BhZ2VzKigpLjo6CisKKyBGdW5jdGlvbgorIC0t LS0tLS0tCisgcGluX3VzZXJfcGFnZXMgICAgICAgICAgRk9MTF9QSU4gaXMgYWx3YXlzIHNldCBp bnRlcm5hbGx5IGJ5IHRoaXMgZnVuY3Rpb24uCisgcGluX3VzZXJfcGFnZXNfZmFzdCAgICAgRk9M TF9QSU4gaXMgYWx3YXlzIHNldCBpbnRlcm5hbGx5IGJ5IHRoaXMgZnVuY3Rpb24uCisgcGluX3Vz ZXJfcGFnZXNfcmVtb3RlICAgRk9MTF9QSU4gaXMgYWx3YXlzIHNldCBpbnRlcm5hbGx5IGJ5IHRo aXMgZnVuY3Rpb24uCisKK0ZvciB0aGVzZSBnZXRfdXNlcl9wYWdlcyooKSBmdW5jdGlvbnMsIEZP TExfR0VUIG1pZ2h0IG5vdCBldmVuIGJlIHNwZWNpZmllZC4KK0JlaGF2aW9yIGlzIGEgbGl0dGxl IG1vcmUgY29tcGxleCB0aGFuIGFib3ZlLiBJZiBGT0xMX0dFVCB3YXMgKm5vdCogc3BlY2lmaWVk LAorYnV0IHRoZSBjYWxsZXIgcGFzc2VkIGluIGEgbm9uLW51bGwgc3RydWN0IHBhZ2VzKiBhcnJh eSwgdGhlbiB0aGUgZnVuY3Rpb24KK3NldHMgRk9MTF9HRVQgZm9yIHlvdSwgYW5kIHByb2NlZWRz IHRvIHBpbiBwYWdlcyBieSBpbmNyZW1lbnRpbmcgdGhlIHJlZmNvdW50CitvZiBlYWNoIHBhZ2Ug YnkgKzEuOjoKKworIEZ1bmN0aW9uCisgLS0tLS0tLS0KKyBnZXRfdXNlcl9wYWdlcyAgICAgICAg ICAgRk9MTF9HRVQgaXMgc29tZXRpbWVzIHNldCBpbnRlcm5hbGx5IGJ5IHRoaXMgZnVuY3Rpb24u CisgZ2V0X3VzZXJfcGFnZXNfZmFzdCAgICAgIEZPTExfR0VUIGlzIHNvbWV0aW1lcyBzZXQgaW50 ZXJuYWxseSBieSB0aGlzIGZ1bmN0aW9uLgorIGdldF91c2VyX3BhZ2VzX3JlbW90ZSAgICBGT0xM X0dFVCBpcyBzb21ldGltZXMgc2V0IGludGVybmFsbHkgYnkgdGhpcyBmdW5jdGlvbi4KKworVHJh Y2tpbmcgZG1hLXBpbm5lZCBwYWdlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitTb21l IG9mIHRoZSBrZXkgZGVzaWduIGNvbnN0cmFpbnRzLCBhbmQgc29sdXRpb25zLCBmb3IgdHJhY2tp bmcgZG1hLXBpbm5lZAorcGFnZXM6CisKKyogQW4gYWN0dWFsIHJlZmVyZW5jZSBjb3VudCwgcGVy IHN0cnVjdCBwYWdlLCBpcyByZXF1aXJlZC4gVGhpcyBpcyBiZWNhdXNlCisgIG11bHRpcGxlIHBy b2Nlc3NlcyBtYXkgcGluIGFuZCB1bnBpbiBhIHBhZ2UuCisKKyogRmFsc2UgcG9zaXRpdmVzIChy ZXBvcnRpbmcgdGhhdCBhIHBhZ2UgaXMgZG1hLXBpbm5lZCwgd2hlbiBpbiBmYWN0IGl0IGlzIG5v dCkKKyAgYXJlIGFjY2VwdGFibGUsIGJ1dCBmYWxzZSBuZWdhdGl2ZXMgYXJlIG5vdC4KKworKiBz dHJ1Y3QgcGFnZSBtYXkgbm90IGJlIGluY3JlYXNlZCBpbiBzaXplIGZvciB0aGlzLCBhbmQgYWxs IGZpZWxkcyBhcmUgYWxyZWFkeQorICB1c2VkLgorCisqIEdpdmVuIHRoZSBhYm92ZSwgd2UgY2Fu IG92ZXJsb2FkIHRoZSBwYWdlLT5fcmVmY291bnQgZmllbGQgYnkgdXNpbmcsIHNvcnQgb2YsCisg IHRoZSB1cHBlciBiaXRzIGluIHRoYXQgZmllbGQgZm9yIGEgZG1hLXBpbm5lZCBjb3VudC4gIlNv cnQgb2YiLCBtZWFucyB0aGF0LAorICByYXRoZXIgdGhhbiBkaXZpZGluZyBwYWdlLT5fcmVmY291 bnQgaW50byBiaXQgZmllbGRzLCB3ZSBzaW1wbGUgYWRkIGEgbWVkaXVtLQorICBsYXJnZSB2YWx1 ZSAoR1VQX1BJTl9DT1VOVElOR19CSUFTLCBpbml0aWFsbHkgY2hvc2VuIHRvIGJlIDEwMjQ6IDEw IGJpdHMpIHRvCisgIHBhZ2UtPl9yZWZjb3VudC4gVGhpcyBwcm92aWRlcyBmdXp6eSBiZWhhdmlv cjogaWYgYSBwYWdlIGhhcyBnZXRfcGFnZSgpIGNhbGxlZAorICBvbiBpdCAxMDI0IHRpbWVzLCB0 aGVuIGl0IHdpbGwgYXBwZWFyIHRvIGhhdmUgYSBzaW5nbGUgZG1hLXBpbm5lZCBjb3VudC4KKyAg QW5kIGFnYWluLCB0aGF0J3MgYWNjZXB0YWJsZS4KKworVGhpcyBhbHNvIGxlYWRzIHRvIGxpbWl0 YXRpb25zOiB0aGVyZSBhcmUgb25seSAzMS0xMD09MjEgYml0cyBhdmFpbGFibGUgZm9yIGEKK2Nv dW50ZXIgdGhhdCBpbmNyZW1lbnRzIDEwIGJpdHMgYXQgYSB0aW1lLgorCitUT0RPOiBmb3IgMUdC IGFuZCBsYXJnZXIgaHVnZSBwYWdlcywgdGhpcyBpcyBjdXR0aW5nIGl0IGNsb3NlLiBUaGF0J3Mg YmVjYXVzZQord2hlbiBwaW5fdXNlcl9wYWdlcygpIGZvbGxvd3Mgc3VjaCBwYWdlcywgaXQgaW5j cmVtZW50cyB0aGUgaGVhZCBwYWdlIGJ5ICIxIgorKHdoZXJlICIxIiB1c2VkIHRvIG1lYW4gIisx IiBmb3IgZ2V0X3VzZXJfcGFnZXMoKSwgYnV0IG5vdyBtZWFucyAiKzEwMjQiIGZvcgorcGluX3Vz ZXJfcGFnZXMoKSkgZm9yIGVhY2ggdGFpbCBwYWdlLiBTbyBpZiB5b3UgaGF2ZSBhIDFHQiBodWdl IHBhZ2U6CisKKyogVGhlcmUgYXJlIDI1NksgKDE4IGJpdHMpIHdvcnRoIG9mIDQgS0IgdGFpbCBw YWdlcy4KKyogVGhlcmUgYXJlIDIxIGJpdHMgYXZhaWxhYmxlIHRvIGNvdW50IHVwIHZpYSBHVVBf UElOX0NPVU5USU5HX0JJQVMgKHRoYXQgaXMsCisgIDEwIGJpdHMgYXQgYSB0aW1lKQorKiBUaGVy ZSBhcmUgMjEgLSAxOCA9PSAzIGJpdHMgYXZhaWxhYmxlIHRvIGNvdW50LiBFeGNlcHQgdGhhdCB0 aGVyZSBhcmVuJ3QsCisgIGJlY2F1c2UgeW91IG5lZWQgdG8gYWxsb3cgZm9yIGEgZmV3IG5vcm1h bCBnZXRfcGFnZSgpIGNhbGxzIG9uIHRoZSBoZWFkIHBhZ2UsCisgIGFzIHdlbGwuIEZvcnR1bmF0 ZWx5LCB0aGUgYXBwcm9hY2ggb2YgdXNpbmcgYWRkaXRpb24sIHJhdGhlciB0aGFuICJoYXJkIgor ICBiaXRmaWVsZHMsIHdpdGhpbiBwYWdlLT5fcmVmY291bnQsIGFsbG93cyBmb3Igc2hhcmluZyB0 aGVzZSBiaXRzIGdyYWNlZnVsbHkuCisgIEJ1dCB3ZSdyZSBzdGlsbCBsb29raW5nIGF0IGFib3V0 IDggcmVmZXJlbmNlcy4KKworVGhpcywgaG93ZXZlciwgaXMgYSBtaXNzaW5nIGZlYXR1cmUgbW9y ZSB0aGFuIGFueXRoaW5nIGVsc2UsIGJlY2F1c2UgaXQncyBlYXNpbHkKK3NvbHZlZCBieSBhZGRy ZXNzaW5nIGFuIG9idmlvdXMgaW5lZmZpY2llbmN5IGluIHRoZSBvcmlnaW5hbCBnZXRfdXNlcl9w YWdlcygpCithcHByb2FjaCBvZiByZXRyaWV2aW5nIHBhZ2VzOiBzdG9wIHRyZWF0aW5nIGFsbCB0 aGUgcGFnZXMgYXMgaWYgdGhleSB3ZXJlCitQQUdFX1NJWkUuIFJldHJpZXZlIGh1Z2UgcGFnZXMg YXMgaHVnZSBwYWdlcy4gVGhlIGNhbGxlcnMgbmVlZCB0byBiZSBhd2FyZSBvZgordGhpcywgc28g c29tZSB3b3JrIGlzIHJlcXVpcmVkLiBPbmNlIHRoYXQncyBpbiBwbGFjZSwgdGhpcyBsaW1pdGF0 aW9uIG1vc3RseQorZGlzYXBwZWFycyBmcm9tIHZpZXcsIGJlY2F1c2UgdGhlcmUgd2lsbCBiZSBh bXBsZSByZWZjb3VudGluZyByYW5nZSBhdmFpbGFibGUuCisKKyogQ2FsbGVycyBtdXN0IHNwZWNp ZmljYWxseSByZXF1ZXN0ICJkbWEtcGlubmVkIHRyYWNraW5nIG9mIHBhZ2VzIi4gSW4gb3RoZXIK KyAgd29yZHMsIGp1c3QgY2FsbGluZyBnZXRfdXNlcl9wYWdlcygpIHdpbGwgbm90IHN1ZmZpY2U7 IGEgbmV3IHNldCBvZiBmdW5jdGlvbnMsCisgIHBpbl91c2VyX3BhZ2UoKSBhbmQgcmVsYXRlZCwg bXVzdCBiZSB1c2VkLgorCitGT0xMX1BJTiwgRk9MTF9HRVQsIEZPTExfTE9OR1RFUk06IHdoZW4g dG8gdXNlIHdoaWNoIGZsYWdzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisKK1RoYW5rcyB0byBKYW4gS2FyYSwgVmxhc3RpbWlsIEJh YmthIGFuZCBzZXZlcmFsIG90aGVyIC1tbSBwZW9wbGUsIGZvciBkZXNjcmliaW5nCit0aGVzZSBj YXRlZ29yaWVzOgorCitDQVNFIDE6IERpcmVjdCBJTyAoRElPKQorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KK1RoZXJlIGFyZSBHVVAgcmVmZXJlbmNlcyB0byBwYWdlcyB0aGF0IGFyZSBzZXJ2aW5n CithcyBESU8gYnVmZmVycy4gVGhlc2UgYnVmZmVycyBhcmUgbmVlZGVkIGZvciBhIHJlbGF0aXZl bHkgc2hvcnQgdGltZSAoc28gdGhleQorYXJlIG5vdCAibG9uZyB0ZXJtIikuIE5vIHNwZWNpYWwg c3luY2hyb25pemF0aW9uIHdpdGggcGFnZV9ta2NsZWFuKCkgb3IKK211bm1hcCgpIGlzIHByb3Zp ZGVkLiBUaGVyZWZvcmUsIGZsYWdzIHRvIHNldCBhdCB0aGUgY2FsbCBzaXRlIGFyZTogOjoKKwor ICAgIEZPTExfUElOCisKKy4uLmJ1dCByYXRoZXIgdGhhbiBzZXR0aW5nIEZPTExfUElOIGRpcmVj dGx5LCBjYWxsIHNpdGVzIHNob3VsZCB1c2Ugb25lIG9mCit0aGUgcGluX3VzZXJfcGFnZXMqKCkg cm91dGluZXMgdGhhdCBzZXQgRk9MTF9QSU4uCisKK0NBU0UgMjogUkRNQQorLS0tLS0tLS0tLS0t CitUaGVyZSBhcmUgR1VQIHJlZmVyZW5jZXMgdG8gcGFnZXMgdGhhdCBhcmUgc2VydmluZyBhcyBE TUEKK2J1ZmZlcnMuIFRoZXNlIGJ1ZmZlcnMgYXJlIG5lZWRlZCBmb3IgYSBsb25nIHRpbWUgKCJs b25nIHRlcm0iKS4gTm8gc3BlY2lhbAorc3luY2hyb25pemF0aW9uIHdpdGggcGFnZV9ta2NsZWFu KCkgb3IgbXVubWFwKCkgaXMgcHJvdmlkZWQuIFRoZXJlZm9yZSwgZmxhZ3MKK3RvIHNldCBhdCB0 aGUgY2FsbCBzaXRlIGFyZTogOjoKKworICAgIEZPTExfUElOIHwgRk9MTF9MT05HVEVSTQorCitO T1RFOiBTb21lIHBhZ2VzLCBzdWNoIGFzIERBWCBwYWdlcywgY2Fubm90IGJlIHBpbm5lZCB3aXRo IGxvbmd0ZXJtIHBpbnMuIFRoYXQncworYmVjYXVzZSBEQVggcGFnZXMgZG8gbm90IGhhdmUgYSBz ZXBhcmF0ZSBwYWdlIGNhY2hlLCBhbmQgc28gInBpbm5pbmciIGltcGxpZXMKK2xvY2tpbmcgZG93 biBmaWxlIHN5c3RlbSBibG9ja3MsIHdoaWNoIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQgaW4gdGhh dCB3YXkuCisKK0NBU0UgMzogSGFyZHdhcmUgd2l0aCBwYWdlIGZhdWx0aW5nIHN1cHBvcnQKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hlcmUsIGEgd2VsbC13 cml0dGVuIGRyaXZlciBkb2Vzbid0IG5vcm1hbGx5IG5lZWQgdG8gcGluIHBhZ2VzIGF0IGFsbC4g SG93ZXZlciwKK2lmIHRoZSBkcml2ZXIgZG9lcyBjaG9vc2UgdG8gZG8gc28sIGl0IGNhbiByZWdp c3RlciBNTVUgbm90aWZpZXJzIGZvciB0aGUgcmFuZ2UsCithbmQgd2lsbCBiZSBjYWxsZWQgYmFj ayB1cG9uIGludmFsaWRhdGlvbi4gRWl0aGVyIHdheSAoYXZvaWRpbmcgcGFnZSBwaW5uaW5nLCBv cgordXNpbmcgTU1VIG5vdGlmaWVycyB0byB1bnBpbiB1cG9uIHJlcXVlc3QpLCB0aGVyZSBpcyBw cm9wZXIgc3luY2hyb25pemF0aW9uIHdpdGgKK2JvdGggZmlsZXN5c3RlbSBhbmQgbW0gKHBhZ2Vf bWtjbGVhbigpLCBtdW5tYXAoKSwgZXRjKS4KKworVGhlcmVmb3JlLCBuZWl0aGVyIGZsYWcgbmVl ZHMgdG8gYmUgc2V0LgorCitJbiB0aGlzIGNhc2UsIGlkZWFsbHksIG5laXRoZXIgZ2V0X3VzZXJf cGFnZXMoKSBub3IgcGluX3VzZXJfcGFnZXMoKSBzaG91bGQgYmUKK2NhbGxlZC4gSW5zdGVhZCwg dGhlIHNvZnR3YXJlIHNob3VsZCBiZSB3cml0dGVuIHNvIHRoYXQgaXQgZG9lcyBub3QgcGluIHBh Z2VzLgorVGhpcyBhbGxvd3MgbW0gYW5kIGZpbGVzeXN0ZW1zIHRvIG9wZXJhdGUgbW9yZSBlZmZp Y2llbnRseSBhbmQgcmVsaWFibHkuCisKK0NBU0UgNDogUGlubmluZyBmb3Igc3RydWN0IHBhZ2Ug bWFuaXB1bGF0aW9uIG9ubHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK0hlcmUsIG5vcm1hbCBHVVAgY2FsbHMgYXJlIHN1ZmZpY2llbnQsIHNvIG5l aXRoZXIgZmxhZyBuZWVkcyB0byBiZSBzZXQuCisKK3BhZ2VfZG1hX3Bpbm5lZCgpOiB0aGUgd2hv bGUgcG9pbnQgb2YgcGlubmluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisKK1RoZSB3aG9sZSBwb2ludCBvZiBtYXJraW5nIHBhZ2VzIGFzICJETUEtcGlu bmVkIiBvciAiZ3VwLXBpbm5lZCIgaXMgdG8gYmUgYWJsZQordG8gcXVlcnksICJpcyB0aGlzIHBh Z2UgRE1BLXBpbm5lZD8iIFRoYXQgYWxsb3dzIGNvZGUgc3VjaCBhcyBwYWdlX21rY2xlYW4oKQor KGFuZCBmaWxlIHN5c3RlbSB3cml0ZWJhY2sgY29kZSBpbiBnZW5lcmFsKSB0byBtYWtlIGluZm9y bWVkIGRlY2lzaW9ucyBhYm91dAord2hhdCB0byBkbyB3aGVuIGEgcGFnZSBjYW5ub3QgYmUgdW5t YXBwZWQgZHVlIHRvIHN1Y2ggcGlucy4KKworV2hhdCB0byBkbyBpbiB0aG9zZSBjYXNlcyBpcyB0 aGUgc3ViamVjdCBvZiBhIHllYXJzLWxvbmcgc2VyaWVzIG9mIGRpc2N1c3Npb25zCithbmQgZGVi YXRlcyAoc2VlIHRoZSBSZWZlcmVuY2VzIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudCkuIEl0 J3MgYSBUT0RPIGl0ZW0KK2hlcmU6IGZpbGwgaW4gdGhlIGRldGFpbHMgb25jZSB0aGF0J3Mgd29y a2VkIG91dC4gTWVhbndoaWxlLCBpdCdzIHNhZmUgdG8gc2F5Cit0aGF0IGhhdmluZyB0aGlzIGF2 YWlsYWJsZTogOjoKKworICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgcGFnZV9kbWFfcGlubmVk KHN0cnVjdCBwYWdlICpwYWdlKQorCisuLi5pcyBhIHByZXJlcXVpc2l0ZSB0byBzb2x2aW5nIHRo ZSBsb25nLXJ1bm5pbmcgZ3VwK0RNQSBwcm9ibGVtLgorCitBbm90aGVyIHdheSBvZiB0aGlua2lu ZyBhYm91dCBGT0xMX0dFVCwgRk9MTF9QSU4sIGFuZCBGT0xMX0xPTkdURVJNCis9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisKK0Fub3RoZXIgd2F5IG9mIHRoaW5raW5nIGFib3V0IHRoZXNlIGZsYWdzIGlzIGFzIGEgcHJv Z3Jlc3Npb24gb2YgcmVzdHJpY3Rpb25zOgorRk9MTF9HRVQgaXMgZm9yIHN0cnVjdCBwYWdlIG1h bmlwdWxhdGlvbiwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGRhdGEgdGhhdCB0aGUKK3N0cnVjdCBw YWdlIHJlZmVycyB0by4gRk9MTF9QSU4gaXMgYSAqcmVwbGFjZW1lbnQqIGZvciBGT0xMX0dFVCwg YW5kIGlzIGZvcgorc2hvcnQgdGVybSBwaW5zIG9uIHBhZ2VzIHdob3NlIGRhdGEgKndpbGwqIGdl dCBhY2Nlc3NlZC4gQXMgc3VjaCwgRk9MTF9QSU4gaXMKK2EgIm1vcmUgc2V2ZXJlIiBmb3JtIG9m IHBpbm5pbmcuIEFuZCBmaW5hbGx5LCBGT0xMX0xPTkdURVJNIGlzIGFuIGV2ZW4gbW9yZQorcmVz dHJpY3RpdmUgY2FzZSB0aGF0IGhhcyBGT0xMX1BJTiBhcyBhIHByZXJlcXVpc2l0ZTogdGhpcyBp cyBmb3IgcGFnZXMgdGhhdAord2lsbCBiZSBwaW5uZWQgbG9uZ3Rlcm0sIGFuZCB3aG9zZSBkYXRh IHdpbGwgYmUgYWNjZXNzZWQuCisKK1VuaXQgdGVzdGluZworPT09PT09PT09PT09CitUaGlzIGZp bGU6OgorCisgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdm0vZ3VwX2JlbmNobWFyay5jCisKK2hh cyB0aGUgZm9sbG93aW5nIG5ldyBjYWxscyB0byBleGVyY2lzZSB0aGUgbmV3IHBpbiooKSB3cmFw cGVyIGZ1bmN0aW9uczoKKworKiBQSU5fRkFTVF9CRU5DSE1BUksgKC4vZ3VwX2JlbmNobWFyayAt YSkKKyogUElOX0xPTkdURVJNX0JFTkNITUFSSyAoLi9ndXBfYmVuY2htYXJrIC1hKQorKiBQSU5f QkVOQ0hNQVJLICguL2d1cF9iZW5jaG1hcmsgLWEpCisKK1lvdSBjYW4gbW9uaXRvciBob3cgbWFu eSB0b3RhbCBkbWEtcGlubmVkIHBhZ2VzIGhhdmUgYmVlbiBhY3F1aXJlZCBhbmQgcmVsZWFzZWQK K3NpbmNlIHRoZSBzeXN0ZW0gd2FzIGJvb3RlZCwgdmlhIHR3byBuZXcgL3Byb2Mvdm1zdGF0IGVu dHJpZXM6IDo6CisKKyAgICAvcHJvYy92bXN0YXQvbnJfZm9sbF9waW5fcmVxdWVzdGVkCisgICAg L3Byb2Mvdm1zdGF0L25yX2ZvbGxfcGluX3JlcXVlc3RlZAorCitUaG9zZSBhcmUgYm90aCBnb2lu ZyB0byBzaG93IHplcm8sIHVubGVzcyBDT05GSUdfREVCVUdfVk0gaXMgc2V0LiBUaGlzIGlzCiti ZWNhdXNlIHRoZXJlIGlzIGEgbm90aWNlYWJsZSBwZXJmb3JtYW5jZSBkcm9wIGluIHB1dF91c2Vy X3BhZ2UoKSwgd2hlbiB0aGV5CithcmUgYWN0aXZhdGVkLgorCitSZWZlcmVuY2VzCis9PT09PT09 PT09CisKKyogYFNvbWUgc2xvdyBwcm9ncmVzcyBvbiBnZXRfdXNlcl9wYWdlcygpIChBcHIgMiwg MjAxOSkgPGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy83ODQ1NzQvPmBfCisqIGBETUEgYW5kIGdl dF91c2VyX3BhZ2VzKCkgKExQQzogRGVjIDEyLCAyMDE4KSA8aHR0cHM6Ly9sd24ubmV0L0FydGlj bGVzLzc3NDQxMS8+YF8KKyogYFRoZSB0cm91YmxlIHdpdGggZ2V0X3VzZXJfcGFnZXMoKSAoQXBy IDMwLCAyMDE4KSA8aHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzc1MzAyNy8+YF8KKworSm9obiBI dWJiYXJkLCBPY3RvYmVyLCAyMDE5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9p bmNsdWRlL2xpbnV4L21tLmgKaW5kZXggOTYyMjgzNzYxMzljLi42NTg4ZDJlMDI2MjggMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTEw NzUsMTYgKzEwNzUsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9wYWdlKHN0cnVjdCBwYWdl ICpwYWdlKQogICogcHV0X3VzZXJfcGFnZSgpIC0gcmVsZWFzZSBhIGd1cC1waW5uZWQgcGFnZQog ICogQHBhZ2U6ICAgICAgICAgICAgcG9pbnRlciB0byBwYWdlIHRvIGJlIHJlbGVhc2VkCiAgKgot ICogUGFnZXMgdGhhdCB3ZXJlIHBpbm5lZCB2aWEgZ2V0X3VzZXJfcGFnZXMqKCkgbXVzdCBiZSBy ZWxlYXNlZCB2aWEKLSAqIGVpdGhlciBwdXRfdXNlcl9wYWdlKCksIG9yIG9uZSBvZiB0aGUgcHV0 X3VzZXJfcGFnZXMqKCkgcm91dGluZXMKLSAqIGJlbG93LiBUaGlzIGlzIHNvIHRoYXQgZXZlbnR1 YWxseSwgcGFnZXMgdGhhdCBhcmUgcGlubmVkIHZpYQotICogZ2V0X3VzZXJfcGFnZXMqKCkgY2Fu IGJlIHNlcGFyYXRlbHkgdHJhY2tlZCBhbmQgdW5pcXVlbHkgaGFuZGxlZC4gSW4KLSAqIHBhcnRp Y3VsYXIsIGludGVyYWN0aW9ucyB3aXRoIFJETUEgYW5kIGZpbGVzeXN0ZW1zIG5lZWQgc3BlY2lh bAotICogaGFuZGxpbmcuCisgKiBQYWdlcyB0aGF0IHdlcmUgcGlubmVkIHZpYSBwaW5fdXNlcl9w YWdlcyooKSBtdXN0IGJlIHJlbGVhc2VkIHZpYSBlaXRoZXIKKyAqIHB1dF91c2VyX3BhZ2UoKSwg b3Igb25lIG9mIHRoZSBwdXRfdXNlcl9wYWdlcyooKSByb3V0aW5lcy4gVGhpcyBpcyBzbyB0aGF0 CisgKiBldmVudHVhbGx5IHN1Y2ggcGFnZXMgY2FuIGJlIHNlcGFyYXRlbHkgdHJhY2tlZCBhbmQg dW5pcXVlbHkgaGFuZGxlZC4gSW4KKyAqIHBhcnRpY3VsYXIsIGludGVyYWN0aW9ucyB3aXRoIFJE TUEgYW5kIGZpbGVzeXN0ZW1zIG5lZWQgc3BlY2lhbCBoYW5kbGluZy4KICAqCiAgKiBwdXRfdXNl cl9wYWdlKCkgYW5kIHB1dF9wYWdlKCkgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIGRlc3BpdGUg dGhpcyBlYXJseQogICogaW1wbGVtZW50YXRpb24gdGhhdCBtYWtlcyB0aGVtIGxvb2sgdGhlIHNh bWUuIHB1dF91c2VyX3BhZ2UoKSBjYWxscyBtdXN0Ci0gKiBiZSBwZXJmZWN0bHkgbWF0Y2hlZCB1 cCB3aXRoIGdldF91c2VyX3BhZ2UoKSBjYWxscy4KKyAqIGJlIHBlcmZlY3RseSBtYXRjaGVkIHVw IHdpdGggcGluKigpIGNhbGxzLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3VzZXJfcGFn ZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTE1NDIsOSArMTU0MCwxNiBAQCBsb25nIGdldF91 c2VyX3BhZ2VzX3JlbW90ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVj dCAqbW0sCiAJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdl cywKIAkJCSAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAog CQkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMsIGludCAqbG9ja2VkKTsKK2xvbmcg cGluX3VzZXJfcGFnZXNfcmVtb3RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1f c3RydWN0ICptbSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJf cGFnZXMsCisJCQkgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2Vz LAorCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcywgaW50ICpsb2NrZWQpOwogbG9u ZyBnZXRfdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3Bh Z2VzLAogCQkJICAgIHVuc2lnbmVkIGludCBndXBfZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMs CiAJCQkgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcyk7Citsb25nIHBpbl91c2VyX3Bh Z2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCSAgICB1 bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkgICAgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICoqdm1hcyk7CiBsb25nIGdldF91c2VyX3BhZ2VzX2xvY2tlZCh1bnNp Z25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkgICAgdW5zaWduZWQg aW50IGd1cF9mbGFncywgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50ICpsb2NrZWQpOwogbG9uZyBn ZXRfdXNlcl9wYWdlc191bmxvY2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25n IG5yX3BhZ2VzLApAQCAtMTU1Miw2ICsxNTU3LDggQEAgbG9uZyBnZXRfdXNlcl9wYWdlc191bmxv Y2tlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCiBpbnQg Z2V0X3VzZXJfcGFnZXNfZmFzdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsCiAJ CQl1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKK2ludCBwaW5f dXNlcl9wYWdlc19mYXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBucl9wYWdlcywKKwkJCXVu c2lnbmVkIGludCBndXBfZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMpOwogCiBpbnQgYWNjb3Vu dF9sb2NrZWRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGFnZXMsIGJv b2wgaW5jKTsKIGludCBfX2FjY291bnRfbG9ja2VkX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1 bnNpZ25lZCBsb25nIHBhZ2VzLCBib29sIGluYywKQEAgLTI2MTAsMTMgKzI2MTcsMTUgQEAgc3Ry dWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25l ZCBsb25nIGFkZHJlc3MsCiAjZGVmaW5lIEZPTExfQU5PTgkweDgwMDAJLyogZG9uJ3QgZG8gZmls ZSBtYXBwaW5ncyAqLwogI2RlZmluZSBGT0xMX0xPTkdURVJNCTB4MTAwMDAJLyogbWFwcGluZyBs aWZldGltZSBpcyBpbmRlZmluaXRlOiBzZWUgYmVsb3cgKi8KICNkZWZpbmUgRk9MTF9TUExJVF9Q TUQJMHgyMDAwMAkvKiBzcGxpdCBodWdlIHBtZCBiZWZvcmUgcmV0dXJuaW5nICovCisjZGVmaW5l IEZPTExfUElOCTB4NDAwMDAJLyogcGFnZXMgbXVzdCBiZSByZWxlYXNlZCB2aWEgcHV0X3VzZXJf cGFnZSgpICovCiAKIC8qCi0gKiBOT1RFIG9uIEZPTExfTE9OR1RFUk06CisgKiBGT0xMX1BJTiBh bmQgRk9MTF9MT05HVEVSTSBtYXkgYmUgdXNlZCBpbiB2YXJpb3VzIGNvbWJpbmF0aW9ucyB3aXRo IGVhY2gKKyAqIG90aGVyLiBIZXJlIGlzIHdoYXQgdGhleSBtZWFuLCBhbmQgaG93IHRvIHVzZSB0 aGVtOgogICoKICAqIEZPTExfTE9OR1RFUk0gaW5kaWNhdGVzIHRoYXQgdGhlIHBhZ2Ugd2lsbCBi ZSBoZWxkIGZvciBhbiBpbmRlZmluaXRlIHRpbWUKLSAqIHBlcmlvZCBfb2Z0ZW5fIHVuZGVyIHVz ZXJzcGFjZSBjb250cm9sLiAgVGhpcyBpcyBjb250cmFzdGVkIHdpdGgKLSAqIGlvdl9pdGVyX2dl dF9wYWdlcygpIHdoZXJlIHVzYWdlcyB3aGljaCBhcmUgdHJhbnNpZW50LgorICogcGVyaW9kIF9v ZnRlbl8gdW5kZXIgdXNlcnNwYWNlIGNvbnRyb2wuICBUaGlzIGlzIGluIGNvbnRyYXN0IHRvCisg KiBpb3ZfaXRlcl9nZXRfcGFnZXMoKSwgd2hlcmUgdXNhZ2VzIHdoaWNoIGFyZSB0cmFuc2llbnQu CiAgKgogICogRklYTUU6IEZvciBwYWdlcyB3aGljaCBhcmUgcGFydCBvZiBhIGZpbGVzeXN0ZW0s IG1hcHBpbmdzIGFyZSBzdWJqZWN0IHRvIHRoZQogICogbGlmZXRpbWUgZW5mb3JjZWQgYnkgdGhl IGZpbGVzeXN0ZW0gYW5kIHdlIG5lZWQgZ3VhcmFudGVlcyB0aGF0IGxvbmd0ZXJtCkBAIC0yNjMx LDExICsyNjQwLDM5IEBAIHN0cnVjdCBwYWdlICpmb2xsb3dfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogICogQ3VycmVudGx5IG9ubHkgZ2V0 X3VzZXJfcGFnZXMoKSBhbmQgZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIHN1cHBvcnQgdGhpcyBmbGFn CiAgKiBhbmQgY2FsbHMgdG8gZ2V0X3VzZXJfcGFnZXNfW3VuXWxvY2tlZCBhcmUgc3BlY2lmaWNh bGx5IG5vdCBhbGxvd2VkLiAgVGhpcwogICogaXMgZHVlIHRvIGFuIGluY29tcGF0aWJpbGl0eSB3 aXRoIHRoZSBGUyBEQVggY2hlY2sgYW5kCi0gKiBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZCisgKiBG QVVMVF9GTEFHX0FMTE9XX1JFVFJZLgogICoKLSAqIEluIHRoZSBDTUEgY2FzZTogbG9uZ3Rlcm0g cGlucyBpbiBhIENNQSByZWdpb24gd291bGQgdW5uZWNlc3NhcmlseSBmcmFnbWVudAotICogdGhh dCByZWdpb24uICBBbmQgc28gQ01BIGF0dGVtcHRzIHRvIG1pZ3JhdGUgdGhlIHBhZ2UgYmVmb3Jl IHBpbm5pbmcgd2hlbgorICogSW4gdGhlIENNQSBjYXNlOiBsb25nIHRlcm0gcGlucyBpbiBhIENN QSByZWdpb24gd291bGQgdW5uZWNlc3NhcmlseSBmcmFnbWVudAorICogdGhhdCByZWdpb24uICBB bmQgc28sIENNQSBhdHRlbXB0cyB0byBtaWdyYXRlIHRoZSBwYWdlIGJlZm9yZSBwaW5uaW5nLCB3 aGVuCiAgKiBGT0xMX0xPTkdURVJNIGlzIHNwZWNpZmllZC4KKyAqCisgKiBGT0xMX1BJTiBpbmRp Y2F0ZXMgdGhhdCBhIHNwZWNpYWwga2luZCBvZiB0cmFja2luZyAobm90IGp1c3QgcGFnZS0+X3Jl ZmNvdW50LAorICogYnV0IGFuIGFkZGl0aW9uYWwgcGluIGNvdW50aW5nIHN5c3RlbSkgd2lsbCBi ZSBpbnZva2VkLiBUaGlzIGlzIGludGVuZGVkIGZvcgorICogYW55dGhpbmcgdGhhdCBnZXRzIGEg cGFnZSByZWZlcmVuY2UgYW5kIHRoZW4gdG91Y2hlcyBwYWdlIGRhdGEgKGZvciBleGFtcGxlLAor ICogRGlyZWN0IElPKS4gVGhpcyBsZXRzIHRoZSBmaWxlc3lzdGVtIGtub3cgdGhhdCBzb21lIG5v bi1maWxlLXN5c3RlbSBlbnRpdHkgaXMKKyAqIHBvdGVudGlhbGx5IGNoYW5naW5nIHRoZSBwYWdl cycgZGF0YS4gSW4gY29udHJhc3QgdG8gRk9MTF9HRVQgKHdob3NlIHBhZ2VzCisgKiBhcmUgcmVs ZWFzZWQgdmlhIHB1dF9wYWdlKCkpLCBGT0xMX1BJTiBwYWdlcyBtdXN0IGJlIHJlbGVhc2VkLCB1 bHRpbWF0ZWx5LCBieQorICogYSBjYWxsIHRvIHB1dF91c2VyX3BhZ2UoKS4KKyAqCisgKiBGT0xM X1BJTiBpcyBzaW1pbGFyIHRvIEZPTExfR0VUOiBib3RoIG9mIHRoZXNlIHBpbiBwYWdlcy4gVGhl eSB1c2UgZGlmZmVyZW50CisgKiBhbmQgc2VwYXJhdGUgcmVmY291bnRpbmcgbWVjaGFuaXNtcywg aG93ZXZlciwgYW5kIHRoYXQgbWVhbnMgdGhhdCBlYWNoIGhhcworICogaXRzIG93biBhY3F1aXJl IGFuZCByZWxlYXNlIG1lY2hhbmlzbXM6CisgKgorICogICAgIEZPTExfR0VUOiBnZXRfdXNlcl9w YWdlcyooKSB0byBhY3F1aXJlLCBhbmQgcHV0X3BhZ2UoKSB0byByZWxlYXNlLgorICoKKyAqICAg ICBGT0xMX1BJTjogcGluX3VzZXJfcGFnZXMqKCkgdG8gYWNxdWlyZSwgYW5kIHB1dF91c2VyX3Bh Z2VzIHRvIHJlbGVhc2UuCisgKgorICogRk9MTF9QSU4gYW5kIEZPTExfR0VUIGFyZSBtdXR1YWxs eSBleGNsdXNpdmUgZm9yIGEgZ2l2ZW4gZnVuY3Rpb24gY2FsbC4KKyAqIChUaGUgdW5kZXJseWlu ZyBwYWdlcyBtYXkgZXhwZXJpZW5jZSBib3RoIEZPTExfR0VULWJhc2VkIGFuZCBGT0xMX1BJTi1i YXNlZAorICogY2FsbHMgYXBwbGllZCB0byB0aGVtLCBhbmQgdGhhdCdzIHBlcmZlY3RseSBPSy4g VGhpcyBpcyBhIGNvbnN0cmFpbnQgb24gdGhlCisgKiBjYWxsZXJzLCBub3Qgb24gdGhlIHBhZ2Vz LikKKyAqCisgKiBGT0xMX1BJTiBzaG91bGQgYmUgc2V0IGludGVybmFsbHkgYnkgdGhlIHBpbl91 c2VyX3BhZ2VzKigpIEFQSXMsIG5ldmVyCisgKiBkaXJlY3RseSBieSB0aGUgY2FsbGVyLiBUaGF0 J3MgaW4gb3JkZXIgdG8gaGVscCBhdm9pZCBtaXNtYXRjaGVzIHdoZW4KKyAqIHJlbGVhc2luZyBw YWdlczogZ2V0X3VzZXJfcGFnZXMqKCkgcGFnZXMgbXVzdCBiZSByZWxlYXNlZCB2aWEgcHV0X3Bh Z2UoKSwKKyAqIHdoaWxlIHBpbl91c2VyX3BhZ2VzKigpIHBhZ2VzIG11c3QgYmUgcmVsZWFzZWQg dmlhIHB1dF91c2VyX3BhZ2UoKS4KKyAqCisgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vdm0v cGluX3VzZXJfcGFnZXMucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCiAKIHN0YXRpYyBp bmxpbmUgaW50IHZtX2ZhdWx0X3RvX2Vycm5vKHZtX2ZhdWx0X3Qgdm1fZmF1bHQsIGludCBmb2xs X2ZsYWdzKQpkaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuYwppbmRleCA2Y2Y2MTNiZmU3 ZGMuLjg3YzI4ZDk0ZWQzNyAxMDA2NDQKLS0tIGEvbW0vZ3VwLmMKKysrIGIvbW0vZ3VwLmMKQEAg LTIwMSw2ICsyMDEsMTAgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpmb2xsb3dfcGFnZV9wdGUoc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJc3BpbmxvY2tfdCAqcHRsOwogCXB0ZV90ICpwdGVw LCBwdGU7CiAKKwkvKiBGT0xMX0dFVCBhbmQgRk9MTF9QSU4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2 ZS4gKi8KKwlpZiAoV0FSTl9PTl9PTkNFKChmbGFncyAmIChGT0xMX1BJTiB8IEZPTExfR0VUKSkg PT0KKwkJCSAoRk9MTF9QSU4gfCBGT0xMX0dFVCkpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKIHJldHJ5OgogCWlmICh1bmxpa2VseShwbWRfYmFkKCpwbWQpKSkKIAkJcmV0dXJuIG5vX3Bh Z2VfdGFibGUodm1hLCBmbGFncyk7CkBAIC04MTIsNyArODE2LDcgQEAgc3RhdGljIGxvbmcgX19n ZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAq bW0sCiAKIAlzdGFydCA9IHVudGFnZ2VkX2FkZHIoc3RhcnQpOwogCi0JVk1fQlVHX09OKCEhcGFn ZXMgIT0gISEoZ3VwX2ZsYWdzICYgRk9MTF9HRVQpKTsKKwlWTV9CVUdfT04oISFwYWdlcyAhPSAh IShndXBfZmxhZ3MgJiAoRk9MTF9HRVQgfCBGT0xMX1BJTikpKTsKIAogCS8qCiAJICogSWYgRk9M TF9GT1JDRSBpcyBzZXQgdGhlbiBkbyBub3QgZm9yY2UgYSBmdWxsIGZhdWx0IGFzIHRoZSBoaW50 aW5nCkBAIC0xMDM2LDcgKzEwNDAsMTYgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSBsb25nIF9f Z2V0X3VzZXJfcGFnZXNfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQlCVUdfT04o KmxvY2tlZCAhPSAxKTsKIAl9CiAKLQlpZiAocGFnZXMpCisJLyoKKwkgKiBGT0xMX1BJTiBhbmQg Rk9MTF9HRVQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gVHJhZGl0aW9uYWwgYmVoYXZpb3IKKwkg KiBpcyB0byBzZXQgRk9MTF9HRVQgaWYgdGhlIGNhbGxlciB3YW50cyBwYWdlc1tdIGZpbGxlZCBp biAoYnV0IGhhcworCSAqIGNhcmVsZXNzbHkgZmFpbGVkIHRvIHNwZWNpZnkgRk9MTF9HRVQpLCBz byBrZWVwIGRvaW5nIHRoYXQsIGJ1dCBvbmx5CisJICogZm9yIEZPTExfR0VULCBub3QgZm9yIHRo ZSBuZXdlciBGT0xMX1BJTi4KKwkgKgorCSAqIEZPTExfUElOIGFsd2F5cyBleHBlY3RzIHBhZ2Vz IHRvIGJlIG5vbi1udWxsLCBidXQgbm8gbmVlZCB0byBhc3NlcnQKKwkgKiB0aGF0IGhlcmUsIGFz IGFueSBmYWlsdXJlcyB3aWxsIGJlIG9idmlvdXMgZW5vdWdoLgorCSAqLworCWlmIChwYWdlcyAm JiAhKGZsYWdzICYgRk9MTF9QSU4pKQogCQlmbGFncyB8PSBGT0xMX0dFVDsKIAogCXBhZ2VzX2Rv bmUgPSAwOwpAQCAtMTE3Myw2ICsxMTg2LDEzIEBAIGxvbmcgZ2V0X3VzZXJfcGFnZXNfcmVtb3Rl KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJdW5zaWdu ZWQgaW50IGd1cF9mbGFncywgc3RydWN0IHBhZ2UgKipwYWdlcywKIAkJc3RydWN0IHZtX2FyZWFf c3RydWN0ICoqdm1hcywgaW50ICpsb2NrZWQpCiB7CisJLyoKKwkgKiBGT0xMX1BJTiBtdXN0IG9u bHkgYmUgc2V0IGludGVybmFsbHkgYnkgdGhlIHBpbl91c2VyX3BhZ2VzKigpIEFQSXMsCisJICog bmV2ZXIgZGlyZWN0bHkgYnkgdGhlIGNhbGxlciwgc28gZW5mb3JjZSB0aGF0IHdpdGggYW4gYXNz ZXJ0aW9uOgorCSAqLworCWlmIChXQVJOX09OX09OQ0UoZ3VwX2ZsYWdzICYgRk9MTF9QSU4pKQor CQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qCiAJICogUGFydHMgb2YgRk9MTF9MT05HVEVSTSBiZWhh dmlvciBhcmUgaW5jb21wYXRpYmxlIHdpdGgKIAkgKiBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIGJl Y2F1c2Ugb2YgdGhlIEZTIERBWCBjaGVjayByZXF1aXJlbWVudCBvbgpAQCAtMTY0MCw2ICsxNjYw LDEzIEBAIGxvbmcgZ2V0X3VzZXJfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQg bG9uZyBucl9wYWdlcywKIAkJdW5zaWduZWQgaW50IGd1cF9mbGFncywgc3RydWN0IHBhZ2UgKipw YWdlcywKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hcykKIHsKKwkvKgorCSAqIEZPTExf UElOIG11c3Qgb25seSBiZSBzZXQgaW50ZXJuYWxseSBieSB0aGUgcGluX3VzZXJfcGFnZXMqKCkg QVBJcywKKwkgKiBuZXZlciBkaXJlY3RseSBieSB0aGUgY2FsbGVyLCBzbyBlbmZvcmNlIHRoYXQg d2l0aCBhbiBhc3NlcnRpb246CisJICovCisJaWYgKFdBUk5fT05fT05DRShndXBfZmxhZ3MgJiBG T0xMX1BJTikpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dXJuIF9fZ3VwX2xvbmd0ZXJtX2xv Y2tlZChjdXJyZW50LCBjdXJyZW50LT5tbSwgc3RhcnQsIG5yX3BhZ2VzLAogCQkJCSAgICAgcGFn ZXMsIHZtYXMsIGd1cF9mbGFncyB8IEZPTExfVE9VQ0gpOwogfQpAQCAtMjM5MCwyOSArMjQxNywx NCBAQCBzdGF0aWMgaW50IF9fZ3VwX2xvbmd0ZXJtX3VubG9ja2VkKHVuc2lnbmVkIGxvbmcgc3Rh cnQsIGludCBucl9wYWdlcywKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIGdldF91c2VyX3Bh Z2VzX2Zhc3QoKSAtIHBpbiB1c2VyIHBhZ2VzIGluIG1lbW9yeQotICogQHN0YXJ0OglzdGFydGlu ZyB1c2VyIGFkZHJlc3MKLSAqIEBucl9wYWdlczoJbnVtYmVyIG9mIHBhZ2VzIGZyb20gc3RhcnQg dG8gcGluCi0gKiBAZ3VwX2ZsYWdzOglmbGFncyBtb2RpZnlpbmcgcGluIGJlaGF2aW91cgotICog QHBhZ2VzOglhcnJheSB0aGF0IHJlY2VpdmVzIHBvaW50ZXJzIHRvIHRoZSBwYWdlcyBwaW5uZWQu Ci0gKgkJU2hvdWxkIGJlIGF0IGxlYXN0IG5yX3BhZ2VzIGxvbmcuCi0gKgotICogQXR0ZW1wdCB0 byBwaW4gdXNlciBwYWdlcyBpbiBtZW1vcnkgd2l0aG91dCB0YWtpbmcgbW0tPm1tYXBfc2VtLgot ICogSWYgbm90IHN1Y2Nlc3NmdWwsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRha2luZyB0aGUgbG9j ayBhbmQKLSAqIGNhbGxpbmcgZ2V0X3VzZXJfcGFnZXMoKS4KLSAqCi0gKiBSZXR1cm5zIG51bWJl ciBvZiBwYWdlcyBwaW5uZWQuIFRoaXMgbWF5IGJlIGZld2VyIHRoYW4gdGhlIG51bWJlcgotICog cmVxdWVzdGVkLiBJZiBucl9wYWdlcyBpcyAwIG9yIG5lZ2F0aXZlLCByZXR1cm5zIDAuIElmIG5v IHBhZ2VzCi0gKiB3ZXJlIHBpbm5lZCwgcmV0dXJucyAtZXJybm8uCi0gKi8KLWludCBnZXRfdXNl cl9wYWdlc19mYXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBucl9wYWdlcywKLQkJCXVuc2ln bmVkIGludCBndXBfZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMpCitzdGF0aWMgaW50IGludGVy bmFsX2dldF91c2VyX3BhZ2VzX2Zhc3QodW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3BhZ2Vz LAorCQkJCQl1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzLAorCQkJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2Vz KQogewogCXVuc2lnbmVkIGxvbmcgYWRkciwgbGVuLCBlbmQ7CiAJaW50IG5yID0gMCwgcmV0ID0g MDsKIAotCWlmIChXQVJOX09OX09OQ0UoZ3VwX2ZsYWdzICYgfihGT0xMX1dSSVRFIHwgRk9MTF9M T05HVEVSTSkpKQorCWlmIChXQVJOX09OX09OQ0UoZ3VwX2ZsYWdzICYgfihGT0xMX1dSSVRFIHwg Rk9MTF9MT05HVEVSTSB8IEZPTExfUElOKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3RhcnQg PSB1bnRhZ2dlZF9hZGRyKHN0YXJ0KSAmIFBBR0VfTUFTSzsKQEAgLTI0NTIsNCArMjQ2NCwxMDMg QEAgaW50IGdldF91c2VyX3BhZ2VzX2Zhc3QodW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3Bh Z2VzLAogCiAJcmV0dXJuIHJldDsKIH0KKworLyoqCisgKiBnZXRfdXNlcl9wYWdlc19mYXN0KCkg LSBwaW4gdXNlciBwYWdlcyBpbiBtZW1vcnkKKyAqIEBzdGFydDoJc3RhcnRpbmcgdXNlciBhZGRy ZXNzCisgKiBAbnJfcGFnZXM6CW51bWJlciBvZiBwYWdlcyBmcm9tIHN0YXJ0IHRvIHBpbgorICog QGd1cF9mbGFnczoJZmxhZ3MgbW9kaWZ5aW5nIHBpbiBiZWhhdmlvdXIKKyAqIEBwYWdlczoJYXJy YXkgdGhhdCByZWNlaXZlcyBwb2ludGVycyB0byB0aGUgcGFnZXMgcGlubmVkLgorICoJCVNob3Vs ZCBiZSBhdCBsZWFzdCBucl9wYWdlcyBsb25nLgorICoKKyAqIEF0dGVtcHQgdG8gcGluIHVzZXIg cGFnZXMgaW4gbWVtb3J5IHdpdGhvdXQgdGFraW5nIG1tLT5tbWFwX3NlbS4KKyAqIElmIG5vdCBz dWNjZXNzZnVsLCBpdCB3aWxsIGZhbGwgYmFjayB0byB0YWtpbmcgdGhlIGxvY2sgYW5kCisgKiBj YWxsaW5nIGdldF91c2VyX3BhZ2VzKCkuCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgcGFnZXMg cGlubmVkLiBUaGlzIG1heSBiZSBmZXdlciB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkLgorICog SWYgbnJfcGFnZXMgaXMgMCBvciBuZWdhdGl2ZSwgcmV0dXJucyAwLiBJZiBubyBwYWdlcyB3ZXJl IHBpbm5lZCwgcmV0dXJucworICogLWVycm5vLgorICovCitpbnQgZ2V0X3VzZXJfcGFnZXNfZmFz dCh1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbnJfcGFnZXMsCisJCQl1bnNpZ25lZCBpbnQgZ3Vw X2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQoreworCS8qCisJICogRk9MTF9QSU4gbXVzdCBv bmx5IGJlIHNldCBpbnRlcm5hbGx5IGJ5IHRoZSBwaW5fdXNlcl9wYWdlcyooKSBBUElzLAorCSAq IG5ldmVyIGRpcmVjdGx5IGJ5IHRoZSBjYWxsZXIsIHNvIGVuZm9yY2UgdGhhdDoKKwkgKi8KKwlp ZiAoV0FSTl9PTl9PTkNFKGd1cF9mbGFncyAmIEZPTExfUElOKSkKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwlyZXR1cm4gaW50ZXJuYWxfZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgbnJfcGFnZXMs IGd1cF9mbGFncywgcGFnZXMpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X3VzZXJfcGFnZXNf ZmFzdCk7CisKKy8qKgorICogcGluX3VzZXJfcGFnZXNfZmFzdCgpIC0gcGluIHVzZXIgcGFnZXMg aW4gbWVtb3J5IHdpdGhvdXQgdGFraW5nIGxvY2tzCisgKgorICogRm9yIG5vdywgdGhpcyBpcyBh IHBsYWNlaG9sZGVyIGZ1bmN0aW9uLCB1bnRpbCB2YXJpb3VzIGNhbGwgc2l0ZXMgYXJlCisgKiBj b252ZXJ0ZWQgdG8gdXNlIHRoZSBjb3JyZWN0IGdldF91c2VyX3BhZ2VzKigpIG9yIHBpbl91c2Vy X3BhZ2VzKigpIEFQSS4gU28sCisgKiB0aGlzIGlzIGlkZW50aWNhbCB0byBnZXRfdXNlcl9wYWdl c19mYXN0KCkuCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCBmb3IgQ2FzZSAxIChESU8pIGluIERv Y3VtZW50YXRpb24vdm0vcGluX3VzZXJfcGFnZXMucnN0LiBJdAorICogaXMgTk9UIGludGVuZGVk IGZvciBDYXNlIDIgKFJETUE6IGxvbmctdGVybSBwaW5zKS4KKyAqLworaW50IHBpbl91c2VyX3Bh Z2VzX2Zhc3QodW5zaWduZWQgbG9uZyBzdGFydCwgaW50IG5yX3BhZ2VzLAorCQkJdW5zaWduZWQg aW50IGd1cF9mbGFncywgc3RydWN0IHBhZ2UgKipwYWdlcykKK3sKKwkvKgorCSAqIFRoaXMgaXMg YSBwbGFjZWhvbGRlciwgdW50aWwgdGhlIHBpbiBmdW5jdGlvbmFsaXR5IGlzIGFjdGl2YXRlZC4K KwkgKiBVbnRpbCB0aGVuLCBqdXN0IGJlaGF2ZSBsaWtlIHRoZSBjb3JyZXNwb25kaW5nIGdldF91 c2VyX3BhZ2VzKigpCisJICogcm91dGluZS4KKwkgKi8KKwlyZXR1cm4gZ2V0X3VzZXJfcGFnZXNf ZmFzdChzdGFydCwgbnJfcGFnZXMsIGd1cF9mbGFncywgcGFnZXMpOworfQorRVhQT1JUX1NZTUJP TF9HUEwocGluX3VzZXJfcGFnZXNfZmFzdCk7CisKKy8qKgorICogcGluX3VzZXJfcGFnZXNfcmVt b3RlKCkgLSBwaW4gcGFnZXMgb2YgYSByZW1vdGUgcHJvY2VzcyAodGFzayAhPSBjdXJyZW50KQor ICoKKyAqIEZvciBub3csIHRoaXMgaXMgYSBwbGFjZWhvbGRlciBmdW5jdGlvbiwgdW50aWwgdmFy aW91cyBjYWxsIHNpdGVzIGFyZQorICogY29udmVydGVkIHRvIHVzZSB0aGUgY29ycmVjdCBnZXRf dXNlcl9wYWdlcyooKSBvciBwaW5fdXNlcl9wYWdlcyooKSBBUEkuIFNvLAorICogdGhpcyBpcyBp ZGVudGljYWwgdG8gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKCkuCisgKgorICogVGhpcyBpcyBpbnRl bmRlZCBmb3IgQ2FzZSAxIChESU8pIGluIERvY3VtZW50YXRpb24vdm0vcGluX3VzZXJfcGFnZXMu cnN0LiBJdAorICogaXMgTk9UIGludGVuZGVkIGZvciBDYXNlIDIgKFJETUE6IGxvbmctdGVybSBw aW5zKS4KKyAqLworbG9uZyBwaW5fdXNlcl9wYWdlc19yZW1vdGUoc3RydWN0IHRhc2tfc3RydWN0 ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwg dW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSAgIHVuc2lnbmVkIGludCBndXBfZmxhZ3MsIHN0 cnVjdCBwYWdlICoqcGFnZXMsCisJCQkgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzLCBp bnQgKmxvY2tlZCkKK3sKKwkvKgorCSAqIFRoaXMgaXMgYSBwbGFjZWhvbGRlciwgdW50aWwgdGhl IHBpbiBmdW5jdGlvbmFsaXR5IGlzIGFjdGl2YXRlZC4KKwkgKiBVbnRpbCB0aGVuLCBqdXN0IGJl aGF2ZSBsaWtlIHRoZSBjb3JyZXNwb25kaW5nIGdldF91c2VyX3BhZ2VzKigpCisJICogcm91dGlu ZS4KKwkgKi8KKwlyZXR1cm4gZ2V0X3VzZXJfcGFnZXNfcmVtb3RlKHRzaywgbW0sIHN0YXJ0LCBu cl9wYWdlcywgZ3VwX2ZsYWdzLCBwYWdlcywKKwkJCQkgICAgIHZtYXMsIGxvY2tlZCk7Cit9CitF WFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzX3JlbW90ZSk7CisKKy8qKgorICogcGluX3VzZXJf cGFnZXMoKSAtIHBpbiB1c2VyIHBhZ2VzIGluIG1lbW9yeSBmb3IgdXNlIGJ5IG90aGVyIGRldmlj ZXMKKyAqCisgKiBGb3Igbm93LCB0aGlzIGlzIGEgcGxhY2Vob2xkZXIgZnVuY3Rpb24sIHVudGls IHZhcmlvdXMgY2FsbCBzaXRlcyBhcmUKKyAqIGNvbnZlcnRlZCB0byB1c2UgdGhlIGNvcnJlY3Qg Z2V0X3VzZXJfcGFnZXMqKCkgb3IgcGluX3VzZXJfcGFnZXMqKCkgQVBJLiBTbywKKyAqIHRoaXMg aXMgaWRlbnRpY2FsIHRvIGdldF91c2VyX3BhZ2VzKCkuCisgKgorICogVGhpcyBpcyBpbnRlbmRl ZCBmb3IgQ2FzZSAxIChESU8pIGluIERvY3VtZW50YXRpb24vdm0vcGluX3VzZXJfcGFnZXMucnN0 LiBJdAorICogaXMgTk9UIGludGVuZGVkIGZvciBDYXNlIDIgKFJETUE6IGxvbmctdGVybSBwaW5z KS4KKyAqLworbG9uZyBwaW5fdXNlcl9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25l ZCBsb25nIG5yX3BhZ2VzLAorCQkgICAgdW5zaWduZWQgaW50IGd1cF9mbGFncywgc3RydWN0IHBh Z2UgKipwYWdlcywKKwkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpCit7CisJLyoK KwkgKiBUaGlzIGlzIGEgcGxhY2Vob2xkZXIsIHVudGlsIHRoZSBwaW4gZnVuY3Rpb25hbGl0eSBp cyBhY3RpdmF0ZWQuCisJICogVW50aWwgdGhlbiwganVzdCBiZWhhdmUgbGlrZSB0aGUgY29ycmVz cG9uZGluZyBnZXRfdXNlcl9wYWdlcyooKQorCSAqIHJvdXRpbmUuCisJICovCisJcmV0dXJuIGdl dF91c2VyX3BhZ2VzKHN0YXJ0LCBucl9wYWdlcywgZ3VwX2ZsYWdzLCBwYWdlcywgdm1hcyk7Cit9 CitFWFBPUlRfU1lNQk9MKHBpbl91c2VyX3BhZ2VzKTsKLS0gCjIuMjQuMAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs