Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Jan 2016 11:15:18 +0200
From:      Boris Astardzhiev <boris.astardzhiev@gmail.com>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, threads@freebsd.org,  Jilles Tjoelker <jilles@stack.nl>, net@freebsd.org
Subject:   Re: Does FreeBSD have sendmmsg or recvmmsg system calls?
Message-ID:  <CAP=KkTw=ML=oPo2OgFfmor_nsL3om6HvmTQjKNMrOiU_dmWc2g@mail.gmail.com>
In-Reply-To: <20160121233040.E1864@besplex.bde.org>
References:  <CAP=KkTxVaqZvigg78Dg%2Bv8kuTCaZyky8x15NHqD9uabuRKRkMw@mail.gmail.com> <20160116195657.GJ3942@kib.kiev.ua> <20160116202534.GK3942@kib.kiev.ua> <20160117211853.GA37847@stack.nl> <20160118044826.GS3942@kib.kiev.ua> <CAP=KkTy3J=k7hokGhohcGXv%2BWLnaxJmiAPxqmX9FHt7k0=Dp7Q@mail.gmail.com> <20160118140811.GW3942@kib.kiev.ua> <CAP=KkTzLCOnJVqt5F3ZuuZUiwkmWcne2Ynpi6-daE2jTzSBtfw@mail.gmail.com> <20160120073154.GB3942@kib.kiev.ua> <CAP=KkTx3dAUuSBrJiwNAAe%2BhHSG4j5Qp7sAcgtOgmVi8a12k1A@mail.gmail.com> <20160121093509.GK3942@kib.kiev.ua> <20160121233040.E1864@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--001a114715826cd8660529e8a863
Content-Type: text/plain; charset=UTF-8

be>None of the above.  Plain recvmsg() returns ssize_t and its len arg has
be>type size_t.  That is excessively typedefed and excessively large with
be>64-bit ssize_t, but it is silly for the multiple-message variant to use
be>smaller types.
be>
be>Otherwise, all the integer types should be int.

It seems logical. I'll convert the ret easily to ssize_t and the vector
length
to size_t. Now it differs from the Linux prototype but I guess it's okay.

be>The errno method (and not checking ret at all) is best if for syscalls
that
be>return -1 for a non-error.  It is not needed here.

Fixing it.

kb> I do not see any sense in making the functions with signature or
semantic
kb> different from Linux version.  Right now, the goal of including the
patch
kb> is compatibility.

Regarding recvmmsg() -
I tried to implement MSG_WAITFORONE and the timeout stuff using pselect(2)
due to the timespec structure. I could have used ppoll and I'm not sure
which
of these two is more appropriate or maybe there's another approach?
Now it has timeout just as in the Linux prototype.
Comments are welcomed.

See patch.

Best regards,
Boris Astardzhiev

On Thu, Jan 21, 2016 at 3:27 PM, Bruce Evans <brde@optusnet.com.au> wrote:

> On Thu, 21 Jan 2016, Konstantin Belousov wrote:
>
> On Wed, Jan 20, 2016 at 10:29:47AM +0200, Boris Astardzhiev wrote:
>>
>
> kb>Shouldn't i and rcvd be unsigned as well ?  Shouldn't return value
>>> kb>also be unsigned ?
>>> I think i and rcvd should be unsigned whereas ret should not - after all
>>> if an error occurred we get -1.
>>>
>> I looked at the real signatures and man pages for the Linux functions,
>> finally.  There is indeed the timeout arg, the MSG_WAITFORONE flag for
>> recvmmsg(3), and Linux uses ints for what would be naturally size_t.
>>
>
> It knows better than POSIX, so has restored the v7 types :-).  Probably
> not intentionally.
>
> FreeBSD-1 used the v7 types for recv* in FreeBSD-1, but this was changed
> in 4.4BSD-Lite1.
>
> kb>> +     rcvd = 0;
>>> kb>> +     for (i = 0; i < vlen; i++) {
>>> kb>> +             errno = 0;
>>> kb>> +             ret = __sys_recvmsg(s, &msgvec[i].msg_hdr, flags);
>>> kb>> +             if (ret < 0 || errno != 0) {
>>> kb>I do not see why do you need to clear errno before, and then do this
>>> test.
>>> kb>Just check ret == -1, in which case errno was set from the immediate
>>> syscall.
>>> kb>
>>> kb>> +                     if (rcvd != 0) {
>>> kb>> +                             /* We've received messages. Let caller
>>> know. */
>>> kb>> +                             errno = 0;
>>> kb>This cleaning is not needed as well.  For successfull functions
>>> returns,
>>> kb>errno value is undefined.
>>>
>>> Wouldn't I confuse apps if they check errno in the follow case - I want
>>> to
>>> receive two messages. The first __sys_recvmsg succeeds and then for the
>>> second __sys_recvmsg fails. Thus errno will be != 0 and I'm telling the
>>> app
>>> that I have received one message by returning 1 but errno will be != 0.
>>> Is this correct?
>>>
>>
>> errno value is only defined after the function explicitely returned error.
>> Apps which test for errno without testing for error are wrong.
>>
>
> Mostly such tests find wrong implementations.  Only low quality
> implmentations set error for non-errors.
>
> I checked some details:
>
> - both C99 and POSIX.1-2001 forbid setting errno to 0 in library functions
>
> - C99 and draft C11 explicitly say that errno may be clobbered for
>   non-errors by functions that are not documented to set errno.  It
>   intends to also say that errno may not be clobbered for non-errors by
>   functions are documented to set errno, but actually says nothing
>   about this case (except in a footnote, it says "Thus [the usual
>   method of setting errno before the call and checking it after
>   ``should'' be used to check for errors]."  Footnotes are not part
>   of the standard, so this also says nothing.  But it gives the intent.
>
> - C99 doesn't say anything specific about this for strtol.  But strtol
>   needs errno to not be set on non-error for its API.  This gives the
>   intent of the documentation for errno in the standard itself.
>
> - POSIX.1-2001 says that applications "should" only be examined when it is
>   indicated to be valid by a function's return value.  This is wrong for
>   all functions where errno is part of the API (like strtol), and it
>   would be inconsistent with C99 and C11 if these standards said what they
>   intend to say, for many more functions.  First, all of the C99 functions
>   that are documented to set errno.  Then, if POSIX follows the spirit of
>   the intent of C99, then just about all POSIX functions must not clobber
>   errno for non-errors, since (unlike in C99) just about all functions in
>   POSIX are documented to set errno.
>
> - POSIX.1-2001 apparently agrees with me that C99 doesn't say what it
>   intends to say.  It explicitly says that strtol shall not change "t
>   setting of" errno on success, and marks this as an extension of C99.
>
> - I couldn't find even a buggy generic clause in POSIX.1-2001 saying
>   what C99 intends to say even for the C99 parts of POSIX.  If there
>   were such a clause, then strtol wouldn't need a special extension.
>   This means that some other C99 functions need special clauses, and
>   there are likely to be bugs in this since some don't really need
>   them except to conform with C99's intentions.
>
> - not many C99 functions are specified to set errno.  The main ones
>   are the strtol family, math functions (most can set ERANGE or EDOM),
>   and wide character functions (many can set EILSEQ).  POSIX.1-2001
>   seems to be missing a special clause for the first wide character
>   function that I looked at -- fputwc().  For math functions, it has
>   special statements ad nauseum (about 20 lines per function for
>   duplicated for 20-50 functions).
>
> Bruce
>

--001a114715826cd8660529e8a863
Content-Type: text/plain; charset=US-ASCII; name="sendrecvmmsg-libconly4.diff"
Content-Disposition: attachment; filename="sendrecvmmsg-libconly4.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ijpgx4140

ZGlmZiAtLWdpdCBhL2xpYi9saWJjL2luY2x1ZGUvbmFtZXNwYWNlLmggYi9saWIvbGliYy9pbmNs
dWRlL25hbWVzcGFjZS5oCmluZGV4IDczOWQ3YjEuLmM5NTgyOWUgMTAwNjQ0Ci0tLSBhL2xpYi9s
aWJjL2luY2x1ZGUvbmFtZXNwYWNlLmgKKysrIGIvbGliL2xpYmMvaW5jbHVkZS9uYW1lc3BhY2Uu
aApAQCAtMjA4LDYgKzIwOCw3IEBACiAjZGVmaW5lCQlyZWFkdgkJCQlfcmVhZHYKICNkZWZpbmUJ
CXJlY3Zmcm9tCQkJX3JlY3Zmcm9tCiAjZGVmaW5lCQlyZWN2bXNnCQkJCV9yZWN2bXNnCisjZGVm
aW5lCQlyZWN2bW1zZwkJCV9yZWN2bW1zZwogI2RlZmluZQkJc2VsZWN0CQkJCV9zZWxlY3QKICNk
ZWZpbmUJCXNlbV9jbG9zZQkJCV9zZW1fY2xvc2UKICNkZWZpbmUJCXNlbV9kZXN0cm95CQkJX3Nl
bV9kZXN0cm95CkBAIC0yMjAsNiArMjIxLDcgQEAKICNkZWZpbmUJCXNlbV91bmxpbmsJCQlfc2Vt
X3VubGluawogI2RlZmluZQkJc2VtX3dhaXQJCQlfc2VtX3dhaXQKICNkZWZpbmUJCXNlbmRtc2cJ
CQkJX3NlbmRtc2cKKyNkZWZpbmUJCXNlbmRtbXNnCQkJX3NlbmRtbXNnCiAjZGVmaW5lCQlzZW5k
dG8JCQkJX3NlbmR0bwogI2RlZmluZQkJc2V0c29ja29wdAkJCV9zZXRzb2Nrb3B0CiAvKiNkZWZp
bmUJCXNpZ2FjdGlvbgkJCV9zaWdhY3Rpb24qLwpkaWZmIC0tZ2l0IGEvbGliL2xpYmMvaW5jbHVk
ZS91bi1uYW1lc3BhY2UuaCBiL2xpYi9saWJjL2luY2x1ZGUvdW4tbmFtZXNwYWNlLmgKaW5kZXgg
ZjMxZmE3YS4uMDIzMzM0OCAxMDA2NDQKLS0tIGEvbGliL2xpYmMvaW5jbHVkZS91bi1uYW1lc3Bh
Y2UuaAorKysgYi9saWIvbGliYy9pbmNsdWRlL3VuLW5hbWVzcGFjZS5oCkBAIC0xODksNiArMTg5
LDcgQEAKICN1bmRlZgkJcmVhZHYKICN1bmRlZgkJcmVjdmZyb20KICN1bmRlZgkJcmVjdm1zZwor
I3VuZGVmCQlyZWN2bW1zZwogI3VuZGVmCQlzZWxlY3QKICN1bmRlZgkJc2VtX2Nsb3NlCiAjdW5k
ZWYJCXNlbV9kZXN0cm95CkBAIC0yMDEsNiArMjAyLDcgQEAKICN1bmRlZgkJc2VtX3VubGluawog
I3VuZGVmCQlzZW1fd2FpdAogI3VuZGVmCQlzZW5kbXNnCisjdW5kZWYJCXNlbmRtbXNnCiAjdW5k
ZWYJCXNlbmR0bwogI3VuZGVmCQlzZXRzb2Nrb3B0CiAjdW5kZWYJCXNpZ2FjdGlvbgpkaWZmIC0t
Z2l0IGEvbGliL2xpYmMvc3lzL01ha2VmaWxlLmluYyBiL2xpYi9saWJjL3N5cy9NYWtlZmlsZS5p
bmMKaW5kZXggZTRmZTFiMi4uNWY4YjY5OSAxMDA2NDQKLS0tIGEvbGliL2xpYmMvc3lzL01ha2Vm
aWxlLmluYworKysgYi9saWIvbGliYy9zeXMvTWFrZWZpbGUuaW5jCkBAIC0yOCw2ICsyOCw4IEBA
IFNSQ1MrPSBmdXRpbWVucy5jIHV0aW1lbnNhdC5jCiBOT0FTTSs9IGZ1dGltZW5zLm8gdXRpbWVu
c2F0Lm8KIFBTRVVETys9IF9mdXRpbWVucy5vIF91dGltZW5zYXQubwogCitTUkNTKz0gcmVjdm1t
c2cuYyBzZW5kbW1zZy5jCisKIElOVEVSUE9TRUQgPSBcCiAJYWNjZXB0IFwKIAlhY2NlcHQ0IFwK
ZGlmZiAtLWdpdCBhL2xpYi9saWJjL3N5cy9TeW1ib2wubWFwIGIvbGliL2xpYmMvc3lzL1N5bWJv
bC5tYXAKaW5kZXggN2IzMjU3Yy4uZGMyZWQwZSAxMDA2NDQKLS0tIGEvbGliL2xpYmMvc3lzL1N5
bWJvbC5tYXAKKysrIGIvbGliL2xpYmMvc3lzL1N5bWJvbC5tYXAKQEAgLTM5OSw2ICszOTksOCBA
QCBGQlNEXzEuNCB7CiAJdXRpbWVuc2F0OwogCW51bWFfc2V0YWZmaW5pdHk7CiAJbnVtYV9nZXRh
ZmZpbml0eTsKKwlzZW5kbW1zZzsKKwlyZWN2bW1zZzsKIH07CiAKIEZCU0Rwcml2YXRlXzEuMCB7
CmRpZmYgLS1naXQgYS9saWIvbGliYy9zeXMvcmVjdi4yIGIvbGliL2xpYmMvc3lzL3JlY3YuMgpp
bmRleCAzMjZlN2ZmLi5mZDJiMmExIDEwMDY0NAotLS0gYS9saWIvbGliYy9zeXMvcmVjdi4yCisr
KyBiL2xpYi9saWJjL3N5cy9yZWN2LjIKQEAgLTM0LDggKzM0LDkgQEAKIC5TaCBOQU1FCiAuTm0g
cmVjdiAsCiAuTm0gcmVjdmZyb20gLAotLk5tIHJlY3Ztc2cKLS5OZCByZWNlaXZlIGEgbWVzc2Fn
ZSBmcm9tIGEgc29ja2V0CisuTm0gcmVjdm1zZyAsCisuTm0gcmVjdm1tc2cKKy5OZCByZWNlaXZl
IG1lc3NhZ2UocykgZnJvbSBhIHNvY2tldAogLlNoIExJQlJBUlkKIC5MYiBsaWJjCiAuU2ggU1lO
T1BTSVMKQEAgLTQ3LDExICs0OCwxNSBAQAogLkZuIHJlY3Zmcm9tICJpbnQgcyIgInZvaWQgKmJ1
ZiIgInNpemVfdCBsZW4iICJpbnQgZmxhZ3MiICJzdHJ1Y3Qgc29ja2FkZHIgKiByZXN0cmljdCBm
cm9tIiAic29ja2xlbl90ICogcmVzdHJpY3QgZnJvbWxlbiIKIC5GdCBzc2l6ZV90CiAuRm4gcmVj
dm1zZyAiaW50IHMiICJzdHJ1Y3QgbXNnaGRyICptc2ciICJpbnQgZmxhZ3MiCisuRnQgc3NpemVf
dAorLkZuIHJlY3ZtbXNnICJpbnQgcyIgInN0cnVjdCBtbXNnaGRyICptc2d2ZWMiICJzaXplX3Qg
dmxlbiIgImludCBmbGFncyIgImNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCIKIC5TaCBE
RVNDUklQVElPTgogVGhlCiAuRm4gcmVjdmZyb20KIGFuZAogLkZuIHJlY3Ztc2cKK2FuZAorLkZu
IHJlY3ZtbXNnCiBzeXN0ZW0gY2FsbHMKIGFyZSB1c2VkIHRvIHJlY2VpdmUgbWVzc2FnZXMgZnJv
bSBhIHNvY2tldCwKIGFuZCBtYXkgYmUgdXNlZCB0byByZWNlaXZlIGRhdGEgb24gYSBzb2NrZXQg
d2hldGhlciBvciBub3QKQEAgLTg0LDggKzg5LDMwIEBAIG51bGwgcG9pbnRlciBwYXNzZWQgYXMg
aXRzCiAuRmEgZnJvbQogYXJndW1lbnQuCiAuUHAKLUFsbCB0aHJlZSByb3V0aW5lcyByZXR1cm4g
dGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBvbiBzdWNjZXNzZnVsCi1jb21wbGV0aW9uLgorVGhl
CisuRm4gcmVjdm1tc2cKK2Z1bmN0aW9uIGlzIHVzZWQgdG8gcmVjZWl2ZSBtdWx0aXBsZQorbWVz
c2FnZXMgYXQgYSBjYWxsLgorVGhlaXIgbnVtYmVyCitpcyBzdXBwbGllZCBieQorLkZhIHZsZW4g
LgorVGhlIG1lc3NhZ2VzIGFyZSBwbGFjZWQgaW4gdGhlCisuRmEgbXNndmVjCit2ZWN0b3IgYWZ0
ZXIgcmVjZXB0aW9uLgorVGhlIHNpemUgb2YgZWFjaCByZWNlaXZlZCBtZXNzYWdlIGlzIHBsYWNl
ZCBpbiB0aGUKKy5GYSBtc2dfbGVuCitmaWVsZCBvZiBlYWNoIGVsZW1lbnQgb2YgdGhlIHZlY3Rv
ci4KK0lmCisuRmEgdGltZW91dAoraXMgTlVMTCB0aGUgY2FsbCB3aWxsIG5vcm1hbGx5IGJsb2Nr
LiBPdGhlcndpc2UgaXQgd2lsbCB3YWl0IGZvciBkYXRhCitmb3IgdGhlIHNwZWNpZmllZCBhbW91
bnQgb2YgdGltZS4gSWYgdGhlIHRpbWVvdXQgZXhwaXJlcyBhbmQgdGhlcmUgaXMKK25vIGRhdGEg
cmVjZWl2ZWQgYSB2YWx1ZSBvZiAwIGlzIHJldHVybmVkLiBwc2VsZWN0KDIpIGlzIHVzZWQgZm9y
IHRoZQoraW1wbGVtZW50YXRpb24gb2YgdGhlIHRpbWVvdXQgbWVjaGFuaXNtLgorLlBwCitUaGUg
Zmlyc3QgdGhyZWUgcm91dGluZXMgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2Ugb24g
c3VjY2Vzc2Z1bAorY29tcGxldGlvbiB3aGVyZWFzCisuRm4gcmVjdm1tc2cKK3JldHVybnMgdGhl
IG51bWJlciBvZiByZWNlaXZlZCBtZXNzYWdlcy4KIElmIGEgbWVzc2FnZSBpcyB0b28gbG9uZyB0
byBmaXQgaW4gdGhlIHN1cHBsaWVkIGJ1ZmZlciwKIGV4Y2VzcyBieXRlcyBtYXkgYmUgZGlzY2Fy
ZGVkIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBzb2NrZXQKIHRoZSBtZXNzYWdlIGlzIHJlY2Vp
dmVkIGZyb20gKHNlZQpAQCAtMTAwLDcgKzEyNyw5IEBAIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVl
CiAuVmEgZXJybm8KIGlzIHNldCB0bwogLkVyIEVBR0FJTiAuCi1UaGUgcmVjZWl2ZSBjYWxscyBu
b3JtYWxseSByZXR1cm4gYW55IGRhdGEgYXZhaWxhYmxlLAorVGhlIHJlY2VpdmUgY2FsbHMgZXhj
ZXB0CisuRm4gcmVjdm1tc2cKK25vcm1hbGx5IHJldHVybiBhbnkgZGF0YSBhdmFpbGFibGUsCiB1
cCB0byB0aGUgcmVxdWVzdGVkIGFtb3VudCwKIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIHJlY2Vp
cHQgb2YgdGhlIGZ1bGwgYW1vdW50IHJlcXVlc3RlZDsKIHRoaXMgYmVoYXZpb3IgaXMgYWZmZWN0
ZWQgYnkgdGhlIHNvY2tldC1sZXZlbCBvcHRpb25zCkBAIC0xMjcsNiArMTU2LDkgQEAgb25lIG9y
IG1vcmUgb2YgdGhlIHZhbHVlczoKIC5JdCBEdiBNU0dfV0FJVEFMTCBUYSB3YWl0IGZvciBmdWxs
IHJlcXVlc3Qgb3IgZXJyb3IKIC5JdCBEdiBNU0dfRE9OVFdBSVQgVGEgZG8gbm90IGJsb2NrCiAu
SXQgRHYgTVNHX0NNU0dfQ0xPRVhFQyBUYSBzZXQgcmVjZWl2ZWQgZmRzIGNsb3NlLW9uLWV4ZWMK
Ky5JdCBEdiBNU0dfV0FJVEZPUk9ORSBUYSBkbyBub3QgYmxvY2sgYWZ0ZXIgcmVjZWl2aW5nIHRo
ZSBmaXJzdCBtZXNzYWdlCisocmVsZXZhbnQgb25seSBmb3IKKy5GbiByZWN2bW1zZyApCiAuRWwK
IC5QcAogVGhlCkBAIC0xNTgsNiArMTkwLDExIEBAIGlzIHNldCB0bwogVGhpcyBmbGFnIGlzIG5v
dCBhdmFpbGFibGUgaW4gc3RyaWN0CiAuVG4gQU5TSQogb3IgQzk5IGNvbXBpbGF0aW9uIG1vZGUu
CitUaGUKKy5EdiBNU0dfV0FJVEZPUk9ORQorZmxhZyBzZXRzIE1TR19ET05UV0FJVCBhZnRlciB0
aGUgZmlyc3QgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC4gVGhpcyBmbGFnCitpcyBvbmx5IHJl
bGV2YW50IGZvcgorLkZuIHJlY3ZtbXNnIC4KIC5QcAogVGhlCiAuRm4gcmVjdm1zZwpAQCAtMjkw
LDkgKzMyNywzNCBAQCBjb250cm9sIGRhdGEgd2VyZSBkaXNjYXJkZWQgZHVlIHRvIGxhY2sgb2Yg
c3BhY2UgaW4gdGhlIGJ1ZmZlcgogZm9yIGFuY2lsbGFyeSBkYXRhLgogLkR2IE1TR19PT0IKIGlz
IHJldHVybmVkIHRvIGluZGljYXRlIHRoYXQgZXhwZWRpdGVkIG9yIG91dC1vZi1iYW5kIGRhdGEg
d2VyZSByZWNlaXZlZC4KKy5QcAorVGhlCisuRm4gcmVjdm1tc2cKK3N5c3RlbSBjYWxsIHVzZXMg
dGhlCisuRmEgbW1zZ2hkcgorc3RydWN0dXJlLiBJdHMgZm9ybSBpcyBhcyBmb2xsb3dzLCBhcyBk
ZWZpbmVkIGluCisuSW4gc3lzL3NvY2tldC5oIDoKKy5CZCAtbGl0ZXJhbAorc3RydWN0IG1tc2do
ZHIgeworCXN0cnVjdCBtc2doZHIJIG1zZ19oZHI7CS8qIG1lc3NhZ2UgaGVhZGVyICovCisJdW5z
aWduZWQgaW50CSBtc2dfbGVuOwkvKiBtZXNzYWdlIGxlbmd0aCAqLworfTsKKy5FZAorLlBwCitG
b3IKKy5GYSBtc2dfaGRyCitzZWUgYWJvdmUuIE9uIGRhdGEgcmVjZXB0aW9uIHRoZQorLkZhIG1z
Z19sZW4KK2ZpZWxkIGlzIHVwZGF0ZWQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgbWVz
c2FnZS4gT24KK2RhdGEgdHJhbnNtaXNzaW9uIGl0IGlzIHVwZGF0ZWQgdG8gdGhlIG51bWJlciBv
ZgorY2hhcmFjdGVycyBzZW50LgogLlNoIFJFVFVSTiBWQUxVRVMKLVRoZXNlIGNhbGxzIHJldHVy
biB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLCBvciAtMQotaWYgYW4gZXJyb3Igb2NjdXJy
ZWQuCitUaGVzZSBjYWxscyBleGNlcHQKKy5GbiByZWN2bW1zZworcmV0dXJuIHRoZSBudW1iZXIg
b2YgYnl0ZXMgcmVjZWl2ZWQuCisuRm4gcmVjdm1tc2cKK3JldHVybnMgdGhlIG51bWJlciBvZiBt
ZXNzYWdlcyByZWNlaXZlZC4KK0EgdmFsdWUgb2YgLTEgaXMgcmV0dXJuZWQgaWYgYW4gZXJyb3Ig
b2NjdXJyZWQuCiAuU2ggRVJST1JTCiBUaGUgY2FsbHMgZmFpbCBpZjoKIC5CbCAtdGFnIC13aWR0
aCBFcgpkaWZmIC0tZ2l0IGEvbGliL2xpYmMvc3lzL3JlY3ZtbXNnLmMgYi9saWIvbGliYy9zeXMv
cmVjdm1tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWE5MzdiCi0t
LSAvZGV2L251bGwKKysrIGIvbGliL2xpYmMvc3lzL3JlY3ZtbXNnLmMKQEAgLTAsMCArMSw5NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBCb3JpcyBBc3RhcmR6aGlldiwgU21hcnRjb20t
QnVsZ2FyaWEgQUQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlKHMpLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGFzCisg
KiAgICB0aGUgZmlyc3QgbGluZXMgb2YgdGhpcyBmaWxlIHVubW9kaWZpZWQgb3RoZXIgdGhhbiB0
aGUgcG9zc2libGUKKyAqICAgIGFkZGl0aW9uIG9mIG9uZSBvciBtb3JlIGNvcHlyaWdodCBub3Rp
Y2VzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZShzKSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVIoUykgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUihTKSBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVk
ZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2Fs
bC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Cisj
aW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorCisjZGVmaW5l
IENNVFIocywgdGltZW91dCkJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlmZF9zZXQgZmRzOwkJ
CQkJCVwKKwkJaW50IHJlczsJCQkJCQlcCisJCQkJCQkJCQlcCisJCUZEX1pFUk8oJmZkcyk7CQkJ
CQkJXAorCQlGRF9TRVQoKHMpLCAmZmRzKTsJCQkJCVwKKwkJcmVzID0gX19zeXNfcHNlbGVjdCgo
cykrMSwgJmZkcywgTlVMTCwgTlVMTCwgKHRpbWVvdXQpLCBOVUxMKTtcCisJCWlmIChyZXMgPT0g
LTEgfHwgcmVzID09IDApCQkJCVwKKwkJCXJldHVybiAocmVzKTsJCQkJCVwKKwkJaWYgKCFGRF9J
U1NFVCgocyksICZmZHMpKQkJCQlcCisJCQlyZXR1cm4gKC0xKTsJCQkJCVwKKwl9IHdoaWxlICgw
KTsKKworc3NpemVfdAorcmVjdm1tc2coaW50IHMsIHN0cnVjdCBtbXNnaGRyICptc2d2ZWMsIHNp
emVfdCB2bGVuLCBpbnQgZmxhZ3MsCisgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0
KQoreworCXNpemVfdCBpLCByY3ZkOworCXNzaXplX3QgcmV0OworCisJaWYgKHRpbWVvdXQgIT0g
TlVMTCkKKwkJQ01UUihzLCB0aW1lb3V0KTsKKworCXJldCA9IF9fc3lzX3JlY3Ztc2cocywgJm1z
Z3ZlY1swXS5tc2dfaGRyLCBmbGFncyk7CisJaWYgKHJldCA9PSAtMSkKKwkJcmV0dXJuIChyZXQp
OworCisJLyogQ2hlY2sgaW5pdGlhbGx5IGZvciB0aGUgcHJlc2VuY2Ugb2YgTVNHX1dBSVRGT1JP
TkUuCisJICogVHVybiBvbiBNU0dfRE9OVFdBSVQgaWYgc2V0LiAqLworCWlmIChmbGFncyAmIE1T
R19XQUlURk9ST05FKSB7CisJCWZsYWdzIHw9IE1TR19ET05UV0FJVDsKKwkJLyogVGhlIGtlcm5l
bCBkb2Vzbid0IG5lZWQgdG8ga25vdyBhYm91dCB0aGlzIGZsYWcuICovCisJCWZsYWdzICY9IH5N
U0dfV0FJVEZPUk9ORTsKKwl9CisKKwlyY3ZkID0gMTsKKwlmb3IgKGkgPSByY3ZkOyBpIDwgdmxl
bjsgaSsrKSB7CisJCXJldCA9IF9fc3lzX3JlY3Ztc2cocywgJm1zZ3ZlY1tpXS5tc2dfaGRyLCBm
bGFncyk7CisJCWlmIChyZXQgPT0gLTEpIHsKKwkJCWlmIChyY3ZkICE9IDApIHsKKwkJCQkvKiBX
ZSd2ZSByZWNlaXZlZCBtZXNzYWdlcy4gTGV0IGNhbGxlciBrbm93LiAqLworCQkJCXJldHVybiAo
cmN2ZCk7CisJCQl9CisJCQlyZXR1cm4gKHJldCk7CisJCX0KKworCQkvKiBTYXZlIHJlY2VpdmVk
IGJ5dGVzICovCisJCW1zZ3ZlY1tpXS5tc2dfbGVuID0gcmV0OworCQlyY3ZkKys7CisJfQorCisJ
cmV0dXJuIChyY3ZkKTsKK30KKworI3VuZGVmIENNVFIKZGlmZiAtLWdpdCBhL2xpYi9saWJjL3N5
cy9zZW5kLjIgYi9saWIvbGliYy9zeXMvc2VuZC4yCmluZGV4IDhmYTJjNjQuLjMzZmE1OGQgMTAw
NjQ0Ci0tLSBhL2xpYi9saWJjL3N5cy9zZW5kLjIKKysrIGIvbGliL2xpYmMvc3lzL3NlbmQuMgpA
QCAtMzQsOCArMzQsOSBAQAogLlNoIE5BTUUKIC5ObSBzZW5kICwKIC5ObSBzZW5kdG8gLAotLk5t
IHNlbmRtc2cKLS5OZCBzZW5kIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0CisuTm0gc2VuZG1zZyAs
CisuTm0gc2VuZG1tc2cKKy5OZCBzZW5kIG1lc3NhZ2UocykgZnJvbSBhIHNvY2tldAogLlNoIExJ
QlJBUlkKIC5MYiBsaWJjCiAuU2ggU1lOT1BTSVMKQEAgLTQ3LDYgKzQ4LDggQEAKIC5GbiBzZW5k
dG8gImludCBzIiAiY29uc3Qgdm9pZCAqbXNnIiAic2l6ZV90IGxlbiIgImludCBmbGFncyIgImNv
bnN0IHN0cnVjdCBzb2NrYWRkciAqdG8iICJzb2NrbGVuX3QgdG9sZW4iCiAuRnQgc3NpemVfdAog
LkZuIHNlbmRtc2cgImludCBzIiAiY29uc3Qgc3RydWN0IG1zZ2hkciAqbXNnIiAiaW50IGZsYWdz
IgorLkZ0IHNzaXplX3QKKy5GbiBzZW5kbW1zZyAiaW50IHMiICJzdHJ1Y3QgbW1zZ2hkciAqbXNn
dmVjIiAic2l6ZV90IHZsZW4iICJpbnQgZmxhZ3MiCiAuU2ggREVTQ1JJUFRJT04KIFRoZQogLkZu
IHNlbmQKQEAgLTU1LDggKzU4LDEwIEBAIGFuZAogLkZuIHNlbmR0bwogYW5kCiAuRm4gc2VuZG1z
ZworYW5kCisuRm4gc2VuZG1tc2cKIHN5c3RlbSBjYWxscwotYXJlIHVzZWQgdG8gdHJhbnNtaXQg
YSBtZXNzYWdlIHRvIGFub3RoZXIgc29ja2V0LgorYXJlIHVzZWQgdG8gdHJhbnNtaXQgb25lIG9y
IG11bHRpcGxlIG1lc3NhZ2VzICh3aXRoIHRoZSBsYXR0ZXIgY2FsbCkgdG8gYW5vdGhlciBzb2Nr
ZXQuCiBUaGUKIC5GbiBzZW5kCiBmdW5jdGlvbgpAQCAtNjYsNiArNzEsOCBAQCBzdGF0ZSwgd2hp
bGUKIC5GbiBzZW5kdG8KIGFuZAogLkZuIHNlbmRtc2cKK2FuZAorLkZuIHNlbmRtbXNnCiBtYXkg
YmUgdXNlZCBhdCBhbnkgdGltZS4KIC5QcAogVGhlIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBpcyBn
aXZlbiBieQpAQCAtODEsNiArODgsMTggQEAgdW5kZXJseWluZyBwcm90b2NvbCwgdGhlIGVycm9y
CiBpcyByZXR1cm5lZCwgYW5kCiB0aGUgbWVzc2FnZSBpcyBub3QgdHJhbnNtaXR0ZWQuCiAuUHAK
K1RoZQorLkZuIHNlbmRtbXNnCitmdW5jdGlvbiBzZW5kcyBtdWx0aXBsZSBtZXNzYWdlcyBhdCBh
IGNhbGwuCitUaGV5IGFyZSBnaXZlbiBieSB0aGUKKy5GYSBtc2d2ZWMKK3ZlY3RvciBhbG9uZyB3
aXRoCisuRmEgdmxlbgorc3BlY2lmeWluZyBpdHMgc2l6ZS4gVGhlIG51bWJlciBvZgorY2hhcmFj
dGVycyBzZW50IHBlciBlYWNoIG1lc3NhZ2UgaXMgcGxhY2VkIGluIHRoZQorLkZhIG1zZ19sZW4K
K2ZpZWxkIG9mIGVhY2ggZWxlbWVudCBvZiB0aGUgdmVjdG9yIGFmdGVyIHRyYW5zbWlzc2lvbi4K
Ky5QcAogTm8gaW5kaWNhdGlvbiBvZiBmYWlsdXJlIHRvIGRlbGl2ZXIgaXMgaW1wbGljaXQgaW4g
YQogLkZuIHNlbmQgLgogTG9jYWxseSBkZXRlY3RlZCBlcnJvcnMgYXJlIGluZGljYXRlZCBieSBh
IHJldHVybiB2YWx1ZSBvZiAtMS4KQEAgLTEzOCwxMCArMTU3LDE2IEBAIFNlZQogLlhyIHJlY3Yg
MgogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCiAuRmEgbXNnaGRyCitzdHJ1Y3R1cmUgYW5kIHRo
ZQorLkZhIG1tc2doZHIKIHN0cnVjdHVyZS4KIC5TaCBSRVRVUk4gVkFMVUVTCi1UaGUgY2FsbCBy
ZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBzZW50LCBvciAtMQotaWYgYW4gZXJyb3Ig
b2NjdXJyZWQuCitBbGwgY2FsbHMgZXhjZXB0CisuRm4gc2VuZG1tc2cKK3JldHVybiB0aGUgbnVt
YmVyIG9mIGNoYXJhY3RlcnMgc2VudC4gVGhlCisuRm4gc2VuZG1tc2cKK2NhbGwgcmV0dXJucyB0
aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQuCitJZiBhbiBlcnJvciBvY2N1cnJlZCBhIHZhbHVl
IG9mIC0xIGlzIHJldHVybmVkLgogLlNoIEVSUk9SUwogVGhlCiAuRm4gc2VuZApAQCAtMTQ5LDYg
KzE3NCw4IEBAIGZ1bmN0aW9uIGFuZAogLkZuIHNlbmR0bwogYW5kCiAuRm4gc2VuZG1zZworYW5k
CisuRm4gc2VuZG1tc2cKIHN5c3RlbSBjYWxscwogZmFpbCBpZjoKIC5CbCAtdGFnIC13aWR0aCBF
cgpkaWZmIC0tZ2l0IGEvbGliL2xpYmMvc3lzL3NlbmRtbXNnLmMgYi9saWIvbGliYy9zeXMvc2Vu
ZG1tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWYzNWEzCi0tLSAv
ZGV2L251bGwKKysrIGIvbGliL2xpYmMvc3lzL3NlbmRtbXNnLmMKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBCb3JpcyBBc3RhcmR6aGlldiwgU21hcnRjb20tQnVs
Z2FyaWEgQUQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlKHMpLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGFzCisgKiAg
ICB0aGUgZmlyc3QgbGluZXMgb2YgdGhpcyBmaWxlIHVubW9kaWZpZWQgb3RoZXIgdGhhbiB0aGUg
cG9zc2libGUKKyAqICAgIGFkZGl0aW9uIG9mIG9uZSBvciBtb3JlIGNvcHlyaWdodCBub3RpY2Vz
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZShzKSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVIoUykgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUihTKSBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAqIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5o
PgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVk
ZSAibGliY19wcml2YXRlLmgiCisKK3NzaXplX3QKK3NlbmRtbXNnKGludCBzLCBzdHJ1Y3QgbW1z
Z2hkciAqbXNndmVjLCBzaXplX3QgdmxlbiwgaW50IGZsYWdzKQoreworCXNpemVfdCBpLCBzZW50
OworCXNzaXplX3QgcmV0OworCisJc2VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHZsZW47IGkr
KykgeworCQlyZXQgPSBfX3N5c19zZW5kbXNnKHMsICZtc2d2ZWNbaV0ubXNnX2hkciwgZmxhZ3Mp
OworCQlpZiAocmV0ID09IC0xKSB7CisJCQlpZiAoc2VudCAhPSAwKSB7CisJCQkJLyogV2UgaGF2
ZSBzZW50IG1lc3NhZ2VzLiBMZXQgY2FsbGVyIGtub3cuICovCisJCQkJcmV0dXJuIChzZW50KTsK
KwkJCX0KKwkJCXJldHVybiAocmV0KTsKKwkJfQorCisJCS8qIFNhdmUgc2VudCBieXRlcyAqLwor
CQltc2d2ZWNbaV0ubXNnX2xlbiA9IHJldDsKKwkJc2VudCsrOworCX0KKworCXJldHVybiAoc2Vu
dCk7Cit9CmRpZmYgLS1naXQgYS9zeXMvc3lzL3NvY2tldC5oIGIvc3lzL3N5cy9zb2NrZXQuaApp
bmRleCAxOGUyZGUxLi5kOTVmMjllIDEwMDY0NAotLS0gYS9zeXMvc3lzL3NvY2tldC5oCisrKyBi
L3N5cy9zeXMvc29ja2V0LmgKQEAgLTQzNSw2ICs0MzUsMTEgQEAgc3RydWN0IG1zZ2hkciB7CiAj
aWZkZWYgX0tFUk5FTAogI2RlZmluZQlNU0dfU09DQUxMQkNLICAgMHgxMDAwMAkJLyogZm9yIHVz
ZSBieSBzb2NrZXQgY2FsbGJhY2tzIC0gc29yZWNlaXZlIChUQ1ApICovCiAjZW5kaWYKKyNpZm5k
ZWYgX0tFUk5FTAorI2lmZGVmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUgTVNHX1dBSVRGT1JPTkUJ
MHgxMDAwMDAJLyogdXNlZCBpbiByZWN2bW1zZygpICovCisjZW5kaWYgLyogX19CU0RfVklTSUJM
RSAqLworI2VuZGlmIC8qICFfS0VSTkVMICovCiAKIC8qCiAgKiBIZWFkZXIgZm9yIGFuY2lsbGFy
eSBkYXRhIG9iamVjdHMgaW4gbXNnX2NvbnRyb2wgYnVmZmVyLgpAQCAtNTk1LDYgKzYwMCwxOCBA
QCBzdHJ1Y3Qgc2ZfaGR0ciB7CiAjZW5kaWYgLyogX0tFUk5FTCAqLwogI2VuZGlmIC8qIF9fQlNE
X1ZJU0lCTEUgKi8KIAorI2lmbmRlZiBfS0VSTkVMCisjaWZkZWYgX19CU0RfVklTSUJMRQorLyoK
KyAqIFNlbmQvcmVjdm1tc2cgc3BlY2lmaWMgc3RydWN0dXJlKHMpCisgKi8KK3N0cnVjdCBtbXNn
aGRyIHsKKwlzdHJ1Y3QgbXNnaGRyCW1zZ19oZHI7CQkvKiBtZXNzYWdlIGhlYWRlciAqLworCXVu
c2lnbmVkIGludAltc2dfbGVuOwkJLyogbWVzc2FnZSBsZW5ndGggKi8KK307CisjZW5kaWYgLyog
X19CU0RfVklTSUJMRSAqLworI2VuZGlmIC8qICFfS0VSTkVMICovCisKICNpZm5kZWYJX0tFUk5F
TAogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CkBAIC02MTUsMTEgKzYzMiwxOSBAQCBpbnQJbGlz
dGVuKGludCwgaW50KTsKIHNzaXplX3QJcmVjdihpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQpOwog
c3NpemVfdAlyZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQsIHN0cnVjdCBzb2NrYWRk
ciAqIF9fcmVzdHJpY3QsIHNvY2tsZW5fdCAqIF9fcmVzdHJpY3QpOwogc3NpemVfdAlyZWN2bXNn
KGludCwgc3RydWN0IG1zZ2hkciAqLCBpbnQpOworI2lmIF9fQlNEX1ZJU0lCTEUKK3N0cnVjdCB0
aW1lc3BlYzsKK3NzaXplX3QJcmVjdm1tc2coaW50LCBzdHJ1Y3QgbW1zZ2hkciAqLCBzaXplX3Qs
IGludCwKKyAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CisjZW5kaWYKIHNzaXplX3QJc2Vu
ZChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwogc3NpemVfdAlzZW5kdG8oaW50LCBj
b25zdCB2b2lkICosCiAJICAgIHNpemVfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwg
c29ja2xlbl90KTsKIHNzaXplX3QJc2VuZG1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwg
aW50KTsKICNpZiBfX0JTRF9WSVNJQkxFCitzc2l6ZV90CXNlbmRtbXNnKGludCwgc3RydWN0IG1t
c2doZHIgKiwgc2l6ZV90LCBpbnQpOworI2VuZGlmCisjaWYgX19CU0RfVklTSUJMRQogaW50CXNl
bmRmaWxlKGludCwgaW50LCBvZmZfdCwgc2l6ZV90LCBzdHJ1Y3Qgc2ZfaGR0ciAqLCBvZmZfdCAq
LCBpbnQpOwogaW50CXNldGZpYihpbnQpOwogI2VuZGlmCg==
--001a114715826cd8660529e8a863--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAP=KkTw=ML=oPo2OgFfmor_nsL3om6HvmTQjKNMrOiU_dmWc2g>