<?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>6617</bug_id>
          
          <creation_ts>2006-01-17 12:34:53 -0800</creation_ts>
          <short_desc>TOT REGRESSION: Crash in cloneChildNodes when clicking element</short_desc>
          <delta_ts>2006-01-31 21:20:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>http://studwww.ugent.be/~ddfreyne/pub/webkit/1/wp-admin/kaboom.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Denis Defreyne">amonre</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28715</commentid>
    <comment_count>0</comment_count>
    <who name="Denis Defreyne">amonre</who>
    <bug_when>2006-01-17 12:34:53 -0800</bug_when>
    <thetext>STEPS TO REPRODUCE:

1. Open &lt;http://studwww.ugent.be/~ddfreyne/pub/webkit/1/wp-admin/kaboom.html&gt; in a recent 
WebKit build.
2. Click and drag the blue horizontal &quot;Discussion&quot; bar on the right down.
3. Crash.

ACTUAL RESULTS:

The application crashes as soon as the drag operation starts.

EXPECTED RESULTS:

The item should be dragged down in all its JavaScript/DOM/whatever glory.

BUILD DATE AND PLATFORM:

WebKit-SVN-r12148.dmg (Tue Jan 17 10:33:08 GMT 2006)
Crash does not occur on latest Safari release.

NOTES: 

* I tried isolating the crash, but I didn&apos;t succeed. Since I don&apos;t really know what&apos;s causing the crash, I&apos;m 
giving it a rather obscure summary, and guessing a component. Apologies.

* That sample page is a WordPress 2 admin interface page. Just in case the lawyers pop in or 
something.

* Crash report will follow in a minute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28716</commentid>
    <comment_count>1</comment_count>
      <attachid>5740</attachid>
    <who name="Denis Defreyne">amonre</who>
    <bug_when>2006-01-17 12:35:32 -0800</bug_when>
    <thetext>Created attachment 5740
Crash log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28718</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2006-01-17 13:04:50 -0800</bug_when>
    <thetext>Confirmed on TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28719</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2006-01-17 13:14:00 -0800</bug_when>
    <thetext>All you have to do to reproduce this crash is click the word &quot;Discussion.&quot; It seems to have an onclick 
handler that does funny things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29363</commentid>
    <comment_count>4</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2006-01-22 04:37:47 -0800</bug_when>
    <thetext>Adding Regression keyword.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29552</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-23 00:27:53 -0800</bug_when>
    <thetext>I think I can fix this with some RefPtr. Working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29560</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-23 02:33:01 -0800</bug_when>
    <thetext>I have a fix, but would be nice to have a test case for layout tests too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29562</commentid>
    <comment_count>7</comment_count>
      <attachid>5866</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-23 02:48:57 -0800</bug_when>
    <thetext>Created attachment 5866
use PassRefPtr for cloneNode -- made the bug go away</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29571</commentid>
    <comment_count>8</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-01-23 03:40:29 -0800</bug_when>
    <thetext>I could reproduce the crash by modifying fast/dom/clone-node-form-elements.html to make

&lt;input id=&quot;input2&quot; type=&quot;checkbox&quot;&gt;

read 

&lt;input id=&quot;input2&quot; type=&quot;checkbox&quot; checked=&quot;checked&quot;&gt;
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29581</commentid>
    <comment_count>9</comment_count>
      <attachid>5866</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2006-01-23 07:32:41 -0800</bug_when>
    <thetext>Comment on attachment 5866
use PassRefPtr for cloneNode -- made the bug go away

It might be a good idea to check for leaks in the layout tests. Otherwise r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29589</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-23 09:00:11 -0800</bug_when>
    <thetext>I checked for leaks, and found and fixed one. There are more leaks remaining, but they don&apos;t relate to what I just changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30872</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-31 21:20:44 -0800</bug_when>
    <thetext>Removing Regression keyword from bugs already fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5740</attachid>
            <date>2006-01-17 12:35:32 -0800</date>
            <delta_ts>2006-01-17 12:35:32 -0800</delta_ts>
            <desc>Crash log</desc>
            <filename>webkit.crashlog.txt</filename>
            <type>text/plain</type>
            <size>10895</size>
            <attacher name="Denis Defreyne">amonre</attacher>
            
              <data encoding="base64">RGF0ZS9UaW1lOiAgICAgIDIwMDYtMDEtMTcgMjA6MzI6MzUuODk3ICswMTAwCk9TIFZlcnNpb246
ICAgICAxMC40LjQgKEJ1aWxkIDhHMzIpClJlcG9ydCBWZXJzaW9uOiAzCgpDb21tYW5kOiBTYWZh
cmkKUGF0aDogICAgL0FwcGxpY2F0aW9ucy9TYWZhcmkuYXBwL0NvbnRlbnRzL01hY09TL1NhZmFy
aQpQYXJlbnQ6ICBXaW5kb3dTZXJ2ZXIgWzgxXQoKVmVyc2lvbjogICAgICAgIDIuMC4zICg0MTcu
OCkKQnVpbGQgVmVyc2lvbjogIDEKUHJvamVjdCBOYW1lOiAgIFdlYkJyb3dzZXIKU291cmNlIFZl
cnNpb246IDQxNzA4MDAKClBJRDogICAgMjE2NzcKVGhyZWFkOiAwCgpFeGNlcHRpb246ICBFWENf
QkFEX0FDQ0VTUyAoMHgwMDAxKQpDb2RlczogICAgICBLRVJOX1BST1RFQ1RJT05fRkFJTFVSRSAo
MHgwMDAyKSBhdCAweDAwMDAwMDAwCgpUaHJlYWQgMCBDcmFzaGVkOgowICAgPDwwMDAwMDAwMD4+
IAkweDAwMDAwMDAwIDAgKyAwCjEgICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgIAkweDAxMWY1
YTU4IFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjpjbG9uZUNoaWxkTm9kZXMoV2ViQ29yZTo6
Tm9kZUltcGwqKSArIDkyCjIgICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgIAkweDAxMDk4YjM4
IFdlYkNvcmU6OkhUTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wpICsgMjAwCjMgICBjb20u
YXBwbGUuV2ViQ29yZSAgICAgICAgIAkweDAxMWY1YTU4IFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJ
bXBsOjpjbG9uZUNoaWxkTm9kZXMoV2ViQ29yZTo6Tm9kZUltcGwqKSArIDkyCjQgICBjb20uYXBw
bGUuV2ViQ29yZSAgICAgICAgIAkweDAxMDk4YjM4IFdlYkNvcmU6OkhUTUxFbGVtZW50SW1wbDo6
Y2xvbmVOb2RlKGJvb2wpICsgMjAwCjUgICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgIAkweDAx
MWY1YTU4IFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjpjbG9uZUNoaWxkTm9kZXMoV2ViQ29y
ZTo6Tm9kZUltcGwqKSArIDkyCjYgICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgIAkweDAxMDk4
YjM4IFdlYkNvcmU6OkhUTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wpICsgMjAwCjcgICBj
b20uYXBwbGUuV2ViQ29yZSAgICAgICAgIAkweDAxMDY5NzljIEtKUzo6RE9NTm9kZVByb3RvRnVu
Yzo6Y2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgS0pTOjpM
aXN0IGNvbnN0JikgKyAzNTIKOCAgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgCTB4MDAxMmJi
ZDAgS0pTOjpKU09iamVjdDo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBL
SlM6Okxpc3QgY29uc3QmKSArIDk2CjkgICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgIAkweDAw
MTI1Yjc0IEtKUzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGUoS0pTOjpFeGVjU3RhdGUq
KSArIDQ2NAoxMCAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDEyMTRlOCBLSlM6OkFy
Z3VtZW50TGlzdE5vZGU6OmV2YWx1YXRlTGlzdChLSlM6OkV4ZWNTdGF0ZSopICsgODgKMTEgIGNv
bS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgCTB4MDAxMjE1ZDQgS0pTOjpBcmd1bWVudHNOb2RlOjpl
dmFsdWF0ZUxpc3QoS0pTOjpFeGVjU3RhdGUqKSArIDQ0CjEyICBjb20uYXBwbGUuSmF2YVNjcmlw
dENvcmUgIAkweDAwMTI1YjI4IEtKUzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGUoS0pT
OjpFeGVjU3RhdGUqKSArIDM4OAoxMyAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDEy
MzdiOCBLSlM6OlZhckRlY2xOb2RlOjpldmFsdWF0ZShLSlM6OkV4ZWNTdGF0ZSopICsgODgKMTQg
IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgCTB4MDAxMWY5ZDQgS0pTOjpWYXJEZWNsTGlzdE5v
ZGU6OmV2YWx1YXRlKEtKUzo6RXhlY1N0YXRlKikgKyA4NAoxNSAgY29tLmFwcGxlLkphdmFTY3Jp
cHRDb3JlICAJMHgwMDEyMjc2OCBLSlM6OlZhclN0YXRlbWVudE5vZGU6OmV4ZWN1dGUoS0pTOjpF
eGVjU3RhdGUqKSArIDEwNAoxNiAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDEyMmU0
MCBLSlM6OlNvdXJjZUVsZW1lbnRzTm9kZTo6ZXhlY3V0ZShLSlM6OkV4ZWNTdGF0ZSopICsgMTg4
CjE3ICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgIAkweDAwMTIyNmU4IEtKUzo6QmxvY2tOb2Rl
OjpleGVjdXRlKEtKUzo6RXhlY1N0YXRlKikgKyAxMzIKMTggIGNvbS5hcHBsZS5KYXZhU2NyaXB0
Q29yZSAgCTB4MDAxMTIwNzQgS0pTOjpEZWNsYXJlZEZ1bmN0aW9uSW1wOjpleGVjdXRlKEtKUzo6
RXhlY1N0YXRlKikgKyA1NgoxOSAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDExMjJi
NCBLSlM6OkZ1bmN0aW9uSW1wOjpjYWxsQXNGdW5jdGlvbihLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6
SlNPYmplY3QqLCBLSlM6Okxpc3QgY29uc3QmKSArIDQ0NAoyMCAgY29tLmFwcGxlLkphdmFTY3Jp
cHRDb3JlICAJMHgwMDEyYmJkMCBLSlM6OkpTT2JqZWN0OjpjYWxsKEtKUzo6RXhlY1N0YXRlKiwg
S0pTOjpKU09iamVjdCosIEtKUzo6TGlzdCBjb25zdCYpICsgOTYKMjEgIGNvbS5hcHBsZS5KYXZh
U2NyaXB0Q29yZSAgCTB4MDAxMjViNzQgS0pTOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjpldmFsdWF0
ZShLSlM6OkV4ZWNTdGF0ZSopICsgNDY0CjIyICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgIAkw
eDAwMTI2NjU0IEtKUzo6QXNzaWduRG90Tm9kZTo6ZXZhbHVhdGUoS0pTOjpFeGVjU3RhdGUqKSAr
IDE0NAoyMyAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDEyMjU1OCBLSlM6OkV4cHJT
dGF0ZW1lbnROb2RlOjpleGVjdXRlKEtKUzo6RXhlY1N0YXRlKikgKyAxMDQKMjQgIGNvbS5hcHBs
ZS5KYXZhU2NyaXB0Q29yZSAgCTB4MDAxMjJlZTggS0pTOjpTb3VyY2VFbGVtZW50c05vZGU6OmV4
ZWN1dGUoS0pTOjpFeGVjU3RhdGUqKSArIDM1NgoyNSAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3Jl
ICAJMHgwMDEyMjZlOCBLSlM6OkJsb2NrTm9kZTo6ZXhlY3V0ZShLSlM6OkV4ZWNTdGF0ZSopICsg
MTMyCjI2ICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgIAkweDAwMTEyMDc0IEtKUzo6RGVjbGFy
ZWRGdW5jdGlvbkltcDo6ZXhlY3V0ZShLSlM6OkV4ZWNTdGF0ZSopICsgNTYKMjcgIGNvbS5hcHBs
ZS5KYXZhU2NyaXB0Q29yZSAgCTB4MDAxMTIyYjQgS0pTOjpGdW5jdGlvbkltcDo6Y2FsbEFzRnVu
Y3Rpb24oS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgS0pTOjpMaXN0IGNvbnN0Jikg
KyA0NDQKMjggIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgCTB4MDAxMmJiZDAgS0pTOjpKU09i
amVjdDo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSosIEtKUzo6SlNPYmplY3QqLCBLSlM6Okxpc3QgY29u
c3QmKSArIDk2CjI5ICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgIAkweDAwMTI1Yjc0IEtKUzo6
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZXZhbHVhdGUoS0pTOjpFeGVjU3RhdGUqKSArIDQ2NAozMCAg
Y29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDEyMjU1OCBLSlM6OkV4cHJTdGF0ZW1lbnRO
b2RlOjpleGVjdXRlKEtKUzo6RXhlY1N0YXRlKikgKyAxMDQKMzEgIGNvbS5hcHBsZS5KYXZhU2Ny
aXB0Q29yZSAgCTB4MDAxMjJlZTggS0pTOjpTb3VyY2VFbGVtZW50c05vZGU6OmV4ZWN1dGUoS0pT
OjpFeGVjU3RhdGUqKSArIDM1NgozMiAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDEy
MjZlOCBLSlM6OkJsb2NrTm9kZTo6ZXhlY3V0ZShLSlM6OkV4ZWNTdGF0ZSopICsgMTMyCjMzICBj
b20uYXBwbGUuSmF2YVNjcmlwdENvcmUgIAkweDAwMTIyNGQ4IEtKUzo6SWZOb2RlOjpleGVjdXRl
KEtKUzo6RXhlY1N0YXRlKikgKyAzNTIKMzQgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgCTB4
MDAxMjJlZTggS0pTOjpTb3VyY2VFbGVtZW50c05vZGU6OmV4ZWN1dGUoS0pTOjpFeGVjU3RhdGUq
KSArIDM1NgozNSAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDEyMjZlOCBLSlM6OkJs
b2NrTm9kZTo6ZXhlY3V0ZShLSlM6OkV4ZWNTdGF0ZSopICsgMTMyCjM2ICBjb20uYXBwbGUuSmF2
YVNjcmlwdENvcmUgIAkweDAwMTEyMDc0IEtKUzo6RGVjbGFyZWRGdW5jdGlvbkltcDo6ZXhlY3V0
ZShLSlM6OkV4ZWNTdGF0ZSopICsgNTYKMzcgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgCTB4
MDAxMTIyYjQgS0pTOjpGdW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUq
LCBLSlM6OkpTT2JqZWN0KiwgS0pTOjpMaXN0IGNvbnN0JikgKyA0NDQKMzggIGNvbS5hcHBsZS5K
YXZhU2NyaXB0Q29yZSAgCTB4MDAxMmJiZDAgS0pTOjpKU09iamVjdDo6Y2FsbChLSlM6OkV4ZWNT
dGF0ZSosIEtKUzo6SlNPYmplY3QqLCBLSlM6Okxpc3QgY29uc3QmKSArIDk2CjM5ICBjb20uYXBw
bGUuSmF2YVNjcmlwdENvcmUgIAkweDAwMTI1Yjc0IEtKUzo6RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZXZhbHVhdGUoS0pTOjpFeGVjU3RhdGUqKSArIDQ2NAo0MCAgY29tLmFwcGxlLkphdmFTY3JpcHRD
b3JlICAJMHgwMDEyMjU1OCBLSlM6OkV4cHJTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEtKUzo6RXhl
Y1N0YXRlKikgKyAxMDQKNDEgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgCTB4MDAxMjJlZTgg
S0pTOjpTb3VyY2VFbGVtZW50c05vZGU6OmV4ZWN1dGUoS0pTOjpFeGVjU3RhdGUqKSArIDM1Ngo0
MiAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAJMHgwMDEyMjZlOCBLSlM6OkJsb2NrTm9kZTo6
ZXhlY3V0ZShLSlM6OkV4ZWNTdGF0ZSopICsgMTMyCjQzICBjb20uYXBwbGUuSmF2YVNjcmlwdENv
cmUgIAkweDAwMTEyMDc0IEtKUzo6RGVjbGFyZWRGdW5jdGlvbkltcDo6ZXhlY3V0ZShLSlM6OkV4
ZWNTdGF0ZSopICsgNTYKNDQgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgCTB4MDAxMTIyYjQg
S0pTOjpGdW5jdGlvbkltcDo6Y2FsbEFzRnVuY3Rpb24oS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpT
T2JqZWN0KiwgS0pTOjpMaXN0IGNvbnN0JikgKyA0NDQKNDUgIGNvbS5hcHBsZS5KYXZhU2NyaXB0
Q29yZSAgCTB4MDAxMmJiZDAgS0pTOjpKU09iamVjdDo6Y2FsbChLSlM6OkV4ZWNTdGF0ZSosIEtK
Uzo6SlNPYmplY3QqLCBLSlM6Okxpc3QgY29uc3QmKSArIDk2CjQ2ICBjb20uYXBwbGUuV2ViQ29y
ZSAgICAgICAgIAkweDAxMDZkMjY0IEtKUzo6SlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KFdlYkNvcmU6OkV2ZW50SW1wbCosIGJvb2wpICsgNDQ0CjQ3ICBjb20uYXBwbGUuV2Vi
Q29yZSAgICAgICAgIAkweDAxMWY0M2UwIFdlYkNvcmU6Ok5vZGVJbXBsOjpoYW5kbGVMb2NhbEV2
ZW50cyhXZWJDb3JlOjpFdmVudEltcGwqLCBib29sKSArIDIwMAo0OCAgY29tLmFwcGxlLldlYkNv
cmUgICAgICAgICAJMHgwMTFmNDdmMCBXZWJDb3JlOjpOb2RlSW1wbDo6ZGlzcGF0Y2hHZW5lcmlj
RXZlbnQoV2ViQ29yZTo6RXZlbnRJbXBsKiwgaW50JikgKyA0MjAKNDkgIGNvbS5hcHBsZS5XZWJD
b3JlICAgICAgICAgCTB4MDExZjRjODAgV2ViQ29yZTo6Tm9kZUltcGw6OmRpc3BhdGNoRXZlbnQo
V2ViQ29yZTo6RXZlbnRJbXBsKiwgaW50JiwgYm9vbCkgKyAxMjgKNTAgIGNvbS5hcHBsZS5XZWJD
b3JlICAgICAgICAgCTB4MDExZjUyMjggV2ViQ29yZTo6Tm9kZUltcGw6OmRpc3BhdGNoTW91c2VF
dmVudChXZWJDb3JlOjpBdG9taWNTdHJpbmcgY29uc3QmLCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50LCBib29sLCBib29sLCBib29sLCBib29sKSArIDI5Ngo1MSAgY29tLmFwcGxlLldlYkNv
cmUgICAgICAgICAJMHgwMTFmNTVmMCBXZWJDb3JlOjpOb2RlSW1wbDo6ZGlzcGF0Y2hNb3VzZUV2
ZW50KFFNb3VzZUV2ZW50KiwgV2ViQ29yZTo6QXRvbWljU3RyaW5nIGNvbnN0JiwgaW50KSArIDM4
NAo1MiAgY29tLmFwcGxlLldlYkNvcmUgICAgICAgICAJMHgwMTFlNGU3OCBLSFRNTFZpZXc6OmRp
c3BhdGNoTW91c2VFdmVudChXZWJDb3JlOjpBdG9taWNTdHJpbmcgY29uc3QmLCBXZWJDb3JlOjpO
b2RlSW1wbCosIGJvb2wsIGludCwgUU1vdXNlRXZlbnQqLCBib29sLCBpbnQpICsgNzA4CjUzICBj
b20uYXBwbGUuV2ViQ29yZSAgICAgICAgIAkweDAxMWU1YWYwIEtIVE1MVmlldzo6dmlld3BvcnRN
b3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqKSArIDQ5Mgo1NCAgY29tLmFwcGxlLldlYkNvcmUg
ICAgICAgICAJMHgwMTFkZTVhOCBNYWNGcmFtZTo6bW91c2VEb3duKE5TRXZlbnQqKSArIDU0NAo1
NSAgY29tLmFwcGxlLldlYktpdCAgICAgICAgICAJMHgwMDM0MDMwMCAtW1dlYkhUTUxWaWV3IG1v
dXNlRG93bjpdICsgMjcyCjU2ICBjb20uYXBwbGUuQXBwS2l0ICAgICAgICAgIAkweDkzNmU3ZWIw
IC1bTlNXaW5kb3cgc2VuZEV2ZW50Ol0gKyA0NjE2CjU3ICBjb20uYXBwbGUuU2FmYXJpICAgICAg
ICAgIAkweDAwMDIyMTYwIDB4MTAwMCArIDEzNTUyMAo1OCAgY29tLmFwcGxlLkFwcEtpdCAgICAg
ICAgICAJMHg5MzY5MGVmNCAtW05TQXBwbGljYXRpb24gc2VuZEV2ZW50Ol0gKyA0MTcyCjU5ICBj
b20uYXBwbGUuU2FmYXJpICAgICAgICAgIAkweDAwMDIxYzY0IDB4MTAwMCArIDEzNDI0NAo2MCAg
Y29tLmFwcGxlLkFwcEtpdCAgICAgICAgICAJMHg5MzY4ODMzMCAtW05TQXBwbGljYXRpb24gcnVu
XSArIDUwOAo2MSAgY29tLmFwcGxlLkFwcEtpdCAgICAgICAgICAJMHg5Mzc3OGU2OCBOU0FwcGxp
Y2F0aW9uTWFpbiArIDQ1Mgo2MiAgY29tLmFwcGxlLlNhZmFyaSAgICAgICAgICAJMHgwMDA1Y2Zk
YyAweDEwMDAgKyAzNzY3OTYKNjMgIGNvbS5hcHBsZS5TYWZhcmkgICAgICAgICAgCTB4MDAwNWNl
ODAgMHgxMDAwICsgMzc2NDQ4CgpUaHJlYWQgMToKMCAgIGxpYlN5c3RlbS5CLmR5bGliICAgICAg
ICAgCTB4OTAwMGIyMDggbWFjaF9tc2dfdHJhcCArIDgKMSAgIGxpYlN5c3RlbS5CLmR5bGliICAg
ICAgICAgCTB4OTAwMGIxNWMgbWFjaF9tc2cgKyA2MAoyICAgY29tLnVuc2FuaXR5LmFwZSAgICAg
ICAgICAJMHhjMDAwMmFmYyBfX2FwZV9pbnRlcm5hbCArIDMzMDAgKGljcGx1c3BsdXMuYzoyOCkK
MyAgIGNvbS51bnNhbml0eS5hcGUgICAgICAgICAgCTB4YzAwMDE5MTAgX19hcGVfYWdlbnQgKyA2
NCAoaWNwbHVzcGx1cy5jOjI4KQo0ICAgbGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAJMHg5MDAy
YjIwMCBfcHRocmVhZF9ib2R5ICsgOTYKClRocmVhZCAyOgowICAgbGliU3lzdGVtLkIuZHlsaWIg
ICAgICAgICAJMHg5MDAwYjIwOCBtYWNoX21zZ190cmFwICsgOAoxICAgbGliU3lzdGVtLkIuZHls
aWIgICAgICAgICAJMHg5MDAwYjE1YyBtYWNoX21zZyArIDYwCjIgICBjb20uYXBwbGUuQ29yZUZv
dW5kYXRpb24gIAkweDkwNzVkMTE0IF9fQ0ZSdW5Mb29wUnVuICsgODMyCjMgICBjb20uYXBwbGUu
Q29yZUZvdW5kYXRpb24gIAkweDkwNzVjYTE4IENGUnVuTG9vcFJ1blNwZWNpZmljICsgMjY4CjQg
ICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgIAkweDkyOGY1NjY0IC1bTlNSdW5Mb29wIHJ1bk1v
ZGU6YmVmb3JlRGF0ZTpdICsgMTcyCjUgICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgIAkweDky
OGY1NTljIC1bTlNSdW5Mb29wIHJ1bl0gKyA3Ngo2ICAgY29tLmFwcGxlLldlYktpdCAgICAgICAg
ICAJMHgwMDM2NGI3YyArW1dlYkZpbGVEYXRhYmFzZSBfc3luY0xvb3A6XSArIDE3Mgo3ICAgY29t
LmFwcGxlLkZvdW5kYXRpb24gICAgICAJMHg5MjhlNjZkNCBmb3JrVGhyZWFkRm9yRnVuY3Rpb24g
KyAxMDgKOCAgIGxpYlN5c3RlbS5CLmR5bGliICAgICAgICAgCTB4OTAwMmIyMDAgX3B0aHJlYWRf
Ym9keSArIDk2CgpUaHJlYWQgMzoKMCAgIGxpYlN5c3RlbS5CLmR5bGliICAgICAgICAgCTB4OTAw
MWYyMGMgc2VsZWN0ICsgMTIKMSAgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlvbiAgCTB4OTA3NmY5
YTggX19DRlNvY2tldE1hbmFnZXIgKyA0NzIKMiAgIGxpYlN5c3RlbS5CLmR5bGliICAgICAgICAg
CTB4OTAwMmIyMDAgX3B0aHJlYWRfYm9keSArIDk2CgpUaHJlYWQgNDoKMCAgIGxpYlN5c3RlbS5C
LmR5bGliICAgICAgICAgCTB4OTAwMGIyMDggbWFjaF9tc2dfdHJhcCArIDgKMSAgIGxpYlN5c3Rl
bS5CLmR5bGliICAgICAgICAgCTB4OTAwMGIxNWMgbWFjaF9tc2cgKyA2MAoyICAgY29tLmFwcGxl
LkNvcmVGb3VuZGF0aW9uICAJMHg5MDc1ZDExNCBfX0NGUnVuTG9vcFJ1biArIDgzMgozICAgY29t
LmFwcGxlLkNvcmVGb3VuZGF0aW9uICAJMHg5MDc1Y2ExOCBDRlJ1bkxvb3BSdW5TcGVjaWZpYyAr
IDI2OAo0ICAgY29tLmFwcGxlLmF1ZGlvLkNvcmVBdWRpbyAJMHg5MTQwMzQzNCBIQUxSdW5Mb29w
OjpPd25UaHJlYWQodm9pZCopICsgMjY0CjUgICBjb20uYXBwbGUuYXVkaW8uQ29yZUF1ZGlvIAkw
eDkxNDAzMWQ0IENBUFRocmVhZDo6RW50cnkoQ0FQVGhyZWFkKikgKyA5Ngo2ICAgbGliU3lzdGVt
LkIuZHlsaWIgICAgICAgICAJMHg5MDAyYjIwMCBfcHRocmVhZF9ib2R5ICsgOTYKClRocmVhZCA1
OgowICAgbGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAJMHg5MDAwYjIwOCBtYWNoX21zZ190cmFw
ICsgOAoxICAgbGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAJMHg5MDAwYjE1YyBtYWNoX21zZyAr
IDYwCjIgICBjb20uYXBwbGUuQ29yZUZvdW5kYXRpb24gIAkweDkwNzVkMTE0IF9fQ0ZSdW5Mb29w
UnVuICsgODMyCjMgICBjb20uYXBwbGUuQ29yZUZvdW5kYXRpb24gIAkweDkwNzVjYTE4IENGUnVu
TG9vcFJ1blNwZWNpZmljICsgMjY4CjQgICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgIAkweDky
OTBkYjljICtbTlNVUkxDb25uZWN0aW9uKE5TVVJMQ29ubmVjdGlvbkludGVybmFsKSBfcmVzb3Vy
Y2VMb2FkTG9vcDpdICsgMjY0CjUgICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgIAkweDkyOGU2
NmQ0IGZvcmtUaHJlYWRGb3JGdW5jdGlvbiArIDEwOAo2ICAgbGliU3lzdGVtLkIuZHlsaWIgICAg
ICAgICAJMHg5MDAyYjIwMCBfcHRocmVhZF9ib2R5ICsgOTYKClRocmVhZCA2OgowICAgbGliU3lz
dGVtLkIuZHlsaWIgICAgICAgICAJMHg5MDAwYjIwOCBtYWNoX21zZ190cmFwICsgOAoxICAgbGli
U3lzdGVtLkIuZHlsaWIgICAgICAgICAJMHg5MDAwYjE1YyBtYWNoX21zZyArIDYwCjIgICBjb20u
YXBwbGUuQ29yZUZvdW5kYXRpb24gIAkweDkwNzVkMTE0IF9fQ0ZSdW5Mb29wUnVuICsgODMyCjMg
ICBjb20uYXBwbGUuQ29yZUZvdW5kYXRpb24gIAkweDkwNzVjYTE4IENGUnVuTG9vcFJ1blNwZWNp
ZmljICsgMjY4CjQgICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgIAkweDkyOTBlY2RjICtbTlNV
UkxDYWNoZSBfZGlza0NhY2hlU3luY0xvb3A6XSArIDE1Mgo1ICAgY29tLmFwcGxlLkZvdW5kYXRp
b24gICAgICAJMHg5MjhlNjZkNCBmb3JrVGhyZWFkRm9yRnVuY3Rpb24gKyAxMDgKNiAgIGxpYlN5
c3RlbS5CLmR5bGliICAgICAgICAgCTB4OTAwMmIyMDAgX3B0aHJlYWRfYm9keSArIDk2CgpUaHJl
YWQgNzoKMCAgIGxpYlN5c3RlbS5CLmR5bGliICAgICAgICAgCTB4OTAwMmI4YTggc2VtYXBob3Jl
X3dhaXRfc2lnbmFsX3RyYXAgKyA4CjEgICBsaWJTeXN0ZW0uQi5keWxpYiAgICAgICAgIAkweDkw
MDMwMDFjIHB0aHJlYWRfY29uZF93YWl0ICsgNDg4CjIgICBjb20uYXBwbGUuRm91bmRhdGlvbiAg
ICAgIAkweDkyOGVkODQwIC1bTlNDb25kaXRpb25Mb2NrIGxvY2tXaGVuQ29uZGl0aW9uOl0gKyA2
OAozICAgY29tLmFwcGxlLlN5bmRpY2F0aW9uICAgICAJMHg5OWM0MjUwYyAtW0FzeW5jREIgX3J1
bjpdICsgMTkyCjQgICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgIAkweDkyOGU2NmQ0IGZvcmtU
aHJlYWRGb3JGdW5jdGlvbiArIDEwOAo1ICAgbGliU3lzdGVtLkIuZHlsaWIgICAgICAgICAJMHg5
MDAyYjIwMCBfcHRocmVhZF9ib2R5ICsgOTYKClRocmVhZCAwIGNyYXNoZWQgd2l0aCBQUEMgVGhy
ZWFkIFN0YXRlIDY0OgogIHNycjA6IDB4MDAwMDAwMDAwMDAwMDAwMCBzcnIxOiAweDEwMDAwMDAw
NDIwMGYwMzAgICAgICAgICAgICAgICAgICAgICAgICB2cnNhdmU6IDB4MDAwMDAwMDAwMDAwMDAw
MAogICAgY3I6IDB4NDQwMDI0MjIgICAgICAgICAgeGVyOiAweDAwMDAwMDAwMDAwMDAwMDAgICBs
cjogMHgwMDAwMDAwMDAxMDk4YjI0ICBjdHI6IDB4MDAwMDAwMDAwMDAwMDAwMAogICAgcjA6IDB4
MDAwMDAwMDAwMDAwMDAwMCAgIHIxOiAweDAwMDAwMDAwYmZmZmQzODAgICByMjogMHgwMDAwMDAw
MDA1ZGNiNzUwICAgcjM6IDB4MDAwMDAwMDAwNWRjYjdiOAogICAgcjQ6IDB4MDAwMDAwMDAwMDYz
MzdiOCAgIHI1OiAweDAwMDAwMDAwMDAwMDAwMDAgICByNjogMHgwMDAwMDAwMDAwMDAwMDAwICAg
cjc6IDB4ZmZmZmZmZmVjNjZiNGM1YgogICAgcjg6IDB4MDAwMDAwMDA5MTNiMDA5MCAgIHI5OiAw
eDAwMDAwMDAwMDAwMDAwMTAgIHIxMDogMHgwMDAwMDAwMDAwMTVkODY4ICByMTE6IDB4MDAwMDAw
MDAyNDAwMjQ0OAogICByMTI6IDB4MDAwMDAwMDAwMDAwMDAwMCAgcjEzOiAweDAwMDAwMDAwYTM2
YjZjYTggIHIxNDogMHgwMDAwMDAwMDAwMDAwMTAwICByMTU6IDB4MDAwMDAwMDAwMDAwMDAwMAog
ICByMTY6IDB4MDAwMDAwMDBhMzZiNmNhOCAgcjE3OiAweDAwMDAwMDAwYTM2YzZjYTggIHIxODog
MHgwMDAwMDAwMGEzNmI2Y2E4ICByMTk6IDB4MDAwMDAwMDAwMDAwMDAwMAogICByMjA6IDB4MDAw
MDAwMDBiZmZmZTc5NCAgcjIxOiAweDAwMDAwMDAwMDAwMDAwMDAgIHIyMjogMHgwMDAwMDAwMDA1
YjYxMDRjICByMjM6IDB4MDAwMDAwMDBiZmZmZGIzYwogICByMjQ6IDB4MDAwMDAwMDAwMDE3YzAw
YyAgcjI1OiAweDAwMDAwMDAwMDViZTJlMTAgIHIyNjogMHgwMDAwMDAwMDA1YjQyMGQ4ICByMjc6
IDB4MDAwMDAwMDBiZmZmZDcxOAogICByMjg6IDB4MDAwMDAwMDAwMDAwMDAwMSAgcjI5OiAweDAw
MDAwMDAwMDA2MzM3YjggIHIzMDogMHgwMDAwMDAwMDA1ZGNiN2I4ICByMzE6IDB4MDAwMDAwMDAw
MTA5OGE3Ywo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5866</attachid>
            <date>2006-01-23 02:48:57 -0800</date>
            <delta_ts>2006-01-23 07:32:41 -0800</delta_ts>
            <desc>use PassRefPtr for cloneNode -- made the bug go away</desc>
            <filename>PassRefPatch.txt</filename>
            <type>text/plain</type>
            <size>112485</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2t4bWxjb3JlL1Bhc3NSZWZQdHIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9reG1sY29yZS9QYXNzUmVmUHRyLmgJKHJldmlzaW9uIDEyMzA5KQor
KysgSmF2YVNjcmlwdENvcmUva3htbGNvcmUvUGFzc1JlZlB0ci5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NCw3ICs3NCw3IEBACiAgICAgCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRlbXBsYXRl
IDx0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1JlZlB0cjxUPiYgUGFzc1JlZlB0cjxUPjo6b3BlcmF0
b3I9KGNvbnN0IFJlZlB0cjxVPiYgbykgCiAgICAgewotICAgICAgICBUKiBvcHRyID0gby5tX3B0
cjsKKyAgICAgICAgVCogb3B0ciA9IG8uZ2V0KCk7CiAgICAgICAgIGlmIChvcHRyKQogICAgICAg
ICAgICAgb3B0ci0+cmVmKCk7CiAgICAgICAgIFQqIHB0ciA9IG1fcHRyOwpJbmRleDogSmF2YVNj
cmlwdENvcmUva3htbGNvcmUvUmVmUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a3htbGNvcmUvUmVmUHRyLmgJKHJldmlzaW9uIDEyMzA5KQorKysgSmF2YVNjcmlwdENvcmUva3ht
bGNvcmUvUmVmUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAKIAogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBSZWZQdHI8VD4mIFJlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0
IFJlZlB0cjxUPiYgbykKICAgICB7Ci0gICAgICAgIFQqIG9wdHIgPSBvLm1fcHRyOworICAgICAg
ICBUKiBvcHRyID0gby5nZXQoKTsKICAgICAgICAgaWYgKG9wdHIpCiAgICAgICAgICAgICBvcHRy
LT5yZWYoKTsKICAgICAgICAgVCogcHRyID0gbV9wdHI7CkBAIC04Niw3ICs4Niw3IEBACiAgICAg
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBSZWZQdHI8
VD4mIFJlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFJlZlB0cjxVPiYgbykKICAgICB7Ci0gICAg
ICAgIFQgKm9wdHIgPSBvLm1fcHRyOworICAgICAgICBUKiBvcHRyID0gby5nZXQoKTsKICAgICAg
ICAgaWYgKG9wdHIpCiAgICAgICAgICAgICBvcHRyLT5yZWYoKTsKICAgICAgICAgVCogcHRyID0g
bV9wdHI7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjMxMCkKKysrIEphdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDA2LTAxLTIzICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAtIGNoYW5nZSBuZWVkZWQgZm9yIGZpeCB0byBodHRwOi8v
YnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTcKKyAgICAgICAgICBS
RUdSRVNTSU9OOiBDcmFzaCBpbiBjbG9uZUNoaWxkTm9kZXMgd2hlbiBjbGlja2luZyBlbGVtZW50
CisKKyAgICAgICAgKiBreG1sY29yZS9QYXNzUmVmUHRyLmg6IEZpeCBhc3NpZ25tZW50IG9wZXJh
dG9yIGZyb20gUmVmUHRyIG9mIGEgZGlmZmVyZW50CisgICAgICAgIHR5cGUgYnkgY2FsbGluZyBn
ZXQoKSBpbnN0ZWFkIG9mIGdvaW5nIGRpcmVjdGx5IGF0IG1fcHRyLgorICAgICAgICAqIGt4bWxj
b3JlL1JlZlB0ci5oOiBEaXR0by4KKworICAgICAgICAtIG90aGVyIGNoYW5nZXMKKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFhjb2RlIGRlY2lk
ZWQgdG8gY2hhbmdlIHRoaXMgZmlsZS4KKyAgICAgICAgSXQncyBqdXN0IGEgcmVzb3J0ZWQgbGlz
dCBvZiBrZXlzIGluIGEgZGljdGlvbmFyeS4KKworICAgICAgICAqIGtqcy9mcGNvbnN0LmNwcDog
V3JhcCB0aGlzIGZpbGUgaW4gI2lmIF9fQVBQTEVfXyBzaW5jZSB0aGUgYWx0ZXJuYXRlIHZlcnNp
b24KKyAgICAgICAgaW4gaW50ZXJuYWwuY3BwIGlzIGluICNpZiAhX19BUFBMRV9fLiBUaGlzIGZp
bGUgaXMgdG8gZ2l2ZSB1cyB0aGUgIm5vIGluaXQKKyAgICAgICAgcm91dGluZSIgcHJvcGVydHkg
d2Ugd2FudCB0byBoYXZlIG9uIE9TIFguCisKIDIwMDYtMDEtMjIgIE1hY2llaiBTdGFjaG93aWFr
ICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9mcGNvbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvZnBjb25zdC5jcHAJKHJldmlzaW9uIDEyMzA5KQorKysgSmF2YVNjcmlwdENvcmUva2pz
L2ZwY29uc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIw
LDYgKzIwLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCituYW1lc3BhY2UgS0pTIHsKKwog
Ly8gVGhpcyBmaWxlIGV4aXN0cyBiZWNhdXNlIEphdmFTY3JpcHRDb3JlIG5lZWRzIHRvIGRlZmlu
ZSB0aGUgTmFOIGFuZCBJbmYgZ2xvYmFscyBpbiBhIHdheQogLy8gdGhhdCBkb2VzIG5vdCB1c2Ug
YSBzdGF0aWMgaW5pdGlhbGl6ZXIgc28gd2UgZG9uJ3QgaGF2ZSBhIGZyYW1ld29yayBpbml0aWFs
aXphdGlvbiByb3V0aW5lLgogCkBAIC0yOSw3ICszMSw3IEBACiAvLyBjaGFyYWN0ZXJzIGRvbid0
IG5lY2Vzc2FyaWx5IG5lZWQgdGhlIHNhbWUgYWxpZ25tZW50IGRvdWJsZXMgZG8sIGJ1dCBmb3Ig
bm93IGl0IHNlZW1zIHRvIHdvcmsuCiAvLyBJdCB3b3VsZCBiZSBnb29kIHRvIGZpZ3VyZSBvdXQg
YSAxMDAlIGNsZWFuIHdheSB0aGF0IHN0aWxsIGF2b2lkcyBjb2RlIHRoYXQgcnVucyBhdCBpbml0
IHRpbWUuCiAKLW5hbWVzcGFjZSBLSlMgeworI2lmIF9fQVBQTEVfXwogCiAjaWZkZWYgV09SRFNf
QklHRU5ESUFOCiAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIE5hTltzaXplb2YoZG91Ymxl
KV0gPSB7IDB4N2YsIDB4ZjgsIDAsIDAsIDAsIDAsIDAsIDAgfTsKQEAgLTM5LDQgKzQxLDYgQEAK
ICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgSW5mW3NpemVvZihkb3VibGUpXSA9IHsgMCwg
MCwgMCwgMCwgMCwgMCwgMHhmMCwgMHg3ZiB9OwogI2VuZGlmCiAKLX07CisjZW5kaWYKKworfQpJ
bmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjMwOSkKKysrIEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTM4MCw3ICszODAsNyBAQAogCQk5MzNBMzQ5OTAzOEFFN0M2MDA4NjM1Q0UgLyogZ3JhbW1hci55
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnlhY2M7IHBhdGggPSBncmFt
bWFyLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJOTMzQTM0
OUEwMzhBRTdDNjAwODYzNUNFIC8qIGlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBpZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8q
IGlkZW50aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBpZGVudGlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB9OwotCQk5MzVGNjlGNjA4MjQ0RkVBMDAzRDFBNDUgLyogZGZ0YWJsZXMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0S25vd25G
aWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IHBhdGggPSBkZnRhYmxlczsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJOTM1RjY5RjYwODI0NEZFQTAw
M0QxQTQ1IC8qIGRmdGFibGVzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBkZnRhYmxlczsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJOTM2NEIyNzMwNDVCN0Q2QzAwQTlDQUMxIC8qIGZwY29uc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBmcGNvbnN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk5MzczNTI0RTAzOERBOEMy
MDA4NjM1Q0UgLyogY29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB9OwogCQk5Mzc0RDNBNzAzOEQ5RDc0MDA4NjM1Q0UgLyogc2NvcGVfY2hhaW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzY29wZV9j
aGFpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CkluZGV4OiBX
ZWJDb3JlL2todG1sL3htbC9Eb2N1bWVudFR5cGVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2todG1sL3htbC9Eb2N1bWVudFR5cGVJbXBsLmNwcAkocmV2aXNpb24gMTIzMDkpCisrKyBX
ZWJDb3JlL2todG1sL3htbC9Eb2N1bWVudFR5cGVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsNyBAQAogICAgIHJldHVybiBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU7CiB9CiAK
LU5vZGVJbXBsKiBEb2N1bWVudFR5cGVJbXBsOjpjbG9uZU5vZGUoYm9vbCAvKmRlZXAqLykKK1Bh
c3NSZWZQdHI8Tm9kZUltcGw+IERvY3VtZW50VHlwZUltcGw6OmNsb25lTm9kZShib29sIC8qZGVl
cCovKQogewogICAgIC8vIFRoZSBET00gTGV2ZWwgMiBzcGVjaWZpY2F0aW9uIHNheXMgY2xvbmlu
ZyBEb2N1bWVudFR5cGUgbm9kZXMgaXMgImltcGxlbWVudGF0aW9uIGRlcGVuZGVudCIgc28gZm9y
IG5vdyB3ZSBkbyBub3Qgc3VwcG9ydCBpdC4KICAgICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUv
a2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC94
bWwvZG9tX3RleHRpbXBsLmNwcAkocmV2aXNpb24gMTIzMDkpCisrKyBXZWJDb3JlL2todG1sL3ht
bC9kb21fdGV4dGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw4ICs3Miw4IEBACiAgICAg
RE9NU3RyaW5nSW1wbCAqb2xkU3RyID0gc3RyOwogICAgIHN0ciA9IF9kYXRhLmltcGwoKTsKICAg
ICBpZihzdHIpIHN0ci0+cmVmKCk7Ci0gICAgaWYgKG1fcmVuZGVyKQotICAgICAgKHN0YXRpY19j
YXN0PFJlbmRlclRleHQqPihtX3JlbmRlcikpLT5zZXRUZXh0KHN0cik7CisgICAgaWYgKHJlbmRl
cmVyKCkpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihyZW5kZXJlcigpKS0+c2V0
VGV4dChzdHIpOwogICAgIAogICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRTdHIpOwogICAg
IGlmKG9sZFN0cikgb2xkU3RyLT5kZXJlZigpOwpAQCAtMTEwLDggKzExMCw4IEBACiAgICAgc3Ry
ID0gc3RyLT5jb3B5KCk7CiAgICAgc3RyLT5yZWYoKTsKICAgICBzdHItPmFwcGVuZChhcmcuaW1w
bCgpKTsKLSAgICBpZiAobV9yZW5kZXIpCi0gICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+
KG1fcmVuZGVyKSktPnNldFRleHRXaXRoT2Zmc2V0KHN0ciwgb2xkU3RyLT5sLCAwKTsKKyAgICBp
ZiAocmVuZGVyZXIoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVy
KCkpLT5zZXRUZXh0V2l0aE9mZnNldChzdHIsIG9sZFN0ci0+bCwgMCk7CiAgICAgCiAgICAgZGlz
cGF0Y2hNb2RpZmllZEV2ZW50KG9sZFN0cik7CiAgICAgb2xkU3RyLT5kZXJlZigpOwpAQCAtMTI4
LDggKzEyOCw4IEBACiAgICAgc3RyID0gc3RyLT5jb3B5KCk7CiAgICAgc3RyLT5yZWYoKTsKICAg
ICBzdHItPmluc2VydChhcmcuaW1wbCgpLCBvZmZzZXQpOwotICAgIGlmIChtX3JlbmRlcikKLSAg
ICAgIChzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obV9yZW5kZXIpKS0+c2V0VGV4dFdpdGhPZmZz
ZXQoc3RyLCBvZmZzZXQsIDApOworICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICBzdGF0aWNf
Y2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNldFRleHRXaXRoT2Zmc2V0KHN0ciwgb2Zm
c2V0LCAwKTsKICAgICAKICAgICBkaXNwYXRjaE1vZGlmaWVkRXZlbnQob2xkU3RyKTsKICAgICBv
bGRTdHItPmRlcmVmKCk7CkBAIC0xNTAsOCArMTUwLDggQEAKICAgICBzdHIgPSBzdHItPmNvcHko
KTsKICAgICBzdHItPnJlZigpOwogICAgIHN0ci0+cmVtb3ZlKG9mZnNldCxjb3VudCk7Ci0gICAg
aWYgKG1fcmVuZGVyKQotICAgICAgKHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihtX3JlbmRlcikp
LT5zZXRUZXh0V2l0aE9mZnNldChzdHIsIG9mZnNldCwgY291bnQpOworICAgIGlmIChyZW5kZXJl
cigpKQorICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNldFRl
eHRXaXRoT2Zmc2V0KHN0ciwgb2Zmc2V0LCBjb3VudCk7CiAgICAgCiAgICAgZGlzcGF0Y2hNb2Rp
ZmllZEV2ZW50KG9sZFN0cik7CiAgICAgb2xkU3RyLT5kZXJlZigpOwpAQCAtMTc5LDggKzE3OSw4
IEBACiAgICAgc3RyLT5yZWYoKTsKICAgICBzdHItPnJlbW92ZShvZmZzZXQscmVhbENvdW50KTsK
ICAgICBzdHItPmluc2VydChhcmcuaW1wbCgpLCBvZmZzZXQpOwotICAgIGlmIChtX3JlbmRlcikK
LSAgICAgIChzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obV9yZW5kZXIpKS0+c2V0VGV4dFdpdGhP
ZmZzZXQoc3RyLCBvZmZzZXQsIGNvdW50KTsKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KHJlbmRlcmVyKCkpLT5zZXRUZXh0V2l0aE9mZnNldChz
dHIsIG9mZnNldCwgY291bnQpOwogICAgIAogICAgIGRpc3BhdGNoTW9kaWZpZWRFdmVudChvbGRT
dHIpOwogICAgIG9sZFN0ci0+ZGVyZWYoKTsKQEAgLTMyMCw3ICszMjAsNyBAQAogICAgIHJldHVy
biBOb2RlOjpDT01NRU5UX05PREU7CiB9CiAKLU5vZGVJbXBsICpDb21tZW50SW1wbDo6Y2xvbmVO
b2RlKGJvb2wgLypkZWVwKi8pCitQYXNzUmVmUHRyPE5vZGVJbXBsPiBDb21tZW50SW1wbDo6Y2xv
bmVOb2RlKGJvb2wgLypkZWVwKi8pCiB7CiAgICAgcmV0dXJuIGdldERvY3VtZW50KCktPmNyZWF0
ZUNvbW1lbnQoIHN0ciApOwogfQpAQCAtMzkwLDggKzM5MCw5IEBACiAgICAgaWYgKCBleGNlcHRp
b25jb2RlICkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV9yZW5kZXIpCi0gICAgICAg
IChzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obV9yZW5kZXIpKS0+c2V0VGV4dChzdHIpOworICAg
IGlmIChyZW5kZXJlcigpKQorICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVy
ZXIoKSktPnNldFRleHQoc3RyKTsKKwogICAgIHJldHVybiBuZXdUZXh0OwogfQogCkBAIC00MTAs
NyArNDExLDcgQEAKICAgICByZXR1cm4gTm9kZTo6VEVYVF9OT0RFOwogfQogCi1Ob2RlSW1wbCAq
VGV4dEltcGw6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4g
VGV4dEltcGw6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewogICAgIHJldHVybiBnZXREb2N1
bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShzdHIpOwogfQpAQCAtNDcxLDEwICs0NzIsMTAgQEAKIHZv
aWQgVGV4dEltcGw6OnJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSBjaGFuZ2UgKQogewogICAgIGlm
IChjaGFuZ2UgIT0gTm9DaGFuZ2UgJiYgcGFyZW50Tm9kZSgpKQotICAgICAgICBpZiAobV9yZW5k
ZXIpCi0gICAgICAgICAgICBtX3JlbmRlci0+c2V0U3R5bGUocGFyZW50Tm9kZSgpLT5yZW5kZXJl
cigpLT5zdHlsZSgpKTsKLSAgICBpZiAoY2hhbmdlZCgpICYmIG1fcmVuZGVyICYmIG1fcmVuZGVy
LT5pc1RleHQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG1fcmVuZGVyKS0+
c2V0VGV4dChzdHIpOworICAgICAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRl
cmVyKCktPnNldFN0eWxlKHBhcmVudE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7CisgICAg
aWYgKGNoYW5nZWQoKSAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVGV4dCgpKQorICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4ocmVuZGVyZXIoKSktPnNldFRleHQoc3RyKTsK
ICAgICBzZXRDaGFuZ2VkKGZhbHNlKTsKIH0KIApAQCAtNTQyLDcgKzU0Myw3IEBACiAgICAgcmV0
dXJuIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERTsKIH0KIAotTm9kZUltcGwgKkNEQVRBU2VjdGlv
bkltcGw6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4gQ0RB
VEFTZWN0aW9uSW1wbDo6Y2xvbmVOb2RlKGJvb2wgLypkZWVwKi8pCiB7CiAgICAgaW50IGlnbm9y
ZUV4Y2VwdGlvbiA9IDA7CiAgICAgcmV0dXJuIGdldERvY3VtZW50KCktPmNyZWF0ZUNEQVRBU2Vj
dGlvbihzdHIsIGlnbm9yZUV4Y2VwdGlvbik7CkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9Eb2N1
bWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL3htbC9Eb2N1bWVudEltcGwu
aAkocmV2aXNpb24gMTIzMDkpCisrKyBXZWJDb3JlL2todG1sL3htbC9Eb2N1bWVudEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMzU1LDkgKzM1NSw5IEBACiAgICAgYm9vbCBwcmVwYXJlTW91c2VF
dmVudChib29sIHJlYWRvbmx5LCBpbnQgeCwgaW50IHksIE1vdXNlRXZlbnQqIGV2KTsKICAgICBi
b29sIHByZXBhcmVNb3VzZUV2ZW50KGJvb2wgcmVhZG9ubHksIGJvb2wgYWN0aXZlLCBpbnQgeCwg
aW50IHksIE1vdXNlRXZlbnQgKmV2KTsKIAotICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQo
IE5vZGVJbXBsICpuZXdDaGlsZCApOwotICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2Vk
KCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSApOwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25l
Tm9kZSAoIGJvb2wgZGVlcCApOworICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9kZUlt
cGwqKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCh1bnNpZ25lZCBzaG9ydCBu
b2RlVHlwZSk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBjbG9uZU5vZGUoYm9v
bCBkZWVwKTsKIAogICAgIFN0eWxlU2hlZXRMaXN0SW1wbCogc3R5bGVTaGVldHMoKTsKIApJbmRl
eDogV2ViQ29yZS9raHRtbC94bWwvTm9kZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2to
dG1sL3htbC9Ob2RlSW1wbC5oCShyZXZpc2lvbiAxMjMwOSkKKysrIFdlYkNvcmUva2h0bWwveG1s
L05vZGVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDggKzg5LDcgQEAKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Tm9kZUltcGw+IGFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+IG5l
d0NoaWxkLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShFeGNlcHRp
b25Db2RlJik7CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxkTm9kZXMoKSBjb25zdDsKLSAgICAv
LyBGSVhNRTogQ2hhbmdlIHRvIHJldHVybiBQYXNzUmVmUHRyLgotICAgIHZpcnR1YWwgTm9kZUlt
cGwqIGNsb25lTm9kZShib29sIGRlZXApID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9k
ZUltcGw+IGNsb25lTm9kZShib29sIGRlZXApID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBwcmVmaXgoKSBjb25zdDsKQEAgLTMwMyw3ICszMDIsNyBAQAogICAgIHZpcnR1YWwgYm9vbCBp
c1JlYWRPbmx5KCk7CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQodW5zaWduZWQg
c2hvcnQgLyp0eXBlKi8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBj
aGlsZE5vZGVDb3VudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmNoaWxkTm9kZSh1
bnNpZ25lZCBpbmRleCk7CisgICAgdmlydHVhbCBOb2RlSW1wbCogY2hpbGROb2RlKHVuc2lnbmVk
IGluZGV4KTsKIAogICAgIC8qKgogICAgICAqIERvZXMgYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9m
IHRoZSB0cmVlIHRvIGZpbmQgdGhlIG5vZGUgbmV4dCBub2RlIGFmdGVyIHRoaXMgb25lLiBUaGlz
IHVzZXMgdGhlIHNhbWUgb3JkZXIgdGhhdApAQCAtMzM0LDEyICszMzMsMTIgQEAKICAgICBOb2Rl
SW1wbCogcHJldmlvdXNFZGl0YWJsZSgpIGNvbnN0OwogICAgIE5vZGVJbXBsKiBuZXh0RWRpdGFi
bGUoKSBjb25zdDsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcjsgfQorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmVyOyB9CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0UmVuZGVyZXIoKTsKICAgICBS
ZW5kZXJPYmplY3QqIHByZXZpb3VzUmVuZGVyZXIoKTsKLSAgICB2b2lkIHNldFJlbmRlcmVyKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9yZW5kZXIgPSByZW5kZXJlcjsgfQorICAgIHZvaWQg
c2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVy
ZXI7IH0KICAgICAKLSAgICB2b2lkIGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAm
X3ByZWZpeCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGlzQW5jZXN0
b3IoY29uc3QgTm9kZUltcGwqKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIHR3byBtZXRob2RzIGFy
ZSBtdXR1YWxseSBleGNsdXNpdmUuICBUaGUgZm9ybWVyIGlzIHVzZWQgdG8gZG8gc3RyaWN0IGVy
cm9yLWNoZWNraW5nCkBAIC00MTEsNyArNDEwLDcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBz
dGF0ZXMgVGhlIHN0cmluZ3MgcHJldmlvdXNseSByZXR1cm5lZCBieSBub2Rlcycgc3RhdGUgbWV0
aG9kcy4KICAgICAgKi8KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKFFTdHJpbmdMaXN0
ICZzdGF0ZUxpc3QpOworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU3RhdGUoUVN0cmluZ0xpc3Qm
IHN0YXRlTGlzdCk7CiAKICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIE5vdGlm
aWNhdGlvbiBvZiBkb2N1bWVudCBzdHVjdHVyZSBjaGFuZ2VzCkBAIC00NjUsMjEgKzQ2NCwyMSBA
QAogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpOwogICAgIHZvaWQg
bm90aWZ5TG9jYWxOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgCi0gICAgUmVmUHRy
PE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgRE9NU3RyaW5nJik7Ci0g
ICAgUmVmUHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBET01T
dHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nJiBsb2NhbE5hbWUpOworICAgIFBh
c3NSZWZQdHI8Tm9kZUxpc3RJbXBsPiBnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBET01TdHJp
bmcmKTsKKyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWVO
Uyhjb25zdCBET01TdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nJiBsb2NhbE5h
bWUpOwogCiBwcml2YXRlOiAvLyBtZW1iZXJzCiAgICAgRG9jUHRyPERvY3VtZW50SW1wbD4gZG9j
dW1lbnQ7CiAgICAgTm9kZUltcGwqIG1fcHJldmlvdXM7CiAgICAgTm9kZUltcGwqIG1fbmV4dDsK
KyAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CiBwcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyT2Jq
ZWN0KiBtX3JlbmRlcjsKICAgICBRUHRyTGlzdDxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4qIG1f
cmVnZExpc3RlbmVyczsKICAgICB0eXBlZGVmIEhhc2hTZXQ8Tm9kZUxpc3RJbXBsKiwgUG9pbnRl
ckhhc2g8Tm9kZUxpc3RJbXBsKj4gPiBOb2RlTGlzdFNldDsKICAgICBOb2RlTGlzdFNldCogbV9u
b2RlTGlzdHM7CiAKICAgICB1bnNpZ25lZCBzaG9ydCBtX3RhYkluZGV4IDogMTU7Ci0gICAgYm9v
bCBtX2hhc1RhYkluZGV4ICA6IDE7CisgICAgYm9vbCBtX2hhc1RhYkluZGV4IDogMTsKIAogICAg
IGJvb2wgbV9oYXNJZCA6IDE7CiAgICAgYm9vbCBtX2hhc0NsYXNzIDogMTsKSW5kZXg6IFdlYkNv
cmUva2h0bWwveG1sL05hbWVkTm9kZU1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2to
dG1sL3htbC9OYW1lZE5vZGVNYXBJbXBsLmgJKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29yZS9r
aHRtbC94bWwvTmFtZWROb2RlTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw0NSArMjIs
NDYgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLworCiAjaWZuZGVm
IERPTV9OYW1lZE5vZGVNYXBJbXBsX2gKICNkZWZpbmUgRE9NX05hbWVkTm9kZU1hcEltcGxfaAog
CiAjaW5jbHVkZSAiU2hhcmVkLmgiCi0jaW5jbHVkZSAia3htbGNvcmUvUmVmUHRyLmgiCiAjaW5j
bHVkZSAiZG9tX3N0cmluZy5oIgorI2luY2x1ZGUgPGt4bWxjb3JlL1Bhc3NSZWZQdHIuaD4KIAot
bmFtZXNwYWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5vZGVJbXBsOwog
Y2xhc3MgUXVhbGlmaWVkTmFtZTsKIAogLy8gR2VuZXJpYyBOYW1lZE5vZGVNYXAgaW50ZXJmYWNl
Ci0vLyBPdGhlciBjbGFzc2VzIGltcGxlbWVudCB0aGlzIGZvciBtb3JlIHNwZWNpZmljIHNpdHVh
dGlvbnMgZS5nLiBhdHRyaWJ1dGVzCi0vLyBvZiBhbiBlbGVtZW50CisvLyBPdGhlciBjbGFzc2Vz
IGltcGxlbWVudCB0aGlzIGZvciBtb3JlIHNwZWNpZmljIHNpdHVhdGlvbnMgZS5nLiBhdHRyaWJ1
dGVzIG9mIGFuIGVsZW1lbnQuCiBjbGFzcyBOYW1lZE5vZGVNYXBJbXBsIDogcHVibGljIFNoYXJl
ZDxOYW1lZE5vZGVNYXBJbXBsPgogewogcHVibGljOgogICAgIE5hbWVkTm9kZU1hcEltcGwoKSB7
IH0KICAgICB2aXJ0dWFsIH5OYW1lZE5vZGVNYXBJbXBsKCkgeyB9CiAKLSAgICBOb2RlSW1wbCAq
Z2V0TmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyAmbmFtZSkgY29uc3QgeyByZXR1cm4gZ2V0TmFt
ZWRJdGVtTlMoRE9NU3RyaW5nKCksIG5hbWUpOyB9Ci0gICAgUmVmUHRyPE5vZGVJbXBsPiByZW1v
dmVOYW1lZEl0ZW0oY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbikgeyByZXR1
cm4gcmVtb3ZlTmFtZWRJdGVtTlMoRE9NU3RyaW5nKCksIG5hbWUsIGV4Y2VwdGlvbik7IH0KKyAg
ICBOb2RlSW1wbCogZ2V0TmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyYgbmFtZSkgY29uc3QgeyBy
ZXR1cm4gZ2V0TmFtZWRJdGVtTlMoRE9NU3RyaW5nKCksIG5hbWUpOyB9CisgICAgUGFzc1JlZlB0
cjxOb2RlSW1wbD4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyYgbmFtZSwgaW50ICZl
eGNlcHRpb24pIHsgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbU5TKERPTVN0cmluZygpLCBuYW1lLCBl
eGNlcHRpb24pOyB9CiAKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpnZXROYW1lZEl0ZW1OUyhjb25z
dCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpIGNv
bnN0ID0gMDsKLSAgICBSZWZQdHI8Tm9kZUltcGw+IHNldE5hbWVkSXRlbU5TKE5vZGVJbXBsICph
cmcsIGludCAmZXhjZXB0aW9uKSB7IHJldHVybiBzZXROYW1lZEl0ZW0oYXJnLCBleGNlcHRpb24p
OyB9Ci0gICAgdmlydHVhbCBSZWZQdHI8Tm9kZUltcGw+IHJlbW92ZU5hbWVkSXRlbU5TKGNvbnN0
IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSwgaW50
ICZleGNlcHRpb24pID0gMDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsKiBnZXROYW1lZEl0ZW1OUyhj
b25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUp
IGNvbnN0ID0gMDsKKyAgICBQYXNzUmVmUHRyPE5vZGVJbXBsPiBzZXROYW1lZEl0ZW1OUyhOb2Rl
SW1wbCAqYXJnLCBpbnQgJmV4Y2VwdGlvbikgeyByZXR1cm4gc2V0TmFtZWRJdGVtKGFyZywgZXhj
ZXB0aW9uKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlSW1wbD4gcmVtb3ZlTmFtZWRJ
dGVtTlMoY29uc3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9j
YWxOYW1lLCBpbnQgJmV4Y2VwdGlvbikgPSAwOwogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRy
aWJ1dGVzIGZvciBOYW1lZE5vZGVNYXAKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpnZXROYW1lZEl0
ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IFJlZlB0cjxOb2RlSW1wbD4gcmVtb3ZlTmFtZWRJdGVtIChjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSwgaW50ICZleGNlcHRpb25jb2RlKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8Tm9k
ZUltcGw+IHNldE5hbWVkSXRlbSAoTm9kZUltcGwqIGFyZywgaW50ICZleGNlcHRpb25jb2RlKSA9
IDA7CisgICAgdmlydHVhbCBOb2RlSW1wbCogZ2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBs
PiByZW1vdmVOYW1lZEl0ZW0gKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBpbnQgJmV4
Y2VwdGlvbmNvZGUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUltcGw+IHNldE5h
bWVkSXRlbSAoTm9kZUltcGwqIGFyZywgaW50ICZleGNlcHRpb25jb2RlKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIE5vZGVJbXBsICppdGVtICggdW5zaWduZWQgaW5kZXggKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBOb2RlSW1wbCogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwogCiAgICAgLy8gT3RoZXIgbWV0aG9k
cyAobm90IHBhcnQgb2YgRE9NKQogICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5KCkgeyByZXR1
cm4gZmFsc2U7IH0KIH07CiAKLX07IC8vbmFtZXNwYWNlCit9IC8vbmFtZXNwYWNlCisKICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJKHJldmlzaW9uIDEyMzA5KQor
KysgV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Myw3ICsxNDMsNyBAQAogCiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZVZhbHVlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE5vZGVWYWx1ZSggY29uc3QgRE9NU3RyaW5nICYsIGlu
dCAmZXhjZXB0aW9uY29kZSApOwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJv
b2wgZGVlcCApOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlSW1wbD4gY2xvbmVOb2RlKGJv
b2wgZGVlcCk7CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAg
dmlydHVhbCBib29sIGlzQXR0cmlidXRlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAg
LTIwMSw5ICsyMDEsOSBAQAogCiAgICAgQXR0ckltcGwgKmdldEF0dHJpYnV0ZU5vZGUoY29uc3Qg
RE9NU3RyaW5nICZuYW1lKSB7IHJldHVybiBnZXRBdHRyaWJ1dGVOb2RlTlMoRE9NU3RyaW5nKCks
IG5hbWUpOyB9CiAgICAgQXR0ckltcGwgKmdldEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBET01TdHJp
bmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpOwotICAgIFJlZlB0
cjxBdHRySW1wbD4gc2V0QXR0cmlidXRlTm9kZShBdHRySW1wbCAqbmV3QXR0ciwgaW50ICZleGNl
cHRpb24pOwotICAgIFJlZlB0cjxBdHRySW1wbD4gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHJJbXBs
ICpuZXdBdHRyLCBpbnQgJmV4Y2VwdGlvbikgeyByZXR1cm4gc2V0QXR0cmlidXRlTm9kZShuZXdB
dHRyLCBleGNlcHRpb24pOyB9Ci0gICAgUmVmUHRyPEF0dHJJbXBsPiByZW1vdmVBdHRyaWJ1dGVO
b2RlKEF0dHJJbXBsICpvbGRBdHRyLCBpbnQgJmV4Y2VwdGlvbik7CisgICAgUGFzc1JlZlB0cjxB
dHRySW1wbD4gc2V0QXR0cmlidXRlTm9kZShBdHRySW1wbCosIGludCAmZXhjZXB0aW9uKTsKKyAg
ICBQYXNzUmVmUHRyPEF0dHJJbXBsPiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ckltcGwqIG5ld0F0
dHIsIGludCAmZXhjZXB0aW9uKSB7IHJldHVybiBzZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGV4
Y2VwdGlvbik7IH0KKyAgICBQYXNzUmVmUHRyPEF0dHJJbXBsPiByZW1vdmVBdHRyaWJ1dGVOb2Rl
KEF0dHJJbXBsKiwgaW50ICZleGNlcHRpb24pOwogICAgIAogICAgIHZpcnR1YWwgQ1NTU3R5bGVE
ZWNsYXJhdGlvbkltcGwgKnN0eWxlKCk7CiAKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgIAogICAg
IC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKICAgICB2aXJ0
dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1w
bCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBs
PiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwpAQCAtMzAw
LDEyICszMDAsMTIgQEAKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTmFt
ZWROb2RlTWFwCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqZ2V0TmFtZWRJdGVtTlMoY29uc3QgRE9N
U3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFJlZlB0cjxOb2RlSW1wbD4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgRE9N
U3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lLCBpbnQgJmV4
Y2VwdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiByZW1vdmVOYW1lZEl0
ZW1OUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2Nh
bE5hbWUsIGludCAmZXhjZXB0aW9uKTsKIAogICAgIHZpcnR1YWwgQXR0ckltcGwqIGdldE5hbWVk
SXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVm
UHRyPE5vZGVJbXBsPiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
aW50ICZleGNlcHRpb25jb2RlKTsKLSAgICB2aXJ0dWFsIFJlZlB0cjxOb2RlSW1wbD4gc2V0TmFt
ZWRJdGVtKE5vZGVJbXBsKiBhcmcsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPE5vZGVJbXBsPiByZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgaW50ICZleGNlcHRpb25jb2RlKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUlt
cGw+IHNldE5hbWVkSXRlbShOb2RlSW1wbCogYXJnLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwogCiAg
ICAgdmlydHVhbCBBdHRySW1wbCAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3Q7CiAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuOyB9CkluZGV4OiBXZWJDb3JlL2to
dG1sL3htbC9kb21feG1saW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC94bWwv
ZG9tX3htbGltcGwuY3BwCShyZXZpc2lvbiAxMjMwOSkKKysrIFdlYkNvcmUva2h0bWwveG1sL2Rv
bV94bWxpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQAogICAgIHJldHVy
biBOb2RlOjpFTlRJVFlfTk9ERTsKIH0KIAotTm9kZUltcGwgKkVudGl0eUltcGw6OmNsb25lTm9k
ZShib29sIC8qZGVlcCovKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4gRW50aXR5SW1wbDo6Y2xvbmVO
b2RlKGJvb2wgLypkZWVwKi8pCiB7CiAgICAgLy8gU3BlYyBzYXlzIGNsb25pbmcgRW50aXR5IG5v
ZGVzIGlzICJpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQiLiBXZSBkbyBub3Qgc3VwcG9ydCBpdC4K
ICAgICByZXR1cm4gMDsKQEAgLTEzOSwxMyArMTM5LDEzIEBACiAgICAgcmV0dXJuIE5vZGU6OkVO
VElUWV9SRUZFUkVOQ0VfTk9ERTsKIH0KIAotTm9kZUltcGwgKkVudGl0eVJlZmVyZW5jZUltcGw6
OmNsb25lTm9kZShib29sIGRlZXApCitQYXNzUmVmUHRyPE5vZGVJbXBsPiBFbnRpdHlSZWZlcmVu
Y2VJbXBsOjpjbG9uZU5vZGUoYm9vbCBkZWVwKQogewotICAgIEVudGl0eVJlZmVyZW5jZUltcGwq
IGNsb25lID0gbmV3IEVudGl0eVJlZmVyZW5jZUltcGwoZ2V0RG9jdW1lbnQoKSwgbV9lbnRpdHlO
YW1lLmdldCgpKTsKKyAgICBQYXNzUmVmUHRyPEVudGl0eVJlZmVyZW5jZUltcGw+IGNsb25lID0g
bmV3IEVudGl0eVJlZmVyZW5jZUltcGwoZ2V0RG9jdW1lbnQoKSwgbV9lbnRpdHlOYW1lLmdldCgp
KTsKICAgICAvLyAjIyMgbWFrZSBzdXJlIGNoaWxkcmVuIGFyZSByZWFkb25seQogICAgIC8vICMj
IyBzaW5jZSB3ZSBhcmUgYSByZWZlcmVuY2UsIHNob3VsZCB3ZSBjbG9uZSBjaGlsZHJlbiBhbnl3
YXkgKGV2ZW4gaWYgbm90IGRlZXA/KQogICAgIGlmIChkZWVwKQotICAgICAgICBjbG9uZUNoaWxk
Tm9kZXMoY2xvbmUpOworICAgICAgICBjbG9uZUNoaWxkTm9kZXMoY2xvbmUuZ2V0KCkpOwogICAg
IHJldHVybiBjbG9uZTsKIH0KIApAQCAtMTk2LDcgKzE5Niw3IEBACiAgICAgcmV0dXJuIE5vZGU6
Ok5PVEFUSU9OX05PREU7CiB9CiAKLU5vZGVJbXBsICpOb3RhdGlvbkltcGw6OmNsb25lTm9kZShi
b29sIC8qZGVlcCovKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4gTm90YXRpb25JbXBsOjpjbG9uZU5v
ZGUoYm9vbCAvKmRlZXAqLykKIHsKICAgICAvLyBTcGVjIHNheXMgY2xvbmluZyBOb3RhdGlvbiBu
b2RlcyBpcyAiaW1wbGVtZW50YXRpb24gZGVwZW5kZW50Ii4gV2UgZG8gbm90IHN1cHBvcnQgaXQu
CiAgICAgcmV0dXJuIDA7CkBAIC0yNjYsNyArMjY2LDcgQEAKICAgICBzZXREYXRhKG5vZGVWYWx1
ZSwgZXhjZXB0aW9uY29kZSk7CiB9CiAKLU5vZGVJbXBsICpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25J
bXBsOjpjbG9uZU5vZGUoYm9vbCAvKmRlZXAqLykKK1Bhc3NSZWZQdHI8Tm9kZUltcGw+IFByb2Nl
c3NpbmdJbnN0cnVjdGlvbkltcGw6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewogICAgIC8v
ICMjIyBjb3B5IG1fbG9jYWxIcmVmCiAgICAgcmV0dXJuIG5ldyBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25JbXBsKGdldERvY3VtZW50KCksIG1fdGFyZ2V0LmdldCgpLCBtX2RhdGEuZ2V0KCkpOwpJbmRl
eDogV2ViQ29yZS9raHRtbC94bWwvRG9jdW1lbnRGcmFnbWVudEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva2h0bWwveG1sL0RvY3VtZW50RnJhZ21lbnRJbXBsLmNwcAkocmV2aXNpb24g
MTIzMDkpCisrKyBXZWJDb3JlL2todG1sL3htbC9Eb2N1bWVudEZyYWdtZW50SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDExICs2NywxMSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LU5vZGVJbXBsICpEb2N1bWVudEZyYWdtZW50SW1wbDo6Y2xvbmVOb2RlIChib29sIGRlZXApCitQ
YXNzUmVmUHRyPE5vZGVJbXBsPiBEb2N1bWVudEZyYWdtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wg
ZGVlcCkKIHsKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqY2xvbmUgPSBuZXcgRG9jdW1lbnRG
cmFnbWVudEltcGwoZ2V0RG9jdW1lbnQoKSk7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50SW1wbD4gY2xvbmUgPSBuZXcgRG9jdW1lbnRGcmFnbWVudEltcGwoZ2V0RG9jdW1lbnQoKSk7
CiAgICAgaWYgKGRlZXApCi0gICAgICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZSk7CisgICAgICAg
IGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CiAgICAgcmV0dXJuIGNsb25lOwogfQogCklu
ZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9raHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3BwCShyZXZpc2lvbiAxMjMwOSkKKysr
IFdlYkNvcmUva2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDU5LDEwICs0NTksMTAgQEAKICAgICAgICAgICAgbV9zdGFydENvbnRhaW5lci0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpDT01NRU5UX05PREUpIHsKIAogICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBF
WFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBDTE9ORV9DT05URU5UUykgewotICAgICAgICAg
ICAgICAgIENoYXJhY3RlckRhdGFJbXBsICpjID0gc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YUlt
cGwqPihtX3N0YXJ0Q29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICAgICAgICAg
IFBhc3NSZWZQdHI8Q2hhcmFjdGVyRGF0YUltcGw+IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PENo
YXJhY3RlckRhdGFJbXBsPihtX3N0YXJ0Q29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOwogICAg
ICAgICAgICAgICAgIGMtPmRlbGV0ZURhdGEobV9lbmRPZmZzZXQsc3RhdGljX2Nhc3Q8Q2hhcmFj
dGVyRGF0YUltcGwqPihtX3N0YXJ0Q29udGFpbmVyKS0+bGVuZ3RoKCktbV9lbmRPZmZzZXQsZXhj
ZXB0aW9uY29kZSk7CiAgICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YSgwLG1fc3RhcnRPZmZz
ZXQsZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxk
KGMsZXhjZXB0aW9uY29kZSk7CisgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxk
KGMsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFjdGlv
biA9PSBFWFRSQUNUX0NPTlRFTlRTIHx8IGFjdGlvbiA9PSBERUxFVEVfQ09OVEVOVFMpCiAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YUltcGwqPihtX3N0YXJ0Q29udGFp
bmVyKS0+ZGVsZXRlRGF0YShtX3N0YXJ0T2Zmc2V0LG1fZW5kT2Zmc2V0LW1fc3RhcnRPZmZzZXQs
ZXhjZXB0aW9uY29kZSk7CkBAIC01MTIsNyArNTEyLDcgQEAKICAgICAvLwogICAgIC8vIFRoZXNl
IGFyZSBkZWxldGVkLCBjbG9uZWQsIG9yIGV4dHJhY3RlZCAoaS5lLiBib3RoKSBkZXBlbmRpbmcg
b24gYWN0aW9uLgogCi0gICAgTm9kZUltcGwgKmxlZnRDb250ZW50cyA9IDA7CisgICAgUmVmUHRy
PE5vZGVJbXBsPiBsZWZ0Q29udGVudHM7CiAgICAgaWYgKG1fc3RhcnRDb250YWluZXIgIT0gY21u
Um9vdCkgewogICAgICAgICAvLyBwcm9jZXNzIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgcmFu
Z2UsIHVwIHVudGlsIHRoZSBsYXN0IGFuY2VzdG9yIG9mCiAgICAgICAgIC8vIG1fc3RhcnRDb250
YWluZXIgYmVmb3JlIGNtblJvb3QKQEAgLTUyMSw3ICs1MjEsNyBAQAogICAgICAgICAgICBtX3N0
YXJ0Q29udGFpbmVyLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSkgewogCiAgICAg
ICAgICAgICBpZiAoYWN0aW9uID09IEVYVFJBQ1RfQ09OVEVOVFMgfHwgYWN0aW9uID09IENMT05F
X0NPTlRFTlRTKSB7Ci0gICAgICAgICAgICAgICAgQ2hhcmFjdGVyRGF0YUltcGwgKmMgPSBzdGF0
aWNfY2FzdDxDaGFyYWN0ZXJEYXRhSW1wbCo+KG1fc3RhcnRDb250YWluZXItPmNsb25lTm9kZSh0
cnVlKSk7CisgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxDaGFyYWN0ZXJEYXRhSW1wbD4gYyA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q2hhcmFjdGVyRGF0YUltcGw+KG1fc3RhcnRDb250YWluZXIt
PmNsb25lTm9kZSh0cnVlKSk7CiAgICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YSgwLG1fc3Rh
cnRPZmZzZXQsZXhjZXB0aW9uY29kZSk7CiAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnRzID0g
YzsKICAgICAgICAgICAgIH0KQEAgLTU1OCw3ICs1NTgsNyBAQAogICAgICAgICBOb2RlSW1wbCAq
biA9IG1fc3RhcnRDb250YWluZXItPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGZvciAoOyBsZWZ0
UGFyZW50ICE9IGNtblJvb3Q7IGxlZnRQYXJlbnQgPSBsZWZ0UGFyZW50LT5wYXJlbnROb2RlKCkp
IHsKICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24g
PT0gQ0xPTkVfQ09OVEVOVFMpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbGVmdENvbnRl
bnRzUGFyZW50ID0gbGVmdFBhcmVudC0+Y2xvbmVOb2RlKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHI8Tm9kZUltcGw+IGxlZnRDb250ZW50c1BhcmVudCA9IGxlZnRQYXJlbnQtPmNsb25l
Tm9kZShmYWxzZSk7CiAgICAgICAgICAgICAgICAgbGVmdENvbnRlbnRzUGFyZW50LT5hcHBlbmRD
aGlsZChsZWZ0Q29udGVudHMsZXhjZXB0aW9uY29kZSk7CiAgICAgICAgICAgICAgICAgbGVmdENv
bnRlbnRzID0gbGVmdENvbnRlbnRzUGFyZW50OwogICAgICAgICAgICAgfQpAQCAtNTgwLDcgKzU4
MCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBOb2RlSW1wbCAqcmlnaHRDb250ZW50cyA9
IDA7CisgICAgUmVmUHRyPE5vZGVJbXBsPiByaWdodENvbnRlbnRzID0gMDsKICAgICBpZiAobV9l
bmRDb250YWluZXIgIT0gY21uUm9vdCkgewogICAgICAgICAvLyBkZWxldGUgdGhlIHJpZ2h0LWhh
bmQgc2lkZSBvZiB0aGUgcmFuZ2UsIHVwIHVudGlsIHRoZSBsYXN0IGFuY2VzdG9yIG9mCiAgICAg
ICAgIC8vIG1fZW5kQ29udGFpbmVyIGJlZm9yZSBjbW5Sb290CkBAIC01ODksNyArNTg5LDcgQEAK
ICAgICAgICAgICAgbV9lbmRDb250YWluZXItPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9O
T0RFKSB7CiAKICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBh
Y3Rpb24gPT0gQ0xPTkVfQ09OVEVOVFMpIHsKLSAgICAgICAgICAgICAgICBDaGFyYWN0ZXJEYXRh
SW1wbCAqYyA9IHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGFJbXBsKj4obV9lbmRDb250YWluZXIt
PmNsb25lTm9kZSh0cnVlKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPENoYXJhY3RlckRhdGFJ
bXBsPiBjID0gc3RhdGljX3BvaW50ZXJfY2FzdDxDaGFyYWN0ZXJEYXRhSW1wbD4obV9lbmRDb250
YWluZXItPmNsb25lTm9kZSh0cnVlKSk7CiAgICAgICAgICAgICAgICAgYy0+ZGVsZXRlRGF0YSht
X2VuZE9mZnNldCxzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhSW1wbCo+KG1fZW5kQ29udGFpbmVy
KS0+bGVuZ3RoKCktbV9lbmRPZmZzZXQsZXhjZXB0aW9uY29kZSk7CiAgICAgICAgICAgICAgICAg
cmlnaHRDb250ZW50cyA9IGM7CiAgICAgICAgICAgICB9CkBAIC02MTgsMTEgKzYxOCw4IEBACiAg
ICAgICAgICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzLT5pbnNlcnRCZWZvcmUobixyaWdo
dENvbnRlbnRzLT5maXJzdENoaWxkKCksZXhjZXB0aW9uY29kZSk7IC8vIHdpbGwgcmVtb3ZlIG4g
ZnJvbSBpdCdzIHBhcmVudAogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhY3Rpb24gPT0g
Q0xPTkVfQ09OVEVOVFMpCiAgICAgICAgICAgICAgICAgICAgICAgICByaWdodENvbnRlbnRzLT5p
bnNlcnRCZWZvcmUobi0+Y2xvbmVOb2RlKHRydWUpLHJpZ2h0Q29udGVudHMtPmZpcnN0Q2hpbGQo
KSxleGNlcHRpb25jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBuLT5yZWYoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9lbmRDb250YWluZXItPnJlbW92ZUNoaWxkKG4sZXhjZXB0aW9u
Y29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuLT5kZXJlZigpOwotICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC02MzEsNyArNjI4LDcgQEAKICAgICAgICAgTm9kZUltcGwgKm4gPSBtX2VuZENvbnRhaW5lci0+
cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgIGZvciAoOyByaWdodFBhcmVudCAhPSBjbW5Sb290
OyByaWdodFBhcmVudCA9IHJpZ2h0UGFyZW50LT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAg
IGlmIChhY3Rpb24gPT0gRVhUUkFDVF9DT05URU5UUyB8fCBhY3Rpb24gPT0gQ0xPTkVfQ09OVEVO
VFMpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcmlnaHRDb250ZW50c1BhcmVudCA9IHJp
Z2h0UGFyZW50LT5jbG9uZU5vZGUoZmFsc2UpOworICAgICAgICAgICAgICAgIFJlZlB0cjxOb2Rl
SW1wbD4gcmlnaHRDb250ZW50c1BhcmVudCA9IHJpZ2h0UGFyZW50LT5jbG9uZU5vZGUoZmFsc2Up
OwogICAgICAgICAgICAgICAgIHJpZ2h0Q29udGVudHNQYXJlbnQtPmFwcGVuZENoaWxkKHJpZ2h0
Q29udGVudHMsZXhjZXB0aW9uY29kZSk7CiAgICAgICAgICAgICAgICAgcmlnaHRDb250ZW50cyA9
IHJpZ2h0Q29udGVudHNQYXJlbnQ7CiAgICAgICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2todG1s
L3htbC9Eb2N1bWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL0Rv
Y3VtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29yZS9raHRtbC94bWwvRG9j
dW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDcgKzMwNSw3IEBACiAKIERvY3Vt
ZW50SW1wbDo6fkRvY3VtZW50SW1wbCgpCiB7Ci0gICAgYXNzZXJ0KCFtX3JlbmRlcik7CisgICAg
YXNzZXJ0KCFyZW5kZXJlcigpKTsKICAgICBhc3NlcnQoIW1faW5QYWdlQ2FjaGUpOwogICAgIGFz
c2VydChtX3NhdmVkUmVuZGVyZXIgPT0gMCk7CiAgICAgCkBAIC0zMzYsNyArMzM2LDcgQEAKICAg
ICBtX2RlZmF1bHRWaWV3LT5kZXJlZigpOwogICAgIG1fc3R5bGVTaGVldHMtPmRlcmVmKCk7CiAK
LSAgICBpZiAobV9yZW5kZXJBcmVuYSl7CisgICAgaWYgKG1fcmVuZGVyQXJlbmEpIHsKICAgICAg
ICAgZGVsZXRlIG1fcmVuZGVyQXJlbmE7CiAgICAgICAgIG1fcmVuZGVyQXJlbmEgPSAwOwogICAg
IH0KQEAgLTYzMiwxMSArNjMyLDExIEBACiAKIEVsZW1lbnRJbXBsKiBEb2N1bWVudEltcGw6OmVs
ZW1lbnRGcm9tUG9pbnQoaW50IHgsIGludCB5KSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXIp
CisgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlbmRlck9i
amVjdDo6Tm9kZUluZm8gbm9kZUluZm8odHJ1ZSwgdHJ1ZSk7Ci0gICAgbV9yZW5kZXItPmxheWVy
KCktPmhpdFRlc3Qobm9kZUluZm8sIHgsIHkpOyAKKyAgICByZW5kZXJlcigpLT5sYXllcigpLT5o
aXRUZXN0KG5vZGVJbmZvLCB4LCB5KTsgCiAKICAgICBOb2RlSW1wbCogbiA9IG5vZGVJbmZvLmlu
bmVyTm9kZSgpOwogICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCkBAIC04MDgs
MTAgKzgwOCwxMSBAQAogICAgICAgICAKICAgICBtX2luU3R5bGVSZWNhbGMgPSB0cnVlOwogICAg
IAotICAgIGlmKCAhbV9yZW5kZXIgKSBnb3RvIGJhaWxfb3V0OworICAgIGlmICghcmVuZGVyZXIo
KSkKKyAgICAgICAgZ290byBiYWlsX291dDsKIAogICAgIGlmICggY2hhbmdlID09IEZvcmNlICkg
ewotICAgICAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBtX3JlbmRlci0+c3R5bGUoKTsKKyAg
ICAgICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKICAgICAg
ICAgaWYgKCBvbGRTdHlsZSApIG9sZFN0eWxlLT5yZWYoKTsKICAgICAgICAgUmVuZGVyU3R5bGUq
IF9zdHlsZSA9IG5ldyAobV9yZW5kZXJBcmVuYSkgUmVuZGVyU3R5bGUoKTsKICAgICAgICAgX3N0
eWxlLT5yZWYoKTsKQEAgLTg0NSw4ICs4NDYsOCBAQAogICAgICAgICAgICAgX3N0eWxlLT5zZXRI
dG1sSGFja3ModHJ1ZSk7IC8vIGVuYWJsZSBodG1sIHNwZWNpZmljIHJlbmRlcmluZyB0cmlja3MK
IAogICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IGRpZmYoIF9zdHlsZSwgb2xkU3R5bGUgKTsKLSAg
ICAgICAgaWYobV9yZW5kZXIgJiYgY2ggIT0gTm9DaGFuZ2UpCi0gICAgICAgICAgICBtX3JlbmRl
ci0+c2V0U3R5bGUoX3N0eWxlKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgY2ggIT0gTm9D
aGFuZ2UpCisgICAgICAgICAgICByZW5kZXJlcigpLT5zZXRTdHlsZShfc3R5bGUpOwogICAgICAg
ICBpZiAoIGNoYW5nZSAhPSBGb3JjZSApCiAgICAgICAgICAgICBjaGFuZ2UgPSBjaDsKIApAQCAt
OTM1LDI3ICs5MzYsMjggQEAKICAgICAgICAgbV9yZW5kZXJBcmVuYSA9IG5ldyBSZW5kZXJBcmVu
YSgpOwogICAgIAogICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyaW5nIHRyZWUKLSAgICBtX3JlbmRl
ciA9IG5ldyAobV9yZW5kZXJBcmVuYSkgUmVuZGVyQ2FudmFzKHRoaXMsIG1fdmlldyk7CisgICAg
c2V0UmVuZGVyZXIobmV3IChtX3JlbmRlckFyZW5hKSBSZW5kZXJDYW52YXModGhpcywgbV92aWV3
KSk7CiAgICAgcmVjYWxjU3R5bGUoIEZvcmNlICk7CiAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
ciA9IG1fcmVuZGVyOwotICAgIG1fcmVuZGVyID0gMDsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRl
ciA9IHJlbmRlcmVyKCk7CisgICAgc2V0UmVuZGVyZXIoMCk7CiAKICAgICBDb250YWluZXJOb2Rl
SW1wbDo6YXR0YWNoKCk7Ci0gICAgbV9yZW5kZXIgPSByZW5kZXI7CisKKyAgICBzZXRSZW5kZXJl
cihyZW5kZXIpOwogfQogCiB2b2lkIERvY3VtZW50SW1wbDo6cmVzdG9yZVJlbmRlcmVyKFJlbmRl
ck9iamVjdCogcmVuZGVyKQogewotICAgIG1fcmVuZGVyID0gcmVuZGVyOworICAgIHNldFJlbmRl
cmVyKHJlbmRlcik7CiB9CiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpkZXRhY2goKQogewotICAgIFJl
bmRlck9iamVjdCogcmVuZGVyID0gbV9yZW5kZXI7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXIg
PSByZW5kZXJlcigpOwogCi0gICAgLy8gaW5kaWNhdGUgZGVzdHJ1Y3Rpb24gbW9kZSwgIGkuZS4g
YXR0YWNoZWQoKSBidXQgbV9yZW5kZXIgPT0gMAotICAgIG1fcmVuZGVyID0gMDsKKyAgICAvLyBp
bmRpY2F0ZSBkZXN0cnVjdGlvbiBtb2RlLCAgaS5lLiBhdHRhY2hlZCgpIGJ1dCByZW5kZXJlciA9
PSAwCisgICAgc2V0UmVuZGVyZXIoMCk7CiAgICAgCiAgICAgaWYgKG1faW5QYWdlQ2FjaGUpIHsK
ICNpZiBfX0FQUExFX18KQEAgLTk4MCw3ICs5ODIsNyBAQAogICAgICAgICBzZXRQYWludERldmlj
ZSgwKTsKICAgICBtX3ZpZXcgPSAwOwogICAgIAotICAgIGlmIChtX3JlbmRlckFyZW5hKXsKKyAg
ICBpZiAobV9yZW5kZXJBcmVuYSkgewogICAgICAgICBkZWxldGUgbV9yZW5kZXJBcmVuYTsKICAg
ICAgICAgbV9yZW5kZXJBcmVuYSA9IDA7CiAgICAgfQpAQCAtMTA1NSwxNiArMTA1NywxNiBAQAog
dm9pZCBEb2N1bWVudEltcGw6OnNldFZpc3VhbGx5T3JkZXJlZCgpCiB7CiAgICAgdmlzdWFsbHlP
cmRlcmVkID0gdHJ1ZTsKLSAgICBpZiAobV9yZW5kZXIpCi0gICAgICAgIG1fcmVuZGVyLT5zdHls
ZSgpLT5zZXRWaXN1YWxseU9yZGVyZWQodHJ1ZSk7CisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAg
ICAgIHJlbmRlcmVyKCktPnN0eWxlKCktPnNldFZpc3VhbGx5T3JkZXJlZCh0cnVlKTsKIH0KIAog
dm9pZCBEb2N1bWVudEltcGw6OnVwZGF0ZVNlbGVjdGlvbigpCiB7Ci0gICAgaWYgKCFtX3JlbmRl
cikKKyAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZW5k
ZXJDYW52YXMgKmNhbnZhcyA9IHN0YXRpY19jYXN0PFJlbmRlckNhbnZhcyo+KG1fcmVuZGVyKTsK
KyAgICBSZW5kZXJDYW52YXMgKmNhbnZhcyA9IHN0YXRpY19jYXN0PFJlbmRlckNhbnZhcyo+KHJl
bmRlcmVyKCkpOwogICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgcyA9IGZyYW1lKCktPnNlbGVjdGlv
bigpOwogICAgIGlmICghcy5pc1JhbmdlKCkpIHsKICAgICAgICAgY2FudmFzLT5jbGVhclNlbGVj
dGlvbigpOwpAQCAtMTA3NSw3ICsxMDc3LDcgQEAKICAgICAgICAgaWYgKHN0YXJ0UG9zLmlzTm90
TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0
ICpzdGFydFJlbmRlcmVyID0gc3RhcnRQb3Mubm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0ICplbmRSZW5kZXJlciA9IGVuZFBvcy5ub2RlKCktPnJlbmRlcmVyKCk7
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJDYW52YXMqPihtX3JlbmRlciktPnNldFNl
bGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBvcy5vZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVu
ZFBvcy5vZmZzZXQoKSk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJDYW52YXMqPihy
ZW5kZXJlcigpKS0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0UG9zLm9mZnNldCgp
LCBlbmRSZW5kZXJlciwgZW5kUG9zLm9mZnNldCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAK
QEAgLTE2ODUsMTAgKzE2ODcsMTAgQEAKIAogYm9vbCBEb2N1bWVudEltcGw6OnByZXBhcmVNb3Vz
ZUV2ZW50KGJvb2wgcmVhZG9ubHksIGJvb2wgYWN0aXZlLCBpbnQgX3gsIGludCBfeSwgTW91c2VF
dmVudCAqZXYpCiB7Ci0gICAgaWYgKCBtX3JlbmRlciApIHsKLSAgICAgICAgYXNzZXJ0KG1fcmVu
ZGVyLT5pc0NhbnZhcygpKTsKKyAgICBpZiAocmVuZGVyZXIoKSkgeworICAgICAgICBhc3NlcnQo
cmVuZGVyZXIoKS0+aXNDYW52YXMoKSk7CiAgICAgICAgIFJlbmRlck9iamVjdDo6Tm9kZUluZm8g
cmVuZGVySW5mbyhyZWFkb25seSwgYWN0aXZlLCBldi0+dHlwZSA9PSBNb3VzZU1vdmUpOwotICAg
ICAgICBib29sIGlzSW5zaWRlID0gbV9yZW5kZXItPmxheWVyKCktPmhpdFRlc3QocmVuZGVySW5m
bywgX3gsIF95KTsKKyAgICAgICAgYm9vbCBpc0luc2lkZSA9IHJlbmRlcmVyKCktPmxheWVyKCkt
PmhpdFRlc3QocmVuZGVySW5mbywgX3gsIF95KTsKICAgICAgICAgZXYtPmlubmVyTm9kZSA9IHJl
bmRlckluZm8uaW5uZXJOb2RlKCk7CiAKICAgICAgICAgaWYgKHJlbmRlckluZm8uVVJMRWxlbWVu
dCgpKSB7CkBAIC0xNzUyLDcgKzE3NTQsNyBAQAogICAgIH0KIH0KIAotTm9kZUltcGwgKkRvY3Vt
ZW50SW1wbDo6Y2xvbmVOb2RlICggYm9vbCAvKmRlZXAqLyApCitQYXNzUmVmUHRyPE5vZGVJbXBs
PiBEb2N1bWVudEltcGw6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewogICAgIC8vIFNwZWMg
c2F5cyBjbG9uaW5nIERvY3VtZW50IG5vZGVzIGlzICJpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQi
CiAgICAgLy8gc28gd2UgZG8gbm90IHN1cHBvcnQgaXQuLi4KQEAgLTE4MzIsNyArMTgzNCw3IEBA
CiAKIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKIHsKLSAgICBpZiAo
IW1fcmVuZGVyIHx8ICFhdHRhY2hlZCgpKQorICAgIGlmICghcmVuZGVyZXIoKSB8fCAhYXR0YWNo
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUVB0ckxpc3Q8U3R5bGVTaGVldEltcGw+IG9s
ZFN0eWxlU2hlZXRzID0gbV9zdHlsZVNoZWV0cy0+c3R5bGVTaGVldHM7CkBAIC0yNTQ0LDEzICsy
NTQ2LDEzIEBACiAgICAgbV9pblBhZ2VDYWNoZSA9IGZsYWc7CiAgICAgaWYgKGZsYWcpIHsKICAg
ICAgICAgYXNzZXJ0KG1fc2F2ZWRSZW5kZXJlciA9PSAwKTsKLSAgICAgICAgbV9zYXZlZFJlbmRl
cmVyID0gbV9yZW5kZXI7CisgICAgICAgIG1fc2F2ZWRSZW5kZXJlciA9IHJlbmRlcmVyKCk7CiAg
ICAgICAgIGlmIChtX3ZpZXcpIHsKICAgICAgICAgICAgIG1fdmlldy0+cmVzZXRTY3JvbGxCYXJz
KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBhc3NlcnQobV9yZW5kZXIgPT0g
MCB8fCBtX3JlbmRlciA9PSBtX3NhdmVkUmVuZGVyZXIpOwotICAgICAgICBtX3JlbmRlciA9IG1f
c2F2ZWRSZW5kZXJlcjsKKyAgICAgICAgYXNzZXJ0KHJlbmRlcmVyKCkgPT0gMCB8fCByZW5kZXJl
cigpID09IG1fc2F2ZWRSZW5kZXJlcik7CisgICAgICAgIHNldFJlbmRlcmVyKG1fc2F2ZWRSZW5k
ZXJlcik7CiAgICAgICAgIG1fc2F2ZWRSZW5kZXJlciA9IDA7CiAgICAgfQogfQpJbmRleDogV2Vi
Q29yZS9raHRtbC94bWwvRG9jdW1lbnRUeXBlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2h0bWwveG1sL0RvY3VtZW50VHlwZUltcGwuaAkocmV2aXNpb24gMTIzMDkpCisrKyBXZWJDb3Jl
L2todG1sL3htbC9Eb2N1bWVudFR5cGVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0
OCwxMiBAQAogICAgIERPTVN0cmluZyBzeXN0ZW1JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3lzdGVt
SWQ7IH0KICAgICBET01TdHJpbmcgaW50ZXJuYWxTdWJzZXQoKSBjb25zdCB7IHJldHVybiBtX3N1
YnNldDsgfQogCi0gICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tIHBhcmVudCBjbGFz
c2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAq
Y2xvbmVOb2RlKGJvb2wgZGVlcCk7Ci0KICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBv
ZiBET00pCiAgICAgRE9NSW1wbGVtZW50YXRpb25JbXBsICppbXBsZW1lbnRhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbGVtZW50YXRpb24uZ2V0KCk7IH0KKworICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIG5vZGVOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlw
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlSW1wbD4gY2xvbmVOb2RlKGJv
b2wgZGVlcCk7CiAgICAgdmlydHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogcHJp
dmF0ZToKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL05vZGVJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2todG1sL3htbC9Ob2RlSW1wbC5jcHAJKHJldmlzaW9uIDEyMzA5KQorKysgV2Vi
Q29yZS9raHRtbC94bWwvTm9kZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2
LDcgQEAKICAgICA6IGRvY3VtZW50KGRvYyksCiAgICAgICBtX3ByZXZpb3VzKDApLAogICAgICAg
bV9uZXh0KDApLAotICAgICAgbV9yZW5kZXIoMCksCisgICAgICBtX3JlbmRlcmVyKDApLAogICAg
ICAgbV9yZWdkTGlzdGVuZXJzKDApLAogICAgICAgbV9ub2RlTGlzdHMoMCksCiAgICAgICBtX3Rh
YkluZGV4KDApLApAQCAtMTU1LDcgKzE1NSw3IEBACiAjaWZuZGVmIE5ERUJVRwogICAgIC0tTm9k
ZUltcGxDb3VudGVyOjpjb3VudDsKICNlbmRpZgotICAgIGlmIChtX3JlbmRlcikKKyAgICBpZiAo
cmVuZGVyZXIoKSkKICAgICAgICAgZGV0YWNoKCk7CiAgICAgaWYgKG1fcmVnZExpc3RlbmVycyAm
JiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkgJiYgZ2V0RG9jdW1lbnQoKSAmJiAhaW5Eb2N1
bWVudCgpKQogICAgICAgICBnZXREb2N1bWVudCgpLT51bnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9k
ZVdpdGhFdmVudExpc3RlbmVycyh0aGlzKTsKQEAgLTMzOCw4ICszMzgsOCBAQAogSW50UmVjdCBO
b2RlSW1wbDo6Z2V0UmVjdCgpIGNvbnN0CiB7CiAgICAgaW50IF94LCBfeTsKLSAgICBpZihtX3Jl
bmRlciAmJiBtX3JlbmRlci0+YWJzb2x1dGVQb3NpdGlvbihfeCwgX3kpKQotICAgICAgICByZXR1
cm4gSW50UmVjdCggX3gsIF95LCBtX3JlbmRlci0+d2lkdGgoKSwgbV9yZW5kZXItPmhlaWdodCgp
ICk7CisgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+YWJzb2x1dGVQb3NpdGlvbihf
eCwgX3kpKQorICAgICAgICByZXR1cm4gSW50UmVjdCggX3gsIF95LCByZW5kZXJlcigpLT53aWR0
aCgpLCByZW5kZXJlcigpLT5oZWlnaHQoKSApOwogCiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0K
QEAgLTExOTEsNyArMTE5MSw3IEBACiB2b2lkIE5vZGVJbXBsOjphdHRhY2goKQogewogICAgIGFz
c2VydCghYXR0YWNoZWQoKSk7Ci0gICAgYXNzZXJ0KCFtX3JlbmRlciB8fCAobV9yZW5kZXItPnN0
eWxlKCkgJiYgbV9yZW5kZXItPnBhcmVudCgpKSk7CisgICAgYXNzZXJ0KCFyZW5kZXJlcigpIHx8
IChyZW5kZXJlcigpLT5zdHlsZSgpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSk7CiAgICAgZ2V0
RG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKICAgICBtX2F0dGFjaGVkID0gdHJ1ZTsK
IH0KQEAgLTEyMDYsMTkgKzEyMDYsMTkgQEAKIC8vICAgIGFzc2VydChtX2F0dGFjaGVkKTsKIAog
ICAgIERvY3VtZW50SW1wbCogZG9jID0gZ2V0RG9jdW1lbnQoKTsKLSAgICBpZiAobV9yZW5kZXIp
IHsKKyAgICBpZiAocmVuZGVyZXIoKSkgewogICAgICAgICBpZiAobV9ob3ZlcmVkICYmIGRvYy0+
aG92ZXJOb2RlKCkgPT0gdGhpcykgewogICAgICAgICAgICAgTm9kZUltcGwqIGUgPSB0aGlzOwot
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gbV9yZW5kZXI7CisgICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIG8gPSByZW5kZXJlcigpOwogICAgICAgICAgICAgd2hpbGUgKG8gJiYgKCFlIHx8
IGUgPT0gdGhpcykpIHsKICAgICAgICAgICAgICAgICBvID0gby0+aG92ZXJBbmNlc3RvcigpOwog
ICAgICAgICAgICAgICAgIGUgPSBvID8gby0+ZWxlbWVudCgpIDogMDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGRvYy0+c2V0SG92ZXJOb2RlKGUpOwogICAgICAgICB9Ci0gICAgICAgIG1f
cmVuZGVyLT5kZXN0cm95KCk7CisgICAgICAgIHJlbmRlcmVyKCktPmRlc3Ryb3koKTsKICAgICB9
Ci0gICAgbV9yZW5kZXIgPSAwOworICAgIHNldFJlbmRlcmVyKDApOwogCiAgICAgaWYgKGRvYykK
ICAgICAgICAgZG9jLT5pbmNET01UcmVlVmVyc2lvbigpOwpAQCAtMTM4OCw3ICsxMzg4LDcgQEAK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBhc3NlcnQoIWF0dGFjaGVkKCkpOwotICAg
IGFzc2VydCghbV9yZW5kZXIpOworICAgIGFzc2VydCghcmVuZGVyZXIoKSk7CiAgICAgCiAgICAg
Tm9kZUltcGwgKnBhcmVudCA9IHBhcmVudE5vZGUoKTsgICAgCiAgICAgYXNzZXJ0KHBhcmVudCk7
CkBAIC0xNDEyLDEwICsxNDEyLDEwIEBACiAjZWxzZQogICAgICAgICBpZiAocmVuZGVyZXJJc05l
ZWRlZChzdHlsZSkpIHsKICNlbmRpZgotICAgICAgICAgICAgbV9yZW5kZXIgPSBjcmVhdGVSZW5k
ZXJlcihnZXREb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZSk7Ci0gICAgICAgICAgICBp
ZiAobV9yZW5kZXIpIHsKLSAgICAgICAgICAgICAgICBtX3JlbmRlci0+c2V0U3R5bGUoc3R5bGUp
OwotICAgICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5hZGRDaGlsZChtX3JlbmRlciwgbmV4
dFJlbmRlcmVyKCkpOworICAgICAgICAgICAgc2V0UmVuZGVyZXIoY3JlYXRlUmVuZGVyZXIoZ2V0
RG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUpKTsKKyAgICAgICAgICAgIGlmIChyZW5k
ZXJlcigpKSB7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoc3R5bGUpOwor
ICAgICAgICAgICAgICAgIHBhcmVudFJlbmRlcmVyLT5hZGRDaGlsZChyZW5kZXJlcigpLCBuZXh0
UmVuZGVyZXIoKSk7CiAgICAgICAgICAgICB9CiAjaWZuZGVmIEtIVE1MX05PX1hCTAogICAgICAg
ICB9IC8vIGF2b2lkIGNvbmZ1c2luZyB0aGUgY2hhbmdlIGxvZyBjb2RlIHBhcnNlciBieSBoYXZp
bmcgdHdvIGNsb3NlIGJyYWNlcyB0byBtYXRjaCB0aGUgdHdvIG9wZW4gYnJhY2VzIGFib3ZlCkBA
IC0xNTc3LDIwICsxNTc3LDIwIEBACiAKIC8vIEZJWE1FOiBFbmQgb2Ygb2J2aW91c2x5IG1pc3Bs
YWNlZCBIVE1MIGVkaXRpbmcgZnVuY3Rpb25zLiAgVHJ5IHRvIG1vdmUgdGhlc2Ugb3V0IG9mIE5v
ZGVJbXBsLgogCi1SZWZQdHI8Tm9kZUxpc3RJbXBsPiBOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRh
Z05hbWUoY29uc3QgRE9NU3RyaW5nJiBuYW1lKQorUGFzc1JlZlB0cjxOb2RlTGlzdEltcGw+IE5v
ZGVJbXBsOjpnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBET01TdHJpbmcmIG5hbWUpCiB7CiAg
ICAgcmV0dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoIioiLCBuYW1lKTsKIH0KICAKLVJlZlB0
cjxOb2RlTGlzdEltcGw+IE5vZGVJbXBsOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IERP
TVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSkKK1Bhc3NS
ZWZQdHI8Tm9kZUxpc3RJbXBsPiBOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25z
dCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpCiB7
CiAgICAgaWYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSB8fCBsb2NhbE5hbWUuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZUxpc3RJbXBsPigpOyAvLyBGSVhNRTogV2hvIGNhcmVz
IGFib3V0IHRoaXMgYWRkaXRpb25hbCBjaGVjaz8KKyAgICAgICAgcmV0dXJuIDA7IC8vIEZJWE1F
OiBXaG8gcmVsaWVzIG9uIGdldHRpbmcgMCBpbnN0ZWFkIG9mIGEgbm9kZSBsaXN0IGluIHRoaXMg
Y2FzZT8KICAgICAKICAgICBET01TdHJpbmcgbmFtZSA9IGxvY2FsTmFtZTsKICAgICBpZiAoZ2V0
RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKICAgICAgICAgbmFtZSA9IGxvY2FsTmFtZS5s
b3dlcigpOwotICAgIHJldHVybiBSZWZQdHI8Tm9kZUxpc3RJbXBsPihuZXcgVGFnTm9kZUxpc3RJ
bXBsKHRoaXMsIEF0b21pY1N0cmluZyhuYW1lc3BhY2VVUkkpLCBBdG9taWNTdHJpbmcobmFtZSkp
KTsKKyAgICByZXR1cm4gbmV3IFRhZ05vZGVMaXN0SW1wbCh0aGlzLCBBdG9taWNTdHJpbmcobmFt
ZXNwYWNlVVJJKSwgQXRvbWljU3RyaW5nKG5hbWUpKTsKIH0KIAogYm9vbCBOb2RlSW1wbDo6aXNT
dXBwb3J0ZWQoY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNp
b24pCkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJKHJldmlzaW9uIDEy
MzA5KQorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg0LDExICsxODQsMTAgQEAKICAgICBzZXRWYWx1ZSh2LCBleGNlcHRpb25jb2Rl
KTsKIH0KIAotTm9kZUltcGwgKkF0dHJJbXBsOjpjbG9uZU5vZGUgKCBib29sIC8qZGVlcCovKQor
UGFzc1JlZlB0cjxOb2RlSW1wbD4gQXR0ckltcGw6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQog
ewotICAgIEF0dHJJbXBsICpjbG9uZSA9IG5ldyBBdHRySW1wbCgwLCBnZXREb2N1bWVudCgpLCBt
X2F0dHJpYnV0ZS0+Y2xvbmUoKSwgZmFsc2UpOwotICAgIAotICAgIGNsb25lQ2hpbGROb2Rlcyhj
bG9uZSk7CisgICAgUGFzc1JlZlB0cjxBdHRySW1wbD4gY2xvbmUgPSBuZXcgQXR0ckltcGwoMCwg
Z2V0RG9jdW1lbnQoKSwgbV9hdHRyaWJ1dGUtPmNsb25lKCksIGZhbHNlKTsKKyAgICBjbG9uZUNo
aWxkTm9kZXMoY2xvbmUuZ2V0KCkpOwogICAgIHJldHVybiBjbG9uZTsKIH0KIApAQCAtMjk1LDEw
ICsyOTQsMTAgQEAKICAgICAgICAgbmFtZWRBdHRyTWFwLT5kZXRhY2hGcm9tRWxlbWVudCgpOwog
fQogCi1Ob2RlSW1wbCAqRWxlbWVudEltcGw6OmNsb25lTm9kZShib29sIGRlZXApCitQYXNzUmVm
UHRyPE5vZGVJbXBsPiBFbGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wgZGVlcCkKIHsKICAgICBp
bnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudEltcGwgKmNsb25lID0gZ2V0RG9jdW1l
bnQoKS0+Y3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSgpLCBub2RlTmFtZSgpLCBleGNlcHRp
b25Db2RlKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnRJbXBsPiBjbG9uZSA9IGdldERvY3VtZW50
KCktPmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkkoKSwgbm9kZU5hbWUoKSwgZXhjZXB0aW9u
Q29kZSk7CiAgICAgYXNzZXJ0KCFleGNlcHRpb25Db2RlKTsKICAgICAKICAgICAvLyBjbG9uZSBh
dHRyaWJ1dGVzCkBAIC0zMDgsNyArMzA3LDcgQEAKICAgICBjbG9uZS0+Y29weU5vbkF0dHJpYnV0
ZVByb3BlcnRpZXModGhpcyk7CiAgICAgCiAgICAgaWYgKGRlZXApCi0gICAgICAgIGNsb25lQ2hp
bGROb2RlcyhjbG9uZSk7CisgICAgICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CiAK
ICAgICByZXR1cm4gY2xvbmU7CiB9CkBAIC0zNzcsMjMgKzM3NiwyMyBAQAogdm9pZCBFbGVtZW50
SW1wbDo6c2Nyb2xsSW50b1ZpZXcoYm9vbCBhbGlnblRvVG9wKSAKIHsKICAgICBJbnRSZWN0IGJv
dW5kcyA9IHRoaXMtPmdldFJlY3QoKTsgICAgCi0gICAgaWYgKG1fcmVuZGVyKSB7CisgICAgaWYg
KHJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gQWxpZ24gdG8gdGhlIHRvcCAvIGJvdHRvbSBhbmQg
dG8gdGhlIGNsb3Nlc3QgZWRnZS4KICAgICAgICAgaWYgKGFsaWduVG9Ub3ApCi0gICAgICAgICAg
ICBtX3JlbmRlci0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShib3VuZHMs
IFJlbmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCwgUmVuZGVyTGF5ZXI6OmdBbGlnblRv
cEFsd2F5cyk7CisgICAgICAgICAgICByZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3Jv
bGxSZWN0VG9WaXNpYmxlKGJvdW5kcywgUmVuZGVyTGF5ZXI6OmdBbGlnblRvRWRnZUlmTmVlZGVk
LCBSZW5kZXJMYXllcjo6Z0FsaWduVG9wQWx3YXlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9yZW5kZXItPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUoYm91bmRz
LCBSZW5kZXJMYXllcjo6Z0FsaWduVG9FZGdlSWZOZWVkZWQsIFJlbmRlckxheWVyOjpnQWxpZ25C
b3R0b21BbHdheXMpOworICAgICAgICAgICAgcmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+
c2Nyb2xsUmVjdFRvVmlzaWJsZShib3VuZHMsIFJlbmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5l
ZWRlZCwgUmVuZGVyTGF5ZXI6OmdBbGlnbkJvdHRvbUFsd2F5cyk7CiAgICAgfQogfQogCiB2b2lk
IEVsZW1lbnRJbXBsOjpzY3JvbGxJbnRvVmlld0lmTmVlZGVkKGJvb2wgY2VudGVySWZOZWVkZWQp
CiB7CiAgICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5nZXRSZWN0KCk7ICAgIAotICAgIGlmICht
X3JlbmRlcikgeworICAgIGlmIChyZW5kZXJlcigpKSB7CiAgICAgICAgIGlmIChjZW50ZXJJZk5l
ZWRlZCkKLSAgICAgICAgICAgIG1fcmVuZGVyLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxSZWN0
VG9WaXNpYmxlKGJvdW5kcywgUmVuZGVyTGF5ZXI6OmdBbGlnbkNlbnRlcklmTmVlZGVkLCBSZW5k
ZXJMYXllcjo6Z0FsaWduQ2VudGVySWZOZWVkZWQpOworICAgICAgICAgICAgcmVuZGVyZXIoKS0+
ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShib3VuZHMsIFJlbmRlckxheWVy
OjpnQWxpZ25DZW50ZXJJZk5lZWRlZCwgUmVuZGVyTGF5ZXI6OmdBbGlnbkNlbnRlcklmTmVlZGVk
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9yZW5kZXItPmVuY2xvc2luZ0xheWVyKCkt
PnNjcm9sbFJlY3RUb1Zpc2libGUoYm91bmRzLCBSZW5kZXJMYXllcjo6Z0FsaWduVG9FZGdlSWZO
ZWVkZWQsIFJlbmRlckxheWVyOjpnQWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CisgICAgICAgICAgICBy
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKGJvdW5kcywg
UmVuZGVyTGF5ZXI6OmdBbGlnblRvRWRnZUlmTmVlZGVkLCBSZW5kZXJMYXllcjo6Z0FsaWduVG9F
ZGdlSWZOZWVkZWQpOwogICAgIH0KIH0KIApAQCAtNTU2LDcgKzU1NSw3IEBACiB2b2lkIEVsZW1l
bnRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2hhbmdlICkKIHsKICAgICAvLyAjIyMg
c2hvdWxkIGdvIGF3YXkgYW5kIGJlIGRvbmUgaW4gcmVuZGVyb2JqZWN0Ci0gICAgUmVuZGVyU3R5
bGUqIF9zdHlsZSA9IG1fcmVuZGVyID8gbV9yZW5kZXItPnN0eWxlKCkgOiAwOworICAgIFJlbmRl
clN0eWxlKiBfc3R5bGUgPSByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+c3R5bGUoKSA6IDA7CiAg
ICAgYm9vbCBoYXNQYXJlbnRSZW5kZXJlciA9IHBhcmVudCgpID8gcGFyZW50KCktPnJlbmRlcmVy
KCkgOiBmYWxzZTsKICAgICAKICAgICBpZiAoIGhhc1BhcmVudFJlbmRlcmVyICYmIChjaGFuZ2Ug
Pj0gSW5oZXJpdCB8fCBjaGFuZ2VkKCkpICkgewpAQCAtNTc0LDE3ICs1NzMsMTUgQEAKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjaCAhPSBOb0NoYW5n
ZSkgewotICAgICAgICAgICAgaWYoIG1fcmVuZGVyICYmIG5ld1N0eWxlICkgewotICAgICAgICAg
ICAgICAgIC8vcURlYnVnKCItLT4gc2V0dGluZyBzdHlsZSBvbiByZW5kZXIgZWxlbWVudCBiZ2Nv
bG9yPSVzIiwgbmV3U3R5bGUtPmJhY2tncm91bmRDb2xvcigpLm5hbWUoKS5sYXRpbjEoKSk7Ci0g
ICAgICAgICAgICAgICAgbV9yZW5kZXItPnNldFN0eWxlKG5ld1N0eWxlKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIG5ld1N0eWxlKQorICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnNldFN0eWxlKG5ld1N0eWxlKTsKICAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChjaGFuZ2VkKCkgJiYgbV9yZW5kZXIgJiYgbmV3U3R5bGUgJiYgKGdldERvY3VtZW50
KCktPnVzZXNTaWJsaW5nUnVsZXMoKSB8fCBnZXREb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1
bGVzKCkpKSB7CisgICAgICAgIGVsc2UgaWYgKGNoYW5nZWQoKSAmJiByZW5kZXJlcigpICYmIG5l
d1N0eWxlICYmIChnZXREb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZ2V0RG9jdW1l
bnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpKSkgewogICAgICAgICAgICAgLy8gQWx0aG91Z2gg
bm8gY2hhbmdlIG9jY3VycmVkLCB3ZSB1c2UgdGhlIG5ldyBzdHlsZSBzbyB0aGF0IHRoZSBjb3Vz
aW4gc3R5bGUgc2hhcmluZyBjb2RlIHdvbid0IGdldAogICAgICAgICAgICAgLy8gZm9vbGVkIGlu
dG8gYmVsaWV2aW5nIHRoaXMgc3R5bGUgaXMgdGhlIHNhbWUuICBUaGlzIGlzIG9ubHkgbmVjZXNz
YXJ5IGlmIHRoZSBkb2N1bWVudCBhY3R1YWxseSB1c2VzCiAgICAgICAgICAgICAvLyBzaWJsaW5n
L2Rlc2NlbmRhbnQgcnVsZXMsIHNpbmNlIG90aGVyd2lzZSBpdCBpc24ndCBwb3NzaWJsZSBmb3Ig
YW5jZXN0b3Igc3R5bGVzIHRvIGFmZmVjdCBzaGFyaW5nIG9mCiAgICAgICAgICAgICAvLyBkZXNj
ZW5kYW50cy4KLSAgICAgICAgICAgIG1fcmVuZGVyLT5zZXRTdHlsZUludGVybmFsKG5ld1N0eWxl
KTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxlSW50ZXJuYWwobmV3U3R5bGUpOwog
ICAgICAgICB9CiAKICAgICAgICAgbmV3U3R5bGUtPmRlcmVmKGdldERvY3VtZW50KCktPnJlbmRl
ckFyZW5hKCkpOwpAQCAtNzUyLDI1ICs3NDksMjUgQEAKIH0KICNlbmRpZgogCi1SZWZQdHI8QXR0
ckltcGw+IEVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHJJbXBsICphdHRyLCBpbnQg
JmV4Y2VwdGlvbikKK1Bhc3NSZWZQdHI8QXR0ckltcGw+IEVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1
dGVOb2RlKEF0dHJJbXBsICphdHRyLCBpbnQgJmV4Y2VwdGlvbikKIHsKICAgICByZXR1cm4gc3Rh
dGljX3BvaW50ZXJfY2FzdDxBdHRySW1wbD4oYXR0cmlidXRlcyhmYWxzZSktPnNldE5hbWVkSXRl
bShhdHRyLCBleGNlcHRpb24pKTsKIH0KIAotUmVmUHRyPEF0dHJJbXBsPiBFbGVtZW50SW1wbDo6
cmVtb3ZlQXR0cmlidXRlTm9kZShBdHRySW1wbCAqYXR0ciwgaW50ICZleGNlcHRpb24pCitQYXNz
UmVmUHRyPEF0dHJJbXBsPiBFbGVtZW50SW1wbDo6cmVtb3ZlQXR0cmlidXRlTm9kZShBdHRySW1w
bCAqYXR0ciwgaW50ICZleGNlcHRpb24pCiB7CiAgICAgaWYgKCFhdHRyIHx8IGF0dHItPm93bmVy
RWxlbWVudCgpICE9IHRoaXMpIHsKICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpO
T1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gUmVmUHRyPEF0dHJJbXBsPigpOworICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKGdldERvY3VtZW50KCkgIT0gYXR0ci0+Z2V0RG9j
dW1lbnQoKSkgewogICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246OldST05HX0RPQ1VN
RU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIFJlZlB0cjxBdHRySW1wbD4oKTsKKyAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCiAgICAgTmFtZWRBdHRyTWFwSW1wbCAqYXR0cnMgPSBhdHRyaWJ1dGVz
KHRydWUpOwogICAgIGlmICghYXR0cnMpCi0gICAgICAgIHJldHVybiBSZWZQdHI8QXR0ckltcGw+
KCk7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIHN0YXRpY19wb2ludGVyX2Nhc3Q8
QXR0ckltcGw+KGF0dHJzLT5yZW1vdmVOYW1lZEl0ZW0oYXR0ci0+bV9hdHRyaWJ1dGUtPm5hbWUo
KSwgZXhjZXB0aW9uKSk7CiB9CkBAIC04NzYsNyArODczLDcgQEAKICAgICByZXR1cm4gZ2V0TmFt
ZWRJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxuLmltcGwoKSwgbmFtZXNwYWNlVVJJLmlt
cGwoKSkpOwogfQogCi1SZWZQdHI8Tm9kZUltcGw+IE5hbWVkQXR0ck1hcEltcGw6OnJlbW92ZU5h
bWVkSXRlbU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcg
JmxvY2FsTmFtZSwgaW50ICZleGNlcHRpb24pCitQYXNzUmVmUHRyPE5vZGVJbXBsPiBOYW1lZEF0
dHJNYXBJbXBsOjpyZW1vdmVOYW1lZEl0ZW1OUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVS
SSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUsIGludCAmZXhjZXB0aW9uKQogewogICAgIERP
TVN0cmluZyBsbihsb2NhbE5hbWUpOwogICAgIGlmIChlbGVtZW50LT5nZXREb2N1bWVudCgpLT5p
c0hUTUxEb2N1bWVudCgpKQpAQCAtODk1LDI5ICs4OTIsMjkgQEAKICAgICByZXR1cm4gYS0+YXR0
ckltcGwoKTsKIH0KIAotUmVmUHRyPE5vZGVJbXBsPiBOYW1lZEF0dHJNYXBJbXBsOjpzZXROYW1l
ZEl0ZW0gKCBOb2RlSW1wbCogYXJnLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQorUGFzc1JlZlB0cjxO
b2RlSW1wbD4gTmFtZWRBdHRyTWFwSW1wbDo6c2V0TmFtZWRJdGVtKE5vZGVJbXBsKiBhcmcsIGlu
dCYgZXhjZXB0aW9uY29kZSkKIHsKICAgICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgZXhjZXB0
aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuIFJl
ZlB0cjxOb2RlSW1wbD4oKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLy8gTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBtYXAgaXMgcmVhZG9ubHku
CiAgICAgaWYgKGlzUmVhZE9ubHkoKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhj
ZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybiBSZWZQ
dHI8Tm9kZUltcGw+KCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIC8vIFdST05H
X0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIGFyZyB3YXMgY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50
IGRvY3VtZW50IHRoYW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQgdGhpcyBtYXAuCiAgICAgaWYgKGFy
Zy0+Z2V0RG9jdW1lbnQoKSAhPSBlbGVtZW50LT5nZXREb2N1bWVudCgpKSB7CiAgICAgICAgIGV4
Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246OldST05HX0RPQ1VNRU5UX0VSUjsKLSAgICAgICAg
cmV0dXJuIFJlZlB0cjxOb2RlSW1wbD4oKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAg
ICAgLy8gTm90IG1lbnRpb25lZCBpbiBzcGVjOiB0aHJvdyBhIEhJRVJBUkNIWV9SRVFVRVNUX0VS
Uk9SIGlmIHRoZSB1c2VyIHBhc3NlcyBpbiBhIG5vbi1hdHRyaWJ1dGUgbm9kZQogICAgIGlmICgh
YXJnLT5pc0F0dHJpYnV0ZU5vZGUoKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhj
ZXB0aW9uOjpISUVSQVJDSFlfUkVRVUVTVF9FUlI7Ci0gICAgICAgIHJldHVybiBSZWZQdHI8Tm9k
ZUltcGw+KCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBBdHRySW1wbCAqYXR0ciA9
IHN0YXRpY19jYXN0PEF0dHJJbXBsKj4oYXJnKTsKIApAQCAtOTMwLDE0ICs5MjcsMTQgQEAKICAg
ICAvLyBUaGUgRE9NIHVzZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lIEF0dHIgbm9kZXMgdG8gcmUt
dXNlIHRoZW0gaW4gb3RoZXIgZWxlbWVudHMuCiAgICAgaWYgKGF0dHItPm93bmVyRWxlbWVudCgp
KSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246OklOVVNFX0FUVFJJQlVU
RV9FUlI7Ci0gICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZUltcGw+KCk7CisgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAogICAgIGlmIChhLT5uYW1lKCkgPT0gaWRBdHRyKQogICAgICAgICBlbGVt
ZW50LT51cGRhdGVJZChvbGQgPyBvbGQtPnZhbHVlKCkgOiBudWxsQXRvbSwgYS0+dmFsdWUoKSk7
CiAKICAgICAvLyAjIyMgc2xpZ2h0bHkgaW5lZmZpY2llbnQgLSByZXNpemVzIGF0dHJpYnV0ZSBh
cnJheSB0d2ljZS4KLSAgICBSZWZQdHI8Tm9kZUltcGw+IHI7CisgICAgUGFzc1JlZlB0cjxOb2Rl
SW1wbD4gcjsKICAgICBpZiAob2xkKSB7CiAgICAgICAgIGlmICghb2xkLT5hdHRySW1wbCgpKQog
ICAgICAgICAgICAgb2xkLT5hbGxvY2F0ZUltcGwoZWxlbWVudCk7CkBAIC05NTIsMjMgKzk0OSwy
NCBAQAogLy8gVGhlIERPTTIgc3BlYyBkb2Vzbid0IHNheSB0aGF0IHJlbW92ZUF0dHJpYnV0ZVtO
U10gdGhyb3dzIE5PVF9GT1VORF9FUlIKIC8vIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGZvdW5k
LCBidXQgYXQgdGhpcyBsZXZlbCB3ZSBoYXZlIHRvIHRocm93IE5PVF9GT1VORF9FUlIKIC8vIGJl
Y2F1c2Ugb2YgcmVtb3ZlTmFtZWRJdGVtLCByZW1vdmVOYW1lZEl0ZW1OUywgYW5kIHJlbW92ZUF0
dHJpYnV0ZU5vZGUuCi1SZWZQdHI8Tm9kZUltcGw+IE5hbWVkQXR0ck1hcEltcGw6OnJlbW92ZU5h
bWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCitQ
YXNzUmVmUHRyPE5vZGVJbXBsPiBOYW1lZEF0dHJNYXBJbXBsOjpyZW1vdmVOYW1lZEl0ZW0oY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgaW50ICZleGNlcHRpb25jb2RlKQogewogICAgIC8vICMj
IyBzaG91bGQgdGhpcyByZWFsbHkgYmUgcmFpc2VkIHdoZW4gdGhlIGF0dHJpYnV0ZSB0byByZW1v
dmUgaXNuJ3QgdGhlcmUgYXQgYWxsPwogICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjogUmFpc2VkIHdoZW4gdGhlIG5vZGUgaXMgcmVhZG9ubHkKICAgICBpZiAoaXNSZWFkT25seSgp
KSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIFJlZlB0cjxOb2RlSW1wbD4oKTsKKyAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgQXR0cmlidXRlSW1wbCogYSA9IGdldEF0dHJpYnV0
ZUl0ZW0obmFtZSk7CiAgICAgaWYgKCFhKSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01F
eGNlcHRpb246Ok5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZUltcGw+
KCk7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmICghYS0+YXR0ckltcGwoKSkg
IGEtPmFsbG9jYXRlSW1wbChlbGVtZW50KTsKLSAgICBSZWZQdHI8Tm9kZUltcGw+IHIoYS0+YXR0
ckltcGwoKSk7CisgICAgaWYgKCFhLT5hdHRySW1wbCgpKQorICAgICAgICBhLT5hbGxvY2F0ZUlt
cGwoZWxlbWVudCk7CisgICAgUGFzc1JlZlB0cjxOb2RlSW1wbD4gcihhLT5hdHRySW1wbCgpKTsK
IAogICAgIGlmIChuYW1lID09IGlkQXR0cikKICAgICAgICAgZWxlbWVudC0+dXBkYXRlSWQoYS0+
dmFsdWUoKSwgbnVsbEF0b20pOwpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX3RleHRpbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX3RleHRpbXBsLmgJKHJldmlz
aW9uIDEyMzA5KQorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX3RleHRpbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDE5ICsyMSwxOSBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CiAgKgogICovCisKICNpZm5kZWYgRE9NX1RleHRJbXBsX2gKICNkZWZpbmUgRE9NX1RleHRJbXBs
X2gKIAotI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAiTm9kZUltcGwuaCIK
IAotbmFtZXNwYWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENoYXJhY3Rl
ckRhdGFJbXBsIDogcHVibGljIE5vZGVJbXBsCiB7CiBwdWJsaWM6Ci0gICAgQ2hhcmFjdGVyRGF0
YUltcGwoRG9jdW1lbnRJbXBsICpkb2MsIGNvbnN0IERPTVN0cmluZyAmX3RleHQpOwotICAgIENo
YXJhY3RlckRhdGFJbXBsKERvY3VtZW50SW1wbCAqZG9jKTsKKyAgICBDaGFyYWN0ZXJEYXRhSW1w
bChEb2N1bWVudEltcGwqLCBjb25zdCBET01TdHJpbmcgJl90ZXh0KTsKKyAgICBDaGFyYWN0ZXJE
YXRhSW1wbChEb2N1bWVudEltcGwqKTsKICAgICB2aXJ0dWFsIH5DaGFyYWN0ZXJEYXRhSW1wbCgp
OwogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBDaGFyYWN0ZXJEYXRhCkBA
IC02NSw3ICs2NSw3IEBACiAgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqKTsKICAgICAK
ICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoUVRleHRTdHJlYW0gKnN0cmVh
bSwgUVN0cmluZyBpbmQgPSAiIikgY29uc3Q7CkBAIC04NCwxNSArODQsMTUgQEAKIGNsYXNzIENv
bW1lbnRJbXBsIDogcHVibGljIENoYXJhY3RlckRhdGFJbXBsCiB7CiBwdWJsaWM6Ci0gICAgQ29t
bWVudEltcGwoRG9jdW1lbnRJbXBsICpkb2MsIGNvbnN0IERPTVN0cmluZyAmX3RleHQpOwotICAg
IENvbW1lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9jKTsKKyAgICBDb21tZW50SW1wbChEb2N1bWVu
dEltcGwqLCBjb25zdCBET01TdHJpbmcgJl90ZXh0KTsKKyAgICBDb21tZW50SW1wbChEb2N1bWVu
dEltcGwqKTsKICAgICB2aXJ0dWFsIH5Db21tZW50SW1wbCgpOwogCiAgICAgLy8gRE9NIG1ldGhv
ZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPE5vZGVJbXBsPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAogICAgIC8vIE90aGVyIG1l
dGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAgICB2aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTExOCwxNCArMTE4LDE0IEBACiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBu
b2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUltcGw+IGNsb25lTm9kZShib29sIGRlZXApOwogCiAgICAg
Ly8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogCiAgICAgdmlydHVhbCBib29sIGlz
VGV4dE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aCgpOwotICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHls
ZSAqKTsKLSAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hICosIGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVu
ZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAq
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwgUmVuZGVyU3R5bGUgKik7CiAgICAgdmlydHVh
bCB2b2lkIHJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlICk7CiAgICAgdmlydHVh
bCBib29sIGNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUgKTsKIApAQCAtMTM2
LDcgKzEzNiw3IEBACiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgVGV4dEltcGwg
KmNyZWF0ZU5ldyhET01TdHJpbmdJbXBsICpfc3RyKTsKKyAgICB2aXJ0dWFsIFRleHRJbXBsKiBj
cmVhdGVOZXcoRE9NU3RyaW5nSW1wbCopOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMTQ5LDE5ICsxNDksMTQgQEAKICAgICBDREFUQVNlY3Rpb25JbXBsKERvY3VtZW50SW1wbCAq
aW1wbCk7CiAgICAgdmlydHVhbCB+Q0RBVEFTZWN0aW9uSW1wbCgpOwogCi0gICAgLy8gRE9NIG1l
dGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlw
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZShib29sIGRlZXApOwot
Ci0gICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQotCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPE5vZGVJbXBsPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIGJv
b2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwotCiAgICAgdmlydHVh
bCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
VGV4dEltcGwgKmNyZWF0ZU5ldyhET01TdHJpbmdJbXBsICpfc3RyKTsKKyAgICB2aXJ0dWFsIFRl
eHRJbXBsKiBjcmVhdGVOZXcoRE9NU3RyaW5nSW1wbCopOwogfTsKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtMTczLDggKzE2OCw5IEBACiAgICAgRWRpdGluZ1RleHRJbXBsKERvY3VtZW50
SW1wbCAqaW1wbCk7CiAgICAgdmlydHVhbCB+RWRpdGluZ1RleHRJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKik7CisgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKik7CiB9OwogCiB9IC8vbmFt
ZXNwYWNlCisKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvQ29udGFpbmVyTm9kZUlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL0NvbnRhaW5lck5vZGVJbXBs
LmNwcAkocmV2aXNpb24gMTIzMDkpCisrKyBXZWJDb3JlL2todG1sL3htbC9Db250YWluZXJOb2Rl
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Nyw5ICs1NDcsOSBAQAogCiBib29sIENvbnRh
aW5lck5vZGVJbXBsOjpnZXRVcHBlckxlZnRDb3JuZXIoaW50ICZ4UG9zLCBpbnQgJnlQb3MpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcikKKyAgICBpZiAoIXJlbmRlcmVyKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJPYmplY3QgKm8gPSBtX3JlbmRlcjsKKyAgICBSZW5k
ZXJPYmplY3QgKm8gPSByZW5kZXJlcigpOwogICAgIFJlbmRlck9iamVjdCAqcCA9IG87CiAKICAg
ICB4UG9zID0geVBvcyA9IDA7CkBAIC02MDYsMTAgKzYwNiwxMCBAQAogCiBib29sIENvbnRhaW5l
ck5vZGVJbXBsOjpnZXRMb3dlclJpZ2h0Q29ybmVyKGludCAmeFBvcywgaW50ICZ5UG9zKSBjb25z
dAogewotICAgIGlmICghbV9yZW5kZXIpCisgICAgaWYgKCFyZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJPYmplY3QgKm8gPSBtX3JlbmRlcjsKKyAgICBSZW5k
ZXJPYmplY3QgKm8gPSByZW5kZXJlcigpOwogICAgIHhQb3MgPSB5UG9zID0gMDsKICAgICBpZiAo
IW8tPmlzSW5saW5lKCkgfHwgby0+aXNSZXBsYWNlZCgpKQogICAgIHsKQEAgLTY5MSw4ICs2OTEs
OCBAQAogCiAgICAgLy8gbm90ZSB0aGF0IHdlIG5lZWQgdG8gcmVjYWxjIHRoZSBzdHlsZQogICAg
IC8vIEZJWE1FOiBNb3ZlIHRvIEVsZW1lbnRJbXBsCi0gICAgaWYgKG1fcmVuZGVyKSB7Ci0gICAg
ICAgIGJvb2wgcmVhY3RzVG9QcmVzcyA9IG1fcmVuZGVyLT5zdHlsZSgpLT5hZmZlY3RlZEJ5QWN0
aXZlUnVsZXMoKTsKKyAgICBpZiAocmVuZGVyZXIoKSkgeworICAgICAgICBib29sIHJlYWN0c1Rv
UHJlc3MgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5hZmZlY3RlZEJ5QWN0aXZlUnVsZXMoKTsKICAg
ICAgICAgaWYgKHJlYWN0c1RvUHJlc3MpCiAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7CiAgICAg
ICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2Uo
KSkgewpAQCAtNzA4LDcgKzcwOCw3IEBACiAgICAgICAgICAgICBzdGFydFRpbWUucmVzdGFydCgp
OwogCiAgICAgICAgICAgICAvLyBEbyBhbiBpbW1lZGlhdGUgcmVwYWludC4KLSAgICAgICAgICAg
IG1fcmVuZGVyLT5yZXBhaW50KHRydWUpOworICAgICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWlu
dCh0cnVlKTsKICAgICAgICAgICAgIAogI2lmICFXSU4zMgogICAgICAgICAgICAgLy8gRklYTUU6
IEZpbmQgYSBzdWJzdGl0dXRlIGZvciB1c2xlZXAuICBCZXR0ZXIgeWV0LCBjb21lIHVwIHdpdGgg
YSB3YXkgb2YgZG9pbmcgdGhpcyB0aGF0IApAQCAtNzMxLDggKzczMSw4IEBACiAKICAgICAvLyBu
b3RlIHRoYXQgd2UgbmVlZCB0byByZWNhbGMgdGhlIHN0eWxlCiAgICAgLy8gRklYTUU6IE1vdmUg
dG8gRWxlbWVudEltcGwKLSAgICBpZiAobV9yZW5kZXIpIHsKLSAgICAgICAgaWYgKG1fcmVuZGVy
LT5zdHlsZSgpLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygpKQorICAgIGlmIChyZW5kZXJlcigpKSB7
CisgICAgICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5hZmZlY3RlZEJ5SG92ZXJSdWxlcygp
KQogICAgICAgICAgICAgc2V0Q2hhbmdlZCgpOwogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiBy
ZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgICAgICB0aGVtZSgp
LT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgSG92ZXJTdGF0ZSk7CkluZGV4OiBXZWJDb3JlL2to
dG1sL3htbC9kb21feG1saW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwveG1sL2Rv
bV94bWxpbXBsLmgJKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX3ht
bGltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTIgKzUwLDkgQEAKICAgICBET01TdHJpbmcg
c3lzdGVtSWQoKSBjb25zdCB7IHJldHVybiBtX3N5c3RlbUlkLmdldCgpOyB9CiAgICAgRE9NU3Ry
aW5nIG5vdGF0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm90YXRpb25OYW1lLmdldCgpOyB9
CiAKLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCiAg
ICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCogY2xvbmVO
b2RlKGJvb2wgZGVlcCk7Ci0KLSAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00p
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsK
ICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCh1bnNpZ25lZCBzaG9ydCB0eXBlKTsK
ICAgICB2aXJ0dWFsIERPTVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCkBAIC03MiwxMiArNjks
OSBAQAogICAgIEVudGl0eVJlZmVyZW5jZUltcGwoRG9jdW1lbnRJbXBsKik7CiAgICAgRW50aXR5
UmVmZXJlbmNlSW1wbChEb2N1bWVudEltcGwqLCBET01TdHJpbmdJbXBsKiBlbnRpdHlOYW1lKTsK
IAotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKICAg
ICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsKiBjbG9uZU5v
ZGUoYm9vbCBkZWVwKTsKLQotICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUltcGw+IGNsb25lTm9kZShib29sIGRlZXApOwog
ICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKHVuc2lnbmVkIHNob3J0IHR5cGUpOwog
ICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKQEAgLTk1LDEyICs4OSw5
IEBACiAgICAgRE9NU3RyaW5nIHB1YmxpY0lkKCkgY29uc3QgeyByZXR1cm4gbV9wdWJsaWNJZC5n
ZXQoKTsgfQogICAgIERPTVN0cmluZyBzeXN0ZW1JZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3lzdGVt
SWQuIGdldCgpOyB9CiAKLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVu
dCBjbGFzc2VzCiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2Rl
SW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICk7Ci0KLSAgICAvLyBPdGhlciBtZXRob2RzIChu
b3QgcGFydCBvZiBET00pCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBjbG9uZU5v
ZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCh1bnNpZ25l
ZCBzaG9ydCB0eXBlKTsKIAogcHJpdmF0ZToKQEAgLTEyMiwxNiArMTEzLDE1IEBACiAgICAgRE9N
U3RyaW5nIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KICAgICB2b2lkIHNl
dERhdGEoY29uc3QgRE9NU3RyaW5nICZkYXRhLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwogCi0gICAg
Ly8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogICAgIHZpcnR1
YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9y
dCBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoY29uc3QgRE9NU3RyaW5nJiBub2Rl
VmFsdWUsIGludCAmZXhjZXB0aW9uY29kZSk7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCogY2xvbmVO
b2RlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBjbG9uZU5v
ZGUoYm9vbCBkZWVwKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWdu
ZWQgc2hvcnQgdHlwZSApOwogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9N
KQogICAgIERPTVN0cmluZyBsb2NhbEhyZWYoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsSHJlZi5n
ZXQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9y
dCB0eXBlICk7CiAgICAgU3R5bGVTaGVldEltcGwqIHNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9z
aGVldC5nZXQoKTsgfQogICAgIGJvb2wgY2hlY2tTdHlsZVNoZWV0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldFN0eWxlU2hlZXQoY29uc3QgRE9NU3RyaW5nJiBVUkwsIGNvbnN0IERPTVN0cmluZyYg
c2hlZXQpOwpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvRG9jdW1lbnRGcmFnbWVudEltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL3htbC9Eb2N1bWVudEZyYWdtZW50SW1wbC5oCShy
ZXZpc2lvbiAxMjMwOSkKKysrIFdlYkNvcmUva2h0bWwveG1sL0RvY3VtZW50RnJhZ21lbnRJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDI2ICsyMiwyMyBAQAogICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgRE9NX0RvY3VtZW50RnJhZ21lbnRJbXBs
X2gKICNkZWZpbmUgRE9NX0RvY3VtZW50RnJhZ21lbnRJbXBsX2gKIAogI2luY2x1ZGUgIkNvbnRh
aW5lck5vZGVJbXBsLmgiCiAKLW5hbWVzcGFjZSBET00geworbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbCA6IHB1YmxpYyBDb250YWluZXJOb2RlSW1wbAog
ewogcHVibGljOgotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9jKTsK
KyAgICBEb2N1bWVudEZyYWdtZW50SW1wbChEb2N1bWVudEltcGwqKTsKIAotICAgIC8vIERPTSBt
ZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKICAgICB2aXJ0dWFsIERPTVN0
cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5
cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAg
KTsKLQotICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLSAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwotCisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKKyAgICB2aXJ0
dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCh1bnNpZ25lZCBzaG9ydCB0eXBlKTsKICAgICB2aXJ0
dWFsIERPTVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogfTsKIApJbmRleDogV2ViQ29yZS9raHRt
bC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAJKHJldmlzaW9uIDEyMzA5
KQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICBpZiAoIW1fZWxlbWVudDEpIHsKICAg
ICAgICAgLy8gY3JlYXRlIG9ubHkgaWYgbmVlZGVkLgogICAgICAgICAvLyBpZiByZWFwcGx5aW5n
LCB0aGlzIG9iamVjdCB3aWxsIGFscmVhZHkgZXhpc3QuCi0gICAgICAgIG1fZWxlbWVudDEgPSBz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihtX2VsZW1lbnQyLT5jbG9uZU5vZGUoZmFsc2UpKTsK
KyAgICAgICAgbV9lbGVtZW50MSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RWxlbWVudEltcGw+KG1f
ZWxlbWVudDItPmNsb25lTm9kZShmYWxzZSkpOwogICAgICAgICBBU1NFUlQobV9lbGVtZW50MSk7
CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9z
ZXBhcmF0b3JfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCShyZXZpc2lvbiAxMjMwOSkK
KysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgYm9vbCBzdGFy
dEJsb2NrSXNSb290ID0gc3RhcnRCbG9jayA9PSBzdGFydEJsb2NrLT5yb290RWRpdGFibGVFbGVt
ZW50KCk7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBibG9jayB0aGF0IGlzIGdvaW5nIHRvIGJlIGlu
c2VydGVkLgotICAgIE5vZGVJbXBsICpibG9ja1RvSW5zZXJ0ID0gc3RhcnRCbG9ja0lzUm9vdCA/
IGNyZWF0ZVBhcmFncmFwaEVsZW1lbnQoKSA6IHN0YXJ0QmxvY2stPmNsb25lTm9kZShmYWxzZSk7
CisgICAgUmVmUHRyPE5vZGVJbXBsPiBibG9ja1RvSW5zZXJ0ID0gc3RhcnRCbG9ja0lzUm9vdCA/
IGNyZWF0ZVBhcmFncmFwaEVsZW1lbnQoKSA6IHN0YXJ0QmxvY2stPmNsb25lTm9kZShmYWxzZSk7
CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEhhbmRsZSBlbXB0eSBibG9jayBjYXNlLgpA
QCAtMTQzLDEzICsxNDMsMTMgQEAKICAgICAgICAgICAgIE5vZGVJbXBsICpleHRyYUJsb2NrID0g
Y3JlYXRlUGFyYWdyYXBoRWxlbWVudCgpOwogICAgICAgICAgICAgYXBwZW5kTm9kZShleHRyYUJs
b2NrLCBzdGFydEJsb2NrKTsKICAgICAgICAgICAgIGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoZXh0
cmFCbG9jayk7Ci0gICAgICAgICAgICBhcHBlbmROb2RlKGJsb2NrVG9JbnNlcnQsIHN0YXJ0Qmxv
Y2spOworICAgICAgICAgICAgYXBwZW5kTm9kZShibG9ja1RvSW5zZXJ0LmdldCgpLCBzdGFydEJs
b2NrKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihibG9ja1RvSW5zZXJ0LCBzdGFydEJsb2NrKTsKKyAgICAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihibG9ja1RvSW5zZXJ0LmdldCgpLCBzdGFydEJsb2NrKTsKICAgICAgICAgfQotICAgICAg
ICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGJsb2NrVG9JbnNlcnQpOwotICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oUG9zaXRpb24oYmxvY2tUb0luc2VydCwgMCksIERPV05TVFJFQU0pOworICAg
ICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGJsb2NrVG9JbnNlcnQuZ2V0KCkpOworICAgICAg
ICBzZXRFbmRpbmdTZWxlY3Rpb24oUG9zaXRpb24oYmxvY2tUb0luc2VydC5nZXQoKSwgMCksIERP
V05TVFJFQU0pOwogICAgICAgICBhcHBseVN0eWxlQWZ0ZXJJbnNlcnRpb24oKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTE1OSwxMSArMTU5LDExIEBACiAgICAgaWYgKGlzTGFzdEluQmxv
Y2spIHsKICAgICAgICAgTE9HKEVkaXRpbmcsICJpbnNlcnQgcGFyYWdyYXBoIHNlcGFyYXRvcjog
bGFzdCBpbiBibG9jayBjYXNlIik7CiAgICAgICAgIGlmIChzdGFydEJsb2NrSXNSb290KQotICAg
ICAgICAgICAgYXBwZW5kTm9kZShibG9ja1RvSW5zZXJ0LCBzdGFydEJsb2NrKTsKKyAgICAgICAg
ICAgIGFwcGVuZE5vZGUoYmxvY2tUb0luc2VydC5nZXQoKSwgc3RhcnRCbG9jayk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihibG9ja1RvSW5zZXJ0LCBzdGFydEJs
b2NrKTsKLSAgICAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihibG9ja1RvSW5zZXJ0KTsKLSAg
ICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFBvc2l0aW9uKGJsb2NrVG9JbnNlcnQsIDApLCBET1dO
U1RSRUFNKTsKKyAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihibG9ja1RvSW5zZXJ0LmdldCgp
LCBzdGFydEJsb2NrKTsKKyAgICAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihibG9ja1RvSW5z
ZXJ0LmdldCgpKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFBvc2l0aW9uKGJsb2NrVG9J
bnNlcnQuZ2V0KCksIDApLCBET1dOU1RSRUFNKTsKICAgICAgICAgYXBwbHlTdHlsZUFmdGVySW5z
ZXJ0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xODgsOSArMTg4LDkgQEAKICAg
ICAgICAgICAgIHJlZk5vZGUgPSBwb3Mubm9kZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5z
ZXJ0Tm9kZUJlZm9yZShibG9ja1RvSW5zZXJ0LCByZWZOb2RlKTsKLSAgICAgICAgYXBwZW5kQmxv
Y2tQbGFjZWhvbGRlcihibG9ja1RvSW5zZXJ0KTsKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KFBvc2l0aW9uKGJsb2NrVG9JbnNlcnQsIDApLCBET1dOU1RSRUFNKTsKKyAgICAgICAgaW5zZXJ0
Tm9kZUJlZm9yZShibG9ja1RvSW5zZXJ0LmdldCgpLCByZWZOb2RlKTsKKyAgICAgICAgYXBwZW5k
QmxvY2tQbGFjZWhvbGRlcihibG9ja1RvSW5zZXJ0LmdldCgpKTsKKyAgICAgICAgc2V0RW5kaW5n
U2VsZWN0aW9uKFBvc2l0aW9uKGJsb2NrVG9JbnNlcnQuZ2V0KCksIDApLCBET1dOU1RSRUFNKTsK
ICAgICAgICAgYXBwbHlTdHlsZUFmdGVySW5zZXJ0aW9uKCk7CiAgICAgICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihwb3MsIERPV05TVFJFQU0pOwogICAgICAgICByZXR1cm47CkBAIC0yNDEsMTkgKzI0
MSwxOSBAQAogCiAgICAgLy8gUHV0IHRoZSBhZGRlZCBibG9jayBpbiB0aGUgdHJlZS4KICAgICBp
ZiAoc3RhcnRCbG9ja0lzUm9vdCkgewotICAgICAgICBhcHBlbmROb2RlKGJsb2NrVG9JbnNlcnQs
IHN0YXJ0QmxvY2spOworICAgICAgICBhcHBlbmROb2RlKGJsb2NrVG9JbnNlcnQuZ2V0KCksIHN0
YXJ0QmxvY2spOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGluc2VydE5vZGVBZnRlcihibG9ja1Rv
SW5zZXJ0LCBzdGFydEJsb2NrKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGJsb2NrVG9JbnNl
cnQuZ2V0KCksIHN0YXJ0QmxvY2spOwogICAgIH0KIAogICAgIC8vIE1ha2UgY2xvbmVzIG9mIGFu
Y2VzdG9ycyBpbiBiZXR3ZWVuIHRoZSBzdGFydCBub2RlIGFuZCB0aGUgc3RhcnQgYmxvY2suCi0g
ICAgTm9kZUltcGwgKnBhcmVudCA9IGJsb2NrVG9JbnNlcnQ7CisgICAgTm9kZUltcGwgKnBhcmVu
dCA9IGJsb2NrVG9JbnNlcnQuZ2V0KCk7CiAgICAgZm9yIChRUHRyTGlzdEl0ZXJhdG9yPE5vZGVJ
bXBsPiBpdChhbmNlc3RvcnMpOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKLSAgICAgICAgTm9kZUlt
cGwgKmNoaWxkID0gaXQuY3VycmVudCgpLT5jbG9uZU5vZGUoZmFsc2UpOyAvLyBzaGFsbG93IGNs
b25lCisgICAgICAgIFJlZlB0cjxOb2RlSW1wbD4gY2hpbGQgPSBpdC5jdXJyZW50KCktPmNsb25l
Tm9kZShmYWxzZSk7IC8vIHNoYWxsb3cgY2xvbmUKICAgICAgICAgY2hpbGQtPnJlZigpOwotICAg
ICAgICBjbG9uZWROb2Rlcy5hcHBlbmQoY2hpbGQpOwotICAgICAgICBhcHBlbmROb2RlKGNoaWxk
LCBwYXJlbnQpOwotICAgICAgICBwYXJlbnQgPSBjaGlsZDsKKyAgICAgICAgY2xvbmVkTm9kZXMu
YXBwZW5kKGNoaWxkLmdldCgpKTsKKyAgICAgICAgYXBwZW5kTm9kZShjaGlsZC5nZXQoKSwgcGFy
ZW50KTsKKyAgICAgICAgcGFyZW50ID0gY2hpbGQuZ2V0KCk7CiAgICAgfQogCiAgICAgLy8gSW5z
ZXJ0IGEgYmxvY2sgcGxhY2Vob2xkZXIgaWYgdGhlIG5leHQgdmlzaWJsZSBwb3NpdGlvbiBpcyBp
biBhIGRpZmZlcmVudCBwYXJhZ3JhcGgsCkBAIC0yNjEsNyArMjYxLDcgQEAKICAgICAvLyBiZWZv
cmUgdGhlIGZpcnN0IGJsb2NrIGNoaWxkLiBTbywgd2UgbmVlZCB0aGUgcGxhY2Vob2xkZXIgdG8g
ImhvbGQgdGhlIGZpcnN0IGxpbmUgb3BlbiIuCiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSB2
aXNpYmxlUG9zLm5leHQoKTsKICAgICBpZiAoIW5leHQuaXNOdWxsKCkgJiYgIWluU2FtZUJsb2Nr
KHZpc2libGVQb3MsIG5leHQpKQotICAgICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGJsb2Nr
VG9JbnNlcnQpOworICAgICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKGJsb2NrVG9JbnNlcnQu
Z2V0KCkpOwogCiAgICAgLy8gTW92ZSB0aGUgc3RhcnQgbm9kZSBhbmQgdGhlIHNpYmxpbmdzIG9m
IHRoZSBzdGFydCBub2RlLgogICAgIGlmIChzdGFydE5vZGUgIT0gc3RhcnRCbG9jaykgewpAQCAt
MzAzLDcgKzMwMyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oUG9zaXRpb24oYmxvY2tUb0luc2VydCwgMCksIERPV05TVFJFQU0pOworICAgIHNldEVuZGlu
Z1NlbGVjdGlvbihQb3NpdGlvbihibG9ja1RvSW5zZXJ0LmdldCgpLCAwKSwgRE9XTlNUUkVBTSk7
CiAgICAgcmViYWxhbmNlV2hpdGVzcGFjZSgpOwogICAgIGFwcGx5U3R5bGVBZnRlckluc2VydGlv
bigpOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2Nr
cXVvdGVfY29tbWFuZC5jcHAJKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29yZS9raHRtbC9lZGl0
aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI1
ICsyNiwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImJyZWFrX2Jsb2NrcXVv
dGVfY29tbWFuZC5oIgogCisjaW5jbHVkZSAiZG9tX2VsZW1lbnRpbXBsLmgiCisjaW5jbHVkZSAi
ZG9tX3RleHRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKLSNpbmNsdWRlICJ2aXNp
YmxlX3Bvc2l0aW9uLmgiCi0KICNpbmNsdWRlICJodG1sbmFtZXMuaCIKLSNpbmNsdWRlICJ4bWwv
ZG9tX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgotCisjaW5j
bHVkZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0Fzc2VydGlvbnMu
aD4KIAotdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRNTE5hbWVzOworbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi11c2luZyBET006OkRvY3VtZW50SW1wbDsKLXVzaW5nIERPTTo6RWxlbWVudEltcGw7Ci11
c2luZyBET006Ok5vZGVJbXBsOwotdXNpbmcgRE9NOjpQb3NpdGlvbjsKLXVzaW5nIERPTTo6VGV4
dEltcGw7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1uYW1lc3BhY2Uga2h0bWwgewot
CiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpCcmVha0Jsb2NrcXVvdGVDb21tYW5kKERvY3VtZW50
SW1wbCAqZG9jdW1lbnQpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCkKIHsK
QEAgLTExNywxNyArMTA5LDE3IEBACiAgICAgICAgICAgICBhbmNlc3RvcnMucHJlcGVuZChub2Rl
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIG9mIHRoZSB0b3AgYmxvY2tx
dW90ZSBhZnRlciB0aGUgYnJlYWsuCi0gICAgICAgIE5vZGVJbXBsICpjbG9uZWRCbG9ja3F1b3Rl
ID0gdG9wQmxvY2txdW90ZS0+Y2xvbmVOb2RlKGZhbHNlKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUFm
dGVyKGNsb25lZEJsb2NrcXVvdGUsIGJyZWFrTm9kZSk7CisgICAgICAgIFJlZlB0cjxOb2RlSW1w
bD4gY2xvbmVkQmxvY2txdW90ZSA9IHRvcEJsb2NrcXVvdGUtPmNsb25lTm9kZShmYWxzZSk7Cisg
ICAgICAgIGluc2VydE5vZGVBZnRlcihjbG9uZWRCbG9ja3F1b3RlLmdldCgpLCBicmVha05vZGUp
OwogICAgICAgICAKICAgICAgICAgLy8gQ2xvbmUgc3RhcnROb2RlJ3MgYW5jZXN0b3JzIGludG8g
dGhlIGNsb25lZCBibG9ja3F1b3RlLgogICAgICAgICAvLyBPbiBleGl0aW5nIHRoaXMgbG9vcCwg
Y2xvbmVkQW5jZXN0b3IgaXMgdGhlIGxvd2VzdCBhbmNlc3RvcgogICAgICAgICAvLyB0aGF0IHdh
cyBjbG9uZWQgKGkuZS4gdGhlIGNsb25lIG9mIGVpdGhlciBhbmNlc3RvcnMubGFzdCgpCiAgICAg
ICAgIC8vIG9yIGNsb25lZEJsb2NrcXVvdGUgaWYgYW5jZXN0b3JzIGlzIGVtcHR5KS4KLSAgICAg
ICAgTm9kZUltcGwgKmNsb25lZEFuY2VzdG9yID0gY2xvbmVkQmxvY2txdW90ZTsKKyAgICAgICAg
UmVmUHRyPE5vZGVJbXBsPiBjbG9uZWRBbmNlc3RvciA9IGNsb25lZEJsb2NrcXVvdGU7CiAgICAg
ICAgIGZvciAoUVB0ckxpc3RJdGVyYXRvcjxOb2RlSW1wbD4gaXQoYW5jZXN0b3JzKTsgaXQuY3Vy
cmVudCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBOb2RlSW1wbCAqY2xvbmVkQ2hpbGQgPSBpdC5j
dXJyZW50KCktPmNsb25lTm9kZShmYWxzZSk7IC8vIHNoYWxsb3cgY2xvbmUKLSAgICAgICAgICAg
IGFwcGVuZE5vZGUoY2xvbmVkQ2hpbGQsIGNsb25lZEFuY2VzdG9yKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxOb2RlSW1wbD4gY2xvbmVkQ2hpbGQgPSBpdC5jdXJyZW50KCktPmNsb25lTm9kZShmYWxz
ZSk7IC8vIHNoYWxsb3cgY2xvbmUKKyAgICAgICAgICAgIGFwcGVuZE5vZGUoY2xvbmVkQ2hpbGQu
Z2V0KCksIGNsb25lZEFuY2VzdG9yLmdldCgpKTsKICAgICAgICAgICAgIGNsb25lZEFuY2VzdG9y
ID0gY2xvbmVkQ2hpbGQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMzYsNyArMTI4LDcgQEAK
ICAgICAgICAgd2hpbGUgKG1vdmVOb2RlKSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9
IG1vdmVOb2RlLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgcmVtb3ZlTm9kZShtb3ZlTm9k
ZSk7Ci0gICAgICAgICAgICBhcHBlbmROb2RlKG1vdmVOb2RlLCBjbG9uZWRBbmNlc3Rvcik7Cisg
ICAgICAgICAgICBhcHBlbmROb2RlKG1vdmVOb2RlLCBjbG9uZWRBbmNlc3Rvci5nZXQoKSk7CiAg
ICAgICAgICAgICBtb3ZlTm9kZSA9IG5leHQ7CiAgICAgICAgIH0KIApAQCAtMTYxLDcgKzE1Myw3
IEBACiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2xvbmVk
IGJsb2NrIHF1b3RlIHJlbmRlcnMuCi0gICAgICAgIGFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRl
ZChjbG9uZWRCbG9ja3F1b3RlKTsKKyAgICAgICAgYWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVk
KGNsb25lZEJsb2NrcXVvdGUuZ2V0KCkpOwogICAgIH0KICAgICAKICAgICAvLyBQdXQgdGhlIHNl
bGVjdGlvbiByaWdodCBiZWZvcmUgdGhlIGJyZWFrLgpJbmRleDogV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1s
X2Jhc2VpbXBsLmNwcAkocmV2aXNpb24gMTIzMDkpCisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9iYXNlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzOSw3ICszMzksNyBAQAogICAgIAog
ICAgIC8vIEhhbmRsZSB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgd2UgZGVjaWRlZCBub3QgdG8gbWFr
ZSBhIGZyYW1lIHRoZSBmaXJzdCB0aW1lLgogICAgIC8vIERldGFjaCBhbmQgdGhlIGxldCBhdHRh
Y2goKSBkZWNpZGUgYWdhaW4gd2hldGhlciB0byBtYWtlIHRoZSBmcmFtZSBmb3IgdGhpcyBVUkwu
Ci0gICAgaWYgKCFtX3JlbmRlcikgeworICAgIGlmICghcmVuZGVyZXIoKSkgewogICAgICAgICBk
ZXRhY2goKTsKICAgICAgICAgYXR0YWNoKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTM3MSw3ICsz
NzEsNyBAQAogICAgIGlmIChmcmFtZVBhcnQpIHsKICAgICAgICAgZnJhbWVQYXJ0LT5vcGVuVVJM
KGdldERvY3VtZW50KCktPmNvbXBsZXRlVVJMKHJlbGF0aXZlVVJMLnFzdHJpbmcoKSkpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZyYW1lLT5yZXF1ZXN0RnJhbWUoc3RhdGljX2Nhc3Q8UmVuZGVy
RnJhbWUgKj4obV9yZW5kZXIpLCByZWxhdGl2ZVVSTC5xc3RyaW5nKCksIG1fbmFtZS5xc3RyaW5n
KCkpOworICAgICAgICBmcmFtZS0+cmVxdWVzdEZyYW1lKHN0YXRpY19jYXN0PFJlbmRlckZyYW1l
ICo+KHJlbmRlcmVyKCkpLCByZWxhdGl2ZVVSTC5xc3RyaW5nKCksIG1fbmFtZS5xc3RyaW5nKCkp
OwogICAgIH0KIH0KIApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAKICAgICBIVE1MRWxlbWVudEltcGw6
OmF0dGFjaCgpOwogCi0gICAgaWYgKCFtX3JlbmRlcikKKyAgICBpZiAoIXJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEZyYW1lICpmcmFtZSA9IGdldERvY3VtZW50KCktPmZyYW1l
KCk7CkBAIC00NjksMTQgKzQ2OSwxNCBAQAogICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmco
ZnJhbWUtPnJlcXVlc3RGcmFtZU5hbWUoKSk7CiAKICAgICAvLyBsb2FkIHRoZSBmcmFtZSBjb250
ZW50cwotICAgIGZyYW1lLT5yZXF1ZXN0RnJhbWUoc3RhdGljX2Nhc3Q8UmVuZGVyRnJhbWUqPiht
X3JlbmRlciksIHJlbGF0aXZlVVJMLnFzdHJpbmcoKSwgbV9uYW1lLnFzdHJpbmcoKSk7CisgICAg
ZnJhbWUtPnJlcXVlc3RGcmFtZShzdGF0aWNfY2FzdDxSZW5kZXJGcmFtZSo+KHJlbmRlcmVyKCkp
LCByZWxhdGl2ZVVSTC5xc3RyaW5nKCksIG1fbmFtZS5xc3RyaW5nKCkpOwogfQogCiB2b2lkIEhU
TUxGcmFtZUVsZW1lbnRJbXBsOjpjbG9zZSgpCiB7CiAgICAgRnJhbWUgKmZyYW1lID0gZ2V0RG9j
dW1lbnQoKS0+ZnJhbWUoKTsKIAotICAgIGlmIChtX3JlbmRlciAmJiBmcmFtZSkgeworICAgIGlm
IChyZW5kZXJlcigpICYmIGZyYW1lKSB7CiAgICAgICAgIGZyYW1lLT5kZWNyZW1lbnRGcmFtZUNv
dW50KCk7CiAgICAgICAgIEZyYW1lICpmcmFtZVBhcnQgPSBmcmFtZS0+ZmluZEZyYW1lKG1fbmFt
ZS5xc3RyaW5nKCkpOwogICAgICAgICBpZiAoZnJhbWVQYXJ0KQpAQCAtNDkwLDkgKzQ5MCw5IEBA
CiAgICAgLy8gbm9kZSBhdHRhY2hlZCBzbyB0aGF0IGZyYW1lIGRvZXMgbm90IGdldCByZS1hdHRh
Y2hlZCBiZWZvcmUKICAgICAvLyBhY3R1YWxseSBsZWF2aW5nIHRoZSBkb2N1bWVudC4gIHNlZSA8
cmRhcjovL3Byb2JsZW0vNDEzMjU4MT4KICAgICBjbG9zZSgpOwotICAgIGlmIChtX3JlbmRlcikg
ewotICAgICAgICBtX3JlbmRlci0+ZGVzdHJveSgpOwotICAgICAgICBtX3JlbmRlciA9IDA7Cisg
ICAgaWYgKHJlbmRlcmVyKCkpIHsKKyAgICAgICAgcmVuZGVyZXIoKS0+ZGVzdHJveSgpOworICAg
ICAgICBzZXRSZW5kZXJlcigwKTsKICAgICB9CiAgICAgCiAgICAgSFRNTEVsZW1lbnRJbXBsOjp3
aWxsUmVtb3ZlKCk7CkBAIC01MTQsMTMgKzUxNCwxMyBAQAogCiBib29sIEhUTUxGcmFtZUVsZW1l
bnRJbXBsOjppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVuZGVyIT0wOwor
ICAgIHJldHVybiByZW5kZXJlcigpOwogfQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpz
ZXRGb2N1cyhib29sIHJlY2VpdmVkKQogewogICAgIEhUTUxFbGVtZW50SW1wbDo6c2V0Rm9jdXMo
cmVjZWl2ZWQpOwotICAgIGtodG1sOjpSZW5kZXJGcmFtZSAqcmVuZGVyRnJhbWUgPSBzdGF0aWNf
Y2FzdDxraHRtbDo6UmVuZGVyRnJhbWUgKj4obV9yZW5kZXIpOworICAgIGtodG1sOjpSZW5kZXJG
cmFtZSAqcmVuZGVyRnJhbWUgPSBzdGF0aWNfY2FzdDxraHRtbDo6UmVuZGVyRnJhbWUgKj4ocmVu
ZGVyZXIoKSk7CiAgICAgaWYgKCFyZW5kZXJGcmFtZSB8fCAhcmVuZGVyRnJhbWUtPndpZGdldCgp
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlY2VpdmVkKQpAQCAtNjM1LDIxICs2MzUsMjEg
QEAKIGludCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6ZnJhbWVXaWR0aCgpIGNvbnN0CiB7CiAgICAg
RG9jdW1lbnRJbXBsKiBkID0gZ2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWQgfHwgIW1fcmVuZGVy
KQorICAgIGlmICghZCB8fCAhcmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAg
ICAgZC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJu
IG1fcmVuZGVyLT53aWR0aCgpOworICAgIHJldHVybiByZW5kZXJlcigpLT53aWR0aCgpOwogfQog
CiBpbnQgSFRNTEZyYW1lRWxlbWVudEltcGw6OmZyYW1lSGVpZ2h0KCkgY29uc3QKIHsKICAgICBE
b2N1bWVudEltcGwqIGQgPSBnZXREb2N1bWVudCgpOwotICAgIGlmICghZCB8fCAhbV9yZW5kZXIp
CisgICAgaWYgKCFkIHx8ICFyZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAg
ICBkLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4g
bV9yZW5kZXItPmhlaWdodCgpOworICAgIHJldHVybiByZW5kZXJlcigpLT5oZWlnaHQoKTsKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzU0LDggKzc1NCw4IEBACiAKIHZvaWQgSFRNTEZy
YW1lU2V0RWxlbWVudEltcGw6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnRJbXBsICpldnQpCiB7
Ci0gICAgaWYgKGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgIW5vcmVzaXplICYmIG1fcmVuZGVyKSB7
Ci0gICAgICAgIHN0YXRpY19jYXN0PGtodG1sOjpSZW5kZXJGcmFtZVNldCAqPihtX3JlbmRlcikt
PnVzZXJSZXNpemUoc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihldnQpKTsKKyAgICBpZiAo
ZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiAhbm9yZXNpemUgJiYgcmVuZGVyZXIoKSkgeworICAgICAg
ICBzdGF0aWNfY2FzdDxraHRtbDo6UmVuZGVyRnJhbWVTZXQgKj4ocmVuZGVyZXIoKSktPnVzZXJS
ZXNpemUoc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihldnQpKTsKICAgICAgICAgZXZ0LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOwogICAgIH0KIApAQCAtNzY0LDkgKzc2NCw4IEBACiAKIHZvaWQg
SFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OnJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSBjaCApCiB7
Ci0gICAgaWYgKGNoYW5nZWQoKSAmJiBtX3JlbmRlcikgewotICAgICAgICBtX3JlbmRlci0+c2V0
TmVlZHNMYXlvdXQodHJ1ZSk7Ci0vLyAgICAgICAgIG1fcmVuZGVyLT5sYXlvdXQoKTsKKyAgICBp
ZiAoY2hhbmdlZCgpICYmIHJlbmRlcmVyKCkpIHsKKyAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7CiAgICAgICAgIHNldENoYW5nZWQoZmFsc2UpOwogICAgIH0KICAgICBI
VE1MRWxlbWVudEltcGw6OnJlY2FsY1N0eWxlKCBjaCApOwpAQCAtOTM5LDEzICs5MzgsMTMgQEAK
ICAgICBIVE1MRWxlbWVudEltcGw6OmF0dGFjaCgpOwogCiAgICAgRnJhbWUgKmZyYW1lID0gZ2V0
RG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAobV9yZW5kZXIgJiYgZnJhbWUpIHsKKyAgICBp
ZiAocmVuZGVyZXIoKSAmJiBmcmFtZSkgewogICAgICAgICAvLyB3ZSBuZWVkIGEgdW5pcXVlIG5h
bWUgZm9yIGV2ZXJ5IGZyYW1lIGluIHRoZSBmcmFtZXNldC4gSG9wZSB0aGF0J3MgdW5pcXVlIGVu
b3VnaC4KICAgICAgICAgZnJhbWUtPmluY3JlbWVudEZyYW1lQ291bnQoKTsKICAgICAgICAgaWYg
KG1fbmFtZS5pc0VtcHR5KCkgfHwgZnJhbWUtPmZyYW1lRXhpc3RzKG1fbmFtZS5xc3RyaW5nKCkp
KQogICAgICAgICAgICAgbV9uYW1lID0gQXRvbWljU3RyaW5nKGZyYW1lLT5yZXF1ZXN0RnJhbWVO
YW1lKCkpOwogCi0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihtX3JlbmRl
ciktPnVwZGF0ZVdpZGdldCgpOworICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0
Kj4ocmVuZGVyZXIoKSktPnVwZGF0ZVdpZGdldCgpOwogICAgICAgICBuZWVkV2lkZ2V0VXBkYXRl
ID0gZmFsc2U7CiAgICAgfQogfQpAQCAtOTUzLDcgKzk1Miw4IEBACiB2b2lkIEhUTUxJRnJhbWVF
bGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoICkKIHsKICAgICBpZiAobmVl
ZFdpZGdldFVwZGF0ZSkgewotICAgICAgICBpZihtX3JlbmRlcikgIHN0YXRpY19jYXN0PFJlbmRl
clBhcnRPYmplY3QqPihtX3JlbmRlciktPnVwZGF0ZVdpZGdldCgpOworICAgICAgICBpZiAocmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihyZW5k
ZXJlcigpKS0+dXBkYXRlV2lkZ2V0KCk7CiAgICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSBmYWxz
ZTsKICAgICB9CiAgICAgSFRNTEVsZW1lbnRJbXBsOjpyZWNhbGNTdHlsZSggY2ggKTsKSW5kZXg6
IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkocmV2aXNpb24gMTIzMDkpCisrKyBX
ZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTksNyArMTU5LDggQEAKIHsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0
dHItPm5hbWUoKTsKICAgICBpZiAoYXR0ck5hbWUgPT0gYWx0QXR0cikgewotICAgICAgICBpZiAo
bV9yZW5kZXIpIHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4obV9yZW5kZXIpLT51cGRhdGVBbHRU
ZXh0KCk7CisgICAgICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
UmVuZGVySW1hZ2UqPihyZW5kZXJlcigpKS0+dXBkYXRlQWx0VGV4dCgpOwogICAgIH0gZWxzZSBp
ZiAoYXR0ck5hbWUgPT0gc3JjQXR0cikgewogICAgICAgICBtX2ltYWdlTG9hZGVyLnVwZGF0ZUZy
b21FbGVtZW50KCk7CiAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIpIHsKQEAg
LTI1OCw3ICsyNTksNyBAQAogCiBpbnQgSFRNTEltYWdlRWxlbWVudEltcGw6OndpZHRoKGJvb2wg
aWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBjb25zdAogewotICAgIGlmICghbV9yZW5kZXIpIHsK
KyAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBm
aXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKICAgICAgICAgYm9vbCBvazsKICAgICAg
ICAgaW50IHdpZHRoID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikucXN0cmluZygpLnRvSW50KCZv
ayk7CkBAIC0yNzcsMTIgKzI3OCwxMiBAQAogICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXQo
KTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9yZW5kZXIgPyBtX3JlbmRlci0+Y29udGVudFdpZHRo
KCkgOiAwOworICAgIHJldHVybiByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+Y29udGVudFdpZHRo
KCkgOiAwOwogfQogCiBpbnQgSFRNTEltYWdlRWxlbWVudEltcGw6OmhlaWdodChib29sIGlnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QKIHsKLSAgICBpZiAoIW1fcmVuZGVyKSB7CisgICAg
aWYgKCFyZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3Qg
Zm9yIGFuIGV4cGxpY2l0IHBpeGVsIHZhbHVlCiAgICAgICAgIGJvb2wgb2s7CiAgICAgICAgIGlu
dCBoZWlnaHQgPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikucXN0cmluZygpLnRvSW50KCZvayk7
CkBAIC0zMDEsNyArMzAyLDcgQEAKICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0KCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG1fcmVuZGVyID8gbV9yZW5kZXItPmNvbnRlbnRIZWlnaHQoKSA6
IDA7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkgPyByZW5kZXJlcigpLT5jb250ZW50SGVpZ2h0KCkg
OiAwOwogfQogCiBib29sIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjppc1VSTEF0dHJpYnV0ZShBdHRy
aWJ1dGVJbXBsICphdHRyKSBjb25zdApJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZG9j
dW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmgJKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZG9j
dW1lbnRpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDExICs4Myw2IEBACiAgICAgSFRNTEVs
ZW1lbnRJbXBsICpib2R5RWxlbWVudDsKICAgICBIVE1MRWxlbWVudEltcGwgKmh0bWxFbGVtZW50
OwogCi1wcm90ZWN0ZWQgc2xvdHM6Ci0gICAgLyoqCi0gICAgICogUmVwYWludHMsIHNvIHRoYXQg
YWxsIGxpbmtzIGdldCB0aGUgcHJvcGVyIGNvbG9yCi0gICAgICovCi0gICAgdm9pZCBzbG90SGlz
dG9yeUNoYW5nZWQoKTsKIHByaXZhdGU6CiAgICAgSFRNTENvbGxlY3Rpb25JbXBsOjpDb2xsZWN0
aW9uSW5mbyBtX2NvbGxlY3Rpb25faW5mb1tIVE1MQ29sbGVjdGlvbkltcGw6Ok5VTV9DQUNIRUFC
TEVfVFlQRVNdOwogCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCShyZXZpc2lvbiAx
MjMwOSkKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwNiwxMiArMTAwNiwxMSBAQAogICAgICAgICAvLyBUaGlzIHdpbGwgYWxzbyBhZmZl
Y3QgaG93IHdlIHVsdGltYXRlbHkgcmVwYXJlbnQgdGhlIGJsb2NrLCBzaW5jZSB3ZSB3YW50IGl0
IHRvIGVuZCB1cAogICAgICAgICAvLyB1bmRlciB0aGUgcmVvcGVuZWQgcmVzaWR1YWwgdGFncyAo
ZS5nLiwgdGhlIDxpPiBpbiB0aGUgYWJvdmUgZXhhbXBsZS4pCiAgICAgICAgIE5vZGVJbXBsKiBw
cmV2Tm9kZSA9IDA7Ci0gICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IDA7CiAgICAgICAgIGN1
cnJFbGVtID0gbWF4RWxlbTsKICAgICAgICAgd2hpbGUgKGN1cnJFbGVtLT5ub2RlICE9IHJlc2lk
dWFsRWxlbSkgewogICAgICAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+
bm9kZS0+bG9jYWxOYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgY2xvbmUg
b2YgdGhpcyBlbGVtZW50LgotICAgICAgICAgICAgICAgIGN1cnJOb2RlID0gY3VyckVsZW0tPm5v
ZGUtPmNsb25lTm9kZShmYWxzZSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGVJbXBsPiBj
dXJyTm9kZSA9IGN1cnJFbGVtLT5ub2RlLT5jbG9uZU5vZGUoZmFsc2UpOwogCiAgICAgICAgICAg
ICAgICAgLy8gQ2hhbmdlIHRoZSBzdGFjayBlbGVtZW50J3Mgbm9kZSB0byBwb2ludCB0byB0aGUg
Y2xvbmUuCiAgICAgICAgICAgICAgICAgY3VyckVsZW0tPm5vZGUgPSBjdXJyTm9kZTsKQEAgLTEw
MjAsOSArMTAxOSw5IEBACiAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlKQogICAgICAgICAg
ICAgICAgICAgICBjdXJyTm9kZS0+YXBwZW5kQ2hpbGQocHJldk5vZGUsIGV4Y2VwdGlvbkNvZGUp
OwogICAgICAgICAgICAgICAgIGVsc2UgLy8gVGhlIG5ldyBwYXJlbnQgZm9yIHRoZSBibG9jayBl
bGVtZW50IGlzIGdvaW5nIHRvIGJlIHRoZSBpbm5lcm1vc3QgY2xvbmUuCi0gICAgICAgICAgICAg
ICAgICAgIHBhcmVudEVsZW0gPSBjdXJyTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50
RWxlbSA9IGN1cnJOb2RlLmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9IGN1cnJOb2RlOworICAgICAgICAgICAgICAgIHBy
ZXZOb2RlID0gY3Vyck5vZGUuZ2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGN1cnJFbGVtID0gY3VyckVsZW0tPm5leHQ7CkBAIC0xMDQ0LDcgKzEwNDMsNyBA
QAogICAgIGJsb2NrRWxlbS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChibG9ja0VsZW0sIGV4
Y2VwdGlvbkNvZGUpOwogICAgICAgICAKICAgICAvLyBTdGVwIDI6IENsb25lIHxyZXNpZHVhbEVs
ZW18LgotICAgIE5vZGVJbXBsKiBuZXdOb2RlID0gcmVzaWR1YWxFbGVtLT5jbG9uZU5vZGUoZmFs
c2UpOyAvLyBTaGFsbG93IGNsb25lLiBXZSBkb24ndCBwaWNrIHVwIHRoZSBzYW1lIGtpZHMuCisg
ICAgUGFzc1JlZlB0cjxOb2RlSW1wbD4gbmV3Tm9kZSA9IHJlc2lkdWFsRWxlbS0+Y2xvbmVOb2Rl
KGZhbHNlKTsgLy8gU2hhbGxvdyBjbG9uZS4gV2UgZG9uJ3QgcGljayB1cCB0aGUgc2FtZSBraWRz
LgogCiAgICAgLy8gU3RlcCAzOiBQbGFjZSB8YmxvY2tFbGVtfCdzIGNoaWxkcmVuIHVuZGVyIHxu
ZXdOb2RlfC4gIFJlbW92ZSBhbGwgb2YgdGhlIGNoaWxkcmVuIG9mIHxibG9ja0VsZW18CiAgICAg
Ly8gYmVmb3JlIHdlJ3ZlIHB1dCB8bmV3RWxlbXwgaW50byB0aGUgZG9jdW1lbnQuICBUaGF0IHdh
eSB3ZSdsbCBvbmx5IGRvIG9uZSBhdHRhY2htZW50IG9mIGFsbApAQCAtMTExMyw3ICsxMTEyLDcg
QEAKICAgICAvLyBMb29wIGZvciBlYWNoIHRhZyB0aGF0IG5lZWRzIHRvIGJlIHJlb3BlbmVkLgog
ICAgIHdoaWxlIChlbGVtKSB7CiAgICAgICAgIC8vIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2Yg
dGhlIERPTSBub2RlIGZvciB0aGlzIGVsZW1lbnQuCi0gICAgICAgIE5vZGVJbXBsKiBuZXdOb2Rl
ID0gZWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsgCisgICAgICAgIFJlZlB0cjxOb2RlSW1w
bD4gbmV3Tm9kZSA9IGVsZW0tPm5vZGUtPmNsb25lTm9kZShmYWxzZSk7IAogCiAgICAgICAgIC8v
IEFwcGVuZCB0aGUgbmV3IG5vZGUuIEluIHRoZSBtYWxmb3JtZWQgdGFibGUgY2FzZSwgd2UgbmVl
ZCB0byBpbnNlcnQgYmVmb3JlIHRoZSB0YWJsZSwKICAgICAgICAgLy8gd2hpY2ggd2lsbCBiZSB0
aGUgbGFzdCBjaGlsZC4KQEAgLTExMzcsNyArMTEzNiw3IEBACiAgICAgICAgIG1hbGZvcm1lZFRh
YmxlUGFyZW50ID0gMDsKIAogICAgICAgICAvLyBVcGRhdGUgfGN1cnJlbnR8IG1hbnVhbGx5IHRv
IHBvaW50IHRvIHRoZSBuZXcgbm9kZS4KLSAgICAgICAgc2V0Q3VycmVudChuZXdOb2RlKTsKKyAg
ICAgICAgc2V0Q3VycmVudChuZXdOb2RlLmdldCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFk
dmFuY2UgdG8gdGhlIG5leHQgdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgICAg
IEhUTUxTdGFja0VsZW0qIG5leHQgPSBlbGVtLT5uZXh0OwpJbmRleDogV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfaW5saW5laW1wbC5jcHAJKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfaW5saW5laW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDIxICs2OCwyMSBA
QAogCiAgICAgLy8gRklYTUU6IEV2ZW4gaWYgd2UgYXJlIG5vdCB2aXNpYmxlLCB3ZSBtaWdodCBo
YXZlIGEgY2hpbGQgdGhhdCBpcyB2aXNpYmxlLgogICAgIC8vIERhdmUgd2FudHMgdG8gZml4IHRo
YXQgc29tZSBkYXkgd2l0aCBhICJoYXMgdmlzaWJsZSBjb250ZW50IiBmbGFnIG9yIHRoZSBsaWtl
LgotICAgIGlmICghKG1faXNMaW5rICYmIG1fcmVuZGVyICYmIG1fcmVuZGVyLT5zdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkpCisgICAgaWYgKCEobV9pc0xpbmsgJiYgcmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEJlZm9yZSBjYWxsaW5nIGFic29sdXRlUmVjdHMs
IGNoZWNrIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHJlbmRlcmVyCiAgICAgLy8gb3Ig
b25lIG9mIHRoZSBjb250aW51YXRpb25zIGlzIG5vbi1lbXB0eSwgc2luY2UgdGhpcyBpcyBhIGZh
c3RlciBjaGVjayBhbmQKICAgICAvLyBhbG1vc3QgYWx3YXlzIHJldHVybnMgdHJ1ZS4KLSAgICBm
b3IgKFJlbmRlck9iamVjdCAqciA9IG1fcmVuZGVyOyByOyByID0gci0+Y29udGludWF0aW9uKCkp
IHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCAqciA9IHJlbmRlcmVyKCk7IHI7IHIgPSByLT5jb250
aW51YXRpb24oKSkgewogICAgICAgICBpZiAoci0+d2lkdGgoKSA+IDAgJiYgci0+aGVpZ2h0KCkg
PiAwKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgUVZhbHVlTGlzdDxJ
bnRSZWN0PiByZWN0czsKICAgICBpbnQgeCA9IDAsIHkgPSAwOwotICAgIG1fcmVuZGVyLT5hYnNv
bHV0ZVBvc2l0aW9uKHgsIHkpOwotICAgIG1fcmVuZGVyLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLCB4
LCB5KTsKKyAgICByZW5kZXJlcigpLT5hYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOworICAgIHJlbmRl
cmVyKCktPmFic29sdXRlUmVjdHMocmVjdHMsIHgsIHkpOwogICAgIGZvciAoUVZhbHVlTGlzdDxJ
bnRSZWN0Pjo6Q29uc3RJdGVyYXRvciBpdCA9IHJlY3RzLmJlZ2luKCk7IGl0ICE9IHJlY3RzLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIGlmICgoKml0KS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MRWxlbWVudEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MRWxlbWVudEltcGwuY3BwCShy
ZXZpc2lvbiAxMjMwOSkKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MRWxlbWVudEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MCw5ICs5MCw5IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLU5v
ZGVJbXBsICpIVE1MRWxlbWVudEltcGw6OmNsb25lTm9kZShib29sIGRlZXApCitQYXNzUmVmUHRy
PE5vZGVJbXBsPiBIVE1MRWxlbWVudEltcGw6OmNsb25lTm9kZShib29sIGRlZXApCiB7Ci0gICAg
SFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVs
ZW1lbnQobV90YWdOYW1lLmxvY2FsTmFtZSgpLCBnZXREb2N1bWVudCgpLCAwLCBmYWxzZSk7Cisg
ICAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudEltcGw+IGNsb25lID0gSFRNTEVsZW1lbnRGYWN0b3J5
OjpjcmVhdGVIVE1MRWxlbWVudChtX3RhZ05hbWUubG9jYWxOYW1lKCksIGdldERvY3VtZW50KCks
IDAsIGZhbHNlKTsKICAgICBpZiAoIWNsb25lKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTA1
LDcgKzEwNSw3IEBACiAgICAgY2xvbmUtPmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKHRoaXMp
OwogCiAgICAgaWYgKGRlZXApCi0gICAgICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZSk7CisgICAg
ICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CiAKICAgICByZXR1cm4gY2xvbmU7CiB9
CkBAIC02MTQsOSArNjE0LDkgQEAKICAgICBzZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCB2YWx1ZSk7
CiB9CiAKLVJlZlB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxFbGVtZW50SW1wbDo6Y2hpbGRy
ZW4oKQorUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxFbGVtZW50SW1wbDo6Y2hp
bGRyZW4oKQogewotICAgIHJldHVybiBSZWZQdHI8SFRNTENvbGxlY3Rpb25JbXBsPihuZXcgSFRN
TENvbGxlY3Rpb25JbXBsKHRoaXMsIEhUTUxDb2xsZWN0aW9uSW1wbDo6Tk9ERV9DSElMRFJFTikp
OworICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb25JbXBsKHRoaXMsIEhUTUxDb2xsZWN0aW9u
SW1wbDo6Tk9ERV9DSElMRFJFTik7CiB9CiAKIC8vIERPTSBTZWN0aW9uIDEuMS4xCkluZGV4OiBX
ZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkocmV2aXNpb24gMTIzMDkpCisrKyBX
ZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAzLDcgKzIwMyw3IEBACiAgICAgaWYgKGFwcGxldEluc3RhbmNlKQogICAgICAgICByZXR1cm4g
YXBwbGV0SW5zdGFuY2U7CiAgICAgCi0gICAgUmVuZGVyQXBwbGV0ICpyID0gc3RhdGljX2Nhc3Q8
UmVuZGVyQXBwbGV0Kj4obV9yZW5kZXIpOworICAgIFJlbmRlckFwcGxldCAqciA9IHN0YXRpY19j
YXN0PFJlbmRlckFwcGxldCo+KHJlbmRlcmVyKCkpOwogICAgIGlmIChyKSB7CiAgICAgICAgIHIt
PmNyZWF0ZVdpZGdldElmTmVjZXNzYXJ5KCk7CiAgICAgICAgIGlmIChyLT53aWRnZXQoKSkKQEAg
LTIxOCw5ICsyMTgsOCBAQAogewogICAgIC8vIFRoZSBwYXJzZXIganVzdCByZWFjaGVkIDwvYXBw
bGV0Piwgc28gYWxsIHRoZSBwYXJhbXMgYXJlIGF2YWlsYWJsZSBub3cuCiAgICAgbV9hbGxQYXJh
bXNBdmFpbGFibGUgPSB0cnVlOwotICAgIGlmKCBtX3JlbmRlciApCi0gICAgICAgIG1fcmVuZGVy
LT5zZXROZWVkc0xheW91dCh0cnVlKTsgLy8gVGhpcyB3aWxsIGNhdXNlIGl0IHRvIGNyZWF0ZSBp
dHMgd2lkZ2V0ICYgdGhlIEphdmEgYXBwbGV0Ci0gICAgCisgICAgaWYgKHJlbmRlcmVyKCkpCisg
ICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOyAvLyBUaGlzIHdpbGwgY2F1
c2UgaXQgdG8gY3JlYXRlIGl0cyB3aWRnZXQgJiB0aGUgSmF2YSBhcHBsZXQKICAgICBIVE1MRWxl
bWVudEltcGw6OmNsb3NlUmVuZGVyZXIoKTsKIH0KIApAQCAtMzYzLDcgKzM2Miw3IEBACiAgICAg
aWYgKGVtYmVkSW5zdGFuY2UpCiAgICAgICAgIHJldHVybiBlbWJlZEluc3RhbmNlOwogICAgIAot
ICAgIFJlbmRlck9iamVjdCAqciA9IG1fcmVuZGVyOworICAgIFJlbmRlck9iamVjdCAqciA9IHJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyKSB7CiAgICAgICAgIE5vZGVJbXBsICpwID0gcGFyZW50Tm9k
ZSgpOwogICAgICAgICBpZiAocCAmJiBwLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCkBAIC00ODMs
OSArNDgyLDggQEAKIHsKICAgICBIVE1MRWxlbWVudEltcGw6OmF0dGFjaCgpOwogCi0gICAgaWYg
KG1fcmVuZGVyKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihtX3Jl
bmRlciktPnVwZGF0ZVdpZGdldCgpOwotICAgIH0KKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8UmVuZGVyUGFydE9iamVjdCo+KHJlbmRlcmVyKCkpLT51cGRhdGVXaWRn
ZXQoKTsKIH0KIAogdm9pZCBIVE1MRW1iZWRFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKQpAQCAtNTQzLDcgKzU0MSw3IEBACiAgICAgaWYgKG9iamVjdEluc3RhbmNlKQogICAgICAg
ICByZXR1cm4gb2JqZWN0SW5zdGFuY2U7CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0ICpyID0gbV9y
ZW5kZXIpIHsKKyAgICBpZiAoUmVuZGVyT2JqZWN0ICpyID0gcmVuZGVyZXIoKSkgewogICAgICAg
ICBpZiAoci0+aXNXaWRnZXQoKSkgewogICAgICAgICAgICAgaWYgKFFXaWRnZXQgKndpZGdldCA9
IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihyKS0+d2lkZ2V0KCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBDYWxsIGludG8gdGhlIGZyYW1lIChhbmQgb3ZlciB0aGUgYnJpZGdlKSB0byBwdWxs
IHRoZSBCaW5kaW5nczo6SW5zdGFuY2UKQEAgLTU5Niw3ICs1OTQsNyBAQAogICAgICAgICBwb3Mg
PSBzZXJ2aWNlVHlwZS5maW5kKCAiOyIgKTsKICAgICAgICAgaWYgKCBwb3MhPS0xICkKICAgICAg
ICAgICBzZXJ2aWNlVHlwZSA9IHNlcnZpY2VUeXBlLmxlZnQoIHBvcyApOwotICAgICAgICBpZiAo
bV9yZW5kZXIpCisgICAgICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICAgIG5lZWRXaWRnZXRV
cGRhdGUgPSB0cnVlOwogICAgICAgICBpZiAoIWlzSW1hZ2VUeXBlKCkgJiYgbV9pbWFnZUxvYWRl
cikgewogICAgICAgICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVyOwpAQCAtNjA0LDkgKzYwMiw5IEBA
CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBkYXRhQXR0cikgewog
ICAgICAgICB1cmwgPSBraHRtbDo6cGFyc2VVUkwodmFsKS5xc3RyaW5nKCk7Ci0gICAgICAgIGlm
IChtX3JlbmRlcikKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgICAgbmVlZFdpZGdl
dFVwZGF0ZSA9IHRydWU7Ci0gICAgICAgIGlmIChtX3JlbmRlciAmJiBpc0ltYWdlVHlwZSgpKSB7
CisgICAgICAgIGlmIChyZW5kZXJlcigpICYmIGlzSW1hZ2VUeXBlKCkpIHsKICAgICAgICAgICBp
ZiAoIW1faW1hZ2VMb2FkZXIpCiAgICAgICAgICAgICAgIG1faW1hZ2VMb2FkZXIgPSBuZXcgSFRN
TEltYWdlTG9hZGVyKHRoaXMpOwogICAgICAgICAgIG1faW1hZ2VMb2FkZXItPnVwZGF0ZUZyb21F
bGVtZW50KCk7CkBAIC02MjUsNyArNjIzLDcgQEAKICAgICAgICAgYWRkSFRNTEFsaWdubWVudChh
dHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjbGFzc2lkQXR0cikgewogICAg
ICAgICBjbGFzc0lkID0gdmFsOwotICAgICAgICBpZiAobV9yZW5kZXIpCisgICAgICAgIGlmIChy
ZW5kZXJlcigpKQogICAgICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsKICAgICAgICAgc2V0SFRNTEV2ZW50
TGlzdGVuZXIobG9hZEV2ZW50LCBhdHRyKTsKQEAgLTY4NCw3ICs2ODIsNyBAQAogewogICAgIEhU
TUxFbGVtZW50SW1wbDo6YXR0YWNoKCk7CiAKLSAgICBpZiAobV9yZW5kZXIgJiYgIW1fdXNlRmFs
bGJhY2tDb250ZW50KSB7CisgICAgaWYgKHJlbmRlcmVyKCkgJiYgIW1fdXNlRmFsbGJhY2tDb250
ZW50KSB7CiAgICAgICAgIGlmIChpc0ltYWdlVHlwZSgpKSB7CiAgICAgICAgICAgICBpZiAoIW1f
aW1hZ2VMb2FkZXIpCiAgICAgICAgICAgICAgICAgbV9pbWFnZUxvYWRlciA9IG5ldyBIVE1MSW1h
Z2VMb2FkZXIodGhpcyk7CkBAIC02OTgsNyArNjk2LDcgQEAKICAgICAgICAgICAgICAgICAvLyBT
ZXQgbmVlZFdpZGdldFVwZGF0ZSB0byBmYWxzZSBiZWZvcmUgY2FsbGluZyB1cGRhdGVXaWRnZXQg
YmVjYXVzZSB1cGRhdGVXaWRnZXQgbWF5IGNhdXNlCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBt
ZXRob2Qgb3IgcmVjYWxjU3R5bGUgKHdoaWNoIGFsc28gY2FsbHMgdXBkYXRlV2lkZ2V0KSB0byBi
ZSBjYWxsZWQuCiAgICAgICAgICAgICAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihtX3JlbmRlciktPnVw
ZGF0ZVdpZGdldCgpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmpl
Y3QqPihyZW5kZXJlcigpKS0+dXBkYXRlV2lkZ2V0KCk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIG5lZWRXaWRnZXRVcGRhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAg
IHNldENoYW5nZWQoKTsKQEAgLTcyOCw3ICs3MjYsNyBAQAogCiB2b2lkIEhUTUxPYmplY3RFbGVt
ZW50SW1wbDo6ZGV0YWNoKCkKIHsKLSAgICBpZiAoYXR0YWNoZWQoKSAmJiBtX3JlbmRlciAmJiAh
bV91c2VGYWxsYmFja0NvbnRlbnQpIHsKKyAgICBpZiAoYXR0YWNoZWQoKSAmJiByZW5kZXJlcigp
ICYmICFtX3VzZUZhbGxiYWNrQ29udGVudCkgewogICAgICAgICAvLyBVcGRhdGUgdGhlIHdpZGdl
dCB0aGUgbmV4dCB0aW1lIHdlIGF0dGFjaCAoZGV0YWNoaW5nIGRlc3Ryb3lzIHRoZSBwbHVnaW4p
LgogICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKICAgICB9CkBAIC03NjAsNyArNzU4
LDcgQEAKIAogdm9pZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnJlY2FsY1N0eWxlKFN0eWxlQ2hh
bmdlIGNoKQogewotICAgIGlmICghbV91c2VGYWxsYmFja0NvbnRlbnQgJiYgbmVlZFdpZGdldFVw
ZGF0ZSAmJiBtX3JlbmRlciAmJiAhaXNJbWFnZVR5cGUoKSkgeworICAgIGlmICghbV91c2VGYWxs
YmFja0NvbnRlbnQgJiYgbmVlZFdpZGdldFVwZGF0ZSAmJiByZW5kZXJlcigpICYmICFpc0ltYWdl
VHlwZSgpKSB7CiAgICAgICAgIGRldGFjaCgpOwogICAgICAgICBhdHRhY2goKTsKICAgICB9Cklu
ZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvSFRNTElucHV0RWxlbWVudEltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MSW5wdXRFbGVtZW50SW1wbC5jcHAJKHJldmlz
aW9uIDEyMzA5KQorKysgV2ViQ29yZS9raHRtbC9odG1sL0hUTUxJbnB1dEVsZW1lbnRJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDE2ICsyNzksMTcgQEAKIAogaW50IEhUTUxJbnB1dEVs
ZW1lbnRJbXBsOjpzZWxlY3Rpb25TdGFydCgpCiB7Ci0gICAgaWYgKCFtX3JlbmRlcikgcmV0dXJu
IDA7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNlIFBBU1NXT1JEOgogICAgICAgICBjYXNlIFRF
WFQ6Ci0gICAgICAgICAgICBpZiAobV9yZW5kZXItPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBU
ZXh0RmllbGRBcHBlYXJhbmNlKQotICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dEZpZWxkICo+KG1fcmVuZGVyKS0+c2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAg
ICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkQXBw
ZWFyYW5jZSkKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRG
aWVsZCAqPihyZW5kZXJlcigpKS0+c2VsZWN0aW9uU3RhcnQoKTsKICAgICAgICAgICAgIC8vIEZh
bGwgdGhyb3VnaCBmb3IgdGV4dCBmaWVsZHMgdGhhdCBkb24ndCBzcGVjaWZ5IGFwcGVhcmFuY2UK
ICAgICAgICAgY2FzZSBTRUFSQ0g6Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVu
ZGVyTGluZUVkaXQgKj4obV9yZW5kZXIpLT5zZWxlY3Rpb25TdGFydCgpOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckxpbmVFZGl0ICo+KHJlbmRlcmVyKCkpLT5zZWxlY3Rp
b25TdGFydCgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtMjk3LDE2ICsyOTgsMTcgQEAKIAogaW50IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZWxlY3Rp
b25FbmQoKQogewotICAgIGlmICghbV9yZW5kZXIpIHJldHVybiAwOworICAgIGlmICghcmVuZGVy
ZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAg
ICAgICAgY2FzZSBQQVNTV09SRDoKICAgICAgICAgY2FzZSBURVhUOgotICAgICAgICAgICAgaWYg
KG1fcmVuZGVyLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkQXBwZWFyYW5jZSkK
LSAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRGaWVsZCAqPiht
X3JlbmRlciktPnNlbGVjdGlvbkVuZCgpOworICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCktPnN0
eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlKQorICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEZpZWxkICo+KHJlbmRlcmVyKCkpLT5z
ZWxlY3Rpb25FbmQoKTsKICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBmb3IgdGV4dCBmaWVs
ZHMgdGhhdCBkb24ndCBzcGVjaWZ5IGFwcGVhcmFuY2UKICAgICAgICAgY2FzZSBTRUFSQ0g6Ci0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQgKj4obV9yZW5kZXIp
LT5zZWxlY3Rpb25FbmQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJM
aW5lRWRpdCAqPihyZW5kZXJlcigpKS0+c2VsZWN0aW9uRW5kKCk7CiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMTUsMTYgKzMxNywxNyBAQAogCiB2b2lk
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCiB7Ci0g
ICAgaWYgKCFtX3JlbmRlcikgcmV0dXJuOworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgUEFTU1dP
UkQ6CiAgICAgICAgIGNhc2UgVEVYVDoKLSAgICAgICAgICAgIGlmIChtX3JlbmRlci0+c3R5bGUo
KS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZEFwcGVhcmFuY2UpCi0gICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclRleHRGaWVsZCAqPihtX3JlbmRlciktPnNldFNlbGVjdGlvblN0
YXJ0KHN0YXJ0KTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gVGV4dEZpZWxkQXBwZWFyYW5jZSkKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dEZpZWxkICo+KHJlbmRlcmVyKCkpLT5zZXRTZWxlY3Rpb25TdGFydChzdGFy
dCk7CiAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggZm9yIHRleHQgZmllbGRzIHRoYXQgZG9u
J3Qgc3BlY2lmeSBhcHBlYXJhbmNlCiAgICAgICAgIGNhc2UgU0VBUkNIOgotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQgKj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rpb25TdGFy
dChzdGFydCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCAqPihyZW5k
ZXJlcigpKS0+c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzMywxNiArMzM2LDE3IEBA
CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlvbkVuZChpbnQgZW5kKQog
ewotICAgIGlmICghbV9yZW5kZXIpIHJldHVybjsKKyAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNlIFBB
U1NXT1JEOgogICAgICAgICBjYXNlIFRFWFQ6Ci0gICAgICAgICAgICBpZiAobV9yZW5kZXItPnN0
eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlKQotICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0RmllbGQgKj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rp
b25FbmQoZW5kKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gVGV4dEZpZWxkQXBwZWFyYW5jZSkKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dEZpZWxkICo+KHJlbmRlcmVyKCkpLT5zZXRTZWxlY3Rpb25FbmQoZW5kKTsK
ICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBmb3IgdGV4dCBmaWVsZHMgdGhhdCBkb24ndCBz
cGVjaWZ5IGFwcGVhcmFuY2UKICAgICAgICAgY2FzZSBTRUFSQ0g6Ci0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCAqPihtX3JlbmRlciktPnNldFNlbGVjdGlvbkVuZChlbmQp
OworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGluZUVkaXQgKj4ocmVuZGVyZXIoKSkt
PnNldFNlbGVjdGlvbkVuZChlbmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTM1MSwxOSArMzU1LDIwIEBACiAKIHZvaWQgSFRN
TElucHV0RWxlbWVudEltcGw6OnNlbGVjdCggICkKIHsKLSAgICBpZighbV9yZW5kZXIpIHJldHVy
bjsKKyAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKIAogICAgIHN3aXRjaCAo
bV90eXBlKSB7CiAgICAgICAgIGNhc2UgRklMRToKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlckZpbGVCdXR0b24qPihtX3JlbmRlciktPnNlbGVjdCgpOworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyRmlsZUJ1dHRvbio+KHJlbmRlcmVyKCkpLT5zZWxlY3QoKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBBU1NXT1JEOgogICAgICAgICBjYXNlIFRFWFQ6Ci0g
ICAgICAgICAgICBpZiAobV9yZW5kZXItPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBUZXh0Rmll
bGRBcHBlYXJhbmNlKQotICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Rmll
bGQgKj4obV9yZW5kZXIpLT5zZWxlY3QoKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkQXBwZWFyYW5jZSkKKyAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEZpZWxkICo+KHJlbmRlcmVyKCkpLT5zZWxlY3Qo
KTsKICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBmb3IgdGV4dCBmaWVsZHMgdGhhdCBkb24n
dCBzcGVjaWZ5IGFwcGVhcmFuY2UKICAgICAgICAgY2FzZSBTRUFSQ0g6Ci0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCo+KG1fcmVuZGVyKS0+c2VsZWN0KCk7CisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCo+KHJlbmRlcmVyKCkpLT5zZWxlY3QoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJVVFRPTjoKICAgICAgICAgY2FzZSBD
SEVDS0JPWDoKQEAgLTM4MCwxNiArMzg1LDE3IEBACiAKIHZvaWQgSFRNTElucHV0RWxlbWVudElt
cGw6OnNldFNlbGVjdGlvblJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKIHsKLSAgICBpZiAoIW1f
cmVuZGVyKSByZXR1cm47CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBQQVNTV09SRDoKICAgICAg
ICAgY2FzZSBURVhUOgotICAgICAgICAgICAgaWYgKG1fcmVuZGVyLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gVGV4dEZpZWxkQXBwZWFyYW5jZSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0RmllbGQgKj4obV9yZW5kZXIpLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwg
ZW5kKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkg
PT0gVGV4dEZpZWxkQXBwZWFyYW5jZSkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0RmllbGQgKj4ocmVuZGVyZXIoKSktPnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQp
OwogICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIGZvciB0ZXh0IGZpZWxkcyB0aGF0IGRvbid0
IHNwZWNpZnkgYXBwZWFyYW5jZQogICAgICAgICBjYXNlIFNFQVJDSDoKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PFJlbmRlckxpbmVFZGl0ICo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uUmFuZ2Uo
c3RhcnQsIGVuZCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJMaW5lRWRpdCAqPihy
ZW5kZXJlcigpKS0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTExLDEwICs1
MTcsMTAgQEAKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikgewogICAg
ICAgICBtX3NpemUgPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAy
MDsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbHRBdHRyKSB7Ci0gICAgICAgIGlm
IChtX3JlbmRlciAmJiBtX3R5cGUgPT0gSU1BR0UpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJJbWFnZSo+KG1fcmVuZGVyKS0+dXBkYXRlQWx0VGV4dCgpOworICAgICAgICBpZiAocmVu
ZGVyZXIoKSAmJiBtX3R5cGUgPT0gSU1BR0UpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJJbWFnZSo+KHJlbmRlcmVyKCkpLT51cGRhdGVBbHRUZXh0KCk7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gc3JjQXR0cikgewotICAgICAgICBpZiAobV9yZW5kZXIgJiYgbV90eXBl
ID09IElNQUdFKSB7CisgICAgICAgIGlmIChyZW5kZXJlcigpICYmIG1fdHlwZSA9PSBJTUFHRSkg
ewogICAgICAgICAgICAgaWYgKCFtX2ltYWdlTG9hZGVyKQogICAgICAgICAgICAgICAgIG1faW1h
Z2VMb2FkZXIgPSBuZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpOwogICAgICAgICAgICAgbV9pbWFn
ZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAgLTg3OSw4ICs4ODUsOCBAQAogICAgIG1f
dmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKICAgICBpZiAoc3RvcmVzVmFsdWVTZXBhcmF0
ZUZyb21BdHRyaWJ1dGUoKSkgewogICAgICAgICBtX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIGlm
IChtX3JlbmRlcikKLSAgICAgICAgICAgIG1fcmVuZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwor
ICAgICAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZy
b21FbGVtZW50KCk7CiAgICAgICAgIHNldENoYW5nZWQoKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCB2YWx1ZSk7CkBAIC05ODksMTcgKzk5NSwxNyBAQAog
CiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1w
bCAqZXZ0KQogewotICAgIGlmIChtX3R5cGUgPT0gSU1BR0UgJiYgZXZ0LT5pc01vdXNlRXZlbnQo
KSAmJiBldnQtPnR5cGUoKSA9PSBjbGlja0V2ZW50ICYmIG1fcmVuZGVyKSB7CisgICAgaWYgKG1f
dHlwZSA9PSBJTUFHRSAmJiBldnQtPmlzTW91c2VFdmVudCgpICYmIGV2dC0+dHlwZSgpID09IGNs
aWNrRXZlbnQpIHsKICAgICAgICAgLy8gcmVjb3JkIHRoZSBtb3VzZSBwb3NpdGlvbiBmb3Igd2hl
biB3ZSBnZXQgdGhlIERPTUFjdGl2YXRlIGV2ZW50CiAgICAgICAgIE1vdXNlRXZlbnRJbXBsICpt
ZSA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oZXZ0KTsKICAgICAgICAgLy8gRklYTUU6
IFdlIGNvdWxkIGp1c3QgY2FsbCBvZmZzZXRYKCkgYW5kIG9mZnNldFkoKSBvbiB0aGUgZXZlbnQs
CiAgICAgICAgIC8vIGJ1dCB0aGF0J3MgY3VycmVudGx5IGJyb2tlbiwgc28gZm9yIG5vdyBkbyB0
aGUgY29tcHV0YXRpb24gaGVyZS4KLSAgICAgICAgaWYgKG1lLT5pc1NpbXVsYXRlZCgpIHx8ICFt
X3JlbmRlcikgeworICAgICAgICBpZiAobWUtPmlzU2ltdWxhdGVkKCkgfHwgIXJlbmRlcmVyKCkp
IHsKICAgICAgICAgICAgIHhQb3MgPSAwOwogICAgICAgICAgICAgeVBvcyA9IDA7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBpbnQgb2Zmc2V0WCwgb2Zmc2V0WTsKLSAgICAgICAgICAg
IG1fcmVuZGVyLT5hYnNvbHV0ZVBvc2l0aW9uKG9mZnNldFgsb2Zmc2V0WSk7CisgICAgICAgICAg
ICByZW5kZXJlcigpLT5hYnNvbHV0ZVBvc2l0aW9uKG9mZnNldFgsb2Zmc2V0WSk7CiAgICAgICAg
ICAgICB4UG9zID0gbWUtPmNsaWVudFgoKSAtIG9mZnNldFg7CiAgICAgICAgICAgICB5UG9zID0g
bWUtPmNsaWVudFkoKSAtIG9mZnNldFk7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
aHRtbC9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIzMDkpCisr
KyBXZWJDb3JlL2todG1sL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudEltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NCw0MCArNzQsNDAgQEAKIAogaW50IEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBs
OjpzZWxlY3Rpb25TdGFydCgpCiB7Ci0gICAgaWYgKG1fcmVuZGVyKQotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEgKj4obV9yZW5kZXIpLT5zZWxlY3Rpb25TdGFydCgp
OworICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dEFyZWEgKj4ocmVuZGVyZXIoKSktPnNlbGVjdGlvblN0YXJ0KCk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKIGludCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2VsZWN0aW9uRW5kKCkKIHsKLSAg
ICBpZiAobV9yZW5kZXIpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJl
YSAqPihtX3JlbmRlciktPnNlbGVjdGlvbkVuZCgpOworICAgIGlmIChyZW5kZXJlcigpKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEgKj4ocmVuZGVyZXIoKSktPnNl
bGVjdGlvbkVuZCgpOwogICAgIHJldHVybiAwOwogfQogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsOjpzZXRTZWxlY3Rpb25TdGFydChpbnQgc3RhcnQpCiB7Ci0gICAgaWYgKG1fcmVuZGVy
KQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSAqPihtX3JlbmRlciktPnNldFNl
bGVjdGlvblN0YXJ0KHN0YXJ0KTsKKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGV4dEFyZWEgKj4ocmVuZGVyZXIoKSktPnNldFNlbGVjdGlvblN0YXJ0KHN0
YXJ0KTsKIH0KIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2V0U2VsZWN0aW9uRW5k
KGludCBlbmQpCiB7Ci0gICAgaWYgKG1fcmVuZGVyKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0QXJlYSAqPihtX3JlbmRlciktPnNldFNlbGVjdGlvbkVuZChlbmQpOworICAgIGlmIChy
ZW5kZXJlcigpKQorICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSAqPihyZW5kZXJl
cigpKS0+c2V0U2VsZWN0aW9uRW5kKGVuZCk7CiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVu
dEltcGw6OnNlbGVjdCggICkKIHsKLSAgICBpZiAobV9yZW5kZXIpCi0gICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlclRleHRBcmVhKj4obV9yZW5kZXIpLT5zZWxlY3QoKTsKKyAgICBpZiAocmVuZGVy
ZXIoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihyZW5kZXJlcigpKS0+
c2VsZWN0KCk7CiB9CiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFNlbGVjdGlv
blJhbmdlKGludCBzdGFydCwgaW50IGVuZCkKIHsKLSAgICBpZiAobV9yZW5kZXIpCi0gICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclRleHRBcmVhICo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uUmFu
Z2Uoc3RhcnQsIGVuZCk7CisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclRleHRBcmVhICo+KHJlbmRlcmVyKCkpLT5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwg
ZW5kKTsKIH0KIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6Y2hpbGRyZW5DaGFuZ2Vk
KCkKQEAgLTE3MSw5ICsxNzEsOSBAQAogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjp1
cGRhdGVWYWx1ZSgpCiB7Ci0gICAgaWYgKCAhbV92YWx1ZUlzVmFsaWQgKSB7Ci0gICAgICAgIGlm
ICggbV9yZW5kZXIgKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dEFyZWEqPiggbV9yZW5kZXIgKS0+dGV4dCgpLnFzdHJpbmcoKTsKKyAgICBpZiAoIW1fdmFs
dWVJc1ZhbGlkKSB7CisgICAgICAgIGlmIChyZW5kZXJlcigpKSB7CisgICAgICAgICAgICBtX3Zh
bHVlID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dEFyZWEqPihyZW5kZXJlcigpKS0+dGV4dCgpLnFz
dHJpbmcoKTsKICAgICAgICAgICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSB0cnVlOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV92YWx1ZSA9IGRlZmF1bHRWYWx1ZSgpLnFzdHJp
bmcoKTsKQEAgLTE5NCw4ICsxOTQsOCBAQAogICAgIG1fdmFsdWUgPSB2YWx1ZS5xc3RyaW5nKCk7
CiAgICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdmFsdWVJc1ZhbGlk
ID0gdHJ1ZTsKLSAgICBpZiAobV9yZW5kZXIpCi0gICAgICAgIG1fcmVuZGVyLT51cGRhdGVGcm9t
RWxlbWVudCgpOworICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICByZW5kZXJlcigpLT51cGRh
dGVGcm9tRWxlbWVudCgpOwogICAgIC8vIEZJWE1FOiBGb3JjZSByZWxvYWQgZnJvbSByZW5kZXJl
ciwgYXMgcmVuZGVyZXIgbWF5IGhhdmUgbm9ybWFsaXplZCBsaW5lIGVuZGluZ3MuCiAgICAgbV92
YWx1ZUlzVmFsaWQgPSBmYWxzZTsKICAgICBzZXRDaGFuZ2VkKHRydWUpOwpJbmRleDogV2ViQ29y
ZS9raHRtbC9odG1sL0hUTUxTZWxlY3RFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9raHRtbC9odG1sL0hUTUxTZWxlY3RFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMzA5
KQorKysgV2ViQ29yZS9raHRtbC9odG1sL0hUTUxTZWxlY3RFbGVtZW50SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDggKzcxLDggQEAKIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6
OnJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSBjaCApCiB7Ci0gICAgaWYgKGhhc0NoYW5nZWRDaGls
ZCgpICYmIG1fcmVuZGVyKQotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTZWxlY3QqPihtX3Jl
bmRlciktPnNldE9wdGlvbnNDaGFuZ2VkKHRydWUpOworICAgIGlmIChoYXNDaGFuZ2VkQ2hpbGQo
KSAmJiByZW5kZXJlcigpKQorICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTZWxlY3QqPihyZW5k
ZXJlcigpKS0+c2V0T3B0aW9uc0NoYW5nZWQodHJ1ZSk7CiAKICAgICBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoIGNoICk7CiB9CkBAIC00MTUsOCArNDE1LDggQEAKIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRSZWNhbGNMaXN0SXRlbXMoKQogewogICAgIG1f
cmVjYWxjTGlzdEl0ZW1zID0gdHJ1ZTsKLSAgICBpZiAobV9yZW5kZXIpCi0gICAgICAgIHN0YXRp
Y19jYXN0PFJlbmRlclNlbGVjdCo+KG1fcmVuZGVyKS0+c2V0T3B0aW9uc0NoYW5nZWQodHJ1ZSk7
CisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNlbGVjdCo+
KHJlbmRlcmVyKCkpLT5zZXRPcHRpb25zQ2hhbmdlZCh0cnVlKTsKICAgICBzZXRDaGFuZ2VkKCk7
CiB9CiAKQEAgLTQzMSw5ICs0MzEsOSBAQAogICAgICAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3Rl
ZChzZWxlY3RlZCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCBtX3JlbmRlciApCi0gICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlclNlbGVjdCo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uQ2hh
bmdlZCh0cnVlKTsKLSAgICBzZXRDaGFuZ2VkKCB0cnVlICk7CisgICAgaWYgKHJlbmRlcmVyKCkp
CisgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNlbGVjdCo+KHJlbmRlcmVyKCkpLT5zZXRTZWxl
Y3Rpb25DaGFuZ2VkKHRydWUpOworICAgIHNldENoYW5nZWQodHJ1ZSk7CiB9CiAKIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnRJbXBsOjpub3RpZnlPcHRpb25TZWxlY3RlZChIVE1MT3B0aW9uRWxlbWVu
dEltcGwgKnNlbGVjdGVkT3B0aW9uLCBib29sIHNlbGVjdGVkKQpAQCAtNDQ3LDggKzQ0Nyw4IEBA
CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRl
bXNbaV0pLT5tX3NlbGVjdGVkID0gKGl0ZW1zW2ldID09IHNlbGVjdGVkT3B0aW9uKTsKICAgICAg
ICAgfQogICAgIH0KLSAgICBpZiAobV9yZW5kZXIpCi0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clNlbGVjdCo+KG1fcmVuZGVyKS0+c2V0U2VsZWN0aW9uQ2hhbmdlZCh0cnVlKTsKKyAgICBpZiAo
cmVuZGVyZXIoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyU2VsZWN0Kj4ocmVuZGVyZXIo
KSktPnNldFNlbGVjdGlvbkNoYW5nZWQodHJ1ZSk7CiAKICAgICBzZXRDaGFuZ2VkKHRydWUpOwog
fQpAQCAtNDU5LDcgKzQ1OSw3IEBACiAgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9w
ZXIgc2VuZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50LgogICAgIGlmIChldnQtPnR5cGUoKSA9
PSBrZXlwcmVzc0V2ZW50KSB7CiAgICAgCi0gICAgICAgIGlmICghbV9mb3JtIHx8ICFtX3JlbmRl
ciB8fCAhZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaWYgKCFtX2Zvcm0gfHwgIXJl
bmRlcmVyKCkgfHwgIWV2dC0+aXNLZXlib2FyZEV2ZW50KCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICBET01TdHJpbmcga2V5ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRF
dmVudEltcGwgKj4oZXZ0KS0+a2V5SWRlbnRpZmllcigpOwpJbmRleDogV2ViQ29yZS9raHRtbC9o
dG1sL0hUTUxFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9I
VE1MRWxlbWVudEltcGwuaAkocmV2aXNpb24gMTIzMDkpCisrKyBXZWJDb3JlL2todG1sL2h0bWwv
SFRNTEVsZW1lbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDkgQEAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIpOwogCi0gICAgdmlydHVh
bCBOb2RlSW1wbCogY2xvbmVOb2RlKGJvb2wgZGVlcCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PE5vZGVJbXBsPiBjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAotICAgIFJlZlB0cjxIVE1MQ29sbGVj
dGlvbkltcGw+IGNoaWxkcmVuKCk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbkltcGw+
IGNoaWxkcmVuKCk7CiAgICAgCiAgICAgRE9NU3RyaW5nIGlkKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRJZChjb25zdCBET01TdHJpbmcgJnZhbHVlKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2xpc3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9s
aXN0aW1wbC5jcHAJKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
bGlzdGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMTEgKzE2OSw5IEBACiAgICAgICAg
IGlzVmFsdWVkID0gdHJ1ZTsKICAgICAgICAgcmVxdWVzdGVkVmFsdWUgPSAhYXR0ci0+aXNOdWxs
KCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAwOwogCi0gICAgICAgIGlmKG1fcmVuZGVyICYm
IG1fcmVuZGVyLT5pc0xpc3RJdGVtKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJlbmRlckxp
c3RJdGVtICpsaXN0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0gKj4obV9yZW5kZXIpOwor
ICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0xpc3RJdGVtKCkpIHsKKyAg
ICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0
ZW0gKj4ocmVuZGVyZXIoKSk7CiAgICAgICAgICAgICAvLyAjIyMgd29yayBvdXQgd2hhdCB0byBk
byB3aGVuIGF0dHJpYnV0ZSByZW1vdmVkIC0gdXNlIGRlZmF1bHQgb2Ygc29tZSBzb3J0PwotCiAg
ICAgICAgICAgICBsaXN0LT5zZXRWYWx1ZShyZXF1ZXN0ZWRWYWx1ZSk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgewpAQCAtMTk5LDggKzE5Nyw4
IEBACiAKICAgICBIVE1MRWxlbWVudEltcGw6OmF0dGFjaCgpOwogCi0gICAgaWYgKCBtX3JlbmRl
ciAmJiBtX3JlbmRlci0+c3R5bGUoKS0+ZGlzcGxheSgpID09IExJU1RfSVRFTSApIHsKLSAgICAg
ICAgUmVuZGVyTGlzdEl0ZW0gKnJlbmRlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtICo+
KG1fcmVuZGVyKTsKKyAgICBpZiAoIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+
ZGlzcGxheSgpID09IExJU1RfSVRFTSApIHsKKyAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKnJlbmRl
ciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtICo+KHJlbmRlcmVyKCkpOwogICAgICAgICAK
ICAgICAgICAgLy8gRmluZCB0aGUgZW5jbG9zaW5nIGxpc3Qgbm9kZS4KICAgICAgICAgTm9kZUlt
cGwgKmxpc3ROb2RlID0gMDsKQEAgLTIxNiw3ICsyMTQsNyBAQAogICAgICAgICAgICAgcmVuZGVy
LT5zZXROb3RJbkxpc3QodHJ1ZSk7CiAKICAgICAgICAgLy8gSWYgd2UgYXJlIGZpcnN0LCBhbmQg
dGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIsIHNldCB0aGUgdmFsdWUuCi0gICAgICAgIGlmIChsaXN0
Tm9kZSAmJiBsaXN0Tm9kZS0+aGFzVGFnTmFtZShvbFRhZykgJiYgIW1fcmVuZGVyLT5wcmV2aW91
c1NpYmxpbmcoKSkgeworICAgICAgICBpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1RhZ05h
bWUob2xUYWcpICYmICFyZW5kZXJlcigpLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAg
ICAgSFRNTE9MaXN0RWxlbWVudEltcGwgKm9sID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVu
dEltcGwgKj4obGlzdE5vZGUpOwogICAgICAgICAgICAgcmVuZGVyLT5zZXRWYWx1ZShvbC0+c3Rh
cnQoKSk7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9IVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9odG1sL0hUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIzMDkpCisrKyBXZWJDb3JlL2to
dG1sL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NCwxNSArODQsMTUgQEAKICAgICAvLyBUaGUgY2FsbCB0byB1cGRhdGVGcm9tRWxlbWVudCgp
IG5lZWRzIHRvIGdvIGFmdGVyIHRoZSBjYWxsIHRocm91Z2gKICAgICAvLyB0byB0aGUgYmFzZSBj
bGFzcydzIGF0dGFjaCgpIGJlY2F1c2UgdGhhdCBjYW4gc29tZXRpbWVzIGRvIGEgY2xvc2UKICAg
ICAvLyBvbiB0aGUgcmVuZGVyZXIuCi0gICAgaWYgKG1fcmVuZGVyKSB7Ci0gICAgICAgIG1fcmVu
ZGVyLT51cGRhdGVGcm9tRWxlbWVudCgpOworICAgIGlmIChyZW5kZXJlcigpKSB7CisgICAgICAg
IHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgCiAgICAgICAgIC8vIERlbGF5
ZWQgYXR0YWNobWVudCBpbiBvcmRlciB0byBwcmV2ZW50IEZPVUMgY2FuIHJlc3VsdCBpbiBhbiBv
YmplY3QgYmVpbmcKICAgICAgICAgLy8gcHJvZ3JhbW1hdGljYWxseSBmb2N1c2VkIGJlZm9yZSBp
dCBoYXMgYSByZW5kZXIgb2JqZWN0LiAgSWYgd2UgaGF2ZSBiZWVuIGZvY3VzZWQKICAgICAgICAg
Ly8gKGkuZS4sIGlmIHdlIGFyZSB0aGUgZm9jdXNOb2RlKSB0aGVuIGdvIGFoZWFkIGFuZCBmb2N1
cyBvdXIgY29ycmVzcG9uZGluZyBuYXRpdmUgd2lkZ2V0LgogICAgICAgICAvLyAoQXR0YWNoL2Rl
dGFjaCBjYW4gYWxzbyBoYXBwZW4gYXMgYSByZXN1bHQgb2YgZGlzcGxheSB0eXBlIGNoYW5nZXMs
IGUuZy4sIG1ha2luZyBhIHdpZGdldAogICAgICAgICAvLyBibG9jayBpbnN0ZWFkIG9mIGlubGlu
ZSwgYW5kIGZvY3VzIHNob3VsZCBiZSByZXN0b3JlZCBpbiB0aGF0IGNhc2UgYXMgd2VsbC4pCi0g
ICAgICAgIGlmIChnZXREb2N1bWVudCgpLT5mb2N1c05vZGUoKSA9PSB0aGlzICYmIG1fcmVuZGVy
LT5pc1dpZGdldCgpICYmIAorICAgICAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+Zm9jdXNOb2RlKCkg
PT0gdGhpcyAmJiByZW5kZXJlcigpLT5pc1dpZGdldCgpICYmIAogICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIoKSktPndpZGdldCgpKQogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4ocmVuZGVyZXIoKSktPndpZGdldCgpLT5zZXRGb2N1
cygpOwogICAgIH0KQEAgLTE4OCwxNSArMTg4LDE1IEBACiAgICAgLy9ib29sIGNoYW5nZWQgPSBj
aGFuZ2VkKCk7CiAgICAgSFRNTEVsZW1lbnRJbXBsOjpyZWNhbGNTdHlsZSggY2ggKTsKIAotICAg
IGlmIChtX3JlbmRlciAvKiYmIGNoYW5nZWQqLykKLSAgICAgICAgbV9yZW5kZXItPnVwZGF0ZUZy
b21FbGVtZW50KCk7CisgICAgaWYgKHJlbmRlcmVyKCkgLyomJiBjaGFuZ2VkKi8pCisgICAgICAg
IHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKIGJvb2wgSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICBpZiAoZGlzYWJsZWQo
KSB8fCAhbV9yZW5kZXIgfHwgCi0gICAgICAgIChtX3JlbmRlci0+c3R5bGUoKSAmJiBtX3JlbmRl
ci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpIHx8IAotICAgICAgICBtX3JlbmRl
ci0+d2lkdGgoKSA9PSAwIHx8IG1fcmVuZGVyLT5oZWlnaHQoKSA9PSAwKQorICAgIGlmIChkaXNh
YmxlZCgpIHx8ICFyZW5kZXJlcigpIHx8IAorICAgICAgICAocmVuZGVyZXIoKS0+c3R5bGUoKSAm
JiByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkgfHwgCisgICAg
ICAgIHJlbmRlcmVyKCktPndpZHRoKCkgPT0gMCB8fCByZW5kZXJlcigpLT5oZWlnaHQoKSA9PSAw
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMDQsOSAr
MjA0LDkgQEAKIGJvb2wgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OmlzS2V5Ym9hcmRGb2N1
c2FibGUoKSBjb25zdAogewogICAgIGlmIChpc0ZvY3VzYWJsZSgpKSB7Ci0gICAgICAgIGlmICht
X3JlbmRlci0+aXNXaWRnZXQoKSkgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlcldpZGdldCo+KG1fcmVuZGVyKS0+d2lkZ2V0KCkgJiYKLSAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obV9yZW5kZXIpLT53aWRnZXQoKS0+Zm9jdXNQb2xpY3ko
KSAmIFFXaWRnZXQ6OlRhYkZvY3VzKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCktPmlzV2lkZ2V0
KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5k
ZXJlcigpKS0+d2lkZ2V0KCkgJiYKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVy
V2lkZ2V0Kj4ocmVuZGVyZXIoKSktPndpZGdldCgpLT5mb2N1c1BvbGljeSgpICYgUVdpZGdldDo6
VGFiRm9jdXMpOwogICAgICAgICB9CiAgICAgICAgIGlmIChnZXREb2N1bWVudCgpLT5mcmFtZSgp
KQogICAgICAgICAgICAgcmV0dXJuIGdldERvY3VtZW50KCktPmZyYW1lKCktPnRhYnNUb0FsbENv
bnRyb2xzKCk7CkBAIC0yMTcsOSArMjE3LDkgQEAKIGJvb2wgSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGw6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAogewogICAgIGlmIChpc0ZvY3VzYWJsZSgp
KSB7Ci0gICAgICAgIGlmIChtX3JlbmRlci0+aXNXaWRnZXQoKSkgewotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KG1fcmVuZGVyKS0+d2lkZ2V0KCkgJiYKLSAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4obV9yZW5kZXIpLT53aWRn
ZXQoKS0+Zm9jdXNQb2xpY3koKSAmIFFXaWRnZXQ6OkNsaWNrRm9jdXMpOworICAgICAgICBpZiAo
cmVuZGVyZXIoKS0+aXNXaWRnZXQoKSkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbmRlcldpZGdldCo+KHJlbmRlcmVyKCkpLT53aWRnZXQoKSAmJgorICAgICAgICAgICAgICAg
IChzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQqPihyZW5kZXJlcigpKS0+d2lkZ2V0KCktPmZvY3Vz
UG9saWN5KCkgJiBRV2lkZ2V0OjpDbGlja0ZvY3VzKTsKICAgICAgICAgfQogICAgICAgICAvLyBG
b3IgPGlucHV0IHR5cGU9aW1hZ2U+IGFuZCA8YnV0dG9uPiwgd2Ugd2lsbCBhc3N1bWUgbm8gbW91
c2UgZm9jdXNhYmlsaXR5LiAgVGhpcyBpcwogICAgICAgICAvLyBjb25zaXN0ZW50IHdpdGggT1Mg
WCBiZWhhdmlvciBmb3IgYnV0dG9ucy4KSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Rv
Y3VtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZG9j
dW1lbnRpbXBsLmNwcAkocmV2aXNpb24gMTIzMDkpCisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9kb2N1bWVudGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTUgKzE2MCw2IEBACiAg
ICAgcmV0dXJuIEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljU3Ry
aW5nKGxvd2VyTmFtZSksIHRoaXMsIDAsIGZhbHNlKTsKIH0KIAotdm9pZCBIVE1MRG9jdW1lbnRJ
bXBsOjpzbG90SGlzdG9yeUNoYW5nZWQoKQotewotICAgIGlmICggdHJ1ZSB8fCAhbV9yZW5kZXIg
KSAvLyBkaXNhYmxlZCBmb3Igbm93Ci0gICAgICAgIHJldHVybjsKLQotICAgIHJlY2FsY1N0eWxl
KCBGb3JjZSApOwotICAgIG1fcmVuZGVyLT5yZXBhaW50KCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGFk
ZEl0ZW1Ub01hcChIVE1MRG9jdW1lbnRJbXBsOjpOYW1lQ291bnRNYXAmIG1hcCwgY29uc3QgRE9N
U3RyaW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lLmxlbmd0aCgpID09IDApCkluZGV4OiBXZWJD
b3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDEw
ICs0MzEsMTAgQEAKICAgICAgICAgICAgIHBhZGRpbmcgPSBrTWF4KCAwLCBhdHRyLT52YWx1ZSgp
LnRvSW50KCkgKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGFkZGluZyA9IDE7Ci0gICAg
ICAgIGlmIChtX3JlbmRlciAmJiBtX3JlbmRlci0+aXNUYWJsZSgpKSB7Ci0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJUYWJsZSAqPihtX3JlbmRlciktPnNldENlbGxQYWRkaW5nKHBhZGRp
bmcpOwotICAgICAgICAgICAgaWYgKCFtX3JlbmRlci0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAg
ICAgICAgICBtX3JlbmRlci0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgICAgIGlmIChyZW5k
ZXJlcigpICYmIHJlbmRlcmVyKCktPmlzVGFibGUoKSkgeworICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGUgKj4ocmVuZGVyZXIoKSktPnNldENlbGxQYWRkaW5nKHBhZGRpbmcpOwor
ICAgICAgICAgICAgaWYgKCFyZW5kZXJlcigpLT5uZWVkc0xheW91dCgpKQorICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gY29sc0F0dHIpIHsKICAgICAgICAgLy8gIyMjCkBAIC01
MTgsOCArNTE4LDggQEAKIHsKICAgICBhc3NlcnQoIW1fYXR0YWNoZWQpOwogICAgIEhUTUxFbGVt
ZW50SW1wbDo6YXR0YWNoKCk7Ci0gICAgaWYgKCBtX3JlbmRlciAmJiBtX3JlbmRlci0+aXNUYWJs
ZSgpICkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUgKj4obV9yZW5kZXIpLT5zZXRD
ZWxsUGFkZGluZyggcGFkZGluZyApOworICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCkt
PmlzVGFibGUoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUgKj4ocmVuZGVyZXIo
KSktPnNldENlbGxQYWRkaW5nKCBwYWRkaW5nICk7CiB9CiAKIGJvb2wgSFRNTFRhYmxlRWxlbWVu
dEltcGw6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNvbnN0CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9ET00ubW0JKHJldmlzaW9uIDEyMzA5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBACiAKIC0gKERPTU5vZGUg
KiljbG9uZU5vZGU6KEJPT0wpZGVlcAogewotICAgIHJldHVybiBbRE9NTm9kZSBfbm9kZVdpdGhJ
bXBsOltzZWxmIF9ub2RlSW1wbF0tPmNsb25lTm9kZShkZWVwKV07CisgICAgcmV0dXJuIFtET01O
b2RlIF9ub2RlV2l0aEltcGw6W3NlbGYgX25vZGVJbXBsXS0+Y2xvbmVOb2RlKGRlZXApLmdldCgp
XTsKIH0KIAogLSAodm9pZClub3JtYWxpemUKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjMxMCkKKysrIFdlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg3IEBACisyMDA2LTAxLTIzICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAtIGZpeCBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5v
cmcvc2hvd19idWcuY2dpP2lkPTY2MTcKKyAgICAgICAgICBSRUdSRVNTSU9OOiBDcmFzaCBpbiBj
bG9uZUNoaWxkTm9kZXMgd2hlbiBjbGlja2luZyBlbGVtZW50CisKKyAgICAgICAgQ2hhbmdlZCBj
bG9uZU5vZGUgYW5kIHNvbWUgb3RoZXIgZnVuY3Rpb25zIHRvIHJldHVybiBQYXNzUmVmUHRyLgor
ICAgICAgICBBbHNvIG1hZGUgbV9yZW5kZXIgcHJpdmF0ZSBhbmQgY2hhbmdlZCBpdHMgbmFtZSB0
byBtX3JlbmRlcmVyLgorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06ICgtW0RPTU5v
ZGUgY2xvbmVOb2RlOl0pOiBBZGQgY2FsbCB0byBnZXQoKSBuZWVkZWQKKyAgICAgICAgbm93IHRo
YXQgY2xvbmVOb2RlIHJldHVybnMgYSBQYXNzUmVmUHRyLgorCisgICAgICAgICoga2h0bWwvZWRp
dGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QnJl
YWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICoga2h0bWwvZWRpdGluZy9p
bnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcDoKKyAgICAgICAgKGtodG1sOjpJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBraHRt
bC9lZGl0aW5nL3NwbGl0X2VsZW1lbnRfY29tbWFuZC5jcHA6CisgICAgICAgIChraHRtbDo6U3Bs
aXRFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1scGFy
c2VyLmNwcDoKKyAgICAgICAgKEhUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRh
Z0Fjcm9zc0Jsb2Nrcyk6CisgICAgICAgIChIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxl
VGFncyk6CisgICAgICAgICoga2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcDogKERPTTo6UmFu
Z2VJbXBsOjpwcm9jZXNzQ29udGVudHMpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdVc2VFbGVt
ZW50SW1wbC5jcHA6IChTVkdVc2VFbGVtZW50SW1wbDo6Y2xvc2VSZW5kZXJlcik6CisgICAgICAg
IFVzZSBSZWZQdHIgYW5kIFBhc3NSZWZQdHIgYXMgYXBwcm9wcmlhdGUsIHNpbmNlIHRoZSByZXN1
bHQgb2YgY2xvbmVOb2RlCisgICAgICAgIGlzIG5vdyBhIHJlZmVyZW5jZWQgb2JqZWN0IGluIGEg
UGFzc1JlZlB0ciByYXRoZXIgdGhhbiBhIGZsb2F0aW5nIG9uZSBhbmQKKyAgICAgICAgc28gbmVl
ZHMgdG8gYmUga2VwdCByZWZlcmVuY2VkIHVudGlsIHVzZWQuCisKKyAgICAgICAgKiBraHRtbC9o
dG1sL0hUTUxFbGVtZW50SW1wbC5oOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTEVsZW1lbnRJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlKTog
Q2hhbmdlZCB0byByZXR1cm4gYSBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnRJbXBsOjpjaGlsZHJlbik6IERpdHRvLgorICAgICAgICAqIGtodG1sL3htbC9Eb2N1bWVu
dEZyYWdtZW50SW1wbC5oOgorICAgICAgICAqIGtodG1sL3htbC9Eb2N1bWVudEZyYWdtZW50SW1w
bC5jcHA6CisgICAgICAgIChET006OkRvY3VtZW50RnJhZ21lbnRJbXBsOjpjbG9uZU5vZGUpOiBD
aGFuZ2VkIHRvIHJldHVybiBhIFBhc3NSZWZQdHIuCisgICAgICAgICoga2h0bWwveG1sL0RvY3Vt
ZW50SW1wbC5oOgorICAgICAgICAqIGtodG1sL3htbC9Eb2N1bWVudFR5cGVJbXBsLmg6CisgICAg
ICAgICoga2h0bWwveG1sL0RvY3VtZW50VHlwZUltcGwuY3BwOgorICAgICAgICAoRE9NOjpEb2N1
bWVudFR5cGVJbXBsOjpjbG9uZU5vZGUpOiBDaGFuZ2VkIHRvIHJldHVybiBhIFBhc3NSZWZQdHIu
CisgICAgICAgICoga2h0bWwveG1sL05hbWVkTm9kZU1hcEltcGwuaDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5hbWVkTm9kZU1hcEltcGw6OmdldE5hbWVkSXRlbSk6IENoYW5nZWQgdG8gcmV0dXJuIFBh
c3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXBJbXBsOjpyZW1vdmVOYW1l
ZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcEltcGw6OnNldE5h
bWVkSXRlbU5TKTogRGl0dG8uCisKKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsOjphdHRhY2gpOiBVc2UgcmVuZGVyZXIoKSBpbnN0ZWFkIG9mCisgICAgICAgIGdldHRp
bmcgYXQgbV9yZW5kZXIgZGlyZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OmlzS2V5Ym9hcmRGb2N1c2FibGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpp
c01vdXNlRm9jdXNhYmxlKTogRGl0dG8uCisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MSW5wdXRF
bGVtZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50SW1wbDo6
c2VsZWN0aW9uU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnRJbXBsOjpzZWxlY3Rpb25FbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25TdGFydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlvbkVuZCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudEltcGw6OnNlbGVjdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudEltcGw6OnNldFNlbGVjdGlvblJhbmdlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnRJbXBs
OjpzZXRWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudElt
cGw6OmRlZmF1bHRFdmVudEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKiBraHRtbC9odG1sL0hU
TUxTZWxlY3RFbGVtZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxl
bWVudEltcGw6OnJlY2FsY1N0eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MU2Vs
ZWN0RWxlbWVudEltcGw6OnNldFJlY2FsY0xpc3RJdGVtcyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZXNldCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpub3RpZnlPcHRpb25TZWxlY3RlZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRI
YW5kbGVyKTogRGl0dG8uCisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2Vs
ZWN0aW9uU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsOjpzZWxlY3Rpb25FbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsOjpzZXRTZWxlY3Rpb25TdGFydCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFNlbGVjdGlvbkVuZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNlbGVjdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFNlbGVjdGlv
blJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50SW1w
bDo6dXBkYXRlVmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsOjpzZXRWYWx1ZSk6IERpdHRvLgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9i
YXNlaW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50SW1wbDo6dXBk
YXRlRm9yTmV3VVJMKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50
SW1wbDo6b3BlblVSTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dEltcGw6OmF0dGFjaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dEltcGw6OmNsb3NlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50
SW1wbDo6d2lsbFJlbW92ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxl
bWVudEltcGw6OmlzRm9jdXNhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJh
bWVFbGVtZW50SW1wbDo6c2V0Rm9jdXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
cmFtZUVsZW1lbnRJbXBsOjpmcmFtZVdpZHRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MRnJhbWVFbGVtZW50SW1wbDo6ZnJhbWVIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJRnJhbWVFbGVtZW50SW1wbDo6YXR0YWNo
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSUZyYW1lRWxlbWVudEltcGw6OnJlY2Fs
Y1N0eWxlKTogRGl0dG8uCisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnRJbXBsOjp3
aWR0aCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudEltcGw6Omhl
aWdodCk6IERpdHRvLgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUpOiBE
aXR0by4KKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwOgorICAgICAgICAo
RE9NOjpIVE1MTElFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBEaXR0by4KKyAg
ICAgICAgKERPTTo6SFRNTExJRWxlbWVudEltcGw6OmF0dGFjaCk6IERpdHRvLgorICAgICAgICAq
IGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxB
cHBsZXRFbGVtZW50SW1wbDo6Z2V0QXBwbGV0SW5zdGFuY2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50SW1wbDo6Y2xvc2VSZW5kZXJlcik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudEltcGw6OmdldEVtYmVkSW5zdGFuY2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnRJbXBsOjphdHRhY2gpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Z2V0T2JqZWN0
SW5zdGFuY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxP
YmplY3RFbGVtZW50SW1wbDo6YXR0YWNoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
T2JqZWN0RWxlbWVudEltcGw6OmRldGFjaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9iamVjdEVsZW1lbnRJbXBsOjpyZWNhbGNTdHlsZSk6IERpdHRvLgorICAgICAgICAqIGtodG1s
L2h0bWwvaHRtbF90YWJsZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxl
bWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGFibGVFbGVtZW50SW1wbDo6YXR0YWNoKTogRGl0dG8uCisgICAgICAgICoga2h0bWwv
eG1sL0NvbnRhaW5lck5vZGVJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGVJbXBsOjpnZXRVcHBlckxlZnRDb3JuZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRhaW5lck5vZGVJbXBsOjpnZXRMb3dlclJpZ2h0Q29ybmVyKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDb250YWluZXJOb2RlSW1wbDo6c2V0QWN0aXZlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDb250YWluZXJOb2RlSW1wbDo6c2V0SG92ZXJlZCk6IERpdHRvLgorICAgICAgICAq
IGtodG1sL3htbC9Eb2N1bWVudEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRJ
bXBsOjp+RG9jdW1lbnRJbXBsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudElt
cGw6OmVsZW1lbnRGcm9tUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
SW1wbDo6cmVjYWxjU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50SW1w
bDo6YXR0YWNoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudEltcGw6OnJlc3Rv
cmVSZW5kZXJlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRJbXBsOjpkZXRh
Y2gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50SW1wbDo6c2V0VmlzdWFsbHlP
cmRlcmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudEltcGw6OnVwZGF0ZVNl
bGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRJbXBsOjpwcmVwYXJl
TW91c2VFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRJbXBsOjpjbG9u
ZU5vZGUpOiBDaGFuZ2VkIHRvIHJldHVybiBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKTogVXNlIHJlbmRlcmVyKCkgaW5zdGVh
ZAorICAgICAgICBvZiBnZXR0aW5nIGF0IG1fcmVuZGVyIGRpcmVjdGx5LgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRJbXBsOjpzZXRJblBhZ2VDYWNoZSk6IERpdHRvLgorCisgICAgICAgICog
a2h0bWwveG1sL05vZGVJbXBsLmg6CisgICAgICAgICoga2h0bWwveG1sL05vZGVJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjpOb2RlSW1wbCk6IENoYW5nZWQgbV9yZW5kZXIg
dG8gbV9yZW5kZXJlci4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjp+Tm9kZUltcGwpOiBD
aGFuZ2VkIHVzZSBvZiBtX3JlbmRlciB0byByZW5kZXJlcigpLgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZUltcGw6OmdldFJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjph
dHRhY2gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjpkZXRhY2gpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjpjcmVhdGVSZW5kZXJlcklmTmVlZGVkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWUp
OiBDaGFuZ2VkIHRvIHJldHVybiBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUlt
cGw6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMpOiBEaXR0by4KKworICAgICAgICAqIGtodG1sL3ht
bC9kb21fZWxlbWVudGltcGwuaDoKKyAgICAgICAgKiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHJJbXBsOjpjbG9uZU5vZGUpOiBDaGFuZ2VkIHRv
IHJldHVybiBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEltcGw6OmNsb25l
Tm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEltcGw6OnNjcm9sbEludG9W
aWV3KTogVXNlIHJlbmRlcmVyKCkgaW5zdGVhZCBvZiBtX3JlbmRlci4KKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRJbXBsOjpzY3JvbGxJbnRvVmlld0lmTmVlZGVkKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1dGVOb2RlKTogQ2hhbmdlZCB0byByZXR1cm4g
UGFzc1JlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRJbXBsOjpyZW1vdmVBdHRyaWJ1
dGVOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOYW1lZEF0dHJNYXBJbXBsOjpyZW1v
dmVOYW1lZEl0ZW1OUyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRBdHRyTWFwSW1w
bDo6c2V0TmFtZWRJdGVtKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOYW1lZEF0dHJNYXBJ
bXBsOjpyZW1vdmVOYW1lZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKERPTTo6RWxlbWVudEltcGw6
OnNldEF0dHJpYnV0ZU5vZGVOUyk6IERpdHRvLgorCisgICAgICAgICoga2h0bWwveG1sL2RvbV90
ZXh0aW1wbC5oOgorICAgICAgICAqIGtodG1sL3htbC9kb21fdGV4dGltcGwuY3BwOgorICAgICAg
ICAoQ2hhcmFjdGVyRGF0YUltcGw6OnNldERhdGEpOiBDaGFuZ2VkIHVzZSBvZiBtX3JlbmRlciB0
byByZW5kZXJlcigpLgorICAgICAgICAoQ2hhcmFjdGVyRGF0YUltcGw6OmFwcGVuZERhdGEpOiBE
aXR0by4KKyAgICAgICAgKENoYXJhY3RlckRhdGFJbXBsOjppbnNlcnREYXRhKTogRGl0dG8uCisg
ICAgICAgIChDaGFyYWN0ZXJEYXRhSW1wbDo6ZGVsZXRlRGF0YSk6IERpdHRvLgorICAgICAgICAo
Q2hhcmFjdGVyRGF0YUltcGw6OnJlcGxhY2VEYXRhKTogRGl0dG8uCisgICAgICAgIChDb21tZW50
SW1wbDo6Y2xvbmVOb2RlKTogQ2hhbmdlZCB0byByZXR1cm4gUGFzc1JlZlB0ci4KKyAgICAgICAg
KFRleHRJbXBsOjpzcGxpdFRleHQpOiBDaGFuZ2VkIHVzZSBvZiBtX3JlbmRlciB0byByZW5kZXJl
cigpLgorICAgICAgICAoVGV4dEltcGw6OmNsb25lTm9kZSk6IENoYW5nZWQgdG8gcmV0dXJuIFBh
c3NSZWZQdHIuCisgICAgICAgIChUZXh0SW1wbDo6cmVjYWxjU3R5bGUpOiBDaGFuZ2VkIHVzZSBv
ZiBtX3JlbmRlciB0byByZW5kZXJlcigpLgorICAgICAgICAoQ0RBVEFTZWN0aW9uSW1wbDo6Y2xv
bmVOb2RlKTogQ2hhbmdlZCB0byByZXR1cm4gUGFzc1JlZlB0ci4KKworICAgICAgICAqIGtodG1s
L3htbC9kb21feG1saW1wbC5oOgorICAgICAgICAqIGtodG1sL3htbC9kb21feG1saW1wbC5jcHA6
CisgICAgICAgIChET006OkVudGl0eUltcGw6OmNsb25lTm9kZSk6IENoYW5nZWQgdG8gcmV0dXJu
IFBhc3NSZWZQdHIuCisgICAgICAgIChET006OkVudGl0eVJlZmVyZW5jZUltcGw6OmNsb25lTm9k
ZSk6IERpdHRvLgorICAgICAgICAoRE9NOjpOb3RhdGlvbkltcGw6OmNsb25lTm9kZSk6IERpdHRv
LgorICAgICAgICAoRE9NOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25JbXBsOjpjbG9uZU5vZGUpOiBE
aXR0by4KKworICAgICAgICAtIHJlbW92ZWQgdW51c2VkIGNvZGUKKworICAgICAgICAqIGtodG1s
L2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwOiBSZW1vdmVkIHVudXNlZCBzbG90SGlzdG9yeUNo
YW5nZWQgZnVuY3Rpb24uCisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5o
OiBEaXR0by4KKyAgICAgICAgKiBrd3EvS1dRT2JqZWN0LmNwcDogKFFPYmplY3Q6OmNvbm5lY3Qp
OiBSZW1vdmVkIHNwZWNpYWwgY2FzZSBmb3IKKyAgICAgICAgc2xvdEhpc3RvcnlDaGFuZ2VkLCBu
byBsb25nZXIgdXNlZC4KKwogMjAwNi0wMS0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgLSBmaXggbGF5b3V0IHRlc3RzCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdVc2VFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHVXNlRWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjMwOSkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1VzZUVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3
IEBACiAgICAgICAgIFNWR0R1bW15RWxlbWVudEltcGwgKmR1bW15ID0gbmV3IFNWR0R1bW15RWxl
bWVudEltcGwoU1ZHTmFtZXM6OmdUYWcsIGdldERvY3VtZW50KCkpOwogICAgICAgICBkdW1teS0+
c2V0QXR0cmlidXRlKFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLCBLRE9NOjpET01TdHJpbmcodHJh
bnMpKTsKICAgICAgICAgCi0gICAgICAgIFNWR0VsZW1lbnRJbXBsICpyb290ID0gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudEltcGwgKj4odGFyZ2V0LT5jbG9uZU5vZGUodHJ1ZSkpOworICAgICAgICBQ
YXNzUmVmUHRyPFNWR0VsZW1lbnRJbXBsPiByb290ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxTVkdF
bGVtZW50SW1wbD4odGFyZ2V0LT5jbG9uZU5vZGUodHJ1ZSkpOwogICAgICAgICBpZihoYXNBdHRy
aWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCiAgICAgICAgICAgICByb290LT5zZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgd1N0cmluZy5pbXBsKCkpOwogICAgICAgICAgICAgCkBA
IC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgU1ZHRHVtbXlFbGVtZW50SW1wbCAqZHVtbXkgPSBu
ZXcgU1ZHRHVtbXlFbGVtZW50SW1wbChTVkdOYW1lczo6Z1RhZywgZ2V0RG9jdW1lbnQoKSk7CiAg
ICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIHRyYW5z
KTsKICAgICAgICAgCi0gICAgICAgIEtET006Ok5vZGVJbXBsICpyb290ID0gdGFyZ2V0LT5jbG9u
ZU5vZGUodHJ1ZSk7CisgICAgICAgIFBhc3NSZWZQdHI8S0RPTTo6Tm9kZUltcGw+IHJvb3QgPSB0
YXJnZXQtPmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIGFwcGVuZENoaWxkKGR1
bW15LCBleGNlcHRpb25jb2RlKTsKICAgICAgICAgZHVtbXktPmFwcGVuZENoaWxkKHJvb3QsIGV4
Y2VwdGlvbmNvZGUpOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2t3cS9LV1FPYmplY3QuY3BwCShyZXZpc2lvbiAxMjMwOSkKKysrIFdlYkNv
cmUva3dxL0tXUU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDYgQEAKICNp
ZiAhRVJST1JfRElTQUJMRUQKICAgICAgICAgaWYgKDEKICAgICAgICAgICAgICYmICFLV1FOYW1l
c01hdGNoKG1lbWJlciwgU0lHTkFMKHNldFN0YXR1c0JhclRleHQoY29uc3QgUVN0cmluZyAmKSkp
Ci0gICAgICAgICAgICAmJiAhS1dRTmFtZXNNYXRjaChtZW1iZXIsIFNMT1Qoc2xvdEhpc3RvcnlD
aGFuZ2VkKCkpKQogICAgICAgICAgICAgJiYgIUtXUU5hbWVzTWF0Y2gobWVtYmVyLCBTTE9UKHNs
b3RKb2JQZXJjZW50KEtJTzo6Sm9iICosIHVuc2lnbmVkIGxvbmcpKSkKICAgICAgICAgICAgICYm
ICFLV1FOYW1lc01hdGNoKG1lbWJlciwgU0xPVChzbG90Sm9iU3BlZWQoS0lPOjpKb2IgKiwgdW5z
aWduZWQgbG9uZykpKQogICAgICAgICAgICAgJiYgIUtXUU5hbWVzTWF0Y2gobWVtYmVyLCBTTE9U
KHNsb3RTY3JvbGxCYXJNb3ZlZCgpKSkK
</data>
<flag name="review"
          id="1368"
          type_id="1"
          status="+"
          setter="sullivan"
    />
          </attachment>
      

    </bug>

</bugzilla>