From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v2 6/6] drm/msm: remove dsi-staging driver Date: Thu, 19 Apr 2018 16:52:04 -0700 Message-ID: <1524181924-9123-7-git-send-email-jsanka@codeaurora.org> References: <1524181924-9123-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1524181924-9123-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org U0RNODQ1IGhhcyBzd2l0Y2hlZCBmcm9tIGRzaS1zdGFnaW5nIHRvIGRzaSBkcml2ZXIuIFJlbW92 aW5nCnN0YWxlIGNvZGUuCgpjaGFuZ2VzIGluIHYyOgoJLSByZW1vdmUgZmlsZSBjaGFuZ2VzIHVu cmVsYXRlZCB1cHN0cmVhbQoKU2lnbmVkLW9mZi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5r YUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgMTIgLQogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIxIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2NhdGFsb2cuYyAgICAgIHwgIDI0MSAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5oICAgICAgfCAgMjAxIC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX2Nsay5oICAgICAgICAgIHwgIDI3NiAtLQogZHJpdmVycy9ncHUv ZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2xrX21hbmFnZXIuYyAgfCAxMjM1IC0tLS0tLQogZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5jICAgICAgICAgfCAyODQ2IC0t LS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmwuaCAg ICAgICAgIHwgIDYyMyAtLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0 cmxfaHcuaCAgICAgIHwgIDc1MiAtLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9jdHJsX2h3XzFfNC5jICB8ICA0ODAgLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9jdHJsX2h3XzJfMC5jICB8ICAyMzQgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8yLmMgIHwgICA0MiAtCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3X2Ntbi5jICB8IDEzMTIgLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX3JlZy5oICAgICB8ICAxOTYgLQogZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGVmcy5oICAgICAgICAgfCAgNTc5IC0t LQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5jICAgICAgfCA0 MjIxIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9kaXNwbGF5LmggICAgICB8ICA1NTYgLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuYyB8ICAxMTQgLQogZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmggfCAgIDMxIC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZHNpLXN0YWdpbmcvZHNpX2RybS5jICAgICAgICAgIHwgIDY4MSAtLS0tCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uaCAgICAgICAgICB8ICAxMjcgLQogZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfaHcuaCAgICAgICAgICAgfCAgIDQ4IC0KIGRy aXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmMgICAgICAgIHwgMzMyMSAt LS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVs LmggICAgICAgIHwgIDI1NyAtLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf cGh5LmMgICAgICAgICAgfCAgOTM3IC0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFn aW5nL2RzaV9waHkuaCAgICAgICAgICB8ICAyMzUgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHNp LXN0YWdpbmcvZHNpX3BoeV9ody5oICAgICAgIHwgIDI2MCAtLQogZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3X3YyXzAuYyAgfCAgMjUyIC0tCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHdfdjNfMC5jICB8ICA0NDcgLS0tCiAuLi4vZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5jICB8ICA2NzYgLS0tLQog Li4uL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMuaCAgfCAgMTQ0 IC0KIC4uLi9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ192Ml8wLmMgIHwg IDEyNiAtCiAuLi4vZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5j ICB8ICAxMDcgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcHdyLmMgICAg ICAgICAgfCAgMzY1IC0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3Iu aCAgICAgICAgICB8ICAgOTMgLQogMzUgZmlsZXMgY2hhbmdlZCwgMjIwNDggZGVsZXRpb25zKC0p CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf Y2F0YWxvZy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfY2F0YWxvZy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfY2xrLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGtfbWFuYWdlci5jCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5jCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9ody5o CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf Y3RybF9od18xXzQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNp LXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8wLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMi5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od19jbW4uYwogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxf cmVnLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9kZWZzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9kaXNwbGF5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QuYwogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3BsYXlfdGVzdC5o CiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf ZHJtLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9kcm0uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2h3LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9wYW5lbC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfcGFuZWwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmgKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHcuaAogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8w LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9waHlfaHdfdjNfMC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX2NhbGMuaAogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1p bmdfdjJfMC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfcGh5X3RpbWluZ192M18wLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3B3ci5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnCmluZGV4 IDVmM2JkZjAuLjg5ZTFiODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZp ZworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKQEAgLTU4LDE4ICs1OCw2IEBAIGNv bmZpZyBEUk1fTVNNX0RTSQogCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgbmVl ZCBmb3IgTUlQSSBEU0kgY29ubmVjdG9yCiAJICBzdXBwb3J0LgogCi1jb25maWcgRFJNX01TTV9E U0lfU1RBR0lORwotCWJvb2wgIkVuYWJsZSBuZXcgRFNJIGRyaXZlciBzdXBwb3J0IGluIE1TTSBE Uk0gZHJpdmVyIgotCWRlcGVuZHMgb24gRFJNX01TTQotCXNlbGVjdCBEUk1fUEFORUwKLQlzZWxl Y3QgRFJNX01JUElfRFNJCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgQ2hvb3NlIHRoaXMgb3B0aW9u IGlmIHlvdSBuZWVkIE1JUEkgRFNJIGNvbm5lY3RvciBzdXBwb3J0IG9uIE1TTQotCSAgd2hpY2gg Y29uZm9ybXMgdG8gRFJNLiBNSVBJIHN0YW5kcyBmb3IgTW9iaWxlIEluZHVzdHJ5IFByb2Nlc3Nv cgotCSAgSW50ZXJmYWNlIGFuZCBEU0kgc3RhbmRzIGZvciBEaXNwbGF5IFNlcmlhbCBJbnRlcmZh Y2Ugd2hpY2ggcG93ZXJzCi0JICB0aGUgcHJpbWFyeSBkaXNwbGF5IG9mIHlvdXIgbW9iaWxlIGRl dmljZS4KLQogY29uZmlnIERSTV9NU01fRFNJX1BMTAogCWJvb2wgIkVuYWJsZSBEU0kgUExMIGRy aXZlciBpbiBNU00gRFJNIgogCWRlcGVuZHMgb24gRFJNX01TTV9EU0kgJiYgQ09NTU9OX0NMSwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vTWFrZWZpbGUKaW5kZXggYThkOGFkOS4uZmVlMjg1NyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxl CkBAIC0xLDcgKzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogY2Nm bGFncy15IDo9IC1JZHJpdmVycy9ncHUvZHJtL21zbQogY2NmbGFncy15ICs9IC1JZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEKLWNjZmxhZ3MteSArPSAtSWRyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcKIGNjZmxhZ3MtJChDT05GSUdfRFJNX01TTV9EU0kpICs9IC1JZHJpdmVycy9n cHUvZHJtL21zbS9kc2kKIAogbXNtLXkgOj0gXApAQCAtMTQ0LDI2ICsxNDMsNiBAQCBtc20tJChD T05GSUdfRFJNX01TTV9EU0lfMjhOTV84OTYwX1BIWSkgKz0gZHNpL3BoeS9kc2lfcGh5XzI4bm1f ODk2MC5vCiBtc20tJChDT05GSUdfRFJNX01TTV9EU0lfMTROTV9QSFkpICs9IGRzaS9waHkvZHNp X3BoeV8xNG5tLm8KIG1zbS0kKENPTkZJR19EUk1fTVNNX0RTSV8xME5NX1BIWSkgKz0gZHNpL3Bo eS9kc2lfcGh5XzEwbm0ubwogCi1tc20tJChDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORykgKz0g ZHNpLXN0YWdpbmcvZHNpX3BoeS5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfcHdyLm8gXAotCQkJ CWRzaS1zdGFnaW5nL2RzaV9waHkubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8w Lm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9waHlfaHdfdjNfMC5vIFwKLQkJCQlkc2ktc3RhZ2lu Zy9kc2lfcGh5X3RpbWluZ19jYWxjLm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5n X3YyXzAubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5vIFwKLQkJCQlk c2ktc3RhZ2luZy9kc2lfY3RybF9od19jbW4ubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2N0cmxf aHdfMV80Lm8gXAotCQkJCWRzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMC5vIFwKLQkJCQlkc2kt c3RhZ2luZy9kc2lfY3RybF9od18yXzIubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2N0cmwubyBc Ci0JCQkJZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2Ry bS5vIFwKLQkJCQlkc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5vIFwKLQkJCQlkc2ktc3RhZ2luZy9k c2lfcGFuZWwubyBcCi0JCQkJZHNpLXN0YWdpbmcvZHNpX2Nsa19tYW5hZ2VyLm8gXAotCQkJCWRz aS1zdGFnaW5nL2RzaV9kaXNwbGF5X3Rlc3QubwotCiBtc20tJChDT05GSUdfRFJNX01TTV9EU0lf MjhOTV9QSFkpICs9IGRzaS9waHkvZHNpX3BoeV8yOG5tLm8KIG1zbS0kKENPTkZJR19EUk1fTVNN X0RTSV8yME5NX1BIWSkgKz0gZHNpL3BoeS9kc2lfcGh5XzIwbm0ubwogbXNtLSQoQ09ORklHX0RS TV9NU01fRFNJXzI4Tk1fODk2MF9QSFkpICs9IGRzaS9waHkvZHNpX3BoeV8yOG5tXzg5NjAubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5j IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2I2NTlhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2NhdGFsb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDI0 MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZp bmUgcHJfZm10KGZtdCkgIm1zbS1kc2ktY2F0YWxvZzpbJXNdICIgZm10LCBfX2Z1bmNfXwotI2lu Y2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KLSNpbmNsdWRlICJkc2lfY2F0YWxvZy5oIgotCi0vKioK LSAqIGRzaV9jYXRhbG9nX2Ntbl9pbml0KCkgLSBjYXRhbG9nIGluaXQgZm9yIGRzaSBjb250cm9s bGVyIHYxLjQKLSAqLwotc3RhdGljIHZvaWQgZHNpX2NhdGFsb2dfY21uX2luaXQoc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsLAotCQllbnVtIGRzaV9jdHJsX3ZlcnNpb24gdmVyc2lvbikKLXsKLQkv KiBjb21tb24gZnVuY3Rpb25zICovCi0JY3RybC0+b3BzLmhvc3Rfc2V0dXAgICAgICAgICAgICAg PSBkc2lfY3RybF9od19jbW5faG9zdF9zZXR1cDsKLQljdHJsLT5vcHMudmlkZW9fZW5naW5lX2Vu ICAgICAgICA9IGRzaV9jdHJsX2h3X2Ntbl92aWRlb19lbmdpbmVfZW47Ci0JY3RybC0+b3BzLnZp ZGVvX2VuZ2luZV9zZXR1cCAgICAgPSBkc2lfY3RybF9od19jbW5fdmlkZW9fZW5naW5lX3NldHVw OwotCWN0cmwtPm9wcy5zZXRfdmlkZW9fdGltaW5nICAgICAgID0gZHNpX2N0cmxfaHdfY21uX3Nl dF92aWRlb190aW1pbmc7Ci0JY3RybC0+b3BzLnNldF90aW1pbmdfZGIgICAgICAgICAgPSBkc2lf Y3RybF9od19jbW5fc2V0X3RpbWluZ19kYjsKLQljdHJsLT5vcHMuY21kX2VuZ2luZV9zZXR1cCAg ICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX3NldHVwOwotCWN0cmwtPm9wcy5zZXR1 cF9jbWRfc3RyZWFtICAgICAgID0gZHNpX2N0cmxfaHdfY21uX3NldHVwX2NtZF9zdHJlYW07Ci0J Y3RybC0+b3BzLmN0cmxfZW4gICAgICAgICAgICAgICAgPSBkc2lfY3RybF9od19jbW5fY3RybF9l bjsKLQljdHJsLT5vcHMuY21kX2VuZ2luZV9lbiAgICAgICAgICA9IGRzaV9jdHJsX2h3X2Ntbl9j bWRfZW5naW5lX2VuOwotCWN0cmwtPm9wcy5waHlfc3dfcmVzZXQgICAgICAgICAgID0gZHNpX2N0 cmxfaHdfY21uX3BoeV9zd19yZXNldDsKLQljdHJsLT5vcHMuc29mdF9yZXNldCAgICAgICAgICAg ICA9IGRzaV9jdHJsX2h3X2Ntbl9zb2Z0X3Jlc2V0OwotCWN0cmwtPm9wcy5raWNrb2ZmX2NvbW1h bmQgICAgICAgID0gZHNpX2N0cmxfaHdfY21uX2tpY2tvZmZfY29tbWFuZDsKLQljdHJsLT5vcHMu a2lja29mZl9maWZvX2NvbW1hbmQgICA9IGRzaV9jdHJsX2h3X2Ntbl9raWNrb2ZmX2ZpZm9fY29t bWFuZDsKLQljdHJsLT5vcHMucmVzZXRfY21kX2ZpZm8gICAgICAgICA9IGRzaV9jdHJsX2h3X2Nt bl9yZXNldF9jbWRfZmlmbzsKLQljdHJsLT5vcHMudHJpZ2dlcl9jb21tYW5kX2RtYSAgICA9IGRz aV9jdHJsX2h3X2Ntbl90cmlnZ2VyX2NvbW1hbmRfZG1hOwotCWN0cmwtPm9wcy5nZXRfaW50ZXJy dXB0X3N0YXR1cyAgID0gZHNpX2N0cmxfaHdfY21uX2dldF9pbnRlcnJ1cHRfc3RhdHVzOwotCWN0 cmwtPm9wcy5nZXRfZXJyb3Jfc3RhdHVzICAgICAgID0gZHNpX2N0cmxfaHdfY21uX2dldF9lcnJv cl9zdGF0dXM7Ci0JY3RybC0+b3BzLmNsZWFyX2Vycm9yX3N0YXR1cyAgICAgPSBkc2lfY3RybF9o d19jbW5fY2xlYXJfZXJyb3Jfc3RhdHVzOwotCWN0cmwtPm9wcy5jbGVhcl9pbnRlcnJ1cHRfc3Rh dHVzID0KLQkJZHNpX2N0cmxfaHdfY21uX2NsZWFyX2ludGVycnVwdF9zdGF0dXM7Ci0JY3RybC0+ b3BzLmVuYWJsZV9zdGF0dXNfaW50ZXJydXB0cyA9Ci0JCWRzaV9jdHJsX2h3X2Ntbl9lbmFibGVf c3RhdHVzX2ludGVycnVwdHM7Ci0JY3RybC0+b3BzLmVuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzID0K LQkJZHNpX2N0cmxfaHdfY21uX2VuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzOwotCWN0cmwtPm9wcy52 aWRlb190ZXN0X3BhdHRlcm5fc2V0dXAgPQotCQlkc2lfY3RybF9od19jbW5fdmlkZW9fdGVzdF9w YXR0ZXJuX3NldHVwOwotCWN0cmwtPm9wcy5jbWRfdGVzdF9wYXR0ZXJuX3NldHVwID0KLQkJZHNp X2N0cmxfaHdfY21uX2NtZF90ZXN0X3BhdHRlcm5fc2V0dXA7Ci0JY3RybC0+b3BzLnRlc3RfcGF0 dGVybl9lbmFibGUgICAgPSBkc2lfY3RybF9od19jbW5fdGVzdF9wYXR0ZXJuX2VuYWJsZTsKLQlj dHJsLT5vcHMudHJpZ2dlcl9jbWRfdGVzdF9wYXR0ZXJuID0KLQkJZHNpX2N0cmxfaHdfY21uX3Ry aWdnZXJfY21kX3Rlc3RfcGF0dGVybjsKLQljdHJsLT5vcHMuY2xlYXJfcGh5MF9sbl9lcnIgPSBk c2lfY3RybF9od19kbG4wX3BoeV9lcnI7Ci0JY3RybC0+b3BzLnBoeV9yZXNldF9jb25maWcgPSBk c2lfY3RybF9od19jbW5fcGh5X3Jlc2V0X2NvbmZpZzsKLQljdHJsLT5vcHMuc2V0dXBfbWlzciA9 IGRzaV9jdHJsX2h3X2Ntbl9zZXR1cF9taXNyOwotCWN0cmwtPm9wcy5jb2xsZWN0X21pc3IgPSBk c2lfY3RybF9od19jbW5fY29sbGVjdF9taXNyOwotCWN0cmwtPm9wcy5kZWJ1Z19idXMgPSBkc2lf Y3RybF9od19jbW5fZGVidWdfYnVzOwotCi0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSBEU0lf Q1RSTF9WRVJTSU9OXzFfNDoKLQkJY3RybC0+b3BzLnNldHVwX2xhbmVfbWFwID0gZHNpX2N0cmxf aHdfMTRfc2V0dXBfbGFuZV9tYXA7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy51bHBzX3JlcXVlc3Qg PSBkc2lfY3RybF9od18xNF91bHBzX3JlcXVlc3Q7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy51bHBz X2V4aXQgPSBkc2lfY3RybF9od18xNF91bHBzX2V4aXQ7Ci0JCWN0cmwtPm9wcy53YWl0X2Zvcl9s YW5lX2lkbGUgPQotCQkJZHNpX2N0cmxfaHdfMTRfd2FpdF9mb3JfbGFuZV9pZGxlOwotCQljdHJs LT5vcHMudWxwc19vcHMuZ2V0X2xhbmVzX2luX3VscHMgPQotCQkJZHNpX2N0cmxfaHdfMTRfZ2V0 X2xhbmVzX2luX3VscHM7Ci0JCWN0cmwtPm9wcy5jbGFtcF9lbmFibGUgPSBkc2lfY3RybF9od18x NF9jbGFtcF9lbmFibGU7Ci0JCWN0cmwtPm9wcy5jbGFtcF9kaXNhYmxlID0gZHNpX2N0cmxfaHdf MTRfY2xhbXBfZGlzYWJsZTsKLQkJY3RybC0+b3BzLnJlZ19kdW1wX3RvX2J1ZmZlciA9Ci0JCQlk c2lfY3RybF9od18xNF9yZWdfZHVtcF90b19idWZmZXI7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NU UkxfVkVSU0lPTl8yXzA6Ci0JCWN0cmwtPm9wcy5zZXR1cF9sYW5lX21hcCA9IGRzaV9jdHJsX2h3 XzIwX3NldHVwX2xhbmVfbWFwOwotCQljdHJsLT5vcHMud2FpdF9mb3JfbGFuZV9pZGxlID0KLQkJ CWRzaV9jdHJsX2h3XzIwX3dhaXRfZm9yX2xhbmVfaWRsZTsKLQkJY3RybC0+b3BzLnJlZ19kdW1w X3RvX2J1ZmZlciA9Ci0JCQlkc2lfY3RybF9od18yMF9yZWdfZHVtcF90b19idWZmZXI7Ci0JCWN0 cmwtPm9wcy51bHBzX29wcy51bHBzX3JlcXVlc3QgPSBOVUxMOwotCQljdHJsLT5vcHMudWxwc19v cHMudWxwc19leGl0ID0gTlVMTDsKLQkJY3RybC0+b3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91 bHBzID0gTlVMTDsKLQkJY3RybC0+b3BzLmNsYW1wX2VuYWJsZSA9IE5VTEw7Ci0JCWN0cmwtPm9w cy5jbGFtcF9kaXNhYmxlID0gTlVMTDsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9O XzJfMjoKLQkJY3RybC0+b3BzLnBoeV9yZXNldF9jb25maWcgPSBkc2lfY3RybF9od18yMl9waHlf cmVzZXRfY29uZmlnOwotCQljdHJsLT5vcHMuc2V0dXBfbGFuZV9tYXAgPSBkc2lfY3RybF9od18y MF9zZXR1cF9sYW5lX21hcDsKLQkJY3RybC0+b3BzLndhaXRfZm9yX2xhbmVfaWRsZSA9Ci0JCQlk c2lfY3RybF9od18yMF93YWl0X2Zvcl9sYW5lX2lkbGU7Ci0JCWN0cmwtPm9wcy5yZWdfZHVtcF90 b19idWZmZXIgPQotCQkJZHNpX2N0cmxfaHdfMjBfcmVnX2R1bXBfdG9fYnVmZmVyOwotCQljdHJs LT5vcHMudWxwc19vcHMudWxwc19yZXF1ZXN0ID0gTlVMTDsKLQkJY3RybC0+b3BzLnVscHNfb3Bz LnVscHNfZXhpdCA9IE5VTEw7Ci0JCWN0cmwtPm9wcy51bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxw cyA9IE5VTEw7Ci0JCWN0cmwtPm9wcy5jbGFtcF9lbmFibGUgPSBOVUxMOwotCQljdHJsLT5vcHMu Y2xhbXBfZGlzYWJsZSA9IE5VTEw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0K LX0KLQotLyoqCi0gKiBkc2lfY2F0YWxvZ19jdHJsX3NldHVwKCkgLSByZXR1cm4gY2F0YWxvZyBp bmZvIGZvciBkc2kgY29udHJvbGxlcgotICogQGN0cmw6ICAgICAgICBQb2ludGVyIHRvIERTSSBj b250cm9sbGVyIGh3IG9iamVjdC4KLSAqIEB2ZXJzaW9uOiAgICAgRFNJIGNvbnRyb2xsZXIgdmVy c2lvbi4KLSAqIEBpbmRleDogICAgICAgRFNJIGNvbnRyb2xsZXIgaW5zdGFuY2UgSUQuCi0gKiBA cGh5X2lzb2xhdGlvbl9lbmFibGVkOiAgICAgICBEU0kgY29udHJvbGxlciB3b3JrcyBpc29sYXRl ZCBmcm9tIHBoeS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHVwcyB0aGUgY2F0YWxvZyBpbmZv cm1hdGlvbiBpbiB0aGUgZHNpX2N0cmxfaHcgb2JqZWN0LgotICoKLSAqIHJldHVybjogZXJyb3Ig Y29kZSBmb3IgZmFpbHVyZSBhbmQgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jYXRhbG9n X2N0cmxfc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkgICBlbnVtIGRzaV9jdHJs X3ZlcnNpb24gdmVyc2lvbiwgdTMyIGluZGV4LAotCQkgICBib29sIHBoeV9pc29sYXRpb25fZW5h YmxlZCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKHZlcnNpb24gPT0gRFNJX0NUUkxfVkVSU0lP Tl9VTktOT1dOIHx8Ci0JICAgIHZlcnNpb24gPj0gRFNJX0NUUkxfVkVSU0lPTl9NQVgpIHsKLQkJ cHJfZXJyKCJVbnN1cHBvcnRlZCB2ZXJzaW9uOiAlZFxuIiwgdmVyc2lvbik7Ci0JCXJldHVybiAt RU5PVFNVUFA7Ci0JfQotCi0JY3RybC0+aW5kZXggPSBpbmRleDsKLQlzZXRfYml0KERTSV9DVFJM X1ZJREVPX1RQRywgY3RybC0+ZmVhdHVyZV9tYXApOwotCXNldF9iaXQoRFNJX0NUUkxfQ01EX1RQ RywgY3RybC0+ZmVhdHVyZV9tYXApOwotCXNldF9iaXQoRFNJX0NUUkxfVkFSSUFCTEVfUkVGUkVT SF9SQVRFLCBjdHJsLT5mZWF0dXJlX21hcCk7Ci0Jc2V0X2JpdChEU0lfQ1RSTF9EWU5BTUlDX1JF RlJFU0gsIGN0cmwtPmZlYXR1cmVfbWFwKTsKLQlzZXRfYml0KERTSV9DVFJMX0RFU0tFV19DQUxJ QiwgY3RybC0+ZmVhdHVyZV9tYXApOwotCXNldF9iaXQoRFNJX0NUUkxfRFBIWSwgY3RybC0+ZmVh dHVyZV9tYXApOwotCi0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9O XzFfNDoKLQkJZHNpX2NhdGFsb2dfY21uX2luaXQoY3RybCwgdmVyc2lvbik7Ci0JCWJyZWFrOwot CWNhc2UgRFNJX0NUUkxfVkVSU0lPTl8yXzA6Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzJfMjoK LQkJY3RybC0+cGh5X2lzb2xhdGlvbl9lbmFibGVkID0gcGh5X2lzb2xhdGlvbl9lbmFibGVkOwot CQlkc2lfY2F0YWxvZ19jbW5faW5pdChjdHJsLCB2ZXJzaW9uKTsKLQkJYnJlYWs7Ci0JZGVmYXVs dDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICog ZHNpX2NhdGFsb2dfcGh5XzJfMF9pbml0KCkgLSBjYXRhbG9nIGluaXQgZm9yIERTSSBQSFkgMTRu bQotICovCi1zdGF0aWMgdm9pZCBkc2lfY2F0YWxvZ19waHlfMl8wX2luaXQoc3RydWN0IGRzaV9w aHlfaHcgKnBoeSkKLXsKLQlwaHktPm9wcy5yZWd1bGF0b3JfZW5hYmxlID0gZHNpX3BoeV9od192 Ml8wX3JlZ3VsYXRvcl9lbmFibGU7Ci0JcGh5LT5vcHMucmVndWxhdG9yX2Rpc2FibGUgPSBkc2lf cGh5X2h3X3YyXzBfcmVndWxhdG9yX2Rpc2FibGU7Ci0JcGh5LT5vcHMuZW5hYmxlID0gZHNpX3Bo eV9od192Ml8wX2VuYWJsZTsKLQlwaHktPm9wcy5kaXNhYmxlID0gZHNpX3BoeV9od192Ml8wX2Rp c2FibGU7Ci0JcGh5LT5vcHMuY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMgPQotCQlkc2lfcGh5X2h3 X2NhbGN1bGF0ZV90aW1pbmdfcGFyYW1zOwotCXBoeS0+b3BzLnBoeV9pZGxlX29uID0gZHNpX3Bo eV9od192Ml8wX2lkbGVfb247Ci0JcGh5LT5vcHMucGh5X2lkbGVfb2ZmID0gZHNpX3BoeV9od192 Ml8wX2lkbGVfb2ZmOwotCXBoeS0+b3BzLmNhbGN1bGF0ZV90aW1pbmdfcGFyYW1zID0KLQkJZHNp X3BoeV9od19jYWxjdWxhdGVfdGltaW5nX3BhcmFtczsKLQlwaHktPm9wcy5waHlfdGltaW5nX3Zh bCA9IGRzaV9waHlfaHdfdGltaW5nX3ZhbF92Ml8wOwotfQotCi0vKioKLSAqIGRzaV9jYXRhbG9n X3BoeV8zXzBfaW5pdCgpIC0gY2F0YWxvZyBpbml0IGZvciBEU0kgUEhZIDEwbm0KLSAqLwotc3Rh dGljIHZvaWQgZHNpX2NhdGFsb2dfcGh5XzNfMF9pbml0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkp Ci17Ci0JcGh5LT5vcHMucmVndWxhdG9yX2VuYWJsZSA9IGRzaV9waHlfaHdfdjNfMF9yZWd1bGF0 b3JfZW5hYmxlOwotCXBoeS0+b3BzLnJlZ3VsYXRvcl9kaXNhYmxlID0gZHNpX3BoeV9od192M18w X3JlZ3VsYXRvcl9kaXNhYmxlOwotCXBoeS0+b3BzLmVuYWJsZSA9IGRzaV9waHlfaHdfdjNfMF9l bmFibGU7Ci0JcGh5LT5vcHMuZGlzYWJsZSA9IGRzaV9waHlfaHdfdjNfMF9kaXNhYmxlOwotCXBo eS0+b3BzLmNhbGN1bGF0ZV90aW1pbmdfcGFyYW1zID0KLQkJZHNpX3BoeV9od19jYWxjdWxhdGVf dGltaW5nX3BhcmFtczsKLQlwaHktPm9wcy51bHBzX29wcy53YWl0X2Zvcl9sYW5lX2lkbGUgPQot CQlkc2lfcGh5X2h3X3YzXzBfd2FpdF9mb3JfbGFuZV9pZGxlOwotCXBoeS0+b3BzLnVscHNfb3Bz LnVscHNfcmVxdWVzdCA9Ci0JCWRzaV9waHlfaHdfdjNfMF91bHBzX3JlcXVlc3Q7Ci0JcGh5LT5v cHMudWxwc19vcHMudWxwc19leGl0ID0KLQkJZHNpX3BoeV9od192M18wX3VscHNfZXhpdDsKLQlw aHktPm9wcy51bHBzX29wcy5nZXRfbGFuZXNfaW5fdWxwcyA9Ci0JCWRzaV9waHlfaHdfdjNfMF9n ZXRfbGFuZXNfaW5fdWxwczsKLQlwaHktPm9wcy51bHBzX29wcy5pc19sYW5lc19pbl91bHBzID0K LQkJZHNpX3BoeV9od192M18wX2lzX2xhbmVzX2luX3VscHM7Ci0JcGh5LT5vcHMucGh5X3RpbWlu Z192YWwgPSBkc2lfcGh5X2h3X3RpbWluZ192YWxfdjNfMDsKLX0KLQotLyoqCi0gKiBkc2lfY2F0 YWxvZ19waHlfc2V0dXAoKSAtIHJldHVybiBjYXRhbG9nIGluZm8gZm9yIGRzaSBwaHkgaGFyZHdh cmUKLSAqIEBjdHJsOiAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGh3IG9iamVjdC4KLSAqIEB2 ZXJzaW9uOiAgICAgRFNJIFBIWSB2ZXJzaW9uLgotICogQGluZGV4OiAgICAgICBEU0kgUEhZIGlu c3RhbmNlIElELgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0dXBzIHRoZSBjYXRhbG9nIGluZm9y bWF0aW9uIGluIHRoZSBkc2lfcGh5X2h3IG9iamVjdC4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNv ZGUgZm9yIGZhaWx1cmUgYW5kIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2F0YWxvZ19w aHlfc2V0dXAoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgZW51bSBkc2lfcGh5X3ZlcnNp b24gdmVyc2lvbiwKLQkJCSAgdTMyIGluZGV4KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAodmVy c2lvbiA9PSBEU0lfUEhZX1ZFUlNJT05fVU5LTk9XTiB8fAotCSAgICB2ZXJzaW9uID49IERTSV9Q SFlfVkVSU0lPTl9NQVgpIHsKLQkJcHJfZXJyKCJVbnN1cHBvcnRlZCB2ZXJzaW9uOiAlZFxuIiwg dmVyc2lvbik7Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0JfQotCi0JcGh5LT5pbmRleCA9IGluZGV4 OwotCXNldF9iaXQoRFNJX1BIWV9EUEhZLCBwaHktPmZlYXR1cmVfbWFwKTsKLQotCWRzaV9waHlf dGltaW5nX2NhbGNfaW5pdChwaHksIHZlcnNpb24pOwotCi0Jc3dpdGNoICh2ZXJzaW9uKSB7Ci0J Y2FzZSBEU0lfUEhZX1ZFUlNJT05fMl8wOgotCQlkc2lfY2F0YWxvZ19waHlfMl8wX2luaXQocGh5 KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fM18wOgotCQlkc2lfY2F0YWxvZ19w aHlfM18wX2luaXQocGh5KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fMF8wX0hQ TToKLQljYXNlIERTSV9QSFlfVkVSU0lPTl8wXzBfTFBNOgotCWNhc2UgRFNJX1BIWV9WRVJTSU9O XzFfMDoKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0KLQotCXJldHVybiByYzsK LX0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9j YXRhbG9nLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jYXRhbG9nLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNDZhZTAuLjAwMDAwMDAKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY2F0YWxvZy5oCisrKyAvZGV2L251bGwK QEAgLTEsMjAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxOCwgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK LSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQot ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8K LQotI2lmbmRlZiBfRFNJX0NBVEFMT0dfSF8KLSNkZWZpbmUgX0RTSV9DQVRBTE9HX0hfCi0KLSNp bmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRzaV9waHlfaHcuaCIKLQotLyoqCi0g KiBkc2lfY2F0YWxvZ19jdHJsX3NldHVwKCkgLSByZXR1cm4gY2F0YWxvZyBpbmZvIGZvciBkc2kg Y29udHJvbGxlcgotICogQGN0cmw6ICAgICAgICBQb2ludGVyIHRvIERTSSBjb250cm9sbGVyIGh3 IG9iamVjdC4KLSAqIEB2ZXJzaW9uOiAgICAgRFNJIGNvbnRyb2xsZXIgdmVyc2lvbi4KLSAqIEBp bmRleDogICAgICAgRFNJIGNvbnRyb2xsZXIgaW5zdGFuY2UgSUQuCi0gKiBAcGh5X2lzb2xhdGlv bl9lbmFibGVkOiAgICAgICBEU0kgY29udHJvbGxlciB3b3JrcyBpc29sYXRlZCBmcm9tIHBoeS4K LSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHVwcyB0aGUgY2F0YWxvZyBpbmZvcm1hdGlvbiBpbiB0 aGUgZHNpX2N0cmxfaHcgb2JqZWN0LgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBmb3IgZmFp bHVyZSBhbmQgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9jYXRhbG9nX2N0cmxfc2V0dXAo c3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkgICBlbnVtIGRzaV9jdHJsX3ZlcnNpb24gdmVy c2lvbiwgdTMyIGluZGV4LAotCQkgICBib29sIHBoeV9pc29sYXRpb25fZW5hYmxlZCk7Ci0KLS8q KgotICogZHNpX2NhdGFsb2dfcGh5X3NldHVwKCkgLSByZXR1cm4gY2F0YWxvZyBpbmZvIGZvciBk c2kgcGh5IGhhcmR3YXJlCi0gKiBAcGh5OiAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGh3IG9i amVjdC4KLSAqIEB2ZXJzaW9uOiAgICAgRFNJIFBIWSB2ZXJzaW9uLgotICogQGluZGV4OiAgICAg ICBEU0kgUEhZIGluc3RhbmNlIElELgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2V0dXBzIHRoZSBj YXRhbG9nIGluZm9ybWF0aW9uIGluIHRoZSBkc2lfcGh5X2h3IG9iamVjdC4KLSAqCi0gKiByZXR1 cm46IGVycm9yIGNvZGUgZm9yIGZhaWx1cmUgYW5kIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBk c2lfY2F0YWxvZ19waHlfc2V0dXAoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgZW51bSBk c2lfcGh5X3ZlcnNpb24gdmVyc2lvbiwKLQkJCSAgdTMyIGluZGV4KTsKLQotLyoqCi0gKiBkc2lf cGh5X3RpbWluZ19jYWxjX2luaXQoKSAtIGluaXRpYWxpemUgaW5mbyBmb3IgRFNJIFBIWSB0aW1p bmcgY2FsY3VsYXRpb25zCi0gKiBAcGh5OiAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGh3IG9i amVjdC4KLSAqIEB2ZXJzaW9uOiAgICAgRFNJIFBIWSB2ZXJzaW9uLgotICoKLSAqIFRoaXMgZnVu Y3Rpb24gc2V0dXBzIHRoZSBjYXRhbG9nIGluZm9ybWF0aW9uIGluIHRoZSBkc2lfcGh5X2h3IG9i amVjdC4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgZm9yIGZhaWx1cmUgYW5kIDAgZm9yIHN1 Y2Nlc3MuCi0gKi8KLWludCBkc2lfcGh5X3RpbWluZ19jYWxjX2luaXQoc3RydWN0IGRzaV9waHlf aHcgKnBoeSwKLQllbnVtIGRzaV9waHlfdmVyc2lvbiB2ZXJzaW9uKTsKLQotLyoqCi0gKiBkc2lf cGh5X2h3X2NhbGN1bGF0ZV90aW1pbmdfcGFyYW1zKCkgLSBEU0kgUEhZIHRpbWluZyBwYXJhbWV0 ZXIgY2FsY3VsYXRpb25zCi0gKiBAcGh5OiAgICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGh3IG9i amVjdC4KLSAqIEBtb2RlOiAgICAgICBEU0kgbW9kZSBpbmZvcm1hdGlvbi4KLSAqIEBob3N0OiAg ICAgICBEU0kgaG9zdCBjb25maWd1cmF0aW9uLgotICogQHRpbWluZzogICAgIERTSSBwaHkgbGFu ZSBjb25maWd1cmF0aW9ucy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHVwcyB0aGUgY2F0YWxv ZyBpbmZvcm1hdGlvbiBpbiB0aGUgZHNpX3BoeV9odyBvYmplY3QuCi0gKgotICogcmV0dXJuOiBl cnJvciBjb2RlIGZvciBmYWlsdXJlIGFuZCAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX3Bo eV9od19jYWxjdWxhdGVfdGltaW5nX3BhcmFtcyhzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJ CQkgICAgc3RydWN0IGRzaV9tb2RlX2luZm8gKm1vZGUsCi0Jc3RydWN0IGRzaV9ob3N0X2NvbW1v bl9jZmcgKmhvc3QsCi0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqdGltaW5nKTsKLQot LyogRGVmaW5pdGlvbnMgZm9yIDE0bm0gUEhZIGhhcmR3YXJlIGRyaXZlciAqLwotdm9pZCBkc2lf cGh5X2h3X3YyXzBfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJ CSAgICAgIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKmNmZyk7Ci12b2lkIGRzaV9waHlf aHdfdjJfMF9yZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5KTsKLXZvaWQg ZHNpX3BoeV9od192Ml8wX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3QgZHNp X3BoeV9jZmcgKmNmZyk7Ci12b2lkIGRzaV9waHlfaHdfdjJfMF9kaXNhYmxlKHN0cnVjdCBkc2lf cGh5X2h3ICpwaHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKTsKLXZvaWQgZHNpX3BoeV9od192 Ml8wX2lkbGVfb24oc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9waHlfY2ZnICpj ZmcpOwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfaWRsZV9vZmYoc3RydWN0IGRzaV9waHlfaHcgKnBo eSk7Ci1pbnQgZHNpX3BoeV9od190aW1pbmdfdmFsX3YyXzAoc3RydWN0IGRzaV9waHlfcGVyX2xh bmVfY2ZncyAqdGltaW5nX2NmZywKLQkJdTMyICp0aW1pbmdfdmFsLCB1MzIgc2l6ZSk7Ci0KLS8q IERlZmluaXRpb25zIGZvciAxMG5tIFBIWSBoYXJkd2FyZSBkcml2ZXIgKi8KLXZvaWQgZHNpX3Bo eV9od192M18wX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCQkg ICAgICBzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICpjZmcpOwotdm9pZCBkc2lfcGh5X2h3 X3YzXzBfcmVndWxhdG9yX2Rpc2FibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSk7Ci12b2lkIGRz aV9waHlfaHdfdjNfMF9lbmFibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0IGRzaV9w aHlfY2ZnICpjZmcpOwotdm9pZCBkc2lfcGh5X2h3X3YzXzBfZGlzYWJsZShzdHJ1Y3QgZHNpX3Bo eV9odyAqcGh5LCBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZyk7Ci1pbnQgZHNpX3BoeV9od192M18w X3dhaXRfZm9yX2xhbmVfaWRsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCB1MzIgbGFuZXMpOwot dm9pZCBkc2lfcGh5X2h3X3YzXzBfdWxwc19yZXF1ZXN0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHks Ci0JCXN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnLCB1MzIgbGFuZXMpOwotdm9pZCBkc2lfcGh5X2h3 X3YzXzBfdWxwc19leGl0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgZHNpX3Bo eV9jZmcgKmNmZywgdTMyIGxhbmVzKTsKLXUzMiBkc2lfcGh5X2h3X3YzXzBfZ2V0X2xhbmVzX2lu X3VscHMoc3RydWN0IGRzaV9waHlfaHcgKnBoeSk7Ci1ib29sIGRzaV9waHlfaHdfdjNfMF9pc19s YW5lc19pbl91bHBzKHUzMiBsYW5lcywgdTMyIHVscHNfbGFuZXMpOwotaW50IGRzaV9waHlfaHdf dGltaW5nX3ZhbF92M18wKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZ19jZmcs Ci0JCXUzMiAqdGltaW5nX3ZhbCwgdTMyIHNpemUpOwotCi0vKiBEU0kgY29udHJvbGxlciBjb21t b24gb3BzICovCi11MzIgZHNpX2N0cmxfaHdfY21uX2dldF9pbnRlcnJ1cHRfc3RhdHVzKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9kZWJ1Z19idXMoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX2NsZWFyX2ludGVy cnVwdF9zdGF0dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgaW50cyk7Ci12b2lkIGRz aV9jdHJsX2h3X2Ntbl9lbmFibGVfc3RhdHVzX2ludGVycnVwdHMoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsLAotCQkJCQkgICAgIHUzMiBpbnRzKTsKLQotdTY0IGRzaV9jdHJsX2h3X2Ntbl9nZXRf ZXJyb3Jfc3RhdHVzKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJsX2h3 X2Ntbl9jbGVhcl9lcnJvcl9zdGF0dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1NjQgZXJy b3JzKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX2VuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkJICAgIHU2NCBlcnJvcnMpOwotCi12b2lkIGRzaV9j dHJsX2h3X2Ntbl92aWRlb190ZXN0X3BhdHRlcm5fc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpj dHJsLAotCQkJCSBlbnVtIGRzaV90ZXN0X3BhdHRlcm4gdHlwZSwKLQkJCQkgdTMyIGluaXRfdmFs KTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX2NtZF90ZXN0X3BhdHRlcm5fc2V0dXAoc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsLAotCQkJICAgICAgIGVudW0gZHNpX3Rlc3RfcGF0dGVybiAgdHlwZSwK LQkJCSAgICAgICB1MzIgaW5pdF92YWwsCi0JCQkgICAgICAgdTMyIHN0cmVhbV9pZCk7Ci12b2lk IGRzaV9jdHJsX2h3X2Ntbl90ZXN0X3BhdHRlcm5fZW5hYmxlKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwgYm9vbCBlbmFibGUpOwotdm9pZCBkc2lfY3RybF9od19jbW5fdHJpZ2dlcl9jbWRfdGVz dF9wYXR0ZXJuKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgdTMyIHN0cmVhbV9pZCk7 Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2hvc3Rfc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpj dHJsLAotCQkJICAgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjb25maWcpOwotdm9p ZCBkc2lfY3RybF9od19jbW5fdmlkZW9fZW5naW5lX2VuKHN0cnVjdCBkc2lfY3RybF9odyAqY3Ry bCwgYm9vbCBvbik7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl92aWRlb19lbmdpbmVfc2V0dXAoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgICBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9u X2NmZyAqY29tbW9uX2NmZywKLQkJCQkgICAgICAgc3RydWN0IGRzaV92aWRlb19lbmdpbmVfY2Zn ICpjZmcpOwotdm9pZCBkc2lfY3RybF9od19jbW5fc2V0X3ZpZGVvX3RpbWluZyhzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQkgc3RydWN0IGRzaV9tb2RlX2luZm8gKm1vZGUpOwotdm9pZCBk c2lfY3RybF9od19jbW5fc2V0X3RpbWluZ19kYihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0J CQkJICAgICBib29sIGVuYWJsZSk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX3Nl dHVwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIHN0cnVjdCBkc2lfaG9zdF9j b21tb25fY2ZnICpjb21tb25fY2ZnLAotCQkJCSAgICAgc3RydWN0IGRzaV9jbWRfZW5naW5lX2Nm ZyAqY2ZnKTsKLQotdm9pZCBkc2lfY3RybF9od19jbW5fY3RybF9lbihzdHJ1Y3QgZHNpX2N0cmxf aHcgKmN0cmwsIGJvb2wgb24pOwotdm9pZCBkc2lfY3RybF9od19jbW5fY21kX2VuZ2luZV9lbihz dHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgb24pOwotCi12b2lkIGRzaV9jdHJsX2h3X2Nt bl9zZXR1cF9jbWRfc3RyZWFtKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIHN0 cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCSAgICAgdTMyIGhfc3RyaWRlLAotCQkJCSAg ICAgdTMyIHZjX2lkLAotCQkJCSAgICAgc3RydWN0IGRzaV9yZWN0ICpyb2kpOwotdm9pZCBkc2lf Y3RybF9od19jbW5fcGh5X3N3X3Jlc2V0KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lk IGRzaV9jdHJsX2h3X2Ntbl9zb2Z0X3Jlc2V0KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci0K LXZvaWQgZHNpX2N0cmxfaHdfY21uX3NldHVwX21pc3Ioc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJs LAotCQkJZW51bSBkc2lfb3BfbW9kZSBwYW5lbF9tb2RlLAotCQkJYm9vbCBlbmFibGUsIHUzMiBm cmFtZV9jb3VudCk7Ci11MzIgZHNpX2N0cmxfaHdfY21uX2NvbGxlY3RfbWlzcihzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQllbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGUpOwotCi12b2lk IGRzaV9jdHJsX2h3X2Ntbl9raWNrb2ZmX2NvbW1hbmQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJs LAotCQkJc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFfaW5mbyAqY21kLAotCQkJdTMyIGZsYWdzKTsK LQotdm9pZCBkc2lfY3RybF9od19jbW5fa2lja29mZl9maWZvX2NvbW1hbmQoc3RydWN0IGRzaV9j dHJsX2h3ICpjdHJsLAotCQkJICAgICBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9maWZvX2luZm8g KmNtZCwKLQkJCSAgICAgdTMyIGZsYWdzKTsKLXZvaWQgZHNpX2N0cmxfaHdfY21uX3Jlc2V0X2Nt ZF9maWZvKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9jdHJsX2h3X2Ntbl90 cmlnZ2VyX2NvbW1hbmRfZG1hKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci12b2lkIGRzaV9j dHJsX2h3X2RsbjBfcGh5X2VycihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotdm9pZCBkc2lf Y3RybF9od19jbW5fcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0J CQlib29sIGVuYWJsZSk7Ci12b2lkIGRzaV9jdHJsX2h3XzIyX3BoeV9yZXNldF9jb25maWcoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJYm9vbCBlbmFibGUpOwotCi0vKiBEZWZpbml0aW9u cyBzcGVjaWZpYyB0byAxLjQgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUgKi8KLWludCBkc2lfY3Ry bF9od18xNF93YWl0X2Zvcl9sYW5lX2lkbGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIg bGFuZXMpOwotdm9pZCBkc2lfY3RybF9od18xNF9zZXR1cF9sYW5lX21hcChzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwsCi0JCSAgICAgICBzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21hcCk7Ci12 b2lkIGRzaV9jdHJsX2h3XzE0X3VscHNfcmVxdWVzdChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmws IHUzMiBsYW5lcyk7Ci12b2lkIGRzaV9jdHJsX2h3XzE0X3VscHNfZXhpdChzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwsIHUzMiBsYW5lcyk7Ci11MzIgZHNpX2N0cmxfaHdfMTRfZ2V0X2xhbmVzX2lu X3VscHMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotdm9pZCBkc2lfY3RybF9od18xNF9j bGFtcF9lbmFibGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSB1MzIgbGFuZXMsCi0J CQkJIGJvb2wgZW5hYmxlX3VscHMpOwotCi12b2lkIGRzaV9jdHJsX2h3XzE0X2NsYW1wX2Rpc2Fi bGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgdTMyIGxhbmVzLAotCQkJCSAgYm9v bCBkaXNhYmxlX3VscHMpOwotc3NpemVfdCBkc2lfY3RybF9od18xNF9yZWdfZHVtcF90b19idWZm ZXIoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgIGNoYXIgKmJ1ZiwKLQkJCQkJICB1 MzIgc2l6ZSk7Ci0KLS8qIERlZmluaXRpb25zIHNwZWNpZmljIHRvIDIuMCBEU0kgY29udHJvbGxl ciBoYXJkd2FyZSAqLwotdm9pZCBkc2lfY3RybF9od18yMF9zZXR1cF9sYW5lX21hcChzdHJ1Y3Qg ZHNpX2N0cmxfaHcgKmN0cmwsCi0JCSAgICAgICBzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21h cCk7Ci1pbnQgZHNpX2N0cmxfaHdfMjBfd2FpdF9mb3JfbGFuZV9pZGxlKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCwgdTMyIGxhbmVzKTsKLXNzaXplX3QgZHNpX2N0cmxfaHdfMjBfcmVnX2R1bXBf dG9fYnVmZmVyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkJICBjaGFyICpidWYsCi0J CQkJCSAgdTMyIHNpemUpOwotCi0jZW5kaWYgLyogX0RTSV9DQVRBTE9HX0hfICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGsuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Nsay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAzOGZjYTA0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2Nsay5oCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRFNJX0NMS19IXwotI2Rl ZmluZSBfRFNJX0NMS19IXwotCi0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNs dWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCi0KLSNkZWZp bmUgTUFYX1NUUklOR19MRU4gMzIKLSNkZWZpbmUgTUFYX0RTSV9DVFJMIDIKLQotZW51bSBkc2lf Y2xrX3N0YXRlIHsKLQlEU0lfQ0xLX09GRiwKLQlEU0lfQ0xLX09OLAotCURTSV9DTEtfRUFSTFlf R0FURSwKLX07Ci0KLWVudW0gY2xrX3JlcV9jbGllbnQgewotCURTSV9DTEtfUkVRX01EUF9DTElF TlQgPSAwLAotCURTSV9DTEtfUkVRX0RTSV9DTElFTlQsCi19OwotCi1lbnVtIGRzaV9saW5rX2Ns a190eXBlIHsKLQlEU0lfTElOS19FU0NfQ0xLLAotCURTSV9MSU5LX0JZVEVfQ0xLLAotCURTSV9M SU5LX1BJWF9DTEssCi0JRFNJX0xJTktfQllURV9JTlRGX0NMSywKLQlEU0lfTElOS19DTEtfTUFY LAotfTsKLQotZW51bSBkc2lfY2xrX3R5cGUgewotCURTSV9DT1JFX0NMSyA9IEJJVCgwKSwKLQlE U0lfTElOS19DTEsgPSBCSVQoMSksCi0JRFNJX0FMTF9DTEtTID0gKEJJVCgwKSB8IEJJVCgxKSks Ci0JRFNJX0NMS1NfTUFYID0gQklUKDIpLAotfTsKLQotc3RydWN0IGRzaV9jbGtfY3RybF9pbmZv IHsKLQllbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZTsKLQllbnVtIGRzaV9jbGtfc3RhdGUgY2xr X3N0YXRlOwotCWVudW0gY2xrX3JlcV9jbGllbnQgY2xpZW50OwotfTsKLQotc3RydWN0IGNsa19j dHJsX2NiIHsKLQl2b2lkICpwcml2OwotCWludCAoKmRzaV9jbGtfY2IpKHZvaWQgKnByaXYsIHN0 cnVjdCBkc2lfY2xrX2N0cmxfaW5mbyBjbGtfY3RybF9pbmZvKTsKLX07Ci0KLS8qKgotICogc3Ry dWN0IGRzaV9jb3JlX2Nsa19pbmZvIC0gQ29yZSBjbG9jayBpbmZvcm1hdGlvbiBmb3IgRFNJIGhh cmR3YXJlCi0gKiBAbWRwX2NvcmVfY2xrOiAgICAgICAgSGFuZGxlIHRvIE1EUCBjb3JlIGNsb2Nr LgotICogQGlmYWNlX2NsazogICAgICAgICAgIEhhbmRsZSB0byBNRFAgaW50ZXJmYWNlIGNsb2Nr LgotICogQGNvcmVfbW1zc19jbGs6ICAgICAgIEhhbmRsZSB0byBNTVNTIGNvcmUgY2xvY2suCi0g KiBAYnVzX2NsazogICAgICAgICAgICAgSGFuZGxlIHRvIGJ1cyBjbG9jay4KLSAqIEBtbm9jX2Ns azogICAgICAgICAgICBIYW5kbGUgdG8gTU1TUyBOT0MgY2xvY2suCi0gKiBAZHNpX2NvcmVfY2xp ZW50OgkgUG9pbnRlciB0byBEUFUgcG93ZXIgY2xpZW50Ci0gKiBAcGhhbmRsZTogICAgICAgICAg ICAgUG9pbnRlciB0byBEUFUgcG93ZXIgaGFuZGxlCi0gKi8KLXN0cnVjdCBkc2lfY29yZV9jbGtf aW5mbyB7Ci0Jc3RydWN0IGNsayAqbWRwX2NvcmVfY2xrOwotCXN0cnVjdCBjbGsgKmlmYWNlX2Ns azsKLQlzdHJ1Y3QgY2xrICpjb3JlX21tc3NfY2xrOwotCXN0cnVjdCBjbGsgKmJ1c19jbGs7Ci0J c3RydWN0IGNsayAqbW5vY19jbGs7Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmRzaV9jb3Jl X2NsaWVudDsKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZTsKLX07Ci0KLS8qKgot ICogc3RydWN0IGRzaV9saW5rX2Nsa19pbmZvIC0gTGluayBjbG9jayBpbmZvcm1hdGlvbiBmb3Ig RFNJIGhhcmR3YXJlLgotICogQGJ5dGVfY2xrOiAgICAgICAgSGFuZGxlIHRvIERTSSBieXRlIGNs b2NrLgotICogQHBpeGVsX2NsazogICAgICAgSGFuZGxlIHRvIERTSSBwaXhlbCBjbG9jay4KLSAq IEBlc2NfY2xrOiAgICAgICAgIEhhbmRsZSB0byBEU0kgZXNjYXBlIGNsb2NrLgotICogQGJ5dGVf aW50Zl9jbGs6ICAgSGFuZGxlIHRvIERTSSBieXRlIGludGYuIGNsb2NrLgotICovCi1zdHJ1Y3Qg ZHNpX2xpbmtfY2xrX2luZm8gewotCXN0cnVjdCBjbGsgKmJ5dGVfY2xrOwotCXN0cnVjdCBjbGsg KnBpeGVsX2NsazsKLQlzdHJ1Y3QgY2xrICplc2NfY2xrOwotCXN0cnVjdCBjbGsgKmJ5dGVfaW50 Zl9jbGs7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBsaW5rX2Nsa19mcmVxIC0gQ2xvY2sgZnJlcXVl bmN5IGluZm9ybWF0aW9uIGZvciBMaW5rIGNsb2NrcwotICogQGJ5dGVfY2xrX3JhdGU6ICAgRnJl cXVlbmN5IG9mIERTSSBieXRlIGNsb2NrIGluIEtIei4KLSAqIEBwaXhlbF9jbGtfcmF0ZTogIEZy ZXF1ZW5jeSBvZiBEU0kgcGl4ZWwgY2xvY2sgaW4gS0h6LgotICogQGVzY19jbGtfcmF0ZTogICAg RnJlcXVlbmN5IG9mIERTSSBlc2NhcGUgY2xvY2sgaW4gS0h6LgotICovCi1zdHJ1Y3QgbGlua19j bGtfZnJlcSB7Ci0JdTMyIGJ5dGVfY2xrX3JhdGU7Ci0JdTMyIHBpeF9jbGtfcmF0ZTsKLQl1MzIg ZXNjX2Nsa19yYXRlOwotfTsKLQotLyoqCi0gKiB0eXBlZGVmICpwcmVfY2xvY2tvZmZfY2IoKSAt IENhbGxiYWNrIGJlZm9yZSBjbG9jayBpcyB0dXJuZWQgb2ZmCi0gKiBAcHJpdjogcHJpdmF0ZSBk YXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdoaWNoIGlzIGJlaW5nIHR1cm5lZCBv ZmYuCi0gKiBAbmV3X3N0YXRlOiBuZXh0IHN0YXRlIGZvciB0aGUgY2xvY2suCi0gKgotICogQHJl dHVybjogZXJyb3IgY29kZS4KLSAqLwotdHlwZWRlZiBpbnQgKCpwcmVfY2xvY2tvZmZfY2IpKHZv aWQgKnByaXYsCi0JCQkgICAgICAgZW51bSBkc2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JCQkgICAg ICAgZW51bSBkc2lfY2xrX3N0YXRlIG5ld19zdGF0ZSk7Ci0KLS8qKgotICogdHlwZWRlZiAqcG9z dF9jbG9ja29mZl9jYigpIC0gQ2FsbGJhY2sgYWZ0ZXIgY2xvY2sgaXMgdHVybmVkIG9mZgotICog QHByaXY6IHByaXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9jayB3aGljaCB3 YXMgdHVybmVkIG9mZi4KLSAqIEBjdXJyX3N0YXRlOiBjdXJyZW50IHN0YXRlIGZvciB0aGUgY2xv Y2suCi0gKgotICogQHJldHVybjogZXJyb3IgY29kZS4KLSAqLwotdHlwZWRlZiBpbnQgKCpwb3N0 X2Nsb2Nrb2ZmX2NiKSh2b2lkICpwcml2LAotCQkJCWVudW0gZHNpX2Nsa190eXBlIGNsa190eXBl LAotCQkJCWVudW0gZHNpX2Nsa19zdGF0ZSBjdXJyX3N0YXRlKTsKLQotLyoqCi0gKiB0eXBlZGVm ICpwb3N0X2Nsb2Nrb25fY2IoKSAtIENhbGxiYWNrIGFmdGVyIGNsb2NrIGlzIHR1cm5lZCBvbgot ICogQHByaXY6IHByaXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9jayB3aGlj aCB3YXMgdHVybmVkIG9uLgotICogQGN1cnJfc3RhdGU6IGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBj bG9jay4KLSAqCi0gKiBAcmV0dXJuOiBlcnJvciBjb2RlLgotICovCi10eXBlZGVmIGludCAoKnBv c3RfY2xvY2tvbl9jYikodm9pZCAqcHJpdiwKLQkJCSAgICAgICBlbnVtIGRzaV9jbGtfdHlwZSBj bGtfdHlwZSwKLQkJCSAgICAgICBlbnVtIGRzaV9jbGtfc3RhdGUgY3Vycl9zdGF0ZSk7Ci0KLS8q KgotICogdHlwZWRlZiAqcHJlX2Nsb2Nrb25fY2IoKSAtIENhbGxiYWNrIGJlZm9yZSBjbG9jayBp cyB0dXJuZWQgb24KLSAqIEBwcml2OiBwcml2YXRlIGRhdGEgcG9pbnRlci4KLSAqIEBjbGtfdHlw ZTogY2xvY2sgd2hpY2ggaXMgYmVpbmcgdHVybmVkIG9uLgotICogQG5ld19zdGF0ZTogbmV4dCBz dGF0ZSBmb3IgdGhlIGNsb2NrLgotICoKLSAqIEByZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXR5 cGVkZWYgaW50ICgqcHJlX2Nsb2Nrb25fY2IpKHZvaWQgKnByaXYsCi0JCQkgICAgICBlbnVtIGRz aV9jbGtfdHlwZSBjbGtfdHlwZSwKLQkJCSAgICAgIGVudW0gZHNpX2Nsa19zdGF0ZSBuZXdfc3Rh dGUpOwotCi0KLS8qKgotICogc3RydWN0IGRzaV9jbGtfaW5mbyAtIGNsb2NrIGluZm9ybWF0aW9u IGZvciBEU0kgaGFyZHdhcmUuCi0gKiBAbmFtZTogICAgICAgICAgICAgICAgICAgIGNsaWVudCBu YW1lLgotICogQGNfY2xrc1tNQVhfRFNJX0NUUkxdICAgICBhcnJheSBvZiBjb3JlIGNsb2NrIGNv bmZpZ3VyYXRpb25zCi0gKiBAbF9jbGtzW01BWF9EU0lfQ1RSTF0gICAgIGFycmF5IG9mIGxpbmsg Y2xvY2sgY29uZmlndXJhdGlvbnMKLSAqIEBidXNfaGFuZGxlW01BWF9EU0lfQ1RSTF0gYXJyYXkg b2YgYnVzIGhhbmRsZXMKLSAqIEBjdHJsX2luZGV4W01BWF9EU0lfQ1RSTF0gYXJyYXkgb2YgRFNJ IGNvbnRyb2xsZXIgaW5kZXhlcyBtYXBwZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAg dG8gY29yZSBhbmQgbGluayBjbG9jayBjb25maWd1cmF0aW9ucwotICogQHByZV9jbGtvZmZfY2Ig ICAgICAgICAgICBjYWxsYmFjayBiZWZvcmUgY2xvY2sgaXMgdHVybmVkIG9mZgotICogQHBvc3Rf Y2xrb2ZmX2NiICAgICAgICAgICBjYWxsYmFjayBhZnRlciBjbG9jayBpcyB0dXJuZWQgb2ZmCi0g KiBAcG9zdF9jbGtvbl9jYiAgICAgICAgICAgIGNhbGxiYWNrIGFmdGVyIGNsb2NrIGlzIHR1cm5l ZCBvbgotICogQHByZV9jbGtvbl9jYiAgICAgICAgICAgICBjYWxsYmFjayBiZWZvcmUgY2xvY2sg aXMgdHVybmVkIG9uCi0gKiBAcHJpdl9kYXRhICAgICAgICAgICAgICAgIHBvaW50ZXIgdG8gcHJp dmF0ZSBkYXRhCi0gKiBAbWFzdGVyX25keCAgICAgICAgICAgICAgIG1hc3RlciBEU0kgY29udHJv bGxlciBpbmRleAotICogQGRzaV9jdHJsX2NvdW50ICAgICAgICAgICBudW1iZXIgb2YgRFNJIGNv bnRyb2xsZXJzCi0gKi8KLXN0cnVjdCBkc2lfY2xrX2luZm8gewotCWNoYXIgbmFtZVtNQVhfU1RS SU5HX0xFTl07Ci0Jc3RydWN0IGRzaV9jb3JlX2Nsa19pbmZvIGNfY2xrc1tNQVhfRFNJX0NUUkxd OwotCXN0cnVjdCBkc2lfbGlua19jbGtfaW5mbyBsX2Nsa3NbTUFYX0RTSV9DVFJMXTsKLQl1MzIg YnVzX2hhbmRsZVtNQVhfRFNJX0NUUkxdOwotCXUzMiBjdHJsX2luZGV4W01BWF9EU0lfQ1RSTF07 Ci0JcHJlX2Nsb2Nrb2ZmX2NiIHByZV9jbGtvZmZfY2I7Ci0JcG9zdF9jbG9ja29mZl9jYiBwb3N0 X2Nsa29mZl9jYjsKLQlwb3N0X2Nsb2Nrb25fY2IgcG9zdF9jbGtvbl9jYjsKLQlwcmVfY2xvY2tv bl9jYiBwcmVfY2xrb25fY2I7Ci0Jdm9pZCAqcHJpdl9kYXRhOwotCXUzMiBtYXN0ZXJfbmR4Owot CXUzMiBkc2lfY3RybF9jb3VudDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jbGtfbGlua19z ZXQgLSBQYWlyIG9mIGNsb2NrIGhhbmRsZXMgdG8gZGVzY3JpYmUgbGluayBjbG9ja3MKLSAqIEBi eXRlX2NsazogICAgIEhhbmRsZSB0byBEU2kgYnl0ZSBjbG9jay4KLSAqIEBwaXhlbF9jbGs6ICAg IEhhbmRsZSB0byBEU0kgcGl4ZWwgY2xvY2suCi0gKi8KLXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0 IHsKLQlzdHJ1Y3QgY2xrICpieXRlX2NsazsKLQlzdHJ1Y3QgY2xrICpwaXhlbF9jbGs7Ci19Owot Ci0vKioKLSAqIGRzaV9kaXNwbGF5X2Nsa19tZ3JfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIERTSSBj bG9jayBtYW5hZ2VyCi0gKiBAaW5mbzogICAgIFN0cnVjdHVyZSBjb250YWluaW5nIERTSSBjbG9j ayBpbmZvcm1hdGlvbgotICovCi12b2lkICpkc2lfZGlzcGxheV9jbGtfbW5ncl9yZWdpc3Rlcihz dHJ1Y3QgZHNpX2Nsa19pbmZvICppbmZvKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9jbGtfbW5n cl9kZXJlZ2lzdGVyKCkgLSBEZXJlZ2lzdGVyIERTSSBjbG9jayBtYW5hZ2VyCi0gKiBAY2xrX21u Z3I6ICBEU0kgY2xvY2sgbWFuYWdlciBwb2ludGVyCi0gKi8KLWludCBkc2lfZGlzcGxheV9jbGtf bW5ncl9kZXJlZ2lzdGVyKHZvaWQgKmNsa19tbmdyKTsKLQotLyoqCi0gKiBkc2lfcmVnaXN0ZXJf Y2xrX2hhbmRsZSgpIC0gUmVnaXN0ZXIgY2xvY2sgaGFuZGxlIHdpdGggRFNJIGNsb2NrIG1hbmFn ZXIKLSAqIEBjbGtfbW5ncjogIERTSSBjbG9jayBtYW5hZ2VyIHBvaW50ZXIKLSAqIEBjbGllbnQ6 ICAgICBEU0kgY2xvY2sgY2xpZW50IHBvaW50ZXIuCi0gKi8KLXZvaWQgKmRzaV9yZWdpc3Rlcl9j bGtfaGFuZGxlKHZvaWQgKmNsa19tbmdyLCBjaGFyICpjbGllbnQpOwotCi0vKioKLSAqIGRzaV9k ZXJlZ2lzdGVyX2Nsa19oYW5kbGUoKSAtIERlcmVnaXN0ZXIgY2xvY2sgaGFuZGxlIGZyb20gRFNJ IGNsb2NrIG1hbmFnZXIKLSAqIEBjbGllbnQ6ICAgICBEU0kgY2xvY2sgY2xpZW50IHBvaW50ZXIu Ci0gKgotICogcmV0dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBz dWNjZXNzLgotICovCi1pbnQgZHNpX2RlcmVnaXN0ZXJfY2xrX2hhbmRsZSh2b2lkICpjbGllbnQp OwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2Nsa19jdHJsKCkgLSBzZXQgZnJlcXVlbmNpZXMgZm9y IGxpbmsgY2xrcwotICogQGhhbmRsZTogICAgIEhhbmRsZSBvZiBkZXNpcmVkIERTSSBjbG9jayBj bGllbnQuCi0gKiBAY2xrX3R5cGU6ICAgQ2xvY2sgd2hpY2ggaXMgYmVpbmcgY29udHJvbGxlZC4K LSAqIEBjbGtfc3RhdGU6ICBEZXNpcmVkIHN0YXRlIG9mIGNsb2NrCi0gKgotICogcmV0dXJuOiBl cnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQg ZHNpX2Rpc3BsYXlfY2xrX2N0cmwodm9pZCAqaGFuZGxlLAotCWVudW0gZHNpX2Nsa190eXBlIGNs a190eXBlLCBlbnVtIGRzaV9jbGtfc3RhdGUgY2xrX3N0YXRlKTsKLQotLyoqCi0gKiBkc2lfY2xr X3NldF9saW5rX2ZyZXF1ZW5jaWVzKCkgLSBzZXQgZnJlcXVlbmNpZXMgZm9yIGxpbmsgY2xrcwot ICogQGNsaWVudDogICAgIERTSSBjbG9jayBjbGllbnQgcG9pbnRlci4KLSAqIEBmcmVxOiAgICAg ICBTdHJ1Y3R1cmUgY29udGFpbmluZyBsaW5rIGNsb2NrIGZyZXF1ZW5jaWVzLgotICogQGluZGV4 OiAgICAgIEluZGV4IG9mIHRoZSBEU0kgY29udHJvbGxlci4KLSAqCi0gKiByZXR1cm46IGVycm9y IGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lf Y2xrX3NldF9saW5rX2ZyZXF1ZW5jaWVzKHZvaWQgKmNsaWVudCwgc3RydWN0IGxpbmtfY2xrX2Zy ZXEgZnJlcSwKLQkJCQkJdTMyIGluZGV4KTsKLQotCi0vKioKLSAqIGRzaV9jbGtfc2V0X3BpeGVs X2Nsa19yYXRlKCkgLSBzZXQgZnJlcXVlbmN5IGZvciBwaXhlbCBjbG9jawotICogQGNsaWVudDog ICAgICAgRFNJIGNsb2NrIGNsaWVudCBwb2ludGVyLgotICogQHBpeGVsX2NsazogUGl4ZWwgY2xv Y2sgcmF0ZSBpbiBIei4KLSAqIEBpbmRleDogICAgICBJbmRleCBvZiB0aGUgRFNJIGNvbnRyb2xs ZXIuCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1 Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2xrX3NldF9waXhlbF9jbGtfcmF0ZSh2b2lkICpjbGllbnQs IHU2NCBwaXhlbF9jbGssIHUzMiBpbmRleCk7Ci0KLQotLyoqCi0gKiBkc2lfY2xrX3NldF9ieXRl X2Nsa19yYXRlKCkgLSBzZXQgZnJlcXVlbmN5IGZvciBieXRlIGNsb2NrCi0gKiBAY2xpZW50OiAg ICAgICBEU0kgY2xvY2sgY2xpZW50IHBvaW50ZXIuCi0gKiBAYnl0ZV9jbGs6IFBpeGVsIGNsb2Nr IHJhdGUgaW4gSHouCi0gKiBAaW5kZXg6ICAgICAgSW5kZXggb2YgdGhlIERTSSBjb250cm9sbGVy LgotICogcmV0dXJuOiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNj ZXNzLgotICovCi1pbnQgZHNpX2Nsa19zZXRfYnl0ZV9jbGtfcmF0ZSh2b2lkICpjbGllbnQsIHU2 NCBieXRlX2NsaywgdTMyIGluZGV4KTsKLQotLyoqCi0gKiBkc2lfY2xrX3VwZGF0ZV9wYXJlbnQo KSAtIHVwZGF0ZSBwYXJlbnQgY2xvY2tzIGZvciBzcGVjaWZpZWQgY2xvY2sKLSAqIEBwYXJlbnQ6 ICAgICAgIGxpbmsgY2xvY2sgcGFpciB3aGljaCBhcmUgc2V0IGFzIHBhcmVudC4KLSAqIEBjaGls ZDogICAgICAgIGxpbmsgY2xvY2sgcGFpciB3aG9zZSBwYXJlbnQgaGFzIHRvIGJlIHNldC4KLSAq LwotaW50IGRzaV9jbGtfdXBkYXRlX3BhcmVudChzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqcGFy ZW50LAotCQkJICBzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqY2hpbGQpOwotI2VuZGlmIC8qIF9E U0lfQ0xLX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9jbGtfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf Y2xrX21hbmFnZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3Zjc1OS4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jbGtfbWFuYWdl ci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgImRzaV9jbGsu aCIKLQotI2lmZGVmIENPTkZJR19RQ09NX0JVU19TQ0FMSU5HCi0jaW5jbHVkZSA8bGludXgvbXNt LWJ1cy5oPgotI2VuZGlmCi0KLXN0cnVjdCBkc2lfY29yZV9jbGtzIHsKLQlzdHJ1Y3QgZHNpX2Nv cmVfY2xrX2luZm8gY2xrczsKLQl1MzIgYnVzX2hhbmRsZTsKLX07Ci0KLXN0cnVjdCBkc2lfbGlu a19jbGtzIHsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrX2luZm8gY2xrczsKLQlzdHJ1Y3QgbGlua19j bGtfZnJlcSBmcmVxOwotfTsKLQotc3RydWN0IGRzaV9jbGtfbW5nciB7Ci0JY2hhciBuYW1lW01B WF9TVFJJTkdfTEVOXTsKLQlzdHJ1Y3QgbXV0ZXggY2xrX211dGV4OwotCXN0cnVjdCBsaXN0X2hl YWQgY2xpZW50X2xpc3Q7Ci0KLQl1MzIgZHNpX2N0cmxfY291bnQ7Ci0JdTMyIG1hc3Rlcl9uZHg7 Ci0Jc3RydWN0IGRzaV9jb3JlX2Nsa3MgY29yZV9jbGtzW01BWF9EU0lfQ1RSTF07Ci0Jc3RydWN0 IGRzaV9saW5rX2Nsa3MgbGlua19jbGtzW01BWF9EU0lfQ1RSTF07Ci0JdTMyIGN0cmxfaW5kZXhb TUFYX0RTSV9DVFJMXTsKLQl1MzIgY29yZV9jbGtfc3RhdGU7Ci0JdTMyIGxpbmtfY2xrX3N0YXRl OwotCi0JcHJlX2Nsb2Nrb2ZmX2NiIHByZV9jbGtvZmZfY2I7Ci0JcG9zdF9jbG9ja29mZl9jYiBw b3N0X2Nsa29mZl9jYjsKLQlwb3N0X2Nsb2Nrb25fY2IgcG9zdF9jbGtvbl9jYjsKLQlwcmVfY2xv Y2tvbl9jYiBwcmVfY2xrb25fY2I7Ci0KLQl2b2lkICpwcml2X2RhdGE7Ci19OwotCi1zdHJ1Y3Qg ZHNpX2Nsa19jbGllbnRfaW5mbyB7Ci0JY2hhciBuYW1lW01BWF9TVFJJTkdfTEVOXTsKLQl1MzIg Y29yZV9yZWZjb3VudDsKLQl1MzIgbGlua19yZWZjb3VudDsKLQl1MzIgY29yZV9jbGtfc3RhdGU7 Ci0JdTMyIGxpbmtfY2xrX3N0YXRlOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3Qg ZHNpX2Nsa19tbmdyICptbmdyOwotfTsKLQotc3RhdGljIGludCBfZ2V0X2Nsa19tbmdyX2luZGV4 KHN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3IsCi0JCQkJdTMyIGRzaV9jdHJsX2luZGV4LAotCQkJ CXUzMiAqY2xrX21uZ3JfaW5kZXgpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbW5n ci0+ZHNpX2N0cmxfY291bnQ7IGkrKykgewotCQlpZiAobW5nci0+Y3RybF9pbmRleFtpXSA9PSBk c2lfY3RybF9pbmRleCkgewotCQkJKmNsa19tbmdyX2luZGV4ID0gaTsKLQkJCXJldHVybiAwOwot CQl9Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qKgotICogZHNpX2Nsa19zZXRfbGlu a19mcmVxdWVuY2llcygpIC0gc2V0IGZyZXF1ZW5jaWVzIGZvciBsaW5rIGNsa3MKLSAqIEBjbGtz OiAgICAgICAgIExpbmsgY2xvY2sgaW5mb3JtYXRpb24KLSAqIEBwaXhlbF9jbGs6ICAgIHBpeGVs IGNsb2NrIGZyZXF1ZW5jeSBpbiBLSHouCi0gKiBAYnl0ZV9jbGs6ICAgICBCeXRlIGNsb2NrIGZy ZXF1ZW5jeSBpbiBLSHouCi0gKiBAZXNjX2NsazogICAgICBFc2NhcGUgY2xvY2sgZnJlcXVlbmN5 IGluIEtIei4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9y IDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2xrX3NldF9saW5rX2ZyZXF1ZW5jaWVzKHZv aWQgKmNsaWVudCwgc3RydWN0IGxpbmtfY2xrX2ZyZXEgZnJlcSwKLQkJCQl1MzIgaW5kZXgpCi17 Ci0JaW50IHJjID0gMCwgY2xrX21uZ3JfaW5kZXggPSAwOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVu dF9pbmZvICpjID0gY2xpZW50OwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3I7Ci0KLQlpZiAo IWNsaWVudCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JbW5nciA9IGMtPm1uZ3I7Ci0JcmMgPSBfZ2V0X2Nsa19tbmdyX2luZGV4KG1u Z3IsIGluZGV4LCAmY2xrX21uZ3JfaW5kZXgpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxl ZCB0byBtYXAgY29udHJvbCBpbmRleCAlZFxuIiwgaW5kZXgpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQltZW1jcHkoJm1uZ3ItPmxpbmtfY2xrc1tjbGtfbW5ncl9pbmRleF0uZnJlcSwgJmZy ZXEsCi0JCXNpemVvZihzdHJ1Y3QgbGlua19jbGtfZnJlcSkpOwotCi0JcmV0dXJuIHJjOwotfQot Ci0vKioKLSAqIGRzaV9jbGtfc2V0X3BpeGVsX2Nsa19yYXRlKCkgLSBzZXQgZnJlcXVlbmN5IGZv ciBwaXhlbCBjbG9jawotICogQGNsa3M6ICAgICAgRFNJIGxpbmsgY2xvY2sgaW5mb3JtYXRpb24u Ci0gKiBAcGl4ZWxfY2xrOiBQaXhlbCBjbG9jayByYXRlIGluIEtIei4KLSAqCi0gKiByZXR1cm46 IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWlu dCBkc2lfY2xrX3NldF9waXhlbF9jbGtfcmF0ZSh2b2lkICpjbGllbnQsIHU2NCBwaXhlbF9jbGss IHUzMiBpbmRleCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZv ICpjID0gY2xpZW50OwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3I7Ci0KLQltbmdyID0gYy0+ bW5ncjsKLQlyYyA9IGNsa19zZXRfcmF0ZShtbmdyLT5saW5rX2Nsa3NbaW5kZXhdLmNsa3MucGl4 ZWxfY2xrLCBwaXhlbF9jbGspOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGNs ayByYXRlIGZvciBwaXhlbCBjbGssIHJjPSVkXG4iLCByYyk7Ci0JZWxzZQotCQltbmdyLT5saW5r X2Nsa3NbaW5kZXhdLmZyZXEucGl4X2Nsa19yYXRlID0gcGl4ZWxfY2xrOwotCi0JcmV0dXJuIHJj OwotfQotCi0vKioKLSAqIGRzaV9jbGtfc2V0X2J5dGVfY2xrX3JhdGUoKSAtIHNldCBmcmVxdWVu Y3kgZm9yIGJ5dGUgY2xvY2sKLSAqIEBjbGllbnQ6ICAgICAgIERTSSBjbG9jayBjbGllbnQgcG9p bnRlci4KLSAqIEBieXRlX2NsazogUGl4ZWwgY2xvY2sgcmF0ZSBpbiBIei4KLSAqIEBpbmRleDog ICAgICBJbmRleCBvZiB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKiByZXR1cm46IGVycm9yIGNvZGUg aW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfY2xrX3Nl dF9ieXRlX2Nsa19yYXRlKHZvaWQgKmNsaWVudCwgdTY0IGJ5dGVfY2xrLCB1MzIgaW5kZXgpCi17 Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Nsa19jbGllbnRfaW5mbyAqYyA9IGNsaWVudDsK LQlzdHJ1Y3QgZHNpX2Nsa19tbmdyICptbmdyOwotCi0JbW5nciA9IGMtPm1uZ3I7Ci0JcmMgPSBj bGtfc2V0X3JhdGUobW5nci0+bGlua19jbGtzW2luZGV4XS5jbGtzLmJ5dGVfY2xrLCBieXRlX2Ns ayk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgY2xrIHJhdGUgZm9yIGJ5dGUg Y2xrLCByYz0lZFxuIiwgcmMpOwotCWVsc2UKLQkJbW5nci0+bGlua19jbGtzW2luZGV4XS5mcmVx LmJ5dGVfY2xrX3JhdGUgPSBieXRlX2NsazsKLQotCXJldHVybiByYzsKLQotfQotCi0vKioKLSAq IGRzaV9jbGtfdXBkYXRlX3BhcmVudCgpIC0gdXBkYXRlIHBhcmVudCBjbG9ja3MgZm9yIHNwZWNp ZmllZCBjbG9jawotICogQHBhcmVudDogICAgICAgbGluayBjbG9jayBwYWlyIHdoaWNoIGFyZSBz ZXQgYXMgcGFyZW50LgotICogQGNoaWxkOiAgICAgICAgbGluayBjbG9jayBwYWlyIHdob3NlIHBh cmVudCBoYXMgdG8gYmUgc2V0LgotICovCi1pbnQgZHNpX2Nsa191cGRhdGVfcGFyZW50KHN0cnVj dCBkc2lfY2xrX2xpbmtfc2V0ICpwYXJlbnQsCi0JCQkgIHN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0 ICpjaGlsZCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBjbGtfc2V0X3BhcmVudChjaGlsZC0+ Ynl0ZV9jbGssIHBhcmVudC0+Ynl0ZV9jbGspOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxl ZCB0byBzZXQgYnl0ZSBjbGsgcGFyZW50XG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9 IGNsa19zZXRfcGFyZW50KGNoaWxkLT5waXhlbF9jbGssIHBhcmVudC0+cGl4ZWxfY2xrKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IHBpeGVsIGNsayBwYXJlbnRcbiIpOwot CQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9jb3Jl X2Nsa19zdGFydChzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY19jbGtzKQotewotCWludCByYyA9IDA7 Ci0KLQlpZiAoY19jbGtzLT5jbGtzLm1kcF9jb3JlX2NsaykgewotCQlyYyA9IGNsa19wcmVwYXJl X2VuYWJsZShjX2Nsa3MtPmNsa3MubWRwX2NvcmVfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoImZhaWxlZCB0byBlbmFibGUgbWRwX2NvcmVfY2xrLCByYz0lZFxuIiwgcmMpOwotCQkJZ290 byBlcnJvcjsKLQkJfQotCX0KLQotCWlmIChjX2Nsa3MtPmNsa3MubW5vY19jbGspIHsKLQkJcmMg PSBjbGtfcHJlcGFyZV9lbmFibGUoY19jbGtzLT5jbGtzLm1ub2NfY2xrKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgbW5vY19jbGssIHJjPSVkXG4iLCByYyk7Ci0J CQlnb3RvIGVycm9yX2Rpc2FibGVfY29yZV9jbGs7Ci0JCX0KLQl9Ci0KLQlpZiAoY19jbGtzLT5j bGtzLmlmYWNlX2NsaykgewotCQlyYyA9IGNsa19wcmVwYXJlX2VuYWJsZShjX2Nsa3MtPmNsa3Mu aWZhY2VfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgaWZh Y2VfY2xrLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX21ub2NfY2xrOwot CQl9Ci0JfQotCi0JaWYgKGNfY2xrcy0+Y2xrcy5idXNfY2xrKSB7Ci0JCXJjID0gY2xrX3ByZXBh cmVfZW5hYmxlKGNfY2xrcy0+Y2xrcy5idXNfY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo ImZhaWxlZCB0byBlbmFibGUgYnVzX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3Jf ZGlzYWJsZV9pZmFjZV9jbGs7Ci0JCX0KLQl9Ci0KLQlpZiAoY19jbGtzLT5jbGtzLmNvcmVfbW1z c19jbGspIHsKLQkJcmMgPSBjbGtfcHJlcGFyZV9lbmFibGUoY19jbGtzLT5jbGtzLmNvcmVfbW1z c19jbGspOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBjb3JlX21t c3NfY2xrLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX2J1c19jbGs7Ci0J CX0KLQl9Ci0KLSNpZmRlZiBDT05GSUdfUUNPTV9CVVNfU0NBTElORwotCWlmIChjX2Nsa3MtPmJ1 c19oYW5kbGUpIHsKLQkJcmMgPSBtc21fYnVzX3NjYWxlX2NsaWVudF91cGRhdGVfcmVxdWVzdChj X2Nsa3MtPmJ1c19oYW5kbGUsIDEpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiYnVzIHNjYWxl IGNsaWVudCBlbmFibGUgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNh YmxlX21tc3NfY2xrOwotCQl9Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHJjOwotCi0jaWZkZWYgQ09O RklHX1FDT01fQlVTX1NDQUxJTkcKLWVycm9yX2Rpc2FibGVfbW1zc19jbGs6Ci0JaWYgKGNfY2xr cy0+Y2xrcy5jb3JlX21tc3NfY2xrKQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5j bGtzLmNvcmVfbW1zc19jbGspOwotI2VuZGlmCi0KLWVycm9yX2Rpc2FibGVfYnVzX2NsazoKLQlp ZiAoY19jbGtzLT5jbGtzLmJ1c19jbGspCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjX2Nsa3Mt PmNsa3MuYnVzX2Nsayk7Ci1lcnJvcl9kaXNhYmxlX2lmYWNlX2NsazoKLQlpZiAoY19jbGtzLT5j bGtzLmlmYWNlX2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5pZmFj ZV9jbGspOwotZXJyb3JfZGlzYWJsZV9tbm9jX2NsazoKLQlpZiAoY19jbGtzLT5jbGtzLm1ub2Nf Y2xrKQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY19jbGtzLT5jbGtzLm1ub2NfY2xrKTsKLWVy cm9yX2Rpc2FibGVfY29yZV9jbGs6Ci0JaWYgKGNfY2xrcy0+Y2xrcy5tZHBfY29yZV9jbGspCi0J CWNsa19kaXNhYmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3MubWRwX2NvcmVfY2xrKTsKLWVycm9y OgotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9jb3JlX2Nsa19zdG9wKHN0cnVjdCBkc2lfY29y ZV9jbGtzICpjX2Nsa3MpCi17Ci0JaW50IHJjID0gMDsKLQotI2lmZGVmIENPTkZJR19RQ09NX0JV U19TQ0FMSU5HCi0JaWYgKGNfY2xrcy0+YnVzX2hhbmRsZSkgewotCQlyYyA9IG1zbV9idXNfc2Nh bGVfY2xpZW50X3VwZGF0ZV9yZXF1ZXN0KGNfY2xrcy0+YnVzX2hhbmRsZSwgMCk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJidXMgc2NhbGUgY2xpZW50IGRpc2FibGUgZmFpbGVkLCByYz0lZFxu IiwgcmMpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotI2VuZGlmCi0KLQlpZiAoY19jbGtzLT5j bGtzLmNvcmVfbW1zc19jbGspCi0JCWNsa19kaXNhYmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3Mu Y29yZV9tbXNzX2Nsayk7Ci0KLQlpZiAoY19jbGtzLT5jbGtzLmJ1c19jbGspCi0JCWNsa19kaXNh YmxlX3VucHJlcGFyZShjX2Nsa3MtPmNsa3MuYnVzX2Nsayk7Ci0KLQlpZiAoY19jbGtzLT5jbGtz LmlmYWNlX2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5pZmFjZV9j bGspOwotCi0JaWYgKGNfY2xrcy0+Y2xrcy5tbm9jX2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGNfY2xrcy0+Y2xrcy5tbm9jX2Nsayk7Ci0KLQlpZiAoY19jbGtzLT5jbGtzLm1kcF9jb3Jl X2NsaykKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNfY2xrcy0+Y2xrcy5tZHBfY29yZV9jbGsp OwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9saW5rX2Nsa19zZXRfcmF0ZShz dHJ1Y3QgZHNpX2xpbmtfY2xrcyAqbF9jbGtzKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IGNs a19zZXRfcmF0ZShsX2Nsa3MtPmNsa3MuZXNjX2NsaywgbF9jbGtzLT5mcmVxLmVzY19jbGtfcmF0 ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiY2xrX3NldF9yYXRlIGZhaWxlZCBmb3IgZXNjX2Ns ayByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjbGtfc2V0X3Jh dGUobF9jbGtzLT5jbGtzLmJ5dGVfY2xrLCBsX2Nsa3MtPmZyZXEuYnl0ZV9jbGtfcmF0ZSk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiY2xrX3NldF9yYXRlIGZhaWxlZCBmb3IgYnl0ZV9jbGsgcmMg PSAlZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gY2xrX3NldF9yYXRlKGxf Y2xrcy0+Y2xrcy5waXhlbF9jbGssIGxfY2xrcy0+ZnJlcS5waXhfY2xrX3JhdGUpOwotCWlmIChy YykgewotCQlwcl9lcnIoImNsa19zZXRfcmF0ZSBmYWlsZWQgZm9yIHBpeGVsX2NsayByYyA9ICVk XG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyoKLQkgKiBJZiBieXRlX2ludGZfY2xr IGlzIHByZXNlbnQsIHNldCByYXRlIGZvciB0aGF0IHRvby4KLQkgKiBGb3IgRFBIWTogYnl0ZV9p bnRmX2Nsa19yYXRlID0gYnl0ZV9jbGtfcmF0ZSAvIDIKLQkgKiB0b2RvOiB0aGlzIG5lZWRzIHRv IGJlIHJldmlzaXRlZCB3aGVuIHN1cHBvcnQgZm9yIENQSFkgaXMgYWRkZWQKLQkgKi8KLQlpZiAo bF9jbGtzLT5jbGtzLmJ5dGVfaW50Zl9jbGspIHsKLQkJcmMgPSBjbGtfc2V0X3JhdGUobF9jbGtz LT5jbGtzLmJ5dGVfaW50Zl9jbGssCi0JCQkobF9jbGtzLT5mcmVxLmJ5dGVfY2xrX3JhdGUgLyAy KSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJzZXRfcmF0ZSBmYWlsZWQgZm9yIGJ5dGVfaW50 Zl9jbGsgcmMgPSAlZFxuIiwKLQkJCQlyYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotZXJy b3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9saW5rX2Nsa19wcmVwYXJlKHN0 cnVjdCBkc2lfbGlua19jbGtzICpsX2Nsa3MpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gY2xr X3ByZXBhcmUobF9jbGtzLT5jbGtzLmVzY19jbGspOwotCWlmIChyYykgewotCQlwcl9lcnIoIkZh aWxlZCB0byBwcmVwYXJlIGRzaSBlc2MgY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVzY19j bGtfZXJyOwotCX0KLQotCXJjID0gY2xrX3ByZXBhcmUobF9jbGtzLT5jbGtzLmJ5dGVfY2xrKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gcHJlcGFyZSBkc2kgYnl0ZSBjbGssIHJj PSVkXG4iLCByYyk7Ci0JCWdvdG8gYnl0ZV9jbGtfZXJyOwotCX0KLQotCXJjID0gY2xrX3ByZXBh cmUobF9jbGtzLT5jbGtzLnBpeGVsX2Nsayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVk IHRvIHByZXBhcmUgZHNpIHBpeGVsIGNsaywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBwaXhlbF9j bGtfZXJyOwotCX0KLQotCWlmIChsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRmX2NsaykgewotCQlyYyA9 IGNsa19wcmVwYXJlKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoIkZhaWxlZCB0byBwcmVwYXJlIGRzaSBieXRlIGludGYgY2xrLCByYz0lZFxuIiwK LQkJCQlyYyk7Ci0JCQlnb3RvIGJ5dGVfaW50Zl9jbGtfZXJyOwotCQl9Ci0JfQotCi0JcmV0dXJu IHJjOwotCi1ieXRlX2ludGZfY2xrX2VycjoKLQljbGtfdW5wcmVwYXJlKGxfY2xrcy0+Y2xrcy5w aXhlbF9jbGspOwotcGl4ZWxfY2xrX2VycjoKLQljbGtfdW5wcmVwYXJlKGxfY2xrcy0+Y2xrcy5i eXRlX2Nsayk7Ci1ieXRlX2Nsa19lcnI6Ci0JY2xrX3VucHJlcGFyZShsX2Nsa3MtPmNsa3MuZXNj X2Nsayk7Ci1lc2NfY2xrX2VycjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9s aW5rX2Nsa191bnByZXBhcmUoc3RydWN0IGRzaV9saW5rX2Nsa3MgKmxfY2xrcykKLXsKLQlpZiAo bF9jbGtzLT5jbGtzLmJ5dGVfaW50Zl9jbGspCi0JCWNsa191bnByZXBhcmUobF9jbGtzLT5jbGtz LmJ5dGVfaW50Zl9jbGspOwotCWNsa191bnByZXBhcmUobF9jbGtzLT5jbGtzLnBpeGVsX2Nsayk7 Ci0JY2xrX3VucHJlcGFyZShsX2Nsa3MtPmNsa3MuYnl0ZV9jbGspOwotCWNsa191bnByZXBhcmUo bF9jbGtzLT5jbGtzLmVzY19jbGspOwotfQotCi1zdGF0aWMgaW50IGRzaV9saW5rX2Nsa19lbmFi bGUoc3RydWN0IGRzaV9saW5rX2Nsa3MgKmxfY2xrcykKLXsKLQlpbnQgcmMgPSAwOwotCi0JcmMg PSBjbGtfZW5hYmxlKGxfY2xrcy0+Y2xrcy5lc2NfY2xrKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJGYWlsZWQgdG8gZW5hYmxlIGRzaSBlc2MgY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVz Y19jbGtfZXJyOwotCX0KLQotCXJjID0gY2xrX2VuYWJsZShsX2Nsa3MtPmNsa3MuYnl0ZV9jbGsp OwotCWlmIChyYykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBlbmFibGUgZHNpIGJ5dGUgY2xrLCBy Yz0lZFxuIiwgcmMpOwotCQlnb3RvIGJ5dGVfY2xrX2VycjsKLQl9Ci0KLQlyYyA9IGNsa19lbmFi bGUobF9jbGtzLT5jbGtzLnBpeGVsX2Nsayk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVk IHRvIGVuYWJsZSBkc2kgcGl4ZWwgY2xrLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIHBpeGVsX2Ns a19lcnI7Ci0JfQotCi0JaWYgKGxfY2xrcy0+Y2xrcy5ieXRlX2ludGZfY2xrKSB7Ci0JCXJjID0g Y2xrX2VuYWJsZShsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRmX2Nsayk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJGYWlsZWQgdG8gZW5hYmxlIGRzaSBieXRlIGludGYgY2xrLCByYz0lZFxuIiwKLQkJ CQlyYyk7Ci0JCQlnb3RvIGJ5dGVfaW50Zl9jbGtfZXJyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJj OwotCi1ieXRlX2ludGZfY2xrX2VycjoKLQljbGtfZGlzYWJsZShsX2Nsa3MtPmNsa3MucGl4ZWxf Y2xrKTsKLXBpeGVsX2Nsa19lcnI6Ci0JY2xrX2Rpc2FibGUobF9jbGtzLT5jbGtzLmJ5dGVfY2xr KTsKLWJ5dGVfY2xrX2VycjoKLQljbGtfZGlzYWJsZShsX2Nsa3MtPmNsa3MuZXNjX2Nsayk7Ci1l c2NfY2xrX2VycjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9saW5rX2Nsa19k aXNhYmxlKHN0cnVjdCBkc2lfbGlua19jbGtzICpsX2Nsa3MpCi17Ci0JaWYgKGxfY2xrcy0+Y2xr cy5ieXRlX2ludGZfY2xrKQotCQljbGtfZGlzYWJsZShsX2Nsa3MtPmNsa3MuYnl0ZV9pbnRmX2Ns ayk7Ci0JY2xrX2Rpc2FibGUobF9jbGtzLT5jbGtzLmVzY19jbGspOwotCWNsa19kaXNhYmxlKGxf Y2xrcy0+Y2xrcy5waXhlbF9jbGspOwotCWNsa19kaXNhYmxlKGxfY2xrcy0+Y2xrcy5ieXRlX2Ns ayk7Ci19Ci0KLS8qKgotICogZHNpX2xpbmtfY2xrX3N0YXJ0KCkgLSBlbmFibGUgZHNpIGxpbmsg Y2xvY2tzCi0gKi8KLWludCBkc2lfbGlua19jbGtfc3RhcnQoc3RydWN0IGRzaV9saW5rX2Nsa3Mg KmNsa3MpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gZHNpX2xpbmtfY2xrX3NldF9yYXRlKGNs a3MpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgY2xrIHJhdGVzLCByYyA9 ICVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfbGlua19jbGtfcHJl cGFyZShjbGtzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcHJlcGFyZSBsaW5r IGNsa3MsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9s aW5rX2Nsa19lbmFibGUoY2xrcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGVu YWJsZSBsaW5rIGNsa3MsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl91bnByZXBhcmU7 Ci0JfQotCi0JcHJfZGVidWcoIkxpbmsgY2xvY2tzIGFyZSBlbmFibGVkXG4iKTsKLQlyZXR1cm4g cmM7Ci1lcnJvcl91bnByZXBhcmU6Ci0JZHNpX2xpbmtfY2xrX3VucHJlcGFyZShjbGtzKTsKLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfbGlua19jbGtfc3RvcCgpIC0gU3Rv cCBEU0kgbGluayBjbG9ja3MuCi0gKi8KLWludCBkc2lfbGlua19jbGtfc3RvcChzdHJ1Y3QgZHNp X2xpbmtfY2xrcyAqY2xrcykKLXsKLQlkc2lfbGlua19jbGtfZGlzYWJsZShjbGtzKTsKLQlkc2lf bGlua19jbGtfdW5wcmVwYXJlKGNsa3MpOwotCi0JcHJfZGVidWcoIkxpbmsgY2xvY2tzIGRpc2Fi bGVkXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2NvcmVf Y2xrX2VuYWJsZShzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY2xrcywKLQl1MzIgY3RybF9jb3VudCwg dTMyIG1hc3Rlcl9uZHgpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Nv cmVfY2xrcyAqY2xrLCAqbV9jbGtzOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIHNwbGl0IERTSSB1 c2VjYXNlcywgdGhlIGNsb2NrIGZvciBtYXN0ZXIgY29udHJvbGxlciBzaG91bGQKLQkgKiBiZSBl bmFibGVkIGJlZm9yZSB0aGUgb3RoZXIgY29udHJvbGxlci4gTWFzdGVyIGNvbnRyb2xsZXIgaW4g dGhlCi0JICogY2xvY2sgY29udGV4dCByZWZlcnMgdG8gdGhlIGNvbnRyb2xsZXIgdGhhdCBzb3Vy Y2VzIHRoZSBjbG9jay4KLQkgKi8KLQotCW1fY2xrcyA9ICZjbGtzW21hc3Rlcl9uZHhdOwotCXJj ID0gZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShtX2Nsa3MtPmNsa3MucGhhbmRsZSwKLQkJCW1f Y2xrcy0+Y2xrcy5kc2lfY29yZV9jbGllbnQsIHRydWUpOwotCi0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiUG93ZXIgcmVzb3VyY2UgZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9jb3JlX2Nsa19zdGFydChtX2Nsa3MpOwotCWlmIChyYykg ewotCQlwcl9lcnIoImZhaWxlZCB0byB0dXJuIG9uIG1hc3RlciBjbG9ja3MsIHJjPSVkXG4iLCBy Yyk7Ci0JCWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXJfcmVzb3VyY2U7Ci0JfQotCi0JLyogVHVy biBvbiByZXN0IG9mIHRoZSBjb3JlIGNsb2NrcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjdHJsX2Nv dW50OyBpKyspIHsKLQkJY2xrID0gJmNsa3NbaV07Ci0JCWlmICghY2xrIHx8IChjbGsgPT0gbV9j bGtzKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShj bGstPmNsa3MucGhhbmRsZSwKLQkJCQljbGstPmNsa3MuZHNpX2NvcmVfY2xpZW50LCB0cnVlKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlBvd2VyIHJlc291cmNlIGVuYWJsZSBmYWlsZWQsIHJj PSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfbWFzdGVyOwotCQl9Ci0KLQkJcmMg PSBkc2lfY29yZV9jbGtfc3RhcnQoY2xrKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxl ZCB0byB0dXJuIG9uIGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQkJCSh2b2lkKWRwdV9wb3dlcl9y ZXNvdXJjZV9lbmFibGUoY2xrLT5jbGtzLnBoYW5kbGUsCi0JCQkJCWNsay0+Y2xrcy5kc2lfY29y ZV9jbGllbnQsIGZhbHNlKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9 Ci0JcmV0dXJuIHJjOwotZXJyb3JfZGlzYWJsZV9tYXN0ZXI6Ci0JKHZvaWQpZHNpX2NvcmVfY2xr X3N0b3AobV9jbGtzKTsKLQotZXJyb3JfZGlzYWJsZV9tYXN0ZXJfcmVzb3VyY2U6Ci0JKHZvaWQp ZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShtX2Nsa3MtPmNsa3MucGhhbmRsZSwKLQkJCQltX2Ns a3MtPmNsa3MuZHNpX2NvcmVfY2xpZW50LCBmYWxzZSk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfbGlua19jbGtfZW5hYmxlKHN0cnVjdCBkc2lfbGlu a19jbGtzICpjbGtzLAotCXUzMiBjdHJsX2NvdW50LCB1MzIgbWFzdGVyX25keCkKLXsKLQlpbnQg cmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfbGlua19jbGtzICpjbGssICptX2Nsa3M7Ci0K LQkvKgotCSAqIEluIGNhc2Ugb2Ygc3BsaXQgRFNJIHVzZWNhc2VzLCB0aGUgY2xvY2sgZm9yIG1h c3RlciBjb250cm9sbGVyIHNob3VsZAotCSAqIGJlIGVuYWJsZWQgYmVmb3JlIHRoZSBvdGhlciBj b250cm9sbGVyLiBNYXN0ZXIgY29udHJvbGxlciBpbiB0aGUKLQkgKiBjbG9jayBjb250ZXh0IHJl ZmVycyB0byB0aGUgY29udHJvbGxlciB0aGF0IHNvdXJjZXMgdGhlIGNsb2NrLgotCSAqLwotCi0J bV9jbGtzID0gJmNsa3NbbWFzdGVyX25keF07Ci0KLQlyYyA9IGRzaV9saW5rX2Nsa19zdGFydCht X2Nsa3MpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byB0dXJuIG9uIG1hc3RlciBj bG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogVHVybiBvbiBy ZXN0IG9mIHRoZSBjb3JlIGNsb2NrcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjdHJsX2NvdW50OyBp KyspIHsKLQkJY2xrID0gJmNsa3NbaV07Ci0JCWlmICghY2xrIHx8IChjbGsgPT0gbV9jbGtzKSkK LQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2xpbmtfY2xrX3N0YXJ0KGNsayk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvbiBjbG9ja3MsIHJjPSVkXG4iLCByYyk7 Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfbWFzdGVyOwotCQl9Ci0JfQotCXJldHVybiByYzsKLWVy cm9yX2Rpc2FibGVfbWFzdGVyOgotCSh2b2lkKWRzaV9saW5rX2Nsa19zdG9wKG1fY2xrcyk7Ci1l cnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY29yZV9jbGtf ZGlzYWJsZShzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY2xrcywKLQl1MzIgY3RybF9jb3VudCwgdTMy IG1hc3Rlcl9uZHgpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2NvcmVf Y2xrcyAqY2xrLCAqbV9jbGtzOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIHNwbGl0IERTSSB1c2Vj YXNlcywgY2xvY2sgZm9yIHNsYXZlIERTSSBjb250cm9sbGVycyBzaG91bGQKLQkgKiBiZSBkaXNh YmxlZCBmaXJzdCBiZWZvcmUgZGlzYWJsaW5nIGNsb2NrIGZvciBtYXN0ZXIgY29udHJvbGxlci4g U2xhdmUKLQkgKiBjb250cm9sbGVycyBpbiB0aGUgY2xvY2sgY29udGV4dCByZWZlciB0byBjb250 cm9sbGVyIHdoaWNoIHNvdXJjZQotCSAqIGNsb2NrIGZyb20gYW5vdGhlciBjb250cm9sbGVyLgot CSAqLwotCi0JbV9jbGtzID0gJmNsa3NbbWFzdGVyX25keF07Ci0KLQkvKiBUdXJuIG9mZiBub24t bWFzdGVyIGNvcmUgY2xvY2tzICovCi0JZm9yIChpID0gMDsgaSA8IGN0cmxfY291bnQ7IGkrKykg ewotCQljbGsgPSAmY2xrc1tpXTsKLQkJaWYgKCFjbGsgfHwgKGNsayA9PSBtX2Nsa3MpKQotCQkJ Y29udGludWU7Ci0KLQkJcmMgPSBkc2lfY29yZV9jbGtfc3RvcChjbGspOwotCQlpZiAocmMpIHsK LQkJCXByX2RlYnVnKCJmYWlsZWQgdG8gdHVybiBvZmYgY2xvY2tzLCByYz0lZFxuIiwgcmMpOwot CQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXJjID0gZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShj bGstPmNsa3MucGhhbmRsZSwKLQkJCQljbGstPmNsa3MuZHNpX2NvcmVfY2xpZW50LCBmYWxzZSk7 Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJQb3dlciByZXNvdXJjZSBkaXNhYmxlIGZhaWxlZDog JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyYyA9IGRzaV9jb3JlX2Ns a19zdG9wKG1fY2xrcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHR1cm4gb2Zm IG1hc3RlciBjbG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMg PSBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKG1fY2xrcy0+Y2xrcy5waGFuZGxlLAotCQkJCW1f Y2xrcy0+Y2xrcy5kc2lfY29yZV9jbGllbnQsIGZhbHNlKTsKLQlpZiAocmMpCi0JCXByX2Vycigi UG93ZXIgcmVzb3VyY2UgZGlzYWJsZSBmYWlsZWQ6ICVkXG4iLCByYyk7Ci1lcnJvcjoKLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfbGlua19jbGtfZGlzYWJsZShzdHJ1 Y3QgZHNpX2xpbmtfY2xrcyAqY2xrcywKLQl1MzIgY3RybF9jb3VudCwgdTMyIG1hc3Rlcl9uZHgp Ci17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqY2xrLCAq bV9jbGtzOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIHNwbGl0IERTSSB1c2VjYXNlcywgY2xvY2sg Zm9yIHNsYXZlIERTSSBjb250cm9sbGVycyBzaG91bGQKLQkgKiBiZSBkaXNhYmxlZCBmaXJzdCBi ZWZvcmUgZGlzYWJsaW5nIGNsb2NrIGZvciBtYXN0ZXIgY29udHJvbGxlci4gU2xhdmUKLQkgKiBj b250cm9sbGVycyBpbiB0aGUgY2xvY2sgY29udGV4dCByZWZlciB0byBjb250cm9sbGVyIHdoaWNo IHNvdXJjZQotCSAqIGNsb2NrIGZyb20gYW5vdGhlciBjb250cm9sbGVyLgotCSAqLwotCi0JbV9j bGtzID0gJmNsa3NbbWFzdGVyX25keF07Ci0KLQkvKiBUdXJuIG9mZiBub24tbWFzdGVyIGxpbmsg Y2xvY2tzICovCi0JZm9yIChpID0gMDsgaSA8IGN0cmxfY291bnQ7IGkrKykgewotCQljbGsgPSAm Y2xrc1tpXTsKLQkJaWYgKCFjbGsgfHwgKGNsayA9PSBtX2Nsa3MpKQotCQkJY29udGludWU7Ci0K LQkJcmMgPSBkc2lfbGlua19jbGtfc3RvcChjbGspOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoImZh aWxlZCB0byB0dXJuIG9mZiBjbG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0JfQotCi0JcmMgPSBkc2lf bGlua19jbGtfc3RvcChtX2Nsa3MpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVy biBvZmYgbWFzdGVyIGNsb2NrcywgcmM9JWRcbiIsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkc2lfdXBkYXRlX2Nsa19zdGF0ZShzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY19j bGtzLCB1MzIgY19zdGF0ZSwKLQkJCQlzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqbF9jbGtzLCB1MzIg bF9zdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfY2xrX21uZ3IgKm1uZ3I7Ci0J Ym9vbCBsX2Nfb24gPSBmYWxzZTsKLQotCWlmIChjX2Nsa3MpIHsKLQkJbW5nciA9Ci0JCWNvbnRh aW5lcl9vZihjX2Nsa3MsIHN0cnVjdCBkc2lfY2xrX21uZ3IsIGNvcmVfY2xrc1swXSk7Ci0JfSBl bHNlIGlmIChsX2Nsa3MpIHsKLQkJbW5nciA9Ci0JCWNvbnRhaW5lcl9vZihsX2Nsa3MsIHN0cnVj dCBkc2lfY2xrX21uZ3IsIGxpbmtfY2xrc1swXSk7Ci0JfSBlbHNlIHsKLQkJbW5nciA9IE5VTEw7 Ci0JfQotCi0JaWYgKCFtbmdyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByX2RlYnVnKCJjX3N0 YXRlID0gJWQsIGxfc3RhdGUgPSAlZFxuIiwKLQkJIGNfY2xrcyA/IGNfc3RhdGUgOiAtMSwgbF9j bGtzID8gbF9zdGF0ZSA6IC0xKTsKLQkvKgotCSAqIEJlbG93IGlzIHRoZSBzZXF1ZW5jZSB0byB0 b2dnbGUgRFNJIGNsb2NrczoKLQkgKgkxLiBGb3IgT04gc2VxdWVuY2UsIENvcmUgY2xvY2tzIGJl Zm9yZSBsaW5rIGNsb2NrcwotCSAqCTIuIEZvciBPRkYgc2VxdWVuY2UsIExpbmsgY2xvY2tzIGJl Zm9yZSBjb3JlIGNsb2Nrcy4KLQkgKi8KLQlpZiAoY19jbGtzICYmIChjX3N0YXRlID09IERTSV9D TEtfT04pKSB7Ci0JCWlmIChtbmdyLT5jb3JlX2Nsa19zdGF0ZSA9PSBEU0lfQ0xLX09GRikgewot CQkJcmMgPSBtbmdyLT5wcmVfY2xrb25fY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQkJRFNJX0NP UkVfQ0xLLAotCQkJCQkJRFNJX0NMS19PTik7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImZh aWxlZCB0byB0dXJuIG9uIE1EUCBGUyByYz0gJWRcbiIsIHJjKTsKLQkJCQlnb3RvIGVycm9yOwot CQkJfQotCQl9Ci0JCXJjID0gZHNpX2Rpc3BsYXlfY29yZV9jbGtfZW5hYmxlKGNfY2xrcywgbW5n ci0+ZHNpX2N0cmxfY291bnQsCi0JCQkJbW5nci0+bWFzdGVyX25keCk7Ci0JCWlmIChyYykgewot CQkJcHJfZXJyKCJmYWlsZWQgdG8gdHVybiBvbiBjb3JlIGNsa3MgcmMgPSAlZFxuIiwgcmMpOwot CQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWlmIChtbmdyLT5wb3N0X2Nsa29uX2NiKSB7Ci0JCQly YyA9IG1uZ3ItPnBvc3RfY2xrb25fY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQkJIERTSV9DT1JF X0NMSywKLQkJCQkJCSBEU0lfQ0xLX09OKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoInBvc3Qg Y2xrIG9uIGNiIGZhaWxlZCwgcmMgPSAlZFxuIiwgcmMpOwotCQl9Ci0JCW1uZ3ItPmNvcmVfY2xr X3N0YXRlID0gRFNJX0NMS19PTjsKLQl9Ci0KLQlpZiAobF9jbGtzKSB7Ci0JCWlmIChsX3N0YXRl ID09IERTSV9DTEtfT04pIHsKLQkJCWlmIChtbmdyLT5wcmVfY2xrb25fY2IpIHsKLQkJCQlyYyA9 IG1uZ3ItPnByZV9jbGtvbl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCURTSV9MSU5LX0NMSywg bF9zdGF0ZSk7Ci0JCQkJaWYgKHJjKQotCQkJCQlwcl9lcnIoInByZSBsaW5rIGNsayBvbiBjYiBm YWlsZWRcbiIpOwotCQkJfQotCQkJcmMgPSBkc2lfZGlzcGxheV9saW5rX2Nsa19lbmFibGUobF9j bGtzLAotCQkJCQltbmdyLT5kc2lfY3RybF9jb3VudCwgbW5nci0+bWFzdGVyX25keCk7Ci0JCQlp ZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBzdGFydCBsaW5rIGNsayByYz0gJWRcbiIs IHJjKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQkJaWYgKG1uZ3ItPnBvc3RfY2xrb25fY2Ip IHsKLQkJCQlyYyA9IG1uZ3ItPnBvc3RfY2xrb25fY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQkJ CURTSV9MSU5LX0NMSywKLQkJCQkJCQlsX3N0YXRlKTsKLQkJCQlpZiAocmMpCi0JCQkJCXByX2Vy cigicG9zdCBsaW5rIGNsayBvbiBjYiBmYWlsZWRcbiIpOwotCQkJfQotCQl9IGVsc2UgewotCQkJ LyoKLQkJCSAqIFR3byBjb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBjaGVja2VkIGZvciBMaW5r Ci0JCQkgKiBjbG9ja3M6Ci0JCQkgKiAxLiBMaW5rIGNsb2NrcyBuZWVkIGNvcmUgY2xvY2tzIHRv IGJlIG9uIHdoZW4KLQkJCSAqICAgIHRyYW5zaXRpb25pbmcgZnJvbSBFQVJMWV9HQVRFIHRvIE9G RiBzdGF0ZS4KLQkJCSAqIDIuIFVMUFMgbW9kZSBtaWdodCBoYXZlIHRvIGJlIGVuYWJsZWQgaW4g Y2FzZSBvZiBPRkYKLQkJCSAqICAgIHN0YXRlLiBGb3IgVUxQUywgTGluayBjbG9ja3Mgc2hvdWxk IGJlIHR1cm5lZCBPTgotCQkJICogICAgZmlyc3QgYmVmb3JlIHRoZXkgYXJlIHR1cm5lZCBvZmYg YWdhaW4uCi0JCQkgKgotCQkJICogSWYgTGluayBpcyBnb2luZyBmcm9tIEVBUkxZX0dBVEUgdG8g T0ZGIHN0YXRlIEFORAotCQkJICogQ29yZSBjbG9jayBpcyBhbHJlYWR5IGluIEVBUkxZX0dBVEUg b3IgT0ZGIHN0YXRlLAotCQkJICogdHVybiBvbiBDb3JlIGNsb2NrcyBhbmQgbGluayBjbG9ja3Mu Ci0JCQkgKgotCQkJICogVUxQUyBzdGF0ZSBpcyBtYW5hZ2VkIGFzIHBhcnQgb2YgdGhlIHByZV9j bGtvZmZfY2IuCi0JCQkgKi8KLQkJCWlmICgobF9zdGF0ZSA9PSBEU0lfQ0xLX09GRikgJiYKLQkJ CSAgICAobW5nci0+bGlua19jbGtfc3RhdGUgPT0KLQkJCSAgICBEU0lfQ0xLX0VBUkxZX0dBVEUp ICYmCi0JCQkgICAgKG1uZ3ItPmNvcmVfY2xrX3N0YXRlICE9Ci0JCQkgICAgRFNJX0NMS19PTikp IHsKLQkJCQlyYyA9IGRzaV9kaXNwbGF5X2NvcmVfY2xrX2VuYWJsZSgKLQkJCQkJbW5nci0+Y29y ZV9jbGtzLCBtbmdyLT5kc2lfY3RybF9jb3VudCwKLQkJCQkJbW5nci0+bWFzdGVyX25keCk7Ci0J CQkJaWYgKHJjKSB7Ci0JCQkJCXByX2VycigiY29yZSBjbGtzIGRpZCBub3Qgc3RhcnRcbiIpOwot CQkJCQlnb3RvIGVycm9yOwotCQkJCX0KLQotCQkJCXJjID0gZHNpX2Rpc3BsYXlfbGlua19jbGtf ZW5hYmxlKGxfY2xrcywKLQkJCQkJbW5nci0+ZHNpX2N0cmxfY291bnQsIG1uZ3ItPm1hc3Rlcl9u ZHgpOwotCQkJCWlmIChyYykgewotCQkJCQlwcl9lcnIoIkxpbmsgY2xrcyBkaWQgbm90IHN0YXJ0 XG4iKTsKLQkJCQkJZ290byBlcnJvcjsKLQkJCQl9Ci0JCQkJbF9jX29uID0gdHJ1ZTsKLQkJCQlw cl9kZWJ1ZygiRUNHOiBjb3JlIGFuZCBMaW5rX29uXG4iKTsKLQkJCX0KLQotCQkJaWYgKG1uZ3It PnByZV9jbGtvZmZfY2IpIHsKLQkJCQlyYyA9IG1uZ3ItPnByZV9jbGtvZmZfY2IobW5nci0+cHJp dl9kYXRhLAotCQkJCQlEU0lfTElOS19DTEssIGxfc3RhdGUpOwotCQkJCWlmIChyYykKLQkJCQkJ cHJfZXJyKCJwcmUgbGluayBjbGsgb2ZmIGNiIGZhaWxlZFxuIik7Ci0JCQl9Ci0KLQkJCXJjID0g ZHNpX2Rpc3BsYXlfbGlua19jbGtfZGlzYWJsZShsX2Nsa3MsCi0JCQkJbW5nci0+ZHNpX2N0cmxf Y291bnQsIG1uZ3ItPm1hc3Rlcl9uZHgpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWls ZWQgdG8gc3RvcCBsaW5rIGNsaywgcmMgPSAlZFxuIiwKLQkJCQkgICAgICAgcmMpOwotCQkJCWdv dG8gZXJyb3I7Ci0JCQl9Ci0KLQkJCWlmIChtbmdyLT5wb3N0X2Nsa29mZl9jYikgewotCQkJCXJj ID0gbW5nci0+cG9zdF9jbGtvZmZfY2IobW5nci0+cHJpdl9kYXRhLAotCQkJCQlEU0lfTElOS19D TEssIGxfc3RhdGUpOwotCQkJCWlmIChyYykKLQkJCQkJcHJfZXJyKCJwb3N0IGxpbmsgY2xrIG9m ZiBjYiBmYWlsZWRcbiIpOwotCQkJfQotCQkJLyoKLQkJCSAqIFRoaXMgY2hlY2sgaXMgdG8gc2F2 ZSB1bm5lY2Vzc2FyeSBjbG9jayBzdGF0ZQotCQkJICogY2hhbmdlIHdoZW4gZ29pbmcgZnJvbSBF QVJMWV9HQVRFIHRvIE9GRi4gSW4gdGhlCi0JCQkgKiBjYXNlIHdoZXJlIHRoZSByZXF1ZXN0IGhh cHBlbnMgZm9yIGJvdGggQ29yZSBhbmQgTGluawotCQkJICogY2xvY2tzIGluIHRoZSBzYW1lIGNh bGwsIGNvcmUgY2xvY2tzIG5lZWQgdG8gYmUKLQkJCSAqIHR1cm5lZCBvbiBmaXJzdCBiZWZvcmUg T0ZGIHN0YXRlIGNhbiBiZSBlbnRlcmVkLgotCQkJICoKLQkJCSAqIENvcmUgY2xvY2tzIGFyZSB0 dXJuZWQgb24gaGVyZSBmb3IgTGluayBjbG9ja3MgdG8gZ28KLQkJCSAqIHRvIE9GRiBzdGF0ZS4g SWYgY29yZSBjbG9jayByZXF1ZXN0IGlzIGFsc28gcHJlc2VudCwKLQkJCSAqIHRoZW4gY29yZSBj bG9ja3MgY2FuIGJlIHR1cm5lZCBvZmYgQ29yZSBjbG9ja3MgYXJlCi0JCQkgKiB0cmFuc2l0aW9u ZWQgdG8gT0ZGIHN0YXRlLgotCQkJICovCi0JCQlpZiAobF9jX29uICYmICghKGNfY2xrcyAmJiAo Y19zdGF0ZSA9PSBEU0lfQ0xLX09GRikKLQkJCQkJICYmIChtbmdyLT5jb3JlX2Nsa19zdGF0ZSA9 PQotCQkJCQkgICAgIERTSV9DTEtfRUFSTFlfR0FURSkpKSkgewotCQkJCXJjID0gZHNpX2Rpc3Bs YXlfY29yZV9jbGtfZGlzYWJsZSgKLQkJCQkJbW5nci0+Y29yZV9jbGtzLCBtbmdyLT5kc2lfY3Ry bF9jb3VudCwKLQkJCQkJbW5nci0+bWFzdGVyX25keCk7Ci0JCQkJaWYgKHJjKSB7Ci0JCQkJCXBy X2VycigiY29yZSBjbGtzIGRpZCBub3Qgc3RvcFxuIik7Ci0JCQkJCWdvdG8gZXJyb3I7Ci0JCQkJ fQotCi0JCQkJbF9jX29uID0gZmFsc2U7Ci0JCQkJcHJfZGVidWcoIkVDRzogY29yZSBvZmZcbiIp OwotCQkJfSBlbHNlCi0JCQkJcHJfZGVidWcoIkVDRzogY29yZSBvZmYgc2tpcFxuIik7Ci0JCX0K LQotCQltbmdyLT5saW5rX2Nsa19zdGF0ZSA9IGxfc3RhdGU7Ci0JfQotCi0JaWYgKGNfY2xrcyAm JiAoY19zdGF0ZSAhPSBEU0lfQ0xLX09OKSkgewotCQkvKgotCQkgKiBXaGVuIGdvaW5nIHRvIE9G RiBzdGF0ZSBmcm9tIEVBUkxZIEdBVEUgc3RhdGUsIENvcmUgY2xvY2tzCi0JCSAqIHNob3VsZCBi ZSB0dXJuZWQgb24gZmlyc3Qgc28gdGhhdCB0aGUgSU9zIGNhbiBiZSBjbGFtcGVkLgotCQkgKiBs X2Nfb24gZmxhZyBpcyBzZXQsIHRoZW4gdGhlIGNvcmUgY2xvY2tzIHdlcmUgdHVybmVkIGJlZm9y ZQotCQkgKiB0byB0aGUgTGluayBjbG9ja3MgZ28gdG8gT0ZGIHN0YXRlLiBTbyBDb3JlIGNsb2Nr cyBhcmUKLQkJICogYWxyZWFkeSBPTiBhbmQgdGhpcyBzdGVwIGNhbiBiZSBza2lwcGVkLgotCQkg KgotCQkgKiBJT3MgYXJlIGNsYW1wZWQgaW4gcHJlX2Nsa29mZl9jYiBjYWxsYmFjay4KLQkJICov Ci0JCWlmICgoY19zdGF0ZSA9PSBEU0lfQ0xLX09GRikgJiYKLQkJICAgIChtbmdyLT5jb3JlX2Ns a19zdGF0ZSA9PQotCQkgICAgRFNJX0NMS19FQVJMWV9HQVRFKSAmJiAhbF9jX29uKSB7Ci0JCQly YyA9IGRzaV9kaXNwbGF5X2NvcmVfY2xrX2VuYWJsZShtbmdyLT5jb3JlX2Nsa3MsCi0JCQkJbW5n ci0+ZHNpX2N0cmxfY291bnQsIG1uZ3ItPm1hc3Rlcl9uZHgpOwotCQkJaWYgKHJjKSB7Ci0JCQkJ cHJfZXJyKCJjb3JlIGNsa3MgZGlkIG5vdCBzdGFydFxuIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJ CX0KLQkJCXByX2RlYnVnKCJFQ0c6IGNvcmUgb25cbiIpOwotCQl9IGVsc2UKLQkJCXByX2RlYnVn KCJFQ0c6IGNvcmUgb24gc2tpcFxuIik7Ci0KLQkJaWYgKG1uZ3ItPnByZV9jbGtvZmZfY2IpIHsK LQkJCXJjID0gbW5nci0+cHJlX2Nsa29mZl9jYihtbmdyLT5wcml2X2RhdGEsCi0JCQkJCQkgRFNJ X0NPUkVfQ0xLLAotCQkJCQkJIGNfc3RhdGUpOwotCQkJaWYgKHJjKQotCQkJCXByX2VycigicHJl IGNvcmUgY2xrIG9mZiBjYiBmYWlsZWRcbiIpOwotCQl9Ci0KLQkJcmMgPSBkc2lfZGlzcGxheV9j b3JlX2Nsa19kaXNhYmxlKGNfY2xrcywgbW5nci0+ZHNpX2N0cmxfY291bnQsCi0JCQltbmdyLT5t YXN0ZXJfbmR4KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byB0dXJuIG9mZiBj b3JlIGNsa3MgcmMgPSAlZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWlmIChj X3N0YXRlID09IERTSV9DTEtfT0ZGKSB7Ci0JCQlpZiAobW5nci0+cG9zdF9jbGtvZmZfY2IpIHsK LQkJCQlyYyA9IG1uZ3ItPnBvc3RfY2xrb2ZmX2NiKG1uZ3ItPnByaXZfZGF0YSwKLQkJCQkJCURT SV9DT1JFX0NMSywKLQkJCQkJCURTSV9DTEtfT0ZGKTsKLQkJCQlpZiAocmMpCi0JCQkJCXByX2Vy cigicG9zdCBjbGtvZmYgY2IgZmFpbCwgcmMgPSAlZFxuIiwKLQkJCQkJICAgICAgIHJjKTsKLQkJ CX0KLQkJfQotCQltbmdyLT5jb3JlX2Nsa19zdGF0ZSA9IGNfc3RhdGU7Ci0JfQotCi1lcnJvcjoK LQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3JlY2hlY2tfY2xrX3N0YXRlKHN0cnVj dCBkc2lfY2xrX21uZ3IgKm1uZ3IpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFk ICpwb3MgPSBOVUxMOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvICpjOwotCXUzMiBuZXdf Y29yZV9jbGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQl1MzIgbmV3X2xpbmtfY2xrX3N0YXRlID0g RFNJX0NMS19PRkY7Ci0JdTMyIG9sZF9jX2Nsa19zdGF0ZSA9IERTSV9DTEtfT0ZGOwotCXUzMiBv bGRfbF9jbGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQlzdHJ1Y3QgZHNpX2NvcmVfY2xrcyAqY19j bGtzID0gTlVMTDsKLQlzdHJ1Y3QgZHNpX2xpbmtfY2xrcyAqbF9jbGtzID0gTlVMTDsKLQotCS8q Ci0JICogQ29uZGl0aW9ucyB0byBtYWludGFpbiBEU0kgbWFuYWdlciBjbG9jayBzdGF0ZSBiYXNl ZCBvbgotCSAqCQljbG9jayBzdGF0ZXMgb2YgdmFyaW91cyBjbGllbnRzOgotCSAqCTEuIElmIGFu eSBjbGllbnQgaGFzIGNsb2NrIGluIE9OIHN0YXRlLCBEU0kgbWFuYWdlciBjbG9jayBzdGF0ZQot CSAqCQlzaG91bGQgYmUgT04uCi0JICoJMi4gSWYgYW55IGNsaWVudCBpcyBpbiBFQ0cgc3RhdGUg d2l0aCByZXN0IG9mIHRoZW0gdHVybmVkIE9GRiwKLQkgKgkgICBnbyB0byBFYXJseSBnYXRlIHN0 YXRlLgotCSAqCTMuIElmIGFsbCBjbGllbnRzIGhhdmUgY2xvY2tzIGFzIE9GRiwgdGhlbiBnbyB0 byBPRkYgc3RhdGUuCi0JICovCi0JbGlzdF9mb3JfZWFjaChwb3MsICZtbmdyLT5jbGllbnRfbGlz dCkgewotCQljID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvLCBs aXN0KTsKLQkJaWYgKGMtPmNvcmVfY2xrX3N0YXRlID09IERTSV9DTEtfT04pIHsKLQkJCW5ld19j b3JlX2Nsa19zdGF0ZSA9IERTSV9DTEtfT047Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChjLT5j b3JlX2Nsa19zdGF0ZSA9PSBEU0lfQ0xLX0VBUkxZX0dBVEUpIHsKLQkJCW5ld19jb3JlX2Nsa19z dGF0ZSA9IERTSV9DTEtfRUFSTFlfR0FURTsKLQkJfQotCX0KLQotCWxpc3RfZm9yX2VhY2gocG9z LCAmbW5nci0+Y2xpZW50X2xpc3QpIHsKLQkJYyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZHNp X2Nsa19jbGllbnRfaW5mbywgbGlzdCk7Ci0JCWlmIChjLT5saW5rX2Nsa19zdGF0ZSA9PSBEU0lf Q0xLX09OKSB7Ci0JCQluZXdfbGlua19jbGtfc3RhdGUgPSBEU0lfQ0xLX09OOwotCQkJYnJlYWs7 Ci0JCX0gZWxzZSBpZiAoYy0+bGlua19jbGtfc3RhdGUgPT0gRFNJX0NMS19FQVJMWV9HQVRFKSB7 Ci0JCQluZXdfbGlua19jbGtfc3RhdGUgPSBEU0lfQ0xLX0VBUkxZX0dBVEU7Ci0JCX0KLQl9Ci0K LQlpZiAobmV3X2NvcmVfY2xrX3N0YXRlICE9IG1uZ3ItPmNvcmVfY2xrX3N0YXRlKQotCQljX2Ns a3MgPSBtbmdyLT5jb3JlX2Nsa3M7Ci0KLQlpZiAobmV3X2xpbmtfY2xrX3N0YXRlICE9IG1uZ3It PmxpbmtfY2xrX3N0YXRlKQotCQlsX2Nsa3MgPSBtbmdyLT5saW5rX2Nsa3M7Ci0KLQlvbGRfY19j bGtfc3RhdGUgPSBtbmdyLT5jb3JlX2Nsa19zdGF0ZTsKLQlvbGRfbF9jbGtfc3RhdGUgPSBtbmdy LT5saW5rX2Nsa19zdGF0ZTsKLQotCXByX2RlYnVnKCJjX2Nsa19zdGF0ZSAoJWQgLT4gJWQpXG4i LAotCQlvbGRfY19jbGtfc3RhdGUsIG5ld19jb3JlX2Nsa19zdGF0ZSk7Ci0JcHJfZGVidWcoImxf Y2xrX3N0YXRlICglZCAtPiAlZClcbiIsCi0JCW9sZF9sX2Nsa19zdGF0ZSwgbmV3X2xpbmtfY2xr X3N0YXRlKTsKLQotCWlmIChjX2Nsa3MgfHwgbF9jbGtzKSB7Ci0JCXJjID0gZHNpX3VwZGF0ZV9j bGtfc3RhdGUoY19jbGtzLCBuZXdfY29yZV9jbGtfc3RhdGUsCi0JCQkJCSAgbF9jbGtzLCBuZXdf bGlua19jbGtfc3RhdGUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHVwZGF0 ZSBjbG9jayBzdGF0ZSwgcmMgPSAlZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0K LQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Nsa19yZXFfc3RhdGUodm9pZCAq Y2xpZW50LCBlbnVtIGRzaV9jbGtfdHlwZSBjbGssCi0JZW51bSBkc2lfY2xrX3N0YXRlIHN0YXRl KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKmMgPSBjbGll bnQ7Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAqbW5ncjsKLQlib29sIGNoYW5nZWQgPSBmYWxzZTsK LQotCWlmICghY2xpZW50IHx8ICFjbGsgfHwgY2xrID4gKERTSV9DT1JFX0NMSyB8IERTSV9MSU5L X0NMSykgfHwKLQkgICAgc3RhdGUgPiBEU0lfQ0xLX0VBUkxZX0dBVEUpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtcywgY2xpZW50ID0gJXBLLCBjbGsgPSAweCV4LCBzdGF0ZSA9ICVkXG4iLAot CQkgICAgICAgY2xpZW50LCBjbGssIHN0YXRlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J bW5nciA9IGMtPm1uZ3I7Ci0JbXV0ZXhfbG9jaygmbW5nci0+Y2xrX211dGV4KTsKLQotCXByX2Rl YnVnKCJbJXNdJXM6IENMSz0lZCwgbmV3X3N0YXRlPSVkLCBjb3JlPSVkLCBsaW5rbD0lZFxuIiwK LQkgICAgICAgbW5nci0+bmFtZSwgYy0+bmFtZSwgY2xrLCBzdGF0ZSwgYy0+Y29yZV9jbGtfc3Rh dGUsCi0JICAgICAgIGMtPmxpbmtfY2xrX3N0YXRlKTsKLQotCS8qCi0JICogQ2xvY2sgcmVmY291 bnQgaGFuZGxpbmcgYXMgYmVsb3c6Ci0JICoJaS4gSW5jcmVtZW50IHJlZmNvdW50IHdoZW5ldmVy IE9OIGlzIGNhbGxlZC4KLQkgKglpaS4gRGVjcmVtZW50IHJlZmNvdW50IHdoZW4gdHJhbnNpdGlv bmluZyBmcm9tIE9OIHN0YXRlIHRvCi0JICoJCWVpdGhlciBPRkYgb3IgRUFSTFlfR0FURS4KLQkg KglpaWkuIERvIG5vdCBkZWNyZW1lbnQgcmVmY291bnQgd2hlbiBjaGFuZ2luZyBmcm9tCi0JICoJ CUVBUkxZX0dBVEUgdG8gT0ZGLgotCSAqLwotCWlmIChzdGF0ZSA9PSBEU0lfQ0xLX09OKSB7Ci0J CWlmIChjbGsgJiBEU0lfQ09SRV9DTEspIHsKLQkJCWMtPmNvcmVfcmVmY291bnQrKzsKLQkJCWlm IChjLT5jb3JlX2Nsa19zdGF0ZSAhPSBEU0lfQ0xLX09OKSB7Ci0JCQkJYy0+Y29yZV9jbGtfc3Rh dGUgPSBEU0lfQ0xLX09OOwotCQkJCWNoYW5nZWQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCWlmIChj bGsgJiBEU0lfTElOS19DTEspIHsKLQkJCWMtPmxpbmtfcmVmY291bnQrKzsKLQkJCWlmIChjLT5s aW5rX2Nsa19zdGF0ZSAhPSBEU0lfQ0xLX09OKSB7Ci0JCQkJYy0+bGlua19jbGtfc3RhdGUgPSBE U0lfQ0xLX09OOwotCQkJCWNoYW5nZWQgPSB0cnVlOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmICgo c3RhdGUgPT0gRFNJX0NMS19FQVJMWV9HQVRFKSB8fAotCQkgICAoc3RhdGUgPT0gRFNJX0NMS19P RkYpKSB7Ci0JCWlmIChjbGsgJiBEU0lfQ09SRV9DTEspIHsKLQkJCWlmIChjLT5jb3JlX3JlZmNv dW50ID09IDApIHsKLQkJCQlpZiAoKGMtPmNvcmVfY2xrX3N0YXRlID09Ci0JCQkJICAgIERTSV9D TEtfRUFSTFlfR0FURSkgJiYKLQkJCQkgICAgKHN0YXRlID09IERTSV9DTEtfT0ZGKSkgewotCQkJ CQljaGFuZ2VkID0gdHJ1ZTsKLQkJCQkJYy0+Y29yZV9jbGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsK LQkJCQl9IGVsc2UgewotCQkJCQlwcl93YXJuKCJDb3JlIHJlZmNvdW50IGlzIHplcm8gZm9yICVz IiwKLQkJCQkJCWMtPm5hbWUpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJYy0+Y29yZV9yZWZj b3VudC0tOwotCQkJCWlmIChjLT5jb3JlX3JlZmNvdW50ID09IDApIHsKLQkJCQkJYy0+Y29yZV9j bGtfc3RhdGUgPSBzdGF0ZTsKLQkJCQkJY2hhbmdlZCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9 Ci0JCWlmIChjbGsgJiBEU0lfTElOS19DTEspIHsKLQkJCWlmIChjLT5saW5rX3JlZmNvdW50ID09 IDApIHsKLQkJCQlpZiAoKGMtPmxpbmtfY2xrX3N0YXRlID09Ci0JCQkJICAgIERTSV9DTEtfRUFS TFlfR0FURSkgJiYKLQkJCQkgICAgKHN0YXRlID09IERTSV9DTEtfT0ZGKSkgewotCQkJCQljaGFu Z2VkID0gdHJ1ZTsKLQkJCQkJYy0+bGlua19jbGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQkJCQl9 IGVsc2UgewotCQkJCQlwcl93YXJuKCJMaW5rIHJlZmNvdW50IGlzIHplcm8gZm9yICVzIiwKLQkJ CQkJCWMtPm5hbWUpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJYy0+bGlua19yZWZjb3VudC0t OwotCQkJCWlmIChjLT5saW5rX3JlZmNvdW50ID09IDApIHsKLQkJCQkJYy0+bGlua19jbGtfc3Rh dGUgPSBzdGF0ZTsKLQkJCQkJY2hhbmdlZCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQot CXByX2RlYnVnKCJbJXNdJXM6IGNoYW5nZT0lZCwgQ29yZSAocmVmPSVkLCBzdGF0ZT0lZCksIExp bmsgKHJlZj0lZCwgc3RhdGU9JWQpXG4iLAotCQkgbW5nci0+bmFtZSwgYy0+bmFtZSwgY2hhbmdl ZCwgYy0+Y29yZV9yZWZjb3VudCwKLQkJIGMtPmNvcmVfY2xrX3N0YXRlLCBjLT5saW5rX3JlZmNv dW50LCBjLT5saW5rX2Nsa19zdGF0ZSk7Ci0KLQlpZiAoY2hhbmdlZCkgewotCQlyYyA9IGRzaV9y ZWNoZWNrX2Nsa19zdGF0ZShtbmdyKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJGYWlsZWQgdG8g YWRqdXN0IGNsb2NrIHN0YXRlIHJjID0gJWRcbiIsIHJjKTsKLQl9Ci0KLQltdXRleF91bmxvY2so Jm1uZ3ItPmNsa19tdXRleCk7Ci0JcmV0dXJuIHJjOwotfQotCi1ERUZJTkVfTVVURVgoZHNpX21u Z3JfY2xrX211dGV4KTsKLQotaW50IGRzaV9kaXNwbGF5X2Nsa19jdHJsKHZvaWQgKmhhbmRsZSwK LQllbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwgZW51bSBkc2lfY2xrX3N0YXRlIGNsa19zdGF0 ZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFoYW5kbGUpIHsKLQkJcHJfZXJyKCIlczogSW52 YWxpZCBhcmdcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhf bG9jaygmZHNpX21uZ3JfY2xrX211dGV4KTsKLQlyYyA9IGRzaV9jbGtfcmVxX3N0YXRlKGhhbmRs ZSwgY2xrX3R5cGUsIGNsa19zdGF0ZSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIiVzOiBmYWlsZWQg c2V0IGNsayBzdGF0ZSwgcmMgPSAlZFxuIiwgX19mdW5jX18sIHJjKTsKLQltdXRleF91bmxvY2so JmRzaV9tbmdyX2Nsa19tdXRleCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgKmRzaV9yZWdp c3Rlcl9jbGtfaGFuZGxlKHZvaWQgKmNsa19tbmdyLCBjaGFyICpjbGllbnQpCi17Ci0Jdm9pZCAq aGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3QgZHNpX2Nsa19tbmdyICptbmdyID0gY2xrX21uZ3I7Ci0J c3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKmM7Ci0KLQlpZiAoIW1uZ3IpIHsKLQkJcHJfZXJy KCJiYWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQotCi0JbXV0 ZXhfbG9jaygmbW5nci0+Y2xrX211dGV4KTsKLQotCWMgPSBremFsbG9jKHNpemVvZigqYyksIEdG UF9LRVJORUwpOwotCWlmICghYykgewotCQloYW5kbGUgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQln b3RvIGVycm9yOwotCX0KLQotCXN0cmxjcHkoYy0+bmFtZSwgY2xpZW50LCBNQVhfU1RSSU5HX0xF Tik7Ci0JYy0+bW5nciA9IG1uZ3I7Ci0KLQlsaXN0X2FkZCgmYy0+bGlzdCwgJm1uZ3ItPmNsaWVu dF9saXN0KTsKLQotCXByX2RlYnVnKCJbJXNdOiBBZGRlZCBuZXcgY2xpZW50ICglcylcbiIsIG1u Z3ItPm5hbWUsIGMtPm5hbWUpOwotCWhhbmRsZSA9IGM7Ci1lcnJvcjoKLQltdXRleF91bmxvY2so Jm1uZ3ItPmNsa19tdXRleCk7Ci0JcmV0dXJuIGhhbmRsZTsKLX0KLQotaW50IGRzaV9kZXJlZ2lz dGVyX2Nsa19oYW5kbGUodm9pZCAqY2xpZW50KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRz aV9jbGtfY2xpZW50X2luZm8gKmMgPSBjbGllbnQ7Ci0Jc3RydWN0IGRzaV9jbGtfbW5nciAqbW5n cjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBOVUxMOwotCXN0cnVjdCBsaXN0X2hlYWQgKnRt cCA9IE5VTEw7Ci0Jc3RydWN0IGRzaV9jbGtfY2xpZW50X2luZm8gKm5vZGUgPSBOVUxMOwotCi0J aWYgKCFjbGllbnQpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCW1uZ3IgPSBjLT5tbmdyOwotCXByX2RlYnVnKCIlczogRU5URVJcbiIs IG1uZ3ItPm5hbWUpOwotCW11dGV4X2xvY2soJm1uZ3ItPmNsa19tdXRleCk7Ci0JYy0+Y29yZV9j bGtfc3RhdGUgPSBEU0lfQ0xLX09GRjsKLQljLT5saW5rX2Nsa19zdGF0ZSA9IERTSV9DTEtfT0ZG OwotCi0JcmMgPSBkc2lfcmVjaGVja19jbGtfc3RhdGUobW5ncik7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiY2xvY2sgc3RhdGUgcmVjaGVjayBmYWlsZWQgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3Rv IGVycm9yOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJm1uZ3ItPmNsaWVu dF9saXN0KSB7Ci0JCW5vZGUgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9jbGtfY2xpZW50 X2luZm8sCi0JCQkgIGxpc3QpOwotCQlpZiAobm9kZSA9PSBjKSB7Ci0JCQlsaXN0X2RlbCgmbm9k ZS0+bGlzdCk7Ci0JCQlwcl9kZWJ1ZygiUmVtb3ZlZCBkZXZpY2UgKCVzKVxuIiwgbm9kZS0+bmFt ZSk7Ci0JCQlrZnJlZShub2RlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi1lcnJvcjoKLQltdXRl eF91bmxvY2soJm1uZ3ItPmNsa19tdXRleCk7Ci0JcHJfZGVidWcoIiVzOiBFWElULCByYyA9ICVk XG4iLCBtbmdyLT5uYW1lLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi12b2lkICpkc2lfZGlzcGxh eV9jbGtfbW5ncl9yZWdpc3RlcihzdHJ1Y3QgZHNpX2Nsa19pbmZvICppbmZvKQotewotCXN0cnVj dCBkc2lfY2xrX21uZ3IgKm1uZ3I7Ci0JaW50IGkgPSAwOwotCi0JaWYgKCFpbmZvKSB7Ci0JCXBy X2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9 Ci0KLQltbmdyID0ga3phbGxvYyhzaXplb2YoKm1uZ3IpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1u Z3IpIHsKLQkJbW5nciA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J bXV0ZXhfaW5pdCgmbW5nci0+Y2xrX211dGV4KTsKLQltbmdyLT5kc2lfY3RybF9jb3VudCA9IGlu Zm8tPmRzaV9jdHJsX2NvdW50OwotCW1uZ3ItPm1hc3Rlcl9uZHggPSBpbmZvLT5tYXN0ZXJfbmR4 OwotCi0JaWYgKG1uZ3ItPmRzaV9jdHJsX2NvdW50ID4gTUFYX0RTSV9DVFJMKSB7Ci0JCWtmcmVl KG1uZ3IpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBp IDwgbW5nci0+ZHNpX2N0cmxfY291bnQ7IGkrKykgewotCQltZW1jcHkoJm1uZ3ItPmNvcmVfY2xr c1tpXS5jbGtzLCAmaW5mby0+Y19jbGtzW2ldLAotCQkJc2l6ZW9mKHN0cnVjdCBkc2lfY29yZV9j bGtfaW5mbykpOwotCQltZW1jcHkoJm1uZ3ItPmxpbmtfY2xrc1tpXS5jbGtzLCAmaW5mby0+bF9j bGtzW2ldLAotCQkJc2l6ZW9mKHN0cnVjdCBkc2lfbGlua19jbGtfaW5mbykpOwotCQltbmdyLT5j b3JlX2Nsa3NbaV0uYnVzX2hhbmRsZSA9IGluZm8tPmJ1c19oYW5kbGVbaV07Ci0JCW1uZ3ItPmN0 cmxfaW5kZXhbaV0gPSBpbmZvLT5jdHJsX2luZGV4W2ldOwotCX0KLQotCUlOSVRfTElTVF9IRUFE KCZtbmdyLT5jbGllbnRfbGlzdCk7Ci0JbW5nci0+cHJlX2Nsa29uX2NiID0gaW5mby0+cHJlX2Ns a29uX2NiOwotCW1uZ3ItPnBvc3RfY2xrb25fY2IgPSBpbmZvLT5wb3N0X2Nsa29uX2NiOwotCW1u Z3ItPnByZV9jbGtvZmZfY2IgPSBpbmZvLT5wcmVfY2xrb2ZmX2NiOwotCW1uZ3ItPnBvc3RfY2xr b2ZmX2NiID0gaW5mby0+cG9zdF9jbGtvZmZfY2I7Ci0JbW5nci0+cHJpdl9kYXRhID0gaW5mby0+ cHJpdl9kYXRhOwotCW1lbWNweShtbmdyLT5uYW1lLCBpbmZvLT5uYW1lLCBNQVhfU1RSSU5HX0xF Tik7Ci0KLWVycm9yOgotCXByX2RlYnVnKCJFWElULCByYyA9ICVsZFxuIiwgUFRSX0VSUihtbmdy KSk7Ci0JcmV0dXJuIG1uZ3I7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9jbGtfbW5ncl9kZXJlZ2lz dGVyKHZvaWQgKmNsa19tbmdyKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9jbGtfbW5n ciAqbW5nciA9IGNsa19tbmdyOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvc2l0aW9uID0gTlVMTDsK LQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSBOVUxMOwotCXN0cnVjdCBkc2lfY2xrX2NsaWVudF9p bmZvICpub2RlID0gTlVMTDsKLQotCWlmICghbW5ncikgewotCQlwcl9lcnIoIkludmFsaWQgcGFy YW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBFTlRFUlxu IiwgbW5nci0+bmFtZSk7Ci0JbXV0ZXhfbG9jaygmbW5nci0+Y2xrX211dGV4KTsKLQotCWxpc3Rf Zm9yX2VhY2hfc2FmZShwb3NpdGlvbiwgdG1wLCAmbW5nci0+Y2xpZW50X2xpc3QpIHsKLQkJbm9k ZSA9IGxpc3RfZW50cnkocG9zaXRpb24sIHN0cnVjdCBkc2lfY2xrX2NsaWVudF9pbmZvLAotCQkJ ICBsaXN0KTsKLQkJbGlzdF9kZWwoJm5vZGUtPmxpc3QpOwotCQlwcl9kZWJ1ZygiUmVtb3ZlZCBk ZXZpY2UgKCVzKVxuIiwgbm9kZS0+bmFtZSk7Ci0JCWtmcmVlKG5vZGUpOwotCX0KLQotCXJjID0g ZHNpX3JlY2hlY2tfY2xrX3N0YXRlKG1uZ3IpOwotCWlmIChyYykKLQkJcHJfZXJyKCJmYWlsZWQg dG8gZGlzYWJsZSBhbGwgY2xvY2tzXG4iKTsKLQotCW11dGV4X3VubG9jaygmbW5nci0+Y2xrX211 dGV4KTsKLQlwcl9kZWJ1ZygiJXM6IEVYSVQsIHJjID0gJWRcbiIsIG1uZ3ItPm5hbWUsIHJjKTsK LQlrZnJlZShtbmdyKTsKLQlyZXR1cm4gcmM7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNp LXN0YWdpbmcvZHNpX2N0cmwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBjZjlj YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJs LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp IDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSJkc2ktY3RybDpbJXNdICIgZm10 LCBfX2Z1bmNfXwotCi0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGlu dXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVk ZSA8bGludXgvY2xrLmg+Ci0jaWZkZWYgQ09ORklHX1FDT01fQlVTX1NDQUxJTkcKLSNpbmNsdWRl IDxsaW51eC9tc20tYnVzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KLSNp bmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KLQotI2luY2x1ZGUgIm1zbV9kcnYuaCIKLSNp bmNsdWRlICJtc21fa21zLmgiCi0jaW5jbHVkZSAibXNtX2dwdS5oIgotI2luY2x1ZGUgIm1zbV9t bXUuaCIKLSNpbmNsdWRlICJkc2lfY3RybC5oIgotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0j aW5jbHVkZSAiZHNpX2Nsay5oIgotI2luY2x1ZGUgImRzaV9wd3IuaCIKLSNpbmNsdWRlICJkc2lf Y2F0YWxvZy5oIgotCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotCi0jZGVmaW5lIERTSV9DVFJMX0RF RkFVTFRfTEFCRUwgIk1EU1MgRFNJIENUUkwiCi0KLSNkZWZpbmUgRFNJX0NUUkxfVFhfVE9fTVMg ICAgIDIwMAotCi0jZGVmaW5lIFRPX09OX09GRih4KSAoKHgpID8gIk9OIiA6ICJPRkYiKQotCi0j ZGVmaW5lIENFSUwoeCwgeSkgICAgICAgICAgICAgICgoKHgpICsgKCh5KS0xKSkgLyAoeSkpCi0v KioKLSAqIGVudW0gZHNpX2N0cmxfZHJpdmVyX29wcyAtIGNvbnRyb2xsZXIgZHJpdmVyIG9wcwot ICovCi1lbnVtIGRzaV9jdHJsX2RyaXZlcl9vcHMgewotCURTSV9DVFJMX09QX1BPV0VSX1NUQVRF X0NIQU5HRSwKLQlEU0lfQ1RSTF9PUF9DTURfRU5HSU5FLAotCURTSV9DVFJMX09QX1ZJRF9FTkdJ TkUsCi0JRFNJX0NUUkxfT1BfSE9TVF9FTkdJTkUsCi0JRFNJX0NUUkxfT1BfQ01EX1RYLAotCURT SV9DVFJMX09QX0hPU1RfSU5JVCwKLQlEU0lfQ1RSTF9PUF9UUEcsCi0JRFNJX0NUUkxfT1BfUEhZ X1NXX1JFU0VULAotCURTSV9DVFJMX09QX0FTWU5DX1RJTUlORywKLQlEU0lfQ1RSTF9PUF9NQVgK LX07Ci0KLXN0cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0gewotCXN0cnVjdCBkc2lfY3RybCAqY3Ry bDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1zdGF0aWMgTElTVF9IRUFEKGRzaV9j dHJsX2xpc3QpOwotc3RhdGljIERFRklORV9NVVRFWChkc2lfY3RybF9saXN0X2xvY2spOwotCi1z dGF0aWMgY29uc3QgZW51bSBkc2lfY3RybF92ZXJzaW9uIGRzaV9jdHJsX3YxXzQgPSBEU0lfQ1RS TF9WRVJTSU9OXzFfNDsKLXN0YXRpYyBjb25zdCBlbnVtIGRzaV9jdHJsX3ZlcnNpb24gZHNpX2N0 cmxfdjJfMCA9IERTSV9DVFJMX1ZFUlNJT05fMl8wOwotc3RhdGljIGNvbnN0IGVudW0gZHNpX2N0 cmxfdmVyc2lvbiBkc2lfY3RybF92Ml8yID0gRFNJX0NUUkxfVkVSU0lPTl8yXzI7Ci0KLXN0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1zbV9kc2lfb2ZfbWF0Y2hbXSA9IHsKLQl7Ci0J CS5jb21wYXRpYmxlID0gInFjb20sZHNpLWN0cmwtaHctdjEuNCIsCi0JCS5kYXRhID0gJmRzaV9j dHJsX3YxXzQsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gInFjb20sZHNpLWN0cmwtaHctdjIu MCIsCi0JCS5kYXRhID0gJmRzaV9jdHJsX3YyXzAsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0g InFjb20sZHNpLWN0cmwtaHctdjIuMiIsCi0JCS5kYXRhID0gJmRzaV9jdHJsX3YyXzIsCi0JfSwK LQl7fQotfTsKLQotc3RhdGljIHNzaXplX3QgZGVidWdmc19zdGF0ZV9pbmZvX3JlYWQoc3RydWN0 IGZpbGUgKmZpbGUsCi0JCQkJICAgICAgIGNoYXIgX191c2VyICpidWZmLAotCQkJCSAgICAgICBz aXplX3QgY291bnQsCi0JCQkJICAgICAgIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZHNpX2N0 cmwgKmRzaV9jdHJsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZjsKLQl1MzIgbGVu ID0gMDsKLQotCWlmICghZHNpX2N0cmwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKCpwcG9z KQotCQlyZXR1cm4gMDsKLQotCWJ1ZiA9IGt6YWxsb2MoU1pfNEssIEdGUF9LRVJORUwpOwotCWlm ICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIER1bXAgY3VycmVudCBzdGF0ZSAqLwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKFNaXzRLIC0gbGVuKSwgIkN1cnJlbnQgU3Rh dGU6XG4iKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChTWl80SyAtIGxlbiksCi0J CQkiXHRDVFJMX0VOR0lORSA9ICVzXG4iLAotCQkJVE9fT05fT0ZGKGRzaV9jdHJsLT5jdXJyZW50 X3N0YXRlLmNvbnRyb2xsZXJfc3RhdGUpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChTWl80SyAtIGxlbiksCi0JCQkiXHRWSURFT19FTkdJTkUgPSAlc1xuXHRDT01NQU5EX0VOR0lO RSA9ICVzXG4iLAotCQkJVE9fT05fT0ZGKGRzaV9jdHJsLT5jdXJyZW50X3N0YXRlLnZpZF9lbmdp bmVfc3RhdGUpLAotCQkJVE9fT05fT0ZGKGRzaV9jdHJsLT5jdXJyZW50X3N0YXRlLmNtZF9lbmdp bmVfc3RhdGUpKTsKLQotCS8qIER1bXAgY2xvY2sgaW5mb3JtYXRpb24gKi8KLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChTWl80SyAtIGxlbiksICJcbkNsb2NrIEluZm86XG4iKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChTWl80SyAtIGxlbiksCi0JCQkiXHRCWVRFX0NM SyA9ICV1LCBQSVhFTF9DTEsgPSAldSwgRVNDX0NMSyA9ICV1XG4iLAotCQkJZHNpX2N0cmwtPmNs a19mcmVxLmJ5dGVfY2xrX3JhdGUsCi0JCQlkc2lfY3RybC0+Y2xrX2ZyZXEucGl4X2Nsa19yYXRl LAotCQkJZHNpX2N0cmwtPmNsa19mcmVxLmVzY19jbGtfcmF0ZSk7Ci0KLQkvKiBUT0RPOiBtYWtl IHN1cmUgdGhhdCB0aGlzIGRvZXMgbm90IGV4Y2VlZCA0SyAqLwotCWlmIChjb3B5X3RvX3VzZXIo YnVmZiwgYnVmLCBsZW4pKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0K LQotCSpwcG9zICs9IGxlbjsKLQlrZnJlZShidWYpOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRp YyBzc2l6ZV90IGRlYnVnZnNfcmVnX2R1bXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkg ICAgIGNoYXIgX191c2VyICpidWZmLAotCQkJCSAgICAgc2l6ZV90IGNvdW50LAotCQkJCSAgICAg bG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwgPSBmaWxlLT5wcml2 YXRlX2RhdGE7Ci0JY2hhciAqYnVmOwotCXUzMiBsZW4gPSAwOwotCXN0cnVjdCBkc2lfY2xrX2N0 cmxfaW5mbyBjbGtfaW5mbzsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCkKLQkJcmV0 dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwotCi0JYnVmID0ga3phbGxv YyhTWl80SywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0J Y2xrX2luZm8uY2xpZW50ID0gRFNJX0NMS19SRVFfRFNJX0NMSUVOVDsKLQljbGtfaW5mby5jbGtf dHlwZSA9IERTSV9DT1JFX0NMSzsKLQljbGtfaW5mby5jbGtfc3RhdGUgPSBEU0lfQ0xLX09OOwot Ci0JcmMgPSBkc2lfY3RybC0+Y2xrX2NiLmRzaV9jbGtfY2IoZHNpX2N0cmwtPmNsa19jYi5wcml2 LCBjbGtfaW5mbyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBEU0kg Y29yZSBjbG9ja3NcbiIpOwotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaWYg KGRzaV9jdHJsLT5ody5vcHMucmVnX2R1bXBfdG9fYnVmZmVyKQotCQlsZW4gPSBkc2lfY3RybC0+ aHcub3BzLnJlZ19kdW1wX3RvX2J1ZmZlcigmZHNpX2N0cmwtPmh3LAotCQkJCWJ1ZiwgU1pfNEsp OwotCi0JY2xrX2luZm8uY2xrX3N0YXRlID0gRFNJX0NMS19PRkY7Ci0JcmMgPSBkc2lfY3RybC0+ Y2xrX2NiLmRzaV9jbGtfY2IoZHNpX2N0cmwtPmNsa19jYi5wcml2LCBjbGtfaW5mbyk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGRpc2FibGUgRFNJIGNvcmUgY2xvY2tzXG4iKTsK LQkJa2ZyZWUoYnVmKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCi0JLyogVE9ETzogbWFrZSBzdXJl IHRoYXQgdGhpcyBkb2VzIG5vdCBleGNlZWQgNEsgKi8KLQlpZiAoY29weV90b191c2VyKGJ1ZmYs IGJ1ZiwgbGVuKSkgewotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQkq cHBvcyArPSBsZW47Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGF0ZV9pbmZvX2ZvcHMgPSB7Ci0JLm9wZW4gPSBz aW1wbGVfb3BlbiwKLQkucmVhZCA9IGRlYnVnZnNfc3RhdGVfaW5mb19yZWFkLAotfTsKLQotc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVnX2R1bXBfZm9wcyA9IHsKLQkub3Bl biA9IHNpbXBsZV9vcGVuLAotCS5yZWFkID0gZGVidWdmc19yZWdfZHVtcF9yZWFkLAotfTsKLQot c3RhdGljIGludCBkc2lfY3RybF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3Ry bCwKLQkJCQkgc3RydWN0IGRlbnRyeSAqcGFyZW50KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0 IGRlbnRyeSAqZGlyLCAqc3RhdGVfZmlsZSwgKnJlZ19kdW1wOwotCWNoYXIgZGJnX25hbWVbRFNJ X0RFQlVHX05BTUVfTEVOXTsKLQotCWRpciA9IGRlYnVnZnNfY3JlYXRlX2Rpcihkc2lfY3RybC0+ bmFtZSwgcGFyZW50KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoZGlyKSkgewotCQlyYyA9IFBUUl9F UlIoZGlyKTsKLQkJcHJfZXJyKCJbRFNJXyVkXSBkZWJ1Z2ZzIGNyZWF0ZSBkaXIgZmFpbGVkLCBy Yz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0Jc3RhdGVfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRlX2luZm8i LAotCQkJCQkgMDQ0NCwKLQkJCQkJIGRpciwKLQkJCQkJIGRzaV9jdHJsLAotCQkJCQkgJnN0YXRl X2luZm9fZm9wcyk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlX2ZpbGUpKSB7Ci0JCXJjID0g UFRSX0VSUihzdGF0ZV9maWxlKTsKLQkJcHJfZXJyKCJbRFNJXyVkXSBzdGF0ZSBmaWxlIGZhaWxl ZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3Rv IGVycm9yX3JlbW92ZV9kaXI7Ci0JfQotCi0JcmVnX2R1bXAgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxl KCJyZWdfZHVtcCIsCi0JCQkJICAgICAgIDA0NDQsCi0JCQkJICAgICAgIGRpciwKLQkJCQkgICAg ICAgZHNpX2N0cmwsCi0JCQkJICAgICAgICZyZWdfZHVtcF9mb3BzKTsKLQlpZiAoSVNfRVJSX09S X05VTEwocmVnX2R1bXApKSB7Ci0JCXJjID0gUFRSX0VSUihyZWdfZHVtcCk7Ci0JCXByX2Vycigi W0RTSV8lZF0gcmVnIGR1bXAgZmlsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0 cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcl9yZW1vdmVfZGlyOwotCX0KLQotCWRz aV9jdHJsLT5kZWJ1Z2ZzX3Jvb3QgPSBkaXI7Ci0KLQlzbnByaW50ZihkYmdfbmFtZSwgRFNJX0RF QlVHX05BTUVfTEVOLCAiZHNpJWRfY3RybCIsCi0JCQkJCQlkc2lfY3RybC0+Y2VsbF9pbmRleCk7 Ci0JZHB1X2RiZ19yZWdfcmVnaXN0ZXJfYmFzZShkYmdfbmFtZSwgZHNpX2N0cmwtPmh3LmJhc2Us Ci0JCQkJbXNtX2lvbWFwX3NpemUoZHNpX2N0cmwtPnBkZXYsICJkc2lfY3RybCIpKTsKLWVycm9y X3JlbW92ZV9kaXI6Ci0JZGVidWdmc19yZW1vdmUoZGlyKTsKLWVycm9yOgotCXJldHVybiByYzsK LX0KLQotc3RhdGljIGludCBkc2lfY3RybF9kZWJ1Z2ZzX2RlaW5pdChzdHJ1Y3QgZHNpX2N0cmwg KmRzaV9jdHJsKQotewotCWRlYnVnZnNfcmVtb3ZlKGRzaV9jdHJsLT5kZWJ1Z2ZzX3Jvb3QpOwot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3Bh Y2UqCi1kc2lfY3RybF9nZXRfYXNwYWNlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCWlu dCBkb21haW4pCi17Ci0JaWYgKCFkc2lfY3RybCB8fCAhZHNpX2N0cmwtPmRybV9kZXYpCi0JCXJl dHVybiBOVUxMOwotCi0JcmV0dXJuIG1zbV9nZW1fc21tdV9hZGRyZXNzX3NwYWNlX2dldChkc2lf Y3RybC0+ZHJtX2RldiwgZG9tYWluKTsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9jaGVja19z dGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJCWVudW0gZHNpX2N0cmxfZHJpdmVy X29wcyBvcCwKLQkJCQl1MzIgb3Bfc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNp X2N0cmxfc3RhdGVfaW5mbyAqc3RhdGUgPSAmZHNpX2N0cmwtPmN1cnJlbnRfc3RhdGU7Ci0KLQlz d2l0Y2ggKG9wKSB7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9QT1dFUl9TVEFURV9DSEFOR0U6Ci0JCWlm IChzdGF0ZS0+cG93ZXJfc3RhdGUgPT0gb3Bfc3RhdGUpIHsKLQkJCXByX2RlYnVnKCJbJWRdIE5v IGNoYW5nZSBpbiBzdGF0ZSwgcHdyX3N0YXRlPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5j ZWxsX2luZGV4LCBvcF9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoc3Rh dGUtPnBvd2VyX3N0YXRlID09IERTSV9DVFJMX1BPV0VSX1ZSRUdfT04pIHsKLQkJCWlmIChzdGF0 ZS0+dmlkX2VuZ2luZV9zdGF0ZSA9PSBEU0lfQ1RSTF9FTkdJTkVfT04pIHsKLQkJCQlwcl9kZWJ1 ZygiWyVkXVN0YXRlIGVycm9yOiBvcD0lZDogJWRcbiIsCi0JCQkJICAgICAgIGRzaV9jdHJsLT5j ZWxsX2luZGV4LAotCQkJCSAgICAgICBvcF9zdGF0ZSwKLQkJCQkgICAgICAgc3RhdGUtPnZpZF9l bmdpbmVfc3RhdGUpOwotCQkJCXJjID0gLUVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQlj YXNlIERTSV9DVFJMX09QX0NNRF9FTkdJTkU6Ci0JCWlmIChzdGF0ZS0+Y21kX2VuZ2luZV9zdGF0 ZSA9PSBvcF9zdGF0ZSkgewotCQkJcHJfZGVidWcoIlslZF0gTm8gY2hhbmdlIGluIHN0YXRlLCBj bWRfc3RhdGU9JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9wX3N0YXRl KTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfSBlbHNlIGlmICgoc3RhdGUtPnBvd2VyX3N0YXRlICE9 IERTSV9DVFJMX1BPV0VSX1ZSRUdfT04pIHx8Ci0JCQkgICAoc3RhdGUtPmNvbnRyb2xsZXJfc3Rh dGUgIT0gRFNJX0NUUkxfRU5HSU5FX09OKSkgewotCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJv cjogb3A9JWQ6ICVkLCAlZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJ CSAgICAgICBvcCwKLQkJCSAgICAgICBzdGF0ZS0+cG93ZXJfc3RhdGUsCi0JCQkgICAgICAgc3Rh dGUtPmNvbnRyb2xsZXJfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwot CWNhc2UgRFNJX0NUUkxfT1BfVklEX0VOR0lORToKLQkJaWYgKHN0YXRlLT52aWRfZW5naW5lX3N0 YXRlID09IG9wX3N0YXRlKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXSBObyBjaGFuZ2UgaW4gc3RhdGUs IGNtZF9zdGF0ZT0lZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgb3Bfc3Rh dGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKChzdGF0ZS0+cG93ZXJfc3RhdGUg IT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgfHwKLQkJCSAgIChzdGF0ZS0+Y29udHJvbGxlcl9z dGF0ZSAhPSBEU0lfQ1RSTF9FTkdJTkVfT04pKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXVN0YXRlIGVy cm9yOiBvcD0lZDogJWQsICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LAot CQkJICAgICAgIG9wLAotCQkJICAgICAgIHN0YXRlLT5wb3dlcl9zdGF0ZSwKLQkJCSAgICAgICBz dGF0ZS0+Y29udHJvbGxlcl9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7 Ci0JY2FzZSBEU0lfQ1RSTF9PUF9IT1NUX0VOR0lORToKLQkJaWYgKHN0YXRlLT5jb250cm9sbGVy X3N0YXRlID09IG9wX3N0YXRlKSB7Ci0JCQlwcl9kZWJ1ZygiWyVkXSBObyBjaGFuZ2UgaW4gc3Rh dGUsIGN0cmxfc3RhdGU9JWRcbiIsCi0JCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIG9w X3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfSBlbHNlIGlmIChzdGF0ZS0+cG93ZXJfc3Rh dGUgIT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgewotCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBl cnJvciAobGluayBpcyBvZmYpOiBvcD0lZDosICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5j ZWxsX2luZGV4LAotCQkJICAgICAgIG9wX3N0YXRlLAotCQkJICAgICAgIHN0YXRlLT5wb3dlcl9z dGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0gZWxzZSBpZiAoKG9wX3N0YXRlID09IERTSV9D VFJMX0VOR0lORV9PRkYpICYmCi0JCQkgICAoKHN0YXRlLT5jbWRfZW5naW5lX3N0YXRlICE9IERT SV9DVFJMX0VOR0lORV9PRkYpIHx8Ci0JCQkgICAgKHN0YXRlLT52aWRfZW5naW5lX3N0YXRlICE9 IERTSV9DVFJMX0VOR0lORV9PRkYpKSkgewotCQkJcHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvciAo ZW5nIG9uKTogb3A9JWQ6ICVkLCAlZFxuIiwKLQkJCQkgIGRzaV9jdHJsLT5jZWxsX2luZGV4LAot CQkJCSAgb3Bfc3RhdGUsCi0JCQkJICBzdGF0ZS0+Y21kX2VuZ2luZV9zdGF0ZSwKLQkJCQkgIHN0 YXRlLT52aWRfZW5naW5lX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCQlicmVhazsK LQljYXNlIERTSV9DVFJMX09QX0NNRF9UWDoKLQkJaWYgKChzdGF0ZS0+cG93ZXJfc3RhdGUgIT0g RFNJX0NUUkxfUE9XRVJfVlJFR19PTikgfHwKLQkJICAgIChzdGF0ZS0+aG9zdF9pbml0aWFsaXpl ZCAhPSB0cnVlKSB8fAotCQkgICAgKHN0YXRlLT5jbWRfZW5naW5lX3N0YXRlICE9IERTSV9DVFJM X0VOR0lORV9PTikpIHsKLQkJCXByX2RlYnVnKCJbJWRdU3RhdGUgZXJyb3I6IG9wPSVkOiAlZCwg JWQsICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkJICAgICAgIG9w LAotCQkJICAgICAgIHN0YXRlLT5wb3dlcl9zdGF0ZSwKLQkJCSAgICAgICBzdGF0ZS0+aG9zdF9p bml0aWFsaXplZCwKLQkJCSAgICAgICBzdGF0ZS0+Y21kX2VuZ2luZV9zdGF0ZSk7Ci0JCQlyYyA9 IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9IT1NUX0lOSVQ6Ci0J CWlmIChzdGF0ZS0+aG9zdF9pbml0aWFsaXplZCA9PSBvcF9zdGF0ZSkgewotCQkJcHJfZGVidWco IlslZF0gTm8gY2hhbmdlIGluIHN0YXRlLCBob3N0X2luaXQ9JWRcbiIsCi0JCQkgICAgICAgZHNp X2N0cmwtPmNlbGxfaW5kZXgsIG9wX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfSBlbHNl IGlmIChzdGF0ZS0+cG93ZXJfc3RhdGUgIT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgewotCQkJ cHJfZGVidWcoIlslZF1TdGF0ZSBlcnJvcjogb3A9JWQ6ICVkXG4iLAotCQkJICAgICAgIGRzaV9j dHJsLT5jZWxsX2luZGV4LCBvcCwgc3RhdGUtPnBvd2VyX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZB TDsKLQkJfQotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX09QX1RQRzoKLQkJaWYgKHN0YXRlLT50 cGdfZW5hYmxlZCA9PSBvcF9zdGF0ZSkgewotCQkJcHJfZGVidWcoIlslZF0gTm8gY2hhbmdlIGlu IHN0YXRlLCB0cGdfZW5hYmxlZD0lZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRl eCwgb3Bfc3RhdGUpOwotCQkJcmMgPSAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKChzdGF0ZS0+cG93 ZXJfc3RhdGUgIT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgfHwKLQkJCSAgIChzdGF0ZS0+Y29u dHJvbGxlcl9zdGF0ZSAhPSBEU0lfQ1RSTF9FTkdJTkVfT04pKSB7Ci0JCQlwcl9kZWJ1ZygiWyVk XVN0YXRlIGVycm9yOiBvcD0lZDogJWQsICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxs X2luZGV4LAotCQkJICAgICAgIG9wLAotCQkJICAgICAgIHN0YXRlLT5wb3dlcl9zdGF0ZSwKLQkJ CSAgICAgICBzdGF0ZS0+Y29udHJvbGxlcl9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0K LQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9QSFlfU1dfUkVTRVQ6Ci0JCWlmIChzdGF0ZS0+ cG93ZXJfc3RhdGUgIT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgewotCQkJcHJfZGVidWcoIlsl ZF1TdGF0ZSBlcnJvcjogb3A9JWQ6ICVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2lu ZGV4LCBvcCwgc3RhdGUtPnBvd2VyX3N0YXRlKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCQli cmVhazsKLQljYXNlIERTSV9DVFJMX09QX0FTWU5DX1RJTUlORzoKLQkJaWYgKHN0YXRlLT52aWRf ZW5naW5lX3N0YXRlICE9IG9wX3N0YXRlKSB7Ci0JCQlwcl9lcnIoIlslZF0gVW5leHBlY3RlZCBl bmdpbmUgc3RhdGUgdmlkX3N0YXRlPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2lu ZGV4LCBvcF9zdGF0ZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVs dDoKLQkJcmMgPSAtRU5PVFNVUFA7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByYzsKLX0KLQot c3RhdGljIHZvaWQgZHNpX2N0cmxfdXBkYXRlX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmwsCi0JCQkJICBlbnVtIGRzaV9jdHJsX2RyaXZlcl9vcHMgb3AsCi0JCQkJICB1MzIgb3Bfc3Rh dGUpCi17Ci0Jc3RydWN0IGRzaV9jdHJsX3N0YXRlX2luZm8gKnN0YXRlID0gJmRzaV9jdHJsLT5j dXJyZW50X3N0YXRlOwotCi0Jc3dpdGNoIChvcCkgewotCWNhc2UgRFNJX0NUUkxfT1BfUE9XRVJf U1RBVEVfQ0hBTkdFOgotCQlzdGF0ZS0+cG93ZXJfc3RhdGUgPSBvcF9zdGF0ZTsKLQkJYnJlYWs7 Ci0JY2FzZSBEU0lfQ1RSTF9PUF9DTURfRU5HSU5FOgotCQlzdGF0ZS0+Y21kX2VuZ2luZV9zdGF0 ZSA9IG9wX3N0YXRlOwotCQlicmVhazsKLQljYXNlIERTSV9DVFJMX09QX1ZJRF9FTkdJTkU6Ci0J CXN0YXRlLT52aWRfZW5naW5lX3N0YXRlID0gb3Bfc3RhdGU7Ci0JCWJyZWFrOwotCWNhc2UgRFNJ X0NUUkxfT1BfSE9TVF9FTkdJTkU6Ci0JCXN0YXRlLT5jb250cm9sbGVyX3N0YXRlID0gb3Bfc3Rh dGU7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfT1BfSE9TVF9JTklUOgotCQlzdGF0ZS0+aG9z dF9pbml0aWFsaXplZCA9IChvcF9zdGF0ZSA9PSAxKSA/IHRydWUgOiBmYWxzZTsKLQkJYnJlYWs7 Ci0JY2FzZSBEU0lfQ1RSTF9PUF9UUEc6Ci0JCXN0YXRlLT50cGdfZW5hYmxlZCA9IChvcF9zdGF0 ZSA9PSAxKSA/IHRydWUgOiBmYWxzZTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQ1RSTF9PUF9DTURf VFg6Ci0JY2FzZSBEU0lfQ1RSTF9PUF9QSFlfU1dfUkVTRVQ6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7 Ci0JfQotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2luaXRfcmVnbWFwKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCi0JCQkJc3RydWN0IGRzaV9jdHJsICpjdHJsKQotewotCWludCByYyA9 IDA7Ci0Jdm9pZCBfX2lvbWVtICpwdHI7Ci0KLQlwdHIgPSBtc21faW9yZW1hcChwZGV2LCAiZHNp X2N0cmwiLCBjdHJsLT5uYW1lKTsKLQlpZiAoSVNfRVJSKHB0cikpIHsKLQkJcmMgPSBQVFJfRVJS KHB0cik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQljdHJsLT5ody5iYXNlID0gcHRyOwotCXByX2Rl YnVnKCJbJXNdIG1hcCBkc2lfY3RybCByZWdpc3RlcnMgdG8gJXBcbiIsIGN0cmwtPm5hbWUsCi0J CSBjdHJsLT5ody5iYXNlKTsKLQotCXN3aXRjaCAoY3RybC0+dmVyc2lvbikgewotCWNhc2UgRFNJ X0NUUkxfVkVSU0lPTl8xXzQ6Ci0JY2FzZSBEU0lfQ1RSTF9WRVJTSU9OXzJfMDoKLQkJcHRyID0g bXNtX2lvcmVtYXAocGRldiwgIm1tc3NfbWlzYyIsIGN0cmwtPm5hbWUpOwotCQlpZiAoSVNfRVJS KHB0cikpIHsKLQkJCXByX2VycigibW1zc19taXNjIGJhc2UgYWRkcmVzcyBub3QgZm91bmQgZm9y IFslc11cbiIsCi0JCQkJCWN0cmwtPm5hbWUpOwotCQkJcmMgPSBQVFJfRVJSKHB0cik7Ci0JCQly ZXR1cm4gcmM7Ci0JCX0KLQkJY3RybC0+aHcubW1zc19taXNjX2Jhc2UgPSBwdHI7Ci0JCWN0cmwt Pmh3LmRpc3BfY2NfYmFzZSA9IE5VTEw7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX0NUUkxfVkVSU0lP Tl8yXzI6Ci0JCXB0ciA9IG1zbV9pb3JlbWFwKHBkZXYsICJkaXNwX2NjX2Jhc2UiLCBjdHJsLT5u YW1lKTsKLQkJaWYgKElTX0VSUihwdHIpKSB7Ci0JCQlwcl9lcnIoImRpc3BfY2MgYmFzZSBhZGRy ZXNzIG5vdCBmb3VuZCBmb3IgWyVzXVxuIiwKLQkJCQkJY3RybC0+bmFtZSk7Ci0JCQlyYyA9IFBU Ul9FUlIocHRyKTsKLQkJCXJldHVybiByYzsKLQkJfQotCQljdHJsLT5ody5kaXNwX2NjX2Jhc2Ug PSBwdHI7Ci0JCWN0cmwtPmh3Lm1tc3NfbWlzY19iYXNlID0gTlVMTDsKLQkJYnJlYWs7Ci0JZGVm YXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9j dHJsX2Nsb2Nrc19kZWluaXQoc3RydWN0IGRzaV9jdHJsICpjdHJsKQotewotCXN0cnVjdCBkc2lf Y29yZV9jbGtfaW5mbyAqY29yZSA9ICZjdHJsLT5jbGtfaW5mby5jb3JlX2Nsa3M7Ci0Jc3RydWN0 IGRzaV9saW5rX2Nsa19pbmZvICpsaW5rID0gJmN0cmwtPmNsa19pbmZvLmxpbmtfY2xrczsKLQlz dHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqcmNnID0gJmN0cmwtPmNsa19pbmZvLnJjZ19jbGtzOwot Ci0JaWYgKGNvcmUtPm1kcF9jb3JlX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZjdHJsLT5wZGV2LT5k ZXYsIGNvcmUtPm1kcF9jb3JlX2Nsayk7Ci0JaWYgKGNvcmUtPmlmYWNlX2NsaykKLQkJZGV2bV9j bGtfcHV0KCZjdHJsLT5wZGV2LT5kZXYsIGNvcmUtPmlmYWNlX2Nsayk7Ci0JaWYgKGNvcmUtPmNv cmVfbW1zc19jbGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBjb3JlLT5jb3Jl X21tc3NfY2xrKTsKLQlpZiAoY29yZS0+YnVzX2NsaykKLQkJZGV2bV9jbGtfcHV0KCZjdHJsLT5w ZGV2LT5kZXYsIGNvcmUtPmJ1c19jbGspOwotCWlmIChjb3JlLT5tbm9jX2NsaykKLQkJZGV2bV9j bGtfcHV0KCZjdHJsLT5wZGV2LT5kZXYsIGNvcmUtPm1ub2NfY2xrKTsKLQotCW1lbXNldChjb3Jl LCAweDAsIHNpemVvZigqY29yZSkpOwotCi0JaWYgKGxpbmstPmJ5dGVfY2xrKQotCQlkZXZtX2Ns a19wdXQoJmN0cmwtPnBkZXYtPmRldiwgbGluay0+Ynl0ZV9jbGspOwotCWlmIChsaW5rLT5waXhl bF9jbGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCBsaW5rLT5waXhlbF9jbGsp OwotCWlmIChsaW5rLT5lc2NfY2xrKQotCQlkZXZtX2Nsa19wdXQoJmN0cmwtPnBkZXYtPmRldiwg bGluay0+ZXNjX2Nsayk7Ci0JaWYgKGxpbmstPmJ5dGVfaW50Zl9jbGspCi0JCWRldm1fY2xrX3B1 dCgmY3RybC0+cGRldi0+ZGV2LCBsaW5rLT5ieXRlX2ludGZfY2xrKTsKLQotCW1lbXNldChsaW5r LCAweDAsIHNpemVvZigqbGluaykpOwotCi0JaWYgKHJjZy0+Ynl0ZV9jbGspCi0JCWRldm1fY2xr X3B1dCgmY3RybC0+cGRldi0+ZGV2LCByY2ctPmJ5dGVfY2xrKTsKLQlpZiAocmNnLT5waXhlbF9j bGspCi0JCWRldm1fY2xrX3B1dCgmY3RybC0+cGRldi0+ZGV2LCByY2ctPnBpeGVsX2Nsayk7Ci0K LQltZW1zZXQocmNnLCAweDAsIHNpemVvZigqcmNnKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBkc2lfY3RybF9jbG9ja3NfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 LAotCQkJCXN0cnVjdCBkc2lfY3RybCAqY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBk c2lfY29yZV9jbGtfaW5mbyAqY29yZSA9ICZjdHJsLT5jbGtfaW5mby5jb3JlX2Nsa3M7Ci0Jc3Ry dWN0IGRzaV9saW5rX2Nsa19pbmZvICpsaW5rID0gJmN0cmwtPmNsa19pbmZvLmxpbmtfY2xrczsK LQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqcmNnID0gJmN0cmwtPmNsa19pbmZvLnJjZ19jbGtz OwotCi0JY29yZS0+bWRwX2NvcmVfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJtZHBf Y29yZV9jbGsiKTsKLQlpZiAoSVNfRVJSKGNvcmUtPm1kcF9jb3JlX2NsaykpIHsKLQkJY29yZS0+ bWRwX2NvcmVfY2xrID0gTlVMTDsKLQkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgbWRwX2NvcmVf Y2xrLCByYz0lZFxuIiwgcmMpOwotCX0KLQotCWNvcmUtPmlmYWNlX2NsayA9IGRldm1fY2xrX2dl dCgmcGRldi0+ZGV2LCAiaWZhY2VfY2xrIik7Ci0JaWYgKElTX0VSUihjb3JlLT5pZmFjZV9jbGsp KSB7Ci0JCWNvcmUtPmlmYWNlX2NsayA9IE5VTEw7Ci0JCXByX2RlYnVnKCJmYWlsZWQgdG8gZ2V0 IGlmYWNlX2NsaywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQljb3JlLT5jb3JlX21tc3NfY2xrID0g ZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJjb3JlX21tc3NfY2xrIik7Ci0JaWYgKElTX0VSUihj b3JlLT5jb3JlX21tc3NfY2xrKSkgewotCQljb3JlLT5jb3JlX21tc3NfY2xrID0gTlVMTDsKLQkJ cHJfZGVidWcoImZhaWxlZCB0byBnZXQgY29yZV9tbXNzX2NsaywgcmM9JWRcbiIsIHJjKTsKLQl9 Ci0KLQljb3JlLT5idXNfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJidXNfY2xrIik7 Ci0JaWYgKElTX0VSUihjb3JlLT5idXNfY2xrKSkgewotCQljb3JlLT5idXNfY2xrID0gTlVMTDsK LQkJcHJfZGVidWcoImZhaWxlZCB0byBnZXQgYnVzX2NsaywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0K LQljb3JlLT5tbm9jX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAibW5vY19jbGsiKTsK LQlpZiAoSVNfRVJSKGNvcmUtPm1ub2NfY2xrKSkgewotCQljb3JlLT5tbm9jX2NsayA9IE5VTEw7 Ci0JCXByX2RlYnVnKCJjYW4ndCBnZXQgbW5vYyBjbG9jaywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0K LQlsaW5rLT5ieXRlX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiYnl0ZV9jbGsiKTsK LQlpZiAoSVNfRVJSKGxpbmstPmJ5dGVfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIobGluay0+Ynl0 ZV9jbGspOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYnl0ZV9jbGssIHJjPSVkXG4iLCByYyk7 Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlsaW5rLT5waXhlbF9jbGsgPSBkZXZtX2Nsa19nZXQoJnBk ZXYtPmRldiwgInBpeGVsX2NsayIpOwotCWlmIChJU19FUlIobGluay0+cGl4ZWxfY2xrKSkgewot CQlyYyA9IFBUUl9FUlIobGluay0+cGl4ZWxfY2xrKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0 IHBpeGVsX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBmYWlsOwotCX0KLQotCWxpbmstPmVz Y19jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImVzY19jbGsiKTsKLQlpZiAoSVNfRVJS KGxpbmstPmVzY19jbGspKSB7Ci0JCXJjID0gUFRSX0VSUihsaW5rLT5lc2NfY2xrKTsKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gZ2V0IGVzY19jbGssIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbDsK LQl9Ci0KLQlsaW5rLT5ieXRlX2ludGZfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJi eXRlX2ludGZfY2xrIik7Ci0JaWYgKElTX0VSUihsaW5rLT5ieXRlX2ludGZfY2xrKSkgewotCQls aW5rLT5ieXRlX2ludGZfY2xrID0gTlVMTDsKLQkJcHJfZGVidWcoImNhbid0IGZpbmQgYnl0ZSBp bnRmIGNsaywgcmM9JWRcbiIsIHJjKTsKLQl9Ci0KLQlyY2ctPmJ5dGVfY2xrID0gZGV2bV9jbGtf Z2V0KCZwZGV2LT5kZXYsICJieXRlX2Nsa19yY2ciKTsKLQlpZiAoSVNfRVJSKHJjZy0+Ynl0ZV9j bGspKSB7Ci0JCXJjID0gUFRSX0VSUihyY2ctPmJ5dGVfY2xrKTsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gZ2V0IGJ5dGVfY2xrX3JjZywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBmYWlsOwotCX0KLQot CXJjZy0+cGl4ZWxfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwaXhlbF9jbGtfcmNn Iik7Ci0JaWYgKElTX0VSUihyY2ctPnBpeGVsX2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKHJjZy0+ cGl4ZWxfY2xrKTsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBpeGVsX2Nsa19yY2csIHJjPSVk XG4iLCByYyk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLWZhaWw6Ci0JZHNpX2N0 cmxfY2xvY2tzX2RlaW5pdChjdHJsKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNp X2N0cmxfc3VwcGxpZXNfZGVpbml0KHN0cnVjdCBkc2lfY3RybCAqY3RybCkKLXsKLQlpbnQgaSA9 IDA7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzOwotCi0J cmVncyA9ICZjdHJsLT5wd3JfaW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5j b3VudDsgaSsrKSB7Ci0JCWlmICghcmVncy0+dnJlZ3NbaV0udnJlZykKLQkJCXByX2VycigidnJl ZyBpcyBOVUxMLCBzaG91bGQgbm90IHJlYWNoIGhlcmVcbiIpOwotCQllbHNlCi0JCQlkZXZtX3Jl Z3VsYXRvcl9wdXQocmVncy0+dnJlZ3NbaV0udnJlZyk7Ci0JfQotCi0JcmVncyA9ICZjdHJsLT5w d3JfaW5mby5ob3N0X3B3cjsKLQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewot CQlpZiAoIXJlZ3MtPnZyZWdzW2ldLnZyZWcpCi0JCQlwcl9lcnIoInZyZWcgaXMgTlVMTCwgc2hv dWxkIG5vdCByZWFjaCBoZXJlXG4iKTsKLQkJZWxzZQotCQkJZGV2bV9yZWd1bGF0b3JfcHV0KHJl Z3MtPnZyZWdzW2ldLnZyZWcpOwotCX0KLQotCWlmICghY3RybC0+cHdyX2luZm8uaG9zdF9wd3Iu dnJlZ3MpIHsKLQkJZGV2bV9rZnJlZSgmY3RybC0+cGRldi0+ZGV2LCBjdHJsLT5wd3JfaW5mby5o b3N0X3B3ci52cmVncyk7Ci0JCWN0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLnZyZWdzID0gTlVMTDsK LQkJY3RybC0+cHdyX2luZm8uaG9zdF9wd3IuY291bnQgPSAwOwotCX0KLQotCWlmICghY3RybC0+ cHdyX2luZm8uZGlnaXRhbC52cmVncykgewotCQlkZXZtX2tmcmVlKCZjdHJsLT5wZGV2LT5kZXYs IGN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MpOwotCQljdHJsLT5wd3JfaW5mby5kaWdpdGFs LnZyZWdzID0gTlVMTDsKLQkJY3RybC0+cHdyX2luZm8uZGlnaXRhbC5jb3VudCA9IDA7Ci0JfQot Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX3N1cHBsaWVzX2luaXQoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgIHN0cnVjdCBkc2lfY3RybCAqY3RybCkK LXsKLQlpbnQgcmMgPSAwOwotCWludCBpID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZv ICpyZWdzOwotCXN0cnVjdCByZWd1bGF0b3IgKnZyZWcgPSBOVUxMOwotCi0JcmMgPSBkc2lfcHdy X2dldF9kdF92cmVnX2RhdGEoJnBkZXYtPmRldiwKLQkJCQkJICAmY3RybC0+cHdyX2luZm8uZGln aXRhbCwKLQkJCQkJICAicWNvbSxjb3JlLXN1cHBseS1lbnRyaWVzIik7Ci0JaWYgKHJjKQotCQlw cl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBkaWdpdGFsIHN1cHBseSwgcmMgPSAlZFxuIiwgcmMpOwot Ci0JcmMgPSBkc2lfcHdyX2dldF9kdF92cmVnX2RhdGEoJnBkZXYtPmRldiwKLQkJCQkJICAmY3Ry bC0+cHdyX2luZm8uaG9zdF9wd3IsCi0JCQkJCSAgInFjb20sY3RybC1zdXBwbHktZW50cmllcyIp OwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgaG9zdCBwb3dlciBzdXBwbGll cywgcmMgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX2RpZ2l0YWw7Ci0JfQotCi0JcmVncyA9 ICZjdHJsLT5wd3JfaW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsg aSsrKSB7Ci0JCXZyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgcmVncy0+dnJl Z3NbaV0udnJlZ19uYW1lKTsKLQkJaWYgKElTX0VSUih2cmVnKSkgewotCQkJcHJfZXJyKCJmYWls ZWQgdG8gZ2V0ICVzIHJlZ3VsYXRvclxuIiwKLQkJCSAgICAgICByZWdzLT52cmVnc1tpXS52cmVn X25hbWUpOwotCQkJcmMgPSBQVFJfRVJSKHZyZWcpOwotCQkJZ290byBlcnJvcl9ob3N0X3B3cjsK LQkJfQotCQlyZWdzLT52cmVnc1tpXS52cmVnID0gdnJlZzsKLQl9Ci0KLQlyZWdzID0gJmN0cmwt PnB3cl9pbmZvLmhvc3RfcHdyOwotCWZvciAoaSA9IDA7IGkgPCByZWdzLT5jb3VudDsgaSsrKSB7 Ci0JCXZyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgcmVncy0+dnJlZ3NbaV0u dnJlZ19uYW1lKTsKLQkJaWYgKElTX0VSUih2cmVnKSkgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8g Z2V0ICVzIHJlZ3VsYXRvclxuIiwKLQkJCSAgICAgICByZWdzLT52cmVnc1tpXS52cmVnX25hbWUp OwotCQkJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQotCQkJCWRldm1fcmVndWxhdG9yX3B1dChyZWdz LT52cmVnc1tpXS52cmVnKTsKLQkJCXJjID0gUFRSX0VSUih2cmVnKTsKLQkJCWdvdG8gZXJyb3Jf ZGlnaXRhbF9wdXQ7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0J cmV0dXJuIHJjOwotCi1lcnJvcl9kaWdpdGFsX3B1dDoKLQlyZWdzID0gJmN0cmwtPnB3cl9pbmZv LmRpZ2l0YWw7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspCi0JCWRldm1fcmVn dWxhdG9yX3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLWVycm9yX2hvc3RfcHdyOgotCWRldm1f a2ZyZWUoJnBkZXYtPmRldiwgY3RybC0+cHdyX2luZm8uaG9zdF9wd3IudnJlZ3MpOwotCWN0cmwt PnB3cl9pbmZvLmhvc3RfcHdyLnZyZWdzID0gTlVMTDsKLQljdHJsLT5wd3JfaW5mby5ob3N0X3B3 ci5jb3VudCA9IDA7Ci1lcnJvcl9kaWdpdGFsOgotCWlmIChjdHJsLT5wd3JfaW5mby5kaWdpdGFs LnZyZWdzKQotCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwu dnJlZ3MpOwotCWN0cmwtPnB3cl9pbmZvLmRpZ2l0YWwudnJlZ3MgPSBOVUxMOwotCWN0cmwtPnB3 cl9pbmZvLmRpZ2l0YWwuY291bnQgPSAwOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfY3RybF9heGlfYnVzX2NsaWVudF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs Ci0JCQkJCXN0cnVjdCBkc2lfY3RybCAqY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotI2lmZGVmIENP TkZJR19RQ09NX0JVU19TQ0FMSU5HCi0Jc3RydWN0IGRzaV9jdHJsX2J1c19zY2FsZV9pbmZvICpi dXMgPSAmY3RybC0+YXhpX2J1c19pbmZvOwotCi0JYnVzLT5idXNfc2NhbGVfdGFibGUgPSBtc21f YnVzX2NsX2dldF9wZGF0YShwZGV2KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoYnVzLT5idXNfc2Nh bGVfdGFibGUpKSB7Ci0JCXJjID0gUFRSX0VSUihidXMtPmJ1c19zY2FsZV90YWJsZSk7Ci0JCXBy X2RlYnVnKCJtc21fYnVzX2NsX2dldF9wZGF0YSgpIGZhaWxlZCwgcmMgPSAlZFxuIiwgcmMpOwot CQlidXMtPmJ1c19zY2FsZV90YWJsZSA9IE5VTEw7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlidXMt PmJ1c19oYW5kbGUgPSBtc21fYnVzX3NjYWxlX3JlZ2lzdGVyX2NsaWVudChidXMtPmJ1c19zY2Fs ZV90YWJsZSk7Ci0JaWYgKCFidXMtPmJ1c19oYW5kbGUpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlw cl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBheGkgYnVzIGNsaWVudFxuIik7Ci0JfQotI2VuZGlm Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX2F4aV9idXNfY2xpZW50X2Rl aW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwpCi17Ci0jaWZkZWYgQ09ORklHX1FDT01fQlVTX1ND QUxJTkcKLQlzdHJ1Y3QgZHNpX2N0cmxfYnVzX3NjYWxlX2luZm8gKmJ1cyA9ICZjdHJsLT5heGlf YnVzX2luZm87Ci0KLQlpZiAoYnVzLT5idXNfaGFuZGxlKSB7Ci0JCW1zbV9idXNfc2NhbGVfdW5y ZWdpc3Rlcl9jbGllbnQoYnVzLT5idXNfaGFuZGxlKTsKLQotCQlidXMtPmJ1c19oYW5kbGUgPSAw OwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX3ZhbGlk YXRlX3BhbmVsX2luZm8oc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJCQkJc3RydWN0IGRz aV9ob3N0X2NvbmZpZyAqY29uZmlnKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9ob3N0 X2NvbW1vbl9jZmcgKmhvc3RfY2ZnID0gJmNvbmZpZy0+Y29tbW9uX2NvbmZpZzsKLQotCWlmIChj b25maWctPnBhbmVsX21vZGUgPj0gRFNJX09QX01PREVfTUFYKSB7Ci0JCXByX2VycigiSW52YWxp ZCBkc2kgb3BlcmF0aW9uIG1vZGUgKCVkKVxuIiwgY29uZmlnLT5wYW5lbF9tb2RlKTsKLQkJcmMg PSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoKGhvc3RfY2ZnLT5kYXRhX2xhbmVz ICYgKERTSV9DTE9DS19MQU5FIC0gMSkpID09IDApIHsKLQkJcHJfZXJyKCJObyBkYXRhIGxhbmVz IGFyZSBlbmFibGVkXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci1lcnI6 Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9jdHJsX3VwZGF0ZV9saW5rX2ZyZXFz KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0Jc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29u ZmlnLCB2b2lkICpjbGtfaGFuZGxlKQotewotCWludCByYyA9IDA7Ci0JdTMyIG51bV9vZl9sYW5l cyA9IDA7Ci0JdTMyIGJwcCA9IDM7Ci0JdTY0IGhfcGVyaW9kLCB2X3BlcmlvZCwgYml0X3JhdGUs IHBjbGtfcmF0ZSwgYml0X3JhdGVfcGVyX2xhbmUsCi0JICAgIGJ5dGVfY2xrX3JhdGU7Ci0Jc3Ry dWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmhvc3RfY2ZnID0gJmNvbmZpZy0+Y29tbW9uX2NvbmZp ZzsKLQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqdGltaW5nID0gJmNvbmZpZy0+dmlkZW9fdGltaW5n OwotCi0JaWYgKGhvc3RfY2ZnLT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFORV8wKQotCQludW1f b2ZfbGFuZXMrKzsKLQlpZiAoaG9zdF9jZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzEp Ci0JCW51bV9vZl9sYW5lcysrOwotCWlmIChob3N0X2NmZy0+ZGF0YV9sYW5lcyAmIERTSV9EQVRB X0xBTkVfMikKLQkJbnVtX29mX2xhbmVzKys7Ci0JaWYgKGhvc3RfY2ZnLT5kYXRhX2xhbmVzICYg RFNJX0RBVEFfTEFORV8zKQotCQludW1fb2ZfbGFuZXMrKzsKLQotCWhfcGVyaW9kID0gRFNJX0hf VE9UQUxfRFNDKHRpbWluZyk7Ci0Jdl9wZXJpb2QgPSBEU0lfVl9UT1RBTCh0aW1pbmcpOwotCi0J Yml0X3JhdGUgPSBoX3BlcmlvZCAqIHZfcGVyaW9kICogdGltaW5nLT5yZWZyZXNoX3JhdGUgKiBi cHAgKiA4OwotCWJpdF9yYXRlX3Blcl9sYW5lID0gYml0X3JhdGU7Ci0JZG9fZGl2KGJpdF9yYXRl X3Blcl9sYW5lLCBudW1fb2ZfbGFuZXMpOwotCXBjbGtfcmF0ZSA9IGJpdF9yYXRlOwotCWRvX2Rp dihwY2xrX3JhdGUsICg4ICogYnBwKSk7Ci0JYnl0ZV9jbGtfcmF0ZSA9IGJpdF9yYXRlX3Blcl9s YW5lOwotCWRvX2RpdihieXRlX2Nsa19yYXRlLCA4KTsKLQlwcl9kZWJ1ZygiYml0X2Nsa19yYXRl ID0gJWxsdSwgYml0X2Nsa19yYXRlX3Blcl9sYW5lID0gJWxsdVxuIiwKLQkJIGJpdF9yYXRlLCBi aXRfcmF0ZV9wZXJfbGFuZSk7Ci0JcHJfZGVidWcoImJ5dGVfY2xrX3JhdGUgPSAlbGx1LCBwY2xr X3JhdGUgPSAlbGx1XG4iLAotCQkgIGJ5dGVfY2xrX3JhdGUsIHBjbGtfcmF0ZSk7Ci0KLQlkc2lf Y3RybC0+Y2xrX2ZyZXEuYnl0ZV9jbGtfcmF0ZSA9IGJ5dGVfY2xrX3JhdGU7Ci0JZHNpX2N0cmwt PmNsa19mcmVxLnBpeF9jbGtfcmF0ZSA9IHBjbGtfcmF0ZTsKLQlkc2lfY3RybC0+Y2xrX2ZyZXEu ZXNjX2Nsa19yYXRlID0gY29uZmlnLT5lc2NfY2xrX3JhdGVfaHo7Ci0KLQlyYyA9IGRzaV9jbGtf c2V0X2xpbmtfZnJlcXVlbmNpZXMoY2xrX2hhbmRsZSwgZHNpX2N0cmwtPmNsa19mcmVxLAotCQkJ CQlkc2lfY3RybC0+Y2VsbF9pbmRleCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIkZhaWxlZCB0byB1 cGRhdGUgbGluayBmcmVxdWVuY2llc1xuIik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX2N0cmxfZW5hYmxlX3N1cHBsaWVzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJv b2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmICghZHNp X2N0cmwtPmN1cnJlbnRfc3RhdGUuaG9zdF9pbml0aWFsaXplZCkgewotCQkJcmMgPSBkc2lfcHdy X2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJJmRzaV9jdHJsLT5wd3JfaW5mby5ob3N0X3B3ciwgdHJ1 ZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgaG9zdCBwb3dl ciByZWdzXG4iKTsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0KLQkJcmMgPSBkc2lfcHdy X2VuYWJsZV9yZWd1bGF0b3IoJmRzaV9jdHJsLT5wd3JfaW5mby5kaWdpdGFsLAotCQkJCQkgICAg ICB0cnVlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgZ2RzYywg cmM9JWRcbiIsIHJjKTsKLQkJCSh2b2lkKWRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigKLQkJCQkJ CSZkc2lfY3RybC0+cHdyX2luZm8uaG9zdF9wd3IsCi0JCQkJCQlmYWxzZQotCQkJCQkJKTsKLQkJ CWdvdG8gZXJyb3I7Ci0JCX0KLQl9IGVsc2UgewotCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3JlZ3Vs YXRvcigmZHNpX2N0cmwtPnB3cl9pbmZvLmRpZ2l0YWwsCi0JCQkJCSAgICAgIGZhbHNlKTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBkaXNhYmxlIGdkc2MsIHJjPSVkXG4iLCBy Yyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKCFkc2lfY3RybC0+Y3VycmVudF9zdGF0 ZS5ob3N0X2luaXRpYWxpemVkKSB7Ci0JCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigK LQkJCQkmZHNpX2N0cmwtPnB3cl9pbmZvLmhvc3RfcHdyLCBmYWxzZSk7Ci0JCQlpZiAocmMpIHsK LQkJCQlwcl9lcnIoImZhaWxlZCB0byBkaXNhYmxlIGhvc3QgcG93ZXIgcmVnc1xuIik7Ci0JCQkJ Z290byBlcnJvcjsKLQkJCX0KLQkJfQotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfY3RybF9jb3B5X2FuZF9wYWRfY21kKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmwsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0ICpwYWNrZXQsCi0JCQkJ ICAgICB1OCAqKmJ1ZmZlciwKLQkJCQkgICAgIHUzMiAqc2l6ZSkKLXsKLQlpbnQgcmMgPSAwOwot CXU4ICpidWYgPSBOVUxMOwotCXUzMiBsZW47Ci0KLQlsZW4gPSBwYWNrZXQtPnNpemU7Ci0JbGVu ICs9IDB4MzsgbGVuICY9IH4weDAzOyAvKiBBbGlnbiB0byAzMiBiaXRzICovCi0KLQlidWYgPSBk ZXZtX2t6YWxsb2MoJmRzaV9jdHJsLT5wZGV2LT5kZXYsIGxlbiAqIHNpemVvZih1OCksIEdGUF9L RVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIE1TTSBzcGVjaWZp YyBjb21tYW5kIGZvcm1hdCBpbiBtZW1vcnkgKi8KLQlidWZbMF0gPSBwYWNrZXQtPmhlYWRlclsx XTsKLQlidWZbMV0gPSBwYWNrZXQtPmhlYWRlclsyXTsKLQlidWZbMl0gPSBwYWNrZXQtPmhlYWRl clswXTsKLQlidWZbM10gPSBCSVQoNyk7Ci0JaWYgKHBhY2tldC0+cGF5bG9hZF9sZW5ndGggPiAw KQotCQlidWZbM10gfD0gQklUKDYpOwotCi0JLyogTG9uZyBwYWNrZXQgKi8KLQlpZiAocGFja2V0 LT5wYXlsb2FkICYmIHBhY2tldC0+cGF5bG9hZF9sZW5ndGgpCi0JCW1lbWNweShidWYgKyA0LCBw YWNrZXQtPnBheWxvYWQsIHBhY2tldC0+cGF5bG9hZF9sZW5ndGgpOwotCi0JLyogQXBwZW5kIDB4 ZmYgdG8gdGhlIGVuZCAqLwotCWlmIChwYWNrZXQtPnNpemUgPCBsZW4pCi0JCW1lbXNldChidWYg KyBwYWNrZXQtPnNpemUsIDB4ZmYsIGxlbiAtIHBhY2tldC0+c2l6ZSk7Ci0KLQkqYnVmZmVyID0g YnVmOwotCSpzaXplID0gbGVuOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBkc2lf Y3RybF93YWl0X2Zvcl92aWRlb19kb25lKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0J dTMyIHZfdG90YWwgPSAwLCB2X2JsYW5rID0gMCwgc2xlZXBfbXMgPSAwLCBmcHMgPSAwLCByZXQ7 Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8gKnRpbWluZzsKLQotCWlmIChkc2lfY3RybC0+aG9zdF9j b25maWcucGFuZWxfbW9kZSAhPSBEU0lfT1BfVklERU9fTU9ERSkKLQkJcmV0dXJuOwotCi0JZHNp X2N0cmwtPmh3Lm9wcy5jbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKCZkc2lfY3RybC0+aHcsCi0JCQkJ RFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORSk7Ci0KLQlkc2lfY3RybF9lbmFibGVfc3RhdHVzX2lu dGVycnVwdChkc2lfY3RybCwKLQkJCQlEU0lfU0lOVF9WSURFT19NT0RFX0ZSQU1FX0RPTkUsIE5V TEwpOwotCXJlaW5pdF9jb21wbGV0aW9uKCZkc2lfY3RybC0+aXJxX2luZm8udmlkX2ZyYW1lX2Rv bmUpOwotCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgKLQkJCSZkc2lfY3RybC0+ aXJxX2luZm8udmlkX2ZyYW1lX2RvbmUsCi0JCQltc2Vjc190b19qaWZmaWVzKERTSV9DVFJMX1RY X1RPX01TKSk7Ci0JaWYgKHJldCA8PSAwKQotCQlwcl9kZWJ1Zygid2FpdCBmb3IgdmlkZW8gZG9u ZSBmYWlsZWRcbiIpOwotCWRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3Ry bCwKLQkJCQlEU0lfU0lOVF9WSURFT19NT0RFX0ZSQU1FX0RPTkUpOwotCi0JdGltaW5nID0gJihk c2lfY3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nKTsKLQl2X3RvdGFsID0gdGltaW5nLT52 X3N5bmNfd2lkdGggKyB0aW1pbmctPnZfYmFja19wb3JjaCArCi0JCQl0aW1pbmctPnZfZnJvbnRf cG9yY2ggKyB0aW1pbmctPnZfYWN0aXZlOwotCXZfYmxhbmsgPSB0aW1pbmctPnZfc3luY193aWR0 aCArIHRpbWluZy0+dl9iYWNrX3BvcmNoOwotCWZwcyA9IHRpbWluZy0+cmVmcmVzaF9yYXRlOwot Ci0Jc2xlZXBfbXMgPSBDRUlMKCh2X2JsYW5rICogMTAwMCksICh2X3RvdGFsICogZnBzKSkgKyAx OwotCXVkZWxheShzbGVlcF9tcyAqIDEwMDApOwotfQotCi1zdGF0aWMgaW50IGRzaV9tZXNzYWdl X3R4KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkgIGNvbnN0IHN0cnVjdCBtaXBpX2Rz aV9tc2cgKm1zZywKLQkJCSAgdTMyIGZsYWdzKQotewotCWludCByYyA9IDAsIHJldCA9IDA7Ci0J c3RydWN0IG1pcGlfZHNpX3BhY2tldCBwYWNrZXQ7Ci0Jc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFf Zmlmb19pbmZvIGNtZDsKLQlzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9pbmZvIGNtZF9tZW07Ci0J dTMyIGh3X2ZsYWdzID0gMDsKLQl1MzIgbGVuZ3RoID0gMDsKLQl1OCAqYnVmZmVyID0gTlVMTDsK LQl1MzIgY250ID0gMDsKLQl1OCAqY21kYnVmOwotCi0JcmMgPSBtaXBpX2RzaV9jcmVhdGVfcGFj a2V0KCZwYWNrZXQsIG1zZyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGNyZWF0 ZSBtZXNzYWdlIHBhY2tldCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlp ZiAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZKSB7Ci0JCXJjID0gZHNpX2N0cmxf Y29weV9hbmRfcGFkX2NtZChkc2lfY3RybCwKLQkJCQkmcGFja2V0LAotCQkJCSZidWZmZXIsCi0J CQkJJmxlbmd0aCk7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGNv cHkgbWVzc2FnZSwgcmM9JWRcbiIsCi0JCQkJCWRzaV9jdHJsLT5uYW1lLCByYyk7Ci0JCQlnb3Rv IGVycm9yOwotCQl9Ci0KLQkJY21kX21lbS5vZmZzZXQgPSBkc2lfY3RybC0+Y21kX2J1ZmZlcl9p b3ZhOwotCQljbWRfbWVtLmxlbmd0aCA9IGxlbmd0aDsKLQkJY21kX21lbS5lbl9icm9hZGNhc3Qg PSAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfQlJPQURDQVNUKSA/Ci0JCQl0cnVlIDogZmFsc2U7Ci0J CWNtZF9tZW0uaXNfbWFzdGVyID0gKGZsYWdzICYgRFNJX0NUUkxfQ01EX0JST0FEQ0FTVF9NQVNU RVIpID8KLQkJCXRydWUgOiBmYWxzZTsKLQkJY21kX21lbS51c2VfbHBtID0gKG1zZy0+ZmxhZ3Mg JiBNSVBJX0RTSV9NU0dfVVNFX0xQTSkgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCi0JCWNtZGJ1ZiA9 ICh1OCAqKShkc2lfY3RybC0+dmFkZHIpOwotCQlmb3IgKGNudCA9IDA7IGNudCA8IGxlbmd0aDsg Y250KyspCi0JCQljbWRidWZbY250XSA9IGJ1ZmZlcltjbnRdOwotCi0JfSBlbHNlIGlmIChmbGFn cyAmIERTSV9DVFJMX0NNRF9GSUZPX1NUT1JFKSB7Ci0JCXJjID0gZHNpX2N0cmxfY29weV9hbmRf cGFkX2NtZChkc2lfY3RybCwKLQkJCQkJICAgICAgICZwYWNrZXQsCi0JCQkJCSAgICAgICAmYnVm ZmVyLAotCQkJCQkgICAgICAgJmxlbmd0aCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBjb3B5IG1lc3NhZ2UsIHJjPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5u YW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWNtZC5jb21tYW5kID0gICh1MzIgKili dWZmZXI7Ci0JCWNtZC5zaXplID0gbGVuZ3RoOwotCQljbWQuZW5fYnJvYWRjYXN0ID0gKGZsYWdz ICYgRFNJX0NUUkxfQ01EX0JST0FEQ0FTVCkgPwotCQkJCSAgICAgdHJ1ZSA6IGZhbHNlOwotCQlj bWQuaXNfbWFzdGVyID0gKGZsYWdzICYgRFNJX0NUUkxfQ01EX0JST0FEQ0FTVF9NQVNURVIpID8K LQkJCQkgIHRydWUgOiBmYWxzZTsKLQkJY21kLnVzZV9scG0gPSAobXNnLT5mbGFncyAmIE1JUElf RFNJX01TR19VU0VfTFBNKSA/Ci0JCQkJICB0cnVlIDogZmFsc2U7Ci0JfQotCi0JaHdfZmxhZ3Mg fD0gKGZsYWdzICYgRFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdHRVIpID8KLQkJCURTSV9DVFJMX0hX X0NNRF9XQUlUX0ZPUl9UUklHR0VSIDogMDsKLQotCWlmIChmbGFncyAmIERTSV9DVFJMX0NNRF9E RUZFUl9UUklHR0VSKSB7Ci0JCWlmIChmbGFncyAmIERTSV9DVFJMX0NNRF9GRVRDSF9NRU1PUlkp IHsKLQkJCWRzaV9jdHJsLT5ody5vcHMua2lja29mZl9jb21tYW5kKCZkc2lfY3RybC0+aHcsCi0J CQkJCQkJJmNtZF9tZW0sCi0JCQkJCQkJaHdfZmxhZ3MpOwotCQl9IGVsc2UgaWYgKGZsYWdzICYg RFNJX0NUUkxfQ01EX0ZJRk9fU1RPUkUpIHsKLQkJCWRzaV9jdHJsLT5ody5vcHMua2lja29mZl9m aWZvX2NvbW1hbmQoJmRzaV9jdHJsLT5odywKLQkJCQkJCQkgICAgICAmY21kLAotCQkJCQkJCSAg ICAgIGh3X2ZsYWdzKTsKLQkJfQotCX0KLQotCWlmICghKGZsYWdzICYgRFNJX0NUUkxfQ01EX0RF RkVSX1RSSUdHRVIpKSB7Ci0JCWRzaV9jdHJsX3dhaXRfZm9yX3ZpZGVvX2RvbmUoZHNpX2N0cmwp OwotCQlkc2lfY3RybF9lbmFibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwKLQkJCQkJRFNJ X1NJTlRfQ01EX01PREVfRE1BX0RPTkUsIE5VTEwpOwotCQlyZWluaXRfY29tcGxldGlvbigmZHNp X2N0cmwtPmlycV9pbmZvLmNtZF9kbWFfZG9uZSk7Ci0KLQkJaWYgKGZsYWdzICYgRFNJX0NUUkxf Q01EX0ZFVENIX01FTU9SWSkgewotCQkJZHNpX2N0cmwtPmh3Lm9wcy5raWNrb2ZmX2NvbW1hbmQo JmRzaV9jdHJsLT5odywKLQkJCQkJCSAgICAgICZjbWRfbWVtLAotCQkJCQkJICAgICAgaHdfZmxh Z3MpOwotCQl9IGVsc2UgaWYgKGZsYWdzICYgRFNJX0NUUkxfQ01EX0ZJRk9fU1RPUkUpIHsKLQkJ CWRzaV9jdHJsLT5ody5vcHMua2lja29mZl9maWZvX2NvbW1hbmQoJmRzaV9jdHJsLT5odywKLQkJ CQkJCQkgICAgICAmY21kLAotCQkJCQkJCSAgICAgIGh3X2ZsYWdzKTsKLQkJfQotCi0JCXJldCA9 IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgKLQkJCQkmZHNpX2N0cmwtPmlycV9pbmZvLmNt ZF9kbWFfZG9uZSwKLQkJCQltc2Vjc190b19qaWZmaWVzKERTSV9DVFJMX1RYX1RPX01TKSk7Ci0K LQkJaWYgKHJldCA9PSAwKSB7Ci0JCQl1MzIgc3RhdHVzID0gMDsKLQkJCXUzMiBtYXNrID0gRFNJ X0NNRF9NT0RFX0RNQV9ET05FOwotCi0JCQlpZiAoc3RhdHVzICYgbWFzaykgewotCQkJCXN0YXR1 cyB8PSAoRFNJX0NNRF9NT0RFX0RNQV9ET05FIHwKLQkJCQkJCURTSV9CVEFfRE9ORSk7Ci0JCQkJ ZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9pbnRlcnJ1cHRfc3RhdHVzKAotCQkJCQkJCQkmZHNpX2N0 cmwtPmh3LAotCQkJCQkJCQlzdGF0dXMpOwotCQkJCWRzaV9jdHJsX2Rpc2FibGVfc3RhdHVzX2lu dGVycnVwdChkc2lfY3RybCwKLQkJCQkJCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FKTsKLQkJ CQljb21wbGV0ZV9hbGwoJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUpOwotCQkJCXBy X3dhcm4oImRtYV90eCBkb25lIGJ1dCBpcnEgbm90IHRyaWdnZXJlZFxuIik7Ci0JCQl9IGVsc2Ug ewotCQkJCXJjID0gLUVUSU1FRE9VVDsKLQkJCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRl cnJ1cHQoZHNpX2N0cmwsCi0JCQkJCQlEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSk7Ci0JCQkJ cHJfZXJyKCJbRFNJXyVkXUNvbW1hbmQgdHJhbnNmZXIgZmFpbGVkXG4iLAotCQkJCQkJZHNpX2N0 cmwtPmNlbGxfaW5kZXgpOwotCQkJfQotCQl9Ci0KLQkJZHNpX2N0cmwtPmh3Lm9wcy5yZXNldF9j bWRfZmlmbygmZHNpX2N0cmwtPmh3KTsKLQl9Ci1lcnJvcjoKLQlpZiAoYnVmZmVyKQotCQlkZXZt X2tmcmVlKCZkc2lfY3RybC0+cGRldi0+ZGV2LCBidWZmZXIpOwotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkc2lfc2V0X21heF9yZXR1cm5fc2l6ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKnJ4X21zZywKLQkJCQkgICB1 MzIgc2l6ZSkKLXsKLQlpbnQgcmMgPSAwOwotCXU4IHR4WzJdID0geyAodTgpKHNpemUgJiAweEZG KSwgKHU4KShzaXplID4+IDgpIH07Ci0Jc3RydWN0IG1pcGlfZHNpX21zZyBtc2cgPSB7Ci0JCS5j aGFubmVsID0gcnhfbXNnLT5jaGFubmVsLAotCQkudHlwZSA9IE1JUElfRFNJX1NFVF9NQVhJTVVN X1JFVFVSTl9QQUNLRVRfU0laRSwKLQkJLnR4X2xlbiA9IDIsCi0JCS50eF9idWYgPSB0eCwKLQl9 OwotCi0JcmMgPSBkc2lfbWVzc2FnZV90eChkc2lfY3RybCwgJm1zZywgMHgwKTsKLQlpZiAocmMp Ci0JCXByX2VycigiZmFpbGVkIHRvIHNlbmQgbWF4IHJldHVybiBzaXplIHBhY2tldCwgcmM9JWRc biIsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfbWVzc2FnZV9yeChz dHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNn ICptc2csCi0JCQkgIHUzMiBmbGFncykKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiByZF9wa3Rfc2l6 ZTsKLQl1MzIgdG90YWxfcmVhZF9sZW47Ci0JdTMyIGJ5dGVzX3JlYWQgPSAwLCB0b3RfYnl0ZXNf cmVhZCA9IDA7Ci0JdTMyIGN1cnJlbnRfcmVhZF9sZW47Ci0JYm9vbCBzaG9ydF9yZXNwID0gZmFs c2U7Ci0JYm9vbCByZWFkX2RvbmUgPSBmYWxzZTsKLQotCWlmIChtc2ctPnJ4X2xlbiA8PSAyKSB7 Ci0JCXNob3J0X3Jlc3AgPSB0cnVlOwotCQlyZF9wa3Rfc2l6ZSA9IG1zZy0+cnhfbGVuOwotCQl0 b3RhbF9yZWFkX2xlbiA9IDQ7Ci0JfSBlbHNlIHsKLQkJc2hvcnRfcmVzcCA9IGZhbHNlOwotCQlj dXJyZW50X3JlYWRfbGVuID0gMTA7Ci0JCWlmIChtc2ctPnJ4X2xlbiA8IGN1cnJlbnRfcmVhZF9s ZW4pCi0JCQlyZF9wa3Rfc2l6ZSA9IG1zZy0+cnhfbGVuOwotCQllbHNlCi0JCQlyZF9wa3Rfc2l6 ZSA9IGN1cnJlbnRfcmVhZF9sZW47Ci0KLQkJdG90YWxfcmVhZF9sZW4gPSBjdXJyZW50X3JlYWRf bGVuICsgNjsKLQl9Ci0KLQl3aGlsZSAoIXJlYWRfZG9uZSkgewotCQlyYyA9IGRzaV9zZXRfbWF4 X3JldHVybl9zaXplKGRzaV9jdHJsLCBtc2csIHJkX3BrdF9zaXplKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoIkZhaWxlZCB0byBzZXQgbWF4IHJldHVybiBwYWNrZXQgc2l6ZSwgcmM9JWRcbiIs Ci0JCQkgICAgICAgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXJjID0gZHNpX21lc3Nh Z2VfdHgoZHNpX2N0cmwsIG1zZywgZmxhZ3MpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiTWVz c2FnZSB0cmFuc21pc3Npb24gZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBlcnJvcjsK LQkJfQotCi0KLQkJdG90X2J5dGVzX3JlYWQgKz0gYnl0ZXNfcmVhZDsKLQkJaWYgKHNob3J0X3Jl c3ApCi0JCQlyZWFkX2RvbmUgPSB0cnVlOwotCQllbHNlIGlmIChtc2ctPnJ4X2xlbiA8PSB0b3Rf Ynl0ZXNfcmVhZCkKLQkJCXJlYWRfZG9uZSA9IHRydWU7Ci0JfQotZXJyb3I6Ci0JcmV0dXJuIHJj OwotfQotCi0KLXN0YXRpYyBpbnQgZHNpX2VuYWJsZV91bHBzKHN0cnVjdCBkc2lfY3RybCAqZHNp X2N0cmwpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgbGFuZXMgPSAwOwotCXUzMiB1bHBzX2xhbmVz OwotCi0JaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9DTURf TU9ERSkKLQkJbGFuZXMgPSBkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZy5kYXRh X2xhbmVzOwotCi0JcmMgPSBkc2lfY3RybC0+aHcub3BzLndhaXRfZm9yX2xhbmVfaWRsZSgmZHNp X2N0cmwtPmh3LCBsYW5lcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigibGFuZXMgbm90IGVudGVy aW5nIGlkbGUsIHNraXAgVUxQU1xuIik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlpZiAoIWRzaV9j dHJsLT5ody5vcHMudWxwc19vcHMudWxwc19yZXF1ZXN0IHx8Ci0JCQkhZHNpX2N0cmwtPmh3Lm9w cy51bHBzX29wcy51bHBzX2V4aXQpIHsKLQkJcHJfZGVidWcoIkRTSSBjb250cm9sbGVyIFVMUFMg b3BzIG5vdCBwcmVzZW50XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbGFuZXMgfD0gRFNJX0NM T0NLX0xBTkU7Ci0JZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29wcy51bHBzX3JlcXVlc3QoJmRzaV9j dHJsLT5odywgbGFuZXMpOwotCi0JdWxwc19sYW5lcyA9IGRzaV9jdHJsLT5ody5vcHMudWxwc19v cHMuZ2V0X2xhbmVzX2luX3VscHMoJmRzaV9jdHJsLT5odyk7Ci0KLQlpZiAoKGxhbmVzICYgdWxw c19sYW5lcykgIT0gbGFuZXMpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gZW50ZXIgVUxQUywgcmVx dWVzdD0weCV4LCBhY3R1YWw9MHgleFxuIiwKLQkJICAgICAgIGxhbmVzLCB1bHBzX2xhbmVzKTsK LQkJcmMgPSAtRUlPOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlz YWJsZV91bHBzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaW50IHJjID0gMDsKLQl1 MzIgdWxwc19sYW5lcywgbGFuZXMgPSAwOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9waHkw X2xuX2VycigmZHNpX2N0cmwtPmh3KTsKLQotCWlmICghZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29w cy51bHBzX3JlcXVlc3QgfHwKLQkJCSFkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLnVscHNfZXhp dCkgewotCQlwcl9kZWJ1ZygiRFNJIGNvbnRyb2xsZXIgVUxQUyBvcHMgbm90IHByZXNlbnRcbiIp OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21v ZGUgPT0gRFNJX09QX0NNRF9NT0RFKQotCQlsYW5lcyA9IGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5j b21tb25fY29uZmlnLmRhdGFfbGFuZXM7Ci0KLQlsYW5lcyB8PSBEU0lfQ0xPQ0tfTEFORTsKLQot CXVscHNfbGFuZXMgPSBkc2lfY3RybC0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91bHBz KCZkc2lfY3RybC0+aHcpOwotCi0JaWYgKChsYW5lcyAmIHVscHNfbGFuZXMpICE9IGxhbmVzKQot CQlwcl9lcnIoIk1pc21hdGNoIGJldHdlZW4gbGFuZXMgaW4gVUxQU1xuIik7Ci0KLQlsYW5lcyAm PSB1bHBzX2xhbmVzOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy51bHBzX29wcy51bHBzX2V4aXQoJmRz aV9jdHJsLT5odywgbGFuZXMpOwotCi0JdWxwc19sYW5lcyA9IGRzaV9jdHJsLT5ody5vcHMudWxw c19vcHMuZ2V0X2xhbmVzX2luX3VscHMoJmRzaV9jdHJsLT5odyk7Ci0JaWYgKHVscHNfbGFuZXMg JiBsYW5lcykgewotCQlwcl9lcnIoIkxhbmVzICgweCV4KSBzdHVjayBpbiBVTFBTXG4iLCB1bHBz X2xhbmVzKTsKLQkJcmMgPSAtRUlPOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGlu dCBkc2lfY3RybF9kcnZfc3RhdGVfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewot CWludCByYyA9IDA7Ci0JYm9vbCBzcGxhc2hfZW5hYmxlZCA9IGZhbHNlOwotCXN0cnVjdCBkc2lf Y3RybF9zdGF0ZV9pbmZvICpzdGF0ZSA9ICZkc2lfY3RybC0+Y3VycmVudF9zdGF0ZTsKLQotCWlm ICghc3BsYXNoX2VuYWJsZWQpIHsKLQkJc3RhdGUtPnBvd2VyX3N0YXRlID0gRFNJX0NUUkxfUE9X RVJfVlJFR19PRkY7Ci0JCXN0YXRlLT5jbWRfZW5naW5lX3N0YXRlID0gRFNJX0NUUkxfRU5HSU5F X09GRjsKLQkJc3RhdGUtPnZpZF9lbmdpbmVfc3RhdGUgPSBEU0lfQ1RSTF9FTkdJTkVfT0ZGOwot CX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfY3RybF9idWZmZXJfZGVpbml0 KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0Jc3RydWN0IG1zbV9nZW1fYWRkcmVzc19z cGFjZSAqYXNwYWNlID0gTlVMTDsKLQotCWlmIChkc2lfY3RybC0+dHhfY21kX2J1ZikgewotCQlh c3BhY2UgPSBkc2lfY3RybF9nZXRfYXNwYWNlKGRzaV9jdHJsLAotCQkJCU1TTV9TTU1VX0RPTUFJ Tl9VTlNFQ1VSRSk7Ci0JCWlmICghYXNwYWNlKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQg YWRkcmVzcyBzcGFjZVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCW1zbV9nZW1f cHV0X2lvdmEoZHNpX2N0cmwtPnR4X2NtZF9idWYsIGFzcGFjZSk7Ci0KLQkJbXV0ZXhfbG9jaygm ZHNpX2N0cmwtPmRybV9kZXYtPnN0cnVjdF9tdXRleCk7Ci0JCW1zbV9nZW1fZnJlZV9vYmplY3Qo ZHNpX2N0cmwtPnR4X2NtZF9idWYpOwotCQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5kcm1fZGV2 LT5zdHJ1Y3RfbXV0ZXgpOwotCQlkc2lfY3RybC0+dHhfY21kX2J1ZiA9IE5VTEw7Ci0JfQotCi0J cmV0dXJuIDA7Ci19Ci0KLWludCBkc2lfY3RybF9idWZmZXJfaW5pdChzdHJ1Y3QgZHNpX2N0cmwg KmRzaV9jdHJsKQotewotCWludCByYyA9IDA7Ci0JdTY0IGlvdmEgPSAwOwotCXN0cnVjdCBtc21f Z2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSA9IE5VTEw7Ci0KLQlhc3BhY2UgPSBkc2lfY3RybF9n ZXRfYXNwYWNlKGRzaV9jdHJsLCBNU01fU01NVV9ET01BSU5fVU5TRUNVUkUpOwotCWlmICghYXNw YWNlKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBhZGRyZXNzIHNwYWNlXG4iKTsKLQkJcmV0 dXJuIC1FTk9NRU07Ci0JfQotCi0JZHNpX2N0cmwtPnR4X2NtZF9idWYgPSBtc21fZ2VtX25ldyhk c2lfY3RybC0+ZHJtX2RldiwKLQkJCQkJICAgU1pfNEssCi0JCQkJCSAgIE1TTV9CT19VTkNBQ0hF RCk7Ci0KLQlpZiAoSVNfRVJSKGRzaV9jdHJsLT50eF9jbWRfYnVmKSkgewotCQlyYyA9IFBUUl9F UlIoZHNpX2N0cmwtPnR4X2NtZF9idWYpOwotCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBn ZW0sIHJjPSVkXG4iLCByYyk7Ci0JCWRzaV9jdHJsLT50eF9jbWRfYnVmID0gTlVMTDsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlkc2lfY3RybC0+Y21kX2J1ZmZlcl9zaXplID0gU1pfNEs7Ci0KLQly YyA9IG1zbV9nZW1fZ2V0X2lvdmEoZHNpX2N0cmwtPnR4X2NtZF9idWYsIGFzcGFjZSwgJmlvdmEp OwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgaW92YSwgcmM9JWRcbiIsIHJj KTsKLQkJKHZvaWQpZHNpX2N0cmxfYnVmZmVyX2RlaW5pdChkc2lfY3RybCk7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JaWYgKGlvdmEgJiAweDA3KSB7Ci0JCXByX2VycigiVHggY29tbWFuZCBidWZm ZXIgaXMgbm90IDggYnl0ZSBhbGlnbmVkXG4iKTsKLQkJcmMgPSAtRU5PVFNVUFA7Ci0JCSh2b2lk KWRzaV9jdHJsX2J1ZmZlcl9kZWluaXQoZHNpX2N0cmwpOwotCQlnb3RvIGVycm9yOwotCX0KLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZW5hYmxlX2lvX2NsYW1wKHN0 cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCWJvb2wgZW5hYmxlLCBib29sIHVscHNfZW5hYmxl ZCkKLXsKLQl1MzIgbGFuZXMgPSAwOwotCi0JaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5l bF9tb2RlID09IERTSV9PUF9DTURfTU9ERSkKLQkJbGFuZXMgPSBkc2lfY3RybC0+aG9zdF9jb25m aWcuY29tbW9uX2NvbmZpZy5kYXRhX2xhbmVzOwotCi0JbGFuZXMgfD0gRFNJX0NMT0NLX0xBTkU7 Ci0KLQlpZiAoZW5hYmxlKQotCQlkc2lfY3RybC0+aHcub3BzLmNsYW1wX2VuYWJsZSgmZHNpX2N0 cmwtPmh3LAotCQkJbGFuZXMsIHVscHNfZW5hYmxlZCk7Ci0JZWxzZQotCQlkc2lfY3RybC0+aHcu b3BzLmNsYW1wX2Rpc2FibGUoJmRzaV9jdHJsLT5odywKLQkJCWxhbmVzLCB1bHBzX2VuYWJsZWQp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfZHRzX3BhcnNlKHN0cnVj dCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUp Ci17Ci0JdTMyIGluZGV4ID0gMDsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCB8fCAh b2Zfbm9kZSkgewotCQlwcl9lcnIoImludmFsaWQgZHNpX2N0cmw6JWQgb3Igb2Zfbm9kZTolZFxu IiwKLQkJCQkJZHNpX2N0cmwgIT0gTlVMTCwgb2Zfbm9kZSAhPSBOVUxMKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAiY2VsbC1p bmRleCIsICZpbmRleCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJjZWxsIGluZGV4IG5vdCBz ZXQsIGRlZmF1bHQgdG8gMFxuIik7Ci0JCWluZGV4ID0gMDsKLQl9Ci0KLQlkc2lfY3RybC0+Y2Vs bF9pbmRleCA9IGluZGV4OwotCWRzaV9jdHJsLT5uYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25v ZGUsICJsYWJlbCIsIE5VTEwpOwotCWlmICghZHNpX2N0cmwtPm5hbWUpCi0JCWRzaV9jdHJsLT5u YW1lID0gRFNJX0NUUkxfREVGQVVMVF9MQUJFTDsKLQotCWRzaV9jdHJsLT5waHlfaXNvbGF0aW9u X2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkgICAgInFjb20s ZHNpLXBoeS1pc29sYXRpb24tZW5hYmxlZCIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX2N0cmxfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0J c3RydWN0IGRzaV9jdHJsICpkc2lfY3RybDsKLQlzdHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVtICpp dGVtOwotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOwotCWVudW0gZHNpX2N0cmxfdmVy c2lvbiB2ZXJzaW9uOwotCWludCByYyA9IDA7Ci0KLQlpZCA9IG9mX21hdGNoX25vZGUobXNtX2Rz aV9vZl9tYXRjaCwgcGRldi0+ZGV2Lm9mX25vZGUpOwotCWlmICghaWQpCi0JCXJldHVybiAtRU5P REVWOwotCi0JdmVyc2lvbiA9ICooZW51bSBkc2lfY3RybF92ZXJzaW9uICopaWQtPmRhdGE7Ci0K LQlpdGVtID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaXRlbSksIEdGUF9LRVJO RUwpOwotCWlmICghaXRlbSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkc2lfY3RybCA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRzaV9jdHJsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFkc2lfY3RybCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkc2lfY3RybC0+dmVyc2lvbiA9IHZl cnNpb247Ci0JZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0gPSAtMTsKLQlkc2lfY3RybC0+aXJx X2luZm8uaXJxX3N0YXRfbWFzayA9IDB4MDsKLQotCXNwaW5fbG9ja19pbml0KCZkc2lfY3RybC0+ aXJxX2luZm8uaXJxX2xvY2spOwotCi0JcmMgPSBkc2lfY3RybF9kdHNfcGFyc2UoZHNpX2N0cmws IHBkZXYtPmRldi5vZl9ub2RlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJjdHJsOiVkIGR0cyBw YXJzZSBmYWlsZWQsIHJjID0gJWRcbiIsCi0JCQkJCQlkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMp OwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JcmMgPSBkc2lfY3RybF9pbml0X3JlZ21hcChwZGV2LCBk c2lfY3RybCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHBhcnNlIHJlZ2lzdGVy IGluZm9ybWF0aW9uLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyYyA9 IGRzaV9jdHJsX2Nsb2Nrc19pbml0KHBkZXYsIGRzaV9jdHJsKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJGYWlsZWQgdG8gcGFyc2UgY2xvY2sgaW5mb3JtYXRpb24sIHJjID0gJWRcbiIsIHJjKTsK LQkJZ290byBmYWlsOwotCX0KLQotCXJjID0gZHNpX2N0cmxfc3VwcGxpZXNfaW5pdChwZGV2LCBk c2lfY3RybCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHBhcnNlIHZvbHRhZ2Ug c3VwcGxpZXMsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBmYWlsX2Nsa3M7Ci0JfQotCi0JcmMg PSBkc2lfY2F0YWxvZ19jdHJsX3NldHVwKCZkc2lfY3RybC0+aHcsIGRzaV9jdHJsLT52ZXJzaW9u LAotCQkgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIGRzaV9jdHJsLT5waHlfaXNvbGF0aW9uX2Vu YWJsZWQpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkNhdGFsb2cgZG9lcyBub3Qgc3VwcG9ydCB2 ZXJzaW9uICglZClcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+dmVyc2lvbik7Ci0JCWdvdG8gZmFp bF9zdXBwbGllczsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX2F4aV9idXNfY2xpZW50X2luaXQocGRl diwgZHNpX2N0cmwpOwotCWlmIChyYykKLQkJcHJfZGVidWcoImZhaWxlZCB0byBpbml0IGF4aSBi dXMgY2xpZW50LCByYyA9ICVkXG4iLCByYyk7Ci0KLQlpdGVtLT5jdHJsID0gZHNpX2N0cmw7Ci0K LQltdXRleF9sb2NrKCZkc2lfY3RybF9saXN0X2xvY2spOwotCWxpc3RfYWRkKCZpdGVtLT5saXN0 LCAmZHNpX2N0cmxfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybF9saXN0X2xvY2spOwot Ci0JbXV0ZXhfaW5pdCgmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlkc2lfY3RybC0+cGRldiA9 IHBkZXY7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpX2N0cmwpOwotCXByX2luZm8o IlByb2JlIHN1Y2Nlc3NmdWwgZm9yICVzXG4iLCBkc2lfY3RybC0+bmFtZSk7Ci0KLQlyZXR1cm4g MDsKLQotZmFpbF9zdXBwbGllczoKLQkodm9pZClkc2lfY3RybF9zdXBwbGllc19kZWluaXQoZHNp X2N0cmwpOwotZmFpbF9jbGtzOgotCSh2b2lkKWRzaV9jdHJsX2Nsb2Nrc19kZWluaXQoZHNpX2N0 cmwpOwotZmFpbDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2N0cmxfZGV2X3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRzaV9jdHJsICpkc2lfY3RybDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7Ci0K LQlkc2lfY3RybCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCi0JbXV0ZXhfbG9jaygm ZHNpX2N0cmxfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZkc2lf Y3RybF9saXN0KSB7Ci0JCXN0cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0gKm4gPSBsaXN0X2VudHJ5 KHBvcywKLQkJCQkJCSAgc3RydWN0IGRzaV9jdHJsX2xpc3RfaXRlbSwKLQkJCQkJCSAgbGlzdCk7 Ci0JCWlmIChuLT5jdHJsID09IGRzaV9jdHJsKSB7Ci0JCQlsaXN0X2RlbCgmbi0+bGlzdCk7Ci0J CQlicmVhazsKLQkJfQotCX0KLQltdXRleF91bmxvY2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci0K LQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyYyA9IGRzaV9jdHJsX2F4aV9i dXNfY2xpZW50X2RlaW5pdChkc2lfY3RybCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0 byBkZWluaXRpYWxpemUgYXhpIGJ1cyBjbGllbnQsIHJjID0gJWRcbiIsIHJjKTsKLQotCXJjID0g ZHNpX2N0cmxfc3VwcGxpZXNfZGVpbml0KGRzaV9jdHJsKTsKLQlpZiAocmMpCi0JCXByX2Vycigi ZmFpbGVkIHRvIGRlaW5pdGlhbGl6ZSB2b2x0YWdlIHN1cHBsaWVzLCByYz0lZFxuIiwgcmMpOwot Ci0JcmMgPSBkc2lfY3RybF9jbG9ja3NfZGVpbml0KGRzaV9jdHJsKTsKLQlpZiAocmMpCi0JCXBy X2VycigiZmFpbGVkIHRvIGRlaW5pdGlhbGl6ZSBjbG9ja3MsIHJjPSVkXG4iLCByYyk7Ci0KLQlt dXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JbXV0ZXhfZGVzdHJveSgmZHNp X2N0cmwtPmN0cmxfbG9jayk7Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBkc2lfY3RybCk7Ci0K LQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHNpX2N0cmxfZHJpdmVyID0gewotCS5wcm9iZSA9 IGRzaV9jdHJsX2Rldl9wcm9iZSwKLQkucmVtb3ZlID0gZHNpX2N0cmxfZGV2X3JlbW92ZSwKLQku ZHJpdmVyID0gewotCQkubmFtZSA9ICJkcm1fZHNpX2N0cmwiLAotCQkub2ZfbWF0Y2hfdGFibGUg PSBtc21fZHNpX29mX21hdGNoLAotCX0sCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdf RlMpCi0KLXZvaWQgZHNpX2N0cmxfZGVidWdfZHVtcCh2b2lkKQotewotCXN0cnVjdCBsaXN0X2hl YWQgKnBvcywgKnRtcDsKLQlzdHJ1Y3QgZHNpX2N0cmwgKmN0cmwgPSBOVUxMOwotCi0JbXV0ZXhf bG9jaygmZHNpX2N0cmxfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAs ICZkc2lfY3RybF9saXN0KSB7Ci0JCXN0cnVjdCBkc2lfY3RybF9saXN0X2l0ZW0gKm47Ci0KLQkJ biA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVtLCBsaXN0KTsKLQkJ Y3RybCA9IG4tPmN0cmw7Ci0JCXByX2VycigiZHNpIGN0cmw6JWRcbiIsIGN0cmwtPmNlbGxfaW5k ZXgpOwotCQljdHJsLT5ody5vcHMuZGVidWdfYnVzKCZjdHJsLT5odyk7Ci0JfQotCW11dGV4X3Vu bG9jaygmZHNpX2N0cmxfbGlzdF9sb2NrKTsKLX0KLQotI2VuZGlmCi0vKioKLSAqIGRzaV9jdHJs X2dldCgpIC0gZ2V0IGEgZHNpX2N0cmwgaGFuZGxlIGZyb20gYW4gb2Zfbm9kZQotICogQG9mX25v ZGU6ICAgIG9mX25vZGUgb2YgdGhlIERTSSBjb250cm9sbGVyLgotICoKLSAqIEdldHMgdGhlIERT SSBjb250cm9sbGVyIGhhbmRsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgb2Zfbm9kZS4gVGhlIHJl ZiBjb3VudAotICogaXMgaW5jcmVtZW50ZWQgdG8gb25lIGFuZCBhbGwgc3Vic2VxdWVudCBnZXRz IHdpbGwgZmFpbCB1bnRpbCB0aGUgb3JpZ2luYWwKLSAqIGNsaWVudHMgY2FsbHMgYSBwdXQuCi0g KgotICogUmV0dXJuOiBEU0kgQ29udHJvbGxlciBoYW5kbGUuCi0gKi8KLXN0cnVjdCBkc2lfY3Ry bCAqZHNpX2N0cmxfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlzdHJ1Y3Qg bGlzdF9oZWFkICpwb3MsICp0bXA7Ci0Jc3RydWN0IGRzaV9jdHJsICpjdHJsID0gTlVMTDsKLQot CW11dGV4X2xvY2soJmRzaV9jdHJsX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHBv cywgdG1wLCAmZHNpX2N0cmxfbGlzdCkgewotCQlzdHJ1Y3QgZHNpX2N0cmxfbGlzdF9pdGVtICpu OwotCi0JCW4gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9jdHJsX2xpc3RfaXRlbSwgbGlz dCk7Ci0JCWlmIChuLT5jdHJsLT5wZGV2LT5kZXYub2Zfbm9kZSA9PSBvZl9ub2RlKSB7Ci0JCQlj dHJsID0gbi0+Y3RybDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZHNpX2N0 cmxfbGlzdF9sb2NrKTsKLQotCWlmICghY3RybCkgewotCQlwcl9lcnIoIkRldmljZSB3aXRoIG9m IG5vZGUgbm90IGZvdW5kXG4iKTsKLQkJY3RybCA9IEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7Ci0J CXJldHVybiBjdHJsOwotCX0KLQotCW11dGV4X2xvY2soJmN0cmwtPmN0cmxfbG9jayk7Ci0JaWYg KGN0cmwtPnJlZmNvdW50ID09IDEpIHsKLQkJcHJfZXJyKCJbJXNdIERldmljZSBpbiB1c2VcbiIs IGN0cmwtPm5hbWUpOwotCQljdHJsID0gRVJSX1BUUigtRUJVU1kpOwotCX0gZWxzZSB7Ci0JCWN0 cmwtPnJlZmNvdW50Kys7Ci0JfQotCW11dGV4X3VubG9jaygmY3RybC0+Y3RybF9sb2NrKTsKLQly ZXR1cm4gY3RybDsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9wdXQoKSAtIHJlbGVhc2VzIGEgZHNp IGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGRzaV9jdHJsOiAgICAgICBEU0kgY29udHJvbGxlciBo YW5kbGUuCi0gKgotICogUmVsZWFzZXMgdGhlIERTSSBjb250cm9sbGVyLiBEcml2ZXIgd2lsbCBj bGVhbiB1cCBhbGwgcmVzb3VyY2VzIGFuZCBwdXRzIGJhY2sKLSAqIHRoZSBEU0kgY29udHJvbGxl ciBpbnRvIHJlc2V0IHN0YXRlLgotICovCi12b2lkIGRzaV9jdHJsX3B1dChzdHJ1Y3QgZHNpX2N0 cmwgKmRzaV9jdHJsKQotewotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0J aWYgKGRzaV9jdHJsLT5yZWZjb3VudCA9PSAwKQotCQlwcl9lcnIoIlVuYmFsYW5jZWQgJXMgY2Fs bFxuIiwgX19mdW5jX18pOwotCWVsc2UKLQkJZHNpX2N0cmwtPnJlZmNvdW50LS07Ci0KLQltdXRl eF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2Ry dl9pbml0KCkgLSBpbml0aWFsaXplIGRzaSBjb250cm9sbGVyIGRyaXZlci4KLSAqIEBkc2lfY3Ry bDogICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAcGFyZW50OiAgICAgICAgUGFyZW50 IGRpcmVjdG9yeSBmb3IgZGVidWcgZnMuCi0gKgotICogSW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xs ZXIgZHJpdmVyLiBEcml2ZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFmdGVyCi0gKiBkc2lfY3Ry bF9nZXQoKSBzdWNjZWVkcy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBk c2lfY3RybF9kcnZfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBzdHJ1Y3QgZGVudHJ5 ICpwYXJlbnQpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgIXBhcmVudCkg ewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmMgPSBkc2lfY3RybF9kcnZf c3RhdGVfaW5pdChkc2lfY3RybCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIGlu aXRpYWxpemUgZHJpdmVyIHN0YXRlLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0K LQotCXJjID0gZHNpX2N0cmxfZGVidWdmc19pbml0KGRzaV9jdHJsLCBwYXJlbnQpOwotCWlmIChy YykgewotCQlwcl9lcnIoIltEU0lfJWRdIGZhaWxlZCB0byBpbml0IGRlYnVnIGZzLCByYz0lZFxu IiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVy biByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9kcnZfZGVpbml0KCkgLSBkZS1pbml0aWFsaXpl cyBkc2kgY29udHJvbGxlciBkcml2ZXIKLSAqIEBkc2lfY3RybDogICAgICBEU0kgY29udHJvbGxl ciBoYW5kbGUuCi0gKgotICogUmVsZWFzZXMgYWxsIHJlc291cmNlcyBhY3F1aXJlZCBieSBkc2lf Y3RybF9kcnZfaW5pdCgpLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRz aV9jdHJsX2Rydl9kZWluaXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMg PSAwOwotCi0JaWYgKCFkc2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9j ayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2RlYnVnZnNfZGVpbml0KGRzaV9jdHJsKTsKLQlpZiAocmMp Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlbGVhc2UgZGVidWdmcyByb290LCByYz0lZFxuIiwgcmMp OwotCi0JcmMgPSBkc2lfY3RybF9idWZmZXJfZGVpbml0KGRzaV9jdHJsKTsKLQlpZiAocmMpCi0J CXByX2VycigiRmFpbGVkIHRvIGZyZWUgY21kIGJ1ZmZlcnMsIHJjPSVkXG4iLCByYyk7Ci0KLQlt dXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50 IGRzaV9jdHJsX2Nsa19jYl9yZWdpc3RlcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCXN0 cnVjdCBjbGtfY3RybF9jYiAqY2xrX2NiKQotewotCWlmICghZHNpX2N0cmwgfHwgIWNsa19jYikg ewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JZHNpX2N0cmwtPmNsa19jYi5wcml2ID0gY2xrX2NiLT5wcml2OwotCWRzaV9jdHJsLT5jbGtf Y2IuZHNpX2Nsa19jYiA9IGNsa19jYi0+ZHNpX2Nsa19jYjsKLQlyZXR1cm4gMDsKLX0KLQotLyoq Ci0gKiBkc2lfY3RybF9waHlfc3dfcmVzZXQoKSAtIHBlcmZvcm0gYSBQSFkgc29mdHdhcmUgcmVz ZXQKLSAqIEBkc2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICog UGVyZm9ybXMgYSBQSFkgc29mdHdhcmUgcmVzZXQgb24gdGhlIERTSSBjb250cm9sbGVyLiBSZXNl dCBzaG91bGQgYmUgZG9uZQotICogd2hlbiB0aGUgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcyBE U0lfQ1RSTF9QT1dFUl9DT1JFX0NMS19PTiBhbmQgdGhlIFBIWSBpcwotICogbm90IGVuYWJsZWQu Ci0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgZHJpdmVyIGlzIGluIGFueSBvdGhl ciBzdGF0ZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9w aHlfc3dfcmVzZXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkKLXsKLQlpbnQgcmMgPSAwOwot Ci0JaWYgKCFkc2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0J cmMgPSBkc2lfY3RybF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfUEhZX1NXX1JF U0VULCAweDApOwotCWlmIChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3Rh dGUgY2hlY2sgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4 LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZHNpX2N0cmwtPmh3Lm9wcy5waHlfc3dfcmVz ZXQoJmRzaV9jdHJsLT5odyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gUEhZIHNvZnQgcmVzZXQg ZG9uZVxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCWRzaV9jdHJsX3VwZGF0ZV9zdGF0ZShk c2lfY3RybCwgRFNJX0NUUkxfT1BfUEhZX1NXX1JFU0VULCAweDApOwotZXJyb3I6Ci0JbXV0ZXhf dW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICog ZHNpX2N0cmxfc2VhbWxlc3NfdGltaW5nX3VwZGF0ZSgpIC0gdXBkYXRlIG9ubHkgY29udHJvbGxl ciB0aW1pbmcKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgot ICogQHRpbWluZzogICAgICAgICAgICBOZXcgRFNJIHRpbWluZyBpbmZvCi0gKgotICogVXBkYXRl cyBob3N0IHRpbWluZyB2YWx1ZXMgdG8gY29uZHVjdCBhIHNlYW1sZXNzIHRyYW5zaXRpb24gdG8g bmV3IHRpbWluZwotICogRm9yIGV4YW1wbGUsIHRvIHVwZGF0ZSB0aGUgcG9yY2ggdmFsdWVzIGlu IGEgZHluYW1pYyBmcHMgc3dpdGNoLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwot aW50IGRzaV9jdHJsX2FzeW5jX3RpbWluZ191cGRhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3Ry bCwKLQkJc3RydWN0IGRzaV9tb2RlX2luZm8gKnRpbWluZykKLXsKLQlzdHJ1Y3QgZHNpX21vZGVf aW5mbyAqaG9zdF9tb2RlOwotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8ICF0aW1p bmcpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmMgPSBkc2lfY3Ry bF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfQVNZTkNfVElNSU5HLAotCQkJRFNJ X0NUUkxfRU5HSU5FX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9s bGVyIHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2Vs bF9pbmRleCwgcmMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaG9zdF9tb2RlID0gJmRzaV9jdHJs LT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmc7Ci0JbWVtY3B5KGhvc3RfbW9kZSwgdGltaW5nLCBz aXplb2YoKmhvc3RfbW9kZSkpOwotCWRzaV9jdHJsLT5ody5vcHMuc2V0X3RpbWluZ19kYigmZHNp X2N0cmwtPmh3LCB0cnVlKTsKLQlkc2lfY3RybC0+aHcub3BzLnNldF92aWRlb190aW1pbmcoJmRz aV9jdHJsLT5odywgaG9zdF9tb2RlKTsKLQotZXhpdDoKLQltdXRleF91bmxvY2soJmRzaV9jdHJs LT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF90aW1pbmdf ZGJfdXBkYXRlKCkgLSB1cGRhdGUgb25seSBjb250cm9sbGVyIFRpbWluZyBEQgotICogQGRzaV9j dHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAg ICAgIEVuYWJsZS9kaXNhYmxlIFRpbWluZyBEQiByZWdpc3RlcgotICoKLSAqICBVcGRhdGUgdGlt aW5nIGRiIHJlZ2lzdGVyIHZhbHVlIGR1cmluZyBkZnBzIHVzZWNhc2VzCi0gKgotICogUmV0dXJu OiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfdGltaW5nX2RiX3VwZGF0ZShzdHJ1Y3Qg ZHNpX2N0cmwgKmRzaV9jdHJsLAotCQlib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKCFkc2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgZHNpX2N0cmxcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQot CXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX0FTWU5DX1RJ TUlORywKLQkJCURTSV9DVFJMX0VOR0lORV9PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RT SV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAg ZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBleGl0OwotCX0KLQotCS8qCi0JICog QWRkIEhXIHJlY29tbWVuZGVkIGRlbGF5IGZvciBkZnBzIGZlYXR1cmUuCi0JICogV2hlbiBwcmVm ZXRjaCBpcyBlbmFibGVkLCBNRFNTIEhXIHdvcmtzIG9uIDIgdnN5bmMKLQkgKiBib3VuZGFyaWVz IGkuZS4gbWRwX3ZzeW5jIGFuZCBwYW5lbF92c3luYy4KLQkgKiBJbiB0aGUgY3VycmVudCBpbXBs ZW1lbnRhdGlvbiB3ZSBhcmUgb25seSB3YWl0aW5nCi0JICogZm9yIG1kcF92c3luYy4gV2UgbmVl ZCB0byBtYWtlIHN1cmUgdGhhdCBpbnRlcmZhY2UKLQkgKiBmbHVzaCBpcyBhZnRlciBwYW5lbF92 c3luYy4gU28sIGFkZGVkIHRoZSByZWNvbW1lbmRlZAotCSAqIGRlbGF5cyBhZnRlciBkZnBzIHVw ZGF0ZS4KLQkgKi8KLQl1c2xlZXBfcmFuZ2UoMjAwMCwgMjAxMCk7Ci0KLQlkc2lfY3RybC0+aHcu b3BzLnNldF90aW1pbmdfZGIoJmRzaV9jdHJsLT5odywgZW5hYmxlKTsKLQotZXhpdDoKLQltdXRl eF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRz aV9jdHJsX3NldHVwKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaW50IHJjID0gMDsK LQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwot Ci0JZHNpX2N0cmwtPmh3Lm9wcy5zZXR1cF9sYW5lX21hcCgmZHNpX2N0cmwtPmh3LAotCQkJCQkm ZHNpX2N0cmwtPmhvc3RfY29uZmlnLmxhbmVfbWFwKTsKLQotCWRzaV9jdHJsLT5ody5vcHMuaG9z dF9zZXR1cCgmZHNpX2N0cmwtPmh3LAotCQkJCSAgICAmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNv bW1vbl9jb25maWcpOwotCi0JaWYgKGRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlID09 IERTSV9PUF9DTURfTU9ERSkgewotCQlkc2lfY3RybC0+aHcub3BzLmNtZF9lbmdpbmVfc2V0dXAo JmRzaV9jdHJsLT5odywKLQkJCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy5jb21tb25fY29uZmln LAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnUuY21kX2VuZ2luZSk7Ci0KLQkJZHNpX2N0 cmwtPmh3Lm9wcy5zZXR1cF9jbWRfc3RyZWFtKCZkc2lfY3RybC0+aHcsCi0JCQkJJmRzaV9jdHJs LT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmcsCi0JCQkJZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZp ZGVvX3RpbWluZy5oX2FjdGl2ZSAqIDMsCi0JCQkJMHgwLAotCQkJCSZkc2lfY3RybC0+cm9pKTsK LQkJZHNpX2N0cmwtPmh3Lm9wcy5jbWRfZW5naW5lX2VuKCZkc2lfY3RybC0+aHcsIHRydWUpOwot CX0gZWxzZSB7Ci0JCWRzaV9jdHJsLT5ody5vcHMudmlkZW9fZW5naW5lX3NldHVwKCZkc2lfY3Ry bC0+aHcsCi0JCQkJCSZkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZywKLQkJCQkJ JmRzaV9jdHJsLT5ob3N0X2NvbmZpZy51LnZpZGVvX2VuZ2luZSk7Ci0JCWRzaV9jdHJsLT5ody5v cHMuc2V0X3ZpZGVvX3RpbWluZygmZHNpX2N0cmwtPmh3LAotCQkJCQkgICZkc2lfY3RybC0+aG9z dF9jb25maWcudmlkZW9fdGltaW5nKTsKLQkJZHNpX2N0cmwtPmh3Lm9wcy52aWRlb19lbmdpbmVf ZW4oJmRzaV9jdHJsLT5odywgdHJ1ZSk7Ci0JfQotCi0JZHNpX2N0cmwtPmh3Lm9wcy5lbmFibGVf c3RhdHVzX2ludGVycnVwdHMoJmRzaV9jdHJsLT5odywgMHgwKTsKLQlkc2lfY3RybC0+aHcub3Bz LmVuYWJsZV9lcnJvcl9pbnRlcnJ1cHRzKCZkc2lfY3RybC0+aHcsIDB4MCk7Ci0JZHNpX2N0cmwt Pmh3Lm9wcy5jdHJsX2VuKCZkc2lfY3RybC0+aHcsIHRydWUpOwotCi0JbXV0ZXhfdW5sb2NrKCZk c2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxf cGh5X3Jlc2V0X2NvbmZpZygpIC0gTWFzay91bm1hc2sgcHJvcGFnYXRpb24gb2YgYWhiIHJlc2V0 IHNpZ25hbAotICoJdG8gRFNJIFBIWSBoYXJkd2FyZS4KLSAqIEBkc2lfY3RybDogICAgICAgIERT SSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6CQkJTWFzay91bm1hc2sgdGhlIFBIWSBy ZXNldCBzaWduYWwuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0 cmxfcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBib29sIGVuYWJs ZSkKLXsKLQlpZiAoIWRzaV9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5waHlfcmVzZXRf Y29uZmlnKQotCQlkc2lfY3RybC0+aHcub3BzLnBoeV9yZXNldF9jb25maWcoJmRzaV9jdHJsLT5o dywgZW5hYmxlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfY3RybF9oYW5k bGVfZXJyb3Jfc3RhdHVzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJdW5zaWduZWQg bG9uZyBpbnQgZXJyb3IpCi17Ci0JcHJfZXJyKCIlczogJWx1XG4iLCBfX2Z1bmNfXywgZXJyb3Ip OwotCi0JLyogRFRMTiBQSFkgZXJyb3IgKi8KLQlpZiAoZXJyb3IgJiAweDMwMDBlMDApCi0JCWlm IChkc2lfY3RybC0+aHcub3BzLmNsZWFyX2Vycm9yX3N0YXR1cykKLQkJCWRzaV9jdHJsLT5ody5v cHMuY2xlYXJfZXJyb3Jfc3RhdHVzKCZkc2lfY3RybC0+aHcsCi0JCQkJCTB4MzAwMGUwMCk7Ci0K LQkvKiBEU0kgRklGTyBPVkVSRkxPVyBlcnJvciAqLwotCWlmIChlcnJvciAmIDB4ZjAwMDApIHsK LQkJaWYgKGRzaV9jdHJsLT5ody5vcHMuY2xlYXJfZXJyb3Jfc3RhdHVzKQotCQkJZHNpX2N0cmwt Pmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMoJmRzaV9jdHJsLT5odywKLQkJCQkJMHhmMDAwMCk7 Ci0JfQotCi0JLyogRFNJIEZJRk8gVU5ERVJGTE9XIGVycm9yICovCi0JaWYgKGVycm9yICYgMHhm MDAwMDApIHsKLQkJaWYgKGRzaV9jdHJsLT5ody5vcHMuY2xlYXJfZXJyb3Jfc3RhdHVzKQotCQkJ ZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMoJmRzaV9jdHJsLT5odywKLQkJCQkJ MHhmMDAwMDApOwotCX0KLQotCS8qIERTSSBQTEwgVU5MT0NLIGVycm9yICovCi0JaWYgKGVycm9y ICYgQklUKDgpKQotCQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMpCi0J CQlkc2lfY3RybC0+aHcub3BzLmNsZWFyX2Vycm9yX3N0YXR1cygmZHNpX2N0cmwtPmh3LAotCQkJ CQlCSVQoOCkpOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2lzciAtIGludGVycnVwdCBzZXJ2aWNl IHJvdXRpbmUgZm9yIERTSSBDVFJMIGNvbXBvbmVudAotICogQGlycTogSW5jb21pbmcgSVJRIG51 bWJlcgotICogQHB0cjogUG9pbnRlciB0byB1c2VyIGRhdGEgc3RydWN0dXJlIChzdHJ1Y3QgZHNp X2N0cmwpCi0gKiBSZXR1cm5zOiBJUlFfSEFORExFRCBpZiBubyBmdXJ0aGVyIGFjdGlvbiByZXF1 aXJlZAotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgZHNpX2N0cmxfaXNyKGludCBpcnEsIHZvaWQg KnB0cikKLXsKLQlzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsOwotCXN0cnVjdCBkc2lfZXZlbnRf Y2JfaW5mbyBjYl9pbmZvOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdWludDMyX3QgY2VsbF9p bmRleCwgc3RhdHVzLCBpOwotCXVpbnQ2NF90IGVycm9yczsKLQotCWlmICghcHRyKQotCQlyZXR1 cm4gSVJRX05PTkU7Ci0JZHNpX2N0cmwgPSBwdHI7Ci0KLQkvKiBjbGVhciBzdGF0dXMgaW50ZXJy dXB0cyAqLwotCWlmIChkc2lfY3RybC0+aHcub3BzLmdldF9pbnRlcnJ1cHRfc3RhdHVzKQotCQlz dGF0dXMgPSBkc2lfY3RybC0+aHcub3BzLmdldF9pbnRlcnJ1cHRfc3RhdHVzKCZkc2lfY3RybC0+ aHcpOwotCWVsc2UKLQkJc3RhdHVzID0gMHgwOwotCi0JaWYgKGRzaV9jdHJsLT5ody5vcHMuY2xl YXJfaW50ZXJydXB0X3N0YXR1cykKLQkJZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9pbnRlcnJ1cHRf c3RhdHVzKCZkc2lfY3RybC0+aHcsIHN0YXR1cyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZHNp X2N0cmwtPmlycV9pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0JY2VsbF9pbmRleCA9IGRzaV9jdHJs LT5jZWxsX2luZGV4OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzaV9jdHJsLT5pcnFfaW5m by5pcnFfbG9jaywgZmxhZ3MpOwotCi0JLyogY2xlYXIgZXJyb3IgaW50ZXJydXB0cyAqLwotCWlm IChkc2lfY3RybC0+aHcub3BzLmdldF9lcnJvcl9zdGF0dXMpCi0JCWVycm9ycyA9IGRzaV9jdHJs LT5ody5vcHMuZ2V0X2Vycm9yX3N0YXR1cygmZHNpX2N0cmwtPmh3KTsKLQllbHNlCi0JCWVycm9y cyA9IDB4MDsKLQotCWlmIChlcnJvcnMpIHsKLQkJLyogaGFuZGxlIERTSSBlcnJvciByZWNvdmVy eSAqLwotCQlkc2lfY3RybF9oYW5kbGVfZXJyb3Jfc3RhdHVzKGRzaV9jdHJsLCBlcnJvcnMpOwot CQlpZiAoZHNpX2N0cmwtPmh3Lm9wcy5jbGVhcl9lcnJvcl9zdGF0dXMpCi0JCQlkc2lfY3RybC0+ aHcub3BzLmNsZWFyX2Vycm9yX3N0YXR1cygmZHNpX2N0cmwtPmh3LAotCQkJCQkJCWVycm9ycyk7 Ci0JfQotCi0JaWYgKHN0YXR1cyAmIERTSV9DTURfTU9ERV9ETUFfRE9ORSkgewotCQlkc2lfY3Ry bF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmwsCi0JCQkJCURTSV9TSU5UX0NNRF9N T0RFX0RNQV9ET05FKTsKLQkJY29tcGxldGVfYWxsKCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2Rt YV9kb25lKTsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgRFNJX0NNRF9GUkFNRV9ET05FKSB7Ci0JCWRz aV9jdHJsX2Rpc2FibGVfc3RhdHVzX2ludGVycnVwdChkc2lfY3RybCwKLQkJCQkJRFNJX1NJTlRf Q01EX0ZSQU1FX0RPTkUpOwotCQljb21wbGV0ZV9hbGwoJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRf ZnJhbWVfZG9uZSk7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIERTSV9WSURFT19NT0RFX0ZSQU1FX0RP TkUpIHsKLQkJZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KGRzaV9jdHJsLAotCQkJ CQlEU0lfU0lOVF9WSURFT19NT0RFX0ZSQU1FX0RPTkUpOwotCQljb21wbGV0ZV9hbGwoJmRzaV9j dHJsLT5pcnFfaW5mby52aWRfZnJhbWVfZG9uZSk7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIERTSV9C VEFfRE9ORSkgewotCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoZHNpX2N0cmws Ci0JCQkJCURTSV9TSU5UX0JUQV9ET05FKTsKLQkJY29tcGxldGVfYWxsKCZkc2lfY3RybC0+aXJx X2luZm8uYnRhX2RvbmUpOwotCX0KLQotCWZvciAoaSA9IDA7IHN0YXR1cyAmJiBpIDwgRFNJX1NU QVRVU19JTlRFUlJVUFRfQ09VTlQ7ICsraSkgewotCQlpZiAoc3RhdHVzICYgMHgxKSB7Ci0JCQlz cGluX2xvY2tfaXJxc2F2ZSgmZHNpX2N0cmwtPmlycV9pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci0J CQljYl9pbmZvID0gZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X2NiW2ldOwotCQkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgKLQkJCQkJJmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9jaywgZmxh Z3MpOwotCi0JCQlpZiAoY2JfaW5mby5ldmVudF9jYikKLQkJCQkodm9pZCljYl9pbmZvLmV2ZW50 X2NiKGNiX2luZm8uZXZlbnRfdXNyX3B0ciwKLQkJCQkJCWNiX2luZm8uZXZlbnRfaWR4LAotCQkJ CQkJY2VsbF9pbmRleCwgaXJxLCAwLCAwLCAwKTsKLQkJfQotCQlzdGF0dXMgPj49IDE7Ci0JfQot Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0vKioKLSAqIF9kc2lfY3RybF9zZXR1cF9pc3Ig LSByZWdpc3RlciBJU1IgaGFuZGxlcgotICogQGRzaV9jdHJsOiBQb2ludGVyIHRvIGFzc29jaWF0 ZWQgZHNpX2N0cmwgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwot c3RhdGljIGludCBkc2lfY3RybF9zZXR1cF9pc3Ioc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCkK LXsKLQlpbnQgaXJxX251bSwgcmM7Ci0KLQlpZiAoIWRzaV9jdHJsKQotCQlyZXR1cm4gLUVJTlZB TDsKLQlpZiAoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0gIT0gLTEpCi0JCXJldHVybiAwOwot Ci0JaW5pdF9jb21wbGV0aW9uKCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2RtYV9kb25lKTsKLQlp bml0X2NvbXBsZXRpb24oJmRzaV9jdHJsLT5pcnFfaW5mby52aWRfZnJhbWVfZG9uZSk7Ci0JaW5p dF9jb21wbGV0aW9uKCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2ZyYW1lX2RvbmUpOwotCWluaXRf Y29tcGxldGlvbigmZHNpX2N0cmwtPmlycV9pbmZvLmJ0YV9kb25lKTsKLQotCWlycV9udW0gPSBw bGF0Zm9ybV9nZXRfaXJxKGRzaV9jdHJsLT5wZGV2LCAwKTsKLQlpZiAoaXJxX251bSA8IDApIHsK LQkJcHJfZXJyKCJbRFNJXyVkXSBGYWlsZWQgdG8gZ2V0IElSUSBudW1iZXIsICVkXG4iLAotCQkJ CWRzaV9jdHJsLT5jZWxsX2luZGV4LCBpcnFfbnVtKTsKLQkJcmMgPSBpcnFfbnVtOwotCX0gZWxz ZSB7Ci0JCXJjID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmZHNpX2N0cmwtPnBkZXYtPmRl diwgaXJxX251bSwKLQkJCQlkc2lfY3RybF9pc3IsIE5VTEwsIDAsICJkc2lfY3RybCIsIGRzaV9j dHJsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIltEU0lfJWRdIEZhaWxlZCB0byByZXF1ZXN0 IElSUSwgJWRcbiIsCi0JCQkJCWRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCX0gZWxzZSB7 Ci0JCQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX251bSA9IGlycV9udW07Ci0JCQlkaXNhYmxlX2ly cV9ub3N5bmMoaXJxX251bSk7Ci0KLQkJCXByX2RlYnVnKCJbRFNJXyVkXSBJUlEgJWQgcmVnaXN0 ZXJlZFxuIiwKLQkJCQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgsIGlycV9udW0pOwotCQl9Ci0JfQot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBfZHNpX2N0cmxfZGVzdHJveV9pc3IgLSB1bnJlZ2lz dGVyIElTUiBoYW5kbGVyCi0gKiBAZHNpX2N0cmw6IFBvaW50ZXIgdG8gYXNzb2NpYXRlZCBkc2lf Y3RybCBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHZvaWQgX2RzaV9jdHJsX2Rlc3Ryb3lfaXNyKHN0 cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaWYgKCFkc2lfY3RybCB8fCAhZHNpX2N0cmwt PnBkZXYgfHwgZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0gPCAwKQotCQlyZXR1cm47Ci0KLQlp ZiAoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9udW0gIT0gLTEpIHsKLQkJZGV2bV9mcmVlX2lycSgm ZHNpX2N0cmwtPnBkZXYtPmRldiwKLQkJCQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX251bSwgZHNp X2N0cmwpOwotCQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX251bSA9IC0xOwotCX0KLX0KLQotdm9p ZCBkc2lfY3RybF9lbmFibGVfc3RhdHVzX2ludGVycnVwdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9j dHJsLAotCQl1aW50MzJfdCBpbnRyX2lkeCwgc3RydWN0IGRzaV9ldmVudF9jYl9pbmZvICpldmVu dF9pbmZvKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8IGRz aV9jdHJsLT5pcnFfaW5mby5pcnFfbnVtID09IC0xIHx8Ci0JCQlpbnRyX2lkeCA+PSBEU0lfU1RB VFVTX0lOVEVSUlVQVF9DT1VOVCkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRz aV9jdHJsLT5pcnFfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGRzaV9jdHJsLT5pcnFf aW5mby5pcnFfc3RhdF9yZWZjb3VudFtpbnRyX2lkeF0gPT0gMCkgewotCQkvKiBlbmFibGUgaXJx IG9uIGZpcnN0IHJlcXVlc3QgKi8KLQkJaWYgKGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9t YXNrID09IDApCi0JCQllbmFibGVfaXJxKGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbnVtKTsKLQot CQkvKiB1cGRhdGUgaGFyZHdhcmUgbWFzayAqLwotCQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0 YXRfbWFzayB8PSBCSVQoaW50cl9pZHgpOwotCQlkc2lfY3RybC0+aHcub3BzLmVuYWJsZV9zdGF0 dXNfaW50ZXJydXB0cygmZHNpX2N0cmwtPmh3LAotCQkJCWRzaV9jdHJsLT5pcnFfaW5mby5pcnFf c3RhdF9tYXNrKTsKLQl9Ci0JKysoZHNpX2N0cmwtPmlycV9pbmZvLmlycV9zdGF0X3JlZmNvdW50 W2ludHJfaWR4XSk7Ci0KLQlpZiAoZXZlbnRfaW5mbykKLQkJZHNpX2N0cmwtPmlycV9pbmZvLmly cV9zdGF0X2NiW2ludHJfaWR4XSA9ICpldmVudF9pbmZvOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmZHNpX2N0cmwtPmlycV9pbmZvLmlycV9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgZHNp X2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmws Ci0JCXVpbnQzMl90IGludHJfaWR4KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAo IWRzaV9jdHJsIHx8IGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbnVtID09IC0xIHx8Ci0JCQlpbnRy X2lkeCA+PSBEU0lfU1RBVFVTX0lOVEVSUlVQVF9DT1VOVCkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9s b2NrX2lycXNhdmUoJmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotCi0JaWYg KGRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9yZWZjb3VudFtpbnRyX2lkeF0pCi0JCWlmICgt LShkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0YXRfcmVmY291bnRbaW50cl9pZHhdKSA9PSAwKSB7 Ci0JCQlkc2lfY3RybC0+aXJxX2luZm8uaXJxX3N0YXRfbWFzayAmPSB+QklUKGludHJfaWR4KTsK LQkJCWRzaV9jdHJsLT5ody5vcHMuZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKCZkc2lfY3RybC0+ aHcsCi0JCQkJCWRzaV9jdHJsLT5pcnFfaW5mby5pcnFfc3RhdF9tYXNrKTsKLQotCQkJLyogZG9u J3QgbmVlZCBpcnEgaWYgbm8gbGluZXMgYXJlIGVuYWJsZWQgKi8KLQkJCWlmIChkc2lfY3RybC0+ aXJxX2luZm8uaXJxX3N0YXRfbWFzayA9PSAwKQotCQkJCWRpc2FibGVfaXJxX25vc3luYyhkc2lf Y3RybC0+aXJxX2luZm8uaXJxX251bSk7Ci0JCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmRzaV9jdHJsLT5pcnFfaW5mby5pcnFfbG9jaywgZmxhZ3MpOwotfQotCi1pbnQgZHNpX2N0cmxf aG9zdF90aW1pbmdfdXBkYXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JaWYgKCFk c2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JaWYgKGRzaV9jdHJsLT5ody5vcHMuaG9zdF9zZXR1cCkKLQkJZHNpX2N0cmwt Pmh3Lm9wcy5ob3N0X3NldHVwKCZkc2lfY3RybC0+aHcsCi0JCQkJJmRzaV9jdHJsLT5ob3N0X2Nv bmZpZy5jb21tb25fY29uZmlnKTsKLQotCWlmIChkc2lfY3RybC0+aG9zdF9jb25maWcucGFuZWxf bW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJaWYgKGRzaV9jdHJsLT5ody5vcHMuY21kX2Vu Z2luZV9zZXR1cCkKLQkJCWRzaV9jdHJsLT5ody5vcHMuY21kX2VuZ2luZV9zZXR1cCgmZHNpX2N0 cmwtPmh3LAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25maWcsCi0JCQkJ CSZkc2lfY3RybC0+aG9zdF9jb25maWcudS5jbWRfZW5naW5lKTsKLQotCQlpZiAoZHNpX2N0cmwt Pmh3Lm9wcy5zZXR1cF9jbWRfc3RyZWFtKQotCQkJZHNpX2N0cmwtPmh3Lm9wcy5zZXR1cF9jbWRf c3RyZWFtKCZkc2lfY3RybC0+aHcsCi0JCQkJJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy52aWRlb190 aW1pbmcsCi0JCQkJZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWluZy5oX2FjdGl2ZSAq IDMsCi0JCQkJMHgwLCBOVUxMKTsKLQl9IGVsc2UgewotCQlwcl9lcnIoImludmFsaWQgcGFuZWwg bW9kZSBmb3IgcmVzb2x1dGlvbiBzd2l0Y2hcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9ob3N0X2luaXQoKSAtIEluaXRpYWxp emUgRFNJIGhvc3QgaGFyZHdhcmUuCi0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxl ciBoYW5kbGUuCi0gKgotICogSW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUgd2l0 aCBob3N0IGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgYnkKLSAqIGRzaV9jdHJsX3VwZGF0ZV9ob3N0 X2NvbmZpZygpLiBJbml0aWFsaXphdGlvbiBjYW4gYmUgcGVyZm9ybWVkIG9ubHkgZHVyaW5nCi0g KiBEU0lfQ1RSTF9QT1dFUl9DT1JFX0NMS19PTiBzdGF0ZSBhbmQgYWZ0ZXIgdGhlIFBIWSBTVyBy ZXNldCBoYXMgYmVlbgotICogcGVyZm9ybWVkLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9jdHJsX2hvc3RfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQot ewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9jdHJsKSB7Ci0JCXByX2VycigiSW52YWxpZCBw YXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3Ry bC0+Y3RybF9sb2NrKTsKLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRzaV9jdHJsLCBEU0lf Q1RSTF9PUF9IT1NUX0lOSVQsIDB4MSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0g Q29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0 cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlkc2lfY3RybC0+aHcu b3BzLnNldHVwX2xhbmVfbWFwKCZkc2lfY3RybC0+aHcsCi0JCQkJCSZkc2lfY3RybC0+aG9zdF9j b25maWcubGFuZV9tYXApOwotCi0JZHNpX2N0cmwtPmh3Lm9wcy5ob3N0X3NldHVwKCZkc2lfY3Ry bC0+aHcsCi0JCQkJICAgICZkc2lfY3RybC0+aG9zdF9jb25maWcuY29tbW9uX2NvbmZpZyk7Ci0K LQlpZiAoZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RF KSB7Ci0JCWRzaV9jdHJsLT5ody5vcHMuY21kX2VuZ2luZV9zZXR1cCgmZHNpX2N0cmwtPmh3LAot CQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLmNvbW1vbl9jb25maWcsCi0JCQkJCSZkc2lfY3Ry bC0+aG9zdF9jb25maWcudS5jbWRfZW5naW5lKTsKLQotCQlkc2lfY3RybC0+aHcub3BzLnNldHVw X2NtZF9zdHJlYW0oJmRzaV9jdHJsLT5odywKLQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnZp ZGVvX3RpbWluZywKLQkJCQlkc2lfY3RybC0+aG9zdF9jb25maWcudmlkZW9fdGltaW5nLmhfYWN0 aXZlICogMywKLQkJCQkweDAsCi0JCQkJTlVMTCk7Ci0JfSBlbHNlIHsKLQkJZHNpX2N0cmwtPmh3 Lm9wcy52aWRlb19lbmdpbmVfc2V0dXAoJmRzaV9jdHJsLT5odywKLQkJCQkJJmRzaV9jdHJsLT5o b3N0X2NvbmZpZy5jb21tb25fY29uZmlnLAotCQkJCQkmZHNpX2N0cmwtPmhvc3RfY29uZmlnLnUu dmlkZW9fZW5naW5lKTsKLQkJZHNpX2N0cmwtPmh3Lm9wcy5zZXRfdmlkZW9fdGltaW5nKCZkc2lf Y3RybC0+aHcsCi0JCQkJCSAgJmRzaV9jdHJsLT5ob3N0X2NvbmZpZy52aWRlb190aW1pbmcpOwot CX0KLQotCWRzaV9jdHJsX3NldHVwX2lzcihkc2lfY3RybCk7Ci0KLQlkc2lfY3RybC0+aHcub3Bz LmVuYWJsZV9zdGF0dXNfaW50ZXJydXB0cygmZHNpX2N0cmwtPmh3LCAweDApOwotCWRzaV9jdHJs LT5ody5vcHMuZW5hYmxlX2Vycm9yX2ludGVycnVwdHMoJmRzaV9jdHJsLT5odywgMHgwKTsKLQot CXByX2RlYnVnKCJbRFNJXyVkXUhvc3QgaW5pdGlhbGl6YXRpb24gY29tcGxldGVcbiIsCi0JCWRz aV9jdHJsLT5jZWxsX2luZGV4KTsKLQlkc2lfY3RybF91cGRhdGVfc3RhdGUoZHNpX2N0cmwsIERT SV9DVFJMX09QX0hPU1RfSU5JVCwgMHgxKTsKLWVycm9yOgotCW11dGV4X3VubG9jaygmZHNpX2N0 cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2N0cmxfc29mdF9yZXNl dChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCWlmICghZHNpX2N0cmwpCi0JCXJldHVy biAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JZHNpX2N0 cmwtPmh3Lm9wcy5zb2Z0X3Jlc2V0KCZkc2lfY3RybC0+aHcpOwotCW11dGV4X3VubG9jaygmZHNp X2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF1Tb2Z0IHJlc2V0IGNvbXBs ZXRlXG4iLCBkc2lfY3RybC0+Y2VsbF9pbmRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICog ZHNpX2N0cmxfaG9zdF9kZWluaXQoKSAtIERlLUluaXRpYWxpemUgRFNJIGhvc3QgaGFyZHdhcmUu Ci0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogRGUt aW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUuIEl0IGNhbiBiZSBwZXJmb3JtZWQg b25seSBkdXJpbmcKLSAqIERTSV9DVFJMX1BPV0VSX0NPUkVfQ0xLX09OIHN0YXRlIGFmdGVyIExJ TksgY2xvY2tzIGhhdmUgYmVlbiB0dXJuZWQgb2ZmLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9jdHJsX2hvc3RfZGVpbml0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0 cmwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZh bGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRz aV9jdHJsLT5jdHJsX2xvY2spOwotCi0JX2RzaV9jdHJsX2Rlc3Ryb3lfaXNyKGRzaV9jdHJsKTsK LQotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX0hPU1Rf SU5JVCwgMHgwKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0 YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRl eCwgcmMpOwotCQlwcl9lcnIoImRyaXZlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJfZGVidWcoIltEU0lfJWRdIEhvc3QgZGVpbml0 aXphdGlvbiBjb21wbGV0ZVxuIiwKLQkJZHNpX2N0cmwtPmNlbGxfaW5kZXgpOwotCWRzaV9jdHJs X3VwZGF0ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfSE9TVF9JTklULCAweDApOwotZXJy b3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19 Ci0KLS8qKgotICogZHNpX2N0cmxfdXBkYXRlX2hvc3RfY29uZmlnKCkgLSB1cGRhdGUgZHNpIGhv c3QgY29uZmlndXJhdGlvbgotICogQGRzaV9jdHJsOiAgICAgICAgICBEU0kgY29udHJvbGxlciBo YW5kbGUuCi0gKiBAY29uZmlnOiAgICAgICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24uCi0g KiBAZmxhZ3M6ICAgICAgICAgICAgIGRzaV9tb2RlX2ZsYWdzIG1vZGlmeWluZyB0aGUgYmVoYXZp b3IKLSAqCi0gKiBVcGRhdGVzIGRyaXZlciB3aXRoIG5ldyBIb3N0IGNvbmZpZ3VyYXRpb24gdG8g dXNlIGZvciBob3N0IGluaXRpYWxpemF0aW9uLgotICogVGhpcyBmdW5jdGlvbiBjYWxsIHdpbGwg b25seSB1cGRhdGUgdGhlIHNvZnR3YXJlIGNvbnRleHQuIFRoZSBzdG9yZWQKLSAqIGNvbmZpZ3Vy YXRpb24gaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGhvc3QgaXMgaW5pdGlhbGl6 ZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfdXBkYXRl X2hvc3RfY29uZmlnKHN0cnVjdCBkc2lfY3RybCAqY3RybCwKLQkJCQlzdHJ1Y3QgZHNpX2hvc3Rf Y29uZmlnICpjb25maWcsCi0JCQkJaW50IGZsYWdzLCB2b2lkICpjbGtfaGFuZGxlKQotewotCWlu dCByYyA9IDA7Ci0KLQlpZiAoIWN0cmwgfHwgIWNvbmZpZykgewotCQlwcl9lcnIoIkludmFsaWQg cGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmY3RybC0+ Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2N0cmxfdmFsaWRhdGVfcGFuZWxfaW5mbyhjdHJsLCBj b25maWcpOwotCWlmIChyYykgewotCQlwcl9lcnIoInBhbmVsIHZhbGlkYXRpb24gZmFpbGVkLCBy Yz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmICghKGZsYWdzICYgKERTSV9N T0RFX0ZMQUdfU0VBTUxFU1MgfCBEU0lfTU9ERV9GTEFHX1ZSUikpKSB7Ci0JCXJjID0gZHNpX2N0 cmxfdXBkYXRlX2xpbmtfZnJlcXMoY3RybCwgY29uZmlnLCBjbGtfaGFuZGxlKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHVwZGF0ZSBsaW5rIGZyZXF1ZW5jaWVzLCBy Yz0lZFxuIiwKLQkJCSAgICAgICBjdHJsLT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9 Ci0JfQotCi0JcHJfZGVidWcoIltEU0lfJWRdSG9zdCBjb25maWcgdXBkYXRlZFxuIiwgY3RybC0+ Y2VsbF9pbmRleCk7Ci0JbWVtY3B5KCZjdHJsLT5ob3N0X2NvbmZpZywgY29uZmlnLCBzaXplb2Yo Y3RybC0+aG9zdF9jb25maWcpKTsKLQljdHJsLT5tb2RlX2JvdW5kcy54ID0gY3RybC0+aG9zdF9j b25maWcudmlkZW9fdGltaW5nLmhfYWN0aXZlICoKLQkJCWN0cmwtPmhvcml6X2luZGV4OwotCWN0 cmwtPm1vZGVfYm91bmRzLnkgPSAwOwotCWN0cmwtPm1vZGVfYm91bmRzLncgPSBjdHJsLT5ob3N0 X2NvbmZpZy52aWRlb190aW1pbmcuaF9hY3RpdmU7Ci0JY3RybC0+bW9kZV9ib3VuZHMuaCA9IGN0 cmwtPmhvc3RfY29uZmlnLnZpZGVvX3RpbWluZy52X2FjdGl2ZTsKLQltZW1jcHkoJmN0cmwtPnJv aSwgJmN0cmwtPm1vZGVfYm91bmRzLCBzaXplb2YoY3RybC0+bW9kZV9ib3VuZHMpKTsKLQljdHJs LT5yb2kueCA9IDA7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmN0cmwtPmN0cmxfbG9jayk7Ci0J cmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9jdHJsX3ZhbGlkYXRlX3RpbWluZygpIC0gdmFs aWRhdGUgYSB2aWRlbyB0aW1pbmcgY29uZmlndXJhdGlvbgotICogQGRzaV9jdHJsOiAgICAgICBE U0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAdGltaW5nOiAgICAgICAgIFBvaW50ZXIgdG8gdGlt aW5nIGRhdGEuCi0gKgotICogRHJpdmVyIHdpbGwgdmFsaWRhdGUgaWYgdGhlIHRpbWluZyBjb25m aWd1cmF0aW9uIGlzIHN1cHBvcnRlZCBvbiB0aGUKLSAqIGNvbnRyb2xsZXIgaGFyZHdhcmUuCi0g KgotICogUmV0dXJuOiBlcnJvciBjb2RlIGlmIHRpbWluZyBpcyBub3Qgc3VwcG9ydGVkLgotICov Ci1pbnQgZHNpX2N0cmxfdmFsaWRhdGVfdGltaW5nKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmws Ci0JCQkgICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlKQotewotCWludCByYyA9IDA7Ci0K LQlpZiAoIWRzaV9jdHJsIHx8ICFtb2RlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9s b2NrKTsKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCi0JcmV0dXJuIHJj OwotfQotCi0vKioKLSAqIGRzaV9jdHJsX2NtZF90cmFuc2ZlcigpIC0gVHJhbnNmZXIgY29tbWFu ZHMgb24gRFNJIGxpbmsKLSAqIEBkc2lfY3RybDogICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIg aGFuZGxlLgotICogQG1zZzogICAgICAgICAgICAgICAgICBNZXNzYWdlIHRvIHRyYW5zZmVyIG9u IERTSSBsaW5rLgotICogQGZsYWdzOiAgICAgICAgICAgICAgICBNb2RpZmllcnMgZm9yIG1lc3Nh Z2UgdHJhbnNmZXIuCi0gKgotICogQ29tbWFuZCB0cmFuc2ZlciBjYW4gYmUgZG9uZSBvbmx5IHdo ZW4gY29tbWFuZCBlbmdpbmUgaXMgZW5hYmxlZC4gVGhlCi0gKiB0cmFuc2ZlciBBUEkgd2lsbCBi bG9jayB1bnRpbCBlaXRoZXIgdGhlIGNvbW1hbmQgdHJhbnNmZXIgZmluaXNoZXMgb3IKLSAqIHRo ZSB0aW1lb3V0IHZhbHVlIGlzIHJlYWNoZWQuIElmIHRoZSB0cmlnZ2VyIGlzIGRlZmVycmVkLCBp dCB3aWxsIHJldHVybgotICogd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSB0cmFuc2Zlci4gQ29tbWFu ZCBwYXJhbWV0ZXJzIGFyZSBwcm9ncmFtbWVkIHRvCi0gKiBoYXJkd2FyZS4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9jbWRfdHJhbnNmZXIoc3RydWN0IGRz aV9jdHJsICpkc2lfY3RybCwKLQkJCSAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnLAot CQkJICB1MzIgZmxhZ3MpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgIW1z ZykgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJs X2NoZWNrX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9DTURfVFgsIDB4MCk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWlsZWQsIHJj PSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290byBlcnJv cjsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfUkVBRCkgewotCQlyYyA9IGRzaV9t ZXNzYWdlX3J4KGRzaV9jdHJsLCBtc2csIGZsYWdzKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJy ZWFkIG1lc3NhZ2UgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCX0gZWxzZSB7Ci0JCXJjID0gZHNp X21lc3NhZ2VfdHgoZHNpX2N0cmwsIG1zZywgZmxhZ3MpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIo ImNvbW1hbmQgbXNnIHRyYW5zZmVyIGZhaWxlZCwgcmMgPSAlZFxuIiwgcmMpOwotCX0KLQotCWRz aV9jdHJsX3VwZGF0ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfQ01EX1RYLCAweDApOwot Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiBy YzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9jbWRfdHhfdHJpZ2dlcigpIC0gVHJpZ2dlciBhIGRl ZmVycmVkIGNvbW1hbmQuCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgICBEU0kgY29udHJvbGxl ciBoYW5kbGUuCi0gKiBAZmxhZ3M6ICAgICAgICAgICAgICAgICBNb2RpZmllcnMuCi0gKgotICog UmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfY21kX3R4X3RyaWdnZXIoc3Ry dWN0IGRzaV9jdHJsICpkc2lfY3RybCwgdTMyIGZsYWdzKQotewotCWludCByYyA9IDAsIHJldCA9 IDA7Ci0JdTMyIHN0YXR1cyA9IDA7Ci0JdTMyIG1hc2sgPSAoRFNJX0NNRF9NT0RFX0RNQV9ET05F KTsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2sp OwotCi0JaWYgKCEoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfQlJPQURDQVNUX01BU1RFUikpCi0JCWRz aV9jdHJsLT5ody5vcHMudHJpZ2dlcl9jb21tYW5kX2RtYSgmZHNpX2N0cmwtPmh3KTsKLQotCWlm ICgoZmxhZ3MgJiBEU0lfQ1RSTF9DTURfQlJPQURDQVNUKSAmJgotCQkoZmxhZ3MgJiBEU0lfQ1RS TF9DTURfQlJPQURDQVNUX01BU1RFUikpIHsKLQkJZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRl cnJ1cHQoZHNpX2N0cmwsCi0JCQkJCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FLCBOVUxMKTsK LQkJcmVpbml0X2NvbXBsZXRpb24oJmRzaV9jdHJsLT5pcnFfaW5mby5jbWRfZG1hX2RvbmUpOwot Ci0JCS8qIHRyaWdnZXIgY29tbWFuZCAqLwotCQlkc2lfY3RybC0+aHcub3BzLnRyaWdnZXJfY29t bWFuZF9kbWEoJmRzaV9jdHJsLT5odyk7Ci0KLQkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KAotCQkJCSZkc2lfY3RybC0+aXJxX2luZm8uY21kX2RtYV9kb25lLAotCQkJCW1zZWNz X3RvX2ppZmZpZXMoRFNJX0NUUkxfVFhfVE9fTVMpKTsKLQotCQlpZiAocmV0ID09IDApIHsKLQkJ CXN0YXR1cyA9IGRzaV9jdHJsLT5ody5vcHMuZ2V0X2ludGVycnVwdF9zdGF0dXMoCi0JCQkJCQkJ CSZkc2lfY3RybC0+aHcpOwotCQkJaWYgKHN0YXR1cyAmIG1hc2spIHsKLQkJCQlzdGF0dXMgfD0g KERTSV9DTURfTU9ERV9ETUFfRE9ORSB8Ci0JCQkJCQlEU0lfQlRBX0RPTkUpOwotCQkJCWRzaV9j dHJsLT5ody5vcHMuY2xlYXJfaW50ZXJydXB0X3N0YXR1cygKLQkJCQkJCQkJJmRzaV9jdHJsLT5o dywKLQkJCQkJCQkJc3RhdHVzKTsKLQkJCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1 cHQoZHNpX2N0cmwsCi0JCQkJCQlEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSk7Ci0JCQkJY29t cGxldGVfYWxsKCZkc2lfY3RybC0+aXJxX2luZm8uY21kX2RtYV9kb25lKTsKLQkJCQlwcl93YXJu KCJkbWFfdHggZG9uZSBidXQgaXJxIG5vdCB0cmlnZ2VyZWRcbiIpOwotCQkJfSBlbHNlIHsKLQkJ CQlyYyA9IC1FVElNRURPVVQ7Ci0JCQkJZHNpX2N0cmxfZGlzYWJsZV9zdGF0dXNfaW50ZXJydXB0 KGRzaV9jdHJsLAotCQkJCQkJRFNJX1NJTlRfQ01EX01PREVfRE1BX0RPTkUpOwotCQkJCXByX2Vy cigiW0RTSV8lZF1Db21tYW5kIHRyYW5zZmVyIGZhaWxlZFxuIiwKLQkJCQkJCWRzaV9jdHJsLT5j ZWxsX2luZGV4KTsKLQkJCX0KLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0 cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIF9kc2lfY3RybF9jYWNoZV9taXNy IC0gQ2FjaGUgZnJhbWUgTUlTUiB2YWx1ZQotICogQGRzaV9jdHJsOiBQb2ludGVyIHRvIGFzc29j aWF0ZWQgZHNpX2N0cmwgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIF9kc2lfY3RybF9jYWNo ZV9taXNyKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpCi17Ci0JdTMyIG1pc3I7Ci0KLQlpZiAo IWRzaV9jdHJsIHx8ICFkc2lfY3RybC0+aHcub3BzLmNvbGxlY3RfbWlzcikKLQkJcmV0dXJuOwot Ci0JbWlzciA9IGRzaV9jdHJsLT5ody5vcHMuY29sbGVjdF9taXNyKCZkc2lfY3RybC0+aHcsCi0J CQkJZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUpOwotCi0JaWYgKG1pc3IpCi0JCWRz aV9jdHJsLT5taXNyX2NhY2hlID0gbWlzcjsKLQotCXByX2RlYnVnKCJEU0lfJWQgbWlzcl9jYWNo ZSA9ICV4XG4iLCBkc2lfY3RybC0+Y2VsbF9pbmRleCwKLQkJZHNpX2N0cmwtPm1pc3JfY2FjaGUp OwotCi19Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X3Bvd2VyX3N0YXRlKCkgLSBzZXQgcG93ZXIg c3RhdGUgZm9yIGRzaSBjb250cm9sbGVyCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250 cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAgUG93ZXIgc3RhdGUuCi0gKgot ICogU2V0IHBvd2VyIHN0YXRlIGZvciBEU0kgY29udHJvbGxlci4gUG93ZXIgc3RhdGUgY2FuIGJl IGNoYW5nZWQgb25seSB3aGVuCi0gKiBDb250cm9sbGVyLCBWaWRlbyBhbmQgQ29tbWFuZCBlbmdp bmVzIGFyZSB0dXJuZWQgb2ZmLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJ ICAgICBlbnVtIGRzaV9wb3dlcl9zdGF0ZSBzdGF0ZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYg KCFkc2lfY3RybCB8fCAoc3RhdGUgPj0gRFNJX0NUUkxfUE9XRVJfTUFYKSkgewotCQlwcl9lcnIo IkludmFsaWQgUGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9j aygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2NoZWNrX3N0YXRlKGRz aV9jdHJsLCBEU0lfQ1RSTF9PUF9QT1dFUl9TVEFURV9DSEFOR0UsCi0JCQkJICBzdGF0ZSk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0ZSBjaGVjayBmYWls ZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlpZiAoc3RhdGUgPT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgewot CQlyYyA9IGRzaV9jdHJsX2VuYWJsZV9zdXBwbGllcyhkc2lfY3RybCwgdHJ1ZSk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJbJWRdZmFpbGVkIHRvIGVuYWJsZSB2b2x0YWdlIHN1cHBsaWVzLCBy Yz0lZFxuIiwKLQkJCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQkJZ290byBl cnJvcjsKLQkJfQotCX0gZWxzZSBpZiAoc3RhdGUgPT0gRFNJX0NUUkxfUE9XRVJfVlJFR19PRkYp IHsKLQkJaWYgKGRzaV9jdHJsLT5taXNyX2VuYWJsZSkKLQkJCV9kc2lfY3RybF9jYWNoZV9taXNy KGRzaV9jdHJsKTsKLQotCQlyYyA9IGRzaV9jdHJsX2VuYWJsZV9zdXBwbGllcyhkc2lfY3RybCwg ZmFsc2UpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVkXWZhaWxlZCB0byBkaXNhYmxlIHZy ZWcgc3VwcGxpZXMsIHJjPSVkXG4iLAotCQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBy Yyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JcHJfZGVidWcoIltEU0lfJWRdIFBvd2Vy IHN0YXRlIHVwZGF0ZWQgdG8gJWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LAotCQkgc3RhdGUp OwotCWRzaV9jdHJsX3VwZGF0ZV9zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1BfUE9XRVJfU1RB VEVfQ0hBTkdFLCBzdGF0ZSk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJs X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfdHBnX3N0YXRl KCkgLSBlbmFibGUvZGlzYWJsZSB0ZXN0IHBhdHRlcm4gb24gdGhlIGNvbnRyb2xsZXIKLSAqIEBk c2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQG9uOiAgICAgICAg ICAgICAgICBlbmFibGUvZGlzYWJsZSB0ZXN0IHBhdHRlcm4uCi0gKgotICogVGVzdCBwYXR0ZXJu IGNhbiBiZSBlbmFibGVkIG9ubHkgYWZ0ZXIgVmlkZW8gZW5naW5lIChmb3IgdmlkZW8gbW9kZSBw YW5lbHMpCi0gKiBvciBjb21tYW5kIGVuZ2luZSAoZm9yIGNtZCBtb2RlIHBhbmVscykgaXMgZW5h YmxlZC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRf dHBnX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgb24pCi17Ci0JaW50IHJj ID0gMDsKLQotCWlmICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xv Y2spOwotCi0JcmMgPSBkc2lfY3RybF9jaGVja19zdGF0ZShkc2lfY3RybCwgRFNJX0NUUkxfT1Bf VFBHLCBvbik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiW0RTSV8lZF0gQ29udHJvbGxlciBzdGF0 ZSBjaGVjayBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAgICAgZHNpX2N0cmwtPmNlbGxfaW5kZXgs IHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAob24pIHsKLQkJaWYgKGRzaV9jdHJsLT5o b3N0X2NvbmZpZy5wYW5lbF9tb2RlID09IERTSV9PUF9WSURFT19NT0RFKSB7Ci0JCQlkc2lfY3Ry bC0+aHcub3BzLnZpZGVvX3Rlc3RfcGF0dGVybl9zZXR1cCgmZHNpX2N0cmwtPmh3LAotCQkJCQkJ CSAgRFNJX1RFU1RfUEFUVEVSTl9JTkMsCi0JCQkJCQkJICAweEZGRkYpOwotCQl9IGVsc2Ugewot CQkJZHNpX2N0cmwtPmh3Lm9wcy5jbWRfdGVzdF9wYXR0ZXJuX3NldHVwKAotCQkJCQkJCSZkc2lf Y3RybC0+aHcsCi0JCQkJCQkJRFNJX1RFU1RfUEFUVEVSTl9JTkMsCi0JCQkJCQkJMHhGRkZGLAot CQkJCQkJCTB4MCk7Ci0JCX0KLQl9Ci0JZHNpX2N0cmwtPmh3Lm9wcy50ZXN0X3BhdHRlcm5fZW5h YmxlKCZkc2lfY3RybC0+aHcsIG9uKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXVNldCB0ZXN0IHBh dHRlcm4gc3RhdGU9JWRcbiIsCi0JCWRzaV9jdHJsLT5jZWxsX2luZGV4LCBvbik7Ci0JZHNpX2N0 cmxfdXBkYXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9UUEcsIG9uKTsKLWVycm9yOgot CW11dGV4X3VubG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi0v KioKLSAqIGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZSgpIC0gc2V0IGhvc3QgZW5naW5l IHN0YXRlCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgRFNJIENvbnRyb2xsZXIgaGFuZGxlLgot ICogQHN0YXRlOiAgICAgICAgICAgICAgIEVuZ2luZSBzdGF0ZS4KLSAqCi0gKiBIb3N0IGVuZ2lu ZSBzdGF0ZSBjYW4gYmUgbW9kaWZpZWQgb25seSB3aGVuIERTSSBjb250cm9sbGVyIHBvd2VyIHN0 YXRlIGlzCi0gKiBzZXQgdG8gRFNJX0NUUkxfUE9XRVJfTElOS19DTEtfT04gYW5kIGNtZCwgdmlk ZW8gZW5naW5lcyBhcmUgZGlzYWJsZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNp X2N0cmwsCi0JCQkJICAgZW51bSBkc2lfZW5naW5lX3N0YXRlIHN0YXRlKQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIWRzaV9jdHJsIHx8IChzdGF0ZSA+PSBEU0lfQ1RSTF9FTkdJTkVfTUFYKSkg ewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlyYyA9IGRzaV9jdHJsX2No ZWNrX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9IT1NUX0VOR0lORSwgc3RhdGUpOwotCWlm IChyYykgewotCQlwcl9lcnIoIltEU0lfJWRdIENvbnRyb2xsZXIgc3RhdGUgY2hlY2sgZmFpbGVk LCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JaWYgKHN0YXRlID09IERTSV9DVFJMX0VOR0lORV9PTikKLQkJZHNpX2N0 cmwtPmh3Lm9wcy5jdHJsX2VuKCZkc2lfY3RybC0+aHcsIHRydWUpOwotCWVsc2UKLQkJZHNpX2N0 cmwtPmh3Lm9wcy5jdHJsX2VuKCZkc2lfY3RybC0+aHcsIGZhbHNlKTsKLQotCXByX2RlYnVnKCJb RFNJXyVkXSBTZXQgaG9zdCBlbmdpbmUgc3RhdGUgPSAlZFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5k ZXgsCi0JCSBzdGF0ZSk7Ci0JZHNpX2N0cmxfdXBkYXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RS TF9PUF9IT1NUX0VOR0lORSwgc3RhdGUpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3Ry bC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X2Nt ZF9lbmdpbmVfc3RhdGUoKSAtIHNldCBjb21tYW5kIGVuZ2luZSBzdGF0ZQotICogQGRzaV9jdHJs OiAgICAgICAgICAgIERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAg ICAgICBFbmdpbmUgc3RhdGUuCi0gKgotICogQ29tbWFuZCBlbmdpbmUgc3RhdGUgY2FuIGJlIG1v ZGlmaWVkIG9ubHkgd2hlbiBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcwotICogc2V0IHRv IERTSV9DVFJMX1BPV0VSX0xJTktfQ0xLX09OLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAq ZHNpX2N0cmwsCi0JCQkJICBlbnVtIGRzaV9lbmdpbmVfc3RhdGUgc3RhdGUpCi17Ci0JaW50IHJj ID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgKHN0YXRlID49IERTSV9DVFJMX0VOR0lORV9NQVgp KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2N0cmxf Y2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX0NNRF9FTkdJTkUsIHN0YXRlKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVyIHN0YXRlIGNoZWNrIGZhaWxl ZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9pbmRleCwgcmMpOwotCQlnb3Rv IGVycm9yOwotCX0KLQotCWlmIChzdGF0ZSA9PSBEU0lfQ1RSTF9FTkdJTkVfT04pCi0JCWRzaV9j dHJsLT5ody5vcHMuY21kX2VuZ2luZV9lbigmZHNpX2N0cmwtPmh3LCB0cnVlKTsKLQllbHNlCi0J CWRzaV9jdHJsLT5ody5vcHMuY21kX2VuZ2luZV9lbigmZHNpX2N0cmwtPmh3LCBmYWxzZSk7Ci0K LQlwcl9kZWJ1ZygiW0RTSV8lZF0gU2V0IGNtZCBlbmdpbmUgc3RhdGUgPSAlZFxuIiwgZHNpX2N0 cmwtPmNlbGxfaW5kZXgsCi0JCSBzdGF0ZSk7Ci0JZHNpX2N0cmxfdXBkYXRlX3N0YXRlKGRzaV9j dHJsLCBEU0lfQ1RSTF9PUF9DTURfRU5HSU5FLCBzdGF0ZSk7Ci1lcnJvcjoKLQltdXRleF91bmxv Y2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lf Y3RybF9zZXRfdmlkX2VuZ2luZV9zdGF0ZSgpIC0gc2V0IHZpZGVvIGVuZ2luZSBzdGF0ZQotICog QGRzaV9jdHJsOiAgICAgICAgICAgIERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTog ICAgICAgICAgICAgICBFbmdpbmUgc3RhdGUuCi0gKgotICogVmlkZW8gZW5naW5lIHN0YXRlIGNh biBiZSBtb2RpZmllZCBvbmx5IHdoZW4gRFNJIGNvbnRyb2xsZXIgcG93ZXIgc3RhdGUgaXMKLSAq IHNldCB0byBEU0lfQ1RSTF9QT1dFUl9MSU5LX0NMS19PTi4KLSAqCi0gKiBSZXR1cm46IGVycm9y IGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfdmlkX2VuZ2luZV9zdGF0ZShzdHJ1Y3QgZHNp X2N0cmwgKmRzaV9jdHJsLAotCQkJCSAgZW51bSBkc2lfZW5naW5lX3N0YXRlIHN0YXRlKQotewot CWludCByYyA9IDA7Ci0JYm9vbCBvbjsKLQotCWlmICghZHNpX2N0cmwgfHwgKHN0YXRlID49IERT SV9DVFJMX0VOR0lORV9NQVgpKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsK LQotCXJjID0gZHNpX2N0cmxfY2hlY2tfc3RhdGUoZHNpX2N0cmwsIERTSV9DVFJMX09QX1ZJRF9F TkdJTkUsIHN0YXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXSBDb250cm9sbGVy IHN0YXRlIGNoZWNrIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfY3RybC0+Y2VsbF9p bmRleCwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW9uID0gKHN0YXRlID09IERTSV9DVFJM X0VOR0lORV9PTikgPyB0cnVlIDogZmFsc2U7Ci0JZHNpX2N0cmwtPmh3Lm9wcy52aWRlb19lbmdp bmVfZW4oJmRzaV9jdHJsLT5odywgb24pOwotCi0JLyogcGVyZm9ybSBhIHJlc2V0IHdoZW4gdHVy bmluZyBvZmYgdmlkZW8gZW5naW5lICovCi0JaWYgKCFvbikKLQkJZHNpX2N0cmwtPmh3Lm9wcy5z b2Z0X3Jlc2V0KCZkc2lfY3RybC0+aHcpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFNldCB2aWRl byBlbmdpbmUgc3RhdGUgPSAlZFxuIiwgZHNpX2N0cmwtPmNlbGxfaW5kZXgsCi0JCSBzdGF0ZSk7 Ci0JZHNpX2N0cmxfdXBkYXRlX3N0YXRlKGRzaV9jdHJsLCBEU0lfQ1RSTF9PUF9WSURfRU5HSU5F LCBzdGF0ZSk7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfdWxwcygpIC0gc2V0IFVMUFMg c3RhdGUgZm9yIERTSSBsYW5lcy4KLSAqIEBkc2lfY3RybDoJCURTSSBjb250cm9sbGVyIGhhbmRs ZS4KLSAqIEBlbmFibGU6CQllbmFibGUvZGlzYWJsZSBVTFBTLgotICoKLSAqIFVMUFMgY2FuIGJl IGVuYWJsZWQvZGlzYWJsZWQgYWZ0ZXIgRFNJIGhvc3QgZW5naW5lIGlzIHR1cm5lZCBvbi4KLSAq Ci0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfdWxwcyhzdHJ1 Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKCFkc2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZHNpX2N0cmwtPmN0cmxfbG9jayk7Ci0KLQlp ZiAoZW5hYmxlKQotCQlyYyA9IGRzaV9lbmFibGVfdWxwcyhkc2lfY3RybCk7Ci0JZWxzZQotCQly YyA9IGRzaV9kaXNhYmxlX3VscHMoZHNpX2N0cmwpOwotCi0JaWYgKHJjKSB7Ci0JCXByX2Vycigi W0RTSV8lZF0gVWxwcyBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQlkc2lf Y3RybC0+Y2VsbF9pbmRleCwgZW5hYmxlLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByX2Rl YnVnKCJbRFNJXyVkXSBVTFBTIHN0YXRlID0gJWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBl bmFibGUpOwotCi1lcnJvcjoKLQltdXRleF91bmxvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfY2xhbXBfc3RhdGUoKSAtIHNl dCBjbGFtcCBzdGF0ZSBmb3IgRFNJIHBoeQotICogQGRzaV9jdHJsOiAgICAgICAgICAgICBEU0kg Y29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgICAgIGVuYWJsZS9kaXNh YmxlIGNsYW1waW5nLgotICoKLSAqIENsYW1wcyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB3aGls ZSBEU0kgY29udHJvbGxlciBpcyBzdGlsbCB0dXJuZWQgb24uCi0gKgotICogUmV0dXJuOiBlcnJv ciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X2NsYW1wX3N0YXRlKHN0cnVjdCBkc2lfY3Ry bCAqZHNpX2N0cmwsCi0JCWJvb2wgZW5hYmxlLCBib29sIHVscHNfZW5hYmxlZCkKLXsKLQlpbnQg cmMgPSAwOwotCi0JaWYgKCFkc2lfY3RybCkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFkc2lfY3RybC0+aHcub3BzLmNsYW1w X2VuYWJsZSB8fAotCQkJIWRzaV9jdHJsLT5ody5vcHMuY2xhbXBfZGlzYWJsZSkgewotCQlwcl9k ZWJ1ZygiTm8gY2xhbXAgY29udHJvbCBmb3IgRFNJIGNvbnRyb2xsZXJcbiIpOwotCQlyZXR1cm4g MDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNp X2VuYWJsZV9pb19jbGFtcChkc2lfY3RybCwgZW5hYmxlLCB1bHBzX2VuYWJsZWQpOwotCWlmIChy YykgewotCQlwcl9lcnIoIltEU0lfJWRdIEZhaWxlZCB0byBlbmFibGUgSU8gY2xhbXBcbiIsCi0J CQlkc2lfY3RybC0+Y2VsbF9pbmRleCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJfZGVidWco IltEU0lfJWRdIENsYW1wIHN0YXRlID0gJWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBlbmFi bGUpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1 cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X2Nsb2NrX3NvdXJjZSgpIC0gc2V0IGNs b2NrIHNvdXJjZSBmcHIgZHNpIGxpbmsgY2xvY2tzCi0gKiBAZHNpX2N0cmw6ICAgICAgICBEU0kg Y29udHJvbGxlciBoYW5kbGUuCi0gKiBAc291cmNlX2Nsa3M6ICAgICBTb3VyY2UgY2xvY2tzIGZv ciBEU0kgbGluayBjbG9ja3MuCi0gKgotICogQ2xvY2sgc291cmNlIHNob3VsZCBiZSBjaGFuZ2Vk IHdoaWxlIGxpbmsgY2xvY2tzIGFyZSBkaXNhYmxlZC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNv ZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfY2xvY2tfc291cmNlKHN0cnVjdCBkc2lfY3RybCAq ZHNpX2N0cmwsCi0JCQkgICAgICBzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqc291cmNlX2Nsa3Mp Ci17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX2N0cmwgfHwgIXNvdXJjZV9jbGtzKSB7Ci0J CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlt dXRleF9sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQotCXJjID0gZHNpX2Nsa191cGRhdGVf cGFyZW50KHNvdXJjZV9jbGtzLCAmZHNpX2N0cmwtPmNsa19pbmZvLnJjZ19jbGtzKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJbRFNJXyVkXUZhaWxlZCB0byB1cGRhdGUgbGluayBjbGsgcGFyZW50 LCByYz0lZFxuIiwKLQkJICAgICAgIGRzaV9jdHJsLT5jZWxsX2luZGV4LCByYyk7Ci0JCSh2b2lk KWRzaV9jbGtfdXBkYXRlX3BhcmVudCgmZHNpX2N0cmwtPmNsa19pbmZvLnBsbF9vcF9jbGtzLAot CQkJCQkgICAgJmRzaV9jdHJsLT5jbGtfaW5mby5yY2dfY2xrcyk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JZHNpX2N0cmwtPmNsa19pbmZvLnBsbF9vcF9jbGtzLmJ5dGVfY2xrID0gc291cmNlX2Ns a3MtPmJ5dGVfY2xrOwotCWRzaV9jdHJsLT5jbGtfaW5mby5wbGxfb3BfY2xrcy5waXhlbF9jbGsg PSBzb3VyY2VfY2xrcy0+cGl4ZWxfY2xrOwotCi0JcHJfZGVidWcoIltEU0lfJWRdIFNvdXJjZSBj bG9ja3MgYXJlIHVwZGF0ZWRcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4KTsKLQotZXJyb3I6Ci0J bXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8q KgotICogZHNpX2N0cmxfc2V0dXBfbWlzcigpIC0gU2V0dXAgZnJhbWUgTUlTUgotICogQGRzaV9j dHJsOiAgICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZTogICAg ICAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgTUlTUi4KLSAqIEBmcmFtZV9jb3VudDogICAgICAg ICAgIE51bWJlciBvZiBmcmFtZXMgdG8gYWNjdW11bGF0ZSBNSVNSLgotICoKLSAqIFJldHVybjog ZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldHVwX21pc3Ioc3RydWN0IGRzaV9jdHJs ICpkc2lfY3RybCwKLQkJCWJvb2wgZW5hYmxlLAotCQkJdTMyIGZyYW1lX2NvdW50KQotewotCWlm ICghZHNpX2N0cmwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWlmICghZHNpX2N0cmwtPmh3Lm9wcy5zZXR1cF9taXNyKQotCQlyZXR1 cm4gMDsKLQotCW11dGV4X2xvY2soJmRzaV9jdHJsLT5jdHJsX2xvY2spOwotCWRzaV9jdHJsLT5t aXNyX2VuYWJsZSA9IGVuYWJsZTsKLQlkc2lfY3RybC0+aHcub3BzLnNldHVwX21pc3IoJmRzaV9j dHJsLT5odywKLQkJCWRzaV9jdHJsLT5ob3N0X2NvbmZpZy5wYW5lbF9tb2RlLAotCQkJZW5hYmxl LCBmcmFtZV9jb3VudCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfY3RybC0+Y3RybF9sb2NrKTsKLQly ZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9jb2xsZWN0X21pc3IoKSAtIFJlYWQgZnJh bWUgTUlTUgotICogQGRzaV9jdHJsOiAgICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxl LgotICoKLSAqIFJldHVybjogTUlTUiB2YWx1ZS4KLSAqLwotdTMyIGRzaV9jdHJsX2NvbGxlY3Rf bWlzcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKQotewotCXUzMiBtaXNyOwotCi0JaWYgKCFk c2lfY3RybCB8fCAhZHNpX2N0cmwtPmh3Lm9wcy5jb2xsZWN0X21pc3IpCi0JCXJldHVybiAwOwot Ci0JbWlzciA9IGRzaV9jdHJsLT5ody5vcHMuY29sbGVjdF9taXNyKCZkc2lfY3RybC0+aHcsCi0J CQkJZHNpX2N0cmwtPmhvc3RfY29uZmlnLnBhbmVsX21vZGUpOwotCWlmICghbWlzcikKLQkJbWlz ciA9IGRzaV9jdHJsLT5taXNyX2NhY2hlOwotCi0JcHJfZGVidWcoIkRTSV8lZCBjYWNoZWQgbWlz ciA9ICV4LCBmaW5hbCA9ICV4XG4iLAotCQlkc2lfY3RybC0+Y2VsbF9pbmRleCwgZHNpX2N0cmwt Pm1pc3JfY2FjaGUsIG1pc3IpOwotCi0JcmV0dXJuIG1pc3I7Ci19Ci0KLS8qKgotICogZHNpX2N0 cmxfZHJ2X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIgZm9yIGRzaSBjb250 cm9sbGVyCi0gKi8KLXZvaWQgZHNpX2N0cmxfZHJ2X3JlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZv cm1fZHJpdmVyX3JlZ2lzdGVyKCZkc2lfY3RybF9kcml2ZXIpOwotfQotCi0vKioKLSAqIGRzaV9j dHJsX2Rydl91bnJlZ2lzdGVyKCkgLSB1bnJlZ2lzdGVyIHBsYXRmb3JtIGRyaXZlcgotICovCi12 b2lkIGRzaV9jdHJsX2Rydl91bnJlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3Vu cmVnaXN0ZXIoJmRzaV9jdHJsX2RyaXZlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9jdHJsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MjYzNzIu LjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybC5o CisrKyAvZGV2L251bGwKQEAgLTEsNjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRFNJX0NUUkxfSF8KLSNkZWZpbmUgX0RTSV9DVFJM X0hfCi0KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0KLSNpbmNsdWRlICJkc2lfZGVmcy5o IgotI2luY2x1ZGUgImRzaV9jdHJsX2h3LmgiCi0jaW5jbHVkZSAiZHNpX2Nsay5oIgotI2luY2x1 ZGUgImRzaV9wd3IuaCIKLSNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Ci0KLS8qCi0gKiBE U0kgQ29tbWFuZCB0cmFuc2ZlciBtb2RpZmllcnMKLSAqIEBEU0lfQ1RSTF9DTURfUkVBRDogICAg ICAgICAgICAgVGhlIGN1cnJlbnQgdHJhbnNmZXIgaW52b2x2ZXMgcmVhZGluZyBkYXRhLgotICog QERTSV9DVFJMX0NNRF9CUk9BRENBU1Q6ICAgICAgICBUaGUgY3VycmVudCB0cmFuc2ZlciBuZWVk cyB0byBiZSBkb25lIGluCi0gKgkJCQkgICBicm9hZGNhc3QgbW9kZSB0byBtdWx0aXBsZSBzbGF2 ZXMuCi0gKiBARFNJX0NUUkxfQ01EX0JST0FEQ0FTVF9NQVNURVI6IFRoaXMgY29udHJvbGxlciBp cyB0aGUgbWFzdGVyIGFuZCB0aGUgc2xhdmVzCi0gKgkJCQkgICBzeW5jIHRvIHRoaXMgdHJpZ2dl ci4KLSAqIEBEU0lfQ1RSTF9DTURfREVGRVJfVFJJR0dFUjogICAgRGVmZXIgdGhlIGNvbW1hbmQg dHJpZ2dlciB0byBsYXRlci4KLSAqIEBEU0lfQ1RSTF9DTURfRklGT19TVE9SRTogICAgICAgVXNl IEZJRk8gZm9yIGNvbW1hbmQgdHJhbnNmZXIgaW4gcGxhY2Ugb2YKLSAqCQkJCSAgIHJlYWRpbmcg ZGF0YSBmcm9tIG1lbW9yeS4KLSAqIEBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZOiAgICAgRmV0 Y2ggY29tbWFuZCBmcm9tIG1lbW9yeSB0aHJvdWdoIEFYSSBidXMKLSAqCQkJCSAgIGFuZCB0cmFu c2ZlciBpdC4KLSAqLwotI2RlZmluZSBEU0lfQ1RSTF9DTURfUkVBRCAgICAgICAgICAgICAweDEK LSNkZWZpbmUgRFNJX0NUUkxfQ01EX0JST0FEQ0FTVCAgICAgICAgMHgyCi0jZGVmaW5lIERTSV9D VFJMX0NNRF9CUk9BRENBU1RfTUFTVEVSIDB4NAotI2RlZmluZSBEU0lfQ1RSTF9DTURfREVGRVJf VFJJR0dFUiAgICAweDgKLSNkZWZpbmUgRFNJX0NUUkxfQ01EX0ZJRk9fU1RPUkUgICAgICAgMHgx MAotI2RlZmluZSBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZICAgICAweDIwCi0KLS8qKgotICog ZW51bSBkc2lfcG93ZXJfc3RhdGUgLSBkZWZpbmVzIHBvd2VyIHN0YXRlcyBmb3IgZHNpIGNvbnRy b2xsZXIuCi0gKiBARFNJX0NUUkxfUE9XRVJfVlJFR19PRkY6ICAgIERpZ2l0YWwgYW5kIGFuYWxv ZyBzdXBwbGllcyBmb3IgRFNJIGNvbnRyb2xsZXIKLQkJCQl0dXJuZWQgb2ZmCi0gKiBARFNJX0NU UkxfUE9XRVJfVlJFR19PTjogICAgIERpZ2l0YWwgYW5kIGFuYWxvZyBzdXBwbGllcyBmb3IgRFNJ IGNvbnRyb2xsZXIKLSAqIEBEU0lfQ1RSTF9QT1dFUl9NQVg6ICAgICAgICAgTWF4aW11bSB2YWx1 ZS4KLSAqLwotZW51bSBkc2lfcG93ZXJfc3RhdGUgewotCURTSV9DVFJMX1BPV0VSX1ZSRUdfT0ZG ID0gMCwKLQlEU0lfQ1RSTF9QT1dFUl9WUkVHX09OLAotCURTSV9DVFJMX1BPV0VSX01BWCwKLX07 Ci0KLS8qKgotICogZW51bSBkc2lfZW5naW5lX3N0YXRlIC0gZGVmaW5lIGVuZ2luZSBzdGF0dXMg Zm9yIGRzaSBjb250cm9sbGVyLgotICogQERTSV9DVFJMX0VOR0lORV9PRkY6ICBFbmdpbmUgaXMg dHVybmVkIG9mZi4KLSAqIEBEU0lfQ1RSTF9FTkdJTkVfT046ICAgRW5naW5lIGlzIHR1cm5lZCBv bi4KLSAqIEBEU0lfQ1RSTF9FTkdJTkVfTUFYOiAgTWF4aW11bSB2YWx1ZS4KLSAqLwotZW51bSBk c2lfZW5naW5lX3N0YXRlIHsKLQlEU0lfQ1RSTF9FTkdJTkVfT0ZGID0gMCwKLQlEU0lfQ1RSTF9F TkdJTkVfT04sCi0JRFNJX0NUUkxfRU5HSU5FX01BWCwKLX07Ci0KLS8qKgotICogc3RydWN0IGRz aV9jdHJsX3Bvd2VyX2luZm8gLSBkaWdpdGFsIGFuZCBhbmFsb2cgcG93ZXIgc3VwcGxpZXMgZm9y IGRzaSBob3N0Ci0gKiBAZGlnaXRhbDogIERpZ2l0YWwgcG93ZXIgc3VwcGx5IHJlcXVpcmVkIHRv IHR1cm4gb24gRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUuCi0gKiBAaG9zdF9wd3I6IEFuYWxvZyBw b3dlciBzdXBwbGllcyByZXF1aXJlZCB0byB0dXJuIG9uIERTSSBjb250cm9sbGVyIGhhcmR3YXJl LgotICogICAgICAgICAgICBFdmVuIHRob3VnaCBEU0kgY29udHJvbGxlciBpdCBzZWxmIGRvZXMg bm90IHJlcXVpcmUgYW4gYW5hbG9nCi0gKiAgICAgICAgICAgIHBvd2VyIHN1cHBseSwgc3VwcGxp ZXMgcmVxdWlyZWQgZm9yIFBMTCBjYW4gYmUgZGVmaW5lZCBoZXJlIHRvCi0gKiAgICAgICAgICAg IGFsbG93IHByb3BlciBjb250cm9sIG92ZXIgdGhlc2Ugc3VwcGxpZXMuCi0gKi8KLXN0cnVjdCBk c2lfY3RybF9wb3dlcl9pbmZvIHsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvIGRpZ2l0YWw7 Ci0Jc3RydWN0IGRzaV9yZWd1bGF0b3JfaW5mbyBob3N0X3B3cjsKLX07Ci0KLS8qKgotICogc3Ry dWN0IGRzaV9jdHJsX2Nsa19pbmZvIC0gY2xvY2sgaW5mb3JtYXRpb24gZm9yIERTSSBjb250cm9s bGVyCi0gKiBAY29yZV9jbGtzOiAgICAgICAgICBDb3JlIGNsb2NrcyBuZWVkZWQgdG8gYWNjZXNz IERTSSBjb250cm9sbGVyIHJlZ2lzdGVycy4KLSAqIEBsaW5rX2Nsa3M6ICAgICAgICAgIExpbmsg Y2xvY2tzIHJlcXVpcmVkIHRvIHRyYW5zbWl0IGRhdGEgb3ZlciBEU0kgbGluay4KLSAqIEByY2df Y2xrczogICAgICAgICAgIFJvb3QgY2xvY2sgZ2VuZXJhdGlvbiBjbG9ja3MgZ2VuZXJhdGVkIGlu IE1NU1NfQ0MuIFRoZQotICoJCQlvdXRwdXQgb2YgdGhlIFBMTCBpcyBzZXQgYXMgcGFyZW50IGZv ciB0aGVzZSByb290Ci0gKgkJCWNsb2Nrcy4gVGhlc2UgY2xvY2tzIGFyZSBzcGVjaWZpYyB0byBj b250cm9sbGVyCi0gKgkJCWluc3RhbmNlLgotICogQG11eF9jbGtzOiAgICAgICAgICAgTXV4IGNs b2NrcyB1c2VkIGZvciBEeW5hbWljIHJlZnJlc2ggZmVhdHVyZS4KLSAqIEBleHRfY2xrczogICAg ICAgICAgIEV4dGVybmFsIGJ5dGUvcGl4ZWwgY2xvY2tzIGZyb20gdGhlIE1NU1MgYmxvY2suIFRo ZXNlCi0gKgkJCWNsb2NrcyBhcmUgc2V0IGFzIHBhcmVudCB0byByY2cgY2xvY2tzLgotICogQHBs bF9vcF9jbGtzOiAgICAgICAgVE9ETzoKLSAqIEBzaGFkb3dfY2xrczogICAgICAgIFRPRE86Ci0g Ki8KLXN0cnVjdCBkc2lfY3RybF9jbGtfaW5mbyB7Ci0JLyogQ2xvY2tzIHBhcnNlZCBmcm9tIERU ICovCi0Jc3RydWN0IGRzaV9jb3JlX2Nsa19pbmZvIGNvcmVfY2xrczsKLQlzdHJ1Y3QgZHNpX2xp bmtfY2xrX2luZm8gbGlua19jbGtzOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IHJjZ19jbGtz OwotCi0JLyogQ2xvY2tzIHNldCBieSBEU0kgTWFuYWdlciAqLwotCXN0cnVjdCBkc2lfY2xrX2xp bmtfc2V0IG11eF9jbGtzOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0IGV4dF9jbGtzOwotCXN0 cnVjdCBkc2lfY2xrX2xpbmtfc2V0IHBsbF9vcF9jbGtzOwotCXN0cnVjdCBkc2lfY2xrX2xpbmtf c2V0IHNoYWRvd19jbGtzOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfYnVzX3NjYWxl X2luZm8gLSBCdXMgc2NhbGUgaW5mbyBmb3IgbXNtLWJ1cyBiYW5kd2lkdGggdm90aW5nCi0gKiBA YnVzX3NjYWxlX3RhYmxlOiAgICAgICAgQnVzIHNjYWxlIHZvdGluZyB1c2VjYXNlcy4KLSAqIEBi dXNfaGFuZGxlOiAgICAgICAgICAgICBIYW5kbGUgdXNlZCBmb3Igdm90aW5nIGJhbmR3aWR0aC4K LSAqLwotc3RydWN0IGRzaV9jdHJsX2J1c19zY2FsZV9pbmZvIHsKLQlzdHJ1Y3QgbXNtX2J1c19z Y2FsZV9wZGF0YSAqYnVzX3NjYWxlX3RhYmxlOwotCXUzMiBidXNfaGFuZGxlOwotfTsKLQotLyoq Ci0gKiBzdHJ1Y3QgZHNpX2N0cmxfc3RhdGVfaW5mbyAtIGN1cnJlbnQgZHJpdmVyIHN0YXRlIGlu Zm9ybWF0aW9uCi0gKiBAcG93ZXJfc3RhdGU6ICAgICAgICBTdGF0dXMgb2YgcG93ZXIgc3RhdGVz IG9uIERTSSBjb250cm9sbGVyLgotICogQGNtZF9lbmdpbmVfc3RhdGU6ICAgU3RhdHVzIG9mIERT SSBjb21tYW5kIGVuZ2luZS4KLSAqIEB2aWRfZW5naW5lX3N0YXRlOiAgIFN0YXR1cyBvZiBEU0kg dmlkZW8gZW5naW5lLgotICogQGNvbnRyb2xsZXJfc3RhdGU6ICAgU3RhdHVzIG9mIERTSSBDb250 cm9sbGVyIGVuZ2luZS4KLSAqIEBob3N0X2luaXRpYWxpemVkOglCb29sZWFuIHRvIGluZGljYXRl IHN0YXR1cyBvZiBEU2kgaG9zdCBJbml0aWFsaXphdGlvbgotICogQHRwZ19lbmFibGVkOiAgICAg ICAgQm9vbGVhbiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRwZyBpcyBlbmFibGVkLgotICovCi1zdHJ1 Y3QgZHNpX2N0cmxfc3RhdGVfaW5mbyB7Ci0JZW51bSBkc2lfcG93ZXJfc3RhdGUgcG93ZXJfc3Rh dGU7Ci0JZW51bSBkc2lfZW5naW5lX3N0YXRlIGNtZF9lbmdpbmVfc3RhdGU7Ci0JZW51bSBkc2lf ZW5naW5lX3N0YXRlIHZpZF9lbmdpbmVfc3RhdGU7Ci0JZW51bSBkc2lfZW5naW5lX3N0YXRlIGNv bnRyb2xsZXJfc3RhdGU7Ci0JYm9vbCBob3N0X2luaXRpYWxpemVkOwotCWJvb2wgdHBnX2VuYWJs ZWQ7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfY3RybF9pbnRlcnJ1cHRzIC0gZGVmaW5lIGlu dGVycnVwdCBpbmZvcm1hdGlvbgotICogQGlycV9sb2NrOiAgICAgICAgICAgIFNwaW5sb2NrIGZv ciBJU1IgaGFuZGxlci4KLSAqIEBpcnFfbnVtOiAgICAgICAgICAgICBMaW51eCBpbnRlcnJ1cHQg bnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBkZXZpY2UuCi0gKiBAaXJxX3N0YXRfbWFzazogICAgICAg SGFyZHdhcmUgbWFzayBvZiBjdXJyZW50bHkgZW5hYmxlZCBpbnRlcnJ1cHRzLgotICogQGlycV9z dGF0X3JlZmNvdW50OiAgIE51bWJlciBvZiB0aW1lcyBlYWNoIGludGVycnVwdCBoYXMgYmVlbiBy ZXF1ZXN0ZWQuCi0gKiBAaXJxX3N0YXRfY2I6ICAgICAgICAgU3RhdHVzIElSUSBjYWxsYmFjayBk ZWZpbml0aW9ucy4KLSAqIEBjbWRfZG1hX2RvbmU6ICAgICAgICAgIENvbXBsZXRpb24gc2lnbmFs IGZvciBEU0lfQ01EX01PREVfRE1BX0RPTkUgaW50ZXJydXB0Ci0gKiBAdmlkX2ZyYW1lX2RvbmU6 ICAgICAgICBDb21wbGV0aW9uIHNpZ25hbCBmb3IgRFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORSBp bnQuCi0gKiBAY21kX2ZyYW1lX2RvbmU6ICAgICAgICBDb21wbGV0aW9uIHNpZ25hbCBmb3IgRFNJ X0NNRF9GUkFNRV9ET05FIGludGVycnVwdC4KLSAqLwotc3RydWN0IGRzaV9jdHJsX2ludGVycnVw dHMgewotCXNwaW5sb2NrX3QgaXJxX2xvY2s7Ci0JaW50IGlycV9udW07Ci0JdWludDMyX3QgaXJx X3N0YXRfbWFzazsKLQlpbnQgaXJxX3N0YXRfcmVmY291bnRbRFNJX1NUQVRVU19JTlRFUlJVUFRf Q09VTlRdOwotCXN0cnVjdCBkc2lfZXZlbnRfY2JfaW5mbyBpcnFfc3RhdF9jYltEU0lfU1RBVFVT X0lOVEVSUlVQVF9DT1VOVF07Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbiBjbWRfZG1hX2RvbmU7Ci0J c3RydWN0IGNvbXBsZXRpb24gdmlkX2ZyYW1lX2RvbmU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY21k X2ZyYW1lX2RvbmU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gYnRhX2RvbmU7Ci19OwotCi0vKioKLSAq IHN0cnVjdCBkc2lfY3RybCAtIERTSSBjb250cm9sbGVyIG9iamVjdAotICogQHBkZXY6ICAgICAg ICAgICAgICAgIFBvaW50ZXIgdG8gcGxhdGZvcm0gZGV2aWNlLgotICogQGNlbGxfaW5kZXg6ICAg ICAgICAgIEluc3RhbmNlIGNlbGwgaWQuCi0gKiBAaG9yaXpfaW5kZXg6ICAgICAgICAgSW5kZXgg aW4gcGh5c2ljYWwgaG9yaXpvbnRhbCBDVFJMIGxheW91dCwgMCA9IGxlZnRtb3N0Ci0gKiBAbmFt ZTogICAgICAgICAgICAgICAgTmFtZSBvZiB0aGUgY29udHJvbGxlciBpbnN0YW5jZS4KLSAqIEBy ZWZjb3VudDogICAgICAgICAgICByZWYgY291bnRlci4KLSAqIEBjdHJsX2xvY2s6ICAgICAgICAg ICBNdXRleCBmb3IgaGFyZHdhcmUgYW5kIG9iamVjdCBhY2Nlc3MuCi0gKiBAZHJtX2RldjogICAg ICAgICAgICAgUG9pbnRlciB0byBEUk0gZGV2aWNlLgotICogQHZlcnNpb246ICAgICAgICAgICAg IERTSSBjb250cm9sbGVyIHZlcnNpb24uCi0gKiBAaHc6ICAgICAgICAgICAgICAgICAgRFNJIGNv bnRyb2xsZXIgaGFyZHdhcmUgb2JqZWN0LgotICogQGN1cnJlbnRfc3RhdGU6ICAgICAgIEN1cnJl bnQgZHJpdmVyIGFuZCBoYXJkd2FyZSBzdGF0ZS4KLSAqIEBjbGtfY2I6CQkgQ2FsbGJhY2sgZm9y IERTSSBjbG9jayBjb250cm9sLgotICogQGlycV9pbmZvOiAgICAgICAgICAgIEludGVycnVwdCBp bmZvcm1hdGlvbi4KLSAqIEBjbGtfaW5mbzogICAgICAgICAgICBDbG9jayBpbmZvcm1hdGlvbi4K LSAqIEBjbGtfZnJlcTogICAgICAgICAgICBEU2kgTGluayBjbG9jayBmcmVxdWVuY3kgaW5mb3Jt YXRpb24uCi0gKiBAcHdyX2luZm86ICAgICAgICAgICAgUG93ZXIgaW5mb3JtYXRpb24uCi0gKiBA YXhpX2J1c19pbmZvOiAgICAgICAgQVhJIGJ1cyBpbmZvcm1hdGlvbi4KLSAqIEBob3N0X2NvbmZp ZzogICAgICAgICBDdXJyZW50IGhvc3QgY29uZmlndXJhdGlvbi4KLSAqIEBtb2RlX2JvdW5kczog ICAgICAgICBCb3VuZGFyaWVzIG9mIHRoZSBkZWZhdWx0IG1vZGUgUk9JLgotICogICAgICAgICAg ICAgICAgICAgICAgIE9yaWdpbiBpcyBhdCB0b3AgbGVmdCBvZiBhbGwgQ1RSTHMuCi0gKiBAcm9p OiAgICAgICAgICAgICAgICAgUGFydGlhbCB1cGRhdGUgcmVnaW9uIG9mIGludGVyZXN0LgotICog ICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbiBpcyB0b3AgbGVmdCBvZiB0aGlzIENUUkwuCi0g KiBAdHhfY21kX2J1ZjogICAgICAgICAgVHggY29tbWFuZCBidWZmZXIuCi0gKiBAY21kX2J1ZmZl cl9pb3ZhOiAgICAgY21kIGJ1ZmZlciBtYXBwZWQgYWRkcmVzcy4KLSAqIEB2YWRkcjoJCSBDUFUg dmlydHVhbCBhZGRyZXNzIG9mIGNtZCBidWZmZXIuCi0gKiBAY21kX2J1ZmZlcl9zaXplOiAgICAg U2l6ZSBvZiBjb21tYW5kIGJ1ZmZlci4KLSAqIEBkZWJ1Z2ZzX3Jvb3Q6ICAgICAgICBSb290IGZv ciBkZWJ1Z2ZzIGVudHJpZXMuCi0gKiBAbWlzcl9lbmFibGU6ICAgICAgICAgRnJhbWUgTUlTUiBl bmFibGUvZGlzYWJsZQotICogQG1pc3JfY2FjaGU6ICAgICAgICAgIENhY2hlZCBGcmFtZSBNSVNS IHZhbHVlCi0gKiBAcGh5X2lzb2xhdGlvbl9lbmFibGVkOiAgICBBIGJvb2xlYW4gcHJvcGVydHkg YWxsb3dzIHRvIGlzb2xhdGUgdGhlIHBoeSBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgZHNpIGNvbnRyb2xsZXIgYW5kIHJ1biBvbmx5IGRzaSBjb250cm9sbGVyLgotICovCi1zdHJ1 Y3QgZHNpX2N0cmwgewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JdTMyIGNlbGxf aW5kZXg7Ci0JdTMyIGhvcml6X2luZGV4OwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JdTMyIHJlZmNv dW50OwotCXN0cnVjdCBtdXRleCBjdHJsX2xvY2s7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRybV9k ZXY7Ci0KLQllbnVtIGRzaV9jdHJsX3ZlcnNpb24gdmVyc2lvbjsKLQlzdHJ1Y3QgZHNpX2N0cmxf aHcgaHc7Ci0KLQkvKiBDdXJyZW50IHN0YXRlICovCi0Jc3RydWN0IGRzaV9jdHJsX3N0YXRlX2lu Zm8gY3VycmVudF9zdGF0ZTsKLQlzdHJ1Y3QgY2xrX2N0cmxfY2IgY2xrX2NiOwotCi0Jc3RydWN0 IGRzaV9jdHJsX2ludGVycnVwdHMgaXJxX2luZm87Ci0KLQkvKiBDbG9jayBhbmQgcG93ZXIgc3Rh dGVzICovCi0Jc3RydWN0IGRzaV9jdHJsX2Nsa19pbmZvIGNsa19pbmZvOwotCXN0cnVjdCBsaW5r X2Nsa19mcmVxIGNsa19mcmVxOwotCXN0cnVjdCBkc2lfY3RybF9wb3dlcl9pbmZvIHB3cl9pbmZv OwotCXN0cnVjdCBkc2lfY3RybF9idXNfc2NhbGVfaW5mbyBheGlfYnVzX2luZm87Ci0KLQlzdHJ1 Y3QgZHNpX2hvc3RfY29uZmlnIGhvc3RfY29uZmlnOwotCXN0cnVjdCBkc2lfcmVjdCBtb2RlX2Jv dW5kczsKLQlzdHJ1Y3QgZHNpX3JlY3Qgcm9pOwotCi0JLyogQ29tbWFuZCB0eCBhbmQgcnggKi8K LQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnR4X2NtZF9idWY7Ci0JdTMyIGNtZF9idWZmZXJfc2l6 ZTsKLQl1MzIgY21kX2J1ZmZlcl9pb3ZhOwotCXZvaWQgKnZhZGRyOwotCi0JLyogRGVidWcgSW5m b3JtYXRpb24gKi8KLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7Ci0KLQkvKiBNSVNSICov Ci0JYm9vbCBtaXNyX2VuYWJsZTsKLQl1MzIgbWlzcl9jYWNoZTsKLQotCWJvb2wgcGh5X2lzb2xh dGlvbl9lbmFibGVkOwotfTsKLQotLyoqCi0gKiBkc2lfY3RybF9nZXQoKSAtIGdldCBhIGRzaV9j dHJsIGhhbmRsZSBmcm9tIGFuIG9mX25vZGUKLSAqIEBvZl9ub2RlOiAgICBvZl9ub2RlIG9mIHRo ZSBEU0kgY29udHJvbGxlci4KLSAqCi0gKiBHZXRzIHRoZSBEU0kgY29udHJvbGxlciBoYW5kbGUg Zm9yIHRoZSBjb3JyZXNwb25kaW5nIG9mX25vZGUuIFRoZSByZWYgY291bnQKLSAqIGlzIGluY3Jl bWVudGVkIHRvIG9uZSBhbmQgYWxsIHN1YnNlcXVlbnQgZ2V0cyB3aWxsIGZhaWwgdW50aWwgdGhl IG9yaWdpbmFsCi0gKiBjbGllbnRzIGNhbGxzIGEgcHV0LgotICoKLSAqIFJldHVybjogRFNJIENv bnRyb2xsZXIgaGFuZGxlLgotICovCi1zdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsX2dldChzdHJ1 Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpOwotCi0vKioKLSAqIGRzaV9jdHJsX3B1dCgpIC0gcmVs ZWFzZXMgYSBkc2kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZHNpX2N0cmw6ICAgICAgIERTSSBj b250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBSZWxlYXNlcyB0aGUgRFNJIGNvbnRyb2xsZXIuIERy aXZlciB3aWxsIGNsZWFuIHVwIGFsbCByZXNvdXJjZXMgYW5kIHB1dHMgYmFjawotICogdGhlIERT SSBjb250cm9sbGVyIGludG8gcmVzZXQgc3RhdGUuCi0gKi8KLXZvaWQgZHNpX2N0cmxfcHV0KHN0 cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl9pbml0KCkg LSBpbml0aWFsaXplIGRzaSBjb250cm9sbGVyIGRyaXZlci4KLSAqIEBkc2lfY3RybDogICAgICBE U0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAcGFyZW50OiAgICAgICAgUGFyZW50IGRpcmVjdG9y eSBmb3IgZGVidWcgZnMuCi0gKgotICogSW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xsZXIgZHJpdmVy LiBEcml2ZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFmdGVyCi0gKiBkc2lfY3RybF9nZXQoKSBz dWNjZWVkcy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9k cnZfaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQp OwotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl9kZWluaXQoKSAtIGRlLWluaXRpYWxpemVzIGRzaSBj b250cm9sbGVyIGRyaXZlcgotICogQGRzaV9jdHJsOiAgICAgIERTSSBjb250cm9sbGVyIGhhbmRs ZS4KLSAqCi0gKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIGFjcXVpcmVkIGJ5IGRzaV9jdHJsX2Ry dl9pbml0KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxf ZHJ2X2RlaW5pdChzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsKTsKLQotLyoqCi0gKiBkc2lfY3Ry bF92YWxpZGF0ZV90aW1pbmcoKSAtIHZhbGlkYXRlIGEgdmlkZW8gdGltaW5nIGNvbmZpZ3VyYXRp b24KLSAqIEBkc2lfY3RybDogICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQHRpbWlu ZzogICAgICAgICBQb2ludGVyIHRvIHRpbWluZyBkYXRhLgotICoKLSAqIERyaXZlciB3aWxsIHZh bGlkYXRlIGlmIHRoZSB0aW1pbmcgY29uZmlndXJhdGlvbiBpcyBzdXBwb3J0ZWQgb24gdGhlCi0g KiBjb250cm9sbGVyIGhhcmR3YXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZSBpZiB0aW1p bmcgaXMgbm90IHN1cHBvcnRlZC4KLSAqLwotaW50IGRzaV9jdHJsX3ZhbGlkYXRlX3RpbWluZyhz dHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICAgICBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAq dGltaW5nKTsKLQotLyoqCi0gKiBkc2lfY3RybF91cGRhdGVfaG9zdF9jb25maWcoKSAtIHVwZGF0 ZSBkc2kgaG9zdCBjb25maWd1cmF0aW9uCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250 cm9sbGVyIGhhbmRsZS4KLSAqIEBjb25maWc6ICAgICAgICAgICAgRFNJIGhvc3QgY29uZmlndXJh dGlvbi4KLSAqIEBmbGFnczogICAgICAgICAgICAgZHNpX21vZGVfZmxhZ3MgbW9kaWZ5aW5nIHRo ZSBiZWhhdmlvcgotICogQGNsa19oYW5kbGU6ICAgICAgICBDbG9jayBoYW5kbGUgZm9yIERTSSBj bG9ja3MKLSAqCi0gKiBVcGRhdGVzIGRyaXZlciB3aXRoIG5ldyBIb3N0IGNvbmZpZ3VyYXRpb24g dG8gdXNlIGZvciBob3N0IGluaXRpYWxpemF0aW9uLgotICogVGhpcyBmdW5jdGlvbiBjYWxsIHdp bGwgb25seSB1cGRhdGUgdGhlIHNvZnR3YXJlIGNvbnRleHQuIFRoZSBzdG9yZWQKLSAqIGNvbmZp Z3VyYXRpb24gaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIHdoZW4gdGhlIGhvc3QgaXMgaW5pdGlh bGl6ZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfdXBk YXRlX2hvc3RfY29uZmlnKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJc3RydWN0IGRz aV9ob3N0X2NvbmZpZyAqY29uZmlnLAotCQkJCWludCBmbGFncywgdm9pZCAqY2xrX2hhbmRsZSk7 Ci0KLS8qKgotICogZHNpX2N0cmxfdGltaW5nX2RiX3VwZGF0ZSgpIC0gdXBkYXRlIG9ubHkgY29u dHJvbGxlciBUaW1pbmcgREIKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRyb2xsZXIg aGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgICBFbmFibGUvZGlzYWJsZSBUaW1pbmcgREIg cmVnaXN0ZXIKLSAqCi0gKiBVcGRhdGUgdGltaW5nIGRiIHJlZ2lzdGVyIHZhbHVlIGR1cmluZyBk ZnBzIHVzZWNhc2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0 cmxfdGltaW5nX2RiX3VwZGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQlib29sIGVu YWJsZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfYXN5bmNfdGltaW5nX3VwZGF0ZSgpIC0gdXBkYXRl IG9ubHkgY29udHJvbGxlciB0aW1pbmcKLSAqIEBkc2lfY3RybDogICAgICAgICAgRFNJIGNvbnRy b2xsZXIgaGFuZGxlLgotICogQHRpbWluZzogICAgICAgICAgICBOZXcgRFNJIHRpbWluZyBpbmZv Ci0gKgotICogVXBkYXRlcyBob3N0IHRpbWluZyB2YWx1ZXMgdG8gYXN5bmNocm9ub3VzbHkgdHJh bnNpdGlvbiB0byBuZXcgdGltaW5nCi0gKiBGb3IgZXhhbXBsZSwgdG8gdXBkYXRlIHRoZSBwb3Jj aCB2YWx1ZXMgaW4gYSBzZWFtbGVzcy9keW5hbWljIGZwcyBzd2l0Y2guCi0gKgotICogUmV0dXJu OiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfYXN5bmNfdGltaW5nX3VwZGF0ZShzdHJ1 Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqdGltaW5nKTsK LQotLyoqCi0gKiBkc2lfY3RybF9waHlfc3dfcmVzZXQoKSAtIHBlcmZvcm0gYSBQSFkgc29mdHdh cmUgcmVzZXQKLSAqIEBkc2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0g KgotICogUGVyZm9ybXMgYSBQSFkgc29mdHdhcmUgcmVzZXQgb24gdGhlIERTSSBjb250cm9sbGVy LiBSZXNldCBzaG91bGQgYmUgZG9uZQotICogd2hlbiB0aGUgY29udHJvbGxlciBwb3dlciBzdGF0 ZSBpcyBEU0lfQ1RSTF9QT1dFUl9DT1JFX0NMS19PTiBhbmQgdGhlIFBIWSBpcwotICogbm90IGVu YWJsZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgZHJpdmVyIGlzIGluIGFu eSBvdGhlciBzdGF0ZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lf Y3RybF9waHlfc3dfcmVzZXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICog ZHNpX2N0cmxfcGh5X3Jlc2V0X2NvbmZpZygpIC0gTWFzay91bm1hc2sgcHJvcGFnYXRpb24gb2Yg YWhiIHJlc2V0IHNpZ25hbAotICoJdG8gRFNJIFBIWSBoYXJkd2FyZS4KLSAqIEBkc2lfY3RybDog ICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqIEBlbmFibGU6CQkJTWFzay91bm1hc2sg dGhlIFBIWSByZXNldCBzaWduYWwuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1p bnQgZHNpX2N0cmxfcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLCBi b29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfc29mdF9yZXNldCgpIC0gcGVyZm9ybSBh IHNvZnQgcmVzZXQgb24gRFNJIGNvbnRyb2xsZXIKLSAqIEBkc2lfY3RybDogICAgICAgICBEU0kg Y29udHJvbGxlciBoYW5kbGUuCi0gKgotICogVGhlIHZpZGVvLCBjb21tYW5kIGFuZCBjb250cm9s bGVyIGVuZ2luZXMgd2lsbCBiZSBkaXNhYmxlZCBiZWZvcmUgdGhlCi0gKiByZXNldCBpcyB0cmln Z2VyZWQuIEFmdGVyLCB0aGUgZW5naW5lcyB3aWxsIGJlIHJlLWVuYWJsZWQgdG8gdGhlIHNhbWUg c3RhdGUKLSAqIGFzIGJlZm9yZSB0aGUgcmVzZXQuCi0gKgotICogSWYgdGhlIHJlc2V0IGlzIGRv bmUgd2hpbGUgTURQIHRpbWluZyBlbmdpbmUgaXMgdHVybmVkIG9uLCB0aGUgdmlkZW8KLSAqIGVu Z2luZSBzaG91bGQgYmUgcmUtZW5hYmxlZCBvbmx5IGR1cmluZyB0aGUgdmVydGljYWwgYmxhbmtp bmcgdGltZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUKLSAqLwotaW50IGRzaV9jdHJsX3Nv ZnRfcmVzZXQoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxf aG9zdF90aW1pbmdfdXBkYXRlIC0gcmVpbml0aWFsaXplIGhvc3Qgd2l0aCBuZXcgdGltaW5nIHZh bHVlcwotICogQGRzaV9jdHJsOiAgICAgICAgIERTSSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0g KiBSZWluaXRpYWxpemUgRFNJIGNvbnRyb2xsZXIgaGFyZHdhcmUgd2l0aCBuZXcgZGlzcGxheSB0 aW1pbmcgdmFsdWVzCi0gKiB3aGVuIHJlc29sdXRpb24gaXMgc3dpdGNoZWQgZHluYW1pY2FsbHku Ci0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlCi0gKi8KLWludCBkc2lfY3RybF9ob3N0X3RpbWlu Z191cGRhdGUoc3RydWN0IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxf aG9zdF9pbml0KCkgLSBJbml0aWFsaXplIERTSSBob3N0IGhhcmR3YXJlLgotICogQGRzaV9jdHJs OiAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICoKLSAqIEluaXRpYWxpemVzIERTSSBj b250cm9sbGVyIGhhcmR3YXJlIHdpdGggaG9zdCBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGJ5Ci0g KiBkc2lfY3RybF91cGRhdGVfaG9zdF9jb25maWcoKS4gSW5pdGlhbGl6YXRpb24gY2FuIGJlIHBl cmZvcm1lZCBvbmx5IGR1cmluZwotICogRFNJX0NUUkxfUE9XRVJfQ09SRV9DTEtfT04gc3RhdGUg YW5kIGFmdGVyIHRoZSBQSFkgU1cgcmVzZXQgaGFzIGJlZW4KLSAqIHBlcmZvcm1lZC4KLSAqCi0g KiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9ob3N0X2luaXQoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCk7Ci0KLS8qKgotICogZHNpX2N0cmxfaG9zdF9kZWluaXQoKSAt IERlLUluaXRpYWxpemUgRFNJIGhvc3QgaGFyZHdhcmUuCi0gKiBAZHNpX2N0cmw6ICAgICAgICBE U0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgotICogRGUtaW5pdGlhbGl6ZXMgRFNJIGNvbnRyb2xs ZXIgaGFyZHdhcmUuIEl0IGNhbiBiZSBwZXJmb3JtZWQgb25seSBkdXJpbmcKLSAqIERTSV9DVFJM X1BPV0VSX0NPUkVfQ0xLX09OIHN0YXRlIGFmdGVyIExJTksgY2xvY2tzIGhhdmUgYmVlbiB0dXJu ZWQgb2ZmLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2hv c3RfZGVpbml0KHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpOwotCi0vKioKLSAqIGRzaV9jdHJs X3NldF91bHBzKCkgLSBzZXQgVUxQUyBzdGF0ZSBmb3IgRFNJIGxhbmVzLgotICogQGRzaV9jdHJs OgkJRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGVuYWJsZToJCWVuYWJsZS9kaXNhYmxlIFVM UFMuCi0gKgotICogVUxQUyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhZnRlciBEU0kgaG9zdCBl bmdpbmUgaXMgdHVybmVkIG9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX3NldF91bHBzKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgZW5hYmxl KTsKLQotLyoqCi0gKiBkc2lfY3RybF9zZXR1cCgpIC0gU2V0dXAgRFNJIGhvc3QgaGFyZHdhcmUg d2hpbGUgY29taW5nIG91dCBvZiBpZGxlIHNjcmVlbi4KLSAqIEBkc2lfY3RybDogICAgICAgIERT SSBjb250cm9sbGVyIGhhbmRsZS4KLSAqCi0gKiBJbml0aWFsaXplcyBEU0kgY29udHJvbGxlciBo YXJkd2FyZSB3aXRoIGhvc3QgY29uZmlndXJhdGlvbiBwcm92aWRlZCBieQotICogZHNpX2N0cmxf dXBkYXRlX2hvc3RfY29uZmlnKCkuIEluaXRpYWxpemF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgb25s eSBkdXJpbmcKLSAqIERTSV9DVFJMX1BPV0VSX0NPUkVfQ0xLX09OIHN0YXRlIGFuZCBhZnRlciB0 aGUgUEhZIFNXIHJlc2V0IGhhcyBiZWVuCi0gKiBwZXJmb3JtZWQuCi0gKgotICogQWxzbyB1c2Vk IHRvIHByb2dyYW0gdGhlIHZpZGVvIG1vZGUgdGltaW5nIHZhbHVlcy4KLSAqCi0gKiBSZXR1cm46 IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXR1cChzdHJ1Y3QgZHNpX2N0cmwgKmRz aV9jdHJsKTsKLQotLyoqCi0gKiBkc2lfY3RybF9zZXRfdHBnX3N0YXRlKCkgLSBlbmFibGUvZGlz YWJsZSB0ZXN0IHBhdHRlcm4gb24gdGhlIGNvbnRyb2xsZXIKLSAqIEBkc2lfY3RybDogICAgICAg ICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQG9uOiAgICAgICAgICAgICAgICBlbmFibGUv ZGlzYWJsZSB0ZXN0IHBhdHRlcm4uCi0gKgotICogVGVzdCBwYXR0ZXJuIGNhbiBiZSBlbmFibGVk IG9ubHkgYWZ0ZXIgVmlkZW8gZW5naW5lIChmb3IgdmlkZW8gbW9kZSBwYW5lbHMpCi0gKiBvciBj b21tYW5kIGVuZ2luZSAoZm9yIGNtZCBtb2RlIHBhbmVscykgaXMgZW5hYmxlZC4KLSAqCi0gKiBS ZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfdHBnX3N0YXRlKHN0cnVj dCBkc2lfY3RybCAqZHNpX2N0cmwsIGJvb2wgb24pOwotCi0vKioKLSAqIGRzaV9jdHJsX2NtZF90 cmFuc2ZlcigpIC0gVHJhbnNmZXIgY29tbWFuZHMgb24gRFNJIGxpbmsKLSAqIEBkc2lfY3RybDog ICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQG1zZzogICAgICAgICAgICAg ICAgICBNZXNzYWdlIHRvIHRyYW5zZmVyIG9uIERTSSBsaW5rLgotICogQGZsYWdzOiAgICAgICAg ICAgICAgICBNb2RpZmllcnMgZm9yIG1lc3NhZ2UgdHJhbnNmZXIuCi0gKgotICogQ29tbWFuZCB0 cmFuc2ZlciBjYW4gYmUgZG9uZSBvbmx5IHdoZW4gY29tbWFuZCBlbmdpbmUgaXMgZW5hYmxlZC4g VGhlCi0gKiB0cmFuc2ZlciBBUEkgd2lsbCB1bnRpbCBlaXRoZXIgdGhlIGNvbW1hbmQgdHJhbnNm ZXIgZmluaXNoZXMgb3IgdGhlIHRpbWVvdXQKLSAqIHZhbHVlIGlzIHJlYWNoZWQuIElmIHRoZSB0 cmlnZ2VyIGlzIGRlZmVycmVkLCBpdCB3aWxsIHJldHVybiB3aXRob3V0Ci0gKiB0cmlnZ2VyaW5n IHRoZSB0cmFuc2Zlci4gQ29tbWFuZCBwYXJhbWV0ZXJzIGFyZSBwcm9ncmFtbWVkIHRvIGhhcmR3 YXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2NtZF90 cmFuc2ZlcihzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJICBjb25zdCBzdHJ1Y3QgbWlw aV9kc2lfbXNnICptc2csCi0JCQkgIHUzMiBmbGFncyk7Ci0KLS8qKgotICogZHNpX2N0cmxfY21k X3R4X3RyaWdnZXIoKSAtIFRyaWdnZXIgYSBkZWZlcnJlZCBjb21tYW5kLgotICogQGRzaV9jdHJs OiAgICAgICAgICAgICAgRFNJIGNvbnRyb2xsZXIgaGFuZGxlLgotICogQGZsYWdzOiAgICAgICAg ICAgICAgICAgTW9kaWZpZXJzLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX2NtZF90eF90cmlnZ2VyKHN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIHUzMiBm bGFncyk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X3Bvd2VyX3N0YXRlKCkgLSBzZXQgcG93ZXIg c3RhdGUgZm9yIGRzaSBjb250cm9sbGVyCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgIERTSSBjb250 cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAgICAgICAgUG93ZXIgc3RhdGUuCi0gKgot ICogU2V0IHBvd2VyIHN0YXRlIGZvciBEU0kgY29udHJvbGxlci4gUG93ZXIgc3RhdGUgY2FuIGJl IGNoYW5nZWQgb25seSB3aGVuCi0gKiBDb250cm9sbGVyLCBWaWRlbyBhbmQgQ29tbWFuZCBlbmdp bmVzIGFyZSB0dXJuZWQgb2ZmLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50 IGRzaV9jdHJsX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJ ICAgICBlbnVtIGRzaV9wb3dlcl9zdGF0ZSBzdGF0ZSk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0 X2NtZF9lbmdpbmVfc3RhdGUoKSAtIHNldCBjb21tYW5kIGVuZ2luZSBzdGF0ZQotICogQGRzaV9j dHJsOiAgICAgICAgICAgIERTSSBDb250cm9sbGVyIGhhbmRsZS4KLSAqIEBzdGF0ZTogICAgICAg ICAgICAgICBFbmdpbmUgc3RhdGUuCi0gKgotICogQ29tbWFuZCBlbmdpbmUgc3RhdGUgY2FuIGJl IG1vZGlmaWVkIG9ubHkgd2hlbiBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0ZSBpcwotICogc2V0 IHRvIERTSV9DVFJMX1BPV0VSX0xJTktfQ0xLX09OLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lfY3Ry bCAqZHNpX2N0cmwsCi0JCQkJICBlbnVtIGRzaV9lbmdpbmVfc3RhdGUgc3RhdGUpOwotCi0vKioK LSAqIGRzaV9jdHJsX3NldF92aWRfZW5naW5lX3N0YXRlKCkgLSBzZXQgdmlkZW8gZW5naW5lIHN0 YXRlCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgRFNJIENvbnRyb2xsZXIgaGFuZGxlLgotICog QHN0YXRlOiAgICAgICAgICAgICAgIEVuZ2luZSBzdGF0ZS4KLSAqCi0gKiBWaWRlbyBlbmdpbmUg c3RhdGUgY2FuIGJlIG1vZGlmaWVkIG9ubHkgd2hlbiBEU0kgY29udHJvbGxlciBwb3dlciBzdGF0 ZSBpcwotICogc2V0IHRvIERTSV9DVFJMX1BPV0VSX0xJTktfQ0xLX09OLgotICoKLSAqIFJldHVy bjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX3NldF92aWRfZW5naW5lX3N0YXRlKHN0 cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsCi0JCQkJICBlbnVtIGRzaV9lbmdpbmVfc3RhdGUgc3Rh dGUpOwotCi0vKioKLSAqIGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZSgpIC0gc2V0IGhv c3QgZW5naW5lIHN0YXRlCi0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgRFNJIENvbnRyb2xsZXIg aGFuZGxlLgotICogQHN0YXRlOiAgICAgICAgICAgICAgIEVuZ2luZSBzdGF0ZS4KLSAqCi0gKiBI b3N0IGVuZ2luZSBzdGF0ZSBjYW4gYmUgbW9kaWZpZWQgb25seSB3aGVuIERTSSBjb250cm9sbGVy IHBvd2VyIHN0YXRlIGlzCi0gKiBzZXQgdG8gRFNJX0NUUkxfUE9XRVJfTElOS19DTEtfT04gYW5k IGNtZCwgdmlkZW8gZW5naW5lcyBhcmUgZGlzYWJsZWQuCi0gKgotICogUmV0dXJuOiBlcnJvciBj b2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X2hvc3RfZW5naW5lX3N0YXRlKHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwsCi0JCQkJICAgZW51bSBkc2lfZW5naW5lX3N0YXRlIHN0YXRlKTsKLQot LyoqCi0gKiBkc2lfY3RybF9zZXRfdWxwcygpIC0gc2V0IFVMUFMgc3RhdGUgZm9yIERTSSBsYW5l cy4KLSAqIEBkc2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAZW5h YmxlOiAgICAgICAgICAgZW5hYmxlL2Rpc2FibGUgVUxQUy4KLSAqCi0gKiBVTFBTIGNhbiBiZSBl bmFibGVkL2Rpc2FibGVkIGFmdGVyIERTSSBob3N0IGVuZ2luZSBpcyB0dXJuZWQgb24uCi0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X3VscHMoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCwgYm9vbCBlbmFibGUpOwotCi0vKioKLSAqIGRzaV9jdHJsX2Ns a19jYl9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgRFNJIGNvbnRyb2xsZXIgY2xrIGNvbnRyb2wgY2Fs bGJhY2sKLSAqIEBkc2lfY3RybDogICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBA Y2xrX19jYjogICAgICBTdHJ1Y3R1cmUgY29udGFpbmluZyBjYWxsYmFjayBmb3IgY2xvY2sgY29u dHJvbC4KLSAqCi0gKiBSZWdpc3RlciBjYWxsIGZvciBEU0kgY2xvY2sgY29udHJvbAotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9jdHJsX2Nsa19jYl9yZWdpc3Rlcihz dHJ1Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCXN0cnVjdCBjbGtfY3RybF9jYiAqY2xrX2NiKTsK LQotLyoqCi0gKiBkc2lfY3RybF9zZXRfY2xhbXBfc3RhdGUoKSAtIHNldCBjbGFtcCBzdGF0ZSBm b3IgRFNJIHBoeQotICogQGRzaV9jdHJsOiAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5k bGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIGNsYW1waW5nLgot ICogQHVscHNfZW5hYmxlZDogICAgICAgICB1bHBzIHN0YXRlLgotICoKLSAqIENsYW1wcyBjYW4g YmUgZW5hYmxlZC9kaXNhYmxlZCB3aGlsZSBEU0kgY29udHJvbGxlciBpcyBzdGlsbCB0dXJuZWQg b24uCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0X2Ns YW1wX3N0YXRlKHN0cnVjdCBkc2lfY3RybCAqZHNpX0N0cmwsCi0JCWJvb2wgZW5hYmxlLCBib29s IHVscHNfZW5hYmxlZCk7Ci0KLS8qKgotICogZHNpX2N0cmxfc2V0X2Nsb2NrX3NvdXJjZSgpIC0g c2V0IGNsb2NrIHNvdXJjZSBmcHIgZHNpIGxpbmsgY2xvY2tzCi0gKiBAZHNpX2N0cmw6ICAgICAg ICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAc291cmNlX2Nsa3M6ICAgICBTb3VyY2UgY2xv Y2tzIGZvciBEU0kgbGluayBjbG9ja3MuCi0gKgotICogQ2xvY2sgc291cmNlIHNob3VsZCBiZSBj aGFuZ2VkIHdoaWxlIGxpbmsgY2xvY2tzIGFyZSBkaXNhYmxlZC4KLSAqCi0gKiBSZXR1cm46IGVy cm9yIGNvZGUuCi0gKi8KLWludCBkc2lfY3RybF9zZXRfY2xvY2tfc291cmNlKHN0cnVjdCBkc2lf Y3RybCAqZHNpX2N0cmwsCi0JCQkgICAgICBzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqc291cmNl X2Nsa3MpOwotCi0vKioKLSAqIGRzaV9jdHJsX2VuYWJsZV9zdGF0dXNfaW50ZXJydXB0KCkgLSBl bmFibGUgc3RhdHVzIGludGVycnVwdHMKLSAqIEBkc2lfY3RybDogICAgICAgIERTSSBjb250cm9s bGVyIGhhbmRsZS4KLSAqIEBpbnRyX2lkeDogICAgICAgIEluZGV4IGludGVycnVwdCB0byBkaXNh YmxlLgotICogQGV2ZW50X2luZm86ICAgICAgUG9pbnRlciB0byBldmVudCBjYWxsYmFjayBkZWZp bml0aW9uCi0gKi8KLXZvaWQgZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHQoc3RydWN0 IGRzaV9jdHJsICpkc2lfY3RybCwKLQkJdWludDMyX3QgaW50cl9pZHgsIHN0cnVjdCBkc2lfZXZl bnRfY2JfaW5mbyAqZXZlbnRfaW5mbyk7Ci0KLS8qKgotICogZHNpX2N0cmxfZGlzYWJsZV9zdGF0 dXNfaW50ZXJydXB0KCkgLSBkaXNhYmxlIHN0YXR1cyBpbnRlcnJ1cHRzCi0gKiBAZHNpX2N0cmw6 ICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBAaW50cl9pZHg6ICAgICAgICBJbmRl eCBpbnRlcnJ1cHQgdG8gZGlzYWJsZS4KLSAqLwotdm9pZCBkc2lfY3RybF9kaXNhYmxlX3N0YXR1 c19pbnRlcnJ1cHQoCi0JCXN0cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwsIHVpbnQzMl90IGludHJf aWR4KTsKLQotLyoqCi0gKiBkc2lfY3RybF9zZXR1cF9taXNyKCkgLSBTZXR1cCBmcmFtZSBNSVNS Ci0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKiBA ZW5hYmxlOiAgICAgICAgICAgICAgICBlbmFibGUvZGlzYWJsZSBNSVNSLgotICogQGZyYW1lX2Nv dW50OiAgICAgICAgICAgTnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIE1JU1IuCi0gKgot ICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2N0cmxfc2V0dXBfbWlzcihzdHJ1 Y3QgZHNpX2N0cmwgKmRzaV9jdHJsLAotCQkJYm9vbCBlbmFibGUsCi0JCQl1MzIgZnJhbWVfY291 bnQpOwotCi0vKioKLSAqIGRzaV9jdHJsX2NvbGxlY3RfbWlzcigpIC0gUmVhZCBmcmFtZSBNSVNS Ci0gKiBAZHNpX2N0cmw6ICAgICAgICAgICAgICBEU0kgY29udHJvbGxlciBoYW5kbGUuCi0gKgot ICogUmV0dXJuOiBNSVNSIHZhbHVlLgotICovCi11MzIgZHNpX2N0cmxfY29sbGVjdF9taXNyKHN0 cnVjdCBkc2lfY3RybCAqZHNpX2N0cmwpOwotCi0vKioKLSAqIGRzaV9jdHJsX2Rydl9yZWdpc3Rl cigpIC0gcmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyIGZvciBkc2kgY29udHJvbGxlcgotICovCi12 b2lkIGRzaV9jdHJsX2Rydl9yZWdpc3Rlcih2b2lkKTsKLQotLyoqCi0gKiBkc2lfY3RybF9kcnZf dW5yZWdpc3RlcigpIC0gdW5yZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIKLSAqLwotdm9pZCBkc2lf Y3RybF9kcnZfdW5yZWdpc3Rlcih2b2lkKTsKLQotI2VuZGlmIC8qIF9EU0lfQ1RSTF9IXyAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9ody5o IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9ody5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2IyMGY0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHcuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1 MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBf RFNJX0NUUkxfSFdfSF8KLSNkZWZpbmUgX0RTSV9DVFJMX0hXX0hfCi0KLSNpbmNsdWRlIDxsaW51 eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Jp dG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgotCi0jaW5jbHVkZSAiZHNpX2RlZnMu aCIKLQotLyoqCi0gKiBNb2RpZmllciBmbGFnIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4gSWYg dGhpcyBmbGFnIGlzIHNldCwgY29tbWFuZAotICogaW5mb3JtYXRpb24gaXMgcHJvZ3JhbW1lZCB0 byBoYXJkd2FyZSBhbmQgdHJhbnNtaXNzaW9uIGlzIG5vdCB0cmlnZ2VyZWQuCi0gKiBDYWxsZXIg c2hvdWxkIGNhbGwgdGhlIHRyaWdnZXJfY29tbWFuZF9kbWEoKSB0byBzdGFydCB0aGUgdHJhbnNt aXNzaW9uLiBUaGlzCi0gKiBmbGFnIGlzIHZhbGVkIGZvciBraWNrb2ZmX2NvbW1hbmQoKSBhbmQg a2lja29mZl9maWZvX2NvbW1hbmQoKSBvcGVyYXRpb25zLgotICovCi0jZGVmaW5lIERTSV9DVFJM X0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSICAgICAgICAgICAgMHgxCi0KLS8qKgotICogZW51bSBk c2lfY3RybF92ZXJzaW9uIC0gdmVyc2lvbiBvZiB0aGUgZHNpIGhvc3QgY29udHJvbGxlcgotICog QERTSV9DVFJMX1ZFUlNJT05fVU5LTk9XTjogVW5rbm93biBjb250cm9sbGVyIHZlcnNpb24KLSAq IEBEU0lfQ1RSTF9WRVJTSU9OXzFfNDogICAgIERTSSBob3N0IHYxLjQgY29udHJvbGxlcgotICog QERTSV9DVFJMX1ZFUlNJT05fMl8wOiAgICAgRFNJIGhvc3QgdjIuMCBjb250cm9sbGVyCi0gKiBA RFNJX0NUUkxfVkVSU0lPTl9NQVg6ICAgICBtYXggdmVyc2lvbgotICovCi1lbnVtIGRzaV9jdHJs X3ZlcnNpb24gewotCURTSV9DVFJMX1ZFUlNJT05fVU5LTk9XTiwKLQlEU0lfQ1RSTF9WRVJTSU9O XzFfNCwKLQlEU0lfQ1RSTF9WRVJTSU9OXzJfMCwKLQlEU0lfQ1RSTF9WRVJTSU9OXzJfMiwKLQlE U0lfQ1RSTF9WRVJTSU9OX01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9jdHJsX2h3X2ZlYXR1 cmVzIC0gZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IGRzaSBob3N0IGNvbnRyb2xsZXIKLSAqIEBEU0lf Q1RSTF9WSURFT19UUEc6ICAgICAgICAgICAgICAgVGVzdCBwYXR0ZXJuIHN1cHBvcnQgZm9yIHZp ZGVvIG1vZGUuCi0gKiBARFNJX0NUUkxfQ01EX1RQRzogICAgICAgICAgICAgICAgIFRlc3QgcGF0 dGVybiBzdXBwb3J0IGZvciBjb21tYW5kIG1vZGUuCi0gKiBARFNJX0NUUkxfVkFSSUFCTEVfUkVG UkVTSF9SQVRFOiAgIHZhcmlhYmxlIHBhbmVsIHRpbWluZwotICogQERTSV9DVFJMX0RZTkFNSUNf UkVGUkVTSDogICAgICAgICB2YXJpYWJsZSBwaXhlbCBjbG9jayByYXRlCi0gKiBARFNJX0NUUkxf TlVMTF9QQUNLRVRfSU5TRVJUSU9OOiAgIE5VTEwgcGFja2V0IGluc2VydGlvbgotICogQERTSV9D VFJMX0RFU0tFV19DQUxJQjogICAgICAgICAgICBEZXNrZXcgY2FsaWJyYXRpb24gc3VwcG9ydAot ICogQERTSV9DVFJMX0RQSFk6ICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVyIHN1cHBvcnQg Zm9yIERQSFkKLSAqIEBEU0lfQ1RSTF9DUEhZOiAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxl ciBzdXBwb3J0IGZvciBDUEhZCi0gKiBARFNJX0NUUkxfTUFYX0ZFQVRVUkVTOgotICovCi1lbnVt IGRzaV9jdHJsX2h3X2ZlYXR1cmVzIHsKLQlEU0lfQ1RSTF9WSURFT19UUEcsCi0JRFNJX0NUUkxf Q01EX1RQRywKLQlEU0lfQ1RSTF9WQVJJQUJMRV9SRUZSRVNIX1JBVEUsCi0JRFNJX0NUUkxfRFlO QU1JQ19SRUZSRVNILAotCURTSV9DVFJMX05VTExfUEFDS0VUX0lOU0VSVElPTiwKLQlEU0lfQ1RS TF9ERVNLRVdfQ0FMSUIsCi0JRFNJX0NUUkxfRFBIWSwKLQlEU0lfQ1RSTF9DUEhZLAotCURTSV9D VFJMX01BWF9GRUFUVVJFUwotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV90ZXN0X3BhdHRlcm4gLSB0 ZXN0IHBhdHRlcm4gdHlwZQotICogQERTSV9URVNUX1BBVFRFUk5fRklYRUQ6ICAgICBUZXN0IHBh dHRlcm4gaXMgZml4ZWQsIGJhc2VkIG9uIGluaXQgdmFsdWUuCi0gKiBARFNJX1RFU1RfUEFUVEVS Tl9JTkM6ICAgICAgIEluY3JlbWVudGFsIHRlc3QgcGF0dGVybiwgYmFzZSBvbiBpbml0IHZhbHVl LgotICogQERTSV9URVNUX1BBVFRFUk5fUE9MWTogICAgICBQYXR0ZXJuIGdlbmVyYXRlZCBmcm9t IHBvbHlub21pYWwgYW5kIGluaXQgdmFsLgotICogQERTSV9URVNUX1BBVFRFUk5fTUFYOgotICov Ci1lbnVtIGRzaV90ZXN0X3BhdHRlcm4gewotCURTSV9URVNUX1BBVFRFUk5fRklYRUQgPSAwLAot CURTSV9URVNUX1BBVFRFUk5fSU5DLAotCURTSV9URVNUX1BBVFRFUk5fUE9MWSwKLQlEU0lfVEVT VF9QQVRURVJOX01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9zdGF0dXNfaW50X2luZGV4IC0g aW5kZXggb2YgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgRFNJIGNvbnRyb2xsZXIKLSAqIEBEU0lf U0lOVF9DTURfTU9ERV9ETUFfRE9ORTogICAgICAgIENvbW1hbmQgbW9kZSBETUEgcGFja2V0cyBh cmUgc2VudCBvdXQuCi0gKiBARFNJX1NJTlRfQ01EX1NUUkVBTTBfRlJBTUVfRE9ORTogICBBIGZy YW1lIG9mIGNtZCBtb2RlIHN0cmVhbTAgaXMgc2VudCBvdXQuCi0gKiBARFNJX1NJTlRfQ01EX1NU UkVBTTFfRlJBTUVfRE9ORTogICBBIGZyYW1lIG9mIGNtZCBtb2RlIHN0cmVhbTEgaXMgc2VudCBv dXQuCi0gKiBARFNJX1NJTlRfQ01EX1NUUkVBTTJfRlJBTUVfRE9ORTogICBBIGZyYW1lIG9mIGNt ZCBtb2RlIHN0cmVhbTIgaXMgc2VudCBvdXQuCi0gKiBARFNJX1NJTlRfVklERU9fTU9ERV9GUkFN RV9ET05FOiAgICBBIGZyYW1lIG9mIHZpZGVvIG1vZGUgc3RyZWFtIGlzIHNlbnQgb3V0LgotICog QERTSV9TSU5UX0JUQV9ET05FOiAgICAgICAgICAgICAgICAgQSBCVEEgaXMgY29tcGxldGVkLgot ICogQERTSV9TSU5UX0NNRF9GUkFNRV9ET05FOiAgICAgICAgICAgQSBmcmFtZSBvZiBzZWxlY3Rl ZCBjbWQgbW9kZSBzdHJlYW0gaXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbnQgb3V0IGJ5IE1EUC4KLSAqIEBEU0lfU0lOVF9EWU5fUkVGUkVTSF9ET05FOiAgICAg ICAgIFRoZSBkeW5hbWljIHJlZnJlc2ggb3BlcmF0aW9uIGNvbXBsZXRlZC4KLSAqIEBEU0lfU0lO VF9ERVNLRVdfRE9ORTogICAgICAgICAgICAgIFRoZSBkZXNrZXcgY2FsaWJyYXRpb24gb3BlcmF0 aW9uIGRvbmUuCi0gKiBARFNJX1NJTlRfRFlOX0JMQU5LX0RNQV9ET05FOiAgICAgICBUaGUgZHlu YW1pYyBibGFua2luIERNQSBvcGVyYXRpb24gaGFzCi0gKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb21wbGV0ZWQuCi0gKi8KLWVudW0gZHNpX3N0YXR1c19pbnRfaW5kZXgg ewotCURTSV9TSU5UX0NNRF9NT0RFX0RNQV9ET05FID0gMCwKLQlEU0lfU0lOVF9DTURfU1RSRUFN MF9GUkFNRV9ET05FID0gMSwKLQlEU0lfU0lOVF9DTURfU1RSRUFNMV9GUkFNRV9ET05FID0gMiwK LQlEU0lfU0lOVF9DTURfU1RSRUFNMl9GUkFNRV9ET05FID0gMywKLQlEU0lfU0lOVF9WSURFT19N T0RFX0ZSQU1FX0RPTkUgPSA0LAotCURTSV9TSU5UX0JUQV9ET05FID0gNSwKLQlEU0lfU0lOVF9D TURfRlJBTUVfRE9ORSA9IDYsCi0JRFNJX1NJTlRfRFlOX1JFRlJFU0hfRE9ORSA9IDcsCi0JRFNJ X1NJTlRfREVTS0VXX0RPTkUgPSA4LAotCURTSV9TSU5UX0RZTl9CTEFOS19ETUFfRE9ORSA9IDks Ci0KLQlEU0lfU1RBVFVTX0lOVEVSUlVQVF9DT1VOVAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9z dGF0dXNfaW50X3R5cGUgLSBzdGF0dXMgaW50ZXJydXB0cyBnZW5lcmF0ZWQgYnkgRFNJIGNvbnRy b2xsZXIKLSAqIEBEU0lfQ01EX01PREVfRE1BX0RPTkU6ICAgICAgICBDb21tYW5kIG1vZGUgRE1B IHBhY2tldHMgYXJlIHNlbnQgb3V0LgotICogQERTSV9DTURfU1RSRUFNMF9GUkFNRV9ET05FOiAg IEEgZnJhbWUgb2YgY29tbWFuZCBtb2RlIHN0cmVhbTAgaXMgc2VudCBvdXQuCi0gKiBARFNJX0NN RF9TVFJFQU0xX0ZSQU1FX0RPTkU6ICAgQSBmcmFtZSBvZiBjb21tYW5kIG1vZGUgc3RyZWFtMSBp cyBzZW50IG91dC4KLSAqIEBEU0lfQ01EX1NUUkVBTTJfRlJBTUVfRE9ORTogICBBIGZyYW1lIG9m IGNvbW1hbmQgbW9kZSBzdHJlYW0yIGlzIHNlbnQgb3V0LgotICogQERTSV9WSURFT19NT0RFX0ZS QU1FX0RPTkU6ICAgIEEgZnJhbWUgb2YgdmlkZW8gbW9kZSBzdHJlYW0gaXMgc2VudCBvdXQuCi0g KiBARFNJX0JUQV9ET05FOiAgICAgICAgICAgICAgICAgQSBCVEEgaXMgY29tcGxldGVkLgotICog QERTSV9DTURfRlJBTUVfRE9ORTogICAgICAgICAgIEEgZnJhbWUgb2Ygc2VsZWN0ZWQgY29tbWFu ZCBtb2RlIHN0cmVhbSBpcwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQg b3V0IGJ5IE1EUC4KLSAqIEBEU0lfRFlOX1JFRlJFU0hfRE9ORTogICAgICAgICBUaGUgZHluYW1p YyByZWZyZXNoIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgotICogQERTSV9ERVNLRVdfRE9ORTog ICAgICAgICAgICAgIFRoZSBkZXNrZXcgY2FsaWJyYXRpb24gb3BlcmF0aW9uIGhhcyBjb21wbGV0 ZWQKLSAqIEBEU0lfRFlOX0JMQU5LX0RNQV9ET05FOiAgICAgICBUaGUgZHluYW1pYyBibGFua2lu IERNQSBvcGVyYXRpb24gaGFzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29t cGxldGVkLgotICovCi1lbnVtIGRzaV9zdGF0dXNfaW50X3R5cGUgewotCURTSV9DTURfTU9ERV9E TUFfRE9ORSA9IEJJVChEU0lfU0lOVF9DTURfTU9ERV9ETUFfRE9ORSksCi0JRFNJX0NNRF9TVFJF QU0wX0ZSQU1FX0RPTkUgPSBCSVQoRFNJX1NJTlRfQ01EX1NUUkVBTTBfRlJBTUVfRE9ORSksCi0J RFNJX0NNRF9TVFJFQU0xX0ZSQU1FX0RPTkUgPSBCSVQoRFNJX1NJTlRfQ01EX1NUUkVBTTFfRlJB TUVfRE9ORSksCi0JRFNJX0NNRF9TVFJFQU0yX0ZSQU1FX0RPTkUgPSBCSVQoRFNJX1NJTlRfQ01E X1NUUkVBTTJfRlJBTUVfRE9ORSksCi0JRFNJX1ZJREVPX01PREVfRlJBTUVfRE9ORSA9IEJJVChE U0lfU0lOVF9WSURFT19NT0RFX0ZSQU1FX0RPTkUpLAotCURTSV9CVEFfRE9ORSA9IEJJVChEU0lf U0lOVF9CVEFfRE9ORSksCi0JRFNJX0NNRF9GUkFNRV9ET05FID0gQklUKERTSV9TSU5UX0NNRF9G UkFNRV9ET05FKSwKLQlEU0lfRFlOX1JFRlJFU0hfRE9ORSA9IEJJVChEU0lfU0lOVF9EWU5fUkVG UkVTSF9ET05FKSwKLQlEU0lfREVTS0VXX0RPTkUgPSBCSVQoRFNJX1NJTlRfREVTS0VXX0RPTkUp LAotCURTSV9EWU5fQkxBTktfRE1BX0RPTkUgPSBCSVQoRFNJX1NJTlRfRFlOX0JMQU5LX0RNQV9E T05FKQotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9lcnJvcl9pbnRfaW5kZXggLSBpbmRleCBvZiBl cnJvciBpbnRlcnJ1cHRzIGZyb20gRFNJIGNvbnRyb2xsZXIKLSAqIEBEU0lfRUlOVF9SREJLX1NJ TkdMRV9FQ0NfRVJSOiAgICAgICAgU2luZ2xlIGJpdCBFQ0MgZXJyb3IgaW4gcmVhZCBwYWNrZXQu Ci0gKiBARFNJX0VJTlRfUkRCS19NVUxUSV9FQ0NfRVJSOiAgICAgICAgIE11bHRpIGJpdCBFQ0Mg ZXJyb3IgaW4gcmVhZCBwYWNrZXQuCi0gKiBARFNJX0VJTlRfUkRCS19DUkNfRVJSOiAgICAgICAg ICAgICAgIENSQyBlcnJvciBpbiByZWFkIHBhY2tldC4KLSAqIEBEU0lfRUlOVF9SREJLX0lOQ09N UExFVEVfUEtUOiAgICAgICAgSW5jb21wbGV0ZSByZWFkIHBhY2tldC4KLSAqIEBEU0lfRUlOVF9Q RVJJUEhfRVJST1JfUEtUOiAgICAgICAgICAgRXJyb3IgcGFja2V0IHJldHVybmVkIGZyb20gcGVy aXBoZXJhbCwKLSAqIEBEU0lfRUlOVF9MUF9SWF9USU1FT1VUOiAgICAgICAgICAgICAgTG93IHBv d2VyIHJldmVyc2UgdHJhbnNtaXNzaW9uIHRpbWVvdXQuCi0gKiBARFNJX0VJTlRfSFNfVFhfVElN RU9VVDogICAgICAgICAgICAgIEhpZ2ggc3BlZWQgZndkIHRyYW5zbWlzc2lvbiB0aW1lb3V0Lgot ICogQERTSV9FSU5UX0JUQV9USU1FT1VUOiAgICAgICAgICAgICAgICBCVEEgdGltZW91dC4KLSAq IEBEU0lfRUlOVF9QTExfVU5MT0NLOiAgICAgICAgICAgICAgICAgUExMIGhhcyB1bmxvY2tlZC4K LSAqIEBEU0lfRUlOVF9ETE4wX0VTQ19FTlRSWV9FUlI6ICAgICAgICAgSW5jb3JyZWN0IExQIFJ4 IGVzY2FwZSBlbnRyeS4KLSAqIEBEU0lfRUlOVF9ETE4wX0VTQ19TWU5DX0VSUjogICAgICAgICAg TFAgUnggZGF0YSBpcyBub3QgYnl0ZSBhbGlnbmVkLgotICogQERTSV9FSU5UX0RMTjBfTFBfQ09O VFJPTF9FUlI6ICAgICAgICBJbmNvcnJlY3QgTFAgUnggc3RhdGUgc2VxdWVuY2UuCi0gKiBARFNJ X0VJTlRfUEVORElOR19IU19UWF9USU1FT1VUOiAgICAgIFBlbmRpbmcgSGlnaC1zcGVlZCB0cmFu c2ZlciB0aW1lb3V0LgotICogQERTSV9FSU5UX0lOVEVSTEVBVkVfT1BfQ09OVEVOVElPTjogICBJ bnRlcmxlYXZlIG9wZXJhdGlvbiBjb250ZW50aW9uLgotICogQERTSV9FSU5UX0NNRF9ETUFfRklG T19VTkRFUkZMT1c6ICAgICBDb21tYW5kIG1vZGUgRE1BIEZJRk8gdW5kZXJmbG93LgotICogQERT SV9FSU5UX0NNRF9NRFBfRklGT19VTkRFUkZMT1c6ICAgICBDb21tYW5kIE1EUCBGSUZPIHVuZGVy ZmxvdyAoZmFpbGVkIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlY2VpdmUgb25lIGNvbXBsZXRlIGxpbmUgZnJvbSBNRFApLgotICogQERTSV9FSU5UX0RMTjBf SFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDAgb3ZlcmZs b3dzLgotICogQERTSV9FSU5UX0RMTjFfSFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVk IEZJRk8gZGF0YSBsYW5lIDEgb3ZlcmZsb3dzLgotICogQERTSV9FSU5UX0RMTjJfSFNfRklGT19P VkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDIgb3ZlcmZsb3dzLgotICog QERTSV9FSU5UX0RMTjNfSFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0 YSBsYW5lIDMgb3ZlcmZsb3dzLgotICogQERTSV9FSU5UX0RMTjBfSFNfRklGT19VTkRFUkZMT1c6 ICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDAgdW5kZXJmbG93cy4KLSAqIEBEU0lfRUlO VF9ETE4xX0hTX0ZJRk9fVU5ERVJGTE9XOiAgICAgSGlnaCBzcGVlZCBGSUZPIGRhdGEgbGFuZSAx IHVuZGVyZmxvd3MuCi0gKiBARFNJX0VJTlRfRExOMl9IU19GSUZPX1VOREVSRkxPVzogICAgIEhp Z2ggc3BlZWQgRklGTyBkYXRhIGxhbmUgMiB1bmRlcmZsb3dzLgotICogQERTSV9FSU5UX0RMTjNf SFNfRklGT19VTkRFUkZMT1c6ICAgICBIaWdoIHNwZWVkIEZJRk8gZGF0YSBsYW5lIDMgdW5kZWZs b3dzLgotICogQERTSV9FSU5UX0RMTjBfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwg Y29udGVudGlvbiB3aGlsZSBsYW5lIDAgbG93LgotICogQERTSV9FSU5UX0RMTjFfTFAwX0NPTlRF TlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDEgbG93LgotICog QERTSV9FSU5UX0RMTjJfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlv biB3aGlsZSBsYW5lIDIgbG93LgotICogQERTSV9FSU5UX0RMTjNfTFAwX0NPTlRFTlRJT046ICAg ICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDMgbG93LgotICogQERTSV9FSU5U X0RMTjBfTFAxX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBs YW5lIDAgaGlnaC4KLSAqIEBEU0lfRUlOVF9ETE4xX0xQMV9DT05URU5USU9OOiAgICAgICAgUEhZ IGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAxIGhpZ2guCi0gKiBARFNJX0VJTlRfRExOMl9M UDFfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMiBo aWdoLgotICogQERTSV9FSU5UX0RMTjNfTFAxX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwg Y29udGVudGlvbiB3aGlsZSBsYW5lIDMgaGlnaC4KLSAqLwotZW51bSBkc2lfZXJyb3JfaW50X2lu ZGV4IHsKLQlEU0lfRUlOVF9SREJLX1NJTkdMRV9FQ0NfRVJSID0gMCwKLQlEU0lfRUlOVF9SREJL X01VTFRJX0VDQ19FUlIgPSAxLAotCURTSV9FSU5UX1JEQktfQ1JDX0VSUiA9IDIsCi0JRFNJX0VJ TlRfUkRCS19JTkNPTVBMRVRFX1BLVCA9IDMsCi0JRFNJX0VJTlRfUEVSSVBIX0VSUk9SX1BLVCA9 IDQsCi0JRFNJX0VJTlRfTFBfUlhfVElNRU9VVCA9IDUsCi0JRFNJX0VJTlRfSFNfVFhfVElNRU9V VCA9IDYsCi0JRFNJX0VJTlRfQlRBX1RJTUVPVVQgPSA3LAotCURTSV9FSU5UX1BMTF9VTkxPQ0sg PSA4LAotCURTSV9FSU5UX0RMTjBfRVNDX0VOVFJZX0VSUiA9IDksCi0JRFNJX0VJTlRfRExOMF9F U0NfU1lOQ19FUlIgPSAxMCwKLQlEU0lfRUlOVF9ETE4wX0xQX0NPTlRST0xfRVJSID0gMTEsCi0J RFNJX0VJTlRfUEVORElOR19IU19UWF9USU1FT1VUID0gMTIsCi0JRFNJX0VJTlRfSU5URVJMRUFW RV9PUF9DT05URU5USU9OID0gMTMsCi0JRFNJX0VJTlRfQ01EX0RNQV9GSUZPX1VOREVSRkxPVyA9 IDE0LAotCURTSV9FSU5UX0NNRF9NRFBfRklGT19VTkRFUkZMT1cgPSAxNSwKLQlEU0lfRUlOVF9E TE4wX0hTX0ZJRk9fT1ZFUkZMT1cgPSAxNiwKLQlEU0lfRUlOVF9ETE4xX0hTX0ZJRk9fT1ZFUkZM T1cgPSAxNywKLQlEU0lfRUlOVF9ETE4yX0hTX0ZJRk9fT1ZFUkZMT1cgPSAxOCwKLQlEU0lfRUlO VF9ETE4zX0hTX0ZJRk9fT1ZFUkZMT1cgPSAxOSwKLQlEU0lfRUlOVF9ETE4wX0hTX0ZJRk9fVU5E RVJGTE9XID0gMjAsCi0JRFNJX0VJTlRfRExOMV9IU19GSUZPX1VOREVSRkxPVyA9IDIxLAotCURT SV9FSU5UX0RMTjJfSFNfRklGT19VTkRFUkZMT1cgPSAyMiwKLQlEU0lfRUlOVF9ETE4zX0hTX0ZJ Rk9fVU5ERVJGTE9XID0gMjMsCi0JRFNJX0VJTlRfRExOMF9MUDBfQ09OVEVOVElPTiA9IDI0LAot CURTSV9FSU5UX0RMTjFfTFAwX0NPTlRFTlRJT04gPSAyNSwKLQlEU0lfRUlOVF9ETE4yX0xQMF9D T05URU5USU9OID0gMjYsCi0JRFNJX0VJTlRfRExOM19MUDBfQ09OVEVOVElPTiA9IDI3LAotCURT SV9FSU5UX0RMTjBfTFAxX0NPTlRFTlRJT04gPSAyOCwKLQlEU0lfRUlOVF9ETE4xX0xQMV9DT05U RU5USU9OID0gMjksCi0JRFNJX0VJTlRfRExOMl9MUDFfQ09OVEVOVElPTiA9IDMwLAotCURTSV9F SU5UX0RMTjNfTFAxX0NPTlRFTlRJT04gPSAzMSwKLQotCURTSV9FUlJPUl9JTlRFUlJVUFRfQ09V TlQKLX07Ci0KLS8qKgotICogZW51bSBkc2lfZXJyb3JfaW50X3R5cGUgLSBlcnJvciBpbnRlcnJ1 cHRzIGdlbmVyYXRlZCBieSBEU0kgY29udHJvbGxlcgotICogQERTSV9SREJLX1NJTkdMRV9FQ0Nf RVJSOiAgICAgICAgU2luZ2xlIGJpdCBFQ0MgZXJyb3IgaW4gcmVhZCBwYWNrZXQuCi0gKiBARFNJ X1JEQktfTVVMVElfRUNDX0VSUjogICAgICAgICBNdWx0aSBiaXQgRUNDIGVycm9yIGluIHJlYWQg cGFja2V0LgotICogQERTSV9SREJLX0NSQ19FUlI6ICAgICAgICAgICAgICAgQ1JDIGVycm9yIGlu IHJlYWQgcGFja2V0LgotICogQERTSV9SREJLX0lOQ09NUExFVEVfUEtUOiAgICAgICAgSW5jb21w bGV0ZSByZWFkIHBhY2tldC4KLSAqIEBEU0lfUEVSSVBIX0VSUk9SX1BLVDogICAgICAgICAgIEVy cm9yIHBhY2tldCByZXR1cm5lZCBmcm9tIHBlcmlwaGVyYWwsCi0gKiBARFNJX0xQX1JYX1RJTUVP VVQ6ICAgICAgICAgICAgICBMb3cgcG93ZXIgcmV2ZXJzZSB0cmFuc21pc3Npb24gdGltZW91dC4K LSAqIEBEU0lfSFNfVFhfVElNRU9VVDogICAgICAgICAgICAgIEhpZ2ggc3BlZWQgZm9yd2FyZCB0 cmFuc21pc3Npb24gdGltZW91dC4KLSAqIEBEU0lfQlRBX1RJTUVPVVQ6ICAgICAgICAgICAgICAg IEJUQSB0aW1lb3V0LgotICogQERTSV9QTExfVU5MT0NLOiAgICAgICAgICAgICAgICAgUExMIGhh cyB1bmxvY2tlZC4KLSAqIEBEU0lfRExOMF9FU0NfRU5UUllfRVJSOiAgICAgICAgIEluY29ycmVj dCBMUCBSeCBlc2NhcGUgZW50cnkuCi0gKiBARFNJX0RMTjBfRVNDX1NZTkNfRVJSOiAgICAgICAg ICBMUCBSeCBkYXRhIGlzIG5vdCBieXRlIGFsaWduZWQuCi0gKiBARFNJX0RMTjBfTFBfQ09OVFJP TF9FUlI6ICAgICAgICBJbmNvcnJlY3QgTFAgUnggc3RhdGUgc2VxdWVuY2UuCi0gKiBARFNJX1BF TkRJTkdfSFNfVFhfVElNRU9VVDogICAgICBQZW5kaW5nIEhpZ2gtc3BlZWQgdHJhbnNmZXIgdGlt ZW91dC4KLSAqIEBEU0lfSU5URVJMRUFWRV9PUF9DT05URU5USU9OOiAgIEludGVybGVhdmUgb3Bl cmF0aW9uIGNvbnRlbnRpb24uCi0gKiBARFNJX0NNRF9ETUFfRklGT19VTkRFUkZMT1c6ICAgICBD b21tYW5kIG1vZGUgRE1BIEZJRk8gdW5kZXJmbG93LgotICogQERTSV9DTURfTURQX0ZJRk9fVU5E RVJGTE9XOiAgICAgQ29tbWFuZCBNRFAgRklGTyB1bmRlcmZsb3cgKGZhaWxlZCB0bwotICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZSBvbmUgY29tcGxldGUgbGluZSBm cm9tIE1EUCkuCi0gKiBARFNJX0RMTjBfSFNfRklGT19PVkVSRkxPVzogICAgICBIaWdoIHNwZWVk IEZJRk8gZm9yIGRhdGEgbGFuZSAwIG92ZXJmbG93cy4KLSAqIEBEU0lfRExOMV9IU19GSUZPX09W RVJGTE9XOiAgICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBsYW5lIDEgb3ZlcmZsb3dzLgot ICogQERTSV9ETE4yX0hTX0ZJRk9fT1ZFUkZMT1c6ICAgICAgSGlnaCBzcGVlZCBGSUZPIGZvciBk YXRhIGxhbmUgMiBvdmVyZmxvd3MuCi0gKiBARFNJX0RMTjNfSFNfRklGT19PVkVSRkxPVzogICAg ICBIaWdoIHNwZWVkIEZJRk8gZm9yIGRhdGEgbGFuZSAzIG92ZXJmbG93cy4KLSAqIEBEU0lfRExO MF9IU19GSUZPX1VOREVSRkxPVzogICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBsYW5lIDAg dW5kZXJmbG93cy4KLSAqIEBEU0lfRExOMV9IU19GSUZPX1VOREVSRkxPVzogICAgIEhpZ2ggc3Bl ZWQgRklGTyBmb3IgZGF0YSBsYW5lIDEgdW5kZXJmbG93cy4KLSAqIEBEU0lfRExOMl9IU19GSUZP X1VOREVSRkxPVzogICAgIEhpZ2ggc3BlZWQgRklGTyBmb3IgZGF0YSBsYW5lIDIgdW5kZXJmbG93 cy4KLSAqIEBEU0lfRExOM19IU19GSUZPX1VOREVSRkxPVzogICAgIEhpZ2ggc3BlZWQgRklGTyBm b3IgZGF0YSBsYW5lIDMgdW5kZWZsb3dzLgotICogQERTSV9ETE4wX0xQMF9DT05URU5USU9OOiAg ICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAwIGlzIGxvdy4KLSAqIEBEU0lf RExOMV9MUDBfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9uIHdoaWxlIGxh bmUgMSBpcyBsb3cuCi0gKiBARFNJX0RMTjJfTFAwX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2 ZWwgY29udGVudGlvbiB3aGlsZSBsYW5lIDIgaXMgbG93LgotICogQERTSV9ETE4zX0xQMF9DT05U RU5USU9OOiAgICAgICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAzIGlzIGxvdy4K LSAqIEBEU0lfRExOMF9MUDFfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZlbCBjb250ZW50aW9u IHdoaWxlIGxhbmUgMCBpcyBoaWdoLgotICogQERTSV9ETE4xX0xQMV9DT05URU5USU9OOiAgICAg ICAgUEhZIGxldmVsIGNvbnRlbnRpb24gd2hpbGUgbGFuZSAxIGlzIGhpZ2guCi0gKiBARFNJX0RM TjJfTFAxX0NPTlRFTlRJT046ICAgICAgICBQSFkgbGV2ZWwgY29udGVudGlvbiB3aGlsZSBsYW5l IDIgaXMgaGlnaC4KLSAqIEBEU0lfRExOM19MUDFfQ09OVEVOVElPTjogICAgICAgIFBIWSBsZXZl bCBjb250ZW50aW9uIHdoaWxlIGxhbmUgMyBpcyBoaWdoLgotICovCi1lbnVtIGRzaV9lcnJvcl9p bnRfdHlwZSB7Ci0JRFNJX1JEQktfU0lOR0xFX0VDQ19FUlIgPSBCSVQoRFNJX0VJTlRfUkRCS19T SU5HTEVfRUNDX0VSUiksCi0JRFNJX1JEQktfTVVMVElfRUNDX0VSUiA9IEJJVChEU0lfRUlOVF9S REJLX01VTFRJX0VDQ19FUlIpLAotCURTSV9SREJLX0NSQ19FUlIgPSBCSVQoRFNJX0VJTlRfUkRC S19DUkNfRVJSKSwKLQlEU0lfUkRCS19JTkNPTVBMRVRFX1BLVCA9IEJJVChEU0lfRUlOVF9SREJL X0lOQ09NUExFVEVfUEtUKSwKLQlEU0lfUEVSSVBIX0VSUk9SX1BLVCA9IEJJVChEU0lfRUlOVF9Q RVJJUEhfRVJST1JfUEtUKSwKLQlEU0lfTFBfUlhfVElNRU9VVCA9IEJJVChEU0lfRUlOVF9MUF9S WF9USU1FT1VUKSwKLQlEU0lfSFNfVFhfVElNRU9VVCA9IEJJVChEU0lfRUlOVF9IU19UWF9USU1F T1VUKSwKLQlEU0lfQlRBX1RJTUVPVVQgPSBCSVQoRFNJX0VJTlRfQlRBX1RJTUVPVVQpLAotCURT SV9QTExfVU5MT0NLID0gQklUKERTSV9FSU5UX1BMTF9VTkxPQ0spLAotCURTSV9ETE4wX0VTQ19F TlRSWV9FUlIgPSBCSVQoRFNJX0VJTlRfRExOMF9FU0NfRU5UUllfRVJSKSwKLQlEU0lfRExOMF9F U0NfU1lOQ19FUlIgPSBCSVQoRFNJX0VJTlRfRExOMF9FU0NfU1lOQ19FUlIpLAotCURTSV9ETE4w X0xQX0NPTlRST0xfRVJSID0gQklUKERTSV9FSU5UX0RMTjBfTFBfQ09OVFJPTF9FUlIpLAotCURT SV9QRU5ESU5HX0hTX1RYX1RJTUVPVVQgPSBCSVQoRFNJX0VJTlRfUEVORElOR19IU19UWF9USU1F T1VUKSwKLQlEU0lfSU5URVJMRUFWRV9PUF9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0lOVEVS TEVBVkVfT1BfQ09OVEVOVElPTiksCi0JRFNJX0NNRF9ETUFfRklGT19VTkRFUkZMT1cgPSBCSVQo RFNJX0VJTlRfQ01EX0RNQV9GSUZPX1VOREVSRkxPVyksCi0JRFNJX0NNRF9NRFBfRklGT19VTkRF UkZMT1cgPSBCSVQoRFNJX0VJTlRfQ01EX01EUF9GSUZPX1VOREVSRkxPVyksCi0JRFNJX0RMTjBf SFNfRklGT19PVkVSRkxPVyA9IEJJVChEU0lfRUlOVF9ETE4wX0hTX0ZJRk9fT1ZFUkZMT1cpLAot CURTSV9ETE4xX0hTX0ZJRk9fT1ZFUkZMT1cgPSBCSVQoRFNJX0VJTlRfRExOMV9IU19GSUZPX09W RVJGTE9XKSwKLQlEU0lfRExOMl9IU19GSUZPX09WRVJGTE9XID0gQklUKERTSV9FSU5UX0RMTjJf SFNfRklGT19PVkVSRkxPVyksCi0JRFNJX0RMTjNfSFNfRklGT19PVkVSRkxPVyA9IEJJVChEU0lf RUlOVF9ETE4zX0hTX0ZJRk9fT1ZFUkZMT1cpLAotCURTSV9ETE4wX0hTX0ZJRk9fVU5ERVJGTE9X ID0gQklUKERTSV9FSU5UX0RMTjBfSFNfRklGT19VTkRFUkZMT1cpLAotCURTSV9ETE4xX0hTX0ZJ Rk9fVU5ERVJGTE9XID0gQklUKERTSV9FSU5UX0RMTjFfSFNfRklGT19VTkRFUkZMT1cpLAotCURT SV9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XID0gQklUKERTSV9FSU5UX0RMTjJfSFNfRklGT19VTkRF UkZMT1cpLAotCURTSV9ETE4zX0hTX0ZJRk9fVU5ERVJGTE9XID0gQklUKERTSV9FSU5UX0RMTjNf SFNfRklGT19VTkRFUkZMT1cpLAotCURTSV9ETE4wX0xQMF9DT05URU5USU9OID0gQklUKERTSV9F SU5UX0RMTjBfTFAwX0NPTlRFTlRJT04pLAotCURTSV9ETE4xX0xQMF9DT05URU5USU9OID0gQklU KERTSV9FSU5UX0RMTjFfTFAwX0NPTlRFTlRJT04pLAotCURTSV9ETE4yX0xQMF9DT05URU5USU9O ID0gQklUKERTSV9FSU5UX0RMTjJfTFAwX0NPTlRFTlRJT04pLAotCURTSV9ETE4zX0xQMF9DT05U RU5USU9OID0gQklUKERTSV9FSU5UX0RMTjNfTFAwX0NPTlRFTlRJT04pLAotCURTSV9ETE4wX0xQ MV9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0RMTjBfTFAxX0NPTlRFTlRJT04pLAotCURTSV9E TE4xX0xQMV9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0RMTjFfTFAxX0NPTlRFTlRJT04pLAot CURTSV9ETE4yX0xQMV9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0RMTjJfTFAxX0NPTlRFTlRJ T04pLAotCURTSV9ETE4zX0xQMV9DT05URU5USU9OID0gQklUKERTSV9FSU5UX0RMTjNfTFAxX0NP TlRFTlRJT04pLAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9pbmZvIC0g Y29tbWFuZCBidWZmZXIgaW5mb3JtYXRpb24KLSAqIEBvZmZzZXQ6ICAgICAgICBJT01NVSBWQSBm b3IgY29tbWFuZCBidWZmZXIgYWRkcmVzcy4KLSAqIEBsZW5ndGg6ICAgICAgICBMZW5ndGggb2Yg dGhlIGNvbW1hbmQgYnVmZmVyLgotICogQGVuX2Jyb2FkY2FzdDogIEVuYWJsZSBicm9hZGNhc3Qg bW9kZSBpZiBzZXQgdG8gdHJ1ZS4KLSAqIEBpc19tYXN0ZXI6ICAgICBJcyBtYXN0ZXIgaW4gYnJv YWRjYXN0IG1vZGUuCi0gKiBAdXNlX2xwbTogICAgICAgVXNlIGxvdyBwb3dlciBtb2RlIGZvciBj b21tYW5kIHRyYW5zbWlzc2lvbi4KLSAqLwotc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFfaW5mbyB7 Ci0JdTMyIG9mZnNldDsKLQl1MzIgbGVuZ3RoOwotCWJvb2wgZW5fYnJvYWRjYXN0OwotCWJvb2wg aXNfbWFzdGVyOwotCWJvb2wgdXNlX2xwbTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9jdHJs X2NtZF9kbWFfZmlmb19pbmZvIC0gY29tbWFuZCBwYXlsb2FkIHRwIGJlIHNlbnQgdXNpbmcgRklG TwotICogQGNvbW1hbmQ6ICAgICAgICBWQSBmb3IgY29tbWFuZCBidWZmZXIuCi0gKiBAc2l6ZTog ICAgICAgICAgIFNpemUgb2YgdGhlIGNvbW1hbmQgYnVmZmVyLgotICogQGVuX2Jyb2FkY2FzdDog ICBFbmFibGUgYnJvYWRjYXN0IG1vZGUgaWYgc2V0IHRvIHRydWUuCi0gKiBAaXNfbWFzdGVyOiAg ICAgIElzIG1hc3RlciBpbiBicm9hZGNhc3QgbW9kZS4KLSAqIEB1c2VfbHBtOiAgICAgICAgVXNl IGxvdyBwb3dlciBtb2RlIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4KLSAqLwotc3RydWN0IGRz aV9jdHJsX2NtZF9kbWFfZmlmb19pbmZvIHsKLQl1MzIgKmNvbW1hbmQ7Ci0JdTMyIHNpemU7Ci0J Ym9vbCBlbl9icm9hZGNhc3Q7Ci0JYm9vbCBpc19tYXN0ZXI7Ci0JYm9vbCB1c2VfbHBtOwotfTsK LQotc3RydWN0IGRzaV9jdHJsX2h3OwotCi1zdHJ1Y3QgY3RybF91bHBzX2NvbmZpZ19vcHMgewot CS8qKgotCSAqIHVscHNfcmVxdWVzdCgpIC0gcmVxdWVzdCB1bHBzIGVudHJ5IGZvciBzcGVjaWZp ZWQgbGFuZXMKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBo b3N0IGhhcmR3YXJlLgotCSAqIEBsYW5lczogICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVu dW0gZHNpX2RhdGFfbGFuZXMpIHdoaWNoIG5lZWQKLQkgKiAgICAgICAgICAgICAgICAgdG8gZW50 ZXIgVUxQUy4KLQkgKgotCSAqIENhbGxlciBzaG91bGQgY2hlY2sgaWYgbGFuZXMgYXJlIGluIFVM UFMgbW9kZSBieSBjYWxsaW5nCi0JICogZ2V0X2xhbmVzX2luX3VscHMoKSBvcGVyYXRpb24uCi0J ICovCi0Jdm9pZCAoKnVscHNfcmVxdWVzdCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIg bGFuZXMpOwotCi0JLyoqCi0JICogdWxwc19leGl0KCkgLSBleGl0IFVMUFMgb24gc3BlY2lmaWVk IGxhbmVzCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9z dCBoYXJkd2FyZS4KLQkgKiBAbGFuZXM6ICAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIChlbnVt IGRzaV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0JICogICAgICAgICAgICAgICAgIHRvIGV4aXQg VUxQUy4KLQkgKgotCSAqIENhbGxlciBzaG91bGQgY2hlY2sgaWYgbGFuZXMgYXJlIGluIGFjdGl2 ZSBtb2RlIGJ5IGNhbGxpbmcKLQkgKiBnZXRfbGFuZXNfaW5fdWxwcygpIG9wZXJhdGlvbi4KLQkg Ki8KLQl2b2lkICgqdWxwc19leGl0KShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5l cyk7Ci0KLQkvKioKLQkgKiBnZXRfbGFuZXNfaW5fdWxwcygpIC0gcmV0dXJucyB0aGUgbGlzdCBv ZiBsYW5lcyBpbiBVTFBTIG1vZGUKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUg Y29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqCi0JICogUmV0dXJucyBhbiBPUmVkIGxpc3Qg b2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHRoYXQgYXJlIGluIFVMUFMKLQkgKiBzdGF0 ZS4gSWYgMCBpcyByZXR1cm5lZCwgYWxsIHRoZSBsYW5lcyBhcmUgYWN0aXZlLgotCSAqCi0JICog UmV0dXJuOiBMaXN0IG9mIGxhbmVzIGluIFVMUFMgc3RhdGUuCi0JICovCi0JdTMyICgqZ2V0X2xh bmVzX2luX3VscHMpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCk7Ci19OwotCi0vKioKLSAqIHN0 cnVjdCBkc2lfY3RybF9od19vcHMgLSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBkc2kgaG9zdCBo YXJkd2FyZQotICovCi1zdHJ1Y3QgZHNpX2N0cmxfaHdfb3BzIHsKLQotCS8qKgotCSAqIGhvc3Rf c2V0dXAoKSAtIFNldHVwIERTSSBob3N0IGNvbmZpZ3VyYXRpb24KLQkgKiBAY3RybDogICAgICAg ICAgUG9pbnRlciB0byBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGNvbmZpZzogICAg ICAgIENvbmZpZ3VyYXRpb24gZm9yIERTSSBob3N0IGNvbnRyb2xsZXIKLQkgKi8KLQl2b2lkICgq aG9zdF9zZXR1cCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgc3RydWN0IGRzaV9o b3N0X2NvbW1vbl9jZmcgKmNvbmZpZyk7Ci0KLQkvKioKLQkgKiB2aWRlb19lbmdpbmVfZW4oKSAt IGVuYWJsZSBEU0kgdmlkZW8gZW5naW5lCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8g Y29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBvbjogICAgICAgICAgICBFbmFibGUvZGlz YWJlbCB2aWRlbyBlbmdpbmUuCi0JICovCi0Jdm9pZCAoKnZpZGVvX2VuZ2luZV9lbikoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsLCBib29sIG9uKTsKLQotCS8qKgotCSAqIHZpZGVvX2VuZ2luZV9z ZXR1cCgpIC0gU2V0dXAgZHNpIGhvc3QgY29udHJvbGxlciBmb3IgdmlkZW8gbW9kZQotCSAqIEBj dHJsOiAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBA Y29tbW9uX2NmZzogICAgQ29tbW9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLQkgKiBAY2Zn OiAgICAgICAgICAgVmlkZW8gbW9kZSBjb25maWd1cmF0aW9uLgotCSAqCi0JICogU2V0IHVwIERT SSB2aWRlbyBlbmdpbmUgd2l0aCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIENvbnRyb2xsZXIg YW5kCi0JICogdmlkZW8gZW5naW5lIGFyZSBub3QgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoaXMgZnVu Y3Rpb24uCi0JICovCi0Jdm9pZCAoKnZpZGVvX2VuZ2luZV9zZXR1cCkoc3RydWN0IGRzaV9jdHJs X2h3ICpjdHJsLAotCQkJCSAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjb21tb25fY2Zn LAotCQkJCSAgIHN0cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyAqY2ZnKTsKLQotCS8qKgotCSAq IHNldF92aWRlb190aW1pbmcoKSAtIHNldCB1cCB0aGUgdGltaW5nIGZvciB2aWRlbyBmcmFtZQot CSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4K LQkgKiBAbW9kZTogICAgICAgICAgVmlkZW8gbW9kZSBpbmZvcm1hdGlvbi4KLQkgKgotCSAqIFNl dCB1cCB0aGUgdmlkZW8gdGltaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBEU0kgdmlkZW8gbW9kZSBv cGVyYXRpb24uCi0JICovCi0Jdm9pZCAoKnNldF92aWRlb190aW1pbmcpKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCwKLQkJCQkgc3RydWN0IGRzaV9tb2RlX2luZm8gKm1vZGUpOwotCi0JLyoqCi0J ICogY21kX2VuZ2luZV9zZXR1cCgpIC0gc2V0dXAgZHNpIGhvc3QgY29udHJvbGxlciBmb3IgY29t bWFuZCBtb2RlCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIg aG9zdCBoYXJkd2FyZS4KLQkgKiBAY29tbW9uX2NmZzogICAgQ29tbW9uIGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVycy4KLQkgKiBAY2ZnOiAgICAgICAgICAgQ29tbWFuZCBtb2RlIGNvbmZpZ3VyYXRp b24uCi0JICoKLQkgKiBTZXR1cCBEU0kgQ01EIGVuZ2luZSB3aXRoIGEgc3BlY2lmaWMgY29uZmln dXJhdGlvbi4gQ29udHJvbGxlciBhbmQKLQkgKiBjb21tYW5kIGVuZ2luZSBhcmUgbm90IGVuYWJs ZWQgYXMgcGFydCBvZiB0aGlzIGZ1bmN0aW9uLgotCSAqLwotCXZvaWQgKCpjbWRfZW5naW5lX3Nl dHVwKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJIHN0cnVjdCBkc2lfaG9zdF9jb21t b25fY2ZnICpjb21tb25fY2ZnLAotCQkJCSBzdHJ1Y3QgZHNpX2NtZF9lbmdpbmVfY2ZnICpjZmcp OwotCi0JLyoqCi0JICogc2V0dXBfY21kX3N0cmVhbSgpIC0gc2V0IHVwIHBhcmFtZXRlcnMgZm9y IGNvbW1hbmQgcGl4ZWwgc3RyZWFtcwotCSAqIEBjdHJsOiAgICAgICAgICAgICAgUG9pbnRlciB0 byBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQG1vZGU6ICAgICAgICAgICAgICBQb2lu dGVyIHRvIG1vZGUgaW5mb3JtYXRpb24uCi0JICogQGhfc3RyaWRlOiAgICAgICAgICBIb3Jpem9u dGFsIHN0cmlkZSBpbiBieXRlcy4KLQkgKiBAdmNfaWQ6ICAgICAgICAgICAgIHN0cmVhbV9pZC4K LQkgKgotCSAqIFNldHVwIHBhcmFtZXRlcnMgZm9yIGNvbW1hbmQgbW9kZSBwaXhlbCBzdHJlYW0g c2l6ZS4KLQkgKi8KLQl2b2lkICgqc2V0dXBfY21kX3N0cmVhbSkoc3RydWN0IGRzaV9jdHJsX2h3 ICpjdHJsLAotCQkJCSBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSwKLQkJCQkgdTMyIGhfc3Ry aWRlLAotCQkJCSB1MzIgdmNfaWQsCi0JCQkJIHN0cnVjdCBkc2lfcmVjdCAqcm9pKTsKLQotCS8q KgotCSAqIGN0cmxfZW4oKSAtIGVuYWJsZSBEU0kgY29udHJvbGxlciBlbmdpbmUKLQkgKiBAY3Ry bDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAq IEBvbjogICAgICAgICAgICB0dXJuIG9uL29mZiB0aGUgRFNJIGNvbnRyb2xsZXIgZW5naW5lLgot CSAqLwotCXZvaWQgKCpjdHJsX2VuKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgb24p OwotCi0JLyoqCi0JICogY21kX2VuZ2luZV9lbigpIC0gZW5hYmxlIERTSSBjb250cm9sbGVyIGNv bW1hbmQgZW5naW5lCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAb246ICAgICAgICAgICAgVHVybiBvbi9vZmYgdGhlIERT SSBjb21tYW5kIGVuZ2luZS4KLQkgKi8KLQl2b2lkICgqY21kX2VuZ2luZV9lbikoc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsLCBib29sIG9uKTsKLQotCS8qKgotCSAqIHBoeV9zd19yZXNldCgpIC0g cGVyZm9ybSBhIHNvZnQgcmVzZXQgb24gdGhlIFBIWS4KLQkgKiBAY3RybDogICAgICAgIFBvaW50 ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKi8KLQl2b2lkICgqcGh5X3N3 X3Jlc2V0KShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCi0JLyoqCi0JICogZGVidWdfYnVz KCkgLSBnZXQgZHNpIGRlYnVnIGJ1cyBzdGF0dXMuCi0JICogQGN0cmw6ICAgICAgICBQb2ludGVy IHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICovCi0Jdm9pZCAoKmRlYnVnX2J1 cykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotCS8qKgotCSAqIHNvZnRfcmVzZXQoKSAt IHBlcmZvcm0gYSBzb2Z0IHJlc2V0IG9uIERTSSBjb250cm9sbGVyCi0JICogQGN0cmw6ICAgICAg ICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKgotCSAqIFRo ZSB2aWRlbywgY29tbWFuZCBhbmQgY29udHJvbGxlciBlbmdpbmVzIHdpbGwgYmUgZGlzYWJsZWQg YmVmb3JlIHRoZQotCSAqIHJlc2V0IGlzIHRyaWdnZXJlZC4gQWZ0ZXIsIHRoZSBlbmdpbmVzIHdp bGwgYmUgcmUtZW5hYmxlZCB0byB0aGUgc2FtZQotCSAqIHN0YXRlIGFzIGJlZm9yZSB0aGUgcmVz ZXQuCi0JICoKLQkgKiBJZiB0aGUgcmVzZXQgaXMgZG9uZSB3aGlsZSBNRFAgdGltaW5nIGVuZ2lu ZSBpcyB0dXJuZWQgb24sIHRoZSB2aWRlbwotCSAqIGVuZ2luZSBzaG91bGQgYmUgcmUtZW5hYmxl ZCBvbmx5IGR1cmluZyB0aGUgdmVydGljYWwgYmxhbmtpbmcgdGltZS4KLQkgKi8KLQl2b2lkICgq c29mdF9yZXNldCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotCS8qKgotCSAqIHNldHVw X2xhbmVfbWFwKCkgLSBzZXR1cCBtYXBwaW5nIGJldHdlZW4gbG9naWNhbCBhbmQgcGh5c2ljYWwg bGFuZXMKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0 IGhhcmR3YXJlLgotCSAqIEBsYW5lX21hcDogICAgICBTdHJ1Y3R1cmUgZGVmaW5pbmcgdGhlIG1h cHBpbmcgYmV0d2VlbiBEU0kgbG9naWNhbAotCSAqICAgICAgICAgICAgICAgICBsYW5lcyBhbmQg cGh5c2ljYWwgbGFuZXMuCi0JICovCi0Jdm9pZCAoKnNldHVwX2xhbmVfbWFwKShzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgICAgc3RydWN0IGRzaV9sYW5lX21hcCAqbGFuZV9tYXAp OwotCi0JLyoqCi0JICoga2lja29mZl9jb21tYW5kKCkgLSB0cmFuc21pdHMgY29tbWFuZHMgc3Rv cmVkIGluIG1lbW9yeQotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9s bGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGNtZDogICAgICAgICAgIENvbW1hbmQgaW5mb3JtYXRp b24uCi0JICogQGZsYWdzOiAgICAgICAgIE1vZGlmaWVycyBmb3IgY29tbWFuZCB0cmFuc21pc3Np b24uCi0JICoKLQkgKiBUaGUgY29udHJvbGxlciBoYXJkd2FyZSBpcyBwcm9ncmFtbWVkIHdpdGgg YWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUKLQkgKiBjb21tYW5kIGJ1ZmZlci4gVGhlIHRyYW5zbWlz c2lvbiBpcyBraWNrZWQgb2ZmIGlmCi0JICogRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdH RVIgZmxhZyBpcyBub3Qgc2V0LiBJZiB0aGlzIGZsYWcgaXMKLQkgKiBzZXQsIGNhbGxlciBzaG91 bGQgbWFrZSBhIHNlcGFyYXRlIGNhbGwgdG8gdHJpZ2dlcl9jb21tYW5kX2RtYSgpIHRvCi0JICog dHJhbnNtaXQgdGhlIGNvbW1hbmQuCi0JICovCi0Jdm9pZCAoKmtpY2tvZmZfY29tbWFuZCkoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCXN0cnVjdCBkc2lfY3RybF9jbWRfZG1hX2luZm8g KmNtZCwKLQkJCQl1MzIgZmxhZ3MpOwotCi0JLyoqCi0JICoga2lja29mZl9maWZvX2NvbW1hbmQo KSAtIHRyYW5zbWl0cyBhIGNvbW1hbmQgdXNpbmcgRklGTyBpbiBkc2kKLQkgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgaGFyZHdhcmUuCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAY21kOiAgICAgICAgICAgQ29tbWFu ZCBpbmZvcm1hdGlvbi4KLQkgKiBAZmxhZ3M6ICAgICAgICAgTW9kaWZpZXJzIGZvciBjb21tYW5k IHRyYW5zbWlzc2lvbi4KLQkgKgotCSAqIFRoZSBjb250cm9sbGVyIGhhcmR3YXJlIEZJRk8gaXMg cHJvZ3JhbW1lZCB3aXRoIGNvbW1hbmQgaGVhZGVyIGFuZAotCSAqIHBheWxvYWQuIFRoZSB0cmFu c21pc3Npb24gaXMga2lja2VkIG9mZiBpZgotCSAqIERTSV9DVFJMX0hXX0NNRF9XQUlUX0ZPUl9U UklHR0VSIGZsYWcgaXMgbm90IHNldC4gSWYgdGhpcyBmbGFnIGlzCi0JICogc2V0LCBjYWxsZXIg c2hvdWxkIG1ha2UgYSBzZXBhcmF0ZSBjYWxsIHRvIHRyaWdnZXJfY29tbWFuZF9kbWEoKSB0bwot CSAqIHRyYW5zbWl0IHRoZSBjb21tYW5kLgotCSAqLwotCXZvaWQgKCpraWNrb2ZmX2ZpZm9fY29t bWFuZCkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgc3RydWN0IGRzaV9jdHJs X2NtZF9kbWFfZmlmb19pbmZvICpjbWQsCi0JCQkJICAgICB1MzIgZmxhZ3MpOwotCi0Jdm9pZCAo KnJlc2V0X2NtZF9maWZvKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpOwotCS8qKgotCSAqIHRy aWdnZXJfY29tbWFuZF9kbWEoKSAtIHRyaWdnZXIgdHJhbnNtaXNzaW9uIG9mIGNvbW1hbmQgYnVm ZmVyLgotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0JICoKLQkgKiBUaGlzIHRyaWdnZXIgY2FuIGJlIG9ubHkgdXNlZCBpZiB0aGVy ZSB3YXMgYSBwcmlvciBjYWxsIHRvCi0JICoga2lja29mZl9jb21tYW5kKCkgb2Yga2lja29mZl9m aWZvX2NvbW1hbmQoKSB3aXRoCi0JICogRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIg ZmxhZy4KLQkgKi8KLQl2b2lkICgqdHJpZ2dlcl9jb21tYW5kX2RtYSkoc3RydWN0IGRzaV9jdHJs X2h3ICpjdHJsKTsKLQotCS8qKgotCSAqIGdldF9jbWRfcmVhZF9kYXRhKCkgLSBnZXQgZGF0YSBy ZWFkIGZyb20gdGhlIHBlcmlwaGVyYWwKLQkgKiBAY3RybDogICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAcmRfYnVmOiAgICAgICAgIEJ1ZmZl ciB3aGVyZSBkYXRhIHdpbGwgYmUgcmVhZCBpbnRvLgotCSAqIEB0b3RhbF9yZWFkX2xlbjogTnVt YmVyIG9mIGJ5dGVzIHRvIHJlYWQuCi0JICovCi0JdTMyICgqZ2V0X2NtZF9yZWFkX2RhdGEpKHN0 cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgdTggKnJkX2J1ZiwKLQkJCQkgdTMyIHRvdGFs X3JlYWRfbGVuKTsKLQotCS8qKgotCSAqIHdhaXRfZm9yX2xhbmVfaWRsZSgpIC0gd2FpdCBmb3Ig RFNJIGxhbmVzIHRvIGdvIHRvIGlkbGUgc3RhdGUKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRl ciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBsYW5lczogICAgICAgICBP UmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHdoaWNoIG5lZWQKLQkgKiAg ICAgICAgICAgICAgICAgdG8gYmUgY2hlY2tlZCB0byBiZSBpbiBpZGxlIHN0YXRlLgotCSAqLwot CWludCAoKndhaXRfZm9yX2xhbmVfaWRsZSkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIg bGFuZXMpOwotCi0Jc3RydWN0IGN0cmxfdWxwc19jb25maWdfb3BzIHVscHNfb3BzOwotCi0JLyoq Ci0JICogY2xhbXBfZW5hYmxlKCkgLSBlbmFibGUgRFNJIGNsYW1wcwotCSAqIEBjdHJsOiAgICAg ICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAbGFuZXM6 ICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgd2hpY2ggbmVlZCB0byBoYXZlIGNsYW1wcyByZWxl YXNlZC4KLQkgKiBAZW5hYmxlX3VscHM6IHVscHMgc3RhdGUuCi0JICovCi0KLQkvKioKLQkgKiBj bGFtcF9lbmFibGUoKSAtIGVuYWJsZSBEU0kgY2xhbXBzIHRvIGtlZXAgUEhZIGRyaXZpbmcgYSBz dGFibGUgbGluawotCSAqIEBjdHJsOiAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIg aG9zdCBoYXJkd2FyZS4KLQkgKiBAbGFuZXM6ICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgd2hp Y2ggbmVlZCB0byBoYXZlIGNsYW1wcyByZWxlYXNlZC4KLQkgKiBAZW5hYmxlX3VscHM6IFRPRE86 Pz8KLQkgKi8KLQl2b2lkICgqY2xhbXBfZW5hYmxlKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmws Ci0JCQkgICAgIHUzMiBsYW5lcywKLQkJCSAgICAgYm9vbCBlbmFibGVfdWxwcyk7Ci0KLQkvKioK LQkgKiBjbGFtcF9kaXNhYmxlKCkgLSBkaXNhYmxlIERTSSBjbGFtcHMKLQkgKiBAY3RybDogICAg ICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQGxhbmVz OiAgICAgICAgT1JlZCBsaXN0IG9mIGxhbmVzIHdoaWNoIG5lZWQgdG8gaGF2ZSBjbGFtcHMgcmVs ZWFzZWQuCi0JICogQGRpc2FibGVfdWxwczogdWxwcyBzdGF0ZS4KLQkgKi8KLQl2b2lkICgqY2xh bXBfZGlzYWJsZSkoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgICAgdTMyIGxhbmVz LAotCQkJICAgICAgYm9vbCBkaXNhYmxlX3VscHMpOwotCi0JLyoqCi0JICogcGh5X3Jlc2V0X2Nv bmZpZygpIC0gRGlzYWJsZS9lbmFibGUgcHJvcGFnYXRpb24gb2YgIHJlc2V0IHNpZ25hbAotCSAq CWZyb20gYWhiIGRvbWFpbiB0byBEU0kgUEhZCi0JICogQGN0cmw6ICAgICAgICAgUG9pbnRlciB0 byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBlbmFibGU6CVRydWUgdG8gbWFz ayB0aGUgcmVzZXQgc2lnbmFsLCBmYWxzZSB0byB1bm1hc2sKLQkgKi8KLQl2b2lkICgqcGh5X3Jl c2V0X2NvbmZpZykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJICAgICBib29sIGVuYWJs ZSk7Ci0KLQkvKioKLQkgKiBnZXRfaW50ZXJydXB0X3N0YXR1cygpIC0gcmV0dXJucyB0aGUgaW50 ZXJydXB0IHN0YXR1cwotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9s bGVyIGhvc3QgaGFyZHdhcmUuCi0JICoKLQkgKiBSZXR1cm5zIHRoZSBPUmVkIGxpc3Qgb2YgaW50 ZXJydXB0cyhlbnVtIGRzaV9zdGF0dXNfaW50X3R5cGUpIHRoYXQKLQkgKiBhcmUgYWN0aXZlLiBU aGlzIGxpc3QgZG9lcyBub3QgaW5jbHVkZSBhbnkgZXJyb3IgaW50ZXJydXB0cy4gQ2FsbGVyCi0J ICogc2hvdWxkIGNhbGwgZ2V0X2Vycm9yX3N0YXR1cyBmb3IgZXJyb3IgaW50ZXJydXB0cy4KLQkg KgotCSAqIFJldHVybjogTGlzdCBvZiBhY3RpdmUgaW50ZXJydXB0cy4KLQkgKi8KLQl1MzIgKCpn ZXRfaW50ZXJydXB0X3N0YXR1cykoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotCS8qKgot CSAqIGNsZWFyX2ludGVycnVwdF9zdGF0dXMoKSAtIGNsZWFycyB0aGUgc3BlY2lmaWVkIGludGVy cnVwdHMKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0 IGhhcmR3YXJlLgotCSAqIEBpbnRzOiAgICAgICAgICBMaXN0IG9mIGludGVycnVwdHMgdG8gYmUg Y2xlYXJlZC4KLQkgKi8KLQl2b2lkICgqY2xlYXJfaW50ZXJydXB0X3N0YXR1cykoc3RydWN0IGRz aV9jdHJsX2h3ICpjdHJsLCB1MzIgaW50cyk7Ci0KLQkvKioKLQkgKiBlbmFibGVfc3RhdHVzX2lu dGVycnVwdHMoKSAtIGVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMKLQkgKiBAY3RybDog ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBp bnRzOiAgICAgICAgICBMaXN0IG9mIGludGVycnVwdHMgdG8gYmUgZW5hYmxlZC4KLQkgKgotCSAq IEVuYWJsZXMgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLiBUaGlzIGxpc3Qgd2lsbCBvdmVycmlk ZSB0aGUKLQkgKiBwcmV2aW91cyBpbnRlcnJ1cHRzIGVuYWJsZWQgdGhyb3VnaCB0aGlzIGZ1bmN0 aW9uLiBDYWxsZXIgaGFzIHRvCi0JICogbWFpbnRhaW4gdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnJ1 cHRzIGVuYWJsZWQuIFRvIGRpc2FibGUgYWxsCi0JICogaW50ZXJydXB0cywgc2V0IGludHMgdG8g MC4KLQkgKi8KLQl2b2lkICgqZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKShzdHJ1Y3QgZHNpX2N0 cmxfaHcgKmN0cmwsIHUzMiBpbnRzKTsKLQotCS8qKgotCSAqIGdldF9lcnJvcl9zdGF0dXMoKSAt IHJldHVybnMgdGhlIGVycm9yIHN0YXR1cwotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRv IHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICoKLQkgKiBSZXR1cm5zIHRoZSBPUmVk IGxpc3Qgb2YgZXJyb3JzKGVudW0gZHNpX2Vycm9yX2ludF90eXBlKSB0aGF0IGFyZQotCSAqIGFj dGl2ZS4gVGhpcyBsaXN0IGRvZXMgbm90IGluY2x1ZGUgYW55IHN0YXR1cyBpbnRlcnJ1cHRzLiBD YWxsZXIKLQkgKiBzaG91bGQgY2FsbCBnZXRfaW50ZXJydXB0X3N0YXR1cyBmb3Igc3RhdHVzIGlu dGVycnVwdHMuCi0JICoKLQkgKiBSZXR1cm46IExpc3Qgb2YgYWN0aXZlIGVycm9yIGludGVycnVw dHMuCi0JICovCi0JdTY0ICgqZ2V0X2Vycm9yX3N0YXR1cykoc3RydWN0IGRzaV9jdHJsX2h3ICpj dHJsKTsKLQotCS8qKgotCSAqIGNsZWFyX2Vycm9yX3N0YXR1cygpIC0gY2xlYXJzIHRoZSBzcGVj aWZpZWQgZXJyb3JzCi0JICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAZXJyb3JzOiAgICAgICAgICBMaXN0IG9mIGVycm9ycyB0 byBiZSBjbGVhcmVkLgotCSAqLwotCXZvaWQgKCpjbGVhcl9lcnJvcl9zdGF0dXMpKHN0cnVjdCBk c2lfY3RybF9odyAqY3RybCwgdTY0IGVycm9ycyk7Ci0KLQkvKioKLQkgKiBlbmFibGVfZXJyb3Jf aW50ZXJydXB0cygpIC0gZW5hYmxlIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cwotCSAqIEBjdHJs OiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICog QGVycm9yczogICAgICAgIExpc3Qgb2YgZXJyb3JzIHRvIGJlIGVuYWJsZWQuCi0JICoKLQkgKiBF bmFibGVzIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4gVGhpcyBsaXN0IHdpbGwgb3ZlcnJpZGUg dGhlCi0JICogcHJldmlvdXMgaW50ZXJydXB0cyBlbmFibGVkIHRocm91Z2ggdGhpcyBmdW5jdGlv bi4gQ2FsbGVyIGhhcyB0bwotCSAqIG1haW50YWluIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0 cyBlbmFibGVkLiBUbyBkaXNhYmxlIGFsbAotCSAqIGludGVycnVwdHMsIHNldCBlcnJvcnMgdG8g MC4KLQkgKi8KLQl2b2lkICgqZW5hYmxlX2Vycm9yX2ludGVycnVwdHMpKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCwgdTY0IGVycm9ycyk7Ci0KLQkvKioKLQkgKiB2aWRlb190ZXN0X3BhdHRlcm5f c2V0dXAoKSAtIHNldHVwIHRlc3QgcGF0dGVybiBlbmdpbmUgZm9yIHZpZGVvIG1vZGUKLQkgKiBA Y3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgot CSAqIEB0eXBlOiAgICAgICAgICBUeXBlIG9mIHRlc3QgcGF0dGVybi4KLQkgKiBAaW5pdF92YWw6 ICAgICAgSW5pdGlhbCB2YWx1ZSB0byB1c2UgZm9yIGdlbmVyYXRpbmcgdGVzdCBwYXR0ZXJuLgot CSAqLwotCXZvaWQgKCp2aWRlb190ZXN0X3BhdHRlcm5fc2V0dXApKHN0cnVjdCBkc2lfY3RybF9o dyAqY3RybCwKLQkJCQkJIGVudW0gZHNpX3Rlc3RfcGF0dGVybiB0eXBlLAotCQkJCQkgdTMyIGlu aXRfdmFsKTsKLQotCS8qKgotCSAqIGNtZF90ZXN0X3BhdHRlcm5fc2V0dXAoKSAtIHNldHVwIHRl c3QgcGF0dHRlcm4gZW5naW5lIGZvciBjbWQgbW9kZQotCSAqIEBjdHJsOiAgICAgICAgICBQb2lu dGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQHR5cGU6ICAgICAgICAg IFR5cGUgb2YgdGVzdCBwYXR0ZXJuLgotCSAqIEBpbml0X3ZhbDogICAgICBJbml0aWFsIHZhbHVl IHRvIHVzZSBmb3IgZ2VuZXJhdGluZyB0ZXN0IHBhdHRlcm4uCi0JICogQHN0cmVhbV9pZDogICAg IFN0cmVhbSBJZCBvbiB3aGljaCBwYWNrZXRzIGFyZSBnZW5lcmF0ZWQuCi0JICovCi0Jdm9pZCAo KmNtZF90ZXN0X3BhdHRlcm5fc2V0dXApKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkg ICAgICAgZW51bSBkc2lfdGVzdF9wYXR0ZXJuICB0eXBlLAotCQkJCSAgICAgICB1MzIgaW5pdF92 YWwsCi0JCQkJICAgICAgIHUzMiBzdHJlYW1faWQpOwotCi0JLyoqCi0JICogdGVzdF9wYXR0ZXJu X2VuYWJsZSgpIC0gZW5hYmxlIHRlc3QgcGF0dGVybiBlbmdpbmUKLQkgKiBAY3RybDogICAgICAg ICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotCSAqIEBlbmFibGU6 ICAgICAgICBFbmFibGUvRGlzYWJsZSB0ZXN0IHBhdHRlcm4gZW5naW5lLgotCSAqLwotCXZvaWQg KCp0ZXN0X3BhdHRlcm5fZW5hYmxlKShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIGJvb2wgZW5h YmxlKTsKLQotCS8qKgotCSAqIGNsZWFyX3BoeTBfbG5fZXJyKCkgLSBjbGVhciBEU0kgUEhZIGxh bmUtMCBlcnJvcnMKLQkgKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxl ciBob3N0IGhhcmR3YXJlLgotCSAqLwotCXZvaWQgKCpjbGVhcl9waHkwX2xuX2Vycikoc3RydWN0 IGRzaV9jdHJsX2h3ICpjdHJsKTsKLQotCS8qKgotCSAqIHRyaWdnZXJfY21kX3Rlc3RfcGF0dGVy bigpIC0gdHJpZ2dlciBhIGNvbW1hbmQgbW9kZSBmcmFtZSB1cGRhdGUgd2l0aAotCSAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCBwYXR0ZXJuCi0JICogQGN0cmw6ICAgICAgICAg IFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAc3RyZWFtX2lk OiAgICAgU3RyZWFtIG9uIHdoaWNoIGZyYW1lIHVwZGF0ZSBpcyBzZW50LgotCSAqLwotCXZvaWQg KCp0cmlnZ2VyX2NtZF90ZXN0X3BhdHRlcm4pKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJ CQkJIHUzMiBzdHJlYW1faWQpOwotCi0Jc3NpemVfdCAoKnJlZ19kdW1wX3RvX2J1ZmZlcikoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgIGNoYXIgKmJ1ZiwKLQkJCQkgICAgICB1 MzIgc2l6ZSk7Ci0KLQkvKioKLQkgKiBzZXR1cF9taXNyKCkgLSBTZXR1cCBmcmFtZSBNSVNSCi0J ICogQGN0cmw6ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotCSAqIEBwYW5lbF9tb2RlOiAgIENNRCBvciBWSURFTyBtb2RlIGluZGljYXRvcgotCSAqIEBl bmFibGU6ICAgICAgIEVuYWJsZS9kaXNhYmxlIE1JU1IuCi0JICogQGZyYW1lX2NvdW50OiAgTnVt YmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIE1JU1IuCi0JICovCi0Jdm9pZCAoKnNldHVwX21p c3IpKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCSAgIGVudW0gZHNpX29wX21vZGUgcGFu ZWxfbW9kZSwKLQkJCSAgIGJvb2wgZW5hYmxlLCB1MzIgZnJhbWVfY291bnQpOwotCi0JLyoqCi0J ICogY29sbGVjdF9taXNyKCkgLSBSZWFkIGZyYW1lIE1JU1IKLQkgKiBAY3RybDogICAgICAgICBQ b2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0JICogQHBhbmVsX21vZGU6 ICAgQ01EIG9yIFZJREVPIG1vZGUgaW5kaWNhdG9yCi0JICovCi0JdTMyICgqY29sbGVjdF9taXNy KShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgZW51bSBkc2lfb3BfbW9kZSBwYW5l bF9tb2RlKTsKLQotCS8qKgotCSAqIHNldF90aW1pbmdfZGIoKSAtIGVuYWJsZS9kaXNhYmxlIFRp bWluZyBEQiByZWdpc3RlcgotCSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIGNvbnRyb2xs ZXIgaG9zdCBoYXJkd2FyZS4KLQkgKiBAZW5hYmxlOiAgICAgICAgRW5hYmxlL0Rpc2FibGUgZmxh Zy4KLQkgKgotCSAqIEVuYWJsZSBvciBEaXNhYmUgdGhlIFRpbWluZyBEQiByZWdpc3Rlci4KLQkg Ki8KLQl2b2lkICgqc2V0X3RpbWluZ19kYikoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJ CSBib29sIGVuYWJsZSk7Ci19OwotCi0vKgotICogc3RydWN0IGRzaV9jdHJsX2h3IC0gRFNJIGNv bnRyb2xsZXIgaGFyZHdhcmUgb2JqZWN0IHNwZWNpZmljIHRvIGFuIGluc3RhbmNlCi0gKiBAYmFz ZTogICAgICAgICAgICAgICAgICAgVkEgZm9yIHRoZSBEU0kgY29udHJvbGxlciBiYXNlIGFkZHJl c3MuCi0gKiBAbGVuZ3RoOiAgICAgICAgICAgICAgICAgTGVuZ3RoIG9mIHRoZSBEU0kgY29udHJv bGxlciByZWdpc3RlciBtYXAuCi0gKiBAbW1zc19taXNjX2Jhc2U6ICAgICAgICAgQmFzZSBhZGRy ZXNzIG9mIG1tc3NfbWlzYyByZWdpc3RlciBtYXAuCi0gKiBAbW1zc19taXNjX2xlbmd0aDogICAg ICAgTGVuZ3RoIG9mIG1tc3NfbWlzYyByZWdpc3RlciBtYXAuCi0gKiBAZGlzcF9jY19iYXNlOiAg ICAgICAgICAgQmFzZSBhZGRyZXNzIG9mIGRpc3BfY2MgcmVnaXN0ZXIgbWFwLgotICogQGRpc3Bf Y2NfbGVuZ3RoOiAgICAgICAgIExlbmd0aCBvZiBkaXNwX2NjIHJlZ2lzdGVyIG1hcC4KLSAqIEBp bmRleDogICAgICAgICAgICAgICAgICBJbnN0YW5jZSBJRCBvZiB0aGUgY29udHJvbGxlci4KLSAq IEBmZWF0dXJlX21hcDogICAgICAgICAgICBGZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIERTSSBj b250cm9sbGVyLgotICogQG9wczogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIHBvaW50ZXJz IHRvIHRoZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSB0aGUKLSAqICAgICAgICAgICAgICAgICAg ICAgICAgICBjb250cm9sbGVyLgotICogQHN1cHBvcnRlZF9pbnRlcnJ1cHRzOiAgIE51bWJlciBv ZiBzdXBwb3J0ZWQgaW50ZXJydXB0cy4KLSAqIEBzdXBwb3J0ZWRfZXJyb3JzOiAgICAgICBOdW1i ZXIgb2Ygc3VwcG9ydGVkIGVycm9ycy4KLSAqIEBwaHlfaXNvbGF0aW9uX2VuYWJsZWQ6ICAgIEEg Ym9vbGVhbiBwcm9wZXJ0eSBhbGxvd3MgdG8gaXNvbGF0ZSB0aGUgcGh5IGZyb20KLSAqICAgICAg ICAgICAgICAgICAgICAgICAgICBkc2kgY29udHJvbGxlciBhbmQgcnVuIG9ubHkgZHNpIGNvbnRy b2xsZXIuCi0gKi8KLXN0cnVjdCBkc2lfY3RybF9odyB7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwot CXUzMiBsZW5ndGg7Ci0Jdm9pZCBfX2lvbWVtICptbXNzX21pc2NfYmFzZTsKLQl1MzIgbW1zc19t aXNjX2xlbmd0aDsKLQl2b2lkIF9faW9tZW0gKmRpc3BfY2NfYmFzZTsKLQl1MzIgZGlzcF9jY19s ZW5ndGg7Ci0JdTMyIGluZGV4OwotCi0JLyogZmVhdHVyZXMgKi8KLQlERUNMQVJFX0JJVE1BUChm ZWF0dXJlX21hcCwgRFNJX0NUUkxfTUFYX0ZFQVRVUkVTKTsKLQlzdHJ1Y3QgZHNpX2N0cmxfaHdf b3BzIG9wczsKLQotCS8qIGNhcGFiaWxpdGllcyAqLwotCXUzMiBzdXBwb3J0ZWRfaW50ZXJydXB0 czsKLQl1NjQgc3VwcG9ydGVkX2Vycm9yczsKLQotCWJvb2wgcGh5X2lzb2xhdGlvbl9lbmFibGVk OwotfTsKLQotI2VuZGlmIC8qIF9EU0lfQ1RSTF9IV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18xXzQuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMV80LmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDE0MjEwNWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k c2ktc3RhZ2luZy9kc2lfY3RybF9od18xXzQuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MCArMCww IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK LSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJf Zm10KGZtdCkgImRzaS1odzoiIGZtdAotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVk ZSA8bGludXgvaW9wb2xsLmg+Ci0KLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUg ImRzaV9jdHJsX3JlZy5oIgotI2luY2x1ZGUgImRzaV9ody5oIgotCi0jZGVmaW5lIE1NU1NfTUlT Q19DTEFNUF9SRUdfT0ZGICAgICAgICAgICAweDAwMTQKLQotLyoqCi0gKiBkc2lfY3RybF9od18x NF9zZXR1cF9sYW5lX21hcCgpIC0gc2V0dXAgbWFwcGluZyBiZXR3ZWVuCi0gKglsb2dpY2FsIGFu ZCBwaHlzaWNhbCBsYW5lcwotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRy b2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBsYW5lX21hcDogICAgICBTdHJ1Y3R1cmUgZGVmaW5p bmcgdGhlIG1hcHBpbmcgYmV0d2VlbiBEU0kgbG9naWNhbAotICogICAgICAgICAgICAgICAgIGxh bmVzIGFuZCBwaHlzaWNhbCBsYW5lcy4KLSAqLwotdm9pZCBkc2lfY3RybF9od18xNF9zZXR1cF9s YW5lX21hcChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkgICAgICAgc3RydWN0IGRzaV9s YW5lX21hcCAqbGFuZV9tYXApCi17Ci0JRFNJX1czMihjdHJsLCBEU0lfTEFORV9TV0FQX0NUUkws IGxhbmVfbWFwLT5sYW5lX21hcF92MSk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gTGFuZSBzd2Fw IHNldHVwIGNvbXBsZXRlXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLS8qKgotICogZHNpX2N0cmxf aHdfMTRfd2FpdF9mb3JfbGFuZV9pZGxlKCkKLSAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgZm9yIGFs bCB0aGUgYWN0aXZlIERTSSBsYW5lcyB0byBiZSBpZGxlIGJ5IHBvbGxpbmcgYWxsCi0gKiB0aGUg RklGT19FTVBUWSBiaXRzIGFuZCBwb2xsaW5nIGhlIGxhbmUgc3RhdHVzIHRvIGVuc3VyZSB0aGF0 IGFsbCB0aGUgbGFuZXMKLSAqIGFyZSBpbiBzdG9wIHN0YXRlLiBUaGlzIGZ1bmN0aW9uIGFzc3Vt ZXMgdGhhdCB0aGUgYnVzIGNsb2NrcyByZXF1aXJlZCB0bwotICogYWNjZXNzIHRoZSByZWdpc3Rl cnMgYXJlIGFscmVhZHkgdHVybmVkIG9uLgotICoKLSAqIEBjdHJsOiAgICAgIFBvaW50ZXIgdG8g dGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBsYW5lczogICAgIE9SZWQgbGlzdCBv ZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2ggbmVlZAotICogICAgICAgICAgICAg dG8gYmUgc3RvcHBlZC4KLSAqCi0gKiByZXR1cm46IEVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lf Y3RybF9od18xNF93YWl0X2Zvcl9sYW5lX2lkbGUoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1 MzIgbGFuZXMpCi17Ci0JaW50IHJjID0gMCwgdmFsID0gMDsKLQl1MzIgc3RvcF9zdGF0ZV9tYXNr ID0gMCwgZmlmb19lbXB0eV9tYXNrID0gMDsKLQl1MzIgY29uc3Qgc2xlZXBfdXMgPSAxMDsKLQl1 MzIgY29uc3QgdGltZW91dF91cyA9IDEwMDsKLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVf MCkgewotCQlzdG9wX3N0YXRlX21hc2sgfD0gQklUKDApOwotCQlmaWZvX2VtcHR5X21hc2sgfD0g KEJJVCgxMikgfCBCSVQoMTYpKTsKLQl9Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKSB7 Ci0JCXN0b3Bfc3RhdGVfbWFzayB8PSBCSVQoMSk7Ci0JCQlmaWZvX2VtcHR5X21hc2sgfD0gQklU KDIwKTsKLQl9Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8yKSB7Ci0JCXN0b3Bfc3RhdGVf bWFzayB8PSBCSVQoMik7Ci0JCWZpZm9fZW1wdHlfbWFzayB8PSBCSVQoMjQpOwotCX0KLQlpZiAo bGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpIHsKLQkJc3RvcF9zdGF0ZV9tYXNrIHw9IEJJVCgzKTsK LQkJZmlmb19lbXB0eV9tYXNrIHw9IEJJVCgyOCk7Ci0JfQotCi0JcHJfZGVidWcoIiVzOiBwb2xs aW5nIGZvciBmaWZvIGVtcHR5LCBtYXNrPTB4JTA4eFxuIiwgX19mdW5jX18sCi0JCWZpZm9fZW1w dHlfbWFzayk7Ci0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXQoY3RybC0+YmFzZSArIERTSV9GSUZP X1NUQVRVUywgdmFsLAotCQkJKHZhbCAmIGZpZm9fZW1wdHlfbWFzayksIHNsZWVwX3VzLCB0aW1l b3V0X3VzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCIlczogZmlmbyBub3QgZW1wdHksIEZJRk9f U1RBVFVTPTB4JTA4eFxuIiwKLQkJCQlfX2Z1bmNfXywgdmFsKTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlwcl9kZWJ1ZygiJXM6IHBvbGxpbmcgZm9yIGxhbmVzIHRvIGJlIGluIHN0b3Agc3RhdGUs IG1hc2s9MHglMDh4XG4iLAotCQlfX2Z1bmNfXywgc3RvcF9zdGF0ZV9tYXNrKTsKLQlyYyA9IHJl YWRsX3BvbGxfdGltZW91dChjdHJsLT5iYXNlICsgRFNJX0xBTkVfU1RBVFVTLCB2YWwsCi0JCQko dmFsICYgc3RvcF9zdGF0ZV9tYXNrKSwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpOwotCWlmIChyYykg ewotCQlwcl9lcnIoIiVzOiBsYW5lcyBub3QgaW4gc3RvcCBzdGF0ZSwgTEFORV9TVEFUVVM9MHgl MDh4XG4iLAotCQkJX19mdW5jX18sIHZhbCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoK LQlyZXR1cm4gcmM7Ci0KLX0KLQotLyoqCi0gKiB1bHBzX3JlcXVlc3QoKSAtIHJlcXVlc3QgdWxw cyBlbnRyeSBmb3Igc3BlY2lmaWVkIGxhbmVzCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0 byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGxhbmVzOiAgICAgICAgIE9SZWQg bGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgd2hpY2ggbmVlZAotICogICAgICAg ICAgICAgICAgIHRvIGVudGVyIFVMUFMuCi0gKgotICogQ2FsbGVyIHNob3VsZCBjaGVjayBpZiBs YW5lcyBhcmUgaW4gVUxQUyBtb2RlIGJ5IGNhbGxpbmcKLSAqIGdldF9sYW5lc19pbl91bHBzKCkg b3BlcmF0aW9uLgotICovCi12b2lkIGRzaV9jdHJsX2h3XzE0X3VscHNfcmVxdWVzdChzdHJ1Y3Qg ZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBsYW5lcykKLXsKLQl1MzIgcmVnID0gMDsKLQotCWlmIChs YW5lcyAmIERTSV9DTE9DS19MQU5FKQotCQlyZWcgPSBCSVQoNCk7Ci0JaWYgKGxhbmVzICYgRFNJ X0RBVEFfTEFORV8wKQotCQlyZWcgfD0gQklUKDApOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xB TkVfMSkKLQkJcmVnIHw9IEJJVCgxKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzIpCi0J CXJlZyB8PSBCSVQoMik7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8zKQotCQlyZWcgfD0g QklUKDMpOwotCi0JLyoKLQkgKiBVTFBTIGVudHJ5IHJlcXVlc3QuIFdhaXQgZm9yIHNob3J0IHRp bWUgdG8gbWFrZSBzdXJlCi0JICogdGhhdCB0aGUgbGFuZXMgZW50ZXIgVUxQUy4gUmVjb21tZW5k ZWQgYXMgcGVyIEhQRy4KLQkgKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9MQU5FX0NUUkwsIHJlZyk7 Ci0JdXNsZWVwX3JhbmdlKDEwMCwgMTEwKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBVTFBTIHJl cXVlc3RlZCBmb3IgbGFuZXMgMHgleFxuIiwgY3RybC0+aW5kZXgsCi0JCSBsYW5lcyk7Ci19Ci0K LS8qKgotICogdWxwc19leGl0KCkgLSBleGl0IFVMUFMgb24gc3BlY2lmaWVkIGxhbmVzCi0gKiBA Y3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgot ICogQGxhbmVzOiAgICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5l cykgd2hpY2ggbmVlZAotICogICAgICAgICAgICAgICAgIHRvIGV4aXQgVUxQUy4KLSAqCi0gKiBD YWxsZXIgc2hvdWxkIGNoZWNrIGlmIGxhbmVzIGFyZSBpbiBhY3RpdmUgbW9kZSBieSBjYWxsaW5n Ci0gKiBnZXRfbGFuZXNfaW5fdWxwcygpIG9wZXJhdGlvbi4KLSAqLwotdm9pZCBkc2lfY3RybF9o d18xNF91bHBzX2V4aXQoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCB1MzIgbGFuZXMpCi17Ci0J dTMyIHJlZyA9IDA7Ci0KLQlpZiAobGFuZXMgJiBEU0lfQ0xPQ0tfTEFORSkKLQkJcmVnID0gQklU KDEyKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzApCi0JCXJlZyB8PSBCSVQoOCk7Ci0J aWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8xKQotCQlyZWcgfD0gQklUKDkpOwotCWlmIChsYW5l cyAmIERTSV9EQVRBX0xBTkVfMikKLQkJcmVnIHw9IEJJVCgxMCk7Ci0JaWYgKGxhbmVzICYgRFNJ X0RBVEFfTEFORV8zKQotCQlyZWcgfD0gQklUKDExKTsKLQotCS8qCi0JICogVUxQUyBFeGl0IFJl cXVlc3QKLQkgKiBIYXJkd2FyZSByZXF1aXJlbWVudCBpcyB0byB3YWl0IGZvciBhdCBsZWFzdCAx bXMKLQkgKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9MQU5FX0NUUkwsIHJlZyk7Ci0JdXNsZWVwX3Jh bmdlKDEwMDAsIDEwMTApOwotCS8qCi0JICogU29tZXRpbWVzIHdoZW4gZXhpdGluZyBVTFBTLCBp dCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgRFNJCi0JICogbGFuZXMgYXJlIG5vdCBpbiB0aGUgc3Rv cCBzdGF0ZSB3aGljaCBjb3VsZCBsZWFkIHRvIERTSQotCSAqIGNvbW1hbmRzIG5vdCBnb2luZyB0 aHJvdWdoLiBUbyBhdm9pZCB0aGlzLCBmb3JjZSB0aGUgbGFuZXMKLQkgKiB0byBiZSBpbiBzdG9w IHN0YXRlLgotCSAqLwotCURTSV9XMzIoY3RybCwgRFNJX0xBTkVfQ1RSTCwgcmVnIDw8IDgpOwot CURTSV9XMzIoY3RybCwgRFNJX0xBTkVfQ1RSTCwgMHgwKTsKLQotCXByX2RlYnVnKCJbRFNJXyVk XSBVTFBTIGV4aXQgcmVxdWVzdCBmb3IgbGFuZXM9MHgleFxuIiwKLQkJIGN0cmwtPmluZGV4LCBs YW5lcyk7Ci19Ci0KLS8qKgotICogZ2V0X2xhbmVzX2luX3VscHMoKSAtIHJldHVybnMgdGhlIGxp c3Qgb2YgbGFuZXMgaW4gVUxQUyBtb2RlCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0 aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICoKLSAqIFJldHVybnMgYW4gT1JlZCBsaXN0 IG9mIGxhbmVzIChlbnVtIGRzaV9kYXRhX2xhbmVzKSB0aGF0IGFyZSBpbiBVTFBTCi0gKiBzdGF0 ZS4gSWYgMCBpcyByZXR1cm5lZCwgYWxsIHRoZSBsYW5lcyBhcmUgYWN0aXZlLgotICoKLSAqIFJl dHVybjogTGlzdCBvZiBsYW5lcyBpbiBVTFBTIHN0YXRlLgotICovCi11MzIgZHNpX2N0cmxfaHdf MTRfZ2V0X2xhbmVzX2luX3VscHMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCXUzMiBy ZWcgPSAwOwotCXUzMiBsYW5lcyA9IDA7Ci0KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9MQU5F X1NUQVRVUyk7Ci0JaWYgKCEocmVnICYgQklUKDgpKSkKLQkJbGFuZXMgfD0gRFNJX0RBVEFfTEFO RV8wOwotCWlmICghKHJlZyAmIEJJVCg5KSkpCi0JCWxhbmVzIHw9IERTSV9EQVRBX0xBTkVfMTsK LQlpZiAoIShyZWcgJiBCSVQoMTApKSkKLQkJbGFuZXMgfD0gRFNJX0RBVEFfTEFORV8yOwotCWlm ICghKHJlZyAmIEJJVCgxMSkpKQotCQlsYW5lcyB8PSBEU0lfREFUQV9MQU5FXzM7Ci0JaWYgKCEo cmVnICYgQklUKDEyKSkpCi0JCWxhbmVzIHw9IERTSV9DTE9DS19MQU5FOwotCi0JcHJfZGVidWco IltEU0lfJWRdIGxhbmVzIGluIHVscHMgPSAweCV4XG4iLCBjdHJsLT5pbmRleCwgbGFuZXMpOwot CXJldHVybiBsYW5lczsKLX0KLQotLyoqCi0gKiBjbGFtcF9lbmFibGUoKSAtIGVuYWJsZSBEU0kg Y2xhbXBzIHRvIGtlZXAgUEhZIGRyaXZpbmcgYSBzdGFibGUgbGluawotICogQGN0cmw6ICAgICAg ICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBsYW5lczog ICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgd2hpY2ggbmVlZCB0byBiZSBjbGFtcGVkLgotICog QGVuYWJsZV91bHBzOiAgIEJvb2xlYW4gdG8gc3BlY2lmeSBpZiBVTFBTIGlzIGVuYWJsZWQgaW4g RFNJIGNvbnRyb2xsZXIKLSAqLwotdm9pZCBkc2lfY3RybF9od18xNF9jbGFtcF9lbmFibGUoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSB1MzIgbGFuZXMsCi0JCQkJIGJvb2wgZW5hYmxl X3VscHMpCi17Ci0JdTMyIGNsYW1wX3JlZyA9IDA7Ci0JdTMyIGJpdF9zaGlmdCA9IDA7Ci0JdTMy IHJlZyA9IDA7Ci0KLQlpZiAoY3RybC0+aW5kZXggPT0gMSkKLQkJYml0X3NoaWZ0ID0gMTY7Ci0K LQlpZiAobGFuZXMgJiBEU0lfQ0xPQ0tfTEFORSkgewotCQljbGFtcF9yZWcgfD0gQklUKDkpOwot CQlpZiAoZW5hYmxlX3VscHMpCi0JCQljbGFtcF9yZWcgfD0gQklUKDgpOwotCX0KLQotCWlmIChs YW5lcyAmIERTSV9EQVRBX0xBTkVfMCkgewotCQljbGFtcF9yZWcgfD0gQklUKDcpOwotCQlpZiAo ZW5hYmxlX3VscHMpCi0JCQljbGFtcF9yZWcgfD0gQklUKDYpOwotCX0KLQotCWlmIChsYW5lcyAm IERTSV9EQVRBX0xBTkVfMSkgewotCQljbGFtcF9yZWcgfD0gQklUKDUpOwotCQlpZiAoZW5hYmxl X3VscHMpCi0JCQljbGFtcF9yZWcgfD0gQklUKDQpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9E QVRBX0xBTkVfMikgewotCQljbGFtcF9yZWcgfD0gQklUKDMpOwotCQlpZiAoZW5hYmxlX3VscHMp Ci0JCQljbGFtcF9yZWcgfD0gQklUKDIpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xB TkVfMykgewotCQljbGFtcF9yZWcgfD0gQklUKDEpOwotCQlpZiAoZW5hYmxlX3VscHMpCi0JCQlj bGFtcF9yZWcgfD0gQklUKDApOwotCX0KLQotCXJlZyA9IERTSV9NTVNTX01JU0NfUjMyKGN0cmws IE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGKTsKLQlyZWcgfD0gKGNsYW1wX3JlZyA8PCBiaXRfc2hp ZnQpOwotCURTSV9NTVNTX01JU0NfVzMyKGN0cmwsIE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGLCBy ZWcpOwotCi0JcmVnID0gRFNJX01NU1NfTUlTQ19SMzIoY3RybCwgTU1TU19NSVNDX0NMQU1QX1JF R19PRkYpOwotCXJlZyB8PSAoQklUKDE1KSA8PCBiaXRfc2hpZnQpOwkvKiBFbmFibGUgY2xhbXAg Ki8KLQlEU0lfTU1TU19NSVNDX1czMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRiwgcmVn KTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBDbGFtcHMgZW5hYmxlZCBmb3IgbGFuZXM9MHgleFxu IiwgY3RybC0+aW5kZXgsCi0JCSBsYW5lcyk7Ci19Ci0KLS8qKgotICogY2xhbXBfZGlzYWJsZSgp IC0gZGlzYWJsZSBEU0kgY2xhbXBzCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUg Y29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGxhbmVzOiAgICAgICAgIE9SZWQgbGlzdCBv ZiBsYW5lcyB3aGljaCBuZWVkIHRvIGhhdmUgY2xhbXBzIHJlbGVhc2VkLgotICogQGRpc2FibGVf dWxwczogICBCb29sZWFuIHRvIHNwZWNpZnkgaWYgVUxQUyBpcyBlbmFibGVkIGluIERTSSBjb250 cm9sbGVyCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfMTRfY2xhbXBfZGlzYWJsZShzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQkJICB1MzIgbGFuZXMsCi0JCQkJICBib29sIGRpc2FibGVfdWxw cykKLXsKLQl1MzIgY2xhbXBfcmVnID0gMDsKLQl1MzIgYml0X3NoaWZ0ID0gMDsKLQl1MzIgcmVn ID0gMDsKLQotCWlmIChjdHJsLT5pbmRleCA9PSAxKQotCQliaXRfc2hpZnQgPSAxNjsKLQotCWlm IChsYW5lcyAmIERTSV9DTE9DS19MQU5FKSB7Ci0JCWNsYW1wX3JlZyB8PSBCSVQoOSk7Ci0JCWlm IChkaXNhYmxlX3VscHMpCi0JCQljbGFtcF9yZWcgfD0gQklUKDgpOwotCX0KLQotCWlmIChsYW5l cyAmIERTSV9EQVRBX0xBTkVfMCkgewotCQljbGFtcF9yZWcgfD0gQklUKDcpOwotCQlpZiAoZGlz YWJsZV91bHBzKQotCQkJY2xhbXBfcmVnIHw9IEJJVCg2KTsKLQl9Ci0KLQlpZiAobGFuZXMgJiBE U0lfREFUQV9MQU5FXzEpIHsKLQkJY2xhbXBfcmVnIHw9IEJJVCg1KTsKLQkJaWYgKGRpc2FibGVf dWxwcykKLQkJCWNsYW1wX3JlZyB8PSBCSVQoNCk7Ci0JfQotCi0JaWYgKGxhbmVzICYgRFNJX0RB VEFfTEFORV8yKSB7Ci0JCWNsYW1wX3JlZyB8PSBCSVQoMyk7Ci0JCWlmIChkaXNhYmxlX3VscHMp Ci0JCQljbGFtcF9yZWcgfD0gQklUKDIpOwotCX0KLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xB TkVfMykgewotCQljbGFtcF9yZWcgfD0gQklUKDEpOwotCQlpZiAoZGlzYWJsZV91bHBzKQotCQkJ Y2xhbXBfcmVnIHw9IEJJVCgwKTsKLQl9Ci0KLQljbGFtcF9yZWcgfD0gQklUKDE1KTsgLyogRW5h YmxlIGNsYW1wICovCi0JY2xhbXBfcmVnIDw8PSBiaXRfc2hpZnQ7Ci0KLQlyZWcgPSBEU0lfTU1T U19NSVNDX1IzMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09GRik7Ci0JcmVnICY9IH4oY2xh bXBfcmVnKTsKLQlEU0lfTU1TU19NSVNDX1czMihjdHJsLCBNTVNTX01JU0NfQ0xBTVBfUkVHX09G RiwgcmVnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBEaXNhYmxlIGNsYW1wcyBmb3IgbGFuZXM9 JWRcbiIsIGN0cmwtPmluZGV4LCBsYW5lcyk7Ci19Ci0KLSNkZWZpbmUgRFVNUF9SRUdfVkFMVUUo b2ZmKSAiXHQlLTMwczogMHglMDh4XG4iLCAjb2ZmLCBEU0lfUjMyKGN0cmwsIG9mZikKLXNzaXpl X3QgZHNpX2N0cmxfaHdfMTRfcmVnX2R1bXBfdG9fYnVmZmVyKHN0cnVjdCBkc2lfY3RybF9odyAq Y3RybCwKLQkJCQkJICBjaGFyICpidWYsCi0JCQkJCSAgdTMyIHNpemUpCi17Ci0JdTMyIGxlbiA9 IDA7Ci0KLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwgIkNPTkZJ R1VSQVRJT04gUkVHUzpcbiIpOwotCi0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfSFdfVkVSU0lPTikpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJ CURVTVBfUkVHX1ZBTFVFKERTSV9TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxl biksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9GSUZPX1NUQVRVUykpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX1ZJREVPX01PREVfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVu KSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfU1lOQ19E QVRBVFlQRSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfUElYRUxfREFUQVRZUEUpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9WSURFT19NT0RFX0JMQU5LSU5HX0RBVEFUWVBFKSk7Ci0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9E RV9EQVRBX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0FDVElWRV9IKSk7Ci0JbGVuICs9 IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShE U0lfVklERU9fTU9ERV9BQ1RJVkVfVikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfVE9UQUwpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9WSURFT19NT0RFX0hTWU5DKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9ERV9WU1lO QykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfVlNZTkNfVlBPUykpOwotCWxlbiArPSBzbnByaW50 ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1B TkRfTU9ERV9ETUFfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfRENTX0NNRF9DVFJMKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRE1B X0NNRF9PRkZTRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfQ01EX0xFTkdUSCkpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RN QV9GSUZPX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfTlVMTF9QQUNLRVRfREFUQSkpOwotCWxlbiAr PSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUo RFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9N T0RFX01EUF9TVFJFQU0wX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAo c2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJF QU0xX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwK LQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTFfVE9UQUwpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9BQ0tfRVJSX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVu KSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktfREFUQTApKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9SREJLX0RBVEExKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMikpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X1JEQktfREFUQTMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEFUWVBFMCkpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JE QktfREFUQVRZUEUxKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFJJR19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRVhUX01V WCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX0VYVF9NVVhfVEVfUFVMU0VfREVURUNUX0NUUkwpKTsKLQlsZW4gKz0g c25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERT SV9DTURfTU9ERV9ETUFfU1dfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVu KSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NNRF9NT0RFX01EUF9TV19U UklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfQ01EX01PREVfQlRBX1NXX1RSSUdHRVIpKTsKLQlsZW4gKz0g c25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERT SV9SRVNFVF9TV19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfTEFORV9TVEFUVVMpKTsKLQlsZW4gKz0g c25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERT SV9MQU5FX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9MQU5FX1NXQVBfQ1RSTCkpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RM TjBfUEhZX0VSUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4p LAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0xQX1RJTUVSX0NUUkwpKTsKLQlsZW4gKz0gc25wcmlu dGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9IU19U SU1FUl9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfVElNRU9VVF9TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmlu dGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DTEtP VVRfVElNSU5HX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9FT1RfUEFDS0VUKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRU9U X1BBQ0tFVF9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfR0VORVJJQ19FU0NfVFhfVFJJR0dFUikpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX0VSUl9JTlRfTUFTSzApKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChz aXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9JTlRfQ1RSTCkpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X1NPRlRfUkVTRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DTEtfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50Zigo YnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NMS19TVEFU VVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9QSFlfU1dfUkVTRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiAr IGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9BWEkyQUhCX0NUUkwp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX0NUUkwyKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFO RF9NT0RFX01EUF9TVFJFQU0yX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NU UkVBTTJfVE9UQUwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WQklGX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYo KGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9BRVNfQ1RS TCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX1JEQktfREFUQV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYg KyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVEVTVF9QQVRURVJO X0dFTl9DTURfRE1BX0lOSVRfVkFMMikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RQR19ETUFfRklGT19TVEFUVVMp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9UUEdfRE1BX0ZJRk9fV1JJVEVfVFJJR0dFUikpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0RT SV9USU1JTkdfRkxVU0gpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9EU0lfVElNSU5HX0RCX01PREUpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9UUEdfRE1BX0ZJRk9fUkVTRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiks IChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WRVJTSU9OKSk7Ci0KLQlwcl9l cnIoIkxMRU5HVEggPSAlZFxuIiwgbGVuKTsKLQlyZXR1cm4gbGVuOwotfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18yXzAuYyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8wLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGJmZDYzNzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od18yXzAuYworKysgL2Rldi9udWxsCkBAIC0xLDIz NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZp bmUgcHJfZm10KGZtdCkgImRzaS1odzoiIGZtdAotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0j aW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Ci0KLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2lu Y2x1ZGUgImRzaV9jdHJsX3JlZy5oIgotI2luY2x1ZGUgImRzaV9ody5oIgotCi12b2lkIGRzaV9j dHJsX2h3XzIwX3NldHVwX2xhbmVfbWFwKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJICAg ICAgIHN0cnVjdCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwKQotewotCXUzMiByZWdfdmFsdWUgPSBs YW5lX21hcC0+bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8wXSB8Ci0JCQkobGFuZV9tYXAt PmxhbmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfMV0gPDwgNCkgfAotCQkJKGxhbmVfbWFwLT5s YW5lX21hcF92MltEU0lfTE9HSUNBTF9MQU5FXzJdIDw8IDgpIHwKLQkJCShsYW5lX21hcC0+bGFu ZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8zXSA8PCAxMik7Ci0KLQlEU0lfVzMyKGN0cmwsIERT SV9MQU5FX1NXQVBfQ1RSTCwgcmVnX3ZhbHVlKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXSBMYW5l IHN3YXAgc2V0dXAgY29tcGxldGVcbiIsIGN0cmwtPmluZGV4KTsKLX0KLQotaW50IGRzaV9jdHJs X2h3XzIwX3dhaXRfZm9yX2xhbmVfaWRsZShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCXUz MiBsYW5lcykKLXsKLQlpbnQgcmMgPSAwLCB2YWwgPSAwOwotCXUzMiBmaWZvX2VtcHR5X21hc2sg PSAwOwotCXUzMiBjb25zdCBzbGVlcF91cyA9IDEwOwotCXUzMiBjb25zdCB0aW1lb3V0X3VzID0g MTAwOwotCi0JaWYgKGxhbmVzICYgRFNJX0RBVEFfTEFORV8wKQotCQlmaWZvX2VtcHR5X21hc2sg fD0gKEJJVCgxMikgfCBCSVQoMTYpKTsKLQotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMSkK LQkJZmlmb19lbXB0eV9tYXNrIHw9IEJJVCgyMCk7Ci0KLQlpZiAobGFuZXMgJiBEU0lfREFUQV9M QU5FXzIpCi0JCWZpZm9fZW1wdHlfbWFzayB8PSBCSVQoMjQpOwotCi0JaWYgKGxhbmVzICYgRFNJ X0RBVEFfTEFORV8zKQotCQlmaWZvX2VtcHR5X21hc2sgfD0gQklUKDI4KTsKLQotCXByX2RlYnVn KCIlczogcG9sbGluZyBmb3IgZmlmbyBlbXB0eSwgbWFzaz0weCUwOHhcbiIsIF9fZnVuY19fLAot CQlmaWZvX2VtcHR5X21hc2spOwotCXJjID0gcmVhZGxfcG9sbF90aW1lb3V0KGN0cmwtPmJhc2Ug KyBEU0lfRklGT19TVEFUVVMsIHZhbCwKLQkJCSh2YWwgJiBmaWZvX2VtcHR5X21hc2spLCBzbGVl cF91cywgdGltZW91dF91cyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiJXM6IGZpZm8gbm90IGVt cHR5LCBGSUZPX1NUQVRVUz0weCUwOHhcbiIsCi0JCQkJX19mdW5jX18sIHZhbCk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLSNkZWZpbmUgRFVNUF9SRUdf VkFMVUUob2ZmKSAiXHQlLTMwczogMHglMDh4XG4iLCAjb2ZmLCBEU0lfUjMyKGN0cmwsIG9mZikK LXNzaXplX3QgZHNpX2N0cmxfaHdfMjBfcmVnX2R1bXBfdG9fYnVmZmVyKHN0cnVjdCBkc2lfY3Ry bF9odyAqY3RybCwKLQkJCQkJICBjaGFyICpidWYsCi0JCQkJCSAgdTMyIHNpemUpCi17Ci0JdTMy IGxlbiA9IDA7Ci0KLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwg IkNPTkZJR1VSQVRJT04gUkVHUzpcbiIpOwotCi0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfSFdfVkVSU0lPTikpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVu KSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9TVEFUVVMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9GSUZPX1NUQVRV UykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVf U1lOQ19EQVRBVFlQRSkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBs ZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfUElYRUxfREFUQVRZUEUpKTsK LQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVH X1ZBTFVFKERTSV9WSURFT19NT0RFX0JMQU5LSU5HX0RBVEFUWVBFKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklE RU9fTU9ERV9EQVRBX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0FDVElWRV9IKSk7Ci0J bGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19W QUxVRShEU0lfVklERU9fTU9ERV9BQ1RJVkVfVikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsg bGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfVE9U QUwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9WSURFT19NT0RFX0hTWU5DKSk7Ci0JbGVuICs9IHNucHJpbnRmKChi dWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVklERU9fTU9E RV9WU1lOQykpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX1ZJREVPX01PREVfVlNZTkNfVlBPUykpOwotCWxlbiArPSBz bnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJ X0NPTU1BTkRfTU9ERV9ETUFfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RS TCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVN UF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfRENTX0NNRF9DVFJMKSk7Ci0JbGVuICs9 IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShE U0lfRE1BX0NNRF9PRkZTRVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfQ01EX0xFTkdUSCkpOwotCWxlbiAr PSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUo RFNJX0RNQV9GSUZPX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9ETUFfTlVMTF9QQUNLRVRfREFUQSkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMF9DVFJMKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09N TUFORF9NT0RFX01EUF9TVFJFQU0wX1RPVEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01E UF9TVFJFQU0xX0NUUkwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTFfVE9U QUwpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURV TVBfUkVHX1ZBTFVFKERTSV9BQ0tfRVJSX1NUQVRVUykpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1JEQktfREFUQTAp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9SREJLX0RBVEExKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfUkRCS19EQVRBMikpOwotCWxl biArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFM VUUoRFNJX1JEQktfREFUQTMpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9SREJLX0RBVEFUWVBFMCkpOwotCWxlbiAr PSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUo RFNJX1JEQktfREFUQVRZUEUxKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFJJR19DVFJMKSk7Ci0JbGVuICs9IHNu cHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lf RVhUX01VWCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAot CQkJRFVNUF9SRUdfVkFMVUUoRFNJX0VYVF9NVVhfVEVfUFVMU0VfREVURUNUX0NUUkwpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9DTURfTU9ERV9ETUFfU1dfVFJJR0dFUikpOwotCWxlbiArPSBzbnByaW50ZigoYnVm ICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NNRF9NT0RFX01E UF9TV19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxl biksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ01EX01PREVfQlRBX1NXX1RSSUdHRVIpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9SRVNFVF9TV19UUklHR0VSKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4p LCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfTUlTUl9DTURfQ1RSTCkpOwot CWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdf VkFMVUUoRFNJX01JU1JfVklERU9fQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVu KSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0xBTkVfU1RBVFVTKSk7Ci0J bGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19W QUxVRShEU0lfTEFORV9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfTEFORV9TV0FQX0NUUkwpKTsKLQlsZW4g Kz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVF KERTSV9ETE4wX1BIWV9FUlIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9MUF9USU1FUl9DVFJMKSk7Ci0JbGVuICs9 IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShE U0lfSFNfVElNRVJfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUg LSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RJTUVPVVRfU1RBVFVTKSk7Ci0JbGVuICs9 IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShE U0lfQ0xLT1VUX1RJTUlOR19DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAo c2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfRU9UX1BBQ0tFVCkpOwotCWxlbiAr PSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUo RFNJX0VPVF9QQUNLRVRfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwgKHNp emUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0dFTkVSSUNfRVNDX1RYX1RSSUdHRVIp KTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBf UkVHX1ZBTFVFKERTSV9FUlJfSU5UX01BU0swKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfSU5UX0NUUkwpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9TT0ZUX1JFU0VUKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6 ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ0xLX0NUUkwpKTsKLQlsZW4gKz0gc25w cmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9D TEtfU1RBVFVTKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiks Ci0JCQlEVU1QX1JFR19WQUxVRShEU0lfUEhZX1NXX1JFU0VUKSk7Ci0JbGVuICs9IHNucHJpbnRm KChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQVhJMkFI Ql9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfTUlTUl9DTURfTURQMF8zMkJJVCkpOwotCWxlbiArPSBzbnBy aW50ZigoYnVmICsgbGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX01J U1JfQ01EX01EUDFfMzJCSVQpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXpl IC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9NSVNSX1ZJREVPXzMyQklUKSk7Ci0JbGVu ICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxV RShEU0lfQ09NTUFORF9NT0RFX01EUF9DVFJMMikpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsg bGVuKSwgKHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX0NPTU1BTkRfTU9ERV9N RFBfU1RSRUFNMl9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0yX1RP VEFMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlE VU1QX1JFR19WQUxVRShEU0lfVkJJRl9DVFJMKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBs ZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfQUVTX0NUUkwpKTsKLQls ZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZB TFVFKERTSV9SREJLX0RBVEFfQ1RSTCkpOwotCWxlbiArPSBzbnByaW50ZigoYnVmICsgbGVuKSwg KHNpemUgLSBsZW4pLAotCQkJRFVNUF9SRUdfVkFMVUUoRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01E X0RNQV9JTklUX1ZBTDIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIChzaXplIC0g bGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9UUEdfRE1BX0ZJRk9fU1RBVFVTKSk7Ci0JbGVu ICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxV RShEU0lfVFBHX0RNQV9GSUZPX1dSSVRFX1RSSUdHRVIpKTsKLQlsZW4gKz0gc25wcmludGYoKGJ1 ZiArIGxlbiksIChzaXplIC0gbGVuKSwKLQkJCURVTVBfUkVHX1ZBTFVFKERTSV9EU0lfVElNSU5H X0ZMVVNIKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0J CQlEVU1QX1JFR19WQUxVRShEU0lfRFNJX1RJTUlOR19EQl9NT0RFKSk7Ci0JbGVuICs9IHNucHJp bnRmKChidWYgKyBsZW4pLCAoc2l6ZSAtIGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVFBH X0RNQV9GSUZPX1JFU0VUKSk7Ci0JbGVuICs9IHNucHJpbnRmKChidWYgKyBsZW4pLCAoc2l6ZSAt IGxlbiksCi0JCQlEVU1QX1JFR19WQUxVRShEU0lfVkVSU0lPTikpOwotCi0JcHJfZXJyKCJMTEVO R1RIID0gJWRcbiIsIGxlbik7Ci0JcmV0dXJuIGxlbjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8yLmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3XzJfMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAyYzE5MTNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNp LXN0YWdpbmcvZHNpX2N0cmxfaHdfMl8yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10 KGZtdCkgImRzaS1odzoiIGZtdAotCi0jaW5jbHVkZSAiZHNpX2N0cmxfaHcuaCIKLSNpbmNsdWRl ICJkc2lfY3RybF9yZWcuaCIKLSNpbmNsdWRlICJkc2lfaHcuaCIKLQotLyogRXF1aXZhbGVudCB0 byByZWdpc3RlciBESVNQX0NDX01JU0NfQ01EICovCi0jZGVmaW5lIERJU1BfQ0NfQ0xBTVBfUkVH X09GRiAweDAwCi0KLS8qKgotICogZHNpX2N0cmxfaHdfMjJfcGh5X3Jlc2V0X2NvbmZpZygpIC0g dG8gY29uZmlndXJlIGNsYW1wIGNvbnRyb2wgZHVyaW5nIHVscHMKLSAqIEBjdHJsOiAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAZW5hYmxlOiAg ICAgIGJvb2xlYW4gdG8gc3BlY2lmeSBlbmFibGUvZGlzYWJsZS4KLSAqLwotdm9pZCBkc2lfY3Ry bF9od18yMl9waHlfcmVzZXRfY29uZmlnKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJYm9v bCBlbmFibGUpCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQlyZWcgPSBEU0lfRElTUF9DQ19SMzIoY3Ry bCwgRElTUF9DQ19DTEFNUF9SRUdfT0ZGKTsKLQotCS8qIE1hc2svdW5tYXNrIGRpc2FibGUgUEhZ IHJlc2V0IGJpdCAqLwotCWlmIChlbmFibGUpCi0JCXJlZyAmPSB+QklUKGN0cmwtPmluZGV4KTsK LQllbHNlCi0JCXJlZyB8PSBCSVQoY3RybC0+aW5kZXgpOwotCURTSV9ESVNQX0NDX1czMihjdHJs LCBESVNQX0NDX0NMQU1QX1JFR19PRkYsIHJlZyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX2h3X2Ntbi5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfY3RybF9od19jbW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYWY3ODQyZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1z dGFnaW5nL2RzaV9jdHJsX2h3X2Ntbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMxMiArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBB bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJfZm10 KGZtdCkgImRzaS1odzoiIGZtdAotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8 bGludXgvaW9wb2xsLmg+Ci0KLSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRz aV9jdHJsX3JlZy5oIgotI2luY2x1ZGUgImRzaV9ody5oIgotI2luY2x1ZGUgImRzaV9wYW5lbC5o IgotI2luY2x1ZGUgImRzaV9jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2RiZy5oIgotCi0jZGVm aW5lIE1NU1NfTUlTQ19DTEFNUF9SRUdfT0ZGICAgICAgICAgICAweDAwMTQKLSNkZWZpbmUgRFNJ X0NUUkxfRFlOQU1JQ19GT1JDRV9PTiAgICAgICAgICgweDIzRnxCSVQoOCl8QklUKDkpfEJJVCgx MSl8QklUKDIxKSkKLSNkZWZpbmUgRFNJX0NUUkxfQ01EX01JU1JfRU5BQkxFICAgICAgICAgIEJJ VCgyOCkKLSNkZWZpbmUgRFNJX0NUUkxfVklERU9fTUlTUl9FTkFCTEUgICAgICAgIEJJVCgxNikK LQotLyogVW5zdXBwb3J0ZWQgZm9ybWF0cyBkZWZhdWx0IHRvIFJHQjg4OCAqLwotc3RhdGljIGNv bnN0IHU4IGNtZF9tb2RlX2Zvcm1hdF9tYXBbRFNJX1BJWEVMX0ZPUk1BVF9NQVhdID0gewotCTB4 NiwgMHg3LCAweDgsIDB4OCwgMHgwLCAweDMsIDB4NCB9Owotc3RhdGljIGNvbnN0IHU4IHZpZGVv X21vZGVfZm9ybWF0X21hcFtEU0lfUElYRUxfRk9STUFUX01BWF0gPSB7Ci0JMHgwLCAweDEsIDB4 MiwgMHgzLCAweDMsIDB4MywgMHgzIH07Ci0KLS8qKgotICogZHNpX3NldHVwX3RyaWdnZXJfY29u dHJvbHMoKSAtIHNldHVwIGRzaSB0cmlnZ2VyIGNvbmZpZ3VyYXRpb25zCi0gKiBAY3RybDogICAg ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGNm ZzogICAgICAgICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBjb21tb24gdG8g Ym90aCB2aWRlbyBhbmQKLSAqICAgICAgICAgICAgICAgICAgICBjb21tYW5kIG1vZGVzLgotICov Ci1zdGF0aWMgdm9pZCBkc2lfc2V0dXBfdHJpZ2dlcl9jb250cm9scyhzdHJ1Y3QgZHNpX2N0cmxf aHcgKmN0cmwsCi0JCQkJICAgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnICpjZmcpCi17 Ci0JdTMyIHJlZyA9IDA7Ci0JY29uc3QgdTggdHJpZ2dlcl9tYXBbRFNJX1RSSUdHRVJfTUFYXSA9 IHsKLQkJMHgwLCAweDIsIDB4MSwgMHg0LCAweDUsIDB4NiB9OwotCi0JcmVnIHw9IChjZmctPnRl X21vZGUgPT0gRFNJX1RFX09OX0VYVF9QSU4pID8gQklUKDMxKSA6IDA7Ci0JcmVnIHw9ICh0cmln Z2VyX21hcFtjZmctPmRtYV9jbWRfdHJpZ2dlcl0gJiAweDcpOwotCXJlZyB8PSAodHJpZ2dlcl9t YXBbY2ZnLT5tZHBfY21kX3RyaWdnZXJdICYgMHg3KSA8PCA0OwotCURTSV9XMzIoY3RybCwgRFNJ X1RSSUdfQ1RSTCwgcmVnKTsKLX0KLQotLyoqCi0gKiBkc2lfY3RybF9od19jbW5faG9zdF9zZXR1 cCgpIC0gc2V0dXAgZHNpIGhvc3QgY29uZmlndXJhdGlvbgotICogQGN0cmw6ICAgICAgICAgICAg IFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEBjZmc6ICAgICAg ICAgICAgICBEU0kgaG9zdCBjb25maWd1cmF0aW9uIHRoYXQgaXMgY29tbW9uIHRvIGJvdGggdmlk ZW8gYW5kCi0gKiAgICAgICAgICAgICAgICAgICAgY29tbWFuZCBtb2Rlcy4KLSAqLwotdm9pZCBk c2lfY3RybF9od19jbW5faG9zdF9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkg ICAgICAgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmNmZykKLXsKLQl1MzIgcmVnX3ZhbHVl ID0gMDsKLQotCWRzaV9zZXR1cF90cmlnZ2VyX2NvbnRyb2xzKGN0cmwsIGNmZyk7Ci0KLQkvKiBT ZXR1cCBjbG9ja2luZyB0aW1pbmcgY29udHJvbHMgKi8KLQlyZWdfdmFsdWUgPSAoKGNmZy0+dF9j bGtfcG9zdCAmIDB4M0YpIDw8IDgpOwotCXJlZ192YWx1ZSB8PSAoY2ZnLT50X2Nsa19wcmUgJiAw eDNGKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9DTEtPVVRfVElNSU5HX0NUUkwsIHJlZ192YWx1ZSk7 Ci0KLQkvKiBFT1QgcGFja2V0IGNvbnRyb2wgKi8KLQlyZWdfdmFsdWUgPSBjZmctPmFwcGVuZF90 eF9lb3QgPyAxIDogMDsKLQlyZWdfdmFsdWUgfD0gKGNmZy0+aWdub3JlX3J4X2VvdCA/ICgxIDw8 IDQpIDogMCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfRU9UX1BBQ0tFVF9DVFJMLCByZWdfdmFsdWUp OwotCi0JLyogVHVybiBvbiBkc2kgY2xvY2tzICovCi0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NU UkwsIDB4MjNGKTsKLQotCS8qIFNldHVwIERTSSBjb250cm9sIHJlZ2lzdGVyICovCi0JcmVnX3Zh bHVlID0gRFNJX1IzMihjdHJsLCBEU0lfQ1RSTCk7Ci0JcmVnX3ZhbHVlIHw9IChjZmctPmVuX2Ny Y19jaGVjayA/IEJJVCgyNCkgOiAwKTsKLQlyZWdfdmFsdWUgfD0gKGNmZy0+ZW5fZWNjX2NoZWNr ID8gQklUKDIwKSA6IDApOwotCXJlZ192YWx1ZSB8PSBCSVQoOCk7IC8qIENsb2NrIGxhbmUgKi8K LQlyZWdfdmFsdWUgfD0gKChjZmctPmRhdGFfbGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpID8gQklU KDcpIDogMCk7Ci0JcmVnX3ZhbHVlIHw9ICgoY2ZnLT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFO RV8yKSA/IEJJVCg2KSA6IDApOwotCXJlZ192YWx1ZSB8PSAoKGNmZy0+ZGF0YV9sYW5lcyAmIERT SV9EQVRBX0xBTkVfMSkgPyBCSVQoNSkgOiAwKTsKLQlyZWdfdmFsdWUgfD0gKChjZmctPmRhdGFf bGFuZXMgJiBEU0lfREFUQV9MQU5FXzApID8gQklUKDQpIDogMCk7Ci0KLQlEU0lfVzMyKGN0cmws IERTSV9DVFJMLCByZWdfdmFsdWUpOwotCi0JaWYgKGN0cmwtPnBoeV9pc29sYXRpb25fZW5hYmxl ZCkKLQkJRFNJX1czMihjdHJsLCBEU0lfREVCVUdfQ1RSTCwgQklUKDI4KSk7Ci0JcHJfZGVidWco IltEU0lfJWRdSG9zdCBjb25maWd1cmF0aW9uIGNvbXBsZXRlXG4iLCBjdHJsLT5pbmRleCk7Ci19 Ci0KLS8qKgotICogcGh5X3N3X3Jlc2V0KCkgLSBwZXJmb3JtIGEgc29mdCByZXNldCBvbiB0aGUg UEhZLgotICogQGN0cmw6ICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFy ZHdhcmUuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3BoeV9zd19yZXNldChzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwpCi17Ci0JRFNJX1czMihjdHJsLCBEU0lfUEhZX1NXX1JFU0VULCBCSVQo MjQpfEJJVCgwKSk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSByZXNldCBpcyBhc3NlcnRlZCAqLwot CXVkZWxheSgxMDAwKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9QSFlfU1dfUkVTRVQsIDB4MCk7Ci0J d21iKCk7IC8qIGVuc3VyZSByZXNldCBpcyBjbGVhcmVkIGJlZm9yZSB3YWl0aW5nICovCi0JdWRl bGF5KDEwMCk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gcGh5IHN3IHJlc2V0IGRvbmVcbiIsIGN0 cmwtPmluZGV4KTsKLX0KLQotLyoqCi0gKiBzb2Z0X3Jlc2V0KCkgLSBwZXJmb3JtIGEgc29mdCBy ZXNldCBvbiBEU0kgY29udHJvbGxlcgotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhl IGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqCi0gKiBUaGUgdmlkZW8sIGNvbW1hbmQgYW5k IGNvbnRyb2xsZXIgZW5naW5lcyB3aWxsIGJlIGRpc2FibGVkIGJlZm9yZSB0aGUKLSAqIHJlc2V0 IGlzIHRyaWdnZXJlZCBhbmQgcmUtZW5hYmxlZCBhZnRlciB0aGUgcmVzZXQgaXMgY29tcGxldGUu Ci0gKgotICogSWYgdGhlIHJlc2V0IGlzIGRvbmUgd2hpbGUgTURQIHRpbWluZyBlbmdpbmUgaXMg dHVybmVkIG9uLCB0aGUgdmlkZW8KLSAqIGVuaWduZSBzaG91bGQgYmUgcmUtZW5hYmxlZCBvbmx5 IGR1cmluZyB0aGUgdmVydGljYWwgYmxhbmtpbmcgdGltZS4KLSAqLwotdm9pZCBkc2lfY3RybF9o d19jbW5fc29mdF9yZXNldChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpCi17Ci0JdTMyIHJlZyA9 IDA7Ci0JdTMyIHJlZ19jdHJsID0gMDsKLQotCS8qIENsZWFyIERTSV9FTiwgVklERU9fTU9ERV9F TiwgQ01EX01PREVfRU4gKi8KLQlyZWdfY3RybCA9IERTSV9SMzIoY3RybCwgRFNJX0NUUkwpOwot CURTSV9XMzIoY3RybCwgRFNJX0NUUkwsIHJlZ19jdHJsICYgfjB4Nyk7Ci0Jd21iKCk7IC8qIHdh aXQgY29udHJvbGxlciB0byBiZSBkaXNhYmxlZCBiZWZvcmUgcmVzZXQgKi8KLQotCS8qIEZvcmNl IGVuYWJsZSBQQ0xLLCBCWVRFQ0xLLCBBSEJNX0hDTEsgKi8KLQlyZWcgPSBEU0lfUjMyKGN0cmws IERTSV9DTEtfQ1RSTCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NUUkwsIHJlZyB8IERTSV9D VFJMX0RZTkFNSUNfRk9SQ0VfT04pOwotCXdtYigpOyAvKiB3YWl0IGZvciBjbG9ja3MgdG8gYmUg ZW5hYmxlZCAqLwotCi0JLyogVHJpZ2dlciBzb2Z0IHJlc2V0ICovCi0JRFNJX1czMihjdHJsLCBE U0lfU09GVF9SRVNFVCwgMHgxKTsKLQl3bWIoKTsgLyogd2FpdCBmb3IgcmVzZXQgdG8gYXNzZXJ0 IGJlZm9yZSB3YWl0aW5nICovCi0JdWRlbGF5KDEpOwotCURTSV9XMzIoY3RybCwgRFNJX1NPRlRf UkVTRVQsIDB4MCk7Ci0Jd21iKCk7IC8qIGVuc3VyZSByZXNldCBpcyBjbGVhcmVkICovCi0KLQkv KiBEaXNhYmxlIGZvcmNlIGNsb2NrIG9uICovCi0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NUUkws IHJlZyk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSBjbG9ja3MgYXJlIHJlc3RvcmVkICovCi0KLQkv KiBSZS1lbmFibGUgRFNJIGNvbnRyb2xsZXIgKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9DVFJMLCBy ZWdfY3RybCk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSBEU0kgY29udHJvbGxlciBpcyBlbmFibGVk IGFnYWluICovCi0JcHJfZGVidWcoIltEU0lfJWRdIGN0cmwgc29mdCByZXNldCBkb25lXG4iLCBj dHJsLT5pbmRleCk7Ci19Ci0KLS8qKgotICogc2V0dXBfbWlzcigpIC0gU2V0dXAgZnJhbWUgTUlT UgotICogQGN0cmw6CSAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgot ICogQHBhbmVsX21vZGU6ICAgQ01EIG9yIFZJREVPIG1vZGUgaW5kaWNhdG9yCi0gKiBAZW5hYmxl OgkgIEVuYWJsZS9kaXNhYmxlIE1JU1IuCi0gKiBAZnJhbWVfY291bnQ6ICBOdW1iZXIgb2YgZnJh bWVzIHRvIGFjY3VtdWxhdGUgTUlTUi4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fc2V0dXBf bWlzcihzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQllbnVtIGRzaV9vcF9tb2RlIHBhbmVs X21vZGUsCi0JCQlib29sIGVuYWJsZSwKLQkJCXUzMiBmcmFtZV9jb3VudCkKLXsKLQl1MzIgYWRk cjsKLQl1MzIgY29uZmlnID0gMDsKLQotCWlmIChwYW5lbF9tb2RlID09IERTSV9PUF9DTURfTU9E RSkgewotCQlhZGRyID0gRFNJX01JU1JfQ01EX0NUUkw7Ci0JCWlmIChlbmFibGUpCi0JCQljb25m aWcgPSBEU0lfQ1RSTF9DTURfTUlTUl9FTkFCTEU7Ci0JfSBlbHNlIHsKLQkJYWRkciA9IERTSV9N SVNSX1ZJREVPX0NUUkw7Ci0JCWlmIChlbmFibGUpCi0JCQljb25maWcgPSBEU0lfQ1RSTF9WSURF T19NSVNSX0VOQUJMRTsKLQkJaWYgKGZyYW1lX2NvdW50ID4gMjU1KQotCQkJZnJhbWVfY291bnQg PSAyNTU7Ci0JCWNvbmZpZyB8PSBmcmFtZV9jb3VudCA8PCA4OwotCX0KLQotCXByX2RlYnVnKCJb RFNJXyVkXSBNSVNSIGN0cmw6IDB4JXhcbiIsIGN0cmwtPmluZGV4LAotCQkJY29uZmlnKTsKLQlE U0lfVzMyKGN0cmwsIGFkZHIsIGNvbmZpZyk7Ci0Jd21iKCk7IC8qIG1ha2Ugc3VyZSBNSVNSIGlz IGNvbmZpZ3VyZWQgKi8KLX0KLQotLyoqCi0gKiBjb2xsZWN0X21pc3IoKSAtIFJlYWQgZnJhbWUg TUlTUgotICogQGN0cmw6CSAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotICogQHBhbmVsX21vZGU6ICAgQ01EIG9yIFZJREVPIG1vZGUgaW5kaWNhdG9yCi0gKi8KLXUz MiBkc2lfY3RybF9od19jbW5fY29sbGVjdF9taXNyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwK LQkJCWVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9kZSkKLXsKLQl1MzIgYWRkcjsKLQl1MzIgZW5h YmxlZDsKLQl1MzIgbWlzciA9IDA7Ci0KLQlpZiAocGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01P REUpIHsKLQkJYWRkciA9IERTSV9NSVNSX0NNRF9NRFAwXzMyQklUOwotCQllbmFibGVkID0gRFNJ X1IzMihjdHJsLCBEU0lfTUlTUl9DTURfQ1RSTCkgJgotCQkJCURTSV9DVFJMX0NNRF9NSVNSX0VO QUJMRTsKLQl9IGVsc2UgewotCQlhZGRyID0gRFNJX01JU1JfVklERU9fMzJCSVQ7Ci0JCWVuYWJs ZWQgPSBEU0lfUjMyKGN0cmwsIERTSV9NSVNSX1ZJREVPX0NUUkwpICYKLQkJCQlEU0lfQ1RSTF9W SURFT19NSVNSX0VOQUJMRTsKLQl9Ci0KLQlpZiAoZW5hYmxlZCkKLQkJbWlzciA9IERTSV9SMzIo Y3RybCwgYWRkcik7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gTUlTUiBlbmFibGVkICV4IHZhbHVl OiAweCV4XG4iLCBjdHJsLT5pbmRleCwKLQkJCWVuYWJsZWQsIG1pc3IpOwotCXJldHVybiBtaXNy OwotfQotCi0vKioKLSAqIHNldF90aW1pbmdfZGIoKSAtIGVuYWJsZS9kaXNhYmxlIFRpbWluZyBE QiByZWdpc3RlcgotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0 IGhhcmR3YXJlLgotICogQGVuYWJsZTogICAgICAgIEVuYWJsZS9EaXNhYmxlIGZsYWcuCi0gKgot ICogRW5hYmxlIG9yIERpc2FiZSB0aGUgVGltaW5nIERCIHJlZ2lzdGVyLgotICovCi12b2lkIGRz aV9jdHJsX2h3X2Ntbl9zZXRfdGltaW5nX2RiKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJ CQkgICAgIGJvb2wgZW5hYmxlKQotewotCWlmIChlbmFibGUpCi0JCURTSV9XMzIoY3RybCwgRFNJ X0RTSV9USU1JTkdfREJfTU9ERSwgMHgxKTsKLQllbHNlCi0JCURTSV9XMzIoY3RybCwgRFNJX0RT SV9USU1JTkdfREJfTU9ERSwgMHgwKTsKLQotCXdtYigpOyAvKiBtYWtlIHN1cmUgdGltaW5nIGRi IHJlZ2lzdGVycyBhcmUgc2V0ICovCi0JcHJfZGVidWcoIltEU0lfJWRdIGN0cmwgdGltaW5nIERC IHNldDolZFxuIiwgY3RybC0+aW5kZXgsCi0JCQkJZW5hYmxlKTsKLQlEUFVfRVZUMzIoY3RybC0+ aW5kZXgsIGVuYWJsZSk7Ci19Ci0KLS8qKgotICogc2V0X3ZpZGVvX3RpbWluZygpIC0gc2V0IHVw IHRoZSB0aW1pbmcgZm9yIHZpZGVvIGZyYW1lCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0 byBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAbW9kZTogICAgICAgICAgVmlkZW8gbW9k ZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBTZXQgdXAgdGhlIHZpZGVvIHRpbWluZyBwYXJhbWV0ZXJz IGZvciB0aGUgRFNJIHZpZGVvIG1vZGUgb3BlcmF0aW9uLgotICovCi12b2lkIGRzaV9jdHJsX2h3 X2Ntbl9zZXRfdmlkZW9fdGltaW5nKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAg IHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlKQotewotCXUzMiByZWcgPSAwOwotCXUzMiBoc19z dGFydCA9IDA7Ci0JdTMyIGhzX2VuZCwgYWN0aXZlX2hfc3RhcnQsIGFjdGl2ZV9oX2VuZCwgaF90 b3RhbCwgd2lkdGggPSAwOwotCXUzMiB2c19zdGFydCA9IDAsIHZzX2VuZCA9IDA7Ci0JdTMyIHZw b3Nfc3RhcnQgPSAwLCB2cG9zX2VuZCwgYWN0aXZlX3Zfc3RhcnQsIGFjdGl2ZV92X2VuZCwgdl90 b3RhbDsKLQotCWlmIChtb2RlLT5kc2NfZW5hYmxlZCAmJiBtb2RlLT5kc2MpIHsKLQkJd2lkdGgg PSBtb2RlLT5kc2MtPnBjbGtfcGVyX2xpbmU7Ci0JCXJlZyA9IG1vZGUtPmRzYy0+Ynl0ZXNfcGVy X3BrdCA8PCAxNjsKLQkJcmVnIHw9ICgweDBiIDw8IDgpOyAgICAvKiBkdHlwZSBvZiBjb21wcmVz c2VkIGltYWdlICovCi0JCS8qCi0JCSAqIHBrdF9wZXJfbGluZToKLQkJICogMCA9PSAxIHBrdAot CQkgKiAxID09IDIgcGt0Ci0JCSAqIDIgPT0gNCBwa3QKLQkJICogMyBwa3QgaXMgbm90IHN1cHBv cnQKLQkJICovCi0JCWlmIChtb2RlLT5kc2MtPnBrdF9wZXJfbGluZSA9PSA0KQotCQkJcmVnIHw9 IChtb2RlLT5kc2MtPnBrdF9wZXJfbGluZSAtIDIpIDw8IDY7Ci0JCWVsc2UKLQkJCXJlZyB8PSAo bW9kZS0+ZHNjLT5wa3RfcGVyX2xpbmUgLSAxKSA8PCA2OwotCQlyZWcgfD0gbW9kZS0+ZHNjLT5l b2xfYnl0ZV9udW0gPDwgNDsKLQkJcmVnIHw9IDE7Ci0JCURTSV9XMzIoY3RybCwgRFNJX1ZJREVP X0NPTVBSRVNTSU9OX01PREVfQ1RSTCwgcmVnKTsKLQl9IGVsc2UgewotCQl3aWR0aCA9IG1vZGUt PmhfYWN0aXZlOwotCX0KLQotCWhzX2VuZCA9IG1vZGUtPmhfc3luY193aWR0aDsKLQlhY3RpdmVf aF9zdGFydCA9IG1vZGUtPmhfc3luY193aWR0aCArIG1vZGUtPmhfYmFja19wb3JjaDsKLQlhY3Rp dmVfaF9lbmQgPSBhY3RpdmVfaF9zdGFydCArIHdpZHRoOwotCWhfdG90YWwgPSAobW9kZS0+aF9z eW5jX3dpZHRoICsgbW9kZS0+aF9iYWNrX3BvcmNoICsgd2lkdGggKwotCQkgICBtb2RlLT5oX2Zy b250X3BvcmNoKSAtIDE7Ci0KLQl2cG9zX2VuZCA9IG1vZGUtPnZfc3luY193aWR0aDsKLQlhY3Rp dmVfdl9zdGFydCA9IG1vZGUtPnZfc3luY193aWR0aCArIG1vZGUtPnZfYmFja19wb3JjaDsKLQlh Y3RpdmVfdl9lbmQgPSBhY3RpdmVfdl9zdGFydCArIG1vZGUtPnZfYWN0aXZlOwotCXZfdG90YWwg PSAobW9kZS0+dl9zeW5jX3dpZHRoICsgbW9kZS0+dl9iYWNrX3BvcmNoICsgbW9kZS0+dl9hY3Rp dmUgKwotCQkgICBtb2RlLT52X2Zyb250X3BvcmNoKSAtIDE7Ci0KLQlyZWcgPSAoKGFjdGl2ZV9o X2VuZCAmIDB4RkZGRikgPDwgMTYpIHwgKGFjdGl2ZV9oX3N0YXJ0ICYgMHhGRkZGKTsKLQlEU0lf VzMyKGN0cmwsIERTSV9WSURFT19NT0RFX0FDVElWRV9ILCByZWcpOwotCi0JcmVnID0gKChhY3Rp dmVfdl9lbmQgJiAweEZGRkYpIDw8IDE2KSB8IChhY3RpdmVfdl9zdGFydCAmIDB4RkZGRik7Ci0J RFNJX1czMihjdHJsLCBEU0lfVklERU9fTU9ERV9BQ1RJVkVfViwgcmVnKTsKLQotCXJlZyA9ICgo dl90b3RhbCAmIDB4RkZGRikgPDwgMTYpIHwgKGhfdG90YWwgJiAweEZGRkYpOwotCURTSV9XMzIo Y3RybCwgRFNJX1ZJREVPX01PREVfVE9UQUwsIHJlZyk7Ci0KLQlyZWcgPSAoKGhzX2VuZCAmIDB4 RkZGRikgPDwgMTYpIHwgKGhzX3N0YXJ0ICYgMHhGRkZGKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9W SURFT19NT0RFX0hTWU5DLCByZWcpOwotCi0JcmVnID0gKCh2c19lbmQgJiAweEZGRkYpIDw8IDE2 KSB8ICh2c19zdGFydCAmIDB4RkZGRik7Ci0JRFNJX1czMihjdHJsLCBEU0lfVklERU9fTU9ERV9W U1lOQywgcmVnKTsKLQotCXJlZyA9ICgodnBvc19lbmQgJiAweEZGRkYpIDw8IDE2KSB8ICh2cG9z X3N0YXJ0ICYgMHhGRkZGKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9WSURFT19NT0RFX1ZTWU5DX1ZQ T1MsIHJlZyk7Ci0KLQkvKiBUT0RPOiBIUyBUSU1FUiB2YWx1ZT8gKi8KLQlEU0lfVzMyKGN0cmws IERTSV9IU19USU1FUl9DVFJMLCAweDNGRDA4KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9NSVNSX1ZJ REVPX0NUUkwsIDB4MTAxMDApOwotCURTSV9XMzIoY3RybCwgRFNJX0RTSV9USU1JTkdfRkxVU0gs IDB4MSk7Ci0JcHJfZGVidWcoIltEU0lfJWRdIGN0cmwgdmlkZW8gcGFyYW1ldGVycyB1cGRhdGVk XG4iLCBjdHJsLT5pbmRleCk7Ci0JRFBVX0VWVDMyKHZfdG90YWwsIGhfdG90YWwpOwotfQotCi0v KioKLSAqIHNldHVwX2NtZF9zdHJlYW0oKSAtIHNldCB1cCBwYXJhbWV0ZXJzIGZvciBjb21tYW5k IHBpeGVsIHN0cmVhbXMKLSAqIEBjdHJsOiAgICAgICAgICAgICAgUG9pbnRlciB0byBjb250cm9s bGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAbW9kZTogICAgICAgICAgICAgIFBvaW50ZXIgdG8gbW9k ZSBpbmZvcm1hdGlvbi4KLSAqIEBoX3N0cmlkZTogICAgICAgICAgSG9yaXpvbnRhbCBzdHJpZGUg aW4gYnl0ZXMuCi0gKiBAdmNfaWQ6ICAgICAgICAgICAgIHN0cmVhbV9pZAotICoKLSAqIFNldHVw IHBhcmFtZXRlcnMgZm9yIGNvbW1hbmQgbW9kZSBwaXhlbCBzdHJlYW0gc2l6ZS4KLSAqLwotdm9p ZCBkc2lfY3RybF9od19jbW5fc2V0dXBfY21kX3N0cmVhbShzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0 cmwsCi0JCQkJICAgICBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqbW9kZSwKLQkJCQkgICAgIHUzMiBo X3N0cmlkZSwKLQkJCQkgICAgIHUzMiB2Y19pZCwKLQkJCQkgICAgIHN0cnVjdCBkc2lfcmVjdCAq cm9pKQotewotCXUzMiB3aWR0aF9maW5hbCwgc3RyaWRlX2ZpbmFsOwotCXUzMiBoZWlnaHRfZmlu YWw7Ci0JdTMyIHN0cmVhbV90b3RhbCA9IDAsIHN0cmVhbV9jdHJsID0gMDsKLQl1MzIgcmVnX2N0 cmwgPSAwLCByZWdfY3RybDIgPSAwOwotCi0JaWYgKHJvaSAmJiAoIXJvaS0+dyB8fCAhcm9pLT5o KSkKLQkJcmV0dXJuOwotCi0JaWYgKG1vZGUtPmRzY19lbmFibGVkICYmIG1vZGUtPmRzYykgewot CQl1MzIgcmVnID0gMDsKLQkJdTMyIG9mZnNldCA9IDA7Ci0JCWludCBwaWNfd2lkdGgsIHRoaXNf ZnJhbWVfc2xpY2VzLCBpbnRmX2lwX3c7Ci0JCXN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyBk c2M7Ci0KLQkJbWVtY3B5KCZkc2MsIG1vZGUtPmRzYywgc2l6ZW9mKGRzYykpOwotCQlwaWNfd2lk dGggPSByb2kgPyByb2ktPncgOiBtb2RlLT5oX2FjdGl2ZTsKLQkJdGhpc19mcmFtZV9zbGljZXMg PSBwaWNfd2lkdGggLyBkc2Muc2xpY2Vfd2lkdGg7Ci0JCWludGZfaXBfdyA9IHRoaXNfZnJhbWVf c2xpY2VzICogZHNjLnNsaWNlX3dpZHRoOwotCQlkc2lfZHNjX3BjbGtfcGFyYW1fY2FsYygmZHNj LCBpbnRmX2lwX3cpOwotCi0JCWlmICh2Y19pZCAhPSAwKQotCQkJb2Zmc2V0ID0gMTY7Ci0JCXJl Z19jdHJsID0gRFNJX1IzMihjdHJsLCBEU0lfQ09NTUFORF9DT01QUkVTU0lPTl9NT0RFX0NUUkwp OwotCQlyZWdfY3RybDIgPSBEU0lfUjMyKGN0cmwsIERTSV9DT01NQU5EX0NPTVBSRVNTSU9OX01P REVfQ1RSTDIpOwotCQl3aWR0aF9maW5hbCA9IGRzYy5wY2xrX3Blcl9saW5lOwotCQlzdHJpZGVf ZmluYWwgPSBkc2MuYnl0ZXNfcGVyX3BrdDsKLQkJaGVpZ2h0X2ZpbmFsID0gcm9pID8gcm9pLT5o IDogbW9kZS0+dl9hY3RpdmU7Ci0KLQkJcmVnID0gMHgzOSA8PCA4OwotCQkvKgotCQkgKiBwa3Rf cGVyX2xpbmU6Ci0JCSAqIDAgPT0gMSBwa3QKLQkJICogMSA9PSAyIHBrdAotCQkgKiAyID09IDQg cGt0Ci0JCSAqIDMgcGt0IGlzIG5vdCBzdXBwb3J0Ci0JCSAqLwotCQlpZiAoZHNjLnBrdF9wZXJf bGluZSA9PSA0KQotCQkJcmVnIHw9IChkc2MucGt0X3Blcl9saW5lIC0gMikgPDwgNjsKLQkJZWxz ZQotCQkJcmVnIHw9IChkc2MucGt0X3Blcl9saW5lIC0gMSkgPDwgNjsKLQkJcmVnIHw9IGRzYy5l b2xfYnl0ZV9udW0gPDwgNDsKLQkJcmVnIHw9IDE7Ci0KLQkJcmVnX2N0cmwgJj0gfigweEZGRkYg PDwgb2Zmc2V0KTsKLQkJcmVnX2N0cmwgfD0gKHJlZyA8PCBvZmZzZXQpOwotCQlyZWdfY3RybDIg Jj0gfigweEZGRkYgPDwgb2Zmc2V0KTsKLQkJcmVnX2N0cmwyIHw9IChkc2MuYnl0ZXNfaW5fc2xp Y2UgPDwgb2Zmc2V0KTsKLQotCQlwcl9kZWJ1ZygiY3RybCAlZCByZWdfY3RybCAweCV4IHJlZ19j dHJsMiAweCV4XG4iLCBjdHJsLT5pbmRleCwKLQkJCQlyZWdfY3RybCwgcmVnX2N0cmwyKTsKLQl9 IGVsc2UgaWYgKHJvaSkgewotCQl3aWR0aF9maW5hbCA9IHJvaS0+dzsKLQkJc3RyaWRlX2ZpbmFs ID0gcm9pLT53ICogMzsKLQkJaGVpZ2h0X2ZpbmFsID0gcm9pLT5oOwotCX0gZWxzZSB7Ci0JCXdp ZHRoX2ZpbmFsID0gbW9kZS0+aF9hY3RpdmU7Ci0JCXN0cmlkZV9maW5hbCA9IGhfc3RyaWRlOwot CQloZWlnaHRfZmluYWwgPSBtb2RlLT52X2FjdGl2ZTsKLQl9Ci0KLQlzdHJlYW1fY3RybCA9IChz dHJpZGVfZmluYWwgKyAxKSA8PCAxNjsKLQlzdHJlYW1fY3RybCB8PSAodmNfaWQgJiAweDMpIDw8 IDg7Ci0Jc3RyZWFtX2N0cmwgfD0gMHgzOTsgLyogcGFja2V0IGRhdGEgdHlwZSAqLwotCi0JRFNJ X1czMihjdHJsLCBEU0lfQ09NTUFORF9DT01QUkVTU0lPTl9NT0RFX0NUUkwsIHJlZ19jdHJsKTsK LQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX0NPTVBSRVNTSU9OX01PREVfQ1RSTDIsIHJlZ19j dHJsMik7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTBfQ1RS TCwgc3RyZWFtX2N0cmwpOwotCURTSV9XMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RS RUFNMV9DVFJMLCBzdHJlYW1fY3RybCk7Ci0KLQlzdHJlYW1fdG90YWwgPSAoaGVpZ2h0X2ZpbmFs IDw8IDE2KSB8IHdpZHRoX2ZpbmFsOwotCURTSV9XMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9N RFBfU1RSRUFNMF9UT1RBTCwgc3RyZWFtX3RvdGFsKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9DT01N QU5EX01PREVfTURQX1NUUkVBTTFfVE9UQUwsIHN0cmVhbV90b3RhbCk7Ci0KLQlwcl9kZWJ1Zygi Y3RybCAlZCBzdHJlYW1fY3RybCAweCV4IHN0cmVhbV90b3RhbCAweCV4XG4iLCBjdHJsLT5pbmRl eCwKLQkJCXN0cmVhbV9jdHJsLCBzdHJlYW1fdG90YWwpOwotfQotCi0vKioKLSAqIHZpZGVvX2Vu Z2luZV9zZXR1cCgpIC0gU2V0dXAgZHNpIGhvc3QgY29udHJvbGxlciBmb3IgdmlkZW8gbW9kZQot ICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgot ICogQGNvbW1vbl9jZmc6ICAgIENvbW1vbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCi0gKiBA Y2ZnOiAgICAgICAgICAgVmlkZW8gbW9kZSBjb25maWd1cmF0aW9uLgotICoKLSAqIFNldCB1cCBE U0kgdmlkZW8gZW5naW5lIHdpdGggYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBDb250cm9sbGVy IGFuZAotICogdmlkZW8gZW5naW5lIGFyZSBub3QgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoaXMgZnVu Y3Rpb24uCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3ZpZGVvX2VuZ2luZV9zZXR1cChzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJICAgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25f Y2ZnICpjb21tb25fY2ZnLAotCQkJCSAgICAgICBzdHJ1Y3QgZHNpX3ZpZGVvX2VuZ2luZV9jZmcg KmNmZykKLXsKLQl1MzIgcmVnID0gMDsKLQotCXJlZyB8PSAoY2ZnLT5sYXN0X2xpbmVfaW50ZXJs ZWF2ZV9lbiA/IEJJVCgzMSkgOiAwKTsKLQlyZWcgfD0gKGNmZy0+cHVsc2VfbW9kZV9oc2FfaGUg PyBCSVQoMjgpIDogMCk7Ci0JcmVnIHw9IChjZmctPmhmcF9scDExX2VuID8gQklUKDI0KSA6IDAp OwotCXJlZyB8PSAoY2ZnLT5oYnBfbHAxMV9lbiA/IEJJVCgyMCkgOiAwKTsKLQlyZWcgfD0gKGNm Zy0+aHNhX2xwMTFfZW4gPyBCSVQoMTYpIDogMCk7Ci0JcmVnIHw9IChjZmctPmVvZl9ibGxwX2xw MTFfZW4gPyBCSVQoMTUpIDogMCk7Ci0JcmVnIHw9IChjZmctPmJsbHBfbHAxMV9lbiA/IEJJVCgx MikgOiAwKTsKLQlyZWcgfD0gKGNmZy0+dHJhZmZpY19tb2RlICYgMHgzKSA8PCA4OwotCXJlZyB8 PSAoY2ZnLT52Y19pZCAmIDB4Myk7Ci0JcmVnIHw9ICh2aWRlb19tb2RlX2Zvcm1hdF9tYXBbY29t bW9uX2NmZy0+ZHN0X2Zvcm1hdF0gJiAweDMpIDw8IDQ7Ci0JRFNJX1czMihjdHJsLCBEU0lfVklE RU9fTU9ERV9DVFJMLCByZWcpOwotCi0JcmVnID0gKGNvbW1vbl9jZmctPnN3YXBfbW9kZSAmIDB4 NykgPDwgMTI7Ci0JcmVnIHw9IChjb21tb25fY2ZnLT5iaXRfc3dhcF9yZWQgPyBCSVQoMCkgOiAw KTsKLQlyZWcgfD0gKGNvbW1vbl9jZmctPmJpdF9zd2FwX2dyZWVuID8gQklUKDQpIDogMCk7Ci0J cmVnIHw9IChjb21tb25fY2ZnLT5iaXRfc3dhcF9ibHVlID8gQklUKDgpIDogMCk7Ci0JRFNJX1cz MihjdHJsLCBEU0lfVklERU9fTU9ERV9EQVRBX0NUUkwsIHJlZyk7Ci0JLyogRGlzYWJsZSBUaW1p bmcgZG91YmxlIGJ1ZmZlcmluZyAqLwotCURTSV9XMzIoY3RybCwgRFNJX0RTSV9USU1JTkdfREJf TU9ERSwgMHgwKTsKLQotCi0JcHJfZGVidWcoIltEU0lfJWRdIFZpZGVvIGVuZ2luZSBzZXR1cCBk b25lXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2RlYnVnX2J1 cyhzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwpCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQlEU0lfVzMy KGN0cmwsIERTSV9ERUJVR19CVVNfQ1RMLCAweDE4MSk7Ci0KLQkvKiBtYWtlIHN1cmUgdGhhdCBk ZWJ1ZyB0ZXN0IHBvaW50IGlzIGVuYWJsZWQgKi8KLQl3bWIoKTsKLQlyZWcgPSBEU0lfUjMyKGN0 cmwsIERTSV9ERUJVR19CVVNfU1RBVFVTKTsKLQotCXByX2VycigiW0RTSV8lZF0gZGVidWcgYnVz IHN0YXR1czoweCV4XG4iLCBjdHJsLT5pbmRleCwgcmVnKTsKLX0KLS8qKgotICogY21kX2VuZ2lu ZV9zZXR1cCgpIC0gc2V0dXAgZHNpIGhvc3QgY29udHJvbGxlciBmb3IgY29tbWFuZCBtb2RlCi0g KiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotICogQGNvbW1vbl9jZmc6ICAgIENvbW1vbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCi0g KiBAY2ZnOiAgICAgICAgICAgQ29tbWFuZCBtb2RlIGNvbmZpZ3VyYXRpb24uCi0gKgotICogU2V0 dXAgRFNJIENNRCBlbmdpbmUgd2l0aCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIENvbnRyb2xs ZXIgYW5kCi0gKiBjb21tYW5kIGVuZ2luZSBhcmUgbm90IGVuYWJsZWQgYXMgcGFydCBvZiB0aGlz IGZ1bmN0aW9uLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX3NldHVwKHN0 cnVjdCBkc2lfY3RybF9odyAqY3RybCwKLQkJCQkgICAgIHN0cnVjdCBkc2lfaG9zdF9jb21tb25f Y2ZnICpjb21tb25fY2ZnLAotCQkJCSAgICAgc3RydWN0IGRzaV9jbWRfZW5naW5lX2NmZyAqY2Zn KQotewotCXUzMiByZWcgPSAwOwotCi0JcmVnID0gKGNmZy0+bWF4X2NtZF9wYWNrZXRzX2ludGVy bGVhdmUgJiAweEYpIDw8IDIwOwotCXJlZyB8PSAoY29tbW9uX2NmZy0+Yml0X3N3YXBfcmVkID8g QklUKDQpIDogMCk7Ci0JcmVnIHw9IChjb21tb25fY2ZnLT5iaXRfc3dhcF9ncmVlbiA/IEJJVCg4 KSA6IDApOwotCXJlZyB8PSAoY29tbW9uX2NmZy0+Yml0X3N3YXBfYmx1ZSA/IEJJVCgxMikgOiAw KTsKLQlyZWcgfD0gY21kX21vZGVfZm9ybWF0X21hcFtjb21tb25fY2ZnLT5kc3RfZm9ybWF0XTsK LQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX0NUUkwsIHJlZyk7Ci0KLQlyZWcg PSBEU0lfUjMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX0NUUkwyKTsKLQlyZWcgfD0gQklU KDE2KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfTURQX0NUUkwyLCByZWcpOwot Ci0JcmVnID0gY2ZnLT53cl9tZW1fc3RhcnQgJiAweEZGOwotCXJlZyB8PSAoY2ZnLT53cl9tZW1f Y29udGludWUgJiAweEZGKSA8PCA4OwotCXJlZyB8PSAoY2ZnLT5pbnNlcnRfZGNzX2NvbW1hbmQg PyBCSVQoMTYpIDogMCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX01EUF9EQ1Nf Q01EX0NUUkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ21kIGVuZ2luZSBzZXR1cCBk b25lXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLS8qKgotICogdmlkZW9fZW5naW5lX2VuKCkgLSBl bmFibGUgRFNJIHZpZGVvIGVuZ2luZQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gY29u dHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQG9uOiAgICAgICAgICAgIEVuYWJsZS9kaXNhYmVs IHZpZGVvIGVuZ2luZS4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fdmlkZW9fZW5naW5lX2Vu KHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBvbikKLXsKLQl1MzIgcmVnID0gMDsKLQot CS8qIFNldC9DbGVhciBWSURFT19NT0RFX0VOIGJpdCAqLwotCXJlZyA9IERTSV9SMzIoY3RybCwg RFNJX0NUUkwpOwotCWlmIChvbikKLQkJcmVnIHw9IEJJVCgxKTsKLQllbHNlCi0JCXJlZyAmPSB+ QklUKDEpOwotCi0JRFNJX1czMihjdHJsLCBEU0lfQ1RSTCwgcmVnKTsKLQotCXByX2RlYnVnKCJb RFNJXyVkXSBWaWRlbyBlbmdpbmUgPSAlZFxuIiwgY3RybC0+aW5kZXgsIG9uKTsKLX0KLQotLyoq Ci0gKiBjdHJsX2VuKCkgLSBlbmFibGUgRFNJIGNvbnRyb2xsZXIgZW5naW5lCi0gKiBAY3RybDog ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQG9u OiAgICAgICAgICAgIHR1cm4gb24vb2ZmIHRoZSBEU0kgY29udHJvbGxlciBlbmdpbmUuCi0gKi8K LXZvaWQgZHNpX2N0cmxfaHdfY21uX2N0cmxfZW4oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLCBi b29sIG9uKQotewotCXUzMiByZWcgPSAwOwotCXUzMiBjbGtfY3RybDsKLQotCWNsa19jdHJsID0g RFNJX1IzMihjdHJsLCBEU0lfQ0xLX0NUUkwpOwotCURTSV9XMzIoY3RybCwgRFNJX0NMS19DVFJM LCBjbGtfY3RybCB8IERTSV9DVFJMX0RZTkFNSUNfRk9SQ0VfT04pOwotCXdtYigpOyAvKiB3YWl0 IGZvciBjbG9ja3MgdG8gZW5hYmxlICovCi0KLQkvKiBTZXQvQ2xlYXIgRFNJX0VOIGJpdCAqLwot CXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0NUUkwpOwotCWlmIChvbikKLQkJcmVnIHw9IEJJVCgw KTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDApOwotCi0JRFNJX1czMihjdHJsLCBEU0lfQ1RSTCwg cmVnKTsKLQl3bWIoKTsgLyogd2FpdCBmb3IgRFNJX0VOIHVwZGF0ZSBiZWZvcmUgZGlzYWJsaW5n IGNsb2NrcyAqLwotCi0JRFNJX1czMihjdHJsLCBEU0lfQ0xLX0NUUkwsIGNsa19jdHJsKTsKLQl3 bWIoKTsgLyogbWFrZSBzdXJlIGNsb2NrcyBhcmUgcmVzdG9yZWQgKi8KLQotCXByX2RlYnVnKCJb RFNJXyVkXSBDb250cm9sbGVyIGVuZ2luZSA9ICVkXG4iLCBjdHJsLT5pbmRleCwgb24pOwotfQot Ci0vKioKLSAqIGNtZF9lbmdpbmVfZW4oKSAtIGVuYWJsZSBEU0kgY29udHJvbGxlciBjb21tYW5k IGVuZ2luZQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9z dCBoYXJkd2FyZS4KLSAqIEBvbjogICAgICAgICAgICBUdXJuIG9uL29mZiB0aGUgRFNJIGNvbW1h bmQgZW5naW5lLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9jbWRfZW5naW5lX2VuKHN0cnVj dCBkc2lfY3RybF9odyAqY3RybCwgYm9vbCBvbikKLXsKLQl1MzIgcmVnID0gMDsKLQotCS8qIFNl dC9DbGVhciBDTURfTU9ERV9FTiBiaXQgKi8KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9DVFJM KTsKLQlpZiAob24pCi0JCXJlZyB8PSBCSVQoMik7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgyKTsK LQotCURTSV9XMzIoY3RybCwgRFNJX0NUUkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0g Y29tbWFuZCBlbmdpbmUgPSAlZFxuIiwgY3RybC0+aW5kZXgsIG9uKTsKLX0KLQotLyoqCi0gKiBr aWNrb2ZmX2NvbW1hbmQoKSAtIHRyYW5zbWl0cyBjb21tYW5kcyBzdG9yZWQgaW4gbWVtb3J5Ci0g KiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJl LgotICogQGNtZDogICAgICAgICAgIENvbW1hbmQgaW5mb3JtYXRpb24uCi0gKiBAZmxhZ3M6ICAg ICAgICAgTW9kaWZpZXJzIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4KLSAqCi0gKiBUaGUgY29u dHJvbGxlciBoYXJkd2FyZSBpcyBwcm9ncmFtbWVkIHdpdGggYWRkcmVzcyBhbmQgc2l6ZSBvZiB0 aGUKLSAqIGNvbW1hbmQgYnVmZmVyLiBUaGUgdHJhbnNtaXNzaW9uIGlzIGtpY2tlZCBvZmYgaWYK LSAqIERTSV9DVFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSIGZsYWcgaXMgbm90IHNldC4gSWYg dGhpcyBmbGFnIGlzCi0gKiBzZXQsIGNhbGxlciBzaG91bGQgbWFrZSBhIHNlcGFyYXRlIGNhbGwg dG8gdHJpZ2dlcl9jb21tYW5kX2RtYSgpIHRvCi0gKiB0cmFuc21pdCB0aGUgY29tbWFuZC4KLSAq Lwotdm9pZCBkc2lfY3RybF9od19jbW5fa2lja29mZl9jb21tYW5kKHN0cnVjdCBkc2lfY3RybF9o dyAqY3RybCwKLQkJCQkgICAgc3RydWN0IGRzaV9jdHJsX2NtZF9kbWFfaW5mbyAqY21kLAotCQkJ CSAgICB1MzIgZmxhZ3MpCi17Ci0JdTMyIHJlZyA9IDA7Ci0KLQkvKlNldCBCUk9BRENBU1RfRU4g YW5kIEVNQkVEREVEX01PREUgKi8KLQlyZWcgPSBEU0lfUjMyKGN0cmwsIERTSV9DT01NQU5EX01P REVfRE1BX0NUUkwpOwotCWlmIChjbWQtPmVuX2Jyb2FkY2FzdCkKLQkJcmVnIHw9IEJJVCgzMSk7 Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgzMSk7Ci0KLQlpZiAoY21kLT5pc19tYXN0ZXIpCi0JCXJl ZyB8PSBCSVQoMzApOwotCWVsc2UKLQkJcmVnICY9IH5CSVQoMzApOwotCi0JaWYgKGNtZC0+dXNl X2xwbSkKLQkJcmVnIHw9IEJJVCgyNik7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgyNik7Ci0KLQly ZWcgfD0gQklUKDI4KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9DT01NQU5EX01PREVfRE1BX0NUUkws IHJlZyk7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9ETUFfQ01EX09GRlNFVCwgY21kLT5vZmZzZXQp OwotCURTSV9XMzIoY3RybCwgRFNJX0RNQV9DTURfTEVOR1RILCAoY21kLT5sZW5ndGggJiAweEZG RkZGRikpOwotCi0JLyogd2FpdCBmb3Igd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBraWNrIG9m ZiAqLwotCXdtYigpOwotCi0JaWYgKCEoZmxhZ3MgJiBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1Jf VFJJR0dFUikpCi0JCURTSV9XMzIoY3RybCwgRFNJX0NNRF9NT0RFX0RNQV9TV19UUklHR0VSLCAw eDEpOwotfQotCi0vKioKLSAqIGtpY2tvZmZfZmlmb19jb21tYW5kKCkgLSB0cmFuc21pdHMgYSBj b21tYW5kIHVzaW5nIEZJRk8gaW4gZHNpCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFy ZHdhcmUuCi0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0 IGhhcmR3YXJlLgotICogQGNtZDogICAgICAgICAgIENvbW1hbmQgaW5mb3JtYXRpb24uCi0gKiBA ZmxhZ3M6ICAgICAgICAgTW9kaWZpZXJzIGZvciBjb21tYW5kIHRyYW5zbWlzc2lvbi4KLSAqCi0g KiBUaGUgY29udHJvbGxlciBoYXJkd2FyZSBGSUZPIGlzIHByb2dyYW1tZWQgd2l0aCBjb21tYW5k IGhlYWRlciBhbmQKLSAqIHBheWxvYWQuIFRoZSB0cmFuc21pc3Npb24gaXMga2lja2VkIG9mZiBp ZgotICogRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdHRVIgZmxhZyBpcyBub3Qgc2V0LiBJ ZiB0aGlzIGZsYWcgaXMKLSAqIHNldCwgY2FsbGVyIHNob3VsZCBtYWtlIGEgc2VwYXJhdGUgY2Fs bCB0byB0cmlnZ2VyX2NvbW1hbmRfZG1hKCkgdG8KLSAqIHRyYW5zbWl0IHRoZSBjb21tYW5kLgot ICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl9raWNrb2ZmX2ZpZm9fY29tbWFuZChzdHJ1Y3QgZHNp X2N0cmxfaHcgKmN0cmwsCi0JCQkJCSBzdHJ1Y3QgZHNpX2N0cmxfY21kX2RtYV9maWZvX2luZm8g KmNtZCwKLQkJCQkJIHUzMiBmbGFncykKLXsKLQl1MzIgcmVnID0gMCwgaSA9IDA7Ci0JdTMyICpw dHIgPSBjbWQtPmNvbW1hbmQ7Ci0JLyoKLQkgKiBTZXQgQ01EX0RNQV9UUEdfRU4sIFRQR19ETUFf RklGT19NT0RFIGFuZAotCSAqIENNRF9ETUFfUEFUVEVSTl9TRUwgPSBjdXN0b20gcGF0dGVybiBz dG9yZWQgaW4gVFBHIERNQSBGSUZPCi0JICovCi0JcmVnID0gKEJJVCgxKSB8IEJJVCgyKSB8ICgw eDMgPDwgMTYpKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NUUkwsIHJl Zyk7Ci0KLQkvKgotCSAqIFByb2dyYW0gdGhlIEZJRk8gd2l0aCBjb21tYW5kIGJ1ZmZlci4gSGFy ZHdhcmUgcmVxdWlyZXMgYW4gZXh0cmEKLQkgKiBEV09SRCAoc2V0IHRvIHplcm8pIGlmIHRoZSBs ZW5ndGggb2YgY29tbWFuZCBidWZmZXIgaXMgb2RkIERXT1JEUy4KLQkgKi8KLQlmb3IgKGkgPSAw OyBpIDwgY21kLT5zaXplOyBpICs9IDQpIHsKLQkJRFNJX1czMihjdHJsLCBEU0lfVEVTVF9QQVRU RVJOX0dFTl9DTURfRE1BX0lOSVRfVkFMLCAqcHRyKTsKLQkJcHRyKys7Ci0JfQotCi0JaWYgKChj bWQtPnNpemUgLyA0KSAmIDB4MSkKLQkJRFNJX1czMihjdHJsLCBEU0lfVEVTVF9QQVRURVJOX0dF Tl9DTURfRE1BX0lOSVRfVkFMLCAwKTsKLQotCS8qU2V0IEJST0FEQ0FTVF9FTiBhbmQgRU1CRURE RURfTU9ERSAqLwotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0NPTU1BTkRfTU9ERV9ETUFfQ1RS TCk7Ci0JaWYgKGNtZC0+ZW5fYnJvYWRjYXN0KQotCQlyZWcgfD0gQklUKDMxKTsKLQllbHNlCi0J CXJlZyAmPSB+QklUKDMxKTsKLQotCWlmIChjbWQtPmlzX21hc3RlcikKLQkJcmVnIHw9IEJJVCgz MCk7Ci0JZWxzZQotCQlyZWcgJj0gfkJJVCgzMCk7Ci0KLQlpZiAoY21kLT51c2VfbHBtKQotCQly ZWcgfD0gQklUKDI2KTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDI2KTsKLQotCXJlZyB8PSBCSVQo MjgpOwotCi0JRFNJX1czMihjdHJsLCBEU0lfQ09NTUFORF9NT0RFX0RNQV9DVFJMLCByZWcpOwot Ci0JRFNJX1czMihjdHJsLCBEU0lfRE1BX0NNRF9MRU5HVEgsIChjbWQtPnNpemUgJiAweEZGRkZG RkZGKSk7Ci0JLyogRmluaXNoIHdyaXRlcyBiZWZvcmUgY29tbWFuZCB0cmlnZ2VyICovCi0Jd21i KCk7Ci0KLQlpZiAoIShmbGFncyAmIERTSV9DVFJMX0hXX0NNRF9XQUlUX0ZPUl9UUklHR0VSKSkK LQkJRFNJX1czMihjdHJsLCBEU0lfQ01EX01PREVfRE1BX1NXX1RSSUdHRVIsIDB4MSk7Ci0KLQlw cl9kZWJ1ZygiW0RTSV8lZF1zaXplPSVkLCB0cmlnZ2VyID0gJWRcbiIsCi0JCSBjdHJsLT5pbmRl eCwgY21kLT5zaXplLAotCQkgKGZsYWdzICYgRFNJX0NUUkxfSFdfQ01EX1dBSVRfRk9SX1RSSUdH RVIpID8gZmFsc2UgOiB0cnVlKTsKLX0KLQotdm9pZCBkc2lfY3RybF9od19jbW5fcmVzZXRfY21k X2ZpZm8oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCS8qIGRpc2FibGUgY21kIGRtYSB0 cGcgKi8KLQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NUUkwsIDB4MCk7Ci0K LQlEU0lfVzMyKGN0cmwsIERTSV9UUEdfRE1BX0ZJRk9fUkVTRVQsIDB4MSk7Ci0JdWRlbGF5KDEp OwotCURTSV9XMzIoY3RybCwgRFNJX1RQR19ETUFfRklGT19SRVNFVCwgMHgwKTsKLX0KLQotLyoq Ci0gKiB0cmlnZ2VyX2NvbW1hbmRfZG1hKCkgLSB0cmlnZ2VyIHRyYW5zbWlzc2lvbiBvZiBjb21t YW5kIGJ1ZmZlci4KLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVy IGhvc3QgaGFyZHdhcmUuCi0gKgotICogVGhpcyB0cmlnZ2VyIGNhbiBiZSBvbmx5IHVzZWQgaWYg dGhlcmUgd2FzIGEgcHJpb3IgY2FsbCB0bwotICoga2lja29mZl9jb21tYW5kKCkgb2Yga2lja29m Zl9maWZvX2NvbW1hbmQoKSB3aXRoCi0gKiBEU0lfQ1RSTF9IV19DTURfV0FJVF9GT1JfVFJJR0dF UiBmbGFnLgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl90cmlnZ2VyX2NvbW1hbmRfZG1hKHN0 cnVjdCBkc2lfY3RybF9odyAqY3RybCkKLXsKLQlEU0lfVzMyKGN0cmwsIERTSV9DTURfTU9ERV9E TUFfU1dfVFJJR0dFUiwgMHgxKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ01EIERNQSB0cmlnZ2Vy ZWRcbiIsIGN0cmwtPmluZGV4KTsKLX0KLQotLyoqCi0gKiBnZXRfY21kX3JlYWRfZGF0YSgpIC0g Z2V0IGRhdGEgcmVhZCBmcm9tIHRoZSBwZXJpcGhlcmFsCi0gKiBAY3RybDogICAgICAgICAgIFBv aW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEByZF9idWY6ICAgICAg ICAgQnVmZmVyIHdoZXJlIGRhdGEgd2lsbCBiZSByZWFkIGludG8uCi0gKiBAdG90YWxfcmVhZF9s ZW46IE51bWJlciBvZiBieXRlcyB0byByZWFkLgotICoKLSAqIHJldHVybjogbnVtYmVyIG9mIGJ5 dGVzIHJlYWQuCi0gKi8KLXUzMiBkc2lfY3RybF9od19jbW5fZ2V0X2NtZF9yZWFkX2RhdGEoc3Ry dWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCSAgICAgdTggKnJkX2J1ZiwKLQkJCQkgICAgIHUz MiByZWFkX29mZnNldCwKLQkJCQkgICAgIHUzMiB0b3RhbF9yZWFkX2xlbikKLXsKLQl1MzIgKmxw LCAqdGVtcCwgZGF0YTsKLQlpbnQgaSwgaiA9IDAsIGNudDsKLQl1MzIgcmVhZF9jbnQ7Ci0JdTMy IHJ4X2J5dGUgPSAwOwotCXUzMiByZXBlYXRlZF9ieXRlcyA9IDA7Ci0JdTggcmVnWzE2XSA9IHsw fTsKLQl1MzIgcGt0X3NpemUgPSAwOwotCWludCBidWZfb2Zmc2V0ID0gcmVhZF9vZmZzZXQ7Ci0K LQlscCA9ICh1MzIgKilyZF9idWY7Ci0JdGVtcCA9ICh1MzIgKilyZWc7Ci0JY250ID0gKHJ4X2J5 dGUgKyAzKSA+PiAyOwotCi0JaWYgKGNudCA+IDQpCi0JCWNudCA9IDQ7Ci0KLQlpZiAocnhfYnl0 ZSA9PSA0KQotCQlyZWFkX2NudCA9IDQ7Ci0JZWxzZQotCQlyZWFkX2NudCA9IHBrdF9zaXplICsg NjsKLQotCWlmIChyZWFkX2NudCA+IDE2KSB7Ci0JCWludCBieXRlc19zaGlmdGVkOwotCi0JCWJ5 dGVzX3NoaWZ0ZWQgPSByZWFkX2NudCAtIDE2OwotCQlyZXBlYXRlZF9ieXRlcyA9IGJ1Zl9vZmZz ZXQgLSBieXRlc19zaGlmdGVkOwotCX0KLQotCWZvciAoaSA9IGNudCAtIDE7IGkgPj0gMDsgaS0t KSB7Ci0JCWRhdGEgPSBEU0lfUjMyKGN0cmwsIERTSV9SREJLX0RBVEEwICsgaSo0KTsKLQkJKnRl bXArKyA9IG50b2hsKGRhdGEpOwotCX0KLQotCWZvciAoaSA9IHJlcGVhdGVkX2J5dGVzOyBpIDwg MTY7IGkrKykKLQkJcmRfYnVmW2orK10gPSByZWdbaV07Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0g UmVhZCAlZCBieXRlc1xuIiwgY3RybC0+aW5kZXgsIGopOwotCXJldHVybiBqOwotfQotCi0vKioK LSAqIGdldF9pbnRlcnJ1cHRfc3RhdHVzKCkgLSByZXR1cm5zIHRoZSBpbnRlcnJ1cHQgc3RhdHVz Ci0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3 YXJlLgotICoKLSAqIFJldHVybnMgdGhlIE9SZWQgbGlzdCBvZiBpbnRlcnJ1cHRzKGVudW0gZHNp X3N0YXR1c19pbnRfdHlwZSkgdGhhdAotICogYXJlIGFjdGl2ZS4gVGhpcyBsaXN0IGRvZXMgbm90 IGluY2x1ZGUgYW55IGVycm9yIGludGVycnVwdHMuIENhbGxlcgotICogc2hvdWxkIGNhbGwgZ2V0 X2Vycm9yX3N0YXR1cyBmb3IgZXJyb3IgaW50ZXJydXB0cy4KLSAqCi0gKiBSZXR1cm46IExpc3Qg b2YgYWN0aXZlIGludGVycnVwdHMuCi0gKi8KLXUzMiBkc2lfY3RybF9od19jbW5fZ2V0X2ludGVy cnVwdF9zdGF0dXMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsKQotewotCXUzMiByZWcgPSAwOwot CXUzMiBpbnRzID0gMDsKLQotCXJlZyA9IERTSV9SMzIoY3RybCwgRFNJX0lOVF9DVFJMKTsKLQot CWlmIChyZWcgJiBCSVQoMCkpCi0JCWludHMgfD0gRFNJX0NNRF9NT0RFX0RNQV9ET05FOwotCWlm IChyZWcgJiBCSVQoOCkpCi0JCWludHMgfD0gRFNJX0NNRF9GUkFNRV9ET05FOwotCWlmIChyZWcg JiBCSVQoMTApKQotCQlpbnRzIHw9IERTSV9DTURfU1RSRUFNMF9GUkFNRV9ET05FOwotCWlmIChy ZWcgJiBCSVQoMTIpKQotCQlpbnRzIHw9IERTSV9DTURfU1RSRUFNMV9GUkFNRV9ET05FOwotCWlm IChyZWcgJiBCSVQoMTQpKQotCQlpbnRzIHw9IERTSV9DTURfU1RSRUFNMl9GUkFNRV9ET05FOwot CWlmIChyZWcgJiBCSVQoMTYpKQotCQlpbnRzIHw9IERTSV9WSURFT19NT0RFX0ZSQU1FX0RPTkU7 Ci0JaWYgKHJlZyAmIEJJVCgyMCkpCi0JCWludHMgfD0gRFNJX0JUQV9ET05FOwotCWlmIChyZWcg JiBCSVQoMjgpKQotCQlpbnRzIHw9IERTSV9EWU5fUkVGUkVTSF9ET05FOwotCWlmIChyZWcgJiBC SVQoMzApKQotCQlpbnRzIHw9IERTSV9ERVNLRVdfRE9ORTsKLQotCXByX2RlYnVnKCJbRFNJXyVk XSBJbnRlcnJ1cHQgc3RhdHVzID0gMHgleCwgSU5UX0NUUkw9MHgleFxuIiwKLQkJIGN0cmwtPmlu ZGV4LCBpbnRzLCByZWcpOwotCXJldHVybiBpbnRzOwotfQotCi0vKioKLSAqIGNsZWFyX2ludGVy cnVwdF9zdGF0dXMoKSAtIGNsZWFycyB0aGUgc3BlY2lmaWVkIGludGVycnVwdHMKLSAqIEBjdHJs OiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBA aW50czogICAgICAgICAgTGlzdCBvZiBpbnRlcnJ1cHRzIHRvIGJlIGNsZWFyZWQuCi0gKi8KLXZv aWQgZHNpX2N0cmxfaHdfY21uX2NsZWFyX2ludGVycnVwdF9zdGF0dXMoc3RydWN0IGRzaV9jdHJs X2h3ICpjdHJsLCB1MzIgaW50cykKLXsKLQl1MzIgcmVnID0gMDsKLQotCXJlZyA9IERTSV9SMzIo Y3RybCwgRFNJX0lOVF9DVFJMKTsKLQotCWlmIChpbnRzICYgRFNJX0NNRF9NT0RFX0RNQV9ET05F KQotCQlyZWcgfD0gQklUKDApOwotCWlmIChpbnRzICYgRFNJX0NNRF9GUkFNRV9ET05FKQotCQly ZWcgfD0gQklUKDgpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0wX0ZSQU1FX0RPTkUpCi0J CXJlZyB8PSBCSVQoMTApOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0xX0ZSQU1FX0RPTkUp Ci0JCXJlZyB8PSBCSVQoMTIpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0yX0ZSQU1FX0RP TkUpCi0JCXJlZyB8PSBCSVQoMTQpOwotCWlmIChpbnRzICYgRFNJX1ZJREVPX01PREVfRlJBTUVf RE9ORSkKLQkJcmVnIHw9IEJJVCgxNik7Ci0JaWYgKGludHMgJiBEU0lfQlRBX0RPTkUpCi0JCXJl ZyB8PSBCSVQoMjApOwotCWlmIChpbnRzICYgRFNJX0RZTl9SRUZSRVNIX0RPTkUpCi0JCXJlZyB8 PSBCSVQoMjgpOwotCWlmIChpbnRzICYgRFNJX0RFU0tFV19ET05FKQotCQlyZWcgfD0gQklUKDMw KTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0lOVF9DVFJMLCByZWcpOwotCi0JcHJfZGVidWcoIltE U0lfJWRdIENsZWFyIGludGVycnVwdHMsIGludHMgPSAweCV4LCBJTlRfQ1RSTD0weCV4XG4iLAot CQkgY3RybC0+aW5kZXgsIGludHMsIHJlZyk7Ci19Ci0KLS8qKgotICogZW5hYmxlX3N0YXR1c19p bnRlcnJ1cHRzKCkgLSBlbmFibGUgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzCi0gKiBAY3RybDog ICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3YXJlLgotICogQGlu dHM6ICAgICAgICAgIExpc3Qgb2YgaW50ZXJydXB0cyB0byBiZSBlbmFibGVkLgotICoKLSAqIEVu YWJsZXMgdGhlIHNwZWNpZmllZCBpbnRlcnJ1cHRzLiBUaGlzIGxpc3Qgd2lsbCBvdmVycmlkZSB0 aGUKLSAqIHByZXZpb3VzIGludGVycnVwdHMgZW5hYmxlZCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24u IENhbGxlciBoYXMgdG8KLSAqIG1haW50YWluIHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJydXB0cyBl bmFibGVkLiBUbyBkaXNhYmxlIGFsbAotICogaW50ZXJydXB0cywgc2V0IGludHMgdG8gMC4KLSAq Lwotdm9pZCBkc2lfY3RybF9od19jbW5fZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHRzKAotCQlzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwsIHUzMiBpbnRzKQotewotCXUzMiByZWcgPSAwOwotCi0JLyog RG8gbm90IGNoYW5nZSB2YWx1ZSBvZiBEU0lfRVJST1JfTUFTSyBiaXQgKi8KLQlyZWcgfD0gKERT SV9SMzIoY3RybCwgRFNJX0lOVF9DVFJMKSAmIEJJVCgyNSkpOwotCWlmIChpbnRzICYgRFNJX0NN RF9NT0RFX0RNQV9ET05FKQotCQlyZWcgfD0gQklUKDEpOwotCWlmIChpbnRzICYgRFNJX0NNRF9G UkFNRV9ET05FKQotCQlyZWcgfD0gQklUKDkpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJFQU0w X0ZSQU1FX0RPTkUpCi0JCXJlZyB8PSBCSVQoMTEpOwotCWlmIChpbnRzICYgRFNJX0NNRF9TVFJF QU0xX0ZSQU1FX0RPTkUpCi0JCXJlZyB8PSBCSVQoMTMpOwotCWlmIChpbnRzICYgRFNJX0NNRF9T VFJFQU0yX0ZSQU1FX0RPTkUpCi0JCXJlZyB8PSBCSVQoMTUpOwotCWlmIChpbnRzICYgRFNJX1ZJ REVPX01PREVfRlJBTUVfRE9ORSkKLQkJcmVnIHw9IEJJVCgxNyk7Ci0JaWYgKGludHMgJiBEU0lf QlRBX0RPTkUpCi0JCXJlZyB8PSBCSVQoMjEpOwotCWlmIChpbnRzICYgRFNJX0RZTl9SRUZSRVNI X0RPTkUpCi0JCXJlZyB8PSBCSVQoMjkpOwotCWlmIChpbnRzICYgRFNJX0RFU0tFV19ET05FKQot CQlyZWcgfD0gQklUKDMxKTsKLQotCURTSV9XMzIoY3RybCwgRFNJX0lOVF9DVFJMLCByZWcpOwot Ci0JcHJfZGVidWcoIltEU0lfJWRdIEVuYWJsZSBpbnRlcnJ1cHRzIDB4JXgsIElOVF9DVFJMPTB4 JXhcbiIsCi0JCSBjdHJsLT5pbmRleCwgaW50cywgcmVnKTsKLX0KLQotLyoqCi0gKiBnZXRfZXJy b3Jfc3RhdHVzKCkgLSByZXR1cm5zIHRoZSBlcnJvciBzdGF0dXMKLSAqIEBjdHJsOiAgICAgICAg ICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKgotICogUmV0dXJu cyB0aGUgT1JlZCBsaXN0IG9mIGVycm9ycyhlbnVtIGRzaV9lcnJvcl9pbnRfdHlwZSkgdGhhdCBh cmUKLSAqIGFjdGl2ZS4gVGhpcyBsaXN0IGRvZXMgbm90IGluY2x1ZGUgYW55IHN0YXR1cyBpbnRl cnJ1cHRzLiBDYWxsZXIKLSAqIHNob3VsZCBjYWxsIGdldF9pbnRlcnJ1cHRfc3RhdHVzIGZvciBz dGF0dXMgaW50ZXJydXB0cy4KLSAqCi0gKiBSZXR1cm46IExpc3Qgb2YgYWN0aXZlIGVycm9yIGlu dGVycnVwdHMuCi0gKi8KLXU2NCBkc2lfY3RybF9od19jbW5fZ2V0X2Vycm9yX3N0YXR1cyhzdHJ1 Y3QgZHNpX2N0cmxfaHcgKmN0cmwpCi17Ci0JdTMyIGRsbjBfcGh5X2VycjsKLQl1MzIgZmlmb19z dGF0dXM7Ci0JdTMyIGFja19lcnJvcjsKLQl1MzIgdGltZW91dF9lcnJvcnM7Ci0JdTMyIGNsa19l cnJvcjsKLQl1MzIgZHNpX3N0YXR1czsKLQl1NjQgZXJyb3JzID0gMDsKLQotCWRsbjBfcGh5X2Vy ciA9IERTSV9SMzIoY3RybCwgRFNJX0RMTjBfUEhZX0VSUik7Ci0JaWYgKGRsbjBfcGh5X2VyciAm IEJJVCgwKSkKLQkJZXJyb3JzIHw9IERTSV9ETE4wX0VTQ19FTlRSWV9FUlI7Ci0JaWYgKGRsbjBf cGh5X2VyciAmIEJJVCg0KSkKLQkJZXJyb3JzIHw9IERTSV9ETE4wX0VTQ19TWU5DX0VSUjsKLQlp ZiAoZGxuMF9waHlfZXJyICYgQklUKDgpKQotCQllcnJvcnMgfD0gRFNJX0RMTjBfTFBfQ09OVFJP TF9FUlI7Ci0JaWYgKGRsbjBfcGh5X2VyciAmIEJJVCgxMikpCi0JCWVycm9ycyB8PSBEU0lfRExO MF9MUDBfQ09OVEVOVElPTjsKLQlpZiAoZGxuMF9waHlfZXJyICYgQklUKDE2KSkKLQkJZXJyb3Jz IHw9IERTSV9ETE4wX0xQMV9DT05URU5USU9OOwotCi0JZmlmb19zdGF0dXMgPSBEU0lfUjMyKGN0 cmwsIERTSV9GSUZPX1NUQVRVUyk7Ci0JaWYgKGZpZm9fc3RhdHVzICYgQklUKDcpKQotCQllcnJv cnMgfD0gRFNJX0NNRF9NRFBfRklGT19VTkRFUkZMT1c7Ci0JaWYgKGZpZm9fc3RhdHVzICYgQklU KDEwKSkKLQkJZXJyb3JzIHw9IERTSV9DTURfRE1BX0ZJRk9fVU5ERVJGTE9XOwotCWlmIChmaWZv X3N0YXR1cyAmIEJJVCgxOCkpCi0JCWVycm9ycyB8PSBEU0lfRExOMF9IU19GSUZPX09WRVJGTE9X OwotCWlmIChmaWZvX3N0YXR1cyAmIEJJVCgxOSkpCi0JCWVycm9ycyB8PSBEU0lfRExOMF9IU19G SUZPX1VOREVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoMjIpKQotCQllcnJvcnMgfD0g RFNJX0RMTjFfSFNfRklGT19PVkVSRkxPVzsKLQlpZiAoZmlmb19zdGF0dXMgJiBCSVQoMjMpKQot CQllcnJvcnMgfD0gRFNJX0RMTjFfSFNfRklGT19VTkRFUkZMT1c7Ci0JaWYgKGZpZm9fc3RhdHVz ICYgQklUKDI2KSkKLQkJZXJyb3JzIHw9IERTSV9ETE4yX0hTX0ZJRk9fT1ZFUkZMT1c7Ci0JaWYg KGZpZm9fc3RhdHVzICYgQklUKDI3KSkKLQkJZXJyb3JzIHw9IERTSV9ETE4yX0hTX0ZJRk9fVU5E RVJGTE9XOwotCWlmIChmaWZvX3N0YXR1cyAmIEJJVCgzMCkpCi0JCWVycm9ycyB8PSBEU0lfRExO M19IU19GSUZPX09WRVJGTE9XOwotCWlmIChmaWZvX3N0YXR1cyAmIEJJVCgzMSkpCi0JCWVycm9y cyB8PSBEU0lfRExOM19IU19GSUZPX1VOREVSRkxPVzsKLQotCWFja19lcnJvciA9IERTSV9SMzIo Y3RybCwgRFNJX0FDS19FUlJfU1RBVFVTKTsKLQlpZiAoYWNrX2Vycm9yICYgQklUKDE2KSkKLQkJ ZXJyb3JzIHw9IERTSV9SREJLX1NJTkdMRV9FQ0NfRVJSOwotCWlmIChhY2tfZXJyb3IgJiBCSVQo MTcpKQotCQllcnJvcnMgfD0gRFNJX1JEQktfTVVMVElfRUNDX0VSUjsKLQlpZiAoYWNrX2Vycm9y ICYgQklUKDIwKSkKLQkJZXJyb3JzIHw9IERTSV9SREJLX0NSQ19FUlI7Ci0JaWYgKGFja19lcnJv ciAmIEJJVCgyMykpCi0JCWVycm9ycyB8PSBEU0lfUkRCS19JTkNPTVBMRVRFX1BLVDsKLQlpZiAo YWNrX2Vycm9yICYgQklUKDI0KSkKLQkJZXJyb3JzIHw9IERTSV9QRVJJUEhfRVJST1JfUEtUOwot Ci0JdGltZW91dF9lcnJvcnMgPSBEU0lfUjMyKGN0cmwsIERTSV9USU1FT1VUX1NUQVRVUyk7Ci0J aWYgKHRpbWVvdXRfZXJyb3JzICYgQklUKDApKQotCQllcnJvcnMgfD0gRFNJX0hTX1RYX1RJTUVP VVQ7Ci0JaWYgKHRpbWVvdXRfZXJyb3JzICYgQklUKDQpKQotCQllcnJvcnMgfD0gRFNJX0xQX1JY X1RJTUVPVVQ7Ci0JaWYgKHRpbWVvdXRfZXJyb3JzICYgQklUKDgpKQotCQllcnJvcnMgfD0gRFNJ X0JUQV9USU1FT1VUOwotCi0JY2xrX2Vycm9yID0gRFNJX1IzMihjdHJsLCBEU0lfQ0xLX1NUQVRV Uyk7Ci0JaWYgKGNsa19lcnJvciAmIEJJVCgxNikpCi0JCWVycm9ycyB8PSBEU0lfUExMX1VOTE9D SzsKLQotCWRzaV9zdGF0dXMgPSBEU0lfUjMyKGN0cmwsIERTSV9TVEFUVVMpOwotCWlmIChkc2lf c3RhdHVzICYgQklUKDMxKSkKLQkJZXJyb3JzIHw9IERTSV9JTlRFUkxFQVZFX09QX0NPTlRFTlRJ T047Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gRXJyb3Igc3RhdHVzID0gMHglbGx4LCBwaHk9MHgl eCwgZmlmbz0weCV4IiwKLQkJIGN0cmwtPmluZGV4LCBlcnJvcnMsIGRsbjBfcGh5X2VyciwgZmlm b19zdGF0dXMpOwotCXByX2RlYnVnKCJbRFNJXyVkXSBhY2s9MHgleCwgdGltZW91dD0weCV4LCBj bGs9MHgleCwgZHNpPTB4JXhcbiIsCi0JCSBjdHJsLT5pbmRleCwgYWNrX2Vycm9yLCB0aW1lb3V0 X2Vycm9ycywgY2xrX2Vycm9yLCBkc2lfc3RhdHVzKTsKLQlyZXR1cm4gZXJyb3JzOwotfQotCi0v KioKLSAqIGNsZWFyX2Vycm9yX3N0YXR1cygpIC0gY2xlYXJzIHRoZSBzcGVjaWZpZWQgZXJyb3Jz Ci0gKiBAY3RybDogICAgICAgICAgUG9pbnRlciB0byB0aGUgY29udHJvbGxlciBob3N0IGhhcmR3 YXJlLgotICogQGVycm9yczogICAgICAgICAgTGlzdCBvZiBlcnJvcnMgdG8gYmUgY2xlYXJlZC4K LSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fY2xlYXJfZXJyb3Jfc3RhdHVzKHN0cnVjdCBkc2lf Y3RybF9odyAqY3RybCwgdTY0IGVycm9ycykKLXsKLQl1MzIgZGxuMF9waHlfZXJyID0gMDsKLQl1 MzIgZmlmb19zdGF0dXMgPSAwOwotCXUzMiBhY2tfZXJyb3IgPSAwOwotCXUzMiB0aW1lb3V0X2Vy cm9yID0gMDsKLQl1MzIgY2xrX2Vycm9yID0gMDsKLQl1MzIgZHNpX3N0YXR1cyA9IDA7Ci0JdTMy IGludF9jdHJsID0gMDsKLQotCWlmIChlcnJvcnMgJiBEU0lfUkRCS19TSU5HTEVfRUNDX0VSUikK LQkJYWNrX2Vycm9yIHw9IEJJVCgxNik7Ci0JaWYgKGVycm9ycyAmIERTSV9SREJLX01VTFRJX0VD Q19FUlIpCi0JCWFja19lcnJvciB8PSBCSVQoMTcpOwotCWlmIChlcnJvcnMgJiBEU0lfUkRCS19D UkNfRVJSKQotCQlhY2tfZXJyb3IgfD0gQklUKDIwKTsKLQlpZiAoZXJyb3JzICYgRFNJX1JEQktf SU5DT01QTEVURV9QS1QpCi0JCWFja19lcnJvciB8PSBCSVQoMjMpOwotCWlmIChlcnJvcnMgJiBE U0lfUEVSSVBIX0VSUk9SX1BLVCkKLQkJYWNrX2Vycm9yIHw9IEJJVCgyNCk7Ci0KLQlpZiAoZXJy b3JzICYgRFNJX0xQX1JYX1RJTUVPVVQpCi0JCXRpbWVvdXRfZXJyb3IgfD0gQklUKDQpOwotCWlm IChlcnJvcnMgJiBEU0lfSFNfVFhfVElNRU9VVCkKLQkJdGltZW91dF9lcnJvciB8PSBCSVQoMCk7 Ci0JaWYgKGVycm9ycyAmIERTSV9CVEFfVElNRU9VVCkKLQkJdGltZW91dF9lcnJvciB8PSBCSVQo OCk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJX1BMTF9VTkxPQ0spCi0JCWNsa19lcnJvciB8PSBCSVQo MTYpOwotCi0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0xQMF9DT05URU5USU9OKQotCQlkbG4wX3Bo eV9lcnIgfD0gQklUKDEyKTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfTFAxX0NPTlRFTlRJT04p Ci0JCWRsbjBfcGh5X2VyciB8PSBCSVQoMTYpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9FU0Nf RU5UUllfRVJSKQotCQlkbG4wX3BoeV9lcnIgfD0gQklUKDApOwotCWlmIChlcnJvcnMgJiBEU0lf RExOMF9FU0NfU1lOQ19FUlIpCi0JCWRsbjBfcGh5X2VyciB8PSBCSVQoNCk7Ci0JaWYgKGVycm9y cyAmIERTSV9ETE4wX0xQX0NPTlRST0xfRVJSKQotCQlkbG4wX3BoeV9lcnIgfD0gQklUKDgpOwot Ci0JaWYgKGVycm9ycyAmIERTSV9DTURfRE1BX0ZJRk9fVU5ERVJGTE9XKQotCQlmaWZvX3N0YXR1 cyB8PSBCSVQoMTApOwotCWlmIChlcnJvcnMgJiBEU0lfQ01EX01EUF9GSUZPX1VOREVSRkxPVykK LQkJZmlmb19zdGF0dXMgfD0gQklUKDcpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9IU19GSUZP X09WRVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQoMTgpOwotCWlmIChlcnJvcnMgJiBEU0lf RExOMV9IU19GSUZPX09WRVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQoMjIpOwotCWlmIChl cnJvcnMgJiBEU0lfRExOMl9IU19GSUZPX09WRVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQo MjYpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOM19IU19GSUZPX09WRVJGTE9XKQotCQlmaWZvX3N0 YXR1cyB8PSBCSVQoMzApOwotCWlmIChlcnJvcnMgJiBEU0lfRExOMF9IU19GSUZPX1VOREVSRkxP VykKLQkJZmlmb19zdGF0dXMgfD0gQklUKDE5KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjFfSFNf RklGT19VTkRFUkZMT1cpCi0JCWZpZm9fc3RhdHVzIHw9IEJJVCgyMyk7Ci0JaWYgKGVycm9ycyAm IERTSV9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlmaWZvX3N0YXR1cyB8PSBCSVQoMjcpOwot CWlmIChlcnJvcnMgJiBEU0lfRExOM19IU19GSUZPX1VOREVSRkxPVykKLQkJZmlmb19zdGF0dXMg fD0gQklUKDMxKTsKLQotCWlmIChlcnJvcnMgJiBEU0lfSU5URVJMRUFWRV9PUF9DT05URU5USU9O KQotCQlkc2lfc3RhdHVzIHw9IEJJVCgzMSk7Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9ETE4wX1BI WV9FUlIsIGRsbjBfcGh5X2Vycik7Ci0JRFNJX1czMihjdHJsLCBEU0lfRklGT19TVEFUVVMsIGZp Zm9fc3RhdHVzKTsKLQlEU0lfVzMyKGN0cmwsIERTSV9BQ0tfRVJSX1NUQVRVUywgYWNrX2Vycm9y KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9USU1FT1VUX1NUQVRVUywgdGltZW91dF9lcnJvcik7Ci0J RFNJX1czMihjdHJsLCBEU0lfQ0xLX1NUQVRVUywgY2xrX2Vycm9yKTsKLQlEU0lfVzMyKGN0cmws IERTSV9TVEFUVVMsIGRzaV9zdGF0dXMpOwotCi0JaW50X2N0cmwgPSBEU0lfUjMyKGN0cmwsIERT SV9JTlRfQ1RSTCk7Ci0JaW50X2N0cmwgfD0gQklUKDI0KTsKLQlEU0lfVzMyKGN0cmwsIERTSV9J TlRfQ1RSTCwgaW50X2N0cmwpOwotCXByX2RlYnVnKCJbRFNJXyVkXSBjbGVhciBlcnJvcnMgPSAw eCVsbHgsIHBoeT0weCV4LCBmaWZvPTB4JXgiLAotCQkgY3RybC0+aW5kZXgsIGVycm9ycywgZGxu MF9waHlfZXJyLCBmaWZvX3N0YXR1cyk7Ci0JcHJfZGVidWcoIltEU0lfJWRdIGFjaz0weCV4LCB0 aW1lb3V0PTB4JXgsIGNsaz0weCV4LCBkc2k9MHgleFxuIiwKLQkJIGN0cmwtPmluZGV4LCBhY2tf ZXJyb3IsIHRpbWVvdXRfZXJyb3IsIGNsa19lcnJvciwgZHNpX3N0YXR1cyk7Ci19Ci0KLS8qKgot ICogZW5hYmxlX2Vycm9yX2ludGVycnVwdHMoKSAtIGVuYWJsZSB0aGUgc3BlY2lmaWVkIGludGVy cnVwdHMKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0gKiBAZXJyb3JzOiAgICAgICAgTGlzdCBvZiBlcnJvcnMgdG8gYmUgZW5hYmxl ZC4KLSAqCi0gKiBFbmFibGVzIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4gVGhpcyBsaXN0IHdp bGwgb3ZlcnJpZGUgdGhlCi0gKiBwcmV2aW91cyBpbnRlcnJ1cHRzIGVuYWJsZWQgdGhyb3VnaCB0 aGlzIGZ1bmN0aW9uLiBDYWxsZXIgaGFzIHRvCi0gKiBtYWludGFpbiB0aGUgc3RhdGUgb2YgdGhl IGludGVycnVwdHMgZW5hYmxlZC4gVG8gZGlzYWJsZSBhbGwKLSAqIGludGVycnVwdHMsIHNldCBl cnJvcnMgdG8gMC4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fZW5hYmxlX2Vycm9yX2ludGVy cnVwdHMoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgICAgdTY0IGVycm9ycykKLXsK LQl1MzIgaW50X2N0cmwgPSAwOwotCXUzMiBpbnRfbWFzazAgPSAweDdGRkYzQkZGOwotCi0JaW50 X2N0cmwgPSBEU0lfUjMyKGN0cmwsIERTSV9JTlRfQ1RSTCk7Ci0JaWYgKGVycm9ycykKLQkJaW50 X2N0cmwgfD0gQklUKDI1KTsKLQllbHNlCi0JCWludF9jdHJsICY9IH5CSVQoMjUpOwotCi0JaWYg KGVycm9ycyAmIERTSV9SREJLX1NJTkdMRV9FQ0NfRVJSKQotCQlpbnRfbWFzazAgJj0gfkJJVCgw KTsKLQlpZiAoZXJyb3JzICYgRFNJX1JEQktfTVVMVElfRUNDX0VSUikKLQkJaW50X21hc2swICY9 IH5CSVQoMSk7Ci0JaWYgKGVycm9ycyAmIERTSV9SREJLX0NSQ19FUlIpCi0JCWludF9tYXNrMCAm PSB+QklUKDIpOwotCWlmIChlcnJvcnMgJiBEU0lfUkRCS19JTkNPTVBMRVRFX1BLVCkKLQkJaW50 X21hc2swICY9IH5CSVQoMyk7Ci0JaWYgKGVycm9ycyAmIERTSV9QRVJJUEhfRVJST1JfUEtUKQot CQlpbnRfbWFzazAgJj0gfkJJVCg0KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfTFBfUlhfVElNRU9V VCkKLQkJaW50X21hc2swICY9IH5CSVQoNSk7Ci0JaWYgKGVycm9ycyAmIERTSV9IU19UWF9USU1F T1VUKQotCQlpbnRfbWFzazAgJj0gfkJJVCg2KTsKLQlpZiAoZXJyb3JzICYgRFNJX0JUQV9USU1F T1VUKQotCQlpbnRfbWFzazAgJj0gfkJJVCg3KTsKLQotCWlmIChlcnJvcnMgJiBEU0lfUExMX1VO TE9DSykKLQkJaW50X21hc2swICY9IH5CSVQoMjgpOwotCi0JaWYgKGVycm9ycyAmIERTSV9ETE4w X0xQMF9DT05URU5USU9OKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyNCk7Ci0JaWYgKGVycm9ycyAm IERTSV9ETE4wX0xQMV9DT05URU5USU9OKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyNSk7Ci0JaWYg KGVycm9ycyAmIERTSV9ETE4wX0VTQ19FTlRSWV9FUlIpCi0JCWludF9tYXNrMCAmPSB+QklUKDIx KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjBfRVNDX1NZTkNfRVJSKQotCQlpbnRfbWFzazAgJj0g fkJJVCgyMik7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0xQX0NPTlRST0xfRVJSKQotCQlpbnRf bWFzazAgJj0gfkJJVCgyMyk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJX0NNRF9ETUFfRklGT19VTkRF UkZMT1cpCi0JCWludF9tYXNrMCAmPSB+QklUKDkpOwotCWlmIChlcnJvcnMgJiBEU0lfQ01EX01E UF9GSUZPX1VOREVSRkxPVykKLQkJaW50X21hc2swICY9IH5CSVQoMTEpOwotCWlmIChlcnJvcnMg JiBEU0lfRExOMF9IU19GSUZPX09WRVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgxNik7Ci0J aWYgKGVycm9ycyAmIERTSV9ETE4xX0hTX0ZJRk9fT1ZFUkZMT1cpCi0JCWludF9tYXNrMCAmPSB+ QklUKDE3KTsKLQlpZiAoZXJyb3JzICYgRFNJX0RMTjJfSFNfRklGT19PVkVSRkxPVykKLQkJaW50 X21hc2swICY9IH5CSVQoMTgpOwotCWlmIChlcnJvcnMgJiBEU0lfRExOM19IU19GSUZPX09WRVJG TE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgxOSk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4wX0hT X0ZJRk9fVU5ERVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyNik7Ci0JaWYgKGVycm9ycyAm IERTSV9ETE4xX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlpbnRfbWFzazAgJj0gfkJJVCgyNyk7Ci0J aWYgKGVycm9ycyAmIERTSV9ETE4yX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlpbnRfbWFzazAgJj0g fkJJVCgyOSk7Ci0JaWYgKGVycm9ycyAmIERTSV9ETE4zX0hTX0ZJRk9fVU5ERVJGTE9XKQotCQlp bnRfbWFzazAgJj0gfkJJVCgzMCk7Ci0KLQlpZiAoZXJyb3JzICYgRFNJX0lOVEVSTEVBVkVfT1Bf Q09OVEVOVElPTikKLQkJaW50X21hc2swICY9IH5CSVQoOCk7Ci0KLQlEU0lfVzMyKGN0cmwsIERT SV9JTlRfQ1RSTCwgaW50X2N0cmwpOwotCURTSV9XMzIoY3RybCwgRFNJX0VSUl9JTlRfTUFTSzAs IGludF9tYXNrMCk7Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gZW5hYmxlIGVycm9ycyA9IDB4JWxs eCwgaW50X21hc2swPTB4JXhcbiIsCi0JCSBjdHJsLT5pbmRleCwgZXJyb3JzLCBpbnRfbWFzazAp OwotfQotCi0vKioKLSAqIHZpZGVvX3Rlc3RfcGF0dGVybl9zZXR1cCgpIC0gc2V0dXAgdGVzdCBw YXR0ZXJuIGVuZ2luZSBmb3IgdmlkZW8gbW9kZQotICogQGN0cmw6ICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIGNvbnRyb2xsZXIgaG9zdCBoYXJkd2FyZS4KLSAqIEB0eXBlOiAgICAgICAgICBUeXBl IG9mIHRlc3QgcGF0dGVybi4KLSAqIEBpbml0X3ZhbDogICAgICBJbml0aWFsIHZhbHVlIHRvIHVz ZSBmb3IgZ2VuZXJhdGluZyB0ZXN0IHBhdHRlcm4uCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21u X3ZpZGVvX3Rlc3RfcGF0dGVybl9zZXR1cChzdHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJ CSAgICAgZW51bSBkc2lfdGVzdF9wYXR0ZXJuIHR5cGUsCi0JCQkJCSAgICAgdTMyIGluaXRfdmFs KQotewotCXUzMiByZWcgPSAwOwotCi0JRFNJX1czMihjdHJsLCBEU0lfVEVTVF9QQVRURVJOX0dF Tl9WSURFT19JTklUX1ZBTCwgaW5pdF92YWwpOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBE U0lfVEVTVF9QQVRURVJOX0ZJWEVEOgotCQlyZWcgfD0gKDB4MiA8PCA0KTsKLQkJYnJlYWs7Ci0J Y2FzZSBEU0lfVEVTVF9QQVRURVJOX0lOQzoKLQkJcmVnIHw9ICgweDEgPDwgNCk7Ci0JCWJyZWFr OwotCWNhc2UgRFNJX1RFU1RfUEFUVEVSTl9QT0xZOgotCQlEU0lfVzMyKGN0cmwsIERTSV9URVNU X1BBVFRFUk5fR0VOX1ZJREVPX1BPTFksIDB4RjBGMEYpOwotCQlicmVhazsKLQlkZWZhdWx0Ogot CQlicmVhazsKLQl9Ci0KLQlEU0lfVzMyKGN0cmwsIERTSV9UUEdfTUFJTl9DT05UUk9MLCAweDEw MCk7Ci0JRFNJX1czMihjdHJsLCBEU0lfVFBHX1ZJREVPX0NPTkZJRywgMHg1KTsKLQlEU0lfVzMy KGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NUUkwsIHJlZyk7Ci0KLQlwcl9kZWJ1ZygiW0RT SV8lZF0gVmlkZW8gdGVzdCBwYXR0ZXJuIHNldHVwIGRvbmVcbiIsIGN0cmwtPmluZGV4KTsKLX0K LQotLyoqCi0gKiBjbWRfdGVzdF9wYXR0ZXJuX3NldHVwKCkgLSBzZXR1cCB0ZXN0IHBhdHR0ZXJu IGVuZ2luZSBmb3IgY21kIG1vZGUKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBj b250cm9sbGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAdHlwZTogICAgICAgICAgVHlwZSBvZiB0ZXN0 IHBhdHRlcm4uCi0gKiBAaW5pdF92YWw6ICAgICAgSW5pdGlhbCB2YWx1ZSB0byB1c2UgZm9yIGdl bmVyYXRpbmcgdGVzdCBwYXR0ZXJuLgotICogQHN0cmVhbV9pZDogICAgIFN0cmVhbSBJZCBvbiB3 aGljaCBwYWNrZXRzIGFyZSBnZW5lcmF0ZWQuCi0gKi8KLXZvaWQgZHNpX2N0cmxfaHdfY21uX2Nt ZF90ZXN0X3BhdHRlcm5fc2V0dXAoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgICBl bnVtIGRzaV90ZXN0X3BhdHRlcm4gdHlwZSwKLQkJCQkJICAgdTMyIGluaXRfdmFsLAotCQkJCQkg ICB1MzIgc3RyZWFtX2lkKQotewotCXUzMiByZWcgPSAwOwotCXUzMiBpbml0X29mZnNldDsKLQl1 MzIgcG9seV9vZmZzZXQ7Ci0JdTMyIHBhdHRlcm5fc2VsX3NoaWZ0OwotCi0Jc3dpdGNoIChzdHJl YW1faWQpIHsKLQljYXNlIDA6Ci0JCWluaXRfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5f Q01EX01EUF9JTklUX1ZBTDA7Ci0JCXBvbHlfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5f Q01EX01EUF9TVFJFQU0wX1BPTFk7Ci0JCXBhdHRlcm5fc2VsX3NoaWZ0ID0gODsKLQkJYnJlYWs7 Ci0JY2FzZSAxOgotCQlpbml0X29mZnNldCA9IERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBf SU5JVF9WQUwxOwotCQlwb2x5X29mZnNldCA9IERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBf U1RSRUFNMV9QT0xZOwotCQlwYXR0ZXJuX3NlbF9zaGlmdCA9IDEyOwotCQlicmVhazsKLQljYXNl IDI6Ci0JCWluaXRfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9JTklUX1ZB TDI7Ci0JCXBvbHlfb2Zmc2V0ID0gRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0y X1BPTFk7Ci0JCXBhdHRlcm5fc2VsX3NoaWZ0ID0gMjA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CXJldHVybjsKLQl9Ci0KLQlEU0lfVzMyKGN0cmwsIGluaXRfb2Zmc2V0LCBpbml0X3ZhbCk7Ci0K LQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIERTSV9URVNUX1BBVFRFUk5fRklYRUQ6Ci0JCXJlZyB8 PSAoMHgyIDw8IHBhdHRlcm5fc2VsX3NoaWZ0KTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfVEVTVF9Q QVRURVJOX0lOQzoKLQkJcmVnIHw9ICgweDEgPDwgcGF0dGVybl9zZWxfc2hpZnQpOwotCQlicmVh azsKLQljYXNlIERTSV9URVNUX1BBVFRFUk5fUE9MWToKLQkJRFNJX1czMihjdHJsLCBwb2x5X29m ZnNldCwgMHhGMEYwRik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCURT SV9XMzIoY3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ1RSTCwgcmVnKTsKLQlwcl9kZWJ1Zygi W0RTSV8lZF0gQ21kIHRlc3QgcGF0dGVybiBzZXR1cCBkb25lXG4iLCBjdHJsLT5pbmRleCk7Ci19 Ci0KLS8qKgotICogdGVzdF9wYXR0ZXJuX2VuYWJsZSgpIC0gZW5hYmxlIHRlc3QgcGF0dGVybiBl bmdpbmUKLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9sbGVyIGhvc3Qg aGFyZHdhcmUuCi0gKiBAZW5hYmxlOiAgICAgICAgRW5hYmxlL0Rpc2FibGUgdGVzdCBwYXR0ZXJu IGVuZ2luZS4KLSAqLwotdm9pZCBkc2lfY3RybF9od19jbW5fdGVzdF9wYXR0ZXJuX2VuYWJsZShz dHJ1Y3QgZHNpX2N0cmxfaHcgKmN0cmwsCi0JCQkJCWJvb2wgZW5hYmxlKQotewotCXUzMiByZWcg PSBEU0lfUjMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NUUkwpOwotCi0JaWYgKGVuYWJs ZSkKLQkJcmVnIHw9IEJJVCgwKTsKLQllbHNlCi0JCXJlZyAmPSB+QklUKDApOwotCi0JRFNJX1cz MihjdHJsLCBEU0lfVEVTVF9QQVRURVJOX0dFTl9DVFJMLCByZWcpOwotCi0JcHJfZGVidWcoIltE U0lfJWRdIFRlc3QgcGF0dGVybiBlbmFibGU9JWRcbiIsIGN0cmwtPmluZGV4LCBlbmFibGUpOwot fQotCi0vKioKLSAqIHRyaWdnZXJfY21kX3Rlc3RfcGF0dGVybigpIC0gdHJpZ2dlciBhIGNvbW1h bmQgbW9kZSBmcmFtZSB1cGRhdGUgd2l0aAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0ZXN0IHBhdHRlcm4KLSAqIEBjdHJsOiAgICAgICAgICBQb2ludGVyIHRvIHRoZSBjb250cm9s bGVyIGhvc3QgaGFyZHdhcmUuCi0gKiBAc3RyZWFtX2lkOiAgICAgU3RyZWFtIG9uIHdoaWNoIGZy YW1lIHVwZGF0ZSBpcyBzZW50LgotICovCi12b2lkIGRzaV9jdHJsX2h3X2Ntbl90cmlnZ2VyX2Nt ZF90ZXN0X3BhdHRlcm4oc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQkJCQkgICAgIHUzMiBz dHJlYW1faWQpCi17Ci0Jc3dpdGNoIChzdHJlYW1faWQpIHsKLQljYXNlIDA6Ci0JCURTSV9XMzIo Y3RybCwgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX1NUUkVBTTBfVFJJR0dFUiwgMHgxKTsKLQkJ YnJlYWs7Ci0JY2FzZSAxOgotCQlEU0lfVzMyKGN0cmwsIERTSV9URVNUX1BBVFRFUk5fR0VOX0NN RF9TVFJFQU0xX1RSSUdHRVIsIDB4MSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJRFNJX1czMihj dHJsLCBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfU1RSRUFNMl9UUklHR0VSLCAweDEpOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlwcl9kZWJ1ZygiW0RTSV8lZF0gQ21k IFRlc3QgcGF0dGVybiB0cmlnZ2VyXG4iLCBjdHJsLT5pbmRleCk7Ci19Ci0KLXZvaWQgZHNpX2N0 cmxfaHdfZGxuMF9waHlfZXJyKHN0cnVjdCBkc2lfY3RybF9odyAqY3RybCkKLXsKLQl1MzIgc3Rh dHVzID0gMDsKLQkvKgotCSAqIENsZWFyIG91dCBhbnkgcGh5IGVycm9ycyBwcmlvciB0byBleGl0 aW5nIFVMUFMKLQkgKiBUaGlzIGZpeGVzIGNlcnRhaW4gaW5zdGFuY2VzIHdoZXJlIHBoeSBkb2Vz IG5vdCBleGl0Ci0JICogVUxQUyBjbGVhbmx5LiBBbHNvLCBkbyBub3QgcHJpbnQgZXJyb3IgZHVy aW5nIHN1Y2ggY2FzZXMuCi0JICovCi0Jc3RhdHVzID0gRFNJX1IzMihjdHJsLCBEU0lfRExOMF9Q SFlfRVJSKTsKLQlpZiAoc3RhdHVzICYgMHgwMTExMTEpIHsKLQkJRFNJX1czMihjdHJsLCBEU0lf RExOMF9QSFlfRVJSLCBzdGF0dXMpOwotCQlwcl9lcnIoIiVzOiBwaHlfZXJyX3N0YXR1cyA9ICV4 XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQl9Ci19Ci0KLXZvaWQgZHNpX2N0cmxfaHdfY21uX3Bo eV9yZXNldF9jb25maWcoc3RydWN0IGRzaV9jdHJsX2h3ICpjdHJsLAotCQlib29sIGVuYWJsZSkK LXsKLQl1MzIgcmVnID0gMDsKLQotCXJlZyA9IERTSV9NTVNTX01JU0NfUjMyKGN0cmwsIE1NU1Nf TUlTQ19DTEFNUF9SRUdfT0ZGKTsKLQotCS8qIE1hc2svdW5tYXNrIGRpc2FibGUgUEhZIHJlc2V0 IGJpdCAqLwotCWlmIChlbmFibGUpCi0JCXJlZyB8PSBCSVQoMzApOwotCWVsc2UKLQkJcmVnICY9 IH5CSVQoMzApOwotCi0JRFNJX01NU1NfTUlTQ19XMzIoY3RybCwgTU1TU19NSVNDX0NMQU1QX1JF R19PRkYsIHJlZyk7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2N0cmxfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2Rz aV9jdHJsX3JlZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTRkNTc1MC4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9jdHJsX3JlZy5o CisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRFNJX0NUUkxfUkVHX0hfCi0jZGVmaW5lIF9EU0lf Q1RSTF9SRUdfSF8KLQotI2RlZmluZSBEU0lfSFdfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKDB4MDAwMCkKLSNkZWZpbmUgRFNJX0NUUkwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDAwMDQpCi0jZGVmaW5lIERTSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMDA4KQotI2RlZmluZSBEU0lfRklGT19TVEFUVVMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDAwQykKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVfQ1RS TCAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMTApCi0jZGVmaW5lIERTSV9WSURFT19NT0RF X1NZTkNfREFUQVRZUEUgICAgICAgICAgICAgICAoMHgwMDE0KQotI2RlZmluZSBEU0lfVklERU9f TU9ERV9QSVhFTF9EQVRBVFlQRSAgICAgICAgICAgICAgKDB4MDAxOCkKLSNkZWZpbmUgRFNJX1ZJ REVPX01PREVfQkxBTktJTkdfREFUQVRZUEUgICAgICAgICAgICgweDAwMUMpCi0jZGVmaW5lIERT SV9WSURFT19NT0RFX0RBVEFfQ1RSTCAgICAgICAgICAgICAgICAgICAoMHgwMDIwKQotI2RlZmlu ZSBEU0lfVklERU9fTU9ERV9BQ1RJVkVfSCAgICAgICAgICAgICAgICAgICAgKDB4MDAyNCkKLSNk ZWZpbmUgRFNJX1ZJREVPX01PREVfQUNUSVZFX1YgICAgICAgICAgICAgICAgICAgICgweDAwMjgp Ci0jZGVmaW5lIERTSV9WSURFT19NT0RFX1RPVEFMICAgICAgICAgICAgICAgICAgICAgICAoMHgw MDJDKQotI2RlZmluZSBEU0lfVklERU9fTU9ERV9IU1lOQyAgICAgICAgICAgICAgICAgICAgICAg KDB4MDAzMCkKLSNkZWZpbmUgRFNJX1ZJREVPX01PREVfVlNZTkMgICAgICAgICAgICAgICAgICAg ICAgICgweDAwMzQpCi0jZGVmaW5lIERTSV9WSURFT19NT0RFX1ZTWU5DX1ZQT1MgICAgICAgICAg ICAgICAgICAoMHgwMDM4KQotI2RlZmluZSBEU0lfQ09NTUFORF9NT0RFX0RNQV9DVFJMICAgICAg ICAgICAgICAgICAgKDB4MDAzQykKLSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9ERV9NRFBfQ1RSTCAg ICAgICAgICAgICAgICAgICgweDAwNDApCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVfTURQX0RD U19DTURfQ1RSTCAgICAgICAgICAoMHgwMDQ0KQotI2RlZmluZSBEU0lfRE1BX0NNRF9PRkZTRVQg ICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0OCkKLSNkZWZpbmUgRFNJX0RNQV9DTURfTEVO R1RIICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwNEMpCi0jZGVmaW5lIERTSV9ETUFfRklG T19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDUwKQotI2RlZmluZSBEU0lfRE1B X05VTExfUEFDS0VUX0RBVEEgICAgICAgICAgICAgICAgICAgKDB4MDA1NCkKLSNkZWZpbmUgRFNJ X0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMF9DVFJMICAgICAgICAgICgweDAwNTgpCi0jZGVmaW5l IERTSV9DT01NQU5EX01PREVfTURQX1NUUkVBTTBfVE9UQUwgICAgICAgICAoMHgwMDVDKQotI2Rl ZmluZSBEU0lfQ09NTUFORF9NT0RFX01EUF9TVFJFQU0xX0NUUkwgICAgICAgICAgKDB4MDA2MCkK LSNkZWZpbmUgRFNJX0NPTU1BTkRfTU9ERV9NRFBfU1RSRUFNMV9UT1RBTCAgICAgICAgICgweDAw NjQpCi0jZGVmaW5lIERTSV9BQ0tfRVJSX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAo MHgwMDY4KQotI2RlZmluZSBEU0lfUkRCS19EQVRBMCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDB4MDA2QykKLSNkZWZpbmUgRFNJX1JEQktfREFUQTEgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgweDAwNzApCi0jZGVmaW5lIERTSV9SREJLX0RBVEEyICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoMHgwMDc0KQotI2RlZmluZSBEU0lfUkRCS19EQVRBMyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKDB4MDA3OCkKLSNkZWZpbmUgRFNJX1JEQktfREFUQVRZUEUwICAgICAg ICAgICAgICAgICAgICAgICAgICgweDAwN0MpCi0jZGVmaW5lIERTSV9SREJLX0RBVEFUWVBFMSAg ICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDgwKQotI2RlZmluZSBEU0lfVFJJR19DVFJMICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA4NCkKLSNkZWZpbmUgRFNJX0VYVF9NVVgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwODgpCi0jZGVmaW5lIERTSV9FWFRf TVVYX1RFX1BVTFNFX0RFVEVDVF9DVFJMICAgICAgICAgICAoMHgwMDhDKQotI2RlZmluZSBEU0lf Q01EX01PREVfRE1BX1NXX1RSSUdHRVIgICAgICAgICAgICAgICAgKDB4MDA5MCkKLSNkZWZpbmUg RFNJX0NNRF9NT0RFX01EUF9TV19UUklHR0VSICAgICAgICAgICAgICAgICgweDAwOTQpCi0jZGVm aW5lIERTSV9DTURfTU9ERV9CVEFfU1dfVFJJR0dFUiAgICAgICAgICAgICAgICAoMHgwMDk4KQot I2RlZmluZSBEU0lfUkVTRVRfU1dfVFJJR0dFUiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA5 QykKLSNkZWZpbmUgRFNJX01JU1JfQ01EX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICgw eDAwQTApCi0jZGVmaW5lIERTSV9NSVNSX1ZJREVPX0NUUkwgICAgICAgICAgICAgICAgICAgICAg ICAoMHgwMEE0KQotI2RlZmluZSBEU0lfTEFORV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKDB4MDBBOCkKLSNkZWZpbmUgRFNJX0xBTkVfQ1RSTCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgweDAwQUMpCi0jZGVmaW5lIERTSV9MQU5FX1NXQVBfQ1RSTCAgICAgICAgICAg ICAgICAgICAgICAgICAoMHgwMEIwKQotI2RlZmluZSBEU0lfRExOMF9QSFlfRVJSICAgICAgICAg ICAgICAgICAgICAgICAgICAgKDB4MDBCNCkKLSNkZWZpbmUgRFNJX0xQX1RJTUVSX0NUUkwgICAg ICAgICAgICAgICAgICAgICAgICAgICgweDAwQjgpCi0jZGVmaW5lIERTSV9IU19USU1FUl9DVFJM ICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEJDKQotI2RlZmluZSBEU0lfVElNRU9VVF9T VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBDMCkKLSNkZWZpbmUgRFNJX0NMS09V VF9USU1JTkdfQ1RSTCAgICAgICAgICAgICAgICAgICAgICgweDAwQzQpCi0jZGVmaW5lIERTSV9F T1RfUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEM4KQotI2RlZmluZSBE U0lfRU9UX1BBQ0tFVF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDBDQykKLSNkZWZp bmUgRFNJX0dFTkVSSUNfRVNDX1RYX1RSSUdHRVIgICAgICAgICAgICAgICAgICgweDAwRDApCi0j ZGVmaW5lIERTSV9DQU1fQklTVF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMEQ0 KQotI2RlZmluZSBEU0lfQ0FNX0JJU1RfRlJBTUVfU0laRSAgICAgICAgICAgICAgICAgICAgKDB4 MDBEOCkKLSNkZWZpbmUgRFNJX0NBTV9CSVNUX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAgICAg ICgweDAwREMpCi0jZGVmaW5lIERTSV9DQU1fQklTVF9GUkFNRV9DT05GSUcgICAgICAgICAgICAg ICAgICAoMHgwMEUwKQotI2RlZmluZSBEU0lfQ0FNX0JJU1RfTFNGUl9DVFJMICAgICAgICAgICAg ICAgICAgICAgKDB4MDBFNCkKLSNkZWZpbmUgRFNJX0NBTV9CSVNUX0xTRlJfSU5JVCAgICAgICAg ICAgICAgICAgICAgICgweDAwRTgpCi0jZGVmaW5lIERTSV9DQU1fQklTVF9TVEFSVCAgICAgICAg ICAgICAgICAgICAgICAgICAoMHgwMEVDKQotI2RlZmluZSBEU0lfQ0FNX0JJU1RfU1RBVFVTICAg ICAgICAgICAgICAgICAgICAgICAgKDB4MDBGMCkKLSNkZWZpbmUgRFNJX0VSUl9JTlRfTUFTSzAg ICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMEMpCi0jZGVmaW5lIERTSV9JTlRfQ1RSTCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTEwKQotI2RlZmluZSBEU0lfSU9CSVNU X0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDExNCkKLSNkZWZpbmUgRFNJX1NP RlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMTgpCi0jZGVmaW5lIERT SV9DTEtfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTFDKQotI2RlZmlu ZSBEU0lfQ0xLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDEyMCkKLSNk ZWZpbmUgRFNJX0RFQlVHX0JVU19DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMjQp Ci0jZGVmaW5lIERTSV9ERUJVR19CVVNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAoMHgw MTI4KQotI2RlZmluZSBEU0lfUEhZX1NXX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAg KDB4MDEyQykKLSNkZWZpbmUgRFNJX0FYSTJBSEJfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAg ICAgICgweDAxMzApCi0jZGVmaW5lIERTSV9NSVNSX0NNRF9NRFAwXzMyQklUICAgICAgICAgICAg ICAgICAgICAoMHgwMTM0KQotI2RlZmluZSBEU0lfTUlTUl9DTURfTURQMV8zMkJJVCAgICAgICAg ICAgICAgICAgICAgKDB4MDEzOCkKLSNkZWZpbmUgRFNJX01JU1JfQ01EX0RNQV8zMkJJVCAgICAg ICAgICAgICAgICAgICAgICgweDAxM0MpCi0jZGVmaW5lIERTSV9NSVNSX1ZJREVPXzMyQklUICAg ICAgICAgICAgICAgICAgICAgICAoMHgwMTQwKQotI2RlZmluZSBEU0lfTEFORV9NSVNSX0NUUkwg ICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDE0NCkKLSNkZWZpbmUgRFNJX0xBTkUwX01JU1Ig ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxNDgpCi0jZGVmaW5lIERTSV9MQU5FMV9N SVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMTRDKQotI2RlZmluZSBEU0lfTEFO RTJfTUlTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDE1MCkKLSNkZWZpbmUgRFNJ X0xBTkUzX01JU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxNTQpCi0jZGVmaW5l IERTSV9URVNUX1BBVFRFUk5fR0VOX0NUUkwgICAgICAgICAgICAgICAgICAoMHgwMTVDKQotI2Rl ZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9WSURFT19QT0xZICAgICAgICAgICAgKDB4MDE2MCkK LSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fVklERU9fSU5JVF9WQUwgICAgICAgICgweDAx NjQpCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfU1RSRUFNMF9QT0xZICAo MHgwMTY4KQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfTURQX0lOSVRfVkFMMCAg ICAgKDB4MDE2QykKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0x X1BPTFkgICgweDAxNzApCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VOX0NNRF9NRFBfSU5J VF9WQUwxICAgICAoMHgwMTc0KQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfRE1B X1BPTFkgICAgICAgICAgKDB4MDE3OCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01E X0RNQV9JTklUX1ZBTCAgICAgICgweDAxN0MpCi0jZGVmaW5lIERTSV9URVNUX1BBVFRFUk5fR0VO X1ZJREVPX0VOQUJMRSAgICAgICAgICAoMHgwMTgwKQotI2RlZmluZSBEU0lfVEVTVF9QQVRURVJO X0dFTl9DTURfU1RSRUFNMF9UUklHR0VSICAgKDB4MDE4NCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFU VEVSTl9HRU5fQ01EX1NUUkVBTTFfVFJJR0dFUiAgICgweDAxODgpCi0jZGVmaW5lIERTSV9URVNU X1BBVFRFUk5fR0VOX0NNRF9NRFBfSU5JVF9WQUwyICAgICAoMHgwMThDKQotI2RlZmluZSBEU0lf VEVTVF9QQVRURVJOX0dFTl9DTURfTURQX1NUUkVBTTJfUE9MWSAgKDB4MDE5MCkKLSNkZWZpbmUg RFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX01EUF9TVFJFQU0yX1BPTFkgICgweDAxOTApCi0jZGVm aW5lIERTSV9DT01NQU5EX01PREVfTURQX0lETEVfQ1RSTCAgICAgICAgICAgICAoMHgwMTk0KQot I2RlZmluZSBEU0lfVEVTVF9QQVRURVJOX0dFTl9DTURfU1RSRUFNMl9UUklHR0VSICAgKDB4MDE5 OCkKLSNkZWZpbmUgRFNJX1RQR19NQUlOX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICgw eDAxOUMpCi0jZGVmaW5lIERTSV9UUEdfTUFJTl9DT05UUk9MMiAgICAgICAgICAgICAgICAgICAg ICAoMHgwMUEwKQotI2RlZmluZSBEU0lfVFBHX1ZJREVPX0NPTkZJRyAgICAgICAgICAgICAgICAg ICAgICAgKDB4MDFBNCkKLSNkZWZpbmUgRFNJX1RQR19DT01QT05FTlRfTElNSVRTICAgICAgICAg ICAgICAgICAgICgweDAxQTgpCi0jZGVmaW5lIERTSV9UUEdfUkVDVEFOR0xFICAgICAgICAgICAg ICAgICAgICAgICAgICAoMHgwMUFDKQotI2RlZmluZSBEU0lfVFBHX0JMQUNLX1dISVRFX1BBVFRF Uk5fRlJBTUVTICAgICAgICAgKDB4MDFCMCkKLSNkZWZpbmUgRFNJX1RQR19SR0JfTUFQUElORyAg ICAgICAgICAgICAgICAgICAgICAgICgweDAxQjQpCi0jZGVmaW5lIERTSV9DT01NQU5EX01PREVf TURQX0NUUkwyICAgICAgICAgICAgICAgICAoMHgwMUI4KQotI2RlZmluZSBEU0lfQ09NTUFORF9N T0RFX01EUF9TVFJFQU0yX0NUUkwgICAgICAgICAgKDB4MDFCQykKLSNkZWZpbmUgRFNJX0NPTU1B TkRfTU9ERV9NRFBfU1RSRUFNMl9UT1RBTCAgICAgICAgICgweDAxQzApCi0jZGVmaW5lIERTSV9N SVNSX0NNRF9NRFAyXzhCSVQgICAgICAgICAgICAgICAgICAgICAoMHgwMUM0KQotI2RlZmluZSBE U0lfTUlTUl9DTURfTURQMl8zMkJJVCAgICAgICAgICAgICAgICAgICAgKDB4MDFDOCkKLSNkZWZp bmUgRFNJX1ZCSUZfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxQ0MpCi0j ZGVmaW5lIERTSV9BRVNfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMUQw KQotI2RlZmluZSBEU0lfUkRCS19EQVRBX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDFENCkKLSNkZWZpbmUgRFNJX1RFU1RfUEFUVEVSTl9HRU5fQ01EX0RNQV9JTklUX1ZBTDIgICAg ICgweDAxRDgpCi0jZGVmaW5lIERTSV9UUEdfRE1BX0ZJRk9fU1RBVFVTICAgICAgICAgICAgICAg ICAgICAoMHgwMURDKQotI2RlZmluZSBEU0lfVFBHX0RNQV9GSUZPX1dSSVRFX1RSSUdHRVIgICAg ICAgICAgICAgKDB4MDFFMCkKLSNkZWZpbmUgRFNJX0RTSV9USU1JTkdfRkxVU0ggICAgICAgICAg ICAgICAgICAgICAgICgweDAxRTQpCi0jZGVmaW5lIERTSV9EU0lfVElNSU5HX0RCX01PREUgICAg ICAgICAgICAgICAgICAgICAoMHgwMUU4KQotI2RlZmluZSBEU0lfVFBHX0RNQV9GSUZPX1JFU0VU ICAgICAgICAgICAgICAgICAgICAgKDB4MDFFQykKLSNkZWZpbmUgRFNJX1NDUkFUQ0hfUkVHSVNU RVJfMCAgICAgICAgICAgICAgICAgICAgICgweDAxRjApCi0jZGVmaW5lIERTSV9WRVJTSU9OICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMUY0KQotI2RlZmluZSBEU0lfU0NSQVRD SF9SRUdJU1RFUl8xICAgICAgICAgICAgICAgICAgICAgKDB4MDFGOCkKLSNkZWZpbmUgRFNJX1ND UkFUQ0hfUkVHSVNURVJfMiAgICAgICAgICAgICAgICAgICAgICgweDAxRkMpCi0jZGVmaW5lIERT SV9EWU5BTUlDX1JFRlJFU0hfQ1RSTCAgICAgICAgICAgICAgICAgICAoMHgwMjAwKQotI2RlZmlu ZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BJUEVfREVMQVkgICAgICAgICAgICAgKDB4MDIwNCkKLSNk ZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QSVBFX0RFTEFZMiAgICAgICAgICAgICgweDAyMDgp Ci0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0RFTEFZICAgICAgICAgICAgICAoMHgw MjBDKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1NUQVRVUyAgICAgICAgICAgICAgICAg KDB4MDIxMCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDAgICAgICAgICAg ICAgICgweDAyMTQpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxICAgICAg ICAgICAgICAoMHgwMjE4KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMiAg ICAgICAgICAgICAgKDB4MDIxQykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RS TDMgICAgICAgICAgICAgICgweDAyMjApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExM X0NUUkw0ICAgICAgICAgICAgICAoMHgwMjI0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNI X1BMTF9DVFJMNSAgICAgICAgICAgICAgKDB4MDIyOCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVG UkVTSF9QTExfQ1RSTDYgICAgICAgICAgICAgICgweDAyMkMpCi0jZGVmaW5lIERTSV9EWU5BTUlD X1JFRlJFU0hfUExMX0NUUkw3ICAgICAgICAgICAgICAoMHgwMjMwKQotI2RlZmluZSBEU0lfRFlO QU1JQ19SRUZSRVNIX1BMTF9DVFJMOCAgICAgICAgICAgICAgKDB4MDIzNCkKLSNkZWZpbmUgRFNJ X0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDkgICAgICAgICAgICAgICgweDAyMzgpCi0jZGVmaW5l IERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxMCAgICAgICAgICAgICAoMHgwMjNDKQotI2Rl ZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTEgICAgICAgICAgICAgKDB4MDI0MCkK LSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDEyICAgICAgICAgICAgICgweDAy NDQpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxMyAgICAgICAgICAgICAo MHgwMjQ4KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMTQgICAgICAgICAg ICAgKDB4MDI0QykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDE1ICAgICAg ICAgICAgICgweDAyNTApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwxNiAg ICAgICAgICAgICAoMHgwMjU0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJM MTcgICAgICAgICAgICAgKDB4MDI1OCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExf Q1RSTDE4ICAgICAgICAgICAgICgweDAyNUMpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hf UExMX0NUUkwxOSAgICAgICAgICAgICAoMHgwMjYwKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZS RVNIX1BMTF9DVFJMMjAgICAgICAgICAgICAgKDB4MDI2NCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNf UkVGUkVTSF9QTExfQ1RSTDIxICAgICAgICAgICAgICgweDAyNjgpCi0jZGVmaW5lIERTSV9EWU5B TUlDX1JFRlJFU0hfUExMX0NUUkwyMiAgICAgICAgICAgICAoMHgwMjZDKQotI2RlZmluZSBEU0lf RFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMjMgICAgICAgICAgICAgKDB4MDI3MCkKLSNkZWZpbmUg RFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDI0ICAgICAgICAgICAgICgweDAyNzQpCi0jZGVm aW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyNSAgICAgICAgICAgICAoMHgwMjc4KQot I2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMjYgICAgICAgICAgICAgKDB4MDI3 QykKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDI3ICAgICAgICAgICAgICgw eDAyODApCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwyOCAgICAgICAgICAg ICAoMHgwMjg0KQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9DVFJMMjkgICAgICAg ICAgICAgKDB4MDI4OCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9QTExfQ1RSTDMwICAg ICAgICAgICAgICgweDAyOEMpCi0jZGVmaW5lIERTSV9EWU5BTUlDX1JFRlJFU0hfUExMX0NUUkwz MSAgICAgICAgICAgICAoMHgwMjkwKQotI2RlZmluZSBEU0lfRFlOQU1JQ19SRUZSRVNIX1BMTF9V UFBFUl9BRERSICAgICAgICAgKDB4MDI5NCkKLSNkZWZpbmUgRFNJX0RZTkFNSUNfUkVGUkVTSF9Q TExfVVBQRVJfQUREUjIgICAgICAgICgweDAyOTgpCi0jZGVmaW5lIERTSV9WSURFT19DT01QUkVT U0lPTl9NT0RFX0NUUkwgICAgICAgICAgICAoMHgwMkEwKQotI2RlZmluZSBEU0lfVklERU9fQ09N UFJFU1NJT05fTU9ERV9DVFJMMiAgICAgICAgICAgKDB4MDJBNCkKLSNkZWZpbmUgRFNJX0NPTU1B TkRfQ09NUFJFU1NJT05fTU9ERV9DVFJMICAgICAgICAgICgweDAyQTgpCi0jZGVmaW5lIERTSV9D T01NQU5EX0NPTVBSRVNTSU9OX01PREVfQ1RSTDIgICAgICAgICAoMHgwMkFDKQotI2RlZmluZSBE U0lfQ09NTUFORF9DT01QUkVTU0lPTl9NT0RFX0NUUkwzICAgICAgICAgKDB4MDJCMCkKLSNkZWZp bmUgRFNJX0NPTU1BTkRfTU9ERV9OVUxMX0lOU0VSVElPTl9DVFJMICAgICAgICgweDAyQjQpCi0j ZGVmaW5lIERTSV9SRUFEX0JBQ0tfRElTQUJMRV9TVEFUVVMgICAgICAgICAgICAgICAoMHgwMkI4 KQotI2RlZmluZSBEU0lfREVTS0VXX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4 MDJCQykKLSNkZWZpbmUgRFNJX0RFU0tFV19ERUxBWV9DVFJMICAgICAgICAgICAgICAgICAgICAg ICgweDAyQzApCi0jZGVmaW5lIERTSV9ERVNLRVdfU1dfVFJJR0dFUiAgICAgICAgICAgICAgICAg ICAgICAoMHgwMkM0KQotI2RlZmluZSBEU0lfREVCVUdfQ1RSTCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKDB4MDJDOCkKLSNkZWZpbmUgRFNJX1NFQ1VSRV9ESVNQTEFZX1NUQVRVUyAgICAg ICAgICAgICAgICAgICgweDAyQ0MpCi0jZGVmaW5lIERTSV9TRUNVUkVfRElTUExBWV9CTE9DS19D T01NQU5EX0NPTE9SICAgICAoMHgwMkQwKQotI2RlZmluZSBEU0lfU0VDVVJFX0RJU1BMQVlfQkxP Q0tfVklERU9fQ09MT1IgICAgICAgKDB4MDJENCkKLSNkZWZpbmUgRFNJX0xPR0lDQUxfTEFORV9T V0FQX0NUUkwgICAgICAgICAgICAgICAgICgweDAzMTApCi0KLQotI2VuZGlmIC8qIF9EU0lfQ1RS TF9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX2RlZnMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2RlZnMuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJjOGQ3Ni4uMDAwMDAwMAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kZWZzLmgKKysrIC9kZXYvbnVsbApAQCAt MSw1NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5k ZWYgX0RTSV9ERUZTX0hfCi0jZGVmaW5lIF9EU0lfREVGU19IXwotCi0jaW5jbHVkZSA8bGludXgv dHlwZXMuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Ci0jaW5jbHVkZSAibXNtX2Ry di5oIgotCi0jZGVmaW5lIERTSV9IX1RPVEFMKHQpICgoKHQpLT5oX2FjdGl2ZSkgKyAoKHQpLT5o X2JhY2tfcG9yY2gpICsgXAotCQkJKCh0KS0+aF9zeW5jX3dpZHRoKSArICgodCktPmhfZnJvbnRf cG9yY2gpKQotCi0jZGVmaW5lIERTSV9WX1RPVEFMKHQpICgoKHQpLT52X2FjdGl2ZSkgKyAoKHQp LT52X2JhY2tfcG9yY2gpICsgXAotCQkJKCh0KS0+dl9zeW5jX3dpZHRoKSArICgodCktPnZfZnJv bnRfcG9yY2gpKQotCi0jZGVmaW5lIERTSV9IX1RPVEFMX0RTQyh0KSBcCi0JKHtcCi0JCXU2NCB2 YWx1ZTtcCi0JCWlmICgodCktPmRzY19lbmFibGVkICYmICh0KS0+ZHNjKVwKLQkJCXZhbHVlID0g KHQpLT5kc2MtPnBjbGtfcGVyX2xpbmU7XAotCQllbHNlXAotCQkJdmFsdWUgPSAodCktPmhfYWN0 aXZlO1wKLQkJdmFsdWUgPSB2YWx1ZSArICh0KS0+aF9iYWNrX3BvcmNoICsgKHQpLT5oX3N5bmNf d2lkdGggK1wKLQkJCSh0KS0+aF9mcm9udF9wb3JjaDtcCi0JCXZhbHVlO1wKLQl9KQotCi0jZGVm aW5lIERTSV9ERUJVR19OQU1FX0xFTgkJMzIKLS8qKgotICogZW51bSBkc2lfcGl4ZWxfZm9ybWF0 IC0gRFNJIHBpeGVsIGZvcm1hdHMKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JHQjU2NToKLSAqIEBE U0lfUElYRUxfRk9STUFUX1JHQjY2NjoKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JHQjY2Nl9MT09T RToKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JHQjg4ODoKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JH QjExMToKLSAqIEBEU0lfUElYRUxfRk9STUFUX1JHQjMzMjoKLSAqIEBEU0lfUElYRUxfRk9STUFU X1JHQjQ0NDoKLSAqIEBEU0lfUElYRUxfRk9STUFUX01BWDoKLSAqLwotZW51bSBkc2lfcGl4ZWxf Zm9ybWF0IHsKLQlEU0lfUElYRUxfRk9STUFUX1JHQjU2NSA9IDAsCi0JRFNJX1BJWEVMX0ZPUk1B VF9SR0I2NjYsCi0JRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjZfTE9PU0UsCi0JRFNJX1BJWEVMX0ZP Uk1BVF9SR0I4ODgsCi0JRFNJX1BJWEVMX0ZPUk1BVF9SR0IxMTEsCi0JRFNJX1BJWEVMX0ZPUk1B VF9SR0IzMzIsCi0JRFNJX1BJWEVMX0ZPUk1BVF9SR0I0NDQsCi0JRFNJX1BJWEVMX0ZPUk1BVF9N QVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfb3BfbW9kZSAtIGRzaSBvcGVyYXRpb24gbW9kZQot ICogQERTSV9PUF9WSURFT19NT0RFOiBEU0kgdmlkZW8gbW9kZSBvcGVyYXRpb24KLSAqIEBEU0lf T1BfQ01EX01PREU6ICAgRFNJIENvbW1hbmQgbW9kZSBvcGVyYXRpb24KLSAqIEBEU0lfT1BfTU9E RV9NQVg6Ci0gKi8KLWVudW0gZHNpX29wX21vZGUgewotCURTSV9PUF9WSURFT19NT0RFID0gMCwK LQlEU0lfT1BfQ01EX01PREUsCi0JRFNJX09QX01PREVfTUFYCi19OwotCi0vKioKLSAqIGVudW0g ZHNpX21vZGVfZmxhZ3MgLSBmbGFncyB0byBzaWduYWwgb3RoZXIgZHJtIGNvbXBvbmVudHMgdmlh IHByaXZhdGUgZmxhZ3MKLSAqIEBEU0lfTU9ERV9GTEFHX1NFQU1MRVNTOglTZWFtbGVzcyB0cmFu c2l0aW9uIHJlcXVlc3RlZCBieSB1c2VyCi0gKiBARFNJX01PREVfRkxBR19ERlBTOgkJU2VhbWxl c3MgdHJhbnNpdGlvbiBpcyBEeW5hbWljRlBTCi0gKiBARFNJX01PREVfRkxBR19WQkxBTktfUFJF X01PREVTRVQ6CVRyYW5zaXRpb24gbmVlZHMgVkJMQU5LIGJlZm9yZSBNb2Rlc2V0Ci0gKiBARFNJ X01PREVfRkxBR19ETVM6IFNlYW1sZXNzIHRyYW5zaXRpb24gaXMgZHluYW1pYyBtb2RlIHN3aXRj aAotICogQERTSV9NT0RFX0ZMQUdfVlJSOiBTZWFtbGVzcyB0cmFuc2l0aW9uIGlzIER5bmFtaWNG UFMuCi0gKiAgICAgICAgICAgICAgICAgICAgIE5ldyB0aW1pbmcgdmFsdWVzIGFyZSBzZW50IGZy b20gREFMLgotICovCi1lbnVtIGRzaV9tb2RlX2ZsYWdzIHsKLQlEU0lfTU9ERV9GTEFHX1NFQU1M RVNTCQkJPSBCSVQoMCksCi0JRFNJX01PREVfRkxBR19ERlBTCQkJPSBCSVQoMSksCi0JRFNJX01P REVfRkxBR19WQkxBTktfUFJFX01PREVTRVQJPSBCSVQoMiksCi0JRFNJX01PREVfRkxBR19ETVMJ CQk9IEJJVCgzKSwKLQlEU0lfTU9ERV9GTEFHX1ZSUgkJCT0gQklUKDQpLAotfTsKLQotLyoqCi0g KiBlbnVtIGRzaV9sb2dpY2FsX2xhbmUgLSBkc2kgbG9naWNhbCBsYW5lcwotICogQERTSV9MT0dJ Q0FMX0xBTkVfMDogICAgIExvZ2ljYWwgbGFuZSAwCi0gKiBARFNJX0xPR0lDQUxfTEFORV8xOiAg ICAgTG9naWNhbCBsYW5lIDEKLSAqIEBEU0lfTE9HSUNBTF9MQU5FXzI6ICAgICBMb2dpY2FsIGxh bmUgMgotICogQERTSV9MT0dJQ0FMX0xBTkVfMzogICAgIExvZ2ljYWwgbGFuZSAzCi0gKiBARFNJ X0xPR0lDQUxfQ0xPQ0tfTEFORTogQ2xvY2sgbGFuZQotICogQERTSV9MQU5FX01BWDogICAgICAg ICAgIE1heGltdW0gbGFuZXMgc3VwcG9ydGVkCi0gKi8KLWVudW0gZHNpX2xvZ2ljYWxfbGFuZSB7 Ci0JRFNJX0xPR0lDQUxfTEFORV8wID0gMCwKLQlEU0lfTE9HSUNBTF9MQU5FXzEsCi0JRFNJX0xP R0lDQUxfTEFORV8yLAotCURTSV9MT0dJQ0FMX0xBTkVfMywKLQlEU0lfTE9HSUNBTF9DTE9DS19M QU5FLAotCURTSV9MQU5FX01BWAotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9kYXRhX2xhbmVzIC0g QklUIG1hcCBmb3IgRFNJIGRhdGEgbGFuZXMKLSAqIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0 aGUgYWN0aXZlIERTSSBkYXRhIGxhbmVzIGZvcgotICogdmFyaW91cyBvcGVyYXRpb25zIGxpa2Ug RFNJIGRhdGEgbGFuZSBlbmFibGUvVUxQUy9jbGFtcAotICogY29uZmlndXJhdGlvbnMuCi0gKiBA RFNJX0RBVEFfTEFORV8wOiBCSVQoRFNJX0xPR0lDQUxfTEFORV8wKQotICogQERTSV9EQVRBX0xB TkVfMTogQklUKERTSV9MT0dJQ0FMX0xBTkVfMSkKLSAqIEBEU0lfREFUQV9MQU5FXzI6IEJJVChE U0lfTE9HSUNBTF9MQU5FXzIpCi0gKiBARFNJX0RBVEFfTEFORV8zOiBCSVQoRFNJX0xPR0lDQUxf TEFORV8zKQotICogQERTSV9DTE9DS19MQU5FOiAgQklUKERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUp Ci0gKi8KLWVudW0gZHNpX2RhdGFfbGFuZXMgewotCURTSV9EQVRBX0xBTkVfMCA9IEJJVChEU0lf TE9HSUNBTF9MQU5FXzApLAotCURTSV9EQVRBX0xBTkVfMSA9IEJJVChEU0lfTE9HSUNBTF9MQU5F XzEpLAotCURTSV9EQVRBX0xBTkVfMiA9IEJJVChEU0lfTE9HSUNBTF9MQU5FXzIpLAotCURTSV9E QVRBX0xBTkVfMyA9IEJJVChEU0lfTE9HSUNBTF9MQU5FXzMpLAotCURTSV9DTE9DS19MQU5FICA9 IEJJVChEU0lfTE9HSUNBTF9DTE9DS19MQU5FKQotfTsKLQotLyoqCi0gKiBlbnVtIGRzaV9waHlf ZGF0YV9sYW5lcyAtIGRzaSBwaHlzaWNhbCBsYW5lcwotICogdXNlZCBmb3IgRFNJIGxvZ2ljYWwg dG8gcGh5c2ljYWwgbGFuZSBtYXBwaW5nCi0gKiBARFNJX1BIWVNJQ0FMX0xBTkVfSU5WQUxJRDog UGh5c2ljYWwgbGFuZSB2YWxpZC9pbnZhbGlkCi0gKiBARFNJX1BIWVNJQ0FMX0xBTkVfMDogUGh5 c2ljYWwgbGFuZSAwCi0gKiBARFNJX1BIWVNJQ0FMX0xBTkVfMTogUGh5c2ljYWwgbGFuZSAxCi0g KiBARFNJX1BIWVNJQ0FMX0xBTkVfMjogUGh5c2ljYWwgbGFuZSAyCi0gKiBARFNJX1BIWVNJQ0FM X0xBTkVfMzogUGh5c2ljYWwgbGFuZSAzCi0gKi8KLWVudW0gZHNpX3BoeV9kYXRhX2xhbmVzIHsK LQlEU0lfUEhZU0lDQUxfTEFORV9JTlZBTElEID0gMCwKLQlEU0lfUEhZU0lDQUxfTEFORV8wID0g QklUKDApLAotCURTSV9QSFlTSUNBTF9MQU5FXzEgPSBCSVQoMSksCi0JRFNJX1BIWVNJQ0FMX0xB TkVfMiA9IEJJVCgyKSwKLQlEU0lfUEhZU0lDQUxfTEFORV8zICA9IEJJVCgzKQotfTsKLQotZW51 bSBkc2lfbGFuZV9tYXBfdHlwZV92MSB7Ci0JRFNJX0xBTkVfTUFQXzAxMjMsCi0JRFNJX0xBTkVf TUFQXzMwMTIsCi0JRFNJX0xBTkVfTUFQXzIzMDEsCi0JRFNJX0xBTkVfTUFQXzEyMzAsCi0JRFNJ X0xBTkVfTUFQXzAzMjEsCi0JRFNJX0xBTkVfTUFQXzEwMzIsCi0JRFNJX0xBTkVfTUFQXzIxMDMs Ci0JRFNJX0xBTkVfTUFQXzMyMTAsCi19OwotCi0vKioKLSAqIGxhbmVfbWFwOiBEU0kgbG9naWNh bCA8LT4gcGh5c2ljYWwgbGFuZSBtYXBwaW5nCi0gKiBsYW5lX21hcF92MTogTGFuZSBtYXBwaW5n IGZvciBEU0kgY29udHJvbGxlcnMgPCB2Mi4wCi0gKiBsYW5lX21hcF92MjogTGFuZSBtYXBwaW5n IGZvciBEU0kgY29udHJvbGxlcnMgPj0gMi4wCi0gKi8KLXN0cnVjdCBkc2lfbGFuZV9tYXAgewot CWVudW0gZHNpX2xhbmVfbWFwX3R5cGVfdjEgbGFuZV9tYXBfdjE7Ci0JdTggbGFuZV9tYXBfdjJb RFNJX0xBTkVfTUFYIC0gMV07Ci19OwotCi0vKioKLSAqIGVudW0gZHNpX3RyaWdnZXJfdHlwZSAt IGRzaSB0cmlnZ2VyIHR5cGUKLSAqIEBEU0lfVFJJR0dFUl9OT05FOiAgICAgTm8gdHJpZ2dlci4K LSAqIEBEU0lfVFJJR0dFUl9URTogICAgICAgVEUgdHJpZ2dlci4KLSAqIEBEU0lfVFJJR0dFUl9T RU9GOiAgICAgU3RhcnQgb3IgRW5kIG9mIGZyYW1lLgotICogQERTSV9UUklHR0VSX1NXOiAgICAg ICBTb2Z0d2FyZSB0cmlnZ2VyLgotICogQERTSV9UUklHR0VSX1NXX1NFT0Y6ICBTb2Z0d2FyZSB0 cmlnZ2VyIGFuZCBzdGFydC9lbmQgb2YgZnJhbWUuCi0gKiBARFNJX1RSSUdHRVJfU1dfVEU6ICAg IFNvZnR3YXJlIGFuZCBURSB0cmlnZ2Vycy4KLSAqIEBEU0lfVFJJR0dFUl9NQVg6ICAgICAgTWF4 IHRyaWdnZXIgdmFsdWVzLgotICovCi1lbnVtIGRzaV90cmlnZ2VyX3R5cGUgewotCURTSV9UUklH R0VSX05PTkUgPSAwLAotCURTSV9UUklHR0VSX1RFLAotCURTSV9UUklHR0VSX1NFT0YsCi0JRFNJ X1RSSUdHRVJfU1csCi0JRFNJX1RSSUdHRVJfU1dfU0VPRiwKLQlEU0lfVFJJR0dFUl9TV19URSwK LQlEU0lfVFJJR0dFUl9NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfY29sb3Jfc3dhcF9tb2Rl IC0gY29sb3Igc3dhcCBtb2RlCi0gKiBARFNJX0NPTE9SX1NXQVBfUkdCOgotICogQERTSV9DT0xP Ul9TV0FQX1JCRzoKLSAqIEBEU0lfQ09MT1JfU1dBUF9CR1I6Ci0gKiBARFNJX0NPTE9SX1NXQVBf QlJHOgotICogQERTSV9DT0xPUl9TV0FQX0dSQjoKLSAqIEBEU0lfQ09MT1JfU1dBUF9HQlI6Ci0g Ki8KLWVudW0gZHNpX2NvbG9yX3N3YXBfbW9kZSB7Ci0JRFNJX0NPTE9SX1NXQVBfUkdCID0gMCwK LQlEU0lfQ09MT1JfU1dBUF9SQkcsCi0JRFNJX0NPTE9SX1NXQVBfQkdSLAotCURTSV9DT0xPUl9T V0FQX0JSRywKLQlEU0lfQ09MT1JfU1dBUF9HUkIsCi0JRFNJX0NPTE9SX1NXQVBfR0JSCi19Owot Ci0vKioKLSAqIGVudW0gZHNpX2RmcHNfdHlwZSAtIER5bmFtaWMgRlBTIHN1cHBvcnQgdHlwZQot ICogQERTSV9ERlBTX05PTkU6ICAgICAgICAgICBEeW5hbWljIEZQUyBpcyBub3Qgc3VwcG9ydGVk LgotICogQERTSV9ERlBTX1NVU1BFTkRfUkVTVU1FOgotICogQERTSV9ERlBTX0lNTUVESUFURV9D TEs6Ci0gKiBARFNJX0RGUFNfSU1NRURJQVRFX0hGUDoKLSAqIEBEU0lfREZQU19JTU1FRElBVEVf VkZQOgotICogQERTSV9EUEZTX01BWDoKLSAqLwotZW51bSBkc2lfZGZwc190eXBlIHsKLQlEU0lf REZQU19OT05FID0gMCwKLQlEU0lfREZQU19TVVNQRU5EX1JFU1VNRSwKLQlEU0lfREZQU19JTU1F RElBVEVfQ0xLLAotCURTSV9ERlBTX0lNTUVESUFURV9IRlAsCi0JRFNJX0RGUFNfSU1NRURJQVRF X1ZGUCwKLQlEU0lfREZQU19NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lfY21kX3NldF90eXBl ICAtIERTSSBjb21tYW5kIHNldCB0eXBlCi0gKiBARFNJX0NNRF9TRVRfUFJFX09OOgkgICAgICAg ICAgICAgICAgICAgUGFuZWwgcHJlIG9uCi0gKiBARFNJX0NNRF9TRVRfT046ICAgICAgICAgICAg ICAgICAgICAgICAgUGFuZWwgb24KLSAqIEBEU0lfQ01EX1NFVF9QT1NUX09OOiAgICAgICAgICAg ICAgICAgICBQYW5lbCBwb3N0IG9uCi0gKiBARFNJX0NNRF9TRVRfUFJFX09GRjogICAgICAgICAg ICAgICAgICAgUGFuZWwgcHJlIG9mZgotICogQERTSV9DTURfU0VUX09GRjogICAgICAgICAgICAg ICAgICAgICAgIFBhbmVsIG9mZgotICogQERTSV9DTURfU0VUX1BPU1RfT0ZGOiAgICAgICAgICAg ICAgICAgIFBhbmVsIHBvc3Qgb2ZmCi0gKiBARFNJX0NNRF9TRVRfUFJFX1JFU19TV0lUQ0g6ICAg ICAgICAgICAgUHJlIHJlc29sdXRpb24gc3dpdGNoCi0gKiBARFNJX0NNRF9TRVRfUkVTX1NXSVRD SDogICAgICAgICAgICAgICAgUmVzb2x1dGlvbiBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NFVF9QT1NU X1JFU19TV0lUQ0g6ICAgICAgICAgICBQb3N0IHJlc29sdXRpb24gc3dpdGNoCi0gKiBARFNJX0NN RF9TRVRfQ01EX1RPX1ZJRF9TV0lUQ0g6ICAgICAgICAgQ21kIHRvIHZpZGVvIG1vZGUgc3dpdGNo Ci0gKiBARFNJX0NNRF9TRVRfUE9TVF9DTURfVE9fVklEX1NXSVRDSDogICAgUG9zdCBjbWQgdG8g dmlkIHN3aXRjaAotICogQERTSV9DTURfU0VUX1ZJRF9UT19DTURfU1dJVENIOiAgICAgICAgIFZp ZGVvIHRvIGNtZCBtb2RlIHN3aXRjaAotICogQERTSV9DTURfU0VUX1BPU1RfVklEX1RPX0NNRF9T V0lUQ0g6ICAgIFBvc3QgdmlkIHRvIGNtZCBzd2l0Y2gKLSAqIEBEU0lfQ01EX1NFVF9QQU5FTF9T VEFUVVM6ICAgICAgICAgICAgICBQYW5lbCBzdGF0dXMKLSAqIEBEU0lfQ01EX1NFVF9MUDE6ICAg ICAgICAgICAgICAgICAgICAgICBMb3cgcG93ZXIgbW9kZSAxCi0gKiBARFNJX0NNRF9TRVRfTFAy OiAgICAgICAgICAgICAgICAgICAgICAgTG93IHBvd2VyIG1vZGUgMgotICogQERTSV9DTURfU0VU X05PTFA6ICAgICAgICAgICAgICAgICAgICAgIExvdyBwb3dlciBtb2RlIGRpc2FibGUKLSAqIEBE U0lfQ01EX1NFVF9QUFM6ICAgICAgICAgICAgICAgICAgICAgICBEU0MgUFBTIGNvbW1hbmQKLSAq IEBEU0lfQ01EX1NFVF9USU1JTkdfU1dJVENIOiAgICAgICAgICAgICBUaW1pbmcgc3dpdGNoCi0g KiBARFNJX0NNRF9TRVRfUE9TVF9USU1JTkdfU1dJVENIOiAgICAgICAgUG9zdCB0aW1pbmcgc3dp dGNoCi0gKiBARFNJX0NNRF9TRVRfTUFYCi0gKi8KLWVudW0gZHNpX2NtZF9zZXRfdHlwZSB7Ci0J RFNJX0NNRF9TRVRfUFJFX09OID0gMCwKLQlEU0lfQ01EX1NFVF9PTiwKLQlEU0lfQ01EX1NFVF9Q T1NUX09OLAotCURTSV9DTURfU0VUX1BSRV9PRkYsCi0JRFNJX0NNRF9TRVRfT0ZGLAotCURTSV9D TURfU0VUX1BPU1RfT0ZGLAotCURTSV9DTURfU0VUX1BSRV9SRVNfU1dJVENILAotCURTSV9DTURf U0VUX1JFU19TV0lUQ0gsCi0JRFNJX0NNRF9TRVRfUE9TVF9SRVNfU1dJVENILAotCURTSV9DTURf U0VUX0NNRF9UT19WSURfU1dJVENILAotCURTSV9DTURfU0VUX1BPU1RfQ01EX1RPX1ZJRF9TV0lU Q0gsCi0JRFNJX0NNRF9TRVRfVklEX1RPX0NNRF9TV0lUQ0gsCi0JRFNJX0NNRF9TRVRfUE9TVF9W SURfVE9fQ01EX1NXSVRDSCwKLQlEU0lfQ01EX1NFVF9QQU5FTF9TVEFUVVMsCi0JRFNJX0NNRF9T RVRfTFAxLAotCURTSV9DTURfU0VUX0xQMiwKLQlEU0lfQ01EX1NFVF9OT0xQLAotCURTSV9DTURf U0VUX1BQUywKLQlEU0lfQ01EX1NFVF9USU1JTkdfU1dJVENILAotCURTSV9DTURfU0VUX1BPU1Rf VElNSU5HX1NXSVRDSCwKLQlEU0lfQ01EX1NFVF9NQVgKLX07Ci0KLS8qKgotICogZW51bSBkc2lf Y21kX3NldF9zdGF0ZSAtIGNvbW1hbmQgc2V0IHN0YXRlCi0gKiBARFNJX0NNRF9TRVRfU1RBVEVf TFA6ICAgZHNpIGxvdyBwb3dlciBtb2RlCi0gKiBARFNJX0NNRF9TRVRfU1RBVEVfSFM6ICAgZHNp IGhpZ2ggc3BlZWQgbW9kZQotICogQERTSV9DTURfU0VUX1NUQVRFX01BWAotICovCi1lbnVtIGRz aV9jbWRfc2V0X3N0YXRlIHsKLQlEU0lfQ01EX1NFVF9TVEFURV9MUCA9IDAsCi0JRFNJX0NNRF9T RVRfU1RBVEVfSFMsCi0JRFNJX0NNRF9TRVRfU1RBVEVfTUFYCi19OwotCi0vKioKLSAqIGVudW0g ZHNpX3BoeV90eXBlIC0gRFNJIHBoeSB0eXBlcwotICogQERTSV9QSFlfVFlQRV9EUEhZOgotICog QERTSV9QSFlfVFlQRV9DUEhZOgotICovCi1lbnVtIGRzaV9waHlfdHlwZSB7Ci0JRFNJX1BIWV9U WVBFX0RQSFksCi0JRFNJX1BIWV9UWVBFX0NQSFkKLX07Ci0KLS8qKgotICogZW51bSBkc2lfdGVf bW9kZSAtIGRzaSB0ZSBzb3VyY2UKLSAqIEBEU0lfVEVfT05fREFUQV9MSU5LOiAgICBURSByZWFk IGZyb20gRFNJIGxpbmsKLSAqIEBEU0lfVEVfT05fRVhUX1BJTjogICAgICBURSBzaWduYWwgb24g YW4gZXh0ZXJuYWwgR1BJTwotICovCi1lbnVtIGRzaV90ZV9tb2RlIHsKLQlEU0lfVEVfT05fREFU QV9MSU5LID0gMCwKLQlEU0lfVEVfT05fRVhUX1BJTiwKLX07Ci0KLS8qKgotICogZW51bSBkc2lf dmlkZW9fdHJhZmZpY19tb2RlIC0gdmlkZW8gbW9kZSBwaXhlbCB0cmFuc21pc3Npb24gdHlwZQot ICogQERTSV9WSURFT19UUkFGRklDX1NZTkNfUFVMU0VTOiAgICAgICBOb24tYnVyc3QgbW9kZSB3 aXRoIHN5bmMgcHVsc2VzLgotICogQERTSV9WSURFT19UUkFGRklDX1NZTkNfU1RBUlRfRVZFTlRT OiBOb24tYnVyc3QgbW9kZSB3aXRoIHN5bmMgc3RhcnQgZXZlbnRzLgotICogQERTSV9WSURFT19U UkFGRklDX0JVUlNUX01PREU6ICAgICAgICBCdXJzdCBtb2RlIHVzaW5nIHN5bmMgc3RhcnQgZXZl bnRzLgotICovCi1lbnVtIGRzaV92aWRlb190cmFmZmljX21vZGUgewotCURTSV9WSURFT19UUkFG RklDX1NZTkNfUFVMU0VTID0gMCwKLQlEU0lfVklERU9fVFJBRkZJQ19TWU5DX1NUQVJUX0VWRU5U UywKLQlEU0lfVklERU9fVFJBRkZJQ19CVVJTVF9NT0RFLAotfTsKLQotLyoqCi0gKiBzdHJ1Y3Qg ZHNpX2NtZF9kZXNjIC0gZGVzY3JpcHRpb24gb2YgYSBkc2kgY29tbWFuZAotICogQG1zZzoJCWRz aSBtaXBpIG1zZyBwYWNrZXQKLSAqIEBsYXN0X2NvbW1hbmQ6ICAgaW5kaWNhdGVzIHdoZXRoZXIg dGhlIGNtZCBpcyB0aGUgbGFzdCBvbmUgdG8gc2VuZAotICogQHBvc3Rfd2FpdF9tczogICBwb3N0 IHdhaXQgZHVyYXRpb24KLSAqLwotc3RydWN0IGRzaV9jbWRfZGVzYyB7Ci0Jc3RydWN0IG1pcGlf ZHNpX21zZyBtc2c7Ci0JYm9vbCBsYXN0X2NvbW1hbmQ7Ci0JdTMyICBwb3N0X3dhaXRfbXM7Ci19 OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCAtIGNvbW1hbmQgc2V0IG9mIHRo ZSBwYW5lbAotICogQHR5cGU6ICAgICAgdHlwZSBvZiB0aGUgY29tbWFuZAotICogQHN0YXRlOiAg ICAgc3RhdGUgb2YgdGhlIGNvbW1hbmQKLSAqIEBjb3VudDogICAgIG51bWJlciBvZiBjbWRzCi0g KiBAY3RybF9pZHg6ICBpbmRleCBvZiB0aGUgZHNpIGNvbnRyb2wKLSAqIEBjbWRzOiAgICAgIGFy cnkgb2YgY21kcwotICovCi1zdHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgewotCWVudW0gZHNpX2Nt ZF9zZXRfdHlwZSB0eXBlOwotCWVudW0gZHNpX2NtZF9zZXRfc3RhdGUgc3RhdGU7Ci0JdTMyIGNv dW50OwotCXUzMiBjdHJsX2lkeDsKLQlzdHJ1Y3QgZHNpX2NtZF9kZXNjICpjbWRzOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHNpX21vZGVfaW5mbyAtIHZpZGVvIG1vZGUgaW5mb3JtYXRpb24gZHNp IGZyYW1lCi0gKiBAaF9hY3RpdmU6ICAgICAgICAgQWN0aXZlIHdpZHRoIG9mIG9uZSBmcmFtZSBp biBwaXhlbHMuCi0gKiBAaF9iYWNrX3BvcmNoOiAgICAgSG9yaXpvbnRhbCBiYWNrIHBvcmNoIGlu IHBpeGVscy4KLSAqIEBoX3N5bmNfd2lkdGg6ICAgICBIU1lOQyB3aWR0aCBpbiBwaXhlbHMuCi0g KiBAaF9mcm9udF9wb3JjaDogICAgSG9yaXpvbnRhbCBmcm9uIHBvcmNoIGluIHBpeGVscy4KLSAq IEBoX3NrZXc6Ci0gKiBAaF9zeW5jX3BvbGFyaXR5OiAgUG9sYXJpdHkgb2YgSFNZTkMgKGZhbHNl IGlzIGFjdGl2ZSBsb3cpLgotICogQHZfYWN0aXZlOiAgICAgICAgIEFjdGl2ZSBoZWlnaHQgb2Yg b25lIGZyYW1lIGluIGxpbmVzLgotICogQHZfYmFja19wb3JjaDogICAgIFZlcnRpY2FsIGJhY2sg cG9yY2ggaW4gbGluZXMuCi0gKiBAdl9zeW5jX3dpZHRoOiAgICAgVlNZTkMgd2lkdGggaW4gbGlu ZXMuCi0gKiBAdl9mcm9udF9wb3JjaDogICAgVmVydGljYWwgZnJvbnQgcG9yY2ggaW4gbGluZXMu Ci0gKiBAdl9zeW5jX3BvbGFyaXR5OiAgUG9sYXJpdHkgb2YgVlNZTkMgKGZhbHNlIGlzIGFjdGl2 ZSBsb3cpLgotICogQHJlZnJlc2hfcmF0ZTogICAgIFJlZnJlc2ggcmF0ZSBpbiBIei4KLSAqIEBk c2NfZW5hYmxlZDogICAgICBEU0MgY29tcHJlc3Npb24gZW5hYmxlZC4KLSAqIEBkc2M6ICAgICAg ICAgICAgICBEU0MgY29tcHJlc3Npb24gY29uZmlndXJhdGlvbi4KLSAqLwotc3RydWN0IGRzaV9t b2RlX2luZm8gewotCXUzMiBoX2FjdGl2ZTsKLQl1MzIgaF9iYWNrX3BvcmNoOwotCXUzMiBoX3N5 bmNfd2lkdGg7Ci0JdTMyIGhfZnJvbnRfcG9yY2g7Ci0JdTMyIGhfc2tldzsKLQlib29sIGhfc3lu Y19wb2xhcml0eTsKLQotCXUzMiB2X2FjdGl2ZTsKLQl1MzIgdl9iYWNrX3BvcmNoOwotCXUzMiB2 X3N5bmNfd2lkdGg7Ci0JdTMyIHZfZnJvbnRfcG9yY2g7Ci0JYm9vbCB2X3N5bmNfcG9sYXJpdHk7 Ci0KLQl1MzIgcmVmcmVzaF9yYXRlOwotCi0JYm9vbCBkc2NfZW5hYmxlZDsKLQlzdHJ1Y3QgbXNt X2Rpc3BsYXlfZHNjX2luZm8gKmRzYzsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9ob3N0X2Nv bW1vbl9jZmcgLSBIb3N0IGNvbmZpZ3VyYXRpb24gY29tbW9uIHRvIHZpZGVvIGFuZCBjbWQgbW9k ZQotICogQGRzdF9mb3JtYXQ6ICAgICAgICAgIERlc3RpbmF0aW9uIHBpeGVsIGZvcm1hdC4KLSAq IEBkYXRhX2xhbmVzOiAgICAgICAgICBQaHlzaWNhbCBkYXRhIGxhbmVzIHRvIGJlIGVuYWJsZWQu Ci0gKiBAZW5fY3JjX2NoZWNrOiAgICAgICAgRW5hYmxlIENSQyBjaGVja3MuCi0gKiBAZW5fZWNj X2NoZWNrOiAgICAgICAgRW5hYmxlIEVDQyBjaGVja3MuCi0gKiBAdGVfbW9kZTogICAgICAgICAg ICAgU291cmNlIGZvciBURSBzaWduYWxsaW5nLgotICogQG1kcF9jbWRfdHJpZ2dlcjogICAgIE1E UCBmcmFtZSB1cGRhdGUgdHJpZ2dlciBmb3IgY29tbWFuZCBtb2RlLgotICogQGRtYV9jbWRfdHJp Z2dlcjogICAgIENvbW1hbmQgRE1BIHRyaWdnZXIuCi0gKiBAY21kX3RyaWdnZXJfc3RyZWFtOiAg Q29tbWFuZCBtb2RlIHN0cmVhbSB0byB0cmlnZ2VyLgotICogQHN3YXBfbW9kZTogICAgICAgICAg IERTSSBjb2xvciBzd2FwIG1vZGUuCi0gKiBAYml0X3N3YXBfcmVhZDogICAgICAgSXMgcmVkIGNv bG9yIGJpdCBzd2FwcGVkLgotICogQGJpdF9zd2FwX2dyZWVuOiAgICAgIElzIGdyZWVuIGNvbG9y IGJpdCBzd2FwcGVkLgotICogQGJpdF9zd2FwX2JsdWU6ICAgICAgIElzIGJsdWUgY29sb3IgYml0 IHN3YXBwZWQuCi0gKiBAdF9jbGtfcG9zdDogICAgICAgICAgTnVtYmVyIG9mIGJ5dGUgY2xvY2sg Y3ljbGVzIHRoYXQgdGhlIHRyYW5zbWl0dGVyIHNoYWxsCi0gKiAgICAgICAgICAgICAgICAgICAg ICAgY29udGludWUgc2VuZGluZyBhZnRlciBsYXN0IGRhdGEgbGFuZSBoYXMgdHJhbnNpdGlvbmVk Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgdG8gTFAgbW9kZS4KLSAqIEB0X2Nsa19wcmU6ICAg ICAgICAgICBOdW1iZXIgb2YgYnl0ZSBjbG9jayBjeWNsZXMgdGhhdCB0aGUgaGlnaCBzcHBlZCBj bG9jawotICogICAgICAgICAgICAgICAgICAgICAgIHNoYWxsIGJlIGRyaXZlbiBwcmlvciB0byBk YXRhIGxhbmUgdHJhbnNpdGlvbnMgZnJvbSBMUAotICogICAgICAgICAgICAgICAgICAgICAgIHRv IEhTIG1vZGUuCi0gKiBAaWdub3JlX3J4X2VvdDogICAgICAgSWdub3JlIFJ4IEVPVCBwYWNrZXRz IGlmIHNldCB0byB0cnVlLgotICogQGFwcGVuZF90eF9lb3Q6ICAgICAgIEFwcGVuZCBFT1QgcGFj a2V0cyBmb3IgZm9yd2FyZCB0cmFuc21pc3Npb25zIGlmIHNldCB0bwotICogICAgICAgICAgICAg ICAgICAgICAgIHRydWUuCi0gKi8KLXN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnIHsKLQllbnVt IGRzaV9waXhlbF9mb3JtYXQgZHN0X2Zvcm1hdDsKLQllbnVtIGRzaV9kYXRhX2xhbmVzIGRhdGFf bGFuZXM7Ci0JYm9vbCBlbl9jcmNfY2hlY2s7Ci0JYm9vbCBlbl9lY2NfY2hlY2s7Ci0JZW51bSBk c2lfdGVfbW9kZSB0ZV9tb2RlOwotCWVudW0gZHNpX3RyaWdnZXJfdHlwZSBtZHBfY21kX3RyaWdn ZXI7Ci0JZW51bSBkc2lfdHJpZ2dlcl90eXBlIGRtYV9jbWRfdHJpZ2dlcjsKLQl1MzIgY21kX3Ry aWdnZXJfc3RyZWFtOwotCWVudW0gZHNpX2NvbG9yX3N3YXBfbW9kZSBzd2FwX21vZGU7Ci0JYm9v bCBiaXRfc3dhcF9yZWQ7Ci0JYm9vbCBiaXRfc3dhcF9ncmVlbjsKLQlib29sIGJpdF9zd2FwX2Js dWU7Ci0JdTMyIHRfY2xrX3Bvc3Q7Ci0JdTMyIHRfY2xrX3ByZTsKLQlib29sIGlnbm9yZV9yeF9l b3Q7Ci0JYm9vbCBhcHBlbmRfdHhfZW90OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3ZpZGVv X2VuZ2luZV9jZmcgLSBEU0kgdmlkZW8gZW5naW5lIGNvbmZpZ3VyYXRpb24KLSAqIEBsYXN0X2xp bmVfaW50ZXJsZWF2ZV9lbjogICBBbGxvdyBjb21tYW5kIG1vZGUgb3AgaW50ZXJsZWF2ZWQgb24g bGFzdCBsaW5lIG9mCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8gc3RyZWFt LgotICogQHB1bHNlX21vZGVfaHNhX2hlOiAgICAgICAgIFNlbmQgSFNBIGFuZCBIRSBmb2xsb3dp bmcgVlMvVkUgcGFja2V0IGlmIHNldCB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRydWUuCi0gKiBAaGZwX2xwMTFfZW46ICAgICAgICAgICAgICAgRW50ZXIgbG93IHBvd2VyIHN0 b3AgbW9kZSAoTFAtMTEpIGR1cmluZyBIRlAuCi0gKiBAaGJwX2xwMTFfZW46ICAgICAgICAgICAg ICAgRW50ZXIgbG93IHBvd2VyIHN0b3AgbW9kZSAoTFAtMTEpIGR1cmluZyBIQlAuCi0gKiBAaHNh X2xwMTFfZW46ICAgICAgICAgICAgICAgRW50ZXIgbG93IHBvd2VyIHN0b3AgbW9kZSAoTFAtMTEp IGR1cmluZyBIU0EuCi0gKiBAZW9mX2JsbHBfbHAxMV9lbjogICAgICAgICAgRW50ZXIgbG93IHBv d2VyIHN0b3AgbW9kZSAoTFAtMTEpIGR1cmluZyBCTExQIG9mCi0gKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGFzdCBsaW5lIG9mIGEgZnJhbWUuCi0gKiBAYmxscF9scDExX2VuOiAgICAg ICAgICAgICAgRW50ZXIgbG93IHBvd2VyIHN0b3AgbW9kZSAoTFAtMTEpIGR1cmluZyBCTExQLgot ICogQHRyYWZmaWNfbW9kZTogICAgICAgICAgICAgIFRyYWZmaWMgbW9kZSBmb3IgdmlkZW8gc3Ry ZWFtLgotICogQHZjX2lkOiAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWwgY2hhbm5lbCBpZGVu dGlmaWVyLgotICovCi1zdHJ1Y3QgZHNpX3ZpZGVvX2VuZ2luZV9jZmcgewotCWJvb2wgbGFzdF9s aW5lX2ludGVybGVhdmVfZW47Ci0JYm9vbCBwdWxzZV9tb2RlX2hzYV9oZTsKLQlib29sIGhmcF9s cDExX2VuOwotCWJvb2wgaGJwX2xwMTFfZW47Ci0JYm9vbCBoc2FfbHAxMV9lbjsKLQlib29sIGVv Zl9ibGxwX2xwMTFfZW47Ci0JYm9vbCBibGxwX2xwMTFfZW47Ci0JZW51bSBkc2lfdmlkZW9fdHJh ZmZpY19tb2RlIHRyYWZmaWNfbW9kZTsKLQl1MzIgdmNfaWQ7Ci19OwotCi0vKioKLSAqIHN0cnVj dCBkc2lfY21kX2VuZ2luZV9jZmcgLSBEU0kgY29tbWFuZCBlbmdpbmUgY29uZmlndXJhdGlvbgot ICogQG1heF9jbWRfcGFja2V0c19pbnRlcmxlYXZlICAgICBNYXhpbXVtIG51bWJlciBvZiBjb21t YW5kIG1vZGUgUkdCIHBhY2tldHMgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VuZCB3aXRoIGluIG9uZSBob3Jpem9udGFsIGJsYW5raW5nIHBlcmlvZAotICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgdmlkZW8gbW9kZSBmcmFtZS4KLSAqIEB3 cl9tZW1fc3RhcnQ6ICAgICAgICAgICAgICAgICAgRENTIGNvbW1hbmQgZm9yIHdyaXRlX21lbW9y eV9zdGFydC4KLSAqIEB3cl9tZW1fY29udGludWU6ICAgICAgICAgICAgICAgRENTIGNvbW1hbmQg Zm9yIHdyaXRlX21lbW9yeV9jb250aW51ZS4KLSAqIEBpbnNlcnRfZGNzX2NvbW1hbmQ6ICAgICAg ICAgICAgSW5zZXJ0IERDUyBjb21tYW5kIGFzIGZpcnN0IGJ5dGUgb2YgcGF5bG9hZAotICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgcGl4ZWwgZGF0YS4KLSAqIEBtZHBf dHJhbnNmZXJfdGltZV91cyAgIFNwZWNpZmllcyB0aGUgbWRwIHRyYW5zZmVyIHRpbWUgZm9yIGNv bW1hbmQgbW9kZQotICogICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxzIGluIG1pY3Jvc2Vj b25kcwotICovCi1zdHJ1Y3QgZHNpX2NtZF9lbmdpbmVfY2ZnIHsKLQl1MzIgbWF4X2NtZF9wYWNr ZXRzX2ludGVybGVhdmU7Ci0JdTMyIHdyX21lbV9zdGFydDsKLQl1MzIgd3JfbWVtX2NvbnRpbnVl OwotCWJvb2wgaW5zZXJ0X2Rjc19jb21tYW5kOwotCXUzMiBtZHBfdHJhbnNmZXJfdGltZV91czsK LX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAtIERTSSBob3N0IGNvbmZpZ3Vy YXRpb24gcGFyYW1ldGVycy4KLSAqIEBwYW5lbF9tb2RlOiAgICAgICAgICAgIE9wZXJhdGlvbiBt b2RlIGZvciBwYW5lbCAodmlkZW8gb3IgY21kIG1vZGUpLgotICogQGNvbW1vbl9jb25maWc6ICAg ICAgICAgSG9zdCBjb25maWd1cmF0aW9uIGNvbW1vbiB0byBib3RoIFZpZGVvIGFuZCBDbWQgbW9k ZS4KLSAqIEB2aWRlb19lbmdpbmU6ICAgICAgICAgIFZpZGVvIGVuZ2luZSBjb25maWd1cmF0aW9u IGlmIHBhbmVsIGlzIGluIHZpZGVvIG1vZGUuCi0gKiBAY21kX2VuZ2luZTogICAgICAgICAgICBD bWQgZW5naW5lIGNvbmZpZ3VyYXRpb24gaWYgcGFuZWwgaXMgaW4gY21kIG1vZGUuCi0gKiBAZXNj X2Nsa19yYXRlX2toejogICAgICBFc2MgY2xvY2sgZnJlcXVlbmN5IGluIEh6LgotICogQGJpdF9j bGtfcmF0ZV9oejogICAgICAgQml0IGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KLSAqIEB2aWRlb190 aW1pbmc6ICAgICAgICAgIFZpZGVvIHRpbWluZyBpbmZvcm1hdGlvbiBvZiBhIGZyYW1lLgotICog QGxhbmVfbWFwOiAgICAgICAgICAgICAgTWFwcGluZyBiZXR3ZWVuIGxvZ2ljYWwgYW5kIHBoeXNp Y2FsIGxhbmVzLgotICovCi1zdHJ1Y3QgZHNpX2hvc3RfY29uZmlnIHsKLQllbnVtIGRzaV9vcF9t b2RlIHBhbmVsX21vZGU7Ci0Jc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgY29tbW9uX2NvbmZp ZzsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyB2aWRlb19lbmdpbmU7 Ci0JCXN0cnVjdCBkc2lfY21kX2VuZ2luZV9jZmcgY21kX2VuZ2luZTsKLQl9IHU7Ci0JdTY0IGVz Y19jbGtfcmF0ZV9oejsKLQl1NjQgYml0X2Nsa19yYXRlX2h6OwotCXN0cnVjdCBkc2lfbW9kZV9p bmZvIHZpZGVvX3RpbWluZzsKLQlzdHJ1Y3QgZHNpX2xhbmVfbWFwIGxhbmVfbWFwOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8gLSBwcml2YXRlIG1vZGUg aW5mbyB0aGF0IHdpbGwgYmUgYXR0YWNoZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3aXRoIGVhY2ggZHJtIG1vZGUKLSAqIEBjbWRfc2V0czoJCSAgQ29tbWFuZCBzZXRzIG9mIHRo ZSBtb2RlCi0gKiBAcGh5X3RpbWluZ192YWw6ICAgICAgIFBoeSB0aW1pbmcgdmFsdWVzCi0gKiBA cGh5X3RpbWluZ19sZW46ICAgICAgIFBoeSB0aW1pbmcgYXJyYXkgbGVuZ3RoCi0gKiBAcGFuZWxf aml0dGVyOiAgICAgICAgIFBhbmVsIGppdHRlciBmb3IgUlNDIGJhY2tvZmYKLSAqIEBwYW5lbF9w cmVmaWxsX2xpbmVzOiAgUGFuZWwgcHJlZmlsbCBsaW5lcyBmb3IgUlNDCi0gKiBAdG9wb2xvZ3k6 ICAgICAgICAgICAgIFRvcG9sb2d5IHNlbGVjdGVkIGZvciB0aGUgcGFuZWwKLSAqIEBkc2M6ICAg ICAgICAgICAgICAgICAgRFNDIGNvbXByZXNzaW9uIGluZm8KLSAqIEBkc2NfZW5hYmxlZDogICAg ICAgICAgRFNDIGNvbXByZXNzaW9uIGVuYWJsZWQKLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5X21v ZGVfcHJpdl9pbmZvIHsKLQlzdHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgY21kX3NldHNbRFNJX0NN RF9TRVRfTUFYXTsKLQotCXUzMiAqcGh5X3RpbWluZ192YWw7Ci0JdTMyIHBoeV90aW1pbmdfbGVu OwotCi0JdTMyIHBhbmVsX2ppdHRlcl9udW1lcjsKLQl1MzIgcGFuZWxfaml0dGVyX2Rlbm9tOwot CXUzMiBwYW5lbF9wcmVmaWxsX2xpbmVzOwotCi0Jc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5 IHRvcG9sb2d5OwotCXN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyBkc2M7Ci0JYm9vbCBkc2Nf ZW5hYmxlZDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgLSBzcGVjaWZp ZXMgbW9kZSBmb3IgZHNpIGRpc3BsYXkKLSAqIEB0aW1pbmc6ICAgICAgICAgVGltaW5nIHBhcmFt ZXRlcnMgZm9yIHRoZSBwYW5lbC4KLSAqIEBwaXhlbF9jbGtfa2h6OiAgUGl4ZWwgY2xvY2sgaW4g S2h6LgotICogQGRzaV9tb2RlX2ZsYWdzOiBGbGFncyB0byBzaWduYWwgb3RoZXIgZHJtIGNvbXBv bmVudHMgdmlhIHByaXZhdGUgZmxhZ3MKLSAqIEBwcml2X2luZm86ICAgICAgTW9kZSBwcml2YXRl IGluZm8KLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgewotCXN0cnVjdCBkc2lfbW9kZV9p bmZvIHRpbWluZzsKLQl1MzIgcGl4ZWxfY2xrX2toejsKLQl1MzIgZHNpX21vZGVfZmxhZ3M7Ci0J c3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm87Ci19OwotCi0vKioK LSAqIHN0cnVjdCBkc2lfcmVjdCAtIGRzaSByZWN0YW5nbGUgcmVwcmVzZW50YXRpb24KLSAqIE5v dGU6IGRwdV9yZWN0IGlzIGFsc28gdXNpbmcgdTE2LCB0aGlzIG11c3QgYmUgbWFpbnRhaW5lZCBm b3IgbWVtY3B5Ci0gKi8KLXN0cnVjdCBkc2lfcmVjdCB7Ci0JdTE2IHg7Ci0JdTE2IHk7Ci0JdTE2 IHc7Ci0JdTE2IGg7Ci19OwotCi0vKioKLSAqIGRzaV9yZWN0X2ludGVyc2VjdCAtIGludGVyc2Vj dCB0d28gcmVjdGFuZ2xlcwotICogQHIxOiBmaXJzdCByZWN0YW5nbGUKLSAqIEByMjogc2Npc3Nv ciByZWN0YW5nbGUKLSAqIEByZXN1bHQ6IHJlc3VsdCByZWN0YW5nbGUsIGFsbCAwJ3Mgb24gbm8g aW50ZXJzZWN0aW9uIGZvdW5kCi0gKi8KLXZvaWQgZHNpX3JlY3RfaW50ZXJzZWN0KGNvbnN0IHN0 cnVjdCBkc2lfcmVjdCAqcjEsCi0JCWNvbnN0IHN0cnVjdCBkc2lfcmVjdCAqcjIsCi0JCXN0cnVj dCBkc2lfcmVjdCAqcmVzdWx0KTsKLQotLyoqCi0gKiBkc2lfcmVjdF9pc19lcXVhbCAtIGNvbXBh cmVzIHR3byByZWN0cwotICogQHIxOiByZWN0IHZhbHVlIHRvIGNvbXBhcmUKLSAqIEByMjogcmVj dCB2YWx1ZSB0byBjb21wYXJlCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWN0cyBhcmUg c2FtZQotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgZHNpX3JlY3RfaXNfZXF1YWwoc3RydWN0IGRz aV9yZWN0ICpyMSwKLQkJc3RydWN0IGRzaV9yZWN0ICpyMikKLXsKLQlyZXR1cm4gcjEtPnggPT0g cjItPnggJiYgcjEtPnkgPT0gcjItPnkgJiYgcjEtPncgPT0gcjItPncgJiYKLQkJCXIxLT5oID09 IHIyLT5oOwotfQotCi1zdHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gewotCXVpbnQzMl90IGV2ZW50 X2lkeDsKLQl2b2lkICpldmVudF91c3JfcHRyOwotCi0JaW50ICgqZXZlbnRfY2IpKHZvaWQgKmV2 ZW50X3Vzcl9wdHIsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwgdWludDMyX3QgaW5zdGFuY2VfaWR4 LAotCQl1aW50MzJfdCBkYXRhMCwgdWludDMyX3QgZGF0YTEsCi0JCXVpbnQzMl90IGRhdGEyLCB1 aW50MzJfdCBkYXRhMyk7Ci19OwotCi0jZW5kaWYgLyogX0RTSV9ERUZTX0hfICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDMxYjdkN2UuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDIyMSArMCww IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQK LSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNkZWZpbmUgcHJf Zm10KGZtdCkJIm1zbS1kc2ktZGlzcGxheTpbJXNdICIgZm10LCBfX2Z1bmNfXwotCi0jaW5jbHVk ZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgv ZXJyLmg+Ci0KLSNpbmNsdWRlICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAiZHB1X2Nvbm5lY3Rvci5o IgotI2luY2x1ZGUgIm1zbV9tbXUuaCIKLSNpbmNsdWRlICJkc2lfZGlzcGxheS5oIgotI2luY2x1 ZGUgImRzaV9wYW5lbC5oIgotI2luY2x1ZGUgImRzaV9jdHJsLmgiCi0jaW5jbHVkZSAiZHNpX2N0 cmxfaHcuaCIKLSNpbmNsdWRlICJkc2lfZHJtLmgiCi0jaW5jbHVkZSAiZHNpX2Nsay5oIgotI2lu Y2x1ZGUgImRzaV9wd3IuaCIKLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLSNkZWZpbmUgdG9fZHNp X2Rpc3BsYXkoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkc2lfZGlzcGxheSwgaG9zdCkKLSNk ZWZpbmUgSU5UX0JBU0VfMTAgMTAKLSNkZWZpbmUgTk9fT1ZFUlJJREUgLTEKLQotI2RlZmluZSBN SVNSX0JVRkZfU0laRQkyNTYKLQotc3RhdGljIERFRklORV9NVVRFWChkc2lfZGlzcGxheV9saXN0 X2xvY2spOwotc3RhdGljIExJU1RfSEVBRChkc2lfZGlzcGxheV9saXN0KTsKLXN0YXRpYyBjaGFy IGRzaV9kaXNwbGF5X3ByaW1hcnlbTUFYX0NNRExJTkVfUEFSQU1fTEVOXTsKLXN0YXRpYyBjaGFy IGRzaV9kaXNwbGF5X3NlY29uZGFyeVtNQVhfQ01ETElORV9QQVJBTV9MRU5dOwotc3RhdGljIHN0 cnVjdCBkc2lfZGlzcGxheV9ib290X3BhcmFtIGJvb3RfZGlzcGxheXNbTUFYX0RTSV9BQ1RJVkVf RElTUExBWV07Ci1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpkZWZhdWx0X2FjdGl2ZV9ub2Rl Owotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHNpX2Rpc3BsYXlfZHRfbWF0Y2hb XSA9IHsKLQl7LmNvbXBhdGlibGUgPSAicWNvbSxkc2ktZGlzcGxheSJ9LAotCXt9Ci19OwotCi1z dGF0aWMgc3RydWN0IGRzaV9kaXNwbGF5ICptYWluX2Rpc3BsYXk7Ci0KLXZvaWQgZHNpX3JlY3Rf aW50ZXJzZWN0KGNvbnN0IHN0cnVjdCBkc2lfcmVjdCAqcjEsCi0JCWNvbnN0IHN0cnVjdCBkc2lf cmVjdCAqcjIsCi0JCXN0cnVjdCBkc2lfcmVjdCAqcmVzdWx0KQotewotCWludCBsLCB0LCByLCBi OwotCi0JaWYgKCFyMSB8fCAhcjIgfHwgIXJlc3VsdCkKLQkJcmV0dXJuOwotCi0JbCA9IG1heChy MS0+eCwgcjItPngpOwotCXQgPSBtYXgocjEtPnksIHIyLT55KTsKLQlyID0gbWluKChyMS0+eCAr IHIxLT53KSwgKHIyLT54ICsgcjItPncpKTsKLQliID0gbWluKChyMS0+eSArIHIxLT5oKSwgKHIy LT55ICsgcjItPmgpKTsKLQotCWlmIChyIDw9IGwgfHwgYiA8PSB0KSB7Ci0JCW1lbXNldChyZXN1 bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7Ci0JfSBlbHNlIHsKLQkJcmVzdWx0LT54ID0gbDsKLQkJ cmVzdWx0LT55ID0gdDsKLQkJcmVzdWx0LT53ID0gciAtIGw7Ci0JCXJlc3VsdC0+aCA9IGIgLSB0 OwotCX0KLX0KLQotaW50IGRzaV9kaXNwbGF5X3NldF9iYWNrbGlnaHQodm9pZCAqZGlzcGxheSwg dTMyIGJsX2x2bCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRzaV9kaXNwbGF5ID0gZGlzcGxh eTsKLQlzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbDsKLQl1MzIgYmxfc2NhbGUsIGJsX3NjYWxlX2Fk OwotCXU2NCBibF90ZW1wOwotCWludCByYyA9IDA7Ci0KLQlpZiAoZHNpX2Rpc3BsYXkgPT0gTlVM TCB8fCBkc2lfZGlzcGxheS0+cGFuZWwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlw YW5lbCA9IGRzaV9kaXNwbGF5LT5wYW5lbDsKLQotCWlmICghZHNpX3BhbmVsX2luaXRpYWxpemVk KHBhbmVsKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYW5lbC0+YmxfY29uZmlnLmJsX2xldmVs ID0gYmxfbHZsOwotCi0JLyogc2NhbGUgYmFja2xpZ2h0ICovCi0JYmxfc2NhbGUgPSBwYW5lbC0+ YmxfY29uZmlnLmJsX3NjYWxlOwotCWJsX3RlbXAgPSBibF9sdmwgKiBibF9zY2FsZSAvIE1BWF9C TF9TQ0FMRV9MRVZFTDsKLQotCWJsX3NjYWxlX2FkID0gcGFuZWwtPmJsX2NvbmZpZy5ibF9zY2Fs ZV9hZDsKLQlibF90ZW1wID0gKHUzMilibF90ZW1wICogYmxfc2NhbGVfYWQgLyBNQVhfQURfQkxf U0NBTEVfTEVWRUw7Ci0KLQlwcl9kZWJ1ZygiYmxfc2NhbGUgPSAldSwgYmxfc2NhbGVfYWQgPSAl dSwgYmxfbHZsID0gJXVcbiIsCi0JCWJsX3NjYWxlLCBibF9zY2FsZV9hZCwgKHUzMilibF90ZW1w KTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZHNpX2Rpc3BsYXktPmRzaV9jbGtfaGFu ZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAg ICAgIGRzaV9kaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBk c2lfcGFuZWxfc2V0X2JhY2tsaWdodChwYW5lbCwgKHUzMilibF90ZW1wKTsKLQlpZiAocmMpCi0J CXByX2VycigidW5hYmxlIHRvIHNldCBiYWNrbGlnaHRcbiIpOwotCi0JcmMgPSBkc2lfZGlzcGxh eV9jbGtfY3RybChkc2lfZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09SRV9DTEss IERTSV9DTEtfT0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkaXNh YmxlIERTSSBjb3JlIGNsb2NrcywgcmM9JWRcbiIsCi0JCSAgICAgICBkc2lfZGlzcGxheS0+bmFt ZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1p bnQgZHNpX2Rpc3BsYXlfc29mdF9yZXNldCh2b2lkICpkaXNwbGF5KQotewotCXN0cnVjdCBkc2lf ZGlzcGxheSAqZHNpX2Rpc3BsYXk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0J aW50IHJjID0gMDsKLQlpbnQgaTsKLQotCWlmICghZGlzcGxheSkKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQlkc2lfZGlzcGxheSA9IGRpc3BsYXk7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IGRzaV9kaXNw bGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkc2lfZGlzcGxheS0+Y3RybFtpXTsK LQkJcmMgPSBkc2lfY3RybF9zb2Z0X3Jlc2V0KGN0cmwtPmN0cmwpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiWyVzXSBmYWlsZWQgdG8gc29mdCByZXNldCBob3N0XyVkLCByYz0lZFxuIiwKLQkJ CQkJZHNpX2Rpc3BsYXktPm5hbWUsIGksIHJjKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0 dXJuIHJjOwotfQotCi1lbnVtIGRzaV9waXhlbF9mb3JtYXQgZHNpX2Rpc3BsYXlfZ2V0X2RzdF9m b3JtYXQodm9pZCAqZGlzcGxheSkKLXsKLQllbnVtIGRzaV9waXhlbF9mb3JtYXQgZm9ybWF0ID0g RFNJX1BJWEVMX0ZPUk1BVF9NQVg7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkc2lfZGlzcGxheSA9 IChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKilkaXNwbGF5OwotCi0JaWYgKCFkc2lfZGlzcGxheSB8fCAh ZHNpX2Rpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXMocykgZHNpX2Rp c3BsYXkgJXBLLCBwYW5lbCAlcEtcbiIsCi0JCQlkc2lfZGlzcGxheSwKLQkJCSgoZHNpX2Rpc3Bs YXkpID8gZHNpX2Rpc3BsYXktPnBhbmVsIDogTlVMTCkpOwotCQlyZXR1cm4gZm9ybWF0OwotCX0K LQotCWZvcm1hdCA9IGRzaV9kaXNwbGF5LT5wYW5lbC0+aG9zdF9jb25maWcuZHN0X2Zvcm1hdDsK LQlyZXR1cm4gZm9ybWF0OwotfQotCi1zdGF0aWMgdm9pZCBfZHNpX2Rpc3BsYXlfc2V0dXBfbWlz cihzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAw OyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWRzaV9jdHJsX3NldHVwX21pc3Io ZGlzcGxheS0+Y3RybFtpXS5jdHJsLAotCQkJCWRpc3BsYXktPm1pc3JfZW5hYmxlLAotCQkJCWRp c3BsYXktPm1pc3JfZnJhbWVfY291bnQpOwotCX0KLX0KLQotaW50IGRzaV9kaXNwbGF5X3NldF9w b3dlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQlpbnQgcG93ZXJfbW9kZSwg dm9pZCAqZGlzcCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBkaXNwOwotCWlu dCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2Vy cigiaW52YWxpZCBkaXNwbGF5L3BhbmVsXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J c3dpdGNoIChwb3dlcl9tb2RlKSB7Ci0JY2FzZSBEUFVfTU9ERV9EUE1TX0xQMToKLQkJcmMgPSBk c2lfcGFuZWxfc2V0X2xwMShkaXNwbGF5LT5wYW5lbCk7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX01P REVfRFBNU19MUDI6Ci0JCXJjID0gZHNpX3BhbmVsX3NldF9scDIoZGlzcGxheS0+cGFuZWwpOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlyYyA9IGRzaV9wYW5lbF9zZXRfbm9scChkaXNwbGF5LT5w YW5lbCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGRl YnVnZnNfZHVtcF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICAgY2hhciBf X3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgICAgIHNpemVfdCB1c2VyX2xlbiwKLQkJCQkgICAgICBs b2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gZmlsZS0+cHJp dmF0ZV9kYXRhOwotCWNoYXIgKmJ1ZjsKLQl1MzIgbGVuID0gMDsKLQlpbnQgaTsKLQotCWlmICgh ZGlzcGxheSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwot Ci0JYnVmID0ga3phbGxvYyhTWl80SywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVy biAtRU5PTUVNOwotCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgKFNaXzRLIC0gbGVuKSwg Im5hbWUgPSAlc1xuIiwgZGlzcGxheS0+bmFtZSk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxl biwgKFNaXzRLIC0gbGVuKSwKLQkJCSJcdFJlc29sdXRpb24gPSAlZHglZFxuIiwKLQkJCWRpc3Bs YXktPmNvbmZpZy52aWRlb190aW1pbmcuaF9hY3RpdmUsCi0JCQlkaXNwbGF5LT5jb25maWcudmlk ZW9fdGltaW5nLnZfYWN0aXZlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2Nv dW50OyBpKyspIHsKLQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgKFNaXzRLIC0gbGVuKSwK LQkJCQkiXHRDVFJMXyVkOlxuXHRcdGN0cmwgPSAlc1xuXHRcdHBoeSA9ICVzXG4iLAotCQkJCWks IGRpc3BsYXktPmN0cmxbaV0uY3RybC0+bmFtZSwKLQkJCQlkaXNwbGF5LT5jdHJsW2ldLnBoeS0+ bmFtZSk7Ci0JfQotCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgKFNaXzRLIC0gbGVuKSwK LQkJCSJcdFBhbmVsID0gJXNcbiIsIGRpc3BsYXktPnBhbmVsLT5uYW1lKTsKLQotCWxlbiArPSBz bnByaW50ZihidWYgKyBsZW4sIChTWl80SyAtIGxlbiksCi0JCQkiXHRDbG9jayBtYXN0ZXIgPSAl c1xuIiwKLQkJCWRpc3BsYXktPmN0cmxbZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHhdLmN0cmwtPm5h bWUpOwotCi0JaWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZiwgYnVmLCBsZW4pKSB7Ci0JCWtmcmVl KGJ1Zik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCSpwcG9zICs9IGxlbjsKLQotCWtmcmVl KGJ1Zik7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgZGVidWdmc19taXNyX3Nl dHVwKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVm LAotCQkJCSAgc2l6ZV90IHVzZXJfbGVuLAotCQkJCSAgbG9mZl90ICpwcG9zKQotewotCXN0cnVj dCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpidWY7 Ci0JaW50IHJjID0gMDsKLQlzaXplX3QgbGVuOwotCXUzMiBlbmFibGUsIGZyYW1lX2NvdW50Owot Ci0JaWYgKCFkaXNwbGF5KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmICgqcHBvcykKLQkJcmV0 dXJuIDA7Ci0KLQlidWYgPSBremFsbG9jKE1JU1JfQlVGRl9TSVpFLCBHRlBfS0VSTkVMKTsKLQlp ZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBsZWF2ZSByb29tIGZvciB0ZXJtaW5h dGlvbiBjaGFyICovCi0JbGVuID0gbWluX3Qoc2l6ZV90LCB1c2VyX2xlbiwgTUlTUl9CVUZGX1NJ WkUgLSAxKTsKLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkgewotCQly YyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JYnVmW2xlbl0gPSAnXDAnOyAvKiB0 ZXJtaW5hdGUgdGhlIHN0cmluZyAqLwotCi0JaWYgKHNzY2FuZihidWYsICIldSAldSIsICZlbmFi bGUsICZmcmFtZV9jb3VudCkgIT0gMikgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi0JZGlzcGxheS0+bWlzcl9lbmFibGUgPSBlbmFibGU7Ci0JZGlzcGxheS0+bWlzcl9m cmFtZV9jb3VudCA9IGZyYW1lX2NvdW50OwotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxh eV9sb2NrKTsKLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFu ZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAg ICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JX2RzaV9kaXNw bGF5X3NldHVwX21pc3IoZGlzcGxheSk7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRp c3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09GRik7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kgY29yZSBjbG9j a3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIHVubG9j azsKLQl9Ci0KLQlyYyA9IHVzZXJfbGVuOwotdW5sb2NrOgotCW11dGV4X3VubG9jaygmZGlzcGxh eS0+ZGlzcGxheV9sb2NrKTsKLWVycm9yOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJjOwotfQot Ci1zdGF0aWMgc3NpemVfdCBkZWJ1Z2ZzX21pc3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJ CQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSBzaXplX3QgdXNlcl9sZW4sCi0JCQkJIGxv ZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBmaWxlLT5wcml2 YXRlX2RhdGE7Ci0JY2hhciAqYnVmOwotCXUzMiBsZW4gPSAwOwotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRzaV9jdHJsICpkc2lfY3RybDsKLQlpbnQgaTsKLQl1MzIgbWlzcjsKLQlzaXplX3QgbWF4 X2xlbiA9IG1pbl90KHNpemVfdCwgdXNlcl9sZW4sIE1JU1JfQlVGRl9TSVpFKTsKLQotCWlmICgh ZGlzcGxheSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoKnBwb3MpCi0JCXJldHVybiAwOwot Ci0JYnVmID0ga3phbGxvYyhtYXhfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKLQkJcmV0 dXJuIC1FTk9NRU07Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJj ID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lf Q09SRV9DTEssIERTSV9DTEtfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVk IHRvIGVuYWJsZSBEU0kgY29yZSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+ bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5 LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJZHNpX2N0cmwgPSBkaXNwbGF5LT5jdHJsW2ldLmN0cmw7 Ci0JCW1pc3IgPSBkc2lfY3RybF9jb2xsZWN0X21pc3IoZGlzcGxheS0+Y3RybFtpXS5jdHJsKTsK LQotCQlsZW4gKz0gc25wcmludGYoKGJ1ZiArIGxlbiksIG1heF9sZW4gLSBsZW4sCi0JCQkiRFNJ XyVkIE1JU1I6IDB4JXhcbiIsIGRzaV9jdHJsLT5jZWxsX2luZGV4LCBtaXNyKTsKLQotCQlpZiAo bGVuID49IG1heF9sZW4pCi0JCQlicmVhazsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19j dHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09G Rik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBEU0kgY29y ZSBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3Rv IGVycm9yOwotCX0KLQotCWlmIChjb3B5X3RvX3VzZXIodXNlcl9idWYsIGJ1ZiwgbGVuKSkgewot CQlyYyA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JKnBwb3MgKz0gbGVuOwotCi1l cnJvcjoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0Ja2ZyZWUoYnVm KTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9u cyBkdW1wX2luZm9fZm9wcyA9IHsKLQkub3BlbiA9IHNpbXBsZV9vcGVuLAotCS5yZWFkID0gZGVi dWdmc19kdW1wX2luZm9fcmVhZCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVy YXRpb25zIG1pc3JfZGF0YV9mb3BzID0gewotCS5vcGVuID0gc2ltcGxlX29wZW4sCi0JLnJlYWQg PSBkZWJ1Z2ZzX21pc3JfcmVhZCwKLQkud3JpdGUgPSBkZWJ1Z2ZzX21pc3Jfc2V0dXAsCi19Owot Ci1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkg KmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpkdW1wX2Zp bGUsICptaXNyX2RhdGE7Ci0KLQlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlzcGxheS0+bmFt ZSwgTlVMTCk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGRpcikpIHsKLQkJcmMgPSBQVFJfRVJSKGRp cik7Ci0JCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGNyZWF0ZSBkaXIgZmFpbGVkLCByYyA9ICVkXG4i LAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWR1 bXBfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImR1bXBfaW5mbyIsCi0JCQkJCTA0MDAsCi0J CQkJCWRpciwKLQkJCQkJZGlzcGxheSwKLQkJCQkJJmR1bXBfaW5mb19mb3BzKTsKLQlpZiAoSVNf RVJSX09SX05VTEwoZHVtcF9maWxlKSkgewotCQlyYyA9IFBUUl9FUlIoZHVtcF9maWxlKTsKLQkJ cHJfZXJyKCJbJXNdIGRlYnVnZnMgY3JlYXRlIGR1bXAgaW5mbyBmaWxlIGZhaWxlZCwgcmM9JWRc biIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfcmVtb3ZlX2Rp cjsKLQl9Ci0KLQltaXNyX2RhdGEgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtaXNyX2RhdGEiLAot CQkJCQkwNjAwLAotCQkJCQlkaXIsCi0JCQkJCWRpc3BsYXksCi0JCQkJCSZtaXNyX2RhdGFfZm9w cyk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKG1pc3JfZGF0YSkpIHsKLQkJcmMgPSBQVFJfRVJSKG1p c3JfZGF0YSk7Ci0JCXByX2VycigiWyVzXSBkZWJ1Z2ZzIGNyZWF0ZSBtaXNyIGRhdGFmaWxlIGZh aWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJy b3JfcmVtb3ZlX2RpcjsKLQl9Ci0KLQlkaXNwbGF5LT5yb290ID0gZGlyOwotCXJldHVybiByYzsK LWVycm9yX3JlbW92ZV9kaXI6Ci0JZGVidWdmc19yZW1vdmUoZGlyKTsKLWVycm9yOgotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9kZWJ1Z2ZzX2RlaW5pdChzdHJ1Y3Qg ZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRpc3Bs YXktPnJvb3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkanVzdF90aW1pbmdf YnlfY3RybF9jb3VudChjb25zdCBzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkJCXN0 cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKQotewotCWlmIChkaXNwbGF5LT5jdHJsX2NvdW50 ID4gMSkgewotCQltb2RlLT50aW1pbmcuaF9hY3RpdmUgLz0gZGlzcGxheS0+Y3RybF9jb3VudDsK LQkJbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2ggLz0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJ bW9kZS0+dGltaW5nLmhfc3luY193aWR0aCAvPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQltb2Rl LT50aW1pbmcuaF9iYWNrX3BvcmNoIC89IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCW1vZGUtPnRp bWluZy5oX3NrZXcgLz0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJbW9kZS0+cGl4ZWxfY2xrX2to eiAvPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCX0KLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxh eV9pc191bHBzX3JlcV92YWxpZChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCWJvb2wg ZW5hYmxlKQotewotCS8qIFRPRE86IG1ha2UgY2hlY2tzIGJhc2VkIG9uIGNvbnQuIHNwbGFzaCAq LwotCWludCBzcGxhc2hfZW5hYmxlZCA9IGZhbHNlOwotCi0JcHJfZGVidWcoImNoZWNraW5nIHVs cHMgcmVxIHZhbGlkaXR5XG4iKTsKLQotCWlmICghZHNpX3BhbmVsX3VscHNfZmVhdHVyZV9lbmFi bGVkKGRpc3BsYXktPnBhbmVsKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogVE9ETzogVUxQUyBk dXJpbmcgc3VzcGVuZCAqLwotCWlmICghZHNpX3BhbmVsX2luaXRpYWxpemVkKGRpc3BsYXktPnBh bmVsKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGVuYWJsZSAmJiBkaXNwbGF5LT51bHBzX2Vu YWJsZWQpIHsKLQkJcHJfZGVidWcoIlVMUFMgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJcmV0dXJu IGZhbHNlOwotCX0gZWxzZSBpZiAoIWVuYWJsZSAmJiAhZGlzcGxheS0+dWxwc19lbmFibGVkKSB7 Ci0JCXByX2RlYnVnKCJVTFBTIGFscmVhZHkgZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCi0JLyoKLQkgKiBObyBuZWVkIHRvIGVudGVyIFVMUFMgd2hlbiB0cmFuc2l0aW9uaW5n IGZyb20gc3BsYXNoIHNjcmVlbiB0bwotCSAqIGJvb3QgYW5pbWF0aW9uIHNpbmNlIGl0IGlzIGV4 cGVjdGVkIHRoYXQgdGhlIGNsb2NrcyB3b3VsZCBiZSB0dXJuZWQKLQkgKiByaWdodCBiYWNrIG9u LgotCSAqLwotCWlmIChlbmFibGUgJiYgc3BsYXNoX2VuYWJsZWQpCi0JCXJldHVybiBmYWxzZTsK LQotCXJldHVybiB0cnVlOwotfQotCi0KLS8qKgotICogZHNpX2Rpc3BsYXlfc2V0X3VscHMoKSAt IHNldCBVTFBTIHN0YXRlIGZvciBEU0kgbGFuZXMuCi0gKiBAZHNpX2Rpc3BsYXk6ICAgICAgICAg RFNJIGRpc3BsYXkgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgIGVuYWJsZS9kaXNhYmxl IFVMUFMuCi0gKgotICogVUxQUyBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBhZnRlciBEU0kgaG9z dCBlbmdpbmUgaXMgdHVybmVkIG9uLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwot c3RhdGljIGludCBkc2lfZGlzcGxheV9zZXRfdWxwcyhzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3Bs YXksIGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBk c2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJ cHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlm ICghZHNpX2Rpc3BsYXlfaXNfdWxwc19yZXFfdmFsaWQoZGlzcGxheSwgZW5hYmxlKSkgewotCQlw cl9kZWJ1ZygiJXM6IHNraXBwaW5nIFVMUFMgY29uZmlnLCBlbmFibGU9JWRcbiIsCi0JCQlfX2Z1 bmNfXywgZW5hYmxlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0 cmxbZGlzcGxheS0+Y21kX21hc3Rlcl9pZHhdOwotCi0JcmMgPSBkc2lfY3RybF9zZXRfdWxwcyht X2N0cmwtPmN0cmwsIGVuYWJsZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiVWxwcyBjb250cm9s bGVyIHN0YXRlIGNoYW5nZSglZCkgZmFpbGVkXG4iLCBlbmFibGUpOwotCQlyZXR1cm4gcmM7Ci0J fQotCi0JcmMgPSBkc2lfcGh5X3NldF91bHBzKG1fY3RybC0+cGh5LCAmZGlzcGxheS0+Y29uZmln LCBlbmFibGUsCi0JCQkJZGlzcGxheS0+Y2xhbXBfZW5hYmxlZCk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiVWxwcyBQSFkgc3RhdGUgY2hhbmdlKCVkKSBmYWlsZWRcbiIsIGVuYWJsZSk7Ci0JCXJl dHVybiByYzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsr KSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChj dHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9jdHJsX3NldF91bHBz KGN0cmwtPmN0cmwsIGVuYWJsZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJVbHBzIGNvbnRy b2xsZXIgc3RhdGUgY2hhbmdlKCVkKSBmYWlsZWRcbiIsCi0JCQkJZW5hYmxlKTsKLQkJCXJldHVy biByYzsKLQkJfQotCi0JCXJjID0gZHNpX3BoeV9zZXRfdWxwcyhjdHJsLT5waHksICZkaXNwbGF5 LT5jb25maWcsIGVuYWJsZSwKLQkJCQkJZGlzcGxheS0+Y2xhbXBfZW5hYmxlZCk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJVbHBzIFBIWSBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZFxuIiwgZW5h YmxlKTsKLQkJCXJldHVybiByYzsKLQkJfQotCi0JfQotCWRpc3BsYXktPnVscHNfZW5hYmxlZCA9 IGVuYWJsZTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV9zZXRfY2xhbXAo KSAtIHNldCBjbGFtcCBzdGF0ZSBmb3IgRFNJIElPLgotICogQGRzaV9kaXNwbGF5OiAgICAgICAg IERTSSBkaXNwbGF5IGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICBlbmFibGUvZGlzYWJs ZSBjbGFtcGluZy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLXN0YXRpYyBpbnQg ZHNpX2Rpc3BsYXlfc2V0X2NsYW1wKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBl bmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaSA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5 X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0JYm9vbCB1bHBzX2VuYWJsZWQgPSBmYWxzZTsKLQotCi0J aWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFz dGVyX2lkeF07Ci0JdWxwc19lbmFibGVkID0gZGlzcGxheS0+dWxwc19lbmFibGVkOwotCi0JcmMg PSBkc2lfY3RybF9zZXRfY2xhbXBfc3RhdGUobV9jdHJsLT5jdHJsLCBlbmFibGUsIHVscHNfZW5h YmxlZCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRFNJIENsYW1wIHN0YXRlIGNoYW5nZSglZCkg ZmFpbGVkXG4iLCBlbmFibGUpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8 IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07 Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0K LQkJcmMgPSBkc2lfY3RybF9zZXRfY2xhbXBfc3RhdGUoY3RybC0+Y3RybCwgZW5hYmxlLCB1bHBz X2VuYWJsZWQpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiRFNJIENsYW1wIHN0YXRlIGNoYW5n ZSglZCkgZmFpbGVkXG4iLCBlbmFibGUpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCWRpc3Bs YXktPmNsYW1wX2VuYWJsZWQgPSBlbmFibGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNp X2Rpc3BsYXlfc2V0dXBfY3RybCgpIC0gc2V0dXAgRFNJIGNvbnRyb2xsZXIuCi0gKiBAZHNpX2Rp c3BsYXk6ICAgICAgICAgRFNJIGRpc3BsYXkgaGFuZGxlLgotICoKLSAqIFJldHVybjogZXJyb3Ig Y29kZS4KLSAqLwotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX3NldHVwKHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpID0gMDsKLQlzdHJ1Y3Qg ZHNpX2Rpc3BsYXlfY3RybCAqY3RybCwgKm1fY3RybDsKLQotCi0JaWYgKCFkaXNwbGF5KSB7Ci0J CXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlt X2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lkeF07Ci0JcmMgPSBk c2lfY3RybF9zZXR1cChtX2N0cmwtPmN0cmwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkRTSSBj b250cm9sbGVyIHNldHVwIGZhaWxlZFxuIik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlmb3IgKGkg PSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+ Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250 aW51ZTsKLQotCQlyYyA9IGRzaV9jdHJsX3NldHVwKGN0cmwtPmN0cmwpOwotCQlpZiAocmMpIHsK LQkJCXByX2VycigiRFNJIGNvbnRyb2xsZXIgc2V0dXAgZmFpbGVkXG4iKTsKLQkJCXJldHVybiBy YzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9waHlf ZW5hYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3Bs YXlfcGh5X2lkbGVfb24oKSAtIGVuYWJsZSBEU0kgUEhZIHdoaWxlIGNvbWluZyBvdXQgb2YgaWRs ZSBzY3JlZW4uCi0gKiBAZHNpX2Rpc3BsYXk6ICAgICAgICAgRFNJIGRpc3BsYXkgaGFuZGxlLgot ICogQGVuYWJsZTogICAgICAgICAgIGVuYWJsZS9kaXNhYmxlIERTSSBQSFkuCi0gKgotICogUmV0 dXJuOiBlcnJvciBjb2RlLgotICovCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9pZGxlX29u KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJYm9vbCBtbXNzX2NsYW1wKQotewotCWlu dCByYyA9IDA7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmws ICpjdHJsOwotCi0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChtbXNzX2NsYW1wICYmICFkaXNwbGF5 LT5waHlfaWRsZV9wb3dlcl9vZmYpIHsKLQkJZHNpX2Rpc3BsYXlfcGh5X2VuYWJsZShkaXNwbGF5 KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+ Y21kX21hc3Rlcl9pZHhdOwotCXJjID0gZHNpX3BoeV9pZGxlX2N0cmwobV9jdHJsLT5waHksIHRy dWUpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkRTSSBjb250cm9sbGVyIHNldHVwIGZhaWxlZFxu Iik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9j b3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5j dHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9waHlf aWRsZV9jdHJsKGN0cmwtPnBoeSwgdHJ1ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJEU0kg Y29udHJvbGxlciBzZXR1cCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCWRp c3BsYXktPnBoeV9pZGxlX3Bvd2VyX29mZiA9IGZhbHNlOwotCXJldHVybiAwOwotfQotCi0vKioK LSAqIGRzaV9kaXNwbGF5X3BoeV9pZGxlX29mZigpIC0gZGlzYWJsZSBEU0kgUEhZIHdoaWxlIGdv aW5nIHRvIGlkbGUgc2NyZWVuLgotICogQGRzaV9kaXNwbGF5OiAgICAgICAgIERTSSBkaXNwbGF5 IGhhbmRsZS4KLSAqIEBlbmFibGU6ICAgICAgICAgICBlbmFibGUvZGlzYWJsZSBEU0kgUEhZLgot ICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotc3RhdGljIGludCBkc2lfZGlzcGxheV9w aHlfaWRsZV9vZmYoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7 Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwot Ci0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWRpc3BsYXktPnBhbmVsLT5hbGxvd19waHlfcG93ZXJf b2ZmKSB7Ci0JCXByX2RlYnVnKCJwYW5lbCBkb2Vzbid0IHN1cHBvcnQgdGhpcyBmZWF0dXJlXG4i KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxheS0+ Y21kX21hc3Rlcl9pZHhdOwotCi0JcmMgPSBkc2lfcGh5X2lkbGVfY3RybChtX2N0cmwtPnBoeSwg ZmFsc2UpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBjbWQg ZW5naW5lLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJcmV0dXJu IHJjOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsK LQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwg PT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX3BoeV9pZGxlX2N0cmwoY3Ry bC0+cGh5LCBmYWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJEU0kgY29udHJvbGxlciBz ZXR1cCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCWRpc3BsYXktPnBoeV9p ZGxlX3Bvd2VyX29mZiA9IHRydWU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZHNpX2Rpc3BsYXlf ZW5hYmxlX2V2ZW50KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJdWludDMyX3QgZXZl bnRfaWR4LCBzdHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gKmV2ZW50X2luZm8sCi0JCWJvb2wgZW5h YmxlKQotewotCXVpbnQzMl90IGlycV9zdGF0dXNfaWR4ID0gRFNJX1NUQVRVU19JTlRFUlJVUFRf Q09VTlQ7Ci0JaW50IGk7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRp c3BsYXlcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGV2ZW50X2luZm8pCi0JCWV2ZW50X2lu Zm8tPmV2ZW50X2lkeCA9IGV2ZW50X2lkeDsKLQotCXN3aXRjaCAoZXZlbnRfaWR4KSB7Ci0JY2Fz ZSBEUFVfQ09OTl9FVkVOVF9WSURfRE9ORToKLQkJaXJxX3N0YXR1c19pZHggPSBEU0lfU0lOVF9W SURFT19NT0RFX0ZSQU1FX0RPTkU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX0NPTk5fRVZFTlRfQ01E X0RPTkU6Ci0JCWlycV9zdGF0dXNfaWR4ID0gRFNJX1NJTlRfQ01EX0ZSQU1FX0RPTkU7Ci0JCWJy ZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIG5vdGhpbmcgdG8gZG8gKi8KLQkJcHJfZGVidWcoIlslc10g dW5oYW5kbGVkIGV2ZW50ICVkXG4iLCBkaXNwbGF5LT5uYW1lLCBldmVudF9pZHgpOwotCQlyZXR1 cm47Ci0JfQotCi0JaWYgKGVuYWJsZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3Ry bF9jb3VudDsgaSsrKQotCQkJZHNpX2N0cmxfZW5hYmxlX3N0YXR1c19pbnRlcnJ1cHQoCi0JCQkJ CWRpc3BsYXktPmN0cmxbaV0uY3RybCwgaXJxX3N0YXR1c19pZHgsCi0JCQkJCWV2ZW50X2luZm8p OwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKysp Ci0JCQlkc2lfY3RybF9kaXNhYmxlX3N0YXR1c19pbnRlcnJ1cHQoCi0JCQkJCWRpc3BsYXktPmN0 cmxbaV0uY3RybCwgaXJxX3N0YXR1c19pZHgpOwotCX0KLX0KLQotc3RhdGljIGludCBkc2lfZGlz cGxheV9jdHJsX3Bvd2VyX29uKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQg cmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JLyog U2VxdWVuY2UgZG9lcyBub3QgbWF0dGVyIGZvciBzcGxpdCBkc2kgdXNlY2FzZXMgKi8KLQlmb3Ig KGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxh eS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBk c2lfY3RybF9zZXRfcG93ZXJfc3RhdGUoY3RybC0+Y3RybCwKLQkJCQkJICAgICAgRFNJX0NUUkxf UE9XRVJfVlJFR19PTik7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIEZhaWxlZCB0byBz ZXQgcG93ZXIgc3RhdGUsIHJjPSVkXG4iLAotCQkJICAgICAgIGN0cmwtPmN0cmwtPm5hbWUsIHJj KTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci1lcnJvcjoKLQlmb3Ig KGkgPSBpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwot CQlpZiAoIWN0cmwtPmN0cmwpCi0JCQljb250aW51ZTsKLQkJKHZvaWQpZHNpX2N0cmxfc2V0X3Bv d2VyX3N0YXRlKGN0cmwtPmN0cmwsCi0JCQlEU0lfQ1RSTF9QT1dFUl9WUkVHX09GRik7Ci0JfQot CXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX3Bvd2VyX29mZihz dHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlz dHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCS8qIFNlcXVlbmNlIGRvZXMgbm90IG1h dHRlciBmb3Igc3BsaXQgZHNpIHVzZWNhc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXkt PmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICgh Y3RybC0+Y3RybCkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0X3Bvd2VyX3N0 YXRlKGN0cmwtPmN0cmwsCi0JCQlEU0lfQ1RSTF9QT1dFUl9WUkVHX09GRik7Ci0JCWlmIChyYykg ewotCQkJcHJfZXJyKCJbJXNdIEZhaWxlZCB0byBwb3dlciBvZmYsIHJjPSVkXG4iLAotCQkJICAg ICAgIGN0cmwtPmN0cmwtPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci1lcnJv cjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRzaV9kaXNwbGF5X3BhcnNlX2NtZGxp bmVfdG9wb2xvZ3koc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJCQl1bnNpZ25lZCBp bnQgZGlzcGxheV90eXBlKQotewotCWNoYXIgKmJvb3Rfc3RyID0gTlVMTDsKLQljaGFyICpzdHIg PSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0KLQlpZiAoZGlzcGxheV90eXBlID49IE1B WF9EU0lfQUNUSVZFX0RJU1BMQVkpIHsKLQkJcHJfZXJyKCJkaXNwbGF5X3R5cGU9JWQgbm90IHN1 cHBvcnRlZFxuIiwgZGlzcGxheV90eXBlKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChkaXNwbGF5 X3R5cGUgPT0gRFNJX1BSSU1BUlkpCi0JCWJvb3Rfc3RyID0gZHNpX2Rpc3BsYXlfcHJpbWFyeTsK LQllbHNlCi0JCWJvb3Rfc3RyID0gZHNpX2Rpc3BsYXlfc2Vjb25kYXJ5OwotCi0Jc3RyID0gc3Ry bnN0cihib290X3N0ciwgIjpjb25maWciLCBzdHJsZW4oYm9vdF9zdHIpKTsKLQlpZiAoIXN0cikK LQkJcmV0dXJuOwotCi0JaWYgKGtzdHJ0b2woc3RyICsgc3RybGVuKCI6Y29uZmlnIiksIElOVF9C QVNFXzEwLAotCQkJCSh1bnNpZ25lZCBsb25nICopJnZhbHVlKSkgewotCQlwcl9lcnIoImludmFs aWQgY29uZmlnIGluZGV4IG92ZXJyaWRlOiAlc1xuIiwgYm9vdF9zdHIpOwotCQlyZXR1cm47Ci0J fQotCWRpc3BsYXktPmNtZGxpbmVfdG9wb2xvZ3kgPSB2YWx1ZTsKLQotCXN0ciA9IHN0cm5zdHIo Ym9vdF9zdHIsICI6dGltaW5nIiwgc3RybGVuKGJvb3Rfc3RyKSk7Ci0JaWYgKCFzdHIpCi0JCXJl dHVybjsKLQotCWlmIChrc3RydG9sKHN0ciArIHN0cmxlbigiOnRpbWluZyIpLCBJTlRfQkFTRV8x MCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZ2YWx1ZSkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHRp bWluZyBpbmRleCBvdmVycmlkZTogJXMuIHJlc2V0dGluZyBib3RoIHRpbWluZyBhbmQgY29uZmln XG4iLAotCQkJYm9vdF9zdHIpOwotCQlkaXNwbGF5LT5jbWRsaW5lX3RvcG9sb2d5ID0gTk9fT1ZF UlJJREU7Ci0JCXJldHVybjsKLQl9Ci0JZGlzcGxheS0+Y21kbGluZV90aW1pbmcgPSB2YWx1ZTsK LX0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV9uYW1lX2NvbXBhcmUoKS0gY29tcGFyZSB3aGV0aGVy IERTSSBkaXNwbGF5IG5hbWUgbWF0Y2hlcy4KLSAqIEBub2RlOglQb2ludGVyIHRvIGRldmljZSBu b2RlIHN0cnVjdHVyZQotICogQGRpc3BsYXlfbmFtZTogTmFtZSBvZiBkaXNwbGF5IHRvIHZhbGlk YXRlCi0gKgotICogUmV0dXJuOglyZXR1cm5zIGEgYm9vbCBzcGVjaWZ5aW5nIHdoZXRoZXIgZ2l2 ZW4gZGlzcGxheSBpcyBhY3RpdmUKLSAqLwotc3RhdGljIGJvb2wgZHNpX2Rpc3BsYXlfbmFtZV9j b21wYXJlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCWNvbnN0IGNoYXIgKmRpc3BsYXlf bmFtZSwgaW50IGluZGV4KQotewotCWlmIChpbmRleCA+PSBNQVhfRFNJX0FDVElWRV9ESVNQTEFZ KSB7Ci0JCXByX2VycigiSW52YWxpZCBJbmRleFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0K LQlpZiAoYm9vdF9kaXNwbGF5c1tpbmRleF0uYm9vdF9kaXNwX2VuKSB7Ci0JCWlmICghKHN0cmNt cCgmYm9vdF9kaXNwbGF5c1tpbmRleF0ubmFtZVswXSwgZGlzcGxheV9uYW1lKSkpIHsKLQkJCWJv b3RfZGlzcGxheXNbaW5kZXhdLm5vZGUgPSBub2RlOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9 Ci0JcmV0dXJuIGZhbHNlOwotfQotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3BhcnNlX2Jvb3RfZGlz cGxheV9zZWxlY3Rpb24oKS0gUGFyc2UgRFNJIGJvb3QgZGlzcGxheSBuYW1lCi0gKgotICogUmV0 dXJuOglyZXR1cm5zIGVycm9yIHN0YXR1cwotICovCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3Bh cnNlX2Jvb3RfZGlzcGxheV9zZWxlY3Rpb24odm9pZCkKLXsKLQljaGFyICpwb3MgPSBOVUxMOwot CWNoYXIgZGlzcF9idWZbTUFYX0NNRExJTkVfUEFSQU1fTEVOXSA9IHsnXDAnfTsKLQlpbnQgaSwg aiwgbnVtX2Rpc3BsYXlzOwotCi0JaWYgKHN0cmxlbihkc2lfZGlzcGxheV9wcmltYXJ5KSA9PSAw KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoc3RybGVuKGRzaV9kaXNwbGF5X3NlY29uZGFy eSkgPiAwKSkKLQkJbnVtX2Rpc3BsYXlzID0gTUFYX0RTSV9BQ1RJVkVfRElTUExBWTsKLQllbHNl IHsKLQkJLyoKLQkJICogSW5pdGlhbGl6ZSBzZWNvbmRhcnkgZHNpIHZhcmlhYmxlcwotCQkgKiBm b3IgdGhlIHNlbmFyaW8gd2hlcmUgZHNpX2Rpc3BsYXkxCi0JCSAqIGlzIG51bGwgYnV0IGRzaV9k aXNwbGF5MCBpcyB2YWxpZAotCQkgKi8KLQotCQkvKiBNYXggbnVtYmVyIG9mIGRpc3BsYXlzIHdp bGwgYmUgb25lLT5vbmx5IFByaW1hcnkgKi8KLQkJbnVtX2Rpc3BsYXlzID0gMTsKLQkJYm9vdF9k aXNwbGF5c1tEU0lfU0VDT05EQVJZXS5pc19wcmltYXJ5ID0gZmFsc2U7Ci0JCWJvb3RfZGlzcGxh eXNbRFNJX1NFQ09OREFSWV0ubmFtZVswXSA9ICdcMCc7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8 IG51bV9kaXNwbGF5czsgaSsrKSB7Ci0JCWJvb3RfZGlzcGxheXNbaV0uaXNfcHJpbWFyeSA9IGZh bHNlOwotCQlpZiAoaSA9PSBEU0lfUFJJTUFSWSkgewotCQkJc3RybGNweShkaXNwX2J1ZiwgJmRz aV9kaXNwbGF5X3ByaW1hcnlbMF0sCi0JCQkJc2l6ZW9mKGRzaV9kaXNwbGF5X3ByaW1hcnkpKTsK LQkJCXBvcyA9IHN0cm5zdHIoZGlzcF9idWYsICI6IiwKLQkJCQlzaXplb2YoZHNpX2Rpc3BsYXlf cHJpbWFyeSkpOwotCQl9IGVsc2UgewotCQkJc3RybGNweShkaXNwX2J1ZiwgJmRzaV9kaXNwbGF5 X3NlY29uZGFyeVswXSwKLQkJCQlzaXplb2YoZHNpX2Rpc3BsYXlfc2Vjb25kYXJ5KSk7Ci0JCQlw b3MgPSBzdHJuc3RyKGRpc3BfYnVmLCAiOiIsCi0JCQkJc2l6ZW9mKGRzaV9kaXNwbGF5X3NlY29u ZGFyeSkpOwotCQl9Ci0JCS8qIFVzZSAnOicgYXMgYSBkZWxpbWl0ZXIgdG8gcmV0cmlldmUgdGhl IGRpc3BsYXkgbmFtZSAqLwotCQlpZiAoIXBvcykgewotCQkJcHJfZGVidWcoImRpc3BsYXkgbmFt ZVslc11pcyBub3QgdmFsaWRcbiIsIGRpc3BfYnVmKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJ Zm9yIChqID0gMDsgKGRpc3BfYnVmICsgaikgPCBwb3M7IGorKykKLQkJCWJvb3RfZGlzcGxheXNb aV0ubmFtZVtqXSA9ICooZGlzcF9idWYgKyBqKTsKLQkJYm9vdF9kaXNwbGF5c1tpXS5uYW1lW2pd ID0gJ1wwJzsKLQotCQlpZiAoaSA9PSBEU0lfUFJJTUFSWSkgewotCQkJYm9vdF9kaXNwbGF5c1tp XS5pc19wcmltYXJ5ID0gdHJ1ZTsKLQkJCS8qIEN1cnJlbnRseSwgc2Vjb25kYXJ5IERTSSBkaXNw bGF5IGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQkJCWJvb3RfZGlzcGxheXNbaV0uYm9vdF9kaXNwX2Vu ID0gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiB2YWxpZGF0ZV9kc2lf ZGlzcGxheV9zZWxlY3Rpb24oKS0gdmFsaWRhdGUgYm9vdCBEU0kgZGlzcGxheSBzZWxlY3Rpb24K LSAqCi0gKiBSZXR1cm46CXJldHVybnMgdHJ1ZSB3aGVuIGJvdGggZGlzcGxheXMgaGF2ZSB1bmlx dWUgY29uZmlndXJhdGlvbnMKLSAqLwotc3RhdGljIGJvb2wgdmFsaWRhdGVfZHNpX2Rpc3BsYXlf c2VsZWN0aW9uKHZvaWQpCi17Ci0JaW50IGksIGo7Ci0JaW50IHJjID0gMDsKLQlpbnQgcGh5X2Nv dW50ID0gMDsKLQlpbnQgY3RybF9jb3VudCA9IDA7Ci0JaW50IGluZGV4ID0gMDsKLQlib29sIGN0 cmxfZmxhZ3NbTUFYX0RTSV9BQ1RJVkVfRElTUExBWV0gPSB7ZmFsc2UsIGZhbHNlfTsKLQlib29s IHBoeV9mbGFnc1tNQVhfRFNJX0FDVElWRV9ESVNQTEFZXSA9IHtmYWxzZSwgZmFsc2V9OwotCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgKmN0cmxfbm9kZSwgKnBoeV9ub2RlOwotCi0JZm9yIChp ID0gMDsgaSA8IE1BWF9EU0lfQUNUSVZFX0RJU1BMQVk7IGkrKykgewotCQlub2RlID0gYm9vdF9k aXNwbGF5c1tpXS5ub2RlOwotCQljdHJsX2NvdW50ID0gb2ZfY291bnRfcGhhbmRsZV93aXRoX2Fy Z3Mobm9kZSwgInFjb20sZHNpLWN0cmwiLAotCQkJCQkJCQlOVUxMKTsKLQotCQlmb3IgKGogPSAw OyBqIDwgY3RybF9jb3VudDsgaisrKSB7Ci0JCQljdHJsX25vZGUgPSBvZl9wYXJzZV9waGFuZGxl KG5vZGUsICJxY29tLGRzaS1jdHJsIiwgaik7Ci0JCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy KGN0cmxfbm9kZSwgImNlbGwtaW5kZXgiLAotCQkJCQkmaW5kZXgpOwotCQkJb2Zfbm9kZV9wdXQo Y3RybF9ub2RlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiY2VsbCBpbmRleCBub3Qgc2V0 IGZvciBjdHJsX25vZGVzXG4iKTsKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9Ci0JCQlpZiAoY3Ry bF9mbGFnc1tpbmRleF0pCi0JCQkJcmV0dXJuIGZhbHNlOwotCQkJY3RybF9mbGFnc1tpbmRleF0g PSB0cnVlOwotCQl9Ci0KLQkJcGh5X2NvdW50ID0gb2ZfY291bnRfcGhhbmRsZV93aXRoX2FyZ3Mo bm9kZSwgInFjb20sZHNpLXBoeSIsCi0JCQkJCQkJCU5VTEwpOwotCQlmb3IgKGogPSAwOyBqIDwg cGh5X2NvdW50OyBqKyspIHsKLQkJCXBoeV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCAi cWNvbSxkc2ktcGh5Iiwgaik7Ci0JCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBoeV9ub2Rl LCAiY2VsbC1pbmRleCIsCi0JCQkJCSZpbmRleCk7Ci0JCQlvZl9ub2RlX3B1dChwaHlfbm9kZSk7 Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImNlbGwgaW5kZXggbm90IHNldCBwaHlfbm9kZXNc biIpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCWlmIChwaHlfZmxhZ3NbaW5kZXhdKQot CQkJCXJldHVybiBmYWxzZTsKLQkJCXBoeV9mbGFnc1tpbmRleF0gPSB0cnVlOwotCQl9Ci0JfQot CXJldHVybiB0cnVlOwotfQotCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKmRzaV9kaXNwbGF5X2dldF9i b290X2Rpc3BsYXkoaW50IGluZGV4KQotewotCi0JcHJfZXJyKCJpbmRleCA9ICVkXG4iLCBpbmRl eCk7Ci0KLQlpZiAoYm9vdF9kaXNwbGF5c1tpbmRleF0ubm9kZSkKLQkJcmV0dXJuIGJvb3RfZGlz cGxheXNbaW5kZXhdLm5vZGU7Ci0JZWxzZSBpZiAoKGluZGV4ID09IChNQVhfRFNJX0FDVElWRV9E SVNQTEFZIC0gMSkpCi0JCQkmJiAoZGVmYXVsdF9hY3RpdmVfbm9kZSkpCi0JCXJldHVybiBkZWZh dWx0X2FjdGl2ZV9ub2RlOwotCWVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX2Rpc3BsYXlfcGh5X3Bvd2VyX29uKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsK LQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwot Ci0JLyogU2VxdWVuY2UgZG9lcyBub3QgbWF0dGVyIGZvciBzcGxpdCBkc2kgdXNlY2FzZXMgKi8K LQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAm ZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsKQotCQkJY29udGludWU7Ci0KLQkJ cmMgPSBkc2lfcGh5X3NldF9wb3dlcl9zdGF0ZShjdHJsLT5waHksIHRydWUpOwotCQlpZiAocmMp IHsKLQkJCXByX2VycigiWyVzXSBGYWlsZWQgdG8gc2V0IHBvd2VyIHN0YXRlLCByYz0lZFxuIiwK LQkJCSAgICAgICBjdHJsLT5waHktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9 Ci0KLQlyZXR1cm4gcmM7Ci1lcnJvcjoKLQlmb3IgKGkgPSBpIC0gMTsgaSA+PSAwOyBpLS0pIHsK LQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPnBoeSkKLQkJCWNvbnRp bnVlOwotCQkodm9pZClkc2lfcGh5X3NldF9wb3dlcl9zdGF0ZShjdHJsLT5waHksIGZhbHNlKTsK LQl9Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3BoeV9wb3dlcl9v ZmYoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7 Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQkvKiBTZXF1ZW5jZSBkb2VzIG5v dCBtYXR0ZXIgZm9yIHNwbGl0IGRzaSB1c2VjYXNlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBkaXNw bGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlp ZiAoIWN0cmwtPnBoeSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX3BoeV9zZXRfcG93ZXJf c3RhdGUoY3RybC0+cGh5LCBmYWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIEZh aWxlZCB0byBwb3dlciBvZmYsIHJjPSVkXG4iLAotCQkJICAgICAgIGN0cmwtPmN0cmwtPm5hbWUs IHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfc2V0X2Nsa19zcmMoc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0 cmwgKm1fY3RybCwgKmN0cmw7Ci0KLQkvKgotCSAqIEluIGNhc2Ugb2Ygc3BsaXQgRFNJIHVzZWNh c2VzLCB0aGUgY2xvY2sgZm9yIG1hc3RlciBjb250cm9sbGVyIHNob3VsZAotCSAqIGJlIGVuYWJs ZWQgYmVmb3JlIHRoZSBvdGhlciBjb250cm9sbGVyLiBNYXN0ZXIgY29udHJvbGxlciBpbiB0aGUK LQkgKiBjbG9jayBjb250ZXh0IHJlZmVycyB0byB0aGUgY29udHJvbGxlciB0aGF0IHNvdXJjZXMg dGhlIGNsb2NrLgotCSAqLwotCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19t YXN0ZXJfaWR4XTsKLQotCXJjID0gZHNpX2N0cmxfc2V0X2Nsb2NrX3NvdXJjZShtX2N0cmwtPmN0 cmwsCi0JCSAgICZkaXNwbGF5LT5jbG9ja19pbmZvLnNyY19jbGtzKTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgc291cmNlIGNsb2NrcyBmb3IgbWFzdGVyLCByYz0l ZFxuIiwKLQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8q IFR1cm4gb24gcmVzdCBvZiB0aGUgY29udHJvbGxlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGlz cGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJ aWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQotCQly YyA9IGRzaV9jdHJsX3NldF9jbG9ja19zb3VyY2UoY3RybC0+Y3RybCwKLQkJCSAgICZkaXNwbGF5 LT5jbG9ja19pbmZvLnNyY19jbGtzKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFp bGVkIHRvIHNldCBzb3VyY2UgY2xvY2tzLCByYz0lZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1l LCByYyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX2Rpc3BsYXlfcGh5X3Jlc2V0X2NvbmZpZyhzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3Bs YXksCi0JCWJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRz aV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQlmb3IgKGkgPSAwIDsgaSA8IGRpc3BsYXktPmN0cmxf Y291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCXJjID0gZHNpX2N0 cmxfcGh5X3Jlc2V0X2NvbmZpZyhjdHJsLT5jdHJsLCBlbmFibGUpOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigiWyVzXSBmYWlsZWQgdG8gJXMgcGh5IHJlc2V0LCByYz0lZFxuIiwKLQkJCSAgICAg ICBkaXNwbGF5LT5uYW1lLCBlbmFibGUgPyAibWFzayIgOiAidW5tYXNrIiwgcmMpOwotCQkJcmV0 dXJuIHJjOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5 X2N0cmxfdXBkYXRlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAw OwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JZm9yIChpID0g MCA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5j dHJsW2ldOwotCQlyYyA9IGRzaV9jdHJsX2hvc3RfdGltaW5nX3VwZGF0ZShjdHJsLT5jdHJsKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHVwZGF0ZSBob3N0XyVkLCBy Yz0lZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCQlnb3RvIGVycm9yX2hv c3RfZGVpbml0OwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci1lcnJvcl9ob3N0X2RlaW5pdDoKLQlm b3IgKGkgPSBpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ld OwotCQkodm9pZClkc2lfY3RybF9ob3N0X2RlaW5pdChjdHJsLT5jdHJsKTsKLQl9Ci0KLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY3RybF9pbml0KHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lf ZGlzcGxheV9jdHJsICpjdHJsOwotCi0JZm9yIChpID0gMCA7IGkgPCBkaXNwbGF5LT5jdHJsX2Nv dW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlyYyA9IGRzaV9jdHJs X2hvc3RfaW5pdChjdHJsLT5jdHJsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFp bGVkIHRvIGluaXQgaG9zdF8lZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwg aSwgcmMpOwotCQkJZ290byBlcnJvcl9ob3N0X2RlaW5pdDsKLQkJfQotCX0KLQotCXJldHVybiAw OwotZXJyb3JfaG9zdF9kZWluaXQ6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0J CWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJKHZvaWQpZHNpX2N0cmxfaG9zdF9kZWluaXQo Y3RybC0+Y3RybCk7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxh eV9jdHJsX2RlaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0g MDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybDsKLQotCWZvciAoaSA9 IDAgOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+ Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF9ob3N0X2RlaW5pdChjdHJsLT5jdHJsKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdCBob3N0XyVkLCByYz0lZFxu IiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY21kX2VuZ2luZV9lbmFibGUoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0 IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7Ci0KLQlpZiAoZGlzcGxheS0+Y21kX2Vu Z2luZV9yZWZjb3VudCA+IDApIHsKLQkJZGlzcGxheS0+Y21kX2VuZ2luZV9yZWZjb3VudCsrOwot CQlyZXR1cm4gMDsKLQl9Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRf bWFzdGVyX2lkeF07Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKG1fY3Ry bC0+Y3RybCwgRFNJX0NUUkxfRU5HSU5FX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBlbmFibGUgY21kIGVuZ2luZSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5 LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3Bs YXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlm ICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMg PSBkc2lfY3RybF9zZXRfY21kX2VuZ2luZV9zdGF0ZShjdHJsLT5jdHJsLAotCQkJCQkJICAgRFNJ X0NUUkxfRU5HSU5FX09OKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IGVuYWJsZSBjbWQgZW5naW5lLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfbWFzdGVyOwotCQl9Ci0JfQotCi0JZGlzcGxheS0+ Y21kX2VuZ2luZV9yZWZjb3VudCsrOwotCXJldHVybiByYzsKLWVycm9yX2Rpc2FibGVfbWFzdGVy OgotCSh2b2lkKWRzaV9jdHJsX3NldF9jbWRfZW5naW5lX3N0YXRlKG1fY3RybC0+Y3RybCwgRFNJ X0NUUkxfRU5HSU5FX09GRik7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX2Rpc3BsYXlfY21kX2VuZ2luZV9kaXNhYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxh eSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpt X2N0cmwsICpjdHJsOwotCi0JaWYgKGRpc3BsYXktPmNtZF9lbmdpbmVfcmVmY291bnQgPT0gMCkg ewotCQlwcl9lcnIoIlslc10gSW52YWxpZCByZWZjb3VudFxuIiwgZGlzcGxheS0+bmFtZSk7Ci0J CXJldHVybiAwOwotCX0gZWxzZSBpZiAoZGlzcGxheS0+Y21kX2VuZ2luZV9yZWZjb3VudCA+IDEp IHsKLQkJZGlzcGxheS0+Y21kX2VuZ2luZV9yZWZjb3VudC0tOwotCQlyZXR1cm4gMDsKLQl9Ci0K LQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbWRfbWFzdGVyX2lkeF07Ci0JZm9y IChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3Bs YXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJ Y29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfY21kX2VuZ2luZV9zdGF0ZShjdHJsLT5j dHJsLAotCQkJCQkJICAgRFNJX0NUUkxfRU5HSU5FX09GRik7Ci0JCWlmIChyYykKLQkJCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAg IGRpc3BsYXktPm5hbWUsIHJjKTsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9jbWRfZW5naW5l X3N0YXRlKG1fY3RybC0+Y3RybCwgRFNJX0NUUkxfRU5HSU5FX09GRik7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdpbmUsIHJjPSVkXG4iLAotCQkg ICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0J ZGlzcGxheS0+Y21kX2VuZ2luZV9yZWZjb3VudCA9IDA7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0 aWMgaW50IGRzaV9kaXNwbGF5X2N0cmxfaG9zdF9lbmFibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0 cmwgKm1fY3RybCwgKmN0cmw7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5j bWRfbWFzdGVyX2lkeF07Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZSht X2N0cmwtPmN0cmwsIERTSV9DVFJMX0VOR0lORV9PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gZW5hYmxlIGhvc3QgZW5naW5lLCByYz0lZFxuIiwKLQkJICAgICAgIGRp c3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwg ZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsK LQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51ZTsKLQot CQlyYyA9IGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZShjdHJsLT5jdHJsLAotCQkJCQkJ ICAgIERTSV9DVFJMX0VOR0lORV9PTik7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBlbmFibGUgc2wgaG9zdCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3Bs YXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9Ci0K LQlyZXR1cm4gcmM7Ci1lcnJvcl9kaXNhYmxlX21hc3RlcjoKLQkodm9pZClkc2lfY3RybF9zZXRf aG9zdF9lbmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJTkVfT0ZGKTsKLWVy cm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9jdHJsX2hvc3Rf ZGlzYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlp bnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQotCW1fY3Ry bCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNtZF9tYXN0ZXJfaWR4XTsKLQlmb3IgKGkgPSAw OyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3Ry bFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkpCi0JCQljb250aW51 ZTsKLQotCQlyYyA9IGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9zdGF0ZShjdHJsLT5jdHJsLAot CQkJCQkJICAgIERTSV9DVFJMX0VOR0lORV9PRkYpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlsl c10gZmFpbGVkIHRvIGRpc2FibGUgaG9zdCBlbmdpbmUsIHJjPSVkXG4iLAotCQkJICAgICAgIGRp c3BsYXktPm5hbWUsIHJjKTsKLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX3NldF9ob3N0X2VuZ2luZV9z dGF0ZShtX2N0cmwtPmN0cmwsIERTSV9DVFJMX0VOR0lORV9PRkYpOwotCWlmIChyYykgewotCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgaG9zdCBlbmdpbmUsIHJjPSVkXG4iLAotCQkg ICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0J cmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3ZpZF9lbmdpbmVfZW5hYmxl KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwot CXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JbV9jdHJsID0gJmRp c3BsYXktPmN0cmxbZGlzcGxheS0+dmlkZW9fbWFzdGVyX2lkeF07Ci0KLQlyYyA9IGRzaV9jdHJs X3NldF92aWRfZW5naW5lX3N0YXRlKG1fY3RybC0+Y3RybCwgRFNJX0NUUkxfRU5HSU5FX09OKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgdmlkIGVuZ2luZSwg cmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJs ID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0 cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9zZXRfdmlkX2VuZ2luZV9zdGF0 ZShjdHJsLT5jdHJsLAotCQkJCQkJICAgRFNJX0NUUkxfRU5HSU5FX09OKTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSB2aWQgZW5naW5lLCByYz0lZFxuIiwK LQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfbWFz dGVyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotZXJyb3JfZGlzYWJsZV9tYXN0ZXI6Ci0JKHZv aWQpZHNpX2N0cmxfc2V0X3ZpZF9lbmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9F TkdJTkVfT0ZGKTsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlz cGxheV92aWRfZW5naW5lX2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewot CWludCByYyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwg KmN0cmw7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT52aWRlb19tYXN0ZXJf aWR4XTsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJ Y3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0g bV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfc2V0X3ZpZF9lbmdpbmVf c3RhdGUoY3RybC0+Y3RybCwKLQkJCQkJCSAgIERTSV9DVFJMX0VOR0lORV9PRkYpOwotCQlpZiAo cmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgdmlkIGVuZ2luZSwgcmM9JWRc biIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCX0KLQotCXJjID0gZHNpX2N0cmxf c2V0X3ZpZF9lbmdpbmVfc3RhdGUobV9jdHJsLT5jdHJsLCBEU0lfQ1RSTF9FTkdJTkVfT0ZGKTsK LQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJsZSBtdmlkIGVuZ2luZSwg cmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGh5X2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkg KmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlf Y3RybCAqbV9jdHJsLCAqY3RybDsKLQllbnVtIGRzaV9waHlfcGxsX3NvdXJjZSBtX3NyYyA9IERT SV9QTExfU09VUkNFX1NUQU5EQUxPTkU7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNw bGF5LT5jbGtfbWFzdGVyX2lkeF07Ci0JaWYgKGRpc3BsYXktPmN0cmxfY291bnQgPiAxKQotCQlt X3NyYyA9IERTSV9QTExfU09VUkNFX05BVElWRTsKLQotCXJjID0gZHNpX3BoeV9lbmFibGUobV9j dHJsLT5waHksCi0JCQkgICAgJmRpc3BsYXktPmNvbmZpZywKLQkJCSAgICBtX3NyYywKLQkJCSAg ICB0cnVlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJ IFBIWSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJy b3I7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewot CQljdHJsID0gJmRpc3BsYXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9 PSBtX2N0cmwpKQotCQkJY29udGludWU7Ci0KLQkJcmMgPSBkc2lfcGh5X2VuYWJsZShjdHJsLT5w aHksCi0JCQkJICAgICZkaXNwbGF5LT5jb25maWcsCi0JCQkJICAgIERTSV9QTExfU09VUkNFX05P Tl9OQVRJVkUsCi0JCQkJICAgIHRydWUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBm YWlsZWQgdG8gZW5hYmxlIERTSSBQSFksIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5h bWUsIHJjKTsKLQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9tYXN0ZXI7Ci0JCX0KLQl9Ci0KLQlyZXR1 cm4gcmM7Ci0KLWVycm9yX2Rpc2FibGVfbWFzdGVyOgotCSh2b2lkKWRzaV9waHlfZGlzYWJsZSht X2N0cmwtPnBoeSk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rp c3BsYXlfcGh5X2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCBy YyA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKm1fY3RybCwgKmN0cmw7 Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNwbGF5LT5jbGtfbWFzdGVyX2lkeF07Ci0K LQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAm ZGlzcGxheS0+Y3RybFtpXTsKLQkJaWYgKCFjdHJsLT5jdHJsIHx8IChjdHJsID09IG1fY3RybCkp Ci0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9waHlfZGlzYWJsZShjdHJsLT5waHkpOwotCQlp ZiAocmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgRFNJIFBIWSwgcmM9JWRc biIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCX0KLQotCXJjID0gZHNpX3BoeV9k aXNhYmxlKG1fY3RybC0+cGh5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8g ZGlzYWJsZSBEU0kgUEhZLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsK LQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV93YWtlX3VwKHN0cnVj dCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBk c2lfZGlzcGxheV9icm9hZGNhc3RfY21kKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJ CQkgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKLXsKLQlpbnQgcmMgPSAwOwot CXUzMiBmbGFncywgbV9mbGFnczsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqY3RybCwgKm1f Y3RybDsKLQlpbnQgaTsKLQotCW1fZmxhZ3MgPSAoRFNJX0NUUkxfQ01EX0JST0FEQ0FTVCB8IERT SV9DVFJMX0NNRF9CUk9BRENBU1RfTUFTVEVSIHwKLQkJICAgRFNJX0NUUkxfQ01EX0RFRkVSX1RS SUdHRVIgfCBEU0lfQ1RSTF9DTURfRkVUQ0hfTUVNT1JZKTsKLQlmbGFncyA9IChEU0lfQ1RSTF9D TURfQlJPQURDQVNUIHwgRFNJX0NUUkxfQ01EX0RFRkVSX1RSSUdHRVIgfAotCQkgRFNJX0NUUkxf Q01EX0ZFVENIX01FTU9SWSk7Ci0KLQkvKgotCSAqIDEuIFNldHVwIGNvbW1hbmRzIGluIEZJRk8K LQkgKiAyLiBUcmlnZ2VyIGNvbW1hbmRzCi0JICovCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxb ZGlzcGxheS0+Y21kX21hc3Rlcl9pZHhdOwotCXJjID0gZHNpX2N0cmxfY21kX3RyYW5zZmVyKG1f Y3RybC0+Y3RybCwgbXNnLCBtX2ZsYWdzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGNt ZCB0cmFuc2ZlciBmYWlsZWQgb24gbWFzdGVyLHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+ bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5 LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAo Y3RybCA9PSBtX2N0cmwpCi0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9jdHJsX2NtZF90cmFu c2ZlcihjdHJsLT5jdHJsLCBtc2csIGZsYWdzKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlsl c10gY21kIHRyYW5zZmVyIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXJjID0gZHNpX2N0cmxfY21kX3R4X3Ry aWdnZXIoY3RybC0+Y3RybCwgZmxhZ3MpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBj bWQgdHJpZ2dlciBmYWlsZWQsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJj KTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyYyA9IGRzaV9jdHJsX2NtZF90eF90cmln Z2VyKG1fY3RybC0+Y3RybCwgbV9mbGFncyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBj bWQgdHJpZ2dlciBmYWlsZWQgZm9yIG1hc3RlciwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5 LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGh5X3N3X3Jlc2V0KHN0cnVjdCBkc2lfZGlzcGxh eSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxh eV9jdHJsICptX2N0cmwsICpjdHJsOwotCi0JbV9jdHJsID0gJmRpc3BsYXktPmN0cmxbZGlzcGxh eS0+Y21kX21hc3Rlcl9pZHhdOwotCi0JcmMgPSBkc2lfY3RybF9waHlfc3dfcmVzZXQobV9jdHJs LT5jdHJsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZXNldCBwaHks IHJjPSVkXG4iLCBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZm9y IChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQljdHJsID0gJmRpc3Bs YXktPmN0cmxbaV07Ci0JCWlmICghY3RybC0+Y3RybCB8fCAoY3RybCA9PSBtX2N0cmwpKQotCQkJ Y29udGludWU7Ci0KLQkJcmMgPSBkc2lfY3RybF9waHlfc3dfcmVzZXQoY3RybC0+Y3RybCk7Ci0J CWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZXNldCBwaHksIHJjPSVkXG4i LAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9 Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfaG9zdF9hdHRhY2go c3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCi0JCQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkc2kpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2hvc3RfZGV0YWNoKHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAotCQkJICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBkc2lfaG9zdF90cmFuc2Zl cihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKLQkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNp X21zZyAqbXNnKQotewotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IHRvX2RzaV9kaXNw bGF5KGhvc3QpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpkaXNwbGF5X2N0cmw7Ci0Jc3Ry dWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlID0gTlVMTDsKLQlpbnQgcmMgPSAwLCBj bnQgPSAwOwotCi0JaWYgKCFob3N0IHx8ICFtc2cpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFt c1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlz cGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQUxMX0NMS1MsIERTSV9DTEtfT04pOwotCWlm IChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJsZSBhbGwgRFNJIGNsb2Nrcywg cmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JcmMgPSBkc2lfZGlzcGxheV93YWtlX3VwKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlw cl9lcnIoIlslc10gZmFpbGVkIHRvIHdha2UgdXAgZGlzcGxheSwgcmM9JWRcbiIsCi0JCSAgICAg ICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfZGlzYWJsZV9jbGtzOwotCX0KLQot CXJjID0gZHNpX2Rpc3BsYXlfY21kX2VuZ2luZV9lbmFibGUoZGlzcGxheSk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIGNtZCBlbmdpbmUsIHJjPSVkXG4iLAot CQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2Rpc2FibGVfY2xrczsK LQl9Ci0KLQlpZiAoZGlzcGxheS0+dHhfY21kX2J1ZiA9PSBOVUxMKSB7Ci0JCWRpc3BsYXktPnR4 X2NtZF9idWYgPSBtc21fZ2VtX25ldyhkaXNwbGF5LT5kcm1fZGV2LAotCQkJCVNaXzRLLAotCQkJ CU1TTV9CT19VTkNBQ0hFRCk7Ci0KLQkJZGlzcGxheS0+Y21kX2J1ZmZlcl9zaXplID0gU1pfNEs7 Ci0KLQkJaWYgKChkaXNwbGF5LT50eF9jbWRfYnVmKSA9PSBOVUxMKSB7Ci0JCQlwcl9lcnIoInZh bHVlIG9mIGRpc3BsYXktPnR4X2NtZF9idWYgaXMgTlVMTCIpOwotCQkJZ290byBlcnJvcl9kaXNh YmxlX2NtZF9lbmdpbmU7Ci0JCX0KLQotCQlhc3BhY2UgPSBtc21fZ2VtX3NtbXVfYWRkcmVzc19z cGFjZV9nZXQoZGlzcGxheS0+ZHJtX2RldiwKLQkJCQlNU01fU01NVV9ET01BSU5fVU5TRUNVUkUp OwotCQlpZiAoIWFzcGFjZSkgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGFzcGFjZVxuIik7 Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGZyZWVfZ2VtOwotCQl9Ci0KLQkJcmMgPSBtc21f Z2VtX2dldF9pb3ZhKGRpc3BsYXktPnR4X2NtZF9idWYsIGFzcGFjZSwKLQkJCQkJJihkaXNwbGF5 LT5jbWRfYnVmZmVyX2lvdmEpKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBn ZXQgdGhlIGlvdmEgcmMgJWRcbiIsIHJjKTsKLQkJCWdvdG8gZnJlZV9nZW07Ci0JCX0KLQotCQlk aXNwbGF5LT52YWRkciA9Ci0JCQkodm9pZCAqKSBtc21fZ2VtX2dldF92YWRkcihkaXNwbGF5LT50 eF9jbWRfYnVmKTsKLQotCQlpZiAoSVNfRVJSX09SX05VTEwoZGlzcGxheS0+dmFkZHIpKSB7Ci0J CQlwcl9lcnIoImZhaWxlZCB0byBnZXQgdmEgcmMgJWRcbiIsIHJjKTsKLQkJCXJjID0gLUVJTlZB TDsKLQkJCWdvdG8gcHV0X2lvdmE7Ci0JCX0KLQotCQlmb3IgKGNudCA9IDA7IGNudCA8IGRpc3Bs YXktPmN0cmxfY291bnQ7IGNudCsrKSB7Ci0JCQlkaXNwbGF5X2N0cmwgPSAmZGlzcGxheS0+Y3Ry bFtjbnRdOwotCQkJZGlzcGxheV9jdHJsLT5jdHJsLT5jbWRfYnVmZmVyX3NpemUgPSBTWl80SzsK LQkJCWRpc3BsYXlfY3RybC0+Y3RybC0+Y21kX2J1ZmZlcl9pb3ZhID0KLQkJCQkJCWRpc3BsYXkt PmNtZF9idWZmZXJfaW92YTsKLQkJCWRpc3BsYXlfY3RybC0+Y3RybC0+dmFkZHIgPSBkaXNwbGF5 LT52YWRkcjsKLQkJfQotCX0KLQotCWlmIChkaXNwbGF5LT5jdHJsX2NvdW50ID4gMSAmJiAhKG1z Zy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfVU5JQ0FTVCkpIHsKLQkJcmMgPSBkc2lfZGlzcGxheV9i cm9hZGNhc3RfY21kKGRpc3BsYXksIG1zZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNd IGNtZCBicm9hZGNhc3QgZmFpbGVkLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1l LCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfY21kX2VuZ2luZTsKLQkJfQotCX0gZWxzZSB7 Ci0JCWludCBjdHJsX2lkeCA9IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VOSUNBU1QpID8K LQkJCQltc2ctPmN0cmwgOiAwOwotCi0JCXJjID0gZHNpX2N0cmxfY21kX3RyYW5zZmVyKGRpc3Bs YXktPmN0cmxbY3RybF9pZHhdLmN0cmwsIG1zZywKLQkJCQkJICBEU0lfQ1RSTF9DTURfRkVUQ0hf TUVNT1JZKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gY21kIHRyYW5zZmVyIGZhaWxl ZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJv cl9kaXNhYmxlX2NtZF9lbmdpbmU7Ci0JCX0KLQl9Ci0KLWVycm9yX2Rpc2FibGVfY21kX2VuZ2lu ZToKLQkodm9pZClkc2lfZGlzcGxheV9jbWRfZW5naW5lX2Rpc2FibGUoZGlzcGxheSk7Ci1lcnJv cl9kaXNhYmxlX2Nsa3M6Ci0JcmMgPSBkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lf Y2xrX2hhbmRsZSwKLQkJCURTSV9BTExfQ0xLUywgRFNJX0NMS19PRkYpOwotCWlmIChyYykgewot CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUgYWxsIERTSSBjbG9ja3MsIHJjPSVkXG4i LAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCX0KLQlyZXR1cm4gcmM7Ci1wdXRfaW92 YToKLQltc21fZ2VtX3B1dF9pb3ZhKGRpc3BsYXktPnR4X2NtZF9idWYsIGFzcGFjZSk7Ci1mcmVl X2dlbToKLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kcm1fZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCW1z bV9nZW1fZnJlZV9vYmplY3QoZGlzcGxheS0+dHhfY21kX2J1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZk aXNwbGF5LT5kcm1fZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQot Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgZHNpX2hvc3Rfb3BzID0gewotCS5h dHRhY2ggPSBkc2lfaG9zdF9hdHRhY2gsCi0JLmRldGFjaCA9IGRzaV9ob3N0X2RldGFjaCwKLQku dHJhbnNmZXIgPSBkc2lfaG9zdF90cmFuc2ZlciwKLX07Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3Bs YXlfbWlwaV9ob3N0X2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCBy YyA9IDA7Ci0Jc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QgPSAmZGlzcGxheS0+aG9zdDsKLQot CWhvc3QtPmRldiA9ICZkaXNwbGF5LT5wZGV2LT5kZXY7Ci0JaG9zdC0+b3BzID0gJmRzaV9ob3N0 X29wczsKLQotCXJjID0gbWlwaV9kc2lfaG9zdF9yZWdpc3Rlcihob3N0KTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZWdpc3RlciBtaXBpIGRzaSBob3N0LCByYz0lZFxu IiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVy cm9yOgotCXJldHVybiByYzsKLX0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfbWlwaV9ob3N0X2Rl aW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1 Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCA9ICZkaXNwbGF5LT5ob3N0OwotCi0JbWlwaV9kc2lfaG9z dF91bnJlZ2lzdGVyKGhvc3QpOwotCi0JaG9zdC0+ZGV2ID0gTlVMTDsKLQlob3N0LT5vcHMgPSBO VUxMOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2Nsb2Nrc19k ZWluaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRzaV9jbGtfbGlua19zZXQgKnNyYyA9ICZkaXNwbGF5LT5jbG9ja19pbmZvLnNyY19jbGtz OwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0ICptdXggPSAmZGlzcGxheS0+Y2xvY2tfaW5mby5t dXhfY2xrczsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqc2hhZG93ID0gJmRpc3BsYXktPmNs b2NrX2luZm8uc2hhZG93X2Nsa3M7Ci0KLQlpZiAoc3JjLT5ieXRlX2NsaykgewotCQlkZXZtX2Ns a19wdXQoJmRpc3BsYXktPnBkZXYtPmRldiwgc3JjLT5ieXRlX2Nsayk7Ci0JCXNyYy0+Ynl0ZV9j bGsgPSBOVUxMOwotCX0KLQotCWlmIChzcmMtPnBpeGVsX2NsaykgewotCQlkZXZtX2Nsa19wdXQo JmRpc3BsYXktPnBkZXYtPmRldiwgc3JjLT5waXhlbF9jbGspOwotCQlzcmMtPnBpeGVsX2NsayA9 IE5VTEw7Ci0JfQotCi0JaWYgKG11eC0+Ynl0ZV9jbGspIHsKLQkJZGV2bV9jbGtfcHV0KCZkaXNw bGF5LT5wZGV2LT5kZXYsIG11eC0+Ynl0ZV9jbGspOwotCQltdXgtPmJ5dGVfY2xrID0gTlVMTDsK LQl9Ci0KLQlpZiAobXV4LT5waXhlbF9jbGspIHsKLQkJZGV2bV9jbGtfcHV0KCZkaXNwbGF5LT5w ZGV2LT5kZXYsIG11eC0+cGl4ZWxfY2xrKTsKLQkJbXV4LT5waXhlbF9jbGsgPSBOVUxMOwotCX0K LQotCWlmIChzaGFkb3ctPmJ5dGVfY2xrKSB7Ci0JCWRldm1fY2xrX3B1dCgmZGlzcGxheS0+cGRl di0+ZGV2LCBzaGFkb3ctPmJ5dGVfY2xrKTsKLQkJc2hhZG93LT5ieXRlX2NsayA9IE5VTEw7Ci0J fQotCi0JaWYgKHNoYWRvdy0+cGl4ZWxfY2xrKSB7Ci0JCWRldm1fY2xrX3B1dCgmZGlzcGxheS0+ cGRldi0+ZGV2LCBzaGFkb3ctPnBpeGVsX2Nsayk7Ci0JCXNoYWRvdy0+cGl4ZWxfY2xrID0gTlVM TDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfY2xvY2tz X2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRzaV9jbGtfbGlua19zZXQgKnNyYyA9ICZkaXNwbGF5LT5jbG9ja19pbmZvLnNyY19jbGtz OwotCXN0cnVjdCBkc2lfY2xrX2xpbmtfc2V0ICptdXggPSAmZGlzcGxheS0+Y2xvY2tfaW5mby5t dXhfY2xrczsKLQlzdHJ1Y3QgZHNpX2Nsa19saW5rX3NldCAqc2hhZG93ID0gJmRpc3BsYXktPmNs b2NrX2luZm8uc2hhZG93X2Nsa3M7Ci0KLQlzcmMtPmJ5dGVfY2xrID0gZGV2bV9jbGtfZ2V0KCZk aXNwbGF5LT5wZGV2LT5kZXYsICJzcmNfYnl0ZV9jbGsiKTsKLQlpZiAoSVNfRVJSX09SX05VTEwo c3JjLT5ieXRlX2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKHNyYy0+Ynl0ZV9jbGspOwotCQlzcmMt PmJ5dGVfY2xrID0gTlVMTDsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHNyY19ieXRlX2Nsaywg cmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlzcmMtPnBpeGVsX2NsayA9IGRl dm1fY2xrX2dldCgmZGlzcGxheS0+cGRldi0+ZGV2LCAic3JjX3BpeGVsX2NsayIpOwotCWlmIChJ U19FUlJfT1JfTlVMTChzcmMtPnBpeGVsX2NsaykpIHsKLQkJcmMgPSBQVFJfRVJSKHNyYy0+cGl4 ZWxfY2xrKTsKLQkJc3JjLT5waXhlbF9jbGsgPSBOVUxMOwotCQlwcl9lcnIoImZhaWxlZCB0byBn ZXQgc3JjX3BpeGVsX2NsaywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlt dXgtPmJ5dGVfY2xrID0gZGV2bV9jbGtfZ2V0KCZkaXNwbGF5LT5wZGV2LT5kZXYsICJtdXhfYnl0 ZV9jbGsiKTsKLQlpZiAoSVNfRVJSX09SX05VTEwobXV4LT5ieXRlX2NsaykpIHsKLQkJcmMgPSBQ VFJfRVJSKG11eC0+Ynl0ZV9jbGspOwotCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIGdldCBtdXhfYnl0 ZV9jbGssIHJjPSVkXG4iLCByYyk7Ci0JCW11eC0+Ynl0ZV9jbGsgPSBOVUxMOwotCQkvKgotCQkg KiBTa2lwIGdldHRpbmcgcmVzdCBvZiBjbG9ja3Mgc2luY2Ugb25lIGZhaWxlZC4gVGhpcyBpcyBh Ci0JCSAqIG5vbi1jcml0aWNhbCBmYWlsdXJlIHNpbmNlIHRoZXNlIGNsb2NrcyBhcmUgcmVxdWll ZCBvbmx5IGZvcgotCQkgKiBkeW5hbWljIHJlZnJlc2ggdXNlIGNhc2VzLgotCQkgKi8KLQkJcmMg PSAwOwotCQlnb3RvIGRvbmU7Ci0JfTsKLQotCW11eC0+cGl4ZWxfY2xrID0gZGV2bV9jbGtfZ2V0 KCZkaXNwbGF5LT5wZGV2LT5kZXYsICJtdXhfcGl4ZWxfY2xrIik7Ci0JaWYgKElTX0VSUl9PUl9O VUxMKG11eC0+cGl4ZWxfY2xrKSkgewotCQlyYyA9IFBUUl9FUlIobXV4LT5waXhlbF9jbGspOwot CQltdXgtPnBpeGVsX2NsayA9IE5VTEw7Ci0JCXByX2RlYnVnKCJmYWlsZWQgdG8gZ2V0IG11eF9w aXhlbF9jbGssIHJjPSVkXG4iLCByYyk7Ci0JCS8qCi0JCSAqIFNraXAgZ2V0dGluZyByZXN0IG9m IGNsb2NrcyBzaW5jZSBvbmUgZmFpbGVkLiBUaGlzIGlzIGEKLQkJICogbm9uLWNyaXRpY2FsIGZh aWx1cmUgc2luY2UgdGhlc2UgY2xvY2tzIGFyZSByZXF1aWVkIG9ubHkgZm9yCi0JCSAqIGR5bmFt aWMgcmVmcmVzaCB1c2UgY2FzZXMuCi0JCSAqLwotCQlyYyA9IDA7Ci0JCWdvdG8gZG9uZTsKLQl9 OwotCi0Jc2hhZG93LT5ieXRlX2NsayA9IGRldm1fY2xrX2dldCgmZGlzcGxheS0+cGRldi0+ZGV2 LCAic2hhZG93X2J5dGVfY2xrIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHNoYWRvdy0+Ynl0ZV9j bGspKSB7Ci0JCXJjID0gUFRSX0VSUihzaGFkb3ctPmJ5dGVfY2xrKTsKLQkJc2hhZG93LT5ieXRl X2NsayA9IE5VTEw7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBzaGFkb3dfYnl0ZV9jbGssIHJj PSVkXG4iLCByYyk7Ci0JCS8qCi0JCSAqIFNraXAgZ2V0dGluZyByZXN0IG9mIGNsb2NrcyBzaW5j ZSBvbmUgZmFpbGVkLiBUaGlzIGlzIGEKLQkJICogbm9uLWNyaXRpY2FsIGZhaWx1cmUgc2luY2Ug dGhlc2UgY2xvY2tzIGFyZSByZXF1aWVkIG9ubHkgZm9yCi0JCSAqIGR5bmFtaWMgcmVmcmVzaCB1 c2UgY2FzZXMuCi0JCSAqLwotCQlyYyA9IDA7Ci0JCWdvdG8gZG9uZTsKLQl9OwotCi0Jc2hhZG93 LT5waXhlbF9jbGsgPSBkZXZtX2Nsa19nZXQoJmRpc3BsYXktPnBkZXYtPmRldiwKLQkJCQkJICJz aGFkb3dfcGl4ZWxfY2xrIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHNoYWRvdy0+cGl4ZWxfY2xr KSkgewotCQlyYyA9IFBUUl9FUlIoc2hhZG93LT5waXhlbF9jbGspOwotCQlzaGFkb3ctPnBpeGVs X2NsayA9IE5VTEw7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBzaGFkb3dfcGl4ZWxfY2xrLCBy Yz0lZFxuIiwgcmMpOwotCQkvKgotCQkgKiBTa2lwIGdldHRpbmcgcmVzdCBvZiBjbG9ja3Mgc2lu Y2Ugb25lIGZhaWxlZC4gVGhpcyBpcyBhCi0JCSAqIG5vbi1jcml0aWNhbCBmYWlsdXJlIHNpbmNl IHRoZXNlIGNsb2NrcyBhcmUgcmVxdWllZCBvbmx5IGZvcgotCQkgKiBkeW5hbWljIHJlZnJlc2gg dXNlIGNhc2VzLgotCQkgKi8KLQkJcmMgPSAwOwotCQlnb3RvIGRvbmU7Ci0JfTsKLQotZG9uZToK LQlyZXR1cm4gMDsKLWVycm9yOgotCSh2b2lkKWRzaV9kaXNwbGF5X2Nsb2Nrc19kZWluaXQoZGlz cGxheSk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2Nsa19jdHJs X2NiKHZvaWQgKnByaXYsCi0Jc3RydWN0IGRzaV9jbGtfY3RybF9pbmZvIGNsa19zdGF0ZV9pbmZv KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gTlVMTDsK LQl2b2lkICpjbGtfaGFuZGxlID0gTlVMTDsKLQotCWlmICghcHJpdikgewotCQlwcl9lcnIoIklu dmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZGlzcGxheSA9IHBy aXY7Ci0KLQlpZiAoY2xrX3N0YXRlX2luZm8uY2xpZW50ID09IERTSV9DTEtfUkVRX01EUF9DTElF TlQpIHsKLQkJY2xrX2hhbmRsZSA9IGRpc3BsYXktPm1kcF9jbGtfaGFuZGxlOwotCX0gZWxzZSBp ZiAoY2xrX3N0YXRlX2luZm8uY2xpZW50ID09IERTSV9DTEtfUkVRX0RTSV9DTElFTlQpIHsKLQkJ Y2xrX2hhbmRsZSA9IGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlOwotCX0gZWxzZSB7Ci0JCXByX2Vy cigiaW52YWxpZCBjbGsgaGFuZGxlLCByZXR1cm4gZXJyb3JcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQkvKgotCSAqIFRPRE86IFdhaXQgZm9yIENNRF9NRFBfRE9ORSBpbnRlcnJ1cHQg aWYgTURQIGNsaWVudCB0cmllcwotCSAqIHRvIHR1cm4gb2ZmIERTSSBjbG9ja3MuCi0JICovCi0J cmMgPSBkc2lfZGlzcGxheV9jbGtfY3RybChjbGtfaGFuZGxlLAotCQljbGtfc3RhdGVfaW5mby5j bGtfdHlwZSwgY2xrX3N0YXRlX2luZm8uY2xrX3N0YXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byAlZCBEU0kgJWQgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRp c3BsYXktPm5hbWUsIGNsa19zdGF0ZV9pbmZvLmNsa19zdGF0ZSwKLQkJICAgICAgIGNsa19zdGF0 ZV9pbmZvLmNsa190eXBlLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0K LWludCBkc2lfcHJlX2Nsa29mZl9jYih2b2lkICpwcml2LAotCQkJICAgZW51bSBkc2lfY2xrX3R5 cGUgY2xrLAotCQkJICAgZW51bSBkc2lfY2xrX3N0YXRlIG5ld19zdGF0ZSkKLXsKLQlpbnQgcmMg PSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSA9IHByaXY7Ci0KLQlpZiAoKGNsayAm IERTSV9MSU5LX0NMSykgJiYgKG5ld19zdGF0ZSA9PSBEU0lfQ0xLX09GRikpIHsKLQkJLyoKLQkJ ICogSWYgVUxQUyBmZWF0dXJlIGlzIGVuYWJsZWQsIGVudGVyIFVMUFMgZmlyc3QuCi0JCSAqLwot CQlpZiAoZHNpX3BhbmVsX2luaXRpYWxpemVkKGRpc3BsYXktPnBhbmVsKSAmJgotCQkJZHNpX3Bh bmVsX3VscHNfZmVhdHVyZV9lbmFibGVkKGRpc3BsYXktPnBhbmVsKSkgewotCQkJcmMgPSBkc2lf ZGlzcGxheV9zZXRfdWxwcyhkaXNwbGF5LCB0cnVlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2Vy cigiJXM6IGZhaWxlZCBlbmFibGUgdWxwcywgcmMgPSAlZFxuIiwKLQkJCSAgICAgICBfX2Z1bmNf XywgcmMpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKChjbGsgJiBEU0lfQ09SRV9DTEspICYmIChu ZXdfc3RhdGUgPT0gRFNJX0NMS19PRkYpKSB7Ci0JCS8qCi0JCSAqIEVuYWJsZSBEU0kgY2xhbXBz IG9ubHkgaWYgZW50ZXJpbmcgaWRsZSBwb3dlciBjb2xsYXBzZS4KLQkJICovCi0JCWlmIChkc2lf cGFuZWxfaW5pdGlhbGl6ZWQoZGlzcGxheS0+cGFuZWwpKSB7Ci0JCQlkc2lfZGlzcGxheV9waHlf aWRsZV9vZmYoZGlzcGxheSk7Ci0JCQlyYyA9IGRzaV9kaXNwbGF5X3NldF9jbGFtcChkaXNwbGF5 LCB0cnVlKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZW5hYmxlIGRz aSBjbGFtcHMuIHJjPSVkXG4iLAotCQkJCQlfX2Z1bmNfXywgcmMpOwotCi0JCQlyYyA9IGRzaV9k aXNwbGF5X3BoeV9yZXNldF9jb25maWcoZGlzcGxheSwgZmFsc2UpOwotCQkJaWYgKHJjKQotCQkJ CXByX2VycigiJXM6IEZhaWxlZCB0byByZXNldCBwaHksIHJjPSVkXG4iLAotCQkJCQkJX19mdW5j X18sIHJjKTsKLQkJfSBlbHNlIHsKLQkJCS8qIE1ha2Ugc3VyZSB0aGF0IGNvbnRyb2xsZXIgaXMg bm90IGluIFVMUFMgc3RhdGUgd2hlbgotCQkJICogdGhlIERTSSBsaW5rIGlzIG5vdCBhY3RpdmUu Ci0JCQkgKi8KLQkJCXJjID0gZHNpX2Rpc3BsYXlfc2V0X3VscHMoZGlzcGxheSwgZmFsc2UpOwot CQkJaWYgKHJjKQotCQkJCXByX2VycigiJXM6IGZhaWxlZCB0byBkaXNhYmxlIHVscHMuIHJjPSVk XG4iLAotCQkJCQlfX2Z1bmNfXywgcmMpOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1p bnQgZHNpX3Bvc3RfY2xrb25fY2Iodm9pZCAqcHJpdiwKLQkJCSAgIGVudW0gZHNpX2Nsa190eXBl IGNsaywKLQkJCSAgIGVudW0gZHNpX2Nsa19zdGF0ZSBjdXJyX3N0YXRlKQotewotCWludCByYyA9 IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5ID0gcHJpdjsKLQlib29sIG1tc3NfY2xh bXAgPSBmYWxzZTsKLQotCWlmIChjbGsgJiBEU0lfQ09SRV9DTEspIHsKLQkJbW1zc19jbGFtcCA9 IGRpc3BsYXktPmNsYW1wX2VuYWJsZWQ7Ci0JCS8qCi0JCSAqIGNvbnRyb2xsZXIgc2V0dXAgaXMg bmVlZGVkIGlmIGNvbWluZyBvdXQgb2YgaWRsZQotCQkgKiBwb3dlciBjb2xsYXBzZSB3aXRoIGNs YW1wcyBlbmFibGVkLgotCQkgKi8KLQkJaWYgKG1tc3NfY2xhbXApCi0JCQlkc2lfZGlzcGxheV9j dHJsX3NldHVwKGRpc3BsYXkpOwotCi0JCWlmIChkaXNwbGF5LT51bHBzX2VuYWJsZWQgJiYgbW1z c19jbGFtcCkgewotCQkJLyoKLQkJCSAqIFVMUFMgRW50cnkgUmVxdWVzdC4gVGhpcyBpcyBuZWVk ZWQgaWYgdGhlIGxhbmVzIHdlcmUKLQkJCSAqIGluIFVMUFMgcHJpb3IgdG8gcG93ZXIgY29sbGFw c2UsIHNpbmNlIGFmdGVyCi0JCQkgKiBwb3dlciBjb2xsYXBzZSBhbmQgcmVzZXQsIHRoZSBEU0kg Y29udHJvbGxlciByZXNldHMKLQkJCSAqIGJhY2sgdG8gaWRsZSBzdGF0ZSBhbmQgbm90IFVMUFMu IFRoaXMgdWxwcyBlbnRyeQotCQkJICogcmVxdWVzdCB3aWxsIHRyYW5zaXRpb24gdGhlIHN0YXRl IG9mIHRoZSBEU0kKLQkJCSAqIGNvbnRyb2xsZXIgdG8gVUxQUyB3aGljaCB3aWxsIG1hdGNoIHRo ZSBzdGF0ZSBvZiB0aGUKLQkJCSAqIERTSSBwaHkuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBwcmlv ciB0byBkaXNhYmxpbmcKLQkJCSAqIHRoZSBEU0kgY2xhbXBzLgotCQkJICoKLQkJCSAqIEFsc28s IHJlc2V0IHRoZSB1bHBzIGZsYWcgc28gdGhhdCB1bHBzX2NvbmZpZwotCQkJICogZnVuY3Rpb24g d291bGQgcmVjb25maWd1cmUgdGhlIGNvbnRyb2xsZXIgc3RhdGUgdG8KLQkJCSAqIFVMUFMuCi0J CQkgKi8KLQkJCWRpc3BsYXktPnVscHNfZW5hYmxlZCA9IGZhbHNlOwotCQkJcmMgPSBkc2lfZGlz cGxheV9zZXRfdWxwcyhkaXNwbGF5LCB0cnVlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2Vycigi JXM6IEZhaWxlZCB0byBlbnRlciBVTFBTLiByYz0lZFxuIiwKLQkJCQkJX19mdW5jX18sIHJjKTsK LQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0KLQkJcmMgPSBkc2lfZGlzcGxheV9waHlfcmVz ZXRfY29uZmlnKGRpc3BsYXksIHRydWUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiJXM6IEZh aWxlZCB0byByZXNldCBwaHksIHJjPSVkXG4iLAotCQkJCQkJX19mdW5jX18sIHJjKTsKLQkJCWdv dG8gZXJyb3I7Ci0JCX0KLQotCQlyYyA9IGRzaV9kaXNwbGF5X3NldF9jbGFtcChkaXNwbGF5LCBm YWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGRpc2FibGUgZHNp IGNsYW1wcy4gcmM9JWRcbiIsCi0JCQkJX19mdW5jX18sIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0J CX0KLQotCQkvKgotCQkgKiBQaHkgc2V0dXAgaXMgbmVlZGVkIGlmIGNvbWluZyBvdXQgb2YgaWRs ZQotCQkgKiBwb3dlciBjb2xsYXBzZSB3aXRoIGNsYW1wcyBlbmFibGVkLgotCQkgKi8KLQkJaWYg KGRpc3BsYXktPnBoeV9pZGxlX3Bvd2VyX29mZiB8fCBtbXNzX2NsYW1wKQotCQkJZHNpX2Rpc3Bs YXlfcGh5X2lkbGVfb24oZGlzcGxheSwgbW1zc19jbGFtcCk7Ci0JfQotCWlmIChjbGsgJiBEU0lf TElOS19DTEspIHsKLQkJaWYgKGRpc3BsYXktPnVscHNfZW5hYmxlZCkgewotCQkJcmMgPSBkc2lf ZGlzcGxheV9zZXRfdWxwcyhkaXNwbGF5LCBmYWxzZSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9l cnIoIiVzOiBmYWlsZWQgdG8gZGlzYWJsZSB1bHBzLCByYz0gJWRcbiIsCi0JCQkJICAgICAgIF9f ZnVuY19fLCByYyk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCX0KLWVycm9yOgotCXJl dHVybiByYzsKLX0KLQotaW50IGRzaV9wb3N0X2Nsa29mZl9jYih2b2lkICpwcml2LAotCQkJICAg IGVudW0gZHNpX2Nsa190eXBlIGNsa190eXBlLAotCQkJICAgIGVudW0gZHNpX2Nsa19zdGF0ZSBj dXJyX3N0YXRlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5 ID0gcHJpdjsKLQotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoIiVzOiBJbnZhbGlkIGFyZ1xu IiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGNsa190eXBlICYg RFNJX0NPUkVfQ0xLKSAmJgotCSAgICAoY3Vycl9zdGF0ZSA9PSBEU0lfQ0xLX09GRikpIHsKLQot CQlyYyA9IGRzaV9kaXNwbGF5X3BoeV9wb3dlcl9vZmYoZGlzcGxheSk7Ci0JCWlmIChyYykKLQkJ CXByX2VycigiWyVzXSBmYWlsZWQgdG8gcG93ZXIgb2ZmIFBIWSwgcmM9JWRcbiIsCi0JCQkJICAg ZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JCXJjID0gZHNpX2Rpc3BsYXlfY3RybF9wb3dlcl9vZmYo ZGlzcGxheSk7Ci0JCWlmIChyYykKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcG93ZXIgRFNJ IHZyZWdzLCByYz0lZFxuIiwKLQkJCQkgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JfQotCXJldHVy biByYzsKLX0KLQotaW50IGRzaV9wcmVfY2xrb25fY2Iodm9pZCAqcHJpdiwKLQkJCSAgZW51bSBk c2lfY2xrX3R5cGUgY2xrX3R5cGUsCi0JCQkgIGVudW0gZHNpX2Nsa19zdGF0ZSBuZXdfc3RhdGUp Ci17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkgPSBwcml2Owot Ci0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVu Y19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKChjbGtfdHlwZSAmIERTSV9DT1JF X0NMSykgJiYgKG5ld19zdGF0ZSA9PSBEU0lfQ0xLX09OKSkgewotCQkvKgotCQkgKiBFbmFibGUg RFNJIGNvcmUgcG93ZXIKLQkJICogMS4+IFBBTkVMX1BNIGFyZSBjb250cm9sbGVkIGFzIHBhcnQg b2YKLQkJICogICAgIHBhbmVsX3Bvd2VyX2N0cmwuIE5lZWRlZCBub3QgYmUgaGFuZGxlZCBoZXJl LgotCQkgKiAyLj4gQ09SRV9QTSBhcmUgY29udHJvbGxlZCBieSBkc2kgY2xrIG1hbmFnZXIuCi0J CSAqIDMuPiBDVFJMX1BNIG5lZWQgdG8gYmUgZW5hYmxlZC9kaXNhYmxlZAotCQkgKiAgICAgb25s eSBkdXJpbmcgdW5ibGFuay9ibGFuay4gVGhlaXIgc3RhdGUgc2hvdWxkCi0JCSAqICAgICBub3Qg YmUgY2hhbmdlZCBkdXJpbmcgc3RhdGljIHNjcmVlbi4KLQkJICovCi0KLQkJcmMgPSBkc2lfZGlz cGxheV9jdHJsX3Bvd2VyX29uKGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVz XSBmYWlsZWQgdG8gcG93ZXIgb24gZHNpIGNvbnRyb2xsZXJzLCByYz0lZFxuIiwKLQkJCQkgICBk aXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQlyYyA9IGRzaV9kaXNw bGF5X3BoeV9wb3dlcl9vbihkaXNwbGF5KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIHBvd2VyIG9uIGRzaSBwaHksIHJjID0gJWRcbiIsCi0JCQkJICAgZGlzcGxheS0+ bmFtZSwgcmMpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcHJfZGVidWcoIiVzOiBFbmFibGUg RFNJIGNvcmUgcG93ZXJcbiIsIF9fZnVuY19fKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyB2b2lkIF9fc2V0X2xhbmVfbWFwX3YyKHU4ICpsYW5lX21hcF92MiwKLQllbnVtIGRzaV9w aHlfZGF0YV9sYW5lcyBsYW5lMCwKLQllbnVtIGRzaV9waHlfZGF0YV9sYW5lcyBsYW5lMSwKLQll bnVtIGRzaV9waHlfZGF0YV9sYW5lcyBsYW5lMiwKLQllbnVtIGRzaV9waHlfZGF0YV9sYW5lcyBs YW5lMykKLXsKLQlsYW5lX21hcF92MltEU0lfTE9HSUNBTF9MQU5FXzBdID0gbGFuZTA7Ci0JbGFu ZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8xXSA9IGxhbmUxOwotCWxhbmVfbWFwX3YyW0RTSV9M T0dJQ0FMX0xBTkVfMl0gPSBsYW5lMjsKLQlsYW5lX21hcF92MltEU0lfTE9HSUNBTF9MQU5FXzNd ID0gbGFuZTM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcGFyc2VfbGFuZV9tYXAoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDAsIGkgPSAwOwotCWNvbnN0 IGNoYXIgKmRhdGE7Ci0JdTggdGVtcFtEU0lfTEFORV9NQVggLSAxXTsKLQotCWlmICghZGlzcGxh eSkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JLyogbGFuZS1tYXAtdjIgc3VwZXJzZWRlcyBsYW5lLW1hcC12MSBzZXR0aW5nICovCi0J cmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KGRpc3BsYXktPnBkZXYtPmRldi5vZl9ub2Rl LAotCQkicWNvbSxsYW5lLW1hcC12MiIsIHRlbXAsIChEU0lfTEFORV9NQVggLSAxKSk7Ci0JaWYg KCFyYykgewotCQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkgPCAoRFNJX0xBTkVfTUFY IC0gMSk7IGkrKykKLQkJCWRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyW2ldID0gQklUKHRl bXBbaV0pOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHJjICE9IEVJTlZBTCkgewotCQlwcl9k ZWJ1ZygiSW5jb3JyZWN0IG1hcHBpbmcsIGNvbmZpZ3VyZSBkZWZhdWx0XG4iKTsKLQkJZ290byBz ZXRfZGVmYXVsdDsKLQl9Ci0KLQkvKiBsYW5lLW1hcCBvbGRlciB2ZXJzaW9uLCBmb3IgRFNJIGNv bnRyb2xsZXIgdmVyc2lvbiA8IDIuMCAqLwotCWRhdGEgPSBvZl9nZXRfcHJvcGVydHkoZGlzcGxh eS0+cGRldi0+ZGV2Lm9mX25vZGUsCi0JCSJxY29tLGxhbmUtbWFwIiwgTlVMTCk7Ci0JaWYgKCFk YXRhKQotCQlnb3RvIHNldF9kZWZhdWx0OwotCi0JaWYgKCFzdHJjbXAoZGF0YSwgImxhbmVfbWFw XzMwMTIiKSkgewotCQlkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MSA9IERTSV9MQU5FX01B UF8zMDEyOwotCQlfX3NldF9sYW5lX21hcF92MihkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92 MiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzEsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yLAotCQkJ RFNJX1BIWVNJQ0FMX0xBTkVfMywKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzApOwotCX0gZWxzZSBp ZiAoIXN0cmNtcChkYXRhLCAibGFuZV9tYXBfMjMwMSIpKSB7Ci0JCWRpc3BsYXktPmxhbmVfbWFw LmxhbmVfbWFwX3YxID0gRFNJX0xBTkVfTUFQXzIzMDE7Ci0JCV9fc2V0X2xhbmVfbWFwX3YyKGRp c3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMiwKLQkJ CURTSV9QSFlTSUNBTF9MQU5FXzMsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8wLAotCQkJRFNJX1BI WVNJQ0FMX0xBTkVfMSk7Ci0JfSBlbHNlIGlmICghc3RyY21wKGRhdGEsICJsYW5lX21hcF8xMjMw IikpIHsKLQkJZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjEgPSBEU0lfTEFORV9NQVBfMTIz MDsKLQkJX19zZXRfbGFuZV9tYXBfdjIoZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBfdjIsCi0J CQlEU0lfUEhZU0lDQUxfTEFORV8zLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMCwKLQkJCURTSV9Q SFlTSUNBTF9MQU5FXzEsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yKTsKLQl9IGVsc2UgaWYgKCFz dHJjbXAoZGF0YSwgImxhbmVfbWFwXzAzMjEiKSkgewotCQlkaXNwbGF5LT5sYW5lX21hcC5sYW5l X21hcF92MSA9IERTSV9MQU5FX01BUF8wMzIxOwotCQlfX3NldF9sYW5lX21hcF92MihkaXNwbGF5 LT5sYW5lX21hcC5sYW5lX21hcF92MiwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzAsCi0JCQlEU0lf UEhZU0lDQUxfTEFORV8zLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMiwKLQkJCURTSV9QSFlTSUNB TF9MQU5FXzEpOwotCX0gZWxzZSBpZiAoIXN0cmNtcChkYXRhLCAibGFuZV9tYXBfMTAzMiIpKSB7 Ci0JCWRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YxID0gRFNJX0xBTkVfTUFQXzEwMzI7Ci0J CV9fc2V0X2xhbmVfbWFwX3YyKGRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyLAotCQkJRFNJ X1BIWVNJQ0FMX0xBTkVfMSwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzAsCi0JCQlEU0lfUEhZU0lD QUxfTEFORV8zLAotCQkJRFNJX1BIWVNJQ0FMX0xBTkVfMik7Ci0JfSBlbHNlIGlmICghc3RyY21w KGRhdGEsICJsYW5lX21hcF8yMTAzIikpIHsKLQkJZGlzcGxheS0+bGFuZV9tYXAubGFuZV9tYXBf djEgPSBEU0lfTEFORV9NQVBfMjEwMzsKLQkJX19zZXRfbGFuZV9tYXBfdjIoZGlzcGxheS0+bGFu ZV9tYXAubGFuZV9tYXBfdjIsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yLAotCQkJRFNJX1BIWVNJ Q0FMX0xBTkVfMSwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzAsCi0JCQlEU0lfUEhZU0lDQUxfTEFO RV8zKTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoZGF0YSwgImxhbmVfbWFwXzMyMTAiKSkgewotCQlk aXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MSA9IERTSV9MQU5FX01BUF8zMjEwOwotCQlfX3Nl dF9sYW5lX21hcF92MihkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MiwKLQkJCURTSV9QSFlT SUNBTF9MQU5FXzMsCi0JCQlEU0lfUEhZU0lDQUxfTEFORV8yLAotCQkJRFNJX1BIWVNJQ0FMX0xB TkVfMSwKLQkJCURTSV9QSFlTSUNBTF9MQU5FXzApOwotCX0gZWxzZSB7Ci0JCXByX3dhcm4oIiVz OiBpbnZhbGlkIGxhbmUgbWFwICVzIHNwZWNpZmllZC4gZGVmYXVsdGluZyB0byBsYW5lX21hcDAx MjNcbiIsCi0JCQlfX2Z1bmNfXywgZGF0YSk7Ci0JCWdvdG8gc2V0X2RlZmF1bHQ7Ci0JfQotCXJl dHVybiAwOwotCi1zZXRfZGVmYXVsdDoKLQkvKiBkZWZhdWx0IGxhbmUgbWFwcGluZyAqLwotCV9f c2V0X2xhbmVfbWFwX3YyKGRpc3BsYXktPmxhbmVfbWFwLmxhbmVfbWFwX3YyLCBEU0lfUEhZU0lD QUxfTEFORV8wLAotCQlEU0lfUEhZU0lDQUxfTEFORV8xLCBEU0lfUEhZU0lDQUxfTEFORV8yLCBE U0lfUEhZU0lDQUxfTEFORV8zKTsKLQlkaXNwbGF5LT5sYW5lX21hcC5sYW5lX21hcF92MSA9IERT SV9MQU5FX01BUF8wMTIzOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5 X3BhcnNlX2R0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwot CWludCBpOwotCXUzMiBwaHlfY291bnQgPSAwOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9k ZTsKLQotCS8qIFBhcnNlIGNvbnRyb2xsZXJzICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9EU0lf Q1RSTFNfUEVSX0RJU1BMQVk7IGkrKykgewotCQlvZl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShk aXNwbGF5LT5wZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkJICAgInFjb20sZHNpLWN0cmwiLCBpKTsK LQkJaWYgKCFvZl9ub2RlKSB7Ci0JCQlpZiAoIWkpIHsKLQkJCQlwcl9lcnIoIk5vIGNvbnRyb2xs ZXJzIHByZXNlbnRcbiIpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQotCQkJYnJlYWs7Ci0J CX0KLQotCQlkaXNwbGF5LT5jdHJsW2ldLmN0cmxfb2Zfbm9kZSA9IG9mX25vZGU7Ci0JCWRpc3Bs YXktPmN0cmxfY291bnQrKzsKLQl9Ci0KLQkvKiBQYXJzZSBQaHlzICovCi0JZm9yIChpID0gMDsg aSA8IE1BWF9EU0lfQ1RSTFNfUEVSX0RJU1BMQVk7IGkrKykgewotCQlvZl9ub2RlID0gb2ZfcGFy c2VfcGhhbmRsZShkaXNwbGF5LT5wZGV2LT5kZXYub2Zfbm9kZSwKLQkJCQkJICAgInFjb20sZHNp LXBoeSIsIGkpOwotCQlpZiAoIW9mX25vZGUpIHsKLQkJCWlmICghaSkgewotCQkJCXByX2Vycigi Tm8gUEhZIGRldmljZXMgcHJlc2VudFxuIik7Ci0JCQkJcmMgPSAtRU5PREVWOwotCQkJCWdvdG8g ZXJyb3I7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCWRpc3BsYXktPmN0cmxbaV0ucGh5X29m X25vZGUgPSBvZl9ub2RlOwotCQlwaHlfY291bnQrKzsKLQl9Ci0KLQlpZiAocGh5X2NvdW50ICE9 IGRpc3BsYXktPmN0cmxfY291bnQpIHsKLQkJcHJfZXJyKCJOdW1iZXIgb2YgY29udHJvbGxlcnMg ZG9lcyBub3QgbWF0Y2ggUEhZc1xuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlvZl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShkaXNwbGF5LT5wZGV2LT5kZXYub2Zf bm9kZSwKLQkJCQkgICAicWNvbSxkc2ktcGFuZWwiLCAwKTsKLQlpZiAoIW9mX25vZGUpIHsKLQkJ cHJfZXJyKCJObyBQYW5lbCBkZXZpY2UgcHJlc2VudFxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJ Z290byBlcnJvcjsKLQl9IGVsc2UgewotCQlkaXNwbGF5LT5wYW5lbF9vZiA9IG9mX25vZGU7Ci0J fQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfcmVz X2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0JaW50 IGk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmN0cmw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg ZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsK LQkJY3RybC0+Y3RybCA9IGRzaV9jdHJsX2dldChjdHJsLT5jdHJsX29mX25vZGUpOwotCQlpZiAo SVNfRVJSX09SX05VTEwoY3RybC0+Y3RybCkpIHsKLQkJCXJjID0gUFRSX0VSUihjdHJsLT5jdHJs KTsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCBkc2kgY29udHJvbGxlciwgcmM9JWRcbiIsIHJj KTsKLQkJCWN0cmwtPmN0cmwgPSBOVUxMOwotCQkJZ290byBlcnJvcl9jdHJsX3B1dDsKLQkJfQot Ci0JCWN0cmwtPnBoeSA9IGRzaV9waHlfZ2V0KGN0cmwtPnBoeV9vZl9ub2RlKTsKLQkJaWYgKElT X0VSUl9PUl9OVUxMKGN0cmwtPnBoeSkpIHsKLQkJCXJjID0gUFRSX0VSUihjdHJsLT5waHkpOwot CQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IHBoeSBjb250cm9sbGVyLCByYz0lZFxuIiwgcmMpOwot CQkJZHNpX2N0cmxfcHV0KGN0cmwtPmN0cmwpOwotCQkJY3RybC0+cGh5ID0gTlVMTDsKLQkJCWdv dG8gZXJyb3JfY3RybF9wdXQ7Ci0JCX0KLQl9Ci0KLQlkaXNwbGF5LT5wYW5lbCA9IGRzaV9wYW5l bF9nZXQoJmRpc3BsYXktPnBkZXYtPmRldiwgZGlzcGxheS0+cGFuZWxfb2YsCi0JCQkJCQlkaXNw bGF5LT5jbWRsaW5lX3RvcG9sb2d5KTsKLQlpZiAoSVNfRVJSX09SX05VTEwoZGlzcGxheS0+cGFu ZWwpKSB7Ci0JCXJjID0gUFRSX0VSUihkaXNwbGF5LT5wYW5lbCk7Ci0JCXByX2VycigiZmFpbGVk IHRvIGdldCBwYW5lbCwgcmM9JWRcbiIsIHJjKTsKLQkJZGlzcGxheS0+cGFuZWwgPSBOVUxMOwot CQlnb3RvIGVycm9yX2N0cmxfcHV0OwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlfcGFyc2VfbGFu ZV9tYXAoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiTGFuZSBtYXAgbm90IGZvdW5k LCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfcHV0OwotCX0KLQotCXJjID0gZHNp X2Rpc3BsYXlfY2xvY2tzX2luaXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiRmFp bGVkIHRvIHBhcnNlIGNsb2NrIGRhdGEsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3JfY3Ry bF9wdXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci1lcnJvcl9jdHJsX3B1dDoKLQlmb3IgKGkgPSBpIC0g MTsgaSA+PSAwOyBpLS0pIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlkc2lfY3Ry bF9wdXQoY3RybC0+Y3RybCk7Ci0JCWRzaV9waHlfcHV0KGN0cmwtPnBoeSk7Ci0JfQotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9yZXNfZGVpbml0KHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lf ZGlzcGxheV9jdHJsICpjdHJsOwotCi0JcmMgPSBkc2lfZGlzcGxheV9jbG9ja3NfZGVpbml0KGRp c3BsYXkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJjbG9ja3MgZGVpbml0IGZhaWxlZCwgcmM9JWRc biIsIHJjKTsKLQotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsK LQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlkc2lfcGh5X3B1dChjdHJsLT5waHkpOwot CQlkc2lfY3RybF9wdXQoY3RybC0+Y3RybCk7Ci0JfQotCi0JaWYgKGRpc3BsYXktPnBhbmVsKQot CQlkc2lfcGFuZWxfcHV0KGRpc3BsYXktPnBhbmVsKTsKLQotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlX3NldChzdHJ1Y3QgZHNpX2Rpc3BsYXkg KmRpc3BsYXksCi0JCQkJCSBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkJIHUz MiBmbGFncykKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9j dHJsICpjdHJsOwotCi0JLyoKLQkgKiBUbyBzZXQgYSBtb2RlOgotCSAqIDEuIENvbnRyb2xsZXJz IHNob3VsZCBiZSB0dXJuZWQgb2ZmLgotCSAqIDIuIExpbmsgY2xvY2tzIHNob3VsZCBiZSBvZmYu Ci0JICogMy4gUGh5IHNob3VsZCBiZSBkaXNhYmxlZC4KLQkgKi8KLQotCWZvciAoaSA9IDA7IGkg PCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ld OwotCQlpZiAoKGN0cmwtPnBvd2VyX3N0YXRlID4gRFNJX0NUUkxfUE9XRVJfVlJFR19PTikgfHwK LQkJICAgIChjdHJsLT5waHlfZW5hYmxlZCkpIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8g ZXJyb3I7Ci0JCX0KLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGJvb2wg ZHNpX2Rpc3BsYXlfaXNfc2VhbWxlc3NfZGZwc19wb3NzaWJsZSgKLQkJY29uc3Qgc3RydWN0IGRz aV9kaXNwbGF5ICpkaXNwbGF5LAotCQljb25zdCBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqdGd0 LAotCQljb25zdCBlbnVtIGRzaV9kZnBzX3R5cGUgZGZwc190eXBlKQotewotCXN0cnVjdCBkc2lf ZGlzcGxheV9tb2RlICpjdXI7Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIXRndCB8fCAhZGlzcGxheS0+ cGFuZWwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQljdXIgPSBkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGU7Ci0KLQlpZiAoY3VyLT50aW1p bmcuaF9hY3RpdmUgIT0gdGd0LT50aW1pbmcuaF9hY3RpdmUpIHsKLQkJcHJfZGVidWcoInRpbWlu Zy5oX2FjdGl2ZSBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGltaW5nLmhfYWN0aXZlLCB0 Z3QtPnRpbWluZy5oX2FjdGl2ZSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY3VyLT50 aW1pbmcuaF9iYWNrX3BvcmNoICE9IHRndC0+dGltaW5nLmhfYmFja19wb3JjaCkgewotCQlwcl9k ZWJ1ZygidGltaW5nLmhfYmFja19wb3JjaCBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1ci0+dGlt aW5nLmhfYmFja19wb3JjaCwKLQkJCQl0Z3QtPnRpbWluZy5oX2JhY2tfcG9yY2gpOwotCQlyZXR1 cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGN1ci0+dGltaW5nLmhfc3luY193aWR0aCAhPSB0Z3QtPnRp bWluZy5oX3N5bmNfd2lkdGgpIHsKLQkJcHJfZGVidWcoInRpbWluZy5oX3N5bmNfd2lkdGggZGlm ZmVycyAlZCAlZFxuIiwKLQkJCQljdXItPnRpbWluZy5oX3N5bmNfd2lkdGgsCi0JCQkJdGd0LT50 aW1pbmcuaF9zeW5jX3dpZHRoKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdXItPnRp bWluZy5oX2Zyb250X3BvcmNoICE9IHRndC0+dGltaW5nLmhfZnJvbnRfcG9yY2gpIHsKLQkJcHJf ZGVidWcoInRpbWluZy5oX2Zyb250X3BvcmNoIGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50 aW1pbmcuaF9mcm9udF9wb3JjaCwKLQkJCQl0Z3QtPnRpbWluZy5oX2Zyb250X3BvcmNoKTsKLQkJ aWYgKGRmcHNfdHlwZSAhPSBEU0lfREZQU19JTU1FRElBVEVfSEZQKQotCQkJcmV0dXJuIGZhbHNl OwotCX0KLQotCWlmIChjdXItPnRpbWluZy5oX3NrZXcgIT0gdGd0LT50aW1pbmcuaF9za2V3KSB7 Ci0JCXByX2RlYnVnKCJ0aW1pbmcuaF9za2V3IGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50 aW1pbmcuaF9za2V3LAotCQkJCXRndC0+dGltaW5nLmhfc2tldyk7Ci0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQkvKiBza2lwIHBvbGFyaXR5IGNvbXBhcmlzb24gKi8KLQotCWlmIChjdXItPnRpbWlu Zy52X2FjdGl2ZSAhPSB0Z3QtPnRpbWluZy52X2FjdGl2ZSkgewotCQlwcl9kZWJ1ZygidGltaW5n LnZfYWN0aXZlIGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcudl9hY3RpdmUsCi0J CQkJdGd0LT50aW1pbmcudl9hY3RpdmUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKGN1 ci0+dGltaW5nLnZfYmFja19wb3JjaCAhPSB0Z3QtPnRpbWluZy52X2JhY2tfcG9yY2gpIHsKLQkJ cHJfZGVidWcoInRpbWluZy52X2JhY2tfcG9yY2ggZGlmZmVycyAlZCAlZFxuIiwKLQkJCQljdXIt PnRpbWluZy52X2JhY2tfcG9yY2gsCi0JCQkJdGd0LT50aW1pbmcudl9iYWNrX3BvcmNoKTsKLQkJ cmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdXItPnRpbWluZy52X3N5bmNfd2lkdGggIT0gdGd0 LT50aW1pbmcudl9zeW5jX3dpZHRoKSB7Ci0JCXByX2RlYnVnKCJ0aW1pbmcudl9zeW5jX3dpZHRo IGRpZmZlcnMgJWQgJWRcbiIsCi0JCQkJY3VyLT50aW1pbmcudl9zeW5jX3dpZHRoLAotCQkJCXRn dC0+dGltaW5nLnZfc3luY193aWR0aCk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoY3Vy LT50aW1pbmcudl9mcm9udF9wb3JjaCAhPSB0Z3QtPnRpbWluZy52X2Zyb250X3BvcmNoKSB7Ci0J CXByX2RlYnVnKCJ0aW1pbmcudl9mcm9udF9wb3JjaCBkaWZmZXJzICVkICVkXG4iLAotCQkJCWN1 ci0+dGltaW5nLnZfZnJvbnRfcG9yY2gsCi0JCQkJdGd0LT50aW1pbmcudl9mcm9udF9wb3JjaCk7 Ci0JCWlmIChkZnBzX3R5cGUgIT0gRFNJX0RGUFNfSU1NRURJQVRFX1ZGUCkKLQkJCXJldHVybiBm YWxzZTsKLQl9Ci0KLQkvKiBza2lwIHBvbGFyaXR5IGNvbXBhcmlzb24gKi8KLQotCWlmIChjdXIt PnRpbWluZy5yZWZyZXNoX3JhdGUgPT0gdGd0LT50aW1pbmcucmVmcmVzaF9yYXRlKQotCQlwcl9k ZWJ1ZygidGltaW5nLnJlZnJlc2hfcmF0ZSBpZGVudGljYWwgJWQgJWRcbiIsCi0JCQkJY3VyLT50 aW1pbmcucmVmcmVzaF9yYXRlLAotCQkJCXRndC0+dGltaW5nLnJlZnJlc2hfcmF0ZSk7Ci0KLQlp ZiAoY3VyLT5waXhlbF9jbGtfa2h6ICE9IHRndC0+cGl4ZWxfY2xrX2toeikKLQkJcHJfZGVidWco InBpeGVsX2Nsa19raHogZGlmZmVycyAlZCAlZFxuIiwKLQkJCQljdXItPnBpeGVsX2Nsa19raHos IHRndC0+cGl4ZWxfY2xrX2toeik7Ci0KLQlpZiAoY3VyLT5kc2lfbW9kZV9mbGFncyAhPSB0Z3Qt PmRzaV9tb2RlX2ZsYWdzKQotCQlwcl9kZWJ1ZygiZmxhZ3MgZGlmZmVycyAlZCAlZFxuIiwKLQkJ CQljdXItPmRzaV9tb2RlX2ZsYWdzLCB0Z3QtPmRzaV9tb2RlX2ZsYWdzKTsKLQotCXJldHVybiB0 cnVlOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2RmcHNfdXBkYXRlKHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSwKLQkJCQkgICBzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqZHNpX21v ZGUpCi17Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8gKnRpbWluZzsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqcGFuZWxf bW9kZTsKLQlzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzIGRmcHNfY2FwczsKLQlpbnQgcmMg PSAwOwotCWludCBpID0gMDsKLQotCWlmICghZGlzcGxheSB8fCAhZHNpX21vZGUgfHwgIWRpc3Bs YXktPnBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0JdGltaW5nID0gJmRzaV9tb2RlLT50aW1pbmc7Ci0KLQlkc2lfcGFuZWxfZ2V0 X2RmcHNfY2FwcyhkaXNwbGF5LT5wYW5lbCwgJmRmcHNfY2Fwcyk7Ci0JaWYgKCFkZnBzX2NhcHMu ZGZwc19zdXBwb3J0KSB7Ci0JCXByX2VycigiZGZwcyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0 dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlpZiAoZGZwc19jYXBzLnR5cGUgPT0gRFNJX0RGUFNfSU1N RURJQVRFX0NMSykgewotCQlwcl9lcnIoImRmcHMgY2xvY2sgbWV0aG9kIG5vdCBzdXBwb3J0ZWRc biIpOwotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0KLQotCS8qIEZvciBzcGxpdCBEU0ksIHVwZGF0 ZSB0aGUgY2xvY2sgbWFzdGVyIGZpcnN0ICovCi0KLQlwcl9kZWJ1ZygiY29uZmlndXJpbmcgc2Vh bWxlc3MgZHluYW1pYyBmcHNcblxuIik7Ci0KLQltX2N0cmwgPSAmZGlzcGxheS0+Y3RybFtkaXNw bGF5LT5jbGtfbWFzdGVyX2lkeF07Ci0JcmMgPSBkc2lfY3RybF9hc3luY190aW1pbmdfdXBkYXRl KG1fY3RybC0+Y3RybCwgdGltaW5nKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxl ZCB0byBkZnBzIHVwZGF0ZSBob3N0XyVkLCByYz0lZFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1lLCBp LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogVXBkYXRlIHRoZSByZXN0IG9mIHRoZSBj b250cm9sbGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5jdHJsX2NvdW50OyBpKysp IHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwotCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0 cmwgPT0gbV9jdHJsKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJjID0gZHNpX2N0cmxfYXN5bmNfdGlt aW5nX3VwZGF0ZShjdHJsLT5jdHJsLCB0aW1pbmcpOwotCQlpZiAocmMpIHsKLQkJCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gZGZwcyB1cGRhdGUgaG9zdF8lZCwgcmM9JWRcbiIsCi0JCQkJCWRpc3Bs YXktPm5hbWUsIGksIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlwYW5lbF9tb2Rl ID0gZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlOwotCW1lbWNweShwYW5lbF9tb2RlLCBkc2lfbW9k ZSwgc2l6ZW9mKCpwYW5lbF9tb2RlKSk7Ci0JLyoKLQkgKiBkc2lfbW9kZV9mbGFncyBmbGFncyBh cmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIG90aGVyIGRybSBkcml2ZXIKLQkgKiBjb21wb25l bnRzLCBhbmQgYXJlIHRyYW5zaWVudC4gVGhleSBhcmVuJ3QgaW5oZXJlbnRseSBwYXJ0IG9mIHRo ZQotCSAqIGRpc3BsYXkgcGFuZWwncyBtb2RlIGFuZCBzaG91bGRuJ3QgYmUgc2F2ZWQgaW50byB0 aGUgY2FjaGVkIGN1cnJlbnRseQotCSAqIGFjdGl2ZSBtb2RlLgotCSAqLwotCXBhbmVsX21vZGUt PmRzaV9tb2RlX2ZsYWdzID0gMDsKLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRzaV9kaXNwbGF5X2RmcHNfY2FsY19mcm9udF9wb3JjaCgKLQkJdTMyIG9sZF9mcHMsCi0J CXUzMiBuZXdfZnBzLAotCQl1MzIgYV90b3RhbCwKLQkJdTMyIGJfdG90YWwsCi0JCXUzMiBiX2Zw LAotCQl1MzIgKmJfZnBfb3V0KQotewotCXMzMiBiX2ZwX25ldzsKLQlpbnQgYWRkX3BvcmNoZXMs IGRpZmY7Ci0KLQlpZiAoIWJfZnBfb3V0KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXMiKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFhX3RvdGFsIHx8ICFuZXdfZnBzKSB7Ci0J CXByX2VycigiSW52YWxpZCBwaXhlbCB0b3RhbCBvciBuZXcgZnBzIGluIG1vZGUgcmVxdWVzdFxu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogS2VlcCBjbG9jaywgb3RoZXIg cG9yY2hlcyBjb25zdGFudCwgdXNlIG5ldyBmcHMsIGNhbGMgZnJvbnQgcG9yY2gKLQkgKiBuZXdf dnRvdGFsID0gb2xkX3Z0b3RhbCAqIChvbGRfZnBzIC8gbmV3X2ZwcyApCi0JICogbmV3X3ZmcCAt IG9sZF92ZnAgPSBuZXdfdnRvdGFsIC0gb2xkX3Z0b3RhbAotCSAqIG5ld192ZnAgPSBvbGRfdmZw ICsgb2xkX3Z0b3RhbCAqICgob2xkX2ZwcyAtIG5ld19mcHMpLyBuZXdfZnBzKQotCSAqLwotCWRp ZmYgPSBhYnMob2xkX2ZwcyAtIG5ld19mcHMpOwotCWFkZF9wb3JjaGVzID0gbXVsdF9mcmFjKGJf dG90YWwsIGRpZmYsIG5ld19mcHMpOwotCi0JaWYgKG9sZF9mcHMgPiBuZXdfZnBzKQotCQliX2Zw X25ldyA9IGJfZnAgKyBhZGRfcG9yY2hlczsKLQllbHNlCi0JCWJfZnBfbmV3ID0gYl9mcCAtIGFk ZF9wb3JjaGVzOwotCi0JcHJfZGVidWcoImZwcyAldSBhICV1IGIgJXUgYl9mcCAldSBuZXdfZnAg JWRcbiIsCi0JCQluZXdfZnBzLCBhX3RvdGFsLCBiX3RvdGFsLCBiX2ZwLCBiX2ZwX25ldyk7Ci0K LQlpZiAoYl9mcF9uZXcgPCAwKSB7Ci0JCXByX2VycigiSW52YWxpZCBuZXdfaGZwIGNhbGNsdWF0 ZWQlZFxuIiwgYl9mcF9uZXcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKioKLQkgKiBU T0RPOiBUbyBkaWZmZXJlbnRpYXRlIGZyb20gY2xvY2sgbWV0aG9kIHdoZW4gY29tbXVuaWNhdGlu ZyB0byB0aGUKLQkgKiBvdGhlciBjb21wb25lbnRzLCBwZXJoYXBzIHdlIHNob3VsZCBzZXQgY2xr IGhlcmUgdG8gb3JpZ2luYWwgdmFsdWUKLQkgKi8KLQkqYl9mcF9vdXQgPSBiX2ZwX25ldzsKLQot CXJldHVybiAwOwotfQotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2dldF9kZnBzX3RpbWluZygpIC0g R2V0IHRoZSBuZXcgZGZwcyB2YWx1ZXMuCi0gKiBAZGlzcGxheTogICAgICAgICBEU0kgZGlzcGxh eSBoYW5kbGUuCi0gKiBAYWRqX21vZGU6ICAgICAgICBNb2RlIHZhbHVlIHN0cnVjdHVyZSB0byBi ZSBjaGFuZ2VkLgotICogICAgICAgICAgICAgICAgICAgSXQgY29udGFpbnMgb2xkIHRpbWluZyB2 YWx1ZXMgYW5kIGxhdGVzdCBmcHMgdmFsdWUuCi0gKiAgICAgICAgICAgICAgICAgICBOZXcgdGlt aW5nIHZhbHVlcyBhcmUgdXBkYXRlZCBiYXNlZCBvbiBuZXcgZnBzLgotICogQGN1cnJfcmVmcmVz aF9yYXRlOiAgQ3VycmVudCBmcHMgcmF0ZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIElmIHpl cm8gLCBjdXJyZW50IGZwcyByYXRlIGlzIHRha2VuIGZyb20KLSAqICAgICAgICAgICAgICAgICAg ICAgIGRpc3BsYXktPnBhbmVsLT5jdXJfbW9kZS4KLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAq Lwotc3RhdGljIGludCBkc2lfZGlzcGxheV9nZXRfZGZwc190aW1pbmcoc3RydWN0IGRzaV9kaXNw bGF5ICpkaXNwbGF5LAotCQkJc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKmFkal9tb2RlLAotCQkJ CXUzMiBjdXJyX3JlZnJlc2hfcmF0ZSkKLXsKLQlzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVz IGRmcHNfY2FwczsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBwZXJfY3RybF9tb2RlOwotCXN0 cnVjdCBkc2lfbW9kZV9pbmZvICp0aW1pbmc7Ci0Jc3RydWN0IGRzaV9jdHJsICptX2N0cmw7Ci0K LQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFhZGpfbW9kZSkgewotCQlwcl9lcnIo IkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCW1fY3RybCA9IGRp c3BsYXktPmN0cmxbZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHhdLmN0cmw7Ci0KLQlkc2lfcGFuZWxf Z2V0X2RmcHNfY2FwcyhkaXNwbGF5LT5wYW5lbCwgJmRmcHNfY2Fwcyk7Ci0JaWYgKCFkZnBzX2Nh cHMuZGZwc19zdXBwb3J0KSB7Ci0JCXByX2VycigiZGZwcyBub3Qgc3VwcG9ydGVkIGJ5IHBhbmVs XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGVyX2N0cmxfbW9kZSA9ICphZGpfbW9k ZTsKLQlhZGp1c3RfdGltaW5nX2J5X2N0cmxfY291bnQoZGlzcGxheSwgJnBlcl9jdHJsX21vZGUp OwotCi0JaWYgKCFjdXJyX3JlZnJlc2hfcmF0ZSkgewotCQlpZiAoIWRzaV9kaXNwbGF5X2lzX3Nl YW1sZXNzX2RmcHNfcG9zc2libGUoZGlzcGxheSwKLQkJCQkmcGVyX2N0cmxfbW9kZSwgZGZwc19j YXBzLnR5cGUpKSB7Ci0JCQlwcl9lcnIoInNlYW1sZXNzIGR5bmFtaWMgZnBzIG5vdCBzdXBwb3J0 ZWQgZm9yIG1vZGVcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKGRpc3BsYXkt PnBhbmVsLT5jdXJfbW9kZSkgewotCQkJY3Vycl9yZWZyZXNoX3JhdGUgPQotCQkJCWRpc3BsYXkt PnBhbmVsLT5jdXJfbW9kZS0+dGltaW5nLnJlZnJlc2hfcmF0ZTsKLQkJfSBlbHNlIHsKLQkJCXBy X2VycigiY3VyX21vZGUgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFM OwotCQl9Ci0JfQotCS8qIFRPRE86IFJlbW92ZSB0aGlzIGRpcmVjdCByZWZlcmVuY2UgdG8gdGhl IGRzaV9jdHJsICovCi0JdGltaW5nID0gJnBlcl9jdHJsX21vZGUudGltaW5nOwotCi0Jc3dpdGNo IChkZnBzX2NhcHMudHlwZSkgewotCWNhc2UgRFNJX0RGUFNfSU1NRURJQVRFX1ZGUDoKLQkJcmMg PSBkc2lfZGlzcGxheV9kZnBzX2NhbGNfZnJvbnRfcG9yY2goCi0JCQkJY3Vycl9yZWZyZXNoX3Jh dGUsCi0JCQkJdGltaW5nLT5yZWZyZXNoX3JhdGUsCi0JCQkJRFNJX0hfVE9UQUwodGltaW5nKSwK LQkJCQlEU0lfVl9UT1RBTCh0aW1pbmcpLAotCQkJCXRpbWluZy0+dl9mcm9udF9wb3JjaCwKLQkJ CQkmYWRqX21vZGUtPnRpbWluZy52X2Zyb250X3BvcmNoKTsKLQkJYnJlYWs7Ci0KLQljYXNlIERT SV9ERlBTX0lNTUVESUFURV9IRlA6Ci0JCXJjID0gZHNpX2Rpc3BsYXlfZGZwc19jYWxjX2Zyb250 X3BvcmNoKAotCQkJCWN1cnJfcmVmcmVzaF9yYXRlLAotCQkJCXRpbWluZy0+cmVmcmVzaF9yYXRl LAotCQkJCURTSV9WX1RPVEFMKHRpbWluZyksCi0JCQkJRFNJX0hfVE9UQUwodGltaW5nKSwKLQkJ CQl0aW1pbmctPmhfZnJvbnRfcG9yY2gsCi0JCQkJJmFkal9tb2RlLT50aW1pbmcuaF9mcm9udF9w b3JjaCk7Ci0JCWlmICghcmMpCi0JCQlhZGpfbW9kZS0+dGltaW5nLmhfZnJvbnRfcG9yY2ggKj0g ZGlzcGxheS0+Y3RybF9jb3VudDsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcl9lcnIoIlVu c3VwcG9ydGVkIERGUFMgbW9kZSAlZFxuIiwgZGZwc19jYXBzLnR5cGUpOwotCQlyYyA9IC1FTk9U U1VQUDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBib29sIGRzaV9kaXNwbGF5X3Zh bGlkYXRlX21vZGVfc2VhbWxlc3Moc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQlzdHJ1 Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICgh ZGlzcGxheSB8fCAhYWRqX21vZGUpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0J CXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKiBDdXJyZW50bHkgdGhlIG9ubHkgc2VhbWxlc3MgdHJh bnNpdGlvbiBpcyBkeW5hbWljIGZwcyAqLwotCXJjID0gZHNpX2Rpc3BsYXlfZ2V0X2RmcHNfdGlt aW5nKGRpc3BsYXksIGFkal9tb2RlLCAwKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIkR5bmFt aWMgRlBTIG5vdCBzdXBwb3J0ZWQgZm9yIHNlYW1sZXNzXG4iKTsKLQl9IGVsc2UgewotCQlwcl9k ZWJ1ZygiTW9kZSBzd2l0Y2ggaXMgc2VhbWxlc3MgRHluYW1pYyBGUFNcbiIpOwotCQlhZGpfbW9k ZS0+ZHNpX21vZGVfZmxhZ3MgfD0gRFNJX01PREVfRkxBR19ERlBTIHwKLQkJCQlEU0lfTU9ERV9G TEFHX1ZCTEFOS19QUkVfTU9ERVNFVDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX2Rpc3BsYXlfc2V0X21vZGVfc3ViKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwK LQkJCQkgICAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJICAgIHUzMiBmbGFn cykKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpj dHJsOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlX3ByaXZfaW5mbyAqcHJpdl9pbmZvOwotCi0J cHJpdl9pbmZvID0gbW9kZS0+cHJpdl9pbmZvOwotCWlmICghcHJpdl9pbmZvKSB7Ci0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gZ2V0IHByaXZhdGUgaW5mbyBvZiB0aGUgZGlzcGxheSBtb2RlIiwK LQkJCWRpc3BsYXktPm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyYyA9IGRzaV9w YW5lbF9nZXRfaG9zdF9jZmdfZm9yX21vZGUoZGlzcGxheS0+cGFuZWwsCi0JCQkJCSAgICAgbW9k ZSwKLQkJCQkJICAgICAmZGlzcGxheS0+Y29uZmlnKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJb JXNdIGZhaWxlZCB0byBnZXQgaG9zdCBjb25maWcgZm9yIG1vZGUsIHJjPSVkXG4iLAotCQkgICAg ICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW1lbWNweSgmZGlz cGxheS0+Y29uZmlnLmxhbmVfbWFwLCAmZGlzcGxheS0+bGFuZV9tYXAsCi0JICAgICAgIHNpemVv ZihkaXNwbGF5LT5sYW5lX21hcCkpOwotCi0JaWYgKG1vZGUtPmRzaV9tb2RlX2ZsYWdzICYKLQkJ CShEU0lfTU9ERV9GTEFHX0RGUFMgfCBEU0lfTU9ERV9GTEFHX1ZSUikpIHsKLQkJcmMgPSBkc2lf ZGlzcGxheV9kZnBzX3VwZGF0ZShkaXNwbGF5LCBtb2RlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoIlslc11EU0kgZGZwcyB1cGRhdGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJCQkJZGlzcGxheS0+ bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBk aXNwbGF5LT5jdHJsX2NvdW50OyBpKyspIHsKLQkJY3RybCA9ICZkaXNwbGF5LT5jdHJsW2ldOwot CQlyYyA9IGRzaV9jdHJsX3VwZGF0ZV9ob3N0X2NvbmZpZyhjdHJsLT5jdHJsLCAmZGlzcGxheS0+ Y29uZmlnLAotCQkJCW1vZGUtPmRzaV9tb2RlX2ZsYWdzLCBkaXNwbGF5LT5kc2lfY2xrX2hhbmRs ZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byB1cGRhdGUgY3RybCBj b25maWcsIHJjPSVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8g ZXJyb3I7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdl9pbmZvLT5waHlfdGltaW5nX2xlbikgewotCQlm b3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCQljdHJsID0gJmRp c3BsYXktPmN0cmxbaV07Ci0JCQkgcmMgPSBkc2lfcGh5X3NldF90aW1pbmdfcGFyYW1zKGN0cmwt PnBoeSwKLQkJCQlwcml2X2luZm8tPnBoeV90aW1pbmdfdmFsLAotCQkJCXByaXZfaW5mby0+cGh5 X3RpbWluZ19sZW4pOwotCQkJaWYgKHJjKQotCQkJCXByX2VycigiZmFpbGVkIHRvIGFkZCBEU0kg UEhZIHRpbWluZyBwYXJhbXMiKTsKLQkJfQotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQot LyoqCi0gKiBfZHNpX2Rpc3BsYXlfZGV2X2luaXQgLSBpbml0aWFsaXplcyB0aGUgZGlzcGxheSBk ZXZpY2UKLSAqIEluaXRpYWxpemF0aW9uIHdpbGwgYWNxdWlyZSByZWZlcmVuY2VzIHRvIHRoZSBy ZXNvdXJjZXMgcmVxdWlyZWQgZm9yIHRoZQotICogZGlzcGxheSBoYXJkd2FyZSB0byBmdW5jdGlv bi4KLSAqIEBkaXNwbGF5OiAgICAgICAgIEhhbmRsZSB0byB0aGUgZGlzcGxheQotICogUmV0dXJu czogICAgICAgICAgWmVybyBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgX2RzaV9kaXNwbGF5 X2Rldl9pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwot Ci0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiaW52YWxpZCBkaXNwbGF5XG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsK LQotCXJjID0gZHNpX2Rpc3BsYXlfcGFyc2VfZHQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiWyVzXSBmYWlsZWQgdG8gcGFyc2UgZHQsIHJjPSVkXG4iLCBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxheV9yZXNfaW5pdChkaXNw bGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBpbml0aWFsaXplIHJl c291cmNlcywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2sp OwotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBfZHNpX2Rpc3BsYXlfZGV2X2RlaW5pdCAtIGRl aW5pdGlhbGl6ZXMgdGhlIGRpc3BsYXkgZGV2aWNlCi0gKiBBbGwgdGhlIHJlc291cmNlcyBhY3F1 aXJlZCBkdXJpbmcgZGV2aWNlIGluaXQgd2lsbCBiZSByZWxlYXNlZC4KLSAqIEBkaXNwbGF5OiAg ICAgICAgSGFuZGxlIHRvIHRoZSBkaXNwbGF5Ci0gKiBSZXR1cm5zOiAgICAgICAgIFplcm8gb24g c3VjY2VzcwotICovCi1zdGF0aWMgaW50IF9kc2lfZGlzcGxheV9kZXZfZGVpbml0KHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5KSB7 Ci0JCXByX2VycigiaW52YWxpZCBkaXNwbGF5XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJjID0gZHNpX2Rpc3Bs YXlfcmVzX2RlaW5pdChkaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQg dG8gZGVpbml0aWFsaXplIHJlc291cmNlLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5h bWUsIHJjKTsKLQotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJl dHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfZGlzcGxheV9iaW5kIC0gYmluZCBkc2kgZGV2aWNl IHdpdGggY29udHJvbGxpbmcgZGV2aWNlCi0gKiBAZGV2OiAgICAgICAgUG9pbnRlciB0byBiYXNl IG9mIHBsYXRmb3JtIGRldmljZQotICogQG1hc3RlcjogICAgIFBvaW50ZXIgdG8gY29udGFpbmVy IG9mIGRybSBkZXZpY2UKLSAqIEBkYXRhOiAgICAgICBQb2ludGVyIHRvIHByaXZhdGUgZGF0YQot ICogUmV0dXJuczogICAgIFplcm8gb24gc3VjY2VzcwotICovCi1zdGF0aWMgaW50IGRzaV9kaXNw bGF5X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCi0J CXZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmRpc3BsYXlfY3RybDsK LQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsK LQlzdHJ1Y3QgZHNpX2Nsa19pbmZvIGluZm87Ci0Jc3RydWN0IGNsa19jdHJsX2NiIGNsa19jYjsK LQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwotCXZvaWQgKmhhbmRsZSA9IE5VTEw7Ci0J c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwot CWNoYXIgKmNsaWVudDEgPSAiZHNpX2Nsa19jbGllbnQiOwotCWNoYXIgKmNsaWVudDIgPSAibWRw X2V2ZW50X2NsaWVudCI7Ci0JY2hhciBkc2lfY2xpZW50X25hbWVbRFNJX0NMSUVOVF9OQU1FX1NJ WkVdOwotCWludCBpLCByYyA9IDA7Ci0KLQlpZiAoIWRldiB8fCAhcGRldiB8fCAhbWFzdGVyKSB7 Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbShzKSwgZGV2ICVwSywgcGRldiAlcEssIG1hc3RlciAl cEtcbiIsCi0JCQkJZGV2LCBwZGV2LCBtYXN0ZXIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQlkcm0gPSBkZXZfZ2V0X2RydmRhdGEobWFzdGVyKTsKLQlkaXNwbGF5ID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEocGRldik7Ci0JaWYgKCFkcm0gfHwgIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJpbnZh bGlkIHBhcmFtKHMpLCBkcm0gJXBLLCBkaXNwbGF5ICVwS1xuIiwKLQkJCQlkcm0sIGRpc3BsYXkp OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Ci0KLQlt dXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmMgPSBkc2lfZGlzcGxheV9k ZWJ1Z2ZzX2luaXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBkZWJ1Z2Zz IGluaXQgZmFpbGVkLCByYz0lZFxuIiwgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9y OwotCX0KLQotCW1lbXNldCgmaW5mbywgMHgwLCBzaXplb2YoaW5mbykpOwotCi0JZm9yIChpID0g MDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlkaXNwbGF5X2N0cmwgPSAmZGlz cGxheS0+Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF9kcnZfaW5pdChkaXNwbGF5X2N0cmwtPmN0 cmwsIGRpc3BsYXktPnJvb3QpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQg dG8gaW5pdGlhbGl6ZSBjdHJsWyVkXSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgaSwgcmMpOwotCQkJZ290byBlcnJvcl9jdHJsX2RlaW5pdDsKLQkJfQotCQlkaXNwbGF5X2N0 cmwtPmN0cmwtPmhvcml6X2luZGV4ID0gaTsKLQotCQlyYyA9IGRzaV9waHlfZHJ2X2luaXQoZGlz cGxheV9jdHJsLT5waHkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBGYWlsZWQgdG8g aW5pdGlhbGl6ZSBwaHlbJWRdLCByYz0lZFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1lLCBpLCByYyk7 Ci0JCQkodm9pZClkc2lfY3RybF9kcnZfZGVpbml0KGRpc3BsYXlfY3RybC0+Y3RybCk7Ci0JCQln b3RvIGVycm9yX2N0cmxfZGVpbml0OwotCQl9Ci0KLQkJbWVtY3B5KCZpbmZvLmNfY2xrc1tpXSwg JmRpc3BsYXlfY3RybC0+Y3RybC0+Y2xrX2luZm8uY29yZV9jbGtzLAotCQkJc2l6ZW9mKHN0cnVj dCBkc2lfY29yZV9jbGtfaW5mbykpOwotCQltZW1jcHkoJmluZm8ubF9jbGtzW2ldLCAmZGlzcGxh eV9jdHJsLT5jdHJsLT5jbGtfaW5mby5saW5rX2Nsa3MsCi0JCQlzaXplb2Yoc3RydWN0IGRzaV9s aW5rX2Nsa19pbmZvKSk7Ci0JCWluZm8uY19jbGtzW2ldLnBoYW5kbGUgPSAmcHJpdi0+cGhhbmRs ZTsKLQkJaW5mby5idXNfaGFuZGxlW2ldID0KLQkJCWRpc3BsYXlfY3RybC0+Y3RybC0+YXhpX2J1 c19pbmZvLmJ1c19oYW5kbGU7Ci0JCWluZm8uY3RybF9pbmRleFtpXSA9IGRpc3BsYXlfY3RybC0+ Y3RybC0+Y2VsbF9pbmRleDsKLQkJc25wcmludGYoZHNpX2NsaWVudF9uYW1lLCBEU0lfQ0xJRU5U X05BTUVfU0laRSwKLQkJCQkJCSJkc2lfY29yZV9jbGllbnQldSIsIGkpOwotCQlpbmZvLmNfY2xr c1tpXS5kc2lfY29yZV9jbGllbnQgPSBkcHVfcG93ZXJfY2xpZW50X2NyZWF0ZSgKLQkJCQlpbmZv LmNfY2xrc1tpXS5waGFuZGxlLCBkc2lfY2xpZW50X25hbWUpOwotCQlpZiAoSVNfRVJSX09SX05V TEwoaW5mby5jX2Nsa3NbaV0uZHNpX2NvcmVfY2xpZW50KSkgewotCQkJcHJfZXJyKCJbJXNdIGNs aWVudCBjcmVhdGlvbiBmYWlsZWQgZm9yIGN0cmxbJWRdIiwKLQkJCQkJZHNpX2NsaWVudF9uYW1l LCBpKTsKLQkJCWdvdG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JCX0KLQl9Ci0KLQlpbmZvLnByZV9j bGtvZmZfY2IgPSBkc2lfcHJlX2Nsa29mZl9jYjsKLQlpbmZvLnByZV9jbGtvbl9jYiA9IGRzaV9w cmVfY2xrb25fY2I7Ci0JaW5mby5wb3N0X2Nsa29mZl9jYiA9IGRzaV9wb3N0X2Nsa29mZl9jYjsK LQlpbmZvLnBvc3RfY2xrb25fY2IgPSBkc2lfcG9zdF9jbGtvbl9jYjsKLQlpbmZvLnByaXZfZGF0 YSA9IGRpc3BsYXk7Ci0JaW5mby5tYXN0ZXJfbmR4ID0gZGlzcGxheS0+Y2xrX21hc3Rlcl9pZHg7 Ci0JaW5mby5kc2lfY3RybF9jb3VudCA9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0Jc25wcmludGYo aW5mby5uYW1lLCBNQVhfU1RSSU5HX0xFTiwKLQkJCSJEU0lfTU5HUi0lcyIsIGRpc3BsYXktPm5h bWUpOwotCi0JZGlzcGxheS0+Y2xrX21uZ3IgPSBkc2lfZGlzcGxheV9jbGtfbW5ncl9yZWdpc3Rl cigmaW5mbyk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGRpc3BsYXktPmNsa19tbmdyKSkgewotCQly YyA9IFBUUl9FUlIoZGlzcGxheS0+Y2xrX21uZ3IpOwotCQlkaXNwbGF5LT5jbGtfbW5nciA9IE5V TEw7Ci0JCXByX2VycigiZHNpIGNsb2NrIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIHJjID0gJWRcbiIs IHJjKTsKLQkJZ290byBlcnJvcl9jdHJsX2RlaW5pdDsKLQl9Ci0KLQloYW5kbGUgPSBkc2lfcmVn aXN0ZXJfY2xrX2hhbmRsZShkaXNwbGF5LT5jbGtfbW5nciwgY2xpZW50MSk7Ci0JaWYgKElTX0VS Ul9PUl9OVUxMKGhhbmRsZSkpIHsKLQkJcmMgPSBQVFJfRVJSKGhhbmRsZSk7Ci0JCXByX2Vycigi ZmFpbGVkIHRvIHJlZ2lzdGVyICVzIGNsaWVudCwgcmMgPSAlZFxuIiwKLQkJICAgICAgIGNsaWVu dDEsIHJjKTsKLQkJZ290byBlcnJvcl9jbGtfZGVpbml0OwotCX0gZWxzZSB7Ci0JCWRpc3BsYXkt PmRzaV9jbGtfaGFuZGxlID0gaGFuZGxlOwotCX0KLQotCWhhbmRsZSA9IGRzaV9yZWdpc3Rlcl9j bGtfaGFuZGxlKGRpc3BsYXktPmNsa19tbmdyLCBjbGllbnQyKTsKLQlpZiAoSVNfRVJSX09SX05V TEwoaGFuZGxlKSkgewotCQlyYyA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gcmVnaXN0ZXIgJXMgY2xpZW50LCByYyA9ICVkXG4iLAotCQkgICAgICAgY2xpZW50MiwgcmMp OwotCQlnb3RvIGVycm9yX2Nsa19jbGllbnRfZGVpbml0OwotCX0gZWxzZSB7Ci0JCWRpc3BsYXkt Pm1kcF9jbGtfaGFuZGxlID0gaGFuZGxlOwotCX0KLQotCWNsa19jYi5wcml2ID0gZGlzcGxheTsK LQljbGtfY2IuZHNpX2Nsa19jYiA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsX2NiOwotCi0JZm9yIChp ID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlkaXNwbGF5X2N0cmwgPSAm ZGlzcGxheS0+Y3RybFtpXTsKLQotCQlyYyA9IGRzaV9jdHJsX2Nsa19jYl9yZWdpc3RlcihkaXNw bGF5X2N0cmwtPmN0cmwsICZjbGtfY2IpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBm YWlsZWQgdG8gcmVnaXN0ZXIgY3RybCBjbGtfY2JbJWRdLCByYz0lZFxuIiwKLQkJCSAgICAgICBk aXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0JCQlnb3RvIGVycm9yX2N0cmxfZGVpbml0OwotCQl9Ci0K LQkJcmMgPSBkc2lfcGh5X2Nsa19jYl9yZWdpc3RlcihkaXNwbGF5X2N0cmwtPnBoeSwgJmNsa19j Yik7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZWdpc3RlciBwaHkg Y2xrX2NiWyVkXSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgaSwgcmMpOwot CQkJZ290byBlcnJvcl9jdHJsX2RlaW5pdDsKLQkJfQotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlf bWlwaV9ob3N0X2luaXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWls ZWQgdG8gaW5pdGlhbGl6ZSBtaXBpIGhvc3QsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+ bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfZGVpbml0OwotCX0KLQotCXJjID0gZHNpX3Bh bmVsX2Rydl9pbml0KGRpc3BsYXktPnBhbmVsLCAmZGlzcGxheS0+aG9zdCk7Ci0JaWYgKHJjKSB7 Ci0JCWlmIChyYyAhPSAtRVBST0JFX0RFRkVSKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBp bml0aWFsaXplIHBhbmVsIGRyaXZlciwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCQlnb3RvIGVycm9yX2hvc3RfZGVpbml0OwotCX0KLQotCXByX2luZm8oIlN1Y2Nl c3NmdWxseSBiaW5kIGRpc3BsYXkgcGFuZWwgJyVzJ1xuIiwgZGlzcGxheS0+bmFtZSk7Ci0JZGlz cGxheS0+ZHJtX2RldiA9IGRybTsKLQlnb3RvIGVycm9yOwotCi1lcnJvcl9ob3N0X2RlaW5pdDoK LQkodm9pZClkc2lfZGlzcGxheV9taXBpX2hvc3RfZGVpbml0KGRpc3BsYXkpOwotZXJyb3JfY2xr X2NsaWVudF9kZWluaXQ6Ci0JKHZvaWQpZHNpX2RlcmVnaXN0ZXJfY2xrX2hhbmRsZShkaXNwbGF5 LT5kc2lfY2xrX2hhbmRsZSk7Ci1lcnJvcl9jbGtfZGVpbml0OgotCSh2b2lkKWRzaV9kaXNwbGF5 X2Nsa19tbmdyX2RlcmVnaXN0ZXIoZGlzcGxheS0+Y2xrX21uZ3IpOwotZXJyb3JfY3RybF9kZWlu aXQ6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWRpc3BsYXlfY3RybCA9ICZk aXNwbGF5LT5jdHJsW2ldOwotCQkodm9pZClkc2lfcGh5X2Rydl9kZWluaXQoZGlzcGxheV9jdHJs LT5waHkpOwotCQkodm9pZClkc2lfY3RybF9kcnZfZGVpbml0KGRpc3BsYXlfY3RybC0+Y3RybCk7 Ci0JfQotCSh2b2lkKWRzaV9kaXNwbGF5X2RlYnVnZnNfZGVpbml0KGRpc3BsYXkpOwotZXJyb3I6 Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0K LQotLyoqCi0gKiBkc2lfZGlzcGxheV91bmJpbmQgLSB1bmJpbmQgZHNpIGZyb20gY29udHJvbGxp bmcgZGV2aWNlCi0gKiBAZGV2OiAgICAgICAgUG9pbnRlciB0byBiYXNlIG9mIHBsYXRmb3JtIGRl dmljZQotICogQG1hc3RlcjogICAgIFBvaW50ZXIgdG8gY29udGFpbmVyIG9mIGRybSBkZXZpY2UK LSAqIEBkYXRhOiAgICAgICBQb2ludGVyIHRvIHByaXZhdGUgZGF0YQotICovCi1zdGF0aWMgdm9p ZCBkc2lfZGlzcGxheV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X2N0cmwgKmRpc3Bs YXlfY3RybDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludCBpLCByYyA9IDA7 Ci0KLQlpZiAoIWRldiB8fCAhcGRldikgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocylcbiIp OwotCQlyZXR1cm47Ci0JfQotCi0JZGlzcGxheSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OwotCWlmICghZGlzcGxheSkgewotCQlwcl9lcnIoImludmFsaWQgZGlzcGxheVxuIik7Ci0JCXJl dHVybjsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JcmMg PSBkc2lfcGFuZWxfZHJ2X2RlaW5pdChkaXNwbGF5LT5wYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9l cnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdCBwYW5lbCBkcml2ZXIsIHJjPSVkXG4iLAotCQkgICAg ICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9taXBpX2hvc3RfZGVp bml0KGRpc3BsYXkpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBkZWluaXQg bWlwaSBob3N0cywgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLAotCQkgICAgICAg cmMpOwotCi0JZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPmN0cmxfY291bnQ7IGkrKykgewotCQlk aXNwbGF5X2N0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQotCQlyYyA9IGRzaV9waHlfZHJ2X2Rl aW5pdChkaXNwbGF5X2N0cmwtPnBoeSk7Ci0JCWlmIChyYykKLQkJCXByX2VycigiWyVzXSBmYWls ZWQgdG8gZGVpbml0IHBoeSVkIGRyaXZlciwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+ bmFtZSwgaSwgcmMpOwotCi0JCXJjID0gZHNpX2N0cmxfZHJ2X2RlaW5pdChkaXNwbGF5X2N0cmwt PmN0cmwpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRlaW5pdCBjdHJs JWQgZHJpdmVyLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCBpLCByYyk7Ci0J fQotCSh2b2lkKWRzaV9kaXNwbGF5X2RlYnVnZnNfZGVpbml0KGRpc3BsYXkpOwotCi0JbXV0ZXhf dW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGNvbXBvbmVudF9vcHMgZHNpX2Rpc3BsYXlfY29tcF9vcHMgPSB7Ci0JLmJpbmQgPSBkc2lfZGlz cGxheV9iaW5kLAotCS51bmJpbmQgPSBkc2lfZGlzcGxheV91bmJpbmQsCi19OwotCi1zdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBkc2lfZGlzcGxheV9kcml2ZXIgPSB7Ci0JLnByb2JlID0g ZHNpX2Rpc3BsYXlfZGV2X3Byb2JlLAotCS5yZW1vdmUgPSBkc2lfZGlzcGxheV9kZXZfcmVtb3Zl LAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIm1zbS1kc2ktZGlzcGxheSIsCi0JCS5vZl9tYXRj aF90YWJsZSA9IGRzaV9kaXNwbGF5X2R0X21hdGNoLAotCX0sCi19OwotCi1pbnQgZHNpX2Rpc3Bs YXlfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJjID0g MDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RhdGljIGJvb2wgZGlzcGxheV9m cm9tX2NtZGxpbmUsIGJvb3RfZGlzcGxheXNfcGFyc2VkOwotCXN0YXRpYyBib29sIGNvbXBfYWRk X3N1Y2Nlc3M7Ci0Jc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJpbWFyeV9ucCwgKnNlY29u ZGFyeV9ucDsKLQotCWlmICghcGRldiB8fCAhcGRldi0+ZGV2Lm9mX25vZGUpIHsKLQkJcHJfZXJy KCJwZGV2IG5vdCBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWRpc3BsYXkg PSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkaXNwbGF5KSwgR0ZQX0tFUk5FTCk7 Ci0JaWYgKCFkaXNwbGF5KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRpc3BsYXktPm5hbWUgPSBv Zl9nZXRfcHJvcGVydHkocGRldi0+ZGV2Lm9mX25vZGUsICJsYWJlbCIsIE5VTEwpOwotCi0JaWYg KCFib290X2Rpc3BsYXlzX3BhcnNlZCkgewotCQlib290X2Rpc3BsYXlzW0RTSV9QUklNQVJZXS5i b290X2Rpc3BfZW4gPSBmYWxzZTsKLQkJYm9vdF9kaXNwbGF5c1tEU0lfU0VDT05EQVJZXS5ib290 X2Rpc3BfZW4gPSBmYWxzZTsKLQkJaWYgKGRzaV9kaXNwbGF5X3BhcnNlX2Jvb3RfZGlzcGxheV9z ZWxlY3Rpb24oKSkKLQkJCXByX2RlYnVnKCJEaXNwbGF5IEJvb3QgcGFyYW0gbm90IHZhbGlkL2F2 YWlsYWJsZVxuIik7Ci0KLQkJYm9vdF9kaXNwbGF5c19wYXJzZWQgPSB0cnVlOwotCX0KLQotCS8q IHVzZSBkZWZhdWx0IHRvcG9sb2d5IG9mIGV2ZXJ5IG1vZGUgaWYgbm90IG92ZXJyaWRkZW4gKi8K LQlkaXNwbGF5LT5jbWRsaW5lX3RvcG9sb2d5ID0gTk9fT1ZFUlJJREU7Ci0JZGlzcGxheS0+Y21k bGluZV90aW1pbmcgPSAwOwotCi0JaWYgKCghZGlzcGxheV9mcm9tX2NtZGxpbmUpICYmCi0JCQko Ym9vdF9kaXNwbGF5c1tEU0lfUFJJTUFSWV0uYm9vdF9kaXNwX2VuKSkgewotCQlkaXNwbGF5LT5p c19hY3RpdmUgPSBkc2lfZGlzcGxheV9uYW1lX2NvbXBhcmUocGRldi0+ZGV2Lm9mX25vZGUsCi0J CQkJCQlkaXNwbGF5LT5uYW1lLCBEU0lfUFJJTUFSWSk7Ci0JCWlmIChkaXNwbGF5LT5pc19hY3Rp dmUpIHsKLQkJCWlmIChjb21wX2FkZF9zdWNjZXNzKSB7Ci0JCQkJKHZvaWQpX2RzaV9kaXNwbGF5 X2Rldl9kZWluaXQobWFpbl9kaXNwbGF5KTsKLQkJCQljb21wb25lbnRfZGVsKCZtYWluX2Rpc3Bs YXktPnBkZXYtPmRldiwKLQkJCQkJICAgICAgJmRzaV9kaXNwbGF5X2NvbXBfb3BzKTsKLQkJCQlt dXRleF9sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCQkJCWxpc3RfZGVsKCZtYWluX2Rp c3BsYXktPmxpc3QpOwotCQkJCW11dGV4X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsK LQkJCQljb21wX2FkZF9zdWNjZXNzID0gZmFsc2U7Ci0JCQkJZGVmYXVsdF9hY3RpdmVfbm9kZSA9 IE5VTEw7Ci0JCQkJcHJfZGVidWcoInJlbW92ZWQgdGhlIGV4aXN0aW5nIGNvbXAgb3BzXG4iKTsK LQkJCX0KLQkJCS8qCi0JCQkgKiBOZWVkIHRvIGFkZCBjb21wb25lbnQgZm9yCi0JCQkgKiB0aGUg c2Vjb25kYXJ5IERTSSBkaXNwbGF5Ci0JCQkgKiB3aGVuIG1vcmUgdGhhbiBvbmUgRFNJIGRpc3Bs YXkKLQkJCSAqIGlzIHN1cHBvcnRlZC4KLQkJCSAqLwotCQkJcHJfZGVidWcoImNtZGxpbmUgcHJp bWFyeSBkc2k6ICVzXG4iLAotCQkJCQkJZGlzcGxheS0+bmFtZSk7Ci0JCQlkaXNwbGF5X2Zyb21f Y21kbGluZSA9IHRydWU7Ci0JCQlkc2lfZGlzcGxheV9wYXJzZV9jbWRsaW5lX3RvcG9sb2d5KGRp c3BsYXksCi0JCQkJCURTSV9QUklNQVJZKTsKLQkJCXByaW1hcnlfbnAgPSBwZGV2LT5kZXYub2Zf bm9kZTsKLQkJfQotCX0KLQotCWlmIChib290X2Rpc3BsYXlzW0RTSV9TRUNPTkRBUlldLmJvb3Rf ZGlzcF9lbgotCQkJJiYgIXNlY29uZGFyeV9ucAotCQkJJiYgZHNpX2Rpc3BsYXlfbmFtZV9jb21w YXJlKHBkZXYtPmRldi5vZl9ub2RlLAotCQkJCQkJZGlzcGxheS0+bmFtZSwgRFNJX1NFQ09OREFS WSkpIHsKLQkJcHJfZGVidWcoImNtZGxpbmUgc2Vjb25kYXJ5IGRzaTogJXNcbiIsCi0JCQkJCWRp c3BsYXktPm5hbWUpOwotCQlzZWNvbmRhcnlfbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKLQkJaWYg KHByaW1hcnlfbnApIHsKLQkJCWlmICh2YWxpZGF0ZV9kc2lfZGlzcGxheV9zZWxlY3Rpb24oKSkg ewotCQkJCWRpc3BsYXktPmlzX2FjdGl2ZSA9IHRydWU7Ci0JCQkJZHNpX2Rpc3BsYXlfcGFyc2Vf Y21kbGluZV90b3BvbG9neSgKLQkJCQkJCWRpc3BsYXksIERTSV9TRUNPTkRBUlkpOwotCQkJfSBl bHNlIHsKLQkJCQlib290X2Rpc3BsYXlzW0RTSV9TRUNPTkRBUlldCi0JCQkJCS5ib290X2Rpc3Bf ZW4gPSBmYWxzZTsKLQkJCX0KLQkJfQotCX0KLQlkaXNwbGF5LT5kaXNwbGF5X3R5cGUgPSBvZl9n ZXRfcHJvcGVydHkocGRldi0+ZGV2Lm9mX25vZGUsCi0JCQkJCQkicWNvbSxkaXNwbGF5LXR5cGUi LCBOVUxMKTsKLQlpZiAoIWRpc3BsYXktPmRpc3BsYXlfdHlwZSkKLQkJZGlzcGxheS0+ZGlzcGxh eV90eXBlID0gInVua25vd24iOwotCi0JbXV0ZXhfaW5pdCgmZGlzcGxheS0+ZGlzcGxheV9sb2Nr KTsKLQlkaXNwbGF5LT5wZGV2ID0gcGRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBk aXNwbGF5KTsKLQltdXRleF9sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2spOwotCWxpc3RfYWRk KCZkaXNwbGF5LT5saXN0LCAmZHNpX2Rpc3BsYXlfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkc2lf ZGlzcGxheV9saXN0X2xvY2spOwotCi0JaWYgKCFkaXNwbGF5X2Zyb21fY21kbGluZSkKLQkJZGlz cGxheS0+aXNfYWN0aXZlID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKHBkZXYtPmRldi5vZl9ub2Rl LAotCQkJCQkJInFjb20sZHNpLWRpc3BsYXktYWN0aXZlIik7Ci0KLQlpZiAoZGlzcGxheS0+aXNf YWN0aXZlKSB7Ci0JCW1haW5fZGlzcGxheSA9IGRpc3BsYXk7Ci0JCXJjID0gX2RzaV9kaXNwbGF5 X2Rldl9pbml0KGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZGV2aWNlIGluaXQg ZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcmMgPSBjb21w b25lbnRfYWRkKCZwZGV2LT5kZXYsICZkc2lfZGlzcGxheV9jb21wX29wcyk7Ci0JCWlmIChyYykK LQkJCXByX2VycigiY29tcG9uZW50IGFkZCBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0KLQkJY29t cF9hZGRfc3VjY2VzcyA9IHRydWU7Ci0JCXByX2RlYnVnKCJDb21wb25lbnRfYWRkIHN1Y2Nlc3M6 ICVzXG4iLCBkaXNwbGF5LT5uYW1lKTsKLQkJaWYgKCFkaXNwbGF5X2Zyb21fY21kbGluZSkKLQkJ CWRlZmF1bHRfYWN0aXZlX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKLQl9Ci0JcmV0dXJuIHJj OwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5Owot CXN0cnVjdCBkc2lfZGlzcGxheSAqcG9zLCAqdG1wOwotCi0JaWYgKCFwZGV2KSB7Ci0JCXByX2Vy cigiSW52YWxpZCBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkaXNwbGF5 ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQkodm9pZClfZHNpX2Rpc3BsYXlfZGV2 X2RlaW5pdChkaXNwbGF5KTsKLQotCW11dGV4X2xvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7 Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1wLCAmZHNpX2Rpc3BsYXlfbGlzdCwg bGlzdCkgewotCQlpZiAocG9zID09IGRpc3BsYXkpIHsKLQkJCWxpc3RfZGVsKCZkaXNwbGF5LT5s aXN0KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlz dF9sb2NrKTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWRldm1fa2Zy ZWUoJnBkZXYtPmRldiwgZGlzcGxheSk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3Bs YXlfZ2V0X251bV9vZl9kaXNwbGF5cyh2b2lkKQotewotCWludCBjb3VudCA9IDA7Ci0Jc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCi0JbXV0ZXhfbG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9s b2NrKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGlzcGxheSwgJmRzaV9kaXNwbGF5X2xpc3Qs IGxpc3QpIHsKLQkJY291bnQrKzsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRzaV9kaXNwbGF5X2xp c3RfbG9jayk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X2FjdGl2 ZV9kaXNwbGF5cyh2b2lkICoqZGlzcGxheV9hcnJheSwgdTMyIG1heF9kaXNwbGF5X2NvdW50KQot ewotCXN0cnVjdCBkc2lfZGlzcGxheSAqcG9zOwotCWludCBpID0gMDsKLQotCWlmICghZGlzcGxh eV9hcnJheSB8fCAhbWF4X2Rpc3BsYXlfY291bnQpIHsKLQkJaWYgKCFkaXNwbGF5X2FycmF5KQot CQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCW11dGV4 X2xvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBv cywgJmRzaV9kaXNwbGF5X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGkgPj0gbWF4X2Rpc3BsYXlfY291 bnQpIHsKLQkJCXByX2VycigiY2FwcGluZyBkaXNwbGF5IGNvdW50IHRvICVkXG4iLCBpKTsKLQkJ CWJyZWFrOwotCQl9Ci0JCWlmIChwb3MtPmlzX2FjdGl2ZSkKLQkJCWRpc3BsYXlfYXJyYXlbaSsr XSA9IHBvczsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRzaV9kaXNwbGF5X2xpc3RfbG9jayk7Ci0J cmV0dXJuIGk7Ci19Ci0KLXN0cnVjdCBkc2lfZGlzcGxheSAqZHNpX2Rpc3BsYXlfZ2V0X2Rpc3Bs YXlfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlz cGxheSA9IE5VTEwsICpwb3M7Ci0KLQltdXRleF9sb2NrKCZkc2lfZGlzcGxheV9saXN0X2xvY2sp OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZkc2lfZGlzcGxheV9saXN0LCBsaXN0KSB7 Ci0JCWlmICghc3RyY21wKG5hbWUsIHBvcy0+bmFtZSkpCi0JCQlkaXNwbGF5ID0gcG9zOwotCX0K LQotCW11dGV4X3VubG9jaygmZHNpX2Rpc3BsYXlfbGlzdF9sb2NrKTsKLQotCXJldHVybiBkaXNw bGF5OwotfQotCi12b2lkIGRzaV9kaXNwbGF5X3NldF9hY3RpdmVfc3RhdGUoc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5LCBib29sIGlzX2FjdGl2ZSkKLXsKLQltdXRleF9sb2NrKCZkaXNwbGF5 LT5kaXNwbGF5X2xvY2spOwotCWRpc3BsYXktPmlzX2FjdGl2ZSA9IGlzX2FjdGl2ZTsKLQltdXRl eF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci19Ci0KLWludCBkc2lfZGlzcGxheV9k cm1fYnJpZGdlX2luaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQlzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuYykKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdlICpicmlk Z2U7Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IE5VTEw7Ci0KLQlpZiAoIWRpc3Bs YXkgfHwgIWRpc3BsYXktPmRybV9kZXYgfHwgIWVuYykgewotCQlwcl9lcnIoImludmFsaWQgcGFy YW0ocylcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5 LT5kaXNwbGF5X2xvY2spOwotCXByaXYgPSBkaXNwbGF5LT5kcm1fZGV2LT5kZXZfcHJpdmF0ZTsK LQotCWlmICghcHJpdikgewotCQlwcl9lcnIoIlByaXZhdGUgZGF0YSBpcyBub3QgcHJlc2VudFxu Iik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoZGlzcGxheS0+ YnJpZGdlKSB7Ci0JCXByX2VycigiZGlzcGxheSBpcyBhbHJlYWR5IGluaXRpYWxpemVcbiIpOwot CQlnb3RvIGVycm9yOwotCX0KLQotCWJyaWRnZSA9IGRzaV9kcm1fYnJpZGdlX2luaXQoZGlzcGxh eSwgZGlzcGxheS0+ZHJtX2RldiwgZW5jKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoYnJpZGdlKSkg ewotCQlyYyA9IFBUUl9FUlIoYnJpZGdlKTsKLQkJcHJfZXJyKCJbJXNdIGJyaWdlIGluaXQgZmFp bGVkLCAlZFxuIiwgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWRp c3BsYXktPmJyaWRnZSA9IGJyaWRnZTsKLQlwcml2LT5icmlkZ2VzW3ByaXYtPm51bV9icmlkZ2Vz KytdID0gJmJyaWRnZS0+YmFzZTsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5k aXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2RybV9icmlk Z2VfZGVpbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwot Ci0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwot Ci0JZHNpX2RybV9icmlkZ2VfY2xlYW51cChkaXNwbGF5LT5icmlkZ2UpOwotCWRpc3BsYXktPmJy aWRnZSA9IE5VTEw7Ci0KLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0J cmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X2luZm8oc3RydWN0IG1zbV9kaXNw bGF5X2luZm8gKmluZm8sIHZvaWQgKmRpc3ApCi17Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNw bGF5OwotCXN0cnVjdCBkc2lfcGFuZWxfcGh5X3Byb3BzIHBoeV9wcm9wczsKLQlpbnQgaSwgcmM7 Ci0KLQlpZiAoIWluZm8gfHwgIWRpc3ApIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRpc3BsYXkgPSBkaXNwOwotCWlmICghZGlzcGxh eS0+cGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGRpc3BsYXkgcGFuZWxcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwot CXJjID0gZHNpX3BhbmVsX2dldF9waHlfcHJvcHMoZGlzcGxheS0+cGFuZWwsICZwaHlfcHJvcHMp OwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdldCBwYW5lbCBwaHkgcHJv cHMsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9y OwotCX0KLQotCW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1zbV9kaXNwbGF5X2luZm8p KTsKLQlpbmZvLT5pbnRmX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJOwotCWluZm8tPm51 bV9vZl9oX3RpbGVzID0gZGlzcGxheS0+Y3RybF9jb3VudDsKLQlmb3IgKGkgPSAwOyBpIDwgaW5m by0+bnVtX29mX2hfdGlsZXM7IGkrKykKLQkJaW5mby0+aF90aWxlX2luc3RhbmNlW2ldID0gZGlz cGxheS0+Y3RybFtpXS5jdHJsLT5jZWxsX2luZGV4OwotCi0JaW5mby0+aXNfY29ubmVjdGVkID0g dHJ1ZTsKLQlpbmZvLT5pc19wcmltYXJ5ID0gdHJ1ZTsKLQlpbmZvLT53aWR0aF9tbSA9IHBoeV9w cm9wcy5wYW5lbF93aWR0aF9tbTsKLQlpbmZvLT5oZWlnaHRfbW0gPSBwaHlfcHJvcHMucGFuZWxf aGVpZ2h0X21tOwotCWluZm8tPm1heF93aWR0aCA9IDE5MjA7Ci0JaW5mby0+bWF4X2hlaWdodCA9 IDEwODA7Ci0KLQlzd2l0Y2ggKGRpc3BsYXktPnBhbmVsLT5wYW5lbF9tb2RlKSB7Ci0JY2FzZSBE U0lfT1BfVklERU9fTU9ERToKLQkJaW5mby0+Y2FwYWJpbGl0aWVzIHw9IE1TTV9ESVNQTEFZX0NB UF9WSURfTU9ERTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfT1BfQ01EX01PREU6Ci0JCWluZm8tPmNh cGFiaWxpdGllcyB8PSBNU01fRElTUExBWV9DQVBfQ01EX01PREU7Ci0JCWluZm8tPmlzX3RlX3Vz aW5nX3dhdGNoZG9nX3RpbWVyID0KLQkJCWRpc3BsYXktPnBhbmVsLT50ZV91c2luZ193YXRjaGRv Z190aW1lcjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJ1bmtud293biBkc2kgcGFu ZWwgbW9kZSAlZFxuIiwKLQkJCQlkaXNwbGF5LT5wYW5lbC0+cGFuZWxfbW9kZSk7Ci0JCWJyZWFr OwotCX0KLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwot CXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X2dldF9tb2RlX2NvdW50KHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSwKLQkJCXUzMiAqY291bnQpCi17Ci0Jc3RydWN0IGRzaV9kZnBz X2NhcGFiaWxpdGllcyBkZnBzX2NhcHM7Ci0JaW50IG51bV9kZnBzX3JhdGVzLCByYyA9IDA7Ci0K LQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBk aXNwbGF5OiVkIHBhbmVsOiVkXG4iLCBkaXNwbGF5ICE9IE5VTEwsCi0JCQkJZGlzcGxheSA/IGRp c3BsYXktPnBhbmVsICE9IE5VTEwgOiAwKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0 ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCSpjb3VudCA9IGRpc3BsYXktPnBh bmVsLT5udW1fdGltaW5nX25vZGVzOwotCi0JcmMgPSBkc2lfcGFuZWxfZ2V0X2RmcHNfY2Fwcyhk aXNwbGF5LT5wYW5lbCwgJmRmcHNfY2Fwcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBm YWlsZWQgdG8gZ2V0IGRmcHMgY2FwcyBmcm9tIHBhbmVsXG4iLAotCQkJCWRpc3BsYXktPm5hbWUp OwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JbnVtX2RmcHNfcmF0ZXMgPSAhZGZwc19jYXBzLmRmcHNf c3VwcG9ydCA/IDEgOgotCQkJZGZwc19jYXBzLm1heF9yZWZyZXNoX3JhdGUgLQotCQkJZGZwc19j YXBzLm1pbl9yZWZyZXNoX3JhdGUgKyAxOwotCi0JLyogSW5mbGF0ZSBudW1fb2ZfbW9kZXMgYnkg ZnBzIGluIGRmcHMgKi8KLQkqY291bnQgPSBkaXNwbGF5LT5wYW5lbC0+bnVtX3RpbWluZ19ub2Rl cyAqIG51bV9kZnBzX3JhdGVzOwotCi1kb25lOgotCW11dGV4X3VubG9jaygmZGlzcGxheS0+ZGlz cGxheV9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGRzaV9kaXNwbGF5X3B1dF9tb2Rl KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAq bW9kZSkKLXsKLQlkc2lfcGFuZWxfcHV0X21vZGUobW9kZSk7Ci19Ci0KLWludCBkc2lfZGlzcGxh eV9nZXRfbW9kZXMoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJICBzdHJ1Y3QgZHNp X2Rpc3BsYXlfbW9kZSAqbW9kZXMpCi17Ci0Jc3RydWN0IGRzaV9kZnBzX2NhcGFiaWxpdGllcyBk ZnBzX2NhcHM7Ci0JdTMyIG51bV9kZnBzX3JhdGVzLCBwYW5lbF9tb2RlX2NvdW50OwotCXUzMiBt b2RlX2lkeCwgYXJyYXlfaWR4ID0gMDsKLQlpbnQgaSwgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5 IHx8ICFtb2RlcykgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCXJj ID0gZHNpX3BhbmVsX2dldF9kZnBzX2NhcHMoZGlzcGxheS0+cGFuZWwsICZkZnBzX2NhcHMpOwot CWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdldCBkZnBzIGNhcHMgZnJvbSBw YW5lbFxuIiwKLQkJCQlkaXNwbGF5LT5uYW1lKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQludW1f ZGZwc19yYXRlcyA9ICFkZnBzX2NhcHMuZGZwc19zdXBwb3J0ID8gMSA6Ci0JCQlkZnBzX2NhcHMu bWF4X3JlZnJlc2hfcmF0ZSAtCi0JCQlkZnBzX2NhcHMubWluX3JlZnJlc2hfcmF0ZSArIDE7Ci0K LQlwYW5lbF9tb2RlX2NvdW50ID0gZGlzcGxheS0+cGFuZWwtPm51bV90aW1pbmdfbm9kZXM7Ci0K LQlmb3IgKG1vZGVfaWR4ID0gMDsgbW9kZV9pZHggPCBwYW5lbF9tb2RlX2NvdW50OyBtb2RlX2lk eCsrKSB7Ci0JCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIHBhbmVsX21vZGU7Ci0JCWludCB0b3Bv bG9neV9vdmVycmlkZSA9IE5PX09WRVJSSURFOwotCi0JCWlmIChkaXNwbGF5LT5jbWRsaW5lX3Rp bWluZyA9PSBtb2RlX2lkeCkKLQkJCXRvcG9sb2d5X292ZXJyaWRlID0gZGlzcGxheS0+Y21kbGlu ZV90b3BvbG9neTsKLQotCQltZW1zZXQoJnBhbmVsX21vZGUsIDAsIHNpemVvZihwYW5lbF9tb2Rl KSk7Ci0KLQkJcmMgPSBkc2lfcGFuZWxfZ2V0X21vZGUoZGlzcGxheS0+cGFuZWwsIG1vZGVfaWR4 LAotCQkJCQkJJnBhbmVsX21vZGUsIHRvcG9sb2d5X292ZXJyaWRlKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGdldCBtb2RlIGlkeCAlZCBmcm9tIHBhbmVsXG4iLAot CQkJCSAgIGRpc3BsYXktPm5hbWUsIG1vZGVfaWR4KTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQot CQlpZiAoZGlzcGxheS0+Y3RybF9jb3VudCA+IDEpIHsgLyogVE9ETzogcmVtb3ZlIGlmICovCi0J CQlwYW5lbF9tb2RlLnRpbWluZy5oX2FjdGl2ZSAqPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQkJ cGFuZWxfbW9kZS50aW1pbmcuaF9mcm9udF9wb3JjaCAqPSBkaXNwbGF5LT5jdHJsX2NvdW50Owot CQkJcGFuZWxfbW9kZS50aW1pbmcuaF9zeW5jX3dpZHRoICo9IGRpc3BsYXktPmN0cmxfY291bnQ7 Ci0JCQlwYW5lbF9tb2RlLnRpbWluZy5oX2JhY2tfcG9yY2ggKj0gZGlzcGxheS0+Y3RybF9jb3Vu dDsKLQkJCXBhbmVsX21vZGUudGltaW5nLmhfc2tldyAqPSBkaXNwbGF5LT5jdHJsX2NvdW50Owot CQkJcGFuZWxfbW9kZS5waXhlbF9jbGtfa2h6ICo9IGRpc3BsYXktPmN0cmxfY291bnQ7Ci0JCX0K LQotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2RmcHNfcmF0ZXM7IGkrKykgewotCQkJc3RydWN0IGRz aV9kaXNwbGF5X21vZGUgKnN1Yl9tb2RlID0gJm1vZGVzW2FycmF5X2lkeF07Ci0JCQl1MzIgY3Vy cl9yZWZyZXNoX3JhdGU7Ci0KLQkJCWlmICghc3ViX21vZGUpIHsKLQkJCQlwcl9lcnIoImludmFs aWQgbW9kZSBkYXRhXG4iKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQotCQkJbWVtY3B5 KHN1Yl9tb2RlLCAmcGFuZWxfbW9kZSwgc2l6ZW9mKHBhbmVsX21vZGUpKTsKLQotCQkJaWYgKGRm cHNfY2Fwcy5kZnBzX3N1cHBvcnQpIHsKLQkJCQljdXJyX3JlZnJlc2hfcmF0ZSA9Ci0JCQkJCXN1 Yl9tb2RlLT50aW1pbmcucmVmcmVzaF9yYXRlOwotCQkJCXN1Yl9tb2RlLT50aW1pbmcucmVmcmVz aF9yYXRlID0KLQkJCQkJZGZwc19jYXBzLm1pbl9yZWZyZXNoX3JhdGUgKwotCQkJCQkoaSAlIG51 bV9kZnBzX3JhdGVzKTsKLQotCQkJCWRzaV9kaXNwbGF5X2dldF9kZnBzX3RpbWluZyhkaXNwbGF5 LAotCQkJCQlzdWJfbW9kZSwgY3Vycl9yZWZyZXNoX3JhdGUpOwotCi0JCQkJc3ViX21vZGUtPnBp eGVsX2Nsa19raHogPQotCQkJCQkoRFNJX0hfVE9UQUwoJnN1Yl9tb2RlLT50aW1pbmcpICoKLQkJ CQkJRFNJX1ZfVE9UQUwoJnN1Yl9tb2RlLT50aW1pbmcpICoKLQkJCQkJc3ViX21vZGUtPnRpbWlu Zy5yZWZyZXNoX3JhdGUpIC8gMTAwMDsKLQkJCX0KLQkJCWFycmF5X2lkeCsrOwotCQl9Ci0JfQot Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJu IHJjOwotfQotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGVfdnJyKCkgLSBWYWxp ZGF0ZSBpZiB2YXJhaWJsZSByZWZyZXNoIGNhc2UuCi0gKiBAZGlzcGxheTogICAgIERTSSBkaXNw bGF5IGhhbmRsZS4KLSAqIEBjdXJfZHNpX21vZGU6ICAgQ3VycmVudCBEU0kgbW9kZS4KLSAqIEBt b2RlOiAgICAgICAgTW9kZSB2YWx1ZSBzdHJ1Y3R1cmUgdG8gYmUgdmFsaWRhdGVkLgotICogICAg ICAgICAgICAgICBNU01fTU9ERV9GTEFHX1NFQU1MRVNTX1ZSUiBmbGFnIGlzIHNldCBpZiB0aGVy ZQotICogICAgICAgICAgICAgICBpcyBjaGFuZ2UgaW4gZnBzIGJ1dCB2YWN0aXZlIGFuZCBoYWN0 aXZlIGFyZSBzYW1lLgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3Bs YXlfdmFsaWRhdGVfbW9kZV92cnIoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LAotCQkJc3Ry dWN0IGRzaV9kaXNwbGF5X21vZGUgKmN1cl9kc2lfbW9kZSwKLQkJCXN0cnVjdCBkc2lfZGlzcGxh eV9tb2RlICptb2RlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUg YWRqX21vZGUsIGN1cl9tb2RlOwotCXN0cnVjdCBkc2lfZGZwc19jYXBhYmlsaXRpZXMgZGZwc19j YXBzOwotCXUzMiBjdXJyX3JlZnJlc2hfcmF0ZTsKLQotCWlmICghZGlzcGxheSB8fCAhbW9kZSkg ewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JaWYgKCFkaXNwbGF5LT5wYW5lbCB8fCAhZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlKSB7Ci0J CXByX2RlYnVnKCJDdXJyZW50IHBhbmVsIG1vZGUgbm90IHNldFxuIik7Ci0JCXJldHVybiByYzsK LQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JYWRqX21vZGUg PSAqbW9kZTsKLQljdXJfbW9kZSA9ICpjdXJfZHNpX21vZGU7Ci0KLQlpZiAoKGN1cl9tb2RlLnRp bWluZy5yZWZyZXNoX3JhdGUgIT0gYWRqX21vZGUudGltaW5nLnJlZnJlc2hfcmF0ZSkgJiYKLQkJ KGN1cl9tb2RlLnRpbWluZy52X2FjdGl2ZSA9PSBhZGpfbW9kZS50aW1pbmcudl9hY3RpdmUpICYm Ci0JCShjdXJfbW9kZS50aW1pbmcuaF9hY3RpdmUgPT0gYWRqX21vZGUudGltaW5nLmhfYWN0aXZl KSkgewotCi0JCWN1cnJfcmVmcmVzaF9yYXRlID0gY3VyX21vZGUudGltaW5nLnJlZnJlc2hfcmF0 ZTsKLQkJcmMgPSBkc2lfcGFuZWxfZ2V0X2RmcHNfY2FwcyhkaXNwbGF5LT5wYW5lbCwgJmRmcHNf Y2Fwcyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBnZXQgZGZwcyBj YXBzIGZyb20gcGFuZWxcbiIsCi0JCQkJCWRpc3BsYXktPm5hbWUpOwotCQkJZ290byBlcnJvcjsK LQkJfQotCi0JCWN1cl9tb2RlLnRpbWluZy5yZWZyZXNoX3JhdGUgPQotCQkJYWRqX21vZGUudGlt aW5nLnJlZnJlc2hfcmF0ZTsKLQotCQlyYyA9IGRzaV9kaXNwbGF5X2dldF9kZnBzX3RpbWluZyhk aXNwbGF5LAotCQkJJmN1cl9tb2RlLCBjdXJyX3JlZnJlc2hfcmF0ZSk7Ci0JCWlmIChyYykgewot CQkJcHJfZXJyKCJbJXNdIHNlYW1sZXNzIHZyciBub3QgcG9zc2libGUgcmM9JWRcbiIsCi0JCQlk aXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCXN3aXRjaCAoZGZwc19j YXBzLnR5cGUpIHsKLQkJLyoKLQkJICogSWdub3JlIGFueSByb3VuZCBvZmYgZmFjdG9ycyBpbiBw b3JjaCBjYWxjdWxhdGlvbi4KLQkJICogV29yc2UgY2FzZSBpcyBzZXQgdG8gNS4KLQkJICovCi0J CWNhc2UgRFNJX0RGUFNfSU1NRURJQVRFX1ZGUDoKLQkJCWlmIChhYnMoRFNJX1ZfVE9UQUwoJmN1 cl9tb2RlLnRpbWluZykgLQotCQkJCURTSV9WX1RPVEFMKCZhZGpfbW9kZS50aW1pbmcpKSA+IDUp Ci0JCQkJcHJfZXJyKCJNaXNtYXRjaCB2ZnAgZnBzOiVkIG5ldzolZCBnaXZlbjolZFxuIiwKLQkJ CQlhZGpfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRlLAotCQkJCWN1cl9tb2RlLnRpbWluZy52X2Zy b250X3BvcmNoLAotCQkJCWFkal9tb2RlLnRpbWluZy52X2Zyb250X3BvcmNoKTsKLQkJCWJyZWFr OwotCi0JCWNhc2UgRFNJX0RGUFNfSU1NRURJQVRFX0hGUDoKLQkJCWlmIChhYnMoRFNJX0hfVE9U QUwoJmN1cl9tb2RlLnRpbWluZykgLQotCQkJCURTSV9IX1RPVEFMKCZhZGpfbW9kZS50aW1pbmcp KSA+IDUpCi0JCQkJcHJfZXJyKCJNaXNtYXRjaCBoZnAgZnBzOiVkIG5ldzolZCBnaXZlbjolZFxu IiwKLQkJCQlhZGpfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRlLAotCQkJCWN1cl9tb2RlLnRpbWlu Zy5oX2Zyb250X3BvcmNoLAotCQkJCWFkal9tb2RlLnRpbWluZy5oX2Zyb250X3BvcmNoKTsKLQkJ CWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcl9lcnIoIlVuc3VwcG9ydGVkIERGUFMgbW9kZSAl ZFxuIiwKLQkJCQlkZnBzX2NhcHMudHlwZSk7Ci0JCQlyYyA9IC1FTk9UU1VQUDsKLQkJfQotCi0J CXByX2RlYnVnKCJNb2RlIHN3aXRjaCBpcyBzZWFtbGVzcyB2YXJpYWJsZSByZWZyZXNoXG4iKTsK LQkJbW9kZS0+ZHNpX21vZGVfZmxhZ3MgfD0gRFNJX01PREVfRkxBR19WUlI7Ci0JCURQVV9FVlQz MihjdXJyX3JlZnJlc2hfcmF0ZSwgYWRqX21vZGUudGltaW5nLnJlZnJlc2hfcmF0ZSwKLQkJCQlj dXJfbW9kZS50aW1pbmcuaF9mcm9udF9wb3JjaCwKLQkJCQlhZGpfbW9kZS50aW1pbmcuaF9mcm9u dF9wb3JjaCk7Ci0JfQotCi1lcnJvcjoKLQltdXRleF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlf bG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZShz dHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgICAgICBzdHJ1Y3QgZHNpX2Rpc3BsYXlf bW9kZSAqbW9kZSwKLQkJCSAgICAgIHUzMiBmbGFncykKLXsKLQlpbnQgcmMgPSAwOwotCWludCBp OwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCXN0cnVjdCBkc2lfZGlzcGxheV9t b2RlIGFkal9tb2RlOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFtb2RlKSB7Ci0JCXByX2VycigiSW52 YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZk aXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCi0JYWRqX21vZGUgPSAqbW9kZTsKLQlhZGp1c3RfdGlt aW5nX2J5X2N0cmxfY291bnQoZGlzcGxheSwgJmFkal9tb2RlKTsKLQotCXJjID0gZHNpX3BhbmVs X3ZhbGlkYXRlX21vZGUoZGlzcGxheS0+cGFuZWwsICZhZGpfbW9kZSk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiWyVzXSBwYW5lbCBtb2RlIHZhbGlkYXRpb24gZmFpbGVkLCByYz0lZFxuIiwKLQkJ ICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlmb3IgKGkg PSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCWN0cmwgPSAmZGlzcGxheS0+ Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF92YWxpZGF0ZV90aW1pbmcoY3RybC0+Y3RybCwgJmFk al9tb2RlLnRpbWluZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGN0cmwgbW9kZSB2 YWxpZGF0aW9uIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXJjID0gZHNpX3BoeV92YWxpZGF0ZV9tb2RlKGN0 cmwtPnBoeSwgJmFkal9tb2RlLnRpbWluZyk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNd IHBoeSBtb2RlIHZhbGlkYXRpb24gZmFpbGVkLCByYz0lZFxuIiwKLQkJCSAgICAgICBkaXNwbGF5 LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JaWYgKChmbGFncyAmIERT SV9WQUxJREFURV9GTEFHX0FMTE9XX0FESlVTVCkgJiYKLQkJCShtb2RlLT5kc2lfbW9kZV9mbGFn cyAmIERTSV9NT0RFX0ZMQUdfU0VBTUxFU1MpKSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfdmFsaWRh dGVfbW9kZV9zZWFtbGVzcyhkaXNwbGF5LCBtb2RlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo Ilslc10gc2VhbWxlc3Mgbm90IHBvc3NpYmxlIHJjPSVkXG4iLAotCQkJCWRpc3BsYXktPm5hbWUs IHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygm ZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfZGlzcGxh eV9zZXRfbW9kZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgc3RydWN0IGRzaV9k aXNwbGF5X21vZGUgKm1vZGUsCi0JCQkgdTMyIGZsYWdzKQotewotCWludCByYyA9IDA7Ci0Jc3Ry dWN0IGRzaV9kaXNwbGF5X21vZGUgYWRqX21vZGU7Ci0KLQlpZiAoIWRpc3BsYXkgfHwgIW1vZGUg fHwgIWRpc3BsYXktPnBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2sp OwotCi0JYWRqX21vZGUgPSAqbW9kZTsKLQlhZGp1c3RfdGltaW5nX2J5X2N0cmxfY291bnQoZGlz cGxheSwgJmFkal9tb2RlKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV9zZXQo ZGlzcGxheSwgJmFkal9tb2RlLCBmbGFncyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBt b2RlIGNhbm5vdCBiZSBzZXRcbiIsIGRpc3BsYXktPm5hbWUpOwotCQlnb3RvIGVycm9yOwotCX0K LQotCXJjID0gZHNpX2Rpc3BsYXlfc2V0X21vZGVfc3ViKGRpc3BsYXksICZhZGpfbW9kZSwgZmxh Z3MpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNldCBtb2RlXG4iLCBk aXNwbGF5LT5uYW1lKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoIWRpc3BsYXktPnBhbmVs LT5jdXJfbW9kZSkgewotCQlkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUgPQotCQkJa3phbGxvYyhz aXplb2Yoc3RydWN0IGRzaV9kaXNwbGF5X21vZGUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkaXNw bGF5LT5wYW5lbC0+Y3VyX21vZGUpIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyb3I7 Ci0JCX0KLQl9Ci0KLQltZW1jcHkoZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlLCAmYWRqX21vZGUs IHNpemVvZihhZGpfbW9kZSkpOwotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNw bGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3NldF90cGdfc3Rh dGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMg PSAwOwotCWludCBpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9jdHJsICpjdHJsOwotCi0JaWYgKCFk aXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0J CWN0cmwgPSAmZGlzcGxheS0+Y3RybFtpXTsKLQkJcmMgPSBkc2lfY3RybF9zZXRfdHBnX3N0YXRl KGN0cmwtPmN0cmwsIGVuYWJsZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxl ZCB0byBzZXQgdHBnIHN0YXRlIGZvciBob3N0XyVkXG4iLAotCQkJICAgICAgIGRpc3BsYXktPm5h bWUsIGkpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCX0KLQotCWRpc3BsYXktPmlzX3RwZ19lbmFi bGVkID0gZW5hYmxlOwotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9k aXNwbGF5X3ByZV9zd2l0Y2goc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCBy YyA9IDA7Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFu ZGxlLAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJbJXNdIGZhaWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAg ICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9k aXNwbGF5X2N0cmxfdXBkYXRlKGRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIHVwZGF0ZSBEU0kgY29udHJvbGxlciwgcmM9JWRcbiIsCi0JCQkgICBkaXNwbGF5 LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9jbGtfb2ZmOwotCX0KLQotCXJjID0gZHNp X2Rpc3BsYXlfc2V0X2Nsa19zcmMoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVz XSBmYWlsZWQgdG8gc2V0IERTSSBsaW5rIGNsb2NrIHNvdXJjZSwgcmM9JWRcbiIsCi0JCQlkaXNw bGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JfQotCi0JcmMgPSBk c2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURTSV9MSU5L X0NMSywgRFNJX0NMS19PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8g ZW5hYmxlIERTSSBsaW5rIGNsb2NrcywgcmM9JWRcbiIsCi0JCQkgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9kZWluaXQ7Ci0JfQotCi0JZ290byBlcnJvcjsKLQotZXJy b3JfY3RybF9kZWluaXQ6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY3RybF9kZWluaXQoZGlzcGxheSk7 Ci1lcnJvcl9jdHJsX2Nsa19vZmY6Ci0JKHZvaWQpZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxh eS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfQ09SRV9DTEssIERTSV9DTEtfT0ZGKTsKLWVycm9y OgotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9kaXNwbGF5X3ByZXBhcmUoc3RydWN0IGRzaV9k aXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21v ZGUgKm1vZGU7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghZGlzcGxheS0+cGFuZWwtPmN1cl9t b2RlKSB7Ci0JCXByX2Vycigibm8gdmFsaWQgbW9kZSBzZXQgZm9yIHRoZSBkaXNwbGF5Iik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9j ayk7Ci0KLQltb2RlID0gZGlzcGxheS0+cGFuZWwtPmN1cl9tb2RlOwotCi0JaWYgKG1vZGUtPmRz aV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxBR19ETVMpIHsKLQkJLyogdXBkYXRlIGRzaSBjdHJs IGZvciBuZXcgbW9kZSAqLwotCQlyYyA9IGRzaV9kaXNwbGF5X3ByZV9zd2l0Y2goZGlzcGxheSk7 Ci0JCWlmIChyYykKLQkJCXByX2VycigiWyVzXSBwYW5lbCBwcmUtcHJlcGFyZS1yZXMtc3dpdGNo IGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkJICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcHJlX3ByZXBhcmUoZGlzcGxheS0+cGFuZWwp OwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gcGFuZWwgcHJlLXByZXBhcmUgZmFpbGVkLCBy Yz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9 Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAot CQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09OKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBlbmFibGUgRFNJIGNvcmUgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRp c3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9wYW5lbF9wb3N0X3VucHJlcDsKLQl9Ci0K LQlyYyA9IGRzaV9kaXNwbGF5X3BoeV9zd19yZXNldChkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZXNldCBwaHksIHJjPSVkXG4iLCBkaXNwbGF5LT5uYW1l LCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9jbGtfb2ZmOwotCX0KLQotCXJjID0gZHNpX2Rpc3Bs YXlfcGh5X2VuYWJsZShkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxl ZCB0byBlbmFibGUgRFNJIFBIWSwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCBy Yyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9jbGtfb2ZmOwotCX0KLQotCXJjID0gZHNpX2Rpc3BsYXlf c2V0X2Nsa19zcmMoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQg dG8gc2V0IERTSSBsaW5rIGNsb2NrIHNvdXJjZSwgcmM9JWRcbiIsCi0JCQlkaXNwbGF5LT5uYW1l LCByYyk7Ci0JCWdvdG8gZXJyb3JfcGh5X2Rpc2FibGU7Ci0JfQotCi0JcmMgPSBkc2lfZGlzcGxh eV9jdHJsX2luaXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQg dG8gc2V0dXAgRFNJIGNvbnRyb2xsZXIsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCQlnb3RvIGVycm9yX3BoeV9kaXNhYmxlOwotCX0KLQotCXJjID0gZHNpX2Rpc3Bs YXlfY3RybF9ob3N0X2VuYWJsZShkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBlbmFibGUgRFNJIGhvc3QsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+ bmFtZSwgcmMpOwotCQlnb3RvIGVycm9yX2N0cmxfZGVpbml0OwotCX0KLQotCXJjID0gZHNpX2Rp c3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlEU0lfTElOS19DTEss IERTSV9DTEtfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGVuYWJs ZSBEU0kgbGluayBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yX2hvc3RfZW5naW5lX29mZjsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5 X3NvZnRfcmVzZXQoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQg c29mdCByZXNldCwgcmM9JWRcbiIsIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcl9j dHJsX2xpbmtfb2ZmOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3ByZXBhcmUoZGlzcGxheS0+cGFu ZWwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gcGFuZWwgcHJlcGFyZSBmYWlsZWQsIHJj PSVkXG4iLCBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfY3RybF9saW5rX29mZjsK LQl9Ci0KLQlnb3RvIGVycm9yOwotCi1lcnJvcl9jdHJsX2xpbmtfb2ZmOgotCSh2b2lkKWRzaV9k aXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0xJTktfQ0xL LCBEU0lfQ0xLX09GRik7Ci1lcnJvcl9ob3N0X2VuZ2luZV9vZmY6Ci0JKHZvaWQpZHNpX2Rpc3Bs YXlfY3RybF9ob3N0X2Rpc2FibGUoZGlzcGxheSk7Ci1lcnJvcl9jdHJsX2RlaW5pdDoKLQkodm9p ZClkc2lfZGlzcGxheV9jdHJsX2RlaW5pdChkaXNwbGF5KTsKLWVycm9yX3BoeV9kaXNhYmxlOgot CSh2b2lkKWRzaV9kaXNwbGF5X3BoeV9kaXNhYmxlKGRpc3BsYXkpOwotZXJyb3JfY3RybF9jbGtf b2ZmOgotCSh2b2lkKWRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxl LAotCQkJRFNJX0NPUkVfQ0xLLCBEU0lfQ0xLX09GRik7Ci1lcnJvcl9wYW5lbF9wb3N0X3VucHJl cDoKLQkodm9pZClkc2lfcGFuZWxfcG9zdF91bnByZXBhcmUoZGlzcGxheS0+cGFuZWwpOwotZXJy b3I6Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsK LX0KLQotaW50IGRzaV9kaXNwbGF5X3ByZV9raWNrb2ZmKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlz cGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JLyogY2hlY2sgYW5kIHNldHVwIE1JU1IgKi8KLQlp ZiAoZGlzcGxheS0+bWlzcl9lbmFibGUpCi0JCV9kc2lfZGlzcGxheV9zZXR1cF9taXNyKGRpc3Bs YXkpOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBk c2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfZGlzcGxh eV9tb2RlICptb2RlOwotCi0JaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5wYW5lbCkgewotCQlw cl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYg KCFkaXNwbGF5LT5wYW5lbC0+Y3VyX21vZGUpIHsKLQkJcHJfZXJyKCJubyB2YWxpZCBtb2RlIHNl dCBmb3IgdGhlIGRpc3BsYXkiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9j aygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQotCW1vZGUgPSBkaXNwbGF5LT5wYW5lbC0+Y3Vy X21vZGU7Ci0KLQlpZiAobW9kZS0+ZHNpX21vZGVfZmxhZ3MgJiBEU0lfTU9ERV9GTEFHX0RNUykg ewotCQlyYyA9IGRzaV9wYW5lbF9wb3N0X3N3aXRjaChkaXNwbGF5LT5wYW5lbCk7Ci0JCWlmIChy YykgewotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzd2l0Y2ggRFNJIHBhbmVsIG1vZGUsIHJj PSVkXG4iLAotCQkJCSAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0K LQl9IGVsc2UgewotCQlyYyA9IGRzaV9wYW5lbF9lbmFibGUoZGlzcGxheS0+cGFuZWwpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIERTSSBwYW5lbCwgcmM9 JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJ fQotCX0KLQotCWlmIChtb2RlLT5wcml2X2luZm8tPmRzY19lbmFibGVkKSB7Ci0JCW1vZGUtPnBy aXZfaW5mby0+ZHNjLnBpY193aWR0aCAqPSBkaXNwbGF5LT5jdHJsX2NvdW50OwotCQlyYyA9IGRz aV9wYW5lbF91cGRhdGVfcHBzKGRpc3BsYXktPnBhbmVsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9l cnIoIlslc10gcGFuZWwgcHBzIGNtZCB1cGRhdGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJCQlkaXNw bGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JaWYgKG1vZGUtPmRz aV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxBR19ETVMpIHsKLQkJcmMgPSBkc2lfcGFuZWxfc3dp dGNoKGRpc3BsYXktPnBhbmVsKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0 byBzd2l0Y2ggRFNJIHBhbmVsIG1vZGUsIHJjPSVkXG4iLAotCQkJCSAgIGRpc3BsYXktPm5hbWUs IHJjKTsKLQotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChkaXNwbGF5LT5jb25maWcucGFuZWxf bW9kZSA9PSBEU0lfT1BfVklERU9fTU9ERSkgewotCQlyYyA9IGRzaV9kaXNwbGF5X3ZpZF9lbmdp bmVfZW5hYmxlKGRpc3BsYXkpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXWZhaWxlZCB0 byBlbmFibGUgRFNJIHZpZGVvIGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+ bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcl9kaXNhYmxlX3BhbmVsOwotCQl9Ci0JfSBlbHNlIGlm IChkaXNwbGF5LT5jb25maWcucGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpIHsKLQkJcmMg PSBkc2lfZGlzcGxheV9jbWRfZW5naW5lX2VuYWJsZShkaXNwbGF5KTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoIlslc11mYWlsZWQgdG8gZW5hYmxlIERTSSBjbWQgZW5naW5lLCByYz0lZFxuIiwK LQkJCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yX2Rpc2FibGVfcGFu ZWw7Ci0JCX0KLQl9IGVsc2UgewotCQlwcl9lcnIoIlslc10gSW52YWxpZCBjb25maWd1cmF0aW9u XG4iLCBkaXNwbGF5LT5uYW1lKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yX2Rpc2Fi bGVfcGFuZWw7Ci0JfQotCi0JZ290byBlcnJvcjsKLQotZXJyb3JfZGlzYWJsZV9wYW5lbDoKLQko dm9pZClkc2lfcGFuZWxfZGlzYWJsZShkaXNwbGF5LT5wYW5lbCk7Ci1lcnJvcjoKLQltdXRleF91 bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNp X2Rpc3BsYXlfcG9zdF9lbmFibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWlu dCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3Bs YXlfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9wb3N0X2VuYWJsZShkaXNwbGF5LT5wYW5lbCk7 Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gcGFuZWwgcG9zdC1lbmFibGUgZmFpbGVkLCByYz0l ZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCS8qIHJlbW92ZSB0aGUgY2xr IHZvdGUgZm9yIENNRCBtb2RlIHBhbmVscyAqLwotCWlmIChkaXNwbGF5LT5jb25maWcucGFuZWxf bW9kZSA9PSBEU0lfT1BfQ01EX01PREUpCi0JCWRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXkt PmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJX0FMTF9DTEtTLCBEU0lfQ0xLX09GRik7Ci0KLQltdXRl eF91bmxvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQg ZHNpX2Rpc3BsYXlfcHJlX2Rpc2FibGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewot CWludCByYyA9IDA7Ci0KLQlpZiAoIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFt c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRp c3BsYXlfbG9jayk7Ci0KLQkvKiBlbmFibGUgdGhlIGNsayB2b3RlIGZvciBDTUQgbW9kZSBwYW5l bHMgKi8KLQlpZiAoZGlzcGxheS0+Y29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09QX0NNRF9NT0RF KQotCQlkc2lfZGlzcGxheV9jbGtfY3RybChkaXNwbGF5LT5kc2lfY2xrX2hhbmRsZSwKLQkJCURT SV9BTExfQ0xLUywgRFNJX0NMS19PTik7Ci0KLQlyYyA9IGRzaV9wYW5lbF9wcmVfZGlzYWJsZShk aXNwbGF5LT5wYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gcGFuZWwgcHJlLWRpc2Fi bGUgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCW11 dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWlu dCBkc2lfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsKLQlp bnQgcmMgPSAwOwotCi0JaWYgKCFkaXNwbGF5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkaXNwbGF5LT5kaXNw bGF5X2xvY2spOwotCi0JcmMgPSBkc2lfZGlzcGxheV93YWtlX3VwKGRpc3BsYXkpOwotCWlmIChy YykKLQkJcHJfZXJyKCJbJXNdIGRpc3BsYXkgd2FrZSB1cCBmYWlsZWQsIHJjPSVkXG4iLAotCQkg ICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JaWYgKGRpc3BsYXktPmNvbmZpZy5wYW5lbF9t b2RlID09IERTSV9PUF9WSURFT19NT0RFKSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfdmlkX2VuZ2lu ZV9kaXNhYmxlKGRpc3BsYXkpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc11mYWlsZWQgdG8g ZGlzYWJsZSBEU0kgdmlkIGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCX0gZWxzZSBpZiAoZGlzcGxheS0+Y29uZmlnLnBhbmVsX21vZGUgPT0gRFNJX09Q X0NNRF9NT0RFKSB7Ci0JCXJjID0gZHNpX2Rpc3BsYXlfY21kX2VuZ2luZV9kaXNhYmxlKGRpc3Bs YXkpOwotCQlpZiAocmMpCi0JCQlwcl9lcnIoIlslc11mYWlsZWQgdG8gZGlzYWJsZSBEU0kgY21k IGVuZ2luZSwgcmM9JWRcbiIsCi0JCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCX0gZWxz ZSB7Ci0JCXByX2VycigiWyVzXSBJbnZhbGlkIGNvbmZpZ3VyYXRpb25cbiIsIGRpc3BsYXktPm5h bWUpOwotCQlyYyA9IC1FSU5WQUw7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfZGlzYWJsZShkaXNw bGF5LT5wYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIGRpc2FibGUg RFNJIHBhbmVsLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQotCW11 dGV4X3VubG9jaygmZGlzcGxheS0+ZGlzcGxheV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWlu dCBkc2lfZGlzcGxheV91cGRhdGVfcHBzKGNoYXIgKnBwc19jbWQsIHZvaWQgKmRpc3ApCi17Ci0J c3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCi0JaWYgKHBwc19jbWQgPT0gTlVMTCB8fCBk aXNwID09IE5VTEwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWRpc3BsYXkgPSBkaXNwOwotCW11dGV4X2xvY2soJmRpc3BsYXkt PmRpc3BsYXlfbG9jayk7Ci0JbWVtY3B5KGRpc3BsYXktPnBhbmVsLT5kc2NfcHBzX2NtZCwgcHBz X2NtZCwgRFNJX0NNRF9QUFNfU0laRSk7Ci0JbXV0ZXhfdW5sb2NrKCZkaXNwbGF5LT5kaXNwbGF5 X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc2lfZGlzcGxheV91bnByZXBhcmUoc3Ry dWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5KQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIWRpc3Bs YXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCW11dGV4X2xvY2soJmRpc3BsYXktPmRpc3BsYXlfbG9jayk7Ci0KLQlyYyA9IGRzaV9k aXNwbGF5X3dha2VfdXAoZGlzcGxheSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZGlzcGxh eSB3YWtlIHVwIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7 Ci0KLQlyYyA9IGRzaV9wYW5lbF91bnByZXBhcmUoZGlzcGxheS0+cGFuZWwpOwotCWlmIChyYykK LQkJcHJfZXJyKCJbJXNdIHBhbmVsIHVucHJlcGFyZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAg ICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9jdHJsX2hvc3RfZGlz YWJsZShkaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlzYWJs ZSBEU0kgaG9zdCwgcmM9JWRcbiIsCi0JCSAgICAgICBkaXNwbGF5LT5uYW1lLCByYyk7Ci0KLQly YyA9IGRzaV9kaXNwbGF5X2Nsa19jdHJsKGRpc3BsYXktPmRzaV9jbGtfaGFuZGxlLAotCQkJRFNJ X0xJTktfQ0xLLCBEU0lfQ0xLX09GRik7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10gZmFpbGVk IHRvIGRpc2FibGUgTGluayBjbG9ja3MsIHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFt ZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9jdHJsX2RlaW5pdChkaXNwbGF5KTsKLQlpZiAo cmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGVpbml0IGNvbnRyb2xsZXIsIHJjPSVkXG4i LAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JcmMgPSBkc2lfZGlzcGxheV9waHlf ZGlzYWJsZShkaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGlz YWJsZSBEU0kgUEhZLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5hbWUsIHJjKTsKLQot CXJjID0gZHNpX2Rpc3BsYXlfY2xrX2N0cmwoZGlzcGxheS0+ZHNpX2Nsa19oYW5kbGUsCi0JCQlE U0lfQ09SRV9DTEssIERTSV9DTEtfT0ZGKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWls ZWQgdG8gZGlzYWJsZSBEU0kgY2xvY2tzLCByYz0lZFxuIiwKLQkJICAgICAgIGRpc3BsYXktPm5h bWUsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3Bvc3RfdW5wcmVwYXJlKGRpc3BsYXktPnBhbmVs KTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBwYW5lbCBwb3N0LXVucHJlcGFyZSBmYWlsZWQs IHJjPSVkXG4iLAotCQkgICAgICAgZGlzcGxheS0+bmFtZSwgcmMpOwotCi0JbXV0ZXhfdW5sb2Nr KCZkaXNwbGF5LT5kaXNwbGF5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBf X2luaXQgZHNpX2Rpc3BsYXlfcmVnaXN0ZXIodm9pZCkKLXsKLQlkc2lfcGh5X2Rydl9yZWdpc3Rl cigpOwotCWRzaV9jdHJsX2Rydl9yZWdpc3RlcigpOwotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJf cmVnaXN0ZXIoJmRzaV9kaXNwbGF5X2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBk c2lfZGlzcGxheV91bnJlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0 ZXIoJmRzaV9kaXNwbGF5X2RyaXZlcik7Ci0JZHNpX2N0cmxfZHJ2X3VucmVnaXN0ZXIoKTsKLQlk c2lfcGh5X2Rydl91bnJlZ2lzdGVyKCk7Ci19Ci1tb2R1bGVfcGFyYW1fc3RyaW5nKGRzaV9kaXNw bGF5MCwgZHNpX2Rpc3BsYXlfcHJpbWFyeSwgTUFYX0NNRExJTkVfUEFSQU1fTEVOLAotCQkJCQkJ CQkwNjAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZHNpX2Rpc3BsYXkwLAotCSJtc21fZHJtLmRzaV9k aXNwbGF5MD08ZGlzcGxheSBub2RlPjo8Y29uZmlnWD4gd2hlcmUgPGRpc3BsYXkgbm9kZT4gaXMg J3ByaW1hcnkgZHNpIGRpc3BsYXkgbm9kZSBuYW1lJyBhbmQgPGNvbmZpZ1g+IHdoZXJlIHggcmVw cmVzZW50cyBpbmRleCBpbiB0aGUgdG9wb2xvZ3kgbGlzdCIpOwotbW9kdWxlX3BhcmFtX3N0cmlu Zyhkc2lfZGlzcGxheTEsIGRzaV9kaXNwbGF5X3NlY29uZGFyeSwgTUFYX0NNRExJTkVfUEFSQU1f TEVOLAotCQkJCQkJCQkwNjAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZHNpX2Rpc3BsYXkxLAotCSJt c21fZHJtLmRzaV9kaXNwbGF5MT08ZGlzcGxheSBub2RlPjo8Y29uZmlnWD4gd2hlcmUgPGRpc3Bs YXkgbm9kZT4gaXMgJ3NlY29uZGFyeSBkc2kgZGlzcGxheSBub2RlIG5hbWUnIGFuZCA8Y29uZmln WD4gd2hlcmUgeCByZXByZXNlbnRzIGluZGV4IGluIHRoZSB0b3BvbG9neSBsaXN0Iik7Ci1tb2R1 bGVfaW5pdChkc2lfZGlzcGxheV9yZWdpc3Rlcik7Ci1tb2R1bGVfZXhpdChkc2lfZGlzcGxheV91 bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rpc3Bs YXkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBmOWNjZi4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kaXNwbGF5LmgKKysrIC9kZXYv bnVsbApAQCAtMSw1NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK LSAqLwotCi0jaWZuZGVmIF9EU0lfRElTUExBWV9IXwotI2RlZmluZSBfRFNJX0RJU1BMQVlfSF8K LQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0j aW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgot I2luY2x1ZGUgPGRybS9kcm1QLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0KLSNpbmNs dWRlICJtc21fZHJ2LmgiCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIKLSNpbmNsdWRlICJkc2lfY3Ry bC5oIgotI2luY2x1ZGUgImRzaV9waHkuaCIKLSNpbmNsdWRlICJkc2lfcGFuZWwuaCIKLQotI2Rl ZmluZSBNQVhfRFNJX0NUUkxTX1BFUl9ESVNQTEFZICAgICAgICAgICAgIDIKLSNkZWZpbmUgRFNJ X0NMSUVOVF9OQU1FX1NJWkUJCTIwCi0jZGVmaW5lIE1BWF9DTURMSU5FX1BBUkFNX0xFTgkgNTEy Ci0vKgotICogRFNJIFZhbGlkYXRlIE1vZGUgbW9kaWZpZXJzCi0gKiBARFNJX1ZBTElEQVRFX0ZM QUdfQUxMT1dfQURKVVNUOglBbGxvdyBtb2RlIHZhbGlkYXRpb24gdG8gYWxzbyBkbyBmaXh1cAot ICovCi0jZGVmaW5lIERTSV9WQUxJREFURV9GTEFHX0FMTE9XX0FESlVTVAkweDEKLQotLyoqCi0g KiBlbnVtIGRzaV9kaXNwbGF5X3NlbGVjdGlvbl90eXBlIC0gZW51bWVyYXRlcyBEU0kgZGlzcGxh eSBzZWxlY3Rpb24gdHlwZXMKLSAqIEBEU0lfUFJJTUFSWTogICAgcHJpbWFyeSBEU0kgZGlzcGxh eSBzZWxlY3RlZCBmcm9tIG1vZHVsZSBwYXJhbWV0ZXIKLSAqIEBEU0lfU0VDT05EQVJZOiAgU2Vj b25kYXJ5IERTSSBkaXNwbGF5IHNlbGVjdGVkIGZyb20gbW9kdWxlIHBhcmFtZXRlcgotICogQE1B WF9EU0lfQUNUSVZFX0RJU1BMQVk6IE1heGltdW0gYWNpdmUgZGlzcGxheXMgdGhhdCBjYW4gYmUg c2VsZWN0ZWQKLSAqLwotZW51bSBkc2lfZGlzcGxheV9zZWxlY3Rpb25fdHlwZSB7Ci0JRFNJX1BS SU1BUlkgPSAwLAotCURTSV9TRUNPTkRBUlksCi0JTUFYX0RTSV9BQ1RJVkVfRElTUExBWSwKLX07 Ci0KLS8qKgotICogZW51bSBkc2lfZGlzcGxheV90eXBlIC0gZW51bWVyYXRlcyBEU0kgZGlzcGxh eSB0eXBlcwotICogQERTSV9ESVNQTEFZX1NJTkdMRTogICAgICAgQSBwYW5lbCBjb25uZWN0ZWQg b24gYSBzaW5nbGUgRFNJIGludGVyZmFjZS4KLSAqIEBEU0lfRElTUExBWV9FWFRfQlJJREdFOiAg IEEgYnJpZGdlIGlzIGNvbm5lY3RlZCBiZXR3ZWVuIHBhbmVsIGFuZCBEU0kgaG9zdC4KLSAqCQkJ ICAgICAgSXQgdXRpbGl6ZXMgYSBzaW5nbGUgRFNJIGludGVyZmFjZS4KLSAqIEBEU0lfRElTUExB WV9TUExJVDogICAgICAgIEEgcGFuZWwgdGhhdCB1dGlsaXplcyBtb3JlIHRoYW4gb25lIERTSQot ICoJCQkgICAgICBpbnRlcmZhY2VzLgotICogQERTSV9ESVNQTEFZX1NQTElUX0VYVF9CUklER0U6 IEEgYnJpZGdlIGlzIHByZXNlbnQgYmV0d2VlbiBwYW5lbCBhbmQgRFNJCi0gKgkJCQkgIGhvc3Qu IEl0IHV0aWxpemVzIG1vcmUgdGhhbiBvbmUgRFNJIGludGVyZmFjZS4KLSAqLwotZW51bSBkc2lf ZGlzcGxheV90eXBlIHsKLQlEU0lfRElTUExBWV9TSU5HTEUgPSAwLAotCURTSV9ESVNQTEFZX0VY VF9CUklER0UsCi0JRFNJX0RJU1BMQVlfU1BMSVQsCi0JRFNJX0RJU1BMQVlfU1BMSVRfRVhUX0JS SURHRSwKLQlEU0lfRElTUExBWV9NQVgsCi19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfZGlzcGxh eV9jdHJsIC0gZHNpIGN0cmwvcGh5IGluZm9ybWF0aW9uIGZvciB0aGUgZGlzcGxheQotICogQGN0 cmw6ICAgICAgICAgICBIYW5kbGUgdG8gdGhlIERTSSBjb250cm9sbGVyIGRldmljZS4KLSAqIEBj dHJsX29mX25vZGU6ICAgcEhhbmRsZSB0byB0aGUgRFNJIGNvbnRyb2xsZXIgZGV2aWNlLgotICog QGRzaV9jdHJsX2lkeDogICBEU0kgY29udHJvbGxlciBpbnN0YW5jZSBpZC4KLSAqIEBwb3dlcl9z dGF0ZTogICAgQ3VycmVudCBwb3dlciBzdGF0ZSBvZiB0aGUgRFNJIGNvbnRyb2xsZXIuCi0gKiBA cGh5OiAgICAgICAgICAgICAgICAgIEhhbmRsZSB0byB0aGUgRFNJIFBIWSBkZXZpY2UuCi0gKiBA cGh5X29mX25vZGU6ICAgICAgICAgIHBIYW5kbGUgdG8gdGhlIERTSSBQSFkgZGV2aWNlLgotICog QHBoeV9lbmFibGVkOiAgICAgICAgICBQSFkgcG93ZXIgc3RhdHVzLgotICovCi1zdHJ1Y3QgZHNp X2Rpc3BsYXlfY3RybCB7Ci0JLyogY29udHJvbGxlciBpbmZvICovCi0Jc3RydWN0IGRzaV9jdHJs ICpjdHJsOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3RybF9vZl9ub2RlOwotCXUzMiBkc2lfY3Ry bF9pZHg7Ci0KLQllbnVtIGRzaV9wb3dlcl9zdGF0ZSBwb3dlcl9zdGF0ZTsKLQotCS8qIHBoeSBp bmZvICovCi0Jc3RydWN0IG1zbV9kc2lfcGh5ICpwaHk7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpw aHlfb2Zfbm9kZTsKLQotCWJvb2wgcGh5X2VuYWJsZWQ7Ci19OwotLyoqCi0gKiBzdHJ1Y3QgZHNp X2Rpc3BsYXlfYm9vdF9wYXJhbSAtIGRlZmluZXMgRFNJIGJvb3QgZGlzcGxheSBzZWxlY3Rpb24K LSAqIEBuYW1lOk5hbWUgb2YgRFNJIGRpc3BsYXkgc2VsZWN0ZWQgYXMgYSBib290IHBhcmFtLgot ICogQGJvb3RfZGlzcF9lbjpib29sIHRvIGluZGljYXRlIGR0c2kgYXZhaWxhYmlsaXR5IG9mIGRp c3BsYXkgbm9kZQotICogQGlzX3ByaW1hcnk6Ym9vbCB0byBpbmRpY2F0ZSB3aGV0aGVyIGN1cnJl bnQgZGlzcGxheSBpcyBwcmltYXJ5IGRpc3BsYXkKLSAqIEBsZW5ndGg6bGVuZ3RoIG9mIERTSSBk aXNwbGF5LgotICogQGNtZGxpbmVfdG9wb2xvZ3k6IERpc3BsYXkgdG9wb2xvZ3kgc2hhcmVkIGZy b20ga2VybmVsIGNvbW1hbmQgbGluZS4KLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5X2Jvb3RfcGFy YW0gewotCWNoYXIgbmFtZVtNQVhfQ01ETElORV9QQVJBTV9MRU5dOwotCWJvb2wgYm9vdF9kaXNw X2VuOwotCWJvb2wgaXNfcHJpbWFyeTsKLQlpbnQgbGVuZ3RoOwotCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZTsKLQlpbnQgY21kbGluZV90b3BvbG9neTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRz aV9kaXNwbGF5X2Nsa19pbmZvIC0gZHNpIGRpc3BsYXkgY2xvY2sgc291cmNlIGluZm9ybWF0aW9u Ci0gKiBAc3JjX2Nsa3M6ICAgICAgICAgIFNvdXJjZSBjbG9ja3MgZm9yIERTSSBkaXNwbGF5Lgot ICogQG11eF9jbGtzOiAgICAgICAgICBNdXggY2xvY2tzIHVzZWQgZm9yIERGUFMuCi0gKiBAc2hh ZG93X2Nsa3M6ICAgICAgIFVzZWQgZm9yIERGUFMuCi0gKi8KLXN0cnVjdCBkc2lfZGlzcGxheV9j bGtfaW5mbyB7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgc3JjX2Nsa3M7Ci0Jc3RydWN0IGRz aV9jbGtfbGlua19zZXQgbXV4X2Nsa3M7Ci0Jc3RydWN0IGRzaV9jbGtfbGlua19zZXQgc2hhZG93 X2Nsa3M7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfZGlzcGxheSAtIGRzaSBkaXNwbGF5IGlu Zm9ybWF0aW9uCi0gKiBAcGRldjogICAgICAgICAgICAgUG9pbnRlciB0byBwbGF0Zm9ybSBkZXZp Y2UuCi0gKiBAZHJtX2RldjogICAgICAgICAgRFJNIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhl IGRpc3BsYXkuCi0gKiBAbmFtZTogICAgICAgICAgICAgTmFtZSBvZiB0aGUgZGlzcGxheS4KLSAq IEBkaXNwbGF5X3R5cGU6ICAgICBEaXNwbGF5IHR5cGUgYXMgZGVmaW5lZCBpbiBkZXZpY2UgdHJl ZS4KLSAqIEBsaXN0OiAgICAgICAgICAgICBMaXN0IHBvaW50ZXIuCi0gKiBAaXNfYWN0aXZlOiAg ICAgICAgSXMgZGlzcGxheSBhY3RpdmUuCi0gKiBAZGlzcGxheV9sb2NrOiAgICAgTXV0ZXggZm9y IGRzaV9kaXNwbGF5IGludGVyZmFjZS4KLSAqIEBjdHJsX2NvdW50OiAgICAgICBOdW1iZXIgb2Yg RFNJIGludGVyZmFjZXMgcmVxdWlyZWQgYnkgcGFuZWwuCi0gKiBAY3RybDogICAgICAgICAgICAg Q29udHJvbGxlciBpbmZvcm1hdGlvbiBmb3IgRFNJIGRpc3BsYXkuCi0gKiBAcGFuZWw6ICAgICAg ICAgICAgSGFuZGxlIHRvIERTSSBwYW5lbC4KLSAqIEBwYW5lbF9vZjogICAgICAgICBwSGFuZGxl IHRvIERTSSBwYW5lbC4KLSAqIEB0eXBlOiAgICAgICAgICAgICBEU0kgZGlzcGxheSB0eXBlLgot ICogQGNsa19tYXN0ZXJfaWR4OiAgIFRoZSBtYXN0ZXIgY29udHJvbGxlciBmb3IgY29udHJvbGxp bmcgY2xvY2tzLiBUaGlzIGlzIGFuCi0gKgkJICAgICAgaW5kZXggaW50byB0aGUgY3RybFtNQVhf RFNJX0NUUkxTX1BFUl9ESVNQTEFZXSBhcnJheS4KLSAqIEBjbWRfbWFzdGVyX2lkeDogICBUaGUg bWFzdGVyIGNvbnRyb2xsZXIgZm9yIHNlbmRpbmcgRFNJIGNvbW1hbmRzIHRvIHBhbmVsLgotICog QHZpZGVvX21hc3Rlcl9pZHg6IFRoZSBtYXN0ZXIgY29udHJvbGxlciBmb3IgZW5hYmxpbmcgdmlk ZW8gZW5naW5lLgotICogQGNsb2NrX2luZm86ICAgICAgIENsb2NrIHNvdXJjaW5nIGZvciBEU0kg ZGlzcGxheS4KLSAqIEBjb25maWc6ICAgICAgICAgICBEU0kgaG9zdCBjb25maWd1cmF0aW9uIGlu Zm9ybWF0aW9uLgotICogQGxhbmVfbWFwOiAgICAgICAgIExhbmUgbWFwcGluZyBiZXR3ZWVuIERT SSBob3N0IGFuZCBQYW5lbC4KLSAqIEBjbWRsaW5lX3RvcG9sb2d5OiBEaXNwbGF5IHRvcG9sb2d5 IHNoYXJlZCBmcm9tIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0gKiBAY21kbGluZV90aW1pbmc6ICAg RGlzcGxheSB0aW1pbmcgc2hhcmVkIGZyb20ga2VybmVsIGNvbW1hbmQgbGluZS4KLSAqIEBpc190 cGdfZW5hYmxlZDogICBUUEcgc3RhdGUuCi0gKiBAdWxwc19lbmFibGVkOiAgICAgdWxwcyBzdGF0 ZS4KLSAqIEBjbGFtcF9lbmFibGVkOiAgICBjbGFtcCBzdGF0ZS4KLSAqIEBwaHlfaWRsZV9wb3dl cl9vZmY6ICAgUEhZIHBvd2VyIHN0YXRlLgotICogQGhvc3Q6ICAgICAgICAgICAgIERSTSBNSVBJ IERTSSBIb3N0LgotICogQGJyaWRnZTogICAgICAgICAgIFBvaW50ZXIgdG8gRFJNIGJyaWRnZSBv YmplY3QuCi0gKiBAY21kX2VuZ2luZV9yZWZjb3VudDogIFJlZmVyZW5jZSBjb3VudCBlbmZvcmNp bmcgc2luZ2xlIGluc3RhbmNlIG9mIGNtZCBlbmcKLSAqIEBjbGtfbW5ncjogICAgICAgICBEU0kg Y2xvY2sgbWFuYWdlci4KLSAqIEBkc2lfY2xrX2hhbmRsZTogICBEU0kgY2xvY2sgaGFuZGxlLgot ICogQG1kcF9jbGtfaGFuZGxlOiAgIE1EUCBjbG9jayBoYW5kbGUuCi0gKiBAcm9vdDogICAgICAg ICAgICAgRGVidWdmcyByb290IGRpcmVjdG9yeQotICogQG1pc3JfZW5hYmxlICAgICAgIEZyYW1l IE1JU1IgZW5hYmxlL2Rpc2FibGUKLSAqIEBtaXNyX2ZyYW1lX2NvdW50ICBOdW1iZXIgb2YgZnJh bWVzIHRvIGFjY3VtdWxhdGUgdGhlIE1JU1IgdmFsdWUKLSAqLwotc3RydWN0IGRzaV9kaXNwbGF5 IHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBkcm1fZGV2aWNlICpk cm1fZGV2OwotCi0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBjaGFyICpkaXNwbGF5X3R5cGU7 Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWJvb2wgaXNfYWN0aXZlOwotCXN0cnVjdCBtdXRl eCBkaXNwbGF5X2xvY2s7Ci0KLQl1MzIgY3RybF9jb3VudDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlf Y3RybCBjdHJsW01BWF9EU0lfQ1RSTFNfUEVSX0RJU1BMQVldOwotCi0JLyogcGFuZWwgaW5mbyAq LwotCXN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFuZWxf b2Y7Ci0KLQllbnVtIGRzaV9kaXNwbGF5X3R5cGUgdHlwZTsKLQl1MzIgY2xrX21hc3Rlcl9pZHg7 Ci0JdTMyIGNtZF9tYXN0ZXJfaWR4OwotCXUzMiB2aWRlb19tYXN0ZXJfaWR4OwotCi0Jc3RydWN0 IGRzaV9kaXNwbGF5X2Nsa19pbmZvIGNsb2NrX2luZm87Ci0Jc3RydWN0IGRzaV9ob3N0X2NvbmZp ZyBjb25maWc7Ci0Jc3RydWN0IGRzaV9sYW5lX21hcCBsYW5lX21hcDsKLQlpbnQgY21kbGluZV90 b3BvbG9neTsKLQlpbnQgY21kbGluZV90aW1pbmc7Ci0JYm9vbCBpc190cGdfZW5hYmxlZDsKLQli b29sIHVscHNfZW5hYmxlZDsKLQlib29sIGNsYW1wX2VuYWJsZWQ7Ci0JYm9vbCBwaHlfaWRsZV9w b3dlcl9vZmY7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICp0eF9jbWRfYnVmOwotCXUzMiBjbWRf YnVmZmVyX3NpemU7Ci0JdTY0IGNtZF9idWZmZXJfaW92YTsKLQl2b2lkICp2YWRkcjsKLQotCXN0 cnVjdCBtaXBpX2RzaV9ob3N0IGhvc3Q7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgICAgKmJyaWRnZTsK LQl1MzIgY21kX2VuZ2luZV9yZWZjb3VudDsKLQotCXZvaWQgKmNsa19tbmdyOwotCXZvaWQgKmRz aV9jbGtfaGFuZGxlOwotCXZvaWQgKm1kcF9jbGtfaGFuZGxlOwotCi0JLyogREVCVUcgRlMgKi8K LQlzdHJ1Y3QgZGVudHJ5ICpyb290OwotCi0JYm9vbCBtaXNyX2VuYWJsZTsKLQl1MzIgbWlzcl9m cmFtZV9jb3VudDsKLX07Ci0KLSNpZmRlZiBDT05GSUdfRFJNX01TTV9EU0lfU1RBR0lORwotCi1p bnQgZHNpX2Rpc3BsYXlfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwot aW50IGRzaV9kaXNwbGF5X2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7 Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cygpIC0gcmV0dXJucyBu dW1iZXIgb2YgZGlzcGxheSBkZXZpY2VzCi0gKgkJCQkgICAgICAgc3VwcG9ydGVkLgotICoKLSAq IFJldHVybjogbnVtYmVyIG9mIGRpc3BsYXlzLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X251 bV9vZl9kaXNwbGF5cyh2b2lkKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9nZXRfYWN0aXZlX2Rp c3BsYXlzIC0gcmV0dXJucyBwb2ludGVycyBmb3IgYWN0aXZlIGRpc3BsYXkgZGV2aWNlcwotICog QGRpc3BsYXlfYXJyYXk6IFBvaW50ZXIgdG8gZGlzcGxheSBhcnJheSB0byBiZSBmaWxsZWQKLSAq IEBtYXhfZGlzcGxheV9jb3VudDogU2l6ZSBvZiBkaXNwbGF5X2FycmF5Ci0gKiBAUmV0dXJuczog TnVtYmVyIG9mIGRpc3BsYXkgZW50cmllcyBmaWxsZWQKLSAqLwotaW50IGRzaV9kaXNwbGF5X2dl dF9hY3RpdmVfZGlzcGxheXModm9pZCAqKmRpc3BsYXlfYXJyYXksCi0JCXUzMiBtYXhfZGlzcGxh eV9jb3VudCk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZ2V0X2Jvb3RfZGlzcGxheSgpLSBnZXQg RFNJIGJvb3QgZGlzcGxheSBuYW1lCi0gKiBAaW5kZXg6CWluZGV4IG9mIGRpc3BsYXkgc2VsZWN0 aW9uCi0gKgotICogUmV0dXJuOglyZXR1cm5zIHRoZSBkaXNwbGF5IG5vZGUgcG9pbnRlcgotICov Ci1zdHJ1Y3QgZGV2aWNlX25vZGUgKmRzaV9kaXNwbGF5X2dldF9ib290X2Rpc3BsYXkoaW50IGlu ZGV4KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9nZXRfZGlzcGxheV9ieV9uYW1lKCktIGZpbmRz IGRpc3BsYXkgYnkgbmFtZQotICogQG5hbWU6CW5hbWUgb2YgdGhlIGRpc3BsYXkuCi0gKgotICog UmV0dXJuOiBoYW5kbGUgdG8gdGhlIGRpc3BsYXkgb3IgZXJyb3IgY29kZS4KLSAqLwotc3RydWN0 IGRzaV9kaXNwbGF5ICpkc2lfZGlzcGxheV9nZXRfZGlzcGxheV9ieV9uYW1lKGNvbnN0IGNoYXIg Km5hbWUpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3NldF9hY3RpdmVfc3RhdGUoKSAtIHNldHMg dGhlIHN0YXRlIG9mIHRoZSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgIEhhbmRsZSB0byBk aXNwbGF5LgotICogQGlzX2FjdGl2ZTogICAgICBzdGF0ZQotICovCi12b2lkIGRzaV9kaXNwbGF5 X3NldF9hY3RpdmVfc3RhdGUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5LCBib29sIGlzX2Fj dGl2ZSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9pbml0KCkgLSBpbml0aWFs aXplcyBEUk0gYnJpZGdlIG9iamVjdCBmb3IgRFNJCi0gKiBAZGlzcGxheTogICAgICAgICAgICBI YW5kbGUgdG8gdGhlIGRpc3BsYXkuCi0gKiBAZW5jb2RlcjogICAgICAgICAgICBQb2ludGVyIHRv IHRoZSBlbmNvZGVyIG9iamVjdCB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlCi0gKgkJCWRpc3Bs YXkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZHJt X2JyaWRnZV9pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJc3RydWN0IGRybV9l bmNvZGVyICplbmMpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2RybV9icmlkZ2VfZGVpbml0KCkg LSBkZXN0cm95cyBEUk0gYnJpZGdlIGZvciB0aGUgZGlzcGxheQotICogQGRpc3BsYXk6ICAgICAg ICBIYW5kbGUgdG8gdGhlIGRpc3BsYXkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9kZWluaXQoc3RydWN0IGRzaV9kaXNwbGF5ICpk aXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9nZXRfaW5mbygpIC0gcmV0dXJucyB0aGUg ZGlzcGxheSBwcm9wZXJ0aWVzCi0gKiBAaW5mbzogICAgICAgICAgICAgUG9pbnRlciB0byB0aGUg c3RydWN0dXJlIHdoZXJlIGluZm8gaXMgc3RvcmVkLgotICogQGRpc3A6ICAgICAgICAgICAgIEhh bmRsZSB0byB0aGUgZGlzcGxheS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWlu dCBkc2lfZGlzcGxheV9nZXRfaW5mbyhzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbywgdm9p ZCAqZGlzcCk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZ2V0X21vZGVfY291bnQoKSAtIGdldCBu dW1iZXIgb2YgbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAg ICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqIEBjb3VudDogICAgICAgICAgICAgIE51bWJl ciBvZiBtb2RlcyBzdXBwb3J0ZWQKLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWlu dCBkc2lfZGlzcGxheV9nZXRfbW9kZV9jb3VudChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXks IHUzMiAqY291bnQpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X2dldF9tb2RlcygpIC0gZ2V0IG1v ZGVzIHN1cHBvcnRlZCBieSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICAgICBIYW5kbGUg dG8gZGlzcGxheS4KLSAqIEBtb2RlczsgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYXJyYXkgb2Yg bW9kZXMuIE1lbW9yeSBhbGxvY2F0ZWQgc2hvdWxkIGJlCi0gKgkJCWJpZyBlbm91Z2ggdG8gc3Rv cmUgKGNvdW50ICogc3RydWN0IGRzaV9kaXNwbGF5X21vZGUpCi0gKgkJCWVsZW1lbnRzLiBJZiBt b2RlcyBwb2ludGVyIGlzIE5VTEwsIG51bWJlciBvZiBtb2RlcyB3aWxsCi0gKgkJCWJlIHN0b3Jl ZCBpbiB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgY291bnQuCi0gKgotICogUmV0dXJuOiBlcnJv ciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfZ2V0X21vZGVzKHN0cnVjdCBkc2lfZGlzcGxh eSAqZGlzcGxheSwKLQkJCSAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGVzKTsKLQotLyoq Ci0gKiBkc2lfZGlzcGxheV9wdXRfbW9kZSgpIC0gZnJlZSB1cCBtb2RlIGNyZWF0ZWQgZm9yIHRo ZSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAq IEBtb2RlOiAgICAgICAgICAgICAgIERpc3BsYXkgbW9kZSB0byBiZSBmcmVlZCB1cAotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotdm9pZCBkc2lfZGlzcGxheV9wdXRfbW9kZShzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUp OwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGUoKSAtIHZhbGlkYXRlcyBpZiBt b2RlIGlzIHN1cHBvcnRlZCBieSBkaXNwbGF5Ci0gKiBAZGlzcGxheTogICAgICAgICAgICAgSGFu ZGxlIHRvIGRpc3BsYXkuCi0gKiBAbW9kZTogICAgICAgICAgICAgICAgTW9kZSB0byBiZSB2YWxp ZGF0ZWQuCi0gKiBAZmxhZ3M6ICAgICAgICAgICAgICAgTW9kaWZpZXIgZmxhZ3MuCi0gKgotICog UmV0dXJuOiAwIGlmIHN1cHBvcnRlZCBvciBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3Bs YXlfdmFsaWRhdGVfbW9kZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQkgICAgICBz dHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCSAgICAgIHUzMiBmbGFncyk7Ci0KLS8q KgotICogZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZV92cnIoKSAtIHZhbGlkYXRlcyBtb2RlIGlm IHZhcmlhYmxlIHJlZnJlc2ggY2FzZQotICogQGRpc3BsYXk6ICAgICAgICAgICAgIEhhbmRsZSB0 byBkaXNwbGF5LgotICogQG1vZGU6ICAgICAgICAgICAgICAgIE1vZGUgdG8gYmUgdmFsaWRhdGVk Li4KLSAqCi0gKiBSZXR1cm46IDAgaWYgIGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxh eV92YWxpZGF0ZV9tb2RlX3ZycihzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCQlzdHJ1 Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqY3VyX2RzaV9tb2RlLAotCQkJc3RydWN0IGRzaV9kaXNwbGF5 X21vZGUgKm1vZGUpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3NldF9tb2RlKCkgLSBTZXQgbW9k ZSBvbiB0aGUgZGlzcGxheS4KLSAqIEBkaXNwbGF5OiAgICAgICAgICAgSGFuZGxlIHRvIGRpc3Bs YXkuCi0gKiBAbW9kZTogICAgICAgICAgICAgIG1vZGUgdG8gYmUgc2V0LgotICogQGZsYWdzOiAg ICAgICAgICAgICBNb2RpZmllciBmbGFncy4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0g Ki8KLWludCBkc2lfZGlzcGxheV9zZXRfbW9kZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXks Ci0JCQkgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkgdTMyIGZsYWdzKTsKLQot LyoqCi0gKiBkc2lfZGlzcGxheV9wcmVwYXJlKCkgLSBwcmVwYXJlIGRpc3BsYXkKLSAqIEBkaXNw bGF5OiAgICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqCi0gKiBQcmVwYXJlIHdpbGwgcGVy Zm9ybSBwb3dlciB1cCBzZXF1ZW5jZXMgZm9yIHRoZSBob3N0IGFuZCBwYW5lbCBoYXJkd2FyZS4K LSAqIFBvd2VyIGFuZCBjbG9jayByZXNvdXJjZXMgbWlnaHQgYmUgdHVybmVkIG9uIChkZXBlbmRp bmcgb24gdGhlIHBhbmVsIG1vZGUpLgotICogVGhlIHZpZGVvIGVuZ2luZSBpcyBub3QgZW5hYmxl ZC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfZGlzcGxheV9wcmVw YXJlKHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlf ZW5hYmxlKCkgLSBlbmFibGUgZGlzcGxheQotICogQGRpc3BsYXk6ICAgICAgICAgICAgSGFuZGxl IHRvIGRpc3BsYXkuCi0gKgotICogRW5hYmxlIHdpbGwgdHVybiBvbiB0aGUgaG9zdCBlbmdpbmUg YW5kIHRoZSBwYW5lbC4gQXQgdGhlIGVuZCBvZiB0aGUgZW5hYmxlCi0gKiBmdW5jdGlvbiwgSG9z dCBhbmQgcGFuZWwgaGFyZHdhcmUgYXJlIHJlYWR5IHRvIGFjY2VwdCBwaXhlbCBkYXRhIGZyb20K LSAqIHVwc3RyZWFtLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9k aXNwbGF5X2VuYWJsZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRz aV9kaXNwbGF5X3Bvc3RfZW5hYmxlKCkgLSBwZXJmb3JtIHBvc3QgZW5hYmxlIG9wZXJhdGlvbnMu Ci0gKiBAZGlzcGxheTogICAgICAgICBIYW5kbGUgdG8gZGlzcGxheS4KLSAqCi0gKiBTb21lIHBh bmVscyBtaWdodCByZXF1aXJlIHNvbWUgY29tbWFuZHMgdG8gYmUgc2VudCBhZnRlciBwaXhlbCBk YXRhCi0gKiB0cmFuc21pc3Npb24gaGFzIHN0YXJ0ZWQuIFN1Y2ggY29tbWFuZHMgYXJlIHNlbnQg YXMgcGFydCBvZiB0aGUgcG9zdF9lbmFibGUKLSAqIGZ1bmN0aW9uLgotICoKLSAqIFJldHVybjog ZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X3Bvc3RfZW5hYmxlKHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfcHJlX2Rpc2FibGUoKSAt IHBlcmZvcm0gcHJlIGRpc2FibGUgb3BlcmF0aW9ucy4KLSAqIEBkaXNwbGF5OiAgICAgICAgICBI YW5kbGUgdG8gZGlzcGxheS4KLSAqCi0gKiBJZiBhIHBhbmVsIHJlcXVpcmVzIGNvbW1hbmRzIHRv IGJlIHNlbnQgYmVmb3JlIHBpeGVsIGRhdGEgdHJhbnNtaXNzaW9uIGlzCi0gKiBzdG9wcGVkLCB0 aG9zZSBjYW4gYmUgc2VudCBhcyBwYXJ0IG9mIHByZV9kaXNhYmxlLgotICoKLSAqIFJldHVybjog ZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X3ByZV9kaXNhYmxlKHN0cnVjdCBkc2lf ZGlzcGxheSAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZGlzYWJsZSgpIC0gZGlz YWJsZSBwYW5lbCBhbmQgaG9zdCBoYXJkd2FyZS4KLSAqIEBkaXNwbGF5OiAgICAgICAgICAgICBI YW5kbGUgdG8gZGlzcGxheS4KLSAqCi0gKiBEaXNhYmxlIGhvc3QgYW5kIHBhbmVsIGhhcmR3YXJl IGFuZCBwaXhlbCBkYXRhIHRyYW5zbWlzc2lvbiBjYW4gbm90IGNvbnRpbnVlLgotICoKLSAqIFJl dHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IGRz aV9kaXNwbGF5ICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfcHJlX2Nsa29mZl9jYigpIC0gQ2Fs bGJhY2sgYmVmb3JlIGNsb2NrIGlzIHR1cm5lZCBvZmYKLSAqIEBwcml2OiBwcml2YXRlIGRhdGEg cG9pbnRlci4KLSAqIEBjbGtfdHlwZTogY2xvY2sgd2hpY2ggaXMgYmVpbmcgdHVybmVkIG9uLgot ICogQG5ld19zdGF0ZTogbmV4dCBzdGF0ZSBmb3IgdGhlIGNsb2NrLgotICoKLSAqIEByZXR1cm46 IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcHJlX2Nsa29mZl9jYih2b2lkICpwcml2LCBlbnVt IGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwKLQllbnVtIGRzaV9jbGtfc3RhdGUgbmV3X3N0YXRlKTsK LQotLyoqCi0gKiBkc2lfZGlzcGxheV91cGRhdGVfcHBzKCkgLSB1cGRhdGUgUFBTIGJ1ZmZlci4K LSAqIEBwcHNfY21kOiAgICAgICAgICAgICBQUFMgYnVmZmVyLgotICogQGRpc3BsYXk6ICAgICAg ICAgICAgIEhhbmRsZSB0byBkaXNwbGF5LgotICoKLSAqIENvcGllcyBuZXcgUFBTIGJ1ZmZlciBp bnRvIGRpc3BsYXkgc3RydWN0dXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwot aW50IGRzaV9kaXNwbGF5X3VwZGF0ZV9wcHMoY2hhciAqcHBzX2NtZCwgdm9pZCAqZGlzcGxheSk7 Ci0KLS8qKgotICogZHNpX3Bvc3RfY2xrb2ZmX2NiKCkgLSBDYWxsYmFjayBhZnRlciBjbG9jayBp cyB0dXJuZWQgb2ZmCi0gKiBAcHJpdjogcHJpdmF0ZSBkYXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5 cGU6IGNsb2NrIHdoaWNoIGlzIGJlaW5nIHR1cm5lZCBvbi4KLSAqIEBjdXJyX3N0YXRlOiBjdXJy ZW50IHN0YXRlIGZvciB0aGUgY2xvY2suCi0gKgotICogQHJldHVybjogZXJyb3IgY29kZS4KLSAq LwotaW50IGRzaV9wb3N0X2Nsa29mZl9jYih2b2lkICpwcml2LCBlbnVtIGRzaV9jbGtfdHlwZSBj bGtfdHlwZSwKLQllbnVtIGRzaV9jbGtfc3RhdGUgY3Vycl9zdGF0ZSk7Ci0KLS8qKgotICogZHNp X3Bvc3RfY2xrb25fY2IoKSAtIENhbGxiYWNrIGFmdGVyIGNsb2NrIGlzIHR1cm5lZCBvbgotICog QHByaXY6IHByaXZhdGUgZGF0YSBwb2ludGVyLgotICogQGNsa190eXBlOiBjbG9jayB3aGljaCBp cyBiZWluZyB0dXJuZWQgb24uCi0gKiBAY3Vycl9zdGF0ZTogY3VycmVudCBzdGF0ZSBmb3IgdGhl IGNsb2NrLgotICoKLSAqIEByZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcG9zdF9j bGtvbl9jYih2b2lkICpwcml2LCBlbnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwKLQllbnVtIGRz aV9jbGtfc3RhdGUgY3Vycl9zdGF0ZSk7Ci0KLQotLyoqCi0gKiBkc2lfcHJlX2Nsa29uX2NiKCkg LSBDYWxsYmFjayBiZWZvcmUgY2xvY2sgaXMgdHVybmVkIG9uCi0gKiBAcHJpdjogcHJpdmF0ZSBk YXRhIHBvaW50ZXIuCi0gKiBAY2xrX3R5cGU6IGNsb2NrIHdoaWNoIGlzIGJlaW5nIHR1cm5lZCBv bi4KLSAqIEBuZXdfc3RhdGU6IG5leHQgc3RhdGUgZm9yIHRoZSBjbG9jay4KLSAqCi0gKiBAcmV0 dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3ByZV9jbGtvbl9jYih2b2lkICpwcml2LCBl bnVtIGRzaV9jbGtfdHlwZSBjbGtfdHlwZSwKLQllbnVtIGRzaV9jbGtfc3RhdGUgbmV3X3N0YXRl KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV91bnByZXBhcmUoKSAtIHBvd2VyIG9mZiBkaXNwbGF5 IGhhcmR3YXJlLgotICogQGRpc3BsYXk6ICAgICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0g KgotICogSG9zdCBhbmQgcGFuZWwgaGFyZHdhcmUgaXMgdHVybmVkIG9mZi4gUGFuZWwgd2lsbCBi ZSBpbiByZXNldCBzdGF0ZSBhdCB0aGUKLSAqIGVuZCBvZiB0aGUgZnVuY3Rpb24uCi0gKgotICog UmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX2Rpc3BsYXlfdW5wcmVwYXJlKHN0cnVj dCBkc2lfZGlzcGxheSAqZGlzcGxheSk7Ci0KLWludCBkc2lfZGlzcGxheV9zZXRfdHBnX3N0YXRl KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBlbmFibGUpOwotCi1pbnQgZHNpX2Rp c3BsYXlfY2xvY2tfZ2F0ZShzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksIGJvb2wgZW5hYmxl KTsKLWludCBkc2lfZGlzcGFseV9zdGF0aWNfZnJhbWUoc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNw bGF5LCBib29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfZW5hYmxlX2V2ZW50KCkg LSBlbmFibGUgaW50ZXJydXB0IGJhc2VkIGNvbm5lY3RvciBldmVudAotICogQGRpc3BsYXk6ICAg ICAgICAgICAgSGFuZGxlIHRvIGRpc3BsYXkuCi0gKiBAZXZlbnRfaWR4OiAgICAgICAgICBFdmVu dCBpbmRleC4KLSAqIEBldmVudF9pbmZvOiAgICAgICAgIEV2ZW50IGNhbGxiYWNrIGRlZmluaXRp b24uCi0gKiBAZW5hYmxlOiAgICAgICAgICAgICBXaGV0aGVyIHRvIGVuYWJsZS9kaXNhYmxlIHRo ZSBldmVudCBpbnRlcnJ1cHQuCi0gKi8KLXZvaWQgZHNpX2Rpc3BsYXlfZW5hYmxlX2V2ZW50KHN0 cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSwKLQkJdWludDMyX3QgZXZlbnRfaWR4LCBzdHJ1Y3Qg ZHNpX2V2ZW50X2NiX2luZm8gKmV2ZW50X2luZm8sCi0JCWJvb2wgZW5hYmxlKTsKLQotaW50IGRz aV9kaXNwbGF5X3NldF9iYWNrbGlnaHQodm9pZCAqZGlzcGxheSwgdTMyIGJsX2x2bCk7Ci0KLS8q KgotICogZHNpX2Rpc3BsYXlfc29mdF9yZXNldCgpIC0gcGVyZm9ybSBhIHNvZnQgcmVzZXQgb24g RFNJIGNvbnRyb2xsZXIKLSAqIEBkaXNwbGF5OiAgICAgICAgIEhhbmRsZSB0byBkaXNwbGF5Ci0g KgotICogVGhlIHZpZGVvLCBjb21tYW5kIGFuZCBjb250cm9sbGVyIGVuZ2luZXMgd2lsbCBiZSBk aXNhYmxlZCBiZWZvcmUgdGhlCi0gKiByZXNldCBpcyB0cmlnZ2VyZWQuIEFmdGVyLCB0aGUgZW5n aW5lcyB3aWxsIGJlIHJlLWVuYWJsZWQgdG8gdGhlIHNhbWUgc3RhdGUKLSAqIGFzIGJlZm9yZSB0 aGUgcmVzZXQuCi0gKgotICogSWYgdGhlIHJlc2V0IGlzIGRvbmUgd2hpbGUgTURQIHRpbWluZyBl bmdpbmUgaXMgdHVybmVkIG9uLCB0aGUgdmlkZW8KLSAqIGVuZ2luZSBzaG91bGQgYmUgcmUtZW5h YmxlZCBvbmx5IGR1cmluZyB0aGUgdmVydGljYWwgYmxhbmtpbmcgdGltZS4KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUKLSAqLwotaW50IGRzaV9kaXNwbGF5X3NvZnRfcmVzZXQodm9pZCAqZGlz cGxheSk7Ci0KLS8qKgotICogZHNpX2Rpc3BsYXlfc2V0X3Bvd2VyIC0gdXBkYXRlIHBvd2VyL2Rw bXMgc2V0dGluZwotICogQGNvbm5lY3RvcjogUG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVj dHVyZQotICogQHBvd2VyX21vZGU6IE9uZSBvZiB0aGUgZm9sbG93aW5nLAotICogICAgICAgICAg ICAgIERQVV9NT0RFX0RQTVNfT04KLSAqICAgICAgICAgICAgICBEUFVfTU9ERV9EUE1TX0xQMQot ICogICAgICAgICAgICAgIERQVV9NT0RFX0RQTVNfTFAyCi0gKiAgICAgICAgICAgICAgRFBVX01P REVfRFBNU19TVEFOREJZCi0gKiAgICAgICAgICAgICAgRFBVX01PREVfRFBNU19TVVNQRU5ECi0g KiAgICAgICAgICAgICAgRFBVX01PREVfRFBNU19PRkYKLSAqIEBkaXNwbGF5OiBQb2ludGVyIHRv IHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2Vzcwot ICovCi1pbnQgZHNpX2Rpc3BsYXlfc2V0X3Bvd2VyKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCi0JCWludCBwb3dlcl9tb2RlLCB2b2lkICpkaXNwbGF5KTsKLQotLyoKLSAqIGRzaV9k aXNwbGF5X3ByZV9raWNrb2ZmIC0gcHJvZ3JhbSBraWNrb2ZmLXRpbWUgZmVhdHVyZXMKLSAqIEBk aXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6 IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQgZHNpX2Rpc3BsYXlfcHJlX2tpY2tvZmYoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfZGlzcGxheV9nZXRfZHN0X2Zv cm1hdCgpIC0gZ2V0IGRzdF9mb3JtYXQgZnJvbSBEU0kgZGlzcGxheQotICogQGRpc3BsYXk6ICAg ICAgICAgSGFuZGxlIHRvIGRpc3BsYXkKLSAqCi0gKiBSZXR1cm46IGVudW0gZHNpX3BpeGVsX2Zv cm1hdCB0eXBlCi0gKi8KLWVudW0gZHNpX3BpeGVsX2Zvcm1hdCBkc2lfZGlzcGxheV9nZXRfZHN0 X2Zvcm1hdCh2b2lkICpkaXNwbGF5KTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgZHNp X2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5cyh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMg aW5saW5lIGludCBkc2lfZGlzcGxheV9nZXRfYWN0aXZlX2Rpc3BsYXlzKHZvaWQgKipkaXNwbGF5 X2FycmF5LCB1MzIgbWF4X2Rpc3BsYXlfY291bnQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxp bmUgaW50IGRzaV9kaXNwbGF5X2RybV9icmlkZ2VfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRp c3BsYXksCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQotewotCXJldHVybiAtRUlOVkFMOwot fQotc3RhdGljIGlubGluZSBpbnQgZHNpX2Rpc3BsYXlfZHJtX2JyaWRnZV9kZWluaXQoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5KSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGludCBk c2lfZGlzcGxheV9nZXRfaW5mbyhzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqaW5mbywgdm9pZCAq ZGlzcCkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfRFNJ X0RJU1BMQVlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdp bmcvZHNpX2Rpc3BsYXlfdGVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9k c2lfZGlzcGxheV90ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZTI1NzAu LjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxh eV90ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo dCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNs dWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJkc2lfZGlzcGxheV90ZXN0LmgiCi0KLXN0 YXRpYyB2b2lkIGRzaV9kaXNwbGF5X3Rlc3RfZHVtcF9tb2RlcyhzdHJ1Y3QgZHNpX2Rpc3BsYXlf bW9kZSAqbW9kZSwgdTMyCi0JCQkJCWNvdW50KQotewotfQotCi1zdGF0aWMgdm9pZCBkc2lfZGlz cGxheV90ZXN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkc2lf ZGlzcGxheV90ZXN0ICp0ZXN0OwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1 Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZXM7Ci0JdTMyIGNvdW50ID0gMDsKLQl1MzIgc2l6ZSA9 IDA7Ci0JaW50IHJjID0gMDsKLQotCXRlc3QgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRz aV9kaXNwbGF5X3Rlc3QsIHRlc3Rfd29yayk7Ci0KLQlkaXNwbGF5ID0gdGVzdC0+ZGlzcGxheTsK LQlyYyA9IGRzaV9kaXNwbGF5X2dldF9tb2RlX2NvdW50KGRpc3BsYXksICZjb3VudCk7Ci0JaWYg KHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBtb2RlcyBjb3VudCwgcmM9JWRcbiIsIHJj KTsKLQkJZ290byB0ZXN0X2ZhaWw7Ci0JfQotCi0Jc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCptb2Rl cyk7Ci0JbW9kZXMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghbW9kZXMpIHsK LQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIHRlc3RfZmFpbDsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNw bGF5X2dldF9tb2RlcyhkaXNwbGF5LCBtb2Rlcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFp bGVkIHRvIGdldCBtb2RlcywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byB0ZXN0X2ZhaWxfZnJlZV9t b2RlczsKLQl9Ci0KLQlkc2lfZGlzcGxheV90ZXN0X2R1bXBfbW9kZXMobW9kZXMsIGNvdW50KTsK LQotCXJjID0gZHNpX2Rpc3BsYXlfc2V0X21vZGUoZGlzcGxheSwgJm1vZGVzWzBdLCAweDApOwot CWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgbW9kZSwgcmM9JWRcbiIsIHJjKTsK LQkJZ290byB0ZXN0X2ZhaWxfZnJlZV9tb2RlczsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X3By ZXBhcmUoZGlzcGxheSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHByZXBhcmUg ZGlzcGxheSwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byB0ZXN0X2ZhaWxfZnJlZV9tb2RlczsKLQl9 Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2VuYWJsZShkaXNwbGF5KTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gZW5hYmxlIGRpc3BsYXksIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gdGVz dF9mYWlsX3VucHJlcF9kaXNwOwotCX0KLQlyZXR1cm47Ci0KLXRlc3RfZmFpbF91bnByZXBfZGlz cDoKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gdW5wcmVwIGRpc3BsYXksIHJjPSVk XG4iLCByYyk7Ci0JCWdvdG8gdGVzdF9mYWlsX2ZyZWVfbW9kZXM7Ci0JfQotCi10ZXN0X2ZhaWxf ZnJlZV9tb2RlczoKLQlrZnJlZShtb2Rlcyk7Ci10ZXN0X2ZhaWw6Ci0JcmV0dXJuOwotfQotCi1p bnQgZHNpX2Rpc3BsYXlfdGVzdF9pbml0KHN0cnVjdCBkc2lfZGlzcGxheSAqZGlzcGxheSkKLXsK LQlzdGF0aWMgaW50IGRvbmU7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfdGVz dCAqdGVzdDsKLQotCWlmIChkb25lKQotCQlyZXR1cm4gcmM7Ci0KLQlkb25lID0gMTsKLQlpZiAo IWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCXRlc3QgPSBremFsbG9jKHNpemVvZigqdGVzdCksIEdGUF9LRVJORUwpOwot CWlmICghdGVzdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0ZXN0LT5kaXNwbGF5ID0gZGlzcGxh eTsKLQlJTklUX1dPUksoJnRlc3QtPnRlc3Rfd29yaywgZHNpX2Rpc3BsYXlfdGVzdF93b3JrKTsK LQotCWRzaV9kaXNwbGF5X3Rlc3Rfd29yaygmdGVzdC0+dGVzdF93b3JrKTsKLQlyZXR1cm4gcmM7 Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Rp c3BsYXlfdGVzdC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxh eV90ZXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZjA4NjEuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZGlzcGxheV90ZXN0LmgK KysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9ESVNQTEFZX1RFU1RfSF8KLSNkZWZpbmUgX0RT SV9ESVNQTEFZX1RFU1RfSF8KLQotI2luY2x1ZGUgImRzaV9kaXNwbGF5LmgiCi0jaW5jbHVkZSAi ZHNpX2N0cmxfaHcuaCIKLSNpbmNsdWRlICJkc2lfY3RybC5oIgotCi1zdHJ1Y3QgZHNpX2Rpc3Bs YXlfdGVzdCB7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5ICpkaXNwbGF5OwotCi0Jc3RydWN0IHdvcmtf c3RydWN0IHRlc3Rfd29yazsKLX07Ci0KLWludCBkc2lfZGlzcGxheV90ZXN0X2luaXQoc3RydWN0 IGRzaV9kaXNwbGF5ICpkaXNwbGF5KTsKLQotCi0jZW5kaWYgLyogX0RTSV9ESVNQTEFZX1RFU1Rf SF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2Ry bS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNzQyYTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2ODEgKzAs MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Ci0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0KLSNkZWZpbmUg cHJfZm10KGZtdCkJImRzaS1kcm06WyVzXSAiIGZtdCwgX19mdW5jX18KLSNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgotCi0jaW5j bHVkZSAibXNtX2ttcy5oIgotI2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIKLSNpbmNsdWRlICJk c2lfZHJtLmgiCi0jaW5jbHVkZSAiZHB1X3RyYWNlLmgiCi0KLSNkZWZpbmUgdG9fZHNpX2JyaWRn ZSh4KSAgICAgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IGRzaV9icmlkZ2UsIGJhc2UpCi0jZGVm aW5lIHRvX2RzaV9zdGF0ZSh4KSAgICAgIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBkc2lfY29u bmVjdG9yX3N0YXRlLCBiYXNlKQotCi1zdGF0aWMgdm9pZCBjb252ZXJ0X3RvX2RzaV9tb2RlKGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZSwKLQkJCQlzdHJ1Y3QgZHNpX2Rp c3BsYXlfbW9kZSAqZHNpX21vZGUpCi17Ci0JbWVtc2V0KGRzaV9tb2RlLCAwLCBzaXplb2YoKmRz aV9tb2RlKSk7Ci0KLQlkc2lfbW9kZS0+dGltaW5nLmhfYWN0aXZlID0gZHJtX21vZGUtPmhkaXNw bGF5OwotCWRzaV9tb2RlLT50aW1pbmcuaF9iYWNrX3BvcmNoID0gZHJtX21vZGUtPmh0b3RhbCAt IGRybV9tb2RlLT5oc3luY19lbmQ7Ci0JZHNpX21vZGUtPnRpbWluZy5oX3N5bmNfd2lkdGggPSBk cm1fbW9kZS0+aHRvdGFsIC0KLQkJCShkcm1fbW9kZS0+aHN5bmNfc3RhcnQgKyBkc2lfbW9kZS0+ dGltaW5nLmhfYmFja19wb3JjaCk7Ci0JZHNpX21vZGUtPnRpbWluZy5oX2Zyb250X3BvcmNoID0g ZHJtX21vZGUtPmhzeW5jX3N0YXJ0IC0KLQkJCQkJIGRybV9tb2RlLT5oZGlzcGxheTsKLQlkc2lf bW9kZS0+dGltaW5nLmhfc2tldyA9IGRybV9tb2RlLT5oc2tldzsKLQotCWRzaV9tb2RlLT50aW1p bmcudl9hY3RpdmUgPSBkcm1fbW9kZS0+dmRpc3BsYXk7Ci0JZHNpX21vZGUtPnRpbWluZy52X2Jh Y2tfcG9yY2ggPSBkcm1fbW9kZS0+dnRvdGFsIC0gZHJtX21vZGUtPnZzeW5jX2VuZDsKLQlkc2lf bW9kZS0+dGltaW5nLnZfc3luY193aWR0aCA9IGRybV9tb2RlLT52dG90YWwgLQotCQkoZHJtX21v ZGUtPnZzeW5jX3N0YXJ0ICsgZHNpX21vZGUtPnRpbWluZy52X2JhY2tfcG9yY2gpOwotCi0JZHNp X21vZGUtPnRpbWluZy52X2Zyb250X3BvcmNoID0gZHJtX21vZGUtPnZzeW5jX3N0YXJ0IC0KLQkJ CQkJIGRybV9tb2RlLT52ZGlzcGxheTsKLQotCWRzaV9tb2RlLT50aW1pbmcucmVmcmVzaF9yYXRl ID0gZHJtX21vZGUtPnZyZWZyZXNoOwotCi0JZHNpX21vZGUtPnBpeGVsX2Nsa19raHogPSBkcm1f bW9kZS0+Y2xvY2s7Ci0KLQlkc2lfbW9kZS0+cHJpdl9pbmZvID0KLQkJKHN0cnVjdCBkc2lfZGlz cGxheV9tb2RlX3ByaXZfaW5mbyAqKWRybV9tb2RlLT5wcml2YXRlOwotCi0JaWYgKG1zbV9pc19t b2RlX3NlYW1sZXNzKGRybV9tb2RlKSkKLQkJZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdzIHw9IERT SV9NT0RFX0ZMQUdfU0VBTUxFU1M7Ci0JaWYgKG1zbV9pc19tb2RlX2R5bmFtaWNfZnBzKGRybV9t b2RlKSkKLQkJZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdzIHw9IERTSV9NT0RFX0ZMQUdfREZQUzsK LQlpZiAobXNtX25lZWRzX3ZibGFua19wcmVfbW9kZXNldChkcm1fbW9kZSkpCi0JCWRzaV9tb2Rl LT5kc2lfbW9kZV9mbGFncyB8PSBEU0lfTU9ERV9GTEFHX1ZCTEFOS19QUkVfTU9ERVNFVDsKLQlp ZiAobXNtX2lzX21vZGVfc2VhbWxlc3NfZG1zKGRybV9tb2RlKSkKLQkJZHNpX21vZGUtPmRzaV9t b2RlX2ZsYWdzIHw9IERTSV9NT0RFX0ZMQUdfRE1TOwotCWlmIChtc21faXNfbW9kZV9zZWFtbGVz c192cnIoZHJtX21vZGUpKQotCQlkc2lfbW9kZS0+ZHNpX21vZGVfZmxhZ3MgfD0gRFNJX01PREVf RkxBR19WUlI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnZlcnRfdG9fZHJtX21vZGUoY29uc3Qgc3Ry dWN0IGRzaV9kaXNwbGF5X21vZGUgKmRzaV9tb2RlLAotCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICpkcm1fbW9kZSkKLXsKLQltZW1zZXQoZHJtX21vZGUsIDAsIHNpemVvZigqZHJtX21vZGUp KTsKLQotCWRybV9tb2RlLT5oZGlzcGxheSA9IGRzaV9tb2RlLT50aW1pbmcuaF9hY3RpdmU7Ci0J ZHJtX21vZGUtPmhzeW5jX3N0YXJ0ID0gZHJtX21vZGUtPmhkaXNwbGF5ICsKLQkJCQlkc2lfbW9k ZS0+dGltaW5nLmhfZnJvbnRfcG9yY2g7Ci0JZHJtX21vZGUtPmhzeW5jX2VuZCA9IGRybV9tb2Rl LT5oc3luY19zdGFydCArCi0JCQkgICAgICBkc2lfbW9kZS0+dGltaW5nLmhfc3luY193aWR0aDsK LQlkcm1fbW9kZS0+aHRvdGFsID0gZHJtX21vZGUtPmhzeW5jX2VuZCArIGRzaV9tb2RlLT50aW1p bmcuaF9iYWNrX3BvcmNoOwotCWRybV9tb2RlLT5oc2tldyA9IGRzaV9tb2RlLT50aW1pbmcuaF9z a2V3OwotCi0JZHJtX21vZGUtPnZkaXNwbGF5ID0gZHNpX21vZGUtPnRpbWluZy52X2FjdGl2ZTsK LQlkcm1fbW9kZS0+dnN5bmNfc3RhcnQgPSBkcm1fbW9kZS0+dmRpc3BsYXkgKwotCQkJCWRzaV9t b2RlLT50aW1pbmcudl9mcm9udF9wb3JjaDsKLQlkcm1fbW9kZS0+dnN5bmNfZW5kID0gZHJtX21v ZGUtPnZzeW5jX3N0YXJ0ICsKLQkJCSAgICAgIGRzaV9tb2RlLT50aW1pbmcudl9zeW5jX3dpZHRo OwotCWRybV9tb2RlLT52dG90YWwgPSBkcm1fbW9kZS0+dnN5bmNfZW5kICsgZHNpX21vZGUtPnRp bWluZy52X2JhY2tfcG9yY2g7Ci0KLQlkcm1fbW9kZS0+dnJlZnJlc2ggPSBkc2lfbW9kZS0+dGlt aW5nLnJlZnJlc2hfcmF0ZTsKLQlkcm1fbW9kZS0+Y2xvY2sgPSBkc2lfbW9kZS0+cGl4ZWxfY2xr X2toejsKLQotCWRybV9tb2RlLT5wcml2YXRlID0gKGludCAqKWRzaV9tb2RlLT5wcml2X2luZm87 Ci0KLQlpZiAoZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxBR19TRUFNTEVT UykKLQkJZHJtX21vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfU0VBTUxFU1M7Ci0JaWYgKGRz aV9tb2RlLT5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdfREZQUykKLQkJZHJtX21vZGUt PnByaXZhdGVfZmxhZ3MgfD0gTVNNX01PREVfRkxBR19TRUFNTEVTU19EWU5BTUlDX0ZQUzsKLQlp ZiAoZHNpX21vZGUtPmRzaV9tb2RlX2ZsYWdzICYgRFNJX01PREVfRkxBR19WQkxBTktfUFJFX01P REVTRVQpCi0JCWRybV9tb2RlLT5wcml2YXRlX2ZsYWdzIHw9IE1TTV9NT0RFX0ZMQUdfVkJMQU5L X1BSRV9NT0RFU0VUOwotCWlmIChkc2lfbW9kZS0+ZHNpX21vZGVfZmxhZ3MgJiBEU0lfTU9ERV9G TEFHX0RNUykKLQkJZHJtX21vZGUtPnByaXZhdGVfZmxhZ3MgfD0gTVNNX01PREVfRkxBR19TRUFN TEVTU19ETVM7Ci0JaWYgKGRzaV9tb2RlLT5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdf VlJSKQotCQlkcm1fbW9kZS0+cHJpdmF0ZV9mbGFncyB8PSBNU01fTU9ERV9GTEFHX1NFQU1MRVNT X1ZSUjsKLQotCWRybV9tb2RlX3NldF9uYW1lKGRybV9tb2RlKTsKLX0KLQotc3RhdGljIGludCBk c2lfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQotewotCXN0cnVjdCBk c2lfYnJpZGdlICpjX2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQotCWlmICghYnJp ZGdlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlwcl9kZWJ1ZygiWyVkXSBhdHRhY2hlZFxuIiwgY19icmlkZ2UtPmlkKTsKLQotCXJl dHVybiAwOwotCi19Ci0KLXN0YXRpYyB2b2lkIGRzaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9icmlkZ2Ug KmNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShicmlkZ2UpOwotCi0JaWYgKCFicmlkZ2UpIHsKLQkJ cHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBCeSB0aGlz IHBvaW50IG1vZGUgc2hvdWxkIGhhdmUgYmVlbiB2YWxpZGF0ZWQgdGhyb3VnaCBtb2RlX2ZpeHVw ICovCi0JcmMgPSBkc2lfZGlzcGxheV9zZXRfbW9kZShjX2JyaWRnZS0+ZGlzcGxheSwKLQkJCSYo Y19icmlkZ2UtPmRzaV9tb2RlKSwgMHgwKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJWRdIGZh aWxlZCB0byBwZXJmb3JtIGEgbW9kZSBzZXQsIHJjPSVkXG4iLAotCQkgICAgICAgY19icmlkZ2Ut PmlkLCByYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY19icmlkZ2UtPmRzaV9tb2RlLmRzaV9t b2RlX2ZsYWdzICYKLQkJKERTSV9NT0RFX0ZMQUdfU0VBTUxFU1MgfCBEU0lfTU9ERV9GTEFHX1ZS UikpIHsKLQkJcHJfZGVidWcoIlslZF0gc2VhbWxlc3MgcHJlLWVuYWJsZVxuIiwgY19icmlkZ2Ut PmlkKTsKLQkJcmV0dXJuOwotCX0KLQotCURQVV9BVFJBQ0VfQkVHSU4oImRzaV9icmlkZ2VfcHJl X2VuYWJsZSIpOwotCXJjID0gZHNpX2Rpc3BsYXlfcHJlcGFyZShjX2JyaWRnZS0+ZGlzcGxheSk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVkXSBEU0kgZGlzcGxheSBwcmVwYXJlIGZhaWxlZCwg cmM9JWRcbiIsCi0JCSAgICAgICBjX2JyaWRnZS0+aWQsIHJjKTsKLQkJRFBVX0FUUkFDRV9FTkQo ImRzaV9icmlkZ2VfcHJlX2VuYWJsZSIpOwotCQlyZXR1cm47Ci0JfQotCi0JRFBVX0FUUkFDRV9C RUdJTigiZHNpX2Rpc3BsYXlfZW5hYmxlIik7Ci0JcmMgPSBkc2lfZGlzcGxheV9lbmFibGUoY19i cmlkZ2UtPmRpc3BsYXkpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslZF0gRFNJIGRpc3BsYXkg ZW5hYmxlIGZhaWxlZCwgcmM9JWRcbiIsCi0JCSAgICAgICBjX2JyaWRnZS0+aWQsIHJjKTsKLQkJ KHZvaWQpZHNpX2Rpc3BsYXlfdW5wcmVwYXJlKGNfYnJpZGdlLT5kaXNwbGF5KTsKLQl9Ci0JRFBV X0FUUkFDRV9FTkQoImRzaV9kaXNwbGF5X2VuYWJsZSIpOwotCURQVV9BVFJBQ0VfRU5EKCJkc2lf YnJpZGdlX3ByZV9lbmFibGUiKTsKLX0KLQotc3RhdGljIHZvaWQgZHNpX2JyaWRnZV9lbmFibGUo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lf YnJpZGdlICpjX2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQotCWlmICghYnJpZGdl KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYg KGNfYnJpZGdlLT5kc2lfbW9kZS5kc2lfbW9kZV9mbGFncyAmCi0JCQkoRFNJX01PREVfRkxBR19T RUFNTEVTUyB8IERTSV9NT0RFX0ZMQUdfVlJSKSkgewotCQlwcl9kZWJ1ZygiWyVkXSBzZWFtbGVz cyBlbmFibGVcbiIsIGNfYnJpZGdlLT5pZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyYyA9IGRzaV9k aXNwbGF5X3Bvc3RfZW5hYmxlKGNfYnJpZGdlLT5kaXNwbGF5KTsKLQlpZiAocmMpCi0JCXByX2Vy cigiWyVkXSBEU0kgZGlzcGxheSBwb3N0IGVuYWJsZWQgZmFpbGVkLCByYz0lZFxuIiwKLQkJICAg ICAgIGNfYnJpZGdlLT5pZCwgcmMpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfYnJpZGdlX2Rpc2Fi bGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBk c2lfYnJpZGdlICpjX2JyaWRnZSA9IHRvX2RzaV9icmlkZ2UoYnJpZGdlKTsKLQotCWlmICghYnJp ZGdlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0J cmMgPSBkc2lfZGlzcGxheV9wcmVfZGlzYWJsZShjX2JyaWRnZS0+ZGlzcGxheSk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiWyVkXSBEU0kgZGlzcGxheSBwcmUgZGlzYWJsZSBmYWlsZWQsIHJjPSVk XG4iLAotCQkgICAgICAgY19icmlkZ2UtPmlkLCByYyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBk c2lfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQotewotCWlu dCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShi cmlkZ2UpOwotCi0JaWYgKCFicmlkZ2UpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybjsKLQl9Ci0KLQlEUFVfQVRSQUNFX0JFR0lOKCJkc2lfYnJpZGdlX3Bvc3RfZGlz YWJsZSIpOwotCURQVV9BVFJBQ0VfQkVHSU4oImRzaV9kaXNwbGF5X2Rpc2FibGUiKTsKLQlyYyA9 IGRzaV9kaXNwbGF5X2Rpc2FibGUoY19icmlkZ2UtPmRpc3BsYXkpOwotCWlmIChyYykgewotCQlw cl9lcnIoIlslZF0gRFNJIGRpc3BsYXkgZGlzYWJsZSBmYWlsZWQsIHJjPSVkXG4iLAotCQkgICAg ICAgY19icmlkZ2UtPmlkLCByYyk7Ci0JCURQVV9BVFJBQ0VfRU5EKCJkc2lfZGlzcGxheV9kaXNh YmxlIik7Ci0JCXJldHVybjsKLQl9Ci0JRFBVX0FUUkFDRV9FTkQoImRzaV9kaXNwbGF5X2Rpc2Fi bGUiKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfdW5wcmVwYXJlKGNfYnJpZGdlLT5kaXNwbGF5KTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJWRdIERTSSBkaXNwbGF5IHVucHJlcGFyZSBmYWlsZWQs IHJjPSVkXG4iLAotCQkgICAgICAgY19icmlkZ2UtPmlkLCByYyk7Ci0JCURQVV9BVFJBQ0VfRU5E KCJkc2lfYnJpZGdlX3Bvc3RfZGlzYWJsZSIpOwotCQlyZXR1cm47Ci0JfQotCURQVV9BVFJBQ0Vf RU5EKCJkc2lfYnJpZGdlX3Bvc3RfZGlzYWJsZSIpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfYnJp ZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCi0JCQkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVk X21vZGUpCi17Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShi cmlkZ2UpOwotCi0JaWYgKCFicmlkZ2UgfHwgIW1vZGUgfHwgIWFkanVzdGVkX21vZGUpIHsKLQkJ cHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1zZXQoJihj X2JyaWRnZS0+ZHNpX21vZGUpLCAweDAsIHNpemVvZihzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSkp OwotCWNvbnZlcnRfdG9fZHNpX21vZGUoYWRqdXN0ZWRfbW9kZSwgJihjX2JyaWRnZS0+ZHNpX21v ZGUpKTsKLX0KLQotc3RhdGljIGJvb2wgZHNpX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UsCi0JCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKLQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQotewotCWlu dCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShi cmlkZ2UpOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlIGRzaV9tb2RlLCBjdXJfZHNpX21vZGU7 Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgY3VyX21vZGU7Ci0KLQlpZiAoIWJyaWRnZSB8fCAh bW9kZSB8fCAhYWRqdXN0ZWRfbW9kZSkgewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsK LQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWNvbnZlcnRfdG9fZHNpX21vZGUobW9kZSwgJmRzaV9t b2RlKTsKLQotCXJjID0gZHNpX2Rpc3BsYXlfdmFsaWRhdGVfbW9kZShjX2JyaWRnZS0+ZGlzcGxh eSwgJmRzaV9tb2RlLAotCQkJRFNJX1ZBTElEQVRFX0ZMQUdfQUxMT1dfQURKVVNUKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJbJWRdIG1vZGUgaXMgbm90IHZhbGlkLCByYz0lZFxuIiwgY19icmlk Z2UtPmlkLCByYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoYnJpZGdlLT5lbmNvZGVy ICYmIGJyaWRnZS0+ZW5jb2Rlci0+Y3J0YykgewotCi0JCWNvbnZlcnRfdG9fZHNpX21vZGUoJmJy aWRnZS0+ZW5jb2Rlci0+Y3J0Yy0+bW9kZSwKLQkJCQkJCQkmY3VyX2RzaV9tb2RlKTsKLQkJcmMg PSBkc2lfZGlzcGxheV92YWxpZGF0ZV9tb2RlX3ZycihjX2JyaWRnZS0+ZGlzcGxheSwKLQkJCQkJ JmN1cl9kc2lfbW9kZSwgJmRzaV9tb2RlKTsKLQkJaWYgKHJjKQotCQkJcHJfZGVidWcoIlslc10g dnJyIG1vZGUgbWlzbWF0Y2ggZmFpbHVyZSByYz0lZFxuIiwKLQkJCQljX2JyaWRnZS0+ZGlzcGxh eS0+bmFtZSwgcmMpOwotCi0JCWN1cl9tb2RlID0gYnJpZGdlLT5lbmNvZGVyLT5jcnRjLT5tb2Rl OwotCi0JCWlmICghZHJtX21vZGVfZXF1YWwoJmN1cl9tb2RlLCBhZGp1c3RlZF9tb2RlKSAmJgot CQkJKCEoZHNpX21vZGUuZHNpX21vZGVfZmxhZ3MgJgotCQkJCURTSV9NT0RFX0ZMQUdfVlJSKSkp Ci0JCQlkc2lfbW9kZS5kc2lfbW9kZV9mbGFncyB8PSBEU0lfTU9ERV9GTEFHX0RNUzsKLQl9Ci0K LQljb252ZXJ0X3RvX2RybV9tb2RlKCZkc2lfbW9kZSwgYWRqdXN0ZWRfbW9kZSk7Ci0KLQlyZXR1 cm4gdHJ1ZTsKLX0KLQotaW50IGRzaV9jb25uX2dldF9tb2RlX2luZm8oY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKmRybV9tb2RlLAotCXN0cnVjdCBtc21fbW9kZV9pbmZvICptb2RlX2lu Zm8sCi0JdTMyIG1heF9taXhlcl93aWR0aCkKLXsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSBk c2lfbW9kZTsKLQlzdHJ1Y3QgZHNpX21vZGVfaW5mbyAqdGltaW5nOwotCi0JaWYgKCFkcm1fbW9k ZSB8fCAhbW9kZV9pbmZvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNvbnZlcnRfdG9fZHNpX21v ZGUoZHJtX21vZGUsICZkc2lfbW9kZSk7Ci0KLQlpZiAoIWRzaV9tb2RlLnByaXZfaW5mbykKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1zZXQobW9kZV9pbmZvLCAwLCBzaXplb2YoKm1vZGVfaW5m bykpOwotCi0JdGltaW5nID0gJmRzaV9tb2RlLnRpbWluZzsKLQltb2RlX2luZm8tPmZyYW1lX3Jh dGUgPSBkc2lfbW9kZS50aW1pbmcucmVmcmVzaF9yYXRlOwotCW1vZGVfaW5mby0+dnRvdGFsID0g RFNJX1ZfVE9UQUwodGltaW5nKTsKLQltb2RlX2luZm8tPnByZWZpbGxfbGluZXMgPSBkc2lfbW9k ZS5wcml2X2luZm8tPnBhbmVsX3ByZWZpbGxfbGluZXM7Ci0JbW9kZV9pbmZvLT5qaXR0ZXJfbnVt ZXIgPSBkc2lfbW9kZS5wcml2X2luZm8tPnBhbmVsX2ppdHRlcl9udW1lcjsKLQltb2RlX2luZm8t PmppdHRlcl9kZW5vbSA9IGRzaV9tb2RlLnByaXZfaW5mby0+cGFuZWxfaml0dGVyX2Rlbm9tOwot Ci0JbWVtY3B5KCZtb2RlX2luZm8tPnRvcG9sb2d5LCAmZHNpX21vZGUucHJpdl9pbmZvLT50b3Bv bG9neSwKLQkJCXNpemVvZihzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kpKTsKLQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgZHNpX2JyaWRn ZV9vcHMgPSB7Ci0JLmF0dGFjaCAgICAgICA9IGRzaV9icmlkZ2VfYXR0YWNoLAotCS5tb2RlX2Zp eHVwICAgPSBkc2lfYnJpZGdlX21vZGVfZml4dXAsCi0JLnByZV9lbmFibGUgICA9IGRzaV9icmlk Z2VfcHJlX2VuYWJsZSwKLQkuZW5hYmxlICAgICAgID0gZHNpX2JyaWRnZV9lbmFibGUsCi0JLmRp c2FibGUgICAgICA9IGRzaV9icmlkZ2VfZGlzYWJsZSwKLQkucG9zdF9kaXNhYmxlID0gZHNpX2Jy aWRnZV9wb3N0X2Rpc2FibGUsCi0JLm1vZGVfc2V0ICAgICA9IGRzaV9icmlkZ2VfbW9kZV9zZXQs Ci19OwotCi1pbnQgZHNpX2Nvbm5fcG9zdF9pbml0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCi0JCXZvaWQgKmluZm8sCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0Jc3RydWN0IGRzaV9k aXNwbGF5ICpkc2lfZGlzcGxheSA9IGRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9wYW5lbCAqcGFuZWw7 Ci0KLQlpZiAoIWluZm8gfHwgIWRzaV9kaXNwbGF5KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRw dV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sCi0JCSJkaXNwbGF5IHR5cGUiLCBkc2lfZGlzcGxh eS0+ZGlzcGxheV90eXBlKTsKLQotCXN3aXRjaCAoZHNpX2Rpc3BsYXktPnR5cGUpIHsKLQljYXNl IERTSV9ESVNQTEFZX1NJTkdMRToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRp c3BsYXkgY29uZmlnIiwKLQkJCQkJInNpbmdsZSBkaXNwbGF5Iik7Ci0JCWJyZWFrOwotCWNhc2Ug RFNJX0RJU1BMQVlfRVhUX0JSSURHRToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywg ImRpc3BsYXkgY29uZmlnIiwgImV4dCBicmlkZ2UiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfRElT UExBWV9TUExJVDoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImRpc3BsYXkgY29u ZmlnIiwKLQkJCQkJInNwbGl0IGRpc3BsYXkiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfRElTUExB WV9TUExJVF9FWFRfQlJJREdFOgotCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAiZGlz cGxheSBjb25maWciLAotCQkJCQkic3BsaXQgZXh0IGJyaWRnZSIpOwotCQlicmVhazsKLQlkZWZh dWx0OgotCQlwcl9kZWJ1ZygiaW52YWxpZCBkaXNwbGF5IHR5cGU6JWRcbiIsIGRzaV9kaXNwbGF5 LT50eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFkc2lfZGlzcGxheS0+cGFuZWwpIHsKLQkJ cHJfZGVidWcoImludmFsaWQgcGFuZWwgZGF0YVxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXBh bmVsID0gZHNpX2Rpc3BsYXktPnBhbmVsOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8s ICJwYW5lbCBuYW1lIiwgcGFuZWwtPm5hbWUpOwotCi0Jc3dpdGNoIChwYW5lbC0+cGFuZWxfbW9k ZSkgewotCWNhc2UgRFNJX09QX1ZJREVPX01PREU6Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5c3Ry KGluZm8sICJwYW5lbCBtb2RlIiwgInZpZGVvIik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX09QX0NN RF9NT0RFOgotCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgbW9kZSIsICJj b21tYW5kIik7Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtZHBfdHJhbnNmZXJf dGltZV91cyIsCi0JCQkJcGFuZWwtPmNtZF9jb25maWcubWRwX3RyYW5zZmVyX3RpbWVfdXMpOwot CQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9kZWJ1ZygiaW52YWxpZCBwYW5lbCB0eXBlOiVkXG4i LCBwYW5lbC0+cGFuZWxfbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQlkcHVfa21zX2luZm9fYWRkX2tl eXN0cihpbmZvLCAiZGZwcyBzdXBwb3J0IiwKLQkJCXBhbmVsLT5kZnBzX2NhcHMuZGZwc19zdXBw b3J0ID8gInRydWUiIDogImZhbHNlIik7Ci0KLQlpZiAocGFuZWwtPmRmcHNfY2Fwcy5kZnBzX3N1 cHBvcnQpIHsKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1pbl9mcHMiLAotCQkJ cGFuZWwtPmRmcHNfY2Fwcy5taW5fcmVmcmVzaF9yYXRlKTsKLQkJZHB1X2ttc19pbmZvX2FkZF9r ZXlpbnQoaW5mbywgIm1heF9mcHMiLAotCQkJcGFuZWwtPmRmcHNfY2Fwcy5tYXhfcmVmcmVzaF9y YXRlKTsKLQl9Ci0KLQlzd2l0Y2ggKHBhbmVsLT5waHlfcHJvcHMucm90YXRpb24pIHsKLQljYXNl IERTSV9QQU5FTF9ST1RBVEVfTk9ORToKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywg InBhbmVsIG9yaWVudGF0aW9uIiwgIm5vbmUiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUEFORUxf Uk9UQVRFX0hfRkxJUDoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgInBhbmVsIG9y aWVudGF0aW9uIiwgImhvcnogZmxpcCIpOwotCQlicmVhazsKLQljYXNlIERTSV9QQU5FTF9ST1RB VEVfVl9GTElQOgotCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgb3JpZW50 YXRpb24iLCAidmVydCBmbGlwIik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1BBTkVMX1JPVEFURV9I Vl9GTElQOgotCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicGFuZWwgb3JpZW50YXRp b24iLAotCQkJCQkJCSJob3J6ICYgdmVydCBmbGlwIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J CXByX2RlYnVnKCJpbnZhbGlkIHBhbmVsIHJvdGF0aW9uOiVkXG4iLAotCQkJCQkJcGFuZWwtPnBo eV9wcm9wcy5yb3RhdGlvbik7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAocGFuZWwtPmJsX2Nv bmZpZy50eXBlKSB7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX1BXTToKLQkJZHB1X2ttc19pbmZvX2Fk ZF9rZXlzdHIoaW5mbywgImJhY2tsaWdodCB0eXBlIiwgInB3bSIpOwotCQlicmVhazsKLQljYXNl IERTSV9CQUNLTElHSFRfV0xFRDoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImJh Y2tsaWdodCB0eXBlIiwgIndsZWQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX0RD UzoKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImJhY2tsaWdodCB0eXBlIiwgImRj cyIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9kZWJ1ZygiaW52YWxpZCBwYW5lbCBiYWNr bGlnaHQgdHlwZTolZFxuIiwKLQkJCQkJCXBhbmVsLT5ibF9jb25maWcudHlwZSk7Ci0JCWJyZWFr OwotCX0KLQotZW5kOgotCXJldHVybiAwOwotfQotCi1lbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVz IGRzaV9jb25uX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwKLQkJYm9vbCBmb3Jj ZSwKLQkJdm9pZCAqZGlzcGxheSkKLXsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1 cyA9IGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyBp bmZvOwotCWludCByYzsKLQotCWlmICghY29ubiB8fCAhZGlzcGxheSkKLQkJcmV0dXJuIHN0YXR1 czsKLQotCS8qIGdldCBkaXNwbGF5IGRzaV9pbmZvICovCi0JbWVtc2V0KCZpbmZvLCAweDAsIHNp emVvZihpbmZvKSk7Ci0JcmMgPSBkc2lfZGlzcGxheV9nZXRfaW5mbygmaW5mbywgZGlzcGxheSk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBkaXNwbGF5IGluZm8sIHJjPSVk XG4iLCByYyk7Ci0JCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKLQl9Ci0K LQlpZiAoaW5mby5jYXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9DQVBfSE9UX1BMVUcpCi0JCXN0 YXR1cyA9IChpbmZvLmlzX2Nvbm5lY3RlZCA/IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoK LQkJCQkJICAgICAgY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQpOwotCWVsc2UKLQkJc3Rh dHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0KLQljb25uLT5kaXNwbGF5X2luZm8u d2lkdGhfbW0gPSBpbmZvLndpZHRoX21tOwotCWNvbm4tPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0g PSBpbmZvLmhlaWdodF9tbTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQgZHNpX2Nvbm5l Y3Rvcl9wdXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQl2b2lkICpk aXNwbGF5KQotewotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fbW9kZTsKLQlzdHJ1Y3Qg ZHNpX2Rpc3BsYXlfbW9kZSBkc2lfbW9kZTsKLQotCWlmICghY29ubmVjdG9yIHx8ICFkaXNwbGF5 KQotCQlyZXR1cm47Ci0KLQkgbGlzdF9mb3JfZWFjaF9lbnRyeShkcm1fbW9kZSwgJmNvbm5lY3Rv ci0+bW9kZXMsIGhlYWQpIHsKLQkJY29udmVydF90b19kc2lfbW9kZShkcm1fbW9kZSwgJmRzaV9t b2RlKTsKLQkJZHNpX2Rpc3BsYXlfcHV0X21vZGUoZGlzcGxheSwgJmRzaV9tb2RlKTsKLQl9Ci19 Ci0KLWludCBkc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAotCQl2b2lkICpkaXNwbGF5KQotewotCXUzMiBjb3VudCA9IDA7Ci0JdTMyIHNpemUg PSAwOwotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlcyA9IE5VTEw7Ci0Jc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgZHJtX21vZGU7Ci0JaW50IHJjLCBpOwotCi0JaWYgKGRwdV9jb25uZWN0 b3JfZ2V0X3BhbmVsKGNvbm5lY3RvcikpIHsKLQkJLyoKLQkJICogVE9ETzogSWYgZHJtX3BhbmVs IGlzIGF0dGFjaGVkLCBxdWVyeSBtb2RlcyBmcm9tIHRoZSBwYW5lbC4KLQkJICogVGhpcyBpcyBj b21wbGljYXRlZCBpbiBzcGxpdCBkc2kgY2FzZXMgYmVjYXVzZSBwYW5lbCBpcyBub3QKLQkJICog YXR0YWNoZWQgdG8gYm90aCBjb25uZWN0b3JzLgotCQkgKi8KLQkJZ290byBlbmQ7Ci0JfQotCXJj ID0gZHNpX2Rpc3BsYXlfZ2V0X21vZGVfY291bnQoZGlzcGxheSwgJmNvdW50KTsKLQlpZiAocmMp IHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IG51bSBvZiBtb2RlcywgcmM9JWRcbiIsIHJjKTsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQlzaXplID0gY291bnQgKiBzaXplb2YoKm1vZGVzKTsKLQlt b2RlcyA9IGt6YWxsb2Moc2l6ZSwgIEdGUF9LRVJORUwpOwotCWlmICghbW9kZXMpIHsKLQkJY291 bnQgPSAwOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IGRzaV9kaXNwbGF5X2dldF9tb2Rlcyhk aXNwbGF5LCBtb2Rlcyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBtb2Rl cywgcmM9JWRcbiIsIHJjKTsKLQkJY291bnQgPSAwOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWZv ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt OwotCi0JCW1lbXNldCgmZHJtX21vZGUsIDB4MCwgc2l6ZW9mKGRybV9tb2RlKSk7Ci0JCWNvbnZl cnRfdG9fZHJtX21vZGUoJm1vZGVzW2ldLCAmZHJtX21vZGUpOwotCQltID0gZHJtX21vZGVfZHVw bGljYXRlKGNvbm5lY3Rvci0+ZGV2LCAmZHJtX21vZGUpOwotCQlpZiAoIW0pIHsKLQkJCXByX2Vy cigiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1XG4iLAotCQkJICAgICAgIGRybV9tb2RlLmhkaXNw bGF5LAotCQkJICAgICAgIGRybV9tb2RlLnZkaXNwbGF5KTsKLQkJCWNvdW50ID0gLUVOT01FTTsK LQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJbS0+d2lkdGhfbW0gPSBjb25uZWN0b3ItPmRpc3BsYXlf aW5mby53aWR0aF9tbTsKLQkJbS0+aGVpZ2h0X21tID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8u aGVpZ2h0X21tOwotCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbSk7Ci0JfQotZXJy b3I6Ci0Ja2ZyZWUobW9kZXMpOwotZW5kOgotCXByX2RlYnVnKCJNT0RFIENPVU5UID0lZFxuXG4i LCBjb3VudCk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1lbnVtIGRybV9tb2RlX3N0YXR1cyBkc2lf Y29ubl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAotCQl2b2lkICpkaXNwbGF5KQotewotCXN0cnVjdCBk c2lfZGlzcGxheV9tb2RlIGRzaV9tb2RlOwotCWludCByYzsKLQotCWlmICghY29ubmVjdG9yIHx8 ICFtb2RlKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gTU9ERV9F UlJPUjsKLQl9Ci0KLQljb252ZXJ0X3RvX2RzaV9tb2RlKG1vZGUsICZkc2lfbW9kZSk7Ci0KLQly YyA9IGRzaV9kaXNwbGF5X3ZhbGlkYXRlX21vZGUoZGlzcGxheSwgJmRzaV9tb2RlLAotCQkJRFNJ X1ZBTElEQVRFX0ZMQUdfQUxMT1dfQURKVVNUKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJtb2Rl IG5vdCBzdXBwb3J0ZWQsIHJjPSVkXG4iLCByYyk7Ci0JCXJldHVybiBNT0RFX0JBRDsKLQl9Ci0K LQlyZXR1cm4gTU9ERV9PSzsKLX0KLQotaW50IGRzaV9jb25uX3ByZV9raWNrb2ZmKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXZvaWQgKmRpc3BsYXkpCi17Ci0JaWYgKCFjb25u ZWN0b3IgfHwgIWRpc3BsYXkpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiBkc2lfZGlzcGxheV9wcmVfa2lja29mZihkaXNw bGF5KTsKLX0KLQotdm9pZCBkc2lfY29ubl9lbmFibGVfZXZlbnQoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKLQkJdWludDMyX3QgZXZlbnRfaWR4LCBib29sIGVuYWJsZSwgdm9pZCAq ZGlzcGxheSkKLXsKLQlzdHJ1Y3QgZHNpX2V2ZW50X2NiX2luZm8gZXZlbnRfaW5mbzsKLQotCW1l bXNldCgmZXZlbnRfaW5mbywgMCwgc2l6ZW9mKGV2ZW50X2luZm8pKTsKLQotCWV2ZW50X2luZm8u ZXZlbnRfY2IgPSBkcHVfY29ubmVjdG9yX3RyaWdnZXJfZXZlbnQ7Ci0JZXZlbnRfaW5mby5ldmVu dF91c3JfcHRyID0gY29ubmVjdG9yOwotCi0JZHNpX2Rpc3BsYXlfZW5hYmxlX2V2ZW50KGRpc3Bs YXksIGV2ZW50X2lkeCwgJmV2ZW50X2luZm8sIGVuYWJsZSk7Ci19Ci0KLWludCBkc2lfY29ubl9w b3N0X2tpY2tvZmYoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0Jc3RydWN0IGRzaV9icmlkZ2UgKmNfYnJpZGdlOwotCXN0 cnVjdCBkc2lfZGlzcGxheV9tb2RlIGFkal9tb2RlOwotCXN0cnVjdCBkc2lfZGlzcGxheSAqZGlz cGxheTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfY3RybCAqbV9jdHJsLCAqY3RybDsKLQlpbnQgaSwg cmMgPSAwOwotCi0JaWYgKCFjb25uZWN0b3IgfHwgIWNvbm5lY3Rvci0+c3RhdGUtPmJlc3RfZW5j b2RlcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQllbmNvZGVyID0gY29ubmVjdG9yLT5zdGF0ZS0+ YmVzdF9lbmNvZGVyOwotCWNfYnJpZGdlID0gdG9fZHNpX2JyaWRnZShlbmNvZGVyLT5icmlkZ2Up OwotCWFkal9tb2RlID0gY19icmlkZ2UtPmRzaV9tb2RlOwotCWRpc3BsYXkgPSBjX2JyaWRnZS0+ ZGlzcGxheTsKLQotCWlmIChhZGpfbW9kZS5kc2lfbW9kZV9mbGFncyAmIERTSV9NT0RFX0ZMQUdf VlJSKSB7Ci0JCW1fY3RybCA9ICZkaXNwbGF5LT5jdHJsW2Rpc3BsYXktPmNsa19tYXN0ZXJfaWR4 XTsKLQkJcmMgPSBkc2lfY3RybF90aW1pbmdfZGJfdXBkYXRlKG1fY3RybC0+Y3RybCwgZmFsc2Up OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGZwcyB1cGRhdGUgIHJj PSVkXG4iLAotCQkJCWRpc3BsYXktPm5hbWUsIHJjKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9 Ci0KLQkJLyogVXBkYXRlIHRoZSByZXN0IG9mIHRoZSBjb250cm9sbGVycyAqLwotCQlmb3IgKGkg PSAwOyBpIDwgZGlzcGxheS0+Y3RybF9jb3VudDsgaSsrKSB7Ci0JCQljdHJsID0gJmRpc3BsYXkt PmN0cmxbaV07Ci0JCQlpZiAoIWN0cmwtPmN0cmwgfHwgKGN0cmwgPT0gbV9jdHJsKSkKLQkJCQlj b250aW51ZTsKLQotCQkJcmMgPSBkc2lfY3RybF90aW1pbmdfZGJfdXBkYXRlKGN0cmwtPmN0cmws IGZhbHNlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZGZwcyB1 cGRhdGUgcmM9JWRcbiIsCi0JCQkJCWRpc3BsYXktPm5hbWUsICByYyk7Ci0JCQkJcmV0dXJuIC1F SU5WQUw7Ci0JCQl9Ci0JCX0KLQotCQljX2JyaWRnZS0+ZHNpX21vZGUuZHNpX21vZGVfZmxhZ3Mg Jj0gfkRTSV9NT0RFX0ZMQUdfVlJSOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgZHNp X2JyaWRnZSAqZHNpX2RybV9icmlkZ2VfaW5pdChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXks Ci0JCQkJICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfYnJpZGdl ICpicmlkZ2U7Ci0KLQlicmlkZ2UgPSBremFsbG9jKHNpemVvZigqYnJpZGdlKSwgR0ZQX0tFUk5F TCk7Ci0JaWYgKCFicmlkZ2UpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0K LQotCWJyaWRnZS0+ZGlzcGxheSA9IGRpc3BsYXk7Ci0JYnJpZGdlLT5iYXNlLmZ1bmNzID0gJmRz aV9icmlkZ2Vfb3BzOwotCWJyaWRnZS0+YmFzZS5lbmNvZGVyID0gZW5jb2RlcjsKLQotCXJjID0g ZHJtX2JyaWRnZV9hdHRhY2goZW5jb2RlciwgJmJyaWRnZS0+YmFzZSwgTlVMTCk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIGF0dGFjaCBicmlkZ2UsIHJjPSVkXG4iLCByYyk7Ci0J CWdvdG8gZXJyb3JfZnJlZV9icmlkZ2U7Ci0JfQotCi0JZW5jb2Rlci0+YnJpZGdlID0gJmJyaWRn ZS0+YmFzZTsKLQlyZXR1cm4gYnJpZGdlOwotZXJyb3JfZnJlZV9icmlkZ2U6Ci0Ja2ZyZWUoYnJp ZGdlKTsKLWVycm9yOgotCXJldHVybiBFUlJfUFRSKHJjKTsKLX0KLQotdm9pZCBkc2lfZHJtX2Jy aWRnZV9jbGVhbnVwKHN0cnVjdCBkc2lfYnJpZGdlICpicmlkZ2UpCi17Ci0JaWYgKGJyaWRnZSAm JiBicmlkZ2UtPmJhc2UuZW5jb2RlcikKLQkJYnJpZGdlLT5iYXNlLmVuY29kZXItPmJyaWRnZSA9 IE5VTEw7Ci0KLQlrZnJlZShicmlkZ2UpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfZHJtLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFn aW5nL2RzaV9kcm0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkZTMzYy4uMDAw MDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9kcm0uaAorKysg L2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Ci0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9EUk1fSF8KLSNkZWZpbmUgX0RTSV9EUk1fSF8KLQot I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRl IDxkcm0vZHJtX2NydGMuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Ci0KLSNp bmNsdWRlICJtc21fZHJ2LmgiCi0KLSNpbmNsdWRlICJkc2lfZGlzcGxheS5oIgotCi1zdHJ1Y3Qg ZHNpX2JyaWRnZSB7Ci0Jc3RydWN0IGRybV9icmlkZ2UgYmFzZTsKLQl1MzIgaWQ7Ci0KLQlzdHJ1 Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXk7Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgZHNpX21v ZGU7Ci19OwotCi0vKioKLSAqIGRzaV9jb25uX3Bvc3RfaW5pdCAtIGNhbGxiYWNrIHRvIHBlcmZv cm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBzdGVwcwotICogQGNvbm5lY3RvcjogUG9pbnRl ciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGluZm86IFBvaW50ZXIgdG8gZHB1IGNv bm5lY3RvciBpbmZvIHN0cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBk aXNwbGF5IGhhbmRsZQotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBkc2lf Y29ubl9wb3N0X2luaXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJdm9pZCAq aW5mbywKLQkJdm9pZCAqZGlzcGxheSk7Ci0KLS8qKgotICogZHNpX2Nvbm5fZGV0ZWN0IC0gY2Fs bGJhY2sgdG8gZGV0ZXJtaW5lIGlmIGNvbm5lY3RvciBpcyBjb25uZWN0ZWQKLSAqIEBjb25uZWN0 b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBmb3JjZTogRm9yY2Ug ZGV0ZWN0IHNldHRpbmcgZnJvbSBkcm0gZnJhbWV3b3JrCi0gKiBAZGlzcGxheTogUG9pbnRlciB0 byBwcml2YXRlIGRpc3BsYXkgaGFuZGxlCi0gKiBSZXR1cm5zOiBDb25uZWN0b3IgJ2lzIGNvbm5l Y3RlZCcgc3RhdHVzCi0gKi8KLWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgZHNpX2Nvbm5fZGV0 ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAotCQlib29sIGZvcmNlLAotCQl2b2lkICpk aXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfY29ubmVjdG9yX2dldF9tb2RlcyAtIGNhbGxiYWNrIHRv IGFkZCBkcm0gbW9kZXMgdmlhIGRybV9tb2RlX3Byb2JlZF9hZGQoKQotICogQGNvbm5lY3Rvcjog UG9pbnRlciB0byBkcm0gY29ubmVjdG9yIHN0cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIg dG8gcHJpdmF0ZSBkaXNwbGF5IGhhbmRsZQotICogUmV0dXJuczogTnVtYmVyIG9mIG1vZGVzIGFk ZGVkCi0gKi8KLWludCBkc2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLAotCQl2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfY29ubmVjdG9y X3B1dF9tb2RlcyAtIGNhbGxiYWNrIHRvIGZyZWUgdXAgZHJtIG1vZGVzIG9mIHRoZSBjb25uZWN0 b3IKLSAqIEBjb25uZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAq IEBkaXNwbGF5OiBQb2ludGVyIHRvIHByaXZhdGUgZGlzcGxheSBoYW5kbGUKLSAqLwotdm9pZCBk c2lfY29ubmVjdG9yX3B1dF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAot CXZvaWQgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRzaV9jb25uX2dldF9tb2RlX2luZm8gLSByZXRy aWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kZSBzZWxlY3RlZAotICogQGRybV9tb2RlOiBEaXNw bGF5IG1vZGUgc2V0IGZvciB0aGUgZGlzcGxheQotICogQG1vZGVfaW5mbzogT3V0IHBhcmFtZXRl ci4gaW5mb3JtYXRpb24gb2YgdGhlIG1vZGUuCi0gKiBAbWF4X21peGVyX3dpZHRoOiBtYXggd2lk dGggc3VwcG9ydGVkIGJ5IEhXIGxheWVyIG1peGVyCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nl c3MKLSAqLwotaW50IGRzaV9jb25uX2dldF9tb2RlX2luZm8oY29uc3Qgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmRybV9tb2RlLAotCXN0cnVjdCBtc21fbW9kZV9pbmZvICptb2RlX2luZm8sIHUz MiBtYXhfbWl4ZXJfd2lkdGgpOwotCi0vKioKLSAqIGRzaV9jb25uX21vZGVfdmFsaWQgLSBjYWxs YmFjayB0byBkZXRlcm1pbmUgaWYgc3BlY2lmaWVkIG1vZGUgaXMgdmFsaWQKLSAqIEBjb25uZWN0 b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIEBtb2RlOiBQb2ludGVy IHRvIGRybSBtb2RlIHN0cnVjdHVyZQotICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBk aXNwbGF5IGhhbmRsZQotICogUmV0dXJuczogVmFsaWRpdHkgc3RhdHVzIGZvciBzcGVjaWZpZWQg bW9kZQotICovCi1lbnVtIGRybV9tb2RlX3N0YXR1cyBkc2lfY29ubl9tb2RlX3ZhbGlkKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlLAotCQl2b2lkICpkaXNwbGF5KTsKLQotLyoqCi0gKiBkc2lfY29ubl9lbmFibGVfZXZlbnQg LSBjYWxsYmFjayB0byBub3RpZnkgRFNJIGRyaXZlciBvZiBldmVudCByZWdpc3RlcmF0aW9uCi0g KiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAZXZl bnRfaWR4OiBDb25uZWN0b3IgZXZlbnQgaW5kZXgKLSAqIEBlbmFibGU6IFdoZXRoZXIgb3Igbm90 IHRoZSBldmVudCBpcyBlbmFibGVkCi0gKiBAZGlzcGxheTogUG9pbnRlciB0byBwcml2YXRlIGRp c3BsYXkgaGFuZGxlCi0gKi8KLXZvaWQgZHNpX2Nvbm5fZW5hYmxlX2V2ZW50KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCi0JCXVpbnQzMl90IGV2ZW50X2lkeCwgYm9vbCBlbmFibGUs IHZvaWQgKmRpc3BsYXkpOwotCi1zdHJ1Y3QgZHNpX2JyaWRnZSAqZHNpX2RybV9icmlkZ2VfaW5p dChzdHJ1Y3QgZHNpX2Rpc3BsYXkgKmRpc3BsYXksCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Ci0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7Ci0KLXZvaWQgZHNpX2RybV9icmlkZ2Vf Y2xlYW51cChzdHJ1Y3QgZHNpX2JyaWRnZSAqYnJpZGdlKTsKLQotLyoqCi0gKiBkc2lfZGlzcGxh eV9wcmVfa2lja29mZiAtIHByb2dyYW0ga2lja29mZi10aW1lIGZlYXR1cmVzCi0gKiBAY29ubmVj dG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCi0gKiBAZGlzcGxheTogUG9p bnRlciB0byBwcml2YXRlIGRpc3BsYXkgc3RydWN0dXJlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1 Y2Nlc3MKLSAqLwotaW50IGRzaV9jb25uX3ByZV9raWNrb2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCi0JCXZvaWQgKmRpc3BsYXkpOwotCi0vKioKLSAqIGRzaV9kaXNwbGF5X3Bv c3Rfa2lja29mZiAtIHByb2dyYW0gcG9zdCBraWNrb2ZmLXRpbWUgZmVhdHVyZXMKLSAqIEBjb25u ZWN0b3I6IFBvaW50ZXIgdG8gZHJtIGNvbm5lY3RvciBzdHJ1Y3R1cmUKLSAqIFJldHVybnM6IFpl cm8gb24gc3VjY2VzcwotICovCi1pbnQgZHNpX2Nvbm5fcG9zdF9raWNrb2ZmKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpOwotCi0jZW5kaWYgLyogX0RTSV9EUk1fSF8gKi8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX2h3LmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9ody5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA5NTBhMDAxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0 YWdpbmcvZHNpX2h3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29w eXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lv biAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9IV19IXwotI2RlZmlu ZSBfRFNJX0hXX0hfCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2RlZmluZSBEU0lfUjMyKGRz aV9odywgb2ZmKSByZWFkbF9yZWxheGVkKChkc2lfaHcpLT5iYXNlICsgKG9mZikpCi0jZGVmaW5l IERTSV9XMzIoZHNpX2h3LCBvZmYsIHZhbCkgXAotCWRvIHtcCi0JCXByX2RlYnVnKCJbRFNJXyVk XVslc10gLSBbMHglMDh4XVxuIiwgXAotCQkJKGRzaV9odyktPmluZGV4LCAjb2ZmLCAodWludDMy X3QpKHZhbCkpOyBcCi0JCXdyaXRlbF9yZWxheGVkKCh2YWwpLCAoZHNpX2h3KS0+YmFzZSArIChv ZmYpKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFNJX01NU1NfTUlTQ19SMzIoZHNpX2h3 LCBvZmYpIFwKLQlyZWFkbF9yZWxheGVkKChkc2lfaHcpLT5tbXNzX21pc2NfYmFzZSArIChvZmYp KQotI2RlZmluZSBEU0lfTU1TU19NSVNDX1czMihkc2lfaHcsIG9mZiwgdmFsKSBcCi0JZG8ge1wK LQkJcHJfZGVidWcoIltEU0lfJWRdWyVzXSAtIFsweCUwOHhdXG4iLCBcCi0JCQkoZHNpX2h3KS0+ aW5kZXgsICNvZmYsIHZhbCk7IFwKLQkJd3JpdGVsX3JlbGF4ZWQoKHZhbCksIChkc2lfaHcpLT5t bXNzX21pc2NfYmFzZSArIChvZmYpKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFNJX0RJ U1BfQ0NfUjMyKGRzaV9odywgb2ZmKSBcCi0JcmVhZGxfcmVsYXhlZCgoZHNpX2h3KS0+ZGlzcF9j Y19iYXNlICsgKG9mZikpCi0jZGVmaW5lIERTSV9ESVNQX0NDX1czMihkc2lfaHcsIG9mZiwgdmFs KSBcCi0JZG8ge1wKLQkJcHJfZGVidWcoIltEU0lfJWRdWyVzXSAtIFsweCUwOHhdXG4iLCBcCi0J CQkoZHNpX2h3KS0+aW5kZXgsICNvZmYsIHZhbCk7IFwKLQkJd3JpdGVsX3JlbGF4ZWQoKHZhbCks IChkc2lfaHcpLT5kaXNwX2NjX2Jhc2UgKyAob2ZmKSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVm aW5lIERTSV9SNjQoZHNpX2h3LCBvZmYpIHJlYWRxX3JlbGF4ZWQoKGRzaV9odyktPmJhc2UgKyAo b2ZmKSkKLSNkZWZpbmUgRFNJX1c2NChkc2lfaHcsIG9mZiwgdmFsKSB3cml0ZXFfcmVsYXhlZCgo dmFsKSwgKGRzaV9odyktPmJhc2UgKyAob2ZmKSkKLQotI2VuZGlmIC8qIF9EU0lfSFdfSF8gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wYW5lbC5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAyZTc3N2Y4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIxICsw LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBw cl9mbXQoZm10KQkibXNtLWRzaS1wYW5lbDpbJXM6JWRdICIgZm10LCBfX2Z1bmNfXywgX19MSU5F X18KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNp bmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgotI2luY2x1 ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgotCi0jaW5jbHVkZSAiZHNpX3BhbmVsLmgiCi0jaW5j bHVkZSAiZHNpX2N0cmxfaHcuaCIKLQotLyoqCi0gKiB0b3BvbG9neSBpcyBjdXJyZW50bHkgZGVm aW5lZCBieSBhIHNldCBvZiBmb2xsb3dpbmcgMyB2YWx1ZXM6Ci0gKiAxLiBudW0gb2YgbGF5ZXIg bWl4ZXJzCi0gKiAyLiBudW0gb2YgY29tcHJlc3Npb24gZW5jb2RlcnMKLSAqIDMuIG51bSBvZiBp bnRlcmZhY2VzCi0gKi8KLSNkZWZpbmUgVE9QT0xPR1lfU0VUX0xFTiAzCi0jZGVmaW5lIE1BWF9U T1BPTE9HWSA1Ci0KLSNkZWZpbmUgRFNJX1BBTkVMX0RFRkFVTFRfTEFCRUwgICJEZWZhdWx0IGRz aSBwYW5lbCIKLQotI2RlZmluZSBERUZBVUxUX01EUF9UUkFOU0ZFUl9USU1FIDE0MDAwCi0KLSNk ZWZpbmUgREVGQVVMVF9QQU5FTF9KSVRURVJfTlVNRVJBVE9SCQkyCi0jZGVmaW5lIERFRkFVTFRf UEFORUxfSklUVEVSX0RFTk9NSU5BVE9SCTEKLSNkZWZpbmUgREVGQVVMVF9QQU5FTF9KSVRURVJf QVJSQVlfU0laRQkJMgotI2RlZmluZSBNQVhfUEFORUxfSklUVEVSCQkxMAotI2RlZmluZSBERUZB VUxUX1BBTkVMX1BSRUZJTExfTElORVMJMjUKLQotZW51bSBkc2lfZHNjX3JhdGlvX3R5cGUgewot CURTQ184QlBDXzhCUFAsCi0JRFNDXzEwQlBDXzhCUFAsCi0JRFNDXzEyQlBDXzhCUFAsCi0JRFND X1JBVElPX1RZUEVfTUFYCi19OwotCi1zdGF0aWMgdTMyIGRzaV9kc2NfcmNfYnVmX3RocmVzaFtd ID0gezB4MGUsIDB4MWMsIDB4MmEsIDB4MzgsIDB4NDYsIDB4NTQsCi0JCTB4NjIsIDB4NjksIDB4 NzAsIDB4NzcsIDB4NzksIDB4N2IsIDB4N2QsIDB4N2V9OwotCi0vKgotICogRFNDIDEuMQotICog UmF0ZSBjb250cm9sIC0gTWluIFFQIHZhbHVlcyBmb3IgZWFjaCByYXRpbyB0eXBlIGluIGRzaV9k c2NfcmF0aW9fdHlwZQotICovCi1zdGF0aWMgY2hhciBkc2lfZHNjX3JjX3JhbmdlX21pbl9xcF8x XzFbXVsxNV0gPSB7Ci0JezAsIDAsIDEsIDEsIDMsIDMsIDMsIDMsIDMsIDMsIDUsIDUsIDUsIDcs IDEzfSwKLQl7MCwgNCwgNSwgNSwgNywgNywgNywgNywgNywgNywgOSwgOSwgOSwgMTEsIDE3fSwK LQl7MCwgNCwgOSwgOSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTMsIDEzLCAxMywgMTUsIDIx fSwKLQl9OwotCi0vKgotICogRFNDIDEuMSBTQ1IKLSAqIFJhdGUgY29udHJvbCAtIE1pbiBRUCB2 YWx1ZXMgZm9yIGVhY2ggcmF0aW8gdHlwZSBpbiBkc2lfZHNjX3JhdGlvX3R5cGUKLSAqLwotc3Rh dGljIGNoYXIgZHNpX2RzY19yY19yYW5nZV9taW5fcXBfMV8xX3NjcjFbXVsxNV0gPSB7Ci0JezAs IDAsIDEsIDEsIDMsIDMsIDMsIDMsIDMsIDMsIDUsIDUsIDUsIDksIDEyfSwKLQl7MCwgNCwgNSwg NSwgNywgNywgNywgNywgNywgNywgOSwgOSwgOSwgMTMsIDE2fSwKLQl7MCwgNCwgOSwgOSwgMTEs IDExLCAxMSwgMTEsIDExLCAxMSwgMTMsIDEzLCAxMywgMTcsIDIwfSwKLQl9OwotCi0vKgotICog RFNDIDEuMQotICogUmF0ZSBjb250cm9sIC0gTWF4IFFQIHZhbHVlcyBmb3IgZWFjaCByYXRpbyB0 eXBlIGluIGRzaV9kc2NfcmF0aW9fdHlwZQotICovCi1zdGF0aWMgY2hhciBkc2lfZHNjX3JjX3Jh bmdlX21heF9xcF8xXzFbXVsxNV0gPSB7Ci0JezQsIDQsIDUsIDYsIDcsIDcsIDcsIDgsIDksIDEw LCAxMSwgMTIsIDEzLCAxMywgMTV9LAotCXs4LCA4LCA5LCAxMCwgMTEsIDExLCAxMSwgMTIsIDEz LCAxNCwgMTUsIDE2LCAxNywgMTcsIDE5fSwKLQl7MTIsIDEyLCAxMywgMTQsIDE1LCAxNSwgMTUs IDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIxLCAyM30sCi0JfTsKLQotLyoKLSAqIERTQyAxLjEg U0NSCi0gKiBSYXRlIGNvbnRyb2wgLSBNYXggUVAgdmFsdWVzIGZvciBlYWNoIHJhdGlvIHR5cGUg aW4gZHNpX2RzY19yYXRpb190eXBlCi0gKi8KLXN0YXRpYyBjaGFyIGRzaV9kc2NfcmNfcmFuZ2Vf bWF4X3FwXzFfMV9zY3IxW11bMTVdID0gewotCXs0LCA0LCA1LCA2LCA3LCA3LCA3LCA4LCA5LCAx MCwgMTAsIDExLCAxMSwgMTIsIDEzfSwKLQl7OCwgOCwgOSwgMTAsIDExLCAxMSwgMTEsIDEyLCAx MywgMTQsIDE0LCAxNSwgMTUsIDE2LCAxN30sCi0JezEyLCAxMiwgMTMsIDE0LCAxNSwgMTUsIDE1 LCAxNiwgMTcsIDE4LCAxOCwgMTksIDE5LCAyMCwgMjF9LAotCX07Ci0KLS8qCi0gKiBEU0MgMS4x IGFuZCBEU0MgMS4xIFNDUgotICogUmF0ZSBjb250cm9sIC0gYnBnIG9mZnNldCB2YWx1ZXMKLSAq Lwotc3RhdGljIGNoYXIgZHNpX2RzY19yY19yYW5nZV9icGdfb2Zmc2V0W10gPSB7MiwgMCwgMCwg LTIsIC00LCAtNiwgLTgsIC04LAotCQktOCwgLTEwLCAtMTAsIC0xMiwgLTEyLCAtMTIsIC0xMn07 Ci0KLWludCBkc2lfZHNjX2NyZWF0ZV9wcHNfYnVmX2NtZChzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNj X2luZm8gKmRzYywgY2hhciAqYnVmLAotCQkJCWludCBwcHNfaWQpCi17Ci0JY2hhciAqYnA7Ci0J Y2hhciBkYXRhOwotCWludCBpLCBicHA7Ci0JY2hhciAqZGJnYnA7Ci0KLQlkYmdicCA9IGJ1ZjsK LQlicCA9IGJ1ZjsKLQkvKiBGaXJzdCA3IGJ5dGVzIGFyZSBjbWQgaGVhZGVyICovCi0JKmJwKysg PSAweDBBOwotCSpicCsrID0gMTsKLQkqYnArKyA9IDA7Ci0JKmJwKysgPSAwOwotCSpicCsrID0g MTA7Ci0JKmJwKysgPSAwOwotCSpicCsrID0gMTI4OwotCi0JKmJwKysgPSAoZHNjLT52ZXJzaW9u ICYgMHhmZik7CQkvKiBwcHMwICovCi0JKmJwKysgPSAocHBzX2lkICYgMHhmZik7CQkvKiBwcHMx ICovCi0JYnArKzsJCQkJCS8qIHBwczIsIHJlc2VydmVkICovCi0KLQlkYXRhID0gZHNjLT5saW5l X2J1Zl9kZXB0aCAmIDB4MGY7Ci0JZGF0YSB8PSAoKGRzYy0+YnBjICYgMHhmKSA8PCA0KTsKLQkq YnArKyA9IGRhdGE7CQkJCS8qIHBwczMgKi8KLQotCWJwcCA9IGRzYy0+YnBwOwotCWJwcCA8PD0g NDsJCQkJLyogNCBmcmFjdGlvbiBiaXRzICovCi0JZGF0YSA9IChicHAgPj4gOCk7Ci0JZGF0YSAm PSAweDAzOwkJCQkvKiB1cHBlciB0d28gYml0cyAqLwotCWRhdGEgfD0gKChkc2MtPmJsb2NrX3By ZWRfZW5hYmxlICYgMHgxKSA8PCA1KTsKLQlkYXRhIHw9ICgoZHNjLT5jb252ZXJ0X3JnYiAmIDB4 MSkgPDwgNCk7Ci0JZGF0YSB8PSAoKGRzYy0+ZW5hYmxlXzQyMiAmIDB4MSkgPDwgMyk7Ci0JZGF0 YSB8PSAoKGRzYy0+dmJyX2VuYWJsZSAmIDB4MSkgPDwgMik7Ci0JKmJwKysgPSBkYXRhOwkJCQkv KiBwcHM0ICovCi0JKmJwKysgPSAoYnBwICYgMHhmZik7CQkJLyogcHBzNSAqLwotCi0JKmJwKysg PSAoKGRzYy0+cGljX2hlaWdodCA+PiA4KSAmIDB4ZmYpOyAvKiBwcHM2ICovCi0JKmJwKysgPSAo ZHNjLT5waWNfaGVpZ2h0ICYgMHgwZmYpOwkvKiBwcHM3ICovCi0JKmJwKysgPSAoKGRzYy0+cGlj X3dpZHRoID4+IDgpICYgMHhmZik7CS8qIHBwczggKi8KLQkqYnArKyA9IChkc2MtPnBpY193aWR0 aCAmIDB4MGZmKTsJLyogcHBzOSAqLwotCi0JKmJwKysgPSAoKGRzYy0+c2xpY2VfaGVpZ2h0ID4+ IDgpICYgMHhmZik7LyogcHBzMTAgKi8KLQkqYnArKyA9IChkc2MtPnNsaWNlX2hlaWdodCAmIDB4 MGZmKTsJLyogcHBzMTEgKi8KLQkqYnArKyA9ICgoZHNjLT5zbGljZV93aWR0aCA+PiA4KSAmIDB4 ZmYpOyAvKiBwcHMxMiAqLwotCSpicCsrID0gKGRzYy0+c2xpY2Vfd2lkdGggJiAweDBmZik7CS8q IHBwczEzICovCi0KLQkqYnArKyA9ICgoZHNjLT5jaHVua19zaXplID4+IDgpICYgMHhmZik7Lyog cHBzMTQgKi8KLQkqYnArKyA9IChkc2MtPmNodW5rX3NpemUgJiAweDBmZik7CS8qIHBwczE1ICov Ci0KLQkqYnArKyA9IChkc2MtPmluaXRpYWxfeG1pdF9kZWxheSA+PiA4KSAmIDB4MzsgLyogcHBz MTYsIGJpdCAwLCAxICovCi0JKmJwKysgPSAoZHNjLT5pbml0aWFsX3htaXRfZGVsYXkgJiAweGZm KTsvKiBwcHMxNyAqLwotCi0JKmJwKysgPSAoKGRzYy0+aW5pdGlhbF9kZWNfZGVsYXkgPj4gOCkg JiAweGZmKTsgLyogcHBzMTggKi8KLQkqYnArKyA9IChkc2MtPmluaXRpYWxfZGVjX2RlbGF5ICYg MHhmZik7LyogcHBzMTkgKi8KLQotCWJwKys7CQkJCQkvKiBwcHMyMCwgcmVzZXJ2ZWQgKi8KLQot CSpicCsrID0gKGRzYy0+aW5pdGlhbF9zY2FsZV92YWx1ZSAmIDB4M2YpOyAvKiBwcHMyMSAqLwot Ci0JKmJwKysgPSAoKGRzYy0+c2NhbGVfaW5jcmVtZW50X2ludGVydmFsID4+IDgpICYgMHhmZik7 IC8qIHBwczIyICovCi0JKmJwKysgPSAoZHNjLT5zY2FsZV9pbmNyZW1lbnRfaW50ZXJ2YWwgJiAw eGZmKTsgLyogcHBzMjMgKi8KLQotCSpicCsrID0gKChkc2MtPnNjYWxlX2RlY3JlbWVudF9pbnRl cnZhbCA+PiA4KSAmIDB4Zik7IC8qIHBwczI0ICovCi0JKmJwKysgPSAoZHNjLT5zY2FsZV9kZWNy ZW1lbnRfaW50ZXJ2YWwgJiAweDBmZik7LyogcHBzMjUgKi8KLQotCWJwKys7CQkJCQkvKiBwcHMy NiwgcmVzZXJ2ZWQgKi8KLQotCSpicCsrID0gKGRzYy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0ICYg MHgxZik7LyogcHBzMjcgKi8KLQotCSpicCsrID0gKChkc2MtPm5mbF9icGdfb2Zmc2V0ID4+IDgp ICYgMHhmZik7LyogcHBzMjggKi8KLQkqYnArKyA9IChkc2MtPm5mbF9icGdfb2Zmc2V0ICYgMHgw ZmYpOwkvKiBwcHMyOSAqLwotCSpicCsrID0gKChkc2MtPnNsaWNlX2JwZ19vZmZzZXQgPj4gOCkg JiAweGZmKTsvKiBwcHMzMCAqLwotCSpicCsrID0gKGRzYy0+c2xpY2VfYnBnX29mZnNldCAmIDB4 MGZmKTsvKiBwcHMzMSAqLwotCi0JKmJwKysgPSAoKGRzYy0+aW5pdGlhbF9vZmZzZXQgPj4gOCkg JiAweGZmKTsvKiBwcHMzMiAqLwotCSpicCsrID0gKGRzYy0+aW5pdGlhbF9vZmZzZXQgJiAweDBm Zik7CS8qIHBwczMzICovCi0KLQkqYnArKyA9ICgoZHNjLT5maW5hbF9vZmZzZXQgPj4gOCkgJiAw eGZmKTsvKiBwcHMzNCAqLwotCSpicCsrID0gKGRzYy0+ZmluYWxfb2Zmc2V0ICYgMHgwZmYpOwkv KiBwcHMzNSAqLwotCi0JKmJwKysgPSAoZHNjLT5taW5fcXBfZmxhdG5lc3MgJiAweDFmKTsJLyog cHBzMzYgKi8KLQkqYnArKyA9IChkc2MtPm1heF9xcF9mbGF0bmVzcyAmIDB4MWYpOwkvKiBwcHMz NyAqLwotCi0JKmJwKysgPSAoKGRzYy0+cmNfbW9kZWxfc2l6ZSA+PiA4KSAmIDB4ZmYpOy8qIHBw czM4ICovCi0JKmJwKysgPSAoZHNjLT5yY19tb2RlbF9zaXplICYgMHgwZmYpOwkvKiBwcHMzOSAq LwotCi0JKmJwKysgPSAoZHNjLT5lZGdlX2ZhY3RvciAmIDB4MGYpOwkvKiBwcHM0MCAqLwotCi0J KmJwKysgPSAoZHNjLT5xdWFudF9pbmNyX2xpbWl0MCAmIDB4MWYpOwkvKiBwcHM0MSAqLwotCSpi cCsrID0gKGRzYy0+cXVhbnRfaW5jcl9saW1pdDEgJiAweDFmKTsJLyogcHBzNDIgKi8KLQotCWRh dGEgPSAoKGRzYy0+dGd0X29mZnNldF9oaSAmIDB4ZikgPDwgNCk7Ci0JZGF0YSB8PSAoZHNjLT50 Z3Rfb2Zmc2V0X2xvICYgMHgwZik7Ci0JKmJwKysgPSBkYXRhOwkJCQkvKiBwcHM0MyAqLwotCi0J Zm9yIChpID0gMDsgaSA8IDE0OyBpKyspCi0JCSpicCsrID0gKGRzYy0+YnVmX3RocmVzaFtpXSAm IDB4ZmYpOyAvKiBwcHM0NCAtIHBwczU3ICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykg ewkJLyogcHBzNTggLSBwcHM4NyAqLwotCQlkYXRhID0gKGRzYy0+cmFuZ2VfbWluX3FwW2ldICYg MHgxZik7Ci0JCWRhdGEgPDw9IDM7Ci0JCWRhdGEgfD0gKChkc2MtPnJhbmdlX21heF9xcFtpXSA+ PiAyKSAmIDB4MDcpOwotCQkqYnArKyA9IGRhdGE7Ci0JCWRhdGEgPSAoZHNjLT5yYW5nZV9tYXhf cXBbaV0gJiAweDAzKTsKLQkJZGF0YSA8PD0gNjsKLQkJZGF0YSB8PSAoZHNjLT5yYW5nZV9icGdf b2Zmc2V0W2ldICYgMHgzZik7Ci0JCSpicCsrID0gZGF0YTsKLQl9Ci0KLQlyZXR1cm4gMTI4Owot fQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF92cmVnX2dldChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCXN0cnVjdCByZWd1bGF0b3IgKnZyZWcgPSBO VUxMOwotCi0JZm9yIChpID0gMDsgaSA8IHBhbmVsLT5wb3dlcl9pbmZvLmNvdW50OyBpKyspIHsK LQkJdnJlZyA9IGRldm1fcmVndWxhdG9yX2dldChwYW5lbC0+cGFyZW50LAotCQkJCQkgIHBhbmVs LT5wb3dlcl9pbmZvLnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCXJjID0gUFRSX1JFVCh2cmVnKTsK LQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgJXMgcmVndWxhdG9yXG4iLAot CQkJICAgICAgIHBhbmVsLT5wb3dlcl9pbmZvLnZyZWdzW2ldLnZyZWdfbmFtZSk7Ci0JCQlnb3Rv IGVycm9yX3B1dDsKLQkJfQotCQlwYW5lbC0+cG93ZXJfaW5mby52cmVnc1tpXS52cmVnID0gdnJl ZzsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci1lcnJvcl9wdXQ6Ci0JZm9yIChpID0gaSAtIDE7IGkgPj0g MDsgaS0tKSB7Ci0JCWRldm1fcmVndWxhdG9yX3B1dChwYW5lbC0+cG93ZXJfaW5mby52cmVnc1tp XS52cmVnKTsKLQkJcGFuZWwtPnBvd2VyX2luZm8udnJlZ3NbaV0udnJlZyA9IE5VTEw7Ci0JfQot CXJldHVybiAtRVBST0JFX0RFRkVSOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF92cmVnX3B1 dChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCWludCBpOwotCi0J Zm9yIChpID0gcGFuZWwtPnBvd2VyX2luZm8uY291bnQgLSAxOyBpID49IDA7IGktLSkKLQkJZGV2 bV9yZWd1bGF0b3JfcHV0KHBhbmVsLT5wb3dlcl9pbmZvLnZyZWdzW2ldLnZyZWcpOwotCi0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9ncGlvX3JlcXVlc3Qoc3RydWN0IGRz aV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3BhbmVsX3Jlc2V0 X2NvbmZpZyAqcl9jb25maWcgPSAmcGFuZWwtPnJlc2V0X2NvbmZpZzsKLQotCWlmIChncGlvX2lz X3ZhbGlkKHJfY29uZmlnLT5yZXNldF9ncGlvKSkgewotCQlyYyA9IGdwaW9fcmVxdWVzdChyX2Nv bmZpZy0+cmVzZXRfZ3BpbywgInJlc2V0X2dwaW8iKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIo InJlcXVlc3QgZm9yIHJlc2V0X2dwaW8gZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQkJZ290byBl cnJvcjsKLQkJfQotCX0KLQotCWlmIChncGlvX2lzX3ZhbGlkKHJfY29uZmlnLT5kaXNwX2VuX2dw aW8pKSB7Ci0JCXJjID0gZ3Bpb19yZXF1ZXN0KHJfY29uZmlnLT5kaXNwX2VuX2dwaW8sICJkaXNw X2VuX2dwaW8iKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInJlcXVlc3QgZm9yIGRpc3BfZW5f Z3BpbyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX3JlbGVhc2VfcmVzZXQ7 Ci0JCX0KLQl9Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8p KSB7Ci0JCXJjID0gZ3Bpb19yZXF1ZXN0KHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgImJrbHRf ZW5fZ3BpbyIpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigicmVxdWVzdCBmb3IgYmtsdF9lbl9n cGlvIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3JfcmVsZWFzZV9kaXNwX2Vu OwotCQl9Ci0JfQotCi0JaWYgKGdwaW9faXNfdmFsaWQocl9jb25maWctPmxjZF9tb2RlX3NlbF9n cGlvKSkgewotCQlyYyA9IGdwaW9fcmVxdWVzdChyX2NvbmZpZy0+bGNkX21vZGVfc2VsX2dwaW8s ICJtb2RlX2dwaW8iKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInJlcXVlc3QgZm9yIG1vZGVf Z3BpbyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yX3JlbGVhc2VfbW9kZV9z ZWw7Ci0JCX0KLQl9Ci0KLQlnb3RvIGVycm9yOwotZXJyb3JfcmVsZWFzZV9tb2RlX3NlbDoKLQlp ZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKQotCQlncGlvX2ZyZWUo cGFuZWwtPmJsX2NvbmZpZy5lbl9ncGlvKTsKLWVycm9yX3JlbGVhc2VfZGlzcF9lbjoKLQlpZiAo Z3Bpb19pc192YWxpZChyX2NvbmZpZy0+ZGlzcF9lbl9ncGlvKSkKLQkJZ3Bpb19mcmVlKHJfY29u ZmlnLT5kaXNwX2VuX2dwaW8pOwotZXJyb3JfcmVsZWFzZV9yZXNldDoKLQlpZiAoZ3Bpb19pc192 YWxpZChyX2NvbmZpZy0+cmVzZXRfZ3BpbykpCi0JCWdwaW9fZnJlZShyX2NvbmZpZy0+cmVzZXRf Z3Bpbyk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2dw aW9fcmVsZWFzZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0 cnVjdCBkc2lfcGFuZWxfcmVzZXRfY29uZmlnICpyX2NvbmZpZyA9ICZwYW5lbC0+cmVzZXRfY29u ZmlnOwotCi0JaWYgKGdwaW9faXNfdmFsaWQocl9jb25maWctPnJlc2V0X2dwaW8pKQotCQlncGlv X2ZyZWUocl9jb25maWctPnJlc2V0X2dwaW8pOwotCi0JaWYgKGdwaW9faXNfdmFsaWQocl9jb25m aWctPmRpc3BfZW5fZ3BpbykpCi0JCWdwaW9fZnJlZShyX2NvbmZpZy0+ZGlzcF9lbl9ncGlvKTsK LQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbykpCi0JCWdwaW9f ZnJlZShwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pOwotCi0JaWYgKGdwaW9faXNfdmFsaWQocGFu ZWwtPnJlc2V0X2NvbmZpZy5sY2RfbW9kZV9zZWxfZ3BpbykpCi0JCWdwaW9fZnJlZShwYW5lbC0+ cmVzZXRfY29uZmlnLmxjZF9tb2RlX3NlbF9ncGlvKTsKLQotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfcGFuZWxfcmVzZXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50 IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3BhbmVsX3Jlc2V0X2NvbmZpZyAqcl9jb25maWcgPSAmcGFu ZWwtPnJlc2V0X2NvbmZpZzsKLQlpbnQgaTsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5y ZXNldF9jb25maWcuZGlzcF9lbl9ncGlvKSkgewotCQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1 dChwYW5lbC0+cmVzZXRfY29uZmlnLmRpc3BfZW5fZ3BpbywgMSk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJ1bmFibGUgdG8gc2V0IGRpciBmb3IgZGlzcCBncGlvIHJjPSVkXG4iLCByYyk7Ci0J CQlnb3RvIGV4aXQ7Ci0JCX0KLQl9Ci0KLQlpZiAocl9jb25maWctPmNvdW50KSB7Ci0JCXJjID0g Z3Bpb19kaXJlY3Rpb25fb3V0cHV0KHJfY29uZmlnLT5yZXNldF9ncGlvLAotCQkJcl9jb25maWct PnNlcXVlbmNlWzBdLmxldmVsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoInVuYWJsZSB0byBz ZXQgZGlyIGZvciByc3QgZ3BpbyByYz0lZFxuIiwgcmMpOwotCQkJZ290byBleGl0OwotCQl9Ci0J fQotCi0JZm9yIChpID0gMDsgaSA8IHJfY29uZmlnLT5jb3VudDsgaSsrKSB7Ci0JCWdwaW9fc2V0 X3ZhbHVlKHJfY29uZmlnLT5yZXNldF9ncGlvLAotCQkJICAgICAgIHJfY29uZmlnLT5zZXF1ZW5j ZVtpXS5sZXZlbCk7Ci0KLQotCQlpZiAocl9jb25maWctPnNlcXVlbmNlW2ldLnNsZWVwX21zKQot CQkJdXNsZWVwX3JhbmdlKHJfY29uZmlnLT5zZXF1ZW5jZVtpXS5zbGVlcF9tcyAqIDEwMDAsCi0J CQkJICAgICByX2NvbmZpZy0+c2VxdWVuY2VbaV0uc2xlZXBfbXMgKiAxMDAwKTsKLQl9Ci0KLQlp ZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+YmxfY29uZmlnLmVuX2dwaW8pKSB7Ci0JCXJjID0gZ3Bp b19kaXJlY3Rpb25fb3V0cHV0KHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgMSk7Ci0JCWlmIChy YykKLQkJCXByX2VycigidW5hYmxlIHRvIHNldCBkaXIgZm9yIGJrbHQgZ3BpbyByYz0lZFxuIiwg cmMpOwotCX0KLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcubGNkX21v ZGVfc2VsX2dwaW8pKSB7Ci0JCWJvb2wgb3V0ID0gdHJ1ZTsKLQotCQlpZiAoKHBhbmVsLT5yZXNl dF9jb25maWcubW9kZV9zZWxfc3RhdGUgPT0gTU9ERV9TRUxfRFVBTF9QT1JUKQotCQkJCXx8IChw YW5lbC0+cmVzZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlCi0JCQkJCT09IE1PREVfR1BJT19MT1cp KQotCQkJb3V0ID0gZmFsc2U7Ci0JCWVsc2UgaWYgKChwYW5lbC0+cmVzZXRfY29uZmlnLm1vZGVf c2VsX3N0YXRlCi0JCQkJPT0gTU9ERV9TRUxfU0lOR0xFX1BPUlQpIHx8Ci0JCQkJKHBhbmVsLT5y ZXNldF9jb25maWcubW9kZV9zZWxfc3RhdGUKLQkJCQkgPT0gTU9ERV9HUElPX0hJR0gpKQotCQkJ b3V0ID0gdHJ1ZTsKLQotCQlyYyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dCgKLQkJCXBhbmVsLT5y ZXNldF9jb25maWcubGNkX21vZGVfc2VsX2dwaW8sIG91dCk7Ci0JCWlmIChyYykKLQkJCXByX2Vy cigidW5hYmxlIHRvIHNldCBkaXIgZm9yIG1vZGUgZ3BpbyByYz0lZFxuIiwgcmMpOwotCX0KLWV4 aXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9zZXRfcGluY3RybF9z dGF0ZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0g MDsKLQlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqc3RhdGU7Ci0KLQlpZiAoZW5hYmxlKQotCQlzdGF0 ZSA9IHBhbmVsLT5waW5jdHJsLmFjdGl2ZTsKLQllbHNlCi0JCXN0YXRlID0gcGFuZWwtPnBpbmN0 cmwuc3VzcGVuZDsKLQotCXJjID0gcGluY3RybF9zZWxlY3Rfc3RhdGUocGFuZWwtPnBpbmN0cmwu cGluY3RybCwgc3RhdGUpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQg cGluIHN0YXRlLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsCi0JCSAgICAgICByYyk7Ci0KLQlyZXR1 cm4gcmM7Ci19Ci0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcG93ZXJfb24oc3RydWN0IGRzaV9w YW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCXJjID0gZHNpX3B3cl9lbmFibGVfcmVn dWxhdG9yKCZwYW5lbC0+cG93ZXJfaW5mbywgdHJ1ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vycigi WyVzXSBmYWlsZWQgdG8gZW5hYmxlIHZyZWdzLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsIHJjKTsK LQkJZ290byBleGl0OwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3NldF9waW5jdHJsX3N0YXRlKHBh bmVsLCB0cnVlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgcGlu Y3RybCwgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3JfZGlzYWJsZV92 cmVnczsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9yZXNldChwYW5lbCk7Ci0JaWYgKHJjKSB7Ci0J CXByX2VycigiWyVzXSBmYWlsZWQgdG8gcmVzZXQgcGFuZWwsIHJjPSVkXG4iLCBwYW5lbC0+bmFt ZSwgcmMpOwotCQlnb3RvIGVycm9yX2Rpc2FibGVfZ3BpbzsKLQl9Ci0KLQlnb3RvIGV4aXQ7Ci0K LWVycm9yX2Rpc2FibGVfZ3BpbzoKLQlpZiAoZ3Bpb19pc192YWxpZChwYW5lbC0+cmVzZXRfY29u ZmlnLmRpc3BfZW5fZ3BpbykpCi0JCWdwaW9fc2V0X3ZhbHVlKHBhbmVsLT5yZXNldF9jb25maWcu ZGlzcF9lbl9ncGlvLCAwKTsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5ibF9jb25maWcu ZW5fZ3BpbykpCi0JCWdwaW9fc2V0X3ZhbHVlKHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbywgMCk7 Ci0KLQkodm9pZClkc2lfcGFuZWxfc2V0X3BpbmN0cmxfc3RhdGUocGFuZWwsIGZhbHNlKTsKLQot ZXJyb3JfZGlzYWJsZV92cmVnczoKLQkodm9pZClkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoJnBh bmVsLT5wb3dlcl9pbmZvLCBmYWxzZSk7Ci0KLWV4aXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0 aWMgaW50IGRzaV9wYW5lbF9wb3dlcl9vZmYoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0J aW50IHJjID0gMDsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcuZGlz cF9lbl9ncGlvKSkKLQkJZ3Bpb19zZXRfdmFsdWUocGFuZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2Vu X2dwaW8sIDApOwotCi0JaWYgKGdwaW9faXNfdmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNl dF9ncGlvKSkKLQkJZ3Bpb19zZXRfdmFsdWUocGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNldF9ncGlv LCAwKTsKLQotCWlmIChncGlvX2lzX3ZhbGlkKHBhbmVsLT5yZXNldF9jb25maWcubGNkX21vZGVf c2VsX2dwaW8pKQotCQlncGlvX3NldF92YWx1ZShwYW5lbC0+cmVzZXRfY29uZmlnLmxjZF9tb2Rl X3NlbF9ncGlvLCAwKTsKLQotCXJjID0gZHNpX3BhbmVsX3NldF9waW5jdHJsX3N0YXRlKHBhbmVs LCBmYWxzZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgc2V0IHBpbmN0cmwg c3RhdGUsIHJjPSVkXG4iLCBwYW5lbC0+bmFtZSwKLQkJICAgICAgIHJjKTsKLQl9Ci0KLQlyYyA9 IGRzaV9wd3JfZW5hYmxlX3JlZ3VsYXRvcigmcGFuZWwtPnBvd2VyX2luZm8sIGZhbHNlKTsKLQlp ZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZW5hYmxlIHZyZWdzLCByYz0lZFxuIiwg cGFuZWwtPm5hbWUsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLXN0YXRpYyBpbnQgZHNpX3BhbmVs X3R4X2NtZF9zZXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJZW51bSBkc2lfY21kX3Nl dF90eXBlIHR5cGUpCi17Ci0JaW50IHJjID0gMCwgaSA9IDA7Ci0Jc3NpemVfdCBsZW47Ci0Jc3Ry dWN0IGRzaV9jbWRfZGVzYyAqY21kczsKLQl1MzIgY291bnQ7Ci0JZW51bSBkc2lfY21kX3NldF9z dGF0ZSBzdGF0ZTsKLQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQljb25zdCBzdHJ1 Y3QgbWlwaV9kc2lfaG9zdF9vcHMgKm9wcyA9IHBhbmVsLT5ob3N0LT5vcHM7Ci0KLQlpZiAoIXBh bmVsIHx8ICFwYW5lbC0+Y3VyX21vZGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbW9kZSA9IHBh bmVsLT5jdXJfbW9kZTsKLQotCWNtZHMgPSBtb2RlLT5wcml2X2luZm8tPmNtZF9zZXRzW3R5cGVd LmNtZHM7Ci0JY291bnQgPSBtb2RlLT5wcml2X2luZm8tPmNtZF9zZXRzW3R5cGVdLmNvdW50Owot CXN0YXRlID0gbW9kZS0+cHJpdl9pbmZvLT5jbWRfc2V0c1t0eXBlXS5zdGF0ZTsKLQotCWlmIChj b3VudCA9PSAwKSB7Ci0JCXByX2RlYnVnKCJbJXNdIE5vIGNvbW1hbmRzIHRvIGJlIHNlbnQgZm9y IHN0YXRlKCVkKVxuIiwKLQkJCSBwYW5lbC0+bmFtZSwgdHlwZSk7Ci0JCWdvdG8gZXJyb3I7Ci0J fQotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJLyogVE9ETzogIGhhbmRsZSBs YXN0IGNvbW1hbmQgKi8KLQkJaWYgKHN0YXRlID09IERTSV9DTURfU0VUX1NUQVRFX0xQKQotCQkJ Y21kcy0+bXNnLmZsYWdzIHw9IE1JUElfRFNJX01TR19VU0VfTFBNOwotCi0JCWxlbiA9IG9wcy0+ dHJhbnNmZXIocGFuZWwtPmhvc3QsICZjbWRzLT5tc2cpOwotCQlpZiAobGVuIDwgMCkgewotCQkJ cmMgPSBsZW47Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgY21kcyglZCksIHJjPSVkXG4iLCB0 eXBlLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWlmIChjbWRzLT5wb3N0X3dhaXRfbXMp Ci0JCQltc2xlZXAoY21kcy0+cG9zdF93YWl0X21zKTsKLQkJY21kcysrOwotCX0KLWVycm9yOgot CXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGluY3RybF9kZWluaXQoc3Ry dWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWRldm1fcGluY3RybF9w dXQocGFuZWwtPnBpbmN0cmwucGluY3RybCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX3BhbmVsX3BpbmN0cmxfaW5pdChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlp bnQgcmMgPSAwOwotCi0JLyogVE9ETzogIHBpbmN0cmwgaXMgZGVmaW5lZCBpbiBkc2kgZHQgbm9k ZSAqLwotCXBhbmVsLT5waW5jdHJsLnBpbmN0cmwgPSBkZXZtX3BpbmN0cmxfZ2V0KHBhbmVsLT5w YXJlbnQpOwotCWlmIChJU19FUlJfT1JfTlVMTChwYW5lbC0+cGluY3RybC5waW5jdHJsKSkgewot CQlyYyA9IFBUUl9FUlIocGFuZWwtPnBpbmN0cmwucGluY3RybCk7Ci0JCXByX2VycigiZmFpbGVk IHRvIGdldCBwaW5jdHJsLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXBh bmVsLT5waW5jdHJsLmFjdGl2ZSA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKHBhbmVsLT5waW5jdHJs LnBpbmN0cmwsCi0JCQkJCQkgICAgICAgInBhbmVsX2FjdGl2ZSIpOwotCWlmIChJU19FUlJfT1Jf TlVMTChwYW5lbC0+cGluY3RybC5hY3RpdmUpKSB7Ci0JCXJjID0gUFRSX0VSUihwYW5lbC0+cGlu Y3RybC5hY3RpdmUpOwotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgcGluY3RybCBhY3RpdmUgc3Rh dGUsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcGFuZWwtPnBpbmN0cmwu c3VzcGVuZCA9Ci0JCXBpbmN0cmxfbG9va3VwX3N0YXRlKHBhbmVsLT5waW5jdHJsLnBpbmN0cmws ICJwYW5lbF9zdXNwZW5kIik7Ci0KLQlpZiAoSVNfRVJSX09SX05VTEwocGFuZWwtPnBpbmN0cmwu c3VzcGVuZCkpIHsKLQkJcmMgPSBQVFJfRVJSKHBhbmVsLT5waW5jdHJsLnN1c3BlbmQpOwotCQlw cl9lcnIoImZhaWxlZCB0byBnZXQgcGluY3RybCBzdXNwZW5kIHN0YXRlLCByYz0lZFxuIiwgcmMp OwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYg Q09ORklHX0xFRFNfVFJJR0dFUlMKLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2xlZF9ibF9yZWdpc3Rl cihzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25m aWcgKmJsKQotewotCWludCByYyA9IDA7Ci0KLQlsZWRfdHJpZ2dlcl9yZWdpc3Rlcl9zaW1wbGUo ImJrbC10cmlnZ2VyIiwgJmJsLT53bGVkKTsKLQotCS8qIExFRCBBUElzIGRvbid0IHRlbGwgdXMg ZGlyZWN0bHkgd2hldGhlciBhIGNsYXNkcHV2IGhhcyB5ZXQKLQkgKiBiZWVuIHJlZ2lzdGVyZWQg dG8gc2VydmljZSB0aGlzIHRyaWdnZXIuIFVudGlsIGNsYXNkcHV2IGlzCi0JICogcmVnaXN0ZXJl ZCwgY2FsbGluZyBsZWRfdHJpZ2dlciBoYXMgbm8gZWZmZWN0LCBhbmQgZG9lc24ndAotCSAqIGZh aWwuIENsYXNkcHV2cyBhcmUgYXNzb2NpYXRlZCB3aXRoIGFueSByZWdpc3RlcmVkIHRyaWdnZXJz Ci0JICogd2hlbiB0aGV5IGRvIHJlZ2lzdGVyLCBidXQgdGhhdCBpcyB0b28gbGF0ZSBmb3IgRkJD b24uCi0JICogQ2hlY2sgdGhlIGNkZXYgbGlzdCBkaXJlY3RseSBhbmQgZGVmZXIgaWYgYXBwcm9w cmlhdGUuCi0JICovCi0JaWYgKCFibC0+d2xlZCkgewotCQlwcl9lcnIoIlslc10gYmFja2xpZ2h0 IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIsIHBhbmVsLT5uYW1lKTsKLQkJcmMgPSAtRUlOVkFMOwot CX0gZWxzZSB7Ci0JCXJlYWRfbG9jaygmYmwtPndsZWQtPmxlZGRldl9saXN0X2xvY2spOwotCQlp ZiAobGlzdF9lbXB0eSgmYmwtPndsZWQtPmxlZF9jZGV2cykpCi0JCQlyYyA9IC1FUFJPQkVfREVG RVI7Ci0JCXJlYWRfdW5sb2NrKCZibC0+d2xlZC0+bGVkZGV2X2xpc3RfbG9jayk7Ci0KLQkJaWYg KHJjKSB7Ci0JCQlwcl9pbmZvKCJbJXNdIGJhY2tsaWdodCAlcyBub3QgcmVhZHksIGRlZmVyIHBy b2JlXG4iLAotCQkJCXBhbmVsLT5uYW1lLCBibC0+d2xlZC0+bmFtZSk7Ci0JCQlsZWRfdHJpZ2dl cl91bnJlZ2lzdGVyX3NpbXBsZShibC0+d2xlZCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7Ci19 Ci0jZWxzZQotc3RhdGljIGludCBkc2lfcGFuZWxfbGVkX2JsX3JlZ2lzdGVyKHN0cnVjdCBkc2lf cGFuZWwgKnBhbmVsLAotCQkJCXN0cnVjdCBkc2lfYmFja2xpZ2h0X2NvbmZpZyAqYmwpCi17Ci0J cmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBkc2lfcGFuZWxfdXBkYXRlX2JhY2ts aWdodChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQl1MzIgYmxfbHZsKQotewotCWludCByYyA9 IDA7Ci0Jc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwotCi0JaWYgKCFwYW5lbCB8fCAoYmxf bHZsID4gMHhmZmZmKSkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JZHNpID0gJnBhbmVsLT5taXBpX2RldmljZTsKLQotCW11dGV4X2xv Y2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCXJjID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5 X2JyaWdodG5lc3MoZHNpLCBibF9sdmwpOwotCWlmIChyYyA8IDApCi0JCXByX2VycigiZmFpbGVk IHRvIHVwZGF0ZSBkY3MgYmFja2xpZ2h0OiVkXG4iLCBibF9sdmwpOwotCi0JbXV0ZXhfdW5sb2Nr KCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3Nl dF9iYWNrbGlnaHQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsIHUzMiBibF9sdmwpCi17Ci0JaW50 IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgKmJsID0gJnBhbmVsLT5ibF9j b25maWc7Ci0KLQlwcl9kZWJ1ZygiYmFja2xpZ2h0IHR5cGU6JWQgbHZsOiVkXG4iLCBibC0+dHlw ZSwgYmxfbHZsKTsKLQlzd2l0Y2ggKGJsLT50eXBlKSB7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX1dM RUQ6Ci0JCWxlZF90cmlnZ2VyX2V2ZW50KGJsLT53bGVkLCBibF9sdmwpOwotCQlicmVhazsKLQlj YXNlIERTSV9CQUNLTElHSFRfRENTOgotCQlkc2lfcGFuZWxfdXBkYXRlX2JhY2tsaWdodChwYW5l bCwgYmxfbHZsKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJCYWNrbGlnaHQgdHlw ZSglZCkgbm90IHN1cHBvcnRlZFxuIiwgYmwtPnR5cGUpOwotCQlyYyA9IC1FTk9UU1VQUDsKLQl9 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2JsX3JlZ2lzdGVyKHN0 cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRzaV9iYWNr bGlnaHRfY29uZmlnICpibCA9ICZwYW5lbC0+YmxfY29uZmlnOwotCi0Jc3dpdGNoIChibC0+dHlw ZSkgewotCWNhc2UgRFNJX0JBQ0tMSUdIVF9XTEVEOgotCQlyYyA9IGRzaV9wYW5lbF9sZWRfYmxf cmVnaXN0ZXIocGFuZWwsIGJsKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfQkFDS0xJR0hUX0RDUzoK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfZXJyKCJCYWNrbGlnaHQgdHlwZSglZCkgbm90IHN1 cHBvcnRlZFxuIiwgYmwtPnR5cGUpOwotCQlyYyA9IC1FTk9UU1VQUDsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfYmxf dW5yZWdpc3RlcihzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0 cnVjdCBkc2lfYmFja2xpZ2h0X2NvbmZpZyAqYmwgPSAmcGFuZWwtPmJsX2NvbmZpZzsKLQotCXN3 aXRjaCAoYmwtPnR5cGUpIHsKLQljYXNlIERTSV9CQUNLTElHSFRfV0xFRDoKLQkJbGVkX3RyaWdn ZXJfdW5yZWdpc3Rlcl9zaW1wbGUoYmwtPndsZWQpOwotCQlicmVhazsKLQljYXNlIERTSV9CQUNL TElHSFRfRENTOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9lcnIoIkJhY2tsaWdodCB0eXBl KCVkKSBub3Qgc3VwcG9ydGVkXG4iLCBibC0+dHlwZSk7Ci0JCXJjID0gLUVOT1RTVVBQOwotCQln b3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotc3RhdGljIGludCBkc2lf cGFuZWxfcGFyc2VfdGltaW5nKHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAotCQkJCSAgc3Ry dWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IG9mX3By b3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXBhbmVsLWZyYW1lcmF0ZSIs Ci0JCQkJICAmbW9kZS0+cmVmcmVzaF9yYXRlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLXBhbmVsLWZyYW1lcmF0ZSwgcmM9JWRcbiIsCi0JCSAg ICAgICByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3Uz MihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1wYW5lbC13aWR0aCIsCi0JCQkJICAmbW9kZS0+aF9h Y3RpdmUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHFjb20sbWRzcy1k c2ktcGFuZWwtd2lkdGgsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMg PSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1oLWZyb250LXBv cmNoIiwKLQkJCQkgICZtb2RlLT5oX2Zyb250X3BvcmNoKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJmYWlsZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLWgtZnJvbnQtcG9yY2gsIHJjPSVkXG4iLAot CQkgICAgICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVh ZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktaC1iYWNrLXBvcmNoIiwKLQkJCQkgICZtb2Rl LT5oX2JhY2tfcG9yY2gpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIHFj b20sbWRzcy1kc2ktaC1iYWNrLXBvcmNoLCByYz0lZFxuIiwKLQkJICAgICAgIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29t LG1kc3MtZHNpLWgtcHVsc2Utd2lkdGgiLAotCQkJCSAgJm1vZGUtPmhfc3luY193aWR0aCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS1oLXB1bHNl LXdpZHRoLCByYz0lZFxuIiwKLQkJICAgICAgIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQly YyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLWgtc3luYy1z a2V3IiwKLQkJCQkgICZtb2RlLT5oX3NrZXcpOwotCWlmIChyYykKLQkJcHJfZXJyKCJxY29tLG1k c3MtZHNpLWgtc3luYy1za2V3IGlzIG5vdCBkZWZpbmVkLCByYz0lZFxuIiwgcmMpOwotCi0JcmMg PSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1wYW5lbC1oZWln aHQiLAotCQkJCSAgJm1vZGUtPnZfYWN0aXZlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLXBhbmVsLWhlaWdodCwgcmM9JWRcbiIsCi0JCSAgICAg ICByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihv Zl9ub2RlLCAicWNvbSxtZHNzLWRzaS12LWJhY2stcG9yY2giLAotCQkJCSAgJm1vZGUtPnZfYmFj a19wb3JjaCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNz LWRzaS12LWJhY2stcG9yY2gsIHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwotCQlnb3RvIGVycm9y OwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1k c2ktdi1mcm9udC1wb3JjaCIsCi0JCQkJICAmbW9kZS0+dl9mcm9udF9wb3JjaCk7Ci0JaWYgKHJj KSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHJlYWQgcWNvbSxtZHNzLWRzaS12LWJhY2stcG9yY2gs IHJjPSVkXG4iLAotCQkgICAgICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdi1wdWxzZS13aWR0aCIs Ci0JCQkJICAmbW9kZS0+dl9zeW5jX3dpZHRoKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWls ZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLXYtcHVsc2Utd2lkdGgsIHJjPSVkXG4iLAotCQkgICAg ICAgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1z dGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9waXhlbF9mb3JtYXQoc3RydWN0IGRzaV9ob3N0X2Nv bW1vbl9jZmcgKmhvc3QsCi0JCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQkJ Y29uc3QgY2hhciAqbmFtZSkKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiBicHAgPSAwOwotCWVudW0g ZHNpX3BpeGVsX2Zvcm1hdCBmbXQ7Ci0JY29uc3QgY2hhciAqcGFja2luZzsKLQotCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktYnBwIiwgJmJwcCk7Ci0J aWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gcmVhZCBxY29tLG1kc3MtZHNpLWJw cCwgcmM9JWRcbiIsCi0JCSAgICAgICBuYW1lLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlz d2l0Y2ggKGJwcCkgewotCWNhc2UgMzoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0IxMTE7 Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0IzMzI7Ci0J CWJyZWFrOwotCWNhc2UgMTI6Ci0JCWZtdCA9IERTSV9QSVhFTF9GT1JNQVRfUkdCNDQ0OwotCQli cmVhazsKLQljYXNlIDE2OgotCQlmbXQgPSBEU0lfUElYRUxfRk9STUFUX1JHQjU2NTsKLQkJYnJl YWs7Ci0JY2FzZSAxODoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjY7Ci0JCWJyZWFr OwotCWNhc2UgMjQ6Ci0JZGVmYXVsdDoKLQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I4ODg7 Ci0JCWJyZWFrOwotCX0KLQotCWlmIChmbXQgPT0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjYpIHsK LQkJcGFja2luZyA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLAotCQkJCQkgICJxY29tLG1kc3Mt ZHNpLXBpeGVsLXBhY2tpbmciLAotCQkJCQkgIE5VTEwpOwotCQlpZiAocGFja2luZyAmJiAhc3Ry Y21wKHBhY2tpbmcsICJsb29zZSIpKQotCQkJZm10ID0gRFNJX1BJWEVMX0ZPUk1BVF9SR0I2NjZf TE9PU0U7Ci0JfQotCi0JaG9zdC0+ZHN0X2Zvcm1hdCA9IGZtdDsKLQlyZXR1cm4gcmM7Ci19Ci0K LXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2xhbmVfc3RhdGVzKHN0cnVjdCBkc2lfaG9zdF9j b21tb25fY2ZnICpob3N0LAotCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUs Ci0JCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQlib29sIGxh bmVfZW5hYmxlZDsKLQotCWxhbmVfZW5hYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9u b2RlLAotCQkJCQkgICAgInFjb20sbWRzcy1kc2ktbGFuZS0wLXN0YXRlIik7Ci0JaG9zdC0+ZGF0 YV9sYW5lcyB8PSAobGFuZV9lbmFibGVkID8gRFNJX0RBVEFfTEFORV8wIDogMCk7Ci0KLQlsYW5l X2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJICAgICAicWNv bSxtZHNzLWRzaS1sYW5lLTEtc3RhdGUiKTsKLQlob3N0LT5kYXRhX2xhbmVzIHw9IChsYW5lX2Vu YWJsZWQgPyBEU0lfREFUQV9MQU5FXzEgOiAwKTsKLQotCWxhbmVfZW5hYmxlZCA9IG9mX3Byb3Bl cnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJCQkgICAgInFjb20sbWRzcy1kc2ktbGFuZS0yLXN0 YXRlIik7Ci0JaG9zdC0+ZGF0YV9sYW5lcyB8PSAobGFuZV9lbmFibGVkID8gRFNJX0RBVEFfTEFO RV8yIDogMCk7Ci0KLQlsYW5lX2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9k ZSwKLQkJCQkJICAgICAicWNvbSxtZHNzLWRzaS1sYW5lLTMtc3RhdGUiKTsKLQlob3N0LT5kYXRh X2xhbmVzIHw9IChsYW5lX2VuYWJsZWQgPyBEU0lfREFUQV9MQU5FXzMgOiAwKTsKLQotCWlmICho b3N0LT5kYXRhX2xhbmVzID09IDApIHsKLQkJcHJfZXJyKCJbJXNdIE5vIGRhdGEgbGFuZXMgYXJl IGVuYWJsZWQsIHJjPSVkXG4iLCBuYW1lLCByYyk7Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0KLQly ZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2NvbG9yX3N3YXAoc3Ry dWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmhvc3QsCi0JCQkJICAgICAgc3RydWN0IGRldmljZV9u b2RlICpvZl9ub2RlLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0g MDsKLQljb25zdCBjaGFyICpzd2FwX21vZGU7Ci0KLQlzd2FwX21vZGUgPSBvZl9nZXRfcHJvcGVy dHkob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktY29sb3Itb3JkZXIiLCBOVUxMKTsKLQlpZiAoc3dh cF9tb2RlKSB7Ci0JCWlmICghc3RyY21wKHN3YXBfbW9kZSwgInJnYl9zd2FwX3JnYiIpKSB7Ci0J CQlob3N0LT5zd2FwX21vZGUgPSBEU0lfQ09MT1JfU1dBUF9SR0I7Ci0JCX0gZWxzZSBpZiAoIXN0 cmNtcChzd2FwX21vZGUsICJyZ2Jfc3dhcF9yYmciKSkgewotCQkJaG9zdC0+c3dhcF9tb2RlID0g RFNJX0NPTE9SX1NXQVBfUkJHOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoc3dhcF9tb2RlLCAicmdi X3N3YXBfYnJnIikpIHsKLQkJCWhvc3QtPnN3YXBfbW9kZSA9IERTSV9DT0xPUl9TV0FQX0JSRzsK LQkJfSBlbHNlIGlmICghc3RyY21wKHN3YXBfbW9kZSwgInJnYl9zd2FwX2dyYiIpKSB7Ci0JCQlo b3N0LT5zd2FwX21vZGUgPSBEU0lfQ09MT1JfU1dBUF9HUkI7Ci0JCX0gZWxzZSBpZiAoIXN0cmNt cChzd2FwX21vZGUsICJyZ2Jfc3dhcF9nYnIiKSkgewotCQkJaG9zdC0+c3dhcF9tb2RlID0gRFNJ X0NPTE9SX1NXQVBfR0JSOwotCQl9IGVsc2UgewotCQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXpl ZCBjb2xvciBvcmRlci0lc1xuIiwKLQkJCSAgICAgICBuYW1lLCBzd2FwX21vZGUpOwotCQkJcmMg PSAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoIlslc10gRmFsbGluZyBiYWNr IHRvIGRlZmF1bHQgY29sb3Igb3JkZXJcbiIsIG5hbWUpOwotCQlob3N0LT5zd2FwX21vZGUgPSBE U0lfQ09MT1JfU1dBUF9SR0I7Ci0JfQotCi0JLyogYml0IHN3YXAgb24gY29sb3IgY2hhbm5lbCBp cyBub3QgZGVmaW5lZCBpbiBkdCAqLwotCWhvc3QtPmJpdF9zd2FwX3JlZCA9IGZhbHNlOwotCWhv c3QtPmJpdF9zd2FwX2dyZWVuID0gZmFsc2U7Ci0JaG9zdC0+Yml0X3N3YXBfYmx1ZSA9IGZhbHNl OwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfdHJpZ2dlcnMo c3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmhvc3QsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2Vf bm9kZSAqb2Zfbm9kZSwKLQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKLXsKLQljb25zdCBjaGFy ICp0cmlnOwotCWludCByYyA9IDA7Ci0KLQl0cmlnID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUs ICJxY29tLG1kc3MtZHNpLW1kcC10cmlnZ2VyIiwgTlVMTCk7Ci0JaWYgKHRyaWcpIHsKLQkJaWYg KCFzdHJjbXAodHJpZywgIm5vbmUiKSkgewotCQkJaG9zdC0+bWRwX2NtZF90cmlnZ2VyID0gRFNJ X1RSSUdHRVJfTk9ORTsKLQkJfSBlbHNlIGlmICghc3RyY21wKHRyaWcsICJ0cmlnZ2VyX3RlIikp IHsKLQkJCWhvc3QtPm1kcF9jbWRfdHJpZ2dlciA9IERTSV9UUklHR0VSX1RFOwotCQl9IGVsc2Ug aWYgKCFzdHJjbXAodHJpZywgInRyaWdnZXJfc3ciKSkgewotCQkJaG9zdC0+bWRwX2NtZF90cmln Z2VyID0gRFNJX1RSSUdHRVJfU1c7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmlnLCAidHJpZ2dl cl9zd190ZSIpKSB7Ci0JCQlob3N0LT5tZHBfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TV19U RTsKLQkJfSBlbHNlIHsKLQkJCXByX2VycigiWyVzXSBVbnJlY29nbml6ZWQgbWRwIHRyaWdnZXIg dHlwZSAoJXMpXG4iLAotCQkJICAgICAgIG5hbWUsIHRyaWcpOwotCQkJcmMgPSAtRUlOVkFMOwot CQl9Ci0KLQl9IGVsc2UgewotCQlwcl9kZWJ1ZygiWyVzXSBGYWxsaW5nIGJhY2sgdG8gZGVmYXVs dCBNRFAgdHJpZ2dlclxuIiwKLQkJCSBuYW1lKTsKLQkJaG9zdC0+bWRwX2NtZF90cmlnZ2VyID0g RFNJX1RSSUdHRVJfU1c7Ci0JfQotCi0JdHJpZyA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAi cWNvbSxtZHNzLWRzaS1kbWEtdHJpZ2dlciIsIE5VTEwpOwotCWlmICh0cmlnKSB7Ci0JCWlmICgh c3RyY21wKHRyaWcsICJub25lIikpIHsKLQkJCWhvc3QtPmRtYV9jbWRfdHJpZ2dlciA9IERTSV9U UklHR0VSX05PTkU7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmlnLCAidHJpZ2dlcl90ZSIpKSB7 Ci0JCQlob3N0LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9URTsKLQkJfSBlbHNlIGlm ICghc3RyY21wKHRyaWcsICJ0cmlnZ2VyX3N3IikpIHsKLQkJCWhvc3QtPmRtYV9jbWRfdHJpZ2dl ciA9IERTSV9UUklHR0VSX1NXOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHJpZywgInRyaWdnZXJf c3dfc2VvZiIpKSB7Ci0JCQlob3N0LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TV19T RU9GOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHJpZywgInRyaWdnZXJfc3dfdGUiKSkgewotCQkJ aG9zdC0+ZG1hX2NtZF90cmlnZ2VyID0gRFNJX1RSSUdHRVJfU1dfVEU7Ci0JCX0gZWxzZSB7Ci0J CQlwcl9lcnIoIlslc10gVW5yZWNvZ25pemVkIG1kcCB0cmlnZ2VyIHR5cGUgKCVzKVxuIiwKLQkJ CSAgICAgICBuYW1lLCB0cmlnKTsKLQkJCXJjID0gLUVJTlZBTDsKLQkJfQotCi0JfSBlbHNlIHsK LQkJcHJfZGVidWcoIlslc10gRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgTURQIHRyaWdnZXJcbiIs IG5hbWUpOwotCQlob3N0LT5kbWFfY21kX3RyaWdnZXIgPSBEU0lfVFJJR0dFUl9TVzsKLQl9Ci0K LQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXRlLXBp bi1zZWxlY3QiLAotCQkJJmhvc3QtPnRlX21vZGUpOwotCWlmIChyYykgewotCQlwcl93YXJuKCJb JXNdIGZhbGxiYWNrIHRvIGRlZmF1bHQgdGUtcGluLXNlbGVjdFxuIiwgbmFtZSk7Ci0JCWhvc3Qt PnRlX21vZGUgPSAxOwotCQlyYyA9IDA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMg aW50IGRzaV9wYW5lbF9wYXJzZV9taXNjX2hvc3RfY29uZmlnKHN0cnVjdCBkc2lfaG9zdF9jb21t b25fY2ZnICpob3N0LAotCQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJ CQkgICAgY29uc3QgY2hhciAqbmFtZSkKLXsKLQl1MzIgdmFsID0gMDsKLQlpbnQgcmMgPSAwOwot Ci0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS10LWNs ay1wb3N0IiwgJnZhbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxiYWNrIHRv IGRlZmF1bHQgdF9jbGtfcG9zdCB2YWx1ZVxuIiwgbmFtZSk7Ci0JCWhvc3QtPnRfY2xrX3Bvc3Qg PSAweDAzOwotCX0gZWxzZSB7Ci0JCWhvc3QtPnRfY2xrX3Bvc3QgPSB2YWw7Ci0JCXByX2RlYnVn KCJbJXNdIHRfY2xrX3Bvc3QgPSAlZFxuIiwgbmFtZSwgdmFsKTsKLQl9Ci0KLQl2YWwgPSAwOwot CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktdC1jbGst cHJlIiwgJnZhbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIEZhbGxiYWNrIHRvIGRl ZmF1bHQgdF9jbGtfcHJlIHZhbHVlXG4iLCBuYW1lKTsKLQkJaG9zdC0+dF9jbGtfcHJlID0gMHgy NDsKLQl9IGVsc2UgewotCQlob3N0LT50X2Nsa19wcmUgPSB2YWw7Ci0JCXByX2RlYnVnKCJbJXNd IHRfY2xrX3ByZSA9ICVkXG4iLCBuYW1lLCB2YWwpOwotCX0KLQotCWhvc3QtPmlnbm9yZV9yeF9l b3QgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNp LXJ4LWVvdC1pZ25vcmUiKTsKLQotCWhvc3QtPmFwcGVuZF90eF9lb3QgPSBvZl9wcm9wZXJ0eV9y ZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLXR4LWVvdC1hcHBlbmQiKTsK LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9ob3N0X2NvbmZp ZyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2Rl ICpvZl9ub2RlKQotewotCWludCByYyA9IDA7Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9waXhl bF9mb3JtYXQoJnBhbmVsLT5ob3N0X2NvbmZpZywgb2Zfbm9kZSwKLQkJCQkJICBwYW5lbC0+bmFt ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gZ2V0IHBpeGVsIGZvcm1h dCwgcmM9JWRcbiIsCi0JCXBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0J cmMgPSBkc2lfcGFuZWxfcGFyc2VfbGFuZV9zdGF0ZXMoJnBhbmVsLT5ob3N0X2NvbmZpZywgb2Zf bm9kZSwKLQkJCQkJIHBhbmVsLT5uYW1lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZh aWxlZCB0byBwYXJzZSBsYW5lIHN0YXRlcywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFt ZSwgcmMpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2NvbG9y X3N3YXAoJnBhbmVsLT5ob3N0X2NvbmZpZywgb2Zfbm9kZSwKLQkJCQkJcGFuZWwtPm5hbWUpOwot CWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHBhcnNlIGNvbG9yIHN3YXAgY29u ZmlnLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfdHJpZ2dlcnMoJnBhbmVsLT5ob3N0X2NvbmZp Zywgb2Zfbm9kZSwKLQkJCQkgICAgICBwYW5lbC0+bmFtZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gcGFyc2UgdHJpZ2dlcnMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFu ZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJz ZV9taXNjX2hvc3RfY29uZmlnKCZwYW5lbC0+aG9zdF9jb25maWcsIG9mX25vZGUsCi0JCQkJCSAg ICAgIHBhbmVsLT5uYW1lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBw YXJzZSBtaXNjIGhvc3QgY29uZmlnLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRp YyBpbnQgZHNpX3BhbmVsX3BhcnNlX2RmcHNfY2FwcyhzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0 aWVzICpkZnBzX2NhcHMsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUsCi0J CQkJICAgICBjb25zdCBjaGFyICpuYW1lKQotewotCWludCByYyA9IDA7Ci0JYm9vbCBzdXBwb3J0 ZWQgPSBmYWxzZTsKLQljb25zdCBjaGFyICp0eXBlOwotCXUzMiB2YWwgPSAwOwotCi0Jc3VwcG9y dGVkID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCSJxY29tLG1kc3MtZHNp LXBhbi1lbmFibGUtZHluYW1pYy1mcHMiKTsKLQotCWlmICghc3VwcG9ydGVkKSB7Ci0JCXByX2Rl YnVnKCJbJXNdIERGUFMgaXMgbm90IHN1cHBvcnRlZFxuIiwgbmFtZSk7Ci0JCWRmcHNfY2Fwcy0+ ZGZwc19zdXBwb3J0ID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQotCQl0eXBlID0gb2ZfZ2V0X3Byb3Bl cnR5KG9mX25vZGUsCi0JCQkJICAgICAgICJxY29tLG1kc3MtZHNpLXBhbi1mcHMtdXBkYXRlIiwK LQkJCQkgICAgICAgTlVMTCk7Ci0JCWlmICghdHlwZSkgewotCQkJcHJfZXJyKCJbJXNdIGRmcHMg dHlwZSBub3QgZGVmaW5lZFxuIiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVy cm9yOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgImRmcHNfc3VzcGVuZF9yZXN1bWVfbW9k ZSIpKSB7Ci0JCQlkZnBzX2NhcHMtPnR5cGUgPSBEU0lfREZQU19TVVNQRU5EX1JFU1VNRTsKLQkJ fSBlbHNlIGlmICghc3RyY21wKHR5cGUsICJkZnBzX2ltbWVkaWF0ZV9jbGtfbW9kZSIpKSB7Ci0J CQlkZnBzX2NhcHMtPnR5cGUgPSBEU0lfREZQU19JTU1FRElBVEVfQ0xLOwotCQl9IGVsc2UgaWYg KCFzdHJjbXAodHlwZSwgImRmcHNfaW1tZWRpYXRlX3BvcmNoX21vZGVfaGZwIikpIHsKLQkJCWRm cHNfY2Fwcy0+dHlwZSA9IERTSV9ERlBTX0lNTUVESUFURV9IRlA7Ci0JCX0gZWxzZSBpZiAoIXN0 cmNtcCh0eXBlLCAiZGZwc19pbW1lZGlhdGVfcG9yY2hfbW9kZV92ZnAiKSkgewotCQkJZGZwc19j YXBzLT50eXBlID0gRFNJX0RGUFNfSU1NRURJQVRFX1ZGUDsKLQkJfSBlbHNlIHsKLQkJCXByX2Vy cigiWyVzXSBkZnBzIHR5cGUgaXMgbm90IHJlY29nbml6ZWRcbiIsIG5hbWUpOwotCQkJcmMgPSAt RUlOVkFMOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91 MzIob2Zfbm9kZSwKLQkJCQkJICAicWNvbSxtZHNzLWRzaS1taW4tcmVmcmVzaC1yYXRlIiwKLQkJ CQkJICAmdmFsKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10gTWluIHJlZnJlc2ggcmF0 ZSBpcyBub3QgZGVmaW5lZFxuIiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVy cm9yOwotCQl9Ci0JCWRmcHNfY2Fwcy0+bWluX3JlZnJlc2hfcmF0ZSA9IHZhbDsKLQotCQlyYyA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsCi0JCQkJCSAgInFjb20sbWRzcy1kc2ktbWF4 LXJlZnJlc2gtcmF0ZSIsCi0JCQkJCSAgJnZhbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZGVidWco Ilslc10gVXNpbmcgZGVmYXVsdCByZWZyZXNoIHJhdGVcbiIsIG5hbWUpOwotCQkJcmMgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAotCQkJCQkJInFjb20sbWRzcy1kc2ktcGFuZWwtZnJh bWVyYXRlIiwKLQkJCQkJCSZ2YWwpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJbJXNdIG1h eCByZWZyZXNoIHJhdGUgaXMgbm90IGRlZmluZWRcbiIsCi0JCQkJICAgICAgIG5hbWUpOwotCQkJ CXJjID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVycm9yOwotCQkJfQotCQl9Ci0JCWRmcHNfY2Fwcy0+ bWF4X3JlZnJlc2hfcmF0ZSA9IHZhbDsKLQotCQlpZiAoZGZwc19jYXBzLT5taW5fcmVmcmVzaF9y YXRlID4gZGZwc19jYXBzLT5tYXhfcmVmcmVzaF9yYXRlKSB7Ci0JCQlwcl9lcnIoIlslc10gbWlu IHJhdGUgPiBtYXggcmF0ZVxuIiwgbmFtZSk7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCX0KLQotCQlw cl9kZWJ1ZygiWyVzXSBERlBTIGlzIHN1cHBvcnRlZCAlZC0lZCwgbW9kZSAlZFxuIiwgbmFtZSwK LQkJCQlkZnBzX2NhcHMtPm1pbl9yZWZyZXNoX3JhdGUsCi0JCQkJZGZwc19jYXBzLT5tYXhfcmVm cmVzaF9yYXRlLAotCQkJCWRmcHNfY2Fwcy0+dHlwZSk7Ci0JCWRmcHNfY2Fwcy0+ZGZwc19zdXBw b3J0ID0gdHJ1ZTsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfcGFuZWxfcGFyc2VfdmlkZW9faG9zdF9jb25maWcoc3RydWN0IGRzaV92aWRlb19lbmdpbmVf Y2ZnICpjZmcsCi0JCQkJCSAgICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCQkg ICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsKLQljb25zdCBjaGFyICp0cmFm ZmljX21vZGU7Ci0JdTMyIHZjX2lkID0gMDsKLQl1MzIgdmFsID0gMDsKLQotCXJjID0gb2ZfcHJv cGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktaC1zeW5jLXB1bHNlIiwgJnZh bCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIGZhbGxiYWNrIHRvIGRlZmF1bHQgaC1z eW5jLXB1bHNlXG4iLCBuYW1lKTsKLQkJY2ZnLT5wdWxzZV9tb2RlX2hzYV9oZSA9IGZhbHNlOwot CX0gZWxzZSBpZiAodmFsID09IDEpIHsKLQkJY2ZnLT5wdWxzZV9tb2RlX2hzYV9oZSA9IHRydWU7 Ci0JfSBlbHNlIGlmICh2YWwgPT0gMCkgewotCQljZmctPnB1bHNlX21vZGVfaHNhX2hlID0gZmFs c2U7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCB2YWx1ZSBmb3IgbWRz cy1kc2ktaC1zeW5jLXB1bHNlXG4iLAotCQkgICAgICAgbmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsK LQkJZ290byBlcnJvcjsKLQl9Ci0KLQljZmctPmhmcF9scDExX2VuID0gb2ZfcHJvcGVydHlfcmVh ZF9ib29sKG9mX25vZGUsCi0JCQkJCQkicWNvbSxtZHNzLWRzaS1oZnAtcG93ZXItbW9kZSIpOwot Ci0JY2ZnLT5oYnBfbHAxMV9lbiA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAotCQkJ CQkJInFjb20sbWRzcy1kc2ktaGJwLXBvd2VyLW1vZGUiKTsKLQotCWNmZy0+aHNhX2xwMTFfZW4g PSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLWhz YS1wb3dlci1tb2RlIik7Ci0KLQljZmctPmxhc3RfbGluZV9pbnRlcmxlYXZlX2VuID0gb2ZfcHJv cGVydHlfcmVhZF9ib29sKG9mX25vZGUsCi0JCQkJCSJxY29tLG1kc3MtZHNpLWxhc3QtbGluZS1p bnRlcmxlYXZlIik7Ci0KLQljZmctPmVvZl9ibGxwX2xwMTFfZW4gPSBvZl9wcm9wZXJ0eV9yZWFk X2Jvb2wob2Zfbm9kZSwKLQkJCQkJInFjb20sbWRzcy1kc2ktYmxscC1lb2YtcG93ZXItbW9kZSIp OwotCi0JY2ZnLT5ibGxwX2xwMTFfZW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwK LQkJCQkJInFjb20sbWRzcy1kc2ktYmxscC1wb3dlci1tb2RlIik7Ci0KLQl0cmFmZmljX21vZGUg PSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwKLQkJCQkgICAgICAgInFjb20sbWRzcy1kc2ktdHJh ZmZpYy1tb2RlIiwKLQkJCQkgICAgICAgTlVMTCk7Ci0JaWYgKCF0cmFmZmljX21vZGUpIHsKLQkJ cHJfZGVidWcoIlslc10gRmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgdHJhZmZpYyBtb2RlXG4iLCBu YW1lKTsKLQkJY2ZnLT50cmFmZmljX21vZGUgPSBEU0lfVklERU9fVFJBRkZJQ19TWU5DX1BVTFNF UzsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodHJhZmZpY19tb2RlLCAibm9uX2J1cnN0X3N5bmNfcHVs c2UiKSkgewotCQljZmctPnRyYWZmaWNfbW9kZSA9IERTSV9WSURFT19UUkFGRklDX1NZTkNfUFVM U0VTOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmFmZmljX21vZGUsICJub25fYnVyc3Rfc3luY19l dmVudCIpKSB7Ci0JCWNmZy0+dHJhZmZpY19tb2RlID0gRFNJX1ZJREVPX1RSQUZGSUNfU1lOQ19T VEFSVF9FVkVOVFM7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRyYWZmaWNfbW9kZSwgImJ1cnN0X21v ZGUiKSkgewotCQljZmctPnRyYWZmaWNfbW9kZSA9IERTSV9WSURFT19UUkFGRklDX0JVUlNUX01P REU7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCB0cmFmZmljIG1vZGUt JXNcbiIsIG5hbWUsCi0JCSAgICAgICB0cmFmZmljX21vZGUpOwotCQlyYyA9IC1FSU5WQUw7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAi cWNvbSxtZHNzLWRzaS12aXJ0dWFsLWNoYW5uZWwtaWQiLAotCQkJCSAgJnZjX2lkKTsKLQlpZiAo cmMpIHsKLQkJcHJfZGVidWcoIlslc10gRmFsbGJhY2sgdG8gZGVmYXVsdCB2YyBpZFxuIiwgbmFt ZSk7Ci0JCWNmZy0+dmNfaWQgPSAwOwotCX0gZWxzZSB7Ci0JCWNmZy0+dmNfaWQgPSB2Y19pZDsK LQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFy c2VfY21kX2hvc3RfY29uZmlnKHN0cnVjdCBkc2lfY21kX2VuZ2luZV9jZmcgKmNmZywKLQkJCQkJ ICAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCQkgICBjb25zdCBjaGFyICpuYW1l KQotewotCXUzMiB2YWwgPSAwOwotCWludCByYyA9IDA7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXdyLW1lbS1zdGFydCIsICZ2YWwpOwotCWlm IChyYykgewotCQlwcl9kZWJ1ZygiWyVzXSBGYWxsYmFjayB0byBkZWZhdWx0IHdyLW1lbS1zdGFy dFxuIiwgbmFtZSk7Ci0JCWNmZy0+d3JfbWVtX3N0YXJ0ID0gMHgyQzsKLQl9IGVsc2UgewotCQlj ZmctPndyX21lbV9zdGFydCA9IHZhbDsKLQl9Ci0KLQl2YWwgPSAwOwotCXJjID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktd3ItbWVtLWNvbnRpbnVlIiwKLQkJ CQkgICZ2YWwpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiWyVzXSBGYWxsYmFjayB0byBkZWZh dWx0IHdyLW1lbS1jb250aW51ZVxuIiwgbmFtZSk7Ci0JCWNmZy0+d3JfbWVtX2NvbnRpbnVlID0g MHgzQzsKLQl9IGVsc2UgewotCQljZmctPndyX21lbV9jb250aW51ZSA9IHZhbDsKLQl9Ci0KLQkv KiBUT0RPOiAgZml4IGZvbGxvd2luZyAqLwotCWNmZy0+bWF4X2NtZF9wYWNrZXRzX2ludGVybGVh dmUgPSAwOwotCi0JdmFsID0gMDsKLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUs ICJxY29tLG1kc3MtZHNpLXRlLWRjcy1jb21tYW5kIiwKLQkJCQkgICZ2YWwpOwotCWlmIChyYykg ewotCQlwcl9kZWJ1ZygiWyVzXSBmYWxsYmFjayB0byBkZWZhdWx0IHRlLWRjcy1jbWRcbiIsIG5h bWUpOwotCQljZmctPmluc2VydF9kY3NfY29tbWFuZCA9IHRydWU7Ci0JfSBlbHNlIGlmICh2YWwg PT0gMSkgewotCQljZmctPmluc2VydF9kY3NfY29tbWFuZCA9IHRydWU7Ci0JfSBlbHNlIGlmICh2 YWwgPT0gMCkgewotCQljZmctPmluc2VydF9kY3NfY29tbWFuZCA9IGZhbHNlOwotCX0gZWxzZSB7 Ci0JCXByX2VycigiWyVzXSBVbnJlY29nbml6ZWQgdmFsdWUgZm9yIG1kc3MtZHNpLXRlLWRjcy1j b21tYW5kXG4iLAotCQkgICAgICAgbmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJv cjsKLQl9Ci0KLQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1t ZHAtdHJhbnNmZXItdGltZS11cyIsCi0JCQkJJnZhbCkpIHsKLQkJcHJfZGVidWcoIlslc10gRmFs bGJhY2sgdG8gZGVmYXVsdCB0cmFuc2Zlci10aW1lLXVzXG4iLCBuYW1lKTsKLQkJY2ZnLT5tZHBf dHJhbnNmZXJfdGltZV91cyA9IERFRkFVTFRfTURQX1RSQU5TRkVSX1RJTUU7Ci0JfSBlbHNlIHsK LQkJY2ZnLT5tZHBfdHJhbnNmZXJfdGltZV91cyA9IHZhbDsKLQl9Ci0KLWVycm9yOgotCXJldHVy biByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfcGFuZWxfbW9kZShzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUp Ci17Ci0JaW50IHJjID0gMDsKLQllbnVtIGRzaV9vcF9tb2RlIHBhbmVsX21vZGU7Ci0JY29uc3Qg Y2hhciAqbW9kZTsKLQotCW1vZGUgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sbWRz cy1kc2ktcGFuZWwtdHlwZSIsIE5VTEwpOwotCWlmICghbW9kZSkgewotCQlwcl9kZWJ1ZygiWyVz XSBGYWxsYmFjayB0byBkZWZhdWx0IHBhbmVsIG1vZGVcbiIsIHBhbmVsLT5uYW1lKTsKLQkJcGFu ZWxfbW9kZSA9IERTSV9PUF9WSURFT19NT0RFOwotCX0gZWxzZSBpZiAoIXN0cmNtcChtb2RlLCAi ZHNpX3ZpZGVvX21vZGUiKSkgewotCQlwYW5lbF9tb2RlID0gRFNJX09QX1ZJREVPX01PREU7Ci0J fSBlbHNlIGlmICghc3RyY21wKG1vZGUsICJkc2lfY21kX21vZGUiKSkgewotCQlwYW5lbF9tb2Rl ID0gRFNJX09QX0NNRF9NT0RFOwotCX0gZWxzZSB7Ci0JCXByX2VycigiWyVzXSBVbnJlY29nbml6 ZWQgcGFuZWwgdHlwZS0lc1xuIiwgcGFuZWwtPm5hbWUsIG1vZGUpOwotCQlyYyA9IC1FSU5WQUw7 Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKHBhbmVsX21vZGUgPT0gRFNJX09QX1ZJREVPX01P REUpIHsKLQkJcmMgPSBkc2lfcGFuZWxfcGFyc2VfdmlkZW9faG9zdF9jb25maWcoJnBhbmVsLT52 aWRlb19jb25maWcsCi0JCQkJCQkgICAgICAgb2Zfbm9kZSwKLQkJCQkJCSAgICAgICBwYW5lbC0+ bmFtZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNdIEZhaWxlZCB0byBwYXJzZSB2aWRl byBob3N0IGNmZywgcmM9JWRcbiIsCi0JCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJCWdv dG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlpZiAocGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUp IHsKLQkJcmMgPSBkc2lfcGFuZWxfcGFyc2VfY21kX2hvc3RfY29uZmlnKCZwYW5lbC0+Y21kX2Nv bmZpZywKLQkJCQkJCSAgICAgb2Zfbm9kZSwKLQkJCQkJCSAgICAgcGFuZWwtPm5hbWUpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBGYWlsZWQgdG8gcGFyc2UgY21kIGhvc3QgY29uZmln LCByYz0lZFxuIiwKLQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsK LQkJfQotCX0KLQotCXBhbmVsLT5wYW5lbF9tb2RlID0gcGFuZWxfbW9kZTsKLWVycm9yOgotCXJl dHVybiByYzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfcGh5X3Byb3BzKHN0cnVj dCBkc2lfcGFuZWxfcGh5X3Byb3BzICpwcm9wcywKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9k ZSAqb2Zfbm9kZSwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JaW50IHJjID0gMDsK LQl1MzIgdmFsID0gMDsKLQljb25zdCBjaGFyICpzdHI7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKG9mX25vZGUsCi0JCQkJICAicWNvbSxtZHNzLXBhbi1waHlzaWNhbC13aWR0aC1kaW1l bnNpb24iLAotCQkJCSAgJnZhbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJbJXNdIFBoeXNp Y2FsIHBhbmVsIHdpZHRoIGlzIG5vdCBkZWZpbmVkXG4iLCBuYW1lKTsKLQkJcHJvcHMtPnBhbmVs X3dpZHRoX21tID0gMDsKLQkJcmMgPSAwOwotCX0gZWxzZSB7Ci0JCXByb3BzLT5wYW5lbF93aWR0 aF9tbSA9IHZhbDsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsCi0J CQkJICAicWNvbSxtZHNzLXBhbi1waHlzaWNhbC1oZWlnaHQtZGltZW5zaW9uIiwKLQkJCQkgICZ2 YWwpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiWyVzXSBQaHlzaWNhbCBwYW5lbCBoZWlnaHQg aXMgbm90IGRlZmluZWRcbiIsIG5hbWUpOwotCQlwcm9wcy0+cGFuZWxfaGVpZ2h0X21tID0gMDsK LQkJcmMgPSAwOwotCX0gZWxzZSB7Ci0JCXByb3BzLT5wYW5lbF9oZWlnaHRfbW0gPSB2YWw7Ci0J fQotCi0Jc3RyID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsICJxY29tLG1kc3MtZHNpLXBhbmVs LW9yaWVudGF0aW9uIiwgTlVMTCk7Ci0JaWYgKCFzdHIpIHsKLQkJcHJvcHMtPnJvdGF0aW9uID0g RFNJX1BBTkVMX1JPVEFURV9OT05FOwotCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICIxODAiKSkg ewotCQlwcm9wcy0+cm90YXRpb24gPSBEU0lfUEFORUxfUk9UQVRFX0hWX0ZMSVA7Ci0JfSBlbHNl IGlmICghc3RyY21wKHN0ciwgImhmbGlwIikpIHsKLQkJcHJvcHMtPnJvdGF0aW9uID0gRFNJX1BB TkVMX1JPVEFURV9IX0ZMSVA7Ci0JfSBlbHNlIGlmICghc3RyY21wKHN0ciwgInZmbGlwIikpIHsK LQkJcHJvcHMtPnJvdGF0aW9uID0gRFNJX1BBTkVMX1JPVEFURV9WX0ZMSVA7Ci0JfSBlbHNlIHsK LQkJcHJfZXJyKCJbJXNdIFVucmVjb2duaXplZCBwYW5lbCByb3RhdGlvbi0lc1xuIiwgbmFtZSwg c3RyKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLWVycm9yOgotCXJldHVy biByYzsKLX0KLWNvbnN0IGNoYXIgKmNtZF9zZXRfcHJvcF9tYXBbRFNJX0NNRF9TRVRfTUFYXSA9 IHsKLQkicWNvbSxtZHNzLWRzaS1wcmUtb24tY29tbWFuZCIsCi0JInFjb20sbWRzcy1kc2ktb24t Y29tbWFuZCIsCi0JInFjb20sbWRzcy1kc2ktcG9zdC1wYW5lbC1vbi1jb21tYW5kIiwKLQkicWNv bSxtZHNzLWRzaS1wcmUtb2ZmLWNvbW1hbmQiLAotCSJxY29tLG1kc3MtZHNpLW9mZi1jb21tYW5k IiwKLQkicWNvbSxtZHNzLWRzaS1wb3N0LW9mZi1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1w cmUtcmVzLXN3aXRjaCIsCi0JInFjb20sbWRzcy1kc2ktcmVzLXN3aXRjaCIsCi0JInFjb20sbWRz cy1kc2ktcG9zdC1yZXMtc3dpdGNoIiwKLQkicWNvbSxjbWQtdG8tdmlkZW8tbW9kZS1zd2l0Y2gt Y29tbWFuZHMiLAotCSJxY29tLGNtZC10by12aWRlby1tb2RlLXBvc3Qtc3dpdGNoLWNvbW1hbmRz IiwKLQkicWNvbSx2aWRlby10by1jbWQtbW9kZS1zd2l0Y2gtY29tbWFuZHMiLAotCSJxY29tLHZp ZGVvLXRvLWNtZC1tb2RlLXBvc3Qtc3dpdGNoLWNvbW1hbmRzIiwKLQkicWNvbSxtZHNzLWRzaS1w YW5lbC1zdGF0dXMtY29tbWFuZCIsCi0JInFjb20sbWRzcy1kc2ktbHAxLWNvbW1hbmQiLAotCSJx Y29tLG1kc3MtZHNpLWxwMi1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1ub2xwLWNvbW1hbmQi LAotCSJQUFMgbm90IHBhcnNlZCBmcm9tIERUU0ksIGdlbmVyYXRlZCBkeW5hbWljYWxseSIsCi0J InFjb20sbWRzcy1kc2ktdGltaW5nLXN3aXRjaC1jb21tYW5kIiwKLQkicWNvbSxtZHNzLWRzaS1w b3N0LW1vZGUtc3dpdGNoLW9uLWNvbW1hbmQiLAotfTsKLQotY29uc3QgY2hhciAqY21kX3NldF9z dGF0ZV9tYXBbRFNJX0NNRF9TRVRfTUFYXSA9IHsKLQkicWNvbSxtZHNzLWRzaS1wcmUtb24tY29t bWFuZC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2ktb24tY29tbWFuZC1zdGF0ZSIsCi0JInFjb20s bWRzcy1kc2ktcG9zdC1vbi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wcmUtb2Zm LWNvbW1hbmQtc3RhdGUiLAotCSJxY29tLG1kc3MtZHNpLW9mZi1jb21tYW5kLXN0YXRlIiwKLQki cWNvbSxtZHNzLWRzaS1wb3N0LW9mZi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1w cmUtcmVzLXN3aXRjaC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2ktcmVzLXN3aXRjaC1zdGF0ZSIs Ci0JInFjb20sbWRzcy1kc2ktcG9zdC1yZXMtc3dpdGNoLXN0YXRlIiwKLQkicWNvbSxjbWQtdG8t dmlkZW8tbW9kZS1zd2l0Y2gtY29tbWFuZHMtc3RhdGUiLAotCSJxY29tLGNtZC10by12aWRlby1t b2RlLXBvc3Qtc3dpdGNoLWNvbW1hbmRzLXN0YXRlIiwKLQkicWNvbSx2aWRlby10by1jbWQtbW9k ZS1zd2l0Y2gtY29tbWFuZHMtc3RhdGUiLAotCSJxY29tLHZpZGVvLXRvLWNtZC1tb2RlLXBvc3Qt c3dpdGNoLWNvbW1hbmRzLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtY29t bWFuZC1zdGF0ZSIsCi0JInFjb20sbWRzcy1kc2ktbHAxLWNvbW1hbmQtc3RhdGUiLAotCSJxY29t LG1kc3MtZHNpLWxwMi1jb21tYW5kLXN0YXRlIiwKLQkicWNvbSxtZHNzLWRzaS1ub2xwLWNvbW1h bmQtc3RhdGUiLAotCSJQUFMgbm90IHBhcnNlZCBmcm9tIERUU0ksIGdlbmVyYXRlZCBkeW5hbWlj YWxseSIsCi0JInFjb20sbWRzcy1kc2ktdGltaW5nLXN3aXRjaC1jb21tYW5kLXN0YXRlIiwKLQki cWNvbSxtZHNzLWRzaS1wb3N0LW1vZGUtc3dpdGNoLW9uLWNvbW1hbmQtc3RhdGUiLAotfTsKLQot c3RhdGljIGludCBkc2lfcGFuZWxfZ2V0X2NtZF9wa3RfY291bnQoY29uc3QgY2hhciAqZGF0YSwg dTMyIGxlbmd0aCwgdTMyICpjbnQpCi17Ci0JY29uc3QgdTMyIGNtZF9zZXRfbWluX3NpemUgPSA3 OwotCXUzMiBjb3VudCA9IDA7Ci0JdTMyIHBhY2tldF9sZW5ndGg7Ci0JdTMyIHRtcDsKLQotCXdo aWxlIChsZW5ndGggPj0gY21kX3NldF9taW5fc2l6ZSkgewotCQlwYWNrZXRfbGVuZ3RoID0gY21k X3NldF9taW5fc2l6ZTsKLQkJdG1wID0gKChkYXRhWzVdIDw8IDgpIHwgKGRhdGFbNl0pKTsKLQkJ cGFja2V0X2xlbmd0aCArPSB0bXA7Ci0JCWlmIChwYWNrZXRfbGVuZ3RoID4gbGVuZ3RoKSB7Ci0J CQlwcl9lcnIoImZvcm1hdCBlcnJvclxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQls ZW5ndGggLT0gcGFja2V0X2xlbmd0aDsKLQkJZGF0YSArPSBwYWNrZXRfbGVuZ3RoOwotCQljb3Vu dCsrOwotCX07Ci0KLQkqY250ID0gY291bnQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX3BhbmVsX2NyZWF0ZV9jbWRfcGFja2V0cyhjb25zdCBjaGFyICpkYXRhLAotCQkJCQl1MzIg bGVuZ3RoLAotCQkJCQl1MzIgY291bnQsCi0JCQkJCXN0cnVjdCBkc2lfY21kX2Rlc2MgKmNtZCkK LXsKLQlpbnQgcmMgPSAwOwotCWludCBpLCBqOwotCXU4ICpwYXlsb2FkOwotCi0JZm9yIChpID0g MDsgaSA8IGNvdW50OyBpKyspIHsKLQkJdTMyIHNpemU7Ci0KLQkJY21kW2ldLm1zZy50eXBlID0g ZGF0YVswXTsKLQkJY21kW2ldLmxhc3RfY29tbWFuZCA9IChkYXRhWzFdID09IDEgPyB0cnVlIDog ZmFsc2UpOwotCQljbWRbaV0ubXNnLmNoYW5uZWwgPSBkYXRhWzJdOwotCQljbWRbaV0ubXNnLmZs YWdzIHw9IChkYXRhWzNdID09IDEgPyBNSVBJX0RTSV9NU0dfUkVRX0FDSyA6IDApOwotCQljbWRb aV0ubXNnLmN0cmwgPSAwOwotCQljbWRbaV0ucG9zdF93YWl0X21zID0gZGF0YVs0XTsKLQkJY21k W2ldLm1zZy50eF9sZW4gPSAoKGRhdGFbNV0gPDwgOCkgfCAoZGF0YVs2XSkpOwotCi0JCXNpemUg PSBjbWRbaV0ubXNnLnR4X2xlbiAqIHNpemVvZih1OCk7Ci0KLQkJcGF5bG9hZCA9IGt6YWxsb2Mo c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGF5bG9hZCkgewotCQkJcmMgPSAtRU5PTUVNOwot CQkJZ290byBlcnJvcl9mcmVlX3BheWxvYWRzOwotCQl9Ci0KLQkJZm9yIChqID0gMDsgaiA8IGNt ZFtpXS5tc2cudHhfbGVuOyBqKyspCi0JCQlwYXlsb2FkW2pdID0gZGF0YVs3ICsgal07Ci0KLQkJ Y21kW2ldLm1zZy50eF9idWYgPSBwYXlsb2FkOwotCQlkYXRhICs9ICg3ICsgY21kW2ldLm1zZy50 eF9sZW4pOwotCX0KLQotCXJldHVybiByYzsKLWVycm9yX2ZyZWVfcGF5bG9hZHM6Ci0JZm9yIChp ID0gaSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWNtZC0tOwotCQlrZnJlZShjbWQtPm1zZy50eF9i dWYpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBkc2lfcGFuZWxfZGVzdHJveV9jbWRf cGFja2V0cyhzdHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgKnNldCkKLXsKLQl1MzIgaSA9IDA7Ci0J c3RydWN0IGRzaV9jbWRfZGVzYyAqY21kOwotCi0JZm9yIChpID0gMDsgaSA8IHNldC0+Y291bnQ7 IGkrKykgewotCQljbWQgPSAmc2V0LT5jbWRzW2ldOwotCQlrZnJlZShjbWQtPm1zZy50eF9idWYp OwotCX0KLQotCWtmcmVlKHNldC0+Y21kcyk7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX2Fs bG9jX2NtZF9wYWNrZXRzKHN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCAqY21kLAotCQkJCQl1MzIg cGFja2V0X2NvdW50KQotewotCXUzMiBzaXplOwotCi0Jc2l6ZSA9IHBhY2tldF9jb3VudCAqIHNp emVvZigqY21kLT5jbWRzKTsKLQljbWQtPmNtZHMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwp OwotCWlmICghY21kLT5jbWRzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+Y291bnQgPSBw YWNrZXRfY291bnQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNl X2NtZF9zZXRzX3N1YihzdHJ1Y3QgZHNpX3BhbmVsX2NtZF9zZXQgKmNtZCwKLQkJCQkJZW51bSBk c2lfY21kX3NldF90eXBlIHR5cGUsCi0JCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkK LXsKLQlpbnQgcmMgPSAwOwotCXUzMiBsZW5ndGggPSAwOwotCWNvbnN0IGNoYXIgKmRhdGE7Ci0J Y29uc3QgY2hhciAqc3RhdGU7Ci0JdTMyIHBhY2tldF9jb3VudCA9IDA7Ci0KLQlkYXRhID0gb2Zf Z2V0X3Byb3BlcnR5KG9mX25vZGUsIGNtZF9zZXRfcHJvcF9tYXBbdHlwZV0sICZsZW5ndGgpOwot CWlmICghZGF0YSkgewotCQlwcl9kZWJ1ZygiJXMgY29tbWFuZHMgbm90IGRlZmluZWRcbiIsIGNt ZF9zZXRfcHJvcF9tYXBbdHlwZV0pOwotCQlyYyA9IC1FTk9UU1VQUDsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9nZXRfY21kX3BrdF9jb3VudChkYXRhLCBsZW5ndGgsICZw YWNrZXRfY291bnQpOwotCWlmIChyYykgewotCQlwcl9lcnIoImNvbW1hbmRzIGZhaWxlZCwgcmM9 JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcHJfZGVidWcoIlslc10gcGFja2V0LWNv dW50PSVkLCAlZFxuIiwgY21kX3NldF9wcm9wX21hcFt0eXBlXSwKLQkJcGFja2V0X2NvdW50LCBs ZW5ndGgpOwotCi0JcmMgPSBkc2lfcGFuZWxfYWxsb2NfY21kX3BhY2tldHMoY21kLCBwYWNrZXRf Y291bnQpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBjbWQgcGFj a2V0cywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5l bF9jcmVhdGVfY21kX3BhY2tldHMoZGF0YSwgbGVuZ3RoLCBwYWNrZXRfY291bnQsCi0JCQkJCSAg Y21kLT5jbWRzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIGNtZCBw YWNrZXRzLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yX2ZyZWVfbWVtOwotCX0KLQotCXN0 YXRlID0gb2ZfZ2V0X3Byb3BlcnR5KG9mX25vZGUsIGNtZF9zZXRfc3RhdGVfbWFwW3R5cGVdLCBO VUxMKTsKLQlpZiAoIXN0YXRlIHx8ICFzdHJjbXAoc3RhdGUsICJkc2lfbHBfbW9kZSIpKSB7Ci0J CWNtZC0+c3RhdGUgPSBEU0lfQ01EX1NFVF9TVEFURV9MUDsKLQl9IGVsc2UgaWYgKCFzdHJjbXAo c3RhdGUsICJkc2lfaHNfbW9kZSIpKSB7Ci0JCWNtZC0+c3RhdGUgPSBEU0lfQ01EX1NFVF9TVEFU RV9IUzsKLQl9IGVsc2UgewotCQlwcl9lcnIoIlslc10gY29tbWFuZCBzdGF0ZSB1bnJlY29nbml6 ZWQtJXNcbiIsCi0JCSAgICAgICBjbWRfc2V0X3N0YXRlX21hcFt0eXBlXSwgc3RhdGUpOwotCQln b3RvIGVycm9yX2ZyZWVfbWVtOwotCX0KLQotCXJldHVybiByYzsKLWVycm9yX2ZyZWVfbWVtOgot CWtmcmVlKGNtZC0+Y21kcyk7Ci0JY21kLT5jbWRzID0gTlVMTDsKLWVycm9yOgotCXJldHVybiBy YzsKLQotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9jbWRfc2V0cygKLQkJc3RydWN0 IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm8sCi0JCXN0cnVjdCBkZXZpY2Vf bm9kZSAqb2Zfbm9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfcGFuZWxfY21kX3Nl dCAqc2V0OwotCXUzMiBpOwotCi0JaWYgKCFwcml2X2luZm8pIHsKLQkJcHJfZXJyKCJpbnZhbGlk IG1vZGUgcHJpdiBpbmZvXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0g RFNJX0NNRF9TRVRfUFJFX09OOyBpIDwgRFNJX0NNRF9TRVRfTUFYOyBpKyspIHsKLQkJc2V0ID0g JnByaXZfaW5mby0+Y21kX3NldHNbaV07Ci0JCXNldC0+dHlwZSA9IGk7Ci0JCXNldC0+Y291bnQg PSAwOwotCi0JCWlmIChpID09IERTSV9DTURfU0VUX1BQUykgewotCQkJcmMgPSBkc2lfcGFuZWxf YWxsb2NfY21kX3BhY2tldHMoc2V0LCAxKTsKLQkJCWlmIChyYykKLQkJCQlwcl9lcnIoImZhaWxl ZCB0byBhbGxvY2F0ZSBjbWQgc2V0ICVkLCByYyA9ICVkXG4iLAotCQkJCQlpLCByYyk7Ci0JCQlz ZXQtPnN0YXRlID0gRFNJX0NNRF9TRVRfU1RBVEVfTFA7Ci0JCX0gZWxzZSB7Ci0JCQlyYyA9IGRz aV9wYW5lbF9wYXJzZV9jbWRfc2V0c19zdWIoc2V0LCBpLCBvZl9ub2RlKTsKLQkJCWlmIChyYykK LQkJCQlwcl9kZWJ1ZygiZmFpbGVkIHRvIHBhcnNlIHNldCAlZFxuIiwgaSk7Ci0JCX0KLQl9Ci0K LQlyYyA9IDA7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9y ZXNldF9zZXF1ZW5jZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgICBzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgaTsKLQl1MzIgbGVu Z3RoID0gMDsKLQl1MzIgY291bnQgPSAwOwotCXUzMiBzaXplID0gMDsKLQl1MzIgKmFycl8zMiA9 IE5VTEw7Ci0JY29uc3QgdTMyICphcnI7Ci0Jc3RydWN0IGRzaV9yZXNldF9zZXEgKnNlcTsKLQot CWFyciA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNzLWRzaS1yZXNldC1zZXF1 ZW5jZSIsICZsZW5ndGgpOwotCWlmICghYXJyKSB7Ci0JCXByX2VycigiWyVzXSBkc2ktcmVzZXQt c2VxdWVuY2Ugbm90IGZvdW5kXG4iLCBwYW5lbC0+bmFtZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJ Z290byBlcnJvcjsKLQl9Ci0JaWYgKGxlbmd0aCAmIDB4MSkgewotCQlwcl9lcnIoIlslc10gc3lu dGF4IGVycm9yIGZvciBkc2ktcmVzZXQtc2VxdWVuY2VcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFt ZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcl9lcnIoIlJFU0VU IFNFUSBMRU5HVEggPSAlZFxuIiwgbGVuZ3RoKTsKLQlsZW5ndGggPSBsZW5ndGggLyBzaXplb2Yo dTMyKTsKLQotCXNpemUgPSBsZW5ndGggKiBzaXplb2YodTMyKTsKLQotCWFycl8zMiA9IGt6YWxs b2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhcnJfMzIpIHsKLQkJcmMgPSAtRU5PTUVNOwot CQlnb3RvIGVycm9yOwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkob2Zf bm9kZSwgInFjb20sbWRzcy1kc2ktcmVzZXQtc2VxdWVuY2UiLAotCQkJCQlhcnJfMzIsIGxlbmd0 aCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBjYW5ub3QgcmVhZCBkc28tcmVzZXQtc2Vx aWVuY2VcbiIsIHBhbmVsLT5uYW1lKTsKLQkJZ290byBlcnJvcl9mcmVlX2Fycl8zMjsKLQl9Ci0K LQljb3VudCA9IGxlbmd0aCAvIDI7Ci0Jc2l6ZSA9IGNvdW50ICogc2l6ZW9mKCpzZXEpOwotCXNl cSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZXEpIHsKLQkJcmMgPSAtRU5P TUVNOwotCQlnb3RvIGVycm9yX2ZyZWVfYXJyXzMyOwotCX0KLQotCXBhbmVsLT5yZXNldF9jb25m aWcuc2VxdWVuY2UgPSBzZXE7Ci0JcGFuZWwtPnJlc2V0X2NvbmZpZy5jb3VudCA9IGNvdW50Owot Ci0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAyKSB7Ci0JCXNlcS0+bGV2ZWwgPSBhcnJf MzJbaV07Ci0JCXNlcS0+c2xlZXBfbXMgPSBhcnJfMzJbaSArIDFdOwotCQlzZXErKzsKLQl9Ci0K LQotZXJyb3JfZnJlZV9hcnJfMzI6Ci0Ja2ZyZWUoYXJyXzMyKTsKLWVycm9yOgotCXJldHVybiBy YzsKLX0KLQotc3RhdGljIGludCBkc2lfcGFuZWxfcGFyc2VfbWlzY19mZWF0dXJlcyhzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkK LXsKLQlwYW5lbC0+dWxwc19lbmFibGVkID0KLQkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9mX25v ZGUsICJxY29tLHVscHMtZW5hYmxlZCIpOwotCi0JaWYgKHBhbmVsLT51bHBzX2VuYWJsZWQpCi0J CXByX2RlYnVnKCJ1bHBzX2VuYWJsZWQ6JWRcbiIsIHBhbmVsLT51bHBzX2VuYWJsZWQpOwotCi0J cGFuZWwtPnRlX3VzaW5nX3dhdGNoZG9nX3RpbWVyID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9m X25vZGUsCi0JCQkJCSJxY29tLG1kc3MtZHNpLXRlLXVzaW5nLXdkIik7Ci0KLQlwYW5lbC0+c3lu Y19icm9hZGNhc3RfZW4gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCSJxY29t LGNtZC1zeW5jLXdhaXQtYnJvYWRjYXN0Iik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQg ZHNpX3BhbmVsX3BhcnNlX2ppdHRlcl9jb25maWcoCi0JCQkJc3RydWN0IGRzaV9kaXNwbGF5X21v ZGUgKm1vZGUsCi0JCQkJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCWludCByYzsK LQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8gKnByaXZfaW5mbzsKLQl1MzIgaml0 dGVyW0RFRkFVTFRfUEFORUxfSklUVEVSX0FSUkFZX1NJWkVdID0gezAsIDB9OwotCXU2NCBqaXR0 ZXJfdmFsID0gMDsKLQotCXByaXZfaW5mbyA9IG1vZGUtPnByaXZfaW5mbzsKLQotCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzJfYXJyYXkob2Zfbm9kZSwgInFjb20sbWRzcy1kc2ktcGFuZWwtaml0 dGVyIiwKLQkJCQlqaXR0ZXIsIERFRkFVTFRfUEFORUxfSklUVEVSX0FSUkFZX1NJWkUpOwotCWlm IChyYykgewotCQlwcl9kZWJ1ZygicGFuZWwgaml0dGVyIG5vdCBkZWZpbmVkIHJjPSVkXG4iLCBy Yyk7Ci0JfSBlbHNlIHsKLQkJaml0dGVyX3ZhbCA9IGppdHRlclswXTsKLQkJaml0dGVyX3ZhbCA9 IGRpdl91NjQoaml0dGVyX3ZhbCwgaml0dGVyWzFdKTsKLQl9Ci0KLQlpZiAocmMgfHwgIWppdHRl cl92YWwgfHwgKGppdHRlcl92YWwgPiBNQVhfUEFORUxfSklUVEVSKSkgewotCQlwcml2X2luZm8t PnBhbmVsX2ppdHRlcl9udW1lciA9IERFRkFVTFRfUEFORUxfSklUVEVSX05VTUVSQVRPUjsKLQkJ cHJpdl9pbmZvLT5wYW5lbF9qaXR0ZXJfZGVub20gPQotCQkJCQlERUZBVUxUX1BBTkVMX0pJVFRF Ul9ERU5PTUlOQVRPUjsKLQl9IGVsc2UgewotCQlwcml2X2luZm8tPnBhbmVsX2ppdHRlcl9udW1l ciA9IGppdHRlclswXTsKLQkJcHJpdl9pbmZvLT5wYW5lbF9qaXR0ZXJfZGVub20gPSBqaXR0ZXJb MV07Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNz LWRzaS1wYW5lbC1wcmVmaWxsLWxpbmVzIiwKLQkJCQkgICZwcml2X2luZm8tPnBhbmVsX3ByZWZp bGxfbGluZXMpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygicGFuZWwgcHJlZmlsbCBsaW5lcyBh cmUgbm90IGRlZmluZWQgcmM9JWRcbiIsIHJjKTsKLQkJcHJpdl9pbmZvLT5wYW5lbF9wcmVmaWxs X2xpbmVzID0gREVGQVVMVF9QQU5FTF9QUkVGSUxMX0xJTkVTOwotCX0gZWxzZSBpZiAocHJpdl9p bmZvLT5wYW5lbF9wcmVmaWxsX2xpbmVzID49Ci0JCQkJCURTSV9WX1RPVEFMKCZtb2RlLT50aW1p bmcpKSB7Ci0JCXByX2RlYnVnKCJpbnZhbGlkIHByZWZpbGwgbGluZXMgY29uZmlnPSVkIHNldHRp bmcgdG86JWRcbiIsCi0JCXByaXZfaW5mby0+cGFuZWxfcHJlZmlsbF9saW5lcywgREVGQVVMVF9Q QU5FTF9QUkVGSUxMX0xJTkVTKTsKLQotCQlwcml2X2luZm8tPnBhbmVsX3ByZWZpbGxfbGluZXMg PSBERUZBVUxUX1BBTkVMX1BSRUZJTExfTElORVM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX3Bvd2VyX2NmZyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQs Ci0JCQkJICAgICBzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgICAgIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSBkc2lfcHdyX29mX2dl dF92cmVnX2RhdGEob2Zfbm9kZSwKLQkJCQkJICAmcGFuZWwtPnBvd2VyX2luZm8sCi0JCQkJCSAg InFjb20scGFuZWwtc3VwcGx5LWVudHJpZXMiKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNd IGZhaWxlZCB0byBwYXJzZSB2cmVnc1xuIiwgcGFuZWwtPm5hbWUpOwotCQlnb3RvIGVycm9yOwot CX0KLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJz ZV9ncGlvcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCQkgc3RydWN0IGRldmljZV9ub2Rl ICpvZl9ub2RlKQotewotCWludCByYyA9IDA7Ci0JY29uc3QgY2hhciAqZGF0YTsKLQotCXBhbmVs LT5yZXNldF9jb25maWcucmVzZXRfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG9mX25vZGUsCi0J CQkJCSAgICAgICJxY29tLHBsYXRmb3JtLXJlc2V0LWdwaW8iLAotCQkJCQkgICAgICAwKTsKLQlp ZiAoIWdwaW9faXNfdmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5yZXNldF9ncGlvKSkgewotCQlw cl9lcnIoIlslc10gZmFpbGVkIGdldCByZXNldCBncGlvLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUs IHJjKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCXBhbmVsLT5yZXNl dF9jb25maWcuZGlzcF9lbl9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8ob2Zfbm9kZSwKLQkJCQkJ CSJxY29tLDV2LWJvb3N0LWdwaW8iLAotCQkJCQkJMCk7Ci0JaWYgKCFncGlvX2lzX3ZhbGlkKHBh bmVsLT5yZXNldF9jb25maWcuZGlzcF9lbl9ncGlvKSkgewotCQlwcl9kZWJ1ZygiWyVzXSA1di1i b290LWdwaW8gaXMgbm90IHNldCwgcmM9JWRcbiIsCi0JCQkgcGFuZWwtPm5hbWUsIHJjKTsKLQkJ cGFuZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2VuX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhvZl9u b2RlLAotCQkJCQkJCSJxY29tLHBsYXRmb3JtLWVuLWdwaW8iLAotCQkJCQkJCTApOwotCQlpZiAo IWdwaW9faXNfdmFsaWQocGFuZWwtPnJlc2V0X2NvbmZpZy5kaXNwX2VuX2dwaW8pKSB7Ci0JCQlw cl9kZWJ1ZygiWyVzXSBwbGF0Zm9ybS1lbi1ncGlvIGlzIG5vdCBzZXQsIHJjPSVkXG4iLAotCQkJ CSBwYW5lbC0+bmFtZSwgcmMpOwotCQl9Ci0JfQotCi0JcGFuZWwtPnJlc2V0X2NvbmZpZy5sY2Rf bW9kZV9zZWxfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG9mX25vZGUsCi0JCSJxY29tLHBhbmVs LW1vZGUtZ3BpbyIsIDApOwotCWlmICghZ3Bpb19pc192YWxpZChwYW5lbC0+cmVzZXRfY29uZmln LmxjZF9tb2RlX3NlbF9ncGlvKSkKLQkJcHJfZGVidWcoIiVzOiVkIG1vZGUgZ3BpbyBub3Qgc3Bl Y2lmaWVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwotCi0JZGF0YSA9IG9mX2dldF9wcm9wZXJ0 eShvZl9ub2RlLAotCQkicWNvbSxtZHNzLWRzaS1tb2RlLXNlbC1ncGlvLXN0YXRlIiwgTlVMTCk7 Ci0JaWYgKGRhdGEpIHsKLQkJaWYgKCFzdHJjbXAoZGF0YSwgInNpbmdsZV9wb3J0IikpCi0JCQlw YW5lbC0+cmVzZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlID0KLQkJCQlNT0RFX1NFTF9TSU5HTEVf UE9SVDsKLQkJZWxzZSBpZiAoIXN0cmNtcChkYXRhLCAiZHVhbF9wb3J0IikpCi0JCQlwYW5lbC0+ cmVzZXRfY29uZmlnLm1vZGVfc2VsX3N0YXRlID0KLQkJCQlNT0RFX1NFTF9EVUFMX1BPUlQ7Ci0J CWVsc2UgaWYgKCFzdHJjbXAoZGF0YSwgImhpZ2giKSkKLQkJCXBhbmVsLT5yZXNldF9jb25maWcu bW9kZV9zZWxfc3RhdGUgPQotCQkJCU1PREVfR1BJT19ISUdIOwotCQllbHNlIGlmICghc3RyY21w KGRhdGEsICJsb3ciKSkKLQkJCXBhbmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxfc3RhdGUgPQot CQkJCU1PREVfR1BJT19MT1c7Ci0JfSBlbHNlIHsKLQkJLyogU2V0IGRlZmF1bHQgbW9kZSBhcyBT UExJVCBtb2RlICovCi0JCXBhbmVsLT5yZXNldF9jb25maWcubW9kZV9zZWxfc3RhdGUgPSBNT0RF X1NFTF9EVUFMX1BPUlQ7Ci0JfQotCi0JLyogVE9ETzogIHJlbGVhc2UgbWVtb3J5ICovCi0JcmMg PSBkc2lfcGFuZWxfcGFyc2VfcmVzZXRfc2VxdWVuY2UocGFuZWwsIG9mX25vZGUpOwotCWlmIChy YykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHBhcnNlIHJlc2V0IHNlcXVlbmNlLCByYz0l ZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1l cnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2JsX3B3 bV9jb25maWcoc3RydWN0IGRzaV9iYWNrbGlnaHRfY29uZmlnICpjb25maWcsCi0JCQkJCSBzdHJ1 Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQl1MzIgdmFsOwotCi0J cmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxkc2ktYmwtcG1pYy1iYW5r LXNlbGVjdCIsCi0JCQkJICAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJibC1wbWljLWJh bmstc2VsZWN0IGlzIG5vdCBkZWZpbmVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVycm9yOwot CX0KLQljb25maWctPnB3bV9wbWljX2JhbmsgPSB2YWw7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKG9mX25vZGUsICJxY29tLGRzaS1ibC1wbWljLXB3bS1mcmVxdWVuY3kiLAotCQkJCSAg JnZhbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiYmwtcG1pYy1iYW5rLXNlbGVjdCBpcyBub3Qg ZGVmaW5lZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JY29uZmlnLT5wd21f cGVyaW9kX3VzZWNzID0gdmFsOwotCi0JY29uZmlnLT5wd21fcG1pX2NvbnRyb2wgPSBvZl9wcm9w ZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJCQkJCSJxY29tLG1kc3MtZHNpLWJsLXB3bS1wbWki KTsKLQotCWNvbmZpZy0+cHdtX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhvZl9ub2RlLAotCQkJ CQkgICAgICJxY29tLG1kc3MtZHNpLXB3bS1ncGlvIiwKLQkJCQkJICAgICAwKTsKLQlpZiAoIWdw aW9faXNfdmFsaWQoY29uZmlnLT5wd21fZ3BpbykpIHsKLQkJcHJfZXJyKCJwd20gZ3BpbyBpcyBp bnZhbGlkXG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotZXJyb3I6 Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9ibF9jb25maWco c3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9m X25vZGUpCi17Ci0JaW50IHJjID0gMDsKLQljb25zdCBjaGFyICpibF90eXBlOwotCXUzMiB2YWwg PSAwOwotCi0JYmxfdHlwZSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLAotCQkJCSAgInFjb20s bWRzcy1kc2ktYmwtcG1pYy1jb250cm9sLXR5cGUiLAotCQkJCSAgTlVMTCk7Ci0JaWYgKCFibF90 eXBlKSB7Ci0JCXBhbmVsLT5ibF9jb25maWcudHlwZSA9IERTSV9CQUNLTElHSFRfVU5LTk9XTjsK LQl9IGVsc2UgaWYgKCFzdHJjbXAoYmxfdHlwZSwgImJsX2N0cmxfcHdtIikpIHsKLQkJcGFuZWwt PmJsX2NvbmZpZy50eXBlID0gRFNJX0JBQ0tMSUdIVF9QV007Ci0JfSBlbHNlIGlmICghc3RyY21w KGJsX3R5cGUsICJibF9jdHJsX3dsZWQiKSkgewotCQlwYW5lbC0+YmxfY29uZmlnLnR5cGUgPSBE U0lfQkFDS0xJR0hUX1dMRUQ7Ci0JfSBlbHNlIGlmICghc3RyY21wKGJsX3R5cGUsICJibF9jdHJs X2RjcyIpKSB7Ci0JCXBhbmVsLT5ibF9jb25maWcudHlwZSA9IERTSV9CQUNLTElHSFRfRENTOwot CX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJbJXNdIGJsLXBtaWMtY29udHJvbC10eXBlIHVua25vd24t JXNcbiIsCi0JCQkgcGFuZWwtPm5hbWUsIGJsX3R5cGUpOwotCQlwYW5lbC0+YmxfY29uZmlnLnR5 cGUgPSBEU0lfQkFDS0xJR0hUX1VOS05PV047Ci0JfQotCi0JcGFuZWwtPmJsX2NvbmZpZy5ibF9z Y2FsZSA9IE1BWF9CTF9TQ0FMRV9MRVZFTDsKLQlwYW5lbC0+YmxfY29uZmlnLmJsX3NjYWxlX2Fk ID0gTUFYX0FEX0JMX1NDQUxFX0xFVkVMOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihv Zl9ub2RlLCAicWNvbSxtZHNzLWRzaS1ibC1taW4tbGV2ZWwiLCAmdmFsKTsKLQlpZiAocmMpIHsK LQkJcHJfZGVidWcoIlslc10gYmwtbWluLWxldmVsIHVuc3BlY2lmaWVkLCBkZWZhdWx0aW5nIHRv IHplcm9cbiIsCi0JCQkgcGFuZWwtPm5hbWUpOwotCQlwYW5lbC0+YmxfY29uZmlnLmJsX21pbl9s ZXZlbCA9IDA7Ci0JfSBlbHNlIHsKLQkJcGFuZWwtPmJsX2NvbmZpZy5ibF9taW5fbGV2ZWwgPSB2 YWw7Ci0JfQotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtZHNz LWRzaS1ibC1tYXgtbGV2ZWwiLCAmdmFsKTsKLQlpZiAocmMpIHsKLQkJcHJfZGVidWcoIlslc10g YmwtbWF4LWxldmVsIHVuc3BlY2lmaWVkLCBkZWZhdWx0aW5nIHRvIG1heCBsZXZlbFxuIiwKLQkJ CSBwYW5lbC0+bmFtZSk7Ci0JCXBhbmVsLT5ibF9jb25maWcuYmxfbWF4X2xldmVsID0gTUFYX0JM X0xFVkVMOwotCX0gZWxzZSB7Ci0JCXBhbmVsLT5ibF9jb25maWcuYmxfbWF4X2xldmVsID0gdmFs OwotCX0KLQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1i cmlnaHRuZXNzLW1heC1sZXZlbCIsCi0JCSZ2YWwpOwotCWlmIChyYykgewotCQlwcl9kZWJ1Zygi WyVzXSBicmlnaGVuZXNzLW1heC1sZXZlbCB1bnNwZWNpZmllZCwgZGVmYXVsdGluZyB0byAyNTVc biIsCi0JCQkgcGFuZWwtPm5hbWUpOwotCQlwYW5lbC0+YmxfY29uZmlnLmJyaWdodG5lc3NfbWF4 X2xldmVsID0gMjU1OwotCX0gZWxzZSB7Ci0JCXBhbmVsLT5ibF9jb25maWcuYnJpZ2h0bmVzc19t YXhfbGV2ZWwgPSB2YWw7Ci0JfQotCi0JaWYgKHBhbmVsLT5ibF9jb25maWcudHlwZSA9PSBEU0lf QkFDS0xJR0hUX1BXTSkgewotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9ibF9wd21fY29uZmlnKCZw YW5lbC0+YmxfY29uZmlnLCBvZl9ub2RlKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIHBhcnNlIHB3bSBjb25maWcsIHJjPSVkXG4iLAotCQkJICAgICAgIHBhbmVsLT5u YW1lLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotCi0JcGFuZWwtPmJsX2NvbmZpZy5l bl9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8ob2Zfbm9kZSwKLQkJCQkJICAgICAgInFjb20scGxh dGZvcm0tYmtsaWdodC1lbi1ncGlvIiwKLQkJCQkJICAgICAgMCk7Ci0JaWYgKCFncGlvX2lzX3Zh bGlkKHBhbmVsLT5ibF9jb25maWcuZW5fZ3BpbykpIHsKLQkJcHJfZGVidWcoIlslc10gZmFpbGVk IGdldCBia2x0IGdwaW8sIHJjPSVkXG4iLCBwYW5lbC0+bmFtZSwgcmMpOwotCQlyYyA9IDA7Ci0J CWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHNpX2Rz Y19wY2xrX3BhcmFtX2NhbGMoc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MsIGludCBp bnRmX3dpZHRoKQotewotCWludCBzbGljZV9wZXJfcGt0LCBzbGljZV9wZXJfaW50ZjsKLQlpbnQg Ynl0ZXNfaW5fc2xpY2UsIHRvdGFsX2J5dGVzX3Blcl9pbnRmOwotCi0JaWYgKCFkc2MgfHwgIWRz Yy0+c2xpY2Vfd2lkdGggfHwgIWRzYy0+c2xpY2VfcGVyX3BrdCB8fAotCSAgICAoaW50Zl93aWR0 aCA8IGRzYy0+c2xpY2Vfd2lkdGgpKSB7Ci0JCXByX2VycigiaW52YWxpZCBpbnB1dCwgaW50Zl93 aWR0aD0lZCBzbGljZV93aWR0aD0lZFxuIiwKLQkJCWludGZfd2lkdGgsIGRzYyA/IGRzYy0+c2xp Y2Vfd2lkdGggOiAtMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzbGljZV9wZXJfcGt0ID0gZHNjLT5z bGljZV9wZXJfcGt0OwotCXNsaWNlX3Blcl9pbnRmID0gRElWX1JPVU5EX1VQKGludGZfd2lkdGgs IGRzYy0+c2xpY2Vfd2lkdGgpOwotCi0JLyoKLQkgKiBJZiBzbGljZV9wZXJfcGt0IGlzIGdyZWF0 ZXIgdGhhbiBzbGljZV9wZXJfaW50ZiB0aGVuIGRlZmF1bHQgdG8gMS4KLQkgKiBUaGlzIGNhbiBo YXBwZW4gZHVyaW5nIHBhcnRpYWwgdXBkYXRlLgotCSAqLwotCWlmIChzbGljZV9wZXJfcGt0ID4g c2xpY2VfcGVyX2ludGYpCi0JCXNsaWNlX3Blcl9wa3QgPSAxOwotCi0JYnl0ZXNfaW5fc2xpY2Ug PSBESVZfUk9VTkRfVVAoZHNjLT5zbGljZV93aWR0aCAqIGRzYy0+YnBwLCA4KTsKLQl0b3RhbF9i eXRlc19wZXJfaW50ZiA9IGJ5dGVzX2luX3NsaWNlICogc2xpY2VfcGVyX2ludGY7Ci0KLQlkc2Mt PmVvbF9ieXRlX251bSA9IHRvdGFsX2J5dGVzX3Blcl9pbnRmICUgMzsKLQlkc2MtPnBjbGtfcGVy X2xpbmUgPSAgRElWX1JPVU5EX1VQKHRvdGFsX2J5dGVzX3Blcl9pbnRmLCAzKTsKLQlkc2MtPmJ5 dGVzX2luX3NsaWNlID0gYnl0ZXNfaW5fc2xpY2U7Ci0JZHNjLT5ieXRlc19wZXJfcGt0ID0gYnl0 ZXNfaW5fc2xpY2UgKiBzbGljZV9wZXJfcGt0OwotCWRzYy0+cGt0X3Blcl9saW5lID0gc2xpY2Vf cGVyX2ludGYgLyBzbGljZV9wZXJfcGt0OwotfQotCi0KLWludCBkc2lfZHNjX3BvcHVsYXRlX3N0 YXRpY19wYXJhbShzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYykKLXsKLQlpbnQgYnBw LCBicGM7Ci0JaW50IG11eF93b3Jkc19zaXplOwotCWludCBncm91cHNfcGVyX2xpbmUsIGdyb3Vw c190b3RhbDsKLQlpbnQgbWluX3JhdGVfYnVmZmVyX3NpemU7Ci0JaW50IGhyZF9kZWxheTsKLQlp bnQgcHJlX251bV9leHRyYV9tdXhfYml0cywgbnVtX2V4dHJhX211eF9iaXRzOwotCWludCBzbGlj ZV9iaXRzOwotCWludCB0YXJnZXRfYnBwX3gxNjsKLQlpbnQgZGF0YTsKLQlpbnQgZmluYWxfdmFs dWUsIGZpbmFsX3NjYWxlOwotCWludCByYXRpb19pbmRleDsKLQotCWRzYy0+dmVyc2lvbiA9IDB4 MTE7Ci0JZHNjLT5zY3JfcmV2ID0gMDsKLQlkc2MtPnJjX21vZGVsX3NpemUgPSA4MTkyOwotCWlm IChkc2MtPnZlcnNpb24gPT0gMHgxMSAmJiBkc2MtPnNjcl9yZXYgPT0gMHgxKQotCQlkc2MtPmZp cnN0X2xpbmVfYnBnX29mZnNldCA9IDE1OwotCWVsc2UKLQkJZHNjLT5maXJzdF9saW5lX2JwZ19v ZmZzZXQgPSAxMjsKLQotCWRzYy0+ZWRnZV9mYWN0b3IgPSA2OwotCWRzYy0+dGd0X29mZnNldF9o aSA9IDM7Ci0JZHNjLT50Z3Rfb2Zmc2V0X2xvID0gMzsKLQlkc2MtPmVuYWJsZV80MjIgPSAwOwot CWRzYy0+Y29udmVydF9yZ2IgPSAxOwotCWRzYy0+dmJyX2VuYWJsZSA9IDA7Ci0KLQlkc2MtPmJ1 Zl90aHJlc2ggPSBkc2lfZHNjX3JjX2J1Zl90aHJlc2g7Ci0KLQlicHAgPSBkc2MtPmJwcDsKLQli cGMgPSBkc2MtPmJwYzsKLQotCWlmIChicGMgPT0gMTIpCi0JCXJhdGlvX2luZGV4ID0gRFNDXzEy QlBDXzhCUFA7Ci0JZWxzZSBpZiAoYnBjID09IDEwKQotCQlyYXRpb19pbmRleCA9IERTQ18xMEJQ Q184QlBQOwotCWVsc2UKLQkJcmF0aW9faW5kZXggPSBEU0NfOEJQQ184QlBQOwotCi0JaWYgKGRz Yy0+dmVyc2lvbiA9PSAweDExICYmIGRzYy0+c2NyX3JldiA9PSAweDEpIHsKLQkJZHNjLT5yYW5n ZV9taW5fcXAgPQotCQkJZHNpX2RzY19yY19yYW5nZV9taW5fcXBfMV8xX3NjcjFbcmF0aW9faW5k ZXhdOwotCQlkc2MtPnJhbmdlX21heF9xcCA9Ci0JCQlkc2lfZHNjX3JjX3JhbmdlX21heF9xcF8x XzFfc2NyMVtyYXRpb19pbmRleF07Ci0JfSBlbHNlIHsKLQkJZHNjLT5yYW5nZV9taW5fcXAgPSBk c2lfZHNjX3JjX3JhbmdlX21pbl9xcF8xXzFbcmF0aW9faW5kZXhdOwotCQlkc2MtPnJhbmdlX21h eF9xcCA9IGRzaV9kc2NfcmNfcmFuZ2VfbWF4X3FwXzFfMVtyYXRpb19pbmRleF07Ci0JfQotCWRz Yy0+cmFuZ2VfYnBnX29mZnNldCA9IGRzaV9kc2NfcmNfcmFuZ2VfYnBnX29mZnNldDsKLQotCWlm IChicHAgPT0gOCkKLQkJZHNjLT5pbml0aWFsX29mZnNldCA9IDYxNDQ7Ci0JZWxzZQotCQlkc2Mt PmluaXRpYWxfb2Zmc2V0ID0gMjA0ODsJLyogYnBwID0gMTIgKi8KLQotCWlmIChicGMgPT0gMTIp Ci0JCW11eF93b3Jkc19zaXplID0gNjQ7Ci0JZWxzZQotCQltdXhfd29yZHNfc2l6ZSA9IDQ4OwkJ LyogYnBjID09IDgvMTAgKi8KLQotCWlmIChicGMgPT0gOCkgewotCQlkc2MtPmxpbmVfYnVmX2Rl cHRoID0gOTsKLQkJZHNjLT5pbnB1dF8xMF9iaXRzID0gMDsKLQkJZHNjLT5taW5fcXBfZmxhdG5l c3MgPSAzOwotCQlkc2MtPm1heF9xcF9mbGF0bmVzcyA9IDEyOwotCQlkc2MtPnF1YW50X2luY3Jf bGltaXQwID0gMTE7Ci0JCWRzYy0+cXVhbnRfaW5jcl9saW1pdDEgPSAxMTsKLQl9IGVsc2UgaWYg KGJwYyA9PSAxMCkgeyAvKiAxMGJwYyAqLwotCQlkc2MtPmxpbmVfYnVmX2RlcHRoID0gMTE7Ci0J CWRzYy0+aW5wdXRfMTBfYml0cyA9IDE7Ci0JCWRzYy0+bWluX3FwX2ZsYXRuZXNzID0gNzsKLQkJ ZHNjLT5tYXhfcXBfZmxhdG5lc3MgPSAxNjsKLQkJZHNjLT5xdWFudF9pbmNyX2xpbWl0MCA9IDE1 OwotCQlkc2MtPnF1YW50X2luY3JfbGltaXQxID0gMTU7Ci0JfSBlbHNlIHsgLyogMTIgYnBjICov Ci0JCWRzYy0+bGluZV9idWZfZGVwdGggPSA5OwotCQlkc2MtPmlucHV0XzEwX2JpdHMgPSAwOwot CQlkc2MtPm1pbl9xcF9mbGF0bmVzcyA9IDExOwotCQlkc2MtPm1heF9xcF9mbGF0bmVzcyA9IDIw OwotCQlkc2MtPnF1YW50X2luY3JfbGltaXQwID0gMTk7Ci0JCWRzYy0+cXVhbnRfaW5jcl9saW1p dDEgPSAxOTsKLQl9Ci0KLQlkc2MtPnNsaWNlX2xhc3RfZ3JvdXBfc2l6ZSA9IDMgLSAoZHNjLT5z bGljZV93aWR0aCAlIDMpOwotCi0JZHNjLT5kZXRfdGhyZXNoX2ZsYXRuZXNzID0gNyArIDIqKGJw YyAtIDgpOwotCi0JZHNjLT5pbml0aWFsX3htaXRfZGVsYXkgPSBkc2MtPnJjX21vZGVsX3NpemUg LyAoMiAqIGJwcCk7Ci0KLQlncm91cHNfcGVyX2xpbmUgPSBESVZfUk9VTkRfVVAoZHNjLT5zbGlj ZV93aWR0aCwgMyk7Ci0KLQlkc2MtPmNodW5rX3NpemUgPSBkc2MtPnNsaWNlX3dpZHRoICogYnBw IC8gODsKLQlpZiAoKGRzYy0+c2xpY2Vfd2lkdGggKiBicHApICUgOCkKLQkJZHNjLT5jaHVua19z aXplKys7Ci0KLQkvKiByYnMtbWluICovCi0JbWluX3JhdGVfYnVmZmVyX3NpemUgPSAgZHNjLT5y Y19tb2RlbF9zaXplIC0gZHNjLT5pbml0aWFsX29mZnNldCArCi0JCQlkc2MtPmluaXRpYWxfeG1p dF9kZWxheSAqIGJwcCArCi0JCQlncm91cHNfcGVyX2xpbmUgKiBkc2MtPmZpcnN0X2xpbmVfYnBn X29mZnNldDsKLQotCWhyZF9kZWxheSA9IERJVl9ST1VORF9VUChtaW5fcmF0ZV9idWZmZXJfc2l6 ZSwgYnBwKTsKLQotCWRzYy0+aW5pdGlhbF9kZWNfZGVsYXkgPSBocmRfZGVsYXkgLSBkc2MtPmlu aXRpYWxfeG1pdF9kZWxheTsKLQotCWRzYy0+aW5pdGlhbF9zY2FsZV92YWx1ZSA9IDggKiBkc2Mt PnJjX21vZGVsX3NpemUgLwotCQkJKGRzYy0+cmNfbW9kZWxfc2l6ZSAtIGRzYy0+aW5pdGlhbF9v ZmZzZXQpOwotCi0Jc2xpY2VfYml0cyA9IDggKiBkc2MtPmNodW5rX3NpemUgKiBkc2MtPnNsaWNl X2hlaWdodDsKLQotCWdyb3Vwc190b3RhbCA9IGdyb3Vwc19wZXJfbGluZSAqIGRzYy0+c2xpY2Vf aGVpZ2h0OwotCi0JZGF0YSA9IGRzYy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0ICogMjA0ODsKLQot CWRzYy0+bmZsX2JwZ19vZmZzZXQgPSBESVZfUk9VTkRfVVAoZGF0YSwgKGRzYy0+c2xpY2VfaGVp Z2h0IC0gMSkpOwotCi0JcHJlX251bV9leHRyYV9tdXhfYml0cyA9IDMgKiAobXV4X3dvcmRzX3Np emUgKyAoNCAqIGJwYyArIDQpIC0gMik7Ci0KLQludW1fZXh0cmFfbXV4X2JpdHMgPSBwcmVfbnVt X2V4dHJhX211eF9iaXRzIC0gKG11eF93b3Jkc19zaXplIC0KLQkJKChzbGljZV9iaXRzIC0gcHJl X251bV9leHRyYV9tdXhfYml0cykgJSBtdXhfd29yZHNfc2l6ZSkpOwotCi0JZGF0YSA9IDIwNDgg KiAoZHNjLT5yY19tb2RlbF9zaXplIC0gZHNjLT5pbml0aWFsX29mZnNldAotCQkrIG51bV9leHRy YV9tdXhfYml0cyk7Ci0JZHNjLT5zbGljZV9icGdfb2Zmc2V0ID0gRElWX1JPVU5EX1VQKGRhdGEs IGdyb3Vwc190b3RhbCk7Ci0KLQkvKiBicHAgKiAxNiArIDAuNSAqLwotCWRhdGEgPSBicHAgKiAx NjsKLQlkYXRhICo9IDI7Ci0JZGF0YSsrOwotCWRhdGEgLz0gMjsKLQl0YXJnZXRfYnBwX3gxNiA9 IGRhdGE7Ci0KLQlkYXRhID0gKGRzYy0+aW5pdGlhbF94bWl0X2RlbGF5ICogdGFyZ2V0X2JwcF94 MTYpIC8gMTY7Ci0JZmluYWxfdmFsdWUgPSAgZHNjLT5yY19tb2RlbF9zaXplIC0gZGF0YSArIG51 bV9leHRyYV9tdXhfYml0czsKLQotCWZpbmFsX3NjYWxlID0gOCAqIGRzYy0+cmNfbW9kZWxfc2l6 ZSAvCi0JCShkc2MtPnJjX21vZGVsX3NpemUgLSBmaW5hbF92YWx1ZSk7Ci0KLQlkc2MtPmZpbmFs X29mZnNldCA9IGZpbmFsX3ZhbHVlOwotCi0JZGF0YSA9IChmaW5hbF9zY2FsZSAtIDkpICogKGRz Yy0+bmZsX2JwZ19vZmZzZXQgKwotCQlkc2MtPnNsaWNlX2JwZ19vZmZzZXQpOwotCWRzYy0+c2Nh bGVfaW5jcmVtZW50X2ludGVydmFsID0gKDIwNDggKiBkc2MtPmZpbmFsX29mZnNldCkgLyBkYXRh OwotCi0JZHNjLT5zY2FsZV9kZWNyZW1lbnRfaW50ZXJ2YWwgPSBncm91cHNfcGVyX2xpbmUgLwot CQkoZHNjLT5pbml0aWFsX3NjYWxlX3ZhbHVlIC0gOCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1z dGF0aWMgaW50IGRzaV9wYW5lbF9wYXJzZV9waHlfdGltaW5nKHN0cnVjdCBkc2lfZGlzcGxheV9t b2RlICptb2RlLAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQljb25zdCBj aGFyICpkYXRhOwotCXUzMiBsZW4sIGk7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX2Rpc3Bs YXlfbW9kZV9wcml2X2luZm8gKnByaXZfaW5mbzsKLQotCXByaXZfaW5mbyA9IG1vZGUtPnByaXZf aW5mbzsKLQotCWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3Mt ZHNpLXBhbmVsLXBoeS10aW1pbmdzIiwgJmxlbik7Ci0JaWYgKCFkYXRhKSB7Ci0JCXByX2RlYnVn KCJVbmFibGUgdG8gcmVhZCBQaHkgdGltaW5nIHNldHRpbmdzIik7Ci0JfSBlbHNlIHsKLQkJcHJp dl9pbmZvLT5waHlfdGltaW5nX3ZhbCA9Ci0JCQlremFsbG9jKChzaXplb2YodTMyKSAqIGxlbiks IEdGUF9LRVJORUwpOwotCQlpZiAoIXByaXZfaW5mby0+cGh5X3RpbWluZ192YWwpCi0JCQlyZXR1 cm4gLUVJTlZBTDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQlwcml2X2luZm8t PnBoeV90aW1pbmdfdmFsW2ldID0gZGF0YVtpXTsKLQotCQlwcml2X2luZm8tPnBoeV90aW1pbmdf bGVuID0gbGVuOwotCX07Ci0KLQltb2RlLT5waXhlbF9jbGtfa2h6ID0gKERTSV9IX1RPVEFMKCZt b2RlLT50aW1pbmcpICoKLQkJCURTSV9WX1RPVEFMKCZtb2RlLT50aW1pbmcpICoKLQkJCW1vZGUt PnRpbWluZy5yZWZyZXNoX3JhdGUpIC8gMTAwMDsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX3BhbmVsX3BhcnNlX2RzY19wYXJhbXMoc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1v ZGUsCi0JCQkJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCXUzMiBkYXRhOwotCWlu dCByYyA9IC1FSU5WQUw7Ci0JaW50IGludGZfd2lkdGg7Ci0JY29uc3QgY2hhciAqY29tcHJlc3Np b247Ci0Jc3RydWN0IGRzaV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcml2X2luZm87Ci0KLQlp ZiAoIW1vZGUgfHwgIW1vZGUtPnByaXZfaW5mbykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcml2 X2luZm8gPSBtb2RlLT5wcml2X2luZm87Ci0KLQlwcml2X2luZm8tPmRzY19lbmFibGVkID0gZmFs c2U7Ci0JY29tcHJlc3Npb24gPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sY29tcHJl c3Npb24tbW9kZSIsIE5VTEwpOwotCWlmIChjb21wcmVzc2lvbiAmJiAhc3RyY21wKGNvbXByZXNz aW9uLCAiZHNjIikpCi0JCXByaXZfaW5mby0+ZHNjX2VuYWJsZWQgPSB0cnVlOwotCi0JaWYgKCFw cml2X2luZm8tPmRzY19lbmFibGVkKSB7Ci0JCXByX2RlYnVnKCJkc2MgY29tcHJlc3Npb24gaXMg bm90IGVuYWJsZWQgZm9yIHRoZSBtb2RlIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2Mtc2xpY2UtaGVpZ2h0Iiwg JmRhdGEpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBxY29tLG1kc3Mt ZHNjLXNsaWNlLWhlaWdodFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNj LnNsaWNlX2hlaWdodCA9IGRhdGE7Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25v ZGUsICJxY29tLG1kc3MtZHNjLXNsaWNlLXdpZHRoIiwgJmRhdGEpOwotCWlmIChyYykgewotCQlw cl9lcnIoImZhaWxlZCB0byBwYXJzZSBxY29tLG1kc3MtZHNjLXNsaWNlLXdpZHRoXG4iKTsKLQkJ Z290byBlcnJvcjsKLQl9Ci0JcHJpdl9pbmZvLT5kc2Muc2xpY2Vfd2lkdGggPSBkYXRhOwotCi0J aW50Zl93aWR0aCA9IG1vZGUtPnRpbWluZy5oX2FjdGl2ZTsKLQlpZiAoaW50Zl93aWR0aCAlIHBy aXZfaW5mby0+ZHNjLnNsaWNlX3dpZHRoKSB7Ci0JCXByX2VycigiaW52YWxpZCBzbGljZSB3aWR0 aCBmb3IgdGhlIHBhbmVsXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlwcml2X2luZm8tPmRz Yy5waWNfd2lkdGggPSBtb2RlLT50aW1pbmcuaF9hY3RpdmU7Ci0JcHJpdl9pbmZvLT5kc2MucGlj X2hlaWdodCA9IG1vZGUtPnRpbWluZy52X2FjdGl2ZTsKLQotCXJjID0gb2ZfcHJvcGVydHlfcmVh ZF91MzIob2Zfbm9kZSwgInFjb20sbWRzcy1kc2Mtc2xpY2UtcGVyLXBrdCIsCi0JCQkmZGF0YSk7 Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHFjb20sbWRzcy1kc2Mtc2xp Y2UtcGVyLXBrdFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNjLnNsaWNl X3Blcl9wa3QgPSBkYXRhOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAi cWNvbSxtZHNzLWRzYy1iaXQtcGVyLWNvbXBvbmVudCIsCi0JCSZkYXRhKTsKLQlpZiAocmMpIHsK LQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgcWNvbSxtZHNzLWRzYy1iaXQtcGVyLWNvbXBvbmVu dFxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXByaXZfaW5mby0+ZHNjLmJwYyA9IGRhdGE7Ci0K LQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG9mX25vZGUsICJxY29tLG1kc3MtZHNjLWJpdC1w ZXItcGl4ZWwiLAotCQkJJmRhdGEpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBw YXJzZSBxY29tLG1kc3MtZHNjLWJpdC1wZXItcGl4ZWxcbiIpOwotCQlnb3RvIGVycm9yOwotCX0K LQlwcml2X2luZm8tPmRzYy5icHAgPSBkYXRhOwotCi0JcHJpdl9pbmZvLT5kc2MuYmxvY2tfcHJl ZF9lbmFibGUgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwKLQkJInFjb20sbWRzcy1k c2MtYmxvY2stcHJlZGljdGlvbi1lbmFibGUiKTsKLQotCXByaXZfaW5mby0+ZHNjLmZ1bGxfZnJh bWVfc2xpY2VzID0gRElWX1JPVU5EX1VQKGludGZfd2lkdGgsCi0JCXByaXZfaW5mby0+ZHNjLnNs aWNlX3dpZHRoKTsKLQotCWRzaV9kc2NfcG9wdWxhdGVfc3RhdGljX3BhcmFtKCZwcml2X2luZm8t PmRzYyk7Ci0JZHNpX2RzY19wY2xrX3BhcmFtX2NhbGMoJnByaXZfaW5mby0+ZHNjLCBpbnRmX3dp ZHRoKTsKLQotZXJyb3I6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9wYW5lbF9w YXJzZV9oZHJfY29uZmlnKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJCSAgICAgc3RydWN0 IGRldmljZV9ub2RlICpvZl9ub2RlKQotewotCi0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHJtX3Bh bmVsX2hkcl9wcm9wZXJ0aWVzICpoZHJfcHJvcDsKLQotCWhkcl9wcm9wID0gJnBhbmVsLT5oZHJf cHJvcHM7Ci0JaGRyX3Byb3AtPmhkcl9lbmFibGVkID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG9m X25vZGUsCi0JCSJxY29tLG1kc3MtZHNpLXBhbmVsLWhkci1lbmFibGVkIik7Ci0KLQlpZiAoaGRy X3Byb3AtPmhkcl9lbmFibGVkKSB7Ci0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXko b2Zfbm9kZSwKLQkJCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1oZHItY29sb3ItcHJpbWFyaWVzIiwK LQkJCQloZHJfcHJvcC0+ZGlzcGxheV9wcmltYXJpZXMsCi0JCQkJRElTUExBWV9QUklNQVJJRVNf TUFYKTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9lcnIoIiVzOiVkLCBVbmFibGUgdG8gcmVhZCBjb2xv ciBwcmltYXJpZXMscmM6JXUiLAotCQkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJjKTsKLQkJCWhk cl9wcm9wLT5oZHJfZW5hYmxlZCA9IGZhbHNlOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcmMg PSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAotCQkJInFjb20sbWRzcy1kc2ktcGFuZWwt cGVhay1icmlnaHRuZXNzIiwKLQkJCSYoaGRyX3Byb3AtPnBlYWtfYnJpZ2h0bmVzcykpOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiJXM6JWQsIFVuYWJsZSB0byByZWFkIGhkciBicmlnaHRuZXNz LCByYzoldSIsCi0JCQkJX19mdW5jX18sIF9fTElORV9fLCByYyk7Ci0JCQloZHJfcHJvcC0+aGRy X2VuYWJsZWQgPSBmYWxzZTsKLQkJCXJldHVybiByYzsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLXBhbmVsLWJsYWNrbmVzcy1s ZXZlbCIsCi0JCQkmKGhkcl9wcm9wLT5ibGFja25lc3NfbGV2ZWwpKTsKLQkJaWYgKHJjKSB7Ci0J CQlwcl9lcnIoIiVzOiVkLCBVbmFibGUgdG8gcmVhZCBoZHIgYnJpZ2h0bmVzcywgcmM6JXUiLAot CQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmMpOwotCQkJaGRyX3Byb3AtPmhkcl9lbmFibGVkID0g ZmFsc2U7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgZHNpX3BhbmVsX3BhcnNlX3RvcG9sb2d5KAotCQlzdHJ1Y3QgZHNpX2Rpc3BsYXlfbW9kZV9w cml2X2luZm8gKnByaXZfaW5mbywKLQkJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlLCBpbnQg dG9wb2xvZ3lfb3ZlcnJpZGUpCi17Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9sb2d5ICp0b3Bv bG9neTsKLQl1MzIgdG9wX2NvdW50LCB0b3Bfc2VsLCAqYXJyYXkgPSBOVUxMOwotCWludCBpLCBs ZW4gPSAwOwotCWludCByYyA9IC1FSU5WQUw7Ci0KLQlsZW4gPSBvZl9wcm9wZXJ0eV9jb3VudF91 MzJfZWxlbXMob2Zfbm9kZSwgInFjb20sZGlzcGxheS10b3BvbG9neSIpOwotCWlmIChsZW4gPD0g MCB8fCBsZW4gJSBUT1BPTE9HWV9TRVRfTEVOIHx8Ci0JCQlsZW4gPiAoVE9QT0xPR1lfU0VUX0xF TiAqIE1BWF9UT1BPTE9HWSkpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHRvcG9sb2d5IGxpc3QgZm9y IHRoZSBwYW5lbCwgcmMgPSAlZFxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JdG9wX2Nv dW50ID0gbGVuIC8gVE9QT0xPR1lfU0VUX0xFTjsKLQotCWFycmF5ID0ga2NhbGxvYyhsZW4sIHNp emVvZih1MzIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFycmF5KQotCQlyZXR1cm4gLUVOT01FTTsK LQotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkob2Zfbm9kZSwKLQkJCSJxY29tLGRp c3BsYXktdG9wb2xvZ3kiLCBhcnJheSwgbGVuKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJ1bmFi bGUgdG8gcmVhZCB0aGUgZGlzcGxheSB0b3BvbG9naWVzLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdv dG8gcmVhZF9mYWlsOwotCX0KLQotCXRvcG9sb2d5ID0ga2NhbGxvYyh0b3BfY291bnQsIHNpemVv ZigqdG9wb2xvZ3kpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRvcG9sb2d5KSB7Ci0JCXJjID0gLUVO T01FTTsKLQkJZ290byByZWFkX2ZhaWw7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHRvcF9jb3Vu dDsgaSsrKSB7Ci0JCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSAqdG9wID0gJnRvcG9sb2d5 W2ldOwotCi0JCXRvcC0+bnVtX2xtID0gYXJyYXlbaSAqIFRPUE9MT0dZX1NFVF9MRU5dOwotCQl0 b3AtPm51bV9lbmMgPSBhcnJheVtpICogVE9QT0xPR1lfU0VUX0xFTiArIDFdOwotCQl0b3AtPm51 bV9pbnRmID0gYXJyYXlbaSAqIFRPUE9MT0dZX1NFVF9MRU4gKyAyXTsKLQl9OwotCi0JaWYgKHRv cG9sb2d5X292ZXJyaWRlID49IDAgJiYgdG9wb2xvZ3lfb3ZlcnJpZGUgPCB0b3BfY291bnQpIHsK LQkJcHJfZGVidWcoIm92ZXJyaWRlIHRvcG9sb2d5OiBjZmc6JWQgbG06JWQgY29tcF9lbmM6JWQg aW50ZjolZFxuIiwKLQkJCXRvcG9sb2d5X292ZXJyaWRlLAotCQkJdG9wb2xvZ3lbdG9wb2xvZ3lf b3ZlcnJpZGVdLm51bV9sbSwKLQkJCXRvcG9sb2d5W3RvcG9sb2d5X292ZXJyaWRlXS5udW1fZW5j LAotCQkJdG9wb2xvZ3lbdG9wb2xvZ3lfb3ZlcnJpZGVdLm51bV9pbnRmKTsKLQkJdG9wX3NlbCA9 IHRvcG9sb2d5X292ZXJyaWRlOwotCQlnb3RvIHBhcnNlX2RvbmU7Ci0JfQotCi0JcmMgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLAotCQkJInFjb20sZGVmYXVsdC10b3BvbG9neS1pbmRl eCIsICZ0b3Bfc2VsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJubyBkZWZhdWx0IHRvcG9sb2d5 IHNlbGVjdGVkLCByYyA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gcGFyc2VfZmFpbDsKLQl9Ci0KLQlp ZiAodG9wX3NlbCA+PSB0b3BfY291bnQpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlwcl9lcnIoImRl ZmF1bHQgdG9wb2xvZ3kgaXMgc3BlY2lmaWVkIGlzIG5vdCB2YWxpZCwgcmMgPSAlZFxuIiwKLQkJ CXJjKTsKLQkJZ290byBwYXJzZV9mYWlsOwotCX0KLQotCXByX2RlYnVnKCJkZWZhdWx0IHRvcG9s b2d5OiBsbTogJWQgY29tcF9lbmM6JWQgaW50ZjogJWRcbiIsCi0JCXRvcG9sb2d5W3RvcF9zZWxd Lm51bV9sbSwKLQkJdG9wb2xvZ3lbdG9wX3NlbF0ubnVtX2VuYywKLQkJdG9wb2xvZ3lbdG9wX3Nl bF0ubnVtX2ludGYpOwotCi1wYXJzZV9kb25lOgotCW1lbWNweSgmcHJpdl9pbmZvLT50b3BvbG9n eSwgJnRvcG9sb2d5W3RvcF9zZWxdLAotCQlzaXplb2Yoc3RydWN0IG1zbV9kaXNwbGF5X3RvcG9s b2d5KSk7Ci1wYXJzZV9mYWlsOgotCWtmcmVlKHRvcG9sb2d5KTsKLXJlYWRfZmFpbDoKLQlrZnJl ZShhcnJheSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNl X2Rtc19pbmZvKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCXN0cnVjdCBkZXZpY2Vfbm9kZSAq b2Zfbm9kZSkKLXsKLQlpbnQgZG1zX2VuYWJsZWQ7Ci0JY29uc3QgY2hhciAqZGF0YTsKLQotCWlm ICghb2Zfbm9kZSB8fCAhcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0J CXJldHVybiAtRUlOVkFMOwotCX0KLQotCXBhbmVsLT5kbXNfbW9kZSA9IERTSV9ETVNfTU9ERV9E SVNBQkxFRDsKLQlkbXNfZW5hYmxlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChvZl9ub2RlLAot CQkicWNvbSxkeW5hbWljLW1vZGUtc3dpdGNoLWVuYWJsZWQiKTsKLQlpZiAoIWRtc19lbmFibGVk KQotCQlyZXR1cm4gMDsKLQotCWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20s ZHluYW1pYy1tb2RlLXN3aXRjaC10eXBlIiwgTlVMTCk7Ci0JaWYgKGRhdGEgJiYgIXN0cmNtcChk YXRhLCAiZHluYW1pYy1yZXNvbHV0aW9uLXN3aXRjaC1pbW1lZGlhdGUiKSkgewotCQlwYW5lbC0+ ZG1zX21vZGUgPSBEU0lfRE1TX01PREVfUkVTX1NXSVRDSF9JTU1FRElBVEU7Ci0JfSBlbHNlIHsK LQkJcHJfZXJyKCJbJXNdIHVuc3VwcG9ydGVkIGR5bmFtaWMgc3dpdGNoIG1vZGU6ICVzXG4iLAot CQkJCQkJCXBhbmVsLT5uYW1lLCBkYXRhKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0 dXJuIDA7Ci19OwotCi0vKgotICogVGhlIGxlbmd0aCBvZiBhbGwgdGhlIHZhbGlkIHZhbHVlcyB0 byBiZSBjaGVja2VkIHNob3VsZCBub3QgYmUgZ3JlYXRlcgotICogdGhhbiB0aGUgbGVuZ3RoIG9m IHJldHVybmVkIGRhdGEgZnJvbSByZWFkIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyBib29sCi1kc2lf cGFuZWxfcGFyc2VfZXNkX2NoZWNrX3ZhbGlkX3BhcmFtcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5l bCwgdTMyIGNvdW50KQotewotCWludCBpOwotCXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyAq Y29uZmlnID0gJnBhbmVsLT5lc2RfY29uZmlnOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyAr K2kpIHsKLQkJaWYgKGNvbmZpZy0+c3RhdHVzX3ZhbGlkX3BhcmFtc1tpXSA+Ci0JCQkJY29uZmln LT5zdGF0dXNfY21kc19ybGVuW2ldKSB7Ci0JCQlwcl9kZWJ1ZygiaWdub3JlIHZhbGlkIHBhcmFt c1xuIik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQot c3RhdGljIGJvb2wgZHNpX3BhbmVsX3BhcnNlX2VzZF9zdGF0dXNfbGVuKHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsCi0JY2hhciAqcHJvcF9rZXksIHUzMiAqKnRhcmdldCwgdTMyIGNtZF9jbnQpCi17 Ci0JaW50IHRtcDsKLQotCWlmICghb2ZfZmluZF9wcm9wZXJ0eShucCwgcHJvcF9rZXksICZ0bXAp KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQl0bXAgLz0gc2l6ZW9mKHUzMik7Ci0JaWYgKHRtcCAhPSBj bWRfY250KSB7Ci0JCXByX2VycigicmVxdWVzdCBwcm9wZXJ0eSglZCkgZG8gbm90IG1hdGNoIGNt ZCBjb3VudCglZClcbiIsCi0JCQkJdG1wLCBjbWRfY250KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0K LQotCSp0YXJnZXQgPSBrY2FsbG9jKHRtcCwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwotCWlm IChJU19FUlJfT1JfTlVMTCgqdGFyZ2V0KSkgewotCQlwcl9lcnIoIkVycm9yIGFsbG9jYXRpbmcg bWVtb3J5IGZvciBwcm9wZXJ0eVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAob2Zf cHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsIHByb3Bfa2V5LCAqdGFyZ2V0LCB0bXApKSB7Ci0J CXByX2VycigiY2Fubm90IGdldCB2YWx1ZXMgZnJvbSBkdHNcbiIpOwotCQlrZnJlZSgqdGFyZ2V0 KTsKLQkJKnRhcmdldCA9IE5VTEw7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1 ZTsKLX0KLQotc3RhdGljIHZvaWQgZHNpX3BhbmVsX2VzZF9jb25maWdfZGVpbml0KHN0cnVjdCBk cm1fcGFuZWxfZXNkX2NvbmZpZyAqZXNkX2NvbmZpZykKLXsKLQlrZnJlZShlc2RfY29uZmlnLT5y ZXR1cm5fYnVmKTsKLQlrZnJlZShlc2RfY29uZmlnLT5zdGF0dXNfdmFsdWUpOwotCWtmcmVlKGVz ZF9jb25maWctPnN0YXR1c192YWxpZF9wYXJhbXMpOwotCWtmcmVlKGVzZF9jb25maWctPnN0YXR1 c19jbWRzX3JsZW4pOwotCWtmcmVlKGVzZF9jb25maWctPnN0YXR1c19jbWQuY21kcyk7Ci19Ci0K LXN0YXRpYyBpbnQgZHNpX3BhbmVsX3BhcnNlX2VzZF9jb25maWcoc3RydWN0IGRzaV9wYW5lbCAq cGFuZWwsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCi17Ci0JaW50IHJj ID0gMDsKLQl1MzIgdG1wOwotCXUzMiBpLCBzdGF0dXNfbGVuLCAqbGVucDsKLQlzdHJ1Y3QgcHJv cGVydHkgKmRhdGE7Ci0JY29uc3QgY2hhciAqc3RyaW5nOwotCXN0cnVjdCBkcm1fcGFuZWxfZXNk X2NvbmZpZyAqZXNkX2NvbmZpZzsKLQotCWVzZF9jb25maWcgPSAmcGFuZWwtPmVzZF9jb25maWc7 Ci0JZXNkX2NvbmZpZy0+ZXNkX2VuYWJsZWQgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9k ZSwKLQkJInFjb20sZXNkLWNoZWNrLWVuYWJsZWQiKTsKLQotCWlmICghZXNkX2NvbmZpZy0+ZXNk X2VuYWJsZWQpCi0JCXJldHVybiAwOwotCi0JcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhv Zl9ub2RlLAotCQkJInFjb20sbWRzcy1kc2ktcGFuZWwtc3RhdHVzLWNoZWNrLW1vZGUiLCAmc3Ry aW5nKTsKLQlpZiAoIXJjKSB7Ci0JCWlmICghc3RyY21wKHN0cmluZywgImJ0YV9jaGVjayIpKSB7 Ci0JCQllc2RfY29uZmlnLT5zdGF0dXNfbW9kZSA9IEVTRF9NT0RFX1NXX0JUQTsKLQkJfSBlbHNl IGlmICghc3RyY21wKHN0cmluZywgInJlZ19yZWFkIikpIHsKLQkJCWVzZF9jb25maWctPnN0YXR1 c19tb2RlID0gRVNEX01PREVfUkVHX1JFQUQ7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcChzdHJpbmcs ICJ0ZV9zaWduYWxfY2hlY2siKSkgewotCQkJaWYgKHBhbmVsLT5wYW5lbF9tb2RlID09IERTSV9P UF9DTURfTU9ERSkgewotCQkJCWVzZF9jb25maWctPnN0YXR1c19tb2RlID0gRVNEX01PREVfUEFO RUxfVEU7Ci0JCQl9IGVsc2UgewotCQkJCXByX2VycigiVEUtRVNEIG5vdCB2YWxpZCBmb3Igdmlk ZW8gbW9kZVxuIik7Ci0JCQkJcmMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0J CX0gZWxzZSB7Ci0JCQlwcl9lcnIoIk5vIHZhbGlkIHBhbmVsLXN0YXR1cy1jaGVjay1tb2RlIHN0 cmluZ1xuIik7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBlbHNl IHsKLQkJcHJfZGVidWcoInN0YXR1cyBjaGVjayBtZXRob2Qgbm90IGRlZmluZWQhXG4iKTsKLQkJ cmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmICgoZXNkX2NvbmZpZy0+c3Rh dHVzX21vZGUgPT0gRVNEX01PREVfU1dfQlRBKSB8fAotCQkoZXNkX2NvbmZpZy0+c3RhdHVzX21v ZGUgPT0gRVNEX01PREVfUEFORUxfVEUpKQotCQlyZXR1cm4gMDsKLQotCWRzaV9wYW5lbF9wYXJz ZV9jbWRfc2V0c19zdWIoJmVzZF9jb25maWctPnN0YXR1c19jbWQsCi0JCQkJRFNJX0NNRF9TRVRf UEFORUxfU1RBVFVTLCBvZl9ub2RlKTsKLQlpZiAoIWVzZF9jb25maWctPnN0YXR1c19jbWQuY291 bnQpIHsKLQkJcHJfZXJyKCJwYW5lbCBzdGF0dXMgY29tbWFuZCBwYXJzaW5nIGZhaWxlZFxuIik7 Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoIWRzaV9wYW5lbF9w YXJzZV9lc2Rfc3RhdHVzX2xlbihvZl9ub2RlLAotCQkicWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0 dXMtcmVhZC1sZW5ndGgiLAotCQkJJnBhbmVsLT5lc2RfY29uZmlnLnN0YXR1c19jbWRzX3JsZW4s Ci0JCQkJZXNkX2NvbmZpZy0+c3RhdHVzX2NtZC5jb3VudCkpIHsKLQkJcHJfZXJyKCJJbnZhbGlk IHN0YXR1cyByZWFkIGxlbmd0aFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjE7 Ci0JfQotCi0JaWYgKGRzaV9wYW5lbF9wYXJzZV9lc2Rfc3RhdHVzX2xlbihvZl9ub2RlLAotCQki cWNvbSxtZHNzLWRzaS1wYW5lbC1zdGF0dXMtdmFsaWQtcGFyYW1zIiwKLQkJCSZwYW5lbC0+ZXNk X2NvbmZpZy5zdGF0dXNfdmFsaWRfcGFyYW1zLAotCQkJCWVzZF9jb25maWctPnN0YXR1c19jbWQu Y291bnQpKSB7Ci0JCWlmICghZHNpX3BhbmVsX3BhcnNlX2VzZF9jaGVja192YWxpZF9wYXJhbXMo cGFuZWwsCi0JCQkJCWVzZF9jb25maWctPnN0YXR1c19jbWQuY291bnQpKSB7Ci0JCQlyYyA9IC1F SU5WQUw7Ci0JCQlnb3RvIGVycm9yMjsKLQkJfQotCX0KLQotCXN0YXR1c19sZW4gPSAwOwotCWxl bnAgPSBlc2RfY29uZmlnLT5zdGF0dXNfdmFsaWRfcGFyYW1zID86IGVzZF9jb25maWctPnN0YXR1 c19jbWRzX3JsZW47Ci0JZm9yIChpID0gMDsgaSA8IGVzZF9jb25maWctPnN0YXR1c19jbWQuY291 bnQ7ICsraSkKLQkJc3RhdHVzX2xlbiArPSBsZW5wW2ldOwotCi0JaWYgKCFzdGF0dXNfbGVuKSB7 Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjI7Ci0JfQotCi0JLyoKLQkgKiBTb21lIHBh bmVsIG1heSBuZWVkIG11bHRpcGxlIHJlYWQgY29tbWFuZHMgdG8gcHJvcGVybHkKLQkgKiBjaGVj ayBwYW5lbCBzdGF0dXMuIERvIGEgc2FuaXR5IGNoZWNrIGZvciBwcm9wZXIgc3RhdHVzCi0JICog dmFsdWUgd2hpY2ggd2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSB2YWx1ZSByZWFkIGJ5IGRzaQot CSAqIGNvbnRyb2xsZXIgZHVyaW5nIEVTRCBjaGVjay4gQWxzbyBjaGVjayBpZiBtdWx0aXBsZSBy ZWFkCi0JICogY29tbWFuZHMgYXJlIHRoZXJlIHRoZW4sIHRoZXJlIHNob3VsZCBiZSBjb3JyZXNw b25kaW5nCi0JICogc3RhdHVzIGNoZWNrIHZhbHVlcyBmb3IgZWFjaCByZWFkIGNvbW1hbmQuCi0J ICovCi0JZGF0YSA9IG9mX2ZpbmRfcHJvcGVydHkob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNp LXBhbmVsLXN0YXR1cy12YWx1ZSIsICZ0bXApOwotCXRtcCAvPSBzaXplb2YodTMyKTsKLQlpZiAo IUlTX0VSUl9PUl9OVUxMKGRhdGEpICYmIHRtcCAhPSAwICYmICh0bXAgJSBzdGF0dXNfbGVuKSA9 PSAwKSB7Ci0JCWVzZF9jb25maWctPmdyb3VwcyA9IHRtcCAvIHN0YXR1c19sZW47Ci0JfSBlbHNl IHsKLQkJcHJfZXJyKCJlcnJvciBwYXJzZSBwYW5lbC1zdGF0dXMtdmFsdWVcbiIpOwotCQlyYyA9 IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3IyOwotCX0KLQotCWVzZF9jb25maWctPnN0YXR1c192YWx1 ZSA9Ci0JCWt6YWxsb2Moc2l6ZW9mKHUzMikgKiBzdGF0dXNfbGVuICogZXNkX2NvbmZpZy0+Z3Jv dXBzLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlc2RfY29uZmlnLT5zdGF0dXNfdmFsdWUpIHsK LQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yMjsKLQl9Ci0KLQllc2RfY29uZmlnLT5yZXR1 cm5fYnVmID0ga2NhbGxvYyhzdGF0dXNfbGVuICogZXNkX2NvbmZpZy0+Z3JvdXBzLAotCQkJc2l6 ZW9mKHVuc2lnbmVkIGNoYXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWVzZF9jb25maWctPnJldHVy bl9idWYpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yMzsKLQl9Ci0KLQlyYyA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG9mX25vZGUsCi0JCSJxY29tLG1kc3MtZHNpLXBhbmVs LXN0YXR1cy12YWx1ZSIsCi0JCWVzZF9jb25maWctPnN0YXR1c192YWx1ZSwgZXNkX2NvbmZpZy0+ Z3JvdXBzICogc3RhdHVzX2xlbik7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJlcnJvciByZWFk aW5nIHBhbmVsIHN0YXR1cyB2YWx1ZXNcbiIpOwotCQltZW1zZXQoZXNkX2NvbmZpZy0+c3RhdHVz X3ZhbHVlLCAwLAotCQkJCWVzZF9jb25maWctPmdyb3VwcyAqIHN0YXR1c19sZW4pOwotCX0KLQot CXJldHVybiAwOwotCi1lcnJvcjM6Ci0Ja2ZyZWUoZXNkX2NvbmZpZy0+c3RhdHVzX3ZhbHVlKTsK LWVycm9yMjoKLQlrZnJlZShlc2RfY29uZmlnLT5zdGF0dXNfdmFsaWRfcGFyYW1zKTsKLQlrZnJl ZShlc2RfY29uZmlnLT5zdGF0dXNfY21kc19ybGVuKTsKLWVycm9yMToKLQlrZnJlZShlc2RfY29u ZmlnLT5zdGF0dXNfY21kLmNtZHMpOwotZXJyb3I6Ci0JcGFuZWwtPmVzZF9jb25maWcuZXNkX2Vu YWJsZWQgPSBmYWxzZTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0cnVjdCBkc2lfcGFuZWwgKmRzaV9w YW5lbF9nZXQoc3RydWN0IGRldmljZSAqcGFyZW50LAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAq b2Zfbm9kZSwKLQkJCQlpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUpCi17Ci0Jc3RydWN0IGRzaV9wYW5l bCAqcGFuZWw7Ci0JaW50IHJjID0gMDsKLQotCXBhbmVsID0ga3phbGxvYyhzaXplb2YoKnBhbmVs KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYW5lbCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 Ci0KLQlwYW5lbC0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShvZl9ub2RlLCAicWNvbSxtZHNzLWRz aS1wYW5lbC1uYW1lIiwKLQkJCQkgICAgICBOVUxMKTsKLQlpZiAoIXBhbmVsLT5uYW1lKQotCQlw YW5lbC0+bmFtZSA9IERTSV9QQU5FTF9ERUZBVUxUX0xBQkVMOwotCi0JcmMgPSBkc2lfcGFuZWxf cGFyc2VfaG9zdF9jb25maWcocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewotCQlwcl9lcnIo ImZhaWxlZCB0byBwYXJzZSBob3N0IGNvbmZpZ3VyYXRpb24sIHJjPSVkXG4iLCByYyk7Ci0JCWdv dG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfcGFuZWxfbW9kZShwYW5lbCwg b2Zfbm9kZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIG1v ZGUgY29uZmlndXJhdGlvbiwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQly YyA9IGRzaV9wYW5lbF9wYXJzZV9kZnBzX2NhcHMoJnBhbmVsLT5kZnBzX2NhcHMsIG9mX25vZGUs IHBhbmVsLT5uYW1lKTsKLQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGRmcHMg Y29uZmlndXJhdGlvbiwgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX3Bo eV9wcm9wcygmcGFuZWwtPnBoeV9wcm9wcywgb2Zfbm9kZSwgcGFuZWwtPm5hbWUpOwotCWlmIChy YykgewotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBwYW5lbCBwaHlzaWNhbCBkaW1lbnNpb24s IHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfcGFy c2VfcG93ZXJfY2ZnKHBhcmVudCwgcGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJy KCJmYWlsZWQgdG8gcGFyc2UgcG93ZXIgY29uZmlnLCByYz0lZFxuIiwgcmMpOwotCi0JcmMgPSBk c2lfcGFuZWxfcGFyc2VfZ3Bpb3MocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJfZXJy KCJmYWlsZWQgdG8gcGFyc2UgcGFuZWwgZ3Bpb3MsIHJjPSVkXG4iLCByYyk7Ci0KLQlyYyA9IGRz aV9wYW5lbF9wYXJzZV9ibF9jb25maWcocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykKLQkJcHJf ZXJyKCJmYWlsZWQgdG8gcGFyc2UgYmFja2xpZ2h0IGNvbmZpZywgcmM9JWRcbiIsIHJjKTsKLQot Ci0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfbWlzY19mZWF0dXJlcyhwYW5lbCwgb2Zfbm9kZSk7Ci0J aWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBtaXNjIGZlYXR1cmVzLCByYz0lZFxu IiwgcmMpOwotCi0JcmMgPSBkc2lfcGFuZWxfcGFyc2VfaGRyX2NvbmZpZyhwYW5lbCwgb2Zfbm9k ZSk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBoZHIgY29uZmlnLCByYz0l ZFxuIiwgcmMpOwotCi0JcmMgPSBkc2lfcGFuZWxfZ2V0X21vZGVfY291bnQocGFuZWwsIG9mX25v ZGUpOwotCWlmIChyYykgewotCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgbW9kZSBjb3VudCwgcmM9 JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9k bXNfaW5mbyhwYW5lbCwgb2Zfbm9kZSk7Ci0JaWYgKHJjKQotCQlwcl9kZWJ1ZygiZmFpbGVkIHRv IGdldCBkbXMgaW5mbywgcmM9JWRcbiIsIHJjKTsKLQotCXJjID0gZHNpX3BhbmVsX3BhcnNlX2Vz ZF9jb25maWcocGFuZWwsIG9mX25vZGUpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygiZmFpbGVk IHRvIHBhcnNlIGVzZCBjb25maWcsIHJjPSVkXG4iLCByYyk7Ci0JfSBlbHNlIHsKLQkJdTggKmVz ZF9tb2RlID0gTlVMTDsKLQotCQlpZiAocGFuZWwtPmVzZF9jb25maWcuc3RhdHVzX21vZGUgPT0g RVNEX01PREVfUkVHX1JFQUQpCi0JCQllc2RfbW9kZSA9ICJyZWdpc3Rlcl9yZWFkIjsKLQkJZWxz ZSBpZiAocGFuZWwtPmVzZF9jb25maWcuc3RhdHVzX21vZGUgPT0gRVNEX01PREVfU1dfQlRBKQot CQkJZXNkX21vZGUgPSAiYnRhX3RyaWdnZXIiOwotCQllbHNlIGlmIChwYW5lbC0+ZXNkX2NvbmZp Zy5zdGF0dXNfbW9kZSA9PSAgRVNEX01PREVfUEFORUxfVEUpCi0JCQllc2RfbW9kZSA9ICJ0ZV9j aGVjayI7Ci0KLQkJcHJfaW5mbygiRVNEIGVuYWJsZWQgd2l0aCBtb2RlOiAlc1xuIiwgZXNkX21v ZGUpOwotCX0KLQotCXBhbmVsLT5wYW5lbF9vZl9ub2RlID0gb2Zfbm9kZTsKLQlkcm1fcGFuZWxf aW5pdCgmcGFuZWwtPmRybV9wYW5lbCk7Ci0JbXV0ZXhfaW5pdCgmcGFuZWwtPnBhbmVsX2xvY2sp OwotCXBhbmVsLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JcmV0dXJuIHBhbmVsOwotZXJyb3I6Ci0Ja2Zy ZWUocGFuZWwpOwotCXJldHVybiBFUlJfUFRSKHJjKTsKLX0KLQotdm9pZCBkc2lfcGFuZWxfcHV0 KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCS8qIGZyZWUgcmVzb3VyY2VzIGFsbG9jYXRl ZCBmb3IgRVNEIGNoZWNrICovCi0JZHNpX3BhbmVsX2VzZF9jb25maWdfZGVpbml0KCZwYW5lbC0+ ZXNkX2NvbmZpZyk7Ci0KLQlrZnJlZShwYW5lbCk7Ci19Ci0KLWludCBkc2lfcGFuZWxfZHJ2X2lu aXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCSAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfaG9z dCAqaG9zdCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldjsK LQotCWlmICghcGFuZWwgfHwgIWhvc3QpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2Nr KTsKLQotCWRldiA9ICZwYW5lbC0+bWlwaV9kZXZpY2U7Ci0KLQlkZXYtPmhvc3QgPSBob3N0Owot CS8qCi0JICogV2UgZG9udCBoYXZlIGRldmljZSBzdHJ1Y3R1cmUgc2luY2UgcGFuZWwgaXMgbm90 IGEgZGV2aWNlIG5vZGUuCi0JICogV2hlbiB1c2luZyBkcm0gcGFuZWwgZnJhbWV3b3JrLCB0aGUg ZGV2aWNlIGlzIHByb2JlZCB3aGVuIHRoZSBob3N0IGlzCi0JICogY3JlYXRlLgotCSAqLwotCWRl di0+Y2hhbm5lbCA9IDA7Ci0JZGV2LT5sYW5lcyA9IDQ7Ci0KLQlwYW5lbC0+aG9zdCA9IGhvc3Q7 Ci0JcmMgPSBkc2lfcGFuZWxfdnJlZ19nZXQocGFuZWwpOwotCWlmIChyYykgewotCQlwcl9lcnIo Ilslc10gZmFpbGVkIHRvIGdldCBwYW5lbCByZWd1bGF0b3JzLCByYz0lZFxuIiwKLQkJICAgICAg IHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF9w aW5jdHJsX2luaXQocGFuZWwpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRv IGluaXQgcGluY3RybCwgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3Jf dnJlZ19wdXQ7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfZ3Bpb19yZXF1ZXN0KHBhbmVsKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZXF1ZXN0IGdwaW9zLCByYz0lZFxu IiwgcGFuZWwtPm5hbWUsCi0JCSAgICAgICByYyk7Ci0JCWdvdG8gZXJyb3JfcGluY3RybF9kZWlu aXQ7Ci0JfQotCi0JcmMgPSBkc2lfcGFuZWxfYmxfcmVnaXN0ZXIocGFuZWwpOwotCWlmIChyYykg ewotCQlpZiAocmMgIT0gLUVQUk9CRV9ERUZFUikKLQkJCXByX2VycigiWyVzXSBmYWlsZWQgdG8g cmVnaXN0ZXIgYmFja2xpZ2h0LCByYz0lZFxuIiwKLQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMp OwotCQlnb3RvIGVycm9yX2dwaW9fcmVsZWFzZTsKLQl9Ci0KLQlnb3RvIGV4aXQ7Ci0KLWVycm9y X2dwaW9fcmVsZWFzZToKLQkodm9pZClkc2lfcGFuZWxfZ3Bpb19yZWxlYXNlKHBhbmVsKTsKLWVy cm9yX3BpbmN0cmxfZGVpbml0OgotCSh2b2lkKWRzaV9wYW5lbF9waW5jdHJsX2RlaW5pdChwYW5l bCk7Ci1lcnJvcl92cmVnX3B1dDoKLQkodm9pZClkc2lfcGFuZWxfdnJlZ19wdXQocGFuZWwpOwot ZXhpdDoKLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19 Ci0KLWludCBkc2lfcGFuZWxfZHJ2X2RlaW5pdChzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsK LQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1z XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVs X2xvY2spOwotCi0JcmMgPSBkc2lfcGFuZWxfYmxfdW5yZWdpc3RlcihwYW5lbCk7Ci0JaWYgKHJj KQotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHVucmVnaXN0ZXIgYmFja2xpZ2h0LCByYz0lZFxu IiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0KLQlyYyA9IGRzaV9wYW5lbF9ncGlvX3Jl bGVhc2UocGFuZWwpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byByZWxlYXNl IGdwaW9zLCByYz0lZFxuIiwgcGFuZWwtPm5hbWUsCi0JCSAgICAgICByYyk7Ci0KLQlyYyA9IGRz aV9wYW5lbF9waW5jdHJsX2RlaW5pdChwYW5lbCk7Ci0JaWYgKHJjKQotCQlwcl9lcnIoIlslc10g ZmFpbGVkIHRvIGRlaW5pdCBncGlvcywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLAotCQkgICAgICAg cmMpOwotCi0JcmMgPSBkc2lfcGFuZWxfdnJlZ19wdXQocGFuZWwpOwotCWlmIChyYykKLQkJcHJf ZXJyKCJbJXNdIGZhaWxlZCB0byBwdXQgcmVncywgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7 Ci0KLQlwYW5lbC0+aG9zdCA9IE5VTEw7Ci0JbWVtc2V0KCZwYW5lbC0+bWlwaV9kZXZpY2UsIDB4 MCwgc2l6ZW9mKHBhbmVsLT5taXBpX2RldmljZSkpOwotCi0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+ cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVsX3ZhbGlkYXRlX21v ZGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9kaXNwbGF5X21v ZGUgKm1vZGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkc2lfcGFuZWxfZ2V0X21vZGVfY291 bnQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0Jc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2Rl KQotewotCWNvbnN0IHUzMiBTSU5HTEVfTU9ERV9TVVBQT1JUID0gMTsKLQlzdHJ1Y3QgZGV2aWNl X25vZGUgKnRpbWluZ3NfbnA7Ci0JaW50IGNvdW50LCByYyA9IDA7Ci0KLQlpZiAoIW9mX25vZGUg fHwgIXBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQlwYW5lbC0+bnVtX3RpbWluZ19ub2RlcyA9IDA7Ci0KLQl0aW1pbmdzX25w ID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUob2Zfbm9kZSwKLQkJCSJxY29tLG1kc3MtZHNpLWRpc3Bs YXktdGltaW5ncyIpOwotCWlmICghdGltaW5nc19ucCkgewotCQlwcl9lcnIoIm5vIGRpc3BsYXkg dGltaW5nIG5vZGVzIGRlZmluZWRcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7 Ci0JfQotCi0JY291bnQgPSBvZl9nZXRfY2hpbGRfY291bnQodGltaW5nc19ucCk7Ci0JaWYgKCFj b3VudCB8fCBjb3VudCA+IERTSV9NT0RFX01BWCkgewotCQlwcl9lcnIoImludmFsaWQgY291bnQg b2YgdGltaW5nIG5vZGVzOiAlZFxuIiwgY291bnQpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8g ZXJyb3I7Ci0JfQotCi0JLyogTm8gbXVsdGlyZXNvbHV0aW9uIHN1cHBvcnQgaXMgYXZhaWxhYmxl IGZvciB2aWRlbyBtb2RlIHBhbmVscyAqLwotCWlmIChwYW5lbC0+cGFuZWxfbW9kZSAhPSBEU0lf T1BfQ01EX01PREUpCi0JCWNvdW50ID0gU0lOR0xFX01PREVfU1VQUE9SVDsKLQotCXBhbmVsLT5u dW1fdGltaW5nX25vZGVzID0gY291bnQ7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotaW50 IGRzaV9wYW5lbF9nZXRfcGh5X3Byb3BzKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJICAg IHN0cnVjdCBkc2lfcGFuZWxfcGh5X3Byb3BzICpwaHlfcHJvcHMpCi17Ci0JaW50IHJjID0gMDsK LQotCWlmICghcGFuZWwgfHwgIXBoeV9wcm9wcykgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW1z XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVs X2xvY2spOwotCi0JbWVtY3B5KHBoeV9wcm9wcywgJnBhbmVsLT5waHlfcHJvcHMsIHNpemVvZigq cGh5X3Byb3BzKSk7Ci0KLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1 cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfZ2V0X2RmcHNfY2FwcyhzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCwKLQkJCSAgICBzdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzICpkZnBzX2NhcHMp Ci17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwgfHwgIWRmcHNfY2FwcykgewotCQlwcl9l cnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhf bG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JbWVtY3B5KGRmcHNfY2FwcywgJnBhbmVsLT5k ZnBzX2NhcHMsIHNpemVvZigqZGZwc19jYXBzKSk7Ci0KLQltdXRleF91bmxvY2soJnBhbmVsLT5w YW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgZHNpX3BhbmVsX3B1dF9tb2RlKHN0 cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKQotewotCWludCBpOwotCi0JaWYgKCFtb2RlLT5w cml2X2luZm8pCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBEU0lfQ01EX1NFVF9NQVg7 IGkrKykKLQkJZHNpX3BhbmVsX2Rlc3Ryb3lfY21kX3BhY2tldHMoJm1vZGUtPnByaXZfaW5mby0+ Y21kX3NldHNbaV0pOwotCi0Ja2ZyZWUobW9kZS0+cHJpdl9pbmZvKTsKLX0KLQotaW50IGRzaV9w YW5lbF9nZXRfbW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJCXUzMiBpbmRleCwgc3Ry dWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQlpbnQgdG9wb2xvZ3lfb3ZlcnJpZGUpCi17 Ci0Jc3RydWN0IGRldmljZV9ub2RlICp0aW1pbmdzX25wLCAqY2hpbGRfbnA7Ci0Jc3RydWN0IGRz aV9kaXNwbGF5X21vZGVfcHJpdl9pbmZvICpwcnZfaW5mbzsKLQl1MzIgY2hpbGRfaWR4ID0gMDsK LQlpbnQgcmMgPSAwLCBudW1fdGltaW5nczsKLQotCWlmICghcGFuZWwgfHwgIW1vZGUpIHsKLQkJ cHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11 dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCW1vZGUtPnByaXZfaW5mbyA9IGt6YWxs b2Moc2l6ZW9mKCptb2RlLT5wcml2X2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1vZGUtPnBy aXZfaW5mbykgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlwcnZfaW5m byA9IG1vZGUtPnByaXZfaW5mbzsKLQotCXRpbWluZ3NfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFt ZShwYW5lbC0+cGFuZWxfb2Zfbm9kZSwKLQkJInFjb20sbWRzcy1kc2ktZGlzcGxheS10aW1pbmdz Iik7Ci0JaWYgKCF0aW1pbmdzX25wKSB7Ci0JCXByX2Vycigibm8gZGlzcGxheSB0aW1pbmcgbm9k ZXMgZGVmaW5lZFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBwYXJzZV9mYWlsOwotCX0K LQotCW51bV90aW1pbmdzID0gb2ZfZ2V0X2NoaWxkX2NvdW50KHRpbWluZ3NfbnApOwotCWlmICgh bnVtX3RpbWluZ3MgfHwgbnVtX3RpbWluZ3MgPiBEU0lfTU9ERV9NQVgpIHsKLQkJcHJfZXJyKCJp bnZhbGlkIGNvdW50IG9mIHRpbWluZyBub2RlczogJWRcbiIsIG51bV90aW1pbmdzKTsKLQkJcmMg PSAtRUlOVkFMOwotCQlnb3RvIHBhcnNlX2ZhaWw7Ci0JfQotCi0JZm9yX2VhY2hfY2hpbGRfb2Zf bm9kZSh0aW1pbmdzX25wLCBjaGlsZF9ucCkgewotCQlpZiAoaW5kZXggIT0gY2hpbGRfaWR4Kysp Ci0JCQljb250aW51ZTsKLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV90aW1pbmcoJm1vZGUtPnRp bWluZywgY2hpbGRfbnApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNl IHBhbmVsIHRpbWluZywgcmM9JWRcbiIsIHJjKTsKLQkJCWdvdG8gcGFyc2VfZmFpbDsKLQkJfQot Ci0JCXJjID0gZHNpX3BhbmVsX3BhcnNlX2RzY19wYXJhbXMobW9kZSwgY2hpbGRfbnApOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGRzYyBwYXJhbXMsIHJjPSVkXG4i LCByYyk7Ci0JCQlnb3RvIHBhcnNlX2ZhaWw7Ci0JCX0KLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJz ZV90b3BvbG9neShwcnZfaW5mbywgY2hpbGRfbnAsCi0JCQkJdG9wb2xvZ3lfb3ZlcnJpZGUpOwot CQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIHBhbmVsIHRvcG9sb2d5LCBy Yz0lZFxuIiwgcmMpOwotCQkJZ290byBwYXJzZV9mYWlsOwotCQl9Ci0KLQkJcmMgPSBkc2lfcGFu ZWxfcGFyc2VfY21kX3NldHMocHJ2X2luZm8sIGNoaWxkX25wKTsKLQkJaWYgKHJjKSB7Ci0JCQlw cl9lcnIoImZhaWxlZCB0byBwYXJzZSBjb21tYW5kIHNldHMsIHJjPSVkXG4iLCByYyk7Ci0JCQln b3RvIHBhcnNlX2ZhaWw7Ci0JCX0KLQotCQlyYyA9IGRzaV9wYW5lbF9wYXJzZV9qaXR0ZXJfY29u ZmlnKG1vZGUsIGNoaWxkX25wKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKAotCQkJImZhaWxlZCB0 byBwYXJzZSBwYW5lbCBqaXR0ZXIgY29uZmlnLCByYz0lZFxuIiwgcmMpOwotCi0JCXJjID0gZHNp X3BhbmVsX3BhcnNlX3BoeV90aW1pbmcobW9kZSwgY2hpbGRfbnApOwotCQlpZiAocmMpIHsKLQkJ CXByX2VycigKLQkJCSJmYWlsZWQgdG8gcGFyc2UgcGFuZWwgcGh5IHRpbWluZ3MsIHJjPSVkXG4i LCByYyk7Ci0JCQlnb3RvIHBhcnNlX2ZhaWw7Ci0JCX0KLQl9Ci0JZ290byBkb25lOwotCi1wYXJz ZV9mYWlsOgotCWtmcmVlKG1vZGUtPnByaXZfaW5mbyk7Ci0JbW9kZS0+cHJpdl9pbmZvID0gTlVM TDsKLWRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJj OwotfQotCi1pbnQgZHNpX3BhbmVsX2dldF9ob3N0X2NmZ19mb3JfbW9kZShzdHJ1Y3QgZHNpX3Bh bmVsICpwYW5lbCwKLQkJCQkgICAgc3RydWN0IGRzaV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkJ ICAgIHN0cnVjdCBkc2lfaG9zdF9jb25maWcgKmNvbmZpZykKLXsKLQlpbnQgcmMgPSAwOwotCi0J aWYgKCFwYW5lbCB8fCAhbW9kZSB8fCAhY29uZmlnKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJh bXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFu ZWxfbG9jayk7Ci0KLQljb25maWctPnBhbmVsX21vZGUgPSBwYW5lbC0+cGFuZWxfbW9kZTsKLQlt ZW1jcHkoJmNvbmZpZy0+Y29tbW9uX2NvbmZpZywgJnBhbmVsLT5ob3N0X2NvbmZpZywKLQkgICAg ICAgc2l6ZW9mKGNvbmZpZy0+Y29tbW9uX2NvbmZpZykpOwotCi0JaWYgKHBhbmVsLT5wYW5lbF9t b2RlID09IERTSV9PUF9WSURFT19NT0RFKSB7Ci0JCW1lbWNweSgmY29uZmlnLT51LnZpZGVvX2Vu Z2luZSwgJnBhbmVsLT52aWRlb19jb25maWcsCi0JCSAgICAgICBzaXplb2YoY29uZmlnLT51LnZp ZGVvX2VuZ2luZSkpOwotCX0gZWxzZSB7Ci0JCW1lbWNweSgmY29uZmlnLT51LmNtZF9lbmdpbmUs ICZwYW5lbC0+Y21kX2NvbmZpZywKLQkJICAgICAgIHNpemVvZihjb25maWctPnUuY21kX2VuZ2lu ZSkpOwotCX0KLQotCW1lbWNweSgmY29uZmlnLT52aWRlb190aW1pbmcsICZtb2RlLT50aW1pbmcs Ci0JICAgICAgIHNpemVvZihjb25maWctPnZpZGVvX3RpbWluZykpOwotCWNvbmZpZy0+dmlkZW9f dGltaW5nLmRzY19lbmFibGVkID0gbW9kZS0+cHJpdl9pbmZvLT5kc2NfZW5hYmxlZDsKLQljb25m aWctPnZpZGVvX3RpbWluZy5kc2MgPSAmbW9kZS0+cHJpdl9pbmZvLT5kc2M7Ci0KLQljb25maWct PmVzY19jbGtfcmF0ZV9oeiA9IDE5MjAwMDAwOwotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVs X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9wcmVfcHJlcGFyZShzdHJ1 Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewot CQlwcl9lcnIoImludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J bXV0ZXhfbG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCi0JLyogSWYgTFAxMV9JTklUIGlzIHNl dCwgcGFuZWwgd2lsbCBiZSBwb3dlcmVkIHVwIGR1cmluZyBwcmVwYXJlKCkgKi8KLQlpZiAocGFu ZWwtPmxwMTFfaW5pdCkKLQkJZ290byBlcnJvcjsKLQotCXJjID0gZHNpX3BhbmVsX3Bvd2VyX29u KHBhbmVsKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJbJXNdIHBhbmVsIHBvd2VyIG9uIGZhaWxl ZCwgcmM9JWRcbiIsIHBhbmVsLT5uYW1lLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi1lcnJv cjoKLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0K LWludCBkc2lfcGFuZWxfdXBkYXRlX3BwcyhzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCkKLXsKLQlp bnQgcmMgPSAwOwotCXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCAqc2V0ID0gTlVMTDsKLQlzdHJ1 Y3QgZHNpX2Rpc3BsYXlfbW9kZV9wcml2X2luZm8gKnByaXZfaW5mbyA9IE5VTEw7Ci0KLQlpZiAo IXBhbmVsIHx8ICFwYW5lbC0+Y3VyX21vZGUpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xu Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9s b2NrKTsKLQotCXByaXZfaW5mbyA9IHBhbmVsLT5jdXJfbW9kZS0+cHJpdl9pbmZvOwotCi0Jc2V0 ID0gJnByaXZfaW5mby0+Y21kX3NldHNbRFNJX0NNRF9TRVRfUFBTXTsKLQotCWRzaV9kc2NfY3Jl YXRlX3Bwc19idWZfY21kKCZwcml2X2luZm8tPmRzYywgcGFuZWwtPmRzY19wcHNfY21kLCAwKTsK LQlyYyA9IGRzaV9wYW5lbF9jcmVhdGVfY21kX3BhY2tldHMocGFuZWwtPmRzY19wcHNfY21kLAot CQkJCQkgIERTSV9DTURfUFBTX1NJWkUsIDEsIHNldC0+Y21kcyk7Ci0JaWYgKHJjKSB7Ci0JCXBy X2VycigiZmFpbGVkIHRvIGNyZWF0ZSBjbWQgcGFja2V0cywgcmM9JWRcbiIsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01E X1NFVF9QUFMpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlslc10gZmFpbGVkIHRvIHNlbmQgRFNJ X0NNRF9TRVRfUFBTIGNtZHMsIHJjPSVkXG4iLAotCQkJcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290 byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2sp OwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9zZXRfbHAxKHN0cnVjdCBkc2lfcGFu ZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2Vycigi aW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2Nr KCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwg RFNJX0NNRF9TRVRfTFAxKTsKLQlpZiAocmMpCi0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8gc2Vu ZCBEU0lfQ01EX1NFVF9MUDEgY21kLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1lLCBy Yyk7Ci0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQot Ci1pbnQgZHNpX3BhbmVsX3NldF9scDIoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50 IHJjID0gMDsKLQotCWlmICghcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2Nr KTsKLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9MUDIpOwot CWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX0xQMiBj bWQsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQltdXRleF91bmxvY2so JnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfc2V0 X25vbHAoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICgh cGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQlyYyA9IGRzaV9wYW5l bF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9OT0xQKTsKLQlpZiAocmMpCi0JCXByX2Vy cigiWyVzXSBmYWlsZWQgdG8gc2VuZCBEU0lfQ01EX1NFVF9OT0xQIGNtZCwgcmM9JWRcbiIsCi0J CSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xv Y2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9wcmVwYXJlKHN0cnVjdCBkc2lf cGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2Vy cigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9s b2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlpZiAocGFuZWwtPmxwMTFfaW5pdCkgewotCQly YyA9IGRzaV9wYW5lbF9wb3dlcl9vbihwYW5lbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJb JXNdIHBhbmVsIHBvd2VyIG9uIGZhaWxlZCwgcmM9JWRcbiIsCi0JCQkgICAgICAgcGFuZWwtPm5h bWUsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQl9Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9j bWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QUkVfT04pOwotCWlmIChyYykgewotCQlwcl9lcnIo Ilslc10gZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRfUFJFX09OIGNtZHMsIHJjPSVkXG4iLAot CQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgot CW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50 IGRzaV9wYW5lbF9zd2l0Y2goc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0g MDsKLQotCWlmICghcGFuZWwpIHsKLQkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJl dHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQot CXJjID0gZHNpX3BhbmVsX3R4X2NtZF9zZXQocGFuZWwsIERTSV9DTURfU0VUX1RJTUlOR19TV0lU Q0gpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VU X1RJTUlOR19TV0lUQ0ggY21kcywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMp OwotCi0JbXV0ZXhfdW5sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQot Ci1pbnQgZHNpX3BhbmVsX3Bvc3Rfc3dpdGNoKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewot CWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxf bG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9Q T1NUX1RJTUlOR19TV0lUQ0gpOwotCWlmIChyYykKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBz ZW5kIERTSV9DTURfU0VUX1BPU1RfVElNSU5HX1NXSVRDSCBjbWRzLCByYz0lZFxuIiwKLQkJICAg ICAgIHBhbmVsLT5uYW1lLCByYyk7Ci0KLQltdXRleF91bmxvY2soJnBhbmVsLT5wYW5lbF9sb2Nr KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBkc2lfcGFuZWxfZW5hYmxlKHN0cnVjdCBkc2lfcGFu ZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBhbmVsKSB7Ci0JCXByX2Vycigi SW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2Nr KCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVs LCBEU0lfQ01EX1NFVF9PTik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8g c2VuZCBEU0lfQ01EX1NFVF9PTiBjbWRzLCByYz0lZFxuIiwKLQkJICAgICAgIHBhbmVsLT5uYW1l LCByYyk7Ci0JfQotCXBhbmVsLT5wYW5lbF9pbml0aWFsaXplZCA9IHRydWU7Ci0JbXV0ZXhfdW5s b2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHNpX3BhbmVs X3Bvc3RfZW5hYmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0K LQlpZiAoIXBhbmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9 IGRzaV9wYW5lbF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9QT1NUX09OKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1BPU1RfT04g Y21kcywgcmM9JWRcbiIsCi0JCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQlnb3RvIGVycm9y OwotCX0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVy biByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9wcmVfZGlzYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpw YW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImludmFs aWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcGFu ZWwtPnBhbmVsX2xvY2spOwotCi0JcmMgPSBkc2lfcGFuZWxfdHhfY21kX3NldChwYW5lbCwgRFNJ X0NNRF9TRVRfUFJFX09GRik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiWyVzXSBmYWlsZWQgdG8g c2VuZCBEU0lfQ01EX1NFVF9QUkVfT0ZGIGNtZHMsIHJjPSVkXG4iLAotCQkgICAgICAgcGFuZWwt Pm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygm cGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9kaXNh YmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoIXBh bmVsKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQltdXRleF9sb2NrKCZwYW5lbC0+cGFuZWxfbG9jayk7Ci0KLQlyYyA9IGRzaV9wYW5l bF90eF9jbWRfc2V0KHBhbmVsLCBEU0lfQ01EX1NFVF9PRkYpOwotCWlmIChyYykgewotCQlwcl9l cnIoIlslc10gZmFpbGVkIHRvIHNlbmQgRFNJX0NNRF9TRVRfT0ZGIGNtZHMsIHJjPSVkXG4iLAot CQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0JcGFuZWwtPnBh bmVsX2luaXRpYWxpemVkID0gZmFsc2U7Ci0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwt PnBhbmVsX2xvY2spOwotCXJldHVybiByYzsKLX0KLQotaW50IGRzaV9wYW5lbF91bnByZXBhcmUo c3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGFuZWwp IHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0K LQotCW11dGV4X2xvY2soJnBhbmVsLT5wYW5lbF9sb2NrKTsKLQotCXJjID0gZHNpX3BhbmVsX3R4 X2NtZF9zZXQocGFuZWwsIERTSV9DTURfU0VUX1BPU1RfT0ZGKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCJbJXNdIGZhaWxlZCB0byBzZW5kIERTSV9DTURfU0VUX1BPU1RfT0ZGIGNtZHMsIHJjPSVk XG4iLAotCQkgICAgICAgcGFuZWwtPm5hbWUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlp ZiAocGFuZWwtPmxwMTFfaW5pdCkgewotCQlyYyA9IGRzaV9wYW5lbF9wb3dlcl9vZmYocGFuZWwp OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiWyVzXSBwYW5lbCBwb3dlcl9PZmYgZmFpbGVkLCBy Yz0lZFxuIiwKLQkJCSAgICAgICBwYW5lbC0+bmFtZSwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJ fQotCX0KLWVycm9yOgotCW11dGV4X3VubG9jaygmcGFuZWwtPnBhbmVsX2xvY2spOwotCXJldHVy biByYzsKLX0KLQotaW50IGRzaV9wYW5lbF9wb3N0X3VucHJlcGFyZShzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCkKLXsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFwYW5lbCkgewotCQlwcl9lcnIoImlu dmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygm cGFuZWwtPnBhbmVsX2xvY2spOwotCi0JaWYgKCFwYW5lbC0+bHAxMV9pbml0KSB7Ci0JCXJjID0g ZHNpX3BhbmVsX3Bvd2VyX29mZihwYW5lbCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJbJXNd IHBhbmVsIHBvd2VyX09mZiBmYWlsZWQsIHJjPSVkXG4iLAotCQkJICAgICAgIHBhbmVsLT5uYW1l LCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZw YW5lbC0+cGFuZWxfbG9jayk7Ci0JcmV0dXJuIHJjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGFuZWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX3BhbmVsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJl ZjMyMjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lf cGFuZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RTSV9QQU5FTF9IXwotI2RlZmluZSBf RFNJX1BBTkVMX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KLSNpbmNsdWRlIDxs aW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4 L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotI2luY2x1ZGUgPGRybS9kcm1fcGFu ZWwuaD4KLSNpbmNsdWRlIDxkcm0vbXNtX2RybS5oPgotCi0jaW5jbHVkZSAiZHNpX2RlZnMuaCIK LSNpbmNsdWRlICJkc2lfY3RybF9ody5oIgotI2luY2x1ZGUgImRzaV9jbGsuaCIKLSNpbmNsdWRl ICJkc2lfcHdyLmgiCi0jaW5jbHVkZSAibXNtX2Rydi5oIgotCi0jZGVmaW5lIE1BWF9CTF9MRVZF TCA0MDk2Ci0jZGVmaW5lIE1BWF9CTF9TQ0FMRV9MRVZFTCAxMDI0Ci0jZGVmaW5lIE1BWF9BRF9C TF9TQ0FMRV9MRVZFTCA2NTUzNQotI2RlZmluZSBEU0lfQ01EX1BQU19TSVpFIDEzNQotCi0jZGVm aW5lIERTSV9NT0RFX01BWCA1Ci0KLWVudW0gZHNpX3BhbmVsX3JvdGF0aW9uIHsKLQlEU0lfUEFO RUxfUk9UQVRFX05PTkUgPSAwLAotCURTSV9QQU5FTF9ST1RBVEVfSFZfRkxJUCwKLQlEU0lfUEFO RUxfUk9UQVRFX0hfRkxJUCwKLQlEU0lfUEFORUxfUk9UQVRFX1ZfRkxJUAotfTsKLQotZW51bSBk c2lfYmFja2xpZ2h0X3R5cGUgewotCURTSV9CQUNLTElHSFRfUFdNID0gMCwKLQlEU0lfQkFDS0xJ R0hUX1dMRUQsCi0JRFNJX0JBQ0tMSUdIVF9EQ1MsCi0JRFNJX0JBQ0tMSUdIVF9VTktOT1dOLAot CURTSV9CQUNLTElHSFRfTUFYLAotfTsKLQotZW51bSB7Ci0JTU9ERV9HUElPX05PVF9WQUxJRCA9 IDAsCi0JTU9ERV9TRUxfRFVBTF9QT1JULAotCU1PREVfU0VMX1NJTkdMRV9QT1JULAotCU1PREVf R1BJT19ISUdILAotCU1PREVfR1BJT19MT1csCi19OwotCi1lbnVtIGRzaV9kbXNfbW9kZSB7Ci0J RFNJX0RNU19NT0RFX0RJU0FCTEVEID0gMCwKLQlEU0lfRE1TX01PREVfUkVTX1NXSVRDSF9JTU1F RElBVEUsCi19OwotCi1zdHJ1Y3QgZHNpX2RmcHNfY2FwYWJpbGl0aWVzIHsKLQlib29sIGRmcHNf c3VwcG9ydDsKLQllbnVtIGRzaV9kZnBzX3R5cGUgdHlwZTsKLQl1MzIgbWluX3JlZnJlc2hfcmF0 ZTsKLQl1MzIgbWF4X3JlZnJlc2hfcmF0ZTsKLX07Ci0KLXN0cnVjdCBkc2lfcGluY3RybF9pbmZv IHsKLQlzdHJ1Y3QgcGluY3RybCAqcGluY3RybDsKLQlzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqYWN0 aXZlOwotCXN0cnVjdCBwaW5jdHJsX3N0YXRlICpzdXNwZW5kOwotfTsKLQotc3RydWN0IGRzaV9w YW5lbF9waHlfcHJvcHMgewotCXUzMiBwYW5lbF93aWR0aF9tbTsKLQl1MzIgcGFuZWxfaGVpZ2h0 X21tOwotCWVudW0gZHNpX3BhbmVsX3JvdGF0aW9uIHJvdGF0aW9uOwotfTsKLQotc3RydWN0IGRz aV9iYWNrbGlnaHRfY29uZmlnIHsKLQllbnVtIGRzaV9iYWNrbGlnaHRfdHlwZSB0eXBlOwotCi0J dTMyIGJsX21pbl9sZXZlbDsKLQl1MzIgYmxfbWF4X2xldmVsOwotCXUzMiBicmlnaHRuZXNzX21h eF9sZXZlbDsKLQl1MzIgYmxfbGV2ZWw7Ci0JdTMyIGJsX3NjYWxlOwotCXUzMiBibF9zY2FsZV9h ZDsKLQotCWludCBlbl9ncGlvOwotCS8qIFBXTSBwYXJhbXMgKi8KLQlib29sIHB3bV9wbWlfY29u dHJvbDsKLQl1MzIgcHdtX3BtaWNfYmFuazsKLQl1MzIgcHdtX3BlcmlvZF91c2VjczsKLQlpbnQg cHdtX2dwaW87Ci0KLQkvKiBXTEVEIHBhcmFtcyAqLwotCXN0cnVjdCBsZWRfdHJpZ2dlciAqd2xl ZDsKLQlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQ7Ci19OwotCi1zdHJ1Y3QgZHNpX3Jlc2V0 X3NlcSB7Ci0JdTMyIGxldmVsOwotCXUzMiBzbGVlcF9tczsKLX07Ci0KLXN0cnVjdCBkc2lfcGFu ZWxfcmVzZXRfY29uZmlnIHsKLQlzdHJ1Y3QgZHNpX3Jlc2V0X3NlcSAqc2VxdWVuY2U7Ci0JdTMy IGNvdW50OwotCi0JaW50IHJlc2V0X2dwaW87Ci0JaW50IGRpc3BfZW5fZ3BpbzsKLQlpbnQgbGNk X21vZGVfc2VsX2dwaW87Ci0JdTMyIG1vZGVfc2VsX3N0YXRlOwotfTsKLQotZW51bSBlc2RfY2hl Y2tfc3RhdHVzX21vZGUgewotCUVTRF9NT0RFX1JFR19SRUFELAotCUVTRF9NT0RFX1NXX0JUQSwK LQlFU0RfTU9ERV9QQU5FTF9URSwKLQlFU0RfTU9ERV9NQVgKLX07Ci0KLXN0cnVjdCBkcm1fcGFu ZWxfZXNkX2NvbmZpZyB7Ci0JYm9vbCBlc2RfZW5hYmxlZDsKLQotCWVudW0gZXNkX2NoZWNrX3N0 YXR1c19tb2RlIHN0YXR1c19tb2RlOwotCXN0cnVjdCBkc2lfcGFuZWxfY21kX3NldCBzdGF0dXNf Y21kOwotCXUzMiAqc3RhdHVzX2NtZHNfcmxlbjsKLQl1MzIgKnN0YXR1c192YWxpZF9wYXJhbXM7 Ci0JdTMyICpzdGF0dXNfdmFsdWU7Ci0JdW5zaWduZWQgY2hhciAqcmV0dXJuX2J1ZjsKLQl1MzIg Z3JvdXBzOwotfTsKLQotc3RydWN0IGRzaV9wYW5lbCB7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlz dHJ1Y3QgZGV2aWNlX25vZGUgKnBhbmVsX29mX25vZGU7Ci0Jc3RydWN0IG1pcGlfZHNpX2Rldmlj ZSBtaXBpX2RldmljZTsKLQotCXN0cnVjdCBtdXRleCBwYW5lbF9sb2NrOwotCXN0cnVjdCBkcm1f cGFuZWwgZHJtX3BhbmVsOwotCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0OwotCXN0cnVjdCBk ZXZpY2UgKnBhcmVudDsKLQotCXN0cnVjdCBkc2lfaG9zdF9jb21tb25fY2ZnIGhvc3RfY29uZmln OwotCXN0cnVjdCBkc2lfdmlkZW9fZW5naW5lX2NmZyB2aWRlb19jb25maWc7Ci0Jc3RydWN0IGRz aV9jbWRfZW5naW5lX2NmZyBjbWRfY29uZmlnOwotCWVudW0gZHNpX29wX21vZGUgcGFuZWxfbW9k ZTsKLQotCXN0cnVjdCBkc2lfZGZwc19jYXBhYmlsaXRpZXMgZGZwc19jYXBzOwotCXN0cnVjdCBk c2lfcGFuZWxfcGh5X3Byb3BzIHBoeV9wcm9wczsKLQotCXN0cnVjdCBkc2lfZGlzcGxheV9tb2Rl ICpjdXJfbW9kZTsKLQl1MzIgbnVtX3RpbWluZ19ub2RlczsKLQotCXN0cnVjdCBkc2lfcmVndWxh dG9yX2luZm8gcG93ZXJfaW5mbzsKLQlzdHJ1Y3QgZHNpX2JhY2tsaWdodF9jb25maWcgYmxfY29u ZmlnOwotCXN0cnVjdCBkc2lfcGFuZWxfcmVzZXRfY29uZmlnIHJlc2V0X2NvbmZpZzsKLQlzdHJ1 Y3QgZHNpX3BpbmN0cmxfaW5mbyBwaW5jdHJsOwotCXN0cnVjdCBkcm1fcGFuZWxfaGRyX3Byb3Bl cnRpZXMgaGRyX3Byb3BzOwotCXN0cnVjdCBkcm1fcGFuZWxfZXNkX2NvbmZpZyBlc2RfY29uZmln OwotCi0JYm9vbCBscDExX2luaXQ7Ci0JYm9vbCB1bHBzX2VuYWJsZWQ7Ci0JYm9vbCBhbGxvd19w aHlfcG93ZXJfb2ZmOwotCi0JYm9vbCBwYW5lbF9pbml0aWFsaXplZDsKLQlib29sIHRlX3VzaW5n X3dhdGNoZG9nX3RpbWVyOwotCi0JY2hhciBkc2NfcHBzX2NtZFtEU0lfQ01EX1BQU19TSVpFXTsK LQllbnVtIGRzaV9kbXNfbW9kZSBkbXNfbW9kZTsKLQotCWJvb2wgc3luY19icm9hZGNhc3RfZW47 Ci19OwotCi1zdGF0aWMgaW5saW5lIGJvb2wgZHNpX3BhbmVsX3VscHNfZmVhdHVyZV9lbmFibGVk KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKQotewotCXJldHVybiBwYW5lbC0+dWxwc19lbmFibGVk OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZHNpX3BhbmVsX2luaXRpYWxpemVkKHN0cnVjdCBk c2lfcGFuZWwgKnBhbmVsKQotewotCXJldHVybiBwYW5lbC0+cGFuZWxfaW5pdGlhbGl6ZWQ7Ci19 Ci0KLXN0cnVjdCBkc2lfcGFuZWwgKmRzaV9wYW5lbF9nZXQoc3RydWN0IGRldmljZSAqcGFyZW50 LAotCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSwKLQkJCQlpbnQgdG9wb2xvZ3lfb3Zl cnJpZGUpOwotCi12b2lkIGRzaV9wYW5lbF9wdXQoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwot Ci1pbnQgZHNpX3BhbmVsX2Rydl9pbml0KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLCBzdHJ1Y3Qg bWlwaV9kc2lfaG9zdCAqaG9zdCk7Ci0KLWludCBkc2lfcGFuZWxfZHJ2X2RlaW5pdChzdHJ1Y3Qg ZHNpX3BhbmVsICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfZ2V0X21vZGVfY291bnQoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwsCi0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSk7Ci0KLXZv aWQgZHNpX3BhbmVsX3B1dF9tb2RlKHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlKTsKLQot aW50IGRzaV9wYW5lbF9nZXRfbW9kZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCwKLQkJICAgICAg IHUzMiBpbmRleCwKLQkJICAgICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2RlLAotCQkg ICAgICAgaW50IHRvcG9sb2d5X292ZXJyaWRlKTsKLQotaW50IGRzaV9wYW5lbF92YWxpZGF0ZV9t b2RlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLAotCQkJICAgIHN0cnVjdCBkc2lfZGlzcGxheV9t b2RlICptb2RlKTsKLQotaW50IGRzaV9wYW5lbF9nZXRfaG9zdF9jZmdfZm9yX21vZGUoc3RydWN0 IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkJICAgIHN0cnVjdCBkc2lfZGlzcGxheV9tb2RlICptb2Rl LAotCQkJCSAgICBzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpjb25maWcpOwotCi1pbnQgZHNpX3Bh bmVsX2dldF9waHlfcHJvcHMoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0 IGRzaV9wYW5lbF9waHlfcHJvcHMgKnBoeV9wcm9wcyk7Ci1pbnQgZHNpX3BhbmVsX2dldF9kZnBz X2NhcHMoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwsCi0JCQkgICAgc3RydWN0IGRzaV9kZnBzX2Nh cGFiaWxpdGllcyAqZGZwc19jYXBzKTsKLQotaW50IGRzaV9wYW5lbF9wcmVfcHJlcGFyZShzdHJ1 Y3QgZHNpX3BhbmVsICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfc2V0X2xwMShzdHJ1Y3QgZHNp X3BhbmVsICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfc2V0X2xwMihzdHJ1Y3QgZHNpX3BhbmVs ICpwYW5lbCk7Ci0KLWludCBkc2lfcGFuZWxfc2V0X25vbHAoc3RydWN0IGRzaV9wYW5lbCAqcGFu ZWwpOwotCi1pbnQgZHNpX3BhbmVsX3ByZXBhcmUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwot Ci1pbnQgZHNpX3BhbmVsX2VuYWJsZShzdHJ1Y3QgZHNpX3BhbmVsICpwYW5lbCk7Ci0KLWludCBk c2lfcGFuZWxfcG9zdF9lbmFibGUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNp X3BhbmVsX3ByZV9kaXNhYmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9w YW5lbF9kaXNhYmxlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF91 bnByZXBhcmUoc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3Bvc3Rf dW5wcmVwYXJlKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9wYW5lbF9zZXRf YmFja2xpZ2h0KHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsLCB1MzIgYmxfbHZsKTsKLQotaW50IGRz aV9wYW5lbF91cGRhdGVfcHBzKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotaW50IGRzaV9w YW5lbF9zd2l0Y2goc3RydWN0IGRzaV9wYW5lbCAqcGFuZWwpOwotCi1pbnQgZHNpX3BhbmVsX3Bv c3Rfc3dpdGNoKHN0cnVjdCBkc2lfcGFuZWwgKnBhbmVsKTsKLQotdm9pZCBkc2lfZHNjX3BjbGtf cGFyYW1fY2FsYyhzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYywgaW50IGludGZfd2lk dGgpOwotCi0jZW5kaWYgLyogX0RTSV9QQU5FTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rz aS1zdGFnaW5nL2RzaV9waHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcxMmM2 MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHku YworKysgL2Rldi9udWxsCkBAIC0xLDkzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy MDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK LSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkibXNtLWRzaS1waHk6WyVzXSAiIGZt dCwgX19mdW5jX18KLQotI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgotI2luY2x1ZGUgPGxp bnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgotI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgotI2lmZGVmIENPTkZJR19RQ09NX0JVU19TQ0FMSU5HCi0jaW5jbHVk ZSA8bGludXgvbXNtLWJ1cy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0j aW5jbHVkZSAibXNtX2Rydi5oIgotI2luY2x1ZGUgIm1zbV9rbXMuaCIKLSNpbmNsdWRlICJtc21f Z3B1LmgiCi0jaW5jbHVkZSAiZHNpX3BoeS5oIgotI2luY2x1ZGUgImRzaV9waHlfaHcuaCIKLSNp bmNsdWRlICJkc2lfY2xrLmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgotI2luY2x1ZGUgImRzaV9j YXRhbG9nLmgiCi0KLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLSNkZWZpbmUgRFNJX1BIWV9ERUZB VUxUX0xBQkVMICJNRFNTIFBIWSBDVFJMIgotCi1zdHJ1Y3QgZHNpX3BoeV9saXN0X2l0ZW0gewot CXN0cnVjdCBtc21fZHNpX3BoeSAqcGh5OwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0K LXN0YXRpYyBMSVNUX0hFQUQoZHNpX3BoeV9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgoZHNp X3BoeV9saXN0X2xvY2spOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRzaV92ZXJfc3BlY19pbmZv IGRzaV9waHlfdjBfMF9ocG0gPSB7Ci0JLnZlcnNpb24gPSBEU0lfUEhZX1ZFUlNJT05fMF8wX0hQ TSwKLQkubGFuZV9jZmdfY291bnQgPSA0LAotCS5zdHJlbmd0aF9jZmdfY291bnQgPSAyLAotCS5y ZWd1bGF0b3JfY2ZnX2NvdW50ID0gMSwKLQkudGltaW5nX2NmZ19jb3VudCA9IDgsCi19Owotc3Rh dGljIGNvbnN0IHN0cnVjdCBkc2lfdmVyX3NwZWNfaW5mbyBkc2lfcGh5X3YwXzBfbHBtID0gewot CS52ZXJzaW9uID0gRFNJX1BIWV9WRVJTSU9OXzBfMF9MUE0sCi0JLmxhbmVfY2ZnX2NvdW50ID0g NCwKLQkuc3RyZW5ndGhfY2ZnX2NvdW50ID0gMiwKLQkucmVndWxhdG9yX2NmZ19jb3VudCA9IDEs Ci0JLnRpbWluZ19jZmdfY291bnQgPSA4LAotfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNpX3Zl cl9zcGVjX2luZm8gZHNpX3BoeV92MV8wID0gewotCS52ZXJzaW9uID0gRFNJX1BIWV9WRVJTSU9O XzFfMCwKLQkubGFuZV9jZmdfY291bnQgPSA0LAotCS5zdHJlbmd0aF9jZmdfY291bnQgPSAyLAot CS5yZWd1bGF0b3JfY2ZnX2NvdW50ID0gMSwKLQkudGltaW5nX2NmZ19jb3VudCA9IDgsCi19Owot c3RhdGljIGNvbnN0IHN0cnVjdCBkc2lfdmVyX3NwZWNfaW5mbyBkc2lfcGh5X3YyXzAgPSB7Ci0J LnZlcnNpb24gPSBEU0lfUEhZX1ZFUlNJT05fMl8wLAotCS5sYW5lX2NmZ19jb3VudCA9IDQsCi0J LnN0cmVuZ3RoX2NmZ19jb3VudCA9IDIsCi0JLnJlZ3VsYXRvcl9jZmdfY291bnQgPSAxLAotCS50 aW1pbmdfY2ZnX2NvdW50ID0gOCwKLX07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGRzaV92ZXJfc3Bl Y19pbmZvIGRzaV9waHlfdjNfMCA9IHsKLQkudmVyc2lvbiA9IERTSV9QSFlfVkVSU0lPTl8zXzAs Ci0JLmxhbmVfY2ZnX2NvdW50ID0gNCwKLQkuc3RyZW5ndGhfY2ZnX2NvdW50ID0gMiwKLQkucmVn dWxhdG9yX2NmZ19jb3VudCA9IDAsCi0JLnRpbWluZ19jZmdfY291bnQgPSAxMiwKLX07Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1zbV9kc2lfcGh5X29mX21hdGNoW10gPSB7 Ci0JeyAuY29tcGF0aWJsZSA9ICJxY29tLGRzaS1waHktdjAuMC1ocG0iLAotCSAgLmRhdGEgPSAm ZHNpX3BoeV92MF8wX2hwbSx9LAotCXsgLmNvbXBhdGlibGUgPSAicWNvbSxkc2ktcGh5LXYwLjAt bHBtIiwKLQkgIC5kYXRhID0gJmRzaV9waHlfdjBfMF9scG0sfSwKLQl7IC5jb21wYXRpYmxlID0g InFjb20sZHNpLXBoeS12MS4wIiwKLQkgIC5kYXRhID0gJmRzaV9waHlfdjFfMCx9LAotCXsgLmNv bXBhdGlibGUgPSAicWNvbSxkc2ktcGh5LXYyLjAiLAotCSAgLmRhdGEgPSAmZHNpX3BoeV92Ml8w LH0sCi0JeyAuY29tcGF0aWJsZSA9ICJxY29tLGRzaS1waHktdjMuMCIsCi0JICAuZGF0YSA9ICZk c2lfcGh5X3YzXzAsfSwKLQl7fQotfTsKLQotc3RhdGljIGludCBkc2lfcGh5X3JlZ21hcF9pbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkgICAgICAgc3RydWN0IG1zbV9kc2lf cGh5ICpwaHkpCi17Ci0JaW50IHJjID0gMDsKLQl2b2lkIF9faW9tZW0gKnB0cjsKLQotCXB0ciA9 IG1zbV9pb3JlbWFwKHBkZXYsICJkc2lfcGh5IiwgcGh5LT5uYW1lKTsKLQlpZiAoSVNfRVJSKHB0 cikpIHsKLQkJcmMgPSBQVFJfRVJSKHB0cik7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlwaHktPmh3 LmJhc2UgPSBwdHI7Ci0KLQlwcl9kZWJ1ZygiWyVzXSBtYXAgZHNpX3BoeSByZWdpc3RlcnMgdG8g JXBcbiIsIHBoeS0+bmFtZSwgcGh5LT5ody5iYXNlKTsKLQotCXJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBkc2lfcGh5X3JlZ21hcF9kZWluaXQoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17 Ci0JcHJfZGVidWcoIlslc10gdW5tYXAgcmVnaXN0ZXJzXG4iLCBwaHktPm5hbWUpOwotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9waHlfc3VwcGxpZXNfaW5pdChzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2LAotCQkJCSBzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkKLXsKLQlpbnQg cmMgPSAwOwotCWludCBpID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzOwot CXN0cnVjdCByZWd1bGF0b3IgKnZyZWcgPSBOVUxMOwotCi0JcmVncyA9ICZwaHktPnB3cl9pbmZv LmRpZ2l0YWw7Ci0JcmVncy0+dnJlZ3MgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9m KHN0cnVjdCBkc2lfdnJlZyksCi0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWdzLT52cmVn cykKLQkJZ290byBlcnJvcjsKLQotCXJlZ3MtPmNvdW50ID0gMTsKLQlzbnByaW50ZihyZWdzLT52 cmVncy0+dnJlZ19uYW1lLAotCQkgQVJSQVlfU0laRShyZWdzLT52cmVnc1tpXS52cmVnX25hbWUp LAotCQkgIiVzIiwgImdkc2MiKTsKLQotCXJjID0gZHNpX3B3cl9nZXRfZHRfdnJlZ19kYXRhKCZw ZGV2LT5kZXYsCi0JCQkJCSAgJnBoeS0+cHdyX2luZm8ucGh5X3B3ciwKLQkJCQkJICAicWNvbSxw aHktc3VwcGx5LWVudHJpZXMiKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0 IGhvc3QgcG93ZXIgc3VwcGxpZXMsIHJjID0gJWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcl9kaWdp dGFsOwotCX0KLQotCXJlZ3MgPSAmcGh5LT5wd3JfaW5mby5kaWdpdGFsOwotCWZvciAoaSA9IDA7 IGkgPCByZWdzLT5jb3VudDsgaSsrKSB7Ci0JCXZyZWcgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBk ZXYtPmRldiwgcmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJcmMgPSBQVFJfUkVUKHZyZWcp OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGdldCAlcyByZWd1bGF0b3JcbiIs Ci0JCQkgICAgICAgcmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lKTsKLQkJCWdvdG8gZXJyb3JfaG9z dF9wd3I7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0JcmVncyA9 ICZwaHktPnB3cl9pbmZvLnBoeV9wd3I7Ci0JZm9yIChpID0gMDsgaSA8IHJlZ3MtPmNvdW50OyBp KyspIHsKLQkJdnJlZyA9IGRldm1fcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCByZWdzLT52cmVn c1tpXS52cmVnX25hbWUpOwotCQlyYyA9IFBUUl9SRVQodnJlZyk7Ci0JCWlmIChyYykgewotCQkJ cHJfZXJyKCJmYWlsZWQgdG8gZ2V0ICVzIHJlZ3VsYXRvclxuIiwKLQkJCSAgICAgICByZWdzLT52 cmVnc1tpXS52cmVnX25hbWUpOwotCQkJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQotCQkJCWRldm1f cmVndWxhdG9yX3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLQkJCWdvdG8gZXJyb3JfZGlnaXRh bF9wdXQ7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0udnJlZyA9IHZyZWc7Ci0JfQotCi0JcmV0dXJu IHJjOwotCi1lcnJvcl9kaWdpdGFsX3B1dDoKLQlyZWdzID0gJnBoeS0+cHdyX2luZm8uZGlnaXRh bDsKLQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykKLQkJZGV2bV9yZWd1bGF0b3Jf cHV0KHJlZ3MtPnZyZWdzW2ldLnZyZWcpOwotZXJyb3JfaG9zdF9wd3I6Ci0JZGV2bV9rZnJlZSgm cGRldi0+ZGV2LCBwaHktPnB3cl9pbmZvLnBoeV9wd3IudnJlZ3MpOwotCXBoeS0+cHdyX2luZm8u cGh5X3B3ci52cmVncyA9IE5VTEw7Ci0JcGh5LT5wd3JfaW5mby5waHlfcHdyLmNvdW50ID0gMDsK LWVycm9yX2RpZ2l0YWw6Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwaHktPnB3cl9pbmZvLmRp Z2l0YWwudnJlZ3MpOwotCXBoeS0+cHdyX2luZm8uZGlnaXRhbC52cmVncyA9IE5VTEw7Ci0JcGh5 LT5wd3JfaW5mby5kaWdpdGFsLmNvdW50ID0gMDsKLWVycm9yOgotCXJldHVybiByYzsKLX0KLQot c3RhdGljIGludCBkc2lfcGh5X3N1cHBsaWVzX2RlaW5pdChzdHJ1Y3QgbXNtX2RzaV9waHkgKnBo eSkKLXsKLQlpbnQgaSA9IDA7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9p bmZvICpyZWdzOwotCi0JcmVncyA9ICZwaHktPnB3cl9pbmZvLmRpZ2l0YWw7Ci0JZm9yIChpID0g MDsgaSA8IHJlZ3MtPmNvdW50OyBpKyspIHsKLQkJaWYgKCFyZWdzLT52cmVnc1tpXS52cmVnKQot CQkJcHJfZXJyKCJ2cmVnIGlzIE5VTEwsIHNob3VsZCBub3QgcmVhY2ggaGVyZVxuIik7Ci0JCWVs c2UKLQkJCWRldm1fcmVndWxhdG9yX3B1dChyZWdzLT52cmVnc1tpXS52cmVnKTsKLQl9Ci0KLQly ZWdzID0gJnBoeS0+cHdyX2luZm8ucGh5X3B3cjsKLQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291 bnQ7IGkrKykgewotCQlpZiAoIXJlZ3MtPnZyZWdzW2ldLnZyZWcpCi0JCQlwcl9lcnIoInZyZWcg aXMgTlVMTCwgc2hvdWxkIG5vdCByZWFjaCBoZXJlXG4iKTsKLQkJZWxzZQotCQkJZGV2bV9yZWd1 bGF0b3JfcHV0KHJlZ3MtPnZyZWdzW2ldLnZyZWcpOwotCX0KLQotCWlmIChwaHktPnB3cl9pbmZv LnBoeV9wd3IudnJlZ3MpIHsKLQkJZGV2bV9rZnJlZSgmcGh5LT5wZGV2LT5kZXYsIHBoeS0+cHdy X2luZm8ucGh5X3B3ci52cmVncyk7Ci0JCXBoeS0+cHdyX2luZm8ucGh5X3B3ci52cmVncyA9IE5V TEw7Ci0JCXBoeS0+cHdyX2luZm8ucGh5X3B3ci5jb3VudCA9IDA7Ci0JfQotCWlmIChwaHktPnB3 cl9pbmZvLmRpZ2l0YWwudnJlZ3MpIHsKLQkJZGV2bV9rZnJlZSgmcGh5LT5wZGV2LT5kZXYsIHBo eS0+cHdyX2luZm8uZGlnaXRhbC52cmVncyk7Ci0JCXBoeS0+cHdyX2luZm8uZGlnaXRhbC52cmVn cyA9IE5VTEw7Ci0JCXBoeS0+cHdyX2luZm8uZGlnaXRhbC5jb3VudCA9IDA7Ci0JfQotCi0JcmV0 dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRzaV9waHlfcGFyc2VfZHRfcGVyX2xhbmVfY2Zncyhz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQkgIHN0cnVjdCBkc2lfcGh5X3Blcl9s YW5lX2NmZ3MgKmNmZywKLQkJCQkJICBjaGFyICpwcm9wZXJ0eSkKLXsKLQlpbnQgcmMgPSAwLCBp ID0gMCwgaiA9IDA7Ci0JY29uc3QgdTggKmRhdGE7Ci0JdTMyIGxlbiA9IDA7Ci0KLQlkYXRhID0g b2ZfZ2V0X3Byb3BlcnR5KHBkZXYtPmRldi5vZl9ub2RlLCBwcm9wZXJ0eSwgJmxlbik7Ci0JaWYg KCFkYXRhKSB7Ci0JCXByX2VycigiVW5hYmxlIHRvIHJlYWQgUGh5ICVzIHNldHRpbmdzXG4iLCBw cm9wZXJ0eSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChsZW4gIT0gRFNJX0xBTkVf TUFYICogY2ZnLT5jb3VudF9wZXJfbGFuZSkgewotCQlwcl9lcnIoImluY29ycmVjdCBwaHkgJXMg c2V0dGluZ3MsIGV4cD0lZCwgYWN0PSVkXG4iLAotCQkgICAgICAgcHJvcGVydHksIChEU0lfTEFO RV9NQVggKiBjZmctPmNvdW50X3Blcl9sYW5lKSwgbGVuKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKysp IHsKLQkJZm9yIChqID0gMDsgaiA8IGNmZy0+Y291bnRfcGVyX2xhbmU7IGorKykgewotCQkJY2Zn LT5sYW5lW2ldW2pdID0gKmRhdGE7Ci0JCQlkYXRhKys7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9zZXR0aW5nc19pbml0KHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCi0JCQkJIHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCWludCByYyA9 IDA7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqbGFuZSA9ICZwaHktPmNmZy5sYW5l Y2ZnOwotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnN0cmVuZ3RoID0gJnBoeS0+Y2Zn LnN0cmVuZ3RoOwotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZyA9ICZwaHkt PmNmZy50aW1pbmc7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqcmVncyA9ICZwaHkt PmNmZy5yZWd1bGF0b3JzOwotCi0JbGFuZS0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZlcl9pbmZv LT5sYW5lX2NmZ19jb3VudDsKLQlyYyA9IGRzaV9waHlfcGFyc2VfZHRfcGVyX2xhbmVfY2Zncyhw ZGV2LCBsYW5lLAotCQkJCQkgICAgInFjb20scGxhdGZvcm0tbGFuZS1jb25maWciKTsKLQlpZiAo cmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2UgbGFuZSBjZmdzLCByYz0lZFxuIiwgcmMp OwotCQlnb3RvIGVycjsKLQl9Ci0KLQlzdHJlbmd0aC0+Y291bnRfcGVyX2xhbmUgPSBwaHktPnZl cl9pbmZvLT5zdHJlbmd0aF9jZmdfY291bnQ7Ci0JcmMgPSBkc2lfcGh5X3BhcnNlX2R0X3Blcl9s YW5lX2NmZ3MocGRldiwgc3RyZW5ndGgsCi0JCQkJCSAgICAicWNvbSxwbGF0Zm9ybS1zdHJlbmd0 aC1jdHJsIik7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGxhbmUgY2Zn cywgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcmVncy0+Y291bnRfcGVyX2xh bmUgPSBwaHktPnZlcl9pbmZvLT5yZWd1bGF0b3JfY2ZnX2NvdW50OwotCWlmIChyZWdzLT5jb3Vu dF9wZXJfbGFuZSA+IDApIHsKLQkJcmMgPSBkc2lfcGh5X3BhcnNlX2R0X3Blcl9sYW5lX2NmZ3Mo cGRldiwgcmVncywKLQkJCQkJICAgICJxY29tLHBsYXRmb3JtLXJlZ3VsYXRvci1zZXR0aW5ncyIp OwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlIGxhbmUgY2ZncywgcmM9 JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JfQotCi0JLyogQWN0dWFsIHRpbWluZyB2 YWx1ZXMgYXJlIGRlcGVuZGVudCBvbiBwYW5lbCAqLwotCXRpbWluZy0+Y291bnRfcGVyX2xhbmUg PSBwaHktPnZlcl9pbmZvLT50aW1pbmdfY2ZnX2NvdW50OwotCXJldHVybiAwOwotZXJyOgotCWxh bmUtPmNvdW50X3Blcl9sYW5lID0gMDsKLQlzdHJlbmd0aC0+Y291bnRfcGVyX2xhbmUgPSAwOwot CXJlZ3MtPmNvdW50X3Blcl9sYW5lID0gMDsKLQl0aW1pbmctPmNvdW50X3Blcl9sYW5lID0gMDsK LQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9zZXR0aW5nc19kZWluaXQoc3Ry dWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JbWVtc2V0KCZwaHktPmNmZy5sYW5lY2ZnLCAweDAs IHNpemVvZihwaHktPmNmZy5sYW5lY2ZnKSk7Ci0JbWVtc2V0KCZwaHktPmNmZy5zdHJlbmd0aCwg MHgwLCBzaXplb2YocGh5LT5jZmcuc3RyZW5ndGgpKTsKLQltZW1zZXQoJnBoeS0+Y2ZnLnRpbWlu ZywgMHgwLCBzaXplb2YocGh5LT5jZmcudGltaW5nKSk7Ci0JbWVtc2V0KCZwaHktPmNmZy5yZWd1 bGF0b3JzLCAweDAsIHNpemVvZihwaHktPmNmZy5yZWd1bGF0b3JzKSk7Ci0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgZHNpX3BoeV9kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKLXsKLQlzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHk7Ci0Jc3RydWN0IGRzaV9w aHlfbGlzdF9pdGVtICppdGVtOwotCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOwotCWNv bnN0IHN0cnVjdCBkc2lfdmVyX3NwZWNfaW5mbyAqdmVyX2luZm87Ci0JaW50IHJjID0gMDsKLQl1 MzIgaW5kZXggPSAwOwotCi0JaWYgKCFwZGV2IHx8ICFwZGV2LT5kZXYub2Zfbm9kZSkgewotCQlw cl9lcnIoInBkZXYgbm90IGZvdW5kXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWQg PSBvZl9tYXRjaF9ub2RlKG1zbV9kc2lfcGh5X29mX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7 Ci0JaWYgKCFpZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl2ZXJfaW5mbyA9IGlkLT5kYXRhOwot Ci0JaXRlbSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKml0ZW0pLCBHRlBfS0VS TkVMKTsKLQlpZiAoIWl0ZW0pCi0JCXJldHVybiAtRU5PTUVNOwotCi0KLQlkc2lfcGh5ID0gZGV2 bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZHNpX3BoeSksIEdGUF9LRVJORUwpOwotCWlm ICghZHNpX3BoeSkgewotCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGl0ZW0pOwotCQlyZXR1cm4g LUVOT01FTTsKLQl9Ci0KLQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9u b2RlLCAiY2VsbC1pbmRleCIsICZpbmRleCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJjZWxs IGluZGV4IG5vdCBzZXQsIGRlZmF1bHQgdG8gMFxuIik7Ci0JCWluZGV4ID0gMDsKLQl9Ci0KLQlk c2lfcGh5LT5pbmRleCA9IGluZGV4OwotCi0JZHNpX3BoeS0+bmFtZSA9IG9mX2dldF9wcm9wZXJ0 eShwZGV2LT5kZXYub2Zfbm9kZSwgImxhYmVsIiwgTlVMTCk7Ci0JaWYgKCFkc2lfcGh5LT5uYW1l KQotCQlkc2lfcGh5LT5uYW1lID0gRFNJX1BIWV9ERUZBVUxUX0xBQkVMOwotCi0JcHJfZGVidWco IlByb2JpbmcgJXMgZGV2aWNlXG4iLCBkc2lfcGh5LT5uYW1lKTsKLQotCXJjID0gZHNpX3BoeV9y ZWdtYXBfaW5pdChwZGV2LCBkc2lfcGh5KTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJGYWlsZWQg dG8gcGFyc2UgcmVnaXN0ZXIgaW5mb3JtYXRpb24sIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZmFp bDsKLQl9Ci0KLQlyYyA9IGRzaV9waHlfc3VwcGxpZXNfaW5pdChwZGV2LCBkc2lfcGh5KTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ugdm9sdGFnZSBzdXBwbGllcywgcmMg PSAlZFxuIiwgcmMpOwotCQlnb3RvIGZhaWxfcmVnbWFwOwotCX0KLQotCXJjID0gZHNpX2NhdGFs b2dfcGh5X3NldHVwKCZkc2lfcGh5LT5odywgdmVyX2luZm8tPnZlcnNpb24sCi0JCQkJICAgZHNp X3BoeS0+aW5kZXgpOwotCWlmIChyYykgewotCQlwcl9lcnIoIkNhdGFsb2cgZG9lcyBub3Qgc3Vw cG9ydCB2ZXJzaW9uICglZClcbiIsCi0JCSAgICAgICB2ZXJfaW5mby0+dmVyc2lvbik7Ci0JCWdv dG8gZmFpbF9zdXBwbGllczsKLQl9Ci0KLQlkc2lfcGh5LT52ZXJfaW5mbyA9IHZlcl9pbmZvOwot CXJjID0gZHNpX3BoeV9zZXR0aW5nc19pbml0KHBkZXYsIGRzaV9waHkpOwotCWlmIChyYykgewot CQlwcl9lcnIoIkZhaWxlZCB0byBwYXJzZSBwaHkgc2V0dGluZywgcmM9JWRcbiIsIHJjKTsKLQkJ Z290byBmYWlsX3N1cHBsaWVzOwotCX0KLQotCWl0ZW0tPnBoeSA9IGRzaV9waHk7Ci0KLQltdXRl eF9sb2NrKCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJml0ZW0tPmxpc3QsICZkc2lf cGh5X2xpc3QpOwotCW11dGV4X3VubG9jaygmZHNpX3BoeV9saXN0X2xvY2spOwotCi0JbXV0ZXhf aW5pdCgmZHNpX3BoeS0+cGh5X2xvY2spOwotCS8qKiBUT0RPOiBpbml0aWFsaXplIGRlYnVnZnMg Ki8KLQlkc2lfcGh5LT5wZGV2ID0gcGRldjsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBk c2lfcGh5KTsKLQlwcl9pbmZvKCJQcm9iZSBzdWNjZXNzZnVsIGZvciAlc1xuIiwgZHNpX3BoeS0+ bmFtZSk7Ci0JcmV0dXJuIDA7Ci0KLWZhaWxfc3VwcGxpZXM6Ci0JKHZvaWQpZHNpX3BoeV9zdXBw bGllc19kZWluaXQoZHNpX3BoeSk7Ci1mYWlsX3JlZ21hcDoKLQkodm9pZClkc2lfcGh5X3JlZ21h cF9kZWluaXQoZHNpX3BoeSk7Ci1mYWlsOgotCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgZHNpX3Bo eSk7Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBpdGVtKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0 YXRpYyBpbnQgZHNpX3BoeV9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQotCWlm ICghcGRldiB8fCAhcGh5KSB7Ci0JCXByX2VycigiSW52YWxpZCBkZXZpY2VcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0JbGlz dF9mb3JfZWFjaF9zYWZlKHBvcywgdG1wLCAmZHNpX3BoeV9saXN0KSB7Ci0JCXN0cnVjdCBkc2lf cGh5X2xpc3RfaXRlbSAqbjsKLQotCQluID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkc2lfcGh5 X2xpc3RfaXRlbSwgbGlzdCk7Ci0JCWlmIChuLT5waHkgPT0gcGh5KSB7Ci0JCQlsaXN0X2RlbCgm bi0+bGlzdCk7Ci0JCQlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIG4pOwotCQkJYnJlYWs7Ci0JCX0K LQl9Ci0JbXV0ZXhfdW5sb2NrKCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0KLQltdXRleF9sb2NrKCZw aHktPnBoeV9sb2NrKTsKLQlyYyA9IGRzaV9waHlfc2V0dGluZ3NfZGVpbml0KHBoeSk7Ci0JaWYg KHJjKQotCQlwcl9lcnIoImZhaWxlZCB0byBkZWluaXRpYWxpemUgcGh5IHNldHRpbmdzLCByYz0l ZFxuIiwgcmMpOwotCi0JcmMgPSBkc2lfcGh5X3N1cHBsaWVzX2RlaW5pdChwaHkpOwotCWlmIChy YykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZGVpbml0aWFsaXplIHZvbHRhZ2Ugc3VwcGxpZXMsIHJj PSVkXG4iLCByYyk7Ci0KLQlyYyA9IGRzaV9waHlfcmVnbWFwX2RlaW5pdChwaHkpOwotCWlmIChy YykKLQkJcHJfZXJyKCJmYWlsZWQgdG8gZGVpbml0aWFsaXplIHJlZ21hcCwgcmM9JWRcbiIsIHJj KTsKLQltdXRleF91bmxvY2soJnBoeS0+cGh5X2xvY2spOwotCi0JbXV0ZXhfZGVzdHJveSgmcGh5 LT5waHlfbG9jayk7Ci0JZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwaHkpOwotCi0JcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgZHNpX3BoeV9wbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLnByb2JlICAg ICAgPSBkc2lfcGh5X2RyaXZlcl9wcm9iZSwKLQkucmVtb3ZlICAgICA9IGRzaV9waHlfZHJpdmVy X3JlbW92ZSwKLQkuZHJpdmVyICAgICA9IHsKLQkJLm5hbWUgICA9ICJkc2lfcGh5IiwKLQkJLm9m X21hdGNoX3RhYmxlID0gbXNtX2RzaV9waHlfb2ZfbWF0Y2gsCi0JfSwKLX07Ci0KLXN0YXRpYyB2 b2lkIGRzaV9waHlfZW5hYmxlX2h3KHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5KQotewotCWlmIChw aHktPmh3Lm9wcy5yZWd1bGF0b3JfZW5hYmxlKQotCQlwaHktPmh3Lm9wcy5yZWd1bGF0b3JfZW5h YmxlKCZwaHktPmh3LCAmcGh5LT5jZmcucmVndWxhdG9ycyk7Ci0KLQlpZiAocGh5LT5ody5vcHMu ZW5hYmxlKQotCQlwaHktPmh3Lm9wcy5lbmFibGUoJnBoeS0+aHcsICZwaHktPmNmZyk7Ci19Ci0K LXN0YXRpYyB2b2lkIGRzaV9waHlfZGlzYWJsZV9odyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSkK LXsKLQlpZiAocGh5LT5ody5vcHMuZGlzYWJsZSkKLQkJcGh5LT5ody5vcHMuZGlzYWJsZSgmcGh5 LT5odywgJnBoeS0+Y2ZnKTsKLQotCWlmIChwaHktPmh3Lm9wcy5yZWd1bGF0b3JfZGlzYWJsZSkK LQkJcGh5LT5ody5vcHMucmVndWxhdG9yX2Rpc2FibGUoJnBoeS0+aHcpOwotfQotCi0vKioKLSAq IGRzaV9waHlfZ2V0KCkgLSBnZXQgYSBkc2kgcGh5IGhhbmRsZSBmcm9tIGRldmljZSBub2RlCi0g KiBAb2Zfbm9kZTogICAgICAgICAgIGRldmljZSBub2RlIGZvciBkc2kgcGh5IGNvbnRyb2xsZXIK LSAqCi0gKiBHZXRzIHRoZSBEU0kgUEhZIGhhbmRsZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgb2Zf bm9kZS4gVGhlIHJlZiBjb3VudCBpcwotICogaW5jcmVtZW50ZWQgdG8gb25lIGFsbCBzdWJzZXF1 ZW50cyBnZXQgd2lsbCBmYWlsIHVudGlsIHRoZSBvcmlnaW5hbCBjbGllbnQKLSAqIGNhbGxzIGEg cHV0LgotICoKLSAqIFJldHVybjogRFNJIFBIWSBoYW5kbGUgb3IgYW4gZXJyb3IgY29kZS4KLSAq Lwotc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5X2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm9m X25vZGUpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdG1wOwotCXN0cnVjdCBtc21fZHNp X3BoeSAqcGh5ID0gTlVMTDsKLQotCW11dGV4X2xvY2soJmRzaV9waHlfbGlzdF9sb2NrKTsKLQls aXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0bXAsICZkc2lfcGh5X2xpc3QpIHsKLQkJc3RydWN0IGRz aV9waHlfbGlzdF9pdGVtICpuOwotCi0JCW4gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGRzaV9w aHlfbGlzdF9pdGVtLCBsaXN0KTsKLQkJaWYgKG4tPnBoeS0+cGRldi0+ZGV2Lm9mX25vZGUgPT0g b2Zfbm9kZSkgewotCQkJcGh5ID0gbi0+cGh5OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhf dW5sb2NrKCZkc2lfcGh5X2xpc3RfbG9jayk7Ci0KLQlpZiAoIXBoeSkgewotCQlwcl9lcnIoIkRl dmljZSB3aXRoIG9mIG5vZGUgbm90IGZvdW5kXG4iKTsKLQkJcGh5ID0gRVJSX1BUUigtRVBST0JF X0RFRkVSKTsKLQkJcmV0dXJuIHBoeTsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2Nr KTsKLQlpZiAocGh5LT5yZWZjb3VudCA+IDApIHsKLQkJcHJfZXJyKCJbUEhZXyVkXSBEZXZpY2Ug dW5kZXIgdXNlXG4iLCBwaHktPmluZGV4KTsKLQkJcGh5ID0gRVJSX1BUUigtRUlOVkFMKTsKLQl9 IGVsc2UgewotCQlwaHktPnJlZmNvdW50Kys7Ci0JfQotCW11dGV4X3VubG9jaygmcGh5LT5waHlf bG9jayk7Ci0JcmV0dXJuIHBoeTsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X3B1dCgpIC0gcmVsZWFz ZSBkc2kgcGh5IGhhbmRsZQotICogQGRzaV9waHk6ICAgICAgICAgICAgICBEU0kgUEhZIGhhbmRs ZS4KLSAqCi0gKiBSZWxlYXNlIHRoZSBEU0kgUEhZIGhhcmR3YXJlLiBEcml2ZXIgd2lsbCBjbGVh biB1cCBhbGwgcmVzb3VyY2VzIGFuZCBwdXRzCi0gKiBiYWNrIHRoZSBEU0kgUEhZIGludG8gcmVz ZXQgc3RhdGUuCi0gKi8KLXZvaWQgZHNpX3BoeV9wdXQoc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lf cGh5KQotewotCW11dGV4X2xvY2soJmRzaV9waHktPnBoeV9sb2NrKTsKLQotCWlmIChkc2lfcGh5 LT5yZWZjb3VudCA9PSAwKQotCQlwcl9lcnIoIlVuYmFsYW5jZWQgJXMgY2FsbFxuIiwgX19mdW5j X18pOwotCWVsc2UKLQkJZHNpX3BoeS0+cmVmY291bnQtLTsKLQotCW11dGV4X3VubG9jaygmZHNp X3BoeS0+cGh5X2xvY2spOwotfQotCi0vKioKLSAqIGRzaV9waHlfZHJ2X2luaXQoKSAtIGluaXRp YWxpemUgZHNpIHBoeSBkcml2ZXIKLSAqIEBkc2lfcGh5OiAgICAgICAgIERTSSBQSFkgaGFuZGxl LgotICoKLSAqIEluaXRpYWxpemVzIERTSSBQSFkgZHJpdmVyLiBTaG91bGQgYmUgY2FsbGVkIGFm dGVyIGRzaV9waHlfZ2V0KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQg ZHNpX3BoeV9kcnZfaW5pdChzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHkpCi17Ci0JY2hhciBk YmdfbmFtZVtEU0lfREVCVUdfTkFNRV9MRU5dOwotCi0Jc25wcmludGYoZGJnX25hbWUsIERTSV9E RUJVR19OQU1FX0xFTiwgImRzaSVkX3BoeSIsIGRzaV9waHktPmluZGV4KTsKLQlkcHVfZGJnX3Jl Z19yZWdpc3Rlcl9iYXNlKGRiZ19uYW1lLCBkc2lfcGh5LT5ody5iYXNlLAotCQkJCW1zbV9pb21h cF9zaXplKGRzaV9waHktPnBkZXYsICJkc2lfcGh5IikpOwotCXJldHVybiAwOwotfQotCi0vKioK LSAqIGRzaV9waHlfZHJ2X2RlaW5pdCgpIC0gZGUtaW5pdGlhbGl6ZSBkc2kgcGh5IGRyaXZlcgot ICogQGRzaV9waHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIFJlbGVhc2UgYWxs IHJlc291cmNlcyBhY3F1aXJlZCBieSBkc2lfcGh5X2Rydl9pbml0KCkuCi0gKgotICogUmV0dXJu OiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9kcnZfZGVpbml0KHN0cnVjdCBtc21fZHNp X3BoeSAqZHNpX3BoeSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGRzaV9waHlfY2xrX2NiX3Jl Z2lzdGVyKHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSwKLQlzdHJ1Y3QgY2xrX2N0cmxfY2Ig KmNsa19jYikKLXsKLQlpZiAoIWRzaV9waHkgfHwgIWNsa19jYikgewotCQlwcl9lcnIoIkludmFs aWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHNpX3BoeS0+Y2xrX2Ni LnByaXYgPSBjbGtfY2ItPnByaXY7Ci0JZHNpX3BoeS0+Y2xrX2NiLmRzaV9jbGtfY2IgPSBjbGtf Y2ItPmRzaV9jbGtfY2I7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHNpX3BoeV92YWxpZGF0 ZV9tb2RlKCkgLSB2YWxpZGF0ZSBhIGRpc3BsYXkgbW9kZQotICogQGRzaV9waHk6ICAgICAgICAg ICAgRFNJIFBIWSBoYW5kbGUuCi0gKiBAbW9kZTogICAgICAgICAgICAgICBNb2RlIGluZm9ybWF0 aW9uLgotICoKLSAqIFZhbGlkYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBtb2RlIGNhbm5vdCBiZSBz dXBwb3J0ZWQgYnkgdGhlIFBIWSBkcml2ZXIgb3IKLSAqIGhhcmR3YXJlLgotICoKLSAqIFJldHVy bjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfdmFsaWRhdGVfbW9kZShzdHJ1Y3QgbXNt X2RzaV9waHkgKmRzaV9waHksCi0JCQkgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlKQotewot CWludCByYyA9IDA7Ci0KLQlpZiAoIWRzaV9waHkgfHwgIW1vZGUpIHsKLQkJcHJfZXJyKCJJbnZh bGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRz aV9waHktPnBoeV9sb2NrKTsKLQotCXByX2RlYnVnKCJbUEhZXyVkXSBTa2lwcGluZyB2YWxpZGF0 aW9uXG4iLCBkc2lfcGh5LT5pbmRleCk7Ci0KLQltdXRleF91bmxvY2soJmRzaV9waHktPnBoeV9s b2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogZHNpX3BoeV9zZXRfcG93ZXJfc3RhdGUo KSAtIGVuYWJsZS9kaXNhYmxlIGRzaSBwaHkgcG93ZXIgc3VwcGxpZXMKLSAqIEBkc2lfcGh5OiAg ICAgICAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICogQGVuYWJsZTogICAgICAgICAgICAgICAg Qm9vbGVhbiBmbGFnIHRvIGVuYWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29k ZS4KLSAqLwotaW50IGRzaV9waHlfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBtc21fZHNpX3BoeSAq ZHNpX3BoeSwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghZHNpX3BoeSkg ewotCQlwcl9lcnIoIkludmFsaWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbXV0ZXhfbG9jaygmZHNpX3BoeS0+cGh5X2xvY2spOwotCi0JaWYgKGVuYWJsZSA9PSBkc2lf cGh5LT5wb3dlcl9zdGF0ZSkgewotCQlwcl9lcnIoIltQSFlfJWRdIE5vIHN0YXRlIGNoYW5nZVxu IiwgZHNpX3BoeS0+aW5kZXgpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCWlmIChlbmFibGUpIHsK LQkJcmMgPSBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoJmRzaV9waHktPnB3cl9pbmZvLmRpZ2l0 YWwsIHRydWUpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBkaWdp dGFsIHJlZ3VsYXRvclxuIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJaWYgKGRzaV9waHkt PmRzaV9waHlfc3RhdGUgPT0gRFNJX1BIWV9FTkdJTkVfT0ZGKSB7Ci0JCQlyYyA9IGRzaV9wd3Jf ZW5hYmxlX3JlZ3VsYXRvcigKLQkJCQkmZHNpX3BoeS0+cHdyX2luZm8ucGh5X3B3ciwgdHJ1ZSk7 Ci0JCQlpZiAocmMpIHsKLQkJCQlwcl9lcnIoImZhaWxlZCB0byBlbmFibGUgcGh5IHBvd2VyXG4i KTsKLQkJCQkodm9pZClkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJCSZkc2lfcGh5LT5w d3JfaW5mby5kaWdpdGFsLCBmYWxzZSk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJfQotCX0g ZWxzZSB7Ci0JCWlmIChkc2lfcGh5LT5kc2lfcGh5X3N0YXRlID09IERTSV9QSFlfRU5HSU5FX09G RikgewotCQkJcmMgPSBkc2lfcHdyX2VuYWJsZV9yZWd1bGF0b3IoCi0JCQkJJmRzaV9waHktPnB3 cl9pbmZvLnBoeV9wd3IsIGZhbHNlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiZmFpbGVk IHRvIGVuYWJsZSBkaWdpdGFsIHJlZ3VsYXRvclxuIik7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0K LQkJfQotCi0JCXJjID0gZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCZkc2lfcGh5LT5wd3JfaW5m by5kaWdpdGFsLAotCQkJCQkgICAgICBmYWxzZSk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJm YWlsZWQgdG8gZW5hYmxlIHBoeSBwb3dlclxuIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfQot Ci0JZHNpX3BoeS0+cG93ZXJfc3RhdGUgPSBlbmFibGU7Ci1lcnJvcjoKLQltdXRleF91bmxvY2so JmRzaV9waHktPnBoeV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX3Bo eV9lbmFibGVfdWxwcyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwKLQkJc3RydWN0IGRzaV9ob3N0 X2NvbmZpZyAqY29uZmlnLCBib29sIGNsYW1wX2VuYWJsZWQpCi17Ci0JaW50IHJjID0gMDsKLQl1 MzIgbGFuZXMgPSAwOwotCXUzMiB1bHBzX2xhbmVzOwotCi0JaWYgKGNvbmZpZy0+cGFuZWxfbW9k ZSA9PSBEU0lfT1BfQ01EX01PREUpCi0JCWxhbmVzID0gY29uZmlnLT5jb21tb25fY29uZmlnLmRh dGFfbGFuZXM7Ci0JbGFuZXMgfD0gRFNJX0NMT0NLX0xBTkU7Ci0KLQkvKgotCSAqIElmIERTSSBj bGFtcHMgYXJlIGVuYWJsZWQsIGl0IG1lYW5zIHRoYXQgdGhlIERTSSBsYW5lcyBhcmUKLQkgKiBh bHJlYWR5IGluIGlkbGUgc3RhdGUuIENoZWNraW5nIGZvciBsYW5lcyB0byBiZSBpbiBpZGxlIHN0 YXRlCi0JICogc2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIFVMUFMgZW50cnkgcHJvZ3JhbW1pbmcg d2hpbGUgY29taW5nCi0JICogb3V0IG9mIGlkbGUgc2NyZWVuLgotCSAqLwotCWlmICghY2xhbXBf ZW5hYmxlZCkgewotCQlyYyA9IHBoeS0+aHcub3BzLnVscHNfb3BzLndhaXRfZm9yX2xhbmVfaWRs ZSgmcGh5LT5odywgbGFuZXMpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigibGFuZXMgbm90IGVu dGVyaW5nIGlkbGUsIHNraXAgVUxQU1xuIik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0KLQlw aHktPmh3Lm9wcy51bHBzX29wcy51bHBzX3JlcXVlc3QoJnBoeS0+aHcsICZwaHktPmNmZywgbGFu ZXMpOwotCi0JdWxwc19sYW5lcyA9IHBoeS0+aHcub3BzLnVscHNfb3BzLmdldF9sYW5lc19pbl91 bHBzKCZwaHktPmh3KTsKLQotCWlmICghcGh5LT5ody5vcHMudWxwc19vcHMuaXNfbGFuZXNfaW5f dWxwcyhsYW5lcywgdWxwc19sYW5lcykpIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gZW50ZXIgVUxQ UywgcmVxdWVzdD0weCV4LCBhY3R1YWw9MHgleFxuIiwKLQkJICAgICAgIGxhbmVzLCB1bHBzX2xh bmVzKTsKLQkJcmMgPSAtRUlPOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBk c2lfcGh5X2Rpc2FibGVfdWxwcyhzdHJ1Y3QgbXNtX2RzaV9waHkgKnBoeSwKLQkJIHN0cnVjdCBk c2lfaG9zdF9jb25maWcgKmNvbmZpZykKLXsKLQl1MzIgdWxwc19sYW5lcywgbGFuZXMgPSAwOwot Ci0JaWYgKGNvbmZpZy0+cGFuZWxfbW9kZSA9PSBEU0lfT1BfQ01EX01PREUpCi0JCWxhbmVzID0g Y29uZmlnLT5jb21tb25fY29uZmlnLmRhdGFfbGFuZXM7Ci0JbGFuZXMgfD0gRFNJX0NMT0NLX0xB TkU7Ci0KLQl1bHBzX2xhbmVzID0gcGh5LT5ody5vcHMudWxwc19vcHMuZ2V0X2xhbmVzX2luX3Vs cHMoJnBoeS0+aHcpOwotCi0JaWYgKCFwaHktPmh3Lm9wcy51bHBzX29wcy5pc19sYW5lc19pbl91 bHBzKGxhbmVzLCB1bHBzX2xhbmVzKSkgewotCQlwcl9lcnIoIk1pc21hdGNoIGluIFVMUFM6IGxh bmVzOiVkLCB1bHBzX2xhbmVzOiVkXG4iLAotCQkJCWxhbmVzLCB1bHBzX2xhbmVzKTsKLQkJcmV0 dXJuIC1FSU87Ci0JfQotCi0JcGh5LT5ody5vcHMudWxwc19vcHMudWxwc19leGl0KCZwaHktPmh3 LCAmcGh5LT5jZmcsIGxhbmVzKTsKLQotCXVscHNfbGFuZXMgPSBwaHktPmh3Lm9wcy51bHBzX29w cy5nZXRfbGFuZXNfaW5fdWxwcygmcGh5LT5odyk7Ci0KLQlpZiAocGh5LT5ody5vcHMudWxwc19v cHMuaXNfbGFuZXNfaW5fdWxwcyhsYW5lcywgdWxwc19sYW5lcykpIHsKLQkJcHJfZXJyKCJMYW5l cyAoMHgleCkgc3R1Y2sgaW4gVUxQU1xuIiwgdWxwc19sYW5lcyk7Ci0JCXJldHVybiAtRUlPOwot CX0KLQotCXJldHVybiAwOwotfQotCi0KLWludCBkc2lfcGh5X3NldF91bHBzKHN0cnVjdCBtc21f ZHNpX3BoeSAqcGh5LCBzdHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpjb25maWcsCi0JCWJvb2wgZW5h YmxlLCBib29sIGNsYW1wX2VuYWJsZWQpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICghcGh5KSB7 Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0K LQlpZiAoIXBoeS0+aHcub3BzLnVscHNfb3BzLnVscHNfcmVxdWVzdCB8fAotCQkJIXBoeS0+aHcu b3BzLnVscHNfb3BzLnVscHNfZXhpdCB8fAotCQkJIXBoeS0+aHcub3BzLnVscHNfb3BzLmdldF9s YW5lc19pbl91bHBzIHx8Ci0JCQkhcGh5LT5ody5vcHMudWxwc19vcHMuaXNfbGFuZXNfaW5fdWxw cyB8fAotCQkJIXBoeS0+aHcub3BzLnVscHNfb3BzLndhaXRfZm9yX2xhbmVfaWRsZSkgewotCQlw cl9kZWJ1ZygiRFNJIFBIWSBVTFBTIG9wcyBub3QgcHJlc2VudFxuIik7Ci0JCXJldHVybiAwOwot CX0KLQotCW11dGV4X2xvY2soJnBoeS0+cGh5X2xvY2spOwotCi0JaWYgKGVuYWJsZSkKLQkJcmMg PSBkc2lfcGh5X2VuYWJsZV91bHBzKHBoeSwgY29uZmlnLCBjbGFtcF9lbmFibGVkKTsKLQllbHNl Ci0JCXJjID0gZHNpX3BoeV9kaXNhYmxlX3VscHMocGh5LCBjb25maWcpOwotCi0JaWYgKHJjKSB7 Ci0JCXByX2VycigiW0RTSV9QSFklZF0gVWxwcyBzdGF0ZSBjaGFuZ2UoJWQpIGZhaWxlZCwgcmM9 JWRcbiIsCi0JCQlwaHktPmluZGV4LCBlbmFibGUsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0J cHJfZGVidWcoIltEU0lfUEhZJWRdIFVMUFMgc3RhdGUgPSAlZFxuIiwgcGh5LT5pbmRleCwgZW5h YmxlKTsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlyZXR1cm4g cmM7Ci19Ci0KLS8qKgotICogZHNpX3BoeV9lbmFibGUoKSAtIGVuYWJsZSBEU0kgUEhZIGhhcmR3 YXJlCi0gKiBAZHNpX3BoeTogICAgICAgICAgICBEU0kgUEhZIGhhbmRsZS4KLSAqIEBjb25maWc6 ICAgICAgICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24uCi0gKiBAcGxsX3NvdXJjZTogICAg ICAgICBTb3VyY2UgUExMIGZvciBQSFkgY2xvY2suCi0gKiBAc2tpcF92YWxpZGF0aW9uOiAgICBW YWxpZGF0aW9uIHdpbGwgbm90IGJlIHBlcmZvcm1lZCBvbiBwYXJhbWV0ZXJzLgotICoKLSAqIFZh bGlkYXRlcyBhbmQgZW5hYmxlcyBEU0kgUEhZLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4K LSAqLwotaW50IGRzaV9waHlfZW5hYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAqcGh5LAotCQkgICBz dHJ1Y3QgZHNpX2hvc3RfY29uZmlnICpjb25maWcsCi0JCSAgIGVudW0gZHNpX3BoeV9wbGxfc291 cmNlIHBsbF9zb3VyY2UsCi0JCSAgIGJvb2wgc2tpcF92YWxpZGF0aW9uKQotewotCWludCByYyA9 IDA7Ci0KLQlpZiAoIXBoeSB8fCAhY29uZmlnKSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2Nr KTsKLQotCWlmICghc2tpcF92YWxpZGF0aW9uKQotCQlwcl9kZWJ1ZygiW1BIWV8lZF0gVE9ETzog cGVyZm9ybSB2YWxpZGF0aW9uXG4iLCBwaHktPmluZGV4KTsKLQotCW1lbWNweSgmcGh5LT5tb2Rl LCAmY29uZmlnLT52aWRlb190aW1pbmcsIHNpemVvZihwaHktPm1vZGUpKTsKLQltZW1jcHkoJnBo eS0+Y2ZnLmxhbmVfbWFwLCAmY29uZmlnLT5sYW5lX21hcCwgc2l6ZW9mKGNvbmZpZy0+bGFuZV9t YXApKTsKLQlwaHktPmRhdGFfbGFuZXMgPSBjb25maWctPmNvbW1vbl9jb25maWcuZGF0YV9sYW5l czsKLQlwaHktPmRzdF9mb3JtYXQgPSBjb25maWctPmNvbW1vbl9jb25maWcuZHN0X2Zvcm1hdDsK LQlwaHktPmNmZy5wbGxfc291cmNlID0gcGxsX3NvdXJjZTsKLQotCS8qKgotCSAqIElmIFBIWSB0 aW1pbmcgcGFyYW1ldGVycyBhcmUgbm90IHByZXNlbnQgaW4gcGFuZWwgZHRzaSBmaWxlLAotCSAq IHRoZW4gY2FsY3VsYXRlIHRoZW0gaW4gdGhlIGRyaXZlcgotCSAqLwotCWlmICghcGh5LT5jZmcu aXNfcGh5X3RpbWluZ19wcmVzZW50KQotCQlyYyA9IHBoeS0+aHcub3BzLmNhbGN1bGF0ZV90aW1p bmdfcGFyYW1zKCZwaHktPmh3LAotCQkJCQkJICZwaHktPm1vZGUsCi0JCQkJCQkgJmNvbmZpZy0+ Y29tbW9uX2NvbmZpZywKLQkJCQkJCSAmcGh5LT5jZmcudGltaW5nKTsKLQlpZiAocmMpIHsKLQkJ cHJfZXJyKCJbJXNdIGZhaWxlZCB0byBzZXQgdGltaW5nLCByYz0lZFxuIiwgcGh5LT5uYW1lLCBy Yyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JZHNpX3BoeV9lbmFibGVfaHcocGh5KTsKLQlwaHkt PmRzaV9waHlfc3RhdGUgPSBEU0lfUEhZX0VOR0lORV9PTjsKLQotZXJyb3I6Ci0JbXV0ZXhfdW5s b2NrKCZwaHktPnBoeV9sb2NrKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcGh5 X2Rpc2FibGUoKSAtIGRpc2FibGUgRFNJIFBIWSBoYXJkd2FyZS4KLSAqIEBwaHk6ICAgICAgICBE U0kgUEhZIGhhbmRsZS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lf cGh5X2Rpc2FibGUoc3RydWN0IG1zbV9kc2lfcGh5ICpwaHkpCi17Ci0JaW50IHJjID0gMDsKLQot CWlmICghcGh5KSB7Ci0JCXByX2VycigiSW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQlkc2lfcGh5X2Rpc2Fi bGVfaHcocGh5KTsKLQlwaHktPmRzaV9waHlfc3RhdGUgPSBEU0lfUEhZX0VOR0lORV9PRkY7Ci0J bXV0ZXhfdW5sb2NrKCZwaHktPnBoeV9sb2NrKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0g KiBkc2lfcGh5X2lkbGVfY3RybCgpIC0gZW5hYmxlL2Rpc2FibGUgRFNJIFBIWSBkdXJpbmcgaWRs ZSBzY3JlZW4KLSAqIEBwaHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAZW5hYmxlOiAg ICAgICBib29sZWFuIHRvIHNwZWNpZnkgUEhZIGVuYWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVy bjogZXJyb3IgY29kZS4KLSAqLwotCi1pbnQgZHNpX3BoeV9pZGxlX2N0cmwoc3RydWN0IG1zbV9k c2lfcGh5ICpwaHksIGJvb2wgZW5hYmxlKQotewotCWlmICghcGh5KSB7Ci0JCXByX2VycigiSW52 YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZw aHktPnBoeV9sb2NrKTsKLQlpZiAoZW5hYmxlKSB7Ci0JCWlmIChwaHktPmh3Lm9wcy5waHlfaWRs ZV9vbikKLQkJCXBoeS0+aHcub3BzLnBoeV9pZGxlX29uKCZwaHktPmh3LCAmcGh5LT5jZmcpOwot Ci0JCWlmIChwaHktPmh3Lm9wcy5yZWd1bGF0b3JfZW5hYmxlKQotCQkJcGh5LT5ody5vcHMucmVn dWxhdG9yX2VuYWJsZSgmcGh5LT5odywKLQkJCQkmcGh5LT5jZmcucmVndWxhdG9ycyk7Ci0JfSBl bHNlIHsKLQkJaWYgKHBoeS0+aHcub3BzLnBoeV9pZGxlX29mZikKLQkJCXBoeS0+aHcub3BzLnBo eV9pZGxlX29mZigmcGh5LT5odyk7Ci0JfQotCW11dGV4X3VubG9jaygmcGh5LT5waHlfbG9jayk7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X3NldF90aW1pbmdfcGFyYW1zKCkg LSB0aW1pbmcgcGFyYW1ldGVycyBmb3IgdGhlIHBhbmVsCi0gKiBAcGh5OiAgICAgICAgICBEU0kg UEhZIGhhbmRsZQotICogQHRpbWluZzogICAgICAgYXJyYXkgaG9sZGluZyB0aW1pbmcgcGFyYW1z LgotICogQHNpemU6ICAgICAgICAgc2l6ZSBvZiB0aGUgYXJyYXkuCi0gKgotICogV2hlbiBQSFkg dGltaW5nIGNhbGN1bGF0b3IgaXMgbm90IGltcGxlbWVudGVkLCB0aGlzIGFycmF5IHdpbGwgYmUg dXNlZCB0bwotICogcGFzcyBQSFkgdGltaW5nIGluZm9ybWF0aW9uLgotICoKLSAqIFJldHVybjog ZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfc2V0X3RpbWluZ19wYXJhbXMoc3RydWN0IG1z bV9kc2lfcGh5ICpwaHksCi0JCQkgICAgICB1MzIgKnRpbWluZywgdTMyIHNpemUpCi17Ci0JaW50 IHJjID0gMDsKLQotCWlmICghcGh5IHx8ICF0aW1pbmcgfHwgIXNpemUpIHsKLQkJcHJfZXJyKCJJ bnZhbGlkIHBhcmFtc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2so JnBoeS0+cGh5X2xvY2spOwotCi0JaWYgKHBoeS0+aHcub3BzLnBoeV90aW1pbmdfdmFsKQotCQly YyA9IHBoeS0+aHcub3BzLnBoeV90aW1pbmdfdmFsKCZwaHktPmNmZy50aW1pbmcsIHRpbWluZywg c2l6ZSk7Ci0JaWYgKCFyYykKLQkJcGh5LT5jZmcuaXNfcGh5X3RpbWluZ19wcmVzZW50ID0gdHJ1 ZTsKLQltdXRleF91bmxvY2soJnBoeS0+cGh5X2xvY2spOwotCXJldHVybiByYzsKLX0KLQotdm9p ZCBkc2lfcGh5X2Rydl9yZWdpc3Rlcih2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rl cigmZHNpX3BoeV9wbGF0Zm9ybV9kcml2ZXIpOwotfQotCi12b2lkIGRzaV9waHlfZHJ2X3VucmVn aXN0ZXIodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHNpX3BoeV9wbGF0 Zm9ybV9kcml2ZXIpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3Rh Z2luZy9kc2lfcGh5LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHku aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIzMDdlOS4uMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHkuaAorKysgL2Rldi9udWxsCkBA IC0xLDIzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lm bmRlZiBfRFNJX1BIWV9IXwotI2RlZmluZSBfRFNJX1BIWV9IXwotCi0jaW5jbHVkZSAiZHNpX2Rl ZnMuaCIKLSNpbmNsdWRlICJkc2lfY2xrLmgiCi0jaW5jbHVkZSAiZHNpX3B3ci5oIgotI2luY2x1 ZGUgImRzaV9waHlfaHcuaCIKLQotc3RydWN0IGRzaV92ZXJfc3BlY19pbmZvIHsKLQllbnVtIGRz aV9waHlfdmVyc2lvbiB2ZXJzaW9uOwotCXUzMiBsYW5lX2NmZ19jb3VudDsKLQl1MzIgc3RyZW5n dGhfY2ZnX2NvdW50OwotCXUzMiByZWd1bGF0b3JfY2ZnX2NvdW50OwotCXUzMiB0aW1pbmdfY2Zn X2NvdW50OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3BoeV9wb3dlcl9pbmZvIC0gZGlnaXRh bCBhbmQgYW5hbG9nIHBvd2VyIHN1cHBsaWVzIGZvciBEU0kgUEhZCi0gKiBAZGlnaXRhbDogICAg ICAgRGlnaXRhbCBwb3dlciBzdXBwbHkgZm9yIERTSSBQSFkuCi0gKiBAcGh5X3B3cjogICAgICAg QW5hbG9nIHBvd2VyIHN1cHBsaWVzIGZvciBEU0kgUEhZIHRvIHdvcmsuCi0gKi8KLXN0cnVjdCBk c2lfcGh5X3Bvd2VyX2luZm8gewotCXN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gZGlnaXRhbDsK LQlzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvIHBoeV9wd3I7Ci19OwotCi0vKioKLSAqIGVudW0g cGh5X2VuZ2luZV9zdGF0ZSAtIGRlZmluZSBlbmdpbmUgc3RhdHVzIGZvciBkc2kgcGh5LgotICog QERTSV9QSFlfRU5HSU5FX09GRjogIEVuZ2luZSBpcyB0dXJuZWQgb2ZmLgotICogQERTSV9QSFlf RU5HSU5FX09OOiAgIEVuZ2luZSBpcyB0dXJuZWQgb24uCi0gKiBARFNJX1BIWV9FTkdJTkVfTUFY OiAgTWF4aW11bSB2YWx1ZS4KLSAqLwotZW51bSBwaHlfZW5naW5lX3N0YXRlIHsKLQlEU0lfUEhZ X0VOR0lORV9PRkYgPSAwLAotCURTSV9QSFlfRU5HSU5FX09OLAotCURTSV9QSFlfRU5HSU5FX01B WCwKLX07Ci0KLQotLyoqCi0gKiBzdHJ1Y3QgbXNtX2RzaV9waHkgLSBEU0kgUEhZIG9iamVjdAot ICogQHBkZXY6ICAgICAgICAgICAgICBQb2ludGVyIHRvIHBsYXRmb3JtIGRldmljZS4KLSAqIEBp bmRleDogICAgICAgICAgICAgSW5zdGFuY2UgaWQuCi0gKiBAbmFtZTogICAgICAgICAgICAgIE5h bWUgb2YgdGhlIFBIWSBpbnN0YW5jZS4KLSAqIEByZWZjb3VudDogICAgICAgICAgUmVmZXJlbmNl IGNvdW50LgotICogQHBoeV9sb2NrOiAgICAgICAgICBNdXRleCBmb3IgaGFyZHdhcmUgYW5kIG9i amVjdCBhY2Nlc3MuCi0gKiBAdmVyX2luZm86ICAgICAgICAgIFZlcnNpb24gc3BlY2lmaWMgcGh5 IHBhcmFtZXRlcnMuCi0gKiBAaHc6ICAgICAgICAgICAgICAgIERTSSBQSFkgaGFyZHdhcmUgb2Jq ZWN0LgotICogQHB3cl9pbmZvOiAgICAgICAgICBQb3dlciBpbmZvcm1hdGlvbi4KLSAqIEBjZmc6 ICAgICAgICAgICAgICAgRFNJIHBoeSBjb25maWd1cmF0aW9uLgotICogQGNsa19jYjoJICAgICAg IHN0cnVjdHVyZSBjb250YWluaW5nIGNhbGwgYmFja3MgZm9yIGNsb2NrIGNvbnRyb2wKLSAqIEBw b3dlcl9zdGF0ZTogICAgICAgVHJ1ZSBpZiBQSFkgaXMgcG93ZXJlZCBvbi4KLSAqIEBkc2lfcGh5 X3N0YXRlOiAgICAgUEhZIHN0YXRlIGluZm9ybWF0aW9uLgotICogQG1vZGU6ICAgICAgICAgICAg ICBDdXJyZW50IG1vZGUuCi0gKiBAZGF0YV9sYW5lczogICAgICAgIE51bWJlciBvZiBkYXRhIGxh bmVzIHVzZWQuCi0gKiBAZHN0X2Zvcm1hdDogICAgICAgIERlc3RpbmF0aW9uIGZvcm1hdC4KLSAq Lwotc3RydWN0IG1zbV9kc2lfcGh5IHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owot CWludCBpbmRleDsKLQljb25zdCBjaGFyICpuYW1lOwotCXUzMiByZWZjb3VudDsKLQlzdHJ1Y3Qg bXV0ZXggcGh5X2xvY2s7Ci0KLQljb25zdCBzdHJ1Y3QgZHNpX3Zlcl9zcGVjX2luZm8gKnZlcl9p bmZvOwotCXN0cnVjdCBkc2lfcGh5X2h3IGh3OwotCi0Jc3RydWN0IGRzaV9waHlfcG93ZXJfaW5m byBwd3JfaW5mbzsKLQotCXN0cnVjdCBkc2lfcGh5X2NmZyBjZmc7Ci0Jc3RydWN0IGNsa19jdHJs X2NiIGNsa19jYjsKLQotCWVudW0gcGh5X2VuZ2luZV9zdGF0ZSBkc2lfcGh5X3N0YXRlOwotCWJv b2wgcG93ZXJfc3RhdGU7Ci0Jc3RydWN0IGRzaV9tb2RlX2luZm8gbW9kZTsKLQllbnVtIGRzaV9k YXRhX2xhbmVzIGRhdGFfbGFuZXM7Ci0JZW51bSBkc2lfcGl4ZWxfZm9ybWF0IGRzdF9mb3JtYXQ7 Ci19OwotCi0vKioKLSAqIGRzaV9waHlfZ2V0KCkgLSBnZXQgYSBkc2kgcGh5IGhhbmRsZSBmcm9t IGRldmljZSBub2RlCi0gKiBAb2Zfbm9kZTogICAgICAgICAgIGRldmljZSBub2RlIGZvciBkc2kg cGh5IGNvbnRyb2xsZXIKLSAqCi0gKiBHZXRzIHRoZSBEU0kgUEhZIGhhbmRsZSBmb3IgdGhlIGNv cnJlc3BvbmRpbmcgb2Zfbm9kZS4gVGhlIHJlZiBjb3VudCBpcwotICogaW5jcmVtZW50ZWQgdG8g b25lIGFsbCBzdWJzZXF1ZW50cyBnZXQgd2lsbCBmYWlsIHVudGlsIHRoZSBvcmlnaW5hbCBjbGll bnQKLSAqIGNhbGxzIGEgcHV0LgotICoKLSAqIFJldHVybjogRFNJIFBIWSBoYW5kbGUgb3IgYW4g ZXJyb3IgY29kZS4KLSAqLwotc3RydWN0IG1zbV9kc2lfcGh5ICpkc2lfcGh5X2dldChzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm9mX25vZGUpOwotCi0vKioKLSAqIGRzaV9waHlfcHV0KCkgLSByZWxlYXNl IGRzaSBwaHkgaGFuZGxlCi0gKiBAZHNpX3BoeTogICAgICAgICAgICAgIERTSSBQSFkgaGFuZGxl LgotICoKLSAqIFJlbGVhc2UgdGhlIERTSSBQSFkgaGFyZHdhcmUuIERyaXZlciB3aWxsIGNsZWFu IHVwIGFsbCByZXNvdXJjZXMgYW5kIHB1dHMKLSAqIGJhY2sgdGhlIERTSSBQSFkgaW50byByZXNl dCBzdGF0ZS4KLSAqLwotdm9pZCBkc2lfcGh5X3B1dChzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9w aHkpOwotCi0vKioKLSAqIGRzaV9waHlfZHJ2X2luaXQoKSAtIGluaXRpYWxpemUgZHNpIHBoeSBk cml2ZXIKLSAqIEBkc2lfcGh5OiAgICAgICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIEluaXRp YWxpemVzIERTSSBQSFkgZHJpdmVyLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRzaV9waHlfZ2V0 KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9kcnZfaW5p dChzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHkpOwotCi0vKioKLSAqIGRzaV9waHlfZHJ2X2Rl aW5pdCgpIC0gZGUtaW5pdGlhbGl6ZSBkc2kgcGh5IGRyaXZlcgotICogQGRzaV9waHk6ICAgICAg ICAgIERTSSBQSFkgaGFuZGxlLgotICoKLSAqIFJlbGVhc2UgYWxsIHJlc291cmNlcyBhY3F1aXJl ZCBieSBkc2lfcGh5X2Rydl9pbml0KCkuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci1pbnQgZHNpX3BoeV9kcnZfZGVpbml0KHN0cnVjdCBtc21fZHNpX3BoeSAqZHNpX3BoeSk7Ci0K LS8qKgotICogZHNpX3BoeV92YWxpZGF0ZV9tb2RlKCkgLSB2YWxpZGF0ZSBhIGRpc3BsYXkgbW9k ZQotICogQGRzaV9waHk6ICAgICAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKiBAbW9kZTogICAg ICAgICAgICAgICBNb2RlIGluZm9ybWF0aW9uLgotICoKLSAqIFZhbGlkYXRpb24gd2lsbCBmYWls IGlmIHRoZSBtb2RlIGNhbm5vdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIFBIWSBkcml2ZXIgb3IKLSAq IGhhcmR3YXJlLgotICoKLSAqIFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlf dmFsaWRhdGVfbW9kZShzdHJ1Y3QgbXNtX2RzaV9waHkgKmRzaV9waHksCi0JCQkgIHN0cnVjdCBk c2lfbW9kZV9pbmZvICptb2RlKTsKLQotLyoqCi0gKiBkc2lfcGh5X3NldF9wb3dlcl9zdGF0ZSgp IC0gZW5hYmxlL2Rpc2FibGUgZHNpIHBoeSBwb3dlciBzdXBwbGllcwotICogQGRzaV9waHk6ICAg ICAgICAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKiBAZW5hYmxlOiAgICAgICAgICAgICAgICBC b29sZWFuIGZsYWcgdG8gZW5hYmxlL2Rpc2FibGUuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2Rl LgotICovCi1pbnQgZHNpX3BoeV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IG1zbV9kc2lfcGh5ICpk c2lfcGh5LCBib29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX3BoeV9lbmFibGUoKSAtIGVuYWJs ZSBEU0kgUEhZIGhhcmR3YXJlCi0gKiBAZHNpX3BoeTogICAgICAgICAgICBEU0kgUEhZIGhhbmRs ZS4KLSAqIEBjb25maWc6ICAgICAgICAgICAgIERTSSBob3N0IGNvbmZpZ3VyYXRpb24uCi0gKiBA cGxsX3NvdXJjZTogICAgICAgICBTb3VyY2UgUExMIGZvciBQSFkgY2xvY2suCi0gKiBAc2tpcF92 YWxpZGF0aW9uOiAgICBWYWxpZGF0aW9uIHdpbGwgbm90IGJlIHBlcmZvcm1lZCBvbiBwYXJhbWV0 ZXJzLgotICoKLSAqIFZhbGlkYXRlcyBhbmQgZW5hYmxlcyBEU0kgUEhZLgotICoKLSAqIFJldHVy bjogZXJyb3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfZW5hYmxlKHN0cnVjdCBtc21fZHNpX3Bo eSAqZHNpX3BoeSwKLQkJICAgc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLAotCQkgICBl bnVtIGRzaV9waHlfcGxsX3NvdXJjZSBwbGxfc291cmNlLAotCQkgICBib29sIHNraXBfdmFsaWRh dGlvbik7Ci0KLS8qKgotICogZHNpX3BoeV9kaXNhYmxlKCkgLSBkaXNhYmxlIERTSSBQSFkgaGFy ZHdhcmUuCi0gKiBAcGh5OiAgICAgICAgRFNJIFBIWSBoYW5kbGUuCi0gKgotICogUmV0dXJuOiBl cnJvciBjb2RlLgotICovCi1pbnQgZHNpX3BoeV9kaXNhYmxlKHN0cnVjdCBtc21fZHNpX3BoeSAq cGh5KTsKLQotLyoqCi0gKiBkc2lfcGh5X3NldF91bHBzKCkgLSBzZXQgdWxwcyBzdGF0ZSBmb3Ig RFNJIHBIWQotICogQHBoeTogICAgICAgICAgRFNJIFBIWSBoYW5kbGUKLSAqIEBjb25maWc6CSAg RFNpIGhvc3QgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLSAqIEBlbmFibGU6CSAgRW5hYmxl L0Rpc2FibGUKLSAqIEBjbGFtcF9lbmFibGVkOiBtbXNzX2NsYW1wIGVuYWJsZWQvZGlzYWJsZWQK LSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X3NldF91bHBzKHN0 cnVjdCBtc21fZHNpX3BoeSAqcGh5LCAgc3RydWN0IGRzaV9ob3N0X2NvbmZpZyAqY29uZmlnLAot CQlib29sIGVuYWJsZSwgYm9vbCBjbGFtcF9lbmFibGVkKTsKLQotLyoqCi0gKiBkc2lfcGh5X2Ns a19jYl9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgUEhZIGNsb2NrIGNvbnRyb2wgY2FsbGJhY2sKLSAq IEBwaHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAY2xrX2NiOgkgIFN0cnVjdHVyZSBj b250YWluaW5nIGNhbGwgYmFjayBmb3IgY2xvY2sgY29udHJvbAotICoKLSAqIFJldHVybjogZXJy b3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfY2xrX2NiX3JlZ2lzdGVyKHN0cnVjdCBtc21fZHNp X3BoeSAqcGh5LAotCXN0cnVjdCBjbGtfY3RybF9jYiAqY2xrX2NiKTsKLQotLyoqCi0gKiBkc2lf cGh5X2lkbGVfY3RybCgpIC0gZW5hYmxlL2Rpc2FibGUgRFNJIFBIWSBkdXJpbmcgaWRsZSBzY3Jl ZW4KLSAqIEBwaHk6ICAgICAgICAgIERTSSBQSFkgaGFuZGxlCi0gKiBAZW5hYmxlOiAgICAgICBi b29sZWFuIHRvIHNwZWNpZnkgUEhZIGVuYWJsZS9kaXNhYmxlLgotICoKLSAqIFJldHVybjogZXJy b3IgY29kZS4KLSAqLwotaW50IGRzaV9waHlfaWRsZV9jdHJsKHN0cnVjdCBtc21fZHNpX3BoeSAq cGh5LCBib29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHNpX3BoeV9zZXRfdGltaW5nX3BhcmFtcygp IC0gdGltaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBwYW5lbAotICogQHBoeTogICAgICAgICAgRFNJ IFBIWSBoYW5kbGUKLSAqIEB0aW1pbmc6ICAgICAgIGFycmF5IGhvbGRpbmcgdGltaW5nIHBhcmFt cy4KLSAqIEBzaXplOiAgICAgICAgIHNpemUgb2YgdGhlIGFycmF5LgotICoKLSAqIFdoZW4gUEhZ IHRpbWluZyBjYWxjdWxhdG9yIGlzIG5vdCBpbXBsZW1lbnRlZCwgdGhpcyBhcnJheSB3aWxsIGJl IHVzZWQgdG8KLSAqIHBhc3MgUEhZIHRpbWluZyBpbmZvcm1hdGlvbi4KLSAqCi0gKiBSZXR1cm46 IGVycm9yIGNvZGUuCi0gKi8KLWludCBkc2lfcGh5X3NldF90aW1pbmdfcGFyYW1zKHN0cnVjdCBt c21fZHNpX3BoeSAqcGh5LAotCQkJICAgICAgdTMyICp0aW1pbmcsIHUzMiBzaXplKTsKLQotLyoq Ci0gKiBkc2lfcGh5X2Rydl9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyIGZv ciBkc2kgcGh5Ci0gKi8KLXZvaWQgZHNpX3BoeV9kcnZfcmVnaXN0ZXIodm9pZCk7Ci0KLS8qKgot ICogZHNpX3BoeV9kcnZfdW5yZWdpc3RlcigpIC0gdW5yZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXIK LSAqLwotdm9pZCBkc2lfcGh5X2Rydl91bnJlZ2lzdGVyKHZvaWQpOwotCi0jZW5kaWYgLyogX0RT SV9QSFlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX3BoeV9ody5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3 LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MWE0NTguLjAwMDAwMDAKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3LmgKKysrIC9kZXYvbnVs bApAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl Ci0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0K LSNpZm5kZWYgX0RTSV9QSFlfSFdfSF8KLSNkZWZpbmUgX0RTSV9QSFlfSFdfSF8KLQotI2luY2x1 ZGUgImRzaV9kZWZzLmgiCi0KLSNkZWZpbmUgRFNJX01BWF9TRVRUSU5HUyA4Ci0jZGVmaW5lIERT SV9QSFlfVElNSU5HX1YzX1NJWkUgMTIKLQotLyoqCi0gKiBlbnVtIGRzaV9waHlfdmVyc2lvbiAt IERTSSBQSFkgdmVyc2lvbiBlbnVtZXJhdGlvbgotICogQERTSV9QSFlfVkVSU0lPTl9VTktOT1dO OiAgICBVbmtub3duIHZlcnNpb24uCi0gKiBARFNJX1BIWV9WRVJTSU9OXzBfMF9IUE06ICAgIDI4 bm0tSFBNLgotICogQERTSV9QSFlfVkVSU0lPTl8wXzBfTFBNOiAgICAyOG5tLUhQTS4KLSAqIEBE U0lfUEhZX1ZFUlNJT05fMV8wOiAgICAgICAgMjBubQotICogQERTSV9QSFlfVkVSU0lPTl8yXzA6 ICAgICAgICAxNG5tCi0gKiBARFNJX1BIWV9WRVJTSU9OXzNfMDogICAgICAgIDEwbm0KLSAqIEBE U0lfUEhZX1ZFUlNJT05fTUFYOgotICovCi1lbnVtIGRzaV9waHlfdmVyc2lvbiB7Ci0JRFNJX1BI WV9WRVJTSU9OX1VOS05PV04sCi0JRFNJX1BIWV9WRVJTSU9OXzBfMF9IUE0sIC8qIDI4bm0tSFBN ICovCi0JRFNJX1BIWV9WRVJTSU9OXzBfMF9MUE0sIC8qIDI4bm0tTFBNICovCi0JRFNJX1BIWV9W RVJTSU9OXzFfMCwgLyogMjBubSAqLwotCURTSV9QSFlfVkVSU0lPTl8yXzAsIC8qIDE0bm0gKi8K LQlEU0lfUEhZX1ZFUlNJT05fM18wLCAvKiAxMG5tICovCi0JRFNJX1BIWV9WRVJTSU9OX01BWAot fTsKLQotLyoqCi0gKiBlbnVtIGRzaV9waHlfaHdfZmVhdHVyZXMgLSBmZWF0dXJlcyBzdXBwb3J0 ZWQgYnkgRFNJIFBIWSBoYXJkd2FyZQotICogQERTSV9QSFlfRFBIWTogICAgICAgIFN1cHBvcnRz IERQSFkKLSAqIEBEU0lfUEhZX0NQSFk6ICAgICAgICBTdXBwb3J0cyBDUEhZCi0gKiBARFNJX1BI WV9NQVhfRkVBVFVSRVM6Ci0gKi8KLWVudW0gZHNpX3BoeV9od19mZWF0dXJlcyB7Ci0JRFNJX1BI WV9EUEhZLAotCURTSV9QSFlfQ1BIWSwKLQlEU0lfUEhZX01BWF9GRUFUVVJFUwotfTsKLQotLyoq Ci0gKiBlbnVtIGRzaV9waHlfcGxsX3NvdXJjZSAtIHBsbCBjbG9jayBzb3VyY2UgZm9yIFBIWS4K LSAqIEBEU0lfUExMX1NPVVJDRV9TVEFOREFMT05FOiAgICBDbG9jayBpcyBzb3VyY2VkIGZyb20g bmF0aXZlIFBMTCBhbmQgaXMgbm90Ci0gKgkJCQkgIHNoYXJlZCBieSBvdGhlciBQSFlzLgotICog QERTSV9QTExfU09VUkNFX05BVElWRTogICAgICAgIENsb2NrIGlzIHNvdXJjZWQgZnJvbSBuYXRp dmUgUExMIGFuZCBpcwotICoJCQkJICBzaGFyZWQgYnkgb3RoZXIgUEhZcy4KLSAqIEBEU0lfUExM X1NPVVJDRV9OT05fTkFUSVZFOiAgICBDbG9jayBpcyBzb3VyY2VkIGZyb20gb3RoZXIgUEhZcy4K LSAqIEBEU0lfUExMX1NPVVJDRV9NQVg6Ci0gKi8KLWVudW0gZHNpX3BoeV9wbGxfc291cmNlIHsK LQlEU0lfUExMX1NPVVJDRV9TVEFOREFMT05FID0gMCwKLQlEU0lfUExMX1NPVVJDRV9OQVRJVkUs Ci0JRFNJX1BMTF9TT1VSQ0VfTk9OX05BVElWRSwKLQlEU0lfUExMX1NPVVJDRV9NQVgKLX07Ci0K LS8qKgotICogc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAtIEhvbGRzIHJlZ2lzdGVyIHZh bHVlcyBmb3IgUEhZIHBhcmFtZXRlcnMKLSAqIEBsYW5lOiAgICAgICAgICAgQSBzZXQgb2YgbWF4 aW11bSA4IHZhbHVlcyBmb3IgZWFjaCBsYW5lLgotICogQGxhbmVfdjM6ICAgICAgICBBIHNldCBv ZiBtYXhpbXVtIDEyIHZhbHVlcyBmb3IgZWFjaCBsYW5lLgotICogQGNvdW50X3Blcl9sYW5lOiBO dW1iZXIgb2YgdmFsdWVzIHBlciBlYWNoIGxhbmUuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X3Blcl9s YW5lX2NmZ3MgewotCXU4IGxhbmVbRFNJX0xBTkVfTUFYXVtEU0lfTUFYX1NFVFRJTkdTXTsKLQl1 OCBsYW5lX3YzW0RTSV9QSFlfVElNSU5HX1YzX1NJWkVdOwotCXUzMiBjb3VudF9wZXJfbGFuZTsK LX07Ci0KLS8qKgotICogc3RydWN0IGRzaV9waHlfY2ZnIC0gRFNJIFBIWSBjb25maWd1cmF0aW9u Ci0gKiBAbGFuZWNmZzogICAgICAgICAgTGFuZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgotICog QHN0cmVuZ3RoOiAgICAgICAgIFN0cmVuZ3RoIHNldHRpbmdzIGZvciBsYW5lcy4KLSAqIEB0aW1p bmc6ICAgICAgICAgICBUaW1pbmcgcGFyYW1ldGVycyBmb3IgbGFuZXMuCi0gKiBAaXNfcGh5X3Rp bWluZ19wcmVzZW50OglCb29sZWFuIHdoZXRoZXIgcGh5IHRpbWluZ3MgYXJlIGRlZmluZWQuCi0g KiBAcmVndWxhdG9yczogICAgICAgUmVndWxhdG9yIHNldHRpbmdzIGZvciBsYW5lcy4KLSAqIEBw bGxfc291cmNlOiAgICAgICBQTEwgc291cmNlLgotICogQGxhbmVfbWFwOiAgICAgICAgIERTSSBs b2dpY2FsIHRvIFBIWSBsYW5lIG1hcHBpbmcuCi0gKi8KLXN0cnVjdCBkc2lfcGh5X2NmZyB7Ci0J c3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyBsYW5lY2ZnOwotCXN0cnVjdCBkc2lfcGh5X3Bl cl9sYW5lX2NmZ3Mgc3RyZW5ndGg7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyB0aW1p bmc7Ci0JYm9vbCBpc19waHlfdGltaW5nX3ByZXNlbnQ7Ci0Jc3RydWN0IGRzaV9waHlfcGVyX2xh bmVfY2ZncyByZWd1bGF0b3JzOwotCWVudW0gZHNpX3BoeV9wbGxfc291cmNlIHBsbF9zb3VyY2U7 Ci0Jc3RydWN0IGRzaV9sYW5lX21hcCBsYW5lX21hcDsKLX07Ci0KLXN0cnVjdCBkc2lfcGh5X2h3 OwotCi1zdHJ1Y3QgcGh5X3VscHNfY29uZmlnX29wcyB7Ci0JLyoqCi0JICogd2FpdF9mb3JfbGFu ZV9pZGxlKCkgLSB3YWl0IGZvciBEU0kgbGFuZXMgdG8gZ28gdG8gaWRsZSBzdGF0ZQotCSAqIEBw aHk6ICAgICAgICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICog QGxhbmVzOiAgICAgICAgIE9SZWQgbGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykg d2hpY2ggbmVlZAotCSAqICAgICAgICAgICAgICAgICB0byBiZSBjaGVja2VkIHRvIGJlIGluIGlk bGUgc3RhdGUuCi0JICovCi0JaW50ICgqd2FpdF9mb3JfbGFuZV9pZGxlKShzdHJ1Y3QgZHNpX3Bo eV9odyAqcGh5LCB1MzIgbGFuZXMpOwotCi0JLyoqCi0JICogdWxwc19yZXF1ZXN0KCkgLSByZXF1 ZXN0IHVscHMgZW50cnkgZm9yIHNwZWNpZmllZCBsYW5lcwotCSAqIEBwaHk6ICAgICAgICAgICBQ b2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICogQGNmZzogICAgICAgICAg IFBlciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0cmVuZ3RoIGFuZCBsYW5lCi0J ICoJICAgICAgICAgICBjb25maWd1cmF0aW9ucy4KLQkgKiBAbGFuZXM6ICAgICAgICAgT1JlZCBs aXN0IG9mIGxhbmVzIChlbnVtIGRzaV9kYXRhX2xhbmVzKSB3aGljaCBuZWVkCi0JICogICAgICAg ICAgICAgICAgIHRvIGVudGVyIFVMUFMuCi0JICoKLQkgKiBDYWxsZXIgc2hvdWxkIGNoZWNrIGlm IGxhbmVzIGFyZSBpbiBVTFBTIG1vZGUgYnkgY2FsbGluZwotCSAqIGdldF9sYW5lc19pbl91bHBz KCkgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgKCp1bHBzX3JlcXVlc3QpKHN0cnVjdCBkc2lfcGh5 X2h3ICpwaHksCi0JCQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVzKTsKLQotCS8q KgotCSAqIHVscHNfZXhpdCgpIC0gZXhpdCBVTFBTIG9uIHNwZWNpZmllZCBsYW5lcwotCSAqIEBw aHk6ICAgICAgICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICog QGNmZzogICAgICAgICAgIFBlciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0cmVu Z3RoIGFuZCBsYW5lCi0JICogICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLgotCSAqIEBs YW5lczogICAgICAgICBPUmVkIGxpc3Qgb2YgbGFuZXMgKGVudW0gZHNpX2RhdGFfbGFuZXMpIHdo aWNoIG5lZWQKLQkgKiAgICAgICAgICAgICAgICAgdG8gZXhpdCBVTFBTLgotCSAqCi0JICogQ2Fs bGVyIHNob3VsZCBjaGVjayBpZiBsYW5lcyBhcmUgaW4gYWN0aXZlIG1vZGUgYnkgY2FsbGluZwot CSAqIGdldF9sYW5lc19pbl91bHBzKCkgb3BlcmF0aW9uLgotCSAqLwotCXZvaWQgKCp1bHBzX2V4 aXQpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZywg dTMyIGxhbmVzKTsKLQotCS8qKgotCSAqIGdldF9sYW5lc19pbl91bHBzKCkgLSByZXR1cm5zIHRo ZSBsaXN0IG9mIGxhbmVzIGluIFVMUFMgbW9kZQotCSAqIEBwaHk6ICAgICAgICAgICBQb2ludGVy IHRvIERTSSBQSFkgaGFyZHdhcmUgaW5zdGFuY2UuCi0JICoKLQkgKiBSZXR1cm5zIGFuIE9SZWQg bGlzdCBvZiBsYW5lcyAoZW51bSBkc2lfZGF0YV9sYW5lcykgdGhhdCBhcmUgaW4gVUxQUwotCSAq IHN0YXRlLgotCSAqCi0JICogUmV0dXJuOiBMaXN0IG9mIGxhbmVzIGluIFVMUFMgc3RhdGUuCi0J ICovCi0JdTMyICgqZ2V0X2xhbmVzX2luX3VscHMpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwot Ci0JLyoqCi0JICogaXNfbGFuZXNfaW5fdWxwcygpIC0gY2hlY2tzIGlmIHRoZSBnaXZlbiBsYW5l cyBhcmUgaW4gdWxwcwotCSAqIEBsYW5lczogICAgICAgICAgIGxhbmVzIHRvIGJlIGNoZWNrZWQu Ci0JICogQHVscHNfbGFuZXM6CSAgIGxhbmVzIGluIHVscHMgY3VycmVubHkuCi0JICoKLQkgKiBS ZXR1cm46IHRydWUgaWYgYWxsIHRoZSBnaXZlbiBsYW5lcyBhcmUgaW4gdWxwczsgZmFsc2Ugb3Ro ZXJ3aXNlLgotCSAqLwotCWJvb2wgKCppc19sYW5lc19pbl91bHBzKSh1MzIgdWxwcywgdTMyIHVs cHNfbGFuZXMpOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3BoeV9od19vcHMgLSBPcGVyYXRp b25zIGZvciBEU0kgUEhZIGhhcmR3YXJlLgotICogQHJlZ3VsYXRvcl9lbmFibGU6ICAgICAgICAg IEVuYWJsZSBQSFkgcmVndWxhdG9ycy4KLSAqIEByZWd1bGF0b3JfZGlzYWJsZTogICAgICAgICBE aXNhYmxlIFBIWSByZWd1bGF0b3JzLgotICogQGVuYWJsZTogICAgICAgICAgICAgICAgICAgIEVu YWJsZSBQSFkuCi0gKiBAZGlzYWJsZTogICAgICAgICAgICAgICAgICAgRGlzYWJsZSBQSFkuCi0g KiBAY2FsY3VsYXRlX3RpbWluZ19wYXJhbXM6ICAgQ2FsY3VsYXRlIFBIWSB0aW1pbmcgcGFyYW1z IGZyb20gbW9kZSBpbmZvcm1hdGlvbgotICovCi1zdHJ1Y3QgZHNpX3BoeV9od19vcHMgewotCS8q KgotCSAqIHJlZ3VsYXRvcl9lbmFibGUoKSAtIGVuYWJsZSByZWd1bGF0b3JzIGZvciBEU0kgUEhZ Ci0JICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotCSAq IEByZWdfY2ZnOiAgUmVndWxhdG9yIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBEU0kgbGFuZXMuCi0J ICovCi0Jdm9pZCAoKnJlZ3VsYXRvcl9lbmFibGUpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0J CQkJIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnJlZ19jZmcpOwotCi0JLyoqCi0JICog cmVndWxhdG9yX2Rpc2FibGUoKSAtIGRpc2FibGUgcmVndWxhdG9ycwotCSAqIEBwaHk6ICAgICAg UG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLQkgKi8KLQl2b2lkICgqcmVndWxh dG9yX2Rpc2FibGUpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpOwotCi0JLyoqCi0JICogZW5hYmxl KCkgLSBFbmFibGUgUEhZIGhhcmR3YXJlCi0JICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQ SFkgaGFyZHdhcmUgb2JqZWN0LgotCSAqIEBjZmc6ICAgICAgUGVyIGxhbmUgY29uZmlndXJhdGlv bnMgZm9yIHRpbWluZywgc3RyZW5ndGggYW5kIGxhbmUKLQkgKgkgICAgICBjb25maWd1cmF0aW9u cy4KLQkgKi8KLQl2b2lkICgqZW5hYmxlKShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCBzdHJ1Y3Qg ZHNpX3BoeV9jZmcgKmNmZyk7Ci0KLQkvKioKLQkgKiBkaXNhYmxlKCkgLSBEaXNhYmxlIFBIWSBo YXJkd2FyZQotCSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVj dC4KLQkgKiBAY2ZnOiAgICAgIFBlciBsYW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aW1pbmcsIHN0 cmVuZ3RoIGFuZCBsYW5lCi0JICoJICAgICAgY29uZmlndXJhdGlvbnMuCi0JICovCi0Jdm9pZCAo KmRpc2FibGUpKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2Zn KTsKLQotCS8qKgotCSAqIHBoeV9pZGxlX29uKCkgLSBFbmFibGUgUEhZIGhhcmR3YXJlIHdoZW4g ZW50ZXJpbmcgaWRsZSBzY3JlZW4KLQkgKiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBo YXJkd2FyZSBvYmplY3QuCi0JICogQGNmZzogICAgICBQZXIgbGFuZSBjb25maWd1cmF0aW9ucyBm b3IgdGltaW5nLCBzdHJlbmd0aCBhbmQgbGFuZQotCSAqCSAgICAgIGNvbmZpZ3VyYXRpb25zLgot CSAqLwotCXZvaWQgKCpwaHlfaWRsZV9vbikoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwgc3RydWN0 IGRzaV9waHlfY2ZnICpjZmcpOwotCi0JLyoqCi0JICogcGh5X2lkbGVfb2ZmKCkgLSBEaXNhYmxl IFBIWSBoYXJkd2FyZSB3aGVuIGV4aXRpbmcgaWRsZSBzY3JlZW4KLQkgKiBAcGh5OiAgICAgIFBv aW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0JICovCi0Jdm9pZCAoKnBoeV9pZGxl X29mZikoc3RydWN0IGRzaV9waHlfaHcgKnBoeSk7Ci0KLQkvKioKLQkgKiBjYWxjdWxhdGVfdGlt aW5nX3BhcmFtcygpIC0gY2FsY3VsYXRlcyB0aW1pbmcgcGFyYW1ldGVycy4KLQkgKiBAcGh5OiAg ICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0JICogQG1vZGU6ICAgICBN b2RlIGluZm9ybWF0aW9uIGZvciB3aGljaCB0aW1pbmcgaGFzIHRvIGJlIGNhbGN1bGF0ZWQuCi0J ICogQGNvbmZpZzogICBEU0kgaG9zdCBjb25maWd1cmF0aW9uIGZvciB0aGlzIG1vZGUuCi0JICog QHRpbWluZzogICBUaW1pbmcgcGFyYW1ldGVycyBmb3IgZWFjaCBsYW5lIHdoaWNoIHdpbGwgYmUg cmV0dXJuZWQuCi0JICovCi0JaW50ICgqY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMpKHN0cnVjdCBk c2lfcGh5X2h3ICpwaHksCi0JCQkJICAgICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAot CQkJCSAgICAgICBzdHJ1Y3QgZHNpX2hvc3RfY29tbW9uX2NmZyAqY29uZmlnLAotCQkJCSAgICAg ICBzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcpOwotCi0JLyoqCi0JICogcGh5 X3RpbWluZ192YWwoKSAtIEdldHMgUEhZIHRpbWluZyB2YWx1ZXMuCi0JICogQHRpbWluZ192YWw6 IFRpbWluZyBwYXJhbWV0ZXJzIGZvciBlYWNoIGxhbmUgd2hpY2ggd2lsbCBiZSByZXR1cm5lZC4K LQkgKiBAdGltaW5nOiBBcnJheSBjb250YWluaW5nIFBIWSB0aW1pbmcgdmFsdWVzCi0JICogQHNp emU6IFNpemUgb2YgdGhlIGFycmF5Ci0JICovCi0JaW50ICgqcGh5X3RpbWluZ192YWwpKHN0cnVj dCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZ192YWwsCi0JCQkJdTMyICp0aW1pbmcsIHUz MiBzaXplKTsKLQotCXZvaWQgKnRpbWluZ19vcHM7Ci0Jc3RydWN0IHBoeV91bHBzX2NvbmZpZ19v cHMgdWxwc19vcHM7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkc2lfcGh5X2h3IC0gRFNJIHBoeSBo YXJkd2FyZSBvYmplY3Qgc3BlY2lmaWMgdG8gYW4gaW5zdGFuY2UKLSAqIEBiYXNlOiAgICAgICAg ICAgICAgICAgIFZBIGZvciB0aGUgRFNJIFBIWSBiYXNlIGFkZHJlc3MuCi0gKiBAbGVuZ3RoOiAg ICAgICAgICAgICAgICBMZW5ndGggb2YgdGhlIERTSSBQSFkgcmVnaXN0ZXIgYmFzZSBtYXAuCi0g KiBAaW5kZXg6ICAgICAgICAgICAgICAgICBJbnN0YW5jZSBJRCBvZiB0aGUgY29udHJvbGxlci4K LSAqIEB2ZXJzaW9uOiAgICAgICAgICAgICAgIERTSSBQSFkgdmVyc2lvbi4KLSAqIEBmZWF0dXJl X21hcDogICAgICAgICAgIEZlYXR1cmVzIHN1cHBvcnRlZCBieSBEU0kgUEhZLgotICogQG9wczog ICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gcG9pbnRlciB0byBQSFkgb3BlcmF0aW9ucy4KLSAq Lwotc3RydWN0IGRzaV9waHlfaHcgewotCXZvaWQgX19pb21lbSAqYmFzZTsKLQl1MzIgbGVuZ3Ro OwotCXUzMiBpbmRleDsKLQotCWVudW0gZHNpX3BoeV92ZXJzaW9uIHZlcnNpb247Ci0KLQlERUNM QVJFX0JJVE1BUChmZWF0dXJlX21hcCwgRFNJX1BIWV9NQVhfRkVBVFVSRVMpOwotCXN0cnVjdCBk c2lfcGh5X2h3X29wcyBvcHM7Ci19OwotCi0jZW5kaWYgLyogX0RTSV9QSFlfSFdfSF8gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8w LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfaHdfdjJfMC5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDU0NTgxLi4wMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV9od192Ml8wLmMKKysrIC9kZXYvbnVs bApAQCAtMSwyNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNS0yMDE4LCBUaGUg TGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl Ci0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0K LSNkZWZpbmUgcHJfZm10KGZtdCkgImRzaS1waHktaHc6IiBmbXQKLSNpbmNsdWRlIDxsaW51eC9t YXRoNjQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImRzaV9ody5oIgot I2luY2x1ZGUgImRzaV9waHlfaHcuaCIKLQotI2RlZmluZSBEU0lQSFlfQ01OX1JFVklTSU9OX0lE MCAgICAgICAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgRFNJUEhZX0NNTl9SRVZJU0lPTl9J RDEgICAgICAgICAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIERTSVBIWV9DTU5fUkVWSVNJT05f SUQyICAgICAgICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBEU0lQSFlfQ01OX1JFVklTSU9O X0lEMyAgICAgICAgICAgICAgICAgICAweDAwMEMKLSNkZWZpbmUgRFNJUEhZX0NNTl9DTEtfQ0ZH MCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0xLX0NG RzEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxNAotI2RlZmluZSBEU0lQSFlfQ01OX0dMQkxf VEVTVF9DVFJMICAgICAgICAgICAgICAgICAweDAwMTgKLSNkZWZpbmUgRFNJUEhZX0NNTl9DVFJM XzAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFDCi0jZGVmaW5lIERTSVBIWV9DTU5fQ1RS TF8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBEU0lQSFlfQ01OX0NB TF9IV19UUklHR0VSICAgICAgICAgICAgICAgICAweDAwMjQKLSNkZWZpbmUgRFNJUEhZX0NNTl9D QUxfU1dfQ0ZHMCAgICAgICAgICAgICAgICAgICAgMHgwMDI4Ci0jZGVmaW5lIERTSVBIWV9DTU5f Q0FMX1NXX0NGRzEgICAgICAgICAgICAgICAgICAgIDB4MDAyQwotI2RlZmluZSBEU0lQSFlfQ01O X0NBTF9TV19DRkcyICAgICAgICAgICAgICAgICAgICAweDAwMzAKLSNkZWZpbmUgRFNJUEhZX0NN Tl9DQUxfSFdfQ0ZHMCAgICAgICAgICAgICAgICAgICAgMHgwMDM0Ci0jZGVmaW5lIERTSVBIWV9D TU5fQ0FMX0hXX0NGRzEgICAgICAgICAgICAgICAgICAgIDB4MDAzOAotI2RlZmluZSBEU0lQSFlf Q01OX0NBTF9IV19DRkcyICAgICAgICAgICAgICAgICAgICAweDAwM0MKLSNkZWZpbmUgRFNJUEhZ X0NNTl9DQUxfSFdfQ0ZHMyAgICAgICAgICAgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIERTSVBI WV9DTU5fQ0FMX0hXX0NGRzQgICAgICAgICAgICAgICAgICAgIDB4MDA0NAotI2RlZmluZSBEU0lQ SFlfQ01OX1BMTF9DTlRSTCAgICAgICAgICAgICAgICAgICAgICAweDAwNDgKLSNkZWZpbmUgRFNJ UEhZX0NNTl9MRE9fQ05UUkwgICAgICAgICAgICAgICAgICAgICAgMHgwMDRDCi0KLSNkZWZpbmUg RFNJUEhZX0NNTl9SRUdVTEFUT1JfQ0FMX1NUQVRVUzAgICAgICAgICAgMHgwMDY0Ci0jZGVmaW5l IERTSVBIWV9DTU5fUkVHVUxBVE9SX0NBTF9TVEFUVVMxICAgICAgICAgIDB4MDA2OAotCi0vKiBu ID0gMC4uMyBmb3IgZGF0YSBsYW5lcyBhbmQgbiA9IDQgZm9yIGNsb2NrIGxhbmUgKi8KLSNkZWZp bmUgRFNJUEhZX0RMTlhfQ0ZHMChuKSAgICAgICAgICAgICAgICAgICAgICgweDEwMCArICgobikg KiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQ0ZHMShuKSAgICAgICAgICAgICAgICAgICAg ICgweDEwNCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQ0ZHMihuKSAgICAg ICAgICAgICAgICAgICAgICgweDEwOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RM TlhfQ0ZHMyhuKSAgICAgICAgICAgICAgICAgICAgICgweDEwQyArICgobikgKiAweDgwKSkKLSNk ZWZpbmUgRFNJUEhZX0RMTlhfVEVTVF9EQVRBUEFUSChuKSAgICAgICAgICAgICgweDExMCArICgo bikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVEVTVF9TVFIobikgICAgICAgICAgICAg ICAgICgweDExNCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NU UkxfNChuKSAgICAgICAgICAgICgweDExOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZ X0RMTlhfVElNSU5HX0NUUkxfNShuKSAgICAgICAgICAgICgweDExQyArICgobikgKiAweDgwKSkK LSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNihuKSAgICAgICAgICAgICgweDEyMCAr ICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNyhuKSAgICAg ICAgICAgICgweDEyNCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5H X0NUUkxfOChuKSAgICAgICAgICAgICgweDEyOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJ UEhZX0RMTlhfVElNSU5HX0NUUkxfOShuKSAgICAgICAgICAgICgweDEyQyArICgobikgKiAweDgw KSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfMTAobikgICAgICAgICAgICgweDEz MCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfMTEobikg ICAgICAgICAgICgweDEzNCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfU1RS RU5HVEhfQ1RSTF8wKG4pICAgICAgICAgICgweDEzOCArICgobikgKiAweDgwKSkKLSNkZWZpbmUg RFNJUEhZX0RMTlhfU1RSRU5HVEhfQ1RSTF8xKG4pICAgICAgICAgICgweDEzQyArICgobikgKiAw eDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9QT0xZKG4pICAgICAgICAgICAgICAgICgw eDE0MCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TRUVEMChuKSAg ICAgICAgICAgICAgICgweDE0NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhf QklTVF9TRUVEMShuKSAgICAgICAgICAgICAgICgweDE0OCArICgobikgKiAweDgwKSkKLSNkZWZp bmUgRFNJUEhZX0RMTlhfQklTVF9IRUFEKG4pICAgICAgICAgICAgICAgICgweDE0QyArICgobikg KiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TT1QobikgICAgICAgICAgICAgICAg ICgweDE1MCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9DVFJMMChu KSAgICAgICAgICAgICAgICgweDE1NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RM TlhfQklTVF9DVFJMMShuKSAgICAgICAgICAgICAgICgweDE1OCArICgobikgKiAweDgwKSkKLSNk ZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9DVFJMMihuKSAgICAgICAgICAgICAgICgweDE1QyArICgo bikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9DVFJMMyhuKSAgICAgICAgICAg ICAgICgweDE2MCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfVlJFR19DTlRS TChuKSAgICAgICAgICAgICAgICgweDE2NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZ X0RMTlhfSFNUWF9TVFJfU1RBVFVTKG4pICAgICAgICAgICgweDE2OCArICgobikgKiAweDgwKSkK LSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TVEFUVVMwKG4pICAgICAgICAgICAgICgweDE2QyAr ICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9TVEFUVVMxKG4pICAgICAg ICAgICAgICgweDE3MCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfQklTVF9T VEFUVVMyKG4pICAgICAgICAgICAgICgweDE3NCArICgobikgKiAweDgwKSkKLSNkZWZpbmUgRFNJ UEhZX0RMTlhfQklTVF9TVEFUVVMzKG4pICAgICAgICAgICAgICgweDE3OCArICgobikgKiAweDgw KSkKLSNkZWZpbmUgRFNJUEhZX0RMTlhfTUlTUl9TVEFUVVMobikgICAgICAgICAgICAgICgweDE3 QyArICgobikgKiAweDgwKSkKLQotI2RlZmluZSBEU0lQSFlfUExMX0NMS0JVRkxSX0VOICAgICAg ICAgICAgICAgICAgMHgwNDFDCi0jZGVmaW5lIERTSVBIWV9QTExfUExMX0JBTkRHQVAgICAgICAg ICAgICAgICAgICAweDA1MDgKLQotLyoqCi0gKiByZWd1bGF0b3JfZW5hYmxlKCkgLSBlbmFibGUg cmVndWxhdG9ycyBmb3IgRFNJIFBIWQotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkg aGFyZHdhcmUgb2JqZWN0LgotICogQHJlZ19jZmc6ICBSZWd1bGF0b3IgY29uZmlndXJhdGlvbiBm b3IgYWxsIERTSSBsYW5lcy4KLSAqLwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfcmVndWxhdG9yX2Vu YWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCSAgICAgIHN0cnVjdCBkc2lfcGh5X3Bl cl9sYW5lX2NmZ3MgKnJlZ19jZmcpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNB TF9MQU5FXzA7IGkgPCBEU0lfTEFORV9NQVg7IGkrKykKLQkJRFNJX1czMihwaHksIERTSVBIWV9E TE5YX1ZSRUdfQ05UUkwoaSksIHJlZ19jZmctPmxhbmVbaV1bMF0pOwotCi0JLyogbWFrZSBzdXJl IGFsbCB2YWx1ZXMgYXJlIHdyaXR0ZW4gdG8gaGFyZHdhcmUgKi8KLQl3bWIoKTsKLQotCXByX2Rl YnVnKCJbRFNJXyVkXSBQaHkgcmVndWxhdG9ycyBlbmFibGVkXG4iLCBwaHktPmluZGV4KTsKLX0K LQotLyoqCi0gKiByZWd1bGF0b3JfZGlzYWJsZSgpIC0gZGlzYWJsZSByZWd1bGF0b3JzCi0gKiBA cGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0gKi8KLXZvaWQg ZHNpX3BoeV9od192Ml8wX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkp Ci17Ci0JcHJfZGVidWcoIltEU0lfJWRdIFBoeSByZWd1bGF0b3JzIGRpc2FibGVkXG4iLCBwaHkt PmluZGV4KTsKLX0KLQotLyoqCi0gKiBlbmFibGUoKSAtIEVuYWJsZSBQSFkgaGFyZHdhcmUKLSAq IEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBjZmc6 ICAgICAgUGVyIGxhbmUgY29uZmlndXJhdGlvbnMgZm9yIHRpbWluZywgc3RyZW5ndGggYW5kIGxh bmUKLSAqCSAgICAgIGNvbmZpZ3VyYXRpb25zLgotICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9l bmFibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAgICBzdHJ1Y3QgZHNpX3BoeV9jZmcg KmNmZykKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcg PSAmY2ZnLT50aW1pbmc7Ci0JdTMyIGRhdGE7Ci0KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9M RE9fQ05UUkwsIDB4MUMpOwotCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fR0xCTF9URVNUX0NU UkwsIDB4MSk7Ci0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFY OyBpKyspIHsKLQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMChpKSwgY2ZnLT5sYW5l Y2ZnLmxhbmVbaV1bMF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMShpKSwgY2Zn LT5sYW5lY2ZnLmxhbmVbaV1bMV0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfQ0ZHMihp KSwgY2ZnLT5sYW5lY2ZnLmxhbmVbaV1bMl0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhf Q0ZHMyhpKSwgY2ZnLT5sYW5lY2ZnLmxhbmVbaV1bM10pOwotCi0JCURTSV9XMzIocGh5LCBEU0lQ SFlfRExOWF9URVNUX1NUUihpKSwgMHg4OCk7Ci0KLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5Y X1RJTUlOR19DVFJMXzQoaSksIHRpbWluZy0+bGFuZVtpXVswXSk7Ci0JCURTSV9XMzIocGh5LCBE U0lQSFlfRExOWF9USU1JTkdfQ1RSTF81KGkpLCB0aW1pbmctPmxhbmVbaV1bMV0pOwotCQlEU0lf VzMyKHBoeSwgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfNihpKSwgdGltaW5nLT5sYW5lW2ldWzJd KTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1RJTUlOR19DVFJMXzcoaSksIHRpbWluZy0+ bGFuZVtpXVszXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9USU1JTkdfQ1RSTF84KGkp LCB0aW1pbmctPmxhbmVbaV1bNF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfVElNSU5H X0NUUkxfOShpKSwgdGltaW5nLT5sYW5lW2ldWzVdKTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9E TE5YX1RJTUlOR19DVFJMXzEwKGkpLCB0aW1pbmctPmxhbmVbaV1bNl0pOwotCQlEU0lfVzMyKHBo eSwgRFNJUEhZX0RMTlhfVElNSU5HX0NUUkxfMTEoaSksIHRpbWluZy0+bGFuZVtpXVs3XSk7Ci0K LQkJRFNJX1czMihwaHksIERTSVBIWV9ETE5YX1NUUkVOR1RIX0NUUkxfMChpKSwKLQkJCWNmZy0+ c3RyZW5ndGgubGFuZVtpXVswXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9TVFJFTkdU SF9DVFJMXzEoaSksCi0JCQljZmctPnN0cmVuZ3RoLmxhbmVbaV1bMV0pOwotCX0KLQotCS8qIG1h a2Ugc3VyZSBhbGwgdmFsdWVzIGFyZSB3cml0dGVuIHRvIGhhcmR3YXJlIGJlZm9yZSBlbmFibGlu ZyBwaHkgKi8KLQl3bWIoKTsKLQotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMSwgMHg4 MCk7Ci0JdWRlbGF5KDEwMCk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RSTF8xLCAweDAw KTsKLQotCWRhdGEgPSBEU0lfUjMyKHBoeSwgRFNJUEhZX0NNTl9HTEJMX1RFU1RfQ1RSTCk7Ci0K LQlzd2l0Y2ggKGNmZy0+cGxsX3NvdXJjZSkgewotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfU1RBTkRB TE9ORToKLQkJRFNJX1czMihwaHksIERTSVBIWV9QTExfQ0xLQlVGTFJfRU4sIDB4MDEpOwotCQlk YXRhICY9IH5CSVQoMik7Ci0JCWJyZWFrOwotCWNhc2UgRFNJX1BMTF9TT1VSQ0VfTkFUSVZFOgot CQlEU0lfVzMyKHBoeSwgRFNJUEhZX1BMTF9DTEtCVUZMUl9FTiwgMHgwMyk7Ci0JCWRhdGEgJj0g fkJJVCgyKTsKLQkJYnJlYWs7Ci0JY2FzZSBEU0lfUExMX1NPVVJDRV9OT05fTkFUSVZFOgotCQlE U0lfVzMyKHBoeSwgRFNJUEhZX1BMTF9DTEtCVUZMUl9FTiwgMHgwMCk7Ci0JCWRhdGEgfD0gQklU KDIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlEU0lfVzMyKHBoeSwg RFNJUEhZX0NNTl9HTEJMX1RFU1RfQ1RSTCwgZGF0YSk7Ci0KLQkvKiBFbmFibGUgYmlhcyBjdXJy ZW50IGZvciBwbGwxIGR1cmluZyBzcGxpdCBkaXNwbGF5IGNhc2UgKi8KLQlpZiAoY2ZnLT5wbGxf c291cmNlID09IERTSV9QTExfU09VUkNFX05PTl9OQVRJVkUpCi0JCURTSV9XMzIocGh5LCBEU0lQ SFlfUExMX1BMTF9CQU5ER0FQLCAweDMpOwotCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGVuYWJs ZWQgIiwgcGh5LT5pbmRleCk7Ci19Ci0KLS8qKgotICogZGlzYWJsZSgpIC0gRGlzYWJsZSBQSFkg aGFyZHdhcmUKLSAqIEBwaHk6ICAgICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVj dC4KLSAqLwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAq cGh5LAotCQkJICAgIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCURTSV9XMzIocGh5LCBE U0lQSFlfUExMX0NMS0JVRkxSX0VOLCAwKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9HTEJM X1RFU1RfQ1RSTCwgMCk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fQ1RSTF8wLCAwKTsKLQlw cl9kZWJ1ZygiW0RTSV8lZF1QaHkgZGlzYWJsZWQgIiwgcGh5LT5pbmRleCk7Ci19Ci0KLS8qKgot ICogZHNpX3BoeV9od192Ml8wX2lkbGVfb24oKSAtIEVuYWJsZSBEU0kgUEhZIGhhcmR3YXJlIGR1 cmluZyBpZGxlIHNjcmVlbgotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdh cmUgb2JqZWN0LgotICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9pZGxlX29uKHN0cnVjdCBkc2lf cGh5X2h3ICpwaHksIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCWludCBpID0gMDsKLQot CWZvciAoaSA9IERTSV9MT0dJQ0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsrKSB7Ci0J CURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9TVFJFTkdUSF9DVFJMXzAoaSksCi0JCQljZmctPnN0 cmVuZ3RoLmxhbmVbaV1bMF0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0RMTlhfU1RSRU5HVEhf Q1RSTF8xKGkpLAotCQkJY2ZnLT5zdHJlbmd0aC5sYW5lW2ldWzFdKTsKLQl9Ci0Jd21iKCk7IC8q IG1ha2Ugc3VyZSB3cml0ZSBoYXBwZW5zICovCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGVuYWJs ZWQgb3V0IG9mIGlkbGUgc2NyZWVuXG4iLCBwaHktPmluZGV4KTsKLX0KLQotCi0vKioKLSAqIGRz aV9waHlfaHdfdjJfMF9pZGxlX29mZigpIC0gRGlzYWJsZSBEU0kgUEhZIGhhcmR3YXJlIGR1cmlu ZyBpZGxlIHNjcmVlbgotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUg b2JqZWN0LgotICovCi12b2lkIGRzaV9waHlfaHdfdjJfMF9pZGxlX29mZihzdHJ1Y3QgZHNpX3Bo eV9odyAqcGh5KQotewotCWludCBpID0gMDsKLQotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NU UkxfMCwgMHg3Zik7Ci0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVf TUFYOyBpKyspCi0JCURTSV9XMzIocGh5LCBEU0lQSFlfRExOWF9WUkVHX0NOVFJMKGkpLCAweDFj KTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MRE9fQ05UUkwsIDB4MUMpOwotCi0JZm9yIChp ID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspCi0JCURTSV9XMzIo cGh5LCBEU0lQSFlfRExOWF9TVFJFTkdUSF9DVFJMXzEoaSksIDB4MCk7Ci0Jd21iKCk7IC8qIG1h a2Ugc3VyZSB3cml0ZSBoYXBwZW5zICovCi0JcHJfZGVidWcoIltEU0lfJWRdUGh5IGRpc2FibGVk IGR1cmluZyBpZGxlIHNjcmVlblxuIiwgcGh5LT5pbmRleCk7Ci19Ci0KLWludCBkc2lfcGh5X2h3 X3RpbWluZ192YWxfdjJfMChzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmdfY2Zn LAotCQl1MzIgKnRpbWluZ192YWwsIHUzMiBzaXplKQotewotCWludCBpID0gMCwgaiA9IDA7Ci0K LQlpZiAoc2l6ZSAhPSAoRFNJX0xBTkVfTUFYICogRFNJX01BWF9TRVRUSU5HUykpIHsKLQkJcHJf ZXJyKCJVbmV4cGVjdGVkIHRpbWluZyBhcnJheSBzaXplICVkXG4iLCBzaXplKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JZm9yIChpID0gRFNJX0xPR0lDQUxfTEFORV8wOyBpIDwgRFNJX0xB TkVfTUFYOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IERTSV9NQVhfU0VUVElOR1M7IGorKykg ewotCQkJdGltaW5nX2NmZy0+bGFuZVtpXVtqXSA9ICp0aW1pbmdfdmFsOwotCQkJdGltaW5nX3Zh bCsrOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X2h3X3YzXzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHNpLXN0YWdpbmcvZHNpX3BoeV9od192M18wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGMxZWFlNjguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2lu Zy9kc2lfcGh5X2h3X3YzXzAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKgot ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkg dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KSAiZHNp LXBoeS1odzoiIGZtdAotI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgotI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Ci0jaW5jbHVkZSAiZHNpX2h3Lmgi Ci0jaW5jbHVkZSAiZHNpX3BoeV9ody5oIgotCi0jZGVmaW5lIERTSVBIWV9DTU5fQ0xLX0NGRzAJ CQkJCQkweDAxMAotI2RlZmluZSBEU0lQSFlfQ01OX0NMS19DRkcxCQkJCQkJMHgwMTQKLSNkZWZp bmUgRFNJUEhZX0NNTl9HTEJMX0NUUkwJCQkJCQkweDAxOAotI2RlZmluZSBEU0lQSFlfQ01OX1JC VUZfQ1RSTAkJCQkJCTB4MDFDCi0jZGVmaW5lIERTSVBIWV9DTU5fVlJFR19DVFJMCQkJCQkJMHgw MjAKLSNkZWZpbmUgRFNJUEhZX0NNTl9DVFJMXzAJCQkJCQkweDAyNAotI2RlZmluZSBEU0lQSFlf Q01OX0NUUkxfMQkJCQkJCTB4MDI4Ci0jZGVmaW5lIERTSVBIWV9DTU5fQ1RSTF8yCQkJCQkJMHgw MkMKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NGRzAJCQkJCQkweDAzMAotI2RlZmluZSBEU0lQ SFlfQ01OX0xBTkVfQ0ZHMQkJCQkJCTB4MDM0Ci0jZGVmaW5lIERTSVBIWV9DTU5fUExMX0NOVFJM CQkJCQkJMHgwMzgKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkwwCQkJCQkJMHgwOTgKLSNk ZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkwxCQkJCQkJMHgwOUMKLSNkZWZpbmUgRFNJUEhZX0NN Tl9MQU5FX0NUUkwyCQkJCQkJMHgwQTAKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkwzCQkJ CQkJMHgwQTQKLSNkZWZpbmUgRFNJUEhZX0NNTl9MQU5FX0NUUkw0CQkJCQkJMHgwQTgKLSNkZWZp bmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8wCQkJCQkweDBBQwotI2RlZmluZSBEU0lQSFlfQ01O X1RJTUlOR19DVFJMXzEJCQkJCTB4MEIwCi0jZGVmaW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxf MgkJCQkJMHgwQjQKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8zCQkJCQkweDBCOAot I2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzQJCQkJCTB4MEJDCi0jZGVmaW5lIERTSVBI WV9DTU5fVElNSU5HX0NUUkxfNQkJCQkJMHgwQzAKLSNkZWZpbmUgRFNJUEhZX0NNTl9USU1JTkdf Q1RSTF82CQkJCQkweDBDNAotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzcJCQkJCTB4 MEM4Ci0jZGVmaW5lIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfOAkJCQkJMHgwQ0MKLSNkZWZpbmUg RFNJUEhZX0NNTl9USU1JTkdfQ1RSTF85CQkJCQkweDBEMAotI2RlZmluZSBEU0lQSFlfQ01OX1RJ TUlOR19DVFJMXzEwCQkJCQkweDBENAotI2RlZmluZSBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzEx CQkJCQkweDBEOAotI2RlZmluZSBEU0lQSFlfQ01OX1BIWV9TVEFUVVMJCQkJCQkweDBFQwotI2Rl ZmluZSBEU0lQSFlfQ01OX0xBTkVfU1RBVFVTMAkJCQkJCTB4MEY0Ci0jZGVmaW5lIERTSVBIWV9D TU5fTEFORV9TVEFUVVMxCQkJCQkJMHgwRjgKLQotCi0vKiBuID0gMC4uMyBmb3IgZGF0YSBsYW5l cyBhbmQgbiA9IDQgZm9yIGNsb2NrIGxhbmUgKi8KLSNkZWZpbmUgRFNJUEhZX0xOWF9DRkcwKG4p ICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwMCArICgweDgwICogKG4pKSkKLSNkZWZpbmUg RFNJUEhZX0xOWF9DRkcxKG4pICAgICAgICAgICAgICAgICAgICAgICAgICgweDIwNCArICgweDgw ICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9DRkcyKG4pICAgICAgICAgICAgICAgICAgICAg ICAgICgweDIwOCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9DRkczKG4pICAg ICAgICAgICAgICAgICAgICAgICAgICgweDIwQyArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJ UEhZX0xOWF9URVNUX0RBVEFQQVRIKG4pICAgICAgICAgICAgICAgICgweDIxMCArICgweDgwICog KG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9QSU5fU1dBUChuKSAgICAgICAgICAgICAgICAgICAg ICgweDIxNCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9IU1RYX1NUUl9DVFJM KG4pICAgICAgICAgICAgICAgICgweDIxOCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZ X0xOWF9PRkZTRVRfVE9QX0NUUkwobikgICAgICAgICAgICAgICgweDIxQyArICgweDgwICogKG4p KSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9PRkZTRVRfQk9UX0NUUkwobikgICAgICAgICAgICAgICgw eDIyMCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xOWF9MUFRYX1NUUl9DVFJMKG4p ICAgICAgICAgICAgICAgICgweDIyNCArICgweDgwICogKG4pKSkKLSNkZWZpbmUgRFNJUEhZX0xO WF9MUFJYX0NUUkwobikgICAgICAgICAgICAgICAgICAgICgweDIyOCArICgweDgwICogKG4pKSkK LSNkZWZpbmUgRFNJUEhZX0xOWF9UWF9EQ1RSTChuKSAgICAgICAgICAgICAgICAgICAgICgweDIy QyArICgweDgwICogKG4pKSkKLQotc3RhdGljIGlubGluZSBpbnQgZHNpX2NvbnZfcGh5X3RvX2xv Z2ljYWxfbGFuZSgKLQlzdHJ1Y3QgZHNpX2xhbmVfbWFwICpsYW5lX21hcCwgZW51bSBkc2lfcGh5 X2RhdGFfbGFuZXMgcGh5X2xhbmUpCi17Ci0JaW50IGkgPSAwOwotCi0JaWYgKHBoeV9sYW5lID4g RFNJX1BIWVNJQ0FMX0xBTkVfMykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSBEU0lf TE9HSUNBTF9MQU5FXzA7IGkgPCAoRFNJX0xBTkVfTUFYIC0gMSk7IGkrKykgewotCQlpZiAobGFu ZV9tYXAtPmxhbmVfbWFwX3YyW2ldID09IHBoeV9sYW5lKQotCQkJYnJlYWs7Ci0JfQotCXJldHVy biBpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkc2lfY29udl9sb2dpY2FsX3RvX3BoeV9sYW5l KAotCXN0cnVjdCBkc2lfbGFuZV9tYXAgKmxhbmVfbWFwLCBlbnVtIGRzaV9sb2dpY2FsX2xhbmUg bGFuZSkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAobGFuZSA+IChEU0lfTEFORV9NQVggLSAxKSkK LQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmb3IgKGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkgPCAo RFNJX0xBTkVfTUFYIC0gMSk7IGkrKykgewotCQlpZiAoQklUKGkpID09IGxhbmVfbWFwLT5sYW5l X21hcF92MltsYW5lXSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gaTsKLX0KLQotLyoqCi0gKiBy ZWd1bGF0b3JfZW5hYmxlKCkgLSBlbmFibGUgcmVndWxhdG9ycyBmb3IgRFNJIFBIWQotICogQHBo eTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICogQHJlZ19jZmc6 ICBSZWd1bGF0b3IgY29uZmlndXJhdGlvbiBmb3IgYWxsIERTSSBsYW5lcy4KLSAqLwotdm9pZCBk c2lfcGh5X2h3X3YzXzBfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAot CQkJCSAgICAgIHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnJlZ19jZmcpCi17Ci0JcHJf ZGVidWcoIltEU0lfJWRdIFBoeSByZWd1bGF0b3JzIGVuYWJsZWRcbiIsIHBoeS0+aW5kZXgpOwot CS8qIE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgRFNJIFBIWSByZWd1bGF0b3IgZW5hYmxlICovCi19 Ci0KLS8qKgotICogcmVndWxhdG9yX2Rpc2FibGUoKSAtIGRpc2FibGUgcmVndWxhdG9ycwotICog QHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdhcmUgb2JqZWN0LgotICovCi12b2lk IGRzaV9waHlfaHdfdjNfMF9yZWd1bGF0b3JfZGlzYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5 KQotewotCXByX2RlYnVnKCJbRFNJXyVkXSBQaHkgcmVndWxhdG9ycyBkaXNhYmxlZFxuIiwgcGh5 LT5pbmRleCk7Ci0JLyogTm90aGluZyB0byBiZSBkb25lIGZvciBEU0kgUEhZIHJlZ3VsYXRvciBk aXNhYmxlICovCi19Ci0KLQotc3RhdGljIGludCBkc2lfcGh5X2h3X3YzXzBfaXNfcGxsX29uKHN0 cnVjdCBkc2lfcGh5X2h3ICpwaHkpCi17Ci0JdTMyIGRhdGEgPSAwOwotCi0JZGF0YSA9IERTSV9S MzIocGh5LCBEU0lQSFlfQ01OX1BMTF9DTlRSTCk7Ci0JbWIoKTsgLyptYWtlIHN1cmUgcmVhZCBo YXBwZW5lZCAqLwotCXJldHVybiAoZGF0YSAmIEJJVCgwKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRz aV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0Jc3Ry dWN0IGRzaV9waHlfY2ZnICpjZmcsIGJvb2wgZW5hYmxlKQotewotCWludCBwaHlfbGFuZV8wID0g ZHNpX2NvbnZfbG9naWNhbF90b19waHlfbGFuZSgmY2ZnLT5sYW5lX21hcCwKLQkJCURTSV9MT0dJ Q0FMX0xBTkVfMCk7Ci0JLyoKLQkgKiBMUFJYIGFuZCBDRFJYIG5lZWQgdG8gZW5hYmxlZCBvbmx5 IGZvciBwaHlzaWNhbCBkYXRhIGxhbmUKLQkgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2dpY2Fs IGRhdGEgbGFuZSAwCi0JICovCi0KLQlpZiAoZW5hYmxlKQotCQlEU0lfVzMyKHBoeSwgRFNJUEhZ X0xOWF9MUFJYX0NUUkwocGh5X2xhbmVfMCksCi0JCQljZmctPnN0cmVuZ3RoLmxhbmVbcGh5X2xh bmVfMF1bMV0pOwotCWVsc2UKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfTFBSWF9DVFJMKHBo eV9sYW5lXzApLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZHNpX3BoeV9od192M18wX2xhbmVfc3dh cF9jb25maWcoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJc3RydWN0IGRzaV9sYW5lX21hcCAq bGFuZV9tYXApCi17Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DRkcwLAotCQkobGFu ZV9tYXAtPmxhbmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfMF0gfAotCQkobGFuZV9tYXAtPmxh bmVfbWFwX3YyW0RTSV9MT0dJQ0FMX0xBTkVfMV0gPDwgNCkpKTsKLQlEU0lfVzMyKHBoeSwgRFNJ UEhZX0NNTl9MQU5FX0NGRzEsCi0JCShsYW5lX21hcC0+bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxf TEFORV8yXSB8Ci0JCShsYW5lX21hcC0+bGFuZV9tYXBfdjJbRFNJX0xPR0lDQUxfTEFORV8zXSA8 PCA0KSkpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfcGh5X2h3X3YzXzBfbGFuZV9zZXR0aW5ncyhz dHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJICAgIHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKQot ewotCWludCBpOwotCXU4IHR4X2RjdHJsW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgw MX07Ci0KLQkvKiBTdHJlbmd0aCBjdHJsIHNldHRpbmdzICovCi0JZm9yIChpID0gRFNJX0xPR0lD QUxfTEFORV8wOyBpIDwgRFNJX0xBTkVfTUFYOyBpKyspIHsKLQkJRFNJX1czMihwaHksIERTSVBI WV9MTlhfTFBUWF9TVFJfQ1RSTChpKSwKLQkJCWNmZy0+c3RyZW5ndGgubGFuZVtpXVswXSk7Ci0J CS8qCi0JCSAqIERpc2FibGUgTFBSWCBhbmQgQ0RSWCBmb3IgYWxsIGxhbmVzLiBBbmQgbGF0ZXIg b24sIGl0IHdpbGwKLQkJICogYmUgb25seSBlbmFibGVkIGZvciB0aGUgcGh5c2ljYWwgZGF0YSBs YW5lIGNvcnJlc3BvbmRpbmcKLQkJICogdG8gdGhlIGxvZ2ljYWwgZGF0YSBsYW5lIDAKLQkJICov Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfTE5YX0xQUlhfQ1RSTChpKSwgMCk7Ci0JCURTSV9XMzIo cGh5LCBEU0lQSFlfTE5YX1BJTl9TV0FQKGkpLCAweDApOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZ X0xOWF9IU1RYX1NUUl9DVFJMKGkpLCAweDg4KTsKLQl9Ci0JZHNpX3BoeV9od192M18wX2NvbmZp Z19scGNkcngocGh5LCBjZmcsIHRydWUpOwotCi0JLyogb3RoZXIgc2V0dGluZ3MgKi8KLQlmb3Ig KGkgPSBEU0lfTE9HSUNBTF9MQU5FXzA7IGkgPCBEU0lfTEFORV9NQVg7IGkrKykgewotCQlEU0lf VzMyKHBoeSwgRFNJUEhZX0xOWF9DRkcwKGkpLCBjZmctPmxhbmVjZmcubGFuZVtpXVswXSk7Ci0J CURTSV9XMzIocGh5LCBEU0lQSFlfTE5YX0NGRzEoaSksIGNmZy0+bGFuZWNmZy5sYW5lW2ldWzFd KTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfQ0ZHMihpKSwgY2ZnLT5sYW5lY2ZnLmxhbmVb aV1bMl0pOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9DRkczKGkpLCBjZmctPmxhbmVjZmcu bGFuZVtpXVszXSk7Ci0JCURTSV9XMzIocGh5LCBEU0lQSFlfTE5YX09GRlNFVF9UT1BfQ1RSTChp KSwgMHgwKTsKLQkJRFNJX1czMihwaHksIERTSVBIWV9MTlhfT0ZGU0VUX0JPVF9DVFJMKGkpLCAw eDApOwotCQlEU0lfVzMyKHBoeSwgRFNJUEhZX0xOWF9UWF9EQ1RSTChpKSwgdHhfZGN0cmxbaV0p OwotCX0KLQotCS8qIFRvZ2dsZSBCSVQgMCB0byByZWxlYXNlIGZyZWV6ZSBJLzAgKi8KLQlEU0lf VzMyKHBoeSwgRFNJUEhZX0xOWF9UWF9EQ1RSTCgzKSwgMHgwNSk7Ci0JRFNJX1czMihwaHksIERT SVBIWV9MTlhfVFhfRENUUkwoMyksIDB4MDQpOwotfQotCi0vKioKLSAqIGVuYWJsZSgpIC0gRW5h YmxlIFBIWSBoYXJkd2FyZQotICogQHBoeTogICAgICBQb2ludGVyIHRvIERTSSBQSFkgaGFyZHdh cmUgb2JqZWN0LgotICogQGNmZzogICAgICBQZXIgbGFuZSBjb25maWd1cmF0aW9ucyBmb3IgdGlt aW5nLCBzdHJlbmd0aCBhbmQgbGFuZQotICoJICAgICAgY29uZmlndXJhdGlvbnMuCi0gKi8KLXZv aWQgZHNpX3BoeV9od192M18wX2VuYWJsZShzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJICAg IHN0cnVjdCBkc2lfcGh5X2NmZyAqY2ZnKQotewotCWludCByYyA9IDA7Ci0JdTMyIHN0YXR1czsK LQl1MzIgY29uc3QgZGVsYXlfdXMgPSA1OwotCXUzMiBjb25zdCB0aW1lb3V0X3VzID0gMTAwMDsK LQlzdHJ1Y3QgZHNpX3BoeV9wZXJfbGFuZV9jZmdzICp0aW1pbmcgPSAmY2ZnLT50aW1pbmc7Ci0J dTMyIGRhdGE7Ci0KLQlpZiAoZHNpX3BoeV9od192M18wX2lzX3BsbF9vbihwaHkpKQotCQlwcl93 YXJuKCJQTEwgdHVybmVkIG9uIGJlZm9yZSBjb25maWd1cmluZyBQSFlcbiIpOwotCi0JLyogd2Fp dCBmb3IgUkVGR0VOIFJFQURZICovCi0JcmMgPSByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKHBo eS0+YmFzZSArIERTSVBIWV9DTU5fUEhZX1NUQVRVUywKLQkJc3RhdHVzLCAoc3RhdHVzICYgQklU KDApKSwgZGVsYXlfdXMsIHRpbWVvdXRfdXMpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlJlZiBn ZW4gbm90IHJlYWR5LiBBYm9ydGluZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBkZS1hc3Nl cnQgZGlnaXRhbCBhbmQgcGxsIHBvd2VyIGRvd24gKi8KLQlkYXRhID0gQklUKDYpIHwgQklUKDUp OwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0NUUkxfMCwgZGF0YSk7Ci0KLQkvKiBBc3NlcnQg UExMIGNvcmUgcmVzZXQgKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9QTExfQ05UUkwsIDB4 MDApOwotCi0JLyogdHVybiBvZmYgcmVzeW5jIEZJRk8gKi8KLQlEU0lfVzMyKHBoeSwgRFNJUEhZ X0NNTl9SQlVGX0NUUkwsIDB4MDApOwotCi0JLyogU2VsZWN0IE1TMSBieXRlLWNsayAqLwotCURT SV9XMzIocGh5LCBEU0lQSFlfQ01OX0dMQkxfQ1RSTCwgMHgxMCk7Ci0KLQkvKiBFbmFibGUgTERP ICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVlJFR19DVFJMLCAweDU5KTsKLQotCS8qIENv bmZpZ3VyZSBQSFkgbGFuZSBzd2FwICovCi0JZHNpX3BoeV9od192M18wX2xhbmVfc3dhcF9jb25m aWcocGh5LCAmY2ZnLT5sYW5lX21hcCk7Ci0KLQkvKiBEU0kgUEhZIHRpbWluZ3MgKi8KLQlEU0lf VzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8wLCB0aW1pbmctPmxhbmVfdjNbMF0pOwot CURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzEsIHRpbWluZy0+bGFuZV92M1sx XSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxfMiwgdGltaW5nLT5sYW5l X3YzWzJdKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8zLCB0aW1pbmct PmxhbmVfdjNbM10pOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzQsIHRp bWluZy0+bGFuZV92M1s0XSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fVElNSU5HX0NUUkxf NSwgdGltaW5nLT5sYW5lX3YzWzVdKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdf Q1RSTF82LCB0aW1pbmctPmxhbmVfdjNbNl0pOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX1RJ TUlOR19DVFJMXzcsIHRpbWluZy0+bGFuZV92M1s3XSk7Ci0JRFNJX1czMihwaHksIERTSVBIWV9D TU5fVElNSU5HX0NUUkxfOCwgdGltaW5nLT5sYW5lX3YzWzhdKTsKLQlEU0lfVzMyKHBoeSwgRFNJ UEhZX0NNTl9USU1JTkdfQ1RSTF85LCB0aW1pbmctPmxhbmVfdjNbOV0pOwotCURTSV9XMzIocGh5 LCBEU0lQSFlfQ01OX1RJTUlOR19DVFJMXzEwLCB0aW1pbmctPmxhbmVfdjNbMTBdKTsKLQlEU0lf VzMyKHBoeSwgRFNJUEhZX0NNTl9USU1JTkdfQ1RSTF8xMSwgdGltaW5nLT5sYW5lX3YzWzExXSk7 Ci0KLQkvKiBSZW1vdmUgcG93ZXIgZG93biBmcm9tIGFsbCBibG9ja3MgKi8KLQlEU0lfVzMyKHBo eSwgRFNJUEhZX0NNTl9DVFJMXzAsIDB4N2YpOwotCi0JLypwb3dlciB1cCBsYW5lcyAqLwotCWRh dGEgPSBEU0lfUjMyKHBoeSwgRFNJUEhZX0NNTl9DVFJMXzApOwotCS8qIFRPRE86IG9ubHkgcG93 ZXIgdXAgbGFuZXMgdGhhdCBhcmUgdXNlZCAqLwotCWRhdGEgfD0gMHgxRjsKLQlEU0lfVzMyKHBo eSwgRFNJUEhZX0NNTl9DVFJMXzAsIGRhdGEpOwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0xB TkVfQ1RSTDAsIDB4MUYpOwotCi0JLyogU2VsZWN0IGZ1bGwtcmF0ZSBtb2RlICovCi0JRFNJX1cz MihwaHksIERTSVBIWV9DTU5fQ1RSTF8yLCAweDQwKTsKLQotCXN3aXRjaCAoY2ZnLT5wbGxfc291 cmNlKSB7Ci0JY2FzZSBEU0lfUExMX1NPVVJDRV9TVEFOREFMT05FOgotCWNhc2UgRFNJX1BMTF9T T1VSQ0VfTkFUSVZFOgotCQlkYXRhID0gMHgwOyAvKiBpbnRlcm5hbCBQTEwgKi8KLQkJYnJlYWs7 Ci0JY2FzZSBEU0lfUExMX1NPVVJDRV9OT05fTkFUSVZFOgotCQlkYXRhID0gMHgxOyAvKiBleHRl cm5hbCBQTEwgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCURTSV9XMzIo cGh5LCBEU0lQSFlfQ01OX0NMS19DRkcxLCAoZGF0YSA8PCAyKSk7IC8qIHNldCBQTEwgc3JjICov Ci0KLQkvKiBEU0kgbGFuZSBzZXR0aW5ncyAqLwotCWRzaV9waHlfaHdfdjNfMF9sYW5lX3NldHRp bmdzKHBoeSwgY2ZnKTsKLQotCXByX2RlYnVnKCJbRFNJXyVkXVBoeSBlbmFibGVkICIsIHBoeS0+ aW5kZXgpOwotfQotCi0vKioKLSAqIGRpc2FibGUoKSAtIERpc2FibGUgUEhZIGhhcmR3YXJlCi0g KiBAcGh5OiAgICAgIFBvaW50ZXIgdG8gRFNJIFBIWSBoYXJkd2FyZSBvYmplY3QuCi0gKi8KLXZv aWQgZHNpX3BoeV9od192M18wX2Rpc2FibGUoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJCSAg ICBzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZykKLXsKLQl1MzIgZGF0YSA9IDA7Ci0KLQlpZiAoZHNp X3BoeV9od192M18wX2lzX3BsbF9vbihwaHkpKQotCQlwcl93YXJuKCJUdXJuaW5nIE9GRiBQSFkg d2hpbGUgUExMIGlzIG9uXG4iKTsKLQotCWRzaV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBo eSwgY2ZnLCBmYWxzZSk7Ci0KLQlkYXRhID0gRFNJX1IzMihwaHksIERTSVBIWV9DTU5fQ1RSTF8w KTsKLQkvKiBkaXNhYmxlIGFsbCBsYW5lcyAqLwotCWRhdGEgJj0gfjB4MUY7Ci0JRFNJX1czMihw aHksIERTSVBIWV9DTU5fQ1RSTF8wLCBkYXRhKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9M QU5FX0NUUkwwLCAwKTsKLQotCS8qIFR1cm4gb2ZmIGFsbCBQSFkgYmxvY2tzICovCi0JRFNJX1cz MihwaHksIERTSVBIWV9DTU5fQ1RSTF8wLCAweDAwKTsKLQkvKiBtYWtlIHN1cmUgcGh5IGlzIHR1 cm5lZCBvZmYgKi8KLQl3bWIoKTsKLQlwcl9kZWJ1ZygiW0RTSV8lZF1QaHkgZGlzYWJsZWQgIiwg cGh5LT5pbmRleCk7Ci19Ci0KLWludCBkc2lfcGh5X2h3X3YzXzBfd2FpdF9mb3JfbGFuZV9pZGxl KAotCQlzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LCB1MzIgbGFuZXMpCi17Ci0JaW50IHJjID0gMCwg dmFsID0gMDsKLQl1MzIgc3RvcF9zdGF0ZV9tYXNrID0gMDsKLQl1MzIgY29uc3Qgc2xlZXBfdXMg PSAxMDsKLQl1MzIgY29uc3QgdGltZW91dF91cyA9IDEwMDsKLQotCXN0b3Bfc3RhdGVfbWFzayA9 IEJJVCg0KTsgLyogY2xvY2sgbGFuZSAqLwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xBTkVfMCkK LQkJc3RvcF9zdGF0ZV9tYXNrIHw9IEJJVCgwKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5F XzEpCi0JCXN0b3Bfc3RhdGVfbWFzayB8PSBCSVQoMSk7Ci0JaWYgKGxhbmVzICYgRFNJX0RBVEFf TEFORV8yKQotCQlzdG9wX3N0YXRlX21hc2sgfD0gQklUKDIpOwotCWlmIChsYW5lcyAmIERTSV9E QVRBX0xBTkVfMykKLQkJc3RvcF9zdGF0ZV9tYXNrIHw9IEJJVCgzKTsKLQotCXByX2RlYnVnKCIl czogcG9sbGluZyBmb3IgbGFuZXMgdG8gYmUgaW4gc3RvcCBzdGF0ZSwgbWFzaz0weCUwOHhcbiIs Ci0JCV9fZnVuY19fLCBzdG9wX3N0YXRlX21hc2spOwotCXJjID0gcmVhZGxfcG9sbF90aW1lb3V0 KHBoeS0+YmFzZSArIERTSVBIWV9DTU5fTEFORV9TVEFUVVMxLCB2YWwsCi0JCQkodmFsID09IHN0 b3Bfc3RhdGVfbWFzayksIHNsZWVwX3VzLCB0aW1lb3V0X3VzKTsKLQlpZiAocmMpIHsKLQkJcHJf ZXJyKCIlczogbGFuZXMgbm90IGluIHN0b3Agc3RhdGUsIExBTkVfU1RBVFVTPTB4JTA4eFxuIiwK LQkJCV9fZnVuY19fLCB2YWwpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0K LXZvaWQgZHNpX3BoeV9od192M18wX3VscHNfcmVxdWVzdChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5 LAotCQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVzKQotewotCXUzMiByZWcgPSAw OwotCi0JaWYgKGxhbmVzICYgRFNJX0NMT0NLX0xBTkUpCi0JCXJlZyA9IEJJVCg0KTsKLQlpZiAo bGFuZXMgJiBEU0lfREFUQV9MQU5FXzApCi0JCXJlZyB8PSBCSVQoMCk7Ci0JaWYgKGxhbmVzICYg RFNJX0RBVEFfTEFORV8xKQotCQlyZWcgfD0gQklUKDEpOwotCWlmIChsYW5lcyAmIERTSV9EQVRB X0xBTkVfMikKLQkJcmVnIHw9IEJJVCgyKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMp Ci0JCXJlZyB8PSBCSVQoMyk7Ci0KLQkvKgotCSAqIFVMUFMgZW50cnkgcmVxdWVzdC4gV2FpdCBm b3Igc2hvcnQgdGltZSB0byBtYWtlIHN1cmUKLQkgKiB0aGF0IHRoZSBsYW5lcyBlbnRlciBVTFBT LiBSZWNvbW1lbmRlZCBhcyBwZXIgSFBHLgotCSAqLwotCURTSV9XMzIocGh5LCBEU0lQSFlfQ01O X0xBTkVfQ1RSTDEsIHJlZyk7Ci0JdXNsZWVwX3JhbmdlKDEwMCwgMTEwKTsKLQotCS8qIGRpc2Fi bGUgTFBSWCBhbmQgQ0RSWCAqLwotCWRzaV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBoeSwg Y2ZnLCBmYWxzZSk7Ci0JLyogZGlzYWJsZSBsYW5lIExET3MgKi8KLQlEU0lfVzMyKHBoeSwgRFNJ UEhZX0NNTl9WUkVHX0NUUkwsIDB4MTkpOwotCXByX2RlYnVnKCJbRFNJX1BIWSVkXSBVTFBTIHJl cXVlc3RlZCBmb3IgbGFuZXMgMHgleFxuIiwgcGh5LT5pbmRleCwKLQkJIGxhbmVzKTsKLX0KLQot dm9pZCBkc2lfcGh5X2h3X3YzXzBfdWxwc19leGl0KHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0J CQlzdHJ1Y3QgZHNpX3BoeV9jZmcgKmNmZywgdTMyIGxhbmVzKQotewotCXUzMiByZWcgPSAwOwot Ci0JaWYgKGxhbmVzICYgRFNJX0NMT0NLX0xBTkUpCi0JCXJlZyA9IEJJVCg0KTsKLQlpZiAobGFu ZXMgJiBEU0lfREFUQV9MQU5FXzApCi0JCXJlZyB8PSBCSVQoMCk7Ci0JaWYgKGxhbmVzICYgRFNJ X0RBVEFfTEFORV8xKQotCQlyZWcgfD0gQklUKDEpOwotCWlmIChsYW5lcyAmIERTSV9EQVRBX0xB TkVfMikKLQkJcmVnIHw9IEJJVCgyKTsKLQlpZiAobGFuZXMgJiBEU0lfREFUQV9MQU5FXzMpCi0J CXJlZyB8PSBCSVQoMyk7Ci0KLQkvKiBlbmFibGUgbGFuZSBMRE9zICovCi0JRFNJX1czMihwaHks IERTSVBIWV9DTU5fVlJFR19DVFJMLCAweDU5KTsKLQkvKiBlbmFibGUgTFBSWCBhbmQgQ0RSWCAq LwotCWRzaV9waHlfaHdfdjNfMF9jb25maWdfbHBjZHJ4KHBoeSwgY2ZnLCB0cnVlKTsKLQotCS8q IFVMUFMgZXhpdCByZXF1ZXN0ICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFORV9DVFJM MiwgcmVnKTsKLQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAxMCk7Ci0KLQkvKiBDbGVhciBVTFBTIHJl cXVlc3QgZmxhZ3Mgb24gYWxsIGxhbmVzICovCi0JRFNJX1czMihwaHksIERTSVBIWV9DTU5fTEFO RV9DVFJMMSwgMCk7Ci0JLyogQ2xlYXIgVUxQUyBleGl0IGZsYWdzIG9uIGFsbCBsYW5lcyAqLwot CURTSV9XMzIocGh5LCBEU0lQSFlfQ01OX0xBTkVfQ1RSTDIsIDApOwotCi0JLyoKLQkgKiBTb21l dGltZXMgd2hlbiBleGl0aW5nIFVMUFMsIGl0IGlzIHBvc3NpYmxlIHRoYXQgc29tZSBEU0kKLQkg KiBsYW5lcyBhcmUgbm90IGluIHRoZSBzdG9wIHN0YXRlIHdoaWNoIGNvdWxkIGxlYWQgdG8gRFNJ Ci0JICogY29tbWFuZHMgbm90IGdvaW5nIHRocm91Z2guIFRvIGF2b2lkIHRoaXMsIGZvcmNlIHRo ZSBsYW5lcwotCSAqIHRvIGJlIGluIHN0b3Agc3RhdGUuCi0JICovCi0JRFNJX1czMihwaHksIERT SVBIWV9DTU5fTEFORV9DVFJMMywgcmVnKTsKLQlEU0lfVzMyKHBoeSwgRFNJUEhZX0NNTl9MQU5F X0NUUkwzLCAwKTsKLQl1c2xlZXBfcmFuZ2UoMTAwLCAxMTApOwotfQotCi11MzIgZHNpX3BoeV9o d192M18wX2dldF9sYW5lc19pbl91bHBzKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHkpCi17Ci0JdTMy IGxhbmVzID0gMDsKLQotCWxhbmVzID0gRFNJX1IzMihwaHksIERTSVBIWV9DTU5fTEFORV9TVEFU VVMwKTsKLQlwcl9kZWJ1ZygiW0RTSV9QSFklZF0gbGFuZXMgaW4gdWxwcyA9IDB4JXhcbiIsIHBo eS0+aW5kZXgsIGxhbmVzKTsKLQlyZXR1cm4gbGFuZXM7Ci19Ci0KLWJvb2wgZHNpX3BoeV9od192 M18wX2lzX2xhbmVzX2luX3VscHModTMyIGxhbmVzLCB1MzIgdWxwc19sYW5lcykKLXsKLQlpZiAo bGFuZXMgJiB1bHBzX2xhbmVzKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0K LQotaW50IGRzaV9waHlfaHdfdGltaW5nX3ZhbF92M18wKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5l X2NmZ3MgKnRpbWluZ19jZmcsCi0JCXUzMiAqdGltaW5nX3ZhbCwgdTMyIHNpemUpCi17Ci0JaW50 IGkgPSAwOwotCi0JaWYgKHNpemUgIT0gRFNJX1BIWV9USU1JTkdfVjNfU0laRSkgewotCQlwcl9l cnIoIlVuZXhwZWN0ZWQgdGltaW5nIGFycmF5IHNpemUgJWRcbiIsIHNpemUpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotCQl0aW1pbmdfY2Zn LT5sYW5lX3YzW2ldID0gdGltaW5nX3ZhbFtpXTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2FsYy5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZmU2ZWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ19jYWxjLmMKKysrIC9kZXYv bnVsbApAQCAtMSw2NzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICov Ci0KLSNkZWZpbmUgcHJfZm10KGZtdCkgImRzaS1waHktdGltaW5nOiIgZm10Ci0KLSNpbmNsdWRl ICJkc2lfcGh5X3RpbWluZ19jYWxjLmgiCi0KLXN0YXRpYyBjb25zdCB1MzIgYml0c19wZXJfcGl4 ZWxbRFNJX1BJWEVMX0ZPUk1BVF9NQVhdID0gewotCTE2LCAxOCwgMTgsIDI0LCAzLCA4LCAxMiB9 OwotCi1zdGF0aWMgaW50IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQoc3RydWN0IHRpbWlu Z19lbnRyeSAqdCwKLQljaGFyIGNvbnN0ICp0X25hbWUpCi17Ci0JaWYgKHQtPnJlYyAmIDB4ZmZm ZmZmMDApIHsKLQkJLyogT3V0cHV0IHZhbHVlIGNhbiBvbmx5IGJlIDggYml0cyAqLwotCQlwcl9l cnIoIkluY29ycmVjdCAlcyByZWMgdmFsdWUgLSAlZFxuIiwgdF9uYW1lLCB0LT5yZWMpOwotCQly ZXR1cm4gLUVJTlZBTDsKLQl9Ci0JdC0+cmVnX3ZhbHVlID0gdC0+cmVjOwotCXJldHVybiAwOwot fQotCi0vKioKLSAqIGNhbGNfY2xrX3ByZXBhcmUgLSBjYWxjdWxhdGVzIHByZXBhcmUgdGltaW5n IHBhcmFtcyBmb3IgY2xrIGxhbmUuCi0gKi8KLXN0YXRpYyBpbnQgY2FsY19jbGtfcHJlcGFyZShz dHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3Bh cmFtcywKLQkJCSAgICBzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjLAotCQkJICAgIHMzMiAq YWN0dWFsX2ZyYWMsCi0JCQkgICAgczY0ICphY3R1YWxfaW50ZXJtZWRpYXRlKQotewotCXU2NCBt dWx0aXBsaWVyID0gQklUKDIwKTsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmNs a19wcmVwYXJlOwotCWludCByYyA9IDA7Ci0JdTY0IGRpdmlkZW5kLCB0ZW1wLCB0ZW1wX211bHRp cGxlOwotCXMzMiBmcmFjID0gMDsKLQlzNjQgaW50ZXJtZWRpYXRlOwotCXM2NCBjbGtfcHJlcF9h Y3R1YWw7Ci0KLQlkaXZpZGVuZCA9ICgodC0+cmVjX21heCAtIHQtPnJlY19taW4pICoKLQkJY2xr X3BhcmFtcy0+Y2xrX3ByZXBfYnVmICogbXVsdGlwbGllcik7Ci0JdGVtcCAgPSByb3VuZHVwKGRp dl9zNjQoZGl2aWRlbmQsIDEwMCksIG11bHRpcGxpZXIpOwotCXRlbXAgKz0gKHQtPnJlY19taW4g KiBtdWx0aXBsaWVyKTsKLQl0LT5yZWMgPSBkaXZfczY0KHRlbXAsIG11bHRpcGxpZXIpOwotCi0J cmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJjbGtfcHJlcGFyZSIpOwotCWlm IChyYykKLQkJZ290byBlcnJvcjsKLQotCS8qIGNhbGN1bGF0ZSB0aGVvcmV0aWNhbCB2YWx1ZSAq LwotCXRlbXBfbXVsdGlwbGUgPSA4ICogdC0+cmVnX3ZhbHVlICogY2xrX3BhcmFtcy0+dGxweF9u dW1lcl9ucwotCQkJICogbXVsdGlwbGllcjsKLQlpbnRlcm1lZGlhdGUgPSBkaXZfczY0KHRlbXBf bXVsdGlwbGUsIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKTsKLQlkaXZfczY0X3JlbSh0ZW1wX211 bHRpcGxlLCBjbGtfcGFyYW1zLT5iaXRjbGtfbWJwcywgJmZyYWMpOwotCWNsa19wcmVwX2FjdHVh bCA9IGRpdl9zNjQoKGludGVybWVkaWF0ZSArIGZyYWMpLCBtdWx0aXBsaWVyKTsKLQotCXByX2Rl YnVnKCJDTEtfUFJFUEFSRTptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJl Y19tYXg9JWQiLAotCQkgdC0+bWlwaV9taW4sIHQtPm1pcGlfbWF4LCB0LT5yZWNfbWluLCB0LT5y ZWNfbWF4KTsKLQlwcl9kZWJ1ZygiIHJlZ192YWx1ZT0lZCwgYWN0dWFsPSVsbGRcbiIsIHQtPnJl Z192YWx1ZSwgY2xrX3ByZXBfYWN0dWFsKTsKLQotCSphY3R1YWxfZnJhYyA9IGZyYWM7Ci0JKmFj dHVhbF9pbnRlcm1lZGlhdGUgPSBpbnRlcm1lZGlhdGU7Ci0KLWVycm9yOgotCXJldHVybiByYzsK LX0KLQotLyoqCi0gKiBjYWxjX2Nsa196ZXJvIC0gY2FsY3VsYXRlcyB6ZXJvIHRpbWluZyBwYXJh bXMgZm9yIGNsayBsYW5lLgotICovCi1zdGF0aWMgaW50IGNhbGNfY2xrX3plcm8oc3RydWN0IGRz aV9waHlfaHcgKnBoeSwKLQkJCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJ CXN0cnVjdCBwaHlfdGltaW5nX2Rlc2MgKmRlc2MsCi0JCQlzMzIgYWN0dWFsX2ZyYWMsIHM2NCBh Y3R1YWxfaW50ZXJtZWRpYXRlKQotewotCXU2NCBjb25zdCBtdWx0aXBsaWVyID0gQklUKDIwKTsK LQlpbnQgcmMgPSAwOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+Y2xrX3plcm87 Ci0JczY0IG1pcGlfbWluLCByZWNfdGVtcDE7Ci0Jc3RydWN0IHBoeV90aW1pbmdfb3BzICpvcHMg PSBwaHktPm9wcy50aW1pbmdfb3BzOwotCi0JbWlwaV9taW4gPSAoKDMwMCAqIG11bHRpcGxpZXIp IC0gKGFjdHVhbF9pbnRlcm1lZGlhdGUgKyBhY3R1YWxfZnJhYykpOwotCXQtPm1pcGlfbWluID0g ZGl2X3M2NChtaXBpX21pbiwgbXVsdGlwbGllcik7Ci0KLQlyZWNfdGVtcDEgPSBkaXZfczY0KCht aXBpX21pbiAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSwKLQkJCSAgICBjbGtfcGFyYW1zLT50 bHB4X251bWVyX25zKTsKLQotCWlmIChvcHMtPmNhbGNfY2xrX3plcm8pIHsKLQkJdC0+cmVjX21p biA9IG9wcy0+Y2FsY19jbGtfemVybyhyZWNfdGVtcDEsIG11bHRpcGxpZXIpOwotCX0gZWxzZSB7 Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0JdC0+cmVjX21heCA9ICgodC0+ cmVjX21pbiA+IDI1NSkgPyA1MTEgOiAyNTUpOwotCi0JdC0+cmVjID0gRElWX1JPVU5EX1VQKCgo KHQtPnJlY19tYXggLSB0LT5yZWNfbWluKSAqCi0JCWNsa19wYXJhbXMtPmNsa196ZXJvX2J1Zikg KyAodC0+cmVjX21pbiAqIDEwMCkpLCAxMDApOwotCi0JcmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0 ZV9hbmRfc2V0KHQsICJjbGtfemVybyIpOwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCi0J cHJfZGVidWcoIkNMS19aRVJPOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVjX21pbj0lZCwg cmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5taXBpX21heCwg dC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci1lcnJvcjoKLQlyZXR1 cm4gcmM7Ci19Ci0KLS8qKgotICogY2FsY19jbGtfdHJhaWwgLSBjYWxjdWxhdGVzIHByZXBhcmUg dHJhaWwgcGFyYW1zIGZvciBjbGsgbGFuZS4KLSAqLwotc3RhdGljIGludCBjYWxjX2Nsa190cmFp bChzdHJ1Y3QgZHNpX3BoeV9odyAqcGh5LAotCQkJc3RydWN0IHBoeV9jbGtfcGFyYW1zICpjbGtf cGFyYW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYywKLQkJCXM2NCAqdGVvdF9j bGtfbGFuZSkKLXsKLQl1NjQgY29uc3QgbXVsdGlwbGllciA9IEJJVCgyMCk7Ci0JaW50IHJjID0g MDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0gJmRlc2MtPmNsa190cmFpbDsKLQl1NjQgdGVt cF9tdWx0aXBsZTsKLQlzMzIgZnJhYzsKLQlzNjQgbWlwaV9tYXhfdHIsIHJlY190ZW1wMSwgbWlw aV9tYXg7Ci0JczY0IHRlb3RfY2xrX2xhbmUxOwotCXN0cnVjdCBwaHlfdGltaW5nX29wcyAqb3Bz ID0gcGh5LT5vcHMudGltaW5nX29wczsKLQotCXRlbXBfbXVsdGlwbGUgPSBkaXZfczY0KAotCQkJ KDEyICogbXVsdGlwbGllciAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpLAotCQkJY2xrX3Bh cmFtcy0+Yml0Y2xrX21icHMpOwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUsIG11bHRpcGxp ZXIsICZmcmFjKTsKLQotCW1pcGlfbWF4X3RyID0gKCgxMDUgKiBtdWx0aXBsaWVyKSArCi0JCSAg ICAgICAodGVtcF9tdWx0aXBsZSArIGZyYWMpKTsKLQl0ZW90X2Nsa19sYW5lMSA9IGRpdl9zNjQo bWlwaV9tYXhfdHIsIG11bHRpcGxpZXIpOwotCi0JbWlwaV9tYXggPSAobWlwaV9tYXhfdHIgLSAo Y2xrX3BhcmFtcy0+dHJlb3RfbnMgKiBtdWx0aXBsaWVyKSk7Ci0JdC0+bWlwaV9tYXggPSBkaXZf czY0KG1pcGlfbWF4LCBtdWx0aXBsaWVyKTsKLQotCXRlbXBfbXVsdGlwbGUgPSBkaXZfczY0KAot CQkJKHQtPm1pcGlfbWluICogbXVsdGlwbGllciAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSwK LQkJCWNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpOwotCi0JZGl2X3M2NF9yZW0odGVtcF9tdWx0 aXBsZSwgbXVsdGlwbGllciwgJmZyYWMpOwotCWlmIChvcHMtPmNhbGNfY2xrX3RyYWlsX3JlY19t aW4pIHsKLQkJdC0+cmVjX21pbiA9IG9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21pbih0ZW1wX211 bHRpcGxlLAotCQkJZnJhYywgbXVsdGlwbGllcik7Ci0JfSBlbHNlIHsKLQkJcmMgPSAtRUlOVkFM OwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIHJlY29tbWVuZGVkIG1heCAqLwotCXJlY190ZW1w MSA9IGRpdl9zNjQoKG1pcGlfbWF4ICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJICAg IGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpOwotCWlmIChvcHMtPmNhbGNfY2xrX3RyYWlsX3Jl Y19tYXgpIHsKLQkJdC0+cmVjX21heCA9IG9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21heChyZWNf dGVtcDEsIG11bHRpcGxpZXIpOwotCX0gZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQl0LT5yZWMgPSBESVZfUk9VTkRfVVAoCi0JCSgoKHQtPnJlY19tYXggLSB0 LT5yZWNfbWluKSAqIGNsa19wYXJhbXMtPmNsa190cmFpbF9idWYpICsKLQkJICh0LT5yZWNfbWlu ICogMTAwKSksIDEwMCk7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2FuZF9zZXQodCwg ImNsa190cmFpbCIpOwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCSp0ZW90X2Nsa19sYW5l ID0gdGVvdF9jbGtfbGFuZTE7Ci0JcHJfZGVidWcoIkNMS19UUkFJTDptaXBpX21pbj0lZCwgbWlw aV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0LT5t aXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgsCi0JCSB0LT5yZWdf dmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci0KLX0KLQotLyoqCi0gKiBjYWxjX2hzX3By ZXBhcmUgLSBjYWxjdWxhdGVzIHByZXBhcmUgdGltaW5nIHBhcmFtcyBmb3IgZGF0YSBsYW5lcyBp biBIUy4KLSAqLwotc3RhdGljIGludCBjYWxjX2hzX3ByZXBhcmUoc3RydWN0IGRzaV9waHlfaHcg KnBoeSwKLQkJCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBw aHlfdGltaW5nX2Rlc2MgKmRlc2MsCi0JCQl1NjQgKnRlbXBfbXVsKQotewotCXU2NCBtdWx0aXBs aWVyID0gQklUKDIwKTsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAm ZGVzYy0+aHNfcHJlcGFyZTsKLQl1NjQgdGVtcF9tdWx0aXBsZSwgZGl2aWRlbmQsIHRlbXA7Ci0J czMyIGZyYWM7Ci0JczY0IHJlY190ZW1wMSwgcmVjX3RlbXAyLCBtaXBpX21heCwgbWlwaV9taW47 Ci0JdTMyIGxvd19jbGtfbXVsdGlwbGllciA9IDA7Ci0KLQlpZiAoY2xrX3BhcmFtcy0+Yml0Y2xr X21icHMgPD0gMTIwKQotCQlsb3dfY2xrX211bHRpcGxpZXIgPSAyOwotCS8qIG1pcGkgbWluICov Ci0JdGVtcF9tdWx0aXBsZSA9IGRpdl9zNjQoKDQgKiBtdWx0aXBsaWVyICogY2xrX3BhcmFtcy0+ dGxweF9udW1lcl9ucyksCi0JCQkJY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCWRpdl9zNjRf cmVtKHRlbXBfbXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFjKTsKLQltaXBpX21pbiA9ICg0MCAq IG11bHRpcGxpZXIpICsgKHRlbXBfbXVsdGlwbGUgKyBmcmFjKTsKLQl0LT5taXBpX21pbiA9IGRp dl9zNjQobWlwaV9taW4sIG11bHRpcGxpZXIpOwotCi0JLyogbWlwaV9tYXggKi8KLQl0ZW1wX211 bHRpcGxlID0gZGl2X3M2NCgKLQkJCSg2ICogbXVsdGlwbGllciAqIGNsa19wYXJhbXMtPnRscHhf bnVtZXJfbnMpLAotCQkJY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCWRpdl9zNjRfcmVtKHRl bXBfbXVsdGlwbGUsIG11bHRpcGxpZXIsICZmcmFjKTsKLQltaXBpX21heCA9ICg4NSAqIG11bHRp cGxpZXIpICsgdGVtcF9tdWx0aXBsZTsKLQl0LT5taXBpX21heCA9IGRpdl9zNjQobWlwaV9tYXgs IG11bHRpcGxpZXIpOwotCi0JLyogcmVjb21tZW5kZWQgbWluICovCi0JdGVtcF9tdWx0aXBsZSA9 IGRpdl9zNjQoKG1pcGlfbWluICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJCWNsa19w YXJhbXMtPnRscHhfbnVtZXJfbnMpOwotCXRlbXBfbXVsdGlwbGUgLT0gKGxvd19jbGtfbXVsdGlw bGllciAqIG11bHRpcGxpZXIpOwotCWRpdl9zNjRfcmVtKHRlbXBfbXVsdGlwbGUsIG11bHRpcGxp ZXIsICZmcmFjKTsKLQlyZWNfdGVtcDEgPSByb3VuZHVwKCgodGVtcF9tdWx0aXBsZSArIGZyYWMp IC8gOCksIG11bHRpcGxpZXIpOwotCXQtPnJlY19taW4gPSBkaXZfczY0KHJlY190ZW1wMSwgbXVs dGlwbGllcik7Ci0KLQkvKiByZWNvbW1lbmRlZCBtYXggKi8KLQl0ZW1wX211bHRpcGxlID0gZGl2 X3M2NCgobWlwaV9tYXggKiBjbGtfcGFyYW1zLT5iaXRjbGtfbWJwcyksCi0JCQkJY2xrX3BhcmFt cy0+dGxweF9udW1lcl9ucyk7Ci0JdGVtcF9tdWx0aXBsZSAtPSAobG93X2Nsa19tdWx0aXBsaWVy ICogbXVsdGlwbGllcik7Ci0JZGl2X3M2NF9yZW0odGVtcF9tdWx0aXBsZSwgbXVsdGlwbGllciwg JmZyYWMpOwotCXJlY190ZW1wMiA9IHJvdW5kZG93bigodGVtcF9tdWx0aXBsZSAvIDgpLCBtdWx0 aXBsaWVyKTsKLQl0LT5yZWNfbWF4ID0gZGl2X3M2NChyZWNfdGVtcDIsIG11bHRpcGxpZXIpOwot Ci0JLyogcmVnaXN0ZXIgdmFsdWUgKi8KLQlkaXZpZGVuZCA9ICgocmVjX3RlbXAyIC0gcmVjX3Rl bXAxKSAqIGNsa19wYXJhbXMtPmhzX3ByZXBfYnVmKTsKLQl0ZW1wID0gcm91bmR1cChkaXZfdTY0 KGRpdmlkZW5kLCAxMDApLCBtdWx0aXBsaWVyKTsKLQl0LT5yZWMgPSBkaXZfczY0KCh0ZW1wICsg cmVjX3RlbXAxKSwgbXVsdGlwbGllcik7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRlX2Fu ZF9zZXQodCwgImhzX3ByZXBhcmUiKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyb3I7Ci0KLQl0ZW1w X211bHRpcGxlID0gZGl2X3M2NCgKLQkJCSg4ICogKHRlbXAgKyByZWNfdGVtcDEpICogY2xrX3Bh cmFtcy0+dGxweF9udW1lcl9ucyksCi0JCQljbGtfcGFyYW1zLT5iaXRjbGtfbWJwcyk7Ci0KLQkq dGVtcF9tdWwgPSB0ZW1wX211bHRpcGxlOwotCXByX2RlYnVnKCJIU19QUkVQOm1pcGlfbWluPSVk LCBtaXBpX21heD0lZCwgcmVjX21pbj0lZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJ IHQtPm1pcGlfbWluLCB0LT5taXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQt PnJlZ192YWx1ZSk7Ci1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogY2FsY19oc196 ZXJvIC0gY2FsY3VsYXRlcyB6ZXJvIHRpbWluZyBwYXJhbXMgZm9yIGRhdGEgbGFuZXMgaW4gSFMu Ci0gKi8KLXN0YXRpYyBpbnQgY2FsY19oc196ZXJvKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0J CQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWlu Z19kZXNjICpkZXNjLAotCQkJdTY0IHRlbXBfbXVsdGlwbGUpCi17Ci0JdTY0IGNvbnN0IG11bHRp cGxpZXIgPSBCSVQoMjApOwotCWludCByYyA9IDA7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSAqdCA9 ICZkZXNjLT5oc196ZXJvOwotCXM2NCByZWNfdGVtcDEsIG1pcGlfbWluOwotCXN0cnVjdCBwaHlf dGltaW5nX29wcyAqb3BzID0gcGh5LT5vcHMudGltaW5nX29wczsKLQotCW1pcGlfbWluID0gZGl2 X3M2NCgoMTAgKiBjbGtfcGFyYW1zLT50bHB4X251bWVyX25zICogbXVsdGlwbGllciksCi0JCQkg ICBjbGtfcGFyYW1zLT5iaXRjbGtfbWJwcyk7Ci0JcmVjX3RlbXAxID0gKDE0NSAqIG11bHRpcGxp ZXIpICsgbWlwaV9taW4gLSB0ZW1wX211bHRpcGxlOwotCXQtPm1pcGlfbWluID0gZGl2X3M2NChy ZWNfdGVtcDEsIG11bHRpcGxpZXIpOwotCi0JLyogcmVjb21tZW5kZWQgbWluICovCi0JcmVjX3Rl bXAxID0gZGl2X3M2NCgocmVjX3RlbXAxICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJ ICAgIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpOwotCi0JaWYgKG9wcy0+Y2FsY19oc196ZXJv KSB7Ci0JCXQtPnJlY19taW4gPSBvcHMtPmNhbGNfaHNfemVybyhyZWNfdGVtcDEsIG11bHRpcGxp ZXIpOwotCX0gZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQl0 LT5yZWNfbWF4ID0gKCh0LT5yZWNfbWluID4gMjU1KSA/IDUxMSA6IDI1NSk7Ci0JdC0+cmVjID0g RElWX1JPVU5EX1VQKAotCQkJKCgodC0+cmVjX21heCAtIHQtPnJlY19taW4pICogY2xrX3BhcmFt cy0+aHNfemVyb19idWYpICsKLQkJCSAodC0+cmVjX21pbiAqIDEwMCkpLAotCQkJMTAwKTsKLQot CXJjID0gZHNpX3BoeV9jbW5fdmFsaWRhdGVfYW5kX3NldCh0LCAiaHNfemVybyIpOwotCWlmIChy YykKLQkJZ290byBlcnJvcjsKLQotCXByX2RlYnVnKCJIU19aRVJPOm1pcGlfbWluPSVkLCBtaXBp X21heD0lZCwgcmVjX21pbj0lZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1p cGlfbWluLCB0LT5taXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192 YWx1ZSk7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjX2hzX3RyYWls IC0gY2FsY3VsYXRlcyB0cmFpbCB0aW1pbmcgcGFyYW1zIGZvciBkYXRhIGxhbmVzIGluIEhTLgot ICovCi1zdGF0aWMgaW50IGNhbGNfaHNfdHJhaWwoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJ CXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5n X2Rlc2MgKmRlc2MsCi0JCQl1NjQgdGVvdF9jbGtfbGFuZSkKLXsKLQlpbnQgcmMgPSAwOwotCXN0 cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNfdHJhaWw7Ci0JczY0IHJlY190ZW1wMTsK LQlzdHJ1Y3QgcGh5X3RpbWluZ19vcHMgKm9wcyA9IHBoeS0+b3BzLnRpbWluZ19vcHM7Ci0KLQl0 LT5taXBpX21pbiA9IDYwICsKLQkJCW11bHRfZnJhYyhjbGtfcGFyYW1zLT50bHB4X251bWVyX25z LCA0LAotCQkJCSAgY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCi0JdC0+bWlwaV9tYXggPSB0 ZW90X2Nsa19sYW5lIC0gY2xrX3BhcmFtcy0+dHJlb3RfbnM7Ci0KLQlpZiAob3BzLT5jYWxjX2hz X3RyYWlsKSB7Ci0JCW9wcy0+Y2FsY19oc190cmFpbChjbGtfcGFyYW1zLCBkZXNjKTsKLQl9IGVs c2UgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmVjX3RlbXAxID0g RElWX1JPVU5EX1VQKAotCQkJKCh0LT5yZWNfbWF4IC0gdC0+cmVjX21pbikgKiBjbGtfcGFyYW1z LT5oc190cmFpbF9idWYpLAotCQkJMTAwKTsKLQl0LT5yZWMgPSByZWNfdGVtcDEgKyB0LT5yZWNf bWluOwotCi0JcmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9hbmRfc2V0KHQsICJoc190cmFpbCIp OwotCWlmIChyYykKLQkJZ290byBlcnJvcjsKLQotCXByX2RlYnVnKCJIU19UUkFJTDptaXBpX21p bj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19tYXg9JWQsIHJlZ192YWw9JWRcbiIs Ci0JCSB0LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJlY19taW4sIHQtPnJlY19tYXgsCi0J CSB0LT5yZWdfdmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogY2Fs Y19oc19ycXN0IC0gY2FsY3VsYXRlcyBycXN0IHRpbWluZyBwYXJhbXMgZm9yIGRhdGEgbGFuZXMg aW4gSFMuCi0gKi8KLXN0YXRpYyBpbnQgY2FsY19oc19ycXN0KHN0cnVjdCBkc2lfcGh5X2h3ICpw aHksCi0JCQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5 X3RpbWluZ19kZXNjICpkZXNjKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IHRpbWluZ19lbnRy eSAqdCA9ICZkZXNjLT5oc19ycXN0OwotCi0JdC0+cmVjID0gRElWX1JPVU5EX1VQKAotCQkoKHQt Pm1pcGlfbWluICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpIC0KLQkJICg4ICogY2xrX3BhcmFt cy0+dGxweF9udW1lcl9ucykpLAotCQkoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKTsK LQotCXJjID0gZHNpX3BoeV9jbW5fdmFsaWRhdGVfYW5kX3NldCh0LCAiaHNfcnFzdCIpOwotCWlm IChyYykKLQkJZ290byBlcnJvcjsKLQotCXByX2RlYnVnKCJIU19SUVNUOm1pcGlfbWluPSVkLCBt aXBpX21heD0lZCwgcmVjX21pbj0lZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQt Pm1pcGlfbWluLCB0LT5taXBpX21heCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJl Z192YWx1ZSk7Ci0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjX2hzX2V4 aXQgLSBjYWxjdWxhdGVzIGV4aXQgdGltaW5nIHBhcmFtcyBmb3IgZGF0YSBsYW5lcyBpbiBIUy4K LSAqLwotc3RhdGljIGludCBjYWxjX2hzX2V4aXQoc3RydWN0IGRzaV9waHlfaHcgKnBoeSwKLQkJ CXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywKLQkJCXN0cnVjdCBwaHlfdGltaW5n X2Rlc2MgKmRlc2MpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5ICp0ID0g JmRlc2MtPmhzX2V4aXQ7Ci0KLQl0LT5yZWNfbWluID0gKERJVl9ST1VORF9VUCgKLQkJCSh0LT5t aXBpX21pbiAqIGNsa19wYXJhbXMtPmJpdGNsa19tYnBzKSwKLQkJCSg4ICogY2xrX3BhcmFtcy0+ dGxweF9udW1lcl9ucykpIC0gMSk7Ci0KLQl0LT5yZWMgPSBESVZfUk9VTkRfVVAoCi0JCSgoKHQt PnJlY19tYXggLSB0LT5yZWNfbWluKSAqIGNsa19wYXJhbXMtPmhzX2V4aXRfYnVmKSArCi0JCSAo dC0+cmVjX21pbiAqIDEwMCkpLCAxMDApOwotCi0JcmMgPSBkc2lfcGh5X2Ntbl92YWxpZGF0ZV9h bmRfc2V0KHQsICJoc19leGl0Iik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0KLQlwcl9k ZWJ1ZygiSFNfRVhJVDptaXBpX21pbj0lZCwgbWlwaV9tYXg9JWQsIHJlY19taW49JWQsIHJlY19t YXg9JWQsIHJlZ192YWw9JWRcbiIsCi0JCSB0LT5taXBpX21pbiwgdC0+bWlwaV9tYXgsIHQtPnJl Y19taW4sIHQtPnJlY19tYXgsCi0JCSB0LT5yZWdfdmFsdWUpOwotCi1lcnJvcjoKLQlyZXR1cm4g cmM7Ci19Ci0KLS8qKgotICogY2FsY19oc19ycXN0X2NsayAtIGNhbGN1bGF0ZXMgcnFzdCB0aW1p bmcgcGFyYW1zIGZvciBjbG9jayBsYW5lLi4KLSAqLwotc3RhdGljIGludCBjYWxjX2hzX3Jxc3Rf Y2xrKHN0cnVjdCBkc2lfcGh5X2h3ICpwaHksCi0JCQlzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKmNs a19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKQotewotCWludCByYyA9 IDA7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSAqdCA9ICZkZXNjLT5oc19ycXN0X2NsazsKLQotCXQt PnJlYyA9IERJVl9ST1VORF9VUCgKLQkJKCh0LT5taXBpX21pbiAqIGNsa19wYXJhbXMtPmJpdGNs a19tYnBzKSAtCi0JCSAoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSwKLQkJKDggKiBj bGtfcGFyYW1zLT50bHB4X251bWVyX25zKSk7Ci0KLQlyYyA9IGRzaV9waHlfY21uX3ZhbGlkYXRl X2FuZF9zZXQodCwgImhzX3Jxc3RfY2xrIik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycm9yOwotCi0J cHJfZGVidWcoIkhTX1JRU1RfQ0xLOm1pcGlfbWluPSVkLCBtaXBpX21heD0lZCwgcmVjX21pbj0l ZCwgcmVjX21heD0lZCwgcmVnX3ZhbD0lZFxuIiwKLQkJIHQtPm1pcGlfbWluLCB0LT5taXBpX21h eCwgdC0+cmVjX21pbiwgdC0+cmVjX21heCwKLQkJIHQtPnJlZ192YWx1ZSk7Ci0KLWVycm9yOgot CXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcGh5X2NhbGNfdGltaW5nX3BhcmFtcyAtIGNh bGN1bGF0ZXMgdGltaW5nIHBhcmFtZXRzIGZvciBhIGdpdmVuIGJpdCBjbG9jawotICovCi1zdGF0 aWMgaW50IGRzaV9waHlfY21uX2NhbGNfdGltaW5nX3BhcmFtcyhzdHJ1Y3QgZHNpX3BoeV9odyAq cGh5LAotCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyAqY2xrX3BhcmFtcywgc3RydWN0IHBoeV90aW1p bmdfZGVzYyAqZGVzYykKLXsKLQlpbnQgcmMgPSAwOwotCXMzMiBhY3R1YWxfZnJhYyA9IDA7Ci0J czY0IGFjdHVhbF9pbnRlcm1lZGlhdGUgPSAwOwotCXU2NCB0ZW1wX211bHRpcGxlOwotCXM2NCB0 ZW90X2Nsa19sYW5lOwotCi0JcmMgPSBjYWxjX2Nsa19wcmVwYXJlKHBoeSwgY2xrX3BhcmFtcywg ZGVzYywgJmFjdHVhbF9mcmFjLAotCQkJICAgICAgJmFjdHVhbF9pbnRlcm1lZGlhdGUpOwotCWlm IChyYykgewotCQlwcl9lcnIoImNsa19wcmVwYXJlIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVk XG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2Nsa196ZXJvKHBoeSwg Y2xrX3BhcmFtcywgZGVzYywKLQkJYWN0dWFsX2ZyYWMsIGFjdHVhbF9pbnRlcm1lZGlhdGUpOwot CWlmIChyYykgewotCQlwcl9lcnIoImNsa196ZXJvIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVk XG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2Nsa190cmFpbChwaHks IGNsa19wYXJhbXMsIGRlc2MsICZ0ZW90X2Nsa19sYW5lKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJy KCJjbGtfdHJhaWwgY2FsY3VsYXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBl cnJvcjsKLQl9Ci0KLQlyYyA9IGNhbGNfaHNfcHJlcGFyZShwaHksIGNsa19wYXJhbXMsIGRlc2Ms ICZ0ZW1wX211bHRpcGxlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJoc19wcmVwYXJlIGNhbGN1 bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMg PSBjYWxjX2hzX3plcm8ocGh5LCBjbGtfcGFyYW1zLCBkZXNjLCB0ZW1wX211bHRpcGxlKTsKLQlp ZiAocmMpIHsKLQkJcHJfZXJyKCJoc196ZXJvIGNhbGN1bGF0aW9ucyBmYWlsZWQsIHJjPSVkXG4i LCByYyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcmMgPSBjYWxjX2hzX3RyYWlsKHBoeSwgY2xr X3BhcmFtcywgZGVzYywgdGVvdF9jbGtfbGFuZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigiaHNf dHJhaWwgY2FsY3VsYXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsK LQl9Ci0KLQlyYyA9IGNhbGNfaHNfcnFzdChwaHksIGNsa19wYXJhbXMsIGRlc2MpOwotCWlmIChy YykgewotCQlwcl9lcnIoImhzX3Jxc3QgY2FsY3VsYXRpb25zIGZhaWxlZCwgcmM9JWRcbiIsIHJj KTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGNhbGNfaHNfZXhpdChwaHksIGNsa19wYXJh bXMsIGRlc2MpOwotCWlmIChyYykgewotCQlwcl9lcnIoImhzX2V4aXQgY2FsY3VsYXRpb25zIGZh aWxlZCwgcmM9JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlyYyA9IGNhbGNfaHNf cnFzdF9jbGsocGh5LCBjbGtfcGFyYW1zLCBkZXNjKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJo c19ycXN0X2NsayBjYWxjdWxhdGlvbnMgZmFpbGVkLCByYz0lZFxuIiwgcmMpOwotCQlnb3RvIGVy cm9yOwotCX0KLWVycm9yOgotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjYWxjdWxhdGVfdGlt aW5nX3BhcmFtcygpIC0gY2FsY3VsYXRlcyB0aW1pbmcgcGFyYW1ldGVycy4KLSAqIEBwaHk6ICAg ICAgUG9pbnRlciB0byBEU0kgUEhZIGhhcmR3YXJlIG9iamVjdC4KLSAqIEBtb2RlOiAgICAgTW9k ZSBpbmZvcm1hdGlvbiBmb3Igd2hpY2ggdGltaW5nIGhhcyB0byBiZSBjYWxjdWxhdGVkLgotICog QGNvbmZpZzogICBEU0kgaG9zdCBjb25maWd1cmF0aW9uIGZvciB0aGlzIG1vZGUuCi0gKiBAdGlt aW5nOiAgIFRpbWluZyBwYXJhbWV0ZXJzIGZvciBlYWNoIGxhbmUgd2hpY2ggd2lsbCBiZSByZXR1 cm5lZC4KLSAqLwotaW50IGRzaV9waHlfaHdfY2FsY3VsYXRlX3RpbWluZ19wYXJhbXMoc3RydWN0 IGRzaV9waHlfaHcgKnBoeSwKLQkJCQkJICAgIHN0cnVjdCBkc2lfbW9kZV9pbmZvICptb2RlLAot CQkJCQkgICAgc3RydWN0IGRzaV9ob3N0X2NvbW1vbl9jZmcgKmhvc3QsCi0JCQkJCSAgIHN0cnVj dCBkc2lfcGh5X3Blcl9sYW5lX2NmZ3MgKnRpbWluZykKLXsKLQkvKiBjb25zdGFudHMgKi8KLQl1 MzIgY29uc3QgZXNjX2Nsa19taHogPSAxOTI7IC8qIFRPRE86IGVzYyBjbG9jayBpcyBoYXJkY29k ZWQgKi8KLQl1MzIgY29uc3QgZXNjX2Nsa19tbXNzX2NjX3ByZWRpdiA9IDEwOwotCXUzMiBjb25z dCB0bHB4X251bWVyID0gMTAwMDsKLQl1MzIgY29uc3QgdHJfZW90ID0gMjA7Ci0JdTMyIGNvbnN0 IGNsa19wcmVwYXJlX3NwZWNfbWluID0gMzg7Ci0JdTMyIGNvbnN0IGNsa19wcmVwYXJlX3NwZWNf bWF4ID0gOTU7Ci0JdTMyIGNvbnN0IGNsa190cmFpbF9zcGVjX21pbiA9IDYwOwotCXUzMiBjb25z dCBoc19leGl0X3NwZWNfbWluID0gMTAwOwotCXUzMiBjb25zdCBoc19leGl0X3JlY29fbWF4ID0g MjU1OwotCXUzMiBjb25zdCBoc19ycXN0X3NwZWNfbWluID0gNTA7Ci0KLQkvKiBsb2NhbCB2YXJz ICovCi0JaW50IHJjID0gMDsKLQl1MzIgaF90b3RhbCwgdl90b3RhbDsKLQl1NjQgaW50ZXJfbnVt OwotCXUzMiBudW1fb2ZfbGFuZXMgPSAwOwotCXUzMiBicHA7Ci0JdTY0IHgsIHk7Ci0Jc3RydWN0 IHBoeV90aW1pbmdfZGVzYyBkZXNjOwotCXN0cnVjdCBwaHlfY2xrX3BhcmFtcyBjbGtfcGFyYW1z ID0gezB9OwotCXN0cnVjdCBwaHlfdGltaW5nX29wcyAqb3BzID0gcGh5LT5vcHMudGltaW5nX29w czsKLQotCW1lbXNldCgmZGVzYywgMHgwLCBzaXplb2YoZGVzYykpOwotCWhfdG90YWwgPSBEU0lf SF9UT1RBTChtb2RlKTsKLQl2X3RvdGFsID0gRFNJX1ZfVE9UQUwobW9kZSk7Ci0KLQlicHAgPSBi aXRzX3Blcl9waXhlbFtob3N0LT5kc3RfZm9ybWF0XTsKLQotCWludGVyX251bSA9IGJwcCAqIG1v ZGUtPnJlZnJlc2hfcmF0ZTsKLQotCWlmIChob3N0LT5kYXRhX2xhbmVzICYgRFNJX0RBVEFfTEFO RV8wKQotCQludW1fb2ZfbGFuZXMrKzsKLQlpZiAoaG9zdC0+ZGF0YV9sYW5lcyAmIERTSV9EQVRB X0xBTkVfMSkKLQkJbnVtX29mX2xhbmVzKys7Ci0JaWYgKGhvc3QtPmRhdGFfbGFuZXMgJiBEU0lf REFUQV9MQU5FXzIpCi0JCW51bV9vZl9sYW5lcysrOwotCWlmIChob3N0LT5kYXRhX2xhbmVzICYg RFNJX0RBVEFfTEFORV8zKQotCQludW1fb2ZfbGFuZXMrKzsKLQotCi0JeCA9IG11bHRfZnJhYyh2 X3RvdGFsICogaF90b3RhbCwgaW50ZXJfbnVtLCBudW1fb2ZfbGFuZXMpOwotCXkgPSByb3VuZGRv d24oeCwgMSk7Ci0KLQljbGtfcGFyYW1zLmJpdGNsa19tYnBzID0gcm91bmRkb3duKG11bHRfZnJh Yyh5LCAxLCAxMDAwMDAwKSwgMSk7Ci0JY2xrX3BhcmFtcy5lc2NjbGtfbnVtZXIgPSBlc2NfY2xr X21oejsKLQljbGtfcGFyYW1zLmVzY2Nsa19kZW5vbSA9IGVzY19jbGtfbW1zc19jY19wcmVkaXY7 Ci0JY2xrX3BhcmFtcy50bHB4X251bWVyX25zID0gdGxweF9udW1lcjsKLQljbGtfcGFyYW1zLnRy ZW90X25zID0gdHJfZW90OwotCi0KLQkvKiBTZXR1cCBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KLQlk ZXNjLmNsa19wcmVwYXJlLm1pcGlfbWluID0gY2xrX3ByZXBhcmVfc3BlY19taW47Ci0JZGVzYy5j bGtfcHJlcGFyZS5taXBpX21heCA9IGNsa19wcmVwYXJlX3NwZWNfbWF4OwotCWRlc2MuY2xrX3Ry YWlsLm1pcGlfbWluID0gY2xrX3RyYWlsX3NwZWNfbWluOwotCWRlc2MuaHNfZXhpdC5taXBpX21p biA9IGhzX2V4aXRfc3BlY19taW47Ci0JZGVzYy5oc19leGl0LnJlY19tYXggPSBoc19leGl0X3Jl Y29fbWF4OwotCWRlc2MuaHNfcnFzdC5taXBpX21pbiA9IGhzX3Jxc3Rfc3BlY19taW47Ci0JZGVz Yy5oc19ycXN0X2Nsay5taXBpX21pbiA9IGhzX3Jxc3Rfc3BlY19taW47Ci0KLQlpZiAob3BzLT5n ZXRfZGVmYXVsdF9waHlfcGFyYW1zKSB7Ci0JCW9wcy0+Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcygm Y2xrX3BhcmFtcyk7Ci0JfSBlbHNlIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycm9yOwot CX0KLQotCWRlc2MuY2xrX3ByZXBhcmUucmVjX21pbiA9IERJVl9ST1VORF9VUCgKLQkJCShkZXNj LmNsa19wcmVwYXJlLm1pcGlfbWluICogY2xrX3BhcmFtcy5iaXRjbGtfbWJwcyksCi0JCQkoOCAq IGNsa19wYXJhbXMudGxweF9udW1lcl9ucykKLQkJCSk7Ci0KLQlkZXNjLmNsa19wcmVwYXJlLnJl Y19tYXggPSByb3VuZGRvd24oCi0JCW11bHRfZnJhYygoZGVzYy5jbGtfcHJlcGFyZS5taXBpX21h eCAqIGNsa19wYXJhbXMuYml0Y2xrX21icHMpLAotCQkJICAxLCAoOCAqIGNsa19wYXJhbXMudGxw eF9udW1lcl9ucykpLAotCQkxKTsKLQotCXByX2RlYnVnKCJCSVQgQ0xPQ0sgPSAlZCwgdGxweF9u dW1lcl9ucz0lZCwgdHJlb3RfbnM9JWRcbiIsCi0JICAgICAgIGNsa19wYXJhbXMuYml0Y2xrX21i cHMsIGNsa19wYXJhbXMudGxweF9udW1lcl9ucywKLQkgICAgICAgY2xrX3BhcmFtcy50cmVvdF9u cyk7Ci0JcmMgPSBkc2lfcGh5X2Ntbl9jYWxjX3RpbWluZ19wYXJhbXMocGh5LCAmY2xrX3BhcmFt cywgJmRlc2MpOwotCWlmIChyYykgewotCQlwcl9lcnIoIlRpbWluZyBjYWxjIGZhaWxlZCwgcmM9 JWRcbiIsIHJjKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAob3BzLT51cGRhdGVfdGltaW5n X3BhcmFtcykgewotCQlvcHMtPnVwZGF0ZV90aW1pbmdfcGFyYW1zKHRpbWluZywgJmRlc2MpOwot CX0gZWxzZSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLWVycm9yOgot CXJldHVybiByYzsKLX0KLQotaW50IGRzaV9waHlfdGltaW5nX2NhbGNfaW5pdChzdHJ1Y3QgZHNp X3BoeV9odyAqcGh5LAotCQkJZW51bSBkc2lfcGh5X3ZlcnNpb24gdmVyc2lvbikKLXsKLQlzdHJ1 Y3QgcGh5X3RpbWluZ19vcHMgKm9wcyA9IE5VTEw7Ci0KLQlpZiAodmVyc2lvbiA9PSBEU0lfUEhZ X1ZFUlNJT05fVU5LTk9XTiB8fAotCSAgICB2ZXJzaW9uID49IERTSV9QSFlfVkVSU0lPTl9NQVgg fHwgIXBoeSkgewotCQlwcl9lcnIoIlVuc3VwcG9ydGVkIHZlcnNpb246ICVkXG4iLCB2ZXJzaW9u KTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlvcHMgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgcGh5X3RpbWluZ19vcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wcykKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JcGh5LT5vcHMudGltaW5nX29wcyA9IG9wczsKLQotCXN3aXRjaCAodmVyc2lvbikg ewotCWNhc2UgRFNJX1BIWV9WRVJTSU9OXzJfMDoKLQkJb3BzLT5nZXRfZGVmYXVsdF9waHlfcGFy YW1zID0KLQkJCWRzaV9waHlfaHdfdjJfMF9nZXRfZGVmYXVsdF9waHlfcGFyYW1zOwotCQlvcHMt PmNhbGNfY2xrX3plcm8gPQotCQkJZHNpX3BoeV9od192Ml8wX2NhbGNfY2xrX3plcm87Ci0JCW9w cy0+Y2FsY19jbGtfdHJhaWxfcmVjX21pbiA9Ci0JCQlkc2lfcGh5X2h3X3YyXzBfY2FsY19jbGtf dHJhaWxfcmVjX21pbjsKLQkJb3BzLT5jYWxjX2Nsa190cmFpbF9yZWNfbWF4ID0KLQkJCWRzaV9w aHlfaHdfdjJfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWF4OwotCQlvcHMtPmNhbGNfaHNfemVybyA9 Ci0JCQlkc2lfcGh5X2h3X3YyXzBfY2FsY19oc196ZXJvOwotCQlvcHMtPmNhbGNfaHNfdHJhaWwg PQotCQkJZHNpX3BoeV9od192Ml8wX2NhbGNfaHNfdHJhaWw7Ci0JCW9wcy0+dXBkYXRlX3RpbWlu Z19wYXJhbXMgPQotCQkJZHNpX3BoeV9od192Ml8wX3VwZGF0ZV90aW1pbmdfcGFyYW1zOwotCQli cmVhazsKLQljYXNlIERTSV9QSFlfVkVSU0lPTl8zXzA6Ci0JCW9wcy0+Z2V0X2RlZmF1bHRfcGh5 X3BhcmFtcyA9Ci0JCQlkc2lfcGh5X2h3X3YzXzBfZ2V0X2RlZmF1bHRfcGh5X3BhcmFtczsKLQkJ b3BzLT5jYWxjX2Nsa196ZXJvID0KLQkJCWRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa196ZXJvOwot CQlvcHMtPmNhbGNfY2xrX3RyYWlsX3JlY19taW4gPQotCQkJZHNpX3BoeV9od192M18wX2NhbGNf Y2xrX3RyYWlsX3JlY19taW47Ci0JCW9wcy0+Y2FsY19jbGtfdHJhaWxfcmVjX21heCA9Ci0JCQlk c2lfcGh5X2h3X3YzXzBfY2FsY19jbGtfdHJhaWxfcmVjX21heDsKLQkJb3BzLT5jYWxjX2hzX3pl cm8gPQotCQkJZHNpX3BoeV9od192M18wX2NhbGNfaHNfemVybzsKLQkJb3BzLT5jYWxjX2hzX3Ry YWlsID0KLQkJCWRzaV9waHlfaHdfdjNfMF9jYWxjX2hzX3RyYWlsOwotCQlvcHMtPnVwZGF0ZV90 aW1pbmdfcGFyYW1zID0KLQkJCWRzaV9waHlfaHdfdjNfMF91cGRhdGVfdGltaW5nX3BhcmFtczsK LQkJYnJlYWs7Ci0JY2FzZSBEU0lfUEhZX1ZFUlNJT05fMF8wX0hQTToKLQljYXNlIERTSV9QSFlf VkVSU0lPTl8wXzBfTFBNOgotCWNhc2UgRFNJX1BIWV9WRVJTSU9OXzFfMDoKLQlkZWZhdWx0Ogot CQlrZnJlZShvcHMpOwotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0KLQotCXJldHVybiAwOwotfQot CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGlt aW5nX2NhbGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1p bmdfY2FsYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTIyNGZhLi4wMDAwMDAw Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfY2Fs Yy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp IDIwMTUtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g KgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9EU0lfUEhZX1RJTUlOR19DQUxDX0hfCi0jZGVmaW5l IF9EU0lfUEhZX1RJTUlOR19DQUxDX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KLSNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxs aW51eC9iaXRtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jaW5jbHVkZSAiZHNp X2RlZnMuaCIKLSNpbmNsdWRlICJkc2lfcGh5X2h3LmgiCi0jaW5jbHVkZSAiZHNpX2NhdGFsb2cu aCIKLQotLyoqCi0gKiBzdHJ1Y3QgdGltaW5nX2VudHJ5IC0gQ2FsY3VsYXRlZCB2YWx1ZXMgZm9y IGVhY2ggdGltaW5nIHBhcmFtZXRlci4KLSAqIEBtaXBpX21pbjoKLSAqIEBtaXBpX21heDoKLSAq IEByZWNfbWluOgotICogQHJlY19tYXg6Ci0gKiBAcmVjOgotICogQHJlZ192YWx1ZTogICAgICAg VmFsdWUgdG8gYmUgcHJvZ3JhbW1lZCBpbiByZWdpc3Rlci4KLSAqLwotc3RydWN0IHRpbWluZ19l bnRyeSB7Ci0JczMyIG1pcGlfbWluOwotCXMzMiBtaXBpX21heDsKLQlzMzIgcmVjX21pbjsKLQlz MzIgcmVjX21heDsKLQlzMzIgcmVjOwotCXU4IHJlZ192YWx1ZTsKLX07Ci0KLS8qKgotICogc3Ry dWN0IHBoeV90aW1pbmdfZGVzYyAtIFRpbWluZyBwYXJhbWV0ZXJzIGZvciBEU0kgUEhZLgotICov Ci1zdHJ1Y3QgcGh5X3RpbWluZ19kZXNjIHsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGNsa19wcmVw YXJlOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgY2xrX3plcm87Ci0Jc3RydWN0IHRpbWluZ19lbnRy eSBjbGtfdHJhaWw7Ci0Jc3RydWN0IHRpbWluZ19lbnRyeSBoc19wcmVwYXJlOwotCXN0cnVjdCB0 aW1pbmdfZW50cnkgaHNfemVybzsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX3RyYWlsOwotCXN0 cnVjdCB0aW1pbmdfZW50cnkgaHNfcnFzdDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGhzX3Jxc3Rf Y2xrOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgaHNfZXhpdDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5 IHRhX2dvOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgdGFfc3VyZTsKLQlzdHJ1Y3QgdGltaW5nX2Vu dHJ5IHRhX3NldDsKLQlzdHJ1Y3QgdGltaW5nX2VudHJ5IGNsa19wb3N0OwotCXN0cnVjdCB0aW1p bmdfZW50cnkgY2xrX3ByZTsKLX07Ci0KLS8qKgotICogc3RydWN0IHBoeV9jbGtfcGFyYW1zIC0g Q2xvY2sgcGFyYW1ldGVycyBmb3IgUEhZIHRpbWluZyBjYWxjdWxhdGlvbnMuCi0gKi8KLXN0cnVj dCBwaHlfY2xrX3BhcmFtcyB7Ci0JdTMyIGJpdGNsa19tYnBzOwotCXUzMiBlc2NjbGtfbnVtZXI7 Ci0JdTMyIGVzY2Nsa19kZW5vbTsKLQl1MzIgdGxweF9udW1lcl9uczsKLQl1MzIgdHJlb3RfbnM7 Ci0JdTMyIGNsa19wcmVwX2J1ZjsKLQl1MzIgY2xrX3plcm9fYnVmOwotCXUzMiBjbGtfdHJhaWxf YnVmOwotCXUzMiBoc19wcmVwX2J1ZjsKLQl1MzIgaHNfemVyb19idWY7Ci0JdTMyIGhzX3RyYWls X2J1ZjsKLQl1MzIgaHNfcnFzdF9idWY7Ci0JdTMyIGhzX2V4aXRfYnVmOwotfTsKLQotLyoqCi0g KiBWYXJpb3VzIE9wcyBuZWVkZWQgZm9yIGF1dG8tY2FsY3VsYXRpb24gb2YgRFNJIFBIWSB0aW1p bmcgcGFyYW1ldGVycy4KLSAqLwotc3RydWN0IHBoeV90aW1pbmdfb3BzIHsKLQl2b2lkICgqZ2V0 X2RlZmF1bHRfcGh5X3BhcmFtcykoc3RydWN0IHBoeV9jbGtfcGFyYW1zICpwYXJhbXMpOwotCi0J aW50MzJfdCAoKmNhbGNfY2xrX3plcm8pKHM2NCByZWNfdGVtcDEsIHM2NCBtdWx0KTsKLQotCWlu dDMyX3QgKCpjYWxjX2Nsa190cmFpbF9yZWNfbWluKShzNjQgdGVtcF9tdWwsCi0JCXM2NCBmcmFj LCBzNjQgbXVsdCk7Ci0KLQlpbnQzMl90ICgqY2FsY19jbGtfdHJhaWxfcmVjX21heCkoczY0IHRl bXAxLCBzNjQgbXVsdCk7Ci0KLQlpbnQzMl90ICgqY2FsY19oc196ZXJvKShzNjQgdGVtcDEsIHM2 NCBtdWx0KTsKLQotCXZvaWQgKCpjYWxjX2hzX3RyYWlsKShzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMg KmNsa19wYXJhbXMsCi0JCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKTsKLQotCXZvaWQg KCp1cGRhdGVfdGltaW5nX3BhcmFtcykoc3RydWN0IGRzaV9waHlfcGVyX2xhbmVfY2ZncyAqdGlt aW5nLAotCQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKTsKLX07Ci0KLS8qIERTSSBQSFkg dGltaW5nIGZ1bmN0aW9ucyBmb3IgMTRubSAqLwotdm9pZCBkc2lfcGh5X2h3X3YyXzBfZ2V0X2Rl ZmF1bHRfcGh5X3BhcmFtcyhzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKnBhcmFtcyk7Ci0KLWludDMy X3QgZHNpX3BoeV9od192Ml8wX2NhbGNfY2xrX3plcm8oczY0IHJlY190ZW1wMSwgczY0IG11bHQp OwotCi1pbnQzMl90IGRzaV9waHlfaHdfdjJfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWluKHM2NCB0 ZW1wX211bCwKLQkJczY0IGZyYWMsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5X2h3X3Yy XzBfY2FsY19jbGtfdHJhaWxfcmVjX21heChzNjQgdGVtcDEsIHM2NCBtdWx0KTsKLQotaW50MzJf dCBkc2lfcGh5X2h3X3YyXzBfY2FsY19oc196ZXJvKHM2NCB0ZW1wMSwgczY0IG11bHQpOwotCi12 b2lkIGRzaV9waHlfaHdfdjJfMF9jYWxjX2hzX3RyYWlsKHN0cnVjdCBwaHlfY2xrX3BhcmFtcyAq Y2xrX3BhcmFtcywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLXZvaWQgZHNp X3BoeV9od192Ml8wX3VwZGF0ZV90aW1pbmdfcGFyYW1zKHN0cnVjdCBkc2lfcGh5X3Blcl9sYW5l X2NmZ3MgKnRpbWluZywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLS8qIERT SSBQSFkgdGltaW5nIGZ1bmN0aW9ucyBmb3IgMTBubSAqLwotdm9pZCBkc2lfcGh5X2h3X3YzXzBf Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcyhzdHJ1Y3QgcGh5X2Nsa19wYXJhbXMgKnBhcmFtcyk7Ci0K LWludDMyX3QgZHNpX3BoeV9od192M18wX2NhbGNfY2xrX3plcm8oczY0IHJlY190ZW1wMSwgczY0 IG11bHQpOwotCi1pbnQzMl90IGRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWlu KHM2NCB0ZW1wX211bCwKLQkJczY0IGZyYWMsIHM2NCBtdWx0KTsKLQotaW50MzJfdCBkc2lfcGh5 X2h3X3YzXzBfY2FsY19jbGtfdHJhaWxfcmVjX21heChzNjQgdGVtcDEsIHM2NCBtdWx0KTsKLQot aW50MzJfdCBkc2lfcGh5X2h3X3YzXzBfY2FsY19oc196ZXJvKHM2NCB0ZW1wMSwgczY0IG11bHQp OwotCi12b2lkIGRzaV9waHlfaHdfdjNfMF9jYWxjX2hzX3RyYWlsKHN0cnVjdCBwaHlfY2xrX3Bh cmFtcyAqY2xrX3BhcmFtcywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0KLXZv aWQgZHNpX3BoeV9od192M18wX3VwZGF0ZV90aW1pbmdfcGFyYW1zKHN0cnVjdCBkc2lfcGh5X3Bl cl9sYW5lX2NmZ3MgKnRpbWluZywKLQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYyk7Ci0K LSNlbmRpZiAvKiBfRFNJX1BIWV9USU1JTkdfQ0FMQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kc2ktc3RhZ2luZy9kc2lfcGh5X3RpbWluZ192Ml8wLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX3YyXzAuYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYTgxMzllMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5nX3YyXzAuYworKysgL2Rldi9udWxsCkBA IC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0g KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2Rl ZmluZSBwcl9mbXQoZm10KSAiZHNpLXBoeS10aW1pbmc6IiBmbXQKLSNpbmNsdWRlICJkc2lfcGh5 X3RpbWluZ19jYWxjLmgiCi0KLXZvaWQgZHNpX3BoeV9od192Ml8wX2dldF9kZWZhdWx0X3BoeV9w YXJhbXMoc3RydWN0IHBoeV9jbGtfcGFyYW1zICpwYXJhbXMpCi17Ci0JcGFyYW1zLT5jbGtfcHJl cF9idWYgPSA1MDsKLQlwYXJhbXMtPmNsa196ZXJvX2J1ZiA9IDI7Ci0JcGFyYW1zLT5jbGtfdHJh aWxfYnVmID0gMzA7Ci0JcGFyYW1zLT5oc19wcmVwX2J1ZiA9IDUwOwotCXBhcmFtcy0+aHNfemVy b19idWYgPSAxMDsKLQlwYXJhbXMtPmhzX3RyYWlsX2J1ZiA9IDMwOwotCXBhcmFtcy0+aHNfcnFz dF9idWYgPSAwOwotCXBhcmFtcy0+aHNfZXhpdF9idWYgPSAxMDsKLX0KLQotaW50MzJfdCBkc2lf cGh5X2h3X3YyXzBfY2FsY19jbGtfemVybyhzNjQgcmVjX3RlbXAxLCBzNjQgbXVsdCkKLXsKLQlz NjQgcmVjX3RlbXAyLCByZWNfdGVtcDM7Ci0KLQlyZWNfdGVtcDIgPSAocmVjX3RlbXAxIC0gKDEx ICogbXVsdCkpOwotCXJlY190ZW1wMyA9IHJvdW5kdXAoZGl2X3M2NChyZWNfdGVtcDIsIDgpLCBt dWx0KTsKLQlyZXR1cm4gKGRpdl9zNjQocmVjX3RlbXAzLCBtdWx0KSAtIDMpOwotfQotCi1pbnQz Ml90IGRzaV9waHlfaHdfdjJfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWluKHM2NCB0ZW1wX211bCwK LQkJczY0IGZyYWMsIHM2NCBtdWx0KQotewotCXM2NCByZWNfdGVtcDEsIHJlY190ZW1wMiwgcmVj X3RlbXAzOwotCi0JcmVjX3RlbXAxID0gdGVtcF9tdWwgKyBmcmFjICsgKDMgKiBtdWx0KTsKLQly ZWNfdGVtcDIgPSBkaXZfczY0KHJlY190ZW1wMSwgOCk7Ci0JcmVjX3RlbXAzID0gcm91bmR1cChy ZWNfdGVtcDIsIG11bHQpOwotCi0JcmV0dXJuIGRpdl9zNjQocmVjX3RlbXAzLCBtdWx0KTsKLX0K LQotaW50MzJfdCBkc2lfcGh5X2h3X3YyXzBfY2FsY19jbGtfdHJhaWxfcmVjX21heChzNjQgdGVt cDEsIHM2NCBtdWx0KQotewotCXM2NCByZWNfdGVtcDIsIHJlY190ZW1wMzsKLQotCXJlY190ZW1w MiA9IHRlbXAxICsgKDMgKiBtdWx0KTsKLQlyZWNfdGVtcDMgPSByZWNfdGVtcDIgLyA4OwotCXJl dHVybiBkaXZfczY0KHJlY190ZW1wMywgbXVsdCk7Ci0KLX0KLQotaW50MzJfdCBkc2lfcGh5X2h3 X3YyXzBfY2FsY19oc196ZXJvKHM2NCB0ZW1wMSwgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1w MiwgcmVjX3RlbXAzLCByZWNfbWluOwotCi0JcmVjX3RlbXAyID0gdGVtcDEgLSAoMTEgKiBtdWx0 KTsKLQlyZWNfdGVtcDMgPSByb3VuZHVwKChyZWNfdGVtcDIgLyA4KSwgbXVsdCk7Ci0JcmVjX21p biA9IHJlY190ZW1wMyAtICgzICogbXVsdCk7Ci0JcmV0dXJuIGRpdl9zNjQocmVjX21pbiwgbXVs dCk7Ci19Ci0KLXZvaWQgZHNpX3BoeV9od192Ml8wX2NhbGNfaHNfdHJhaWwoc3RydWN0IHBoeV9j bGtfcGFyYW1zICpjbGtfcGFyYW1zLAotCQkJc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykK LXsKLQlzNjQgcmVjX3RlbXAxOwotCXN0cnVjdCB0aW1pbmdfZW50cnkgKnQgPSAmZGVzYy0+aHNf dHJhaWw7Ci0KLQl0LT5yZWNfbWluID0gRElWX1JPVU5EX1VQKAotCQkoKHQtPm1pcGlfbWluICog Y2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpICsKLQkJICgzICogY2xrX3BhcmFtcy0+dGxweF9udW1l cl9ucykpLAotCQkoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKTsKLQotCXJlY190ZW1w MSA9ICgodC0+bWlwaV9tYXggKiBjbGtfcGFyYW1zLT5iaXRjbGtfbWJwcykgKwotCQkgICAgICgz ICogY2xrX3BhcmFtcy0+dGxweF9udW1lcl9ucykpOwotCXQtPnJlY19tYXggPSAocmVjX3RlbXAx IC8gKDggKiBjbGtfcGFyYW1zLT50bHB4X251bWVyX25zKSk7Ci19Ci0KLXZvaWQgZHNpX3BoeV9o d192Ml8wX3VwZGF0ZV90aW1pbmdfcGFyYW1zKAotCXN0cnVjdCBkc2lfcGh5X3Blcl9sYW5lX2Nm Z3MgKnRpbWluZywKLQlzdHJ1Y3QgcGh5X3RpbWluZ19kZXNjICpkZXNjKQotewotCWludCBpID0g MDsKLQotCWZvciAoaSA9IERTSV9MT0dJQ0FMX0xBTkVfMDsgaSA8IERTSV9MQU5FX01BWDsgaSsr KSB7Ci0JCXRpbWluZy0+bGFuZVtpXVswXSA9IGRlc2MtPmhzX2V4aXQucmVnX3ZhbHVlOwotCi0J CWlmIChpID09IERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUpCi0JCQl0aW1pbmctPmxhbmVbaV1bMV0g PSBkZXNjLT5jbGtfemVyby5yZWdfdmFsdWU7Ci0JCWVsc2UKLQkJCXRpbWluZy0+bGFuZVtpXVsx XSA9IGRlc2MtPmhzX3plcm8ucmVnX3ZhbHVlOwotCi0JCWlmIChpID09IERTSV9MT0dJQ0FMX0NM T0NLX0xBTkUpCi0JCQl0aW1pbmctPmxhbmVbaV1bMl0gPSBkZXNjLT5jbGtfcHJlcGFyZS5yZWdf dmFsdWU7Ci0JCWVsc2UKLQkJCXRpbWluZy0+bGFuZVtpXVsyXSA9IGRlc2MtPmhzX3ByZXBhcmUu cmVnX3ZhbHVlOwotCi0JCWlmIChpID09IERTSV9MT0dJQ0FMX0NMT0NLX0xBTkUpCi0JCQl0aW1p bmctPmxhbmVbaV1bM10gPSBkZXNjLT5jbGtfdHJhaWwucmVnX3ZhbHVlOwotCQllbHNlCi0JCQl0 aW1pbmctPmxhbmVbaV1bM10gPSBkZXNjLT5oc190cmFpbC5yZWdfdmFsdWU7Ci0KLQkJaWYgKGkg PT0gRFNJX0xPR0lDQUxfQ0xPQ0tfTEFORSkKLQkJCXRpbWluZy0+bGFuZVtpXVs0XSA9IGRlc2Mt PmhzX3Jxc3RfY2xrLnJlZ192YWx1ZTsKLQkJZWxzZQotCQkJdGltaW5nLT5sYW5lW2ldWzRdID0g ZGVzYy0+aHNfcnFzdC5yZWdfdmFsdWU7Ci0KLQkJdGltaW5nLT5sYW5lW2ldWzVdID0gMHgzOwot CQl0aW1pbmctPmxhbmVbaV1bNl0gPSAweDQ7Ci0JCXRpbWluZy0+bGFuZVtpXVs3XSA9IDB4QTA7 Ci0JCXByX2RlYnVnKCJbJWRdWyVkICVkICVkICVkICVkXVxuIiwgaSwgdGltaW5nLT5sYW5lW2ld WzBdLAotCQkJCQkJICAgIHRpbWluZy0+bGFuZVtpXVsxXSwKLQkJCQkJCSAgICB0aW1pbmctPmxh bmVbaV1bMl0sCi0JCQkJCQkgICAgdGltaW5nLT5sYW5lW2ldWzNdLAotCQkJCQkJICAgIHRpbWlu Zy0+bGFuZVtpXVs0XSk7Ci0JfQotCXRpbWluZy0+Y291bnRfcGVyX2xhbmUgPSA4OwotfQotCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9waHlfdGltaW5n X3YzXzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdf djNfMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDZiM2NkLi4wMDAwMDAwCi0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcvZHNpX3BoeV90aW1pbmdfdjNfMC5j CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpICJkc2ktcGh5LXRpbWluZzoiIGZtdAot I2luY2x1ZGUgImRzaV9waHlfdGltaW5nX2NhbGMuaCIKLQotdm9pZCBkc2lfcGh5X2h3X3YzXzBf Z2V0X2RlZmF1bHRfcGh5X3BhcmFtcygKLQkJc3RydWN0IHBoeV9jbGtfcGFyYW1zICpwYXJhbXMp Ci17Ci0JcGFyYW1zLT5jbGtfcHJlcF9idWYgPSAwOwotCXBhcmFtcy0+Y2xrX3plcm9fYnVmID0g MDsKLQlwYXJhbXMtPmNsa190cmFpbF9idWYgPSAwOwotCXBhcmFtcy0+aHNfcHJlcF9idWYgPSAw OwotCXBhcmFtcy0+aHNfemVyb19idWYgPSAwOwotCXBhcmFtcy0+aHNfdHJhaWxfYnVmID0gMDsK LQlwYXJhbXMtPmhzX3Jxc3RfYnVmID0gMDsKLQlwYXJhbXMtPmhzX2V4aXRfYnVmID0gMDsKLX0K LQotaW50MzJfdCBkc2lfcGh5X2h3X3YzXzBfY2FsY19jbGtfemVybyhzNjQgcmVjX3RlbXAxLCBz NjQgbXVsdCkKLXsKLQlzNjQgcmVjX3RlbXAyLCByZWNfdGVtcDM7Ci0KLQlyZWNfdGVtcDIgPSAo cmVjX3RlbXAxIC0gbXVsdCk7Ci0JcmVjX3RlbXAzID0gcm91bmR1cChkaXZfczY0KHJlY190ZW1w MiwgOCksIG11bHQpOwotCXJldHVybiAoZGl2X3M2NChyZWNfdGVtcDMsIG11bHQpIC0gMSk7Ci19 Ci0KLWludDMyX3QgZHNpX3BoeV9od192M18wX2NhbGNfY2xrX3RyYWlsX3JlY19taW4oczY0IHRl bXBfbXVsLAotCQlzNjQgZnJhYywgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMSwgcmVjX3Rl bXAyLCByZWNfdGVtcDM7Ci0KLQlyZWNfdGVtcDEgPSB0ZW1wX211bCArIGZyYWM7Ci0JcmVjX3Rl bXAyID0gZGl2X3M2NChyZWNfdGVtcDEsIDgpOwotCXJlY190ZW1wMyA9IHJvdW5kdXAocmVjX3Rl bXAyLCBtdWx0KTsKLQlyZXR1cm4gKGRpdl9zNjQocmVjX3RlbXAzLCBtdWx0KSAtIDEpOwotfQot Ci1pbnQzMl90IGRzaV9waHlfaHdfdjNfMF9jYWxjX2Nsa190cmFpbF9yZWNfbWF4KHM2NCB0ZW1w MSwgczY0IG11bHQpCi17Ci0JczY0IHJlY190ZW1wMjsKLQotCXJlY190ZW1wMiA9IHRlbXAxIC8g ODsKLQlyZXR1cm4gKGRpdl9zNjQocmVjX3RlbXAyLCBtdWx0KSAtIDEpOwotfQotCi1pbnQzMl90 IGRzaV9waHlfaHdfdjNfMF9jYWxjX2hzX3plcm8oczY0IHRlbXAxLCBzNjQgbXVsdCkKLXsKLQlz NjQgcmVjX3RlbXAyLCByZWNfbWluOwotCi0JcmVjX3RlbXAyID0gcm91bmR1cCgodGVtcDEgLyA4 KSwgbXVsdCk7Ci0JcmVjX21pbiA9IHJlY190ZW1wMiAtICgxICogbXVsdCk7Ci0JcmV0dXJuIGRp dl9zNjQocmVjX21pbiwgbXVsdCk7Ci19Ci0KLXZvaWQgZHNpX3BoeV9od192M18wX2NhbGNfaHNf dHJhaWwoc3RydWN0IHBoeV9jbGtfcGFyYW1zICpjbGtfcGFyYW1zLAotCQkJc3RydWN0IHBoeV90 aW1pbmdfZGVzYyAqZGVzYykKLXsKLQlzNjQgcmVjX3RlbXAxOwotCXN0cnVjdCB0aW1pbmdfZW50 cnkgKnQgPSAmZGVzYy0+aHNfdHJhaWw7Ci0KLQl0LT5yZWNfbWluID0gRElWX1JPVU5EX1VQKAot CQkJKHQtPm1pcGlfbWluICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpLAotCQkJKDggKiBjbGtf cGFyYW1zLT50bHB4X251bWVyX25zKSkgLSAxOwotCi0JcmVjX3RlbXAxID0gKHQtPm1pcGlfbWF4 ICogY2xrX3BhcmFtcy0+Yml0Y2xrX21icHMpOwotCXQtPnJlY19tYXggPQotCQkgKGRpdl9zNjQo cmVjX3RlbXAxLCAoOCAqIGNsa19wYXJhbXMtPnRscHhfbnVtZXJfbnMpKSkgLSAxOwotfQotCi12 b2lkIGRzaV9waHlfaHdfdjNfMF91cGRhdGVfdGltaW5nX3BhcmFtcygKLQlzdHJ1Y3QgZHNpX3Bo eV9wZXJfbGFuZV9jZmdzICp0aW1pbmcsCi0Jc3RydWN0IHBoeV90aW1pbmdfZGVzYyAqZGVzYykK LXsKLQl0aW1pbmctPmxhbmVfdjNbMF0gPSAweDAwOwotCXRpbWluZy0+bGFuZV92M1sxXSA9IGRl c2MtPmNsa196ZXJvLnJlZ192YWx1ZTsKLQl0aW1pbmctPmxhbmVfdjNbMl0gPSBkZXNjLT5jbGtf cHJlcGFyZS5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzNdID0gZGVzYy0+Y2xrX3RyYWls LnJlZ192YWx1ZTsKLQl0aW1pbmctPmxhbmVfdjNbNF0gPSBkZXNjLT5oc19leGl0LnJlZ192YWx1 ZTsKLQl0aW1pbmctPmxhbmVfdjNbNV0gPSBkZXNjLT5oc196ZXJvLnJlZ192YWx1ZTsKLQl0aW1p bmctPmxhbmVfdjNbNl0gPSBkZXNjLT5oc19wcmVwYXJlLnJlZ192YWx1ZTsKLQl0aW1pbmctPmxh bmVfdjNbN10gPSBkZXNjLT5oc190cmFpbC5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzhd ID0gZGVzYy0+aHNfcnFzdC5yZWdfdmFsdWU7Ci0JdGltaW5nLT5sYW5lX3YzWzldID0gMHgwMzsK LQl0aW1pbmctPmxhbmVfdjNbMTBdID0gMHgwNDsKLQl0aW1pbmctPmxhbmVfdjNbMTFdID0gMHgw MDsKLQotCXByX2RlYnVnKCJbJWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbMF0sCi0J CXRpbWluZy0+bGFuZV92M1sxXSwgdGltaW5nLT5sYW5lX3YzWzJdLCB0aW1pbmctPmxhbmVfdjNb M10pOwotCXByX2RlYnVnKCJbJWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbNF0sCi0J CXRpbWluZy0+bGFuZV92M1s1XSwgdGltaW5nLT5sYW5lX3YzWzZdLCB0aW1pbmctPmxhbmVfdjNb N10pOwotCXByX2RlYnVnKCJbJWQgJWQgJWQgJWRdXG4iLCB0aW1pbmctPmxhbmVfdjNbOF0sCi0J CXRpbWluZy0+bGFuZV92M1s5XSwgdGltaW5nLT5sYW5lX3YzWzEwXSwgdGltaW5nLT5sYW5lX3Yz WzExXSk7Ci0JdGltaW5nLT5jb3VudF9wZXJfbGFuZSA9IDEyOwotfQotCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHNpLXN0YWdpbmcvZHNpX3B3ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBjYTJlYjNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHNpLXN0YWdpbmcv ZHNpX3B3ci5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln aHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJk c2lfcHdyLmgiCi0KLS8qCi0gKiBkc2lfcHdyX3BhcnNlX3N1cHBseV9ub2RlKCkgLSBwYXJzZSBw b3dlciBzdXBwbHkgbm9kZSBmcm9tIHJvb3QgZGV2aWNlIG5vZGUKLSAqLwotc3RhdGljIGludCBk c2lfcHdyX3BhcnNlX3N1cHBseV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCwKLQkJCQkg ICAgIHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MpCi17Ci0JaW50IHJjID0gMDsKLQlp bnQgaSA9IDA7Ci0JdTMyIHRtcCA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gTlVM TDsKLQotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUocm9vdCwgbm9kZSkgewotCQljb25zdCBjaGFy ICpzdCA9IE5VTEw7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhub2RlLCAicWNv bSxzdXBwbHktbmFtZSIsICZzdCk7Ci0JCWlmIChyYykgewotCQkJcHJfZXJyKCJmYWlsZWQgdG8g cmVhZCBuYW1lLCByYyA9ICVkXG4iLCByYyk7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0KLQkJc25w cmludGYocmVncy0+dnJlZ3NbaV0udnJlZ19uYW1lLAotCQkJIEFSUkFZX1NJWkUocmVncy0+dnJl Z3NbaV0udnJlZ19uYW1lKSwKLQkJCSAiJXMiLCBzdCk7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMihub2RlLCAicWNvbSxzdXBwbHktbWluLXZvbHRhZ2UiLAotCQkJCQkgICZ0bXApOwot CQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgbWluIHZvbHRhZ2UsIHJjID0g JWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0ubWluX3Zv bHRhZ2UgPSB0bXA7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicWNvbSxz dXBwbHktbWF4LXZvbHRhZ2UiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2Vy cigiZmFpbGVkIHRvIHJlYWQgbWF4IHZvbHRhZ2UsIHJjID0gJWRcbiIsIHJjKTsKLQkJCWdvdG8g ZXJyb3I7Ci0JCX0KLQkJcmVncy0+dnJlZ3NbaV0ubWF4X3ZvbHRhZ2UgPSB0bXA7Ci0KLQkJcmMg PSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicWNvbSxzdXBwbHktZW5hYmxlLWxvYWQiLAot CQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiZmFpbGVkIHRvIHJlYWQgZW5h YmxlIGxvYWQsIHJjID0gJWRcbiIsIHJjKTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJcmVncy0+ dnJlZ3NbaV0uZW5hYmxlX2xvYWQgPSB0bXA7Ci0KLQkJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3Uz Mihub2RlLCAicWNvbSxzdXBwbHktZGlzYWJsZS1sb2FkIiwKLQkJCQkJICAmdG1wKTsKLQkJaWYg KHJjKSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGRpc2FibGUgbG9hZCwgcmMgPSAlZFxu IiwgcmMpOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQlyZWdzLT52cmVnc1tpXS5kaXNhYmxlX2xv YWQgPSB0bXA7Ci0KLQkJLyogT3B0aW9uYWwgdmFsdWVzICovCi0JCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LXByZS1vbi1zbGVlcCIsCi0JCQkJCSAgJnRtcCk7 Ci0JCWlmIChyYykgewotCQkJcHJfZGVidWcoInByZS1vbi1zbGVlcCBub3Qgc3BlY2lmaWVkXG4i KTsKLQkJCXJjID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJlZ3MtPnZyZWdzW2ldLnByZV9vbl9zbGVl cCA9IHRtcDsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20s c3VwcGx5LXByZS1vZmYtc2xlZXAiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXBy X2RlYnVnKCJwcmUtb2ZmLXNsZWVwIG5vdCBzcGVjaWZpZWRcbiIpOwotCQkJcmMgPSAwOwotCQl9 IGVsc2UgewotCQkJcmVncy0+dnJlZ3NbaV0ucHJlX29mZl9zbGVlcCA9IHRtcDsKLQkJfQotCi0J CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LXBvc3Qtb24tc2xl ZXAiLAotCQkJCQkgICZ0bXApOwotCQlpZiAocmMpIHsKLQkJCXByX2RlYnVnKCJwb3N0LW9uLXNs ZWVwIG5vdCBzcGVjaWZpZWRcbiIpOwotCQkJcmMgPSAwOwotCQl9IGVsc2UgewotCQkJcmVncy0+ dnJlZ3NbaV0ucG9zdF9vbl9zbGVlcCA9IHRtcDsKLQkJfQotCi0JCXJjID0gb2ZfcHJvcGVydHlf cmVhZF91MzIobm9kZSwgInFjb20sc3VwcGx5LXBvc3Qtb2ZmLXNsZWVwIiwKLQkJCQkJICAmdG1w KTsKLQkJaWYgKHJjKSB7Ci0JCQlwcl9kZWJ1ZygicG9zdC1vZmYtc2xlZXAgbm90IHNwZWNpZmll ZFxuIik7Ci0JCQlyYyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlyZWdzLT52cmVnc1tpXS5wb3N0X29m Zl9zbGVlcCA9IHRtcDsKLQkJfQotCi0JCSsraTsKLQkJcHJfZGVidWcoIlslc10gbWludj0lZCBt YXh2PSVkLCBlbl9sb2FkPSVkLCBkaXNfbG9hZD0lZFxuIiwKLQkJCSByZWdzLT52cmVnc1tpXS52 cmVnX25hbWUsCi0JCQkgcmVncy0+dnJlZ3NbaV0ubWluX3ZvbHRhZ2UsCi0JCQkgcmVncy0+dnJl Z3NbaV0ubWF4X3ZvbHRhZ2UsCi0JCQkgcmVncy0+dnJlZ3NbaV0uZW5hYmxlX2xvYWQsCi0JCQkg cmVncy0+dnJlZ3NbaV0uZGlzYWJsZV9sb2FkKTsKLQl9Ci0KLWVycm9yOgotCXJldHVybiByYzsK LX0KLQotLyoqCi0gKiBkc2lfcHdyX2VuYWJsZV92cmVncygpIC0gZW5hYmxlL2Rpc2FibGUgcmVn dWxhdG9ycwotICovCi1zdGF0aWMgaW50IGRzaV9wd3JfZW5hYmxlX3ZyZWdzKHN0cnVjdCBkc2lf cmVndWxhdG9yX2luZm8gKnJlZ3MsIGJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDAsIGkgPSAw OwotCXN0cnVjdCBkc2lfdnJlZyAqdnJlZzsKLQlpbnQgbnVtX29mX3YgPSAwOwotCi0JaWYgKGVu YWJsZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+Y291bnQ7IGkrKykgewotCQkJdnJlZyA9 ICZyZWdzLT52cmVnc1tpXTsKLQkJCWlmICh2cmVnLT5wcmVfb25fc2xlZXApCi0JCQkJbXNsZWVw KHZyZWctPnByZV9vbl9zbGVlcCk7Ci0KLQkJCXJjID0gcmVndWxhdG9yX3NldF9sb2FkKHZyZWct PnZyZWcsCi0JCQkJCQl2cmVnLT5lbmFibGVfbG9hZCk7Ci0JCQlpZiAocmMgPCAwKSB7Ci0JCQkJ cHJfZXJyKCJTZXR0aW5nIG9wdGltdW0gbW9kZSBmYWlsZWQgZm9yICVzXG4iLAotCQkJCSAgICAg ICB2cmVnLT52cmVnX25hbWUpOwotCQkJCWdvdG8gZXJyb3I7Ci0JCQl9Ci0JCQludW1fb2ZfdiA9 IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyh2cmVnLT52cmVnKTsKLQkJCWlmIChudW1fb2ZfdiA+ IDApIHsKLQkJCQlyYyA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZSh2cmVnLT52cmVnLAotCQkJCQkJ CSAgIHZyZWctPm1pbl92b2x0YWdlLAotCQkJCQkJCSAgIHZyZWctPm1heF92b2x0YWdlKTsKLQkJ CQlpZiAocmMpIHsKLQkJCQkJcHJfZXJyKCJTZXQgdm9sdGFnZSglcykgZmFpbCwgcmM9JWRcbiIs Ci0JCQkJCQkgdnJlZy0+dnJlZ19uYW1lLCByYyk7Ci0JCQkJCWdvdG8gZXJyb3JfZGlzYWJsZV9v cHRfbW9kZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXJjID0gcmVndWxhdG9yX2VuYWJsZSh2cmVnLT52 cmVnKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiZW5hYmxlIGZhaWxlZCBmb3IgJXMsIHJj PSVkXG4iLAotCQkJCSAgICAgICB2cmVnLT52cmVnX25hbWUsIHJjKTsKLQkJCQlnb3RvIGVycm9y X2Rpc2FibGVfdm9sdGFnZTsKLQkJCX0KLQotCQkJaWYgKHZyZWctPnBvc3Rfb25fc2xlZXApCi0J CQkJbXNsZWVwKHZyZWctPnBvc3Rfb25fc2xlZXApOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChp ID0gKHJlZ3MtPmNvdW50IC0gMSk7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAocmVncy0+dnJlZ3Nb aV0ucHJlX29mZl9zbGVlcCkKLQkJCQltc2xlZXAocmVncy0+dnJlZ3NbaV0ucHJlX29mZl9zbGVl cCk7Ci0KLQkJCSh2b2lkKXJlZ3VsYXRvcl9zZXRfbG9hZChyZWdzLT52cmVnc1tpXS52cmVnLAot CQkJCQkJcmVncy0+dnJlZ3NbaV0uZGlzYWJsZV9sb2FkKTsKLQkJCSh2b2lkKXJlZ3VsYXRvcl9k aXNhYmxlKHJlZ3MtPnZyZWdzW2ldLnZyZWcpOwotCi0JCQlpZiAocmVncy0+dnJlZ3NbaV0ucG9z dF9vZmZfc2xlZXApCi0JCQkJbXNsZWVwKHJlZ3MtPnZyZWdzW2ldLnBvc3Rfb2ZmX3NsZWVwKTsK LQkJfQotCX0KLQotCXJldHVybiAwOwotZXJyb3JfZGlzYWJsZV9vcHRfbW9kZToKLQkodm9pZCly ZWd1bGF0b3Jfc2V0X2xvYWQocmVncy0+dnJlZ3NbaV0udnJlZywKLQkJCQkgcmVncy0+dnJlZ3Nb aV0uZGlzYWJsZV9sb2FkKTsKLQotZXJyb3JfZGlzYWJsZV92b2x0YWdlOgotCWlmIChudW1fb2Zf diA+IDApCi0JCSh2b2lkKXJlZ3VsYXRvcl9zZXRfdm9sdGFnZShyZWdzLT52cmVnc1tpXS52cmVn LAotCQkJCQkgICAgMCwgcmVncy0+dnJlZ3NbaV0ubWF4X3ZvbHRhZ2UpOwotZXJyb3I6Ci0JZm9y IChpLS07IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChyZWdzLT52cmVnc1tpXS5wcmVfb2ZmX3NsZWVw KQotCQkJbXNsZWVwKHJlZ3MtPnZyZWdzW2ldLnByZV9vZmZfc2xlZXApOwotCi0JCSh2b2lkKXJl Z3VsYXRvcl9zZXRfbG9hZChyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkgcmVncy0+dnJlZ3Nb aV0uZGlzYWJsZV9sb2FkKTsKLQotCQludW1fb2ZfdiA9IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdl cyhyZWdzLT52cmVnc1tpXS52cmVnKTsKLQkJaWYgKG51bV9vZl92ID4gMCkKLQkJCSh2b2lkKXJl Z3VsYXRvcl9zZXRfdm9sdGFnZShyZWdzLT52cmVnc1tpXS52cmVnLAotCQkJCQkgICAgMCwgcmVn cy0+dnJlZ3NbaV0ubWF4X3ZvbHRhZ2UpOwotCi0JCSh2b2lkKXJlZ3VsYXRvcl9kaXNhYmxlKHJl Z3MtPnZyZWdzW2ldLnZyZWcpOwotCi0JCWlmIChyZWdzLT52cmVnc1tpXS5wb3N0X29mZl9zbGVl cCkKLQkJCW1zbGVlcChyZWdzLT52cmVnc1tpXS5wb3N0X29mZl9zbGVlcCk7Ci0JfQotCi0JcmV0 dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9wd3Jfb2ZfZ2V0X3ZyZWdfZGF0YSAtIFBhcnNlIHJl Z3VsYXRvciBzdXBwbHkgaW5mb3JtYXRpb24KLSAqIEBvZl9ub2RlOiAgICAgICAgRGV2aWNlIG9m IG5vZGUgdG8gcGFyc2UgZm9yIHN1cHBseSBpbmZvcm1hdGlvbi4KLSAqIEByZWdzOiAgICAgICAg ICAgUG9pbnRlciB3aGVyZSByZWd1bGF0b3IgaW5mb3JtYXRpb24gd2lsbCBiZSBjb3BpZWQgdG8u Ci0gKiBAc3VwcGx5X25hbWU6ICAgIE5hbWUgb2YgdGhlIHN1cHBseSBub2RlLgotICoKLSAqIHJl dHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUgb3IgMCBmb3Igc3VjY2Vzcy4KLSAq LwotaW50IGRzaV9wd3Jfb2ZfZ2V0X3ZyZWdfZGF0YShzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25v ZGUsCi0JCQkJIHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsCi0JCQkJIGNoYXIgKnN1 cHBseV9uYW1lKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpzdXBwbHlf cm9vdF9ub2RlID0gTlVMTDsKLQotCWlmICghb2Zfbm9kZSB8fCAhcmVncykgewotCQlwcl9lcnIo IkJhZCBwYXJhbXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZWdzLT5jb3VudCA9 IDA7Ci0Jc3VwcGx5X3Jvb3Rfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUsIHN1 cHBseV9uYW1lKTsKLQlpZiAoIXN1cHBseV9yb290X25vZGUpIHsKLQkJc3VwcGx5X3Jvb3Rfbm9k ZSA9IG9mX3BhcnNlX3BoYW5kbGUob2Zfbm9kZSwgc3VwcGx5X25hbWUsIDApOwotCQlpZiAoIXN1 cHBseV9yb290X25vZGUpIHsKLQkJCXByX2RlYnVnKCJObyBzdXBwbHkgZW50cnkgcHJlc2VudCBm b3IgJXNcbiIsCi0JCQkJCXN1cHBseV9uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0J fQotCi0JcmVncy0+Y291bnQgPSBvZl9nZXRfYXZhaWxhYmxlX2NoaWxkX2NvdW50KHN1cHBseV9y b290X25vZGUpOwotCWlmIChyZWdzLT5jb3VudCA9PSAwKSB7Ci0JCXByX2VycigiTm8gdnJlZ3Mg ZGVmaW5lZCBmb3IgJXNcbiIsIHN1cHBseV9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JcmVncy0+dnJlZ3MgPSBrY2FsbG9jKHJlZ3MtPmNvdW50LCBzaXplb2YoKnJlZ3MtPnZyZWdz KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWdzLT52cmVncykgewotCQlyZWdzLT5jb3VudCA9IDA7 Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJjID0gZHNpX3B3cl9wYXJzZV9zdXBwbHlfbm9k ZShzdXBwbHlfcm9vdF9ub2RlLCByZWdzKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQg dG8gcGFyc2Ugc3VwcGx5IG5vZGUgZm9yICVzLCByYyA9ICVkXG4iLAotCQkJc3VwcGx5X25hbWUs IHJjKTsKLQotCQlrZnJlZShyZWdzLT52cmVncyk7Ci0JCXJlZ3MtPnZyZWdzID0gTlVMTDsKLQkJ cmVncy0+Y291bnQgPSAwOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBkc2lfcHdy X2dldF9kdF92cmVnX2RhdGEgLSBwYXJzZSByZWd1bGF0b3Igc3VwcGx5IGluZm9ybWF0aW9uCi0g KiBAZGV2OiAgICAgICAgICAgIERldmljZSB3aG9zZSBvZl9ub2RlIG5lZWRzIHRvIGJlIHBhcnNl ZC4KLSAqIEByZWdzOiAgICAgICAgICAgUG9pbnRlciB3aGVyZSByZWd1bGF0b3IgaW5mb3JtYXRp b24gd2lsbCBiZSBjb3BpZWQgdG8uCi0gKiBAc3VwcGx5X25hbWU6ICAgIE5hbWUgb2YgdGhlIHN1 cHBseSBub2RlLgotICoKLSAqIHJldHVybjogZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUg b3IgMCBmb3Igc3VjY2Vzcy4KLSAqLwotaW50IGRzaV9wd3JfZ2V0X2R0X3ZyZWdfZGF0YShzdHJ1 Y3QgZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsCi0J CQkJIGNoYXIgKnN1cHBseV9uYW1lKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGRldmljZV9u b2RlICpvZl9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9ub2RlID0g TlVMTDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnN1cHBseV9yb290X25vZGUgPSBOVUxMOwotCi0J aWYgKCFkZXYgfHwgIXJlZ3MpIHsKLQkJcHJfZXJyKCJCYWQgcGFyYW1zXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0Jb2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKLQlyZWdzLT5jb3VudCA9 IDA7Ci0Jc3VwcGx5X3Jvb3Rfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG9mX25vZGUsIHN1 cHBseV9uYW1lKTsKLQlpZiAoIXN1cHBseV9yb290X25vZGUpIHsKLQkJc3VwcGx5X3Jvb3Rfbm9k ZSA9IG9mX3BhcnNlX3BoYW5kbGUob2Zfbm9kZSwgc3VwcGx5X25hbWUsIDApOwotCQlpZiAoIXN1 cHBseV9yb290X25vZGUpIHsKLQkJCXByX2RlYnVnKCJObyBzdXBwbHkgZW50cnkgcHJlc2VudCBm b3IgJXNcbiIsCi0JCQkJCXN1cHBseV9uYW1lKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0J fQotCi0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShzdXBwbHlfcm9vdF9ub2RlLCBzdXBwbHlfbm9k ZSkKLQkJcmVncy0+Y291bnQrKzsKLQotCWlmIChyZWdzLT5jb3VudCA9PSAwKSB7Ci0JCXByX2Vy cigiTm8gdnJlZ3MgZGVmaW5lZCBmb3IgJXNcbiIsIHN1cHBseV9uYW1lKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JcmVncy0+dnJlZ3MgPSBkZXZtX2tjYWxsb2MoZGV2LCByZWdzLT5jb3Vu dCwgc2l6ZW9mKCpyZWdzLT52cmVncyksCi0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZWdz LT52cmVncykgewotCQlyZWdzLT5jb3VudCA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQot CXJjID0gZHNpX3B3cl9wYXJzZV9zdXBwbHlfbm9kZShzdXBwbHlfcm9vdF9ub2RlLCByZWdzKTsK LQlpZiAocmMpIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gcGFyc2Ugc3VwcGx5IG5vZGUgZm9yICVz LCByYyA9ICVkXG4iLAotCQkgICAgICAgc3VwcGx5X25hbWUsIHJjKTsKLQkJZGV2bV9rZnJlZShk ZXYsIHJlZ3MtPnZyZWdzKTsKLQkJcmVncy0+dnJlZ3MgPSBOVUxMOwotCQlyZWdzLT5jb3VudCA9 IDA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRzaV9wd3JfZW5hYmxlX3JlZ3Vs YXRvcigpIC0gZW5hYmxlIGEgc2V0IG9mIHJlZ3VsYXRvcnMKLSAqIEByZWdzOiAgICAgICBQb2lu dGVyIHRvIHNldCBvZiByZWd1bGF0b3JzIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICogQGVuYWJs ZTogICAgIEVuYWJsZS9EaXNhYmxlIHJlZ3VsYXRvcnMuCi0gKgotICogcmV0dXJuOiBlcnJvciBj b2RlIGluIGNhc2Ugb2YgZmFpbHVyZSBvciAwIGZvciBzdWNjZXNzLgotICovCi1pbnQgZHNpX3B3 cl9lbmFibGVfcmVndWxhdG9yKHN0cnVjdCBkc2lfcmVndWxhdG9yX2luZm8gKnJlZ3MsIGJvb2wg ZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWlmIChyZWdzLT5y ZWZjb3VudCA9PSAwKSB7Ci0JCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3ZyZWdzKHJlZ3MsIHRydWUp OwotCQkJaWYgKHJjKQotCQkJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXG4i KTsKLQkJfQotCQlyZWdzLT5yZWZjb3VudCsrOwotCX0gZWxzZSB7Ci0JCWlmIChyZWdzLT5yZWZj b3VudCA9PSAwKSB7Ci0JCQlwcl9lcnIoIlVuYmFsYW5jZWQgcmVndWxhdG9yIG9mZlxuIik7Ci0J CX0gZWxzZSB7Ci0JCQlyZWdzLT5yZWZjb3VudC0tOwotCQkJaWYgKHJlZ3MtPnJlZmNvdW50ID09 IDApIHsKLQkJCQlyYyA9IGRzaV9wd3JfZW5hYmxlX3ZyZWdzKHJlZ3MsIGZhbHNlKTsKLQkJCQlp ZiAocmMpCi0JCQkJCXByX2VycigiZmFpbGVkIHRvIGRpc2FibGUgdnJlZ3NcbiIpOwotCQkJfQot CQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9kc2ktc3RhZ2luZy9kc2lfcHdyLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5n L2RzaV9wd3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVlNWM2Ni4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS1zdGFnaW5nL2RzaV9wd3IuaAorKysgL2Rl di9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq Ci0gKi8KLQotI2lmbmRlZiBfRFNJX1BXUl9IXwotI2RlZmluZSBfRFNJX1BXUl9IXwotCi0jaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29u c3VtZXIuaD4KLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3ZyZWcgLSByZWd1bGF0b3IgaW5mb3JtYXRp b24gZm9yIERTSSByZWd1bGF0b3JzCi0gKiBAdnJlZzogICAgICAgICAgICBIYW5kbGUgdG8gdGhl IHJlZ3VsYXRvci4KLSAqIEB2cmVnX25hbWU6ICAgICAgIFJlZ3VsYXRvciBuYW1lLgotICogQG1p bl92b2x0YWdlOiAgICAgTWluaW11bSB2b2x0YWdlIGluIHVWLgotICogQG1heF92b2x0YWdlOiAg ICAgTWF4aW11bSB2b2x0YWdlIGluIHVWLgotICogQGVuYWJsZV9sb2FkOiAgICAgTG9hZCwgaW4g dUEsIHdoZW4gZW5hYmxlZC4KLSAqIEBkaXNhYmxlX2xvYWQ6ICAgIExvYWQsIGluIHVBLCB3aGVu IGRpc2FibGVkLgotICogQHByZV9vbl9zbGVlcDogICAgU2xlZXAsIGluIG1zLCBiZWZvcmUgZW5h YmxpbmcgdGhlIHJlZ3VsYXRvci4KLSAqIEBwb3N0X29uX3NsZWVwOiAgIFNsZWVwLCBpbiBtcywg YWZ0ZXIgZW5hYmxpbmcgdGhlIHJlZ3VsYXRvci4KLSAqIEBwcmVfb2ZmX3NsZWVwOiAgIFNsZWVw LCBpbiBtcywgYmVmb3JlIGRpc2FibGluZyB0aGUgcmVndWxhdG9yLgotICogQHBvc3Rfb2ZmX3Ns ZWVwOiAgU2xlZXAsIGluIG1zLCBhZnRlciBkaXNhYmxpbmcgdGhlIHJlZ3VsYXRvci4KLSAqLwot c3RydWN0IGRzaV92cmVnIHsKLQlzdHJ1Y3QgcmVndWxhdG9yICp2cmVnOwotCWNoYXIgdnJlZ19u YW1lWzMyXTsKLQl1MzIgbWluX3ZvbHRhZ2U7Ci0JdTMyIG1heF92b2x0YWdlOwotCXUzMiBlbmFi bGVfbG9hZDsKLQl1MzIgZGlzYWJsZV9sb2FkOwotCXUzMiBwcmVfb25fc2xlZXA7Ci0JdTMyIHBv c3Rfb25fc2xlZXA7Ci0JdTMyIHByZV9vZmZfc2xlZXA7Ci0JdTMyIHBvc3Rfb2ZmX3NsZWVwOwot fTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvIC0gc2V0IG9mIHZyZWdzIHRo YXQgYXJlIHR1cm5lZCBvbi9vZmYgdG9nZXRoZXIuCi0gKiBAdnJlZ3M6ICAgICAgIEFycmF5IG9m IGRzaV92cmVnIHN0cnVjdHVyZXMuCi0gKiBAY291bnQ6ICAgICAgIE51bWJlciBvZiB2cmVncy4K LSAqIEByZWZjb3VudDogICAgUmVmZXJlbmNlIGNvdW50aW5nIGZvciBlbmFibGluZy4KLSAqLwot c3RydWN0IGRzaV9yZWd1bGF0b3JfaW5mbyB7Ci0Jc3RydWN0IGRzaV92cmVnICp2cmVnczsKLQl1 MzIgY291bnQ7Ci0JdTMyIHJlZmNvdW50OwotfTsKLQotLyoqCi0gKiBkc2lfcHdyX29mX2dldF92 cmVnX2RhdGEgLSBwYXJzZSByZWd1bGF0b3Igc3VwcGx5IGluZm9ybWF0aW9uCi0gKiBAb2Zfbm9k ZTogICAgICAgIERldmljZSBvZiBub2RlIHRvIHBhcnNlIGZvciBzdXBwbHkgaW5mb3JtYXRpb24u Ci0gKiBAcmVnczogICAgICAgICAgIFBvaW50ZXIgd2hlcmUgcmVndWxhdG9yIGluZm9ybWF0aW9u IHdpbGwgYmUgY29waWVkIHRvLgotICogQHN1cHBseV9uYW1lOiAgICBOYW1lIG9mIHRoZSBzdXBw bHkgbm9kZS4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9y IDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfcHdyX29mX2dldF92cmVnX2RhdGEoc3RydWN0 IGRldmljZV9ub2RlICpvZl9ub2RlLAotCQkJCSBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpy ZWdzLAotCQkJCSBjaGFyICpzdXBwbHlfbmFtZSk7Ci0KLS8qKgotICogZHNpX3B3cl9nZXRfZHRf dnJlZ19kYXRhIC0gcGFyc2UgcmVndWxhdG9yIHN1cHBseSBpbmZvcm1hdGlvbgotICogQGRldjog ICAgICAgICAgICBEZXZpY2Ugd2hvc2Ugb2Zfbm9kZSBuZWVkcyB0byBiZSBwYXJzZWQuCi0gKiBA cmVnczogICAgICAgICAgIFBvaW50ZXIgd2hlcmUgcmVndWxhdG9yIGluZm9ybWF0aW9uIHdpbGwg YmUgY29waWVkIHRvLgotICogQHN1cHBseV9uYW1lOiAgICBOYW1lIG9mIHRoZSBzdXBwbHkgbm9k ZS4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlIG9yIDAgZm9y IHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfcHdyX2dldF9kdF92cmVnX2RhdGEoc3RydWN0IGRldmlj ZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZHNpX3JlZ3VsYXRvcl9pbmZvICpyZWdzLAotCQkJCSBjaGFy ICpzdXBwbHlfbmFtZSk7Ci0KLS8qKgotICogZHNpX3B3cl9lbmFibGVfcmVndWxhdG9yKCkgLSBl bmFibGUgYSBzZXQgb2YgcmVndWxhdG9ycwotICogQHJlZ3M6ICAgICAgIFBvaW50ZXIgdG8gc2V0 IG9mIHJlZ3VsYXRvcnMgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gKiBAZW5hYmxlOiAgICAgRW5h YmxlL0Rpc2FibGUgcmVndWxhdG9ycy4KLSAqCi0gKiByZXR1cm46IGVycm9yIGNvZGUgaW4gY2Fz ZSBvZiBmYWlsdXJlIG9yIDAgZm9yIHN1Y2Nlc3MuCi0gKi8KLWludCBkc2lfcHdyX2VuYWJsZV9y ZWd1bGF0b3Ioc3RydWN0IGRzaV9yZWd1bGF0b3JfaW5mbyAqcmVncywgYm9vbCBlbmFibGUpOwot I2VuZGlmIC8qIF9EU0lfUFdSX0hfICovCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZv dW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0Bs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9mcmVlZHJlbm8K