From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JobwE-00042k-Gh for qemu-devel@nongnu.org; Wed, 23 Apr 2008 06:10:54 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JobwA-0003yM-FZ for qemu-devel@nongnu.org; Wed, 23 Apr 2008 06:10:53 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Jobw9-0003xz-KA for qemu-devel@nongnu.org; Wed, 23 Apr 2008 06:10:50 -0400 Received: from smtp3-g19.free.fr ([212.27.42.29]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Jobw8-0003yt-0N for qemu-devel@nongnu.org; Wed, 23 Apr 2008 06:10:49 -0400 Received: from smtp3-g19.free.fr (localhost.localdomain [127.0.0.1]) by smtp3-g19.free.fr (Postfix) with ESMTP id 17FA617B561 for ; Wed, 23 Apr 2008 12:10:44 +0200 (CEST) Received: from [127.0.0.1] (rob92-10-88-171-126-33.fbx.proxad.net [88.171.126.33]) by smtp3-g19.free.fr (Postfix) with ESMTP id C33D617B53D for ; Wed, 23 Apr 2008 12:10:42 +0200 (CEST) Message-ID: <480F0B22.1000000@reactos.org> Date: Wed, 23 Apr 2008 12:10:42 +0200 From: =?UTF-8?B?SGVydsOpIFBvdXNzaW5lYXU=?= MIME-Version: 1.0 Subject: Re: [Qemu-devel] FDC: improve emulation [v2] References: <480656E7.7000707@reactos.org> In-Reply-To: Content-Type: multipart/mixed; boundary="------------080202030905010301070105" Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------080202030905010301070105 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi, First, Blue Swirl, thanks for the review. Blue Swirl a =C3=A9crit : > On 4/16/08, Herv=C3=A9 Poussineau wrote: >> I've done big improvements on floppy drive controller. >> For easier reviewing, I've tried to split them up in differents parts= . >> Sorry if some parts are still big. >> Each patch applies on top of the previous one. >> >> If only some of them are accepted, I can provide a global patch for o= nly >> these ones. Patches which needs more work will be resubmitted later. Here is a global patch after your comments. Changelog: - Adds a command lookup table, as suggested by Fabrice at=20 http://lists.gnu.org/archive/html/qemu-devel/2008-04/msg00143.html - This also moves initialization functions at the bottom of the file to=20 prevent multiple forward declarations. - Extract seeking to next sector handling in a function. Add a sector=20 seek in PIO read and write modes - Fixes status A and status B registers. It removes one Sun4m mutation.=20 Also removes the internal FD_CTRL_INTR flag. - Handles correctly FD_MSR_NONDMA/FD_DOR_NONDMA flags, and uses them=20 when possible. Fixes a problem with SPECIFY command. - Better handling of DOR register. DOR register shouldn't forget motor=20 states for non-existing drives (drives 2 and 3), even if no physical pin=20 for it exists. - Use FD_DOR_nRESET flag instead of internal FD_CTRL_RESET flag. - Support writing to DOR register even in reset mode (as said in=20 specification) - Stores controller state in MSR register instead of internal state=20 field. This simplifies the fdctrl_read_main_status() function, which may=20 be called in some tight loops. - Replaces bootsel field by the whole tdr register. It may be easier if=20 we want to later add support for tapes. - Supports up to 4 floppy drives if MAX_FD is set to 4. - Replaces access to cur_drv field by macros. Changes from v1: - patch 01: command_to_handler table size is now 256 (instead of 255) - patch 04: not included in this serie - patch 05: comment about Sun4m differences kept - patch 07: fixed data_pos incrementation - patch 08: version field kept - patch 11: fixed compilation - patch 12: not included in this serie I'll rework patch 4 and send later patch 12, once this one is committed. >> fdc_04_status_012.diff > > Not good, this makes Sparc64 print > SENSEI c0 00 > SENSEI c0 00 > forever. I've removed patch 04 from this serie, so this shouldn't happen anymore.=20 Blue Swirl, can you still please tell me how to reproduce the problem,=20 so I can take a look? Thanks, Herv=C3=A9 --------------080202030905010301070105 Content-Type: text/plain; name="fdc_v2.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="fdc_v2.diff" SW5kZXg6IGh3L2ZkYy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaHcvZmRjLmMJKHJldmlzaW9u IDQyMjApDQorKysgaHcvZmRjLmMJKHdvcmtpbmcgY29weSkNCkBAIC00OSw2ICs0OSw5IEBA DQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLwogLyogRmxvcHB5IGRyaXZlIGVtdWxhdGlvbiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwogCisjZGVmaW5lIEdFVF9DVVJfRFJWKGZkY3RybCkgKChmZGN0cmwp LT5jdXJfZHJ2KQorI2RlZmluZSBTRVRfQ1VSX0RSVihmZGN0cmwsIGRyaXZlKSAoKGZkY3Ry bCktPmN1cl9kcnYgPSAoZHJpdmUpKQorCiAvKiBXaWxsIGFsd2F5cyBiZSBhIGZpeGVkIHBh cmFtZXRlciBmb3IgdXMgKi8KICNkZWZpbmUgRkRfU0VDVE9SX0xFTiA1MTIKICNkZWZpbmUg RkRfU0VDVE9SX1NDICAyICAgLyogU2VjdG9yIHNpemUgY29kZSAqLwpAQCAtNjksMTAgKzcy LDYgQEANCiAgICAgRkRSSVZFX0RSVl9OT05FID0gMHgwMywgICAvKiBObyBkcml2ZSBjb25u ZWN0ZWQgICAgICovCiB9IGZkcml2ZV90eXBlX3Q7CiAKLXR5cGVkZWYgZW51bSBmZHJpdmVf ZmxhZ3NfdCB7Ci0gICAgRkRSSVZFX01PVE9SX09OICAgPSAweDAxLCAvKiBtb3RvciBvbi9v ZmYgICAgICAgICAgICovCi19IGZkcml2ZV9mbGFnc190OwotCiB0eXBlZGVmIGVudW0gZmRp c2tfZmxhZ3NfdCB7CiAgICAgRkRJU0tfREJMX1NJREVTICA9IDB4MDEsCiB9IGZkaXNrX2Zs YWdzX3Q7CkBAIC04MSwxNSArODAsMTEgQEANCiAgICAgQmxvY2tEcml2ZXJTdGF0ZSAqYnM7 CiAgICAgLyogRHJpdmUgc3RhdHVzICovCiAgICAgZmRyaXZlX3R5cGVfdCBkcml2ZTsKLSAg ICBmZHJpdmVfZmxhZ3NfdCBkcmZsYWdzOwogICAgIHVpbnQ4X3QgcGVycGVuZGljdWxhcjsg ICAgLyogMi44OCBNQiBhY2Nlc3MgbW9kZSAgICAqLwogICAgIC8qIFBvc2l0aW9uICovCiAg ICAgdWludDhfdCBoZWFkOwogICAgIHVpbnQ4X3QgdHJhY2s7CiAgICAgdWludDhfdCBzZWN0 OwotICAgIC8qIExhc3Qgb3BlcmF0aW9uIHN0YXR1cyAqLwotICAgIHVpbnQ4X3QgZGlyOyAg ICAgICAgICAgICAgLyogRGlyZWN0aW9uICAgICAgICAgICAgICAqLwotICAgIHVpbnQ4X3Qg cnc7ICAgICAgICAgICAgICAgLyogUmVhZC93cml0ZSAgICAgICAgICAgICAqLwogICAgIC8q IE1lZGlhICovCiAgICAgZmRpc2tfZmxhZ3NfdCBmbGFnczsKICAgICB1aW50OF90IGxhc3Rf c2VjdDsgICAgICAgIC8qIE5iIHNlY3RvciBwZXIgdHJhY2sgICAgKi8KQEAgLTEwMyw3ICs5 OCw2IEBADQogICAgIC8qIERyaXZlICovCiAgICAgZHJ2LT5icyA9IGJzOwogICAgIGRydi0+ ZHJpdmUgPSBGRFJJVkVfRFJWX05PTkU7Ci0gICAgZHJ2LT5kcmZsYWdzID0gMDsKICAgICBk cnYtPnBlcnBlbmRpY3VsYXIgPSAwOwogICAgIC8qIERpc2sgKi8KICAgICBkcnYtPmxhc3Rf c2VjdCA9IDA7CkBAIC0xMjIsNiArMTE2LDEzIEBADQogICAgIHJldHVybiBfZmRfc2VjdG9y KGRydi0+aGVhZCwgZHJ2LT50cmFjaywgZHJ2LT5zZWN0LCBkcnYtPmxhc3Rfc2VjdCk7CiB9 CiAKKy8qIFNlZWsgdG8gYSBuZXcgcG9zaXRpb246CisgKiByZXR1cm5zIDAgaWYgYWxyZWFk eSBvbiByaWdodCB0cmFjaworICogcmV0dXJucyAxIGlmIHRyYWNrIGNoYW5nZWQKKyAqIHJl dHVybnMgMiBpZiB0cmFjayBpcyBpbnZhbGlkCisgKiByZXR1cm5zIDMgaWYgc2VjdG9yIGlz IGludmFsaWQKKyAqIHJldHVybnMgNCBpZiBzZWVrIGlzIGRpc2FibGVkCisgKi8KIHN0YXRp YyBpbnQgZmRfc2VlayAoZmRyaXZlX3QgKmRydiwgdWludDhfdCBoZWFkLCB1aW50OF90IHRy YWNrLCB1aW50OF90IHNlY3QsCiAgICAgICAgICAgICAgICAgICAgIGludCBlbmFibGVfc2Vl aykKIHsKQEAgLTE3MCw4ICsxNzEsNiBAQA0KICAgICBkcnYtPmhlYWQgPSAwOwogICAgIGRy di0+dHJhY2sgPSAwOwogICAgIGRydi0+c2VjdCA9IDE7Ci0gICAgZHJ2LT5kaXIgPSAxOwot ICAgIGRydi0+cncgPSAwOwogfQogCiAvKiBSZWNvZ25pemUgZmxvcHB5IGZvcm1hdHMgKi8K QEAgLTI5NiwyNCArMjk1LDYgQEANCiAgICAgfQogfQogCi0vKiBNb3RvciBjb250cm9sICov Ci1zdGF0aWMgdm9pZCBmZF9zdGFydCAoZmRyaXZlX3QgKmRydikKLXsKLSAgICBkcnYtPmRy ZmxhZ3MgfD0gRkRSSVZFX01PVE9SX09OOwotfQotCi1zdGF0aWMgdm9pZCBmZF9zdG9wIChm ZHJpdmVfdCAqZHJ2KQotewotICAgIGRydi0+ZHJmbGFncyAmPSB+RkRSSVZFX01PVE9SX09O OwotfQotCi0vKiBSZS1pbml0aWFsaXNlIGEgZHJpdmVzIChtb3RvciBvZmYsIHJlcG9zaXRp b25lZCkgKi8KLXN0YXRpYyB2b2lkIGZkX3Jlc2V0IChmZHJpdmVfdCAqZHJ2KQotewotICAg IGZkX3N0b3AoZHJ2KTsKLSAgICBmZF9yZWNhbGlicmF0ZShkcnYpOwotfQotCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAv KiBJbnRlbCA4MjA3OCBmbG9wcHkgZGlzayBjb250cm9sbGVyIGVtdWxhdGlvbiAgICAgICAg ICAqLwogCkBAIC0zMjEsOSArMzAyLDkgQEANCiBzdGF0aWMgdm9pZCBmZGN0cmxfcmVzZXRf ZmlmbyAoZmRjdHJsX3QgKmZkY3RybCk7CiBzdGF0aWMgaW50IGZkY3RybF90cmFuc2Zlcl9o YW5kbGVyICh2b2lkICpvcGFxdWUsIGludCBuY2hhbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBkbWFfcG9zLCBpbnQgZG1hX2xlbik7Ci1zdGF0aWMgdm9p ZCBmZGN0cmxfcmFpc2VfaXJxIChmZGN0cmxfdCAqZmRjdHJsLCB1aW50OF90IHN0YXR1cyk7 Ci1zdGF0aWMgdm9pZCBmZGN0cmxfcmVzdWx0X3RpbWVyKHZvaWQgKm9wYXF1ZSk7CitzdGF0 aWMgdm9pZCBmZGN0cmxfcmFpc2VfaXJxIChmZGN0cmxfdCAqZmRjdHJsLCB1aW50OF90IHN0 YXR1czApOwogCitzdGF0aWMgdWludDMyX3QgZmRjdHJsX3JlYWRfc3RhdHVzQSAoZmRjdHJs X3QgKmZkY3RybCk7CiBzdGF0aWMgdWludDMyX3QgZmRjdHJsX3JlYWRfc3RhdHVzQiAoZmRj dHJsX3QgKmZkY3RybCk7CiBzdGF0aWMgdWludDMyX3QgZmRjdHJsX3JlYWRfZG9yIChmZGN0 cmxfdCAqZmRjdHJsKTsKIHN0YXRpYyB2b2lkIGZkY3RybF93cml0ZV9kb3IgKGZkY3RybF90 ICpmZGN0cmwsIHVpbnQzMl90IHZhbHVlKTsKQEAgLTMzNiwxNCArMzE3LDYgQEANCiBzdGF0 aWMgdWludDMyX3QgZmRjdHJsX3JlYWRfZGlyIChmZGN0cmxfdCAqZmRjdHJsKTsKIAogZW51 bSB7Ci0gICAgRkRfQ1RSTF9BQ1RJVkUgPSAweDAxLCAvKiBYWFg6IHN1cHByZXNzIHRoYXQg Ki8KLSAgICBGRF9DVFJMX1JFU0VUICA9IDB4MDIsCi0gICAgRkRfQ1RSTF9TTEVFUCAgPSAw eDA0LCAvKiBYWFg6IHN1cHByZXNzIHRoYXQgKi8KLSAgICBGRF9DVFJMX0JVU1kgICA9IDB4 MDgsIC8qIGRtYSB0cmFuc2ZlciBpbiBwcm9ncmVzcyAqLwotICAgIEZEX0NUUkxfSU5UUiAg ID0gMHgxMCwKLX07Ci0KLWVudW0gewogICAgIEZEX0RJUl9XUklURSAgID0gMCwKICAgICBG RF9ESVJfUkVBRCAgICA9IDEsCiAgICAgRkRfRElSX1NDQU5FICAgPSAyLApAQCAtMzUyLDE4 ICszMjUsMTQgQEANCiB9OwogCiBlbnVtIHsKLSAgICBGRF9TVEFURV9DTUQgICAgPSAweDAw LAotICAgIEZEX1NUQVRFX1NUQVRVUyA9IDB4MDEsCi0gICAgRkRfU1RBVEVfREFUQSAgID0g MHgwMiwKLSAgICBGRF9TVEFURV9TVEFURSAgPSAweDAzLAotICAgIEZEX1NUQVRFX01VTFRJ ICA9IDB4MTAsCi0gICAgRkRfU1RBVEVfU0VFSyAgID0gMHgyMCwKLSAgICBGRF9TVEFURV9G T1JNQVQgPSAweDQwLAorICAgIEZEX1NUQVRFX01VTFRJICA9IDB4MDEsCS8qIG11bHRpIHRy YWNrIGZsYWcgKi8KKyAgICBGRF9TVEFURV9GT1JNQVQgPSAweDAyLAkvKiBmb3JtYXQgZmxh ZyAqLworICAgIEZEX1NUQVRFX1NFRUsgICA9IDB4MDQsCS8qIHNlZWsgZmxhZyAqLwogfTsK IAogZW51bSB7Ci0gICAgRkRfUkVHXzAgPSAweDAwLAotICAgIEZEX1JFR19TVEFUVVNCID0g MHgwMSwKKyAgICBGRF9SRUdfU1JBID0gMHgwMCwKKyAgICBGRF9SRUdfU1JCID0gMHgwMSwK ICAgICBGRF9SRUdfRE9SID0gMHgwMiwKICAgICBGRF9SRUdfVERSID0gMHgwMywKICAgICBG RF9SRUdfTVNSID0gMHgwNCwKQEAgLTQyMiw3ICszOTEsNDAgQEANCiB9OwogCiBlbnVtIHsK KyAgICBGRF9TUjFfRUMgICAgICAgPSAweDgwLCAvKiBFbmQgb2YgY3lsaW5kZXIgKi8KK307 CisKK2VudW0geworICAgIEZEX1NSMl9TTlMgICAgICA9IDB4MDQsIC8qIFNjYW4gbm90IHNh dGlzZmllZCAqLworICAgIEZEX1NSMl9TRUggICAgICA9IDB4MDgsIC8qIFNjYW4gZXF1YWwg aGl0ICovCit9OworCitlbnVtIHsKKyAgICBGRF9TUkFfRElSICAgICAgPSAweDAxLAorICAg IEZEX1NSQV9uV1AgICAgICA9IDB4MDIsCisgICAgRkRfU1JBX25JTkRYICAgID0gMHgwNCwK KyAgICBGRF9TUkFfSERTRUwgICAgPSAweDA4LAorICAgIEZEX1NSQV9uVFJLMCAgICA9IDB4 MTAsCisgICAgRkRfU1JBX1NURVAgICAgID0gMHgyMCwKKyAgICBGRF9TUkFfbkRSVjIgICAg PSAweDQwLAorICAgIEZEX1NSQV9JTlRQRU5EICA9IDB4ODAsCit9OworCitlbnVtIHsKKyAg ICBGRF9TUkJfTVRSMCAgICAgPSAweDAxLAorICAgIEZEX1NSQl9NVFIxICAgICA9IDB4MDIs CisgICAgRkRfU1JCX1dHQVRFICAgID0gMHgwNCwKKyAgICBGRF9TUkJfUkRBVEEgICAgPSAw eDA4LAorICAgIEZEX1NSQl9XREFUQSAgICA9IDB4MTAsCisgICAgRkRfU1JCX0RSMCAgICAg ID0gMHgyMCwKK307CisKK2VudW0geworI2lmIE1BWF9GRCA9PSA0CisgICAgRkRfRE9SX1NF TE1BU0sgID0gMHgwMywKKyNlbHNlCiAgICAgRkRfRE9SX1NFTE1BU0sgID0gMHgwMSwKKyNl bmRpZgogICAgIEZEX0RPUl9uUkVTRVQgICA9IDB4MDQsCiAgICAgRkRfRE9SX0RNQUVOICAg ID0gMHgwOCwKICAgICBGRF9ET1JfTU9URU4wICAgPSAweDEwLApAQCAtNDMyLDcgKzQzNCwx MSBAQA0KIH07CiAKIGVudW0geworI2lmIE1BWF9GRCA9PSA0CiAgICAgRkRfVERSX0JPT1RT RUwgID0gMHgwYywKKyNlbHNlCisgICAgRkRfVERSX0JPT1RTRUwgID0gMHgwNCwKKyNlbmRp ZgogfTsKIAogZW51bSB7CkBAIC00NTYsMTUgKzQ2MiwxMSBAQA0KICAgICBGRF9ESVJfRFNL Q0hHICAgPSAweDgwLAogfTsKIAotI2RlZmluZSBGRF9TVEFURShzdGF0ZSkgKChzdGF0ZSkg JiBGRF9TVEFURV9TVEFURSkKLSNkZWZpbmUgRkRfU0VUX1NUQVRFKHN0YXRlLCBuZXdfc3Rh dGUpIFwKLWRvIHsgKHN0YXRlKSA9ICgoc3RhdGUpICYgfkZEX1NUQVRFX1NUQVRFKSB8IChu ZXdfc3RhdGUpOyB9IHdoaWxlICgwKQogI2RlZmluZSBGRF9NVUxUSV9UUkFDSyhzdGF0ZSkg KChzdGF0ZSkgJiBGRF9TVEFURV9NVUxUSSkKICNkZWZpbmUgRkRfRElEX1NFRUsoc3RhdGUp ICgoc3RhdGUpICYgRkRfU1RBVEVfU0VFSykKICNkZWZpbmUgRkRfRk9STUFUX0NNRChzdGF0 ZSkgKChzdGF0ZSkgJiBGRF9TVEFURV9GT1JNQVQpCiAKIHN0cnVjdCBmZGN0cmxfdCB7Ci0g ICAgZmRjdHJsX3QgKmZkY3RybDsKICAgICAvKiBDb250cm9sbGVyJ3MgaWRlbnRpZmljYXRp b24gKi8KICAgICB1aW50OF90IHZlcnNpb247CiAgICAgLyogSFcgKi8KQEAgLTQ3MywxNyAr NDc1LDIyIEBADQogICAgIHRhcmdldF9waHlzX2FkZHJfdCBpb19iYXNlOwogICAgIC8qIENv bnRyb2xsZXIgc3RhdGUgKi8KICAgICBRRU1VVGltZXIgKnJlc3VsdF90aW1lcjsKLSAgICB1 aW50OF90IHN0YXRlOwotICAgIHVpbnQ4X3QgZG1hX2VuOworICAgIHVpbnQ4X3Qgc3JhOwor ICAgIHVpbnQ4X3Qgc3JiOworICAgIHVpbnQ4X3QgZG9yOworICAgIHVpbnQ4X3QgdGRyOwor ICAgIHVpbnQ4X3QgZHNyOworICAgIHVpbnQ4X3QgbXNyOwogICAgIHVpbnQ4X3QgY3VyX2Ry djsKLSAgICB1aW50OF90IGJvb3RzZWw7CisgICAgdWludDhfdCBzdGF0dXMwOworICAgIHVp bnQ4X3Qgc3RhdHVzMTsKKyAgICB1aW50OF90IHN0YXR1czI7CiAgICAgLyogQ29tbWFuZCBG SUZPICovCiAgICAgdWludDhfdCAqZmlmbzsKICAgICB1aW50MzJfdCBkYXRhX3BvczsKICAg ICB1aW50MzJfdCBkYXRhX2xlbjsKICAgICB1aW50OF90IGRhdGFfc3RhdGU7CiAgICAgdWlu dDhfdCBkYXRhX2RpcjsKLSAgICB1aW50OF90IGludF9zdGF0dXM7CiAgICAgdWludDhfdCBl b3Q7IC8qIGxhc3Qgd2FudGVkIHNlY3RvciAqLwogICAgIC8qIFN0YXRlcyBrZXB0IG9ubHkg dG8gYmUgcmV0dXJuZWQgYmFjayAqLwogICAgIC8qIFRpbWVycyBzdGF0ZSAqLwpAQCAtNDk4 LDcgKzUwNSw3IEBADQogICAgIC8qIFN1bjRtIHF1aXJrcz8gKi8KICAgICBpbnQgc3VuNG07 CiAgICAgLyogRmxvcHB5IGRyaXZlcyAqLwotICAgIGZkcml2ZV90IGRyaXZlc1syXTsKKyAg ICBmZHJpdmVfdCBkcml2ZXNbTUFYX0ZEXTsKIH07CiAKIHN0YXRpYyB1aW50MzJfdCBmZGN0 cmxfcmVhZCAodm9pZCAqb3BhcXVlLCB1aW50MzJfdCByZWcpCkBAIC01MDcsMTUgKzUxNCwx MCBAQA0KICAgICB1aW50MzJfdCByZXR2YWw7CiAKICAgICBzd2l0Y2ggKHJlZyAmIDB4MDcp IHsKLSAgICBjYXNlIEZEX1JFR18wOgotICAgICAgICBpZiAoZmRjdHJsLT5zdW40bSkgewot ICAgICAgICAgICAgLy8gSWRlbnRpZnkgdG8gTGludXggYXMgUzgyMDc4QgotICAgICAgICAg ICAgcmV0dmFsID0gZmRjdHJsX3JlYWRfc3RhdHVzQihmZGN0cmwpOwotICAgICAgICB9IGVs c2UgewotICAgICAgICAgICAgcmV0dmFsID0gKHVpbnQzMl90KSgtMSk7Ci0gICAgICAgIH0K KyAgICBjYXNlIEZEX1JFR19TUkE6CisgICAgICAgIHJldHZhbCA9IGZkY3RybF9yZWFkX3N0 YXR1c0EoZmRjdHJsKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRF9SRUdfU1RBVFVT QjoKKyAgICBjYXNlIEZEX1JFR19TUkI6CiAgICAgICAgIHJldHZhbCA9IGZkY3RybF9yZWFk X3N0YXR1c0IoZmRjdHJsKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRF9SRUdfRE9S OgpAQCAtNjAzLDUzICs2MDUsNTQgQEANCiAKIHN0YXRpYyB2b2lkIGZkX3NhdmUgKFFFTVVG aWxlICpmLCBmZHJpdmVfdCAqZmQpCiB7Ci0gICAgdWludDhfdCB0bXA7Ci0KLSAgICB0bXAg PSBmZC0+ZHJmbGFnczsKLSAgICBxZW11X3B1dF84cyhmLCAmdG1wKTsKICAgICBxZW11X3B1 dF84cyhmLCAmZmQtPmhlYWQpOwogICAgIHFlbXVfcHV0XzhzKGYsICZmZC0+dHJhY2spOwog ICAgIHFlbXVfcHV0XzhzKGYsICZmZC0+c2VjdCk7Ci0gICAgcWVtdV9wdXRfOHMoZiwgJmZk LT5kaXIpOwotICAgIHFlbXVfcHV0XzhzKGYsICZmZC0+cncpOwogfQogCiBzdGF0aWMgdm9p ZCBmZGNfc2F2ZSAoUUVNVUZpbGUgKmYsIHZvaWQgKm9wYXF1ZSkKIHsKICAgICBmZGN0cmxf dCAqcyA9IG9wYXF1ZTsKKyAgICB1aW50OF90IHRtcDsKKyAgICBpbnQgaTsNCisgICAgdWlu dDhfdCBkb3IgPSBzLT5kb3IgfCBHRVRfQ1VSX0RSVihzKTsKIAotICAgIHFlbXVfcHV0Xzhz KGYsICZzLT5zdGF0ZSk7Ci0gICAgcWVtdV9wdXRfOHMoZiwgJnMtPmRtYV9lbik7Ci0gICAg cWVtdV9wdXRfOHMoZiwgJnMtPmN1cl9kcnYpOwotICAgIHFlbXVfcHV0XzhzKGYsICZzLT5i b290c2VsKTsKKyAgICAvKiBDb250cm9sbGVyIHN0YXRlICovCisgICAgcWVtdV9wdXRfOHMo ZiwgJnMtPnNyYSk7CisgICAgcWVtdV9wdXRfOHMoZiwgJnMtPnNyYik7CisgICAgcWVtdV9w dXRfOHMoZiwgJmRvcik7CisgICAgcWVtdV9wdXRfOHMoZiwgJnMtPnRkcik7CisgICAgcWVt dV9wdXRfOHMoZiwgJnMtPmRzcik7CisgICAgcWVtdV9wdXRfOHMoZiwgJnMtPm1zcik7Cisg ICAgcWVtdV9wdXRfOHMoZiwgJnMtPnN0YXR1czApOworICAgIHFlbXVfcHV0XzhzKGYsICZz LT5zdGF0dXMxKTsKKyAgICBxZW11X3B1dF84cyhmLCAmcy0+c3RhdHVzMik7CisgICAgLyog Q29tbWFuZCBGSUZPICovCiAgICAgcWVtdV9wdXRfYnVmZmVyKGYsIHMtPmZpZm8sIEZEX1NF Q1RPUl9MRU4pOwogICAgIHFlbXVfcHV0X2JlMzJzKGYsICZzLT5kYXRhX3Bvcyk7CiAgICAg cWVtdV9wdXRfYmUzMnMoZiwgJnMtPmRhdGFfbGVuKTsKICAgICBxZW11X3B1dF84cyhmLCAm cy0+ZGF0YV9zdGF0ZSk7CiAgICAgcWVtdV9wdXRfOHMoZiwgJnMtPmRhdGFfZGlyKTsKLSAg ICBxZW11X3B1dF84cyhmLCAmcy0+aW50X3N0YXR1cyk7CiAgICAgcWVtdV9wdXRfOHMoZiwg JnMtPmVvdCk7CisgICAgLyogU3RhdGVzIGtlcHQgb25seSB0byBiZSByZXR1cm5lZCBiYWNr ICovCiAgICAgcWVtdV9wdXRfOHMoZiwgJnMtPnRpbWVyMCk7CiAgICAgcWVtdV9wdXRfOHMo ZiwgJnMtPnRpbWVyMSk7CiAgICAgcWVtdV9wdXRfOHMoZiwgJnMtPnByZWNvbXBfdHJrKTsK ICAgICBxZW11X3B1dF84cyhmLCAmcy0+Y29uZmlnKTsKICAgICBxZW11X3B1dF84cyhmLCAm cy0+bG9jayk7CiAgICAgcWVtdV9wdXRfOHMoZiwgJnMtPnB3cmQpOwotICAgIGZkX3NhdmUo ZiwgJnMtPmRyaXZlc1swXSk7Ci0gICAgZmRfc2F2ZShmLCAmcy0+ZHJpdmVzWzFdKTsKKwor ICAgIHRtcCA9IE1BWF9GRDsKKyAgICBxZW11X3B1dF84cyhmLCAmdG1wKTsKKyAgICBmb3Ig KGkgPSAwOyBpIDwgTUFYX0ZEOyBpKyspCisgICAgICAgIGZkX3NhdmUoZiwgJnMtPmRyaXZl c1tpXSk7CiB9CiAKIHN0YXRpYyBpbnQgZmRfbG9hZCAoUUVNVUZpbGUgKmYsIGZkcml2ZV90 ICpmZCkKIHsKLSAgICB1aW50OF90IHRtcDsKLQotICAgIHFlbXVfZ2V0XzhzKGYsICZ0bXAp OwotICAgIGZkLT5kcmZsYWdzID0gdG1wOwogICAgIHFlbXVfZ2V0XzhzKGYsICZmZC0+aGVh ZCk7CiAgICAgcWVtdV9nZXRfOHMoZiwgJmZkLT50cmFjayk7CiAgICAgcWVtdV9nZXRfOHMo ZiwgJmZkLT5zZWN0KTsKLSAgICBxZW11X2dldF84cyhmLCAmZmQtPmRpcik7Ci0gICAgcWVt dV9nZXRfOHMoZiwgJmZkLT5ydyk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTY1NywzMyAr NjYwLDQ5IEBADQogc3RhdGljIGludCBmZGNfbG9hZCAoUUVNVUZpbGUgKmYsIHZvaWQgKm9w YXF1ZSwgaW50IHZlcnNpb25faWQpCiB7CiAgICAgZmRjdHJsX3QgKnMgPSBvcGFxdWU7Ci0g ICAgaW50IHJldDsKKyAgICBpbnQgaSwgcmV0ID0gMDsKKyAgICB1aW50OF90IG47CiAKLSAg ICBpZiAodmVyc2lvbl9pZCAhPSAxKQorICAgIGlmICh2ZXJzaW9uX2lkICE9IDIpCiAgICAg ICAgIHJldHVybiAtRUlOVkFMOwogCi0gICAgcWVtdV9nZXRfOHMoZiwgJnMtPnN0YXRlKTsK LSAgICBxZW11X2dldF84cyhmLCAmcy0+ZG1hX2VuKTsKLSAgICBxZW11X2dldF84cyhmLCAm cy0+Y3VyX2Rydik7Ci0gICAgcWVtdV9nZXRfOHMoZiwgJnMtPmJvb3RzZWwpOworICAgIC8q IENvbnRyb2xsZXIgc3RhdGUgKi8KKyAgICBxZW11X2dldF84cyhmLCAmcy0+c3JhKTsKKyAg ICBxZW11X2dldF84cyhmLCAmcy0+c3JiKTsKKyAgICBxZW11X2dldF84cyhmLCAmcy0+ZG9y KTsNCisgICAgU0VUX0NVUl9EUlYocywgcy0+ZG9yICYgRkRfRE9SX1NFTE1BU0spOw0KKyAg ICBzLT5kb3IgJj0gfkZEX0RPUl9TRUxNQVNLOworICAgIHFlbXVfZ2V0XzhzKGYsICZzLT50 ZHIpOworICAgIHFlbXVfZ2V0XzhzKGYsICZzLT5kc3IpOworICAgIHFlbXVfZ2V0XzhzKGYs ICZzLT5tc3IpOworICAgIHFlbXVfZ2V0XzhzKGYsICZzLT5zdGF0dXMwKTsKKyAgICBxZW11 X2dldF84cyhmLCAmcy0+c3RhdHVzMSk7CisgICAgcWVtdV9nZXRfOHMoZiwgJnMtPnN0YXR1 czIpOworICAgIC8qIENvbW1hbmQgRklGTyAqLwogICAgIHFlbXVfZ2V0X2J1ZmZlcihmLCBz LT5maWZvLCBGRF9TRUNUT1JfTEVOKTsKICAgICBxZW11X2dldF9iZTMycyhmLCAmcy0+ZGF0 YV9wb3MpOwogICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5kYXRhX2xlbik7CiAgICAgcWVt dV9nZXRfOHMoZiwgJnMtPmRhdGFfc3RhdGUpOwogICAgIHFlbXVfZ2V0XzhzKGYsICZzLT5k YXRhX2Rpcik7Ci0gICAgcWVtdV9nZXRfOHMoZiwgJnMtPmludF9zdGF0dXMpOwogICAgIHFl bXVfZ2V0XzhzKGYsICZzLT5lb3QpOworICAgIC8qIFN0YXRlcyBrZXB0IG9ubHkgdG8gYmUg cmV0dXJuZWQgYmFjayAqLwogICAgIHFlbXVfZ2V0XzhzKGYsICZzLT50aW1lcjApOwogICAg IHFlbXVfZ2V0XzhzKGYsICZzLT50aW1lcjEpOwogICAgIHFlbXVfZ2V0XzhzKGYsICZzLT5w cmVjb21wX3Ryayk7CiAgICAgcWVtdV9nZXRfOHMoZiwgJnMtPmNvbmZpZyk7CiAgICAgcWVt dV9nZXRfOHMoZiwgJnMtPmxvY2spOwogICAgIHFlbXVfZ2V0XzhzKGYsICZzLT5wd3JkKTsK KyAgICBxZW11X2dldF84cyhmLCAmbik7CiAKLSAgICByZXQgPSBmZF9sb2FkKGYsICZzLT5k cml2ZXNbMF0pOwotICAgIGlmIChyZXQgPT0gMCkKLSAgICAgICAgcmV0ID0gZmRfbG9hZChm LCAmcy0+ZHJpdmVzWzFdKTsKKyAgICBpZiAobiA+IE1BWF9GRCkKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CiAKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIHJl dCA9IGZkX2xvYWQoZiwgJnMtPmRyaXZlc1tpXSk7CisgICAgICAgIGlmIChyZXQgIT0gMCkK KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIHJldHVybiByZXQ7CiB9CiAKQEAg LTY5NCw3OCArNzEzLDYgQEANCiAgICAgZmRjdHJsX3Jlc2V0KHMsIDApOwogfQogCi1zdGF0 aWMgZmRjdHJsX3QgKmZkY3RybF9pbml0X2NvbW1vbiAocWVtdV9pcnEgaXJxLCBpbnQgZG1h X2NoYW5uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9w aHlzX2FkZHJfdCBpb19iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJsb2NrRHJpdmVyU3RhdGUgKipmZHMpCi17Ci0gICAgZmRjdHJsX3QgKmZkY3RybDsK LSAgICBpbnQgaTsKLQotICAgIEZMT1BQWV9EUFJJTlRGKCJpbml0IGNvbnRyb2xsZXJcbiIp OwotICAgIGZkY3RybCA9IHFlbXVfbWFsbG9jeihzaXplb2YoZmRjdHJsX3QpKTsKLSAgICBp ZiAoIWZkY3RybCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZmRjdHJsLT5maWZvID0g cWVtdV9tZW1hbGlnbig1MTIsIEZEX1NFQ1RPUl9MRU4pOwotICAgIGlmIChmZGN0cmwtPmZp Zm8gPT0gTlVMTCkgewotICAgICAgICBxZW11X2ZyZWUoZmRjdHJsKTsKLSAgICAgICAgcmV0 dXJuIE5VTEw7Ci0gICAgfQotICAgIGZkY3RybC0+cmVzdWx0X3RpbWVyID0gcWVtdV9uZXdf dGltZXIodm1fY2xvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmZGN0cmxfcmVzdWx0X3RpbWVyLCBmZGN0cmwpOwotCi0gICAgZmRjdHJsLT52ZXJz aW9uID0gMHg5MDsgLyogSW50ZWwgODIwNzggY29udHJvbGxlciAqLwotICAgIGZkY3RybC0+ aXJxID0gaXJxOwotICAgIGZkY3RybC0+ZG1hX2NoYW5uID0gZG1hX2NoYW5uOwotICAgIGZk Y3RybC0+aW9fYmFzZSA9IGlvX2Jhc2U7Ci0gICAgZmRjdHJsLT5jb25maWcgPSBGRF9DT05G SUdfRUlTIHwgRkRfQ09ORklHX0VGSUZPOyAvKiBJbXBsaWNpdCBzZWVrLCBwb2xsaW5nICYg RklGTyBlbmFibGVkICovCi0gICAgaWYgKGZkY3RybC0+ZG1hX2NoYW5uICE9IC0xKSB7Ci0g ICAgICAgIGZkY3RybC0+ZG1hX2VuID0gMTsKLSAgICAgICAgRE1BX3JlZ2lzdGVyX2NoYW5u ZWwoZG1hX2NoYW5uLCAmZmRjdHJsX3RyYW5zZmVyX2hhbmRsZXIsIGZkY3RybCk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgZmRjdHJsLT5kbWFfZW4gPSAwOwotICAgIH0KLSAgICBmb3Ig KGkgPSAwOyBpIDwgTUFYX0ZEOyBpKyspIHsKLSAgICAgICAgZmRfaW5pdCgmZmRjdHJsLT5k cml2ZXNbaV0sIGZkc1tpXSk7Ci0gICAgfQotICAgIGZkY3RybF9yZXNldChmZGN0cmwsIDAp OwotICAgIGZkY3RybC0+c3RhdGUgPSBGRF9DVFJMX0FDVElWRTsKLSAgICByZWdpc3Rlcl9z YXZldm0oImZkYyIsIGlvX2Jhc2UsIDEsIGZkY19zYXZlLCBmZGNfbG9hZCwgZmRjdHJsKTsK LSAgICBxZW11X3JlZ2lzdGVyX3Jlc2V0KGZkY3RybF9leHRlcm5hbF9yZXNldCwgZmRjdHJs KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0ZEOyBpKyspIHsKLSAgICAgICAgZmRfcmV2 YWxpZGF0ZSgmZmRjdHJsLT5kcml2ZXNbaV0pOwotICAgIH0KLQotICAgIHJldHVybiBmZGN0 cmw7Ci19Ci0KLWZkY3RybF90ICpmZGN0cmxfaW5pdCAocWVtdV9pcnEgaXJxLCBpbnQgZG1h X2NoYW5uLCBpbnQgbWVtX21hcHBlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0 X3BoeXNfYWRkcl90IGlvX2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgIEJsb2NrRHJp dmVyU3RhdGUgKipmZHMpCi17Ci0gICAgZmRjdHJsX3QgKmZkY3RybDsKLSAgICBpbnQgaW9f bWVtOwotCi0gICAgZmRjdHJsID0gZmRjdHJsX2luaXRfY29tbW9uKGlycSwgZG1hX2NoYW5u LCBpb19iYXNlLCBmZHMpOwotCi0gICAgZmRjdHJsLT5zdW40bSA9IDA7Ci0gICAgaWYgKG1l bV9tYXBwZWQpIHsKLSAgICAgICAgaW9fbWVtID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgw LCBmZGN0cmxfbWVtX3JlYWQsIGZkY3RybF9tZW1fd3JpdGUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZmRjdHJsKTsKLSAgICAgICAgY3B1X3JlZ2lzdGVy X3BoeXNpY2FsX21lbW9yeShpb19iYXNlLCAweDA4LCBpb19tZW0pOwotICAgIH0gZWxzZSB7 Ci0gICAgICAgIHJlZ2lzdGVyX2lvcG9ydF9yZWFkKCh1aW50MzJfdClpb19iYXNlICsgMHgw MSwgNSwgMSwgJmZkY3RybF9yZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm ZGN0cmwpOwotICAgICAgICByZWdpc3Rlcl9pb3BvcnRfcmVhZCgodWludDMyX3QpaW9fYmFz ZSArIDB4MDcsIDEsIDEsICZmZGN0cmxfcmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmRjdHJsKTsKLSAgICAgICAgcmVnaXN0ZXJfaW9wb3J0X3dyaXRlKCh1aW50MzJf dClpb19iYXNlICsgMHgwMSwgNSwgMSwgJmZkY3RybF93cml0ZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZkY3RybCk7Ci0gICAgICAgIHJlZ2lzdGVyX2lvcG9ydF93cml0 ZSgodWludDMyX3QpaW9fYmFzZSArIDB4MDcsIDEsIDEsICZmZGN0cmxfd3JpdGUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmZGN0cmwpOwotICAgIH0KLQotICAgIHJldHVy biBmZGN0cmw7Ci19Ci0KIHN0YXRpYyB2b2lkIGZkY3RybF9oYW5kbGVfdGModm9pZCAqb3Bh cXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7CiAgICAgLy9mZGN0cmxfdCAqcyA9IG9wYXF1 ZTsKQEAgLTc3NiwyMyArNzIzLDYgQEANCiAgICAgfQogfQogCi1mZGN0cmxfdCAqc3VuNG1f ZmRjdHJsX2luaXQgKHFlbXVfaXJxIGlycSwgdGFyZ2V0X3BoeXNfYWRkcl90IGlvX2Jhc2Us Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKipmZHMs IHFlbXVfaXJxICpmZGNfdGMpCi17Ci0gICAgZmRjdHJsX3QgKmZkY3RybDsKLSAgICBpbnQg aW9fbWVtOwotCi0gICAgZmRjdHJsID0gZmRjdHJsX2luaXRfY29tbW9uKGlycSwgMCwgaW9f YmFzZSwgZmRzKTsKLSAgICBmZGN0cmwtPnN1bjRtID0gMTsKLSAgICBpb19tZW0gPSBjcHVf cmVnaXN0ZXJfaW9fbWVtb3J5KDAsIGZkY3RybF9tZW1fcmVhZF9zdHJpY3QsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGN0cmxfbWVtX3dyaXRlX3N0cmljdCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkY3RybCk7Ci0gICAgY3B1 X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShpb19iYXNlLCAweDA4LCBpb19tZW0pOwotICAg ICpmZGNfdGMgPSAqcWVtdV9hbGxvY2F0ZV9pcnFzKGZkY3RybF9oYW5kbGVfdGMsIGZkY3Ry bCwgMSk7Ci0KLSAgICByZXR1cm4gZmRjdHJsOwotfQotCiAvKiBYWFg6IG1heSBjaGFuZ2Ug aWYgbW92ZWQgdG8gYmRydiAqLwogaW50IGZkY3RybF9nZXRfZHJpdmVfdHlwZShmZGN0cmxf dCAqZmRjdHJsLCBpbnQgZHJpdmVfbnVtKQogewpAQCAtODAyLDI1ICs3MzIsMjggQEANCiAv KiBDaGFuZ2UgSVJRIHN0YXRlICovCiBzdGF0aWMgdm9pZCBmZGN0cmxfcmVzZXRfaXJxIChm ZGN0cmxfdCAqZmRjdHJsKQogeworICAgIGlmICghKGZkY3RybC0+c3JhICYgRkRfU1JBX0lO VFBFTkQpKQorICAgICAgICByZXR1cm47CiAgICAgRkxPUFBZX0RQUklOVEYoIlJlc2V0IGlu dGVycnVwdFxuIik7CiAgICAgcWVtdV9zZXRfaXJxKGZkY3RybC0+aXJxLCAwKTsKLSAgICBm ZGN0cmwtPnN0YXRlICY9IH5GRF9DVFJMX0lOVFI7CisgICAgZmRjdHJsLT5zcmEgJj0gfkZE X1NSQV9JTlRQRU5EOwogfQogCi1zdGF0aWMgdm9pZCBmZGN0cmxfcmFpc2VfaXJxIChmZGN0 cmxfdCAqZmRjdHJsLCB1aW50OF90IHN0YXR1cykKK3N0YXRpYyB2b2lkIGZkY3RybF9yYWlz ZV9pcnEgKGZkY3RybF90ICpmZGN0cmwsIHVpbnQ4X3Qgc3RhdHVzMCkKIHsKLSAgICAvLyBT cGFyYyBtdXRhdGlvbgotICAgIGlmIChmZGN0cmwtPnN1bjRtICYmICFmZGN0cmwtPmRtYV9l bikgewotICAgICAgICBmZGN0cmwtPnN0YXRlICY9IH5GRF9DVFJMX0JVU1k7Ci0gICAgICAg IGZkY3RybC0+aW50X3N0YXR1cyA9IHN0YXR1czsKKyAgICAvKiBTcGFyYyBtdXRhdGlvbiAq LworICAgIGlmIChmZGN0cmwtPnN1bjRtICYmIChmZGN0cmwtPm1zciAmIEZEX01TUl9DTURC VVNZKSkgeworICAgICAgICBmZGN0cmwtPm1zciAmPSB+RkRfTVNSX0NNREJVU1k7CisgICAg ICAgIGZkY3RybC0+bXNyIHw9IEZEX01TUl9SUU0gfCBGRF9NU1JfRElPOyAvKiBYWFg6IG5v dCBzdXJlICovCisgICAgICAgIGZkY3RybC0+c3RhdHVzMCA9IHN0YXR1czA7CiAgICAgICAg IHJldHVybjsKICAgICB9Ci0gICAgaWYgKH4oZmRjdHJsLT5zdGF0ZSAmIEZEX0NUUkxfSU5U UikpIHsKKyAgICBpZiAoIShmZGN0cmwtPnNyYSAmIEZEX1NSQV9JTlRQRU5EKSkgewogICAg ICAgICBxZW11X3NldF9pcnEoZmRjdHJsLT5pcnEsIDEpOwotICAgICAgICBmZGN0cmwtPnN0 YXRlIHw9IEZEX0NUUkxfSU5UUjsKKyAgICAgICAgZmRjdHJsLT5zcmEgfD0gRkRfU1JBX0lO VFBFTkQ7CiAgICAgfQotICAgIEZMT1BQWV9EUFJJTlRGKCJTZXQgaW50ZXJydXB0IHN0YXR1 cyB0byAweCUwMnhcbiIsIHN0YXR1cyk7Ci0gICAgZmRjdHJsLT5pbnRfc3RhdHVzID0gc3Rh dHVzOworICAgIGZkY3RybC0+c3RhdHVzMCA9IHN0YXR1czA7CisgICAgRkxPUFBZX0RQUklO VEYoIlNldCBpbnRlcnJ1cHQgc3RhdHVzIHRvIDB4JTAyeFxuIiwgZmRjdHJsLT5zdGF0dXMw KTsKIH0KIAogLyogUmVzZXQgY29udHJvbGxlciAqLwpAQCAtODMxLDU3ICs3NjQsOTYgQEAN CiAgICAgRkxPUFBZX0RQUklOVEYoInJlc2V0IGNvbnRyb2xsZXJcbiIpOwogICAgIGZkY3Ry bF9yZXNldF9pcnEoZmRjdHJsKTsKICAgICAvKiBJbml0aWFsaXNlIGNvbnRyb2xsZXIgKi8K KyAgICBmZGN0cmwtPnNyYSA9IDA7CisgICAgZmRjdHJsLT5zcmIgPSAweGMwOworICAgIGlm ICghZmRjdHJsLT5kcml2ZXNbMV0uYnMpCisgICAgICAgIGZkY3RybC0+c3JhIHw9IEZEX1NS QV9uRFJWMjsKICAgICBmZGN0cmwtPmN1cl9kcnYgPSAwOworICAgIGZkY3RybC0+ZG9yID0g RkRfRE9SX25SRVNFVDsKKyAgICBmZGN0cmwtPmRvciB8PSAoZmRjdHJsLT5kbWFfY2hhbm4g IT0gLTEpID8gRkRfRE9SX0RNQUVOIDogMDsKKyAgICBmZGN0cmwtPm1zciA9IEZEX01TUl9S UU07CiAgICAgLyogRklGTyBzdGF0ZSAqLwogICAgIGZkY3RybC0+ZGF0YV9wb3MgPSAwOwog ICAgIGZkY3RybC0+ZGF0YV9sZW4gPSAwOwotICAgIGZkY3RybC0+ZGF0YV9zdGF0ZSA9IEZE X1NUQVRFX0NNRDsKKyAgICBmZGN0cmwtPmRhdGFfc3RhdGUgPSAwOwogICAgIGZkY3RybC0+ ZGF0YV9kaXIgPSBGRF9ESVJfV1JJVEU7CiAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9GRDsg aSsrKQotICAgICAgICBmZF9yZXNldCgmZmRjdHJsLT5kcml2ZXNbaV0pOworICAgICAgICBm ZF9yZWNhbGlicmF0ZSgmZmRjdHJsLT5kcml2ZXNbaV0pOwogICAgIGZkY3RybF9yZXNldF9m aWZvKGZkY3RybCk7Ci0gICAgaWYgKGRvX2lycSkKKyAgICBpZiAoZG9faXJxKSB7CiAgICAg ICAgIGZkY3RybF9yYWlzZV9pcnEoZmRjdHJsLCBGRF9TUjBfUkRZQ0hHKTsKKyAgICB9CiB9 CiAKIHN0YXRpYyBpbmxpbmUgZmRyaXZlX3QgKmRydjAgKGZkY3RybF90ICpmZGN0cmwpCiB7 Ci0gICAgcmV0dXJuICZmZGN0cmwtPmRyaXZlc1tmZGN0cmwtPmJvb3RzZWxdOworICAgIHJl dHVybiAmZmRjdHJsLT5kcml2ZXNbKGZkY3RybC0+dGRyICYgRkRfVERSX0JPT1RTRUwpID4+ IDJdOwogfQogCiBzdGF0aWMgaW5saW5lIGZkcml2ZV90ICpkcnYxIChmZGN0cmxfdCAqZmRj dHJsKQogewotICAgIHJldHVybiAmZmRjdHJsLT5kcml2ZXNbMSAtIGZkY3RybC0+Ym9vdHNl bF07CisgICAgaWYgKChmZGN0cmwtPnRkciAmIEZEX1REUl9CT09UU0VMKSA8ICgxIDw8IDIp KQorICAgICAgICByZXR1cm4gJmZkY3RybC0+ZHJpdmVzWzFdOworICAgIGVsc2UKKyAgICAg ICAgcmV0dXJuICZmZGN0cmwtPmRyaXZlc1swXTsKIH0KIAorI2lmIE1BWF9GRCA9PSA0Citz dGF0aWMgaW5saW5lIGZkcml2ZV90ICpkcnYyIChmZGN0cmxfdCAqZmRjdHJsKQoreworICAg IGlmICgoZmRjdHJsLT50ZHIgJiBGRF9URFJfQk9PVFNFTCkgPCAoMiA8PCAyKSkKKyAgICAg ICAgcmV0dXJuICZmZGN0cmwtPmRyaXZlc1syXTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy biAmZmRjdHJsLT5kcml2ZXNbMV07Cit9CisKK3N0YXRpYyBpbmxpbmUgZmRyaXZlX3QgKmRy djMgKGZkY3RybF90ICpmZGN0cmwpCit7CisgICAgaWYgKChmZGN0cmwtPnRkciAmIEZEX1RE Ul9CT09UU0VMKSA8ICgzIDw8IDIpKQorICAgICAgICByZXR1cm4gJmZkY3RybC0+ZHJpdmVz WzNdOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICZmZGN0cmwtPmRyaXZlc1syXTsKK30K KyNlbmRpZgorCiBzdGF0aWMgZmRyaXZlX3QgKmdldF9jdXJfZHJ2IChmZGN0cmxfdCAqZmRj dHJsKQogewotICAgIHJldHVybiBmZGN0cmwtPmN1cl9kcnYgPT0gMCA/IGRydjAoZmRjdHJs KSA6IGRydjEoZmRjdHJsKTsKKyAgICBzd2l0Y2ggKEdFVF9DVVJfRFJWKGZkY3RybCkpIHsK KyAgICAgICAgY2FzZSAwOiByZXR1cm4gZHJ2MChmZGN0cmwpOworICAgICAgICBjYXNlIDE6 IHJldHVybiBkcnYxKGZkY3RybCk7CisjaWYgTUFYX0ZEID09IDQKKyAgICAgICAgY2FzZSAy OiByZXR1cm4gZHJ2MihmZGN0cmwpOworICAgICAgICBjYXNlIDM6IHJldHVybiBkcnYzKGZk Y3RybCk7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CisgICAgfQog fQogCisvKiBTdGF0dXMgQSByZWdpc3RlciA6IDB4MDAgKHJlYWQtb25seSkgKi8KK3N0YXRp YyB1aW50MzJfdCBmZGN0cmxfcmVhZF9zdGF0dXNBIChmZGN0cmxfdCAqZmRjdHJsKQorewor ICAgIHVpbnQzMl90IHJldHZhbCA9IGZkY3RybC0+c3JhOworCisgICAgRkxPUFBZX0RQUklO VEYoInN0YXR1cyByZWdpc3RlciBBOiAweCUwMnhcbiIsIHJldHZhbCk7CisKKyAgICByZXR1 cm4gcmV0dmFsOworfQorCiAvKiBTdGF0dXMgQiByZWdpc3RlciA6IDB4MDEgKHJlYWQtb25s eSkgKi8KIHN0YXRpYyB1aW50MzJfdCBmZGN0cmxfcmVhZF9zdGF0dXNCIChmZGN0cmxfdCAq ZmRjdHJsKQogewotICAgIEZMT1BQWV9EUFJJTlRGKCJzdGF0dXMgcmVnaXN0ZXI6IDB4MDBc biIpOwotICAgIHJldHVybiAwOworICAgIHVpbnQzMl90IHJldHZhbCA9IGZkY3RybC0+c3Ji OworCisgICAgRkxPUFBZX0RQUklOVEYoInN0YXR1cyByZWdpc3RlciBCOiAweCUwMnhcbiIs IHJldHZhbCk7CisKKyAgICByZXR1cm4gcmV0dmFsOwogfQogCiAvKiBEaWdpdGFsIG91dHB1 dCByZWdpc3RlciA6IDB4MDIgKi8KIHN0YXRpYyB1aW50MzJfdCBmZGN0cmxfcmVhZF9kb3Ig KGZkY3RybF90ICpmZGN0cmwpCiB7Ci0gICAgdWludDMyX3QgcmV0dmFsID0gMDsKKyAgICB1 aW50MzJfdCByZXR2YWwgPSBmZGN0cmwtPmRvcjsKIAotICAgIC8qIERyaXZlIG1vdG9ycyBz dGF0ZSBpbmRpY2F0b3JzICovCi0gICAgaWYgKGRydjAoZmRjdHJsKS0+ZHJmbGFncyAmIEZE UklWRV9NT1RPUl9PTikKLSAgICAgICAgcmV0dmFsIHw9IEZEX0RPUl9NT1RFTjA7Ci0gICAg aWYgKGRydjEoZmRjdHJsKS0+ZHJmbGFncyAmIEZEUklWRV9NT1RPUl9PTikKLSAgICAgICAg cmV0dmFsIHw9IEZEX0RPUl9NT1RFTjE7Ci0gICAgLyogRE1BIGVuYWJsZSAqLwotICAgIGlm IChmZGN0cmwtPmRtYV9lbikKLSAgICAgICAgcmV0dmFsIHw9IEZEX0RPUl9ETUFFTjsKLSAg ICAvKiBSZXNldCBpbmRpY2F0b3IgKi8KLSAgICBpZiAoIShmZGN0cmwtPnN0YXRlICYgRkRf Q1RSTF9SRVNFVCkpCi0gICAgICAgIHJldHZhbCB8PSBGRF9ET1JfblJFU0VUOwogICAgIC8q IFNlbGVjdGVkIGRyaXZlICovCiAgICAgcmV0dmFsIHw9IGZkY3RybC0+Y3VyX2RydjsKICAg ICBGTE9QUFlfRFBSSU5URigiZGlnaXRhbCBvdXRwdXQgcmVnaXN0ZXI6IDB4JTAyeFxuIiwg cmV0dmFsKTsKQEAgLTg5MSw1MyArODYzLDQ3IEBADQogCiBzdGF0aWMgdm9pZCBmZGN0cmxf d3JpdGVfZG9yIChmZGN0cmxfdCAqZmRjdHJsLCB1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICAv KiBSZXNldCBtb2RlICovCi0gICAgaWYgKGZkY3RybC0+c3RhdGUgJiBGRF9DVFJMX1JFU0VU KSB7Ci0gICAgICAgIGlmICghKHZhbHVlICYgRkRfRE9SX25SRVNFVCkpIHsKLSAgICAgICAg ICAgIEZMT1BQWV9EUFJJTlRGKCJGbG9wcHkgY29udHJvbGxlciBpbiBSRVNFVCBzdGF0ZSAh XG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KICAgICBGTE9Q UFlfRFBSSU5URigiZGlnaXRhbCBvdXRwdXQgcmVnaXN0ZXIgc2V0IHRvIDB4JTAyeFxuIiwg dmFsdWUpOwotICAgIC8qIERyaXZlIG1vdG9ycyBzdGF0ZSBpbmRpY2F0b3JzICovCisKKyAg ICAvKiBNb3RvcnMgKi8KKyAgICBpZiAodmFsdWUgJiBGRF9ET1JfTU9URU4wKQorICAgICAg ICBmZGN0cmwtPnNyYiB8PSBGRF9TUkJfTVRSMDsKKyAgICBlbHNlCisgICAgICAgIGZkY3Ry bC0+c3JiICY9IH5GRF9TUkJfTVRSMDsKICAgICBpZiAodmFsdWUgJiBGRF9ET1JfTU9URU4x KQotICAgICAgICBmZF9zdGFydChkcnYxKGZkY3RybCkpOworICAgICAgICBmZGN0cmwtPnNy YiB8PSBGRF9TUkJfTVRSMTsKICAgICBlbHNlCi0gICAgICAgIGZkX3N0b3AoZHJ2MShmZGN0 cmwpKTsKLSAgICBpZiAodmFsdWUgJiBGRF9ET1JfTU9URU4wKQotICAgICAgICBmZF9zdGFy dChkcnYwKGZkY3RybCkpOworICAgICAgICBmZGN0cmwtPnNyYiAmPSB+RkRfU1JCX01UUjE7 CisKKyAgICAvKiBEcml2ZSAqLworICAgIGlmICh2YWx1ZSAmIDEpCisgICAgICAgIGZkY3Ry bC0+c3JiIHw9IEZEX1NSQl9EUjA7CiAgICAgZWxzZQotICAgICAgICBmZF9zdG9wKGRydjAo ZmRjdHJsKSk7Ci0gICAgLyogRE1BIGVuYWJsZSAqLwotI2lmIDAKLSAgICBpZiAoZmRjdHJs LT5kbWFfY2hhbm4gIT0gLTEpCi0gICAgICAgIGZkY3RybC0+ZG1hX2VuID0gdmFsdWUgJiBG RF9ET1JfRE1BRU4gPyAxIDogMDsKLSNlbmRpZgorICAgICAgICBmZGN0cmwtPnNyYiAmPSB+ RkRfU1JCX0RSMDsKKwogICAgIC8qIFJlc2V0ICovCiAgICAgaWYgKCEodmFsdWUgJiBGRF9E T1JfblJFU0VUKSkgewotICAgICAgICBpZiAoIShmZGN0cmwtPnN0YXRlICYgRkRfQ1RSTF9S RVNFVCkpIHsKKyAgICAgICAgaWYgKGZkY3RybC0+ZG9yICYgRkRfRE9SX25SRVNFVCkgewog ICAgICAgICAgICAgRkxPUFBZX0RQUklOVEYoImNvbnRyb2xsZXIgZW50ZXIgUkVTRVQgc3Rh dGVcbiIpOwotICAgICAgICAgICAgZmRjdHJsLT5zdGF0ZSB8PSBGRF9DVFJMX1JFU0VUOwog ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGZkY3RybC0+c3RhdGUgJiBG RF9DVFJMX1JFU0VUKSB7CisgICAgICAgIGlmICghKGZkY3RybC0+ZG9yICYgRkRfRE9SX25S RVNFVCkpIHsKICAgICAgICAgICAgIEZMT1BQWV9EUFJJTlRGKCJjb250cm9sbGVyIG91dCBv ZiBSRVNFVCBzdGF0ZVxuIik7CiAgICAgICAgICAgICBmZGN0cmxfcmVzZXQoZmRjdHJsLCAx KTsKLSAgICAgICAgICAgIGZkY3RybC0+c3RhdGUgJj0gfihGRF9DVFJMX1JFU0VUIHwgRkRf Q1RSTF9TTEVFUCk7CisgICAgICAgICAgICBmZGN0cmwtPmRzciAmPSB+RkRfRFNSX1BXUkRP V047CiAgICAgICAgIH0KICAgICB9CiAgICAgLyogU2VsZWN0ZWQgZHJpdmUgKi8KICAgICBm ZGN0cmwtPmN1cl9kcnYgPSB2YWx1ZSAmIEZEX0RPUl9TRUxNQVNLOworCisgICAgZmRjdHJs LT5kb3IgPSB2YWx1ZTsKIH0KIAogLyogVGFwZSBkcml2ZSByZWdpc3RlciA6IDB4MDMgKi8K IHN0YXRpYyB1aW50MzJfdCBmZGN0cmxfcmVhZF90YXBlIChmZGN0cmxfdCAqZmRjdHJsKQog ewotICAgIHVpbnQzMl90IHJldHZhbCA9IDA7CisgICAgdWludDMyX3QgcmV0dmFsID0gZmRj dHJsLT50ZHI7CiAKLSAgICAvKiBEaXNrIGJvb3Qgc2VsZWN0aW9uIGluZGljYXRvciAqLwot ICAgIHJldHZhbCB8PSBmZGN0cmwtPmJvb3RzZWwgPDwgMjsKLSAgICAvKiBUYXBlIGluZGlj YXRvcnM6IG5ldmVyIGFsbG93ZWQgKi8KICAgICBGTE9QUFlfRFBSSU5URigidGFwZSBkcml2 ZSByZWdpc3RlcjogMHglMDJ4XG4iLCByZXR2YWwpOwogCiAgICAgcmV0dXJuIHJldHZhbDsK QEAgLTk0NiwzNCArOTEyLDI0IEBADQogc3RhdGljIHZvaWQgZmRjdHJsX3dyaXRlX3RhcGUg KGZkY3RybF90ICpmZGN0cmwsIHVpbnQzMl90IHZhbHVlKQogewogICAgIC8qIFJlc2V0IG1v ZGUgKi8KLSAgICBpZiAoZmRjdHJsLT5zdGF0ZSAmIEZEX0NUUkxfUkVTRVQpIHsKKyAgICBp ZiAoIShmZGN0cmwtPmRvciAmIEZEX0RPUl9uUkVTRVQpKSB7CiAgICAgICAgIEZMT1BQWV9E UFJJTlRGKCJGbG9wcHkgY29udHJvbGxlciBpbiBSRVNFVCBzdGF0ZSAhXG4iKTsKICAgICAg ICAgcmV0dXJuOwogICAgIH0KICAgICBGTE9QUFlfRFBSSU5URigidGFwZSBkcml2ZSByZWdp c3RlciBzZXQgdG8gMHglMDJ4XG4iLCB2YWx1ZSk7CiAgICAgLyogRGlzayBib290IHNlbGVj dGlvbiBpbmRpY2F0b3IgKi8KLSAgICBmZGN0cmwtPmJvb3RzZWwgPSAodmFsdWUgJiBGRF9U RFJfQk9PVFNFTCkgPj4gMjsKKyAgICBmZGN0cmwtPnRkciA9IHZhbHVlICYgRkRfVERSX0JP T1RTRUw7CiAgICAgLyogVGFwZSBpbmRpY2F0b3JzOiBuZXZlciBhbGxvdyAqLwogfQogCiAv KiBNYWluIHN0YXR1cyByZWdpc3RlciA6IDB4MDQgKHJlYWQpICovCiBzdGF0aWMgdWludDMy X3QgZmRjdHJsX3JlYWRfbWFpbl9zdGF0dXMgKGZkY3RybF90ICpmZGN0cmwpCiB7Ci0gICAg dWludDMyX3QgcmV0dmFsID0gMDsKKyAgICB1aW50MzJfdCByZXR2YWwgPSBmZGN0cmwtPm1z cjsKIAotICAgIGZkY3RybC0+c3RhdGUgJj0gfihGRF9DVFJMX1NMRUVQIHwgRkRfQ1RSTF9S RVNFVCk7Ci0gICAgaWYgKCEoZmRjdHJsLT5zdGF0ZSAmIEZEX0NUUkxfQlVTWSkpIHsKLSAg ICAgICAgLyogRGF0YSB0cmFuc2ZlciBhbGxvd2VkICovCi0gICAgICAgIHJldHZhbCB8PSBG RF9NU1JfUlFNOwotICAgICAgICAvKiBEYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBpbmRpY2F0 b3IgKi8KLSAgICAgICAgaWYgKGZkY3RybC0+ZGF0YV9kaXIgPT0gRkRfRElSX1JFQUQpCi0g ICAgICAgICAgICByZXR2YWwgfD0gRkRfTVNSX0RJTzsKLSAgICB9Ci0gICAgLyogU2hvdWxk IGhhbmRsZSBGRF9NU1JfTk9ORE1BIGZvciBTUEVDSUZZIGNvbW1hbmQgKi8KLSAgICAvKiBD b21tYW5kIGJ1c3kgaW5kaWNhdG9yICovCi0gICAgaWYgKEZEX1NUQVRFKGZkY3RybC0+ZGF0 YV9zdGF0ZSkgPT0gRkRfU1RBVEVfREFUQSB8fAotICAgICAgICBGRF9TVEFURShmZGN0cmwt PmRhdGFfc3RhdGUpID09IEZEX1NUQVRFX1NUQVRVUykKLSAgICAgICAgcmV0dmFsIHw9IEZE X01TUl9DTURCVVNZOworICAgIGZkY3RybC0+ZHNyICY9IH5GRF9EU1JfUFdSRE9XTjsKKyAg ICBmZGN0cmwtPmRvciB8PSBGRF9ET1JfblJFU0VUOworCiAgICAgRkxPUFBZX0RQUklOVEYo Im1haW4gc3RhdHVzIHJlZ2lzdGVyOiAweCUwMnhcbiIsIHJldHZhbCk7CiAKICAgICByZXR1 cm4gcmV0dmFsOwpAQCAtOTgzLDIxICs5MzksMjEgQEANCiBzdGF0aWMgdm9pZCBmZGN0cmxf d3JpdGVfcmF0ZSAoZmRjdHJsX3QgKmZkY3RybCwgdWludDMyX3QgdmFsdWUpCiB7CiAgICAg LyogUmVzZXQgbW9kZSAqLwotICAgIGlmIChmZGN0cmwtPnN0YXRlICYgRkRfQ1RSTF9SRVNF VCkgeworICAgIGlmICghKGZkY3RybC0+ZG9yICYgRkRfRE9SX25SRVNFVCkpIHsKICAgICAg ICAgRkxPUFBZX0RQUklOVEYoIkZsb3BweSBjb250cm9sbGVyIGluIFJFU0VUIHN0YXRlICFc biIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEZMT1BQWV9EUFJJTlRGKCJzZWxl Y3QgcmF0ZSByZWdpc3RlciBzZXQgdG8gMHglMDJ4XG4iLCB2YWx1ZSk7CiAgICAgLyogUmVz ZXQ6IGF1dG9jbGVhciAqLwogICAgIGlmICh2YWx1ZSAmIEZEX0RTUl9TV1JFU0VUKSB7Ci0g ICAgICAgIGZkY3RybC0+c3RhdGUgfD0gRkRfQ1RSTF9SRVNFVDsKKyAgICAgICAgZmRjdHJs LT5kb3IgJj0gfkZEX0RPUl9uUkVTRVQ7CiAgICAgICAgIGZkY3RybF9yZXNldChmZGN0cmws IDEpOwotICAgICAgICBmZGN0cmwtPnN0YXRlICY9IH5GRF9DVFJMX1JFU0VUOworICAgICAg ICBmZGN0cmwtPmRvciB8PSBGRF9ET1JfblJFU0VUOwogICAgIH0KICAgICBpZiAodmFsdWUg JiBGRF9EU1JfUFdSRE9XTikgewotICAgICAgICBmZGN0cmwtPnN0YXRlIHw9IEZEX0NUUkxf U0xFRVA7CiAgICAgICAgIGZkY3RybF9yZXNldChmZGN0cmwsIDEpOwogICAgIH0KKyAgICBm ZGN0cmwtPmRzciA9IHZhbHVlOwogfQogCiBzdGF0aWMgaW50IGZkY3RybF9tZWRpYV9jaGFu Z2VkKGZkcml2ZV90ICpkcnYpCkBAIC0xMDE4LDggKzk3NCwxMyBAQA0KIHsKICAgICB1aW50 MzJfdCByZXR2YWwgPSAwOwogCi0gICAgaWYgKGZkY3RybF9tZWRpYV9jaGFuZ2VkKGRydjAo ZmRjdHJsKSkgfHwKLSAgICAgICAgZmRjdHJsX21lZGlhX2NoYW5nZWQoZHJ2MShmZGN0cmwp KSkKKyAgICBpZiAoZmRjdHJsX21lZGlhX2NoYW5nZWQoZHJ2MChmZGN0cmwpKQorICAgICB8 fCBmZGN0cmxfbWVkaWFfY2hhbmdlZChkcnYxKGZkY3RybCkpCisjaWYgTUFYX0ZEID09IDQK KyAgICAgfHwgZmRjdHJsX21lZGlhX2NoYW5nZWQoZHJ2MihmZGN0cmwpKQorICAgICB8fCBm ZGN0cmxfbWVkaWFfY2hhbmdlZChkcnYzKGZkY3RybCkpCisjZW5kaWYKKyAgICAgICAgKQog ICAgICAgICByZXR2YWwgfD0gRkRfRElSX0RTS0NIRzsKICAgICBpZiAocmV0dmFsICE9IDAp CiAgICAgICAgIEZMT1BQWV9EUFJJTlRGKCJGbG9wcHkgZGlnaXRhbCBpbnB1dCByZWdpc3Rl cjogMHglMDJ4XG4iLCByZXR2YWwpOwpAQCAtMTAzMiw3ICs5OTMsNyBAQA0KIHsKICAgICBm ZGN0cmwtPmRhdGFfZGlyID0gRkRfRElSX1dSSVRFOwogICAgIGZkY3RybC0+ZGF0YV9wb3Mg PSAwOwotICAgIEZEX1NFVF9TVEFURShmZGN0cmwtPmRhdGFfc3RhdGUsIEZEX1NUQVRFX0NN RCk7CisgICAgZmRjdHJsLT5tc3IgJj0gfihGRF9NU1JfQ01EQlVTWSB8IEZEX01TUl9ESU8p OwogfQogCiAvKiBTZXQgRklGTyBzdGF0dXMgZm9yIHRoZSBob3N0IHRvIHJlYWQgKi8KQEAg LTEwNDEsNyArMTAwMiw3IEBADQogICAgIGZkY3RybC0+ZGF0YV9kaXIgPSBGRF9ESVJfUkVB RDsKICAgICBmZGN0cmwtPmRhdGFfbGVuID0gZmlmb19sZW47CiAgICAgZmRjdHJsLT5kYXRh X3BvcyA9IDA7Ci0gICAgRkRfU0VUX1NUQVRFKGZkY3RybC0+ZGF0YV9zdGF0ZSwgRkRfU1RB VEVfU1RBVFVTKTsKKyAgICBmZGN0cmwtPm1zciB8PSBGRF9NU1JfQ01EQlVTWSB8IEZEX01T Ul9SUU0gfCBGRF9NU1JfRElPOwogICAgIGlmIChkb19pcnEpCiAgICAgICAgIGZkY3RybF9y YWlzZV9pcnEoZmRjdHJsLCAweDAwKTsKIH0KQEAgLTEwNDksMjEgKzEwMTAsNDUgQEANCiAv KiBTZXQgYW4gZXJyb3I6IHVuaW1wbGVtZW50ZWQvdW5rbm93biBjb21tYW5kICovCiBzdGF0 aWMgdm9pZCBmZGN0cmxfdW5pbXBsZW1lbnRlZCAoZmRjdHJsX3QgKmZkY3RybCwgaW50IGRp cmVjdGlvbikKIHsKLSNpZiAwCi0gICAgZmRyaXZlX3QgKmN1cl9kcnY7Ci0KLSAgICBjdXJf ZHJ2ID0gZ2V0X2N1cl9kcnYoZmRjdHJsKTsKLSAgICBmZGN0cmwtPmZpZm9bMF0gPSBGRF9T UjBfQUJOVEVSTSB8IEZEX1NSMF9TRUVLIHwgKGN1cl9kcnYtPmhlYWQgPDwgMikgfCBmZGN0 cmwtPmN1cl9kcnY7Ci0gICAgZmRjdHJsLT5maWZvWzFdID0gMHgwMDsKLSAgICBmZGN0cmwt PmZpZm9bMl0gPSAweDAwOwotICAgIGZkY3RybF9zZXRfZmlmbyhmZGN0cmwsIDMsIDEpOwot I2Vsc2UKLSAgICAvLyAgICBmZGN0cmxfcmVzZXRfZmlmbyhmZGN0cmwpOworICAgIEZMT1BQ WV9FUlJPUigidW5pbXBsZW1lbnRlZCBjb21tYW5kIDB4JTAyeFxuIiwgZmRjdHJsLT5maWZv WzBdKTsKICAgICBmZGN0cmwtPmZpZm9bMF0gPSBGRF9TUjBfSU5WQ01EOwogICAgIGZkY3Ry bF9zZXRfZmlmbyhmZGN0cmwsIDEsIDApOwotI2VuZGlmCiB9CiAKKy8qIFNlZWsgdG8gbmV4 dCBzZWN0b3IgKi8KK3N0YXRpYyBpbnQgZmRjdHJsX3NlZWtfdG9fbmV4dF9zZWN0IChmZGN0 cmxfdCAqZmRjdHJsLCBmZHJpdmVfdCAqY3VyX2RydikKK3sKKyAgICBGTE9QUFlfRFBSSU5U Rigic2VlayB0byBuZXh0IHNlY3RvciAoJWQgJTAyeCAlMDJ4ID0+ICVkKVxuIiwKKyAgICAg ICAgICAgICAgICAgICBjdXJfZHJ2LT5oZWFkLCBjdXJfZHJ2LT50cmFjaywgY3VyX2Rydi0+ c2VjdCwKKyAgICAgICAgICAgICAgICAgICBmZF9zZWN0b3IoY3VyX2RydikpOworICAgIC8q IFhYWDogY3VyX2Rydi0+c2VjdCA+PSBjdXJfZHJ2LT5sYXN0X3NlY3Qgc2hvdWxkIGJlIGFu CisgICAgICAgZXJyb3IgaW4gZmFjdCAqLworICAgIGlmIChjdXJfZHJ2LT5zZWN0ID49IGN1 cl9kcnYtPmxhc3Rfc2VjdCB8fAorICAgICAgICBjdXJfZHJ2LT5zZWN0ID09IGZkY3RybC0+ ZW90KSB7CisgICAgICAgIGN1cl9kcnYtPnNlY3QgPSAxOworICAgICAgICBpZiAoRkRfTVVM VElfVFJBQ0soZmRjdHJsLT5kYXRhX3N0YXRlKSkgeworICAgICAgICAgICAgaWYgKGN1cl9k cnYtPmhlYWQgPT0gMCAmJgorICAgICAgICAgICAgICAgIChjdXJfZHJ2LT5mbGFncyAmIEZE SVNLX0RCTF9TSURFUykgIT0gMCkgeworICAgICAgICAgICAgICAgIGN1cl9kcnYtPmhlYWQg PSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdXJfZHJ2LT5o ZWFkID0gMDsKKyAgICAgICAgICAgICAgICBjdXJfZHJ2LT50cmFjaysrOworICAgICAgICAg ICAgICAgIGlmICgoY3VyX2Rydi0+ZmxhZ3MgJiBGRElTS19EQkxfU0lERVMpID09IDApCisg ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgY3VyX2Rydi0+dHJhY2srKzsKKyAgICAgICAgICAgIHJl dHVybiAxOworICAgICAgICB9CisgICAgICAgIEZMT1BQWV9EUFJJTlRGKCJzZWVrIHRvIG5l eHQgdHJhY2sgKCVkICUwMnggJTAyeCA9PiAlZClcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgIGN1cl9kcnYtPmhlYWQsIGN1cl9kcnYtPnRyYWNrLAorICAgICAgICAgICAgICAgICAg ICAgICBjdXJfZHJ2LT5zZWN0LCBmZF9zZWN0b3IoY3VyX2RydikpOworICAgIH0gZWxzZSB7 CisgICAgICAgIGN1cl9kcnYtPnNlY3QrKzsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisK IC8qIENhbGxiYWNrIGZvciB0cmFuc2ZlciBlbmQgKHN0b3Agb3IgYWJvcnQpICovCiBzdGF0 aWMgdm9pZCBmZGN0cmxfc3RvcF90cmFuc2ZlciAoZmRjdHJsX3QgKmZkY3RybCwgdWludDhf dCBzdGF0dXMwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg c3RhdHVzMSwgdWludDhfdCBzdGF0dXMyKQpAQCAtMTA3Myw4ICsxMDU4LDggQEANCiAgICAg Y3VyX2RydiA9IGdldF9jdXJfZHJ2KGZkY3RybCk7CiAgICAgRkxPUFBZX0RQUklOVEYoInRy YW5zZmVyIHN0YXR1czogJTAyeCAlMDJ4ICUwMnggKCUwMngpXG4iLAogICAgICAgICAgICAg ICAgICAgIHN0YXR1czAsIHN0YXR1czEsIHN0YXR1czIsCi0gICAgICAgICAgICAgICAgICAg c3RhdHVzMCB8IChjdXJfZHJ2LT5oZWFkIDw8IDIpIHwgZmRjdHJsLT5jdXJfZHJ2KTsKLSAg ICBmZGN0cmwtPmZpZm9bMF0gPSBzdGF0dXMwIHwgKGN1cl9kcnYtPmhlYWQgPDwgMikgfCBm ZGN0cmwtPmN1cl9kcnY7CisgICAgICAgICAgICAgICAgICAgc3RhdHVzMCB8IChjdXJfZHJ2 LT5oZWFkIDw8IDIpIHwgR0VUX0NVUl9EUlYoZmRjdHJsKSk7CisgICAgZmRjdHJsLT5maWZv WzBdID0gc3RhdHVzMCB8IChjdXJfZHJ2LT5oZWFkIDw8IDIpIHwgR0VUX0NVUl9EUlYoZmRj dHJsKTsKICAgICBmZGN0cmwtPmZpZm9bMV0gPSBzdGF0dXMxOwogICAgIGZkY3RybC0+Zmlm b1syXSA9IHN0YXR1czI7CiAgICAgZmRjdHJsLT5maWZvWzNdID0gY3VyX2Rydi0+dHJhY2s7 CkBAIC0xMDgyLDEwICsxMDY3LDExIEBADQogICAgIGZkY3RybC0+Zmlmb1s1XSA9IGN1cl9k cnYtPnNlY3Q7CiAgICAgZmRjdHJsLT5maWZvWzZdID0gRkRfU0VDVE9SX1NDOwogICAgIGZk Y3RybC0+ZGF0YV9kaXIgPSBGRF9ESVJfUkVBRDsKLSAgICBpZiAoZmRjdHJsLT5zdGF0ZSAm IEZEX0NUUkxfQlVTWSkgeworICAgIGlmICghKGZkY3RybC0+bXNyICYgRkRfTVNSX05PTkRN QSkpIHsKICAgICAgICAgRE1BX3JlbGVhc2VfRFJFUShmZGN0cmwtPmRtYV9jaGFubik7Ci0g ICAgICAgIGZkY3RybC0+c3RhdGUgJj0gfkZEX0NUUkxfQlVTWTsKICAgICB9CisgICAgZmRj dHJsLT5tc3IgfD0gRkRfTVNSX1JRTSB8IEZEX01TUl9ESU87CisgICAgZmRjdHJsLT5tc3Ig Jj0gfkZEX01TUl9OT05ETUE7CiAgICAgZmRjdHJsX3NldF9maWZvKGZkY3RybCwgNywgMSk7 CiB9CiAKQEAgLTEwOTQsMTggKzEwODAsMTcgQEANCiB7CiAgICAgZmRyaXZlX3QgKmN1cl9k cnY7CiAgICAgdWludDhfdCBraCwga3QsIGtzOwotICAgIGludCBkaWRfc2VlazsKKyAgICBp bnQgZGlkX3NlZWsgPSAwOwogCi0gICAgZmRjdHJsLT5jdXJfZHJ2ID0gZmRjdHJsLT5maWZv WzFdICYgRkRfRE9SX1NFTE1BU0s7CisgICAgU0VUX0NVUl9EUlYoZmRjdHJsLCBmZGN0cmwt PmZpZm9bMV0gJiBGRF9ET1JfU0VMTUFTSyk7CiAgICAgY3VyX2RydiA9IGdldF9jdXJfZHJ2 KGZkY3RybCk7CiAgICAga3QgPSBmZGN0cmwtPmZpZm9bMl07CiAgICAga2ggPSBmZGN0cmwt PmZpZm9bM107CiAgICAga3MgPSBmZGN0cmwtPmZpZm9bNF07CiAgICAgRkxPUFBZX0RQUklO VEYoIlN0YXJ0IHRyYW5zZmVyIGF0ICVkICVkICUwMnggJTAyeCAoJWQpXG4iLAotICAgICAg ICAgICAgICAgICAgIGZkY3RybC0+Y3VyX2Rydiwga2gsIGt0LCBrcywKKyAgICAgICAgICAg ICAgICAgICBHRVRfQ1VSX0RSVihmZGN0cmwpLCBraCwga3QsIGtzLAogICAgICAgICAgICAg ICAgICAgIF9mZF9zZWN0b3Ioa2gsIGt0LCBrcywgY3VyX2Rydi0+bGFzdF9zZWN0KSk7Ci0g ICAgZGlkX3NlZWsgPSAwOwotICAgIHN3aXRjaCAoZmRfc2VlayhjdXJfZHJ2LCBraCwga3Qs IGtzLCBmZGN0cmwtPmNvbmZpZyAmIDB4NDApKSB7CisgICAgc3dpdGNoIChmZF9zZWVrKGN1 cl9kcnYsIGtoLCBrdCwga3MsIGZkY3RybC0+Y29uZmlnICYgRkRfQ09ORklHX0VJUykpIHsK ICAgICBjYXNlIDI6CiAgICAgICAgIC8qIHNlY3QgdG9vIGJpZyAqLwogICAgICAgICBmZGN0 cmxfc3RvcF90cmFuc2ZlcihmZGN0cmwsIEZEX1NSMF9BQk5URVJNLCAweDAwLCAweDAwKTsK QEAgLTExMTUsNyArMTEwMCw3IEBADQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSAzOgog ICAgICAgICAvKiB0cmFjayB0b28gYmlnICovCi0gICAgICAgIGZkY3RybF9zdG9wX3RyYW5z ZmVyKGZkY3RybCwgRkRfU1IwX0FCTlRFUk0sIDB4ODAsIDB4MDApOworICAgICAgICBmZGN0 cmxfc3RvcF90cmFuc2ZlcihmZGN0cmwsIEZEX1NSMF9BQk5URVJNLCBGRF9TUjFfRUMsIDB4 MDApOwogICAgICAgICBmZGN0cmwtPmZpZm9bM10gPSBrdDsKICAgICAgICAgZmRjdHJsLT5m aWZvWzRdID0ga2g7CiAgICAgICAgIGZkY3RybC0+Zmlmb1s1XSA9IGtzOwpAQCAtMTEzMywx MCArMTExOCwxMSBAQA0KICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisK ICAgICAvKiBTZXQgdGhlIEZJRk8gc3RhdGUgKi8KICAgICBmZGN0cmwtPmRhdGFfZGlyID0g ZGlyZWN0aW9uOwogICAgIGZkY3RybC0+ZGF0YV9wb3MgPSAwOwotICAgIEZEX1NFVF9TVEFU RShmZGN0cmwtPmRhdGFfc3RhdGUsIEZEX1NUQVRFX0RBVEEpOyAvKiBGSUZPIHJlYWR5IGZv ciBkYXRhICovCisgICAgZmRjdHJsLT5tc3IgfD0gRkRfTVNSX0NNREJVU1k7CiAgICAgaWYg KGZkY3RybC0+Zmlmb1swXSAmIDB4ODApCiAgICAgICAgIGZkY3RybC0+ZGF0YV9zdGF0ZSB8 PSBGRF9TVEFURV9NVUxUSTsKICAgICBlbHNlCkBAIC0xMTU2LDcgKzExNDIsNyBAQA0KICAg ICAgICAgZmRjdHJsLT5kYXRhX2xlbiAqPSB0bXA7CiAgICAgfQogICAgIGZkY3RybC0+ZW90 ID0gZmRjdHJsLT5maWZvWzZdOwotICAgIGlmIChmZGN0cmwtPmRtYV9lbikgeworICAgIGlm IChmZGN0cmwtPmRvciAmIEZEX0RPUl9ETUFFTikgewogICAgICAgICBpbnQgZG1hX21vZGU7 CiAgICAgICAgIC8qIERNQSB0cmFuc2ZlciBhcmUgZW5hYmxlZC4gQ2hlY2sgaWYgRE1BIGNo YW5uZWwgaXMgd2VsbCBwcm9ncmFtbWVkICovCiAgICAgICAgIGRtYV9tb2RlID0gRE1BX2dl dF9jaGFubmVsX21vZGUoZmRjdHJsLT5kbWFfY2hhbm4pOwpAQCAtMTE3MCw3ICsxMTU2LDcg QEANCiAgICAgICAgICAgICAoZGlyZWN0aW9uID09IEZEX0RJUl9XUklURSAmJiBkbWFfbW9k ZSA9PSAyKSB8fAogICAgICAgICAgICAgKGRpcmVjdGlvbiA9PSBGRF9ESVJfUkVBRCAmJiBk bWFfbW9kZSA9PSAxKSkgewogICAgICAgICAgICAgLyogTm8gYWNjZXNzIGlzIGFsbG93ZWQg dW50aWwgRE1BIHRyYW5zZmVyIGhhcyBjb21wbGV0ZWQgKi8KLSAgICAgICAgICAgIGZkY3Ry bC0+c3RhdGUgfD0gRkRfQ1RSTF9CVVNZOworICAgICAgICAgICAgZmRjdHJsLT5tc3IgJj0g fkZEX01TUl9SUU07CiAgICAgICAgICAgICAvKiBOb3csIHdlIGp1c3QgaGF2ZSB0byB3YWl0 IGZvciB0aGUgRE1BIGNvbnRyb2xsZXIgdG8KICAgICAgICAgICAgICAqIHJlY2FsbCB1cy4u LgogICAgICAgICAgICAgICovCkBAIC0xMTgyLDYgKzExNjgsOSBAQA0KICAgICAgICAgfQog ICAgIH0KICAgICBGTE9QUFlfRFBSSU5URigic3RhcnQgbm9uLURNQSB0cmFuc2ZlclxuIik7 CisgICAgZmRjdHJsLT5tc3IgfD0gRkRfTVNSX05PTkRNQTsKKyAgICBpZiAoZGlyZWN0aW9u ICE9IEZEX0RJUl9XUklURSkKKyAgICAgICAgZmRjdHJsLT5tc3IgfD0gRkRfTVNSX0RJTzsK ICAgICAvKiBJTyBiYXNlZCB0cmFuc2ZlcjogY2FsY3VsYXRlIGxlbiAqLwogICAgIGZkY3Ry bF9yYWlzZV9pcnEoZmRjdHJsLCAweDAwKTsKIApAQCAtMTE5MSw2ICsxMTgwLDggQEANCiAv KiBQcmVwYXJlIGEgdHJhbnNmZXIgb2YgZGVsZXRlZCBkYXRhICovCiBzdGF0aWMgdm9pZCBm ZGN0cmxfc3RhcnRfdHJhbnNmZXJfZGVsIChmZGN0cmxfdCAqZmRjdHJsLCBpbnQgZGlyZWN0 aW9uKQogeworICAgIEZMT1BQWV9FUlJPUigiZmRjdHJsX3N0YXJ0X3RyYW5zZmVyX2RlbCgp IHVuaW1wbGVtZW50ZWRcbiIpOworCiAgICAgLyogV2UgZG9uJ3QgaGFuZGxlIGRlbGV0ZWQg ZGF0YSwKICAgICAgKiBzbyB3ZSBkb24ndCByZXR1cm4gKkFOWVRISU5HKgogICAgICAqLwpA QCAtMTIwNywxNCArMTE5OCwxNCBAQA0KICAgICB1aW50OF90IHN0YXR1czAgPSAweDAwLCBz dGF0dXMxID0gMHgwMCwgc3RhdHVzMiA9IDB4MDA7CiAKICAgICBmZGN0cmwgPSBvcGFxdWU7 Ci0gICAgaWYgKCEoZmRjdHJsLT5zdGF0ZSAmIEZEX0NUUkxfQlVTWSkpIHsKKyAgICBpZiAo ZmRjdHJsLT5tc3IgJiBGRF9NU1JfUlFNKSB7CiAgICAgICAgIEZMT1BQWV9EUFJJTlRGKCJO b3QgaW4gRE1BIHRyYW5zZmVyIG1vZGUgIVxuIik7CiAgICAgICAgIHJldHVybiAwOwogICAg IH0KICAgICBjdXJfZHJ2ID0gZ2V0X2N1cl9kcnYoZmRjdHJsKTsKICAgICBpZiAoZmRjdHJs LT5kYXRhX2RpciA9PSBGRF9ESVJfU0NBTkUgfHwgZmRjdHJsLT5kYXRhX2RpciA9PSBGRF9E SVJfU0NBTkwgfHwKICAgICAgICAgZmRjdHJsLT5kYXRhX2RpciA9PSBGRF9ESVJfU0NBTkgp Ci0gICAgICAgIHN0YXR1czIgPSAweDA0OworICAgICAgICBzdGF0dXMyID0gRkRfU1IyX1NO UzsKICAgICBpZiAoZG1hX2xlbiA+IGZkY3RybC0+ZGF0YV9sZW4pCiAgICAgICAgIGRtYV9s ZW4gPSBmZGN0cmwtPmRhdGFfbGVuOwogICAgIGlmIChjdXJfZHJ2LT5icyA9PSBOVUxMKSB7 CkBAIC0xMjMyLDcgKzEyMjMsNyBAQA0KICAgICAgICAgICAgIGxlbiA9IEZEX1NFQ1RPUl9M RU4gLSByZWxfcG9zOwogICAgICAgICBGTE9QUFlfRFBSSU5URigiY29weSAlZCBieXRlcyAo JWQgJWQgJWQpICVkIHBvcyAlZCAlMDJ4ICIKICAgICAgICAgICAgICAgICAgICAgICAgIigl ZC0weCUwOHggMHglMDh4KVxuIiwgbGVuLCBkbWFfbGVuLCBmZGN0cmwtPmRhdGFfcG9zLAot ICAgICAgICAgICAgICAgICAgICAgICBmZGN0cmwtPmRhdGFfbGVuLCBmZGN0cmwtPmN1cl9k cnYsIGN1cl9kcnYtPmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgIGZkY3RybC0+ZGF0 YV9sZW4sIEdFVF9DVVJfRFJWKGZkY3RybCksIGN1cl9kcnYtPmhlYWQsCiAgICAgICAgICAg ICAgICAgICAgICAgIGN1cl9kcnYtPnRyYWNrLCBjdXJfZHJ2LT5zZWN0LCBmZF9zZWN0b3Io Y3VyX2RydiksCiAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NlY3RvcihjdXJfZHJ2KSAq IEZEX1NFQ1RPUl9MRU4pOwogICAgICAgICBpZiAoZmRjdHJsLT5kYXRhX2RpciAhPSBGRF9E SVJfV1JJVEUgfHwKQEAgLTEyNTgsNyArMTI0OSw3IEBADQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmZGN0cmwtPmRhdGFfcG9zLCBsZW4pOwogICAgICAgICAgICAgaWYgKGJk cnZfd3JpdGUoY3VyX2Rydi0+YnMsIGZkX3NlY3RvcihjdXJfZHJ2KSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZkY3RybC0+ZmlmbywgMSkgPCAwKSB7Ci0gICAgICAgICAgICAg ICAgRkxPUFBZX0VSUk9SKCJ3cml0dGluZyBzZWN0b3IgJWRcbiIsIGZkX3NlY3RvcihjdXJf ZHJ2KSk7CisgICAgICAgICAgICAgICAgRkxPUFBZX0VSUk9SKCJ3cml0aW5nIHNlY3RvciAl ZFxuIiwgZmRfc2VjdG9yKGN1cl9kcnYpKTsKICAgICAgICAgICAgICAgICBmZGN0cmxfc3Rv cF90cmFuc2ZlcihmZGN0cmwsIEZEX1NSMF9BQk5URVJNIHwgRkRfU1IwX1NFRUssIDB4MDAs IDB4MDApOwogICAgICAgICAgICAgICAgIGdvdG8gdHJhbnNmZXJfZXJyb3I7CiAgICAgICAg ICAgICB9CkBAIC0xMjcxLDcgKzEyNjIsNyBAQA0KICAgICAgICAgICAgICAgICBETUFfcmVh ZF9tZW1vcnkgKG5jaGFuLCB0bXBidWYsIGZkY3RybC0+ZGF0YV9wb3MsIGxlbik7CiAgICAg ICAgICAgICAgICAgcmV0ID0gbWVtY21wKHRtcGJ1ZiwgZmRjdHJsLT5maWZvICsgcmVsX3Bv cywgbGVuKTsKICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApIHsKLSAgICAgICAgICAg ICAgICAgICAgc3RhdHVzMiA9IDB4MDg7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1czIg PSBGRF9TUjJfU0VIOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZF90cmFuc2ZlcjsK ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKChyZXQgPCAwICYmIGZk Y3RybC0+ZGF0YV9kaXIgPT0gRkRfRElSX1NDQU5MKSB8fApAQCAtMTI4NiwzNSArMTI3Nyw4 IEBADQogICAgICAgICByZWxfcG9zID0gZmRjdHJsLT5kYXRhX3BvcyAlIEZEX1NFQ1RPUl9M RU47CiAgICAgICAgIGlmIChyZWxfcG9zID09IDApIHsKICAgICAgICAgICAgIC8qIFNlZWsg dG8gbmV4dCBzZWN0b3IgKi8KLSAgICAgICAgICAgIEZMT1BQWV9EUFJJTlRGKCJzZWVrIHRv IG5leHQgc2VjdG9yICglZCAlMDJ4ICUwMnggPT4gJWQpICglZClcbiIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICBjdXJfZHJ2LT5oZWFkLCBjdXJfZHJ2LT50cmFjaywgY3VyX2Ry di0+c2VjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NlY3RvcihjdXJfZHJ2 KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkY3RybC0+ZGF0YV9wb3MgLSBsZW4p OwotICAgICAgICAgICAgLyogWFhYOiBjdXJfZHJ2LT5zZWN0ID49IGN1cl9kcnYtPmxhc3Rf c2VjdCBzaG91bGQgYmUgYW4KLSAgICAgICAgICAgICAgIGVycm9yIGluIGZhY3QgKi8KLSAg ICAgICAgICAgIGlmIChjdXJfZHJ2LT5zZWN0ID49IGN1cl9kcnYtPmxhc3Rfc2VjdCB8fAot ICAgICAgICAgICAgICAgIGN1cl9kcnYtPnNlY3QgPT0gZmRjdHJsLT5lb3QpIHsKLSAgICAg ICAgICAgICAgICBjdXJfZHJ2LT5zZWN0ID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoRkRf TVVMVElfVFJBQ0soZmRjdHJsLT5kYXRhX3N0YXRlKSkgewotICAgICAgICAgICAgICAgICAg ICBpZiAoY3VyX2Rydi0+aGVhZCA9PSAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAo Y3VyX2Rydi0+ZmxhZ3MgJiBGRElTS19EQkxfU0lERVMpICE9IDApIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIGN1cl9kcnYtPmhlYWQgPSAxOwotICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2Rydi0+aGVhZCA9IDA7Ci0g ICAgICAgICAgICAgICAgICAgICAgICBjdXJfZHJ2LT50cmFjaysrOwotICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKChjdXJfZHJ2LT5mbGFncyAmIEZESVNLX0RCTF9TSURFUykgPT0g MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg IGN1cl9kcnYtPnRyYWNrKys7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBGTE9QUFlfRFBSSU5URigic2VlayB0byBu ZXh0IHRyYWNrICglZCAlMDJ4ICUwMnggPT4gJWQpXG4iLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN1cl9kcnYtPmhlYWQsIGN1cl9kcnYtPnRyYWNrLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGN1cl9kcnYtPnNlY3QsIGZkX3NlY3RvcihjdXJfZHJ2 KSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGN1cl9kcnYtPnNl Y3QrKzsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZmRjdHJsX3NlZWtfdG9f bmV4dF9zZWN0KGZkY3RybCwgY3VyX2RydikpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgIH0KICAgICB9CiAgZW5kX3RyYW5zZmVyOgpAQCAtMTMyNCwxMSArMTI4OCwxMCBA QA0KICAgICBpZiAoZmRjdHJsLT5kYXRhX2RpciA9PSBGRF9ESVJfU0NBTkUgfHwKICAgICAg ICAgZmRjdHJsLT5kYXRhX2RpciA9PSBGRF9ESVJfU0NBTkwgfHwKICAgICAgICAgZmRjdHJs LT5kYXRhX2RpciA9PSBGRF9ESVJfU0NBTkgpCi0gICAgICAgIHN0YXR1czIgPSAweDA4Owor ICAgICAgICBzdGF0dXMyID0gRkRfU1IyX1NFSDsKICAgICBpZiAoRkRfRElEX1NFRUsoZmRj dHJsLT5kYXRhX3N0YXRlKSkKICAgICAgICAgc3RhdHVzMCB8PSBGRF9TUjBfU0VFSzsKICAg ICBmZGN0cmwtPmRhdGFfbGVuIC09IGxlbjsKLSAgICAvLyAgICBpZiAoZmRjdHJsLT5kYXRh X2xlbiA9PSAwKQogICAgIGZkY3RybF9zdG9wX3RyYW5zZmVyKGZkY3RybCwgc3RhdHVzMCwg c3RhdHVzMSwgc3RhdHVzMik7CiAgdHJhbnNmZXJfZXJyb3I6CiAKQEAgLTEzNDAsMjIgKzEz MDMsMzAgQEANCiB7CiAgICAgZmRyaXZlX3QgKmN1cl9kcnY7CiAgICAgdWludDMyX3QgcmV0 dmFsID0gMDsKLSAgICBpbnQgcG9zLCBsZW47CisgICAgaW50IHBvczsKIAogICAgIGN1cl9k cnYgPSBnZXRfY3VyX2RydihmZGN0cmwpOwotICAgIGZkY3RybC0+c3RhdGUgJj0gfkZEX0NU UkxfU0xFRVA7Ci0gICAgaWYgKEZEX1NUQVRFKGZkY3RybC0+ZGF0YV9zdGF0ZSkgPT0gRkRf U1RBVEVfQ01EKSB7Ci0gICAgICAgIEZMT1BQWV9FUlJPUigiY2FuJ3QgcmVhZCBkYXRhIGlu IENNRCBzdGF0ZVxuIik7CisgICAgZmRjdHJsLT5kc3IgJj0gfkZEX0RTUl9QV1JET1dOOwor ICAgIGlmICghKGZkY3RybC0+bXNyICYgRkRfTVNSX1JRTSkgfHwgIShmZGN0cmwtPm1zciAm IEZEX01TUl9ESU8pKSB7CisgICAgICAgIEZMT1BQWV9FUlJPUigiY29udHJvbGxlciBub3Qg cmVhZHkgZm9yIHJlYWRpbmdcbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg cG9zID0gZmRjdHJsLT5kYXRhX3BvczsKLSAgICBpZiAoRkRfU1RBVEUoZmRjdHJsLT5kYXRh X3N0YXRlKSA9PSBGRF9TVEFURV9EQVRBKSB7CisgICAgaWYgKGZkY3RybC0+bXNyICYgRkRf TVNSX05PTkRNQSkgewogICAgICAgICBwb3MgJT0gRkRfU0VDVE9SX0xFTjsKICAgICAgICAg aWYgKHBvcyA9PSAwKSB7Ci0gICAgICAgICAgICBsZW4gPSBmZGN0cmwtPmRhdGFfbGVuIC0g ZmRjdHJsLT5kYXRhX3BvczsKLSAgICAgICAgICAgIGlmIChsZW4gPiBGRF9TRUNUT1JfTEVO KQotICAgICAgICAgICAgICAgIGxlbiA9IEZEX1NFQ1RPUl9MRU47Ci0gICAgICAgICAgICBi ZHJ2X3JlYWQoY3VyX2Rydi0+YnMsIGZkX3NlY3RvcihjdXJfZHJ2KSwgZmRjdHJsLT5maWZv LCAxKTsKKyAgICAgICAgICAgIGlmIChmZGN0cmwtPmRhdGFfcG9zICE9IDApCisgICAgICAg ICAgICAgICAgaWYgKCFmZGN0cmxfc2Vla190b19uZXh0X3NlY3QoZmRjdHJsLCBjdXJfZHJ2 KSkgeworICAgICAgICAgICAgICAgICAgICBGTE9QUFlfRFBSSU5URigiZXJyb3Igc2Vla2lu ZyB0byBuZXh0IHNlY3RvciAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmRfc2VjdG9yKGN1cl9kcnYpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJkcnZfcmVhZChjdXJf ZHJ2LT5icywgZmRfc2VjdG9yKGN1cl9kcnYpLCBmZGN0cmwtPmZpZm8sIDEpIDwgMCkgewor ICAgICAgICAgICAgICAgIEZMT1BQWV9EUFJJTlRGKCJlcnJvciBnZXR0aW5nIHNlY3RvciAl ZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF9zZWN0b3IoY3VyX2Ry dikpOworICAgICAgICAgICAgICAgIC8qIFN1cmUsIGltYWdlIHNpemUgaXMgdG9vIHNtYWxs Li4uICovCisgICAgICAgICAgICAgICAgbWVtc2V0KGZkY3RybC0+ZmlmbywgMCwgRkRfU0VD VE9SX0xFTik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dmFs ID0gZmRjdHJsLT5maWZvW3Bvc107CkBAIC0xMzY0LDcgKzEzMzUsNyBAQA0KICAgICAgICAg LyogU3dpdGNoIGZyb20gdHJhbnNmZXIgbW9kZSB0byBzdGF0dXMgbW9kZQogICAgICAgICAg KiB0aGVuIGZyb20gc3RhdHVzIG1vZGUgdG8gY29tbWFuZCBtb2RlCiAgICAgICAgICAqLwot ICAgICAgICBpZiAoRkRfU1RBVEUoZmRjdHJsLT5kYXRhX3N0YXRlKSA9PSBGRF9TVEFURV9E QVRBKSB7CisgICAgICAgIGlmIChmZGN0cmwtPm1zciAmIEZEX01TUl9OT05ETUEpIHsKICAg ICAgICAgICAgIGZkY3RybF9zdG9wX3RyYW5zZmVyKGZkY3RybCwgRkRfU1IwX1NFRUssIDB4 MDAsIDB4MDApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZmRjdHJsX3Jlc2V0 X2ZpZm8oZmRjdHJsKTsKQEAgLTEzODAsMTcgKzEzNTEsMTUgQEANCiB7CiAgICAgZmRyaXZl X3QgKmN1cl9kcnY7CiAgICAgdWludDhfdCBraCwga3QsIGtzOwotICAgIGludCBkaWRfc2Vl azsKIAotICAgIGZkY3RybC0+Y3VyX2RydiA9IGZkY3RybC0+Zmlmb1sxXSAmIEZEX0RPUl9T RUxNQVNLOworICAgIFNFVF9DVVJfRFJWKGZkY3RybCwgZmRjdHJsLT5maWZvWzFdICYgRkRf RE9SX1NFTE1BU0spOwogICAgIGN1cl9kcnYgPSBnZXRfY3VyX2RydihmZGN0cmwpOwogICAg IGt0ID0gZmRjdHJsLT5maWZvWzZdOwogICAgIGtoID0gZmRjdHJsLT5maWZvWzddOwogICAg IGtzID0gZmRjdHJsLT5maWZvWzhdOwogICAgIEZMT1BQWV9EUFJJTlRGKCJmb3JtYXQgc2Vj dG9yIGF0ICVkICVkICUwMnggJTAyeCAoJWQpXG4iLAotICAgICAgICAgICAgICAgICAgIGZk Y3RybC0+Y3VyX2Rydiwga2gsIGt0LCBrcywKKyAgICAgICAgICAgICAgICAgICBHRVRfQ1VS X0RSVihmZGN0cmwpLCBraCwga3QsIGtzLAogICAgICAgICAgICAgICAgICAgIF9mZF9zZWN0 b3Ioa2gsIGt0LCBrcywgY3VyX2Rydi0+bGFzdF9zZWN0KSk7Ci0gICAgZGlkX3NlZWsgPSAw OwogICAgIHN3aXRjaCAoZmRfc2VlayhjdXJfZHJ2LCBraCwga3QsIGtzLCBmZGN0cmwtPmNv bmZpZyAmIEZEX0NPTkZJR19FSVMpKSB7CiAgICAgY2FzZSAyOgogICAgICAgICAvKiBzZWN0 IHRvbyBiaWcgKi8KQEAgLTE0MDEsNyArMTM3MCw3IEBADQogICAgICAgICByZXR1cm47CiAg ICAgY2FzZSAzOgogICAgICAgICAvKiB0cmFjayB0b28gYmlnICovCi0gICAgICAgIGZkY3Ry bF9zdG9wX3RyYW5zZmVyKGZkY3RybCwgRkRfU1IwX0FCTlRFUk0sIDB4ODAsIDB4MDApOwor ICAgICAgICBmZGN0cmxfc3RvcF90cmFuc2ZlcihmZGN0cmwsIEZEX1NSMF9BQk5URVJNLCBG RF9TUjFfRUMsIDB4MDApOwogICAgICAgICBmZGN0cmwtPmZpZm9bM10gPSBrdDsKICAgICAg ICAgZmRjdHJsLT5maWZvWzRdID0ga2g7CiAgICAgICAgIGZkY3RybC0+Zmlmb1s1XSA9IGtz OwpAQCAtMTQxNCw3ICsxMzgzLDYgQEANCiAgICAgICAgIGZkY3RybC0+Zmlmb1s1XSA9IGtz OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSAxOgotICAgICAgICBkaWRfc2VlayA9IDE7 CiAgICAgICAgIGZkY3RybC0+ZGF0YV9zdGF0ZSB8PSBGRF9TVEFURV9TRUVLOwogICAgICAg ICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMTQ1NSwxMSArMTQyMywxNiBAQA0KICAgICAv KiBEcml2ZXMgcG9zaXRpb24gKi8KICAgICBmZGN0cmwtPmZpZm9bMF0gPSBkcnYwKGZkY3Ry bCktPnRyYWNrOwogICAgIGZkY3RybC0+Zmlmb1sxXSA9IGRydjEoZmRjdHJsKS0+dHJhY2s7 CisjaWYgTUFYX0ZEID09IDQKKyAgICBmZGN0cmwtPmZpZm9bMl0gPSBkcnYyKGZkY3RybCkt PnRyYWNrOworICAgIGZkY3RybC0+Zmlmb1szXSA9IGRydjMoZmRjdHJsKS0+dHJhY2s7Cisj ZWxzZQogICAgIGZkY3RybC0+Zmlmb1syXSA9IDA7CiAgICAgZmRjdHJsLT5maWZvWzNdID0g MDsKKyNlbmRpZgogICAgIC8qIHRpbWVycyAqLwogICAgIGZkY3RybC0+Zmlmb1s0XSA9IGZk Y3RybC0+dGltZXIwOwotICAgIGZkY3RybC0+Zmlmb1s1XSA9IChmZGN0cmwtPnRpbWVyMSA8 PCAxKSB8IGZkY3RybC0+ZG1hX2VuOworICAgIGZkY3RybC0+Zmlmb1s1XSA9IChmZGN0cmwt PnRpbWVyMSA8PCAxKSB8IChmZGN0cmwtPmRvciAmIEZEX0RPUl9ETUFFTiA/IDEgOiAwKTsK ICAgICBmZGN0cmwtPmZpZm9bNl0gPSBjdXJfZHJ2LT5sYXN0X3NlY3Q7CiAgICAgZmRjdHJs LT5maWZvWzddID0gKGZkY3RybC0+bG9jayA8PCA3KSB8CiAgICAgICAgIChjdXJfZHJ2LT5w ZXJwZW5kaWN1bGFyIDw8IDIpOwpAQCAtMTQ3MCw3ICsxNDQzLDYgQEANCiAKIHN0YXRpYyB2 b2lkIGZkY3RybF9oYW5kbGVfdmVyc2lvbiAoZmRjdHJsX3QgKmZkY3RybCwgaW50IGRpcmVj dGlvbikKIHsKLSAgICAvKiBDb250cm9sbGVyJ3MgdmVyc2lvbiAqLwogICAgIGZkY3RybC0+ Zmlmb1swXSA9IGZkY3RybC0+dmVyc2lvbjsKICAgICBmZGN0cmxfc2V0X2ZpZm8oZmRjdHJs LCAxLCAxKTsKIH0KQEAgLTE0ODgsNiArMTQ2MCwxMCBAQA0KICAgICAvKiBEcml2ZXMgcG9z aXRpb24gKi8KICAgICBkcnYwKGZkY3RybCktPnRyYWNrID0gZmRjdHJsLT5maWZvWzNdOwog ICAgIGRydjEoZmRjdHJsKS0+dHJhY2sgPSBmZGN0cmwtPmZpZm9bNF07CisjaWYgTUFYX0ZE ID09IDQKKyAgICBkcnYyKGZkY3RybCktPnRyYWNrID0gZmRjdHJsLT5maWZvWzVdOworICAg IGRydjMoZmRjdHJsKS0+dHJhY2sgPSBmZGN0cmwtPmZpZm9bNl07CisjZW5kaWYKICAgICAv KiB0aW1lcnMgKi8KICAgICBmZGN0cmwtPnRpbWVyMCA9IGZkY3RybC0+Zmlmb1s3XTsKICAg ICBmZGN0cmwtPnRpbWVyMSA9IGZkY3RybC0+Zmlmb1s4XTsKQEAgLTE1MDksOCArMTQ4NSwx MyBAQA0KICAgICAvKiBEcml2ZXMgcG9zaXRpb24gKi8KICAgICBmZGN0cmwtPmZpZm9bMl0g PSBkcnYwKGZkY3RybCktPnRyYWNrOwogICAgIGZkY3RybC0+Zmlmb1szXSA9IGRydjEoZmRj dHJsKS0+dHJhY2s7CisjaWYgTUFYX0ZEID09IDQKKyAgICBmZGN0cmwtPmZpZm9bNF0gPSBk cnYyKGZkY3RybCktPnRyYWNrOworICAgIGZkY3RybC0+Zmlmb1s1XSA9IGRydjMoZmRjdHJs KS0+dHJhY2s7CisjZWxzZQogICAgIGZkY3RybC0+Zmlmb1s0XSA9IDA7CiAgICAgZmRjdHJs LT5maWZvWzVdID0gMDsKKyNlbmRpZgogICAgIC8qIHRpbWVycyAqLwogICAgIGZkY3RybC0+ Zmlmb1s2XSA9IGZkY3RybC0+dGltZXIwOwogICAgIGZkY3RybC0+Zmlmb1s3XSA9IGZkY3Ry bC0+dGltZXIxOwpAQCAtMTUyOSw3ICsxNTEwLDkgQEANCiB7CiAgICAgZmRyaXZlX3QgKmN1 cl9kcnYgPSBnZXRfY3VyX2RydihmZGN0cmwpOwogCi0gICAgLyogWFhYOiBzaG91bGQgc2V0 IG1haW4gc3RhdHVzIHJlZ2lzdGVyIHRvIGJ1c3kgKi8KKyAgICAvKiBTZXQgbWFpbiBzdGF0 dXMgcmVnaXN0ZXIgdG8gYnVzeSAqLworICAgIGZkY3RybC0+bXNyICY9IH5GRF9NU1JfUlFN OworCiAgICAgY3VyX2Rydi0+aGVhZCA9IChmZGN0cmwtPmZpZm9bMV0gPj4gMikgJiAxOwog ICAgIHFlbXVfbW9kX3RpbWVyKGZkY3RybC0+cmVzdWx0X3RpbWVyLAogICAgICAgICAgICAg ICAgICAgIHFlbXVfZ2V0X2Nsb2NrKHZtX2Nsb2NrKSArICh0aWNrc19wZXJfc2VjIC8gNTAp KTsKQEAgLTE1MzksMTQgKzE1MjIsMTMgQEANCiB7CiAgICAgZmRyaXZlX3QgKmN1cl9kcnY7 CiAKLSAgICBmZGN0cmwtPmN1cl9kcnYgPSBmZGN0cmwtPmZpZm9bMV0gJiBGRF9ET1JfU0VM TUFTSzsKKyAgICBTRVRfQ1VSX0RSVihmZGN0cmwsIGZkY3RybC0+Zmlmb1sxXSAmIEZEX0RP Ul9TRUxNQVNLKTsKICAgICBjdXJfZHJ2ID0gZ2V0X2N1cl9kcnYoZmRjdHJsKTsKICAgICBm ZGN0cmwtPmRhdGFfc3RhdGUgfD0gRkRfU1RBVEVfRk9STUFUOwogICAgIGlmIChmZGN0cmwt PmZpZm9bMF0gJiAweDgwKQogICAgICAgICBmZGN0cmwtPmRhdGFfc3RhdGUgfD0gRkRfU1RB VEVfTVVMVEk7CiAgICAgZWxzZQogICAgICAgICBmZGN0cmwtPmRhdGFfc3RhdGUgJj0gfkZE X1NUQVRFX01VTFRJOwotICAgIGZkY3RybC0+ZGF0YV9zdGF0ZSAmPSB+RkRfU1RBVEVfU0VF SzsKICAgICBjdXJfZHJ2LT5icHMgPQogICAgICAgICBmZGN0cmwtPmZpZm9bMl0gPiA3ID8g MTYzODQgOiAxMjggPDwgZmRjdHJsLT5maWZvWzJdOwogI2lmIDAKQEAgLTE1NjgsNyArMTU1 MCwxMCBAQA0KIHsKICAgICBmZGN0cmwtPnRpbWVyMCA9IChmZGN0cmwtPmZpZm9bMV0gPj4g NCkgJiAweEY7CiAgICAgZmRjdHJsLT50aW1lcjEgPSBmZGN0cmwtPmZpZm9bMl0gPj4gMTsK LSAgICBmZGN0cmwtPmRtYV9lbiA9IDEgLSAoZmRjdHJsLT5maWZvWzJdICYgMSkgOworICAg IGlmIChmZGN0cmwtPmZpZm9bMl0gJiAxKQorICAgICAgICBmZGN0cmwtPmRvciAmPSB+RkRf RE9SX0RNQUVOOworICAgIGVsc2UKKyAgICAgICAgZmRjdHJsLT5kb3IgfD0gRkRfRE9SX0RN QUVOOwogICAgIC8qIE5vIHJlc3VsdCBiYWNrICovCiAgICAgZmRjdHJsX3Jlc2V0X2ZpZm8o ZmRjdHJsKTsKIH0KQEAgLTE1NzcsMTQgKzE1NjIsMTQgQEANCiB7CiAgICAgZmRyaXZlX3Qg KmN1cl9kcnY7CiAKLSAgICBmZGN0cmwtPmN1cl9kcnYgPSBmZGN0cmwtPmZpZm9bMV0gJiBG RF9ET1JfU0VMTUFTSzsKKyAgICBTRVRfQ1VSX0RSVihmZGN0cmwsIGZkY3RybC0+Zmlmb1sx XSAmIEZEX0RPUl9TRUxNQVNLKTsKICAgICBjdXJfZHJ2ID0gZ2V0X2N1cl9kcnYoZmRjdHJs KTsKICAgICBjdXJfZHJ2LT5oZWFkID0gKGZkY3RybC0+Zmlmb1sxXSA+PiAyKSAmIDE7CiAg ICAgLyogMSBCeXRlIHN0YXR1cyBiYWNrICovCiAgICAgZmRjdHJsLT5maWZvWzBdID0gKGN1 cl9kcnYtPnJvIDw8IDYpIHwKICAgICAgICAgKGN1cl9kcnYtPnRyYWNrID09IDAgPyAweDEw IDogMHgwMCkgfAogICAgICAgICAoY3VyX2Rydi0+aGVhZCA8PCAyKSB8Ci0gICAgICAgIGZk Y3RybC0+Y3VyX2RydiB8CisgICAgICAgIEdFVF9DVVJfRFJWKGZkY3RybCkgfAogICAgICAg ICAweDI4OwogICAgIGZkY3RybF9zZXRfZmlmbyhmZGN0cmwsIDEsIDApOwogfQpAQCAtMTU5 Myw3ICsxNTc4LDcgQEANCiB7CiAgICAgZmRyaXZlX3QgKmN1cl9kcnY7CiAKLSAgICBmZGN0 cmwtPmN1cl9kcnYgPSBmZGN0cmwtPmZpZm9bMV0gJiBGRF9ET1JfU0VMTUFTSzsKKyAgICBT RVRfQ1VSX0RSVihmZGN0cmwsIGZkY3RybC0+Zmlmb1sxXSAmIEZEX0RPUl9TRUxNQVNLKTsK ICAgICBjdXJfZHJ2ID0gZ2V0X2N1cl9kcnYoZmRjdHJsKTsKICAgICBmZF9yZWNhbGlicmF0 ZShjdXJfZHJ2KTsKICAgICBmZGN0cmxfcmVzZXRfZmlmbyhmZGN0cmwpOwpAQCAtMTYwNywz MSArMTU5MiwyNiBAQA0KIAogI2lmIDAKICAgICBmZGN0cmwtPmZpZm9bMF0gPQotICAgICAg ICBmZGN0cmwtPmludF9zdGF0dXMgfCAoY3VyX2Rydi0+aGVhZCA8PCAyKSB8IGZkY3RybC0+ Y3VyX2RydjsKKyAgICAgICAgZmRjdHJsLT5zdGF0dXMwIHwgKGN1cl9kcnYtPmhlYWQgPDwg MikgfCBHRVRfQ1VSX0RSVihmZGN0cmwpOwogI2Vsc2UKLSAgICAvKiBYWFg6IGludF9zdGF0 dXMgaGFuZGxpbmcgaXMgYnJva2VuIGZvciByZWFkL3dyaXRlCisgICAgLyogWFhYOiBzdGF0 dXMwIGhhbmRsaW5nIGlzIGJyb2tlbiBmb3IgcmVhZC93cml0ZQogICAgICAgIGNvbW1hbmRz LCBzbyB3ZSBkbyB0aGlzIGhhY2suIEl0IHNob3VsZCBiZSBzdXBwcmVzc2VkCiAgICAgICAg QVNBUCAqLwogICAgIGZkY3RybC0+Zmlmb1swXSA9Ci0gICAgICAgIDB4MjAgfCAoY3VyX2Ry di0+aGVhZCA8PCAyKSB8IGZkY3RybC0+Y3VyX2RydjsKKyAgICAgICAgRkRfU1IwX1NFRUsg fCAoY3VyX2Rydi0+aGVhZCA8PCAyKSB8IEdFVF9DVVJfRFJWKGZkY3RybCk7CiAjZW5kaWYK ICAgICBmZGN0cmwtPmZpZm9bMV0gPSBjdXJfZHJ2LT50cmFjazsKICAgICBmZGN0cmxfc2V0 X2ZpZm8oZmRjdHJsLCAyLCAwKTsKICAgICBmZGN0cmxfcmVzZXRfaXJxKGZkY3RybCk7Ci0g ICAgZmRjdHJsLT5pbnRfc3RhdHVzID0gRkRfU1IwX1JEWUNIRzsKKyAgICBmZGN0cmwtPnN0 YXR1czAgPSBGRF9TUjBfUkRZQ0hHOwogfQogCiBzdGF0aWMgdm9pZCBmZGN0cmxfaGFuZGxl X3NlZWsgKGZkY3RybF90ICpmZGN0cmwsIGludCBkaXJlY3Rpb24pCiB7CiAgICAgZmRyaXZl X3QgKmN1cl9kcnY7CiAKLSAgICBmZGN0cmwtPmN1cl9kcnYgPSBmZGN0cmwtPmZpZm9bMV0g JiBGRF9ET1JfU0VMTUFTSzsKKyAgICBTRVRfQ1VSX0RSVihmZGN0cmwsIGZkY3RybC0+Zmlm b1sxXSAmIEZEX0RPUl9TRUxNQVNLKTsKICAgICBjdXJfZHJ2ID0gZ2V0X2N1cl9kcnYoZmRj dHJsKTsKLSAgICBmZF9zdGFydChjdXJfZHJ2KTsKLSAgICBpZiAoZmRjdHJsLT5maWZvWzJd IDw9IGN1cl9kcnYtPnRyYWNrKQotICAgICAgICBjdXJfZHJ2LT5kaXIgPSAxOwotICAgIGVs c2UKLSAgICAgICAgY3VyX2Rydi0+ZGlyID0gMDsKICAgICBmZGN0cmxfcmVzZXRfZmlmbyhm ZGN0cmwpOwogICAgIGlmIChmZGN0cmwtPmZpZm9bMl0gPiBjdXJfZHJ2LT5tYXhfdHJhY2sp IHsKICAgICAgICAgZmRjdHJsX3JhaXNlX2lycShmZGN0cmwsIEZEX1NSMF9BQk5URVJNIHwg RkRfU1IwX1NFRUspOwpAQCAtMTY0OSw3ICsxNjI5LDcgQEANCiAgICAgaWYgKGZkY3RybC0+ Zmlmb1sxXSAmIDB4ODApCiAgICAgICAgIGN1cl9kcnYtPnBlcnBlbmRpY3VsYXIgPSBmZGN0 cmwtPmZpZm9bMV0gJiAweDc7CiAgICAgLyogTm8gcmVzdWx0IGJhY2sgKi8KLSAgICAgICAg ICAgZmRjdHJsX3Jlc2V0X2ZpZm8oZmRjdHJsKTsKKyAgICBmZGN0cmxfcmVzZXRfZmlmbyhm ZGN0cmwpOwogfQogCiBzdGF0aWMgdm9pZCBmZGN0cmxfaGFuZGxlX2NvbmZpZ3VyZSAoZmRj dHJsX3QgKmZkY3RybCwgaW50IGRpcmVjdGlvbikKQEAgLTE2OTAsMzYgKzE2NzAsMzMgQEAN CiAgICAgfSBlbHNlIGlmIChmZGN0cmwtPmRhdGFfbGVuID4gNykgewogICAgICAgICAvKiBF UlJPUiAqLwogICAgICAgICBmZGN0cmwtPmZpZm9bMF0gPSAweDgwIHwKLSAgICAgICAgICAg IChjdXJfZHJ2LT5oZWFkIDw8IDIpIHwgZmRjdHJsLT5jdXJfZHJ2OworICAgICAgICAgICAg KGN1cl9kcnYtPmhlYWQgPDwgMikgfCBHRVRfQ1VSX0RSVihmZGN0cmwpOwogICAgICAgICBm ZGN0cmxfc2V0X2ZpZm8oZmRjdHJsLCAxLCAxKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lk IGZkY3RybF9oYW5kbGVfcmVsYXRpdmVfc2Vla19vdXQgKGZkY3RybF90ICpmZGN0cmwsIGlu dCBkaXJlY3Rpb24pCiB7Ci0gICAgZmRyaXZlX3QgKmN1cl9kcnYgPSBnZXRfY3VyX2Rydihm ZGN0cmwpOworICAgIGZkcml2ZV90ICpjdXJfZHJ2OwogCi0gICAgZmRjdHJsLT5jdXJfZHJ2 ID0gZmRjdHJsLT5maWZvWzFdICYgRkRfRE9SX1NFTE1BU0s7CisgICAgU0VUX0NVUl9EUlYo ZmRjdHJsLCBmZGN0cmwtPmZpZm9bMV0gJiBGRF9ET1JfU0VMTUFTSyk7CiAgICAgY3VyX2Ry diA9IGdldF9jdXJfZHJ2KGZkY3RybCk7Ci0gICAgZmRfc3RhcnQoY3VyX2Rydik7Ci0gICAg Y3VyX2Rydi0+ZGlyID0gMDsKICAgICBpZiAoZmRjdHJsLT5maWZvWzJdICsgY3VyX2Rydi0+ dHJhY2sgPj0gY3VyX2Rydi0+bWF4X3RyYWNrKSB7CiAgICAgICAgIGN1cl9kcnYtPnRyYWNr ID0gY3VyX2Rydi0+bWF4X3RyYWNrIC0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBjdXJf ZHJ2LT50cmFjayArPSBmZGN0cmwtPmZpZm9bMl07CiAgICAgfQogICAgIGZkY3RybF9yZXNl dF9maWZvKGZkY3RybCk7CisgICAgLyogUmFpc2UgSW50ZXJydXB0ICovCiAgICAgZmRjdHJs X3JhaXNlX2lycShmZGN0cmwsIEZEX1NSMF9TRUVLKTsKIH0KIAogc3RhdGljIHZvaWQgZmRj dHJsX2hhbmRsZV9yZWxhdGl2ZV9zZWVrX2luIChmZGN0cmxfdCAqZmRjdHJsLCBpbnQgZGly ZWN0aW9uKQogewotICAgIGZkcml2ZV90ICpjdXJfZHJ2ID0gZ2V0X2N1cl9kcnYoZmRjdHJs KTsKKyAgICBmZHJpdmVfdCAqY3VyX2RydjsKIAotICAgIGZkY3RybC0+Y3VyX2RydiA9IGZk Y3RybC0+Zmlmb1sxXSAmIEZEX0RPUl9TRUxNQVNLOworICAgIFNFVF9DVVJfRFJWKGZkY3Ry bCwgZmRjdHJsLT5maWZvWzFdICYgRkRfRE9SX1NFTE1BU0spOwogICAgIGN1cl9kcnYgPSBn ZXRfY3VyX2RydihmZGN0cmwpOwotICAgIGZkX3N0YXJ0KGN1cl9kcnYpOwotICAgIGN1cl9k cnYtPmRpciA9IDE7CiAgICAgaWYgKGZkY3RybC0+Zmlmb1syXSA+IGN1cl9kcnYtPnRyYWNr KSB7CiAgICAgICAgIGN1cl9kcnYtPnRyYWNrID0gMDsKICAgICB9IGVsc2UgewpAQCAtMTcz MCw5NiArMTcwNyw5OSBAQA0KICAgICBmZGN0cmxfcmFpc2VfaXJxKGZkY3RybCwgRkRfU1Iw X1NFRUspOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICB1aW50OF90IHZhbHVl OworICAgIHVpbnQ4X3QgbWFzazsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIGludCBw YXJhbWV0ZXJzOworICAgIHZvaWQgKCpoYW5kbGVyKShmZGN0cmxfdCAqZmRjdHJsLCBpbnQg ZGlyZWN0aW9uKTsKKyAgICBpbnQgZGlyZWN0aW9uOworfSBoYW5kbGVyc1tdID0geworICAg IHsgRkRfQ01EX1JFQUQsIDB4MWYsICJSRUFEIiwgOCwgZmRjdHJsX3N0YXJ0X3RyYW5zZmVy LCBGRF9ESVJfUkVBRCB9LAorICAgIHsgRkRfQ01EX1dSSVRFLCAweDNmLCAiV1JJVEUiLCA4 LCBmZGN0cmxfc3RhcnRfdHJhbnNmZXIsIEZEX0RJUl9XUklURSB9LAorICAgIHsgRkRfQ01E X1NFRUssIDB4ZmYsICJTRUVLIiwgMiwgZmRjdHJsX2hhbmRsZV9zZWVrIH0sCisgICAgeyBG RF9DTURfU0VOU0VfSU5URVJSVVBUX1NUQVRVUywgMHhmZiwgIlNFTlNFIElOVEVSUlVQVCBT VEFUVVMiLCAwLCBmZGN0cmxfaGFuZGxlX3NlbnNlX2ludGVycnVwdF9zdGF0dXMgfSwKKyAg ICB7IEZEX0NNRF9SRUNBTElCUkFURSwgMHhmZiwgIlJFQ0FMSUJSQVRFIiwgMSwgZmRjdHJs X2hhbmRsZV9yZWNhbGlicmF0ZSB9LAorICAgIHsgRkRfQ01EX0ZPUk1BVF9UUkFDSywgMHhi ZiwgIkZPUk1BVCBUUkFDSyIsIDUsIGZkY3RybF9oYW5kbGVfZm9ybWF0X3RyYWNrIH0sCisg ICAgeyBGRF9DTURfUkVBRF9UUkFDSywgMHhiZiwgIlJFQUQgVFJBQ0siLCA4LCBmZGN0cmxf c3RhcnRfdHJhbnNmZXIsIEZEX0RJUl9SRUFEIH0sCisgICAgeyBGRF9DTURfUkVTVE9SRSwg MHhmZiwgIlJFU1RPUkUiLCAxNywgZmRjdHJsX2hhbmRsZV9yZXN0b3JlIH0sIC8qIHBhcnQg b2YgUkVBRCBERUxFVEVEIERBVEEgKi8KKyAgICB7IEZEX0NNRF9TQVZFLCAweGZmLCAiU0FW RSIsIDAsIGZkY3RybF9oYW5kbGVfc2F2ZSB9LCAvKiBwYXJ0IG9mIFJFQUQgREVMRVRFRCBE QVRBICovCisgICAgeyBGRF9DTURfUkVBRF9ERUxFVEVELCAweDFmLCAiUkVBRCBERUxFVEVE IERBVEEiLCA4LCBmZGN0cmxfc3RhcnRfdHJhbnNmZXJfZGVsLCBGRF9ESVJfUkVBRCB9LAor ICAgIHsgRkRfQ01EX1NDQU5fRVFVQUwsIDB4MWYsICJTQ0FOIEVRVUFMIiwgOCwgZmRjdHJs X3N0YXJ0X3RyYW5zZmVyLCBGRF9ESVJfU0NBTkUgfSwKKyAgICB7IEZEX0NNRF9WRVJJRlks IDB4MWYsICJWRVJJRlkiLCA4LCBmZGN0cmxfdW5pbXBsZW1lbnRlZCB9LAorICAgIHsgRkRf Q01EX1NDQU5fTE9XX09SX0VRVUFMLCAweDFmLCAiU0NBTiBMT1cgT1IgRVFVQUwiLCA4LCBm ZGN0cmxfc3RhcnRfdHJhbnNmZXIsIEZEX0RJUl9TQ0FOTCB9LAorICAgIHsgRkRfQ01EX1ND QU5fSElHSF9PUl9FUVVBTCwgMHgxZiwgIlNDQU4gSElHSCBPUiBFUVVBTCIsIDgsIGZkY3Ry bF9zdGFydF90cmFuc2ZlciwgRkRfRElSX1NDQU5IIH0sCisgICAgeyBGRF9DTURfV1JJVEVf REVMRVRFRCwgMHgzZiwgIldSSVRFIERFTEVURUQgREFUQSIsIDgsIGZkY3RybF9zdGFydF90 cmFuc2Zlcl9kZWwsIEZEX0RJUl9XUklURSB9LAorICAgIHsgRkRfQ01EX1JFQURfSUQsIDB4 YmYsICJSRUFEIElEIiwgMSwgZmRjdHJsX2hhbmRsZV9yZWFkaWQgfSwKKyAgICB7IEZEX0NN RF9TUEVDSUZZLCAweGZmLCAiU1BFQ0lGWSIsIDIsIGZkY3RybF9oYW5kbGVfc3BlY2lmeSB9 LAorICAgIHsgRkRfQ01EX1NFTlNFX0RSSVZFX1NUQVRVUywgMHhmZiwgIlNFTlNFIERSSVZF IFNUQVRVUyIsIDEsIGZkY3RybF9oYW5kbGVfc2Vuc2VfZHJpdmVfc3RhdHVzIH0sCisgICAg eyBGRF9DTURfUEVSUEVORElDVUxBUl9NT0RFLCAweGZmLCAiUEVSUEVORElDVUxBUiBNT0RF IiwgMSwgZmRjdHJsX2hhbmRsZV9wZXJwZW5kaWN1bGFyX21vZGUgfSwKKyAgICB7IEZEX0NN RF9DT05GSUdVUkUsIDB4ZmYsICJDT05GSUdVUkUiLCAzLCBmZGN0cmxfaGFuZGxlX2NvbmZp Z3VyZSB9LAorICAgIHsgRkRfQ01EX1BPV0VSRE9XTl9NT0RFLCAweGZmLCAiUE9XRVJET1dO IE1PREUiLCAyLCBmZGN0cmxfaGFuZGxlX3Bvd2VyZG93bl9tb2RlIH0sCisgICAgeyBGRF9D TURfT1BUSU9OLCAweGZmLCAiT1BUSU9OIiwgMSwgZmRjdHJsX2hhbmRsZV9vcHRpb24gfSwK KyAgICB7IEZEX0NNRF9EUklWRV9TUEVDSUZJQ0FUSU9OX0NPTU1BTkQsIDB4ZmYsICJEUklW RSBTUEVDSUZJQ0FUSU9OIENPTU1BTkQiLCA1LCBmZGN0cmxfaGFuZGxlX2RyaXZlX3NwZWNp ZmljYXRpb25fY29tbWFuZCB9LAorICAgIHsgRkRfQ01EX1JFTEFUSVZFX1NFRUtfT1VULCAw eGZmLCAiUkVMQVRJVkUgU0VFSyBPVVQiLCAyLCBmZGN0cmxfaGFuZGxlX3JlbGF0aXZlX3Nl ZWtfb3V0IH0sCisgICAgeyBGRF9DTURfRk9STUFUX0FORF9XUklURSwgMHhmZiwgIkZPUk1B VCBBTkQgV1JJVEUiLCAxMCwgZmRjdHJsX3VuaW1wbGVtZW50ZWQgfSwKKyAgICB7IEZEX0NN RF9SRUxBVElWRV9TRUVLX0lOLCAweGZmLCAiUkVMQVRJVkUgU0VFSyBJTiIsIDIsIGZkY3Ry bF9oYW5kbGVfcmVsYXRpdmVfc2Vla19pbiB9LAorICAgIHsgRkRfQ01EX0xPQ0ssIDB4N2Ys ICJMT0NLIiwgMCwgZmRjdHJsX2hhbmRsZV9sb2NrIH0sCisgICAgeyBGRF9DTURfRFVNUFJF RywgMHhmZiwgIkRVTVBSRUciLCAwLCBmZGN0cmxfaGFuZGxlX2R1bXByZWcgfSwKKyAgICB7 IEZEX0NNRF9WRVJTSU9OLCAweGZmLCAiVkVSU0lPTiIsIDAsIGZkY3RybF9oYW5kbGVfdmVy c2lvbiB9LAorICAgIHsgRkRfQ01EX1BBUlRfSUQsIDB4ZmYsICJQQVJUIElEIiwgMCwgZmRj dHJsX2hhbmRsZV9wYXJ0aWQgfSwKKyAgICB7IEZEX0NNRF9XUklURSwgMHgxZiwgIldSSVRF IChCZU9TKSIsIDgsIGZkY3RybF9zdGFydF90cmFuc2ZlciwgRkRfRElSX1dSSVRFIH0sIC8q IG5vdCBpbiBzcGVjaWZpY2F0aW9uIDsgQmVPUyA0LjUgYnVnICovCisgICAgeyAwLCAwLCAi dW5rbm93biIsIDAsIGZkY3RybF91bmltcGxlbWVudGVkIH0sIC8qIGRlZmF1bHQgaGFuZGxl ciAqLworfTsKKy8qIEFzc29jaWF0ZSBjb21tYW5kIHRvIGFuIGluZGV4IGluIHRoZSAnaGFu ZGxlcnMnIGFycmF5ICovCitzdGF0aWMgdWludDhfdCBjb21tYW5kX3RvX2hhbmRsZXJbMHhm Zl07CisKIHN0YXRpYyB2b2lkIGZkY3RybF93cml0ZV9kYXRhIChmZGN0cmxfdCAqZmRjdHJs LCB1aW50MzJfdCB2YWx1ZSkKIHsKICAgICBmZHJpdmVfdCAqY3VyX2RydjsKICAgICBpbnQg cG9zOwotICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotICAgICAgICB1aW50OF90IHZhbHVl OwotICAgICAgICB1aW50OF90IG1hc2s7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0g ICAgICAgIGludCBwYXJhbWV0ZXJzOwotICAgICAgICB2b2lkICgqaGFuZGxlcikoZmRjdHJs X3QgKmZkY3RybCwgaW50IGRpcmVjdGlvbik7Ci0gICAgICAgIGludCBwYXJhbWV0ZXI7Ci0g ICAgfSBjb21tYW5kc1tdID0gewotICAgICAgICB7IEZEX0NNRF9SRUFELCAweDFmLCAiUkVB RCIsIDgsIGZkY3RybF9zdGFydF90cmFuc2ZlciwgRkRfRElSX1JFQUQgfSwKLSAgICAgICAg eyBGRF9DTURfV1JJVEUsIDB4M2YsICJXUklURSIsIDgsIGZkY3RybF9zdGFydF90cmFuc2Zl ciwgRkRfRElSX1dSSVRFIH0sCi0gICAgICAgIHsgRkRfQ01EX1NFRUssIDB4ZmYsICJTRUVL IiwgMiwgZmRjdHJsX2hhbmRsZV9zZWVrIH0sCi0gICAgICAgIHsgRkRfQ01EX1NFTlNFX0lO VEVSUlVQVF9TVEFUVVMsIDB4ZmYsICJTRU5TRSBJTlRFUlJVUFQgU1RBVFVTIiwgMCwgZmRj dHJsX2hhbmRsZV9zZW5zZV9pbnRlcnJ1cHRfc3RhdHVzIH0sCi0gICAgICAgIHsgRkRfQ01E X1JFQ0FMSUJSQVRFLCAweGZmLCAiUkVDQUxJQlJBVEUiLCAxLCBmZGN0cmxfaGFuZGxlX3Jl Y2FsaWJyYXRlIH0sCi0gICAgICAgIHsgRkRfQ01EX0ZPUk1BVF9UUkFDSywgMHhiZiwgIkZP Uk1BVCBUUkFDSyIsIDUsIGZkY3RybF9oYW5kbGVfZm9ybWF0X3RyYWNrIH0sCi0gICAgICAg IHsgRkRfQ01EX1JFQURfVFJBQ0ssIDB4YmYsICJSRUFEIFRSQUNLIiwgOCwgZmRjdHJsX3N0 YXJ0X3RyYW5zZmVyLCBGRF9ESVJfUkVBRCB9LAotICAgICAgICB7IEZEX0NNRF9SRVNUT1JF LCAweGZmLCAiUkVTVE9SRSIsIDE3LCBmZGN0cmxfaGFuZGxlX3Jlc3RvcmUgfSwgLyogcGFy dCBvZiBSRUFEIERFTEVURUQgREFUQSAqLwotICAgICAgICB7IEZEX0NNRF9TQVZFLCAweGZm LCAiU0FWRSIsIDAsIGZkY3RybF9oYW5kbGVfc2F2ZSB9LCAvKiBwYXJ0IG9mIFJFQUQgREVM RVRFRCBEQVRBICovCi0gICAgICAgIHsgRkRfQ01EX1JFQURfREVMRVRFRCwgMHgxZiwgIlJF QUQgREVMRVRFRCBEQVRBIiwgOCwgZmRjdHJsX3N0YXJ0X3RyYW5zZmVyX2RlbCwgRkRfRElS X1JFQUQgfSwKLSAgICAgICAgeyBGRF9DTURfU0NBTl9FUVVBTCwgMHgxZiwgIlNDQU4gRVFV QUwiLCA4LCBmZGN0cmxfc3RhcnRfdHJhbnNmZXIsIEZEX0RJUl9TQ0FORSB9LAotICAgICAg ICB7IEZEX0NNRF9WRVJJRlksIDB4MWYsICJWRVJJRlkiLCA4LCBmZGN0cmxfdW5pbXBsZW1l bnRlZCB9LAotICAgICAgICB7IEZEX0NNRF9TQ0FOX0xPV19PUl9FUVVBTCwgMHgxZiwgIlND QU4gTE9XIE9SIEVRVUFMIiwgOCwgZmRjdHJsX3N0YXJ0X3RyYW5zZmVyLCBGRF9ESVJfU0NB TkwgfSwKLSAgICAgICAgeyBGRF9DTURfU0NBTl9ISUdIX09SX0VRVUFMLCAweDFmLCAiU0NB TiBISUdIIE9SIEVRVUFMIiwgOCwgZmRjdHJsX3N0YXJ0X3RyYW5zZmVyLCBGRF9ESVJfU0NB TkggfSwKLSAgICAgICAgeyBGRF9DTURfV1JJVEVfREVMRVRFRCwgMHgzZiwgIldSSVRFIERF TEVURUQgREFUQSIsIDgsIGZkY3RybF9zdGFydF90cmFuc2Zlcl9kZWwsIEZEX0RJUl9XUklU RSB9LAotICAgICAgICB7IEZEX0NNRF9SRUFEX0lELCAweGJmLCAiUkVBRCBJRCIsIDEsIGZk Y3RybF9oYW5kbGVfcmVhZGlkIH0sCi0gICAgICAgIHsgRkRfQ01EX1NQRUNJRlksIDB4ZmYs ICJTUEVDSUZZIiwgMiwgZmRjdHJsX2hhbmRsZV9zcGVjaWZ5IH0sCi0gICAgICAgIHsgRkRf Q01EX1NFTlNFX0RSSVZFX1NUQVRVUywgMHhmZiwgIlNFTlNFIERSSVZFIFNUQVRVUyIsIDEs IGZkY3RybF9oYW5kbGVfc2Vuc2VfZHJpdmVfc3RhdHVzIH0sCi0gICAgICAgIHsgRkRfQ01E X1BFUlBFTkRJQ1VMQVJfTU9ERSwgMHhmZiwgIlBFUlBFTkRJQ1VMQVIgTU9ERSIsIDEsIGZk Y3RybF9oYW5kbGVfcGVycGVuZGljdWxhcl9tb2RlIH0sCi0gICAgICAgIHsgRkRfQ01EX0NP TkZJR1VSRSwgMHhmZiwgIkNPTkZJR1VSRSIsIDMsIGZkY3RybF9oYW5kbGVfY29uZmlndXJl IH0sCi0gICAgICAgIHsgRkRfQ01EX1BPV0VSRE9XTl9NT0RFLCAweGZmLCAiUE9XRVJET1dO IE1PREUiLCAyLCBmZGN0cmxfaGFuZGxlX3Bvd2VyZG93bl9tb2RlIH0sCi0gICAgICAgIHsg RkRfQ01EX09QVElPTiwgMHhmZiwgIk9QVElPTiIsIDEsIGZkY3RybF9oYW5kbGVfb3B0aW9u IH0sCi0gICAgICAgIHsgRkRfQ01EX0RSSVZFX1NQRUNJRklDQVRJT05fQ09NTUFORCwgMHhm ZiwgIkRSSVZFIFNQRUNJRklDQVRJT04gQ09NTUFORCIsIDUsIGZkY3RybF9oYW5kbGVfZHJp dmVfc3BlY2lmaWNhdGlvbl9jb21tYW5kIH0sCi0gICAgICAgIHsgRkRfQ01EX1JFTEFUSVZF X1NFRUtfT1VULCAweGZmLCAiUkVMQVRJVkUgU0VFSyBPVVQiLCAyLCBmZGN0cmxfaGFuZGxl X3JlbGF0aXZlX3NlZWtfb3V0IH0sCi0gICAgICAgIHsgRkRfQ01EX0ZPUk1BVF9BTkRfV1JJ VEUsIDB4ZmYsICJGT1JNQVQgQU5EIFdSSVRFIiwgMTAsIGZkY3RybF91bmltcGxlbWVudGVk IH0sCi0gICAgICAgIHsgRkRfQ01EX1JFTEFUSVZFX1NFRUtfSU4sIDB4ZmYsICJSRUxBVElW RSBTRUVLIElOIiwgMiwgZmRjdHJsX2hhbmRsZV9yZWxhdGl2ZV9zZWVrX2luIH0sCi0gICAg ICAgIHsgRkRfQ01EX0xPQ0ssIDB4N2YsICJMT0NLIiwgMCwgZmRjdHJsX2hhbmRsZV9sb2Nr IH0sCi0gICAgICAgIHsgRkRfQ01EX0RVTVBSRUcsIDB4ZmYsICJEVU1QUkVHIiwgMCwgZmRj dHJsX2hhbmRsZV9kdW1wcmVnIH0sCi0gICAgICAgIHsgRkRfQ01EX1ZFUlNJT04sIDB4ZmYs ICJWRVJTSU9OIiwgMCwgZmRjdHJsX2hhbmRsZV92ZXJzaW9uIH0sCi0gICAgICAgIHsgRkRf Q01EX1BBUlRfSUQsIDB4ZmYsICJQQVJUIElEIiwgMCwgZmRjdHJsX2hhbmRsZV9wYXJ0aWQg fSwKLSAgICAgICAgeyBGRF9DTURfV1JJVEUsIDB4MWYsICJXUklURSAoQmVPUykiLCA4LCBm ZGN0cmxfc3RhcnRfdHJhbnNmZXIsIEZEX0RJUl9XUklURSB9LCAvKiBub3QgaW4gc3BlY2lm aWNhdGlvbiA7IEJlT1MgNC41IGJ1ZyAqLwotICAgIH07CiAKLSAgICBjdXJfZHJ2ID0gZ2V0 X2N1cl9kcnYoZmRjdHJsKTsKICAgICAvKiBSZXNldCBtb2RlICovCi0gICAgaWYgKGZkY3Ry bC0+c3RhdGUgJiBGRF9DVFJMX1JFU0VUKSB7CisgICAgaWYgKCEoZmRjdHJsLT5kb3IgJiBG RF9ET1JfblJFU0VUKSkgewogICAgICAgICBGTE9QUFlfRFBSSU5URigiRmxvcHB5IGNvbnRy b2xsZXIgaW4gUkVTRVQgc3RhdGUgIVxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g ICAgZmRjdHJsLT5zdGF0ZSAmPSB+RkRfQ1RSTF9TTEVFUDsKLSAgICBpZiAoRkRfU1RBVEUo ZmRjdHJsLT5kYXRhX3N0YXRlKSA9PSBGRF9TVEFURV9TVEFUVVMpIHsKLSAgICAgICAgRkxP UFBZX0VSUk9SKCJjYW4ndCB3cml0ZSBkYXRhIGluIHN0YXR1cyBtb2RlXG4iKTsKKyAgICBp ZiAoIShmZGN0cmwtPm1zciAmIEZEX01TUl9SUU0pIHx8IChmZGN0cmwtPm1zciAmIEZEX01T Ul9ESU8pKSB7CisgICAgICAgIEZMT1BQWV9FUlJPUigiY29udHJvbGxlciBub3QgcmVhZHkg Zm9yIHdyaXRpbmdcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGZkY3RybC0+ ZHNyICY9IH5GRF9EU1JfUFdSRE9XTjsKICAgICAvKiBJcyBpdCB3cml0ZSBjb21tYW5kIHRp bWUgPyAqLwotICAgIGlmIChGRF9TVEFURShmZGN0cmwtPmRhdGFfc3RhdGUpID09IEZEX1NU QVRFX0RBVEEpIHsKKyAgICBpZiAoZmRjdHJsLT5tc3IgJiBGRF9NU1JfTk9ORE1BKSB7CiAg ICAgICAgIC8qIEZJRk8gZGF0YSB3cml0ZSAqLwogICAgICAgICBmZGN0cmwtPmZpZm9bZmRj dHJsLT5kYXRhX3BvcysrXSA9IHZhbHVlOwogICAgICAgICBpZiAoZmRjdHJsLT5kYXRhX3Bv cyAlIEZEX1NFQ1RPUl9MRU4gPT0gKEZEX1NFQ1RPUl9MRU4gLSAxKSB8fAogICAgICAgICAg ICAgZmRjdHJsLT5kYXRhX3BvcyA9PSBmZGN0cmwtPmRhdGFfbGVuKSB7Ci0gICAgICAgICAg ICBiZHJ2X3dyaXRlKGN1cl9kcnYtPmJzLCBmZF9zZWN0b3IoY3VyX2RydiksIGZkY3RybC0+ ZmlmbywgMSk7CisgICAgICAgICAgICBjdXJfZHJ2ID0gZ2V0X2N1cl9kcnYoZmRjdHJsKTsK KyAgICAgICAgICAgIGlmIChiZHJ2X3dyaXRlKGN1cl9kcnYtPmJzLCBmZF9zZWN0b3IoY3Vy X2RydiksIGZkY3RybC0+ZmlmbywgMSkgPCAwKSB7CisgICAgICAgICAgICAgICAgRkxPUFBZ X0VSUk9SKCJ3cml0aW5nIHNlY3RvciAlZFxuIiwgZmRfc2VjdG9yKGN1cl9kcnYpKTsKKyAg ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo IWZkY3RybF9zZWVrX3RvX25leHRfc2VjdChmZGN0cmwsIGN1cl9kcnYpKSB7CisgICAgICAg ICAgICAgICAgRkxPUFBZX0RQUklOVEYoImVycm9yIHNlZWtpbmcgdG8gbmV4dCBzZWN0b3Ig JWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2VjdG9yKGN1cl9k cnYpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAg IH0KICAgICAgICAgLyogU3dpdGNoIGZyb20gdHJhbnNmZXIgbW9kZSB0byBzdGF0dXMgbW9k ZQogICAgICAgICAgKiB0aGVuIGZyb20gc3RhdHVzIG1vZGUgdG8gY29tbWFuZCBtb2RlCiAg ICAgICAgICAqLwotICAgICAgICBpZiAoRkRfU1RBVEUoZmRjdHJsLT5kYXRhX3N0YXRlKSA9 PSBGRF9TVEFURV9EQVRBKQorICAgICAgICBpZiAoZmRjdHJsLT5kYXRhX3BvcyA9PSBmZGN0 cmwtPmRhdGFfbGVuKQogICAgICAgICAgICAgZmRjdHJsX3N0b3BfdHJhbnNmZXIoZmRjdHJs LCBGRF9TUjBfU0VFSywgMHgwMCwgMHgwMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg ICAgaWYgKGZkY3RybC0+ZGF0YV9wb3MgPT0gMCkgewogICAgICAgICAvKiBDb21tYW5kICov Ci0gICAgICAgIGZvciAocG9zID0gMDsgcG9zIDwgc2l6ZW9mKGNvbW1hbmRzKS9zaXplb2Yo Y29tbWFuZHNbMF0pOyBwb3MrKykgewotICAgICAgICAgICAgaWYgKCh2YWx1ZSAmIGNvbW1h bmRzW3Bvc10ubWFzaykgPT0gY29tbWFuZHNbcG9zXS52YWx1ZSkgewotICAgICAgICAgICAg ICAgIEZMT1BQWV9EUFJJTlRGKCIlcyBjb21tYW5kXG4iLCBjb21tYW5kc1twb3NdLm5hbWUp OwotICAgICAgICAgICAgICAgIGZkY3RybC0+ZGF0YV9sZW4gPSBjb21tYW5kc1twb3NdLnBh cmFtZXRlcnMgKyAxOwotICAgICAgICAgICAgICAgIGdvdG8gZW5xdWV1ZTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQorICAgICAgICBwb3MgPSBjb21tYW5kX3RvX2hhbmRsZXJbdmFs dWUgJiAweGZmXTsKKyAgICAgICAgRkxPUFBZX0RQUklOVEYoIiVzIGNvbW1hbmRcbiIsIGhh bmRsZXJzW3Bvc10ubmFtZSk7CisgICAgICAgIGZkY3RybC0+ZGF0YV9sZW4gPSBoYW5kbGVy c1twb3NdLnBhcmFtZXRlcnMgKyAxOworICAgIH0KIAotICAgICAgICAvKiBVbmtub3duIGNv bW1hbmQgKi8KLSAgICAgICAgRkxPUFBZX0VSUk9SKCJ1bmtub3duIGNvbW1hbmQ6IDB4JTAy eFxuIiwgdmFsdWUpOwotICAgICAgICBmZGN0cmxfdW5pbXBsZW1lbnRlZChmZGN0cmwsIDAp OwotICAgICAgICByZXR1cm47Ci0gICAgfQotIGVucXVldWU6CiAgICAgRkxPUFBZX0RQUklO VEYoIiVzOiAlMDJ4XG4iLCBfX2Z1bmNfXywgdmFsdWUpOwotICAgIGZkY3RybC0+Zmlmb1tm ZGN0cmwtPmRhdGFfcG9zXSA9IHZhbHVlOwotICAgIGlmICgrK2ZkY3RybC0+ZGF0YV9wb3Mg PT0gZmRjdHJsLT5kYXRhX2xlbikgeworICAgIGZkY3RybC0+Zmlmb1tmZGN0cmwtPmRhdGFf cG9zKytdID0gdmFsdWU7CisgICAgaWYgKGZkY3RybC0+ZGF0YV9wb3MgPT0gZmRjdHJsLT5k YXRhX2xlbikgewogICAgICAgICAvKiBXZSBub3cgaGF2ZSBhbGwgcGFyYW1ldGVycwogICAg ICAgICAgKiBhbmQgd2lsbCBiZSBhYmxlIHRvIHRyZWF0IHRoZSBjb21tYW5kCiAgICAgICAg ICAqLwpAQCAtMTgyOCwxMyArMTgwOCw5IEBADQogICAgICAgICAgICAgcmV0dXJuOwogICAg ICAgICB9CiAKLSAgICAgICAgZm9yIChwb3MgPSAwOyBwb3MgPCBzaXplb2YoY29tbWFuZHMp L3NpemVvZihjb21tYW5kc1swXSk7IHBvcysrKSB7Ci0gICAgICAgICAgICBpZiAoKGZkY3Ry bC0+Zmlmb1swXSAmIGNvbW1hbmRzW3Bvc10ubWFzaykgPT0gY29tbWFuZHNbcG9zXS52YWx1 ZSkgewotICAgICAgICAgICAgICAgIEZMT1BQWV9EUFJJTlRGKCJ0cmVhdCAlcyBjb21tYW5k XG4iLCBjb21tYW5kc1twb3NdLm5hbWUpOwotICAgICAgICAgICAgICAgICgqY29tbWFuZHNb cG9zXS5oYW5kbGVyKShmZGN0cmwsIGNvbW1hbmRzW3Bvc10ucGFyYW1ldGVyKTsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBw b3MgPSBjb21tYW5kX3RvX2hhbmRsZXJbZmRjdHJsLT5maWZvWzBdICYgMHhmZl07CisgICAg ICAgIEZMT1BQWV9EUFJJTlRGKCJ0cmVhdCAlcyBjb21tYW5kXG4iLCBoYW5kbGVyc1twb3Nd Lm5hbWUpOworICAgICAgICAoKmhhbmRsZXJzW3Bvc10uaGFuZGxlcikoZmRjdHJsLCBoYW5k bGVyc1twb3NdLmRpcmVjdGlvbik7CiAgICAgfQogfQogCkBAIC0xODUyLDMgKzE4MjgsOTcg QEANCiAgICAgfQogICAgIGZkY3RybF9zdG9wX3RyYW5zZmVyKGZkY3RybCwgMHgwMCwgMHgw MCwgMHgwMCk7CiB9CisKKy8qIEluaXQgZnVuY3Rpb25zICovCitzdGF0aWMgZmRjdHJsX3Qg KmZkY3RybF9pbml0X2NvbW1vbiAocWVtdV9pcnEgaXJxLCBpbnQgZG1hX2NoYW5uLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJfdCBp b19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrRHJp dmVyU3RhdGUgKipmZHMpCit7CisgICAgZmRjdHJsX3QgKmZkY3RybDsKKyAgICBpbnQgaSwg ajsKKworICAgIC8qIEZpbGwgJ2NvbW1hbmRfdG9faGFuZGxlcicgbG9va3VwIHRhYmxlICov CisgICAgZm9yIChpID0gc2l6ZW9mKGhhbmRsZXJzKS9zaXplb2YoaGFuZGxlcnNbMF0pIC0g MTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemVvZihjb21t YW5kX3RvX2hhbmRsZXIpOyBqKyspIHsKKyAgICAgICAgICAgIGlmICgoaiAmIGhhbmRsZXJz W2ldLm1hc2spID09IGhhbmRsZXJzW2ldLnZhbHVlKQorICAgICAgICAgICAgICAgIGNvbW1h bmRfdG9faGFuZGxlcltqXSA9IGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGTE9QUFlf RFBSSU5URigiaW5pdCBjb250cm9sbGVyXG4iKTsKKyAgICBmZGN0cmwgPSBxZW11X21hbGxv Y3ooc2l6ZW9mKGZkY3RybF90KSk7CisgICAgaWYgKCFmZGN0cmwpCisgICAgICAgIHJldHVy biBOVUxMOworICAgIGZkY3RybC0+ZmlmbyA9IHFlbXVfbWVtYWxpZ24oNTEyLCBGRF9TRUNU T1JfTEVOKTsKKyAgICBpZiAoZmRjdHJsLT5maWZvID09IE5VTEwpIHsKKyAgICAgICAgcWVt dV9mcmVlKGZkY3RybCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmZGN0 cmwtPnJlc3VsdF90aW1lciA9IHFlbXVfbmV3X3RpbWVyKHZtX2Nsb2NrLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRjdHJsX3Jlc3VsdF90aW1lciwg ZmRjdHJsKTsKKworICAgIGZkY3RybC0+dmVyc2lvbiA9IDB4OTA7IC8qIEludGVsIDgyMDc4 IGNvbnRyb2xsZXIgKi8KKyAgICBmZGN0cmwtPmlycSA9IGlycTsKKyAgICBmZGN0cmwtPmRt YV9jaGFubiA9IGRtYV9jaGFubjsKKyAgICBmZGN0cmwtPmlvX2Jhc2UgPSBpb19iYXNlOwor ICAgIGZkY3RybC0+Y29uZmlnID0gRkRfQ09ORklHX0VJUyB8IEZEX0NPTkZJR19FRklGTzsg LyogSW1wbGljaXQgc2VlaywgcG9sbGluZyAmIEZJRk8gZW5hYmxlZCAqLworICAgIGlmIChm ZGN0cmwtPmRtYV9jaGFubiAhPSAtMSkgeworICAgICAgICBETUFfcmVnaXN0ZXJfY2hhbm5l bChkbWFfY2hhbm4sICZmZGN0cmxfdHJhbnNmZXJfaGFuZGxlciwgZmRjdHJsKTsKKyAgICB9 CisgICAgZm9yIChpID0gMDsgaSA8IE1BWF9GRDsgaSsrKSB7CisgICAgICAgIGZkX2luaXQo JmZkY3RybC0+ZHJpdmVzW2ldLCBmZHNbaV0pOworICAgIH0KKyAgICBmZGN0cmxfZXh0ZXJu YWxfcmVzZXQoZmRjdHJsKTsKKyAgICByZWdpc3Rlcl9zYXZldm0oImZkYyIsIGlvX2Jhc2Us IDIsIGZkY19zYXZlLCBmZGNfbG9hZCwgZmRjdHJsKTsKKyAgICBxZW11X3JlZ2lzdGVyX3Jl c2V0KGZkY3RybF9leHRlcm5hbF9yZXNldCwgZmRjdHJsKTsKKyAgICBmb3IgKGkgPSAwOyBp IDwgTUFYX0ZEOyBpKyspIHsKKyAgICAgICAgZmRfcmV2YWxpZGF0ZSgmZmRjdHJsLT5kcml2 ZXNbaV0pOworICAgIH0KKworICAgIHJldHVybiBmZGN0cmw7Cit9CisKK2ZkY3RybF90ICpm ZGN0cmxfaW5pdCAocWVtdV9pcnEgaXJxLCBpbnQgZG1hX2NoYW5uLCBpbnQgbWVtX21hcHBl ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3BoeXNfYWRkcl90IGlvX2Jhc2Us CisgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKipmZHMpCit7Cisg ICAgZmRjdHJsX3QgKmZkY3RybDsKKyAgICBpbnQgaW9fbWVtOworCisgICAgZmRjdHJsID0g ZmRjdHJsX2luaXRfY29tbW9uKGlycSwgZG1hX2NoYW5uLCBpb19iYXNlLCBmZHMpOworCisg ICAgZmRjdHJsLT5zdW40bSA9IDA7CisgICAgaWYgKG1lbV9tYXBwZWQpIHsKKyAgICAgICAg aW9fbWVtID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBmZGN0cmxfbWVtX3JlYWQsIGZk Y3RybF9tZW1fd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmRjdHJsKTsKKyAgICAgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShpb19i YXNlLCAweDA4LCBpb19tZW0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlZ2lzdGVyX2lv cG9ydF9yZWFkKCh1aW50MzJfdClpb19iYXNlICsgMHgwMSwgNSwgMSwgJmZkY3RybF9yZWFk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGN0cmwpOworICAgICAgICByZWdp c3Rlcl9pb3BvcnRfcmVhZCgodWludDMyX3QpaW9fYmFzZSArIDB4MDcsIDEsIDEsICZmZGN0 cmxfcmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRjdHJsKTsKKyAgICAg ICAgcmVnaXN0ZXJfaW9wb3J0X3dyaXRlKCh1aW50MzJfdClpb19iYXNlICsgMHgwMSwgNSwg MSwgJmZkY3RybF93cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkY3Ry bCk7CisgICAgICAgIHJlZ2lzdGVyX2lvcG9ydF93cml0ZSgodWludDMyX3QpaW9fYmFzZSAr IDB4MDcsIDEsIDEsICZmZGN0cmxfd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmZGN0cmwpOworICAgIH0KKworICAgIHJldHVybiBmZGN0cmw7Cit9CisKK2ZkY3Ry bF90ICpzdW40bV9mZGN0cmxfaW5pdCAocWVtdV9pcnEgaXJxLCB0YXJnZXRfcGh5c19hZGRy X3QgaW9fYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tEcml2ZXJT dGF0ZSAqKmZkcywgcWVtdV9pcnEgKmZkY190YykKK3sKKyAgICBmZGN0cmxfdCAqZmRjdHJs OworICAgIGludCBpb19tZW07CisKKyAgICBmZGN0cmwgPSBmZGN0cmxfaW5pdF9jb21tb24o aXJxLCAtMSwgaW9fYmFzZSwgZmRzKTsKKyAgICBmZGN0cmwtPnN1bjRtID0gMTsKKyAgICBp b19tZW0gPSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIGZkY3RybF9tZW1fcmVhZF9zdHJp Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZGN0cmxfbWVtX3dy aXRlX3N0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkY3Ry bCk7CisgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShpb19iYXNlLCAweDA4LCBp b19tZW0pOworICAgICpmZGNfdGMgPSAqcWVtdV9hbGxvY2F0ZV9pcnFzKGZkY3RybF9oYW5k bGVfdGMsIGZkY3RybCwgMSk7CisKKyAgICByZXR1cm4gZmRjdHJsOworfQo= --------------080202030905010301070105--