<?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>70565</bug_id>
          
          <creation_ts>2011-10-20 17:12:03 -0700</creation_ts>
          <short_desc>HashMap should support OwnPtr for mapped values</short_desc>
          <delta_ts>2011-12-03 20:02:48 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>71875</dependson>
    
    <dependson>72470</dependson>
    
    <dependson>72473</dependson>
    
    <dependson>72474</dependson>
    
    <dependson>72475</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>adamk</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>488011</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-20 17:12:03 -0700</bug_when>
    <thetext>We need some traits hacks to make HashMap work well with OwnPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488061</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-20 18:10:42 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; We need some traits hacks to make HashMap work well with OwnPtr.

I presume for values, not keys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488583</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-21 13:03:54 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; We need some traits hacks to make HashMap work well with OwnPtr.
&gt; 
&gt; I presume for values, not keys.

I think just supporting keys is sufficient in most usages.

By the way, it&apos;ll be nice if containers that didn&apos;t support OwnPtr either had a comment or spit out a compilation error when OwnPtr is used in key or value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489701</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-24 15:27:52 -0700</bug_when>
    <thetext>There&apos;s more trouble here than just porting over VectorTraits&lt;OwnPtr&gt; to HashTraits&lt;OwnPtr&gt;.  Besides needing to teach HashTable how to copy an OwnPtr, the interface would also need to be tweaked to do the OwnPtr -&gt; raw ptr or OwnPtr -&gt; PassOwnPtr conversion.  For example, some problematic methods:

MappedType get(const KeyType&amp;) const;
MappedType take(const KeyType&amp;);
pair&lt;iterator, bool&gt; set(const KeyType&amp;, const MappedType&amp;);
pair&lt;iterator, bool&gt; add(const KeyType&amp;, const MappedType&amp;);

All of these present some problems if MappedType were to be OwnPtr&lt;T&gt;, problems that aren&apos;t present in Vector&lt;OwnPtr&lt;T&gt; &gt; due to the latter&apos;s use of references and pointers in its interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489726</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-24 15:55:14 -0700</bug_when>
    <thetext>The easiest solution that comes to mind would be to write a wrapper around HashMap (OwnPtrHashMap?) that takes care of the lifetime management issues and exposes a HashMap-like interface with a few tweaks (e.g., take() should return a PassOwnPtr, set and add should take PassOwnPtrs).  This would require a lot of copying of interface code, but most of the implementation could still be shared with HashMap.

Darin, how does that strike you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489738</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-24 16:02:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; The easiest solution that comes to mind would be to write a wrapper around HashMap (OwnPtrHashMap?) that takes care of the lifetime management issues and exposes a HashMap-like interface with a few tweaks (e.g., take() should return a PassOwnPtr, set and add should take PassOwnPtrs).

We should see how much like RefPtrHashMap we can make this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498652</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-08 22:28:05 -0800</bug_when>
    <thetext>I started working on it. It’s easier than it sounds.

I am almost certain that it’s the *values* that we need OwnPtr for. All those cases where we use deleteAllValues are the things that cause trouble.

&gt; It&apos;ll be nice if containers that didn&apos;t support OwnPtr either had a comment or spit out a compilation error when OwnPtr is used in key or value.

What’s the current status on this? I thought there was a compilation error if you tried to use an OwnPtr as a key already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499510</commentid>
    <comment_count>7</comment_count>
      <attachid>114400</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-09 17:16:25 -0800</bug_when>
    <thetext>Created attachment 114400
Snapshot of work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499515</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-11-09 17:20:42 -0800</bug_when>
    <thetext>webkit-patch upload -m &quot;attachment name&quot;
will allow you to set the attachment title when uploading if that&apos;s useful to you. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500869</commentid>
    <comment_count>9</comment_count>
      <attachid>114722</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-11 10:04:58 -0800</bug_when>
    <thetext>Created attachment 114722
Newer snapshot of work in progress (to be landed in many separate pieces)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500870</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-11-11 10:05:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; webkit-patch upload -m &quot;attachment name&quot;
&gt; will allow you to set the attachment title when uploading if that&apos;s useful to you. :)

Thanks. It is useful (if I remember to use it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514611</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-03 20:00:46 -0800</bug_when>
    <thetext>In and working as of r101942.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514612</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-03 20:02:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; The easiest solution that comes to mind would be to write a wrapper around HashMap (OwnPtrHashMap?) that takes care of the lifetime management issues and exposes a HashMap-like interface with a few tweaks (e.g., take() should return a PassOwnPtr, set and add should take PassOwnPtrs).  This would require a lot of copying of interface code, but most of the implementation could still be shared with HashMap.

What makes the wrapper solution unpleasant and perhaps impractical is the fact that our HashMap class has an iterator, and you can get directly at values in the map through those iterators. The values inside the map need to be OwnPtr. If we made them be raw pointers, then we’d either non-lifetime-safe access to the pointers through the iterators, or we’d have to do some unsafe type punning to treat the raw pointers as OwnPtr. By making the actual entries in the hash table be OwnPtr, those issues don’t come up.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114400</attachid>
            <date>2011-11-09 17:16:25 -0800</date>
            <delta_ts>2011-11-11 10:04:54 -0800</delta_ts>
            <desc>Snapshot of work in progress</desc>
            <filename>bug-70565-20111109171632.patch</filename>
            <type>text/plain</type>
            <size>10572</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5OTc0MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsK
IAljbGFzc2VzID0gewogCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ1OworCW9iamVjdFZlcnNpb24g
PSA0NjsKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlv
biAqLwpAQCAtMzAzNiwxMCArMzAzNiwxMCBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0
dHJpYnV0ZXMgPSB7CiAJCQkJQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gWUVT
OwotCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNDIwOworCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAw
NDQwOwogCQkJfTsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjc3MTA4OTAyQUZF
MDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJKYXZh
U2NyaXB0Q29yZSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOwor
CQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4yIjsKIAkJCWRldmVsb3BtZW50UmVn
aW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25S
ZWdpb25zID0gKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlckNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwCShyZXZpc2lvbiA5OTc0MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDEyICszMiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogU291cmNlUHJvdmlkZXJDYWNo
ZTo6flNvdXJjZVByb3ZpZGVyQ2FjaGUoKQogewotICAgIGNsZWFyKCk7CiB9CiAKIHZvaWQgU291
cmNlUHJvdmlkZXJDYWNoZTo6Y2xlYXIoKQogewotICAgIGRlbGV0ZUFsbFZhbHVlcyhtX21hcCk7
CiAgICAgbV9tYXAuY2xlYXIoKTsKICAgICBtX2NvbnRlbnRCeXRlU2l6ZSA9IDA7CiB9CkBAIC00
OSw3ICs0Nyw4IEBAIHVuc2lnbmVkIFNvdXJjZVByb3ZpZGVyQ2FjaGU6OmJ5dGVTaXplKCkKIAog
dm9pZCBTb3VyY2VQcm92aWRlckNhY2hlOjphZGQoaW50IHNvdXJjZVBvc2l0aW9uLCBQYXNzT3du
UHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtPiBpdGVtLCB1bnNpZ25lZCBzaXplKQogewotICAg
IG1fbWFwLmFkZChzb3VyY2VQb3NpdGlvbiwgaXRlbS5sZWFrUHRyKCkpOworICAgIEFTU0VSVCgh
bV9tYXAuY29udGFpbnMoc291cmNlUG9zaXRpb24pKTsKKyAgICBtX21hcC5hZGQoc291cmNlUG9z
aXRpb24sIGl0ZW0pOwogICAgIG1fY29udGVudEJ5dGVTaXplICs9IHNpemU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNoZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXJDYWNo
ZS5oCShyZXZpc2lvbiA5OTc0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlUHJvdmlkZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw5IEBACiAjZGVm
aW5lIFNvdXJjZVByb3ZpZGVyQ2FjaGVfaAogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNs
dWRlICJTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
MzUsNyArMzcsNyBAQCBjbGFzcyBTb3VyY2VQcm92aWRlckNhY2hlSXRlbTsKIAogY2xhc3MgU291
cmNlUHJvdmlkZXJDYWNoZSB7CiBwdWJsaWM6Ci0gICAgU291cmNlUHJvdmlkZXJDYWNoZSgpIDog
bV9jb250ZW50Qnl0ZVNpemUoMCkge30KKyAgICBTb3VyY2VQcm92aWRlckNhY2hlKCkgOiBtX2Nv
bnRlbnRCeXRlU2l6ZSgwKSB7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB+U291cmNlUHJvdmlk
ZXJDYWNoZSgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhcigpOwpAQCAtNDQs
NyArNDYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0qIGdl
dChpbnQgc291cmNlUG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmdldChzb3VyY2VQb3Np
dGlvbik7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNoTWFwPGludCwgU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0qPiBtX21hcDsKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtPiA+IG1fbWFwOwogICAgIHVuc2lnbmVkIG1fY29udGVudEJ5dGVTaXplOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9IYXNoTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9IYXNoTWFwLmgJKHJldmlzaW9uIDk5NzQwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDYgKzQyLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFs
dWVUcmFpdHM6OlRyYWl0VHlwZSBWYWx1ZVR5cGU7CiAKICAgICBwcml2YXRlOgorICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIE1hcHBlZFRyYWl0czo6UGFzc1R5cGUgTWFwcGVkUGFzc1R5cGU7Cisg
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgTWFwcGVkVHJhaXRzOjpQZWVrVHlwZSBNYXBwZWRQZWVr
VHlwZTsKKwogICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFzaEZ1bmN0aW9uczsKIAogICAgICAg
ICB0eXBlZGVmIEhhc2hUYWJsZTxLZXlUeXBlLCBWYWx1ZVR5cGUsIFBhaXJGaXJzdEV4dHJhY3Rv
cjxWYWx1ZVR5cGU+LApAQCAtNjYsMTcgKzY5LDE3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBpdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmKTsKICAgICAgICAgY29uc3RfaXRlcmF0b3Ig
ZmluZChjb25zdCBLZXlUeXBlJikgY29uc3Q7CiAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3Qg
S2V5VHlwZSYpIGNvbnN0OwotICAgICAgICBNYXBwZWRUeXBlIGdldChjb25zdCBLZXlUeXBlJikg
Y29uc3Q7CisgICAgICAgIE1hcHBlZFBlZWtUeXBlIGdldChjb25zdCBLZXlUeXBlJikgY29uc3Q7
CiAKICAgICAgICAgLy8gcmVwbGFjZXMgdmFsdWUgYnV0IG5vdCBrZXkgaWYga2V5IGlzIGFscmVh
ZHkgcHJlc2VudAogICAgICAgICAvLyByZXR1cm4gdmFsdWUgaXMgYSBwYWlyIG9mIHRoZSBpdGVy
YXRvciB0byB0aGUga2V5IGxvY2F0aW9uLCAKICAgICAgICAgLy8gYW5kIGEgYm9vbGVhbiB0aGF0
J3MgdHJ1ZSBpZiBhIG5ldyB2YWx1ZSB3YXMgYWN0dWFsbHkgYWRkZWQKLSAgICAgICAgcGFpcjxp
dGVyYXRvciwgYm9vbD4gc2V0KGNvbnN0IEtleVR5cGUmLCBjb25zdCBNYXBwZWRUeXBlJik7IAor
ICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBzZXQoY29uc3QgS2V5VHlwZSYsIE1hcHBlZFBh
c3NUeXBlKTsKIAogICAgICAgICAvLyBkb2VzIG5vdGhpbmcgaWYga2V5IGlzIGFscmVhZHkgcHJl
c2VudAogICAgICAgICAvLyByZXR1cm4gdmFsdWUgaXMgYSBwYWlyIG9mIHRoZSBpdGVyYXRvciB0
byB0aGUga2V5IGxvY2F0aW9uLCAKICAgICAgICAgLy8gYW5kIGEgYm9vbGVhbiB0aGF0J3MgdHJ1
ZSBpZiBhIG5ldyB2YWx1ZSB3YXMgYWN0dWFsbHkgYWRkZWQKLSAgICAgICAgcGFpcjxpdGVyYXRv
ciwgYm9vbD4gYWRkKGNvbnN0IEtleVR5cGUmLCBjb25zdCBNYXBwZWRUeXBlJik7IAorICAgICAg
ICBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29uc3QgS2V5VHlwZSYsIE1hcHBlZFBhc3NUeXBl
KTsKIAogICAgICAgICB2b2lkIHJlbW92ZShjb25zdCBLZXlUeXBlJik7CiAgICAgICAgIHZvaWQg
cmVtb3ZlKGl0ZXJhdG9yKTsKQEAgLTk5LDEyICsxMDIsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIC8vICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVCYpOwogICAgICAgICAvLyAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlVHlwZSYsIGNvbnN0IFQmKTsKICAgICAgICAg
Ly8gICBzdGF0aWMgdHJhbnNsYXRlKFZhbHVlVHlwZSYsIGNvbnN0IFQmLCB1bnNpZ25lZCBoYXNo
Q29kZSk7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xh
dG9yPiBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29uc3QgVCYsIGNvbnN0IE1hcHBlZFR5cGUm
KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+
IHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBUJiwgTWFwcGVkUGFzc1R5cGUpOwogCiAg
ICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gaW5saW5lQWRkKGNvbnN0IEtleVR5cGUmLCBjb25z
dCBNYXBwZWRUeXBlJik7CisgICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGlubGluZUFkZChj
b25zdCBLZXlUeXBlJiwgTWFwcGVkUGFzc1R5cGUpOwogCiAgICAgICAgIEhhc2hUYWJsZVR5cGUg
bV9pbXBsOwogICAgIH07CkBAIC0xMTcsMTAgKzEyMCwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICBzdHJ1Y3QgSGFzaE1hcFRyYW5zbGF0b3IgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZh
bHVlVHlwZTo6Zmlyc3RfdHlwZSBLZXlUeXBlOwogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZh
bHVlVHlwZTo6c2Vjb25kX3R5cGUgTWFwcGVkVHlwZTsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBWYWx1ZVRyYWl0czo6U2Vjb25kVHJhaXRzOjpQYXNzVHlwZSBNYXBwZWRQYXNzVHlwZTsKIAog
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXlUeXBlJiBrZXkpIHsgcmV0dXJu
IEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5KTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBLZXlUeXBlJiBhLCBjb25zdCBLZXlUeXBlJiBiKSB7IHJldHVybiBIYXNoRnVuY3Rpb25z
OjplcXVhbChhLCBiKTsgfQotICAgICAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVmFsdWVUeXBl
JiBsb2NhdGlvbiwgY29uc3QgS2V5VHlwZSYga2V5LCBjb25zdCBNYXBwZWRUeXBlJiBtYXBwZWQp
CisgICAgICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShWYWx1ZVR5cGUmIGxvY2F0aW9uLCBjb25z
dCBLZXlUeXBlJiBrZXksIE1hcHBlZFBhc3NUeXBlIG1hcHBlZCkKICAgICAgICAgewogICAgICAg
ICAgICAgbG9jYXRpb24uZmlyc3QgPSBrZXk7CiAgICAgICAgICAgICBsb2NhdGlvbi5zZWNvbmQg
PSBtYXBwZWQ7CkBAIC0yMzYsMTUgKzI0MCwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5
cGVuYW1lIFg+CiAgICAgaW5saW5lIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6aXRlcmF0b3IsIGJvb2w+Ci0gICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aW5saW5lQWRk
KGNvbnN0IEtleVR5cGUmIGtleSwgY29uc3QgTWFwcGVkVHlwZSYgbWFwcGVkKSAKKyAgICBIYXNo
TWFwPFQsIFUsIFYsIFcsIFg+OjppbmxpbmVBZGQoY29uc3QgS2V5VHlwZSYga2V5LCBNYXBwZWRQ
YXNzVHlwZSBtYXBwZWQpIAogICAgIHsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwVHJhbnNsYXRv
cjxWYWx1ZVR5cGUsIFZhbHVlVHJhaXRzLCBIYXNoRnVuY3Rpb25zPiBUcmFuc2xhdG9yVHlwZTsK
LSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8S2V5VHlwZSwgTWFwcGVkVHlwZSwg
VHJhbnNsYXRvclR5cGU+KGtleSwgbWFwcGVkKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1w
bGF0ZSBhZGQ8S2V5VHlwZSwgTWFwcGVkUGFzc1R5cGUsIFRyYW5zbGF0b3JUeXBlPihrZXksIG1h
cHBlZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KICAgICBwYWlyPHR5cGVuYW1lIEhhc2hN
YXA8VCwgVSwgViwgVywgWD46Oml0ZXJhdG9yLCBib29sPgotICAgIEhhc2hNYXA8VCwgVSwgViwg
VywgWD46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkg
CisgICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c2V0KGNvbnN0IEtleVR5cGUmIGtleSwgTWFw
cGVkUGFzc1R5cGUgbWFwcGVkKSAKICAgICB7CiAgICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+
IHJlc3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0LnNl
Y29uZCkgewpAQCAtMjU3LDcgKzI2MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1l
IFg+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVFlQRSwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+
CiAgICAgcGFpcjx0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppdGVyYXRvciwgYm9v
bD4KLSAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjphZGQoY29uc3QgVFlQRSYga2V5LCBjb25z
dCBNYXBwZWRUeXBlJiB2YWx1ZSkKKyAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjphZGQoY29u
c3QgVFlQRSYga2V5LCBNYXBwZWRQYXNzVHlwZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHR5cGVk
ZWYgSGFzaE1hcFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHlwZSwgVmFsdWVUcmFpdHMsIFRZUEUs
IEhhc2hUcmFuc2xhdG9yPiBBZGFwdGVyOwogICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRl
IGFkZFBhc3NpbmdIYXNoQ29kZTxUWVBFLCBNYXBwZWRUeXBlLCBBZGFwdGVyPihrZXksIHZhbHVl
KTsKQEAgLTI2NSwxOSArMjY5LDE5IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUg
WD4KICAgICBwYWlyPHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Oml0ZXJhdG9yLCBi
b29sPgotICAgIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmFkZChjb25zdCBLZXlUeXBlJiBrZXks
IGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkKKyAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojph
ZGQoY29uc3QgS2V5VHlwZSYga2V5LCBNYXBwZWRQYXNzVHlwZSBtYXBwZWQpCiAgICAgewogICAg
ICAgICByZXR1cm4gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBNYXBwZWRUcmFpdHM+Ci0gICAgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBwZWRU
cmFpdHM+OjpNYXBwZWRUeXBlCisgICAgdHlwZW5hbWUgSGFzaE1hcDxULCBVLCBWLCBXLCBNYXBw
ZWRUcmFpdHM+OjpNYXBwZWRQZWVrVHlwZQogICAgIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVk
VHJhaXRzPjo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKICAgICB7CiAgICAgICAgIFZh
bHVlVHlwZSogZW50cnkgPSBjb25zdF9jYXN0PEhhc2hUYWJsZVR5cGUmPihtX2ltcGwpLmxvb2t1
cChrZXkpOwogICAgICAgICBpZiAoIWVudHJ5KQotICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRy
YWl0czo6ZW1wdHlWYWx1ZSgpOwotICAgICAgICByZXR1cm4gZW50cnktPnNlY29uZDsKKyAgICAg
ICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVl
KCkpOworICAgICAgICByZXR1cm4gTWFwcGVkVHJhaXRzOjpwZWVrKGVudHJ5LT5zZWNvbmQpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0hhc2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0hh
c2hUcmFpdHMuaAkocmV2aXNpb24gOTk3NDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0hhc2hUcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOSBAQCBuYW1lc3BhY2Ug
V1RGIHsKIAogICAgIGNsYXNzIFN0cmluZzsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIE93blB0cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duUHRyOwor
CiAgICAgdXNpbmcgc3RkOjpwYWlyOwogICAgIHVzaW5nIHN0ZDo6bWFrZV9wYWlyOwogCkBAIC01
NCw2ICs1NywxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgR2VuZXJpY0hhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0c0Jhc2U8SXNJbnRlZ2Vy
PFQ+Ojp2YWx1ZSwgVD4gewogICAgICAgICB0eXBlZGVmIFQgVHJhaXRUeXBlOwogICAgICAgICBz
dGF0aWMgVCBlbXB0eVZhbHVlKCkgeyByZXR1cm4gVCgpOyB9CisgICAgICAgIHR5cGVkZWYgY29u
c3QgVCYgUGFzc1R5cGU7CisgICAgICAgIHN0YXRpYyBjb25zdCBUJiBwYXNzKGNvbnN0IFQmIHZh
bHVlKSB7IHJldHVybiB2YWx1ZTsgfQorICAgICAgICB0eXBlZGVmIGNvbnN0IFQmIFBlZWtUeXBl
OworICAgICAgICBzdGF0aWMgY29uc3QgVCYgcGVlayhjb25zdCBUJiB2YWx1ZSkgeyByZXR1cm4g
dmFsdWU7IH0KICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hU
cmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxUPiB7IH07CkBAIC05MCw3ICs5NywyMSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVCYg
dmFsdWUpIHsgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KICAgICB9
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IEhhc2hUcmFpdHM8UmVmUHRyPFA+
ID4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8UmVmUHRyPFA+ID4geyB9OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPE93blB0cjxQPiA+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPE93blB0cjxQPiA+CisgICAgeworICAgICAgICBzdGF0aWMgc3RkOjpudWxscHRy
X3QgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAgICAgdHlwZWRlZiBQYXNz
T3duUHRyPFA+IFBhc3NUeXBlOworICAgICAgICBzdGF0aWMgUGFzc093blB0cjxQPiBwYXNzKGNv
bnN0IE93blB0cjxQPiYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsgfQorICAgICAg
ICB0eXBlZGVmIFAqIFBlZWtUeXBlOworICAgICAgICBzdGF0aWMgUCogcGVlayhjb25zdCBPd25Q
dHI8UD4mIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5nZXQoKTsgfQorICAgICAgICBzdGF0aWMgUCog
cGVlayhzdGQ6Om51bGxwdHJfdCkgeyByZXR1cm4gMDsgfQorICAgIH07CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgUD4gc3RydWN0IEhhc2hUcmFpdHM8UmVmUHRyPFA+ID4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8UmVmUHRyPFA+ID4gCisgICAgeworICAgICAgICB0eXBlZGVmIFBhc3NSZWZQdHI8
UD4gUGFzc1R5cGU7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFA+IHBhc3MoY29uc3QgUmVm
UHRyPFA+JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAgICAgLy8gV2UgY2FuIGltcGxl
bWVudCBQZWVrVHlwZSBmb3IgUmVmUHRyIGlmIHdlIGFsc28gY2hhbmdlIGNhbGxlcnMgb2YgZ2V0
KCkgdG8gZXhwZWN0IHJhdyBwb2ludGVycy4KKyAgICB9OwogICAgIHRlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8U3RyaW5nPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxTdHJpbmc+IHsgfTsK
IAogICAgIC8vIHNwZWNpYWwgdHJhaXRzIGZvciBwYWlycywgaGVscGZ1bCBmb3IgdGhlaXIgdXNl
IGluIEhhc2hNYXAgaW1wbGVtZW50YXRpb24K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114722</attachid>
            <date>2011-11-11 10:04:58 -0800</date>
            <delta_ts>2011-11-11 10:05:48 -0800</delta_ts>
            <desc>Newer snapshot of work in progress (to be landed in many separate pieces)</desc>
            <filename>bug-70565-20111111100457.patch</filename>
            <type>text/plain</type>
            <size>77330</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24g
OTk5ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDYgQEAgX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRv
cjIxc2V0QWNjZXNzbwogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlzZXRHZXR0ZXJFTlNf
N0pTVmFsdWVFCiBfX1pOM0pTQzE4UHJvcGVydHlEZXNjcmlwdG9yOXNldFNldHRlckVOU183SlNW
YWx1ZUUKIF9fWk4zSlNDMTlTb3VyY2VQcm92aWRlckNhY2hlNWNsZWFyRXYKLV9fWk4zSlNDMTlT
b3VyY2VQcm92aWRlckNhY2hlRDFFdgogX19aTjNKU0MxOWluaXRpYWxpemVUaHJlYWRpbmdFdgog
X19aTjNKU0MyME1hcmtlZEFyZ3VtZW50QnVmZmVyMTBzbG93QXBwZW5kRU5TXzdKU1ZhbHVlRQog
X19aTjNKU0MyMFdyaXRlQmFycmllckNvdW50ZXJzMjJ1c2VzV2l0aEJhcnJpZXJGcm9tQ3BwRQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9yZWdleF90YWJsZXMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9yZWdleF90YWJsZXMJKHJldmlzaW9u
IDk5OTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9yZWdleF90YWJsZXMJKHdv
cmtpbmcgY29weSkKQEAgLTg2LDE1ICs4NiwxNSBAQCBmb3IgbmFtZSwgY2xhc3NlcyBpbiB0eXBl
cy5pdGVtcygpOgogICAgIAogICAgICMgR2VuZXJhdGUgY3JlYXRlRnVuY3Rpb246CiAgICAgZnVu
Y3Rpb24gPSAiIjsKLSAgICBmdW5jdGlvbiArPSAoIkNoYXJhY3RlckNsYXNzKiAlc0NyZWF0ZSgp
XG4iICUgbmFtZSkKKyAgICBmdW5jdGlvbiArPSAoIlBhc3NPd25QdHI8Q2hhcmFjdGVyQ2xhc3M+
ICVzQ3JlYXRlKClcbiIgJSBuYW1lKQogICAgIGZ1bmN0aW9uICs9ICgie1xuIikKICAgICBpZiBl
bWl0VGFibGVzIGFuZCBjbGFzc2VzWyJVc2VUYWJsZSJdOgogICAgICAgICBpZiAiSW52ZXJzZSIg
aW4gY2xhc3NlczoKLSAgICAgICAgICAgIGZ1bmN0aW9uICs9ICgiICAgIENoYXJhY3RlckNsYXNz
KiBjaGFyYWN0ZXJDbGFzcyA9IG5ldyBDaGFyYWN0ZXJDbGFzcyhDaGFyYWN0ZXJDbGFzc1RhYmxl
OjpjcmVhdGUoXyVzRGF0YSwgdHJ1ZSkpO1xuIiAlIChjbGFzc2VzWyJJbnZlcnNlIl0pKQorICAg
ICAgICAgICAgZnVuY3Rpb24gKz0gKCIgICAgT3duUHRyPENoYXJhY3RlckNsYXNzPiBjaGFyYWN0
ZXJDbGFzcyA9IGFkb3B0UHRyKG5ldyBDaGFyYWN0ZXJDbGFzcyhDaGFyYWN0ZXJDbGFzc1RhYmxl
OjpjcmVhdGUoXyVzRGF0YSwgdHJ1ZSkpKTtcbiIgJSAoY2xhc3Nlc1siSW52ZXJzZSJdKSkKICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIGZ1bmN0aW9uICs9ICgiICAgIENoYXJhY3RlckNsYXNz
KiBjaGFyYWN0ZXJDbGFzcyA9IG5ldyBDaGFyYWN0ZXJDbGFzcyhDaGFyYWN0ZXJDbGFzc1RhYmxl
OjpjcmVhdGUoXyVzRGF0YSwgZmFsc2UpKTtcbiIgJSAobmFtZSkpCisgICAgICAgICAgICBmdW5j
dGlvbiArPSAoIiAgICBPd25QdHI8Q2hhcmFjdGVyQ2xhc3M+IGNoYXJhY3RlckNsYXNzID0gYWRv
cHRQdHIobmV3IENoYXJhY3RlckNsYXNzKENoYXJhY3RlckNsYXNzVGFibGU6OmNyZWF0ZShfJXNE
YXRhLCBmYWxzZSkpKTtcbiIgJSAobmFtZSkpCiAgICAgZWxzZToKLSAgICAgICAgZnVuY3Rpb24g
Kz0gKCIgICAgQ2hhcmFjdGVyQ2xhc3MqIGNoYXJhY3RlckNsYXNzID0gbmV3IENoYXJhY3RlckNs
YXNzKDApO1xuIikKKyAgICAgICAgZnVuY3Rpb24gKz0gKCIgICAgT3duUHRyPENoYXJhY3RlckNs
YXNzPiBjaGFyYWN0ZXJDbGFzcyA9IGFkb3B0UHRyKG5ldyBDaGFyYWN0ZXJDbGFzcygwKSk7XG4i
KQogICAgIGZvciAobWluLCBtYXgpIGluIHJhbmdlczoKICAgICAgICAgaWYgKG1pbiA9PSBtYXgp
OgogICAgICAgICAgICAgaWYgKG1pbiA+IDEyNyk6CkBAIC0xMDYsNyArMTA2LDcgQEAgZm9yIG5h
bWUsIGNsYXNzZXMgaW4gdHlwZXMuaXRlbXMoKToKICAgICAgICAgICAgIGZ1bmN0aW9uICs9ICgi
ICAgIGNoYXJhY3RlckNsYXNzLT5tX3Jhbmdlc1VuaWNvZGUuYXBwZW5kKENoYXJhY3RlclJhbmdl
KDB4JTA0eCwgMHglMDR4KSk7XG4iICUgKG1pbiwgbWF4KSkKICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgIGZ1bmN0aW9uICs9ICgiICAgIGNoYXJhY3RlckNsYXNzLT5tX3Jhbmdlcy5hcHBlbmQo
Q2hhcmFjdGVyUmFuZ2UoMHglMDJ4LCAweCUwMngpKTtcbiIgJSAobWluLCBtYXgpKQotICAgIGZ1
bmN0aW9uICs9ICgiICAgIHJldHVybiBjaGFyYWN0ZXJDbGFzcztcbiIpCisgICAgZnVuY3Rpb24g
Kz0gKCIgICAgcmV0dXJuIGNoYXJhY3RlckNsYXNzLnJlbGVhc2UoKTtcbiIpCiAgICAgZnVuY3Rp
b24gKz0gKCJ9XG5cbiIpCiAgICAgZnVuY3Rpb25zICs9IGZ1bmN0aW9uCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oCShyZXZpc2lvbiA5OTk4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNyArNDM5LDcgQEAg
dm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blBybwogICAgICAgICAgICAgaXRl
cmF0b3IgZW5kID0gc3RhdGljVmFsdWVzLT5lbmQoKTsKICAgICAgICAgICAgIGZvciAoaXRlcmF0
b3IgaXQgPSBzdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAg
ICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+Zmlyc3QuZ2V0KCk7Ci0gICAgICAgICAg
ICAgICAgU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAg
ICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAg
ICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcykpKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyKGV4ZWMsIG5hbWUpKTsKICAgICAgICAgICAgIH0KQEAgLTQ1MCw3ICs0NTAsNyBAQCB2
b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvCiAgICAgICAgICAgICBpdGVy
YXRvciBlbmQgPSBzdGF0aWNGdW5jdGlvbnMtPmVuZCgpOwogICAgICAgICAgICAgZm9yIChpdGVy
YXRvciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKLSAgICAg
ICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+c2Vjb25kLmdldCgp
OwogICAgICAgICAgICAgICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykp
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywg
bmFtZSkpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NsYXNzUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2xhc3NSZWYuY3BwCShyZXZpc2lvbiA5OTk4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDbGFzc1JlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDM4ICs3MSwzMCBAQCBPcGFx
dWVKU0NsYXNzOjpPcGFxdWVKU0NsYXNzKGNvbnN0IEpTQ2xhCiAgICAgLCBoYXNJbnN0YW5jZShk
ZWZpbml0aW9uLT5oYXNJbnN0YW5jZSkKICAgICAsIGNvbnZlcnRUb1R5cGUoZGVmaW5pdGlvbi0+
Y29udmVydFRvVHlwZSkKICAgICAsIG1fY2xhc3NOYW1lKHRyeUNyZWF0ZVN0cmluZ0Zyb21VVEY4
KGRlZmluaXRpb24tPmNsYXNzTmFtZSkpCi0gICAgLCBtX3N0YXRpY1ZhbHVlcygwKQotICAgICwg
bV9zdGF0aWNGdW5jdGlvbnMoMCkKIHsKICAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7CiAKICAg
ICBpZiAoY29uc3QgSlNTdGF0aWNWYWx1ZSogc3RhdGljVmFsdWUgPSBkZWZpbml0aW9uLT5zdGF0
aWNWYWx1ZXMpIHsKLSAgICAgICAgbV9zdGF0aWNWYWx1ZXMgPSBuZXcgT3BhcXVlSlNDbGFzc1N0
YXRpY1ZhbHVlc1RhYmxlKCk7CisgICAgICAgIG1fc3RhdGljVmFsdWVzID0gYWRvcHRQdHIobmV3
IE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZSgpKTsKICAgICAgICAgd2hpbGUgKHN0YXRp
Y1ZhbHVlLT5uYW1lKSB7CiAgICAgICAgICAgICBVU3RyaW5nIHZhbHVlTmFtZSA9IHRyeUNyZWF0
ZVN0cmluZ0Zyb21VVEY4KHN0YXRpY1ZhbHVlLT5uYW1lKTsKICAgICAgICAgICAgIGlmICghdmFs
dWVOYW1lLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gVXNlIGEgbG9jYWwgdmFyaWFi
bGUgaGVyZSB0byBzaWRlc3RlcCBhbiBSVkNUIGNvbXBpbGVyIGJ1Zy4KLSAgICAgICAgICAgICAg
ICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IG5ldyBTdGF0aWNWYWx1ZUVudHJ5KHN0YXRpY1Zh
bHVlLT5nZXRQcm9wZXJ0eSwgc3RhdGljVmFsdWUtPnNldFByb3BlcnR5LCBzdGF0aWNWYWx1ZS0+
YXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHZhbHVlTmFt
ZS5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSogZXhpc3RpbmdFbnRy
eSA9IG1fc3RhdGljVmFsdWVzLT5nZXQoaW1wbCk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0aWNW
YWx1ZXMtPnNldChpbXBsLCBlbnRyeSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGV4aXN0aW5n
RW50cnk7CisgICAgICAgICAgICAgICAgT3duUHRyPFN0YXRpY1ZhbHVlRW50cnk+IGVudHJ5ID0g
YWRvcHRQdHIobmV3IFN0YXRpY1ZhbHVlRW50cnkoc3RhdGljVmFsdWUtPmdldFByb3BlcnR5LCBz
dGF0aWNWYWx1ZS0+c2V0UHJvcGVydHksIHN0YXRpY1ZhbHVlLT5hdHRyaWJ1dGVzKSk7CisgICAg
ICAgICAgICAgICAgbV9zdGF0aWNWYWx1ZXMtPnNldCh2YWx1ZU5hbWUuaW1wbCgpLCBlbnRyeS5y
ZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKytzdGF0aWNWYWx1ZTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIGlmIChjb25zdCBKU1N0YXRpY0Z1bmN0aW9uKiBzdGF0aWNG
dW5jdGlvbiA9IGRlZmluaXRpb24tPnN0YXRpY0Z1bmN0aW9ucykgewotICAgICAgICBtX3N0YXRp
Y0Z1bmN0aW9ucyA9IG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUoKTsKKyAg
ICAgICAgbV9zdGF0aWNGdW5jdGlvbnMgPSBhZG9wdFB0cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRp
Y0Z1bmN0aW9uc1RhYmxlKCkpOwogICAgICAgICB3aGlsZSAoc3RhdGljRnVuY3Rpb24tPm5hbWUp
IHsKICAgICAgICAgICAgIFVTdHJpbmcgZnVuY3Rpb25OYW1lID0gdHJ5Q3JlYXRlU3RyaW5nRnJv
bVVURjgoc3RhdGljRnVuY3Rpb24tPm5hbWUpOwogICAgICAgICAgICAgaWYgKCFmdW5jdGlvbk5h
bWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAvLyBVc2UgYSBsb2NhbCB2YXJpYWJsZSBo
ZXJlIHRvIHNpZGVzdGVwIGFuIFJWQ1QgY29tcGlsZXIgYnVnLgotICAgICAgICAgICAgICAgIFN0
YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gbmV3IFN0YXRpY0Z1bmN0aW9uRW50cnkoc3RhdGlj
RnVuY3Rpb24tPmNhbGxBc0Z1bmN0aW9uLCBzdGF0aWNGdW5jdGlvbi0+YXR0cmlidXRlcyk7Ci0g
ICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogaW1wbCA9IGZ1bmN0aW9uTmFtZS5pbXBsKCk7Ci0g
ICAgICAgICAgICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZXhpc3RpbmdFbnRyeSA9IG1fc3Rh
dGljRnVuY3Rpb25zLT5nZXQoaW1wbCk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0aWNGdW5jdGlv
bnMtPnNldChpbXBsLCBlbnRyeSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIGV4aXN0aW5nRW50
cnk7CisgICAgICAgICAgICAgICAgT3duUHRyPFN0YXRpY0Z1bmN0aW9uRW50cnk+IGVudHJ5ID0g
YWRvcHRQdHIobmV3IFN0YXRpY0Z1bmN0aW9uRW50cnkoc3RhdGljRnVuY3Rpb24tPmNhbGxBc0Z1
bmN0aW9uLCBzdGF0aWNGdW5jdGlvbi0+YXR0cmlidXRlcykpOworICAgICAgICAgICAgICAgIG1f
c3RhdGljRnVuY3Rpb25zLT5zZXQoZnVuY3Rpb25OYW1lLmltcGwoKSwgZW50cnkucmVsZWFzZSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICsrc3RhdGljRnVuY3Rpb247CiAgICAgICAg
IH0KQEAgLTExNywyMyArMTA5LDE5IEBAIE9wYXF1ZUpTQ2xhc3M6On5PcGFxdWVKU0NsYXNzKCkK
ICAgICAvLyBUaGUgZW1wdHkgc3RyaW5nIGlzIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIGlzIGFu
IGlkZW50aWZpZXIsIGluIGFsbCBvdGhlciBjYXNlcyB3ZSBzaG91bGQgaGF2ZSBkb25lIGEgZGVl
cCBjb3B5IGluIGNsYXNzTmFtZSgpLCBiZWxvdy4gCiAgICAgQVNTRVJUKCFtX2NsYXNzTmFtZS5s
ZW5ndGgoKSB8fCAhbV9jbGFzc05hbWUuaW1wbCgpLT5pc0lkZW50aWZpZXIoKSk7CiAKKyNpZm5k
ZWYgTkRFQlVHCiAgICAgaWYgKG1fc3RhdGljVmFsdWVzKSB7CiAgICAgICAgIE9wYXF1ZUpTQ2xh
c3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdGF0aWNWYWx1ZXMt
PmVuZCgpOwotICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAg
ICAgICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC0+aXNJZGVudGlmaWVyKCkpOwotICAgICAgICAg
ICAgZGVsZXRlIGl0LT5zZWNvbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIG1fc3RhdGlj
VmFsdWVzOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRpY0Z1bmN0aW9ucykgewogICAgICAgICBP
cGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
c3RhdGljRnVuY3Rpb25zLT5lbmQoKTsKLSAgICAgICAgZm9yIChPcGFxdWVKU0NsYXNzU3RhdGlj
RnVuY3Rpb25zVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0aWNGdW5jdGlvbnMtPmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0
aWNGdW5jdGlvbnNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRpY0Z1bmN0aW9ucy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgQVNTRVJUKCFpdC0+Zmlyc3Qt
PmlzSWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOwotICAgICAg
ICB9Ci0gICAgICAgIGRlbGV0ZSBtX3N0YXRpY0Z1bmN0aW9uczsKICAgICB9CisjZW5kaWYKICAg
ICAKICAgICBpZiAocHJvdG90eXBlQ2xhc3MpCiAgICAgICAgIEpTQ2xhc3NSZWxlYXNlKHByb3Rv
dHlwZUNsYXNzKTsKQEAgLTE2Miw0OSArMTUwLDMzIEBAIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0
YTo6T3BhcXVlSlNDbGFzc0MKICAgICA6IG1fY2xhc3MoanNDbGFzcykKIHsKICAgICBpZiAoanND
bGFzcy0+bV9zdGF0aWNWYWx1ZXMpIHsKLSAgICAgICAgc3RhdGljVmFsdWVzID0gbmV3IE9wYXF1
ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTsKKyAgICAgICAgc3RhdGljVmFsdWVzID0gYWRvcHRQ
dHIobmV3IE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZSk7CiAgICAgICAgIE9wYXF1ZUpT
Q2xhc3NTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0ganNDbGFzcy0+bV9z
dGF0aWNWYWx1ZXMtPmVuZCgpOwogICAgICAgICBmb3IgKE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1
ZXNUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBqc0NsYXNzLT5tX3N0YXRpY1ZhbHVlcy0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0LT5maXJzdC0+
aXNJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgLy8gVXNlIGEgbG9jYWwgdmFyaWFibGUgaGVy
ZSB0byBzaWRlc3RlcCBhbiBSVkNUIGNvbXBpbGVyIGJ1Zy4KLSAgICAgICAgICAgIFN0YXRpY1Zh
bHVlRW50cnkqIGVudHJ5ID0gbmV3IFN0YXRpY1ZhbHVlRW50cnkoaXQtPnNlY29uZC0+Z2V0UHJv
cGVydHksIGl0LT5zZWNvbmQtPnNldFByb3BlcnR5LCBpdC0+c2Vjb25kLT5hdHRyaWJ1dGVzKTsK
LSAgICAgICAgICAgIHN0YXRpY1ZhbHVlcy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZShpdC0+Zmly
c3QtPmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0LT5sZW5ndGgoKSksIGVudHJ5KTsKKyAgICAgICAg
ICAgIE93blB0cjxTdGF0aWNWYWx1ZUVudHJ5PiBlbnRyeSA9IGFkb3B0UHRyKG5ldyBTdGF0aWNW
YWx1ZUVudHJ5KGl0LT5zZWNvbmQtPmdldFByb3BlcnR5LCBpdC0+c2Vjb25kLT5zZXRQcm9wZXJ0
eSwgaXQtPnNlY29uZC0+YXR0cmlidXRlcykpOworICAgICAgICAgICAgc3RhdGljVmFsdWVzLT5h
ZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKGl0LT5maXJzdC0+Y2hhcmFjdGVycygpLCBpdC0+Zmlyc3Qt
Pmxlbmd0aCgpKSwgZW50cnkucmVsZWFzZSgpKTsKICAgICAgICAgfQotICAgIH0gZWxzZQotICAg
ICAgICBzdGF0aWNWYWx1ZXMgPSAwOworICAgIH0KIAogICAgIGlmIChqc0NsYXNzLT5tX3N0YXRp
Y0Z1bmN0aW9ucykgewotICAgICAgICBzdGF0aWNGdW5jdGlvbnMgPSBuZXcgT3BhcXVlSlNDbGFz
c1N0YXRpY0Z1bmN0aW9uc1RhYmxlOworICAgICAgICBzdGF0aWNGdW5jdGlvbnMgPSBhZG9wdFB0
cihuZXcgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKTsKICAgICAgICAgT3BhcXVl
SlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBqc0NsYXNz
LT5tX3N0YXRpY0Z1bmN0aW9ucy0+ZW5kKCk7CiAgICAgICAgIGZvciAoT3BhcXVlSlNDbGFzc1N0
YXRpY0Z1bmN0aW9uc1RhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IGpzQ2xhc3MtPm1fc3RhdGlj
RnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIEFTU0VS
VCghaXQtPmZpcnN0LT5pc0lkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICAvLyBVc2UgYSBsb2Nh
bCB2YXJpYWJsZSBoZXJlIHRvIHNpZGVzdGVwIGFuIFJWQ1QgY29tcGlsZXIgYnVnLgotICAgICAg
ICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBuZXcgU3RhdGljRnVuY3Rpb25FbnRy
eShpdC0+c2Vjb25kLT5jYWxsQXNGdW5jdGlvbiwgaXQtPnNlY29uZC0+YXR0cmlidXRlcyk7Ci0g
ICAgICAgICAgICBzdGF0aWNGdW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUoaXQtPmZp
cnN0LT5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC0+bGVuZ3RoKCkpLCBlbnRyeSk7CisgICAgICAg
ICAgICBPd25QdHI8U3RhdGljRnVuY3Rpb25FbnRyeT4gZW50cnkgPSBhZG9wdFB0cihuZXcgU3Rh
dGljRnVuY3Rpb25FbnRyeShpdC0+c2Vjb25kLT5jYWxsQXNGdW5jdGlvbiwgaXQtPnNlY29uZC0+
YXR0cmlidXRlcykpOworICAgICAgICAgICAgc3RhdGljRnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1w
bDo6Y3JlYXRlKGl0LT5maXJzdC0+Y2hhcmFjdGVycygpLCBpdC0+Zmlyc3QtPmxlbmd0aCgpKSwg
ZW50cnkucmVsZWFzZSgpKTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgfSBlbHNlCi0g
ICAgICAgIHN0YXRpY0Z1bmN0aW9ucyA9IDA7Ci19Ci0KLU9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0
YTo6fk9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSgpCi17Ci0gICAgaWYgKHN0YXRpY1ZhbHVlcykg
ewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKnN0YXRpY1ZhbHVlcyk7Ci0gICAgICAgIGRlbGV0
ZSBzdGF0aWNWYWx1ZXM7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRpY0Z1bmN0aW9ucykgewotICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMoKnN0YXRpY0Z1bmN0aW9ucyk7Ci0gICAgICAgIGRlbGV0ZSBz
dGF0aWNGdW5jdGlvbnM7CiAgICAgfQogfQogCiBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEmIE9w
YXF1ZUpTQ2xhc3M6OmNvbnRleHREYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGEqJiBjb250ZXh0RGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5vcGFx
dWVKU0NsYXNzRGF0YS5hZGQodGhpcywgMCkuZmlyc3QtPnNlY29uZDsKKyAgICBPd25QdHI8T3Bh
cXVlSlNDbGFzc0NvbnRleHREYXRhPiYgY29udGV4dERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCku
b3BhcXVlSlNDbGFzc0RhdGEuYWRkKHRoaXMsIG51bGxwdHIpLmZpcnN0LT5zZWNvbmQ7CiAgICAg
aWYgKCFjb250ZXh0RGF0YSkKLSAgICAgICAgY29udGV4dERhdGEgPSBuZXcgT3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcyk7CisgICAgICAgIGNvbnRleHRE
YXRhID0gYWRvcHRQdHIobmV3IE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YShleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMpKTsKICAgICByZXR1cm4gKmNvbnRleHREYXRhOwogfQogCkBAIC0yMTYsMTQg
KzE4OCwxMiBAQCBVU3RyaW5nIE9wYXF1ZUpTQ2xhc3M6OmNsYXNzTmFtZSgpCiAKIE9wYXF1ZUpT
Q2xhc3NTdGF0aWNWYWx1ZXNUYWJsZSogT3BhcXVlSlNDbGFzczo6c3RhdGljVmFsdWVzKEpTQzo6
RXhlY1N0YXRlKiBleGVjKQogewotICAgIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSYganNDbGFz
c0RhdGEgPSBjb250ZXh0RGF0YShleGVjKTsKLSAgICByZXR1cm4ganNDbGFzc0RhdGEuc3RhdGlj
VmFsdWVzOworICAgIHJldHVybiBjb250ZXh0RGF0YShleGVjKS5zdGF0aWNWYWx1ZXMuZ2V0KCk7
CiB9CiAKIE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogT3BhcXVlSlNDbGFzczo6
c3RhdGljRnVuY3Rpb25zKEpTQzo6RXhlY1N0YXRlKiBleGVjKQogewotICAgIE9wYXF1ZUpTQ2xh
c3NDb250ZXh0RGF0YSYganNDbGFzc0RhdGEgPSBjb250ZXh0RGF0YShleGVjKTsKLSAgICByZXR1
cm4ganNDbGFzc0RhdGEuc3RhdGljRnVuY3Rpb25zOworICAgIHJldHVybiBjb250ZXh0RGF0YShl
eGVjKS5zdGF0aWNGdW5jdGlvbnMuZ2V0KCk7CiB9CiAKIC8qIQpAQCAtMjQ4LDExICsyMTgsMTEg
QEAgSlNPYmplY3QqIE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZShFeGVjUwogICAgICAgICBpZiAo
IXByb3RvdHlwZUNsYXNzKQogICAgICAgICAgICAgcHJvdG90eXBlQ2xhc3MgPSBPcGFxdWVKU0Ns
YXNzOjpjcmVhdGUoJmtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5KS5sZWFrUmVmKCk7CiAgICAgICAg
IGlmICghcHJvdG90eXBlQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zKQotICAgICAgICAgICAgcHJv
dG90eXBlQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zID0gbmV3IE9wYXF1ZUpTQ2xhc3NTdGF0aWNG
dW5jdGlvbnNUYWJsZTsKKyAgICAgICAgICAgIHByb3RvdHlwZUNsYXNzLT5tX3N0YXRpY0Z1bmN0
aW9ucyA9IGFkb3B0UHRyKG5ldyBPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFibGUpOwog
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiB0b1N0cmluZyA9IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS50b1N0cmluZzsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgdmFsdWVPZiA9IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS52YWx1ZU9mOwotICAgICAgICBwcm90b3R5cGVDbGFzcy0+bV9zdGF0aWNG
dW5jdGlvbnMtPmFkZChTdHJpbmdJbXBsOjpjcmVhdGUodG9TdHJpbmcuY2hhcmFjdGVycygpLCB0
b1N0cmluZy5sZW5ndGgoKSksIG5ldyBTdGF0aWNGdW5jdGlvbkVudHJ5KCZKU0NhbGxiYWNrRnVu
Y3Rpb246OnRvU3RyaW5nQ2FsbGJhY2ssIDApKTsKLSAgICAgICAgcHJvdG90eXBlQ2xhc3MtPm1f
c3RhdGljRnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1wbDo6Y3JlYXRlKHZhbHVlT2YuY2hhcmFjdGVy
cygpLCB2YWx1ZU9mLmxlbmd0aCgpKSwgbmV3IFN0YXRpY0Z1bmN0aW9uRW50cnkoJkpTQ2FsbGJh
Y2tGdW5jdGlvbjo6dmFsdWVPZkNhbGxiYWNrLCAwKSk7CisgICAgICAgIHByb3RvdHlwZUNsYXNz
LT5tX3N0YXRpY0Z1bmN0aW9ucy0+YWRkKFN0cmluZ0ltcGw6OmNyZWF0ZSh0b1N0cmluZy5jaGFy
YWN0ZXJzKCksIHRvU3RyaW5nLmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3IFN0YXRpY0Z1bmN0aW9u
RW50cnkoJkpTQ2FsbGJhY2tGdW5jdGlvbjo6dG9TdHJpbmdDYWxsYmFjaywgMCkpKTsKKyAgICAg
ICAgcHJvdG90eXBlQ2xhc3MtPm1fc3RhdGljRnVuY3Rpb25zLT5hZGQoU3RyaW5nSW1wbDo6Y3Jl
YXRlKHZhbHVlT2YuY2hhcmFjdGVycygpLCB2YWx1ZU9mLmxlbmd0aCgpKSwgYWRvcHRQdHIobmV3
IFN0YXRpY0Z1bmN0aW9uRW50cnkoJkpTQ2FsbGJhY2tGdW5jdGlvbjo6dmFsdWVPZkNhbGxiYWNr
LCAwKSkpOwogICAgIH0KIAogICAgIGlmICghcHJvdG90eXBlQ2xhc3MpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAkocmV2aXNpb24gOTk5ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTksOCAr
NTksOCBAQCBwdWJsaWM6CiAgICAgSlNQcm9wZXJ0eUF0dHJpYnV0ZXMgYXR0cmlidXRlczsKIH07
CiAKLXR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIFN0YXRpY1ZhbHVlRW50cnkq
PiBPcGFxdWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGU7Ci10eXBlZGVmIEhhc2hNYXA8UmVmUHRy
PFN0cmluZ0ltcGw+LCBTdGF0aWNGdW5jdGlvbkVudHJ5Kj4gT3BhcXVlSlNDbGFzc1N0YXRpY0Z1
bmN0aW9uc1RhYmxlOwordHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgT3duUHRy
PFN0YXRpY1ZhbHVlRW50cnk+ID4gT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlOwordHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgT3duUHRyPFN0YXRpY0Z1bmN0aW9uRW50
cnk+ID4gT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlOwogCiBzdHJ1Y3QgT3BhcXVl
SlNDbGFzczsKIApAQCAtNzAsNyArNzAsNiBAQCBzdHJ1Y3QgT3BhcXVlSlNDbGFzc0NvbnRleHRE
YXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEp
OyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPcGFxdWVKU0NsYXNzQ29u
dGV4dERhdGEoSlNDOjpKU0dsb2JhbERhdGEmLCBPcGFxdWVKU0NsYXNzKik7Ci0gICAgfk9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YSgpOwogCiAgICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIGtlZXAg
T3BhcXVlSlNDbGFzcyBhbGl2ZSBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgcmFyZSBzY2VuYXJp
bzoKICAgICAvLyAxLiBBIGNsYXNzIGlzIGNyZWF0ZWQgYW5kIHVzZWQsIHNvIGl0cyBjb250ZXh0
IGRhdGEgaXMgc3RvcmVkIGluIEpTR2xvYmFsRGF0YSBoYXNoIG1hcC4KQEAgLTgwLDggKzc5LDgg
QEAgcHVibGljOgogICAgIC8vIDQuIFdoZW4gaXQgaXMgdXNlZCwgdGhlIG9sZCBjb250ZXh0IGRh
dGEgaXMgZm91bmQgaW4gSlNHbG9iYWxEYXRhIGFuZCB1c2VkLgogICAgIFJlZlB0cjxPcGFxdWVK
U0NsYXNzPiBtX2NsYXNzOwogCi0gICAgT3BhcXVlSlNDbGFzc1N0YXRpY1ZhbHVlc1RhYmxlKiBz
dGF0aWNWYWx1ZXM7Ci0gICAgT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0
aWNGdW5jdGlvbnM7CisgICAgT3duUHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZT4g
c3RhdGljVmFsdWVzOworICAgIE93blB0cjxPcGFxdWVKU0NsYXNzU3RhdGljRnVuY3Rpb25zVGFi
bGU+IHN0YXRpY0Z1bmN0aW9uczsKICAgICBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4gY2FjaGVk
UHJvdG90eXBlOwogfTsKIApAQCAtMTIxLDggKzEyMCw4IEBAIHByaXZhdGU6CiAKICAgICAvLyBV
U3RyaW5ncyBpbiB0aGVzZSBkYXRhIG1lbWJlcnMgc2hvdWxkIG5vdCBiZSBwdXQgaW50byBhbnkg
SWRlbnRpZmllclRhYmxlLgogICAgIEpTQzo6VVN0cmluZyBtX2NsYXNzTmFtZTsKLSAgICBPcGFx
dWVKU0NsYXNzU3RhdGljVmFsdWVzVGFibGUqIG1fc3RhdGljVmFsdWVzOwotICAgIE9wYXF1ZUpT
Q2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZSogbV9zdGF0aWNGdW5jdGlvbnM7CisgICAgT3duUHRy
PE9wYXF1ZUpTQ2xhc3NTdGF0aWNWYWx1ZXNUYWJsZT4gbV9zdGF0aWNWYWx1ZXM7CisgICAgT3du
UHRyPE9wYXF1ZUpTQ2xhc3NTdGF0aWNGdW5jdGlvbnNUYWJsZT4gbV9zdGF0aWNGdW5jdGlvbnM7
CiB9OwogCiAjZW5kaWYgLy8gSlNDbGFzc1JlZl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
Zgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gOTk5ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQCBF
WFBPUlRTCiAgICAgPz8xTXV0ZXhAV1RGQEBRQUVAWFoKICAgICA/PzFSZWZDb3VudGVkTGVha0Nv
dW50ZXJAV1RGQEBRQUVAWFoKICAgICA/PzFTY29wZUNoYWluTm9kZUBKU0NAQEVBRUBYWgotICAg
ID8/MVNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVAWFoKICAgICA/PzFUaHJlYWRDb25kaXRp
b25AV1RGQEBRQUVAWFoKICAgICA/PzFXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCiAgICAgPz8x
V2Vha0hhbmRsZU93bmVyQEpTQ0BAVUFFQFhaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gOTk5ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg1LDcg
KzI4NSw3IEBACiAJCTY1MTEyMkZFMTQwNDZBNEMwMDJCMTAxRCAvKiBsaWJlZGl0LmR5bGliIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQ1RDhBRDAw
RTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVkaXQuZHlsaWIgKi87IH07CiAJCTY1MTEyMzA3MTQwNDZC
MEEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTEyMkU1MTQwNDY5QkEwMDJCMTAxRCAvKiB0ZXN0UmVnRXhw
LmNwcCAqLzsgfTsKIAkJNjUxRENBMDQxMzZBNkZFRjAwRjc0MTk0IC8qIFBhc3NUcmFpdHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MURDQTAyMTM2
QTZGQUIwMEY3NDE5NCAvKiBQYXNzVHJhaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNjUzMDNENjQxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNl
clRva2Vucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjUzMDNENjMxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5oICovOyB9OworCQk2NTMw
M0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyogUGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTMwM0Q2MzE0NDdCOUUxMDBEM0Y5MDQgLyog
UGFyc2VyVG9rZW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNjU1RUIyOUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTVFQjI5QTEwQ0Uy
NTgxMDAxQTk5MEUgLyogTm9kZXNDb2RlZ2VuLmNwcCAqLzsgfTsKIAkJNjVERkM5MzMwOEVBMTcz
QTAwRjczMDBCIC8qIEhhc2hUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NURGQzkyRDA4RUExNzNBMDBGNzMwMEIgLyogSGFzaFRhYmxlLmNw
cCAqLzsgfTsKIAkJNjVFMUEzREYxMjJCODk0NTAwQjI2MDk3IC8qIE5vbkNvcHlpbmdTb3J0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUUxQTJGNDEy
MkI4ODBEMDBCMjYwOTcgLyogTm9uQ29weWluZ1NvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjkzLDcgKzY5Myw3IEBACiAJCUU0OEUwRjJE
MEY4MjE1MTcwMEE4Q0EzNyAvKiBGYXN0QWxsb2NCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhFMEYyQzBGODIxNTE3MDBBOENBMzcgLyogRmFz
dEFsbG9jQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTU1
MTJFRjI3NzIwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCAqLzsgfTsKIAkJRTQ5
REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OURDMTUxMTJFRjI3MjIwMDE4
NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJj
ZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0uaCAqLzsgfTsKKwkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDlEQzE0OTEyRUYyNjFBMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEQ4
Q0VGQjEyRkM0Mzk2MDBCQzlGNUEgLyogQmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDhDRTlCMTJGQzQyRTEwMEJDOUY1QSAvKiBC
bG9vbUZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUYzQkQzMUVEMTI2NzM1NzcwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzQkQzMUQwMTI2NzMwMTgw
MDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGREExNUMxRTEyQjAzMDVDMDAzQTU4M0EgLyogQ29tcGxleC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRBMTVDMTYx
MkIwMzAyODAwM0E1ODNBIC8qIENvbXBsZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjA1OCw3ICsyMDU4LDYgQEAKIAkJN0UzOUQ4MzcwRUMz
QTM4ODAwM0FGMTFBIC8qIHBhcnNlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJNjUzMDNENjMxNDQ3QjlFMTAwRDNGOTA0IC8qIFBhcnNlclRva2Vucy5o
ICovLAogCQkJCUE3QTdFRTc0MTFCOThCOEQwMDY1QTE0RiAvKiBBU1RCdWlsZGVyLmggKi8sCiAJ
CQkJOTNGMTk4MUEwODI0NUFBRTAwMUU5QUJDIC8qIEtleXdvcmRzLnRhYmxlICovLAogCQkJCUY2
OTJBODY1MDI1NTU5N0QwMUZGNjBGNyAvKiBMZXhlci5jcHAgKi8sCkBAIC0yMDcxLDYgKzIwNzAs
NyBAQAogCQkJCTkzRjBCM0FBMDlCQjREQzAwMDY4RkNFMyAvKiBQYXJzZXIuaCAqLywKIAkJCQk5
MzA1MkMzMjBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuY3BwICovLAogCQkJCTkzMDUy
QzMzMEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5oICovLAorCQkJCTY1MzAzRDYzMTQ0
N0I5RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCAqLywKIAkJCQk4NjlFQkNCNjBFOEM2RDRB
MDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oICovLAogCQkJCTY1RTg2NkVFMERENTlBRkEwMEEyQjJB
MSAvKiBTb3VyY2VDb2RlLmggKi8sCiAJCQkJRTQ5REMxNTUxMkVGMjc3MjAwMTg0QTFGIC8qIFNv
dXJjZVByb3ZpZGVyQ2FjaGUuY3BwICovLApAQCAtMjU1MSw2ICsyNTUxLDggQEAKIAkJCQlCQzI1
N0RFODBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTY1MzAzRDY0MTQ0N0I5RTEwMEQzRjkwNCAvKiBQYXJzZXJUb2tlbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92
aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZE
RTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRjRCMTQyODA2
QTEwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRjJCMTQy
NkNBNkQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yODMzLDcgKzI4MzUsNiBAQAogCQkJCUJDMThDNDY0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3Vy
Y2VDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyog
U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4
NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNDlEQzE2
RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklU
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQ4N0REQjEyQkNBRjk0MDA4RTczQTEgLyogU3RhY2tC
b3VuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OEJGQTYwMTE3RDA0ODIwMEI5MDhCMSAvKiBT
dGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0MSw3ICsyOTQyLDYgQEAK
IAkJCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKLQkJCQk2NTMwM0Q2NDE0NDdCOUUxMDBEM0Y5MDQgLyog
UGFyc2VyVG9rZW5zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFG
OEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDkxNDYwQ0JC
NzAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZB
NEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNp
b24gOTk5ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29s
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdW5zaWduZWQgbV9zaXplOwogICAgIH07CiAKLSAgICB0eXBlZGVmIFdURjo6SGFzaE1h
cDxTY3JpcHRFeGVjdXRhYmxlKiwgU2NyaXB0U2FtcGxlUmVjb3JkKj4gU2NyaXB0U2FtcGxlUmVj
b3JkTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTY3JpcHRFeGVjdXRhYmxlKiwgT3duUHRyPFNj
cmlwdFNhbXBsZVJlY29yZD4gPiBTY3JpcHRTYW1wbGVSZWNvcmRNYXA7CiAKICAgICBjbGFzcyBT
YW1wbGluZ1RocmVhZCB7CiAgICAgcHVibGljOgpAQCAtMjg3LDIwICsyODcsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1fc2FtcGxlQ291bnQoMCkKICAgICAgICAgICAgICwg
bV9vcGNvZGVTYW1wbGVDb3VudCgwKQogI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCi0g
ICAgICAgICAgICAsIG1fc2NvcGVTYW1wbGVNYXAoYWRvcHRQdHIobmV3IFNjcmlwdFNhbXBsZVJl
Y29yZE1hcCgpKSkKKyAgICAgICAgICAgICwgbV9zY29wZVNhbXBsZU1hcChhZG9wdFB0cihuZXcg
U2NyaXB0U2FtcGxlUmVjb3JkTWFwKSkKICNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgICBt
ZW1zZXQobV9vcGNvZGVTYW1wbGVzLCAwLCBzaXplb2YobV9vcGNvZGVTYW1wbGVzKSk7CiAgICAg
ICAgICAgICBtZW1zZXQobV9vcGNvZGVTYW1wbGVzSW5DVElGdW5jdGlvbnMsIDAsIHNpemVvZiht
X29wY29kZVNhbXBsZXNJbkNUSUZ1bmN0aW9ucykpOwogICAgICAgICB9CiAKLSAgICAgICAgflNh
bXBsaW5nVG9vbCgpCi0gICAgICAgIHsKLSNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQot
ICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptX3Njb3BlU2FtcGxlTWFwKTsKLSNlbmRpZgot
ICAgICAgICB9Ci0KICAgICAgICAgdm9pZCBzZXR1cCgpOwogICAgICAgICB2b2lkIGR1bXAoRXhl
Y1N0YXRlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJv
dmlkZXJDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Tb3VyY2VQcm92aWRlckNhY2hlLmNwcAkocmV2aXNpb24gOTk5ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxOCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3Vy
Y2VQcm92aWRlckNhY2hlLmgiCiAKLSNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1Tb3Vy
Y2VQcm92aWRlckNhY2hlOjp+U291cmNlUHJvdmlkZXJDYWNoZSgpCi17Ci0gICAgY2xlYXIoKTsK
LX0KLQogdm9pZCBTb3VyY2VQcm92aWRlckNhY2hlOjpjbGVhcigpCiB7Ci0gICAgZGVsZXRlQWxs
VmFsdWVzKG1fbWFwKTsKICAgICBtX21hcC5jbGVhcigpOwogICAgIG1fY29udGVudEJ5dGVTaXpl
ID0gMDsKIH0KQEAgLTQ5LDcgKzQzLDggQEAgdW5zaWduZWQgU291cmNlUHJvdmlkZXJDYWNoZTo6
Ynl0ZVNpemUoKQogCiB2b2lkIFNvdXJjZVByb3ZpZGVyQ2FjaGU6OmFkZChpbnQgc291cmNlUG9z
aXRpb24sIFBhc3NPd25QdHI8U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0+IGl0ZW0sIHVuc2lnbmVk
IHNpemUpCiB7Ci0gICAgbV9tYXAuYWRkKHNvdXJjZVBvc2l0aW9uLCBpdGVtLmxlYWtQdHIoKSk7
CisgICAgQVNTRVJUKCFtX21hcC5jb250YWlucyhzb3VyY2VQb3NpdGlvbikpOworICAgIG1fbWFw
LmFkZChzb3VyY2VQb3NpdGlvbiwgaXRlbSk7CiAgICAgbV9jb250ZW50Qnl0ZVNpemUgKz0gc2l6
ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRl
ckNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3Vy
Y2VQcm92aWRlckNhY2hlLmgJKHJldmlzaW9uIDk5OTg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlckNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI1
ICsyNiwyNCBAQAogI2lmbmRlZiBTb3VyY2VQcm92aWRlckNhY2hlX2gKICNkZWZpbmUgU291cmNl
UHJvdmlkZXJDYWNoZV9oCiAKKyNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbTsKLQogY2xhc3MgU291cmNlUHJvdmlkZXJDYWNoZSB7CiBwdWJsaWM6
Ci0gICAgU291cmNlUHJvdmlkZXJDYWNoZSgpIDogbV9jb250ZW50Qnl0ZVNpemUoMCkge30KLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB+U291cmNlUHJvdmlkZXJDYWNoZSgpOworICAgIFNvdXJjZVBy
b3ZpZGVyQ2FjaGUoKSA6IG1fY29udGVudEJ5dGVTaXplKDApIHsgfQogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBjbGVhcigpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGJ5
dGVTaXplKCkgY29uc3Q7CisKICAgICB2b2lkIGFkZChpbnQgc291cmNlUG9zaXRpb24sIFBhc3NP
d25QdHI8U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0+LCB1bnNpZ25lZCBzaXplKTsKICAgICBjb25z
dCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSogZ2V0KGludCBzb3VyY2VQb3NpdGlvbikgY29uc3Qg
eyByZXR1cm4gbV9tYXAuZ2V0KHNvdXJjZVBvc2l0aW9uKTsgfQogCiBwcml2YXRlOgotICAgIEhh
c2hNYXA8aW50LCBTb3VyY2VQcm92aWRlckNhY2hlSXRlbSo+IG1fbWFwOworICAgIEhhc2hNYXA8
aW50LCBPd25QdHI8U291cmNlUHJvdmlkZXJDYWNoZUl0ZW0+ID4gbV9tYXA7CiAgICAgdW5zaWdu
ZWQgbV9jb250ZW50Qnl0ZVNpemU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSWRlbnRpZmllci5oCShyZXZpc2lvbiA5OTk4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDEzICsy
MzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goU3Ry
aW5nSW1wbCoga2V5KSB7IHJldHVybiBrZXktPmV4aXN0aW5nSGFzaCgpOyB9CiAgICAgfTsKIAot
ICAgIHN0cnVjdCBJZGVudGlmaWVyTWFwSW5kZXhIYXNoVHJhaXRzIHsKLSAgICAgICAgdHlwZWRl
ZiBpbnQgVHJhaXRUeXBlOwotICAgICAgICB0eXBlZGVmIElkZW50aWZpZXJNYXBJbmRleEhhc2hU
cmFpdHMgU3RvcmFnZVRyYWl0czsKKyAgICBzdHJ1Y3QgSWRlbnRpZmllck1hcEluZGV4SGFzaFRy
YWl0cyA6IEhhc2hUcmFpdHM8aW50PiB7CiAgICAgICAgIHN0YXRpYyBpbnQgZW1wdHlWYWx1ZSgp
IHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KICAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOwotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBib29sIG5lZWRzUmVmID0gZmFsc2U7CiAgICAgfTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8U3RyaW5nSW1wbD4sIGludCwgSWRlbnRpZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVm
UHRyPFN0cmluZ0ltcGw+ID4sIElkZW50aWZpZXJNYXBJbmRleEhhc2hUcmFpdHM+IElkZW50aWZp
ZXJNYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAJKHJldmlzaW9uIDk5OTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDcgKzMzOCw3IEBAIEpT
R2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhh
c2hUYWJsZSo+KHN0cmluZ1RhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KHN0cmluZ0NvbnN0cnVjdG9yVGFibGUpKTsKIAotICAgIGRlbGV0ZUFsbFZhbHVlcyhv
cGFxdWVKU0NsYXNzRGF0YSk7CisgICAgb3BhcXVlSlNDbGFzc0RhdGEuY2xlYXIoKTsKIAogICAg
IGRlbGV0ZSBlbXB0eUxpc3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5OTk4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNyArMjY2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNlbmRpZgogCi0gICAgICAgIEhhc2hNYXA8
T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NE
YXRhOworICAgICAgICBIYXNoTWFwPE9wYXF1ZUpTQ2xhc3MqLCBPd25QdHI8T3BhcXVlSlNDbGFz
c0NvbnRleHREYXRhPiA+IG9wYXF1ZUpTQ2xhc3NEYXRhOwogCiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBkeW5hbWljR2xvYmFsT2JqZWN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDk5OTg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2lu
Y2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTEyLDkgKzExMyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBpbnQgbV9iaXRzOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgU3ltYm9sVGFibGVJbmRl
eEhhc2hUcmFpdHMgewotICAgICAgICB0eXBlZGVmIFN5bWJvbFRhYmxlRW50cnkgVHJhaXRUeXBl
OwotICAgICAgICBzdGF0aWMgU3ltYm9sVGFibGVFbnRyeSBlbXB0eVZhbHVlKCkgeyByZXR1cm4g
U3ltYm9sVGFibGVFbnRyeSgpOyB9CisgICAgc3RydWN0IFN5bWJvbFRhYmxlSW5kZXhIYXNoVHJh
aXRzIDogSGFzaFRyYWl0czxTeW1ib2xUYWJsZUVudHJ5PiB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvSGFzaE1hcC5oCShyZXZpc2lvbiA5OTk4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvSGFzaE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5cGUg
VmFsdWVUeXBlOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNYXBw
ZWRUcmFpdHM6OlBhc3NUeXBlIE1hcHBlZFBhc3NUeXBlOworICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIE1hcHBlZFRyYWl0czo6UGVla1R5cGUgTWFwcGVkUGVla1R5cGU7CisKICAgICAgICAgdHlw
ZWRlZiBIYXNoQXJnIEhhc2hGdW5jdGlvbnM7CiAKICAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8
S2V5VHlwZSwgVmFsdWVUeXBlLCBQYWlyRmlyc3RFeHRyYWN0b3I8VmFsdWVUeXBlPiwKQEAgLTY2
LDE3ICs2OSwxNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgZmluZChjb25z
dCBLZXlUeXBlJik7CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgS2V5VHlwZSYp
IGNvbnN0OwogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEtleVR5cGUmKSBjb25zdDsKLSAg
ICAgICAgTWFwcGVkVHlwZSBnZXQoY29uc3QgS2V5VHlwZSYpIGNvbnN0OworICAgICAgICBNYXBw
ZWRQZWVrVHlwZSBnZXQoY29uc3QgS2V5VHlwZSYpIGNvbnN0OwogCiAgICAgICAgIC8vIHJlcGxh
Y2VzIHZhbHVlIGJ1dCBub3Qga2V5IGlmIGtleSBpcyBhbHJlYWR5IHByZXNlbnQKICAgICAgICAg
Ly8gcmV0dXJuIHZhbHVlIGlzIGEgcGFpciBvZiB0aGUgaXRlcmF0b3IgdG8gdGhlIGtleSBsb2Nh
dGlvbiwgCiAgICAgICAgIC8vIGFuZCBhIGJvb2xlYW4gdGhhdCdzIHRydWUgaWYgYSBuZXcgdmFs
dWUgd2FzIGFjdHVhbGx5IGFkZGVkCi0gICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IHNldChj
b25zdCBLZXlUeXBlJiwgY29uc3QgTWFwcGVkVHlwZSYpOyAKKyAgICAgICAgcGFpcjxpdGVyYXRv
ciwgYm9vbD4gc2V0KGNvbnN0IEtleVR5cGUmLCBNYXBwZWRQYXNzVHlwZSk7CiAKICAgICAgICAg
Ly8gZG9lcyBub3RoaW5nIGlmIGtleSBpcyBhbHJlYWR5IHByZXNlbnQKICAgICAgICAgLy8gcmV0
dXJuIHZhbHVlIGlzIGEgcGFpciBvZiB0aGUgaXRlcmF0b3IgdG8gdGhlIGtleSBsb2NhdGlvbiwg
CiAgICAgICAgIC8vIGFuZCBhIGJvb2xlYW4gdGhhdCdzIHRydWUgaWYgYSBuZXcgdmFsdWUgd2Fz
IGFjdHVhbGx5IGFkZGVkCi0gICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGFkZChjb25zdCBL
ZXlUeXBlJiwgY29uc3QgTWFwcGVkVHlwZSYpOyAKKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9v
bD4gYWRkKGNvbnN0IEtleVR5cGUmLCBNYXBwZWRQYXNzVHlwZSk7CiAKICAgICAgICAgdm9pZCBy
ZW1vdmUoY29uc3QgS2V5VHlwZSYpOwogICAgICAgICB2b2lkIHJlbW92ZShpdGVyYXRvcik7CkBA
IC05OSwxMiArMTAyLDEyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAvLyAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFQmKTsKICAgICAgICAgLy8gICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBWYWx1ZVR5cGUmLCBjb25zdCBUJik7CiAgICAgICAgIC8vICAgc3RhdGljIHRyYW5zbGF0
ZShWYWx1ZVR5cGUmLCBjb25zdCBUJiwgdW5zaWduZWQgaGFzaENvZGUpOwotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4gcGFpcjxpdGVyYXRvciwg
Ym9vbD4gYWRkKGNvbnN0IFQmLCBjb25zdCBNYXBwZWRUeXBlJik7CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBwYWlyPGl0ZXJhdG9yLCBib29s
PiBhZGQoY29uc3QgVCYsIE1hcHBlZFBhc3NUeXBlKTsKIAogICAgICAgICB2b2lkIGNoZWNrQ29u
c2lzdGVuY3koKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHBhaXI8aXRlcmF0b3Is
IGJvb2w+IGlubGluZUFkZChjb25zdCBLZXlUeXBlJiwgY29uc3QgTWFwcGVkVHlwZSYpOworICAg
ICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBpbmxpbmVBZGQoY29uc3QgS2V5VHlwZSYsIE1hcHBl
ZFBhc3NUeXBlKTsKIAogICAgICAgICBIYXNoVGFibGVUeXBlIG1faW1wbDsKICAgICB9OwpAQCAt
MTE3LDEwICsxMjAsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgc3RydWN0IEhhc2hNYXBUcmFu
c2xhdG9yIHsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVR5cGU6OmZpcnN0X3R5cGUg
S2V5VHlwZTsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVR5cGU6OnNlY29uZF90eXBl
IE1hcHBlZFR5cGU7CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlNlY29u
ZFRyYWl0czo6UGFzc1R5cGUgTWFwcGVkUGFzc1R5cGU7CiAKICAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgS2V5VHlwZSYga2V5KSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjpoYXNo
KGtleSk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgS2V5VHlwZSYgYSwgY29u
c3QgS2V5VHlwZSYgYikgeyByZXR1cm4gSGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0KLSAg
ICAgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFZhbHVlVHlwZSYgbG9jYXRpb24sIGNvbnN0IEtl
eVR5cGUmIGtleSwgY29uc3QgTWFwcGVkVHlwZSYgbWFwcGVkKQorICAgICAgICBzdGF0aWMgdm9p
ZCB0cmFuc2xhdGUoVmFsdWVUeXBlJiBsb2NhdGlvbiwgY29uc3QgS2V5VHlwZSYga2V5LCBNYXBw
ZWRQYXNzVHlwZSBtYXBwZWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGxvY2F0aW9uLmZpcnN0
ID0ga2V5OwogICAgICAgICAgICAgbG9jYXRpb24uc2Vjb25kID0gbWFwcGVkOwpAQCAtMjM2LDE1
ICsyNDAsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIGlubGlu
ZSBwYWlyPHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgWD46Oml0ZXJhdG9yLCBib29sPgot
ICAgIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmlubGluZUFkZChjb25zdCBLZXlUeXBlJiBrZXks
IGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkgCisgICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6
aW5saW5lQWRkKGNvbnN0IEtleVR5cGUmIGtleSwgTWFwcGVkUGFzc1R5cGUgbWFwcGVkKSAKICAg
ICB7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcFRyYW5zbGF0b3I8VmFsdWVUeXBlLCBWYWx1ZVRy
YWl0cywgSGFzaEZ1bmN0aW9ucz4gVHJhbnNsYXRvclR5cGU7Ci0gICAgICAgIHJldHVybiBtX2lt
cGwudGVtcGxhdGUgYWRkPEtleVR5cGUsIE1hcHBlZFR5cGUsIFRyYW5zbGF0b3JUeXBlPihrZXks
IG1hcHBlZCk7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEtleVR5cGUsIE1h
cHBlZFBhc3NUeXBlLCBUcmFuc2xhdG9yVHlwZT4oa2V5LCBtYXBwZWQpOwogICAgIH0KIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcs
IHR5cGVuYW1lIFg+CiAgICAgcGFpcjx0eXBlbmFtZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+Ojpp
dGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpzZXQoY29uc3QgS2V5
VHlwZSYga2V5LCBjb25zdCBNYXBwZWRUeXBlJiBtYXBwZWQpIAorICAgIEhhc2hNYXA8VCwgVSwg
ViwgVywgWD46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIE1hcHBlZFBhc3NUeXBlIG1hcHBlZCkg
CiAgICAgewogICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBpbmxpbmVBZGQo
a2V5LCBtYXBwZWQpOwogICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKQEAgLTI1Nyw3ICsy
NjEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFRZUEUsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgogICAgIHBhaXI8dHlwZW5hbWUg
SGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+Ci0gICAgSGFzaE1hcDxULCBV
LCBWLCBXLCBYPjo6YWRkKGNvbnN0IFRZUEUmIGtleSwgY29uc3QgTWFwcGVkVHlwZSYgdmFsdWUp
CisgICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YWRkKGNvbnN0IFRZUEUmIGtleSwgTWFwcGVk
UGFzc1R5cGUgdmFsdWUpCiAgICAgewogICAgICAgICB0eXBlZGVmIEhhc2hNYXBUcmFuc2xhdG9y
QWRhcHRlcjxWYWx1ZVR5cGUsIFZhbHVlVHJhaXRzLCBUWVBFLCBIYXNoVHJhbnNsYXRvcj4gQWRh
cHRlcjsKICAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8
VFlQRSwgTWFwcGVkVHlwZSwgQWRhcHRlcj4oa2V5LCB2YWx1ZSk7CkBAIC0yNjUsMTkgKzI2OSwx
OSBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgcGFpcjx0eXBlbmFt
ZSBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjphZGQoY29uc3QgS2V5VHlwZSYga2V5LCBjb25zdCBNYXBwZWRUeXBlJiBt
YXBwZWQpCisgICAgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6YWRkKGNvbnN0IEtleVR5cGUmIGtl
eSwgTWFwcGVkUGFzc1R5cGUgbWFwcGVkKQogICAgIHsKICAgICAgICAgcmV0dXJuIGlubGluZUFk
ZChrZXksIG1hcHBlZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotICAg
IHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkVHlwZQor
ICAgIHR5cGVuYW1lIEhhc2hNYXA8VCwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkUGVl
a1R5cGUKICAgICBIYXNoTWFwPFQsIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBL
ZXlUeXBlJiBrZXkpIGNvbnN0CiAgICAgewogICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29u
c3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBsKS5sb29rdXAoa2V5KTsKICAgICAgICAgaWYg
KCFlbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OmVtcHR5VmFsdWUoKTsK
LSAgICAgICAgcmV0dXJuIGVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gTWFwcGVk
VHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKKyAgICAgICAgcmV0dXJu
IE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVHJhaXRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVHJhaXRzLmgJKHJldmlzaW9u
IDk5OTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVHJhaXRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICBjbGFzcyBT
dHJpbmc7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBPd25QdHI7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093blB0cjsKKwogICAgIHVzaW5nIHN0ZDo6cGFp
cjsKICAgICB1c2luZyBzdGQ6Om1ha2VfcGFpcjsKIApAQCAtNTQsNiArNTcsMTAgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEdlbmVyaWNIYXNoVHJh
aXRzIDogR2VuZXJpY0hhc2hUcmFpdHNCYXNlPElzSW50ZWdlcjxUPjo6dmFsdWUsIFQ+IHsKICAg
ICAgICAgdHlwZWRlZiBUIFRyYWl0VHlwZTsKICAgICAgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgp
IHsgcmV0dXJuIFQoKTsgfQorICAgICAgICB0eXBlZGVmIGNvbnN0IFQmIFBhc3NUeXBlOworICAg
ICAgICBzdGF0aWMgY29uc3QgVCYgcGFzcyhjb25zdCBUJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7
IH0KKyAgICAgICAgdHlwZWRlZiBjb25zdCBUJiBQZWVrVHlwZTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IFQmIHBlZWsoY29uc3QgVCYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CiAgICAgfTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hU
cmFpdHM8VD4geyB9OwpAQCAtOTAsNyArOTcsMjEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFQmIHZhbHVlKSB7IHJldHVybiB2YWx1
ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAgICAgfTsKIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPFJlZlB0cjxQPiA+IDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPFJlZlB0cjxQPiA+IHsgfTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3Qg
SGFzaFRyYWl0czxPd25QdHI8UD4gPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxPd25QdHI8UD4g
PgorICAgIHsKKyAgICAgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGVtcHR5VmFsdWUoKSB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgICAgIHR5cGVkZWYgUGFzc093blB0cjxQPiBQYXNzVHlwZTsK
KyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8UD4gcGFzcyhjb25zdCBPd25QdHI8UD4mIHZhbHVl
KSB7IHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7IH0KKyAgICAgICAgdHlwZWRlZiBQKiBQZWVrVHlw
ZTsKKyAgICAgICAgc3RhdGljIFAqIHBlZWsoY29uc3QgT3duUHRyPFA+JiB2YWx1ZSkgeyByZXR1
cm4gdmFsdWUuZ2V0KCk7IH0KKyAgICAgICAgc3RhdGljIFAqIHBlZWsoc3RkOjpudWxscHRyX3Qp
IHsgcmV0dXJuIDA7IH0KKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBI
YXNoVHJhaXRzPFJlZlB0cjxQPiA+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFJlZlB0cjxQPiA+
IAorICAgIHsKKyAgICAgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFA+IFBhc3NUeXBlOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQPiBwYXNzKGNvbnN0IFJlZlB0cjxQPiYgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlOyB9CisgICAgICAgIC8vIFdlIGNhbiBpbXBsZW1lbnQgUGVla1R5cGUgZm9yIFJl
ZlB0ciBpZiB3ZSBhbHNvIGNoYW5nZSBjYWxsZXJzIG9mIGdldCgpIHRvIGV4cGVjdCByYXcgcG9p
bnRlcnMuCisgICAgfTsKICAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFN0cmluZz4g
OiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8U3RyaW5nPiB7IH07CiAKICAgICAvLyBzcGVjaWFsIHRy
YWl0cyBmb3IgcGFpcnMsIGhlbHBmdWwgZm9yIHRoZWlyIHVzZSBpbiBIYXNoTWFwIGltcGxlbWVu
dGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hNYXAuaAko
cmV2aXNpb24gOTk5ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ckhhc2hN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDExIEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHlwZTo6c2Vjb25kX3R5cGUgTWFwcGVkVHlw
ZTsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6Rmlyc3RUcmFpdHMgS2V5
VHJhaXRzOwogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpTZWNvbmRUcmFp
dHMgTWFwcGVkVHJhaXRzOworICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpT
ZWNvbmRUcmFpdHM6OlBhc3NUeXBlIE1hcHBlZFBhc3NUeXBlOwogCiAgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKFJhd0tleVR5cGUga2V5KSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjpoYXNo
KGtleSk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgS2V5VHlwZSYgYSwgUmF3
S2V5VHlwZSBiKSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjplcXVhbChhLCBiKTsgfQotICAgICAg
ICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVmFsdWVUeXBlJiBsb2NhdGlvbiwgUmF3S2V5VHlwZSBr
ZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkKKyAgICAgICAgc3RhdGljIHZvaWQgdHJhbnNs
YXRlKFZhbHVlVHlwZSYgbG9jYXRpb24sIFJhd0tleVR5cGUga2V5LCBNYXBwZWRQYXNzVHlwZSBt
YXBwZWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGxvY2F0aW9uLmZpcnN0ID0ga2V5OwogICAg
ICAgICAgICAgbG9jYXRpb24uc2Vjb25kID0gbWFwcGVkOwpAQCAtNTksNiArNjAsOSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRU
eXBlIFZhbHVlVHlwZTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
TWFwcGVkVHJhaXRzOjpQYXNzVHlwZSBNYXBwZWRQYXNzVHlwZTsKKyAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBNYXBwZWRUcmFpdHM6OlBlZWtUeXBlIE1hcHBlZFBlZWtUeXBlOworCiAgICAgICAg
IHR5cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaFRh
YmxlPEtleVR5cGUsIFZhbHVlVHlwZSwgUGFpckZpcnN0RXh0cmFjdG9yPFZhbHVlVHlwZT4sCkBA
IC04OSwyMSArOTMsMjEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGZpbmQoUmF3S2V5VHlwZSkgY29uc3Q7CiAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgS2V5
VHlwZSYpIGNvbnN0OwogICAgICAgICBib29sIGNvbnRhaW5zKFJhd0tleVR5cGUpIGNvbnN0Owot
ICAgICAgICBNYXBwZWRUeXBlIGdldChjb25zdCBLZXlUeXBlJikgY29uc3Q7Ci0gICAgICAgIE1h
cHBlZFR5cGUgZ2V0KFJhd0tleVR5cGUpIGNvbnN0OwotICAgICAgICBNYXBwZWRUeXBlIGlubGlu
ZUdldChSYXdLZXlUeXBlKSBjb25zdDsKKyAgICAgICAgTWFwcGVkUGVla1R5cGUgZ2V0KGNvbnN0
IEtleVR5cGUmKSBjb25zdDsKKyAgICAgICAgTWFwcGVkUGVla1R5cGUgZ2V0KFJhd0tleVR5cGUp
IGNvbnN0OworICAgICAgICBNYXBwZWRQZWVrVHlwZSBpbmxpbmVHZXQoUmF3S2V5VHlwZSkgY29u
c3Q7CiAKICAgICAgICAgLy8gcmVwbGFjZXMgdmFsdWUgYnV0IG5vdCBrZXkgaWYga2V5IGlzIGFs
cmVhZHkgcHJlc2VudAogICAgICAgICAvLyByZXR1cm4gdmFsdWUgaXMgYSBwYWlyIG9mIHRoZSBp
dGVyYXRvciB0byB0aGUga2V5IGxvY2F0aW9uLCAKICAgICAgICAgLy8gYW5kIGEgYm9vbGVhbiB0
aGF0J3MgdHJ1ZSBpZiBhIG5ldyB2YWx1ZSB3YXMgYWN0dWFsbHkgYWRkZWQKLSAgICAgICAgcGFp
cjxpdGVyYXRvciwgYm9vbD4gc2V0KGNvbnN0IEtleVR5cGUmLCBjb25zdCBNYXBwZWRUeXBlJik7
IAotICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBzZXQoUmF3S2V5VHlwZSwgY29uc3QgTWFw
cGVkVHlwZSYpOyAKKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gc2V0KGNvbnN0IEtleVR5
cGUmLCBNYXBwZWRQYXNzVHlwZSk7IAorICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBzZXQo
UmF3S2V5VHlwZSwgTWFwcGVkUGFzc1R5cGUpOyAKIAogICAgICAgICAvLyBkb2VzIG5vdGhpbmcg
aWYga2V5IGlzIGFscmVhZHkgcHJlc2VudAogICAgICAgICAvLyByZXR1cm4gdmFsdWUgaXMgYSBw
YWlyIG9mIHRoZSBpdGVyYXRvciB0byB0aGUga2V5IGxvY2F0aW9uLCAKICAgICAgICAgLy8gYW5k
IGEgYm9vbGVhbiB0aGF0J3MgdHJ1ZSBpZiBhIG5ldyB2YWx1ZSB3YXMgYWN0dWFsbHkgYWRkZWQK
LSAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gYWRkKGNvbnN0IEtleVR5cGUmLCBjb25zdCBN
YXBwZWRUeXBlJik7IAotICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoUmF3S2V5VHlw
ZSwgY29uc3QgTWFwcGVkVHlwZSYpOyAKKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gYWRk
KGNvbnN0IEtleVR5cGUmLCBNYXBwZWRQYXNzVHlwZSk7IAorICAgICAgICBwYWlyPGl0ZXJhdG9y
LCBib29sPiBhZGQoUmF3S2V5VHlwZSwgTWFwcGVkUGFzc1R5cGUpOyAKIAogICAgICAgICB2b2lk
IHJlbW92ZShjb25zdCBLZXlUeXBlJik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKFJhd0tleVR5cGUp
OwpAQCAtMTE0LDggKzExOCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBNYXBwZWRUeXBl
IHRha2UoUmF3S2V5VHlwZSk7IC8vIGVmZmljaWVudCBjb21iaW5hdGlvbiBvZiBnZXQgd2l0aCBy
ZW1vdmUKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IGlubGlu
ZUFkZChjb25zdCBLZXlUeXBlJiwgY29uc3QgTWFwcGVkVHlwZSYpOwotICAgICAgICBwYWlyPGl0
ZXJhdG9yLCBib29sPiBpbmxpbmVBZGQoUmF3S2V5VHlwZSwgY29uc3QgTWFwcGVkVHlwZSYpOwor
ICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBpbmxpbmVBZGQoY29uc3QgS2V5VHlwZSYsIE1h
cHBlZFBhc3NUeXBlKTsKKyAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gaW5saW5lQWRkKFJh
d0tleVR5cGUsIE1hcHBlZFBhc3NUeXBlKTsKIAogICAgICAgICBIYXNoVGFibGVUeXBlIG1faW1w
bDsKICAgICB9OwpAQCAtMjA2LDIyICsyMTAsMjIgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0
eXBlbmFtZSBYPgogICAgIGlubGluZSBwYWlyPHR5cGVuYW1lIEhhc2hNYXA8UmVmUHRyPFQ+LCBV
LCBWLCBXLCBYPjo6aXRlcmF0b3IsIGJvb2w+Ci0gICAgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYs
IFcsIFg+OjppbmxpbmVBZGQoY29uc3QgS2V5VHlwZSYga2V5LCBjb25zdCBNYXBwZWRUeXBlJiBt
YXBwZWQpIAorICAgIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBYPjo6aW5saW5lQWRkKGNv
bnN0IEtleVR5cGUmIGtleSwgTWFwcGVkUGFzc1R5cGUgbWFwcGVkKSAKICAgICB7CiAgICAgICAg
IHR5cGVkZWYgSGFzaE1hcFRyYW5zbGF0b3I8VmFsdWVUeXBlLCBWYWx1ZVRyYWl0cywgSGFzaEZ1
bmN0aW9ucz4gVHJhbnNsYXRvclR5cGU7Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUg
YWRkPEtleVR5cGUsIE1hcHBlZFR5cGUsIFRyYW5zbGF0b3JUeXBlPihrZXksIG1hcHBlZCk7Cisg
ICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgYWRkPEtleVR5cGUsIE1hcHBlZFBhc3NUeXBl
LCBUcmFuc2xhdG9yVHlwZT4oa2V5LCBtYXBwZWQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+
CiAgICAgaW5saW5lIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+
OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46Omlu
bGluZUFkZChSYXdLZXlUeXBlIGtleSwgY29uc3QgTWFwcGVkVHlwZSYgbWFwcGVkKSAKKyAgICBI
YXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmlubGluZUFkZChSYXdLZXlUeXBlIGtleSwg
TWFwcGVkUGFzc1R5cGUgbWFwcGVkKSAKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwudGVt
cGxhdGUgYWRkPFJhd0tleVR5cGUsIE1hcHBlZFR5cGUsIFJhd0tleVRyYW5zbGF0b3I+KGtleSwg
bWFwcGVkKTsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBhZGQ8UmF3S2V5VHlwZSwg
TWFwcGVkUGFzc1R5cGUsIFJhd0tleVRyYW5zbGF0b3I+KGtleSwgbWFwcGVkKTsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXLCB0eXBlbmFtZSBYPgogICAgIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUs
IFYsIFcsIFg+OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwg
VywgWD46OnNldChjb25zdCBLZXlUeXBlJiBrZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkg
CisgICAgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjpzZXQoY29uc3QgS2V5VHlwZSYg
a2V5LCBNYXBwZWRQYXNzVHlwZSBtYXBwZWQpIAogICAgIHsKICAgICAgICAgcGFpcjxpdGVyYXRv
ciwgYm9vbD4gcmVzdWx0ID0gaW5saW5lQWRkKGtleSwgbWFwcGVkKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQuc2Vjb25kKSB7CkBAIC0yMzMsNyArMjM3LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBYPgogICAgIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYs
IFcsIFg+OjppdGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywg
WD46OnNldChSYXdLZXlUeXBlIGtleSwgY29uc3QgTWFwcGVkVHlwZSYgbWFwcGVkKSAKKyAgICBI
YXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OnNldChSYXdLZXlUeXBlIGtleSwgTWFwcGVk
UGFzc1R5cGUgbWFwcGVkKSAKICAgICB7CiAgICAgICAgIHBhaXI8aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IGlubGluZUFkZChrZXksIG1hcHBlZCk7CiAgICAgICAgIGlmICghcmVzdWx0LnNlY29u
ZCkgewpAQCAtMjQ1LDQwICsyNDksNDAgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFt
ZSBYPgogICAgIHBhaXI8dHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+Ojpp
dGVyYXRvciwgYm9vbD4KLSAgICBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmFkZChj
b25zdCBLZXlUeXBlJiBrZXksIGNvbnN0IE1hcHBlZFR5cGUmIG1hcHBlZCkKKyAgICBIYXNoTWFw
PFJlZlB0cjxUPiwgVSwgViwgVywgWD46OmFkZChjb25zdCBLZXlUeXBlJiBrZXksIE1hcHBlZFBh
c3NUeXBlIG1hcHBlZCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbmxpbmVBZGQoa2V5LCBtYXBw
ZWQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIFg+CiAgICAgcGFpcjx0eXBlbmFtZSBIYXNoTWFw
PFJlZlB0cjxUPiwgVSwgViwgVywgWD46Oml0ZXJhdG9yLCBib29sPgotICAgIEhhc2hNYXA8UmVm
UHRyPFQ+LCBVLCBWLCBXLCBYPjo6YWRkKFJhd0tleVR5cGUga2V5LCBjb25zdCBNYXBwZWRUeXBl
JiBtYXBwZWQpCisgICAgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIFg+OjphZGQoUmF3S2V5
VHlwZSBrZXksIE1hcHBlZFBhc3NUeXBlIG1hcHBlZCkKICAgICB7CiAgICAgICAgIHJldHVybiBp
bmxpbmVBZGQoa2V5LCBtYXBwZWQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0
cz4KLSAgICB0eXBlbmFtZSBIYXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgTWFwcGVkVHJhaXRz
Pjo6TWFwcGVkVHlwZQorICAgIHR5cGVuYW1lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBN
YXBwZWRUcmFpdHM+OjpNYXBwZWRQZWVrVHlwZQogICAgIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBW
LCBXLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAogICAgIHsK
ICAgICAgICAgVmFsdWVUeXBlKiBlbnRyeSA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlVHlwZSY+KG1f
aW1wbCkubG9va3VwKGtleSk7CiAgICAgICAgIGlmICghZW50cnkpCi0gICAgICAgICAgICByZXR1
cm4gTWFwcGVkVHJhaXRzOjplbXB0eVZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBlbnRyeS0+c2Vj
b25kOworICAgICAgICAgICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhNYXBwZWRUcmFpdHM6
OmVtcHR5VmFsdWUoKSk7CisgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OnBlZWsoZW50cnkt
PnNlY29uZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwg
dHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotICAgIHR5cGVu
YW1lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBNYXBwZWRUcmFpdHM+OjpNYXBwZWRUeXBl
CisgICAgdHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4sIFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46
Ok1hcHBlZFBlZWtUeXBlCiAgICAgaW5saW5lIEhhc2hNYXA8UmVmUHRyPFQ+LCBVLCBWLCBXLCBN
YXBwZWRUcmFpdHM+OjppbmxpbmVHZXQoUmF3S2V5VHlwZSBrZXkpIGNvbnN0CiAgICAgewogICAg
ICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gY29uc3RfY2FzdDxIYXNoVGFibGVUeXBlJj4obV9pbXBs
KS50ZW1wbGF0ZSBsb29rdXA8UmF3S2V5VHlwZSwgUmF3S2V5VHJhbnNsYXRvcj4oa2V5KTsKICAg
ICAgICAgaWYgKCFlbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBNYXBwZWRUcmFpdHM6OmVtcHR5
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIGVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICByZXR1
cm4gTWFwcGVkVHJhaXRzOjpwZWVrKE1hcHBlZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKKyAgICAg
ICAgcmV0dXJuIE1hcHBlZFRyYWl0czo6cGVlayhlbnRyeS0+c2Vjb25kKTsKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBX
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci0gICAgdHlwZW5hbWUgSGFzaE1hcDxSZWZQdHI8VD4s
IFUsIFYsIFcsIE1hcHBlZFRyYWl0cz46Ok1hcHBlZFR5cGUKKyAgICB0eXBlbmFtZSBIYXNoTWFw
PFJlZlB0cjxUPiwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6TWFwcGVkUGVla1R5cGUKICAgICBI
YXNoTWFwPFJlZlB0cjxUPiwgVSwgViwgVywgTWFwcGVkVHJhaXRzPjo6Z2V0KFJhd0tleVR5cGUg
a2V5KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGlubGluZUdldChrZXkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCShyZXZpc2lvbiA5OTk4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgdXNpbmcgc3RkOjptaW47CiAgICAgdXNpbmcgc3RkOjpt
YXg7CiAKLSAgICB0ZW1wbGF0ZSA8Ym9vbCBuZWVkc0Rlc3RydWN0aW9uLCB0eXBlbmFtZSBUPgot
ICAgIHN0cnVjdCBWZWN0b3JEZXN0cnVjdG9yOworICAgIHRlbXBsYXRlIDxib29sIG5lZWRzRGVz
dHJ1Y3Rpb24sIHR5cGVuYW1lIFQ+IHN0cnVjdCBWZWN0b3JEZXN0cnVjdG9yOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdHJ1Y3QgVmVjdG9yRGVzdHJ1Y3RvcjxmYWxzZSwgVD4K
QEAgLTU5LDggKzU4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9OwogCi0g
ICAgdGVtcGxhdGUgPGJvb2wgbmVlZHNJbml0aWFsaXphdGlvbiwgYm9vbCBjYW5Jbml0aWFsaXpl
V2l0aE1lbXNldCwgdHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmVjdG9ySW5pdGlhbGl6ZXI7Cisg
ICAgdGVtcGxhdGUgPGJvb2wgbmVlZHNJbml0aWFsaXphdGlvbiwgYm9vbCBjYW5Jbml0aWFsaXpl
V2l0aE1lbXNldCwgdHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckluaXRpYWxpemVyOwogCiAgICAg
dGVtcGxhdGU8Ym9vbCBpZ25vcmUsIHR5cGVuYW1lIFQ+CiAgICAgc3RydWN0IFZlY3RvckluaXRp
YWxpemVyPGZhbHNlLCBpZ25vcmUsIFQ+CkBAIC04Nyw4ICs4NSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHRlbXBsYXRlIDxib29sIGNhbk1vdmVXaXRoTWVt
Y3B5LCB0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWZWN0b3JNb3ZlcjsKKyAgICB0ZW1wbGF0ZSA8
Ym9vbCBjYW5Nb3ZlV2l0aE1lbWNweSwgdHlwZW5hbWUgVD4gc3RydWN0IFZlY3Rvck1vdmVyOwog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdHJ1Y3QgVmVjdG9yTW92ZXI8ZmFsc2Us
IFQ+CkBAIC0xMzUsOCArMTMyLDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgdGVtcGxhdGUgPGJvb2wgY2FuQ29weVdpdGhNZW1jcHksIHR5cGVuYW1lIFQ+Ci0g
ICAgc3RydWN0IFZlY3RvckNvcGllcjsKKyAgICB0ZW1wbGF0ZSA8Ym9vbCBjYW5Db3B5V2l0aE1l
bWNweSwgdHlwZW5hbWUgVD4gc3RydWN0IFZlY3RvckNvcGllcjsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiAgICAgc3RydWN0IFZlY3RvckNvcGllcjxmYWxzZSwgVD4KQEAgLTE2MCwxNiAr
MTU2LDE1IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIHRlbXBs
YXRlIDxib29sIGNhbkZpbGxXaXRoTWVtc2V0LCB0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWZWN0
b3JGaWxsZXI7CisgICAgdGVtcGxhdGUgPGJvb2wgY2FuRmlsbFdpdGhNZW1zZXQsIHR5cGVuYW1l
IFQ+IHN0cnVjdCBWZWN0b3JGaWxsZXI7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
IHN0cnVjdCBWZWN0b3JGaWxsZXI8ZmFsc2UsIFQ+CiAgICAgewotICAgICAgICBzdGF0aWMgdm9p
ZCB1bmluaXRpYWxpemVkRmlsbChUKiBkc3QsIFQqIGRzdEVuZCwgY29uc3QgVCYgdmFsKSAKKyAg
ICAgICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXplZEZpbGwoVCogZHN0LCBUKiBkc3RFbmQsIGNv
bnN0IFQmIHZhbHVlKSAKICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUgKGRzdCAhPSBkc3RF
bmQpIHsKLSAgICAgICAgICAgICAgICBuZXcgKGRzdCkgVCh2YWwpOworICAgICAgICAgICAgICAg
IG5ldyAoZHN0KSBUKHZhbHVlKTsKICAgICAgICAgICAgICAgICArK2RzdDsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMTc4LDE1ICsxNzMsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBzdHJ1Y3QgVmVjdG9yRmlsbGVyPHRydWUsIFQ+CiAg
ICAgewotICAgICAgICBzdGF0aWMgdm9pZCB1bmluaXRpYWxpemVkRmlsbChUKiBkc3QsIFQqIGRz
dEVuZCwgY29uc3QgVCYgdmFsKSAKKyAgICAgICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXplZEZp
bGwoVCogZHN0LCBUKiBkc3RFbmQsIGNvbnN0IFQmIHZhbHVlKSAKICAgICAgICAgewogICAgICAg
ICAgICAgQVNTRVJUKHNpemVvZihUKSA9PSBzaXplb2YoY2hhcikpOwotICAgICAgICAgICAgbWVt
c2V0KGRzdCwgdmFsLCBkc3RFbmQgLSBkc3QpOworICAgICAgICAgICAgbWVtc2V0KGRzdCwgdmFs
dWUsIGRzdEVuZCAtIGRzdCk7CiAgICAgICAgIH0KICAgICB9OwogICAgIAotICAgIHRlbXBsYXRl
PGJvb2wgY2FuQ29tcGFyZVdpdGhNZW1jbXAsIHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZlY3Rv
ckNvbXBhcmVyOworICAgIHRlbXBsYXRlPGJvb2wgY2FuQ29tcGFyZVdpdGhNZW1jbXAsIHR5cGVu
YW1lIFQ+IHN0cnVjdCBWZWN0b3JDb21wYXJlcjsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogICAgIHN0cnVjdCBWZWN0b3JDb21wYXJlcjxmYWxzZSwgVD4KQEAgLTIzNyw5ICsyMzEs
OSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIFZlY3RvckNvcGllcjxWZWN0b3JUcmFp
dHM8VD46OmNhbkNvcHlXaXRoTWVtY3B5LCBUPjo6dW5pbml0aWFsaXplZENvcHkoc3JjLCBzcmNF
bmQsIGRzdCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCB1bmluaXRpYWxpemVk
RmlsbChUKiBkc3QsIFQqIGRzdEVuZCwgY29uc3QgVCYgdmFsKQorICAgICAgICBzdGF0aWMgdm9p
ZCB1bmluaXRpYWxpemVkRmlsbChUKiBkc3QsIFQqIGRzdEVuZCwgY29uc3QgVCYgdmFsdWUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIFZlY3RvckZpbGxlcjxWZWN0b3JUcmFpdHM8VD46OmNhbkZp
bGxXaXRoTWVtc2V0LCBUPjo6dW5pbml0aWFsaXplZEZpbGwoZHN0LCBkc3RFbmQsIHZhbCk7Cisg
ICAgICAgICAgICBWZWN0b3JGaWxsZXI8VmVjdG9yVHJhaXRzPFQ+OjpjYW5GaWxsV2l0aE1lbXNl
dCwgVD46OnVuaW5pdGlhbGl6ZWRGaWxsKGRzdCwgZHN0RW5kLCB2YWx1ZSk7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgVCogYSwgY29uc3Qg
VCogYiwgc2l6ZV90IHNpemUpCkBAIC0zMjAsOCArMzE0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIHNpemVfdCBtX2NhcGFjaXR5OwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgY2xhc3MgVmVjdG9yQnVmZmVyOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gY2xhc3MgVmVjdG9y
QnVmZmVyOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBjbGFzcyBWZWN0b3JCdWZm
ZXI8VCwgMD4gOiBwcml2YXRlIFZlY3RvckJ1ZmZlckJhc2U8VD4gewpAQCAtNDk1LDE2ICs0ODgs
MTUgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgflZlY3RvcigpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChtX3NpemUpIHNocmluaygwKTsKKyAgICAgICAgICAgIGlmIChtX3NpemUp
CisgICAgICAgICAgICAgICAgc2hyaW5rKDApOwogICAgICAgICB9CiAKICAgICAgICAgVmVjdG9y
KGNvbnN0IFZlY3RvciYpOwotICAgICAgICB0ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eT4g
Ci0gICAgICAgIFZlY3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eT4mKTsKKyAgICAg
ICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IFZlY3Rvcihjb25zdCBWZWN0b3I8VCwg
b3RoZXJDYXBhY2l0eT4mKTsKIAogICAgICAgICBWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0
b3ImKTsKLSAgICAgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IAotICAgICAgICBW
ZWN0b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eT4mKTsKKyAgICAg
ICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0
IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5PiYpOwogCiAgICAgICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLmNhcGFjaXR5KCk7IH0KQEAgLTU1NSw3ICs1NDcsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFwcGVuZChjb25z
dCBVKiwgc2l6ZV90KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQo
Y29uc3QgVSYpOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIHVuY2hlY2tlZEFw
cGVuZChjb25zdCBVJiB2YWwpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIHVu
Y2hlY2tlZEFwcGVuZChjb25zdCBVJik7CiAgICAgICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNh
cGFjaXR5PiB2b2lkIGFwcGVuZChjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eT4mKTsKICAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCB0cnlBcHBlbmQoY29uc3QgVSosIHNpemVf
dCk7CiAKQEAgLTU3NiwxNiArNTY4LDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAg
c2hyaW5rKHNpemUoKSAtIDEpOyAKICAgICAgICAgfQogCi0gICAgICAgIFZlY3RvcihzaXplX3Qg
c2l6ZSwgY29uc3QgVCYgdmFsKQorICAgICAgICBWZWN0b3Ioc2l6ZV90IHNpemUsIGNvbnN0IFQm
IGluaXRpYWxFbGVtZW50VmFsdWUpCiAgICAgICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgICAg
ICAgICAgLCBtX2J1ZmZlcihzaXplKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoYmVnaW4o
KSkKLSAgICAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoYmVn
aW4oKSwgZW5kKCksIHZhbCk7CisgICAgICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5p
dGlhbGl6ZWRGaWxsKGJlZ2luKCksIGVuZCgpLCBpbml0aWFsRWxlbWVudFZhbHVlKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgZmlsbChjb25zdCBUJiwgc2l6ZV90KTsKLSAgICAgICAgdm9p
ZCBmaWxsKGNvbnN0IFQmIHZhbCkgeyBmaWxsKHZhbCwgc2l6ZSgpKTsgfQorICAgICAgICB2b2lk
IGZpbGwoY29uc3QgVCYgdmFsdWUpIHsgZmlsbCh2YWx1ZSwgc2l6ZSgpKTsgfQogCiAgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZFJhbmdlKEl0ZXJhdG9yIHN0
YXJ0LCBJdGVyYXRvciBlbmQpOwogCkBAIC02NDcsOCArNjM5LDcgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVn
aW4oKSwgb3RoZXIuZW5kKCksIGJlZ2luKCkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICB0ZW1wbGF0ZTxzaXplX3Qgb3RoZXJD
YXBhY2l0eT4gCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PiB0ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eT4gCiAgICAgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5Pjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5PiYgb3RoZXIpCiAg
ICAgICAgIDogbV9zaXplKG90aGVyLnNpemUoKSkKICAgICAgICAgLCBtX2J1ZmZlcihvdGhlci5j
YXBhY2l0eSgpKQpAQCAtNjg3LDEzICs2NzgsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICBp
bmxpbmUgYm9vbCB0eXBlbGVzc1BvaW50ZXJzQXJlRXF1YWwoY29uc3Qgdm9pZCogYSwgY29uc3Qg
dm9pZCogYikgeyByZXR1cm4gYSA9PSBiOyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdGVtcGxh
dGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IAogICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4m
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgb3Ro
ZXJDYXBhY2l0eT4mIG90aGVyKQogICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIGlubGluZSBjYXBh
Y2l0aWVzIG1hdGNoLCB3ZSBzaG91bGQgY2FsbCB0aGUgbW9yZSBzcGVjaWZpYwotICAgICAgICAv
LyB0ZW1wbGF0ZS4gIElmIHRoZSBpbmxpbmUgY2FwYWNpdGllcyBkb24ndCBtYXRjaCwgdGhlIHR3
byBvYmplY3RzCi0gICAgICAgIC8vIHNob3VsZG4ndCBiZSBhbGxvY2F0ZWQgdGhlIHNhbWUgYWRk
cmVzcy4KKyAgICAgICAgLy8gSWYgdGhlIGlubGluZSBjYXBhY2l0aWVzIG1hdGNoLCB0aGUgY29t
cGlsZXIgc2hvdWxkIHVzZSB0aGUgbW9yZSBzcGVjaWZpYyB0ZW1wbGF0ZSBmdW5jdGlvbi4KKyAg
ICAgICAgLy8gSWYgdGhlIGlubGluZSBjYXBhY2l0aWVzIGRvbid0IG1hdGNoLCB0aGUgdHdvIG9i
amVjdHMgc2hvdWxkbid0IGJlIGFsbG9jYXRlZCB0aGUgc2FtZSBhZGRyZXNzLgogICAgICAgICBB
U1NFUlQoIXR5cGVsZXNzUG9pbnRlcnNBcmVFcXVhbCgmb3RoZXIsIHRoaXMpKTsKIAogICAgICAg
ICBpZiAoc2l6ZSgpID4gb3RoZXIuc2l6ZSgpKQpAQCAtNzE4LDE1ICs3MDcsMTMgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBs
YXRlPHR5cGVuYW1lIFU+CiAgICAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+Ojpjb250
YWlucyhjb25zdCBVJiB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBmaW5kKHZh
bHVlKSAhPSBub3RGb3VuZDsKICAgICB9CiAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgogICAgIHNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpmaW5kKGNvbnN0IFUmIHZh
bHVlKSBjb25zdAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7
ICsraSkgewpAQCAtNzM2LDEyICs3MjMsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJl
dHVybiBub3RGb3VuZDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiAg
ICAgc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OnJldmVyc2VGaW5kKGNvbnN0IFUm
IHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPD0gc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpbmRleCA9IHNpemUoKSAtIGk7
CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBzaXplKCkgLSBpOwogICAgICAgICAgICAgaWYg
KGF0KGluZGV4KSA9PSB2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAg
ICAgIH0KQEAgLTc0OSw3ICs3MzUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpmaWxsKGNvbnN0IFQmIHZhbCwgc2l6ZV90IG5ld1NpemUp
CisgICAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpmaWxsKGNvbnN0IFQmIHZhbHVl
LCBzaXplX3QgbmV3U2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChzaXplKCkgPiBuZXdTaXplKQog
ICAgICAgICAgICAgc2hyaW5rKG5ld1NpemUpOwpAQCAtNzYwLDE1ICs3NDYsMTYgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBzdGQ6OmZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7Ci0gICAgICAgIFR5cGVPcGVy
YXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChlbmQoKSwgYmVnaW4oKSArIG5ld1NpemUsIHZhbCk7
CisgICAgICAgIHN0ZDo6ZmlsbChiZWdpbigpLCBlbmQoKSwgdmFsdWUpOworICAgICAgICBUeXBl
T3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoZW5kKCksIGJlZ2luKCkgKyBuZXdTaXplLCB2
YWx1ZSk7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhdG9yPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4gdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+CiAgICAgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHk+OjphcHBlbmRSYW5nZShJdGVyYXRvciBzdGFydCwgSXRlcmF0b3IgZW5kKQogICAg
IHsKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBzcGVjaWFsaXplZCB0byBleHBhbmQgY2FwYWNp
dHkgb25jZSBhbmQgdGhlbiBkbyBtb3JlIGVmZmljaWVudAorICAgICAgICAvLyB1bmNoZWNrZWQg
YXBwZW5kcyBpZiB0aGUgaXRlcmF0b3IgaXMgYSB0eXBlIHRoYXQgc3VwcG9ydHMgY29tcHV0aW5n
IHRoZSBkaWZmZXJlbmNlLgogICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc3RhcnQ7IGl0ICE9
IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFwcGVuZCgqaXQpOwogICAgIH0KQEAgLTk1MSwxNSAr
OTM4LDE0IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6YXBwZW5kKGNvbnN0IFUm
IHZhbCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6
YXBwZW5kKGNvbnN0IFUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgY29uc3QgVSogcHRyID0gJnZh
bDsKKyAgICAgICAgY29uc3QgVSogcHRyID0gJnZhbHVlOwogICAgICAgICBpZiAoc2l6ZSgpID09
IGNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIHB0ciA9IGV4cGFuZENhcGFjaXR5KHNpemUoKSAr
IDEsIHB0cik7CiAgICAgICAgICAgICBpZiAoIWJlZ2luKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgICAgICAKICNpZiBDT01QSUxFUihNU1ZDN19PUl9MT1dF
UikKICAgICAgICAgLy8gRklYTUU6IE1TVkM3IGdlbmVyYXRlcyBjb21waWxhdGlvbiBlcnJvcnMg
d2hlbiB0cnlpbmcgdG8gYXNzaWduCiAgICAgICAgIC8vIGEgcG9pbnRlciB0byBhIFZlY3RvciBv
ZiBpdHMgYmFzZSBjbGFzcyAoaS5lLiBjYW4ndCBkb3duY2FzdCkuIFNvIGZhcgpAQCAtOTc4LDIx
ICs5NjQsMjEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgLy8gdmVjdG9yJ3MgY2FwYWNpdHkgaXMg
bGFyZ2UgZW5vdWdoIGZvciB0aGUgYXBwZW5kIHRvIHN1Y2NlZWQuCiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6dW5jaGVja2VkQXBwZW5k
KGNvbnN0IFUmIHZhbCkKKyAgICBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+
Ojp1bmNoZWNrZWRBcHBlbmQoY29uc3QgVSYgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQo
c2l6ZSgpIDwgY2FwYWNpdHkoKSk7Ci0gICAgICAgIGNvbnN0IFUqIHB0ciA9ICZ2YWw7CisgICAg
ICAgIGNvbnN0IFUqIHB0ciA9ICZ2YWx1ZTsKICAgICAgICAgbmV3IChlbmQoKSkgVCgqcHRyKTsK
ICAgICAgICAgKyttX3NpemU7CiAgICAgfQogCiAgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5v
dCBiZSBjYWxsZWQgYXBwZW5kLCBhIGJldHRlciBuYW1lIHdvdWxkIGJlIGFwcGVuZEVsZW1lbnRz
LgogICAgIC8vIEl0IGNvdWxkIGFsc28gYmUgZWxpbWluYXRlZCBlbnRpcmVseSwgYW5kIGNhbGwg
c2l0ZXMgY291bGQganVzdCB1c2UKLSAgICAvLyBhcHBlbmRSYW5nZSh2YWwuYmVnaW4oKSwgdmFs
LmVuZCgpKS4KKyAgICAvLyBhcHBlbmRSYW5nZShvdGhlclZlY3Rvci5iZWdpbigpLCBvdGhlclZl
Y3Rvci5lbmQoKSkuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PiB0ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eT4KLSAgICBpbmxpbmUgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmQoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNp
dHk+JiB2YWwpCisgICAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6YXBw
ZW5kKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5PiYgb3RoZXJWZWN0b3IpCiAgICAgewot
ICAgICAgICBhcHBlbmQodmFsLmJlZ2luKCksIHZhbC5zaXplKCkpOworICAgICAgICBhcHBlbmQo
b3RoZXJWZWN0b3IuYmVnaW4oKSwgb3RoZXJWZWN0b3Iuc2l6ZSgpKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+CkBAIC0xMDE1LDEwICsxMDAxLDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KICAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotICAgIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT46Omluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFUmIHZhbCkKKyAgICBpbmxpbmUgdm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBjb25z
dCBVJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChwb3NpdGlvbiA8PSBzaXplKCkpOwot
ICAgICAgICBjb25zdCBVKiBkYXRhID0gJnZhbDsKKyAgICAgICAgY29uc3QgVSogZGF0YSA9ICZ2
YWx1ZTsKICAgICAgICAgaWYgKHNpemUoKSA9PSBjYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBk
YXRhID0gZXhwYW5kQ2FwYWNpdHkoc2l6ZSgpICsgMSwgZGF0YSk7CiAgICAgICAgICAgICBpZiAo
IWJlZ2luKCkpCkBAIC0xMDMxLDkgKzEwMTcsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBs
YXRlPHR5cGVuYW1lIFUsIHNpemVfdCBjPgotICAgIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT46Omluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxVLCBjPiYg
dmFsKQorICAgIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46Omluc2VydChz
aXplX3QgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxVLCBjPiYgb3RoZXJWZWN0b3IpCiAgICAgewot
ICAgICAgICBpbnNlcnQocG9zaXRpb24sIHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKKyAgICAg
ICAgaW5zZXJ0KHBvc2l0aW9uLCBvdGhlclZlY3Rvci5iZWdpbigpLCBvdGhlclZlY3Rvci5zaXpl
KCkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTEwNDMsMTUgKzEwMjksMTUgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eT46OnByZXBlbmQoY29uc3QgVSYgdmFsKQorICAgIGlubGluZSB2b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OnByZXBlbmQoY29uc3QgVSYgdmFsdWUpCiAgICAg
ewotICAgICAgICBpbnNlcnQoMCwgdmFsKTsKKyAgICAgICAgaW5zZXJ0KDAsIHZhbHVlKTsKICAg
ICB9CiAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBjPgotICAgIGlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eT46OnByZXBlbmQoY29uc3QgVmVjdG9yPFUsIGM+JiB2YWwpCisgICAg
aW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6cHJlcGVuZChjb25zdCBWZWN0
b3I8VSwgYz4mIG90aGVyVmVjdG9yKQogICAgIHsKLSAgICAgICAgaW5zZXJ0KDAsIHZhbC5iZWdp
bigpLCB2YWwuc2l6ZSgpKTsKKyAgICAgICAgaW5zZXJ0KDAsIG90aGVyVmVjdG9yLmJlZ2luKCks
IG90aGVyVmVjdG9yLnNpemUoKSk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95
YXJyL1lhcnJJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTk5ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJySW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzUzLDcgKzE3NTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5J
ZCA9IHBhcmVudGhlc2VzQmVnaW4uYXRvbS5zdWJwYXR0ZXJuSWQ7CiAKICAgICAgICAgdW5zaWdu
ZWQgbnVtU3VicGF0dGVybnMgPSBsYXN0U3VicGF0dGVybklkIC0gc3VicGF0dGVybklkICsgMTsK
LSAgICAgICAgQnl0ZURpc2p1bmN0aW9uKiBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uID0gbmV3IEJ5
dGVEaXNqdW5jdGlvbihudW1TdWJwYXR0ZXJucywgY2FsbEZyYW1lU2l6ZSk7CisgICAgICAgIE93
blB0cjxCeXRlRGlzanVuY3Rpb24+IHBhcmVudGhlc2VzRGlzanVuY3Rpb24gPSBhZG9wdFB0cihu
ZXcgQnl0ZURpc2p1bmN0aW9uKG51bVN1YnBhdHRlcm5zLCBjYWxsRnJhbWVTaXplKSk7CiAKICAg
ICAgICAgcGFyZW50aGVzZXNEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpTdWJw
YXR0ZXJuQmVnaW4oKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgdGVybUluUGFyZW50aGVzZXMg
PSBiZWdpblRlcm0gKyAxOyB0ZXJtSW5QYXJlbnRoZXNlcyA8IGVuZFRlcm07ICsrdGVybUluUGFy
ZW50aGVzZXMpCkBAIC0xNzYyLDggKzE3NjIsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zLnNocmluayhiZWdpblRlcm0pOwogCi0gICAgICAgIG1fYWxsUGFy
ZW50aGVzZXNJbmZvLmFwcGVuZChwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKTsKLSAgICAgICAgbV9i
b2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVu
dGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBj
YXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
cy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4sIHN1
YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlvbi5nZXQoKSwgY2FwdHVyZSwgaW5wdXRQ
b3NpdGlvbikpOworICAgICAgICBtX2FsbFBhcmVudGhlc2VzSW5mby5hcHBlbmQocGFyZW50aGVz
ZXNEaXNqdW5jdGlvbi5yZWxlYXNlKCkpOwogCiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQudW5zYWZl
R2V0KCk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20u
cXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwpAQCAtMTg1MCw3ICsxODUwLDcgQEAgcHVibGlj
OgogICAgICAgICBmb3IgKHVuc2lnbmVkIGFsdCA9IDA7IGFsdCA8IGRpc2p1bmN0aW9uLT5tX2Fs
dGVybmF0aXZlcy5zaXplKCk7ICsrYWx0KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjdXJyZW50
Q291bnRBbHJlYWR5Q2hlY2tlZCA9IGlucHV0Q291bnRBbHJlYWR5Q2hlY2tlZDsKIAotICAgICAg
ICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IGRpc2p1bmN0aW9uLT5tX2Fs
dGVybmF0aXZlc1thbHRdOworICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5h
dGl2ZSA9IGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlc1thbHRdLmdldCgpOwogCiAgICAgICAg
ICAgICBpZiAoYWx0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGRpc2p1bmN0aW9uID09IG1fcGF0
dGVybi5tX2JvZHkpCkBAIC0xOTYxLDcgKzE5NjEsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxC
eXRlRGlzanVuY3Rpb24+IG1fYm9keURpc2p1bmN0aW9uOwogICAgIHVuc2lnbmVkIG1fY3VycmVu
dEFsdGVybmF0aXZlSW5kZXg7CiAgICAgVmVjdG9yPFBhcmVudGhlc2VzU3RhY2tFbnRyeT4gbV9w
YXJlbnRoZXNlc1N0YWNrOwotICAgIFZlY3RvcjxCeXRlRGlzanVuY3Rpb24qPiBtX2FsbFBhcmVu
dGhlc2VzSW5mbzsKKyAgICBWZWN0b3I8T3duUHRyPEJ5dGVEaXNqdW5jdGlvbj4gPiBtX2FsbFBh
cmVudGhlc2VzSW5mbzsKIH07CiAKIFBhc3NPd25QdHI8Qnl0ZWNvZGVQYXR0ZXJuPiBieXRlQ29t
cGlsZShZYXJyUGF0dGVybiYgcGF0dGVybiwgQnVtcFBvaW50ZXJBbGxvY2F0b3IqIGFsbG9jYXRv
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRlcnByZXRlci5o
CShyZXZpc2lvbiA5OTk4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJJbnRl
cnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQsMTAgKzMzNCwxOCBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgbV9mcmFtZVNpemU7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPgoraW5saW5lIHZvaWQgYXBwZW5kUmVsZWFzZWRFbGVtZW50cyhWZWN0b3I8VD4mIGRl
c3RpbmF0aW9uLCBWZWN0b3I8VT4mIHNvdXJjZSkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IHNvdXJj
ZS5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAg
IGRlc3RpbmF0aW9uLmFwcGVuZChzb3VyY2VbaV0ucmVsZWFzZSgpKTsKK30KKwogc3RydWN0IEJ5
dGVjb2RlUGF0dGVybiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgQnl0ZWNvZGVQYXR0ZXJuKFBhc3NPd25QdHI8Qnl0ZURpc2p1bmN0aW9uPiBib2R5LCBWZWN0
b3I8Qnl0ZURpc2p1bmN0aW9uKj4gYWxsUGFyZW50aGVzZXNJbmZvLCBZYXJyUGF0dGVybiYgcGF0
dGVybiwgQnVtcFBvaW50ZXJBbGxvY2F0b3IqIGFsbG9jYXRvcikKKyAgICBCeXRlY29kZVBhdHRl
cm4oUGFzc093blB0cjxCeXRlRGlzanVuY3Rpb24+IGJvZHksIFZlY3RvcjxPd25QdHI8Qnl0ZURp
c2p1bmN0aW9uPiA+JiBhbGxQYXJlbnRoZXNlc0luZm8sIFlhcnJQYXR0ZXJuJiBwYXR0ZXJuLCBC
dW1wUG9pbnRlckFsbG9jYXRvciogYWxsb2NhdG9yKQogICAgICAgICA6IG1fYm9keShib2R5KQog
ICAgICAgICAsIG1faWdub3JlQ2FzZShwYXR0ZXJuLm1faWdub3JlQ2FzZSkKICAgICAgICAgLCBt
X211bHRpbGluZShwYXR0ZXJuLm1fbXVsdGlsaW5lKQpAQCAtMzQ2LDIwICszNTQsMTEgQEAgcHVi
bGljOgogICAgICAgICBuZXdsaW5lQ2hhcmFjdGVyQ2xhc3MgPSBwYXR0ZXJuLm5ld2xpbmVDaGFy
YWN0ZXJDbGFzcygpOwogICAgICAgICB3b3JkY2hhckNoYXJhY3RlckNsYXNzID0gcGF0dGVybi53
b3JkY2hhckNoYXJhY3RlckNsYXNzKCk7CiAKLSAgICAgICAgbV9hbGxQYXJlbnRoZXNlc0luZm8u
YXBwZW5kKGFsbFBhcmVudGhlc2VzSW5mbyk7Ci0gICAgICAgIG1fdXNlckNoYXJhY3RlckNsYXNz
ZXMuYXBwZW5kKHBhdHRlcm4ubV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcyk7Ci0gICAgICAgIC8vICdT
dGVhbCcgdGhlIFlhcnJQYXR0ZXJuJ3MgQ2hhcmFjdGVyQ2xhc3NlcyEgIFdlIGNsZWFyIGl0cwot
ICAgICAgICAvLyBhcnJheSwgc28gdGhhdCBpdCB3b24ndCBkZWxldGUgdGhlbSBvbiBkZXN0cnVj
dGlvbi4gIFdlJ2xsCi0gICAgICAgIC8vIHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIHRoYXQuCisg
ICAgICAgIGFwcGVuZFJlbGVhc2VkRWxlbWVudHMobV9hbGxQYXJlbnRoZXNlc0luZm8sIGFsbFBh
cmVudGhlc2VzSW5mbyk7CisgICAgICAgIGFwcGVuZFJlbGVhc2VkRWxlbWVudHMobV91c2VyQ2hh
cmFjdGVyQ2xhc3NlcywgcGF0dGVybi5tX3VzZXJDaGFyYWN0ZXJDbGFzc2VzKTsKICAgICAgICAg
cGF0dGVybi5tX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmNsZWFyKCk7CiAgICAgfQogCi0gICAgfkJ5
dGVjb2RlUGF0dGVybigpCi0gICAgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9hbGxQYXJl
bnRoZXNlc0luZm8pOwotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV91c2VyQ2hhcmFjdGVyQ2xh
c3Nlcyk7Ci0gICAgfQotCiAgICAgT3duUHRyPEJ5dGVEaXNqdW5jdGlvbj4gbV9ib2R5OwogICAg
IGJvb2wgbV9pZ25vcmVDYXNlOwogICAgIGJvb2wgbV9tdWx0aWxpbmU7CkBAIC0zNzEsOCArMzcw
LDggQEAgcHVibGljOgogICAgIENoYXJhY3RlckNsYXNzKiB3b3JkY2hhckNoYXJhY3RlckNsYXNz
OwogCiBwcml2YXRlOgotICAgIFZlY3RvcjxCeXRlRGlzanVuY3Rpb24qPiBtX2FsbFBhcmVudGhl
c2VzSW5mbzsKLSAgICBWZWN0b3I8Q2hhcmFjdGVyQ2xhc3MqPiBtX3VzZXJDaGFyYWN0ZXJDbGFz
c2VzOworICAgIFZlY3RvcjxPd25QdHI8Qnl0ZURpc2p1bmN0aW9uPiA+IG1fYWxsUGFyZW50aGVz
ZXNJbmZvOworICAgIFZlY3RvcjxPd25QdHI8Q2hhcmFjdGVyQ2xhc3M+ID4gbV91c2VyQ2hhcmFj
dGVyQ2xhc3NlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpZYXJyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gOTk5ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2
NSwxMSArMjE2NSwxMSBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2Vt
CiAgICAgICAgIG1fb3BzLmFwcGVuZChhbHRlcm5hdGl2ZUJlZ2luT3BDb2RlKTsKICAgICAgICAg
bV9vcHMubGFzdCgpLm1fcHJldmlvdXNPcCA9IG5vdEZvdW5kOwogICAgICAgICBtX29wcy5sYXN0
KCkubV90ZXJtID0gdGVybTsKLSAgICAgICAgVmVjdG9yPFBhdHRlcm5BbHRlcm5hdGl2ZSo+JiBh
bHRlcm5hdGl2ZXMgPSAgdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRp
dmVzOworICAgICAgICBWZWN0b3I8T3duUHRyPFBhdHRlcm5BbHRlcm5hdGl2ZT4gPiYgYWx0ZXJu
YXRpdmVzID0gdGVybS0+cGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmVzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBzaXplX3QgbGFzdE9wSW5kZXggPSBtX29wcy5zaXplKCkgLSAxOwog
Ci0gICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIG5lc3RlZEFsdGVybmF0aXZlID0gYWx0
ZXJuYXRpdmVzW2ldOworICAgICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBuZXN0ZWRBbHRl
cm5hdGl2ZSA9IGFsdGVybmF0aXZlc1tpXS5nZXQoKTsKICAgICAgICAgICAgIG9wQ29tcGlsZUFs
dGVybmF0aXZlKG5lc3RlZEFsdGVybmF0aXZlKTsKIAogICAgICAgICAgICAgc2l6ZV90IHRoaXNP
cEluZGV4ID0gbV9vcHMuc2l6ZSgpOwpAQCAtMjIxNiwxMSArMjIxNiwxMSBAQCBjbGFzcyBZYXJy
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIG1fb3BzLmFwcGVuZChPcFNp
bXBsZU5lc3RlZEFsdGVybmF0aXZlQmVnaW4pOwogICAgICAgICBtX29wcy5sYXN0KCkubV9wcmV2
aW91c09wID0gbm90Rm91bmQ7CiAgICAgICAgIG1fb3BzLmxhc3QoKS5tX3Rlcm0gPSB0ZXJtOwot
ICAgICAgICBWZWN0b3I8UGF0dGVybkFsdGVybmF0aXZlKj4mIGFsdGVybmF0aXZlcyA9ICB0ZXJt
LT5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXM7CisgICAgICAgIFZlY3Rv
cjxPd25QdHI8UGF0dGVybkFsdGVybmF0aXZlPiA+JiBhbHRlcm5hdGl2ZXMgPSAgdGVybS0+cGFy
ZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYWx0ZXJuYXRpdmVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBz
aXplX3QgbGFzdE9wSW5kZXggPSBtX29wcy5zaXplKCkgLSAxOwogCi0gICAgICAgICAgICBQYXR0
ZXJuQWx0ZXJuYXRpdmUqIG5lc3RlZEFsdGVybmF0aXZlID0gYWx0ZXJuYXRpdmVzW2ldOworICAg
ICAgICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBuZXN0ZWRBbHRlcm5hdGl2ZSA9IGFsdGVybmF0
aXZlc1tpXS5nZXQoKTsKICAgICAgICAgICAgIG9wQ29tcGlsZUFsdGVybmF0aXZlKG5lc3RlZEFs
dGVybmF0aXZlKTsKIAogICAgICAgICAgICAgc2l6ZV90IHRoaXNPcEluZGV4ID0gbV9vcHMuc2l6
ZSgpOwpAQCAtMjI5MCw3ICsyMjkwLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlbQogICAgIC8vIHRvIHJldHVybiB0aGUgZmFpbGluZyByZXN1bHQuCiAgICAgdm9p
ZCBvcENvbXBpbGVCb2R5KFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24pCiAgICAgewot
ICAgICAgICBWZWN0b3I8UGF0dGVybkFsdGVybmF0aXZlKj4mIGFsdGVybmF0aXZlcyA9ICBkaXNq
dW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXM7CisgICAgICAgIFZlY3RvcjxPd25QdHI8UGF0dGVybkFs
dGVybmF0aXZlPiA+JiBhbHRlcm5hdGl2ZXMgPSBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXM7
CiAgICAgICAgIHNpemVfdCBjdXJyZW50QWx0ZXJuYXRpdmVJbmRleCA9IDA7CiAKICAgICAgICAg
Ly8gRW1pdCB0aGUgJ29uY2UgdGhyb3VnaCcgYWx0ZXJuYXRpdmVzLgpAQCAtMjMwMCw3ICsyMzAw
LDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogCiAgICAgICAg
ICAgICBkbyB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGxhc3RPcEluZGV4ID0gbV9vcHMuc2l6
ZSgpIC0gMTsKLSAgICAgICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZl
ID0gYWx0ZXJuYXRpdmVzW2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4XTsKKyAgICAgICAgICAgICAg
ICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlID0gYWx0ZXJuYXRpdmVzW2N1cnJlbnRB
bHRlcm5hdGl2ZUluZGV4XS5nZXQoKTsKICAgICAgICAgICAgICAgICBvcENvbXBpbGVBbHRlcm5h
dGl2ZShhbHRlcm5hdGl2ZSk7CiAKICAgICAgICAgICAgICAgICBzaXplX3QgdGhpc09wSW5kZXgg
PSBtX29wcy5zaXplKCk7CkBAIC0yMzM1LDcgKzIzMzUsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9y
IDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgIG1fb3BzLmxhc3QoKS5tX3ByZXZpb3VzT3Ag
PSBub3RGb3VuZDsKICAgICAgICAgZG8gewogICAgICAgICAgICAgc2l6ZV90IGxhc3RPcEluZGV4
ID0gbV9vcHMuc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0
ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZXNbY3VycmVudEFsdGVybmF0aXZlSW5kZXhdOworICAgICAg
ICAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlc1tjdXJy
ZW50QWx0ZXJuYXRpdmVJbmRleF0uZ2V0KCk7CiAgICAgICAgICAgICBBU1NFUlQoIWFsdGVybmF0
aXZlLT5vbmNlVGhyb3VnaCgpKTsKICAgICAgICAgICAgIG9wQ29tcGlsZUFsdGVybmF0aXZlKGFs
dGVybmF0aXZlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRl
cm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0
ZXJuLmNwcAkocmV2aXNpb24gOTk5ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJyUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw5ICsxNDAsOSBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBDaGFyYWN0ZXJDbGFzcyogY2hhckNsYXNzKCkKKyAg
ICBQYXNzT3duUHRyPENoYXJhY3RlckNsYXNzPiBjaGFyQ2xhc3MoKQogICAgIHsKLSAgICAgICAg
Q2hhcmFjdGVyQ2xhc3MqIGNoYXJhY3RlckNsYXNzID0gbmV3IENoYXJhY3RlckNsYXNzKDApOwor
ICAgICAgICBPd25QdHI8Q2hhcmFjdGVyQ2xhc3M+IGNoYXJhY3RlckNsYXNzID0gYWRvcHRQdHIo
bmV3IENoYXJhY3RlckNsYXNzKDApKTsKIAogICAgICAgICBjaGFyYWN0ZXJDbGFzcy0+bV9tYXRj
aGVzLmFwcGVuZChtX21hdGNoZXMpOwogICAgICAgICBjaGFyYWN0ZXJDbGFzcy0+bV9yYW5nZXMu
YXBwZW5kKG1fcmFuZ2VzKTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBwdWJsaWM6CiAKICAgICAgICAg
cmVzZXQoKTsKIAotICAgICAgICByZXR1cm4gY2hhcmFjdGVyQ2xhc3M7CisgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJDbGFzcy5yZWxlYXNlKCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMjQxLDEz
ICsyNDEsMTAgQEAgcHVibGljOgogICAgICAgICAsIG1fY2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rv
cihwYXR0ZXJuLm1faWdub3JlQ2FzZSkKICAgICAgICAgLCBtX2ludmVydFBhcmVudGhldGljYWxB
c3NlcnRpb24oZmFsc2UpCiAgICAgewotICAgICAgICBtX3BhdHRlcm4ubV9ib2R5ID0gbmV3IFBh
dHRlcm5EaXNqdW5jdGlvbigpOwotICAgICAgICBtX2FsdGVybmF0aXZlID0gbV9wYXR0ZXJuLm1f
Ym9keS0+YWRkTmV3QWx0ZXJuYXRpdmUoKTsKLSAgICAgICAgbV9wYXR0ZXJuLm1fZGlzanVuY3Rp
b25zLmFwcGVuZChtX3BhdHRlcm4ubV9ib2R5KTsKLSAgICB9Ci0KLSAgICB+WWFyclBhdHRlcm5D
b25zdHJ1Y3RvcigpCi0gICAgeworICAgICAgICBPd25QdHI8UGF0dGVybkRpc2p1bmN0aW9uPiBi
b2R5ID0gYWRvcHRQdHIobmV3IFBhdHRlcm5EaXNqdW5jdGlvbik7CisgICAgICAgIG1fcGF0dGVy
bi5tX2JvZHkgPSBib2R5LmdldCgpOworICAgICAgICBtX2FsdGVybmF0aXZlID0gYm9keS0+YWRk
TmV3QWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgbV9wYXR0ZXJuLm1fZGlzanVuY3Rpb25zLmFwcGVu
ZChib2R5LnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgdm9pZCByZXNldCgpCkBAIC0yNTUsOSAr
MjUyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgbV9wYXR0ZXJuLnJlc2V0KCk7CiAgICAgICAgIG1f
Y2hhcmFjdGVyQ2xhc3NDb25zdHJ1Y3Rvci5yZXNldCgpOwogCi0gICAgICAgIG1fcGF0dGVybi5t
X2JvZHkgPSBuZXcgUGF0dGVybkRpc2p1bmN0aW9uKCk7Ci0gICAgICAgIG1fYWx0ZXJuYXRpdmUg
PSBtX3BhdHRlcm4ubV9ib2R5LT5hZGROZXdBbHRlcm5hdGl2ZSgpOwotICAgICAgICBtX3BhdHRl
cm4ubV9kaXNqdW5jdGlvbnMuYXBwZW5kKG1fcGF0dGVybi5tX2JvZHkpOworICAgICAgICBPd25Q
dHI8UGF0dGVybkRpc2p1bmN0aW9uPiBib2R5ID0gYWRvcHRQdHIobmV3IFBhdHRlcm5EaXNqdW5j
dGlvbik7CisgICAgICAgIG1fcGF0dGVybi5tX2JvZHkgPSBib2R5LmdldCgpOworICAgICAgICBt
X2FsdGVybmF0aXZlID0gYm9keS0+YWRkTmV3QWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgbV9wYXR0
ZXJuLm1fZGlzanVuY3Rpb25zLmFwcGVuZChib2R5LnJlbGVhc2UoKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgYXNzZXJ0aW9uQk9MKCkKQEAgLTM0Nyw5ICszNDUsOSBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGF0b21DaGFyYWN0ZXJDbGFzc0VuZCgpCiAgICAgewotICAgICAgICBDaGFyYWN0ZXJD
bGFzcyogbmV3Q2hhcmFjdGVyQ2xhc3MgPSBtX2NoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY2hh
ckNsYXNzKCk7Ci0gICAgICAgIG1fcGF0dGVybi5tX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVu
ZChuZXdDaGFyYWN0ZXJDbGFzcyk7CisgICAgICAgIE93blB0cjxDaGFyYWN0ZXJDbGFzcz4gbmV3
Q2hhcmFjdGVyQ2xhc3MgPSBtX2NoYXJhY3RlckNsYXNzQ29uc3RydWN0b3IuY2hhckNsYXNzKCk7
CiAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKG5ld0No
YXJhY3RlckNsYXNzLCBtX2ludmVydENoYXJhY3RlckNsYXNzKSk7CisgICAgICAgIG1fcGF0dGVy
bi5tX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVuZChuZXdDaGFyYWN0ZXJDbGFzcy5yZWxlYXNl
KCkpOwogICAgIH0KIAogICAgIHZvaWQgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkJlZ2luKGJv
b2wgY2FwdHVyZSA9IHRydWUpCkBAIC0zNTgsMTggKzM1NiwxOCBAQCBwdWJsaWM6CiAgICAgICAg
IGlmIChjYXB0dXJlKQogICAgICAgICAgICAgbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVybnMrKzsK
IAotICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIHBhcmVudGhlc2VzRGlzanVuY3Rpb24gPSBu
ZXcgUGF0dGVybkRpc2p1bmN0aW9uKG1fYWx0ZXJuYXRpdmUpOwotICAgICAgICBtX3BhdHRlcm4u
bV9kaXNqdW5jdGlvbnMuYXBwZW5kKHBhcmVudGhlc2VzRGlzanVuY3Rpb24pOwotICAgICAgICBt
X2FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChQYXR0ZXJuVGVybShQYXR0ZXJuVGVybTo6VHlw
ZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0Rpc2p1bmN0
aW9uLCBjYXB0dXJlLCBmYWxzZSkpOworICAgICAgICBPd25QdHI8UGF0dGVybkRpc2p1bmN0aW9u
PiBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uID0gYWRvcHRQdHIobmV3IFBhdHRlcm5EaXNqdW5jdGlv
bihtX2FsdGVybmF0aXZlKSk7CisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5k
KFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuLCBzdWJw
YXR0ZXJuSWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24uZ2V0KCksIGNhcHR1cmUsIGZhbHNlKSk7
CiAgICAgICAgIG1fYWx0ZXJuYXRpdmUgPSBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLT5hZGROZXdB
bHRlcm5hdGl2ZSgpOworICAgICAgICBtX3BhdHRlcm4ubV9kaXNqdW5jdGlvbnMuYXBwZW5kKHBh
cmVudGhlc2VzRGlzanVuY3Rpb24ucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICB2b2lkIGF0b21Q
YXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW4oYm9vbCBpbnZlcnQgPSBmYWxzZSkKICAgICB7Ci0g
ICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogcGFyZW50aGVzZXNEaXNqdW5jdGlvbiA9IG5ldyBQ
YXR0ZXJuRGlzanVuY3Rpb24obV9hbHRlcm5hdGl2ZSk7Ci0gICAgICAgIG1fcGF0dGVybi5tX2Rp
c2p1bmN0aW9ucy5hcHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7Ci0gICAgICAgIG1fYWx0
ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFy
ZW50aGV0aWNhbEFzc2VydGlvbiwgbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVybnMgKyAxLCBwYXJl
bnRoZXNlc0Rpc2p1bmN0aW9uLCBmYWxzZSwgaW52ZXJ0KSk7CisgICAgICAgIE93blB0cjxQYXR0
ZXJuRGlzanVuY3Rpb24+IHBhcmVudGhlc2VzRGlzanVuY3Rpb24gPSBhZG9wdFB0cihuZXcgUGF0
dGVybkRpc2p1bmN0aW9uKG1fYWx0ZXJuYXRpdmUpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+
bV90ZXJtcy5hcHBlbmQoUGF0dGVyblRlcm0oUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2Fs
QXNzZXJ0aW9uLCBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyArIDEsIHBhcmVudGhlc2VzRGlz
anVuY3Rpb24uZ2V0KCksIGZhbHNlLCBpbnZlcnQpKTsKICAgICAgICAgbV9hbHRlcm5hdGl2ZSA9
IHBhcmVudGhlc2VzRGlzanVuY3Rpb24tPmFkZE5ld0FsdGVybmF0aXZlKCk7CisgICAgICAgIG1f
cGF0dGVybi5tX2Rpc2p1bmN0aW9ucy5hcHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbi5yZWxl
YXNlKCkpOwogICAgICAgICBtX2ludmVydFBhcmVudGhldGljYWxBc3NlcnRpb24gPSBpbnZlcnQ7
CiAgICAgfQogCkBAIC00MzUsMTIgKzQzMywxMiBAQCBwdWJsaWM6CiAgICAgLy8gc2tpcCBhbHRl
cm5hdGl2ZXMgd2l0aCBtX3N0YXJ0c1dpdGhCT0wgc2V0IHRydWUuCiAgICAgUGF0dGVybkRpc2p1
bmN0aW9uKiBjb3B5RGlzanVuY3Rpb24oUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiwg
Ym9vbCBmaWx0ZXJTdGFydHNXaXRoQk9MID0gZmFsc2UpCiAgICAgewotICAgICAgICBQYXR0ZXJu
RGlzanVuY3Rpb24qIG5ld0Rpc2p1bmN0aW9uID0gMDsKKyAgICAgICAgT3duUHRyPFBhdHRlcm5E
aXNqdW5jdGlvbj4gbmV3RGlzanVuY3Rpb247CiAgICAgICAgIGZvciAodW5zaWduZWQgYWx0ID0g
MDsgYWx0IDwgZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzLnNpemUoKTsgKythbHQpIHsKLSAg
ICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBkaXNqdW5jdGlvbi0+
bV9hbHRlcm5hdGl2ZXNbYWx0XTsKKyAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0
ZXJuYXRpdmUgPSBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XS5nZXQoKTsKICAgICAg
ICAgICAgIGlmICghZmlsdGVyU3RhcnRzV2l0aEJPTCB8fCAhYWx0ZXJuYXRpdmUtPm1fc3RhcnRz
V2l0aEJPTCkgewogICAgICAgICAgICAgICAgIGlmICghbmV3RGlzanVuY3Rpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3RGlzanVuY3Rpb24gPSBuZXcgUGF0dGVybkRpc2p1bmN0aW9uKCk7
CisgICAgICAgICAgICAgICAgICAgIG5ld0Rpc2p1bmN0aW9uID0gYWRvcHRQdHIobmV3IFBhdHRl
cm5EaXNqdW5jdGlvbigpKTsKICAgICAgICAgICAgICAgICAgICAgbmV3RGlzanVuY3Rpb24tPm1f
cGFyZW50ID0gZGlzanVuY3Rpb24tPm1fcGFyZW50OwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIG5ld0FsdGVybmF0aXZlID0gbmV3RGlzanVu
Y3Rpb24tPmFkZE5ld0FsdGVybmF0aXZlKCk7CkBAIC00NDgsMTAgKzQ0NiwxMSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIG5ld0FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChjb3B5
VGVybShhbHRlcm5hdGl2ZS0+bV90ZXJtc1tpXSwgZmlsdGVyU3RhcnRzV2l0aEJPTCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorICAgIAorICAgICAgICBQYXR0ZXJuRGlz
anVuY3Rpb24qIHJhd05ld0Rpc2p1bmN0aW9uID0gbmV3RGlzanVuY3Rpb24uZ2V0KCk7CiAgICAg
ICAgIGlmIChuZXdEaXNqdW5jdGlvbikKLSAgICAgICAgICAgIG1fcGF0dGVybi5tX2Rpc2p1bmN0
aW9ucy5hcHBlbmQobmV3RGlzanVuY3Rpb24pOwotICAgICAgICByZXR1cm4gbmV3RGlzanVuY3Rp
b247CisgICAgICAgICAgICBtX3BhdHRlcm4ubV9kaXNqdW5jdGlvbnMuYXBwZW5kKG5ld0Rpc2p1
bmN0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiByYXdOZXdEaXNqdW5jdGlvbjsKICAg
ICB9CiAgICAgCiAgICAgUGF0dGVyblRlcm0gY29weVRlcm0oUGF0dGVyblRlcm0mIHRlcm0sIGJv
b2wgZmlsdGVyU3RhcnRzV2l0aEJPTCA9IGZhbHNlKQpAQCAtNjA0LDcgKzYwMyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgYm9vbCBoYXNGaXhlZFNpemUgPSB0cnVlOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgYWx0ID0gMDsgYWx0IDwgZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzLnNpemUoKTsg
KythbHQpIHsKLSAgICAgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBk
aXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XTsKKyAgICAgICAgICAgIFBhdHRlcm5BbHRl
cm5hdGl2ZSogYWx0ZXJuYXRpdmUgPSBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XS5n
ZXQoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBbHRlcm5hdGl2ZUNhbGxGcmFtZVNp
emUgPSBzZXR1cEFsdGVybmF0aXZlT2Zmc2V0cyhhbHRlcm5hdGl2ZSwgaW5pdGlhbENhbGxGcmFt
ZVNpemUsIGluaXRpYWxJbnB1dFBvc2l0aW9uKTsKICAgICAgICAgICAgIG1pbmltdW1JbnB1dFNp
emUgPSBtaW4obWluaW11bUlucHV0U2l6ZSwgYWx0ZXJuYXRpdmUtPm1fbWluaW11bVNpemUpOwog
ICAgICAgICAgICAgbWF4aW11bUNhbGxGcmFtZVNpemUgPSBtYXgobWF4aW11bUNhbGxGcmFtZVNp
emUsIGN1cnJlbnRBbHRlcm5hdGl2ZUNhbGxGcmFtZVNpemUpOwpAQCAtNjM5LDcgKzYzOCw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIFZlY3RvcjxQYXR0ZXJuQWx0ZXJuYXRpdmUqPiYgYWx0
ZXJuYXRpdmVzID0gbV9wYXR0ZXJuLm1fYm9keS0+bV9hbHRlcm5hdGl2ZXM7CisgICAgICAgIFZl
Y3RvcjxPd25QdHI8UGF0dGVybkFsdGVybmF0aXZlPiA+JiBhbHRlcm5hdGl2ZXMgPSBtX3BhdHRl
cm4ubV9ib2R5LT5tX2FsdGVybmF0aXZlczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhbHRlcm5hdGl2ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZlY3RvcjxQYXR0ZXJu
VGVybT4mIHRlcm1zID0gYWx0ZXJuYXRpdmVzW2ldLT5tX3Rlcm1zOwogICAgICAgICAgICAgaWYg
KHRlcm1zLnNpemUoKSkgewpAQCAtNjcyLDEwICs2NzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XS0+c2V0T25jZVRocm91Z2goKTsKIAog
ICAgICAgICBpZiAobG9vcERpc2p1bmN0aW9uKSB7Ci0gICAgICAgICAgICAvLyBNb3ZlIGFsdGVy
bmF0aXZlcyBmcm9tIGxvb3BEaXNqdW5jdGlvbiB0byBkaXNqdW5jdGlvbgotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhbHQgPSAwOyBhbHQgPCBsb29wRGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRp
dmVzLnNpemUoKTsgKythbHQpCi0gICAgICAgICAgICAgICAgZGlzanVuY3Rpb24tPm1fYWx0ZXJu
YXRpdmVzLmFwcGVuZChsb29wRGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF0pOwotICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTW92ZSBhbHRlcm5hdGl2ZXMgZnJvbSBsb29w
RGlzanVuY3Rpb24gdG8gZGlzanVuY3Rpb24uCisgICAgICAgICAgICBhcHBlbmRSZWxlYXNlZEVs
ZW1lbnRzKGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlcywgbG9vcERpc2p1bmN0aW9uLT5tX2Fs
dGVybmF0aXZlcyk7CiAgICAgICAgICAgICBsb29wRGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVz
LmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02OTMsNyArNjkwLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgaWYgKHRlcm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2Vz
U3VicGF0dGVybikgewogICAgICAgICAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogbmVzdGVk
RGlzanVuY3Rpb24gPSB0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uOwogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYWx0ID0gMDsgYWx0IDwgbmVzdGVkRGlzanVuY3Rpb24tPm1fYWx0
ZXJuYXRpdmVzLnNpemUoKTsgKythbHQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRh
aW5zQ2FwdHVyaW5nVGVybXMobmVzdGVkRGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF0s
IDAsIG5lc3RlZERpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlc1thbHRdLT5tX3Rlcm1zLnNpemUo
KSAtIDEpKQorICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbnNDYXB0dXJpbmdUZXJtcyhu
ZXN0ZWREaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XS5nZXQoKSwgMCwgbmVzdGVkRGlz
anVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2FsdF0tPm1fdGVybXMuc2l6ZSgpIC0gMSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC03MDksMTEgKzcwNiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gYmVnaW5uaW5n
IGFuZCB0aGUgZW5kIG9mIHRoZSBtYXRjaC4KICAgICB2b2lkIG9wdGltaXplRG90U3RhcldyYXBw
ZWRFeHByZXNzaW9ucygpCiAgICAgewotICAgICAgICBWZWN0b3I8UGF0dGVybkFsdGVybmF0aXZl
Kj4mIGFsdGVybmF0aXZlcyA9IG1fcGF0dGVybi5tX2JvZHktPm1fYWx0ZXJuYXRpdmVzOworICAg
ICAgICBWZWN0b3I8T3duUHRyPFBhdHRlcm5BbHRlcm5hdGl2ZT4gPiYgYWx0ZXJuYXRpdmVzID0g
bV9wYXR0ZXJuLm1fYm9keS0+bV9hbHRlcm5hdGl2ZXM7CiAgICAgICAgIGlmIChhbHRlcm5hdGl2
ZXMuc2l6ZSgpICE9IDEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUGF0dGVybkFs
dGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlc1swXTsKKyAgICAgICAgUGF0dGVy
bkFsdGVybmF0aXZlKiBhbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlc1swXS5nZXQoKTsKICAgICAg
ICAgVmVjdG9yPFBhdHRlcm5UZXJtPiYgdGVybXMgPSBhbHRlcm5hdGl2ZS0+bV90ZXJtczsKICAg
ICAgICAgaWYgKHRlcm1zLnNpemUoKSA+PSAzKSB7CiAgICAgICAgICAgICBib29sIHN0YXJ0c1dp
dGhCT0wgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJQYXR0
ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyclBhdHRl
cm4uaAkocmV2aXNpb24gOTk5ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJy
UGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxy
dW50aW1lL1VTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4K
QEAgLTI3NSwxOSArMjc2LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIH5Q
YXR0ZXJuRGlzanVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fYWx0
ZXJuYXRpdmVzKTsKLSAgICB9Ci0KICAgICBQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFkZE5ld0FsdGVy
bmF0aXZlKCkKICAgICB7Ci0gICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogYWx0ZXJuYXRpdmUg
PSBuZXcgUGF0dGVybkFsdGVybmF0aXZlKHRoaXMpOwotICAgICAgICBtX2FsdGVybmF0aXZlcy5h
cHBlbmQoYWx0ZXJuYXRpdmUpOwotICAgICAgICByZXR1cm4gYWx0ZXJuYXRpdmU7CisgICAgICAg
IE93blB0cjxQYXR0ZXJuQWx0ZXJuYXRpdmU+IGFsdGVybmF0aXZlID0gYWRvcHRQdHIobmV3IFBh
dHRlcm5BbHRlcm5hdGl2ZSh0aGlzKSk7CisgICAgICAgIFBhdHRlcm5BbHRlcm5hdGl2ZSogcmF3
QWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZS5nZXQoKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZXMu
YXBwZW5kKGFsdGVybmF0aXZlLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiByYXdBbHRlcm5h
dGl2ZTsKICAgICB9CiAKLSAgICBWZWN0b3I8UGF0dGVybkFsdGVybmF0aXZlKj4gbV9hbHRlcm5h
dGl2ZXM7CisgICAgVmVjdG9yPE93blB0cjxQYXR0ZXJuQWx0ZXJuYXRpdmU+ID4gbV9hbHRlcm5h
dGl2ZXM7CiAgICAgUGF0dGVybkFsdGVybmF0aXZlKiBtX3BhcmVudDsKICAgICB1bnNpZ25lZCBt
X21pbmltdW1TaXplOwogICAgIHVuc2lnbmVkIG1fY2FsbEZyYW1lU2l6ZTsKQEAgLTI5OCwxMyAr
Mjk1LDEzIEBAIHB1YmxpYzoKIC8vIChwbGVhc2UgdG8gYmUgY2FsbGluZyBuZXdsaW5lQ2hhcmFj
dGVyQ2xhc3MoKSBldCBhbCBvbiB5b3VyCiAvLyBmcmllbmRseSBuZWlnaGJvcmhvb2QgWWFyclBh
dHRlcm4gaW5zdGFuY2UgdG8gZ2V0IG5pY2VseQogLy8gY2FjaGVkIGNvcGllcykuCi1DaGFyYWN0
ZXJDbGFzcyogbmV3bGluZUNyZWF0ZSgpOwotQ2hhcmFjdGVyQ2xhc3MqIGRpZ2l0c0NyZWF0ZSgp
OwotQ2hhcmFjdGVyQ2xhc3MqIHNwYWNlc0NyZWF0ZSgpOwotQ2hhcmFjdGVyQ2xhc3MqIHdvcmRj
aGFyQ3JlYXRlKCk7Ci1DaGFyYWN0ZXJDbGFzcyogbm9uZGlnaXRzQ3JlYXRlKCk7Ci1DaGFyYWN0
ZXJDbGFzcyogbm9uc3BhY2VzQ3JlYXRlKCk7Ci1DaGFyYWN0ZXJDbGFzcyogbm9ud29yZGNoYXJD
cmVhdGUoKTsKK1Bhc3NPd25QdHI8Q2hhcmFjdGVyQ2xhc3M+IG5ld2xpbmVDcmVhdGUoKTsKK1Bh
c3NPd25QdHI8Q2hhcmFjdGVyQ2xhc3M+IGRpZ2l0c0NyZWF0ZSgpOworUGFzc093blB0cjxDaGFy
YWN0ZXJDbGFzcz4gc3BhY2VzQ3JlYXRlKCk7CitQYXNzT3duUHRyPENoYXJhY3RlckNsYXNzPiB3
b3JkY2hhckNyZWF0ZSgpOworUGFzc093blB0cjxDaGFyYWN0ZXJDbGFzcz4gbm9uZGlnaXRzQ3Jl
YXRlKCk7CitQYXNzT3duUHRyPENoYXJhY3RlckNsYXNzPiBub25zcGFjZXNDcmVhdGUoKTsKK1Bh
c3NPd25QdHI8Q2hhcmFjdGVyQ2xhc3M+IG5vbndvcmRjaGFyQ3JlYXRlKCk7CiAKIHN0cnVjdCBU
ZXJtQ2hhaW4gewogICAgIFRlcm1DaGFpbihQYXR0ZXJuVGVybSB0ZXJtKQpAQCAtMzE4LDEyICsz
MTUsNiBAQCBzdHJ1Y3QgVGVybUNoYWluIHsKIHN0cnVjdCBZYXJyUGF0dGVybiB7CiAgICAgWWFy
clBhdHRlcm4oY29uc3QgVVN0cmluZyYgcGF0dGVybiwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11
bHRpbGluZSwgY29uc3QgY2hhcioqIGVycm9yKTsKIAotICAgIH5ZYXJyUGF0dGVybigpCi0gICAg
ewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9kaXNqdW5jdGlvbnMpOwotICAgICAgICBkZWxl
dGVBbGxWYWx1ZXMobV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcyk7Ci0gICAgfQotCiAgICAgdm9pZCBy
ZXNldCgpCiAgICAgewogICAgICAgICBtX251bVN1YnBhdHRlcm5zID0gMDsKQEAgLTM0MCw5ICsz
MzEsNyBAQCBzdHJ1Y3QgWWFyclBhdHRlcm4gewogICAgICAgICBub25zcGFjZXNDYWNoZWQgPSAw
OwogICAgICAgICBub253b3JkY2hhckNhY2hlZCA9IDA7CiAKLSAgICAgICAgZGVsZXRlQWxsVmFs
dWVzKG1fZGlzanVuY3Rpb25zKTsKICAgICAgICAgbV9kaXNqdW5jdGlvbnMuY2xlYXIoKTsKLSAg
ICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdXNlckNoYXJhY3RlckNsYXNzZXMpOwogICAgICAgICBt
X3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmNsZWFyKCk7CiAgICAgfQogCkBAIC0zNTEsNDYgKzM0MCw1
MCBAQCBzdHJ1Y3QgWWFyclBhdHRlcm4gewogICAgICAgICByZXR1cm4gbV9tYXhCYWNrUmVmZXJl
bmNlID4gbV9udW1TdWJwYXR0ZXJuczsKICAgICB9CiAKK3ByaXZhdGU6CisgICAgdm9pZCBjYWNo
ZUNoYXJhY3RlckNsYXNzKENoYXJhY3RlckNsYXNzKiYgY2FjaGUsIFBhc3NPd25QdHI8Q2hhcmFj
dGVyQ2xhc3M+IGNyZWF0aW9uRnVuY3Rpb24oKSkKKyAgICB7CisgICAgICAgIGlmIChjYWNoZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgT3duUHRyPENoYXJhY3RlckNsYXNzPiBjaGFy
YWN0ZXJDbGFzcyA9IGNyZWF0aW9uRnVuY3Rpb24oKTsKKyAgICAgICAgY2FjaGUgPSBjaGFyYWN0
ZXJDbGFzcy5nZXQoKTsKKyAgICAgICAgbV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcy5hcHBlbmQoY2hh
cmFjdGVyQ2xhc3MucmVsZWFzZSgpKTsKKyAgICB9CisKK3B1YmxpYzoKICAgICBDaGFyYWN0ZXJD
bGFzcyogbmV3bGluZUNoYXJhY3RlckNsYXNzKCkKICAgICB7Ci0gICAgICAgIGlmICghbmV3bGlu
ZUNhY2hlZCkKLSAgICAgICAgICAgIG1fdXNlckNoYXJhY3RlckNsYXNzZXMuYXBwZW5kKG5ld2xp
bmVDYWNoZWQgPSBuZXdsaW5lQ3JlYXRlKCkpOworICAgICAgICBjYWNoZUNoYXJhY3RlckNsYXNz
KG5ld2xpbmVDYWNoZWQsIG5ld2xpbmVDcmVhdGUpOwogICAgICAgICByZXR1cm4gbmV3bGluZUNh
Y2hlZDsKICAgICB9CiAgICAgQ2hhcmFjdGVyQ2xhc3MqIGRpZ2l0c0NoYXJhY3RlckNsYXNzKCkK
ICAgICB7Ci0gICAgICAgIGlmICghZGlnaXRzQ2FjaGVkKQotICAgICAgICAgICAgbV91c2VyQ2hh
cmFjdGVyQ2xhc3Nlcy5hcHBlbmQoZGlnaXRzQ2FjaGVkID0gZGlnaXRzQ3JlYXRlKCkpOworICAg
ICAgICBjYWNoZUNoYXJhY3RlckNsYXNzKGRpZ2l0c0NhY2hlZCwgZGlnaXRzQ3JlYXRlKTsKICAg
ICAgICAgcmV0dXJuIGRpZ2l0c0NhY2hlZDsKICAgICB9CiAgICAgQ2hhcmFjdGVyQ2xhc3MqIHNw
YWNlc0NoYXJhY3RlckNsYXNzKCkKICAgICB7Ci0gICAgICAgIGlmICghc3BhY2VzQ2FjaGVkKQot
ICAgICAgICAgICAgbV91c2VyQ2hhcmFjdGVyQ2xhc3Nlcy5hcHBlbmQoc3BhY2VzQ2FjaGVkID0g
c3BhY2VzQ3JlYXRlKCkpOworICAgICAgICBjYWNoZUNoYXJhY3RlckNsYXNzKHNwYWNlc0NhY2hl
ZCwgc3BhY2VzQ3JlYXRlKTsKICAgICAgICAgcmV0dXJuIHNwYWNlc0NhY2hlZDsKICAgICB9CiAg
ICAgQ2hhcmFjdGVyQ2xhc3MqIHdvcmRjaGFyQ2hhcmFjdGVyQ2xhc3MoKQogICAgIHsKLSAgICAg
ICAgaWYgKCF3b3JkY2hhckNhY2hlZCkKLSAgICAgICAgICAgIG1fdXNlckNoYXJhY3RlckNsYXNz
ZXMuYXBwZW5kKHdvcmRjaGFyQ2FjaGVkID0gd29yZGNoYXJDcmVhdGUoKSk7CisgICAgICAgIGNh
Y2hlQ2hhcmFjdGVyQ2xhc3Mod29yZGNoYXJDYWNoZWQsIHdvcmRjaGFyQ3JlYXRlKTsKICAgICAg
ICAgcmV0dXJuIHdvcmRjaGFyQ2FjaGVkOwogICAgIH0KICAgICBDaGFyYWN0ZXJDbGFzcyogbm9u
ZGlnaXRzQ2hhcmFjdGVyQ2xhc3MoKQogICAgIHsKLSAgICAgICAgaWYgKCFub25kaWdpdHNDYWNo
ZWQpCi0gICAgICAgICAgICBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVuZChub25kaWdpdHND
YWNoZWQgPSBub25kaWdpdHNDcmVhdGUoKSk7CisgICAgICAgIGNhY2hlQ2hhcmFjdGVyQ2xhc3Mo
bm9uZGlnaXRzQ2FjaGVkLCBub25kaWdpdHNDcmVhdGUpOwogICAgICAgICByZXR1cm4gbm9uZGln
aXRzQ2FjaGVkOwogICAgIH0KICAgICBDaGFyYWN0ZXJDbGFzcyogbm9uc3BhY2VzQ2hhcmFjdGVy
Q2xhc3MoKQogICAgIHsKLSAgICAgICAgaWYgKCFub25zcGFjZXNDYWNoZWQpCi0gICAgICAgICAg
ICBtX3VzZXJDaGFyYWN0ZXJDbGFzc2VzLmFwcGVuZChub25zcGFjZXNDYWNoZWQgPSBub25zcGFj
ZXNDcmVhdGUoKSk7CisgICAgICAgIGNhY2hlQ2hhcmFjdGVyQ2xhc3Mobm9uc3BhY2VzQ2FjaGVk
LCBub25zcGFjZXNDcmVhdGUpOwogICAgICAgICByZXR1cm4gbm9uc3BhY2VzQ2FjaGVkOwogICAg
IH0KICAgICBDaGFyYWN0ZXJDbGFzcyogbm9ud29yZGNoYXJDaGFyYWN0ZXJDbGFzcygpCiAgICAg
ewotICAgICAgICBpZiAoIW5vbndvcmRjaGFyQ2FjaGVkKQotICAgICAgICAgICAgbV91c2VyQ2hh
cmFjdGVyQ2xhc3Nlcy5hcHBlbmQobm9ud29yZGNoYXJDYWNoZWQgPSBub253b3JkY2hhckNyZWF0
ZSgpKTsKKyAgICAgICAgY2FjaGVDaGFyYWN0ZXJDbGFzcyhub253b3JkY2hhckNhY2hlZCwgbm9u
d29yZGNoYXJDcmVhdGUpOwogICAgICAgICByZXR1cm4gbm9ud29yZGNoYXJDYWNoZWQ7CiAgICAg
fQogCkBAIC00MDEsOCArMzk0LDggQEAgc3RydWN0IFlhcnJQYXR0ZXJuIHsKICAgICB1bnNpZ25l
ZCBtX251bVN1YnBhdHRlcm5zOwogICAgIHVuc2lnbmVkIG1fbWF4QmFja1JlZmVyZW5jZTsKICAg
ICBQYXR0ZXJuRGlzanVuY3Rpb24qIG1fYm9keTsKLSAgICBWZWN0b3I8UGF0dGVybkRpc2p1bmN0
aW9uKiwgND4gbV9kaXNqdW5jdGlvbnM7Ci0gICAgVmVjdG9yPENoYXJhY3RlckNsYXNzKj4gbV91
c2VyQ2hhcmFjdGVyQ2xhc3NlczsKKyAgICBWZWN0b3I8T3duUHRyPFBhdHRlcm5EaXNqdW5jdGlv
bj4sIDQ+IG1fZGlzanVuY3Rpb25zOworICAgIFZlY3RvcjxPd25QdHI8Q2hhcmFjdGVyQ2xhc3M+
ID4gbV91c2VyQ2hhcmFjdGVyQ2xhc3NlczsKIAogcHJpdmF0ZToKICAgICBjb25zdCBjaGFyKiBj
b21waWxlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>