<?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>8039</bug_id>
          
          <creation_ts>2006-03-28 13:16:26 -0800</creation_ts>
          <short_desc>Remove use of DeprecatedArray in favor of new Vector class</short_desc>
          <delta_ts>2006-06-11 18:16:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>37800</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-03-28 13:16:26 -0800</bug_when>
    <thetext>Most of the changes require only a change of name from DeprecatedArray&lt;&gt; to Vector&lt;&gt; in variable declarations and little else to retain the same functionality.  However, since the Vector class has some different/better qualities/features, other changes would be beneficial.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37943</commentid>
    <comment_count>1</comment_count>
      <attachid>7382</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-03-29 23:01:41 -0800</bug_when>
    <thetext>Created attachment 7382
patch

This removes quite a bit of the DeprecatedArray usage, but more remains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38278</commentid>
    <comment_count>2</comment_count>
      <attachid>7465</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-04-02 10:02:35 -0700</bug_when>
    <thetext>Created attachment 7465
patch 2

This takes care of most of the DeprecatedArray uses.  Now all that remains is in the DeprecatedCString class (which I have not attempted because it is itself deprecated), and all the image relate code (which I is a little more complicated but will be in the next version).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38376</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-04-03 02:34:39 -0700</bug_when>
    <thetext>Make sure to mark your patch for review :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38408</commentid>
    <comment_count>4</comment_count>
      <attachid>7488</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-04-03 12:40:40 -0700</bug_when>
    <thetext>Created attachment 7488
patch 3

This is quite similar to the previous version with some minor adjustments and a changelog entry.  Image and friends are still using DeprecatedArray/DeprecatedByteArray.  Because of this, in CachedImage I had to copy from a Vector to a DeprecatedByteArray which I am worried is going to pretty bad performance wise.  However, when the Image classes change to a Vector based byte buffer, the problem should go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38427</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-04-03 15:12:08 -0700</bug_when>
    <thetext>We would need to ensure that this does not cause a performance regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39787</commentid>
    <comment_count>6</comment_count>
      <attachid>7488</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-04-19 04:02:24 -0700</bug_when>
    <thetext>Comment on attachment 7488
patch 3

I haven&apos;t forgotten you.  But we can&apos;t land this w/o performance testing, which I just haven&apos;t taken the time to do yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40375</commentid>
    <comment_count>7</comment_count>
      <attachid>7488</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-24 17:55:33 -0700</bug_when>
    <thetext>Comment on attachment 7488
patch 3

I worked very hard to remove extra copies of the image data, so re-introducing one now is something we should avoid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40436</commentid>
    <comment_count>8</comment_count>
      <attachid>7964</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-04-25 15:55:06 -0700</bug_when>
    <thetext>Created attachment 7964
patch the fourth

This version does not include the changes to the caching/loading classes that caused the expensive copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40884</commentid>
    <comment_count>9</comment_count>
      <attachid>8078</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-05-02 12:15:47 -0700</bug_when>
    <thetext>Created attachment 8078
patch for image and caching classes

This patch is changes just the Image and caching classes to use Vector instead of DeprecatedArray.  In order to not make any unecessary copies, some changes were made so that the data for an image is buffered directly into an internal buffer in the Image object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41469</commentid>
    <comment_count>10</comment_count>
      <attachid>8078</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-07 15:09:42 -0700</bug_when>
    <thetext>Comment on attachment 8078
patch for image and caching classes

This one looks fine to me coding-wise.  

Please fix the misspellings of the word &quot;received&quot; though.  &quot;i&quot; before &quot;e&quot; except after &quot;c&quot;. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41470</commentid>
    <comment_count>11</comment_count>
      <attachid>7964</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-07 15:12:01 -0700</bug_when>
    <thetext>Comment on attachment 7964
patch the fourth

Do Vectors ever shrink their capacities when you remove items or clear?  In some cases the old DeprecatedArrays are deliberately designed to never shrink, so I want to make sure Vector has the same behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41471</commentid>
    <comment_count>12</comment_count>
      <attachid>7964</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-07 15:14:30 -0700</bug_when>
    <thetext>Comment on attachment 7964
patch the fourth

If Vectors don&apos;t shrink capacity on clear, then this patch also changes behavior (which may or may not be ok).

For example in HTMLSelectElement:

-    m_listItems.resize(0);
+    m_listItems.clear();

The old code would actually re-shrink the array back down to 0.  The new code may retain a large capacity (which could in fact be better for performance in this case, but is a change in behavior).

These patches will definitely need to be performance-tested with all the benchmarks (our internal PLT, i-bench, and the 24fun JS test).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41473</commentid>
    <comment_count>13</comment_count>
      <attachid>7964</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-07 15:17:26 -0700</bug_when>
    <thetext>Comment on attachment 7964
patch the fourth

The other thing that you should double-check is to make sure none of these DeprecatedArrays were being copied.  DeprecatedArrays = cheap to copy.  Vectors = expensive to copy.

r=me. (I&apos;ll + the other patch once the &quot;recieved&quot; typo is fixed.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41804</commentid>
    <comment_count>14</comment_count>
      <attachid>8195</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-05-09 19:55:48 -0700</bug_when>
    <thetext>Created attachment 8195
updated image and caching patch

Fixed spelling mistakes and updated to use wtf instead of KXMLCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42041</commentid>
    <comment_count>15</comment_count>
      <attachid>8195</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-11 14:23:01 -0700</bug_when>
    <thetext>Comment on attachment 8195
updated image and caching patch

r=me, can just land these two patches together now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45328</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-11 10:45:15 -0700</bug_when>
    <thetext>I&apos;m working on landing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45365</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-06-11 18:16:17 -0700</bug_when>
    <thetext>Committed revision 14816.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7382</attachid>
            <date>2006-03-29 23:01:41 -0800</date>
            <delta_ts>2006-04-02 10:02:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>vec.diff</filename>
            <type>text/plain</type>
            <size>30374</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwveHNsL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2h0bWwveHNsL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxMzU2OCkKKysr
IFdlYkNvcmUva2h0bWwveHNsL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwzMCArMjQsMjYgQEAKICNpZmRlZiBLSFRNTF9YU0xUCiAKICNpbmNsdWRlICJYU0xUUHJvY2Vz
c29yLmgiCi0jaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgInhtbF90b2tlbml6
ZXIuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgotI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCi0j
aW5jbHVkZSAibG9hZGVyLmgiCisKICNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkRPTUlt
cGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAibWFya3Vw
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
VG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCi0KKyNpbmNsdWRlICJUZXh0Lmgi
CiAjaW5jbHVkZSAiVHJhbnNmZXJKb2IuaCIKLQotI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxz
Lmg+CisjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgImxvYWRlci5oIgorI2lu
Y2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgInhtbF90b2tlbml6ZXIuaCIKKyNpbmNsdWRlIDxr
eG1sY29yZS9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8bGlieHNsdC9kb2N1bWVudHMuaD4KICNpbmNsdWRlIDxsaWJ4c2x0L2ltcG9ydHMuaD4K
LQotI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHR1
dGlscy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDcgKzg5LDcgQEAgc3RhdGlj
IHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbAogICAgICAgICAgICAgeG1sR2VuZXJp
Y0Vycm9yRnVuYyBvbGRFcnJvckZ1bmMgPSB4bWxHZW5lcmljRXJyb3I7CiAgICAgICAgICAgICB2
b2lkICpvbGRFcnJvckNvbnRleHQgPSB4bWxHZW5lcmljRXJyb3JDb250ZXh0OwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGRhdGEgPSBLV1FTZXJ2ZVN5bmNo
cm9ub3VzUmVxdWVzdChDYWNoZTo6bG9hZGVyKCksIGdsb2JhbERvY0xvYWRlciwgam9iLCBmaW5h
bFVSTCwgaGVhZGVycyk7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YSA9IEtXUVNlcnZl
U3luY2hyb25vdXNSZXF1ZXN0KENhY2hlOjpsb2FkZXIoKSwgZ2xvYmFsRG9jTG9hZGVyLCBqb2Is
IGZpbmFsVVJMLCBoZWFkZXJzKTsKICAgICAgICAgCiAgICAgICAgICAgICB4bWxTZXRHZW5lcmlj
RXJyb3JGdW5jKDAsIHBhcnNlRXJyb3JGdW5jKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHNw
ZWNpZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVzcGVjdHMK
SW5kZXg6IFdlYkNvcmUva2h0bWwvbWlzYy9mb3JtZGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2h0bWwvbWlzYy9mb3JtZGF0YS5oCShyZXZpc2lvbiAxMzU2OCkKKysrIFdlYkNvcmUva2h0
bWwvbWlzYy9mb3JtZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw5IEBACiAjaWZu
ZGVmIEtIVE1MX0ZPUk1fREFUQV9ICiAjZGVmaW5lIEtIVE1MX0ZPUk1fREFUQV9ICiAKLSNpbmNs
dWRlIDxEZXByZWNhdGVkU3RyaW5nLmg+CisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgog
I2luY2x1ZGUgPHF2YWx1ZWxpc3QuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAog
Y2xhc3MgRGVwcmVjYXRlZENTdHJpbmc7CiAKQEAgLTMxLDExICszMiwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgogICAgIEZvcm1EYXRh
RWxlbWVudCgpIDogbV90eXBlKGRhdGEpIHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBE
ZXByZWNhdGVkQnl0ZUFycmF5ICZhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkg
eyB9Ci0gICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJmZpbGVuYW1l
KSA6IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpIHsgfQorICAgIEZv
cm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlwZShkYXRhKSwg
bV9kYXRhKGFycmF5KSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgRGVwcmVjYXRlZFN0
cmluZyYgZmlsZW5hbWUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFt
ZSkgeyB9CiAKICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7Ci0gICAgRGVw
cmVjYXRlZEJ5dGVBcnJheSBtX2RhdGE7CisgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKICAgICBE
ZXByZWNhdGVkU3RyaW5nIG1fZmlsZW5hbWU7CiB9OwogCkBAIC00Nyw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwog
ICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZmaWxlbmFtZSk7CiAK
LSAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGZsYXR0ZW4oKSBjb25zdDsgLy8gb21pdHMgZmlsZXMK
KyAgICBWZWN0b3I8Y2hhcj4gZmxhdHRlbigpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogICAgIERl
cHJlY2F0ZWRTdHJpbmcgZmxhdHRlblRvU3RyaW5nKCkgY29uc3Q7IC8vIG9taXRzIGZpbGVzCiAK
ICAgICBzaXplX3QgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzLmNvdW50KCk7IH0K
SW5kZXg6IFdlYkNvcmUva2h0bWwvbWlzYy9mb3JtZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9raHRtbC9taXNjL2Zvcm1kYXRhLmNwcAkocmV2aXNpb24gMTM1NjgpCisrKyBXZWJDb3Jl
L2todG1sL21pc2MvZm9ybWRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZm9ybWRhdGEuaCIKIAorI2luY2x1ZGUg
PGt4bWxjb3JlL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZvcm1EYXRhOjpG
b3JtRGF0YSgpCkBAIC00OCwxOCArNTAsMTcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShj
b25zdCBEZXByZWNhdAogICAgIG1fZWxlbWVudHMuYXBwZW5kKGZpbGVuYW1lKTsKIH0KIAotRGVw
cmVjYXRlZEJ5dGVBcnJheSBGb3JtRGF0YTo6ZmxhdHRlbigpIGNvbnN0CitWZWN0b3I8Y2hhcj4g
Rm9ybURhdGE6OmZsYXR0ZW4oKSBjb25zdAogewogICAgIC8vIENvbmNhdGVuYXRlIGFsbCB0aGUg
Ynl0ZSBhcnJheXMsIGJ1dCBvbWl0IGFueSBmaWxlcy4KLSAgICBEZXByZWNhdGVkQnl0ZUFycmF5
IGE7CisgICAgVmVjdG9yPGNoYXI+IGE7CiAgICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxGb3JtRGF0YUVsZW1lbnQ+IGl0ID0gbV9lbGVtZW50cy5iZWdpbigpOyBpdCAh
PSBtX2VsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVu
dCAmZSA9ICppdDsKKyAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gKml0OwogICAg
ICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAgICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IGEuc2l6ZSgpOwotICAgICAgICAgICAgaWYgKG9sZFNpemUgPT0g
MCkgeworICAgICAgICAgICAgaWYgKGEuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGEgPSBl
Lm1fZGF0YTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYS5kZXRhY2go
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0g
YS5zaXplKCk7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgp
OwogICAgICAgICAgICAgICAgIGEucmVzaXplKG9sZFNpemUgKyBkZWx0YSk7CiAgICAgICAgICAg
ICAgICAgbWVtY3B5KGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7
CkBAIC03MSw3ICs3Miw3IEBAIERlcHJlY2F0ZWRCeXRlQXJyYXkgRm9ybURhdGE6OmZsYXR0ZW4o
KSAKIAogRGVwcmVjYXRlZFN0cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29uc3QK
IHsKLSAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGJ5dGVzID0gZmxhdHRlbigpOworICAgIFZlY3Rv
cjxjaGFyPiBieXRlcyA9IGZsYXR0ZW4oKTsKICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMShieXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbWFjL0ltYWdlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL0ltYWdlTWFjLm1tCShyZXZpc2lvbiAxMzU2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
bWFjL0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIkltYWdlLmgiCiAKLSNpbXBvcnQgIkRlcHJlY2F0ZWRBcnJh
eS5oIgogI2ltcG9ydCAiRmxvYXRSZWN0LmgiCiAjaW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgi
CiAjaW1wb3J0ICJJbnRTaXplLmgiCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDEzNTY4KQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAicmVuZGVyX2Zvcm0uaCIKKyNpbmNsdWRl
IDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05Niw4ICs5
Nyw4IEBAIGludCBIVE1MT3B0aW9uRWxlbWVudDo6aW5kZXgoKSBjb25zdAogICAgIC8vIHdlIHdv
bid0IGZvcmdldCB0byB1cGRhdGUgYSBtZW1iZXIgdmFyaWFibGUgaW4gc29tZSBjYXNlcy4uLgog
ICAgIEhUTUxTZWxlY3RFbGVtZW50ICpzZWxlY3QgPSBnZXRTZWxlY3QoKTsKICAgICBpZiAoc2Vs
ZWN0KSB7Ci0gICAgICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gc2Vs
ZWN0LT5saXN0SXRlbXMoKTsKLSAgICAgICAgaW50IGwgPSBpdGVtcy5jb3VudCgpOworICAgICAg
ICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAg
ICAgIGludCBsID0gaXRlbXMuc2l6ZSgpOwogICAgICAgICBpbnQgb3B0aW9uSW5kZXggPSAwOwog
ICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaXRl
bXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNTY4KQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgImNz
c3N0eWxlc2VsZWN0b3IuaCIKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRl
ICJyZW5kZXJfZm9ybS5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTgzLDcgKzg0LDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50Ojpz
ZWxlY3RlZEluZGV4KCkgYwogewogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBmaXJz
dCBvcHRpb24gc2VsZWN0ZWQKICAgICB1bnNpZ25lZCBvID0gMDsKLSAgICBEZXByZWNhdGVkQXJy
YXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxl
bWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2Fs
TmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCkBAIC05Nyw3ICs5OCw3IEBAIGludCBI
VE1MU2VsZWN0RWxlbWVudDo6c2VsZWN0ZWRJbmRleCgpIGMKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldFNlbGVjdGVkSW5kZXgoIGludCAgaW5kZXggKQogewogICAgIC8vIGRlc2VsZWN0IGFs
bCBvdGhlciBvcHRpb25zIGFuZCBzZWxlY3Qgb25seSB0aGUgbmV3IG9uZQotICAgIERlcHJlY2F0
ZWRBcnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhU
TUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdEluZGV4OwogICAg
IGZvciAobGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgaW50KGl0ZW1zLnNpemUoKSk7IGxpc3RJ
bmRleCsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUob3B0
aW9uVGFnKSkKQEAgLTExNCw3ICsxMTUsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxlbmd0
aCgpIGNvbnN0CiB7CiAgICAgaW50IGxlbiA9IDA7CiAgICAgdW5zaWduZWQgaTsKLSAgICBEZXBy
ZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3Rv
cjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8
IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1l
KG9wdGlvblRhZykpCiAgICAgICAgICAgICBsZW4rKzsKQEAgLTEzOSw3ICsxNDAsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpyZW1vdmUoaW50IGluZGV4CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KGluZGV4KTsKIAot
ICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7Cisg
ICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpZiAobGlz
dEluZGV4IDwgMCB8fCBpbmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJu
OyAvLyAjIyMgd2hhdCBzaG91bGQgd2UgZG8gPyByZW1vdmUgdGhlIGxhc3QgaXRlbT8KIApAQCAt
MTUxLDcgKzE1Miw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShpbnQgaW5kZXgK
IFN0cmluZyBIVE1MU2VsZWN0RWxlbWVudDo6dmFsdWUoKQogewogICAgIHVuc2lnbmVkIGk7Ci0g
ICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAg
ICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xv
Y2FsTmFtZShvcHRpb25UYWcpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRl
bXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxP
cHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT52YWx1ZSgpOwpAQCAtMTY1LDcgKzE2Niw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFMKICAgICAgICAgcmV0dXJuOwog
ICAgIC8vIGZpbmQgdGhlIG9wdGlvbiB3aXRoIHZhbHVlKCkgbWF0Y2hpbmcgdGhlIGdpdmVuIHBh
cmFtZXRlcgogICAgIC8vIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KLSAgICBE
ZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZl
Y3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKQogICAgICAgICBpZiAoaXRlbXNbaV0tPmhh
c0xvY2FsTmFtZShvcHRpb25UYWcpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4o
aXRlbXNbaV0pLT52YWx1ZSgpID09IHZhbHVlKSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ldKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CkBAIC0xNzUs
OSArMTc2LDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgUwogCiBE
ZXByZWNhdGVkU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50OjpzdGF0ZSgpCiB7Ci0gICAgRGVwcmVj
YXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8
SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogCi0gICAgaW50IGwgPSBpdGVtcy5j
b3VudCgpOworICAgIGludCBsID0gaXRlbXMuc2l6ZSgpOwogICAgIERlcHJlY2F0ZWRTdHJpbmcg
c3RhdGU7CiAgICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykKICAgICAgICAgaWYoaXRlbXNb
aV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVt
ZW50Kj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQpAQCAtMjAxLDkgKzIwMiw5IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnJlc3RvcmVTdGF0ZShEZXAKICAgICAgICAgLy9zdGF0ZVswXSA9ICdY
JzsKICAgICB9CiAKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxp
c3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CiAKLSAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7CisgICAgaW50IGwgPSBpdGVtcy5zaXplKCk7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKICAgICAgICAgaWYgKGl0ZW1zW2ld
LT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQqIG9lID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSk7CkBAIC0y
ODEsNyArMjgyLDcgQEAgUmVuZGVyT2JqZWN0ICpIVE1MU2VsZWN0RWxlbWVudDo6Y3JlYXRlUgog
Ym9vbCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBsaXN0
LCBib29sKQogewogICAgIGJvb2wgc3VjY2Vzc2Z1bCA9IGZhbHNlOwotICAgIERlcHJlY2F0ZWRB
cnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxF
bGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKIAogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9y
IChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CkBAIC0zMTIsNyArMzEzLDcgQEAgYm9v
bCBIVE1MU2VsZWN0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgogCiBpbnQgSFRNTFNlbGVjdEVs
ZW1lbnQ6Om9wdGlvblRvTGlzdEluZGV4KGludCBvcHRpb25JbmRleCkgY29uc3QKIHsKLSAgICBE
ZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZl
Y3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKG9wdGlvbklu
ZGV4IDwgMCB8fCBvcHRpb25JbmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSkKICAgICAgICAgcmV0
dXJuIC0xOwogCkBAIC0zMzAsNyArMzMxLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpvcHRp
b25Ub0xpc3RJbmRleAogCiBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RUb09wdGlvbkluZGV4
KGludCBsaXN0SW5kZXgpIGNvbnN0CiB7Ci0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50
Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQo
aXRlbXMuc2l6ZSgpKSB8fAogICAgICAgICAhaXRlbXNbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1l
KG9wdGlvblRhZykpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTQwMyw3ICs0MDQsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50OjpzZXRSZWNhbGNMaXN0SXRlCiAKIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnJlc2V0KCkKIHsKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgp
OyBpKyspIHsKICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkg
ewpAQCAtNDIxLDcgKzQyMiw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om5vdGlmeU9wdGlv
blNlbGUKIHsKICAgICBpZiAoc2VsZWN0ZWQgJiYgIW1fbXVsdGlwbGUpIHsKICAgICAgICAgLy8g
ZGVzZWxlY3QgYWxsIG90aGVyIG9wdGlvbnMKLSAgICAgICAgRGVwcmVjYXRlZEFycmF5PEhUTUxF
bGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICAgICAgVmVjdG9yPEhUTUxFbGVtZW50
Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICAgICAgdW5zaWduZWQgaTsKICAgICAgICAgZm9y
IChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaXRlbXNb
aV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmgJKHJldmlzaW9uIDEzNTY4KQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgSFRNTF9IVE1MU2VsZWN0
RWxlbWVudEltcGxfSAogI2RlZmluZSBIVE1MX0hUTUxTZWxlY3RFbGVtZW50SW1wbF9ICiAKLSNp
bmNsdWRlICJEZXByZWNhdGVkQXJyYXkuaCIKICNpbmNsdWRlICJIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtOTUsNyArOTUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFJlY2FsY0xpc3RJ
dGVtcygpOwogCi0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zKCkg
Y29uc3QgeworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcygpIGNvbnN0CisgICAg
ewogICAgICAgICBpZiAobV9yZWNhbGNMaXN0SXRlbXMpCiAgICAgICAgICAgICBjb25zdF9jYXN0
PEhUTUxTZWxlY3RFbGVtZW50Kj4odGhpcyktPnJlY2FsY0xpc3RJdGVtcygpOwogICAgICAgICBy
ZXR1cm4gbV9saXN0SXRlbXM7CkBAIC0xMTMsNyArMTE0LDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICB2b2lkIHJlY2FsY0xpc3RJdGVtcygpOwogCi0gICAgbXV0YWJsZSBEZXByZWNhdGVkQXJy
YXk8SFRNTEVsZW1lbnQqPiBtX2xpc3RJdGVtczsKKyAgICBtdXRhYmxlIFZlY3RvcjxIVE1MRWxl
bWVudCo+IG1fbGlzdEl0ZW1zOwogICAgIGludCBtX21pbndpZHRoOwogICAgIGludCBtX3NpemU7
CiAgICAgYm9vbCBtX211bHRpcGxlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAJKHJldmlzaW9uIDEzNTY4
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE3
ICsyMywxNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiYmlkaS5oIgorCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiYnJl
YWtfbGluZXMuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlIDxreG1sY29yZS9B
bHdheXNJbmxpbmUuaD4KICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4
dEJveC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKyNpbmNsdWRlIDxreG1sY29yZS9B
bHdheXNJbmxpbmUuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRpYyBib29sIHNCdWlsZGluZ0NvbXBh
Y3RSdW5zOwogLy8gTWlkcG9pbnQgZ2xvYmFscy4gIFRoZSBnb2FsIGlzIG5vdCB0byBkbyBhbnkg
YWxsb2NhdGlvbiB3aGVuIGRlYWxpbmcgd2l0aAogLy8gdGhlc2UgbWlkcG9pbnRzLCBzbyB3ZSBq
dXN0IGtlZXAgYW4gYXJyYXkgYXJvdW5kIGFuZCBuZXZlciBjbGVhciBpdC4gIFdlIHRyYWNrCiAv
LyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGFuZCBwb3NpdGlvbiB1c2luZyB0aGUgdHdvIG90aGVyIHZh
cmlhYmxlcy4KLXN0YXRpYyBEZXByZWNhdGVkQXJyYXk8QmlkaUl0ZXJhdG9yPiAqc21pZHBvaW50
czsKK3N0YXRpYyBWZWN0b3I8QmlkaUl0ZXJhdG9yPiogc21pZHBvaW50czsKIHN0YXRpYyB1bnNp
Z25lZCBzTnVtTWlkcG9pbnRzOwogc3RhdGljIHVuc2lnbmVkIHNDdXJyTWlkcG9pbnQ7CiBzdGF0
aWMgYm9vbCBiZXR3ZWVuTWlkcG9pbnRzOwpAQCAtNTQ1LDcgKzU0NSw3IEBAIHN0YXRpYyB2b2lk
IGFkZE1pZHBvaW50KGNvbnN0IEJpZGlJdGVyYXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KHNtaWRwb2ludHMtPnNpemUoKSA8PSBzTnVtTWlkcG9pbnRzKQotICAgICAgICBzbWlkcG9pbnRz
LT5yZXNpemUoc051bU1pZHBvaW50cysxMCk7CisgICAgICAgIHNtaWRwb2ludHMtPnJlc2l6ZShz
TnVtTWlkcG9pbnRzICsgMTApOwogCiAgICAgQmlkaUl0ZXJhdG9yKiBtaWRwb2ludHMgPSBzbWlk
cG9pbnRzLT5kYXRhKCk7CiAgICAgbWlkcG9pbnRzW3NOdW1NaWRwb2ludHMrK10gPSBtaWRwb2lu
dDsKQEAgLTE1NDcsNyArMTU0Nyw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmxheW91dElubGlu
ZUNoaWxkcmUKICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyT047CiAgICAgICAgIAogICAg
ICAgICBpZiAoIXNtaWRwb2ludHMpCi0gICAgICAgICAgICBzbWlkcG9pbnRzID0gbmV3IERlcHJl
Y2F0ZWRBcnJheTxCaWRpSXRlcmF0b3I+OworICAgICAgICAgICAgc21pZHBvaW50cyA9IG5ldyBW
ZWN0b3I8QmlkaUl0ZXJhdG9yPigpOwogICAgICAgICAKICAgICAgICAgc051bU1pZHBvaW50cyA9
IDA7CiAgICAgICAgIHNDdXJyTWlkcG9pbnQgPSAwOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzU2OCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkg
QEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHF0ZXh0
c3RyZWFtLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMTM0LDEwICsxMzYsMTEgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246OmVu
c3VyZVJvd3MoaW50IAogewogICAgIGludCBuUm93cyA9IGdyaWRSb3dzOwogICAgIGlmIChudW1S
b3dzID4gblJvd3MpIHsKLSAgICAgICAgaWYgKG51bVJvd3MgPiBzdGF0aWNfY2FzdDxpbnQ+KGdy
aWQuc2l6ZSgpKSkKLSAgICAgICAgICAgIGlmICghZ3JpZC5yZXNpemUobnVtUm93cyoyKzEpKQor
ICAgICAgICBpZiAobnVtUm93cyA+IHN0YXRpY19jYXN0PGludD4oZ3JpZC5zaXplKCkpKSB7Cisg
ICAgICAgICAgICBpZiAobmV3U2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCkgLyBzaXplb2YoaW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICAg
ICAgICAgIGdyaWQucmVzaXplKG51bVJvd3MpOworICAgICAgICB9CiAgICAgICAgIGdyaWRSb3dz
ID0gbnVtUm93czsKICAgICAgICAgaW50IG5Db2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygpOwog
ICAgICAgICBDZWxsU3RydWN0IGVtcHR5Q2VsbFN0cnVjdDsKQEAgLTE1NSwxMSArMTU4LDExIEBA
IGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxs
ICpjZWxsLCBSZW5kZXJPYmplY3QqIHJvdykKK3ZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRD
ZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyT2JqZWN0KiByb3cpCiB7CiAgICAgaW50
IHJTcGFuID0gY2VsbC0+cm93U3BhbigpOwogICAgIGludCBjU3BhbiA9IGNlbGwtPmNvbFNwYW4o
KTsKLSAgICBEZXByZWNhdGVkQXJyYXk8UmVuZGVyVGFibGU6OkNvbHVtblN0cnVjdD4gJmNvbHVt
bnMgPSB0YWJsZSgpLT5jb2x1bW5zOworICAgIFZlY3RvcjxSZW5kZXJUYWJsZTo6Q29sdW1uU3Ry
dWN0PiYgY29sdW1ucyA9IHRhYmxlKCktPmNvbHVtbnM7CiAgICAgaW50IG5Db2xzID0gY29sdW1u
cy5zaXplKCk7CiAKICAgICAvLyAjIyMgbW96aWxsYSBzdGlsbCBzZWVtcyB0byBkbyB0aGUgb2xk
IEhUTUwgd2F5LCBldmVuIGZvciBzdHJpY3QgRFRECkBAIC0yMzksNyArMjQyLDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVAogCiB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6c2V0Q2VsbFdpZHRocygpCiB7Ci0gICAgRGVwcmVjYXRlZEFycmF5PGludD4gJmNvbHVt
blBvcyA9IHRhYmxlKCktPmNvbHVtblBvczsKKyAgICBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0g
dGFibGUoKS0+Y29sdW1uUG9zOwogCiAgICAgaW50IHJvd3MgPSBncmlkUm93czsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5o
CShyZXZpc2lvbiAxMzU2OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgUmVuZGVyVGFibGVfSAogCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTUsMjMgKzExNiwyNSBAQCBwdWJsaWM6CiAgICAg
ICAgIHVuc2lnbmVkIHdpZHRoOyAvLyB0aGUgY2FsY3VsYXRlZCBwb3NpdGlvbiBvZiB0aGUgY29s
dW1uCiAgICAgfTsKIAotICAgIERlcHJlY2F0ZWRBcnJheTxpbnQ+IGNvbHVtblBvczsKLSAgICBE
ZXByZWNhdGVkQXJyYXk8Q29sdW1uU3RydWN0PiBjb2x1bW5zOworICAgIFZlY3RvcjxpbnQ+IGNv
bHVtblBvczsKKyAgICBWZWN0b3I8Q29sdW1uU3RydWN0PiBjb2x1bW5zOwogCiAgICAgdm9pZCBz
cGxpdENvbHVtbihpbnQgcG9zLCBpbnQgZmlyc3RTcGFuKTsKICAgICB2b2lkIGFwcGVuZENvbHVt
bihpbnQgc3Bhbik7CiAgICAgaW50IG51bUVmZkNvbHMoKSBjb25zdCB7IHJldHVybiBjb2x1bW5z
LnNpemUoKTsgfQogICAgIGludCBzcGFuT2ZFZmZDb2woaW50IGVmZkNvbCkgY29uc3QgeyByZXR1
cm4gY29sdW1uc1tlZmZDb2xdLnNwYW47IH0KLSAgICBpbnQgY29sVG9FZmZDb2woaW50IGNvbCkg
Y29uc3QgewotICAgICAgICBpbnQgYyA9IDA7CisgICAgCisgICAgaW50IGNvbFRvRWZmQ29sKGlu
dCBjb2wpIGNvbnN0CisgICAgewogICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxlIChj
IDwgY29sICYmIGkgPCAoaW50KWNvbHVtbnMuc2l6ZSgpKSB7CisgICAgICAgIGludCBlZmZDb2wg
PSBudW1FZmZDb2xzKCk7CisgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29sICYmIGkgPCBl
ZmZDb2w7ICsraSkKICAgICAgICAgICAgIGMgKz0gY29sdW1uc1tpXS5zcGFuOwotICAgICAgICAg
ICAgaSsrOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBpOwogICAgIH0KLSAgICBpbnQgZWZm
Q29sVG9Db2woaW50IGVmZkNvbCkgY29uc3QgeworICAgIAorICAgIGludCBlZmZDb2xUb0NvbChp
bnQgZWZmQ29sKSBjb25zdAorICAgIHsKICAgICAgICAgaW50IGMgPSAwOwogICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGVmZkNvbDsgaSsrKQogICAgICAgICAgICAgYyArPSBjb2x1bW5zW2ld
LnNwYW47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNp
b24gMTM1NjgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiUmVuZGVyQ29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Nyw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgUmVuZGVyVGFibGVDZWxsICpjZWxsOwogICAgICAgICBib29sIGluQ29sU3BhbjsgLy8g
dHJ1ZSBmb3IgY29sdW1ucyBhZnRlciB0aGUgZmlyc3QgaW4gYSBjb2xzcGFuCiAgICAgfTsKLSAg
ICB0eXBlZGVmIERlcHJlY2F0ZWRBcnJheTxDZWxsU3RydWN0PiBSb3c7CisgICAgdHlwZWRlZiBW
ZWN0b3I8Q2VsbFN0cnVjdD4gUm93OwogICAgIHN0cnVjdCBSb3dTdHJ1Y3QgewogICAgICAgICBS
b3cqIHJvdzsKICAgICAgICAgUmVuZGVyT2JqZWN0KiByb3dSZW5kZXJlcjsKQEAgLTEwMiw5ICsx
MDMsOSBAQCBwdWJsaWM6CiAKICAgICAvLyB0aGlzIGdldHMgYSBjZWxsIGdyaWQgZGF0YSBzdHJ1
Y3R1cmUuIGNoYW5naW5nIHRoZSBudW1iZXIgb2YKICAgICAvLyBjb2x1bW5zIGlzIGRvbmUgYnkg
dGhlIHRhYmxlCi0gICAgRGVwcmVjYXRlZEFycmF5PFJvd1N0cnVjdD4gZ3JpZDsKKyAgICBWZWN0
b3I8Um93U3RydWN0PiBncmlkOwogICAgIGludCBncmlkUm93czsKLSAgICBEZXByZWNhdGVkQXJy
YXk8aW50PiByb3dQb3M7CisgICAgVmVjdG9yPGludD4gcm93UG9zOwogCiAgICAgLy8gdGhlIGN1
cnJlbnQgaW5zZXJ0aW9uIHBvc2l0aW9uCiAgICAgaW50IGNDb2w7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy90YWJsZV9sYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L3RhYmxlX2xheW91dC5jcHAJKHJldmlzaW9uIDEzNTY4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
dGFibGVfbGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIyLDEyIEBACiAgKi8K
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJ0YWJsZV9sYXlvdXQuaCIKKwogI2luY2x1
ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKKyNp
bmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogLyoKICAgVGhlIHRleHQgYmVsb3cgaXMgZnJv
bSB0aGUgQ1NTIDIuMSBzcGVjcy4KQEAgLTI1MSw5ICsyNTMsNyBAQCB2b2lkIEZpeGVkVGFibGVM
YXlvdXQ6OmxheW91dCgpCiAjZW5kaWYKIAogCi0gICAgRGVwcmVjYXRlZEFycmF5PGludD4gY2Fs
Y1dpZHRoOwotICAgIGNhbGNXaWR0aC5yZXNpemUoIG5FZmZDb2xzICk7Ci0gICAgY2FsY1dpZHRo
LmZpbGwoIC0xICk7CisgICAgVmVjdG9yPGludD4gY2FsY1dpZHRoKG5FZmZDb2xzLCAtMSk7CiAK
ICAgICAvLyBhc3NpZ24gIHBlcmNlbnQgd2lkdGgKICAgICBpZiAoIGF2YWlsYWJsZSA+IDAgKSB7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCShyZXZpc2lvbiAxMzU2OCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksNyBAQAogI2luY2x1ZGUgIktXUVNsaWRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgPGt4bWxjb3Jl
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPHFjb21ib2JveC5oPgogI2luY2x1ZGUgPHF0ZXh0ZWRpdC5o
PgogCkBAIC02MzUsNyArNjM2LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKICAgICBpZiAoIG1fb3B0aW9uc0NoYW5nZWQgKSB7CiAgICAgICAgIGlmIChlbGVtZW50
KCktPm1fcmVjYWxjTGlzdEl0ZW1zKQogICAgICAgICAgICAgZWxlbWVudCgpLT5yZWNhbGNMaXN0
SXRlbXMoKTsKLSAgICAgICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1z
ID0gZWxlbWVudCgpLT5saXN0SXRlbXMoKTsKKyAgICAgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4g
bGlzdEl0ZW1zID0gZWxlbWVudCgpLT5saXN0SXRlbXMoKTsKICAgICAgICAgaW50IGxpc3RJbmRl
eDsKIAogICAgICAgICBpZiAobV91c2VMaXN0Qm94KQpAQCAtNzc1LDcgKzc3Niw3IEBAIHZvaWQg
UmVuZGVyU2VsZWN0OjpsYXlvdXQoICkKICAgICBSZW5kZXJGb3JtRWxlbWVudDo6bGF5b3V0KCk7
CiAKICAgICAvLyBhbmQgbm93IGRpc2FibGUgdGhlIHdpZGdldCBpbiBjYXNlIHRoZXJlIGlzIG5v
IDxvcHRpb24+IGdpdmVuCi0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gbGlzdEl0
ZW1zID0gZWxlbWVudCgpLT5saXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBs
aXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOwogCiAgICAgYm9vbCBmb3VuZE9wdGlv
biA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6ZSgp
ICYmICFmb3VuZE9wdGlvbjsgaSsrKQpAQCAtNzkzLDcgKzc5NCw3IEBAIHZvaWQgUmVuZGVyU2Vs
ZWN0Ojp2YWx1ZUNoYW5nZWQoV2lkZ2V0KikKIAogICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0
PFFDb21ib0JveCo+KG1fd2lkZ2V0KS0+Y3VycmVudEl0ZW0oKTsKIAotICAgIERlcHJlY2F0ZWRB
cnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlzdEl0ZW1zKCk7Cisg
ICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5saXN0SXRlbXMo
KTsKICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IChpbnQpbGlzdEl0ZW1zLnNpemUoKSkg
ewogICAgICAgICBib29sIGZvdW5kID0gbGlzdEl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShvcHRp
b25UYWcpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CkBAIC04NDAsOSArODQxLDkgQEAgdm9pZCBS
ZW5kZXJTZWxlY3Q6OnNlbGVjdGlvbkNoYW5nZWQoV2lkZwogCiAgICAgLy8gZG9uJ3QgdXNlIGxp
c3RJdGVtcygpIGhlcmUgYXMgd2UgaGF2ZSB0byBhdm9pZCByZWNhbGN1bGF0aW9ucyAtIGNoYW5n
aW5nIHRoZQogICAgIC8vIG9wdGlvbiBsaXN0IHdpbGwgbWFrZSB1c2UgdXBkYXRlIG9wdGlvbnMg
bm90IGluIHRoZSB3YXkgdGhlIHVzZXIgZXhwZWN0cyB0aGVtCi0gICAgRGVwcmVjYXRlZEFycmF5
PEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5tX2xpc3RJdGVtczsKKyAgICBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPm1fbGlzdEl0ZW1zOwog
ICAgIGludCBqID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdEl0ZW1zLmNv
dW50KCk7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgLy8gZG9uJ3QgdXNlIHNldFNlbGVjdGVkKCkgaGVyZSBiZWNh
dXNlIGl0IHdpbGwgY2F1c2UgdXMgdG8gYmUgY2FsbGVkCiAgICAgICAgIC8vIGFnYWluIHdpdGgg
dXBkYXRlU2VsZWN0aW9uLgogICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKG9w
dGlvblRhZykpCkBAIC04NzAsNyArODcxLDcgQEAgUUxpc3RCb3gqIFJlbmRlclNlbGVjdDo6Y3Jl
YXRlTGlzdEJveCgpCiAKIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogewot
ICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+
bGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gZWxlbWVu
dCgpLT5saXN0SXRlbXMoKTsKICAgICBpbnQgaTsKICAgICBpZiAobV91c2VMaXN0Qm94KSB7CiAg
ICAgICAgIC8vIGlmIG11bHRpLXNlbGVjdCwgd2Ugc2VsZWN0IG9ubHkgdGhlIG5ldyBzZWxlY3Rl
ZCBpbmRleApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvdGFibGVfbGF5b3V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvdGFibGVfbGF5b3V0LmgJKHJldmlzaW9uIDEzNTY4KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvdGFibGVfbGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDggQEAKICNpZm5kZWYgVEFCTEVfTEFZT1VUX0gKICNkZWZpbmUgVEFCTEVfTEFZT1VU
X0gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgor
I2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTYwLDcgKzYwLDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGludCBjYWxjV2lkdGhBcnJh
eSggaW50IHRhYmxlV2lkdGggKTsKIAotICAgIERlcHJlY2F0ZWRBcnJheTxMZW5ndGg+IHdpZHRo
OworICAgIFZlY3RvcjxMZW5ndGg+IHdpZHRoOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMTAwLDggKzEwMCw4IEBAIHByb3RlY3RlZDoKIAlpbnQgY2FsY1dpZHRoOwogICAgIH07CiAK
LSAgICBEZXByZWNhdGVkQXJyYXk8TGF5b3V0PiBsYXlvdXRTdHJ1Y3Q7Ci0gICAgRGVwcmVjYXRl
ZEFycmF5PFJlbmRlclRhYmxlQ2VsbCAqPnNwYW5DZWxsczsKKyAgICBWZWN0b3I8TGF5b3V0PiBs
YXlvdXRTdHJ1Y3Q7CisgICAgVmVjdG9yPFJlbmRlclRhYmxlQ2VsbCo+IHNwYW5DZWxsczsKICAg
ICBib29sIGhhc1BlcmNlbnQgOiAxOwogICAgIG11dGFibGUgYm9vbCBwZXJjZW50YWdlc0RpcnR5
IDogMTsKICAgICBtdXRhYmxlIGJvb2wgZWZmV2lkdGhEaXJ0eSA6IDE7CkluZGV4OiBXZWJDb3Jl
L2RvbS94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS94bWxfdG9r
ZW5pemVyLmNwcAkocmV2aXNpb24gMTM1NjgpCisrKyBXZWJDb3JlL2RvbS94bWxfdG9rZW5pemVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0YXRpYyBXZWJDb3JlOjpE
b2NMb2FkZXIgKmdsb2JhbERvY0xvYWQKIAogY2xhc3MgT2Zmc2V0QnVmZmVyIHsKIHB1YmxpYzoK
LSAgICBPZmZzZXRCdWZmZXIoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSAmYikgOiBtX2J1ZmZl
cihiKSwgbV9jdXJyZW50T2Zmc2V0KDApIHsgfQorICAgIE9mZnNldEJ1ZmZlcihjb25zdCBWZWN0
b3I8Y2hhcj4mIGIpIDogbV9idWZmZXIoYiksIG1fY3VycmVudE9mZnNldCgwKSB7IH0KICAgICAK
ICAgICBpbnQgcmVhZE91dEJ5dGVzKGNoYXIgKm91dHB1dEJ1ZmZlciwgdW5zaWduZWQgYXNrZWRU
b1JlYWQpIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZXNMZWZ0ID0gbV9idWZmZXIuc2l6ZSgpIC0g
bV9jdXJyZW50T2Zmc2V0OwpAQCAtMTYwLDcgKzE2MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgRGVwcmVjYXRlZEJ5dGVBcnJheSBtX2J1ZmZlcjsKKyAgICBWZWN0b3I8Y2hh
cj4gbV9idWZmZXI7CiAgICAgdW5zaWduZWQgbV9jdXJyZW50T2Zmc2V0OwogfTsKIApAQCAtMTgy
LDcgKzE4Miw3IEBAIHN0YXRpYyB2b2lkKiBvcGVuRnVuYyhjb25zdCBjaGFyKiB1cmkpCiAgICAg
S1VSTCBmaW5hbFVSTDsKICAgICBUcmFuc2ZlckpvYiogam9iID0gbmV3IFRyYW5zZmVySm9iKDAs
ICJHRVQiLCB1cmkpOwogICAgIERlcHJlY2F0ZWRTdHJpbmcgaGVhZGVyczsKLSAgICBEZXByZWNh
dGVkQnl0ZUFycmF5IGRhdGEgPSBLV1FTZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChDYWNoZTo6bG9h
ZGVyKCksIGdsb2JhbERvY0xvYWRlciwgam9iLCBmaW5hbFVSTCwgaGVhZGVycyk7CisgICAgVmVj
dG9yPGNoYXI+IGRhdGEgPSBLV1FTZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChDYWNoZTo6bG9hZGVy
KCksIGdsb2JhbERvY0xvYWRlciwgam9iLCBmaW5hbFVSTCwgaGVhZGVycyk7CiAgICAgCiAgICAg
cmV0dXJuIG5ldyBPZmZzZXRCdWZmZXIoZGF0YSk7CiB9CkluZGV4OiBXZWJDb3JlL2Nzcy9jc3Nz
dHlsZXNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5oCShyZXZpc2lvbiAxMzU2OCkKKysrIFdlYkNvcmUvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNzc19ydWxlaW1wbC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAicmVuZGVyX3N0eWxlLmgi
CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIGNsYXNzIEtIVE1MU2V0dGluZ3M7CiBj
bGFzcyBLVVJMOwpAQCAtMTg0LDE1ICsxODUsMTYgQEAgcHVibGljOgogICAgICAgICAvLyBzZXQg
b2YgbWF0Y2hlZCBkZWNscyBmb3VyIHRpbWVzLCBvbmNlIGZvciB0aG9zZSBwcm9wZXJ0aWVzIHRo
YXQgb3RoZXJzIGRlcGVuZCBvbiAobGlrZSBmb250LXNpemUpLAogICAgICAgICAvLyBhbmQgdGhl
biBhIHNlY29uZCB0aW1lIGZvciBhbGwgdGhlIHJlbWFpbmluZyBwcm9wZXJ0aWVzLiAgV2UgdGhl
biBkbyB0aGUgc2FtZSB0d28gcGFzc2VzCiAgICAgICAgIC8vIGZvciBhbnkgIWltcG9ydGFudCBy
dWxlcy4KLSAgICAgICAgRGVwcmVjYXRlZEFycmF5PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Kj4gbV9tYXRjaGVkRGVjbHM7CisgICAgICAgIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbio+IG1fbWF0Y2hlZERlY2xzOwogICAgICAgICB1bnNpZ25lZCBtX21hdGNoZWREZWNsQ291
bnQ7CiAgICAgICAgIAogICAgICAgICAvLyBBIGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBv
ZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVtZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVz
ZWQgZm9yCiAgICAgICAgIC8vIG1lcmdlIHNvcnRpbmcuCi0gICAgICAgIERlcHJlY2F0ZWRBcnJh
eTxDU1NSdWxlRGF0YSo+IG1fbWF0Y2hlZFJ1bGVzOworICAgICAgICBWZWN0b3I8Q1NTUnVsZURh
dGEqPiBtX21hdGNoZWRSdWxlczsKICAgICAgICAgdW5zaWduZWQgbV9tYXRjaGVkUnVsZUNvdW50
OwotICAgICAgICBEZXByZWNhdGVkQXJyYXk8Q1NTUnVsZURhdGEqPiBtX3RtcFJ1bGVzOworICAg
ICAgICBWZWN0b3I8Q1NTUnVsZURhdGEqPiBtX3RtcFJ1bGVzOwogICAgICAgICB1bnNpZ25lZCBt
X3RtcFJ1bGVDb3VudDsKKyAgICAgICAgCiAgICAgICAgIENTU1J1bGVMaXN0KiBtX3J1bGVMaXN0
OwogICAgICAgICBib29sIG1fY29sbGVjdFJ1bGVzT25seTsKIApJbmRleDogV2ViQ29yZS94bWwv
eG1saHR0cHJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC94bWxodHRwcmVxdWVz
dC5oCShyZXZpc2lvbiAxMzU2OCkKKysrIFdlYkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJUcmFuc2ZlckpvYkNsaWVu
dC5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KICNpbmNsdWRlIDxreG1sY29yZS9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNzcsNyArNzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdmlydHVh
bCB2b2lkIHJlY2VpdmVkRGF0YShUcmFuc2ZlckpvYiosIGNvbnN0IGNoYXIgKmRhdGEsIGludCBz
aXplKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRBbGxEYXRhKFRyYW5zZmVySm9iKik7CiAK
LSAgICB2b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJh
eSYgZGF0YSwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGhl
YWRlcnMpOworICAgIHZvaWQgcHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyhjb25zdCBWZWN0b3I8Y2hh
cj4mIGRhdGEsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBo
ZWFkZXJzKTsKIAogICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0OwogICAgIApJbmRleDog
V2ViQ29yZS94bWwveG1saHR0cHJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L3htbGh0dHByZXF1ZXN0LmNwcAkocmV2aXNpb24gMTM1NjgpCisrKyBXZWJDb3JlL3htbC94bWxo
dHRwcmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
IDxranMvcHJvdGVjdC5oPgogI2luY2x1ZGUgPHFyZWdleHAuaD4KICNpbmNsdWRlICJUZXh0RW5j
b2RpbmcuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEtJTzsKIApAQCAtMzE4LDcgKzMxOSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29u
c3QgU3RyaW5nJiAKICAgICAgICAgbV9qb2ItPmFkZE1ldGFEYXRhKCJjdXN0b21IVFRQSGVhZGVy
IiwgbV9yZXF1ZXN0SGVhZGVycyk7CiAKICAgICBpZiAoIW1fYXN5bmMpIHsKLSAgICAgICAgRGVw
cmVjYXRlZEJ5dGVBcnJheSBkYXRhOworICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKICAgICAg
ICAgS1VSTCBmaW5hbFVSTDsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBoZWFkZXJzOwogCkBA
IC00NjgsMjYgKzQ2OSwyNiBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1c1RleHQo
KSBjCiAgICAgcmV0dXJuIGZpcnN0TGluZS5zdWJzdHJpbmcoY29kZUVuZCArIDEsIGVuZE9mTGlu
ZSAtIChjb2RlRW5kICsgMSkpLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsK
IH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6cHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyhjb25zdCBE
ZXByZWNhdGVkQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBLVVJMICZmaW5hbFVSTCwgY29uc3QgRGVw
cmVjYXRlZFN0cmluZyAmaGVhZGVycykKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnByb2Nlc3NTeW5j
TG9hZFJlc3VsdHMoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBjb25zdCBLVVJMJiBmaW5hbFVS
TCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgaGVhZGVycykKIHsKLSAgaWYgKCF1cmxNYXRjaGVz
RG9jdW1lbnREb21haW4oZmluYWxVUkwpKSB7Ci0gICAgYWJvcnQoKTsKLSAgICByZXR1cm47Ci0g
IH0KLSAgCi0gIG1fcmVzcG9uc2VIZWFkZXJzID0gaGVhZGVyczsKLSAgY2hhbmdlU3RhdGUoTG9h
ZGVkKTsKLSAgaWYgKG1fYWJvcnRlZCkKLSAgICByZXR1cm47Ci0gIAotICBjb25zdCBjaGFyICpi
eXRlcyA9IChjb25zdCBjaGFyICopZGF0YS5kYXRhKCk7Ci0gIGludCBsZW4gPSAoaW50KWRhdGEu
c2l6ZSgpOworICAgIGlmICghdXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKGZpbmFsVVJMKSkgewor
ICAgICAgICBhYm9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gIHJlY2VpdmVkRGF0
YSgwLCBieXRlcywgbGVuKTsKLSAgaWYgKG1fYWJvcnRlZCkKLSAgICByZXR1cm47CisgICAgbV9y
ZXNwb25zZUhlYWRlcnMgPSBoZWFkZXJzOworICAgIGNoYW5nZVN0YXRlKExvYWRlZCk7CisgICAg
aWYgKG1fYWJvcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgY2hhciogYnl0ZXMg
PSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIGludCBsZW4gPSBz
dGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKKworICAgIHJlY2VpdmVkRGF0YSgwLCBieXRl
cywgbGVuKTsKKyAgICBpZiAobV9hYm9ydGVkKQorICAgICAgICByZXR1cm47CiAKLSAgcmVjZWl2
ZWRBbGxEYXRhKDApOworICAgIHJlY2VpdmVkQWxsRGF0YSgwKTsKIH0KIAogdm9pZCBYTUxIdHRw
UmVxdWVzdDo6cmVjZWl2ZWRBbGxEYXRhKFRyYW5zZmVySm9iKikKSW5kZXg6IFdlYkNvcmUva3dx
L0tXUUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3dxL0tXUUxvYWRlci5oCShyZXZp
c2lvbiAxMzU2OCkKKysrIFdlYkNvcmUva3dxL0tXUUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw2ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCisjaW5jbHVkZSA8a3htbGNv
cmUvVmVjdG9yLmg+CisKICNpZiBfX09CSkNfXwogQGNsYXNzIE5TRGljdGlvbmFyeTsKIEBjbGFz
cyBOU1N0cmluZzsKQEAgLTQ4LDEzICs1MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBMb2FkZXI7CiAgICAgY2xhc3MgUmVxdWVzdDsKICAgICBjbGFzcyBTdHJpbmc7Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgRGVwcmVjYXRlZEFycmF5OwotCi0gICAgdHlw
ZWRlZiBEZXByZWNhdGVkQXJyYXk8Y2hhcj4gRGVwcmVjYXRlZEJ5dGVBcnJheTsKIH0KIAotV2Vi
Q29yZTo6RGVwcmVjYXRlZEJ5dGVBcnJheSBLV1FTZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChXZWJD
b3JlOjpMb2FkZXIqLCBXZWJDb3JlOjpEb2NMb2FkZXIqLCBXZWJDb3JlOjpUcmFuc2ZlckpvYios
IEtVUkwmIGZpbmFsVVJMLCBEZXByZWNhdGVkU3RyaW5nJiBoZWFkZXJzKTsKK1ZlY3RvcjxjaGFy
PiBLV1FTZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChXZWJDb3JlOjpMb2FkZXIqLCBXZWJDb3JlOjpE
b2NMb2FkZXIqLCBXZWJDb3JlOjpUcmFuc2ZlckpvYiosIEtVUkwmIGZpbmFsVVJMLCBEZXByZWNh
dGVkU3RyaW5nJiBoZWFkZXJzKTsKIAogdm9pZCBLV1FDaGVja0NhY2hlT2JqZWN0U3RhdHVzKFdl
YkNvcmU6OkRvY0xvYWRlciosIFdlYkNvcmU6OkNhY2hlZE9iamVjdCopOwogYm9vbCBLV1FDaGVj
a0lmUmVsb2FkaW5nKFdlYkNvcmU6OkRvY0xvYWRlciopOwpJbmRleDogV2ViQ29yZS9rd3EvS1dR
TG9hZGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3dxL0tXUUxvYWRlci5tbQkocmV2aXNp
b24gMTM1NjgpCisrKyBXZWJDb3JlL2t3cS9LV1FMb2FkZXIubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAKICNpbXBvcnQgIlJlcXVlc3QuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFt
ZUJyaWRnZS5oIgogI2ltcG9ydCAibG9hZGVyLmgiCi0jaW1wb3J0ICJsb2FkZXIuaCIKKyNpbXBv
cnQgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9u
c2UuaD4KIApAQCAtMTIxLDEyICsxMjEsMTIgQEAgTlNTdHJpbmcgKktXUUhlYWRlclN0cmluZ0Zy
b21EaWN0aW9uYXJ5KAogICAgIHJldHVybiBoZWFkZXJTdHJpbmc7CiB9CiAKLURlcHJlY2F0ZWRC
eXRlQXJyYXkgS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoTG9hZGVyICpsb2FkZXIsIERvY0xv
YWRlciAqZG9jTG9hZGVyLCBUcmFuc2ZlckpvYiAqam9iLCBLVVJMICZmaW5hbFVSTCwgRGVwcmVj
YXRlZFN0cmluZyAmcmVzcG9uc2VIZWFkZXJzKQorVmVjdG9yPGNoYXI+IEtXUVNlcnZlU3luY2hy
b25vdXNSZXF1ZXN0KExvYWRlciAqbG9hZGVyLCBEb2NMb2FkZXIgKmRvY0xvYWRlciwgVHJhbnNm
ZXJKb2IgKmpvYiwgS1VSTCAmZmluYWxVUkwsIERlcHJlY2F0ZWRTdHJpbmcgJnJlc3BvbnNlSGVh
ZGVycykKIHsKICAgICBGcmFtZU1hYyAqZnJhbWUgPSBzdGF0aWNfY2FzdDxGcmFtZU1hYyAqPihk
b2NMb2FkZXItPmZyYW1lKCkpOwogICAgIAogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biBEZXByZWNhdGVkQnl0ZUFycmF5KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8Y2hhcj4oKTsK
ICAgICAKICAgICBXZWJDb3JlRnJhbWVCcmlkZ2UgKmJyaWRnZSA9IGZyYW1lLT5icmlkZ2UoKTsK
IApAQCAtMTU1LDcgKzE1NSw3IEBAIERlcHJlY2F0ZWRCeXRlQXJyYXkgS1dRU2VydmVTeW5jaHJv
bm91c1IKICAgICBmaW5hbFVSTCA9IGZpbmFsTlNVUkw7CiAgICAgcmVzcG9uc2VIZWFkZXJzID0g
RGVwcmVjYXRlZFN0cmluZzo6ZnJvbU5TU3RyaW5nKEtXUUhlYWRlclN0cmluZ0Zyb21EaWN0aW9u
YXJ5KHJlc3BvbnNlSGVhZGVyRGljdCwgc3RhdHVzQ29kZSkpOwogCi0gICAgRGVwcmVjYXRlZEJ5
dGVBcnJheSByZXN1bHRzKFtyZXN1bHREYXRhIGxlbmd0aF0pOworICAgIFZlY3RvcjxjaGFyPiBy
ZXN1bHRzKFtyZXN1bHREYXRhIGxlbmd0aF0pOwogCiAgICAgbWVtY3B5KCByZXN1bHRzLmRhdGEo
KSwgW3Jlc3VsdERhdGEgYnl0ZXNdLCBbcmVzdWx0RGF0YSBsZW5ndGhdICk7CiAKQEAgLTE2Myw3
ICsxNjMsNyBAQCBEZXByZWNhdGVkQnl0ZUFycmF5IEtXUVNlcnZlU3luY2hyb25vdXNSCiAKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgcmV0dXJuIERlcHJlY2F0ZWRCeXRl
QXJyYXkoKTsKKyAgICByZXR1cm4gVmVjdG9yPGNoYXI+KCk7CiB9CiAKIGludCBLV1FOdW1iZXJP
ZlBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpEb2NMb2FkZXIgKmRsKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7465</attachid>
            <date>2006-04-02 10:02:35 -0700</date>
            <delta_ts>2006-04-03 12:40:40 -0700</delta_ts>
            <desc>patch 2</desc>
            <filename>vec-more.diff</filename>
            <type>text/plain</type>
            <size>72840</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3hzbC9YU0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94
c2wvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDEzNjM3KQorKysga2h0bWwveHNsL1hTTFRQ
cm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwzMSArMjQsMjcgQEAKICNpZmRlZiBL
SFRNTF9YU0xUCiAKICNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCi0jaW5jbHVkZSAiWFNMU3R5
bGVTaGVldC5oIgotI2luY2x1ZGUgInhtbF90b2tlbml6ZXIuaCIKLSNpbmNsdWRlICJUZXh0Lmgi
Ci0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCi0jaW5jbHVkZSAibG9hZGVyLmgiCisKICNp
bmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAi
S1dRTG9hZGVyLmgiCi0KKyNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVHJhbnNmZXJKb2Iu
aCIKLQotI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+CisjaW5jbHVkZSAiWFNMU3R5bGVT
aGVldC5oIgorI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1
ZGUgInhtbF90b2tlbml6ZXIuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAjaW5jbHVkZSA8bGlieHNsdC9kb2N1bWVudHMu
aD4KICNpbmNsdWRlIDxsaWJ4c2x0L2ltcG9ydHMuaD4KKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHR1
dGlscy5oPgogCi0jaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyB2b2lkIHBhcnNlRXJyb3JGdW5jKHZvaWQgKmN0eHQsIGNvbnN0IGNo
YXIgKm1zZywgLi4uKQpAQCAtOTMsNyArODksNyBAQAogICAgICAgICAgICAgeG1sR2VuZXJpY0Vy
cm9yRnVuYyBvbGRFcnJvckZ1bmMgPSB4bWxHZW5lcmljRXJyb3I7CiAgICAgICAgICAgICB2b2lk
ICpvbGRFcnJvckNvbnRleHQgPSB4bWxHZW5lcmljRXJyb3JDb250ZXh0OwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGRhdGEgPSBLV1FTZXJ2ZVN5bmNocm9u
b3VzUmVxdWVzdChDYWNoZTo6bG9hZGVyKCksIGdsb2JhbERvY0xvYWRlciwgam9iLCBmaW5hbFVS
TCwgaGVhZGVycyk7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YSA9IEtXUVNlcnZlU3lu
Y2hyb25vdXNSZXF1ZXN0KENhY2hlOjpsb2FkZXIoKSwgZ2xvYmFsRG9jTG9hZGVyLCBqb2IsIGZp
bmFsVVJMLCBoZWFkZXJzKTsKICAgICAgICAgCiAgICAgICAgICAgICB4bWxTZXRHZW5lcmljRXJy
b3JGdW5jKDAsIHBhcnNlRXJyb3JGdW5jKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHNwZWNp
ZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVzcGVjdHMKSW5k
ZXg6IGtodG1sL21pc2MvZm9ybWRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9taXNjL2Zvcm1k
YXRhLmgJKHJldmlzaW9uIDEzNjM3KQorKysga2h0bWwvbWlzYy9mb3JtZGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMSw4ICsyMSw5IEBACiAjaWZuZGVmIEtIVE1MX0ZPUk1fREFUQV9ICiAjZGVm
aW5lIEtIVE1MX0ZPUk1fREFUQV9ICiAKLSNpbmNsdWRlIDxEZXByZWNhdGVkU3RyaW5nLmg+Cisj
aW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgPHF2YWx1ZWxpc3QuaD4KKyNp
bmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogY2xhc3MgRGVwcmVjYXRlZENTdHJpbmc7CiAK
QEAgLTMxLDExICszMiwxMSBAQAogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKICAg
ICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KLSAgICBGb3JtRGF0YUVsZW1l
bnQoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSAmYXJyYXkpIDogbV90eXBlKGRhdGEpLCBtX2Rh
dGEoYXJyYXkpIHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBEZXByZWNhdGVkU3RyaW5n
ICZmaWxlbmFtZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSB7
IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJheSkgOiBtX3R5
cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9CisgICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcmIGZpbGVuYW1lKSA6IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmlsZW5h
bWUoZmlsZW5hbWUpIHsgfQogCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90eXBl
OwotICAgIERlcHJlY2F0ZWRCeXRlQXJyYXkgbV9kYXRhOworICAgIFZlY3RvcjxjaGFyPiBtX2Rh
dGE7CiAgICAgRGVwcmVjYXRlZFN0cmluZyBtX2ZpbGVuYW1lOwogfTsKIApAQCAtNDcsNyArNDgs
NyBAQAogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7
CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJmZpbGVuYW1lKTsK
IAotICAgIERlcHJlY2F0ZWRCeXRlQXJyYXkgZmxhdHRlbigpIGNvbnN0OyAvLyBvbWl0cyBmaWxl
cworICAgIFZlY3RvcjxjaGFyPiBmbGF0dGVuKCkgY29uc3Q7IC8vIG9taXRzIGZpbGVzCiAgICAg
RGVwcmVjYXRlZFN0cmluZyBmbGF0dGVuVG9TdHJpbmcoKSBjb25zdDsgLy8gb21pdHMgZmlsZXMK
IAogICAgIHNpemVfdCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudHMuY291bnQoKTsg
fQpJbmRleDoga2h0bWwvbWlzYy9mb3JtZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvbWlz
Yy9mb3JtZGF0YS5jcHAJKHJldmlzaW9uIDEzNjM3KQorKysga2h0bWwvbWlzYy9mb3JtZGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJmb3JtZGF0YS5oIgogCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9ybURhdGE6OkZvcm1EYXRhKCkKQEAgLTQ4LDE4ICs1
MCwxNyBAQAogICAgIG1fZWxlbWVudHMuYXBwZW5kKGZpbGVuYW1lKTsKIH0KIAotRGVwcmVjYXRl
ZEJ5dGVBcnJheSBGb3JtRGF0YTo6ZmxhdHRlbigpIGNvbnN0CitWZWN0b3I8Y2hhcj4gRm9ybURh
dGE6OmZsYXR0ZW4oKSBjb25zdAogewogICAgIC8vIENvbmNhdGVuYXRlIGFsbCB0aGUgYnl0ZSBh
cnJheXMsIGJ1dCBvbWl0IGFueSBmaWxlcy4KLSAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGE7Cisg
ICAgVmVjdG9yPGNoYXI+IGE7CiAgICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxGb3JtRGF0YUVsZW1lbnQ+IGl0ID0gbV9lbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX2Vs
ZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCAmZSA9
ICppdDsKKyAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gKml0OwogICAgICAgICBp
ZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAgICAgICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IGEuc2l6ZSgpOwotICAgICAgICAgICAgaWYgKG9sZFNpemUgPT0gMCkgewor
ICAgICAgICAgICAgaWYgKGEuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGEgPSBlLm1fZGF0
YTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYS5kZXRhY2goKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gYS5zaXpl
KCk7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwogICAg
ICAgICAgICAgICAgIGEucmVzaXplKG9sZFNpemUgKyBkZWx0YSk7CiAgICAgICAgICAgICAgICAg
bWVtY3B5KGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7CkBAIC03
MSw3ICs3Miw3IEBACiAKIERlcHJlY2F0ZWRTdHJpbmcgRm9ybURhdGE6OmZsYXR0ZW5Ub1N0cmlu
ZygpIGNvbnN0CiB7Ci0gICAgRGVwcmVjYXRlZEJ5dGVBcnJheSBieXRlcyA9IGZsYXR0ZW4oKTsK
KyAgICBWZWN0b3I8Y2hhcj4gYnl0ZXMgPSBmbGF0dGVuKCk7CiAgICAgcmV0dXJuIERlcHJlY2F0
ZWRTdHJpbmc6OmZyb21MYXRpbjEoYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpOwogfQogCklu
ZGV4OiBwbGF0Zm9ybS9JbnRQb2ludEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vSW50
UG9pbnRBcnJheS5oCShyZXZpc2lvbiAxMzYzNykKKysrIHBsYXRmb3JtL0ludFBvaW50QXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzIgKzI2LDI4IEBACiAjaWZuZGVmIElOVFBPSU5UQVJS
QVlfSF8KICNkZWZpbmUgSU5UUE9JTlRBUlJBWV9IXwogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZEFy
cmF5LmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIElu
dFJlY3Q7CiAKLWNsYXNzIEludFBvaW50QXJyYXkgOiBwdWJsaWMgRGVwcmVjYXRlZEFycmF5PElu
dFBvaW50PiB7Ci1wdWJsaWM6Ci0gICAgSW50UG9pbnRBcnJheSgpIHsgfQotICAgIEludFBvaW50
QXJyYXkoaW50IHNpemUpIDogRGVwcmVjYXRlZEFycmF5PEludFBvaW50PihzaXplKSB7IH0KLSAg
ICBJbnRQb2ludEFycmF5KGludCwgY29uc3QgaW50ICopOwotICAgIAotICAgIEludFJlY3QgYm91
bmRpbmdSZWN0KCkgY29uc3Q7Ci0gICAgCi0gICAgSW50UG9pbnRBcnJheSBjb3B5KCkgY29uc3Q7
Ci0gICAgCi0gICAgdm9pZCBwb2ludCh1bnNpZ25lZCwgaW50ICosIGludCAqKTsKLSAgICB2b2lk
IHNldFBvaW50KHVuc2lnbmVkLCBpbnQsIGludCk7Ci0gICAgYm9vbCBzZXRQb2ludHMoaW50LCBp
bnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7Ci0gICAgYm9vbCBzZXRQb2lu
dHMoaW50IG5Qb2ludHMsIGNvbnN0IGludCAqcG9pbnRzKTsgICAgCi19OworICAgIGNsYXNzIElu
dFBvaW50QXJyYXkgOiBwdWJsaWMgVmVjdG9yPEludFBvaW50PgorICAgIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEludFBvaW50QXJyYXkoKSB7IH0KKyAgICAgICAgSW50UG9pbnRBcnJheShpbnQg
c2l6ZSkgOiBWZWN0b3I8SW50UG9pbnQ+KHNpemUpIHsgfQorICAgICAgICBJbnRQb2ludEFycmF5
KGludCBuUG9pbnRzLCBjb25zdCBpbnQqIHBvaW50cykgeyBzZXRQb2ludHMoblBvaW50cywgcG9p
bnRzKTsgfQorICAgICAgICAKKyAgICAgICAgSW50UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsK
KyAgICAgICAgICAgIAorICAgICAgICB2b2lkIHBvaW50KHVuc2lnbmVkIGluZGV4LCBpbnQqIHgs
IGludCogeSk7CisgICAgICAgIHZvaWQgc2V0UG9pbnQodW5zaWduZWQgaW5kZXgsIGludCB4LCBp
bnQgeSk7CisgICAgICAgIGJvb2wgc2V0UG9pbnRzKGludCBuUG9pbnRzLCBjb25zdCBpbnQqIHBv
aW50cyk7ICAgIAorICAgICAgICBib29sIHNldFBvaW50cyhpbnQgeDAsIGludCB5MCwgaW50IHgx
LCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgeDMsIGludCB5Myk7CisgICAgfTsKIAotfQor
fSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLS8vIEZJWE1FOiBSZW1vdmUgd2hlbiBldmVyeXRoaW5n
IGlzIGluIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4KLXVzaW5nIFdlYkNvcmU6OkludFBvaW50QXJy
YXk7Ci0KLSNlbmRpZgorI2VuZGlmIC8vIElOVFBPSU5UQVJSQVlfSF8KSW5kZXg6IHBsYXRmb3Jt
L1RleHRFbmNvZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1RleHRFbmNvZGluZy5oCShy
ZXZpc2lvbiAxMzYzNykKKysrIHBsYXRmb3JtL1RleHRFbmNvZGluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Niw3ICs4Niw2IEBACiAgICAgICAgIERlcHJlY2F0ZWRDU3RyaW5nIGZyb21Vbmljb2Rl
KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmLCBib29sIGFsbG93RW50aXRpZXMgPSBmYWxzZSkgY29u
c3Q7CiAKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0b1VuaWNvZGUoY29uc3QgY2hhciosIGlu
dCBsZW5ndGgpIGNvbnN0OwotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHRvVW5pY29kZShjb25z
dCBEZXByZWNhdGVkQnl0ZUFycmF5JiwgaW50IGxlbmd0aCkgY29uc3Q7CiAKICAgICAgICAgVGV4
dEVuY29kaW5nSUQgZW5jb2RpbmdJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RpbmdJRDsgfQog
ICAgICAgICBUZXh0RW5jb2RpbmdGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7
IH0KSW5kZXg6IHBsYXRmb3JtL0ludFBvaW50QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRm
b3JtL0ludFBvaW50QXJyYXkuY3BwCShyZXZpc2lvbiAxMzYzNykKKysrIHBsYXRmb3JtL0ludFBv
aW50QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3NyArMjUsNzkgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkludFBvaW50QXJyYXkuaCIKKworI2luY2x1ZGUgIklu
dFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAotSW50UG9pbnRBcnJheTo6SW50UG9pbnRBcnJh
eShpbnQgblBvaW50cywgY29uc3QgaW50ICpwb2ludHMpCi17Ci0gICAgc2V0UG9pbnRzKG5Qb2lu
dHMsIHBvaW50cyk7Ci19Cit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOwogCi1JbnRQ
b2ludEFycmF5IEludFBvaW50QXJyYXk6OmNvcHkoKSBjb25zdAotewotICAgIEludFBvaW50QXJy
YXkgY29weTsKLSAgICBjb3B5LmR1cGxpY2F0ZSgqdGhpcyk7Ci0gICAgcmV0dXJuIGNvcHk7Ci19
CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEludFJlY3QgSW50UG9pbnRBcnJheTo6Ym91bmRpbmdS
ZWN0KCkgY29uc3QKIHsKLSAgICBpbnQgblBvaW50cyA9IGNvdW50KCk7CisgICAgaW50IG5Qb2lu
dHMgPSBzaXplKCk7CiAgICAgCi0gICAgaWYgKG5Qb2ludHMgPCAxKSByZXR1cm4gSW50UmVjdCgp
OwotICAgIAotICAgIGludCBtaW5YID0gSU5UX01BWCwgbWF4WCA9IDA7Ci0gICAgaW50IG1pblkg
PSBJTlRfTUFYLCBtYXhZID0gMDsKLSAgICAKKyAgICBpZiAoblBvaW50cyA8IDEpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBpbnQgbWluWCA9IElOVF9NQVg7CisgICAgaW50IG1h
eFggPSAwOworICAgIGludCBtaW5ZID0gSU5UX01BWDsKKyAgICBpbnQgbWF4WSA9IDA7CisKICAg
ICB3aGlsZSAoblBvaW50cyA+IDApIHsKICAgICAgICAgSW50UG9pbnQgcCA9IGF0KG5Qb2ludHMp
OwotICAgICAgICBpbnQgeCA9IHAueCgpLCB5ID0gcC55KCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoeCA8IG1pblgpIG1pblggPSB4OwotICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4Owot
ICAgICAgICBpZiAoeSA8IG1pblkpIG1pblkgPSB5OwotICAgICAgICBpZiAoeSA+IG1heFkpIG1h
eFkgPSB5OwotICAgICAgICAKKyAgICAgICAgaW50IHggPSBwLngoKTsKKyAgICAgICAgaW50IHkg
PSBwLnkoKTsKKworICAgICAgICBtaW5YID0gbWluKHgsIG1pblgpOworICAgICAgICBtYXhYID0g
bWF4KHgsIG1heFgpOworICAgICAgICBtaW5ZID0gbWluKHksIG1pblkpOworICAgICAgICBtYXhZ
ID0gbWF4KHksIG1heFkpOworCiAgICAgICAgIG5Qb2ludHMtLTsKLSAgICB9CisgICAgIH0KICAg
ICAKICAgICByZXR1cm4gSW50UmVjdChtaW5YLCBtaW5ZLCBtYXhYIC0gbWluWCArIDEsIG1heFkg
LSBtaW5ZICsgMSk7CiB9CiAKLXZvaWQgSW50UG9pbnRBcnJheTo6cG9pbnQodW5zaWduZWQgaW5k
ZXgsIGludCAqeCwgaW50ICp5KQordm9pZCBJbnRQb2ludEFycmF5Ojpwb2ludCh1bnNpZ25lZCBp
bmRleCwgaW50KiB4LCBpbnQqIHkpCiB7CiAgICAgSW50UG9pbnQgcCA9IGF0KGluZGV4KTsKICAg
ICAqeCA9IHAueCgpOwogICAgICp5ID0gcC55KCk7CiB9CiAKLXZvaWQgSW50UG9pbnRBcnJheTo6
c2V0UG9pbnQoIHVuc2lnbmVkIGluZGV4LCBpbnQgeCwgaW50IHkgKQordm9pZCBJbnRQb2ludEFy
cmF5OjpzZXRQb2ludCh1bnNpZ25lZCBpbmRleCwgaW50IHgsIGludCB5KQogewotICAgIERlcHJl
Y2F0ZWRBcnJheTxJbnRQb2ludD46OmF0KCBpbmRleCApID0gSW50UG9pbnQoIHgsIHkgKTsKKyAg
ICBhdChpbmRleCkgPSBJbnRQb2ludCh4LCB5KTsKIH0KIAorYm9vbCBJbnRQb2ludEFycmF5Ojpz
ZXRQb2ludHMoaW50IG5Qb2ludHMsIGNvbnN0IGludCogcG9pbnRzKQorIHsKKyAgICBjbGVhcigp
OworICAgIHJlc2VydmVDYXBhY2l0eShuUG9pbnRzKTsKKyAgICB3aGlsZSAoblBvaW50cy0tKSB7
CisgICAgICAgIGFwcGVuZChJbnRQb2ludCgqcG9pbnRzLCAqKHBvaW50cyArIDEpKSk7CisgICAg
ICAgIHBvaW50cyArPSAyOworICAgIH0KIAotYm9vbCBJbnRQb2ludEFycmF5OjpzZXRQb2ludHMo
IGludCBuUG9pbnRzLCBjb25zdCBpbnQgKnBvaW50cyApCi17Ci0gICAgaWYgKCAhcmVzaXplKG5Q
b2ludHMpICkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCBpID0gMDsKLSAgICB3aGls
ZSAoIG5Qb2ludHMtLSApIHsgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBhcnJheSBvZiBwb2lu
dHMKLSAgICAgICAgc2V0UG9pbnQoIGkrKywgKnBvaW50cywgKihwb2ludHMrMSkgKTsKLSAgICAg
ICAgcG9pbnRzKys7Ci0gICAgICAgIHBvaW50cysrOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBJbnRQb2ludEFycmF5OjpzZXRQb2ludHMoIGludCBuUG9pbnRzLCBpbnQgeDAs
IGludCB5MCwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgeDMsIGludCB5MykK
K2Jvb2wgSW50UG9pbnRBcnJheTo6c2V0UG9pbnRzKGludCB4MCwgaW50IHkwLCBpbnQgeDEsIGlu
dCB5MSwgaW50IHgyLCBpbnQgeTIsIGludCB4MywgaW50IHkzKQogewotICAgIGlmICggIXJlc2l6
ZShuUG9pbnRzKSApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzZXRQb2ludCggMCwgeDAs
IHkwICk7Ci0gICAgc2V0UG9pbnQoIDEsIHgxLCB5MSApOwotICAgIHNldFBvaW50KCAyLCB4Miwg
eTIgKTsKLSAgICBzZXRQb2ludCggMywgeDMsIHkzICk7CisgICAgY2xlYXIoKTsKKyAgICByZXNl
cnZlQ2FwYWNpdHkoNCk7CisgICAgYXBwZW5kKEludFBvaW50KHgwLCB5MCkpOworICAgIGFwcGVu
ZChJbnRQb2ludCh4MSwgeTEpKTsKKyAgICBhcHBlbmQoSW50UG9pbnQoeDIsIHkyKSk7CisgICAg
YXBwZW5kKEludFBvaW50KHgzLCB5MykpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK30gLy9u
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcGxhdGZvcm0vY2cvUGF0aENHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwbGF0Zm9ybS9jZy9QYXRoQ0cuY3BwCShyZXZpc2lvbiAxMzYzNykKKysrIHBsYXRmb3Jt
L2NnL1BhdGhDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKIHsKICAgICBD
R011dGFibGVQYXRoUmVmIHBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CiAgICAgQ0dQYXRo
TW92ZVRvUG9pbnQocGF0aCwgMCwgYXJyWzBdLngoKSwgYXJyWzBdLnkoKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IGFyci5jb3VudCgpOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IGFyci5zaXplKCk7ICsraSkKICAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQo
cGF0aCwgMCwgYXJyW2ldLngoKSwgYXJyW2ldLnkoKSk7CiAgICAgQ0dQYXRoQ2xvc2VTdWJwYXRo
KHBhdGgpOwogICAgIG1fcGF0aCA9IHBhdGg7CkluZGV4OiBwbGF0Zm9ybS9UZXh0RW5jb2Rpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL1RleHRFbmNvZGluZy5jcHAJKHJldmlzaW9uIDEz
NjM3KQorKysgcGxhdGZvcm0vVGV4dEVuY29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMs
MTYgKzUzLDExIEBACiAgICAgcmV0dXJuICdcXCc7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgVGV4
dEVuY29kaW5nOjp0b1VuaWNvZGUoY29uc3QgY2hhciAqY2hzLCBpbnQgbGVuKSBjb25zdAorRGVw
cmVjYXRlZFN0cmluZyBUZXh0RW5jb2Rpbmc6OnRvVW5pY29kZShjb25zdCBjaGFyKiBjaHMsIGlu
dCBsZW4pIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmVhbWluZ1RleHREZWNvZGVyKCp0aGlzKS50
b1VuaWNvZGUoY2hzLCBsZW4sIHRydWUpOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIFRleHRFbmNv
ZGluZzo6dG9Vbmljb2RlKGNvbnN0IERlcHJlY2F0ZWRCeXRlQXJyYXkgJnFiYSwgaW50IGxlbikg
Y29uc3QKLXsKLSAgICByZXR1cm4gU3RyZWFtaW5nVGV4dERlY29kZXIoKnRoaXMpLnRvVW5pY29k
ZShxYmEsIGxlbiwgdHJ1ZSk7Ci19Ci0KIC8vIFdlJ2QgbGlrZSB0byB1c2UgSUNVIGZvciB0aGlz
IG9uIE9TIFggYXMgd2VsbCBldmVudHVhbGx5LCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUKIC8v
IGl0IGNvdmVycyBhbGwgdGhlIGVuY29kaW5ncyB0aGF0IHdlIG5lZWQKICNpZm5kZWYgX19BUFBM
RV9fCkluZGV4OiBwbGF0Zm9ybS9JbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vSW1h
Z2UuY3BwCShyZXZpc2lvbiAxMzYzNykKKysrIHBsYXRmb3JtL0ltYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMyLDggKzEzMiw4IEBACiAKIGJvb2wgSW1hZ2U6OnNldERhdGEoY29uc3QgRGVw
cmVjYXRlZEJ5dGVBcnJheSYgYnl0ZXMsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlu
dCBsZW5ndGggPSBieXRlcy5jb3VudCgpOwotICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICBpbnQg
bGVuZ3RoID0gYnl0ZXMuc2l6ZSgpOworICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogI2lmZGVmIGtJbWFnZUJ5dGVzQ3V0b2ZmCkBAIC0xNDksNyArMTQ5LDcgQEAKICNp
ZiBfX0FQUExFX18KICAgICAvLyBBdm9pZCB0aGUgZXh0cmEgY29weSBvZiBieXRlcyBieSBqdXN0
IGhhbmRpbmcgdGhlIGJ5dGUgYXJyYXkgZGlyZWN0bHkgdG8gYSBDRkRhdGFSZWYuCiAgICAgLy8g
V2Ugd2lsbCBrZWVwIHRoZXNlIGJ5dGVzIGFsaXZlIGluIG91ciBtX2RhdGEgdmFyaWFibGUuCi0g
ICAgQ0ZEYXRhUmVmIGRhdGEgPSBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgKGNvbnN0
IFVJbnQ4KilieXRlcy5kYXRhKCksIGxlbmd0aCwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgQ0ZE
YXRhUmVmIGRhdGEgPSBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzLmRhdGEoKSksIGxlbmd0aCwga0NGQWxsb2NhdG9yTnVs
bCk7CiAgICAgYm9vbCByZXN1bHQgPSBzZXROYXRpdmVEYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZl
ZCk7CiAgICAgQ0ZSZWxlYXNlKGRhdGEpOwogI2Vsc2UKSW5kZXg6IGh0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxMzYzNykKKysrIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJyZW5kZXJfZm9ybS5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk2LDggKzk3LDggQEAKICAgICAv
LyB3ZSB3b24ndCBmb3JnZXQgdG8gdXBkYXRlIGEgbWVtYmVyIHZhcmlhYmxlIGluIHNvbWUgY2Fz
ZXMuLi4KICAgICBIVE1MU2VsZWN0RWxlbWVudCAqc2VsZWN0ID0gZ2V0U2VsZWN0KCk7CiAgICAg
aWYgKHNlbGVjdCkgewotICAgICAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVt
cyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7Ci0gICAgICAgIGludCBsID0gaXRlbXMuY291bnQoKTsK
KyAgICAgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygp
OworICAgICAgICBpbnQgbCA9IGl0ZW1zLnNpemUoKTsKICAgICAgICAgaW50IG9wdGlvbkluZGV4
ID0gMDsKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAg
aWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewpJbmRleDogaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDEzNjM3KQorKysgaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAicmVuZGVyX2Zvcm0uaCIK
KyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC04Myw3ICs4NCw3IEBACiB7CiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0
IG9wdGlvbiBzZWxlY3RlZAogICAgIHVuc2lnbmVkIG8gPSAwOwotICAgIERlcHJlY2F0ZWRBcnJh
eTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVt
ZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxO
YW1lKG9wdGlvblRhZykpIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKQEAgLTk3LDcgKzk4LDcgQEAKIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgoIGludCAgaW5kZXggKQogewogICAg
IC8vIGRlc2VsZWN0IGFsbCBvdGhlciBvcHRpb25zIGFuZCBzZWxlY3Qgb25seSB0aGUgbmV3IG9u
ZQotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQg
bGlzdEluZGV4OwogICAgIGZvciAobGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgaW50KGl0ZW1z
LnNpemUoKSk7IGxpc3RJbmRleCsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5o
YXNMb2NhbE5hbWUob3B0aW9uVGFnKSkKQEAgLTExNCw3ICsxMTUsNyBAQAogewogICAgIGludCBs
ZW4gPSAwOwogICAgIHVuc2lnbmVkIGk7Ci0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50
Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewog
ICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKQogICAgICAgICAg
ICAgbGVuKys7CkBAIC0xMzksNyArMTQwLDcgQEAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoaW5kZXgpOwogCi0gICAgRGVw
cmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0
b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXgg
PCAwIHx8IGluZGV4ID49IGludChpdGVtcy5zaXplKCkpKQogICAgICAgICByZXR1cm47IC8vICMj
IyB3aGF0IHNob3VsZCB3ZSBkbyA/IHJlbW92ZSB0aGUgbGFzdCBpdGVtPwogCkBAIC0xNTEsNyAr
MTUyLDcgQEAKIFN0cmluZyBIVE1MU2VsZWN0RWxlbWVudDo6dmFsdWUoKQogewogICAgIHVuc2ln
bmVkIGk7Ci0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRl
bXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAoaXRlbXNb
aV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVt
ZW50Kj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT52YWx1ZSgpOwpAQCAtMTY1LDcgKzE2
Niw3IEBACiAgICAgICAgIHJldHVybjsKICAgICAvLyBmaW5kIHRoZSBvcHRpb24gd2l0aCB2YWx1
ZSgpIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXJhbWV0ZXIKICAgICAvLyBhbmQgbWFrZSBpdCB0aGUg
Y3VycmVudCBzZWxlY3Rpb24uCi0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRl
bXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykK
ICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSAmJiBzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkgewog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSktPnNl
dFNlbGVjdGVkKHRydWUpOwpAQCAtMTc1LDkgKzE3Niw5IEBACiAKIERlcHJlY2F0ZWRTdHJpbmcg
SFRNTFNlbGVjdEVsZW1lbnQ6OnN0YXRlKCkKIHsKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVs
ZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAKLSAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7CisgICAgaW50
IGwgPSBpdGVtcy5zaXplKCk7CiAgICAgRGVwcmVjYXRlZFN0cmluZyBzdGF0ZTsKICAgICBmb3Io
aW50IGkgPSAwOyBpIDwgbDsgaSsrKQogICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1l
KG9wdGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSkt
PnNlbGVjdGVkKCkpCkBAIC0yMDEsOSArMjAyLDkgQEAKICAgICAgICAgLy9zdGF0ZVswXSA9ICdY
JzsKICAgICB9CiAKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxp
c3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CiAKLSAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7CisgICAgaW50IGwgPSBpdGVtcy5zaXplKCk7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKICAgICAgICAgaWYgKGl0ZW1zW2ld
LT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQqIG9lID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSk7CkBAIC0y
ODEsNyArMjgyLDcgQEAKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZv
cm1EYXRhTGlzdCYgbGlzdCwgYm9vbCkKIHsKICAgICBib29sIHN1Y2Nlc3NmdWwgPSBmYWxzZTsK
LSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwor
ICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAKICAgICB1bnNp
Z25lZCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewpAQCAtMzEy
LDcgKzMxMyw3IEBACiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5kZXgo
aW50IG9wdGlvbkluZGV4KSBjb25zdAogewotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVu
dCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMg
PSBsaXN0SXRlbXMoKTsKICAgICBpZiAob3B0aW9uSW5kZXggPCAwIHx8IG9wdGlvbkluZGV4ID49
IGludChpdGVtcy5zaXplKCkpKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTMzMCw3ICszMzEs
NyBAQAogCiBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RUb09wdGlvbkluZGV4KGludCBsaXN0
SW5kZXgpIGNvbnN0CiB7Ci0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMg
PSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVt
cygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRlbXMuc2l6
ZSgpKSB8fAogICAgICAgICAhaXRlbXNbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRh
ZykpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTM1MSwzMiArMzUyLDI4IEBACiB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoKQogewogICAgIE5vZGUqIGN1cnJlbnQgPSBm
aXJzdENoaWxkKCk7Ci0gICAgbV9saXN0SXRlbXMucmVzaXplKDApOworICAgIG1fbGlzdEl0ZW1z
LmNsZWFyKCk7CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGZvdW5kU2VsZWN0ZWQgPSAwOwotICAg
IHdoaWxlKGN1cnJlbnQpIHsKKyAgICB3aGlsZSAoY3VycmVudCkgewogICAgICAgICBpZiAoY3Vy
cmVudC0+aGFzVGFnTmFtZShvcHRncm91cFRhZykgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7
CiAgICAgICAgICAgICAvLyAjIyMgd2hhdCBpZiBvcHRncm91cCBjb250YWlucyBqdXN0IGNvbW1l
bnRzPyBkb24ndCB3YW50IG9uZSBvZiBubyBvcHRpb25zIGluIGl0Li4uCi0gICAgICAgICAgICBt
X2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6ZSgpKzEpOwotICAgICAgICAgICAgbV9s
aXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihjdXJyZW50KTsKKyAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KGN1cnJlbnQpKTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5m
aXJzdENoaWxkKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUo
b3B0aW9uVGFnKSkgewotICAgICAgICAgICAgbV9saXN0SXRlbXMucmVzaXplKG1fbGlzdEl0ZW1z
LnNpemUoKSsxKTsKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zW21fbGlzdEl0ZW1zLnNpemUoKS0x
XSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oY3VycmVudCk7CisgICAgICAgICAgICBtX2xp
c3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihjdXJyZW50KSk7CiAgICAg
ICAgICAgICBpZiAoIWZvdW5kU2VsZWN0ZWQgJiYgIW1fbXVsdGlwbGUgJiYgbV9zaXplIDw9IDEp
IHsKICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQqPihjdXJyZW50KTsKICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkLT5tX3Nl
bGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGZvdW5k
U2VsZWN0ZWQgJiYgIW1fbXVsdGlwbGUgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQq
PihjdXJyZW50KS0+c2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZFNl
bGVjdGVkICYmICFtX211bHRpcGxlICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4o
Y3VycmVudCktPnNlbGVjdGVkKCkpIHsKICAgICAgICAgICAgICAgICBmb3VuZFNlbGVjdGVkLT5t
X3NlbGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgZm91bmRTZWxlY3RlZCA9IHN0YXRp
Y19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oY3VycmVudCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoaHJUYWcpKSB7Ci0gICAgICAg
ICAgICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6ZSgpKzEpOwotICAgICAgICAg
ICAgbV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihjdXJyZW50KTsKLSAgICAgICAgfQotICAgICAgICBOb2RlICpwYXJlbnQgPSBjdXJy
ZW50LT5wYXJlbnROb2RlKCk7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKGhyVGFn
KSkKKyAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KGN1cnJlbnQpKTsKKworICAgICAgICBOb2RlKiBwYXJlbnQgPSBjdXJyZW50LT5wYXJlbnRO
b2RlKCk7CiAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwogICAgICAg
ICBpZiAoIWN1cnJlbnQpIHsKICAgICAgICAgICAgIGlmIChwYXJlbnQgIT0gdGhpcykKQEAgLTQw
Myw3ICs0MDAsNyBAQAogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXNldCgpCiB7Ci0gICAg
RGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIHVuc2lnbmVkIGk7
CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChp
dGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKQEAgLTQyMSw3ICs0MTgsNyBAQAog
ewogICAgIGlmIChzZWxlY3RlZCAmJiAhbV9tdWx0aXBsZSkgewogICAgICAgICAvLyBkZXNlbGVj
dCBhbGwgb3RoZXIgb3B0aW9ucwotICAgICAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQq
PiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgICAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgICAgICB1bnNpZ25lZCBpOwogICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKG9wdGlvblRhZykpCkluZGV4OiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAxMzYzNykKKysr
IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBA
QAogI2lmbmRlZiBIVE1MX0hUTUxTZWxlY3RFbGVtZW50SW1wbF9ICiAjZGVmaW5lIEhUTUxfSFRN
TFNlbGVjdEVsZW1lbnRJbXBsX0gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgogI2lu
Y2x1ZGUgIkhUTUxHZW5lcmljRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05NSw3ICs5NSw4IEBACiAKICAgICB2
b2lkIHNldFJlY2FsY0xpc3RJdGVtcygpOwogCi0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVt
ZW50Kj4gbGlzdEl0ZW1zKCkgY29uc3QgeworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJ
dGVtcygpIGNvbnN0CisgICAgewogICAgICAgICBpZiAobV9yZWNhbGNMaXN0SXRlbXMpCiAgICAg
ICAgICAgICBjb25zdF9jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4odGhpcyktPnJlY2FsY0xpc3RJ
dGVtcygpOwogICAgICAgICByZXR1cm4gbV9saXN0SXRlbXM7CkBAIC0xMTMsNyArMTE0LDcgQEAK
IHByaXZhdGU6CiAgICAgdm9pZCByZWNhbGNMaXN0SXRlbXMoKTsKIAotICAgIG11dGFibGUgRGVw
cmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gbV9saXN0SXRlbXM7CisgICAgbXV0YWJsZSBWZWN0
b3I8SFRNTEVsZW1lbnQqPiBtX2xpc3RJdGVtczsKICAgICBpbnQgbV9taW53aWR0aDsKICAgICBp
bnQgbV9zaXplOwogICAgIGJvb2wgbV9tdWx0aXBsZTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZp
c2lvbiAxMzYzNykKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NzEsNDggKzk3MSw0NiBAQAogICAgICAgICAgICAgYyA9IGMuZGFyaygpOwogICAgICAg
ICAvKiBub2JyZWFrOyAqLwogICAgIGNhc2UgU09MSUQ6Ci0gICAgICAgIEludFBvaW50QXJyYXkg
cXVhZCg0KTsKKyAgICB7CiAgICAgICAgIHAtPnNldFBlbihQZW46Ok5vUGVuKTsKICAgICAgICAg
cC0+c2V0QnJ1c2goYyk7CiAgICAgICAgIEFTU0VSVCh4MiA+PSB4MSk7CiAgICAgICAgIEFTU0VS
VCh5MiA+PSB5MSk7Ci0gICAgICAgIGlmIChhZGpidzE9PTAgJiYgYWRqYncyID09IDApIHsKLSAg
ICAgICAgICAgIHAtPmRyYXdSZWN0KEludFJlY3QoeDEseTEseDIteDEseTIteTEpKTsKKyAgICAg
ICAgaWYgKCFhZGpidzEgJiYgIWFkamJ3MikgeworICAgICAgICAgICAgcC0+ZHJhd1JlY3QoSW50
UmVjdCh4MSwgeTEsIHgyIC0geDEsIHkyIC0geTEpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBzd2l0Y2gocykgeworICAgICAgICBJbnRQb2ludEFycmF5IHF1YWQo
NCk7CisgICAgICAgIHN3aXRjaCAocykgewogICAgICAgICBjYXNlIEJTVG9wOgotICAgICAgICAg
ICAgcXVhZC5zZXRQb2ludHMoNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxK2tNYXgo
LWFkamJ3MSwwKSwgeTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB4MStrTWF4KCBhZGpi
dzEsMCksIHkyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIta01heCggYWRqYncyLDAp
LCB5MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLWtNYXgoLWFkamJ3MiwwKSwgeTEp
OworICAgICAgICAgICAgcXVhZC5zZXRQb2ludHMoeDEgKyBrTWF4KC1hZGpidzEsIDApLCB5MSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxICsga01heCggYWRqYncxLCAwKSwgeTIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAtIGtNYXgoIGFkamJ3MiwgMCksIHkyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeDIgLSBrTWF4KC1hZGpidzIsIDApLCB5MSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCU0JvdHRvbToKLSAgICAgICAgICAgIHF1YWQu
c2V0UG9pbnRzKDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB4MStrTWF4KCBhZGpidzEs
MCksIHkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEra01heCgtYWRqYncxLDApLCB5
MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLWtNYXgoLWFkamJ3MiwwKSwgeTIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICB4Mi1rTWF4KCBhZGpidzIsMCksIHkxKTsKKyAgICAg
ICAgICAgIHF1YWQuc2V0UG9pbnRzKHgxICsga01heCggYWRqYncxLCAwKSwgeTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4MSArIGtNYXgoLWFkamJ3MSwgMCksIHkyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeDIgLSBrTWF4KC1hZGpidzIsIDApLCB5MiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHgyIC0ga01heCggYWRqYncyLCAwKSwgeTEpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQlNMZWZ0OgotICAgICAgICAgIHF1YWQuc2V0UG9pbnRzKDQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgeDEsIHkxK2tNYXgoLWFkamJ3MSwwKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICB4MSwgeTIta01heCgtYWRqYncyLDApLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIHgyLCB5Mi1rTWF4KCBhZGpidzIsMCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgeDIsIHkxK2tNYXgoIGFkamJ3MSwwKSk7CisgICAgICAgICAgICBxdWFkLnNldFBvaW50
cyh4MSwgeTEgKyBrTWF4KC1hZGpidzEsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
eDEsIHkyIC0ga01heCgtYWRqYncyLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHgy
LCB5MiAtIGtNYXgoIGFkamJ3MiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4Miwg
eTEgKyBrTWF4KCBhZGpidzEsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEJTUmlnaHQ6Ci0gICAgICAgICAgcXVhZC5zZXRQb2ludHMoNCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICB4MSwgeTEra01heCggYWRqYncxLDApLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHgxLCB5Mi1rTWF4KCBhZGpidzIsMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgeDIsIHky
LWtNYXgoLWFkamJ3MiwwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB4MiwgeTEra01heCgt
YWRqYncxLDApKTsKKyAgICAgICAgICAgIHF1YWQuc2V0UG9pbnRzKHgxLCB5MSArIGtNYXgoIGFk
amJ3MSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4MSwgeTIgLSBrTWF4KCBhZGpi
dzIsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsIHkyIC0ga01heCgtYWRqYncy
LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLCB5MSArIGtNYXgoLWFkamJ3MSwg
MCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcC0+ZHJhd0NvbnZl
eFBvbHlnb24ocXVhZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICB9CiB9CiAKIGJvb2wg
UmVuZGVyT2JqZWN0OjpwYWludEJvcmRlckltYWdlKEdyYXBoaWNzQ29udGV4dCogcCwgaW50IF90
eCwgaW50IF90eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCkluZGV4
OiByZW5kZXJpbmcvYmlkaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL2JpZGkuY3BwCShy
ZXZpc2lvbiAxMzYzNykKKysrIHJlbmRlcmluZy9iaWRpLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMTggKzIzLDE4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJiaWRpLmgi
CisKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJicmVha19saW5lcy5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgPGt4bWxj
b3JlL0Fsd2F5c0lubGluZS5oPgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAi
UmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJDYW52YXMuaCIKICNpbmNsdWRlICJJbmxp
bmVUZXh0Qm94LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVk
ZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIC8vIGFuIGl0ZXJhdG9yIHdoaWNoIHRyYXZlcnNlcyBhbGwgdGhl
IG9iamVjdHMgd2l0aGluIGEgYmxvY2sKQEAgLTk0LDcgKzk0LDcgQEAKIC8vIE1pZHBvaW50IGds
b2JhbHMuICBUaGUgZ29hbCBpcyBub3QgdG8gZG8gYW55IGFsbG9jYXRpb24gd2hlbiBkZWFsaW5n
IHdpdGgKIC8vIHRoZXNlIG1pZHBvaW50cywgc28gd2UganVzdCBrZWVwIGFuIGFycmF5IGFyb3Vu
ZCBhbmQgbmV2ZXIgY2xlYXIgaXQuICBXZSB0cmFjawogLy8gdGhlIG51bWJlciBvZiBpdGVtcyBh
bmQgcG9zaXRpb24gdXNpbmcgdGhlIHR3byBvdGhlciB2YXJpYWJsZXMuCi1zdGF0aWMgRGVwcmVj
YXRlZEFycmF5PEJpZGlJdGVyYXRvcj4gKnNtaWRwb2ludHM7CitzdGF0aWMgVmVjdG9yPEJpZGlJ
dGVyYXRvcj4qIHNtaWRwb2ludHM7CiBzdGF0aWMgdW5zaWduZWQgc051bU1pZHBvaW50czsKIHN0
YXRpYyB1bnNpZ25lZCBzQ3Vyck1pZHBvaW50Owogc3RhdGljIGJvb2wgYmV0d2Vlbk1pZHBvaW50
czsKQEAgLTU0NSw3ICs1NDUsNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc21pZHBv
aW50cy0+c2l6ZSgpIDw9IHNOdW1NaWRwb2ludHMpCi0gICAgICAgIHNtaWRwb2ludHMtPnJlc2l6
ZShzTnVtTWlkcG9pbnRzKzEwKTsKKyAgICAgICAgc21pZHBvaW50cy0+cmVzaXplKHNOdW1NaWRw
b2ludHMgKyAxMCk7CiAKICAgICBCaWRpSXRlcmF0b3IqIG1pZHBvaW50cyA9IHNtaWRwb2ludHMt
PmRhdGEoKTsKICAgICBtaWRwb2ludHNbc051bU1pZHBvaW50cysrXSA9IG1pZHBvaW50OwpAQCAt
MTU0Nyw3ICsxNTQ3LDcgQEAKICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyT047CiAgICAg
ICAgIAogICAgICAgICBpZiAoIXNtaWRwb2ludHMpCi0gICAgICAgICAgICBzbWlkcG9pbnRzID0g
bmV3IERlcHJlY2F0ZWRBcnJheTxCaWRpSXRlcmF0b3I+OworICAgICAgICAgICAgc21pZHBvaW50
cyA9IG5ldyBWZWN0b3I8QmlkaUl0ZXJhdG9yPigpOwogICAgICAgICAKICAgICAgICAgc051bU1p
ZHBvaW50cyA9IDA7CiAgICAgICAgIHNDdXJyTWlkcG9pbnQgPSAwOwpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDEzNjM3KQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNvbC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHF0ZXh0c3RyZWFtLmg+CisjaW5j
bHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTM0
LDEwICsxMzYsMTEgQEAKIHsKICAgICBpbnQgblJvd3MgPSBncmlkUm93czsKICAgICBpZiAobnVt
Um93cyA+IG5Sb3dzKSB7Ci0gICAgICAgIGlmIChudW1Sb3dzID4gc3RhdGljX2Nhc3Q8aW50Pihn
cmlkLnNpemUoKSkpCi0gICAgICAgICAgICBpZiAoIWdyaWQucmVzaXplKG51bVJvd3MqMisxKSkK
KyAgICAgICAgaWYgKG51bVJvd3MgPiBzdGF0aWNfY2FzdDxpbnQ+KGdyaWQuc2l6ZSgpKSkgewor
ICAgICAgICAgICAgaWYgKG51bVJvd3MgPiBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoaW50KSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCisgICAgICAgICAgICBncmlkLnJlc2l6ZShudW1Sb3dzKTsKKyAgICAgICAg
fQogICAgICAgICBncmlkUm93cyA9IG51bVJvd3M7CiAgICAgICAgIGludCBuQ29scyA9IHRhYmxl
KCktPm51bUVmZkNvbHMoKTsKICAgICAgICAgQ2VsbFN0cnVjdCBlbXB0eUNlbGxTdHJ1Y3Q7CkBA
IC0xNTUsMTEgKzE1OCwxMSBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlclRh
YmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwgKmNlbGwsIFJlbmRlck9iamVjdCog
cm93KQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVDZWxsKiBj
ZWxsLCBSZW5kZXJPYmplY3QqIHJvdykKIHsKICAgICBpbnQgclNwYW4gPSBjZWxsLT5yb3dTcGFu
KCk7CiAgICAgaW50IGNTcGFuID0gY2VsbC0+Y29sU3BhbigpOwotICAgIERlcHJlY2F0ZWRBcnJh
eTxSZW5kZXJUYWJsZTo6Q29sdW1uU3RydWN0PiAmY29sdW1ucyA9IHRhYmxlKCktPmNvbHVtbnM7
CisgICAgVmVjdG9yPFJlbmRlclRhYmxlOjpDb2x1bW5TdHJ1Y3Q+JiBjb2x1bW5zID0gdGFibGUo
KS0+Y29sdW1uczsKICAgICBpbnQgbkNvbHMgPSBjb2x1bW5zLnNpemUoKTsKIAogICAgIC8vICMj
IyBtb3ppbGxhIHN0aWxsIHNlZW1zIHRvIGRvIHRoZSBvbGQgSFRNTCB3YXksIGV2ZW4gZm9yIHN0
cmljdCBEVEQKQEAgLTIzOSw3ICsyNDIsNyBAQAogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
c2V0Q2VsbFdpZHRocygpCiB7Ci0gICAgRGVwcmVjYXRlZEFycmF5PGludD4gJmNvbHVtblBvcyA9
IHRhYmxlKCktPmNvbHVtblBvczsKKyAgICBWZWN0b3I8aW50PiYgY29sdW1uUG9zID0gdGFibGUo
KS0+Y29sdW1uUG9zOwogCiAgICAgaW50IHJvd3MgPSBncmlkUm93czsKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHJvd3M7IGkrKykgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDEzNjM3KQorKysg
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNkZWZpbmUgUmVuZGVyVGFibGVfSAogCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNs
dWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTUs
MjMgKzExNiwyNSBAQAogICAgICAgICB1bnNpZ25lZCB3aWR0aDsgLy8gdGhlIGNhbGN1bGF0ZWQg
cG9zaXRpb24gb2YgdGhlIGNvbHVtbgogICAgIH07CiAKLSAgICBEZXByZWNhdGVkQXJyYXk8aW50
PiBjb2x1bW5Qb3M7Ci0gICAgRGVwcmVjYXRlZEFycmF5PENvbHVtblN0cnVjdD4gY29sdW1uczsK
KyAgICBWZWN0b3I8aW50PiBjb2x1bW5Qb3M7CisgICAgVmVjdG9yPENvbHVtblN0cnVjdD4gY29s
dW1uczsKIAogICAgIHZvaWQgc3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0U3Bhbik7CiAg
ICAgdm9pZCBhcHBlbmRDb2x1bW4oaW50IHNwYW4pOwogICAgIGludCBudW1FZmZDb2xzKCkgY29u
c3QgeyByZXR1cm4gY29sdW1ucy5zaXplKCk7IH0KICAgICBpbnQgc3Bhbk9mRWZmQ29sKGludCBl
ZmZDb2wpIGNvbnN0IHsgcmV0dXJuIGNvbHVtbnNbZWZmQ29sXS5zcGFuOyB9Ci0gICAgaW50IGNv
bFRvRWZmQ29sKGludCBjb2wpIGNvbnN0IHsKLSAgICAgICAgaW50IGMgPSAwOworICAgIAorICAg
IGludCBjb2xUb0VmZkNvbChpbnQgY29sKSBjb25zdAorICAgIHsKICAgICAgICAgaW50IGkgPSAw
OwotICAgICAgICB3aGlsZSAoYyA8IGNvbCAmJiBpIDwgKGludCljb2x1bW5zLnNpemUoKSkgewor
ICAgICAgICBpbnQgZWZmQ29sID0gbnVtRWZmQ29scygpOworICAgICAgICBmb3IgKGludCBjID0g
MDsgYyA8IGNvbCAmJiBpIDwgZWZmQ29sOyArK2kpCiAgICAgICAgICAgICBjICs9IGNvbHVtbnNb
aV0uc3BhbjsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQogICAgICAgICByZXR1cm4gaTsK
ICAgICB9Ci0gICAgaW50IGVmZkNvbFRvQ29sKGludCBlZmZDb2wpIGNvbnN0IHsKKyAgICAKKyAg
ICBpbnQgZWZmQ29sVG9Db2woaW50IGVmZkNvbCkgY29uc3QKKyAgICB7CiAgICAgICAgIGludCBj
ID0gMDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlZmZDb2w7IGkrKykKICAgICAgICAg
ICAgIGMgKz0gY29sdW1uc1tpXS5zcGFuOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2
aXNpb24gMTM2MzcpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlckNvbnRhaW5lci5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjcsNyArNjgsNyBAQAogICAgICAgICBSZW5kZXJU
YWJsZUNlbGwgKmNlbGw7CiAgICAgICAgIGJvb2wgaW5Db2xTcGFuOyAvLyB0cnVlIGZvciBjb2x1
bW5zIGFmdGVyIHRoZSBmaXJzdCBpbiBhIGNvbHNwYW4KICAgICB9OwotICAgIHR5cGVkZWYgRGVw
cmVjYXRlZEFycmF5PENlbGxTdHJ1Y3Q+IFJvdzsKKyAgICB0eXBlZGVmIFZlY3RvcjxDZWxsU3Ry
dWN0PiBSb3c7CiAgICAgc3RydWN0IFJvd1N0cnVjdCB7CiAgICAgICAgIFJvdyogcm93OwogICAg
ICAgICBSZW5kZXJPYmplY3QqIHJvd1JlbmRlcmVyOwpAQCAtMTAyLDkgKzEwMyw5IEBACiAKICAg
ICAvLyB0aGlzIGdldHMgYSBjZWxsIGdyaWQgZGF0YSBzdHJ1Y3R1cmUuIGNoYW5naW5nIHRoZSBu
dW1iZXIgb2YKICAgICAvLyBjb2x1bW5zIGlzIGRvbmUgYnkgdGhlIHRhYmxlCi0gICAgRGVwcmVj
YXRlZEFycmF5PFJvd1N0cnVjdD4gZ3JpZDsKKyAgICBWZWN0b3I8Um93U3RydWN0PiBncmlkOwog
ICAgIGludCBncmlkUm93czsKLSAgICBEZXByZWNhdGVkQXJyYXk8aW50PiByb3dQb3M7CisgICAg
VmVjdG9yPGludD4gcm93UG9zOwogCiAgICAgLy8gdGhlIGN1cnJlbnQgaW5zZXJ0aW9uIHBvc2l0
aW9uCiAgICAgaW50IGNDb2w7CkluZGV4OiByZW5kZXJpbmcvdGFibGVfbGF5b3V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvdGFibGVfbGF5b3V0LmNwcAkocmV2aXNpb24gMTM2MzcpCisr
KyByZW5kZXJpbmcvdGFibGVfbGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTAgKzIy
LDEyIEBACiAgKi8KICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJ0YWJsZV9sYXlvdXQu
aCIKKwogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNlbGwuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogLyoKICAgVGhlIHRleHQg
YmVsb3cgaXMgZnJvbSB0aGUgQ1NTIDIuMSBzcGVjcy4KQEAgLTI1MSw5ICsyNTMsNyBAQAogI2Vu
ZGlmCiAKIAotICAgIERlcHJlY2F0ZWRBcnJheTxpbnQ+IGNhbGNXaWR0aDsKLSAgICBjYWxjV2lk
dGgucmVzaXplKCBuRWZmQ29scyApOwotICAgIGNhbGNXaWR0aC5maWxsKCAtMSApOworICAgIFZl
Y3RvcjxpbnQ+IGNhbGNXaWR0aChuRWZmQ29scywgLTEpOwogCiAgICAgLy8gYXNzaWduICBwZXJj
ZW50IHdpZHRoCiAgICAgaWYgKCBhdmFpbGFibGUgPiAwICkgewpJbmRleDogcmVuZGVyaW5nL3Jl
bmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCShy
ZXZpc2lvbiAxMzYzNykKKysrIHJlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJLV1FTbGlkZXIuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKKyNpbmNs
dWRlIDxreG1sY29yZS9WZWN0b3IuaD4KICNpbmNsdWRlIDxxY29tYm9ib3guaD4KICNpbmNsdWRl
IDxxdGV4dGVkaXQuaD4KIApAQCAtNjM1LDcgKzYzNiw3IEBACiAgICAgaWYgKCBtX29wdGlvbnND
aGFuZ2VkICkgewogICAgICAgICBpZiAoZWxlbWVudCgpLT5tX3JlY2FsY0xpc3RJdGVtcykKICAg
ICAgICAgICAgIGVsZW1lbnQoKS0+cmVjYWxjTGlzdEl0ZW1zKCk7Ci0gICAgICAgIERlcHJlY2F0
ZWRBcnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlzdEl0ZW1zKCk7
CisgICAgICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlz
dEl0ZW1zKCk7CiAgICAgICAgIGludCBsaXN0SW5kZXg7CiAKICAgICAgICAgaWYgKG1fdXNlTGlz
dEJveCkKQEAgLTc3NSw3ICs3NzYsNyBAQAogICAgIFJlbmRlckZvcm1FbGVtZW50OjpsYXlvdXQo
KTsKIAogICAgIC8vIGFuZCBub3cgZGlzYWJsZSB0aGUgd2lkZ2V0IGluIGNhc2UgdGhlcmUgaXMg
bm8gPG9wdGlvbj4gZ2l2ZW4KLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBsaXN0
SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+
IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlzdEl0ZW1zKCk7CiAKICAgICBib29sIGZvdW5kT3B0
aW9uID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5zaXpl
KCkgJiYgIWZvdW5kT3B0aW9uOyBpKyspCkBAIC03OTMsNyArNzk0LDcgQEAKIAogICAgIGludCBp
bmRleCA9IHN0YXRpY19jYXN0PFFDb21ib0JveCo+KG1fd2lkZ2V0KS0+Y3VycmVudEl0ZW0oKTsK
IAotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQo
KS0+bGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gZWxl
bWVudCgpLT5saXN0SXRlbXMoKTsKICAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IChpbnQp
bGlzdEl0ZW1zLnNpemUoKSkgewogICAgICAgICBib29sIGZvdW5kID0gbGlzdEl0ZW1zW2luZGV4
XS0+aGFzVGFnTmFtZShvcHRpb25UYWcpOwogICAgICAgICBpZiAoIWZvdW5kKSB7CkBAIC04NDAs
OSArODQxLDkgQEAKIAogICAgIC8vIGRvbid0IHVzZSBsaXN0SXRlbXMoKSBoZXJlIGFzIHdlIGhh
dmUgdG8gYXZvaWQgcmVjYWxjdWxhdGlvbnMgLSBjaGFuZ2luZyB0aGUKICAgICAvLyBvcHRpb24g
bGlzdCB3aWxsIG1ha2UgdXNlIHVwZGF0ZSBvcHRpb25zIG5vdCBpbiB0aGUgd2F5IHRoZSB1c2Vy
IGV4cGVjdHMgdGhlbQotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVt
cyA9IGVsZW1lbnQoKS0+bV9saXN0SXRlbXM7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlz
dEl0ZW1zID0gZWxlbWVudCgpLT5tX2xpc3RJdGVtczsKICAgICBpbnQgaiA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5jb3VudCgpOyBpKyspIHsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdEl0ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIC8v
IGRvbid0IHVzZSBzZXRTZWxlY3RlZCgpIGhlcmUgYmVjYXVzZSBpdCB3aWxsIGNhdXNlIHVzIHRv
IGJlIGNhbGxlZAogICAgICAgICAvLyBhZ2FpbiB3aXRoIHVwZGF0ZVNlbGVjdGlvbi4KICAgICAg
ICAgaWYgKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQpAQCAtODcwLDcgKzg3
MSw3IEBACiAKIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogewotICAgIERl
cHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlzdEl0
ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5s
aXN0SXRlbXMoKTsKICAgICBpbnQgaTsKICAgICBpZiAobV91c2VMaXN0Qm94KSB7CiAgICAgICAg
IC8vIGlmIG11bHRpLXNlbGVjdCwgd2Ugc2VsZWN0IG9ubHkgdGhlIG5ldyBzZWxlY3RlZCBpbmRl
eApJbmRleDogcmVuZGVyaW5nL3RhYmxlX2xheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy90YWJsZV9sYXlvdXQuaAkocmV2aXNpb24gMTM2MzcpCisrKyByZW5kZXJpbmcvdGFibGVfbGF5
b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICNpZm5kZWYgVEFCTEVfTEFZ
T1VUX0gKICNkZWZpbmUgVEFCTEVfTEFZT1VUX0gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJh
eS5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYwLDcgKzYwLDcgQEAKIHByb3RlY3RlZDoKICAg
ICBpbnQgY2FsY1dpZHRoQXJyYXkoIGludCB0YWJsZVdpZHRoICk7CiAKLSAgICBEZXByZWNhdGVk
QXJyYXk8TGVuZ3RoPiB3aWR0aDsKKyAgICBWZWN0b3I8TGVuZ3RoPiB3aWR0aDsKIH07CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMCw4ICsxMDAsOCBAQAogCWludCBjYWxjV2lkdGg7CiAg
ICAgfTsKIAotICAgIERlcHJlY2F0ZWRBcnJheTxMYXlvdXQ+IGxheW91dFN0cnVjdDsKLSAgICBE
ZXByZWNhdGVkQXJyYXk8UmVuZGVyVGFibGVDZWxsICo+c3BhbkNlbGxzOworICAgIFZlY3RvcjxM
YXlvdXQ+IGxheW91dFN0cnVjdDsKKyAgICBWZWN0b3I8UmVuZGVyVGFibGVDZWxsKj4gc3BhbkNl
bGxzOwogICAgIGJvb2wgaGFzUGVyY2VudCA6IDE7CiAgICAgbXV0YWJsZSBib29sIHBlcmNlbnRh
Z2VzRGlydHkgOiAxOwogICAgIG11dGFibGUgYm9vbCBlZmZXaWR0aERpcnR5IDogMTsKSW5kZXg6
IGRvbS94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20veG1sX3Rva2VuaXplci5j
cHAJKHJldmlzaW9uIDEzNjM3KQorKysgZG9tL3htbF90b2tlbml6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogY2xhc3MgT2Zmc2V0QnVmZmVyIHsKIHB1YmxpYzoK
LSAgICBPZmZzZXRCdWZmZXIoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSAmYikgOiBtX2J1ZmZl
cihiKSwgbV9jdXJyZW50T2Zmc2V0KDApIHsgfQorICAgIE9mZnNldEJ1ZmZlcihjb25zdCBWZWN0
b3I8Y2hhcj4mIGIpIDogbV9idWZmZXIoYiksIG1fY3VycmVudE9mZnNldCgwKSB7IH0KICAgICAK
ICAgICBpbnQgcmVhZE91dEJ5dGVzKGNoYXIgKm91dHB1dEJ1ZmZlciwgdW5zaWduZWQgYXNrZWRU
b1JlYWQpIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZXNMZWZ0ID0gbV9idWZmZXIuc2l6ZSgpIC0g
bV9jdXJyZW50T2Zmc2V0OwpAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgfQogCiBwcml2YXRlOgot
ICAgIERlcHJlY2F0ZWRCeXRlQXJyYXkgbV9idWZmZXI7CisgICAgVmVjdG9yPGNoYXI+IG1fYnVm
ZmVyOwogICAgIHVuc2lnbmVkIG1fY3VycmVudE9mZnNldDsKIH07CiAKQEAgLTE4Miw3ICsxODIs
NyBAQAogICAgIEtVUkwgZmluYWxVUkw7CiAgICAgVHJhbnNmZXJKb2IqIGpvYiA9IG5ldyBUcmFu
c2ZlckpvYigwLCAiR0VUIiwgdXJpKTsKICAgICBEZXByZWNhdGVkU3RyaW5nIGhlYWRlcnM7Ci0g
ICAgRGVwcmVjYXRlZEJ5dGVBcnJheSBkYXRhID0gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3Qo
Q2FjaGU6OmxvYWRlcigpLCBnbG9iYWxEb2NMb2FkZXIsIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMp
OworICAgIFZlY3RvcjxjaGFyPiBkYXRhID0gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoQ2Fj
aGU6OmxvYWRlcigpLCBnbG9iYWxEb2NMb2FkZXIsIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOwog
ICAgIAogICAgIHJldHVybiBuZXcgT2Zmc2V0QnVmZmVyKGRhdGEpOwogfQpJbmRleDogY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNw
cAkocmV2aXNpb24gMTM2MzcpCisrKyBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0OSw3ICsyNDksOCBAQAogewogICAgIGVsZW1lbnQgPSAwOwogICAgIHNldHRp
bmdzID0gMDsKLSAgICBtX21hdGNoZWRSdWxlQ291bnQgPSBtX21hdGNoZWREZWNsQ291bnQgPSBt
X3RtcFJ1bGVDb3VudCA9IDA7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX21h
dGNoZWREZWNscy5jbGVhcigpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNldEVuY29k
ZWRVUkwoY29uc3QgS1VSTCYgdXJsKQpAQCAtMzE2LDQ4ICszMTcsMzcgQEAKICAgICBkZWZhdWx0
UXVpcmtzU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHF1aXJrc1NoZWV0LCAic2NyZWVuIik7CiB9
CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZFJ1bGUoQ1NTUnVsZURhdGEqIHJ1
bGUpCi17Ci0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLnNpemUoKSA8PSBtX21hdGNoZWRSdWxlQ291
bnQpCi0gICAgICAgIG1fbWF0Y2hlZFJ1bGVzLnJlc2l6ZSgyKm1fbWF0Y2hlZFJ1bGVzLnNpemUo
KSsxKTsKLSAgICBtX21hdGNoZWRSdWxlc1ttX21hdGNoZWRSdWxlQ291bnQrK10gPSBydWxlOwot
fQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCkKLXsKLSAgICBpZiAobV9tYXRjaGVkRGVjbHMuc2l6
ZSgpIDw9IG1fbWF0Y2hlZERlY2xDb3VudCkKLSAgICAgICAgbV9tYXRjaGVkRGVjbHMucmVzaXpl
KDIqbV9tYXRjaGVkRGVjbHMuc2l6ZSgpKzEpOwotICAgIG1fbWF0Y2hlZERlY2xzW21fbWF0Y2hl
ZERlY2xDb3VudCsrXSA9IGRlY2w7Ci19Ci0KIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlcyhDU1NSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4KQogewotICAgIG1fbWF0Y2hlZFJ1bGVDb3VudCA9IDA7Ci0gICAgaWYgKCFydWxlcyB8
fCAhZWxlbWVudCkgcmV0dXJuOworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICBp
ZiAoIXJ1bGVzIHx8ICFlbGVtZW50KQorICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gV2Ug
bmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBldmVyeXRo
aW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4K
ICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVs
ZXMtPmdldElEUnVsZXMoZWxlbWVudC0+Z2V0SURBdHRyaWJ1dGUoKS5pbXBsKCkpLCBmaXJzdFJ1
bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkpCisg
ICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKICAgICAgICAgZm9yIChjb25zdCBBdG9taWNT
dHJpbmdMaXN0KiBzaW5nbGVDbGFzcyA9IGVsZW1lbnQtPmdldENsYXNzTGlzdCgpOyBzaW5nbGVD
bGFzczsgc2luZ2xlQ2xhc3MgPSBzaW5nbGVDbGFzcy0+bmV4dCgpKQogICAgICAgICAgICAgbWF0
Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoc2luZ2xlQ2xhc3MtPnN0cmluZygp
LmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKLSAgICBtYXRjaFJ1bGVz
Rm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwK
LSAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Cisg
ICAgfQorICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhlbGVtZW50LT5s
b2NhbE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAg
bWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55
IHJ1bGVzLCB3ZSdyZSBkb25lLgotICAgIGlmIChtX21hdGNoZWRSdWxlQ291bnQgPT0gMCkgcmV0
dXJuOworICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
ICAgICAKICAgICAvLyBTb3J0IHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICBzb3J0TWF0
Y2hlZFJ1bGVzKDAsIG1fbWF0Y2hlZFJ1bGVDb3VudCk7CisgICAgc29ydE1hdGNoZWRSdWxlcygw
LCBtX21hdGNoZWRSdWxlcy5zaXplKCkpOwogICAgIAogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUg
c2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KICAgICBpZiAo
IW1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9tYXRjaGVkUnVsZUNvdW50OyBpKyspCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykKICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNs
YXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsKICAgICB9
IGVsc2UgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZUNv
dW50OyBpKyspIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1
bGVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoIW1fcnVsZUxpc3QpCiAgICAgICAg
ICAgICAgICAgbV9ydWxlTGlzdCA9IG5ldyBDU1NSdWxlTGlzdCgpOwogICAgICAgICAgICAgbV9y
dWxlTGlzdC0+YXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkpOwpAQCAtMzY1LDEwICsz
NTUsMTEgQEAKICAgICB9CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zv
ckxpc3QoQ1NTUnVsZURhdGFMaXN0KiBydWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KQor
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChDU1NSdWxlRGF0YUxpc3Qq
IHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpCiB7Ci0gICAg
aWYgKCFydWxlcykgcmV0dXJuOworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGZvciAoQ1NTUnVsZURhdGEqIGQgPSBydWxlcy0+Zmlyc3QoKTsgZDsgZCA9IGQtPm5leHQo
KSkgewogICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBkLT5ydWxlKCk7CiAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gZWxlbWVudC0+bG9jYWxOYW1lKCk7CkBAIC0z
NzYsNyArMzY3LDggQEAKICAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2VsZWN0b3JMb2NhbE5h
bWUgfHwgc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNrU2VsZWN0b3IoZC0+
c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBu
byBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsKLSAgICAg
ICAgICAgIGlmICghZGVjbCB8fCAhZGVjbC0+bGVuZ3RoKCkpIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFs
IHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmIAogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1
c3QgbWF0Y2hlZCBhIHBzZXVkby1lbGVtZW50LgpAQCAtMzg2LDggKzM3OCw5IEBACiAgICAgICAg
ICAgICAgICAgc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlKGR5bmFtaWNQc2V1ZG8pOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGZpcnN0L2xhc3Qg
cnVsZSBpbmRpY2VzIGluIHRoZSBtYXRjaGVkIHJ1bGVzIGFycmF5LgotICAgICAgICAgICAgICAg
IGxhc3RSdWxlSW5kZXggPSBtX21hdGNoZWREZWNsQ291bnQgKyBtX21hdGNoZWRSdWxlQ291bnQ7
Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0UnVsZUluZGV4ID09IC0xKSBmaXJzdFJ1bGVJbmRl
eCA9IG1fbWF0Y2hlZERlY2xDb3VudCArIG1fbWF0Y2hlZFJ1bGVDb3VudDsKKyAgICAgICAgICAg
ICAgICBsYXN0UnVsZUluZGV4ID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgpICsgbV9tYXRjaGVkUnVs
ZXMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFJ1bGVJbmRleCA9PSAtMSkKKyAg
ICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXggPSBsYXN0UnVsZUluZGV4OwogCiAgICAg
ICAgICAgICAgICAgLy8gQWRkIHRoaXMgcnVsZSB0byBvdXIgbGlzdCBvZiBtYXRjaGVkIHJ1bGVz
LgogICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRSdWxlKGQpOwpAQCAtNDA5LDY5ICs0MDIsNjYg
QEAKIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQpCiB7Ci0gICAgaWYgKHN0YXJ0ID49IGVuZCB8fCAoZW5kLXN0YXJ0
ID09IDEpKQorICAgIGlmIChzdGFydCA+PSBlbmQgfHwgKGVuZCAtIHN0YXJ0ID09IDEpKQogICAg
ICAgICByZXR1cm47IC8vIFNhbml0eSBjaGVjay4KLSAgICAKKwogICAgIGlmIChlbmQgLSBzdGFy
dCA8PSA2KSB7CiAgICAgICAgIC8vIEFwcGx5IGEgYnViYmxlIHNvcnQgZm9yIHNtYWxsZXIgbGlz
dHMuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZC0xOyBpID4gc3RhcnQ7IGktLSkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQgLSAxOyBpID4gc3RhcnQ7IGktLSkgewogICAg
ICAgICAgICAgYm9vbCBzb3J0ZWQgPSB0cnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gc3RhcnQ7IGogPCBpOyBqKyspIHsKICAgICAgICAgICAgICAgICBDU1NSdWxlRGF0YSogZWx0
ID0gbV9tYXRjaGVkUnVsZXNbal07Ci0gICAgICAgICAgICAgICAgQ1NTUnVsZURhdGEqIGVsdDIg
PSBtX21hdGNoZWRSdWxlc1tqKzFdOworICAgICAgICAgICAgICAgIENTU1J1bGVEYXRhKiBlbHQy
ID0gbV9tYXRjaGVkUnVsZXNbaiArIDFdOwogICAgICAgICAgICAgICAgIGlmICgqZWx0ID4gKmVs
dDIpIHsKICAgICAgICAgICAgICAgICAgICAgc29ydGVkID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgIG1fbWF0Y2hlZFJ1bGVzW2pdID0gZWx0MjsKLSAgICAgICAgICAgICAgICAgICAgbV9t
YXRjaGVkUnVsZXNbaisxXSA9IGVsdDsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXRjaGVkUnVs
ZXNbaiArIDFdID0gZWx0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChzb3J0ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFBlZm9ybSBhIG1l
cmdlIHNvcnQgZm9yIGxhcmdlciBsaXN0cy4KLSAgICAgICAgdW5zaWduZWQgbWlkID0gKHN0YXJ0
K2VuZCkvMjsKLSAgICAgICAgc29ydE1hdGNoZWRSdWxlcyhzdGFydCwgbWlkKTsKLSAgICAgICAg
c29ydE1hdGNoZWRSdWxlcyhtaWQsIGVuZCk7Ci0gICAgICAgIAotICAgICAgICBDU1NSdWxlRGF0
YSogZWx0ID0gbV9tYXRjaGVkUnVsZXNbbWlkLTFdOwotICAgICAgICBDU1NSdWxlRGF0YSogZWx0
MiA9IG1fbWF0Y2hlZFJ1bGVzW21pZF07Ci0gICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgdGhl
IGZhc3QgY29tbW9uIGNhc2UgKG9mIGVxdWFsIHNwZWNpZmljaXR5KS4gIFRoZSBsaXN0IG1heSBh
bHJlYWR5Ci0gICAgICAgIC8vIGJlIGNvbXBsZXRlbHkgc29ydGVkLgotICAgICAgICBpZiAoKmVs
dCA8PSAqZWx0MikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIFdl
IGhhdmUgdG8gbWVyZ2Ugc29ydC4gIEVuc3VyZSBvdXIgbWVyZ2UgYnVmZmVyIGlzIGJpZyBlbm91
Z2ggdG8gaG9sZAotICAgICAgICAvLyBhbGwgdGhlIGl0ZW1zLgotICAgICAgICBtX3RtcFJ1bGVz
LnJlc2l6ZShlbmQgLSBzdGFydCk7Ci0gICAgICAgIHVuc2lnbmVkIGkxID0gc3RhcnQ7Ci0gICAg
ICAgIHVuc2lnbmVkIGkyID0gbWlkOwotICAgICAgICAKLSAgICAgICAgZWx0ID0gbV9tYXRjaGVk
UnVsZXNbaTFdOwotICAgICAgICBlbHQyID0gbV9tYXRjaGVkUnVsZXNbaTJdOwotICAgICAgICAK
LSAgICAgICAgd2hpbGUgKGkxIDwgbWlkIHx8IGkyIDwgZW5kKSB7Ci0gICAgICAgICAgICBpZiAo
aTEgPCBtaWQgJiYgKGkyID09IGVuZCB8fCAqZWx0IDw9ICplbHQyKSkgewotICAgICAgICAgICAg
ICAgIG1fdG1wUnVsZXNbbV90bXBSdWxlQ291bnQrK10gPSBlbHQ7Ci0gICAgICAgICAgICAgICAg
aTErKzsKLSAgICAgICAgICAgICAgICBpZiAoaTEgPCBtaWQpCi0gICAgICAgICAgICAgICAgICAg
IGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW2kxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIG1fdG1wUnVsZXNbbV90bXBSdWxlQ291bnQrK10gPSBlbHQy
OwotICAgICAgICAgICAgICAgIGkyKys7Ci0gICAgICAgICAgICAgICAgaWYgKGkyIDwgZW5kKQot
ICAgICAgICAgICAgICAgICAgICBlbHQyID0gbV9tYXRjaGVkUnVsZXNbaTJdOwotICAgICAgICAg
ICAgfQorCisgICAgLy8gUGVmb3JtIGEgbWVyZ2Ugc29ydCBmb3IgbGFyZ2VyIGxpc3RzLgorICAg
IHVuc2lnbmVkIG1pZCA9IChzdGFydCArIGVuZCkgLyAyOworICAgIHNvcnRNYXRjaGVkUnVsZXMo
c3RhcnQsIG1pZCk7CisgICAgc29ydE1hdGNoZWRSdWxlcyhtaWQsIGVuZCk7CisgICAgCisgICAg
Q1NTUnVsZURhdGEqIGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW21pZCAtIDFdOworICAgIENTU1J1bGVE
YXRhKiBlbHQyID0gbV9tYXRjaGVkUnVsZXNbbWlkXTsKKyAgICAKKyAgICAvLyBIYW5kbGUgdGhl
IGZhc3QgY29tbW9uIGNhc2UgKG9mIGVxdWFsIHNwZWNpZmljaXR5KS4gIFRoZSBsaXN0IG1heSBh
bHJlYWR5CisgICAgLy8gYmUgY29tcGxldGVseSBzb3J0ZWQuCisgICAgaWYgKCplbHQgPD0gKmVs
dDIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIG1lcmdlIHNvcnQu
ICBFbnN1cmUgb3VyIG1lcmdlIGJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRvIGhvbGQKKyAgICAvLyBh
bGwgdGhlIGl0ZW1zLgorICAgIFZlY3RvcjxDU1NSdWxlRGF0YSo+IHJ1bGVzTWVyZ2VCdWZmZXI7
CisgICAgcnVsZXNNZXJnZUJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoZW5kIC0gc3RhcnQpOyAKKwor
ICAgIHVuc2lnbmVkIGkxID0gc3RhcnQ7CisgICAgdW5zaWduZWQgaTIgPSBtaWQ7CisgICAgCisg
ICAgZWx0ID0gbV9tYXRjaGVkUnVsZXNbaTFdOworICAgIGVsdDIgPSBtX21hdGNoZWRSdWxlc1tp
Ml07CisgICAgCisgICAgd2hpbGUgKGkxIDwgbWlkIHx8IGkyIDwgZW5kKSB7CisgICAgICAgIGlm
IChpMSA8IG1pZCAmJiAoaTIgPT0gZW5kIHx8ICplbHQgPD0gKmVsdDIpKSB7CisgICAgICAgICAg
ICBydWxlc01lcmdlQnVmZmVyLmFwcGVuZChlbHQpOworICAgICAgICAgICAgaWYgKCsraTEgPCBt
aWQpCisgICAgICAgICAgICAgICAgZWx0ID0gbV9tYXRjaGVkUnVsZXNbaTFdOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcnVsZXNNZXJnZUJ1ZmZlci5hcHBlbmQoZWx0Mik7CisgICAg
ICAgICAgICBpZiAoKytpMiA8IGVuZCkKKyAgICAgICAgICAgICAgICBlbHQyID0gbV9tYXRjaGVk
UnVsZXNbaTJdOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGFydDsgaSA8IGVuZDsgaSsrKQotICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXNbaV0gPSBt
X3RtcFJ1bGVzW2ktc3RhcnRdOwotICAgICAgICAKLSAgICAgICAgbV90bXBSdWxlQ291bnQgPSAw
OwotICAgIH0gICAgCisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBp
IDwgZW5kOyBpKyspCisgICAgICAgIG1fbWF0Y2hlZFJ1bGVzW2ldID0gcnVsZXNNZXJnZUJ1ZmZl
cltpIC0gc3RhcnRdOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVtZW50QW5k
UHNldWRvU3RhdGUoRWxlbWVudCogZSkKQEAgLTUwMiw5ICs0OTIsOSBAQAogCiAgICAgc3R5bGUg
PSAwOwogICAgIAotICAgIG1fbWF0Y2hlZFJ1bGVDb3VudCA9IDA7Ci0gICAgbV9tYXRjaGVkRGVj
bENvdW50ID0gMDsKLSAgICBtX3RtcFJ1bGVDb3VudCA9IDA7CisgICAgbV9tYXRjaGVkUnVsZXMu
Y2xlYXIoKTsKKyAgICBtX21hdGNoZWREZWNscy5jbGVhcigpOworCiAgICAgbV9ydWxlTGlzdCA9
IDA7CiAKICAgICBmb250RGlydHkgPSBmYWxzZTsKQEAgLTc1NCw4ICs3NDQsOSBAQAogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hcC0+bGVuZ3RoKCk7IGkrKykgewogICAg
ICAgICAgICAgICAgIE1hcHBlZEF0dHJpYnV0ZSogYXR0ciA9IG1hcC0+YXR0cmlidXRlSXRlbShp
KTsKICAgICAgICAgICAgICAgICBpZiAoYXR0ci0+ZGVjbCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpIGZpcnN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hl
ZERlY2xDb3VudDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdEF1dGhvclJ1bGUgPSBtX21hdGNo
ZWREZWNsQ291bnQ7CisgICAgICAgICAgICAgICAgICAgIGxhc3RBdXRob3JSdWxlID0gbV9tYXRj
aGVkRGVjbHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RBdXRob3JSdWxl
ID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RBdXRob3JSdWxlID0gbGFzdEF1
dGhvclJ1bGU7CiAgICAgICAgICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihhdHRy
LT5kZWNsKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTc2Niw4ICs3
NTcsOSBAQAogICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2luY2UgdGhlaXIgbWFw
cGVkIHN0eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRyaWJ1dGVzLgog
ICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogYXR0cmlidXRlRGVjbCA9IHN0eWxl
ZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKTsKICAgICAgICAgaWYgKGF0
dHJpYnV0ZURlY2wpIHsKLSAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpIGZp
cnN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xDb3VudDsKLSAgICAgICAgICAgIGxhc3RBdXRo
b3JSdWxlID0gbV9tYXRjaGVkRGVjbENvdW50OworICAgICAgICAgICAgbGFzdEF1dGhvclJ1bGUg
PSBtX21hdGNoZWREZWNscy5zaXplKCk7CisgICAgICAgICAgICBpZiAoZmlyc3RBdXRob3JSdWxl
ID09IC0xKQorICAgICAgICAgICAgICAgIGZpcnN0QXV0aG9yUnVsZSA9IGxhc3RBdXRob3JSdWxl
OwogICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKGF0dHJpYnV0ZURlY2wpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtNzc5LDggKzc3MSw5IEBACiAgICAgaWYgKHN0eWxlZEVsZW1lbnQp
IHsKICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZURlY2wgPSBzdHls
ZWRFbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKICAgICAgICAgaWYgKGlubGluZURlY2wpIHsK
LSAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpIGZpcnN0QXV0aG9yUnVsZSA9
IG1fbWF0Y2hlZERlY2xDb3VudDsKLSAgICAgICAgICAgIGxhc3RBdXRob3JSdWxlID0gbV9tYXRj
aGVkRGVjbENvdW50OworICAgICAgICAgICAgbGFzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNs
cy5zaXplKCk7CisgICAgICAgICAgICBpZiAoZmlyc3RBdXRob3JSdWxlID09IC0xKQorICAgICAg
ICAgICAgICAgIGZpcnN0QXV0aG9yUnVsZSA9IGxhc3RBdXRob3JSdWxlOwogICAgICAgICAgICAg
YWRkTWF0Y2hlZERlY2xhcmF0aW9uKGlubGluZURlY2wpOwogICAgICAgICB9CiAgICAgfQpAQCAt
Nzg5LDcgKzc4Miw3IEBACiAgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBp
LmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCiAg
ICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBo
aWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50CiAgICAgLy8g
YW5kICg0KSBub3JtYWwgaW1wb3J0YW50LgotICAgIGFwcGx5RGVjbGFyYXRpb25zKHRydWUsIGZh
bHNlLCAwLCBtX21hdGNoZWREZWNsQ291bnQtMSk7CisgICAgYXBwbHlEZWNsYXJhdGlvbnModHJ1
ZSwgZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwogICAgIGFwcGx5RGVjbGFy
YXRpb25zKHRydWUsIHRydWUsIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwogICAg
IGFwcGx5RGVjbGFyYXRpb25zKHRydWUsIHRydWUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVs
ZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnModHJ1ZSwgdHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RV
QVJ1bGUpOwpAQCAtODE0LDcgKzgwNyw3IEBACiAgICAgfQogICAgIAogICAgIC8vIE5vdyBkbyB0
aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwgdGhl
ICFpbXBvcnRhbnQgcHJvcGVydGllcy4KLSAgICBhcHBseURlY2xhcmF0aW9ucyhmYWxzZSwgZmFs
c2UsIGxhc3RVQVJ1bGUrMSwgbV9tYXRjaGVkRGVjbENvdW50LTEpOworICAgIGFwcGx5RGVjbGFy
YXRpb25zKGZhbHNlLCBmYWxzZSwgbGFzdFVBUnVsZSArIDEsIG1fbWF0Y2hlZERlY2xzLnNpemUo
KSAtIDEpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zKGZhbHNlLCB0cnVlLCBmaXJzdEF1dGhvclJ1
bGUsIGxhc3RBdXRob3JSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyhmYWxzZSwgdHJ1ZSwg
Zmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyhmYWxz
ZSwgdHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwpAQCAtODU3LDcgKzg1MCw3IEBACiAg
ICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsK
ICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUsIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhv
clJ1bGUpOwogICAgIAotICAgIGlmIChtX21hdGNoZWREZWNsQ291bnQgPT0gMCkKKyAgICBpZiAo
bV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBz
dHlsZSA9IG5ldyAoZS0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsK
QEAgLTg2OSw3ICs4NjIsNyBAQAogICAgIHN0eWxlLT5ub25pbmhlcml0ZWRfZmxhZ3MuX3N0eWxl
VHlwZSA9IHBzZXVkb1N0eWxlOwogICAgIAogICAgIC8vIEhpZ2gtcHJpb3JpdHkgcHJvcGVydGll
cy4KLSAgICBhcHBseURlY2xhcmF0aW9ucyh0cnVlLCBmYWxzZSwgMCwgbV9tYXRjaGVkRGVjbENv
dW50LTEpOworICAgIGFwcGx5RGVjbGFyYXRpb25zKHRydWUsIGZhbHNlLCAwLCBtX21hdGNoZWRE
ZWNscy5zaXplKCkgLSAxKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyh0cnVlLCB0cnVlLCBmaXJz
dEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyh0cnVl
LCB0cnVlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOwogICAgIGFwcGx5RGVjbGFyYXRp
b25zKHRydWUsIHRydWUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKQEAgLTg5Myw3ICs4ODYs
NyBAQAogICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3Io
KTsKICAgICB9CiAgICAgCi0gICAgYXBwbHlEZWNsYXJhdGlvbnMoZmFsc2UsIGZhbHNlLCBsYXN0
VUFSdWxlKzEsIG1fbWF0Y2hlZERlY2xDb3VudC0xKTsKKyAgICBhcHBseURlY2xhcmF0aW9ucyhm
YWxzZSwgZmFsc2UsIGxhc3RVQVJ1bGUgKyAxLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsK
ICAgICBhcHBseURlY2xhcmF0aW9ucyhmYWxzZSwgdHJ1ZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0
QXV0aG9yUnVsZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnMoZmFsc2UsIHRydWUsIGZpcnN0VXNl
clJ1bGUsIGxhc3RVc2VyUnVsZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnMoZmFsc2UsIHRydWUs
IGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKSW5kZXg6IGNzcy9jc3NzdHlsZXNlbGVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAkocmV2aXNpb24gMTM2MzcpCisr
KyBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiY3NzX3J1bGVpbXBsLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJyZW5kZXJfc3R5bGUuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4K
IAogY2xhc3MgS0hUTUxTZXR0aW5nczsKIGNsYXNzIEtVUkw7CkBAIC0xNDEsMTIgKzE0MiwxMyBA
QAogCiAgICAgICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50ICplKTsKICAgICAKKyAgICAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShDU1NSdWxlRGF0
YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICAgICAgdm9pZCBh
ZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpIHsg
bV9tYXRjaGVkRGVjbHMuYXBwZW5kKGRlY2wpOyB9CisKICAgICAgICAgdm9pZCBtYXRjaFJ1bGVz
KENTU1J1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgpOwotICAgICAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KENTU1J1bGVEYXRhTGlzdCogcnVs
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4KTsKLSAgICAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKHVuc2ln
bmVkIGZpcnN0UnVsZUluZGV4LCB1bnNpZ25lZCBsYXN0UnVsZUluZGV4KTsKLSAgICAgICAgdm9p
ZCBhZGRNYXRjaGVkUnVsZShDU1NSdWxlRGF0YSogcnVsZSk7Ci0gICAgICAgIHZvaWQgYWRkTWF0
Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKTsKKyAgICAg
ICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChDU1NSdWxlRGF0YUxpc3QqIHJ1bGVzLCBpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOworICAgICAgICB2b2lkIHNvcnRNYXRj
aGVkUnVsZXModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CisKICAgICAgICAgdm9pZCBh
cHBseURlY2xhcmF0aW9ucyhib29sIGZpcnN0UGFzcywgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFy
dEluZGV4LCBpbnQgZW5kSW5kZXgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENTU1N0eWxl
U2hlZXQgKmRlZmF1bHRTaGVldDsKQEAgLTE2Niw3ICsxNjgsNyBAQAogICAgICAgICBCYWNrZ3Jv
dW5kTGF5ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKICAgICAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29s
b3I7CiAKLXB1YmxpYzoKKyAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBSZW5kZXJTdHlsZSog
c3R5bGVOb3RZZXRBdmFpbGFibGU7CiAgCiAgICAgcHJpdmF0ZToKQEAgLTE4NCwxNSArMTg2LDEy
IEBACiAgICAgICAgIC8vIHNldCBvZiBtYXRjaGVkIGRlY2xzIGZvdXIgdGltZXMsIG9uY2UgZm9y
IHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlcnMgZGVwZW5kIG9uIChsaWtlIGZvbnQtc2l6ZSks
CiAgICAgICAgIC8vIGFuZCB0aGVuIGEgc2Vjb25kIHRpbWUgZm9yIGFsbCB0aGUgcmVtYWluaW5n
IHByb3BlcnRpZXMuICBXZSB0aGVuIGRvIHRoZSBzYW1lIHR3byBwYXNzZXMKICAgICAgICAgLy8g
Zm9yIGFueSAhaW1wb3J0YW50IHJ1bGVzLgotICAgICAgICBEZXByZWNhdGVkQXJyYXk8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX21hdGNoZWREZWNsczsKLSAgICAgICAgdW5zaWduZWQg
bV9tYXRjaGVkRGVjbENvdW50OworICAgICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qPiBtX21hdGNoZWREZWNsczsKICAgICAgICAgCiAgICAgICAgIC8vIEEgYnVmZmVyIHVz
ZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsIGFuZCBh
IHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKICAgICAgICAgLy8gbWVyZ2Ugc29ydGluZy4KLSAg
ICAgICAgRGVwcmVjYXRlZEFycmF5PENTU1J1bGVEYXRhKj4gbV9tYXRjaGVkUnVsZXM7Ci0gICAg
ICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFJ1bGVDb3VudDsKLSAgICAgICAgRGVwcmVjYXRlZEFycmF5
PENTU1J1bGVEYXRhKj4gbV90bXBSdWxlczsKLSAgICAgICAgdW5zaWduZWQgbV90bXBSdWxlQ291
bnQ7CisgICAgICAgIFZlY3RvcjxDU1NSdWxlRGF0YSo+IG1fbWF0Y2hlZFJ1bGVzOworICAgICAg
ICAKICAgICAgICAgQ1NTUnVsZUxpc3QqIG1fcnVsZUxpc3Q7CiAgICAgICAgIGJvb2wgbV9jb2xs
ZWN0UnVsZXNPbmx5OwogCkluZGV4OiB4bWwveG1saHR0cHJlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB4bWwveG1saHR0cHJlcXVlc3QuaAkocmV2aXNpb24gMTM2MzcpCisrKyB4bWwveG1saHR0cHJl
cXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlRyYW5z
ZmVySm9iQ2xpZW50LmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PGt4bWxjb3JlL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC03Nyw3ICs3OCw3IEBACiAgICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVkRGF0YShUcmFuc2ZlckpvYiosIGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRBbGxEYXRhKFRyYW5zZmVySm9iKik7CiAKLSAgICB2b2lk
IHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSYgZGF0YSwg
Y29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGhlYWRlcnMpOwor
ICAgIHZvaWQgcHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyhjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEs
IGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBoZWFkZXJzKTsK
IAogICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0OwogICAgIApJbmRleDogeG1sL3htbGh0
dHByZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB4bWwveG1saHR0cHJlcXVlc3QuY3BwCShyZXZp
c2lvbiAxMzYzNykKKysrIHhtbC94bWxodHRwcmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxranMvcHJvdGVjdC5oPgogI2luY2x1ZGUgPHFyZWdl
eHAuaD4KICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0
b3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEtJTzsKIApAQCAtMzE4LDcgKzMxOSw3IEBACiAgICAg
ICAgIG1fam9iLT5hZGRNZXRhRGF0YSgiY3VzdG9tSFRUUEhlYWRlciIsIG1fcmVxdWVzdEhlYWRl
cnMpOwogCiAgICAgaWYgKCFtX2FzeW5jKSB7Ci0gICAgICAgIERlcHJlY2F0ZWRCeXRlQXJyYXkg
ZGF0YTsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAgICAgIEtVUkwgZmluYWxVUkw7
CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgaGVhZGVyczsKIApAQCAtNDY4LDI2ICs0NjksMjYg
QEAKICAgICByZXR1cm4gZmlyc3RMaW5lLnN1YnN0cmluZyhjb2RlRW5kICsgMSwgZW5kT2ZMaW5l
IC0gKGNvZGVFbmQgKyAxKSkuZGVwcmVjYXRlZFN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpOwog
fQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IERl
cHJlY2F0ZWRCeXRlQXJyYXkgJmRhdGEsIGNvbnN0IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nICZoZWFkZXJzKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6cHJvY2Vzc1N5bmNM
b2FkUmVzdWx0cyhjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGNvbnN0IEtVUkwmIGZpbmFsVVJM
LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBoZWFkZXJzKQogewotICBpZiAoIXVybE1hdGNoZXNE
b2N1bWVudERvbWFpbihmaW5hbFVSTCkpIHsKLSAgICBhYm9ydCgpOwotICAgIHJldHVybjsKLSAg
fQotICAKLSAgbV9yZXNwb25zZUhlYWRlcnMgPSBoZWFkZXJzOwotICBjaGFuZ2VTdGF0ZShMb2Fk
ZWQpOwotICBpZiAobV9hYm9ydGVkKQotICAgIHJldHVybjsKLSAgCi0gIGNvbnN0IGNoYXIgKmJ5
dGVzID0gKGNvbnN0IGNoYXIgKilkYXRhLmRhdGEoKTsKLSAgaW50IGxlbiA9IChpbnQpZGF0YS5z
aXplKCk7CisgICAgaWYgKCF1cmxNYXRjaGVzRG9jdW1lbnREb21haW4oZmluYWxVUkwpKSB7Cisg
ICAgICAgIGFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgcmVjZWl2ZWREYXRh
KDAsIGJ5dGVzLCBsZW4pOwotICBpZiAobV9hYm9ydGVkKQotICAgIHJldHVybjsKKyAgICBtX3Jl
c3BvbnNlSGVhZGVycyA9IGhlYWRlcnM7CisgICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKKyAgICBp
ZiAobV9hYm9ydGVkKQorICAgICAgICByZXR1cm47CiAKLSAgcmVjZWl2ZWRBbGxEYXRhKDApOwor
ICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0
YSgpKTsKKyAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7CisKKyAg
ICByZWNlaXZlZERhdGEoMCwgYnl0ZXMsIGxlbik7CisgICAgaWYgKG1fYWJvcnRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVjZWl2ZWRBbGxEYXRhKDApOwogfQogCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpyZWNlaXZlZEFsbERhdGEoVHJhbnNmZXJKb2IqKQpJbmRleDoga3dxL0tXUUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FMb2FkZXIuaAkocmV2aXNpb24gMTM2MzcpCisrKyBr
d3EvS1dRTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KKwogI2lmIF9fT0JK
Q19fCiBAY2xhc3MgTlNEaWN0aW9uYXJ5OwogQGNsYXNzIE5TU3RyaW5nOwpAQCAtNDgsMTMgKzUw
LDkgQEAKICAgICBjbGFzcyBMb2FkZXI7CiAgICAgY2xhc3MgUmVxdWVzdDsKICAgICBjbGFzcyBT
dHJpbmc7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgRGVwcmVjYXRlZEFycmF5
OwotCi0gICAgdHlwZWRlZiBEZXByZWNhdGVkQXJyYXk8Y2hhcj4gRGVwcmVjYXRlZEJ5dGVBcnJh
eTsKIH0KIAotV2ViQ29yZTo6RGVwcmVjYXRlZEJ5dGVBcnJheSBLV1FTZXJ2ZVN5bmNocm9ub3Vz
UmVxdWVzdChXZWJDb3JlOjpMb2FkZXIqLCBXZWJDb3JlOjpEb2NMb2FkZXIqLCBXZWJDb3JlOjpU
cmFuc2ZlckpvYiosIEtVUkwmIGZpbmFsVVJMLCBEZXByZWNhdGVkU3RyaW5nJiBoZWFkZXJzKTsK
K1ZlY3RvcjxjaGFyPiBLV1FTZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChXZWJDb3JlOjpMb2FkZXIq
LCBXZWJDb3JlOjpEb2NMb2FkZXIqLCBXZWJDb3JlOjpUcmFuc2ZlckpvYiosIEtVUkwmIGZpbmFs
VVJMLCBEZXByZWNhdGVkU3RyaW5nJiBoZWFkZXJzKTsKIAogdm9pZCBLV1FDaGVja0NhY2hlT2Jq
ZWN0U3RhdHVzKFdlYkNvcmU6OkRvY0xvYWRlciosIFdlYkNvcmU6OkNhY2hlZE9iamVjdCopOwog
Ym9vbCBLV1FDaGVja0lmUmVsb2FkaW5nKFdlYkNvcmU6OkRvY0xvYWRlciopOwpJbmRleDoga3dx
L0tXUUxvYWRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRTG9hZGVyLm1tCShyZXZpc2lvbiAx
MzYzNykKKysrIGt3cS9LV1FMb2FkZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAKICNpbXBvcnQgIlJlcXVlc3QuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFtZUJyaWRnZS5oIgog
I2ltcG9ydCAibG9hZGVyLmgiCi0jaW1wb3J0ICJsb2FkZXIuaCIKKyNpbXBvcnQgPGt4bWxjb3Jl
L1ZlY3Rvci5oPgogCiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMUmVzcG9uc2UuaD4KIApAQCAt
MTIxLDEyICsxMjEsMTIgQEAKICAgICByZXR1cm4gaGVhZGVyU3RyaW5nOwogfQogCi1EZXByZWNh
dGVkQnl0ZUFycmF5IEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KExvYWRlciAqbG9hZGVyLCBE
b2NMb2FkZXIgKmRvY0xvYWRlciwgVHJhbnNmZXJKb2IgKmpvYiwgS1VSTCAmZmluYWxVUkwsIERl
cHJlY2F0ZWRTdHJpbmcgJnJlc3BvbnNlSGVhZGVycykKK1ZlY3RvcjxjaGFyPiBLV1FTZXJ2ZVN5
bmNocm9ub3VzUmVxdWVzdChMb2FkZXIgKmxvYWRlciwgRG9jTG9hZGVyICpkb2NMb2FkZXIsIFRy
YW5zZmVySm9iICpqb2IsIEtVUkwgJmZpbmFsVVJMLCBEZXByZWNhdGVkU3RyaW5nICZyZXNwb25z
ZUhlYWRlcnMpCiB7CiAgICAgRnJhbWVNYWMgKmZyYW1lID0gc3RhdGljX2Nhc3Q8RnJhbWVNYWMg
Kj4oZG9jTG9hZGVyLT5mcmFtZSgpKTsKICAgICAKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm4gRGVwcmVjYXRlZEJ5dGVBcnJheSgpOworICAgICAgICByZXR1cm4gVmVjdG9yPGNoYXI+
KCk7CiAgICAgCiAgICAgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UgPSBmcmFtZS0+YnJpZGdl
KCk7CiAKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgIGZpbmFsVVJMID0gZmluYWxOU1VSTDsKICAg
ICByZXNwb25zZUhlYWRlcnMgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTlNTdHJpbmcoS1dRSGVh
ZGVyU3RyaW5nRnJvbURpY3Rpb25hcnkocmVzcG9uc2VIZWFkZXJEaWN0LCBzdGF0dXNDb2RlKSk7
CiAKLSAgICBEZXByZWNhdGVkQnl0ZUFycmF5IHJlc3VsdHMoW3Jlc3VsdERhdGEgbGVuZ3RoXSk7
CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdHMoW3Jlc3VsdERhdGEgbGVuZ3RoXSk7CiAKICAgICBt
ZW1jcHkoIHJlc3VsdHMuZGF0YSgpLCBbcmVzdWx0RGF0YSBieXRlc10sIFtyZXN1bHREYXRhIGxl
bmd0aF0gKTsKIApAQCAtMTYzLDcgKzE2Myw3IEBACiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogCi0gICAgcmV0dXJuIERlcHJlY2F0ZWRCeXRlQXJyYXkoKTsKKyAgICByZXR1cm4g
VmVjdG9yPGNoYXI+KCk7CiB9CiAKIGludCBLV1FOdW1iZXJPZlBlbmRpbmdPckxvYWRpbmdSZXF1
ZXN0cyhXZWJDb3JlOjpEb2NMb2FkZXIgKmRsKQpJbmRleDoga3dxL0tXUVRleHRTdHJlYW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGt3cS9LV1FUZXh0U3RyZWFtLmNwcAkocmV2aXNpb24gMTM2MzcpCisr
KyBrd3EvS1dRVGV4dFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE5ICsyNiwxNSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIktXUVRleHRTdHJlYW0uaCIKIAotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAia3htbGNvcmUvVmVjdG9yLmgiCiAKIGNvbnN0
IHNpemVfdCBpbnRlZ2VyT3JQb2ludGVyQXNTdHJpbmdCdWZmZXJTaXplID0gMTAwOyAvLyBsYXJn
ZSBlbm91Z2ggZm9yIGFueSBpbnRlZ2VyIG9yIHBvaW50ZXIgaW4gc3RyaW5nIGZvcm1hdCwgaW5j
bHVkaW5nIHRyYWlsaW5nIG51bGwgY2hhcmFjdGVyCiBjb25zdCBjaGFyICpwcmVjaXNpb25Gb3Jt
YXRzW10gPSB7ICIlLjBmIiwgIiUuMWYiLCAiJS4yZiIsICIlLjNmIiwgIiUuNGYiLCAiJS41ZiIg
IiUuNmYifTsgCiBjb25zdCBpbnQgbWF4UHJlY2lzaW9uID0gNjsgLy8gbXVzdCBtYXRjaCB0byBw
cmVjaXNpb25Gb3JtYXRzCiBjb25zdCBpbnQgZGVmYXVsdFByZWNpc2lvbiA9IDY7IC8vIG1hdGNo
ZXMgcXQgYW5kIHNwcmludGYoLi4sICIlZiIsIC4uLikgYmVoYXZpb3VyCiAKLVFUZXh0U3RyZWFt
OjpRVGV4dFN0cmVhbShjb25zdCBEZXByZWNhdGVkQnl0ZUFycmF5JiBiYSkKLSAgICA6IG1faGFz
Qnl0ZUFycmF5KHRydWUpLCBtX2J5dGVBcnJheShiYSksIG1fc3RyaW5nKDApLCBtX3ByZWNpc2lv
bihkZWZhdWx0UHJlY2lzaW9uKQotewotfQotCiBRVGV4dFN0cmVhbTo6UVRleHRTdHJlYW0oRGVw
cmVjYXRlZFN0cmluZyogcykKICAgICA6IG1faGFzQnl0ZUFycmF5KGZhbHNlKSwgbV9zdHJpbmco
cyksIG1fcHJlY2lzaW9uKGRlZmF1bHRQcmVjaXNpb24pCiB7CkBAIC00NiwxMSArNDIsOSBAQAog
CiBRVGV4dFN0cmVhbSYgUVRleHRTdHJlYW06Om9wZXJhdG9yPDwoY2hhciBjKQogewotICAgIGlm
IChtX2hhc0J5dGVBcnJheSkgewotICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9ieXRlQXJy
YXkuc2l6ZSgpOwotICAgICAgICBtX2J5dGVBcnJheS5yZXNpemUob2xkU2l6ZSArIDEpOwotICAg
ICAgICBtX2J5dGVBcnJheVtvbGRTaXplXSA9IGM7Ci0gICAgfQorICAgIGlmIChtX2hhc0J5dGVB
cnJheSkKKyAgICAgICAgbV9ieXRlQXJyYXkuYXBwZW5kKGMpOworCiAgICAgaWYgKG1fc3RyaW5n
KQogICAgICAgICBtX3N0cmluZy0+YXBwZW5kKFFDaGFyKGMpKTsKICAgICByZXR1cm4gKnRoaXM7
CkluZGV4OiBrd3EvS1dRVGV4dFN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9LV1FUZXh0U3Ry
ZWFtLmgJKHJldmlzaW9uIDEzNjM3KQorKysga3dxL0tXUVRleHRTdHJlYW0uaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBRVGV4dFN0cmVhbV9ICiAjZGVmaW5lIFFU
ZXh0U3RyZWFtX0gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgorI2luY2x1ZGUgImt4
bWxjb3JlL1ZlY3Rvci5oIgogCiBjbGFzcyBEZXByZWNhdGVkQ1N0cmluZzsKIGNsYXNzIFFDaGFy
OwpAQCAtNDMsNyArNDMsNiBAQAogCiBjbGFzcyBRVGV4dFN0cmVhbSB7CiBwdWJsaWM6Ci0gICAg
UVRleHRTdHJlYW0oY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSYpOwogICAgIFFUZXh0U3RyZWFt
KERlcHJlY2F0ZWRTdHJpbmcqKTsKIAogICAgIFFUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIp
OwpAQCAtNjksNyArNjgsNyBAQAogICAgIFFUZXh0U3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgUVRl
eHRTdHJlYW0mKTsKIAogICAgIGJvb2wgbV9oYXNCeXRlQXJyYXk7Ci0gICAgRGVwcmVjYXRlZEJ5
dGVBcnJheSBtX2J5dGVBcnJheTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9ieXRlQXJyYXk7CiAgICAg
RGVwcmVjYXRlZFN0cmluZyogbV9zdHJpbmc7CiAgICAgaW50IG1fcHJlY2lzaW9uOwogfTsKSW5k
ZXg6IGxvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0Nh
Y2hlZENTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMTM2MzcpCisrKyBsb2FkZXIvQ2FjaGVkQ1NT
U3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJDYWNoZWRPYmplY3QuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDxr
eG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTQ3LDcgKzQ4LDcg
QEAKICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCopOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRhdGEoRGVwcmVjYXRlZEJ5dGVBcnJheSYsIGJvb2wgYXRF
bmQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBib29sIGF0RW5k
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGVycm9yKCk7CiAKICAgICAgICAgdmlydHVhbCBib29s
IHNjaGVkdWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogbG9hZGVyL0NhY2hlZFNj
cmlwdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZWRTY3JpcHQuaAkocmV2aXNpb24gMTM2
MzcpCisrKyBsb2FkZXIvQ2FjaGVkU2NyaXB0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDMzICsy
OSwzNSBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29k
aW5nLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBEb2NMb2FkZXI7CiAKLSAgICBjbGFzcyBDYWNoZWRTY3JpcHQgOiBwdWJs
aWMgQ2FjaGVkT2JqZWN0IHsKKyAgICBjbGFzcyBDYWNoZWRTY3JpcHQgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0CisgICAgewogICAgIHB1YmxpYzoKLQlDYWNoZWRTY3JpcHQoRG9jTG9hZGVyKiwgY29u
c3QgU3RyaW5nJiBVUkwsIEtJTzo6Q2FjaGVDb250cm9sLCB0aW1lX3QgZXhwaXJlRGF0ZSwgY29u
c3QgRGVwcmVjYXRlZFN0cmluZyYgY2hhcnNldCk7Ci0JQ2FjaGVkU2NyaXB0KGNvbnN0IFN0cmlu
ZyYgVVJMLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzY3JpcHREYXRhKTsKLQl2aXJ0dWFsIH5D
YWNoZWRTY3JpcHQoKTsKKyAgICAgICAgQ2FjaGVkU2NyaXB0KERvY0xvYWRlciosIGNvbnN0IFN0
cmluZyYgVVJMLCBLSU86OkNhY2hlQ29udHJvbCwgdGltZV90IGV4cGlyZURhdGUsIGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcmIGNoYXJzZXQpOworICAgICAgICBDYWNoZWRTY3JpcHQoY29uc3QgU3Ry
aW5nJiBVUkwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHNjcmlwdERhdGEpOworICAgICAgICB2
aXJ0dWFsIH5DYWNoZWRTY3JpcHQoKTsKIAotCWNvbnN0IFN0cmluZyYgc2NyaXB0KCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JpcHQ7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBzY3JpcHQoKSBjb25z
dCB7IHJldHVybiBtX3NjcmlwdDsgfQogCi0JdmlydHVhbCB2b2lkIHJlZihDYWNoZWRPYmplY3RD
bGllbnQqKTsKLQl2aXJ0dWFsIHZvaWQgZGVyZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCByZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkZXJlZihDYWNoZWRPYmplY3RDbGllbnQqKTsKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2hhcnNldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7Ci0JdmlydHVhbCB2b2lkIGRh
dGEoRGVwcmVjYXRlZEJ5dGVBcnJheSYsIGJvb2wgYXRFbmQpOwotCXZpcnR1YWwgdm9pZCBlcnJv
cigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBib29sIGF0RW5k
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGVycm9yKCk7CiAKICAgICAgICAgdmlydHVhbCBib29s
IHNjaGVkdWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgCiAgICAgICAgIGJv
b2wgZXJyb3JPY2N1cnJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JPY2N1cnJlZDsgfQogCi0J
dm9pZCBjaGVja05vdGlmeSgpOworICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7CiAKICAgICBw
cml2YXRlOgotCVN0cmluZyBtX3NjcmlwdDsKKyAgICAgICAgU3RyaW5nIG1fc2NyaXB0OwogICAg
ICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKICAgICAgICAgYm9vbCBtX2Vycm9yT2NjdXJy
ZWQ7CiAgICAgfTsKSW5kZXg6IGxvYWRlci9DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVy
L0NhY2hlLmNwcAkocmV2aXNpb24gMTM2MzcpCisrKyBsb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwxNCArMzQsMTIgQEAKICNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0
LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgIlRyYW5zZmVySm9i
LmgiCiAjaW5jbHVkZSAiVHJhbnNmZXJKb2IuaCIKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRp
b25zLmg+Ci0jaW5jbHVkZSAiSW1hZ2UuaCIKIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgaW50IGRlZmF1bHRDYWNoZVNpemUgPSA0MDk2
ICogMTAyNDsKSW5kZXg6IGxvYWRlci9DYWNoZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2Fk
ZXIvQ2FjaGVkT2JqZWN0LmgJKHJldmlzaW9uIDEzNjM3KQorKysgbG9hZGVyL0NhY2hlZE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlIDxraW8vZ2xvYmFsLmg+CiAjaW5jbHVkZSA8a3htbGNvcmUvSGFz
aFNldC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHN0ZGxpYi5o
PgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMTAzLDcgKzEwNCw3IEBACiAgICAgICAgIHZpcnR1
YWwgfkNhY2hlZE9iamVjdCgpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDaGFyc2V0KGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmKSB7fQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShEZXBy
ZWNhdGVkQnl0ZUFycmF5JiwgYm9vbCBhdEVuZCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGF0YShWZWN0b3I8Y2hhcj4mLCBib29sIGF0RW5kKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBlcnJvcigpID0gMDsKIAogICAgICAgICBjb25zdCBTdHJpbmcgJnVybCgpIGNvbnN0IHsgcmV0
dXJuIG1fdXJsOyB9CkluZGV4OiBsb2FkZXIvQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIv
Q2FjaGUuaAkocmV2aXNpb24gMTM2MzcpCisrKyBsb2FkZXIvQ2FjaGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsOCArNTEsNyBAQAogICAgICAqIFByb3ZpZGVzIGEgY2FjaGUvbG9hZGVyIGZvciBv
YmplY3RzIG5lZWRlZCBmb3IgZGlzcGxheWluZyB0aGUgaHRtbCBwYWdlLgogICAgICAqIEF0IHRo
ZSBtb21lbnQgdGhlc2UgYXJlIHN0eWxlc2hlZXRzLCBzY3JpcHRzIGFuZCBpbWFnZXMKICAgICAg
Ki8KLSAgICBjbGFzcyBDYWNoZQotICAgIHsKKyAgICBjbGFzcyBDYWNoZSB7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBEb2NMb2FkZXI7CiAgICAgcHVibGljOgogICAgICAgICAvKioKQEAgLTE4Nyw2
ICsxODYsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBpbnQgbV9jb3VudE9mTFJV
QW5kVW5jYWNoZWFibGVMaXN0czsKICAgICB9OwotfQogCi0jZW5kaWYKK30gLy9uYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gQ2FjaGVfaApJbmRleDogbG9hZGVyL0NhY2hlZFhTTFN0eWxl
U2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAko
cmV2aXNpb24gMTM2MzcpCisrKyBsb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJkZWNvZGVyLmgiCiAjaW5jbHVk
ZSAibG9hZGVyLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc0LDkgKzc1
LDkgQEAKICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZ05hbWUoY2hzLmxhdGluMSgpLCBE
ZWNvZGVyOjpFbmNvZGluZ0Zyb21IVFRQSGVhZGVyKTsKIH0KIAotdm9pZCBDYWNoZWRYU0xTdHls
ZVNoZWV0OjpkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9mKQordm9pZCBD
YWNoZWRYU0xTdHlsZVNoZWV0OjpkYXRhKFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCBhdEVuZCkK
IHsKLSAgICBpZiAoIWVvZikKKyAgICBpZiAoIWF0RW5kKQogICAgICAgICByZXR1cm47CiAKICAg
ICBzZXRTaXplKGRhdGEuc2l6ZSgpKTsKQEAgLTEwNSw0ICsxMDYsNCBAQAogCiAjZW5kaWYKIAot
fQorfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBsb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDEzNjM3KQorKysg
bG9hZGVyL0NhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTMgQEAK
ICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRPYmplY3RD
bGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgogI2luY2x1ZGUgIktXUUxvYWRlci5oIgotI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8
a3htbGNvcmUvVmVjdG9yLmg+CiAKKy8vIEZJWE1FOiByZW1vdmUgdGhpcyBpbmNsdWRlIHdoZW4g
SW1hZ2UgaXMgY2hhbmdlZCB0byB1c2UgVmVjdG9yPGNoYXI+CisjaW5jbHVkZSAiRGVwcmVjYXRl
ZEFycmF5LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FjaGVkSW1hZ2U6OkNhY2hlZElt
YWdlKERvY0xvYWRlciogZGwsIGNvbnN0IFN0cmluZyAmdXJsLCBLSU86OkNhY2hlQ29udHJvbCBf
Y2FjaGVQb2xpY3ksIHRpbWVfdCBfZXhwaXJlRGF0ZSkKQEAgLTExMiw3ICsxMTYsNyBAQAogICAg
IHNldFNpemUoMCk7CiB9CiAKLXZvaWQgQ2FjaGVkSW1hZ2U6OmRhdGEoRGVwcmVjYXRlZEJ5dGVB
cnJheSYgZGF0YSwgYm9vbCBlb2YpCit2b2lkIENhY2hlZEltYWdlOjpkYXRhKFZlY3RvcjxjaGFy
PiYgZGF0YSwgYm9vbCBhdEVuZCkKIHsKICAgICBib29sIHNpemVBdmFpbGFibGUgPSBmYWxzZTsK
ICAgICAKQEAgLTEyMCwzNSArMTI0LDM5IEBACiAKICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGlm
IGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgogICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgbV9pbWFn
ZSA9IG5ldyBJbWFnZSh0aGlzLAogI2lmIF9fQVBQTEVfXwotICAgICAgICAgICAgS1dRUmVzcG9u
c2VNSU1FVHlwZShtX3Jlc3BvbnNlKSA9PSAiYXBwbGljYXRpb24vcGRmIgorICAgICAgICBtX2lt
YWdlID0gbmV3IEltYWdlKHRoaXMsIEtXUVJlc3BvbnNlTUlNRVR5cGUobV9yZXNwb25zZSkgPT0g
ImFwcGxpY2F0aW9uL3BkZiIpOwogI2Vsc2UKLSAgICAgICAgICAgIGZhbHNlCisgICAgICAgIG1f
aW1hZ2UgPSBuZXcgSW1hZ2UodGhpcywgZmFsc2UpOwogI2VuZGlmCi0gICAgICAgICAgICApOwot
ICAgICAgICAKLSAgICAvLyBHaXZlIGFsbCB0aGUgZGF0YSBzbyBmYXIgdG8gdGhlIGltYWdlIG9i
amVjdCBmb3IgcHJvY2Vzc2luZy4KLSAgICAvLyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3cs
IGJ1dCB3aWxsIGRlbGF5IGRlY29kaW5nIHVudGlsIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6
ZSBvciBzcGVjaWZpYyBpbWFnZSBmcmFtZXMpLgotICAgIHNpemVBdmFpbGFibGUgPSBtX2ltYWdl
LT5zZXREYXRhKGRhdGEsIGVvZik7CisgICAgCisgICAgLy8gRklYTUU6IFRoaXMgY29weWluZyB0
byBhIERlcHJlY2F0ZWRCeXRlQXJyYXkgaXMgbmVlZGVkIHVudGlsIHRoZQorICAgIC8vIEltYWdl
IGNsYXNzZXMgc3dpdGNoIHRvIHVzZSBWZWN0b3I8Y2hhcj4gaW5zdGVhZCBvciBpdC4KKyAgICBE
ZXByZWNhdGVkQnl0ZUFycmF5IHRtcERhdGEoZGF0YS5zaXplKCkpOworICAgIG1lbWNweSh0bXBE
YXRhLmRhdGEoKSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKyAgICAKKyAgICAvLyBHaXZl
IGFsbCB0aGUgZGF0YSBzbyBmYXIgdG8gdGhlIGltYWdlIG9iamVjdCBmb3IgcHJvY2Vzc2luZy4g
SXQgCisgICAgLy8gd2lsbCBub3QgZG8gYW55dGhpbmcgbm93LCBidXQgd2lsbCBkZWxheSBkZWNv
ZGluZyB1bnRpbCBxdWVyaWVkCisgICAgLy8gZm9yIGluZm8gKGxpa2Ugc2l6ZSBvciBzcGVjaWZp
YyBpbWFnZSBmcmFtZXMpLgorICAgIHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5zZXREYXRhKHRt
cERhdGEsIGF0RW5kKTsKIAogICAgIC8vIEdvIGFoZWFkIGFuZCB0ZWxsIG91ciBvYnNlcnZlcnMg
dG8gdHJ5IHRvIGRyYXcgaWYgd2UgaGF2ZSBlaXRoZXIKICAgICAvLyByZWNlaXZlZCBhbGwgdGhl
IGRhdGEgb3IgdGhlIHNpemUgaXMga25vd24uICBFYWNoIGNodW5rIGZyb20gdGhlCiAgICAgLy8g
bmV0d29yayBjYXVzZXMgb2JzZXJ2ZXJzIHRvIHJlcGFpbnQsIHdoaWNoIHdpbGwgZm9yY2UgdGhh
dCBjaHVuawogICAgIC8vIHRvIGRlY29kZS4KLSAgICBpZiAoc2l6ZUF2YWlsYWJsZSB8fCBlb2Yp
IHsKKyAgICBpZiAoc2l6ZUF2YWlsYWJsZSB8fCBhdEVuZCkgewogICAgICAgICBpZiAobV9pbWFn
ZS0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JPY2N1cnJlZCA9IHRydWU7CiAgICAg
ICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKICAgICAgICAgICAgIENhY2hlOjpyZW1vdmUodGhp
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG5vdGlmeU9ic2VydmVycygpOwogCiAgICAgICAgIEludFNpemUgcyA9IGltYWdlU2l6ZSgpOwog
ICAgICAgICBzZXRTaXplKHMud2lkdGgoKSAqIHMuaGVpZ2h0KCkgKiAyKTsgLy8gVGhpcyBpcyBy
ZWFsbHkganVzdCBhIHJvdWdoIGVzdGltYXRlIG9mIHRoZSBkZWNvZGVkIHNpemUuCiAgICAgfQot
ICAgIGlmIChlb2YpIHsKKyAgICAKKyAgICBpZiAoYXRFbmQpIHsKICAgICAgICAgbV9sb2FkaW5n
ID0gZmFsc2U7CiAgICAgICAgIGNoZWNrTm90aWZ5KCk7CiAgICAgfQpJbmRleDogbG9hZGVyL0Nh
Y2hlZFhCTERvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvQ2FjaGVkWEJMRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAxMzYzNykKKysrIGxvYWRlci9DYWNoZWRYQkxEb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2lmbmRlZiBLSFRNTF9OT19YQkwK
IAogI2luY2x1ZGUgIkNhY2hlLmgiCi0jaW5jbHVkZSAibG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2Fj
aGVkT2JqZWN0Q2xpZW50V2Fsa2VyLmgiCiAjaW5jbHVkZSAiZGVjb2Rlci5oIgotCisjaW5jbHVk
ZSAibG9hZGVyLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc3LDkgKzc3
LDkgQEAKICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMubGF0aW4xKCksIERlY29k
ZXI6OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwogfQogCi12b2lkIENhY2hlZFhCTERvY3VtZW50
OjpkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9mICkKK3ZvaWQgQ2FjaGVk
WEJMRG9jdW1lbnQ6OmRhdGEoVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIGF0RW5kKQogewotICAg
IGlmICghZW9mKQorICAgIGlmICghYXRFbmQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBh
c3NlcnQoIW1fZG9jdW1lbnQpOwpAQCAtODgsOCArODgsOCBAQAogICAgIG1fZG9jdW1lbnQtPnJl
ZigpOwogICAgIG1fZG9jdW1lbnQtPm9wZW4oKTsKICAgICAKLSAgICBtX2RvY3VtZW50LT53cml0
ZShtX2RlY29kZXItPmRlY29kZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpKTsKICAgICBzZXRT
aXplKGRhdGEuc2l6ZSgpKTsKKyAgICBtX2RvY3VtZW50LT53cml0ZShtX2RlY29kZXItPmRlY29k
ZShkYXRhLmRhdGEoKSwgc2l6ZSgpKSk7CiAgICAgCiAgICAgbV9kb2N1bWVudC0+ZmluaXNoUGFy
c2luZygpOwogICAgIG1fZG9jdW1lbnQtPmNsb3NlKCk7CkluZGV4OiBsb2FkZXIvQ2FjaGVkWFNM
U3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJ
KHJldmlzaW9uIDEzNjM3KQorKysgbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0LmgiCiAj
aW5jbHVkZSA8a2lvL2dsb2JhbC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDcgKzM3LDggQEAKICAgICBjbGFzcyBEZWNvZGVy
OwogCiAjaWZkZWYgS0hUTUxfWFNMVAotICAgIGNsYXNzIENhY2hlZFhTTFN0eWxlU2hlZXQgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0IHsKKyAgICBjbGFzcyBDYWNoZWRYU0xTdHlsZVNoZWV0IDogcHVi
bGljIENhY2hlZE9iamVjdAorICAgIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENhY2hlZFhTTFN0
eWxlU2hlZXQoRG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiB1cmwsIEtJTzo6Q2FjaGVDb250cm9s
IGNhY2hlUG9saWN5LCB0aW1lX3QgZXhwaXJlRGF0ZSk7CiAKQEAgLTQ2LDcgKzQ4LDcgQEAKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCopOwogICAgICAgICAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNldENoYXJzZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShEZXByZWNhdGVkQnl0ZUFycmF5JiwgYm9vbCBl
b2YpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBib29sIGF0RW5k
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGVycm9yKCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgc2NoZWR1bGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC01Nyw5ICs1OSw4
IEBACiAgICAgICAgIFN0cmluZyBtX3NoZWV0OwogICAgICAgICBSZWZQdHI8RGVjb2Rlcj4gbV9k
ZWNvZGVyOwogICAgIH07Ci0KICNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZgorI2VuZGlmIC8vIEtIVE1MX0NhY2hlZFhTTFN0eWxlU2hlZXRfaApJbmRleDogbG9h
ZGVyL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0NhY2hlZEltYWdlLmgJKHJl
dmlzaW9uIDEzNjM3KQorKysgbG9hZGVyL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYxICsyOCw2MyBAQAogI2RlZmluZSBLSFRNTF9DYWNoZWRJbWFnZV9oCiAKICNpbmNsdWRl
ICJDYWNoZWRPYmplY3QuaCIKKyNpbmNsdWRlICJJbWFnZUFuaW1hdGlvbk9ic2VydmVyLmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPGtodG1sX3NldHRpbmdzLmg+Ci0jaW5jbHVk
ZSAiSW1hZ2VBbmltYXRpb25PYnNlcnZlci5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY0xvYWRlcjsKLWNsYXNzIENhY2hl
OwotY2xhc3MgSW1hZ2U7CisgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNzIENhY2hlOwor
ICAgIGNsYXNzIEltYWdlOwogCi1jbGFzcyBDYWNoZWRJbWFnZSA6IHB1YmxpYyBDYWNoZWRPYmpl
Y3QsIHB1YmxpYyBJbWFnZUFuaW1hdGlvbk9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICBDYWNoZWRJ
bWFnZShEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcgJnVybCwgS0lPOjpDYWNoZUNvbnRyb2wgY2Fj
aGVQb2xpY3ksIHRpbWVfdCBleHBpcmVEYXRlKTsKLSAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZSgp
OworICAgIGNsYXNzIENhY2hlZEltYWdlIDogcHVibGljIENhY2hlZE9iamVjdCwgcHVibGljIElt
YWdlQW5pbWF0aW9uT2JzZXJ2ZXIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRJ
bWFnZShEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcgJnVybCwgS0lPOjpDYWNoZUNvbnRyb2wgY2Fj
aGVQb2xpY3ksIHRpbWVfdCBleHBpcmVEYXRlKTsKKyAgICAgICAgdmlydHVhbCB+Q2FjaGVkSW1h
Z2UoKTsKIAotICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0OworICAgICAgICBJbWFnZSogaW1hZ2Uo
KSBjb25zdDsKIAotICAgIGJvb2wgY2FuUmVuZGVyKCkgY29uc3QgeyByZXR1cm4gIWlzRXJyb3JJ
bWFnZSgpICYmIGltYWdlU2l6ZSgpLndpZHRoKCkgPiAwICYmIGltYWdlU2l6ZSgpLmhlaWdodCgp
ID4gMDsgfQorICAgICAgICBib29sIGNhblJlbmRlcigpIGNvbnN0IHsgcmV0dXJuICFpc0Vycm9y
SW1hZ2UoKSAmJiBpbWFnZVNpemUoKS53aWR0aCgpID4gMCAmJiBpbWFnZVNpemUoKS5oZWlnaHQo
KSA+IDA7IH0KIAotICAgIEludFNpemUgaW1hZ2VTaXplKCkgY29uc3Q7ICAgIC8vIHJldHVybnMg
dGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGltYWdlCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoKSBj
b25zdDsgIC8vIFRoZSBzaXplIG9mIHRoZSBpbWFnZS4KKyAgICAgICAgSW50U2l6ZSBpbWFnZVNp
emUoKSBjb25zdDsgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGltYWdlLgor
ICAgICAgICBJbnRSZWN0IGltYWdlUmVjdCgpIGNvbnN0OyAgLy8gVGhlIHNpemUgb2YgdGhlIGlt
YWdlLgogCi0gICAgdmlydHVhbCB2b2lkIHJlZihDYWNoZWRPYmplY3RDbGllbnQqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGVyZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJl
ZihDYWNoZWRPYmplY3RDbGllbnQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkYXRhKERlcHJlY2F0
ZWRCeXRlQXJyYXkmLCBib29sIGF0RW5kKTsKLSAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRhdGEoVmVjdG9yPGNoYXI+JiwgYm9vbCBhdEVuZCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwogCi0gICAgYm9vbCBpc0Vycm9ySW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2Vycm9yT2NjdXJyZWQ7IH0KKyAgICAgICAgYm9vbCBpc0Vycm9ySW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2Vycm9yT2NjdXJyZWQ7IH0KIAotICAgIHZvaWQgc2V0U2hvd0Fu
aW1hdGlvbnMoS0hUTUxTZXR0aW5nczo6S0FuaW1hdGlvbkFkdmljZSk7CisgICAgICAgIHZvaWQg
c2V0U2hvd0FuaW1hdGlvbnMoS0hUTUxTZXR0aW5nczo6S0FuaW1hdGlvbkFkdmljZSk7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgICAg
IHZpcnR1YWwgYm9vbCBzY2hlZHVsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZv
aWQgY2hlY2tOb3RpZnkoKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOworICAgICAgICAK
KyAgICAgICAgdmlydHVhbCBib29sIGlzSW1hZ2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAK
LSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHNob3VsZFN0b3BBbmlt
YXRpb24oY29uc3QgSW1hZ2UqIGltYWdlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQWR2
YW5jZWQoY29uc3QgSW1hZ2UqIGltYWdlKTsKKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAg
ICAKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFN0b3BBbmltYXRpb24oY29uc3QgSW1hZ2Uq
IGltYWdlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IElt
YWdlKiBpbWFnZSk7CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBub3RpZnlPYnNlcnZlcnMoKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIG5vdGlmeU9ic2VydmVycygpOwogCi0gICAgSW1hZ2Uq
IG1faW1hZ2U7Ci0gICAgaW50IG1fZGF0YVNpemU7Ci0gICAgCi0gICAgYm9vbCBtX2Vycm9yT2Nj
dXJyZWQgOiAxOwotICAgIHVuc2lnbmVkIG1fc2hvd0FuaW1hdGlvbnMgOiAyOyAvLyBLSFRNTFNl
dHRpbmdzOjpLQW5pbWF0aW9uQWR2aWNlCisgICAgICAgIEltYWdlKiBtX2ltYWdlOworICAgICAg
ICBpbnQgbV9kYXRhU2l6ZTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9lcnJvck9jY3VycmVk
IDogMTsKKyAgICAgICAgdW5zaWduZWQgbV9zaG93QW5pbWF0aW9ucyA6IDI7IC8vIEtIVE1MU2V0
dGluZ3M6OktBbmltYXRpb25BZHZpY2UKIAotICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsKLX07Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZTsKKyAgICB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogbG9hZGVyL0NhY2hlZFhCTERvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gbG9hZGVyL0NhY2hlZFhCTERvY3VtZW50LmgJKHJldmlzaW9uIDEzNjM3KQorKysg
bG9hZGVyL0NhY2hlZFhCTERvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDgg
QEAKICNkZWZpbmUgS0hUTUxfQ2FjaGVkWEJMRG9jdW1lbnRfaAogCiAjaW5jbHVkZSAiQ2FjaGVk
T2JqZWN0LmgiCi0KICNpbmNsdWRlIDxraW8vZ2xvYmFsLmg+CisjaW5jbHVkZSA8a3htbGNvcmUv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CkBAIC01MSwyMSArNTEsMjEgQEAKICAg
ICAgICAgdmlydHVhbCB2b2lkIHJlZihDYWNoZWRPYmplY3RDbGllbnQgKmNvbnN1bWVyKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCAqY29uc3VtZXIpOwog
ICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldENoYXJzZXQoIGNvbnN0IERlcHJlY2F0
ZWRTdHJpbmcgJmNocyApOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShEZXByZWNhdGVkQnl0
ZUFycmF5JiwgYm9vbCBlb2YgKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldENoYXJzZXQoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyAmY2hzKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGEoVmVj
dG9yPGNoYXI+JiwgYm9vbCBhdEVuZCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwog
ICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOwogICAgICAgICAK
LXByb3RlY3RlZDoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFhCTDo6WEJMRG9jdW1lbnQqIG1f
ZG9jdW1lbnQ7CiAgICAgICAgIFJlZlB0cjxEZWNvZGVyPiBtX2RlY29kZXI7CiAgICAgfTsKIAog
I2VuZGlmCiAKLX07Cit9OyAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8v
IEtIVE1MX0NhY2hlZFhCTERvY3VtZW50X2gKSW5kZXg6IGxvYWRlci9DYWNoZWRDU1NTdHlsZVNo
ZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJl
dmlzaW9uIDEzNjM3KQorKysgbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCiAjaW5jbHVk
ZSAibG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8a3htbGNv
cmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODgsOSArODksOSBAQAog
ICAgIH0KIH0KIAotdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkYXRhKERlcHJlY2F0ZWRCeXRl
QXJyYXkmIGRhdGEsIGJvb2wgZW9mICkKK3ZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGF0YShW
ZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgYXRFbmQpCiB7Ci0gICAgaWYgKCFlb2YpCisgICAgaWYg
KCFhdEVuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0U2l6ZShkYXRhLnNpemUoKSk7Cklu
ZGV4OiBsb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvQ2FjaGVk
U2NyaXB0LmNwcAkocmV2aXNpb24gMTM2MzcpCisrKyBsb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdENs
aWVudFdhbGtlci5oIgogI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTg4LDEwICs4OSwxMSBAQAogICAgICAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CiB9
CiAKLXZvaWQgQ2FjaGVkU2NyaXB0OjpkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJv
b2wgZW9mICkKK3ZvaWQgQ2FjaGVkU2NyaXB0OjpkYXRhKFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9v
bCBhdEVuZCkKIHsKLSAgICBpZiAoIWVvZikKKyAgICBpZiAoIWF0RW5kKQogICAgICAgICByZXR1
cm47CisKICAgICBzZXRTaXplKGRhdGEuc2l6ZSgpKTsKICAgICBtX3NjcmlwdCA9IFN0cmluZyht
X2VuY29kaW5nLnRvVW5pY29kZShkYXRhLmRhdGEoKSwgc2l6ZSgpKSk7CiAgICAgbV9sb2FkaW5n
ID0gZmFsc2U7CkluZGV4OiBsb2FkZXIvUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9S
ZXF1ZXN0LmgJKHJldmlzaW9uIDEzNjM3KQorKysgbG9hZGVyL1JlcXVlc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMjIgKzI3LDE5IEBACiAjaWZuZGVmIEtIVE1MX1JlcXVlc3RfaAogI2RlZmlu
ZSBLSFRNTF9SZXF1ZXN0X2gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgorI2luY2x1
ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
Q2FjaGVkT2JqZWN0OwogICAgIGNsYXNzIERvY0xvYWRlcjsKIAotICAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBjbGFzcyBEZXByZWNhdGVkQXJyYXk7Ci0gICAgdHlwZWRlZiBEZXByZWNhdGVkQXJyYXk8
Y2hhcj4gRGVwcmVjYXRlZEJ5dGVBcnJheTsKLQogICAgIGNsYXNzIFJlcXVlc3QgewogICAgIHB1
YmxpYzoKICAgICAgICAgUmVxdWVzdChEb2NMb2FkZXIqLCBDYWNoZWRPYmplY3QqLCBib29sIGlu
Y3JlbWVudGFsKTsKICAgICAgICAgflJlcXVlc3QoKTsKIAogICAgICAgICBib29sIGluY3JlbWVu
dGFsOwotICAgICAgICBEZXByZWNhdGVkQnl0ZUFycmF5IG1fYnVmZmVyOworICAgICAgICBWZWN0
b3I8Y2hhcj4gbV9idWZmZXI7CiAgICAgICAgIENhY2hlZE9iamVjdCogb2JqZWN0OwogICAgICAg
ICBEb2NMb2FkZXIqIG1fZG9jTG9hZGVyOwogICAgICAgICBib29sIG11bHRpcGFydDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7488</attachid>
            <date>2006-04-03 12:40:40 -0700</date>
            <delta_ts>2006-04-25 15:55:06 -0700</delta_ts>
            <desc>patch 3</desc>
            <filename>vec-final.diff</filename>
            <type>text/plain</type>
            <size>84639</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwveHNsL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2h0bWwveHNsL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAxMzY1MykKKysr
IFdlYkNvcmUva2h0bWwveHNsL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwzMCArMjQsMjYgQEAKICNpZmRlZiBLSFRNTF9YU0xUCiAKICNpbmNsdWRlICJYU0xUUHJvY2Vz
c29yLmgiCi0jaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgInhtbF90b2tlbml6
ZXIuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgotI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCi0j
aW5jbHVkZSAibG9hZGVyLmgiCisKICNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkRPTUlt
cGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAibWFya3Vw
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
VG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCi0KKyNpbmNsdWRlICJUZXh0Lmgi
CiAjaW5jbHVkZSAiVHJhbnNmZXJKb2IuaCIKLQotI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxz
Lmg+CisjaW5jbHVkZSAiWFNMU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgImxvYWRlci5oIgorI2lu
Y2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgInhtbF90b2tlbml6ZXIuaCIKKyNpbmNsdWRlIDxr
eG1sY29yZS9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8bGlieHNsdC9kb2N1bWVudHMuaD4KICNpbmNsdWRlIDxsaWJ4c2x0L2ltcG9ydHMuaD4K
LQotI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHR1
dGlscy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDcgKzg5LDcgQEAgc3RhdGlj
IHhtbERvY1B0ciBkb2NMb2FkZXJGdW5jKGNvbnN0IHhtbAogICAgICAgICAgICAgeG1sR2VuZXJp
Y0Vycm9yRnVuYyBvbGRFcnJvckZ1bmMgPSB4bWxHZW5lcmljRXJyb3I7CiAgICAgICAgICAgICB2
b2lkICpvbGRFcnJvckNvbnRleHQgPSB4bWxHZW5lcmljRXJyb3JDb250ZXh0OwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGRhdGEgPSBLV1FTZXJ2ZVN5bmNo
cm9ub3VzUmVxdWVzdChDYWNoZTo6bG9hZGVyKCksIGdsb2JhbERvY0xvYWRlciwgam9iLCBmaW5h
bFVSTCwgaGVhZGVycyk7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YSA9IEtXUVNlcnZl
U3luY2hyb25vdXNSZXF1ZXN0KENhY2hlOjpsb2FkZXIoKSwgZ2xvYmFsRG9jTG9hZGVyLCBqb2Is
IGZpbmFsVVJMLCBoZWFkZXJzKTsKICAgICAgICAgCiAgICAgICAgICAgICB4bWxTZXRHZW5lcmlj
RXJyb3JGdW5jKDAsIHBhcnNlRXJyb3JGdW5jKTsKICAgICAgICAgICAgIC8vIFdlIGRvbid0IHNw
ZWNpZnkgYW4gZW5jb2RpbmcgaGVyZS4gTmVpdGhlciBHZWNrbyBub3IgV2luSUUgcmVzcGVjdHMK
SW5kZXg6IFdlYkNvcmUva2h0bWwvbWlzYy9mb3JtZGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva2h0bWwvbWlzYy9mb3JtZGF0YS5oCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUva2h0
bWwvbWlzYy9mb3JtZGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw5IEBACiAjaWZu
ZGVmIEtIVE1MX0ZPUk1fREFUQV9ICiAjZGVmaW5lIEtIVE1MX0ZPUk1fREFUQV9ICiAKLSNpbmNs
dWRlIDxEZXByZWNhdGVkU3RyaW5nLmg+CisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgog
I2luY2x1ZGUgPHF2YWx1ZWxpc3QuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAog
Y2xhc3MgRGVwcmVjYXRlZENTdHJpbmc7CiAKQEAgLTMxLDExICszMiwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgogICAgIEZvcm1EYXRh
RWxlbWVudCgpIDogbV90eXBlKGRhdGEpIHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBE
ZXByZWNhdGVkQnl0ZUFycmF5ICZhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkg
eyB9Ci0gICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJmZpbGVuYW1l
KSA6IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpIHsgfQorICAgIEZv
cm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlwZShkYXRhKSwg
bV9kYXRhKGFycmF5KSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgRGVwcmVjYXRlZFN0
cmluZyYgZmlsZW5hbWUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFt
ZSkgeyB9CiAKICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7Ci0gICAgRGVw
cmVjYXRlZEJ5dGVBcnJheSBtX2RhdGE7CisgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKICAgICBE
ZXByZWNhdGVkU3RyaW5nIG1fZmlsZW5hbWU7CiB9OwogCkBAIC00Nyw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwog
ICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZmaWxlbmFtZSk7CiAK
LSAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGZsYXR0ZW4oKSBjb25zdDsgLy8gb21pdHMgZmlsZXMK
KyAgICBWZWN0b3I8Y2hhcj4gZmxhdHRlbigpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogICAgIERl
cHJlY2F0ZWRTdHJpbmcgZmxhdHRlblRvU3RyaW5nKCkgY29uc3Q7IC8vIG9taXRzIGZpbGVzCiAK
ICAgICBzaXplX3QgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzLmNvdW50KCk7IH0K
SW5kZXg6IFdlYkNvcmUva2h0bWwvbWlzYy9mb3JtZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9raHRtbC9taXNjL2Zvcm1kYXRhLmNwcAkocmV2aXNpb24gMTM2NTMpCisrKyBXZWJDb3Jl
L2todG1sL21pc2MvZm9ybWRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZm9ybWRhdGEuaCIKIAorI2luY2x1ZGUg
PGt4bWxjb3JlL1ZlY3Rvci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZvcm1EYXRhOjpG
b3JtRGF0YSgpCkBAIC00OCwxOCArNTAsMTcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShj
b25zdCBEZXByZWNhdAogICAgIG1fZWxlbWVudHMuYXBwZW5kKGZpbGVuYW1lKTsKIH0KIAotRGVw
cmVjYXRlZEJ5dGVBcnJheSBGb3JtRGF0YTo6ZmxhdHRlbigpIGNvbnN0CitWZWN0b3I8Y2hhcj4g
Rm9ybURhdGE6OmZsYXR0ZW4oKSBjb25zdAogewogICAgIC8vIENvbmNhdGVuYXRlIGFsbCB0aGUg
Ynl0ZSBhcnJheXMsIGJ1dCBvbWl0IGFueSBmaWxlcy4KLSAgICBEZXByZWNhdGVkQnl0ZUFycmF5
IGE7CisgICAgVmVjdG9yPGNoYXI+IGE7CiAgICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxGb3JtRGF0YUVsZW1lbnQ+IGl0ID0gbV9lbGVtZW50cy5iZWdpbigpOyBpdCAh
PSBtX2VsZW1lbnRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVu
dCAmZSA9ICppdDsKKyAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gKml0OwogICAg
ICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAgICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IGEuc2l6ZSgpOwotICAgICAgICAgICAgaWYgKG9sZFNpemUgPT0g
MCkgeworICAgICAgICAgICAgaWYgKGEuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGEgPSBl
Lm1fZGF0YTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYS5kZXRhY2go
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0g
YS5zaXplKCk7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgp
OwogICAgICAgICAgICAgICAgIGEucmVzaXplKG9sZFNpemUgKyBkZWx0YSk7CiAgICAgICAgICAg
ICAgICAgbWVtY3B5KGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7
CkBAIC03MSw3ICs3Miw3IEBAIERlcHJlY2F0ZWRCeXRlQXJyYXkgRm9ybURhdGE6OmZsYXR0ZW4o
KSAKIAogRGVwcmVjYXRlZFN0cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29uc3QK
IHsKLSAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGJ5dGVzID0gZmxhdHRlbigpOworICAgIFZlY3Rv
cjxjaGFyPiBieXRlcyA9IGZsYXR0ZW4oKTsKICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMShieXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vSW1hZ2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L0ltYWdlU291cmNlLmgJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9JbWFn
ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIElNQUdF
X1NPVVJDRV9IXwogI2RlZmluZSBJTUFHRV9TT1VSQ0VfSF8KIAorI2luY2x1ZGUgIkRlcHJlY2F0
ZWRBcnJheS5oIgorCiAjaWYgX19BUFBMRV9fCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAjZWxzZQpAQCAtMzcsOSArMzksNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFNpemU7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBj
bGFzcyBEZXByZWNhdGVkQXJyYXk7Ci10eXBlZGVmIERlcHJlY2F0ZWRBcnJheTxjaGFyPiBEZXBy
ZWNhdGVkQnl0ZUFycmF5OwotCiAjaWYgX19BUFBMRV9fCiB0eXBlZGVmIENHSW1hZ2VTb3VyY2VS
ZWYgTmF0aXZlSW1hZ2VTb3VyY2VQdHI7CiB0eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQ
dHI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ludFBvaW50QXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL0ludFBvaW50QXJyYXkuaAkocmV2aXNpb24gMTM2NTMpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0ludFBvaW50QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzIg
KzI2LDI4IEBACiAjaWZuZGVmIElOVFBPSU5UQVJSQVlfSF8KICNkZWZpbmUgSU5UUE9JTlRBUlJB
WV9IXwogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZEFycmF5LmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIEludFJlY3Q7CiAKLWNsYXNzIEludFBvaW50QXJy
YXkgOiBwdWJsaWMgRGVwcmVjYXRlZEFycmF5PEludFBvaW50PiB7Ci1wdWJsaWM6Ci0gICAgSW50
UG9pbnRBcnJheSgpIHsgfQotICAgIEludFBvaW50QXJyYXkoaW50IHNpemUpIDogRGVwcmVjYXRl
ZEFycmF5PEludFBvaW50PihzaXplKSB7IH0KLSAgICBJbnRQb2ludEFycmF5KGludCwgY29uc3Qg
aW50ICopOwotICAgIAotICAgIEludFJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7Ci0gICAgCi0g
ICAgSW50UG9pbnRBcnJheSBjb3B5KCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBwb2ludCh1bnNp
Z25lZCwgaW50ICosIGludCAqKTsKLSAgICB2b2lkIHNldFBvaW50KHVuc2lnbmVkLCBpbnQsIGlu
dCk7Ci0gICAgYm9vbCBzZXRQb2ludHMoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCk7Ci0gICAgYm9vbCBzZXRQb2ludHMoaW50IG5Qb2ludHMsIGNvbnN0IGludCAq
cG9pbnRzKTsgICAgCi19OworICAgIGNsYXNzIEludFBvaW50QXJyYXkgOiBwdWJsaWMgVmVjdG9y
PEludFBvaW50PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEludFBvaW50QXJyYXkoKSB7
IH0KKyAgICAgICAgSW50UG9pbnRBcnJheShpbnQgc2l6ZSkgOiBWZWN0b3I8SW50UG9pbnQ+KHNp
emUpIHsgfQorICAgICAgICBJbnRQb2ludEFycmF5KGludCBuUG9pbnRzLCBjb25zdCBpbnQqIHBv
aW50cykgeyBzZXRQb2ludHMoblBvaW50cywgcG9pbnRzKTsgfQorICAgICAgICAKKyAgICAgICAg
SW50UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKKyAgICAgICAgICAgIAorICAgICAgICB2b2lk
IHBvaW50KHVuc2lnbmVkIGluZGV4LCBpbnQqIHgsIGludCogeSk7CisgICAgICAgIHZvaWQgc2V0
UG9pbnQodW5zaWduZWQgaW5kZXgsIGludCB4LCBpbnQgeSk7CisgICAgICAgIGJvb2wgc2V0UG9p
bnRzKGludCBuUG9pbnRzLCBjb25zdCBpbnQqIHBvaW50cyk7ICAgIAorICAgICAgICBib29sIHNl
dFBvaW50cyhpbnQgeDAsIGludCB5MCwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBp
bnQgeDMsIGludCB5Myk7CisgICAgfTsKIAotfQorfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLS8v
IEZJWE1FOiBSZW1vdmUgd2hlbiBldmVyeXRoaW5nIGlzIGluIHRoZSBXZWJDb3JlIG5hbWVzcGFj
ZS4KLXVzaW5nIFdlYkNvcmU6OkludFBvaW50QXJyYXk7Ci0KLSNlbmRpZgorI2VuZGlmIC8vIElO
VFBPSU5UQVJSQVlfSF8KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ltYWdlTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ltYWdlTWFjLm1tCShyZXZpc2lvbiAx
MzY1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ltYWdlTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkltYWdlLmgi
CiAKLSNpbXBvcnQgIkRlcHJlY2F0ZWRBcnJheS5oIgogI2ltcG9ydCAiRmxvYXRSZWN0LmgiCiAj
aW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJJbnRTaXplLmgiCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1RleHRFbmNvZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vVGV4dEVuY29kaW5nLmgJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0RW5jb2RpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIERlcHJlY2F0ZWRDU3RyaW5nIGZyb21Vbmljb2RlKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmLCBib29sIGFsbG93RW50aXRpZXMgPSBmYWxzZSkgY29uc3Q7CiAK
ICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0b1VuaWNvZGUoY29uc3QgY2hhciosIGludCBsZW5n
dGgpIGNvbnN0OwotICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHRvVW5pY29kZShjb25zdCBEZXBy
ZWNhdGVkQnl0ZUFycmF5JiwgaW50IGxlbmd0aCkgY29uc3Q7CiAKICAgICAgICAgVGV4dEVuY29k
aW5nSUQgZW5jb2RpbmdJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RpbmdJRDsgfQogICAgICAg
ICBUZXh0RW5jb2RpbmdGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vSW50UG9pbnRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9JbnRQb2ludEFycmF5LmNwcAkocmV2aXNpb24gMTM2NTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL0ludFBvaW50QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3NyAr
MjUsNzkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkludFBvaW50QXJyYXku
aCIKKworI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAotSW50UG9pbnRB
cnJheTo6SW50UG9pbnRBcnJheShpbnQgblBvaW50cywgY29uc3QgaW50ICpwb2ludHMpCi17Ci0g
ICAgc2V0UG9pbnRzKG5Qb2ludHMsIHBvaW50cyk7Ci19Cit1c2luZyBzdGQ6Om1heDsKK3VzaW5n
IHN0ZDo6bWluOwogCi1JbnRQb2ludEFycmF5IEludFBvaW50QXJyYXk6OmNvcHkoKSBjb25zdAot
ewotICAgIEludFBvaW50QXJyYXkgY29weTsKLSAgICBjb3B5LmR1cGxpY2F0ZSgqdGhpcyk7Ci0g
ICAgcmV0dXJuIGNvcHk7Ci19CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEludFJlY3QgSW50UG9p
bnRBcnJheTo6Ym91bmRpbmdSZWN0KCkgY29uc3QKIHsKLSAgICBpbnQgblBvaW50cyA9IGNvdW50
KCk7Ci0gICAgCi0gICAgaWYgKG5Qb2ludHMgPCAxKSByZXR1cm4gSW50UmVjdCgpOwotICAgIAot
ICAgIGludCBtaW5YID0gSU5UX01BWCwgbWF4WCA9IDA7Ci0gICAgaW50IG1pblkgPSBJTlRfTUFY
LCBtYXhZID0gMDsKKyAgICBpbnQgblBvaW50cyA9IHNpemUoKTsKICAgICAKKyAgICBpZiAoblBv
aW50cyA8IDEpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBpbnQgbWluWCA9IElO
VF9NQVg7CisgICAgaW50IG1heFggPSAwOworICAgIGludCBtaW5ZID0gSU5UX01BWDsKKyAgICBp
bnQgbWF4WSA9IDA7CisKICAgICB3aGlsZSAoblBvaW50cyA+IDApIHsKICAgICAgICAgSW50UG9p
bnQgcCA9IGF0KG5Qb2ludHMpOwotICAgICAgICBpbnQgeCA9IHAueCgpLCB5ID0gcC55KCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4OwotICAgICAgICBpZiAoeCA+
IG1heFgpIG1heFggPSB4OwotICAgICAgICBpZiAoeSA8IG1pblkpIG1pblkgPSB5OwotICAgICAg
ICBpZiAoeSA+IG1heFkpIG1heFkgPSB5OwotICAgICAgICAKKyAgICAgICAgaW50IHggPSBwLngo
KTsKKyAgICAgICAgaW50IHkgPSBwLnkoKTsKKworICAgICAgICBtaW5YID0gbWluKHgsIG1pblgp
OworICAgICAgICBtYXhYID0gbWF4KHgsIG1heFgpOworICAgICAgICBtaW5ZID0gbWluKHksIG1p
blkpOworICAgICAgICBtYXhZID0gbWF4KHksIG1heFkpOworCiAgICAgICAgIG5Qb2ludHMtLTsK
LSAgICB9CisgICAgIH0KICAgICAKICAgICByZXR1cm4gSW50UmVjdChtaW5YLCBtaW5ZLCBtYXhY
IC0gbWluWCArIDEsIG1heFkgLSBtaW5ZICsgMSk7CiB9CiAKLXZvaWQgSW50UG9pbnRBcnJheTo6
cG9pbnQodW5zaWduZWQgaW5kZXgsIGludCAqeCwgaW50ICp5KQordm9pZCBJbnRQb2ludEFycmF5
Ojpwb2ludCh1bnNpZ25lZCBpbmRleCwgaW50KiB4LCBpbnQqIHkpCiB7CiAgICAgSW50UG9pbnQg
cCA9IGF0KGluZGV4KTsKICAgICAqeCA9IHAueCgpOwogICAgICp5ID0gcC55KCk7CiB9CiAKLXZv
aWQgSW50UG9pbnRBcnJheTo6c2V0UG9pbnQoIHVuc2lnbmVkIGluZGV4LCBpbnQgeCwgaW50IHkg
KQordm9pZCBJbnRQb2ludEFycmF5OjpzZXRQb2ludCh1bnNpZ25lZCBpbmRleCwgaW50IHgsIGlu
dCB5KQogewotICAgIERlcHJlY2F0ZWRBcnJheTxJbnRQb2ludD46OmF0KCBpbmRleCApID0gSW50
UG9pbnQoIHgsIHkgKTsKKyAgICBhdChpbmRleCkgPSBJbnRQb2ludCh4LCB5KTsKIH0KIAotCi1i
b29sIEludFBvaW50QXJyYXk6OnNldFBvaW50cyggaW50IG5Qb2ludHMsIGNvbnN0IGludCAqcG9p
bnRzICkKLXsKLSAgICBpZiAoICFyZXNpemUoblBvaW50cykgKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaW50IGkgPSAwOwotICAgIHdoaWxlICggblBvaW50cy0tICkgeyAgICAgICAgICAg
ICAgICAgICAvLyBtYWtlIGFycmF5IG9mIHBvaW50cwotICAgICAgICBzZXRQb2ludCggaSsrLCAq
cG9pbnRzLCAqKHBvaW50cysxKSApOwotICAgICAgICBwb2ludHMrKzsKLSAgICAgICAgcG9pbnRz
Kys7Citib29sIEludFBvaW50QXJyYXk6OnNldFBvaW50cyhpbnQgblBvaW50cywgY29uc3QgaW50
KiBwb2ludHMpCisgeworICAgIGNsZWFyKCk7CisgICAgcmVzZXJ2ZUNhcGFjaXR5KG5Qb2ludHMp
OworICAgIHdoaWxlIChuUG9pbnRzLS0pIHsKKyAgICAgICAgYXBwZW5kKEludFBvaW50KCpwb2lu
dHMsICoocG9pbnRzICsgMSkpKTsKKyAgICAgICAgcG9pbnRzICs9IDI7CiAgICAgfQorCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW50UG9pbnRBcnJheTo6c2V0UG9pbnRzKCBpbnQgblBv
aW50cywgaW50IHgwLCBpbnQgeTAsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50
IHgzLCBpbnQgeTMpCitib29sIEludFBvaW50QXJyYXk6OnNldFBvaW50cyhpbnQgeDAsIGludCB5
MCwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgeDMsIGludCB5MykKIHsKLSAg
ICBpZiAoICFyZXNpemUoblBvaW50cykgKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2V0
UG9pbnQoIDAsIHgwLCB5MCApOwotICAgIHNldFBvaW50KCAxLCB4MSwgeTEgKTsKLSAgICBzZXRQ
b2ludCggMiwgeDIsIHkyICk7Ci0gICAgc2V0UG9pbnQoIDMsIHgzLCB5MyApOworICAgIGNsZWFy
KCk7CisgICAgcmVzZXJ2ZUNhcGFjaXR5KDQpOworICAgIGFwcGVuZChJbnRQb2ludCh4MCwgeTAp
KTsKKyAgICBhcHBlbmQoSW50UG9pbnQoeDEsIHkxKSk7CisgICAgYXBwZW5kKEludFBvaW50KHgy
LCB5MikpOworICAgIGFwcGVuZChJbnRQb2ludCh4MywgeTMpKTsKKwogICAgIHJldHVybiB0cnVl
OwogfQorCit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2cv
UGF0aENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NnL1BhdGhDRy5jcHAJ
KHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jZy9QYXRoQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIFBhdGg6OlBhdGgoY29uc3QgSW50UG9pbnRBcnJh
eSYgYXJyKQogewogICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFi
bGUoKTsKICAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCBhcnJbMF0ueCgpLCBhcnJbMF0u
eSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJyLmNvdW50KCk7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJyLnNpemUoKTsgKytpKQogICAgICAgICBDR1Bh
dGhBZGRMaW5lVG9Qb2ludChwYXRoLCAwLCBhcnJbaV0ueCgpLCBhcnJbaV0ueSgpKTsKICAgICBD
R1BhdGhDbG9zZVN1YnBhdGgocGF0aCk7CiAgICAgbV9wYXRoID0gcGF0aDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vVGV4dEVuY29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL1RleHRFbmNvZGluZy5jcHAJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0RW5jb2RpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNiArNTMsMTEgQEAgUUNo
YXIgVGV4dEVuY29kaW5nOjpiYWNrc2xhc2hBc0N1cnJlbmN5UwogICAgIHJldHVybiAnXFwnOwog
fQogCi1EZXByZWNhdGVkU3RyaW5nIFRleHRFbmNvZGluZzo6dG9Vbmljb2RlKGNvbnN0IGNoYXIg
KmNocywgaW50IGxlbikgY29uc3QKK0RlcHJlY2F0ZWRTdHJpbmcgVGV4dEVuY29kaW5nOjp0b1Vu
aWNvZGUoY29uc3QgY2hhciogY2hzLCBpbnQgbGVuKSBjb25zdAogewogICAgIHJldHVybiBTdHJl
YW1pbmdUZXh0RGVjb2RlcigqdGhpcykudG9Vbmljb2RlKGNocywgbGVuLCB0cnVlKTsKIH0KIAot
RGVwcmVjYXRlZFN0cmluZyBUZXh0RW5jb2Rpbmc6OnRvVW5pY29kZShjb25zdCBEZXByZWNhdGVk
Qnl0ZUFycmF5ICZxYmEsIGludCBsZW4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmVhbWluZ1Rl
eHREZWNvZGVyKCp0aGlzKS50b1VuaWNvZGUocWJhLCBsZW4sIHRydWUpOwotfQotCiAvLyBXZSdk
IGxpa2UgdG8gdXNlIElDVSBmb3IgdGhpcyBvbiBPUyBYIGFzIHdlbGwgZXZlbnR1YWxseSwgYnV0
IHdlIG5lZWQgdG8gbWFrZSBzdXJlCiAvLyBpdCBjb3ZlcnMgYWxsIHRoZSBlbmNvZGluZ3MgdGhh
dCB3ZSBuZWVkCiAjaWZuZGVmIF9fQVBQTEVfXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9EZXBy
ZWNhdGVkU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVk
U3RyaW5nLmgJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVk
U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNiBAQCBwdWJsaWM6CiAKICAg
ICBEZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgRGVwcmVjYXRlZFN0cmluZyhRQ2hhcik7Ci0gICAg
RGVwcmVjYXRlZFN0cmluZyhjb25zdCBEZXByZWNhdGVkQnl0ZUFycmF5ICYpOwogICAgIERlcHJl
Y2F0ZWRTdHJpbmcoY29uc3QgUUNoYXIgKiwgdW5zaWduZWQpOwogICAgIERlcHJlY2F0ZWRTdHJp
bmcoY29uc3QgY2hhciAqKTsKICAgICBEZXByZWNhdGVkU3RyaW5nKGNvbnN0IGNoYXIgKiwgaW50
IGxlbik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHAJKHJldmlzaW9u
IDEzNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQyLDE1ICs2NDIsNiBAQCBEZXByZWNhdGVkU3RyaW5nOjpEZXByZWNhdGVk
U3RyaW5nKFFDaGFyCiAgICAgfQogfQogCi1EZXByZWNhdGVkU3RyaW5nOjpEZXByZWNhdGVkU3Ry
aW5nKGNvbnN0IERlcHJlY2F0ZWRCeXRlQXJyYXkgJnFiYSkKLXsKLSAgICBkYXRhSGFuZGxlID0g
YWxsb2NhdGVIYW5kbGUoKTsKLQotICAgIC8vIENvcHkgZGF0YQotICAgICpkYXRhSGFuZGxlID0g
JmludGVybmFsRGF0YTsKLSAgICBpbnRlcm5hbERhdGEuaW5pdGlhbGl6ZShxYmEuZGF0YSgpLHFi
YS5zaXplKCkpOwotfQotCiBEZXByZWNhdGVkU3RyaW5nOjpEZXByZWNhdGVkU3RyaW5nKGNvbnN0
IFFDaGFyICp1bmljb2RlLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCF1bmljb2RlICYm
ICFsZW5ndGgpIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9waXhy
ZWdpb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2NhaXJvL3BpeG1hbi9zcmMv
cGl4cmVnaW9uLmMJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9w
aXhtYW4vc3JjL3BpeHJlZ2lvbi5jCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYyLDcgKzE0NjIsNyBA
QCBwaXhtYW5fcmVnaW9uX3ZhbGlkYXRlKGJhZHJlZywgcE92ZXJsYXApCiAgICAgfSBSZWdpb25J
bmZvOwogCiAJICAgICBpbnQJbnVtUmVjdHM7ICAgLyogT3JpZ2luYWwgbnVtUmVjdHMgZm9yIGJh
ZHJlZwkgICAgKi8KLQkgICAgIFJlZ2lvbkluZm8gKnJpOwkgICAgLyogRGVwcmVjYXRlZEFycmF5
IG9mIGN1cnJlbnQgcmVnaW9ucwkJICAgICovCisJICAgICBSZWdpb25JbmZvICpyaTsJICAgIC8q
IEFycmF5IG9mIGN1cnJlbnQgcmVnaW9ucwkJICAgICovCiAgICAgCSAgICAgaW50CW51bVJJOyAg
ICAgIC8qIE51bWJlciBvZiBlbnRyaWVzIHVzZWQgaW4gcmkJICAgICovCiAJICAgICBpbnQJc2l6
ZVJJOwkgICAgLyogTnVtYmVyIG9mIGVudHJpZXMgYXZhaWxhYmxlIGluIHJpICAgICovCiAJICAg
ICBpbnQJaTsJICAgIC8qIEluZGV4IGludG8gcmVjdHMJCQkgICAgKi8KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ltYWdlLmgJ
KHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpZm5kZWYgSU1BR0VfSF8KICNkZWZpbmUgSU1BR0Vf
SF8KIAotI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgotI2luY2x1ZGUgIkltYWdlU291cmNl
LmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZEFycmF5LmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2Uu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAK
ICNpZiBfX0FQUExFX18KICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24g
MTM2NTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIlRleHQuaCIKICNpbmNsdWRlICJyZW5kZXJfZm9ybS5oIgorI2luY2x1ZGUgPGt4bWxjb3Jl
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk2LDggKzk3LDggQEAgaW50
IEhUTUxPcHRpb25FbGVtZW50OjppbmRleCgpIGNvbnN0CiAgICAgLy8gd2Ugd29uJ3QgZm9yZ2V0
IHRvIHVwZGF0ZSBhIG1lbWJlciB2YXJpYWJsZSBpbiBzb21lIGNhc2VzLi4uCiAgICAgSFRNTFNl
bGVjdEVsZW1lbnQgKnNlbGVjdCA9IGdldFNlbGVjdCgpOwogICAgIGlmIChzZWxlY3QpIHsKLSAg
ICAgICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBzZWxlY3QtPmxpc3RJ
dGVtcygpOwotICAgICAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7CisgICAgICAgIFZlY3RvcjxI
VE1MRWxlbWVudCo+IGl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKKyAgICAgICAgaW50IGwg
PSBpdGVtcy5zaXplKCk7CiAgICAgICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgICAgIGZv
cihpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKG9wdGlvblRhZykpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cAkocmV2aXNpb24gMTM2NTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxl
Y3Rvci5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgInJlbmRlcl9m
b3JtLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtODMsNyArODQsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5k
ZXgoKSBjCiB7CiAgICAgLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IG9wdGlvbiBz
ZWxlY3RlZAogICAgIHVuc2lnbmVkIG8gPSAwOwotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxl
bWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRl
bXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlv
blRhZykpIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+
KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKQEAgLTk3LDcgKzk4LDcgQEAgaW50IEhUTUxTZWxlY3RF
bGVtZW50OjpzZWxlY3RlZEluZGV4KCkgYwogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0U2Vs
ZWN0ZWRJbmRleCggaW50ICBpbmRleCApCiB7CiAgICAgLy8gZGVzZWxlY3QgYWxsIG90aGVyIG9w
dGlvbnMgYW5kIHNlbGVjdCBvbmx5IHRoZSBuZXcgb25lCi0gICAgRGVwcmVjYXRlZEFycmF5PEhU
TUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQq
PiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGludCBsaXN0SW5kZXg7CiAgICAgZm9yIChsaXN0
SW5kZXggPSAwOyBsaXN0SW5kZXggPCBpbnQoaXRlbXMuc2l6ZSgpKTsgbGlzdEluZGV4KyspIHsK
ICAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKQpA
QCAtMTE0LDcgKzExNSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKCkgY29uc3QK
IHsKICAgICBpbnQgbGVuID0gMDsKICAgICB1bnNpZ25lZCBpOwotICAgIERlcHJlY2F0ZWRBcnJh
eTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVt
ZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFn
KSkKICAgICAgICAgICAgIGxlbisrOwpAQCAtMTM5LDcgKzE0MCw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnQ6OnJlbW92ZShpbnQgaW5kZXgKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoaW5kZXgpOwogCi0gICAgRGVwcmVj
YXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8
SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAw
IHx8IGluZGV4ID49IGludChpdGVtcy5zaXplKCkpKQogICAgICAgICByZXR1cm47IC8vICMjIyB3
aGF0IHNob3VsZCB3ZSBkbyA/IHJlbW92ZSB0aGUgbGFzdCBpdGVtPwogCkBAIC0xNTEsNyArMTUy
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVtb3ZlKGludCBpbmRleAogU3RyaW5nIEhU
TUxTZWxlY3RFbGVtZW50Ojp2YWx1ZSgpCiB7CiAgICAgdW5zaWduZWQgaTsKLSAgICBEZXByZWNh
dGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxI
VE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9w
dGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSktPnNl
bGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnQqPihpdGVtc1tpXSktPnZhbHVlKCk7CkBAIC0xNjUsNyArMTY2LDcgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgUwogICAgICAgICByZXR1cm47CiAgICAgLy8gZmlu
ZCB0aGUgb3B0aW9uIHdpdGggdmFsdWUoKSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGFyYW1ldGVyCiAg
ICAgLy8gYW5kIG1ha2UgaXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgotICAgIERlcHJlY2F0ZWRB
cnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxF
bGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaXRlbXMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1l
KG9wdGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSkt
PnZhbHVlKCkgPT0gdmFsdWUpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25F
bGVtZW50Kj4oaXRlbXNbaV0pLT5zZXRTZWxlY3RlZCh0cnVlKTsKQEAgLTE3NSw5ICsxNzYsOSBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTCiAKIERlcHJlY2F0ZWRT
dHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6OnN0YXRlKCkKIHsKLSAgICBEZXByZWNhdGVkQXJyYXk8
SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVu
dCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAKLSAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7Cisg
ICAgaW50IGwgPSBpdGVtcy5zaXplKCk7CiAgICAgRGVwcmVjYXRlZFN0cmluZyBzdGF0ZTsKICAg
ICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQogICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9j
YWxOYW1lKG9wdGlvblRhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCkBAIC0yMDEsOSArMjAyLDkgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6cmVzdG9yZVN0YXRlKERlcAogICAgICAgICAvL3N0YXRlWzBdID0gJ1gnOwogICAgIH0K
IAotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKIAotICAgIGlu
dCBsID0gaXRlbXMuY291bnQoKTsKKyAgICBpbnQgbCA9IGl0ZW1zLnNpemUoKTsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGw7IGkrKykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2Fs
TmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogb2UgPSBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ldKTsKQEAgLTI4MSw3ICsyODIs
NyBAQCBSZW5kZXJPYmplY3QgKkhUTUxTZWxlY3RFbGVtZW50OjpjcmVhdGVSCiBib29sIEhUTUxT
ZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGxpc3QsIGJvb2wpCiB7
CiAgICAgYm9vbCBzdWNjZXNzZnVsID0gZmFsc2U7Ci0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxF
bGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBp
dGVtcyA9IGxpc3RJdGVtcygpOwogCiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBp
IDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKQEAgLTMxMiw3ICszMTMsNyBAQCBib29sIEhUTUxTZWxl
Y3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGCiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6b3B0
aW9uVG9MaXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAogewotICAgIERlcHJlY2F0ZWRB
cnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxF
bGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpZiAob3B0aW9uSW5kZXggPCAwIHx8
IG9wdGlvbkluZGV4ID49IGludChpdGVtcy5zaXplKCkpKQogICAgICAgICByZXR1cm4gLTE7CiAK
QEAgLTMzMCw3ICszMzEsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlzdElu
ZGV4CiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdFRvT3B0aW9uSW5kZXgoaW50IGxpc3RJ
bmRleCkgY29uc3QKIHsKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9
IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1z
KCk7CiAgICAgaWYgKGxpc3RJbmRleCA8IDAgfHwgbGlzdEluZGV4ID49IGludChpdGVtcy5zaXpl
KCkpIHx8CiAgICAgICAgICFpdGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFn
KSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzUxLDMyICszNTIsMjggQEAgUGFzc1JlZlB0cjxI
VE1MT3B0aW9uc0NvbGxlY3Rpb24+IEhUTUxTZQogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVj
YWxjTGlzdEl0ZW1zKCkKIHsKICAgICBOb2RlKiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwotICAg
IG1fbGlzdEl0ZW1zLnJlc2l6ZSgwKTsKKyAgICBtX2xpc3RJdGVtcy5jbGVhcigpOwogICAgIEhU
TUxPcHRpb25FbGVtZW50KiBmb3VuZFNlbGVjdGVkID0gMDsKLSAgICB3aGlsZShjdXJyZW50KSB7
CisgICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUo
b3B0Z3JvdXBUYWcpICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgLy8g
IyMjIHdoYXQgaWYgb3B0Z3JvdXAgY29udGFpbnMganVzdCBjb21tZW50cz8gZG9uJ3Qgd2FudCBv
bmUgb2Ygbm8gb3B0aW9ucyBpbiBpdC4uLgotICAgICAgICAgICAgbV9saXN0SXRlbXMucmVzaXpl
KG1fbGlzdEl0ZW1zLnNpemUoKSsxKTsKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zW21fbGlzdEl0
ZW1zLnNpemUoKS0xXSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oY3VycmVudCk7CisgICAg
ICAgICAgICBtX2xpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihjdXJy
ZW50KSk7CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwogICAg
ICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsKLSAg
ICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5zaXplKCkrMSk7Ci0gICAg
ICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0gPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KGN1cnJlbnQpOworICAgICAgICAgICAgbV9saXN0SXRlbXMuYXBwZW5kKHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oY3VycmVudCkpOwogICAgICAgICAgICAgaWYgKCFmb3Vu
ZFNlbGVjdGVkICYmICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxKSB7CiAgICAgICAgICAgICAg
ICAgZm91bmRTZWxlY3RlZCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oY3VycmVu
dCk7CiAgICAgICAgICAgICAgICAgZm91bmRTZWxlY3RlZC0+bV9zZWxlY3RlZCA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChmb3VuZFNlbGVjdGVkICYmICFtX211
bHRpcGxlICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oY3VycmVudCktPnNlbGVj
dGVkKCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTZWxlY3RlZCAmJiAhbV9tdWx0
aXBsZSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGN1cnJlbnQpLT5zZWxlY3Rl
ZCgpKSB7CiAgICAgICAgICAgICAgICAgZm91bmRTZWxlY3RlZC0+bV9zZWxlY3RlZCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGZvdW5kU2VsZWN0ZWQgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlm
IChjdXJyZW50LT5oYXNUYWdOYW1lKGhyVGFnKSkgewotICAgICAgICAgICAgbV9saXN0SXRlbXMu
cmVzaXplKG1fbGlzdEl0ZW1zLnNpemUoKSsxKTsKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zW21f
bGlzdEl0ZW1zLnNpemUoKS0xXSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oY3VycmVudCk7
Ci0gICAgICAgIH0KLSAgICAgICAgTm9kZSAqcGFyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgp
OworICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShoclRhZykpCisgICAgICAgICAgICBt
X2xpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihjdXJyZW50KSk7CisK
KyAgICAgICAgTm9kZSogcGFyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpOwogICAgICAgICBj
dXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKCFjdXJyZW50KSB7
CiAgICAgICAgICAgICBpZiAocGFyZW50ICE9IHRoaXMpCkBAIC00MDMsNyArNDAwLDcgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0UmVjYWxjTGlzdEl0ZQogCiB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50OjpyZXNldCgpCiB7Ci0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRl
bXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUo
KTsgaSsrKSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykp
IHsKQEAgLTQyMSw3ICs0MTgsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojpub3RpZnlPcHRp
b25TZWxlCiB7CiAgICAgaWYgKHNlbGVjdGVkICYmICFtX211bHRpcGxlKSB7CiAgICAgICAgIC8v
IGRlc2VsZWN0IGFsbCBvdGhlciBvcHRpb25zCi0gICAgICAgIERlcHJlY2F0ZWRBcnJheTxIVE1M
RWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgICAgIFZlY3RvcjxIVE1MRWxlbWVu
dCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgaWYgKGl0ZW1z
W2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5oCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIEhUTUxfSFRNTFNlbGVj
dEVsZW1lbnRJbXBsX0gKICNkZWZpbmUgSFRNTF9IVE1MU2VsZWN0RWxlbWVudEltcGxfSAogCi0j
aW5jbHVkZSAiRGVwcmVjYXRlZEFycmF5LmgiCiAjaW5jbHVkZSAiSFRNTEdlbmVyaWNGb3JtRWxl
bWVudC5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTk1LDcgKzk1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRSZWNhbGNMaXN0
SXRlbXMoKTsKIAotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcygp
IGNvbnN0IHsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBsaXN0SXRlbXMoKSBjb25zdAorICAg
IHsKICAgICAgICAgaWYgKG1fcmVjYWxjTGlzdEl0ZW1zKQogICAgICAgICAgICAgY29uc3RfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudCo+KHRoaXMpLT5yZWNhbGNMaXN0SXRlbXMoKTsKICAgICAgICAg
cmV0dXJuIG1fbGlzdEl0ZW1zOwpAQCAtMTEzLDcgKzExNCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdm9pZCByZWNhbGNMaXN0SXRlbXMoKTsKIAotICAgIG11dGFibGUgRGVwcmVjYXRlZEFy
cmF5PEhUTUxFbGVtZW50Kj4gbV9saXN0SXRlbXM7CisgICAgbXV0YWJsZSBWZWN0b3I8SFRNTEVs
ZW1lbnQqPiBtX2xpc3RJdGVtczsKICAgICBpbnQgbV9taW53aWR0aDsKICAgICBpbnQgbV9zaXpl
OwogICAgIGJvb2wgbV9tdWx0aXBsZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gMTM2NTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NzEsNDggKzk3MSw0NiBAQCB2b2lkIFJlbmRlck9iamVjdDo6
ZHJhd0JvcmRlcihHcmFwaGljc0NvCiAgICAgICAgICAgICBjID0gYy5kYXJrKCk7CiAgICAgICAg
IC8qIG5vYnJlYWs7ICovCiAgICAgY2FzZSBTT0xJRDoKLSAgICAgICAgSW50UG9pbnRBcnJheSBx
dWFkKDQpOworICAgIHsKICAgICAgICAgcC0+c2V0UGVuKFBlbjo6Tm9QZW4pOwogICAgICAgICBw
LT5zZXRCcnVzaChjKTsKICAgICAgICAgQVNTRVJUKHgyID49IHgxKTsKICAgICAgICAgQVNTRVJU
KHkyID49IHkxKTsKLSAgICAgICAgaWYgKGFkamJ3MT09MCAmJiBhZGpidzIgPT0gMCkgewotICAg
ICAgICAgICAgcC0+ZHJhd1JlY3QoSW50UmVjdCh4MSx5MSx4Mi14MSx5Mi15MSkpOworICAgICAg
ICBpZiAoIWFkamJ3MSAmJiAhYWRqYncyKSB7CisgICAgICAgICAgICBwLT5kcmF3UmVjdChJbnRS
ZWN0KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIHN3aXRjaChzKSB7CisgICAgICAgIEludFBvaW50QXJyYXkgcXVhZCg0
KTsKKyAgICAgICAgc3dpdGNoIChzKSB7CiAgICAgICAgIGNhc2UgQlNUb3A6Ci0gICAgICAgICAg
ICBxdWFkLnNldFBvaW50cyg0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEra01heCgt
YWRqYncxLDApLCB5MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxK2tNYXgoIGFkamJ3
MSwwKSwgeTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB4Mi1rTWF4KCBhZGpidzIsMCks
IHkyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIta01heCgtYWRqYncyLDApLCB5MSk7
CisgICAgICAgICAgICBxdWFkLnNldFBvaW50cyh4MSArIGtNYXgoLWFkamJ3MSwgMCksIHkxLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEgKyBrTWF4KCBhZGpidzEsIDApLCB5MiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHgyIC0ga01heCggYWRqYncyLCAwKSwgeTIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4MiAtIGtNYXgoLWFkamJ3MiwgMCksIHkxKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJTQm90dG9tOgotICAgICAgICAgICAgcXVhZC5z
ZXRQb2ludHMoNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxK2tNYXgoIGFkamJ3MSww
KSwgeTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB4MStrTWF4KC1hZGpidzEsMCksIHky
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIta01heCgtYWRqYncyLDApLCB5MiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHgyLWtNYXgoIGFkamJ3MiwwKSwgeTEpOworICAgICAg
ICAgICAgcXVhZC5zZXRQb2ludHMoeDEgKyBrTWF4KCBhZGpidzEsIDApLCB5MSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHgxICsga01heCgtYWRqYncxLCAwKSwgeTIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4MiAtIGtNYXgoLWFkamJ3MiwgMCksIHkyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeDIgLSBrTWF4KCBhZGpidzIsIDApLCB5MSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBCU0xlZnQ6Ci0gICAgICAgICAgcXVhZC5zZXRQb2ludHMoNCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICB4MSwgeTEra01heCgtYWRqYncxLDApLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIHgxLCB5Mi1rTWF4KC1hZGpidzIsMCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgeDIsIHkyLWtNYXgoIGFkamJ3MiwwKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICB4MiwgeTEra01heCggYWRqYncxLDApKTsKKyAgICAgICAgICAgIHF1YWQuc2V0UG9pbnRz
KHgxLCB5MSArIGtNYXgoLWFkamJ3MSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4
MSwgeTIgLSBrTWF4KC1hZGpidzIsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIs
IHkyIC0ga01heCggYWRqYncyLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLCB5
MSArIGtNYXgoIGFkamJ3MSwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QlNSaWdodDoKLSAgICAgICAgICBxdWFkLnNldFBvaW50cyg0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHgxLCB5MStrTWF4KCBhZGpidzEsMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
eDEsIHkyLWtNYXgoIGFkamJ3MiwwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB4MiwgeTIt
a01heCgtYWRqYncyLDApLAotICAgICAgICAgICAgICAgICAgICAgICAgIHgyLCB5MStrTWF4KC1h
ZGpidzEsMCkpOworICAgICAgICAgICAgcXVhZC5zZXRQb2ludHMoeDEsIHkxICsga01heCggYWRq
YncxLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxLCB5MiAtIGtNYXgoIGFkamJ3
MiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiwgeTIgLSBrTWF4KC1hZGpidzIs
IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsIHkxICsga01heCgtYWRqYncxLCAw
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwLT5kcmF3Q29udmV4
UG9seWdvbihxdWFkKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIH0KIH0KIAogYm9vbCBS
ZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVySW1hZ2UoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQgX3R4
LCBpbnQgX3R5LCBpbnQgdywgaW50IGgsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL2JpZGkuY3BwCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL2JpZGku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNyArMjMsMTcgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgImJpZGkuaCIKKwogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSA8a3htbGNvcmUvQWx3YXlzSW5saW5lLmg+CiAjaW5jbHVkZSAiUmVu
ZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlckNh
bnZhcy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisjaW5jbHVkZSA8a3htbGNvcmUvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVkZSA8a3ht
bGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsNyArOTQsNyBA
QCBzdGF0aWMgYm9vbCBzQnVpbGRpbmdDb21wYWN0UnVuczsKIC8vIE1pZHBvaW50IGdsb2JhbHMu
ICBUaGUgZ29hbCBpcyBub3QgdG8gZG8gYW55IGFsbG9jYXRpb24gd2hlbiBkZWFsaW5nIHdpdGgK
IC8vIHRoZXNlIG1pZHBvaW50cywgc28gd2UganVzdCBrZWVwIGFuIGFycmF5IGFyb3VuZCBhbmQg
bmV2ZXIgY2xlYXIgaXQuICBXZSB0cmFjawogLy8gdGhlIG51bWJlciBvZiBpdGVtcyBhbmQgcG9z
aXRpb24gdXNpbmcgdGhlIHR3byBvdGhlciB2YXJpYWJsZXMuCi1zdGF0aWMgRGVwcmVjYXRlZEFy
cmF5PEJpZGlJdGVyYXRvcj4gKnNtaWRwb2ludHM7CitzdGF0aWMgVmVjdG9yPEJpZGlJdGVyYXRv
cj4qIHNtaWRwb2ludHM7CiBzdGF0aWMgdW5zaWduZWQgc051bU1pZHBvaW50czsKIHN0YXRpYyB1
bnNpZ25lZCBzQ3Vyck1pZHBvaW50Owogc3RhdGljIGJvb2wgYmV0d2Vlbk1pZHBvaW50czsKQEAg
LTU0NSw3ICs1NDUsNyBAQCBzdGF0aWMgdm9pZCBhZGRNaWRwb2ludChjb25zdCBCaWRpSXRlcmF0
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzbWlkcG9pbnRzLT5zaXplKCkgPD0gc051bU1p
ZHBvaW50cykKLSAgICAgICAgc21pZHBvaW50cy0+cmVzaXplKHNOdW1NaWRwb2ludHMrMTApOwor
ICAgICAgICBzbWlkcG9pbnRzLT5yZXNpemUoc051bU1pZHBvaW50cyArIDEwKTsKIAogICAgIEJp
ZGlJdGVyYXRvciogbWlkcG9pbnRzID0gc21pZHBvaW50cy0+ZGF0YSgpOwogICAgIG1pZHBvaW50
c1tzTnVtTWlkcG9pbnRzKytdID0gbWlkcG9pbnQ7CkBAIC0xNTQ3LDcgKzE1NDcsNyBAQCBJbnRS
ZWN0IFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlCiAgICAgICAgIGJpZGkuZGlyID0g
UUNoYXI6OkRpck9OOwogICAgICAgICAKICAgICAgICAgaWYgKCFzbWlkcG9pbnRzKQotICAgICAg
ICAgICAgc21pZHBvaW50cyA9IG5ldyBEZXByZWNhdGVkQXJyYXk8QmlkaUl0ZXJhdG9yPjsKKyAg
ICAgICAgICAgIHNtaWRwb2ludHMgPSBuZXcgVmVjdG9yPEJpZGlJdGVyYXRvcj4oKTsKICAgICAg
ICAgCiAgICAgICAgIHNOdW1NaWRwb2ludHMgPSAwOwogICAgICAgICBzQ3Vyck1pZHBvaW50ID0g
MDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNp
b24gMTM2NTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBACiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxxdGV4dHN0cmVhbS5oPgorI2luY2x1ZGUgPGt4bWxjb3Jl
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzNCwxMCArMTM2LDExIEBA
IGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCAKIHsKICAgICBpbnQgblJv
d3MgPSBncmlkUm93czsKICAgICBpZiAobnVtUm93cyA+IG5Sb3dzKSB7Ci0gICAgICAgIGlmIChu
dW1Sb3dzID4gc3RhdGljX2Nhc3Q8aW50PihncmlkLnNpemUoKSkpCi0gICAgICAgICAgICBpZiAo
IWdyaWQucmVzaXplKG51bVJvd3MqMisxKSkKKyAgICAgICAgaWYgKG51bVJvd3MgPiBzdGF0aWNf
Y2FzdDxpbnQ+KGdyaWQuc2l6ZSgpKSkgeworICAgICAgICAgICAgaWYgKG51bVJvd3MgPiBzdGF0
aWNfY2FzdDxpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2Yo
aW50KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgICAgICAgICBncmlk
LnJlc2l6ZShudW1Sb3dzKTsKKyAgICAgICAgfQogICAgICAgICBncmlkUm93cyA9IG51bVJvd3M7
CiAgICAgICAgIGludCBuQ29scyA9IHRhYmxlKCktPm51bUVmZkNvbHMoKTsKICAgICAgICAgQ2Vs
bFN0cnVjdCBlbXB0eUNlbGxTdHJ1Y3Q7CkBAIC0xNTUsMTEgKzE1OCwxMSBAQCBib29sIFJlbmRl
clRhYmxlU2VjdGlvbjo6ZW5zdXJlUm93cyhpbnQgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCAqY2VsbCwgUmVu
ZGVyT2JqZWN0KiByb3cpCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2VsbChSZW5kZXJU
YWJsZUNlbGwqIGNlbGwsIFJlbmRlck9iamVjdCogcm93KQogewogICAgIGludCByU3BhbiA9IGNl
bGwtPnJvd1NwYW4oKTsKICAgICBpbnQgY1NwYW4gPSBjZWxsLT5jb2xTcGFuKCk7Ci0gICAgRGVw
cmVjYXRlZEFycmF5PFJlbmRlclRhYmxlOjpDb2x1bW5TdHJ1Y3Q+ICZjb2x1bW5zID0gdGFibGUo
KS0+Y29sdW1uczsKKyAgICBWZWN0b3I8UmVuZGVyVGFibGU6OkNvbHVtblN0cnVjdD4mIGNvbHVt
bnMgPSB0YWJsZSgpLT5jb2x1bW5zOwogICAgIGludCBuQ29scyA9IGNvbHVtbnMuc2l6ZSgpOwog
CiAgICAgLy8gIyMjIG1vemlsbGEgc3RpbGwgc2VlbXMgdG8gZG8gdGhlIG9sZCBIVE1MIHdheSwg
ZXZlbiBmb3Igc3RyaWN0IERURApAQCAtMjM5LDcgKzI0Miw3IEBAIHZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjphZGRDZWxsKFJlbmRlclQKIAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNldENl
bGxXaWR0aHMoKQogewotICAgIERlcHJlY2F0ZWRBcnJheTxpbnQ+ICZjb2x1bW5Qb3MgPSB0YWJs
ZSgpLT5jb2x1bW5Qb3M7CisgICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNv
bHVtblBvczsKIAogICAgIGludCByb3dzID0gZ3JpZFJvd3M7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByb3dzOyBpKyspIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24g
MTM2NTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFJlbmRlclRhYmxlX0gKIAogI2luY2x1ZGUgIlJl
bmRlckJsb2NrLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMTE1LDIzICsxMTYsMjUgQEAgcHVibGljOgogICAgICAgICB1bnNpZ25l
ZCB3aWR0aDsgLy8gdGhlIGNhbGN1bGF0ZWQgcG9zaXRpb24gb2YgdGhlIGNvbHVtbgogICAgIH07
CiAKLSAgICBEZXByZWNhdGVkQXJyYXk8aW50PiBjb2x1bW5Qb3M7Ci0gICAgRGVwcmVjYXRlZEFy
cmF5PENvbHVtblN0cnVjdD4gY29sdW1uczsKKyAgICBWZWN0b3I8aW50PiBjb2x1bW5Qb3M7Cisg
ICAgVmVjdG9yPENvbHVtblN0cnVjdD4gY29sdW1uczsKIAogICAgIHZvaWQgc3BsaXRDb2x1bW4o
aW50IHBvcywgaW50IGZpcnN0U3Bhbik7CiAgICAgdm9pZCBhcHBlbmRDb2x1bW4oaW50IHNwYW4p
OwogICAgIGludCBudW1FZmZDb2xzKCkgY29uc3QgeyByZXR1cm4gY29sdW1ucy5zaXplKCk7IH0K
ICAgICBpbnQgc3Bhbk9mRWZmQ29sKGludCBlZmZDb2wpIGNvbnN0IHsgcmV0dXJuIGNvbHVtbnNb
ZWZmQ29sXS5zcGFuOyB9Ci0gICAgaW50IGNvbFRvRWZmQ29sKGludCBjb2wpIGNvbnN0IHsKLSAg
ICAgICAgaW50IGMgPSAwOworICAgIAorICAgIGludCBjb2xUb0VmZkNvbChpbnQgY29sKSBjb25z
dAorICAgIHsKICAgICAgICAgaW50IGkgPSAwOwotICAgICAgICB3aGlsZSAoYyA8IGNvbCAmJiBp
IDwgKGludCljb2x1bW5zLnNpemUoKSkgeworICAgICAgICBpbnQgZWZmQ29sID0gbnVtRWZmQ29s
cygpOworICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbCAmJiBpIDwgZWZmQ29sOyArK2kp
CiAgICAgICAgICAgICBjICs9IGNvbHVtbnNbaV0uc3BhbjsKLSAgICAgICAgICAgIGkrKzsKLSAg
ICAgICAgfQogICAgICAgICByZXR1cm4gaTsKICAgICB9Ci0gICAgaW50IGVmZkNvbFRvQ29sKGlu
dCBlZmZDb2wpIGNvbnN0IHsKKyAgICAKKyAgICBpbnQgZWZmQ29sVG9Db2woaW50IGVmZkNvbCkg
Y29uc3QKKyAgICB7CiAgICAgICAgIGludCBjID0gMDsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBlZmZDb2w7IGkrKykKICAgICAgICAgICAgIGMgKz0gY29sdW1uc1tpXS5zcGFuOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDEzNjUzKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlckNvbnRhaW5lci5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNjcsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJlbmRl
clRhYmxlQ2VsbCAqY2VsbDsKICAgICAgICAgYm9vbCBpbkNvbFNwYW47IC8vIHRydWUgZm9yIGNv
bHVtbnMgYWZ0ZXIgdGhlIGZpcnN0IGluIGEgY29sc3BhbgogICAgIH07Ci0gICAgdHlwZWRlZiBE
ZXByZWNhdGVkQXJyYXk8Q2VsbFN0cnVjdD4gUm93OworICAgIHR5cGVkZWYgVmVjdG9yPENlbGxT
dHJ1Y3Q+IFJvdzsKICAgICBzdHJ1Y3QgUm93U3RydWN0IHsKICAgICAgICAgUm93KiByb3c7CiAg
ICAgICAgIFJlbmRlck9iamVjdCogcm93UmVuZGVyZXI7CkBAIC0xMDIsOSArMTAzLDkgQEAgcHVi
bGljOgogCiAgICAgLy8gdGhpcyBnZXRzIGEgY2VsbCBncmlkIGRhdGEgc3RydWN0dXJlLiBjaGFu
Z2luZyB0aGUgbnVtYmVyIG9mCiAgICAgLy8gY29sdW1ucyBpcyBkb25lIGJ5IHRoZSB0YWJsZQot
ICAgIERlcHJlY2F0ZWRBcnJheTxSb3dTdHJ1Y3Q+IGdyaWQ7CisgICAgVmVjdG9yPFJvd1N0cnVj
dD4gZ3JpZDsKICAgICBpbnQgZ3JpZFJvd3M7Ci0gICAgRGVwcmVjYXRlZEFycmF5PGludD4gcm93
UG9zOworICAgIFZlY3RvcjxpbnQ+IHJvd1BvczsKIAogICAgIC8vIHRoZSBjdXJyZW50IGluc2Vy
dGlvbiBwb3NpdGlvbgogICAgIGludCBjQ29sOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvdGFi
bGVfbGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy90YWJsZV9sYXlv
dXQuY3BwCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3RhYmxlX2xheW91
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEwICsyMiwxMiBAQAogICovCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAidGFibGVfbGF5b3V0LmgiCisKICNpbmNsdWRlICJSZW5kZXJU
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFi
bGVTZWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCisjaW5jbHVkZSA8a3ht
bGNvcmUvVmVjdG9yLmg+CiAKIC8qCiAgIFRoZSB0ZXh0IGJlbG93IGlzIGZyb20gdGhlIENTUyAy
LjEgc3BlY3MuCkBAIC0yNTEsOSArMjUzLDcgQEAgdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpsYXlv
dXQoKQogI2VuZGlmCiAKIAotICAgIERlcHJlY2F0ZWRBcnJheTxpbnQ+IGNhbGNXaWR0aDsKLSAg
ICBjYWxjV2lkdGgucmVzaXplKCBuRWZmQ29scyApOwotICAgIGNhbGNXaWR0aC5maWxsKCAtMSAp
OworICAgIFZlY3RvcjxpbnQ+IGNhbGNXaWR0aChuRWZmQ29scywgLTEpOwogCiAgICAgLy8gYXNz
aWduICBwZXJjZW50IHdpZHRoCiAgICAgaWYgKCBhdmFpbGFibGUgPiAwICkgewpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkocmV2aXNpb24gMTM2NTMpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9yZW5kZXJfZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNp
bmNsdWRlICJLV1FTbGlkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNp
bmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4K
ICNpbmNsdWRlIDxxY29tYm9ib3guaD4KICNpbmNsdWRlIDxxdGV4dGVkaXQuaD4KIApAQCAtNjM1
LDcgKzYzNiw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAg
aWYgKCBtX29wdGlvbnNDaGFuZ2VkICkgewogICAgICAgICBpZiAoZWxlbWVudCgpLT5tX3JlY2Fs
Y0xpc3RJdGVtcykKICAgICAgICAgICAgIGVsZW1lbnQoKS0+cmVjYWxjTGlzdEl0ZW1zKCk7Ci0g
ICAgICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQo
KS0+bGlzdEl0ZW1zKCk7CisgICAgICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9
IGVsZW1lbnQoKS0+bGlzdEl0ZW1zKCk7CiAgICAgICAgIGludCBsaXN0SW5kZXg7CiAKICAgICAg
ICAgaWYgKG1fdXNlTGlzdEJveCkKQEAgLTc3NSw3ICs3NzYsNyBAQCB2b2lkIFJlbmRlclNlbGVj
dDo6bGF5b3V0KCApCiAgICAgUmVuZGVyRm9ybUVsZW1lbnQ6OmxheW91dCgpOwogCiAgICAgLy8g
YW5kIG5vdyBkaXNhYmxlIHRoZSB3aWRnZXQgaW4gY2FzZSB0aGVyZSBpcyBubyA8b3B0aW9uPiBn
aXZlbgotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1l
bnQoKS0+bGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0g
ZWxlbWVudCgpLT5saXN0SXRlbXMoKTsKIAogICAgIGJvb2wgZm91bmRPcHRpb24gPSBmYWxzZTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdEl0ZW1zLnNpemUoKSAmJiAhZm91bmRP
cHRpb247IGkrKykKQEAgLTc5Myw3ICs3OTQsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dmFsdWVD
aGFuZ2VkKFdpZGdldCopCiAKICAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxRQ29tYm9Cb3gq
PihtX3dpZGdldCktPmN1cnJlbnRJdGVtKCk7CiAKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVs
ZW1lbnQqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOworICAgIFZlY3RvcjxI
VE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlzdEl0ZW1zKCk7CiAgICAgaWYg
KGluZGV4ID49IDAgJiYgaW5kZXggPCAoaW50KWxpc3RJdGVtcy5zaXplKCkpIHsKICAgICAgICAg
Ym9vbCBmb3VuZCA9IGxpc3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKTsKICAg
ICAgICAgaWYgKCFmb3VuZCkgewpAQCAtODQwLDkgKzg0MSw5IEBAIHZvaWQgUmVuZGVyU2VsZWN0
OjpzZWxlY3Rpb25DaGFuZ2VkKFdpZGcKIAogICAgIC8vIGRvbid0IHVzZSBsaXN0SXRlbXMoKSBo
ZXJlIGFzIHdlIGhhdmUgdG8gYXZvaWQgcmVjYWxjdWxhdGlvbnMgLSBjaGFuZ2luZyB0aGUKICAg
ICAvLyBvcHRpb24gbGlzdCB3aWxsIG1ha2UgdXNlIHVwZGF0ZSBvcHRpb25zIG5vdCBpbiB0aGUg
d2F5IHRoZSB1c2VyIGV4cGVjdHMgdGhlbQotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVu
dCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bV9saXN0SXRlbXM7CisgICAgVmVjdG9yPEhUTUxF
bGVtZW50Kj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5tX2xpc3RJdGVtczsKICAgICBpbnQgaiA9
IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5jb3VudCgpOyBpKysp
IHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdEl0ZW1zLnNpemUoKTsgaSsrKSB7
CiAgICAgICAgIC8vIGRvbid0IHVzZSBzZXRTZWxlY3RlZCgpIGhlcmUgYmVjYXVzZSBpdCB3aWxs
IGNhdXNlIHVzIHRvIGJlIGNhbGxlZAogICAgICAgICAvLyBhZ2FpbiB3aXRoIHVwZGF0ZVNlbGVj
dGlvbi4KICAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKQpA
QCAtODcwLDcgKzg3MSw3IEBAIFFMaXN0Qm94KiBSZW5kZXJTZWxlY3Q6OmNyZWF0ZUxpc3RCb3go
KQogCiB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9uKCkKIHsKLSAgICBEZXByZWNh
dGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygp
OworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlzdEl0
ZW1zKCk7CiAgICAgaW50IGk7CiAgICAgaWYgKG1fdXNlTGlzdEJveCkgewogICAgICAgICAvLyBp
ZiBtdWx0aS1zZWxlY3QsIHdlIHNlbGVjdCBvbmx5IHRoZSBuZXcgc2VsZWN0ZWQgaW5kZXgKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3RhYmxlX2xheW91dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL3RhYmxlX2xheW91dC5oCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL3RhYmxlX2xheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBA
CiAjaWZuZGVmIFRBQkxFX0xBWU9VVF9ICiAjZGVmaW5lIFRBQkxFX0xBWU9VVF9ICiAKLSNpbmNs
dWRlICJEZXByZWNhdGVkQXJyYXkuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKKyNpbmNsdWRlIDxr
eG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MCw3ICs2MCw3
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBpbnQgY2FsY1dpZHRoQXJyYXkoIGludCB0YWJs
ZVdpZHRoICk7CiAKLSAgICBEZXByZWNhdGVkQXJyYXk8TGVuZ3RoPiB3aWR0aDsKKyAgICBWZWN0
b3I8TGVuZ3RoPiB3aWR0aDsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMCw4ICsx
MDAsOCBAQCBwcm90ZWN0ZWQ6CiAJaW50IGNhbGNXaWR0aDsKICAgICB9OwogCi0gICAgRGVwcmVj
YXRlZEFycmF5PExheW91dD4gbGF5b3V0U3RydWN0OwotICAgIERlcHJlY2F0ZWRBcnJheTxSZW5k
ZXJUYWJsZUNlbGwgKj5zcGFuQ2VsbHM7CisgICAgVmVjdG9yPExheW91dD4gbGF5b3V0U3RydWN0
OworICAgIFZlY3RvcjxSZW5kZXJUYWJsZUNlbGwqPiBzcGFuQ2VsbHM7CiAgICAgYm9vbCBoYXNQ
ZXJjZW50IDogMTsKICAgICBtdXRhYmxlIGJvb2wgcGVyY2VudGFnZXNEaXJ0eSA6IDE7CiAgICAg
bXV0YWJsZSBib29sIGVmZldpZHRoRGlydHkgOiAxOwpJbmRleDogV2ViQ29yZS9kb20veG1sX3Rv
a2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20veG1sX3Rva2VuaXplci5jcHAJ
KHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9kb20veG1sX3Rva2VuaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBzdGF0aWMgV2ViQ29yZTo6RG9jTG9hZGVyICpn
bG9iYWxEb2NMb2FkCiAKIGNsYXNzIE9mZnNldEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgT2Zmc2V0
QnVmZmVyKGNvbnN0IERlcHJlY2F0ZWRCeXRlQXJyYXkgJmIpIDogbV9idWZmZXIoYiksIG1fY3Vy
cmVudE9mZnNldCgwKSB7IH0KKyAgICBPZmZzZXRCdWZmZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBi
KSA6IG1fYnVmZmVyKGIpLCBtX2N1cnJlbnRPZmZzZXQoMCkgeyB9CiAgICAgCiAgICAgaW50IHJl
YWRPdXRCeXRlcyhjaGFyICpvdXRwdXRCdWZmZXIsIHVuc2lnbmVkIGFza2VkVG9SZWFkKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVzTGVmdCA9IG1fYnVmZmVyLnNpemUoKSAtIG1fY3VycmVudE9m
ZnNldDsKQEAgLTE2MCw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IERlcHJlY2F0ZWRCeXRlQXJyYXkgbV9idWZmZXI7CisgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVy
OwogICAgIHVuc2lnbmVkIG1fY3VycmVudE9mZnNldDsKIH07CiAKQEAgLTE4Miw3ICsxODIsNyBA
QCBzdGF0aWMgdm9pZCogb3BlbkZ1bmMoY29uc3QgY2hhciogdXJpKQogICAgIEtVUkwgZmluYWxV
Ukw7CiAgICAgVHJhbnNmZXJKb2IqIGpvYiA9IG5ldyBUcmFuc2ZlckpvYigwLCAiR0VUIiwgdXJp
KTsKICAgICBEZXByZWNhdGVkU3RyaW5nIGhlYWRlcnM7Ci0gICAgRGVwcmVjYXRlZEJ5dGVBcnJh
eSBkYXRhID0gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoQ2FjaGU6OmxvYWRlcigpLCBnbG9i
YWxEb2NMb2FkZXIsIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOworICAgIFZlY3RvcjxjaGFyPiBk
YXRhID0gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoQ2FjaGU6OmxvYWRlcigpLCBnbG9iYWxE
b2NMb2FkZXIsIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOwogICAgIAogICAgIHJldHVybiBuZXcg
T2Zmc2V0QnVmZmVyKGRhdGEpOwogfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMzIgQEAKKzIwMDYtMDQtMDMgIFNhbSBX
ZWluaWcgIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworCQktIEZpeCBmb3IgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDM5CisJCSAgUmVtb3ZlIHVzZSBvZiBEZXByZWNhdGVkQXJyYXkg
aW4gZmF2b3Igb2YgbmV3IFZlY3RvciBjbGFzcworCisJCVRoaXMgcmVtb3ZlcyBtb3N0IG9mIHRo
ZSB1c2VzIG9mIERlcHJlY2F0ZWRBcnJheSBhbmQgCisJCURlcHJlY2F0ZWRCeXRlQXJyYXksIHdp
dGggdGhlIGV4Y2VwdGlvbiBvZiBJbWFnZSBhbmQgaXRzIAorCQlyZWxhdGVkIGNsYXNzZXMgYW5k
IHRoZSBkZXByZWNhdGVkIGNsYXNzIERlcHJlY2F0ZWRDU3RyaW5nLgorCisJCU5vIHRlc3QgY2Fz
ZXMgYWRkZWQgYmVjYXVzZSB0aGVyZSBpcyBubyBjaGFuZ2UgaW4KKwkJZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaFJ1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpz
b3J0TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Omlu
aXRGb3JTdHlsZVJlc29sdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
Y3JlYXRlU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmNyZWF0ZVBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgICogY3NzL2Nzc3N0eWxl
c2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNo
ZWRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWRE
ZWNsYXJhdGlvbik6CisgICAgICAgICogZG9tL3htbF90b2tlbml6ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2V0QnVmZmVyOjpPZmZzZXRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlbkZ1bmMpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmluZGV4KToKKyAgICAgICAgKiBodG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpzZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpz
ZXRTZWxlY3RlZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojps
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpzdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6cmVzdG9yZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6
b3B0aW9uVG9MaXN0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
Omxpc3RUb09wdGlvbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50
OjpyZWNhbGNMaXN0SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6
OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojpub3RpZnlPcHRp
b25TZWxlY3RlZCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RJdGVtcyk6CisgICAgICAgICoga2h0
bWwvbWlzYy9mb3JtZGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZmxhdHRl
bik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKToKKyAgICAg
ICAgKiBraHRtbC9taXNjL2Zvcm1kYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVs
ZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAgICAgICoga2h0bWwveHNsL1hTTFRQcm9jZXNz
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyk6CisgICAgICAgICoga3dx
L0tXUUxvYWRlci5oOgorICAgICAgICAqIGt3cS9LV1FMb2FkZXIubW06CisgICAgICAgIChLV1FT
ZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdCk6CisgICAgICAgICoga3dxL0tXUVRleHRTdHJlYW0uY3Bw
OgorICAgICAgICAoUVRleHRTdHJlYW06Om9wZXJhdG9yPDwpOgorICAgICAgICAqIGt3cS9LV1FU
ZXh0U3RyZWFtLmg6CisgICAgICAgICogbG9hZGVyL0NhY2hlLmNwcDoKKyAgICAgICAgKiBsb2Fk
ZXIvQ2FjaGUuaDoKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpkYXRhKToKKyAgICAgICAgKiBs
b2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGF0YSk6CisgICAgICAgICog
bG9hZGVyL0NhY2hlZEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6Y2Fu
UmVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjppc0Vycm9ySW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNjaGVkdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZEltYWdlOjppc0ltYWdlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkT2JqZWN0
Lmg6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRTY3JpcHQ6OmRhdGEpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRTY3JpcHQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6c2NyaXB0KToKKyAgICAgICAgKiBsb2Fk
ZXIvQ2FjaGVkWEJMRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkWEJMRG9j
dW1lbnQ6OmRhdGEpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRYQkxEb2N1bWVudC5oOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFhTTFN0eWxlU2hlZXQ6OmRhdGEpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRYU0xT
dHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVyL1JlcXVlc3QuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9EZXByZWNhdGVk
U3RyaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL0ludFBvaW50QXJyYXkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnRBcnJheTo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkludFBvaW50QXJyYXk6OnBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBv
aW50QXJyYXk6OnNldFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50QXJyYXk6OnNl
dFBvaW50cyk6CisgICAgICAgICogcGxhdGZvcm0vSW50UG9pbnRBcnJheS5oOgorICAgICAgICAo
V2ViQ29yZTo6SW50UG9pbnRBcnJheTo6SW50UG9pbnRBcnJheSk6CisgICAgICAgICogcGxhdGZv
cm0vVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFbmNvZGluZzo6dG9V
bmljb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0RW5jb2RpbmcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL3BpeHJlZ2lvbi5jOgorICAgICAgICAqIHBsYXRmb3Jt
L2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpQYXRoKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXIpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGFibGU6OmNvbFRvRWZmQ29sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpl
ZmZDb2xUb0NvbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmVuc3VyZVJvd3MpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDZWxsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c2V0Q2VsbFdpZHRocyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9iaWRpLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1pZHBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL3Jl
bmRlcl9mb3JtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlbGVjdDo6dXBkYXRlRnJv
bUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VsZWN0OjpsYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2VsZWN0Ojp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VsZWN0OjpzZWxlY3Rpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvdGFi
bGVfbGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmxheW91
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3RhYmxlX2xheW91dC5oOgorICAgICAgICAqIHhtbC94
bWxodHRwcmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cHJvY2Vzc1N5bmNMb2FkUmVz
dWx0cyk6CisgICAgICAgICogeG1sL3htbGh0dHByZXF1ZXN0Lmg6CisKIDIwMDYtMDQtMDMgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBueXBvcC5jb20+CiAKICAgICAgICAgRml4ZWQgYSBjb21t
ZW50IChmb3Jnb3QgdG8gc2F2ZSB0aGUgZmlsZSBiZWZvcmUgdGhlIHByZXZpb3VzIGNvbW1pdCku
CkluZGV4OiBXZWJDb3JlL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTM2NTMpCisrKyBXZWJD
b3JlL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0
OSw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdCgpCiB7CiAgICAgZWxlbWVudCA9IDA7
CiAgICAgc2V0dGluZ3MgPSAwOwotICAgIG1fbWF0Y2hlZFJ1bGVDb3VudCA9IG1fbWF0Y2hlZERl
Y2xDb3VudCA9IG1fdG1wUnVsZUNvdW50ID0gMDsKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigp
OworICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6c2V0RW5jb2RlZFVSTChjb25zdCBLVVJMJiB1cmwpCkBAIC0zMTYsNDggKzMxNywzNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmxvYWREZWZhdWx0U3R5bGUoCiAgICAgZGVmYXVsdFF1aXJr
c1N0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChxdWlya3NTaGVldCwgInNjcmVlbiIpOwogfQogCi12
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWRSdWxlKENTU1J1bGVEYXRhKiBydWxlKQot
ewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5zaXplKCkgPD0gbV9tYXRjaGVkUnVsZUNvdW50KQot
ICAgICAgICBtX21hdGNoZWRSdWxlcy5yZXNpemUoMiptX21hdGNoZWRSdWxlcy5zaXplKCkrMSk7
Ci0gICAgbV9tYXRjaGVkUnVsZXNbbV9tYXRjaGVkUnVsZUNvdW50KytdID0gcnVsZTsKLX0KLQot
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGRlY2wpCi17Ci0gICAgaWYgKG1fbWF0Y2hlZERlY2xzLnNpemUoKSA8
PSBtX21hdGNoZWREZWNsQ291bnQpCi0gICAgICAgIG1fbWF0Y2hlZERlY2xzLnJlc2l6ZSgyKm1f
bWF0Y2hlZERlY2xzLnNpemUoKSsxKTsKLSAgICBtX21hdGNoZWREZWNsc1ttX21hdGNoZWREZWNs
Q291bnQrK10gPSBkZWNsOwotfQotCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMo
Q1NTUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCkKIHsKLSAgICBtX21hdGNoZWRSdWxlQ291bnQgPSAwOwotICAgIGlmICghcnVsZXMgfHwgIWVs
ZW1lbnQpIHJldHVybjsKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgaWYgKCFy
dWxlcyB8fCAhZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFdlIG5lZWQg
dG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQgZXZlcnl0aGluZyBl
bHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBidWZmZXIuCiAgICAg
aWYgKGVsZW1lbnQtPmhhc0lEKCkpCiAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5n
ZXRJRFJ1bGVzKGVsZW1lbnQtPmdldElEQXR0cmlidXRlKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgpOwotICAgIGlmIChlbGVtZW50LT5oYXNDbGFzcygpKQorICAgIGlm
IChlbGVtZW50LT5oYXNDbGFzcygpKSB7CiAgICAgICAgIGZvciAoY29uc3QgQXRvbWljU3RyaW5n
TGlzdCogc2luZ2xlQ2xhc3MgPSBlbGVtZW50LT5nZXRDbGFzc0xpc3QoKTsgc2luZ2xlQ2xhc3M7
IHNpbmdsZUNsYXNzID0gc2luZ2xlQ2xhc3MtPm5leHQoKSkKICAgICAgICAgICAgIG1hdGNoUnVs
ZXNGb3JMaXN0KHJ1bGVzLT5nZXRDbGFzc1J1bGVzKHNpbmdsZUNsYXNzLT5zdHJpbmcoKS5pbXBs
KCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7Ci0gICAgbWF0Y2hSdWxlc0Zvckxp
c3QocnVsZXMtPmdldFRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOworICAgIH0K
KyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxO
YW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIG1hdGNo
UnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCk7CiAgICAgCiAgICAgLy8gSWYgd2UgZGlkbid0IG1hdGNoIGFueSBydWxl
cywgd2UncmUgZG9uZS4KLSAgICBpZiAobV9tYXRjaGVkUnVsZUNvdW50ID09IDApIHJldHVybjsK
KyAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgLy8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgc29ydE1hdGNoZWRS
dWxlcygwLCBtX21hdGNoZWRSdWxlQ291bnQpOworICAgIHNvcnRNYXRjaGVkUnVsZXMoMCwgbV9t
YXRjaGVkUnVsZXMuc2l6ZSgpKTsKICAgICAKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBv
ZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qgb2YgZGVjbHMuCiAgICAgaWYgKCFtX2Nv
bGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0
Y2hlZFJ1bGVDb3VudDsgaSsrKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9t
YXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRp
b24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVDb3VudDsg
aSsrKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5z
aXplKCk7IGkrKykgewogICAgICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQogICAgICAgICAgICAg
ICAgIG1fcnVsZUxpc3QgPSBuZXcgQ1NTUnVsZUxpc3QoKTsKICAgICAgICAgICAgIG1fcnVsZUxp
c3QtPmFwcGVuZChtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpKTsKQEAgLTM2NSwxMCArMzU1LDEx
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhDU1NSdWwKICAgICB9CiB9CiAK
LXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFMaXN0
KiBydWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KQordm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXRjaFJ1bGVzRm9yTGlzdChDU1NSdWxlRGF0YUxpc3QqIHJ1bGVzLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpCiB7Ci0gICAgaWYgKCFydWxlcykgcmV0dXJuOwor
ICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoQ1NTUnVsZURhdGEq
IGQgPSBydWxlcy0+Zmlyc3QoKTsgZDsgZCA9IGQtPm5leHQoKSkgewogICAgICAgICBDU1NTdHls
ZVJ1bGUqIHJ1bGUgPSBkLT5ydWxlKCk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lID0gZWxlbWVudC0+bG9jYWxOYW1lKCk7CkBAIC0zNzYsNyArMzY3LDggQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgICAgICBpZiAoKGxvY2FsTmFt
ZSA9PSBzZWxlY3RvckxvY2FsTmFtZSB8fCBzZWxlY3RvckxvY2FsTmFtZSA9PSBzdGFyQXRvbSkg
JiYgY2hlY2tTZWxlY3RvcihkLT5zZWxlY3RvcigpLCBlbGVtZW50KSkgewogICAgICAgICAgICAg
Ly8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0
LgogICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wgPSBydWxlLT5k
ZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgoKSkg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZiB3
ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQgaWYgCiAgICAgICAg
ICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRvLWVsZW1lbnQuCkBAIC0zODYs
OCArMzc4LDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAg
ICAgICAgICAgICAgIHN0eWxlLT5zZXRIYXNQc2V1ZG9TdHlsZShkeW5hbWljUHNldWRvKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91ciBmaXJzdC9s
YXN0IHJ1bGUgaW5kaWNlcyBpbiB0aGUgbWF0Y2hlZCBydWxlcyBhcnJheS4KLSAgICAgICAgICAg
ICAgICBsYXN0UnVsZUluZGV4ID0gbV9tYXRjaGVkRGVjbENvdW50ICsgbV9tYXRjaGVkUnVsZUNv
dW50OwotICAgICAgICAgICAgICAgIGlmIChmaXJzdFJ1bGVJbmRleCA9PSAtMSkgZmlyc3RSdWxl
SW5kZXggPSBtX21hdGNoZWREZWNsQ291bnQgKyBtX21hdGNoZWRSdWxlQ291bnQ7CisgICAgICAg
ICAgICAgICAgbGFzdFJ1bGVJbmRleCA9IG1fbWF0Y2hlZERlY2xzLnNpemUoKSArIG1fbWF0Y2hl
ZFJ1bGVzLnNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RSdWxlSW5kZXggPT0gLTEp
CisgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4ID0gbGFzdFJ1bGVJbmRleDsKIAog
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBy
dWxlcy4KICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUnVsZShkKTsKQEAgLTQwOSw2OSArNDAy
LDY2IEBAIGJvb2wgb3BlcmF0b3IgPD0oQ1NTUnVsZURhdGEmIHIxLCBDU1NSdWwKIAogdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpCiB7Ci0gICAgaWYgKHN0YXJ0ID49IGVuZCB8fCAoZW5kLXN0YXJ0ID09IDEpKQorICAg
IGlmIChzdGFydCA+PSBlbmQgfHwgKGVuZCAtIHN0YXJ0ID09IDEpKQogICAgICAgICByZXR1cm47
IC8vIFNhbml0eSBjaGVjay4KLSAgICAKKwogICAgIGlmIChlbmQgLSBzdGFydCA8PSA2KSB7CiAg
ICAgICAgIC8vIEFwcGx5IGEgYnViYmxlIHNvcnQgZm9yIHNtYWxsZXIgbGlzdHMuCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGVuZC0xOyBpID4gc3RhcnQ7IGktLSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBlbmQgLSAxOyBpID4gc3RhcnQ7IGktLSkgewogICAgICAgICAgICAgYm9v
bCBzb3J0ZWQgPSB0cnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc3RhcnQ7IGog
PCBpOyBqKyspIHsKICAgICAgICAgICAgICAgICBDU1NSdWxlRGF0YSogZWx0ID0gbV9tYXRjaGVk
UnVsZXNbal07Ci0gICAgICAgICAgICAgICAgQ1NTUnVsZURhdGEqIGVsdDIgPSBtX21hdGNoZWRS
dWxlc1tqKzFdOworICAgICAgICAgICAgICAgIENTU1J1bGVEYXRhKiBlbHQyID0gbV9tYXRjaGVk
UnVsZXNbaiArIDFdOwogICAgICAgICAgICAgICAgIGlmICgqZWx0ID4gKmVsdDIpIHsKICAgICAg
ICAgICAgICAgICAgICAgc29ydGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG1fbWF0
Y2hlZFJ1bGVzW2pdID0gZWx0MjsKLSAgICAgICAgICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXNb
aisxXSA9IGVsdDsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXNbaiArIDFdID0g
ZWx0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChz
b3J0ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFBlZm9ybSBhIG1lcmdlIHNvcnQgZm9y
IGxhcmdlciBsaXN0cy4KLSAgICAgICAgdW5zaWduZWQgbWlkID0gKHN0YXJ0K2VuZCkvMjsKLSAg
ICAgICAgc29ydE1hdGNoZWRSdWxlcyhzdGFydCwgbWlkKTsKLSAgICAgICAgc29ydE1hdGNoZWRS
dWxlcyhtaWQsIGVuZCk7Ci0gICAgICAgIAotICAgICAgICBDU1NSdWxlRGF0YSogZWx0ID0gbV9t
YXRjaGVkUnVsZXNbbWlkLTFdOwotICAgICAgICBDU1NSdWxlRGF0YSogZWx0MiA9IG1fbWF0Y2hl
ZFJ1bGVzW21pZF07Ci0gICAgICAgIAotICAgICAgICAvLyBIYW5kbGUgdGhlIGZhc3QgY29tbW9u
IGNhc2UgKG9mIGVxdWFsIHNwZWNpZmljaXR5KS4gIFRoZSBsaXN0IG1heSBhbHJlYWR5Ci0gICAg
ICAgIC8vIGJlIGNvbXBsZXRlbHkgc29ydGVkLgotICAgICAgICBpZiAoKmVsdCA8PSAqZWx0MikK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gbWVy
Z2Ugc29ydC4gIEVuc3VyZSBvdXIgbWVyZ2UgYnVmZmVyIGlzIGJpZyBlbm91Z2ggdG8gaG9sZAot
ICAgICAgICAvLyBhbGwgdGhlIGl0ZW1zLgotICAgICAgICBtX3RtcFJ1bGVzLnJlc2l6ZShlbmQg
LSBzdGFydCk7Ci0gICAgICAgIHVuc2lnbmVkIGkxID0gc3RhcnQ7Ci0gICAgICAgIHVuc2lnbmVk
IGkyID0gbWlkOwotICAgICAgICAKLSAgICAgICAgZWx0ID0gbV9tYXRjaGVkUnVsZXNbaTFdOwot
ICAgICAgICBlbHQyID0gbV9tYXRjaGVkUnVsZXNbaTJdOwotICAgICAgICAKLSAgICAgICAgd2hp
bGUgKGkxIDwgbWlkIHx8IGkyIDwgZW5kKSB7Ci0gICAgICAgICAgICBpZiAoaTEgPCBtaWQgJiYg
KGkyID09IGVuZCB8fCAqZWx0IDw9ICplbHQyKSkgewotICAgICAgICAgICAgICAgIG1fdG1wUnVs
ZXNbbV90bXBSdWxlQ291bnQrK10gPSBlbHQ7Ci0gICAgICAgICAgICAgICAgaTErKzsKLSAgICAg
ICAgICAgICAgICBpZiAoaTEgPCBtaWQpCi0gICAgICAgICAgICAgICAgICAgIGVsdCA9IG1fbWF0
Y2hlZFJ1bGVzW2kxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIG1fdG1wUnVsZXNbbV90bXBSdWxlQ291bnQrK10gPSBlbHQyOwotICAgICAgICAg
ICAgICAgIGkyKys7Ci0gICAgICAgICAgICAgICAgaWYgKGkyIDwgZW5kKQotICAgICAgICAgICAg
ICAgICAgICBlbHQyID0gbV9tYXRjaGVkUnVsZXNbaTJdOwotICAgICAgICAgICAgfQorCisgICAg
Ly8gUGVmb3JtIGEgbWVyZ2Ugc29ydCBmb3IgbGFyZ2VyIGxpc3RzLgorICAgIHVuc2lnbmVkIG1p
ZCA9IChzdGFydCArIGVuZCkgLyAyOworICAgIHNvcnRNYXRjaGVkUnVsZXMoc3RhcnQsIG1pZCk7
CisgICAgc29ydE1hdGNoZWRSdWxlcyhtaWQsIGVuZCk7CisgICAgCisgICAgQ1NTUnVsZURhdGEq
IGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW21pZCAtIDFdOworICAgIENTU1J1bGVEYXRhKiBlbHQyID0g
bV9tYXRjaGVkUnVsZXNbbWlkXTsKKyAgICAKKyAgICAvLyBIYW5kbGUgdGhlIGZhc3QgY29tbW9u
IGNhc2UgKG9mIGVxdWFsIHNwZWNpZmljaXR5KS4gIFRoZSBsaXN0IG1heSBhbHJlYWR5CisgICAg
Ly8gYmUgY29tcGxldGVseSBzb3J0ZWQuCisgICAgaWYgKCplbHQgPD0gKmVsdDIpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIG1lcmdlIHNvcnQuICBFbnN1cmUgb3Vy
IG1lcmdlIGJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRvIGhvbGQKKyAgICAvLyBhbGwgdGhlIGl0ZW1z
LgorICAgIFZlY3RvcjxDU1NSdWxlRGF0YSo+IHJ1bGVzTWVyZ2VCdWZmZXI7CisgICAgcnVsZXNN
ZXJnZUJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoZW5kIC0gc3RhcnQpOyAKKworICAgIHVuc2lnbmVk
IGkxID0gc3RhcnQ7CisgICAgdW5zaWduZWQgaTIgPSBtaWQ7CisgICAgCisgICAgZWx0ID0gbV9t
YXRjaGVkUnVsZXNbaTFdOworICAgIGVsdDIgPSBtX21hdGNoZWRSdWxlc1tpMl07CisgICAgCisg
ICAgd2hpbGUgKGkxIDwgbWlkIHx8IGkyIDwgZW5kKSB7CisgICAgICAgIGlmIChpMSA8IG1pZCAm
JiAoaTIgPT0gZW5kIHx8ICplbHQgPD0gKmVsdDIpKSB7CisgICAgICAgICAgICBydWxlc01lcmdl
QnVmZmVyLmFwcGVuZChlbHQpOworICAgICAgICAgICAgaWYgKCsraTEgPCBtaWQpCisgICAgICAg
ICAgICAgICAgZWx0ID0gbV9tYXRjaGVkUnVsZXNbaTFdOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcnVsZXNNZXJnZUJ1ZmZlci5hcHBlbmQoZWx0Mik7CisgICAgICAgICAgICBpZiAo
KytpMiA8IGVuZCkKKyAgICAgICAgICAgICAgICBlbHQyID0gbV9tYXRjaGVkUnVsZXNbaTJdOwog
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydDsgaSA8
IGVuZDsgaSsrKQotICAgICAgICAgICAgbV9tYXRjaGVkUnVsZXNbaV0gPSBtX3RtcFJ1bGVzW2kt
c3RhcnRdOwotICAgICAgICAKLSAgICAgICAgbV90bXBSdWxlQ291bnQgPSAwOwotICAgIH0gICAg
CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKysp
CisgICAgICAgIG1fbWF0Y2hlZFJ1bGVzW2ldID0gcnVsZXNNZXJnZUJ1ZmZlcltpIC0gc3RhcnRd
OwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVtZW50QW5kUHNldWRvU3RhdGUo
RWxlbWVudCogZSkKQEAgLTUwMiw5ICs0OTIsOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Omlu
aXRGb3JTdHlsZVJlc29sCiAKICAgICBzdHlsZSA9IDA7CiAgICAgCi0gICAgbV9tYXRjaGVkUnVs
ZUNvdW50ID0gMDsKLSAgICBtX21hdGNoZWREZWNsQ291bnQgPSAwOwotICAgIG1fdG1wUnVsZUNv
dW50ID0gMDsKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworICAgIG1fbWF0Y2hlZERlY2xz
LmNsZWFyKCk7CisKICAgICBtX3J1bGVMaXN0ID0gMDsKIAogICAgIGZvbnREaXJ0eSA9IGZhbHNl
OwpAQCAtNzU0LDggKzc0NCw5IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpjcmVh
dGVTdHkKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXAtPmxlbmd0aCgp
OyBpKyspIHsKICAgICAgICAgICAgICAgICBNYXBwZWRBdHRyaWJ1dGUqIGF0dHIgPSBtYXAtPmF0
dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgaWYgKGF0dHItPmRlY2woKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoZmlyc3RBdXRob3JSdWxlID09IC0xKSBmaXJzdEF1dGhvclJ1
bGUgPSBtX21hdGNoZWREZWNsQ291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RBdXRob3JS
dWxlID0gbV9tYXRjaGVkRGVjbENvdW50OworICAgICAgICAgICAgICAgICAgICBsYXN0QXV0aG9y
UnVsZSA9IG1fbWF0Y2hlZERlY2xzLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZp
cnN0QXV0aG9yUnVsZSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0QXV0aG9y
UnVsZSA9IGxhc3RBdXRob3JSdWxlOwogICAgICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkRGVj
bGFyYXRpb24oYXR0ci0+ZGVjbCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC03NjYsOCArNzU3LDkgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0
ZVN0eQogICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2luY2UgdGhlaXIgbWFwcGVk
IHN0eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRyaWJ1dGVzLgogICAg
ICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogYXR0cmlidXRlRGVjbCA9IHN0eWxlZEVs
ZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKTsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZURlY2wpIHsKLSAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpIGZpcnN0
QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xDb3VudDsKLSAgICAgICAgICAgIGxhc3RBdXRob3JS
dWxlID0gbV9tYXRjaGVkRGVjbENvdW50OworICAgICAgICAgICAgbGFzdEF1dGhvclJ1bGUgPSBt
X21hdGNoZWREZWNscy5zaXplKCk7CisgICAgICAgICAgICBpZiAoZmlyc3RBdXRob3JSdWxlID09
IC0xKQorICAgICAgICAgICAgICAgIGZpcnN0QXV0aG9yUnVsZSA9IGxhc3RBdXRob3JSdWxlOwog
ICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKGF0dHJpYnV0ZURlY2wpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNzc5LDggKzc3MSw5IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVj
dG9yOjpjcmVhdGVTdHkKICAgICBpZiAoc3R5bGVkRWxlbWVudCkgewogICAgICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lRGVjbCA9IHN0eWxlZEVsZW1lbnQtPmlubGluZVN0
eWxlRGVjbCgpOwogICAgICAgICBpZiAoaW5saW5lRGVjbCkgewotICAgICAgICAgICAgaWYgKGZp
cnN0QXV0aG9yUnVsZSA9PSAtMSkgZmlyc3RBdXRob3JSdWxlID0gbV9tYXRjaGVkRGVjbENvdW50
OwotICAgICAgICAgICAgbGFzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNsQ291bnQ7CisgICAg
ICAgICAgICBsYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xzLnNpemUoKTsKKyAgICAgICAg
ICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAgICAgICAgICAgICAgZmlyc3RBdXRo
b3JSdWxlID0gbGFzdEF1dGhvclJ1bGU7CiAgICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRp
b24oaW5saW5lRGVjbCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODksNyArNzgyLDcgQEAgUmVu
ZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVN0eQogICAgIC8vIGhpZ2gtcHJpb3Jp
dHkgcHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVyIHBy
b3BlcnRpZXMgZGVwZW5kIG9uLgogICAgIC8vIFRoZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlvcml0
eSBub3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBvcnRhbnQsICgzKSBub3JtYWwg
bm90IGltcG9ydGFudAogICAgIC8vIGFuZCAoNCkgbm9ybWFsIGltcG9ydGFudC4KLSAgICBhcHBs
eURlY2xhcmF0aW9ucyh0cnVlLCBmYWxzZSwgMCwgbV9tYXRjaGVkRGVjbENvdW50LTEpOworICAg
IGFwcGx5RGVjbGFyYXRpb25zKHRydWUsIGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkg
LSAxKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyh0cnVlLCB0cnVlLCBmaXJzdEF1dGhvclJ1bGUs
IGxhc3RBdXRob3JSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyh0cnVlLCB0cnVlLCBmaXJz
dFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zKHRydWUsIHRy
dWUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKQEAgLTgxNCw3ICs4MDcsNyBAQCBSZW5kZXJT
dHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlU3R5CiAgICAgfQogICAgIAogICAgIC8vIE5v
dyBkbyB0aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBh
bGwgdGhlICFpbXBvcnRhbnQgcHJvcGVydGllcy4KLSAgICBhcHBseURlY2xhcmF0aW9ucyhmYWxz
ZSwgZmFsc2UsIGxhc3RVQVJ1bGUrMSwgbV9tYXRjaGVkRGVjbENvdW50LTEpOworICAgIGFwcGx5
RGVjbGFyYXRpb25zKGZhbHNlLCBmYWxzZSwgbGFzdFVBUnVsZSArIDEsIG1fbWF0Y2hlZERlY2xz
LnNpemUoKSAtIDEpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zKGZhbHNlLCB0cnVlLCBmaXJzdEF1
dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyhmYWxzZSwg
dHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9u
cyhmYWxzZSwgdHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwpAQCAtODU3LDcgKzg1MCw3
IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVQc2UKICAgICBtYXRjaFJ1
bGVzKG1fdXNlclN0eWxlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOwogICAgIG1hdGNo
UnVsZXMobV9hdXRob3JTdHlsZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CiAg
ICAgCi0gICAgaWYgKG1fbWF0Y2hlZERlY2xDb3VudCA9PSAwKQorICAgIGlmIChtX21hdGNoZWRE
ZWNscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHN0eWxlID0gbmV3
IChlLT5kb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwpAQCAtODY5LDcg
Kzg2Miw3IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVQc2UKICAgICBz
dHlsZS0+bm9uaW5oZXJpdGVkX2ZsYWdzLl9zdHlsZVR5cGUgPSBwc2V1ZG9TdHlsZTsKICAgICAK
ICAgICAvLyBIaWdoLXByaW9yaXR5IHByb3BlcnRpZXMuCi0gICAgYXBwbHlEZWNsYXJhdGlvbnMo
dHJ1ZSwgZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xDb3VudC0xKTsKKyAgICBhcHBseURlY2xhcmF0
aW9ucyh0cnVlLCBmYWxzZSwgMCwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CiAgICAgYXBw
bHlEZWNsYXJhdGlvbnModHJ1ZSwgdHJ1ZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVs
ZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnModHJ1ZSwgdHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFz
dFVzZXJSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyh0cnVlLCB0cnVlLCBmaXJzdFVBUnVs
ZSwgbGFzdFVBUnVsZSk7CkBAIC04OTMsNyArODg2LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxl
U2VsZWN0b3I6OmNyZWF0ZVBzZQogICAgICAgICBtX2JhY2tncm91bmRDb2xvciA9IHN0eWxlLT5i
YWNrZ3JvdW5kQ29sb3IoKTsKICAgICB9CiAgICAgCi0gICAgYXBwbHlEZWNsYXJhdGlvbnMoZmFs
c2UsIGZhbHNlLCBsYXN0VUFSdWxlKzEsIG1fbWF0Y2hlZERlY2xDb3VudC0xKTsKKyAgICBhcHBs
eURlY2xhcmF0aW9ucyhmYWxzZSwgZmFsc2UsIGxhc3RVQVJ1bGUgKyAxLCBtX21hdGNoZWREZWNs
cy5zaXplKCkgLSAxKTsKICAgICBhcHBseURlY2xhcmF0aW9ucyhmYWxzZSwgdHJ1ZSwgZmlyc3RB
dXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnMoZmFsc2Us
IHRydWUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlv
bnMoZmFsc2UsIHRydWUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKSW5kZXg6IFdlYkNvcmUv
Y3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9jc3NzdHls
ZXNlbGVjdG9yLmgJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9jc3MvY3Nzc3R5bGVzZWxl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY3NzX3J1
bGVpbXBsLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJyZW5kZXJf
c3R5bGUuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogY2xhc3MgS0hUTUxTZXR0
aW5nczsKIGNsYXNzIEtVUkw7CkBAIC0xNDEsMTIgKzE0MiwxMyBAQCBjbGFzcyBTdHlsZWRFbGVt
ZW50OwogCiAgICAgICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50ICplKTsKICAgICAKKyAgICAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShDU1NSdWxl
RGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KKyAgICAgICAgdm9p
ZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wp
IHsgbV9tYXRjaGVkRGVjbHMuYXBwZW5kKGRlY2wpOyB9CisKICAgICAgICAgdm9pZCBtYXRjaFJ1
bGVzKENTU1J1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxl
SW5kZXgpOwotICAgICAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KENTU1J1bGVEYXRhTGlzdCog
cnVsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBmaXJzdFJ1bGVJbmRl
eCwgaW50JiBsYXN0UnVsZUluZGV4KTsKLSAgICAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKHVu
c2lnbmVkIGZpcnN0UnVsZUluZGV4LCB1bnNpZ25lZCBsYXN0UnVsZUluZGV4KTsKLSAgICAgICAg
dm9pZCBhZGRNYXRjaGVkUnVsZShDU1NSdWxlRGF0YSogcnVsZSk7Ci0gICAgICAgIHZvaWQgYWRk
TWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKTsKKyAg
ICAgICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChDU1NSdWxlRGF0YUxpc3QqIHJ1bGVzLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpOworICAgICAgICB2b2lkIHNvcnRN
YXRjaGVkUnVsZXModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CisKICAgICAgICAgdm9p
ZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGZpcnN0UGFzcywgYm9vbCBpbXBvcnRhbnQsIGludCBz
dGFydEluZGV4LCBpbnQgZW5kSW5kZXgpOwogICAgICAgICAKICAgICAgICAgc3RhdGljIENTU1N0
eWxlU2hlZXQgKmRlZmF1bHRTaGVldDsKQEAgLTE2Niw3ICsxNjgsNyBAQCBjbGFzcyBTdHlsZWRF
bGVtZW50OwogICAgICAgICBCYWNrZ3JvdW5kTGF5ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKICAgICAg
ICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAKLXB1YmxpYzoKKyAgICBwdWJsaWM6CiAgICAg
ICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAgCiAgICAgcHJp
dmF0ZToKQEAgLTE4NCwxNSArMTg2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgLy8gc2V0IG9mIG1h
dGNoZWQgZGVjbHMgZm91ciB0aW1lcywgb25jZSBmb3IgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90
aGVycyBkZXBlbmQgb24gKGxpa2UgZm9udC1zaXplKSwKICAgICAgICAgLy8gYW5kIHRoZW4gYSBz
ZWNvbmQgdGltZSBmb3IgYWxsIHRoZSByZW1haW5pbmcgcHJvcGVydGllcy4gIFdlIHRoZW4gZG8g
dGhlIHNhbWUgdHdvIHBhc3NlcwogICAgICAgICAvLyBmb3IgYW55ICFpbXBvcnRhbnQgcnVsZXMu
Ci0gICAgICAgIERlcHJlY2F0ZWRBcnJheTxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+IG1f
bWF0Y2hlZERlY2xzOwotICAgICAgICB1bnNpZ25lZCBtX21hdGNoZWREZWNsQ291bnQ7CisgICAg
ICAgIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+IG1fbWF0Y2hlZERlY2xzOwog
ICAgICAgICAKICAgICAgICAgLy8gQSBidWZmZXIgdXNlZCB0byBob2xkIHRoZSBzZXQgb2YgbWF0
Y2hlZCBydWxlcyBmb3IgYW4gZWxlbWVudCwgYW5kIGEgdGVtcG9yYXJ5IGJ1ZmZlciB1c2VkIGZv
cgogICAgICAgICAvLyBtZXJnZSBzb3J0aW5nLgotICAgICAgICBEZXByZWNhdGVkQXJyYXk8Q1NT
UnVsZURhdGEqPiBtX21hdGNoZWRSdWxlczsKLSAgICAgICAgdW5zaWduZWQgbV9tYXRjaGVkUnVs
ZUNvdW50OwotICAgICAgICBEZXByZWNhdGVkQXJyYXk8Q1NTUnVsZURhdGEqPiBtX3RtcFJ1bGVz
OwotICAgICAgICB1bnNpZ25lZCBtX3RtcFJ1bGVDb3VudDsKKyAgICAgICAgVmVjdG9yPENTU1J1
bGVEYXRhKj4gbV9tYXRjaGVkUnVsZXM7CisgICAgICAgIAogICAgICAgICBDU1NSdWxlTGlzdCog
bV9ydWxlTGlzdDsKICAgICAgICAgYm9vbCBtX2NvbGxlY3RSdWxlc09ubHk7CiAKSW5kZXg6IFdl
YkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwveG1s
aHR0cHJlcXVlc3QuaAkocmV2aXNpb24gMTM2NTMpCisrKyBXZWJDb3JlL3htbC94bWxodHRwcmVx
dWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVHJhbnNm
ZXJKb2JDbGllbnQuaCIKICNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
a3htbGNvcmUvSGFzaFNldC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc3LDcgKzc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZERhdGEoVHJhbnNmZXJKb2IqLCBjb25zdCBjaGFyICpk
YXRhLCBpbnQgc2l6ZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQWxsRGF0YShUcmFuc2Zl
ckpvYiopOwogCi0gICAgdm9pZCBwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IERlcHJlY2F0
ZWRCeXRlQXJyYXkmIGRhdGEsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBEZXByZWNhdGVk
U3RyaW5nJiBoZWFkZXJzKTsKKyAgICB2b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3Qg
VmVjdG9yPGNoYXI+JiBkYXRhLCBjb25zdCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYgaGVhZGVycyk7CiAKICAgICBib29sIHJlc3BvbnNlSXNYTUwoKSBjb25zdDsKICAg
ICAKSW5kZXg6IFdlYkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3htbC94bWxodHRwcmVxdWVzdC5jcHAJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29y
ZS94bWwveG1saHR0cHJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSA8a2pzL3Byb3RlY3QuaD4KICNpbmNsdWRlIDxxcmVnZXhwLmg+CiAjaW5jbHVk
ZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBLSU87CiAKQEAgLTMyNyw3ICszMjgsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpzZW5kKGNvbnN0IFN0cmluZyYgCiAgICAgICAgIG1fam9iLT5hZGRNZXRhRGF0YSgiY3VzdG9t
SFRUUEhlYWRlciIsIG1fcmVxdWVzdEhlYWRlcnMpOwogCiAgICAgaWYgKCFtX2FzeW5jKSB7Ci0g
ICAgICAgIERlcHJlY2F0ZWRCeXRlQXJyYXkgZGF0YTsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGRh
dGE7CiAgICAgICAgIEtVUkwgZmluYWxVUkw7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgaGVh
ZGVyczsKIApAQCAtNDc3LDI2ICs0NzgsMjYgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRT
dGF0dXNUZXh0KCkgYwogICAgIHJldHVybiBmaXJzdExpbmUuc3Vic3RyaW5nKGNvZGVFbmQgKyAx
LCBlbmRPZkxpbmUgLSAoY29kZUVuZCArIDEpKS5kZXByZWNhdGVkU3RyaW5nKCkuc3RyaXBXaGl0
ZVNwYWNlKCk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnByb2Nlc3NTeW5jTG9hZFJlc3Vs
dHMoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSAmZGF0YSwgY29uc3QgS1VSTCAmZmluYWxVUkws
IGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJmhlYWRlcnMpCit2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpw
cm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgS1VS
TCYgZmluYWxVUkwsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGhlYWRlcnMpCiB7Ci0gIGlmICgh
dXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKGZpbmFsVVJMKSkgewotICAgIGFib3J0KCk7Ci0gICAg
cmV0dXJuOwotICB9Ci0gIAotICBtX3Jlc3BvbnNlSGVhZGVycyA9IGhlYWRlcnM7Ci0gIGNoYW5n
ZVN0YXRlKExvYWRlZCk7Ci0gIGlmIChtX2Fib3J0ZWQpCi0gICAgcmV0dXJuOwotICAKLSAgY29u
c3QgY2hhciAqYnl0ZXMgPSAoY29uc3QgY2hhciAqKWRhdGEuZGF0YSgpOwotICBpbnQgbGVuID0g
KGludClkYXRhLnNpemUoKTsKKyAgICBpZiAoIXVybE1hdGNoZXNEb2N1bWVudERvbWFpbihmaW5h
bFVSTCkpIHsKKyAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICBy
ZWNlaXZlZERhdGEoMCwgYnl0ZXMsIGxlbik7Ci0gIGlmIChtX2Fib3J0ZWQpCi0gICAgcmV0dXJu
OworICAgIG1fcmVzcG9uc2VIZWFkZXJzID0gaGVhZGVyczsKKyAgICBjaGFuZ2VTdGF0ZShMb2Fk
ZWQpOworICAgIGlmIChtX2Fib3J0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGNo
YXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKKyAgICBp
bnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7CisKKyAgICByZWNlaXZlZERh
dGEoMCwgYnl0ZXMsIGxlbik7CisgICAgaWYgKG1fYWJvcnRlZCkKKyAgICAgICAgcmV0dXJuOwog
Ci0gIHJlY2VpdmVkQWxsRGF0YSgwKTsKKyAgICByZWNlaXZlZEFsbERhdGEoMCk7CiB9CiAKIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OnJlY2VpdmVkQWxsRGF0YShUcmFuc2ZlckpvYiopCkluZGV4OiBX
ZWJDb3JlL2t3cS9LV1FMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2t3cS9LV1FMb2Fk
ZXIuaAkocmV2aXNpb24gMTM2NTMpCisrKyBXZWJDb3JlL2t3cS9LV1FMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAorI2luY2x1
ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgorCiAjaWYgX19PQkpDX18KIEBjbGFzcyBOU0RpY3Rpb25h
cnk7CiBAY2xhc3MgTlNTdHJpbmc7CkBAIC00OCwxMyArNTAsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgTG9hZGVyOwogICAgIGNsYXNzIFJlcXVlc3Q7CiAgICAgY2xhc3MgU3Ry
aW5nOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIERlcHJlY2F0ZWRBcnJheTsK
LQotICAgIHR5cGVkZWYgRGVwcmVjYXRlZEFycmF5PGNoYXI+IERlcHJlY2F0ZWRCeXRlQXJyYXk7
CiB9CiAKLVdlYkNvcmU6OkRlcHJlY2F0ZWRCeXRlQXJyYXkgS1dRU2VydmVTeW5jaHJvbm91c1Jl
cXVlc3QoV2ViQ29yZTo6TG9hZGVyKiwgV2ViQ29yZTo6RG9jTG9hZGVyKiwgV2ViQ29yZTo6VHJh
bnNmZXJKb2IqLCBLVVJMJiBmaW5hbFVSTCwgRGVwcmVjYXRlZFN0cmluZyYgaGVhZGVycyk7CitW
ZWN0b3I8Y2hhcj4gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoV2ViQ29yZTo6TG9hZGVyKiwg
V2ViQ29yZTo6RG9jTG9hZGVyKiwgV2ViQ29yZTo6VHJhbnNmZXJKb2IqLCBLVVJMJiBmaW5hbFVS
TCwgRGVwcmVjYXRlZFN0cmluZyYgaGVhZGVycyk7CiAKIHZvaWQgS1dRQ2hlY2tDYWNoZU9iamVj
dFN0YXR1cyhXZWJDb3JlOjpEb2NMb2FkZXIqLCBXZWJDb3JlOjpDYWNoZWRPYmplY3QqKTsKIGJv
b2wgS1dRQ2hlY2tJZlJlbG9hZGluZyhXZWJDb3JlOjpEb2NMb2FkZXIqKTsKSW5kZXg6IFdlYkNv
cmUva3dxL0tXUUxvYWRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2t3cS9LV1FMb2FkZXIu
bW0JKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9rd3EvS1dRTG9hZGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjaW1wb3J0ICJSZXF1ZXN0LmgiCiAjaW1wb3J0ICJX
ZWJDb3JlRnJhbWVCcmlkZ2UuaCIKICNpbXBvcnQgImxvYWRlci5oIgotI2ltcG9ydCAibG9hZGVy
LmgiCisjaW1wb3J0IDxreG1sY29yZS9WZWN0b3IuaD4KIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9O
U1VSTFJlc3BvbnNlLmg+CiAKQEAgLTEyMSwxMiArMTIxLDEyIEBAIE5TU3RyaW5nICpLV1FIZWFk
ZXJTdHJpbmdGcm9tRGljdGlvbmFyeSgKICAgICByZXR1cm4gaGVhZGVyU3RyaW5nOwogfQogCi1E
ZXByZWNhdGVkQnl0ZUFycmF5IEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KExvYWRlciAqbG9h
ZGVyLCBEb2NMb2FkZXIgKmRvY0xvYWRlciwgVHJhbnNmZXJKb2IgKmpvYiwgS1VSTCAmZmluYWxV
UkwsIERlcHJlY2F0ZWRTdHJpbmcgJnJlc3BvbnNlSGVhZGVycykKK1ZlY3RvcjxjaGFyPiBLV1FT
ZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChMb2FkZXIgKmxvYWRlciwgRG9jTG9hZGVyICpkb2NMb2Fk
ZXIsIFRyYW5zZmVySm9iICpqb2IsIEtVUkwgJmZpbmFsVVJMLCBEZXByZWNhdGVkU3RyaW5nICZy
ZXNwb25zZUhlYWRlcnMpCiB7CiAgICAgRnJhbWVNYWMgKmZyYW1lID0gc3RhdGljX2Nhc3Q8RnJh
bWVNYWMgKj4oZG9jTG9hZGVyLT5mcmFtZSgpKTsKICAgICAKICAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm4gRGVwcmVjYXRlZEJ5dGVBcnJheSgpOworICAgICAgICByZXR1cm4gVmVjdG9y
PGNoYXI+KCk7CiAgICAgCiAgICAgV2ViQ29yZUZyYW1lQnJpZGdlICpicmlkZ2UgPSBmcmFtZS0+
YnJpZGdlKCk7CiAKQEAgLTE1NSw3ICsxNTUsNyBAQCBEZXByZWNhdGVkQnl0ZUFycmF5IEtXUVNl
cnZlU3luY2hyb25vdXNSCiAgICAgZmluYWxVUkwgPSBmaW5hbE5TVVJMOwogICAgIHJlc3BvbnNl
SGVhZGVycyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21OU1N0cmluZyhLV1FIZWFkZXJTdHJpbmdG
cm9tRGljdGlvbmFyeShyZXNwb25zZUhlYWRlckRpY3QsIHN0YXR1c0NvZGUpKTsKIAotICAgIERl
cHJlY2F0ZWRCeXRlQXJyYXkgcmVzdWx0cyhbcmVzdWx0RGF0YSBsZW5ndGhdKTsKKyAgICBWZWN0
b3I8Y2hhcj4gcmVzdWx0cyhbcmVzdWx0RGF0YSBsZW5ndGhdKTsKIAogICAgIG1lbWNweSggcmVz
dWx0cy5kYXRhKCksIFtyZXN1bHREYXRhIGJ5dGVzXSwgW3Jlc3VsdERhdGEgbGVuZ3RoXSApOwog
CkBAIC0xNjMsNyArMTYzLDcgQEAgRGVwcmVjYXRlZEJ5dGVBcnJheSBLV1FTZXJ2ZVN5bmNocm9u
b3VzUgogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIHJldHVybiBEZXBy
ZWNhdGVkQnl0ZUFycmF5KCk7CisgICAgcmV0dXJuIFZlY3RvcjxjaGFyPigpOwogfQogCiBpbnQg
S1dRTnVtYmVyT2ZQZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMoV2ViQ29yZTo6RG9jTG9hZGVyICpk
bCkKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVRleHRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3dxL0tXUVRleHRTdHJlYW0uY3BwCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUv
a3dxL0tXUVRleHRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxOSArMjYsMTUgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJLV1FUZXh0U3RyZWFtLmgiCiAKLSNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBjb25zdCBz
aXplX3QgaW50ZWdlck9yUG9pbnRlckFzU3RyaW5nQnVmZmVyU2l6ZSA9IDEwMDsgLy8gbGFyZ2Ug
ZW5vdWdoIGZvciBhbnkgaW50ZWdlciBvciBwb2ludGVyIGluIHN0cmluZyBmb3JtYXQsIGluY2x1
ZGluZyB0cmFpbGluZyBudWxsIGNoYXJhY3RlcgogY29uc3QgY2hhciAqcHJlY2lzaW9uRm9ybWF0
c1tdID0geyAiJS4wZiIsICIlLjFmIiwgIiUuMmYiLCAiJS4zZiIsICIlLjRmIiwgIiUuNWYiICIl
LjZmIn07IAogY29uc3QgaW50IG1heFByZWNpc2lvbiA9IDY7IC8vIG11c3QgbWF0Y2ggdG8gcHJl
Y2lzaW9uRm9ybWF0cwogY29uc3QgaW50IGRlZmF1bHRQcmVjaXNpb24gPSA2OyAvLyBtYXRjaGVz
IHF0IGFuZCBzcHJpbnRmKC4uLCAiJWYiLCAuLi4pIGJlaGF2aW91cgogCi1RVGV4dFN0cmVhbTo6
UVRleHRTdHJlYW0oY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSYgYmEpCi0gICAgOiBtX2hhc0J5
dGVBcnJheSh0cnVlKSwgbV9ieXRlQXJyYXkoYmEpLCBtX3N0cmluZygwKSwgbV9wcmVjaXNpb24o
ZGVmYXVsdFByZWNpc2lvbikKLXsKLX0KLQogUVRleHRTdHJlYW06OlFUZXh0U3RyZWFtKERlcHJl
Y2F0ZWRTdHJpbmcqIHMpCiAgICAgOiBtX2hhc0J5dGVBcnJheShmYWxzZSksIG1fc3RyaW5nKHMp
LCBtX3ByZWNpc2lvbihkZWZhdWx0UHJlY2lzaW9uKQogewpAQCAtNDYsMTEgKzQyLDkgQEAgUVRl
eHRTdHJlYW06OlFUZXh0U3RyZWFtKERlcHJlY2F0ZWRTdHJpbgogCiBRVGV4dFN0cmVhbSYgUVRl
eHRTdHJlYW06Om9wZXJhdG9yPDwoY2hhciBjKQogewotICAgIGlmIChtX2hhc0J5dGVBcnJheSkg
ewotICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9ieXRlQXJyYXkuc2l6ZSgpOwotICAgICAg
ICBtX2J5dGVBcnJheS5yZXNpemUob2xkU2l6ZSArIDEpOwotICAgICAgICBtX2J5dGVBcnJheVtv
bGRTaXplXSA9IGM7Ci0gICAgfQorICAgIGlmIChtX2hhc0J5dGVBcnJheSkKKyAgICAgICAgbV9i
eXRlQXJyYXkuYXBwZW5kKGMpOworCiAgICAgaWYgKG1fc3RyaW5nKQogICAgICAgICBtX3N0cmlu
Zy0+YXBwZW5kKFFDaGFyKGMpKTsKICAgICByZXR1cm4gKnRoaXM7CkluZGV4OiBXZWJDb3JlL2t3
cS9LV1FUZXh0U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rd3EvS1dRVGV4dFN0cmVh
bS5oCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUva3dxL0tXUVRleHRTdHJlYW0uaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBRVGV4dFN0cmVhbV9ICiAjZGVm
aW5lIFFUZXh0U3RyZWFtX0gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgorI2luY2x1
ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBjbGFzcyBEZXByZWNhdGVkQ1N0cmluZzsKIGNsYXNz
IFFDaGFyOwpAQCAtNDMsNyArNDMsNiBAQCBRVGV4dFN0cmVhbSAmZW5kbChRVGV4dFN0cmVhbSYg
c3RyZWFtKTsKIAogY2xhc3MgUVRleHRTdHJlYW0gewogcHVibGljOgotICAgIFFUZXh0U3RyZWFt
KGNvbnN0IERlcHJlY2F0ZWRCeXRlQXJyYXkmKTsKICAgICBRVGV4dFN0cmVhbShEZXByZWNhdGVk
U3RyaW5nKik7CiAKICAgICBRVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChjaGFyKTsKQEAgLTY5LDcg
KzY4LDcgQEAgcHJpdmF0ZToKICAgICBRVGV4dFN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IFFUZXh0
U3RyZWFtJik7CiAKICAgICBib29sIG1faGFzQnl0ZUFycmF5OwotICAgIERlcHJlY2F0ZWRCeXRl
QXJyYXkgbV9ieXRlQXJyYXk7CisgICAgVmVjdG9yPGNoYXI+IG1fYnl0ZUFycmF5OwogICAgIERl
cHJlY2F0ZWRTdHJpbmcqIG1fc3RyaW5nOwogICAgIGludCBtX3ByZWNpc2lvbjsKIH07CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxMzY1MykKKysrIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlCiB7CkBAIC00Nyw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkZXJlZihDYWNoZWRPYmplY3RDbGllbnQqKTsKIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2hhcnNldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmLCBib29sIGF0RW5kKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRhdGEoVmVjdG9yPGNoYXI+JiwgYm9vbCBhdEVuZCk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBlcnJvcigpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCShyZXZpc2lvbiAxMzY1
MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwzMyArMjksMzUgQEAKIAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgogI2luY2x1ZGUgIlRl
eHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgRG9jTG9hZGVyOwogCi0gICAgY2xhc3MgQ2FjaGVkU2NyaXB0
IDogcHVibGljIENhY2hlZE9iamVjdCB7CisgICAgY2xhc3MgQ2FjaGVkU2NyaXB0IDogcHVibGlj
IENhY2hlZE9iamVjdAorICAgIHsKICAgICBwdWJsaWM6Ci0JQ2FjaGVkU2NyaXB0KERvY0xvYWRl
ciosIGNvbnN0IFN0cmluZyYgVVJMLCBLSU86OkNhY2hlQ29udHJvbCwgdGltZV90IGV4cGlyZURh
dGUsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGNoYXJzZXQpOwotCUNhY2hlZFNjcmlwdChjb25z
dCBTdHJpbmcmIFVSTCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc2NyaXB0RGF0YSk7Ci0Jdmly
dHVhbCB+Q2FjaGVkU2NyaXB0KCk7CisgICAgICAgIENhY2hlZFNjcmlwdChEb2NMb2FkZXIqLCBj
b25zdCBTdHJpbmcmIFVSTCwgS0lPOjpDYWNoZUNvbnRyb2wsIHRpbWVfdCBleHBpcmVEYXRlLCBj
b25zdCBEZXByZWNhdGVkU3RyaW5nJiBjaGFyc2V0KTsKKyAgICAgICAgQ2FjaGVkU2NyaXB0KGNv
bnN0IFN0cmluZyYgVVJMLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzY3JpcHREYXRhKTsKKyAg
ICAgICAgdmlydHVhbCB+Q2FjaGVkU2NyaXB0KCk7CiAKLQljb25zdCBTdHJpbmcmIHNjcmlwdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0OyB9CisgICAgICAgIGNvbnN0IFN0cmluZyYgc2NyaXB0
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0KIAotCXZpcnR1YWwgdm9pZCByZWYoQ2FjaGVk
T2JqZWN0Q2xpZW50Kik7Ci0JdmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCop
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmKENhY2hlZE9iamVjdENsaWVudCopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGVyZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIHNldENoYXJzZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwotCXZpcnR1YWwg
dm9pZCBkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmLCBib29sIGF0RW5kKTsKLQl2aXJ0dWFsIHZv
aWQgZXJyb3IoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGEoVmVjdG9yPGNoYXI+JiwgYm9v
bCBhdEVuZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBzY2hlZHVsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIAogICAg
ICAgICBib29sIGVycm9yT2NjdXJyZWQoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yT2NjdXJyZWQ7
IH0KIAotCXZvaWQgY2hlY2tOb3RpZnkoKTsKKyAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOwog
CiAgICAgcHJpdmF0ZToKLQlTdHJpbmcgbV9zY3JpcHQ7CisgICAgICAgIFN0cmluZyBtX3Njcmlw
dDsKICAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CiAgICAgICAgIGJvb2wgbV9lcnJv
ck9jY3VycmVkOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCShyZXZpc2lvbiAxMzY1MykKKysrIFdl
YkNvcmUvbG9hZGVyL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDExIEBA
CiAjaW5jbHVkZSAiQ2FjaGVkWFNMU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJs
b2FkZXIuaCIKICNpbmNsdWRlICJUcmFuc2ZlckpvYi5oIgogI2luY2x1ZGUgIlRyYW5zZmVySm9i
LmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgIkltYWdlLmgi
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZE9iamVjdC5oCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxraW8vZ2xvYmFsLmg+CiAjaW5jbHVkZSA8
a3htbGNvcmUvSGFzaFNldC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMTAzLDcgKzEwNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgfkNhY2hlZE9iamVjdCgpOwogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKSB7fQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShEZXByZWNhdGVkQnl0ZUFycmF5JiwgYm9vbCBhdEVu
ZCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBib29sIGF0
RW5kKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpID0gMDsKIAogICAgICAgICBj
b25zdCBTdHJpbmcgJnVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmgJKHJl
dmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsOCArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAqIFByb3ZpZGVzIGEgY2Fj
aGUvbG9hZGVyIGZvciBvYmplY3RzIG5lZWRlZCBmb3IgZGlzcGxheWluZyB0aGUgaHRtbCBwYWdl
LgogICAgICAqIEF0IHRoZSBtb21lbnQgdGhlc2UgYXJlIHN0eWxlc2hlZXRzLCBzY3JpcHRzIGFu
ZCBpbWFnZXMKICAgICAgKi8KLSAgICBjbGFzcyBDYWNoZQotICAgIHsKKyAgICBjbGFzcyBDYWNo
ZSB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBEb2NMb2FkZXI7CiAgICAgcHVibGljOgogICAgICAg
ICAvKioKQEAgLTE4Nyw2ICsxODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBpbnQgbV9jb3VudE9mTFJVQW5kVW5jYWNoZWFibGVMaXN0czsKICAg
ICB9OwotfQogCi0jZW5kaWYKK30gLy9uYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2Fj
aGVfaApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHJldmlzaW9u
IDEzNjUzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJkZWNvZGVyLmgiCiAjaW5jbHVk
ZSAibG9hZGVyLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc0LDkgKzc1
LDkgQEAgdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpzZXRDaGFyc2V0KCBjbwogICAgICAgICBt
X2RlY29kZXItPnNldEVuY29kaW5nTmFtZShjaHMubGF0aW4xKCksIERlY29kZXI6OkVuY29kaW5n
RnJvbUhUVFBIZWFkZXIpOwogfQogCi12b2lkIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmRhdGEoRGVw
cmVjYXRlZEJ5dGVBcnJheSYgZGF0YSwgYm9vbCBlb2YpCit2b2lkIENhY2hlZFhTTFN0eWxlU2hl
ZXQ6OmRhdGEoVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIGF0RW5kKQogewotICAgIGlmICghZW9m
KQorICAgIGlmICghYXRFbmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldFNpemUoZGF0YS5z
aXplKCkpOwpAQCAtMTA1LDQgKzEwNiw0IEBAIHZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZXJy
b3IoKQogCiAjZW5kaWYKIAotfQorfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZElt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTMgQEAKICNpbmNsdWRlICJDYWNo
ZWRPYmplY3RDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIuaCIK
ICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIktX
UUxvYWRlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9y
Lmg+CisKKy8vIEZJWE1FOiByZW1vdmUgdGhpcyBpbmNsdWRlIHdoZW4gSW1hZ2UgaXMgY2hhbmdl
ZCB0byB1c2UgVmVjdG9yPGNoYXI+CisjaW5jbHVkZSAiRGVwcmVjYXRlZEFycmF5LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTEyLDcgKzExNyw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6
OmNsZWFyKCkKICAgICBzZXRTaXplKDApOwogfQogCi12b2lkIENhY2hlZEltYWdlOjpkYXRhKERl
cHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9mKQordm9pZCBDYWNoZWRJbWFnZTo6ZGF0
YShWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgYXRFbmQpCiB7CiAgICAgYm9vbCBzaXplQXZhaWxh
YmxlID0gZmFsc2U7CiAgICAgCkBAIC0xMjAsMzUgKzEyNSwzOSBAQCB2b2lkIENhY2hlZEltYWdl
OjpkYXRhKERlcHJlY2F0ZWRCeXRlQXJyCiAKICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGlmIGl0
IGRvZXNuJ3QgeWV0IGV4aXN0LgogICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZSA9
IG5ldyBJbWFnZSh0aGlzLAogI2lmIF9fQVBQTEVfXwotICAgICAgICAgICAgS1dRUmVzcG9uc2VN
SU1FVHlwZShtX3Jlc3BvbnNlKSA9PSAiYXBwbGljYXRpb24vcGRmIgorICAgICAgICBtX2ltYWdl
ID0gbmV3IEltYWdlKHRoaXMsIEtXUVJlc3BvbnNlTUlNRVR5cGUobV9yZXNwb25zZSkgPT0gImFw
cGxpY2F0aW9uL3BkZiIpOwogI2Vsc2UKLSAgICAgICAgICAgIGZhbHNlCisgICAgICAgIG1faW1h
Z2UgPSBuZXcgSW1hZ2UodGhpcywgZmFsc2UpOwogI2VuZGlmCi0gICAgICAgICAgICApOwotICAg
ICAgICAKLSAgICAvLyBHaXZlIGFsbCB0aGUgZGF0YSBzbyBmYXIgdG8gdGhlIGltYWdlIG9iamVj
dCBmb3IgcHJvY2Vzc2luZy4KLSAgICAvLyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1
dCB3aWxsIGRlbGF5IGRlY29kaW5nIHVudGlsIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6ZSBv
ciBzcGVjaWZpYyBpbWFnZSBmcmFtZXMpLgotICAgIHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5z
ZXREYXRhKGRhdGEsIGVvZik7CisKKyAgICAvLyBGSVhNRTogVGhpcyBjb3B5aW5nIHRvIGEgRGVw
cmVjYXRlZEJ5dGVBcnJheSBpcyBuZWVkZWQgdW50aWwgdGhlCisgICAgLy8gSW1hZ2UgY2xhc3Nl
cyBzd2l0Y2ggdG8gdXNlIFZlY3RvcjxjaGFyPiBpbnN0ZWFkIG9yIGl0LgorICAgIERlcHJlY2F0
ZWRCeXRlQXJyYXkgdG1wRGF0YShkYXRhLnNpemUoKSk7CisgICAgbWVtY3B5KHRtcERhdGEuZGF0
YSgpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIAorICAgIC8vIEdpdmUgYWxsIHRo
ZSBkYXRhIHNvIGZhciB0byB0aGUgaW1hZ2Ugb2JqZWN0IGZvciBwcm9jZXNzaW5nLiBJdCAKKyAg
ICAvLyB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5IGRlY29kaW5nIHVu
dGlsIHF1ZXJpZWQKKyAgICAvLyBmb3IgaW5mbyAobGlrZSBzaXplIG9yIHNwZWNpZmljIGltYWdl
IGZyYW1lcykuCisgICAgc2l6ZUF2YWlsYWJsZSA9IG1faW1hZ2UtPnNldERhdGEodG1wRGF0YSwg
YXRFbmQpOwogCiAgICAgLy8gR28gYWhlYWQgYW5kIHRlbGwgb3VyIG9ic2VydmVycyB0byB0cnkg
dG8gZHJhdyBpZiB3ZSBoYXZlIGVpdGhlcgogICAgIC8vIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSBv
ciB0aGUgc2l6ZSBpcyBrbm93bi4gIEVhY2ggY2h1bmsgZnJvbSB0aGUKICAgICAvLyBuZXR3b3Jr
IGNhdXNlcyBvYnNlcnZlcnMgdG8gcmVwYWludCwgd2hpY2ggd2lsbCBmb3JjZSB0aGF0IGNodW5r
CiAgICAgLy8gdG8gZGVjb2RlLgotICAgIGlmIChzaXplQXZhaWxhYmxlIHx8IGVvZikgeworICAg
IGlmIChzaXplQXZhaWxhYmxlIHx8IGF0RW5kKSB7CiAgICAgICAgIGlmIChtX2ltYWdlLT5pc051
bGwoKSkgewogICAgICAgICAgICAgbV9lcnJvck9jY3VycmVkID0gdHJ1ZTsKICAgICAgICAgICAg
IG5vdGlmeU9ic2VydmVycygpOwogICAgICAgICAgICAgQ2FjaGU6OnJlbW92ZSh0aGlzKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbm90aWZ5
T2JzZXJ2ZXJzKCk7CiAKICAgICAgICAgSW50U2l6ZSBzID0gaW1hZ2VTaXplKCk7CiAgICAgICAg
IHNldFNpemUocy53aWR0aCgpICogcy5oZWlnaHQoKSAqIDIpOyAvLyBUaGlzIGlzIHJlYWxseSBq
dXN0IGEgcm91Z2ggZXN0aW1hdGUgb2YgdGhlIGRlY29kZWQgc2l6ZS4KICAgICB9Ci0gICAgaWYg
KGVvZikgeworCisgICAgaWYgKGF0RW5kKSB7CiAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNlOwog
ICAgICAgICBjaGVja05vdGlmeSgpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZFhCTERvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRYQkxE
b2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWEJM
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpZm5kZWYg
S0hUTUxfTk9fWEJMCiAKICNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgImxvYWRlci5oIgog
I2luY2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudFdhbGtlci5oIgogI2luY2x1ZGUgImRlY29kZXIu
aCIKLQorI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC03Nyw5ICs3Nyw5IEBAIHZvaWQgQ2FjaGVkWEJMRG9jdW1lbnQ6OnNldENoYXJzZXQoIGNv
bnMKICAgICAgICAgbV9kZWNvZGVyLT5zZXRFbmNvZGluZyhjaHMubGF0aW4xKCksIERlY29kZXI6
OkVuY29kaW5nRnJvbUhUVFBIZWFkZXIpOwogfQogCi12b2lkIENhY2hlZFhCTERvY3VtZW50Ojpk
YXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9mICkKK3ZvaWQgQ2FjaGVkWEJM
RG9jdW1lbnQ6OmRhdGEoVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIGF0RW5kKQogewotICAgIGlm
ICghZW9mKQorICAgIGlmICghYXRFbmQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBhc3Nl
cnQoIW1fZG9jdW1lbnQpOwpAQCAtODgsOCArODgsOCBAQCB2b2lkIENhY2hlZFhCTERvY3VtZW50
OjpkYXRhKERlcHJlY2F0ZWRCCiAgICAgbV9kb2N1bWVudC0+cmVmKCk7CiAgICAgbV9kb2N1bWVu
dC0+b3BlbigpOwogICAgIAotICAgIG1fZG9jdW1lbnQtPndyaXRlKG1fZGVjb2Rlci0+ZGVjb2Rl
KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOwogICAgIHNldFNpemUoZGF0YS5zaXplKCkpOwor
ICAgIG1fZG9jdW1lbnQtPndyaXRlKG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEuZGF0YSgpLCBzaXpl
KCkpKTsKICAgICAKICAgICBtX2RvY3VtZW50LT5maW5pc2hQYXJzaW5nKCk7CiAgICAgbV9kb2N1
bWVudC0+Y2xvc2UoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJKHJl
dmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRPYmplY3Qu
aCIKICNpbmNsdWRlIDxraW8vZ2xvYmFsLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNyArMzcsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgRGVjb2RlcjsKIAogI2lmZGVmIEtIVE1MX1hTTFQKLSAgICBjbGFz
cyBDYWNoZWRYU0xTdHlsZVNoZWV0IDogcHVibGljIENhY2hlZE9iamVjdCB7CisgICAgY2xhc3Mg
Q2FjaGVkWFNMU3R5bGVTaGVldCA6IHB1YmxpYyBDYWNoZWRPYmplY3QKKyAgICB7CiAgICAgcHVi
bGljOgogICAgICAgICBDYWNoZWRYU0xTdHlsZVNoZWV0KERvY0xvYWRlciosIGNvbnN0IFN0cmlu
ZyYgdXJsLCBLSU86OkNhY2hlQ29udHJvbCBjYWNoZVBvbGljeSwgdGltZV90IGV4cGlyZURhdGUp
OwogCkBAIC00Niw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCopOwogICAgICAgICAKICAgICAgICAgdmly
dHVhbCB2b2lkIHNldENoYXJzZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGF0YShEZXByZWNhdGVkQnl0ZUFycmF5JiwgYm9vbCBlb2YpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBib29sIGF0RW5kKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGVycm9yKCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2No
ZWR1bGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC01Nyw5ICs1OSw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1fc2hlZXQ7CiAgICAgICAgIFJlZlB0cjxEZWNv
ZGVyPiBtX2RlY29kZXI7CiAgICAgfTsKLQogI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gS0hUTUxfQ2FjaGVkWFNMU3R5bGVTaGVldF9oCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZEltYWdlLmgJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNjEgKzI4LDYzIEBACiAjZGVmaW5l
IEtIVE1MX0NhY2hlZEltYWdlX2gKIAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgorI2luY2x1
ZGUgIkltYWdlQW5pbWF0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSA8a2h0bWxfc2V0dGluZ3MuaD4KLSNpbmNsdWRlICJJbWFnZUFuaW1hdGlvbk9ic2VydmVy
LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgRG9jTG9hZGVyOwotY2xhc3MgQ2FjaGU7Ci1jbGFzcyBJbWFnZTsKKyAgICBjbGFz
cyBEb2NMb2FkZXI7CisgICAgY2xhc3MgQ2FjaGU7CisgICAgY2xhc3MgSW1hZ2U7CiAKLWNsYXNz
IENhY2hlZEltYWdlIDogcHVibGljIENhY2hlZE9iamVjdCwgcHVibGljIEltYWdlQW5pbWF0aW9u
T2JzZXJ2ZXIgewotcHVibGljOgotICAgIENhY2hlZEltYWdlKERvY0xvYWRlciosIGNvbnN0IFN0
cmluZyAmdXJsLCBLSU86OkNhY2hlQ29udHJvbCBjYWNoZVBvbGljeSwgdGltZV90IGV4cGlyZURh
dGUpOwotICAgIHZpcnR1YWwgfkNhY2hlZEltYWdlKCk7CisgICAgY2xhc3MgQ2FjaGVkSW1hZ2Ug
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0LCBwdWJsaWMgSW1hZ2VBbmltYXRpb25PYnNlcnZlcgorICAg
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENhY2hlZEltYWdlKERvY0xvYWRlciosIGNvbnN0IFN0
cmluZyAmdXJsLCBLSU86OkNhY2hlQ29udHJvbCBjYWNoZVBvbGljeSwgdGltZV90IGV4cGlyZURh
dGUpOworICAgICAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOwogCi0gICAgSW1hZ2UqIGltYWdl
KCkgY29uc3Q7CisgICAgICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0OwogCi0gICAgYm9vbCBjYW5S
ZW5kZXIoKSBjb25zdCB7IHJldHVybiAhaXNFcnJvckltYWdlKCkgJiYgaW1hZ2VTaXplKCkud2lk
dGgoKSA+IDAgJiYgaW1hZ2VTaXplKCkuaGVpZ2h0KCkgPiAwOyB9CisgICAgICAgIGJvb2wgY2Fu
UmVuZGVyKCkgY29uc3QgeyByZXR1cm4gIWlzRXJyb3JJbWFnZSgpICYmIGltYWdlU2l6ZSgpLndp
ZHRoKCkgPiAwICYmIGltYWdlU2l6ZSgpLmhlaWdodCgpID4gMDsgfQogCi0gICAgSW50U2l6ZSBp
bWFnZVNpemUoKSBjb25zdDsgICAgLy8gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUg
aW1hZ2UKLSAgICBJbnRSZWN0IGltYWdlUmVjdCgpIGNvbnN0OyAgLy8gVGhlIHNpemUgb2YgdGhl
IGltYWdlLgorICAgICAgICBJbnRTaXplIGltYWdlU2l6ZSgpIGNvbnN0OyAgLy8gUmV0dXJucyB0
aGUgc2l6ZSBvZiB0aGUgY29tcGxldGUgaW1hZ2UuCisgICAgICAgIEludFJlY3QgaW1hZ2VSZWN0
KCkgY29uc3Q7ICAvLyBUaGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCiAKLSAgICB2aXJ0dWFsIHZvaWQg
cmVmKENhY2hlZE9iamVjdENsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBkZXJlZihDYWNoZWRP
YmplY3RDbGllbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZihDYWNoZWRPYmplY3RDbGll
bnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCopOwog
Ci0gICAgdmlydHVhbCB2b2lkIGRhdGEoRGVwcmVjYXRlZEJ5dGVBcnJheSYsIGJvb2wgYXRFbmQp
OwotICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShW
ZWN0b3I8Y2hhcj4mLCBib29sIGF0RW5kKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGVycm9yKCk7
CiAKLSAgICBib29sIGlzRXJyb3JJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JPY2N1cnJl
ZDsgfQorICAgICAgICBib29sIGlzRXJyb3JJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JP
Y2N1cnJlZDsgfQogCi0gICAgdm9pZCBzZXRTaG93QW5pbWF0aW9ucyhLSFRNTFNldHRpbmdzOjpL
QW5pbWF0aW9uQWR2aWNlKTsKKyAgICAgICAgdm9pZCBzZXRTaG93QW5pbWF0aW9ucyhLSFRNTFNl
dHRpbmdzOjpLQW5pbWF0aW9uQWR2aWNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBjaGVja05vdGlmeSgpOwotICAgIAot
ICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAg
ICB2b2lkIGNoZWNrTm90aWZ5KCk7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgY2xlYXIoKTsKLSAgICAK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3RvcEFuaW1hdGlvbihjb25zdCBJbWFnZSogaW1hZ2Up
OwotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSogaW1hZ2Up
OworICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3RvcEFuaW1hdGlvbihjb25zdCBJbWFnZSogaW1hZ2UpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqIGltYWdlKTsKIAotcHJpdmF0ZToK
LSAgICB2b2lkIG5vdGlmeU9ic2VydmVycygpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
bm90aWZ5T2JzZXJ2ZXJzKCk7CiAKLSAgICBJbWFnZSogbV9pbWFnZTsKLSAgICBpbnQgbV9kYXRh
U2l6ZTsKLSAgICAKLSAgICBib29sIG1fZXJyb3JPY2N1cnJlZCA6IDE7Ci0gICAgdW5zaWduZWQg
bV9zaG93QW5pbWF0aW9ucyA6IDI7IC8vIEtIVE1MU2V0dGluZ3M6OktBbmltYXRpb25BZHZpY2UK
KyAgICAgICAgSW1hZ2UqIG1faW1hZ2U7CisgICAgICAgIGludCBtX2RhdGFTaXplOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBtX2Vycm9yT2NjdXJyZWQgOiAxOworICAgICAgICB1bnNpZ25lZCBt
X3Nob3dBbmltYXRpb25zIDogMjsgLy8gS0hUTUxTZXR0aW5nczo6S0FuaW1hdGlvbkFkdmljZQog
Ci0gICAgZnJpZW5kIGNsYXNzIENhY2hlOwotfTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hl
OworICAgIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRYQkxEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFhCTERvY3VtZW50LmgJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkWEJMRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBA
QAogI2RlZmluZSBLSFRNTF9DYWNoZWRYQkxEb2N1bWVudF9oCiAKICNpbmNsdWRlICJDYWNoZWRP
YmplY3QuaCIKLQogI2luY2x1ZGUgPGtpby9nbG9iYWwuaD4KKyNpbmNsdWRlIDxreG1sY29yZS9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTUxLDIxICs1MSwyMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmKENhY2hlZE9iamVjdENsaWVu
dCAqY29uc3VtZXIpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoQ2FjaGVkT2JqZWN0Q2xp
ZW50ICpjb25zdW1lcik7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hhcnNl
dCggY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmY2hzICk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
YXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmLCBib29sIGVvZiApOworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2hhcnNldChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZjaHMpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBib29sIGF0RW5kKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGVycm9yKCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGUo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGNoZWNrTm90
aWZ5KCk7CiAgICAgICAgIAotcHJvdGVjdGVkOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgWEJM
OjpYQkxEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPERlY29kZXI+IG1fZGVj
b2RlcjsKICAgICB9OwogCiAjZW5kaWYKIAotfTsKK307IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmCisjZW5kaWYgLy8gS0hUTUxfQ2FjaGVkWEJMRG9jdW1lbnRfaApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDEzNjUzKQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJLV1FMb2FkZXIuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKICNp
bmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OCw5ICs4OSw5IEBAIHZvaWQgQ2FjaGVkQ1NTU3R5
bGVTaGVldDo6c2V0Q2hhcnNldChjb24KICAgICB9CiB9CiAKLXZvaWQgQ2FjaGVkQ1NTU3R5bGVT
aGVldDo6ZGF0YShEZXByZWNhdGVkQnl0ZUFycmF5JiBkYXRhLCBib29sIGVvZiApCit2b2lkIENh
Y2hlZENTU1N0eWxlU2hlZXQ6OmRhdGEoVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIGF0RW5kKQog
ewotICAgIGlmICghZW9mKQorICAgIGlmICghYXRFbmQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHNldFNpemUoZGF0YS5zaXplKCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3BwCShyZXZp
c2lvbiAxMzY1MykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnRXYWxr
ZXIuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNp
bmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04
OCwxMCArODksMTEgQEAgdm9pZCBDYWNoZWRTY3JpcHQ6OnNldENoYXJzZXQoY29uc3QgRGVwcgog
ICAgICAgICBtX2VuY29kaW5nID0gZW5jb2Rpbmc7CiB9CiAKLXZvaWQgQ2FjaGVkU2NyaXB0Ojpk
YXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9mICkKK3ZvaWQgQ2FjaGVkU2Ny
aXB0OjpkYXRhKFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCBhdEVuZCkKIHsKLSAgICBpZiAoIWVv
ZikKKyAgICBpZiAoIWF0RW5kKQogICAgICAgICByZXR1cm47CisKICAgICBzZXRTaXplKGRhdGEu
c2l6ZSgpKTsKICAgICBtX3NjcmlwdCA9IFN0cmluZyhtX2VuY29kaW5nLnRvVW5pY29kZShkYXRh
LmRhdGEoKSwgc2l6ZSgpKSk7CiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9SZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5o
CShyZXZpc2lvbiAxMzY1MykKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMjIgKzI3LDE5IEBACiAjaWZuZGVmIEtIVE1MX1JlcXVlc3RfaAogI2RlZmlu
ZSBLSFRNTF9SZXF1ZXN0X2gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgorI2luY2x1
ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
Q2FjaGVkT2JqZWN0OwogICAgIGNsYXNzIERvY0xvYWRlcjsKIAotICAgIHRlbXBsYXRlIDxjbGFz
cyBUPiBjbGFzcyBEZXByZWNhdGVkQXJyYXk7Ci0gICAgdHlwZWRlZiBEZXByZWNhdGVkQXJyYXk8
Y2hhcj4gRGVwcmVjYXRlZEJ5dGVBcnJheTsKLQogICAgIGNsYXNzIFJlcXVlc3QgewogICAgIHB1
YmxpYzoKICAgICAgICAgUmVxdWVzdChEb2NMb2FkZXIqLCBDYWNoZWRPYmplY3QqLCBib29sIGlu
Y3JlbWVudGFsKTsKICAgICAgICAgflJlcXVlc3QoKTsKIAogICAgICAgICBib29sIGluY3JlbWVu
dGFsOwotICAgICAgICBEZXByZWNhdGVkQnl0ZUFycmF5IG1fYnVmZmVyOworICAgICAgICBWZWN0
b3I8Y2hhcj4gbV9idWZmZXI7CiAgICAgICAgIENhY2hlZE9iamVjdCogb2JqZWN0OwogICAgICAg
ICBEb2NMb2FkZXIqIG1fZG9jTG9hZGVyOwogICAgICAgICBib29sIG11bHRpcGFydDsK
</data>
<flag name="review"
          id="2038"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7964</attachid>
            <date>2006-04-25 15:55:06 -0700</date>
            <delta_ts>2006-05-07 15:17:26 -0700</delta_ts>
            <desc>patch the fourth</desc>
            <filename>vectorpatch.diff</filename>
            <type>text/plain</type>
            <size>65685</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vSW50UG9pbnRBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vSW50UG9pbnRBcnJheS5oCShyZXZpc2lvbiAxNDA2OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vSW50UG9pbnRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwzMiArMjYs
MjggQEAKICNpZm5kZWYgSU5UUE9JTlRBUlJBWV9IXwogI2RlZmluZSBJTlRQT0lOVEFSUkFZX0hf
CiAKLSNpbmNsdWRlICJEZXByZWNhdGVkQXJyYXkuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEludFJlY3Q7CisgICAgY2xhc3MgSW50UmVjdDsKIAotY2xhc3MgSW50UG9pbnRBcnJheSA6
IHB1YmxpYyBEZXByZWNhdGVkQXJyYXk8SW50UG9pbnQ+IHsKLXB1YmxpYzoKLSAgICBJbnRQb2lu
dEFycmF5KCkgeyB9Ci0gICAgSW50UG9pbnRBcnJheShpbnQgc2l6ZSkgOiBEZXByZWNhdGVkQXJy
YXk8SW50UG9pbnQ+KHNpemUpIHsgfQotICAgIEludFBvaW50QXJyYXkoaW50LCBjb25zdCBpbnQg
Kik7Ci0gICAgCi0gICAgSW50UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKLSAgICAKLSAgICBJ
bnRQb2ludEFycmF5IGNvcHkoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHBvaW50KHVuc2lnbmVk
LCBpbnQgKiwgaW50ICopOwotICAgIHZvaWQgc2V0UG9pbnQodW5zaWduZWQsIGludCwgaW50KTsK
LSAgICBib29sIHNldFBvaW50cyhpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KTsKLSAgICBib29sIHNldFBvaW50cyhpbnQgblBvaW50cywgY29uc3QgaW50ICpwb2lu
dHMpOyAgICAKLX07CisgICAgY2xhc3MgSW50UG9pbnRBcnJheSA6IHB1YmxpYyBWZWN0b3I8SW50
UG9pbnQ+CisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW50UG9pbnRBcnJheSgpIHsgfQor
ICAgICAgICBJbnRQb2ludEFycmF5KGludCBzaXplKSA6IFZlY3RvcjxJbnRQb2ludD4oc2l6ZSkg
eyB9CisgICAgICAgIEludFBvaW50QXJyYXkoaW50IG5Qb2ludHMsIGNvbnN0IGludCogcG9pbnRz
KSB7IHNldFBvaW50cyhuUG9pbnRzLCBwb2ludHMpOyB9CisgICAgICAgIAorICAgICAgICBJbnRS
ZWN0IGJvdW5kaW5nUmVjdCgpIGNvbnN0OworICAgICAgICAgICAgCisgICAgICAgIHZvaWQgcG9p
bnQodW5zaWduZWQgaW5kZXgsIGludCogeCwgaW50KiB5KTsKKyAgICAgICAgdm9pZCBzZXRQb2lu
dCh1bnNpZ25lZCBpbmRleCwgaW50IHgsIGludCB5KTsKKyAgICAgICAgYm9vbCBzZXRQb2ludHMo
aW50IG5Qb2ludHMsIGNvbnN0IGludCogcG9pbnRzKTsgICAgCisgICAgICAgIGJvb2wgc2V0UG9p
bnRzKGludCB4MCwgaW50IHkwLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsIGludCB4
MywgaW50IHkzKTsKKyAgICB9OwogCi19Cit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAotLy8gRklY
TUU6IFJlbW92ZSB3aGVuIGV2ZXJ5dGhpbmcgaXMgaW4gdGhlIFdlYkNvcmUgbmFtZXNwYWNlLgot
dXNpbmcgV2ViQ29yZTo6SW50UG9pbnRBcnJheTsKLQotI2VuZGlmCisjZW5kaWYgLy8gSU5UUE9J
TlRBUlJBWV9IXwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5jb2RpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1RleHRFbmNvZGluZy5oCShyZXZpc2lvbiAxNDA2OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vVGV4dEVuY29kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDcgKzg1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBEZXByZWNhdGVkQ1N0cmlu
ZyBmcm9tVW5pY29kZShjb25zdCBEZXByZWNhdGVkU3RyaW5nJiwgYm9vbCBhbGxvd0VudGl0aWVz
ID0gZmFsc2UpIGNvbnN0OwogCiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdG9Vbmljb2RlKGNv
bnN0IGNoYXIqLCBpbnQgbGVuZ3RoKSBjb25zdDsKLSAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0
b1VuaWNvZGUoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSYsIGludCBsZW5ndGgpIGNvbnN0Owog
CiAgICAgICAgIFRleHRFbmNvZGluZ0lEIGVuY29kaW5nSUQoKSBjb25zdCB7IHJldHVybiBtX2Vu
Y29kaW5nSUQ7IH0KICAgICAgICAgVGV4dEVuY29kaW5nRmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJl
dHVybiBtX2ZsYWdzOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ludFBvaW50QXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vSW50UG9pbnRBcnJheS5jcHAJKHJldmlz
aW9uIDE0MDY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9JbnRQb2ludEFycmF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNzcgKzI1LDc5IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJbnRQb2ludEFycmF5LmgiCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVj
dG9yLmg+CiAKLUludFBvaW50QXJyYXk6OkludFBvaW50QXJyYXkoaW50IG5Qb2ludHMsIGNvbnN0
IGludCAqcG9pbnRzKQotewotICAgIHNldFBvaW50cyhuUG9pbnRzLCBwb2ludHMpOwotfQordXNp
bmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKIAotSW50UG9pbnRBcnJheSBJbnRQb2ludEFy
cmF5Ojpjb3B5KCkgY29uc3QKLXsKLSAgICBJbnRQb2ludEFycmF5IGNvcHk7Ci0gICAgY29weS5k
dXBsaWNhdGUoKnRoaXMpOwotICAgIHJldHVybiBjb3B5OwotfQorbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBJbnRSZWN0IEludFBvaW50QXJyYXk6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7Ci0gICAg
aW50IG5Qb2ludHMgPSBjb3VudCgpOwotICAgIAotICAgIGlmIChuUG9pbnRzIDwgMSkgcmV0dXJu
IEludFJlY3QoKTsKLSAgICAKLSAgICBpbnQgbWluWCA9IElOVF9NQVgsIG1heFggPSAwOwotICAg
IGludCBtaW5ZID0gSU5UX01BWCwgbWF4WSA9IDA7CisgICAgaW50IG5Qb2ludHMgPSBzaXplKCk7
CiAgICAgCisgICAgaWYgKG5Qb2ludHMgPCAxKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOwor
CisgICAgaW50IG1pblggPSBJTlRfTUFYOworICAgIGludCBtYXhYID0gMDsKKyAgICBpbnQgbWlu
WSA9IElOVF9NQVg7CisgICAgaW50IG1heFkgPSAwOworCiAgICAgd2hpbGUgKG5Qb2ludHMgPiAw
KSB7CiAgICAgICAgIEludFBvaW50IHAgPSBhdChuUG9pbnRzKTsKLSAgICAgICAgaW50IHggPSBw
LngoKSwgeSA9IHAueSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0g
eDsKLSAgICAgICAgaWYgKHggPiBtYXhYKSBtYXhYID0geDsKLSAgICAgICAgaWYgKHkgPCBtaW5Z
KSBtaW5ZID0geTsKLSAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTsKLSAgICAgICAgCisg
ICAgICAgIGludCB4ID0gcC54KCk7CisgICAgICAgIGludCB5ID0gcC55KCk7CisKKyAgICAgICAg
bWluWCA9IG1pbih4LCBtaW5YKTsKKyAgICAgICAgbWF4WCA9IG1heCh4LCBtYXhYKTsKKyAgICAg
ICAgbWluWSA9IG1pbih5LCBtaW5ZKTsKKyAgICAgICAgbWF4WSA9IG1heCh5LCBtYXhZKTsKKwog
ICAgICAgICBuUG9pbnRzLS07Ci0gICAgfQorICAgICB9CiAgICAgCiAgICAgcmV0dXJuIEludFJl
Y3QobWluWCwgbWluWSwgbWF4WCAtIG1pblggKyAxLCBtYXhZIC0gbWluWSArIDEpOwogfQogCi12
b2lkIEludFBvaW50QXJyYXk6OnBvaW50KHVuc2lnbmVkIGluZGV4LCBpbnQgKngsIGludCAqeSkK
K3ZvaWQgSW50UG9pbnRBcnJheTo6cG9pbnQodW5zaWduZWQgaW5kZXgsIGludCogeCwgaW50KiB5
KQogewogICAgIEludFBvaW50IHAgPSBhdChpbmRleCk7CiAgICAgKnggPSBwLngoKTsKICAgICAq
eSA9IHAueSgpOwogfQogCi12b2lkIEludFBvaW50QXJyYXk6OnNldFBvaW50KCB1bnNpZ25lZCBp
bmRleCwgaW50IHgsIGludCB5ICkKK3ZvaWQgSW50UG9pbnRBcnJheTo6c2V0UG9pbnQodW5zaWdu
ZWQgaW5kZXgsIGludCB4LCBpbnQgeSkKIHsKLSAgICBEZXByZWNhdGVkQXJyYXk8SW50UG9pbnQ+
OjphdCggaW5kZXggKSA9IEludFBvaW50KCB4LCB5ICk7CisgICAgYXQoaW5kZXgpID0gSW50UG9p
bnQoeCwgeSk7CiB9CiAKLQotYm9vbCBJbnRQb2ludEFycmF5OjpzZXRQb2ludHMoIGludCBuUG9p
bnRzLCBjb25zdCBpbnQgKnBvaW50cyApCi17Ci0gICAgaWYgKCAhcmVzaXplKG5Qb2ludHMpICkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAoIG5Qb2lu
dHMtLSApIHsgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBhcnJheSBvZiBwb2ludHMKLSAgICAg
ICAgc2V0UG9pbnQoIGkrKywgKnBvaW50cywgKihwb2ludHMrMSkgKTsKLSAgICAgICAgcG9pbnRz
Kys7Ci0gICAgICAgIHBvaW50cysrOworYm9vbCBJbnRQb2ludEFycmF5OjpzZXRQb2ludHMoaW50
IG5Qb2ludHMsIGNvbnN0IGludCogcG9pbnRzKQorIHsKKyAgICBjbGVhcigpOworICAgIHJlc2Vy
dmVDYXBhY2l0eShuUG9pbnRzKTsKKyAgICB3aGlsZSAoblBvaW50cy0tKSB7CisgICAgICAgIGFw
cGVuZChJbnRQb2ludCgqcG9pbnRzLCAqKHBvaW50cyArIDEpKSk7CisgICAgICAgIHBvaW50cyAr
PSAyOwogICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEludFBvaW50QXJyYXk6
OnNldFBvaW50cyggaW50IG5Qb2ludHMsIGludCB4MCwgaW50IHkwLCBpbnQgeDEsIGludCB5MSwg
aW50IHgyLCBpbnQgeTIsIGludCB4MywgaW50IHkzKQorYm9vbCBJbnRQb2ludEFycmF5OjpzZXRQ
b2ludHMoaW50IHgwLCBpbnQgeTAsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50
IHgzLCBpbnQgeTMpCiB7Ci0gICAgaWYgKCAhcmVzaXplKG5Qb2ludHMpICkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHNldFBvaW50KCAwLCB4MCwgeTAgKTsKLSAgICBzZXRQb2ludCggMSwg
eDEsIHkxICk7Ci0gICAgc2V0UG9pbnQoIDIsIHgyLCB5MiApOwotICAgIHNldFBvaW50KCAzLCB4
MywgeTMgKTsKKyAgICBjbGVhcigpOworICAgIHJlc2VydmVDYXBhY2l0eSg0KTsKKyAgICBhcHBl
bmQoSW50UG9pbnQoeDAsIHkwKSk7CisgICAgYXBwZW5kKEludFBvaW50KHgxLCB5MSkpOworICAg
IGFwcGVuZChJbnRQb2ludCh4MiwgeTIpKTsKKyAgICBhcHBlbmQoSW50UG9pbnQoeDMsIHkzKSk7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2NnL1BhdGhDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9jZy9QYXRoQ0cuY3BwCShyZXZpc2lvbiAxNDA2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Y2cvUGF0aENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBQYXRoOjpQYXRo
KGNvbnN0IEludFBvaW50QXJyYXkmIGFycikKIHsKICAgICBDR011dGFibGVQYXRoUmVmIHBhdGgg
PSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CiAgICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwg
YXJyWzBdLngoKSwgYXJyWzBdLnkoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFy
ci5jb3VudCgpOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGFyci5zaXplKCk7
ICsraSkKICAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgYXJyW2ldLngoKSwg
YXJyW2ldLnkoKSk7CiAgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKHBhdGgpOwogICAgIG1fcGF0aCA9
IHBhdGg7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1RleHRFbmNvZGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UZXh0RW5jb2RpbmcuY3BwCShyZXZpc2lvbiAxNDA2OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vVGV4dEVuY29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsMTYgKzUzLDExIEBAIFFDaGFyIFRleHRFbmNvZGluZzo6YmFja3NsYXNoQXNDdXJyZW5jeVMK
ICAgICByZXR1cm4gJ1xcJzsKIH0KIAotRGVwcmVjYXRlZFN0cmluZyBUZXh0RW5jb2Rpbmc6OnRv
VW5pY29kZShjb25zdCBjaGFyICpjaHMsIGludCBsZW4pIGNvbnN0CitEZXByZWNhdGVkU3RyaW5n
IFRleHRFbmNvZGluZzo6dG9Vbmljb2RlKGNvbnN0IGNoYXIqIGNocywgaW50IGxlbikgY29uc3QK
IHsKICAgICByZXR1cm4gU3RyZWFtaW5nVGV4dERlY29kZXIoKnRoaXMpLnRvVW5pY29kZShjaHMs
IGxlbiwgdHJ1ZSk7CiB9CiAKLURlcHJlY2F0ZWRTdHJpbmcgVGV4dEVuY29kaW5nOjp0b1VuaWNv
ZGUoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSAmcWJhLCBpbnQgbGVuKSBjb25zdAotewotICAg
IHJldHVybiBTdHJlYW1pbmdUZXh0RGVjb2RlcigqdGhpcykudG9Vbmljb2RlKHFiYSwgbGVuLCB0
cnVlKTsKLX0KLQogLy8gV2UnZCBsaWtlIHRvIHVzZSBJQ1UgZm9yIHRoaXMgb24gT1MgWCBhcyB3
ZWxsIGV2ZW50dWFsbHksIGJ1dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQogLy8gaXQgY292ZXJzIGFs
bCB0aGUgZW5jb2RpbmdzIHRoYXQgd2UgbmVlZAogI2lmbmRlZiBfX0FQUExFX18KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5oCShyZXZpc2lvbiAxNDA2OCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTEsNyArNDEx
LDYgQEAgcHVibGljOgogCiAgICAgRGVwcmVjYXRlZFN0cmluZygpOwogICAgIERlcHJlY2F0ZWRT
dHJpbmcoUUNoYXIpOwotICAgIERlcHJlY2F0ZWRTdHJpbmcoY29uc3QgRGVwcmVjYXRlZEJ5dGVB
cnJheSAmKTsKICAgICBEZXByZWNhdGVkU3RyaW5nKGNvbnN0IFFDaGFyICosIHVuc2lnbmVkKTsK
ICAgICBEZXByZWNhdGVkU3RyaW5nKGNvbnN0IGNoYXIgKik7CiAgICAgRGVwcmVjYXRlZFN0cmlu
Zyhjb25zdCBjaGFyICosIGludCBsZW4pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNh
dGVkU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRT
dHJpbmcuY3BwCShyZXZpc2lvbiAxNDA2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRl
ZFN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MywxNSArNjQzLDYgQEAgRGVwcmVjYXRl
ZFN0cmluZzo6RGVwcmVjYXRlZFN0cmluZyhRQ2hhcgogICAgIH0KIH0KIAotRGVwcmVjYXRlZFN0
cmluZzo6RGVwcmVjYXRlZFN0cmluZyhjb25zdCBEZXByZWNhdGVkQnl0ZUFycmF5ICZxYmEpCi17
Ci0gICAgZGF0YUhhbmRsZSA9IGFsbG9jYXRlSGFuZGxlKCk7Ci0KLSAgICAvLyBDb3B5IGRhdGEK
LSAgICAqZGF0YUhhbmRsZSA9ICZpbnRlcm5hbERhdGE7Ci0gICAgaW50ZXJuYWxEYXRhLmluaXRp
YWxpemUocWJhLmRhdGEoKSxxYmEuc2l6ZSgpKTsKLX0KLQogRGVwcmVjYXRlZFN0cmluZzo6RGVw
cmVjYXRlZFN0cmluZyhjb25zdCBRQ2hhciAqdW5pY29kZSwgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIGlmICghdW5pY29kZSAmJiAhbGVuZ3RoKSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nh
aXJvL3BpeG1hbi9zcmMvcGl4cmVnaW9uLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9jYWlyby9waXhtYW4vc3JjL3BpeHJlZ2lvbi5jCShyZXZpc2lvbiAxNDA2OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vY2Fpcm8vcGl4bWFuL3NyYy9waXhyZWdpb24uYwkod29ya2luZyBjb3B5KQpA
QCAtMTQ2Miw3ICsxNDYyLDcgQEAgcGl4bWFuX3JlZ2lvbl92YWxpZGF0ZShiYWRyZWcsIHBPdmVy
bGFwKQogICAgIH0gUmVnaW9uSW5mbzsKIAogCSAgICAgaW50CW51bVJlY3RzOyAgIC8qIE9yaWdp
bmFsIG51bVJlY3RzIGZvciBiYWRyZWcJICAgICovCi0JICAgICBSZWdpb25JbmZvICpyaTsJICAg
IC8qIERlcHJlY2F0ZWRBcnJheSBvZiBjdXJyZW50IHJlZ2lvbnMJCSAgICAqLworCSAgICAgUmVn
aW9uSW5mbyAqcmk7CSAgICAvKiBBcnJheSBvZiBjdXJyZW50IHJlZ2lvbnMJCSAgICAqLwogICAg
IAkgICAgIGludAludW1SSTsgICAgICAvKiBOdW1iZXIgb2YgZW50cmllcyB1c2VkIGluIHJpCSAg
ICAqLwogCSAgICAgaW50CXNpemVSSTsJICAgIC8qIE51bWJlciBvZiBlbnRyaWVzIGF2YWlsYWJs
ZSBpbiByaSAgICAqLwogCSAgICAgaW50CWk7CSAgICAvKiBJbmRleCBpbnRvIHJlY3RzCQkJICAg
ICovCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0MDY4KQor
KysgV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAicmVuZGVyX2Zvcm0uaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05Niw4ICs5Nyw4IEBAIGludCBIVE1MT3B0
aW9uRWxlbWVudDo6aW5kZXgoKSBjb25zdAogICAgIC8vIHdlIHdvbid0IGZvcmdldCB0byB1cGRh
dGUgYSBtZW1iZXIgdmFyaWFibGUgaW4gc29tZSBjYXNlcy4uLgogICAgIEhUTUxTZWxlY3RFbGVt
ZW50ICpzZWxlY3QgPSBnZXRTZWxlY3QoKTsKICAgICBpZiAoc2VsZWN0KSB7Ci0gICAgICAgIERl
cHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsK
LSAgICAgICAgaW50IGwgPSBpdGVtcy5jb3VudCgpOworICAgICAgICBWZWN0b3I8SFRNTEVsZW1l
bnQqPiBpdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAgICAgIGludCBsID0gaXRlbXMu
c2l6ZSgpOwogICAgICAgICBpbnQgb3B0aW9uSW5kZXggPSAwOwogICAgICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFt
ZShvcHRpb25UYWcpKSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDE0MDY4KQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJfZm9ybS5oIgor
I2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTgyLDcgKzgzLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RlZEluZGV4KCkgYwog
ewogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBvcHRpb24gc2VsZWN0ZWQK
ICAgICB1bnNpZ25lZCBvID0gMDsKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBp
dGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlz
dEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7
IGkrKykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7
CiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tp
XSktPnNlbGVjdGVkKCkpCkBAIC05Niw3ICs5Nyw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6
c2VsZWN0ZWRJbmRleCgpIGMKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5k
ZXgoIGludCAgaW5kZXggKQogewogICAgIC8vIGRlc2VsZWN0IGFsbCBvdGhlciBvcHRpb25zIGFu
ZCBzZWxlY3Qgb25seSB0aGUgbmV3IG9uZQotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVu
dCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMg
PSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdEluZGV4OwogICAgIGZvciAobGlzdEluZGV4ID0g
MDsgbGlzdEluZGV4IDwgaW50KGl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7CiAgICAgICAg
IGlmIChpdGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkKQEAgLTExMyw3
ICsxMTQsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAg
aW50IGxlbiA9IDA7CiAgICAgdW5zaWduZWQgaTsKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVs
ZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpCiAgICAg
ICAgICAgICBsZW4rKzsKQEAgLTEzOCw3ICsxMzksNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50
OjpyZW1vdmUoaW50IGluZGV4CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW50IGxp
c3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KGluZGV4KTsKIAotICAgIERlcHJlY2F0ZWRBcnJh
eTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVt
ZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpZiAobGlzdEluZGV4IDwgMCB8fCBpbmRl
eCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuOyAvLyAjIyMgd2hhdCBzaG91
bGQgd2UgZG8gPyByZW1vdmUgdGhlIGxhc3QgaXRlbT8KIApAQCAtMTUwLDcgKzE1MSw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlbW92ZShpbnQgaW5kZXgKIFN0cmluZyBIVE1MU2VsZWN0
RWxlbWVudDo6dmFsdWUoKQogewogICAgIHVuc2lnbmVkIGk7Ci0gICAgRGVwcmVjYXRlZEFycmF5
PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1l
bnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykgewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcp
ICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgp
KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRl
bXNbaV0pLT52YWx1ZSgpOwpAQCAtMTY0LDcgKzE2NSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldFZhbHVlKGNvbnN0IFMKICAgICAgICAgcmV0dXJuOwogICAgIC8vIGZpbmQgdGhlIG9w
dGlvbiB3aXRoIHZhbHVlKCkgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhcmFtZXRlcgogICAgIC8vIGFu
ZCBtYWtlIGl0IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KLSAgICBEZXByZWNhdGVkQXJyYXk8SFRN
TEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgaSsrKQogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25U
YWcpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT52YWx1ZSgp
ID09IHZhbHVlKSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+
KGl0ZW1zW2ldKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CkBAIC0xNzQsOSArMTc1LDkgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgUwogCiBEZXByZWNhdGVkU3RyaW5nIEhU
TUxTZWxlY3RFbGVtZW50OjpzdGF0ZSgpCiB7Ci0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVt
ZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogCi0gICAgaW50IGwgPSBpdGVtcy5jb3VudCgpOworICAgIGludCBs
ID0gaXRlbXMuc2l6ZSgpOwogICAgIERlcHJlY2F0ZWRTdHJpbmcgc3RhdGU7CiAgICAgZm9yKGlu
dCBpID0gMDsgaSA8IGw7IGkrKykKICAgICAgICAgaWYoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShv
cHRpb25UYWcpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT5z
ZWxlY3RlZCgpKQpAQCAtMjAwLDkgKzIwMSw5IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJl
c3RvcmVTdGF0ZShEZXAKICAgICAgICAgLy9zdGF0ZVswXSA9ICdYJzsKICAgICB9CiAKLSAgICBE
ZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZl
Y3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAKLSAgICBpbnQgbCA9IGl0
ZW1zLmNvdW50KCk7CisgICAgaW50IGwgPSBpdGVtcy5zaXplKCk7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsOyBpKyspIHsKICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0
aW9uVGFnKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9lID0gc3RhdGljX2Nh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSk7CkBAIC0yODAsNyArMjgxLDcgQEAgUmVu
ZGVyT2JqZWN0ICpIVE1MU2VsZWN0RWxlbWVudDo6Y3JlYXRlUgogYm9vbCBIVE1MU2VsZWN0RWxl
bWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBsaXN0LCBib29sKQogewogICAgIGJv
b2wgc3VjY2Vzc2Z1bCA9IGZhbHNlOwotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBs
aXN0SXRlbXMoKTsKIAogICAgIHVuc2lnbmVkIGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgaSsrKSB7CkBAIC0zMTEsNyArMzEyLDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVu
dDo6YXBwZW5kRm9ybURhdGEoRgogCiBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblRvTGlz
dEluZGV4KGludCBvcHRpb25JbmRleCkgY29uc3QKIHsKLSAgICBEZXByZWNhdGVkQXJyYXk8SFRN
TEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKG9wdGlvbkluZGV4IDwgMCB8fCBvcHRpb25J
bmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC0zMjks
NyArMzMwLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25Ub0xpc3RJbmRleAogCiBp
bnQgSFRNTFNlbGVjdEVsZW1lbnQ6Omxpc3RUb09wdGlvbkluZGV4KGludCBsaXN0SW5kZXgpIGNv
bnN0CiB7Ci0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRl
bXMoKTsKKyAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAg
IGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSB8fAog
ICAgICAgICAhaXRlbXNbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpCiAgICAg
ICAgIHJldHVybiAtMTsKQEAgLTM1MCwzMiArMzUxLDI4IEBAIFBhc3NSZWZQdHI8SFRNTE9wdGlv
bnNDb2xsZWN0aW9uPiBIVE1MU2UKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJ
dGVtcygpCiB7CiAgICAgTm9kZSogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKLSAgICBtX2xpc3RJ
dGVtcy5yZXNpemUoMCk7CisgICAgbV9saXN0SXRlbXMuY2xlYXIoKTsKICAgICBIVE1MT3B0aW9u
RWxlbWVudCogZm91bmRTZWxlY3RlZCA9IDA7Ci0gICAgd2hpbGUoY3VycmVudCkgeworICAgIHdo
aWxlIChjdXJyZW50KSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKG9wdGdyb3Vw
VGFnKSAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgICAgIC8vICMjIyB3aGF0
IGlmIG9wdGdyb3VwIGNvbnRhaW5zIGp1c3QgY29tbWVudHM/IGRvbid0IHdhbnQgb25lIG9mIG5v
IG9wdGlvbnMgaW4gaXQuLi4KLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJ
dGVtcy5zaXplKCkrMSk7Ci0gICAgICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXpl
KCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGN1cnJlbnQpOworICAgICAgICAgICAg
bV9saXN0SXRlbXMuYXBwZW5kKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oY3VycmVudCkpOwog
ICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7Ci0gICAgICAgICAg
ICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6ZSgpKzEpOwotICAgICAgICAgICAg
bV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnQqPihjdXJyZW50KTsKKyAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KGN1cnJlbnQpKTsKICAgICAgICAgICAgIGlmICghZm91bmRTZWxlY3Rl
ZCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMSkgewogICAgICAgICAgICAgICAgIGZvdW5k
U2VsZWN0ZWQgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGN1cnJlbnQpOwogICAg
ICAgICAgICAgICAgIGZvdW5kU2VsZWN0ZWQtPm1fc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZm91bmRTZWxlY3RlZCAmJiAhbV9tdWx0aXBsZSAm
JiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGN1cnJlbnQpLT5zZWxlY3RlZCgpKSB7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kU2VsZWN0ZWQgJiYgIW1fbXVsdGlwbGUgJiYg
c3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihjdXJyZW50KS0+c2VsZWN0ZWQoKSkgewog
ICAgICAgICAgICAgICAgIGZvdW5kU2VsZWN0ZWQtPm1fc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICBmb3VuZFNlbGVjdGVkID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQq
PihjdXJyZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoY3VycmVu
dC0+aGFzVGFnTmFtZShoclRhZykpIHsKLSAgICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZSht
X2xpc3RJdGVtcy5zaXplKCkrMSk7Ci0gICAgICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVt
cy5zaXplKCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGN1cnJlbnQpOwotICAgICAg
ICB9Ci0gICAgICAgIE5vZGUgKnBhcmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICAg
ICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoaHJUYWcpKQorICAgICAgICAgICAgbV9saXN0SXRl
bXMuYXBwZW5kKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oY3VycmVudCkpOworCisgICAgICAg
IE5vZGUqIHBhcmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKICAgICAgICAgY3VycmVudCA9
IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGlmICghY3VycmVudCkgewogICAgICAg
ICAgICAgaWYgKHBhcmVudCAhPSB0aGlzKQpAQCAtNDAyLDcgKzM5OSw3IEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnNldFJlY2FsY0xpc3RJdGUKIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
cmVzZXQoKQogewotICAgIERlcHJlY2F0ZWRBcnJheTxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlz
dEl0ZW1zKCk7CisgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsK
ICAgICB1bnNpZ25lZCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykg
ewogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7CkBAIC00
MjAsNyArNDE3LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6bm90aWZ5T3B0aW9uU2VsZQog
ewogICAgIGlmIChzZWxlY3RlZCAmJiAhbV9tdWx0aXBsZSkgewogICAgICAgICAvLyBkZXNlbGVj
dCBhbGwgb3RoZXIgb3B0aW9ucwotICAgICAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQq
PiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgICAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgICAgICB1bnNpZ25lZCBpOwogICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKG9wdGlvblRhZykpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2
aXNpb24gMTQwNjgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBIVE1MX0hUTUxTZWxlY3RFbGVtZW50
SW1wbF9ICiAKICNpbmNsdWRlICJIVE1MR2VuZXJpY0Zvcm1FbGVtZW50LmgiCisjaW5jbHVkZSA8
a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTQsNyArOTUs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFJlY2FsY0xpc3RJdGVtcygpOwogCi0gICAgRGVw
cmVjYXRlZEFycmF5PEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zKCkgY29uc3QgeworICAgIFZlY3Rv
cjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcygpIGNvbnN0CisgICAgewogICAgICAgICBpZiAobV9y
ZWNhbGNMaXN0SXRlbXMpCiAgICAgICAgICAgICBjb25zdF9jYXN0PEhUTUxTZWxlY3RFbGVtZW50
Kj4odGhpcyktPnJlY2FsY0xpc3RJdGVtcygpOwogICAgICAgICByZXR1cm4gbV9saXN0SXRlbXM7
CkBAIC0xMTIsNyArMTE0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHJlY2FsY0xp
c3RJdGVtcygpOwogCi0gICAgbXV0YWJsZSBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBt
X2xpc3RJdGVtczsKKyAgICBtdXRhYmxlIFZlY3RvcjxIVE1MRWxlbWVudCo+IG1fbGlzdEl0ZW1z
OwogICAgIGludCBtX21pbndpZHRoOwogICAgIGludCBtX3NpemU7CiAgICAgYm9vbCBtX211bHRp
cGxlOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNDA2OCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIktXUVdN
YXRyaXguaCIKICNpbmNsdWRlICJLV1FUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8YWxnb3JpdGht
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC05NjIsNTUgKzk2Myw1MiBAQCB2b2lkIFJl
bmRlck9iamVjdDo6ZHJhd0JvcmRlcihHcmFwaGljc0NvCiAgICAgY2FzZSBJTlNFVDoKICAgICAg
ICAgaWYocyA9PSBCU1RvcCB8fCBzID09IEJTTGVmdCkKICAgICAgICAgICAgIGMgPSBjLmRhcmso
KTsKLQogICAgICAgICAvKiBub2JyZWFrOyAqLwogICAgIGNhc2UgT1VUU0VUOgogICAgICAgICBp
ZihzdHlsZSA9PSBPVVRTRVQgJiYgKHMgPT0gQlNCb3R0b20gfHwgcyA9PSBCU1JpZ2h0KSkKICAg
ICAgICAgICAgIGMgPSBjLmRhcmsoKTsKICAgICAgICAgLyogbm9icmVhazsgKi8KICAgICBjYXNl
IFNPTElEOgotICAgICAgICBJbnRQb2ludEFycmF5IHF1YWQoNCk7CisgICAgewogICAgICAgICBw
LT5zZXRQZW4oUGVuOjpOb1Blbik7CiAgICAgICAgIHAtPnNldEZpbGxDb2xvcihjLnJnYigpKTsK
ICAgICAgICAgQVNTRVJUKHgyID49IHgxKTsKICAgICAgICAgQVNTRVJUKHkyID49IHkxKTsKLSAg
ICAgICAgaWYgKGFkamJ3MT09MCAmJiBhZGpidzIgPT0gMCkgewotICAgICAgICAgICAgcC0+ZHJh
d1JlY3QoSW50UmVjdCh4MSx5MSx4Mi14MSx5Mi15MSkpOworICAgICAgICBpZiAoIWFkamJ3MSAm
JiAhYWRqYncyKSB7CisgICAgICAgICAgICBwLT5kcmF3UmVjdChJbnRSZWN0KHgxLCB5MSwgeDIg
LSB4MSwgeTIgLSB5MSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IHN3aXRjaChzKSB7CisgICAgICAgIEludFBvaW50QXJyYXkgcXVhZCg0KTsKKyAgICAgICAgc3dp
dGNoIChzKSB7CiAgICAgICAgIGNhc2UgQlNUb3A6Ci0gICAgICAgICAgICBxdWFkLnNldFBvaW50
cyg0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeDErbWF4KC1hZGpidzEsMCksIHkxLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeDErbWF4KCBhZGpidzEsMCksIHkyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeDItbWF4KCBhZGpidzIsMCksIHkyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeDItbWF4KC1hZGpidzIsMCksIHkxKTsKKyAgICAgICAgICAgIHF1YWQu
c2V0UG9pbnRzKHgxICsgbWF4KC1hZGpidzEsIDApLCB5MSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHgxICsgbWF4KCBhZGpidzEsIDApLCB5MiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHgyIC0gbWF4KCBhZGpidzIsIDApLCB5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHgyIC0gbWF4KC1hZGpidzIsIDApLCB5MSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBCU0JvdHRvbToKLSAgICAgICAgICAgIHF1YWQuc2V0UG9pbnRzKDQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICB4MSttYXgoIGFkamJ3MSwwKSwgeTEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICB4MSttYXgoLWFkamJ3MSwwKSwgeTIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICB4Mi1tYXgoLWFkamJ3MiwwKSwgeTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB4
Mi1tYXgoIGFkamJ3MiwwKSwgeTEpOworICAgICAgICAgICAgcXVhZC5zZXRQb2ludHMoeDEgKyBt
YXgoIGFkamJ3MSwgMCksIHkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEgKyBtYXgo
LWFkamJ3MSwgMCksIHkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgLSBtYXgoLWFk
amJ3MiwgMCksIHkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgLSBtYXgoIGFkamJ3
MiwgMCksIHkxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJTTGVmdDoKLSAg
ICAgICAgICBxdWFkLnNldFBvaW50cyg0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHgxLCB5
MSttYXgoLWFkamJ3MSwwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB4MSwgeTItbWF4KC1h
ZGpidzIsMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgeDIsIHkyLW1heCggYWRqYncyLDAp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIHgyLCB5MSttYXgoIGFkamJ3MSwwKSk7CisgICAg
ICAgICAgICBxdWFkLnNldFBvaW50cyh4MSwgeTEgKyBtYXgoLWFkamJ3MSwgMCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4MSwgeTIgLSBtYXgoLWFkamJ3MiwgMCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4MiwgeTIgLSBtYXgoIGFkamJ3MiwgMCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4MiwgeTEgKyBtYXgoIGFkamJ3MSwgMCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQlNSaWdodDoKLSAgICAgICAgICBxdWFkLnNldFBvaW50cyg0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHgxLCB5MSttYXgoIGFkamJ3MSwwKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICB4MSwgeTItbWF4KCBhZGpidzIsMCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgeDIsIHkyLW1heCgtYWRqYncyLDApLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHgyLCB5MSttYXgoLWFkamJ3MSwwKSk7CisgICAgICAgICAgICBxdWFkLnNldFBvaW50cyh4MSwg
eTEgKyBtYXgoIGFkamJ3MSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4MSwgeTIg
LSBtYXgoIGFkamJ3MiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiwgeTIgLSBt
YXgoLWFkamJ3MiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiwgeTEgKyBtYXgo
LWFkamJ3MSwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcC0+
ZHJhd0NvbnZleFBvbHlnb24ocXVhZCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICB9CiB9
CiAKIGJvb2wgUmVuZGVyT2JqZWN0OjpwYWludEJvcmRlckltYWdlKEdyYXBoaWNzQ29udGV4dCog
cCwgaW50IF90eCwgaW50IF90eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9iaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9iaWRpLmNwcAkocmV2aXNpb24gMTQwNjgpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9iaWRpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckNhbnZhcy5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSA8a3ht
bGNvcmUvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTk0LDcgKzk1LDcgQEAgc3RhdGljIGJvb2wgc0J1aWxk
aW5nQ29tcGFjdFJ1bnM7CiAvLyBNaWRwb2ludCBnbG9iYWxzLiAgVGhlIGdvYWwgaXMgbm90IHRv
IGRvIGFueSBhbGxvY2F0aW9uIHdoZW4gZGVhbGluZyB3aXRoCiAvLyB0aGVzZSBtaWRwb2ludHMs
IHNvIHdlIGp1c3Qga2VlcCBhbiBhcnJheSBhcm91bmQgYW5kIG5ldmVyIGNsZWFyIGl0LiAgV2Ug
dHJhY2sKIC8vIHRoZSBudW1iZXIgb2YgaXRlbXMgYW5kIHBvc2l0aW9uIHVzaW5nIHRoZSB0d28g
b3RoZXIgdmFyaWFibGVzLgotc3RhdGljIERlcHJlY2F0ZWRBcnJheTxCaWRpSXRlcmF0b3I+ICpz
bWlkcG9pbnRzOworc3RhdGljIFZlY3RvcjxCaWRpSXRlcmF0b3I+KiBzbWlkcG9pbnRzOwogc3Rh
dGljIHVuc2lnbmVkIHNOdW1NaWRwb2ludHM7CiBzdGF0aWMgdW5zaWduZWQgc0N1cnJNaWRwb2lu
dDsKIHN0YXRpYyBib29sIGJldHdlZW5NaWRwb2ludHM7CkBAIC01NDQsNyArNTQ1LDcgQEAgc3Rh
dGljIHZvaWQgYWRkTWlkcG9pbnQoY29uc3QgQmlkaUl0ZXJhdAogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoc21pZHBvaW50cy0+c2l6ZSgpIDw9IHNOdW1NaWRwb2ludHMpCi0gICAgICAgIHNt
aWRwb2ludHMtPnJlc2l6ZShzTnVtTWlkcG9pbnRzKzEwKTsKKyAgICAgICAgc21pZHBvaW50cy0+
cmVzaXplKHNOdW1NaWRwb2ludHMgKyAxMCk7CiAKICAgICBCaWRpSXRlcmF0b3IqIG1pZHBvaW50
cyA9IHNtaWRwb2ludHMtPmRhdGEoKTsKICAgICBtaWRwb2ludHNbc051bU1pZHBvaW50cysrXSA9
IG1pZHBvaW50OwpAQCAtMTU0Nyw3ICsxNTQ4LDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6bGF5
b3V0SW5saW5lQ2hpbGRyZQogICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJPTjsKICAgICAg
ICAgCiAgICAgICAgIGlmICghc21pZHBvaW50cykKLSAgICAgICAgICAgIHNtaWRwb2ludHMgPSBu
ZXcgRGVwcmVjYXRlZEFycmF5PEJpZGlJdGVyYXRvcj47CisgICAgICAgICAgICBzbWlkcG9pbnRz
ID0gbmV3IFZlY3RvcjxCaWRpSXRlcmF0b3I+KCk7CiAgICAgICAgIAogICAgICAgICBzTnVtTWlk
cG9pbnRzID0gMDsKICAgICAgICAgc0N1cnJNaWRwb2ludCA9IDA7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDE0MDY4KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
MTIgKzI3LDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZVNlY3Rpb24uaCIKLSNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUYWJsZVJvdy5oIgotI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCisKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktXUVRleHRTdHJl
YW0uaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNvbC5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCisjaW5jbHVkZSA8a3htbGNvcmUv
VmVjdG9yLmg+CisjaW5jbHVkZSA8bGltaXRzPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBA
IC0xMzYsMTAgKzEzOSwxMSBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6ZW5zdXJlUm93cyhp
bnQgCiB7CiAgICAgaW50IG5Sb3dzID0gZ3JpZFJvd3M7CiAgICAgaWYgKG51bVJvd3MgPiBuUm93
cykgewotICAgICAgICBpZiAobnVtUm93cyA+IHN0YXRpY19jYXN0PGludD4oZ3JpZC5zaXplKCkp
KQotICAgICAgICAgICAgaWYgKCFncmlkLnJlc2l6ZShudW1Sb3dzKjIrMSkpCisgICAgICAgIGlm
IChudW1Sb3dzID4gc3RhdGljX2Nhc3Q8aW50PihncmlkLnNpemUoKSkpIHsKKyAgICAgICAgICAg
IGlmIChudW1Sb3dzID4gc3RhdGljX2Nhc3Q8aW50PihudW1lcmljX2xpbWl0czxzaXplX3Q+Ojpt
YXgoKSAvIHNpemVvZihpbnQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAg
ICAgICAgICAgIGdyaWQucmVzaXplKG51bVJvd3MpOworICAgICAgICB9CiAgICAgICAgIGdyaWRS
b3dzID0gbnVtUm93czsKICAgICAgICAgaW50IG5Db2xzID0gdGFibGUoKS0+bnVtRWZmQ29scygp
OwogICAgICAgICBDZWxsU3RydWN0IGVtcHR5Q2VsbFN0cnVjdDsKQEAgLTE1NywxMSArMTYxLDEx
IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKGludCAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVGFibGVD
ZWxsICpjZWxsLCBSZW5kZXJPYmplY3QqIHJvdykKK3ZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjph
ZGRDZWxsKFJlbmRlclRhYmxlQ2VsbCogY2VsbCwgUmVuZGVyT2JqZWN0KiByb3cpCiB7CiAgICAg
aW50IHJTcGFuID0gY2VsbC0+cm93U3BhbigpOwogICAgIGludCBjU3BhbiA9IGNlbGwtPmNvbFNw
YW4oKTsKLSAgICBEZXByZWNhdGVkQXJyYXk8UmVuZGVyVGFibGU6OkNvbHVtblN0cnVjdD4gJmNv
bHVtbnMgPSB0YWJsZSgpLT5jb2x1bW5zOworICAgIFZlY3RvcjxSZW5kZXJUYWJsZTo6Q29sdW1u
U3RydWN0PiYgY29sdW1ucyA9IHRhYmxlKCktPmNvbHVtbnM7CiAgICAgaW50IG5Db2xzID0gY29s
dW1ucy5zaXplKCk7CiAKICAgICAvLyAjIyMgbW96aWxsYSBzdGlsbCBzZWVtcyB0byBkbyB0aGUg
b2xkIEhUTUwgd2F5LCBldmVuIGZvciBzdHJpY3QgRFRECkBAIC0yNDEsNyArMjQ1LDcgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENlbGwoUmVuZGVyVAogCiB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6c2V0Q2VsbFdpZHRocygpCiB7Ci0gICAgRGVwcmVjYXRlZEFycmF5PGludD4gJmNv
bHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBvczsKKyAgICBWZWN0b3I8aW50PiYgY29sdW1uUG9z
ID0gdGFibGUoKS0+Y29sdW1uUG9zOwogCiAgICAgaW50IHJvd3MgPSBncmlkUm93czsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5oCShyZXZpc2lvbiAxNDA2OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgUmVuZGVyVGFibGVfSAog
CiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMTUsMjMgKzExNiwyNSBAQCBwdWJsaWM6CiAg
ICAgICAgIHVuc2lnbmVkIHdpZHRoOyAvLyB0aGUgY2FsY3VsYXRlZCBwb3NpdGlvbiBvZiB0aGUg
Y29sdW1uCiAgICAgfTsKIAotICAgIERlcHJlY2F0ZWRBcnJheTxpbnQ+IGNvbHVtblBvczsKLSAg
ICBEZXByZWNhdGVkQXJyYXk8Q29sdW1uU3RydWN0PiBjb2x1bW5zOworICAgIFZlY3RvcjxpbnQ+
IGNvbHVtblBvczsKKyAgICBWZWN0b3I8Q29sdW1uU3RydWN0PiBjb2x1bW5zOwogCiAgICAgdm9p
ZCBzcGxpdENvbHVtbihpbnQgcG9zLCBpbnQgZmlyc3RTcGFuKTsKICAgICB2b2lkIGFwcGVuZENv
bHVtbihpbnQgc3Bhbik7CiAgICAgaW50IG51bUVmZkNvbHMoKSBjb25zdCB7IHJldHVybiBjb2x1
bW5zLnNpemUoKTsgfQogICAgIGludCBzcGFuT2ZFZmZDb2woaW50IGVmZkNvbCkgY29uc3QgeyBy
ZXR1cm4gY29sdW1uc1tlZmZDb2xdLnNwYW47IH0KLSAgICBpbnQgY29sVG9FZmZDb2woaW50IGNv
bCkgY29uc3QgewotICAgICAgICBpbnQgYyA9IDA7CisgICAgCisgICAgaW50IGNvbFRvRWZmQ29s
KGludCBjb2wpIGNvbnN0CisgICAgewogICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxl
IChjIDwgY29sICYmIGkgPCAoaW50KWNvbHVtbnMuc2l6ZSgpKSB7CisgICAgICAgIGludCBlZmZD
b2wgPSBudW1FZmZDb2xzKCk7CisgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29sICYmIGkg
PCBlZmZDb2w7ICsraSkKICAgICAgICAgICAgIGMgKz0gY29sdW1uc1tpXS5zcGFuOwotICAgICAg
ICAgICAgaSsrOwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBpOwogICAgIH0KLSAgICBpbnQg
ZWZmQ29sVG9Db2woaW50IGVmZkNvbCkgY29uc3QgeworICAgIAorICAgIGludCBlZmZDb2xUb0Nv
bChpbnQgZWZmQ29sKSBjb25zdAorICAgIHsKICAgICAgICAgaW50IGMgPSAwOwogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGVmZkNvbDsgaSsrKQogICAgICAgICAgICAgYyArPSBjb2x1bW5z
W2ldLnNwYW47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2
aXNpb24gMTQwNjgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBSZW5kZXJUYWJsZVNlY3Rp
b25fSAogCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Nyw3ICs2OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgUmVuZGVyVGFibGVDZWxsICpjZWxsOwogICAgICAgICBib29sIGluQ29sU3Bhbjsg
Ly8gdHJ1ZSBmb3IgY29sdW1ucyBhZnRlciB0aGUgZmlyc3QgaW4gYSBjb2xzcGFuCiAgICAgfTsK
LSAgICB0eXBlZGVmIERlcHJlY2F0ZWRBcnJheTxDZWxsU3RydWN0PiBSb3c7CisgICAgdHlwZWRl
ZiBWZWN0b3I8Q2VsbFN0cnVjdD4gUm93OwogICAgIHN0cnVjdCBSb3dTdHJ1Y3QgewogICAgICAg
ICBSb3cqIHJvdzsKICAgICAgICAgUmVuZGVyT2JqZWN0KiByb3dSZW5kZXJlcjsKQEAgLTEwMiw5
ICsxMDMsOSBAQCBwdWJsaWM6CiAKICAgICAvLyB0aGlzIGdldHMgYSBjZWxsIGdyaWQgZGF0YSBz
dHJ1Y3R1cmUuIGNoYW5naW5nIHRoZSBudW1iZXIgb2YKICAgICAvLyBjb2x1bW5zIGlzIGRvbmUg
YnkgdGhlIHRhYmxlCi0gICAgRGVwcmVjYXRlZEFycmF5PFJvd1N0cnVjdD4gZ3JpZDsKKyAgICBW
ZWN0b3I8Um93U3RydWN0PiBncmlkOwogICAgIGludCBncmlkUm93czsKLSAgICBEZXByZWNhdGVk
QXJyYXk8aW50PiByb3dQb3M7CisgICAgVmVjdG9yPGludD4gcm93UG9zOwogCiAgICAgLy8gdGhl
IGN1cnJlbnQgaW5zZXJ0aW9uIHBvc2l0aW9uCiAgICAgaW50IGNDb2w7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy90YWJsZV9sYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL3RhYmxlX2xheW91dC5jcHAJKHJldmlzaW9uIDE0MDY4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvdGFibGVfbGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOSArMjUsMTAgQEAKICNp
bmNsdWRlICJ0YWJsZV9sYXlvdXQuaCIKIAogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKLSNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwu
aCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogLyoKICAgVGhlIHRleHQgYmVsb3cg
aXMgZnJvbSB0aGUgQ1NTIDIuMSBzcGVjcy4KQEAgLTI1NSw5ICsyNTYsNyBAQCB2b2lkIEZpeGVk
VGFibGVMYXlvdXQ6OmxheW91dCgpCiAjZW5kaWYKIAogCi0gICAgRGVwcmVjYXRlZEFycmF5PGlu
dD4gY2FsY1dpZHRoOwotICAgIGNhbGNXaWR0aC5yZXNpemUoIG5FZmZDb2xzICk7Ci0gICAgY2Fs
Y1dpZHRoLmZpbGwoIC0xICk7CisgICAgVmVjdG9yPGludD4gY2FsY1dpZHRoKG5FZmZDb2xzLCAt
MSk7CiAKICAgICAvLyBhc3NpZ24gIHBlcmNlbnQgd2lkdGgKICAgICBpZiAoIGF2YWlsYWJsZSA+
IDAgKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCShyZXZpc2lvbiAxNDA2OCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIktXUVRleHRFZGl0LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCisjaW5jbHVkZSA8
a3htbGNvcmUvVmVjdG9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTYzNyw3ICs2
MzgsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIGlmICgg
bV9vcHRpb25zQ2hhbmdlZCApIHsKICAgICAgICAgaWYgKGVsZW1lbnQoKS0+bV9yZWNhbGNMaXN0
SXRlbXMpCiAgICAgICAgICAgICBlbGVtZW50KCktPnJlY2FsY0xpc3RJdGVtcygpOwotICAgICAg
ICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxp
c3RJdGVtcygpOworICAgICAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBlbGVt
ZW50KCktPmxpc3RJdGVtcygpOwogICAgICAgICBpbnQgbGlzdEluZGV4OwogCiAgICAgICAgIGlm
IChtX3VzZUxpc3RCb3gpCkBAIC03NzcsNyArNzc4LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6Omxh
eW91dCggKQogICAgIFJlbmRlckZvcm1FbGVtZW50OjpsYXlvdXQoKTsKIAogICAgIC8vIGFuZCBu
b3cgZGlzYWJsZSB0aGUgd2lkZ2V0IGluIGNhc2UgdGhlcmUgaXMgbm8gPG9wdGlvbj4gZ2l2ZW4K
LSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCkt
Pmxpc3RJdGVtcygpOworICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IGVsZW1l
bnQoKS0+bGlzdEl0ZW1zKCk7CiAKICAgICBib29sIGZvdW5kT3B0aW9uID0gZmFsc2U7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5zaXplKCkgJiYgIWZvdW5kT3B0aW9u
OyBpKyspCkBAIC03OTUsNyArNzk2LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnZhbHVlQ2hhbmdl
ZChXaWRnZXQqKQogCiAgICAgaW50IGluZGV4ID0gc3RhdGljX2Nhc3Q8UUNvbWJvQm94Kj4obV93
aWRnZXQpLT5jdXJyZW50SXRlbSgpOwogCi0gICAgRGVwcmVjYXRlZEFycmF5PEhUTUxFbGVtZW50
Kj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5saXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8SFRNTEVs
ZW1lbnQqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOwogICAgIGlmIChpbmRl
eCA+PSAwICYmIGluZGV4IDwgKGludClsaXN0SXRlbXMuc2l6ZSgpKSB7CiAgICAgICAgIGJvb2wg
Zm91bmQgPSBsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKG9wdGlvblRhZyk7CiAgICAgICAg
IGlmICghZm91bmQpIHsKQEAgLTg0Miw5ICs4NDMsOSBAQCB2b2lkIFJlbmRlclNlbGVjdDo6c2Vs
ZWN0aW9uQ2hhbmdlZChXaWRnCiAKICAgICAvLyBkb24ndCB1c2UgbGlzdEl0ZW1zKCkgaGVyZSBh
cyB3ZSBoYXZlIHRvIGF2b2lkIHJlY2FsY3VsYXRpb25zIC0gY2hhbmdpbmcgdGhlCiAgICAgLy8g
b3B0aW9uIGxpc3Qgd2lsbCBtYWtlIHVzZSB1cGRhdGUgb3B0aW9ucyBub3QgaW4gdGhlIHdheSB0
aGUgdXNlciBleHBlY3RzIHRoZW0KLSAgICBEZXByZWNhdGVkQXJyYXk8SFRNTEVsZW1lbnQqPiBs
aXN0SXRlbXMgPSBlbGVtZW50KCktPm1fbGlzdEl0ZW1zOworICAgIFZlY3RvcjxIVE1MRWxlbWVu
dCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bV9saXN0SXRlbXM7CiAgICAgaW50IGogPSAwOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuY291bnQoKTsgaSsrKSB7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5zaXplKCk7IGkrKykgewogICAg
ICAgICAvLyBkb24ndCB1c2Ugc2V0U2VsZWN0ZWQoKSBoZXJlIGJlY2F1c2UgaXQgd2lsbCBjYXVz
ZSB1cyB0byBiZSBjYWxsZWQKICAgICAgICAgLy8gYWdhaW4gd2l0aCB1cGRhdGVTZWxlY3Rpb24u
CiAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkKQEAgLTg3
Miw3ICs4NzMsNyBAQCBRTGlzdEJveCogUmVuZGVyU2VsZWN0OjpjcmVhdGVMaXN0Qm94KCkKIAog
dm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0ZVNlbGVjdGlvbigpCiB7Ci0gICAgRGVwcmVjYXRlZEFy
cmF5PEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5saXN0SXRlbXMoKTsKKyAg
ICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygp
OwogICAgIGludCBpOwogICAgIGlmIChtX3VzZUxpc3RCb3gpIHsKICAgICAgICAgLy8gaWYgbXVs
dGktc2VsZWN0LCB3ZSBzZWxlY3Qgb25seSB0aGUgbmV3IHNlbGVjdGVkIGluZGV4CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy90YWJsZV9sYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy90YWJsZV9sYXlvdXQuaAkocmV2aXNpb24gMTQwNjgpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy90YWJsZV9sYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogI2lm
bmRlZiBUQUJMRV9MQVlPVVRfSAogI2RlZmluZSBUQUJMRV9MQVlPVVRfSAogCi0jaW5jbHVkZSAi
RGVwcmVjYXRlZEFycmF5LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCisjaW5jbHVkZSA8a3htbGNv
cmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsNyArNjAsNyBAQCBw
dWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgaW50IGNhbGNXaWR0aEFycmF5KCBpbnQgdGFibGVXaWR0
aCApOwogCi0gICAgRGVwcmVjYXRlZEFycmF5PExlbmd0aD4gd2lkdGg7CisgICAgVmVjdG9yPExl
bmd0aD4gd2lkdGg7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDAsOCArMTAwLDgg
QEAgcHJvdGVjdGVkOgogICAgICAgICBpbnQgY2FsY1dpZHRoOwogICAgIH07CiAKLSAgICBEZXBy
ZWNhdGVkQXJyYXk8TGF5b3V0PiBsYXlvdXRTdHJ1Y3Q7Ci0gICAgRGVwcmVjYXRlZEFycmF5PFJl
bmRlclRhYmxlQ2VsbCAqPnNwYW5DZWxsczsKKyAgICBWZWN0b3I8TGF5b3V0PiBsYXlvdXRTdHJ1
Y3Q7CisgICAgVmVjdG9yPFJlbmRlclRhYmxlQ2VsbCo+IHNwYW5DZWxsczsKICAgICBib29sIGhh
c1BlcmNlbnQgOiAxOwogICAgIG11dGFibGUgYm9vbCBwZXJjZW50YWdlc0RpcnR5IDogMTsKICAg
ICBtdXRhYmxlIGJvb2wgZWZmV2lkdGhEaXJ0eSA6IDE7CkluZGV4OiBXZWJDb3JlL2RvbS94bWxf
dG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS94bWxfdG9rZW5pemVyLmNw
cAkocmV2aXNpb24gMTQwNjgpCisrKyBXZWJDb3JlL2RvbS94bWxfdG9rZW5pemVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMjAgKzI5LDIyIEBACiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0Lmgi
CiAjaW5jbHVkZSAiQ29tbWVudC5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIu
aCIKICNpbmNsdWRlICJLV1FMb2FkZXIuaCIKKyNpbmNsdWRlICJUcmFuc2ZlckpvYi5oIgogI2lu
Y2x1ZGUgImRvbV94bWxpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1
ZGUgImh0bWxfdGFibGVpbXBsLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgorI2luY2x1
ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KICNpbmNs
dWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CiAKLSNpbmNsdWRlICJUcmFuc2ZlckpvYi5o
IgotCiAjaWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlhM
aW5rTmFtZXMuaCIKQEAgLTE0NSw3ICsxNDcsNyBAQCBzdGF0aWMgV2ViQ29yZTo6RG9jTG9hZGVy
ICpnbG9iYWxEb2NMb2FkCiAKIGNsYXNzIE9mZnNldEJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgT2Zm
c2V0QnVmZmVyKGNvbnN0IERlcHJlY2F0ZWRCeXRlQXJyYXkgJmIpIDogbV9idWZmZXIoYiksIG1f
Y3VycmVudE9mZnNldCgwKSB7IH0KKyAgICBPZmZzZXRCdWZmZXIoY29uc3QgVmVjdG9yPGNoYXI+
JiBiKSA6IG1fYnVmZmVyKGIpLCBtX2N1cnJlbnRPZmZzZXQoMCkgeyB9CiAgICAgCiAgICAgaW50
IHJlYWRPdXRCeXRlcyhjaGFyICpvdXRwdXRCdWZmZXIsIHVuc2lnbmVkIGFza2VkVG9SZWFkKSB7
CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVzTGVmdCA9IG1fYnVmZmVyLnNpemUoKSAtIG1fY3VycmVu
dE9mZnNldDsKQEAgLTE1OCw3ICsxNjAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIERlcHJlY2F0ZWRCeXRlQXJyYXkgbV9idWZmZXI7CisgICAgVmVjdG9yPGNoYXI+IG1fYnVm
ZmVyOwogICAgIHVuc2lnbmVkIG1fY3VycmVudE9mZnNldDsKIH07CiAKQEAgLTE4MCw3ICsxODIs
NyBAQCBzdGF0aWMgdm9pZCogb3BlbkZ1bmMoY29uc3QgY2hhciogdXJpKQogICAgIEtVUkwgZmlu
YWxVUkw7CiAgICAgVHJhbnNmZXJKb2IqIGpvYiA9IG5ldyBUcmFuc2ZlckpvYigwLCAiR0VUIiwg
dXJpKTsKICAgICBEZXByZWNhdGVkU3RyaW5nIGhlYWRlcnM7Ci0gICAgRGVwcmVjYXRlZEJ5dGVB
cnJheSBkYXRhID0gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoQ2FjaGU6OmxvYWRlcigpLCBn
bG9iYWxEb2NMb2FkZXIsIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOworICAgIFZlY3RvcjxjaGFy
PiBkYXRhID0gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVlc3QoQ2FjaGU6OmxvYWRlcigpLCBnbG9i
YWxEb2NMb2FkZXIsIGpvYiwgZmluYWxVUkwsIGhlYWRlcnMpOwogICAgIAogICAgIHJldHVybiBu
ZXcgT2Zmc2V0QnVmZmVyKGRhdGEpOwogfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDY4KQorKysgV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMDYgQEAKKzIwMDYtMDQtMjUgIFNh
bSBXZWluaWcgIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEZpeCBmb3IgaHR0cDovL2J1Z3ppbGxhLm9wZW5k
YXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD04MDM5CisgICAgICAgICAgUmVtb3ZlIHVzZSBvZiBE
ZXByZWNhdGVkQXJyYXkgaW4gZmF2b3Igb2YgbmV3IFZlY3RvciBjbGFzcworCisgICAgICAgIFRo
aXMgcmVtb3ZlcyBtb3N0IG9mIHRoZSB1c2VzIG9mIERlcHJlY2F0ZWRBcnJheSBhbmQgCisgICAg
ICAgIERlcHJlY2F0ZWRCeXRlQXJyYXksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBpdHMgdXNlIGlu
IHRoZSAKKyAgICAgICAgY2FjaGluZyBhbmQgSW1hZ2UgcmVsYXRlZCBjbGFzc2VzIGFuZCB0aGUg
ZGVwcmVjYXRlZCBjbGFzcyAKKyAgICAgICAgRGVwcmVjYXRlZENTdHJpbmcuCisKKyAgICAgICAg
Tm8gdGVzdCBjYXNlcyBhZGRlZCBiZWNhdXNlIHRoZXJlIGlzIG5vIGNoYW5nZSBpbgorICAgICAg
ICBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6aW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2x2ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlUHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAg
ICAgKiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6YWRkTWF0Y2hlZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKToKKyAgICAgICAgKiBkb20veG1sX3Rva2VuaXpl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRCdWZmZXI6Ok9mZnNldEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpvcGVuRnVuYyk6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6aW5kZXgpOgor
ICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVjdGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNlbGVjdEVsZW1lbnQ6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojp2YWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTZWxlY3RFbGVtZW50OjpvcHRpb25Ub0xpc3RJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6bGlzdFRvT3B0aW9uSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MU2VsZWN0RWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVs
ZW1lbnQ6Om5vdGlmeU9wdGlvblNlbGVjdGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RF
bGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6bGlzdEl0ZW1z
KToKKyAgICAgICAgKiBrd3EvS1dRTG9hZGVyLmg6CisgICAgICAgICoga3dxL0tXUUxvYWRlci5t
bToKKyAgICAgICAgKEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KToKKyAgICAgICAgKiBrd3Ev
S1dRVGV4dFN0cmVhbS5jcHA6CisgICAgICAgIChRVGV4dFN0cmVhbTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgICoga3dxL0tXUVRleHRTdHJlYW0uaDoKKyAgICAgICAgKiBsb2FkZXIvRm9ybURhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmZsYXR0ZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGE6OmZsYXR0ZW5Ub1N0cmluZyk6CisgICAgICAgICogbG9hZGVyL0Zvcm1E
YXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL0ludFBvaW50
QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnRBcnJheTo6Ym91bmRpbmdSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBvaW50QXJyYXk6OnBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkludFBvaW50QXJyYXk6OnNldFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludFBv
aW50QXJyYXk6OnNldFBvaW50cyk6CisgICAgICAgICogcGxhdGZvcm0vSW50UG9pbnRBcnJheS5o
OgorICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnRBcnJheTo6SW50UG9pbnRBcnJheSk6CisgICAg
ICAgICogcGxhdGZvcm0vVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRF
bmNvZGluZzo6dG9Vbmljb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0RW5jb2RpbmcuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9jYWlyby9waXhtYW4vc3JjL3BpeHJlZ2lvbi5jOgorICAgICAg
ICAqIHBsYXRmb3JtL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpQYXRo
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6ZHJhd0JvcmRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29sVG9FZmZDb2wpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmVmZkNvbFRvQ29sKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlU2VjdGlvbjo6ZW5zdXJlUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZVNlY3Rpb246OmFkZENlbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9u
OjpzZXRDZWxsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9u
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL2JpZGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRk
TWlkcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNo
aWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWxlY3Q6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWxl
Y3Q6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWxlY3Q6OnNlbGVj
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxl
Y3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy90YWJsZV9sYXlvdXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rml4ZWRUYWJsZUxheW91dDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
dGFibGVfbGF5b3V0Lmg6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZG9jTG9hZGVyRnVuYyk6CisgICAgICAgICogeG1sL3htbGh0dHByZXF1ZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKToKKyAgICAg
ICAgKiB4bWwveG1saHR0cHJlcXVlc3QuaDoKKwogMjAwNi0wNC0yNSAgQmV0aCBEYWtpbiAgPGJk
YWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogV2Vi
Q29yZS9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuaAkocmV2aXNpb24gMTQwNjgpCisrKyBXZWJDb3JlL2Nzcy9jc3NzdHls
ZXNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUg
ImNzc19ydWxlaW1wbC5oIgogI2luY2x1ZGUgInJlbmRlcl9zdHlsZS5oIgorI2luY2x1ZGUgPGt4
bWxjb3JlL1ZlY3Rvci5oPgogCiBjbGFzcyBLSFRNTFNldHRpbmdzOwogY2xhc3MgS1VSTDsKQEAg
LTE0MCwxMiArMTQxLDEzIEBAIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiAKICAgICAgICAgdm9pZCBh
ZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQgKmUpOwogICAgIAor
ICAgICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKENTU1J1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hl
ZFJ1bGVzLmFwcGVuZChydWxlKTsgfQorICAgICAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJhdGlv
bihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCkgeyBtX21hdGNoZWREZWNscy5hcHBl
bmQoZGVjbCk7IH0KKwogICAgICAgICB2b2lkIG1hdGNoUnVsZXMoQ1NTUnVsZVNldCogcnVsZXMs
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCk7Ci0gICAgICAgIHZvaWQg
bWF0Y2hSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFMaXN0KiBydWxlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgp
OwotICAgICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXModW5zaWduZWQgZmlyc3RSdWxlSW5kZXgs
IHVuc2lnbmVkIGxhc3RSdWxlSW5kZXgpOwotICAgICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKENT
U1J1bGVEYXRhKiBydWxlKTsKLSAgICAgICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpOworICAgICAgICB2b2lkIG1hdGNoUnVsZXNG
b3JMaXN0KENTU1J1bGVEYXRhTGlzdCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCk7CisgICAgICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcyh1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgZW5kKTsKKwogICAgICAgICB2b2lkIGFwcGx5RGVjbGFyYXRpb25zKGJv
b2wgZmlyc3RQYXNzLCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRl
eCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgQ1NTU3R5bGVTaGVldCAqZGVmYXVsdFNoZWV0
OwpAQCAtMTY1LDcgKzE2Nyw3IEBAIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiAgICAgICAgIEJhY2tn
cm91bmRMYXllciBtX2JhY2tncm91bmREYXRhOwogICAgICAgICBDb2xvciBtX2JhY2tncm91bmRD
b2xvcjsKIAotcHVibGljOgorICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFJlbmRlclN0eWxl
KiBzdHlsZU5vdFlldEF2YWlsYWJsZTsKICAKICAgICBwcml2YXRlOgpAQCAtMTg0LDE1ICsxODYs
MTIgQEAgcHVibGljOgogICAgICAgICAvLyBzZXQgb2YgbWF0Y2hlZCBkZWNscyBmb3VyIHRpbWVz
LCBvbmNlIGZvciB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXJzIGRlcGVuZCBvbiAobGlrZSBm
b250LXNpemUpLAogICAgICAgICAvLyBhbmQgdGhlbiBhIHNlY29uZCB0aW1lIGZvciBhbGwgdGhl
IHJlbWFpbmluZyBwcm9wZXJ0aWVzLiAgV2UgdGhlbiBkbyB0aGUgc2FtZSB0d28gcGFzc2VzCiAg
ICAgICAgIC8vIGZvciBhbnkgIWltcG9ydGFudCBydWxlcy4KLSAgICAgICAgRGVwcmVjYXRlZEFy
cmF5PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4gbV9tYXRjaGVkRGVjbHM7Ci0gICAgICAg
IHVuc2lnbmVkIG1fbWF0Y2hlZERlY2xDb3VudDsKKyAgICAgICAgVmVjdG9yPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKj4gbV9tYXRjaGVkRGVjbHM7CiAgICAgICAgIAogICAgICAgICAvLyBB
IGJ1ZmZlciB1c2VkIHRvIGhvbGQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIGZvciBhbiBlbGVt
ZW50LCBhbmQgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yCiAgICAgICAgIC8vIG1lcmdlIHNv
cnRpbmcuCi0gICAgICAgIERlcHJlY2F0ZWRBcnJheTxDU1NSdWxlRGF0YSo+IG1fbWF0Y2hlZFJ1
bGVzOwotICAgICAgICB1bnNpZ25lZCBtX21hdGNoZWRSdWxlQ291bnQ7Ci0gICAgICAgIERlcHJl
Y2F0ZWRBcnJheTxDU1NSdWxlRGF0YSo+IG1fdG1wUnVsZXM7Ci0gICAgICAgIHVuc2lnbmVkIG1f
dG1wUnVsZUNvdW50OworICAgICAgICBWZWN0b3I8Q1NTUnVsZURhdGEqPiBtX21hdGNoZWRSdWxl
czsKKyAgICAgICAgCiAgICAgICAgIENTU1J1bGVMaXN0KiBtX3J1bGVMaXN0OwogICAgICAgICBi
b29sIG1fY29sbGVjdFJ1bGVzT25seTsKIApJbmRleDogV2ViQ29yZS9jc3MvY3Nzc3R5bGVzZWxl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJ
KHJldmlzaW9uIDE0MDY4KQorKysgV2ViQ29yZS9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Omlu
aXQoKQogewogICAgIGVsZW1lbnQgPSAwOwogICAgIHNldHRpbmdzID0gMDsKLSAgICBtX21hdGNo
ZWRSdWxlQ291bnQgPSBtX21hdGNoZWREZWNsQ291bnQgPSBtX3RtcFJ1bGVDb3VudCA9IDA7Cisg
ICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKyAgICBtX21hdGNoZWREZWNscy5jbGVhcigpOwog
fQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNldEVuY29kZWRVUkwoY29uc3QgS1VSTCYgdXJs
KQpAQCAtMzA3LDQ4ICszMDgsMzcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpsb2FkRGVmYXVs
dFN0eWxlKAogICAgIGRlZmF1bHRRdWlya3NTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocXVpcmtz
U2hlZXQsICJzY3JlZW4iKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVk
UnVsZShDU1NSdWxlRGF0YSogcnVsZSkKLXsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuc2l6ZSgp
IDw9IG1fbWF0Y2hlZFJ1bGVDb3VudCkKLSAgICAgICAgbV9tYXRjaGVkUnVsZXMucmVzaXplKDIq
bV9tYXRjaGVkUnVsZXMuc2l6ZSgpKzEpOwotICAgIG1fbWF0Y2hlZFJ1bGVzW21fbWF0Y2hlZFJ1
bGVDb3VudCsrXSA9IHJ1bGU7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hl
ZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQotewotICAgIGlm
IChtX21hdGNoZWREZWNscy5zaXplKCkgPD0gbV9tYXRjaGVkRGVjbENvdW50KQotICAgICAgICBt
X21hdGNoZWREZWNscy5yZXNpemUoMiptX21hdGNoZWREZWNscy5zaXplKCkrMSk7Ci0gICAgbV9t
YXRjaGVkRGVjbHNbbV9tYXRjaGVkRGVjbENvdW50KytdID0gZGVjbDsKLX0KLQogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKENTU1J1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgpCiB7Ci0gICAgbV9tYXRjaGVkUnVsZUNvdW50ID0g
MDsKLSAgICBpZiAoIXJ1bGVzIHx8ICFlbGVtZW50KSByZXR1cm47CisgICAgbV9tYXRjaGVkUnVs
ZXMuY2xlYXIoKTsKKworICAgIGlmICghcnVsZXMgfHwgIWVsZW1lbnQpCisgICAgICAgIHJldHVy
bjsKICAgICAKICAgICAvLyBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xh
c3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRo
ZW4gc29ydCB0aGUgYnVmZmVyLgogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpKQogICAgICAgICBt
YXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0SURSdWxlcyhlbGVtZW50LT5nZXRJREF0dHJpYnV0
ZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKLSAgICBpZiAoZWxl
bWVudC0+aGFzQ2xhc3MoKSkKKyAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSkgewogICAgICAg
ICBmb3IgKGNvbnN0IEF0b21pY1N0cmluZ0xpc3QqIHNpbmdsZUNsYXNzID0gZWxlbWVudC0+Z2V0
Q2xhc3NMaXN0KCk7IHNpbmdsZUNsYXNzOyBzaW5nbGVDbGFzcyA9IHNpbmdsZUNsYXNzLT5uZXh0
KCkpCiAgICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhz
aW5nbGVDbGFzcy0+c3RyaW5nKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgpOwotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhlbGVtZW50LT5s
b2NhbE5hbWUoKS5pbXBsKCkpLAotICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4KTsKKyAgICB9CisgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdl
dFRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VW5pdmVyc2Fs
UnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIAogICAgIC8vIElm
IHdlIGRpZG4ndCBtYXRjaCBhbnkgcnVsZXMsIHdlJ3JlIGRvbmUuCi0gICAgaWYgKG1fbWF0Y2hl
ZFJ1bGVDb3VudCA9PSAwKSByZXR1cm47CisgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFNvcnQgdGhlIHNldCBvZiBtYXRjaGVk
IHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoMCwgbV9tYXRjaGVkUnVsZUNvdW50KTsKKyAg
ICBzb3J0TWF0Y2hlZFJ1bGVzKDAsIG1fbWF0Y2hlZFJ1bGVzLnNpemUoKSk7CiAgICAgCiAgICAg
Ly8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0
IG9mIGRlY2xzLgogICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlQ291bnQ7IGkrKykKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKQogICAgICAg
ICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRl
Y2xhcmF0aW9uKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX21hdGNoZWRSdWxlQ291bnQ7IGkrKykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIGlmICgh
bV9ydWxlTGlzdCkKICAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gbmV3IENTU1J1bGVMaXN0
KCk7CiAgICAgICAgICAgICBtX3J1bGVMaXN0LT5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0tPnJ1
bGUoKSk7CkBAIC0zNTYsMTAgKzM0NiwxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
UnVsZXMoQ1NTUnVsCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVs
ZXNGb3JMaXN0KENTU1J1bGVEYXRhTGlzdCogcnVsZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFM
aXN0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4KQogewot
ICAgIGlmICghcnVsZXMpIHJldHVybjsKKyAgICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47
CisKICAgICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7IGQ7IGQgPSBkLT5u
ZXh0KCkpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gZC0+cnVsZSgpOwogICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IGVsZW1lbnQtPmxvY2FsTmFtZSgpOwpA
QCAtMzY3LDcgKzM1OCw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxp
c3QKICAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2VsZWN0b3JMb2NhbE5hbWUgfHwgc2VsZWN0
b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNrU2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwg
ZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVz
IHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIGlmICgh
ZGVjbCB8fCAhZGVjbC0+bGVuZ3RoKCkpIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFkZWNs
IHx8ICFkZWNsLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQg
YSBwc2V1ZG8gYml0IGlmIAogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBh
IHBzZXVkby1lbGVtZW50LgpAQCAtMzc3LDggKzM2OSw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWF0Y2hSdWxlc0Zvckxpc3QKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0SGFzUHNldWRv
U3R5bGUoZHluYW1pY1BzZXVkbyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIC8vIFVwZGF0ZSBvdXIgZmlyc3QvbGFzdCBydWxlIGluZGljZXMgaW4gdGhlIG1hdGNoZWQg
cnVsZXMgYXJyYXkuCi0gICAgICAgICAgICAgICAgbGFzdFJ1bGVJbmRleCA9IG1fbWF0Y2hlZERl
Y2xDb3VudCArIG1fbWF0Y2hlZFJ1bGVDb3VudDsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RS
dWxlSW5kZXggPT0gLTEpIGZpcnN0UnVsZUluZGV4ID0gbV9tYXRjaGVkRGVjbENvdW50ICsgbV9t
YXRjaGVkUnVsZUNvdW50OworICAgICAgICAgICAgICAgIGxhc3RSdWxlSW5kZXggPSBtX21hdGNo
ZWREZWNscy5zaXplKCkgKyBtX21hdGNoZWRSdWxlcy5zaXplKCk7CisgICAgICAgICAgICAgICAg
aWYgKGZpcnN0UnVsZUluZGV4ID09IC0xKQorICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJ
bmRleCA9IGxhc3RSdWxlSW5kZXg7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBydWxl
IHRvIG91ciBsaXN0IG9mIG1hdGNoZWQgcnVsZXMuCiAgICAgICAgICAgICAgICAgYWRkTWF0Y2hl
ZFJ1bGUoZCk7CkBAIC00MDAsNjkgKzM5Myw2NiBAQCBib29sIG9wZXJhdG9yIDw9KENTU1J1bGVE
YXRhJiByMSwgQ1NTUnVsCiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxl
cyh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQogewotICAgIGlmIChzdGFydCA+PSBlbmQg
fHwgKGVuZC1zdGFydCA9PSAxKSkKKyAgICBpZiAoc3RhcnQgPj0gZW5kIHx8IChlbmQgLSBzdGFy
dCA9PSAxKSkKICAgICAgICAgcmV0dXJuOyAvLyBTYW5pdHkgY2hlY2suCi0gICAgCisKICAgICBp
ZiAoZW5kIC0gc3RhcnQgPD0gNikgewogICAgICAgICAvLyBBcHBseSBhIGJ1YmJsZSBzb3J0IGZv
ciBzbWFsbGVyIGxpc3RzLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQtMTsgaSA+IHN0
YXJ0OyBpLS0pIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kIC0gMTsgaSA+IHN0YXJ0
OyBpLS0pIHsKICAgICAgICAgICAgIGJvb2wgc29ydGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IHN0YXJ0OyBqIDwgaTsgaisrKSB7CiAgICAgICAgICAgICAgICAgQ1NT
UnVsZURhdGEqIGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW2pdOwotICAgICAgICAgICAgICAgIENTU1J1
bGVEYXRhKiBlbHQyID0gbV9tYXRjaGVkUnVsZXNbaisxXTsKKyAgICAgICAgICAgICAgICBDU1NS
dWxlRGF0YSogZWx0MiA9IG1fbWF0Y2hlZFJ1bGVzW2ogKyAxXTsKICAgICAgICAgICAgICAgICBp
ZiAoKmVsdCA+ICplbHQyKSB7CiAgICAgICAgICAgICAgICAgICAgIHNvcnRlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICBtX21hdGNoZWRSdWxlc1tqXSA9IGVsdDI7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fbWF0Y2hlZFJ1bGVzW2orMV0gPSBlbHQ7CisgICAgICAgICAgICAgICAgICAg
IG1fbWF0Y2hlZFJ1bGVzW2ogKyAxXSA9IGVsdDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoc29ydGVkKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICAv
LyBQZWZvcm0gYSBtZXJnZSBzb3J0IGZvciBsYXJnZXIgbGlzdHMuCi0gICAgICAgIHVuc2lnbmVk
IG1pZCA9IChzdGFydCtlbmQpLzI7Ci0gICAgICAgIHNvcnRNYXRjaGVkUnVsZXMoc3RhcnQsIG1p
ZCk7Ci0gICAgICAgIHNvcnRNYXRjaGVkUnVsZXMobWlkLCBlbmQpOwotICAgICAgICAKLSAgICAg
ICAgQ1NTUnVsZURhdGEqIGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW21pZC0xXTsKLSAgICAgICAgQ1NT
UnVsZURhdGEqIGVsdDIgPSBtX21hdGNoZWRSdWxlc1ttaWRdOwotICAgICAgICAKLSAgICAgICAg
Ly8gSGFuZGxlIHRoZSBmYXN0IGNvbW1vbiBjYXNlIChvZiBlcXVhbCBzcGVjaWZpY2l0eSkuICBU
aGUgbGlzdCBtYXkgYWxyZWFkeQotICAgICAgICAvLyBiZSBjb21wbGV0ZWx5IHNvcnRlZC4KLSAg
ICAgICAgaWYgKCplbHQgPD0gKmVsdDIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICAvLyBXZSBoYXZlIHRvIG1lcmdlIHNvcnQuICBFbnN1cmUgb3VyIG1lcmdlIGJ1ZmZl
ciBpcyBiaWcgZW5vdWdoIHRvIGhvbGQKLSAgICAgICAgLy8gYWxsIHRoZSBpdGVtcy4KLSAgICAg
ICAgbV90bXBSdWxlcy5yZXNpemUoZW5kIC0gc3RhcnQpOwotICAgICAgICB1bnNpZ25lZCBpMSA9
IHN0YXJ0OwotICAgICAgICB1bnNpZ25lZCBpMiA9IG1pZDsKLSAgICAgICAgCi0gICAgICAgIGVs
dCA9IG1fbWF0Y2hlZFJ1bGVzW2kxXTsKLSAgICAgICAgZWx0MiA9IG1fbWF0Y2hlZFJ1bGVzW2ky
XTsKLSAgICAgICAgCi0gICAgICAgIHdoaWxlIChpMSA8IG1pZCB8fCBpMiA8IGVuZCkgewotICAg
ICAgICAgICAgaWYgKGkxIDwgbWlkICYmIChpMiA9PSBlbmQgfHwgKmVsdCA8PSAqZWx0MikpIHsK
LSAgICAgICAgICAgICAgICBtX3RtcFJ1bGVzW21fdG1wUnVsZUNvdW50KytdID0gZWx0OwotICAg
ICAgICAgICAgICAgIGkxKys7Ci0gICAgICAgICAgICAgICAgaWYgKGkxIDwgbWlkKQotICAgICAg
ICAgICAgICAgICAgICBlbHQgPSBtX21hdGNoZWRSdWxlc1tpMV07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX3RtcFJ1bGVzW21fdG1wUnVsZUNv
dW50KytdID0gZWx0MjsKLSAgICAgICAgICAgICAgICBpMisrOwotICAgICAgICAgICAgICAgIGlm
IChpMiA8IGVuZCkKLSAgICAgICAgICAgICAgICAgICAgZWx0MiA9IG1fbWF0Y2hlZFJ1bGVzW2ky
XTsKLSAgICAgICAgICAgIH0KKworICAgIC8vIFBlZm9ybSBhIG1lcmdlIHNvcnQgZm9yIGxhcmdl
ciBsaXN0cy4KKyAgICB1bnNpZ25lZCBtaWQgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICBzb3J0
TWF0Y2hlZFJ1bGVzKHN0YXJ0LCBtaWQpOworICAgIHNvcnRNYXRjaGVkUnVsZXMobWlkLCBlbmQp
OworICAgIAorICAgIENTU1J1bGVEYXRhKiBlbHQgPSBtX21hdGNoZWRSdWxlc1ttaWQgLSAxXTsK
KyAgICBDU1NSdWxlRGF0YSogZWx0MiA9IG1fbWF0Y2hlZFJ1bGVzW21pZF07CisgICAgCisgICAg
Ly8gSGFuZGxlIHRoZSBmYXN0IGNvbW1vbiBjYXNlIChvZiBlcXVhbCBzcGVjaWZpY2l0eSkuICBU
aGUgbGlzdCBtYXkgYWxyZWFkeQorICAgIC8vIGJlIGNvbXBsZXRlbHkgc29ydGVkLgorICAgIGlm
ICgqZWx0IDw9ICplbHQyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gV2UgaGF2ZSB0
byBtZXJnZSBzb3J0LiAgRW5zdXJlIG91ciBtZXJnZSBidWZmZXIgaXMgYmlnIGVub3VnaCB0byBo
b2xkCisgICAgLy8gYWxsIHRoZSBpdGVtcy4KKyAgICBWZWN0b3I8Q1NTUnVsZURhdGEqPiBydWxl
c01lcmdlQnVmZmVyOworICAgIHJ1bGVzTWVyZ2VCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGVuZCAt
IHN0YXJ0KTsgCisKKyAgICB1bnNpZ25lZCBpMSA9IHN0YXJ0OworICAgIHVuc2lnbmVkIGkyID0g
bWlkOworICAgIAorICAgIGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW2kxXTsKKyAgICBlbHQyID0gbV9t
YXRjaGVkUnVsZXNbaTJdOworICAgIAorICAgIHdoaWxlIChpMSA8IG1pZCB8fCBpMiA8IGVuZCkg
eworICAgICAgICBpZiAoaTEgPCBtaWQgJiYgKGkyID09IGVuZCB8fCAqZWx0IDw9ICplbHQyKSkg
eworICAgICAgICAgICAgcnVsZXNNZXJnZUJ1ZmZlci5hcHBlbmQoZWx0KTsKKyAgICAgICAgICAg
IGlmICgrK2kxIDwgbWlkKQorICAgICAgICAgICAgICAgIGVsdCA9IG1fbWF0Y2hlZFJ1bGVzW2kx
XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJ1bGVzTWVyZ2VCdWZmZXIuYXBwZW5k
KGVsdDIpOworICAgICAgICAgICAgaWYgKCsraTIgPCBlbmQpCisgICAgICAgICAgICAgICAgZWx0
MiA9IG1fbWF0Y2hlZFJ1bGVzW2kyXTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKLSAgICAgICAgICAgIG1fbWF0Y2hl
ZFJ1bGVzW2ldID0gbV90bXBSdWxlc1tpLXN0YXJ0XTsKLSAgICAgICAgCi0gICAgICAgIG1fdG1w
UnVsZUNvdW50ID0gMDsKLSAgICB9ICAgIAorICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQorICAgICAgICBtX21hdGNoZWRSdWxlc1tpXSA9IHJ1
bGVzTWVyZ2VCdWZmZXJbaSAtIHN0YXJ0XTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpp
bml0RWxlbWVudEFuZFBzZXVkb1N0YXRlKEVsZW1lbnQqIGUpCkBAIC00OTMsOSArNDgzLDkgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNvbAogCiAgICAgc3R5bGUgPSAw
OwogICAgIAotICAgIG1fbWF0Y2hlZFJ1bGVDb3VudCA9IDA7Ci0gICAgbV9tYXRjaGVkRGVjbENv
dW50ID0gMDsKLSAgICBtX3RtcFJ1bGVDb3VudCA9IDA7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xl
YXIoKTsKKyAgICBtX21hdGNoZWREZWNscy5jbGVhcigpOworCiAgICAgbV9ydWxlTGlzdCA9IDA7
CiAKICAgICBmb250RGlydHkgPSBmYWxzZTsKQEAgLTc0NSw4ICs3MzUsOSBAQCBSZW5kZXJTdHls
ZSogQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlU3R5CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbWFwLT5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgTWFwcGVk
QXR0cmlidXRlKiBhdHRyID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgICAg
IGlmIChhdHRyLT5kZWNsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0QXV0aG9y
UnVsZSA9PSAtMSkgZmlyc3RBdXRob3JSdWxlID0gbV9tYXRjaGVkRGVjbENvdW50OwotICAgICAg
ICAgICAgICAgICAgICBsYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xDb3VudDsKKyAgICAg
ICAgICAgICAgICAgICAgbGFzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdEF1dGhvclJ1bGUgPSBsYXN0QXV0aG9yUnVsZTsKICAgICAgICAg
ICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKGF0dHItPmRlY2woKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNzU3LDggKzc0OCw5IEBAIFJlbmRlclN0eWxl
KiBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVTdHkKICAgICAgICAgLy8gYWZ0ZXIgYWxsIGF0dHJp
YnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2Yg
bXVsdGlwbGUgYXR0cmlidXRlcy4KICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IGF0dHJpYnV0ZURlY2wgPSBzdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVE
ZWNsKCk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVEZWNsKSB7Ci0gICAgICAgICAgICBpZiAoZmly
c3RBdXRob3JSdWxlID09IC0xKSBmaXJzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNsQ291bnQ7
Ci0gICAgICAgICAgICBsYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xDb3VudDsKKyAgICAg
ICAgICAgIGxhc3RBdXRob3JSdWxlID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgpOworICAgICAgICAg
ICAgaWYgKGZpcnN0QXV0aG9yUnVsZSA9PSAtMSkKKyAgICAgICAgICAgICAgICBmaXJzdEF1dGhv
clJ1bGUgPSBsYXN0QXV0aG9yUnVsZTsKICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlv
bihhdHRyaWJ1dGVEZWNsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTc3MCw4ICs3NjIsOSBAQCBS
ZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlU3R5CiAgICAgaWYgKHN0eWxlZEVs
ZW1lbnQpIHsKICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGlubGluZURlY2wg
PSBzdHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKICAgICAgICAgaWYgKGlubGluZURl
Y2wpIHsKLSAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpIGZpcnN0QXV0aG9y
UnVsZSA9IG1fbWF0Y2hlZERlY2xDb3VudDsKLSAgICAgICAgICAgIGxhc3RBdXRob3JSdWxlID0g
bV9tYXRjaGVkRGVjbENvdW50OworICAgICAgICAgICAgbGFzdEF1dGhvclJ1bGUgPSBtX21hdGNo
ZWREZWNscy5zaXplKCk7CisgICAgICAgICAgICBpZiAoZmlyc3RBdXRob3JSdWxlID09IC0xKQor
ICAgICAgICAgICAgICAgIGZpcnN0QXV0aG9yUnVsZSA9IGxhc3RBdXRob3JSdWxlOwogICAgICAg
ICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKGlubGluZURlY2wpOwogICAgICAgICB9CiAgICAg
fQpAQCAtNzgwLDcgKzc3Myw3IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpjcmVh
dGVTdHkKICAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3Nl
IHByb3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KICAgICAvLyBUaGUg
b3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3Jp
dHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKICAgICAvLyBhbmQgKDQpIG5v
cm1hbCBpbXBvcnRhbnQuCi0gICAgYXBwbHlEZWNsYXJhdGlvbnModHJ1ZSwgZmFsc2UsIDAsIG1f
bWF0Y2hlZERlY2xDb3VudC0xKTsKKyAgICBhcHBseURlY2xhcmF0aW9ucyh0cnVlLCBmYWxzZSwg
MCwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnModHJ1
ZSwgdHJ1ZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CiAgICAgYXBwbHlEZWNs
YXJhdGlvbnModHJ1ZSwgdHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKICAgICBh
cHBseURlY2xhcmF0aW9ucyh0cnVlLCB0cnVlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7CkBA
IC04MDUsNyArNzk4LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVN0
eQogICAgIH0KICAgICAKICAgICAvLyBOb3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwg
cHJpb3JpdHkgcHJvcGVydGllcyBhbmQgYWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCi0g
ICAgYXBwbHlEZWNsYXJhdGlvbnMoZmFsc2UsIGZhbHNlLCBsYXN0VUFSdWxlKzEsIG1fbWF0Y2hl
ZERlY2xDb3VudC0xKTsKKyAgICBhcHBseURlY2xhcmF0aW9ucyhmYWxzZSwgZmFsc2UsIGxhc3RV
QVJ1bGUgKyAxLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKICAgICBhcHBseURlY2xhcmF0
aW9ucyhmYWxzZSwgdHJ1ZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CiAgICAg
YXBwbHlEZWNsYXJhdGlvbnMoZmFsc2UsIHRydWUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVs
ZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnMoZmFsc2UsIHRydWUsIGZpcnN0VUFSdWxlLCBsYXN0
VUFSdWxlKTsKQEAgLTg0OCw3ICs4NDEsNyBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rv
cjo6Y3JlYXRlUHNlCiAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZSwgZmlyc3RVc2VyUnVsZSwg
bGFzdFVzZXJSdWxlKTsKICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUsIGZpcnN0QXV0aG9y
UnVsZSwgbGFzdEF1dGhvclJ1bGUpOwogICAgIAotICAgIGlmIChtX21hdGNoZWREZWNsQ291bnQg
PT0gMCkKKyAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKICAgICBzdHlsZSA9IG5ldyAoZS0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkg
UmVuZGVyU3R5bGUoKTsKQEAgLTg2MCw3ICs4NTMsNyBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y3JlYXRlUHNlCiAgICAgc3R5bGUtPm5vbmluaGVyaXRlZF9mbGFncy5fc3R5bGVU
eXBlID0gcHNldWRvU3R5bGU7CiAgICAgCiAgICAgLy8gSGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVz
LgotICAgIGFwcGx5RGVjbGFyYXRpb25zKHRydWUsIGZhbHNlLCAwLCBtX21hdGNoZWREZWNsQ291
bnQtMSk7CisgICAgYXBwbHlEZWNsYXJhdGlvbnModHJ1ZSwgZmFsc2UsIDAsIG1fbWF0Y2hlZERl
Y2xzLnNpemUoKSAtIDEpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zKHRydWUsIHRydWUsIGZpcnN0
QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zKHRydWUs
IHRydWUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlv
bnModHJ1ZSwgdHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwpAQCAtODg0LDcgKzg3Nyw3
IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVQc2UKICAgICAgICAgbV9i
YWNrZ3JvdW5kQ29sb3IgPSBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CiAgICAgfQogICAgIAot
ICAgIGFwcGx5RGVjbGFyYXRpb25zKGZhbHNlLCBmYWxzZSwgbGFzdFVBUnVsZSsxLCBtX21hdGNo
ZWREZWNsQ291bnQtMSk7CisgICAgYXBwbHlEZWNsYXJhdGlvbnMoZmFsc2UsIGZhbHNlLCBsYXN0
VUFSdWxlICsgMSwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CiAgICAgYXBwbHlEZWNsYXJh
dGlvbnMoZmFsc2UsIHRydWUsIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwogICAg
IGFwcGx5RGVjbGFyYXRpb25zKGZhbHNlLCB0cnVlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1
bGUpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zKGZhbHNlLCB0cnVlLCBmaXJzdFVBUnVsZSwgbGFz
dFVBUnVsZSk7CkluZGV4OiBXZWJDb3JlL3htbC94bWxodHRwcmVxdWVzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmgJKHJldmlzaW9uIDE0MDY4KQorKysgV2Vi
Q29yZS94bWwveG1saHR0cHJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBA
QAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIlRyYW5zZmVySm9iQ2xpZW50LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzUsNyArNzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkRGF0YShUcmFuc2ZlckpvYiosIGNvbnN0IGNo
YXIgKmRhdGEsIGludCBzaXplKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRBbGxEYXRhKFRy
YW5zZmVySm9iKik7CiAKLSAgICB2b2lkIHByb2Nlc3NTeW5jTG9hZFJlc3VsdHMoY29uc3QgRGVw
cmVjYXRlZEJ5dGVBcnJheSYgZGF0YSwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcmIGhlYWRlcnMpOworICAgIHZvaWQgcHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyhj
b25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nJiBoZWFkZXJzKTsKIAogICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0
OwogICAgIApJbmRleDogV2ViQ29yZS94bWwveG1saHR0cHJlcXVlc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmNwcAkocmV2aXNpb24gMTQwNjgpCisrKyBX
ZWJDb3JlL3htbC94bWxodHRwcmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE2ICsy
NSwxNyBAQAogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJLV1FMb2FkZXIu
aCIKLSNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCi0j
aW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKLSNpbmNsdWRlICJUcmFuc2ZlckpvYi5oIgotI2luY2x1
ZGUgPGtqcy9wcm90ZWN0Lmg+CisjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUg
IlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIlRyYW5zZmVySm9iLmgiCisjaW5jbHVkZSAiZG9t
Ml9ldmVudHNpbXBsLmgiCisjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlIDxranMv
cHJvdGVjdC5oPgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgS0lPOwogCkBAIC0zMjcsNyArMzI4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChj
b25zdCBTdHJpbmcmIAogICAgICAgICBtX2pvYi0+YWRkTWV0YURhdGEoImN1c3RvbUhUVFBIZWFk
ZXIiLCBtX3JlcXVlc3RIZWFkZXJzKTsKIAogICAgIGlmICghbV9hc3luYykgewotICAgICAgICBE
ZXByZWNhdGVkQnl0ZUFycmF5IGRhdGE7CisgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOwogICAg
ICAgICBLVVJMIGZpbmFsVVJMOwogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGhlYWRlcnM7CiAK
QEAgLTQ3NywyNiArNDc4LDI2IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzVGV4
dCgpIGMKICAgICByZXR1cm4gZmlyc3RMaW5lLnN1YnN0cmluZyhjb2RlRW5kICsgMSwgZW5kT2ZM
aW5lIC0gKGNvZGVFbmQgKyAxKSkuZGVwcmVjYXRlZFN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgp
OwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0
IERlcHJlY2F0ZWRCeXRlQXJyYXkgJmRhdGEsIGNvbnN0IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBE
ZXByZWNhdGVkU3RyaW5nICZoZWFkZXJzKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6cHJvY2Vzc1N5
bmNMb2FkUmVzdWx0cyhjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGNvbnN0IEtVUkwmIGZpbmFs
VVJMLCBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBoZWFkZXJzKQogewotICBpZiAoIXVybE1hdGNo
ZXNEb2N1bWVudERvbWFpbihmaW5hbFVSTCkpIHsKLSAgICBhYm9ydCgpOwotICAgIHJldHVybjsK
LSAgfQotICAKLSAgbV9yZXNwb25zZUhlYWRlcnMgPSBoZWFkZXJzOwotICBjaGFuZ2VTdGF0ZShM
b2FkZWQpOwotICBpZiAobV9hYm9ydGVkKQotICAgIHJldHVybjsKLSAgCi0gIGNvbnN0IGNoYXIg
KmJ5dGVzID0gKGNvbnN0IGNoYXIgKilkYXRhLmRhdGEoKTsKLSAgaW50IGxlbiA9IChpbnQpZGF0
YS5zaXplKCk7CisgICAgaWYgKCF1cmxNYXRjaGVzRG9jdW1lbnREb21haW4oZmluYWxVUkwpKSB7
CisgICAgICAgIGFib3J0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgcmVjZWl2ZWRE
YXRhKDAsIGJ5dGVzLCBsZW4pOwotICBpZiAobV9hYm9ydGVkKQotICAgIHJldHVybjsKKyAgICBt
X3Jlc3BvbnNlSGVhZGVycyA9IGhlYWRlcnM7CisgICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKKyAg
ICBpZiAobV9hYm9ydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBjaGFyKiBieXRl
cyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7CisgICAgaW50IGxlbiA9
IHN0YXRpY19jYXN0PGludD4oZGF0YS5zaXplKCkpOworCisgICAgcmVjZWl2ZWREYXRhKDAsIGJ5
dGVzLCBsZW4pOworICAgIGlmIChtX2Fib3J0ZWQpCisgICAgICAgIHJldHVybjsKIAotICByZWNl
aXZlZEFsbERhdGEoMCk7CisgICAgcmVjZWl2ZWRBbGxEYXRhKDApOwogfQogCiB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpyZWNlaXZlZEFsbERhdGEoVHJhbnNmZXJKb2IqKQpJbmRleDogV2ViQ29yZS94
bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5jcHAJKHJldmlzaW9uIDE0MDY4KQorKysgV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIAogI2lmZGVmIEtIVE1MX1hTTFQK
IAorI2luY2x1ZGUgIlhTTFRQcm9jZXNzb3IuaCIKKwogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5j
bHVkZSAiRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKQEAgLTMz
LDkgKzM1LDkgQEAKICNpbmNsdWRlICJLV1FMb2FkZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSAiVHJhbnNmZXJKb2IuaCIKLSNpbmNsdWRlICJYU0xUUHJvY2Vzc29yLmgiCiAjaW5j
bHVkZSAibG9hZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8a3htbGNvcmUv
VmVjdG9yLmg+CiAjaW5jbHVkZSA8bGlieHNsdC9pbXBvcnRzLmg+CiAjaW5jbHVkZSA8bGlieHNs
dC94c2x0dXRpbHMuaD4KIApAQCAtODMsNyArODUsNyBAQCBzdGF0aWMgeG1sRG9jUHRyIGRvY0xv
YWRlckZ1bmMoY29uc3QgeG1sCiAgICAgICAgICAgICB4bWxHZW5lcmljRXJyb3JGdW5jIG9sZEVy
cm9yRnVuYyA9IHhtbEdlbmVyaWNFcnJvcjsKICAgICAgICAgICAgIHZvaWQgKm9sZEVycm9yQ29u
dGV4dCA9IHhtbEdlbmVyaWNFcnJvckNvbnRleHQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IERlcHJlY2F0ZWRCeXRlQXJyYXkgZGF0YSA9IEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KENh
Y2hlOjpsb2FkZXIoKSwgZ2xvYmFsRG9jTG9hZGVyLCBqb2IsIGZpbmFsVVJMLCBoZWFkZXJzKTsK
KyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhID0gS1dRU2VydmVTeW5jaHJvbm91c1JlcXVl
c3QoQ2FjaGU6OmxvYWRlcigpLCBnbG9iYWxEb2NMb2FkZXIsIGpvYiwgZmluYWxVUkwsIGhlYWRl
cnMpOwogICAgICAgICAKICAgICAgICAgICAgIHhtbFNldEdlbmVyaWNFcnJvckZ1bmMoMCwgcGFy
c2VFcnJvckZ1bmMpOwogICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc3BlY2lmeSBhbiBlbmNvZGlu
ZyBoZXJlLiBOZWl0aGVyIEdlY2tvIG5vciBXaW5JRSByZXNwZWN0cwpJbmRleDogV2ViQ29yZS9r
d3EvS1dRTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rd3EvS1dRTG9hZGVyLmgJKHJl
dmlzaW9uIDE0MDY4KQorKysgV2ViQ29yZS9rd3EvS1dRTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDYgKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKKyNpbmNsdWRlIDxreG1s
Y29yZS9WZWN0b3IuaD4KKwogI2lmIF9fT0JKQ19fCiBAY2xhc3MgTlNEaWN0aW9uYXJ5OwogQGNs
YXNzIE5TU3RyaW5nOwpAQCAtNDgsMTMgKzUwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIExvYWRlcjsKICAgICBjbGFzcyBSZXF1ZXN0OwogICAgIGNsYXNzIFN0cmluZzsKLQot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBEZXByZWNhdGVkQXJyYXk7Ci0KLSAgICB0
eXBlZGVmIERlcHJlY2F0ZWRBcnJheTxjaGFyPiBEZXByZWNhdGVkQnl0ZUFycmF5OwogfQogCi1X
ZWJDb3JlOjpEZXByZWNhdGVkQnl0ZUFycmF5IEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KFdl
YkNvcmU6OkxvYWRlciosIFdlYkNvcmU6OkRvY0xvYWRlciosIFdlYkNvcmU6OlRyYW5zZmVySm9i
KiwgS1VSTCYgZmluYWxVUkwsIERlcHJlY2F0ZWRTdHJpbmcmIGhlYWRlcnMpOworVmVjdG9yPGNo
YXI+IEtXUVNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KFdlYkNvcmU6OkxvYWRlciosIFdlYkNvcmU6
OkRvY0xvYWRlciosIFdlYkNvcmU6OlRyYW5zZmVySm9iKiwgS1VSTCYgZmluYWxVUkwsIERlcHJl
Y2F0ZWRTdHJpbmcmIGhlYWRlcnMpOwogCiB2b2lkIEtXUUNoZWNrQ2FjaGVPYmplY3RTdGF0dXMo
V2ViQ29yZTo6RG9jTG9hZGVyKiwgV2ViQ29yZTo6Q2FjaGVkT2JqZWN0Kik7CiBib29sIEtXUUNo
ZWNrSWZSZWxvYWRpbmcoV2ViQ29yZTo6RG9jTG9hZGVyKik7CkluZGV4OiBXZWJDb3JlL2t3cS9L
V1FMb2FkZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rd3EvS1dRTG9hZGVyLm1tCShyZXZp
c2lvbiAxNDA2OCkKKysrIFdlYkNvcmUva3dxL0tXUUxvYWRlci5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQAogI2ltcG9ydCAiUmVxdWVzdC5oIgogI2ltcG9ydCAiV2ViQ29yZUZy
YW1lQnJpZGdlLmgiCiAjaW1wb3J0ICJsb2FkZXIuaCIKLSNpbXBvcnQgImxvYWRlci5oIgorI2lt
cG9ydCA8a3htbGNvcmUvVmVjdG9yLmg+CiAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxSZXNw
b25zZS5oPgogCkBAIC0xMjAsMTIgKzEyMCwxMiBAQCBOU1N0cmluZyAqS1dRSGVhZGVyU3RyaW5n
RnJvbURpY3Rpb25hcnkoCiAgICAgcmV0dXJuIGhlYWRlclN0cmluZzsKIH0KIAotRGVwcmVjYXRl
ZEJ5dGVBcnJheSBLV1FTZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChMb2FkZXIgKmxvYWRlciwgRG9j
TG9hZGVyICpkb2NMb2FkZXIsIFRyYW5zZmVySm9iICpqb2IsIEtVUkwgJmZpbmFsVVJMLCBEZXBy
ZWNhdGVkU3RyaW5nICZyZXNwb25zZUhlYWRlcnMpCitWZWN0b3I8Y2hhcj4gS1dRU2VydmVTeW5j
aHJvbm91c1JlcXVlc3QoTG9hZGVyICpsb2FkZXIsIERvY0xvYWRlciAqZG9jTG9hZGVyLCBUcmFu
c2ZlckpvYiAqam9iLCBLVVJMICZmaW5hbFVSTCwgRGVwcmVjYXRlZFN0cmluZyAmcmVzcG9uc2VI
ZWFkZXJzKQogewogICAgIEZyYW1lTWFjICpmcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1lTWFjICo+
KGRvY0xvYWRlci0+ZnJhbWUoKSk7CiAgICAgCiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuIERlcHJlY2F0ZWRCeXRlQXJyYXkoKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxjaGFyPigp
OwogICAgIAogICAgIFdlYkNvcmVGcmFtZUJyaWRnZSAqYnJpZGdlID0gZnJhbWUtPmJyaWRnZSgp
OwogCkBAIC0xNTQsMTUgKzE1NCwxNSBAQCBEZXByZWNhdGVkQnl0ZUFycmF5IEtXUVNlcnZlU3lu
Y2hyb25vdXNSCiAgICAgZmluYWxVUkwgPSBmaW5hbE5TVVJMOwogICAgIHJlc3BvbnNlSGVhZGVy
cyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21OU1N0cmluZyhLV1FIZWFkZXJTdHJpbmdGcm9tRGlj
dGlvbmFyeShyZXNwb25zZUhlYWRlckRpY3QsIHN0YXR1c0NvZGUpKTsKIAotICAgIERlcHJlY2F0
ZWRCeXRlQXJyYXkgcmVzdWx0cyhbcmVzdWx0RGF0YSBsZW5ndGhdKTsKKyAgICBWZWN0b3I8Y2hh
cj4gcmVzdWx0cyhbcmVzdWx0RGF0YSBsZW5ndGhdKTsKIAotICAgIG1lbWNweSggcmVzdWx0cy5k
YXRhKCksIFtyZXN1bHREYXRhIGJ5dGVzXSwgW3Jlc3VsdERhdGEgbGVuZ3RoXSApOworICAgIG1l
bWNweShyZXN1bHRzLmRhdGEoKSwgW3Jlc3VsdERhdGEgYnl0ZXNdLCBbcmVzdWx0RGF0YSBsZW5n
dGhdKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKIAotICAgIHJldHVybiBEZXByZWNhdGVkQnl0ZUFycmF5KCk7CisgICAgcmV0dXJuIFZl
Y3RvcjxjaGFyPigpOwogfQogCiBpbnQgS1dRTnVtYmVyT2ZQZW5kaW5nT3JMb2FkaW5nUmVxdWVz
dHMoV2ViQ29yZTo6RG9jTG9hZGVyICpkbCkKSW5kZXg6IFdlYkNvcmUva3dxL0tXUVRleHRTdHJl
YW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3dxL0tXUVRleHRTdHJlYW0uY3BwCShyZXZp
c2lvbiAxNDA2OCkKKysrIFdlYkNvcmUva3dxL0tXUVRleHRTdHJlYW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxOSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJL
V1FUZXh0U3RyZWFtLmgiCiAKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPGt4bWxj
b3JlL1ZlY3Rvci5oPgogCiBjb25zdCBzaXplX3QgaW50ZWdlck9yUG9pbnRlckFzU3RyaW5nQnVm
ZmVyU2l6ZSA9IDEwMDsgLy8gbGFyZ2UgZW5vdWdoIGZvciBhbnkgaW50ZWdlciBvciBwb2ludGVy
IGluIHN0cmluZyBmb3JtYXQsIGluY2x1ZGluZyB0cmFpbGluZyBudWxsIGNoYXJhY3RlcgogY29u
c3QgY2hhciAqcHJlY2lzaW9uRm9ybWF0c1tdID0geyAiJS4wZiIsICIlLjFmIiwgIiUuMmYiLCAi
JS4zZiIsICIlLjRmIiwgIiUuNWYiICIlLjZmIn07IAogY29uc3QgaW50IG1heFByZWNpc2lvbiA9
IDY7IC8vIG11c3QgbWF0Y2ggdG8gcHJlY2lzaW9uRm9ybWF0cwogY29uc3QgaW50IGRlZmF1bHRQ
cmVjaXNpb24gPSA2OyAvLyBtYXRjaGVzIHF0IGFuZCBzcHJpbnRmKC4uLCAiJWYiLCAuLi4pIGJl
aGF2aW91cgogCi1RVGV4dFN0cmVhbTo6UVRleHRTdHJlYW0oY29uc3QgRGVwcmVjYXRlZEJ5dGVB
cnJheSYgYmEpCi0gICAgOiBtX2hhc0J5dGVBcnJheSh0cnVlKSwgbV9ieXRlQXJyYXkoYmEpLCBt
X3N0cmluZygwKSwgbV9wcmVjaXNpb24oZGVmYXVsdFByZWNpc2lvbikKLXsKLX0KLQogUVRleHRT
dHJlYW06OlFUZXh0U3RyZWFtKERlcHJlY2F0ZWRTdHJpbmcqIHMpCiAgICAgOiBtX2hhc0J5dGVB
cnJheShmYWxzZSksIG1fc3RyaW5nKHMpLCBtX3ByZWNpc2lvbihkZWZhdWx0UHJlY2lzaW9uKQog
ewpAQCAtNDYsMTEgKzQyLDkgQEAgUVRleHRTdHJlYW06OlFUZXh0U3RyZWFtKERlcHJlY2F0ZWRT
dHJpbgogCiBRVGV4dFN0cmVhbSYgUVRleHRTdHJlYW06Om9wZXJhdG9yPDwoY2hhciBjKQogewot
ICAgIGlmIChtX2hhc0J5dGVBcnJheSkgewotICAgICAgICB1bnNpZ25lZCBvbGRTaXplID0gbV9i
eXRlQXJyYXkuc2l6ZSgpOwotICAgICAgICBtX2J5dGVBcnJheS5yZXNpemUob2xkU2l6ZSArIDEp
OwotICAgICAgICBtX2J5dGVBcnJheVtvbGRTaXplXSA9IGM7Ci0gICAgfQorICAgIGlmIChtX2hh
c0J5dGVBcnJheSkKKyAgICAgICAgbV9ieXRlQXJyYXkuYXBwZW5kKGMpOworCiAgICAgaWYgKG1f
c3RyaW5nKQogICAgICAgICBtX3N0cmluZy0+YXBwZW5kKFFDaGFyKGMpKTsKICAgICByZXR1cm4g
KnRoaXM7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FUZXh0U3RyZWFtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rd3EvS1dRVGV4dFN0cmVhbS5oCShyZXZpc2lvbiAxNDA2OCkKKysrIFdlYkNvcmUv
a3dxL0tXUVRleHRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lm
bmRlZiBRVGV4dFN0cmVhbV9ICiAjZGVmaW5lIFFUZXh0U3RyZWFtX0gKIAotI2luY2x1ZGUgIkRl
cHJlY2F0ZWRBcnJheS5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBjbGFzcyBE
ZXByZWNhdGVkQ1N0cmluZzsKIGNsYXNzIFFDaGFyOwpAQCAtNDMsNyArNDMsNiBAQCBRVGV4dFN0
cmVhbSAmZW5kbChRVGV4dFN0cmVhbSYgc3RyZWFtKTsKIAogY2xhc3MgUVRleHRTdHJlYW0gewog
cHVibGljOgotICAgIFFUZXh0U3RyZWFtKGNvbnN0IERlcHJlY2F0ZWRCeXRlQXJyYXkmKTsKICAg
ICBRVGV4dFN0cmVhbShEZXByZWNhdGVkU3RyaW5nKik7CiAKICAgICBRVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChjaGFyKTsKQEAgLTY5LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBRVGV4dFN0cmVh
bSYgb3BlcmF0b3I9KGNvbnN0IFFUZXh0U3RyZWFtJik7CiAKICAgICBib29sIG1faGFzQnl0ZUFy
cmF5OwotICAgIERlcHJlY2F0ZWRCeXRlQXJyYXkgbV9ieXRlQXJyYXk7CisgICAgVmVjdG9yPGNo
YXI+IG1fYnl0ZUFycmF5OwogICAgIERlcHJlY2F0ZWRTdHJpbmcqIG1fc3RyaW5nOwogICAgIGlu
dCBtX3ByZWNpc2lvbjsKIH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Gb3JtRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zvcm1EYXRhLmgJKHJldmlzaW9uIDE0MDY4KQorKysg
V2ViQ29yZS9sb2FkZXIvRm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBA
QAogCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRW
YWx1ZUxpc3QuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogY2xhc3MgRGVwcmVj
YXRlZENTdHJpbmc7CiAKQEAgLTMxLDExICszMiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgogICAgIEZvcm1EYXRhRWxlbWVudCgpIDog
bV90eXBlKGRhdGEpIHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBEZXByZWNhdGVkQnl0
ZUFycmF5ICZhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9Ci0gICAgRm9y
bURhdGFFbGVtZW50KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJmZpbGVuYW1lKSA6IG1fdHlwZShl
bmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpIHsgfQorICAgIEZvcm1EYXRhRWxlbWVu
dChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlwZShkYXRhKSwgbV9kYXRhKGFycmF5
KSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZmlsZW5h
bWUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSkgeyB9CiAKICAg
ICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7Ci0gICAgRGVwcmVjYXRlZEJ5dGVB
cnJheSBtX2RhdGE7CisgICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKICAgICBEZXByZWNhdGVkU3Ry
aW5nIG1fZmlsZW5hbWU7CiB9OwogCkBAIC00Nyw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFwcGVuZERhdGEoY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwogICAgIHZvaWQgYXBw
ZW5kRmlsZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZmaWxlbmFtZSk7CiAKLSAgICBEZXByZWNh
dGVkQnl0ZUFycmF5IGZsYXR0ZW4oKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKKyAgICBWZWN0b3I8
Y2hhcj4gZmxhdHRlbigpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogICAgIERlcHJlY2F0ZWRTdHJp
bmcgZmxhdHRlblRvU3RyaW5nKCkgY29uc3Q7IC8vIG9taXRzIGZpbGVzCiAKICAgICBzaXplX3Qg
Y291bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRzLmNvdW50KCk7IH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Gb3Jt
RGF0YS5jcHAJKHJldmlzaW9uIDE0MDY4KQorKysgV2ViQ29yZS9sb2FkZXIvRm9ybURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRm9ybURhdGEuaCIKIAorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZvcm1EYXRhOjpGb3JtRGF0YSgpCkBAIC00OCwxOCArNTAs
MTcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25zdCBEZXByZWNhdAogICAgIG1fZWxl
bWVudHMuYXBwZW5kKGZpbGVuYW1lKTsKIH0KIAotRGVwcmVjYXRlZEJ5dGVBcnJheSBGb3JtRGF0
YTo6ZmxhdHRlbigpIGNvbnN0CitWZWN0b3I8Y2hhcj4gRm9ybURhdGE6OmZsYXR0ZW4oKSBjb25z
dAogewogICAgIC8vIENvbmNhdGVuYXRlIGFsbCB0aGUgYnl0ZSBhcnJheXMsIGJ1dCBvbWl0IGFu
eSBmaWxlcy4KLSAgICBEZXByZWNhdGVkQnl0ZUFycmF5IGE7CisgICAgVmVjdG9yPGNoYXI+IGE7
CiAgICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxGb3JtRGF0YUVsZW1l
bnQ+IGl0ID0gbV9lbGVtZW50cy5iZWdpbigpOyBpdCAhPSBtX2VsZW1lbnRzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCAmZSA9ICppdDsKKyAgICAgICAgY29u
c3QgRm9ybURhdGFFbGVtZW50JiBlID0gKml0OwogICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9y
bURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGEuc2l6
ZSgpOwotICAgICAgICAgICAgaWYgKG9sZFNpemUgPT0gMCkgeworICAgICAgICAgICAgaWYgKGEu
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGEgPSBlLm1fZGF0YTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgYS5kZXRhY2goKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gYS5zaXplKCk7CiAgICAgICAgICAgICAg
ICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGEucmVz
aXplKG9sZFNpemUgKyBkZWx0YSk7CiAgICAgICAgICAgICAgICAgbWVtY3B5KGEuZGF0YSgpICsg
b2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7CkBAIC03MSw3ICs3Miw3IEBAIERlcHJl
Y2F0ZWRCeXRlQXJyYXkgRm9ybURhdGE6OmZsYXR0ZW4oKSAKIAogRGVwcmVjYXRlZFN0cmluZyBG
b3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29uc3QKIHsKLSAgICBEZXByZWNhdGVkQnl0ZUFy
cmF5IGJ5dGVzID0gZmxhdHRlbigpOworICAgIFZlY3RvcjxjaGFyPiBieXRlcyA9IGZsYXR0ZW4o
KTsKICAgICByZXR1cm4gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShieXRlcy5kYXRhKCks
IGJ5dGVzLnNpemUoKSk7CiB9CiAK
</data>
<flag name="review"
          id="2204"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8078</attachid>
            <date>2006-05-02 12:15:47 -0700</date>
            <delta_ts>2006-05-09 19:55:48 -0700</delta_ts>
            <desc>patch for image and caching classes</desc>
            <filename>image-cached.diff</filename>
            <type>text/plain</type>
            <size>40078</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vSW1hZ2UuY3BwCShyZXZpc2lvbiAxNDE1NikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiAjaWYgX19BUFBMRV9fCiAvLyBG
SVhNRTogV2lsbCBnbyBhd2F5IHdoZW4gd2UgbWFrZSBQREYgYSBzdWJjbGFzcy4KQEAgLTEyNiwx
MCArMTI4LDEwIEBAIEludFNpemUgSW1hZ2U6OnNpemUoKSBjb25zdAogICAgIHJldHVybiBtX3Np
emU7CiB9CiAKLWJvb2wgSW1hZ2U6OnNldERhdGEoY29uc3QgRGVwcmVjYXRlZEJ5dGVBcnJheSYg
Ynl0ZXMsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQorYm9vbCBJbWFnZTo6c2V0RGF0YShib29sIGFs
bERhdGFSZWNlaXZlZCkKIHsKLSAgICBpbnQgbGVuZ3RoID0gYnl0ZXMuY291bnQoKTsKLSAgICBp
ZiAobGVuZ3RoID09IDApCisgICAgaW50IGxlbmd0aCA9IG1fZGF0YS5zaXplKCk7CisgICAgaWYg
KCFsZW5ndGgpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAjaWZkZWYga0ltYWdlQnl0ZXNDdXRv
ZmYKQEAgLTE0NCwxNSArMTQ2LDEzIEBAIGJvb2wgSW1hZ2U6OnNldERhdGEoY29uc3QgRGVwcmVj
YXRlZEJ5dGUKICAgICAKICNpZiBfX0FQUExFX18KICAgICAvLyBBdm9pZCB0aGUgZXh0cmEgY29w
eSBvZiBieXRlcyBieSBqdXN0IGhhbmRpbmcgdGhlIGJ5dGUgYXJyYXkgZGlyZWN0bHkgdG8gYSBD
RkRhdGFSZWYuCi0gICAgLy8gV2Ugd2lsbCBrZWVwIHRoZXNlIGJ5dGVzIGFsaXZlIGluIG91ciBt
X2RhdGEgdmFyaWFibGUuCi0gICAgQ0ZEYXRhUmVmIGRhdGEgPSBDRkRhdGFDcmVhdGVXaXRoQnl0
ZXNOb0NvcHkoMCwgKGNvbnN0IFVJbnQ4KilieXRlcy5kYXRhKCksIGxlbmd0aCwga0NGQWxsb2Nh
dG9yTnVsbCk7CisgICAgQ0ZEYXRhUmVmIGRhdGEgPSBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0Nv
cHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KG1fZGF0YS5kYXRhKCkpLCBsZW5n
dGgsIGtDRkFsbG9jYXRvck51bGwpOwogICAgIGJvb2wgcmVzdWx0ID0gc2V0TmF0aXZlRGF0YShk
YXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogICAgIENGUmVsZWFzZShkYXRhKTsKICNlbHNlCi0gICAg
Ym9vbCByZXN1bHQgPSBzZXROYXRpdmVEYXRhKCZieXRlcywgYWxsRGF0YVJlY2VpdmVkKTsKKyAg
ICBib29sIHJlc3VsdCA9IHNldE5hdGl2ZURhdGEoJm1fZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsK
ICNlbmRpZgogCi0gICAgbV9kYXRhID0gYnl0ZXM7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vSW1hZ2UuaAkocmV2aXNpb24gMTQxNTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ltYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjYsMTEgKzI3LDEwIEBACiAjaWZuZGVmIElNQUdF
X0hfCiAjZGVmaW5lIElNQUdFX0hfCiAKLSNpbmNsdWRlICJEZXByZWNhdGVkQXJyYXkuaCIKKyNp
bmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiRmxvYXRT
aXplLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDxreG1s
Y29yZS9WZWN0b3IuaD4KIApAQCAtMTIyLDggKzEyMiwxMCBAQCBwdWJsaWM6CiAgICAgaW50IHdp
ZHRoKCkgY29uc3Q7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0OwogCi0gICAgYm9vbCBzZXREYXRh
KGNvbnN0IERlcHJlY2F0ZWRCeXRlQXJyYXkmIGJ5dGVzLCBib29sIGFsbERhdGFSZWNlaXZlZCk7
CisgICAgYm9vbCBzZXREYXRhKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICBib29sIHNldE5h
dGl2ZURhdGEoTmF0aXZlQnl0ZVB0ciBieXRlUHRyLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Cisg
ICAgCisgICAgVmVjdG9yPGNoYXI+JiBkYXRhQnVmZmVyKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAK
ICAgICAvLyBJdCBtYXkgbG9vayB1bnVzdWFsIHRoYXQgdGhlcmUgaXMgbm8gc3RhcnQgYW5pbWF0
aW9uIGNhbGwgYXMgcHVibGljIEFQSS4gIFRoaXMgaXMgYmVjYXVzZQogICAgIC8vIHdlIHN0YXJ0
IGFuZCBzdG9wIGFuaW1hdGluZyBsYXppbHkuICBBbmltYXRpb24gYmVnaW5zIHdoZW5ldmVyIHNv
bWVvbmUgZHJhd3MgdGhlIGltYWdlLiAgSXQgd2lsbApAQCAtMTg1LDcgKzE4Nyw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBpbnZhbGlkYXRlTmF0aXZlRGF0YSgpOwogCiAgICAgLy8gTWVtYmVycwot
ICAgIERlcHJlY2F0ZWRCeXRlQXJyYXkgbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCByYXcgZGF0YSBm
b3IgdGhlIGltYWdlLgorICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIHJh
dyBkYXRhIGZvciB0aGUgaW1hZ2UuCiAgICAgSW1hZ2VTb3VyY2UgbV9zb3VyY2U7CiAgICAgbXV0
YWJsZSBJbnRTaXplIG1fc2l6ZTsgLy8gVGhlIHNpemUgdG8gdXNlIGZvciB0aGUgb3ZlcmFsbCBp
bWFnZSAod2lsbCBqdXN0IGJlIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBpbWFnZSkuCiAgICAgCklu
ZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMTQxNTYpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDY2IEBACisyMDA2LTA1LTAyICBTYW0gV2VpbmlnICA8c2FtLndlaW5pZ0BnbWFpbC5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcGF0
Y2ggZm9yIDxodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTgw
Mzk+CisgICAgICAgIFJlbW92ZSB1c2Ugb2YgRGVwcmVjYXRlZEFycmF5IGluIGZhdm9yIG9mIG5l
dyBWZWN0b3IgY2xhc3MKKworICAgICAgICBSZW1vdmVzIERlcHJlY2F0ZWRBcnJheSBmcm9tIElt
YWdlIGFuZCBjYWNoaW5nIGNsYXNzZXMgYW5kCisgICAgICAgIGNsZWFucyB1cCB0aGUgUmVxdWVz
dCBjbGFzcy4KKworICAgICAgICAqIGxvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OmRhdGEpOgorICAgICAgICAqIGxv
YWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZEltYWdlOjpjaGVja05vdGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6c2hv
dWxkU3RvcEFuaW1hdGlvbik6CisgICAgICAgICogbG9hZGVyL0NhY2hlZEltYWdlLmg6CisgICAg
ICAgICogbG9hZGVyL0NhY2hlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRP
YmplY3Q6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkT2JqZWN0OjpzZXRF
eHBpcmVEYXRlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkT2JqZWN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRPYmplY3Q6OnNldENoYXJzZXQpOgorICAgICAgICAqIGxvYWRlci9DYWNo
ZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0OjpkYXRhKToKKyAg
ICAgICAgKiBsb2FkZXIvQ2FjaGVkU2NyaXB0Lmg6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFhC
TERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhCTERvY3VtZW50OjpkYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhCTERvY3VtZW50OjpjaGVja05vdGlmeSk6Cisg
ICAgICAgICogbG9hZGVyL0NhY2hlZFhCTERvY3VtZW50Lmg6CisgICAgICAgICogbG9hZGVyL0Nh
Y2hlZFhTTFN0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkWFNMU3R5bGVT
aGVldDo6ZGF0YSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuaDoKKyAg
ICAgICAgKiBsb2FkZXIvUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6On5SZXF1ZXN0KToKKyAgICAgICAg
KiBsb2FkZXIvUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6YnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6OmNhY2hlZE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXF1ZXN0Ojpkb2NMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6aXNJ
bmNyZW1lbnRhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpzZXRJc0luY3JlbWVudGFs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6OmlzTXVsdGlwYXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlcXVlc3Q6OnNldElzTXVsdGlwYXJ0KToKKyAgICAgICAgKiBsb2FkZXIvbG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyb3NzRG9tYWluKToKKyAgICAgICAgKFdlYkNvcmU6
OkxvYWRlcjo6TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6bG9hZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMb2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRlcjo6cmVjZWl2ZWRBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRl
cjo6cmVjZWl2ZWRSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OnJlY2VpdmVk
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Om51bVJlcXVlc3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxvYWRlcjo6Y2FuY2VsUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6TG9h
ZGVyOjpyZW1vdmVCYWNrZ3JvdW5kRGVjb2RpbmdSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxvYWRlcjo6am9iRm9yUmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL2xvYWRlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpzZXRE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2U6OmRhdGFCdWZmZXIpOgorCiAyMDA2LTA1LTAyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBtYWMuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9DYWNoZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZE9iamVjdC5jcHAJKHJldmlzaW9uIDE0MTU2KQorKysgV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKICAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgICAgQ29weXJpZ2h0
IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAKICAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CkBAIC0yOSw3ICszMCw5IEBACiAjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0LmgiCiAKICNpbmNsdWRl
ICJDYWNoZS5oIgorI2luY2x1ZGUgIlJlcXVlc3QuaCIKICNpbmNsdWRlIDxLVVJMLmg+CisjaW5j
bHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDUs
NiArNDgsMTggQEAgQ2FjaGVkT2JqZWN0Ojp+Q2FjaGVkT2JqZWN0KCkKICNlbmRpZgogfQogCitW
ZWN0b3I8Y2hhcj4mIENhY2hlZE9iamVjdDo6YnVmZmVyRGF0YShjb25zdCBjaGFyKiBieXRlcywg
aW50IGFkZGVkU2l6ZSwgUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICAvLyBBZGQgbmV3IGJ5dGVz
IHRvIHRoZSBidWZmZXIgaW4gdGhlIFJlcXVlc3Qgb2JqZWN0LgorICAgIFZlY3RvcjxjaGFyPiYg
YnVmZmVyID0gcmVxdWVzdC0+YnVmZmVyKCk7CisKKyAgICB1bnNpZ25lZCBvbGRTaXplID0gYnVm
ZmVyLnNpemUoKTsKKyAgICBidWZmZXIucmVzaXplKG9sZFNpemUgKyBhZGRlZFNpemUpOworICAg
IG1lbWNweShidWZmZXIuZGF0YSgpICsgb2xkU2l6ZSwgYnl0ZXMsIGFkZGVkU2l6ZSk7CisgICAg
CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKwogdm9pZCBDYWNoZWRPYmplY3Q6OmZpbmlzaCgpCiB7
CiAgICAgaWYgKG1fc2l6ZSA+IENhY2hlOjptYXhDYWNoZWFibGVPYmplY3RTaXplKCkpCkBAIC01
NiwxNiArNzEsMTUgQEAgdm9pZCBDYWNoZWRPYmplY3Q6OmZpbmlzaCgpCiAgICAgICAgIG1fZXhw
aXJlRGF0ZUNoYW5nZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBDYWNoZWRPYmplY3Q6OnNldEV4cGly
ZURhdGUodGltZV90IF9leHBpcmVEYXRlLCBib29sIGNoYW5nZUh0dHBDYWNoZSkKK3ZvaWQgQ2Fj
aGVkT2JqZWN0OjpzZXRFeHBpcmVEYXRlKHRpbWVfdCBleHBpcmVEYXRlLCBib29sIGNoYW5nZUh0
dHBDYWNoZSkKIHsKLSAgICBpZiAoIF9leHBpcmVEYXRlID09IG1fZXhwaXJlRGF0ZSkKKyAgICBp
ZiAoZXhwaXJlRGF0ZSA9PSBtX2V4cGlyZURhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX3N0YXR1cyA9PSBVbmNhY2hlYWJsZSB8fCBtX3N0YXR1cyA9PSBDYWNoZWQpCi0gICAgewog
ICAgICAgICBmaW5pc2goKTsKLSAgICB9Ci0gICAgbV9leHBpcmVEYXRlID0gX2V4cGlyZURhdGU7
CisKKyAgICBtX2V4cGlyZURhdGUgPSBleHBpcmVEYXRlOwogICAgIGlmIChjaGFuZ2VIdHRwQ2Fj
aGUgJiYgbV9leHBpcmVEYXRlKQogICAgICAgIG1fZXhwaXJlRGF0ZUNoYW5nZWQgPSB0cnVlOwog
fQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMTQxNTYp
CisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMsNiArMyw3IEBACiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25v
bGxAbXBpLWhkLm1wZy5kZSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxt
dWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNh
bS53ZWluaWdAZ21haWwuY29tKQogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjksNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQ2FjaGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVk
ZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CkBAIC00Nyw3ICs0
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZihDYWNo
ZWRPYmplY3RDbGllbnQqKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hhcnNldChjb25z
dCBEZXByZWNhdGVkU3RyaW5nJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKERlcHJlY2F0
ZWRCeXRlQXJyYXkmLCBib29sIGF0RW5kKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGEoVmVj
dG9yPGNoYXI+JiwgYm9vbCBhbGxEYXRhUmVjaWV2ZWQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZXJyb3IoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuaAkocmV2aXNpb24gMTQxNTYpCisrKyBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcg
QEAKIAogICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBn
LmRlKQogICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFp
bC5jb20pCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOSw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRP
YmplY3QuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERvY0xvYWRlcjsKQEAg
LTQ1LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGVyZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldENo
YXJzZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0
YShEZXByZWNhdGVkQnl0ZUFycmF5JiwgYm9vbCBhdEVuZCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkYXRhKFZlY3RvcjxjaGFyPiYsIGJvb2wgYWxsRGF0YVJlY2lldmVkKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGVycm9yKCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZE9iamVjdC5oCShyZXZpc2lvbiAx
NDE1NikKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zLDYgKzMsNyBAQAogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xs
QG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVl
bGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0u
d2VpbmlnQGdtYWlsLmNvbSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI3LDkgKzI4LDEwIEBACiAjaWZuZGVm
IEtIVE1MX0NhY2hlZE9iamVjdF9oCiAjZGVmaW5lIEtIVE1MX0NhY2hlZE9iamVjdF9oCiAKLSNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIktXUUtJT0dsb2JhbC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgor
I2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAogI2lmIF9f
T0JKQ19fCkBAIC0xMDEsOCArMTAzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgfQog
ICAgICAgICB2aXJ0dWFsIH5DYWNoZWRPYmplY3QoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2hhcnNldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJikge30KLSAgICAgICAgdmlydHVhbCB2
b2lkIGRhdGEoRGVwcmVjYXRlZEJ5dGVBcnJheSYsIGJvb2wgYXRFbmQpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNldENoYXJzZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYpIHsgfQorICAg
ICAgICB2aXJ0dWFsIFZlY3RvcjxjaGFyPiYgYnVmZmVyRGF0YShjb25zdCBjaGFyKiBieXRlcywg
aW50IGFkZGVkU2l6ZSwgUmVxdWVzdCopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShWZWN0
b3I8Y2hhcj4mLCBib29sIGFsbERhdGFSZWNpZXZlZCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZXJyb3IoKSA9IDA7CiAKICAgICAgICAgY29uc3QgU3RyaW5nICZ1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiAxNDE1NikKKysrIFdlYkNv
cmUvbG9hZGVyL2xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgICAg
Q29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAg
Q29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICAgIENv
cHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMzMsOSArMzQsOSBAQAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgogI2lu
Y2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTERv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCiAjaW5jbHVkZSAiUmVxdWVzdC5oIgot
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIlRyYW5zZmVySm9iLmgiCiAjaW5j
bHVkZSAiVHJhbnNmZXJKb2IuaCIKICNpbmNsdWRlIDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CkBA
IC00MywzMyArNDQsMzQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBj
cm9zc0RvbWFpbihjb25zdCBEZXByZWNhdGVkU3RyaW5nICZhLCBjb25zdCBEZXByZWNhdGVkU3Ry
aW5nICZiKQorc3RhdGljIGJvb2wgY3Jvc3NEb21haW4oY29uc3QgRGVwcmVjYXRlZFN0cmluZyYg
YSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgYikKIHsKLSAgICBpZiAoYSA9PSBiKSByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGEgPT0gYikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRGVw
cmVjYXRlZFN0cmluZ0xpc3QgbDEgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJy4nLCBh
KTsKICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBsMiA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0Ojpz
cGxpdCgnLicsIGIpOwogCi0gICAgd2hpbGUobDEuY291bnQoKSA+IGwyLmNvdW50KCkpCisgICAg
d2hpbGUgKGwxLmNvdW50KCkgPiBsMi5jb3VudCgpKQogICAgICAgICBsMS5wb3BfZnJvbnQoKTsK
IAotICAgIHdoaWxlKGwyLmNvdW50KCkgPiBsMS5jb3VudCgpKQorICAgIHdoaWxlIChsMi5jb3Vu
dCgpID4gbDEuY291bnQoKSkKICAgICAgICAgbDIucG9wX2Zyb250KCk7CiAKLSAgICB3aGlsZShs
Mi5jb3VudCgpID49IDIpCi0gICAgeworICAgIHdoaWxlIChsMi5jb3VudCgpID49IDIpIHsKICAg
ICAgICAgaWYgKGwxID09IGwyKQotICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgbDEucG9wX2Zyb250KCk7CiAgICAgICAgIGwyLnBv
cF9mcm9udCgpOwogICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCiBMb2FkZXI6OkxvYWRl
cigpCiB7Ci0gICAgbV9yZXF1ZXN0c1BlbmRpbmcuc2V0QXV0b0RlbGV0ZSggdHJ1ZSApOworICAg
IG1fcmVxdWVzdHNQZW5kaW5nLnNldEF1dG9EZWxldGUodHJ1ZSk7CiB9CiAKIExvYWRlcjo6fkxv
YWRlcigpCkBAIC03Nyw3ICs3OSw3IEBAIExvYWRlcjo6fkxvYWRlcigpCiAgICAgZGVsZXRlQWxs
VmFsdWVzKG1fcmVxdWVzdHNMb2FkaW5nKTsKIH0KIAotdm9pZCBMb2FkZXI6OmxvYWQoRG9jTG9h
ZGVyKiBkbCwgQ2FjaGVkT2JqZWN0ICpvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwpCit2b2lkIExv
YWRlcjo6bG9hZChEb2NMb2FkZXIqIGRsLCBDYWNoZWRPYmplY3QqIG9iamVjdCwgYm9vbCBpbmNy
ZW1lbnRhbCkKIHsKICAgICBSZXF1ZXN0KiByZXEgPSBuZXcgUmVxdWVzdChkbCwgb2JqZWN0LCBp
bmNyZW1lbnRhbCk7CiAgICAgbV9yZXF1ZXN0c1BlbmRpbmcuYXBwZW5kKHJlcSk7CkBAIC04Niwz
MSArODgsMzEgQEAgdm9pZCBMb2FkZXI6OmxvYWQoRG9jTG9hZGVyKiBkbCwgQ2FjaGVkTwogCiB2
b2lkIExvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoKQogewotICBpZiAoIG1fcmVxdWVzdHNQ
ZW5kaW5nLmNvdW50KCkgPT0gMCApCi0gICAgICByZXR1cm47CisgICAgaWYgKG1fcmVxdWVzdHNQ
ZW5kaW5nLmNvdW50KCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gZ2V0IHRoZSBm
aXJzdCBwZW5kaW5nIHJlcXVlc3QKKyAgICBSZXF1ZXN0KiByZXEgPSBtX3JlcXVlc3RzUGVuZGlu
Zy50YWtlKDApOwogCi0gIC8vIGdldCB0aGUgZmlyc3QgcGVuZGluZyByZXF1ZXN0Ci0gIFJlcXVl
c3QgKnJlcSA9IG1fcmVxdWVzdHNQZW5kaW5nLnRha2UoMCk7CisgICAgS1VSTCB1KHJlcS0+Y2Fj
aGVkT2JqZWN0KCktPnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgVHJhbnNmZXJKb2Iq
IGpvYiA9IG5ldyBUcmFuc2ZlckpvYih0aGlzLCAiR0VUIiwgdSk7CiAKLSAgS1VSTCB1KHJlcS0+
b2JqZWN0LT51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICBUcmFuc2ZlckpvYiogam9iID0g
bmV3IFRyYW5zZmVySm9iKHRoaXMsICJHRVQiLCB1KTsKLSAgCi0gIGlmICghcmVxLT5vYmplY3Qt
PmFjY2VwdCgpLmlzRW1wdHkoKSkKLSAgICAgIGpvYi0+YWRkTWV0YURhdGEoImFjY2VwdCIsIHJl
cS0+b2JqZWN0LT5hY2NlcHQoKSk7Ci0gIGlmIChyZXEtPm1fZG9jTG9hZGVyKSAgewotICAgICAg
S1VSTCByID0gcmVxLT5tX2RvY0xvYWRlci0+ZG9jKCktPlVSTCgpOwotICAgICAgaWYgKHIucHJv
dG9jb2woKS5zdGFydHNXaXRoKCJodHRwIikgJiYgci5wYXRoKCkuaXNFbXB0eSgpKQotICAgICAg
ICAgIHIuc2V0UGF0aCgiLyIpOwotICAgICAgam9iLT5hZGRNZXRhRGF0YSgicmVmZXJyZXIiLCBy
LnVybCgpKTsKLSAgICAgIERlcHJlY2F0ZWRTdHJpbmcgZG9tYWluID0gci5ob3N0KCk7Ci0gICAg
ICBpZiAocmVxLT5tX2RvY0xvYWRlci0+ZG9jKCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAg
ICBkb21haW4gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihyZXEtPm1fZG9jTG9hZGVyLT5k
b2MoKSktPmRvbWFpbigpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgIGlmIChjcm9zc0RvbWFp
bih1Lmhvc3QoKSwgZG9tYWluKSkKLSAgICAgICAgIGpvYi0+YWRkTWV0YURhdGEoImNyb3NzLWRv
bWFpbiIsICJ0cnVlIik7Ci0gIH0KKyAgICBpZiAoIXJlcS0+Y2FjaGVkT2JqZWN0KCktPmFjY2Vw
dCgpLmlzRW1wdHkoKSkKKyAgICAgICAgam9iLT5hZGRNZXRhRGF0YSgiYWNjZXB0IiwgcmVxLT5j
YWNoZWRPYmplY3QoKS0+YWNjZXB0KCkpOworICAgIGlmIChyZXEtPmRvY0xvYWRlcigpKSAgewor
ICAgICAgICBLVVJMIHIgPSByZXEtPmRvY0xvYWRlcigpLT5kb2MoKS0+VVJMKCk7CisgICAgICAg
IGlmIChyLnByb3RvY29sKCkuc3RhcnRzV2l0aCgiaHR0cCIpICYmIHIucGF0aCgpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHIuc2V0UGF0aCgiLyIpOworICAgICAgICBqb2ItPmFkZE1ldGFEYXRh
KCJyZWZlcnJlciIsIHIudXJsKCkpOworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIGRvbWFpbiA9
IHIuaG9zdCgpOworICAgICAgICBpZiAocmVxLT5kb2NMb2FkZXIoKS0+ZG9jKCktPmlzSFRNTERv
Y3VtZW50KCkpCisgICAgICAgICAgICBkb21haW4gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQq
PihyZXEtPmRvY0xvYWRlcigpLT5kb2MoKSktPmRvbWFpbigpLmRlcHJlY2F0ZWRTdHJpbmcoKTsK
KyAgICAgICAgaWYgKGNyb3NzRG9tYWluKHUuaG9zdCgpLCBkb21haW4pKQorICAgICAgICAgICAg
am9iLT5hZGRNZXRhRGF0YSgiY3Jvc3MtZG9tYWluIiwgInRydWUiKTsKKyAgICB9CiAKLSAgaWYg
KGpvYi0+c3RhcnQocmVxLT5tX2RvY0xvYWRlcikpCi0gICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRk
KGpvYiwgcmVxKTsKKyAgICBpZiAoam9iLT5zdGFydChyZXEtPmRvY0xvYWRlcigpKSkKKyAgICAg
ICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKGpvYiwgcmVxKTsKIH0KIAogdm9pZCBMb2FkZXI6OnJl
Y2VpdmVkQWxsRGF0YShUcmFuc2ZlckpvYiogam9iLCBQbGF0Zm9ybURhdGEgYWxsRGF0YSkKQEAg
LTExOCwyOCArMTIwLDI5IEBAIHZvaWQgTG9hZGVyOjpyZWNlaXZlZEFsbERhdGEoVHJhbnNmZXJK
b2IKICAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xvYWRpbmcuZmluZChq
b2IpOwogICAgIGlmIChpID09IG1fcmVxdWVzdHNMb2FkaW5nLmVuZCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgUmVxdWVzdCogciA9IGktPnNlY29uZDsKKworICAgIFJlcXVlc3QqIHJlcSA9IGkt
PnNlY29uZDsKICAgICBtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUoaSk7CiAKLSAgICBDYWNoZWRP
YmplY3QgKm9iamVjdCA9IHItPm9iamVjdDsKLSAgICBEb2NMb2FkZXIgKmRvY0xvYWRlciA9IHIt
Pm1fZG9jTG9hZGVyOworICAgIENhY2hlZE9iamVjdCogb2JqZWN0ID0gcmVxLT5jYWNoZWRPYmpl
Y3QoKTsKKyAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IHJlcS0+ZG9jTG9hZGVyKCk7CiAKICAg
ICBpZiAoam9iLT5lcnJvcigpIHx8IGpvYi0+aXNFcnJvclBhZ2UoKSkgewogICAgICAgICBkb2NM
b2FkZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOwotICAgICAgICByLT5vYmplY3QtPmVycm9y
KCk7CisgICAgICAgIG9iamVjdC0+ZXJyb3IoKTsKICAgICAgICAgZG9jTG9hZGVyLT5zZXRMb2Fk
SW5Qcm9ncmVzcyhmYWxzZSk7CiAgICAgICAgIENhY2hlOjpyZW1vdmUob2JqZWN0KTsKICAgICB9
IGVsc2UgewogICAgICAgICBkb2NMb2FkZXItPnNldExvYWRJblByb2dyZXNzKHRydWUpOwotICAg
ICAgICBvYmplY3QtPmRhdGEoci0+bV9idWZmZXIsIHRydWUpOworICAgICAgICBvYmplY3QtPmRh
dGEocmVxLT5idWZmZXIoKSwgdHJ1ZSk7CiAjaWZkZWYgX19BUFBMRV9fCi0gICAgICAgIHItPm9i
amVjdC0+c2V0QWxsRGF0YShhbGxEYXRhKTsKKyAgICAgICAgb2JqZWN0LT5zZXRBbGxEYXRhKGFs
bERhdGEpOwogI2VuZGlmCiAgICAgICAgIGRvY0xvYWRlci0+c2V0TG9hZEluUHJvZ3Jlc3MoZmFs
c2UpOwogICAgICAgICBvYmplY3QtPmZpbmlzaCgpOwogICAgIH0KIAotICAgIGRlbGV0ZSByOwor
ICAgIGRlbGV0ZSByZXE7CiAKICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQpAQCAtMTQ3
LDI1ICsxNTAsMjQgQEAgdm9pZCBMb2FkZXI6OnJlY2VpdmVkQWxsRGF0YShUcmFuc2ZlckpvYgog
dm9pZCBMb2FkZXI6OnJlY2VpdmVkUmVzcG9uc2UoVHJhbnNmZXJKb2IqIGpvYiwgUGxhdGZvcm1S
ZXNwb25zZSByZXNwb25zZSkKIHsKICNpZmRlZiBfX0FQUExFX18KLSAgICBSZXF1ZXN0ICpyID0g
bV9yZXF1ZXN0c0xvYWRpbmcuZ2V0KGpvYik7Ci0gICAgQVNTRVJUKHIpOworICAgIFJlcXVlc3Qq
IHJlcSA9IG1fcmVxdWVzdHNMb2FkaW5nLmdldChqb2IpOworICAgIEFTU0VSVChyZXEpOwogICAg
IEFTU0VSVChyZXNwb25zZSk7Ci0gICAgci0+b2JqZWN0LT5zZXRSZXNwb25zZShyZXNwb25zZSk7
Ci0gICAgci0+b2JqZWN0LT5zZXRFeHBpcmVEYXRlKEtXUUNhY2hlT2JqZWN0RXhwaXJlc1RpbWUo
ci0+bV9kb2NMb2FkZXIsIHJlc3BvbnNlKSwgZmFsc2UpOworICAgIHJlcS0+Y2FjaGVkT2JqZWN0
KCktPnNldFJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICByZXEtPmNhY2hlZE9iamVjdCgpLT5zZXRF
eHBpcmVEYXRlKEtXUUNhY2hlT2JqZWN0RXhwaXJlc1RpbWUocmVxLT5kb2NMb2FkZXIoKSwgcmVz
cG9uc2UpLCBmYWxzZSk7CiAgICAgCiAgICAgRGVwcmVjYXRlZFN0cmluZyBjaHMgPSBqb2ItPnF1
ZXJ5TWV0YURhdGEoImNoYXJzZXQiKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgaWYgKCFjaHMu
aXNOdWxsKCkpCi0gICAgICAgIHItPm9iamVjdC0+c2V0Q2hhcnNldChjaHMpOworICAgICAgICBy
ZXEtPmNhY2hlZE9iamVjdCgpLT5zZXRDaGFyc2V0KGNocyk7CiAgICAgCi0gICAgaWYgKHItPm11
bHRpcGFydCkgewotICAgICAgICBBU1NFUlQoci0+b2JqZWN0LT5pc0ltYWdlKCkpOwotICAgICAg
ICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSAqPihyLT5vYmplY3QpLT5jbGVhcigpOwotICAgICAg
ICByLT5tX2J1ZmZlci5yZXNpemUoMCk7Ci0gICAgICAgIGlmIChyLT5tX2RvY0xvYWRlci0+ZnJh
bWUoKSkKLSAgICAgICAgICAgIHItPm1fZG9jTG9hZGVyLT5mcmFtZSgpLT5jaGVja0NvbXBsZXRl
ZCgpOworICAgIGlmIChyZXEtPmlzTXVsdGlwYXJ0KCkpIHsKKyAgICAgICAgQVNTRVJUKHJlcS0+
Y2FjaGVkT2JqZWN0KCktPmlzSW1hZ2UoKSk7CisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZElt
YWdlKj4ocmVxLT5jYWNoZWRPYmplY3QoKSktPmNsZWFyKCk7CisgICAgICAgIGlmIChyZXEtPmRv
Y0xvYWRlcigpLT5mcmFtZSgpKQorICAgICAgICAgICAgcmVxLT5kb2NMb2FkZXIoKS0+ZnJhbWUo
KS0+Y2hlY2tDb21wbGV0ZWQoKTsKICAgICB9IGVsc2UgaWYgKEtXUVJlc3BvbnNlSXNNdWx0aXBh
cnQocmVzcG9uc2UpKSB7Ci0gICAgICAgIHItPm11bHRpcGFydCA9IHRydWU7Ci0gICAgICAgIGlm
ICghci0+b2JqZWN0LT5pc0ltYWdlKCkpCisgICAgICAgIHJlcS0+c2V0SXNNdWx0aXBhcnQodHJ1
ZSk7CisgICAgICAgIGlmICghcmVxLT5jYWNoZWRPYmplY3QoKS0+aXNJbWFnZSgpKQogICAgICAg
ICAgICAgam9iLT5jYW5jZWwoKTsKICAgICB9CiAjZW5kaWYKQEAgLTE3Myw0MCArMTc1LDQyIEBA
IHZvaWQgTG9hZGVyOjpyZWNlaXZlZFJlc3BvbnNlKFRyYW5zZmVySm8KIAogdm9pZCBMb2FkZXI6
OnJlY2VpdmVkRGF0YShUcmFuc2ZlckpvYiogam9iLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6
ZSkKIHsKLSAgICBSZXF1ZXN0ICpyID0gbV9yZXF1ZXN0c0xvYWRpbmcuZ2V0KGpvYik7Ci0gICAg
aWYgKCFyKQorICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQoam9i
KTsKKyAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIG9s
ZFNpemUgPSByLT5tX2J1ZmZlci5zaXplKCk7Ci0gICAgci0+bV9idWZmZXIucmVzaXplKG9sZFNp
emUgKyBzaXplKTsKLSAgICBtZW1jcHkoci0+bV9idWZmZXIuZGF0YSgpICsgb2xkU2l6ZSwgZGF0
YSwgc2l6ZSk7CisgICAgQ2FjaGVkT2JqZWN0KiBvYmplY3QgPSByZXF1ZXN0LT5jYWNoZWRPYmpl
Y3QoKTsgICAgCisgICAgVmVjdG9yPGNoYXI+JiBidWZmZXIgPSBvYmplY3QtPmJ1ZmZlckRhdGEo
ZGF0YSwgc2l6ZSwgcmVxdWVzdCk7CiAKLSAgICBpZiAoci0+bXVsdGlwYXJ0KQotICAgICAgICBy
LT5vYmplY3QtPmRhdGEoci0+bV9idWZmZXIsIHRydWUpOyAvLyB0aGUgbG9hZGVyIGRlbGl2ZXJz
IHRoZSBkYXRhIGluIGEgbXVsdGlwYXJ0IHNlY3Rpb24gYWxsIGF0IG9uY2UsIHNlbmQgZW9mCi0g
ICAgZWxzZSBpZiAoci0+aW5jcmVtZW50YWwpCi0gICAgICAgIHItPm9iamVjdC0+ZGF0YShyLT5t
X2J1ZmZlciwgZmFsc2UpOworICAgIC8vIFNldCB0aGUgZGF0YS4KKyAgICBpZiAocmVxdWVzdC0+
aXNNdWx0aXBhcnQoKSkKKyAgICAgICAgLy8gVGhlIGxvYWRlciBkZWxpdmVycyB0aGUgZGF0YSBp
biBhIG11bHRpcGFydCBzZWN0aW9uIGFsbCBhdCBvbmNlLCBzZW5kIGVvZi4KKyAgICAgICAgb2Jq
ZWN0LT5kYXRhKGJ1ZmZlciwgdHJ1ZSk7CisgICAgZWxzZSBpZiAocmVxdWVzdC0+aXNJbmNyZW1l
bnRhbCgpKQorICAgICAgICBvYmplY3QtPmRhdGEoYnVmZmVyLCBmYWxzZSk7CiB9CiAKLWludCBM
b2FkZXI6Om51bVJlcXVlc3RzKCBEb2NMb2FkZXIqIGRsICkgY29uc3QKK2ludCBMb2FkZXI6Om51
bVJlcXVlc3RzKERvY0xvYWRlciogZGwpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IE1heWJlIHdl
IHNob3VsZCBrZWVwIGEgY29sbGVjdGlvbiBvZiByZXF1ZXN0cyBieSBEb2NMb2FkZXIsIHNvIHdl
IGNhbiBkbyB0aGlzIGluc3RhbnRseS4KIAogICAgIGludCByZXMgPSAwOwogCi0gICAgRGVwcmVj
YXRlZFB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBwSXQoIG1fcmVxdWVzdHNQZW5kaW5nICk7Ci0g
ICAgZm9yICg7IHBJdC5jdXJyZW50KCk7ICsrcEl0ICkKLSAgICAgICAgaWYgKCBwSXQuY3VycmVu
dCgpLT5tX2RvY0xvYWRlciA9PSBkbCApCisgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxS
ZXF1ZXN0PiBwSXQobV9yZXF1ZXN0c1BlbmRpbmcpOworICAgIGZvciAoOyBwSXQuY3VycmVudCgp
OyArK3BJdCkgeworICAgICAgICBpZiAocEl0LmN1cnJlbnQoKS0+ZG9jTG9hZGVyKCkgPT0gZGwp
CiAgICAgICAgICAgICByZXMrKzsKKyAgICB9CiAKICAgICBSZXF1ZXN0TWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsKICAgICBmb3IgKFJlcXVlc3RNYXA6
OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdpbigpOyAhKGkgPT0gZW5k
KTsgKytpKSB7CiAgICAgICAgIFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIHJlcyAr
PSAoci0+bV9kb2NMb2FkZXIgPT0gZGwgJiYgIXItPm11bHRpcGFydCk7CisgICAgICAgIHJlcyAr
PSAoci0+ZG9jTG9hZGVyKCkgPT0gZGwgJiYgIXItPmlzTXVsdGlwYXJ0KCkpOwogICAgIH0KIAot
ICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8UmVxdWVzdD4gYmRJdCggbV9yZXF1ZXN0c0Jh
Y2tncm91bmREZWNvZGluZyApOwotICAgIGZvciAoOyBiZEl0LmN1cnJlbnQoKTsgKytiZEl0ICkK
LSAgICAgICAgaWYgKCBiZEl0LmN1cnJlbnQoKS0+bV9kb2NMb2FkZXIgPT0gZGwgKQorICAgIERl
cHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8UmVxdWVzdD4gYmRJdChtX3JlcXVlc3RzQmFja2dyb3Vu
ZERlY29kaW5nKTsKKyAgICBmb3IgKDsgYmRJdC5jdXJyZW50KCk7ICsrYmRJdCkKKyAgICAgICAg
aWYgKGJkSXQuY3VycmVudCgpLT5kb2NMb2FkZXIoKSA9PSBkbCkKICAgICAgICAgICAgIHJlcysr
OwogCiAgICAgaWYgKGRsLT5sb2FkSW5Qcm9ncmVzcygpKQpAQCAtMjE4LDEzICsyMjIsMTEgQEAg
aW50IExvYWRlcjo6bnVtUmVxdWVzdHMoIERvY0xvYWRlciogZGwgKQogdm9pZCBMb2FkZXI6OmNh
bmNlbFJlcXVlc3RzKERvY0xvYWRlciogZGwpCiB7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVy
YXRvcjxSZXF1ZXN0PiBwSXQobV9yZXF1ZXN0c1BlbmRpbmcpOwotICAgIHdoaWxlIChwSXQuY3Vy
cmVudCgpKQotICAgIHsKLSAgICAgICAgaWYgKHBJdC5jdXJyZW50KCktPm1fZG9jTG9hZGVyID09
IGRsKSB7Ci0gICAgICAgICAgICBDYWNoZTo6cmVtb3ZlKCBwSXQuY3VycmVudCgpLT5vYmplY3Qg
KTsKLSAgICAgICAgICAgIG1fcmVxdWVzdHNQZW5kaW5nLnJlbW92ZSggcEl0ICk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQorICAgIHdoaWxlIChwSXQuY3VycmVudCgpKSB7CisgICAgICAgIGlm
IChwSXQuY3VycmVudCgpLT5kb2NMb2FkZXIoKSA9PSBkbCkgeworICAgICAgICAgICAgQ2FjaGU6
OnJlbW92ZShwSXQuY3VycmVudCgpLT5jYWNoZWRPYmplY3QoKSk7CisgICAgICAgICAgICBtX3Jl
cXVlc3RzUGVuZGluZy5yZW1vdmUocEl0KTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAr
K3BJdDsKICAgICB9CiAKQEAgLTIzMyw3ICsyMzUsNyBAQCB2b2lkIExvYWRlcjo6Y2FuY2VsUmVx
dWVzdHMoRG9jTG9hZGVyKiBkCiAgICAgUmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1
ZXN0c0xvYWRpbmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9y
ZXF1ZXN0c0xvYWRpbmcuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogICAgICAgICBSZXF1ZXN0
KiByID0gaS0+c2Vjb25kOwotICAgICAgICBpZiAoci0+bV9kb2NMb2FkZXIgPT0gZGwpCisgICAg
ICAgIGlmIChyLT5kb2NMb2FkZXIoKSA9PSBkbCkKICAgICAgICAgICAgIGpvYnNUb0NhbmNlbC5h
cHBlbmQoaS0+Zmlyc3QpOwogICAgIH0KIApAQCAtMjQxLDI1ICsyNDMsMjMgQEAgdm9pZCBMb2Fk
ZXI6OmNhbmNlbFJlcXVlc3RzKERvY0xvYWRlciogZAogICAgICAgICBUcmFuc2ZlckpvYiogam9i
ID0gam9ic1RvQ2FuY2VsW2ldOwogICAgICAgICBSZXF1ZXN0KiByID0gbV9yZXF1ZXN0c0xvYWRp
bmcuZ2V0KGpvYik7CiAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLnJlbW92ZShqb2IpOwotICAg
ICAgICBDYWNoZTo6cmVtb3ZlKHItPm9iamVjdCk7CisgICAgICAgIENhY2hlOjpyZW1vdmUoci0+
Y2FjaGVkT2JqZWN0KCkpOwogICAgICAgICBqb2ItPmtpbGwoKTsKICAgICB9CiAKLSAgICBEZXBy
ZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFJlcXVlc3Q+IGJkSXQoIG1fcmVxdWVzdHNCYWNrZ3JvdW5k
RGVjb2RpbmcgKTsKKyAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFJlcXVlc3Q+IGJkSXQo
bV9yZXF1ZXN0c0JhY2tncm91bmREZWNvZGluZyk7CiAgICAgd2hpbGUgKGJkSXQuY3VycmVudCgp
KSB7Ci0gICAgICAgIGlmIChiZEl0LmN1cnJlbnQoKS0+bV9kb2NMb2FkZXIgPT0gZGwpIHsKLSAg
ICAgICAgICAgIENhY2hlOjpyZW1vdmUoIGJkSXQuY3VycmVudCgpLT5vYmplY3QgKTsKLSAgICAg
ICAgICAgIG1fcmVxdWVzdHNCYWNrZ3JvdW5kRGVjb2RpbmcucmVtb3ZlKCBiZEl0ICk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQorICAgICAgICBpZiAoYmRJdC5jdXJyZW50KCktPmRvY0xvYWRl
cigpID09IGRsKSB7CisgICAgICAgICAgICBDYWNoZTo6cmVtb3ZlKGJkSXQuY3VycmVudCgpLT5j
YWNoZWRPYmplY3QoKSk7CisgICAgICAgICAgICBtX3JlcXVlc3RzQmFja2dyb3VuZERlY29kaW5n
LnJlbW92ZShiZEl0KTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICArK2JkSXQ7CiAgICAg
fQogfQogCi12b2lkIExvYWRlcjo6cmVtb3ZlQmFja2dyb3VuZERlY29kaW5nUmVxdWVzdCAoUmVx
dWVzdCAqcikKK3ZvaWQgTG9hZGVyOjpyZW1vdmVCYWNrZ3JvdW5kRGVjb2RpbmdSZXF1ZXN0KFJl
cXVlc3QqIHIpCiB7Ci0gICAgYm9vbCBwcmVzZW50ID0gbV9yZXF1ZXN0c0JhY2tncm91bmREZWNv
ZGluZy5jb250YWluc1JlZihyKTsKLSAgICBpZiAocHJlc2VudCkKKyAgICBpZiAobV9yZXF1ZXN0
c0JhY2tncm91bmREZWNvZGluZy5jb250YWluc1JlZihyKSkKICAgICAgICAgbV9yZXF1ZXN0c0Jh
Y2tncm91bmREZWNvZGluZy5yZW1vdmUocik7CiB9CiAKQEAgLTI2NywxMSArMjY3LDExIEBAIFRy
YW5zZmVySm9iKiBMb2FkZXI6OmpvYkZvclJlcXVlc3QoY29uc3QKIHsKICAgICBSZXF1ZXN0TWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsKICAgICBmb3Ig
KFJlcXVlc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdpbigp
OyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIENhY2hlZE9iamVjdCogb2JqID0gaS0+c2Vjb25k
LT5vYmplY3Q7CisgICAgICAgIENhY2hlZE9iamVjdCogb2JqID0gaS0+c2Vjb25kLT5jYWNoZWRP
YmplY3QoKTsKICAgICAgICAgaWYgKG9iaiAmJiBvYmotPnVybCgpID09IFVSTCkKICAgICAgICAg
ICAgIHJldHVybiBpLT5maXJzdDsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLX0KK30gLy9u
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5j
cHAJKHJldmlzaW9uIDE0MTU2KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAx
OTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAy
MDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICAgIENvcHlyaWdodCAoQykgMjAw
MiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2
IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzMs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudFdhbGtlci5oIgogI2luY2x1
ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MywxNSArNzUsMTQgQEAgdm9p
ZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpzZXRDaGFyc2V0KCBjbwogICAgICAgICBtX2RlY29kZXIt
PnNldEVuY29kaW5nTmFtZShjaHMubGF0aW4xKCksIERlY29kZXI6OkVuY29kaW5nRnJvbUhUVFBI
ZWFkZXIpOwogfQogCi12b2lkIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmRhdGEoRGVwcmVjYXRlZEJ5
dGVBcnJheSYgZGF0YSwgYm9vbCBlb2YpCit2b2lkIENhY2hlZFhTTFN0eWxlU2hlZXQ6OmRhdGEo
VmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIGFsbERhdGFSZWNpZXZlZCkKIHsKLSAgICBpZiAoIWVv
ZikKKyAgICBpZiAoIWFsbERhdGFSZWNpZXZlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0
U2l6ZShkYXRhLnNpemUoKSk7CiAgICAgbV9zaGVldCA9IFN0cmluZyhtX2RlY29kZXItPmRlY29k
ZShkYXRhLmRhdGEoKSwgc2l6ZSgpKSk7CiAgICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0gICAgCiAg
ICAgY2hlY2tOb3RpZnkoKTsKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2aXNp
b24gMTQxNTYpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQsNiArNCw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtu
b2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQogICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChi
YXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNh
bS53ZWluaWdAZ21haWwuY29tKQogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzIsOCArMzMsMTAgQEAKICNpbmNs
dWRlICJDYWNoZWRPYmplY3RDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnRX
YWxrZXIuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKLSNpbmNsdWRlICJLV1FMb2FkZXIuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIktXUUxvYWRlci5oIgorI2luY2x1ZGUgIlJl
cXVlc3QuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogdXNpbmcgc3RkOjptYXg7
CiAKQEAgLTEwOCwzNyArMTExLDQ3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKICAgICBz
ZXRTaXplKDApOwogfQogCi12b2lkIENhY2hlZEltYWdlOjpkYXRhKERlcHJlY2F0ZWRCeXRlQXJy
YXkmIGRhdGEsIGJvb2wgZW9mKQorVmVjdG9yPGNoYXI+JiBDYWNoZWRJbWFnZTo6YnVmZmVyRGF0
YShjb25zdCBjaGFyKiBieXRlcywgaW50IGFkZGVkU2l6ZSwgUmVxdWVzdCogcmVxdWVzdCkKIHsK
LSAgICBib29sIHNpemVBdmFpbGFibGUgPSBmYWxzZTsKLSAgICAKLSAgICBtX2RhdGFTaXplID0g
ZGF0YS5zaXplKCk7Ci0KICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0
IGV4aXN0LgogICAgIGlmICghbV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZSA9IG5ldyBJbWFnZSh0
aGlzLAogI2lmIF9fQVBQTEVfXwotICAgICAgICAgICAgS1dRUmVzcG9uc2VNSU1FVHlwZShtX3Jl
c3BvbnNlKSA9PSAiYXBwbGljYXRpb24vcGRmIgorICAgICAgICBtX2ltYWdlID0gbmV3IEltYWdl
KHRoaXMsIEtXUVJlc3BvbnNlTUlNRVR5cGUobV9yZXNwb25zZSkgPT0gImFwcGxpY2F0aW9uL3Bk
ZiIpOwogI2Vsc2UKLSAgICAgICAgICAgIGZhbHNlCisgICAgICAgIG1faW1hZ2UgPSBuZXcgSW1h
Z2UodGhpcywgZmFsc2UpOwogI2VuZGlmCi0gICAgICAgICAgICApOwotICAgICAgICAKLSAgICAv
LyBHaXZlIGFsbCB0aGUgZGF0YSBzbyBmYXIgdG8gdGhlIGltYWdlIG9iamVjdCBmb3IgcHJvY2Vz
c2luZy4KLSAgICAvLyBJdCB3aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5
IGRlY29kaW5nIHVudGlsIHF1ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6ZSBvciBzcGVjaWZpYyBp
bWFnZSBmcmFtZXMpLgotICAgIHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5zZXREYXRhKGRhdGEs
IGVvZik7CisKKyAgICAvLyBBZGQgbmV3IGJ5dGVzIERJUkVDVExZIHRvIHRoZSBidWZmZXIgaW4g
dGhlIEltYWdlIG9iamVjdC4KKyAgICBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciA9IG1faW1hZ2UtPmRh
dGFCdWZmZXIoKTsKKworICAgIHVuc2lnbmVkIG9sZFNpemUgPSBidWZmZXIuc2l6ZSgpOworICAg
IGJ1ZmZlci5yZXNpemUob2xkU2l6ZSArIGFkZGVkU2l6ZSk7CisgICAgbWVtY3B5KGJ1ZmZlci5k
YXRhKCkgKyBvbGRTaXplLCBieXRlcywgYWRkZWRTaXplKTsKKworICAgIHJldHVybiBidWZmZXI7
Cit9CisKK3ZvaWQgQ2FjaGVkSW1hZ2U6OmRhdGEoVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIGFs
bERhdGFSZWNpZXZlZCkKK3sKKyAgICBib29sIHNpemVBdmFpbGFibGUgPSBmYWxzZTsKKworICAg
IG1fZGF0YVNpemUgPSBkYXRhLnNpemUoKTsKKworICAgIC8vIEhhdmUgdGhlIGltYWdlIHVwZGF0
ZSBpdHMgZGF0YSBmcm9tIGl0cyBpbnRlcm5hbCBidWZmZXIuCisgICAgLy8gSXQgd2lsbCBub3Qg
ZG8gYW55dGhpbmcgbm93LCBidXQgd2lsbCBkZWxheSBkZWNvZGluZyB1bnRpbCAKKyAgICAvLyBx
dWVyaWVkIGZvciBpbmZvIChsaWtlIHNpemUgb3Igc3BlY2lmaWMgaW1hZ2UgZnJhbWVzKS4KKyAg
ICBzaXplQXZhaWxhYmxlID0gbV9pbWFnZS0+c2V0RGF0YShhbGxEYXRhUmVjaWV2ZWQpOwogCiAg
ICAgLy8gR28gYWhlYWQgYW5kIHRlbGwgb3VyIG9ic2VydmVycyB0byB0cnkgdG8gZHJhdyBpZiB3
ZSBoYXZlIGVpdGhlcgogICAgIC8vIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSBvciB0aGUgc2l6ZSBp
cyBrbm93bi4gIEVhY2ggY2h1bmsgZnJvbSB0aGUKICAgICAvLyBuZXR3b3JrIGNhdXNlcyBvYnNl
cnZlcnMgdG8gcmVwYWludCwgd2hpY2ggd2lsbCBmb3JjZSB0aGF0IGNodW5rCiAgICAgLy8gdG8g
ZGVjb2RlLgotICAgIGlmIChzaXplQXZhaWxhYmxlIHx8IGVvZikgeworICAgIGlmIChzaXplQXZh
aWxhYmxlIHx8IGFsbERhdGFSZWNpZXZlZCkgewogICAgICAgICBpZiAobV9pbWFnZS0+aXNOdWxs
KCkpIHsKICAgICAgICAgICAgIG1fZXJyb3JPY2N1cnJlZCA9IHRydWU7CiAgICAgICAgICAgICBu
b3RpZnlPYnNlcnZlcnMoKTsKICAgICAgICAgICAgIENhY2hlOjpyZW1vdmUodGhpcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5vdGlmeU9i
c2VydmVycygpOwogCiAgICAgICAgIC8vIEZJWE1FOiBBbiBhbmltYXRlZCBHSUYgd2l0aCBhIGh1
Z2UgZnJhbWUgY291bnQgY2FuJ3QgaGF2ZSBpdHMgc2l6ZSBwcm9wZXJseSBlc3RpbWF0ZWQuICBU
aGUgcmVhc29uIGlzIHRoYXQgd2UgZG9uJ3QKQEAgLTE0OCw3ICsxNjEsOCBAQCB2b2lkIENhY2hl
ZEltYWdlOjpkYXRhKERlcHJlY2F0ZWRCeXRlQXJyCiAgICAgICAgIEludFNpemUgcyA9IGltYWdl
U2l6ZSgpOwogICAgICAgICBzZXRTaXplKG1heChzLndpZHRoKCkgKiBzLmhlaWdodCgpICogNCwg
bV9kYXRhU2l6ZSkpOwogICAgIH0KLSAgICBpZiAoZW9mKSB7CisgICAgCisgICAgaWYgKGFsbERh
dGFSZWNpZXZlZCkgewogICAgICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgY2hlY2tO
b3RpZnkoKTsKICAgICB9CkBAIC0xNjksNyArMTgzLDcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6Y2hl
Y2tOb3RpZnkoKQogICAgICAgICByZXR1cm47CiAKICAgICBDYWNoZWRPYmplY3RDbGllbnRXYWxr
ZXIgdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRPYmplY3RDbGllbnQgKmMgPSB3Lm5l
eHQoKSkKKyAgICB3aGlsZSAoQ2FjaGVkT2JqZWN0Q2xpZW50KiBjID0gdy5uZXh0KCkpCiAgICAg
ICAgIGMtPm5vdGlmeUZpbmlzaGVkKHRoaXMpOwogfQogCkBAIC0xNzksMTAgKzE5MywxMSBAQCBi
b29sIENhY2hlZEltYWdlOjpzaG91bGRTdG9wQW5pbWF0aW9uKGNvCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwot
ICAgIHdoaWxlIChDYWNoZWRPYmplY3RDbGllbnQgKmMgPSB3Lm5leHQoKSkKKyAgICB3aGlsZSAo
Q2FjaGVkT2JqZWN0Q2xpZW50KiBjID0gdy5uZXh0KCkpIHsKICAgICAgICAgaWYgKGMtPndpbGxS
ZW5kZXJJbWFnZSh0aGlzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKyAgICB9
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTkyLDQgKzIwNyw0IEBAIHZvaWQgQ2FjaGVk
SW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnMKICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7
CiB9CiAKLX0KK30gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHJldmlzaW9uIDE0
MTU2KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkg
KzI3LDkgQEAKICNpZm5kZWYgS0hUTUxfTG9hZGVyX2gKICNkZWZpbmUgS0hUTUxfTG9hZGVyX2gK
IAorI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCiAjaW5jbHVkZSAiVHJhbnNmZXJKb2JD
bGllbnQuaCIKICNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+Ci0jaW5jbHVkZSAiRGVwcmVj
YXRlZFB0ckxpc3QuaCIKIAogI2lmIF9fT0JKQ19fCiBAY2xhc3MgTlNEYXRhOwpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkWEJMRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFhCTERvY3VtZW50LmNwcAkocmV2aXNpb24gMTQxNTYpCisrKyBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRYQkxEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3
IEBACiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcu
ZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQogICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcp
CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwu
Y29tKQogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgpAQCAtMjksMTAgKzMwLDEzIEBACiAKICNpZm5kZWYgS0hUTUxfTk9f
WEJMCiAKKyNpbmNsdWRlICJDYWNoZWRYQkxEb2N1bWVudC5oIgorCiAjaW5jbHVkZSAiQ2FjaGUu
aCIKLSNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnRXYWxr
ZXIuaCIKICNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVk
ZSA8a3htbGNvcmUvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzUsOSAr
NzksOSBAQCB2b2lkIENhY2hlZFhCTERvY3VtZW50OjpzZXRDaGFyc2V0KCBjb25zCiAgICAgICAg
IG1fZGVjb2Rlci0+c2V0RW5jb2RpbmcoY2hzLmxhdGluMSgpLCBEZWNvZGVyOjpFbmNvZGluZ0Zy
b21IVFRQSGVhZGVyKTsKIH0KIAotdm9pZCBDYWNoZWRYQkxEb2N1bWVudDo6ZGF0YShEZXByZWNh
dGVkQnl0ZUFycmF5JiBkYXRhLCBib29sIGVvZiApCit2b2lkIENhY2hlZFhCTERvY3VtZW50Ojpk
YXRhKFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCApCiB7Ci0gICAgaWYgKCFlb2YpCisgICAgaWYg
KCFhbGxEYXRhUmVjaWV2ZWQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBhc3NlcnQoIW1f
ZG9jdW1lbnQpOwpAQCAtOTcsNyArMTAxLDcgQEAgdm9pZCBDYWNoZWRYQkxEb2N1bWVudDo6ZGF0
YShEZXByZWNhdGVkQgogCiB2b2lkIENhY2hlZFhCTERvY3VtZW50OjpjaGVja05vdGlmeSgpCiB7
Ci0gICAgaWYobV9sb2FkaW5nKQorICAgIGlmIChtX2xvYWRpbmcpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuaAkocmV2aXNpb24gMTQxNTYpCisrKyBXZWJD
b3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiAr
Myw3IEBACiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhk
Lm1wZy5kZSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtk
ZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdA
Z21haWwuY29tKQogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjgsNiArMjksNyBAQAogI2RlZmluZSBLSFRNTF9D
YWNoZWRYU0xTdHlsZVNoZWV0X2gKIAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgorI2luY2x1
ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDcg
KzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYo
Q2FjaGVkT2JqZWN0Q2xpZW50Kik7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q2hhcnNldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
YXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmLCBib29sIGVvZik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkYXRhKFZlY3RvcjxjaGFyPiYsIGJvb2wgYWxsRGF0YVJlY2lldmVkKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGVycm9yKCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1
bGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJ
bWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgJKHJldmlz
aW9uIDE0MTU2KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMyw2ICszLDcgQEAKIAogICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChr
bm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
PG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAo
c2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOCw4ICsyOSw5IEBACiAjZGVm
aW5lIEtIVE1MX0NhY2hlZEltYWdlX2gKIAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZUFuaW1hdGlvbk9ic2VydmVyLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDIwICs0MSwyMSBAQCBjbGFzcyBJbWFnZTsKIAogY2xh
c3MgQ2FjaGVkSW1hZ2UgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0LCBwdWJsaWMgSW1hZ2VBbmltYXRp
b25PYnNlcnZlciB7CiBwdWJsaWM6Ci0gICAgQ2FjaGVkSW1hZ2UoRG9jTG9hZGVyKiwgY29uc3Qg
U3RyaW5nICZ1cmwsIEtJTzo6Q2FjaGVDb250cm9sIGNhY2hlUG9saWN5LCB0aW1lX3QgZXhwaXJl
RGF0ZSk7CisgICAgQ2FjaGVkSW1hZ2UoRG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiB1cmwsIEtJ
Tzo6Q2FjaGVDb250cm9sIGNhY2hlUG9saWN5LCB0aW1lX3QgZXhwaXJlRGF0ZSk7CiAgICAgdmly
dHVhbCB+Q2FjaGVkSW1hZ2UoKTsKIAogICAgIEltYWdlKiBpbWFnZSgpIGNvbnN0OwogCiAgICAg
Ym9vbCBjYW5SZW5kZXIoKSBjb25zdCB7IHJldHVybiAhaXNFcnJvckltYWdlKCkgJiYgaW1hZ2VT
aXplKCkud2lkdGgoKSA+IDAgJiYgaW1hZ2VTaXplKCkuaGVpZ2h0KCkgPiAwOyB9CiAKLSAgICBJ
bnRTaXplIGltYWdlU2l6ZSgpIGNvbnN0OyAgICAvLyByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBj
b21wbGV0ZSBpbWFnZQorICAgIEludFNpemUgaW1hZ2VTaXplKCkgY29uc3Q7ICAvLyByZXR1cm5z
IHRoZSBzaXplIG9mIHRoZSBjb21wbGV0ZSBpbWFnZQogICAgIEludFJlY3QgaW1hZ2VSZWN0KCkg
Y29uc3Q7ICAvLyBUaGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCiAKICAgICB2aXJ0dWFsIHZvaWQgcmVm
KENhY2hlZE9iamVjdENsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZihDYWNoZWRPYmpl
Y3RDbGllbnQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkm
LCBib29sIGF0RW5kKTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxjaGFyPiYgYnVmZmVyRGF0YShjb25z
dCBjaGFyKiBieXRlcywgaW50IGFkZGVkU2l6ZSwgUmVxdWVzdCopOworICAgIHZpcnR1YWwgdm9p
ZCBkYXRhKFZlY3RvcjxjaGFyPiYsIGJvb2wgYWxsRGF0YVJlY2lldmVkKTsKICAgICB2aXJ0dWFs
IHZvaWQgZXJyb3IoKTsKIAogICAgIGJvb2wgaXNFcnJvckltYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9lcnJvck9jY3VycmVkOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRYQkxEb2N1bWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhCTERvY3VtZW50LmgJKHJl
dmlzaW9uIDE0MTU2KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWEJMRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKIAogICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJz
IEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOCw2ICsyOSw3
IEBACiAjZGVmaW5lIEtIVE1MX0NhY2hlZFhCTERvY3VtZW50X2gKIAogI2luY2x1ZGUgIkNhY2hl
ZE9iamVjdC5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgQ2FjaGVkT2JqZWN0OwpAQCAtNDAsMTYgKzQyLDE2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDYWNoZWRYQkxEb2N1bWVudCA6IHB1YmxpYyBDYWNo
ZWRPYmplY3QKICAgICB7CiAgICAgcHVibGljOgotICAgICAgICBDYWNoZWRYQkxEb2N1bWVudChE
b2NMb2FkZXIqIGRsLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcgJnVybCwgS0lPOjpDYWNoZUNvbnRy
b2wgY2FjaGVQb2xpY3ksIHRpbWVfdCBfZXhwaXJlRGF0ZSk7CisgICAgICAgIENhY2hlZFhCTERv
Y3VtZW50KERvY0xvYWRlciogZGwsIGNvbnN0IFN0cmluZyYgdXJsLCBLSU86OkNhY2hlQ29udHJv
bCBjYWNoZVBvbGljeSwgdGltZV90IF9leHBpcmVEYXRlKTsKICAgICAgICAgdmlydHVhbCB+Q2Fj
aGVkWEJMRG9jdW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIFhCTDo6WEJMRG9jdW1lbnQqIGRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgICAgICAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHJlZihDYWNoZWRPYmplY3RDbGllbnQgKmNvbnN1bWVyKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCAqY29uc3VtZXIpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVmKENhY2hlZE9iamVjdENsaWVudCopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVyZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CiAgICAgICAgIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q2hhcnNldCggY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmY2hzICk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmLCBib29sIGVvZiApOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hhcnNldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKFZlY3RvcjxjaGFyPiYsIGJvb2wgYWxsRGF0YVJl
Y2lldmVkKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGVycm9yKCk7CiAgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9S
ZXF1ZXN0LmNwcAkocmV2aXNpb24gMTQxNTYpCisrKyBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTgg
TGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDEg
RGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdh
bGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2Ft
dWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMiwxNSAr
MzMsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXF1ZXN0OjpSZXF1ZXN0KERvY0xv
YWRlciogZG9jTG9hZGVyLCBDYWNoZWRPYmplY3QqIG9iaiwgYm9vbCBpbmMpCi0gICAgOiBpbmNy
ZW1lbnRhbChpbmMpLCBvYmplY3Qob2JqKSwgbV9kb2NMb2FkZXIoZG9jTG9hZGVyKSwgbXVsdGlw
YXJ0KGZhbHNlKQorUmVxdWVzdDo6UmVxdWVzdChEb2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVk
T2JqZWN0KiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwpCisgICAgOiBtX29iamVjdChvYmplY3Qp
CisgICAgLCBtX2RvY0xvYWRlcihkb2NMb2FkZXIpCisgICAgLCBtX2luY3JlbWVudGFsKGluY3Jl
bWVudGFsKQorICAgICwgbV9tdWx0aXBhcnQoZmFsc2UpCiB7Ci0gICAgb2JqZWN0LT5zZXRSZXF1
ZXN0KHRoaXMpOworICAgIG1fb2JqZWN0LT5zZXRSZXF1ZXN0KHRoaXMpOwogfQogCiBSZXF1ZXN0
Ojp+UmVxdWVzdCgpCiB7Ci0gICAgb2JqZWN0LT5zZXRSZXF1ZXN0KDApOworICAgIG1fb2JqZWN0
LT5zZXRSZXF1ZXN0KDApOwogfQogCi19Cit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxNDE1NikKKysrIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
LDYgKzQsNyBAQAogICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGkt
aGQubXBnLmRlKQogICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBr
ZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vpbmln
QGdtYWlsLmNvbSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYWNo
ZWRPYmplY3RDbGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJLV1FMb2FkZXIuaCIKICNpbmNsdWRl
ICJsb2FkZXIuaCIKKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC04NywxNSArODksMTQgQEAgdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0Ojpz
ZXRDaGFyc2V0KGNvbgogICAgIH0KIH0KIAotdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkYXRh
KERlcHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9mICkKK3ZvaWQgQ2FjaGVkQ1NTU3R5
bGVTaGVldDo6ZGF0YShWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2lldmVkKQog
ewotICAgIGlmICghZW9mKQorICAgIGlmICghYWxsRGF0YVJlY2lldmVkKQogICAgICAgICByZXR1
cm47CiAKICAgICBzZXRTaXplKGRhdGEuc2l6ZSgpKTsKICAgICBtX3NoZWV0ID0gU3RyaW5nKG1f
ZW5jb2RpbmcudG9Vbmljb2RlKGRhdGEuZGF0YSgpLCBzaXplKCkpKTsKICAgICBtX2xvYWRpbmcg
PSBmYWxzZTsKLQogICAgIGNoZWNrTm90aWZ5KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0NhY2hlZFNjcmlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2Ny
aXB0LmNwcAkocmV2aXNpb24gMTQxNTYpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICAgIENvcHlyaWdodCAoQykgMTk5
OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHlyaWdodCAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAgICBDb3B5cmlnaHQgKEMpIDIwMDIg
V2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KIAogICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMyLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnQuaCIKICNpbmNsdWRlICJDYWNo
ZWRPYmplY3RDbGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlIDxr
eG1sY29yZS9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04NywxMCArODks
MTEgQEAgdm9pZCBDYWNoZWRTY3JpcHQ6OnNldENoYXJzZXQoY29uc3QgRGVwcgogICAgICAgICBt
X2VuY29kaW5nID0gZW5jb2Rpbmc7CiB9CiAKLXZvaWQgQ2FjaGVkU2NyaXB0OjpkYXRhKERlcHJl
Y2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9mICkKK3ZvaWQgQ2FjaGVkU2NyaXB0OjpkYXRh
KFZlY3RvcjxjaGFyPiYgZGF0YSwgYm9vbCBhbGxEYXRhUmVjaWV2ZWQpCiB7Ci0gICAgaWYgKCFl
b2YpCisgICAgaWYgKCFhbGxEYXRhUmVjaWV2ZWQpCiAgICAgICAgIHJldHVybjsKKwogICAgIHNl
dFNpemUoZGF0YS5zaXplKCkpOwogICAgIG1fc2NyaXB0ID0gU3RyaW5nKG1fZW5jb2RpbmcudG9V
bmljb2RlKGRhdGEuZGF0YSgpLCBzaXplKCkpKTsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9SZXF1ZXN0LmgJKHJldmlzaW9uIDE0MTU2KQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk4
IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAx
IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KIAogICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDI5
ICsyNSwzOSBAQAogICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hl
IGZvciB0aGVzZSBvYmplY3RzLgogKi8KIAotI2lmbmRlZiBLSFRNTF9SZXF1ZXN0X2gKLSNkZWZp
bmUgS0hUTUxfUmVxdWVzdF9oCisjaWZuZGVmIFJlcXVlc3RfaF8KKyNkZWZpbmUgUmVxdWVzdF9o
XwogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZEFycmF5LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwogICAgIGNsYXNzIENhY2hlZE9iamVjdDsK
ICAgICBjbGFzcyBEb2NMb2FkZXI7CiAKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgRGVw
cmVjYXRlZEFycmF5OwotICAgIHR5cGVkZWYgRGVwcmVjYXRlZEFycmF5PGNoYXI+IERlcHJlY2F0
ZWRCeXRlQXJyYXk7Ci0KICAgICBjbGFzcyBSZXF1ZXN0IHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFJlcXVlc3QoRG9jTG9hZGVyKiwgQ2FjaGVkT2JqZWN0KiwgYm9vbCBpbmNyZW1lbnRhbCk7CiAg
ICAgICAgIH5SZXF1ZXN0KCk7Ci0KLSAgICAgICAgYm9vbCBpbmNyZW1lbnRhbDsKLSAgICAgICAg
RGVwcmVjYXRlZEJ5dGVBcnJheSBtX2J1ZmZlcjsKLSAgICAgICAgQ2FjaGVkT2JqZWN0KiBvYmpl
Y3Q7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcigpIHsgcmV0dXJuIG1f
YnVmZmVyOyB9CisgICAgICAgIENhY2hlZE9iamVjdCogY2FjaGVkT2JqZWN0KCkgeyByZXR1cm4g
bV9vYmplY3Q7IH0KKyAgICAgICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIoKSB7IHJldHVybiBtX2Rv
Y0xvYWRlcjsgfQorCisgICAgICAgIGJvb2wgaXNJbmNyZW1lbnRhbCgpIHsgcmV0dXJuIG1faW5j
cmVtZW50YWw7IH0KKyAgICAgICAgdm9pZCBzZXRJc0luY3JlbWVudGFsKGJvb2wgYiA9IHRydWUp
IHsgbV9pbmNyZW1lbnRhbCA9IGI7IH0KKworICAgICAgICBib29sIGlzTXVsdGlwYXJ0KCkgeyBy
ZXR1cm4gbV9tdWx0aXBhcnQ7IH0KKyAgICAgICAgdm9pZCBzZXRJc011bHRpcGFydChib29sIGIg
PSB0cnVlKSB7IG1fbXVsdGlwYXJ0ID0gYjsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVj
dG9yPGNoYXI+IG1fYnVmZmVyOworICAgICAgICBDYWNoZWRPYmplY3QqIG1fb2JqZWN0OwogICAg
ICAgICBEb2NMb2FkZXIqIG1fZG9jTG9hZGVyOwotICAgICAgICBib29sIG11bHRpcGFydDsKKyAg
ICAgICAgYm9vbCBtX2luY3JlbWVudGFsOworICAgICAgICBib29sIG1fbXVsdGlwYXJ0OwogICAg
IH07Ci19CiAKLSNlbmRpZgorfSAvL25hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZXF1
ZXN0X2hfCg==
</data>
<flag name="review"
          id="2238"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8195</attachid>
            <date>2006-05-09 19:55:48 -0700</date>
            <delta_ts>2006-05-11 14:23:01 -0700</delta_ts>
            <desc>updated image and caching patch</desc>
            <filename>image-cache2.diff</filename>
            <type>text/plain</type>
            <size>39512</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vSW1hZ2UuY3BwCShyZXZpc2lvbiAxNDI2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIF9fQVBQTEVfXwogLy8gRklYTUU6
IFdpbGwgZ28gYXdheSB3aGVuIHdlIG1ha2UgUERGIGEgc3ViY2xhc3MuCkBAIC0xMjYsMTAgKzEy
OCwxMCBAQCBJbnRTaXplIEltYWdlOjpzaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9zaXplOwog
fQogCi1ib29sIEltYWdlOjpzZXREYXRhKGNvbnN0IERlcHJlY2F0ZWRCeXRlQXJyYXkmIGJ5dGVz
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKK2Jvb2wgSW1hZ2U6OnNldERhdGEoYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCiB7Ci0gICAgaW50IGxlbmd0aCA9IGJ5dGVzLmNvdW50KCk7Ci0gICAgaWYgKGxl
bmd0aCA9PSAwKQorICAgIGludCBsZW5ndGggPSBtX2RhdGEuc2l6ZSgpOworICAgIGlmICghbGVu
Z3RoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogI2lmZGVmIGtJbWFnZUJ5dGVzQ3V0b2ZmCkBA
IC0xNDQsMTUgKzE0NiwxMyBAQCBib29sIEltYWdlOjpzZXREYXRhKGNvbnN0IERlcHJlY2F0ZWRC
eXRlCiAgICAgCiAjaWYgX19BUFBMRV9fCiAgICAgLy8gQXZvaWQgdGhlIGV4dHJhIGNvcHkgb2Yg
Ynl0ZXMgYnkganVzdCBoYW5kaW5nIHRoZSBieXRlIGFycmF5IGRpcmVjdGx5IHRvIGEgQ0ZEYXRh
UmVmLgotICAgIC8vIFdlIHdpbGwga2VlcCB0aGVzZSBieXRlcyBhbGl2ZSBpbiBvdXIgbV9kYXRh
IHZhcmlhYmxlLgotICAgIENGRGF0YVJlZiBkYXRhID0gQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9D
b3B5KDAsIChjb25zdCBVSW50OCopYnl0ZXMuZGF0YSgpLCBsZW5ndGgsIGtDRkFsbG9jYXRvck51
bGwpOworICAgIENGRGF0YVJlZiBkYXRhID0gQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihtX2RhdGEuZGF0YSgpKSwgbGVuZ3RoLCBr
Q0ZBbGxvY2F0b3JOdWxsKTsKICAgICBib29sIHJlc3VsdCA9IHNldE5hdGl2ZURhdGEoZGF0YSwg
YWxsRGF0YVJlY2VpdmVkKTsKICAgICBDRlJlbGVhc2UoZGF0YSk7CiAjZWxzZQotICAgIGJvb2wg
cmVzdWx0ID0gc2V0TmF0aXZlRGF0YSgmYnl0ZXMsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgYm9v
bCByZXN1bHQgPSBzZXROYXRpdmVEYXRhKCZtX2RhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAjZW5k
aWYKIAotICAgIG1fZGF0YSA9IGJ5dGVzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L0ltYWdlLmgJKHJldmlzaW9uIDE0MjY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9JbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyMiw4ICsxMjMsMTAgQEAgcHVibGljOgogICAgIGludCB3
aWR0aCgpIGNvbnN0OwogICAgIGludCBoZWlnaHQoKSBjb25zdDsKIAotICAgIGJvb2wgc2V0RGF0
YShjb25zdCBEZXByZWNhdGVkQnl0ZUFycmF5JiBieXRlcywgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OworICAgIGJvb2wgc2V0RGF0YShib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgYm9vbCBzZXRO
YXRpdmVEYXRhKE5hdGl2ZUJ5dGVQdHIgYnl0ZVB0ciwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwor
ICAgIAorICAgIFZlY3RvcjxjaGFyPiYgZGF0YUJ1ZmZlcigpIHsgcmV0dXJuIG1fZGF0YTsgfQog
CiAgICAgLy8gSXQgbWF5IGxvb2sgdW51c3VhbCB0aGF0IHRoZXJlIGlzIG5vIHN0YXJ0IGFuaW1h
dGlvbiBjYWxsIGFzIHB1YmxpYyBBUEkuICBUaGlzIGlzIGJlY2F1c2UKICAgICAvLyB3ZSBzdGFy
dCBhbmQgc3RvcCBhbmltYXRpbmcgbGF6aWx5LiAgQW5pbWF0aW9uIGJlZ2lucyB3aGVuZXZlciBz
b21lb25lIGRyYXdzIHRoZSBpbWFnZS4gIEl0IHdpbGwKQEAgLTE4NSw3ICsxODgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZU5hdGl2ZURhdGEoKTsKIAogICAgIC8vIE1lbWJlcnMK
LSAgICBEZXByZWNhdGVkQnl0ZUFycmF5IG1fZGF0YTsgLy8gVGhlIGVuY29kZWQgcmF3IGRhdGEg
Zm9yIHRoZSBpbWFnZS4KKyAgICBWZWN0b3I8Y2hhcj4gbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCBy
YXcgZGF0YSBmb3IgdGhlIGltYWdlLgogICAgIEltYWdlU291cmNlIG1fc291cmNlOwogICAgIG11
dGFibGUgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXplIHRvIHVzZSBmb3IgdGhlIG92ZXJhbGwg
aW1hZ2UgKHdpbGwganVzdCBiZSB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgaW1hZ2UpLgogICAgIApJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE0MjcwKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw2NSBAQAorMjAwNi0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbS53ZWluaWdAZ21haWwu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHBh
dGNoIGZvciA8aHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD04
MDM5PgorICAgICAgICBSZW1vdmUgdXNlIG9mIERlcHJlY2F0ZWRBcnJheSBpbiBmYXZvciBvZiBu
ZXcgVmVjdG9yIGNsYXNzCisKKyAgICAgICAgUmVtb3ZlcyBEZXByZWNhdGVkQXJyYXkgZnJvbSBJ
bWFnZSBhbmQgY2FjaGluZyBjbGFzc2VzIGFuZAorICAgICAgICBjbGVhbnMgdXAgdGhlIFJlcXVl
c3QgY2xhc3MuCisKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpkYXRhKToKKyAgICAgICAgKiBs
b2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6YnVmZmVyRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRJbWFnZTo6Y2hlY2tOb3RpZnkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNo
b3VsZFN0b3BBbmltYXRpb24pOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRJbWFnZS5oOgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
T2JqZWN0OjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZE9iamVjdDo6c2V0
RXhwaXJlRGF0ZSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZE9iamVjdC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkT2JqZWN0OjpzZXRDaGFyc2V0KToKKyAgICAgICAgKiBsb2FkZXIvQ2Fj
aGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFNjcmlwdDo6ZGF0YSk6Cisg
ICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5oOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRY
QkxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRYQkxEb2N1bWVudDo6ZGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRYQkxEb2N1bWVudDo6Y2hlY2tOb3RpZnkpOgor
ICAgICAgICAqIGxvYWRlci9DYWNoZWRYQkxEb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9D
YWNoZWRYU0xTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFhTTFN0eWxl
U2hlZXQ6OmRhdGEpOgorICAgICAgICAqIGxvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0Lmg6Cisg
ICAgICAgICogbG9hZGVyL1JlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0Ojp+UmVxdWVzdCk6CisgICAgICAg
ICogbG9hZGVyL1JlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6OmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0OjpjYWNoZWRPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVxdWVzdDo6ZG9jTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcXVlc3Q6Omlz
SW5jcmVtZW50YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6c2V0SXNJbmNyZW1lbnRh
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZXF1ZXN0Ojppc011bHRpcGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXF1ZXN0OjpzZXRJc011bHRpcGFydCk6CisgICAgICAgICogbG9hZGVyL2xvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcm9zc0RvbWFpbik6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkZXI6OkxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OmxvYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TG9hZGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpMb2FkZXI6OnJlY2VpdmVkQWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpMb2Fk
ZXI6OnJlY2VpdmVkUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpyZWNlaXZl
ZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpudW1SZXF1ZXN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Okxv
YWRlcjo6cmVtb3ZlQmFja2dyb3VuZERlY29kaW5nUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMb2FkZXI6OmpvYkZvclJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0ltYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9J
bWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRhdGFCdWZmZXIpOgorCiAyMDA2LTA1
LTA5ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4
IFdpbmRvd3MgYnVpbGQuICBBZGRlZCBUZXh0RG9jdW1lbnQuY3BwIHRvIHZjcHJvai4KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDE0MjY3KQorKysgV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYg
KzMsNyBAQAogCiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1o
ZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vpbmln
QGdtYWlsLmNvbSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI5LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNh
Y2hlZE9iamVjdC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKQEAgLTQ3LDcgKzQ5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVu
dCopOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRhdGEoRGVwcmVjYXRlZEJ5dGVBcnJheSYs
IGJvb2wgYXRFbmQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBi
b29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwogCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFNjcmlwdC5oCShyZXZpc2lvbiAxNDI2NykKKysrIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZFNjcmlwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogCiAgICAgQ29w
eXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAgIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KIAogICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTI5LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgogI2lu
Y2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERvY0xvYWRlcjsKQEAgLTQ1LDcgKzQ3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoQ2FjaGVkT2JqZWN0
Q2xpZW50Kik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldENoYXJzZXQoY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShEZXByZWNhdGVkQnl0ZUFy
cmF5JiwgYm9vbCBhdEVuZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKFZlY3RvcjxjaGFy
PiYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGVycm9yKCk7
CiAKICAgICAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZE9iamVjdC5oCShyZXZpc2lvbiAxNDI2NykKKysrIFdlYkNvcmUv
bG9hZGVyL0NhY2hlZE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogCiAg
ICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAg
IENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
IAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTI3LDEwICsyOCwxMSBAQAogI2lmbmRlZiBLSFRNTF9DYWNoZWRPYmpl
Y3RfaAogI2RlZmluZSBLSFRNTF9DYWNoZWRPYmplY3RfaAogCi0jaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlICJLV1FLSU9HbG9iYWwuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8dGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgX19P
QkpDX18KIEBjbGFzcyBOU0RhdGE7CkBAIC0xMDEsOCArMTAzLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5DYWNoZWRPYmplY3QoKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2hhcnNldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJikge30KLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRhdGEoRGVwcmVjYXRlZEJ5dGVBcnJheSYsIGJvb2wgYXRFbmQp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldENoYXJzZXQoY29uc3QgRGVwcmVjYXRlZFN0
cmluZyYpIHsgfQorICAgICAgICB2aXJ0dWFsIFZlY3RvcjxjaGFyPiYgYnVmZmVyRGF0YShjb25z
dCBjaGFyKiBieXRlcywgaW50IGFkZGVkU2l6ZSwgUmVxdWVzdCopOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBib29sIGFsbERhdGFSZWNlaXZlZCkgPSAwOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoKSA9IDA7CiAKICAgICAgICAgY29uc3QgU3RyaW5nICZ1
cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
WFNMU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0
eWxlU2hlZXQuaAkocmV2aXNpb24gMTQyNjcpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xT
dHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAKICAgICBDb3B5cmln
aHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKICAgICBDb3B5cmln
aHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0
IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtMjgsNiArMjksNyBAQAogI2RlZmluZSBLSFRNTF9DYWNoZWRYU0xTdHlsZVNoZWV0X2gK
IAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NSw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCopOwogICAg
ICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldENoYXJzZXQoY29uc3QgRGVwcmVjYXRlZFN0
cmluZyYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShEZXByZWNhdGVkQnl0ZUFycmF5Jiwg
Ym9vbCBlb2YpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YShWZWN0b3I8Y2hhcj4mLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwogICAgICAg
ICAKICAgICAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCShyZXZpc2lvbiAxNDI2NykKKysrIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAKICAgICBD
b3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1wZy5kZSkKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgICAgQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICAg
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMjgsOCArMjksOSBAQAogI2RlZmluZSBLSFRNTF9DYWNoZWRJbWFnZV9oCiAK
ICNpbmNsdWRlICJDYWNoZWRPYmplY3QuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VBbmltYXRpb25PYnNlcnZlci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksMjAgKzQx
LDIxIEBAIGNsYXNzIEltYWdlOwogCiBjbGFzcyBDYWNoZWRJbWFnZSA6IHB1YmxpYyBDYWNoZWRP
YmplY3QsIHB1YmxpYyBJbWFnZUFuaW1hdGlvbk9ic2VydmVyIHsKIHB1YmxpYzoKLSAgICBDYWNo
ZWRJbWFnZShEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcgJnVybCwgS0lPOjpDYWNoZUNvbnRyb2wg
Y2FjaGVQb2xpY3ksIHRpbWVfdCBleHBpcmVEYXRlKTsKKyAgICBDYWNoZWRJbWFnZShEb2NMb2Fk
ZXIqLCBjb25zdCBTdHJpbmcmIHVybCwgS0lPOjpDYWNoZUNvbnRyb2wgY2FjaGVQb2xpY3ksIHRp
bWVfdCBleHBpcmVEYXRlKTsKICAgICB2aXJ0dWFsIH5DYWNoZWRJbWFnZSgpOwogCiAgICAgSW1h
Z2UqIGltYWdlKCkgY29uc3Q7CiAKICAgICBib29sIGNhblJlbmRlcigpIGNvbnN0IHsgcmV0dXJu
ICFpc0Vycm9ySW1hZ2UoKSAmJiBpbWFnZVNpemUoKS53aWR0aCgpID4gMCAmJiBpbWFnZVNpemUo
KS5oZWlnaHQoKSA+IDA7IH0KIAotICAgIEludFNpemUgaW1hZ2VTaXplKCkgY29uc3Q7ICAgIC8v
IHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGltYWdlCisgICAgSW50U2l6ZSBpbWFn
ZVNpemUoKSBjb25zdDsgIC8vIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIGltYWdl
CiAgICAgSW50UmVjdCBpbWFnZVJlY3QoKSBjb25zdDsgIC8vIFRoZSBzaXplIG9mIHRoZSBpbWFn
ZS4KIAogICAgIHZpcnR1YWwgdm9pZCByZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CiAgICAgdmly
dHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVudCopOwogCi0gICAgdmlydHVhbCB2b2lk
IGRhdGEoRGVwcmVjYXRlZEJ5dGVBcnJheSYsIGJvb2wgYXRFbmQpOworICAgIHZpcnR1YWwgVmVj
dG9yPGNoYXI+JiBidWZmZXJEYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgYWRkZWRTaXplLCBS
ZXF1ZXN0Kik7CisgICAgdmlydHVhbCB2b2lkIGRhdGEoVmVjdG9yPGNoYXI+JiwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBlcnJvcigpOwogCiAgICAgYm9vbCBpc0Vy
cm9ySW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yT2NjdXJyZWQ7IH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFhCTERvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkWEJMRG9jdW1lbnQuaAkocmV2aXNpb24gMTQyNjcpCisrKyBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRYQkxEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogCiAg
ICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAg
ICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICAg
IENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
IAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTI4LDYgKzI5LDcgQEAKICNkZWZpbmUgS0hUTUxfQ2FjaGVkWEJMRG9j
dW1lbnRfaAogCiAjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ2FjaGVkT2JqZWN0OwpAQCAt
NDAsMjMgKzQyLDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDYWNoZWRYQkxE
b2N1bWVudCA6IHB1YmxpYyBDYWNoZWRPYmplY3QKICAgICB7CiAgICAgcHVibGljOgotICAgICAg
ICBDYWNoZWRYQkxEb2N1bWVudChEb2NMb2FkZXIqIGRsLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcg
JnVybCwgS0lPOjpDYWNoZUNvbnRyb2wgY2FjaGVQb2xpY3ksIHRpbWVfdCBfZXhwaXJlRGF0ZSk7
CisgICAgICAgIENhY2hlZFhCTERvY3VtZW50KERvY0xvYWRlciogZGwsIGNvbnN0IFN0cmluZyYg
dXJsLCBLSU86OkNhY2hlQ29udHJvbCBjYWNoZVBvbGljeSwgdGltZV90IF9leHBpcmVEYXRlKTsK
ICAgICAgICAgdmlydHVhbCB+Q2FjaGVkWEJMRG9jdW1lbnQoKTsKICAgICAgICAgCiAgICAgICAg
IFhCTDo6WEJMRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsg
fQogICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlZihDYWNoZWRPYmplY3RDbGllbnQg
KmNvbnN1bWVyKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmKENhY2hlZE9iamVjdENsaWVu
dCAqY29uc3VtZXIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmKENhY2hlZE9iamVjdENsaWVu
dCopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoQ2FjaGVkT2JqZWN0Q2xpZW50Kik7CiAg
ICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hhcnNldCggY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyAmY2hzICk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKERlcHJlY2F0ZWRCeXRl
QXJyYXkmLCBib29sIGVvZiApOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hhcnNldChjb25z
dCBEZXByZWNhdGVkU3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKFZlY3Rvcjxj
aGFyPiYsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGVycm9y
KCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2NoZWR1bGUoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7CiAgICAg
ICAgIAotcHJvdGVjdGVkOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgWEJMOjpYQkxEb2N1bWVu
dCogbV9kb2N1bWVudDsKICAgICAgICAgUmVmUHRyPERlY29kZXI+IG1fZGVjb2RlcjsKICAgICB9
OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDE0
MjY3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQsNiArNCw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwg
KGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQogICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFu
IChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
KHNhbS53ZWluaWdAZ21haWwuY29tKQogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzMsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudFdhbGtlci5oIgogI2luY2x1ZGUgIktXUUxvYWRlci5o
IgogI2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC04NywxNSArODksMTQgQEAgdm9pZCBDYWNoZWRDU1NTdHlsZVNo
ZWV0OjpzZXRDaGFyc2V0KGNvbgogICAgIH0KIH0KIAotdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0
OjpkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9mICkKK3ZvaWQgQ2FjaGVk
Q1NTU3R5bGVTaGVldDo6ZGF0YShWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQogewotICAgIGlmICghZW9mKQorICAgIGlmICghYWxsRGF0YVJlY2VpdmVkKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzZXRTaXplKGRhdGEuc2l6ZSgpKTsKICAgICBtX3NoZWV0ID0gU3Ry
aW5nKG1fZW5jb2RpbmcudG9Vbmljb2RlKGRhdGEuZGF0YSgpLCBzaXplKCkpKTsKICAgICBtX2xv
YWRpbmcgPSBmYWxzZTsKLQogICAgIGNoZWNrTm90aWZ5KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkU2NyaXB0LmNwcAkocmV2aXNpb24gMTQyNjcpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRT
Y3JpcHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICAgIENvcHlyaWdodCAo
QykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHlyaWdodCAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAgICBDb3B5cmlnaHQgKEMp
IDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KIAogICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTMyLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnQuaCIKICNpbmNsdWRl
ICJDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODcsMTAgKzg5
LDExIEBAIHZvaWQgQ2FjaGVkU2NyaXB0OjpzZXRDaGFyc2V0KGNvbnN0IERlcHIKICAgICAgICAg
bV9lbmNvZGluZyA9IGVuY29kaW5nOwogfQogCi12b2lkIENhY2hlZFNjcmlwdDo6ZGF0YShEZXBy
ZWNhdGVkQnl0ZUFycmF5JiBkYXRhLCBib29sIGVvZiApCit2b2lkIENhY2hlZFNjcmlwdDo6ZGF0
YShWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmICgh
ZW9mKQorICAgIGlmICghYWxsRGF0YVJlY2VpdmVkKQogICAgICAgICByZXR1cm47CisKICAgICBz
ZXRTaXplKGRhdGEuc2l6ZSgpKTsKICAgICBtX3NjcmlwdCA9IFN0cmluZyhtX2VuY29kaW5nLnRv
VW5pY29kZShkYXRhLmRhdGEoKSwgc2l6ZSgpKSk7CiAgICAgbV9sb2FkaW5nID0gZmFsc2U7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9SZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvUmVxdWVzdC5oCShyZXZpc2lvbiAxNDI2NykKKysrIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKIAogICAgIENvcHlyaWdodCAoQykgMTk5
OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHlyaWdodCAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYg
U2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCwy
OSArMjUsMzkgQEAKICAgICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNo
ZSBmb3IgdGhlc2Ugb2JqZWN0cy4KICovCiAKLSNpZm5kZWYgS0hUTUxfUmVxdWVzdF9oCi0jZGVm
aW5lIEtIVE1MX1JlcXVlc3RfaAorI2lmbmRlZiBSZXF1ZXN0X2hfCisjZGVmaW5lIFJlcXVlc3Rf
aF8KIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRBcnJheS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiAgICAgY2xhc3MgQ2FjaGVkT2JqZWN0OwogICAg
IGNsYXNzIERvY0xvYWRlcjsKIAotICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBEZXByZWNh
dGVkQXJyYXk7Ci0gICAgdHlwZWRlZiBEZXByZWNhdGVkQXJyYXk8Y2hhcj4gRGVwcmVjYXRlZEJ5
dGVBcnJheTsKLQogICAgIGNsYXNzIFJlcXVlc3QgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVx
dWVzdChEb2NMb2FkZXIqLCBDYWNoZWRPYmplY3QqLCBib29sIGluY3JlbWVudGFsKTsKICAgICAg
ICAgflJlcXVlc3QoKTsKLQotICAgICAgICBib29sIGluY3JlbWVudGFsOwotICAgICAgICBEZXBy
ZWNhdGVkQnl0ZUFycmF5IG1fYnVmZmVyOwotICAgICAgICBDYWNoZWRPYmplY3QqIG9iamVjdDsK
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxjaGFyPiYgYnVmZmVyKCkgeyByZXR1cm4gbV9idWZm
ZXI7IH0KKyAgICAgICAgQ2FjaGVkT2JqZWN0KiBjYWNoZWRPYmplY3QoKSB7IHJldHVybiBtX29i
amVjdDsgfQorICAgICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlcigpIHsgcmV0dXJuIG1fZG9jTG9h
ZGVyOyB9CisKKyAgICAgICAgYm9vbCBpc0luY3JlbWVudGFsKCkgeyByZXR1cm4gbV9pbmNyZW1l
bnRhbDsgfQorICAgICAgICB2b2lkIHNldElzSW5jcmVtZW50YWwoYm9vbCBiID0gdHJ1ZSkgeyBt
X2luY3JlbWVudGFsID0gYjsgfQorCisgICAgICAgIGJvb2wgaXNNdWx0aXBhcnQoKSB7IHJldHVy
biBtX211bHRpcGFydDsgfQorICAgICAgICB2b2lkIHNldElzTXVsdGlwYXJ0KGJvb2wgYiA9IHRy
dWUpIHsgbV9tdWx0aXBhcnQgPSBiOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBWZWN0b3I8
Y2hhcj4gbV9idWZmZXI7CisgICAgICAgIENhY2hlZE9iamVjdCogbV9vYmplY3Q7CiAgICAgICAg
IERvY0xvYWRlciogbV9kb2NMb2FkZXI7Ci0gICAgICAgIGJvb2wgbXVsdGlwYXJ0OworICAgICAg
ICBib29sIG1faW5jcmVtZW50YWw7CisgICAgICAgIGJvb2wgbV9tdWx0aXBhcnQ7CiAgICAgfTsK
LX0KIAotI2VuZGlmCit9IC8vbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlcXVlc3Rf
aF8KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMTQyNjcpCisrKyBXZWJD
b3JlL2xvYWRlci9DYWNoZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBA
QAogICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRl
KQogICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
ICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQor
ICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNv
bSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTI5LDcgKzMwLDkgQEAKICNpbmNsdWRlICJDYWNoZWRPYmplY3Qu
aCIKIAogI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiUmVxdWVzdC5oIgogI2luY2x1ZGUg
PEtVUkwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDUsNiArNDgsMTggQEAgQ2FjaGVkT2JqZWN0Ojp+Q2FjaGVkT2JqZWN0KCkKICNlbmRp
ZgogfQogCitWZWN0b3I8Y2hhcj4mIENhY2hlZE9iamVjdDo6YnVmZmVyRGF0YShjb25zdCBjaGFy
KiBieXRlcywgaW50IGFkZGVkU2l6ZSwgUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICAvLyBBZGQg
bmV3IGJ5dGVzIHRvIHRoZSBidWZmZXIgaW4gdGhlIFJlcXVlc3Qgb2JqZWN0LgorICAgIFZlY3Rv
cjxjaGFyPiYgYnVmZmVyID0gcmVxdWVzdC0+YnVmZmVyKCk7CisKKyAgICB1bnNpZ25lZCBvbGRT
aXplID0gYnVmZmVyLnNpemUoKTsKKyAgICBidWZmZXIucmVzaXplKG9sZFNpemUgKyBhZGRlZFNp
emUpOworICAgIG1lbWNweShidWZmZXIuZGF0YSgpICsgb2xkU2l6ZSwgYnl0ZXMsIGFkZGVkU2l6
ZSk7CisgICAgCisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKwogdm9pZCBDYWNoZWRPYmplY3Q6OmZp
bmlzaCgpCiB7CiAgICAgaWYgKG1fc2l6ZSA+IENhY2hlOjptYXhDYWNoZWFibGVPYmplY3RTaXpl
KCkpCkBAIC01NiwxNiArNzEsMTUgQEAgdm9pZCBDYWNoZWRPYmplY3Q6OmZpbmlzaCgpCiAgICAg
ICAgIG1fZXhwaXJlRGF0ZUNoYW5nZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBDYWNoZWRPYmplY3Q6
OnNldEV4cGlyZURhdGUodGltZV90IF9leHBpcmVEYXRlLCBib29sIGNoYW5nZUh0dHBDYWNoZSkK
K3ZvaWQgQ2FjaGVkT2JqZWN0OjpzZXRFeHBpcmVEYXRlKHRpbWVfdCBleHBpcmVEYXRlLCBib29s
IGNoYW5nZUh0dHBDYWNoZSkKIHsKLSAgICBpZiAoIF9leHBpcmVEYXRlID09IG1fZXhwaXJlRGF0
ZSkKKyAgICBpZiAoZXhwaXJlRGF0ZSA9PSBtX2V4cGlyZURhdGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChtX3N0YXR1cyA9PSBVbmNhY2hlYWJsZSB8fCBtX3N0YXR1cyA9PSBDYWNoZWQp
Ci0gICAgewogICAgICAgICBmaW5pc2goKTsKLSAgICB9Ci0gICAgbV9leHBpcmVEYXRlID0gX2V4
cGlyZURhdGU7CisKKyAgICBtX2V4cGlyZURhdGUgPSBleHBpcmVEYXRlOwogICAgIGlmIChjaGFu
Z2VIdHRwQ2FjaGUgJiYgbV9leHBpcmVEYXRlKQogICAgICAgIG1fZXhwaXJlRGF0ZUNoYW5nZWQg
PSB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiAxNDI2NykKKysrIFdlYkNvcmUv
bG9hZGVyL2xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgICAgQ29w
eXJpZ2h0IChDKSAxOTk4IExhcnMgS25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29w
eXJpZ2h0IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICAgIENvcHly
aWdodCAoQykgMjAwMiBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJp
Z2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgpAQCAtMzMsOSArMzQsOSBAQAogI2luY2x1ZGUgIkNhY2hlZE9iamVjdC5oIgogI2luY2x1
ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTERvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCiAjaW5jbHVkZSAiUmVxdWVzdC5oIgotI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIlRyYW5zZmVySm9iLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmZXJKb2IuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNDMsMzMg
KzQ0LDM0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgY3Jvc3NEb21h
aW4oY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmYSwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmYikK
K3N0YXRpYyBib29sIGNyb3NzRG9tYWluKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGEsIGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmIGIpCiB7Ci0gICAgaWYgKGEgPT0gYikgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIERlcHJlY2F0ZWRT
dHJpbmdMaXN0IGwxID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcuJywgYSk7CiAgICAg
RGVwcmVjYXRlZFN0cmluZ0xpc3QgbDIgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJy4n
LCBiKTsKIAotICAgIHdoaWxlKGwxLmNvdW50KCkgPiBsMi5jb3VudCgpKQorICAgIHdoaWxlIChs
MS5jb3VudCgpID4gbDIuY291bnQoKSkKICAgICAgICAgbDEucG9wX2Zyb250KCk7CiAKLSAgICB3
aGlsZShsMi5jb3VudCgpID4gbDEuY291bnQoKSkKKyAgICB3aGlsZSAobDIuY291bnQoKSA+IGwx
LmNvdW50KCkpCiAgICAgICAgIGwyLnBvcF9mcm9udCgpOwogCi0gICAgd2hpbGUobDIuY291bnQo
KSA+PSAyKQotICAgIHsKKyAgICB3aGlsZSAobDIuY291bnQoKSA+PSAyKSB7CiAgICAgICAgIGlm
IChsMSA9PSBsMikKLSAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIGwxLnBvcF9mcm9udCgpOwogICAgICAgICBsMi5wb3BfZnJvbnQo
KTsKICAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogTG9hZGVyOjpMb2FkZXIoKQogewot
ICAgIG1fcmVxdWVzdHNQZW5kaW5nLnNldEF1dG9EZWxldGUoIHRydWUgKTsKKyAgICBtX3JlcXVl
c3RzUGVuZGluZy5zZXRBdXRvRGVsZXRlKHRydWUpOwogfQogCiBMb2FkZXI6On5Mb2FkZXIoKQpA
QCAtNzcsNyArNzksNyBAQCBMb2FkZXI6On5Mb2FkZXIoKQogICAgIGRlbGV0ZUFsbFZhbHVlcyht
X3JlcXVlc3RzTG9hZGluZyk7CiB9CiAKLXZvaWQgTG9hZGVyOjpsb2FkKERvY0xvYWRlciogZGws
IENhY2hlZE9iamVjdCAqb2JqZWN0LCBib29sIGluY3JlbWVudGFsKQordm9pZCBMb2FkZXI6Omxv
YWQoRG9jTG9hZGVyKiBkbCwgQ2FjaGVkT2JqZWN0KiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwp
CiB7CiAgICAgUmVxdWVzdCogcmVxID0gbmV3IFJlcXVlc3QoZGwsIG9iamVjdCwgaW5jcmVtZW50
YWwpOwogICAgIG1fcmVxdWVzdHNQZW5kaW5nLmFwcGVuZChyZXEpOwpAQCAtODYsMzEgKzg4LDMx
IEBAIHZvaWQgTG9hZGVyOjpsb2FkKERvY0xvYWRlciogZGwsIENhY2hlZE8KIAogdm9pZCBMb2Fk
ZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKCkKIHsKLSAgaWYgKCBtX3JlcXVlc3RzUGVuZGluZy5j
b3VudCgpID09IDAgKQotICAgICAgcmV0dXJuOworICAgIGlmIChtX3JlcXVlc3RzUGVuZGluZy5j
b3VudCgpID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIC8vIGdldCB0aGUgZmlyc3QgcGVu
ZGluZyByZXF1ZXN0CisgICAgUmVxdWVzdCogcmVxID0gbV9yZXF1ZXN0c1BlbmRpbmcudGFrZSgw
KTsKIAotICAvLyBnZXQgdGhlIGZpcnN0IHBlbmRpbmcgcmVxdWVzdAotICBSZXF1ZXN0ICpyZXEg
PSBtX3JlcXVlc3RzUGVuZGluZy50YWtlKDApOworICAgIEtVUkwgdShyZXEtPmNhY2hlZE9iamVj
dCgpLT51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIFRyYW5zZmVySm9iKiBqb2IgPSBu
ZXcgVHJhbnNmZXJKb2IodGhpcywgIkdFVCIsIHUpOwogCi0gIEtVUkwgdShyZXEtPm9iamVjdC0+
dXJsKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgVHJhbnNmZXJKb2IqIGpvYiA9IG5ldyBUcmFu
c2ZlckpvYih0aGlzLCAiR0VUIiwgdSk7Ci0gIAotICBpZiAoIXJlcS0+b2JqZWN0LT5hY2NlcHQo
KS5pc0VtcHR5KCkpCi0gICAgICBqb2ItPmFkZE1ldGFEYXRhKCJhY2NlcHQiLCByZXEtPm9iamVj
dC0+YWNjZXB0KCkpOwotICBpZiAocmVxLT5tX2RvY0xvYWRlcikgIHsKLSAgICAgIEtVUkwgciA9
IHJlcS0+bV9kb2NMb2FkZXItPmRvYygpLT5VUkwoKTsKLSAgICAgIGlmIChyLnByb3RvY29sKCku
c3RhcnRzV2l0aCgiaHR0cCIpICYmIHIucGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICByLnNl
dFBhdGgoIi8iKTsKLSAgICAgIGpvYi0+YWRkTWV0YURhdGEoInJlZmVycmVyIiwgci51cmwoKSk7
Ci0gICAgICBEZXByZWNhdGVkU3RyaW5nIGRvbWFpbiA9IHIuaG9zdCgpOwotICAgICAgaWYgKHJl
cS0+bV9kb2NMb2FkZXItPmRvYygpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICAgZG9tYWlu
ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4ocmVxLT5tX2RvY0xvYWRlci0+ZG9jKCkpLT5k
b21haW4oKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICBpZiAoY3Jvc3NEb21haW4odS5ob3N0
KCksIGRvbWFpbikpCi0gICAgICAgICBqb2ItPmFkZE1ldGFEYXRhKCJjcm9zcy1kb21haW4iLCAi
dHJ1ZSIpOwotICB9CisgICAgaWYgKCFyZXEtPmNhY2hlZE9iamVjdCgpLT5hY2NlcHQoKS5pc0Vt
cHR5KCkpCisgICAgICAgIGpvYi0+YWRkTWV0YURhdGEoImFjY2VwdCIsIHJlcS0+Y2FjaGVkT2Jq
ZWN0KCktPmFjY2VwdCgpKTsKKyAgICBpZiAocmVxLT5kb2NMb2FkZXIoKSkgIHsKKyAgICAgICAg
S1VSTCByID0gcmVxLT5kb2NMb2FkZXIoKS0+ZG9jKCktPlVSTCgpOworICAgICAgICBpZiAoci5w
cm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSAmJiByLnBhdGgoKS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByLnNldFBhdGgoIi8iKTsKKyAgICAgICAgam9iLT5hZGRNZXRhRGF0YSgicmVmZXJy
ZXIiLCByLnVybCgpKTsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBkb21haW4gPSByLmhvc3Qo
KTsKKyAgICAgICAgaWYgKHJlcS0+ZG9jTG9hZGVyKCktPmRvYygpLT5pc0hUTUxEb2N1bWVudCgp
KQorICAgICAgICAgICAgZG9tYWluID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4ocmVxLT5k
b2NMb2FkZXIoKS0+ZG9jKCkpLT5kb21haW4oKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAg
IGlmIChjcm9zc0RvbWFpbih1Lmhvc3QoKSwgZG9tYWluKSkKKyAgICAgICAgICAgIGpvYi0+YWRk
TWV0YURhdGEoImNyb3NzLWRvbWFpbiIsICJ0cnVlIik7CisgICAgfQogCi0gIGlmIChqb2ItPnN0
YXJ0KHJlcS0+bV9kb2NMb2FkZXIpKQotICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChqb2IsIHJl
cSk7CisgICAgaWYgKGpvYi0+c3RhcnQocmVxLT5kb2NMb2FkZXIoKSkpCisgICAgICAgIG1fcmVx
dWVzdHNMb2FkaW5nLmFkZChqb2IsIHJlcSk7CiB9CiAKIHZvaWQgTG9hZGVyOjpyZWNlaXZlZEFs
bERhdGEoVHJhbnNmZXJKb2IqIGpvYiwgUGxhdGZvcm1EYXRhIGFsbERhdGEpCkBAIC0xMTgsMjgg
KzEyMCwyOSBAQCB2b2lkIExvYWRlcjo6cmVjZWl2ZWRBbGxEYXRhKFRyYW5zZmVySm9iCiAgICAg
UmVxdWVzdE1hcDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmZpbmQoam9iKTsKICAg
ICBpZiAoaSA9PSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7CisKKyAgICBSZXF1ZXN0KiByZXEgPSBpLT5zZWNvbmQ7
CiAgICAgbV9yZXF1ZXN0c0xvYWRpbmcucmVtb3ZlKGkpOwogCi0gICAgQ2FjaGVkT2JqZWN0ICpv
YmplY3QgPSByLT5vYmplY3Q7Ci0gICAgRG9jTG9hZGVyICpkb2NMb2FkZXIgPSByLT5tX2RvY0xv
YWRlcjsKKyAgICBDYWNoZWRPYmplY3QqIG9iamVjdCA9IHJlcS0+Y2FjaGVkT2JqZWN0KCk7Cisg
ICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIgPSByZXEtPmRvY0xvYWRlcigpOwogCiAgICAgaWYgKGpv
Yi0+ZXJyb3IoKSB8fCBqb2ItPmlzRXJyb3JQYWdlKCkpIHsKICAgICAgICAgZG9jTG9hZGVyLT5z
ZXRMb2FkSW5Qcm9ncmVzcyh0cnVlKTsKLSAgICAgICAgci0+b2JqZWN0LT5lcnJvcigpOworICAg
ICAgICBvYmplY3QtPmVycm9yKCk7CiAgICAgICAgIGRvY0xvYWRlci0+c2V0TG9hZEluUHJvZ3Jl
c3MoZmFsc2UpOwogICAgICAgICBDYWNoZTo6cmVtb3ZlKG9iamVjdCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgZG9jTG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyh0cnVlKTsKLSAgICAgICAgb2Jq
ZWN0LT5kYXRhKHItPm1fYnVmZmVyLCB0cnVlKTsKKyAgICAgICAgb2JqZWN0LT5kYXRhKHJlcS0+
YnVmZmVyKCksIHRydWUpOwogI2lmZGVmIF9fQVBQTEVfXwotICAgICAgICByLT5vYmplY3QtPnNl
dEFsbERhdGEoYWxsRGF0YSk7CisgICAgICAgIG9iamVjdC0+c2V0QWxsRGF0YShhbGxEYXRhKTsK
ICNlbmRpZgogICAgICAgICBkb2NMb2FkZXItPnNldExvYWRJblByb2dyZXNzKGZhbHNlKTsKICAg
ICAgICAgb2JqZWN0LT5maW5pc2goKTsKICAgICB9CiAKLSAgICBkZWxldGUgcjsKKyAgICBkZWxl
dGUgcmVxOwogCiAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KQEAgLTE0NywyNSArMTUw
LDI0IEBAIHZvaWQgTG9hZGVyOjpyZWNlaXZlZEFsbERhdGEoVHJhbnNmZXJKb2IKIHZvaWQgTG9h
ZGVyOjpyZWNlaXZlZFJlc3BvbnNlKFRyYW5zZmVySm9iKiBqb2IsIFBsYXRmb3JtUmVzcG9uc2Ug
cmVzcG9uc2UpCiB7CiAjaWZkZWYgX19BUFBMRV9fCi0gICAgUmVxdWVzdCAqciA9IG1fcmVxdWVz
dHNMb2FkaW5nLmdldChqb2IpOwotICAgIEFTU0VSVChyKTsKKyAgICBSZXF1ZXN0KiByZXEgPSBt
X3JlcXVlc3RzTG9hZGluZy5nZXQoam9iKTsKKyAgICBBU1NFUlQocmVxKTsKICAgICBBU1NFUlQo
cmVzcG9uc2UpOwotICAgIHItPm9iamVjdC0+c2V0UmVzcG9uc2UocmVzcG9uc2UpOwotICAgIHIt
Pm9iamVjdC0+c2V0RXhwaXJlRGF0ZShLV1FDYWNoZU9iamVjdEV4cGlyZXNUaW1lKHItPm1fZG9j
TG9hZGVyLCByZXNwb25zZSksIGZhbHNlKTsKKyAgICByZXEtPmNhY2hlZE9iamVjdCgpLT5zZXRS
ZXNwb25zZShyZXNwb25zZSk7CisgICAgcmVxLT5jYWNoZWRPYmplY3QoKS0+c2V0RXhwaXJlRGF0
ZShLV1FDYWNoZU9iamVjdEV4cGlyZXNUaW1lKHJlcS0+ZG9jTG9hZGVyKCksIHJlc3BvbnNlKSwg
ZmFsc2UpOwogICAgIAogICAgIERlcHJlY2F0ZWRTdHJpbmcgY2hzID0gam9iLT5xdWVyeU1ldGFE
YXRhKCJjaGFyc2V0IikuZGVwcmVjYXRlZFN0cmluZygpOwogICAgIGlmICghY2hzLmlzTnVsbCgp
KQotICAgICAgICByLT5vYmplY3QtPnNldENoYXJzZXQoY2hzKTsKKyAgICAgICAgcmVxLT5jYWNo
ZWRPYmplY3QoKS0+c2V0Q2hhcnNldChjaHMpOwogICAgIAotICAgIGlmIChyLT5tdWx0aXBhcnQp
IHsKLSAgICAgICAgQVNTRVJUKHItPm9iamVjdC0+aXNJbWFnZSgpKTsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8Q2FjaGVkSW1hZ2UgKj4oci0+b2JqZWN0KS0+Y2xlYXIoKTsKLSAgICAgICAgci0+bV9i
dWZmZXIucmVzaXplKDApOwotICAgICAgICBpZiAoci0+bV9kb2NMb2FkZXItPmZyYW1lKCkpCi0g
ICAgICAgICAgICByLT5tX2RvY0xvYWRlci0+ZnJhbWUoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKKyAg
ICBpZiAocmVxLT5pc011bHRpcGFydCgpKSB7CisgICAgICAgIEFTU0VSVChyZXEtPmNhY2hlZE9i
amVjdCgpLT5pc0ltYWdlKCkpOworICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+KHJl
cS0+Y2FjaGVkT2JqZWN0KCkpLT5jbGVhcigpOworICAgICAgICBpZiAocmVxLT5kb2NMb2FkZXIo
KS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIHJlcS0+ZG9jTG9hZGVyKCktPmZyYW1lKCktPmNoZWNr
Q29tcGxldGVkKCk7CiAgICAgfSBlbHNlIGlmIChLV1FSZXNwb25zZUlzTXVsdGlwYXJ0KHJlc3Bv
bnNlKSkgewotICAgICAgICByLT5tdWx0aXBhcnQgPSB0cnVlOwotICAgICAgICBpZiAoIXItPm9i
amVjdC0+aXNJbWFnZSgpKQorICAgICAgICByZXEtPnNldElzTXVsdGlwYXJ0KHRydWUpOworICAg
ICAgICBpZiAoIXJlcS0+Y2FjaGVkT2JqZWN0KCktPmlzSW1hZ2UoKSkKICAgICAgICAgICAgIGpv
Yi0+Y2FuY2VsKCk7CiAgICAgfQogI2VuZGlmCkBAIC0xNzMsNDAgKzE3NSw0MiBAQCB2b2lkIExv
YWRlcjo6cmVjZWl2ZWRSZXNwb25zZShUcmFuc2ZlckpvCiAKIHZvaWQgTG9hZGVyOjpyZWNlaXZl
ZERhdGEoVHJhbnNmZXJKb2IqIGpvYiwgY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCiB7Ci0g
ICAgUmVxdWVzdCAqciA9IG1fcmVxdWVzdHNMb2FkaW5nLmdldChqb2IpOwotICAgIGlmICghcikK
KyAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gbV9yZXF1ZXN0c0xvYWRpbmcuZ2V0KGpvYik7CisgICAg
aWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBvbGRTaXplID0g
ci0+bV9idWZmZXIuc2l6ZSgpOwotICAgIHItPm1fYnVmZmVyLnJlc2l6ZShvbGRTaXplICsgc2l6
ZSk7Ci0gICAgbWVtY3B5KHItPm1fYnVmZmVyLmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIHNpemUp
OworICAgIENhY2hlZE9iamVjdCogb2JqZWN0ID0gcmVxdWVzdC0+Y2FjaGVkT2JqZWN0KCk7ICAg
IAorICAgIFZlY3RvcjxjaGFyPiYgYnVmZmVyID0gb2JqZWN0LT5idWZmZXJEYXRhKGRhdGEsIHNp
emUsIHJlcXVlc3QpOwogCi0gICAgaWYgKHItPm11bHRpcGFydCkKLSAgICAgICAgci0+b2JqZWN0
LT5kYXRhKHItPm1fYnVmZmVyLCB0cnVlKTsgLy8gdGhlIGxvYWRlciBkZWxpdmVycyB0aGUgZGF0
YSBpbiBhIG11bHRpcGFydCBzZWN0aW9uIGFsbCBhdCBvbmNlLCBzZW5kIGVvZgotICAgIGVsc2Ug
aWYgKHItPmluY3JlbWVudGFsKQotICAgICAgICByLT5vYmplY3QtPmRhdGEoci0+bV9idWZmZXIs
IGZhbHNlKTsKKyAgICAvLyBTZXQgdGhlIGRhdGEuCisgICAgaWYgKHJlcXVlc3QtPmlzTXVsdGlw
YXJ0KCkpCisgICAgICAgIC8vIFRoZSBsb2FkZXIgZGVsaXZlcnMgdGhlIGRhdGEgaW4gYSBtdWx0
aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwgc2VuZCBlb2YuCisgICAgICAgIG9iamVjdC0+ZGF0
YShidWZmZXIsIHRydWUpOworICAgIGVsc2UgaWYgKHJlcXVlc3QtPmlzSW5jcmVtZW50YWwoKSkK
KyAgICAgICAgb2JqZWN0LT5kYXRhKGJ1ZmZlciwgZmFsc2UpOwogfQogCi1pbnQgTG9hZGVyOjpu
dW1SZXF1ZXN0cyggRG9jTG9hZGVyKiBkbCApIGNvbnN0CitpbnQgTG9hZGVyOjpudW1SZXF1ZXN0
cyhEb2NMb2FkZXIqIGRsKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQg
a2VlcCBhIGNvbGxlY3Rpb24gb2YgcmVxdWVzdHMgYnkgRG9jTG9hZGVyLCBzbyB3ZSBjYW4gZG8g
dGhpcyBpbnN0YW50bHkuCiAKICAgICBpbnQgcmVzID0gMDsKIAotICAgIERlcHJlY2F0ZWRQdHJM
aXN0SXRlcmF0b3I8UmVxdWVzdD4gcEl0KCBtX3JlcXVlc3RzUGVuZGluZyApOwotICAgIGZvciAo
OyBwSXQuY3VycmVudCgpOyArK3BJdCApCi0gICAgICAgIGlmICggcEl0LmN1cnJlbnQoKS0+bV9k
b2NMb2FkZXIgPT0gZGwgKQorICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8UmVxdWVzdD4g
cEl0KG1fcmVxdWVzdHNQZW5kaW5nKTsKKyAgICBmb3IgKDsgcEl0LmN1cnJlbnQoKTsgKytwSXQp
IHsKKyAgICAgICAgaWYgKHBJdC5jdXJyZW50KCktPmRvY0xvYWRlcigpID09IGRsKQogICAgICAg
ICAgICAgcmVzKys7CisgICAgfQogCiAgICAgUmVxdWVzdE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9yZXF1ZXN0c0xvYWRpbmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0TWFwOjpjb25zdF9p
dGVyYXRvciBpID0gbV9yZXF1ZXN0c0xvYWRpbmcuYmVnaW4oKTsgIShpID09IGVuZCk7ICsraSkg
ewogICAgICAgICBSZXF1ZXN0KiByID0gaS0+c2Vjb25kOwotICAgICAgICByZXMgKz0gKHItPm1f
ZG9jTG9hZGVyID09IGRsICYmICFyLT5tdWx0aXBhcnQpOworICAgICAgICByZXMgKz0gKHItPmRv
Y0xvYWRlcigpID09IGRsICYmICFyLT5pc011bHRpcGFydCgpKTsKICAgICB9CiAKLSAgICBEZXBy
ZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFJlcXVlc3Q+IGJkSXQoIG1fcmVxdWVzdHNCYWNrZ3JvdW5k
RGVjb2RpbmcgKTsKLSAgICBmb3IgKDsgYmRJdC5jdXJyZW50KCk7ICsrYmRJdCApCi0gICAgICAg
IGlmICggYmRJdC5jdXJyZW50KCktPm1fZG9jTG9hZGVyID09IGRsICkKKyAgICBEZXByZWNhdGVk
UHRyTGlzdEl0ZXJhdG9yPFJlcXVlc3Q+IGJkSXQobV9yZXF1ZXN0c0JhY2tncm91bmREZWNvZGlu
Zyk7CisgICAgZm9yICg7IGJkSXQuY3VycmVudCgpOyArK2JkSXQpCisgICAgICAgIGlmIChiZEl0
LmN1cnJlbnQoKS0+ZG9jTG9hZGVyKCkgPT0gZGwpCiAgICAgICAgICAgICByZXMrKzsKIAogICAg
IGlmIChkbC0+bG9hZEluUHJvZ3Jlc3MoKSkKQEAgLTIxOCwxMyArMjIyLDExIEBAIGludCBMb2Fk
ZXI6Om51bVJlcXVlc3RzKCBEb2NMb2FkZXIqIGRsICkKIHZvaWQgTG9hZGVyOjpjYW5jZWxSZXF1
ZXN0cyhEb2NMb2FkZXIqIGRsKQogewogICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8UmVx
dWVzdD4gcEl0KG1fcmVxdWVzdHNQZW5kaW5nKTsKLSAgICB3aGlsZSAocEl0LmN1cnJlbnQoKSkK
LSAgICB7Ci0gICAgICAgIGlmIChwSXQuY3VycmVudCgpLT5tX2RvY0xvYWRlciA9PSBkbCkgewot
ICAgICAgICAgICAgQ2FjaGU6OnJlbW92ZSggcEl0LmN1cnJlbnQoKS0+b2JqZWN0ICk7Ci0gICAg
ICAgICAgICBtX3JlcXVlc3RzUGVuZGluZy5yZW1vdmUoIHBJdCApOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKKyAgICB3aGlsZSAocEl0LmN1cnJlbnQoKSkgeworICAgICAgICBpZiAocEl0LmN1
cnJlbnQoKS0+ZG9jTG9hZGVyKCkgPT0gZGwpIHsKKyAgICAgICAgICAgIENhY2hlOjpyZW1vdmUo
cEl0LmN1cnJlbnQoKS0+Y2FjaGVkT2JqZWN0KCkpOworICAgICAgICAgICAgbV9yZXF1ZXN0c1Bl
bmRpbmcucmVtb3ZlKHBJdCk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgKytwSXQ7CiAg
ICAgfQogCkBAIC0yMzMsNyArMjM1LDcgQEAgdm9pZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKERv
Y0xvYWRlciogZAogICAgIFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNMb2Fk
aW5nLmVuZCgpOwogICAgIGZvciAoUmVxdWVzdE1hcDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNM
b2FkaW5nLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKICAgICAgICAgUmVxdWVzdCogciA9IGkt
PnNlY29uZDsKLSAgICAgICAgaWYgKHItPm1fZG9jTG9hZGVyID09IGRsKQorICAgICAgICBpZiAo
ci0+ZG9jTG9hZGVyKCkgPT0gZGwpCiAgICAgICAgICAgICBqb2JzVG9DYW5jZWwuYXBwZW5kKGkt
PmZpcnN0KTsKICAgICB9CiAKQEAgLTI0MSwyNSArMjQzLDIzIEBAIHZvaWQgTG9hZGVyOjpjYW5j
ZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGQKICAgICAgICAgVHJhbnNmZXJKb2IqIGpvYiA9IGpvYnNU
b0NhbmNlbFtpXTsKICAgICAgICAgUmVxdWVzdCogciA9IG1fcmVxdWVzdHNMb2FkaW5nLmdldChq
b2IpOwogICAgICAgICBtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUoam9iKTsKLSAgICAgICAgQ2Fj
aGU6OnJlbW92ZShyLT5vYmplY3QpOworICAgICAgICBDYWNoZTo6cmVtb3ZlKHItPmNhY2hlZE9i
amVjdCgpKTsKICAgICAgICAgam9iLT5raWxsKCk7CiAgICAgfQogCi0gICAgRGVwcmVjYXRlZFB0
ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBiZEl0KCBtX3JlcXVlc3RzQmFja2dyb3VuZERlY29kaW5n
ICk7CisgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBiZEl0KG1fcmVxdWVz
dHNCYWNrZ3JvdW5kRGVjb2RpbmcpOwogICAgIHdoaWxlIChiZEl0LmN1cnJlbnQoKSkgewotICAg
ICAgICBpZiAoYmRJdC5jdXJyZW50KCktPm1fZG9jTG9hZGVyID09IGRsKSB7Ci0gICAgICAgICAg
ICBDYWNoZTo6cmVtb3ZlKCBiZEl0LmN1cnJlbnQoKS0+b2JqZWN0ICk7Ci0gICAgICAgICAgICBt
X3JlcXVlc3RzQmFja2dyb3VuZERlY29kaW5nLnJlbW92ZSggYmRJdCApOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgaWYgKGJkSXQuY3VycmVudCgpLT5kb2NMb2FkZXIoKSA9PSBk
bCkgeworICAgICAgICAgICAgQ2FjaGU6OnJlbW92ZShiZEl0LmN1cnJlbnQoKS0+Y2FjaGVkT2Jq
ZWN0KCkpOworICAgICAgICAgICAgbV9yZXF1ZXN0c0JhY2tncm91bmREZWNvZGluZy5yZW1vdmUo
YmRJdCk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgKytiZEl0OwogICAgIH0KIH0KIAot
dm9pZCBMb2FkZXI6OnJlbW92ZUJhY2tncm91bmREZWNvZGluZ1JlcXVlc3QgKFJlcXVlc3QgKnIp
Cit2b2lkIExvYWRlcjo6cmVtb3ZlQmFja2dyb3VuZERlY29kaW5nUmVxdWVzdChSZXF1ZXN0KiBy
KQogewotICAgIGJvb2wgcHJlc2VudCA9IG1fcmVxdWVzdHNCYWNrZ3JvdW5kRGVjb2RpbmcuY29u
dGFpbnNSZWYocik7Ci0gICAgaWYgKHByZXNlbnQpCisgICAgaWYgKG1fcmVxdWVzdHNCYWNrZ3Jv
dW5kRGVjb2RpbmcuY29udGFpbnNSZWYocikpCiAgICAgICAgIG1fcmVxdWVzdHNCYWNrZ3JvdW5k
RGVjb2RpbmcucmVtb3ZlKHIpOwogfQogCkBAIC0yNjcsMTEgKzI2NywxMSBAQCBUcmFuc2Zlckpv
YiogTG9hZGVyOjpqb2JGb3JSZXF1ZXN0KGNvbnN0CiB7CiAgICAgUmVxdWVzdE1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0c0xvYWRpbmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0
TWFwOjpjb25zdF9pdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xvYWRpbmcuYmVnaW4oKTsgaSAhPSBl
bmQ7ICsraSkgewotICAgICAgICBDYWNoZWRPYmplY3QqIG9iaiA9IGktPnNlY29uZC0+b2JqZWN0
OworICAgICAgICBDYWNoZWRPYmplY3QqIG9iaiA9IGktPnNlY29uZC0+Y2FjaGVkT2JqZWN0KCk7
CiAgICAgICAgIGlmIChvYmogJiYgb2JqLT51cmwoKSA9PSBVUkwpCiAgICAgICAgICAgICByZXR1
cm4gaS0+Zmlyc3Q7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi19Cit9IC8vbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCShyZXZp
c2lvbiAxNDI2NykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICAgIENvcHlyaWdodCAoQykgMTk5OCBMYXJz
IEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHlyaWdodCAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8g
QmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwg
V2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMzLDYgKzM0LDcg
QEAKICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJEZWNv
ZGVyLmgiCiAjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTczLDE1ICs3NSwxNCBAQCB2b2lkIENhY2hlZFhTTFN0
eWxlU2hlZXQ6OnNldENoYXJzZXQoIGNvCiAgICAgICAgIG1fZGVjb2Rlci0+c2V0RW5jb2RpbmdO
YW1lKGNocy5sYXRpbjEoKSwgRGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7CiB9CiAK
LXZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZGF0YShEZXByZWNhdGVkQnl0ZUFycmF5JiBkYXRh
LCBib29sIGVvZikKK3ZvaWQgQ2FjaGVkWFNMU3R5bGVTaGVldDo6ZGF0YShWZWN0b3I8Y2hhcj4m
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGlmICghZW9mKQorICAgIGlmICgh
YWxsRGF0YVJlY2VpdmVkKQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRTaXplKGRhdGEuc2l6
ZSgpKTsKICAgICBtX3NoZWV0ID0gU3RyaW5nKG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEuZGF0YSgp
LCBzaXplKCkpKTsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICAKICAgICBjaGVja05vdGlm
eSgpOwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxNDI2NykKKysr
IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0
LDcgQEAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTggTGFycyBLbm9sbCAoa25vbGxAbXBpLWhkLm1w
Zy5kZSkKICAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAyIFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9y
ZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFp
bC5jb20pCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMiw4ICszMywxMCBAQAogI2luY2x1ZGUgIkNhY2hlZE9i
amVjdENsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudFdhbGtlci5oIgogI2lu
Y2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIktXUUxvYWRlci5oIgogI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiS1dRTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdXNpbmcgc3RkOjptYXg7CiAKQEAgLTEwOCwzNyArMTEx
LDQ3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmNsZWFyKCkKICAgICBzZXRTaXplKDApOwogfQogCi12
b2lkIENhY2hlZEltYWdlOjpkYXRhKERlcHJlY2F0ZWRCeXRlQXJyYXkmIGRhdGEsIGJvb2wgZW9m
KQorVmVjdG9yPGNoYXI+JiBDYWNoZWRJbWFnZTo6YnVmZmVyRGF0YShjb25zdCBjaGFyKiBieXRl
cywgaW50IGFkZGVkU2l6ZSwgUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBib29sIHNpemVBdmFp
bGFibGUgPSBmYWxzZTsKLSAgICAKLSAgICBtX2RhdGFTaXplID0gZGF0YS5zaXplKCk7Ci0KICAg
ICAvLyBDcmVhdGUgdGhlIGltYWdlIGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgogICAgIGlmICgh
bV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZSA9IG5ldyBJbWFnZSh0aGlzLAogI2lmIF9fQVBQTEVf
XwotICAgICAgICAgICAgS1dRUmVzcG9uc2VNSU1FVHlwZShtX3Jlc3BvbnNlKSA9PSAiYXBwbGlj
YXRpb24vcGRmIgorICAgICAgICBtX2ltYWdlID0gbmV3IEltYWdlKHRoaXMsIEtXUVJlc3BvbnNl
TUlNRVR5cGUobV9yZXNwb25zZSkgPT0gImFwcGxpY2F0aW9uL3BkZiIpOwogI2Vsc2UKLSAgICAg
ICAgICAgIGZhbHNlCisgICAgICAgIG1faW1hZ2UgPSBuZXcgSW1hZ2UodGhpcywgZmFsc2UpOwog
I2VuZGlmCi0gICAgICAgICAgICApOwotICAgICAgICAKLSAgICAvLyBHaXZlIGFsbCB0aGUgZGF0
YSBzbyBmYXIgdG8gdGhlIGltYWdlIG9iamVjdCBmb3IgcHJvY2Vzc2luZy4KLSAgICAvLyBJdCB3
aWxsIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCB3aWxsIGRlbGF5IGRlY29kaW5nIHVudGlsIHF1
ZXJpZWQgZm9yIGluZm8gKGxpa2Ugc2l6ZSBvciBzcGVjaWZpYyBpbWFnZSBmcmFtZXMpLgotICAg
IHNpemVBdmFpbGFibGUgPSBtX2ltYWdlLT5zZXREYXRhKGRhdGEsIGVvZik7CisKKyAgICAvLyBB
ZGQgbmV3IGJ5dGVzIERJUkVDVExZIHRvIHRoZSBidWZmZXIgaW4gdGhlIEltYWdlIG9iamVjdC4K
KyAgICBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciA9IG1faW1hZ2UtPmRhdGFCdWZmZXIoKTsKKworICAg
IHVuc2lnbmVkIG9sZFNpemUgPSBidWZmZXIuc2l6ZSgpOworICAgIGJ1ZmZlci5yZXNpemUob2xk
U2l6ZSArIGFkZGVkU2l6ZSk7CisgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCkgKyBvbGRTaXplLCBi
eXRlcywgYWRkZWRTaXplKTsKKworICAgIHJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQgQ2FjaGVk
SW1hZ2U6OmRhdGEoVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sK
KyAgICBib29sIHNpemVBdmFpbGFibGUgPSBmYWxzZTsKKworICAgIG1fZGF0YVNpemUgPSBkYXRh
LnNpemUoKTsKKworICAgIC8vIEhhdmUgdGhlIGltYWdlIHVwZGF0ZSBpdHMgZGF0YSBmcm9tIGl0
cyBpbnRlcm5hbCBidWZmZXIuCisgICAgLy8gSXQgd2lsbCBub3QgZG8gYW55dGhpbmcgbm93LCBi
dXQgd2lsbCBkZWxheSBkZWNvZGluZyB1bnRpbCAKKyAgICAvLyBxdWVyaWVkIGZvciBpbmZvIChs
aWtlIHNpemUgb3Igc3BlY2lmaWMgaW1hZ2UgZnJhbWVzKS4KKyAgICBzaXplQXZhaWxhYmxlID0g
bV9pbWFnZS0+c2V0RGF0YShhbGxEYXRhUmVjZWl2ZWQpOwogCiAgICAgLy8gR28gYWhlYWQgYW5k
IHRlbGwgb3VyIG9ic2VydmVycyB0byB0cnkgdG8gZHJhdyBpZiB3ZSBoYXZlIGVpdGhlcgogICAg
IC8vIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSBvciB0aGUgc2l6ZSBpcyBrbm93bi4gIEVhY2ggY2h1
bmsgZnJvbSB0aGUKICAgICAvLyBuZXR3b3JrIGNhdXNlcyBvYnNlcnZlcnMgdG8gcmVwYWludCwg
d2hpY2ggd2lsbCBmb3JjZSB0aGF0IGNodW5rCiAgICAgLy8gdG8gZGVjb2RlLgotICAgIGlmIChz
aXplQXZhaWxhYmxlIHx8IGVvZikgeworICAgIGlmIChzaXplQXZhaWxhYmxlIHx8IGFsbERhdGFS
ZWNlaXZlZCkgewogICAgICAgICBpZiAobV9pbWFnZS0+aXNOdWxsKCkpIHsKICAgICAgICAgICAg
IG1fZXJyb3JPY2N1cnJlZCA9IHRydWU7CiAgICAgICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsK
ICAgICAgICAgICAgIENhY2hlOjpyZW1vdmUodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQorICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5vdGlmeU9ic2VydmVycygpOwogCiAgICAg
ICAgIC8vIEZJWE1FOiBBbiBhbmltYXRlZCBHSUYgd2l0aCBhIGh1Z2UgZnJhbWUgY291bnQgY2Fu
J3QgaGF2ZSBpdHMgc2l6ZSBwcm9wZXJseSBlc3RpbWF0ZWQuICBUaGUgcmVhc29uIGlzIHRoYXQg
d2UgZG9uJ3QKQEAgLTE0OCw3ICsxNjEsOCBAQCB2b2lkIENhY2hlZEltYWdlOjpkYXRhKERlcHJl
Y2F0ZWRCeXRlQXJyCiAgICAgICAgIEludFNpemUgcyA9IGltYWdlU2l6ZSgpOwogICAgICAgICBz
ZXRTaXplKG1heChzLndpZHRoKCkgKiBzLmhlaWdodCgpICogNCwgbV9kYXRhU2l6ZSkpOwogICAg
IH0KLSAgICBpZiAoZW9mKSB7CisgICAgCisgICAgaWYgKGFsbERhdGFSZWNlaXZlZCkgewogICAg
ICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgY2hlY2tOb3RpZnkoKTsKICAgICB9CkBA
IC0xNjksNyArMTgzLDcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6Y2hlY2tOb3RpZnkoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwot
ICAgIHdoaWxlIChDYWNoZWRPYmplY3RDbGllbnQgKmMgPSB3Lm5leHQoKSkKKyAgICB3aGlsZSAo
Q2FjaGVkT2JqZWN0Q2xpZW50KiBjID0gdy5uZXh0KCkpCiAgICAgICAgIGMtPm5vdGlmeUZpbmlz
aGVkKHRoaXMpOwogfQogCkBAIC0xNzksMTAgKzE5MywxMSBAQCBib29sIENhY2hlZEltYWdlOjpz
aG91bGRTdG9wQW5pbWF0aW9uKGNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBD
YWNoZWRPYmplY3RDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwotICAgIHdoaWxlIChDYWNoZWRP
YmplY3RDbGllbnQgKmMgPSB3Lm5leHQoKSkKKyAgICB3aGlsZSAoQ2FjaGVkT2JqZWN0Q2xpZW50
KiBjID0gdy5uZXh0KCkpIHsKICAgICAgICAgaWYgKGMtPndpbGxSZW5kZXJJbWFnZSh0aGlzKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKyAgICB9CisKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTkyLDQgKzIwNyw0IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6OmFuaW1hdGlvbkFk
dmFuY2VkKGNvbnMKICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7CiB9CiAKLX0KK30gLy9uYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWEJMRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFhCTERvY3VtZW50LmNwcAkocmV2
aXNpb24gMTQyNjcpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRYQkxEb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgICAgQ29weXJpZ2h0IChDKSAxOTk4IExhcnMg
S25vbGwgKGtub2xsQG1waS1oZC5tcGcuZGUpCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICAgIENvcHlyaWdodCAoQykgMjAwMiBXYWxkbyBC
YXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjksMTAgKzMwLDEz
IEBACiAKICNpZm5kZWYgS0hUTUxfTk9fWEJMCiAKKyNpbmNsdWRlICJDYWNoZWRYQkxEb2N1bWVu
dC5oIgorCiAjaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNsdWRl
ICJDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIuaCIKICNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5j
bHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTc1LDkgKzc5LDkgQEAgdm9pZCBDYWNoZWRYQkxEb2N1bWVudDo6c2V0Q2hh
cnNldCggY29ucwogICAgICAgICBtX2RlY29kZXItPnNldEVuY29kaW5nKGNocy5sYXRpbjEoKSwg
RGVjb2Rlcjo6RW5jb2RpbmdGcm9tSFRUUEhlYWRlcik7CiB9CiAKLXZvaWQgQ2FjaGVkWEJMRG9j
dW1lbnQ6OmRhdGEoRGVwcmVjYXRlZEJ5dGVBcnJheSYgZGF0YSwgYm9vbCBlb2YgKQordm9pZCBD
YWNoZWRYQkxEb2N1bWVudDo6ZGF0YShWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgKQogewotICAg
IGlmICghZW9mKQorICAgIGlmICghYWxsRGF0YVJlY2VpdmVkKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgYXNzZXJ0KCFtX2RvY3VtZW50KTsKQEAgLTk3LDcgKzEwMSw3IEBAIHZvaWQgQ2Fj
aGVkWEJMRG9jdW1lbnQ6OmRhdGEoRGVwcmVjYXRlZEIKIAogdm9pZCBDYWNoZWRYQkxEb2N1bWVu
dDo6Y2hlY2tOb3RpZnkoKQogewotICAgIGlmKG1fbG9hZGluZykKKyAgICBpZiAobV9sb2FkaW5n
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQ2FjaGVkT2JqZWN0Q2xpZW50V2Fsa2VyIHco
bV9jbGllbnRzKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuY3BwCShyZXZpc2lvbiAxNDI2NykKKysrIFdlYkNv
cmUvbG9hZGVyL1JlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICAg
IENvcHlyaWdodCAoQykgMTk5OCBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAg
IENvcHlyaWdodCAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAgICBD
b3B5cmlnaHQgKEMpIDIwMDIgV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgIENv
cHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KIAog
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTMyLDE1ICszMywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJl
cXVlc3Q6OlJlcXVlc3QoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hlZE9iamVjdCogb2JqLCBi
b29sIGluYykKLSAgICA6IGluY3JlbWVudGFsKGluYyksIG9iamVjdChvYmopLCBtX2RvY0xvYWRl
cihkb2NMb2FkZXIpLCBtdWx0aXBhcnQoZmFsc2UpCitSZXF1ZXN0OjpSZXF1ZXN0KERvY0xvYWRl
ciogZG9jTG9hZGVyLCBDYWNoZWRPYmplY3QqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCkKKyAg
ICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAsIG1fZG9jTG9hZGVyKGRvY0xvYWRlcikKKyAgICAs
IG1faW5jcmVtZW50YWwoaW5jcmVtZW50YWwpCisgICAgLCBtX211bHRpcGFydChmYWxzZSkKIHsK
LSAgICBvYmplY3QtPnNldFJlcXVlc3QodGhpcyk7CisgICAgbV9vYmplY3QtPnNldFJlcXVlc3Qo
dGhpcyk7CiB9CiAKIFJlcXVlc3Q6On5SZXF1ZXN0KCkKIHsKLSAgICBvYmplY3QtPnNldFJlcXVl
c3QoMCk7CisgICAgbV9vYmplY3QtPnNldFJlcXVlc3QoMCk7CiB9CiAKLX0KK30gLy9uYW1lc3Bh
Y2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="2286"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>