From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH] drm/vmwgfx: Fix compat shader namespace Date: Fri, 4 Jul 2014 12:14:40 +0200 Message-ID: <1404468880-18740-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp-outbound-2.vmware.com (smtp-outbound-2.vmware.com [208.91.2.13]) by gabe.freedesktop.org (Postfix) with ESMTP id 931316E2C5 for ; Fri, 4 Jul 2014 03:15:13 -0700 (PDT) Received: from sc9-mailhost1.vmware.com (sc9-mailhost1.vmware.com [10.113.161.71]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id 8F38828529 for ; Fri, 4 Jul 2014 03:15:10 -0700 (PDT) Received: from zcs-prod-mta-2.vmware.com (zcs-prod-mta-2.vmware.com [10.113.163.64]) by sc9-mailhost1.vmware.com (Postfix) with ESMTP id 8E0DF1962F for ; Fri, 4 Jul 2014 03:15:10 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Thomas Hellstrom List-Id: dri-devel@lists.freedesktop.org Q29udHJhcnkgdG8gdGhlIGhvc3QtYmFja2VkIHNoYWRlciBpbnRlcmZhY2UgdGhhdCBoYXMgYSBw ZXItY29udGV4dApuYW1lLXNwYWNlIGZvciBzaGFkZXJzLCB0aGUgY29tcGF0IHNoYWRlciBuYW1l c3BhY2Ugd2FzIHBlciBjbGllbnQKKG9yIHJhdGhlciwgcGVyIGZpbGUpLiBGaXggdGhpcyBzbyB0 aGF0IHRoZSBjb21wYXQgc2hhZGVyIG5hbWVzcGFjZSBpcyBwZXIKY29udGV4dCwgYW5kIGF0IHRo ZSBzYW1lIHRpbWUsIG1ha2UgY29tbWFuZCBidWZmZXIgbWFuYWdlZCBjb250ZXh0IHJlc291cmNl Cm1hbmFnZW1lbnQgZ2VuZXJpYy4KClNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryb20gPHRo ZWxsc3Ryb21Adm13YXJlLmNvbT4KUmV2aWV3ZWQtYnk6IEpha29iIEJvcm5lY3JhbnR6IDxqYWtv YkB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUgICAgICAg ICAgICB8ICAgMyArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmX3Jlcy5j IHwgMzQxICsrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2NvbnRleHQuYyAgICB8ICAzOCArKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13 Z2Z4X2Rydi5jICAgICAgICB8ICAgNyAtCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9k cnYuaCAgICAgICAgfCAgNzQgKysrKy0tCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9l eGVjYnVmLmMgICAgfCAyMjcgKysrKysrKysrLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X3NoYWRlci5jICAgICB8IDM5NiArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0t LQogNyBmaWxlcyBjaGFuZ2VkLCA2NzMgaW5zZXJ0aW9ucygrKSwgNDEzIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NtZGJ1Zl9y ZXMuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlCmluZGV4IDQ1OGNkZjYuLmNlMGFiOTUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAgdm13Z2Z4LXkgOj0gdm13Z2Z4X2V4 ZWNidWYubyB2bXdnZnhfZ21yLm8gdm13Z2Z4X2ttcy5vIHZtd2dmeF9kcnYubyBcCiAJICAgIHZt d2dmeF9maWZvLm8gdm13Z2Z4X2lycS5vIHZtd2dmeF9sZHUubyB2bXdnZnhfdHRtX2dsdWUubyBc CiAJICAgIHZtd2dmeF9vdmVybGF5Lm8gdm13Z2Z4X21hcmtlci5vIHZtd2dmeF9nbXJpZF9tYW5h Z2VyLm8gXAogCSAgICB2bXdnZnhfZmVuY2UubyB2bXdnZnhfZG1hYnVmLm8gdm13Z2Z4X3Njcm4u byB2bXdnZnhfY29udGV4dC5vIFwKLQkgICAgdm13Z2Z4X3N1cmZhY2UubyB2bXdnZnhfcHJpbWUu byB2bXdnZnhfbW9iLm8gdm13Z2Z4X3NoYWRlci5vCisJICAgIHZtd2dmeF9zdXJmYWNlLm8gdm13 Z2Z4X3ByaW1lLm8gdm13Z2Z4X21vYi5vIHZtd2dmeF9zaGFkZXIubyBcCisJICAgIHZtd2dmeF9j bWRidWZfcmVzLm8gXAogCiBvYmotJChDT05GSUdfRFJNX1ZNV0dGWCkgOj0gdm13Z2Z4Lm8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NtZGJ1Zl9yZXMuYyBiL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NtZGJ1Zl9yZXMuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5iZmViNGIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmX3Jlcy5jCkBAIC0wLDAgKzEsMzQxIEBACisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBWTXdhcmUsIEluYy4sIFBh bG8gQWx0bywgQ0EuLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3Ry aWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQ UExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhF UldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgInZtd2dmeF9kcnYuaCIKKworI2Rl ZmluZSBWTVdfQ01EQlVGX1JFU19NQU5fSFRfT1JERVIgMTIKKworZW51bSB2bXdfY21kYnVmX3Jl c19zdGF0ZSB7CisJVk1XX0NNREJVRl9SRVNfQ09NTUlURUQsCisJVk1XX0NNREJVRl9SRVNfQURE LAorCVZNV19DTURCVUZfUkVTX0RFTAorfTsKKworLyoqCisgKiBzdHJ1Y3Qgdm13X2NtZGJ1Zl9y ZXMgLSBDb21tYW5kIGJ1ZmZlciBtYW5hZ2VkIHJlc291cmNlIGVudHJ5LgorICoKKyAqIEByZXM6 IFJlZmNvdW50ZWQgcG9pbnRlciB0byBhIHN0cnVjdCB2bXdfcmVzb3VyY2UuCisgKiBAaGFzaDog SGFzaCBlbnRyeSBmb3IgdGhlIG1hbmFnZXIgaGFzaCB0YWJsZS4KKyAqIEBoZWFkOiBMaXN0IGhl YWQgdXNlZCBlaXRoZXIgYnkgdGhlIHN0YWdpbmcgbGlzdCBvciB0aGUgbWFuYWdlciBsaXN0Cisg KiBvZiBjb21taXRlZCByZXNvdXJjZXMuCisgKiBAc3RhdGU6IFN0YWdpbmcgc3RhdGUgb2YgdGhp cyByZXNvdXJjZSBlbnRyeS4KKyAqIEBtYW46IFBvaW50ZXIgdG8gYSByZXNvdXJjZSBtYW5hZ2Vy IGZvciB0aGlzIGVudHJ5LgorICovCitzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXMgeworCXN0cnVjdCB2 bXdfcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSBoYXNoOworCXN0cnVjdCBs aXN0X2hlYWQgaGVhZDsKKwllbnVtIHZtd19jbWRidWZfcmVzX3N0YXRlIHN0YXRlOworCXN0cnVj dCB2bXdfY21kYnVmX3Jlc19tYW5hZ2VyICptYW47Cit9OworCisvKioKKyAqIHN0cnVjdCB2bXdf Y21kYnVmX3Jlc19tYW5hZ2VyIC0gQ29tbWFuZCBidWZmZXIgcmVzb3VyY2UgbWFuYWdlci4KKyAq CisgKiBAcmVzb3VyY2VzOiBIYXNoIHRhYmxlIGNvbnRhaW5pbmcgc3RhZ2VkIGFuZCBjb21taXRl ZCBjb21tYW5kIGJ1ZmZlcgorICogcmVzb3VyY2VzCisgKiBAbGlzdDogTGlzdCBvZiBjb21taXRl ZCBjb21tYW5kIGJ1ZmZlciByZXNvdXJjZXMuCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gYSBk ZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKgorICogQHJlc291cmNlcyBhbmQgQGxpc3QgYXJl IHByb3RlY3RlZCBieSB0aGUgY21kYnVmIG11dGV4IGZvciBub3cuCisgKi8KK3N0cnVjdCB2bXdf Y21kYnVmX3Jlc19tYW5hZ2VyIHsKKwlzdHJ1Y3QgZHJtX29wZW5faGFzaCByZXNvdXJjZXM7CisJ c3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7Cit9 OworCisKKy8qKgorICogdm13X2NtZGJ1Zl9yZXNfbG9va3VwIC0gTG9vayB1cCBhIGNvbW1hbmQg YnVmZmVyIHJlc291cmNlCisgKgorICogQG1hbjogUG9pbnRlciB0byB0aGUgY29tbWFuZCBidWZm ZXIgcmVzb3VyY2UgbWFuYWdlcgorICogQHJlc291cmNlX3R5cGU6IFRoZSByZXNvdXJjZSB0eXBl LCB0aGF0IGNvbWJpbmVkIHdpdGggdGhlIHVzZXIga2V5CisgKiBpZGVudGlmaWVzIHRoZSByZXNv dXJjZS4KKyAqIEB1c2VyX2tleTogVGhlIHVzZXIga2V5LgorICoKKyAqIFJldHVybnMgYSB2YWxp ZCByZWZjb3VudGVkIHN0cnVjdCB2bXdfcmVzb3VyY2UgcG9pbnRlciBvbiBzdWNjZXNzLAorICog YW4gZXJyb3IgcG9pbnRlciBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3Qgdm13X3Jlc291cmNlICoK K3Ztd19jbWRidWZfcmVzX2xvb2t1cChzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFu LAorCQkgICAgICBlbnVtIHZtd19jbWRidWZfcmVzX3R5cGUgcmVzX3R5cGUsCisJCSAgICAgIHUz MiB1c2VyX2tleSkKK3sKKwlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaDsKKwlpbnQgcmV0Owor CXVuc2lnbmVkIGxvbmcga2V5ID0gdXNlcl9rZXkgfCAocmVzX3R5cGUgPDwgMjQpOworCisJcmV0 ID0gZHJtX2h0X2ZpbmRfaXRlbSgmbWFuLT5yZXNvdXJjZXMsIGtleSwgJmhhc2gpOworCWlmICh1 bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlyZXR1cm4gdm13 X3Jlc291cmNlX3JlZmVyZW5jZQorCQkoZHJtX2hhc2hfZW50cnkoaGFzaCwgc3RydWN0IHZtd19j bWRidWZfcmVzLCBoYXNoKS0+cmVzKTsKK30KKworLyoqCisgKiB2bXdfY21kYnVmX3Jlc19mcmVl IC0gRnJlZSBhIGNvbW1hbmQgYnVmZmVyIHJlc291cmNlLgorICoKKyAqIEBtYW46IFBvaW50ZXIg dG8gdGhlIGNvbW1hbmQgYnVmZmVyIHJlc291cmNlIG1hbmFnZXIKKyAqIEBlbnRyeTogUG9pbnRl ciB0byBhIHN0cnVjdCB2bXdfY21kYnVmX3Jlcy4KKyAqCisgKiBGcmVlcyBhIHN0cnVjdCB2bXdf Y21kYnVmX3JlcyBlbnRyeSBhbmQgZHJvcHMgaXRzIHJlZmVyZW5jZSB0byB0aGUKKyAqIHN0cnVj dCB2bXdfcmVzb3VyY2UuCisgKi8KK3N0YXRpYyB2b2lkIHZtd19jbWRidWZfcmVzX2ZyZWUoc3Ry dWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwKKwkJCQlzdHJ1Y3Qgdm13X2NtZGJ1Zl9y ZXMgKmVudHJ5KQoreworCWxpc3RfZGVsKCZlbnRyeS0+aGVhZCk7CisJV0FSTl9PTihkcm1faHRf cmVtb3ZlX2l0ZW0oJm1hbi0+cmVzb3VyY2VzLCAmZW50cnktPmhhc2gpKTsKKwl2bXdfcmVzb3Vy Y2VfdW5yZWZlcmVuY2UoJmVudHJ5LT5yZXMpOworCWtmcmVlKGVudHJ5KTsKK30KKworLyoqCisg KiB2bXdfY21kYnVmX3Jlc19jb21taXQgLSBDb21taXQgYSBsaXN0IG9mIGNvbW1hbmQgYnVmZmVy IHJlc291cmNlIGFjdGlvbnMKKyAqCisgKiBAbGlzdDogQ2FsbGVyJ3MgbGlzdCBvZiBjb21tYW5k IGJ1ZmZlciByZXNvdXJjZSBhY3Rpb25zLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29tbWl0cyBh IGxpc3Qgb2YgY29tbWFuZCBidWZmZXIgcmVzb3VyY2UKKyAqIGFkZGl0aW9ucyBvciByZW1vdmFs cy4KKyAqIEl0IGlzIHR5cGljYWxseSBjYWxsZWQgd2hlbiB0aGUgZXhlY2J1ZiBpb2N0bCBjYWxs IHRyaWdnZXJpbmcgdGhlc2UKKyAqIGFjdGlvbnMgaGFzIGNvbW1pdGVkIHRoZSBmaWZvIGNvbnRl bnRzIHRvIHRoZSBkZXZpY2UuCisgKi8KK3ZvaWQgdm13X2NtZGJ1Zl9yZXNfY29tbWl0KHN0cnVj dCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHZtd19jbWRidWZfcmVzICplbnRyeSwgKm5l eHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGxpc3QsIGhlYWQp IHsKKwkJbGlzdF9kZWwoJmVudHJ5LT5oZWFkKTsKKwkJc3dpdGNoIChlbnRyeS0+c3RhdGUpIHsK KwkJY2FzZSBWTVdfQ01EQlVGX1JFU19BREQ6CisJCQllbnRyeS0+c3RhdGUgPSBWTVdfQ01EQlVG X1JFU19DT01NSVRFRDsKKwkJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5oZWFkLCAmZW50cnktPm1h bi0+bGlzdCk7CisJCQlicmVhazsKKwkJY2FzZSBWTVdfQ01EQlVGX1JFU19ERUw6CisJCQl2bXdf cmVzb3VyY2VfdW5yZWZlcmVuY2UoJmVudHJ5LT5yZXMpOworCQkJa2ZyZWUoZW50cnkpOworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisv KioKKyAqIHZtd19jbWRidWZfcmVzX3JldmVydCAtIFJldmVydCBhIGxpc3Qgb2YgY29tbWFuZCBi dWZmZXIgcmVzb3VyY2UgYWN0aW9ucworICoKKyAqIEBtYW46IFBvaW50ZXIgdG8gdGhlIGNvbW1h bmQgYnVmZmVyIHJlc291cmNlIG1hbmFnZXIKKyAqIEBsaXN0OiBDYWxsZXIncyBsaXN0IG9mIGNv bW1hbmQgYnVmZmVyIHJlc291cmNlIGFjdGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV2ZXJ0 cyBhIGxpc3Qgb2YgY29tbWFuZCBidWZmZXIgcmVzb3VyY2UKKyAqIGFkZGl0aW9ucyBvciByZW1v dmFscy4KKyAqIEl0IGlzIHR5cGljYWxseSBjYWxsZWQgd2hlbiB0aGUgZXhlY2J1ZiBpb2N0bCBj YWxsIHRyaWdnZXJpbmcgdGhlc2UKKyAqIGFjdGlvbnMgZmFpbGVkIGZvciBzb21lIHJlYXNvbiwg YW5kIHRoZSBjb21tYW5kIHN0cmVhbSB3YXMgbmV2ZXIKKyAqIHN1Ym1pdHRlZC4KKyAqLwordm9p ZCB2bXdfY21kYnVmX3Jlc19yZXZlcnQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1 Y3Qgdm13X2NtZGJ1Zl9yZXMgKmVudHJ5LCAqbmV4dDsKKwlpbnQgcmV0OworCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCBsaXN0LCBoZWFkKSB7CisJCXN3aXRjaCAoZW50 cnktPnN0YXRlKSB7CisJCWNhc2UgVk1XX0NNREJVRl9SRVNfQUREOgorCQkJdm13X2NtZGJ1Zl9y ZXNfZnJlZShlbnRyeS0+bWFuLCBlbnRyeSk7CisJCQlicmVhazsKKwkJY2FzZSBWTVdfQ01EQlVG X1JFU19ERUw6CisJCQlyZXQgPSBkcm1faHRfaW5zZXJ0X2l0ZW0oJmVudHJ5LT5tYW4tPnJlc291 cmNlcywKKwkJCQkJCSAmZW50cnktPmhhc2gpOworCQkJbGlzdF9kZWwoJmVudHJ5LT5oZWFkKTsK KwkJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5oZWFkLCAmZW50cnktPm1hbi0+bGlzdCk7CisJCQll bnRyeS0+c3RhdGUgPSBWTVdfQ01EQlVGX1JFU19DT01NSVRFRDsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKiB2bXdfY21k YnVmX3Jlc19hZGQgLSBTdGFnZSBhIGNvbW1hbmQgYnVmZmVyIG1hbmFnZWQgcmVzb3VyY2UgZm9y IGFkZGl0aW9uLgorICoKKyAqIEBtYW46IFBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgYnVmZmVyIHJl c291cmNlIG1hbmFnZXIuCisgKiBAcmVzX3R5cGU6IFRoZSByZXNvdXJjZSB0eXBlLgorICogQHVz ZXJfa2V5OiBUaGUgdXNlci1zcGFjZSBpZCBvZiB0aGUgcmVzb3VyY2UuCisgKiBAcmVzOiBWYWxp ZCAocmVmY291bnQgIT0gMCkgcG9pbnRlciB0byBhIHN0cnVjdCB2bXdfcmVzb3VyY2UuCisgKiBA bGlzdDogVGhlIHN0YWdpbmcgbGlzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBh IHN0cnVjdCB2bXdfY21kYnVmX3JlcyBlbnRyeSBhbmQgYWRkcyB0aGUKKyAqIHJlc291cmNlIHRv IHRoZSBoYXNoIHRhYmxlIG9mIHRoZSBtYW5hZ2VyIGlkZW50aWZpZWQgYnkgQG1hbi4gVGhlCisg KiBlbnRyeSBpcyB0aGVuIHB1dCBvbiB0aGUgc3RhZ2luZyBsaXN0IGlkZW50aWZpZWQgYnkgQGxp c3QuCisgKi8KK2ludCB2bXdfY21kYnVmX3Jlc19hZGQoc3RydWN0IHZtd19jbWRidWZfcmVzX21h bmFnZXIgKm1hbiwKKwkJICAgICAgIGVudW0gdm13X2NtZGJ1Zl9yZXNfdHlwZSByZXNfdHlwZSwK KwkJICAgICAgIHUzMiB1c2VyX2tleSwKKwkJICAgICAgIHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJl cywKKwkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHZtd19jbWRi dWZfcmVzICpjcmVzOworCWludCByZXQ7CisKKwljcmVzID0ga3phbGxvYyhzaXplb2YoKmNyZXMp LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoY3JlcyA9PSBOVUxMKSkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwljcmVzLT5oYXNoLmtleSA9IHVzZXJfa2V5IHwgKHJlc190eXBlIDw8IDI0KTsK KwlyZXQgPSBkcm1faHRfaW5zZXJ0X2l0ZW0oJm1hbi0+cmVzb3VyY2VzLCAmY3Jlcy0+aGFzaCk7 CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfaW52YWxpZF9rZXk7CisKKwlj cmVzLT5zdGF0ZSA9IFZNV19DTURCVUZfUkVTX0FERDsKKwljcmVzLT5yZXMgPSB2bXdfcmVzb3Vy Y2VfcmVmZXJlbmNlKHJlcyk7CisJY3Jlcy0+bWFuID0gbWFuOworCWxpc3RfYWRkX3RhaWwoJmNy ZXMtPmhlYWQsIGxpc3QpOworCitvdXRfaW52YWxpZF9rZXk6CisJcmV0dXJuIHJldDsKK30KKwor LyoqCisgKiB2bXdfY21kYnVmX3Jlc19yZW1vdmUgLSBTdGFnZSBhIGNvbW1hbmQgYnVmZmVyIG1h bmFnZWQgcmVzb3VyY2UgZm9yIHJlbW92YWwuCisgKgorICogQG1hbjogUG9pbnRlciB0byB0aGUg Y29tbWFuZCBidWZmZXIgcmVzb3VyY2UgbWFuYWdlci4KKyAqIEByZXNfdHlwZTogVGhlIHJlc291 cmNlIHR5cGUuCisgKiBAdXNlcl9rZXk6IFRoZSB1c2VyLXNwYWNlIGlkIG9mIHRoZSByZXNvdXJj ZS4KKyAqIEBsaXN0OiBUaGUgc3RhZ2luZyBsaXN0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9v a3MgdXAgdGhlIHN0cnVjdCB2bXdfY21kYnVmX3JlcyBlbnRyeSBmcm9tIHRoZSBtYW5hZ2VyCisg KiBoYXNoIHRhYmxlIGFuZCwgaWYgaXQgZXhpc3RzLCByZW1vdmVzIGl0LiBEZXBlbmRpbmcgb24g aXRzIGN1cnJlbnQgc3RhZ2luZworICogc3RhdGUgaXQgdGhlbiBlaXRoZXIgcmVtb3ZlcyB0aGUg ZW50cnkgZnJvbSB0aGUgc3RhZ2luZyBsaXN0IG9yIGFkZHMgaXQKKyAqIHRvIGl0IHdpdGggYSBz dGFnaW5nIHN0YXRlIG9mIHJlbW92YWwuCisgKi8KK2ludCB2bXdfY21kYnVmX3Jlc19yZW1vdmUo c3RydWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwKKwkJCSAgZW51bSB2bXdfY21kYnVm X3Jlc190eXBlIHJlc190eXBlLAorCQkJICB1MzIgdXNlcl9rZXksCisJCQkgIHN0cnVjdCBsaXN0 X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHZtd19jbWRidWZfcmVzICplbnRyeTsKKwlzdHJ1Y3Qg ZHJtX2hhc2hfaXRlbSAqaGFzaDsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2h0X2ZpbmRfaXRl bSgmbWFuLT5yZXNvdXJjZXMsIHVzZXJfa2V5LCAmaGFzaCk7CisJaWYgKGxpa2VseShyZXQgIT0g MCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZW50cnkgPSBkcm1faGFzaF9lbnRyeShoYXNoLCBz dHJ1Y3Qgdm13X2NtZGJ1Zl9yZXMsIGhhc2gpOworCisJc3dpdGNoIChlbnRyeS0+c3RhdGUpIHsK KwljYXNlIFZNV19DTURCVUZfUkVTX0FERDoKKwkJdm13X2NtZGJ1Zl9yZXNfZnJlZShtYW4sIGVu dHJ5KTsKKwkJYnJlYWs7CisJY2FzZSBWTVdfQ01EQlVGX1JFU19DT01NSVRFRDoKKwkJKHZvaWQp IGRybV9odF9yZW1vdmVfaXRlbSgmbWFuLT5yZXNvdXJjZXMsICZlbnRyeS0+aGFzaCk7CisJCWxp c3RfZGVsKCZlbnRyeS0+aGVhZCk7CisJCWVudHJ5LT5zdGF0ZSA9IFZNV19DTURCVUZfUkVTX0RF TDsKKwkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmhlYWQsIGxpc3QpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICog dm13X2NtZGJ1Zl9yZXNfbWFuX2NyZWF0ZSAtIEFsbG9jYXRlIGEgY29tbWFuZCBidWZmZXIgbWFu YWdlZCByZXNvdXJjZQorICogbWFuYWdlci4KKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8g YSBzdHJ1Y3Qgdm13X3ByaXZhdGUKKyAqCisgKiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEg Y29tbWFuZCBidWZmZXIgbWFuYWdlZCByZXNvdXJjZSBtYW5hZ2VyLiBSZXR1cm5zCisgKiBhbiBl cnJvciBwb2ludGVyIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCB2bXdfY21kYnVmX3Jlc19tYW5h Z2VyICoKK3Ztd19jbWRidWZfcmVzX21hbl9jcmVhdGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdikKK3sKKwlzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuOworCWludCByZXQ7 CisKKwltYW4gPSBremFsbG9jKHNpemVvZigqbWFuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1hbiA9 PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1hbi0+ZGV2X3ByaXYgPSBk ZXZfcHJpdjsKKwlJTklUX0xJU1RfSEVBRCgmbWFuLT5saXN0KTsKKwlyZXQgPSBkcm1faHRfY3Jl YXRlKCZtYW4tPnJlc291cmNlcywgVk1XX0NNREJVRl9SRVNfTUFOX0hUX09SREVSKTsKKwlpZiAo cmV0ID09IDApCisJCXJldHVybiBtYW47CisKKwlrZnJlZShtYW4pOworCXJldHVybiBFUlJfUFRS KHJldCk7Cit9CisKKy8qKgorICogdm13X2NtZGJ1Zl9yZXNfbWFuX2Rlc3Ryb3kgLSBEZXN0cm95 IGEgY29tbWFuZCBidWZmZXIgbWFuYWdlZCByZXNvdXJjZQorICogbWFuYWdlci4KKyAqCisgKiBA bWFuOiBQb2ludGVyIHRvIHRoZSAgbWFuYWdlciB0byBkZXN0cm95LgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gZGVzdHJveXMgYSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VkIHJlc291cmNlIG1hbmFnZXIg YW5kCisgKiB1bnJlZmVyZW5jZXMgLyBmcmVlcyBhbGwgY29tbWFuZCBidWZmZXIgbWFuYWdlZCBy ZXNvdXJjZXMgYW5kIC1lbnRyaWVzCisgKiBhc3NvY2lhdGVkIHdpdGggaXQuCisgKi8KK3ZvaWQg dm13X2NtZGJ1Zl9yZXNfbWFuX2Rlc3Ryb3koc3RydWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIg Km1hbikKK3sKKwlzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXMgKmVudHJ5LCAqbmV4dDsKKworCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgJm1hbi0+bGlzdCwgaGVhZCkKKwkJdm13 X2NtZGJ1Zl9yZXNfZnJlZShtYW4sIGVudHJ5KTsKKworCWtmcmVlKG1hbik7Cit9CisKKy8qKgor ICoKKyAqIHZtd19jbWRidWZfcmVzX21hbl9zaXplIC0gUmV0dXJuIHRoZSBzaXplIG9mIGEgY29t bWFuZCBidWZmZXIgbWFuYWdlZAorICogcmVzb3VyY2UgbWFuYWdlcgorICoKKyAqIFJldHVybnMg dGhlIGFwcHJveGltYXRlIGFsbG9jYXRpb24gc2l6ZSBvZiBhIGNvbW1hbmQgYnVmZmVyIG1hbmFn ZWQKKyAqIHJlc291cmNlIG1hbmFnZXIuCisgKi8KK3NpemVfdCB2bXdfY21kYnVmX3Jlc19tYW5f c2l6ZSh2b2lkKQoreworCXN0YXRpYyBzaXplX3QgcmVzX21hbl9zaXplOworCisJaWYgKHVubGlr ZWx5KHJlc19tYW5fc2l6ZSA9PSAwKSkKKwkJcmVzX21hbl9zaXplID0KKwkJCXR0bV9yb3VuZF9w b3Qoc2l6ZW9mKHN0cnVjdCB2bXdfY21kYnVmX3Jlc19tYW5hZ2VyKSkgKworCQkJdHRtX3JvdW5k X3BvdChzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpIDw8CisJCQkJICAgICAgVk1XX0NNREJVRl9S RVNfTUFOX0hUX09SREVSKTsKKworCXJldHVybiByZXNfbWFuX3NpemU7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9jb250ZXh0LmMKaW5kZXggOGJiMjZkYy4uNWFjOTI4NyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY29udGV4dC5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NvbnRleHQuYwpAQCAtMzMsNiArMzMsNyBAQCBzdHJ1 Y3Qgdm13X3VzZXJfY29udGV4dCB7CiAJc3RydWN0IHR0bV9iYXNlX29iamVjdCBiYXNlOwogCXN0 cnVjdCB2bXdfcmVzb3VyY2UgcmVzOwogCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgY2Jz OworCXN0cnVjdCB2bXdfY21kYnVmX3Jlc19tYW5hZ2VyICptYW47CiB9OwogCiAKQEAgLTEwMyw3 ICsxMDQsOCBAQCBzdGF0aWMgY29uc3Qgdm13X3NjcnViX2Z1bmMgdm13X3NjcnViX2Z1bmNzW3Zt d19jdHhfYmluZGluZ19tYXhdID0gewogCiBzdGF0aWMgdm9pZCB2bXdfaHdfY29udGV4dF9kZXN0 cm95KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKIHsKLQorCXN0cnVjdCB2bXdfdXNlcl9jb250 ZXh0ICp1Y3R4ID0KKwkJY29udGFpbmVyX29mKHJlcywgc3RydWN0IHZtd191c2VyX2NvbnRleHQs IHJlcyk7CiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CiAJ c3RydWN0IHsKIAkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKQEAgLTExMyw5ICsxMTUsOSBAQCBz dGF0aWMgdm9pZCB2bXdfaHdfY29udGV4dF9kZXN0cm95KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJl cykKIAogCWlmIChyZXMtPmZ1bmMtPmRlc3Ryb3kgPT0gdm13X2diX2NvbnRleHRfZGVzdHJveSkg ewogCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+Y21kYnVmX211dGV4KTsKKwkJdm13X2NtZGJ1Zl9y ZXNfbWFuX2Rlc3Ryb3kodWN0eC0+bWFuKTsKIAkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmJpbmRp bmdfbXV0ZXgpOwotCQkodm9pZCkgdm13X2NvbnRleHRfYmluZGluZ19zdGF0ZV9raWxsCi0JCQko JmNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0LCByZXMpLT5jYnMpOwor CQkodm9pZCkgdm13X2NvbnRleHRfYmluZGluZ19zdGF0ZV9raWxsKCZ1Y3R4LT5jYnMpOwogCQko dm9pZCkgdm13X2diX2NvbnRleHRfZGVzdHJveShyZXMpOwogCQltdXRleF91bmxvY2soJmRldl9w cml2LT5iaW5kaW5nX211dGV4KTsKIAkJaWYgKGRldl9wcml2LT5waW5uZWRfYm8gIT0gTlVMTCAm JgpAQCAtMTUyLDEzICsxNTQsMTYgQEAgc3RhdGljIGludCB2bXdfZ2JfY29udGV4dF9pbml0KHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJcmV0ID0gdm13X3Jlc291cmNlX2luaXQoZGV2 X3ByaXYsIHJlcywgdHJ1ZSwKIAkJCQlyZXNfZnJlZSwgJnZtd19nYl9jb250ZXh0X2Z1bmMpOwog CXJlcy0+YmFja3VwX3NpemUgPSBTVkdBM0RfQ09OVEVYVF9EQVRBX1NJWkU7CisJaWYgKHVubGlr ZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfZXJyOwogCi0JaWYgKHVubGlrZWx5KHJldCAhPSAw KSkgewotCQlpZiAocmVzX2ZyZWUpCi0JCQlyZXNfZnJlZShyZXMpOwotCQllbHNlCi0JCQlrZnJl ZShyZXMpOwotCQlyZXR1cm4gcmV0OworCWlmIChkZXZfcHJpdi0+aGFzX21vYikgeworCQl1Y3R4 LT5tYW4gPSB2bXdfY21kYnVmX3Jlc19tYW5fY3JlYXRlKGRldl9wcml2KTsKKwkJaWYgKHVubGlr ZWx5KElTX0VSUih1Y3R4LT5tYW4pKSkgeworCQkJcmV0ID0gUFRSX0VSUih1Y3R4LT5tYW4pOwor CQkJdWN0eC0+bWFuID0gTlVMTDsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQogCX0KIAogCW1lbXNl dCgmdWN0eC0+Y2JzLCAwLCBzaXplb2YodWN0eC0+Y2JzKSk7CkBAIC0xNjYsNiArMTcxLDEzIEBA IHN0YXRpYyBpbnQgdm13X2diX2NvbnRleHRfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2LAogCiAJdm13X3Jlc291cmNlX2FjdGl2YXRlKHJlcywgdm13X2h3X2NvbnRleHRfZGVzdHJv eSk7CiAJcmV0dXJuIDA7CisKK291dF9lcnI6CisJaWYgKHJlc19mcmVlKQorCQlyZXNfZnJlZShy ZXMpOworCWVsc2UKKwkJa2ZyZWUocmVzKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50 IHZtd19jb250ZXh0X2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKQEAgLTQ3MSw3 ICs0ODMsOCBAQCBpbnQgdm13X2NvbnRleHRfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCiAJICovCiAKIAlpZiAodW5saWtlbHkodm13X3VzZXJfY29udGV4 dF9zaXplID09IDApKQotCQl2bXdfdXNlcl9jb250ZXh0X3NpemUgPSB0dG1fcm91bmRfcG90KHNp emVvZigqY3R4KSkgKyAxMjg7CisJCXZtd191c2VyX2NvbnRleHRfc2l6ZSA9IHR0bV9yb3VuZF9w b3Qoc2l6ZW9mKCpjdHgpKSArIDEyOCArCisJCSAgKChkZXZfcHJpdi0+aGFzX21vYikgPyB2bXdf Y21kYnVmX3Jlc19tYW5fc2l6ZSgpIDogMCk7CiAKIAlyZXQgPSB0dG1fcmVhZF9sb2NrKCZkZXZf cHJpdi0+cmVzZXJ2YXRpb25fc2VtLCB0cnVlKTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQpA QCAtOTAxLDMgKzkxNCw4IEBAIHN0cnVjdCBsaXN0X2hlYWQgKnZtd19jb250ZXh0X2JpbmRpbmdf bGlzdChzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHgpCiB7CiAJcmV0dXJuICYoY29udGFpbmVyX29m KGN0eCwgc3RydWN0IHZtd191c2VyX2NvbnRleHQsIHJlcyktPmNicy5saXN0KTsKIH0KKworc3Ry dWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKnZtd19jb250ZXh0X3Jlc19tYW4oc3RydWN0IHZt d19yZXNvdXJjZSAqY3R4KQoreworCXJldHVybiBjb250YWluZXJfb2YoY3R4LCBzdHJ1Y3Qgdm13 X3VzZXJfY29udGV4dCwgcmVzKS0+bWFuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYu YwppbmRleCAyNDZhNjJiLi5mMzFhNzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYu YwpAQCAtOTQ2LDcgKzk0Niw2IEBAIHN0YXRpYyB2b2lkIHZtd19wb3N0Y2xvc2Uoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKIAkJZHJtX21hc3Rlcl9wdXQoJnZtd19mcC0+bG9ja2VkX21hc3Rlcik7 CiAJfQogCi0Jdm13X2NvbXBhdF9zaGFkZXJfbWFuX2Rlc3Ryb3kodm13X2ZwLT5zaG1hbik7CiAJ dHRtX29iamVjdF9maWxlX3JlbGVhc2UoJnZtd19mcC0+dGZpbGUpOwogCWtmcmVlKHZtd19mcCk7 CiB9CkBAIC05NjYsMTYgKzk2NSwxMCBAQCBzdGF0aWMgaW50IHZtd19kcml2ZXJfb3BlbihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIAlpZiAodW5s aWtlbHkodm13X2ZwLT50ZmlsZSA9PSBOVUxMKSkKIAkJZ290byBvdXRfbm9fdGZpbGU7CiAKLQl2 bXdfZnAtPnNobWFuID0gdm13X2NvbXBhdF9zaGFkZXJfbWFuX2NyZWF0ZShkZXZfcHJpdik7Ci0J aWYgKElTX0VSUih2bXdfZnAtPnNobWFuKSkKLQkJZ290byBvdXRfbm9fc2htYW47Ci0KIAlmaWxl X3ByaXYtPmRyaXZlcl9wcml2ID0gdm13X2ZwOwogCiAJcmV0dXJuIDA7CiAKLW91dF9ub19zaG1h bjoKLQl0dG1fb2JqZWN0X2ZpbGVfcmVsZWFzZSgmdm13X2ZwLT50ZmlsZSk7CiBvdXRfbm9fdGZp bGU6CiAJa2ZyZWUodm13X2ZwKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaAppbmRleCA2YjI1MmE4Li5jMTgxMTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaApAQCAtNDAsMTAgKzQwLDEwIEBACiAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fbW9kdWxl Lmg+CiAjaW5jbHVkZSAidm13Z2Z4X2ZlbmNlLmgiCiAKLSNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9E QVRFICIyMDE0MDMyNSIKKyNkZWZpbmUgVk1XR0ZYX0RSSVZFUl9EQVRFICIyMDE0MDcwNCIKICNk ZWZpbmUgVk1XR0ZYX0RSSVZFUl9NQUpPUiAyCiAjZGVmaW5lIFZNV0dGWF9EUklWRVJfTUlOT1Ig NgotI2RlZmluZSBWTVdHRlhfRFJJVkVSX1BBVENITEVWRUwgMAorI2RlZmluZSBWTVdHRlhfRFJJ VkVSX1BBVENITEVWRUwgMQogI2RlZmluZSBWTVdHRlhfRklMRV9QQUdFX09GRlNFVCAweDAwMTAw MDAwCiAjZGVmaW5lIFZNV0dGWF9GSUZPX1NUQVRJQ19TSVpFICgxMDI0KjEwMjQpCiAjZGVmaW5l IFZNV0dGWF9NQVhfUkVMT0NBVElPTlMgMjA0OApAQCAtNzUsMTQgKzc1LDExIEBACiAjZGVmaW5l IFZNV19SRVNfRkVOQ0UgdHRtX2RyaXZlcl90eXBlMwogI2RlZmluZSBWTVdfUkVTX1NIQURFUiB0 dG1fZHJpdmVyX3R5cGU0CiAKLXN0cnVjdCB2bXdfY29tcGF0X3NoYWRlcl9tYW5hZ2VyOwotCiBz dHJ1Y3Qgdm13X2Zwcml2IHsKIAlzdHJ1Y3QgZHJtX21hc3RlciAqbG9ja2VkX21hc3RlcjsKIAlz dHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZlbmNlX2V2 ZW50czsKIAlib29sIGdiX2F3YXJlOwotCXN0cnVjdCB2bXdfY29tcGF0X3NoYWRlcl9tYW5hZ2Vy ICpzaG1hbjsKIH07CiAKIHN0cnVjdCB2bXdfZG1hX2J1ZmZlciB7CkBAIC0xMjQsNiArMTIxLDEw IEBAIHN0cnVjdCB2bXdfcmVzb3VyY2UgewogCXZvaWQgKCpod19kZXN0cm95KSAoc3RydWN0IHZt d19yZXNvdXJjZSAqcmVzKTsKIH07CiAKKworLyoKKyAqIFJlc291cmNlcyB0aGF0IGFyZSBtYW5h Z2VkIHVzaW5nIGlvY3Rscy4KKyAqLwogZW51bSB2bXdfcmVzX3R5cGUgewogCXZtd19yZXNfY29u dGV4dCwKIAl2bXdfcmVzX3N1cmZhY2UsCkBAIC0xMzIsNiArMTMzLDE1IEBAIGVudW0gdm13X3Jl c190eXBlIHsKIAl2bXdfcmVzX21heAogfTsKIAorLyoKKyAqIFJlc291cmNlcyB0aGF0IGFyZSBt YW5hZ2VkIHVzaW5nIGNvbW1hbmQgc3RyZWFtcy4KKyAqLworZW51bSB2bXdfY21kYnVmX3Jlc190 eXBlIHsKKwl2bXdfY21kYnVmX3Jlc19jb21wYXRfc2hhZGVyCit9OworCitzdHJ1Y3Qgdm13X2Nt ZGJ1Zl9yZXNfbWFuYWdlcjsKKwogc3RydWN0IHZtd19jdXJzb3Jfc25vb3BlciB7CiAJc3RydWN0 IGRybV9jcnRjICpjcnRjOwogCXNpemVfdCBhZ2U7CkBAIC0zNDEsNyArMzUxLDcgQEAgc3RydWN0 IHZtd19zd19jb250ZXh0ewogCWJvb2wgbmVlZHNfcG9zdF9xdWVyeV9iYXJyaWVyOwogCXN0cnVj dCB2bXdfcmVzb3VyY2UgKmVycm9yX3Jlc291cmNlOwogCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmdf c3RhdGUgc3RhZ2VkX2JpbmRpbmdzOwotCXN0cnVjdCBsaXN0X2hlYWQgc3RhZ2VkX3NoYWRlcnM7 CisJc3RydWN0IGxpc3RfaGVhZCBzdGFnZWRfY21kX3JlczsKIH07CiAKIHN0cnVjdCB2bXdfbGVn YWN5X2Rpc3BsYXk7CkBAIC05NzQsNyArOTg0LDggQEAgZXh0ZXJuIHZvaWQgdm13X2NvbnRleHRf YmluZGluZ19yZXNfbGlzdF9raWxsKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwogZXh0ZXJuIHZv aWQgdm13X2NvbnRleHRfYmluZGluZ19yZXNfbGlzdF9zY3J1YihzdHJ1Y3QgbGlzdF9oZWFkICpo ZWFkKTsKIGV4dGVybiBpbnQgdm13X2NvbnRleHRfcmViaW5kX2FsbChzdHJ1Y3Qgdm13X3Jlc291 cmNlICpjdHgpOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKnZtd19jb250ZXh0X2JpbmRpbmdf bGlzdChzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHgpOwotCitleHRlcm4gc3RydWN0IHZtd19jbWRi dWZfcmVzX21hbmFnZXIgKgordm13X2NvbnRleHRfcmVzX21hbihzdHJ1Y3Qgdm13X3Jlc291cmNl ICpjdHgpOwogLyoKICAqIFN1cmZhY2UgbWFuYWdlbWVudCAtIHZtd2dmeF9zdXJmYWNlLmMKICAq LwpAQCAtMTAwOCwyNyArMTAxOSw0MiBAQCBleHRlcm4gaW50IHZtd19zaGFkZXJfZGVmaW5lX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJICAgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIGludCB2bXdfc2hhZGVyX2Rlc3Ryb3lfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQkgICAgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCB2bXdfY29tcGF0X3NoYWRlcl9sb29rdXAoc3Ry dWN0IHZtd19jb21wYXRfc2hhZGVyX21hbmFnZXIgKm1hbiwKLQkJCQkgICAgU1ZHQTNkU2hhZGVy VHlwZSBzaGFkZXJfdHlwZSwKLQkJCQkgICAgdTMyICp1c2VyX2tleSk7Ci1leHRlcm4gdm9pZCB2 bXdfY29tcGF0X3NoYWRlcnNfY29tbWl0KHN0cnVjdCB2bXdfY29tcGF0X3NoYWRlcl9tYW5hZ2Vy ICptYW4sCi0JCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7Ci1leHRlcm4gdm9pZCB2 bXdfY29tcGF0X3NoYWRlcnNfcmV2ZXJ0KHN0cnVjdCB2bXdfY29tcGF0X3NoYWRlcl9tYW5hZ2Vy ICptYW4sCi0JCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7Ci1leHRlcm4gaW50IHZt d19jb21wYXRfc2hhZGVyX3JlbW92ZShzdHJ1Y3Qgdm13X2NvbXBhdF9zaGFkZXJfbWFuYWdlciAq bWFuLAotCQkJCSAgICB1MzIgdXNlcl9rZXksCi0JCQkJICAgIFNWR0EzZFNoYWRlclR5cGUgc2hh ZGVyX3R5cGUsCi0JCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwotZXh0ZXJuIGludCB2 bXdfY29tcGF0X3NoYWRlcl9hZGQoc3RydWN0IHZtd19jb21wYXRfc2hhZGVyX21hbmFnZXIgKm1h biwKK2V4dGVybiBpbnQgdm13X2NvbXBhdF9zaGFkZXJfYWRkKHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJCQkJIHN0cnVjdCB2bXdfY21kYnVmX3Jlc19tYW5hZ2VyICptYW4sCiAJCQkJ IHUzMiB1c2VyX2tleSwgY29uc3Qgdm9pZCAqYnl0ZWNvZGUsCiAJCQkJIFNWR0EzZFNoYWRlclR5 cGUgc2hhZGVyX3R5cGUsCiAJCQkJIHNpemVfdCBzaXplLAotCQkJCSBzdHJ1Y3QgdHRtX29iamVj dF9maWxlICp0ZmlsZSwKIAkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7Ci1leHRlcm4gc3Ry dWN0IHZtd19jb21wYXRfc2hhZGVyX21hbmFnZXIgKgotdm13X2NvbXBhdF9zaGFkZXJfbWFuX2Ny ZWF0ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KTsKLWV4dGVybiB2b2lkCi12bXdfY29t cGF0X3NoYWRlcl9tYW5fZGVzdHJveShzdHJ1Y3Qgdm13X2NvbXBhdF9zaGFkZXJfbWFuYWdlciAq bWFuKTsKK2V4dGVybiBpbnQgdm13X2NvbXBhdF9zaGFkZXJfcmVtb3ZlKHN0cnVjdCB2bXdfY21k YnVmX3Jlc19tYW5hZ2VyICptYW4sCisJCQkJICAgIHUzMiB1c2VyX2tleSwgU1ZHQTNkU2hhZGVy VHlwZSBzaGFkZXJfdHlwZSwKKwkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CitleHRl cm4gc3RydWN0IHZtd19yZXNvdXJjZSAqCit2bXdfY29tcGF0X3NoYWRlcl9sb29rdXAoc3RydWN0 IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwKKwkJCSB1MzIgdXNlcl9rZXksIFNWR0EzZFNo YWRlclR5cGUgc2hhZGVyX3R5cGUpOworCisvKgorICogQ29tbWFuZCBidWZmZXIgbWFuYWdlZCBy ZXNvdXJjZXMgLSB2bXdnZnhfY21kYnVmX3Jlcy5jCisgKi8KKworZXh0ZXJuIHN0cnVjdCB2bXdf Y21kYnVmX3Jlc19tYW5hZ2VyICoKK3Ztd19jbWRidWZfcmVzX21hbl9jcmVhdGUoc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCB2bXdfY21kYnVmX3Jlc19tYW5fZGVz dHJveShzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuKTsKK2V4dGVybiBzaXplX3Qg dm13X2NtZGJ1Zl9yZXNfbWFuX3NpemUodm9pZCk7CitleHRlcm4gc3RydWN0IHZtd19yZXNvdXJj ZSAqCit2bXdfY21kYnVmX3Jlc19sb29rdXAoc3RydWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIg Km1hbiwKKwkJICAgICAgZW51bSB2bXdfY21kYnVmX3Jlc190eXBlIHJlc190eXBlLAorCQkgICAg ICB1MzIgdXNlcl9rZXkpOworZXh0ZXJuIHZvaWQgdm13X2NtZGJ1Zl9yZXNfcmV2ZXJ0KHN0cnVj dCBsaXN0X2hlYWQgKmxpc3QpOworZXh0ZXJuIHZvaWQgdm13X2NtZGJ1Zl9yZXNfY29tbWl0KHN0 cnVjdCBsaXN0X2hlYWQgKmxpc3QpOworZXh0ZXJuIGludCB2bXdfY21kYnVmX3Jlc19hZGQoc3Ry dWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwKKwkJCSAgICAgIGVudW0gdm13X2NtZGJ1 Zl9yZXNfdHlwZSByZXNfdHlwZSwKKwkJCSAgICAgIHUzMiB1c2VyX2tleSwKKwkJCSAgICAgIHN0 cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Qp OworZXh0ZXJuIGludCB2bXdfY21kYnVmX3Jlc19yZW1vdmUoc3RydWN0IHZtd19jbWRidWZfcmVz X21hbmFnZXIgKm1hbiwKKwkJCQkgZW51bSB2bXdfY21kYnVmX3Jlc190eXBlIHJlc190eXBlLAor CQkJCSB1MzIgdXNlcl9rZXksCisJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwogCiAKIC8q KgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jIGIv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCmluZGV4IDg3ZGYwYjMuLjdi ZmRhYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKQEAgLTQyMiwy OCArNDIyLDkxIEBAIHN0YXRpYyBpbnQgdm13X3Jlc291cmNlc192YWxpZGF0ZShzdHJ1Y3Qgdm13 X3N3X2NvbnRleHQgKnN3X2NvbnRleHQpCiAJcmV0dXJuIDA7CiB9CiAKKworLyoqCisgKiB2bXdf Y21kX3Jlc19yZWxvY19hZGQgLSBBZGQgYSByZXNvdXJjZSB0byBhIHNvZnR3YXJlIGNvbnRleHQn cworICogcmVsb2NhdGlvbi0gYW5kIHZhbGlkYXRpb24gbGlzdHMuCisgKgorICogQGRldl9wcml2 OiBQb2ludGVyIHRvIGEgc3RydWN0IHZtd19wcml2YXRlIGlkZW50aWZ5aW5nIHRoZSBkZXZpY2Uu CisgKiBAc3dfY29udGV4dDogUG9pbnRlciB0byB0aGUgc29mdHdhcmUgY29udGV4dC4KKyAqIEBy ZXNfdHlwZTogUmVzb3VyY2UgdHlwZS4KKyAqIEBpZF9sb2M6IFBvaW50ZXIgdG8gd2hlcmUgdGhl IGlkIHRoYXQgbmVlZHMgdHJhbnNsYXRpb24gaXMgbG9jYXRlZC4KKyAqIEByZXM6IFZhbGlkIHBv aW50ZXIgdG8gYSBzdHJ1Y3Qgdm13X3Jlc291cmNlLgorICogQHBfdmFsOiBJZiBub24gbnVsbCwg YSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbGlkYXRlX25vZGUKKyAqIHVz ZWQgZm9yIHRoaXMgcmVzb3VyY2UgaXMgcmV0dXJuZWQgaGVyZS4KKyAqLworc3RhdGljIGludCB2 bXdfY21kX3Jlc19yZWxvY19hZGQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkg c3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJCSBlbnVtIHZtd19yZXNfdHlw ZSByZXNfdHlwZSwKKwkJCQkgdWludDMyX3QgKmlkX2xvYywKKwkJCQkgc3RydWN0IHZtd19yZXNv dXJjZSAqcmVzLAorCQkJCSBzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlICoqcF92YWwpCit7 CisJaW50IHJldDsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlICpub2RlOworCisJKnBf dmFsID0gTlVMTDsKKwlyZXQgPSB2bXdfcmVzb3VyY2VfcmVsb2NhdGlvbl9hZGQoJnN3X2NvbnRl eHQtPnJlc19yZWxvY2F0aW9ucywKKwkJCQkJICByZXMsCisJCQkJCSAgaWRfbG9jIC0gc3dfY29u dGV4dC0+YnVmX3N0YXJ0KTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9l cnI7CisKKwlyZXQgPSB2bXdfcmVzb3VyY2VfdmFsX2FkZChzd19jb250ZXh0LCByZXMsICZub2Rl KTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9lcnI7CisKKwlpZiAocmVz X3R5cGUgPT0gdm13X3Jlc19jb250ZXh0ICYmIGRldl9wcml2LT5oYXNfbW9iICYmCisJICAgIG5v ZGUtPmZpcnN0X3VzYWdlKSB7CisKKwkJLyoKKwkJICogUHV0IGNvbnRleHRzIGZpcnN0IG9uIHRo ZSBsaXN0IHRvIGJlIGFibGUgdG8gZXhpdAorCQkgKiBsaXN0IHRyYXZlcnNhbCBmb3IgY29udGV4 dHMgZWFybHkuCisJCSAqLworCQlsaXN0X2RlbCgmbm9kZS0+aGVhZCk7CisJCWxpc3RfYWRkKCZu b2RlLT5oZWFkLCAmc3dfY29udGV4dC0+cmVzb3VyY2VfbGlzdCk7CisKKwkJcmV0ID0gdm13X3Jl c291cmNlX2NvbnRleHRfcmVzX2FkZChkZXZfcHJpdiwgc3dfY29udGV4dCwgcmVzKTsKKwkJaWYg KHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCWdvdG8gb3V0X2VycjsKKwkJbm9kZS0+c3RhZ2VkX2Jp bmRpbmdzID0KKwkJCWt6YWxsb2Moc2l6ZW9mKCpub2RlLT5zdGFnZWRfYmluZGluZ3MpLCBHRlBf S0VSTkVMKTsKKwkJaWYgKG5vZGUtPnN0YWdlZF9iaW5kaW5ncyA9PSBOVUxMKSB7CisJCQlEUk1f RVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBjb250ZXh0IGJpbmRpbmcgIgorCQkJCSAgImluZm9y bWF0aW9uLlxuIik7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJSU5JVF9MSVNUX0hFQUQoJm5v ZGUtPnN0YWdlZF9iaW5kaW5ncy0+bGlzdCk7CisJfQorCisJaWYgKHBfdmFsKQorCQkqcF92YWwg PSBub2RlOworCitvdXRfZXJyOgorCXJldHVybiByZXQ7Cit9CisKKwogLyoqCi0gKiB2bXdfY21k X2NvbXBhdF9yZXNfY2hlY2sgLSBDaGVjayB0aGF0IGEgcmVzb3VyY2UgaXMgcHJlc2VudCBhbmQg aWYgc28sIHB1dCBpdAorICogdm13X2NtZF9yZXNfY2hlY2sgLSBDaGVjayB0aGF0IGEgcmVzb3Vy Y2UgaXMgcHJlc2VudCBhbmQgaWYgc28sIHB1dCBpdAogICogb24gdGhlIHJlc291cmNlIHZhbGlk YXRlIGxpc3QgdW5sZXNzIGl0J3MgYWxyZWFkeSB0aGVyZS4KICAqCiAgKiBAZGV2X3ByaXY6IFBv aW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuCiAgKiBAc3dfY29udGV4dDogUG9p bnRlciB0byB0aGUgc29mdHdhcmUgY29udGV4dC4KICAqIEByZXNfdHlwZTogUmVzb3VyY2UgdHlw ZS4KICAqIEBjb252ZXJ0ZXI6IFVzZXItc3BhY2UgdmlzaXNibGUgdHlwZSBzcGVjaWZpYyBpbmZv cm1hdGlvbi4KLSAqIEBpZDogdXNlci1zcGFjZSByZXNvdXJjZSBpZCBoYW5kbGUuCiAgKiBAaWRf bG9jOiBQb2ludGVyIHRvIHRoZSBsb2NhdGlvbiBpbiB0aGUgY29tbWFuZCBidWZmZXIgY3VycmVu dGx5IGJlaW5nCiAgKiBwYXJzZWQgZnJvbSB3aGVyZSB0aGUgdXNlci1zcGFjZSByZXNvdXJjZSBp ZCBoYW5kbGUgaXMgbG9jYXRlZC4KICAqIEBwX3ZhbDogUG9pbnRlciB0byBwb2ludGVyIHRvIHJl c291cmNlIHZhbGlkYWxpZGF0aW9uIG5vZGUuIFBvcHVsYXRlZAogICogb24gZXhpdC4KICAqLwog c3RhdGljIGludAotdm13X2NtZF9jb21wYXRfcmVzX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsCi0JCQkgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAotCQkJIGVu dW0gdm13X3Jlc190eXBlIHJlc190eXBlLAotCQkJIGNvbnN0IHN0cnVjdCB2bXdfdXNlcl9yZXNv dXJjZV9jb252ICpjb252ZXJ0ZXIsCi0JCQkgdWludDMyX3QgaWQsCi0JCQkgdWludDMyX3QgKmlk X2xvYywKLQkJCSBzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlICoqcF92YWwpCit2bXdfY21k X3Jlc19jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkgIHN0cnVjdCB2bXdf c3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJICBlbnVtIHZtd19yZXNfdHlwZSByZXNfdHlwZSwK KwkJICBjb25zdCBzdHJ1Y3Qgdm13X3VzZXJfcmVzb3VyY2VfY29udiAqY29udmVydGVyLAorCQkg IHVpbnQzMl90ICppZF9sb2MsCisJCSAgc3RydWN0IHZtd19yZXNvdXJjZV92YWxfbm9kZSAqKnBf dmFsKQogewogCXN0cnVjdCB2bXdfcmVzX2NhY2hlX2VudHJ5ICpyY2FjaGUgPQogCQkmc3dfY29u dGV4dC0+cmVzX2NhY2hlW3Jlc190eXBlXTsKQEAgLTQ1MSw3ICs1MTQsNyBAQCB2bXdfY21kX2Nv bXBhdF9yZXNfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAlzdHJ1Y3Qgdm13 X3Jlc291cmNlX3ZhbF9ub2RlICpub2RlOwogCWludCByZXQ7CiAKLQlpZiAoaWQgPT0gU1ZHQTNE X0lOVkFMSURfSUQpIHsKKwlpZiAoKmlkX2xvYyA9PSBTVkdBM0RfSU5WQUxJRF9JRCkgewogCQlp ZiAocF92YWwpCiAJCQkqcF92YWwgPSBOVUxMOwogCQlpZiAocmVzX3R5cGUgPT0gdm13X3Jlc19j b250ZXh0KSB7CkBAIC00NjYsNyArNTI5LDcgQEAgdm13X2NtZF9jb21wYXRfcmVzX2NoZWNrKHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJICogcmVzb3VyY2UKIAkgKi8KIAotCWlmIChs aWtlbHkocmNhY2hlLT52YWxpZCAmJiBpZCA9PSByY2FjaGUtPmhhbmRsZSkpIHsKKwlpZiAobGlr ZWx5KHJjYWNoZS0+dmFsaWQgJiYgKmlkX2xvYyA9PSByY2FjaGUtPmhhbmRsZSkpIHsKIAkJY29u c3Qgc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzID0gcmNhY2hlLT5yZXM7CiAKIAkJcmNhY2hlLT5u b2RlLT5maXJzdF91c2FnZSA9IGZhbHNlOwpAQCAtNDgwLDQ5ICs1NDMsMjggQEAgdm13X2NtZF9j b21wYXRfcmVzX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAKIAlyZXQgPSB2 bXdfdXNlcl9yZXNvdXJjZV9sb29rdXBfaGFuZGxlKGRldl9wcml2LAogCQkJCQkgICAgICBzd19j b250ZXh0LT5mcC0+dGZpbGUsCi0JCQkJCSAgICAgIGlkLAorCQkJCQkgICAgICAqaWRfbG9jLAog CQkJCQkgICAgICBjb252ZXJ0ZXIsCiAJCQkJCSAgICAgICZyZXMpOwogCWlmICh1bmxpa2VseShy ZXQgIT0gMCkpIHsKIAkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBvciB1c2UgcmVzb3VyY2Ug MHglMDh4LlxuIiwKLQkJCSAgKHVuc2lnbmVkKSBpZCk7CisJCQkgICh1bnNpZ25lZCkgKmlkX2xv Yyk7CiAJCWR1bXBfc3RhY2soKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyY2FjaGUtPnZhbGlk ID0gdHJ1ZTsKIAlyY2FjaGUtPnJlcyA9IHJlczsKLQlyY2FjaGUtPmhhbmRsZSA9IGlkOwotCi0J cmV0ID0gdm13X3Jlc291cmNlX3JlbG9jYXRpb25fYWRkKCZzd19jb250ZXh0LT5yZXNfcmVsb2Nh dGlvbnMsCi0JCQkJCSAgcmVzLAotCQkJCQkgIGlkX2xvYyAtIHN3X2NvbnRleHQtPmJ1Zl9zdGFy dCk7Ci0JaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJZ290byBvdXRfbm9fcmVsb2M7CisJcmNh Y2hlLT5oYW5kbGUgPSAqaWRfbG9jOwogCi0JcmV0ID0gdm13X3Jlc291cmNlX3ZhbF9hZGQoc3df Y29udGV4dCwgcmVzLCAmbm9kZSk7CisJcmV0ID0gdm13X2NtZF9yZXNfcmVsb2NfYWRkKGRldl9w cml2LCBzd19jb250ZXh0LCByZXNfdHlwZSwgaWRfbG9jLAorCQkJCSAgICByZXMsICZub2RlKTsK IAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dF9ub19yZWxvYzsKIAogCXJjYWNo ZS0+bm9kZSA9IG5vZGU7CiAJaWYgKHBfdmFsKQogCQkqcF92YWwgPSBub2RlOwotCi0JaWYgKGRl dl9wcml2LT5oYXNfbW9iICYmIG5vZGUtPmZpcnN0X3VzYWdlICYmCi0JICAgIHJlc190eXBlID09 IHZtd19yZXNfY29udGV4dCkgewotCQlyZXQgPSB2bXdfcmVzb3VyY2VfY29udGV4dF9yZXNfYWRk KGRldl9wcml2LCBzd19jb250ZXh0LCByZXMpOwotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQot CQkJZ290byBvdXRfbm9fcmVsb2M7Ci0JCW5vZGUtPnN0YWdlZF9iaW5kaW5ncyA9Ci0JCQlremFs bG9jKHNpemVvZigqbm9kZS0+c3RhZ2VkX2JpbmRpbmdzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChu b2RlLT5zdGFnZWRfYmluZGluZ3MgPT0gTlVMTCkgewotCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8g YWxsb2NhdGUgY29udGV4dCBiaW5kaW5nICIKLQkJCQkgICJpbmZvcm1hdGlvbi5cbiIpOwotCQkJ Z290byBvdXRfbm9fcmVsb2M7Ci0JCX0KLQkJSU5JVF9MSVNUX0hFQUQoJm5vZGUtPnN0YWdlZF9i aW5kaW5ncy0+bGlzdCk7Ci0JfQotCiAJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOwog CXJldHVybiAwOwogCkBAIC01MzQsMzEgKzU3Niw2IEBAIG91dF9ub19yZWxvYzoKIH0KIAogLyoq Ci0gKiB2bXdfY21kX3Jlc19jaGVjayAtIENoZWNrIHRoYXQgYSByZXNvdXJjZSBpcyBwcmVzZW50 IGFuZCBpZiBzbywgcHV0IGl0Ci0gKiBvbiB0aGUgcmVzb3VyY2UgdmFsaWRhdGUgbGlzdCB1bmxl c3MgaXQncyBhbHJlYWR5IHRoZXJlLgotICoKLSAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBhIGRl dmljZSBwcml2YXRlIHN0cnVjdHVyZS4KLSAqIEBzd19jb250ZXh0OiBQb2ludGVyIHRvIHRoZSBz b2Z0d2FyZSBjb250ZXh0LgotICogQHJlc190eXBlOiBSZXNvdXJjZSB0eXBlLgotICogQGNvbnZl cnRlcjogVXNlci1zcGFjZSB2aXNpc2JsZSB0eXBlIHNwZWNpZmljIGluZm9ybWF0aW9uLgotICog QGlkX2xvYzogUG9pbnRlciB0byB0aGUgbG9jYXRpb24gaW4gdGhlIGNvbW1hbmQgYnVmZmVyIGN1 cnJlbnRseSBiZWluZwotICogcGFyc2VkIGZyb20gd2hlcmUgdGhlIHVzZXItc3BhY2UgcmVzb3Vy Y2UgaWQgaGFuZGxlIGlzIGxvY2F0ZWQuCi0gKiBAcF92YWw6IFBvaW50ZXIgdG8gcG9pbnRlciB0 byByZXNvdXJjZSB2YWxpZGFsaWRhdGlvbiBub2RlLiBQb3B1bGF0ZWQKLSAqIG9uIGV4aXQuCi0g Ki8KLXN0YXRpYyBpbnQKLXZtd19jbWRfcmVzX2NoZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2 X3ByaXYsCi0JCSAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAotCQkgIGVudW0g dm13X3Jlc190eXBlIHJlc190eXBlLAotCQkgIGNvbnN0IHN0cnVjdCB2bXdfdXNlcl9yZXNvdXJj ZV9jb252ICpjb252ZXJ0ZXIsCi0JCSAgdWludDMyX3QgKmlkX2xvYywKLQkJICBzdHJ1Y3Qgdm13 X3Jlc291cmNlX3ZhbF9ub2RlICoqcF92YWwpCi17Ci0JcmV0dXJuIHZtd19jbWRfY29tcGF0X3Jl c19jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgcmVzX3R5cGUsCi0JCQkJCWNvbnZlcnRlciwg KmlkX2xvYywgaWRfbG9jLCBwX3ZhbCk7Ci19Ci0KLS8qKgogICogdm13X3JlYmluZF9jb250ZXh0 cyAtIFJlYmluZCBhbGwgcmVzb3VyY2VzIHByZXZpb3VzbHkgYm91bmQgdG8KICAqIHJlZmVyZW5j ZWQgY29udGV4dHMuCiAgKgpAQCAtNTcyLDggKzU4OSw4IEBAIHN0YXRpYyBpbnQgdm13X3JlYmlu ZF9jb250ZXh0cyhzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQpCiAJaW50IHJldDsK IAogCWxpc3RfZm9yX2VhY2hfZW50cnkodmFsLCAmc3dfY29udGV4dC0+cmVzb3VyY2VfbGlzdCwg aGVhZCkgewotCQlpZiAobGlrZWx5KCF2YWwtPnN0YWdlZF9iaW5kaW5ncykpCi0JCQljb250aW51 ZTsKKwkJaWYgKHVubGlrZWx5KCF2YWwtPnN0YWdlZF9iaW5kaW5ncykpCisJCQlicmVhazsKIAog CQlyZXQgPSB2bXdfY29udGV4dF9yZWJpbmRfYWxsKHZhbC0+cmVzKTsKIAkJaWYgKHVubGlrZWx5 KHJldCAhPSAwKSkgewpAQCAtMTYyNiwxMyArMTY0MywxNCBAQCBzdGF0aWMgaW50IHZtd19jbWRf c2hhZGVyX2RlZmluZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCX0gKmNtZDsKIAlp bnQgcmV0OwogCXNpemVfdCBzaXplOworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKnZh bDsKIAogCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2hhZGVyX2RlZmlu ZV9jbWQsCiAJCQkgICBoZWFkZXIpOwogCiAJcmV0ID0gdm13X2NtZF9yZXNfY2hlY2soZGV2X3By aXYsIHN3X2NvbnRleHQsIHZtd19yZXNfY29udGV4dCwKIAkJCQl1c2VyX2NvbnRleHRfY29udmVy dGVyLCAmY21kLT5ib2R5LmNpZCwKLQkJCQlOVUxMKTsKKwkJCQkmdmFsKTsKIAlpZiAodW5saWtl bHkocmV0ICE9IDApKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjQwLDExICsxNjU4LDExIEBAIHN0 YXRpYyBpbnQgdm13X2NtZF9zaGFkZXJfZGVmaW5lKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYsCiAJCXJldHVybiAwOwogCiAJc2l6ZSA9IGNtZC0+aGVhZGVyLnNpemUgLSBzaXplb2YoY21k LT5ib2R5KTsKLQlyZXQgPSB2bXdfY29tcGF0X3NoYWRlcl9hZGQoc3dfY29udGV4dC0+ZnAtPnNo bWFuLAorCXJldCA9IHZtd19jb21wYXRfc2hhZGVyX2FkZChkZXZfcHJpdiwKKwkJCQkgICAgdm13 X2NvbnRleHRfcmVzX21hbih2YWwtPnJlcyksCiAJCQkJICAgIGNtZC0+Ym9keS5zaGlkLCBjbWQg KyAxLAogCQkJCSAgICBjbWQtPmJvZHkudHlwZSwgc2l6ZSwKLQkJCQkgICAgc3dfY29udGV4dC0+ ZnAtPnRmaWxlLAotCQkJCSAgICAmc3dfY29udGV4dC0+c3RhZ2VkX3NoYWRlcnMpOworCQkJCSAg ICAmc3dfY29udGV4dC0+c3RhZ2VkX2NtZF9yZXMpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkp CiAJCXJldHVybiByZXQ7CiAKQEAgLTE2NzIsMjMgKzE2OTAsMjQgQEAgc3RhdGljIGludCB2bXdf Y21kX3NoYWRlcl9kZXN0cm95KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCVNWR0Ez ZENtZERlc3Ryb3lTaGFkZXIgYm9keTsKIAl9ICpjbWQ7CiAJaW50IHJldDsKKwlzdHJ1Y3Qgdm13 X3Jlc291cmNlX3ZhbF9ub2RlICp2YWw7CiAKIAljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBz dHJ1Y3Qgdm13X3NoYWRlcl9kZXN0cm95X2NtZCwKIAkJCSAgIGhlYWRlcik7CiAKIAlyZXQgPSB2 bXdfY21kX3Jlc19jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgdm13X3Jlc19jb250ZXh0LAog CQkJCXVzZXJfY29udGV4dF9jb252ZXJ0ZXIsICZjbWQtPmJvZHkuY2lkLAotCQkJCU5VTEwpOwor CQkJCSZ2YWwpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7CiAKIAlp ZiAodW5saWtlbHkoIWRldl9wcml2LT5oYXNfbW9iKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSB2 bXdfY29tcGF0X3NoYWRlcl9yZW1vdmUoc3dfY29udGV4dC0+ZnAtPnNobWFuLAorCXJldCA9IHZt d19jb21wYXRfc2hhZGVyX3JlbW92ZSh2bXdfY29udGV4dF9yZXNfbWFuKHZhbC0+cmVzKSwKIAkJ CQkgICAgICAgY21kLT5ib2R5LnNoaWQsCiAJCQkJICAgICAgIGNtZC0+Ym9keS50eXBlLAotCQkJ CSAgICAgICAmc3dfY29udGV4dC0+c3RhZ2VkX3NoYWRlcnMpOworCQkJCSAgICAgICAmc3dfY29u dGV4dC0+c3RhZ2VkX2NtZF9yZXMpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVy biByZXQ7CiAKQEAgLTE3MTUsNyArMTczNCw5IEBAIHN0YXRpYyBpbnQgdm13X2NtZF9zZXRfc2hh ZGVyKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCVNWR0EzZENtZEhlYWRlciBoZWFk ZXI7CiAJCVNWR0EzZENtZFNldFNoYWRlciBib2R5OwogCX0gKmNtZDsKLQlzdHJ1Y3Qgdm13X3Jl c291cmNlX3ZhbF9ub2RlICpjdHhfbm9kZTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2Rl ICpjdHhfbm9kZSwgKnJlc19ub2RlID0gTlVMTDsKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyBi aTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMgPSBOVUxMOwogCWludCByZXQ7CiAKIAljbWQg PSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X3NldF9zaGFkZXJfY21kLApAQCAtMTcy NywzMiArMTc0OCw0MCBAQCBzdGF0aWMgaW50IHZtd19jbWRfc2V0X3NoYWRlcihzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiBy ZXQ7CiAKLQlpZiAoZGV2X3ByaXYtPmhhc19tb2IpIHsKLQkJc3RydWN0IHZtd19jdHhfYmluZGlu Zm8gYmk7Ci0JCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKnJlc19ub2RlOwotCQl1MzIg c2hpZCA9IGNtZC0+Ym9keS5zaGlkOwotCi0JCWlmIChzaGlkICE9IFNWR0EzRF9JTlZBTElEX0lE KQotCQkJKHZvaWQpIHZtd19jb21wYXRfc2hhZGVyX2xvb2t1cChzd19jb250ZXh0LT5mcC0+c2ht YW4sCi0JCQkJCQkJY21kLT5ib2R5LnR5cGUsCi0JCQkJCQkJJnNoaWQpOwotCi0JCXJldCA9IHZt d19jbWRfY29tcGF0X3Jlc19jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwKLQkJCQkJICAgICAg IHZtd19yZXNfc2hhZGVyLAotCQkJCQkgICAgICAgdXNlcl9zaGFkZXJfY29udmVydGVyLAotCQkJ CQkgICAgICAgc2hpZCwKLQkJCQkJICAgICAgICZjbWQtPmJvZHkuc2hpZCwgJnJlc19ub2RlKTsK KwlpZiAoIWRldl9wcml2LT5oYXNfbW9iKQorCQlyZXR1cm4gMDsKKworCWlmIChjbWQtPmJvZHku c2hpZCAhPSBTVkdBM0RfSU5WQUxJRF9JRCkgeworCQlyZXMgPSB2bXdfY29tcGF0X3NoYWRlcl9s b29rdXAKKwkJCSh2bXdfY29udGV4dF9yZXNfbWFuKGN0eF9ub2RlLT5yZXMpLAorCQkJIGNtZC0+ Ym9keS5zaGlkLAorCQkJIGNtZC0+Ym9keS50eXBlKTsKKworCQlpZiAoIUlTX0VSUihyZXMpKSB7 CisJCQlyZXQgPSB2bXdfY21kX3Jlc19yZWxvY19hZGQoZGV2X3ByaXYsIHN3X2NvbnRleHQsCisJ CQkJCQkgICAgdm13X3Jlc19zaGFkZXIsCisJCQkJCQkgICAgJmNtZC0+Ym9keS5zaGlkLCByZXMs CisJCQkJCQkgICAgJnJlc19ub2RlKTsKKwkJCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVz KTsKKwkJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0K KworCWlmICghcmVzX25vZGUpIHsKKwkJcmV0ID0gdm13X2NtZF9yZXNfY2hlY2soZGV2X3ByaXYs IHN3X2NvbnRleHQsCisJCQkJCXZtd19yZXNfc2hhZGVyLAorCQkJCQl1c2VyX3NoYWRlcl9jb252 ZXJ0ZXIsCisJCQkJCSZjbWQtPmJvZHkuc2hpZCwgJnJlc19ub2RlKTsKIAkJaWYgKHVubGlrZWx5 KHJldCAhPSAwKSkKIAkJCXJldHVybiByZXQ7Ci0KLQkJYmkuY3R4ID0gY3R4X25vZGUtPnJlczsK LQkJYmkucmVzID0gcmVzX25vZGUgPyByZXNfbm9kZS0+cmVzIDogTlVMTDsKLQkJYmkuYnQgPSB2 bXdfY3R4X2JpbmRpbmdfc2hhZGVyOwotCQliaS5pMS5zaGFkZXJfdHlwZSA9IGNtZC0+Ym9keS50 eXBlOwotCQlyZXR1cm4gdm13X2NvbnRleHRfYmluZGluZ19hZGQoY3R4X25vZGUtPnN0YWdlZF9i aW5kaW5ncywgJmJpKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwliaS5jdHggPSBjdHhfbm9kZS0+cmVz OworCWJpLnJlcyA9IHJlc19ub2RlID8gcmVzX25vZGUtPnJlcyA6IE5VTEw7CisJYmkuYnQgPSB2 bXdfY3R4X2JpbmRpbmdfc2hhZGVyOworCWJpLmkxLnNoYWRlcl90eXBlID0gY21kLT5ib2R5LnR5 cGU7CisJcmV0dXJuIHZtd19jb250ZXh0X2JpbmRpbmdfYWRkKGN0eF9ub2RlLT5zdGFnZWRfYmlu ZGluZ3MsICZiaSk7CiB9CiAKIC8qKgpAQCAtMjM5NCw2ICsyNDIzLDggQEAgdm13X2V4ZWNidWZf Y29weV9mZW5jZV91c2VyKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJfQogfQogCisK KwogaW50IHZtd19leGVjYnVmX3Byb2Nlc3Moc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJ CQlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJdm9pZCBfX3VzZXIgKnVzZXJfY29t bWFuZHMsCkBAIC0yNDUzLDcgKzI0ODQsNyBAQCBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJc3dfY29udGV4 dC0+cmVzX2h0X2luaXRpYWxpemVkID0gdHJ1ZTsKIAl9Ci0JSU5JVF9MSVNUX0hFQUQoJnN3X2Nv bnRleHQtPnN0YWdlZF9zaGFkZXJzKTsKKwlJTklUX0xJU1RfSEVBRCgmc3dfY29udGV4dC0+c3Rh Z2VkX2NtZF9yZXMpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnJlc291cmNlX2xpc3QpOwogCXJldCA9 IHZtd19jbWRfY2hlY2tfYWxsKGRldl9wcml2LCBzd19jb250ZXh0LCBrZXJuZWxfY29tbWFuZHMs CkBAIC0yNTQ4LDggKzI1NzksNyBAQCBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdiwKIAl9CiAKIAlsaXN0X3NwbGljZV9pbml0KCZzd19jb250ZXh0LT5y ZXNvdXJjZV9saXN0LCAmcmVzb3VyY2VfbGlzdCk7Ci0Jdm13X2NvbXBhdF9zaGFkZXJzX2NvbW1p dChzd19jb250ZXh0LT5mcC0+c2htYW4sCi0JCQkJICAmc3dfY29udGV4dC0+c3RhZ2VkX3NoYWRl cnMpOworCXZtd19jbWRidWZfcmVzX2NvbW1pdCgmc3dfY29udGV4dC0+c3RhZ2VkX2NtZF9yZXMp OwogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CiAKIAkvKgpAQCAtMjU3 Niw4ICsyNjA2LDcgQEAgb3V0X3VubG9jazoKIAlsaXN0X3NwbGljZV9pbml0KCZzd19jb250ZXh0 LT5yZXNvdXJjZV9saXN0LCAmcmVzb3VyY2VfbGlzdCk7CiAJZXJyb3JfcmVzb3VyY2UgPSBzd19j b250ZXh0LT5lcnJvcl9yZXNvdXJjZTsKIAlzd19jb250ZXh0LT5lcnJvcl9yZXNvdXJjZSA9IE5V TEw7Ci0Jdm13X2NvbXBhdF9zaGFkZXJzX3JldmVydChzd19jb250ZXh0LT5mcC0+c2htYW4sCi0J CQkJICAmc3dfY29udGV4dC0+c3RhZ2VkX3NoYWRlcnMpOworCXZtd19jbWRidWZfcmVzX3JldmVy dCgmc3dfY29udGV4dC0+c3RhZ2VkX2NtZF9yZXMpOwogCW11dGV4X3VubG9jaygmZGV2X3ByaXYt PmNtZGJ1Zl9tdXRleCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfc2hhZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zaGFkZXIu YwppbmRleCBjMTU1OWVlYS4uODcxOWZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zt d2dmeC92bXdnZnhfc2hhZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhf c2hhZGVyLmMKQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlICJ2bXdnZnhfcmVzb3VyY2VfcHJp di5oIgogI2luY2x1ZGUgInR0bS90dG1fcGxhY2VtZW50LmgiCiAKLSNkZWZpbmUgVk1XX0NPTVBB VF9TSEFERVJfSFRfT1JERVIgMTIKLQogc3RydWN0IHZtd19zaGFkZXIgewogCXN0cnVjdCB2bXdf cmVzb3VyY2UgcmVzOwogCVNWR0EzZFNoYWRlclR5cGUgdHlwZTsKQEAgLTQyLDQ5ICs0MCw4IEBA IHN0cnVjdCB2bXdfdXNlcl9zaGFkZXIgewogCXN0cnVjdCB2bXdfc2hhZGVyIHNoYWRlcjsKIH07 CiAKLS8qKgotICogZW51bSB2bXdfY29tcGF0X3NoYWRlcl9zdGF0ZSAtIFN0YWdpbmcgc3RhdGUg Zm9yIGNvbXBhdCBzaGFkZXJzCi0gKi8KLWVudW0gdm13X2NvbXBhdF9zaGFkZXJfc3RhdGUgewot CVZNV19DT01QQVRfQ09NTUlURUQsCi0JVk1XX0NPTVBBVF9BREQsCi0JVk1XX0NPTVBBVF9ERUwK LX07Ci0KLS8qKgotICogc3RydWN0IHZtd19jb21wYXRfc2hhZGVyIC0gTWV0YWRhdGEgZm9yIGNv bXBhdCBzaGFkZXJzLgotICoKLSAqIEBoYW5kbGU6IFRoZSBUVE0gaGFuZGxlIG9mIHRoZSBndWVz dCBiYWNrZWQgc2hhZGVyLgotICogQHRmaWxlOiBUaGUgc3RydWN0IHR0bV9vYmplY3RfZmlsZSB0 aGUgZ3Vlc3QgYmFja2VkIHNoYWRlciBpcyByZWdpc3RlcmVkCi0gKiB3aXRoLgotICogQGhhc2g6 IEhhc2ggaXRlbSBmb3IgbG9va3VwLgotICogQGhlYWQ6IExpc3QgaGVhZCBmb3Igc3RhZ2luZyBs aXN0cyBvciB0aGUgY29tcGF0IHNoYWRlciBtYW5hZ2VyIGxpc3QuCi0gKiBAc3RhdGU6IFN0YWdp bmcgc3RhdGUuCi0gKgotICogVGhlIHN0cnVjdHVyZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNtZGJ1 ZiBsb2NrLgotICovCi1zdHJ1Y3Qgdm13X2NvbXBhdF9zaGFkZXIgewotCXUzMiBoYW5kbGU7Ci0J c3RydWN0IHR0bV9vYmplY3RfZmlsZSAqdGZpbGU7Ci0Jc3RydWN0IGRybV9oYXNoX2l0ZW0gaGFz aDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7Ci0JZW51bSB2bXdfY29tcGF0X3NoYWRlcl9zdGF0 ZSBzdGF0ZTsKLX07Ci0KLS8qKgotICogc3RydWN0IHZtd19jb21wYXRfc2hhZGVyX21hbmFnZXIg LSBDb21wYXQgc2hhZGVyIG1hbmFnZXIuCi0gKgotICogQHNoYWRlcnM6IEhhc2ggdGFibGUgY29u dGFpbmluZyBzdGFnZWQgYW5kIGNvbW1pdGVkIGNvbXBhdCBzaGFkZXJzCi0gKiBAbGlzdDogTGlz dCBvZiBjb21taXRlZCBzaGFkZXJzLgotICogQGRldl9wcml2OiBQb2ludGVyIHRvIGEgZGV2aWNl IHByaXZhdGUgc3RydWN0dXJlLgotICoKLSAqIEBzaGFkZXJzIGFuZCBAbGlzdCBhcmUgcHJvdGVj dGVkIGJ5IHRoZSBjbWRidWYgbXV0ZXggZm9yIG5vdy4KLSAqLwotc3RydWN0IHZtd19jb21wYXRf c2hhZGVyX21hbmFnZXIgewotCXN0cnVjdCBkcm1fb3Blbl9oYXNoIHNoYWRlcnM7Ci0Jc3RydWN0 IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7Ci19Oworc3Rh dGljIHVpbnQ2NF90IHZtd191c2VyX3NoYWRlcl9zaXplOworc3RhdGljIHVpbnQ2NF90IHZtd19z aGFkZXJfc2l6ZTsKIAogc3RhdGljIHZvaWQgdm13X3VzZXJfc2hhZGVyX2ZyZWUoc3RydWN0IHZt d19yZXNvdXJjZSAqcmVzKTsKIHN0YXRpYyBzdHJ1Y3Qgdm13X3Jlc291cmNlICoKQEAgLTk4LDgg KzU1LDYgQEAgc3RhdGljIGludCB2bXdfZ2Jfc2hhZGVyX3VuYmluZChzdHJ1Y3Qgdm13X3Jlc291 cmNlICpyZXMsCiAJCQkJIHN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YWxfYnVmKTsKIHN0 YXRpYyBpbnQgdm13X2diX3NoYWRlcl9kZXN0cm95KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7 CiAKLXN0YXRpYyB1aW50NjRfdCB2bXdfdXNlcl9zaGFkZXJfc2l6ZTsKLQogc3RhdGljIGNvbnN0 IHN0cnVjdCB2bXdfdXNlcl9yZXNvdXJjZV9jb252IHVzZXJfc2hhZGVyX2NvbnYgPSB7CiAJLm9i amVjdF90eXBlID0gVk1XX1JFU19TSEFERVIsCiAJLmJhc2Vfb2JqX3RvX3JlcyA9IHZtd191c2Vy X3NoYWRlcl9iYXNlX3RvX3JlcywKQEAgLTM0Nyw2ICszMDIsMTYgQEAgc3RhdGljIHZvaWQgdm13 X3VzZXJfc2hhZGVyX2ZyZWUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQogCQkJICAgIHZtd191 c2VyX3NoYWRlcl9zaXplKTsKIH0KIAorc3RhdGljIHZvaWQgdm13X3NoYWRlcl9mcmVlKHN0cnVj dCB2bXdfcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3Qgdm13X3NoYWRlciAqc2hhZGVyID0gdm13 X3Jlc190b19zaGFkZXIocmVzKTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVz LT5kZXZfcHJpdjsKKworCWtmcmVlKHNoYWRlcik7CisJdHRtX21lbV9nbG9iYWxfZnJlZSh2bXdf bWVtX2dsb2IoZGV2X3ByaXYpLAorCQkJICAgIHZtd19zaGFkZXJfc2l6ZSk7Cit9CisKIC8qKgog ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB1c2VyIHNwYWNlIGhhcyBubyBtb3JlIHJl ZmVyZW5jZXMgb24gdGhlCiAgKiBiYXNlIG9iamVjdC4gSXQgcmVsZWFzZXMgdGhlIGJhc2Utb2Jq ZWN0J3MgcmVmZXJlbmNlIG9uIHRoZSByZXNvdXJjZSBvYmplY3QuCkBAIC0zNzEsMTMgKzMzNiwx MyBAQCBpbnQgdm13X3NoYWRlcl9kZXN0cm95X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsCiAJCQkJCSBUVE1fUkVGX1VTQUdFKTsKIH0KIAotc3RhdGljIGludCB2bXdf c2hhZGVyX2FsbG9jKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgc3RydWN0 IHZtd19kbWFfYnVmZmVyICpidWZmZXIsCi0JCQkgICAgc2l6ZV90IHNoYWRlcl9zaXplLAotCQkJ ICAgIHNpemVfdCBvZmZzZXQsCi0JCQkgICAgU1ZHQTNkU2hhZGVyVHlwZSBzaGFkZXJfdHlwZSwK LQkJCSAgICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKLQkJCSAgICB1MzIgKmhhbmRs ZSkKK3N0YXRpYyBpbnQgdm13X3VzZXJfc2hhZGVyX2FsbG9jKHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJCQkJIHN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqYnVmZmVyLAorCQkJCSBzaXpl X3Qgc2hhZGVyX3NpemUsCisJCQkJIHNpemVfdCBvZmZzZXQsCisJCQkJIFNWR0EzZFNoYWRlclR5 cGUgc2hhZGVyX3R5cGUsCisJCQkJIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxlLAorCQkJ CSB1MzIgKmhhbmRsZSkKIHsKIAlzdHJ1Y3Qgdm13X3VzZXJfc2hhZGVyICp1c2hhZGVyOwogCXN0 cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywgKnRtcDsKQEAgLTQ0Miw2ICs0MDcsNTYgQEAgb3V0Ogog fQogCiAKK3N0cnVjdCB2bXdfcmVzb3VyY2UgKnZtd19zaGFkZXJfYWxsb2Moc3RydWN0IHZtd19w cml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJ1ZmZl ciwKKwkJCQkgICAgICBzaXplX3Qgc2hhZGVyX3NpemUsCisJCQkJICAgICAgc2l6ZV90IG9mZnNl dCwKKwkJCQkgICAgICBTVkdBM2RTaGFkZXJUeXBlIHNoYWRlcl90eXBlKQoreworCXN0cnVjdCB2 bXdfc2hhZGVyICpzaGFkZXI7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOworCWludCByZXQ7 CisKKwkvKgorCSAqIEFwcHJveGltYXRlIGlkciBtZW1vcnkgdXNhZ2Ugd2l0aCAxMjggYnl0ZXMu IEl0IHdpbGwgYmUgbGltaXRlZAorCSAqIGJ5IG1heGltdW0gbnVtYmVyX29mIHNoYWRlcnMgYW55 d2F5LgorCSAqLworCWlmICh1bmxpa2VseSh2bXdfc2hhZGVyX3NpemUgPT0gMCkpCisJCXZtd19z aGFkZXJfc2l6ZSA9CisJCQl0dG1fcm91bmRfcG90KHNpemVvZihzdHJ1Y3Qgdm13X3NoYWRlcikp ICsgMTI4OworCisJcmV0ID0gdHRtX21lbV9nbG9iYWxfYWxsb2Modm13X21lbV9nbG9iKGRldl9w cml2KSwKKwkJCQkgICB2bXdfc2hhZGVyX3NpemUsCisJCQkJICAgZmFsc2UsIHRydWUpOworCWlm ICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQlE Uk1fRVJST1IoIk91dCBvZiBncmFwaGljcyBtZW1vcnkgZm9yIHNoYWRlciAiCisJCQkJICAiY3Jl YXRpb24uXG4iKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCXNoYWRlciA9IGt6YWxsb2Moc2l6 ZW9mKCpzaGFkZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoc2hhZGVyID09IE5VTEwp KSB7CisJCXR0bV9tZW1fZ2xvYmFsX2ZyZWUodm13X21lbV9nbG9iKGRldl9wcml2KSwKKwkJCQkg ICAgdm13X3NoYWRlcl9zaXplKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyOwor CX0KKworCXJlcyA9ICZzaGFkZXItPnJlczsKKworCS8qCisJICogRnJvbSBoZXJlIG9uLCB0aGUg ZGVzdHJ1Y3RvciB0YWtlcyBvdmVyIHJlc291cmNlIGZyZWVpbmcuCisJICovCisJcmV0ID0gdm13 X2diX3NoYWRlcl9pbml0KGRldl9wcml2LCByZXMsIHNoYWRlcl9zaXplLAorCQkJCSBvZmZzZXQs IHNoYWRlcl90eXBlLCBidWZmZXIsCisJCQkJIHZtd19zaGFkZXJfZnJlZSk7CisKK291dF9lcnI6 CisJcmV0dXJuIHJldCA/IEVSUl9QVFIocmV0KSA6IHJlczsKK30KKworCiBpbnQgdm13X3NoYWRl cl9kZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAg ICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CkBAIC00OTAsOCArNTA1LDggQEAgaW50 IHZtd19zaGFkZXJfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsCiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfYmFkX2FyZzsKIAotCXJl dCA9IHZtd19zaGFkZXJfYWxsb2MoZGV2X3ByaXYsIGJ1ZmZlciwgYXJnLT5zaXplLCBhcmctPm9m ZnNldCwKLQkJCSAgICAgICBzaGFkZXJfdHlwZSwgdGZpbGUsICZhcmctPnNoYWRlcl9oYW5kbGUp OworCXJldCA9IHZtd191c2VyX3NoYWRlcl9hbGxvYyhkZXZfcHJpdiwgYnVmZmVyLCBhcmctPnNp emUsIGFyZy0+b2Zmc2V0LAorCQkJCSAgICBzaGFkZXJfdHlwZSwgdGZpbGUsICZhcmctPnNoYWRl cl9oYW5kbGUpOwogCiAJdHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2Vt KTsKIG91dF9iYWRfYXJnOgpAQCAtNTAwLDIwMiArNTE1LDgzIEBAIG91dF9iYWRfYXJnOgogfQog CiAvKioKLSAqIHZtd19jb21wYXRfc2hhZGVyX2xvb2t1cCAtIExvb2sgdXAgYSBjb21wYXQgc2hh ZGVyCi0gKgotICogQG1hbjogUG9pbnRlciB0byB0aGUgY29tcGF0IHNoYWRlciBtYW5hZ2VyLgot ICogQHNoYWRlcl90eXBlOiBUaGUgc2hhZGVyIHR5cGUsIHRoYXQgY29tYmluZWQgd2l0aCB0aGUg dXNlcl9rZXkgaWRlbnRpZmllcwotICogdGhlIHNoYWRlci4KLSAqIEB1c2VyX2tleTogT24gZW50 cnksIHRoaXMgc2hvdWxkIGJlIGEgcG9pbnRlciB0byB0aGUgdXNlcl9rZXkuCi0gKiBPbiBzdWNj ZXNzZnVsIGV4aXQsIGl0IHdpbGwgY29udGFpbiB0aGUgZ3Vlc3QtYmFja2VkIHNoYWRlcidzIFRU TSBoYW5kbGUuCisgKiB2bXdfY29tcGF0X3NoYWRlcl9pZF9vayAtIENoZWNrIHdoZXRoZXIgYSBj b21wYXQgc2hhZGVyIHVzZXIga2V5IGFuZAorICogc2hhZGVyIHR5cGUgYXJlIHdpdGhpbiB2YWxp ZCBib3VuZHMuCiAgKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIE5vbi16ZXJvIG9uIGZhaWx1 cmUsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlIHBvaW50ZWQKLSAqIHRvIGJ5IEB1c2VyX2tleSBp cyB1bm1vZGlmaWVkLgotICovCi1pbnQgdm13X2NvbXBhdF9zaGFkZXJfbG9va3VwKHN0cnVjdCB2 bXdfY29tcGF0X3NoYWRlcl9tYW5hZ2VyICptYW4sCi0JCQkgICAgIFNWR0EzZFNoYWRlclR5cGUg c2hhZGVyX3R5cGUsCi0JCQkgICAgIHUzMiAqdXNlcl9rZXkpCi17Ci0Jc3RydWN0IGRybV9oYXNo X2l0ZW0gKmhhc2g7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGtleSA9ICp1c2VyX2tleSB8 IChzaGFkZXJfdHlwZSA8PCAyNCk7Ci0KLQlyZXQgPSBkcm1faHRfZmluZF9pdGVtKCZtYW4tPnNo YWRlcnMsIGtleSwgJmhhc2gpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCXJldHVybiBy ZXQ7Ci0KLQkqdXNlcl9rZXkgPSBkcm1faGFzaF9lbnRyeShoYXNoLCBzdHJ1Y3Qgdm13X2NvbXBh dF9zaGFkZXIsCi0JCQkJICAgaGFzaCktPmhhbmRsZTsKLQotCXJldHVybiAwOwotfQotCi0vKioK LSAqIHZtd19jb21wYXRfc2hhZGVyX2ZyZWUgLSBGcmVlIGEgY29tcGF0IHNoYWRlci4KLSAqCi0g KiBAbWFuOiBQb2ludGVyIHRvIHRoZSBjb21wYXQgc2hhZGVyIG1hbmFnZXIuCi0gKiBAZW50cnk6 IFBvaW50ZXIgdG8gYSBzdHJ1Y3Qgdm13X2NvbXBhdF9zaGFkZXIuCi0gKgotICogRnJlZXMgYSBz dHJ1Y3Qgdm13X2NvbXBhdF9zaGRlciBlbnRyeSBhbmQgZHJvcHMgaXRzIHJlZmVyZW5jZSB0byB0 aGUKLSAqIGd1ZXN0IGJhY2tlZCBzaGFkZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHZtd19jb21wYXRf c2hhZGVyX2ZyZWUoc3RydWN0IHZtd19jb21wYXRfc2hhZGVyX21hbmFnZXIgKm1hbiwKLQkJCQkg ICBzdHJ1Y3Qgdm13X2NvbXBhdF9zaGFkZXIgKmVudHJ5KQotewotCWxpc3RfZGVsKCZlbnRyeS0+ aGVhZCk7Ci0JV0FSTl9PTihkcm1faHRfcmVtb3ZlX2l0ZW0oJm1hbi0+c2hhZGVycywgJmVudHJ5 LT5oYXNoKSk7Ci0JV0FSTl9PTih0dG1fcmVmX29iamVjdF9iYXNlX3VucmVmKGVudHJ5LT50Zmls ZSwgZW50cnktPmhhbmRsZSwKLQkJCQkJICBUVE1fUkVGX1VTQUdFKSk7Ci0Ja2ZyZWUoZW50cnkp OwotfQotCi0vKioKLSAqIHZtd19jb21wYXRfc2hhZGVyc19jb21taXQgLSBDb21taXQgYSBsaXN0 IG9mIGNvbXBhdCBzaGFkZXIgYWN0aW9ucy4KLSAqCi0gKiBAbWFuOiBQb2ludGVyIHRvIHRoZSBj b21wYXQgc2hhZGVyIG1hbmFnZXIuCi0gKiBAbGlzdDogQ2FsbGVyJ3MgbGlzdCBvZiBjb21wYXQg c2hhZGVyIGFjdGlvbnMuCisgKiBAdXNlcl9rZXk6IFVzZXIgc3BhY2UgaWQgb2YgdGhlIHNoYWRl ci4KKyAqIEBzaGFkZXJfdHlwZTogU2hhZGVyIHR5cGUuCiAgKgotICogVGhpcyBmdW5jdGlvbiBj b21taXRzIGEgbGlzdCBvZiBjb21wYXQgc2hhZGVyIGFkZGl0aW9ucyBvciByZW1vdmFscy4KLSAq IEl0IGlzIHR5cGljYWxseSBjYWxsZWQgd2hlbiB0aGUgZXhlY2J1ZiBpb2N0bCBjYWxsIHRyaWdn ZXJpbmcgdGhlc2UKLSAqIGFjdGlvbnMgaGFzIGNvbW1pdGVkIHRoZSBmaWZvIGNvbnRlbnRzIHRv IHRoZSBkZXZpY2UuCisgKiBSZXR1cm5zIHRydWUgaWYgdmFsaWQgZmFsc2UgaWYgbm90LgogICov Ci12b2lkIHZtd19jb21wYXRfc2hhZGVyc19jb21taXQoc3RydWN0IHZtd19jb21wYXRfc2hhZGVy X21hbmFnZXIgKm1hbiwKLQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorc3RhdGlj IGJvb2wgdm13X2NvbXBhdF9zaGFkZXJfaWRfb2sodTMyIHVzZXJfa2V5LCBTVkdBM2RTaGFkZXJU eXBlIHNoYWRlcl90eXBlKQogewotCXN0cnVjdCB2bXdfY29tcGF0X3NoYWRlciAqZW50cnksICpu ZXh0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCBsaXN0LCBoZWFk KSB7Ci0JCWxpc3RfZGVsKCZlbnRyeS0+aGVhZCk7Ci0JCXN3aXRjaCAoZW50cnktPnN0YXRlKSB7 Ci0JCWNhc2UgVk1XX0NPTVBBVF9BREQ6Ci0JCQllbnRyeS0+c3RhdGUgPSBWTVdfQ09NUEFUX0NP TU1JVEVEOwotCQkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmhlYWQsICZtYW4tPmxpc3QpOwotCQkJ YnJlYWs7Ci0JCWNhc2UgVk1XX0NPTVBBVF9ERUw6Ci0JCQl0dG1fcmVmX29iamVjdF9iYXNlX3Vu cmVmKGVudHJ5LT50ZmlsZSwgZW50cnktPmhhbmRsZSwKLQkJCQkJCSAgVFRNX1JFRl9VU0FHRSk7 Ci0JCQlrZnJlZShlbnRyeSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUJVRygpOwotCQkJ YnJlYWs7Ci0JCX0KLQl9CisJcmV0dXJuIHVzZXJfa2V5IDw9ICgoMSA8PCAyMCkgLSAxKSAmJiAo dW5zaWduZWQpIHNoYWRlcl90eXBlIDwgMTY7CiB9CiAKIC8qKgotICogdm13X2NvbXBhdF9zaGFk ZXJzX3JldmVydCAtIFJldmVydCBhIGxpc3Qgb2YgY29tcGF0IHNoYWRlciBhY3Rpb25zCisgKiB2 bXdfY29tcGF0X3NoYWRlcl9rZXkgLSBDb21wdXRlIGEgaGFzaCBrZXkgc3VpdGFibGUgZm9yIGEg Y29tcGF0IHNoYWRlci4KICAqCi0gKiBAbWFuOiBQb2ludGVyIHRvIHRoZSBjb21wYXQgc2hhZGVy IG1hbmFnZXIuCi0gKiBAbGlzdDogQ2FsbGVyJ3MgbGlzdCBvZiBjb21wYXQgc2hhZGVyIGFjdGlv bnMuCisgKiBAdXNlcl9rZXk6IFVzZXIgc3BhY2UgaWQgb2YgdGhlIHNoYWRlci4KKyAqIEBzaGFk ZXJfdHlwZTogU2hhZGVyIHR5cGUuCiAgKgotICogVGhpcyBmdW5jdGlvbiByZXZlcnRzIGEgbGlz dCBvZiBjb21wYXQgc2hhZGVyIGFkZGl0aW9ucyBvciByZW1vdmFscy4KLSAqIEl0IGlzIHR5cGlj YWxseSBjYWxsZWQgd2hlbiB0aGUgZXhlY2J1ZiBpb2N0bCBjYWxsIHRyaWdnZXJpbmcgdGhlc2UK LSAqIGFjdGlvbnMgZmFpbGVkIGZvciBzb21lIHJlYXNvbiwgYW5kIHRoZSBjb21tYW5kIHN0cmVh bSB3YXMgbmV2ZXIKLSAqIHN1Ym1pdHRlZC4KKyAqIFJldHVybnMgYSBoYXNoIGtleSBzdWl0YWJs ZSBmb3IgYSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VkIHJlc291cmNlCisgKiBtYW5hZ2VyIGhhc2gg dGFibGUuCiAgKi8KLXZvaWQgdm13X2NvbXBhdF9zaGFkZXJzX3JldmVydChzdHJ1Y3Qgdm13X2Nv bXBhdF9zaGFkZXJfbWFuYWdlciAqbWFuLAotCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxp c3QpCitzdGF0aWMgdTMyIHZtd19jb21wYXRfc2hhZGVyX2tleSh1MzIgdXNlcl9rZXksIFNWR0Ez ZFNoYWRlclR5cGUgc2hhZGVyX3R5cGUpCiB7Ci0Jc3RydWN0IHZtd19jb21wYXRfc2hhZGVyICpl bnRyeSwgKm5leHQ7Ci0JaW50IHJldDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRy eSwgbmV4dCwgbGlzdCwgaGVhZCkgewotCQlzd2l0Y2ggKGVudHJ5LT5zdGF0ZSkgewotCQljYXNl IFZNV19DT01QQVRfQUREOgotCQkJdm13X2NvbXBhdF9zaGFkZXJfZnJlZShtYW4sIGVudHJ5KTsK LQkJCWJyZWFrOwotCQljYXNlIFZNV19DT01QQVRfREVMOgotCQkJcmV0ID0gZHJtX2h0X2luc2Vy dF9pdGVtKCZtYW4tPnNoYWRlcnMsICZlbnRyeS0+aGFzaCk7Ci0JCQlsaXN0X2RlbCgmZW50cnkt PmhlYWQpOwotCQkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmhlYWQsICZtYW4tPmxpc3QpOwotCQkJ ZW50cnktPnN0YXRlID0gVk1XX0NPTVBBVF9DT01NSVRFRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0 OgotCQkJQlVHKCk7Ci0JCQlicmVhazsKLQkJfQotCX0KKwlyZXR1cm4gdXNlcl9rZXkgfCAoc2hh ZGVyX3R5cGUgPDwgMjApOwogfQogCiAvKioKICAqIHZtd19jb21wYXRfc2hhZGVyX3JlbW92ZSAt IFN0YWdlIGEgY29tcGF0IHNoYWRlciBmb3IgcmVtb3ZhbC4KICAqCi0gKiBAbWFuOiBQb2ludGVy IHRvIHRoZSBjb21wYXQgc2hhZGVyIG1hbmFnZXIKKyAqIEBtYW46IFBvaW50ZXIgdG8gdGhlIGNv bXBhdCBzaGFkZXIgbWFuYWdlciBpZGVudGlmeWluZyB0aGUgc2hhZGVyIG5hbWVzcGFjZS4KICAq IEB1c2VyX2tleTogVGhlIGtleSB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHNoYWRlci4g VGhlIGtleSBpcwogICogdW5pcXVlIHRvIHRoZSBzaGFkZXIgdHlwZS4KICAqIEBzaGFkZXJfdHlw ZTogU2hhZGVyIHR5cGUuCi0gKiBAbGlzdDogQ2FsbGVyJ3MgbGlzdCBvZiBzdGFnZWQgc2hhZGVy IGFjdGlvbnMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzdGFnZXMgYSBjb21wYXQgc2hhZGVyIGZv ciByZW1vdmFsIGFuZCByZW1vdmVzIHRoZSBrZXkgZnJvbQotICogdGhlIHNoYWRlciBtYW5hZ2Vy J3MgaGFzaCB0YWJsZS4gSWYgdGhlIHNoYWRlciB3YXMgcHJldmlvdXNseSBvbmx5IHN0YWdlZAot ICogZm9yIGFkZGl0aW9uIGl0IGlzIGNvbXBsZXRlbHkgcmVtb3ZlZCAoQnV0IHRoZSBleGVjYnVm IGNvZGUgbWF5IGtlZXAgYQotICogcmVmZXJlbmNlIGlmIGl0IHdhcyBib3VuZCB0byBhIGNvbnRl eHQgYmV0d2VlbiBhZGRpdGlvbiBhbmQgcmVtb3ZhbCkuIElmCi0gKiBpdCB3YXMgcHJldmlvdXNs eSBjb21taXRlZCB0byB0aGUgbWFuYWdlciwgaXQgaXMgc3RhZ2VkIGZvciByZW1vdmFsLgorICog QGxpc3Q6IENhbGxlcidzIGxpc3Qgb2Ygc3RhZ2VkIGNvbW1hbmQgYnVmZmVyIHJlc291cmNlIGFj dGlvbnMuCiAgKi8KLWludCB2bXdfY29tcGF0X3NoYWRlcl9yZW1vdmUoc3RydWN0IHZtd19jb21w YXRfc2hhZGVyX21hbmFnZXIgKm1hbiwKK2ludCB2bXdfY29tcGF0X3NoYWRlcl9yZW1vdmUoc3Ry dWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwKIAkJCSAgICAgdTMyIHVzZXJfa2V5LCBT VkdBM2RTaGFkZXJUeXBlIHNoYWRlcl90eXBlLAogCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICps aXN0KQogewotCXN0cnVjdCB2bXdfY29tcGF0X3NoYWRlciAqZW50cnk7Ci0Jc3RydWN0IGRybV9o YXNoX2l0ZW0gKmhhc2g7Ci0JaW50IHJldDsKLQotCXJldCA9IGRybV9odF9maW5kX2l0ZW0oJm1h bi0+c2hhZGVycywgdXNlcl9rZXkgfCAoc2hhZGVyX3R5cGUgPDwgMjQpLAotCQkJICAgICAgICZo YXNoKTsKLQlpZiAobGlrZWx5KHJldCAhPSAwKSkKKwlpZiAoIXZtd19jb21wYXRfc2hhZGVyX2lk X29rKHVzZXJfa2V5LCBzaGFkZXJfdHlwZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZW50cnkg PSBkcm1faGFzaF9lbnRyeShoYXNoLCBzdHJ1Y3Qgdm13X2NvbXBhdF9zaGFkZXIsIGhhc2gpOwot Ci0Jc3dpdGNoIChlbnRyeS0+c3RhdGUpIHsKLQljYXNlIFZNV19DT01QQVRfQUREOgotCQl2bXdf Y29tcGF0X3NoYWRlcl9mcmVlKG1hbiwgZW50cnkpOwotCQlicmVhazsKLQljYXNlIFZNV19DT01Q QVRfQ09NTUlURUQ6Ci0JCSh2b2lkKSBkcm1faHRfcmVtb3ZlX2l0ZW0oJm1hbi0+c2hhZGVycywg JmVudHJ5LT5oYXNoKTsKLQkJbGlzdF9kZWwoJmVudHJ5LT5oZWFkKTsKLQkJZW50cnktPnN0YXRl ID0gVk1XX0NPTVBBVF9ERUw7Ci0JCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5oZWFkLCBsaXN0KTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAw OworCXJldHVybiB2bXdfY21kYnVmX3Jlc19yZW1vdmUobWFuLCB2bXdfY21kYnVmX3Jlc19jb21w YXRfc2hhZGVyLAorCQkJCSAgICAgdm13X2NvbXBhdF9zaGFkZXJfa2V5KHVzZXJfa2V5LAorCQkJ CQkJCSAgIHNoYWRlcl90eXBlKSwKKwkJCQkgICAgIGxpc3QpOwogfQogCiAvKioKLSAqIHZtd19j b21wYXRfc2hhZGVyX2FkZCAtIENyZWF0ZSBhIGNvbXBhdCBzaGFkZXIgYW5kIGFkZCB0aGUKLSAq IGtleSB0byB0aGUgbWFuYWdlcgorICogdm13X2NvbXBhdF9zaGFkZXJfYWRkIC0gQ3JlYXRlIGEg Y29tcGF0IHNoYWRlciBhbmQgc3RhZ2UgaXQgZm9yIGFkZGl0aW9uCisgKiBhcyBhIGNvbW1hbmQg YnVmZmVyIG1hbmFnZWQgcmVzb3VyY2UuCiAgKgotICogQG1hbjogUG9pbnRlciB0byB0aGUgY29t cGF0IHNoYWRlciBtYW5hZ2VyCisgKiBAbWFuOiBQb2ludGVyIHRvIHRoZSBjb21wYXQgc2hhZGVy IG1hbmFnZXIgaWRlbnRpZnlpbmcgdGhlIHNoYWRlciBuYW1lc3BhY2UuCiAgKiBAdXNlcl9rZXk6 IFRoZSBrZXkgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzaGFkZXIuIFRoZSBrZXkgaXMK ICAqIHVuaXF1ZSB0byB0aGUgc2hhZGVyIHR5cGUuCiAgKiBAYnl0ZWNvZGU6IFBvaW50ZXIgdG8g dGhlIGJ5dGVjb2RlIG9mIHRoZSBzaGFkZXIuCiAgKiBAc2hhZGVyX3R5cGU6IFNoYWRlciB0eXBl LgogICogQHRmaWxlOiBQb2ludGVyIHRvIGEgc3RydWN0IHR0bV9vYmplY3RfZmlsZSB0aGF0IHRo ZSBndWVzdC1iYWNrZWQgc2hhZGVyIGlzCiAgKiB0byBiZSBjcmVhdGVkIHdpdGguCi0gKiBAbGlz dDogQ2FsbGVyJ3MgbGlzdCBvZiBzdGFnZWQgc2hhZGVyIGFjdGlvbnMuCisgKiBAbGlzdDogQ2Fs bGVyJ3MgbGlzdCBvZiBzdGFnZWQgY29tbWFuZCBidWZmZXIgcmVzb3VyY2UgYWN0aW9ucy4KICAq Ci0gKiBOb3RlIHRoYXQgb25seSB0aGUga2V5IGlzIGFkZGVkIHRvIHRoZSBzaGFkZXIgbWFuYWdl cidzIGhhc2ggdGFibGUuCi0gKiBUaGUgc2hhZGVyIGlzIG5vdCB5ZXQgYWRkZWQgdG8gdGhlIHNo YWRlciBtYW5hZ2VyJ3MgbGlzdCBvZiBzaGFkZXJzLgogICovCi1pbnQgdm13X2NvbXBhdF9zaGFk ZXJfYWRkKHN0cnVjdCB2bXdfY29tcGF0X3NoYWRlcl9tYW5hZ2VyICptYW4sCitpbnQgdm13X2Nv bXBhdF9zaGFkZXJfYWRkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgIHN0cnVj dCB2bXdfY21kYnVmX3Jlc19tYW5hZ2VyICptYW4sCiAJCQkgIHUzMiB1c2VyX2tleSwgY29uc3Qg dm9pZCAqYnl0ZWNvZGUsCiAJCQkgIFNWR0EzZFNoYWRlclR5cGUgc2hhZGVyX3R5cGUsCiAJCQkg IHNpemVfdCBzaXplLAotCQkJICBzdHJ1Y3QgdHRtX29iamVjdF9maWxlICp0ZmlsZSwKIAkJCSAg c3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlzdHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmJ1ZjsK IAlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqIG1hcDsKIAlib29sIGlzX2lvbWVtOwotCXN0cnVjdCB2 bXdfY29tcGF0X3NoYWRlciAqY29tcGF0OwotCXUzMiBoYW5kbGU7CiAJaW50IHJldDsKKwlzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXM7CiAKLQlpZiAodXNlcl9rZXkgPiAoKDEgPDwgMjQpIC0gMSkg fHwgKHVuc2lnbmVkKSBzaGFkZXJfdHlwZSA+IDE2KQorCWlmICghdm13X2NvbXBhdF9zaGFkZXJf aWRfb2sodXNlcl9rZXksIHNoYWRlcl90eXBlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBB bGxvY2F0ZSBhbmQgcGluIGEgRE1BIGJ1ZmZlciAqLwpAQCAtNzAzLDcgKzU5OSw3IEBAIGludCB2 bXdfY29tcGF0X3NoYWRlcl9hZGQoc3RydWN0IHZtd19jb21wYXRfc2hhZGVyX21hbmFnZXIgKm1h biwKIAlpZiAodW5saWtlbHkoYnVmID09IE5VTEwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJl dCA9IHZtd19kbWFidWZfaW5pdChtYW4tPmRldl9wcml2LCBidWYsIHNpemUsICZ2bXdfc3lzX25l X3BsYWNlbWVudCwKKwlyZXQgPSB2bXdfZG1hYnVmX2luaXQoZGV2X3ByaXYsIGJ1Ziwgc2l6ZSwg JnZtd19zeXNfbmVfcGxhY2VtZW50LAogCQkJICAgICAgdHJ1ZSwgdm13X2RtYWJ1Zl9ib19mcmVl KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dDsKQEAgLTcyOCw4NCArNjI0 LDQwIEBAIGludCB2bXdfY29tcGF0X3NoYWRlcl9hZGQoc3RydWN0IHZtd19jb21wYXRfc2hhZGVy X21hbmFnZXIgKm1hbiwKIAlXQVJOX09OKHJldCAhPSAwKTsKIAl0dG1fYm9fdW5yZXNlcnZlKCZi dWYtPmJhc2UpOwogCi0JLyogQ3JlYXRlIGEgZ3Vlc3QtYmFja2VkIHNoYWRlciBjb250YWluZXIg YmFja2VkIGJ5IHRoZSBkbWEgYnVmZmVyICovCi0JcmV0ID0gdm13X3NoYWRlcl9hbGxvYyhtYW4t PmRldl9wcml2LCBidWYsIHNpemUsIDAsIHNoYWRlcl90eXBlLAotCQkJICAgICAgIHRmaWxlLCAm aGFuZGxlKTsKLQl2bXdfZG1hYnVmX3VucmVmZXJlbmNlKCZidWYpOworCXJlcyA9IHZtd19zaGFk ZXJfYWxsb2MoZGV2X3ByaXYsIGJ1Ziwgc2l6ZSwgMCwgc2hhZGVyX3R5cGUpOwogCWlmICh1bmxp a2VseShyZXQgIT0gMCkpCiAJCWdvdG8gbm9fcmVzZXJ2ZTsKLQkvKgotCSAqIENyZWF0ZSBhIGNv bXBhdCBzaGFkZXIgc3RydWN0dXJlIGFuZCBzdGFnZSBpdCBmb3IgaW5zZXJ0aW9uCi0JICogaW4g dGhlIG1hbmFnZXIKLQkgKi8KLQljb21wYXQgPSBremFsbG9jKHNpemVvZigqY29tcGF0KSwgR0ZQ X0tFUk5FTCk7Ci0JaWYgKGNvbXBhdCA9PSBOVUxMKQotCQlnb3RvIG5vX2NvbXBhdDsKLQotCWNv bXBhdC0+aGFzaC5rZXkgPSB1c2VyX2tleSB8ICAoc2hhZGVyX3R5cGUgPDwgMjQpOwotCXJldCA9 IGRybV9odF9pbnNlcnRfaXRlbSgmbWFuLT5zaGFkZXJzLCAmY29tcGF0LT5oYXNoKTsKLQlpZiAo dW5saWtlbHkocmV0ICE9IDApKQotCQlnb3RvIG91dF9pbnZhbGlkX2tleTsKLQotCWNvbXBhdC0+ c3RhdGUgPSBWTVdfQ09NUEFUX0FERDsKLQljb21wYXQtPmhhbmRsZSA9IGhhbmRsZTsKLQljb21w YXQtPnRmaWxlID0gdGZpbGU7Ci0JbGlzdF9hZGRfdGFpbCgmY29tcGF0LT5oZWFkLCBsaXN0KTsK LQotCXJldHVybiAwOwogCi1vdXRfaW52YWxpZF9rZXk6Ci0Ja2ZyZWUoY29tcGF0KTsKLW5vX2Nv bXBhdDoKLQl0dG1fcmVmX29iamVjdF9iYXNlX3VucmVmKHRmaWxlLCBoYW5kbGUsIFRUTV9SRUZf VVNBR0UpOworCXJldCA9IHZtd19jbWRidWZfcmVzX2FkZChtYW4sIHZtd19jbWRidWZfcmVzX2Nv bXBhdF9zaGFkZXIsCisJCQkJIHZtd19jb21wYXRfc2hhZGVyX2tleSh1c2VyX2tleSwgc2hhZGVy X3R5cGUpLAorCQkJCSByZXMsIGxpc3QpOworCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVz KTsKIG5vX3Jlc2VydmU6CisJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmYnVmKTsKIG91dDoKIAly ZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIHZtd19jb21wYXRfc2hhZGVyX21hbl9jcmVhdGUgLSBD cmVhdGUgYSBjb21wYXQgc2hhZGVyIG1hbmFnZXIKLSAqCi0gKiBAZGV2X3ByaXY6IFBvaW50ZXIg dG8gYSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuCi0gKgotICogVHlwaWNhbGx5IGRvbmUgYXQg ZmlsZSBvcGVuIHRpbWUuIElmIHN1Y2Nlc3NmdWwgcmV0dXJucyBhIHBvaW50ZXIgdG8gYQotICog Y29tcGF0IHNoYWRlciBtYW5hZ2VyLiBPdGhlcndpc2UgcmV0dXJucyBhbiBlcnJvciBwb2ludGVy LgotICovCi1zdHJ1Y3Qgdm13X2NvbXBhdF9zaGFkZXJfbWFuYWdlciAqCi12bXdfY29tcGF0X3No YWRlcl9tYW5fY3JlYXRlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0 IHZtd19jb21wYXRfc2hhZGVyX21hbmFnZXIgKm1hbjsKLQlpbnQgcmV0OwotCi0JbWFuID0ga3ph bGxvYyhzaXplb2YoKm1hbiksIEdGUF9LRVJORUwpOwotCWlmIChtYW4gPT0gTlVMTCkKLQkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQltYW4tPmRldl9wcml2ID0gZGV2X3ByaXY7Ci0JSU5J VF9MSVNUX0hFQUQoJm1hbi0+bGlzdCk7Ci0JcmV0ID0gZHJtX2h0X2NyZWF0ZSgmbWFuLT5zaGFk ZXJzLCBWTVdfQ09NUEFUX1NIQURFUl9IVF9PUkRFUik7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXR1 cm4gbWFuOwotCi0Ja2ZyZWUobWFuKTsKLQlyZXR1cm4gRVJSX1BUUihyZXQpOwotfQotCi0vKioK LSAqIHZtd19jb21wYXRfc2hhZGVyX21hbl9kZXN0cm95IC0gRGVzdHJveSBhIGNvbXBhdCBzaGFk ZXIgbWFuYWdlcgorICogdm13X2NvbXBhdF9zaGFkZXJfbG9va3VwIC0gTG9vayB1cCBhIGNvbXBh dCBzaGFkZXIKICAqCi0gKiBAbWFuOiBQb2ludGVyIHRvIHRoZSBzaGFkZXIgbWFuYWdlciB0byBk ZXN0cm95LgorICogQG1hbjogUG9pbnRlciB0byB0aGUgY29tbWFuZCBidWZmZXIgbWFuYWdlZCBy ZXNvdXJjZSBtYW5hZ2VyIGlkZW50aWZ5aW5nCisgKiB0aGUgc2hhZGVyIG5hbWVzcGFjZS4KKyAq IEB1c2VyX2tleTogVGhlIHVzZXIgc3BhY2UgaWQgb2YgdGhlIHNoYWRlci4KKyAqIEBzaGFkZXJf dHlwZTogVGhlIHNoYWRlciB0eXBlLgogICoKLSAqIFR5cGljYWxseSBkb25lIGF0IGZpbGUgY2xv c2UgdGltZS4KKyAqIFJldHVybnMgYSByZWZjb3VudGVkIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgdm13 X3Jlc291cmNlIGlmIHRoZSBzaGFkZXIgd2FzCisgKiBmb3VuZC4gQW4gZXJyb3IgcG9pbnRlciBv dGhlcndpc2UuCiAgKi8KLXZvaWQgdm13X2NvbXBhdF9zaGFkZXJfbWFuX2Rlc3Ryb3koc3RydWN0 IHZtd19jb21wYXRfc2hhZGVyX21hbmFnZXIgKm1hbikKK3N0cnVjdCB2bXdfcmVzb3VyY2UgKgor dm13X2NvbXBhdF9zaGFkZXJfbG9va3VwKHN0cnVjdCB2bXdfY21kYnVmX3Jlc19tYW5hZ2VyICpt YW4sCisJCQkgdTMyIHVzZXJfa2V5LAorCQkJIFNWR0EzZFNoYWRlclR5cGUgc2hhZGVyX3R5cGUp CiB7Ci0Jc3RydWN0IHZtd19jb21wYXRfc2hhZGVyICplbnRyeSwgKm5leHQ7Ci0KLQltdXRleF9s b2NrKCZtYW4tPmRldl9wcml2LT5jbWRidWZfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZShlbnRyeSwgbmV4dCwgJm1hbi0+bGlzdCwgaGVhZCkKLQkJdm13X2NvbXBhdF9zaGFkZXJf ZnJlZShtYW4sIGVudHJ5KTsKKwlpZiAoIXZtd19jb21wYXRfc2hhZGVyX2lkX29rKHVzZXJfa2V5 LCBzaGFkZXJfdHlwZSkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCi0JbXV0ZXhfdW5s b2NrKCZtYW4tPmRldl9wcml2LT5jbWRidWZfbXV0ZXgpOwotCWtmcmVlKG1hbik7CisJcmV0dXJu IHZtd19jbWRidWZfcmVzX2xvb2t1cChtYW4sIHZtd19jbWRidWZfcmVzX2NvbXBhdF9zaGFkZXIs CisJCQkJICAgICB2bXdfY29tcGF0X3NoYWRlcl9rZXkodXNlcl9rZXksCisJCQkJCQkJICAgc2hh ZGVyX3R5cGUpKTsKIH0KLS0gCjEuOC4zLjIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK