From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v6 4/6] livepach: Add .livepatch.hooks functions and test-case Date: Fri, 16 Sep 2016 11:29:12 -0400 Message-ID: <1474039754-25816-5-git-send-email-konrad.wilk@oracle.com> References: <1474039754-25816-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bkv4x-0003xZ-EO for xen-devel@lists.xenproject.org; Fri, 16 Sep 2016 15:29:27 +0000 In-Reply-To: <1474039754-25816-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, konrad@kernel.org, ross.lagerwall@citrix.com, andrew.cooper3@citrix.com Cc: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , Ian Jackson , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org RnJvbTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+CgpBZGQgaG9v ayBmdW5jdGlvbnMgd2hpY2ggcnVuIGR1cmluZyBwYXRjaCBhcHBseSBhbmQgcGF0Y2ggcmV2ZXJ0 LgpIb29rIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBsaXZlcGF0Y2ggcGF5bG9hZHMgdG8gbWFuaXB1 bGF0ZSBkYXRhCnN0cnVjdHVyZXMgZHVyaW5nIHBhdGNoaW5nLCBldGMuCgpPbmUgdXNlIGNhc2Ug aXMgdGhlIFhTQTkxLiBBcyBNYXJ0aW4gbWVudGlvbnMgaXQ6CiJJZiB3ZSBoYXZlIHNoYWRvdyB2 YXJpYWJsZXMsIHdlIGFsc28gbmVlZCBhbiB1bmxvYWQgaG9vayB0byBnYXJiYWdlCmNvbGxlY3Qg YWxsIHRoZSB2YXJpYWJsZXMgaW50cm9kdWNlZCBieSBhIGhvdHBhdGNoIHRvIHByZXZlbnQgbWVt b3J5CmxlYWtzLiAgUG90ZW50aWFsbHksIHdlIGFsc28gd2FudCB0byBwcmUtcmVzZXJ2ZSBtZW1v cnkgZm9yIHN0YXRpYyBvcgpleGlzdGluZyBkeW5hbWljIG9iamVjdHMgaW4gdGhlIGxvYWQtaG9v ayBpbnN0ZWFkIG9mIG9uIHRoZSBmbHkuCgpGb3IgdGVzdGluZyBhbmQgZGVidWdnaW5nLCB2YXJp b3VzIGFwcGxpY2F0aW9ucyBhcmUgcG9zc2libGUuCgpJbiBnZW5lcmFsLCB0aGUgaG9va3MgcHJv dmlkZSBmbGV4aWJpbGl0eSB3aGVuIGhhdmluZyB0byBkZWFsIHdpdGgKdW5mb3Jlc2VlbiBjYXNl cywgYnV0IHRoZWlyIGFwcGxpY2F0aW9uIHNob3VsZCBiZSByYXJlbHkgcmVxdWlyZWQgKDwKMTAl KS4iCgpGdXJ0aGVybW9yZSBpbmNsdWRlIGEgdGVzdC1jYXNlIGZvciBpdC4KClJldmlld2VkLWJ5 OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5 OiBSb3NzIExhZ2Vyd2FsbCA8cm9zcy5sYWdlcndhbGxAY2l0cml4LmNvbT4KU2lnbmVkLW9mZi1i eTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgoKLS0tCkNj OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpDYzogR2VvcmdlIER1 bmxhcCA8R2VvcmdlLkR1bmxhcEBldS5jaXRyaXguY29tPgpDYzogSWFuIEphY2tzb24gPGlhbi5q YWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+ CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+CkNjOiBUaW0g RGVlZ2FuIDx0aW1AeGVuLm9yZz4KQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Cgp2 MC40Li52MC4xMTogRGVmZXJlZCBmb3IgdjQuOAp2MC4xMjogcy94c3BsaWNlL2xpdmVwYXRjaC8K CnYzOiBDbGFyaWZ5IHRoZSBjb21tZW50cyBhYm91dCBzcGluX2RlYnVnX2VuYWJsZQogICAgUmVu YW1lIG9uZSBvZiB0aGUgaG9va3MgdG8gbG93ZXItY2FzZSAoWi0+eikgdG8gZ3VhcmFudGVlIGl0 IGJlaW5nCiAgICBjYWxsZWQgbGFzdC4KICAgIExlYXJuZWQgYSBsb3Qgb2YgYWJvdXQgJ2NvbnN0 Jwp2NDogRG8gdGhlIGFjdHVhbCBjb25zdCBvZiB0aGUgaG9va3MuCiAgICBSZW1vdmUgdGhlIHJl cXVpcmVtZW50IGZvciB0aGUgdGVzdHMtY2FzZSBob29rcyB0byBiZSBzb3J0ZWQKICAgICh0aGV5 IG5ldmVyIHdlcmUgdG8gc3RhcnQgd2l0aCkuCiAgICBGaXggdXAgdGhlIGNvbW1lbnQgYWJvdXQg c3Bpbl9kZWJ1Z19lbmFibGUgc28gbW9yZS4KdjU6IEFkZGVkIFJldmlld2VkLWJ5IGZyb20gQW5k cmV3LgogICAgRHJvcHBlZCB0aGUgY2hlY2tfZm5jIGhvb2sKICAgIEFkZGVkIHRoZSBjaGVja19m bmMgaG9vayBiYWNrIGFnYWluIGFzICJsaXZlcGF0Y2g6IERpc2FsbG93IGFwcGx5aW5nCiAgICBh ZnRlciBhbiByZXZlcnQiIGd1YXJhbnRlZXMgd2Ugd29uJ3QgaGl0IHRoZSBCVUdfT04gY2hlY2su Ci0tLQogZG9jcy9taXNjL2xpdmVwYXRjaC5tYXJrZG93biAgICAgICAgfCAyMyArKysrKysrKysr KysrKysrKwogeGVuL2FyY2gveDg2L3Rlc3QveGVuX2hlbGxvX3dvcmxkLmMgfCAzNCArKysrKysr KysrKysrKysrKysrKysrKysrCiB4ZW4vY29tbW9uL2xpdmVwYXRjaC5jICAgICAgICAgICAgICB8 IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHhlbi9pbmNsdWRlL3hl bi9saXZlcGF0Y2hfcGF5bG9hZC5oIHwgNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE1NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUveGVuL2xpdmVwYXRjaF9wYXlsb2FkLmgK CmRpZmYgLS1naXQgYS9kb2NzL21pc2MvbGl2ZXBhdGNoLm1hcmtkb3duIGIvZG9jcy9taXNjL2xp dmVwYXRjaC5tYXJrZG93bgppbmRleCBhOGU3MGE4Li45ZTcyODk3IDEwMDY0NAotLS0gYS9kb2Nz L21pc2MvbGl2ZXBhdGNoLm1hcmtkb3duCisrKyBiL2RvY3MvbWlzYy9saXZlcGF0Y2gubWFya2Rv d24KQEAgLTM0Myw2ICszNDMsMTMgQEAgV2hlbiByZXZlcnRpbmcgYSBwYXRjaCwgdGhlIGh5cGVy dmlzb3IgaXRlcmF0ZXMgb3ZlciBlYWNoIGBsaXZlcGF0Y2hfZnVuY2AKIGFuZCB0aGUgY29yZSBj b2RlIGNvcGllcyB0aGUgZGF0YSBmcm9tIHRoZSB1bmRvIGJ1ZmZlciAocHJpdmF0ZSBpbnRlcm5h bCBjb3B5KQogdG8gYG9sZF9hZGRyYC4KIAorSXQgb3B0aW9uYWxseSBtYXkgY29udGFpbiB0aGUg YWRkcmVzcyBvZiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHJpZ2h0IGJlZm9yZQorYmVpbmcgYXBw bGllZCBhbmQgYWZ0ZXIgYmVpbmcgcmV2ZXJ0ZWQ6CisKKyAqIGAubGl2ZXBhdGNoLmhvb2tzLmxv YWRgIC0gYW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMuCisgKiBgLmxpdmVwYXRjaC5ob29r cy51bmxvYWRgIC0gYW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMuCisKKwogIyMjIEV4YW1w bGUgb2YgLmxpdmVwYXRjaC5mdW5jcwogCiBBIHNpbXBsZSBleGFtcGxlIG9mIHdoYXQgYSBwYXls b2FkIGZpbGUgY2FuIGJlOgpAQCAtMzgwLDYgKzM4NywyMiBAQCBzdHJ1Y3QgbGl2ZXBhdGNoX2Z1 bmMgbGl2ZXBhdGNoX2hlbGxvX3dvcmxkID0gewogCiBDb2RlIG11c3QgYmUgY29tcGlsZWQgd2l0 aCAtZlBJQy4KIAorIyMjIC5saXZlcGF0Y2guaG9va3MubG9hZCBhbmQgLmxpdmVwYXRjaC5ob29r cy51bmxvYWQKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHBv aW50ZXJzIHRvIGJlIGV4ZWN1dGVkCitiZWZvcmUgcGF5bG9hZCBpcyBiZWluZyBhcHBsaWVkICgu bGl2ZXBhdGNoLmZ1bmNzKSBvciBhZnRlciByZXZlcnRpbmcKK3RoZSBwYXlsb2FkLiBUaGlzIGlz IHVzZWZ1bCB0byBwcmVwYXJlIGRhdGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8KK2JlIG1vZGlm aWVkIHBhdGNoaW5nLgorCitFYWNoIGVudHJ5IGluIHRoaXMgYXJyYXkgaXMgZWlnaHQgYnl0ZXMu CisKK1RoZSB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGFyZSBhcyBmb2xsb3c6CisK KzxwcmU+Cit0eXBlZGVmIHZvaWQgKCpsaXZlcGF0Y2hfbG9hZGNhbGxfdCkodm9pZCk7ICAKK3R5 cGVkZWYgdm9pZCAoKmxpdmVwYXRjaF91bmxvYWRjYWxsX3QpKHZvaWQpOyAgIAorPC9wcmU+CisK ICMjIyAubGl2ZXBhdGNoLmRlcGVuZHMgYW5kIC5ub3RlLmdudS5idWlsZC1pZAogCiBUbyBzdXBw b3J0IGRlcGVuZGVuY2llcyBjaGVja2luZyBhbmQgc2FmZSBsb2FkaW5nICh0byBsb2FkIHRoZQpk aWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3Rlc3QveGVuX2hlbGxvX3dvcmxkLmMgYi94ZW4vYXJj aC94ODYvdGVzdC94ZW5faGVsbG9fd29ybGQuYwppbmRleCA0MjJiZGYxLi5jYjVlMjdhIDEwMDY0 NAotLS0gYS94ZW4vYXJjaC94ODYvdGVzdC94ZW5faGVsbG9fd29ybGQuYworKysgYi94ZW4vYXJj aC94ODYvdGVzdC94ZW5faGVsbG9fd29ybGQuYwpAQCAtNCwxNCArNCw0OCBAQAogICovCiAKICNp bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx4ZW4vbGliLmg+CiAjaW5jbHVkZSA8eGVuL3R5 cGVzLmg+CiAjaW5jbHVkZSA8eGVuL3ZlcnNpb24uaD4KICNpbmNsdWRlIDx4ZW4vbGl2ZXBhdGNo Lmg+CisjaW5jbHVkZSA8eGVuL2xpdmVwYXRjaF9wYXlsb2FkLmg+CiAKICNpbmNsdWRlIDxwdWJs aWMvc3lzY3RsLmg+CiAKIHN0YXRpYyBjaGFyIGhlbGxvX3dvcmxkX3BhdGNoX3RoaXNfZm5jW10g PSAieGVuX2V4dHJhX3ZlcnNpb24iOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnhlbl9oZWxsb193b3Js ZCh2b2lkKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY250OworCitzdGF0aWMgdm9pZCBhcHBseV9o b29rKHZvaWQpCit7CisgICAgcHJpbnRrKEtFUk5fREVCVUcgIkhvb2sgZXhlY3V0aW5nLlxuIik7 Cit9CisKK3N0YXRpYyB2b2lkIHJldmVydF9ob29rKHZvaWQpCit7CisgICAgcHJpbnRrKEtFUk5f REVCVUcgIkhvb2sgdW5sb2FkZWQuXG4iKTsKK30KKworc3RhdGljIHZvaWQgIGhpX2Z1bmModm9p ZCkKK3sKKyAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IEhpISAoY2FsbGVkICV1IHRpbWVzKVxu IiwgX19mdW5jX18sICsrY250KTsKK307CisKK3N0YXRpYyB2b2lkIGNoZWNrX2ZuYyh2b2lkKQor eworICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogSGkgZnVuYyBjYWxsZWQgJXUgdGltZXNcbiIs IF9fZnVuY19fLCBjbnQpOworICAgIEJVR19PTihjbnQgPT0gMCB8fCBjbnQgPiAyKTsKK30KKwor TElWRVBBVENIX0xPQURfSE9PSyhhcHBseV9ob29rKTsKK0xJVkVQQVRDSF9VTkxPQURfSE9PSyhy ZXZlcnRfaG9vayk7CisKKy8qIEltYmFsYW5jZSBoZXJlLiBUd28gbG9hZCBhbmQgdGhyZWUgdW5s b2FkLiAqLworCitMSVZFUEFUQ0hfTE9BRF9IT09LKGhpX2Z1bmMpOworTElWRVBBVENIX1VOTE9B RF9IT09LKGhpX2Z1bmMpOworCitMSVZFUEFUQ0hfVU5MT0FEX0hPT0soY2hlY2tfZm5jKTsKIAog c3RydWN0IGxpdmVwYXRjaF9mdW5jIF9fc2VjdGlvbigiLmxpdmVwYXRjaC5mdW5jcyIpIGxpdmVw YXRjaF94ZW5faGVsbG9fd29ybGQgPSB7CiAgICAgLnZlcnNpb24gPSBMSVZFUEFUQ0hfUEFZTE9B RF9WRVJTSU9OLApkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9saXZlcGF0Y2guYyBiL3hlbi9jb21t b24vbGl2ZXBhdGNoLmMKaW5kZXggMjE4YjM4OS4uMzcyOTQwOSAxMDA2NDQKLS0tIGEveGVuL2Nv bW1vbi9saXZlcGF0Y2guYworKysgYi94ZW4vY29tbW9uL2xpdmVwYXRjaC5jCkBAIC0yMyw2ICsy Myw3IEBACiAjaW5jbHVkZSA8eGVuL3dhaXQuaD4KICNpbmNsdWRlIDx4ZW4vbGl2ZXBhdGNoX2Vs Zi5oPgogI2luY2x1ZGUgPHhlbi9saXZlcGF0Y2guaD4KKyNpbmNsdWRlIDx4ZW4vbGl2ZXBhdGNo X3BheWxvYWQuaD4KIAogI2luY2x1ZGUgPGFzbS9ldmVudC5oPgogCkBAIC03Miw3ICs3MywxMSBA QCBzdHJ1Y3QgcGF5bG9hZCB7CiAgICAgdW5zaWduZWQgaW50IG5zeW1zOyAgICAgICAgICAgICAg ICAgIC8qIE5yIG9mIGVudHJpZXMgaW4gLnN0cnRhYiBhbmQgc3ltYm9scy4gKi8KICAgICBzdHJ1 Y3QgbGl2ZXBhdGNoX2J1aWxkX2lkIGlkOyAgICAgICAgLyogRUxGTk9URV9ERVNDKC5ub3RlLmdu dS5idWlsZC1pZCkgb2YgdGhlIHBheWxvYWQuICovCiAgICAgc3RydWN0IGxpdmVwYXRjaF9idWls ZF9pZCBkZXA7ICAgICAgIC8qIEVMRk5PVEVfREVTQygubGl2ZXBhdGNoLmRlcGVuZHMpLiAqLwot ICAgIGNoYXIgbmFtZVtYRU5fTElWRVBBVENIX05BTUVfU0laRV07IC8qIE5hbWUgb2YgaXQuICov CisgICAgbGl2ZXBhdGNoX2xvYWRjYWxsX3QgKmNvbnN0ICpsb2FkX2Z1bmNzOyAgIC8qIFRoZSBh cnJheSBvZiBmdW5jcyB0byBjYWxsIGFmdGVyICovCisgICAgbGl2ZXBhdGNoX3VubG9hZGNhbGxf dCAqY29uc3QgKnVubG9hZF9mdW5jczsvKiBsb2FkIGFuZCB1bmxvYWQgb2YgdGhlIHBheWxvYWQu ICovCisgICAgdW5zaWduZWQgaW50IG5fbG9hZF9mdW5jczsgICAgICAgICAgIC8qIE5yIG9mIHRo ZSBmdW5jcyB0byBsb2FkIGFuZCBleGVjdXRlLiAqLworICAgIHVuc2lnbmVkIGludCBuX3VubG9h ZF9mdW5jczsgICAgICAgICAvKiBOciBvZiBmdW5jcyB0byBjYWxsIGR1cnVuZyB1bmxvYWQuICov CisgICAgY2hhciBuYW1lW1hFTl9MSVZFUEFUQ0hfTkFNRV9TSVpFXTsgIC8qIE5hbWUgb2YgaXQu ICovCiB9OwogCiAvKiBEZWZpbmVzIGFuIG91dHN0YW5kaW5nIHBhdGNoaW5nIGFjdGlvbi4gKi8K QEAgLTUzNyw2ICs1NDIsMjUgQEAgc3RhdGljIGludCBwcmVwYXJlX3BheWxvYWQoc3RydWN0IHBh eWxvYWQgKnBheWxvYWQsCiAgICAgICAgICAgICByZXR1cm4gcmM7CiAgICAgfQogCisgICAgc2Vj ID0gbGl2ZXBhdGNoX2VsZl9zZWNfYnlfbmFtZShlbGYsICIubGl2ZXBhdGNoLmhvb2tzLmxvYWQi KTsKKyAgICBpZiAoIHNlYyApCisgICAgeworICAgICAgICBpZiAoIHNlYy0+c2VjLT5zaF9zaXpl ICUgc2l6ZW9mKCpwYXlsb2FkLT5sb2FkX2Z1bmNzKSApCisgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsKKworICAgICAgICBwYXlsb2FkLT5sb2FkX2Z1bmNzID0gc2VjLT5sb2FkX2FkZHI7Cisg ICAgICAgIHBheWxvYWQtPm5fbG9hZF9mdW5jcyA9IHNlYy0+c2VjLT5zaF9zaXplIC8gc2l6ZW9m KCpwYXlsb2FkLT5sb2FkX2Z1bmNzKTsKKyAgICB9CisKKyAgICBzZWMgPSBsaXZlcGF0Y2hfZWxm X3NlY19ieV9uYW1lKGVsZiwgIi5saXZlcGF0Y2guaG9va3MudW5sb2FkIik7CisgICAgaWYgKCBz ZWMgKQorICAgIHsKKyAgICAgICAgaWYgKCBzZWMtPnNlYy0+c2hfc2l6ZSAlIHNpemVvZigqcGF5 bG9hZC0+dW5sb2FkX2Z1bmNzKSApCisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAg ICAgICBwYXlsb2FkLT51bmxvYWRfZnVuY3MgPSBzZWMtPmxvYWRfYWRkcjsKKyAgICAgICAgcGF5 bG9hZC0+bl91bmxvYWRfZnVuY3MgPSBzZWMtPnNlYy0+c2hfc2l6ZSAvIHNpemVvZigqcGF5bG9h ZC0+dW5sb2FkX2Z1bmNzKTsKKyAgICB9CiAgICAgc2VjID0gbGl2ZXBhdGNoX2VsZl9zZWNfYnlf bmFtZShlbGYsIEVMRl9CVUlMRF9JRF9OT1RFKTsKICAgICBpZiAoIHNlYyApCiAgICAgewpAQCAt MTAyNyw2ICsxMDUxLDE4IEBAIHN0YXRpYyBpbnQgYXBwbHlfcGF5bG9hZChzdHJ1Y3QgcGF5bG9h ZCAqZGF0YSkKICAgICAgICAgcmV0dXJuIHJjOwogICAgIH0KIAorICAgIC8qCisgICAgICogU2lu Y2Ugd2UgYXJlIHJ1bm5pbmcgd2l0aCBJUlFzIGRpc2FibGVkIGFuZCB0aGUgaG9va3MgbWF5IGNh bGwgY29tbW9uCisgICAgICogY29kZSAtIHdoaWNoIGV4cGVjdHMgY2VydGFpbiBzcGlubG9ja3Mg dG8gcnVuIHdpdGggSVJRcyBlbmFibGVkIC0gd2UKKyAgICAgKiB0ZW1wb3JhcmlseSBkaXNhYmxl IHRoZSBzcGluIGxvY2tzIElSUSBzdGF0ZSBjaGVja3MuCisgICAgICovCisgICAgc3Bpbl9kZWJ1 Z19kaXNhYmxlKCk7CisgICAgZm9yICggaSA9IDA7IGkgPCBkYXRhLT5uX2xvYWRfZnVuY3M7IGkr KyApCisgICAgICAgIGRhdGEtPmxvYWRfZnVuY3NbaV0oKTsKKyAgICBzcGluX2RlYnVnX2VuYWJs ZSgpOworCisgICAgQVNTRVJUKCFsb2NhbF9pcnFfaXNfZW5hYmxlZCgpKTsKKwogICAgIGZvciAo IGkgPSAwOyBpIDwgZGF0YS0+bmZ1bmNzOyBpKysgKQogICAgICAgICBhcmNoX2xpdmVwYXRjaF9h cHBseV9qbXAoJmRhdGEtPmZ1bmNzW2ldKTsKIApAQCAtMTA1OSw2ICsxMDk1LDE4IEBAIHN0YXRp YyBpbnQgcmV2ZXJ0X3BheWxvYWQoc3RydWN0IHBheWxvYWQgKmRhdGEpCiAgICAgZm9yICggaSA9 IDA7IGkgPCBkYXRhLT5uZnVuY3M7IGkrKyApCiAgICAgICAgIGFyY2hfbGl2ZXBhdGNoX3JldmVy dF9qbXAoJmRhdGEtPmZ1bmNzW2ldKTsKIAorICAgIC8qCisgICAgICogU2luY2Ugd2UgYXJlIHJ1 bm5pbmcgd2l0aCBJUlFzIGRpc2FibGVkIGFuZCB0aGUgaG9va3MgbWF5IGNhbGwgY29tbW9uCisg ICAgICogY29kZSAtIHdoaWNoIGV4cGVjdHMgY2VydGFpbiBzcGlubG9ja3MgdG8gcnVuIHdpdGgg SVJRcyBlbmFibGVkIC0gd2UKKyAgICAgKiB0ZW1wb3JhcmlseSBkaXNhYmxlIHRoZSBzcGluIGxv Y2tzIElSUSBzdGF0ZSBjaGVja3MuCisgICAgICovCisgICAgc3Bpbl9kZWJ1Z19kaXNhYmxlKCk7 CisgICAgZm9yICggaSA9IDA7IGkgPCBkYXRhLT5uX3VubG9hZF9mdW5jczsgaSsrICkKKyAgICAg ICAgZGF0YS0+dW5sb2FkX2Z1bmNzW2ldKCk7CisgICAgc3Bpbl9kZWJ1Z19lbmFibGUoKTsKKwor ICAgIEFTU0VSVCghbG9jYWxfaXJxX2lzX2VuYWJsZWQoKSk7CisKICAgICBhcmNoX2xpdmVwYXRj aF9yZXZpdmUoKTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vbGl2ZXBh dGNoX3BheWxvYWQuaCBiL3hlbi9pbmNsdWRlL3hlbi9saXZlcGF0Y2hfcGF5bG9hZC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMzhjYzIKLS0tIC9kZXYvbnVsbAorKysg Yi94ZW4vaW5jbHVkZS94ZW4vbGl2ZXBhdGNoX3BheWxvYWQuaApAQCAtMCwwICsxLDQ5IEBACisv KgorICogQ29weXJpZ2h0IChDKSAyMDE2IENpdHJpeCBTeXN0ZW1zIFImRCBMdGQuCisgKi8KKwor I2lmbmRlZiBfX1hFTl9MSVZFUEFUQ0hfUEFZTE9BRF9IX18KKyNkZWZpbmUgX19YRU5fTElWRVBB VENIX1BBWUxPQURfSF9fCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSB0 byBiZSB1c2VkIGluIHBhdGNoZXMuIFRoZXkgYXJlIHRha2VuCisgKiBmcm9tIGtwYXRjaC4KKyAq LwordHlwZWRlZiB2b2lkIGxpdmVwYXRjaF9sb2FkY2FsbF90KHZvaWQpOwordHlwZWRlZiB2b2lk IGxpdmVwYXRjaF91bmxvYWRjYWxsX3Qodm9pZCk7CisKKy8qCisgKiBMSVZFUEFUQ0hfTE9BRF9I T09LIG1hY3JvCisgKgorICogRGVjbGFyZXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIGFsbG9j YXRlZCBpbiBhIG5ldworICogLmxpdmVwYXRjaC5ob29rLmxvYWQgc2VjdGlvbi4gIFRoaXMgbGl2 ZXBhdGNoX2xvYWRfZGF0YSBzeW1ib2wgaXMgbGF0ZXIKKyAqIHN0cmlwcGVkIGJ5IGNyZWF0ZS1k aWZmLW9iamVjdCBzbyB0aGF0IGl0IGNhbiBiZSBkZWNsYXJlZCBpbiBtdWx0aXBsZQorICogb2Jq ZWN0cyB0aGF0IGFyZSBsYXRlciBsaW5rZWQgdG9nZXRoZXIsIGF2b2lkaW5nIGdsb2JhbCBzeW1i b2wKKyAqIGNvbGxpc2lvbi4gIFNpbmNlIG11bHRpcGxlIGhvb2tzIGNhbiBiZSByZWdpc3RlcmVk LCB0aGUKKyAqIC5saXZlcGF0Y2guaG9vay5sb2FkIHNlY3Rpb24gaXMgYSB0YWJsZSBvZiBmdW5j dGlvbnMgdGhhdCB3aWxsIGJlCisgKiBleGVjdXRlZCBpbiBzZXJpZXMgYnkgdGhlIGxpdmVwYXRj aCBpbmZyYXN0cnVjdHVyZSBhdCBwYXRjaCBsb2FkIHRpbWUuCisgKi8KKyNkZWZpbmUgTElWRVBB VENIX0xPQURfSE9PSyhfZm4pIFwKKyAgICBsaXZlcGF0Y2hfbG9hZGNhbGxfdCAqX19hdHRyaWJ1 dGVfXygod2VhaykpIFwKKyAgICAgICAgY29uc3QgbGl2ZXBhdGNoX2xvYWRfZGF0YV8jI19mbiBf X3NlY3Rpb24oIi5saXZlcGF0Y2guaG9va3MubG9hZCIpID0gX2ZuOworCisvKgorICogTElWRVBB VENIX1VOTE9BRF9IT09LIG1hY3JvCisgKgorICogU2FtZSBhcyBMT0FEIGhvb2sgd2l0aCBzL2xv YWQvdW5sb2FkLworICovCisjZGVmaW5lIExJVkVQQVRDSF9VTkxPQURfSE9PSyhfZm4pIFwKKyAg ICAgbGl2ZXBhdGNoX3VubG9hZGNhbGxfdCAqX19hdHRyaWJ1dGVfXygod2VhaykpIFwKKyAgICAg ICAgY29uc3QgbGl2ZXBhdGNoX3VubG9hZF9kYXRhXyMjX2ZuIF9fc2VjdGlvbigiLmxpdmVwYXRj aC5ob29rcy51bmxvYWQiKSA9IF9mbjsKKworI2VuZGlmIC8qIF9fWEVOX0xJVkVQQVRDSF9QQVlM T0FEX0hfXyAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1m aWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAor ICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuNS41CgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==