<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>6233</bug_id>
          
          <creation_ts>2005-12-24 13:20:45 -0800</creation_ts>
          <short_desc>Reproducible stack-overflow crash in ~RefPtr&lt;T&gt; due to RefPtr&lt;T&gt; use in linked lists</short_desc>
          <delta_ts>2005-12-29 03:15:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>ap</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>26490</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-24 13:20:45 -0800</bug_when>
    <thetext>You get this crash, e.g., when running run-javascriptcore-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26491</commentid>
    <comment_count>1</comment_count>
      <attachid>5273</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-24 13:21:07 -0800</bug_when>
    <thetext>Created attachment 5273
Reduction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26492</commentid>
    <comment_count>2</comment_count>
      <attachid>5274</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-24 13:33:30 -0800</bug_when>
    <thetext>Created attachment 5274
First cut at fix

This patch does three things: (1) Standardizes all our linked lists of nodes to
use &quot;next&quot; as their next pointers. (2) Creates the ListRefPtr&lt;T&gt; class, which
iteratively, instead of recursively, destroys the list. (3) Standardizes our
recursively defined linked list nodes to use ListRefPtr&lt;T&gt; and implement the
necessary releaseNext() member function.

I&apos;m not sure about this solution. I really like the idea of ListRefPtr&lt;T&gt;,
which Darin and Maciej and I have already talked about, but I can&apos;t seem to
make it simple enough. All ListRefPtr&lt;T&gt; should do is implement release(),
along with a custom 4-line-ish destructor. However, I haven&apos;t had success just
defining ListRefPtr&lt;T&gt; as a subclass of RefPtr&lt;T&gt;, so I&apos;ve had to create a
whole new file and copy and paste all the template definitions, which seems
unwieldy to maintain, going forward. 

Shouldn&apos;t I just be able to subclass? When I tried that, it seemed like
ListRefPtr&lt;T&gt; didn&apos;t inherit any of RefPtr&lt;T&gt;&apos;s member functions. For example,
operator= didn&apos;t work.

If that shouldn&apos;t work, what about changing RefPtr&lt;T&gt; to take a template
releaseNext() function pointer that defaults to 0? I got close on that, but
couldn&apos;t get the &quot;default to 0&quot; behavior to compile:

template &lt;typename T, T* (*releaseNext)() = 0&gt; class RefPtr

was what I tried. The compiler basically said it refused to case a &quot;uint&quot; to a
function pointer. ??? pointer = 0 is c++ bread and butter.

Someone with more template fu... help?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26496</commentid>
    <comment_count>3</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-24 14:02:40 -0800</bug_when>
    <thetext>I think some things like constructors and assignment operators do not inherit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26535</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-25 00:48:12 -0800</bug_when>
    <thetext>*** Bug 5223 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26536</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-25 00:49:59 -0800</bug_when>
    <thetext>I made a few suggestions to Geoff on IRC:

1) You can inherit from RefPtr but you will have to implement all constructors and destructors and call 
superclass explicitly.

2) +            PassRefPtr&lt;T&gt; reaper = PassRefPtr&lt;T&gt;::adopt(m_ptr);

The local variable here can just be a RefPtr.

3) Same as above, adopting m_ptr like that will cause it to be released twice. Instead, make release() on 
RefPtr return a PassRefPtr and do this:

RefPtr&lt;T&gt; reaper = release();

4) Make release() give a PassRefPtr instead of a raw pointer (and releaseNext() as well), like so:

PassRefPtr&lt;T&gt; release() { PassRefPtr&lt;T&gt; tmp = adoptRef(m_ptr); m_ptr = 0; return tmp; }

If you do 1-4, you should not need to use adopt at all in the destruction loop.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26537</commentid>
    <comment_count>6</comment_count>
      <attachid>5274</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-25 00:50:46 -0800</bug_when>
    <thetext>Comment on attachment 5274
First cut at fix

Marking r- due to the possible deref underflow. Please consider style issues as
well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26687</commentid>
    <comment_count>7</comment_count>
      <attachid>5292</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-26 17:11:01 -0800</bug_when>
    <thetext>Created attachment 5292
Second cut at fix

This one should do the trick.

If you&apos;re wondering about the wonky this-&gt; syntax, it&apos;s their to disambiguate
the template mumbo-jumbo. Let me know if there&apos;s a snazzier way to get it to
compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26688</commentid>
    <comment_count>8</comment_count>
      <attachid>5293</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-26 17:13:08 -0800</bug_when>
    <thetext>Created attachment 5293
Second cut at fix

Oops. Last patch had stray &apos;{&apos; &apos;}&apos; in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26708</commentid>
    <comment_count>9</comment_count>
      <attachid>5293</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-27 01:33:02 -0800</bug_when>
    <thetext>Comment on attachment 5293
Second cut at fix

Looks delicious. r=me

Make sure to land the test case with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27116</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2005-12-29 03:15:39 -0800</bug_when>
    <thetext>Landed with updated mozilla test that crashes (would crash) deployment as well as development builds.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5273</attachid>
            <date>2005-12-24 13:21:07 -0800</date>
            <delta_ts>2005-12-24 13:21:07 -0800</delta_ts>
            <desc>Reduction</desc>
            <filename>reduction.html</filename>
            <type>text/html</type>
            <size>122</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8c2NyaXB0PgpzdHIgPSAiIjsKZm9yICh2YXIgaSA9IDA7IGkgPCA2MDAw
MDA7IGkrKykKICAgIHN0ciArPSAiZigpOyI7CmV2YWwoc3RyKTsKPC9zY3JpcHQ+CjwvYm9keT4K
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5274</attachid>
            <date>2005-12-24 13:33:30 -0800</date>
            <delta_ts>2005-12-26 17:11:01 -0800</delta_ts>
            <desc>First cut at fix</desc>
            <filename>patch-listrefptr.txt</filename>
            <type>text/plain</type>
            <size>31958</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtcCAt
dSAtcjEuMzEgSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagotLS0gSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyMiBEZWMgMjAwNSAwMTo0MDo1
MyAtMDAwMAkxLjMxCisrKyBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CTI0IERlYyAyMDA1IDA4OjA5OjE2IC0wMDAwCkBAIC0yNSw2ICsyNSw3IEBACiAvKiBFbmQgUEJY
QWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rp
b24gKi8KKwkJMTQ4QTE2MjcwOTVEMTZCQjAwNjY2RDBEIC8qIExpc3RSZWZQdHIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OEExNjI2MDk1RDE2QkIw
MDY2NkQwRCAvKiBMaXN0UmVmUHRyLmggKi87IH07CiAJCTY1MkMxMDdGMDhEQTdCMUUwMDIwODg3
RCAvKiBwcm90ZWN0ZWRfcmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTJDMTA3RTA4REE3QjFFMDAyMDg4N0QgLyogcHJvdGVjdGVkX3Jl
ZmVyZW5jZS5oICovOyB9OwogCQk2NTQxQkQ3MjA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2
RTA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFwLmggKi87IH07CiAJCTY1NDFCRDczMDhFODBB
MTcwMDJDQkVFNyAvKiBUQ1NwaW5Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RjA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5o
ICovOyB9OwpAQCAtMjc3LDYgKzI3OCw3IEBACiAvKiBFbmQgUEJYQ29udGFpbmVySXRlbVByb3h5
IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTE0
OEExNjI2MDk1RDE2QkIwMDY2NkQwRCAvKiBMaXN0UmVmUHRyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMaXN0UmVmUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAvKiB0ZXN0a2pzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSAyOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHRlc3RranMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCTUxMTRGNDdCMDVFNDQy
NjIwMEQxQkJCRCAvKiBydW50aW1lX3Jvb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gcnVudGltZV9yb290LmNwcDsgcGF0aCA9IGJp
bmRpbmdzL3J1bnRpbWVfcm9vdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgfTsKIAkJNTExNEY0N0MwNUU0NDI2MjAwRDFCQkJEIC8qIHJ1bnRpbWVfcm9vdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBydW50aW1l
X3Jvb3QuaDsgcGF0aCA9IGJpbmRpbmdzL3J1bnRpbWVfcm9vdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CkBAIC02NjUsNiArNjY3LDcgQEAKIAkJCQk2NTdFRUJC
RjA5NEU0NDVFMDA4QzlDN0IgLyogSGFzaENvdW50ZWRTZXQuaCAqLywKIAkJCQk2NUM2NDdCMzA5
M0VGOEQ2MDAyMkMzODAgLyogUmVmUHRyLmggKi8sCiAJCQkJNjU4MEY3OTUwOTQwNzA1NjAwODJD
MjE5IC8qIFBhc3NSZWZQdHIuaCAqLywKKwkJCQkxNDhBMTYyNjA5NUQxNkJCMDA2NjZEMEQgLyog
TGlzdFJlZlB0ci5oICovLAogCQkJCTY1RDdEMTlCMDhGMTBCNUIwMDE1QUJEOCAvKiBGYXN0TWFs
bG9jSW50ZXJuYWwuaCAqLywKIAkJCQk2NTU3RThGNzA4RUE1RDREMDA0OUNERkMgLyogSGFzaE1h
cFB0clNwZWMuaCAqLywKIAkJCQk2NURGQzkyQTA4RUExNzNBMDBGNzMwMEIgLyogSGFzaEZ1bmN0
aW9ucy5oICovLApAQCAtODUyLDYgKzg1NSw3IEBACiAJCQkJNjU4MEY3OTYwOTQwNzA1NjAwODJD
MjE5IC8qIFBhc3NSZWZQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1N0VFQkMwMDk0RTQ0NUUw
MDhDOUM3QiAvKiBIYXNoQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBQTRGNzgw
OTU3MjUxRjAwODRCM0E3IC8qIEFsd2F5c0lubGluZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMTQ4
QTE2MjcwOTVEMTZCQjAwNjY2RDBEIC8qIExpc3RSZWZQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDoga2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45MQpkaWZmIC1wIC11
IC1yMS45MSBranMvbm9kZXMuY3BwCi0tLSBranMvbm9kZXMuY3BwCTEzIERlYyAyMDA1IDIxOjI0
OjUxIC0wMDAwCTEuOTEKKysrIGtqcy9ub2Rlcy5jcHAJMjQgRGVjIDIwMDUgMDg6MDk6MTggLTAw
MDAKQEAgLTMwOSw3ICszMDksNyBAQCBKU1ZhbHVlICpFbGVtZW50Tm9kZTo6ZXZhbHVhdGUoRXhl
Y1N0YXRlCiB7CiAgIEpTT2JqZWN0ICphcnJheSA9IGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigp
LT5idWlsdGluQXJyYXkoKS0+Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVtcHR5KCkpOwogICBpbnQg
bGVuZ3RoID0gMDsKLSAgZm9yIChFbGVtZW50Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5saXN0
LmdldCgpKSB7CisgIGZvciAoRWxlbWVudE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5n
ZXQoKSkgewogICAgIEpTVmFsdWUgKnZhbCA9IG4tPm5vZGUtPmV2YWx1YXRlKGV4ZWMpOwogICAg
IEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgbGVuZ3RoICs9IG4tPmVsaXNpb247CkBAIC0z
NjAsNyArMzYwLDcgQEAgSlNWYWx1ZSAqUHJvcGVydHlMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlYwog
ewogICBKU09iamVjdCAqb2JqID0gZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5P
YmplY3QoKS0+Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVtcHR5KCkpOwogICAKLSAgZm9yIChQcm9w
ZXJ0eUxpc3ROb2RlICpwID0gdGhpczsgcDsgcCA9IHAtPmxpc3QuZ2V0KCkpIHsKKyAgZm9yIChQ
cm9wZXJ0eUxpc3ROb2RlICpwID0gdGhpczsgcDsgcCA9IHAtPm5leHQuZ2V0KCkpIHsKICAgICBK
U1ZhbHVlICpuID0gcC0+bm9kZS0+bmFtZS0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pTX0NIRUNL
RVhDRVBUSU9OVkFMVUUKICAgICBKU1ZhbHVlICp2ID0gcC0+bm9kZS0+YXNzaWduLT5ldmFsdWF0
ZShleGVjKTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBMaXN0IEFyZ3VtZW50TGlzdE5vZGU6OmV2YWx1
YXRlTGlzdChFeGVjCiB7CiAgIExpc3QgbDsKIAotICBmb3IgKEFyZ3VtZW50TGlzdE5vZGUgKm4g
PSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkgeworICBmb3IgKEFyZ3VtZW50TGlzdE5vZGUg
Km4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkgewogICAgIEpTVmFsdWUgKnYgPSBuLT5l
eHByLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05MSVNUCiAgICAgbC5h
cHBlbmQodik7CkBAIC0xNDE1LDE1ICsxNDE1LDE1IEBAIEpTVmFsdWUgKkNvbW1hTm9kZTo6ZXZh
bHVhdGUoRXhlY1N0YXRlICoKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGF0
TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFN0YXRMaXN0Tm9k
ZTo6U3RhdExpc3ROb2RlKFN0YXRlbWVudE5vZGUgKnMpCi0gIDogc3RhdGVtZW50KHMpLCBsaXN0
KHRoaXMpCisgIDogc3RhdGVtZW50KHMpLCBuZXh0KHRoaXMpCiB7CiAgIHNldExvYyhzLT5maXJz
dExpbmUoKSwgcy0+bGFzdExpbmUoKSwgcy0+c291cmNlSWQoKSk7CiB9CiAgCiBTdGF0TGlzdE5v
ZGU6OlN0YXRMaXN0Tm9kZShTdGF0TGlzdE5vZGUgKmwsIFN0YXRlbWVudE5vZGUgKnMpCi0gIDog
c3RhdGVtZW50KHMpLCBsaXN0KGwtPmxpc3QpCisgIDogc3RhdGVtZW50KHMpLCBuZXh0KGwtPm5l
eHQpCiB7Ci0gIGwtPmxpc3QgPSB0aGlzOworICBsLT5uZXh0ID0gdGhpczsKICAgc2V0TG9jKGwt
PmZpcnN0TGluZSgpLCBzLT5sYXN0TGluZSgpLCBsLT5zb3VyY2VJZCgpKTsKIH0KIApAQCAtMTQz
Nyw3ICsxNDM3LDcgQEAgQ29tcGxldGlvbiBTdGF0TGlzdE5vZGU6OmV4ZWN1dGUoRXhlY1N0YQog
ICAKICAgSlNWYWx1ZSAqdiA9IGMudmFsdWUoKTsKICAgCi0gIGZvciAoU3RhdExpc3ROb2RlICpu
ID0gbGlzdC5nZXQoKTsgbjsgbiA9IG4tPmxpc3QuZ2V0KCkpIHsKKyAgZm9yIChTdGF0TGlzdE5v
ZGUgKm4gPSBuZXh0LmdldCgpOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkgewogICAgIENvbXBsZXRp
b24gYzIgPSBuLT5zdGF0ZW1lbnQtPmV4ZWN1dGUoZXhlYyk7CiAgICAgS0pTX0FCT1JUUE9JTlQK
ICAgICBpZiAoYzIuY29tcGxUeXBlKCkgIT0gTm9ybWFsKQpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAg
Q29tcGxldGlvbiBTdGF0TGlzdE5vZGU6OmV4ZWN1dGUoRXhlY1N0YQogCiB2b2lkIFN0YXRMaXN0
Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgZm9yIChTdGF0TGlz
dE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkKKyAgZm9yIChTdGF0TGlzdE5v
ZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKICAgICBuLT5zdGF0ZW1lbnQtPnBy
b2Nlc3NWYXJEZWNscyhleGVjKTsKIH0KIApAQCAtMTUyNiw3ICsxNTI2LDcgQEAgdm9pZCBWYXJE
ZWNsTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdAogLy8gRUNNQSAxMi4yCiBKU1ZhbHVlICpW
YXJEZWNsTGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgZm9yIChWYXJE
ZWNsTGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkgeworICBmb3IgKFZh
ckRlY2xMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0LmdldCgpKSB7CiAgICAgbi0+
dmFyLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQogICB9CkBA
IC0xNTM1LDcgKzE1MzUsNyBAQCBKU1ZhbHVlICpWYXJEZWNsTGlzdE5vZGU6OmV2YWx1YXRlKEV4
ZWNTCiAKIHZvaWQgVmFyRGVjbExpc3ROb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpl
eGVjKQogewotICBmb3IgKFZhckRlY2xMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5saXN0
LmdldCgpKQorICBmb3IgKFZhckRlY2xMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0
LmdldCgpKQogICAgIG4tPnZhci0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwogfQogCkBAIC0xNTQ2
LDcgKzE1NDYsNyBAQCBDb21wbGV0aW9uIFZhclN0YXRlbWVudE5vZGU6OmV4ZWN1dGUoRXhlCiB7
CiAgIEtKU19CUkVBS1BPSU5UOwogCi0gICh2b2lkKSBsaXN0LT5ldmFsdWF0ZShleGVjKTsKKyAg
KHZvaWQpIG5leHQtPmV2YWx1YXRlKGV4ZWMpOwogICBLSlNfQ0hFQ0tFWENFUFRJT04KIAogICBy
ZXR1cm4gQ29tcGxldGlvbihOb3JtYWwpOwpAQCAtMTU1NCw3ICsxNTU0LDcgQEAgQ29tcGxldGlv
biBWYXJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZQogCiB2b2lkIFZhclN0YXRlbWVudE5vZGU6
OnByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIGxpc3QtPnByb2Nlc3NWYXJE
ZWNscyhleGVjKTsKKyAgbmV4dC0+cHJvY2Vzc1ZhckRlY2xzKGV4ZWMpOwogfQogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQmxvY2tOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQpAQCAtMTU2Miw4ICsxNTYyLDggQEAgdm9pZCBWYXJTdGF0ZW1lbnRO
b2RlOjpwcm9jZXNzVmFyRGVjbHMoRQogQmxvY2tOb2RlOjpCbG9ja05vZGUoU291cmNlRWxlbWVu
dHNOb2RlICpzKQogewogICBpZiAocykgewotICAgIHNvdXJjZSA9IHMtPmVsZW1lbnRzOwotICAg
IHMtPmVsZW1lbnRzID0gMDsKKyAgICBzb3VyY2UgPSBzLT5uZXh0OworICAgIHMtPm5leHQgPSAw
OwogICAgIHNldExvYyhzLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUoKSwgcy0+c291cmNlSWQo
KSk7CiAgIH0gZWxzZSB7CiAgICAgc291cmNlID0gMDsKQEAgLTE5ODQsMTYgKzE5ODQsMTYgQEAg
SlNWYWx1ZSAqQ2FzZUNsYXVzZU5vZGU6OmV2YWx1YXRlKEV4ZWNTdAogLy8gRUNNQSAxMi4xMQog
Q29tcGxldGlvbiBDYXNlQ2xhdXNlTm9kZTo6ZXZhbFN0YXRlbWVudHMoRXhlY1N0YXRlICpleGVj
KQogewotICBpZiAobGlzdCkKLSAgICByZXR1cm4gbGlzdC0+ZXhlY3V0ZShleGVjKTsKKyAgaWYg
KG5leHQpCisgICAgcmV0dXJuIG5leHQtPmV4ZWN1dGUoZXhlYyk7CiAgIGVsc2UKICAgICByZXR1
cm4gQ29tcGxldGlvbihOb3JtYWwsIGpzVW5kZWZpbmVkKCkpOwogfQogCiB2b2lkIENhc2VDbGF1
c2VOb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKQogewotICBpZiAobGlzdCkK
LSAgICBsaXN0LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CisgIGlmIChuZXh0KQorICAgIG5leHQt
PnByb2Nlc3NWYXJEZWNscyhleGVjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIENsYXVzZUxpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTIwMDgsOSArMjAwOCw5IEBAIEpTVmFsdWUgKkNsYXVzZUxpc3ROb2RlOjpldmFsdWF0ZShFeGVj
U3QKIC8vIEVDTUEgMTIuMTEKIHZvaWQgQ2xhdXNlTGlzdE5vZGU6OnByb2Nlc3NWYXJEZWNscyhF
eGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIGZvciAoQ2xhdXNlTGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBu
ID0gbi0+bnguZ2V0KCkpCi0gICAgaWYgKG4tPmNsKQotICAgICAgbi0+Y2wtPnByb2Nlc3NWYXJE
ZWNscyhleGVjKTsKKyAgZm9yIChDbGF1c2VMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5t
X25leHQuZ2V0KCkpCisgICAgaWYgKG4tPm1fY2xhdXNlKQorICAgICAgbi0+bV9jbGF1c2UtPnBy
b2Nlc3NWYXJEZWNscyhleGVjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIENhc2VCbG9ja05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIw
MTksOCArMjAxOSw4IEBAIENhc2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhdXNlTGlzdE5vZGUgKmwyKQogewogICBp
ZiAobDEpIHsKLSAgICBsaXN0MSA9IGwxLT5ueDsKLSAgICBsMS0+bnggPSAwOworICAgIGxpc3Qx
ID0gbDEtPm1fbmV4dC5nZXQoKTsKKyAgICBsMS0+bV9uZXh0ID0gMDsKICAgfSBlbHNlIHsKICAg
ICBsaXN0MSA9IDA7CiAgIH0KQEAgLTIwMjgsOCArMjAyOCw4IEBAIENhc2VCbG9ja05vZGU6OkNh
c2VCbG9ja05vZGUoQ2xhdXNlTGlzdE4KICAgZGVmID0gZDsKIAogICBpZiAobDIpIHsKLSAgICBs
aXN0MiA9IGwyLT5ueDsKLSAgICBsMi0+bnggPSAwOworICAgIGxpc3QyID0gbDItPm1fbmV4dC5n
ZXQoKTsKKyAgICBsMi0+bV9uZXh0ID0gMDsKICAgfSBlbHNlIHsKICAgICBsaXN0MiA9IDA7CiAg
IH0KQEAgLTIzMDYsMTUgKzIzMDYsMTUgQEAgSlNWYWx1ZSAqRnVuY0V4cHJOb2RlOjpldmFsdWF0
ZShFeGVjU3RhdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNvdXJjZUVsZW1l
bnRzTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogU291cmNlRWxlbWVudHNOb2Rl
OjpTb3VyY2VFbGVtZW50c05vZGUoU3RhdGVtZW50Tm9kZSAqczEpCi0gIDogZWxlbWVudChzMSks
IGVsZW1lbnRzKHRoaXMpCisgIDogbm9kZShzMSksIG5leHQodGhpcykKIHsKICAgc2V0TG9jKHMx
LT5maXJzdExpbmUoKSwgczEtPmxhc3RMaW5lKCksIHMxLT5zb3VyY2VJZCgpKTsKIH0KICAKIFNv
dXJjZUVsZW1lbnRzTm9kZTo6U291cmNlRWxlbWVudHNOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAq
czEsIFN0YXRlbWVudE5vZGUgKnMyKQotICA6IGVsZW1lbnQoczIpLCBlbGVtZW50cyhzMS0+ZWxl
bWVudHMpCisgIDogbm9kZShzMiksIG5leHQoczEtPm5leHQpCiB7Ci0gIHMxLT5lbGVtZW50cyA9
IHRoaXM7CisgIHMxLT5uZXh0ID0gdGhpczsKICAgc2V0TG9jKHMxLT5maXJzdExpbmUoKSwgczIt
Pmxhc3RMaW5lKCksIHMxLT5zb3VyY2VJZCgpKTsKIH0KIApAQCAtMjMyMywxMyArMjMyMywxMyBA
QCBDb21wbGV0aW9uIFNvdXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZShFCiB7CiAgIEtKU19DSEVD
S0VYQ0VQVElPTgogCi0gIENvbXBsZXRpb24gYzEgPSBlbGVtZW50LT5leGVjdXRlKGV4ZWMpOwor
ICBDb21wbGV0aW9uIGMxID0gbm9kZS0+ZXhlY3V0ZShleGVjKTsKICAgS0pTX0NIRUNLRVhDRVBU
SU9OOwogICBpZiAoYzEuY29tcGxUeXBlKCkgIT0gTm9ybWFsKQogICAgIHJldHVybiBjMTsKICAg
Ci0gIGZvciAoU291cmNlRWxlbWVudHNOb2RlICpuID0gZWxlbWVudHMuZ2V0KCk7IG47IG4gPSBu
LT5lbGVtZW50cy5nZXQoKSkgewotICAgIENvbXBsZXRpb24gYzIgPSBuLT5lbGVtZW50LT5leGVj
dXRlKGV4ZWMpOworICBmb3IgKFNvdXJjZUVsZW1lbnRzTm9kZSAqbiA9IG5leHQuZ2V0KCk7IG47
IG4gPSBuLT5uZXh0LmdldCgpKSB7CisgICAgQ29tcGxldGlvbiBjMiA9IG4tPm5vZGUtPmV4ZWN1
dGUoZXhlYyk7CiAgICAgaWYgKGMyLmNvbXBsVHlwZSgpICE9IE5vcm1hbCkKICAgICAgIHJldHVy
biBjMjsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRvIHJldHVybiBjMiBoZXJlLCBidXQgaXQgc2Vl
bXMgdGhhdCBtb3ppbGxhIHJldHVybnMgYzEgaWYKQEAgLTIzNDQsMTQgKzIzNDQsMTQgQEAgQ29t
cGxldGlvbiBTb3VyY2VFbGVtZW50c05vZGU6OmV4ZWN1dGUoRQogLy8gRUNNQSAxNAogdm9pZCBT
b3VyY2VFbGVtZW50c05vZGU6OnByb2Nlc3NGdW5jRGVjbChFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0g
IGZvciAoU291cmNlRWxlbWVudHNOb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPmVsZW1lbnRzLmdl
dCgpKQotICAgIG4tPmVsZW1lbnQtPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKKyAgZm9yIChTb3Vy
Y2VFbGVtZW50c05vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKKyAgICBuLT5u
b2RlLT5wcm9jZXNzRnVuY0RlY2woZXhlYyk7CiB9CiAKIHZvaWQgU291cmNlRWxlbWVudHNOb2Rl
Ojpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKQogewotICBmb3IgKFNvdXJjZUVsZW1l
bnRzTm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5lbGVtZW50cy5nZXQoKSkKLSAgICBuLT5lbGVt
ZW50LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CisgIGZvciAoU291cmNlRWxlbWVudHNOb2RlICpu
ID0gdGhpczsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpCisgICAgbi0+bm9kZS0+cHJvY2Vzc1ZhckRl
Y2xzKGV4ZWMpOwogfQogCiBQcm9ncmFtTm9kZTo6UHJvZ3JhbU5vZGUoU291cmNlRWxlbWVudHNO
b2RlICpzKSA6IEZ1bmN0aW9uQm9keU5vZGUocykKSW5kZXg6IGtqcy9ub2Rlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS40NApkaWZmIC1wIC11IC1yMS40NCBranMvbm9kZXMuaAotLS0ga2pz
L25vZGVzLmgJMTMgRGVjIDIwMDUgMjE6MjQ6NTEgLTAwMDAJMS40NAorKysga2pzL25vZGVzLmgJ
MjQgRGVjIDIwMDUgMDg6MDk6MTkgLTAwMDAKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgX05P
REVTX0hfCiAKICNpbmNsdWRlIDxreG1sY29yZS9SZWZQdHIuaD4KKyNpbmNsdWRlIDxreG1sY29y
ZS9MaXN0UmVmUHRyLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC0yMTksMTQgKzIy
MCwxNSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgRWxlbWVudE5vZGUgOiBwdWJsaWMgTm9k
ZSB7CiAgIHB1YmxpYzoKICAgICAvLyBsaXN0IHBvaW50ZXIgaXMgdGFpbCBvZiBhIGNpcmN1bGFy
IGxpc3QsIGNyYWNrZWQgaW4gdGhlIEFycmF5Tm9kZSBjdG9yCi0gICAgRWxlbWVudE5vZGUoaW50
IGUsIE5vZGUgKm4pIDogbGlzdCh0aGlzKSwgZWxpc2lvbihlKSwgbm9kZShuKSB7IH0KKyAgICBF
bGVtZW50Tm9kZShpbnQgZSwgTm9kZSAqbikgOiBuZXh0KHRoaXMpLCBlbGlzaW9uKGUpLCBub2Rl
KG4pIHsgfQogICAgIEVsZW1lbnROb2RlKEVsZW1lbnROb2RlICpsLCBpbnQgZSwgTm9kZSAqbikK
LSAgICAgIDogbGlzdChsLT5saXN0KSwgZWxpc2lvbihlKSwgbm9kZShuKSB7IGwtPmxpc3QgPSB0
aGlzOyB9CisgICAgICA6IG5leHQobC0+bmV4dCksIGVsaXNpb24oZSksIG5vZGUobikgeyBsLT5u
ZXh0ID0gdGhpczsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CisgICAgRWxl
bWVudE5vZGUgKnJlbGVhc2VOZXh0KCkgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KICAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXJyYXlOb2RlOwotICAgIFJlZlB0cjxFbGVtZW50Tm9k
ZT4gbGlzdDsKKyAgICBMaXN0UmVmUHRyPEVsZW1lbnROb2RlPiBuZXh0OwogICAgIGludCBlbGlz
aW9uOwogICAgIFJlZlB0cjxOb2RlPiBub2RlOwogICB9OwpAQCAtMjM1LDkgKzIzNyw5IEBAIG5h
bWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgQXJyYXlOb2RlKGludCBlKSA6IGVsZW1lbnQo
MCksIGVsaXNpb24oZSksIG9wdCh0cnVlKSB7IH0KICAgICBBcnJheU5vZGUoRWxlbWVudE5vZGUg
KmVsZSkKLSAgICAgIDogZWxlbWVudChlbGUtPmxpc3QpLCBlbGlzaW9uKDApLCBvcHQoZmFsc2Up
IHsgZWxlLT5saXN0ID0gMDsgfQorICAgICAgOiBlbGVtZW50KGVsZS0+bmV4dC5nZXQoKSksIGVs
aXNpb24oMCksIG9wdChmYWxzZSkgeyBlbGUtPm5leHQgPSAwOyB9CiAgICAgQXJyYXlOb2RlKGlu
dCBlbGksIEVsZW1lbnROb2RlICplbGUpCi0gICAgICA6IGVsZW1lbnQoZWxlLT5saXN0KSwgZWxp
c2lvbihlbGkpLCBvcHQodHJ1ZSkgeyBlbGUtPmxpc3QgPSAwOyB9CisgICAgICA6IGVsZW1lbnQo
ZWxlLT5uZXh0LmdldCgpKSwgZWxpc2lvbihlbGkpLCBvcHQodHJ1ZSkgeyBlbGUtPm5leHQgPSAw
OyB9CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKQEAgLTI3
NSwyMSArMjc3LDIyIEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgLy8gbGlzdCBw
b2ludGVyIGlzIHRhaWwgb2YgYSBjaXJjdWxhciBsaXN0LCBjcmFja2VkIGluIHRoZSBPYmplY3RM
aXRlcmFsTm9kZSBjdG9yCiAgICAgUHJvcGVydHlMaXN0Tm9kZShQcm9wZXJ0eU5vZGUgKm4pCwot
ICAgICAgOiBub2RlKG4pLCBsaXN0KHRoaXMpIHsgfQorICAgICAgOiBub2RlKG4pLCBuZXh0KHRo
aXMpIHsgfQogICAgIFByb3BlcnR5TGlzdE5vZGUoUHJvcGVydHlOb2RlICpuLCBQcm9wZXJ0eUxp
c3ROb2RlICpsKQotICAgICAgOiBub2RlKG4pLCBsaXN0KGwtPmxpc3QpIHsgbC0+bGlzdCA9IHRo
aXM7IH0KKyAgICAgIDogbm9kZShuKSwgbmV4dChsLT5uZXh0KSB7IGwtPm5leHQgPSB0aGlzOyB9
CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKKyAgICBQcm9wZXJ0eUxpc3ROb2Rl
ICpyZWxlYXNlTmV4dCgpIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlOwogICAgIFJlZlB0cjxQcm9wZXJ0eU5v
ZGU+IG5vZGU7Ci0gICAgUmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IGxpc3Q7CisgICAgTGlzdFJl
ZlB0cjxQcm9wZXJ0eUxpc3ROb2RlPiBuZXh0OwogICB9OwogCiAgIGNsYXNzIE9iamVjdExpdGVy
YWxOb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgT2JqZWN0TGl0ZXJhbE5vZGUo
KSA6IGxpc3QoMCkgeyB9Ci0gICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlMaXN0Tm9kZSAq
bCkgOiBsaXN0KGwtPmxpc3QpIHsgbC0+bGlzdCA9IDA7IH0KKyAgICBPYmplY3RMaXRlcmFsTm9k
ZShQcm9wZXJ0eUxpc3ROb2RlICpsKSA6IGxpc3QobC0+bmV4dC5nZXQoKSkgeyBsLT5uZXh0ID0g
MDsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CkBAIC0z
MzEsMTUgKzMzNCwxNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgQXJndW1lbnRMaXN0Tm9k
ZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWls
IG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgQXJndW1lbnRzTm9kZSBjdG9yCi0g
ICAgQXJndW1lbnRMaXN0Tm9kZShOb2RlICplKSA6IGxpc3QodGhpcyksIGV4cHIoZSkgeyB9Cisg
ICAgQXJndW1lbnRMaXN0Tm9kZShOb2RlICplKSA6IG5leHQodGhpcyksIGV4cHIoZSkgeyB9CiAg
ICAgQXJndW1lbnRMaXN0Tm9kZShBcmd1bWVudExpc3ROb2RlICpsLCBOb2RlICplKQotICAgICAg
OiBsaXN0KGwtPmxpc3QpLCBleHByKGUpIHsgbC0+bGlzdCA9IHRoaXM7IH0KKyAgICAgIDogbmV4
dChsLT5uZXh0KSwgZXhwcihlKSB7IGwtPm5leHQgPSB0aGlzOyB9CiAgICAgSlNWYWx1ZSAqZXZh
bHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICBMaXN0IGV2YWx1YXRlTGlzdChFeGVjU3RhdGUg
KmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0
OworICAgIEFyZ3VtZW50TGlzdE5vZGUgKnJlbGVhc2VOZXh0KCkgeyByZXR1cm4gbmV4dC5yZWxl
YXNlKCk7IH0KICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXJndW1lbnRzTm9kZTsKLSAg
ICBSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gbGlzdDsKKyAgICBMaXN0UmVmUHRyPEFyZ3VtZW50
TGlzdE5vZGU+IG5leHQ7CiAgICAgUmVmUHRyPE5vZGU+IGV4cHI7CiAgIH07CiAKQEAgLTM0Nywx
MiArMzUxLDEyIEBAIG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgQXJndW1lbnRzTm9k
ZSgpIDogbGlzdCgwKSB7IH0KICAgICBBcmd1bWVudHNOb2RlKEFyZ3VtZW50TGlzdE5vZGUgKmwp
Ci0gICAgICA6IGxpc3QobC0+bGlzdCkgeyBsLT5saXN0ID0gMDsgfQorICAgICAgOiBsaXN0KGwt
Pm5leHQpIHsgbC0+bmV4dCA9IDA7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUg
KmV4ZWMpOwogICAgIExpc3QgZXZhbHVhdGVMaXN0KEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6Ci0g
ICAgUmVmUHRyPEFyZ3VtZW50TGlzdE5vZGU+IGxpc3Q7CisgICAgTGlzdFJlZlB0cjxBcmd1bWVu
dExpc3ROb2RlPiBsaXN0OwogICB9OwogCiAgIGNsYXNzIE5ld0V4cHJOb2RlIDogcHVibGljIE5v
ZGUgewpAQCAtNzQxLDEwICs3NDUsMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdmlydHVhbCBD
b21wbGV0aW9uIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJv
Y2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CisgICAgU3RhdExpc3ROb2RlICpyZWxlYXNlTmV4dCgp
IHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IENhc2VDbGF1c2VOb2RlOwogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7Ci0g
ICAgUmVmUHRyPFN0YXRMaXN0Tm9kZT4gbGlzdDsKKyAgICBMaXN0UmVmUHRyPFN0YXRMaXN0Tm9k
ZT4gbmV4dDsKICAgfTsKIAogICBjbGFzcyBBc3NpZ25FeHByTm9kZSA6IHB1YmxpYyBOb2RlIHsK
QEAgLTc3MiwyNyArNzc3LDI4IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBWYXJEZWNsTGlz
dE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICAvLyBsaXN0IHBvaW50ZXIgaXMg
dGFpbCBvZiBhIGNpcmN1bGFyIGxpc3QsIGNyYWNrZWQgaW4gdGhlIEZvck5vZGUvVmFyU3RhdGVt
ZW50Tm9kZSBjdG9yCi0gICAgVmFyRGVjbExpc3ROb2RlKFZhckRlY2xOb2RlICp2KSA6IGxpc3Qo
dGhpcyksIHZhcih2KSB7fQorICAgIFZhckRlY2xMaXN0Tm9kZShWYXJEZWNsTm9kZSAqdikgOiBu
ZXh0KHRoaXMpLCB2YXIodikge30KICAgICBWYXJEZWNsTGlzdE5vZGUoVmFyRGVjbExpc3ROb2Rl
ICpsLCBWYXJEZWNsTm9kZSAqdikKLSAgICAgIDogbGlzdChsLT5saXN0KSwgdmFyKHYpIHsgbC0+
bGlzdCA9IHRoaXM7IH0KKyAgICAgIDogbmV4dChsLT5uZXh0KSwgdmFyKHYpIHsgbC0+bmV4dCA9
IHRoaXM7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZp
cnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKKyAgICBWYXJEZWNsTGlzdE5v
ZGUgKnJlbGVhc2VOZXh0KCkgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KICAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgRm9yTm9kZTsKICAgICBmcmllbmQgY2xhc3MgVmFyU3RhdGVtZW50
Tm9kZTsKLSAgICBSZWZQdHI8VmFyRGVjbExpc3ROb2RlPiBsaXN0OworICAgIExpc3RSZWZQdHI8
VmFyRGVjbExpc3ROb2RlPiBuZXh0OwogICAgIFJlZlB0cjxWYXJEZWNsTm9kZT4gdmFyOwogICB9
OwogCiAgIGNsYXNzIFZhclN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAg
IHB1YmxpYzoKLSAgICBWYXJTdGF0ZW1lbnROb2RlKFZhckRlY2xMaXN0Tm9kZSAqbCkgOiBsaXN0
KGwtPmxpc3QpIHsgbC0+bGlzdCA9IDA7IH0KKyAgICBWYXJTdGF0ZW1lbnROb2RlKFZhckRlY2xM
aXN0Tm9kZSAqbCkgOiBuZXh0KGwtPm5leHQpIHsgbC0+bmV4dCA9IDA7IH0KICAgICB2aXJ0dWFs
IENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBw
cm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8VmFyRGVj
bExpc3ROb2RlPiBsaXN0OworICAgIFJlZlB0cjxWYXJEZWNsTGlzdE5vZGU+IG5leHQ7CiAgIH07
CiAKICAgY2xhc3MgQmxvY2tOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODAyLDcg
KzgwOCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVj
bHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtICZzKSBjb25zdDsKICAgcHJvdGVjdGVkOgotICAgIFJlZlB0cjxTb3VyY2VFbGVtZW50c05v
ZGU+IHNvdXJjZTsKKyAgICBMaXN0UmVmUHRyPFNvdXJjZUVsZW1lbnRzTm9kZT4gc291cmNlOwog
ICB9OwogCiAgIGNsYXNzIEVtcHR5U3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2Rl
IHsKQEAgLTg2MSw3ICs4NjcsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBGb3JOb2RlKE5vZGUg
KmUxLCBOb2RlICplMiwgTm9kZSAqZTMsIFN0YXRlbWVudE5vZGUgKnMpIDoKICAgICAgIGV4cHIx
KGUxKSwgZXhwcjIoZTIpLCBleHByMyhlMyksIHN0YXRlbWVudChzKSB7fQogICAgIEZvck5vZGUo
VmFyRGVjbExpc3ROb2RlICplMSwgTm9kZSAqZTIsIE5vZGUgKmUzLCBTdGF0ZW1lbnROb2RlICpz
KSA6Ci0gICAgICBleHByMShlMS0+bGlzdCksIGV4cHIyKGUyKSwgZXhwcjMoZTMpLCBzdGF0ZW1l
bnQocykgeyBlMS0+bGlzdCA9IDA7IH0KKyAgICAgIGV4cHIxKGUxLT5uZXh0LmdldCgpKSwgZXhw
cjIoZTIpLCBleHByMyhlMyksIHN0YXRlbWVudChzKSB7IGUxLT5uZXh0ID0gMDsgfQogICAgIHZp
cnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2
b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OwpAQCAtOTMwLDMzICs5MzYsMzQgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAKICAgY2xhc3MgQ2FzZUNsYXVzZU5vZGUgOiBwdWJsaWMgTm9kZSB7CiAg
IHB1YmxpYzoKLSAgICBDYXNlQ2xhdXNlTm9kZShOb2RlICplKSA6IGV4cHIoZSksIGxpc3QoMCkg
eyB9CisgICAgQ2FzZUNsYXVzZU5vZGUoTm9kZSAqZSkgOiBleHByKGUpLCBuZXh0KDApIHsgfQog
ICAgIENhc2VDbGF1c2VOb2RlKE5vZGUgKmUsIFN0YXRMaXN0Tm9kZSAqbCkKLSAgICAgIDogZXhw
cihlKSwgbGlzdChsLT5saXN0KSB7IGwtPmxpc3QgPSAwOyB9CisgICAgICA6IGV4cHIoZSksIG5l
eHQobC0+bmV4dCkgeyBsLT5uZXh0ID0gMDsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNT
dGF0ZSAqZXhlYyk7CiAgICAgQ29tcGxldGlvbiBldmFsU3RhdGVtZW50cyhFeGVjU3RhdGUgKmV4
ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKICAgcHJp
dmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gZXhwcjsKLSAgICBSZWZQdHI8U3RhdExpc3ROb2RlPiBs
aXN0OworICAgIExpc3RSZWZQdHI8U3RhdExpc3ROb2RlPiBuZXh0OwogICB9OwogCiAgIGNsYXNz
IENsYXVzZUxpc3ROb2RlIDogcHVibGljIE5vZGUgewogICBwdWJsaWM6CiAgICAgLy8gbGlzdCBw
b2ludGVyIGlzIHRhaWwgb2YgYSBjaXJjdWxhciBsaXN0LCBjcmFja2VkIGluIHRoZSBDYXNlQmxv
Y2tOb2RlIGN0b3IKLSAgICBDbGF1c2VMaXN0Tm9kZShDYXNlQ2xhdXNlTm9kZSAqYykgOiBjbChj
KSwgbngodGhpcykgeyB9CisgICAgQ2xhdXNlTGlzdE5vZGUoQ2FzZUNsYXVzZU5vZGUgKmMpIDog
bV9jbGF1c2UoYyksIG1fbmV4dCh0aGlzKSB7IH0KICAgICBDbGF1c2VMaXN0Tm9kZShDbGF1c2VM
aXN0Tm9kZSAqbiwgQ2FzZUNsYXVzZU5vZGUgKmMpCi0gICAgICA6IGNsKGMpLCBueChuLT5ueCkg
eyBuLT5ueCA9IHRoaXM7IH0KKyAgICAgIDogbV9jbGF1c2UoYyksIG1fbmV4dChuLT5tX25leHQp
IHsgbi0+bV9uZXh0ID0gdGhpczsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYyk7Ci0gICAgQ2FzZUNsYXVzZU5vZGUgKmNsYXVzZSgpIGNvbnN0IHsgcmV0dXJuIGNsLmdl
dCgpOyB9Ci0gICAgQ2xhdXNlTGlzdE5vZGUgKm5leHQoKSBjb25zdCB7IHJldHVybiBueC5nZXQo
KTsgfQorICAgIENhc2VDbGF1c2VOb2RlICpjbGF1c2UoKSBjb25zdCB7IHJldHVybiBtX2NsYXVz
ZS5nZXQoKTsgfQorICAgIENsYXVzZUxpc3ROb2RlICpuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0LmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUg
KmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0
OworICAgIENsYXVzZUxpc3ROb2RlICpyZWxlYXNlTmV4dCgpIHsgcmV0dXJuIG1fbmV4dC5yZWxl
YXNlKCk7IH0KICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ2FzZUJsb2NrTm9kZTsKLSAg
ICBSZWZQdHI8Q2FzZUNsYXVzZU5vZGU+IGNsOwotICAgIFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4g
bng7CisgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBtX2NsYXVzZTsKKyAgICBMaXN0UmVmUHRy
PENsYXVzZUxpc3ROb2RlPiBtX25leHQ7CiAgIH07CiAKICAgY2xhc3MgQ2FzZUJsb2NrTm9kZSA6
IHB1YmxpYyBOb2RlIHsKQEAgLTEwMjEsMTcgKzEwMjgsMTggQEAgbmFtZXNwYWNlIEtKUyB7CiAg
IHB1YmxpYzoKICAgICAvLyBsaXN0IHBvaW50ZXIgaXMgdGFpbCBvZiBhIGNpcmN1bGFyIGxpc3Qs
IGNyYWNrZWQgaW4gdGhlIEZ1bmNEZWNsTm9kZS9GdW5jRXhwck5vZGUgY3RvcgogICAgIFBhcmFt
ZXRlck5vZGUoY29uc3QgSWRlbnRpZmllciAmaSkgOiBpZChpKSwgbmV4dCh0aGlzKSB7IH0KLSAg
ICBQYXJhbWV0ZXJOb2RlKFBhcmFtZXRlck5vZGUgKmxpc3QsIGNvbnN0IElkZW50aWZpZXIgJmkp
Ci0gICAgICA6IGlkKGkpLCBuZXh0KGxpc3QtPm5leHQpIHsgbGlzdC0+bmV4dCA9IHRoaXM7IH0K
KyAgICBQYXJhbWV0ZXJOb2RlKFBhcmFtZXRlck5vZGUgKm5leHQsIGNvbnN0IElkZW50aWZpZXIg
JmkpCisgICAgICA6IGlkKGkpLCBuZXh0KG5leHQtPm5leHQpIHsgbmV4dC0+bmV4dCA9IHRoaXM7
IH0KICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIElkZW50aWZp
ZXIgaWRlbnQoKSB7IHJldHVybiBpZDsgfQogICAgIFBhcmFtZXRlck5vZGUgKm5leHRQYXJhbSgp
IHsgcmV0dXJuIG5leHQuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtICZzKSBjb25zdDsKKyAgICBQYXJhbWV0ZXJOb2RlICpyZWxlYXNlTmV4dCgpIHsgcmV0
dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEZ1bmNE
ZWNsTm9kZTsKICAgICBmcmllbmQgY2xhc3MgRnVuY0V4cHJOb2RlOwogICAgIElkZW50aWZpZXIg
aWQ7Ci0gICAgUmVmUHRyPFBhcmFtZXRlck5vZGU+IG5leHQ7CisgICAgTGlzdFJlZlB0cjxQYXJh
bWV0ZXJOb2RlPiBuZXh0OwogICB9OwogCiAgIC8vIGluaGVyaXRlZCBieSBQcm9ncmFtTm9kZQpA
QCAtMTA0NCw3ICsxMDUyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEZ1bmNFeHByTm9k
ZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIEZ1bmNFeHByTm9kZShjb25zdCBJZGVu
dGlmaWVyICZpLCBGdW5jdGlvbkJvZHlOb2RlICpiLCBQYXJhbWV0ZXJOb2RlICpwID0gMCkKLSAg
ICAgIDogaWRlbnQoaSksIHBhcmFtKHAgPyBwLT5uZXh0IDogMCksIGJvZHkoYikgeyBpZiAocCkg
cC0+bmV4dCA9IDA7IH0KKyAgICAgIDogaWRlbnQoaSksIHBhcmFtKHAgPyBwLT5uZXh0LmdldCgp
IDogMCksIGJvZHkoYikgeyBpZiAocCkgcC0+bmV4dCA9IDA7IH0KICAgICB2aXJ0dWFsIEpTVmFs
dWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtICYpIGNvbnN0OwogICBwcml2YXRlOgpAQCAtMTA2MCw3ICsxMDY4LDcgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgRnVuY0RlY2xOb2RlKGNvbnN0IElkZW50aWZpZXIgJmksIEZ1bmN0
aW9uQm9keU5vZGUgKmIpCiAgICAgICA6IGlkZW50KGkpLCBwYXJhbSgwKSwgYm9keShiKSB7IH0K
ICAgICBGdW5jRGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciAmaSwgUGFyYW1ldGVyTm9kZSAqcCwg
RnVuY3Rpb25Cb2R5Tm9kZSAqYikKLSAgICAgIDogaWRlbnQoaSksIHBhcmFtKHAtPm5leHQpLCBi
b2R5KGIpIHsgcC0+bmV4dCA9IDA7IH0KKyAgICAgIDogaWRlbnQoaSksIHBhcmFtKHAtPm5leHQu
Z2V0KCkpLCBib2R5KGIpIHsgcC0+bmV4dCA9IDA7IH0KICAgICB2aXJ0dWFsIENvbXBsZXRpb24g
ZXhlY3V0ZShFeGVjU3RhdGUgKik7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NGdW5jRGVjbChF
eGVjU3RhdGUgKik7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmKSBj
b25zdDsKQEAgLTEwODEsMTAgKzEwODksMTEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgdm9pZCBw
cm9jZXNzRnVuY0RlY2woRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vz
c1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSAmcykgY29uc3Q7CisgICAgU291cmNlRWxlbWVudHNOb2RlICpyZWxlYXNlTmV4
dCgpIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEJsb2NrTm9kZTsKLSAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gZWxlbWVudDsgLy8gJ3Ro
aXMnIGVsZW1lbnQKLSAgICBSZWZQdHI8U291cmNlRWxlbWVudHNOb2RlPiBlbGVtZW50czsgLy8g
cG9pbnRlciB0byBuZXh0CisgICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IG5vZGU7CisgICAgTGlz
dFJlZlB0cjxTb3VyY2VFbGVtZW50c05vZGU+IG5leHQ7CiAgIH07CiAKICAgY2xhc3MgUHJvZ3Jh
bU5vZGUgOiBwdWJsaWMgRnVuY3Rpb25Cb2R5Tm9kZSB7CkluZGV4OiBranMvbm9kZXMyc3RyaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlwdENvcmUva2pzL25v
ZGVzMnN0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtcCAtdSAtcjEu
MjMga2pzL25vZGVzMnN0cmluZy5jcHAKLS0tIGtqcy9ub2RlczJzdHJpbmcuY3BwCTEzIERlYyAy
MDA1IDIxOjI0OjUyIC0wMDAwCTEuMjMKKysrIGtqcy9ub2RlczJzdHJpbmcuY3BwCTI0IERlYyAy
MDA1IDA4OjA5OjE5IC0wMDAwCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBHcm91cE5vZGU6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSAmcwogCiB2b2lkIEVsZW1lbnROb2RlOjpzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0gJnMpIGNvbnN0CiB7Ci0gIGZvciAoY29uc3QgRWxlbWVudE5vZGUgKm4gPSB0aGlz
OyBuOyBuID0gbi0+bGlzdC5nZXQoKSkgeworICBmb3IgKGNvbnN0IEVsZW1lbnROb2RlICpuID0g
dGhpczsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG4t
PmVsaXNpb247IGkrKykKICAgICAgIHMgPDwgIiwiOwogICAgIHMgPDwgbi0+bm9kZTsKQEAgLTE1
OSw3ICsxNTksNyBAQCB2b2lkIFByb3BlcnR5TGlzdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0CiB7
CiAgIHMgPDwgbm9kZTsKICAgCi0gIGZvciAoY29uc3QgUHJvcGVydHlMaXN0Tm9kZSAqbiA9IGxp
c3QuZ2V0KCk7IG47IG4gPSBuLT5saXN0LmdldCgpKQorICBmb3IgKGNvbnN0IFByb3BlcnR5TGlz
dE5vZGUgKm4gPSBuZXh0LmdldCgpOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKICAgICBzIDw8ICIs
ICIgPDwgbi0+bm9kZTsKIH0KIApAQCAtMjA0LDEzICsyMDQsMTMgQEAgdm9pZCBEb3RBY2Nlc3Nv
ck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cgogdm9pZCBBcmd1bWVudExpc3ROb2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7CiAgIHMgPDwgZXhwcjsKLSAgZm9yIChBcmd1bWVu
dExpc3ROb2RlICpuID0gbGlzdC5nZXQoKTsgbjsgbiA9IG4tPmxpc3QuZ2V0KCkpCisgIGZvciAo
QXJndW1lbnRMaXN0Tm9kZSAqbiA9IG5leHQuZ2V0KCk7IG47IG4gPSBuLT5uZXh0LmdldCgpKQog
ICAgIHMgPDwgIiwgIiA8PCBuLT5leHByOwogfQogCiB2b2lkIEFyZ3VtZW50c05vZGU6OnN0cmVh
bVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QKIHsKLSAgcyA8PCAiKCIgPDwgbGlzdCA8PCAiKSI7
CisgIHMgPDwgIigiIDw8IGxpc3QuZ2V0KCkgPDwgIikiOwogfQogCiB2b2lkIE5ld0V4cHJOb2Rl
OjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CkBAIC01MjUsNyArNTI1LDcgQEAgdm9p
ZCBDb21tYU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcwogCiB2b2lkIFN0YXRMaXN0Tm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewotICBmb3IgKGNvbnN0IFN0YXRM
aXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5saXN0LmdldCgpKQorICBmb3IgKGNvbnN0IFN0
YXRMaXN0Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0LmdldCgpKQogICAgIHMgPDwgbi0+
c3RhdGVtZW50OwogfQogCkBAIC01NDIsMTkgKzU0MiwxOSBAQCB2b2lkIFZhckRlY2xOb2RlOjpz
dHJlYW1UbyhTb3VyY2VTdHJlYW0gCiB2b2lkIFZhckRlY2xMaXN0Tm9kZTo6c3RyZWFtVG8oU291
cmNlU3RyZWFtICZzKSBjb25zdAogewogICBzIDw8IHZhcjsKLSAgZm9yIChWYXJEZWNsTGlzdE5v
ZGUgKm4gPSBsaXN0LmdldCgpOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkKKyAgZm9yIChWYXJEZWNs
TGlzdE5vZGUgKm4gPSBuZXh0LmdldCgpOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKICAgICBzIDw8
ICIsICIgPDwgbi0+dmFyOwogfQogCiB2b2lkIFZhclN0YXRlbWVudE5vZGU6OnN0cmVhbVRvKFNv
dXJjZVN0cmVhbSAmcykgY29uc3QKIHsKLSAgcyA8PCBTb3VyY2VTdHJlYW06OkVuZGwgPDwgInZh
ciAiIDw8IGxpc3QgPDwgIjsiOworICBzIDw8IFNvdXJjZVN0cmVhbTo6RW5kbCA8PCAidmFyICIg
PDwgbmV4dC5nZXQoKSA8PCAiOyI7CiB9CiAKIHZvaWQgQmxvY2tOb2RlOjpzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0gJnMpIGNvbnN0CiB7CiAgIHMgPDwgU291cmNlU3RyZWFtOjpFbmRsIDw8ICJ7IiA8
PCBTb3VyY2VTdHJlYW06OkluZGVudAotICAgIDw8IHNvdXJjZSA8PCBTb3VyY2VTdHJlYW06OlVu
aW5kZW50IDw8IFNvdXJjZVN0cmVhbTo6RW5kbCA8PCAifSI7CisgICAgPDwgc291cmNlLmdldCgp
IDw8IFNvdXJjZVN0cmVhbTo6VW5pbmRlbnQgPDwgU291cmNlU3RyZWFtOjpFbmRsIDw8ICJ9IjsK
IH0KIAogdm9pZCBFbXB0eVN0YXRlbWVudE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykg
Y29uc3QKQEAgLTY1MCw4ICs2NTAsOCBAQCB2b2lkIENhc2VDbGF1c2VOb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlCiAgIGVsc2UKICAgICBzIDw8ICJkZWZhdWx0IjsKICAgcyA8PCAiOiIgPDwgU291
cmNlU3RyZWFtOjpJbmRlbnQ7Ci0gIGlmIChsaXN0KQotICAgIHMgPDwgbGlzdDsKKyAgaWYgKG5l
eHQpCisgICAgcyA8PCBuZXh0LmdldCgpOwogICBzIDw8IFNvdXJjZVN0cmVhbTo6VW5pbmRlbnQ7
CiB9CiAKQEAgLTcxNyw2ICs3MTcsNiBAQCB2b2lkIEZ1bmNFeHByTm9kZTo6c3RyZWFtVG8oU291
cmNlU3RyZWFtCiAKIHZvaWQgU291cmNlRWxlbWVudHNOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0gJnMpIGNvbnN0CiB7Ci0gIGZvciAoY29uc3QgU291cmNlRWxlbWVudHNOb2RlICpuID0gdGhp
czsgbjsgbiA9IG4tPmVsZW1lbnRzLmdldCgpKQotICAgIHMgPDwgbi0+ZWxlbWVudDsKKyAgZm9y
IChjb25zdCBTb3VyY2VFbGVtZW50c05vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQo
KSkKKyAgICBzIDw8IG4tPm5vZGU7CiB9CkluZGV4OiBranMvdGVzdGtqcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy90ZXN0a2pzLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC1wIC11IC1yMS4yMSBranMvdGVzdGtqcy5jcHAK
LS0tIGtqcy90ZXN0a2pzLmNwcAkyMiBEZWMgMjAwNSAwMDo1NTozNCAtMDAwMAkxLjIxCisrKyBr
anMvdGVzdGtqcy5jcHAJMjQgRGVjIDIwMDUgMDg6MDk6MTkgLTAwMDAKQEAgLTI2LDYgKzI2LDgg
QEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUg
Im5vZGVzLmgiCisjaW5jbHVkZSAiTGlzdFJlZlB0ci5oIgogI2luY2x1ZGUgIkhhc2hUcmFpdHMu
aCIKICNpbmNsdWRlICJ2YWx1ZS5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgpJbmRleDoga3htbGNv
cmUvTGlzdFJlZlB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4bWxjb3JlL0xpc3RSZWZQdHIu
aApkaWZmIC1OIGt4bWxjb3JlL0xpc3RSZWZQdHIuaAotLS0ga3htbGNvcmUvTGlzdFJlZlB0ci5o
CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGt4bWxjb3JlL0xpc3RSZWZQdHIuaAkyNCBE
ZWMgMjAwNSAwODowOToyMCAtMDAwMApAQCAtMCwwICsxLDIxMiBAQAorLy8gLSotIG1vZGU6IGMr
KzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBLREUgbGlicmFyaWVzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdGVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgS1hNTENPUkVfTElTVF9SRUZfUFRSX0gKKyNkZWZp
bmUgS1hNTENPUkVfTElTVF9SRUZfUFRSX0gKKworI2luY2x1ZGUgPGt4bWxjb3JlL1JlZlB0ci5o
PgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIEtYTUxDb3JlIHsKKyAgICAKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cl9SZWY7CisgICAgCisgICAgLy8gU3BlY2lhbGl6
ZWQgdmVyc2lvbiBvZiBSZWZQdHIgZGVzZ2luZWQgZm9yIHVzZSBpbiBzaW5nbHktbGlua2VkIGxp
c3RzLiBBdm9pZHMgc2l6ZS1OIHN0YWNrIHVzZSBjYXVzZWQgYnkgUmVmUHRyJ3MgZGVzdHJ1Y3Rv
ci4KKyAgICAvLyAoSWYgUmVmUHRyPFQ+Lm1fcHRyIGhhcyBhIGRhdGEgbWVtYmVyIG9mIHR5cGUg
UmVmUHRyPFQ+LCB0aGVuIGRlcmVmLWluZyBhbmQgZGVsZXRpbmcgbV9wdHIgd2lsbCBpbnZva2Ug
eWV0IGFub3RoZXIgUmVmUHRyPFQ+CisgICAgLy8gZGVzdHJ1Y3RvciwgY3JlYXRpbmcgYSBjaGFp
biBvZiBmdW5jdGlvbiBjYWxscyB0aGF0IGVuZHMgd2l0aCB0aGUgbGFzdCBSZWZQdHI8VD4gaW4g
dGhlIGxpc3QuKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBMaXN0UmVmUHRyCisg
ICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGlzdFJlZlB0cigpIDogbV9wdHIoMCkge30KKyAg
ICAgICAgTGlzdFJlZlB0cihUICpwdHIpIDogbV9wdHIocHRyKSB7IGlmIChwdHIpIHB0ci0+cmVm
KCk7IH0KKyAgICAgICAgTGlzdFJlZlB0cihjb25zdCBMaXN0UmVmUHRyJiBvKSA6IG1fcHRyKG8u
bV9wdHIpIHsgaWYgKFQgKnB0ciA9IG1fcHRyKSBwdHItPnJlZigpOyB9CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+IExpc3RSZWZQdHIoUGFzc1JlZlB0cjxVPiYpOworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gTGlzdFJlZlB0cihQYXNzUmVmUHRyX1JlZjxVPik7CisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBMaXN0UmVmUHRyKGNvbnN0IExpc3RSZWZQdHI8VT4m
IG8pIDogbV9wdHIoby5nZXQoKSkgeyBpZiAoVCAqcHRyID0gbV9wdHIpIHB0ci0+cmVmKCk7IH0K
KworICAgICAgICB+TGlzdFJlZlB0cigpIHsKKyAgICAgICAgICAgIFBhc3NSZWZQdHI8VD4gcmVh
cGVyID0gUGFzc1JlZlB0cjxUPjo6YWRvcHQobV9wdHIpOworICAgICAgICAgICAgd2hpbGUgKHJl
YXBlciAmJiByZWFwZXItPnJlZmNvdW50KCkgPT0gMSkgLy8gb25seSBuZWVkIHRvIHByb3RlY3Qg
cmVhcGVyLT5uZXh0IGlmIGRlcmVmLWluZyByZWFwZXIubV9wdHIgd2lsbCBkZXN0cm95IGl0Cisg
ICAgICAgICAgICAgICAgcmVhcGVyID0gUGFzc1JlZlB0cjxUPjo6YWRvcHQocmVhcGVyLT5yZWxl
YXNlTmV4dCgpKTsgLy8gaW1wbGljaXRseSBkZXJlZnMgcmVhcGVyCisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFQgKmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisKKyAgICAgICAg
VCAqcmVsZWFzZSgpIHsgVCAqdG1wID0gdGhpcy0+bV9wdHI7IHRoaXMtPm1fcHRyID0gMDsgcmV0
dXJuIHRtcDsgfQorICAgICAgICAKKyAgICAgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKm1fcHRyOyB9CisgICAgICAgIFQgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0
cjsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
bV9wdHI7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBh
bGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdl
ciB0eXBlcy4KKyAgICAgICAgdHlwZWRlZiBUICogKExpc3RSZWZQdHI6OipVbnNwZWNpZmllZEJv
b2xUeXBlKSgpIGNvbnN0OworICAgICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9wdHIgPyAmTGlzdFJlZlB0cjo6Z2V0IDogMDsgfQorICAgICAgICAK
KyAgICAgICAgTGlzdFJlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IExpc3RSZWZQdHImKTsKKyAgICAg
ICAgTGlzdFJlZlB0ciYgb3BlcmF0b3I9KFQgKik7CisgICAgICAgIExpc3RSZWZQdHImIG9wZXJh
dG9yPShQYXNzUmVmUHRyPFQ+Jik7CisgICAgICAgIExpc3RSZWZQdHImIG9wZXJhdG9yPShQYXNz
UmVmUHRyX1JlZjxUPik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBMaXN0UmVmUHRy
JiBvcGVyYXRvcj0oY29uc3QgTGlzdFJlZlB0cjxVPiYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4gTGlzdFJlZlB0ciYgb3BlcmF0b3I9KFBhc3NSZWZQdHI8VT4mKTsKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+IExpc3RSZWZQdHImIG9wZXJhdG9yPShQYXNzUmVmUHRyX1Jl
ZjxVPik7CisgICAgICAgIAorICAgICAgICB2b2lkIHN3YXAoTGlzdFJlZlB0ciYpOworICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBUICptX3B0cjsKKyAgICB9OworICAgIAorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5lIExpc3RSZWZQ
dHI8VD46Okxpc3RSZWZQdHIoUGFzc1JlZlB0cl9SZWY8VT4gcmVmKQorICAgICAgICA6IG1fcHRy
KHJlZi5tX3B0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5lIExpc3RSZWZQdHI8VD46Okxpc3RSZWZQdHIo
UGFzc1JlZlB0cjxVPiYgbykKKyAgICAgICAgOiBtX3B0cihvLnJlbGVhc2UoKSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBMaXN0UmVmUHRyPFQ+JiBMaXN0
UmVmUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgTGlzdFJlZlB0cjxUPiYgbykKKyAgICB7CisgICAg
ICAgIFQgKm9wdHIgPSBvLm1fcHRyOworICAgICAgICBpZiAob3B0cikKKyAgICAgICAgICAgIG9w
dHItPnJlZigpOworICAgICAgICBpZiAobV9wdHIpCisgICAgICAgICAgICBtX3B0ci0+ZGVyZWYo
KTsKKyAgICAgICAgbV9wdHIgPSBvcHRyOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gTGlz
dFJlZlB0cjxUPiYgTGlzdFJlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IExpc3RSZWZQdHI8VT4m
IG8pCisgICAgeworICAgICAgICBUICpvcHRyID0gby5tX3B0cjsKKyAgICAgICAgaWYgKG9wdHIp
CisgICAgICAgICAgICBvcHRyLT5yZWYoKTsKKyAgICAgICAgaWYgKG1fcHRyKQorICAgICAgICAg
ICAgbV9wdHItPmRlcmVmKCk7CisgICAgICAgIG1fcHRyID0gb3B0cjsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIExp
c3RSZWZQdHI8VD4mIExpc3RSZWZQdHI8VD46Om9wZXJhdG9yPShUKiBvcHRyKQorICAgIHsKKyAg
ICAgICAgaWYgKG9wdHIpCisgICAgICAgICAgICBvcHRyLT5yZWYoKTsKKyAgICAgICAgaWYgKG1f
cHRyKQorICAgICAgICAgICAgbV9wdHItPmRlcmVmKCk7CisgICAgICAgIG1fcHRyID0gb3B0cjsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGlubGluZSBMaXN0UmVmUHRyPFQ+JiBMaXN0UmVm
UHRyPFQ+OjpvcGVyYXRvcj0oUGFzc1JlZlB0cl9SZWY8VT4gcmVmKQorICAgIHsKKyAgICAgICAg
aWYgKG1fcHRyKQorICAgICAgICAgICAgbV9wdHItPmRlcmVmKCk7CisgICAgICAgIG1fcHRyID0g
cmVmLm1fcHRyOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgTGlzdFJlZlB0cjxUPiYgTGlzdFJlZlB0cjxUPjo6b3Bl
cmF0b3I9KFBhc3NSZWZQdHI8VD4mIG8pCisgICAgeworICAgICAgICAvLyBGSVhNRTogU2hvdWxk
bid0IHlvdSBjYWxsIG8ucmVsZWFzZSgpIGJlZm9yZSBkZXJlZiwgaW4gY2FzZSBkZXJlZiBraWxs
cyBvPworICAgICAgICBpZiAobV9wdHIpCisgICAgICAgICAgICBtX3B0ci0+ZGVyZWYoKTsKKyAg
ICAgICAgbV9wdHIgPSBvLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIExpc3RSZWZQdHI8VD4mIExp
c3RSZWZQdHI8VD46Om9wZXJhdG9yPShQYXNzUmVmUHRyX1JlZjxUPiByZWYpCisgICAgeworICAg
ICAgICBpZiAobV9wdHIpCisgICAgICAgICAgICBtX3B0ci0+ZGVyZWYoKTsKKyAgICAgICAgbV9w
dHIgPSByZWYubV9wdHI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBpbmxpbmUgTGlzdFJl
ZlB0cjxUPiYgTGlzdFJlZlB0cjxUPjo6b3BlcmF0b3I9KFBhc3NSZWZQdHI8VT4mIG8pCisgICAg
eworICAgICAgICBpZiAobV9wdHIpCisgICAgICAgICAgICBtX3B0ci0+ZGVyZWYoKTsKKyAgICAg
ICAgbV9wdHIgPSBvLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQgTGlzdFJlZlB0cjxUPjo6c3dh
cChMaXN0UmVmUHRyPFQ+JiBvKQorICAgIHsKKyAgICAgICAgc3RkOjpzd2FwKG1fcHRyLCBvLm1f
cHRyKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkIHN3
YXAoTGlzdFJlZlB0cjxUPiYgYSwgTGlzdFJlZlB0cjxUPiYgYikKKyAgICB7CisgICAgICAgIGEu
c3dhcChiKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGlzdFJlZlB0cjxUPiYgYSwgY29uc3Qg
TGlzdFJlZlB0cjxVPiYgYikKKyAgICB7IAorICAgICAgICByZXR1cm4gYS5nZXQoKSA9PSBiLmdl
dCgpOyAKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTGlzdFJlZlB0cjxUPiYgYSwgVSogYikKKyAg
ICB7IAorICAgICAgICByZXR1cm4gYS5nZXQoKSA9PSBiOyAKKyAgICB9CisgICAgCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oVCog
YSwgY29uc3QgTGlzdFJlZlB0cjxVPiYgYikgCisgICAgeworICAgICAgICByZXR1cm4gYSA9PSBi
LmdldCgpOyAKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGlzdFJlZlB0cjxUPiYgYSwgY29uc3Qg
TGlzdFJlZlB0cjxVPiYgYikKKyAgICB7IAorICAgICAgICByZXR1cm4gYS5nZXQoKSAhPSBiLmdl
dCgpOyAKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgTGlzdFJlZlB0cjxUPiYgYSwgVSogYikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhLmdldCgpICE9IGI7IAorICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShUKiBh
LCBjb25zdCBMaXN0UmVmUHRyPFU+JiBiKQorICAgIHsgCisgICAgICAgIHJldHVybiBhICE9IGIu
Z2V0KCk7IAorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIExpc3RSZWZQdHI8VD4gc3RhdGljX3BvaW50ZXJfY2FzdChjb25zdCBMaXN0UmVm
UHRyPFU+JiBwKQorICAgIHsgCisgICAgICAgIHJldHVybiBMaXN0UmVmUHRyPFQ+KHN0YXRpY19j
YXN0PFQgKj4ocC5nZXQoKSkpOyAKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBMaXN0UmVmUHRyPFQ+IGNvbnN0X3BvaW50ZXJfY2FzdChj
b25zdCBMaXN0UmVmUHRyPFU+JiBwKQorICAgIHsgCisgICAgICAgIHJldHVybiBMaXN0UmVmUHRy
PFQ+KGNvbnN0X2Nhc3Q8VCAqPihwLmdldCgpKSk7IAorICAgIH0KKworfSAvLyBuYW1lc3BhY2Ug
S1hNTENvcmUKKwordXNpbmcgS1hNTENvcmU6Okxpc3RSZWZQdHI7Cit1c2luZyBLWE1MQ29yZTo6
c3RhdGljX3BvaW50ZXJfY2FzdDsKK3VzaW5nIEtYTUxDb3JlOjpjb25zdF9wb2ludGVyX2Nhc3Q7
CisKKyNlbmRpZiAvLyBLWE1MQ09SRV9MSVNUX1JFRl9QVFJfSAo=
</data>
<flag name="review"
          id="1090"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5292</attachid>
            <date>2005-12-26 17:11:01 -0800</date>
            <delta_ts>2005-12-26 17:13:21 -0800</delta_ts>
            <desc>Second cut at fix</desc>
            <filename>patch-listrefptr.txt</filename>
            <type>text/plain</type>
            <size>31868</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkyOQpkaWZmIC1wIC11IC1y
MS45MjkgQ2hhbmdlTG9nCi0tLSBDaGFuZ2VMb2cJMjUgRGVjIDIwMDUgMDk6MjI6MzIgLTAwMDAJ
MS45MjkKKysrIENoYW5nZUxvZwkyNyBEZWMgMjAwNSAwMTowODo1MyAtMDAwMApAQCAtMSwzICsx
LDg2IEBACisyMDA1LTEyLTI2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBGaXhlZCA8
cmRhcjovL3Byb2JsZW0vNDM2NDcwNT4gcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzIGNyYXNoZXMg
aW4gCisgICAgICAgIEtKUzo6QmxvY2tOb2RlOjpkZXJlZiAKKyAgICAgICAgQUtBIAorICAgICAg
ICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzMKKyAg
ICAgICAgUmVwcm9kdWNpYmxlIHN0YWNrLW92ZXJmbG93IGNyYXNoIGluIH5SZWZQdHI8VD4gZHVl
IHRvIFJlZlB0cjxUPiB1c2UgaW4gCisgICAgICAgIGxpbmtlZCBsaXN0cworCisgICAgICAgIFRo
aXMgcGF0Y2ggZG9lcyBmb3VyIHRoaW5nczogCisgICAgICAgICgxKSBTdGFuZGFyZGl6ZXMgYWxs
IG91ciBsaW5rZWQgbGlzdCBub2RlcyB0byB1c2UgIm5leHQiIGFzIHRoZWlyIG5leHQgCisgICAg
ICAgIHBvaW50ZXJzLiAKKyAgICAgICAgKDIpIENyZWF0ZXMgdGhlIExpc3RSZWZQdHI8VD4gY2xh
c3MsIGEgc3ViY2xhc3Mgb2YgUmVmUHRyPFQ+IHNwZWNpYWxpemVkCisgICAgICAgIHRvIGl0ZXJh
dGl2ZWx5IGRlcmVmICJuZXh0IiBwb2ludGVycy4KKyAgICAgICAgKDMpIFN0YW5kYXJkaXplcyBv
dXIgbGlua2VkIGxpc3Qgbm9kZXMgdG8gdXNlIExpc3RSZWZQdHI8VD4gYW5kIAorICAgICAgICBp
bXBsZW1lbnQgdGhlIHJlbGVhc2VOZXh0KCkgZnVuY3Rpb24gdXNlZCBieSB+TGlzdFJlZlB0cjxU
PigpLgorICAgICAgICAoNCkgQWRkcyB0byBSZWZQdHI8VD4gdGhlIHJlbGVhc2UoKSBtZXRob2Qg
dXNlZCBieSByZWxlYXNlTmV4dCgpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAo
RWxlbWVudE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFByb3BlcnR5TGlzdE5vZGU6OmV2YWx1
YXRlKToKKyAgICAgICAgKEFyZ3VtZW50TGlzdE5vZGU6OmV2YWx1YXRlTGlzdCk6CisgICAgICAg
IChTdGF0TGlzdE5vZGU6OlN0YXRMaXN0Tm9kZSk6CisgICAgICAgIChTdGF0TGlzdE5vZGU6OmV4
ZWN1dGUpOgorICAgICAgICAoU3RhdExpc3ROb2RlOjpwcm9jZXNzVmFyRGVjbHMpOgorICAgICAg
ICAoVmFyRGVjbExpc3ROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChWYXJEZWNsTGlzdE5vZGU6
OnByb2Nlc3NWYXJEZWNscyk6CisgICAgICAgIChWYXJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKToK
KyAgICAgICAgKFZhclN0YXRlbWVudE5vZGU6OnByb2Nlc3NWYXJEZWNscyk6CisgICAgICAgIChC
bG9ja05vZGU6OkJsb2NrTm9kZSk6CisgICAgICAgIChDYXNlQ2xhdXNlTm9kZTo6ZXZhbFN0YXRl
bWVudHMpOgorICAgICAgICAoQ2FzZUNsYXVzZU5vZGU6OnByb2Nlc3NWYXJEZWNscyk6CisgICAg
ICAgIChDbGF1c2VMaXN0Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKToKKyAgICAgICAgKENhc2VCbG9j
a05vZGU6OkNhc2VCbG9ja05vZGUpOgorICAgICAgICAoQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2Nr
KToKKyAgICAgICAgKFNvdXJjZUVsZW1lbnRzTm9kZTo6U291cmNlRWxlbWVudHNOb2RlKToKKyAg
ICAgICAgKFNvdXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChTb3VyY2VFbGVt
ZW50c05vZGU6OnByb2Nlc3NGdW5jRGVjbCk6CisgICAgICAgIChTb3VyY2VFbGVtZW50c05vZGU6
OnByb2Nlc3NWYXJEZWNscyk6CisgICAgICAgICoga2pzL25vZGVzLmg6CisgICAgICAgIChLSlM6
OkVsZW1lbnROb2RlOjpFbGVtZW50Tm9kZSk6CisgICAgICAgIChLSlM6OkVsZW1lbnROb2RlOjpy
ZWxlYXNlTmV4dCk6CisgICAgICAgIChLSlM6OkFycmF5Tm9kZTo6QXJyYXlOb2RlKToKKyAgICAg
ICAgKEtKUzo6UHJvcGVydHlMaXN0Tm9kZTo6UHJvcGVydHlMaXN0Tm9kZSk6CisgICAgICAgIChL
SlM6OlByb3BlcnR5TGlzdE5vZGU6OnJlbGVhc2VOZXh0KToKKyAgICAgICAgKEtKUzo6T2JqZWN0
TGl0ZXJhbE5vZGU6Ok9iamVjdExpdGVyYWxOb2RlKToKKyAgICAgICAgKEtKUzo6QXJndW1lbnRM
aXN0Tm9kZTo6QXJndW1lbnRMaXN0Tm9kZSk6CisgICAgICAgIChLSlM6OkFyZ3VtZW50TGlzdE5v
ZGU6OnJlbGVhc2VOZXh0KToKKyAgICAgICAgKEtKUzo6QXJndW1lbnRzTm9kZTo6QXJndW1lbnRz
Tm9kZSk6CisgICAgICAgIChLSlM6OlN0YXRMaXN0Tm9kZTo6cmVsZWFzZU5leHQpOgorICAgICAg
ICAoS0pTOjpWYXJEZWNsTGlzdE5vZGU6OlZhckRlY2xMaXN0Tm9kZSk6CisgICAgICAgIChLSlM6
OlZhckRlY2xMaXN0Tm9kZTo6cmVsZWFzZU5leHQpOgorICAgICAgICAoS0pTOjpWYXJTdGF0ZW1l
bnROb2RlOjpWYXJTdGF0ZW1lbnROb2RlKToKKyAgICAgICAgKEtKUzo6Rm9yTm9kZTo6Rm9yTm9k
ZSk6CisgICAgICAgIChLSlM6OkNhc2VDbGF1c2VOb2RlOjpDYXNlQ2xhdXNlTm9kZSk6CisgICAg
ICAgIChLSlM6OkNsYXVzZUxpc3ROb2RlOjpDbGF1c2VMaXN0Tm9kZSk6CisgICAgICAgIChLSlM6
OkNsYXVzZUxpc3ROb2RlOjpnZXRDbGF1c2UpOgorICAgICAgICAoS0pTOjpDbGF1c2VMaXN0Tm9k
ZTo6Z2V0TmV4dCk6CisgICAgICAgIChLSlM6OkNsYXVzZUxpc3ROb2RlOjpyZWxlYXNlTmV4dCk6
CisgICAgICAgIChLSlM6OlBhcmFtZXRlck5vZGU6OlBhcmFtZXRlck5vZGUpOgorICAgICAgICAo
S0pTOjpQYXJhbWV0ZXJOb2RlOjpyZWxlYXNlTmV4dCk6CisgICAgICAgIChLSlM6OlNvdXJjZUVs
ZW1lbnRzTm9kZTo6cmVsZWFzZU5leHQpOgorICAgICAgICAqIGtqcy9ub2RlczJzdHJpbmcuY3Bw
OgorICAgICAgICAoRWxlbWVudE5vZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKFByb3BlcnR5TGlz
dE5vZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKEFyZ3VtZW50TGlzdE5vZGU6OnN0cmVhbVRvKToK
KyAgICAgICAgKFN0YXRMaXN0Tm9kZTo6c3RyZWFtVG8pOgorICAgICAgICAoVmFyRGVjbExpc3RO
b2RlOjpzdHJlYW1Ubyk6CisgICAgICAgIChWYXJTdGF0ZW1lbnROb2RlOjpzdHJlYW1Ubyk6Cisg
ICAgICAgIChDYXNlQ2xhdXNlTm9kZTo6c3RyZWFtVG8pOgorICAgICAgICAoQ2xhdXNlTGlzdE5v
ZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKENhc2VCbG9ja05vZGU6OnN0cmVhbVRvKToKKyAgICAg
ICAgKFNvdXJjZUVsZW1lbnRzTm9kZTo6c3RyZWFtVG8pOgorICAgICAgICAqIGt4bWxjb3JlL0xp
c3RSZWZQdHIuaDogQWRkZWQuCisgICAgICAgIChLWE1MQ29yZTo6TGlzdFJlZlB0cjo6TGlzdFJl
ZlB0cik6CisgICAgICAgIChLWE1MQ29yZTo6TGlzdFJlZlB0cjo6fkxpc3RSZWZQdHIpOgorICAg
ICAgICAoS1hNTENvcmU6Okxpc3RSZWZQdHI6Om9wZXJhdG9yPSk6CisgICAgICAgICoga3htbGNv
cmUvUmVmUHRyLmg6CisgICAgICAgIChLWE1MQ29yZTo6UmVmUHRyOjpyZWxlYXNlKToKKwogMjAw
NS0xMi0yNCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgYW5kIERhdmUgSHlhdHQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXAgLXUgLXIxLjMxIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKLS0tIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJMjIgRGVjIDIwMDUgMDE6NDA6NTMgLTAwMDAJMS4zMQorKysgSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyNyBEZWMgMjAwNSAwMTowODo1MyAtMDAw
MApAQCAtMjUsNiArMjUsNyBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTE0OEExNjI3MDk1RDE2QkIw
MDY2NkQwRCAvKiBMaXN0UmVmUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDhBMTYyNjA5NUQxNkJCMDA2NjZEMEQgLyogTGlzdFJlZlB0ci5oICov
OyB9OwogCQk2NTJDMTA3RjA4REE3QjFFMDAyMDg4N0QgLyogcHJvdGVjdGVkX3JlZmVyZW5jZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQzEwN0Uw
OERBN0IxRTAwMjA4ODdEIC8qIHByb3RlY3RlZF9yZWZlcmVuY2UuaCAqLzsgfTsKIAkJNjU0MUJE
NzIwOEU4MEExNzAwMkNCRUU3IC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENkUwOEU4MEExNzAwMkNCRUU3IC8qIFRDUGFn
ZU1hcC5oICovOyB9OwogCQk2NTQxQkQ3MzA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENkYw
OEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCAqLzsgfTsKQEAgLTI3Nyw2ICsyNzgsNyBA
QAogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkxNDhBMTYyNjA5NUQxNkJCMDA2NjZEMEQgLyog
TGlzdFJlZlB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdFJlZlB0
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUUxMkQ4ODA2QTQ5QjBGMDBFOURG
ODQgLyogdGVzdGtqcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gMjsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSB0ZXN0a2pzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB9OwogCQk1MTE0RjQ3QjA1RTQ0MjYyMDBEMUJCQkQgLyogcnVudGltZV9yb290
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IHJ1bnRpbWVfcm9vdC5jcHA7IHBhdGggPSBiaW5kaW5ncy9ydW50aW1lX3Jvb3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCTUxMTRGNDdDMDVFNDQy
NjIwMEQxQkJCRCAvKiBydW50aW1lX3Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gcnVudGltZV9yb290Lmg7IHBhdGggPSBiaW5kaW5ncy9y
dW50aW1lX3Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpA
QCAtNjY1LDYgKzY2Nyw3IEBACiAJCQkJNjU3RUVCQkYwOTRFNDQ1RTAwOEM5QzdCIC8qIEhhc2hD
b3VudGVkU2V0LmggKi8sCiAJCQkJNjVDNjQ3QjMwOTNFRjhENjAwMjJDMzgwIC8qIFJlZlB0ci5o
ICovLAogCQkJCTY1ODBGNzk1MDk0MDcwNTYwMDgyQzIxOSAvKiBQYXNzUmVmUHRyLmggKi8sCisJ
CQkJMTQ4QTE2MjYwOTVEMTZCQjAwNjY2RDBEIC8qIExpc3RSZWZQdHIuaCAqLywKIAkJCQk2NUQ3
RDE5QjA4RjEwQjVCMDAxNUFCRDggLyogRmFzdE1hbGxvY0ludGVybmFsLmggKi8sCiAJCQkJNjU1
N0U4RjcwOEVBNUQ0RDAwNDlDREZDIC8qIEhhc2hNYXBQdHJTcGVjLmggKi8sCiAJCQkJNjVERkM5
MkEwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hGdW5jdGlvbnMuaCAqLywKQEAgLTg1Miw2ICs4NTUs
NyBAQAogCQkJCTY1ODBGNzk2MDk0MDcwNTYwMDgyQzIxOSAvKiBQYXNzUmVmUHRyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NTdFRUJDMDA5NEU0NDVFMDA4QzlDN0IgLyogSGFzaENvdW50ZWRTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzQUE0Rjc4MDk1NzI1MUYwMDg0QjNBNyAvKiBBbHdheXNJ
bmxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0OEExNjI3MDk1RDE2QkIwMDY2NkQwRCAvKiBM
aXN0UmVmUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtqcy9ub2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuOTEKZGlmZiAtcCAtdSAtcjEuOTEga2pzL25vZGVzLmNwcAotLS0g
a2pzL25vZGVzLmNwcAkxMyBEZWMgMjAwNSAyMToyNDo1MSAtMDAwMAkxLjkxCisrKyBranMvbm9k
ZXMuY3BwCTI3IERlYyAyMDA1IDAxOjA4OjUzIC0wMDAwCkBAIC0zMDksNyArMzA5LDcgQEAgSlNW
YWx1ZSAqRWxlbWVudE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZQogewogICBKU09iamVjdCAqYXJy
YXkgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCktPmNvbnN0cnVj
dChleGVjLCBMaXN0OjplbXB0eSgpKTsKICAgaW50IGxlbmd0aCA9IDA7Ci0gIGZvciAoRWxlbWVu
dE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkgeworICBmb3IgKEVsZW1lbnRO
b2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKICAgICBKU1ZhbHVlICp2YWwg
PSBuLT5ub2RlLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQog
ICAgIGxlbmd0aCArPSBuLT5lbGlzaW9uOwpAQCAtMzYwLDcgKzM2MCw3IEBAIEpTVmFsdWUgKlBy
b3BlcnR5TGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWMKIHsKICAgSlNPYmplY3QgKm9iaiA9IGV4ZWMt
PmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0KCktPmNvbnN0cnVjdChleGVjLCBM
aXN0OjplbXB0eSgpKTsKICAgCi0gIGZvciAoUHJvcGVydHlMaXN0Tm9kZSAqcCA9IHRoaXM7IHA7
IHAgPSBwLT5saXN0LmdldCgpKSB7CisgIGZvciAoUHJvcGVydHlMaXN0Tm9kZSAqcCA9IHRoaXM7
IHA7IHAgPSBwLT5uZXh0LmdldCgpKSB7CiAgICAgSlNWYWx1ZSAqbiA9IHAtPm5vZGUtPm5hbWUt
PmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgSlNWYWx1
ZSAqdiA9IHAtPm5vZGUtPmFzc2lnbi0+ZXZhbHVhdGUoZXhlYyk7CkBAIC00NDksNyArNDQ5LDcg
QEAgTGlzdCBBcmd1bWVudExpc3ROb2RlOjpldmFsdWF0ZUxpc3QoRXhlYwogewogICBMaXN0IGw7
CiAKLSAgZm9yIChBcmd1bWVudExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPmxpc3QuZ2V0
KCkpIHsKKyAgZm9yIChBcmd1bWVudExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5leHQu
Z2V0KCkpIHsKICAgICBKU1ZhbHVlICp2ID0gbi0+ZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OTElTVAogICAgIGwuYXBwZW5kKHYpOwpAQCAtMTQxNSwxNSArMTQx
NSwxNSBAQCBKU1ZhbHVlICpDb21tYU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhdExpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBTdGF0TGlzdE5vZGU6OlN0YXRMaXN0Tm9kZShTdGF0ZW1lbnRO
b2RlICpzKQotICA6IHN0YXRlbWVudChzKSwgbGlzdCh0aGlzKQorICA6IHN0YXRlbWVudChzKSwg
bmV4dCh0aGlzKQogewogICBzZXRMb2Mocy0+Zmlyc3RMaW5lKCksIHMtPmxhc3RMaW5lKCksIHMt
PnNvdXJjZUlkKCkpOwogfQogIAogU3RhdExpc3ROb2RlOjpTdGF0TGlzdE5vZGUoU3RhdExpc3RO
b2RlICpsLCBTdGF0ZW1lbnROb2RlICpzKQotICA6IHN0YXRlbWVudChzKSwgbGlzdChsLT5saXN0
KQorICA6IHN0YXRlbWVudChzKSwgbmV4dChsLT5uZXh0KQogewotICBsLT5saXN0ID0gdGhpczsK
KyAgbC0+bmV4dCA9IHRoaXM7CiAgIHNldExvYyhsLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUo
KSwgbC0+c291cmNlSWQoKSk7CiB9CiAKQEAgLTE0MzcsNyArMTQzNyw3IEBAIENvbXBsZXRpb24g
U3RhdExpc3ROb2RlOjpleGVjdXRlKEV4ZWNTdGEKICAgCiAgIEpTVmFsdWUgKnYgPSBjLnZhbHVl
KCk7CiAgIAotICBmb3IgKFN0YXRMaXN0Tm9kZSAqbiA9IGxpc3QuZ2V0KCk7IG47IG4gPSBuLT5s
aXN0LmdldCgpKSB7CisgIGZvciAoU3RhdExpc3ROb2RlICpuID0gbmV4dC5nZXQoKTsgbjsgbiA9
IG4tPm5leHQuZ2V0KCkpIHsKICAgICBDb21wbGV0aW9uIGMyID0gbi0+c3RhdGVtZW50LT5leGVj
dXRlKGV4ZWMpOwogICAgIEtKU19BQk9SVFBPSU5UCiAgICAgaWYgKGMyLmNvbXBsVHlwZSgpICE9
IE5vcm1hbCkKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIENvbXBsZXRpb24gU3RhdExpc3ROb2RlOjpl
eGVjdXRlKEV4ZWNTdGEKIAogdm9pZCBTdGF0TGlzdE5vZGU6OnByb2Nlc3NWYXJEZWNscyhFeGVj
U3RhdGUgKmV4ZWMpCiB7Ci0gIGZvciAoU3RhdExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4t
Pmxpc3QuZ2V0KCkpCisgIGZvciAoU3RhdExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5l
eHQuZ2V0KCkpCiAgICAgbi0+c3RhdGVtZW50LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CiB9CiAK
QEAgLTE1MjYsNyArMTUyNiw3IEBAIHZvaWQgVmFyRGVjbE5vZGU6OnByb2Nlc3NWYXJEZWNscyhF
eGVjU3QKIC8vIEVDTUEgMTIuMgogSlNWYWx1ZSAqVmFyRGVjbExpc3ROb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIGZvciAoVmFyRGVjbExpc3ROb2RlICpuID0gdGhpczsgbjsg
biA9IG4tPmxpc3QuZ2V0KCkpIHsKKyAgZm9yIChWYXJEZWNsTGlzdE5vZGUgKm4gPSB0aGlzOyBu
OyBuID0gbi0+bmV4dC5nZXQoKSkgewogICAgIG4tPnZhci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgfQpAQCAtMTUzNSw3ICsxNTM1LDcgQEAgSlNWYWx1
ZSAqVmFyRGVjbExpc3ROb2RlOjpldmFsdWF0ZShFeGVjUwogCiB2b2lkIFZhckRlY2xMaXN0Tm9k
ZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgZm9yIChWYXJEZWNsTGlz
dE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkKKyAgZm9yIChWYXJEZWNsTGlz
dE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKICAgICBuLT52YXItPnByb2Nl
c3NWYXJEZWNscyhleGVjKTsKIH0KIApAQCAtMTU0Niw3ICsxNTQ2LDcgQEAgQ29tcGxldGlvbiBW
YXJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZQogewogICBLSlNfQlJFQUtQT0lOVDsKIAotICAo
dm9pZCkgbGlzdC0+ZXZhbHVhdGUoZXhlYyk7CisgICh2b2lkKSBuZXh0LT5ldmFsdWF0ZShleGVj
KTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsKTsK
QEAgLTE1NTQsNyArMTU1NCw3IEBAIENvbXBsZXRpb24gVmFyU3RhdGVtZW50Tm9kZTo6ZXhlY3V0
ZShFeGUKIAogdm9pZCBWYXJTdGF0ZW1lbnROb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRl
ICpleGVjKQogewotICBsaXN0LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CisgIG5leHQtPnByb2Nl
c3NWYXJEZWNscyhleGVjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEJsb2NrTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1NjIs
OCArMTU2Miw4IEBAIHZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEUKIEJs
b2NrTm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqcykKIHsKICAgaWYgKHMpIHsK
LSAgICBzb3VyY2UgPSBzLT5lbGVtZW50czsKLSAgICBzLT5lbGVtZW50cyA9IDA7CisgICAgc291
cmNlID0gcy0+bmV4dDsKKyAgICBzLT5uZXh0ID0gMDsKICAgICBzZXRMb2Mocy0+Zmlyc3RMaW5l
KCksIHMtPmxhc3RMaW5lKCksIHMtPnNvdXJjZUlkKCkpOwogICB9IGVsc2UgewogICAgIHNvdXJj
ZSA9IDA7CkBAIC0xOTg0LDE2ICsxOTg0LDE2IEBAIEpTVmFsdWUgKkNhc2VDbGF1c2VOb2RlOjpl
dmFsdWF0ZShFeGVjU3QKIC8vIEVDTUEgMTIuMTEKIENvbXBsZXRpb24gQ2FzZUNsYXVzZU5vZGU6
OmV2YWxTdGF0ZW1lbnRzKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgaWYgKGxpc3QpCi0gICAgcmV0
dXJuIGxpc3QtPmV4ZWN1dGUoZXhlYyk7CisgIGlmIChuZXh0KQorICAgIHJldHVybiBuZXh0LT5l
eGVjdXRlKGV4ZWMpOwogICBlbHNlCiAgICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCBqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAogdm9pZCBDYXNlQ2xhdXNlTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4
ZWNTdGF0ZSAqZXhlYykKIHsKLSAgaWYgKGxpc3QpCi0gICAgbGlzdC0+cHJvY2Vzc1ZhckRlY2xz
KGV4ZWMpOworICBpZiAobmV4dCkKKyAgICBuZXh0LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDbGF1c2VMaXN0Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDA4LDkgKzIwMDgsOSBAQCBKU1ZhbHVl
ICpDbGF1c2VMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0CiAvLyBFQ01BIDEyLjExCiB2b2lkIENs
YXVzZUxpc3ROb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKQogewotICBmb3Ig
KENsYXVzZUxpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm54LmdldCgpKQotICAgIGlmIChu
LT5jbCkKLSAgICAgIG4tPmNsLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CisgIGZvciAoQ2xhdXNl
TGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKKyAgICBpZiAobi0+Y2xh
dXNlKQorICAgICAgbi0+Y2xhdXNlLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYXNlQmxvY2tOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDE5LDggKzIwMTksOCBAQCBDYXNlQmxvY2tOb2RlOjpD
YXNlQmxvY2tOb2RlKENsYXVzZUxpc3ROCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENs
YXVzZUxpc3ROb2RlICpsMikKIHsKICAgaWYgKGwxKSB7Ci0gICAgbGlzdDEgPSBsMS0+bng7Ci0g
ICAgbDEtPm54ID0gMDsKKyAgICBsaXN0MSA9IGwxLT5uZXh0OworICAgIGwxLT5uZXh0ID0gMDsK
ICAgfSBlbHNlIHsKICAgICBsaXN0MSA9IDA7CiAgIH0KQEAgLTIwMjgsOCArMjAyOCw4IEBAIENh
c2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE4KICAgZGVmID0gZDsKIAogICBp
ZiAobDIpIHsKLSAgICBsaXN0MiA9IGwyLT5ueDsKLSAgICBsMi0+bnggPSAwOworICAgIGxpc3Qy
ID0gbDItPm5leHQ7CisgICAgbDItPm5leHQgPSAwOwogICB9IGVsc2UgewogICAgIGxpc3QyID0g
MDsKICAgfQpAQCAtMjA1Miw4ICsyMDUyLDggQEAgQ29tcGxldGlvbiBDYXNlQmxvY2tOb2RlOjpl
dmFsQmxvY2soRXhlYwogICBDYXNlQ2xhdXNlTm9kZSAqY2xhdXNlOwogCiAgICAgd2hpbGUgKGEp
IHsKLSAgICAgIGNsYXVzZSA9IGEtPmNsYXVzZSgpOwotICAgICAgYSA9IGEtPm5leHQoKTsKKyAg
ICAgIGNsYXVzZSA9IGEtPmdldENsYXVzZSgpOworICAgICAgYSA9IGEtPmdldE5leHQoKTsKICAg
ICAgIHYgPSBjbGF1c2UtPmV2YWx1YXRlKGV4ZWMpOwogICAgICAgS0pTX0NIRUNLRVhDRVBUSU9O
CiAgICAgICBpZiAoc3RyaWN0RXF1YWwoZXhlYywgaW5wdXQsIHYpKSB7CkBAIC0yMDYxLDE4ICsy
MDYxLDE4IEBAIENvbXBsZXRpb24gQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2NrKEV4ZWMKIAlpZiAo
cmVzLmNvbXBsVHlwZSgpICE9IE5vcm1hbCkKIAkgIHJldHVybiByZXM7CiAJd2hpbGUgKGEpIHsK
LQkgIHJlcyA9IGEtPmNsYXVzZSgpLT5ldmFsU3RhdGVtZW50cyhleGVjKTsKKwkgIHJlcyA9IGEt
PmdldENsYXVzZSgpLT5ldmFsU3RhdGVtZW50cyhleGVjKTsKIAkgIGlmIChyZXMuY29tcGxUeXBl
KCkgIT0gTm9ybWFsKQogCSAgICByZXR1cm4gcmVzOwotCSAgYSA9IGEtPm5leHQoKTsKKwkgIGEg
PSBhLT5nZXROZXh0KCk7CiAJfQogCWJyZWFrOwogICAgICAgfQogICAgIH0KIAogICB3aGlsZSAo
YikgewotICAgIGNsYXVzZSA9IGItPmNsYXVzZSgpOwotICAgIGIgPSBiLT5uZXh0KCk7CisgICAg
Y2xhdXNlID0gYi0+Z2V0Q2xhdXNlKCk7CisgICAgYiA9IGItPmdldE5leHQoKTsKICAgICB2ID0g
Y2xhdXNlLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgICBpZiAo
c3RyaWN0RXF1YWwoZXhlYywgaW5wdXQsIHYpKSB7CkBAIC0yMDkyLDExICsyMDkyLDExIEBAIENv
bXBsZXRpb24gQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2NrKEV4ZWMKICAgYiA9IGxpc3QyLmdldCgp
OwogIHN0ZXAxODoKICAgd2hpbGUgKGIpIHsKLSAgICBjbGF1c2UgPSBiLT5jbGF1c2UoKTsKKyAg
ICBjbGF1c2UgPSBiLT5nZXRDbGF1c2UoKTsKICAgICByZXMgPSBjbGF1c2UtPmV2YWxTdGF0ZW1l
bnRzKGV4ZWMpOwogICAgIGlmIChyZXMuY29tcGxUeXBlKCkgIT0gTm9ybWFsKQogICAgICAgcmV0
dXJuIHJlczsKLSAgICBiID0gYi0+bmV4dCgpOworICAgIGIgPSBiLT5nZXROZXh0KCk7CiAgIH0K
IAogICAvLyBiYWlsIG91dCBvbiBlcnJvcgpAQCAtMjMwNSwxNiArMjMwNSwxOCBAQCBKU1ZhbHVl
ICpGdW5jRXhwck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBTb3VyY2VFbGVtZW50c05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKK2ludCBTb3VyY2VFbGVtZW50c05vZGU6OmNvdW50ID0gMDsKKwogU291cmNlRWxlbWVu
dHNOb2RlOjpTb3VyY2VFbGVtZW50c05vZGUoU3RhdGVtZW50Tm9kZSAqczEpCi0gIDogZWxlbWVu
dChzMSksIGVsZW1lbnRzKHRoaXMpCisgIDogbm9kZShzMSksIG5leHQodGhpcykKIHsKICAgc2V0
TG9jKHMxLT5maXJzdExpbmUoKSwgczEtPmxhc3RMaW5lKCksIHMxLT5zb3VyY2VJZCgpKTsKIH0K
LSAKKwogU291cmNlRWxlbWVudHNOb2RlOjpTb3VyY2VFbGVtZW50c05vZGUoU291cmNlRWxlbWVu
dHNOb2RlICpzMSwgU3RhdGVtZW50Tm9kZSAqczIpCi0gIDogZWxlbWVudChzMiksIGVsZW1lbnRz
KHMxLT5lbGVtZW50cykKKyAgOiBub2RlKHMyKSwgbmV4dChzMS0+bmV4dCkKIHsKLSAgczEtPmVs
ZW1lbnRzID0gdGhpczsKKyAgczEtPm5leHQgPSB0aGlzOwogICBzZXRMb2MoczEtPmZpcnN0TGlu
ZSgpLCBzMi0+bGFzdExpbmUoKSwgczEtPnNvdXJjZUlkKCkpOwogfQogCkBAIC0yMzIzLDEzICsy
MzI1LDEzIEBAIENvbXBsZXRpb24gU291cmNlRWxlbWVudHNOb2RlOjpleGVjdXRlKEUKIHsKICAg
S0pTX0NIRUNLRVhDRVBUSU9OCiAKLSAgQ29tcGxldGlvbiBjMSA9IGVsZW1lbnQtPmV4ZWN1dGUo
ZXhlYyk7CisgIENvbXBsZXRpb24gYzEgPSBub2RlLT5leGVjdXRlKGV4ZWMpOwogICBLSlNfQ0hF
Q0tFWENFUFRJT047CiAgIGlmIChjMS5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCiAgICAgcmV0dXJu
IGMxOwogICAKLSAgZm9yIChTb3VyY2VFbGVtZW50c05vZGUgKm4gPSBlbGVtZW50cy5nZXQoKTsg
bjsgbiA9IG4tPmVsZW1lbnRzLmdldCgpKSB7Ci0gICAgQ29tcGxldGlvbiBjMiA9IG4tPmVsZW1l
bnQtPmV4ZWN1dGUoZXhlYyk7CisgIGZvciAoU291cmNlRWxlbWVudHNOb2RlICpuID0gbmV4dC5n
ZXQoKTsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKKyAgICBDb21wbGV0aW9uIGMyID0gbi0+bm9k
ZS0+ZXhlY3V0ZShleGVjKTsKICAgICBpZiAoYzIuY29tcGxUeXBlKCkgIT0gTm9ybWFsKQogICAg
ICAgcmV0dXJuIGMyOwogICAgIC8vIFRoZSBzcGVjIHNheXMgdG8gcmV0dXJuIGMyIGhlcmUsIGJ1
dCBpdCBzZWVtcyB0aGF0IG1vemlsbGEgcmV0dXJucyBjMSBpZgpAQCAtMjM0NCwxNCArMjM0Niwx
NCBAQCBDb21wbGV0aW9uIFNvdXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZShFCiAvLyBFQ01BIDE0
CiB2b2lkIFNvdXJjZUVsZW1lbnRzTm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKLSAgZm9yIChTb3VyY2VFbGVtZW50c05vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+ZWxl
bWVudHMuZ2V0KCkpCi0gICAgbi0+ZWxlbWVudC0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOworICBm
b3IgKFNvdXJjZUVsZW1lbnRzTm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0LmdldCgpKQor
ICAgIG4tPm5vZGUtPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKIH0KIAogdm9pZCBTb3VyY2VFbGVt
ZW50c05vZGU6OnByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIGZvciAoU291
cmNlRWxlbWVudHNOb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPmVsZW1lbnRzLmdldCgpKQotICAg
IG4tPmVsZW1lbnQtPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKKyAgZm9yIChTb3VyY2VFbGVtZW50
c05vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKKyAgICBuLT5ub2RlLT5wcm9j
ZXNzVmFyRGVjbHMoZXhlYyk7CiB9CiAKIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShTb3VyY2VF
bGVtZW50c05vZGUgKnMpIDogRnVuY3Rpb25Cb2R5Tm9kZShzKQpJbmRleDoga2pzL25vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0CmRpZmYgLXAgLXUgLXIxLjQ0IGtqcy9ub2Rlcy5o
Ci0tLSBranMvbm9kZXMuaAkxMyBEZWMgMjAwNSAyMToyNDo1MSAtMDAwMAkxLjQ0CisrKyBranMv
bm9kZXMuaAkyNyBEZWMgMjAwNSAwMTowODo1MyAtMDAwMApAQCAtMjYsNiArMjYsNyBAQAogI2Rl
ZmluZSBfTk9ERVNfSF8KIAogI2luY2x1ZGUgPGt4bWxjb3JlL1JlZlB0ci5oPgorI2luY2x1ZGUg
PGt4bWxjb3JlL0xpc3RSZWZQdHIuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTIx
OSwxNCArMjIwLDE1IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBFbGVtZW50Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEg
Y2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgQXJyYXlOb2RlIGN0b3IKLSAgICBFbGVtZW50
Tm9kZShpbnQgZSwgTm9kZSAqbikgOiBsaXN0KHRoaXMpLCBlbGlzaW9uKGUpLCBub2RlKG4pIHsg
fQorICAgIEVsZW1lbnROb2RlKGludCBlLCBOb2RlICpuKSA6IG5leHQodGhpcyksIGVsaXNpb24o
ZSksIG5vZGUobikgeyB9CiAgICAgRWxlbWVudE5vZGUoRWxlbWVudE5vZGUgKmwsIGludCBlLCBO
b2RlICpuKQotICAgICAgOiBsaXN0KGwtPmxpc3QpLCBlbGlzaW9uKGUpLCBub2RlKG4pIHsgbC0+
bGlzdCA9IHRoaXM7IH0KKyAgICAgIDogbmV4dChsLT5uZXh0KSwgZWxpc2lvbihlKSwgbm9kZShu
KSB7IGwtPm5leHQgPSB0aGlzOyB9CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEVsZW1lbnROb2RlPiByZWxlYXNlTmV4dCgpIHsgcmV0dXJuIG5leHQu
cmVsZWFzZSgpOyB9CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5Tm9kZTsKLSAg
ICBSZWZQdHI8RWxlbWVudE5vZGU+IGxpc3Q7CisgICAgTGlzdFJlZlB0cjxFbGVtZW50Tm9kZT4g
bmV4dDsKICAgICBpbnQgZWxpc2lvbjsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKICAgfTsKQEAg
LTIzNSw5ICsyMzcsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEFycmF5Tm9k
ZShpbnQgZSkgOiBlbGVtZW50KDApLCBlbGlzaW9uKGUpLCBvcHQodHJ1ZSkgeyB9CiAgICAgQXJy
YXlOb2RlKEVsZW1lbnROb2RlICplbGUpCi0gICAgICA6IGVsZW1lbnQoZWxlLT5saXN0KSwgZWxp
c2lvbigwKSwgb3B0KGZhbHNlKSB7IGVsZS0+bGlzdCA9IDA7IH0KKyAgICAgIDogZWxlbWVudChl
bGUtPm5leHQpLCBlbGlzaW9uKDApLCBvcHQoZmFsc2UpIHsgZWxlLT5uZXh0ID0gMDsgfQogICAg
IEFycmF5Tm9kZShpbnQgZWxpLCBFbGVtZW50Tm9kZSAqZWxlKQotICAgICAgOiBlbGVtZW50KGVs
ZS0+bGlzdCksIGVsaXNpb24oZWxpKSwgb3B0KHRydWUpIHsgZWxlLT5saXN0ID0gMDsgfQorICAg
ICAgOiBlbGVtZW50KGVsZS0+bmV4dCksIGVsaXNpb24oZWxpKSwgb3B0KHRydWUpIHsgZWxlLT5u
ZXh0ID0gMDsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6
CkBAIC0yNzQsMjIgKzI3NiwyMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgUHJvcGVydHlM
aXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBp
cyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgT2JqZWN0TGl0ZXJhbE5v
ZGUgY3RvcgotICAgIFByb3BlcnR5TGlzdE5vZGUoUHJvcGVydHlOb2RlICpuKQsKLSAgICAgIDog
bm9kZShuKSwgbGlzdCh0aGlzKSB7IH0KKyAgICBQcm9wZXJ0eUxpc3ROb2RlKFByb3BlcnR5Tm9k
ZSAqbikKKyAgICAgIDogbm9kZShuKSwgbmV4dCh0aGlzKSB7IH0KICAgICBQcm9wZXJ0eUxpc3RO
b2RlKFByb3BlcnR5Tm9kZSAqbiwgUHJvcGVydHlMaXN0Tm9kZSAqbCkKLSAgICAgIDogbm9kZShu
KSwgbGlzdChsLT5saXN0KSB7IGwtPmxpc3QgPSB0aGlzOyB9CisgICAgICA6IG5vZGUobiksIG5l
eHQobC0+bmV4dCkgeyBsLT5uZXh0ID0gdGhpczsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAm
cykgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxQcm9wZXJ0eUxpc3ROb2RlPiByZWxlYXNlTmV4dCgp
IHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IE9iamVjdExpdGVyYWxOb2RlOwogICAgIFJlZlB0cjxQcm9wZXJ0eU5vZGU+IG5vZGU7Ci0gICAg
UmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IGxpc3Q7CisgICAgTGlzdFJlZlB0cjxQcm9wZXJ0eUxp
c3ROb2RlPiBuZXh0OwogICB9OwogCiAgIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlIDogcHVibGlj
IE5vZGUgewogICBwdWJsaWM6CiAgICAgT2JqZWN0TGl0ZXJhbE5vZGUoKSA6IGxpc3QoMCkgeyB9
Ci0gICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlMaXN0Tm9kZSAqbCkgOiBsaXN0KGwtPmxp
c3QpIHsgbC0+bGlzdCA9IDA7IH0KKyAgICBPYmplY3RMaXRlcmFsTm9kZShQcm9wZXJ0eUxpc3RO
b2RlICpsKSA6IGxpc3QobC0+bmV4dCkgeyBsLT5uZXh0ID0gMDsgfQogICAgIEpTVmFsdWUgKmV2
YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CkBAIC0zMzEsMTUgKzMzNCwxNiBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgY2xhc3MgQXJndW1lbnRMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAg
cHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwg
Y3JhY2tlZCBpbiB0aGUgQXJndW1lbnRzTm9kZSBjdG9yCi0gICAgQXJndW1lbnRMaXN0Tm9kZShO
b2RlICplKSA6IGxpc3QodGhpcyksIGV4cHIoZSkgeyB9CisgICAgQXJndW1lbnRMaXN0Tm9kZShO
b2RlICplKSA6IG5leHQodGhpcyksIGV4cHIoZSkgeyB9CiAgICAgQXJndW1lbnRMaXN0Tm9kZShB
cmd1bWVudExpc3ROb2RlICpsLCBOb2RlICplKQotICAgICAgOiBsaXN0KGwtPmxpc3QpLCBleHBy
KGUpIHsgbC0+bGlzdCA9IHRoaXM7IH0KKyAgICAgIDogbmV4dChsLT5uZXh0KSwgZXhwcihlKSB7
IGwtPm5leHQgPSB0aGlzOyB9CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICBMaXN0IGV2YWx1YXRlTGlzdChFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8QXJn
dW1lbnRMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsgfQog
ICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcmd1bWVudHNOb2RlOwotICAgIFJlZlB0cjxB
cmd1bWVudExpc3ROb2RlPiBsaXN0OworICAgIExpc3RSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4g
bmV4dDsKICAgICBSZWZQdHI8Tm9kZT4gZXhwcjsKICAgfTsKIApAQCAtMzQ3LDcgKzM1MSw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgQXJndW1lbnRzTm9kZSgpIDogbGlzdCgw
KSB7IH0KICAgICBBcmd1bWVudHNOb2RlKEFyZ3VtZW50TGlzdE5vZGUgKmwpCi0gICAgICA6IGxp
c3QobC0+bGlzdCkgeyBsLT5saXN0ID0gMDsgfQorICAgICAgOiBsaXN0KGwtPm5leHQpIHsgbC0+
bmV4dCA9IDA7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAg
IExpc3QgZXZhbHVhdGVMaXN0KEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CkBAIC03NDEsMTAgKzc0NSwxMSBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4
ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPFN0YXRMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSB7IHJldHVybiBuZXh0LnJlbGVh
c2UoKTsgfQogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDYXNlQ2xhdXNlTm9kZTsKICAg
ICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50OwotICAgIFJlZlB0cjxTdGF0TGlzdE5v
ZGU+IGxpc3Q7CisgICAgTGlzdFJlZlB0cjxTdGF0TGlzdE5vZGU+IG5leHQ7CiAgIH07CiAKICAg
Y2xhc3MgQXNzaWduRXhwck5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC03NzIsMjcgKzc3NywyOCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgVmFyRGVjbExpc3ROb2RlIDogcHVibGljIE5vZGUg
ewogICBwdWJsaWM6CiAgICAgLy8gbGlzdCBwb2ludGVyIGlzIHRhaWwgb2YgYSBjaXJjdWxhciBs
aXN0LCBjcmFja2VkIGluIHRoZSBGb3JOb2RlL1ZhclN0YXRlbWVudE5vZGUgY3RvcgotICAgIFZh
ckRlY2xMaXN0Tm9kZShWYXJEZWNsTm9kZSAqdikgOiBsaXN0KHRoaXMpLCB2YXIodikge30KKyAg
ICBWYXJEZWNsTGlzdE5vZGUoVmFyRGVjbE5vZGUgKnYpIDogbmV4dCh0aGlzKSwgdmFyKHYpIHt9
CiAgICAgVmFyRGVjbExpc3ROb2RlKFZhckRlY2xMaXN0Tm9kZSAqbCwgVmFyRGVjbE5vZGUgKnYp
Ci0gICAgICA6IGxpc3QobC0+bGlzdCksIHZhcih2KSB7IGwtPmxpc3QgPSB0aGlzOyB9CisgICAg
ICA6IG5leHQobC0+bmV4dCksIHZhcih2KSB7IGwtPm5leHQgPSB0aGlzOyB9CiAgICAgSlNWYWx1
ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1Zh
ckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSAmcykgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxWYXJEZWNsTGlzdE5vZGU+IHJlbGVh
c2VOZXh0KCkgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KICAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgRm9yTm9kZTsKICAgICBmcmllbmQgY2xhc3MgVmFyU3RhdGVtZW50Tm9kZTsKLSAg
ICBSZWZQdHI8VmFyRGVjbExpc3ROb2RlPiBsaXN0OworICAgIExpc3RSZWZQdHI8VmFyRGVjbExp
c3ROb2RlPiBuZXh0OwogICAgIFJlZlB0cjxWYXJEZWNsTm9kZT4gdmFyOwogICB9OwogCiAgIGNs
YXNzIFZhclN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoK
LSAgICBWYXJTdGF0ZW1lbnROb2RlKFZhckRlY2xMaXN0Tm9kZSAqbCkgOiBsaXN0KGwtPmxpc3Qp
IHsgbC0+bGlzdCA9IDA7IH0KKyAgICBWYXJTdGF0ZW1lbnROb2RlKFZhckRlY2xMaXN0Tm9kZSAq
bCkgOiBuZXh0KGwtPm5leHQpIHsgbC0+bmV4dCA9IDA7IH0KICAgICB2aXJ0dWFsIENvbXBsZXRp
b24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFy
RGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8VmFyRGVjbExpc3ROb2Rl
PiBsaXN0OworICAgIFJlZlB0cjxWYXJEZWNsTGlzdE5vZGU+IG5leHQ7CiAgIH07CiAKICAgY2xh
c3MgQmxvY2tOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODYxLDcgKzg2Nyw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIEZvck5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyLCBOb2RlICpl
MywgU3RhdGVtZW50Tm9kZSAqcykgOgogICAgICAgZXhwcjEoZTEpLCBleHByMihlMiksIGV4cHIz
KGUzKSwgc3RhdGVtZW50KHMpIHt9CiAgICAgRm9yTm9kZShWYXJEZWNsTGlzdE5vZGUgKmUxLCBO
b2RlICplMiwgTm9kZSAqZTMsIFN0YXRlbWVudE5vZGUgKnMpIDoKLSAgICAgIGV4cHIxKGUxLT5s
aXN0KSwgZXhwcjIoZTIpLCBleHByMyhlMyksIHN0YXRlbWVudChzKSB7IGUxLT5saXN0ID0gMDsg
fQorICAgICAgZXhwcjEoZTEtPm5leHQpLCBleHByMihlMiksIGV4cHIzKGUzKSwgc3RhdGVtZW50
KHMpIHsgZTEtPm5leHQgPSAwOyB9CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhl
Y1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0
ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29u
c3Q7CkBAIC05MzAsMzMgKzkzNiwzNCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBDYXNl
Q2xhdXNlTm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgIENhc2VDbGF1c2VOb2Rl
KE5vZGUgKmUpIDogZXhwcihlKSwgbGlzdCgwKSB7IH0KKyAgICBDYXNlQ2xhdXNlTm9kZShOb2Rl
ICplKSA6IGV4cHIoZSksIG5leHQoMCkgeyB9CiAgICAgQ2FzZUNsYXVzZU5vZGUoTm9kZSAqZSwg
U3RhdExpc3ROb2RlICpsKQotICAgICAgOiBleHByKGUpLCBsaXN0KGwtPmxpc3QpIHsgbC0+bGlz
dCA9IDA7IH0KKyAgICAgIDogZXhwcihlKSwgbmV4dChsLT5uZXh0KSB7IGwtPm5leHQgPSAwOyB9
CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICBDb21wbGV0aW9u
IGV2YWxTdGF0ZW1lbnRzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nl
c3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBleHBy
OwotICAgIFJlZlB0cjxTdGF0TGlzdE5vZGU+IGxpc3Q7CisgICAgUmVmUHRyPFN0YXRMaXN0Tm9k
ZT4gbmV4dDsKICAgfTsKIAogICBjbGFzcyBDbGF1c2VMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsK
ICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlz
dCwgY3JhY2tlZCBpbiB0aGUgQ2FzZUJsb2NrTm9kZSBjdG9yCi0gICAgQ2xhdXNlTGlzdE5vZGUo
Q2FzZUNsYXVzZU5vZGUgKmMpIDogY2woYyksIG54KHRoaXMpIHsgfQorICAgIENsYXVzZUxpc3RO
b2RlKENhc2VDbGF1c2VOb2RlICpjKSA6IGNsYXVzZShjKSwgbmV4dCh0aGlzKSB7IH0KICAgICBD
bGF1c2VMaXN0Tm9kZShDbGF1c2VMaXN0Tm9kZSAqbiwgQ2FzZUNsYXVzZU5vZGUgKmMpCi0gICAg
ICA6IGNsKGMpLCBueChuLT5ueCkgeyBuLT5ueCA9IHRoaXM7IH0KKyAgICAgIDogY2xhdXNlKGMp
LCBuZXh0KG4tPm5leHQpIHsgbi0+bmV4dCA9IHRoaXM7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOwotICAgIENhc2VDbGF1c2VOb2RlICpjbGF1c2UoKSBjb25zdCB7
IHJldHVybiBjbC5nZXQoKTsgfQotICAgIENsYXVzZUxpc3ROb2RlICpuZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbnguZ2V0KCk7IH0KKyAgICBDYXNlQ2xhdXNlTm9kZSAqZ2V0Q2xhdXNlKCkgY29uc3Qg
eyByZXR1cm4gY2xhdXNlLmdldCgpOyB9CisgICAgQ2xhdXNlTGlzdE5vZGUgKmdldE5leHQoKSBj
b25zdCB7IHJldHVybiBuZXh0LmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJE
ZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0gJnMpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Q2xhdXNlTGlzdE5vZGU+IHJlbGVhc2VO
ZXh0KCkgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KICAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgQ2FzZUJsb2NrTm9kZTsKLSAgICBSZWZQdHI8Q2FzZUNsYXVzZU5vZGU+IGNsOwotICAg
IFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbng7CisgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBj
bGF1c2U7CisgICAgTGlzdFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbmV4dDsKICAgfTsKIAogICBj
bGFzcyBDYXNlQmxvY2tOb2RlIDogcHVibGljIE5vZGUgewpAQCAtMTAyMSwxNyArMTAyOCwxOCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWls
IG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgRnVuY0RlY2xOb2RlL0Z1bmNFeHBy
Tm9kZSBjdG9yCiAgICAgUGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlmaWVyICZpKSA6IGlkKGkp
LCBuZXh0KHRoaXMpIHsgfQotICAgIFBhcmFtZXRlck5vZGUoUGFyYW1ldGVyTm9kZSAqbGlzdCwg
Y29uc3QgSWRlbnRpZmllciAmaSkKLSAgICAgIDogaWQoaSksIG5leHQobGlzdC0+bmV4dCkgeyBs
aXN0LT5uZXh0ID0gdGhpczsgfQorICAgIFBhcmFtZXRlck5vZGUoUGFyYW1ldGVyTm9kZSAqbmV4
dCwgY29uc3QgSWRlbnRpZmllciAmaSkKKyAgICAgIDogaWQoaSksIG5leHQobmV4dC0+bmV4dCkg
eyBuZXh0LT5uZXh0ID0gdGhpczsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYyk7CiAgICAgSWRlbnRpZmllciBpZGVudCgpIHsgcmV0dXJuIGlkOyB9CiAgICAgUGFyYW1l
dGVyTm9kZSAqbmV4dFBhcmFtKCkgeyByZXR1cm4gbmV4dC5nZXQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8UGFy
YW1ldGVyTm9kZT4gcmVsZWFzZU5leHQoKSB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsgfQogICBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBGdW5jRGVjbE5vZGU7CiAgICAgZnJpZW5kIGNsYXNz
IEZ1bmNFeHByTm9kZTsKICAgICBJZGVudGlmaWVyIGlkOwotICAgIFJlZlB0cjxQYXJhbWV0ZXJO
b2RlPiBuZXh0OworICAgIExpc3RSZWZQdHI8UGFyYW1ldGVyTm9kZT4gbmV4dDsKICAgfTsKIAog
ICAvLyBpbmhlcml0ZWQgYnkgUHJvZ3JhbU5vZGUKQEAgLTEwNzMsMTggKzEwODEsMjAgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIC8vIEEgbGlua2VkIGxpc3Qgb2Ygc291cmNlIGVsZW1lbnQgbm9kZXMK
ICAgY2xhc3MgU291cmNlRWxlbWVudHNOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBw
dWJsaWM6CisgICAgICBzdGF0aWMgaW50IGNvdW50OwogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0
YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgQmxvY2tOb2RlIChvciBzdWJj
bGFzcykgY3RvcgogICAgIFNvdXJjZUVsZW1lbnRzTm9kZShTdGF0ZW1lbnROb2RlICpzMSk7CiAg
ICAgU291cmNlRWxlbWVudHNOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqczEsIFN0YXRlbWVudE5v
ZGUgKnMyKTsKLQorICAgIAogICAgIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMp
OwogICAgIHZvaWQgcHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U291cmNl
RWxlbWVudHNOb2RlPiByZWxlYXNlTmV4dCgpIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAg
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrTm9kZTsKLSAgICBSZWZQdHI8U3RhdGVt
ZW50Tm9kZT4gZWxlbWVudDsgLy8gJ3RoaXMnIGVsZW1lbnQKLSAgICBSZWZQdHI8U291cmNlRWxl
bWVudHNOb2RlPiBlbGVtZW50czsgLy8gcG9pbnRlciB0byBuZXh0CisgICAgUmVmUHRyPFN0YXRl
bWVudE5vZGU+IG5vZGU7CisgICAgTGlzdFJlZlB0cjxTb3VyY2VFbGVtZW50c05vZGU+IG5leHQ7
CiAgIH07CiAKICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgRnVuY3Rpb25Cb2R5Tm9kZSB7
CkluZGV4OiBranMvbm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjMKZGlmZiAtcCAtdSAtcjEuMjMga2pzL25vZGVzMnN0cmluZy5jcHAKLS0tIGtqcy9u
b2RlczJzdHJpbmcuY3BwCTEzIERlYyAyMDA1IDIxOjI0OjUyIC0wMDAwCTEuMjMKKysrIGtqcy9u
b2RlczJzdHJpbmcuY3BwCTI3IERlYyAyMDA1IDAxOjA4OjUzIC0wMDAwCkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBHcm91cE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcwogCiB2b2lkIEVs
ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7Ci0gIGZvciAoY29u
c3QgRWxlbWVudE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkgeworICBmb3Ig
KGNvbnN0IEVsZW1lbnROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG4tPmVsaXNpb247IGkrKykKICAgICAgIHMgPDwgIiwiOwog
ICAgIHMgPDwgbi0+bm9kZTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIFByb3BlcnR5TGlzdE5v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0CiB7CiAgIHMgPDwgbm9kZTsKICAgCi0gIGZvciAoY29uc3Qg
UHJvcGVydHlMaXN0Tm9kZSAqbiA9IGxpc3QuZ2V0KCk7IG47IG4gPSBuLT5saXN0LmdldCgpKQor
ICBmb3IgKGNvbnN0IFByb3BlcnR5TGlzdE5vZGUgKm4gPSBuZXh0LmdldCgpOyBuOyBuID0gbi0+
bmV4dC5nZXQoKSkKICAgICBzIDw8ICIsICIgPDwgbi0+bm9kZTsKIH0KIApAQCAtMjA0LDcgKzIw
NCw3IEBAIHZvaWQgRG90QWNjZXNzb3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHIKIHZvaWQgQXJn
dW1lbnRMaXN0Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewogICBzIDw8
IGV4cHI7Ci0gIGZvciAoQXJndW1lbnRMaXN0Tm9kZSAqbiA9IGxpc3QuZ2V0KCk7IG47IG4gPSBu
LT5saXN0LmdldCgpKQorICBmb3IgKEFyZ3VtZW50TGlzdE5vZGUgKm4gPSBuZXh0LmdldCgpOyBu
OyBuID0gbi0+bmV4dC5nZXQoKSkKICAgICBzIDw8ICIsICIgPDwgbi0+ZXhwcjsKIH0KIApAQCAt
NTI1LDcgKzUyNSw3IEBAIHZvaWQgQ29tbWFOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMK
IAogdm9pZCBTdGF0TGlzdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QKIHsK
LSAgZm9yIChjb25zdCBTdGF0TGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQo
KSkKKyAgZm9yIChjb25zdCBTdGF0TGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5n
ZXQoKSkKICAgICBzIDw8IG4tPnN0YXRlbWVudDsKIH0KIApAQCAtNTQyLDEzICs1NDIsMTMgQEAg
dm9pZCBWYXJEZWNsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtIAogdm9pZCBWYXJEZWNsTGlz
dE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QKIHsKICAgcyA8PCB2YXI7Ci0g
IGZvciAoVmFyRGVjbExpc3ROb2RlICpuID0gbGlzdC5nZXQoKTsgbjsgbiA9IG4tPmxpc3QuZ2V0
KCkpCisgIGZvciAoVmFyRGVjbExpc3ROb2RlICpuID0gbmV4dC5nZXQoKTsgbjsgbiA9IG4tPm5l
eHQuZ2V0KCkpCiAgICAgcyA8PCAiLCAiIDw8IG4tPnZhcjsKIH0KIAogdm9pZCBWYXJTdGF0ZW1l
bnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7Ci0gIHMgPDwgU291cmNl
U3RyZWFtOjpFbmRsIDw8ICJ2YXIgIiA8PCBsaXN0IDw8ICI7IjsKKyAgcyA8PCBTb3VyY2VTdHJl
YW06OkVuZGwgPDwgInZhciAiIDw8IG5leHQgPDwgIjsiOwogfQogCiB2b2lkIEJsb2NrTm9kZTo6
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdApAQCAtNjUwLDI1ICs2NTAsMjUgQEAgdm9p
ZCBDYXNlQ2xhdXNlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZQogICBlbHNlCiAgICAgcyA8PCAi
ZGVmYXVsdCI7CiAgIHMgPDwgIjoiIDw8IFNvdXJjZVN0cmVhbTo6SW5kZW50OwotICBpZiAobGlz
dCkKLSAgICBzIDw8IGxpc3Q7CisgIGlmIChuZXh0KQorICAgIHMgPDwgbmV4dDsKICAgcyA8PCBT
b3VyY2VTdHJlYW06OlVuaW5kZW50OwogfQogCiB2b2lkIENsYXVzZUxpc3ROb2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7Ci0gIGZvciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUg
Km4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dCgpKQotICAgIHMgPDwgbi0+Y2xhdXNlKCk7CisgIGZv
ciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+Z2V0TmV4dCgpKQor
ICAgIHMgPDwgbi0+Z2V0Q2xhdXNlKCk7CiB9CiAKIHZvaWQgQ2FzZUJsb2NrTm9kZTo6c3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewotICBmb3IgKGNvbnN0IENsYXVzZUxpc3ROb2Rl
ICpuID0gbGlzdDEuZ2V0KCk7IG47IG4gPSBuLT5uZXh0KCkpCi0gICAgcyA8PCBuLT5jbGF1c2Uo
KTsKKyAgZm9yIChjb25zdCBDbGF1c2VMaXN0Tm9kZSAqbiA9IGxpc3QxLmdldCgpOyBuOyBuID0g
bi0+Z2V0TmV4dCgpKQorICAgIHMgPDwgbi0+Z2V0Q2xhdXNlKCk7CiAgIGlmIChkZWYpCiAgICAg
cyA8PCBkZWY7Ci0gIGZvciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUgKm4gPSBsaXN0Mi5nZXQoKTsg
bjsgbiA9IG4tPm5leHQoKSkKLSAgICBzIDw8IG4tPmNsYXVzZSgpOworICBmb3IgKGNvbnN0IENs
YXVzZUxpc3ROb2RlICpuID0gbGlzdDIuZ2V0KCk7IG47IG4gPSBuLT5nZXROZXh0KCkpCisgICAg
cyA8PCBuLT5nZXRDbGF1c2UoKTsKIH0KIAogdm9pZCBTd2l0Y2hOb2RlOjpzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0gJnMpIGNvbnN0CkBAIC03MTcsNiArNzE3LDYgQEAgdm9pZCBGdW5jRXhwck5vZGU6
OnN0cmVhbVRvKFNvdXJjZVN0cmVhbQogCiB2b2lkIFNvdXJjZUVsZW1lbnRzTm9kZTo6c3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewotICBmb3IgKGNvbnN0IFNvdXJjZUVsZW1lbnRz
Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5lbGVtZW50cy5nZXQoKSkKLSAgICBzIDw8IG4tPmVs
ZW1lbnQ7CisgIGZvciAoY29uc3QgU291cmNlRWxlbWVudHNOb2RlICpuID0gdGhpczsgbjsgbiA9
IG4tPm5leHQuZ2V0KCkpCisgICAgcyA8PCBuLT5ub2RlOwogfQpJbmRleDoga3htbGNvcmUvTGlz
dFJlZlB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4bWxjb3JlL0xpc3RSZWZQdHIuaApkaWZm
IC1OIGt4bWxjb3JlL0xpc3RSZWZQdHIuaAotLS0ga3htbGNvcmUvTGlzdFJlZlB0ci5oCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGt4bWxjb3JlL0xpc3RSZWZQdHIuaAkyNyBEZWMgMjAw
NSAwMTowODo1MyAtMDAwMApAQCAtMCwwICsxLDYwIEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJh
c2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBs
aWJyYXJpZXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBLWE1MQ09SRV9MSVNUX1JFRl9QVFJfSAorI2RlZmluZSBLWE1M
Q09SRV9MSVNUX1JFRl9QVFJfSAorCisjaW5jbHVkZSA8a3htbGNvcmUvUmVmUHRyLmg+CisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgS1hNTENvcmUgeworCisgICAgLy8gU3BlY2lh
bGl6ZWQgdmVyc2lvbiBvZiBSZWZQdHIgZGVzZ2luZWQgZm9yIHVzZSBpbiBzaW5nbHktbGlua2Vk
IGxpc3RzLiAKKyAgICAvLyBEZXJlZnMgdGhlIGxpc3QgaXRlcmF0aXZlbHkgdG8gYXZvaWQgcmVj
dXJzaXZlIGRlcmVmaW5nIHRoYXQgY2FuIG92ZXJmbG93IHRoZSBzdGFjay4KKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gY2xhc3MgTGlzdFJlZlB0ciA6IHB1YmxpYyBSZWZQdHI8VD4KKyAgICB7
CisgICAgcHVibGljOgorICAgICAgICBMaXN0UmVmUHRyKCkgOiBSZWZQdHI8VD4oKSB7fQorICAg
ICAgICBMaXN0UmVmUHRyKFQgKnB0cikgOiBSZWZQdHI8VD4ocHRyKSB7fQorICAgICAgICBMaXN0
UmVmUHRyKGNvbnN0IFJlZlB0cjxUPiYgbykgOiBSZWZQdHI8VD4obykge30KKyAgICAgICAgLy8g
c2VlIGNvbW1lbnQgaW4gUGFzc1JlZlB0ci5oIGZvciB3aHkgdGhpcyB0YWtlcyBjb25zdCByZWZl
cmVuY2UKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IExpc3RSZWZQdHIoY29uc3QgUGFz
c1JlZlB0cjxVPiYgbykgOiBSZWZQdHI8VD4obykge30KKworICAgICAgICB+TGlzdFJlZlB0cigp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxUPiByZWFwZXIgPSB0aGlzLT5yZWxlYXNlKCk7CisgICAg
ICAgICAgICB3aGlsZSAocmVhcGVyICYmIHJlYXBlci0+cmVmY291bnQoKSA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgcmVhcGVyID0gcmVhcGVyLT5yZWxlYXNlTmV4dCgpOyAvLyBpbXBsaWNpdGx5
IHByb3RlY3RzIHJlYXBlci0+bmV4dCwgdGhlbiBkZXJlZnMgcmVhcGVyCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExpc3RSZWZQdHImIG9wZXJhdG9yPShUICpv
cHRyKSB7IFJlZlB0cjxUPjo6b3BlcmF0b3I9KG9wdHIpOyByZXR1cm4gKnRoaXM7IH0KKyAgICAg
ICAgTGlzdFJlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IFJlZlB0cjxUPiYgbykgeyBSZWZQdHI8VD46
Om9wZXJhdG9yPShvKTsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgIExpc3RSZWZQdHImIG9wZXJh
dG9yPShjb25zdCBQYXNzUmVmUHRyPFQ+JiBvKSB7IFJlZlB0cjxUPjo6b3BlcmF0b3I9KG8pOyBy
ZXR1cm4gKnRoaXM7IH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IExpc3RSZWZQdHIm
IG9wZXJhdG9yPShjb25zdCBSZWZQdHI8VT4mIG8pIHsgUmVmUHRyPFQ+OjpvcGVyYXRvcj0obyk7
IHJldHVybiAqdGhpczsgfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gTGlzdFJlZlB0
ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8VT4mIG8pIHsgUmVmUHRyPFQ+OjpvcGVyYXRv
cj0obyk7IHJldHVybiAqdGhpczsgfQorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIEtYTUxDb3Jl
CisKK3VzaW5nIEtYTUxDb3JlOjpMaXN0UmVmUHRyOworCisjZW5kaWYgLy8gS1hNTENPUkVfTElT
VF9SRUZfUFRSX0gKSW5kZXg6IGt4bWxjb3JlL1JlZlB0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9KYXZhU2NyaXB0Q29yZS9reG1sY29yZS9SZWZQdHIuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBreG1sY29yZS9SZWZQdHIuaAotLS0ga3ht
bGNvcmUvUmVmUHRyLmgJMjUgRGVjIDIwMDUgMDk6MjI6MzUgLTAwMDAJMS4xMgorKysga3htbGNv
cmUvUmVmUHRyLmgJMjcgRGVjIDIwMDUgMDE6MDg6NTMgLTAwMDAKQEAgLTQ0LDYgKzQ0LDggQEAg
bmFtZXNwYWNlIEtYTUxDb3JlIHsKICAgICAgICAgCiAgICAgICAgIFQgKmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHRyOyB9CiAgICAgICAgIAorICAgICAgICBQYXNzUmVmUHRyPFQ+IHJlbGVhc2Uo
KSB7IFBhc3NSZWZQdHI8VD4gdG1wID0gYWRvcHRSZWYobV9wdHIpOyBtX3B0ciA9IDA7IHJldHVy
biB0bXA7IH0KKwogICAgICAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9wdHI7
IH0KICAgICAgICAgVCAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CiAgICAg
ICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5293</attachid>
            <date>2005-12-26 17:13:08 -0800</date>
            <delta_ts>2005-12-27 01:33:02 -0800</delta_ts>
            <desc>Second cut at fix</desc>
            <filename>patch-listrefptr.txt</filename>
            <type>text/plain</type>
            <size>31851</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkyOQpkaWZmIC1wIC11IC1y
MS45MjkgQ2hhbmdlTG9nCi0tLSBDaGFuZ2VMb2cJMjUgRGVjIDIwMDUgMDk6MjI6MzIgLTAwMDAJ
MS45MjkKKysrIENoYW5nZUxvZwkyNyBEZWMgMjAwNSAwMToxNDowMSAtMDAwMApAQCAtMSwzICsx
LDg2IEBACisyMDA1LTEyLTI2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBGaXhlZCA8
cmRhcjovL3Byb2JsZW0vNDM2NDcwNT4gcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzIGNyYXNoZXMg
aW4gCisgICAgICAgIEtKUzo6QmxvY2tOb2RlOjpkZXJlZiAKKyAgICAgICAgQUtBIAorICAgICAg
ICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTYyMzMKKyAg
ICAgICAgUmVwcm9kdWNpYmxlIHN0YWNrLW92ZXJmbG93IGNyYXNoIGluIH5SZWZQdHI8VD4gZHVl
IHRvIFJlZlB0cjxUPiB1c2UgaW4gCisgICAgICAgIGxpbmtlZCBsaXN0cworCisgICAgICAgIFRo
aXMgcGF0Y2ggZG9lcyBmb3VyIHRoaW5nczogCisgICAgICAgICgxKSBTdGFuZGFyZGl6ZXMgYWxs
IG91ciBsaW5rZWQgbGlzdCBub2RlcyB0byB1c2UgIm5leHQiIGFzIHRoZWlyIG5leHQgCisgICAg
ICAgIHBvaW50ZXJzLiAKKyAgICAgICAgKDIpIENyZWF0ZXMgdGhlIExpc3RSZWZQdHI8VD4gY2xh
c3MsIGEgc3ViY2xhc3Mgb2YgUmVmUHRyPFQ+IHNwZWNpYWxpemVkCisgICAgICAgIHRvIGl0ZXJh
dGl2ZWx5IGRlcmVmICJuZXh0IiBwb2ludGVycy4KKyAgICAgICAgKDMpIFN0YW5kYXJkaXplcyBv
dXIgbGlua2VkIGxpc3Qgbm9kZXMgdG8gdXNlIExpc3RSZWZQdHI8VD4gYW5kIAorICAgICAgICBp
bXBsZW1lbnQgdGhlIHJlbGVhc2VOZXh0KCkgZnVuY3Rpb24gdXNlZCBieSB+TGlzdFJlZlB0cjxU
PigpLgorICAgICAgICAoNCkgQWRkcyB0byBSZWZQdHI8VD4gdGhlIHJlbGVhc2UoKSBtZXRob2Qg
dXNlZCBieSByZWxlYXNlTmV4dCgpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBranMvbm9kZXMuY3BwOgorICAgICAgICAo
RWxlbWVudE5vZGU6OmV2YWx1YXRlKToKKyAgICAgICAgKFByb3BlcnR5TGlzdE5vZGU6OmV2YWx1
YXRlKToKKyAgICAgICAgKEFyZ3VtZW50TGlzdE5vZGU6OmV2YWx1YXRlTGlzdCk6CisgICAgICAg
IChTdGF0TGlzdE5vZGU6OlN0YXRMaXN0Tm9kZSk6CisgICAgICAgIChTdGF0TGlzdE5vZGU6OmV4
ZWN1dGUpOgorICAgICAgICAoU3RhdExpc3ROb2RlOjpwcm9jZXNzVmFyRGVjbHMpOgorICAgICAg
ICAoVmFyRGVjbExpc3ROb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChWYXJEZWNsTGlzdE5vZGU6
OnByb2Nlc3NWYXJEZWNscyk6CisgICAgICAgIChWYXJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKToK
KyAgICAgICAgKFZhclN0YXRlbWVudE5vZGU6OnByb2Nlc3NWYXJEZWNscyk6CisgICAgICAgIChC
bG9ja05vZGU6OkJsb2NrTm9kZSk6CisgICAgICAgIChDYXNlQ2xhdXNlTm9kZTo6ZXZhbFN0YXRl
bWVudHMpOgorICAgICAgICAoQ2FzZUNsYXVzZU5vZGU6OnByb2Nlc3NWYXJEZWNscyk6CisgICAg
ICAgIChDbGF1c2VMaXN0Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKToKKyAgICAgICAgKENhc2VCbG9j
a05vZGU6OkNhc2VCbG9ja05vZGUpOgorICAgICAgICAoQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2Nr
KToKKyAgICAgICAgKFNvdXJjZUVsZW1lbnRzTm9kZTo6U291cmNlRWxlbWVudHNOb2RlKToKKyAg
ICAgICAgKFNvdXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChTb3VyY2VFbGVt
ZW50c05vZGU6OnByb2Nlc3NGdW5jRGVjbCk6CisgICAgICAgIChTb3VyY2VFbGVtZW50c05vZGU6
OnByb2Nlc3NWYXJEZWNscyk6CisgICAgICAgICoga2pzL25vZGVzLmg6CisgICAgICAgIChLSlM6
OkVsZW1lbnROb2RlOjpFbGVtZW50Tm9kZSk6CisgICAgICAgIChLSlM6OkVsZW1lbnROb2RlOjpy
ZWxlYXNlTmV4dCk6CisgICAgICAgIChLSlM6OkFycmF5Tm9kZTo6QXJyYXlOb2RlKToKKyAgICAg
ICAgKEtKUzo6UHJvcGVydHlMaXN0Tm9kZTo6UHJvcGVydHlMaXN0Tm9kZSk6CisgICAgICAgIChL
SlM6OlByb3BlcnR5TGlzdE5vZGU6OnJlbGVhc2VOZXh0KToKKyAgICAgICAgKEtKUzo6T2JqZWN0
TGl0ZXJhbE5vZGU6Ok9iamVjdExpdGVyYWxOb2RlKToKKyAgICAgICAgKEtKUzo6QXJndW1lbnRM
aXN0Tm9kZTo6QXJndW1lbnRMaXN0Tm9kZSk6CisgICAgICAgIChLSlM6OkFyZ3VtZW50TGlzdE5v
ZGU6OnJlbGVhc2VOZXh0KToKKyAgICAgICAgKEtKUzo6QXJndW1lbnRzTm9kZTo6QXJndW1lbnRz
Tm9kZSk6CisgICAgICAgIChLSlM6OlN0YXRMaXN0Tm9kZTo6cmVsZWFzZU5leHQpOgorICAgICAg
ICAoS0pTOjpWYXJEZWNsTGlzdE5vZGU6OlZhckRlY2xMaXN0Tm9kZSk6CisgICAgICAgIChLSlM6
OlZhckRlY2xMaXN0Tm9kZTo6cmVsZWFzZU5leHQpOgorICAgICAgICAoS0pTOjpWYXJTdGF0ZW1l
bnROb2RlOjpWYXJTdGF0ZW1lbnROb2RlKToKKyAgICAgICAgKEtKUzo6Rm9yTm9kZTo6Rm9yTm9k
ZSk6CisgICAgICAgIChLSlM6OkNhc2VDbGF1c2VOb2RlOjpDYXNlQ2xhdXNlTm9kZSk6CisgICAg
ICAgIChLSlM6OkNsYXVzZUxpc3ROb2RlOjpDbGF1c2VMaXN0Tm9kZSk6CisgICAgICAgIChLSlM6
OkNsYXVzZUxpc3ROb2RlOjpnZXRDbGF1c2UpOgorICAgICAgICAoS0pTOjpDbGF1c2VMaXN0Tm9k
ZTo6Z2V0TmV4dCk6CisgICAgICAgIChLSlM6OkNsYXVzZUxpc3ROb2RlOjpyZWxlYXNlTmV4dCk6
CisgICAgICAgIChLSlM6OlBhcmFtZXRlck5vZGU6OlBhcmFtZXRlck5vZGUpOgorICAgICAgICAo
S0pTOjpQYXJhbWV0ZXJOb2RlOjpyZWxlYXNlTmV4dCk6CisgICAgICAgIChLSlM6OlNvdXJjZUVs
ZW1lbnRzTm9kZTo6cmVsZWFzZU5leHQpOgorICAgICAgICAqIGtqcy9ub2RlczJzdHJpbmcuY3Bw
OgorICAgICAgICAoRWxlbWVudE5vZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKFByb3BlcnR5TGlz
dE5vZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKEFyZ3VtZW50TGlzdE5vZGU6OnN0cmVhbVRvKToK
KyAgICAgICAgKFN0YXRMaXN0Tm9kZTo6c3RyZWFtVG8pOgorICAgICAgICAoVmFyRGVjbExpc3RO
b2RlOjpzdHJlYW1Ubyk6CisgICAgICAgIChWYXJTdGF0ZW1lbnROb2RlOjpzdHJlYW1Ubyk6Cisg
ICAgICAgIChDYXNlQ2xhdXNlTm9kZTo6c3RyZWFtVG8pOgorICAgICAgICAoQ2xhdXNlTGlzdE5v
ZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKENhc2VCbG9ja05vZGU6OnN0cmVhbVRvKToKKyAgICAg
ICAgKFNvdXJjZUVsZW1lbnRzTm9kZTo6c3RyZWFtVG8pOgorICAgICAgICAqIGt4bWxjb3JlL0xp
c3RSZWZQdHIuaDogQWRkZWQuCisgICAgICAgIChLWE1MQ29yZTo6TGlzdFJlZlB0cjo6TGlzdFJl
ZlB0cik6CisgICAgICAgIChLWE1MQ29yZTo6TGlzdFJlZlB0cjo6fkxpc3RSZWZQdHIpOgorICAg
ICAgICAoS1hNTENvcmU6Okxpc3RSZWZQdHI6Om9wZXJhdG9yPSk6CisgICAgICAgICoga3htbGNv
cmUvUmVmUHRyLmg6CisgICAgICAgIChLWE1MQ29yZTo6UmVmUHRyOjpyZWxlYXNlKToKKwogMjAw
NS0xMi0yNCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgYW5kIERhdmUgSHlhdHQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXAgLXUgLXIxLjMxIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKLS0tIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJMjIgRGVjIDIwMDUgMDE6NDA6NTMgLTAwMDAJMS4zMQorKysgSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyNyBEZWMgMjAwNSAwMToxNDowMSAtMDAw
MApAQCAtMjUsNiArMjUsNyBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTE0OEExNjI3MDk1RDE2QkIw
MDY2NkQwRCAvKiBMaXN0UmVmUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDhBMTYyNjA5NUQxNkJCMDA2NjZEMEQgLyogTGlzdFJlZlB0ci5oICov
OyB9OwogCQk2NTJDMTA3RjA4REE3QjFFMDAyMDg4N0QgLyogcHJvdGVjdGVkX3JlZmVyZW5jZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQzEwN0Uw
OERBN0IxRTAwMjA4ODdEIC8qIHByb3RlY3RlZF9yZWZlcmVuY2UuaCAqLzsgfTsKIAkJNjU0MUJE
NzIwOEU4MEExNzAwMkNCRUU3IC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENkUwOEU4MEExNzAwMkNCRUU3IC8qIFRDUGFn
ZU1hcC5oICovOyB9OwogCQk2NTQxQkQ3MzA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENkYw
OEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCAqLzsgfTsKQEAgLTI3Nyw2ICsyNzgsNyBA
QAogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkxNDhBMTYyNjA5NUQxNkJCMDA2NjZEMEQgLyog
TGlzdFJlZlB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdFJlZlB0
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUUxMkQ4ODA2QTQ5QjBGMDBFOURG
ODQgLyogdGVzdGtqcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gMjsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSB0ZXN0a2pzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB9OwogCQk1MTE0RjQ3QjA1RTQ0MjYyMDBEMUJCQkQgLyogcnVudGltZV9yb290
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IHJ1bnRpbWVfcm9vdC5jcHA7IHBhdGggPSBiaW5kaW5ncy9ydW50aW1lX3Jvb3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCTUxMTRGNDdDMDVFNDQy
NjIwMEQxQkJCRCAvKiBydW50aW1lX3Jvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gcnVudGltZV9yb290Lmg7IHBhdGggPSBiaW5kaW5ncy9y
dW50aW1lX3Jvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpA
QCAtNjY1LDYgKzY2Nyw3IEBACiAJCQkJNjU3RUVCQkYwOTRFNDQ1RTAwOEM5QzdCIC8qIEhhc2hD
b3VudGVkU2V0LmggKi8sCiAJCQkJNjVDNjQ3QjMwOTNFRjhENjAwMjJDMzgwIC8qIFJlZlB0ci5o
ICovLAogCQkJCTY1ODBGNzk1MDk0MDcwNTYwMDgyQzIxOSAvKiBQYXNzUmVmUHRyLmggKi8sCisJ
CQkJMTQ4QTE2MjYwOTVEMTZCQjAwNjY2RDBEIC8qIExpc3RSZWZQdHIuaCAqLywKIAkJCQk2NUQ3
RDE5QjA4RjEwQjVCMDAxNUFCRDggLyogRmFzdE1hbGxvY0ludGVybmFsLmggKi8sCiAJCQkJNjU1
N0U4RjcwOEVBNUQ0RDAwNDlDREZDIC8qIEhhc2hNYXBQdHJTcGVjLmggKi8sCiAJCQkJNjVERkM5
MkEwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hGdW5jdGlvbnMuaCAqLywKQEAgLTg1Miw2ICs4NTUs
NyBAQAogCQkJCTY1ODBGNzk2MDk0MDcwNTYwMDgyQzIxOSAvKiBQYXNzUmVmUHRyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NTdFRUJDMDA5NEU0NDVFMDA4QzlDN0IgLyogSGFzaENvdW50ZWRTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzQUE0Rjc4MDk1NzI1MUYwMDg0QjNBNyAvKiBBbHdheXNJ
bmxpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0OEExNjI3MDk1RDE2QkIwMDY2NkQwRCAvKiBM
aXN0UmVmUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGtqcy9ub2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuOTEKZGlmZiAtcCAtdSAtcjEuOTEga2pzL25vZGVzLmNwcAotLS0g
a2pzL25vZGVzLmNwcAkxMyBEZWMgMjAwNSAyMToyNDo1MSAtMDAwMAkxLjkxCisrKyBranMvbm9k
ZXMuY3BwCTI3IERlYyAyMDA1IDAxOjE0OjAxIC0wMDAwCkBAIC0zMDksNyArMzA5LDcgQEAgSlNW
YWx1ZSAqRWxlbWVudE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZQogewogICBKU09iamVjdCAqYXJy
YXkgPSBleGVjLT5sZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbkFycmF5KCktPmNvbnN0cnVj
dChleGVjLCBMaXN0OjplbXB0eSgpKTsKICAgaW50IGxlbmd0aCA9IDA7Ci0gIGZvciAoRWxlbWVu
dE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkgeworICBmb3IgKEVsZW1lbnRO
b2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKICAgICBKU1ZhbHVlICp2YWwg
PSBuLT5ub2RlLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQog
ICAgIGxlbmd0aCArPSBuLT5lbGlzaW9uOwpAQCAtMzYwLDcgKzM2MCw3IEBAIEpTVmFsdWUgKlBy
b3BlcnR5TGlzdE5vZGU6OmV2YWx1YXRlKEV4ZWMKIHsKICAgSlNPYmplY3QgKm9iaiA9IGV4ZWMt
PmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluT2JqZWN0KCktPmNvbnN0cnVjdChleGVjLCBM
aXN0OjplbXB0eSgpKTsKICAgCi0gIGZvciAoUHJvcGVydHlMaXN0Tm9kZSAqcCA9IHRoaXM7IHA7
IHAgPSBwLT5saXN0LmdldCgpKSB7CisgIGZvciAoUHJvcGVydHlMaXN0Tm9kZSAqcCA9IHRoaXM7
IHA7IHAgPSBwLT5uZXh0LmdldCgpKSB7CiAgICAgSlNWYWx1ZSAqbiA9IHAtPm5vZGUtPm5hbWUt
PmV2YWx1YXRlKGV4ZWMpOwogICAgIEtKU19DSEVDS0VYQ0VQVElPTlZBTFVFCiAgICAgSlNWYWx1
ZSAqdiA9IHAtPm5vZGUtPmFzc2lnbi0+ZXZhbHVhdGUoZXhlYyk7CkBAIC00NDksNyArNDQ5LDcg
QEAgTGlzdCBBcmd1bWVudExpc3ROb2RlOjpldmFsdWF0ZUxpc3QoRXhlYwogewogICBMaXN0IGw7
CiAKLSAgZm9yIChBcmd1bWVudExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPmxpc3QuZ2V0
KCkpIHsKKyAgZm9yIChBcmd1bWVudExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5leHQu
Z2V0KCkpIHsKICAgICBKU1ZhbHVlICp2ID0gbi0+ZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OTElTVAogICAgIGwuYXBwZW5kKHYpOwpAQCAtMTQxNSwxNSArMTQx
NSwxNSBAQCBKU1ZhbHVlICpDb21tYU5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0ZSAqCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhdExpc3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBTdGF0TGlzdE5vZGU6OlN0YXRMaXN0Tm9kZShTdGF0ZW1lbnRO
b2RlICpzKQotICA6IHN0YXRlbWVudChzKSwgbGlzdCh0aGlzKQorICA6IHN0YXRlbWVudChzKSwg
bmV4dCh0aGlzKQogewogICBzZXRMb2Mocy0+Zmlyc3RMaW5lKCksIHMtPmxhc3RMaW5lKCksIHMt
PnNvdXJjZUlkKCkpOwogfQogIAogU3RhdExpc3ROb2RlOjpTdGF0TGlzdE5vZGUoU3RhdExpc3RO
b2RlICpsLCBTdGF0ZW1lbnROb2RlICpzKQotICA6IHN0YXRlbWVudChzKSwgbGlzdChsLT5saXN0
KQorICA6IHN0YXRlbWVudChzKSwgbmV4dChsLT5uZXh0KQogewotICBsLT5saXN0ID0gdGhpczsK
KyAgbC0+bmV4dCA9IHRoaXM7CiAgIHNldExvYyhsLT5maXJzdExpbmUoKSwgcy0+bGFzdExpbmUo
KSwgbC0+c291cmNlSWQoKSk7CiB9CiAKQEAgLTE0MzcsNyArMTQzNyw3IEBAIENvbXBsZXRpb24g
U3RhdExpc3ROb2RlOjpleGVjdXRlKEV4ZWNTdGEKICAgCiAgIEpTVmFsdWUgKnYgPSBjLnZhbHVl
KCk7CiAgIAotICBmb3IgKFN0YXRMaXN0Tm9kZSAqbiA9IGxpc3QuZ2V0KCk7IG47IG4gPSBuLT5s
aXN0LmdldCgpKSB7CisgIGZvciAoU3RhdExpc3ROb2RlICpuID0gbmV4dC5nZXQoKTsgbjsgbiA9
IG4tPm5leHQuZ2V0KCkpIHsKICAgICBDb21wbGV0aW9uIGMyID0gbi0+c3RhdGVtZW50LT5leGVj
dXRlKGV4ZWMpOwogICAgIEtKU19BQk9SVFBPSU5UCiAgICAgaWYgKGMyLmNvbXBsVHlwZSgpICE9
IE5vcm1hbCkKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIENvbXBsZXRpb24gU3RhdExpc3ROb2RlOjpl
eGVjdXRlKEV4ZWNTdGEKIAogdm9pZCBTdGF0TGlzdE5vZGU6OnByb2Nlc3NWYXJEZWNscyhFeGVj
U3RhdGUgKmV4ZWMpCiB7Ci0gIGZvciAoU3RhdExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4t
Pmxpc3QuZ2V0KCkpCisgIGZvciAoU3RhdExpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5l
eHQuZ2V0KCkpCiAgICAgbi0+c3RhdGVtZW50LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CiB9CiAK
QEAgLTE1MjYsNyArMTUyNiw3IEBAIHZvaWQgVmFyRGVjbE5vZGU6OnByb2Nlc3NWYXJEZWNscyhF
eGVjU3QKIC8vIEVDTUEgMTIuMgogSlNWYWx1ZSAqVmFyRGVjbExpc3ROb2RlOjpldmFsdWF0ZShF
eGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIGZvciAoVmFyRGVjbExpc3ROb2RlICpuID0gdGhpczsgbjsg
biA9IG4tPmxpc3QuZ2V0KCkpIHsKKyAgZm9yIChWYXJEZWNsTGlzdE5vZGUgKm4gPSB0aGlzOyBu
OyBuID0gbi0+bmV4dC5nZXQoKSkgewogICAgIG4tPnZhci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAg
S0pTX0NIRUNLRVhDRVBUSU9OVkFMVUUKICAgfQpAQCAtMTUzNSw3ICsxNTM1LDcgQEAgSlNWYWx1
ZSAqVmFyRGVjbExpc3ROb2RlOjpldmFsdWF0ZShFeGVjUwogCiB2b2lkIFZhckRlY2xMaXN0Tm9k
ZTo6cHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgZm9yIChWYXJEZWNsTGlz
dE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkKKyAgZm9yIChWYXJEZWNsTGlz
dE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKICAgICBuLT52YXItPnByb2Nl
c3NWYXJEZWNscyhleGVjKTsKIH0KIApAQCAtMTU0Niw3ICsxNTQ2LDcgQEAgQ29tcGxldGlvbiBW
YXJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZQogewogICBLSlNfQlJFQUtQT0lOVDsKIAotICAo
dm9pZCkgbGlzdC0+ZXZhbHVhdGUoZXhlYyk7CisgICh2b2lkKSBuZXh0LT5ldmFsdWF0ZShleGVj
KTsKICAgS0pTX0NIRUNLRVhDRVBUSU9OCiAKICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsKTsK
QEAgLTE1NTQsNyArMTU1NCw3IEBAIENvbXBsZXRpb24gVmFyU3RhdGVtZW50Tm9kZTo6ZXhlY3V0
ZShFeGUKIAogdm9pZCBWYXJTdGF0ZW1lbnROb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRl
ICpleGVjKQogewotICBsaXN0LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CisgIG5leHQtPnByb2Nl
c3NWYXJEZWNscyhleGVjKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEJsb2NrTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1NjIs
OCArMTU2Miw4IEBAIHZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEUKIEJs
b2NrTm9kZTo6QmxvY2tOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqcykKIHsKICAgaWYgKHMpIHsK
LSAgICBzb3VyY2UgPSBzLT5lbGVtZW50czsKLSAgICBzLT5lbGVtZW50cyA9IDA7CisgICAgc291
cmNlID0gcy0+bmV4dDsKKyAgICBzLT5uZXh0ID0gMDsKICAgICBzZXRMb2Mocy0+Zmlyc3RMaW5l
KCksIHMtPmxhc3RMaW5lKCksIHMtPnNvdXJjZUlkKCkpOwogICB9IGVsc2UgewogICAgIHNvdXJj
ZSA9IDA7CkBAIC0xOTg0LDE2ICsxOTg0LDE2IEBAIEpTVmFsdWUgKkNhc2VDbGF1c2VOb2RlOjpl
dmFsdWF0ZShFeGVjU3QKIC8vIEVDTUEgMTIuMTEKIENvbXBsZXRpb24gQ2FzZUNsYXVzZU5vZGU6
OmV2YWxTdGF0ZW1lbnRzKEV4ZWNTdGF0ZSAqZXhlYykKIHsKLSAgaWYgKGxpc3QpCi0gICAgcmV0
dXJuIGxpc3QtPmV4ZWN1dGUoZXhlYyk7CisgIGlmIChuZXh0KQorICAgIHJldHVybiBuZXh0LT5l
eGVjdXRlKGV4ZWMpOwogICBlbHNlCiAgICAgcmV0dXJuIENvbXBsZXRpb24oTm9ybWFsLCBqc1Vu
ZGVmaW5lZCgpKTsKIH0KIAogdm9pZCBDYXNlQ2xhdXNlTm9kZTo6cHJvY2Vzc1ZhckRlY2xzKEV4
ZWNTdGF0ZSAqZXhlYykKIHsKLSAgaWYgKGxpc3QpCi0gICAgbGlzdC0+cHJvY2Vzc1ZhckRlY2xz
KGV4ZWMpOworICBpZiAobmV4dCkKKyAgICBuZXh0LT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CiB9
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDbGF1c2VMaXN0Tm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDA4LDkgKzIwMDgsOSBAQCBKU1ZhbHVl
ICpDbGF1c2VMaXN0Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0CiAvLyBFQ01BIDEyLjExCiB2b2lkIENs
YXVzZUxpc3ROb2RlOjpwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKQogewotICBmb3Ig
KENsYXVzZUxpc3ROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm54LmdldCgpKQotICAgIGlmIChu
LT5jbCkKLSAgICAgIG4tPmNsLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CisgIGZvciAoQ2xhdXNl
TGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKKyAgICBpZiAobi0+Y2xh
dXNlKQorICAgICAgbi0+Y2xhdXNlLT5wcm9jZXNzVmFyRGVjbHMoZXhlYyk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYXNlQmxvY2tOb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDE5LDggKzIwMTksOCBAQCBDYXNlQmxvY2tOb2RlOjpD
YXNlQmxvY2tOb2RlKENsYXVzZUxpc3ROCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENs
YXVzZUxpc3ROb2RlICpsMikKIHsKICAgaWYgKGwxKSB7Ci0gICAgbGlzdDEgPSBsMS0+bng7Ci0g
ICAgbDEtPm54ID0gMDsKKyAgICBsaXN0MSA9IGwxLT5uZXh0OworICAgIGwxLT5uZXh0ID0gMDsK
ICAgfSBlbHNlIHsKICAgICBsaXN0MSA9IDA7CiAgIH0KQEAgLTIwMjgsOCArMjAyOCw4IEBAIENh
c2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE4KICAgZGVmID0gZDsKIAogICBp
ZiAobDIpIHsKLSAgICBsaXN0MiA9IGwyLT5ueDsKLSAgICBsMi0+bnggPSAwOworICAgIGxpc3Qy
ID0gbDItPm5leHQ7CisgICAgbDItPm5leHQgPSAwOwogICB9IGVsc2UgewogICAgIGxpc3QyID0g
MDsKICAgfQpAQCAtMjA1Miw4ICsyMDUyLDggQEAgQ29tcGxldGlvbiBDYXNlQmxvY2tOb2RlOjpl
dmFsQmxvY2soRXhlYwogICBDYXNlQ2xhdXNlTm9kZSAqY2xhdXNlOwogCiAgICAgd2hpbGUgKGEp
IHsKLSAgICAgIGNsYXVzZSA9IGEtPmNsYXVzZSgpOwotICAgICAgYSA9IGEtPm5leHQoKTsKKyAg
ICAgIGNsYXVzZSA9IGEtPmdldENsYXVzZSgpOworICAgICAgYSA9IGEtPmdldE5leHQoKTsKICAg
ICAgIHYgPSBjbGF1c2UtPmV2YWx1YXRlKGV4ZWMpOwogICAgICAgS0pTX0NIRUNLRVhDRVBUSU9O
CiAgICAgICBpZiAoc3RyaWN0RXF1YWwoZXhlYywgaW5wdXQsIHYpKSB7CkBAIC0yMDYxLDE4ICsy
MDYxLDE4IEBAIENvbXBsZXRpb24gQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2NrKEV4ZWMKIAlpZiAo
cmVzLmNvbXBsVHlwZSgpICE9IE5vcm1hbCkKIAkgIHJldHVybiByZXM7CiAJd2hpbGUgKGEpIHsK
LQkgIHJlcyA9IGEtPmNsYXVzZSgpLT5ldmFsU3RhdGVtZW50cyhleGVjKTsKKwkgIHJlcyA9IGEt
PmdldENsYXVzZSgpLT5ldmFsU3RhdGVtZW50cyhleGVjKTsKIAkgIGlmIChyZXMuY29tcGxUeXBl
KCkgIT0gTm9ybWFsKQogCSAgICByZXR1cm4gcmVzOwotCSAgYSA9IGEtPm5leHQoKTsKKwkgIGEg
PSBhLT5nZXROZXh0KCk7CiAJfQogCWJyZWFrOwogICAgICAgfQogICAgIH0KIAogICB3aGlsZSAo
YikgewotICAgIGNsYXVzZSA9IGItPmNsYXVzZSgpOwotICAgIGIgPSBiLT5uZXh0KCk7CisgICAg
Y2xhdXNlID0gYi0+Z2V0Q2xhdXNlKCk7CisgICAgYiA9IGItPmdldE5leHQoKTsKICAgICB2ID0g
Y2xhdXNlLT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgICBpZiAo
c3RyaWN0RXF1YWwoZXhlYywgaW5wdXQsIHYpKSB7CkBAIC0yMDkyLDExICsyMDkyLDExIEBAIENv
bXBsZXRpb24gQ2FzZUJsb2NrTm9kZTo6ZXZhbEJsb2NrKEV4ZWMKICAgYiA9IGxpc3QyLmdldCgp
OwogIHN0ZXAxODoKICAgd2hpbGUgKGIpIHsKLSAgICBjbGF1c2UgPSBiLT5jbGF1c2UoKTsKKyAg
ICBjbGF1c2UgPSBiLT5nZXRDbGF1c2UoKTsKICAgICByZXMgPSBjbGF1c2UtPmV2YWxTdGF0ZW1l
bnRzKGV4ZWMpOwogICAgIGlmIChyZXMuY29tcGxUeXBlKCkgIT0gTm9ybWFsKQogICAgICAgcmV0
dXJuIHJlczsKLSAgICBiID0gYi0+bmV4dCgpOworICAgIGIgPSBiLT5nZXROZXh0KCk7CiAgIH0K
IAogICAvLyBiYWlsIG91dCBvbiBlcnJvcgpAQCAtMjMwNSwxNiArMjMwNSwxOCBAQCBKU1ZhbHVl
ICpGdW5jRXhwck5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBTb3VyY2VFbGVtZW50c05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKK2ludCBTb3VyY2VFbGVtZW50c05vZGU6OmNvdW50ID0gMDsKKwogU291cmNlRWxlbWVu
dHNOb2RlOjpTb3VyY2VFbGVtZW50c05vZGUoU3RhdGVtZW50Tm9kZSAqczEpCi0gIDogZWxlbWVu
dChzMSksIGVsZW1lbnRzKHRoaXMpCisgIDogbm9kZShzMSksIG5leHQodGhpcykKIHsKICAgc2V0
TG9jKHMxLT5maXJzdExpbmUoKSwgczEtPmxhc3RMaW5lKCksIHMxLT5zb3VyY2VJZCgpKTsKIH0K
LSAKKwogU291cmNlRWxlbWVudHNOb2RlOjpTb3VyY2VFbGVtZW50c05vZGUoU291cmNlRWxlbWVu
dHNOb2RlICpzMSwgU3RhdGVtZW50Tm9kZSAqczIpCi0gIDogZWxlbWVudChzMiksIGVsZW1lbnRz
KHMxLT5lbGVtZW50cykKKyAgOiBub2RlKHMyKSwgbmV4dChzMS0+bmV4dCkKIHsKLSAgczEtPmVs
ZW1lbnRzID0gdGhpczsKKyAgczEtPm5leHQgPSB0aGlzOwogICBzZXRMb2MoczEtPmZpcnN0TGlu
ZSgpLCBzMi0+bGFzdExpbmUoKSwgczEtPnNvdXJjZUlkKCkpOwogfQogCkBAIC0yMzIzLDEzICsy
MzI1LDEzIEBAIENvbXBsZXRpb24gU291cmNlRWxlbWVudHNOb2RlOjpleGVjdXRlKEUKIHsKICAg
S0pTX0NIRUNLRVhDRVBUSU9OCiAKLSAgQ29tcGxldGlvbiBjMSA9IGVsZW1lbnQtPmV4ZWN1dGUo
ZXhlYyk7CisgIENvbXBsZXRpb24gYzEgPSBub2RlLT5leGVjdXRlKGV4ZWMpOwogICBLSlNfQ0hF
Q0tFWENFUFRJT047CiAgIGlmIChjMS5jb21wbFR5cGUoKSAhPSBOb3JtYWwpCiAgICAgcmV0dXJu
IGMxOwogICAKLSAgZm9yIChTb3VyY2VFbGVtZW50c05vZGUgKm4gPSBlbGVtZW50cy5nZXQoKTsg
bjsgbiA9IG4tPmVsZW1lbnRzLmdldCgpKSB7Ci0gICAgQ29tcGxldGlvbiBjMiA9IG4tPmVsZW1l
bnQtPmV4ZWN1dGUoZXhlYyk7CisgIGZvciAoU291cmNlRWxlbWVudHNOb2RlICpuID0gbmV4dC5n
ZXQoKTsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKKyAgICBDb21wbGV0aW9uIGMyID0gbi0+bm9k
ZS0+ZXhlY3V0ZShleGVjKTsKICAgICBpZiAoYzIuY29tcGxUeXBlKCkgIT0gTm9ybWFsKQogICAg
ICAgcmV0dXJuIGMyOwogICAgIC8vIFRoZSBzcGVjIHNheXMgdG8gcmV0dXJuIGMyIGhlcmUsIGJ1
dCBpdCBzZWVtcyB0aGF0IG1vemlsbGEgcmV0dXJucyBjMSBpZgpAQCAtMjM0NCwxNCArMjM0Niwx
NCBAQCBDb21wbGV0aW9uIFNvdXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZShFCiAvLyBFQ01BIDE0
CiB2b2lkIFNvdXJjZUVsZW1lbnRzTm9kZTo6cHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSAqZXhl
YykKIHsKLSAgZm9yIChTb3VyY2VFbGVtZW50c05vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+ZWxl
bWVudHMuZ2V0KCkpCi0gICAgbi0+ZWxlbWVudC0+cHJvY2Vzc0Z1bmNEZWNsKGV4ZWMpOworICBm
b3IgKFNvdXJjZUVsZW1lbnRzTm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5uZXh0LmdldCgpKQor
ICAgIG4tPm5vZGUtPnByb2Nlc3NGdW5jRGVjbChleGVjKTsKIH0KIAogdm9pZCBTb3VyY2VFbGVt
ZW50c05vZGU6OnByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpCiB7Ci0gIGZvciAoU291
cmNlRWxlbWVudHNOb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPmVsZW1lbnRzLmdldCgpKQotICAg
IG4tPmVsZW1lbnQtPnByb2Nlc3NWYXJEZWNscyhleGVjKTsKKyAgZm9yIChTb3VyY2VFbGVtZW50
c05vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5nZXQoKSkKKyAgICBuLT5ub2RlLT5wcm9j
ZXNzVmFyRGVjbHMoZXhlYyk7CiB9CiAKIFByb2dyYW1Ob2RlOjpQcm9ncmFtTm9kZShTb3VyY2VF
bGVtZW50c05vZGUgKnMpIDogRnVuY3Rpb25Cb2R5Tm9kZShzKQpJbmRleDoga2pzL25vZGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L0phdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0CmRpZmYgLXAgLXUgLXIxLjQ0IGtqcy9ub2Rlcy5o
Ci0tLSBranMvbm9kZXMuaAkxMyBEZWMgMjAwNSAyMToyNDo1MSAtMDAwMAkxLjQ0CisrKyBranMv
bm9kZXMuaAkyNyBEZWMgMjAwNSAwMToxNDowMSAtMDAwMApAQCAtMjYsNiArMjYsNyBAQAogI2Rl
ZmluZSBfTk9ERVNfSF8KIAogI2luY2x1ZGUgPGt4bWxjb3JlL1JlZlB0ci5oPgorI2luY2x1ZGUg
PGt4bWxjb3JlL0xpc3RSZWZQdHIuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKQEAgLTIx
OSwxNCArMjIwLDE1IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBFbGVtZW50Tm9kZSA6IHB1
YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEg
Y2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgQXJyYXlOb2RlIGN0b3IKLSAgICBFbGVtZW50
Tm9kZShpbnQgZSwgTm9kZSAqbikgOiBsaXN0KHRoaXMpLCBlbGlzaW9uKGUpLCBub2RlKG4pIHsg
fQorICAgIEVsZW1lbnROb2RlKGludCBlLCBOb2RlICpuKSA6IG5leHQodGhpcyksIGVsaXNpb24o
ZSksIG5vZGUobikgeyB9CiAgICAgRWxlbWVudE5vZGUoRWxlbWVudE5vZGUgKmwsIGludCBlLCBO
b2RlICpuKQotICAgICAgOiBsaXN0KGwtPmxpc3QpLCBlbGlzaW9uKGUpLCBub2RlKG4pIHsgbC0+
bGlzdCA9IHRoaXM7IH0KKyAgICAgIDogbmV4dChsLT5uZXh0KSwgZWxpc2lvbihlKSwgbm9kZShu
KSB7IGwtPm5leHQgPSB0aGlzOyB9CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpl
eGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPEVsZW1lbnROb2RlPiByZWxlYXNlTmV4dCgpIHsgcmV0dXJuIG5leHQu
cmVsZWFzZSgpOyB9CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5Tm9kZTsKLSAg
ICBSZWZQdHI8RWxlbWVudE5vZGU+IGxpc3Q7CisgICAgTGlzdFJlZlB0cjxFbGVtZW50Tm9kZT4g
bmV4dDsKICAgICBpbnQgZWxpc2lvbjsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZTsKICAgfTsKQEAg
LTIzNSw5ICsyMzcsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIEFycmF5Tm9k
ZShpbnQgZSkgOiBlbGVtZW50KDApLCBlbGlzaW9uKGUpLCBvcHQodHJ1ZSkgeyB9CiAgICAgQXJy
YXlOb2RlKEVsZW1lbnROb2RlICplbGUpCi0gICAgICA6IGVsZW1lbnQoZWxlLT5saXN0KSwgZWxp
c2lvbigwKSwgb3B0KGZhbHNlKSB7IGVsZS0+bGlzdCA9IDA7IH0KKyAgICAgIDogZWxlbWVudChl
bGUtPm5leHQpLCBlbGlzaW9uKDApLCBvcHQoZmFsc2UpIHsgZWxlLT5uZXh0ID0gMDsgfQogICAg
IEFycmF5Tm9kZShpbnQgZWxpLCBFbGVtZW50Tm9kZSAqZWxlKQotICAgICAgOiBlbGVtZW50KGVs
ZS0+bGlzdCksIGVsaXNpb24oZWxpKSwgb3B0KHRydWUpIHsgZWxlLT5saXN0ID0gMDsgfQorICAg
ICAgOiBlbGVtZW50KGVsZS0+bmV4dCksIGVsaXNpb24oZWxpKSwgb3B0KHRydWUpIHsgZWxlLT5u
ZXh0ID0gMDsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6
CkBAIC0yNzQsMjIgKzI3NiwyMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgUHJvcGVydHlM
aXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBp
cyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgT2JqZWN0TGl0ZXJhbE5v
ZGUgY3RvcgotICAgIFByb3BlcnR5TGlzdE5vZGUoUHJvcGVydHlOb2RlICpuKQsKLSAgICAgIDog
bm9kZShuKSwgbGlzdCh0aGlzKSB7IH0KKyAgICBQcm9wZXJ0eUxpc3ROb2RlKFByb3BlcnR5Tm9k
ZSAqbikKKyAgICAgIDogbm9kZShuKSwgbmV4dCh0aGlzKSB7IH0KICAgICBQcm9wZXJ0eUxpc3RO
b2RlKFByb3BlcnR5Tm9kZSAqbiwgUHJvcGVydHlMaXN0Tm9kZSAqbCkKLSAgICAgIDogbm9kZShu
KSwgbGlzdChsLT5saXN0KSB7IGwtPmxpc3QgPSB0aGlzOyB9CisgICAgICA6IG5vZGUobiksIG5l
eHQobC0+bmV4dCkgeyBsLT5uZXh0ID0gdGhpczsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4
ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAm
cykgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxQcm9wZXJ0eUxpc3ROb2RlPiByZWxlYXNlTmV4dCgp
IHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IE9iamVjdExpdGVyYWxOb2RlOwogICAgIFJlZlB0cjxQcm9wZXJ0eU5vZGU+IG5vZGU7Ci0gICAg
UmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IGxpc3Q7CisgICAgTGlzdFJlZlB0cjxQcm9wZXJ0eUxp
c3ROb2RlPiBuZXh0OwogICB9OwogCiAgIGNsYXNzIE9iamVjdExpdGVyYWxOb2RlIDogcHVibGlj
IE5vZGUgewogICBwdWJsaWM6CiAgICAgT2JqZWN0TGl0ZXJhbE5vZGUoKSA6IGxpc3QoMCkgeyB9
Ci0gICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlMaXN0Tm9kZSAqbCkgOiBsaXN0KGwtPmxp
c3QpIHsgbC0+bGlzdCA9IDA7IH0KKyAgICBPYmplY3RMaXRlcmFsTm9kZShQcm9wZXJ0eUxpc3RO
b2RlICpsKSA6IGxpc3QobC0+bmV4dCkgeyBsLT5uZXh0ID0gMDsgfQogICAgIEpTVmFsdWUgKmV2
YWx1YXRlKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSAmcykgY29uc3Q7CiAgIHByaXZhdGU6CkBAIC0zMzEsMTUgKzMzNCwxNiBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgY2xhc3MgQXJndW1lbnRMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAg
cHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwg
Y3JhY2tlZCBpbiB0aGUgQXJndW1lbnRzTm9kZSBjdG9yCi0gICAgQXJndW1lbnRMaXN0Tm9kZShO
b2RlICplKSA6IGxpc3QodGhpcyksIGV4cHIoZSkgeyB9CisgICAgQXJndW1lbnRMaXN0Tm9kZShO
b2RlICplKSA6IG5leHQodGhpcyksIGV4cHIoZSkgeyB9CiAgICAgQXJndW1lbnRMaXN0Tm9kZShB
cmd1bWVudExpc3ROb2RlICpsLCBOb2RlICplKQotICAgICAgOiBsaXN0KGwtPmxpc3QpLCBleHBy
KGUpIHsgbC0+bGlzdCA9IHRoaXM7IH0KKyAgICAgIDogbmV4dChsLT5uZXh0KSwgZXhwcihlKSB7
IGwtPm5leHQgPSB0aGlzOyB9CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVj
KTsKICAgICBMaXN0IGV2YWx1YXRlTGlzdChFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8QXJn
dW1lbnRMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsgfQog
ICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcmd1bWVudHNOb2RlOwotICAgIFJlZlB0cjxB
cmd1bWVudExpc3ROb2RlPiBsaXN0OworICAgIExpc3RSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4g
bmV4dDsKICAgICBSZWZQdHI8Tm9kZT4gZXhwcjsKICAgfTsKIApAQCAtMzQ3LDcgKzM1MSw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICBwdWJsaWM6CiAgICAgQXJndW1lbnRzTm9kZSgpIDogbGlzdCgw
KSB7IH0KICAgICBBcmd1bWVudHNOb2RlKEFyZ3VtZW50TGlzdE5vZGUgKmwpCi0gICAgICA6IGxp
c3QobC0+bGlzdCkgeyBsLT5saXN0ID0gMDsgfQorICAgICAgOiBsaXN0KGwtPm5leHQpIHsgbC0+
bmV4dCA9IDA7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAg
IExpc3QgZXZhbHVhdGVMaXN0KEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3Q7CkBAIC03NDEsMTAgKzc0NSwxMSBAQCBuYW1l
c3BhY2UgS0pTIHsKICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4
ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFyRGVjbHMoRXhlY1N0YXRlICpleGVjKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPFN0YXRMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSB7IHJldHVybiBuZXh0LnJlbGVh
c2UoKTsgfQogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDYXNlQ2xhdXNlTm9kZTsKICAg
ICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50OwotICAgIFJlZlB0cjxTdGF0TGlzdE5v
ZGU+IGxpc3Q7CisgICAgTGlzdFJlZlB0cjxTdGF0TGlzdE5vZGU+IG5leHQ7CiAgIH07CiAKICAg
Y2xhc3MgQXNzaWduRXhwck5vZGUgOiBwdWJsaWMgTm9kZSB7CkBAIC03NzIsMjcgKzc3NywyOCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgVmFyRGVjbExpc3ROb2RlIDogcHVibGljIE5vZGUg
ewogICBwdWJsaWM6CiAgICAgLy8gbGlzdCBwb2ludGVyIGlzIHRhaWwgb2YgYSBjaXJjdWxhciBs
aXN0LCBjcmFja2VkIGluIHRoZSBGb3JOb2RlL1ZhclN0YXRlbWVudE5vZGUgY3RvcgotICAgIFZh
ckRlY2xMaXN0Tm9kZShWYXJEZWNsTm9kZSAqdikgOiBsaXN0KHRoaXMpLCB2YXIodikge30KKyAg
ICBWYXJEZWNsTGlzdE5vZGUoVmFyRGVjbE5vZGUgKnYpIDogbmV4dCh0aGlzKSwgdmFyKHYpIHt9
CiAgICAgVmFyRGVjbExpc3ROb2RlKFZhckRlY2xMaXN0Tm9kZSAqbCwgVmFyRGVjbE5vZGUgKnYp
Ci0gICAgICA6IGxpc3QobC0+bGlzdCksIHZhcih2KSB7IGwtPmxpc3QgPSB0aGlzOyB9CisgICAg
ICA6IG5leHQobC0+bmV4dCksIHZhcih2KSB7IGwtPm5leHQgPSB0aGlzOyB9CiAgICAgSlNWYWx1
ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1Zh
ckRlY2xzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSAmcykgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxWYXJEZWNsTGlzdE5vZGU+IHJlbGVh
c2VOZXh0KCkgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KICAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgRm9yTm9kZTsKICAgICBmcmllbmQgY2xhc3MgVmFyU3RhdGVtZW50Tm9kZTsKLSAg
ICBSZWZQdHI8VmFyRGVjbExpc3ROb2RlPiBsaXN0OworICAgIExpc3RSZWZQdHI8VmFyRGVjbExp
c3ROb2RlPiBuZXh0OwogICAgIFJlZlB0cjxWYXJEZWNsTm9kZT4gdmFyOwogICB9OwogCiAgIGNs
YXNzIFZhclN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoK
LSAgICBWYXJTdGF0ZW1lbnROb2RlKFZhckRlY2xMaXN0Tm9kZSAqbCkgOiBsaXN0KGwtPmxpc3Qp
IHsgbC0+bGlzdCA9IDA7IH0KKyAgICBWYXJTdGF0ZW1lbnROb2RlKFZhckRlY2xMaXN0Tm9kZSAq
bCkgOiBuZXh0KGwtPm5leHQpIHsgbC0+bmV4dCA9IDA7IH0KICAgICB2aXJ0dWFsIENvbXBsZXRp
b24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzVmFy
RGVjbHMoRXhlY1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtICZzKSBjb25zdDsKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8VmFyRGVjbExpc3ROb2Rl
PiBsaXN0OworICAgIFJlZlB0cjxWYXJEZWNsTGlzdE5vZGU+IG5leHQ7CiAgIH07CiAKICAgY2xh
c3MgQmxvY2tOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtODYxLDcgKzg2Nyw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIEZvck5vZGUoTm9kZSAqZTEsIE5vZGUgKmUyLCBOb2RlICpl
MywgU3RhdGVtZW50Tm9kZSAqcykgOgogICAgICAgZXhwcjEoZTEpLCBleHByMihlMiksIGV4cHIz
KGUzKSwgc3RhdGVtZW50KHMpIHt9CiAgICAgRm9yTm9kZShWYXJEZWNsTGlzdE5vZGUgKmUxLCBO
b2RlICplMiwgTm9kZSAqZTMsIFN0YXRlbWVudE5vZGUgKnMpIDoKLSAgICAgIGV4cHIxKGUxLT5s
aXN0KSwgZXhwcjIoZTIpLCBleHByMyhlMyksIHN0YXRlbWVudChzKSB7IGUxLT5saXN0ID0gMDsg
fQorICAgICAgZXhwcjEoZTEtPm5leHQpLCBleHByMihlMiksIGV4cHIzKGUzKSwgc3RhdGVtZW50
KHMpIHsgZTEtPm5leHQgPSAwOyB9CiAgICAgdmlydHVhbCBDb21wbGV0aW9uIGV4ZWN1dGUoRXhl
Y1N0YXRlICpleGVjKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1ZhckRlY2xzKEV4ZWNTdGF0
ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29u
c3Q7CkBAIC05MzAsMzMgKzkzNiwzNCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBjbGFzcyBDYXNl
Q2xhdXNlTm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgIENhc2VDbGF1c2VOb2Rl
KE5vZGUgKmUpIDogZXhwcihlKSwgbGlzdCgwKSB7IH0KKyAgICBDYXNlQ2xhdXNlTm9kZShOb2Rl
ICplKSA6IGV4cHIoZSksIG5leHQoMCkgeyB9CiAgICAgQ2FzZUNsYXVzZU5vZGUoTm9kZSAqZSwg
U3RhdExpc3ROb2RlICpsKQotICAgICAgOiBleHByKGUpLCBsaXN0KGwtPmxpc3QpIHsgbC0+bGlz
dCA9IDA7IH0KKyAgICAgIDogZXhwcihlKSwgbmV4dChsLT5uZXh0KSB7IGwtPm5leHQgPSAwOyB9
CiAgICAgSlNWYWx1ZSAqZXZhbHVhdGUoRXhlY1N0YXRlICpleGVjKTsKICAgICBDb21wbGV0aW9u
IGV2YWxTdGF0ZW1lbnRzKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nl
c3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0gJnMpIGNvbnN0OwogICBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBleHBy
OwotICAgIFJlZlB0cjxTdGF0TGlzdE5vZGU+IGxpc3Q7CisgICAgUmVmUHRyPFN0YXRMaXN0Tm9k
ZT4gbmV4dDsKICAgfTsKIAogICBjbGFzcyBDbGF1c2VMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsK
ICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlz
dCwgY3JhY2tlZCBpbiB0aGUgQ2FzZUJsb2NrTm9kZSBjdG9yCi0gICAgQ2xhdXNlTGlzdE5vZGUo
Q2FzZUNsYXVzZU5vZGUgKmMpIDogY2woYyksIG54KHRoaXMpIHsgfQorICAgIENsYXVzZUxpc3RO
b2RlKENhc2VDbGF1c2VOb2RlICpjKSA6IGNsYXVzZShjKSwgbmV4dCh0aGlzKSB7IH0KICAgICBD
bGF1c2VMaXN0Tm9kZShDbGF1c2VMaXN0Tm9kZSAqbiwgQ2FzZUNsYXVzZU5vZGUgKmMpCi0gICAg
ICA6IGNsKGMpLCBueChuLT5ueCkgeyBuLT5ueCA9IHRoaXM7IH0KKyAgICAgIDogY2xhdXNlKGMp
LCBuZXh0KG4tPm5leHQpIHsgbi0+bmV4dCA9IHRoaXM7IH0KICAgICBKU1ZhbHVlICpldmFsdWF0
ZShFeGVjU3RhdGUgKmV4ZWMpOwotICAgIENhc2VDbGF1c2VOb2RlICpjbGF1c2UoKSBjb25zdCB7
IHJldHVybiBjbC5nZXQoKTsgfQotICAgIENsYXVzZUxpc3ROb2RlICpuZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbnguZ2V0KCk7IH0KKyAgICBDYXNlQ2xhdXNlTm9kZSAqZ2V0Q2xhdXNlKCkgY29uc3Qg
eyByZXR1cm4gY2xhdXNlLmdldCgpOyB9CisgICAgQ2xhdXNlTGlzdE5vZGUgKmdldE5leHQoKSBj
b25zdCB7IHJldHVybiBuZXh0LmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NWYXJE
ZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0gJnMpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8Q2xhdXNlTGlzdE5vZGU+IHJlbGVhc2VO
ZXh0KCkgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KICAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgQ2FzZUJsb2NrTm9kZTsKLSAgICBSZWZQdHI8Q2FzZUNsYXVzZU5vZGU+IGNsOwotICAg
IFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbng7CisgICAgUmVmUHRyPENhc2VDbGF1c2VOb2RlPiBj
bGF1c2U7CisgICAgTGlzdFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbmV4dDsKICAgfTsKIAogICBj
bGFzcyBDYXNlQmxvY2tOb2RlIDogcHVibGljIE5vZGUgewpAQCAtMTAyMSwxNyArMTAyOCwxOCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgcHVibGljOgogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWls
IG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgRnVuY0RlY2xOb2RlL0Z1bmNFeHBy
Tm9kZSBjdG9yCiAgICAgUGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlmaWVyICZpKSA6IGlkKGkp
LCBuZXh0KHRoaXMpIHsgfQotICAgIFBhcmFtZXRlck5vZGUoUGFyYW1ldGVyTm9kZSAqbGlzdCwg
Y29uc3QgSWRlbnRpZmllciAmaSkKLSAgICAgIDogaWQoaSksIG5leHQobGlzdC0+bmV4dCkgeyBs
aXN0LT5uZXh0ID0gdGhpczsgfQorICAgIFBhcmFtZXRlck5vZGUoUGFyYW1ldGVyTm9kZSAqbmV4
dCwgY29uc3QgSWRlbnRpZmllciAmaSkKKyAgICAgIDogaWQoaSksIG5leHQobmV4dC0+bmV4dCkg
eyBuZXh0LT5uZXh0ID0gdGhpczsgfQogICAgIEpTVmFsdWUgKmV2YWx1YXRlKEV4ZWNTdGF0ZSAq
ZXhlYyk7CiAgICAgSWRlbnRpZmllciBpZGVudCgpIHsgcmV0dXJuIGlkOyB9CiAgICAgUGFyYW1l
dGVyTm9kZSAqbmV4dFBhcmFtKCkgeyByZXR1cm4gbmV4dC5nZXQoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8UGFy
YW1ldGVyTm9kZT4gcmVsZWFzZU5leHQoKSB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsgfQogICBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBGdW5jRGVjbE5vZGU7CiAgICAgZnJpZW5kIGNsYXNz
IEZ1bmNFeHByTm9kZTsKICAgICBJZGVudGlmaWVyIGlkOwotICAgIFJlZlB0cjxQYXJhbWV0ZXJO
b2RlPiBuZXh0OworICAgIExpc3RSZWZQdHI8UGFyYW1ldGVyTm9kZT4gbmV4dDsKICAgfTsKIAog
ICAvLyBpbmhlcml0ZWQgYnkgUHJvZ3JhbU5vZGUKQEAgLTEwNzMsMTggKzEwODEsMjAgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgIC8vIEEgbGlua2VkIGxpc3Qgb2Ygc291cmNlIGVsZW1lbnQgbm9kZXMK
ICAgY2xhc3MgU291cmNlRWxlbWVudHNOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBw
dWJsaWM6CisgICAgICBzdGF0aWMgaW50IGNvdW50OwogICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0
YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgQmxvY2tOb2RlIChvciBzdWJj
bGFzcykgY3RvcgogICAgIFNvdXJjZUVsZW1lbnRzTm9kZShTdGF0ZW1lbnROb2RlICpzMSk7CiAg
ICAgU291cmNlRWxlbWVudHNOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqczEsIFN0YXRlbWVudE5v
ZGUgKnMyKTsKLQorICAgIAogICAgIENvbXBsZXRpb24gZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMp
OwogICAgIHZvaWQgcHJvY2Vzc0Z1bmNEZWNsKEV4ZWNTdGF0ZSAqZXhlYyk7CiAgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3NWYXJEZWNscyhFeGVjU3RhdGUgKmV4ZWMpOwogICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U291cmNl
RWxlbWVudHNOb2RlPiByZWxlYXNlTmV4dCgpIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAg
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrTm9kZTsKLSAgICBSZWZQdHI8U3RhdGVt
ZW50Tm9kZT4gZWxlbWVudDsgLy8gJ3RoaXMnIGVsZW1lbnQKLSAgICBSZWZQdHI8U291cmNlRWxl
bWVudHNOb2RlPiBlbGVtZW50czsgLy8gcG9pbnRlciB0byBuZXh0CisgICAgUmVmUHRyPFN0YXRl
bWVudE5vZGU+IG5vZGU7CisgICAgTGlzdFJlZlB0cjxTb3VyY2VFbGVtZW50c05vZGU+IG5leHQ7
CiAgIH07CiAKICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgRnVuY3Rpb25Cb2R5Tm9kZSB7
CkluZGV4OiBranMvbm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvSmF2YVNjcmlwdENvcmUva2pzL25vZGVzMnN0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjMKZGlmZiAtcCAtdSAtcjEuMjMga2pzL25vZGVzMnN0cmluZy5jcHAKLS0tIGtqcy9u
b2RlczJzdHJpbmcuY3BwCTEzIERlYyAyMDA1IDIxOjI0OjUyIC0wMDAwCTEuMjMKKysrIGtqcy9u
b2RlczJzdHJpbmcuY3BwCTI3IERlYyAyMDA1IDAxOjE0OjAxIC0wMDAwCkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBHcm91cE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcwogCiB2b2lkIEVs
ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7Ci0gIGZvciAoY29u
c3QgRWxlbWVudE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQoKSkgeworICBmb3Ig
KGNvbnN0IEVsZW1lbnROb2RlICpuID0gdGhpczsgbjsgbiA9IG4tPm5leHQuZ2V0KCkpIHsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG4tPmVsaXNpb247IGkrKykKICAgICAgIHMgPDwgIiwiOwog
ICAgIHMgPDwgbi0+bm9kZTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIFByb3BlcnR5TGlzdE5v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0CiB7CiAgIHMgPDwgbm9kZTsKICAgCi0gIGZvciAoY29uc3Qg
UHJvcGVydHlMaXN0Tm9kZSAqbiA9IGxpc3QuZ2V0KCk7IG47IG4gPSBuLT5saXN0LmdldCgpKQor
ICBmb3IgKGNvbnN0IFByb3BlcnR5TGlzdE5vZGUgKm4gPSBuZXh0LmdldCgpOyBuOyBuID0gbi0+
bmV4dC5nZXQoKSkKICAgICBzIDw8ICIsICIgPDwgbi0+bm9kZTsKIH0KIApAQCAtMjA0LDcgKzIw
NCw3IEBAIHZvaWQgRG90QWNjZXNzb3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHIKIHZvaWQgQXJn
dW1lbnRMaXN0Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewogICBzIDw8
IGV4cHI7Ci0gIGZvciAoQXJndW1lbnRMaXN0Tm9kZSAqbiA9IGxpc3QuZ2V0KCk7IG47IG4gPSBu
LT5saXN0LmdldCgpKQorICBmb3IgKEFyZ3VtZW50TGlzdE5vZGUgKm4gPSBuZXh0LmdldCgpOyBu
OyBuID0gbi0+bmV4dC5nZXQoKSkKICAgICBzIDw8ICIsICIgPDwgbi0+ZXhwcjsKIH0KIApAQCAt
NTI1LDcgKzUyNSw3IEBAIHZvaWQgQ29tbWFOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMK
IAogdm9pZCBTdGF0TGlzdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QKIHsK
LSAgZm9yIChjb25zdCBTdGF0TGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bGlzdC5nZXQo
KSkKKyAgZm9yIChjb25zdCBTdGF0TGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dC5n
ZXQoKSkKICAgICBzIDw8IG4tPnN0YXRlbWVudDsKIH0KIApAQCAtNTQyLDEzICs1NDIsMTMgQEAg
dm9pZCBWYXJEZWNsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtIAogdm9pZCBWYXJEZWNsTGlz
dE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSAmcykgY29uc3QKIHsKICAgcyA8PCB2YXI7Ci0g
IGZvciAoVmFyRGVjbExpc3ROb2RlICpuID0gbGlzdC5nZXQoKTsgbjsgbiA9IG4tPmxpc3QuZ2V0
KCkpCisgIGZvciAoVmFyRGVjbExpc3ROb2RlICpuID0gbmV4dC5nZXQoKTsgbjsgbiA9IG4tPm5l
eHQuZ2V0KCkpCiAgICAgcyA8PCAiLCAiIDw8IG4tPnZhcjsKIH0KIAogdm9pZCBWYXJTdGF0ZW1l
bnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7Ci0gIHMgPDwgU291cmNl
U3RyZWFtOjpFbmRsIDw8ICJ2YXIgIiA8PCBsaXN0IDw8ICI7IjsKKyAgcyA8PCBTb3VyY2VTdHJl
YW06OkVuZGwgPDwgInZhciAiIDw8IG5leHQgPDwgIjsiOwogfQogCiB2b2lkIEJsb2NrTm9kZTo6
c3RyZWFtVG8oU291cmNlU3RyZWFtICZzKSBjb25zdApAQCAtNjUwLDI1ICs2NTAsMjUgQEAgdm9p
ZCBDYXNlQ2xhdXNlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZQogICBlbHNlCiAgICAgcyA8PCAi
ZGVmYXVsdCI7CiAgIHMgPDwgIjoiIDw8IFNvdXJjZVN0cmVhbTo6SW5kZW50OwotICBpZiAobGlz
dCkKLSAgICBzIDw8IGxpc3Q7CisgIGlmIChuZXh0KQorICAgIHMgPDwgbmV4dDsKICAgcyA8PCBT
b3VyY2VTdHJlYW06OlVuaW5kZW50OwogfQogCiB2b2lkIENsYXVzZUxpc3ROb2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlYW0gJnMpIGNvbnN0CiB7Ci0gIGZvciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUg
Km4gPSB0aGlzOyBuOyBuID0gbi0+bmV4dCgpKQotICAgIHMgPDwgbi0+Y2xhdXNlKCk7CisgIGZv
ciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+Z2V0TmV4dCgpKQor
ICAgIHMgPDwgbi0+Z2V0Q2xhdXNlKCk7CiB9CiAKIHZvaWQgQ2FzZUJsb2NrTm9kZTo6c3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewotICBmb3IgKGNvbnN0IENsYXVzZUxpc3ROb2Rl
ICpuID0gbGlzdDEuZ2V0KCk7IG47IG4gPSBuLT5uZXh0KCkpCi0gICAgcyA8PCBuLT5jbGF1c2Uo
KTsKKyAgZm9yIChjb25zdCBDbGF1c2VMaXN0Tm9kZSAqbiA9IGxpc3QxLmdldCgpOyBuOyBuID0g
bi0+Z2V0TmV4dCgpKQorICAgIHMgPDwgbi0+Z2V0Q2xhdXNlKCk7CiAgIGlmIChkZWYpCiAgICAg
cyA8PCBkZWY7Ci0gIGZvciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUgKm4gPSBsaXN0Mi5nZXQoKTsg
bjsgbiA9IG4tPm5leHQoKSkKLSAgICBzIDw8IG4tPmNsYXVzZSgpOworICBmb3IgKGNvbnN0IENs
YXVzZUxpc3ROb2RlICpuID0gbGlzdDIuZ2V0KCk7IG47IG4gPSBuLT5nZXROZXh0KCkpCisgICAg
cyA8PCBuLT5nZXRDbGF1c2UoKTsKIH0KIAogdm9pZCBTd2l0Y2hOb2RlOjpzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0gJnMpIGNvbnN0CkBAIC03MTcsNiArNzE3LDYgQEAgdm9pZCBGdW5jRXhwck5vZGU6
OnN0cmVhbVRvKFNvdXJjZVN0cmVhbQogCiB2b2lkIFNvdXJjZUVsZW1lbnRzTm9kZTo6c3RyZWFt
VG8oU291cmNlU3RyZWFtICZzKSBjb25zdAogewotICBmb3IgKGNvbnN0IFNvdXJjZUVsZW1lbnRz
Tm9kZSAqbiA9IHRoaXM7IG47IG4gPSBuLT5lbGVtZW50cy5nZXQoKSkKLSAgICBzIDw8IG4tPmVs
ZW1lbnQ7CisgIGZvciAoY29uc3QgU291cmNlRWxlbWVudHNOb2RlICpuID0gdGhpczsgbjsgbiA9
IG4tPm5leHQuZ2V0KCkpCisgICAgcyA8PCBuLT5ub2RlOwogfQpJbmRleDoga3htbGNvcmUvTGlz
dFJlZlB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt4bWxjb3JlL0xpc3RSZWZQdHIuaApkaWZm
IC1OIGt4bWxjb3JlL0xpc3RSZWZQdHIuaAotLS0ga3htbGNvcmUvTGlzdFJlZlB0ci5oCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGt4bWxjb3JlL0xpc3RSZWZQdHIuaAkyNyBEZWMgMjAw
NSAwMToxNDowMSAtMDAwMApAQCAtMCwwICsxLDU5IEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJh
c2ljLW9mZnNldDogNCAtKi0KKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBs
aWJyYXJpZXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0ZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBLWE1MQ09SRV9MSVNUX1JFRl9QVFJfSAorI2RlZmluZSBLWE1M
Q09SRV9MSVNUX1JFRl9QVFJfSAorCisjaW5jbHVkZSA8a3htbGNvcmUvUmVmUHRyLmg+CisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgS1hNTENvcmUgeworCisgICAgLy8gU3BlY2lh
bGl6ZWQgdmVyc2lvbiBvZiBSZWZQdHIgZGVzZ2luZWQgZm9yIHVzZSBpbiBzaW5nbHktbGlua2Vk
IGxpc3RzLiAKKyAgICAvLyBEZXJlZnMgdGhlIGxpc3QgaXRlcmF0aXZlbHkgdG8gYXZvaWQgcmVj
dXJzaXZlIGRlcmVmaW5nIHRoYXQgY2FuIG92ZXJmbG93IHRoZSBzdGFjay4KKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gY2xhc3MgTGlzdFJlZlB0ciA6IHB1YmxpYyBSZWZQdHI8VD4KKyAgICB7
CisgICAgcHVibGljOgorICAgICAgICBMaXN0UmVmUHRyKCkgOiBSZWZQdHI8VD4oKSB7fQorICAg
ICAgICBMaXN0UmVmUHRyKFQgKnB0cikgOiBSZWZQdHI8VD4ocHRyKSB7fQorICAgICAgICBMaXN0
UmVmUHRyKGNvbnN0IFJlZlB0cjxUPiYgbykgOiBSZWZQdHI8VD4obykge30KKyAgICAgICAgLy8g
c2VlIGNvbW1lbnQgaW4gUGFzc1JlZlB0ci5oIGZvciB3aHkgdGhpcyB0YWtlcyBjb25zdCByZWZl
cmVuY2UKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IExpc3RSZWZQdHIoY29uc3QgUGFz
c1JlZlB0cjxVPiYgbykgOiBSZWZQdHI8VD4obykge30KKworICAgICAgICB+TGlzdFJlZlB0cigp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxUPiByZWFwZXIgPSB0aGlzLT5yZWxlYXNlKCk7CisgICAg
ICAgICAgICB3aGlsZSAocmVhcGVyICYmIHJlYXBlci0+cmVmY291bnQoKSA9PSAxKQorICAgICAg
ICAgICAgICAgIHJlYXBlciA9IHJlYXBlci0+cmVsZWFzZU5leHQoKTsgLy8gaW1wbGljaXRseSBw
cm90ZWN0cyByZWFwZXItPm5leHQsIHRoZW4gZGVyZWZzIHJlYXBlcgorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBMaXN0UmVmUHRyJiBvcGVyYXRvcj0oVCAqb3B0cikgeyBSZWZQdHI8VD46
Om9wZXJhdG9yPShvcHRyKTsgcmV0dXJuICp0aGlzOyB9CisgICAgICAgIExpc3RSZWZQdHImIG9w
ZXJhdG9yPShjb25zdCBSZWZQdHI8VD4mIG8pIHsgUmVmUHRyPFQ+OjpvcGVyYXRvcj0obyk7IHJl
dHVybiAqdGhpczsgfQorICAgICAgICBMaXN0UmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgUGFzc1Jl
ZlB0cjxUPiYgbykgeyBSZWZQdHI8VD46Om9wZXJhdG9yPShvKTsgcmV0dXJuICp0aGlzOyB9Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBMaXN0UmVmUHRyJiBvcGVyYXRvcj0oY29uc3Qg
UmVmUHRyPFU+JiBvKSB7IFJlZlB0cjxUPjo6b3BlcmF0b3I9KG8pOyByZXR1cm4gKnRoaXM7IH0K
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IExpc3RSZWZQdHImIG9wZXJhdG9yPShjb25z
dCBQYXNzUmVmUHRyPFU+JiBvKSB7IFJlZlB0cjxUPjo6b3BlcmF0b3I9KG8pOyByZXR1cm4gKnRo
aXM7IH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBLWE1MQ29yZQorCit1c2luZyBLWE1MQ29y
ZTo6TGlzdFJlZlB0cjsKKworI2VuZGlmIC8vIEtYTUxDT1JFX0xJU1RfUkVGX1BUUl9ICkluZGV4
OiBreG1sY29yZS9SZWZQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvSmF2YVNj
cmlwdENvcmUva3htbGNvcmUvUmVmUHRyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlm
ZiAtcCAtdSAtcjEuMTIga3htbGNvcmUvUmVmUHRyLmgKLS0tIGt4bWxjb3JlL1JlZlB0ci5oCTI1
IERlYyAyMDA1IDA5OjIyOjM1IC0wMDAwCTEuMTIKKysrIGt4bWxjb3JlL1JlZlB0ci5oCTI3IERl
YyAyMDA1IDAxOjE0OjAxIC0wMDAwCkBAIC00NCw2ICs0NCw4IEBAIG5hbWVzcGFjZSBLWE1MQ29y
ZSB7CiAgICAgICAgIAogICAgICAgICBUICpnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQog
ICAgICAgICAKKyAgICAgICAgUGFzc1JlZlB0cjxUPiByZWxlYXNlKCkgeyBQYXNzUmVmUHRyPFQ+
IHRtcCA9IGFkb3B0UmVmKG1fcHRyKTsgbV9wdHIgPSAwOyByZXR1cm4gdG1wOyB9CisKICAgICAg
ICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CiAgICAgICAgIFQgKm9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogICAgICAgICAK
</data>
<flag name="review"
          id="1106"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>