Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Oct 2024 17:12:15 -0400
From:      "David E. Cross" <david@crossfamilyweb.com>
To:        Marek Zarychta <zarychtam@plan-b.pwste.edu.pl>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Review D38047 ... and then there was one....
Message-ID:  <b4a450fd-36e8-d590-d833-aa8cf3a1afa9@crossfamilyweb.com>
In-Reply-To: <f819b96f-81a9-5b95-07e2-1c57c3bdb32e@crossfamilyweb.com>
References:  <1fd47603-0bf2-4fcf-a556-22335d99e203@plan-b.pwste.edu.pl> <DB1FFEBD-1FD4-43A5-9899-85C6DD292E3E@gmail.com> <a9b5e3e7-904f-46be-ab0e-068c6e6fef0a@plan-b.pwste.edu.pl> <553ea3d5-c94e-9c2f-c044-db7986625c74@crossfamilyweb.com> <f819b96f-81a9-5b95-07e2-1c57c3bdb32e@crossfamilyweb.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------GgH21HrghlcuxFkoCfeGNwNA
Content-Type: multipart/alternative;
 boundary="------------357ZKWer2OcMUq5ruO11r39t"

--------------357ZKWer2OcMUq5ruO11r39t
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Ok, I've now tested this with a full buildworld with the attached 
patch.  This will be being updated on D38047 immediately after I send 
this email; and then for the point of the reviews and getting this 
formally into base I will be doing the requested changes of breaking it 
down to smaller, but I figured this should give you a taste of the 
improvements: (this is with 1000 groups and users defined)


~ $ time getent group >/dev/null

         0.26 real         0.00 user         0.01 sys

~ $ time getent group >/dev/null

         0.02 real         0.01 user         0.00 sys


On 10/13/24 14:21, David E. Cross wrote:
>
> I have now fixed this as well.
>
> WARNING, I did this as a manual patch to my tree and then put it back 
> in git, I have not tried this EXACT code as is; I am working on some 
> other changes  as well so things are a bit in flux; I will attach the 
> diff to this, but caveat emptor.
>
> The patch given is to be applied incrementally after the last patch.  
> let met know how it works (or if it works!) for you.
>
> On 10/8/24 16:17, David E. Cross wrote:
>>
>> Ok, I looked a bit into this and for the case of 'getent *' it really 
>> is not (currently) a fair comparison to speed.
>>
>> For 'getent password' the system currently works as follows, for each 
>> datasource in the list fully iterate over EVERY datasource, and 
>> 'cache' is a datasource, but so is ldap.
>>
>> What you wind up getting is a list of EVERYTHNG in files, then a list 
>> of everything in cache, and then a list of everything in LDAP. (or 
>> whatever).   SO every time it will always go back to origin, so 
>> caching effectively doesn't matter except to duplicate the data.
>>
>> I remember this when I was doing the initial development and I looked 
>> into ways to NOT have it do it but for some reason I didn't think it 
>> was possible without a substantial rewrite, I am taking another look 
>> to see if that is still true or if there is a way around it.
>>
>> Going on my vague (it has been multiple years now), I think in the 
>> GENERAL case it is unavoidable.  The way NSCD typically operates is 
>> that looked up values are PUSHED into the cache from the client.  
>> That is the client says 'do you have X'? nscd replies 'no', then the 
>> CLIENT falls back, does the lookup, get the value and pushes it into 
>> nscd.  nscd additionally has a 'perform_lookups' flag that will have 
>> it do the lookup itself and then tell the client the result.  The 
>> interaction of this variable behavior is that there is no way to 
>> programatically shortcircuit it without libc knowing how nscd is 
>> optionally configured.  If libc knew that nscd would perform the 
>> lookups itself then it could for getent type calls just return 
>> immediately after the cache layer enumeration.  if libc knew that 
>> nscd would NOT perform lookups then it could bypass it and do the normal.
>>
>>
>> I guess I could implement it as follows:
>>
>> nscd retruns NS_SUCCESS if it performs its own lookups and then in 
>> the case of getent NS_SUCCESS is treated as a return step for the 
>> cache layer only (since otherwise getent calls are treated as 
>> continue otherwise you'd never enumerate anything after files). and 
>> NS_NOTFOUND if it doesn't.. and then the libc layer would treat that 
>> as a continue.  .. I think that may do it... I need to refamiliarize 
>> myself with that code.
>>
>>
>> In the meantime, checking basic lookups (not enumerations) is a more 
>> fair test.  Also keep in mind that without [notfound=return] that 
>> misses will always fall back to origin, which is probably what you 
>> want with nscd in the default configuration, but not with nscd doing 
>> its own lookups.
>>
>> On 10/7/24 11:33, Marek Zarychta wrote:
>>>
>>> W dniu 7.10.2024 o 07:05, David Cross pisze:
>>>
>>>> How many entries are in your ldap structure?  I can attempt a replication here
>>>
>>> Hello David,
>>>
>>> I will rather not expose it publicly. Whole LDAP directory contains 
>>> few thousand entries - and it was was used for the tests mentioned 
>>> in this thread.
>>>
>>> With the filters applied I see below 1k entries, and then lookup 
>>> with nsdc running takes: first lookup 0.16s, next lookups 0.09s, 
>>> while without nscd it varies from 0.12 to 0.08 - so nscd performs OK.
>>>
>>> I have your patch applied and I am still testing it with 
>>> net/nss-pam-ldapd from ports with patch for login classes applied 
>>> (it's present in port but not enabled by default). So far it works 
>>> without issues.
>>>
>>> -- 
>>> Marek Zarychta
--------------357ZKWer2OcMUq5ruO11r39t
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Ok, I've now tested this with a full buildworld with the attached
      patch.  This will be being updated on D38047 immediately after I
      send this email; and then for the point of the reviews and getting
      this formally into base I will be doing the requested changes of
      breaking it down to smaller, but I figured this should give you a
      taste of the improvements: (this is with 1000 groups and users
      defined)<br>
    </p>
    <p><br>
    </p>
    <p>~ $ time getent group &gt;/dev/null</p>
    <p>        0.26 real         0.00 user         0.01 sys<br>
    </p>
    <p>~ $ time getent group &gt;/dev/null</p>
    <p>        0.02 real         0.01 user         0.00 sys<br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 10/13/24 14:21, David E. Cross
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:f819b96f-81a9-5b95-07e2-1c57c3bdb32e@crossfamilyweb.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p>I have now fixed this as well.</p>
      <p>WARNING, I did this as a manual patch to my tree and then put
        it back in git, I have not tried this EXACT code as is; I am
        working on some other changes  as well so things are a bit in
        flux; I will attach the diff to this, but caveat emptor.</p>
      <p>The patch given is to be applied incrementally after the last
        patch.  let met know how it works (or if it works!) for you.<br>
      </p>
      <div class="moz-cite-prefix">On 10/8/24 16:17, David E. Cross
        wrote:<br>
      </div>
      <blockquote type="cite"
        cite="mid:553ea3d5-c94e-9c2f-c044-db7986625c74@crossfamilyweb.com">
        <meta http-equiv="Content-Type" content="text/html;
          charset=UTF-8">
        <p>Ok, I looked a bit into this and for the case of 'getent *'
          it really is not (currently) a fair comparison to speed.</p>
        <p>For 'getent password' the system currently works as follows,
          for each datasource in the list fully iterate over EVERY
          datasource, and 'cache' is a datasource, but so is ldap.</p>
        <p>What you wind up getting is a list of EVERYTHNG in files,
          then a list of everything in cache, and then a list of
          everything in LDAP. (or whatever).   SO every time it will
          always go back to origin, so caching effectively doesn't
          matter except to duplicate the data.</p>
        <p>I remember this when I was doing the initial development and
          I looked into ways to NOT have it do it but for some reason I
          didn't think it was possible without a substantial rewrite, I
          am taking another look to see if that is still true or if
          there is a way around it.</p>
        <p>Going on my vague (it has been multiple years now), I think
          in the GENERAL case it is unavoidable.  The way NSCD typically
          operates is that looked up values are PUSHED into the cache
          from the client.  That is the client says 'do you have X'?
          nscd replies 'no', then the CLIENT falls back, does the
          lookup, get the value and pushes it into nscd.  nscd
          additionally has a 'perform_lookups' flag that will have it do
          the lookup itself and then tell the client the result.  The
          interaction of this variable behavior is that there is no way
          to programatically shortcircuit it without libc knowing how
          nscd is optionally configured.  If libc knew that nscd would
          perform the lookups itself then it could for getent type calls
          just return immediately after the cache layer enumeration.  if
          libc knew that nscd would NOT perform lookups then it could
          bypass it and do the normal.</p>
        <p><br>
        </p>
        <p>I guess I could implement it as follows:</p>
        <p>nscd retruns NS_SUCCESS if it performs its own lookups and
          then in the case of getent NS_SUCCESS is treated as a return
          step for the cache layer only (since otherwise getent calls
          are treated as continue otherwise you'd never enumerate
          anything after files). and NS_NOTFOUND if it doesn't.. and
          then the libc layer would treat that as a continue.  .. I
          think that may do it... I need to refamiliarize myself with
          that code.</p>
        <p><br>
        </p>
        <p>In the meantime, checking basic lookups (not enumerations) is
          a more fair test.  Also keep in mind that without
          [notfound=return] that misses will always fall back to origin,
          which is probably what you want with nscd in the default
          configuration, but not with nscd doing its own lookups.<br>
        </p>
        <div class="moz-cite-prefix">On 10/7/24 11:33, Marek Zarychta
          wrote:<br>
        </div>
        <blockquote type="cite"
          cite="mid:a9b5e3e7-904f-46be-ab0e-068c6e6fef0a@plan-b.pwste.edu.pl">
          <meta http-equiv="Content-Type" content="text/html;
            charset=UTF-8">
          <p>W dniu 7.10.2024 o 07:05, David Cross pisze: </p>
          <blockquote type="cite"
            cite="mid:DB1FFEBD-1FD4-43A5-9899-85C6DD292E3E@gmail.com">
            <pre class="moz-quote-pre" wrap="">How many entries are in your ldap structure?  I can attempt a replication here</pre>
          </blockquote>
          <p>Hello David, <br>
          </p>
          <p>I will rather not expose it publicly. Whole LDAP directory
            contains few thousand entries - and it was was used for the
            tests mentioned in this thread.</p>
          <p>With the filters applied I see below 1k entries, and then
            lookup with nsdc running takes: first lookup 0.16s, next
            lookups 0.09s, while without nscd it varies from 0.12 to
            0.08 - so nscd performs OK. <br>
          </p>
          <p>I have your patch applied and I am still testing it with
            net/nss-pam-ldapd from ports with patch for login classes
            applied (it's present in port but not enabled by default).
            So far it works without issues.<br>
          </p>
          <p><span style="white-space: pre-wrap">
</span></p>
          <pre class="moz-signature" cols="72">-- 
Marek Zarychta</pre>
        </blockquote>
      </blockquote>
    </blockquote>
  </body>
</html>

--------------357ZKWer2OcMUq5ruO11r39t--
--------------GgH21HrghlcuxFkoCfeGNwNA
Content-Type: text/x-patch; charset=UTF-8; name="nscd.patch"
Content-Disposition: attachment; filename="nscd.patch"
Content-Transfer-Encoding: base64

ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbnNzd2l0Y2guaCBiL2luY2x1ZGUvbnNzd2l0Y2guaApp
bmRleCBjZjZjY2FiYzllYTEuLjQ2MTNjMTE3ZmNmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9u
c3N3aXRjaC5oCisrKyBiL2luY2x1ZGUvbnNzd2l0Y2guaApAQCAtMTkwLDcgKzE5MCw4IEBA
IHR5cGVkZWYgbnNfbXRhYiAqKCpuc3NfbW9kdWxlX3JlZ2lzdGVyX2ZuKShjb25zdCBjaGFy
ICosIHVuc2lnbmVkIGludCAqLAogZW51bSBuc3NfbG9va3VwX3R5cGUgewogCW5zc19sdF9u
YW1lID0gMSwKIAluc3NfbHRfaWQgICA9IDIsCi0JbnNzX2x0X2FsbCAgPSAzCisJbnNzX2x0
X2FsbCAgPSAzLAorCW5zc19sdF9waXZvdD0gNAogfTsKIAogI2lmZGVmIF9OU19QUklWQVRF
CmRpZmYgLS1naXQgYS9saWIvbGliYy9nZW4vZ2V0Z3JlbnQuYyBiL2xpYi9saWJjL2dlbi9n
ZXRncmVudC5jCmluZGV4IDUwOGUzZDYzZWI2MC4uZDQ4NzczNGU2NjFmIDEwMDY0NAotLS0g
YS9saWIvbGliYy9nZW4vZ2V0Z3JlbnQuYworKysgYi9saWIvbGliYy9nZW4vZ2V0Z3JlbnQu
YwpAQCAtMTUxLDYgKzE1MSw4IEBAIHN0YXRpYwlpbnQJZ2V0Z3JvdXBtZW1iZXJzaGlwX2Zh
bGxiYWNrKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKIHN0YXRpYwlpbnQJIGdycF9pZF9m
dW5jKGNoYXIgKiwgc2l6ZV90ICosIHZhX2xpc3QsIHZvaWQgKik7CiBzdGF0aWMJaW50CSBn
cnBfbWFyc2hhbF9mdW5jKGNoYXIgKiwgc2l6ZV90ICosIHZvaWQgKiwgdmFfbGlzdCwgdm9p
ZCAqKTsKIHN0YXRpYwlpbnQJIGdycF91bm1hcnNoYWxfZnVuYyhjaGFyICosIHNpemVfdCwg
dm9pZCAqLCB2YV9saXN0LCB2b2lkICopOworc3RhdGljCWludAkgZ3JwbGlzdF9tYXJzaGFs
X2Z1bmMoY2hhciAqLCBzaXplX3QgKiwgdm9pZCAqLCB2YV9saXN0LCB2b2lkICopOworc3Rh
dGljCWludAkgZ3JwbGlzdF91bm1hcnNoYWxfZnVuYyhjaGFyICosIHNpemVfdCwgdm9pZCAq
LCB2YV9saXN0LCB2b2lkICopOwogCiBzdGF0aWMgaW50CiBncnBfaWRfZnVuYyhjaGFyICpi
dWZmZXIsIHNpemVfdCAqYnVmZmVyX3NpemUsIHZhX2xpc3QgYXAsIHZvaWQgKmNhY2hlX21k
YXRhKQpAQCAtMTY3LDE1ICsxNjksMTUgQEAgZ3JwX2lkX2Z1bmMoY2hhciAqYnVmZmVyLCBz
aXplX3QgKmJ1ZmZlcl9zaXplLCB2YV9saXN0IGFwLCB2b2lkICpjYWNoZV9tZGF0YSkKIAlz
d2l0Y2ggKGxvb2t1cF90eXBlKSB7CiAJY2FzZSBuc3NfbHRfbmFtZToKIAkJbmFtZSA9IHZh
X2FyZyhhcCwgY2hhciAqKTsKLQkJc2l6ZSA9IHN0cmxlbihuYW1lKTsKLQkJZGVzaXJlZF9z
aXplID0gc2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKSArIHNpemUgKyAxOworCQlzaXpl
ID0gc3RybGVuKG5hbWUpICsgMTsKKwkJZGVzaXJlZF9zaXplID0gc2l6ZW9mKGVudW0gbnNz
X2xvb2t1cF90eXBlKSArIHNpemU7CiAJCWlmIChkZXNpcmVkX3NpemUgPiAqYnVmZmVyX3Np
emUpIHsKIAkJCXJlcyA9IE5TX1JFVFVSTjsKIAkJCWdvdG8gZmluOwogCQl9CiAKIAkJbWVt
Y3B5KGJ1ZmZlciwgJmxvb2t1cF90eXBlLCBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUp
KTsKLQkJbWVtY3B5KGJ1ZmZlciArIHNpemVvZihlbnVtIG5zc19sb29rdXBfdHlwZSksIG5h
bWUsIHNpemUgKyAxKTsKKwkJbWVtY3B5KGJ1ZmZlciArIHNpemVvZihlbnVtIG5zc19sb29r
dXBfdHlwZSksIG5hbWUsIHNpemUpOwogCiAJCXJlcyA9IE5TX1NVQ0NFU1M7CiAJCWJyZWFr
OwpAQCAtMTkxLDYgKzE5MywyMiBAQCBncnBfaWRfZnVuYyhjaGFyICpidWZmZXIsIHNpemVf
dCAqYnVmZmVyX3NpemUsIHZhX2xpc3QgYXAsIHZvaWQgKmNhY2hlX21kYXRhKQogCQltZW1j
cHkoYnVmZmVyICsgc2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKSwgJmdpZCwKIAkJICAg
IHNpemVvZihnaWRfdCkpOwogCisJCXJlcyA9IE5TX1NVQ0NFU1M7CisJCWJyZWFrOworCWNh
c2UgbnNzX2x0X3Bpdm90OgorCQluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworCQlnaWQg
PSB2YV9hcmcoYXAsIGdpZF90KTsKKwkJc2l6ZSA9IHN0cmxlbihuYW1lKSArIDE7CisKKwkJ
ZGVzaXJlZF9zaXplID0gc2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKSArIHNpemUgKyBz
aXplb2YoZ2lkX3QpOworCQlpZiAoZGVzaXJlZF9zaXplID4gKmJ1ZmZlcl9zaXplKSB7CisJ
CQlyZXMgPSBOU19SRVRVUk47CisJCQlnb3RvIGZpbjsKKwkJfQorCisJCW1lbWNweShidWZm
ZXIsICZsb29rdXBfdHlwZSwgc2l6ZW9mIChlbnVtIG5zc19sb29rdXBfdHlwZSkpOworCQlt
ZW1jcHkoYnVmZmVyICsgc2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKSwgbmFtZSwgc2l6
ZSk7CisJCW1lbWNweShidWZmZXIgKyBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUpICsg
c2l6ZSwgJmdpZCwgc2l6ZW9mKGdpZF90KSk7CiAJCXJlcyA9IE5TX1NVQ0NFU1M7CiAJCWJy
ZWFrOwogCWRlZmF1bHQ6CkBAIC0yMDMsNiArMjIxLDM2IEBAIGdycF9pZF9mdW5jKGNoYXIg
KmJ1ZmZlciwgc2l6ZV90ICpidWZmZXJfc2l6ZSwgdmFfbGlzdCBhcCwgdm9pZCAqY2FjaGVf
bWRhdGEpCiAJcmV0dXJuIChyZXMpOwogfQogCitzdGF0aWMgaW50CitncnBsaXN0X21hcnNo
YWxfZnVuYyhjaGFyICpidWZmZXIsIHNpemVfdCAqYnVmZmVyX3NpemUsIHZvaWQgKnJldHZh
bCwKKyAgICB2YV9saXN0IGFwLCB2b2lkICpjYWNoZV9tZGF0YSkKK3sKKwljaGFyICpuYW1l
IF9fdW51c2VkOworCWdpZF90IGJhc2VnaWQgX191bnVzZWQ7CisJZ2lkX3QgKmdyb3VwczsK
KwlpbnQgbWF4Z3JvdXBzIF9fdW51c2VkLCAqbmdyb3VwczsKKwlzaXplX3QgZGVzaXJlZF9z
aXplOworCisJbmFtZSA9IHZhX2FyZyhhcCwgY2hhciopOworCWJhc2VnaWQgPSB2YV9hcmco
YXAsIGdpZF90KTsKKwlncm91cHMgPSB2YV9hcmcoYXAsIGdpZF90ICopOworCW1heGdyb3Vw
cyA9IHZhX2FyZyhhcCwgaW50KTsKKwluZ3JvdXBzID0gdmFfYXJnKGFwLCBpbnQgKik7CisK
KwlkZXNpcmVkX3NpemUgPSBzaXplb2YoaW50KSArIChzaXplb2YoZ2lkX3QpICogKCpuZ3Jv
dXBzKSk7CisKKwlpZiAoYnVmZmVyID09IE5VTEwgfHwgZGVzaXJlZF9zaXplID4gKmJ1ZmZl
cl9zaXplKSB7CisJCSpidWZmZXJfc2l6ZSA9IGRlc2lyZWRfc2l6ZTsKKwkJcmV0dXJuIChO
U19SRVRVUk4pOworCX0KKworCSpidWZmZXJfc2l6ZSA9IGRlc2lyZWRfc2l6ZTsKKwltZW1j
cHkoYnVmZmVyLCBuZ3JvdXBzLCBzaXplb2YoaW50KSk7CisJbWVtY3B5KGJ1ZmZlciArIHNp
emVvZihpbnQpLCBncm91cHMsIHNpemVvZihnaWRfdCkgKiAoKm5ncm91cHMpKTsKKworCXJl
dHVybiAoTlNfU1VDQ0VTUyk7Cit9CisKIHN0YXRpYyBpbnQKIGdycF9tYXJzaGFsX2Z1bmMo
Y2hhciAqYnVmZmVyLCBzaXplX3QgKmJ1ZmZlcl9zaXplLCB2b2lkICpyZXR2YWwsIHZhX2xp
c3QgYXAsCiAgICAgdm9pZCAqY2FjaGVfbWRhdGEpCkBAIC0yOTcsNiArMzQ1LDM4IEBAIGdy
cF9tYXJzaGFsX2Z1bmMoY2hhciAqYnVmZmVyLCBzaXplX3QgKmJ1ZmZlcl9zaXplLCB2b2lk
ICpyZXR2YWwsIHZhX2xpc3QgYXAsCiAJcmV0dXJuIChOU19TVUNDRVNTKTsKIH0KIAorc3Rh
dGljIGludAorZ3JwbGlzdF91bm1hcnNoYWxfZnVuYyhjaGFyICpidWZmZXIsIHNpemVfdCBi
dWZmZXJfc2l6ZSwgdm9pZCAqcmV0dmFsLAorICAgIHZhX2xpc3QgYXAsIHZvaWQgKmNhY2hl
X21kYXRhKQoreworCWNoYXIgKm5hbWUgX191bnVzZWQ7CisJZ2lkX3QgYmFzZWdpZCBfX3Vu
dXNlZDsKKwlnaWRfdCAqZ3JvdXBzOworCWludCAqcG5ncm91cHMsIG1heGdyb3Vwcywgb3Jp
Z2luYWxfbmdyb3VwczsKKwlpbnQgKnJldF9lcnJubzsKKworCW5hbWUgPSB2YV9hcmcoYXAs
IGNoYXIgKik7CisJYmFzZWdpZCA9IHZhX2FyZyhhcCwgZ2lkX3QpOworCWdyb3VwcyA9IHZh
X2FyZyhhcCwgZ2lkX3QgKik7CisJbWF4Z3JvdXBzID0gdmFfYXJnKGFwLCBpbnQpOworCXBu
Z3JvdXBzID0gdmFfYXJnKGFwLCBpbnQgKik7CisJcmV0X2Vycm5vID0gdmFfYXJnKGFwLCBp
bnQgKik7CisKKwlpZiAoYnVmZmVyX3NpemUgPCBzaXplb2YoaW50KSkgeworCQkqcmV0X2Vy
cm5vID0gMDsKKwkJcmV0dXJuIChOU19OT1RGT1VORCk7CisJfQorCW1lbWNweSgmb3JpZ2lu
YWxfbmdyb3VwcywgYnVmZmVyLCBzaXplb2YoaW50KSk7CisJaWYgKGJ1ZmZlcl9zaXplIDwg
c2l6ZW9mKGludCkgKyAob3JpZ2luYWxfbmdyb3VwcyAqIHNpemVvZihnaWRfdCkpKSB7CisJ
CXJldHVybiBOU19VTkFWQUlMOworCX0KKwltZW1jcHkoZ3JvdXBzLCBidWZmZXIgKyBzaXpl
b2YoaW50KSwgc2l6ZW9mKGdpZF90KSAqCisJCSgob3JpZ2luYWxfbmdyb3VwcyA+IG1heGdy
b3VwcykgPyBtYXhncm91cHMgOiBvcmlnaW5hbF9uZ3JvdXBzKSk7CisJKnBuZ3JvdXBzID0g
b3JpZ2luYWxfbmdyb3VwczsKKwkqcmV0X2Vycm5vID0gMDsKKwlyZXR1cm4gTlNfU1VDQ0VT
UzsKK30KKwogc3RhdGljIGludAogZ3JwX3VubWFyc2hhbF9mdW5jKGNoYXIgKmJ1ZmZlciwg
c2l6ZV90IGJ1ZmZlcl9zaXplLCB2b2lkICpyZXR2YWwsIHZhX2xpc3QgYXAsCiAgICAgdm9p
ZCAqY2FjaGVfbWRhdGEpCkBAIC00NzYsNyArNTU2LDcgQEAgZ2V0Z3JvdXBtZW1iZXJzaGlw
X2ZhbGxiYWNrKHZvaWQgKnJldHZhbCwgdm9pZCAqbWRhdGEsIHZhX2xpc3QgYXApCiAJZ2lk
X3QJCSpncm91cHM7CiAJZ2lkX3QJCWFncm91cDsKIAlpbnQgCQltYXhncnAsICpncnBjbnQ7
Ci0JaW50CQlpLCBydiwgcmV0X2Vycm5vOworCWludAkJaSwgcnYsIHN1Yl9lcnJubywgKnJl
dF9lcnJubzsKIAogCS8qCiAJICogQXMgdGhpcyBpcyBhIGZhbGxiYWNrIG1ldGhvZCwgb25s
eSBwcm92aWRlZCBzcmMKQEAgLTQ4OSw2ICs1NjksNyBAQCBnZXRncm91cG1lbWJlcnNoaXBf
ZmFsbGJhY2sodm9pZCAqcmV0dmFsLCB2b2lkICptZGF0YSwgdmFfbGlzdCBhcCkKIAlncm91
cHMgPSB2YV9hcmcoYXAsIGdpZF90ICopOwogCW1heGdycCA9IHZhX2FyZyhhcCwgaW50KTsK
IAlncnBjbnQgPSB2YV9hcmcoYXAsIGludCAqKTsgCisJcmV0X2Vycm5vID0gdmFfYXJnKGFw
LCBpbnQgKik7CiAKIAlydiA9IE5TX1VOQVZBSUw7CiAKQEAgLTUwMywxMiArNTg0LDEyIEBA
IGdldGdyb3VwbWVtYmVyc2hpcF9mYWxsYmFjayh2b2lkICpyZXR2YWwsIHZvaWQgKm1kYXRh
LCB2YV9saXN0IGFwKQogCV9uc2Rpc3BhdGNoKE5VTEwsIHNldGdyZW50X2R0YWIsIE5TREJf
R1JPVVAsICJzZXRncmVudCIsIHNyYywgMCk7CiAJZm9yICg7OykgewogCQlkbyB7Ci0JCQly
ZXRfZXJybm8gPSAwOworCQkJc3ViX2Vycm5vID0gMDsKIAkJCWdycF9wID0gTlVMTDsKIAkJ
CXJ2ID0gX25zZGlzcGF0Y2goJmdycF9wLCBnZXRncmVudF9yX2R0YWIsIE5TREJfR1JPVVAs
Ci0JCQkgICAgImdldGdyZW50X3IiLCBzcmMsICZncnAsIGJ1ZiwgYnVmc2l6ZSwgJnJldF9l
cnJubyk7CisJCQkgICAgImdldGdyZW50X3IiLCBzcmMsICZncnAsIGJ1ZiwgYnVmc2l6ZSwg
JnN1Yl9lcnJubyk7CiAKLQkJCWlmIChncnBfcCA9PSBOVUxMICYmIHJldF9lcnJubyA9PSBF
UkFOR0UpIHsKKwkJCWlmIChncnBfcCA9PSBOVUxMICYmIHN1Yl9lcnJubyA9PSBFUkFOR0Up
IHsKIAkJCQlmcmVlKGJ1Zik7CiAJCQkJaWYgKChidWZzaXplIDw8IDEpID4gR1JQX1NUT1JB
R0VfTUFYKSB7CiAJCQkJCWJ1ZiA9IE5VTEw7CkBAIC01MjIsMTAgKzYwMywxMCBAQCBnZXRn
cm91cG1lbWJlcnNoaXBfZmFsbGJhY2sodm9pZCAqcmV0dmFsLCB2b2lkICptZGF0YSwgdmFf
bGlzdCBhcCkKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQogCQkJfQotCQl9IHdoaWxlIChncnBf
cCA9PSBOVUxMICYmIHJldF9lcnJubyA9PSBFUkFOR0UpOworCQl9IHdoaWxlIChncnBfcCA9
PSBOVUxMICYmIHN1Yl9lcnJubyA9PSBFUkFOR0UpOwogCi0JCWlmIChyZXRfZXJybm8gIT0g
MCkgewotCQkJZXJybm8gPSByZXRfZXJybm87CisJCWlmIChzdWJfZXJybm8gIT0gMCkgewor
CQkJKnJldF9lcnJubyA9IHN1Yl9lcnJubzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTY2
NSw4ICs3NDYsMTkgQEAgaW50CiBfX2dldGdyb3VwbWVtYmVyc2hpcChjb25zdCBjaGFyICp1
bmFtZSwgZ2lkX3QgYWdyb3VwLCBnaWRfdCAqZ3JvdXBzLAogCWludCBtYXhncnAsIGludCAq
Z3JwY250KQogeworCWludCByZXRfZXJybm8gPSAwOworI2lmZGVmIE5TX0NBQ0hJTkcKKwlz
dGF0aWMgY29uc3QgbnNzX2NhY2hlX2luZm8gY2FjaGVfaW5mbyA9CisJCU5TX0NPTU1PTl9D
QUNIRV9JTkZPX0lOSVRJQUxJWkVSKAorCQlncm91cCwgKHZvaWQgKiluc3NfbHRfcGl2b3Qs
CisJCWdycF9pZF9mdW5jLCBncnBsaXN0X21hcnNoYWxfZnVuYywgZ3JwbGlzdF91bm1hcnNo
YWxfZnVuYyk7CisjZW5kaWYKKwogCXN0YXRpYyBjb25zdCBuc19kdGFiIGR0YWJbXSA9IHsK
IAkJTlNfRkFMTEJBQ0tfQ0IoZ2V0Z3JvdXBtZW1iZXJzaGlwX2ZhbGxiYWNrKQorI2lmZGVm
IE5TX0NBQ0hJTkcKKwkJTlNfQ0FDSEVfQ0IoJmNhY2hlX2luZm8pCisjZW5kaWYKIAkJeyBO
VUxMLCBOVUxMLCBOVUxMIH0KIAl9OwogCkBAIC02NzYsOSArNzY4LDEwIEBAIF9fZ2V0Z3Jv
dXBtZW1iZXJzaGlwKGNvbnN0IGNoYXIgKnVuYW1lLCBnaWRfdCBhZ3JvdXAsIGdpZF90ICpn
cm91cHMsCiAKIAkqZ3JwY250ID0gMDsKIAkodm9pZClfbnNkaXNwYXRjaChOVUxMLCBkdGFi
LCBOU0RCX0dST1VQLCAiZ2V0Z3JvdXBtZW1iZXJzaGlwIiwKLQkgICAgZGVmYXVsdHNyYywg
dW5hbWUsIGFncm91cCwgZ3JvdXBzLCBtYXhncnAsIGdycGNudCk7CisJICAgIGRlZmF1bHRz
cmMsIHVuYW1lLCBhZ3JvdXAsIGdyb3VwcywgbWF4Z3JwLCBncnBjbnQsICZyZXRfZXJybm8p
OwogCiAJLyogdG9vIG1hbnkgZ3JvdXBzIGZvdW5kPyAqLworCWVycm5vID0gcmV0X2Vycm5v
OwogCXJldHVybiAoKmdycGNudCA+IG1heGdycCA/IC0xIDogMCk7CiB9CiAKZGlmZiAtLWdp
dCBhL2xpYi9saWJjL2dlbi9nZXRwd2VudC5jIGIvbGliL2xpYmMvZ2VuL2dldHB3ZW50LmMK
aW5kZXggMWNiZjk3ZTdlYjUyLi44ZTUyZjNkMzY4MGIgMTAwNjQ0Ci0tLSBhL2xpYi9saWJj
L2dlbi9nZXRwd2VudC5jCisrKyBiL2xpYi9saWJjL2dlbi9nZXRwd2VudC5jCkBAIC0yMTQs
MTUgKzIxNCwxNSBAQCBwd2RfaWRfZnVuYyhjaGFyICpidWZmZXIsIHNpemVfdCAqYnVmZmVy
X3NpemUsIHZhX2xpc3QgYXAsIHZvaWQgKmNhY2hlX21kYXRhKQogCXN3aXRjaCAobG9va3Vw
X3R5cGUpIHsKIAljYXNlIG5zc19sdF9uYW1lOgogCQluYW1lID0gdmFfYXJnKGFwLCBjaGFy
ICopOwotCQlzaXplID0gc3RybGVuKG5hbWUpOwotCQlkZXNpcmVkX3NpemUgPSBzaXplb2Yo
ZW51bSBuc3NfbG9va3VwX3R5cGUpICsgc2l6ZSArIDE7CisJCXNpemUgPSBzdHJsZW4obmFt
ZSkgKyAxOworCQlkZXNpcmVkX3NpemUgPSBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUp
ICsgc2l6ZTsKIAkJaWYgKGRlc2lyZWRfc2l6ZSA+ICpidWZmZXJfc2l6ZSkgewogCQkJcmVz
ID0gTlNfUkVUVVJOOwogCQkJZ290byBmaW47CiAJCX0KIAogCQltZW1jcHkoYnVmZmVyLCAm
bG9va3VwX3R5cGUsIHNpemVvZihlbnVtIG5zc19sb29rdXBfdHlwZSkpOwotCQltZW1jcHko
YnVmZmVyICsgc2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKSwgbmFtZSwgc2l6ZSArIDEp
OworCQltZW1jcHkoYnVmZmVyICsgc2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKSwgbmFt
ZSwgc2l6ZSk7CiAKIAkJcmVzID0gTlNfU1VDQ0VTUzsKIAkJYnJlYWs7CmRpZmYgLS1naXQg
YS9saWIvbGliYy9uZXQvbnNjYWNoZS5jIGIvbGliL2xpYmMvbmV0L25zY2FjaGUuYwppbmRl
eCAzNTM3ZDc3ZWRiYmUuLjkzNzVkMWM5YWRiMSAxMDA2NDQKLS0tIGEvbGliL2xpYmMvbmV0
L25zY2FjaGUuYworKysgYi9saWIvbGliYy9uZXQvbnNjYWNoZS5jCkBAIC0zMTcsMTEgKzMx
NywxMSBAQCBfX25zc19tcF9jYWNoZV9yZWFkKHZvaWQgKnJldHZhbCwgdm9pZCAqbWRhdGEs
IHZhX2xpc3QgYXApCiAJCV9fY2xvc2VfY2FjaGVkX21wX3JlYWRfc2Vzc2lvbihycyk7CiAJ
CXJzID0gSU5WQUxJRF9DQUNIRURfTVBfUkVBRF9TRVNTSU9OOwogCQljYWNoZV9pbmZvLT5z
ZXRfbXBfcnNfZnVuYyhycyk7Ci0JCXJldHVybiAocmVzID09IC0xID8gTlNfUkVUVVJOIDog
TlNfVU5BVkFJTCk7CisJCXJldHVybiAocmVzID09IDEgPyBOU19OT1RGT1VORCA6IE5TX1VO
QVZBSUwpOwogCX0KIAogCWZyZWUoYnVmZmVyKTsKLQlyZXR1cm4gKHJlcyA9PSAwID8gTlNf
U1VDQ0VTUyA6IE5TX05PVEZPVU5EKTsKKwlyZXR1cm4gKE5TX1NVQ0NFU1MpOwogfQogCiBp
bnQKZGlmZiAtLWdpdCBhL2xpYi9saWJjL25ldC9uc2NhY2hlZGNsaS5jIGIvbGliL2xpYmMv
bmV0L25zY2FjaGVkY2xpLmMKaW5kZXggZjU3ZTY5YmRjZWIyLi5iYjNmMTM3ODRmNGMgMTAw
NjQ0Ci0tLSBhL2xpYi9saWJjL25ldC9uc2NhY2hlZGNsaS5jCisrKyBiL2xpYi9saWJjL25l
dC9uc2NhY2hlZGNsaS5jCkBAIC01MzgsNyArNTM4LDcgQEAgX19jYWNoZWRfbXBfcmVhZChz
dHJ1Y3QgY2FjaGVkX2Nvbm5lY3Rpb25fICpycywgY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRh
X3NpemUpCiAJCWdvdG8gZmluOwogCiAJaWYgKHJlY19lcnJvcl9jb2RlICE9IDApIHsKLQkJ
ZXJyb3JfY29kZSA9IHJlY19lcnJvcl9jb2RlOworCQllcnJvcl9jb2RlID0gLXJlY19lcnJv
cl9jb2RlOwogCQlnb3RvIGZpbjsKIAl9CiAKZGlmZiAtLWdpdCBhL2xpYi9saWJjL25ldC9u
c2Rpc3BhdGNoLmMgYi9saWIvbGliYy9uZXQvbnNkaXNwYXRjaC5jCmluZGV4IDYwYmFhMDAx
NDkwNC4uODg1NTg5NTJkM2UwIDEwMDY0NAotLS0gYS9saWIvbGliYy9uZXQvbnNkaXNwYXRj
aC5jCisrKyBiL2xpYi9saWJjL25ldC9uc2Rpc3BhdGNoLmMKQEAgLTEyNCwxMCArMTI0LDEw
IEBAIHN0YXRpYwl2b2lkCQkJKm5zc19idWlsdGluX2hhbmRsZSA9ICZfX25zc19idWlsdGlu
X2hhbmRsZTsKIAogI2lmZGVmIE5TX0NBQ0hJTkcKIC8qCi0gKiBDYWNoZSBsb29rdXAgY3lj
bGUgcHJldmVudGlvbiBmdW5jdGlvbiAtIGlmICFOVUxMIHRoZW4gbm8gY2FjaGUgbG9va3Vw
cworICogQ2FjaGUgbG9va3VwIGN5Y2xlIHByZXZlbnRpb24gc3ltYm9sIC0gaWYgIU5VTEwg
dGhlbiBubyBjYWNoZSBsb29rdXBzCiAgKiB3aWxsIGJlIG1hZGUKICAqLwotc3RhdGljCXZv
aWQJCQkqbnNzX2NhY2hlX2N5Y2xlX3ByZXZlbnRpb25fZnVuYyA9IE5VTEw7CitzdGF0aWMJ
dm9pZAkJCSpuc3NfY2FjaGVfY3ljbGVfcHJldmVudGlvbl9zeW0gPSBOVUxMOwogI2VuZGlm
CiAKIC8qCkBAIC0zOTQsOCArMzk0LDggQEAgbnNzX2NvbmZpZ3VyZSh2b2lkKQogI2lmZGVm
IE5TX0NBQ0hJTkcKIAloYW5kbGUgPSBsaWJjX2Rsb3BlbihOVUxMLCBSVExEX0xBWlkgfCBS
VExEX0dMT0JBTCk7CiAJaWYgKGhhbmRsZSAhPSBOVUxMKSB7Ci0JCW5zc19jYWNoZV9jeWNs
ZV9wcmV2ZW50aW9uX2Z1bmMgPSBkbHN5bShoYW5kbGUsCi0JCSAgICAiX25zc19jYWNoZV9j
eWNsZV9wcmV2ZW50aW9uX2Z1bmN0aW9uIik7CisJCW5zc19jYWNoZV9jeWNsZV9wcmV2ZW50
aW9uX3N5bSA9IGRsc3ltKGhhbmRsZSwKKwkJICAgICJfbnNzX2NhY2hlX2N5Y2xlX3ByZXZl
bnRpb25fc3ltYm9sIik7CiAJCWRsY2xvc2UoaGFuZGxlKTsKIAl9CiAjZW5kaWYKQEAgLTY0
MSw2ICs2NDEsMTMgQEAgX25zZGlzcGF0Y2godm9pZCAqcmV0dmFsLCBjb25zdCBuc19kdGFi
IGRpc3BfdGFiW10sIGNvbnN0IGNoYXIgKmRhdGFiYXNlLAogCW5zc19jYWNoZV9kYXRhCSBj
YWNoZV9kYXRhOwogCW5zc19jYWNoZV9kYXRhCSpjYWNoZV9kYXRhX3A7CiAJaW50CQkgY2Fj
aGVfZmxhZzsKKwlpbnQJCSBjYWNoZV9zdGFydDsKKwlpbnQJCSBpc19uc2NkOworCisJY2Fj
aGVfc3RhcnQgPSAwOworCWNhY2hlX2ZsYWcgPSAwOworCWNhY2hlX2RhdGFfcCA9IE5VTEw7
CisJaXNfbnNjZCA9IG5zc19jYWNoZV9jeWNsZV9wcmV2ZW50aW9uX3N5bSAhPSBOVUxMOwog
I2VuZGlmCiAJCiAJZGJ0ID0gTlVMTDsKQEAgLTY4NSwxOSArNjkyLDI4IEBAIF9uc2Rpc3Bh
dGNoKHZvaWQgKnJldHZhbCwgY29uc3QgbnNfZHRhYiBkaXNwX3RhYltdLCBjb25zdCBjaGFy
ICpkYXRhYmFzZSwKIAkJCXNyY2xpc3RzaXplKys7CiAJfQogCisJZm9yIChpID0gMDsgaSA8
IHNyY2xpc3RzaXplOyBpKyspIHsKICNpZmRlZiBOU19DQUNISU5HCi0JY2FjaGVfZGF0YV9w
ID0gTlVMTDsKLQljYWNoZV9mbGFnID0gMDsKKwkJaW50IGlzX2NhY2hlOworCisJCWlzX2Nh
Y2hlID0gc3RyY21wKHNyY2xpc3RbaV0ubmFtZSwgTlNTUkNfQ0FDSEUpID09IDA7CisKKwkJ
aWYgKGlzX2NhY2hlKSB7CisJCQljYWNoZV9zdGFydCA9IDE7CisKKwkJCWlmIChpc19uc2Nk
KSB7CisJCQkJLyogZG9uJ3QgdHJ5IHRvIGNhbGwgbnNjZCBpbnNpZGUgbnNjZCAqLworCQkJ
CWNvbnRpbnVlOworCQkJfQorCQl9CiAjZW5kaWYKLQlmb3IgKGkgPSAwOyBpIDwgc3JjbGlz
dHNpemU7IGkrKykgewogCQlyZXN1bHQgPSBOU19OT1RGT1VORDsKIAkJbWV0aG9kID0gbnNz
X21ldGhvZF9sb29rdXAoc3JjbGlzdFtpXS5uYW1lLCBkYXRhYmFzZSwKIAkJICAgIG1ldGhv
ZF9uYW1lLCBkaXNwX3RhYiwgJm1kYXRhKTsKIAogCQlpZiAobWV0aG9kICE9IE5VTEwpIHsK
ICNpZmRlZiBOU19DQUNISU5HCi0JCQlpZiAoc3RyY21wKHNyY2xpc3RbaV0ubmFtZSwgTlNT
UkNfQ0FDSEUpID09IDAgJiYKLQkJCSAgICBuc3NfY2FjaGVfY3ljbGVfcHJldmVudGlvbl9m
dW5jID09IE5VTEwpIHsKKwkJCWlmIChpc19jYWNoZSkgewogI2lmZGVmIE5TX1NUUklDVF9M
SUJDX0VJRF9DSEVDS0lORwogCQkJCWlmIChpc3NldHVnaWQoKSAhPSAwKQogCQkJCQljb250
aW51ZTsKQEAgLTczMyw4ICs3NDksNiBAQCBfbnNkaXNwYXRjaCh2b2lkICpyZXR2YWwsIGNv
bnN0IG5zX2R0YWIgZGlzcF90YWJbXSwgY29uc3QgY2hhciAqZGF0YWJhc2UsCiAJCQl2YV9l
bmQoYXApOwogI2VuZGlmIC8qIE5TX0NBQ0hJTkcgKi8KIAotCQkJaWYgKHJlc3VsdCAmIChz
cmNsaXN0W2ldLmZsYWdzKSkKLQkJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCWlmIChmYl9t
ZXRob2QgIT0gTlVMTCkgewogCQkJCXNhdmVkX2RlcHRoID0gc3QtPmZhbGxiYWNrX2RlcHRo
OwpAQCAtNzQ5LDEwICs3NjMsMTIgQEAgX25zZGlzcGF0Y2godm9pZCAqcmV0dmFsLCBjb25z
dCBuc19kdGFiIGRpc3BfdGFiW10sIGNvbnN0IGNoYXIgKmRhdGFiYXNlLAogCQkJCSAgICAi
YW5kIG5vIGZhbGxiYWNrIHByb3ZpZGVkIiwKIAkJCQkgICAgc3JjbGlzdFtpXS5uYW1lLCBk
YXRhYmFzZSwgbWV0aG9kX25hbWUpOwogCQl9CisJCWlmIChyZXN1bHQgJiAoc3JjbGlzdFtp
XS5mbGFncykpCisJCQlicmVhazsKIAl9CiAKICNpZmRlZiBOU19DQUNISU5HCi0JaWYgKGNh
Y2hlX2RhdGFfcCAhPSBOVUxMICYmCisJaWYgKCFpc19uc2NkICYmIGNhY2hlX3N0YXJ0ICYm
IGNhY2hlX2RhdGFfcCAhPSBOVUxMICYmCiAJICAgIChyZXN1bHQgJiAoTlNfTk9URk9VTkQg
fCBOU19TVUNDRVNTKSkgJiYgY2FjaGVfZmxhZyA9PSAwKSB7CiAJCXZhX3N0YXJ0KGFwLCBk
ZWZhdWx0cyk7CiAJCWlmIChyZXN1bHQgPT0gTlNfU1VDQ0VTUykgewpkaWZmIC0tZ2l0IGEv
dXNyLnNiaW4vbnNjZC9NYWtlZmlsZSBiL3Vzci5zYmluL25zY2QvTWFrZWZpbGUKaW5kZXgg
ODViZWE2MmNlZjQ5Li45ZmU1MTMyODdlNDQgMTAwNjQ0Ci0tLSBhL3Vzci5zYmluL25zY2Qv
TWFrZWZpbGUKKysrIGIvdXNyLnNiaW4vbnNjZC9NYWtlZmlsZQpAQCAtOSw2ICs5LDEwIEBA
IFNSQ1M9CWFnZW50LmMgbnNjZC5jIG5zY2RjbGkuYyBjYWNoZWxpYi5jIGNhY2hlcGxjcy5j
IGRlYnVnLmMgbG9nLmMgXAogQ0ZMQUdTKz0gLURDT05GSUdfUEFUSD0iXCIke1BSRUZJWH0v
ZXRjL25zY2QuY29uZlwiIgogCiBMSUJBREQ9CXV0aWwgcHRocmVhZAorIyBUaGlzIGlzIG5l
ZWRlZCB0byBoYXZlIHRoZSBfbnNzX2NhY2hlX2N5Y2xlX3ByZXZlbnRpb25fc3ltYm9sCisj
IHZpc2libGUgdG8gZGxzeW0oKSBzbyB0aGUgY2FjaGluZyBjb2RlIGNhbiBza2lwIGNhY2hl
IGxvb2t1cHMgaW4gdGhlCisjIGNhY2hpbmcgZGFlbW9uLiAgRE8gTk9UIFJFTU9WRQorTERG
TEFHUz0gLVdsLC1leHBvcnQtZHluYW1pYwogCiAuUEFUSDogJHsuQ1VSRElSfS9hZ2VudHMK
IC5pbmNsdWRlICIkey5DVVJESVJ9L2FnZW50cy9NYWtlZmlsZS5pbmMiCmRpZmYgLS1naXQg
YS91c3Iuc2Jpbi9uc2NkL2FnZW50cy9ncm91cC5jIGIvdXNyLnNiaW4vbnNjZC9hZ2VudHMv
Z3JvdXAuYwppbmRleCBiNjRhNDg4NmY3MTIuLmUyZjBiZjYxNmZiYiAxMDA2NDQKLS0tIGEv
dXNyLnNiaW4vbnNjZC9hZ2VudHMvZ3JvdXAuYworKysgYi91c3Iuc2Jpbi9uc2NkL2FnZW50
cy9ncm91cC5jCkBAIC0yOCwyMCArMjgsODQgQEAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4K
IAogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8
Z3JwLmg+CiAjaW5jbHVkZSA8bnNzd2l0Y2guaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNp
bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUgIi4u
L2RlYnVnLmgiCiAjaW5jbHVkZSAiZ3JvdXAuaCIKIAorI2RlZmluZQlHUk9VUF9TVE9SQUdF
X0lOSVRJQUwJKDEgPDwgMTApCisjZGVmaW5lIEdST1VQX1NUT1JBR0VfTUFYCSgxIDw8IDIw
KQorCit0eXBlZGVmIHN0cnVjdCBrZXkgeworCWNoYXIJKm5hbWU7CisJZ2lkX3QJZ2lkOwor
fSBzdF9rZXk7CisKK3N0YXRpYyBpbnQgd3JhcF9nZXRncm5hbV9yKHN0X2tleSwgc3RydWN0
IGdyb3VwICosIGNoYXIgKiwgc2l6ZV90LAorCXN0cnVjdCBncm91cCAqKik7CitzdGF0aWMg
aW50IHdyYXBfZ2V0Z3JnaWRfcihzdF9rZXksIHN0cnVjdCBncm91cCAqLCBjaGFyICosIHNp
emVfdCwKKwlzdHJ1Y3QgZ3JvdXAgKiopOworc3RhdGljIGludCB3cmFwX2dldGdyZW50X3Io
c3Rfa2V5LCBzdHJ1Y3QgZ3JvdXAgKiwgY2hhciAqLCBzaXplX3QsCisJc3RydWN0IGdyb3Vw
ICoqKTsKK3N0YXRpYyBjaGFyICp3cmFwX2dldGdyb3VwbGlzdChzdF9rZXksIHNpemVfdCAq
KTsKK3N0YXRpYyBjaGFyICpnZXRncihpbnQgKCopKHN0X2tleSwgc3RydWN0IGdyb3VwICos
IGNoYXIgKiwgc2l6ZV90LAorCXN0cnVjdCBncm91cCAqKiksIHN0X2tleSwgc2l6ZV90ICop
OworCiBzdGF0aWMgaW50IGdyb3VwX21hcnNoYWxfZnVuYyhzdHJ1Y3QgZ3JvdXAgKiwgY2hh
ciAqLCBzaXplX3QgKik7CitzdGF0aWMgaW50IGdyb3VwbGlzdF9tYXJzaGFsX2Z1bmMoZ2lk
X3QgKiwgaW50LCBjaGFyICosIHNpemVfdCAqKTsKIHN0YXRpYyBpbnQgZ3JvdXBfbG9va3Vw
X2Z1bmMoY29uc3QgY2hhciAqLCBzaXplX3QsIGNoYXIgKiosIHNpemVfdCAqKTsKIHN0YXRp
YyB2b2lkICpncm91cF9tcF9pbml0X2Z1bmModm9pZCk7CiBzdGF0aWMgaW50IGdyb3VwX21w
X2xvb2t1cF9mdW5jKGNoYXIgKiosIHNpemVfdCAqLCB2b2lkICopOwogc3RhdGljIHZvaWQg
Z3JvdXBfbXBfZGVzdHJveV9mdW5jKHZvaWQgKik7CiAKK3N0YXRpYyBpbnQKK3dyYXBfZ2V0
Z3JuYW1fcihzdF9rZXkgc2tleSwgc3RydWN0IGdyb3VwICpncm91cCwgY2hhciAqYnVmZmVy
LCBzaXplX3Qgc2l6ZSwKKwlzdHJ1Y3QgZ3JvdXAgKipyZXN1bHQpCit7CisJcmV0dXJuIChn
ZXRncm5hbV9yKHNrZXkubmFtZSwgZ3JvdXAsIGJ1ZmZlciwgc2l6ZSwgcmVzdWx0KSk7Cit9
CisKK3N0YXRpYyBpbnQKK3dyYXBfZ2V0Z3JnaWRfcihzdF9rZXkgc2tleSwgc3RydWN0IGdy
b3VwICpncm91cCwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKKwlzdHJ1Y3QgZ3JvdXAg
KipyZXN1bHQpCit7CisJcmV0dXJuIChnZXRncmdpZF9yKHNrZXkuZ2lkLCBncm91cCwgYnVm
ZmVyLCBzaXplLCByZXN1bHQpKTsKK30KKworc3RhdGljIGludAord3JhcF9nZXRncmVudF9y
KHN0X2tleSBza2V5IF9fdW51c2VkLCBzdHJ1Y3QgZ3JvdXAgKmdyb3VwLCBjaGFyICpidWZm
ZXIsCisJc2l6ZV90IHNpemUsIHN0cnVjdCBncm91cCAqKnJlc3VsdCkKK3sKKwlyZXR1cm4g
KGdldGdyZW50X3IoZ3JvdXAsIGJ1ZmZlciwgc2l6ZSwgcmVzdWx0KSk7Cit9CisKK3N0YXRp
YyBpbnQKK2dyb3VwbGlzdF9tYXJzaGFsX2Z1bmMoZ2lkX3QgKmdpZHMsIGludCBuZ2lkcywg
Y2hhciAqYnVmZmVyLAorCXNpemVfdCogYnVmZmVyX3NpemUpCit7CisJc2l6ZV90IGRlc2ly
ZWRfc2l6ZTsKKwlUUkFDRV9JTihncm91cGxpc3RfbWFyc2hhbF9mdW5jKTsKKworCWRlc2ly
ZWRfc2l6ZSA9IHNpemVvZihpbnQpICsgKG5naWRzICogc2l6ZW9mKGdpZF90KSk7CisJaWYg
KGJ1ZmZlciA9PSBOVUxMIHx8IGRlc2lyZWRfc2l6ZSA+ICpidWZmZXJfc2l6ZSkgeworCQkq
YnVmZmVyX3NpemUgPSBkZXNpcmVkX3NpemU7CisJCVRSQUNFX09VVChncm91cGxpc3RfbWFy
c2hhbF9mdW5jKTsKKworCQlyZXR1cm4gTlNfUkVUVVJOOworCX0KKwkqYnVmZmVyX3NpemUg
PSBkZXNpcmVkX3NpemU7CisJbWVtY3B5KGJ1ZmZlciwgJm5naWRzLCBzaXplb2YobmdpZHMp
KTsKKwltZW1jcHkoYnVmZmVyICsgc2l6ZW9mKG5naWRzKSwgZ2lkcywgc2l6ZW9mKGdpZF90
KSAqIG5naWRzKTsKKwlUUkFDRV9PVVQoZ3JvdXBsaXN0X21hcnNoYWxfZnVuYyk7CisKKwly
ZXR1cm4gKE5TX1NVQ0NFU1MpOworfQorCiBzdGF0aWMgaW50CiBncm91cF9tYXJzaGFsX2Z1
bmMoc3RydWN0IGdyb3VwICpncnAsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90ICpidWZmZXJfc2l6
ZSkKIHsKQEAgLTExOSwxNSArMTgzLDE0IEBAIGdyb3VwX2xvb2t1cF9mdW5jKGNvbnN0IGNo
YXIgKmtleSwgc2l6ZV90IGtleV9zaXplLCBjaGFyICoqYnVmZmVyLAogCXNpemVfdCAqYnVm
ZmVyX3NpemUpCiB7CiAJZW51bSBuc3NfbG9va3VwX3R5cGUgbG9va3VwX3R5cGU7Ci0JY2hh
cgkqbmFtZTsKKwlzdF9rZXkJc3RrZXk7CiAJc2l6ZV90CXNpemU7Ci0JZ2lkX3QJZ2lkOwot
Ci0Jc3RydWN0IGdyb3VwICpyZXN1bHQ7CisJaW50IGdyX2Vycm5vOwogCiAJVFJBQ0VfSU4o
Z3JvdXBfbG9va3VwX2Z1bmMpOwogCWFzc2VydChidWZmZXIgIT0gTlVMTCk7CiAJYXNzZXJ0
KGJ1ZmZlcl9zaXplICE9IE5VTEwpOworCSpidWZmZXJfc2l6ZSA9IDA7CiAKIAlpZiAoa2V5
X3NpemUgPCBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUpKSB7CiAJCVRSQUNFX09VVChn
cm91cF9sb29rdXBfZnVuYyk7CkBAIC0xMzcsNDggKzIwMCw2NyBAQCBncm91cF9sb29rdXBf
ZnVuYyhjb25zdCBjaGFyICprZXksIHNpemVfdCBrZXlfc2l6ZSwgY2hhciAqKmJ1ZmZlciwK
IAogCXN3aXRjaCAobG9va3VwX3R5cGUpIHsKIAljYXNlIG5zc19sdF9uYW1lOgotCQlzaXpl
ID0ga2V5X3NpemUgLSBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUpCSsgMTsKLQkJbmFt
ZSA9IGNhbGxvYygxLCBzaXplKTsKLQkJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7Ci0JCW1lbWNw
eShuYW1lLCBrZXkgKyBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUpLCBzaXplIC0gMSk7
CisJCWlmIChrZXlfc2l6ZSA8IHNpemVvZihlbnVtIG5zc19sb29rdXBfdHlwZSkgKyAyKSB7
CisJCQlUUkFDRV9PVVQoZ3JvdXBfbG9va3VwX2Z1bmMpOworCisJCQlyZXR1cm4gKE5TX1VO
QVZBSUwpOworCQl9CisKKwkJc2l6ZSA9IGtleV9zaXplIC0gc2l6ZW9mKGVudW0gbnNzX2xv
b2t1cF90eXBlKTsKKwkJc3RrZXkubmFtZSA9IG1hbGxvYyhzaXplKTsKKwkJYXNzZXJ0KHN0
a2V5Lm5hbWUgIT0gTlVMTCk7CisKKwkJbWVtY3B5KHN0a2V5Lm5hbWUsIGtleSArIHNpemVv
ZihlbnVtIG5zc19sb29rdXBfdHlwZSksIHNpemUpOworCQlzdGtleS5uYW1lW3NpemUtMV0g
PSAweDAwOworCisJCVRSQUNFX1NUUihzdGtleS5uYW1lKTsKKwkJZXJybm8gPSAwOworCQkq
YnVmZmVyID0gZ2V0Z3Iod3JhcF9nZXRncm5hbV9yLCBzdGtleSwgYnVmZmVyX3NpemUpOwor
CQlncl9lcnJubyA9IGVycm5vOworCQlmcmVlKHN0a2V5Lm5hbWUpOworCiAJCWJyZWFrOwog
CWNhc2UgbnNzX2x0X2lkOgogCQlpZiAoa2V5X3NpemUgPCBzaXplb2YoZW51bSBuc3NfbG9v
a3VwX3R5cGUpICsKIAkJCXNpemVvZihnaWRfdCkpIHsKLQkJCVRSQUNFX09VVChwYXNzd2Rf
bG9va3VwX2Z1bmMpOworCQkJVFJBQ0VfT1VUKGdyb3VwX2xvb2t1cF9mdW5jKTsKKwogCQkJ
cmV0dXJuIChOU19VTkFWQUlMKTsKIAkJfQorCQltZW1jcHkoJihzdGtleS5naWQpLCBrZXkg
KyBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUpLCBzaXplb2YoZ2lkX3QpKTsKKwkJZXJy
bm89MDsKKwkJKmJ1ZmZlciA9IGdldGdyKHdyYXBfZ2V0Z3JnaWRfciwgc3RrZXksIGJ1ZmZl
cl9zaXplKTsKKwkJZ3JfZXJybm8gPSBlcnJubzsKIAotCQltZW1jcHkoJmdpZCwga2V5ICsg
c2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKSwgc2l6ZW9mKGdpZF90KSk7CiAJCWJyZWFr
OwotCWRlZmF1bHQ6Ci0JCVRSQUNFX09VVChncm91cF9sb29rdXBfZnVuYyk7Ci0JCXJldHVy
biAoTlNfVU5BVkFJTCk7Ci0JfQorCWNhc2UgbnNzX2x0X3Bpdm90OgorCQlpZiAoa2V5X3Np
emUgPCBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUpICsgMgorCQkgICAgKyBzaXplb2Yo
Z2lkX3QpKSB7CisJCQlUUkFDRV9PVVQoZ3JvdXBfbG9va3VwX2Z1bmMpOworCQkJcmV0dXJu
IChOU19VTkFWQUlMKTsKKwkJfQorCQlzaXplID0ga2V5X3NpemUgLSBzaXplb2YoZW51bSBu
c3NfbG9va3VwX3R5cGUpIC0gc2l6ZW9mKGdpZF90KTsKKwkJc3RrZXkubmFtZSA9IG1hbGxv
YyhzaXplKTsKKwkJYXNzZXJ0KHN0a2V5Lm5hbWUgIT0gTlVMTCk7CisJCW1lbWNweShzdGtl
eS5uYW1lLCBrZXkgKyBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUpLCBzaXplKTsKKwkJ
c3RrZXkubmFtZVtzaXplLTFdPTB4MDA7CisKKwkJbWVtY3B5ICgmKHN0a2V5LmdpZCksIGtl
eSArIHNpemVvZihlbnVtIG5zc19sb29rdXBfdHlwZSkgKyBzaXplLCBzaXplb2YoZ2lkX3Qp
KTsKKworCQllcnJubyA9IDA7CisJCSpidWZmZXIgPSB3cmFwX2dldGdyb3VwbGlzdChzdGtl
eSwgYnVmZmVyX3NpemUpOworCQlncl9lcnJubyA9IGVycm5vOwogCi0Jc3dpdGNoIChsb29r
dXBfdHlwZSkgewotCWNhc2UgbnNzX2x0X25hbWU6Ci0JCVRSQUNFX1NUUihuYW1lKTsKLQkJ
cmVzdWx0ID0gZ2V0Z3JuYW0obmFtZSk7Ci0JCWZyZWUobmFtZSk7Ci0JCWJyZWFrOwotCWNh
c2UgbnNzX2x0X2lkOgotCQlyZXN1bHQgPSBnZXRncmdpZChnaWQpOwogCQlicmVhazsKIAlk
ZWZhdWx0OgotCQkvKiBTSE9VTEQgTk9UIEJFIFJFQUNIRUQgKi8KLQkJYnJlYWs7Ci0JfQot
Ci0JaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0JCWdyb3VwX21hcnNoYWxfZnVuYyhyZXN1bHQs
IE5VTEwsIGJ1ZmZlcl9zaXplKTsKLQkJKmJ1ZmZlciA9IG1hbGxvYygqYnVmZmVyX3NpemUp
OwotCQlhc3NlcnQoKmJ1ZmZlciAhPSBOVUxMKTsKLQkJZ3JvdXBfbWFyc2hhbF9mdW5jKHJl
c3VsdCwgKmJ1ZmZlciwgYnVmZmVyX3NpemUpOworCQlUUkFDRV9PVVQoZ3JvdXBfbG9va3Vw
X2Z1bmMpOworCQlyZXR1cm4gKE5TX1VOQVZBSUwpOwogCX0KIAogCVRSQUNFX09VVChncm91
cF9sb29rdXBfZnVuYyk7Ci0JcmV0dXJuIChyZXN1bHQgPT0gTlVMTCA/IE5TX05PVEZPVU5E
IDogTlNfU1VDQ0VTUyk7CisJcmV0dXJuICgqYnVmZmVyID09IE5VTEwgPworCQkJKGdyX2Vy
cm5vID09IDAgPyBOU19OT1RGT1VORCA6IE5TX1VOQVZBSUwpIDoKKwkJCU5TX1NVQ0NFU1Mp
OwogfQogCiBzdGF0aWMgdm9pZCAqCkBAIC0xOTQsMTkgKzI3NiwyMCBAQCBncm91cF9tcF9p
bml0X2Z1bmModm9pZCkKIHN0YXRpYyBpbnQKIGdyb3VwX21wX2xvb2t1cF9mdW5jKGNoYXIg
KipidWZmZXIsIHNpemVfdCAqYnVmZmVyX3NpemUsIHZvaWQgKm1kYXRhKQogewotCXN0cnVj
dCBncm91cCAqcmVzdWx0OwogCisJc3Rfa2V5IHN0a2V5OwogCVRSQUNFX0lOKGdyb3VwX21w
X2xvb2t1cF9mdW5jKTsKLQlyZXN1bHQgPSBnZXRncmVudCgpOwotCWlmIChyZXN1bHQgIT0g
TlVMTCkgewotCQlncm91cF9tYXJzaGFsX2Z1bmMocmVzdWx0LCBOVUxMLCBidWZmZXJfc2l6
ZSk7Ci0JCSpidWZmZXIgPSBtYWxsb2MoKmJ1ZmZlcl9zaXplKTsKLQkJYXNzZXJ0KCpidWZm
ZXIgIT0gTlVMTCk7Ci0JCWdyb3VwX21hcnNoYWxfZnVuYyhyZXN1bHQsICpidWZmZXIsIGJ1
ZmZlcl9zaXplKTsKLQl9CisJYXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKKwlhc3NlcnQoYnVm
ZmVyX3NpemUgIT0gTlVMTCk7CisJKmJ1ZmZlcl9zaXplID0gMDsKKwllcnJubyA9IDA7CisJ
c3RrZXkubmFtZSA9IE5VTEw7CisJKmJ1ZmZlciA9IGdldGdyKHdyYXBfZ2V0Z3JlbnRfciwg
c3RrZXksIGJ1ZmZlcl9zaXplKTsKIAogCVRSQUNFX09VVChncm91cF9tcF9sb29rdXBfZnVu
Yyk7Ci0JcmV0dXJuIChyZXN1bHQgPT0gTlVMTCA/IE5TX05PVEZPVU5EIDogTlNfU1VDQ0VT
Uyk7CisJcmV0dXJuICgqYnVmZmVyID09IE5VTEwgPworCQkoZXJybm8gPT0gMCA/IE5TX05P
VEZPVU5EIDogTlNfVU5BVkFJTCkgOgorCQlOU19TVUNDRVNTKTsKIH0KIAogc3RhdGljIHZv
aWQKQEAgLTI1NSwzICszMzgsODMgQEAgaW5pdF9ncm91cF9tcF9hZ2VudCh2b2lkKQogCVRS
QUNFX09VVChpbml0X2dyb3VwX21wX2FnZW50KTsKIAlyZXR1cm4gKChzdHJ1Y3QgYWdlbnQg
KilyZXR2YWwpOwogfQorCitzdGF0aWMgY2hhciAqd3JhcF9nZXRncm91cGxpc3Qoc3Rfa2V5
IHNrZXksIHNpemVfdCAqYnVmZmVyX3NpemUpCit7CisJaW50IHJldHVybl92YWx1ZTsKKwln
aWRfdCAqZ2lkcyA9IE5VTEw7CisJaW50IG5naWRzID0gMDsKKwljaGFyICpidWZmZXI7CisK
KwllcnJubyA9IDA7CisJcmV0dXJuX3ZhbHVlID0gZ2V0Z3JvdXBsaXN0KHNrZXkubmFtZSwg
c2tleS5naWQsIGdpZHMsICZuZ2lkcyk7CQorCisJd2hpbGUgKHJldHVybl92YWx1ZSA9PSAt
MSAmJiBlcnJubyA9PSAwKSB7CisJCWdpZHMgPSByZWFsbG9jKGdpZHMsIG5naWRzICogc2l6
ZW9mKGdpZF90KSk7CisJCWFzc2VydCAoZ2lkcyAhPSBOVUxMKTsKKwkJZXJybm89MDsKKwkJ
cmV0dXJuX3ZhbHVlPWdldGdyb3VwbGlzdChza2V5Lm5hbWUsIHNrZXkuZ2lkLCBnaWRzLCAm
bmdpZHMpOworCX0KKworCWlmIChlcnJubyAhPSAwKSB7CisJCWZyZWUgKGdpZHMpOworCQly
ZXR1cm4gKE5VTEwpOworCX0KKworCWdyb3VwbGlzdF9tYXJzaGFsX2Z1bmMoZ2lkcywgbmdp
ZHMsIE5VTEwsIGJ1ZmZlcl9zaXplKTsKKwlidWZmZXIgPSBtYWxsb2MoKmJ1ZmZlcl9zaXpl
KTsKKwlhc3NlcnQoYnVmZmVyICE9IE5VTEwpOworCWdyb3VwbGlzdF9tYXJzaGFsX2Z1bmMo
Z2lkcywgbmdpZHMsIGJ1ZmZlciwgYnVmZmVyX3NpemUpOworCWZyZWUoZ2lkcyk7CisKKwly
ZXR1cm4gKGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBjaGFyICoKK2dldGdyKGludCAoKmZuKShz
dF9rZXksIHN0cnVjdCBncm91cCAqLCBjaGFyICosIHNpemVfdCwgc3RydWN0IGdyb3VwICoq
KSwKKwlzdF9rZXkgc2tleSwgc2l6ZV90ICpidWZmZXJfc2l6ZSkKK3sKKwlpbnQJCXJldHVy
bl92YWx1ZTsKKwlzdHJ1Y3QgZ3JvdXAJZ3JvdXAsICpyZXN1bHQ7CisJY2hhcgkJKmdyb3Vw
X3N0b3JhZ2UsICpidWZmZXI7CisJc2l6ZV90CQlncm91cF9zdG9yYWdlX3NpemUgPSBHUk9V
UF9TVE9SQUdFX0lOSVRJQUw7CisKKwlncm91cF9zdG9yYWdlID0gbWFsbG9jKGdyb3VwX3N0
b3JhZ2Vfc2l6ZSk7CisJaWYgKGdyb3VwX3N0b3JhZ2UgPT0gTlVMTCkgeworCisJCXJldHVy
biAoTlVMTCk7CisJfQorCWRvIHsKKwkJcmV0dXJuX3ZhbHVlID0gZm4oc2tleSwgJmdyb3Vw
LCBncm91cF9zdG9yYWdlLCBncm91cF9zdG9yYWdlX3NpemUsICZyZXN1bHQpOworCQlpZiAo
cmVzdWx0ID09IE5VTEwgJiYgcmV0dXJuX3ZhbHVlID09IEVSQU5HRSkgeworCQkJZnJlZShn
cm91cF9zdG9yYWdlKTsKKwkJCWdyb3VwX3N0b3JhZ2UgPSBOVUxMOworCQkJZ3JvdXBfc3Rv
cmFnZV9zaXplIDw8PSAxOworCQkJaWYgKGdyb3VwX3N0b3JhZ2Vfc2l6ZSA+IEdST1VQX1NU
T1JBR0VfTUFYKSB7CisJCQkJZXJybm8gPSBFUkFOR0U7CisKKwkJCQlyZXR1cm4gKE5VTEwp
OworCQkJfQorCQkJZ3JvdXBfc3RvcmFnZSA9IG1hbGxvYyhncm91cF9zdG9yYWdlX3NpemUp
OworCQkJaWYgKGdyb3VwX3N0b3JhZ2UgPT0gTlVMTCkgeworCisJCQkJcmV0dXJuIChOVUxM
KTsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKHJlc3VsdCA9PSBOVUxMICYmIHJldHVybl92YWx1
ZSA9PSBFUkFOR0UpOworCWVycm5vID0gcmV0dXJuX3ZhbHVlOworCWlmIChyZXR1cm5fdmFs
dWUgIT0gMCB8fCByZXN1bHQgPT0gTlVMTCkgeworCQlmcmVlKGdyb3VwX3N0b3JhZ2UpOwor
CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJZ3JvdXBfbWFyc2hhbF9mdW5jKCZncm91cCwg
TlVMTCwgYnVmZmVyX3NpemUpOworCWJ1ZmZlciA9IG1hbGxvYygqYnVmZmVyX3NpemUpOwor
CWFzc2VydChidWZmZXIgIT0gTlVMTCk7CisJZ3JvdXBfbWFyc2hhbF9mdW5jKCZncm91cCwg
YnVmZmVyLCBidWZmZXJfc2l6ZSk7CisKKwlmcmVlKGdyb3VwX3N0b3JhZ2UpOworCisJcmV0
dXJuIChidWZmZXIpOworfQpkaWZmIC0tZ2l0IGEvdXNyLnNiaW4vbnNjZC9hZ2VudHMvcGFz
c3dkLmMgYi91c3Iuc2Jpbi9uc2NkL2FnZW50cy9wYXNzd2QuYwppbmRleCAxNDAxYTFiOTUy
NDYuLmYyZDhmNmM0MzAwNyAxMDA2NDQKLS0tIGEvdXNyLnNiaW4vbnNjZC9hZ2VudHMvcGFz
c3dkLmMKKysrIGIvdXNyLnNiaW4vbnNjZC9hZ2VudHMvcGFzc3dkLmMKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzc2VydC5oPgor
I2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bnNzd2l0Y2guaD4KICNpbmNsdWRlIDxw
d2QuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTM2LDEyICszNywxMDEgQEAKICNpbmNs
dWRlICIuLi9kZWJ1Zy5oIgogI2luY2x1ZGUgInBhc3N3ZC5oIgogCisjZGVmaW5lIFBBU1NX
RF9TVE9SQUdFX0lOSVRJQUwgKDE8PDEwKQorI2RlZmluZSBQQVNTV0RfU1RPUkFHRV9NQVgg
KDE8PDIwKQorCit0eXBlZGVmIHVuaW9uIGtleSB7CisJY2hhciAqbG9naW47CisJdWlkX3Qg
dWlkOworfSB1X2tleTsKKwogc3RhdGljIGludCBwYXNzd2RfbWFyc2hhbF9mdW5jKHN0cnVj
dCBwYXNzd2QgKiwgY2hhciAqLCBzaXplX3QgKik7CiBzdGF0aWMgaW50IHBhc3N3ZF9sb29r
dXBfZnVuYyhjb25zdCBjaGFyICosIHNpemVfdCwgY2hhciAqKiwgc2l6ZV90ICopOwogc3Rh
dGljIHZvaWQgKnBhc3N3ZF9tcF9pbml0X2Z1bmModm9pZCk7CiBzdGF0aWMgaW50IHBhc3N3
ZF9tcF9sb29rdXBfZnVuYyhjaGFyICoqLCBzaXplX3QgKiwgdm9pZCAqKTsKIHN0YXRpYyB2
b2lkIHBhc3N3ZF9tcF9kZXN0cm95X2Z1bmModm9pZCAqbWRhdGEpOwogCitzdGF0aWMgY2hh
ciAqZ2V0cHcoaW50ICgqKSh1X2tleSwgc3RydWN0IHBhc3N3ZCAqLCBjaGFyICosIHNpemVf
dCwKKwlzdHJ1Y3QgcGFzc3dkICoqKSwgdV9rZXksIHNpemVfdCAqKTsKK3N0YXRpYyBpbnQg
d3JhcF9nZXRwd25hbV9yKHVfa2V5LCBzdHJ1Y3QgcGFzc3dkICosIGNoYXIgKiwgc2l6ZV90
LAorCXN0cnVjdCBwYXNzd2QgKiopOworc3RhdGljIGludCB3cmFwX2dldHB3dWlkX3IodV9r
ZXksIHN0cnVjdCBwYXNzd2QgKiwgY2hhciAqLCBzaXplX3QsCisJc3RydWN0IHBhc3N3ZCAq
Kik7CitzdGF0aWMgaW50IHdyYXBfZ2V0cHdlbnRfcih1X2tleSwgc3RydWN0IHBhc3N3ZCAq
LCBjaGFyICosIHNpemVfdCwKKwlzdHJ1Y3QgcGFzc3dkICoqKTsKKworc3RhdGljIGNoYXIg
KgorZ2V0cHcoaW50ICgqZm4pKHVfa2V5LCBzdHJ1Y3QgcGFzc3dkICosIGNoYXIgKiwgc2l6
ZV90LCBzdHJ1Y3QgcGFzc3dkICoqKSwKKwl1X2tleSB1a2V5LCBzaXplX3QgKmJ1ZmZlcl9z
aXplKQoreworCWludAkJcmV0dXJuX3ZhbHVlOworCXN0cnVjdCBwYXNzd2QJcGFzc3dkLCAq
cmVzdWx0OworCWNoYXIJCSpwYXNzd2Rfc3RvcmFnZSwgKmJ1ZmZlcjsKKwlzaXplX3QJCXBh
c3N3ZF9zdG9yYWdlX3NpemUgPSBQQVNTV0RfU1RPUkFHRV9JTklUSUFMOworCisJcGFzc3dk
X3N0b3JhZ2UgPSBtYWxsb2MocGFzc3dkX3N0b3JhZ2Vfc2l6ZSk7CisJaWYgKHBhc3N3ZF9z
dG9yYWdlID09IE5VTEwpIHsKKworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlkbyB7CisJCXJl
dHVybl92YWx1ZSA9IGZuKHVrZXksICZwYXNzd2QsIHBhc3N3ZF9zdG9yYWdlLAorCQkJcGFz
c3dkX3N0b3JhZ2Vfc2l6ZSwgJnJlc3VsdCk7CisJCWlmIChyZXN1bHQgPT0gTlVMTCAmJiBy
ZXR1cm5fdmFsdWUgPT0gRVJBTkdFKSB7CisJCQlmcmVlKHBhc3N3ZF9zdG9yYWdlKTsKKwkJ
CXBhc3N3ZF9zdG9yYWdlID0gTlVMTDsKKwkJCXBhc3N3ZF9zdG9yYWdlX3NpemUgPDw9IDE7
CisJCQlpZiAocGFzc3dkX3N0b3JhZ2Vfc2l6ZSA+IFBBU1NXRF9TVE9SQUdFX01BWCkgewor
CQkJCWVycm5vID0gRVJBTkdFOworCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCXBh
c3N3ZF9zdG9yYWdlID0gbWFsbG9jKHBhc3N3ZF9zdG9yYWdlX3NpemUpOworCQkJaWYgKHBh
c3N3ZF9zdG9yYWdlID09IE5VTEwpIHsKKworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJ
CX0KKwl9IHdoaWxlIChyZXN1bHQgPT0gTlVMTCAmJiByZXR1cm5fdmFsdWUgPT0gRVJBTkdF
KTsKKwllcnJubyA9IHJldHVybl92YWx1ZTsKKwlpZiAocmV0dXJuX3ZhbHVlICE9IDAgfHwg
cmVzdWx0ID09IE5VTEwpIHsKKwkJZnJlZShwYXNzd2Rfc3RvcmFnZSk7CisKKwkJcmV0dXJu
IChOVUxMKTsKKwl9CisKKwkqYnVmZmVyX3NpemUgPSAwOworCXBhc3N3ZF9tYXJzaGFsX2Z1
bmMoJnBhc3N3ZCwgTlVMTCwgYnVmZmVyX3NpemUpOworCWJ1ZmZlciA9IG1hbGxvYygqYnVm
ZmVyX3NpemUpOworCWFzc2VydChidWZmZXIgIT0gTlVMTCk7CisJcGFzc3dkX21hcnNoYWxf
ZnVuYygmcGFzc3dkLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKworCWZyZWUocGFzc3dkX3N0
b3JhZ2UpOworCisJcmV0dXJuIChidWZmZXIpOworfQorCitzdGF0aWMgaW50Cit3cmFwX2dl
dHB3bmFtX3IodV9rZXkgdWtleSwgc3RydWN0IHBhc3N3ZCAqcHdkLCBjaGFyICpidWZmZXIs
IHNpemVfdCBidWZzaXplLAorCXN0cnVjdCBwYXNzd2QgKipyZXMpCit7CisJcmV0dXJuIChn
ZXRwd25hbV9yKHVrZXkubG9naW4sIHB3ZCwgYnVmZmVyLCBidWZzaXplLCByZXMpKTsKK30K
Kworc3RhdGljIGludAord3JhcF9nZXRwd3VpZF9yKHVfa2V5IHVrZXksIHN0cnVjdCBwYXNz
d2QgKnB3ZCwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6ZSwKKwlzdHJ1Y3QgcGFzc3dk
ICoqcmVzKQoreworCXJldHVybiAoZ2V0cHd1aWRfcih1a2V5LnVpZCwgcHdkLCBidWZmZXIs
IGJ1ZnNpemUsIHJlcykpOworfQorCitzdGF0aWMgaW50Cit3cmFwX2dldHB3ZW50X3IodV9r
ZXkgdWtleSBfX3VudXNlZCwgc3RydWN0IHBhc3N3ZCAqcHdkLCBjaGFyICpidWZmZXIsCisJ
c2l6ZV90IGJ1ZnNpemUsIHN0cnVjdCBwYXNzd2QgKipyZXMpCit7CisJcmV0dXJuIChnZXRw
d2VudF9yKHB3ZCwgYnVmZmVyLCBidWZzaXplLCByZXMpKTsKK30KKwogc3RhdGljIGludAog
cGFzc3dkX21hcnNoYWxfZnVuYyhzdHJ1Y3QgcGFzc3dkICpwd2QsIGNoYXIgKmJ1ZmZlciwg
c2l6ZV90ICpidWZmZXJfc2l6ZSkKIHsKQEAgLTEyOCwxNSArMjE4LDE0IEBAIHBhc3N3ZF9s
b29rdXBfZnVuYyhjb25zdCBjaGFyICprZXksIHNpemVfdCBrZXlfc2l6ZSwgY2hhciAqKmJ1
ZmZlciwKIAlzaXplX3QgKmJ1ZmZlcl9zaXplKQogewogCWVudW0gbnNzX2xvb2t1cF90eXBl
IGxvb2t1cF90eXBlOwotCWNoYXIJKmxvZ2luOworCXVfa2V5IHVrZXk7CiAJc2l6ZV90CXNp
emU7Ci0JdWlkX3QJdWlkOwotCi0Jc3RydWN0IHBhc3N3ZCAqcmVzdWx0OworCWludCBwd19l
cnJubzsKIAogCVRSQUNFX0lOKHBhc3N3ZF9sb29rdXBfZnVuYyk7CiAJYXNzZXJ0KGJ1ZmZl
ciAhPSBOVUxMKTsKIAlhc3NlcnQoYnVmZmVyX3NpemUgIT0gTlVMTCk7CisJKmJ1ZmZlcl9z
aXplID0gMDsKIAogCWlmIChrZXlfc2l6ZSA8IHNpemVvZihlbnVtIG5zc19sb29rdXBfdHlw
ZSkpIHsKIAkJVFJBQ0VfT1VUKHBhc3N3ZF9sb29rdXBfZnVuYyk7CkBAIC0xNDYsMTAgKzIz
NSwyNCBAQCBwYXNzd2RfbG9va3VwX2Z1bmMoY29uc3QgY2hhciAqa2V5LCBzaXplX3Qga2V5
X3NpemUsIGNoYXIgKipidWZmZXIsCiAKIAlzd2l0Y2ggKGxvb2t1cF90eXBlKSB7CiAJY2Fz
ZSBuc3NfbHRfbmFtZToKLQkJc2l6ZSA9IGtleV9zaXplIC0gc2l6ZW9mKGVudW0gbnNzX2xv
b2t1cF90eXBlKQkrIDE7Ci0JCWxvZ2luID0gY2FsbG9jKDEsIHNpemUpOwotCQlhc3NlcnQo
bG9naW4gIT0gTlVMTCk7Ci0JCW1lbWNweShsb2dpbiwga2V5ICsgc2l6ZW9mKGVudW0gbnNz
X2xvb2t1cF90eXBlKSwgc2l6ZSAtIDEpOworCQlpZiAoa2V5X3NpemUgPCBzaXplb2YoZW51
bSBuc3NfbG9va3VwX3R5cGUpICsgMikgeworCQkJVFJBQ0VfT1VUKHBhc3N3ZF9sb29rdXBf
ZnVuYyk7CisJCQlyZXR1cm4gKE5TX1VOQVZBSUwpOworCQl9CisKKwkJc2l6ZSA9IGtleV9z
aXplIC0gc2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKTsKKwkJdWtleS5sb2dpbiA9IG1h
bGxvYyhzaXplKTsKKwkJYXNzZXJ0KHVrZXkubG9naW4gIT0gTlVMTCk7CisKKwkJbWVtY3B5
KHVrZXkubG9naW4sIGtleSArIHNpemVvZihlbnVtIG5zc19sb29rdXBfdHlwZSksIHNpemUp
OworCQl1a2V5LmxvZ2luW3NpemUtMV09MHgwMDsKKworCQlUUkFDRV9TVFIodWtleS5sb2dp
bik7CisJCWVycm5vID0gMDsKKwkJKmJ1ZmZlciA9IGdldHB3KHdyYXBfZ2V0cHduYW1fciwg
dWtleSwgYnVmZmVyX3NpemUpOworCQlwd19lcnJubyA9IGVycm5vOworCQlmcmVlKHVrZXku
bG9naW4pOworCiAJCWJyZWFrOwogCWNhc2UgbnNzX2x0X2lkOgogCQlpZiAoa2V5X3NpemUg
PCBzaXplb2YoZW51bSBuc3NfbG9va3VwX3R5cGUpICsKQEAgLTE1OCwzNSArMjYxLDIzIEBA
IHBhc3N3ZF9sb29rdXBfZnVuYyhjb25zdCBjaGFyICprZXksIHNpemVfdCBrZXlfc2l6ZSwg
Y2hhciAqKmJ1ZmZlciwKIAkJCXJldHVybiAoTlNfVU5BVkFJTCk7CiAJCX0KIAotCQltZW1j
cHkoJnVpZCwga2V5ICsgc2l6ZW9mKGVudW0gbnNzX2xvb2t1cF90eXBlKSwgc2l6ZW9mKHVp
ZF90KSk7CisJCW1lbWNweSgmdWtleS51aWQsIGtleSArIHNpemVvZihlbnVtIG5zc19sb29r
dXBfdHlwZSksCisJCSAgICBzaXplb2YodWlkX3QpKTsKKwkJZXJybm8gPSAwOworCQkqYnVm
ZmVyID0gZ2V0cHcod3JhcF9nZXRwd3VpZF9yLCB1a2V5LCBidWZmZXJfc2l6ZSk7CisJCXB3
X2Vycm5vID0gZXJybm87CisKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJVFJBQ0VfT1VUKHBh
c3N3ZF9sb29rdXBfZnVuYyk7CiAJCXJldHVybiAoTlNfVU5BVkFJTCk7CiAJfQogCi0Jc3dp
dGNoIChsb29rdXBfdHlwZSkgewotCWNhc2UgbnNzX2x0X25hbWU6Ci0JCXJlc3VsdCA9IGdl
dHB3bmFtKGxvZ2luKTsKLQkJZnJlZShsb2dpbik7Ci0JCWJyZWFrOwotCWNhc2UgbnNzX2x0
X2lkOgotCQlyZXN1bHQgPSBnZXRwd3VpZCh1aWQpOwotCQlicmVhazsKLQlkZWZhdWx0Ogot
CQkvKiBTSE9VTEQgTk9UIEJFIFJFQUNIRUQgKi8KLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHJl
c3VsdCAhPSBOVUxMKSB7Ci0JCXBhc3N3ZF9tYXJzaGFsX2Z1bmMocmVzdWx0LCBOVUxMLCBi
dWZmZXJfc2l6ZSk7Ci0JCSpidWZmZXIgPSBtYWxsb2MoKmJ1ZmZlcl9zaXplKTsKLQkJYXNz
ZXJ0KCpidWZmZXIgIT0gTlVMTCk7Ci0JCXBhc3N3ZF9tYXJzaGFsX2Z1bmMocmVzdWx0LCAq
YnVmZmVyLCBidWZmZXJfc2l6ZSk7Ci0JfQotCiAJVFJBQ0VfT1VUKHBhc3N3ZF9sb29rdXBf
ZnVuYyk7Ci0JcmV0dXJuIChyZXN1bHQgPT0gTlVMTCA/IE5TX05PVEZPVU5EIDogTlNfU1VD
Q0VTUyk7CisKKwlyZXR1cm4gKCpidWZmZXIgPT0gTlVMTCA/CisJICAgIChwd19lcnJubyA9
PSAwID8gTlNfTk9URk9VTkQgOiBOU19VTkFWQUlMKSA6CisJICAgIE5TX1NVQ0NFU1MpOwog
fQogCiBzdGF0aWMgdm9pZCAqCkBAIC0yMDIsMTkgKzI5MywyMCBAQCBwYXNzd2RfbXBfaW5p
dF9mdW5jKHZvaWQpCiBzdGF0aWMgaW50CiBwYXNzd2RfbXBfbG9va3VwX2Z1bmMoY2hhciAq
KmJ1ZmZlciwgc2l6ZV90ICpidWZmZXJfc2l6ZSwgdm9pZCAqbWRhdGEpCiB7Ci0Jc3RydWN0
IHBhc3N3ZAkqcmVzdWx0OwogCisJdV9rZXkgdWtleTsKIAlUUkFDRV9JTihwYXNzd2RfbXBf
bG9va3VwX2Z1bmMpOwotCXJlc3VsdCA9IGdldHB3ZW50KCk7Ci0JaWYgKHJlc3VsdCAhPSBO
VUxMKSB7Ci0JCXBhc3N3ZF9tYXJzaGFsX2Z1bmMocmVzdWx0LCBOVUxMLCBidWZmZXJfc2l6
ZSk7Ci0JCSpidWZmZXIgPSBtYWxsb2MoKmJ1ZmZlcl9zaXplKTsKLQkJYXNzZXJ0KCpidWZm
ZXIgIT0gTlVMTCk7Ci0JCXBhc3N3ZF9tYXJzaGFsX2Z1bmMocmVzdWx0LCAqYnVmZmVyLCBi
dWZmZXJfc2l6ZSk7Ci0JfQorCWFzc2VydChidWZmZXIgIT0gTlVMTCk7CisJYXNzZXJ0KGJ1
ZmZlcl9zaXplICE9IE5VTEwpOworCSpidWZmZXJfc2l6ZSA9IDA7CisJZXJybm8gPSAwOwor
CXVrZXkudWlkID0gMDsKKwkqYnVmZmVyID0gZ2V0cHcod3JhcF9nZXRwd2VudF9yLCB1a2V5
LCBidWZmZXJfc2l6ZSk7CiAKIAlUUkFDRV9PVVQocGFzc3dkX21wX2xvb2t1cF9mdW5jKTsK
LQlyZXR1cm4gKHJlc3VsdCA9PSBOVUxMID8gTlNfTk9URk9VTkQgOiBOU19TVUNDRVNTKTsK
KwlyZXR1cm4gKCpidWZmZXIgPT0gTlVMTCA/CisJCShlcnJubyA9PSAwID8gTlNfTk9URk9V
TkQgOiBOU19VTkFWQUlMKSA6CisJCU5TX1NVQ0NFU1MpOwogfQogCiBzdGF0aWMgdm9pZApk
aWZmIC0tZ2l0IGEvdXNyLnNiaW4vbnNjZC9uc2NkLmMgYi91c3Iuc2Jpbi9uc2NkL25zY2Qu
YwppbmRleCAwMzE0ZTk5Njc1ZjMuLmY4ZjFmZDNlZTljNSAxMDA2NDQKLS0tIGEvdXNyLnNi
aW4vbnNjZC9uc2NkLmMKKysrIGIvdXNyLnNiaW4vbnNjZC9uc2NkLmMKQEAgLTU3NywxNyAr
NTc3LDE0IEBAIGdldF90aW1lX2Z1bmMoc3RydWN0IHRpbWV2YWwgKnRpbWUpCiB9CiAKIC8q
Ci0gKiBUaGUgaWRlYSBvZiBfbnNzX2NhY2hlX2N5Y2xlX3ByZXZlbnRpb25fZnVuY3Rpb24g
aXMgdGhhdCBuc2Rpc3BhdGNoCisgKiBUaGUgaWRlYSBvZiBfbnNzX2NhY2hlX2N5Y2xlX3By
ZXZlbnRpb25fc3ltYm9sIGlzIHRoYXQgbnNkaXNwYXRjaAogICogd2lsbCBzZWFyY2ggZm9y
IHRoaXMgc3ltYm9sIGluIHRoZSBleGVjdXRhYmxlLiBUaGlzIHN5bWJvbCBpcyB0aGUKICAq
IGF0dHJpYnV0ZSBvZiB0aGUgY2FjaGluZyBkYWVtb24uIFNvLCBpZiBpdCBleGlzdHMsIG5z
ZGlzcGF0Y2ggd29uJ3QgdHJ5CiAgKiB0byBjb25uZWN0IHRvIHRoZSBjYWNoaW5nIGRhZW1v
biBhbmQgd2lsbCBqdXN0IGlnbm9yZSB0aGUgJ2NhY2hlJwogICogc291cmNlIGluIHRoZSBu
c3N3aXRjaC5jb25mLiBUaGlzIG1ldGhvZCBoZWxwcyB0byBhdm9pZCBjeWNsZXMgYW5kCiAg
KiBvcmdhbml6ZSBzZWxmLXBlcmZvcm1pbmcgcmVxdWVzdHMuCi0gKgotICogKG5vdCBhY3R1
YWxseSBhIGZ1bmN0aW9uOyBpdCB1c2VkIHRvIGJlLCBidXQgaXQgZG9lc24ndCBtYWtlIGFu
eQotICogZGlmZmVyZW5jZSwgYXMgbG9uZyBhcyBpdCBoYXMgZXh0ZXJuYWwgbGlua2FnZSkK
ICAqLwotdm9pZCAqX25zc19jYWNoZV9jeWNsZV9wcmV2ZW50aW9uX2Z1bmN0aW9uOwordm9p
ZCAqX25zc19jYWNoZV9jeWNsZV9wcmV2ZW50aW9uX3N5bWJvbDsKIAogaW50CiBtYWluKGlu
dCBhcmdjLCBjaGFyICphcmd2W10pCmRpZmYgLS1naXQgYS91c3Iuc2Jpbi9uc2NkL3F1ZXJ5
LmMgYi91c3Iuc2Jpbi9uc2NkL3F1ZXJ5LmMKaW5kZXggYWEwNDhmMDI5YWE2Li4yOGIyYTFi
ZTMzN2YgMTAwNjQ0Ci0tLSBhL3Vzci5zYmluL25zY2QvcXVlcnkuYworKysgYi91c3Iuc2Jp
bi9uc2NkL3F1ZXJ5LmMKQEAgLTgwMCw4ICs4MDAsMTMgQEAgb25fcmVhZF9yZXF1ZXN0X3By
b2Nlc3Moc3RydWN0IHF1ZXJ5X3N0YXRlICpxc3RhdGUpCiAJCQkJCQkgIENFTFRfTkVHQVRJ
VkUpOwogCiAJCQkJCXJlYWRfcmVzcG9uc2UtPmVycm9yX2NvZGUgPSAwOwotCQkJCQlyZWFk
X3Jlc3BvbnNlLT5kYXRhID0gTlVMTDsKLQkJCQkJcmVhZF9yZXNwb25zZS0+ZGF0YV9zaXpl
ID0gMDsKKwkJCQkJcmVhZF9yZXNwb25zZS0+ZGF0YV9zaXplID0KKwkJCQkJCXNpemVvZihu
ZWdhdGl2ZV9kYXRhKTsKKwkJCQkJcmVhZF9yZXNwb25zZS0+ZGF0YSA9CisJCQkJCQltYWxs
b2MocmVhZF9yZXNwb25zZS0+ZGF0YV9zaXplKTsKKwkJCQkJbWVtY3B5KHJlYWRfcmVzcG9u
c2UtPmRhdGEsCisJCQkJCQluZWdhdGl2ZV9kYXRhLAorCQkJCQkJcmVhZF9yZXNwb25zZS0+
ZGF0YV9zaXplKTsKIAkJCQl9CiAJCQl9CiAJCX0K

--------------GgH21HrghlcuxFkoCfeGNwNA--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?b4a450fd-36e8-d590-d833-aa8cf3a1afa9>