From owner-freebsd-bugs@FreeBSD.ORG Fri Jan 15 21:40:03 2010 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DD2D3106566C for ; Fri, 15 Jan 2010 21:40:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id B21798FC0C for ; Fri, 15 Jan 2010 21:40:03 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id o0FLe3Sf029082 for ; Fri, 15 Jan 2010 21:40:03 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id o0FLe3rk029080; Fri, 15 Jan 2010 21:40:03 GMT (envelope-from gnats) Date: Fri, 15 Jan 2010 21:40:03 GMT Message-Id: <201001152140.o0FLe3rk029080@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: "Pedro F. Giffuni" Cc: Subject: Re: bin/142384: [patch] sync fsck_msdosfs(8) with OpenBSD X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: "Pedro F. Giffuni" List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jan 2010 21:40:03 -0000 The following reply was made to PR bin/142384; it has been noted by GNATS. From: "Pedro F. Giffuni" To: bug-followup@FreeBSD.org Cc: Subject: Re: bin/142384: [patch] sync fsck_msdosfs(8) with OpenBSD Date: Fri, 15 Jan 2010 13:35:59 -0800 (PST) --0-1059020741-1263591359=:76287 Content-Type: text/plain; charset=us-ascii In addition to the NetBSD fixes, this patch renames the fields in the bootblock struct in preparation for a header unification patch based on the msdosfs headers. At least I am sure we are not ruining filesystems: mogwai# fsck -t msdosfs /dev/da0s1 ** /dev/da0s1 ** Phase 1 - Read and Compare FATs ** Phase 2 - Check Cluster Chains ** Phase 3 - Checking Directories ** Phase 4 - Checking for Lost Files 2310 files, 2306176 free (576544 clusters) --0-1059020741-1263591359=:76287 Content-Type: application/octet-stream; name=patch-fsck_msdosfs Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=patch-fsck_msdosfs ZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tfbXNkb3Nm cy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwkyMDEwLTAx LTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2Zz L2Jvb3QuYwkyMDEwLTAxLTE1IDE2OjIyOjA3LjAwMDAwMDAwMCArMDAwMApA QCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3 YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5n IFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElT JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTCkBAIC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRs aWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5o PgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAK QEAgLTQ4LDE2ICs0MCwxNSBAQAogI2luY2x1ZGUgImZzdXRpbC5oIgogCiBp bnQKLXJlYWRib290KGRvc2ZzLCBib290KQotCWludCBkb3NmczsKLQlzdHJ1 Y3QgYm9vdGJsb2NrICpib290OworcmVhZGJvb3QoaW50IGRvc2ZzLCBzdHJ1 Y3QgYm9vdGJsb2NrICpib290KQogewogCXVfY2hhciBibG9ja1tET1NCT09U QkxPQ0tTSVpFXTsKIAl1X2NoYXIgZnNpbmZvWzIgKiBET1NCT09UQkxPQ0tT SVpFXTsKIAl1X2NoYXIgYmFja3VwW0RPU0JPT1RCTE9DS1NJWkVdOwogCWlu dCByZXQgPSBGU09LOworCWludCBpOwogCQotCWlmIChyZWFkKGRvc2ZzLCBi bG9jaywgc2l6ZW9mIGJsb2NrKSA8IHNpemVvZiBibG9jaykgeworCWlmICgo c2l6ZV90KXJlYWQoZG9zZnMsIGJsb2NrLCBzaXplb2YgYmxvY2spICE9IHNp emVvZiBibG9jaykgewogCQlwZXJyb3IoImNvdWxkIG5vdCByZWFkIGJvb3Qg YmxvY2siKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpAQCAtNzEsMjIgKzYy LDIyIEBACiAJYm9vdC0+VmFsaWRGYXQgPSAtMTsKIAogCS8qIGRlY29kZSBi aW9zIHBhcmFtZXRlciBibG9jayAqLwotCWJvb3QtPkJ5dGVzUGVyU2VjID0g YmxvY2tbMTFdICsgKGJsb2NrWzEyXSA8PCA4KTsKLQlib290LT5TZWNQZXJD bHVzdCA9IGJsb2NrWzEzXTsKLQlib290LT5SZXNTZWN0b3JzID0gYmxvY2tb MTRdICsgKGJsb2NrWzE1XSA8PCA4KTsKLQlib290LT5GQVRzID0gYmxvY2tb MTZdOwotCWJvb3QtPlJvb3REaXJFbnRzID0gYmxvY2tbMTddICsgKGJsb2Nr WzE4XSA8PCA4KTsKLQlib290LT5TZWN0b3JzID0gYmxvY2tbMTldICsgKGJs b2NrWzIwXSA8PCA4KTsKLQlib290LT5NZWRpYSA9IGJsb2NrWzIxXTsKLQli b290LT5GQVRzbWFsbCA9IGJsb2NrWzIyXSArIChibG9ja1syM10gPDwgOCk7 CisJYm9vdC0+YnBiQnl0ZXNQZXJTZWMgPSBibG9ja1sxMV0gKyAoYmxvY2tb MTJdIDw8IDgpOworCWJvb3QtPmJwYlNlY1BlckNsdXN0ID0gYmxvY2tbMTNd OworCWJvb3QtPmJwYlJlc1NlY3RvcnMgPSBibG9ja1sxNF0gKyAoYmxvY2tb MTVdIDw8IDgpOworCWJvb3QtPmJwYkZBVHMgPSBibG9ja1sxNl07CisJYm9v dC0+YnBiUm9vdERpckVudHMgPSBibG9ja1sxN10gKyAoYmxvY2tbMThdIDw8 IDgpOworCWJvb3QtPmJwYlNlY3RvcnMgPSBibG9ja1sxOV0gKyAoYmxvY2tb MjBdIDw8IDgpOworCWJvb3QtPmJwYk1lZGlhID0gYmxvY2tbMjFdOworCWJv b3QtPmJwYkZBVHNtYWxsID0gYmxvY2tbMjJdICsgKGJsb2NrWzIzXSA8PCA4 KTsKIAlib290LT5TZWNQZXJUcmFjayA9IGJsb2NrWzI0XSArIChibG9ja1sy NV0gPDwgOCk7Ci0JYm9vdC0+SGVhZHMgPSBibG9ja1syNl0gKyAoYmxvY2tb MjddIDw8IDgpOwotCWJvb3QtPkhpZGRlblNlY3MgPSBibG9ja1syOF0gKyAo YmxvY2tbMjldIDw8IDgpICsgKGJsb2NrWzMwXSA8PCAxNikgKyAoYmxvY2tb MzFdIDw8IDI0KTsKLQlib290LT5IdWdlU2VjdG9ycyA9IGJsb2NrWzMyXSAr IChibG9ja1szM10gPDwgOCkgKyAoYmxvY2tbMzRdIDw8IDE2KSArIChibG9j a1szNV0gPDwgMjQpOworCWJvb3QtPmJwYkhlYWRzID0gYmxvY2tbMjZdICsg KGJsb2NrWzI3XSA8PCA4KTsKKwlib290LT5icGJIaWRkZW5TZWNzID0gYmxv Y2tbMjhdICsgKGJsb2NrWzI5XSA8PCA4KSArIChibG9ja1szMF0gPDwgMTYp ICsgKGJsb2NrWzMxXSA8PCAyNCk7CisJYm9vdC0+YnBiSHVnZVNlY3RvcnMg PSBibG9ja1szMl0gKyAoYmxvY2tbMzNdIDw8IDgpICsgKGJsb2NrWzM0XSA8 PCAxNikgKyAoYmxvY2tbMzVdIDw8IDI0KTsKIAotCWJvb3QtPkZBVHNlY3Mg PSBib290LT5GQVRzbWFsbDsKKwlib290LT5GQVRzZWNzID0gYm9vdC0+YnBi RkFUc21hbGw7CiAKLQlpZiAoIWJvb3QtPlJvb3REaXJFbnRzKQorCWlmICgh Ym9vdC0+YnBiUm9vdERpckVudHMpCiAJCWJvb3QtPmZsYWdzIHw9IEZBVDMy OwogCWlmIChib290LT5mbGFncyAmIEZBVDMyKSB7CiAJCWJvb3QtPkZBVHNl Y3MgPSBibG9ja1szNl0gKyAoYmxvY2tbMzddIDw8IDgpCkBAIC0xMDEsMTMg KzkyLDEzIEBACiAJCQkgICAgICAgYmxvY2tbNDNdLCBibG9ja1s0Ml0pOwog CQkJcmV0dXJuIEZTRkFUQUw7CiAJCX0KLQkJYm9vdC0+Um9vdENsID0gYmxv Y2tbNDRdICsgKGJsb2NrWzQ1XSA8PCA4KQorCQlib290LT5icGJSb290Q2x1 c3QgPSBibG9ja1s0NF0gKyAoYmxvY2tbNDVdIDw8IDgpCiAJCQkgICAgICAg KyAoYmxvY2tbNDZdIDw8IDE2KSArIChibG9ja1s0N10gPDwgMjQpOwotCQli b290LT5GU0luZm8gPSBibG9ja1s0OF0gKyAoYmxvY2tbNDldIDw8IDgpOwot CQlib290LT5CYWNrdXAgPSBibG9ja1s1MF0gKyAoYmxvY2tbNTFdIDw8IDgp OworCQlib290LT5icGJGU0luZm8gPSBibG9ja1s0OF0gKyAoYmxvY2tbNDld IDw8IDgpOworCQlib290LT5icGJCYWNrdXAgPSBibG9ja1s1MF0gKyAoYmxv Y2tbNTFdIDw8IDgpOwogCi0JCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+RlNJ bmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQotCQkgICAgIT0g Ym9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMKKwkJaWYgKGxzZWVr KGRvc2ZzLCBib290LT5icGJGU0luZm8gKiBib290LT5icGJCeXRlc1BlclNl YywgU0VFS19TRVQpCisJCSAgICAhPSBib290LT5icGJGU0luZm8gKiBib290 LT5icGJCeXRlc1BlclNlYwogCQkgICAgfHwgcmVhZChkb3NmcywgZnNpbmZv LCBzaXplb2YgZnNpbmZvKQogCQkgICAgIT0gc2l6ZW9mIGZzaW5mbykgewog CQkJcGVycm9yKCJjb3VsZCBub3QgcmVhZCBmc2luZm8gYmxvY2siKTsKQEAg LTEzMywxOCArMTI0LDE4IEBACiAJCQkJZnNpbmZvWzB4M2ZjXSA9IGZzaW5m b1sweDNmZF0gPSAwOwogCQkJCWZzaW5mb1sweDNmZV0gPSAweDU1OwogCQkJ CWZzaW5mb1sweDNmZl0gPSAweGFhOwotCQkJCWlmIChsc2Vlayhkb3Nmcywg Ym9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQot CQkJCSAgICAhPSBib290LT5GU0luZm8gKiBib290LT5CeXRlc1BlclNlYwor CQkJCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+YnBiRlNJbmZvICogYm9vdC0+ YnBiQnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQorCQkJCSAgICAhPSBib290LT5i cGJGU0luZm8gKiBib290LT5icGJCeXRlc1BlclNlYwogCQkJCSAgICB8fCB3 cml0ZShkb3NmcywgZnNpbmZvLCBzaXplb2YgZnNpbmZvKQogCQkJCSAgICAh PSBzaXplb2YgZnNpbmZvKSB7Ci0JCQkJCXBlcnJvcigiVW5hYmxlIHRvIHdy aXRlIEZTSW5mbyIpOworCQkJCQlwZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBi cGJGU0luZm8iKTsKIAkJCQkJcmV0dXJuIEZTRkFUQUw7CiAJCQkJfQogCQkJ CXJldCA9IEZTQk9PVE1PRDsKIAkJCX0gZWxzZQotCQkJCWJvb3QtPkZTSW5m byA9IDA7CisJCQkJYm9vdC0+YnBiRlNJbmZvID0gMDsKIAkJfQotCQlpZiAo Ym9vdC0+RlNJbmZvKSB7CisJCWlmIChib290LT5icGJGU0luZm8pIHsKIAkJ CWJvb3QtPkZTRnJlZSA9IGZzaW5mb1sweDFlOF0gKyAoZnNpbmZvWzB4MWU5 XSA8PCA4KQogCQkJCSAgICAgICArIChmc2luZm9bMHgxZWFdIDw8IDE2KQog CQkJCSAgICAgICArIChmc2luZm9bMHgxZWJdIDw8IDI0KTsKQEAgLTE1Myw0 NCArMTQ0LDU0IEBACiAJCQkJICAgICAgICsgKGZzaW5mb1sweDFlZl0gPDwg MjQpOwogCQl9CiAKLQkJaWYgKGxzZWVrKGRvc2ZzLCBib290LT5CYWNrdXAg KiBib290LT5CeXRlc1BlclNlYywgU0VFS19TRVQpCi0JCSAgICAhPSBib290 LT5CYWNrdXAgKiBib290LT5CeXRlc1BlclNlYworCQlpZiAobHNlZWsoZG9z ZnMsIGJvb3QtPmJwYkJhY2t1cCAqIGJvb3QtPmJwYkJ5dGVzUGVyU2VjLCBT RUVLX1NFVCkKKwkJICAgICE9IGJvb3QtPmJwYkJhY2t1cCAqIGJvb3QtPmJw YkJ5dGVzUGVyU2VjCiAJCSAgICB8fCByZWFkKGRvc2ZzLCBiYWNrdXAsIHNp emVvZiBiYWNrdXApICE9IHNpemVvZiAgYmFja3VwKSB7CiAJCQlwZXJyb3Io ImNvdWxkIG5vdCByZWFkIGJhY2t1cCBib290YmxvY2siKTsKIAkJCXJldHVy biBGU0ZBVEFMOwogCQl9CiAJCWJhY2t1cFs2NV0gPSBibG9ja1s2NV07CQkJ CS8qIFhYWCAqLwogCQlpZiAobWVtY21wKGJsb2NrICsgMTEsIGJhY2t1cCAr IDExLCA3OSkpIHsKLQkJCS8qIENvcnJlY3Q/CQkJCQlYWFggKi8KLQkJCXBm YXRhbCgiYmFja3VwIGRvZXNuJ3QgY29tcGFyZSB0byBwcmltYXJ5IGJvb3Ri bG9jayIpOwotCQkJaWYgKGFsd2F5c25vKQotCQkJCXBmYXRhbCgiXG4iKTsK LQkJCWVsc2UKLQkJCQlyZXR1cm4gRlNGQVRBTDsKKwkJCS8qCisJCQkgKiBY WFggV2UgcmVxdWlyZSBhIHJlZmVyZW5jZSB0aGF0IGV4cGxhaW5zCisJCQkg KiB0aGF0IHRoZXNlIGJ5dGVzIG5lZWQgdG8gbWF0Y2gsIG9yIHNob3VsZAor CQkJICogZHJvcCB0aGUgY2hlY2suICBnZHRATmV0QlNEIGhhcyBvYnNlcnZl ZAorCQkJICogZmlsZXN5c3RlbXMgdGhhdCB3b3JrIGZpbmUgdW5kZXIgV2lu ZG93cyBYUAorCQkJICogYW5kIE5ldEJTRCB0aGF0IGRvIG5vdCBtYXRjaCwg c28gdGhlCisJCQkgKiByZXF1aXJlbWVudCBpcyBzdXNwZWN0LiAgRm9yIG5v dywganVzdAorCQkJICogcHJpbnQgb3V0IHVzZWZ1bCBpbmZvcm1hdGlvbiBh bmQgY29udGludWUuCisJCQkgKi8KKwkJCXBmYXRhbCgiYmFja3VwIChibG9j ayAlZCkgbWlzbWF0Y2ggd2l0aCBwcmltYXJ5IGJvb3RibG9jazpcbiIsCisJ CQkgICAgICAgIGJvb3QtPmJwYkJhY2t1cCk7CisJCQlmb3IgKGkgPSAxMTsg aSA8IDExICsgOTA7IGkrKykgeworCQkJCWlmIChibG9ja1tpXSAhPSBiYWNr dXBbaV0pCisJCQkJCXBmYXRhbCgiXHRpPSVkXHRwcmltYXJ5IDB4JTAyeFx0 YmFja3VwIDB4JTAyeFxuIiwKKwkJCQkJICAgICAgIGksIGJsb2NrW2ldLCBi YWNrdXBbaV0pOworCQkJfQogCQl9Ci0JCS8qIENoZWNrIGJhY2t1cCBGU0lu Zm8/CQkJCQlYWFggKi8KKwkJLyogQ2hlY2sgYmFja3VwIGJwYkZTSW5mbz8J CQkJCVhYWCAqLwogCX0KIAotCWJvb3QtPkNsdXN0ZXJPZmZzZXQgPSAoYm9v dC0+Um9vdERpckVudHMgKiAzMiArIGJvb3QtPkJ5dGVzUGVyU2VjIC0gMSkK LQkgICAgLyBib290LT5CeXRlc1BlclNlYwotCSAgICArIGJvb3QtPlJlc1Nl Y3RvcnMKLQkgICAgKyBib290LT5GQVRzICogYm9vdC0+RkFUc2VjcwotCSAg ICAtIENMVVNUX0ZJUlNUICogYm9vdC0+U2VjUGVyQ2x1c3Q7CisJYm9vdC0+ Q2x1c3Rlck9mZnNldCA9IChib290LT5icGJSb290RGlyRW50cyAqIDMyICsg Ym9vdC0+YnBiQnl0ZXNQZXJTZWMgLSAxKQorCSAgICAvIGJvb3QtPmJwYkJ5 dGVzUGVyU2VjCisJICAgICsgYm9vdC0+YnBiUmVzU2VjdG9ycworCSAgICAr IGJvb3QtPmJwYkZBVHMgKiBib290LT5GQVRzZWNzCisJICAgIC0gQ0xVU1Rf RklSU1QgKiBib290LT5icGJTZWNQZXJDbHVzdDsKIAotCWlmIChib290LT5C eXRlc1BlclNlYyAlIERPU0JPT1RCTE9DS1NJWkUgIT0gMCkgewotCQlwZmF0 YWwoIkludmFsaWQgc2VjdG9yIHNpemU6ICV1IiwgYm9vdC0+Qnl0ZXNQZXJT ZWMpOworCWlmIChib290LT5icGJCeXRlc1BlclNlYyAlIERPU0JPT1RCTE9D S1NJWkUgIT0gMCkgeworCQlwZmF0YWwoIkludmFsaWQgc2VjdG9yIHNpemU6 ICV1IiwgYm9vdC0+YnBiQnl0ZXNQZXJTZWMpOwogCQlyZXR1cm4gRlNGQVRB TDsKIAl9Ci0JaWYgKGJvb3QtPlNlY1BlckNsdXN0ID09IDApIHsKLQkJcGZh dGFsKCJJbnZhbGlkIGNsdXN0ZXIgc2l6ZTogJXUiLCBib290LT5TZWNQZXJD bHVzdCk7CisJaWYgKGJvb3QtPmJwYlNlY1BlckNsdXN0ID09IDApIHsKKwkJ cGZhdGFsKCJJbnZhbGlkIGNsdXN0ZXIgc2l6ZTogJXUiLCBib290LT5icGJT ZWNQZXJDbHVzdCk7CiAJCXJldHVybiBGU0ZBVEFMOwogCX0KLQlpZiAoYm9v dC0+U2VjdG9ycykgewotCQlib290LT5IdWdlU2VjdG9ycyA9IDA7Ci0JCWJv b3QtPk51bVNlY3RvcnMgPSBib290LT5TZWN0b3JzOworCWlmIChib290LT5i cGJTZWN0b3JzKSB7CisJCWJvb3QtPmJwYkh1Z2VTZWN0b3JzID0gMDsKKwkJ Ym9vdC0+TnVtU2VjdG9ycyA9IGJvb3QtPmJwYlNlY3RvcnM7CiAJfSBlbHNl Ci0JCWJvb3QtPk51bVNlY3RvcnMgPSBib290LT5IdWdlU2VjdG9yczsKLQli b290LT5OdW1DbHVzdGVycyA9IChib290LT5OdW1TZWN0b3JzIC0gYm9vdC0+ Q2x1c3Rlck9mZnNldCkgLyBib290LT5TZWNQZXJDbHVzdDsKKwkJYm9vdC0+ TnVtU2VjdG9ycyA9IGJvb3QtPmJwYkh1Z2VTZWN0b3JzOworCWJvb3QtPk51 bUNsdXN0ZXJzID0gKGJvb3QtPk51bVNlY3RvcnMgLSBib290LT5DbHVzdGVy T2Zmc2V0KSAvIGJvb3QtPmJwYlNlY1BlckNsdXN0OwogCiAJaWYgKGJvb3Qt PmZsYWdzJkZBVDMyKQogCQlib290LT5DbHVzdE1hc2sgPSBDTFVTVDMyX01B U0s7CkBAIC0yMDYsMTMgKzIwNywxMyBAQAogCiAJc3dpdGNoIChib290LT5D bHVzdE1hc2spIHsKIAljYXNlIENMVVNUMzJfTUFTSzoKLQkJYm9vdC0+TnVt RmF0RW50cmllcyA9IChib290LT5GQVRzZWNzICogYm9vdC0+Qnl0ZXNQZXJT ZWMpIC8gNDsKKwkJYm9vdC0+TnVtRmF0RW50cmllcyA9IChib290LT5GQVRz ZWNzICogYm9vdC0+YnBiQnl0ZXNQZXJTZWMpIC8gNDsKIAkJYnJlYWs7CiAJ Y2FzZSBDTFVTVDE2X01BU0s6Ci0JCWJvb3QtPk51bUZhdEVudHJpZXMgPSAo Ym9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKSAvIDI7CisJCWJv b3QtPk51bUZhdEVudHJpZXMgPSAoYm9vdC0+RkFUc2VjcyAqIGJvb3QtPmJw YkJ5dGVzUGVyU2VjKSAvIDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJv b3QtPk51bUZhdEVudHJpZXMgPSAoYm9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5 dGVzUGVyU2VjICogMikgLyAzOworCQlib290LT5OdW1GYXRFbnRyaWVzID0g KGJvb3QtPkZBVHNlY3MgKiBib290LT5icGJCeXRlc1BlclNlYyAqIDIpIC8g MzsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMjEsNyArMjIyLDcgQEAKIAkJICAg ICAgIGJvb3QtPk51bUNsdXN0ZXJzLCBib290LT5GQVRzZWNzKTsKIAkJcmV0 dXJuIEZTRkFUQUw7CiAJfQotCWJvb3QtPkNsdXN0ZXJTaXplID0gYm9vdC0+ Qnl0ZXNQZXJTZWMgKiBib290LT5TZWNQZXJDbHVzdDsKKwlib290LT5DbHVz dGVyU2l6ZSA9IGJvb3QtPmJwYkJ5dGVzUGVyU2VjICogYm9vdC0+YnBiU2Vj UGVyQ2x1c3Q7CiAKIAlib290LT5OdW1GaWxlcyA9IDE7CiAJYm9vdC0+TnVt RnJlZSA9IDA7CkBAIC0yMzAsMTQgKzIzMSwxMiBAQAogfQogCiBpbnQKLXdy aXRlZnNpbmZvKGRvc2ZzLCBib290KQotCWludCBkb3NmczsKLQlzdHJ1Y3Qg Ym9vdGJsb2NrICpib290Oword3JpdGVmc2luZm8oaW50IGRvc2ZzLCBzdHJ1 Y3QgYm9vdGJsb2NrICpib290KQogewogCXVfY2hhciBmc2luZm9bMiAqIERP U0JPT1RCTE9DS1NJWkVdOwogCi0JaWYgKGxzZWVrKGRvc2ZzLCBib290LT5G U0luZm8gKiBib290LT5CeXRlc1BlclNlYywgU0VFS19TRVQpCi0JICAgICE9 IGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjCisJaWYgKGxzZWVr KGRvc2ZzLCBib290LT5icGJGU0luZm8gKiBib290LT5icGJCeXRlc1BlclNl YywgU0VFS19TRVQpCisJICAgICE9IGJvb3QtPmJwYkZTSW5mbyAqIGJvb3Qt PmJwYkJ5dGVzUGVyU2VjCiAJICAgIHx8IHJlYWQoZG9zZnMsIGZzaW5mbywg c2l6ZW9mIGZzaW5mbykgIT0gc2l6ZW9mIGZzaW5mbykgewogCQlwZXJyb3Io ImNvdWxkIG5vdCByZWFkIGZzaW5mbyBibG9jayIpOwogCQlyZXR1cm4gRlNG QVRBTDsKQEAgLTI1MCwxMSArMjQ5LDExIEBACiAJZnNpbmZvWzB4MWVkXSA9 ICh1X2NoYXIpKGJvb3QtPkZTTmV4dCA+PiA4KTsKIAlmc2luZm9bMHgxZWVd ID0gKHVfY2hhcikoYm9vdC0+RlNOZXh0ID4+IDE2KTsKIAlmc2luZm9bMHgx ZWZdID0gKHVfY2hhcikoYm9vdC0+RlNOZXh0ID4+IDI0KTsKLQlpZiAobHNl ZWsoZG9zZnMsIGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjLCBT RUVLX1NFVCkKLQkgICAgIT0gYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQ ZXJTZWMKKwlpZiAobHNlZWsoZG9zZnMsIGJvb3QtPmJwYkZTSW5mbyAqIGJv b3QtPmJwYkJ5dGVzUGVyU2VjLCBTRUVLX1NFVCkKKwkgICAgIT0gYm9vdC0+ YnBiRlNJbmZvICogYm9vdC0+YnBiQnl0ZXNQZXJTZWMKIAkgICAgfHwgd3Jp dGUoZG9zZnMsIGZzaW5mbywgc2l6ZW9mIGZzaW5mbykKIAkgICAgIT0gc2l6 ZW9mIGZzaW5mbykgewotCQlwZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBGU0lu Zm8iKTsKKwkJcGVycm9yKCJVbmFibGUgdG8gd3JpdGUgYnBiRlNJbmZvIik7 CiAJCXJldHVybiBGU0ZBVEFMOwogCX0KIAkvKgpkaWZmIC1ydSBmc2NrX21z ZG9zZnMub3JpZy9jaGVjay5jIGZzY2tfbXNkb3Nmcy9jaGVjay5jCi0tLSBm c2NrX21zZG9zZnMub3JpZy9jaGVjay5jCTIwMTAtMDEtMDYgMTE6MDc6MjQu MDAwMDAwMDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMvY2hlY2suYwkyMDEw LTAxLTE1IDE2OjE3OjUyLjAwMDAwMDAwMCArMDAwMApAQCAtMTAsMTMgKzEw LDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0g KglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgot ICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3Ig dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBF WFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBA IC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNs dWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUg PHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNu dGwuaD4KQEAgLTU0LDcgKzQ2LDggQEAKIAlpbnQgZG9zZnM7CiAJc3RydWN0 IGJvb3RibG9jayBib290OwogCXN0cnVjdCBmYXRFbnRyeSAqZmF0ID0gTlVM TDsKLQlpbnQgaSwgZmluaXNoX2Rvc2RpcnNlY3Rpb249MDsKKwlpbnQgZmlu aXNoX2Rvc2RpcnNlY3Rpb249MDsKKwl1X2ludCBpOwogCWludCBtb2QgPSAw OwogCWludCByZXQgPSA4OwogCkBAIC0xMDUsNyArOTgsNyBAQAogCX0KIAog CWlmIChib290LlZhbGlkRmF0IDwgMCkKLQkJZm9yIChpID0gMTsgaSA8IChp bnQpYm9vdC5GQVRzOyBpKyspIHsKKwkJZm9yIChpID0gMTsgaSA8IChpbnQp Ym9vdC5icGJGQVRzOyBpKyspIHsKIAkJCXN0cnVjdCBmYXRFbnRyeSAqY3Vy cmVudEZhdDsKIAogCQkJbW9kIHw9IHJlYWRmYXQoZG9zZnMsICZib290LCBp LCAmY3VycmVudEZhdCk7CmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Rp ci5jIGZzY2tfbXNkb3Nmcy9kaXIuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcv ZGlyLmMJMjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysr IGZzY2tfbXNkb3Nmcy9kaXIuYwkyMDEwLTAxLTE1IDE2OjIyOjAwLjAwMDAw MDAwMCArMDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJ YW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICog ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u CiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU SE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC00NCw3ICszNyw2IEBACiAjaW5j bHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVk ZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHVu aXN0ZC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMjI3LDI2ICsyMTks MzggQEAKIAljbF90IGNsOwogCWludCByZXQgPSBGU09LOwogCi0JYjEgPSBi b290LT5Sb290RGlyRW50cyAqIDMyOwotCWIyID0gYm9vdC0+U2VjUGVyQ2x1 c3QgKiBib290LT5CeXRlc1BlclNlYzsKKwliMSA9IGJvb3QtPmJwYlJvb3RE aXJFbnRzICogMzI7CisJYjIgPSBib290LT5icGJTZWNQZXJDbHVzdCAqIGJv b3QtPmJwYkJ5dGVzUGVyU2VjOwogCi0JaWYgKCEoYnVmZmVyID0gbWFsbG9j KGIxID4gYjIgPyBiMSA6IGIyKSkKLQkgICAgfHwgIShkZWxidWYgPSBtYWxs b2MoYjIpKQotCSAgICB8fCAhKHJvb3REaXIgPSBuZXdEb3NEaXJFbnRyeSgp KSkgewotCQlwZXJyb3IoIk5vIHNwYWNlIGZvciBkaXJlY3RvcnkiKTsKKwlp ZiAoKGJ1ZmZlciA9IG1hbGxvYyggYjEgPiBiMiA/IGIxIDogYjIpKSA9PSBO VUxMKSB7CisJCXBlcnJvcigiTm8gc3BhY2UgZm9yIGRpcmVjdG9yeSBidWZm ZXIiKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQorCisJaWYgKChkZWxidWYg PSBtYWxsb2MoYjIpKSA9PSBOVUxMKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJ cGVycm9yKCJObyBzcGFjZSBmb3IgZGlyZWN0b3J5IGRlbGJ1ZiIpOworCQly ZXR1cm4gRlNGQVRBTDsKKwl9CisKKwlpZiAoKHJvb3REaXIgPSBuZXdEb3NE aXJFbnRyeSgpKSA9PSBOVUxMKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJZnJl ZShkZWxidWYpOworCQlwZXJyb3IoIk5vIHNwYWNlIGZvciBkaXJlY3Rvcnkg ZW50cnkiKTsKKwkJcmV0dXJuIEZTRkFUQUw7CisJfQorCiAJbWVtc2V0KHJv b3REaXIsIDAsIHNpemVvZiAqcm9vdERpcik7CiAJaWYgKGJvb3QtPmZsYWdz ICYgRkFUMzIpIHsKLQkJaWYgKGJvb3QtPlJvb3RDbCA8IENMVVNUX0ZJUlNU IHx8IGJvb3QtPlJvb3RDbCA+PSBib290LT5OdW1DbHVzdGVycykgeworCQlp ZiAoYm9vdC0+YnBiUm9vdENsdXN0IDwgQ0xVU1RfRklSU1QgfHwgYm9vdC0+ YnBiUm9vdENsdXN0ID49IGJvb3QtPk51bUNsdXN0ZXJzKSB7CiAJCQlwZmF0 YWwoIlJvb3QgZGlyZWN0b3J5IHN0YXJ0cyB3aXRoIGNsdXN0ZXIgb3V0IG9m IHJhbmdlKCV1KSIsCi0JCQkgICAgICAgYm9vdC0+Um9vdENsKTsKKwkJCSAg ICAgICBib290LT5icGJSb290Q2x1c3QpOwogCQkJcmV0dXJuIEZTRkFUQUw7 CiAJCX0KLQkJY2wgPSBmYXRbYm9vdC0+Um9vdENsXS5uZXh0OworCQljbCA9 IGZhdFtib290LT5icGJSb290Q2x1c3RdLm5leHQ7CiAJCWlmIChjbCA8IENM VVNUX0ZJUlNUCiAJCSAgICB8fCAoY2wgPj0gQ0xVU1RfUlNSVkQgJiYgY2w8 IENMVVNUX0VPRlMpCi0JCSAgICB8fCBmYXRbYm9vdC0+Um9vdENsXS5oZWFk ICE9IGJvb3QtPlJvb3RDbCkgeworCQkgICAgfHwgZmF0W2Jvb3QtPmJwYlJv b3RDbHVzdF0uaGVhZCAhPSBib290LT5icGJSb290Q2x1c3QpIHsKIAkJCWlm IChjbCA9PSBDTFVTVF9GUkVFKQogCQkJCXB3YXJuKCJSb290IGRpcmVjdG9y eSBzdGFydHMgd2l0aCBmcmVlIGNsdXN0ZXJcbiIpOwogCQkJZWxzZSBpZiAo Y2wgPj0gQ0xVU1RfUlNSVkQpCkBAIC0yNTcsMTQgKzI2MSwxNCBAQAogCQkJ CXJldHVybiBGU0ZBVEFMOwogCQkJfQogCQkJaWYgKGFzaygxLCAiRml4Iikp IHsKLQkJCQlmYXRbYm9vdC0+Um9vdENsXS5uZXh0ID0gQ0xVU1RfRlJFRTsK KwkJCQlmYXRbYm9vdC0+YnBiUm9vdENsdXN0XS5uZXh0ID0gQ0xVU1RfRlJF RTsKIAkJCQlyZXQgPSBGU0ZBVE1PRDsKIAkJCX0gZWxzZQogCQkJCXJldCA9 IEZTRkFUQUw7CiAJCX0KIAotCQlmYXRbYm9vdC0+Um9vdENsXS5mbGFncyB8 PSBGQVRfVVNFRDsKLQkJcm9vdERpci0+aGVhZCA9IGJvb3QtPlJvb3RDbDsK KwkJZmF0W2Jvb3QtPmJwYlJvb3RDbHVzdF0uZmxhZ3MgfD0gRkFUX1VTRUQ7 CisJCXJvb3REaXItPmhlYWQgPSBib290LT5icGJSb290Q2x1c3Q7CiAJfQog CiAJcmV0dXJuIHJldDsKQEAgLTMwOSw3ICszMTMsNyBAQAogewogCXVfY2hh ciAqcywgKmU7CiAJb2ZmX3Qgb2ZmOwotCWludCBjbHN6ID0gYm9vdC0+U2Vj UGVyQ2x1c3QgKiBib290LT5CeXRlc1BlclNlYzsKKwlpbnQgY2xzeiA9IGJv b3QtPmJwYlNlY1BlckNsdXN0ICogYm9vdC0+YnBiQnl0ZXNQZXJTZWM7CiAK IAlzID0gZGVsYnVmICsgc3RhcnRvZmY7CiAJZSA9IGRlbGJ1ZiArIGNsc3o7 CkBAIC0zMTksOCArMzIzLDggQEAKIAkJCQlicmVhazsKIAkJCWUgPSBkZWxi dWYgKyBlbmRvZmY7CiAJCX0KLQkJb2ZmID0gc3RhcnRjbCAqIGJvb3QtPlNl Y1BlckNsdXN0ICsgYm9vdC0+Q2x1c3Rlck9mZnNldDsKLQkJb2ZmICo9IGJv b3QtPkJ5dGVzUGVyU2VjOworCQlvZmYgPSBzdGFydGNsICogYm9vdC0+YnBi U2VjUGVyQ2x1c3QgKyBib290LT5DbHVzdGVyT2Zmc2V0OworCQlvZmYgKj0g Ym9vdC0+YnBiQnl0ZXNQZXJTZWM7CiAJCWlmIChsc2VlayhmLCBvZmYsIFNF RUtfU0VUKSAhPSBvZmYKIAkJICAgIHx8IHJlYWQoZiwgZGVsYnVmLCBjbHN6 KSAhPSBjbHN6KSB7CiAJCQlwZXJyb3IoIlVuYWJsZSB0byByZWFkIGRpcmVj dG9yeSIpOwpAQCAtMzY3LDcgKzM3MSw4IEBACiAJCQkJcmV0dXJuIEZTRkFU QUw7CiAJCQlzdGFydCA9IGJ1ZmZlcjsKIAkJfQotCQlpZiAoZW5kY2wgPT0g Y3VyY2wpCisJCS8qIHN0YXJ0Y2wgaXMgPCBDTFVTVF9GSVJTVCBmb3IgIWZh dDMyIHJvb3QgKi8KKwkJaWYgKChlbmRjbCA9PSBjdXJjbCkgfHwgKHN0YXJ0 Y2wgPCBDTFVTVF9GSVJTVCkpCiAJCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0 YXJ0ICs9IDMyKQogCQkJCSpzdGFydCA9IFNMT1RfREVMRVRFRDsKIAkJcmV0 dXJuIEZTRElSTU9EOwpAQCAtMzg1LDcgKzM5MCw3IEBACiAJLyoKIAkgKiBD aGVjayBzaXplIG9uIG9yZGluYXJ5IGZpbGVzCiAJICovCi0JaW50MzJfdCBw aHlzaWNhbFNpemU7CisJdV9pbnQzMl90IHBoeXNpY2FsU2l6ZTsKIAogCWlm IChkaXItPmhlYWQgPT0gQ0xVU1RfRlJFRSkKIAkJcGh5c2ljYWxTaXplID0g MDsKQEAgLTQ1NiwxNCArNDYxLDE0IEBACiAJdmFsbGZuID0gaW52bGZuID0g ZW1wdHkgPSBOVUxMOwogCWRvIHsKIAkJaWYgKCEoYm9vdC0+ZmxhZ3MgJiBG QVQzMikgJiYgIWRpci0+cGFyZW50KSB7Ci0JCQlsYXN0ID0gYm9vdC0+Um9v dERpckVudHMgKiAzMjsKLQkJCW9mZiA9IGJvb3QtPlJlc1NlY3RvcnMgKyBi b290LT5GQVRzICogYm9vdC0+RkFUc2VjczsKKwkJCWxhc3QgPSBib290LT5i cGJSb290RGlyRW50cyAqIDMyOworCQkJb2ZmID0gYm9vdC0+YnBiUmVzU2Vj dG9ycyArIGJvb3QtPmJwYkZBVHMgKiBib290LT5GQVRzZWNzOwogCQl9IGVs c2UgewotCQkJbGFzdCA9IGJvb3QtPlNlY1BlckNsdXN0ICogYm9vdC0+Qnl0 ZXNQZXJTZWM7Ci0JCQlvZmYgPSBjbCAqIGJvb3QtPlNlY1BlckNsdXN0ICsg Ym9vdC0+Q2x1c3Rlck9mZnNldDsKKwkJCWxhc3QgPSBib290LT5icGJTZWNQ ZXJDbHVzdCAqIGJvb3QtPmJwYkJ5dGVzUGVyU2VjOworCQkJb2ZmID0gY2wg KiBib290LT5icGJTZWNQZXJDbHVzdCArIGJvb3QtPkNsdXN0ZXJPZmZzZXQ7 CiAJCX0KIAotCQlvZmYgKj0gYm9vdC0+Qnl0ZXNQZXJTZWM7CisJCW9mZiAq PSBib290LT5icGJCeXRlc1BlclNlYzsKIAkJaWYgKGxzZWVrKGYsIG9mZiwg U0VFS19TRVQpICE9IG9mZgogCQkgICAgfHwgcmVhZChmLCBidWZmZXIsIGxh c3QpICE9IGxhc3QpIHsKIAkJCXBlcnJvcigiVW5hYmxlIHRvIHJlYWQgZGly ZWN0b3J5Iik7CkBAIC02NDQsNyArNjQ5LDggQEAKIAkJCQlkaXJlbnQuaGVh ZCB8PSAocFsyMF0gPDwgMTYpIHwgKHBbMjFdIDw8IDI0KTsKIAkJCWRpcmVu dC5zaXplID0gcFsyOF0gfCAocFsyOV0gPDwgOCkgfCAocFszMF0gPDwgMTYp IHwgKHBbMzFdIDw8IDI0KTsKIAkJCWlmICh2YWxsZm4pIHsKLQkJCQlzdHJj cHkoZGlyZW50LmxuYW1lLCBsb25nTmFtZSk7CisJCQkJc3RybGNweShkaXJl bnQubG5hbWUsIGxvbmdOYW1lLAorCQkJCSAgICBzaXplb2YoZGlyZW50Lmxu YW1lKSk7CiAJCQkJbG9uZ05hbWVbMF0gPSAnXDAnOwogCQkJCXNob3J0U3Vt ID0gLTE7CiAJCQl9CkBAIC04MzIsNiArODM4LDEwIEBACiAJCQl9CiAJCQli b290LT5OdW1GaWxlcysrOwogCQl9CisKKwkJaWYgKCEoYm9vdC0+ZmxhZ3Mg JiBGQVQzMikgJiYgIWRpci0+cGFyZW50KQorCQkJYnJlYWs7CisKIAkJaWYg KG1vZCAmIFRISVNNT0QpIHsKIAkJCWxhc3QgKj0gMzI7CiAJCQlpZiAobHNl ZWsoZiwgb2ZmLCBTRUVLX1NFVCkgIT0gb2ZmCkBAIC04NDcsNiArODU3LDE5 IEBACiAJCQkJaW52bGZuID8gaW52bGZuIDogdmFsbGZuLCBwLAogCQkJCWlu dmxmbiA/IGludmNsIDogdmFsY2wsIC0xLCAwLAogCQkJCWZ1bGxwYXRoKGRp ciksIDEpOworCisJLyogVGhlIHJvb3QgZGlyZWN0b3J5IG9mIG5vbiBmYXQz MiBmaWxlc3lzdGVtcyBpcyBpbiBhIHNwZWNpYWwKKwkgKiBhcmVhIGFuZCBt YXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGFib3ZlIHdpdGhvdXQgYmVpbmcgd3Jp dHRlbiBvdXQuCisJICovCisJaWYgKChtb2QgJiBGU0RJUk1PRCkgJiYgIShi b290LT5mbGFncyAmIEZBVDMyKSAmJiAhZGlyLT5wYXJlbnQpIHsKKwkJbGFz dCAqPSAzMjsKKwkJaWYgKGxzZWVrKGYsIG9mZiwgU0VFS19TRVQpICE9IG9m ZgorCQkgICAgfHwgd3JpdGUoZiwgYnVmZmVyLCBsYXN0KSAhPSBsYXN0KSB7 CisJCQlwZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBkaXJlY3RvcnkiKTsKKwkJ CXJldHVybiBGU0ZBVEFMOworCQl9CisJCW1vZCAmPSB+VEhJU01PRDsKKwl9 CiAJcmV0dXJuIG1vZCAmIH5USElTTU9EOwogfQogCkBAIC05MzQsOSArOTU3 LDkgQEAKIAkJCXJldHVybiBGU0VSUk9SOwogCQl9CiAJCWxmb2ZmID0gbGZj bCAqIGJvb3QtPkNsdXN0ZXJTaXplCi0JCSAgICArIGJvb3QtPkNsdXN0ZXJP ZmZzZXQgKiBib290LT5CeXRlc1BlclNlYzsKKwkJICAgICsgYm9vdC0+Q2x1 c3Rlck9mZnNldCAqIGJvb3QtPmJwYkJ5dGVzUGVyU2VjOwogCQlpZiAobHNl ZWsoZG9zZnMsIGxmb2ZmLCBTRUVLX1NFVCkgIT0gbGZvZmYKLQkJICAgIHx8 IHJlYWQoZG9zZnMsIGxmYnVmLCBib290LT5DbHVzdGVyU2l6ZSkgIT0gYm9v dC0+Q2x1c3RlclNpemUpIHsKKwkJICAgIHx8IChzaXplX3QpcmVhZChkb3Nm cywgbGZidWYsIGJvb3QtPkNsdXN0ZXJTaXplKSAhPSBib290LT5DbHVzdGVy U2l6ZSkgewogCQkJcGVycm9yKCJjb3VsZCBub3QgcmVhZCBMT1NULkRJUiIp OwogCQkJcmV0dXJuIEZTRkFUQUw7CiAJCX0KQEAgLTk2Niw3ICs5ODksNyBA QAogCXBbMzFdID0gKHVfY2hhcikoZC5zaXplID4+IDI0KTsKIAlmYXRbaGVh ZF0uZmxhZ3MgfD0gRkFUX1VTRUQ7CiAJaWYgKGxzZWVrKGRvc2ZzLCBsZm9m ZiwgU0VFS19TRVQpICE9IGxmb2ZmCi0JICAgIHx8IHdyaXRlKGRvc2ZzLCBs ZmJ1ZiwgYm9vdC0+Q2x1c3RlclNpemUpICE9IGJvb3QtPkNsdXN0ZXJTaXpl KSB7CisJICAgIHx8IChzaXplX3Qpd3JpdGUoZG9zZnMsIGxmYnVmLCBib290 LT5DbHVzdGVyU2l6ZSkgIT0gYm9vdC0+Q2x1c3RlclNpemUpIHsKIAkJcGVy cm9yKCJjb3VsZCBub3Qgd3JpdGUgTE9TVC5ESVIiKTsKIAkJcmV0dXJuIEZT RkFUQUw7CiAJfQpkaWZmIC1ydSBmc2NrX21zZG9zZnMub3JpZy9kb3Nmcy5o IGZzY2tfbXNkb3Nmcy9kb3Nmcy5oCi0tLSBmc2NrX21zZG9zZnMub3JpZy9k b3Nmcy5oCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAwICswMDAwCisr KyBmc2NrX21zZG9zZnMvZG9zZnMuaAkyMDEwLTAxLTE1IDE2OjIxOjQ2LjAw MDAwMDAwMCArMDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl CiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgot ICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUg bmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj b250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQot ICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg QVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC00NiwyMSArMzksMjEgQEAK ICAqIEZBVCBib290IGJsb2NrLgogICovCiBzdHJ1Y3QgYm9vdGJsb2NrIHsK LQl1X2ludAlCeXRlc1BlclNlYzsJCS8qIGJ5dGVzIHBlciBzZWN0b3IgKi8K LQl1X2ludAlTZWNQZXJDbHVzdDsJCS8qIHNlY3RvcnMgcGVyIGNsdXN0ZXIg Ki8KLQl1X2ludAlSZXNTZWN0b3JzOwkJLyogbnVtYmVyIG9mIHJlc2VydmVk IHNlY3RvcnMgKi8KLQl1X2ludAlGQVRzOwkJCS8qIG51bWJlciBvZiBGQVRz ICovCi0JdV9pbnQJUm9vdERpckVudHM7CQkvKiBudW1iZXIgb2Ygcm9vdCBk aXJlY3RvcnkgZW50cmllcyAqLwotCXVfaW50CU1lZGlhOwkJCS8qIG1lZGlh IGRlc2NyaXB0b3IgKi8KLQl1X2ludAlGQVRzbWFsbDsJCS8qIG51bWJlciBv ZiBzZWN0b3JzIHBlciBGQVQgKi8KKwl1X2ludAlicGJCeXRlc1BlclNlYzsJ CS8qIGJ5dGVzIHBlciBzZWN0b3IgKi8KKwl1X2ludAlicGJTZWNQZXJDbHVz dDsJCS8qIHNlY3RvcnMgcGVyIGNsdXN0ZXIgKi8KKwl1X2ludAlicGJSZXNT ZWN0b3JzOwkJLyogbnVtYmVyIG9mIHJlc2VydmVkIHNlY3RvcnMgKi8KKwl1 X2ludAlicGJGQVRzOwkJLyogbnVtYmVyIG9mIGJwYkZBVHMgKi8KKwl1X2lu dAlicGJSb290RGlyRW50czsJCS8qIG51bWJlciBvZiByb290IGRpcmVjdG9y eSBlbnRyaWVzICovCisJdV9pbnQzMl90IGJwYlNlY3RvcnM7CQkvKiB0b3Rh bCBudW1iZXIgb2Ygc2VjdG9ycyAqLworCXVfaW50CWJwYk1lZGlhOwkJLyog bWVkaWEgZGVzY3JpcHRvciAqLworCXVfaW50CWJwYkZBVHNtYWxsOwkJLyog bnVtYmVyIG9mIHNlY3RvcnMgcGVyIEZBVCAqLwogCXVfaW50CVNlY1BlclRy YWNrOwkJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KLQl1X2ludAlIZWFkczsJ CQkvKiBudW1iZXIgb2YgaGVhZHMgKi8KLQl1X2ludDMyX3QgU2VjdG9yczsJ CS8qIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzICovCi0JdV9pbnQzMl90IEhp ZGRlblNlY3M7CQkvKiAjIG9mIGhpZGRlbiBzZWN0b3JzICovCi0JdV9pbnQz Ml90IEh1Z2VTZWN0b3JzOwkJLyogIyBvZiBzZWN0b3JzIGlmIGJwYlNlY3Rv cnMgPT0gMCAqLwotCXVfaW50CUZTSW5mbzsJCQkvKiBGU0luZm8gc2VjdG9y ICovCi0JdV9pbnQJQmFja3VwOwkJCS8qIEJhY2t1cCBvZiBCb290YmxvY2tz ICovCi0JY2xfdAlSb290Q2w7CQkJLyogU3RhcnQgb2YgUm9vdCBEaXJlY3Rv cnkgKi8KKwl1X2ludAlicGJIZWFkczsJCS8qIG51bWJlciBvZiBoZWFkcyAq LworCXVfaW50MzJfdCBicGJIaWRkZW5TZWNzOwkvKiAjIG9mIGhpZGRlbiBz ZWN0b3JzICovCisJdV9pbnQzMl90IGJwYkh1Z2VTZWN0b3JzOwkvKiAjIG9m IHNlY3RvcnMgaWYgYnBiYnBiU2VjdG9ycyA9PSAwICovCisJY2xfdAlicGJS b290Q2x1c3Q7CQkvKiBTdGFydCBvZiBSb290IERpcmVjdG9yeSAqLworCXVf aW50CWJwYkZTSW5mbzsJCS8qIEZTSW5mbyBzZWN0b3IgKi8KKwl1X2ludAli cGJCYWNrdXA7CQkvKiBCYWNrdXAgb2YgQm9vdGJsb2NrcyAqLwogCWNsX3QJ RlNGcmVlOwkJCS8qIE51bWJlciBvZiBmcmVlIGNsdXN0ZXJzIGFjYy4gRlNJ bmZvICovCiAJY2xfdAlGU05leHQ7CQkJLyogTmV4dCBmcmVlIGNsdXN0ZXIg YWNjLiBGU0luZm8gKi8KIApkaWZmIC1ydSBmc2NrX21zZG9zZnMub3JpZy9l eHQuaCBmc2NrX21zZG9zZnMvZXh0LmgKLS0tIGZzY2tfbXNkb3Nmcy5vcmln L2V4dC5oCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAwICswMDAwCisr KyBmc2NrX21zZG9zZnMvZXh0LmgJMjAxMC0wMS0xNSAxNjoxMDowNi4wMDAw MDAwMDAgKzAwMDAKQEAgLTEwLDEzICsxMCw2IEBACiAgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQog ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJ0aW4gSHVzZW1hbm4KLSAq CWFuZCBXb2xmZ2FuZyBTb2xmcmFuay4KLSAqIDQuIE5laXRoZXIgdGhlIG5h bWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u dHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAq ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV VEhPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgogICogSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFIElNUExJRUQgV0FSUkFOVElFUwpAQCAtNzcsMTIgKzcwLDEyIEBACiAj ZGVmaW5lCUZTRElSTU9ECTIJCS8qIFNvbWUgZGlyZWN0b3J5IHdhcyBtb2Rp ZmllZCAqLwogI2RlZmluZQlGU0ZBVE1PRAk0CQkvKiBUaGUgRkFUIHdhcyBt b2RpZmllZCAqLwogI2RlZmluZQlGU0VSUk9SCQk4CQkvKiBTb21lIHVucmVj b3ZlcmVkIGVycm9yIHJlbWFpbnMgKi8KLSNkZWZpbmUJRlNGQVRBTAkJMTYJ CS8qIFNvbWUgdW5yZWNvdmVyYWJsZSBlcnJvciBvY2N1cmVkICovCisjZGVm aW5lCUZTRkFUQUwJCTE2CQkvKiBTb21lIHVucmVjb3ZlcmFibGUgZXJyb3Ig b2NjdXJyZWQgKi8KICNkZWZpbmUgRlNESVJUWQkJMzIJCS8qIEZpbGUgc3lz dGVtIGlzIGRpcnR5ICovCiAjZGVmaW5lIEZTRklYRkFUCTY0CQkvKiBGaXgg ZmlsZSBzeXN0ZW0gRkFUICovCiAKIC8qCi0gKiByZWFkIGEgYm9vdCBibG9j ayBpbiBhIG1hY2hpbmUgaW5kZXBlbmRlbmQgZmFzaGlvbiBhbmQgdHJhbnNs YXRlCisgKiByZWFkIGEgYm9vdCBibG9jayBpbiBhIG1hY2hpbmUgaW5kZXBl bmRlbnQgZmFzaGlvbiBhbmQgdHJhbnNsYXRlCiAgKiBpdCBpbnRvIG91ciBz dHJ1Y3QgYm9vdGJsb2NrLgogICovCiBpbnQgcmVhZGJvb3QoaW50LCBzdHJ1 Y3QgYm9vdGJsb2NrICopOwpAQCAtOTYsMTMgKzg5LDEzIEBACiAgKiBSZWFk IG9uZSBvZiB0aGUgRkFUIGNvcGllcyBhbmQgcmV0dXJuIGEgcG9pbnRlciB0 byB0aGUgbmV3CiAgKiBhbGxvY2F0ZWQgYXJyYXkgaG9sZGluZyBvdXIgZGVz Y3JpcHRpb24gb2YgaXQuCiAgKi8KLWludCByZWFkZmF0KGludCwgc3RydWN0 IGJvb3RibG9jayAqLCBpbnQsIHN0cnVjdCBmYXRFbnRyeSAqKik7CitpbnQg cmVhZGZhdChpbnQsIHN0cnVjdCBib290YmxvY2sgKiwgdV9pbnQsIHN0cnVj dCBmYXRFbnRyeSAqKik7CiAKIC8qCiAgKiBDaGVjayB0d28gRkFUIGNvcGll cyBmb3IgY29uc2lzdGVuY3kgYW5kIG1lcmdlIGNoYW5nZXMgaW50byB0aGUK LSAqIGZpcnN0IGlmIG5lY2Nlc3NhcnkuCisgKiBmaXJzdCBpZiBuZWNlc3Nh cnkuCiAgKi8KLWludCBjb21wYXJlZmF0KHN0cnVjdCBib290YmxvY2sgKiwg c3RydWN0IGZhdEVudHJ5ICosIHN0cnVjdCBmYXRFbnRyeSAqLCBpbnQpOwor aW50IGNvbXBhcmVmYXQoc3RydWN0IGJvb3RibG9jayAqLCBzdHJ1Y3QgZmF0 RW50cnkgKiwgc3RydWN0IGZhdEVudHJ5ICosIHVfaW50KTsKIAogLyoKICAq IENoZWNrIGEgRkFUCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2ZhdC5j IGZzY2tfbXNkb3Nmcy9mYXQuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZmF0 LmMJMjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZz Y2tfbXNkb3Nmcy9mYXQuYwkyMDEwLTAxLTE1IDE2OjIxOjU1LjAwMDAwMDAw MCArMDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5k IFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBv ZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli dXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAg d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S UyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg SU1QTElFRCBXQVJSQU5USUVTCkBAIC00NywxMCArNDAsMTAgQEAKICNpbmNs dWRlICJleHQuaCIKICNpbmNsdWRlICJmc3V0aWwuaCIKIAotc3RhdGljIGlu dCBjaGVja2NsbnVtKHN0cnVjdCBib290YmxvY2sgKiwgaW50LCBjbF90LCBj bF90ICopOwotc3RhdGljIGludCBjbHVzdGRpZmZlcihjbF90LCBjbF90ICos IGNsX3QgKiwgaW50KTsKK3N0YXRpYyBpbnQgY2hlY2tjbG51bShzdHJ1Y3Qg Ym9vdGJsb2NrICosIHVfaW50LCBjbF90LCBjbF90ICopOworc3RhdGljIGlu dCBjbHVzdGRpZmZlcihjbF90LCBjbF90ICosIGNsX3QgKiwgdV9pbnQpOwog c3RhdGljIGludCB0cnljbGVhcihzdHJ1Y3QgYm9vdGJsb2NrICosIHN0cnVj dCBmYXRFbnRyeSAqLCBjbF90LCBjbF90ICopOwotc3RhdGljIGludCBfcmVh ZGZhdChpbnQsIHN0cnVjdCBib290YmxvY2sgKiwgaW50LCB1X2NoYXIgKiop Oworc3RhdGljIGludCBfcmVhZGZhdChpbnQsIHN0cnVjdCBib290YmxvY2sg KiwgdV9pbnQsIHVfY2hhciAqKik7CiAKIC8qLQogICogVGhlIGZpcnN0IDIg RkFUIGVudHJpZXMgY29udGFpbiBwc2V1ZG8tY2x1c3RlciBudW1iZXJzIHdp dGggdGhlIGZvbGxvd2luZwpAQCAtODAsMTAgKzczLDEwIEBACiAJaWYgKGJv b3QtPkNsdXN0TWFzayAhPSBDTFVTVDE2X01BU0sgJiYgYm9vdC0+Q2x1c3RN YXNrICE9IENMVVNUMzJfTUFTSykKIAkJcmV0dXJuIDA7CiAKLQlvZmYgPSBi b290LT5SZXNTZWN0b3JzOwotCW9mZiAqPSBib290LT5CeXRlc1BlclNlYzsK KwlvZmYgPSBib290LT5icGJSZXNTZWN0b3JzOworCW9mZiAqPSBib290LT5i cGJCeXRlc1BlclNlYzsKIAotCWJ1ZmZlciA9IG1hbGxvYyhib290LT5CeXRl c1BlclNlYyk7CisJYnVmZmVyID0gbWFsbG9jKGJvb3QtPmJwYkJ5dGVzUGVy U2VjKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKIAkJcGVycm9yKCJObyBz cGFjZSBmb3IgRkFUIik7CiAJCXJldHVybiAxOwpAQCAtOTQsNyArODcsNyBA QAogCQlnb3RvIGVycjsKIAl9CiAKLQlpZiAocmVhZChmcywgYnVmZmVyLCBi b290LT5CeXRlc1BlclNlYykgIT0gYm9vdC0+Qnl0ZXNQZXJTZWMpIHsKKwlp ZiAocmVhZChmcywgYnVmZmVyLCBib290LT5icGJCeXRlc1BlclNlYykgIT0g Ym9vdC0+YnBiQnl0ZXNQZXJTZWMpIHsKIAkJcGVycm9yKCJVbmFibGUgdG8g cmVhZCBGQVQiKTsKIAkJZ290byBlcnI7CiAJfQpAQCAtMTAzLDcgKzk2LDcg QEAKIAkgKiBJZiB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZSBGQVQsIHRoZW4g dGhlIGZpbGUgc3lzdGVtIG11c3QgYmUKIAkgKiBhc3N1bWVkIHRvIGJlIHVu Y2xlYW4uCiAJICovCi0JaWYgKGJ1ZmZlclswXSAhPSBib290LT5NZWRpYSB8 fCBidWZmZXJbMV0gIT0gMHhmZikKKwlpZiAoYnVmZmVyWzBdICE9IGJvb3Qt PmJwYk1lZGlhIHx8IGJ1ZmZlclsxXSAhPSAweGZmKQogCQlnb3RvIGVycjsK IAlpZiAoYm9vdC0+Q2x1c3RNYXNrID09IENMVVNUMTZfTUFTSykgewogCQlp ZiAoKGJ1ZmZlclsyXSAmIDB4ZjgpICE9IDB4ZjggfHwgKGJ1ZmZlclszXSAm IDB4M2YpICE9IDB4M2YpCkBAIC0xMzUsNyArMTI4LDcgQEAKICAqIENoZWNr IGEgY2x1c3RlciBudW1iZXIgZm9yIHZhbGlkIHZhbHVlCiAgKi8KIHN0YXRp YyBpbnQKLWNoZWNrY2xudW0oc3RydWN0IGJvb3RibG9jayAqYm9vdCwgaW50 IGZhdCwgY2xfdCBjbCwgY2xfdCAqbmV4dCkKK2NoZWNrY2xudW0oc3RydWN0 IGJvb3RibG9jayAqYm9vdCwgdV9pbnQgZmF0LCBjbF90IGNsLCBjbF90ICpu ZXh0KQogewogCWlmICgqbmV4dCA+PSAoQ0xVU1RfUlNSVkQmYm9vdC0+Q2x1 c3RNYXNrKSkKIAkJKm5leHQgfD0gfmJvb3QtPkNsdXN0TWFzazsKQEAgLTE2 NiwyNiArMTU5LDI2IEBACiAgKiBSZWFkIGEgRkFUIGZyb20gZGlzay4gUmV0 dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgb3RoZXJ3aXNlLgogICovCiBzdGF0 aWMgaW50Ci1fcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBib290YmxvY2sgKmJv b3QsIGludCBubywgdV9jaGFyICoqYnVmZmVyKQorX3JlYWRmYXQoaW50IGZz LCBzdHJ1Y3QgYm9vdGJsb2NrICpib290LCB1X2ludCBubywgdV9jaGFyICoq YnVmZmVyKQogewogCW9mZl90IG9mZjsKIAotCSpidWZmZXIgPSBtYWxsb2Mo Ym9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKTsKKwkqYnVmZmVy ID0gbWFsbG9jKGJvb3QtPkZBVHNlY3MgKiBib290LT5icGJCeXRlc1BlclNl Yyk7CiAJaWYgKCpidWZmZXIgPT0gTlVMTCkgewogCQlwZXJyb3IoIk5vIHNw YWNlIGZvciBGQVQiKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jb2ZmID0gYm9v dC0+UmVzU2VjdG9ycyArIG5vICogYm9vdC0+RkFUc2VjczsKLQlvZmYgKj0g Ym9vdC0+Qnl0ZXNQZXJTZWM7CisJb2ZmID0gYm9vdC0+YnBiUmVzU2VjdG9y cyArIG5vICogYm9vdC0+RkFUc2VjczsKKwlvZmYgKj0gYm9vdC0+YnBiQnl0 ZXNQZXJTZWM7CiAKIAlpZiAobHNlZWsoZnMsIG9mZiwgU0VFS19TRVQpICE9 IG9mZikgewogCQlwZXJyb3IoIlVuYWJsZSB0byByZWFkIEZBVCIpOwogCQln b3RvIGVycjsKIAl9CiAKLQlpZiAocmVhZChmcywgKmJ1ZmZlciwgYm9vdC0+ RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKQotCSAgICAhPSBib290LT5G QVRzZWNzICogYm9vdC0+Qnl0ZXNQZXJTZWMpIHsKKwlpZiAoKHNpemVfdCly ZWFkKGZzLCAqYnVmZmVyLCBib290LT5GQVRzZWNzICogYm9vdC0+YnBiQnl0 ZXNQZXJTZWMpCisJICAgICE9IGJvb3QtPkZBVHNlY3MgKiBib290LT5icGJC eXRlc1BlclNlYykgewogCQlwZXJyb3IoIlVuYWJsZSB0byByZWFkIEZBVCIp OwogCQlnb3RvIGVycjsKIAl9CkBAIC0yMDEsMjYgKzE5NCwyOCBAQAogICog UmVhZCBhIEZBVCBhbmQgZGVjb2RlIGl0IGludG8gaW50ZXJuYWwgZm9ybWF0 CiAgKi8KIGludAotcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBib290YmxvY2sg KmJvb3QsIGludCBubywgc3RydWN0IGZhdEVudHJ5ICoqZnApCityZWFkZmF0 KGludCBmcywgc3RydWN0IGJvb3RibG9jayAqYm9vdCwgdV9pbnQgbm8sIHN0 cnVjdCBmYXRFbnRyeSAqKmZwKQogewogCXN0cnVjdCBmYXRFbnRyeSAqZmF0 OwogCXVfY2hhciAqYnVmZmVyLCAqcDsKIAljbF90IGNsOwogCWludCByZXQg PSBGU09LOworCXNpemVfdCBsZW47CiAKIAlib290LT5OdW1GcmVlID0gYm9v dC0+TnVtQmFkID0gMDsKIAogCWlmICghX3JlYWRmYXQoZnMsIGJvb3QsIG5v LCAmYnVmZmVyKSkKIAkJcmV0dXJuIEZTRkFUQUw7CiAJCQotCWZhdCA9IGNh bGxvYyhib290LT5OdW1DbHVzdGVycywgc2l6ZW9mKHN0cnVjdCBmYXRFbnRy eSkpOworCWZhdCA9IG1hbGxvYyhsZW4gPSBib290LT5OdW1DbHVzdGVycyAq IHNpemVvZihzdHJ1Y3QgZmF0RW50cnkpKTsKIAlpZiAoZmF0ID09IE5VTEwp IHsKIAkJcGVycm9yKCJObyBzcGFjZSBmb3IgRkFUIik7CiAJCWZyZWUoYnVm ZmVyKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQorCSh2b2lkKW1lbXNldChm YXQsIDAsIGxlbik7CiAKLQlpZiAoYnVmZmVyWzBdICE9IGJvb3QtPk1lZGlh CisJaWYgKGJ1ZmZlclswXSAhPSBib290LT5icGJNZWRpYQogCSAgICB8fCBi dWZmZXJbMV0gIT0gMHhmZiB8fCBidWZmZXJbMl0gIT0gMHhmZgogCSAgICB8 fCAoYm9vdC0+Q2x1c3RNYXNrID09IENMVVNUMTZfTUFTSyAmJiBidWZmZXJb M10gIT0gMHhmZikKIAkgICAgfHwgKGJvb3QtPkNsdXN0TWFzayA9PSBDTFVT VDMyX01BU0sKQEAgLTIzNCw3ICsyMjksNyBAQAogCQkgKiBmaWxlIHN5c3Rl bSBpcyBkaXJ0eSBpZiBpdCBkb2Vzbid0IHJlYm9vdCBjbGVhbmx5LgogCQkg KiBDaGVjayB0aGlzIHNwZWNpYWwgY29uZGl0aW9uIGJlZm9yZSBlcnJvcnJp bmcgb3V0LgogCQkgKi8KLQkJaWYgKGJ1ZmZlclswXSA9PSBib290LT5NZWRp YSAmJiBidWZmZXJbMV0gPT0gMHhmZgorCQlpZiAoYnVmZmVyWzBdID09IGJv b3QtPmJwYk1lZGlhICYmIGJ1ZmZlclsxXSA9PSAweGZmCiAJCSAgICAmJiBi dWZmZXJbMl0gPT0gMHhmZgogCQkgICAgJiYgKChib290LT5DbHVzdE1hc2sg PT0gQ0xVU1QxNl9NQVNLICYmIGJ1ZmZlclszXSA9PSAweDdmKQogCQkJfHwg KGJvb3QtPkNsdXN0TWFzayA9PSBDTFVTVDMyX01BU0sKQEAgLTMxMSw3ICsz MDYsMTEgQEAKIAl9CiAKIAlmcmVlKGJ1ZmZlcik7Ci0JKmZwID0gZmF0Owor CWlmIChyZXQgJiBGU0ZBVEFMKSB7CisJCWZyZWUoZmF0KTsKKwkJKmZwID0g TlVMTDsKKwl9IGVsc2UKKwkJKmZwID0gZmF0OwogCXJldHVybiByZXQ7CiB9 CiAKQEAgLTMzMSw3ICszMzAsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1jbHVz dGRpZmZlcihjbF90IGNsLCBjbF90ICpjcDEsIGNsX3QgKmNwMiwgaW50IGZh dG51bSkKK2NsdXN0ZGlmZmVyKGNsX3QgY2wsIGNsX3QgKmNwMSwgY2xfdCAq Y3AyLCB1X2ludCBmYXRudW0pCiB7CiAJaWYgKCpjcDEgPT0gQ0xVU1RfRlJF RSB8fCAqY3AxID49IENMVVNUX1JTUlZEKSB7CiAJCWlmICgqY3AyID09IENM VVNUX0ZSRUUgfHwgKmNwMiA+PSBDTFVTVF9SU1JWRCkgewpAQCAtMzQ2LDEz ICszNDUsMTMgQEAKIAkJCQl9CiAJCQkJcmV0dXJuIEZTRkFUQUw7CiAJCQl9 Ci0JCQlwd2FybigiQ2x1c3RlciAldSBpcyBtYXJrZWQgJXMgaW4gRkFUIDAs ICVzIGluIEZBVCAlZFxuIiwKKwkJCXB3YXJuKCJDbHVzdGVyICV1IGlzIG1h cmtlZCAlcyBpbiBGQVQgMCwgJXMgaW4gRkFUICV1XG4iLAogCQkJICAgICAg Y2wsIHJzcnZkY2x0eXBlKCpjcDEpLCByc3J2ZGNsdHlwZSgqY3AyKSwgZmF0 bnVtKTsKIAkJCWlmIChhc2soMCwgIlVzZSBGQVQgMCdzIGVudHJ5IikpIHsK IAkJCQkqY3AyID0gKmNwMTsKIAkJCQlyZXR1cm4gRlNGQVRNT0Q7CiAJCQl9 Ci0JCQlpZiAoYXNrKDAsICJVc2UgRkFUICVkJ3MgZW50cnkiLCBmYXRudW0p KSB7CisJCQlpZiAoYXNrKDAsICJVc2UgRkFUICV1J3MgZW50cnkiLCBmYXRu dW0pKSB7CiAJCQkJKmNwMSA9ICpjcDI7CiAJCQkJcmV0dXJuIEZTRkFUTU9E OwogCQkJfQpAQCAtMzYwLDcgKzM1OSw3IEBACiAJCX0KIAkJcHdhcm4oIkNs dXN0ZXIgJXUgaXMgbWFya2VkICVzIGluIEZBVCAwLCBidXQgY29udGludWVz IHdpdGggY2x1c3RlciAldSBpbiBGQVQgJWRcbiIsCiAJCSAgICAgIGNsLCBy c3J2ZGNsdHlwZSgqY3AxKSwgKmNwMiwgZmF0bnVtKTsKLQkJaWYgKGFzaygw LCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9tIEZBVCAlZCIsIGZhdG51bSkpIHsK KwkJaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9tIEZBVCAldSIs IGZhdG51bSkpIHsKIAkJCSpjcDEgPSAqY3AyOwogCQkJcmV0dXJuIEZTRkFU TU9EOwogCQl9CkBAIC0zNzEsNyArMzcwLDcgQEAKIAkJcmV0dXJuIEZTRkFU QUw7CiAJfQogCWlmICgqY3AyID09IENMVVNUX0ZSRUUgfHwgKmNwMiA+PSBD TFVTVF9SU1JWRCkgewotCQlwd2FybigiQ2x1c3RlciAldSBjb250aW51ZXMg d2l0aCBjbHVzdGVyICV1IGluIEZBVCAwLCBidXQgaXMgbWFya2VkICVzIGlu IEZBVCAlZFxuIiwKKwkJcHdhcm4oIkNsdXN0ZXIgJXUgY29udGludWVzIHdp dGggY2x1c3RlciAldSBpbiBGQVQgMCwgYnV0IGlzIG1hcmtlZCAlcyBpbiBG QVQgJXVcbiIsCiAJCSAgICAgIGNsLCAqY3AxLCByc3J2ZGNsdHlwZSgqY3Ay KSwgZmF0bnVtKTsKIAkJaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBm cm9tIEZBVCAwIikpIHsKIAkJCSpjcDIgPSAqY3AxOwpAQCAtMzgzLDEzICsz ODIsMTMgQEAKIAkJfQogCQlyZXR1cm4gRlNFUlJPUjsKIAl9Ci0JcHdhcm4o IkNsdXN0ZXIgJXUgY29udGludWVzIHdpdGggY2x1c3RlciAldSBpbiBGQVQg MCwgYnV0IHdpdGggY2x1c3RlciAldSBpbiBGQVQgJWRcbiIsCisJcHdhcm4o IkNsdXN0ZXIgJXUgY29udGludWVzIHdpdGggY2x1c3RlciAldSBpbiBGQVQg MCwgYnV0IHdpdGggY2x1c3RlciAldSBpbiBGQVQgJXVcbiIsCiAJICAgICAg Y2wsICpjcDEsICpjcDIsIGZhdG51bSk7CiAJaWYgKGFzaygwLCAiVXNlIGNv bnRpbnVhdGlvbiBmcm9tIEZBVCAwIikpIHsKIAkJKmNwMiA9ICpjcDE7CiAJ CXJldHVybiBGU0ZBVE1PRDsKIAl9Ci0JaWYgKGFzaygwLCAiVXNlIGNvbnRp bnVhdGlvbiBmcm9tIEZBVCAlZCIsIGZhdG51bSkpIHsKKwlpZiAoYXNrKDAs ICJVc2UgY29udGludWF0aW9uIGZyb20gRkFUICV1IiwgZmF0bnVtKSkgewog CQkqY3AxID0gKmNwMjsKIAkJcmV0dXJuIEZTRkFUTU9EOwogCX0KQEAgLTQw MSw4ICs0MDAsOCBAQAogICogaW50byB0aGUgZmlyc3Qgb25lLgogICovCiBp bnQKLWNvbXBhcmVmYXQoc3RydWN0IGJvb3RibG9jayAqYm9vdCwgc3RydWN0 IGZhdEVudHJ5ICpmaXJzdCwgCi0gICAgc3RydWN0IGZhdEVudHJ5ICpzZWNv bmQsIGludCBmYXRudW0pCitjb21wYXJlZmF0KHN0cnVjdCBib290YmxvY2sg KmJvb3QsIHN0cnVjdCBmYXRFbnRyeSAqZmlyc3QsCisgICAgc3RydWN0IGZh dEVudHJ5ICpzZWNvbmQsIHVfaW50IGZhdG51bSkKIHsKIAljbF90IGNsOwog CWludCByZXQgPSBGU09LOwpAQCAtNTQyLDEyICs1NDEsMTIgQEAKIHsKIAl1 X2NoYXIgKmJ1ZmZlciwgKnA7CiAJY2xfdCBjbDsKLQlpbnQgaTsKLQl1X2lu dDMyX3QgZmF0c3o7CisJdV9pbnQgaTsKKwlzaXplX3QgZmF0c3o7CiAJb2Zm X3Qgb2ZmOwogCWludCByZXQgPSBGU09LOwogCi0JYnVmZmVyID0gbWFsbG9j KGZhdHN6ID0gYm9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKTsK KwlidWZmZXIgPSBtYWxsb2MoZmF0c3ogPSBib290LT5GQVRzZWNzICogYm9v dC0+YnBiQnl0ZXNQZXJTZWMpOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewog CQlwZXJyb3IoIk5vIHNwYWNlIGZvciBGQVQiKTsKIAkJcmV0dXJuIEZTRkFU QUw7CkBAIC01NTYsNyArNTU1LDcgQEAKIAlib290LT5OdW1GcmVlID0gMDsK IAlwID0gYnVmZmVyOwogCWlmIChjb3JyZWN0X2ZhdCkgewotCQkqcCsrID0g KHVfY2hhcilib290LT5NZWRpYTsKKwkJKnArKyA9ICh1X2NoYXIpYm9vdC0+ YnBiTWVkaWE7CiAJCSpwKysgPSAweGZmOwogCQkqcCsrID0gMHhmZjsKIAkJ c3dpdGNoIChib290LT5DbHVzdE1hc2spIHsKQEAgLTYyOSwxMSArNjI4LDEx IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlmb3IgKGkgPSAwOyBpIDwgYm9v dC0+RkFUczsgaSsrKSB7Ci0JCW9mZiA9IGJvb3QtPlJlc1NlY3RvcnMgKyBp ICogYm9vdC0+RkFUc2VjczsKLQkJb2ZmICo9IGJvb3QtPkJ5dGVzUGVyU2Vj OworCWZvciAoaSA9IDA7IGkgPCBib290LT5icGJGQVRzOyBpKyspIHsKKwkJ b2ZmID0gYm9vdC0+YnBiUmVzU2VjdG9ycyArIGkgKiBib290LT5GQVRzZWNz OworCQlvZmYgKj0gYm9vdC0+YnBiQnl0ZXNQZXJTZWM7CiAJCWlmIChsc2Vl ayhmcywgb2ZmLCBTRUVLX1NFVCkgIT0gb2ZmCi0JCSAgICB8fCB3cml0ZShm cywgYnVmZmVyLCBmYXRzeikgIT0gZmF0c3opIHsKKwkJICAgIHx8IChzaXpl X3Qpd3JpdGUoZnMsIGJ1ZmZlciwgZmF0c3opICE9IGZhdHN6KSB7CiAJCQlw ZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBGQVQiKTsKIAkJCXJldCA9IEZTRkFU QUw7IC8qIFJldHVybiBpbW1lZGlhdGVseT8JCVhYWCAqLwogCQl9CkBAIC02 NzMsNyArNjcyLDcgQEAKIAl9CiAJZmluaXNobGYoKTsKIAotCWlmIChib290 LT5GU0luZm8pIHsKKwlpZiAoYm9vdC0+YnBiRlNJbmZvKSB7CiAJCXJldCA9 IDA7CiAJCWlmIChib290LT5GU0ZyZWUgIT0gYm9vdC0+TnVtRnJlZSkgewog CQkJcHdhcm4oIkZyZWUgc3BhY2UgaW4gRlNJbmZvIGJsb2NrICglZCkgbm90 IGNvcnJlY3QgKCVkKVxuIiwKQEAgLTY4MywxNyArNjgyLDYgQEAKIAkJCQly ZXQgPSAxOwogCQkJfQogCQl9Ci0JCWlmIChib290LT5OdW1GcmVlICYmIGZh dFtib290LT5GU05leHRdLm5leHQgIT0gQ0xVU1RfRlJFRSkgewotCQkJcHdh cm4oIk5leHQgZnJlZSBjbHVzdGVyIGluIEZTSW5mbyBibG9jayAoJXUpIG5v dCBmcmVlXG4iLAotCQkJICAgICAgYm9vdC0+RlNOZXh0KTsKLQkJCWlmIChh c2soMSwgIkZpeCIpKQotCQkJCWZvciAoaGVhZCA9IENMVVNUX0ZJUlNUOyBo ZWFkIDwgYm9vdC0+TnVtQ2x1c3RlcnM7IGhlYWQrKykKLQkJCQkJaWYgKGZh dFtoZWFkXS5uZXh0ID09IENMVVNUX0ZSRUUpIHsKLQkJCQkJCWJvb3QtPkZT TmV4dCA9IGhlYWQ7Ci0JCQkJCQlyZXQgPSAxOwotCQkJCQkJYnJlYWs7Ci0J CQkJCX0KLQkJfQogCQlpZiAocmV0KQogCQkJbW9kIHw9IHdyaXRlZnNpbmZv KGRvc2ZzLCBib290KTsKIAl9CmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmln L2ZzY2tfbXNkb3Nmcy44IGZzY2tfbXNkb3Nmcy9mc2NrX21zZG9zZnMuOAot LS0gZnNja19tc2Rvc2ZzLm9yaWcvZnNja19tc2Rvc2ZzLjgJMjAxMC0wMS0w NiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tfbXNkb3Nmcy9m c2NrX21zZG9zZnMuOAkyMDEwLTAxLTE0IDIzOjExOjQyLjAwMDAwMDAwMCAr MDAwMApAQCAtMTEsMTMgKzExLDYgQEAKIC5cIiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAogLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIC5cIiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotLlwi CWFuZCBXb2xmZ2FuZyBTb2xmcmFuay4KLS5cIiA0LiBOZWl0aGVyIHRoZSBu YW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv bnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQot LlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLgogLlwiCiAuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAuXCIg SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpkaWZmIC1ydSBmc2NrX21z ZG9zZnMub3JpZy9tYWluLmMgZnNja19tc2Rvc2ZzL21haW4uYwotLS0gZnNj a19tc2Rvc2ZzLm9yaWcvbWFpbi5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAw MDAwMDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMvbWFpbi5jCTIwMTAtMDEt MTQgMjM6MTE6NDIuMDAwMDAwMDAwICswMDAwCkBAIC0xMCwxMyArMTAsNiBA QAogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u Ci0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFy dGluIEh1c2VtYW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0gKiA0 LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUg bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF U1MgT1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKQEAgLTQw LDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUg PHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3Rk aW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJuby5o Pgo= --0-1059020741-1263591359=:76287--