From nobody@FreeBSD.org  Wed Jan  6 16:50:45 2010
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 6FF47106566B
	for <freebsd-gnats-submit@FreeBSD.org>; Wed,  6 Jan 2010 16:50:45 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 5F4478FC25
	for <freebsd-gnats-submit@FreeBSD.org>; Wed,  6 Jan 2010 16:50:45 +0000 (UTC)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o06GoiMl049797
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 6 Jan 2010 16:50:44 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id o06GoiXv049794;
	Wed, 6 Jan 2010 16:50:44 GMT
	(envelope-from nobody)
Message-Id: <201001061650.o06GoiXv049794@www.freebsd.org>
Date: Wed, 6 Jan 2010 16:50:44 GMT
From: Pedro Giffuni <giffunip@tutopia.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: sync fsck_msdosfs with OpenBSD
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         142384
>Category:       bin
>Synopsis:       [patch] sync fsck_msdosfs(8) with OpenBSD
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    brian
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jan 06 17:00:15 UTC 2010
>Closed-Date:    Sun Jul 11 22:07:26 UTC 2010
>Last-Modified:  Sun Jul 11 22:07:26 UTC 2010
>Originator:     Pedro Giffuni
>Release:        8-0 Release
>Organization:
>Environment:
FreeBSD mogwai.giffuni.net 8.0-RELEASE FreeBSD 8.0-RELEASE #12: Tue Dec  1 23:31:27 UTC 2009     pedro@mogwai.giffuni.net:/usr/src/sys/i386/compile/GENERIC  i386

>Description:
Take some minor changes from OpenBSD's fsck_msdos. In particular:

Revision 1.13 (boot.c)
Check reads and lseek correctly for unsigned return

Revision 1.17 (fat.c) - Partial
use calloc() to avoid malloc(n * m) overflow
>How-To-Repeat:
Unfortunately someone has to review this carefully since fsck_msdosfs doesn't
seem to work properly on my system:
mogwai# fsck_msdosfs -p /dev/da0s1
Can't open (No such file or directory)
/dev/ad0s1: UNEXPECTED INCONSISTENCY; RUN fsck_msdosfs MANUALLY.

>Fix:
diff -ru fsck_msdosfs.orig/boot.c fsck_msdosfs/boot.c
--- fsck_msdosfs.orig/boot.c	2010-01-06 11:07:24.000000000 +0000
+++ fsck_msdosfs/boot.c	2010-01-06 11:19:21.000000000 +0000
@@ -55,9 +55,9 @@
 	u_char block[DOSBOOTBLOCKSIZE];
 	u_char fsinfo[2 * DOSBOOTBLOCKSIZE];
 	u_char backup[DOSBOOTBLOCKSIZE];
-	int ret = FSOK;
+	int n, ret = FSOK;
 	
-	if (read(dosfs, block, sizeof block) < sizeof block) {
+	if ((n=(read(dosfs, block, sizeof block) < sizeof block)) == -1 || n != sizeof block) {
 		perror("could not read boot block");
 		return FSFATAL;
 	}
@@ -106,10 +106,10 @@
 		boot->FSInfo = block[48] + (block[49] << 8);
 		boot->Backup = block[50] + (block[51] << 8);
 
-		if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
-		    != boot->FSInfo * boot->BytesPerSec
-		    || read(dosfs, fsinfo, sizeof fsinfo)
-		    != sizeof fsinfo) {
+		if ((n = lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)) == -1
+ 		    || n != boot->FSInfo * boot->BytesPerSec
+ 		    || (n = read(dosfs, fsinfo, sizeof fsinfo)) == -1
+ 		    || n != sizeof fsinfo) {
 			perror("could not read fsinfo block");
 			return FSFATAL;
 		}
@@ -133,10 +133,10 @@
 				fsinfo[0x3fc] = fsinfo[0x3fd] = 0;
 				fsinfo[0x3fe] = 0x55;
 				fsinfo[0x3ff] = 0xaa;
-				if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
-				    != boot->FSInfo * boot->BytesPerSec
-				    || write(dosfs, fsinfo, sizeof fsinfo)
-				    != sizeof fsinfo) {
+ 				if ((n = lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)) == -1
+ 				    || n != boot->FSInfo * boot->BytesPerSec
+ 				    || (n = write(dosfs, fsinfo, sizeof fsinfo)) == -1
+				    || n != sizeof fsinfo) {
 					perror("Unable to write FSInfo");
 					return FSFATAL;
 				}
@@ -153,9 +153,10 @@
 				       + (fsinfo[0x1ef] << 24);
 		}
 
-		if (lseek(dosfs, boot->Backup * boot->BytesPerSec, SEEK_SET)
-		    != boot->Backup * boot->BytesPerSec
-		    || read(dosfs, backup, sizeof backup) != sizeof  backup) {
+ 		if ((n = lseek(dosfs, boot->Backup * boot->BytesPerSec, SEEK_SET)) == -1
+ 		    || n != boot->Backup * boot->BytesPerSec
+ 		    || (n = read(dosfs, backup, sizeof backup)) == -1
+ 		    || n != sizeof backup) {
 			perror("could not read backup bootblock");
 			return FSFATAL;
 		}
@@ -235,10 +236,12 @@
 	struct bootblock *boot;
 {
 	u_char fsinfo[2 * DOSBOOTBLOCKSIZE];
-
-	if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
-	    != boot->FSInfo * boot->BytesPerSec
-	    || read(dosfs, fsinfo, sizeof fsinfo) != sizeof fsinfo) {
+ 	int n;
+  
+ 	if ((n = lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)) == -1
+ 	    || n != boot->FSInfo * boot->BytesPerSec
+ 	    || (n = read(dosfs, fsinfo, sizeof fsinfo)) == -1
+ 	    || n != sizeof fsinfo) {
 		perror("could not read fsinfo block");
 		return FSFATAL;
 	}
@@ -250,10 +253,10 @@
 	fsinfo[0x1ed] = (u_char)(boot->FSNext >> 8);
 	fsinfo[0x1ee] = (u_char)(boot->FSNext >> 16);
 	fsinfo[0x1ef] = (u_char)(boot->FSNext >> 24);
-	if (lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)
-	    != boot->FSInfo * boot->BytesPerSec
-	    || write(dosfs, fsinfo, sizeof fsinfo)
-	    != sizeof fsinfo) {
+ 	if ((n = lseek(dosfs, boot->FSInfo * boot->BytesPerSec, SEEK_SET)) == -1
+	    || n != boot->FSInfo * boot->BytesPerSec
+ 	    || (n = write(dosfs, fsinfo, sizeof fsinfo)) == -1
+ 	    || n != sizeof fsinfo) {
 		perror("Unable to write FSInfo");
 		return FSFATAL;
 	}
diff -ru fsck_msdosfs.orig/ext.h fsck_msdosfs/ext.h
--- fsck_msdosfs.orig/ext.h	2010-01-06 11:07:24.000000000 +0000
+++ fsck_msdosfs/ext.h	2010-01-06 11:26:33.000000000 +0000
@@ -82,7 +82,7 @@
 #define FSFIXFAT	64		/* Fix file system FAT */
 
 /*
- * read a boot block in a machine independend fashion and translate
+ * read a boot block in a machine independent fashion and translate
  * it into our struct bootblock.
  */
 int readboot(int, struct bootblock *);
diff -ru fsck_msdosfs.orig/fat.c fsck_msdosfs/fat.c
--- fsck_msdosfs.orig/fat.c	2010-01-06 11:07:24.000000000 +0000
+++ fsck_msdosfs/fat.c	2010-01-06 11:30:23.000000000 +0000
@@ -547,7 +547,8 @@
 	off_t off;
 	int ret = FSOK;
 
-	buffer = malloc(fatsz = boot->FATsecs * boot->BytesPerSec);
+	fatsz = boot->FATsecs * boot->BytesPerSec;
+	buffer = calloc(boot->FATsecs, boot->BytesPerSec);
 	if (buffer == NULL) {
 		perror("No space for FAT");
 		return FSFATAL;


>Release-Note:
>Audit-Trail:

From: Antoine Brodin <antoine@FreeBSD.org>
To: Pedro Giffuni <giffunip@tutopia.com>
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Wed, 6 Jan 2010 18:24:20 +0100

 On Wed, Jan 6, 2010 at 5:50 PM, Pedro Giffuni <giffunip@tutopia.com> wrote:
 [snip]
 > diff -ru fsck_msdosfs.orig/boot.c fsck_msdosfs/boot.c
 > --- fsck_msdosfs.orig/boot.c =A0 =A02010-01-06 11:07:24.000000000 +0000
 > +++ fsck_msdosfs/boot.c 2010-01-06 11:19:21.000000000 +0000
 > @@ -55,9 +55,9 @@
 > =A0 =A0 =A0 =A0u_char block[DOSBOOTBLOCKSIZE];
 > =A0 =A0 =A0 =A0u_char fsinfo[2 * DOSBOOTBLOCKSIZE];
 > =A0 =A0 =A0 =A0u_char backup[DOSBOOTBLOCKSIZE];
 > - =A0 =A0 =A0 int ret =3D FSOK;
 > + =A0 =A0 =A0 int n, ret =3D FSOK;
 >
 > - =A0 =A0 =A0 if (read(dosfs, block, sizeof block) < sizeof block) {
 > + =A0 =A0 =A0 if ((n=3D(read(dosfs, block, sizeof block) < sizeof block))=
  =3D=3D -1 || n !=3D sizeof block) {
 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0perror("could not read boot block");
 > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return FSFATAL;
 > =A0 =A0 =A0 =A0}
 
 This does not look right, you probably want:
  if ((n =3D read(dosfs, block, sizeof(block))) =3D=3D -1 || n !=3D sizeof(b=
 lock))
 
 Cheers,
 
 Antoine

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: Antoine Brodin <antoine@FreeBSD.org>
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Wed, 6 Jan 2010 10:05:33 -0800 (PST)

 ----- Original Message ----
 ...
 > 
 > This does not look right, you probably want:
 > if ((n = read(dosfs, block, sizeof(block))) == -1 || n != sizeof(block))
 > 
 
 Hmm... It was taken as-is from OpenBSD's CVS
 
 http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/fsck_msdos/boot.c.diff?r1=1.12;r2=1.13
 
 but I have no objection with adding the parenthesis.
 
 cheers,
 
 Pedro.
 
 
       

From: Antoine Brodin <antoine@FreeBSD.org>
To: "Pedro F. Giffuni" <giffunip@tutopia.com>
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Wed, 6 Jan 2010 19:38:06 +0100

 On Wed, Jan 6, 2010 at 7:05 PM, Pedro F. Giffuni <giffunip@tutopia.com> wrote:
 >> This does not look right, you probably want:
 >> if ((n = read(dosfs, block, sizeof(block))) == -1 || n != sizeof(block))
 >>
 >
 > Hmm... It was taken as-is from OpenBSD's CVS
 >
 > http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/fsck_msdos/boot.c.diff?r1=1.12;r2=1.13
 >
 > but I have no objection with adding the parenthesis.
 
 My problem was with the parenthesis between "n=" and "read" in your patch.
 
 Cheers,
 
 Antoine

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: Antoine Brodin <antoine@FreeBSD.org>
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Wed, 6 Jan 2010 11:03:23 -0800 (PST)

 --0-437212032-1262804603=:89207
 Content-Type: text/plain; charset=us-ascii
 
 ----- Original Message ----
 ...
 > 
 > My problem was with the parenthesis between "n=" and "read" in your patch.
 > 
 
 Ooops.. my bad, sorry!
 
 New patch attached.
 
 
       
 --0-437212032-1262804603=:89207
 Content-Type: application/octet-stream; name=patch-fsck_msdosfs
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="patch-fsck_msdosfs"
 
 ZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tfbXNkb3Nm
 cy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwkyMDEwLTAx
 LTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2Zz
 L2Jvb3QuYwkyMDEwLTAxLTA2IDEzOjU3OjUzLjAwMDAwMDAwMCArMDAwMApA
 QCAtNTUsOSArNTUsOSBAQAogCXVfY2hhciBibG9ja1tET1NCT09UQkxPQ0tT
 SVpFXTsKIAl1X2NoYXIgZnNpbmZvWzIgKiBET1NCT09UQkxPQ0tTSVpFXTsK
 IAl1X2NoYXIgYmFja3VwW0RPU0JPT1RCTE9DS1NJWkVdOwotCWludCByZXQg
 PSBGU09LOworCWludCBuLCByZXQgPSBGU09LOwogCQotCWlmIChyZWFkKGRv
 c2ZzLCBibG9jaywgc2l6ZW9mIGJsb2NrKSA8IHNpemVvZiBibG9jaykgewor
 CWlmICgobiA9IHJlYWQoZG9zZnMsIGJsb2NrLCBzaXplb2YgYmxvY2spIDwg
 c2l6ZW9mIGJsb2NrKSA9PSAtMSB8fCBuICE9IHNpemVvZiBibG9jaykgewog
 CQlwZXJyb3IoImNvdWxkIG5vdCByZWFkIGJvb3QgYmxvY2siKTsKIAkJcmV0
 dXJuIEZTRkFUQUw7CiAJfQpAQCAtMTA2LDEwICsxMDYsMTAgQEAKIAkJYm9v
 dC0+RlNJbmZvID0gYmxvY2tbNDhdICsgKGJsb2NrWzQ5XSA8PCA4KTsKIAkJ
 Ym9vdC0+QmFja3VwID0gYmxvY2tbNTBdICsgKGJsb2NrWzUxXSA8PCA4KTsK
 IAotCQlpZiAobHNlZWsoZG9zZnMsIGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5
 dGVzUGVyU2VjLCBTRUVLX1NFVCkKLQkJICAgICE9IGJvb3QtPkZTSW5mbyAq
 IGJvb3QtPkJ5dGVzUGVyU2VjCi0JCSAgICB8fCByZWFkKGRvc2ZzLCBmc2lu
 Zm8sIHNpemVvZiBmc2luZm8pCi0JCSAgICAhPSBzaXplb2YgZnNpbmZvKSB7
 CisJCWlmICgobiA9IGxzZWVrKGRvc2ZzLCBib290LT5GU0luZm8gKiBib290
 LT5CeXRlc1BlclNlYywgU0VFS19TRVQpKSA9PSAtMQorIAkJICAgIHx8IG4g
 IT0gYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMKKyAJCSAgICB8
 fCAobiA9IHJlYWQoZG9zZnMsIGZzaW5mbywgc2l6ZW9mIGZzaW5mbykpID09
 IC0xCisgCQkgICAgfHwgbiAhPSBzaXplb2YgZnNpbmZvKSB7CiAJCQlwZXJy
 b3IoImNvdWxkIG5vdCByZWFkIGZzaW5mbyBibG9jayIpOwogCQkJcmV0dXJu
 IEZTRkFUQUw7CiAJCX0KQEAgLTEzMywxMCArMTMzLDEwIEBACiAJCQkJZnNp
 bmZvWzB4M2ZjXSA9IGZzaW5mb1sweDNmZF0gPSAwOwogCQkJCWZzaW5mb1sw
 eDNmZV0gPSAweDU1OwogCQkJCWZzaW5mb1sweDNmZl0gPSAweGFhOwotCQkJ
 CWlmIChsc2Vlayhkb3NmcywgYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQ
 ZXJTZWMsIFNFRUtfU0VUKQotCQkJCSAgICAhPSBib290LT5GU0luZm8gKiBi
 b290LT5CeXRlc1BlclNlYwotCQkJCSAgICB8fCB3cml0ZShkb3NmcywgZnNp
 bmZvLCBzaXplb2YgZnNpbmZvKQotCQkJCSAgICAhPSBzaXplb2YgZnNpbmZv
 KSB7CisgCQkJCWlmICgobiA9IGxzZWVrKGRvc2ZzLCBib290LT5GU0luZm8g
 KiBib290LT5CeXRlc1BlclNlYywgU0VFS19TRVQpKSA9PSAtMQorIAkJCQkg
 ICAgfHwgbiAhPSBib290LT5GU0luZm8gKiBib290LT5CeXRlc1BlclNlYwor
 IAkJCQkgICAgfHwgKG4gPSB3cml0ZShkb3NmcywgZnNpbmZvLCBzaXplb2Yg
 ZnNpbmZvKSkgPT0gLTEKKwkJCQkgICAgfHwgbiAhPSBzaXplb2YgZnNpbmZv
 KSB7CiAJCQkJCXBlcnJvcigiVW5hYmxlIHRvIHdyaXRlIEZTSW5mbyIpOwog
 CQkJCQlyZXR1cm4gRlNGQVRBTDsKIAkJCQl9CkBAIC0xNTMsOSArMTUzLDEw
 IEBACiAJCQkJICAgICAgICsgKGZzaW5mb1sweDFlZl0gPDwgMjQpOwogCQl9
 CiAKLQkJaWYgKGxzZWVrKGRvc2ZzLCBib290LT5CYWNrdXAgKiBib290LT5C
 eXRlc1BlclNlYywgU0VFS19TRVQpCi0JCSAgICAhPSBib290LT5CYWNrdXAg
 KiBib290LT5CeXRlc1BlclNlYwotCQkgICAgfHwgcmVhZChkb3NmcywgYmFj
 a3VwLCBzaXplb2YgYmFja3VwKSAhPSBzaXplb2YgIGJhY2t1cCkgeworIAkJ
 aWYgKChuID0gbHNlZWsoZG9zZnMsIGJvb3QtPkJhY2t1cCAqIGJvb3QtPkJ5
 dGVzUGVyU2VjLCBTRUVLX1NFVCkpID09IC0xCisgCQkgICAgfHwgbiAhPSBi
 b290LT5CYWNrdXAgKiBib290LT5CeXRlc1BlclNlYworIAkJICAgIHx8IChu
 ID0gcmVhZChkb3NmcywgYmFja3VwLCBzaXplb2YgYmFja3VwKSkgPT0gLTEK
 KyAJCSAgICB8fCBuICE9IHNpemVvZiBiYWNrdXApIHsKIAkJCXBlcnJvcigi
 Y291bGQgbm90IHJlYWQgYmFja3VwIGJvb3RibG9jayIpOwogCQkJcmV0dXJu
 IEZTRkFUQUw7CiAJCX0KQEAgLTIzNSwxMCArMjM2LDEyIEBACiAJc3RydWN0
 IGJvb3RibG9jayAqYm9vdDsKIHsKIAl1X2NoYXIgZnNpbmZvWzIgKiBET1NC
 T09UQkxPQ0tTSVpFXTsKLQotCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+RlNJ
 bmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQotCSAgICAhPSBi
 b290LT5GU0luZm8gKiBib290LT5CeXRlc1BlclNlYwotCSAgICB8fCByZWFk
 KGRvc2ZzLCBmc2luZm8sIHNpemVvZiBmc2luZm8pICE9IHNpemVvZiBmc2lu
 Zm8pIHsKKyAJaW50IG47CisgIAorIAlpZiAoKG4gPSBsc2Vlayhkb3Nmcywg
 Ym9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMsIFNFRUtfU0VUKSkg
 PT0gLTEKKyAJICAgIHx8IG4gIT0gYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0
 ZXNQZXJTZWMKKyAJICAgIHx8IChuID0gcmVhZChkb3NmcywgZnNpbmZvLCBz
 aXplb2YgZnNpbmZvKSkgPT0gLTEKKyAJICAgIHx8IG4gIT0gc2l6ZW9mIGZz
 aW5mbykgewogCQlwZXJyb3IoImNvdWxkIG5vdCByZWFkIGZzaW5mbyBibG9j
 ayIpOwogCQlyZXR1cm4gRlNGQVRBTDsKIAl9CkBAIC0yNTAsMTAgKzI1Mywx
 MCBAQAogCWZzaW5mb1sweDFlZF0gPSAodV9jaGFyKShib290LT5GU05leHQg
 Pj4gOCk7CiAJZnNpbmZvWzB4MWVlXSA9ICh1X2NoYXIpKGJvb3QtPkZTTmV4
 dCA+PiAxNik7CiAJZnNpbmZvWzB4MWVmXSA9ICh1X2NoYXIpKGJvb3QtPkZT
 TmV4dCA+PiAyNCk7Ci0JaWYgKGxzZWVrKGRvc2ZzLCBib290LT5GU0luZm8g
 KiBib290LT5CeXRlc1BlclNlYywgU0VFS19TRVQpCi0JICAgICE9IGJvb3Qt
 PkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjCi0JICAgIHx8IHdyaXRlKGRv
 c2ZzLCBmc2luZm8sIHNpemVvZiBmc2luZm8pCi0JICAgICE9IHNpemVvZiBm
 c2luZm8pIHsKKyAJaWYgKChuID0gbHNlZWsoZG9zZnMsIGJvb3QtPkZTSW5m
 byAqIGJvb3QtPkJ5dGVzUGVyU2VjLCBTRUVLX1NFVCkpID09IC0xCisJICAg
 IHx8IG4gIT0gYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMKKyAJ
 ICAgIHx8IChuID0gd3JpdGUoZG9zZnMsIGZzaW5mbywgc2l6ZW9mIGZzaW5m
 bykpID09IC0xCisgCSAgICB8fCBuICE9IHNpemVvZiBmc2luZm8pIHsKIAkJ
 cGVycm9yKCJVbmFibGUgdG8gd3JpdGUgRlNJbmZvIik7CiAJCXJldHVybiBG
 U0ZBVEFMOwogCX0KZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvZXh0Lmgg
 ZnNja19tc2Rvc2ZzL2V4dC5oCi0tLSBmc2NrX21zZG9zZnMub3JpZy9leHQu
 aAkyMDEwLTAxLTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNj
 a19tc2Rvc2ZzL2V4dC5oCTIwMTAtMDEtMDYgMTE6MjY6MzMuMDAwMDAwMDAw
 ICswMDAwCkBAIC04Miw3ICs4Miw3IEBACiAjZGVmaW5lIEZTRklYRkFUCTY0
 CQkvKiBGaXggZmlsZSBzeXN0ZW0gRkFUICovCiAKIC8qCi0gKiByZWFkIGEg
 Ym9vdCBibG9jayBpbiBhIG1hY2hpbmUgaW5kZXBlbmRlbmQgZmFzaGlvbiBh
 bmQgdHJhbnNsYXRlCisgKiByZWFkIGEgYm9vdCBibG9jayBpbiBhIG1hY2hp
 bmUgaW5kZXBlbmRlbnQgZmFzaGlvbiBhbmQgdHJhbnNsYXRlCiAgKiBpdCBp
 bnRvIG91ciBzdHJ1Y3QgYm9vdGJsb2NrLgogICovCiBpbnQgcmVhZGJvb3Qo
 aW50LCBzdHJ1Y3QgYm9vdGJsb2NrICopOwpkaWZmIC1ydSBmc2NrX21zZG9z
 ZnMub3JpZy9mYXQuYyBmc2NrX21zZG9zZnMvZmF0LmMKLS0tIGZzY2tfbXNk
 b3Nmcy5vcmlnL2ZhdC5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAw
 ICswMDAwCisrKyBmc2NrX21zZG9zZnMvZmF0LmMJMjAxMC0wMS0wNiAxMToz
 MDoyMy4wMDAwMDAwMDAgKzAwMDAKQEAgLTU0Nyw3ICs1NDcsOCBAQAogCW9m
 Zl90IG9mZjsKIAlpbnQgcmV0ID0gRlNPSzsKIAotCWJ1ZmZlciA9IG1hbGxv
 YyhmYXRzeiA9IGJvb3QtPkZBVHNlY3MgKiBib290LT5CeXRlc1BlclNlYyk7
 CisJZmF0c3ogPSBib290LT5GQVRzZWNzICogYm9vdC0+Qnl0ZXNQZXJTZWM7
 CisJYnVmZmVyID0gY2FsbG9jKGJvb3QtPkZBVHNlY3MsIGJvb3QtPkJ5dGVz
 UGVyU2VjKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKIAkJcGVycm9yKCJO
 byBzcGFjZSBmb3IgRkFUIik7CiAJCXJldHVybiBGU0ZBVEFMOwo=
 
 --0-437212032-1262804603=:89207--

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: FreeBSD-gnats-submit@FreeBSD.org
Cc: Bruce Evans <brde@optusnet.com.au>
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Wed, 6 Jan 2010 13:31:35 -0800 (PST)

 --0-365583171-1262813495=:15260
 Content-Type: text/plain; charset=us-ascii
 
 As Bruce Evans has kindly noted, the OpenBSD changes are plagued with
 style errors so we should use the NetBSD changes instead.
 
 This patch is bigger but cleans real bugs.
 
 In general:
 - fix sign-compare issues
 - Move to 2 clause license, approved by Wolfgang Solfrank
 
 In boot.c:
 - Change mismatch of bytes 11 to 90 to be a warning, not an error
 - print out the values of the bytes that do not match.
 - Add comment explaining that there is no documented rationale for the
 check.
 - removes unused ctype.h header
 
 in dir.c:
 - use bounded string op
 - the root directory of non fat32 filesystems is stored in a special area.
 a couple of corner cases can cause it to fail to write out that area
 after it performs repairs.
 
 in fat.c:
 - don't leak memory on allocation failure.
 - Do not crash when boot->FSNext contains garbage (i.e. -1).
 - don't use uint32_t when you mean size_t.
 
 
 
       
 --0-365583171-1262813495=:15260
 Content-Type: application/octet-stream; name=patch-fsck_msdosfs
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="patch-fsck_msdosfs"
 
 ZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tfbXNkb3Nm
 cy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwkyMDEwLTAx
 LTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2Zz
 L2Jvb3QuYwkyMDEwLTAxLTA2IDE1OjE5OjMzLjAwMDAwMDAwMCArMDAwMApA
 QCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
 aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
 CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
 dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
 aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
 aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
 YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds
 ZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg
 ZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5n
 IFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
 dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
 ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz
 cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ
 UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElT
 JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMs
 IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
 QVJSQU5USUVTCkBAIC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRs
 aWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5o
 PgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAK
 QEAgLTU2LDggKzQ4LDkgQEAKIAl1X2NoYXIgZnNpbmZvWzIgKiBET1NCT09U
 QkxPQ0tTSVpFXTsKIAl1X2NoYXIgYmFja3VwW0RPU0JPT1RCTE9DS1NJWkVd
 OwogCWludCByZXQgPSBGU09LOworCWludCBpOwogCQotCWlmIChyZWFkKGRv
 c2ZzLCBibG9jaywgc2l6ZW9mIGJsb2NrKSA8IHNpemVvZiBibG9jaykgewor
 CWlmIChyZWFkKChzaXplX3QpZG9zZnMsIGJsb2NrLCBzaXplb2YgYmxvY2sp
 ICE9IHNpemVvZiBibG9jaykgewogCQlwZXJyb3IoImNvdWxkIG5vdCByZWFk
 IGJvb3QgYmxvY2siKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpAQCAtMTYx
 LDEyICsxNTQsMjIgQEAKIAkJfQogCQliYWNrdXBbNjVdID0gYmxvY2tbNjVd
 OwkJCQkvKiBYWFggKi8KIAkJaWYgKG1lbWNtcChibG9jayArIDExLCBiYWNr
 dXAgKyAxMSwgNzkpKSB7Ci0JCQkvKiBDb3JyZWN0PwkJCQkJWFhYICovCi0J
 CQlwZmF0YWwoImJhY2t1cCBkb2Vzbid0IGNvbXBhcmUgdG8gcHJpbWFyeSBi
 b290YmxvY2siKTsKLQkJCWlmIChhbHdheXNubykKLQkJCQlwZmF0YWwoIlxu
 Iik7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIEZTRkFUQUw7CisJCQkvKgorCQkJ
 ICogWFhYIFdlIHJlcXVpcmUgYSByZWZlcmVuY2UgdGhhdCBleHBsYWlucwor
 CQkJICogdGhhdCB0aGVzZSBieXRlcyBuZWVkIHRvIG1hdGNoLCBvciBzaG91
 bGQKKwkJCSAqIGRyb3AgdGhlIGNoZWNrLiAgZ2R0QE5ldEJTRCBoYXMgb2Jz
 ZXJ2ZWQKKwkJCSAqIGZpbGVzeXN0ZW1zIHRoYXQgd29yayBmaW5lIHVuZGVy
 IFdpbmRvd3MgWFAKKwkJCSAqIGFuZCBOZXRCU0QgdGhhdCBkbyBub3QgbWF0
 Y2gsIHNvIHRoZQorCQkJICogcmVxdWlyZW1lbnQgaXMgc3VzcGVjdC4gIEZv
 ciBub3csIGp1c3QKKwkJCSAqIHByaW50IG91dCB1c2VmdWwgaW5mb3JtYXRp
 b24gYW5kIGNvbnRpbnVlLgorCQkJICovCisJCQlwZmF0YWwoImJhY2t1cCAo
 YmxvY2sgJWQpIG1pc21hdGNoIHdpdGggcHJpbWFyeSBib290YmxvY2s6XG4i
 LAorCQkJICAgICAgICBib290LT5CYWNrdXApOworCQkJZm9yIChpID0gMTE7
 IGkgPCAxMSArIDkwOyBpKyspIHsKKwkJCQlpZiAoYmxvY2tbaV0gIT0gYmFj
 a3VwW2ldKQorCQkJCQlwZmF0YWwoIlx0aT0lZFx0cHJpbWFyeSAweCUwMnhc
 dGJhY2t1cCAweCUwMnhcbiIsCisJCQkJCSAgICAgICBpLCBibG9ja1tpXSwg
 YmFja3VwW2ldKTsKKwkJCX0KIAkJfQogCQkvKiBDaGVjayBiYWNrdXAgRlNJ
 bmZvPwkJCQkJWFhYICovCiAJfQpkaWZmIC1ydSBmc2NrX21zZG9zZnMub3Jp
 Zy9jaGVjay5jIGZzY2tfbXNkb3Nmcy9jaGVjay5jCi0tLSBmc2NrX21zZG9z
 ZnMub3JpZy9jaGVjay5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAw
 ICswMDAwCisrKyBmc2NrX21zZG9zZnMvY2hlY2suYwkyMDEwLTAxLTA2IDE2
 OjEwOjM5LjAwMDAwMDAwMCArMDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAq
 IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
 ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMg
 bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
 ZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
 YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
 My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1
 cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3Bs
 YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHBy
 b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBI
 dXNlbWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVp
 dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
 IG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu
 ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
 b2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
 IHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
 RCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
 CiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
 SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC00MCw3ICsz
 Myw2IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJp
 bmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+
 CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAg
 LTU0LDcgKzQ2LDggQEAKIAlpbnQgZG9zZnM7CiAJc3RydWN0IGJvb3RibG9j
 ayBib290OwogCXN0cnVjdCBmYXRFbnRyeSAqZmF0ID0gTlVMTDsKLQlpbnQg
 aSwgZmluaXNoX2Rvc2RpcnNlY3Rpb249MDsKKwlpbnQgZmluaXNoX2Rvc2Rp
 cnNlY3Rpb249MDsKKwl1X2ludCBpOwogCWludCBtb2QgPSAwOwogCWludCBy
 ZXQgPSA4OwogCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Rpci5jIGZz
 Y2tfbXNkb3Nmcy9kaXIuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZGlyLmMJ
 MjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tf
 bXNkb3Nmcy9kaXIuYwkyMDEwLTAxLTA2IDE2OjE3OjE3LjAwMDAwMDAwMCAr
 MDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9u
 cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
 eXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
 IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5n
 IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz
 IHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh
 Y2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m
 dHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdv
 bGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
 cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
 cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0
 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgog
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBg
 YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJB
 TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
 TElFRCBXQVJSQU5USUVTCkBAIC00NCw3ICszNyw2IEBACiAjaW5jbHVkZSA8
 c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5
 cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o
 PgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMjI2LDE2ICsyMTgsMjkgQEAK
 IAlpbnQgYjEsIGIyOwogCWNsX3QgY2w7CiAJaW50IHJldCA9IEZTT0s7CisJ
 c2l6ZV90IGxlbjsKIAogCWIxID0gYm9vdC0+Um9vdERpckVudHMgKiAzMjsK
 IAliMiA9IGJvb3QtPlNlY1BlckNsdXN0ICogYm9vdC0+Qnl0ZXNQZXJTZWM7
 CiAKLQlpZiAoIShidWZmZXIgPSBtYWxsb2MoYjEgPiBiMiA/IGIxIDogYjIp
 KQotCSAgICB8fCAhKGRlbGJ1ZiA9IG1hbGxvYyhiMikpCi0JICAgIHx8ICEo
 cm9vdERpciA9IG5ld0Rvc0RpckVudHJ5KCkpKSB7Ci0JCXBlcnJvcigiTm8g
 c3BhY2UgZm9yIGRpcmVjdG9yeSIpOworCWlmICgoYnVmZmVyID0gbWFsbG9j
 KGxlbiA9IGIxID4gYjIgPyBiMSA6IGIyKSkgPT0gTlVMTCkgeworCQlwZXJy
 b3IoIk5vIHNwYWNlIGZvciBkaXJlY3RvcnkgYnVmZmVyIik7CiAJCXJldHVy
 biBGU0ZBVEFMOwogCX0KKworCWlmICgoZGVsYnVmID0gbWFsbG9jKGxlbiA9
 IGIyKSkgPT0gTlVMTCkgeworCQlmcmVlKGJ1ZmZlcik7CisJCXBlcnJvcigi
 Tm8gc3BhY2UgZm9yIGRpcmVjdG9yeSBkZWxidWYiKTsKKwkJcmV0dXJuIEZT
 RkFUQUw7CisJfQorCisJaWYgKChyb290RGlyID0gbmV3RG9zRGlyRW50cnko
 KSkgPT0gTlVMTCkgeworCQlmcmVlKGJ1ZmZlcik7CisJCWZyZWUoZGVsYnVm
 KTsKKwkJcGVycm9yKCJObyBzcGFjZSBmb3IgZGlyZWN0b3J5IGVudHJ5Iik7
 CisJCXJldHVybiBGU0ZBVEFMOworCX0KKwogCW1lbXNldChyb290RGlyLCAw
 LCBzaXplb2YgKnJvb3REaXIpOwogCWlmIChib290LT5mbGFncyAmIEZBVDMy
 KSB7CiAJCWlmIChib290LT5Sb290Q2wgPCBDTFVTVF9GSVJTVCB8fCBib290
 LT5Sb290Q2wgPj0gYm9vdC0+TnVtQ2x1c3RlcnMpIHsKQEAgLTM2Nyw3ICsz
 NzIsOCBAQAogCQkJCXJldHVybiBGU0ZBVEFMOwogCQkJc3RhcnQgPSBidWZm
 ZXI7CiAJCX0KLQkJaWYgKGVuZGNsID09IGN1cmNsKQorCQkvKiBzdGFydGNs
 IGlzIDwgQ0xVU1RfRklSU1QgZm9yICFmYXQzMiByb290ICovCisJCWlmICgo
 ZW5kY2wgPT0gY3VyY2wpIHx8IChzdGFydGNsIDwgQ0xVU1RfRklSU1QpKQog
 CQkJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSAzMikKIAkJCQkqc3Rh
 cnQgPSBTTE9UX0RFTEVURUQ7CiAJCXJldHVybiBGU0RJUk1PRDsKQEAgLTM4
 NSw3ICszOTEsNyBAQAogCS8qCiAJICogQ2hlY2sgc2l6ZSBvbiBvcmRpbmFy
 eSBmaWxlcwogCSAqLwotCWludDMyX3QgcGh5c2ljYWxTaXplOworCXVfaW50
 MzJfdCBwaHlzaWNhbFNpemU7CiAKIAlpZiAoZGlyLT5oZWFkID09IENMVVNU
 X0ZSRUUpCiAJCXBoeXNpY2FsU2l6ZSA9IDA7CkBAIC02NDQsNyArNjUwLDgg
 QEAKIAkJCQlkaXJlbnQuaGVhZCB8PSAocFsyMF0gPDwgMTYpIHwgKHBbMjFd
 IDw8IDI0KTsKIAkJCWRpcmVudC5zaXplID0gcFsyOF0gfCAocFsyOV0gPDwg
 OCkgfCAocFszMF0gPDwgMTYpIHwgKHBbMzFdIDw8IDI0KTsKIAkJCWlmICh2
 YWxsZm4pIHsKLQkJCQlzdHJjcHkoZGlyZW50LmxuYW1lLCBsb25nTmFtZSk7
 CisJCQkJc3RybGNweShkaXJlbnQubG5hbWUsIGxvbmdOYW1lLAorCQkJCSAg
 ICBzaXplb2YoZGlyZW50LmxuYW1lKSk7CiAJCQkJbG9uZ05hbWVbMF0gPSAn
 XDAnOwogCQkJCXNob3J0U3VtID0gLTE7CiAJCQl9CkBAIC04MzIsNiArODM5
 LDEwIEBACiAJCQl9CiAJCQlib290LT5OdW1GaWxlcysrOwogCQl9CisKKwkJ
 aWYgKCEoYm9vdC0+ZmxhZ3MgJiBGQVQzMikgJiYgIWRpci0+cGFyZW50KQor
 CQkJYnJlYWs7CisKIAkJaWYgKG1vZCAmIFRISVNNT0QpIHsKIAkJCWxhc3Qg
 Kj0gMzI7CiAJCQlpZiAobHNlZWsoZiwgb2ZmLCBTRUVLX1NFVCkgIT0gb2Zm
 CkBAIC04NDcsNiArODU4LDE5IEBACiAJCQkJaW52bGZuID8gaW52bGZuIDog
 dmFsbGZuLCBwLAogCQkJCWludmxmbiA/IGludmNsIDogdmFsY2wsIC0xLCAw
 LAogCQkJCWZ1bGxwYXRoKGRpciksIDEpOworCisJLyogVGhlIHJvb3QgZGly
 ZWN0b3J5IG9mIG5vbiBmYXQzMiBmaWxlc3lzdGVtcyBpcyBpbiBhIHNwZWNp
 YWwKKwkgKiBhcmVhIGFuZCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGFib3Zl
 IHdpdGhvdXQgYmVpbmcgd3JpdHRlbiBvdXQuCisJICovCisJaWYgKChtb2Qg
 JiBGU0RJUk1PRCkgJiYgIShib290LT5mbGFncyAmIEZBVDMyKSAmJiAhZGly
 LT5wYXJlbnQpIHsKKwkJbGFzdCAqPSAzMjsKKwkJaWYgKGxzZWVrKGYsIG9m
 ZiwgU0VFS19TRVQpICE9IG9mZgorCQkgICAgfHwgd3JpdGUoZiwgYnVmZmVy
 LCBsYXN0KSAhPSBsYXN0KSB7CisJCQlwZXJyb3IoIlVuYWJsZSB0byB3cml0
 ZSBkaXJlY3RvcnkiKTsKKwkJCXJldHVybiBGU0ZBVEFMOworCQl9CisJCW1v
 ZCAmPSB+VEhJU01PRDsKKwl9CiAJcmV0dXJuIG1vZCAmIH5USElTTU9EOwog
 fQogCkBAIC05MzYsNyArOTYwLDcgQEAKIAkJbGZvZmYgPSBsZmNsICogYm9v
 dC0+Q2x1c3RlclNpemUKIAkJICAgICsgYm9vdC0+Q2x1c3Rlck9mZnNldCAq
 IGJvb3QtPkJ5dGVzUGVyU2VjOwogCQlpZiAobHNlZWsoZG9zZnMsIGxmb2Zm
 LCBTRUVLX1NFVCkgIT0gbGZvZmYKLQkJICAgIHx8IHJlYWQoZG9zZnMsIGxm
 YnVmLCBib290LT5DbHVzdGVyU2l6ZSkgIT0gYm9vdC0+Q2x1c3RlclNpemUp
 IHsKKwkJICAgIHx8IChzaXplX3QpcmVhZChkb3NmcywgbGZidWYsIGJvb3Qt
 PkNsdXN0ZXJTaXplKSAhPSBib290LT5DbHVzdGVyU2l6ZSkgewogCQkJcGVy
 cm9yKCJjb3VsZCBub3QgcmVhZCBMT1NULkRJUiIpOwogCQkJcmV0dXJuIEZT
 RkFUQUw7CiAJCX0KQEAgLTk2Niw3ICs5OTAsNyBAQAogCXBbMzFdID0gKHVf
 Y2hhcikoZC5zaXplID4+IDI0KTsKIAlmYXRbaGVhZF0uZmxhZ3MgfD0gRkFU
 X1VTRUQ7CiAJaWYgKGxzZWVrKGRvc2ZzLCBsZm9mZiwgU0VFS19TRVQpICE9
 IGxmb2ZmCi0JICAgIHx8IHdyaXRlKGRvc2ZzLCBsZmJ1ZiwgYm9vdC0+Q2x1
 c3RlclNpemUpICE9IGJvb3QtPkNsdXN0ZXJTaXplKSB7CisJICAgIHx8IChz
 aXplX3Qpd3JpdGUoZG9zZnMsIGxmYnVmLCBib290LT5DbHVzdGVyU2l6ZSkg
 IT0gYm9vdC0+Q2x1c3RlclNpemUpIHsKIAkJcGVycm9yKCJjb3VsZCBub3Qg
 d3JpdGUgTE9TVC5ESVIiKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpkaWZm
 IC1ydSBmc2NrX21zZG9zZnMub3JpZy9kb3Nmcy5oIGZzY2tfbXNkb3Nmcy9k
 b3Nmcy5oCi0tLSBmc2NrX21zZG9zZnMub3JpZy9kb3Nmcy5oCTIwMTAtMDEt
 MDYgMTE6MDc6MjQuMDAwMDAwMDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMv
 ZG9zZnMuaAkyMDEwLTAxLTA2IDE1OjQ2OjQ1LjAwMDAwMDAwMCArMDAwMApA
 QCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
 aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
 CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
 dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
 aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
 aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
 YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds
 ZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg
 ZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5n
 IFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
 dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
 ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz
 cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ
 UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElT
 JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMs
 IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
 QVJSQU5USUVTCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2V4dC5oIGZz
 Y2tfbXNkb3Nmcy9leHQuaAotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZXh0LmgJ
 MjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tf
 bXNkb3Nmcy9leHQuaAkyMDEwLTAxLTA2IDE2OjE1OjM1LjAwMDAwMDAwMCAr
 MDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9u
 cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
 eXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
 IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5n
 IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz
 IHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh
 Y2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m
 dHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdv
 bGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
 cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
 cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0
 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgog
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBg
 YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJB
 TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
 TElFRCBXQVJSQU5USUVTCkBAIC04Miw3ICs3NSw3IEBACiAjZGVmaW5lIEZT
 RklYRkFUCTY0CQkvKiBGaXggZmlsZSBzeXN0ZW0gRkFUICovCiAKIC8qCi0g
 KiByZWFkIGEgYm9vdCBibG9jayBpbiBhIG1hY2hpbmUgaW5kZXBlbmRlbmQg
 ZmFzaGlvbiBhbmQgdHJhbnNsYXRlCisgKiByZWFkIGEgYm9vdCBibG9jayBp
 biBhIG1hY2hpbmUgaW5kZXBlbmRlbnQgZmFzaGlvbiBhbmQgdHJhbnNsYXRl
 CiAgKiBpdCBpbnRvIG91ciBzdHJ1Y3QgYm9vdGJsb2NrLgogICovCiBpbnQg
 cmVhZGJvb3QoaW50LCBzdHJ1Y3QgYm9vdGJsb2NrICopOwpAQCAtOTYsMTMg
 Kzg5LDEzIEBACiAgKiBSZWFkIG9uZSBvZiB0aGUgRkFUIGNvcGllcyBhbmQg
 cmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbmV3CiAgKiBhbGxvY2F0ZWQgYXJy
 YXkgaG9sZGluZyBvdXIgZGVzY3JpcHRpb24gb2YgaXQuCiAgKi8KLWludCBy
 ZWFkZmF0KGludCwgc3RydWN0IGJvb3RibG9jayAqLCBpbnQsIHN0cnVjdCBm
 YXRFbnRyeSAqKik7CitpbnQgcmVhZGZhdChpbnQsIHN0cnVjdCBib290Ymxv
 Y2sgKiwgdV9pbnQsIHN0cnVjdCBmYXRFbnRyeSAqKik7CiAKIC8qCiAgKiBD
 aGVjayB0d28gRkFUIGNvcGllcyBmb3IgY29uc2lzdGVuY3kgYW5kIG1lcmdl
 IGNoYW5nZXMgaW50byB0aGUKICAqIGZpcnN0IGlmIG5lY2Nlc3NhcnkuCiAg
 Ki8KLWludCBjb21wYXJlZmF0KHN0cnVjdCBib290YmxvY2sgKiwgc3RydWN0
 IGZhdEVudHJ5ICosIHN0cnVjdCBmYXRFbnRyeSAqLCBpbnQpOworaW50IGNv
 bXBhcmVmYXQoc3RydWN0IGJvb3RibG9jayAqLCBzdHJ1Y3QgZmF0RW50cnkg
 Kiwgc3RydWN0IGZhdEVudHJ5ICosIHVfaW50KTsKIAogLyoKICAqIENoZWNr
 IGEgRkFUCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2ZhdC5jIGZzY2tf
 bXNkb3Nmcy9mYXQuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZmF0LmMJMjAx
 MC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tfbXNk
 b3Nmcy9mYXQuYwkyMDEwLTAxLTA2IDE2OjI1OjIzLjAwMDAwMDAwMCArMDAw
 MApAQCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
 biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
 Z2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
 ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1
 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
 aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1h
 dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNv
 ZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu
 b3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh
 cmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZn
 YW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
 VW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
 LSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
 dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91
 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICog
 VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFT
 IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJ
 RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
 RCBXQVJSQU5USUVTCkBAIC00NywxMCArNDAsMTAgQEAKICNpbmNsdWRlICJl
 eHQuaCIKICNpbmNsdWRlICJmc3V0aWwuaCIKIAotc3RhdGljIGludCBjaGVj
 a2NsbnVtKHN0cnVjdCBib290YmxvY2sgKiwgaW50LCBjbF90LCBjbF90ICop
 Owotc3RhdGljIGludCBjbHVzdGRpZmZlcihjbF90LCBjbF90ICosIGNsX3Qg
 KiwgaW50KTsKK3N0YXRpYyBpbnQgY2hlY2tjbG51bShzdHJ1Y3QgYm9vdGJs
 b2NrICosIHVfaW50LCBjbF90LCBjbF90ICopOworc3RhdGljIGludCBjbHVz
 dGRpZmZlcihjbF90LCBjbF90ICosIGNsX3QgKiwgdV9pbnQpOwogc3RhdGlj
 IGludCB0cnljbGVhcihzdHJ1Y3QgYm9vdGJsb2NrICosIHN0cnVjdCBmYXRF
 bnRyeSAqLCBjbF90LCBjbF90ICopOwotc3RhdGljIGludCBfcmVhZGZhdChp
 bnQsIHN0cnVjdCBib290YmxvY2sgKiwgaW50LCB1X2NoYXIgKiopOworc3Rh
 dGljIGludCBfcmVhZGZhdChpbnQsIHN0cnVjdCBib290YmxvY2sgKiwgdV9p
 bnQsIHVfY2hhciAqKik7CiAKIC8qLQogICogVGhlIGZpcnN0IDIgRkFUIGVu
 dHJpZXMgY29udGFpbiBwc2V1ZG8tY2x1c3RlciBudW1iZXJzIHdpdGggdGhl
 IGZvbGxvd2luZwpAQCAtMTM1LDcgKzEyOCw3IEBACiAgKiBDaGVjayBhIGNs
 dXN0ZXIgbnVtYmVyIGZvciB2YWxpZCB2YWx1ZQogICovCiBzdGF0aWMgaW50
 Ci1jaGVja2NsbnVtKHN0cnVjdCBib290YmxvY2sgKmJvb3QsIGludCBmYXQs
 IGNsX3QgY2wsIGNsX3QgKm5leHQpCitjaGVja2NsbnVtKHN0cnVjdCBib290
 YmxvY2sgKmJvb3QsIHVfaW50IGZhdCwgY2xfdCBjbCwgY2xfdCAqbmV4dCkK
 IHsKIAlpZiAoKm5leHQgPj0gKENMVVNUX1JTUlZEJmJvb3QtPkNsdXN0TWFz
 aykpCiAJCSpuZXh0IHw9IH5ib290LT5DbHVzdE1hc2s7CkBAIC0xNjYsNyAr
 MTU5LDcgQEAKICAqIFJlYWQgYSBGQVQgZnJvbSBkaXNrLiBSZXR1cm5zIDEg
 aWYgc3VjY2Vzc2Z1bCwgMCBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbnQK
 LV9yZWFkZmF0KGludCBmcywgc3RydWN0IGJvb3RibG9jayAqYm9vdCwgaW50
 IG5vLCB1X2NoYXIgKipidWZmZXIpCitfcmVhZGZhdChpbnQgZnMsIHN0cnVj
 dCBib290YmxvY2sgKmJvb3QsIHVfaW50IG5vLCB1X2NoYXIgKipidWZmZXIp
 CiB7CiAJb2ZmX3Qgb2ZmOwogCkBAIC0xODQsNyArMTc3LDcgQEAKIAkJZ290
 byBlcnI7CiAJfQogCi0JaWYgKHJlYWQoZnMsICpidWZmZXIsIGJvb3QtPkZB
 VHNlY3MgKiBib290LT5CeXRlc1BlclNlYykKKwlpZiAoKHNpemVfdClyZWFk
 KGZzLCAqYnVmZmVyLCBib290LT5GQVRzZWNzICogYm9vdC0+Qnl0ZXNQZXJT
 ZWMpCiAJICAgICE9IGJvb3QtPkZBVHNlY3MgKiBib290LT5CeXRlc1BlclNl
 YykgewogCQlwZXJyb3IoIlVuYWJsZSB0byByZWFkIEZBVCIpOwogCQlnb3Rv
 IGVycjsKQEAgLTIwMSwyNCArMTk0LDI2IEBACiAgKiBSZWFkIGEgRkFUIGFu
 ZCBkZWNvZGUgaXQgaW50byBpbnRlcm5hbCBmb3JtYXQKICAqLwogaW50Ci1y
 ZWFkZmF0KGludCBmcywgc3RydWN0IGJvb3RibG9jayAqYm9vdCwgaW50IG5v
 LCBzdHJ1Y3QgZmF0RW50cnkgKipmcCkKK3JlYWRmYXQoaW50IGZzLCBzdHJ1
 Y3QgYm9vdGJsb2NrICpib290LCB1X2ludCBubywgc3RydWN0IGZhdEVudHJ5
 ICoqZnApCiB7CiAJc3RydWN0IGZhdEVudHJ5ICpmYXQ7CiAJdV9jaGFyICpi
 dWZmZXIsICpwOwogCWNsX3QgY2w7CiAJaW50IHJldCA9IEZTT0s7CisJc2l6
 ZV90IGxlbjsKIAogCWJvb3QtPk51bUZyZWUgPSBib290LT5OdW1CYWQgPSAw
 OwogCiAJaWYgKCFfcmVhZGZhdChmcywgYm9vdCwgbm8sICZidWZmZXIpKQog
 CQlyZXR1cm4gRlNGQVRBTDsKIAkJCi0JZmF0ID0gY2FsbG9jKGJvb3QtPk51
 bUNsdXN0ZXJzLCBzaXplb2Yoc3RydWN0IGZhdEVudHJ5KSk7CisJZmF0ID0g
 bWFsbG9jKGxlbiA9IGJvb3QtPk51bUNsdXN0ZXJzICogc2l6ZW9mKHN0cnVj
 dCBmYXRFbnRyeSkpOwogCWlmIChmYXQgPT0gTlVMTCkgewogCQlwZXJyb3Io
 Ik5vIHNwYWNlIGZvciBGQVQiKTsKIAkJZnJlZShidWZmZXIpOwogCQlyZXR1
 cm4gRlNGQVRBTDsKIAl9CisJKHZvaWQpbWVtc2V0KGZhdCwgMCwgbGVuKTsK
 IAogCWlmIChidWZmZXJbMF0gIT0gYm9vdC0+TWVkaWEKIAkgICAgfHwgYnVm
 ZmVyWzFdICE9IDB4ZmYgfHwgYnVmZmVyWzJdICE9IDB4ZmYKQEAgLTMzMSw3
 ICszMjYsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1jbHVzdGRpZmZlcihjbF90
 IGNsLCBjbF90ICpjcDEsIGNsX3QgKmNwMiwgaW50IGZhdG51bSkKK2NsdXN0
 ZGlmZmVyKGNsX3QgY2wsIGNsX3QgKmNwMSwgY2xfdCAqY3AyLCB1X2ludCBm
 YXRudW0pCiB7CiAJaWYgKCpjcDEgPT0gQ0xVU1RfRlJFRSB8fCAqY3AxID49
 IENMVVNUX1JTUlZEKSB7CiAJCWlmICgqY3AyID09IENMVVNUX0ZSRUUgfHwg
 KmNwMiA+PSBDTFVTVF9SU1JWRCkgewpAQCAtMzQ2LDEzICszNDEsMTMgQEAK
 IAkJCQl9CiAJCQkJcmV0dXJuIEZTRkFUQUw7CiAJCQl9Ci0JCQlwd2Fybigi
 Q2x1c3RlciAldSBpcyBtYXJrZWQgJXMgaW4gRkFUIDAsICVzIGluIEZBVCAl
 ZFxuIiwKKwkJCXB3YXJuKCJDbHVzdGVyICV1IGlzIG1hcmtlZCAlcyBpbiBG
 QVQgMCwgJXMgaW4gRkFUICV1XG4iLAogCQkJICAgICAgY2wsIHJzcnZkY2x0
 eXBlKCpjcDEpLCByc3J2ZGNsdHlwZSgqY3AyKSwgZmF0bnVtKTsKIAkJCWlm
 IChhc2soMCwgIlVzZSBGQVQgMCdzIGVudHJ5IikpIHsKIAkJCQkqY3AyID0g
 KmNwMTsKIAkJCQlyZXR1cm4gRlNGQVRNT0Q7CiAJCQl9Ci0JCQlpZiAoYXNr
 KDAsICJVc2UgRkFUICVkJ3MgZW50cnkiLCBmYXRudW0pKSB7CisJCQlpZiAo
 YXNrKDAsICJVc2UgRkFUICV1J3MgZW50cnkiLCBmYXRudW0pKSB7CiAJCQkJ
 KmNwMSA9ICpjcDI7CiAJCQkJcmV0dXJuIEZTRkFUTU9EOwogCQkJfQpAQCAt
 MzYwLDcgKzM1NSw3IEBACiAJCX0KIAkJcHdhcm4oIkNsdXN0ZXIgJXUgaXMg
 bWFya2VkICVzIGluIEZBVCAwLCBidXQgY29udGludWVzIHdpdGggY2x1c3Rl
 ciAldSBpbiBGQVQgJWRcbiIsCiAJCSAgICAgIGNsLCByc3J2ZGNsdHlwZSgq
 Y3AxKSwgKmNwMiwgZmF0bnVtKTsKLQkJaWYgKGFzaygwLCAiVXNlIGNvbnRp
 bnVhdGlvbiBmcm9tIEZBVCAlZCIsIGZhdG51bSkpIHsKKwkJaWYgKGFzaygw
 LCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9tIEZBVCAldSIsIGZhdG51bSkpIHsK
 IAkJCSpjcDEgPSAqY3AyOwogCQkJcmV0dXJuIEZTRkFUTU9EOwogCQl9CkBA
 IC0zNzEsNyArMzY2LDcgQEAKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQogCWlm
 ICgqY3AyID09IENMVVNUX0ZSRUUgfHwgKmNwMiA+PSBDTFVTVF9SU1JWRCkg
 ewotCQlwd2FybigiQ2x1c3RlciAldSBjb250aW51ZXMgd2l0aCBjbHVzdGVy
 ICV1IGluIEZBVCAwLCBidXQgaXMgbWFya2VkICVzIGluIEZBVCAlZFxuIiwK
 KwkJcHdhcm4oIkNsdXN0ZXIgJXUgY29udGludWVzIHdpdGggY2x1c3RlciAl
 dSBpbiBGQVQgMCwgYnV0IGlzIG1hcmtlZCAlcyBpbiBGQVQgJXVcbiIsCiAJ
 CSAgICAgIGNsLCAqY3AxLCByc3J2ZGNsdHlwZSgqY3AyKSwgZmF0bnVtKTsK
 IAkJaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9tIEZBVCAwIikp
 IHsKIAkJCSpjcDIgPSAqY3AxOwpAQCAtMzgzLDEzICszNzgsMTMgQEAKIAkJ
 fQogCQlyZXR1cm4gRlNFUlJPUjsKIAl9Ci0JcHdhcm4oIkNsdXN0ZXIgJXUg
 Y29udGludWVzIHdpdGggY2x1c3RlciAldSBpbiBGQVQgMCwgYnV0IHdpdGgg
 Y2x1c3RlciAldSBpbiBGQVQgJWRcbiIsCisJcHdhcm4oIkNsdXN0ZXIgJXUg
 Y29udGludWVzIHdpdGggY2x1c3RlciAldSBpbiBGQVQgMCwgYnV0IHdpdGgg
 Y2x1c3RlciAldSBpbiBGQVQgJXVcbiIsCiAJICAgICAgY2wsICpjcDEsICpj
 cDIsIGZhdG51bSk7CiAJaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBm
 cm9tIEZBVCAwIikpIHsKIAkJKmNwMiA9ICpjcDE7CiAJCXJldHVybiBGU0ZB
 VE1PRDsKIAl9Ci0JaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9t
 IEZBVCAlZCIsIGZhdG51bSkpIHsKKwlpZiAoYXNrKDAsICJVc2UgY29udGlu
 dWF0aW9uIGZyb20gRkFUICV1IiwgZmF0bnVtKSkgewogCQkqY3AxID0gKmNw
 MjsKIAkJcmV0dXJuIEZTRkFUTU9EOwogCX0KQEAgLTQwMSw4ICszOTYsOCBA
 QAogICogaW50byB0aGUgZmlyc3Qgb25lLgogICovCiBpbnQKLWNvbXBhcmVm
 YXQoc3RydWN0IGJvb3RibG9jayAqYm9vdCwgc3RydWN0IGZhdEVudHJ5ICpm
 aXJzdCwgCi0gICAgc3RydWN0IGZhdEVudHJ5ICpzZWNvbmQsIGludCBmYXRu
 dW0pCitjb21wYXJlZmF0KHN0cnVjdCBib290YmxvY2sgKmJvb3QsIHN0cnVj
 dCBmYXRFbnRyeSAqZmlyc3QsCisgICAgc3RydWN0IGZhdEVudHJ5ICpzZWNv
 bmQsIHVfaW50IGZhdG51bSkKIHsKIAljbF90IGNsOwogCWludCByZXQgPSBG
 U09LOwpAQCAtNTQyLDggKzUzNyw4IEBACiB7CiAJdV9jaGFyICpidWZmZXIs
 ICpwOwogCWNsX3QgY2w7Ci0JaW50IGk7Ci0JdV9pbnQzMl90IGZhdHN6Owor
 CXVfaW50IGk7CisJc2l6ZV90IGZhdHN6OwogCW9mZl90IG9mZjsKIAlpbnQg
 cmV0ID0gRlNPSzsKIApAQCAtNjMzLDcgKzYyOCw3IEBACiAJCW9mZiA9IGJv
 b3QtPlJlc1NlY3RvcnMgKyBpICogYm9vdC0+RkFUc2VjczsKIAkJb2ZmICo9
 IGJvb3QtPkJ5dGVzUGVyU2VjOwogCQlpZiAobHNlZWsoZnMsIG9mZiwgU0VF
 S19TRVQpICE9IG9mZgotCQkgICAgfHwgd3JpdGUoZnMsIGJ1ZmZlciwgZmF0
 c3opICE9IGZhdHN6KSB7CisJCSAgICB8fCAoc2l6ZV90KXdyaXRlKGZzLCBi
 dWZmZXIsIGZhdHN6KSAhPSBmYXRzeikgewogCQkJcGVycm9yKCJVbmFibGUg
 dG8gd3JpdGUgRkFUIik7CiAJCQlyZXQgPSBGU0ZBVEFMOyAvKiBSZXR1cm4g
 aW1tZWRpYXRlbHk/CQlYWFggKi8KIAkJfQpAQCAtNjgzLDkgKzY3OCwxMCBA
 QAogCQkJCXJldCA9IDE7CiAJCQl9CiAJCX0KLQkJaWYgKGJvb3QtPk51bUZy
 ZWUgJiYgZmF0W2Jvb3QtPkZTTmV4dF0ubmV4dCAhPSBDTFVTVF9GUkVFKSB7
 Ci0JCQlwd2FybigiTmV4dCBmcmVlIGNsdXN0ZXIgaW4gRlNJbmZvIGJsb2Nr
 ICgldSkgbm90IGZyZWVcbiIsCi0JCQkgICAgICBib290LT5GU05leHQpOwor
 CQlpZiAoYm9vdC0+RlNOZXh0ID49IGJvb3QtPk51bUNsdXN0ZXJzIHx8IChi
 b290LT5OdW1GcmVlICYmIGZhdFtib290LT5GU05leHRdLm5leHQgIT0gQ0xV
 U1RfRlJFRSkpIHsKKwkJCXB3YXJuKCJOZXh0IGZyZWUgY2x1c3RlciBpbiBG
 U0luZm8gYmxvY2sgKCV1KSAlc1xuIiwKKwkJCSAgICAgIGJvb3QtPkZTTmV4
 dCwKKwkJCSAgICAgIChib290LT5GU05leHQgPj0gYm9vdC0+TnVtQ2x1c3Rl
 cnMpID8gImludmFsaWQiIDogIm5vdCBmcmVlIik7CiAJCQlpZiAoYXNrKDEs
 ICJGaXgiKSkKIAkJCQlmb3IgKGhlYWQgPSBDTFVTVF9GSVJTVDsgaGVhZCA8
 IGJvb3QtPk51bUNsdXN0ZXJzOyBoZWFkKyspCiAJCQkJCWlmIChmYXRbaGVh
 ZF0ubmV4dCA9PSBDTFVTVF9GUkVFKSB7CmRpZmYgLXJ1IGZzY2tfbXNkb3Nm
 cy5vcmlnL2ZzY2tfbXNkb3Nmcy44IGZzY2tfbXNkb3Nmcy9mc2NrX21zZG9z
 ZnMuOAotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZnNja19tc2Rvc2ZzLjgJMjAx
 MC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tfbXNk
 b3Nmcy9mc2NrX21zZG9zZnMuOAkyMDEwLTAxLTA2IDE2OjAzOjI5LjAwMDAw
 MDAwMCArMDAwMApAQCAtMTEsMTMgKzExLDYgQEAKIC5cIiAyLiBSZWRpc3Ry
 aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
 b3ZlIGNvcHlyaWdodAogLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
 bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
 IC5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
 cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBh
 ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1
 c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUg
 Zm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3Qg
 aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFu
 bgotLlwiCWFuZCBXb2xmZ2FuZyBTb2xmcmFuay4KLS5cIiA0LiBOZWl0aGVy
 IHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2Yg
 aXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
 c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
 d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
 ZXJtaXNzaW9uLgogLlwiCiAuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
 RCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
 CiAuXCIgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
 TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpkaWZmIC1ydSBm
 c2NrX21zZG9zZnMub3JpZy9tYWluLmMgZnNja19tc2Rvc2ZzL21haW4uYwot
 LS0gZnNja19tc2Rvc2ZzLm9yaWcvbWFpbi5jCTIwMTAtMDEtMDYgMTE6MDc6
 MjQuMDAwMDAwMDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMvbWFpbi5jCTIw
 MTAtMDEtMDYgMTY6MDI6NTQuMDAwMDAwMDAwICswMDAwCkBAIC0xMCwxMyAr
 MTAsNiBAQAogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
 IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5v
 dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
 bmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5k
 L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
 dXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp
 b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAg
 IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoK
 LSAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg
 YnkgTWFydGluIEh1c2VtYW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsu
 Ci0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v
 ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJl
 IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
 ZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHBy
 aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJF
 IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
 IEVYUFJFU1MgT1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
 LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMK
 QEAgLTQwLDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lu
 Y2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVk
 ZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxl
 cnJuby5oPgo=
 
 --0-365583171-1262813495=:15260--

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org
Cc:  
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Thu, 7 Jan 2010 19:18:44 -0800 (PST)

 --0-3016821-1262920724=:92513
 Content-Type: text/plain; charset=us-ascii
 
 A new, and hopefully final, update:
 
 -Added a fix to a bug coverity found on NetBSD.
 -Removed bogus check that attempted to clear the sector
 after FSInfo in a valid FAT32 filesystem.
 
 
       
 --0-3016821-1262920724=:92513
 Content-Type: application/octet-stream; name=patch-fsck_msdosfs
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=patch-fsck_msdosfs
 
 ZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tfbXNkb3Nm
 cy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwkyMDEwLTAx
 LTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2Zz
 L2Jvb3QuYwkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCArMDAwMApA
 QCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
 aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
 CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
 dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
 aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
 aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
 YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds
 ZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg
 ZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5n
 IFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
 dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
 ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz
 cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ
 UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElT
 JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMs
 IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
 QVJSQU5USUVTCkBAIC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRs
 aWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5o
 PgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAK
 QEAgLTU2LDggKzQ4LDkgQEAKIAl1X2NoYXIgZnNpbmZvWzIgKiBET1NCT09U
 QkxPQ0tTSVpFXTsKIAl1X2NoYXIgYmFja3VwW0RPU0JPT1RCTE9DS1NJWkVd
 OwogCWludCByZXQgPSBGU09LOworCWludCBpOwogCQotCWlmIChyZWFkKGRv
 c2ZzLCBibG9jaywgc2l6ZW9mIGJsb2NrKSA8IHNpemVvZiBibG9jaykgewor
 CWlmIChyZWFkKChzaXplX3QpZG9zZnMsIGJsb2NrLCBzaXplb2YgYmxvY2sp
 ICE9IHNpemVvZiBibG9jaykgewogCQlwZXJyb3IoImNvdWxkIG5vdCByZWFk
 IGJvb3QgYmxvY2siKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpAQCAtMTYx
 LDEyICsxNTQsMjIgQEAKIAkJfQogCQliYWNrdXBbNjVdID0gYmxvY2tbNjVd
 OwkJCQkvKiBYWFggKi8KIAkJaWYgKG1lbWNtcChibG9jayArIDExLCBiYWNr
 dXAgKyAxMSwgNzkpKSB7Ci0JCQkvKiBDb3JyZWN0PwkJCQkJWFhYICovCi0J
 CQlwZmF0YWwoImJhY2t1cCBkb2Vzbid0IGNvbXBhcmUgdG8gcHJpbWFyeSBi
 b290YmxvY2siKTsKLQkJCWlmIChhbHdheXNubykKLQkJCQlwZmF0YWwoIlxu
 Iik7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIEZTRkFUQUw7CisJCQkvKgorCQkJ
 ICogWFhYIFdlIHJlcXVpcmUgYSByZWZlcmVuY2UgdGhhdCBleHBsYWlucwor
 CQkJICogdGhhdCB0aGVzZSBieXRlcyBuZWVkIHRvIG1hdGNoLCBvciBzaG91
 bGQKKwkJCSAqIGRyb3AgdGhlIGNoZWNrLiAgZ2R0QE5ldEJTRCBoYXMgb2Jz
 ZXJ2ZWQKKwkJCSAqIGZpbGVzeXN0ZW1zIHRoYXQgd29yayBmaW5lIHVuZGVy
 IFdpbmRvd3MgWFAKKwkJCSAqIGFuZCBOZXRCU0QgdGhhdCBkbyBub3QgbWF0
 Y2gsIHNvIHRoZQorCQkJICogcmVxdWlyZW1lbnQgaXMgc3VzcGVjdC4gIEZv
 ciBub3csIGp1c3QKKwkJCSAqIHByaW50IG91dCB1c2VmdWwgaW5mb3JtYXRp
 b24gYW5kIGNvbnRpbnVlLgorCQkJICovCisJCQlwZmF0YWwoImJhY2t1cCAo
 YmxvY2sgJWQpIG1pc21hdGNoIHdpdGggcHJpbWFyeSBib290YmxvY2s6XG4i
 LAorCQkJICAgICAgICBib290LT5CYWNrdXApOworCQkJZm9yIChpID0gMTE7
 IGkgPCAxMSArIDkwOyBpKyspIHsKKwkJCQlpZiAoYmxvY2tbaV0gIT0gYmFj
 a3VwW2ldKQorCQkJCQlwZmF0YWwoIlx0aT0lZFx0cHJpbWFyeSAweCUwMnhc
 dGJhY2t1cCAweCUwMnhcbiIsCisJCQkJCSAgICAgICBpLCBibG9ja1tpXSwg
 YmFja3VwW2ldKTsKKwkJCX0KIAkJfQogCQkvKiBDaGVjayBiYWNrdXAgRlNJ
 bmZvPwkJCQkJWFhYICovCiAJfQpkaWZmIC1ydSBmc2NrX21zZG9zZnMub3Jp
 Zy9jaGVjay5jIGZzY2tfbXNkb3Nmcy9jaGVjay5jCi0tLSBmc2NrX21zZG9z
 ZnMub3JpZy9jaGVjay5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAw
 ICswMDAwCisrKyBmc2NrX21zZG9zZnMvY2hlY2suYwkyMDEwLTAxLTA3IDIy
 OjA5OjEzLjAwMDAwMDAwMCArMDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAq
 IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
 ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMg
 bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
 ZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
 YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
 My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1
 cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3Bs
 YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHBy
 b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBI
 dXNlbWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVp
 dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
 IG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu
 ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
 b2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
 IHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
 RCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
 CiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
 SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC00MCw3ICsz
 Myw2IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJp
 bmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+
 CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAg
 LTU0LDcgKzQ2LDggQEAKIAlpbnQgZG9zZnM7CiAJc3RydWN0IGJvb3RibG9j
 ayBib290OwogCXN0cnVjdCBmYXRFbnRyeSAqZmF0ID0gTlVMTDsKLQlpbnQg
 aSwgZmluaXNoX2Rvc2RpcnNlY3Rpb249MDsKKwlpbnQgZmluaXNoX2Rvc2Rp
 cnNlY3Rpb249MDsKKwl1X2ludCBpOwogCWludCBtb2QgPSAwOwogCWludCBy
 ZXQgPSA4OwogCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Rpci5jIGZz
 Y2tfbXNkb3Nmcy9kaXIuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZGlyLmMJ
 MjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tf
 bXNkb3Nmcy9kaXIuYwkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCAr
 MDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9u
 cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
 eXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
 IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5n
 IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz
 IHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh
 Y2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m
 dHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdv
 bGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
 cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
 cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0
 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgog
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBg
 YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJB
 TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
 TElFRCBXQVJSQU5USUVTCkBAIC00NCw3ICszNyw2IEBACiAjaW5jbHVkZSA8
 c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5
 cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o
 PgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMjI2LDE2ICsyMTgsMjkgQEAK
 IAlpbnQgYjEsIGIyOwogCWNsX3QgY2w7CiAJaW50IHJldCA9IEZTT0s7CisJ
 c2l6ZV90IGxlbjsKIAogCWIxID0gYm9vdC0+Um9vdERpckVudHMgKiAzMjsK
 IAliMiA9IGJvb3QtPlNlY1BlckNsdXN0ICogYm9vdC0+Qnl0ZXNQZXJTZWM7
 CiAKLQlpZiAoIShidWZmZXIgPSBtYWxsb2MoYjEgPiBiMiA/IGIxIDogYjIp
 KQotCSAgICB8fCAhKGRlbGJ1ZiA9IG1hbGxvYyhiMikpCi0JICAgIHx8ICEo
 cm9vdERpciA9IG5ld0Rvc0RpckVudHJ5KCkpKSB7Ci0JCXBlcnJvcigiTm8g
 c3BhY2UgZm9yIGRpcmVjdG9yeSIpOworCWlmICgoYnVmZmVyID0gbWFsbG9j
 KGxlbiA9IGIxID4gYjIgPyBiMSA6IGIyKSkgPT0gTlVMTCkgeworCQlwZXJy
 b3IoIk5vIHNwYWNlIGZvciBkaXJlY3RvcnkgYnVmZmVyIik7CiAJCXJldHVy
 biBGU0ZBVEFMOwogCX0KKworCWlmICgoZGVsYnVmID0gbWFsbG9jKGxlbiA9
 IGIyKSkgPT0gTlVMTCkgeworCQlmcmVlKGJ1ZmZlcik7CisJCXBlcnJvcigi
 Tm8gc3BhY2UgZm9yIGRpcmVjdG9yeSBkZWxidWYiKTsKKwkJcmV0dXJuIEZT
 RkFUQUw7CisJfQorCisJaWYgKChyb290RGlyID0gbmV3RG9zRGlyRW50cnko
 KSkgPT0gTlVMTCkgeworCQlmcmVlKGJ1ZmZlcik7CisJCWZyZWUoZGVsYnVm
 KTsKKwkJcGVycm9yKCJObyBzcGFjZSBmb3IgZGlyZWN0b3J5IGVudHJ5Iik7
 CisJCXJldHVybiBGU0ZBVEFMOworCX0KKwogCW1lbXNldChyb290RGlyLCAw
 LCBzaXplb2YgKnJvb3REaXIpOwogCWlmIChib290LT5mbGFncyAmIEZBVDMy
 KSB7CiAJCWlmIChib290LT5Sb290Q2wgPCBDTFVTVF9GSVJTVCB8fCBib290
 LT5Sb290Q2wgPj0gYm9vdC0+TnVtQ2x1c3RlcnMpIHsKQEAgLTM2Nyw3ICsz
 NzIsOCBAQAogCQkJCXJldHVybiBGU0ZBVEFMOwogCQkJc3RhcnQgPSBidWZm
 ZXI7CiAJCX0KLQkJaWYgKGVuZGNsID09IGN1cmNsKQorCQkvKiBzdGFydGNs
 IGlzIDwgQ0xVU1RfRklSU1QgZm9yICFmYXQzMiByb290ICovCisJCWlmICgo
 ZW5kY2wgPT0gY3VyY2wpIHx8IChzdGFydGNsIDwgQ0xVU1RfRklSU1QpKQog
 CQkJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSAzMikKIAkJCQkqc3Rh
 cnQgPSBTTE9UX0RFTEVURUQ7CiAJCXJldHVybiBGU0RJUk1PRDsKQEAgLTM4
 NSw3ICszOTEsNyBAQAogCS8qCiAJICogQ2hlY2sgc2l6ZSBvbiBvcmRpbmFy
 eSBmaWxlcwogCSAqLwotCWludDMyX3QgcGh5c2ljYWxTaXplOworCXVfaW50
 MzJfdCBwaHlzaWNhbFNpemU7CiAKIAlpZiAoZGlyLT5oZWFkID09IENMVVNU
 X0ZSRUUpCiAJCXBoeXNpY2FsU2l6ZSA9IDA7CkBAIC02NDQsNyArNjUwLDgg
 QEAKIAkJCQlkaXJlbnQuaGVhZCB8PSAocFsyMF0gPDwgMTYpIHwgKHBbMjFd
 IDw8IDI0KTsKIAkJCWRpcmVudC5zaXplID0gcFsyOF0gfCAocFsyOV0gPDwg
 OCkgfCAocFszMF0gPDwgMTYpIHwgKHBbMzFdIDw8IDI0KTsKIAkJCWlmICh2
 YWxsZm4pIHsKLQkJCQlzdHJjcHkoZGlyZW50LmxuYW1lLCBsb25nTmFtZSk7
 CisJCQkJc3RybGNweShkaXJlbnQubG5hbWUsIGxvbmdOYW1lLAorCQkJCSAg
 ICBzaXplb2YoZGlyZW50LmxuYW1lKSk7CiAJCQkJbG9uZ05hbWVbMF0gPSAn
 XDAnOwogCQkJCXNob3J0U3VtID0gLTE7CiAJCQl9CkBAIC04MzIsNiArODM5
 LDEwIEBACiAJCQl9CiAJCQlib290LT5OdW1GaWxlcysrOwogCQl9CisKKwkJ
 aWYgKCEoYm9vdC0+ZmxhZ3MgJiBGQVQzMikgJiYgIWRpci0+cGFyZW50KQor
 CQkJYnJlYWs7CisKIAkJaWYgKG1vZCAmIFRISVNNT0QpIHsKIAkJCWxhc3Qg
 Kj0gMzI7CiAJCQlpZiAobHNlZWsoZiwgb2ZmLCBTRUVLX1NFVCkgIT0gb2Zm
 CkBAIC04NDcsNiArODU4LDE5IEBACiAJCQkJaW52bGZuID8gaW52bGZuIDog
 dmFsbGZuLCBwLAogCQkJCWludmxmbiA/IGludmNsIDogdmFsY2wsIC0xLCAw
 LAogCQkJCWZ1bGxwYXRoKGRpciksIDEpOworCisJLyogVGhlIHJvb3QgZGly
 ZWN0b3J5IG9mIG5vbiBmYXQzMiBmaWxlc3lzdGVtcyBpcyBpbiBhIHNwZWNp
 YWwKKwkgKiBhcmVhIGFuZCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGFib3Zl
 IHdpdGhvdXQgYmVpbmcgd3JpdHRlbiBvdXQuCisJICovCisJaWYgKChtb2Qg
 JiBGU0RJUk1PRCkgJiYgIShib290LT5mbGFncyAmIEZBVDMyKSAmJiAhZGly
 LT5wYXJlbnQpIHsKKwkJbGFzdCAqPSAzMjsKKwkJaWYgKGxzZWVrKGYsIG9m
 ZiwgU0VFS19TRVQpICE9IG9mZgorCQkgICAgfHwgd3JpdGUoZiwgYnVmZmVy
 LCBsYXN0KSAhPSBsYXN0KSB7CisJCQlwZXJyb3IoIlVuYWJsZSB0byB3cml0
 ZSBkaXJlY3RvcnkiKTsKKwkJCXJldHVybiBGU0ZBVEFMOworCQl9CisJCW1v
 ZCAmPSB+VEhJU01PRDsKKwl9CiAJcmV0dXJuIG1vZCAmIH5USElTTU9EOwog
 fQogCkBAIC05MzYsNyArOTYwLDcgQEAKIAkJbGZvZmYgPSBsZmNsICogYm9v
 dC0+Q2x1c3RlclNpemUKIAkJICAgICsgYm9vdC0+Q2x1c3Rlck9mZnNldCAq
 IGJvb3QtPkJ5dGVzUGVyU2VjOwogCQlpZiAobHNlZWsoZG9zZnMsIGxmb2Zm
 LCBTRUVLX1NFVCkgIT0gbGZvZmYKLQkJICAgIHx8IHJlYWQoZG9zZnMsIGxm
 YnVmLCBib290LT5DbHVzdGVyU2l6ZSkgIT0gYm9vdC0+Q2x1c3RlclNpemUp
 IHsKKwkJICAgIHx8IChzaXplX3QpcmVhZChkb3NmcywgbGZidWYsIGJvb3Qt
 PkNsdXN0ZXJTaXplKSAhPSBib290LT5DbHVzdGVyU2l6ZSkgewogCQkJcGVy
 cm9yKCJjb3VsZCBub3QgcmVhZCBMT1NULkRJUiIpOwogCQkJcmV0dXJuIEZT
 RkFUQUw7CiAJCX0KQEAgLTk2Niw3ICs5OTAsNyBAQAogCXBbMzFdID0gKHVf
 Y2hhcikoZC5zaXplID4+IDI0KTsKIAlmYXRbaGVhZF0uZmxhZ3MgfD0gRkFU
 X1VTRUQ7CiAJaWYgKGxzZWVrKGRvc2ZzLCBsZm9mZiwgU0VFS19TRVQpICE9
 IGxmb2ZmCi0JICAgIHx8IHdyaXRlKGRvc2ZzLCBsZmJ1ZiwgYm9vdC0+Q2x1
 c3RlclNpemUpICE9IGJvb3QtPkNsdXN0ZXJTaXplKSB7CisJICAgIHx8IChz
 aXplX3Qpd3JpdGUoZG9zZnMsIGxmYnVmLCBib290LT5DbHVzdGVyU2l6ZSkg
 IT0gYm9vdC0+Q2x1c3RlclNpemUpIHsKIAkJcGVycm9yKCJjb3VsZCBub3Qg
 d3JpdGUgTE9TVC5ESVIiKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpkaWZm
 IC1ydSBmc2NrX21zZG9zZnMub3JpZy9kb3Nmcy5oIGZzY2tfbXNkb3Nmcy9k
 b3Nmcy5oCi0tLSBmc2NrX21zZG9zZnMub3JpZy9kb3Nmcy5oCTIwMTAtMDEt
 MDYgMTE6MDc6MjQuMDAwMDAwMDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMv
 ZG9zZnMuaAkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCArMDAwMApA
 QCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
 aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
 CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
 dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
 aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
 aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
 YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds
 ZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg
 ZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5n
 IFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
 dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
 ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz
 cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ
 UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElT
 JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMs
 IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
 QVJSQU5USUVTCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2V4dC5oIGZz
 Y2tfbXNkb3Nmcy9leHQuaAotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZXh0LmgJ
 MjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tf
 bXNkb3Nmcy9leHQuaAkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCAr
 MDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9u
 cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
 eXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
 IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5n
 IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz
 IHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh
 Y2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m
 dHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdv
 bGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
 cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
 cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0
 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgog
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBg
 YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJB
 TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
 TElFRCBXQVJSQU5USUVTCkBAIC03NywxMiArNzAsMTIgQEAKICNkZWZpbmUJ
 RlNESVJNT0QJMgkJLyogU29tZSBkaXJlY3Rvcnkgd2FzIG1vZGlmaWVkICov
 CiAjZGVmaW5lCUZTRkFUTU9ECTQJCS8qIFRoZSBGQVQgd2FzIG1vZGlmaWVk
 ICovCiAjZGVmaW5lCUZTRVJST1IJCTgJCS8qIFNvbWUgdW5yZWNvdmVyZWQg
 ZXJyb3IgcmVtYWlucyAqLwotI2RlZmluZQlGU0ZBVEFMCQkxNgkJLyogU29t
 ZSB1bnJlY292ZXJhYmxlIGVycm9yIG9jY3VyZWQgKi8KKyNkZWZpbmUJRlNG
 QVRBTAkJMTYJCS8qIFNvbWUgdW5yZWNvdmVyYWJsZSBlcnJvciBvY2N1cnJl
 ZCAqLwogI2RlZmluZSBGU0RJUlRZCQkzMgkJLyogRmlsZSBzeXN0ZW0gaXMg
 ZGlydHkgKi8KICNkZWZpbmUgRlNGSVhGQVQJNjQJCS8qIEZpeCBmaWxlIHN5
 c3RlbSBGQVQgKi8KIAogLyoKLSAqIHJlYWQgYSBib290IGJsb2NrIGluIGEg
 bWFjaGluZSBpbmRlcGVuZGVuZCBmYXNoaW9uIGFuZCB0cmFuc2xhdGUKKyAq
 IHJlYWQgYSBib290IGJsb2NrIGluIGEgbWFjaGluZSBpbmRlcGVuZGVudCBm
 YXNoaW9uIGFuZCB0cmFuc2xhdGUKICAqIGl0IGludG8gb3VyIHN0cnVjdCBi
 b290YmxvY2suCiAgKi8KIGludCByZWFkYm9vdChpbnQsIHN0cnVjdCBib290
 YmxvY2sgKik7CkBAIC05NiwxMyArODksMTMgQEAKICAqIFJlYWQgb25lIG9m
 IHRoZSBGQVQgY29waWVzIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBu
 ZXcKICAqIGFsbG9jYXRlZCBhcnJheSBob2xkaW5nIG91ciBkZXNjcmlwdGlv
 biBvZiBpdC4KICAqLwotaW50IHJlYWRmYXQoaW50LCBzdHJ1Y3QgYm9vdGJs
 b2NrICosIGludCwgc3RydWN0IGZhdEVudHJ5ICoqKTsKK2ludCByZWFkZmF0
 KGludCwgc3RydWN0IGJvb3RibG9jayAqLCB1X2ludCwgc3RydWN0IGZhdEVu
 dHJ5ICoqKTsKIAogLyoKICAqIENoZWNrIHR3byBGQVQgY29waWVzIGZvciBj
 b25zaXN0ZW5jeSBhbmQgbWVyZ2UgY2hhbmdlcyBpbnRvIHRoZQotICogZmly
 c3QgaWYgbmVjY2Vzc2FyeS4KKyAqIGZpcnN0IGlmIG5lY2Vzc2FyeS4KICAq
 LwotaW50IGNvbXBhcmVmYXQoc3RydWN0IGJvb3RibG9jayAqLCBzdHJ1Y3Qg
 ZmF0RW50cnkgKiwgc3RydWN0IGZhdEVudHJ5ICosIGludCk7CitpbnQgY29t
 cGFyZWZhdChzdHJ1Y3QgYm9vdGJsb2NrICosIHN0cnVjdCBmYXRFbnRyeSAq
 LCBzdHJ1Y3QgZmF0RW50cnkgKiwgdV9pbnQpOwogCiAvKgogICogQ2hlY2sg
 YSBGQVQKZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvZmF0LmMgZnNja19t
 c2Rvc2ZzL2ZhdC5jCi0tLSBmc2NrX21zZG9zZnMub3JpZy9mYXQuYwkyMDEw
 LTAxLTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rv
 c2ZzL2ZhdC5jCTIwMTAtMDEtMDcgMjI6MTM6MzEuMDAwMDAwMDAwICswMDAw
 CkBAIC0xMCwxMyArMTAsNiBAQAogICogMi4gUmVkaXN0cmlidXRpb25zIGlu
 IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
 aHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
 IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3Vt
 ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
 IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0
 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29m
 dHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v
 d2xlZGdlbWVudDoKLSAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy
 ZSBkZXZlbG9wZWQgYnkgTWFydGluIEh1c2VtYW5uCi0gKglhbmQgV29sZmdh
 bmcgU29sZnJhbmsuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBV
 bml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwot
 ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0
 IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBU
 SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1JTIGBgQVMg
 SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICAqIElNUExJRUQgV0FSUkFOVElF
 UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
 IFdBUlJBTlRJRVMKQEAgLTQ3LDEwICs0MCwxMCBAQAogI2luY2x1ZGUgImV4
 dC5oIgogI2luY2x1ZGUgImZzdXRpbC5oIgogCi1zdGF0aWMgaW50IGNoZWNr
 Y2xudW0oc3RydWN0IGJvb3RibG9jayAqLCBpbnQsIGNsX3QsIGNsX3QgKik7
 Ci1zdGF0aWMgaW50IGNsdXN0ZGlmZmVyKGNsX3QsIGNsX3QgKiwgY2xfdCAq
 LCBpbnQpOworc3RhdGljIGludCBjaGVja2NsbnVtKHN0cnVjdCBib290Ymxv
 Y2sgKiwgdV9pbnQsIGNsX3QsIGNsX3QgKik7CitzdGF0aWMgaW50IGNsdXN0
 ZGlmZmVyKGNsX3QsIGNsX3QgKiwgY2xfdCAqLCB1X2ludCk7CiBzdGF0aWMg
 aW50IHRyeWNsZWFyKHN0cnVjdCBib290YmxvY2sgKiwgc3RydWN0IGZhdEVu
 dHJ5ICosIGNsX3QsIGNsX3QgKik7Ci1zdGF0aWMgaW50IF9yZWFkZmF0KGlu
 dCwgc3RydWN0IGJvb3RibG9jayAqLCBpbnQsIHVfY2hhciAqKik7CitzdGF0
 aWMgaW50IF9yZWFkZmF0KGludCwgc3RydWN0IGJvb3RibG9jayAqLCB1X2lu
 dCwgdV9jaGFyICoqKTsKIAogLyotCiAgKiBUaGUgZmlyc3QgMiBGQVQgZW50
 cmllcyBjb250YWluIHBzZXVkby1jbHVzdGVyIG51bWJlcnMgd2l0aCB0aGUg
 Zm9sbG93aW5nCkBAIC0xMzUsNyArMTI4LDcgQEAKICAqIENoZWNrIGEgY2x1
 c3RlciBudW1iZXIgZm9yIHZhbGlkIHZhbHVlCiAgKi8KIHN0YXRpYyBpbnQK
 LWNoZWNrY2xudW0oc3RydWN0IGJvb3RibG9jayAqYm9vdCwgaW50IGZhdCwg
 Y2xfdCBjbCwgY2xfdCAqbmV4dCkKK2NoZWNrY2xudW0oc3RydWN0IGJvb3Ri
 bG9jayAqYm9vdCwgdV9pbnQgZmF0LCBjbF90IGNsLCBjbF90ICpuZXh0KQog
 ewogCWlmICgqbmV4dCA+PSAoQ0xVU1RfUlNSVkQmYm9vdC0+Q2x1c3RNYXNr
 KSkKIAkJKm5leHQgfD0gfmJvb3QtPkNsdXN0TWFzazsKQEAgLTE2Niw3ICsx
 NTksNyBAQAogICogUmVhZCBhIEZBVCBmcm9tIGRpc2suIFJldHVybnMgMSBp
 ZiBzdWNjZXNzZnVsLCAwIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGludAot
 X3JlYWRmYXQoaW50IGZzLCBzdHJ1Y3QgYm9vdGJsb2NrICpib290LCBpbnQg
 bm8sIHVfY2hhciAqKmJ1ZmZlcikKK19yZWFkZmF0KGludCBmcywgc3RydWN0
 IGJvb3RibG9jayAqYm9vdCwgdV9pbnQgbm8sIHVfY2hhciAqKmJ1ZmZlcikK
 IHsKIAlvZmZfdCBvZmY7CiAKQEAgLTE4NCw3ICsxNzcsNyBAQAogCQlnb3Rv
 IGVycjsKIAl9CiAKLQlpZiAocmVhZChmcywgKmJ1ZmZlciwgYm9vdC0+RkFU
 c2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKQorCWlmICgoc2l6ZV90KXJlYWQo
 ZnMsICpidWZmZXIsIGJvb3QtPkZBVHNlY3MgKiBib290LT5CeXRlc1BlclNl
 YykKIAkgICAgIT0gYm9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2Vj
 KSB7CiAJCXBlcnJvcigiVW5hYmxlIHRvIHJlYWQgRkFUIik7CiAJCWdvdG8g
 ZXJyOwpAQCAtMjAxLDI0ICsxOTQsMjYgQEAKICAqIFJlYWQgYSBGQVQgYW5k
 IGRlY29kZSBpdCBpbnRvIGludGVybmFsIGZvcm1hdAogICovCiBpbnQKLXJl
 YWRmYXQoaW50IGZzLCBzdHJ1Y3QgYm9vdGJsb2NrICpib290LCBpbnQgbm8s
 IHN0cnVjdCBmYXRFbnRyeSAqKmZwKQorcmVhZGZhdChpbnQgZnMsIHN0cnVj
 dCBib290YmxvY2sgKmJvb3QsIHVfaW50IG5vLCBzdHJ1Y3QgZmF0RW50cnkg
 KipmcCkKIHsKIAlzdHJ1Y3QgZmF0RW50cnkgKmZhdDsKIAl1X2NoYXIgKmJ1
 ZmZlciwgKnA7CiAJY2xfdCBjbDsKIAlpbnQgcmV0ID0gRlNPSzsKKwlzaXpl
 X3QgbGVuOwogCiAJYm9vdC0+TnVtRnJlZSA9IGJvb3QtPk51bUJhZCA9IDA7
 CiAKIAlpZiAoIV9yZWFkZmF0KGZzLCBib290LCBubywgJmJ1ZmZlcikpCiAJ
 CXJldHVybiBGU0ZBVEFMOwogCQkKLQlmYXQgPSBjYWxsb2MoYm9vdC0+TnVt
 Q2x1c3RlcnMsIHNpemVvZihzdHJ1Y3QgZmF0RW50cnkpKTsKKwlmYXQgPSBt
 YWxsb2MobGVuID0gYm9vdC0+TnVtQ2x1c3RlcnMgKiBzaXplb2Yoc3RydWN0
 IGZhdEVudHJ5KSk7CiAJaWYgKGZhdCA9PSBOVUxMKSB7CiAJCXBlcnJvcigi
 Tm8gc3BhY2UgZm9yIEZBVCIpOwogCQlmcmVlKGJ1ZmZlcik7CiAJCXJldHVy
 biBGU0ZBVEFMOwogCX0KKwkodm9pZCltZW1zZXQoZmF0LCAwLCBsZW4pOwog
 CiAJaWYgKGJ1ZmZlclswXSAhPSBib290LT5NZWRpYQogCSAgICB8fCBidWZm
 ZXJbMV0gIT0gMHhmZiB8fCBidWZmZXJbMl0gIT0gMHhmZgpAQCAtMzExLDcg
 KzMwNiwxMSBAQAogCX0KIAogCWZyZWUoYnVmZmVyKTsKLQkqZnAgPSBmYXQ7
 CisJaWYgKHJldCAmIEZTRkFUQUwpIHsKKwkJZnJlZShmYXQpOworCQkqZnAg
 PSBOVUxMOworCX0gZWxzZQorCQkqZnAgPSBmYXQ7CiAJcmV0dXJuIHJldDsK
 IH0KIApAQCAtMzMxLDcgKzMzMCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNs
 dXN0ZGlmZmVyKGNsX3QgY2wsIGNsX3QgKmNwMSwgY2xfdCAqY3AyLCBpbnQg
 ZmF0bnVtKQorY2x1c3RkaWZmZXIoY2xfdCBjbCwgY2xfdCAqY3AxLCBjbF90
 ICpjcDIsIHVfaW50IGZhdG51bSkKIHsKIAlpZiAoKmNwMSA9PSBDTFVTVF9G
 UkVFIHx8ICpjcDEgPj0gQ0xVU1RfUlNSVkQpIHsKIAkJaWYgKCpjcDIgPT0g
 Q0xVU1RfRlJFRSB8fCAqY3AyID49IENMVVNUX1JTUlZEKSB7CkBAIC0zNDYs
 MTMgKzM0NSwxMyBAQAogCQkJCX0KIAkJCQlyZXR1cm4gRlNGQVRBTDsKIAkJ
 CX0KLQkJCXB3YXJuKCJDbHVzdGVyICV1IGlzIG1hcmtlZCAlcyBpbiBGQVQg
 MCwgJXMgaW4gRkFUICVkXG4iLAorCQkJcHdhcm4oIkNsdXN0ZXIgJXUgaXMg
 bWFya2VkICVzIGluIEZBVCAwLCAlcyBpbiBGQVQgJXVcbiIsCiAJCQkgICAg
 ICBjbCwgcnNydmRjbHR5cGUoKmNwMSksIHJzcnZkY2x0eXBlKCpjcDIpLCBm
 YXRudW0pOwogCQkJaWYgKGFzaygwLCAiVXNlIEZBVCAwJ3MgZW50cnkiKSkg
 ewogCQkJCSpjcDIgPSAqY3AxOwogCQkJCXJldHVybiBGU0ZBVE1PRDsKIAkJ
 CX0KLQkJCWlmIChhc2soMCwgIlVzZSBGQVQgJWQncyBlbnRyeSIsIGZhdG51
 bSkpIHsKKwkJCWlmIChhc2soMCwgIlVzZSBGQVQgJXUncyBlbnRyeSIsIGZh
 dG51bSkpIHsKIAkJCQkqY3AxID0gKmNwMjsKIAkJCQlyZXR1cm4gRlNGQVRN
 T0Q7CiAJCQl9CkBAIC0zNjAsNyArMzU5LDcgQEAKIAkJfQogCQlwd2Fybigi
 Q2x1c3RlciAldSBpcyBtYXJrZWQgJXMgaW4gRkFUIDAsIGJ1dCBjb250aW51
 ZXMgd2l0aCBjbHVzdGVyICV1IGluIEZBVCAlZFxuIiwKIAkJICAgICAgY2ws
 IHJzcnZkY2x0eXBlKCpjcDEpLCAqY3AyLCBmYXRudW0pOwotCQlpZiAoYXNr
 KDAsICJVc2UgY29udGludWF0aW9uIGZyb20gRkFUICVkIiwgZmF0bnVtKSkg
 eworCQlpZiAoYXNrKDAsICJVc2UgY29udGludWF0aW9uIGZyb20gRkFUICV1
 IiwgZmF0bnVtKSkgewogCQkJKmNwMSA9ICpjcDI7CiAJCQlyZXR1cm4gRlNG
 QVRNT0Q7CiAJCX0KQEAgLTM3MSw3ICszNzAsNyBAQAogCQlyZXR1cm4gRlNG
 QVRBTDsKIAl9CiAJaWYgKCpjcDIgPT0gQ0xVU1RfRlJFRSB8fCAqY3AyID49
 IENMVVNUX1JTUlZEKSB7Ci0JCXB3YXJuKCJDbHVzdGVyICV1IGNvbnRpbnVl
 cyB3aXRoIGNsdXN0ZXIgJXUgaW4gRkFUIDAsIGJ1dCBpcyBtYXJrZWQgJXMg
 aW4gRkFUICVkXG4iLAorCQlwd2FybigiQ2x1c3RlciAldSBjb250aW51ZXMg
 d2l0aCBjbHVzdGVyICV1IGluIEZBVCAwLCBidXQgaXMgbWFya2VkICVzIGlu
 IEZBVCAldVxuIiwKIAkJICAgICAgY2wsICpjcDEsIHJzcnZkY2x0eXBlKCpj
 cDIpLCBmYXRudW0pOwogCQlpZiAoYXNrKDAsICJVc2UgY29udGludWF0aW9u
 IGZyb20gRkFUIDAiKSkgewogCQkJKmNwMiA9ICpjcDE7CkBAIC0zODMsMTMg
 KzM4MiwxMyBAQAogCQl9CiAJCXJldHVybiBGU0VSUk9SOwogCX0KLQlwd2Fy
 bigiQ2x1c3RlciAldSBjb250aW51ZXMgd2l0aCBjbHVzdGVyICV1IGluIEZB
 VCAwLCBidXQgd2l0aCBjbHVzdGVyICV1IGluIEZBVCAlZFxuIiwKKwlwd2Fy
 bigiQ2x1c3RlciAldSBjb250aW51ZXMgd2l0aCBjbHVzdGVyICV1IGluIEZB
 VCAwLCBidXQgd2l0aCBjbHVzdGVyICV1IGluIEZBVCAldVxuIiwKIAkgICAg
 ICBjbCwgKmNwMSwgKmNwMiwgZmF0bnVtKTsKIAlpZiAoYXNrKDAsICJVc2Ug
 Y29udGludWF0aW9uIGZyb20gRkFUIDAiKSkgewogCQkqY3AyID0gKmNwMTsK
 IAkJcmV0dXJuIEZTRkFUTU9EOwogCX0KLQlpZiAoYXNrKDAsICJVc2UgY29u
 dGludWF0aW9uIGZyb20gRkFUICVkIiwgZmF0bnVtKSkgeworCWlmIChhc2so
 MCwgIlVzZSBjb250aW51YXRpb24gZnJvbSBGQVQgJXUiLCBmYXRudW0pKSB7
 CiAJCSpjcDEgPSAqY3AyOwogCQlyZXR1cm4gRlNGQVRNT0Q7CiAJfQpAQCAt
 NDAxLDggKzQwMCw4IEBACiAgKiBpbnRvIHRoZSBmaXJzdCBvbmUuCiAgKi8K
 IGludAotY29tcGFyZWZhdChzdHJ1Y3QgYm9vdGJsb2NrICpib290LCBzdHJ1
 Y3QgZmF0RW50cnkgKmZpcnN0LCAKLSAgICBzdHJ1Y3QgZmF0RW50cnkgKnNl
 Y29uZCwgaW50IGZhdG51bSkKK2NvbXBhcmVmYXQoc3RydWN0IGJvb3RibG9j
 ayAqYm9vdCwgc3RydWN0IGZhdEVudHJ5ICpmaXJzdCwKKyAgICBzdHJ1Y3Qg
 ZmF0RW50cnkgKnNlY29uZCwgdV9pbnQgZmF0bnVtKQogewogCWNsX3QgY2w7
 CiAJaW50IHJldCA9IEZTT0s7CkBAIC01NDIsOCArNTQxLDggQEAKIHsKIAl1
 X2NoYXIgKmJ1ZmZlciwgKnA7CiAJY2xfdCBjbDsKLQlpbnQgaTsKLQl1X2lu
 dDMyX3QgZmF0c3o7CisJdV9pbnQgaTsKKwlzaXplX3QgZmF0c3o7CiAJb2Zm
 X3Qgb2ZmOwogCWludCByZXQgPSBGU09LOwogCkBAIC02MzMsNyArNjMyLDcg
 QEAKIAkJb2ZmID0gYm9vdC0+UmVzU2VjdG9ycyArIGkgKiBib290LT5GQVRz
 ZWNzOwogCQlvZmYgKj0gYm9vdC0+Qnl0ZXNQZXJTZWM7CiAJCWlmIChsc2Vl
 ayhmcywgb2ZmLCBTRUVLX1NFVCkgIT0gb2ZmCi0JCSAgICB8fCB3cml0ZShm
 cywgYnVmZmVyLCBmYXRzeikgIT0gZmF0c3opIHsKKwkJICAgIHx8IChzaXpl
 X3Qpd3JpdGUoZnMsIGJ1ZmZlciwgZmF0c3opICE9IGZhdHN6KSB7CiAJCQlw
 ZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBGQVQiKTsKIAkJCXJldCA9IEZTRkFU
 QUw7IC8qIFJldHVybiBpbW1lZGlhdGVseT8JCVhYWCAqLwogCQl9CkBAIC02
 ODMsMTcgKzY4Miw2IEBACiAJCQkJcmV0ID0gMTsKIAkJCX0KIAkJfQotCQlp
 ZiAoYm9vdC0+TnVtRnJlZSAmJiBmYXRbYm9vdC0+RlNOZXh0XS5uZXh0ICE9
 IENMVVNUX0ZSRUUpIHsKLQkJCXB3YXJuKCJOZXh0IGZyZWUgY2x1c3RlciBp
 biBGU0luZm8gYmxvY2sgKCV1KSBub3QgZnJlZVxuIiwKLQkJCSAgICAgIGJv
 b3QtPkZTTmV4dCk7Ci0JCQlpZiAoYXNrKDEsICJGaXgiKSkKLQkJCQlmb3Ig
 KGhlYWQgPSBDTFVTVF9GSVJTVDsgaGVhZCA8IGJvb3QtPk51bUNsdXN0ZXJz
 OyBoZWFkKyspCi0JCQkJCWlmIChmYXRbaGVhZF0ubmV4dCA9PSBDTFVTVF9G
 UkVFKSB7Ci0JCQkJCQlib290LT5GU05leHQgPSBoZWFkOwotCQkJCQkJcmV0
 ID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCX0KIAkJaWYgKHJldCkK
 IAkJCW1vZCB8PSB3cml0ZWZzaW5mbyhkb3NmcywgYm9vdCk7CiAJfQpkaWZm
 IC1ydSBmc2NrX21zZG9zZnMub3JpZy9mc2NrX21zZG9zZnMuOCBmc2NrX21z
 ZG9zZnMvZnNja19tc2Rvc2ZzLjgKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Zz
 Y2tfbXNkb3Nmcy44CTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAwICsw
 MDAwCisrKyBmc2NrX21zZG9zZnMvZnNja19tc2Rvc2ZzLjgJMjAxMC0wMS0w
 NyAyMjowOToxMy4wMDAwMDAwMDAgKzAwMDAKQEAgLTExLDEzICsxMSw2IEBA
 CiAuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
 cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKIC5cIiAgICBub3RpY2Us
 IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
 c2NsYWltZXIgaW4gdGhlCiAuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
 b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
 bi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p
 bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBt
 dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0u
 XCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi
 eSBNYXJ0aW4gSHVzZW1hbm4KLS5cIglhbmQgV29sZmdhbmcgU29sZnJhbmsu
 Ci0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBu
 b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkg
 YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
 ZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmlj
 IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIC5cIgogLlwiIFRISVMgU09G
 VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUlMgYGBBUyBJUycnIEFO
 RCBBTlkgRVhQUkVTUyBPUgogLlwiIElNUExJRUQgV0FSUkFOVElFUywgSU5D
 TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
 TlRJRVMKZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvbWFpbi5jIGZzY2tf
 bXNkb3Nmcy9tYWluLmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL21haW4uYwky
 MDEwLTAxLTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19t
 c2Rvc2ZzL21haW4uYwkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCAr
 MDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9u
 cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
 eXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
 IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5n
 IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz
 IHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh
 Y2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m
 dHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdv
 bGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
 cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
 cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0
 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgog
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBg
 YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJB
 TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
 TElFRCBXQVJSQU5USUVTCkBAIC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRl
 IDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxj
 dHlwZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3Rk
 Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4K
 
 --0-3016821-1262920724=:92513--

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org
Cc:  
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Fri, 8 Jan 2010 12:34:36 -0800 (PST)

 --0-768091124-1262982876=:77647
 Content-Type: text/plain; charset=us-ascii
 
 (I spoke too soon)
 Remove unused variable len:
 This is used by NetBSD in error reports but we don't use it.
 
 
       
 --0-768091124-1262982876=:77647
 Content-Type: application/octet-stream; name=patch-fsck_msdosfs
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="patch-fsck_msdosfs"
 
 ZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tfbXNkb3Nm
 cy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwkyMDEwLTAx
 LTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2Zz
 L2Jvb3QuYwkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCArMDAwMApA
 QCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
 aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
 CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
 dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
 aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
 aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
 YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds
 ZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg
 ZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5n
 IFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
 dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
 ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz
 cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ
 UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElT
 JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMs
 IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
 QVJSQU5USUVTCkBAIC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRs
 aWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5o
 PgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAK
 QEAgLTU2LDggKzQ4LDkgQEAKIAl1X2NoYXIgZnNpbmZvWzIgKiBET1NCT09U
 QkxPQ0tTSVpFXTsKIAl1X2NoYXIgYmFja3VwW0RPU0JPT1RCTE9DS1NJWkVd
 OwogCWludCByZXQgPSBGU09LOworCWludCBpOwogCQotCWlmIChyZWFkKGRv
 c2ZzLCBibG9jaywgc2l6ZW9mIGJsb2NrKSA8IHNpemVvZiBibG9jaykgewor
 CWlmIChyZWFkKChzaXplX3QpZG9zZnMsIGJsb2NrLCBzaXplb2YgYmxvY2sp
 ICE9IHNpemVvZiBibG9jaykgewogCQlwZXJyb3IoImNvdWxkIG5vdCByZWFk
 IGJvb3QgYmxvY2siKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpAQCAtMTYx
 LDEyICsxNTQsMjIgQEAKIAkJfQogCQliYWNrdXBbNjVdID0gYmxvY2tbNjVd
 OwkJCQkvKiBYWFggKi8KIAkJaWYgKG1lbWNtcChibG9jayArIDExLCBiYWNr
 dXAgKyAxMSwgNzkpKSB7Ci0JCQkvKiBDb3JyZWN0PwkJCQkJWFhYICovCi0J
 CQlwZmF0YWwoImJhY2t1cCBkb2Vzbid0IGNvbXBhcmUgdG8gcHJpbWFyeSBi
 b290YmxvY2siKTsKLQkJCWlmIChhbHdheXNubykKLQkJCQlwZmF0YWwoIlxu
 Iik7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIEZTRkFUQUw7CisJCQkvKgorCQkJ
 ICogWFhYIFdlIHJlcXVpcmUgYSByZWZlcmVuY2UgdGhhdCBleHBsYWlucwor
 CQkJICogdGhhdCB0aGVzZSBieXRlcyBuZWVkIHRvIG1hdGNoLCBvciBzaG91
 bGQKKwkJCSAqIGRyb3AgdGhlIGNoZWNrLiAgZ2R0QE5ldEJTRCBoYXMgb2Jz
 ZXJ2ZWQKKwkJCSAqIGZpbGVzeXN0ZW1zIHRoYXQgd29yayBmaW5lIHVuZGVy
 IFdpbmRvd3MgWFAKKwkJCSAqIGFuZCBOZXRCU0QgdGhhdCBkbyBub3QgbWF0
 Y2gsIHNvIHRoZQorCQkJICogcmVxdWlyZW1lbnQgaXMgc3VzcGVjdC4gIEZv
 ciBub3csIGp1c3QKKwkJCSAqIHByaW50IG91dCB1c2VmdWwgaW5mb3JtYXRp
 b24gYW5kIGNvbnRpbnVlLgorCQkJICovCisJCQlwZmF0YWwoImJhY2t1cCAo
 YmxvY2sgJWQpIG1pc21hdGNoIHdpdGggcHJpbWFyeSBib290YmxvY2s6XG4i
 LAorCQkJICAgICAgICBib290LT5CYWNrdXApOworCQkJZm9yIChpID0gMTE7
 IGkgPCAxMSArIDkwOyBpKyspIHsKKwkJCQlpZiAoYmxvY2tbaV0gIT0gYmFj
 a3VwW2ldKQorCQkJCQlwZmF0YWwoIlx0aT0lZFx0cHJpbWFyeSAweCUwMnhc
 dGJhY2t1cCAweCUwMnhcbiIsCisJCQkJCSAgICAgICBpLCBibG9ja1tpXSwg
 YmFja3VwW2ldKTsKKwkJCX0KIAkJfQogCQkvKiBDaGVjayBiYWNrdXAgRlNJ
 bmZvPwkJCQkJWFhYICovCiAJfQpkaWZmIC1ydSBmc2NrX21zZG9zZnMub3Jp
 Zy9jaGVjay5jIGZzY2tfbXNkb3Nmcy9jaGVjay5jCi0tLSBmc2NrX21zZG9z
 ZnMub3JpZy9jaGVjay5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAw
 ICswMDAwCisrKyBmc2NrX21zZG9zZnMvY2hlY2suYwkyMDEwLTAxLTA3IDIy
 OjA5OjEzLjAwMDAwMDAwMCArMDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAq
 IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
 ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMg
 bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
 ZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
 YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
 My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1
 cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3Bs
 YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHBy
 b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBI
 dXNlbWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVp
 dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
 IG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu
 ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
 b2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
 IHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
 RCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
 CiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
 SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC00MCw3ICsz
 Myw2IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJp
 bmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+
 CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAg
 LTU0LDcgKzQ2LDggQEAKIAlpbnQgZG9zZnM7CiAJc3RydWN0IGJvb3RibG9j
 ayBib290OwogCXN0cnVjdCBmYXRFbnRyeSAqZmF0ID0gTlVMTDsKLQlpbnQg
 aSwgZmluaXNoX2Rvc2RpcnNlY3Rpb249MDsKKwlpbnQgZmluaXNoX2Rvc2Rp
 cnNlY3Rpb249MDsKKwl1X2ludCBpOwogCWludCBtb2QgPSAwOwogCWludCBy
 ZXQgPSA4OwogCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Rpci5jIGZz
 Y2tfbXNkb3Nmcy9kaXIuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZGlyLmMJ
 MjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tf
 bXNkb3Nmcy9kaXIuYwkyMDEwLTAxLTA4IDE1OjMwOjAzLjAwMDAwMDAwMCAr
 MDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9u
 cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
 eXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
 IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5n
 IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz
 IHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh
 Y2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m
 dHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdv
 bGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
 cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
 cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0
 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgog
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBg
 YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJB
 TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
 TElFRCBXQVJSQU5USUVTCkBAIC00NCw3ICszNyw2IEBACiAjaW5jbHVkZSA8
 c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5
 cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o
 PgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMjMwLDEyICsyMjIsMjQgQEAK
 IAliMSA9IGJvb3QtPlJvb3REaXJFbnRzICogMzI7CiAJYjIgPSBib290LT5T
 ZWNQZXJDbHVzdCAqIGJvb3QtPkJ5dGVzUGVyU2VjOwogCi0JaWYgKCEoYnVm
 ZmVyID0gbWFsbG9jKGIxID4gYjIgPyBiMSA6IGIyKSkKLQkgICAgfHwgIShk
 ZWxidWYgPSBtYWxsb2MoYjIpKQotCSAgICB8fCAhKHJvb3REaXIgPSBuZXdE
 b3NEaXJFbnRyeSgpKSkgewotCQlwZXJyb3IoIk5vIHNwYWNlIGZvciBkaXJl
 Y3RvcnkiKTsKKwlpZiAoKGJ1ZmZlciA9IG1hbGxvYyggYjEgPiBiMiA/IGIx
 IDogYjIpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigiTm8gc3BhY2UgZm9yIGRp
 cmVjdG9yeSBidWZmZXIiKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQorCisJ
 aWYgKChkZWxidWYgPSBtYWxsb2MoYjIpKSA9PSBOVUxMKSB7CisJCWZyZWUo
 YnVmZmVyKTsKKwkJcGVycm9yKCJObyBzcGFjZSBmb3IgZGlyZWN0b3J5IGRl
 bGJ1ZiIpOworCQlyZXR1cm4gRlNGQVRBTDsKKwl9CisKKwlpZiAoKHJvb3RE
 aXIgPSBuZXdEb3NEaXJFbnRyeSgpKSA9PSBOVUxMKSB7CisJCWZyZWUoYnVm
 ZmVyKTsKKwkJZnJlZShkZWxidWYpOworCQlwZXJyb3IoIk5vIHNwYWNlIGZv
 ciBkaXJlY3RvcnkgZW50cnkiKTsKKwkJcmV0dXJuIEZTRkFUQUw7CisJfQor
 CiAJbWVtc2V0KHJvb3REaXIsIDAsIHNpemVvZiAqcm9vdERpcik7CiAJaWYg
 KGJvb3QtPmZsYWdzICYgRkFUMzIpIHsKIAkJaWYgKGJvb3QtPlJvb3RDbCA8
 IENMVVNUX0ZJUlNUIHx8IGJvb3QtPlJvb3RDbCA+PSBib290LT5OdW1DbHVz
 dGVycykgewpAQCAtMzY3LDcgKzM3MSw4IEBACiAJCQkJcmV0dXJuIEZTRkFU
 QUw7CiAJCQlzdGFydCA9IGJ1ZmZlcjsKIAkJfQotCQlpZiAoZW5kY2wgPT0g
 Y3VyY2wpCisJCS8qIHN0YXJ0Y2wgaXMgPCBDTFVTVF9GSVJTVCBmb3IgIWZh
 dDMyIHJvb3QgKi8KKwkJaWYgKChlbmRjbCA9PSBjdXJjbCkgfHwgKHN0YXJ0
 Y2wgPCBDTFVTVF9GSVJTVCkpCiAJCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0
 YXJ0ICs9IDMyKQogCQkJCSpzdGFydCA9IFNMT1RfREVMRVRFRDsKIAkJcmV0
 dXJuIEZTRElSTU9EOwpAQCAtMzg1LDcgKzM5MCw3IEBACiAJLyoKIAkgKiBD
 aGVjayBzaXplIG9uIG9yZGluYXJ5IGZpbGVzCiAJICovCi0JaW50MzJfdCBw
 aHlzaWNhbFNpemU7CisJdV9pbnQzMl90IHBoeXNpY2FsU2l6ZTsKIAogCWlm
 IChkaXItPmhlYWQgPT0gQ0xVU1RfRlJFRSkKIAkJcGh5c2ljYWxTaXplID0g
 MDsKQEAgLTY0NCw3ICs2NDksOCBAQAogCQkJCWRpcmVudC5oZWFkIHw9IChw
 WzIwXSA8PCAxNikgfCAocFsyMV0gPDwgMjQpOwogCQkJZGlyZW50LnNpemUg
 PSBwWzI4XSB8IChwWzI5XSA8PCA4KSB8IChwWzMwXSA8PCAxNikgfCAocFsz
 MV0gPDwgMjQpOwogCQkJaWYgKHZhbGxmbikgewotCQkJCXN0cmNweShkaXJl
 bnQubG5hbWUsIGxvbmdOYW1lKTsKKwkJCQlzdHJsY3B5KGRpcmVudC5sbmFt
 ZSwgbG9uZ05hbWUsCisJCQkJICAgIHNpemVvZihkaXJlbnQubG5hbWUpKTsK
 IAkJCQlsb25nTmFtZVswXSA9ICdcMCc7CiAJCQkJc2hvcnRTdW0gPSAtMTsK
 IAkJCX0KQEAgLTgzMiw2ICs4MzgsMTAgQEAKIAkJCX0KIAkJCWJvb3QtPk51
 bUZpbGVzKys7CiAJCX0KKworCQlpZiAoIShib290LT5mbGFncyAmIEZBVDMy
 KSAmJiAhZGlyLT5wYXJlbnQpCisJCQlicmVhazsKKwogCQlpZiAobW9kICYg
 VEhJU01PRCkgewogCQkJbGFzdCAqPSAzMjsKIAkJCWlmIChsc2VlayhmLCBv
 ZmYsIFNFRUtfU0VUKSAhPSBvZmYKQEAgLTg0Nyw2ICs4NTcsMTkgQEAKIAkJ
 CQlpbnZsZm4gPyBpbnZsZm4gOiB2YWxsZm4sIHAsCiAJCQkJaW52bGZuID8g
 aW52Y2wgOiB2YWxjbCwgLTEsIDAsCiAJCQkJZnVsbHBhdGgoZGlyKSwgMSk7
 CisKKwkvKiBUaGUgcm9vdCBkaXJlY3Rvcnkgb2Ygbm9uIGZhdDMyIGZpbGVz
 eXN0ZW1zIGlzIGluIGEgc3BlY2lhbAorCSAqIGFyZWEgYW5kIG1heSBoYXZl
 IGJlZW4gbW9kaWZpZWQgYWJvdmUgd2l0aG91dCBiZWluZyB3cml0dGVuIG91
 dC4KKwkgKi8KKwlpZiAoKG1vZCAmIEZTRElSTU9EKSAmJiAhKGJvb3QtPmZs
 YWdzICYgRkFUMzIpICYmICFkaXItPnBhcmVudCkgeworCQlsYXN0ICo9IDMy
 OworCQlpZiAobHNlZWsoZiwgb2ZmLCBTRUVLX1NFVCkgIT0gb2ZmCisJCSAg
 ICB8fCB3cml0ZShmLCBidWZmZXIsIGxhc3QpICE9IGxhc3QpIHsKKwkJCXBl
 cnJvcigiVW5hYmxlIHRvIHdyaXRlIGRpcmVjdG9yeSIpOworCQkJcmV0dXJu
 IEZTRkFUQUw7CisJCX0KKwkJbW9kICY9IH5USElTTU9EOworCX0KIAlyZXR1
 cm4gbW9kICYgflRISVNNT0Q7CiB9CiAKQEAgLTkzNiw3ICs5NTksNyBAQAog
 CQlsZm9mZiA9IGxmY2wgKiBib290LT5DbHVzdGVyU2l6ZQogCQkgICAgKyBi
 b290LT5DbHVzdGVyT2Zmc2V0ICogYm9vdC0+Qnl0ZXNQZXJTZWM7CiAJCWlm
 IChsc2Vlayhkb3NmcywgbGZvZmYsIFNFRUtfU0VUKSAhPSBsZm9mZgotCQkg
 ICAgfHwgcmVhZChkb3NmcywgbGZidWYsIGJvb3QtPkNsdXN0ZXJTaXplKSAh
 PSBib290LT5DbHVzdGVyU2l6ZSkgeworCQkgICAgfHwgKHNpemVfdClyZWFk
 KGRvc2ZzLCBsZmJ1ZiwgYm9vdC0+Q2x1c3RlclNpemUpICE9IGJvb3QtPkNs
 dXN0ZXJTaXplKSB7CiAJCQlwZXJyb3IoImNvdWxkIG5vdCByZWFkIExPU1Qu
 RElSIik7CiAJCQlyZXR1cm4gRlNGQVRBTDsKIAkJfQpAQCAtOTY2LDcgKzk4
 OSw3IEBACiAJcFszMV0gPSAodV9jaGFyKShkLnNpemUgPj4gMjQpOwogCWZh
 dFtoZWFkXS5mbGFncyB8PSBGQVRfVVNFRDsKIAlpZiAobHNlZWsoZG9zZnMs
 IGxmb2ZmLCBTRUVLX1NFVCkgIT0gbGZvZmYKLQkgICAgfHwgd3JpdGUoZG9z
 ZnMsIGxmYnVmLCBib290LT5DbHVzdGVyU2l6ZSkgIT0gYm9vdC0+Q2x1c3Rl
 clNpemUpIHsKKwkgICAgfHwgKHNpemVfdCl3cml0ZShkb3NmcywgbGZidWYs
 IGJvb3QtPkNsdXN0ZXJTaXplKSAhPSBib290LT5DbHVzdGVyU2l6ZSkgewog
 CQlwZXJyb3IoImNvdWxkIG5vdCB3cml0ZSBMT1NULkRJUiIpOwogCQlyZXR1
 cm4gRlNGQVRBTDsKIAl9CmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Rv
 c2ZzLmggZnNja19tc2Rvc2ZzL2Rvc2ZzLmgKLS0tIGZzY2tfbXNkb3Nmcy5v
 cmlnL2Rvc2ZzLmgJMjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAw
 MDAKKysrIGZzY2tfbXNkb3Nmcy9kb3Nmcy5oCTIwMTAtMDEtMDcgMjI6MDk6
 MTMuMDAwMDAwMDAwICswMDAwCkBAIC0xMiwxMyArMTIsNiBAQAogICogMi4g
 UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
 IHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
 biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
 aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBB
 bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg
 b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0
 aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMgcHJvZHVj
 dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFydGluIEh1c2Vt
 YW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0gKiA0LiBOZWl0aGVy
 IHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2Yg
 aXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
 ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
 YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
 bWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
 IFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICAq
 IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
 RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKZGlmZiAtcnUgZnNja19t
 c2Rvc2ZzLm9yaWcvZXh0LmggZnNja19tc2Rvc2ZzL2V4dC5oCi0tLSBmc2Nr
 X21zZG9zZnMub3JpZy9leHQuaAkyMDEwLTAxLTA2IDExOjA3OjI0LjAwMDAw
 MDAwMCArMDAwMAorKysgZnNja19tc2Rvc2ZzL2V4dC5oCTIwMTAtMDEtMDcg
 MjI6MDk6MTMuMDAwMDAwMDAwICswMDAwCkBAIC0xMCwxMyArMTAsNiBAQAog
 ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
 cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhp
 cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
 aW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
 IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
 KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh
 dHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlz
 cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMg
 cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFydGlu
 IEh1c2VtYW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0gKiA0LiBO
 ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFt
 ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8g
 ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
 IHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
 ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
 REVEIEJZIFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1Mg
 T1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
 IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKQEAgLTc3LDEy
 ICs3MCwxMiBAQAogI2RlZmluZQlGU0RJUk1PRAkyCQkvKiBTb21lIGRpcmVj
 dG9yeSB3YXMgbW9kaWZpZWQgKi8KICNkZWZpbmUJRlNGQVRNT0QJNAkJLyog
 VGhlIEZBVCB3YXMgbW9kaWZpZWQgKi8KICNkZWZpbmUJRlNFUlJPUgkJOAkJ
 LyogU29tZSB1bnJlY292ZXJlZCBlcnJvciByZW1haW5zICovCi0jZGVmaW5l
 CUZTRkFUQUwJCTE2CQkvKiBTb21lIHVucmVjb3ZlcmFibGUgZXJyb3Igb2Nj
 dXJlZCAqLworI2RlZmluZQlGU0ZBVEFMCQkxNgkJLyogU29tZSB1bnJlY292
 ZXJhYmxlIGVycm9yIG9jY3VycmVkICovCiAjZGVmaW5lIEZTRElSVFkJCTMy
 CQkvKiBGaWxlIHN5c3RlbSBpcyBkaXJ0eSAqLwogI2RlZmluZSBGU0ZJWEZB
 VAk2NAkJLyogRml4IGZpbGUgc3lzdGVtIEZBVCAqLwogCiAvKgotICogcmVh
 ZCBhIGJvb3QgYmxvY2sgaW4gYSBtYWNoaW5lIGluZGVwZW5kZW5kIGZhc2hp
 b24gYW5kIHRyYW5zbGF0ZQorICogcmVhZCBhIGJvb3QgYmxvY2sgaW4gYSBt
 YWNoaW5lIGluZGVwZW5kZW50IGZhc2hpb24gYW5kIHRyYW5zbGF0ZQogICog
 aXQgaW50byBvdXIgc3RydWN0IGJvb3RibG9jay4KICAqLwogaW50IHJlYWRi
 b290KGludCwgc3RydWN0IGJvb3RibG9jayAqKTsKQEAgLTk2LDEzICs4OSwx
 MyBAQAogICogUmVhZCBvbmUgb2YgdGhlIEZBVCBjb3BpZXMgYW5kIHJldHVy
 biBhIHBvaW50ZXIgdG8gdGhlIG5ldwogICogYWxsb2NhdGVkIGFycmF5IGhv
 bGRpbmcgb3VyIGRlc2NyaXB0aW9uIG9mIGl0LgogICovCi1pbnQgcmVhZGZh
 dChpbnQsIHN0cnVjdCBib290YmxvY2sgKiwgaW50LCBzdHJ1Y3QgZmF0RW50
 cnkgKiopOworaW50IHJlYWRmYXQoaW50LCBzdHJ1Y3QgYm9vdGJsb2NrICos
 IHVfaW50LCBzdHJ1Y3QgZmF0RW50cnkgKiopOwogCiAvKgogICogQ2hlY2sg
 dHdvIEZBVCBjb3BpZXMgZm9yIGNvbnNpc3RlbmN5IGFuZCBtZXJnZSBjaGFu
 Z2VzIGludG8gdGhlCi0gKiBmaXJzdCBpZiBuZWNjZXNzYXJ5LgorICogZmly
 c3QgaWYgbmVjZXNzYXJ5LgogICovCi1pbnQgY29tcGFyZWZhdChzdHJ1Y3Qg
 Ym9vdGJsb2NrICosIHN0cnVjdCBmYXRFbnRyeSAqLCBzdHJ1Y3QgZmF0RW50
 cnkgKiwgaW50KTsKK2ludCBjb21wYXJlZmF0KHN0cnVjdCBib290YmxvY2sg
 Kiwgc3RydWN0IGZhdEVudHJ5ICosIHN0cnVjdCBmYXRFbnRyeSAqLCB1X2lu
 dCk7CiAKIC8qCiAgKiBDaGVjayBhIEZBVApkaWZmIC1ydSBmc2NrX21zZG9z
 ZnMub3JpZy9mYXQuYyBmc2NrX21zZG9zZnMvZmF0LmMKLS0tIGZzY2tfbXNk
 b3Nmcy5vcmlnL2ZhdC5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAw
 ICswMDAwCisrKyBmc2NrX21zZG9zZnMvZmF0LmMJMjAxMC0wMS0wNyAyMjox
 MzozMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTEwLDEzICsxMCw2IEBACiAgKiAy
 LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxp
 c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
 IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
 IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl
 cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5
 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9k
 dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJ0aW4gSHVz
 ZW1hbm4KLSAqCWFuZCBXb2xmZ2FuZyBTb2xmcmFuay4KLSAqIDQuIE5laXRo
 ZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBv
 ZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
 cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
 dHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
 ZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
 QlkgVEhFIEFVVEhPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgog
 ICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
 SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpAQCAtNDcsMTAgKzQw
 LDEwIEBACiAjaW5jbHVkZSAiZXh0LmgiCiAjaW5jbHVkZSAiZnN1dGlsLmgi
 CiAKLXN0YXRpYyBpbnQgY2hlY2tjbG51bShzdHJ1Y3QgYm9vdGJsb2NrICos
 IGludCwgY2xfdCwgY2xfdCAqKTsKLXN0YXRpYyBpbnQgY2x1c3RkaWZmZXIo
 Y2xfdCwgY2xfdCAqLCBjbF90ICosIGludCk7CitzdGF0aWMgaW50IGNoZWNr
 Y2xudW0oc3RydWN0IGJvb3RibG9jayAqLCB1X2ludCwgY2xfdCwgY2xfdCAq
 KTsKK3N0YXRpYyBpbnQgY2x1c3RkaWZmZXIoY2xfdCwgY2xfdCAqLCBjbF90
 ICosIHVfaW50KTsKIHN0YXRpYyBpbnQgdHJ5Y2xlYXIoc3RydWN0IGJvb3Ri
 bG9jayAqLCBzdHJ1Y3QgZmF0RW50cnkgKiwgY2xfdCwgY2xfdCAqKTsKLXN0
 YXRpYyBpbnQgX3JlYWRmYXQoaW50LCBzdHJ1Y3QgYm9vdGJsb2NrICosIGlu
 dCwgdV9jaGFyICoqKTsKK3N0YXRpYyBpbnQgX3JlYWRmYXQoaW50LCBzdHJ1
 Y3QgYm9vdGJsb2NrICosIHVfaW50LCB1X2NoYXIgKiopOwogCiAvKi0KICAq
 IFRoZSBmaXJzdCAyIEZBVCBlbnRyaWVzIGNvbnRhaW4gcHNldWRvLWNsdXN0
 ZXIgbnVtYmVycyB3aXRoIHRoZSBmb2xsb3dpbmcKQEAgLTEzNSw3ICsxMjgs
 NyBAQAogICogQ2hlY2sgYSBjbHVzdGVyIG51bWJlciBmb3IgdmFsaWQgdmFs
 dWUKICAqLwogc3RhdGljIGludAotY2hlY2tjbG51bShzdHJ1Y3QgYm9vdGJs
 b2NrICpib290LCBpbnQgZmF0LCBjbF90IGNsLCBjbF90ICpuZXh0KQorY2hl
 Y2tjbG51bShzdHJ1Y3QgYm9vdGJsb2NrICpib290LCB1X2ludCBmYXQsIGNs
 X3QgY2wsIGNsX3QgKm5leHQpCiB7CiAJaWYgKCpuZXh0ID49IChDTFVTVF9S
 U1JWRCZib290LT5DbHVzdE1hc2spKQogCQkqbmV4dCB8PSB+Ym9vdC0+Q2x1
 c3RNYXNrOwpAQCAtMTY2LDcgKzE1OSw3IEBACiAgKiBSZWFkIGEgRkFUIGZy
 b20gZGlzay4gUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgb3RoZXJ3aXNl
 LgogICovCiBzdGF0aWMgaW50Ci1fcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBi
 b290YmxvY2sgKmJvb3QsIGludCBubywgdV9jaGFyICoqYnVmZmVyKQorX3Jl
 YWRmYXQoaW50IGZzLCBzdHJ1Y3QgYm9vdGJsb2NrICpib290LCB1X2ludCBu
 bywgdV9jaGFyICoqYnVmZmVyKQogewogCW9mZl90IG9mZjsKIApAQCAtMTg0
 LDcgKzE3Nyw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWlmIChyZWFkKGZz
 LCAqYnVmZmVyLCBib290LT5GQVRzZWNzICogYm9vdC0+Qnl0ZXNQZXJTZWMp
 CisJaWYgKChzaXplX3QpcmVhZChmcywgKmJ1ZmZlciwgYm9vdC0+RkFUc2Vj
 cyAqIGJvb3QtPkJ5dGVzUGVyU2VjKQogCSAgICAhPSBib290LT5GQVRzZWNz
 ICogYm9vdC0+Qnl0ZXNQZXJTZWMpIHsKIAkJcGVycm9yKCJVbmFibGUgdG8g
 cmVhZCBGQVQiKTsKIAkJZ290byBlcnI7CkBAIC0yMDEsMjQgKzE5NCwyNiBA
 QAogICogUmVhZCBhIEZBVCBhbmQgZGVjb2RlIGl0IGludG8gaW50ZXJuYWwg
 Zm9ybWF0CiAgKi8KIGludAotcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBib290
 YmxvY2sgKmJvb3QsIGludCBubywgc3RydWN0IGZhdEVudHJ5ICoqZnApCity
 ZWFkZmF0KGludCBmcywgc3RydWN0IGJvb3RibG9jayAqYm9vdCwgdV9pbnQg
 bm8sIHN0cnVjdCBmYXRFbnRyeSAqKmZwKQogewogCXN0cnVjdCBmYXRFbnRy
 eSAqZmF0OwogCXVfY2hhciAqYnVmZmVyLCAqcDsKIAljbF90IGNsOwogCWlu
 dCByZXQgPSBGU09LOworCXNpemVfdCBsZW47CiAKIAlib290LT5OdW1GcmVl
 ID0gYm9vdC0+TnVtQmFkID0gMDsKIAogCWlmICghX3JlYWRmYXQoZnMsIGJv
 b3QsIG5vLCAmYnVmZmVyKSkKIAkJcmV0dXJuIEZTRkFUQUw7CiAJCQotCWZh
 dCA9IGNhbGxvYyhib290LT5OdW1DbHVzdGVycywgc2l6ZW9mKHN0cnVjdCBm
 YXRFbnRyeSkpOworCWZhdCA9IG1hbGxvYyhsZW4gPSBib290LT5OdW1DbHVz
 dGVycyAqIHNpemVvZihzdHJ1Y3QgZmF0RW50cnkpKTsKIAlpZiAoZmF0ID09
 IE5VTEwpIHsKIAkJcGVycm9yKCJObyBzcGFjZSBmb3IgRkFUIik7CiAJCWZy
 ZWUoYnVmZmVyKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQorCSh2b2lkKW1l
 bXNldChmYXQsIDAsIGxlbik7CiAKIAlpZiAoYnVmZmVyWzBdICE9IGJvb3Qt
 Pk1lZGlhCiAJICAgIHx8IGJ1ZmZlclsxXSAhPSAweGZmIHx8IGJ1ZmZlclsy
 XSAhPSAweGZmCkBAIC0zMTEsNyArMzA2LDExIEBACiAJfQogCiAJZnJlZShi
 dWZmZXIpOwotCSpmcCA9IGZhdDsKKwlpZiAocmV0ICYgRlNGQVRBTCkgewor
 CQlmcmVlKGZhdCk7CisJCSpmcCA9IE5VTEw7CisJfSBlbHNlCisJCSpmcCA9
 IGZhdDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMzEsNyArMzMwLDcgQEAK
 IH0KIAogc3RhdGljIGludAotY2x1c3RkaWZmZXIoY2xfdCBjbCwgY2xfdCAq
 Y3AxLCBjbF90ICpjcDIsIGludCBmYXRudW0pCitjbHVzdGRpZmZlcihjbF90
 IGNsLCBjbF90ICpjcDEsIGNsX3QgKmNwMiwgdV9pbnQgZmF0bnVtKQogewog
 CWlmICgqY3AxID09IENMVVNUX0ZSRUUgfHwgKmNwMSA+PSBDTFVTVF9SU1JW
 RCkgewogCQlpZiAoKmNwMiA9PSBDTFVTVF9GUkVFIHx8ICpjcDIgPj0gQ0xV
 U1RfUlNSVkQpIHsKQEAgLTM0NiwxMyArMzQ1LDEzIEBACiAJCQkJfQogCQkJ
 CXJldHVybiBGU0ZBVEFMOwogCQkJfQotCQkJcHdhcm4oIkNsdXN0ZXIgJXUg
 aXMgbWFya2VkICVzIGluIEZBVCAwLCAlcyBpbiBGQVQgJWRcbiIsCisJCQlw
 d2FybigiQ2x1c3RlciAldSBpcyBtYXJrZWQgJXMgaW4gRkFUIDAsICVzIGlu
 IEZBVCAldVxuIiwKIAkJCSAgICAgIGNsLCByc3J2ZGNsdHlwZSgqY3AxKSwg
 cnNydmRjbHR5cGUoKmNwMiksIGZhdG51bSk7CiAJCQlpZiAoYXNrKDAsICJV
 c2UgRkFUIDAncyBlbnRyeSIpKSB7CiAJCQkJKmNwMiA9ICpjcDE7CiAJCQkJ
 cmV0dXJuIEZTRkFUTU9EOwogCQkJfQotCQkJaWYgKGFzaygwLCAiVXNlIEZB
 VCAlZCdzIGVudHJ5IiwgZmF0bnVtKSkgeworCQkJaWYgKGFzaygwLCAiVXNl
 IEZBVCAldSdzIGVudHJ5IiwgZmF0bnVtKSkgewogCQkJCSpjcDEgPSAqY3Ay
 OwogCQkJCXJldHVybiBGU0ZBVE1PRDsKIAkJCX0KQEAgLTM2MCw3ICszNTks
 NyBAQAogCQl9CiAJCXB3YXJuKCJDbHVzdGVyICV1IGlzIG1hcmtlZCAlcyBp
 biBGQVQgMCwgYnV0IGNvbnRpbnVlcyB3aXRoIGNsdXN0ZXIgJXUgaW4gRkFU
 ICVkXG4iLAogCQkgICAgICBjbCwgcnNydmRjbHR5cGUoKmNwMSksICpjcDIs
 IGZhdG51bSk7Ci0JCWlmIChhc2soMCwgIlVzZSBjb250aW51YXRpb24gZnJv
 bSBGQVQgJWQiLCBmYXRudW0pKSB7CisJCWlmIChhc2soMCwgIlVzZSBjb250
 aW51YXRpb24gZnJvbSBGQVQgJXUiLCBmYXRudW0pKSB7CiAJCQkqY3AxID0g
 KmNwMjsKIAkJCXJldHVybiBGU0ZBVE1PRDsKIAkJfQpAQCAtMzcxLDcgKzM3
 MCw3IEBACiAJCXJldHVybiBGU0ZBVEFMOwogCX0KIAlpZiAoKmNwMiA9PSBD
 TFVTVF9GUkVFIHx8ICpjcDIgPj0gQ0xVU1RfUlNSVkQpIHsKLQkJcHdhcm4o
 IkNsdXN0ZXIgJXUgY29udGludWVzIHdpdGggY2x1c3RlciAldSBpbiBGQVQg
 MCwgYnV0IGlzIG1hcmtlZCAlcyBpbiBGQVQgJWRcbiIsCisJCXB3YXJuKCJD
 bHVzdGVyICV1IGNvbnRpbnVlcyB3aXRoIGNsdXN0ZXIgJXUgaW4gRkFUIDAs
 IGJ1dCBpcyBtYXJrZWQgJXMgaW4gRkFUICV1XG4iLAogCQkgICAgICBjbCwg
 KmNwMSwgcnNydmRjbHR5cGUoKmNwMiksIGZhdG51bSk7CiAJCWlmIChhc2so
 MCwgIlVzZSBjb250aW51YXRpb24gZnJvbSBGQVQgMCIpKSB7CiAJCQkqY3Ay
 ID0gKmNwMTsKQEAgLTM4MywxMyArMzgyLDEzIEBACiAJCX0KIAkJcmV0dXJu
 IEZTRVJST1I7CiAJfQotCXB3YXJuKCJDbHVzdGVyICV1IGNvbnRpbnVlcyB3
 aXRoIGNsdXN0ZXIgJXUgaW4gRkFUIDAsIGJ1dCB3aXRoIGNsdXN0ZXIgJXUg
 aW4gRkFUICVkXG4iLAorCXB3YXJuKCJDbHVzdGVyICV1IGNvbnRpbnVlcyB3
 aXRoIGNsdXN0ZXIgJXUgaW4gRkFUIDAsIGJ1dCB3aXRoIGNsdXN0ZXIgJXUg
 aW4gRkFUICV1XG4iLAogCSAgICAgIGNsLCAqY3AxLCAqY3AyLCBmYXRudW0p
 OwogCWlmIChhc2soMCwgIlVzZSBjb250aW51YXRpb24gZnJvbSBGQVQgMCIp
 KSB7CiAJCSpjcDIgPSAqY3AxOwogCQlyZXR1cm4gRlNGQVRNT0Q7CiAJfQot
 CWlmIChhc2soMCwgIlVzZSBjb250aW51YXRpb24gZnJvbSBGQVQgJWQiLCBm
 YXRudW0pKSB7CisJaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9t
 IEZBVCAldSIsIGZhdG51bSkpIHsKIAkJKmNwMSA9ICpjcDI7CiAJCXJldHVy
 biBGU0ZBVE1PRDsKIAl9CkBAIC00MDEsOCArNDAwLDggQEAKICAqIGludG8g
 dGhlIGZpcnN0IG9uZS4KICAqLwogaW50Ci1jb21wYXJlZmF0KHN0cnVjdCBi
 b290YmxvY2sgKmJvb3QsIHN0cnVjdCBmYXRFbnRyeSAqZmlyc3QsIAotICAg
 IHN0cnVjdCBmYXRFbnRyeSAqc2Vjb25kLCBpbnQgZmF0bnVtKQorY29tcGFy
 ZWZhdChzdHJ1Y3QgYm9vdGJsb2NrICpib290LCBzdHJ1Y3QgZmF0RW50cnkg
 KmZpcnN0LAorICAgIHN0cnVjdCBmYXRFbnRyeSAqc2Vjb25kLCB1X2ludCBm
 YXRudW0pCiB7CiAJY2xfdCBjbDsKIAlpbnQgcmV0ID0gRlNPSzsKQEAgLTU0
 Miw4ICs1NDEsOCBAQAogewogCXVfY2hhciAqYnVmZmVyLCAqcDsKIAljbF90
 IGNsOwotCWludCBpOwotCXVfaW50MzJfdCBmYXRzejsKKwl1X2ludCBpOwor
 CXNpemVfdCBmYXRzejsKIAlvZmZfdCBvZmY7CiAJaW50IHJldCA9IEZTT0s7
 CiAKQEAgLTYzMyw3ICs2MzIsNyBAQAogCQlvZmYgPSBib290LT5SZXNTZWN0
 b3JzICsgaSAqIGJvb3QtPkZBVHNlY3M7CiAJCW9mZiAqPSBib290LT5CeXRl
 c1BlclNlYzsKIAkJaWYgKGxzZWVrKGZzLCBvZmYsIFNFRUtfU0VUKSAhPSBv
 ZmYKLQkJICAgIHx8IHdyaXRlKGZzLCBidWZmZXIsIGZhdHN6KSAhPSBmYXRz
 eikgeworCQkgICAgfHwgKHNpemVfdCl3cml0ZShmcywgYnVmZmVyLCBmYXRz
 eikgIT0gZmF0c3opIHsKIAkJCXBlcnJvcigiVW5hYmxlIHRvIHdyaXRlIEZB
 VCIpOwogCQkJcmV0ID0gRlNGQVRBTDsgLyogUmV0dXJuIGltbWVkaWF0ZWx5
 PwkJWFhYICovCiAJCX0KQEAgLTY4MywxNyArNjgyLDYgQEAKIAkJCQlyZXQg
 PSAxOwogCQkJfQogCQl9Ci0JCWlmIChib290LT5OdW1GcmVlICYmIGZhdFti
 b290LT5GU05leHRdLm5leHQgIT0gQ0xVU1RfRlJFRSkgewotCQkJcHdhcm4o
 Ik5leHQgZnJlZSBjbHVzdGVyIGluIEZTSW5mbyBibG9jayAoJXUpIG5vdCBm
 cmVlXG4iLAotCQkJICAgICAgYm9vdC0+RlNOZXh0KTsKLQkJCWlmIChhc2so
 MSwgIkZpeCIpKQotCQkJCWZvciAoaGVhZCA9IENMVVNUX0ZJUlNUOyBoZWFk
 IDwgYm9vdC0+TnVtQ2x1c3RlcnM7IGhlYWQrKykKLQkJCQkJaWYgKGZhdFto
 ZWFkXS5uZXh0ID09IENMVVNUX0ZSRUUpIHsKLQkJCQkJCWJvb3QtPkZTTmV4
 dCA9IGhlYWQ7Ci0JCQkJCQlyZXQgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJ
 CX0KLQkJfQogCQlpZiAocmV0KQogCQkJbW9kIHw9IHdyaXRlZnNpbmZvKGRv
 c2ZzLCBib290KTsKIAl9CmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Zz
 Y2tfbXNkb3Nmcy44IGZzY2tfbXNkb3Nmcy9mc2NrX21zZG9zZnMuOAotLS0g
 ZnNja19tc2Rvc2ZzLm9yaWcvZnNja19tc2Rvc2ZzLjgJMjAxMC0wMS0wNiAx
 MTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tfbXNkb3Nmcy9mc2Nr
 X21zZG9zZnMuOAkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCArMDAw
 MApAQCAtMTEsMTMgKzExLDYgQEAKIC5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMg
 aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
 aWdodAogLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
 YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIC5cIiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2lu
 ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp
 cyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n
 IGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMg
 c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotLlwiCWFu
 ZCBXb2xmZ2FuZyBTb2xmcmFuay4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1l
 IG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
 aWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
 bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwi
 ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
 LgogLlwiCiAuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
 QVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAuXCIgSU1Q
 TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
 TywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpkaWZmIC1ydSBmc2NrX21zZG9z
 ZnMub3JpZy9tYWluLmMgZnNja19tc2Rvc2ZzL21haW4uYwotLS0gZnNja19t
 c2Rvc2ZzLm9yaWcvbWFpbi5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAw
 MDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMvbWFpbi5jCTIwMTAtMDEtMDcg
 MjI6MDk6MTMuMDAwMDAwMDAwICswMDAwCkBAIC0xMCwxMyArMTAsNiBAQAog
 ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
 cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhp
 cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
 aW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
 IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
 KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh
 dHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlz
 cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMg
 cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFydGlu
 IEh1c2VtYW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0gKiA0LiBO
 ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFt
 ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8g
 ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
 IHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
 ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
 REVEIEJZIFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1Mg
 T1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
 IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKQEAgLTQwLDcg
 KzMzLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0
 cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkaW8u
 aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgo=
 
 
 --0-768091124-1262982876=:77647--

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org
Cc:  
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Fri, 8 Jan 2010 14:36:18 -0800 (PST)

 --0-154663579-1262990178=:1420
 Content-Type: text/plain; charset=us-ascii
 
 Ugh...
 Fix misplaced cast.
 
 
       
 --0-154663579-1262990178=:1420
 Content-Type: application/octet-stream; name=patch-fsck_msdosfs
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="patch-fsck_msdosfs"
 
 ZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tfbXNkb3Nm
 cy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwkyMDEwLTAx
 LTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2Zz
 L2Jvb3QuYwkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCArMDAwMApA
 QCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
 aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
 CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
 dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
 aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
 aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
 YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds
 ZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg
 ZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5n
 IFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
 dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
 ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz
 cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ
 UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElT
 JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMs
 IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
 QVJSQU5USUVTCkBAIC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRs
 aWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5o
 PgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAK
 QEAgLTU2LDggKzQ4LDkgQEAKIAl1X2NoYXIgZnNpbmZvWzIgKiBET1NCT09U
 QkxPQ0tTSVpFXTsKIAl1X2NoYXIgYmFja3VwW0RPU0JPT1RCTE9DS1NJWkVd
 OwogCWludCByZXQgPSBGU09LOworCWludCBpOwogCQotCWlmIChyZWFkKGRv
 c2ZzLCBibG9jaywgc2l6ZW9mIGJsb2NrKSA8IHNpemVvZiBibG9jaykgewor
 CWlmICgoc2l6ZV90KXJlYWQoZG9zZnMsIGJsb2NrLCBzaXplb2YgYmxvY2sp
 ICE9IHNpemVvZiBibG9jaykgewogCQlwZXJyb3IoImNvdWxkIG5vdCByZWFk
 IGJvb3QgYmxvY2siKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpAQCAtMTYx
 LDEyICsxNTQsMjIgQEAKIAkJfQogCQliYWNrdXBbNjVdID0gYmxvY2tbNjVd
 OwkJCQkvKiBYWFggKi8KIAkJaWYgKG1lbWNtcChibG9jayArIDExLCBiYWNr
 dXAgKyAxMSwgNzkpKSB7Ci0JCQkvKiBDb3JyZWN0PwkJCQkJWFhYICovCi0J
 CQlwZmF0YWwoImJhY2t1cCBkb2Vzbid0IGNvbXBhcmUgdG8gcHJpbWFyeSBi
 b290YmxvY2siKTsKLQkJCWlmIChhbHdheXNubykKLQkJCQlwZmF0YWwoIlxu
 Iik7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIEZTRkFUQUw7CisJCQkvKgorCQkJ
 ICogWFhYIFdlIHJlcXVpcmUgYSByZWZlcmVuY2UgdGhhdCBleHBsYWlucwor
 CQkJICogdGhhdCB0aGVzZSBieXRlcyBuZWVkIHRvIG1hdGNoLCBvciBzaG91
 bGQKKwkJCSAqIGRyb3AgdGhlIGNoZWNrLiAgZ2R0QE5ldEJTRCBoYXMgb2Jz
 ZXJ2ZWQKKwkJCSAqIGZpbGVzeXN0ZW1zIHRoYXQgd29yayBmaW5lIHVuZGVy
 IFdpbmRvd3MgWFAKKwkJCSAqIGFuZCBOZXRCU0QgdGhhdCBkbyBub3QgbWF0
 Y2gsIHNvIHRoZQorCQkJICogcmVxdWlyZW1lbnQgaXMgc3VzcGVjdC4gIEZv
 ciBub3csIGp1c3QKKwkJCSAqIHByaW50IG91dCB1c2VmdWwgaW5mb3JtYXRp
 b24gYW5kIGNvbnRpbnVlLgorCQkJICovCisJCQlwZmF0YWwoImJhY2t1cCAo
 YmxvY2sgJWQpIG1pc21hdGNoIHdpdGggcHJpbWFyeSBib290YmxvY2s6XG4i
 LAorCQkJICAgICAgICBib290LT5CYWNrdXApOworCQkJZm9yIChpID0gMTE7
 IGkgPCAxMSArIDkwOyBpKyspIHsKKwkJCQlpZiAoYmxvY2tbaV0gIT0gYmFj
 a3VwW2ldKQorCQkJCQlwZmF0YWwoIlx0aT0lZFx0cHJpbWFyeSAweCUwMnhc
 dGJhY2t1cCAweCUwMnhcbiIsCisJCQkJCSAgICAgICBpLCBibG9ja1tpXSwg
 YmFja3VwW2ldKTsKKwkJCX0KIAkJfQogCQkvKiBDaGVjayBiYWNrdXAgRlNJ
 bmZvPwkJCQkJWFhYICovCiAJfQpkaWZmIC1ydSBmc2NrX21zZG9zZnMub3Jp
 Zy9jaGVjay5jIGZzY2tfbXNkb3Nmcy9jaGVjay5jCi0tLSBmc2NrX21zZG9z
 ZnMub3JpZy9jaGVjay5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAw
 ICswMDAwCisrKyBmc2NrX21zZG9zZnMvY2hlY2suYwkyMDEwLTAxLTA3IDIy
 OjA5OjEzLjAwMDAwMDAwMCArMDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAq
 IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
 ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMg
 bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
 ZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
 YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
 My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1
 cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3Bs
 YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHBy
 b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBI
 dXNlbWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVp
 dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
 IG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu
 ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
 b2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
 IHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
 RCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9S
 CiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
 SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC00MCw3ICsz
 Myw2IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJp
 bmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+
 CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAg
 LTU0LDcgKzQ2LDggQEAKIAlpbnQgZG9zZnM7CiAJc3RydWN0IGJvb3RibG9j
 ayBib290OwogCXN0cnVjdCBmYXRFbnRyeSAqZmF0ID0gTlVMTDsKLQlpbnQg
 aSwgZmluaXNoX2Rvc2RpcnNlY3Rpb249MDsKKwlpbnQgZmluaXNoX2Rvc2Rp
 cnNlY3Rpb249MDsKKwl1X2ludCBpOwogCWludCBtb2QgPSAwOwogCWludCBy
 ZXQgPSA4OwogCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Rpci5jIGZz
 Y2tfbXNkb3Nmcy9kaXIuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZGlyLmMJ
 MjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tf
 bXNkb3Nmcy9kaXIuYwkyMDEwLTAxLTA4IDE1OjMwOjAzLjAwMDAwMDAwMCAr
 MDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9u
 cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
 eXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
 IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5n
 IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz
 IHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh
 Y2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m
 dHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdv
 bGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
 cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
 cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0
 aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgog
 ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBg
 YEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJB
 TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
 TElFRCBXQVJSQU5USUVTCkBAIC00NCw3ICszNyw2IEBACiAjaW5jbHVkZSA8
 c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8Y3R5
 cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5o
 PgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMjMwLDEyICsyMjIsMjQgQEAK
 IAliMSA9IGJvb3QtPlJvb3REaXJFbnRzICogMzI7CiAJYjIgPSBib290LT5T
 ZWNQZXJDbHVzdCAqIGJvb3QtPkJ5dGVzUGVyU2VjOwogCi0JaWYgKCEoYnVm
 ZmVyID0gbWFsbG9jKGIxID4gYjIgPyBiMSA6IGIyKSkKLQkgICAgfHwgIShk
 ZWxidWYgPSBtYWxsb2MoYjIpKQotCSAgICB8fCAhKHJvb3REaXIgPSBuZXdE
 b3NEaXJFbnRyeSgpKSkgewotCQlwZXJyb3IoIk5vIHNwYWNlIGZvciBkaXJl
 Y3RvcnkiKTsKKwlpZiAoKGJ1ZmZlciA9IG1hbGxvYyggYjEgPiBiMiA/IGIx
 IDogYjIpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigiTm8gc3BhY2UgZm9yIGRp
 cmVjdG9yeSBidWZmZXIiKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQorCisJ
 aWYgKChkZWxidWYgPSBtYWxsb2MoYjIpKSA9PSBOVUxMKSB7CisJCWZyZWUo
 YnVmZmVyKTsKKwkJcGVycm9yKCJObyBzcGFjZSBmb3IgZGlyZWN0b3J5IGRl
 bGJ1ZiIpOworCQlyZXR1cm4gRlNGQVRBTDsKKwl9CisKKwlpZiAoKHJvb3RE
 aXIgPSBuZXdEb3NEaXJFbnRyeSgpKSA9PSBOVUxMKSB7CisJCWZyZWUoYnVm
 ZmVyKTsKKwkJZnJlZShkZWxidWYpOworCQlwZXJyb3IoIk5vIHNwYWNlIGZv
 ciBkaXJlY3RvcnkgZW50cnkiKTsKKwkJcmV0dXJuIEZTRkFUQUw7CisJfQor
 CiAJbWVtc2V0KHJvb3REaXIsIDAsIHNpemVvZiAqcm9vdERpcik7CiAJaWYg
 KGJvb3QtPmZsYWdzICYgRkFUMzIpIHsKIAkJaWYgKGJvb3QtPlJvb3RDbCA8
 IENMVVNUX0ZJUlNUIHx8IGJvb3QtPlJvb3RDbCA+PSBib290LT5OdW1DbHVz
 dGVycykgewpAQCAtMzY3LDcgKzM3MSw4IEBACiAJCQkJcmV0dXJuIEZTRkFU
 QUw7CiAJCQlzdGFydCA9IGJ1ZmZlcjsKIAkJfQotCQlpZiAoZW5kY2wgPT0g
 Y3VyY2wpCisJCS8qIHN0YXJ0Y2wgaXMgPCBDTFVTVF9GSVJTVCBmb3IgIWZh
 dDMyIHJvb3QgKi8KKwkJaWYgKChlbmRjbCA9PSBjdXJjbCkgfHwgKHN0YXJ0
 Y2wgPCBDTFVTVF9GSVJTVCkpCiAJCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0
 YXJ0ICs9IDMyKQogCQkJCSpzdGFydCA9IFNMT1RfREVMRVRFRDsKIAkJcmV0
 dXJuIEZTRElSTU9EOwpAQCAtMzg1LDcgKzM5MCw3IEBACiAJLyoKIAkgKiBD
 aGVjayBzaXplIG9uIG9yZGluYXJ5IGZpbGVzCiAJICovCi0JaW50MzJfdCBw
 aHlzaWNhbFNpemU7CisJdV9pbnQzMl90IHBoeXNpY2FsU2l6ZTsKIAogCWlm
 IChkaXItPmhlYWQgPT0gQ0xVU1RfRlJFRSkKIAkJcGh5c2ljYWxTaXplID0g
 MDsKQEAgLTY0NCw3ICs2NDksOCBAQAogCQkJCWRpcmVudC5oZWFkIHw9IChw
 WzIwXSA8PCAxNikgfCAocFsyMV0gPDwgMjQpOwogCQkJZGlyZW50LnNpemUg
 PSBwWzI4XSB8IChwWzI5XSA8PCA4KSB8IChwWzMwXSA8PCAxNikgfCAocFsz
 MV0gPDwgMjQpOwogCQkJaWYgKHZhbGxmbikgewotCQkJCXN0cmNweShkaXJl
 bnQubG5hbWUsIGxvbmdOYW1lKTsKKwkJCQlzdHJsY3B5KGRpcmVudC5sbmFt
 ZSwgbG9uZ05hbWUsCisJCQkJICAgIHNpemVvZihkaXJlbnQubG5hbWUpKTsK
 IAkJCQlsb25nTmFtZVswXSA9ICdcMCc7CiAJCQkJc2hvcnRTdW0gPSAtMTsK
 IAkJCX0KQEAgLTgzMiw2ICs4MzgsMTAgQEAKIAkJCX0KIAkJCWJvb3QtPk51
 bUZpbGVzKys7CiAJCX0KKworCQlpZiAoIShib290LT5mbGFncyAmIEZBVDMy
 KSAmJiAhZGlyLT5wYXJlbnQpCisJCQlicmVhazsKKwogCQlpZiAobW9kICYg
 VEhJU01PRCkgewogCQkJbGFzdCAqPSAzMjsKIAkJCWlmIChsc2VlayhmLCBv
 ZmYsIFNFRUtfU0VUKSAhPSBvZmYKQEAgLTg0Nyw2ICs4NTcsMTkgQEAKIAkJ
 CQlpbnZsZm4gPyBpbnZsZm4gOiB2YWxsZm4sIHAsCiAJCQkJaW52bGZuID8g
 aW52Y2wgOiB2YWxjbCwgLTEsIDAsCiAJCQkJZnVsbHBhdGgoZGlyKSwgMSk7
 CisKKwkvKiBUaGUgcm9vdCBkaXJlY3Rvcnkgb2Ygbm9uIGZhdDMyIGZpbGVz
 eXN0ZW1zIGlzIGluIGEgc3BlY2lhbAorCSAqIGFyZWEgYW5kIG1heSBoYXZl
 IGJlZW4gbW9kaWZpZWQgYWJvdmUgd2l0aG91dCBiZWluZyB3cml0dGVuIG91
 dC4KKwkgKi8KKwlpZiAoKG1vZCAmIEZTRElSTU9EKSAmJiAhKGJvb3QtPmZs
 YWdzICYgRkFUMzIpICYmICFkaXItPnBhcmVudCkgeworCQlsYXN0ICo9IDMy
 OworCQlpZiAobHNlZWsoZiwgb2ZmLCBTRUVLX1NFVCkgIT0gb2ZmCisJCSAg
 ICB8fCB3cml0ZShmLCBidWZmZXIsIGxhc3QpICE9IGxhc3QpIHsKKwkJCXBl
 cnJvcigiVW5hYmxlIHRvIHdyaXRlIGRpcmVjdG9yeSIpOworCQkJcmV0dXJu
 IEZTRkFUQUw7CisJCX0KKwkJbW9kICY9IH5USElTTU9EOworCX0KIAlyZXR1
 cm4gbW9kICYgflRISVNNT0Q7CiB9CiAKQEAgLTkzNiw3ICs5NTksNyBAQAog
 CQlsZm9mZiA9IGxmY2wgKiBib290LT5DbHVzdGVyU2l6ZQogCQkgICAgKyBi
 b290LT5DbHVzdGVyT2Zmc2V0ICogYm9vdC0+Qnl0ZXNQZXJTZWM7CiAJCWlm
 IChsc2Vlayhkb3NmcywgbGZvZmYsIFNFRUtfU0VUKSAhPSBsZm9mZgotCQkg
 ICAgfHwgcmVhZChkb3NmcywgbGZidWYsIGJvb3QtPkNsdXN0ZXJTaXplKSAh
 PSBib290LT5DbHVzdGVyU2l6ZSkgeworCQkgICAgfHwgKHNpemVfdClyZWFk
 KGRvc2ZzLCBsZmJ1ZiwgYm9vdC0+Q2x1c3RlclNpemUpICE9IGJvb3QtPkNs
 dXN0ZXJTaXplKSB7CiAJCQlwZXJyb3IoImNvdWxkIG5vdCByZWFkIExPU1Qu
 RElSIik7CiAJCQlyZXR1cm4gRlNGQVRBTDsKIAkJfQpAQCAtOTY2LDcgKzk4
 OSw3IEBACiAJcFszMV0gPSAodV9jaGFyKShkLnNpemUgPj4gMjQpOwogCWZh
 dFtoZWFkXS5mbGFncyB8PSBGQVRfVVNFRDsKIAlpZiAobHNlZWsoZG9zZnMs
 IGxmb2ZmLCBTRUVLX1NFVCkgIT0gbGZvZmYKLQkgICAgfHwgd3JpdGUoZG9z
 ZnMsIGxmYnVmLCBib290LT5DbHVzdGVyU2l6ZSkgIT0gYm9vdC0+Q2x1c3Rl
 clNpemUpIHsKKwkgICAgfHwgKHNpemVfdCl3cml0ZShkb3NmcywgbGZidWYs
 IGJvb3QtPkNsdXN0ZXJTaXplKSAhPSBib290LT5DbHVzdGVyU2l6ZSkgewog
 CQlwZXJyb3IoImNvdWxkIG5vdCB3cml0ZSBMT1NULkRJUiIpOwogCQlyZXR1
 cm4gRlNGQVRBTDsKIAl9CmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Rv
 c2ZzLmggZnNja19tc2Rvc2ZzL2Rvc2ZzLmgKLS0tIGZzY2tfbXNkb3Nmcy5v
 cmlnL2Rvc2ZzLmgJMjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAw
 MDAKKysrIGZzY2tfbXNkb3Nmcy9kb3Nmcy5oCTIwMTAtMDEtMDcgMjI6MDk6
 MTMuMDAwMDAwMDAwICswMDAwCkBAIC0xMiwxMyArMTIsNiBAQAogICogMi4g
 UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
 IHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
 biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
 aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBB
 bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg
 b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0
 aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMgcHJvZHVj
 dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFydGluIEh1c2Vt
 YW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0gKiA0LiBOZWl0aGVy
 IHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2Yg
 aXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
 ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
 YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
 bWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
 IFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICAq
 IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
 RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKZGlmZiAtcnUgZnNja19t
 c2Rvc2ZzLm9yaWcvZXh0LmggZnNja19tc2Rvc2ZzL2V4dC5oCi0tLSBmc2Nr
 X21zZG9zZnMub3JpZy9leHQuaAkyMDEwLTAxLTA2IDExOjA3OjI0LjAwMDAw
 MDAwMCArMDAwMAorKysgZnNja19tc2Rvc2ZzL2V4dC5oCTIwMTAtMDEtMDcg
 MjI6MDk6MTMuMDAwMDAwMDAwICswMDAwCkBAIC0xMCwxMyArMTAsNiBAQAog
 ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
 cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhp
 cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
 aW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
 IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
 KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh
 dHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlz
 cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMg
 cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFydGlu
 IEh1c2VtYW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0gKiA0LiBO
 ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFt
 ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8g
 ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
 IHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
 ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
 REVEIEJZIFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1Mg
 T1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
 IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKQEAgLTc3LDEy
 ICs3MCwxMiBAQAogI2RlZmluZQlGU0RJUk1PRAkyCQkvKiBTb21lIGRpcmVj
 dG9yeSB3YXMgbW9kaWZpZWQgKi8KICNkZWZpbmUJRlNGQVRNT0QJNAkJLyog
 VGhlIEZBVCB3YXMgbW9kaWZpZWQgKi8KICNkZWZpbmUJRlNFUlJPUgkJOAkJ
 LyogU29tZSB1bnJlY292ZXJlZCBlcnJvciByZW1haW5zICovCi0jZGVmaW5l
 CUZTRkFUQUwJCTE2CQkvKiBTb21lIHVucmVjb3ZlcmFibGUgZXJyb3Igb2Nj
 dXJlZCAqLworI2RlZmluZQlGU0ZBVEFMCQkxNgkJLyogU29tZSB1bnJlY292
 ZXJhYmxlIGVycm9yIG9jY3VycmVkICovCiAjZGVmaW5lIEZTRElSVFkJCTMy
 CQkvKiBGaWxlIHN5c3RlbSBpcyBkaXJ0eSAqLwogI2RlZmluZSBGU0ZJWEZB
 VAk2NAkJLyogRml4IGZpbGUgc3lzdGVtIEZBVCAqLwogCiAvKgotICogcmVh
 ZCBhIGJvb3QgYmxvY2sgaW4gYSBtYWNoaW5lIGluZGVwZW5kZW5kIGZhc2hp
 b24gYW5kIHRyYW5zbGF0ZQorICogcmVhZCBhIGJvb3QgYmxvY2sgaW4gYSBt
 YWNoaW5lIGluZGVwZW5kZW50IGZhc2hpb24gYW5kIHRyYW5zbGF0ZQogICog
 aXQgaW50byBvdXIgc3RydWN0IGJvb3RibG9jay4KICAqLwogaW50IHJlYWRi
 b290KGludCwgc3RydWN0IGJvb3RibG9jayAqKTsKQEAgLTk2LDEzICs4OSwx
 MyBAQAogICogUmVhZCBvbmUgb2YgdGhlIEZBVCBjb3BpZXMgYW5kIHJldHVy
 biBhIHBvaW50ZXIgdG8gdGhlIG5ldwogICogYWxsb2NhdGVkIGFycmF5IGhv
 bGRpbmcgb3VyIGRlc2NyaXB0aW9uIG9mIGl0LgogICovCi1pbnQgcmVhZGZh
 dChpbnQsIHN0cnVjdCBib290YmxvY2sgKiwgaW50LCBzdHJ1Y3QgZmF0RW50
 cnkgKiopOworaW50IHJlYWRmYXQoaW50LCBzdHJ1Y3QgYm9vdGJsb2NrICos
 IHVfaW50LCBzdHJ1Y3QgZmF0RW50cnkgKiopOwogCiAvKgogICogQ2hlY2sg
 dHdvIEZBVCBjb3BpZXMgZm9yIGNvbnNpc3RlbmN5IGFuZCBtZXJnZSBjaGFu
 Z2VzIGludG8gdGhlCi0gKiBmaXJzdCBpZiBuZWNjZXNzYXJ5LgorICogZmly
 c3QgaWYgbmVjZXNzYXJ5LgogICovCi1pbnQgY29tcGFyZWZhdChzdHJ1Y3Qg
 Ym9vdGJsb2NrICosIHN0cnVjdCBmYXRFbnRyeSAqLCBzdHJ1Y3QgZmF0RW50
 cnkgKiwgaW50KTsKK2ludCBjb21wYXJlZmF0KHN0cnVjdCBib290YmxvY2sg
 Kiwgc3RydWN0IGZhdEVudHJ5ICosIHN0cnVjdCBmYXRFbnRyeSAqLCB1X2lu
 dCk7CiAKIC8qCiAgKiBDaGVjayBhIEZBVApkaWZmIC1ydSBmc2NrX21zZG9z
 ZnMub3JpZy9mYXQuYyBmc2NrX21zZG9zZnMvZmF0LmMKLS0tIGZzY2tfbXNk
 b3Nmcy5vcmlnL2ZhdC5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAw
 ICswMDAwCisrKyBmc2NrX21zZG9zZnMvZmF0LmMJMjAxMC0wMS0wNyAyMjox
 MzozMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTEwLDEzICsxMCw2IEBACiAgKiAy
 LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxp
 c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
 IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
 IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl
 cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5
 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9k
 dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJ0aW4gSHVz
 ZW1hbm4KLSAqCWFuZCBXb2xmZ2FuZyBTb2xmcmFuay4KLSAqIDQuIE5laXRo
 ZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBv
 ZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
 cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
 dHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
 ZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
 QlkgVEhFIEFVVEhPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgog
 ICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
 SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpAQCAtNDcsMTAgKzQw
 LDEwIEBACiAjaW5jbHVkZSAiZXh0LmgiCiAjaW5jbHVkZSAiZnN1dGlsLmgi
 CiAKLXN0YXRpYyBpbnQgY2hlY2tjbG51bShzdHJ1Y3QgYm9vdGJsb2NrICos
 IGludCwgY2xfdCwgY2xfdCAqKTsKLXN0YXRpYyBpbnQgY2x1c3RkaWZmZXIo
 Y2xfdCwgY2xfdCAqLCBjbF90ICosIGludCk7CitzdGF0aWMgaW50IGNoZWNr
 Y2xudW0oc3RydWN0IGJvb3RibG9jayAqLCB1X2ludCwgY2xfdCwgY2xfdCAq
 KTsKK3N0YXRpYyBpbnQgY2x1c3RkaWZmZXIoY2xfdCwgY2xfdCAqLCBjbF90
 ICosIHVfaW50KTsKIHN0YXRpYyBpbnQgdHJ5Y2xlYXIoc3RydWN0IGJvb3Ri
 bG9jayAqLCBzdHJ1Y3QgZmF0RW50cnkgKiwgY2xfdCwgY2xfdCAqKTsKLXN0
 YXRpYyBpbnQgX3JlYWRmYXQoaW50LCBzdHJ1Y3QgYm9vdGJsb2NrICosIGlu
 dCwgdV9jaGFyICoqKTsKK3N0YXRpYyBpbnQgX3JlYWRmYXQoaW50LCBzdHJ1
 Y3QgYm9vdGJsb2NrICosIHVfaW50LCB1X2NoYXIgKiopOwogCiAvKi0KICAq
 IFRoZSBmaXJzdCAyIEZBVCBlbnRyaWVzIGNvbnRhaW4gcHNldWRvLWNsdXN0
 ZXIgbnVtYmVycyB3aXRoIHRoZSBmb2xsb3dpbmcKQEAgLTEzNSw3ICsxMjgs
 NyBAQAogICogQ2hlY2sgYSBjbHVzdGVyIG51bWJlciBmb3IgdmFsaWQgdmFs
 dWUKICAqLwogc3RhdGljIGludAotY2hlY2tjbG51bShzdHJ1Y3QgYm9vdGJs
 b2NrICpib290LCBpbnQgZmF0LCBjbF90IGNsLCBjbF90ICpuZXh0KQorY2hl
 Y2tjbG51bShzdHJ1Y3QgYm9vdGJsb2NrICpib290LCB1X2ludCBmYXQsIGNs
 X3QgY2wsIGNsX3QgKm5leHQpCiB7CiAJaWYgKCpuZXh0ID49IChDTFVTVF9S
 U1JWRCZib290LT5DbHVzdE1hc2spKQogCQkqbmV4dCB8PSB+Ym9vdC0+Q2x1
 c3RNYXNrOwpAQCAtMTY2LDcgKzE1OSw3IEBACiAgKiBSZWFkIGEgRkFUIGZy
 b20gZGlzay4gUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgb3RoZXJ3aXNl
 LgogICovCiBzdGF0aWMgaW50Ci1fcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBi
 b290YmxvY2sgKmJvb3QsIGludCBubywgdV9jaGFyICoqYnVmZmVyKQorX3Jl
 YWRmYXQoaW50IGZzLCBzdHJ1Y3QgYm9vdGJsb2NrICpib290LCB1X2ludCBu
 bywgdV9jaGFyICoqYnVmZmVyKQogewogCW9mZl90IG9mZjsKIApAQCAtMTg0
 LDcgKzE3Nyw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWlmIChyZWFkKGZz
 LCAqYnVmZmVyLCBib290LT5GQVRzZWNzICogYm9vdC0+Qnl0ZXNQZXJTZWMp
 CisJaWYgKChzaXplX3QpcmVhZChmcywgKmJ1ZmZlciwgYm9vdC0+RkFUc2Vj
 cyAqIGJvb3QtPkJ5dGVzUGVyU2VjKQogCSAgICAhPSBib290LT5GQVRzZWNz
 ICogYm9vdC0+Qnl0ZXNQZXJTZWMpIHsKIAkJcGVycm9yKCJVbmFibGUgdG8g
 cmVhZCBGQVQiKTsKIAkJZ290byBlcnI7CkBAIC0yMDEsMjQgKzE5NCwyNiBA
 QAogICogUmVhZCBhIEZBVCBhbmQgZGVjb2RlIGl0IGludG8gaW50ZXJuYWwg
 Zm9ybWF0CiAgKi8KIGludAotcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBib290
 YmxvY2sgKmJvb3QsIGludCBubywgc3RydWN0IGZhdEVudHJ5ICoqZnApCity
 ZWFkZmF0KGludCBmcywgc3RydWN0IGJvb3RibG9jayAqYm9vdCwgdV9pbnQg
 bm8sIHN0cnVjdCBmYXRFbnRyeSAqKmZwKQogewogCXN0cnVjdCBmYXRFbnRy
 eSAqZmF0OwogCXVfY2hhciAqYnVmZmVyLCAqcDsKIAljbF90IGNsOwogCWlu
 dCByZXQgPSBGU09LOworCXNpemVfdCBsZW47CiAKIAlib290LT5OdW1GcmVl
 ID0gYm9vdC0+TnVtQmFkID0gMDsKIAogCWlmICghX3JlYWRmYXQoZnMsIGJv
 b3QsIG5vLCAmYnVmZmVyKSkKIAkJcmV0dXJuIEZTRkFUQUw7CiAJCQotCWZh
 dCA9IGNhbGxvYyhib290LT5OdW1DbHVzdGVycywgc2l6ZW9mKHN0cnVjdCBm
 YXRFbnRyeSkpOworCWZhdCA9IG1hbGxvYyhsZW4gPSBib290LT5OdW1DbHVz
 dGVycyAqIHNpemVvZihzdHJ1Y3QgZmF0RW50cnkpKTsKIAlpZiAoZmF0ID09
 IE5VTEwpIHsKIAkJcGVycm9yKCJObyBzcGFjZSBmb3IgRkFUIik7CiAJCWZy
 ZWUoYnVmZmVyKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQorCSh2b2lkKW1l
 bXNldChmYXQsIDAsIGxlbik7CiAKIAlpZiAoYnVmZmVyWzBdICE9IGJvb3Qt
 Pk1lZGlhCiAJICAgIHx8IGJ1ZmZlclsxXSAhPSAweGZmIHx8IGJ1ZmZlclsy
 XSAhPSAweGZmCkBAIC0zMTEsNyArMzA2LDExIEBACiAJfQogCiAJZnJlZShi
 dWZmZXIpOwotCSpmcCA9IGZhdDsKKwlpZiAocmV0ICYgRlNGQVRBTCkgewor
 CQlmcmVlKGZhdCk7CisJCSpmcCA9IE5VTEw7CisJfSBlbHNlCisJCSpmcCA9
 IGZhdDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMzEsNyArMzMwLDcgQEAK
 IH0KIAogc3RhdGljIGludAotY2x1c3RkaWZmZXIoY2xfdCBjbCwgY2xfdCAq
 Y3AxLCBjbF90ICpjcDIsIGludCBmYXRudW0pCitjbHVzdGRpZmZlcihjbF90
 IGNsLCBjbF90ICpjcDEsIGNsX3QgKmNwMiwgdV9pbnQgZmF0bnVtKQogewog
 CWlmICgqY3AxID09IENMVVNUX0ZSRUUgfHwgKmNwMSA+PSBDTFVTVF9SU1JW
 RCkgewogCQlpZiAoKmNwMiA9PSBDTFVTVF9GUkVFIHx8ICpjcDIgPj0gQ0xV
 U1RfUlNSVkQpIHsKQEAgLTM0NiwxMyArMzQ1LDEzIEBACiAJCQkJfQogCQkJ
 CXJldHVybiBGU0ZBVEFMOwogCQkJfQotCQkJcHdhcm4oIkNsdXN0ZXIgJXUg
 aXMgbWFya2VkICVzIGluIEZBVCAwLCAlcyBpbiBGQVQgJWRcbiIsCisJCQlw
 d2FybigiQ2x1c3RlciAldSBpcyBtYXJrZWQgJXMgaW4gRkFUIDAsICVzIGlu
 IEZBVCAldVxuIiwKIAkJCSAgICAgIGNsLCByc3J2ZGNsdHlwZSgqY3AxKSwg
 cnNydmRjbHR5cGUoKmNwMiksIGZhdG51bSk7CiAJCQlpZiAoYXNrKDAsICJV
 c2UgRkFUIDAncyBlbnRyeSIpKSB7CiAJCQkJKmNwMiA9ICpjcDE7CiAJCQkJ
 cmV0dXJuIEZTRkFUTU9EOwogCQkJfQotCQkJaWYgKGFzaygwLCAiVXNlIEZB
 VCAlZCdzIGVudHJ5IiwgZmF0bnVtKSkgeworCQkJaWYgKGFzaygwLCAiVXNl
 IEZBVCAldSdzIGVudHJ5IiwgZmF0bnVtKSkgewogCQkJCSpjcDEgPSAqY3Ay
 OwogCQkJCXJldHVybiBGU0ZBVE1PRDsKIAkJCX0KQEAgLTM2MCw3ICszNTks
 NyBAQAogCQl9CiAJCXB3YXJuKCJDbHVzdGVyICV1IGlzIG1hcmtlZCAlcyBp
 biBGQVQgMCwgYnV0IGNvbnRpbnVlcyB3aXRoIGNsdXN0ZXIgJXUgaW4gRkFU
 ICVkXG4iLAogCQkgICAgICBjbCwgcnNydmRjbHR5cGUoKmNwMSksICpjcDIs
 IGZhdG51bSk7Ci0JCWlmIChhc2soMCwgIlVzZSBjb250aW51YXRpb24gZnJv
 bSBGQVQgJWQiLCBmYXRudW0pKSB7CisJCWlmIChhc2soMCwgIlVzZSBjb250
 aW51YXRpb24gZnJvbSBGQVQgJXUiLCBmYXRudW0pKSB7CiAJCQkqY3AxID0g
 KmNwMjsKIAkJCXJldHVybiBGU0ZBVE1PRDsKIAkJfQpAQCAtMzcxLDcgKzM3
 MCw3IEBACiAJCXJldHVybiBGU0ZBVEFMOwogCX0KIAlpZiAoKmNwMiA9PSBD
 TFVTVF9GUkVFIHx8ICpjcDIgPj0gQ0xVU1RfUlNSVkQpIHsKLQkJcHdhcm4o
 IkNsdXN0ZXIgJXUgY29udGludWVzIHdpdGggY2x1c3RlciAldSBpbiBGQVQg
 MCwgYnV0IGlzIG1hcmtlZCAlcyBpbiBGQVQgJWRcbiIsCisJCXB3YXJuKCJD
 bHVzdGVyICV1IGNvbnRpbnVlcyB3aXRoIGNsdXN0ZXIgJXUgaW4gRkFUIDAs
 IGJ1dCBpcyBtYXJrZWQgJXMgaW4gRkFUICV1XG4iLAogCQkgICAgICBjbCwg
 KmNwMSwgcnNydmRjbHR5cGUoKmNwMiksIGZhdG51bSk7CiAJCWlmIChhc2so
 MCwgIlVzZSBjb250aW51YXRpb24gZnJvbSBGQVQgMCIpKSB7CiAJCQkqY3Ay
 ID0gKmNwMTsKQEAgLTM4MywxMyArMzgyLDEzIEBACiAJCX0KIAkJcmV0dXJu
 IEZTRVJST1I7CiAJfQotCXB3YXJuKCJDbHVzdGVyICV1IGNvbnRpbnVlcyB3
 aXRoIGNsdXN0ZXIgJXUgaW4gRkFUIDAsIGJ1dCB3aXRoIGNsdXN0ZXIgJXUg
 aW4gRkFUICVkXG4iLAorCXB3YXJuKCJDbHVzdGVyICV1IGNvbnRpbnVlcyB3
 aXRoIGNsdXN0ZXIgJXUgaW4gRkFUIDAsIGJ1dCB3aXRoIGNsdXN0ZXIgJXUg
 aW4gRkFUICV1XG4iLAogCSAgICAgIGNsLCAqY3AxLCAqY3AyLCBmYXRudW0p
 OwogCWlmIChhc2soMCwgIlVzZSBjb250aW51YXRpb24gZnJvbSBGQVQgMCIp
 KSB7CiAJCSpjcDIgPSAqY3AxOwogCQlyZXR1cm4gRlNGQVRNT0Q7CiAJfQot
 CWlmIChhc2soMCwgIlVzZSBjb250aW51YXRpb24gZnJvbSBGQVQgJWQiLCBm
 YXRudW0pKSB7CisJaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9t
 IEZBVCAldSIsIGZhdG51bSkpIHsKIAkJKmNwMSA9ICpjcDI7CiAJCXJldHVy
 biBGU0ZBVE1PRDsKIAl9CkBAIC00MDEsOCArNDAwLDggQEAKICAqIGludG8g
 dGhlIGZpcnN0IG9uZS4KICAqLwogaW50Ci1jb21wYXJlZmF0KHN0cnVjdCBi
 b290YmxvY2sgKmJvb3QsIHN0cnVjdCBmYXRFbnRyeSAqZmlyc3QsIAotICAg
 IHN0cnVjdCBmYXRFbnRyeSAqc2Vjb25kLCBpbnQgZmF0bnVtKQorY29tcGFy
 ZWZhdChzdHJ1Y3QgYm9vdGJsb2NrICpib290LCBzdHJ1Y3QgZmF0RW50cnkg
 KmZpcnN0LAorICAgIHN0cnVjdCBmYXRFbnRyeSAqc2Vjb25kLCB1X2ludCBm
 YXRudW0pCiB7CiAJY2xfdCBjbDsKIAlpbnQgcmV0ID0gRlNPSzsKQEAgLTU0
 Miw4ICs1NDEsOCBAQAogewogCXVfY2hhciAqYnVmZmVyLCAqcDsKIAljbF90
 IGNsOwotCWludCBpOwotCXVfaW50MzJfdCBmYXRzejsKKwl1X2ludCBpOwor
 CXNpemVfdCBmYXRzejsKIAlvZmZfdCBvZmY7CiAJaW50IHJldCA9IEZTT0s7
 CiAKQEAgLTYzMyw3ICs2MzIsNyBAQAogCQlvZmYgPSBib290LT5SZXNTZWN0
 b3JzICsgaSAqIGJvb3QtPkZBVHNlY3M7CiAJCW9mZiAqPSBib290LT5CeXRl
 c1BlclNlYzsKIAkJaWYgKGxzZWVrKGZzLCBvZmYsIFNFRUtfU0VUKSAhPSBv
 ZmYKLQkJICAgIHx8IHdyaXRlKGZzLCBidWZmZXIsIGZhdHN6KSAhPSBmYXRz
 eikgeworCQkgICAgfHwgKHNpemVfdCl3cml0ZShmcywgYnVmZmVyLCBmYXRz
 eikgIT0gZmF0c3opIHsKIAkJCXBlcnJvcigiVW5hYmxlIHRvIHdyaXRlIEZB
 VCIpOwogCQkJcmV0ID0gRlNGQVRBTDsgLyogUmV0dXJuIGltbWVkaWF0ZWx5
 PwkJWFhYICovCiAJCX0KQEAgLTY4MywxNyArNjgyLDYgQEAKIAkJCQlyZXQg
 PSAxOwogCQkJfQogCQl9Ci0JCWlmIChib290LT5OdW1GcmVlICYmIGZhdFti
 b290LT5GU05leHRdLm5leHQgIT0gQ0xVU1RfRlJFRSkgewotCQkJcHdhcm4o
 Ik5leHQgZnJlZSBjbHVzdGVyIGluIEZTSW5mbyBibG9jayAoJXUpIG5vdCBm
 cmVlXG4iLAotCQkJICAgICAgYm9vdC0+RlNOZXh0KTsKLQkJCWlmIChhc2so
 MSwgIkZpeCIpKQotCQkJCWZvciAoaGVhZCA9IENMVVNUX0ZJUlNUOyBoZWFk
 IDwgYm9vdC0+TnVtQ2x1c3RlcnM7IGhlYWQrKykKLQkJCQkJaWYgKGZhdFto
 ZWFkXS5uZXh0ID09IENMVVNUX0ZSRUUpIHsKLQkJCQkJCWJvb3QtPkZTTmV4
 dCA9IGhlYWQ7Ci0JCQkJCQlyZXQgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJ
 CX0KLQkJfQogCQlpZiAocmV0KQogCQkJbW9kIHw9IHdyaXRlZnNpbmZvKGRv
 c2ZzLCBib290KTsKIAl9CmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Zz
 Y2tfbXNkb3Nmcy44IGZzY2tfbXNkb3Nmcy9mc2NrX21zZG9zZnMuOAotLS0g
 ZnNja19tc2Rvc2ZzLm9yaWcvZnNja19tc2Rvc2ZzLjgJMjAxMC0wMS0wNiAx
 MTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tfbXNkb3Nmcy9mc2Nr
 X21zZG9zZnMuOAkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCArMDAw
 MApAQCAtMTEsMTMgKzExLDYgQEAKIC5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMg
 aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
 aWdodAogLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
 YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIC5cIiAgICBk
 b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
 d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2lu
 ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp
 cyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n
 IGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMg
 c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotLlwiCWFu
 ZCBXb2xmZ2FuZyBTb2xmcmFuay4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1l
 IG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
 aWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
 bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwi
 ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
 LgogLlwiCiAuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
 QVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAuXCIgSU1Q
 TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
 TywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpkaWZmIC1ydSBmc2NrX21zZG9z
 ZnMub3JpZy9tYWluLmMgZnNja19tc2Rvc2ZzL21haW4uYwotLS0gZnNja19t
 c2Rvc2ZzLm9yaWcvbWFpbi5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAw
 MDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMvbWFpbi5jCTIwMTAtMDEtMDcg
 MjI6MDk6MTMuMDAwMDAwMDAwICswMDAwCkBAIC0xMCwxMyArMTAsNiBAQAog
 ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
 cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhp
 cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
 aW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
 IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
 KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh
 dHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlz
 cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMg
 cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFydGlu
 IEh1c2VtYW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0gKiA0LiBO
 ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFt
 ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8g
 ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
 IHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
 ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
 REVEIEJZIFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1Mg
 T1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
 IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKQEAgLTQwLDcg
 KzMzLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0
 cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RkaW8u
 aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgo=
 
 
 --0-154663579-1262990178=:1420--

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org
Cc:  
Subject: Re: bin/142384: sync fsck_msdosfs with OpenBSD
Date: Sun, 10 Jan 2010 16:12:23 -0800 (PST)

 --0-1379220581-1263168743=:30404
 Content-Type: text/plain; charset=us-ascii
 
 While here,.. 
 - clarify a bit the FAT header
 - ansify a couple of functions
 
 
       
 --0-1379220581-1263168743=:30404
 Content-Type: application/octet-stream; name=patch-fsck_msdosfs
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=patch-fsck_msdosfs
 
 ZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tfbXNkb3Nm
 cy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwkyMDEwLTAx
 LTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2Zz
 L2Jvb3QuYwkyMDEwLTAxLTEwIDE4OjA3OjQ3LjAwMDAwMDAwMCArMDAwMApA
 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
 YmxvY2siKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpAQCAtMTYxLDEyICsx
 NTIsMjIgQEAKIAkJfQogCQliYWNrdXBbNjVdID0gYmxvY2tbNjVdOwkJCQkv
 KiBYWFggKi8KIAkJaWYgKG1lbWNtcChibG9jayArIDExLCBiYWNrdXAgKyAx
 MSwgNzkpKSB7Ci0JCQkvKiBDb3JyZWN0PwkJCQkJWFhYICovCi0JCQlwZmF0
 YWwoImJhY2t1cCBkb2Vzbid0IGNvbXBhcmUgdG8gcHJpbWFyeSBib290Ymxv
 Y2siKTsKLQkJCWlmIChhbHdheXNubykKLQkJCQlwZmF0YWwoIlxuIik7Ci0J
 CQllbHNlCi0JCQkJcmV0dXJuIEZTRkFUQUw7CisJCQkvKgorCQkJICogWFhY
 IFdlIHJlcXVpcmUgYSByZWZlcmVuY2UgdGhhdCBleHBsYWlucworCQkJICog
 dGhhdCB0aGVzZSBieXRlcyBuZWVkIHRvIG1hdGNoLCBvciBzaG91bGQKKwkJ
 CSAqIGRyb3AgdGhlIGNoZWNrLiAgZ2R0QE5ldEJTRCBoYXMgb2JzZXJ2ZWQK
 KwkJCSAqIGZpbGVzeXN0ZW1zIHRoYXQgd29yayBmaW5lIHVuZGVyIFdpbmRv
 d3MgWFAKKwkJCSAqIGFuZCBOZXRCU0QgdGhhdCBkbyBub3QgbWF0Y2gsIHNv
 IHRoZQorCQkJICogcmVxdWlyZW1lbnQgaXMgc3VzcGVjdC4gIEZvciBub3cs
 IGp1c3QKKwkJCSAqIHByaW50IG91dCB1c2VmdWwgaW5mb3JtYXRpb24gYW5k
 IGNvbnRpbnVlLgorCQkJICovCisJCQlwZmF0YWwoImJhY2t1cCAoYmxvY2sg
 JWQpIG1pc21hdGNoIHdpdGggcHJpbWFyeSBib290YmxvY2s6XG4iLAorCQkJ
 ICAgICAgICBib290LT5CYWNrdXApOworCQkJZm9yIChpID0gMTE7IGkgPCAx
 MSArIDkwOyBpKyspIHsKKwkJCQlpZiAoYmxvY2tbaV0gIT0gYmFja3VwW2ld
 KQorCQkJCQlwZmF0YWwoIlx0aT0lZFx0cHJpbWFyeSAweCUwMnhcdGJhY2t1
 cCAweCUwMnhcbiIsCisJCQkJCSAgICAgICBpLCBibG9ja1tpXSwgYmFja3Vw
 W2ldKTsKKwkJCX0KIAkJfQogCQkvKiBDaGVjayBiYWNrdXAgRlNJbmZvPwkJ
 CQkJWFhYICovCiAJfQpAQCAtMjMwLDkgKzIzMSw3IEBACiB9CiAKIGludAot
 d3JpdGVmc2luZm8oZG9zZnMsIGJvb3QpCi0JaW50IGRvc2ZzOwotCXN0cnVj
 dCBib290YmxvY2sgKmJvb3Q7Cit3cml0ZWZzaW5mbyhpbnQgZG9zZnMsIHN0
 cnVjdCBib290YmxvY2sgKmJvb3QpCiB7CiAJdV9jaGFyIGZzaW5mb1syICog
 RE9TQk9PVEJMT0NLU0laRV07CiAKZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9y
 aWcvY2hlY2suYyBmc2NrX21zZG9zZnMvY2hlY2suYwotLS0gZnNja19tc2Rv
 c2ZzLm9yaWcvY2hlY2suYwkyMDEwLTAxLTA2IDExOjA3OjI0LjAwMDAwMDAw
 MCArMDAwMAorKysgZnNja19tc2Rvc2ZzL2NoZWNrLmMJMjAxMC0wMS0wNyAy
 MjowOToxMy4wMDAwMDAwMDAgKzAwMDAKQEAgLTEwLDEzICsxMCw2IEBACiAg
 KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
 b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlz
 IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
 bWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
 bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
 IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0
 dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNw
 bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBw
 cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJ0aW4g
 SHVzZW1hbm4KLSAqCWFuZCBXb2xmZ2FuZyBTb2xmcmFuay4KLSAqIDQuIE5l
 aXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1l
 cyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBl
 bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
 c29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
 biBwZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
 RUQgQlkgVEhFIEFVVEhPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBP
 UgogICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
 TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpAQCAtNDAsNyAr
 MzMsNiBAQAogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3Ry
 aW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdGRpby5o
 PgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CkBA
 IC01NCw3ICs0Niw4IEBACiAJaW50IGRvc2ZzOwogCXN0cnVjdCBib290Ymxv
 Y2sgYm9vdDsKIAlzdHJ1Y3QgZmF0RW50cnkgKmZhdCA9IE5VTEw7Ci0JaW50
 IGksIGZpbmlzaF9kb3NkaXJzZWN0aW9uPTA7CisJaW50IGZpbmlzaF9kb3Nk
 aXJzZWN0aW9uPTA7CisJdV9pbnQgaTsKIAlpbnQgbW9kID0gMDsKIAlpbnQg
 cmV0ID0gODsKIApkaWZmIC1ydSBmc2NrX21zZG9zZnMub3JpZy9kaXIuYyBm
 c2NrX21zZG9zZnMvZGlyLmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Rpci5j
 CTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAwICswMDAwCisrKyBmc2Nr
 X21zZG9zZnMvZGlyLmMJMjAxMC0wMS0wOCAxNTozMDowMy4wMDAwMDAwMDAg
 KzAwMDAKQEAgLTEyLDEzICsxMiw2IEBACiAgKiAyLiBSZWRpc3RyaWJ1dGlv
 bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
 cHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
 cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAg
 ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
 IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2lu
 ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp
 cyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg
 YWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv
 ZnR3YXJlIGRldmVsb3BlZCBieSBNYXJ0aW4gSHVzZW1hbm4KLSAqCWFuZCBX
 b2xmZ2FuZyBTb2xmcmFuay4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
 dGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
 b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
 cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdp
 dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoK
 ICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUlMg
 YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgogICogSU1QTElFRCBXQVJS
 QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
 UExJRUQgV0FSUkFOVElFUwpAQCAtNDQsNyArMzcsNiBAQAogI2luY2x1ZGUg
 PHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGN0
 eXBlLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx1bmlzdGQu
 aD4KICNpbmNsdWRlIDx0aW1lLmg+CiAKQEAgLTIzMCwxMiArMjIyLDI0IEBA
 CiAJYjEgPSBib290LT5Sb290RGlyRW50cyAqIDMyOwogCWIyID0gYm9vdC0+
 U2VjUGVyQ2x1c3QgKiBib290LT5CeXRlc1BlclNlYzsKIAotCWlmICghKGJ1
 ZmZlciA9IG1hbGxvYyhiMSA+IGIyID8gYjEgOiBiMikpCi0JICAgIHx8ICEo
 ZGVsYnVmID0gbWFsbG9jKGIyKSkKLQkgICAgfHwgIShyb290RGlyID0gbmV3
 RG9zRGlyRW50cnkoKSkpIHsKLQkJcGVycm9yKCJObyBzcGFjZSBmb3IgZGly
 ZWN0b3J5Iik7CisJaWYgKChidWZmZXIgPSBtYWxsb2MoIGIxID4gYjIgPyBi
 MSA6IGIyKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoIk5vIHNwYWNlIGZvciBk
 aXJlY3RvcnkgYnVmZmVyIik7CiAJCXJldHVybiBGU0ZBVEFMOwogCX0KKwor
 CWlmICgoZGVsYnVmID0gbWFsbG9jKGIyKSkgPT0gTlVMTCkgeworCQlmcmVl
 KGJ1ZmZlcik7CisJCXBlcnJvcigiTm8gc3BhY2UgZm9yIGRpcmVjdG9yeSBk
 ZWxidWYiKTsKKwkJcmV0dXJuIEZTRkFUQUw7CisJfQorCisJaWYgKChyb290
 RGlyID0gbmV3RG9zRGlyRW50cnkoKSkgPT0gTlVMTCkgeworCQlmcmVlKGJ1
 ZmZlcik7CisJCWZyZWUoZGVsYnVmKTsKKwkJcGVycm9yKCJObyBzcGFjZSBm
 b3IgZGlyZWN0b3J5IGVudHJ5Iik7CisJCXJldHVybiBGU0ZBVEFMOworCX0K
 KwogCW1lbXNldChyb290RGlyLCAwLCBzaXplb2YgKnJvb3REaXIpOwogCWlm
 IChib290LT5mbGFncyAmIEZBVDMyKSB7CiAJCWlmIChib290LT5Sb290Q2wg
 PCBDTFVTVF9GSVJTVCB8fCBib290LT5Sb290Q2wgPj0gYm9vdC0+TnVtQ2x1
 c3RlcnMpIHsKQEAgLTM2Nyw3ICszNzEsOCBAQAogCQkJCXJldHVybiBGU0ZB
 VEFMOwogCQkJc3RhcnQgPSBidWZmZXI7CiAJCX0KLQkJaWYgKGVuZGNsID09
 IGN1cmNsKQorCQkvKiBzdGFydGNsIGlzIDwgQ0xVU1RfRklSU1QgZm9yICFm
 YXQzMiByb290ICovCisJCWlmICgoZW5kY2wgPT0gY3VyY2wpIHx8IChzdGFy
 dGNsIDwgQ0xVU1RfRklSU1QpKQogCQkJZm9yICg7IHN0YXJ0IDwgZW5kOyBz
 dGFydCArPSAzMikKIAkJCQkqc3RhcnQgPSBTTE9UX0RFTEVURUQ7CiAJCXJl
 dHVybiBGU0RJUk1PRDsKQEAgLTM4NSw3ICszOTAsNyBAQAogCS8qCiAJICog
 Q2hlY2sgc2l6ZSBvbiBvcmRpbmFyeSBmaWxlcwogCSAqLwotCWludDMyX3Qg
 cGh5c2ljYWxTaXplOworCXVfaW50MzJfdCBwaHlzaWNhbFNpemU7CiAKIAlp
 ZiAoZGlyLT5oZWFkID09IENMVVNUX0ZSRUUpCiAJCXBoeXNpY2FsU2l6ZSA9
 IDA7CkBAIC02NDQsNyArNjQ5LDggQEAKIAkJCQlkaXJlbnQuaGVhZCB8PSAo
 cFsyMF0gPDwgMTYpIHwgKHBbMjFdIDw8IDI0KTsKIAkJCWRpcmVudC5zaXpl
 ID0gcFsyOF0gfCAocFsyOV0gPDwgOCkgfCAocFszMF0gPDwgMTYpIHwgKHBb
 MzFdIDw8IDI0KTsKIAkJCWlmICh2YWxsZm4pIHsKLQkJCQlzdHJjcHkoZGly
 ZW50LmxuYW1lLCBsb25nTmFtZSk7CisJCQkJc3RybGNweShkaXJlbnQubG5h
 bWUsIGxvbmdOYW1lLAorCQkJCSAgICBzaXplb2YoZGlyZW50LmxuYW1lKSk7
 CiAJCQkJbG9uZ05hbWVbMF0gPSAnXDAnOwogCQkJCXNob3J0U3VtID0gLTE7
 CiAJCQl9CkBAIC04MzIsNiArODM4LDEwIEBACiAJCQl9CiAJCQlib290LT5O
 dW1GaWxlcysrOwogCQl9CisKKwkJaWYgKCEoYm9vdC0+ZmxhZ3MgJiBGQVQz
 MikgJiYgIWRpci0+cGFyZW50KQorCQkJYnJlYWs7CisKIAkJaWYgKG1vZCAm
 IFRISVNNT0QpIHsKIAkJCWxhc3QgKj0gMzI7CiAJCQlpZiAobHNlZWsoZiwg
 b2ZmLCBTRUVLX1NFVCkgIT0gb2ZmCkBAIC04NDcsNiArODU3LDE5IEBACiAJ
 CQkJaW52bGZuID8gaW52bGZuIDogdmFsbGZuLCBwLAogCQkJCWludmxmbiA/
 IGludmNsIDogdmFsY2wsIC0xLCAwLAogCQkJCWZ1bGxwYXRoKGRpciksIDEp
 OworCisJLyogVGhlIHJvb3QgZGlyZWN0b3J5IG9mIG5vbiBmYXQzMiBmaWxl
 c3lzdGVtcyBpcyBpbiBhIHNwZWNpYWwKKwkgKiBhcmVhIGFuZCBtYXkgaGF2
 ZSBiZWVuIG1vZGlmaWVkIGFib3ZlIHdpdGhvdXQgYmVpbmcgd3JpdHRlbiBv
 dXQuCisJICovCisJaWYgKChtb2QgJiBGU0RJUk1PRCkgJiYgIShib290LT5m
 bGFncyAmIEZBVDMyKSAmJiAhZGlyLT5wYXJlbnQpIHsKKwkJbGFzdCAqPSAz
 MjsKKwkJaWYgKGxzZWVrKGYsIG9mZiwgU0VFS19TRVQpICE9IG9mZgorCQkg
 ICAgfHwgd3JpdGUoZiwgYnVmZmVyLCBsYXN0KSAhPSBsYXN0KSB7CisJCQlw
 ZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBkaXJlY3RvcnkiKTsKKwkJCXJldHVy
 biBGU0ZBVEFMOworCQl9CisJCW1vZCAmPSB+VEhJU01PRDsKKwl9CiAJcmV0
 dXJuIG1vZCAmIH5USElTTU9EOwogfQogCkBAIC05MzYsNyArOTU5LDcgQEAK
 IAkJbGZvZmYgPSBsZmNsICogYm9vdC0+Q2x1c3RlclNpemUKIAkJICAgICsg
 Ym9vdC0+Q2x1c3Rlck9mZnNldCAqIGJvb3QtPkJ5dGVzUGVyU2VjOwogCQlp
 ZiAobHNlZWsoZG9zZnMsIGxmb2ZmLCBTRUVLX1NFVCkgIT0gbGZvZmYKLQkJ
 ICAgIHx8IHJlYWQoZG9zZnMsIGxmYnVmLCBib290LT5DbHVzdGVyU2l6ZSkg
 IT0gYm9vdC0+Q2x1c3RlclNpemUpIHsKKwkJICAgIHx8IChzaXplX3QpcmVh
 ZChkb3NmcywgbGZidWYsIGJvb3QtPkNsdXN0ZXJTaXplKSAhPSBib290LT5D
 bHVzdGVyU2l6ZSkgewogCQkJcGVycm9yKCJjb3VsZCBub3QgcmVhZCBMT1NU
 LkRJUiIpOwogCQkJcmV0dXJuIEZTRkFUQUw7CiAJCX0KQEAgLTk2Niw3ICs5
 ODksNyBAQAogCXBbMzFdID0gKHVfY2hhcikoZC5zaXplID4+IDI0KTsKIAlm
 YXRbaGVhZF0uZmxhZ3MgfD0gRkFUX1VTRUQ7CiAJaWYgKGxzZWVrKGRvc2Zz
 LCBsZm9mZiwgU0VFS19TRVQpICE9IGxmb2ZmCi0JICAgIHx8IHdyaXRlKGRv
 c2ZzLCBsZmJ1ZiwgYm9vdC0+Q2x1c3RlclNpemUpICE9IGJvb3QtPkNsdXN0
 ZXJTaXplKSB7CisJICAgIHx8IChzaXplX3Qpd3JpdGUoZG9zZnMsIGxmYnVm
 LCBib290LT5DbHVzdGVyU2l6ZSkgIT0gYm9vdC0+Q2x1c3RlclNpemUpIHsK
 IAkJcGVycm9yKCJjb3VsZCBub3Qgd3JpdGUgTE9TVC5ESVIiKTsKIAkJcmV0
 dXJuIEZTRkFUQUw7CiAJfQpkaWZmIC1ydSBmc2NrX21zZG9zZnMub3JpZy9k
 b3Nmcy5oIGZzY2tfbXNkb3Nmcy9kb3Nmcy5oCi0tLSBmc2NrX21zZG9zZnMu
 b3JpZy9kb3Nmcy5oCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAwICsw
 MDAwCisrKyBmc2NrX21zZG9zZnMvZG9zZnMuaAkyMDEwLTAxLTA4IDE5OjQy
 OjA1LjAwMDAwMDAwMCArMDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIu
 IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
 ZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlz
 dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
 aW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
 cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
 QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz
 IG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkg
 dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1
 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNl
 bWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhl
 ciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9m
 IGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
 c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
 d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
 cm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
 WSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAg
 KiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
 VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC01NSw4ICs0OCwx
 MyBAQAogCXVfaW50CUZBVHNtYWxsOwkJLyogbnVtYmVyIG9mIHNlY3RvcnMg
 cGVyIEZBVCAqLwogCXVfaW50CVNlY1BlclRyYWNrOwkJLyogc2VjdG9ycyBw
 ZXIgdHJhY2sgKi8KIAl1X2ludAlIZWFkczsJCQkvKiBudW1iZXIgb2YgaGVh
 ZHMgKi8KLQl1X2ludDMyX3QgU2VjdG9yczsJCS8qIHRvdGFsIG51bWJlciBv
 ZiBzZWN0b3JzICovCiAJdV9pbnQzMl90IEhpZGRlblNlY3M7CQkvKiAjIG9m
 IGhpZGRlbiBzZWN0b3JzICovCisJdV9pbnQzMl90IFNlY3RvcnM7CQkvKiB0
 b3RhbCBudW1iZXIgb2Ygc2VjdG9ycyAqLworI2RlZmluZQlGQVQzMgkJMQkJ
 LyogdGhpcyBpcyBhIEZBVDMyIGZpbGUgc3lzdGVtICovCisJCQkJCS8qCisJ
 CQkJCSAqIE1heWJlLCB3ZSBzaG91bGQgc2VwYXJhdGUgb3V0CisJCQkJCSAq
 IHZhcmlvdXMgcGFydHMgb2YgRkFUMzI/CVhYWAorCQkJCQkgKi8KIAl1X2lu
 dDMyX3QgSHVnZVNlY3RvcnM7CQkvKiAjIG9mIHNlY3RvcnMgaWYgYnBiU2Vj
 dG9ycyA9PSAwICovCiAJdV9pbnQJRlNJbmZvOwkJCS8qIEZTSW5mbyBzZWN0
 b3IgKi8KIAl1X2ludAlCYWNrdXA7CQkJLyogQmFja3VwIG9mIEJvb3RibG9j
 a3MgKi8KQEAgLTY2LDExICs2NCw2IEBACiAKIAkvKiBhbmQgc29tZSBtb3Jl
 IGNhbGN1bGF0ZWQgdmFsdWVzICovCiAJdV9pbnQJZmxhZ3M7CQkJLyogc29t
 ZSBmbGFnczogKi8KLSNkZWZpbmUJRkFUMzIJCTEJCS8qIHRoaXMgaXMgYSBG
 QVQzMiBmaWxlIHN5c3RlbSAqLwotCQkJCQkvKgotCQkJCQkgKiBNYXliZSwg
 d2Ugc2hvdWxkIHNlcGFyYXRlIG91dAotCQkJCQkgKiB2YXJpb3VzIHBhcnRz
 IG9mIEZBVDMyPwlYWFgKLQkJCQkJICovCiAJaW50CVZhbGlkRmF0OwkJLyog
 dmFsaWQgZmF0IGlmIEZBVDMyIG5vbi1taXJyb3JlZCAqLwogCWNsX3QJQ2x1
 c3RNYXNrOwkJLyogbWFzayBmb3IgZW50cmllcyBpbiBGQVQgKi8KIAljbF90
 CU51bUNsdXN0ZXJzOwkJLyogIyBvZiBlbnRyaWVzIGluIGEgRkFUICovCmRp
 ZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2V4dC5oIGZzY2tfbXNkb3Nmcy9l
 eHQuaAotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZXh0LmgJMjAxMC0wMS0wNiAx
 MTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tfbXNkb3Nmcy9leHQu
 aAkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCArMDAwMApAQCAtMTAs
 MTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
 Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAg
 ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
 bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9u
 IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
 dHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt
 ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0g
 KiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1l
 bnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv
 cGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZy
 YW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0
 eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1h
 eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
 dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZp
 YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZU
 V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5E
 IEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
 RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
 SUVTCkBAIC03NywxMiArNzAsMTIgQEAKICNkZWZpbmUJRlNESVJNT0QJMgkJ
 LyogU29tZSBkaXJlY3Rvcnkgd2FzIG1vZGlmaWVkICovCiAjZGVmaW5lCUZT
 RkFUTU9ECTQJCS8qIFRoZSBGQVQgd2FzIG1vZGlmaWVkICovCiAjZGVmaW5l
 CUZTRVJST1IJCTgJCS8qIFNvbWUgdW5yZWNvdmVyZWQgZXJyb3IgcmVtYWlu
 cyAqLwotI2RlZmluZQlGU0ZBVEFMCQkxNgkJLyogU29tZSB1bnJlY292ZXJh
 YmxlIGVycm9yIG9jY3VyZWQgKi8KKyNkZWZpbmUJRlNGQVRBTAkJMTYJCS8q
 IFNvbWUgdW5yZWNvdmVyYWJsZSBlcnJvciBvY2N1cnJlZCAqLwogI2RlZmlu
 ZSBGU0RJUlRZCQkzMgkJLyogRmlsZSBzeXN0ZW0gaXMgZGlydHkgKi8KICNk
 ZWZpbmUgRlNGSVhGQVQJNjQJCS8qIEZpeCBmaWxlIHN5c3RlbSBGQVQgKi8K
 IAogLyoKLSAqIHJlYWQgYSBib290IGJsb2NrIGluIGEgbWFjaGluZSBpbmRl
 cGVuZGVuZCBmYXNoaW9uIGFuZCB0cmFuc2xhdGUKKyAqIHJlYWQgYSBib290
 IGJsb2NrIGluIGEgbWFjaGluZSBpbmRlcGVuZGVudCBmYXNoaW9uIGFuZCB0
 cmFuc2xhdGUKICAqIGl0IGludG8gb3VyIHN0cnVjdCBib290YmxvY2suCiAg
 Ki8KIGludCByZWFkYm9vdChpbnQsIHN0cnVjdCBib290YmxvY2sgKik7CkBA
 IC05NiwxMyArODksMTMgQEAKICAqIFJlYWQgb25lIG9mIHRoZSBGQVQgY29w
 aWVzIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXcKICAqIGFsbG9j
 YXRlZCBhcnJheSBob2xkaW5nIG91ciBkZXNjcmlwdGlvbiBvZiBpdC4KICAq
 LwotaW50IHJlYWRmYXQoaW50LCBzdHJ1Y3QgYm9vdGJsb2NrICosIGludCwg
 c3RydWN0IGZhdEVudHJ5ICoqKTsKK2ludCByZWFkZmF0KGludCwgc3RydWN0
 IGJvb3RibG9jayAqLCB1X2ludCwgc3RydWN0IGZhdEVudHJ5ICoqKTsKIAog
 LyoKICAqIENoZWNrIHR3byBGQVQgY29waWVzIGZvciBjb25zaXN0ZW5jeSBh
 bmQgbWVyZ2UgY2hhbmdlcyBpbnRvIHRoZQotICogZmlyc3QgaWYgbmVjY2Vz
 c2FyeS4KKyAqIGZpcnN0IGlmIG5lY2Vzc2FyeS4KICAqLwotaW50IGNvbXBh
 cmVmYXQoc3RydWN0IGJvb3RibG9jayAqLCBzdHJ1Y3QgZmF0RW50cnkgKiwg
 c3RydWN0IGZhdEVudHJ5ICosIGludCk7CitpbnQgY29tcGFyZWZhdChzdHJ1
 Y3QgYm9vdGJsb2NrICosIHN0cnVjdCBmYXRFbnRyeSAqLCBzdHJ1Y3QgZmF0
 RW50cnkgKiwgdV9pbnQpOwogCiAvKgogICogQ2hlY2sgYSBGQVQKZGlmZiAt
 cnUgZnNja19tc2Rvc2ZzLm9yaWcvZmF0LmMgZnNja19tc2Rvc2ZzL2ZhdC5j
 Ci0tLSBmc2NrX21zZG9zZnMub3JpZy9mYXQuYwkyMDEwLTAxLTA2IDExOjA3
 OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2ZzL2ZhdC5jCTIw
 MTAtMDEtMDcgMjI6MTM6MzEuMDAwMDAwMDAwICswMDAwCkBAIC0xMCwxMyAr
 MTAsNiBAQAogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
 IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5v
 dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
 bmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5k
 L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
 dXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp
 b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAg
 IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoK
 LSAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg
 YnkgTWFydGluIEh1c2VtYW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsu
 Ci0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v
 ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJl
 IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
 ZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHBy
 aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJF
 IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
 IEVYUFJFU1MgT1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
 LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMK
 QEAgLTQ3LDEwICs0MCwxMCBAQAogI2luY2x1ZGUgImV4dC5oIgogI2luY2x1
 ZGUgImZzdXRpbC5oIgogCi1zdGF0aWMgaW50IGNoZWNrY2xudW0oc3RydWN0
 IGJvb3RibG9jayAqLCBpbnQsIGNsX3QsIGNsX3QgKik7Ci1zdGF0aWMgaW50
 IGNsdXN0ZGlmZmVyKGNsX3QsIGNsX3QgKiwgY2xfdCAqLCBpbnQpOworc3Rh
 dGljIGludCBjaGVja2NsbnVtKHN0cnVjdCBib290YmxvY2sgKiwgdV9pbnQs
 IGNsX3QsIGNsX3QgKik7CitzdGF0aWMgaW50IGNsdXN0ZGlmZmVyKGNsX3Qs
 IGNsX3QgKiwgY2xfdCAqLCB1X2ludCk7CiBzdGF0aWMgaW50IHRyeWNsZWFy
 KHN0cnVjdCBib290YmxvY2sgKiwgc3RydWN0IGZhdEVudHJ5ICosIGNsX3Qs
 IGNsX3QgKik7Ci1zdGF0aWMgaW50IF9yZWFkZmF0KGludCwgc3RydWN0IGJv
 b3RibG9jayAqLCBpbnQsIHVfY2hhciAqKik7CitzdGF0aWMgaW50IF9yZWFk
 ZmF0KGludCwgc3RydWN0IGJvb3RibG9jayAqLCB1X2ludCwgdV9jaGFyICoq
 KTsKIAogLyotCiAgKiBUaGUgZmlyc3QgMiBGQVQgZW50cmllcyBjb250YWlu
 IHBzZXVkby1jbHVzdGVyIG51bWJlcnMgd2l0aCB0aGUgZm9sbG93aW5nCkBA
 IC0xMzUsNyArMTI4LDcgQEAKICAqIENoZWNrIGEgY2x1c3RlciBudW1iZXIg
 Zm9yIHZhbGlkIHZhbHVlCiAgKi8KIHN0YXRpYyBpbnQKLWNoZWNrY2xudW0o
 c3RydWN0IGJvb3RibG9jayAqYm9vdCwgaW50IGZhdCwgY2xfdCBjbCwgY2xf
 dCAqbmV4dCkKK2NoZWNrY2xudW0oc3RydWN0IGJvb3RibG9jayAqYm9vdCwg
 dV9pbnQgZmF0LCBjbF90IGNsLCBjbF90ICpuZXh0KQogewogCWlmICgqbmV4
 dCA+PSAoQ0xVU1RfUlNSVkQmYm9vdC0+Q2x1c3RNYXNrKSkKIAkJKm5leHQg
 fD0gfmJvb3QtPkNsdXN0TWFzazsKQEAgLTE2Niw3ICsxNTksNyBAQAogICog
 UmVhZCBhIEZBVCBmcm9tIGRpc2suIFJldHVybnMgMSBpZiBzdWNjZXNzZnVs
 LCAwIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGludAotX3JlYWRmYXQoaW50
 IGZzLCBzdHJ1Y3QgYm9vdGJsb2NrICpib290LCBpbnQgbm8sIHVfY2hhciAq
 KmJ1ZmZlcikKK19yZWFkZmF0KGludCBmcywgc3RydWN0IGJvb3RibG9jayAq
 Ym9vdCwgdV9pbnQgbm8sIHVfY2hhciAqKmJ1ZmZlcikKIHsKIAlvZmZfdCBv
 ZmY7CiAKQEAgLTE4NCw3ICsxNzcsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAK
 LQlpZiAocmVhZChmcywgKmJ1ZmZlciwgYm9vdC0+RkFUc2VjcyAqIGJvb3Qt
 PkJ5dGVzUGVyU2VjKQorCWlmICgoc2l6ZV90KXJlYWQoZnMsICpidWZmZXIs
 IGJvb3QtPkZBVHNlY3MgKiBib290LT5CeXRlc1BlclNlYykKIAkgICAgIT0g
 Ym9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKSB7CiAJCXBlcnJv
 cigiVW5hYmxlIHRvIHJlYWQgRkFUIik7CiAJCWdvdG8gZXJyOwpAQCAtMjAx
 LDI0ICsxOTQsMjYgQEAKICAqIFJlYWQgYSBGQVQgYW5kIGRlY29kZSBpdCBp
 bnRvIGludGVybmFsIGZvcm1hdAogICovCiBpbnQKLXJlYWRmYXQoaW50IGZz
 LCBzdHJ1Y3QgYm9vdGJsb2NrICpib290LCBpbnQgbm8sIHN0cnVjdCBmYXRF
 bnRyeSAqKmZwKQorcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBib290YmxvY2sg
 KmJvb3QsIHVfaW50IG5vLCBzdHJ1Y3QgZmF0RW50cnkgKipmcCkKIHsKIAlz
 dHJ1Y3QgZmF0RW50cnkgKmZhdDsKIAl1X2NoYXIgKmJ1ZmZlciwgKnA7CiAJ
 Y2xfdCBjbDsKIAlpbnQgcmV0ID0gRlNPSzsKKwlzaXplX3QgbGVuOwogCiAJ
 Ym9vdC0+TnVtRnJlZSA9IGJvb3QtPk51bUJhZCA9IDA7CiAKIAlpZiAoIV9y
 ZWFkZmF0KGZzLCBib290LCBubywgJmJ1ZmZlcikpCiAJCXJldHVybiBGU0ZB
 VEFMOwogCQkKLQlmYXQgPSBjYWxsb2MoYm9vdC0+TnVtQ2x1c3RlcnMsIHNp
 emVvZihzdHJ1Y3QgZmF0RW50cnkpKTsKKwlmYXQgPSBtYWxsb2MobGVuID0g
 Ym9vdC0+TnVtQ2x1c3RlcnMgKiBzaXplb2Yoc3RydWN0IGZhdEVudHJ5KSk7
 CiAJaWYgKGZhdCA9PSBOVUxMKSB7CiAJCXBlcnJvcigiTm8gc3BhY2UgZm9y
 IEZBVCIpOwogCQlmcmVlKGJ1ZmZlcik7CiAJCXJldHVybiBGU0ZBVEFMOwog
 CX0KKwkodm9pZCltZW1zZXQoZmF0LCAwLCBsZW4pOwogCiAJaWYgKGJ1ZmZl
 clswXSAhPSBib290LT5NZWRpYQogCSAgICB8fCBidWZmZXJbMV0gIT0gMHhm
 ZiB8fCBidWZmZXJbMl0gIT0gMHhmZgpAQCAtMzExLDcgKzMwNiwxMSBAQAog
 CX0KIAogCWZyZWUoYnVmZmVyKTsKLQkqZnAgPSBmYXQ7CisJaWYgKHJldCAm
 IEZTRkFUQUwpIHsKKwkJZnJlZShmYXQpOworCQkqZnAgPSBOVUxMOworCX0g
 ZWxzZQorCQkqZnAgPSBmYXQ7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzMx
 LDcgKzMzMCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNsdXN0ZGlmZmVyKGNs
 X3QgY2wsIGNsX3QgKmNwMSwgY2xfdCAqY3AyLCBpbnQgZmF0bnVtKQorY2x1
 c3RkaWZmZXIoY2xfdCBjbCwgY2xfdCAqY3AxLCBjbF90ICpjcDIsIHVfaW50
 IGZhdG51bSkKIHsKIAlpZiAoKmNwMSA9PSBDTFVTVF9GUkVFIHx8ICpjcDEg
 Pj0gQ0xVU1RfUlNSVkQpIHsKIAkJaWYgKCpjcDIgPT0gQ0xVU1RfRlJFRSB8
 fCAqY3AyID49IENMVVNUX1JTUlZEKSB7CkBAIC0zNDYsMTMgKzM0NSwxMyBA
 QAogCQkJCX0KIAkJCQlyZXR1cm4gRlNGQVRBTDsKIAkJCX0KLQkJCXB3YXJu
 KCJDbHVzdGVyICV1IGlzIG1hcmtlZCAlcyBpbiBGQVQgMCwgJXMgaW4gRkFU
 ICVkXG4iLAorCQkJcHdhcm4oIkNsdXN0ZXIgJXUgaXMgbWFya2VkICVzIGlu
 IEZBVCAwLCAlcyBpbiBGQVQgJXVcbiIsCiAJCQkgICAgICBjbCwgcnNydmRj
 bHR5cGUoKmNwMSksIHJzcnZkY2x0eXBlKCpjcDIpLCBmYXRudW0pOwogCQkJ
 aWYgKGFzaygwLCAiVXNlIEZBVCAwJ3MgZW50cnkiKSkgewogCQkJCSpjcDIg
 PSAqY3AxOwogCQkJCXJldHVybiBGU0ZBVE1PRDsKIAkJCX0KLQkJCWlmIChh
 c2soMCwgIlVzZSBGQVQgJWQncyBlbnRyeSIsIGZhdG51bSkpIHsKKwkJCWlm
 IChhc2soMCwgIlVzZSBGQVQgJXUncyBlbnRyeSIsIGZhdG51bSkpIHsKIAkJ
 CQkqY3AxID0gKmNwMjsKIAkJCQlyZXR1cm4gRlNGQVRNT0Q7CiAJCQl9CkBA
 IC0zNjAsNyArMzU5LDcgQEAKIAkJfQogCQlwd2FybigiQ2x1c3RlciAldSBp
 cyBtYXJrZWQgJXMgaW4gRkFUIDAsIGJ1dCBjb250aW51ZXMgd2l0aCBjbHVz
 dGVyICV1IGluIEZBVCAlZFxuIiwKIAkJICAgICAgY2wsIHJzcnZkY2x0eXBl
 KCpjcDEpLCAqY3AyLCBmYXRudW0pOwotCQlpZiAoYXNrKDAsICJVc2UgY29u
 dGludWF0aW9uIGZyb20gRkFUICVkIiwgZmF0bnVtKSkgeworCQlpZiAoYXNr
 KDAsICJVc2UgY29udGludWF0aW9uIGZyb20gRkFUICV1IiwgZmF0bnVtKSkg
 ewogCQkJKmNwMSA9ICpjcDI7CiAJCQlyZXR1cm4gRlNGQVRNT0Q7CiAJCX0K
 QEAgLTM3MSw3ICszNzAsNyBAQAogCQlyZXR1cm4gRlNGQVRBTDsKIAl9CiAJ
 aWYgKCpjcDIgPT0gQ0xVU1RfRlJFRSB8fCAqY3AyID49IENMVVNUX1JTUlZE
 KSB7Ci0JCXB3YXJuKCJDbHVzdGVyICV1IGNvbnRpbnVlcyB3aXRoIGNsdXN0
 ZXIgJXUgaW4gRkFUIDAsIGJ1dCBpcyBtYXJrZWQgJXMgaW4gRkFUICVkXG4i
 LAorCQlwd2FybigiQ2x1c3RlciAldSBjb250aW51ZXMgd2l0aCBjbHVzdGVy
 ICV1IGluIEZBVCAwLCBidXQgaXMgbWFya2VkICVzIGluIEZBVCAldVxuIiwK
 IAkJICAgICAgY2wsICpjcDEsIHJzcnZkY2x0eXBlKCpjcDIpLCBmYXRudW0p
 OwogCQlpZiAoYXNrKDAsICJVc2UgY29udGludWF0aW9uIGZyb20gRkFUIDAi
 KSkgewogCQkJKmNwMiA9ICpjcDE7CkBAIC0zODMsMTMgKzM4MiwxMyBAQAog
 CQl9CiAJCXJldHVybiBGU0VSUk9SOwogCX0KLQlwd2FybigiQ2x1c3RlciAl
 dSBjb250aW51ZXMgd2l0aCBjbHVzdGVyICV1IGluIEZBVCAwLCBidXQgd2l0
 aCBjbHVzdGVyICV1IGluIEZBVCAlZFxuIiwKKwlwd2FybigiQ2x1c3RlciAl
 dSBjb250aW51ZXMgd2l0aCBjbHVzdGVyICV1IGluIEZBVCAwLCBidXQgd2l0
 aCBjbHVzdGVyICV1IGluIEZBVCAldVxuIiwKIAkgICAgICBjbCwgKmNwMSwg
 KmNwMiwgZmF0bnVtKTsKIAlpZiAoYXNrKDAsICJVc2UgY29udGludWF0aW9u
 IGZyb20gRkFUIDAiKSkgewogCQkqY3AyID0gKmNwMTsKIAkJcmV0dXJuIEZT
 RkFUTU9EOwogCX0KLQlpZiAoYXNrKDAsICJVc2UgY29udGludWF0aW9uIGZy
 b20gRkFUICVkIiwgZmF0bnVtKSkgeworCWlmIChhc2soMCwgIlVzZSBjb250
 aW51YXRpb24gZnJvbSBGQVQgJXUiLCBmYXRudW0pKSB7CiAJCSpjcDEgPSAq
 Y3AyOwogCQlyZXR1cm4gRlNGQVRNT0Q7CiAJfQpAQCAtNDAxLDggKzQwMCw4
 IEBACiAgKiBpbnRvIHRoZSBmaXJzdCBvbmUuCiAgKi8KIGludAotY29tcGFy
 ZWZhdChzdHJ1Y3QgYm9vdGJsb2NrICpib290LCBzdHJ1Y3QgZmF0RW50cnkg
 KmZpcnN0LCAKLSAgICBzdHJ1Y3QgZmF0RW50cnkgKnNlY29uZCwgaW50IGZh
 dG51bSkKK2NvbXBhcmVmYXQoc3RydWN0IGJvb3RibG9jayAqYm9vdCwgc3Ry
 dWN0IGZhdEVudHJ5ICpmaXJzdCwKKyAgICBzdHJ1Y3QgZmF0RW50cnkgKnNl
 Y29uZCwgdV9pbnQgZmF0bnVtKQogewogCWNsX3QgY2w7CiAJaW50IHJldCA9
 IEZTT0s7CkBAIC01NDIsOCArNTQxLDggQEAKIHsKIAl1X2NoYXIgKmJ1ZmZl
 ciwgKnA7CiAJY2xfdCBjbDsKLQlpbnQgaTsKLQl1X2ludDMyX3QgZmF0c3o7
 CisJdV9pbnQgaTsKKwlzaXplX3QgZmF0c3o7CiAJb2ZmX3Qgb2ZmOwogCWlu
 dCByZXQgPSBGU09LOwogCkBAIC02MzMsNyArNjMyLDcgQEAKIAkJb2ZmID0g
 Ym9vdC0+UmVzU2VjdG9ycyArIGkgKiBib290LT5GQVRzZWNzOwogCQlvZmYg
 Kj0gYm9vdC0+Qnl0ZXNQZXJTZWM7CiAJCWlmIChsc2Vlayhmcywgb2ZmLCBT
 RUVLX1NFVCkgIT0gb2ZmCi0JCSAgICB8fCB3cml0ZShmcywgYnVmZmVyLCBm
 YXRzeikgIT0gZmF0c3opIHsKKwkJICAgIHx8IChzaXplX3Qpd3JpdGUoZnMs
 IGJ1ZmZlciwgZmF0c3opICE9IGZhdHN6KSB7CiAJCQlwZXJyb3IoIlVuYWJs
 ZSB0byB3cml0ZSBGQVQiKTsKIAkJCXJldCA9IEZTRkFUQUw7IC8qIFJldHVy
 biBpbW1lZGlhdGVseT8JCVhYWCAqLwogCQl9CkBAIC02ODMsMTcgKzY4Miw2
 IEBACiAJCQkJcmV0ID0gMTsKIAkJCX0KIAkJfQotCQlpZiAoYm9vdC0+TnVt
 RnJlZSAmJiBmYXRbYm9vdC0+RlNOZXh0XS5uZXh0ICE9IENMVVNUX0ZSRUUp
 IHsKLQkJCXB3YXJuKCJOZXh0IGZyZWUgY2x1c3RlciBpbiBGU0luZm8gYmxv
 Y2sgKCV1KSBub3QgZnJlZVxuIiwKLQkJCSAgICAgIGJvb3QtPkZTTmV4dCk7
 Ci0JCQlpZiAoYXNrKDEsICJGaXgiKSkKLQkJCQlmb3IgKGhlYWQgPSBDTFVT
 VF9GSVJTVDsgaGVhZCA8IGJvb3QtPk51bUNsdXN0ZXJzOyBoZWFkKyspCi0J
 CQkJCWlmIChmYXRbaGVhZF0ubmV4dCA9PSBDTFVTVF9GUkVFKSB7Ci0JCQkJ
 CQlib290LT5GU05leHQgPSBoZWFkOwotCQkJCQkJcmV0ID0gMTsKLQkJCQkJ
 CWJyZWFrOwotCQkJCQl9Ci0JCX0KIAkJaWYgKHJldCkKIAkJCW1vZCB8PSB3
 cml0ZWZzaW5mbyhkb3NmcywgYm9vdCk7CiAJfQpkaWZmIC1ydSBmc2NrX21z
 ZG9zZnMub3JpZy9mc2NrX21zZG9zZnMuOCBmc2NrX21zZG9zZnMvZnNja19t
 c2Rvc2ZzLjgKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2ZzY2tfbXNkb3Nmcy44
 CTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAwICswMDAwCisrKyBmc2Nr
 X21zZG9zZnMvZnNja19tc2Rvc2ZzLjgJMjAxMC0wMS0wNyAyMjowOToxMy4w
 MDAwMDAwMDAgKzAwMDAKQEAgLTExLDEzICsxMSw2IEBACiAuXCIgMi4gUmVk
 aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
 ZSBhYm92ZSBjb3B5cmlnaHQKIC5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
 ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
 dGhlCiAuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
 YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBB
 bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg
 b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkg
 dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9k
 dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJ0aW4gSHVz
 ZW1hbm4KLS5cIglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0uXCIgNC4gTmVp
 dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
 IG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBl
 bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
 c29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
 ZW4gcGVybWlzc2lvbi4KIC5cIgogLlwiIFRISVMgU09GVFdBUkUgSVMgUFJP
 VklERUQgQlkgVEhFIEFVVEhPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
 UyBPUgogLlwiIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
 Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKZGlmZiAt
 cnUgZnNja19tc2Rvc2ZzLm9yaWcvbWFpbi5jIGZzY2tfbXNkb3Nmcy9tYWlu
 LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL21haW4uYwkyMDEwLTAxLTA2IDEx
 OjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2ZzL21haW4u
 YwkyMDEwLTAxLTA3IDIyOjA5OjEzLjAwMDAwMDAwMCArMDAwMApAQCAtMTAs
 MTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
 Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAg
 ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
 bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9u
 IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
 dHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt
 ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0g
 KiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1l
 bnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv
 cGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZy
 YW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0
 eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1h
 eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
 dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZp
 YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZU
 V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5E
 IEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
 RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
 SUVTCkBAIC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4K
 ICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2lu
 Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVk
 ZSA8ZXJybm8uaD4K
 
 --0-1379220581-1263168743=:30404--

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
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--

From: "Pedro F. Giffuni" <giffunip@tutopia.com>
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/142384: [patch] sync fsck_msdosfs(8) with OpenBSD
Date: Sat, 27 Mar 2010 10:46:48 -0700 (PDT)

 --0-1389502456-1269712008=:82651
 Content-Type: text/plain; charset=utf-8
 Content-Transfer-Encoding: quoted-printable
 
 As a reminder before this gets lost ...=0A=0AAfter some private discussion =
 with bde@ and kib@ here=0Ais a patch with cleanups for fsck_msdos.=0A=0A=0A=
 =0A      
 --0-1389502456-1269712008=:82651
 Content-Type: application/octet-stream; name=patch-fsck
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="patch-fsck"
 
 ZGlmZiAtdSBmc2NrX21zZG9zZnMub3JpZy9NYWtlZmlsZSBmc2NrX21zZG9z
 ZnMvTWFrZWZpbGUKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL01ha2VmaWxlCTIw
 MTAtMDItMTQgMTM6NTA6NDkuMDAwMDAwMDAwICswMDAwCisrKyBmc2NrX21z
 ZG9zZnMvTWFrZWZpbGUJMjAxMC0wMi0xNCAyMDozODozMC4wMDAwMDAwMDAg
 KzAwMDAKQEAgLTksNiArOSw2IEBACiBTUkNTPQltYWluLmMgY2hlY2suYyBi
 b290LmMgZmF0LmMgZGlyLmMgZnN1dGlsLmMKIAogQ0ZMQUdTKz0gLUkke0ZT
 Q0t9Ci1XQVJOUz89CTAKK1dBUk5TPz0JMgogCiAuaW5jbHVkZSA8YnNkLnBy
 b2cubWs+CmRpZmYgLXUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tf
 bXNkb3Nmcy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwky
 MDEwLTAyLTE0IDEzOjUwOjQ5LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19t
 c2Rvc2ZzL2Jvb3QuYwkyMDEwLTAyLTE0IDIwOjE1OjQ5LjAwMDAwMDAwMCAr
 MDAwMApAQCAtNDgsNyArNDgsNyBAQAogCWludCByZXQgPSBGU09LOwogCWlu
 dCBpOwogCQotCWlmICgoc2l6ZV90KXJlYWQoZG9zZnMsIGJsb2NrLCBzaXpl
 b2YgYmxvY2spICE9IHNpemVvZiBibG9jaykgeworCWlmIChyZWFkKGRvc2Zz
 LCBibG9jaywgc2l6ZW9mIGJsb2NrKSAhPSBzaXplb2YgYmxvY2spIHsKIAkJ
 cGVycm9yKCJjb3VsZCBub3QgcmVhZCBib290IGJsb2NrIik7CiAJCXJldHVy
 biBGU0ZBVEFMOwogCX0KQEAgLTcyLDcgKzcyLDggQEAKIAlib290LT5icGJG
 QVRzbWFsbCA9IGJsb2NrWzIyXSArIChibG9ja1syM10gPDwgOCk7CiAJYm9v
 dC0+U2VjUGVyVHJhY2sgPSBibG9ja1syNF0gKyAoYmxvY2tbMjVdIDw8IDgp
 OwogCWJvb3QtPmJwYkhlYWRzID0gYmxvY2tbMjZdICsgKGJsb2NrWzI3XSA8
 PCA4KTsKLQlib290LT5icGJIaWRkZW5TZWNzID0gYmxvY2tbMjhdICsgKGJs
 b2NrWzI5XSA8PCA4KSArIChibG9ja1szMF0gPDwgMTYpICsgKGJsb2NrWzMx
 XSA8PCAyNCk7CisJYm9vdC0+YnBiSGlkZGVuU2VjcyA9IGJsb2NrWzI4XSAr
 IChibG9ja1syOV0gPDwgOCkgKworCShibG9ja1szMF0gPDwgMTYpICsgKGJs
 b2NrWzMxXSA8PCAyNCk7CiAJYm9vdC0+YnBiSHVnZVNlY3RvcnMgPSBibG9j
 a1szMl0gKyAoYmxvY2tbMzNdIDw8IDgpICsgKGJsb2NrWzM0XSA8PCAxNikg
 KyAoYmxvY2tbMzVdIDw8IDI0KTsKIAogCWJvb3QtPkZBVHNlY3MgPSBib290
 LT5icGJGQVRzbWFsbDsKQEAgLTk3LDcgKzk4LDggQEAKIAkJYm9vdC0+YnBi
 RlNJbmZvID0gYmxvY2tbNDhdICsgKGJsb2NrWzQ5XSA8PCA4KTsKIAkJYm9v
 dC0+YnBiQmFja3VwID0gYmxvY2tbNTBdICsgKGJsb2NrWzUxXSA8PCA4KTsK
 IAotCQlpZiAobHNlZWsoZG9zZnMsIGJvb3QtPmJwYkZTSW5mbyAqIGJvb3Qt
 PmJwYkJ5dGVzUGVyU2VjLCBTRUVLX1NFVCkKKwkJaWYgKGxzZWVrKGRvc2Zz
 LCBib290LT5icGJGU0luZm8gKiBib290LT5icGJCeXRlc1BlclNlYywKKwkJ
 U0VFS19TRVQpCiAJCSAgICAhPSBib290LT5icGJGU0luZm8gKiBib290LT5i
 cGJCeXRlc1BlclNlYwogCQkgICAgfHwgcmVhZChkb3NmcywgZnNpbmZvLCBz
 aXplb2YgZnNpbmZvKQogCQkgICAgIT0gc2l6ZW9mIGZzaW5mbykgewpAQCAt
 MTI0LDcgKzEyNiw4IEBACiAJCQkJZnNpbmZvWzB4M2ZjXSA9IGZzaW5mb1sw
 eDNmZF0gPSAwOwogCQkJCWZzaW5mb1sweDNmZV0gPSAweDU1OwogCQkJCWZz
 aW5mb1sweDNmZl0gPSAweGFhOwotCQkJCWlmIChsc2Vlayhkb3NmcywgYm9v
 dC0+YnBiRlNJbmZvICogYm9vdC0+YnBiQnl0ZXNQZXJTZWMsIFNFRUtfU0VU
 KQorCQkJCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+YnBiRlNJbmZvICoKKwkJ
 CQlib290LT5icGJCeXRlc1BlclNlYywgU0VFS19TRVQpCiAJCQkJICAgICE9
 IGJvb3QtPmJwYkZTSW5mbyAqIGJvb3QtPmJwYkJ5dGVzUGVyU2VjCiAJCQkJ
 ICAgIHx8IHdyaXRlKGRvc2ZzLCBmc2luZm8sIHNpemVvZiBmc2luZm8pCiAJ
 CQkJICAgICE9IHNpemVvZiBmc2luZm8pIHsKQEAgLTE0NCw3ICsxNDcsOCBA
 QAogCQkJCSAgICAgICArIChmc2luZm9bMHgxZWZdIDw8IDI0KTsKIAkJfQog
 Ci0JCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+YnBiQmFja3VwICogYm9vdC0+
 YnBiQnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQorCQlpZiAobHNlZWsoZG9zZnMs
 IGJvb3QtPmJwYkJhY2t1cCAqIGJvb3QtPmJwYkJ5dGVzUGVyU2VjLAorCQlT
 RUVLX1NFVCkKIAkJICAgICE9IGJvb3QtPmJwYkJhY2t1cCAqIGJvb3QtPmJw
 YkJ5dGVzUGVyU2VjCiAJCSAgICB8fCByZWFkKGRvc2ZzLCBiYWNrdXAsIHNp
 emVvZiBiYWNrdXApICE9IHNpemVvZiAgYmFja3VwKSB7CiAJCQlwZXJyb3Io
 ImNvdWxkIG5vdCByZWFkIGJhY2t1cCBib290YmxvY2siKTsKQEAgLTE3Miwx
 MSArMTc2LDEwIEBACiAJCS8qIENoZWNrIGJhY2t1cCBicGJGU0luZm8/CQkJ
 CQlYWFggKi8KIAl9CiAKLQlib290LT5DbHVzdGVyT2Zmc2V0ID0gKGJvb3Qt
 PmJwYlJvb3REaXJFbnRzICogMzIgKyBib290LT5icGJCeXRlc1BlclNlYyAt
 IDEpCi0JICAgIC8gYm9vdC0+YnBiQnl0ZXNQZXJTZWMKLQkgICAgKyBib290
 LT5icGJSZXNTZWN0b3JzCi0JICAgICsgYm9vdC0+YnBiRkFUcyAqIGJvb3Qt
 PkZBVHNlY3MKLQkgICAgLSBDTFVTVF9GSVJTVCAqIGJvb3QtPmJwYlNlY1Bl
 ckNsdXN0OworCWJvb3QtPkNsdXN0ZXJPZmZzZXQgPSAoYm9vdC0+YnBiUm9v
 dERpckVudHMgKiAzMiArCisJICAgIGJvb3QtPmJwYkJ5dGVzUGVyU2VjIC0g
 MSkgLyBib290LT5icGJCeXRlc1BlclNlYyArCisJICAgIGJvb3QtPmJwYlJl
 c1NlY3RvcnMgKyBib290LT5icGJGQVRzICogYm9vdC0+RkFUc2VjcyAtCisJ
 ICAgIENMVVNUX0ZJUlNUICogYm9vdC0+YnBiU2VjUGVyQ2x1c3Q7CiAKIAlp
 ZiAoYm9vdC0+YnBiQnl0ZXNQZXJTZWMgJSBET1NCT09UQkxPQ0tTSVpFICE9
 IDApIHsKIAkJcGZhdGFsKCJJbnZhbGlkIHNlY3RvciBzaXplOiAldSIsIGJv
 b3QtPmJwYkJ5dGVzUGVyU2VjKTsKQEAgLTE5MSw3ICsxOTQsOCBAQAogCQli
 b290LT5OdW1TZWN0b3JzID0gYm9vdC0+YnBiU2VjdG9yczsKIAl9IGVsc2UK
 IAkJYm9vdC0+TnVtU2VjdG9ycyA9IGJvb3QtPmJwYkh1Z2VTZWN0b3JzOwot
 CWJvb3QtPk51bUNsdXN0ZXJzID0gKGJvb3QtPk51bVNlY3RvcnMgLSBib290
 LT5DbHVzdGVyT2Zmc2V0KSAvIGJvb3QtPmJwYlNlY1BlckNsdXN0OworCWJv
 b3QtPk51bUNsdXN0ZXJzID0gKGJvb3QtPk51bVNlY3RvcnMgLSBib290LT5D
 bHVzdGVyT2Zmc2V0KSAvCisJICAgYm9vdC0+YnBiU2VjUGVyQ2x1c3Q7CiAK
 IAlpZiAoYm9vdC0+ZmxhZ3MmRkFUMzIpCiAJCWJvb3QtPkNsdXN0TWFzayA9
 IENMVVNUMzJfTUFTSzsKZGlmZiAtdSBmc2NrX21zZG9zZnMub3JpZy9jaGVj
 ay5jIGZzY2tfbXNkb3Nmcy9jaGVjay5jCi0tLSBmc2NrX21zZG9zZnMub3Jp
 Zy9jaGVjay5jCTIwMTAtMDItMTQgMTM6NTA6NDkuMDAwMDAwMDAwICswMDAw
 CisrKyBmc2NrX21zZG9zZnMvY2hlY2suYwkyMDEwLTAyLTE0IDIwOjMxOjAx
 LjAwMDAwMDAwMCArMDAwMApAQCAtOTgsNyArOTgsNyBAQAogCX0KIAogCWlm
 IChib290LlZhbGlkRmF0IDwgMCkKLQkJZm9yIChpID0gMTsgaSA8IChpbnQp
 Ym9vdC5icGJGQVRzOyBpKyspIHsKKwkJZm9yIChpID0gMTsgaSA8IGJvb3Qu
 YnBiRkFUczsgaSsrKSB7CiAJCQlzdHJ1Y3QgZmF0RW50cnkgKmN1cnJlbnRG
 YXQ7CiAKIAkJCW1vZCB8PSByZWFkZmF0KGRvc2ZzLCAmYm9vdCwgaSwgJmN1
 cnJlbnRGYXQpOwpkaWZmIC11IGZzY2tfbXNkb3Nmcy5vcmlnL2Rpci5jIGZz
 Y2tfbXNkb3Nmcy9kaXIuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZGlyLmMJ
 MjAxMC0wMi0xNCAxMzo1MDo0OS4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tf
 bXNkb3Nmcy9kaXIuYwkyMDEwLTAyLTE0IDE5OjI4OjUzLjAwMDAwMDAwMCAr
 MDAwMApAQCAtMjQyLDcgKzI0Miw4IEBACiAKIAltZW1zZXQocm9vdERpciwg
 MCwgc2l6ZW9mICpyb290RGlyKTsKIAlpZiAoYm9vdC0+ZmxhZ3MgJiBGQVQz
 MikgewotCQlpZiAoYm9vdC0+YnBiUm9vdENsdXN0IDwgQ0xVU1RfRklSU1Qg
 fHwgYm9vdC0+YnBiUm9vdENsdXN0ID49IGJvb3QtPk51bUNsdXN0ZXJzKSB7
 CisJCWlmIChib290LT5icGJSb290Q2x1c3QgPCBDTFVTVF9GSVJTVCB8fAor
 CQlib290LT5icGJSb290Q2x1c3QgPj0gYm9vdC0+TnVtQ2x1c3RlcnMpIHsK
 IAkJCXBmYXRhbCgiUm9vdCBkaXJlY3Rvcnkgc3RhcnRzIHdpdGggY2x1c3Rl
 ciBvdXQgb2YgcmFuZ2UoJXUpIiwKIAkJCSAgICAgICBib290LT5icGJSb290
 Q2x1c3QpOwogCQkJcmV0dXJuIEZTRkFUQUw7CkBAIC0zNTYsNyArMzU3LDgg
 QEAKIAkJcHdhcm4oIkludmFsaWQgbG9uZyBmaWxlbmFtZSBlbnRyeSBmb3Ig
 JXNcbiIsIHBhdGgpOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCXB3YXJuKCJJ
 bnZhbGlkIGxvbmcgZmlsZW5hbWUgZW50cnkgYXQgZW5kIG9mIGRpcmVjdG9y
 eSAlc1xuIiwgcGF0aCk7CisJCXB3YXJuKCJJbnZhbGlkIGxvbmcgZmlsZW5h
 bWUgZW50cnkgYXQgZW5kIG9mIGRpcmVjdG9yeSAlc1xuIiwKKwkJcGF0aCk7
 CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJcHdhcm4oIkludmFsaWQgbG9uZyBm
 aWxlbmFtZSBlbnRyeSBmb3Igdm9sdW1lIGxhYmVsXG4iKTsKQEAgLTQxOCw3
 ICs0MjAsOCBAQAogCQkJY2xfdCBjbDsKIAkJCXVfaW50MzJfdCBzeiA9IDA7
 CiAKLQkJCWZvciAoY2wgPSBkaXItPmhlYWQ7IChzeiArPSBib290LT5DbHVz
 dGVyU2l6ZSkgPCBkaXItPnNpemU7KQorCQkJZm9yIChjbCA9IGRpci0+aGVh
 ZDsgKHN6ICs9IGJvb3QtPkNsdXN0ZXJTaXplKSA8CisJCQkgICAgZGlyLT5z
 aXplOykKIAkJCQljbCA9IGZhdFtjbF0ubmV4dDsKIAkJCWNsZWFyY2hhaW4o
 Ym9vdCwgZmF0LCBmYXRbY2xdLm5leHQpOwogCQkJZmF0W2NsXS5uZXh0ID0g
 Q0xVU1RfRU9GOwpAQCAtNDYyLDcgKzQ2NSw4IEBACiAJZG8gewogCQlpZiAo
 IShib290LT5mbGFncyAmIEZBVDMyKSAmJiAhZGlyLT5wYXJlbnQpIHsKIAkJ
 CWxhc3QgPSBib290LT5icGJSb290RGlyRW50cyAqIDMyOwotCQkJb2ZmID0g
 Ym9vdC0+YnBiUmVzU2VjdG9ycyArIGJvb3QtPmJwYkZBVHMgKiBib290LT5G
 QVRzZWNzOworCQkJb2ZmID0gYm9vdC0+YnBiUmVzU2VjdG9ycyArIGJvb3Qt
 PmJwYkZBVHMgKgorCQkJYm9vdC0+RkFUc2VjczsKIAkJfSBlbHNlIHsKIAkJ
 CWxhc3QgPSBib290LT5icGJTZWNQZXJDbHVzdCAqIGJvb3QtPmJwYkJ5dGVz
 UGVyU2VjOwogCQkJb2ZmID0gY2wgKiBib290LT5icGJTZWNQZXJDbHVzdCAr
 IGJvb3QtPkNsdXN0ZXJPZmZzZXQ7CkBAIC01NDcsNyArNTUxLDggQEAKIAkJ
 CQl9CiAJCQkJbGlkeCA9ICpwICYgTFJOT01BU0s7CiAJCQkJdCA9IGxvbmdO
 YW1lICsgLS1saWR4ICogMTM7Ci0JCQkJZm9yIChrID0gMTsgayA8IDExICYm
 IHQgPCBsb25nTmFtZSArIHNpemVvZihsb25nTmFtZSk7IGsgKz0gMikgewor
 CQkJCWZvciAoayA9IDE7IGsgPCAxMSAmJiB0IDwgbG9uZ05hbWUgKworCQkJ
 CXNpemVvZihsb25nTmFtZSk7IGsgKz0gMikgewogCQkJCQlpZiAoIXBba10g
 JiYgIXBbayArIDFdKQogCQkJCQkJYnJlYWs7CiAJCQkJCSp0KysgPSBwW2td
 OwpkaWZmIC11IGZzY2tfbXNkb3Nmcy5vcmlnL2ZhdC5jIGZzY2tfbXNkb3Nm
 cy9mYXQuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZmF0LmMJMjAxMC0wMi0x
 NCAxMzo1MDo0OS4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tfbXNkb3Nmcy9m
 YXQuYwkyMDEwLTAyLTE0IDIwOjQwOjE3LjAwMDAwMDAwMCArMDAwMApAQCAt
 ODcsNyArODcsOCBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlpZiAocmVhZChm
 cywgYnVmZmVyLCBib290LT5icGJCeXRlc1BlclNlYykgIT0gYm9vdC0+YnBi
 Qnl0ZXNQZXJTZWMpIHsKKwlpZiAoKHNpemVfdClyZWFkKGZzLCBidWZmZXIs
 IGJvb3QtPmJwYkJ5dGVzUGVyU2VjKSAhPQorCSAgICBib290LT5icGJCeXRl
 c1BlclNlYykgewogCQlwZXJyb3IoIlVuYWJsZSB0byByZWFkIEZBVCIpOwog
 CQlnb3RvIGVycjsKIAl9Cg==
 
 --0-1389502456-1269712008=:82651--
Responsible-Changed-From-To: freebsd-bugs->brian 
Responsible-Changed-By: brian 
Responsible-Changed-When: Sun Jun 20 09:20:40 UTC 2010 
Responsible-Changed-Why:  
Take 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142384 
State-Changed-From-To: open->patched 
State-Changed-By: brian 
State-Changed-When: Sun Jun 20 09:37:43 UTC 2010 
State-Changed-Why:  
Applied to head (r209364) with a few style(9) tweaks. 
I'll MFC in three weeks if there are no complaints. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142384 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/142384: commit references a PR
Date: Sun, 20 Jun 2010 09:41:08 +0000 (UTC)

 Author: brian
 Date: Sun Jun 20 09:40:54 2010
 New Revision: 209364
 URL: http://svn.freebsd.org/changeset/base/209364
 
 Log:
   Fix some style(9), although there's a lot more issues here.
   Fix some casting errors.
   
   PR:		142384
   Submitted by:	giffunip at tutopia dot com
   Obtained from:	NetBSD
   MFC after:	3 weeks
 
 Modified:
   head/sbin/fsck_msdosfs/Makefile
   head/sbin/fsck_msdosfs/boot.c
   head/sbin/fsck_msdosfs/check.c
   head/sbin/fsck_msdosfs/dir.c
   head/sbin/fsck_msdosfs/fat.c
 
 Modified: head/sbin/fsck_msdosfs/Makefile
 ==============================================================================
 --- head/sbin/fsck_msdosfs/Makefile	Sun Jun 20 08:48:30 2010	(r209363)
 +++ head/sbin/fsck_msdosfs/Makefile	Sun Jun 20 09:40:54 2010	(r209364)
 @@ -9,6 +9,6 @@ MAN=	fsck_msdosfs.8
  SRCS=	main.c check.c boot.c fat.c dir.c fsutil.c
  
  CFLAGS+= -I${FSCK}
 -WARNS?=	0
 +WARNS?=	2
  
  .include <bsd.prog.mk>
 
 Modified: head/sbin/fsck_msdosfs/boot.c
 ==============================================================================
 --- head/sbin/fsck_msdosfs/boot.c	Sun Jun 20 08:48:30 2010	(r209363)
 +++ head/sbin/fsck_msdosfs/boot.c	Sun Jun 20 09:40:54 2010	(r209364)
 @@ -48,13 +48,14 @@ readboot(int dosfs, struct bootblock *bo
  	int ret = FSOK;
  	int i;
  	
 -	if ((size_t)read(dosfs, block, sizeof block) != sizeof block) {
 +	if (read(dosfs, block, sizeof block) != sizeof block) {
  		perror("could not read boot block");
  		return FSFATAL;
  	}
  
  	if (block[510] != 0x55 || block[511] != 0xaa) {
 -		pfatal("Invalid signature in boot block: %02x%02x", block[511], block[510]);
 +		pfatal("Invalid signature in boot block: %02x%02x",
 +		    block[511], block[510]);
  		return FSFATAL;
  	}
  
 @@ -72,8 +73,10 @@ readboot(int dosfs, struct bootblock *bo
  	boot->bpbFATsmall = block[22] + (block[23] << 8);
  	boot->SecPerTrack = block[24] + (block[25] << 8);
  	boot->bpbHeads = block[26] + (block[27] << 8);
 -	boot->bpbHiddenSecs = block[28] + (block[29] << 8) + (block[30] << 16) + (block[31] << 24);
 -	boot->bpbHugeSectors = block[32] + (block[33] << 8) + (block[34] << 16) + (block[35] << 24);
 +	boot->bpbHiddenSecs = block[28] + (block[29] << 8) +
 +	    (block[30] << 16) + (block[31] << 24);
 +	boot->bpbHugeSectors = block[32] + (block[33] << 8) +
 +	    (block[34] << 16) + (block[35] << 24);
  
  	boot->FATsecs = boot->bpbFATsmall;
  
 @@ -97,10 +100,9 @@ readboot(int dosfs, struct bootblock *bo
  		boot->bpbFSInfo = block[48] + (block[49] << 8);
  		boot->bpbBackup = block[50] + (block[51] << 8);
  
 -		if (lseek(dosfs, boot->bpbFSInfo * boot->bpbBytesPerSec, SEEK_SET)
 -		    != boot->bpbFSInfo * boot->bpbBytesPerSec
 -		    || read(dosfs, fsinfo, sizeof fsinfo)
 -		    != sizeof fsinfo) {
 +		if (lseek(dosfs, boot->bpbFSInfo * boot->bpbBytesPerSec,
 +		    SEEK_SET) != boot->bpbFSInfo * boot->bpbBytesPerSec
 +		    || read(dosfs, fsinfo, sizeof fsinfo) != sizeof fsinfo) {
  			perror("could not read fsinfo block");
  			return FSFATAL;
  		}
 @@ -124,7 +126,8 @@ readboot(int dosfs, struct bootblock *bo
  				fsinfo[0x3fc] = fsinfo[0x3fd] = 0;
  				fsinfo[0x3fe] = 0x55;
  				fsinfo[0x3ff] = 0xaa;
 -				if (lseek(dosfs, boot->bpbFSInfo * boot->bpbBytesPerSec, SEEK_SET)
 +				if (lseek(dosfs, boot->bpbFSInfo *
 +				    boot->bpbBytesPerSec, SEEK_SET)
  				    != boot->bpbFSInfo * boot->bpbBytesPerSec
  				    || write(dosfs, fsinfo, sizeof fsinfo)
  				    != sizeof fsinfo) {
 @@ -144,7 +147,8 @@ readboot(int dosfs, struct bootblock *bo
  				       + (fsinfo[0x1ef] << 24);
  		}
  
 -		if (lseek(dosfs, boot->bpbBackup * boot->bpbBytesPerSec, SEEK_SET)
 +		if (lseek(dosfs, boot->bpbBackup * boot->bpbBytesPerSec,
 +		    SEEK_SET)
  		    != boot->bpbBackup * boot->bpbBytesPerSec
  		    || read(dosfs, backup, sizeof backup) != sizeof  backup) {
  			perror("could not read backup bootblock");
 @@ -172,11 +176,10 @@ readboot(int dosfs, struct bootblock *bo
  		/* Check backup bpbFSInfo?					XXX */
  	}
  
 -	boot->ClusterOffset = (boot->bpbRootDirEnts * 32 + boot->bpbBytesPerSec - 1)
 -	    / boot->bpbBytesPerSec
 -	    + boot->bpbResSectors
 -	    + boot->bpbFATs * boot->FATsecs
 -	    - CLUST_FIRST * boot->bpbSecPerClust;
 +	boot->ClusterOffset = (boot->bpbRootDirEnts * 32 +
 +	    boot->bpbBytesPerSec - 1) / boot->bpbBytesPerSec +
 +	    boot->bpbResSectors + boot->bpbFATs * boot->FATsecs -
 +	    CLUST_FIRST * boot->bpbSecPerClust;
  
  	if (boot->bpbBytesPerSec % DOSBOOTBLOCKSIZE != 0) {
  		pfatal("Invalid sector size: %u", boot->bpbBytesPerSec);
 @@ -191,7 +194,8 @@ readboot(int dosfs, struct bootblock *bo
  		boot->NumSectors = boot->bpbSectors;
  	} else
  		boot->NumSectors = boot->bpbHugeSectors;
 -	boot->NumClusters = (boot->NumSectors - boot->ClusterOffset) / boot->bpbSecPerClust;
 +	boot->NumClusters = (boot->NumSectors - boot->ClusterOffset) /
 +	    boot->bpbSecPerClust;
  
  	if (boot->flags&FAT32)
  		boot->ClustMask = CLUST32_MASK;
 
 Modified: head/sbin/fsck_msdosfs/check.c
 ==============================================================================
 --- head/sbin/fsck_msdosfs/check.c	Sun Jun 20 08:48:30 2010	(r209363)
 +++ head/sbin/fsck_msdosfs/check.c	Sun Jun 20 09:40:54 2010	(r209364)
 @@ -98,7 +98,7 @@ checkfilesys(const char *fname)
  	}
  
  	if (boot.ValidFat < 0)
 -		for (i = 1; i < (int)boot.bpbFATs; i++) {
 +		for (i = 1; i < boot.bpbFATs; i++) {
  			struct fatEntry *currentFat;
  
  			mod |= readfat(dosfs, &boot, i, &currentFat);
 
 Modified: head/sbin/fsck_msdosfs/dir.c
 ==============================================================================
 --- head/sbin/fsck_msdosfs/dir.c	Sun Jun 20 08:48:30 2010	(r209363)
 +++ head/sbin/fsck_msdosfs/dir.c	Sun Jun 20 09:40:54 2010	(r209364)
 @@ -242,7 +242,8 @@ resetDosDirSection(struct bootblock *boo
  
  	memset(rootDir, 0, sizeof *rootDir);
  	if (boot->flags & FAT32) {
 -		if (boot->bpbRootClust < CLUST_FIRST || boot->bpbRootClust >= boot->NumClusters) {
 +		if (boot->bpbRootClust < CLUST_FIRST ||
 +		    boot->bpbRootClust >= boot->NumClusters) {
  			pfatal("Root directory starts with cluster out of range(%u)",
  			       boot->bpbRootClust);
  			return FSFATAL;
 @@ -356,7 +357,8 @@ removede(int f, struct bootblock *boot, 
  		pwarn("Invalid long filename entry for %s\n", path);
  		break;
  	case 1:
 -		pwarn("Invalid long filename entry at end of directory %s\n", path);
 +		pwarn("Invalid long filename entry at end of directory %s\n",
 +		    path);
  		break;
  	case 2:
  		pwarn("Invalid long filename entry for volume label\n");
 @@ -418,7 +420,8 @@ checksize(struct bootblock *boot, struct
  			cl_t cl;
  			u_int32_t sz = 0;
  
 -			for (cl = dir->head; (sz += boot->ClusterSize) < dir->size;)
 +			for (cl = dir->head; (sz += boot->ClusterSize) <
 +			    dir->size;)
  				cl = fat[cl].next;
  			clearchain(boot, fat, fat[cl].next);
  			fat[cl].next = CLUST_EOF;
 @@ -462,7 +465,8 @@ readDosDirSection(int f, struct bootbloc
  	do {
  		if (!(boot->flags & FAT32) && !dir->parent) {
  			last = boot->bpbRootDirEnts * 32;
 -			off = boot->bpbResSectors + boot->bpbFATs * boot->FATsecs;
 +			off = boot->bpbResSectors + boot->bpbFATs *
 +			    boot->FATsecs;
  		} else {
  			last = boot->bpbSecPerClust * boot->bpbBytesPerSec;
  			off = cl * boot->bpbSecPerClust + boot->ClusterOffset;
 @@ -547,7 +551,8 @@ readDosDirSection(int f, struct bootbloc
  				}
  				lidx = *p & LRNOMASK;
  				t = longName + --lidx * 13;
 -				for (k = 1; k < 11 && t < longName + sizeof(longName); k += 2) {
 +				for (k = 1; k < 11 && t < longName +
 +				    sizeof(longName); k += 2) {
  					if (!p[k] && !p[k + 1])
  						break;
  					*t++ = p[k];
 
 Modified: head/sbin/fsck_msdosfs/fat.c
 ==============================================================================
 --- head/sbin/fsck_msdosfs/fat.c	Sun Jun 20 08:48:30 2010	(r209363)
 +++ head/sbin/fsck_msdosfs/fat.c	Sun Jun 20 09:40:54 2010	(r209364)
 @@ -87,7 +87,8 @@ checkdirty(int fs, struct bootblock *boo
  		goto err;
  	}
  
 -	if (read(fs, buffer, boot->bpbBytesPerSec) != boot->bpbBytesPerSec) {
 +	if ((size_t)read(fs, buffer, boot->bpbBytesPerSec) !=
 +	    boot->bpbBytesPerSec) {
  		perror("Unable to read FAT");
  		goto err;
  	}
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: brian 
State-Changed-When: Sun Jul 11 22:06:16 UTC 2010 
State-Changed-Why:  
Merged to stable/8, r209914 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142384 
>Unformatted:
