From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 10518 invoked from network); 1 Jul 2021 18:22:22 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 1 Jul 2021 18:22:22 -0000 Received: from mail-pg1-f170.google.com ([209.85.215.170]) by 1ess; Thu Jul 1 13:42:23 -0400 2021 Received: by mail-pg1-f170.google.com with SMTP id t9so6798154pgn.4 for <9front@9front.org>; Thu, 01 Jul 2021 10:42:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=aiTsI62z4HUh1XTpx+odVFyvGGDguj6cuFElMOrhLyk=; b=kSIuh97Q8tCVlmVWqu0eR2nL6wowsR2nG5bfp3RlkHKlzzWQMUlEiaE4oQ2HcZxPB/ bUPU3lfyPYXVTkoOgD4ybcR7JuZFjThLXp63xrYkfCu9ZMiN7wvJxFSpVtOWXPVQ7RZ/ emcI7Q5nU2iXbU63E01se/8Ku+akyXccCKgOFUPiWFX27uPlouJmr5ngj6sTZS5IILM2 Q+vnaiyCCNZ7Fw4B7UwrLqNdWwvlM78QY8VnbmkNfs7gf1wv80Lu+refpI4r9DlHJ4aa /MaeIsgFvDzA47m5u6GTAr/XfP++EYELLX1/u0YNMxCZfeQ3PHM3fiCElsMMczDecGMP oC9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=aiTsI62z4HUh1XTpx+odVFyvGGDguj6cuFElMOrhLyk=; b=iv3X139FHToxTutlZJzBl52z1Ys2Y2TyCwsQV7asObciJlHeFCVHtHfbgpNN/WTuDk oHkuvNruxgl1bIGmjMVE0OvWcENsGcSEL4MYsH+jP6jzua4bTURfb/Mp0YhSGDYF8c4H Z7GBwg1E7REDGSYAl3qTRHuXvkfv9eg0Ir1XZpokyhSrhbHhD7yY1Sygb0vQp47A36i8 R7WdioQcOG6X8GEDwxg2TaCHbuBt76kHIcNAXjv7t33efI9wUuwEQibiEf1NAS47wwfV LygOj3uSCUObo68n7AmmczMQwVfclGfDBVU2TSsF7xIPnDa1f8bFiIsz3vzrKrWsCysW ds4Q== X-Gm-Message-State: AOAM532kjuErPuynH7JgkI/WeGg1jmrYkwespi7GpqQ5J5OZNzg3DUas PB38E73qDwTJ7wTjije7XQhhkjXMF+Mwa36gjyPZJ/MnQxa+Ww== X-Google-Smtp-Source: ABdhPJxK54b1wEf3zkroBE1RJCJYkPrQJTESSBy1Gqog9FKRSVZdQhfEltjJB98VhqE4v7rBnFOOW6JTCWJpiDtkgEk= X-Received: by 2002:a63:db43:: with SMTP id x3mr319613pgi.383.1625155750040; Thu, 01 Jul 2021 09:09:10 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?B?Sm9zw6kgTWlndWVsIFPDoW5jaGV6IEdhcmPDrWE=?= Date: Thu, 1 Jul 2021 18:08:56 +0200 Message-ID: To: 9front@9front.org Content-Type: multipart/mixed; boundary="0000000000002fdc4d05c6120fa7" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: template hosting Subject: [9front] Ralink RT3090 driver Reply-To: 9front@9front.org Precedence: bulk --0000000000002fdc4d05c6120fa7 Content-Type: text/plain; charset="UTF-8" Hello everyone, My laptop has a Ralink RT3090 Wi-Fi card, which I couldn't get working. However, the FQA marks it as working (section 3.2.3.2.3 and sysinfo of sl's X60s in section 3.2.5.2.1). Can somebody check if that's true? If the FQA is wrong, kemal has been working on the attached patch for that card. It mostly works, but under heavy load it disconnects (ip/ping -n 100000 -i 10 will fail at some point) and we couldn't figure it out. Testing would be greatly appreciated! Cheers, jmi2k --0000000000002fdc4d05c6120fa7 Content-Type: application/octet-stream; name="rt3290.diff" Content-Disposition: attachment; filename="rt3290.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kql3qmck0 LS0tIC9zeXMvc3JjLzkvcGMvZXRoZXJydDI4NjAuYworKysgL3N5cy9zcmMvOS9wYy9ldGhlcnJ0 Mjg2MC5jCkBAIC0xLDkgKzEsOSBAQAogLyogCiAgKiBSYWxpbmsgUlQyODYwIGRyaXZlcgogICoK LSAqIFdyaXR0ZW4gd2l0aG91dCBhbnkgZG9jdW1lbnRhdGlvbiBidXQgRGFtaWVuIEJlcmdhbWlu aXMKLSAqIE9wZW5CU0QgcmFsKDQpIGRyaXZlciBzb3VyY2VzLiBSZXF1aXJlcyByYWxpbmsgZmly bXdhcmUKLSAqIHRvIGJlIHByZXNlbnQgaW4gL2xpYi9maXJtd2FyZS9yYWwtcnQyODYwIG9uIGF0 dGFjaC4KKyAqIFdyaXR0ZW4gd2l0aG91dCBhbnkgZG9jdW1lbnRhdGlvbiBidXQgRGFtaWVuIEJl cmdhbWluaSdzCisgKiBPcGVuQlNEIHJhbCg0KSBkcml2ZXIgc291cmNlcy4gUmVxdWlyZXMgUmFs aW5rIGZpcm13YXJlCisgKiB0byBiZSBwcmVzZW50IGluIC9saWIvZmlybXdhcmUvcmFsLXJ0KiBv biBhdHRhY2guCiAgKi8KIAogI2luY2x1ZGUgInUuaCIKQEAgLTIzNSw2ICsyMzUsMjQgQEAKIAlS dDMwOTBPc2NDdHJsID0gMHgwNWE0LAogCVJ0MzA3MExkb0NmZzAgPSAweDA1ZDQsCiAJUnQzMDcw R3Bpb1N3aXRjaCA9IDB4MDVkYywKKworCS8qIFJUMzI5MCByZWdpc3RlcnMgKi8KKwlSdDMyOTBD bWJDdHJsID0gMHgwMDIwLAorCQlSdDMyOTBYdGFsUmR5ID0gKDEgPDwgMjIpLAorCQlSdDMyOTBQ bGxMZCA9ICgxIDw8IDIzKSwKKwlSdDMyOTBFZnVzZUN0cmwgPSAweDAwMjQsCisJUnQzMjkwRWZ1 c2VEYXRhMCA9IDB4MDAzNCwKKwlSdDMyOTBFZnVzZURhdGExID0gMHgwMDMwLAorCVJ0MzI5MEVm dXNlRGF0YTIgPSAweDAwMmMsCisJUnQzMjkwRWZ1c2VEYXRhMyA9IDB4MDAyOCwKKwlSdDMyOTBX bGFuQ3RybCA9IDB4MDA4MCwKKwkJUnQzMjkwV2xhbkVuID0gKDEgPDwgMCksCisJCVJ0MzI5MFds YW5DbGtFbiA9ICgxIDw8IDEpLAorCQlSdDMyOTBXbGFuUmVzZXQgPSAoMSA8PCAzKSwKKwkJUnQz MjkwUGNpZUFwcDBDbGtSZXEgPSAoMSA8PCA0KSwKKwkJUnQzMjkwRnJjV2xBbnRTZXQgPSAoMSA8 PCA1KSwKKwkJUnQzMjkwUmFkaW9FbiA9ICgxIDw8IDgpLAorCQlSdDMyOTBHcGlvT3V0T2VBbGwg PSAoMHhmZiA8PCAyNCksCiB9OwogCiBlbnVtIHsKQEAgLTc2NywyMSArNzg1LDIzIEBACiB9Owog CiBlbnVtIHsKLQlSZjI4MjAgPSAxIC8qIDJUM1IgKi8sCi0JUmYyODUwID0gMiAvKiBkdWFsLWJh bmQgMlQzUiAqLywKLQlSZjI3MjAgPSAzIC8qIDFUMlIgKi8sCi0JUmYyNzUwID0gNCAvKiBkdWFs LWJhbmQgMVQyUiAqLywKLQlSZjMwMjAgPSA1IC8qIDFUMVIgKi8sCi0JUmYyMDIwID0gNiAvKiBi L2cgKi8sCi0JUmYzMDIxID0gNyAvKiAxVDJSICovLAotCVJmMzAyMiA9IDggLyogMlQyUiAqLywK LSAJUmYzMDUyID0gOSAvKiBkdWFsLWJhbmQgMlQyUiAqLywKLQlSZjMzMjAgPSAxMSAvKiAxVDFS ICovLAotCVJmMzA1MyA9IDEzIC8qIGR1YWwtYmFuZCAzVDNSICovLAorCVJmMjgyMCA9IDB4MDAw MSwgLyogMlQzUiAqLworCVJmMjg1MCA9IDB4MDAwMiwgLyogZHVhbC1iYW5kIDJUM1IgKi8KKwlS ZjI3MjAgPSAweDAwMDMsIC8qIDFUMlIgKi8KKwlSZjI3NTAgPSAweDAwMDQsIC8qIGR1YWwtYmFu ZCAxVDJSICovCisJUmYzMDIwID0gMHgwMDA1LCAvKiAxVDFSICovCisJUmYyMDIwID0gMHgwMDA2 LCAvKiBiL2cgKi8KKwlSZjMwMjEgPSAweDAwMDcsIC8qIDFUMlIgKi8KKwlSZjMwMjIgPSAweDAw MDgsIC8qIDJUMlIgKi8KKyAJUmYzMDUyID0gMHgwMDA5LCAvKiBkdWFsLWJhbmQgMlQyUiAqLwor CVJmMzMyMCA9IDB4MDAwYiwgLyogMVQxUiAqLworCVJmMzA1MyA9IDB4MDAwZCwgLyogZHVhbC1i YW5kIDNUM1IgKi8KKwlSZjMyOTAgPSAweDMyOTAsIC8qIDFUMVIgKi8KIH07CiAKIGVudW0gewkK IAlSdDMwNzBSZkJsb2NrID0gKDEgPDwgMCksCisJUnQzMDcwUGxsUGQgPSAoMSA8PCAxKSwKIAlS dDMwNzBSeDBQZCA9ICgxIDw8IDIpLAogCVJ0MzA3MFR4MFBkID0gKDEgPDwgMyksCiAJUnQzMDcw UngxUGQgPSAoMSA8PCA0KSwKQEAgLTgwNCwxMCArODI0LDE2IEBACiAJUnQzNTkzTGRvUmZWY01h c2sgPSAweGUwLAogCVJ0MzU5M0NwSWNNYXNrID0gMHhlMCwKIAlSdDM1OTNDcEljU2hpZnQgPSA1 LAotCVJ0MzU5M1J4Q3RiID0gKDEgPDwgNSkKKwlSdDM1OTNSeEN0YiA9ICgxIDw8IDUpLAorCisJ UnQ1MzkwUnhMbzEgPSAoMSA8PCA1KSwKKwlSdDUzOTBSeExvMiA9ICgxIDw8IDcpLAorCVJ0NTM5 MFJ4Q3RiID0gKDEgPDwgNiksCisKKwlSdDMyOTBSc3NpR2FpbiA9IDB4YzAsCiB9OwogCi1zdGF0 aWMgY29uc3QgY2hhciogcmZuYW1lc1tdID0geworc3RhdGljIGNoYXIqIHJmbmFtZXNbXSA9IHsK IAlbUmYyODIwXSAiUlQyODIwIiwKIAlbUmYyODUwXSAiUlQyODUwIiwKIAlbUmYyNzIwXSAiUlQy NzIwIiwKQEAgLTgxOSw5ICs4NDUsMjcgQEAKIAlbUmYzMDUyXSAiUlQzMDUyIiwKIAlbUmYzMzIw XSAiUlQzMzIwIiwKIAlbUmYzMDUzXSAiUlQzMDUzIiwKKwlbUmYzMjkwXSAiUlQzMjkwIiwKIH07 CiAKIGVudW0geworCS8qIEJCUCByZWdpc3RlciB2YWx1ZXMgKi8KKworCS8qIEJCUDMgLSBSWCBB bnRlbm5hICovCisJUnQzMjkwQWRjTW9kZVN3aXRjaCA9ICgxIDw8IDYpLAorCVJ0MzI5MEFkY0lu aXRNb2RlID0gKDEgPDwgNyksCisKKwkvKiBCQlA0IC0gQmFuZHdpZHRoICovCisJUnQ1MzkwTWFj SWZDdHJsID0gKDEgPDwgNiksCisKKwkvKiBCQlA0NyAtIEJhbmR3aXRoICovCisJUnQzMjkwVHNz aUFkYzYgPSAoMSA8PCA3KSwKKwkKKwkvKiBCQlAxNTIgLSBSWCBBbnRlbm5hICovCisJUnQ1Mzkw RGVmUnhBbnQgPSAoMSA8PCA3KSwKK307CisKK2VudW0gewogCS8qIFVTQiBjb21tYW5kcywgUlQy ODcwIG9ubHkgKi8KIAlSdDI4NzBSZXNldCA9IDEsCiAJUnQyODcwV3JpdGUyID0gMiwKQEAgLTgz Myw2ICs4NzcsNyBAQAogZW51bSB7CiAJRWVwcm9tRGVsYXkgPSAxIC8qIG1pbmltdW0gaG9sZCB0 aW1lIChtaWNyb3NlY29uZCkgKi8sCiAKKwlFZXByb21DaGlwSWQgPSAweDAwLAogCUVlcHJvbVZl cnNpb24gPSAweDAxLAogCUVlcHJvbU1hYzAxID0gMHgwMiwKIAlFZXByb21NYWMyMyA9IDB4MDMs CkBAIC05MzIsNyArOTc3LDcgQEAKIAogCXUxNmludCBtYWNfdmVyOwogCXUxNmludCBtYWNfcmV2 OwotCXU4aW50IHJmX3JldjsKKwl1MTZpbnQgcmZfcmV2OwogCXU4aW50IGZyZXE7CiAJdThpbnQg bnR4Y2hhaW5zOwogCXU4aW50IG5yeGNoYWluczsKQEAgLTk5OSwzMiArMTA0NCw1MCBAQAogCUNv bm5QY2lFICAgPSAxIDw8IDEsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0Mjg2MF9yYXRl IHsKK3N0YXRpYyBzdHJ1Y3QgcnQyODYwX3JhdGUgewogCXU4aW50CQlyYXRlOwogCXU4aW50CQlt Y3M7Ci0JLyplbnVtCQlpZWVlODAyMTFfcGh5dHlwZSBwaHk7Ki8KIAl1OGludAkJY3RsX3JpZHg7 CiAJdTE2aW50CQlzcF9hY2tfZHVyOwogCXUxNmludAkJbHBfYWNrX2R1cjsKKwlpbnQJCW9mZG07 CiB9IHJ0Mjg2MF9yYXRlc1tdID0gewotCXsgICAyLCAwLC8qIElFRUU4MDIxMV9UX0RTLCovICAg MCwgMzE0LCAzMTQgfSwKLQl7ICAgNCwgMSwvKiBJRUVFODAyMTFfVF9EUywqLyAgIDEsIDI1OCwg MTYyIH0sCi0JeyAgMTEsIDIsLyogSUVFRTgwMjExX1RfRFMsKi8gICAyLCAyMjMsIDEyNyB9LAot CXsgIDIyLCAzLC8qIElFRUU4MDIxMV9UX0RTLCovICAgMywgMjEzLCAxMTcgfSwKLQl7ICAxMiwg MCwvKiBJRUVFODAyMTFfVF9PRkRNLCovIDQsICA2MCwgIDYwIH0sCi0JeyAgMTgsIDEsLyogSUVF RTgwMjExX1RfT0ZETSwqLyA0LCAgNTIsICA1MiB9LAotCXsgIDI0LCAyLC8qIElFRUU4MDIxMV9U X09GRE0sKi8gNiwgIDQ4LCAgNDggfSwKLQl7ICAzNiwgMywvKiBJRUVFODAyMTFfVF9PRkRNLCov IDYsICA0NCwgIDQ0IH0sCi0JeyAgNDgsIDQsLyogSUVFRTgwMjExX1RfT0ZETSwqLyA4LCAgNDQs ICA0NCB9LAotCXsgIDcyLCA1LC8qIElFRUU4MDIxMV9UX09GRE0sKi8gOCwgIDQwLCAgNDAgfSwK LQl7ICA5NiwgNiwvKiBJRUVFODAyMTFfVF9PRkRNLCovIDgsICA0MCwgIDQwIH0sCi0JeyAxMDgs IDcsLyogSUVFRTgwMjExX1RfT0ZETSwqLyA4LCAgNDAsICA0MCB9CisJeyAgIDIsIDAsIDAsIDMx NCwgMzE0LCAwIH0sCisJeyAgIDQsIDEsIDEsIDI1OCwgMTYyLCAwIH0sCisJeyAgMTEsIDIsIDIs IDIyMywgMTI3LCAwIH0sCisJeyAgMjIsIDMsIDMsIDIxMywgMTE3LCAwIH0sCisJeyAgMTIsIDAs IDQsICA2MCwgIDYwLCAxIH0sCisJeyAgMTgsIDEsIDQsICA1MiwgIDUyLCAxIH0sCisJeyAgMjQs IDIsIDYsICA0OCwgIDQ4LCAxIH0sCisJeyAgMzYsIDMsIDYsICA0NCwgIDQ0LCAxIH0sCisJeyAg NDgsIDQsIDgsICA0NCwgIDQ0LCAxIH0sCisJeyAgNzIsIDUsIDgsICA0MCwgIDQwLCAxIH0sCisJ eyAgOTYsIDYsIDgsICA0MCwgIDQwLCAxIH0sCisJeyAxMDgsIDcsIDgsICA0MCwgIDQwLCAxIH0K IH07CiAKKy8qIGZvciB1c2Ugd2l0aCB0aGUgd2lmaSBzdGFjaywgKm11c3QqIGJlIGluIG9yZGVy IHdpdGggcnQyODYwX3JhdGVzICovCitzdGF0aWMgdThpbnQgcmF0ZXNbXSA9IHsKKwkweDgwIHwg MiwKKwkweDgwIHwgNCwKKwkweDgwIHwgMTEsCisJMHg4MCB8IDIyLAorCisJMHg4MCB8IDEyLAor CTB4ODAgfCAxOCwKKwkweDgwIHwgMjQsCisJMHg4MCB8IDM2LAorCTB4ODAgfCA0OCwKKwkweDgw IHwgNzIsCisJMHg4MCB8IDk2LAorCTB4ODAgfCAxMDgsCisJMAorfTsKKwogLyoKICAqIERlZmF1 bHQgdmFsdWVzIGZvciBNQUMgcmVnaXN0ZXJzOyB2YWx1ZXMgdGFrZW4gZnJvbSB0aGUgcmVmZXJl bmNlIGRyaXZlci4KICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB7CitzdGF0aWMgc3RydWN0IHsK IAl1MzJpbnQJcmVnOwogCXUzMmludAl2YWw7CiB9IHJ0Mjg2MF9kZWZfbWFjW10gPSB7CkBAIC0x MDYxLDcgKzExMjQsNyBAQAogLyoKICAqIERlZmF1bHQgdmFsdWVzIGZvciBCQlAgcmVnaXN0ZXJz OyB2YWx1ZXMgdGFrZW4gZnJvbSB0aGUgcmVmZXJlbmNlIGRyaXZlci4KICAqLwotc3RhdGljIGNv bnN0IHN0cnVjdCB7CitzdGF0aWMgc3RydWN0IHsKIAl1OGludAlyZWc7CiAJdThpbnQJdmFsOwog fSBydDI4NjBfZGVmX2JicFtdID0gewpAQCAtMTA4MCwxMiArMTE0Myw0OCBAQAogCXsgMTAzLCAw eDAwIH0sCQogCXsgMTA1LCAweDA1IH0sCQogCXsgMTA2LCAweDM1IH0sCit9LCBydDMyOTBfZGVm X2JicFtdID0geworCXsgIDMxLCAweDA4IH0sCisJeyAgNjUsIDB4MmMgfSwKKwl7ICA2NiwgMHgz OCB9LAorCXsgIDY4LCAweDBiIH0sCisJeyAgNjksIDB4MTIgfSwKKwl7ICA3MywgMHgxMyB9LAor CXsgIDc1LCAweDQ2IH0sCisJeyAgNzYsIDB4MjggfSwKKwl7ICA3NywgMHg1OCB9LAorCXsgIDcw LCAweDBhIH0sCisJeyAgNzQsIDB4MGIgfSwKKwl7ICA3OSwgMHgxOCB9LAorCXsgIDgwLCAweDA5 IH0sCisJeyAgODEsIDB4MzMgfSwKKwl7ICA4MiwgMHg2MiB9LAorCXsgIDgzLCAweDdhIH0sCisJ eyAgODQsIDB4OWEgfSwKKwl7ICA4NiwgMHgzOCB9LAorCXsgIDkxLCAweDA0IH0sCisJeyAgOTIs IDB4MDIgfSwKKwl7IDEwNCwgMHg5MiB9LAorCXsgMTA1LCAweDFjIH0sCisJeyAxMDYsIDB4MDMg fSwKKwl7IDEyOCwgMHgxMiB9LAorCisJeyAgNjcsIDB4MjQgfSwKKwl7IDE0MywgMHgwNCB9LAor CXsgMTQyLCAweDk5IH0sCisJeyAxNTAsIDB4MzAgfSwKKwl7IDE1MSwgMHgyZSB9LAorCXsgMTUy LCAweDIwIH0sCisJeyAxNTMsIDB4MzQgfSwKKwl7IDE1NCwgMHg0MCB9LAorCXsgMTU1LCAweDNi IH0sCisJeyAyNTMsIDB4MDQgfQogfTsKIAogLyoKICAqIERlZmF1bHQgc2V0dGluZ3MgZm9yIFJG IHJlZ2lzdGVyczsgdmFsdWVzIGRlcml2ZWQgZnJvbSB0aGUgcmVmZXJlbmNlIGRyaXZlci4KICAq Lwotc3RhdGljIGNvbnN0IHN0cnVjdCByZnByb2cgeworc3RhdGljIHN0cnVjdCByZnByb2cgewog CXU4aW50CQljaGFuOwogCXUzMmludAkJcjEsIHIyLCByMywgcjQ7CiB9IHJ0Mjg2MF9yZjI4NTBb XSA9IHsKQEAgLTEyMDQsNyArMTMwMyw3IEBACiAJeyAweDYxLCAwLCAgOSB9CiB9OwogCi1zdGF0 aWMgY29uc3Qgc3RydWN0IHsKK3N0YXRpYyBzdHJ1Y3QgewogCXU4aW50IHJlZzsKIAl1OGludCB2 YWw7CiB9IHJ0MzA5MF9kZWZfcmZbXSA9IHsKQEAgLTEyMjcsNiArMTMyNiw1MyBAQAogCXsgMjQs IDB4MTYgfSwKIAl7IDI1LCAweDAxIH0sCiAJeyAyOSwgMHgxZiB9Cit9LCBydDMyOTBfZGVmX3Jm W10gPSB7CisJeyAgMSwgMHgwZiB9LAorCXsgIDIsIDB4ODAgfSwKKwl7ICAzLCAweDA4IH0sCisJ eyAgNCwgMHgwMCB9LAorCXsgIDYsIDB4YTAgfSwKKwl7ICA4LCAweGYzIH0sCisJeyAgOSwgMHgw MiB9LAorCXsgMTAsIDB4NTMgfSwKKwl7IDExLCAweDRhIH0sCisJeyAxMiwgMHg0NiB9LAorCXsg MTMsIDB4OWYgfSwKKwl7IDE4LCAweDAyIH0sCisJeyAyMiwgMHgyMCB9LAorCXsgMjUsIDB4ODMg fSwKKwl7IDI2LCAweDgyIH0sCisJeyAyNywgMHgwOSB9LAorCXsgMjksIDB4MTAgfSwKKwl7IDMw LCAweDEwIH0sCisJeyAzMSwgMHg4MCB9LAorCXsgMzIsIDB4ODAgfSwKKwl7IDMzLCAweDAwIH0s CisJeyAzNCwgMHgwNSB9LAorCXsgMzUsIDB4MTIgfSwKKwl7IDM2LCAweDAwIH0sCisJeyAzOCwg MHg4NSB9LAorCXsgMzksIDB4MWIgfSwKKwl7IDQwLCAweDBiIH0sCisJeyA0MSwgMHhiYiB9LAor CXsgNDIsIDB4ZDUgfSwKKwl7IDQzLCAweDdiIH0sCisJeyA0NCwgMHgwZSB9LAorCXsgNDUsIDB4 YTIgfSwKKwl7IDQ2LCAweDczIH0sCisJeyA0NywgMHgwMCB9LAorCXsgNDgsIDB4MTAgfSwKKwl7 IDQ5LCAweDk4IH0sCisJeyA1MiwgMHgzOCB9LAorCXsgNTMsIDB4MDAgfSwKKwl7IDU0LCAweDc4 IH0sCisJeyA1NSwgMHg0MyB9LAorCXsgNTYsIDB4MDIgfSwKKwl7IDU3LCAweDgwIH0sCisJeyA1 OCwgMHg3ZiB9LAorCXsgNTksIDB4MDkgfSwKKwl7IDYwLCAweDQ1IH0sCisJeyA2MSwgMHhjMSB9 CiB9OwogCiAvKiB2ZW5kb3JzICovCkBAIC0xMjM5LDYgKzEzODUsNyBAQAogCVJhbGlua1JUMjg5 MCA9IDB4MDY4MSwKIAlSYWxpbmtSVDI3OTAgPSAweDA3ODEsCiAJUmFsaW5rUlQzMDkwID0gMHgz MDkwLAorCVJhbGlua1JUMzI5MCA9IDB4MzI5MCwKIAlBd3RSVDI4OTAgPSAweDEwNTksCiB9Owog CkBAIC0xMjQ4LDYgKzEzOTUsNyBAQAogc3RhdGljIGludCByYnBsYW50KEN0bHIqLCBpbnQpOwog c3RhdGljIHZvaWQgc2V0Y2hhbihDdGxyKiwgdWludCk7CiBzdGF0aWMgdm9pZCBydDMwOTBzZXRj aGFuKEN0bHIqLCB1aW50KTsKK3N0YXRpYyB2b2lkIHJ0MzI5MHNldGNoYW4oQ3RsciosIHVpbnQp Owogc3RhdGljIHZvaWQgc2VsY2hhbmdyb3VwKEN0bHIqLCBpbnQpOwogc3RhdGljIHZvaWQgc2V0 bGVkcyhDdGxyKiwgdTE2aW50KTsKIApAQCAtMTM0Niw3ICsxNDk0LDkgQEAKIAkJCWVkZXYtPmN0 bHJubywgY3Rsci0+YnNzaWQsIGN0bHItPmFpZCwgY3Rsci0+Y2hhbm5lbCwgY3Rsci0+d2NpZCk7 CiAKIAkvKiBTZXQgY2hhbm5lbCAqLwotCWlmKGN0bHItPm1hY192ZXIgPj0gMHgzMDcxKQorCWlm KGN0bHItPm1hY192ZXIgPT0gMHgzMjkwKQorCQlydDMyOTBzZXRjaGFuKGN0bHIsIGN0bHItPmNo YW5uZWwpOworCWVsc2UgaWYoY3Rsci0+bWFjX3ZlciA+PSAweDMwNzEpCiAJCXJ0MzA5MHNldGNo YW4oY3RsciwgY3Rsci0+Y2hhbm5lbCk7CiAJZWxzZQogCQlzZXRjaGFuKGN0bHIsIGN0bHItPmNo YW5uZWwpOwpAQCAtMTM1Myw2ICsxNTAzLDE1IEBACiAJc2VsY2hhbmdyb3VwKGN0bHIsIDApOwog CW1pY3JvZGVsYXkoMTAwMCk7CiAKKwlpZihjdGxyLT5wcm9tKQorCQlyZXR1cm47CisKKwkvKiB1 cGRhdGUgc2xvdCAqLworCXRtcCA9IGNzcjMycihjdGxyLCBCa29mZlNsb3RDZmcpOworCXRtcCAm PSB+MHhmZjsKKwl0bXAgfD0gKGNhcCAmICgxPDwxMCkpID8gOSA6IDIwOworCWNzcjMydyhjdGxy LCBCa29mZlNsb3RDZmcsIHRtcCk7CisKIAkvKiBlbmFibGUgbXJyKD8pICovCiAjZGVmaW5lIEND SyhtY3MpCShtY3MpCiAjZGVmaW5lIE9GRE0obWNzKQkoMSA8PCAzIHwgKG1jcykpCkBAIC0xMzcz LDIwICsxNTMyLDE2IEBACiAJICAgIENDSygwKSk7CQkvKiAgIDEtPiAxICovCiAjdW5kZWYgT0ZE TQogI3VuZGVmIENDSwotCS8qIHVwZGF0ZSBzbG90ICovCi0JdG1wID0gY3NyMzJyKGN0bHIsIEJr b2ZmU2xvdENmZyk7Ci0JdG1wICY9IH4weGZmOwotCXRtcCB8PSAoY2FwICYgKDE8PDEwKSkgPyA5 IDogMjA7Ci0JY3NyMzJ3KGN0bHIsIEJrb2ZmU2xvdENmZywgdG1wKTsKIAkKIAkvKiBzZXQgVFgg cHJlYW1ibGUgKi8KIAl0bXAgPSBjc3IzMnIoY3RsciwgQXV0b1JzcENmZyk7CiAJdG1wICY9IH5D Y2tTaG9ydEVuOwotCWlmKGNhcCAmICgxPDw1KSkgdG1wIHw9IENja1Nob3J0RW47CQorCWlmKGNh cCAmICgxPDw1KSkKKwkJdG1wIHw9IENja1Nob3J0RW47CQogCWNzcjMydyhjdGxyLCBBdXRvUnNw Q2ZnLCB0bXApOwogCiAJLyogc2V0IGJhc2ljIHJhdGVzICovCi0JY3NyMzJ3KGN0bHIsIExlZ2Fj eUJhc2ljUmF0ZSwgMHgwMDMpOyAvKiAxMUIgKi8KKwljc3IzMncoY3RsciwgTGVnYWN5QmFzaWNS YXRlLCAweDE1Zik7IC8qIDExRyAqLwogCiAJLyogU2V0IEJTU0lEICovCiAJY3NyMzJ3KGN0bHIs IE1hY0Jzc2lkRHcwLApAQCAtMTQyNSw5ICsxNTgwLDEwIEBACiB7CiB9CiAKLXN0YXRpYyBGV0lt YWdlKgotcmVhZGZpcm13YXJlKHZvaWQpewotCXN0YXRpYyBjaGFyIG5hbWVbXSA9ICJyYWwtcnQy ODYwIjsKK3N0YXRpYyB2b2lkCityZWFkZmlybXdhcmUoQ3RsciAqY3RscikKK3sKKwljaGFyICpu YW1lOwogCXVjaGFyIGRpcmJ1ZltzaXplb2YoRGlyKSsxMDBdLCAqZGF0YTsKIAljaGFyIGJ1Zlsx MjhdOwogCUZXSW1hZ2UgKmZ3OwpAQCAtMTQzNyw2ICsxNTkzLDEwIEBACiAKIAlpZighaXNldmUo KSkKIAkJZXJyb3IoRXBlcm0pOworCWlmKGN0bHItPm1hY192ZXIgPT0gMHgzMjkwKQorCQluYW1l ID0gInJhbC1ydDMyOTAiOworCWVsc2UKKwkJbmFtZSA9ICJyYWwtcnQyODYwIjsKIAlpZighd2Fz ZXJyb3IoKSl7CiAJCXNucHJpbnQoYnVmLCBzaXplb2YgYnVmLCAiL2Jvb3QvJXMiLCBuYW1lKTsK IAkJYyA9IG5hbWVjKGJ1ZiwgQW9wZW4sIE9SRUFELCAwKTsKQEAgLTE0NzAsNyArMTYzMCw3IEBA CiAJcG9wZXJyb3IoKTsKIAlwb3BlcnJvcigpOwogCWNjbG9zZShjKTsKLQlyZXR1cm4gZnc7CisJ Y3Rsci0+ZncgPSBmdzsKIH0KIAogc3RhdGljIGNoYXIqCkBAIC0xNjM1LDExICsxNzk1LDI2IEBA CiAJfQogCiAJLyogaW5pdGlhbGl6ZSBCQlAgcmVnaXN0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzICov Ci0JZm9yKGkgPSAwOyBpIDwgbmVsZW0ocnQyODYwX2RlZl9iYnApOyBpKyspewotCQliYnB3cml0 ZShjdGxyLCBydDI4NjBfZGVmX2JicFtpXS5yZWcsCi0JCSAgICBydDI4NjBfZGVmX2JicFtpXS52 YWwpOwotCX0KKwlpZihjdGxyLT5tYWNfdmVyID09IDB4MzI5MCl7CisJCS8qIEF2b2lkIGRhdGEg bG9zdCBhbmQgQ1JDIGVycm9yLiAqLworCQliYnB3cml0ZShjdGxyLCA0LCBiYnByZWFkKGN0bHIs IDQpIHwgUnQ1MzkwTWFjSWZDdHJsKTsKKwkJCisJCWZvcihpID0gMDsgaSA8IG5lbGVtKHJ0MzI5 MF9kZWZfYmJwKTsgaSsrKQorCQkJYmJwd3JpdGUoY3RsciwgcnQzMjkwX2RlZl9iYnBbaV0ucmVn LAorCQkJICAgIHJ0MzI5MF9kZWZfYmJwW2ldLnZhbCk7CiAKKwkJYmJwd3JpdGUoY3RsciwgNDcs IGJicHJlYWQoY3RsciwgNDcpIHwgUnQzMjkwVHNzaUFkYzYpOworCQkvKiB1c2UgNS1iaXQgQURD IGZvciBhY3F1aXNpdGlvbiBhbmQgOC1iaXQgQURDIGZvciBkYXRhICovCisJCWJicHdyaXRlKGN0 bHIsIDMsIGJicHJlYWQoY3RsciwgMykgfCBSdDMyOTBBZGNNb2RlU3dpdGNoIHwgUnQzMjkwQWRj SW5pdE1vZGUpOworCQkvKiBzd2l0Y2ggdG8gZGVmYXVsdCByeCBhbnRlbm5hICovCisJCWJicHdy aXRlKGN0bHIsIDE1MiwgYmJwcmVhZChjdGxyLCAxNTIpIHwgUnQ1MzkwRGVmUnhBbnQpOworCisJ CXJldHVybiBuaWw7CisJfWVsc2UKKwkJZm9yKGkgPSAwOyBpIDwgbmVsZW0ocnQyODYwX2RlZl9i YnApOyBpKyspCisJCQliYnB3cml0ZShjdGxyLCBydDI4NjBfZGVmX2JicFtpXS5yZWcsCisJCQkJ cnQyODYwX2RlZl9iYnBbaV0udmFsKTsKKwogCS8qIGZpeCBCQlA4NCBmb3IgUlQyODYwRSAqLwog CWlmKGN0bHItPm1hY192ZXIgPT0gMHgyODYwICYmIGN0bHItPm1hY19yZXYgIT0gMHgwMTAxKQog CQliYnB3cml0ZShjdGxyLCA4NCwgMHgxOSk7CkBAIC0xODcyLDcgKzIwNDcsNyBAQAogc3RhdGlj IHZvaWQKIHNldGNoYW4oQ3RsciAqY3RsciwgdWludCBjaGFuKQogewotCWNvbnN0IHN0cnVjdCBy ZnByb2cgKnJmcHJvZyA9IHJ0Mjg2MF9yZjI4NTA7CisJc3RydWN0IHJmcHJvZyAqcmZwcm9nID0g cnQyODYwX3JmMjg1MDsKIAl1MzJpbnQgcjIsIHIzLCByNDsKIAlzOGludCB0eHBvdzEsIHR4cG93 MjsKIAl1aW50IGk7CkBAIC0xOTg4LDYgKzIxNjMsODIgQEAKIAlydDMwOTByZndyaXRlKGN0bHIs IDcsIHJmIHwgUnQzMDcwVHVuZSk7CiB9CiAKKy8qIEFsdGVyZWQgdmVyc2lvbiBvZiBydDUzOTBf c2V0X2NoYW4gaW4gT3BlbkJTRC4gKi8KK3N0YXRpYyB2b2lkCitydDMyOTBzZXRjaGFuKEN0bHIg KmN0bHIsIHVpbnQgY2hhbikKK3sKKwl1OGludCBoMjBtaHosIHJmLCB0bXA7CisJczhpbnQgdHhw b3cxOworCWludCBpOworCisJLyogUlQzMjkwIGlzIDJHSHogb25seSAqLworCWFzc2VydChjaGFu ID49IDEgJiYgY2hhbiA8PSAxNCk7CisKKwkvKiBmaW5kIHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBj aGFubmVsICh3ZSBrbm93IGl0IGV4aXN0cykgKi8KKwlmb3IoaSA9IDA7IHJ0Mjg2MF9yZjI4NTBb aV0uY2hhbiAhPSBjaGFuOyBpKyspOworCisJLyogdXNlIFR4IHBvd2VyIHZhbHVlcyBmcm9tIEVF UFJPTSAqLworCXR4cG93MSA9IGN0bHItPnR4cG93MVtpXTsKKworCXJ0MzA5MHJmd3JpdGUoY3Rs ciwgOCwgcnQzMDkwX2ZyZXFzW2ldLm4pOworCXJ0MzA5MHJmd3JpdGUoY3RsciwgOSwgcnQzMDkw X2ZyZXFzW2ldLmsgJiAweDBmKTsKKwlyZiA9IHJ0MzA5MHJmcmVhZChjdGxyLCAxMSk7CisJcmYg PSAocmYgJiB+MHgwMykgfCAocnQzMDkwX2ZyZXFzW2ldLnIgJiAweDAzKTsKKwlydDMwOTByZndy aXRlKGN0bHIsIDExLCByZik7CisKKwlyZiA9IHJ0MzA5MHJmcmVhZChjdGxyLCA0OSk7CisJcmYg PSAocmYgJiB+MHgzZikgfCAodHhwb3cxICYgMHgzZik7CisJLyogdGhlIHZhbGlkIHJhbmdlIG9m IHRoZSBSRiBSNDkgaXMgMHgwMH4weDI3ICovCisJaWYgKChyZiAmIDB4M2YpID4gMHgyNykKKwkJ cmYgPSAocmYgJiB+MHgzZikgfCAweDI3OworCXJ0MzA5MHJmd3JpdGUoY3RsciwgNDksIHJmKTsK KworCXJmID0gcnQzMDkwcmZyZWFkKGN0bHIsIDEpOworCXJmIHw9IFJ0MzA3MFJmQmxvY2sgfCBS dDMwNzBQbGxQZCB8IFJ0MzA3MFJ4MFBkIHwgUnQzMDcwVHgwUGQ7CisJcnQzMDkwcmZ3cml0ZShj dGxyLCAxLCByZik7CisKKwlyZiA9IHJ0MzA5MHJmcmVhZChjdGxyLCAyKTsKKwlydDMwOTByZndy aXRlKGN0bHIsIDIsIHJmIHwgUnQzNTkzUmVzY2FsKTsKKwltaWNyb2RlbGF5KDEwMDApOworCXJ0 MzA5MHJmd3JpdGUoY3RsciwgMiwgcmYgJiB+UnQzNTkzUmVzY2FsKTsKKworCXJmID0gcnQzMDkw cmZyZWFkKGN0bHIsIDE3KTsKKwl0bXAgPSByZjsKKwlyZiA9IChyZiAmIH4weDdmKSB8IChjdGxy LT5mcmVxICYgMHg3Zik7CisJcmYgPSBNSU4ocmYsIDB4NWYpOworCWlmICh0bXAgIT0gcmYpCisJ CW1jdWNtZChjdGxyLCAweDc0LCAodG1wIDw8IDggKSB8IHJmLCAwKTsKKworCWlmIChjaGFuID09 IDYpCisJCWJicHdyaXRlKGN0bHIsIDY4LCAweDBjKTsKKwllbHNlCisJCWJicHdyaXRlKGN0bHIs IDY4LCAweDBiKTsKKworCWlmIChjaGFuID49IDEgJiYgY2hhbiA8IDYpCisJCXJmID0gMHgwZjsK KwllbHNlIGlmIChjaGFuID49IDcgJiYgY2hhbiA8PSAxMSkKKwkJCXJmID0gMHgwZTsKKwllbHNl IGlmIChjaGFuID49IDEyICYmIGNoYW4gPD0gMTQpCisJCQlyZiA9IDB4MGQ7CisJcnQzMDkwcmZ3 cml0ZShjdGxyLCA1OSwgcmYpOworCisJLyogVHgvUnggaDIwTSAqLworCWgyMG1oeiA9IChjdGxy LT5yZjI0XzIwbWh6ICYgMHgyMCkgPj4gNTsKKwlyZiA9IHJ0MzA5MHJmcmVhZChjdGxyLCAzMCk7 CisJcmYgPSAocmYgJiB+MHgwNikgfCAoaDIwbWh6IDw8IDEpIHwgKGgyMG1oeiA8PCAyKTsKKwly dDMwOTByZndyaXRlKGN0bHIsIDMwLCByZik7CisKKwkvKiBSeCBCQiBmaWx0ZXIgVkNNICovCisJ cmYgPSBydDMwOTByZnJlYWQoY3RsciwgMzApOworCXJmID0gKHJmICYgfjB4MTgpIHwgMHgxMDsK KwlydDMwOTByZndyaXRlKGN0bHIsIDMwLCByZik7CisKKwkvKiBJbml0aWF0ZSBWQ08gY2FsaWJy YXRpb24uICovCisJcmYgPSBydDMwOTByZnJlYWQoY3RsciwgMyk7CisJcmYgfD0gUnQzNTkzVmNv Y2FsOworCXJ0MzA5MHJmd3JpdGUoY3RsciwgMywgcmYpOworfQorCiBzdGF0aWMgaW50CiBydDMw OTBmaWx0ZXJjYWxpYihDdGxyICpjdGxyLCB1OGludCBpbml0LCB1OGludCB0YXJnZXQsIHU4aW50 ICp2YWwpCiB7CkBAIC0yMDcwLDcgKzIzMjEsNyBAQAogCX0KIH0KIAotc3RhdGljIGludAorc3Rh dGljIHZvaWQKIHJ0MzA5MHJmaW5pdChDdGxyICpjdGxyKQogewogCXUzMmludCB0bXA7CkBAIC0y MTc0LDggKzI0MjUsNDEgQEAKIAogCXJmID0gcnQzMDkwcmZyZWFkKGN0bHIsIDIxKTsKIAlydDMw OTByZndyaXRlKGN0bHIsIDIxLCByZiAmIH5SdDMwNzBSeExvMik7Cit9CiAKLQlyZXR1cm4gMDsK Ky8qCisgKiBydDUzOTBfcmZfaW5pdCB3YXMgZnVsbCBvZiBzdHVmZiB0aGF0IHdhc24ndCBmb3Ig cnQzMjkwLAorICogdGhpcyBpcyBhIGZ1bmN0aW9uIGZyb20gc2NyYXRjaC4KKyAqLworc3RhdGlj IHZvaWQKK3J0MzI5MHJmaW5pdChDdGxyICpjdGxyKQoreworCXU4aW50IHJmOworCWludCBpOwor CisJcmYgPSBydDMwOTByZnJlYWQoY3RsciwgMik7CisJLyogVG9nZ2xlIFJGIFIyIGJpdCA3LiAq LworCXJ0MzA5MHJmd3JpdGUoY3RsciwgMiwgcmYgfCBSdDM1OTNSZXNjYWwpOworCW1pY3JvZGVs YXkoMTAwMCk7CisJcnQzMDkwcmZ3cml0ZShjdGxyLCAyLCByZiAmIH5SdDM1OTNSZXNjYWwpOwor CisJLyogSW5pdGlhbGl6ZSBSRiByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZS4gKi8KKwlmb3Io aSA9IDA7IGkgPCBuZWxlbShydDMyOTBfZGVmX3JmKTsgaSsrKQorCQlydDMwOTByZndyaXRlKGN0 bHIsIHJ0MzI5MF9kZWZfcmZbaV0ucmVnLAorCQkJcnQzMjkwX2RlZl9yZltpXS52YWwpOworCisJ cnQzMDkwcmZ3cml0ZShjdGxyLCAyOSwgcnQzMDkwcmZyZWFkKGN0bHIsIDI5KSB8IFJ0MzI5MFJz c2lHYWluKTsKKwkKKwljdGxyLT5yZjI0XzIwbWh6ID0gMHgxZjsKKwljdGxyLT5yZjI0XzQwbWh6 ID0gMHgyZjsKKworCWNzcjMydyhjdGxyLCBSdDMwNzBPcHQxNCwgY3NyMzJyKGN0bHIsIFJ0MzA3 ME9wdDE0KSB8IDEpOworCisJcmYgPSBydDMwOTByZnJlYWQoY3RsciwgMTcpOworCXJmICY9IH5S dDMwNzBUeExvMTsKKwlpZihjdGxyLT50eG1peGdhaW5fMmdoeiA+PSAyKQorCQlyZiA9IChyZiAm IH4weDcpIHwgY3Rsci0+dHhtaXhnYWluXzJnaHo7CisJcnQzMDkwcmZ3cml0ZShjdGxyLCAxNywg cmYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjI0NCw3ICsyNTI4LDMyIEBACiAJfQogfQogCisv KiBBbHRlcmVkIHZlcnNpb24gb2YgcnQ1MzkwX3JmX3dha2V1cCBpbiBPcGVuQlNELiAqLwogc3Rh dGljIHZvaWQKK3J0MzI5MHJmd2FrZXVwKEN0bHIgKmN0bHIpCit7CisJdThpbnQgcmY7CisJCisJ cmYgPSBydDMwOTByZnJlYWQoY3RsciwgMSk7CisJcmYgfD0gUnQzMDcwUmZCbG9jayB8IFJ0MzA3 MFBsbFBkIHwgUnQzMDcwUngwUGQgfCBSdDMwNzBUeDBQZDsKKwlydDMwOTByZndyaXRlKGN0bHIs IDEsIHJmKTsKKworCXJmID0gcnQzMDkwcmZyZWFkKGN0bHIsIDYpOworCXJmIHw9IFJ0MzU5M1Zj b0ljIHwgUnQzNTkzVmNvY2FsOworCXJ0MzA5MHJmd3JpdGUoY3RsciwgNiwgcmYpOworCisJcnQz MDkwcmZ3cml0ZShjdGxyLCAyLCBydDMwOTByZnJlYWQoY3RsciwgMikgfCBSdDM1OTNSZXNjYWwp OworCisJcmYgPSBydDMwOTByZnJlYWQoY3RsciwgMjIpOworCXJmID0gKHJmICYgfjB4ZTApIHwg MHgyMDsKKwlydDMwOTByZndyaXRlKGN0bHIsIDIyLCByZik7CisKKwlydDMwOTByZndyaXRlKGN0 bHIsIDQyLCBydDMwOTByZnJlYWQoY3RsciwgNDIpIHwgUnQ1MzkwUnhDdGIpOworCXJ0MzA5MHJm d3JpdGUoY3RsciwgMjAsIHJ0MzA5MHJmcmVhZChjdGxyLCAyMCkgJiB+MHg3Nyk7CisJcnQzMDkw cmZ3cml0ZShjdGxyLCAzLCBydDMwOTByZnJlYWQoY3RsciwgMykgfCBSdDM1OTNWY29jYWwpOwor fQorCitzdGF0aWMgdm9pZAogcnQzMDkwcmZzZXR1cChDdGxyICpjdGxyKQogewogCXU4aW50IGJi cDsKQEAgLTIyOTQsOSArMjYwMyw0OCBAQAogCQllbHNlIGlmKGljLT5pY19wcm90bW9kZSA9PSBJ RUVFODAyMTFfUFJPVF9DVFNPTkxZKQogCQkJdG1wIHw9IFByb3RDdHJsQ3RzOwogCX0KLQljc3Iz MncoY3RsciwgT2ZkbVByb3RDZmcsIHRtcCk7ICovCisqLworCWNzcjMydyhjdGxyLCBPZmRtUHJv dENmZywgdG1wKTsKIH0KIAorc3RhdGljIGNoYXIgKgorcnQzMjkwd2xhbmVuYWJsZShDdGxyICpj dGxyKQoreworCXUzMmludCB0bXA7CisJaW50IG50cmllczsKKworCS8qIGVuYWJsZSBjaGlwIGFu ZCBjaGVjayByZWFkaW5lc3MgKi8KKwl0bXAgPSBjc3IzMnIoY3RsciwgUnQzMjkwV2xhbkN0cmwp OworCXRtcCB8PSBSdDMyOTBXbGFuRW4gfCBSdDMyOTBGcmNXbEFudFNldCB8CisJICAgIFJ0MzI5 MEdwaW9PdXRPZUFsbDsKKwljc3IzMncoY3RsciwgUnQzMjkwV2xhbkN0cmwsIHRtcCk7CisKKwlm b3IgKG50cmllcyA9IDA7IG50cmllcyA8IDIwMDsgbnRyaWVzKyspIHsKKwkJdG1wID0gY3NyMzJy KGN0bHIsIFJ0MzI5MENtYkN0cmwpOworCQlpZiAoKHRtcCAmIFJ0MzI5MFBsbExkKSAmJgorCQkg ICAgKHRtcCAmIFJ0MzI5MFh0YWxSZHkpKQorCQkJYnJlYWs7CisJCW1pY3JvZGVsYXkoMjApOwor CX0KKwlpZiAobnRyaWVzID09IDIwMCkKKwkJcmV0dXJuICJ0aW1lb3V0IHdoaWxlIGVuYWJsaW5n IHdsYW4iOworCisJLyogdG9nZ2xlIHJlc2V0ICovCisJdG1wID0gY3NyMzJyKGN0bHIsIFJ0MzI5 MFdsYW5DdHJsKTsKKwl0bXAgfD0gUnQzMjkwV2xhblJlc2V0IHwgUnQzMjkwV2xhbkNsa0VuOwor CXRtcCAmPSB+UnQzMjkwUGNpZUFwcDBDbGtSZXE7CisJY3NyMzJ3KGN0bHIsIFJ0MzI5MFdsYW5D dHJsLCB0bXApOworCW1pY3JvZGVsYXkoMjApOworCXRtcCAmPSB+UnQzMjkwV2xhblJlc2V0Owor CWNzcjMydyhjdGxyLCBSdDMyOTBXbGFuQ3RybCwgdG1wKTsKKwltaWNyb2RlbGF5KDEwMDApOwor CisJLyogY2xlYXIgZ2FyYmFnZSBpbnRlcnJ1cHRzICovCisJY3NyMzJ3KGN0bHIsIEludFN0YXR1 cywgMHg3ZmZmZmZmZik7CisKKwlyZXR1cm4gbmlsOworfQorCiBzdGF0aWMgY2hhcioKIHJ0Mjg2 MHN0YXJ0KEV0aGVyICplZGV2KQogewpAQCAtMjMwNyw2ICsyNjU1LDI2IEBACiAJQ3RsciAqY3Rs cjsKIAogCWN0bHIgPSBlZGV2LT5jdGxyOworCisJaWYoY3Rsci0+cmZzd2l0Y2gpCisJCWlmKGN0 bHItPm1hY192ZXIgPT0gMHgzMjkwKXsKKwkJCS8qIGhhcmR3YXJlIGhhcyBhIHJhZGlvIHN3aXRj aCBvbiBHUElPIHBpbiAwICovCisJCQlpZighKGNzcjMycihjdGxyLCBSdDMyOTBXbGFuQ3RybCkg JiBSdDMyOTBSYWRpb0VuKSkKKwkJCQkvKlhYWDogcnQyODYwc3RvcChpZnAsIDEpOyovCisJCQkJ cmV0dXJuICJyYWRpbyBkaXNhYmxlZCI7CisJCX1lbHNlCisJCQkvKiBoYXJkd2FyZSBoYXMgYSBy YWRpbyBzd2l0Y2ggb24gR1BJTyBwaW4gMiAqLworCQkJaWYoIShjc3IzMnIoY3RsciwgR3Bpb0N0 cmwpICYgMSA8PCAyKSkKKwkJCQkvKlhYWDogcnQyODYwc3RvcChpZnAsIDEpOyovCisJCQkJcmV0 dXJuICJyYWRpbyBkaXNhYmxlZCI7CisKKwlpZihjdGxyLT5tYWNfdmVyID09IDB4MzI5MCl7CisJ CWVyciA9IHJ0MzI5MHdsYW5lbmFibGUoY3Rscik7CisJCWlmKGVyciAhPSBuaWwpCisJCQkvKlhY WDogcnQyODYwc3RvcChpZnAsIDEpOyovCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWNzcjMydyhj dGxyLCBQd3JQaW5DZmcsIElvUmFQZSk7CiAKIAkvKiBkaXNhYmxlIERNQSAqLwpAQCAtMjM2Niw3 ICsyNzM0LDkgQEAKIAogCWZvcihpID0gMDsgaSA8IG5lbGVtKHJ0Mjg2MF9kZWZfbWFjKTsgaSsr KQogCQljc3IzMncoY3RsciwgcnQyODYwX2RlZl9tYWNbaV0ucmVnLCBydDI4NjBfZGVmX21hY1tp XS52YWwpOwotCWlmKGN0bHItPm1hY192ZXIgPj0gMHgzMDcxKXsKKwlpZihjdGxyLT5tYWNfdmVy ID09IDB4MzI5MCkKKwkJY3NyMzJ3KGN0bHIsIFR4U3dDZmcwLCAweDAwMDAwMDQwNCk7CisJZWxz ZSBpZihjdGxyLT5tYWNfdmVyID49IDB4MzA3MSl7CiAJCS8qIHNldCBkZWxheSBvZiBQQV9QRSBh c3NlcnRpb24gdG8gMXVzICh1bml0IG9mIDAuMjV1cykgKi8KIAkJY3NyMzJ3KGN0bHIsIFR4U3dD ZmcwLAogCQkgICAgNCA8PCBEbHlQYXBlRW5TaGlmdCk7CkBAIC0yNDUxLDcgKzI4MjEsNyBAQAog CWNzcjMydyhjdGxyLCBEZWxheUludENmZywgMCk7CiAKIAkvKiB3cml0ZSB2ZW5kb3Itc3BlY2lm aWMgQkJQIHZhbHVlcyAoZnJvbSBFRVBST00pICovCi0JZm9yKGkgPSAwOyBpIDwgODsgaSsrKXsK Kwlmb3IoaSA9IDA7IGkgPCBuZWxlbShjdGxyLT5iYnApOyBpKyspewogCQlpZihjdGxyLT5iYnBb aV0ucmVnID09IDAgfHwgY3Rsci0+YmJwW2ldLnJlZyA9PSAweGZmKQogCQkJY29udGludWU7CiAJ CWJicHdyaXRlKGN0bHIsIGN0bHItPmJicFtpXS5yZWcsIGN0bHItPmJicFtpXS52YWwpOwpAQCAt MjQ2MCw2ICsyODMwLDcgQEAKIAkvKiBzZWxlY3QgTWFpbiBhbnRlbm5hIGZvciAxVDFSIGRldmlj ZXMgKi8KIAlpZihjdGxyLT5yZl9yZXYgPT0gUmYyMDIwIHx8CiAJICAgIGN0bHItPnJmX3JldiA9 PSBSZjMwMjAgfHwKKwkgICAgY3Rsci0+cmZfcmV2ID09IFJmMzI5MCB8fAogCSAgICBjdGxyLT5y Zl9yZXYgPT0gUmYzMzIwKQogCQlydDMwOTBzZXRyeGFudGVubmEoY3RsciwgMCk7CiAKQEAgLTI0 NjgsMTMgKzI4MzksMTcgQEAKIAltY3VjbWQoY3RsciwgTWN1Q21kTGVkMiwgY3Rsci0+bGVkWzFd LCAwKTsKIAltY3VjbWQoY3RsciwgTWN1Q21kTGVkMywgY3Rsci0+bGVkWzJdLCAwKTsKIAotCWlm KGN0bHItPm1hY192ZXIgPj0gMHgzMDcxKQorCWlmKGN0bHItPm1hY192ZXIgPT0gMHgzMjkwKQor CQlydDMyOTByZmluaXQoY3Rscik7CisJZWxzZSBpZihjdGxyLT5tYWNfdmVyID49IDB4MzA3MSkK IAkJcnQzMDkwcmZpbml0KGN0bHIpOwogCiAJbWN1Y21kKGN0bHIsIE1jdUNtZFNsZWVwLCAweDAy ZmYsIDEpOwogCW1jdWNtZChjdGxyLCBNY3VDbWRXYWtldXAsIDAsIDEpOwogCi0JaWYoY3Rsci0+ bWFjX3ZlciA+PSAweDMwNzEpCisJaWYoY3Rsci0+bWFjX3ZlciA9PSAweDMyOTApCisJCXJ0MzI5 MHJmd2FrZXVwKGN0bHIpOworCWVsc2UgaWYoY3Rsci0+bWFjX3ZlciA+PSAweDMwNzEpCiAJCXJ0 MzA5MHJmd2FrZXVwKGN0bHIpOwogCiAJLyogZGlzYWJsZSBub24tZXhpc3RpbmcgUnggY2hhaW5z ICovCkBAIC0yNTAwLDcgKzI4NzUsOSBAQAogCQlydDMwOTByZnNldHVwKGN0bHIpOwogCiAJLyog c2VsZWN0IGRlZmF1bHQgY2hhbm5lbCAqLwotCWlmKGN0bHItPm1hY192ZXIgPj0gMHgzMDcxKQor CWlmKGN0bHItPm1hY192ZXIgPT0gMHgzMjkwKQorCQlydDMyOTBzZXRjaGFuKGN0bHIsIDMpOwor CWVsc2UgaWYoY3Rsci0+bWFjX3ZlciA+PSAweDMwNzEpCiAJCXJ0MzA5MHNldGNoYW4oY3Rsciwg Myk7CiAJZWxzZQogCQlzZXRjaGFuKGN0bHIsIDMpOwpAQCAtMjU2NCw3ICsyOTQxLDcgQEAKIAlD dGxyICpjdGxyOwogCVdpZmlwa3QgKnc7CiAJdThpbnQgbWNzLCBxaWQ7Ci0JaW50IHJpZHgsIC8q Y3RsX3JpZHgsKi8gaGRybGVuOworCWludCByaWR4LCBjdGxfcmlkeCwgaGRybGVuOwogCXVjaGFy ICpwOwogCWludCBub2RlaWQ7CiAJQmxvY2sgKm91dGI7CkBAIC0yNTkyLDcgKzI5NjksMTAgQEAK IAogCXBvb2wgPSAmY3Rsci0+cG9vbDsKIAlxaWQgPSAwOyAvKiBmb3Igbm93ICovCi0JcmlkeCA9 IDA7IAorCWlmKHduLT5taW5yYXRlID49IHdpZmktPnJhdGVzKQorCQlyaWR4ID0gd24tPm1pbnJh dGUgLSB3aWZpLT5yYXRlczsKKwllbHNlCisJCXJpZHggPSAwOwogCXR4ID0gJmN0bHItPnR4W3Fp ZF07CiAKIAlub2RlaWQgPSBjdGxyLT5iY2FzdG5vZGVpZDsKQEAgLTI2MDMsMjYgKzI5ODMsNDMg QEAKIAlpZigody0+YTFbMF0gJiAxKSA9PSAwKXsKIAkJKihwKzQpID0gVHhBY2s7IC8qIHhmbGFn cyAqLwogCisJCS8qIHR4b3AsIGRlY2lkZSBpZiB3ZSBuZWVkIHByb3RlY3Rpb24gKi8KIAkJaWYo QkxFTihiKSA+IDUxMi00KQotCQkJKihwKzEpID0gVHhUeG9wQmFja29mZjsgLyogdHhvcCAqLyAK KwkJCSoocCsxKSA9IFR4VHhvcEh0OworCQllbHNlCisJCQkqKHArMSkgPSBUeFR4b3BCYWNrb2Zm OwogCiAJCWlmKCh3LT5mY1swXSAmIDB4MGMpID09IDB4MDggJiYJY3Rsci0+YnNzbm9kZWlkICE9 IC0xKXsKIAkJCW5vZGVpZCA9IGN0bHItPmJzc25vZGVpZDsKLQkJCXJpZHggPSAyOyAvKiBCVUc6 IGhhcmRjb2RlIDExTWJpdCAqLworCQkJaWYod24tPmFjdHJhdGUgPj0gd2lmaS0+cmF0ZXMpCisJ CQkJcmlkeCA9IHduLT5hY3RyYXRlIC0gd2lmaS0+cmF0ZXM7CiAJCX0KIAl9CiAKLQkvKmN0bF9y aWR4ID0gcnQyODYwX3JhdGVzW3JpZHhdLmN0bF9yaWR4OyovCisJY3RsX3JpZHggPSBydDI4NjBf cmF0ZXNbcmlkeF0uY3RsX3JpZHg7CiAJbWNzID0gcnQyODYwX3JhdGVzW3JpZHhdLm1jczsKIAog CS8qIHNldHVwIFRYIFdpcmVsZXNzIEluZm9ybWF0aW9uICovCiAJKnAgPSAwOyAvKiBmbGFncyAq LwotCSoocCsyKSA9IFBoeUNjayB8IG1jczsgLyogcGh5ICovCisJLyogcGh5ICovCisJaWYocnQy ODYwX3JhdGVzW3JpZHhdLm9mZG0pCisJCSoocCsyKSA9IFBoeU9mZG0gfCBtY3M7CisJZWxzZXsK KwkJKihwKzIpID0gUGh5Q2NrIHwgbWNzOworCQlpZihyaWR4ICE9IDAgJiYgd24tPmNhcCAmICgx PDw1KSkKKwkJCSoocCsyKSB8PSBQaHlTaHByZTsKKwl9CiAJLyogbGV0IEhXIGdlbmVyYXRlIHNl cSBudW1iZXJzICovCiAJKihwKzQpIHw9IFR4TnNlcTsgLyogeGZsYWdzICovCiAJcHV0MTYocCAr IDYsIEJMRU4oYikgfCAoKChtY3MrMSkgJiAweGYpIDw8IFR4UGlkU2hpZnQpICk7IC8qIGxlbmd0 aCAqLwogCi0vKglwdXQxNigodWNoYXIqKSZ3LT5kdXJbMF0sIHJ0Mjg2MF9yYXRlc1tjdGxfcmlk eF0ubHBfYWNrX2R1cik7ICovCisJLyogYWNrIGR1cmF0aW9uICovCisJaWYoKihwKzQpICYgVHhB Y2speworCQlpZih3bi0+Y2FwICYgKDE8PDUpKQorCQkJcHV0MTYody0+ZHVyLCBydDI4NjBfcmF0 ZXNbY3RsX3JpZHhdLnNwX2Fja19kdXIpOworCQllbHNlCisJCQlwdXQxNih3LT5kdXIsIHJ0Mjg2 MF9yYXRlc1tjdGxfcmlkeF0ubHBfYWNrX2R1cik7CisJfQogCiAJKihwKzUpID0gbm9kZWlkOyAv KiB3Y2lkICovCiAKQEAgLTI2NTUsOSArMzA1Miw5IEBACiAKIAlwID0gcG9vbC0+cCArIHBvb2wt PmkgKiBUeHdpRG1hU3o7CiAJdyA9IChXaWZpcGt0KikocCArIFR4d2lzaXplKTsKLQlpZihjdGxy LT53aWZpLT5kZWJ1Zyl7Ci0JCXByaW50KCJ0cmFuc21pdDogJUUtPiVFLCVFIG5vZGVpZD0leCB0 eHFbJWRdPSVkIHNpemU9JXpkXG4iLCB3LT5hMiwgdy0+YTEsIHctPmEzLCBub2RlaWQsIHFpZCwg Y3Rsci0+dHhbcWlkXS5pLCBCTEVOKG91dGIpKTsKLQl9CisJaWYoY3Rsci0+d2lmaS0+ZGVidWcp CisJCXByaW50KCJ0cmFuc21pdDogJUUtPiVFLCVFIG5vZGVpZD0leCB0eHFbJWRdPSVkIHNpemU9 JXpkXG4iLAorCQkJdy0+YTIsIHctPmExLCB3LT5hMywgbm9kZWlkLCBxaWQsIGN0bHItPnR4W3Fp ZF0uaSwgQkxFTihvdXRiKSk7CiAKIAl0eC0+aSA9ICh0eC0+aSArIDEpICUgTnR4OwogCXBvb2wt PmkgPSAocG9vbC0+aSArIDEpICUgTnR4cG9vbDsKQEAgLTI2NzQsNyArMzA3MSw2IEBACiBzdGF0 aWMgdm9pZAogcnQyODYwYXR0YWNoKEV0aGVyICplZGV2KQogewotCUZXSW1hZ2UgKmZ3OwogCUN0 bHIgKmN0bHI7CiAJY2hhciAqZXJyOwogCkBAIC0yNjkxLDEzICszMDg3LDExIEBACiAJCWlmKGN0 bHItPndpZmkgPT0gbmlsKQogCQkJY3Rsci0+d2lmaSA9IHdpZmlhdHRhY2goZWRldiwgdHJhbnNt aXQpOwogCi0JCWlmKGN0bHItPmZ3ID09IG5pbCl7Ci0JCQlmdyA9IHJlYWRmaXJtd2FyZSgpOwot CQkJY3Rsci0+ZncgPSBmdzsKLQkJfQotCQlpZigoZXJyID0gcnQyODYwc3RhcnQoZWRldikpICE9 IG5pbCl7CisJCWN0bHItPndpZmktPnJhdGVzID0gcmF0ZXM7CisJCWlmKGN0bHItPmZ3ID09IG5p bCkKKwkJCXJlYWRmaXJtd2FyZShjdGxyKTsKKwkJaWYoKGVyciA9IHJ0Mjg2MHN0YXJ0KGVkZXYp KSAhPSBuaWwpCiAJCQllcnJvcihlcnIpOwotCQl9IAogCiAJCWN0bHItPmJjYXN0bm9kZWlkID0g LTE7CiAJCWN0bHItPmJzc25vZGVpZCA9IC0xOwpAQCAtMjg0MSwxNCArMzIzNSwxMCBAQAogCWRl YnVnID0gY3Rsci0+d2lmaS0+ZGVidWc7CiAKIAlyID0gY3NyMzJyKGN0bHIsIEludFN0YXR1cyk7 Ci0JaWYociA9PSAweGZmZmZmZmZmKXsKLQkJaXVubG9jayhjdGxyKTsKLQkJcmV0dXJuOwotCX0K LQlpZihyID09IDApewotCQlpdW5sb2NrKGN0bHIpOwotCQlyZXR1cm47Ci0JfQorCWlmKHIgPT0g MHhmZmZmZmZmZikKKwkJZ290byBFeGl0OworCWlmKHIgPT0gMCkKKwkJZ290byBFeGl0OwogCiAJ LyogYWNrbm93bGVkZ2UgaW50ZXJydXB0cyAqLwogCWNzcjMydyhjdGxyLCBJbnRTdGF0dXMsIHIp OwpAQCAtMjg2Niw3ICszMjU2LDcgQEAKIAogCQl0eHJ4b24oY3Rscik7CiAJfQotCWlmKHIgJiBN YWNJbnQyKQorCWlmKHIgJiBNYWNJbnQyKSAvKiBUWCBzdGF0dXMgKi8KIAkJc3RhdHMoY3Rscik7 CiAJCiAJaWYociAmIFR4RG9uZUludDUpCkBAIC0yODg5LDcgKzMyNzksNyBAQAogCiAJaWYociAm IFR4RG9uZUludDApCiAJCXJ0Mjg2MHR4KGN0bHIsIDApOwotCitFeGl0OgogCWl1bmxvY2soY3Rs cik7CiB9CiAKQEAgLTI5NTksNyArMzM0OSw3IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotLyogUmVh ZCAxNi1iaXQgZnJvbSBlRlVTRSBST00gKD49UlQzMDcxIG9ubHkuKSAqLworLyogUmVhZCAxNiBi aXRzIGZyb20gZUZVU0UgUk9NICovCiBzdGF0aWMgdTE2aW50CiBlZnVzZXJlYWQyKEN0bHIgKmN0 bHIsIHUxNmludCBhZGRyKQogewpAQCAtMjk2OCwxOSArMzM1OCwxNyBAQAogCWludCBudHJpZXM7 CiAKIAlhZGRyICo9IDI7Ci0JLyotCi0JICogUmVhZCBvbmUgMTYtYnl0ZSBibG9jayBpbnRvIHJl Z2lzdGVycyBFRlVTRV9EQVRBWzAtM106Ci0JICogREFUQTA6IEYgRSBEIEMKLQkgKiBEQVRBMTog QiBBIDkgOAotCSAqIERBVEEyOiA3IDYgNSA0Ci0JICogREFUQTM6IDMgMiAxIDAKLQkgKi8KLQl0 bXAgPSBjc3IzMnIoY3RsciwgUnQzMDcwRWZ1c2VDdHJsKTsKKworCWlmKGN0bHItPm1hY192ZXIg PT0gMHgzMjkwKQorCQlyZWcgPSBSdDMyOTBFZnVzZUN0cmw7CisJZWxzZQorCQlyZWcgPSBSdDMw NzBFZnVzZUN0cmw7CisJdG1wID0gY3NyMzJyKGN0bHIsIHJlZyk7CiAJdG1wICY9IH4oUnQzMDcw RWZzcm9tTW9kZU1hc2sgfCBSdDMwNzBFZnNyb21BaW5NYXNrKTsKIAl0bXAgfD0gKGFkZHIgJiB+ MHhmKSA8PCBSdDMwNzBFZnNyb21BaW5TaGlmdCB8IFJ0MzA3MEVmc3JvbUtpY2s7Ci0JY3NyMzJ3 KGN0bHIsIFJ0MzA3MEVmdXNlQ3RybCwgdG1wKTsKKwljc3IzMncoY3RsciwgcmVnLCB0bXApOwog CWZvcihudHJpZXMgPSAwOyBudHJpZXMgPCA1MDA7IG50cmllcysrKXsKLQkJdG1wID0gY3NyMzJy KGN0bHIsIFJ0MzA3MEVmdXNlQ3RybCk7CisJCXRtcCA9IGNzcjMycihjdGxyLCByZWcpOwogCQlp ZighKHRtcCAmIFJ0MzA3MEVmc3JvbUtpY2spKQogCQkJYnJlYWs7CiAJCW1pY3JvZGVsYXkoMik7 CkBAIC0yOTkyLDcgKzMzODAsMTAgQEAKIAkJcmV0dXJuIDB4ZmZmZjsJLyogYWRkcmVzcyBub3Qg Zm91bmQgKi8KIAogCS8qIGRldGVybWluZSB0byB3aGljaCAzMi1iaXQgcmVnaXN0ZXIgb3VyIDE2 LWJpdCB3b3JkIGJlbG9uZ3MgKi8KLQlyZWcgPSBSdDMwNzBFZnVzZURhdGEzIC0gKGFkZHIgJiAw eGMpOworCWlmKGN0bHItPm1hY192ZXIgPT0gMHgzMjkwKQorCQlyZWcgPSBSdDMyOTBFZnVzZURh dGEzICsgKGFkZHIgJiAweGMpOworCWVsc2UKKwkJcmVnID0gUnQzMDcwRWZ1c2VEYXRhMyAtIChh ZGRyICYgMHhjKTsKIAl0bXAgPSBjc3IzMnIoY3RsciwgcmVnKTsKIAogCXJldHVybiAoYWRkciAm IDIpID8gdG1wID4+IDE2IDogdG1wICYgMHhmZmZmOwpAQCAtMzAxNCw3ICszNDA1LDEwIEBACiAJ LyogY2hlY2sgd2hldGhlciB0aGUgUk9NIGlzIGVGVVNFIFJPTSBvciBFRVBST00gKi8KIAlyb21f cmVhZCA9IGVlcmVhZDI7CiAJaWYoY3Rsci0+bWFjX3ZlciA+PSAweDMwNzEpewotCQl0bXAgPSBj c3IzMnIoY3RsciwgUnQzMDcwRWZ1c2VDdHJsKTsKKwkJaWYoY3Rsci0+bWFjX3ZlciA9PSAweDMy OTApCisJCQl0bXAgPSBjc3IzMnIoY3RsciwgUnQzMjkwRWZ1c2VDdHJsKTsKKwkJZWxzZQorCQkJ dG1wID0gY3NyMzJyKGN0bHIsIFJ0MzA3MEVmdXNlQ3RybCk7CiAJCWlmKHRtcCAmIFJ0MzA3MFNl bEVmdXNlKQogCQkJcm9tX3JlYWQgPSBlZnVzZXJlYWQyOwogCX0KQEAgLTMwMzEsNyArMzQyNSw3 IEBACiAJZWRldi0+ZWFbNV0gPSB2YWwgPj4gODsKIAogCS8qIHJlYWQgdmVuZG9yIEJCUCBzZXR0 aW5ncyAqLwotCWZvcihpID0gMDsgaSA8IDg7IGkrKyl7CisJZm9yKGkgPSAwOyBpIDwgbmVsZW0o Y3Rsci0+YmJwKTsgaSsrKXsKIAkJdmFsID0gcm9tX3JlYWQoY3RsciwgRWVwcm9tQmJwQmFzZSAr IGkpOwogCQljdGxyLT5iYnBbaV0udmFsID0gdmFsICYgMHhmZjsKIAkJY3Rsci0+YmJwW2ldLnJl ZyA9IHZhbCA+PiA4OwpAQCAtMzA3MCw2ICszNDY0LDExIEBACiAJCQljdGxyLT5yZl9yZXYgPSBS ZjMwNTM7CiAJCQljdGxyLT5udHhjaGFpbnMgPSAzOwogCQkJY3Rsci0+bnJ4Y2hhaW5zID0gMzsK KwkJfWVsc2UgaWYoY3Rsci0+bWFjX3ZlciA9PSAweDMyOTApeworCQkJLyogZGVmYXVsdCB0byBS RjMyOTAgMVQxUiAqLworCQkJY3Rsci0+cmZfcmV2ID0gUmYzMjkwOworCQkJY3Rsci0+bnR4Y2hh aW5zID0gMTsKKwkJCWN0bHItPm5yeGNoYWlucyA9IDE7CiAJCX1lbHNlIGlmKGN0bHItPm1hY192 ZXIgPj0gMHgzMDcxKXsKIAkJCS8qIGRlZmF1bHQgdG8gUkYzMDIwIDFUMVIgKi8KIAkJCWN0bHIt PnJmX3JldiA9IFJmMzAyMDsKQEAgLTMwODIsNyArMzQ4MSwxMCBAQAogCQkJY3Rsci0+bnJ4Y2hh aW5zID0gMjsKIAkJfQogCX1lbHNlewotCQljdGxyLT5yZl9yZXYgPSAodmFsID4+IDgpICYgMHhm OworCQlpZihjdGxyLT5tYWNfdmVyID09IDB4MzI5MCkKKwkJCWN0bHItPnJmX3JldiA9IHJvbV9y ZWFkKGN0bHIsIEVlcHJvbUNoaXBJZCk7CisJCWVsc2UKKwkJCWN0bHItPnJmX3JldiA9ICh2YWwg Pj4gOCkgJiAweGY7CiAJCWN0bHItPm50eGNoYWlucyA9ICh2YWwgPj4gNCkgJiAweGY7CiAJCWN0 bHItPm5yeGNoYWlucyA9IHZhbCAmIDB4ZjsKIAl9CkBAIC0zMjcwLDggKzM2NzIsOCBAQAogCXJl dHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqCi1nZXRyZm5hbWUodThpbnQgcmV2KQor c3RhdGljIGNoYXIgKgorZ2V0cmZuYW1lKHUxNmludCByZXYpCiB7CiAJaWYoKHJldiA9PSAwKSB8 fCAocmV2ID49IG5lbGVtKHJmbmFtZXMpKSkKIAkJcmV0dXJuICJ1bmtub3duIjsKQEAgLTM0MjAs MTMgKzM4MjIsMTcgQEAKIAlDdGxyICpjdGxyOwogCWludCBudHJpZXM7CiAJY2hhciAqZXJyOwot CXUzMmludCB0bXA7CisJdTMyaW50IHRtcCwgcmVnOwogCiAJU0VUKHRtcCk7CiAJY3RsciA9IGVk ZXYtPmN0bHI7CisJaWYoY3Rsci0+cGRldi0+ZGlkID09IFJhbGlua1JUMzI5MCkKKwkJcmVnID0g UGNpQ2ZnOworCWVsc2UKKwkJcmVnID0gQXNpY1ZlcklkOwogCS8qIHdhaXQgZm9yIE5JQyB0byBp bml0aWFsaXplICovCiAJZm9yKG50cmllcyA9IDA7IG50cmllcyA8IDEwMDsgbnRyaWVzKyspewot CQl0bXAgPSBjc3IzMnIoY3RsciwgQXNpY1ZlcklkKTsKKwkJdG1wID0gY3NyMzJyKGN0bHIsIHJl Zyk7CiAJCWlmKHRtcCAhPSAwICYmIHRtcCAhPSAweGZmZmZmZmZmKQogCQkJYnJlYWs7CiAJCW1p Y3JvZGVsYXkoMTApOwpAQCAtMzQzOCwxOCArMzg0NCwxNSBAQAogCWN0bHItPm1hY192ZXIgPSB0 bXAgPj4gMTY7CiAJY3Rsci0+bWFjX3JldiA9IHRtcCAmIDB4ZmZmZjsKIAotCWlmKGN0bHItPm1h Y192ZXIgIT0gMHgyODYwKXsKKwlpZihjdGxyLT5tYWNfdmVyICE9IDB4Mjg2MCkKIAkJc3dpdGNo KGN0bHItPnBkZXYtPmRpZCl7Ci0JCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCWNhc2UgUmFs aW5rUlQyODkwOgotCQkJY2FzZSBSYWxpbmtSVDI3OTA6Ci0JCQljYXNlIFJhbGlua1JUMzA5MDoK LQkJCWNhc2UgQXd0UlQyODkwOgotCQkJCQljdGxyLT5mbGFncyA9IEFkdmFuY2VkUHM7Ci0JCQkJ CWJyZWFrOworCQljYXNlIFJhbGlua1JUMjg5MDoKKwkJY2FzZSBSYWxpbmtSVDI3OTA6CisJCWNh c2UgQXd0UlQyODkwOgorCQkJY3Rsci0+ZmxhZ3MgfD0gQWR2YW5jZWRQczsKKwkJZGVmYXVsdDoK KwkJCWJyZWFrOwogCQl9Ci0JfQogCS8qIHJldHJpZXZlIFJGIHJldi4gbm8gYW5kIHZhcmlvdXMg b3RoZXIgdGhpbmdzIGZyb20gRUVQUk9NICovCiAJZWVwcm9tcmVhZChlZGV2KTsKIApAQCAtMzQ3 OCwxNyArMzg4MSwxOCBAQAogCQkKIAkJaWYocGRldi0+Y2NyYiAhPSAyIHx8IHBkZXYtPmNjcnUg IT0gMHg4MCkKIAkJCWNvbnRpbnVlOwotCQlpZihwZGV2LT52aWQgIT0gMHgxODE0KSAvKiBSYWxp bmsgKi8KKwkJaWYocGRldi0+dmlkICE9IFJhbGluaykKIAkJCWNvbnRpbnVlOwogCQlpZihwZGV2 LT5tZW1bMF0uYmFyICYgMSkKIAkJCWNvbnRpbnVlOwogCiAJCXN3aXRjaChwZGV2LT5kaWQpewot CQlkZWZhdWx0OgotCQkJY29udGludWU7CiAJCWNhc2UgUmFsaW5rUlQyNzkwOgogCQljYXNlIFJh bGlua1JUMzA5MDoKKwkJY2FzZSBSYWxpbmtSVDMyOTA6CiAJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJY3RsciA9IG1hbGxvYyhzaXplb2YoQ3RscikpOwpAQCAt MzU0Nyw3ICszOTUxLDcgQEAKIAllZGV2LT5jdGwgPSBydDI4NjBjdGw7CiAJZWRldi0+cHJvbWlz Y3VvdXMgPSBydDI4NjBwcm9taXNjdW91czsKIAllZGV2LT5tdWx0aWNhc3QgPSBydDI4NjBtdWx0 aWNhc3Q7Ci0JZWRldi0+bWJwcyA9IDEwOworCWVkZXYtPm1icHMgPSA1NDsKIAogCWlmKHJ0Mjg2 MGluaXQoZWRldikgPCAwKXsKIAkJZWRldi0+Y3RsciA9IG5pbDsK --0000000000002fdc4d05c6120fa7--