<?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>53282</bug_id>
          
          <creation_ts>2011-01-27 20:08:24 -0800</creation_ts>
          <short_desc>Downloads in WK2 on Windows should write resume data to bundle</short_desc>
          <delta_ts>2011-01-29 00:36:04 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Honeycutt">jhoneycutt</reporter>
          <assigned_to name="Jon Honeycutt">jhoneycutt</assigned_to>
          <cc>buildbot</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>341272</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2011-01-27 20:08:24 -0800</bug_when>
    <thetext>In WK1, the WebDownload class is responsible for writing resume data to the download bundle. WK2 should do the same.

&lt;rdar://problem/8753077&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341278</commentid>
    <comment_count>1</comment_count>
      <attachid>80409</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2011-01-27 20:19:38 -0800</bug_when>
    <thetext>Created attachment 80409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341280</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-27 20:22:07 -0800</bug_when>
    <thetext>Attachment 80409 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/network/cf/DownloadBundle.h:30:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/platform/network/win/DownloadBundleWin.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/network/win/DownloadBundleWin.cpp:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/network/win/DownloadBundleWin.cpp:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/network/win/DownloadBundleWin.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 5 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341297</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-27 20:56:51 -0800</bug_when>
    <thetext>Attachment 80409 did not build on win:
Build output: http://queues.webkit.org/results/7629274</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341613</commentid>
    <comment_count>4</comment_count>
      <attachid>80477</attachid>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2011-01-28 12:09:17 -0800</bug_when>
    <thetext>Created attachment 80477
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341616</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-28 12:12:24 -0800</bug_when>
    <thetext>Attachment 80477 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/network/cf/DownloadBundle.h:30:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341657</commentid>
    <comment_count>6</comment_count>
      <attachid>80477</attachid>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2011-01-28 12:46:55 -0800</bug_when>
    <thetext>Comment on attachment 80477
Patch v2

View in context: https://bugs.webkit.org/attachment.cgi?id=80477&amp;action=review

&gt; Source/WebKit/win/WebDownloadCFNet.cpp:253
&gt; +    resumeData.adoptCF(CFURLDownloadCopyResumeData(m_download.get()));

awesome

&gt; Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp:171
&gt; +}

do you need to null-check download?

&gt; Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp:179
&gt; +    download-&gt;didCreateDestination(download-&gt;destination());

do you need to null-check download?

&gt; Source/WebKit2/WebProcess/Downloads/curl/DownloadCurl.cpp:58
&gt; +}

if there&apos;s nothing that you know we need to do, you can leave this out. but if we do need to do something, please comment at least briefly about it.

&gt; Source/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm:174
&gt; +

presumably intentionally empty, and doesn&apos;t need notImplemented(), i assume.

&gt; Source/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp:57
&gt; +}

if there&apos;s nothing that you know we need to do, you can leave this out. but if we do need to do something, please comment at least briefly about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342040</commentid>
    <comment_count>7</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2011-01-29 00:29:46 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 80477 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80477&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/win/WebDownloadCFNet.cpp:253
&gt; &gt; +    resumeData.adoptCF(CFURLDownloadCopyResumeData(m_download.get()));
&gt; 
&gt; awesome
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp:171
&gt; &gt; +}
&gt; 
&gt; do you need to null-check download?
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp:179
&gt; &gt; +    download-&gt;didCreateDestination(download-&gt;destination());
&gt; 
&gt; do you need to null-check download?

None of the callback functions null check download, so I don&apos;t think so.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Downloads/curl/DownloadCurl.cpp:58
&gt; &gt; +}
&gt; 
&gt; if there&apos;s nothing that you know we need to do, you can leave this out. but if we do need to do something, please comment at least briefly about it.

I&apos;m not sure whether other platforms will use this function, but it needs a definition. I&apos;m going to leave the calls to notImplemented() and let someone remove them when downloads are implemented for this platform.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm:174
&gt; &gt; +
&gt; 
&gt; presumably intentionally empty, and doesn&apos;t need notImplemented(), i assume.

That&apos;s right.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp:57
&gt; &gt; +}
&gt; 
&gt; if there&apos;s nothing that you know we need to do, you can leave this out. but if we do need to do something, please comment at least briefly about it.

Same response as earlier.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342042</commentid>
    <comment_count>8</comment_count>
    <who name="Jon Honeycutt">jhoneycutt</who>
    <bug_when>2011-01-29 00:36:04 -0800</bug_when>
    <thetext>Landed in r77055.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80409</attachid>
            <date>2011-01-27 20:19:38 -0800</date>
            <delta_ts>2011-01-28 12:09:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-downloads-in-wk2-on-windows-should-write-resume-data.patch</filename>
            <type>text/plain</type>
            <size>36894</size>
            <attacher name="Jon Honeycutt">jhoneycutt</attacher>
            
              <data encoding="base64">RnJvbSAzMjM4NTA1NDE2NDhjNDAyMzZmZmVjY2E0OWU1ZjZmNmQxZDhkOWQwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gSG9uZXljdXR0IDxqaG9uZXljdXR0QGFwcGxlLmNvbT4K
RGF0ZTogVGh1LCAyNyBKYW4gMjAxMSAyMDoxMToxMiAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIERv
d25sb2FkcyBpbiBXSzIgb24gV2luZG93cyBzaG91bGQgd3JpdGUgcmVzdW1lIGRhdGEgdG8gYnVu
ZGxlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyODIKIDxyZGFy
Oi8vcHJvYmxlbS84NzUzMDc3PgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2Uv
V2ViQ29yZToKCiogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CkFkZGVkIG5ldyBmaWxl
cyB0byBwcm9qZWN0LgoKKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0Rvd25sb2FkQnVuZGxlLmg6IEFk
ZGVkLgoqIHBsYXRmb3JtL25ldHdvcmsvd2luL0Rvd25sb2FkQnVuZGxlV2luLmNwcDogQWRkZWQu
CihXZWJDb3JlOjpEb3dubG9hZEJ1bmRsZTo6bWFnaWNOdW1iZXIpOgpNb3ZlZCBmcm9tIFdlYktp
dCdzIFdlYkRvd25sb2FkIHNvIHRoYXQgV2ViS2l0IGFuZCBXZWJLaXQyIGNhbiBzaGFyZQppdC4K
KFdlYkNvcmU6OkRvd25sb2FkQnVuZGxlOjpmaWxlRXh0ZW5zaW9uKToKRGl0dG8uCihXZWJDb3Jl
OjpEb3dubG9hZEJ1bmRsZTo6YXBwZW5kUmVzdW1lRGF0YSk6CkRpdHRvIC0gYnV0IG1vZGlmaWVk
IHRvIHJldHVybiBib29sIHJhdGhlciB0aGFuIEhSRVNVTFQgYW5kIHRvIGNsZWFuIHVwCndoaXRl
c3BhY2UuCihXZWJDb3JlOjpEb3dubG9hZEJ1bmRsZTo6ZXh0cmFjdFJlc3VtZURhdGEpOgpEaXR0
byAtIG1vZGlmaWVkIHRvIGNsZWFuIHVwIHdoaXRlc3BhY2UuCgpTb3VyY2UvV2ViS2l0L3dpbjoK
CiogV2ViRG93bmxvYWQuY3BwOgooV2ViRG93bmxvYWQ6OmJ1bmRsZVBhdGhGb3JUYXJnZXRQYXRo
KToKVXNlIHRoZSBuZXcgV2ViQ29yZTo6RG93bmxvYWRCdW5kbGUgZnVuY3Rpb24uCihXZWJEb3du
bG9hZDo6cmVxdWVzdCk6CgoqIFdlYkRvd25sb2FkLmg6ClJlbW92ZWQgZGVjbGFyYXRpb25zIGZv
ciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vdmVkIHRvIGEgbmV3IGxvY2F0aW9uLgoKKiBXZWJEb3du
bG9hZENGTmV0LmNwcDoKKFdlYkRvd25sb2FkOjppbml0VG9SZXN1bWVXaXRoQnVuZGxlKToKVXNl
IHRoZSBuZXcgV2ViQ29yZTo6RG93bmxvYWRCdW5kbGUgZnVuY3Rpb24uCihXZWJEb3dubG9hZDo6
Y2FuY2VsRm9yUmVzdW1lKToKRml4IGEgbGVhayBvZiB0aGUgcmVzdW1lIGRhdGEgQ0ZEYXRhUmVm
IGJ5IHVzaW5nIGFkb3B0Q0YoKS4gVXNlIHRoZSBuZXcKV2ViQ29yZTo6RG93bmxvYWRCdW5kbGUg
ZnVuY3Rpb24uCgpTb3VyY2UvV2ViS2l0MjoKCiogV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwOgooV2ViS2l0OjpEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWUpOgpDYWxsIGRpZERlY2lkZURlc3RpbmF0aW9uKCksIG5vdyB0aGF0IHRoZSBkZXN0
aW5hdGlvbiBpcyBkZWNpZGVkLgoKKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oOgpE
ZWNsYXJlIGRpZERlY2lkZURlc3RpbmF0aW9uKCkuIEFkZGVkIG1lbWJlciB2YXJpYWJsZXMgdG8g
aG9sZCB0aGUKZGVzdGluYXRpb24gZmlsZSBwYXRoIGFuZCB0aGUgZG93bmxvYWQgYnVuZGxlIHBh
dGguCihXZWJLaXQ6OkRvd25sb2FkOjpkZXN0aW5hdGlvbik6ClJldHVybiB0aGUgcGF0aCB0byB0
aGUgZmluYWwgZGVzdGluYXRpb24gZm9yIHRoaXMgZG93bmxvYWQuCgoqIFdlYlByb2Nlc3MvRG93
bmxvYWRzL2NmL0Rvd25sb2FkQ0ZOZXQuY3BwOgooV2ViS2l0OjpEb3dubG9hZDo6c3RhcnQpOgpS
ZW1vdmUgdGhlIG5hbWUgb2YgYW4gdW51c2VkIHBhcmFtLgooV2ViS2l0OjpEb3dubG9hZDo6c3Rh
cnRXaXRoSGFuZGxlKToKRGl0dG8uCihXZWJLaXQ6OkRvd25sb2FkOjpjYW5jZWwpOgpUZWxsIENG
TmV0d29yayBub3QgdG8gZGVsZXRlIHRoZSBmaWxlIHVwb24gZmFpbHVyZSwgYW5kIHRlbGwgaXQg
dG8KY2FuY2VsIHRoZSBkb3dubG9hZC4gQ29weSB0aGUgcmVzdW1lIGRhdGEgZm9yIHRoZSBkb3du
bG9hZCwgYW5kIGFwcGVuZAppdCB0byB0aGUgZG93bmxvYWQgYnVuZGxlLiBDYWxsIGRpZENhbmNl
bCgpIHdpdGggYW4gZW1wdHkKRGF0YVJlZmVyZW5jZSwgc2luY2Ugd2UgaGF2ZSB3cml0dGVuIG91
ciBvd24gcmVzdW1lIGRhdGEuCihXZWJLaXQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZE9iamVjdE5hbWVDYWxsYmFjayk6ClJlbW92ZSBzb21lIHVudXNlZCBwYXJhbSBuYW1lcy4gUmVt
b3ZlZCB0aGUgY2FsbCB0bwpDRlVSTERvd25sb2FkU2V0RGVzdGluYXRpb24oKSAtIHRoaXMgaXMg
bm93IGhhbmRsZWQgaW4KRG93bmxvYWQ6OmRpZERlY2lkZURlc3RpbmF0aW9uKCkuCihXZWJLaXQ6
OmRpZENyZWF0ZURlc3RpbmF0aW9uQ2FsbGJhY2spOgpSZXBvcnQgdGhhdCB0aGUgZmluYWwgZGVz
dGluYXRpb24gd2FzIGNyZWF0ZWQsIHJhdGhlciB0aGFuIHRoZSBkb3dubG9hZApidW5kbGUsIG1h
dGNoaW5nIG9sZCBXZWJLaXQuCihXZWJLaXQ6OkRvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlv
bik6ClN0b3JlIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBhbmQgdGhlIGRvd25sb2FkIGJ1bmRsZSBw
YXRocywgYW5kIGNhbGwKQ0ZVUkxEb3dubG9hZFNldERlc3RpbmF0aW9uKCksIHBhc3NpbmcgdGhl
IHBhdGggdG8gdGhlIGRvd25sb2FkIGJ1bmRsZS4KCiogV2ViUHJvY2Vzcy9Eb3dubG9hZHMvY3Vy
bC9Eb3dubG9hZEN1cmwuY3BwOgooV2ViS2l0OjpEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRp
b24pOgpTdHViYmVkLgoKKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW06
CihXZWJLaXQ6OkRvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlvbik6ClN0dWJiZWQgLSB1bm5l
ZWRlZCBvbiB0aGUgTWFjLgoKKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9Eb3dubG9hZFF0LmNw
cDoKKFdlYktpdDo6RG93bmxvYWQ6OmRpZERlY2lkZURlc3RpbmF0aW9uKToKU3R1YmJlZC4KLS0t
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MjQgKysrCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiAgICAg
ICB8ICAgIDggKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Eb3dubG9hZEJ1bmRs
ZS5oICAgfCAgIDQ1ICsrKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5k
bGVXaW4uY3BwICAgICB8ICAxOTcgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyArKysKIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkRvd25sb2FkLmNwcCAgICAgICAgICAgICAgICAgIHwgIDE2NCArLS0tLS0t
LS0tLS0tLS0tLQogU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQuaCAgICAgICAgICAgICAg
ICAgICAgfCAgICAzIC0KIFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkQ0ZOZXQuY3BwICAg
ICAgICAgICAgIHwgICAxNSArLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDUxICsrKysrCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5jcHAgICB8ICAgIDIgKwogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuaCAgICAgfCAgICA3ICsKIC4uLi9XZWJQcm9jZXNzL0Rvd25s
b2Fkcy9jZi9Eb3dubG9hZENGTmV0LmNwcCAgICAgIHwgICA1MiArKysrLS0KIC4uLi9XZWJQcm9j
ZXNzL0Rvd25sb2Fkcy9jdXJsL0Rvd25sb2FkQ3VybC5jcHAgICAgIHwgICAgNSArCiAuLi4vV2Vi
UHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tICAgICAgICB8ICAgIDQgKwogLi4u
L1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvcXQvRG93bmxvYWRRdC5jcHAgfCAgICA1ICsK
IDE1IGZpbGVzIGNoYW5nZWQsIDQxOCBpbnNlcnRpb25zKCspLCAxODcgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Eb3du
bG9hZEJ1bmRsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQyZTU3N2Eu
LmNmZDg3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMS0wMS0yNyAgSm9uIEhv
bmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgorCisgICAgICAgIERvd25sb2FkcyBpbiBX
SzIgb24gV2luZG93cyBzaG91bGQgd3JpdGUgcmVzdW1lIGRhdGEgdG8gYnVuZGxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzI4MgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vODc1MzA3Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICBBZGRlZCBuZXcgZmlsZXMgdG8gcHJvamVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvRG93bmxvYWRCdW5kbGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRv
d25sb2FkQnVuZGxlOjptYWdpY051bWJlcik6CisgICAgICAgIE1vdmVkIGZyb20gV2ViS2l0J3Mg
V2ViRG93bmxvYWQgc28gdGhhdCBXZWJLaXQgYW5kIFdlYktpdDIgY2FuIHNoYXJlCisgICAgICAg
IGl0LgorICAgICAgICAoV2ViQ29yZTo6RG93bmxvYWRCdW5kbGU6OmZpbGVFeHRlbnNpb24pOgor
ICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvd25sb2FkQnVuZGxlOjphcHBlbmRS
ZXN1bWVEYXRhKToKKyAgICAgICAgRGl0dG8gLSBidXQgbW9kaWZpZWQgdG8gcmV0dXJuIGJvb2wg
cmF0aGVyIHRoYW4gSFJFU1VMVCBhbmQgdG8gY2xlYW4gdXAKKyAgICAgICAgd2hpdGVzcGFjZS4K
KyAgICAgICAgKFdlYkNvcmU6OkRvd25sb2FkQnVuZGxlOjpleHRyYWN0UmVzdW1lRGF0YSk6Cisg
ICAgICAgIERpdHRvIC0gbW9kaWZpZWQgdG8gY2xlYW4gdXAgd2hpdGVzcGFjZS4KKwogMjAxMS0w
MS0xNyAgSGVsZGVyIENvcnJlaWEgIDxoZWxkZXJAc2VuY2hhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCAzOTY3MWEwLi5lOGQ2Y2QxIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjkyNDgsNiArMjkyNDgsMTAgQEAK
IAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxEb3dubG9hZEJ1bmRsZS5o
IgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY2ZcRm9ybURhdGFTdHJlYW1DRk5ldC5jcHAiCiAJCQkJCQk+
CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTI5NTQwLDYgKzI5NTQ0LDEwIEBACiAJCQkJ
CU5hbWU9IndpbiIKIAkJCQkJPgogCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXHdpblxEb3dubG9hZEJ1bmRsZVdpbi5jcHAiCisJCQkJCQk+CisJCQkJ
CTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0
d29ya1x3aW5cTmV0d29ya1N0YXRlTm90aWZpZXJXaW4uY3BwIgogCQkJCQkJPgogCQkJCQk8L0Zp
bGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Rvd25s
b2FkQnVuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Rvd25sb2Fk
QnVuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1OTI3NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRG93bmxv
YWRCdW5kbGUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRG93bmxvYWRC
dW5kbGVfaAorI2RlZmluZSBEb3dubG9hZEJ1bmRsZV9oCisKK25hbWVzcGFjZSBXVEYgeworICAg
IGNsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgRG93
bmxvYWRCdW5kbGUgeworCitib29sIGFwcGVuZFJlc3VtZURhdGEoQ0ZEYXRhUmVmIHJlc3VtZURh
dGEsIGNvbnN0IFdURjo6U3RyaW5nJiBidW5kbGVQYXRoKTsKK0NGRGF0YVJlZiBleHRyYWN0UmVz
dW1lRGF0YShjb25zdCBXVEY6OlN0cmluZyYgYnVuZGxlUGF0aCk7Citjb25zdCBXVEY6OlN0cmlu
ZyYgZmlsZUV4dGVuc2lvbigpOworCit9CisKK30KKworI2VuZGlmIC8vIERvd25sb2FkQnVuZGxl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Rvd25s
b2FkQnVuZGxlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Rv
d25sb2FkQnVuZGxlV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40
MjRhODdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkQnVuZGxlLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKKyNpbmNsdWRlIDxpby5oPgorCit1c2luZyBXVEY6OlN0cmluZzsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgRG93bmxvYWRCdW5kbGUgeworCitzdGF0aWMgVUludDMy
IG1hZ2ljTnVtYmVyKCkKK3sKKyAgIHJldHVybiAweERFQ0FGNEVBOworfQorCitjb25zdCBTdHJp
bmcmIGZpbGVFeHRlbnNpb24oKQoreworICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIGV4dGVuc2lvbiwgKCIuZG93bmxvYWQiKSk7CisgICByZXR1cm4gZXh0ZW5zaW9uOworfQor
Citib29sIGFwcGVuZFJlc3VtZURhdGEoQ0ZEYXRhUmVmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmlu
ZyYgYnVuZGxlUGF0aCkKK3sKKyAgICBpZiAoIXJlc3VtZURhdGEpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJJbnZhbGlkIHJlc3VtZSBkYXRhIHRvIHdyaXRlIHRvIGJ1bmRsZSBwYXRoIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKGJ1bmRsZVBhdGguaXNFbXB0eSgpKSB7
CisgICAgICAgIExPR19FUlJPUigiQ2Fubm90IHdyaXRlIHJlc3VtZSBkYXRhIHRvIGVtcHR5IGRv
d25sb2FkIGJ1bmRsZSBwYXRoIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBTdHJpbmcgbnVsbGlmaWVkUGF0aCA9IGJ1bmRsZVBhdGg7CisgICAgRklMRSogYnVuZGxlID0g
MDsKKyAgICBpZiAoX3dmb3Blbl9zKCZidW5kbGUsIG51bGxpZmllZFBhdGguY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgVEVYVCgiYWIiKSkgfHwgIWJ1bmRsZSkgeworICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGZpbGUgJXMgdG8gYXBwZW5kIHJlc3VtZSBkYXRhIiwg
YnVuZGxlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisgICAgY29uc3QgVUludDgqIHJlc3VtZUJ5
dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihyZXN1bWVEYXRhKTsKKyAgICBBU1NFUlQocmVzdW1lQnl0
ZXMpOworICAgIGlmICghcmVzdW1lQnl0ZXMpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIFVJ
bnQzMiByZXN1bWVMZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgocmVzdW1lRGF0YSk7CisgICAgQVNT
RVJUKHJlc3VtZUxlbmd0aCA+IDApOworICAgIGlmIChyZXN1bWVMZW5ndGggPCAxKQorICAgICAg
ICBnb3RvIGV4aXQ7CisKKyAgICBpZiAoZndyaXRlKHJlc3VtZUJ5dGVzLCAxLCByZXN1bWVMZW5n
dGgsIGJ1bmRsZSkgIT0gcmVzdW1lTGVuZ3RoKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIHdyaXRlIHJlc3VtZSBkYXRhIHRvIHRoZSBidW5kbGUgLSBlcnJubyglaSkiLCBlcnJubyk7
CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiAoZndyaXRlKCZyZXN1bWVMZW5n
dGgsIDQsIDEsIGJ1bmRsZSkgIT0gMSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3
cml0ZSBmb290ZXIgbGVuZ3RoIHRvIHRoZSBidW5kbGUgLSBlcnJubyglaSkiLCBlcnJubyk7Cisg
ICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBjb25zdCBVSW50MzImIG1hZ2ljID0gbWFn
aWNOdW1iZXIoKTsKKyAgICBpZiAoZndyaXRlKCZtYWdpYywgNCwgMSwgYnVuZGxlKSAhPSAxKSB7
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdyaXRlIGZvb3RlciBtYWdpYyBudW1iZXIg
dG8gdGhlIGJ1bmRsZSAtIGVycm5vKCVpKSIsIGVycm5vKTsKKyAgICAgICAgZ290byBleGl0Owor
ICAgIH0KKworICAgIHJlc3VsdCA9IHRydWU7CitleGl0OgorICAgIGZjbG9zZShidW5kbGUpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NGRGF0YVJlZiBleHRyYWN0UmVzdW1lRGF0YShjb25z
dCBTdHJpbmcmIGJ1bmRsZVBhdGgpCit7CisgICAgaWYgKGJ1bmRsZVBhdGguaXNFbXB0eSgpKSB7
CisgICAgICAgIExPR19FUlJPUigiQ2Fubm90IGNyZWF0ZSByZXN1bWUgZGF0YSBmcm9tIGVtcHR5
IGRvd25sb2FkIGJ1bmRsZSBwYXRoIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IC8vIE9wZW4gYSBoYW5kbGUgdG8gdGhlIGJ1bmRsZSBmaWxlCisgICAgU3RyaW5nIG51bGxpZmll
ZFBhdGggPSBidW5kbGVQYXRoOworICAgIEZJTEUqIGJ1bmRsZSA9IDA7CisgICAgaWYgKF93Zm9w
ZW5fcygmYnVuZGxlLCBudWxsaWZpZWRQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCksIFRFWFQoInIrYiIpKSB8fCAhYnVuZGxlKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIG9wZW4gZmlsZSAlcyB0byBnZXQgcmVzdW1lIGRhdGEiLCBidW5kbGVQYXRoLmFzY2lpKCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQ0ZEYXRhUmVmIHJlc3Vs
dCA9IDA7CisgICAgVmVjdG9yPFVJbnQ4PiBmb290ZXJCdWZmZXI7CisKKyAgICAvLyBTdGF0IHRo
ZSBmaWxlIHRvIGdldCBpdHMgc2l6ZQorICAgIHN0cnVjdCBfc3RhdDY0IGZpbGVTdGF0OworICAg
IGlmIChfZnN0YXQ2NChfZmlsZW5vKGJ1bmRsZSksICZmaWxlU3RhdCkpCisgICAgICAgIGdvdG8g
ZXhpdDsKKworICAgIC8vIENoZWNrIGZvciB0aGUgYnVuZGxlIG1hZ2ljIG51bWJlciBhdCB0aGUg
ZW5kIG9mIHRoZSBmaWxlCisgICAgZnBvc190IGZvb3Rlck1hZ2ljTnVtYmVyUG9zaXRpb24gPSBm
aWxlU3RhdC5zdF9zaXplIC0gNDsKKyAgICBBU1NFUlQoZm9vdGVyTWFnaWNOdW1iZXJQb3NpdGlv
biA+PSAwKTsKKyAgICBpZiAoZm9vdGVyTWFnaWNOdW1iZXJQb3NpdGlvbiA8IDApCisgICAgICAg
IGdvdG8gZXhpdDsKKyAgICBpZiAoZnNldHBvcyhidW5kbGUsICZmb290ZXJNYWdpY051bWJlclBv
c2l0aW9uKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgVUludDMyIGZvb3Rlck1hZ2ljTnVt
YmVyID0gMDsKKyAgICBpZiAoZnJlYWQoJmZvb3Rlck1hZ2ljTnVtYmVyLCA0LCAxLCBidW5kbGUp
ICE9IDEpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmb290ZXIgbWFnaWMg
bnVtYmVyIGZyb20gdGhlIGJ1bmRsZSAtIGVycm5vKCVpKSIsIGVycm5vKTsKKyAgICAgICAgZ290
byBleGl0OworICAgIH0KKworICAgIGlmIChmb290ZXJNYWdpY051bWJlciAhPSBtYWdpY051bWJl
cigpKSB7CisgICAgICAgIExPR19FUlJPUigiRm9vdGVyJ3MgbWFnaWMgbnVtYmVyIGRvZXMgbm90
IG1hdGNoIDB4JVggLSBlcnJubyglaSkiLCBtYWdpY051bWJlcigpLCBlcnJubyk7CisgICAgICAg
IGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBOb3cgd2UncmUgKnJlYXNvbmFibHkqIHN1cmUg
dGhpcyBpcyBhIC5kb3dubG9hZCBidW5kbGUgd2UgYWN0dWFsbHkgd3JvdGUuCisgICAgLy8gR2V0
IHRoZSBsZW5ndGggb2YgdGhlIHJlc3VtZSBkYXRhCisgICAgZnBvc190IGZvb3Rlckxlbmd0aFBv
c2l0aW9uID0gZmlsZVN0YXQuc3Rfc2l6ZSAtIDg7CisgICAgQVNTRVJUKGZvb3Rlckxlbmd0aFBv
c2l0aW9uID49IDApOworICAgIGlmIChmb290ZXJMZW5ndGhQb3NpdGlvbiA8IDApCisgICAgICAg
IGdvdG8gZXhpdDsKKworICAgIGlmIChmc2V0cG9zKGJ1bmRsZSwgJmZvb3Rlckxlbmd0aFBvc2l0
aW9uKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgVUludDMyIGZvb3Rlckxlbmd0aCA9IDA7
CisgICAgaWYgKGZyZWFkKCZmb290ZXJMZW5ndGgsIDQsIDEsIGJ1bmRsZSkgIT0gMSkgeworICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIFJlc3VtZURhdGEgbGVuZ3RoIGZyb20gdGhl
IGJ1bmRsZSAtIGVycm5vKCVpKSIsIGVycm5vKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0K
KworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZXMgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgaW4gZm9yIHRo
ZSByZXN1bWUgZGF0YSwgYW5kIHBlcmZvcm0gdGhlIHJlYWQKKyAgICBmcG9zX3QgZm9vdGVyU3Rh
cnRQb3NpdGlvbiA9IGZpbGVTdGF0LnN0X3NpemUgLSA4IC0gZm9vdGVyTGVuZ3RoOworICAgIEFT
U0VSVChmb290ZXJTdGFydFBvc2l0aW9uID49IDApOworICAgIGlmIChmb290ZXJTdGFydFBvc2l0
aW9uIDwgMCkKKyAgICAgICAgZ290byBleGl0OworICAgIGlmIChmc2V0cG9zKGJ1bmRsZSwgJmZv
b3RlclN0YXJ0UG9zaXRpb24pKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBmb290ZXJCdWZm
ZXIucmVzaXplKGZvb3Rlckxlbmd0aCk7CisgICAgaWYgKGZyZWFkKGZvb3RlckJ1ZmZlci5kYXRh
KCksIDEsIGZvb3Rlckxlbmd0aCwgYnVuZGxlKSAhPSBmb290ZXJMZW5ndGgpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBSZXN1bWVEYXRhIGZyb20gdGhlIGJ1bmRsZSAtIGVy
cm5vKCVpKSIsIGVycm5vKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIENG
VVJMRG93bmxvYWQgd2lsbCBzZWVrIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUgZmls
ZSAoYmVmb3JlIG91ciBmb290ZXIpIGFuZCBzdGFydCBvdmVyd3JpdGluZyBmcm9tIHRoZXJlCisg
ICAgLy8gSG93ZXZlciwgc2F5IHdlIHdlcmUgd2l0aGluIGEgZmV3IGh1bmRyZWQgYnl0ZXMgb2Yg
dGhlIGVuZCBvZiBhIGRvd25sb2FkIHdoZW4gaXQgd2FzIHBhdXNlZCAtCisgICAgLy8gVGhlIGFk
ZGl0aW9uYWwgZm9vdGVyIGV4dGVuZGVkIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUgYmV5b25kIGl0
cyBmaW5hbCBsZW5ndGgsIGFuZCB0aGVyZSB3aWxsIGJlIGp1bmsgZGF0YSBsZWZ0b3ZlcgorICAg
IC8vIGF0IHRoZSBlbmQuICBUaGVyZWZvcmUsIG5vdyB0aGF0IHdlJ3ZlIHJldHJpZXZlZCB0aGUg
Zm9vdGVyIGRhdGEsIHdlIG5lZWQgdG8gdHJ1bmNhdGUgaXQuCisgICAgaWYgKGVycm5vX3QgcmVz
aXplRXJyb3IgPSBfY2hzaXplX3MoX2ZpbGVubyhidW5kbGUpLCBmb290ZXJTdGFydFBvc2l0aW9u
KSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB0cnVuY2F0ZSB0aGUgcmVzdW1lIGZv
b3RlciBvZmYgdGhlIGVuZCBvZiB0aGUgZmlsZSAtIGVycm5vKCVpKSIsIHJlc2l6ZUVycm9yKTsK
KyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8vIEZpbmFsbHksIG1ha2UgdGhlIHJl
c3VtZSBkYXRhLiAgTm93LCBpdCBpcyBwb3NzaWJsZSBieSBzb21lIHR3aXN0IG9mIGZhdGUgdGhl
IGJ1bmRsZSBtYWdpYyBudW1iZXIKKyAgICAvLyB3YXMgbmF0dXJhbGx5IGF0IHRoZSBlbmQgb2Yg
dGhlIGZpbGUgYW5kIGl0cyBub3QgYWN0dWFsbHkgYSB2YWxpZCBidW5kbGUuICBUaGF0LCBvciBz
b21lb25lIGVuZ2luZWVyZWQKKyAgICAvLyBpdCB0aGF0IHdheSB0byB0cnkgdG8gYXR0YWNrIHVz
LiAgSW4gdGhhdCBjYXVzZSwgdGhpcyBDRkRhdGEgd2lsbCBzdWNjZXNzZnVsbHkgY3JlYXRlIGJ1
dCB3aGVuIHdlIAorICAgIC8vIGFjdHVhbGx5IHRyeSB0byBzdGFydCB0aGUgQ0ZVUkxEb3dubG9h
ZCB1c2luZyB0aGlzIGJvZ3VzIGRhdGEsIGl0IHdpbGwgZmFpbCBhbmQgd2Ugd2lsbCBoYW5kbGUg
dGhhdCBncmFjZWZ1bGx5CisgICAgcmVzdWx0ID0gQ0ZEYXRhQ3JlYXRlKDAsIGZvb3RlckJ1ZmZl
ci5kYXRhKCksIGZvb3Rlckxlbmd0aCk7CitleGl0OgorICAgIGZjbG9zZShidW5kbGUpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIERvd25sb2FkQnVuZGxlCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCAxZDkwNzQzLi4xYTUyY2Ji
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDEtMjcgIEpvbiBIb25l
eWN1dHQgIDxqaG9uZXljdXR0QGFwcGxlLmNvbT4KKworICAgICAgICBEb3dubG9hZHMgaW4gV0sy
IG9uIFdpbmRvd3Mgc2hvdWxkIHdyaXRlIHJlc3VtZSBkYXRhIHRvIGJ1bmRsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyODIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzg3NTMwNzc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJEb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJEb3dubG9hZDo6
YnVuZGxlUGF0aEZvclRhcmdldFBhdGgpOgorICAgICAgICBVc2UgdGhlIG5ldyBXZWJDb3JlOjpE
b3dubG9hZEJ1bmRsZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkRvd25sb2FkOjpyZXF1ZXN0KToK
KworICAgICAgICAqIFdlYkRvd25sb2FkLmg6CisgICAgICAgIFJlbW92ZWQgZGVjbGFyYXRpb25z
IGZvciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vdmVkIHRvIGEgbmV3IGxvY2F0aW9uLgorCisgICAg
ICAgICogV2ViRG93bmxvYWRDRk5ldC5jcHA6CisgICAgICAgIChXZWJEb3dubG9hZDo6aW5pdFRv
UmVzdW1lV2l0aEJ1bmRsZSk6CisgICAgICAgIFVzZSB0aGUgbmV3IFdlYkNvcmU6OkRvd25sb2Fk
QnVuZGxlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViRG93bmxvYWQ6OmNhbmNlbEZvclJlc3VtZSk6
CisgICAgICAgIEZpeCBhIGxlYWsgb2YgdGhlIHJlc3VtZSBkYXRhIENGRGF0YVJlZiBieSB1c2lu
ZyBhZG9wdENGKCkuIFVzZSB0aGUgbmV3CisgICAgICAgIFdlYkNvcmU6OkRvd25sb2FkQnVuZGxl
IGZ1bmN0aW9uLgorCiAyMDExLTAxLTE3ICBUb255IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkRvd25sb2FkLmNwcAppbmRleCBmYzcyMjMyLi40NWUzNmNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4v
V2ViRG93bmxvYWQuY3BwCkBAIC0zOCwxMiArMzgsOSBAQAogI2luY2x1ZGUgIldlYlVSTFJlc3Bv
bnNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaW5jbHVkZSA8aW8uaD4K
LSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCiAjcHJhZ21h
IHdhcm5pbmcocHVzaCwgMCkKICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0Rvd25sb2FkQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KQEAgLTU1LDE4ICs1Miw2IEBACiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi0vLyBEb3dubG9hZCBCdW5kbGUgZmlsZSB1dGlsaXRpZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotY29uc3QgU3RyaW5nJiBXZWJEb3dubG9hZDo6YnVuZGxlRXh0ZW5zaW9uKCkKLXsKLSAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBidW5kbGVFeHRlbnNpb24sICgiLmRvd25s
b2FkIikpOwotICAgcmV0dXJuIGJ1bmRsZUV4dGVuc2lvbjsKLX0KLQotVUludDMyIFdlYkRvd25s
b2FkOjpidW5kbGVNYWdpY051bWJlcigpCi17Ci0gICByZXR1cm4gMHhERUNBRjRFQTsKLX0KLQog
Ly8gV2ViRG93bmxvYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXZWJEb3dubG9hZDo6V2ViRG93bmxvYWQoKQpAQCAt
MTY1LDcgKzE1MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmJ1
bmRsZVBhdGhGb3JUYXJnZXRQYXRoKAogICAgIGlmIChidW5kbGVbYnVuZGxlLmxlbmd0aCgpLTFd
ID09ICcvJykKICAgICAgICAgYnVuZGxlLnRydW5jYXRlKDEpOwogCi0gICAgYnVuZGxlICs9IGJ1
bmRsZUV4dGVuc2lvbigpOworICAgIGJ1bmRsZSArPSBEb3dubG9hZEJ1bmRsZTo6ZmlsZUV4dGVu
c2lvbigpOwogICAgICpidW5kbGVQYXRoID0gU3lzQWxsb2NTdHJpbmdMZW4oYnVuZGxlLmNoYXJh
Y3RlcnMoKSwgYnVuZGxlLmxlbmd0aCgpKTsKICAgICBpZiAoISpidW5kbGVQYXRoKQogICAgICAg
IHJldHVybiBFX0ZBSUw7CkBAIC0xODIsMTQ4ICsxNjcsMyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkRvd25sb2FkOjpyZXF1ZXN0KAogICAgIH0KICAgICByZXR1cm4gU19PSzsKIH0K
LQotLy8gRG93bmxvYWQgQnVuZGxlIGZpbGUgdXRpbGl0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ0ZEYXRhUmVm
IFdlYkRvd25sb2FkOjpleHRyYWN0UmVzdW1lRGF0YUZyb21CdW5kbGUoY29uc3QgU3RyaW5nJiBi
dW5kbGVQYXRoKQotewotICAgIGlmIChidW5kbGVQYXRoLmlzRW1wdHkoKSkgewotICAgICAgICBM
T0dfRVJST1IoIkNhbm5vdCBjcmVhdGUgcmVzdW1lIGRhdGEgZnJvbSBlbXB0eSBkb3dubG9hZCBi
dW5kbGUgcGF0aCIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgLy8gT3Bl
biBhIGhhbmRsZSB0byB0aGUgYnVuZGxlIGZpbGUKLSAgICBTdHJpbmcgbnVsbGlmaWVkUGF0aCA9
IGJ1bmRsZVBhdGg7Ci0gICAgRklMRSogYnVuZGxlID0gMDsKLSAgICBpZiAoX3dmb3Blbl9zKCZi
dW5kbGUsIG51bGxpZmllZFBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgVEVY
VCgicitiIikpIHx8ICFidW5kbGUpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3Bl
biBmaWxlICVzIHRvIGdldCByZXN1bWUgZGF0YSIsIGJ1bmRsZVBhdGguYXNjaWkoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBDRkRhdGFSZWYgcmVzdWx0ID0gMDsK
LSAgICBWZWN0b3I8VUludDg+IGZvb3RlckJ1ZmZlcjsKLSAgICAKLSAgICAvLyBTdGF0IHRoZSBm
aWxlIHRvIGdldCBpdHMgc2l6ZQotICAgIHN0cnVjdCBfc3RhdDY0IGZpbGVTdGF0OwotICAgIGlm
IChfZnN0YXQ2NChfZmlsZW5vKGJ1bmRsZSksICZmaWxlU3RhdCkpCi0gICAgICAgIGdvdG8gZXhp
dDsKLSAgICAKLSAgICAvLyBDaGVjayBmb3IgdGhlIGJ1bmRsZSBtYWdpYyBudW1iZXIgYXQgdGhl
IGVuZCBvZiB0aGUgZmlsZQotICAgIGZwb3NfdCBmb290ZXJNYWdpY051bWJlclBvc2l0aW9uID0g
ZmlsZVN0YXQuc3Rfc2l6ZSAtIDQ7Ci0gICAgQVNTRVJUKGZvb3Rlck1hZ2ljTnVtYmVyUG9zaXRp
b24gPj0gMCk7Ci0gICAgaWYgKGZvb3Rlck1hZ2ljTnVtYmVyUG9zaXRpb24gPCAwKQotICAgICAg
ICBnb3RvIGV4aXQ7Ci0gICAgaWYgKGZzZXRwb3MoYnVuZGxlLCAmZm9vdGVyTWFnaWNOdW1iZXJQ
b3NpdGlvbikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIFVJbnQzMiBmb290ZXJNYWdpY051
bWJlciA9IDA7Ci0gICAgaWYgKGZyZWFkKCZmb290ZXJNYWdpY051bWJlciwgNCwgMSwgYnVuZGxl
KSAhPSAxKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZm9vdGVyIG1hZ2lj
IG51bWJlciBmcm9tIHRoZSBidW5kbGUgLSBlcnJubyglaSkiLCBlcnJubyk7ICAKLSAgICAgICAg
Z290byBleGl0OwotICAgIH0KLQotICAgIGlmIChmb290ZXJNYWdpY051bWJlciAhPSBidW5kbGVN
YWdpY051bWJlcigpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRm9vdGVyJ3MgbWFnaWMgbnVtYmVy
IGRvZXMgbm90IG1hdGNoIDB4JVggLSBlcnJubyglaSkiLCBidW5kbGVNYWdpY051bWJlcigpLCBl
cnJubyk7ICAKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIC8vIE5vdyB3ZSdyZSAq
cmVhc29uYWJseSogc3VyZSB0aGlzIGlzIGEgLmRvd25sb2FkIGJ1bmRsZSB3ZSBhY3R1YWxseSB3
cm90ZS4gCi0gICAgLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIHJlc3VtZSBkYXRhCi0gICAgZnBv
c190IGZvb3Rlckxlbmd0aFBvc2l0aW9uID0gZmlsZVN0YXQuc3Rfc2l6ZSAtIDg7Ci0gICAgQVNT
RVJUKGZvb3Rlckxlbmd0aFBvc2l0aW9uID49IDApOwotICAgIGlmIChmb290ZXJMZW5ndGhQb3Np
dGlvbiA8IDApCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGlmIChmc2V0cG9zKGJ1bmRsZSwg
JmZvb3Rlckxlbmd0aFBvc2l0aW9uKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgVUludDMy
IGZvb3Rlckxlbmd0aCA9IDA7Ci0gICAgaWYgKGZyZWFkKCZmb290ZXJMZW5ndGgsIDQsIDEsIGJ1
bmRsZSkgIT0gMSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIFJlc3VtZURh
dGEgbGVuZ3RoIGZyb20gdGhlIGJ1bmRsZSAtIGVycm5vKCVpKSIsIGVycm5vKTsgIAotICAgICAg
ICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZXJlcyBlbm91Z2ggYnl0
ZXMgdG8gcmVhZCBpbiBmb3IgdGhlIHJlc3VtZSBkYXRhLCBhbmQgcGVyZm9ybSB0aGUgcmVhZAot
ICAgIGZwb3NfdCBmb290ZXJTdGFydFBvc2l0aW9uID0gZmlsZVN0YXQuc3Rfc2l6ZSAtIDggLSBm
b290ZXJMZW5ndGg7Ci0gICAgQVNTRVJUKGZvb3RlclN0YXJ0UG9zaXRpb24gPj0gMCk7Ci0gICAg
aWYgKGZvb3RlclN0YXJ0UG9zaXRpb24gPCAwKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgaWYg
KGZzZXRwb3MoYnVuZGxlLCAmZm9vdGVyU3RhcnRQb3NpdGlvbikpCi0gICAgICAgIGdvdG8gZXhp
dDsKLQotICAgIGZvb3RlckJ1ZmZlci5yZXNpemUoZm9vdGVyTGVuZ3RoKTsKLSAgICBpZiAoZnJl
YWQoZm9vdGVyQnVmZmVyLmRhdGEoKSwgMSwgZm9vdGVyTGVuZ3RoLCBidW5kbGUpICE9IGZvb3Rl
ckxlbmd0aCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIFJlc3VtZURhdGEg
ZnJvbSB0aGUgYnVuZGxlIC0gZXJybm8oJWkpIiwgZXJybm8pOyAgCi0gICAgICAgIGdvdG8gZXhp
dDsKLSAgICB9Ci0KLSAgICAvLyBDRlVSTERvd25sb2FkIHdpbGwgc2VlayB0byB0aGUgYXBwcm9w
cmlhdGUgcGxhY2UgaW4gdGhlIGZpbGUgKGJlZm9yZSBvdXIgZm9vdGVyKSBhbmQgc3RhcnQgb3Zl
cndyaXRpbmcgZnJvbSB0aGVyZQotICAgIC8vIEhvd2V2ZXIsIHNheSB3ZSB3ZXJlIHdpdGhpbiBh
IGZldyBodW5kcmVkIGJ5dGVzIG9mIHRoZSBlbmQgb2YgYSBkb3dubG9hZCB3aGVuIGl0IHdhcyBw
YXVzZWQgLQotICAgIC8vIFRoZSBhZGRpdGlvbmFsIGZvb3RlciBleHRlbmRlZCB0aGUgbGVuZ3Ro
IG9mIHRoZSBmaWxlIGJleW9uZCBpdHMgZmluYWwgbGVuZ3RoLCBhbmQgdGhlcmUgd2lsbCBiZSBq
dW5rIGRhdGEgbGVmdG92ZXIKLSAgICAvLyBhdCB0aGUgZW5kLiAgVGhlcmVmb3JlLCBub3cgdGhh
dCB3ZSd2ZSByZXRyaWV2ZWQgdGhlIGZvb3RlciBkYXRhLCB3ZSBuZWVkIHRvIHRydW5jYXRlIGl0
LgotICAgIGlmIChlcnJub190IHJlc2l6ZUVycm9yID0gX2Noc2l6ZV9zKF9maWxlbm8oYnVuZGxl
KSwgZm9vdGVyU3RhcnRQb3NpdGlvbikpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
dHJ1bmNhdGUgdGhlIHJlc3VtZSBmb290ZXIgb2ZmIHRoZSBlbmQgb2YgdGhlIGZpbGUgLSBlcnJu
byglaSkiLCByZXNpemVFcnJvcik7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICAv
LyBGaW5hbGx5LCBtYWtlIHRoZSByZXN1bWUgZGF0YS4gIE5vdywgaXQgaXMgcG9zc2libGUgYnkg
c29tZSB0d2lzdCBvZiBmYXRlIHRoZSBidW5kbGUgbWFnaWMgbnVtYmVyCi0gICAgLy8gd2FzIG5h
dHVyYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBpdHMgbm90IGFjdHVhbGx5IGEgdmFs
aWQgYnVuZGxlLiAgVGhhdCwgb3Igc29tZW9uZSBlbmdpbmVlcmVkCi0gICAgLy8gaXQgdGhhdCB3
YXkgdG8gdHJ5IHRvIGF0dGFjayB1cy4gIEluIHRoYXQgY2F1c2UsIHRoaXMgQ0ZEYXRhIHdpbGwg
c3VjY2Vzc2Z1bGx5IGNyZWF0ZSBidXQgd2hlbiB3ZSAKLSAgICAvLyBhY3R1YWxseSB0cnkgdG8g
c3RhcnQgdGhlIENGVVJMRG93bmxvYWQgdXNpbmcgdGhpcyBib2d1cyBkYXRhLCBpdCB3aWxsIGZh
aWwgYW5kIHdlIHdpbGwgaGFuZGxlIHRoYXQgZ3JhY2VmdWxseQotICAgIHJlc3VsdCA9IENGRGF0
YUNyZWF0ZSgwLCBmb290ZXJCdWZmZXIuZGF0YSgpLCBmb290ZXJMZW5ndGgpOwotZXhpdDoKLSAg
ICBmY2xvc2UoYnVuZGxlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1IUkVTVUxUIFdlYkRv
d25sb2FkOjphcHBlbmRSZXN1bWVEYXRhVG9CdW5kbGUoQ0ZEYXRhUmVmIHJlc3VtZURhdGEsIGNv
bnN0IFN0cmluZyYgYnVuZGxlUGF0aCkKLXsKLSAgICBpZiAoIXJlc3VtZURhdGEpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJJbnZhbGlkIHJlc3VtZSBkYXRhIHRvIHdyaXRlIHRvIGJ1bmRsZSBwYXRo
Iik7Ci0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0gICAgfQotICAgIGlmIChidW5kbGVQYXRoLmlz
RW1wdHkoKSkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCB3cml0ZSByZXN1bWUgZGF0YSB0
byBlbXB0eSBkb3dubG9hZCBidW5kbGUgcGF0aCIpOwotICAgICAgICByZXR1cm4gRV9GQUlMOwot
ICAgIH0KLQotICAgIFN0cmluZyBudWxsaWZpZWRQYXRoID0gYnVuZGxlUGF0aDsKLSAgICBGSUxF
KiBidW5kbGUgPSAwOwotICAgIGlmIChfd2ZvcGVuX3MoJmJ1bmRsZSwgbnVsbGlmaWVkUGF0aC5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBURVhUKCJhYiIpKSB8fCAhYnVuZGxlKSB7
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZmlsZSAlcyB0byBhcHBlbmQgcmVz
dW1lIGRhdGEiLCBidW5kbGVQYXRoLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIEVf
RkFJTDsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIGhyID0gRV9GQUlMOwotCi0gICAgY29uc3QgVUlu
dDgqIHJlc3VtZUJ5dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihyZXN1bWVEYXRhKTsKLSAgICBBU1NF
UlQocmVzdW1lQnl0ZXMpOwotICAgIGlmICghcmVzdW1lQnl0ZXMpCi0gICAgICAgIGdvdG8gZXhp
dDsKLQotICAgIFVJbnQzMiByZXN1bWVMZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgocmVzdW1lRGF0
YSk7Ci0gICAgQVNTRVJUKHJlc3VtZUxlbmd0aCA+IDApOwotICAgIGlmIChyZXN1bWVMZW5ndGgg
PCAxKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBpZiAoZndyaXRlKHJlc3VtZUJ5dGVzLCAx
LCByZXN1bWVMZW5ndGgsIGJ1bmRsZSkgIT0gcmVzdW1lTGVuZ3RoKSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIHdyaXRlIHJlc3VtZSBkYXRhIHRvIHRoZSBidW5kbGUgLSBlcnJubygl
aSkiLCBlcnJubyk7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICBpZiAoZndyaXRl
KCZyZXN1bWVMZW5ndGgsIDQsIDEsIGJ1bmRsZSkgIT0gMSkgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byB3cml0ZSBmb290ZXIgbGVuZ3RoIHRvIHRoZSBidW5kbGUgLSBlcnJubyglaSki
LCBlcnJubyk7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICBjb25zdCBVSW50MzIm
IG1hZ2ljID0gYnVuZGxlTWFnaWNOdW1iZXIoKTsKLSAgICBpZiAoZndyaXRlKCZtYWdpYywgNCwg
MSwgYnVuZGxlKSAhPSAxKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdyaXRlIGZv
b3RlciBtYWdpYyBudW1iZXIgdG8gdGhlIGJ1bmRsZSAtIGVycm5vKCVpKSIsIGVycm5vKTsKLSAg
ICAgICAgZ290byBleGl0OwotICAgIH0KLSAgICAKLSAgICBociA9IFNfT0s7Ci1leGl0OgotICAg
IGZjbG9zZShidW5kbGUpOwotICAgIHJldHVybiBocjsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYkRvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZC5o
CmluZGV4IGJiYjY0NWUuLmRjNDIxOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dl
YkRvd25sb2FkLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQuaApAQCAtMTIy
LDEwICsxMjIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBD
RkRhdGFSZWYgZXh0cmFjdFJlc3VtZURhdGFGcm9tQnVuZGxlKGNvbnN0IFdURjo6U3RyaW5nJik7
Ci0gICAgc3RhdGljIEhSRVNVTFQgYXBwZW5kUmVzdW1lRGF0YVRvQnVuZGxlKENGRGF0YVJlZiwg
Y29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICBzdGF0aWMgY29uc3QgV1RGOjpTdHJpbmcmIGJ1bmRs
ZUV4dGVuc2lvbigpOwotICAgIHN0YXRpYyBVSW50MzIgYnVuZGxlTWFnaWNOdW1iZXIoKTsKIAog
ICAgIFVMT05HIG1fcmVmQ291bnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dl
YkRvd25sb2FkQ0ZOZXQuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWRDRk5ldC5j
cHAKaW5kZXggYTE5OTMxNS4uNWEzYmU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViRG93bmxvYWRDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWRD
Rk5ldC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0
aW9uQ0YuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0JTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0NyZWRlbnRpYWxTdG9yYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Eb3dubG9hZEJ1bmRsZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTG9hZGVyUnVuTG9vcENGLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgpA
QCAtMTY3LDggKzE2OCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6
OmluaXRUb1Jlc3VtZVdpdGhCdW5kbGUoCiB7CiAgICAgTE9HKERvd25sb2FkLCAiQXR0ZW1wdGlu
ZyByZXN1bWUgb2YgZG93bmxvYWQgYnVuZGxlICVzIiwgU3RyaW5nKGJ1bmRsZVBhdGgsIFN5c1N0
cmluZ0xlbihidW5kbGVQYXRoKSkuYXNjaWkoKS5kYXRhKCkpOwogCi0gICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gcmVzdW1lRGF0YShBZG9wdENGLCBleHRyYWN0UmVzdW1lRGF0YUZyb21CdW5kbGUo
U3RyaW5nKGJ1bmRsZVBhdGgsIFN5c1N0cmluZ0xlbihidW5kbGVQYXRoKSkpKTsKLSAgICAKKyAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiByZXN1bWVEYXRhKEFkb3B0Q0YsIERvd25sb2FkQnVuZGxl
OjpleHRyYWN0UmVzdW1lRGF0YShTdHJpbmcoYnVuZGxlUGF0aCwgU3lzU3RyaW5nTGVuKGJ1bmRs
ZVBhdGgpKSkpOworCiAgICAgaWYgKCFyZXN1bWVEYXRhKQogICAgICAgICByZXR1cm4gRV9GQUlM
OwogCkBAIC0xOTQsOSArMTk1LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEb3du
bG9hZDo6aW5pdFRvUmVzdW1lV2l0aEJ1bmRsZSgKICAgICBtX2J1bmRsZVBhdGggPSBTdHJpbmco
YnVuZGxlUGF0aCwgU3lzU3RyaW5nTGVuKGJ1bmRsZVBhdGgpKTsKICAgICAvLyBBdHRlbXB0IHRv
IHJlbW92ZSB0aGUgIi5kb3dubG9hZCIgZXh0ZW5zaW9uIGZyb20gdGhlIGJ1bmRsZSBmb3IgdGhl
IGZpbmFsIGZpbGUgZGVzdGluYXRpb24KICAgICAvLyBGYWlsaW5nIHRoYXQsIHdlIGNsZWFyIG1f
ZGVzdGluYXRpb24gYW5kIHdpbGwgYXNrIHRoZSBkZWxlZ2F0ZSBsYXRlciBvbmNlIHRoZSBkb3du
bG9hZCBzdGFydHMKLSAgICBpZiAobV9idW5kbGVQYXRoLmVuZHNXaXRoKGJ1bmRsZUV4dGVuc2lv
bigpLCBmYWxzZSkpIHsKKyAgICBpZiAobV9idW5kbGVQYXRoLmVuZHNXaXRoKERvd25sb2FkQnVu
ZGxlOjpmaWxlRXh0ZW5zaW9uKCksIGZhbHNlKSkgewogICAgICAgICBtX2Rlc3RpbmF0aW9uID0g
bV9idW5kbGVQYXRoLnRocmVhZHNhZmVDb3B5KCk7Ci0gICAgICAgIG1fZGVzdGluYXRpb24udHJ1
bmNhdGUobV9kZXN0aW5hdGlvbi5sZW5ndGgoKSAtIGJ1bmRsZUV4dGVuc2lvbigpLmxlbmd0aCgp
KTsKKyAgICAgICAgbV9kZXN0aW5hdGlvbi50cnVuY2F0ZShtX2Rlc3RpbmF0aW9uLmxlbmd0aCgp
IC0gRG93bmxvYWRCdW5kbGU6OmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fZGVzdGluYXRpb24gPSBTdHJpbmcoKTsKICAgICAKQEAgLTI0OSwxNCArMjUw
LDE0IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmNhbmNlbEZvclJl
c3VtZSgpCiAgICAgQ0ZVUkxEb3dubG9hZFNldERlbGV0ZXNVcG9uRmFpbHVyZShtX2Rvd25sb2Fk
LmdldCgpLCBmYWxzZSk7CiAgICAgQ0ZVUkxEb3dubG9hZENhbmNlbChtX2Rvd25sb2FkLmdldCgp
KTsKIAotICAgIHJlc3VtZURhdGEgPSBDRlVSTERvd25sb2FkQ29weVJlc3VtZURhdGEobV9kb3du
bG9hZC5nZXQoKSk7CisgICAgcmVzdW1lRGF0YS5hZG9wdENGKENGVVJMRG93bmxvYWRDb3B5UmVz
dW1lRGF0YShtX2Rvd25sb2FkLmdldCgpKSk7CiAgICAgaWYgKCFyZXN1bWVEYXRhKSB7CiAgICAg
ICAgIExPRyhEb3dubG9hZCwgIldlYkRvd25sb2FkIC0gVW5hYmxlIHRvIGNyZWF0ZSByZXN1bWUg
ZGF0YSBmb3IgZG93bmxvYWQgKCVwKSIsIHRoaXMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAg
fQogCi0gICAgYXBwZW5kUmVzdW1lRGF0YVRvQnVuZGxlKHJlc3VtZURhdGEuZ2V0KCksIG1fYnVu
ZGxlUGF0aCk7Ci0gICAKKyAgICBEb3dubG9hZEJ1bmRsZTo6YXBwZW5kUmVzdW1lRGF0YShyZXN1
bWVEYXRhLmdldCgpLCBtX2J1bmRsZVBhdGgpOworCiBleGl0OgogICAgIG1fZG93bmxvYWQgPSAw
OwogICAgIHJldHVybiBocjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjODM2Y2ZhLi42ZDkwYWQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTEtMDEtMjcgIEpvbiBIb25leWN1dHQgIDxqaG9uZXlj
dXR0QGFwcGxlLmNvbT4KKworICAgICAgICBEb3dubG9hZHMgaW4gV0syIG9uIFdpbmRvd3Mgc2hv
dWxkIHdyaXRlIHJlc3VtZSBkYXRhIHRvIGJ1bmRsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyODIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg3
NTMwNzc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRv
d25sb2FkOjpkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAg
IENhbGwgZGlkRGVjaWRlRGVzdGluYXRpb24oKSwgbm93IHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlz
IGRlY2lkZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oOgor
ICAgICAgICBEZWNsYXJlIGRpZERlY2lkZURlc3RpbmF0aW9uKCkuIEFkZGVkIG1lbWJlciB2YXJp
YWJsZXMgdG8gaG9sZCB0aGUKKyAgICAgICAgZGVzdGluYXRpb24gZmlsZSBwYXRoIGFuZCB0aGUg
ZG93bmxvYWQgYnVuZGxlIHBhdGguCisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkZXN0aW5h
dGlvbik6CisgICAgICAgIFJldHVybiB0aGUgcGF0aCB0byB0aGUgZmluYWwgZGVzdGluYXRpb24g
Zm9yIHRoaXMgZG93bmxvYWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9jZi9E
b3dubG9hZENGTmV0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN0YXJ0KToKKyAg
ICAgICAgUmVtb3ZlIHRoZSBuYW1lIG9mIGFuIHVudXNlZCBwYXJhbS4KKyAgICAgICAgKFdlYktp
dDo6RG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZSk6CisgICAgICAgIERpdHRvLgorICAgICAgICAo
V2ViS2l0OjpEb3dubG9hZDo6Y2FuY2VsKToKKyAgICAgICAgVGVsbCBDRk5ldHdvcmsgbm90IHRv
IGRlbGV0ZSB0aGUgZmlsZSB1cG9uIGZhaWx1cmUsIGFuZCB0ZWxsIGl0IHRvCisgICAgICAgIGNh
bmNlbCB0aGUgZG93bmxvYWQuIENvcHkgdGhlIHJlc3VtZSBkYXRhIGZvciB0aGUgZG93bmxvYWQs
IGFuZCBhcHBlbmQKKyAgICAgICAgaXQgdG8gdGhlIGRvd25sb2FkIGJ1bmRsZS4gQ2FsbCBkaWRD
YW5jZWwoKSB3aXRoIGFuIGVtcHR5CisgICAgICAgIERhdGFSZWZlcmVuY2UsIHNpbmNlIHdlIGhh
dmUgd3JpdHRlbiBvdXIgb3duIHJlc3VtZSBkYXRhLgorICAgICAgICAoV2ViS2l0OjpkZWNpZGVE
ZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRPYmplY3ROYW1lQ2FsbGJhY2spOgorICAgICAgICBSZW1v
dmUgc29tZSB1bnVzZWQgcGFyYW0gbmFtZXMuIFJlbW92ZWQgdGhlIGNhbGwgdG8KKyAgICAgICAg
Q0ZVUkxEb3dubG9hZFNldERlc3RpbmF0aW9uKCkgLSB0aGlzIGlzIG5vdyBoYW5kbGVkIGluCisg
ICAgICAgIERvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlvbigpLgorICAgICAgICAoV2ViS2l0
OjpkaWRDcmVhdGVEZXN0aW5hdGlvbkNhbGxiYWNrKToKKyAgICAgICAgUmVwb3J0IHRoYXQgdGhl
IGZpbmFsIGRlc3RpbmF0aW9uIHdhcyBjcmVhdGVkLCByYXRoZXIgdGhhbiB0aGUgZG93bmxvYWQK
KyAgICAgICAgYnVuZGxlLCBtYXRjaGluZyBvbGQgV2ViS2l0LgorICAgICAgICAoV2ViS2l0OjpE
b3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24pOgorICAgICAgICBTdG9yZSB0aGUgZmluYWwg
ZGVzdGluYXRpb24gYW5kIHRoZSBkb3dubG9hZCBidW5kbGUgcGF0aHMsIGFuZCBjYWxsCisgICAg
ICAgIENGVVJMRG93bmxvYWRTZXREZXN0aW5hdGlvbigpLCBwYXNzaW5nIHRoZSBwYXRoIHRvIHRo
ZSBkb3dubG9hZCBidW5kbGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9jdXJs
L0Rvd25sb2FkQ3VybC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWREZWNpZGVE
ZXN0aW5hdGlvbik6CisgICAgICAgIFN0dWJiZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Rv
d25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW06CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpk
aWREZWNpZGVEZXN0aW5hdGlvbik6CisgICAgICAgIFN0dWJiZWQgLSB1bm5lZWRlZCBvbiB0aGUg
TWFjLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Eb3dubG9hZHMvcXQvRG93bmxvYWRRdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlvbik6CisgICAg
ICAgIFN0dWJiZWQuCisKIDIwMTEtMDEtMTcgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCmluZGV4
IDNjYjU1ODguLjlhOGViNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5jcHAKQEAgLTk0LDYgKzk0LDggQEAgU3RyaW5nIERvd25sb2FkOjpk
ZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLAogICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pCiAgICAgICAgIG1fc2FuZGJveEV4dGVu
c2lvbi0+Y29uc3VtZSgpOwogCisgICAgZGlkRGVjaWRlRGVzdGluYXRpb24oZGVzdGluYXRpb24s
IGFsbG93T3ZlcndyaXRlKTsKKwogICAgIHJldHVybiBkZXN0aW5hdGlvbjsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKaW5kZXggMjMxOWVj
Ny4uYzAxOGZkYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWQuaApAQCAtODcsNiArODcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmluaXNo
KCk7CiAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImLCBjb25z
dCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKICAgICB2b2lkIGRpZENhbmNl
bChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJiByZXN1bWVEYXRhKTsKKyAgICB2b2lkIGRp
ZERlY2lkZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOwor
CisjaWYgVVNFKENGTkVUV09SSykKKyAgICBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgRG93
bmxvYWQodWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik7CkBAIC0xMDMsNiArMTA4LDggQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8V0tEb3dubG9h
ZEFzRGVsZWdhdGU+IG1fZGVsZWdhdGU7CiAjZW5kaWYKICNpZiBVU0UoQ0ZORVRXT1JLKQorICAg
IFN0cmluZyBtX2Rlc3RpbmF0aW9uOworICAgIFN0cmluZyBtX2J1bmRsZVBhdGg7CiAgICAgUmV0
YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7CiAjZW5kaWYKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9jZi9Eb3dubG9hZENGTmV0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL2NmL0Rvd25sb2FkQ0ZO
ZXQuY3BwCmluZGV4IDA4YzM4MWYuLjYwYTVhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRG93bmxvYWRzL2NmL0Rvd25sb2FkQ0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL2NmL0Rvd25sb2FkQ0ZOZXQuY3BwCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogI3ByYWdtYSB3YXJuaW5n
KHB1c2gsIDApCisjaW5jbHVkZSA8V2ViQ29yZS9Eb3dubG9hZEJ1bmRsZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTG9hZGVyUnVuTG9vcENGLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVy
cm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgpAQCAtNTIsNyArNTMs
NyBAQCBzdGF0aWMgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbkNhbGxiYWNrKENGVVJMRG93bmxv
YWRSZWYgZG93bmxvYWQsIENGVVJMUmVmIHBhdAogc3RhdGljIHZvaWQgZGlkRmluaXNoQ2FsbGJh
Y2soQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiBz
dGF0aWMgdm9pZCBkaWRGYWlsQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZCwgQ0ZF
cnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAKLXZvaWQgRG93bmxvYWQ6
OnN0YXJ0KFdlYlBhZ2UqIGluaXRpYXRpbmdXZWJQYWdlKQordm9pZCBEb3dubG9hZDo6c3RhcnQo
V2ViUGFnZSopCiB7CiAgICAgQVNTRVJUKCFtX2Rvd25sb2FkKTsKIApAQCAtNzAsNyArNzEsNyBA
QCB2b2lkIERvd25sb2FkOjpzdGFydChXZWJQYWdlKiBpbml0aWF0aW5nV2ViUGFnZSkKICAgICBD
RlVSTERvd25sb2FkU2NoZWR1bGVEb3dubG9hZFdpdGhSdW5Mb29wKG1fZG93bmxvYWQuZ2V0KCks
IGxvYWRlclJ1bkxvb3AoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKIH0KIAotdm9pZCBEb3du
bG9hZDo6c3RhcnRXaXRoSGFuZGxlKFdlYlBhZ2UqIGluaXRpYXRpbmdQYWdlLCBSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGluaXRpYWxSZXF1ZXN0LCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhh
bmRsZShXZWJQYWdlKiwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBpbml0aWFsUmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7
CiAgICAgQVNTRVJUKCFtX2Rvd25sb2FkKTsKIApAQCAtOTgsNyArOTksMTggQEAgdm9pZCBEb3du
bG9hZDo6c3RhcnRXaXRoSGFuZGxlKFdlYlBhZ2UqIGluaXRpYXRpbmdQYWdlLCBSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLAogCiB2b2lkIERvd25sb2FkOjpjYW5jZWwoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgQVNTRVJUKG1fZG93bmxvYWQpOworICAgIGlmICghbV9kb3dubG9hZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ0ZVUkxEb3dubG9hZFNldERlbGV0ZXNVcG9uRmFpbHVy
ZShtX2Rvd25sb2FkLmdldCgpLCBmYWxzZSk7CisgICAgQ0ZVUkxEb3dubG9hZENhbmNlbChtX2Rv
d25sb2FkLmdldCgpKTsKKworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHJlc3VtZURhdGEoQWRv
cHRDRiwgQ0ZVUkxEb3dubG9hZENvcHlSZXN1bWVEYXRhKG1fZG93bmxvYWQuZ2V0KCkpKTsKKyAg
ICBpZiAocmVzdW1lRGF0YSkKKyAgICAgICAgRG93bmxvYWRCdW5kbGU6OmFwcGVuZFJlc3VtZURh
dGEocmVzdW1lRGF0YS5nZXQoKSwgbV9idW5kbGVQYXRoKTsKKworICAgIGRpZENhbmNlbChDb3Jl
SVBDOjpEYXRhUmVmZXJlbmNlKCkpOwogfQogCiB2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFs
aWRhdGUoKQpAQCAtMTUxLDI0ICsxNjMsMzQgQEAgQm9vbGVhbiBzaG91bGREZWNvZGVEYXRhT2ZN
SU1FVHlwZUNhbGxiYWNrKENGVVJMRG93bmxvYWRSZWYsIENGU3RyaW5nUmVmIGVuY29kaW4KICAg
ICByZXR1cm4gZG93bmxvYWRGcm9tQ2xpZW50SW5mbyhjbGllbnRJbmZvKS0+c2hvdWxkRGVjb2Rl
U291cmNlRGF0YU9mTUlNRVR5cGUoZW5jb2RpbmdUeXBlKTsKIH0KIAotdm9pZCBkZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRPYmplY3ROYW1lQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiBj
ZlVSTERvd25sb2FkUmVmLCBDRlN0cmluZ1JlZiBvYmplY3ROYW1lLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQordm9pZCBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRPYmplY3ROYW1lQ2Fs
bGJhY2soQ0ZVUkxEb3dubG9hZFJlZiwgQ0ZTdHJpbmdSZWYgb2JqZWN0TmFtZSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKIHsgCiAgICAgRG93bmxvYWQqIGRvd25sb2FkID0gZG93bmxvYWRGcm9t
Q2xpZW50SW5mbyhjbGllbnRJbmZvKTsKICAgICBib29sIGFsbG93T3ZlcndyaXRlOwotICAgIFN0
cmluZyBkZXN0aW5hdGlvbiA9IGRvd25sb2FkLT5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZShvYmplY3ROYW1lLCBhbGxvd092ZXJ3cml0ZSk7Ci0gICAgaWYgKGRlc3RpbmF0
aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47CisgICAgZG93bmxvYWQtPmRlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKG9iamVjdE5hbWUsIGFsbG93T3ZlcndyaXRlKTsK
K30KIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZQYXRoKEFkb3B0Q0YsIENGU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlD
aGFyKj4oZGVzdGluYXRpb24uY2hhcmFjdGVycygpKSwgZGVzdGluYXRpb24ubGVuZ3RoKCksIGtD
RkFsbG9jYXRvck51bGwpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHBhdGhVUkwoQWRvcHRD
RiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgY2ZQYXRoLmdldCgpLCBrQ0ZVUkxX
aW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOwotICAgIENGVVJMRG93bmxvYWRTZXREZXN0aW5hdGlv
bihjZlVSTERvd25sb2FkUmVmLCBwYXRoVVJMLmdldCgpLCBhbGxvd092ZXJ3cml0ZSk7Cit2b2lk
IGRpZENyZWF0ZURlc3RpbmF0aW9uQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiwgQ0ZVUkxSZWYs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgLy8gVGhlIGNvbmNlcHQgb2YgdGhlICIu
ZG93bmxvYWQgYnVuZGxlIiBpcyBpbnRlcm5hbCB0byB0aGUgRG93bmxvYWQsIHNvIHdlIHRyeSB0
byBoaWRlIGl0cworICAgIC8vIGV4aXN0ZW5jZSBieSByZXBvcnRpbmcgdGhlIGZpbmFsIGRlc3Rp
bmF0aW9uIHdhcyBjcmVhdGVkLCB3aGVuIGluIHJlYWxpdHkgdGhlIGJ1bmRsZSB3YXMgY3JlYXRl
ZC4KKworICAgIERvd25sb2FkKiBkb3dubG9hZCA9IGRvd25sb2FkRnJvbUNsaWVudEluZm8oY2xp
ZW50SW5mbyk7CisgICAgZG93bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0aW9uKGRvd25sb2FkLT5k
ZXN0aW5hdGlvbigpKTsKIH0KIAotdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbkNhbGxiYWNrKENG
VVJMRG93bmxvYWRSZWYsIENGVVJMUmVmIHVybCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsg
Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoKEFkb3B0Q0YsIENGVVJMQ29weUZpbGVT
eXN0ZW1QYXRoKHVybCwga0NGVVJMV2luZG93c1BhdGhTdHlsZSkpOwotICAgIFN0cmluZyByZXN1
bHQocGF0aC5nZXQoKSk7Ci0gICAgZG93bmxvYWRGcm9tQ2xpZW50SW5mbyhjbGllbnRJbmZvKS0+
ZGlkQ3JlYXRlRGVzdGluYXRpb24ocmVzdWx0KTsKK3ZvaWQgRG93bmxvYWQ6OmRpZERlY2lkZURl
c3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24sIGJvb2wgYWxsb3dPdmVyd3JpdGUp
Cit7CisgICAgQVNTRVJUKCFkZXN0aW5hdGlvbi5pc0VtcHR5KCkpOworICAgIGlmIChkZXN0aW5h
dGlvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVzdGluYXRpb24gPSBk
ZXN0aW5hdGlvbjsKKyAgICBtX2J1bmRsZVBhdGggPSBkZXN0aW5hdGlvbiArIERvd25sb2FkQnVu
ZGxlOjpmaWxlRXh0ZW5zaW9uKCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGJ1bmRs
ZVBhdGgoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weSgwLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihtX2J1bmRsZVBhdGguY2hhcmFjdGVycygpKSwg
bV9idW5kbGVQYXRoLmxlbmd0aCgpLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CisgICAgUmV0YWluUHRy
PENGVVJMUmVmPiBidW5kbGVQYXRoVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0
ZW1QYXRoKDAsIGJ1bmRsZVBhdGguZ2V0KCksIGtDRlVSTFdpbmRvd3NQYXRoU3R5bGUsIGZhbHNl
KSk7CisgICAgQ0ZVUkxEb3dubG9hZFNldERlc3RpbmF0aW9uKG1fZG93bmxvYWQuZ2V0KCksIGJ1
bmRsZVBhdGhVUkwuZ2V0KCksIGFsbG93T3ZlcndyaXRlKTsKIH0KIAogdm9pZCBkaWRGaW5pc2hD
YWxsYmFjayhDRlVSTERvd25sb2FkUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvY3VybC9Eb3dubG9hZEN1
cmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvY3VybC9Eb3dubG9h
ZEN1cmwuY3BwCmluZGV4IDI1ZWQzNTEuLmRiNzViMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL2N1cmwvRG93bmxvYWRDdXJsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9jdXJsL0Rvd25sb2FkQ3VybC5jcHAKQEAg
LTUyLDQgKzUyLDkgQEAgdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIERvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlv
bihjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uLCBib29sIGFsbG93T3ZlcndyaXRlKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1t
CmluZGV4IDY4MzkwMjAuLmVhNjBjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRG93bmxvYWRzL21hYy9Eb3dubG9hZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0KQEAgLTE2OCw2ICsxNjgsMTAg
QEAgdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKICAgICBtX25zVVJMRG93bmxv
YWQgPSBudWxscHRyOwogfQogCit2b2lkIERvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlvbihj
b25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uLCBib29sIGFsbG93T3ZlcndyaXRlKQoreworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogQGltcGxlbWVudGF0aW9uIFdLRG93bmxvYWRBc0RlbGVn
YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9E
b3dubG9hZFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL3F0L0Rv
d25sb2FkUXQuY3BwCmluZGV4IDM0ZmQ2MGUuLmM5MDYxNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL3F0L0Rvd25sb2FkUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxvYWRzL3F0L0Rvd25sb2FkUXQuY3BwCkBAIC01MSw0
ICs1MSw5IEBAIHZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAordm9pZCBEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24oY29u
c3QgU3RyaW5nJiBkZXN0aW5hdGlvbiwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLS0gCjEuNy4zLjIuMTY0
Lmc2ZjEwYy5kaXJ0eQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80477</attachid>
            <date>2011-01-28 12:09:17 -0800</date>
            <delta_ts>2011-01-28 12:46:55 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>0001-downloads-in-wk2-on-windows-should-write-resume-data.patch</filename>
            <type>text/plain</type>
            <size>37372</size>
            <attacher name="Jon Honeycutt">jhoneycutt</attacher>
            
              <data encoding="base64">RnJvbSBlNGIzZTUwNDQ3YzQ2ODQ0NGQwMGNjNzA1Mjg4N2QxY2UzMzg1Y2IxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb24gSG9uZXljdXR0IDxqaG9uZXljdXR0QGFwcGxlLmNvbT4K
RGF0ZTogVGh1LCAyNyBKYW4gMjAxMSAyMDoxMToxMiAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIERv
d25sb2FkcyBpbiBXSzIgb24gV2luZG93cyBzaG91bGQgd3JpdGUgcmVzdW1lIGRhdGEgdG8gYnVu
ZGxlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyODIKIDxyZGFy
Oi8vcHJvYmxlbS84NzUzMDc3PgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2Uv
V2ViQ29yZToKCiogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CkFkZGVkIG5ldyBmaWxl
cyB0byBwcm9qZWN0LgoKKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0Rvd25sb2FkQnVuZGxlLmg6IEFk
ZGVkLgoqIHBsYXRmb3JtL25ldHdvcmsvd2luL0Rvd25sb2FkQnVuZGxlV2luLmNwcDogQWRkZWQu
CihXZWJDb3JlOjpEb3dubG9hZEJ1bmRsZTo6bWFnaWNOdW1iZXIpOgpNb3ZlZCBmcm9tIFdlYktp
dCdzIFdlYkRvd25sb2FkIHNvIHRoYXQgV2ViS2l0IGFuZCBXZWJLaXQyIGNhbiBzaGFyZQppdC4K
KFdlYkNvcmU6OkRvd25sb2FkQnVuZGxlOjpmaWxlRXh0ZW5zaW9uKToKRGl0dG8uCihXZWJDb3Jl
OjpEb3dubG9hZEJ1bmRsZTo6YXBwZW5kUmVzdW1lRGF0YSk6CkRpdHRvIC0gYnV0IG1vZGlmaWVk
IHRvIHJldHVybiBib29sIHJhdGhlciB0aGFuIEhSRVNVTFQgYW5kIHRvIGNsZWFuIHVwCndoaXRl
c3BhY2UuCihXZWJDb3JlOjpEb3dubG9hZEJ1bmRsZTo6ZXh0cmFjdFJlc3VtZURhdGEpOgpEaXR0
byAtIG1vZGlmaWVkIHRvIGNsZWFuIHVwIHdoaXRlc3BhY2UuCgpTb3VyY2UvV2ViS2l0L3dpbjoK
CiogV2ViRG93bmxvYWQuY3BwOgooV2ViRG93bmxvYWQ6OmJ1bmRsZVBhdGhGb3JUYXJnZXRQYXRo
KToKVXNlIHRoZSBuZXcgV2ViQ29yZTo6RG93bmxvYWRCdW5kbGUgZnVuY3Rpb24uCihXZWJEb3du
bG9hZDo6cmVxdWVzdCk6CgoqIFdlYkRvd25sb2FkLmg6ClJlbW92ZWQgZGVjbGFyYXRpb25zIGZv
ciBmdW5jdGlvbnMgdGhhdCB3ZXJlIG1vdmVkIHRvIGEgbmV3IGxvY2F0aW9uLgoKKiBXZWJEb3du
bG9hZENGTmV0LmNwcDoKKFdlYkRvd25sb2FkOjppbml0VG9SZXN1bWVXaXRoQnVuZGxlKToKVXNl
IHRoZSBuZXcgV2ViQ29yZTo6RG93bmxvYWRCdW5kbGUgZnVuY3Rpb24uCihXZWJEb3dubG9hZDo6
Y2FuY2VsRm9yUmVzdW1lKToKRml4IGEgbGVhayBvZiB0aGUgcmVzdW1lIGRhdGEgQ0ZEYXRhUmVm
IGJ5IHVzaW5nIGFkb3B0Q0YoKS4gVXNlIHRoZSBuZXcKV2ViQ29yZTo6RG93bmxvYWRCdW5kbGUg
ZnVuY3Rpb24uCgpTb3VyY2UvV2ViS2l0MjoKCiogV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwOgooV2ViS2l0OjpEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVk
RmlsZW5hbWUpOgpDYWxsIGRpZERlY2lkZURlc3RpbmF0aW9uKCksIG5vdyB0aGF0IHRoZSBkZXN0
aW5hdGlvbiBpcyBkZWNpZGVkLgoKKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oOgpE
ZWNsYXJlIGRpZERlY2lkZURlc3RpbmF0aW9uKCkuIEFkZGVkIG1lbWJlciB2YXJpYWJsZXMgdG8g
aG9sZCB0aGUKZGVzdGluYXRpb24gZmlsZSBwYXRoIGFuZCB0aGUgZG93bmxvYWQgYnVuZGxlIHBh
dGguCihXZWJLaXQ6OkRvd25sb2FkOjpkZXN0aW5hdGlvbik6ClJldHVybiB0aGUgcGF0aCB0byB0
aGUgZmluYWwgZGVzdGluYXRpb24gZm9yIHRoaXMgZG93bmxvYWQuCgoqIFdlYlByb2Nlc3MvRG93
bmxvYWRzL2NmL0Rvd25sb2FkQ0ZOZXQuY3BwOgooV2ViS2l0OjpEb3dubG9hZDo6c3RhcnQpOgpS
ZW1vdmUgdGhlIG5hbWUgb2YgYW4gdW51c2VkIHBhcmFtLgooV2ViS2l0OjpEb3dubG9hZDo6c3Rh
cnRXaXRoSGFuZGxlKToKRGl0dG8uCihXZWJLaXQ6OkRvd25sb2FkOjpjYW5jZWwpOgpUZWxsIENG
TmV0d29yayBub3QgdG8gZGVsZXRlIHRoZSBmaWxlIHVwb24gZmFpbHVyZSwgYW5kIHRlbGwgaXQg
dG8KY2FuY2VsIHRoZSBkb3dubG9hZC4gQ29weSB0aGUgcmVzdW1lIGRhdGEgZm9yIHRoZSBkb3du
bG9hZCwgYW5kIGFwcGVuZAppdCB0byB0aGUgZG93bmxvYWQgYnVuZGxlLiBDYWxsIGRpZENhbmNl
bCgpIHdpdGggYW4gZW1wdHkKRGF0YVJlZmVyZW5jZSwgc2luY2Ugd2UgaGF2ZSB3cml0dGVuIG91
ciBvd24gcmVzdW1lIGRhdGEuCihXZWJLaXQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZE9iamVjdE5hbWVDYWxsYmFjayk6ClJlbW92ZSBzb21lIHVudXNlZCBwYXJhbSBuYW1lcy4gUmVt
b3ZlZCB0aGUgY2FsbCB0bwpDRlVSTERvd25sb2FkU2V0RGVzdGluYXRpb24oKSAtIHRoaXMgaXMg
bm93IGhhbmRsZWQgaW4KRG93bmxvYWQ6OmRpZERlY2lkZURlc3RpbmF0aW9uKCkuCihXZWJLaXQ6
OmRpZENyZWF0ZURlc3RpbmF0aW9uQ2FsbGJhY2spOgpSZXBvcnQgdGhhdCB0aGUgZmluYWwgZGVz
dGluYXRpb24gd2FzIGNyZWF0ZWQsIHJhdGhlciB0aGFuIHRoZSBkb3dubG9hZApidW5kbGUsIG1h
dGNoaW5nIG9sZCBXZWJLaXQuCihXZWJLaXQ6OkRvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlv
bik6ClN0b3JlIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiBhbmQgdGhlIGRvd25sb2FkIGJ1bmRsZSBw
YXRocywgYW5kIGNhbGwKQ0ZVUkxEb3dubG9hZFNldERlc3RpbmF0aW9uKCksIHBhc3NpbmcgdGhl
IHBhdGggdG8gdGhlIGRvd25sb2FkIGJ1bmRsZS4KCiogV2ViUHJvY2Vzcy9Eb3dubG9hZHMvY3Vy
bC9Eb3dubG9hZEN1cmwuY3BwOgooV2ViS2l0OjpEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRp
b24pOgpTdHViYmVkLgoKKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW06
CihXZWJLaXQ6OkRvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlvbik6ClN0dWJiZWQgLSB1bm5l
ZWRlZCBvbiB0aGUgTWFjLgoKKiBXZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9Eb3dubG9hZFF0LmNw
cDoKKFdlYktpdDo6RG93bmxvYWQ6OmRpZERlY2lkZURlc3RpbmF0aW9uKToKU3R1YmJlZC4KLS0t
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MjQgKysrCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiAgICAg
ICB8ICAgIDggKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Eb3dubG9hZEJ1bmRs
ZS5oICAgfCAgIDQ1ICsrKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRCdW5k
bGVXaW4uY3BwICAgICB8ICAxOTYgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyArKysKIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkRvd25sb2FkLmNwcCAgICAgICAgICAgICAgICAgIHwgIDE2NCArLS0tLS0t
LS0tLS0tLS0tLQogU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQuaCAgICAgICAgICAgICAg
ICAgICAgfCAgICA1IC0KIFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkQ0ZOZXQuY3BwICAg
ICAgICAgICAgIHwgICAxNyArLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDUxICsrKysrCiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZC5jcHAgICB8ICAgIDIgKwogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuaCAgICAgfCAgICA3ICsKIC4uLi9XZWJQcm9jZXNzL0Rvd25s
b2Fkcy9jZi9Eb3dubG9hZENGTmV0LmNwcCAgICAgIHwgICA1MiArKysrLS0KIC4uLi9XZWJQcm9j
ZXNzL0Rvd25sb2Fkcy9jdXJsL0Rvd25sb2FkQ3VybC5jcHAgICAgIHwgICAgNSArCiAuLi4vV2Vi
UHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tICAgICAgICB8ICAgIDQgKwogLi4u
L1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvcXQvRG93bmxvYWRRdC5jcHAgfCAgICA1ICsK
IDE1IGZpbGVzIGNoYW5nZWQsIDQxOCBpbnNlcnRpb25zKCspLCAxOTAgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Eb3du
bG9hZEJ1bmRsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQyZTU3N2Eu
LmNmZDg3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMS0wMS0yNyAgSm9uIEhv
bmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgorCisgICAgICAgIERvd25sb2FkcyBpbiBX
SzIgb24gV2luZG93cyBzaG91bGQgd3JpdGUgcmVzdW1lIGRhdGEgdG8gYnVuZGxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzI4MgorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vODc1MzA3Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICBBZGRlZCBuZXcgZmlsZXMgdG8gcHJvamVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY2YvRG93bmxvYWRCdW5kbGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRv
d25sb2FkQnVuZGxlOjptYWdpY051bWJlcik6CisgICAgICAgIE1vdmVkIGZyb20gV2ViS2l0J3Mg
V2ViRG93bmxvYWQgc28gdGhhdCBXZWJLaXQgYW5kIFdlYktpdDIgY2FuIHNoYXJlCisgICAgICAg
IGl0LgorICAgICAgICAoV2ViQ29yZTo6RG93bmxvYWRCdW5kbGU6OmZpbGVFeHRlbnNpb24pOgor
ICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvd25sb2FkQnVuZGxlOjphcHBlbmRS
ZXN1bWVEYXRhKToKKyAgICAgICAgRGl0dG8gLSBidXQgbW9kaWZpZWQgdG8gcmV0dXJuIGJvb2wg
cmF0aGVyIHRoYW4gSFJFU1VMVCBhbmQgdG8gY2xlYW4gdXAKKyAgICAgICAgd2hpdGVzcGFjZS4K
KyAgICAgICAgKFdlYkNvcmU6OkRvd25sb2FkQnVuZGxlOjpleHRyYWN0UmVzdW1lRGF0YSk6Cisg
ICAgICAgIERpdHRvIC0gbW9kaWZpZWQgdG8gY2xlYW4gdXAgd2hpdGVzcGFjZS4KKwogMjAxMS0w
MS0xNyAgSGVsZGVyIENvcnJlaWEgIDxoZWxkZXJAc2VuY2hhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagppbmRleCAzOTY3MWEwLi5lOGQ2Y2QxIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjkyNDgsNiArMjkyNDgsMTAgQEAK
IAkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxEb3dubG9hZEJ1bmRsZS5o
IgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY2ZcRm9ybURhdGFTdHJlYW1DRk5ldC5jcHAiCiAJCQkJCQk+
CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTI5NTQwLDYgKzI5NTQ0LDEwIEBACiAJCQkJ
CU5hbWU9IndpbiIKIAkJCQkJPgogCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXHdpblxEb3dubG9hZEJ1bmRsZVdpbi5jcHAiCisJCQkJCQk+CisJCQkJ
CTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0
d29ya1x3aW5cTmV0d29ya1N0YXRlTm90aWZpZXJXaW4uY3BwIgogCQkJCQkJPgogCQkJCQk8L0Zp
bGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Rvd25s
b2FkQnVuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Rvd25sb2Fk
QnVuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1OTI3NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRG93bmxv
YWRCdW5kbGUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRG93bmxvYWRC
dW5kbGVfaAorI2RlZmluZSBEb3dubG9hZEJ1bmRsZV9oCisKK25hbWVzcGFjZSBXVEYgeworICAg
IGNsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgRG93
bmxvYWRCdW5kbGUgeworCitib29sIGFwcGVuZFJlc3VtZURhdGEoQ0ZEYXRhUmVmIHJlc3VtZURh
dGEsIGNvbnN0IFdURjo6U3RyaW5nJiBidW5kbGVQYXRoKTsKK0NGRGF0YVJlZiBleHRyYWN0UmVz
dW1lRGF0YShjb25zdCBXVEY6OlN0cmluZyYgYnVuZGxlUGF0aCk7Citjb25zdCBXVEY6OlN0cmlu
ZyYgZmlsZUV4dGVuc2lvbigpOworCit9CisKK30KKworI2VuZGlmIC8vIERvd25sb2FkQnVuZGxl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Rvd25s
b2FkQnVuZGxlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Rv
d25sb2FkQnVuZGxlV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
YTA5MWRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vRG93bmxvYWRCdW5kbGVXaW4uY3BwCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkQnVuZGxlLmgiCisKKyNp
bmNsdWRlIDxpby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgV1RGOjpTdHJpbmc7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIERvd25sb2FkQnVuZGxlIHsKKworc3RhdGljIFVJbnQzMiBt
YWdpY051bWJlcigpCit7CisgICAgcmV0dXJuIDB4REVDQUY0RUE7Cit9CisKK2NvbnN0IFN0cmlu
ZyYgZmlsZUV4dGVuc2lvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIGV4dGVuc2lvbiwgKCIuZG93bmxvYWQiKSk7CisgICAgcmV0dXJuIGV4dGVuc2lvbjsKK30K
KworYm9vbCBhcHBlbmRSZXN1bWVEYXRhKENGRGF0YVJlZiByZXN1bWVEYXRhLCBjb25zdCBTdHJp
bmcmIGJ1bmRsZVBhdGgpCit7CisgICAgaWYgKCFyZXN1bWVEYXRhKSB7CisgICAgICAgIExPR19F
UlJPUigiSW52YWxpZCByZXN1bWUgZGF0YSB0byB3cml0ZSB0byBidW5kbGUgcGF0aCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChidW5kbGVQYXRoLmlzRW1wdHkoKSkg
eworICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCB3cml0ZSByZXN1bWUgZGF0YSB0byBlbXB0eSBk
b3dubG9hZCBidW5kbGUgcGF0aCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgU3RyaW5nIG51bGxpZmllZFBhdGggPSBidW5kbGVQYXRoOworICAgIEZJTEUqIGJ1bmRsZSA9
IDA7CisgICAgaWYgKF93Zm9wZW5fcygmYnVuZGxlLCBudWxsaWZpZWRQYXRoLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksIFRFWFQoImFiIikpIHx8ICFidW5kbGUpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBmaWxlICVzIHRvIGFwcGVuZCByZXN1bWUgZGF0YSIs
IGJ1bmRsZVBhdGguYXNjaWkoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKworICAgIGNvbnN0IFVJbnQ4KiByZXN1bWVC
eXRlcyA9IENGRGF0YUdldEJ5dGVQdHIocmVzdW1lRGF0YSk7CisgICAgQVNTRVJUKHJlc3VtZUJ5
dGVzKTsKKyAgICBpZiAoIXJlc3VtZUJ5dGVzKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBV
SW50MzIgcmVzdW1lTGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKHJlc3VtZURhdGEpOworICAgIEFT
U0VSVChyZXN1bWVMZW5ndGggPiAwKTsKKyAgICBpZiAocmVzdW1lTGVuZ3RoIDwgMSkKKyAgICAg
ICAgZ290byBleGl0OworCisgICAgaWYgKGZ3cml0ZShyZXN1bWVCeXRlcywgMSwgcmVzdW1lTGVu
Z3RoLCBidW5kbGUpICE9IHJlc3VtZUxlbmd0aCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byB3cml0ZSByZXN1bWUgZGF0YSB0byB0aGUgYnVuZGxlIC0gZXJybm8oJWkpIiwgZXJybm8p
OworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgaWYgKGZ3cml0ZSgmcmVzdW1lTGVu
Z3RoLCA0LCAxLCBidW5kbGUpICE9IDEpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
d3JpdGUgZm9vdGVyIGxlbmd0aCB0byB0aGUgYnVuZGxlIC0gZXJybm8oJWkpIiwgZXJybm8pOwor
ICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgY29uc3QgVUludDMyJiBtYWdpYyA9IG1h
Z2ljTnVtYmVyKCk7CisgICAgaWYgKGZ3cml0ZSgmbWFnaWMsIDQsIDEsIGJ1bmRsZSkgIT0gMSkg
eworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3cml0ZSBmb290ZXIgbWFnaWMgbnVtYmVy
IHRvIHRoZSBidW5kbGUgLSBlcnJubyglaSkiLCBlcnJubyk7CisgICAgICAgIGdvdG8gZXhpdDsK
KyAgICB9CisKKyAgICByZXN1bHQgPSB0cnVlOworZXhpdDoKKyAgICBmY2xvc2UoYnVuZGxlKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitDRkRhdGFSZWYgZXh0cmFjdFJlc3VtZURhdGEoY29u
c3QgU3RyaW5nJiBidW5kbGVQYXRoKQoreworICAgIGlmIChidW5kbGVQYXRoLmlzRW1wdHkoKSkg
eworICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCBjcmVhdGUgcmVzdW1lIGRhdGEgZnJvbSBlbXB0
eSBkb3dubG9hZCBidW5kbGUgcGF0aCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICAvLyBPcGVuIGEgaGFuZGxlIHRvIHRoZSBidW5kbGUgZmlsZQorICAgIFN0cmluZyBudWxsaWZp
ZWRQYXRoID0gYnVuZGxlUGF0aDsKKyAgICBGSUxFKiBidW5kbGUgPSAwOworICAgIGlmIChfd2Zv
cGVuX3MoJmJ1bmRsZSwgbnVsbGlmaWVkUGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLCBURVhUKCJyK2IiKSkgfHwgIWJ1bmRsZSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBvcGVuIGZpbGUgJXMgdG8gZ2V0IHJlc3VtZSBkYXRhIiwgYnVuZGxlUGF0aC5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIENGRGF0YVJlZiByZXN1
bHQgPSAwOworICAgIFZlY3RvcjxVSW50OD4gZm9vdGVyQnVmZmVyOworCisgICAgLy8gU3RhdCB0
aGUgZmlsZSB0byBnZXQgaXRzIHNpemUKKyAgICBzdHJ1Y3QgX3N0YXQ2NCBmaWxlU3RhdDsKKyAg
ICBpZiAoX2ZzdGF0NjQoX2ZpbGVubyhidW5kbGUpLCAmZmlsZVN0YXQpKQorICAgICAgICBnb3Rv
IGV4aXQ7CisKKyAgICAvLyBDaGVjayBmb3IgdGhlIGJ1bmRsZSBtYWdpYyBudW1iZXIgYXQgdGhl
IGVuZCBvZiB0aGUgZmlsZQorICAgIGZwb3NfdCBmb290ZXJNYWdpY051bWJlclBvc2l0aW9uID0g
ZmlsZVN0YXQuc3Rfc2l6ZSAtIDQ7CisgICAgQVNTRVJUKGZvb3Rlck1hZ2ljTnVtYmVyUG9zaXRp
b24gPj0gMCk7CisgICAgaWYgKGZvb3Rlck1hZ2ljTnVtYmVyUG9zaXRpb24gPCAwKQorICAgICAg
ICBnb3RvIGV4aXQ7CisgICAgaWYgKGZzZXRwb3MoYnVuZGxlLCAmZm9vdGVyTWFnaWNOdW1iZXJQ
b3NpdGlvbikpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIFVJbnQzMiBmb290ZXJNYWdpY051
bWJlciA9IDA7CisgICAgaWYgKGZyZWFkKCZmb290ZXJNYWdpY051bWJlciwgNCwgMSwgYnVuZGxl
KSAhPSAxKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgZm9vdGVyIG1hZ2lj
IG51bWJlciBmcm9tIHRoZSBidW5kbGUgLSBlcnJubyglaSkiLCBlcnJubyk7CisgICAgICAgIGdv
dG8gZXhpdDsKKyAgICB9CisKKyAgICBpZiAoZm9vdGVyTWFnaWNOdW1iZXIgIT0gbWFnaWNOdW1i
ZXIoKSkgeworICAgICAgICBMT0dfRVJST1IoIkZvb3RlcidzIG1hZ2ljIG51bWJlciBkb2VzIG5v
dCBtYXRjaCAweCVYIC0gZXJybm8oJWkpIiwgbWFnaWNOdW1iZXIoKSwgZXJybm8pOworICAgICAg
ICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLy8gTm93IHdlJ3JlICpyZWFzb25hYmx5KiBzdXJl
IHRoaXMgaXMgYSAuZG93bmxvYWQgYnVuZGxlIHdlIGFjdHVhbGx5IHdyb3RlLgorICAgIC8vIEdl
dCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bWUgZGF0YQorICAgIGZwb3NfdCBmb290ZXJMZW5ndGhQ
b3NpdGlvbiA9IGZpbGVTdGF0LnN0X3NpemUgLSA4OworICAgIEFTU0VSVChmb290ZXJMZW5ndGhQ
b3NpdGlvbiA+PSAwKTsKKyAgICBpZiAoZm9vdGVyTGVuZ3RoUG9zaXRpb24gPCAwKQorICAgICAg
ICBnb3RvIGV4aXQ7CisKKyAgICBpZiAoZnNldHBvcyhidW5kbGUsICZmb290ZXJMZW5ndGhQb3Np
dGlvbikpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIFVJbnQzMiBmb290ZXJMZW5ndGggPSAw
OworICAgIGlmIChmcmVhZCgmZm9vdGVyTGVuZ3RoLCA0LCAxLCBidW5kbGUpICE9IDEpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBSZXN1bWVEYXRhIGxlbmd0aCBmcm9tIHRo
ZSBidW5kbGUgLSBlcnJubyglaSkiLCBlcnJubyk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmVzIGVub3VnaCBieXRlcyB0byByZWFkIGluIGZvciB0
aGUgcmVzdW1lIGRhdGEsIGFuZCBwZXJmb3JtIHRoZSByZWFkCisgICAgZnBvc190IGZvb3RlclN0
YXJ0UG9zaXRpb24gPSBmaWxlU3RhdC5zdF9zaXplIC0gOCAtIGZvb3Rlckxlbmd0aDsKKyAgICBB
U1NFUlQoZm9vdGVyU3RhcnRQb3NpdGlvbiA+PSAwKTsKKyAgICBpZiAoZm9vdGVyU3RhcnRQb3Np
dGlvbiA8IDApCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoZnNldHBvcyhidW5kbGUsICZm
b290ZXJTdGFydFBvc2l0aW9uKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgZm9vdGVyQnVm
ZmVyLnJlc2l6ZShmb290ZXJMZW5ndGgpOworICAgIGlmIChmcmVhZChmb290ZXJCdWZmZXIuZGF0
YSgpLCAxLCBmb290ZXJMZW5ndGgsIGJ1bmRsZSkgIT0gZm9vdGVyTGVuZ3RoKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgUmVzdW1lRGF0YSBmcm9tIHRoZSBidW5kbGUgLSBl
cnJubyglaSkiLCBlcnJubyk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBD
RlVSTERvd25sb2FkIHdpbGwgc2VlayB0byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGZp
bGUgKGJlZm9yZSBvdXIgZm9vdGVyKSBhbmQgc3RhcnQgb3ZlcndyaXRpbmcgZnJvbSB0aGVyZQor
ICAgIC8vIEhvd2V2ZXIsIHNheSB3ZSB3ZXJlIHdpdGhpbiBhIGZldyBodW5kcmVkIGJ5dGVzIG9m
IHRoZSBlbmQgb2YgYSBkb3dubG9hZCB3aGVuIGl0IHdhcyBwYXVzZWQgLQorICAgIC8vIFRoZSBh
ZGRpdGlvbmFsIGZvb3RlciBleHRlbmRlZCB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlIGJleW9uZCBp
dHMgZmluYWwgbGVuZ3RoLCBhbmQgdGhlcmUgd2lsbCBiZSBqdW5rIGRhdGEgbGVmdG92ZXIKKyAg
ICAvLyBhdCB0aGUgZW5kLiAgVGhlcmVmb3JlLCBub3cgdGhhdCB3ZSd2ZSByZXRyaWV2ZWQgdGhl
IGZvb3RlciBkYXRhLCB3ZSBuZWVkIHRvIHRydW5jYXRlIGl0LgorICAgIGlmIChlcnJub190IHJl
c2l6ZUVycm9yID0gX2Noc2l6ZV9zKF9maWxlbm8oYnVuZGxlKSwgZm9vdGVyU3RhcnRQb3NpdGlv
bikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdHJ1bmNhdGUgdGhlIHJlc3VtZSBm
b290ZXIgb2ZmIHRoZSBlbmQgb2YgdGhlIGZpbGUgLSBlcnJubyglaSkiLCByZXNpemVFcnJvcik7
CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCBtYWtlIHRoZSBy
ZXN1bWUgZGF0YS4gIE5vdywgaXQgaXMgcG9zc2libGUgYnkgc29tZSB0d2lzdCBvZiBmYXRlIHRo
ZSBidW5kbGUgbWFnaWMgbnVtYmVyCisgICAgLy8gd2FzIG5hdHVyYWxseSBhdCB0aGUgZW5kIG9m
IHRoZSBmaWxlIGFuZCBpdHMgbm90IGFjdHVhbGx5IGEgdmFsaWQgYnVuZGxlLiAgVGhhdCwgb3Ig
c29tZW9uZSBlbmdpbmVlcmVkCisgICAgLy8gaXQgdGhhdCB3YXkgdG8gdHJ5IHRvIGF0dGFjayB1
cy4gIEluIHRoYXQgY2F1c2UsIHRoaXMgQ0ZEYXRhIHdpbGwgc3VjY2Vzc2Z1bGx5IGNyZWF0ZSBi
dXQgd2hlbiB3ZSAKKyAgICAvLyBhY3R1YWxseSB0cnkgdG8gc3RhcnQgdGhlIENGVVJMRG93bmxv
YWQgdXNpbmcgdGhpcyBib2d1cyBkYXRhLCBpdCB3aWxsIGZhaWwgYW5kIHdlIHdpbGwgaGFuZGxl
IHRoYXQgZ3JhY2VmdWxseQorICAgIHJlc3VsdCA9IENGRGF0YUNyZWF0ZSgwLCBmb290ZXJCdWZm
ZXIuZGF0YSgpLCBmb290ZXJMZW5ndGgpOworZXhpdDoKKyAgICBmY2xvc2UoYnVuZGxlKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBEb3dubG9hZEJ1bmRsZQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggMWQ5MDc0My4uMWE1MmNi
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTAxLTI3ICBKb24gSG9u
ZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CisKKyAgICAgICAgRG93bmxvYWRzIGluIFdL
MiBvbiBXaW5kb3dzIHNob3VsZCB3cml0ZSByZXN1bWUgZGF0YSB0byBidW5kbGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjgyCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84NzUzMDc3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViRG93bmxvYWQuY3BwOgorICAgICAgICAoV2ViRG93bmxvYWQ6
OmJ1bmRsZVBhdGhGb3JUYXJnZXRQYXRoKToKKyAgICAgICAgVXNlIHRoZSBuZXcgV2ViQ29yZTo6
RG93bmxvYWRCdW5kbGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJEb3dubG9hZDo6cmVxdWVzdCk6
CisKKyAgICAgICAgKiBXZWJEb3dubG9hZC5oOgorICAgICAgICBSZW1vdmVkIGRlY2xhcmF0aW9u
cyBmb3IgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb3ZlZCB0byBhIG5ldyBsb2NhdGlvbi4KKworICAg
ICAgICAqIFdlYkRvd25sb2FkQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViRG93bmxvYWQ6OmluaXRU
b1Jlc3VtZVdpdGhCdW5kbGUpOgorICAgICAgICBVc2UgdGhlIG5ldyBXZWJDb3JlOjpEb3dubG9h
ZEJ1bmRsZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkRvd25sb2FkOjpjYW5jZWxGb3JSZXN1bWUp
OgorICAgICAgICBGaXggYSBsZWFrIG9mIHRoZSByZXN1bWUgZGF0YSBDRkRhdGFSZWYgYnkgdXNp
bmcgYWRvcHRDRigpLiBVc2UgdGhlIG5ldworICAgICAgICBXZWJDb3JlOjpEb3dubG9hZEJ1bmRs
ZSBmdW5jdGlvbi4KKwogMjAxMS0wMS0xNyAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJEb3dubG9hZC5jcHAKaW5kZXggZmM3MjIzMi4uNDVlMzZjYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYkRvd25sb2FkLmNwcApAQCAtMzgsMTIgKzM4LDkgQEAKICNpbmNsdWRlICJXZWJVUkxSZXNw
b25zZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2luY2x1ZGUgPGlvLmg+
Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQogI3ByYWdt
YSB3YXJuaW5nKHB1c2gsIDApCiAjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Eb3dubG9hZEJ1bmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CkBAIC01NSwxOCArNTIsNiBAQAogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAotLy8gRG93bmxvYWQgQnVuZGxlIGZpbGUgdXRpbGl0aWVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLWNvbnN0IFN0cmluZyYgV2ViRG93bmxvYWQ6OmJ1bmRsZUV4dGVuc2lvbigpCi17Ci0gICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgYnVuZGxlRXh0ZW5zaW9uLCAoIi5kb3du
bG9hZCIpKTsKLSAgIHJldHVybiBidW5kbGVFeHRlbnNpb247Ci19Ci0KLVVJbnQzMiBXZWJEb3du
bG9hZDo6YnVuZGxlTWFnaWNOdW1iZXIoKQotewotICAgcmV0dXJuIDB4REVDQUY0RUE7Ci19Ci0K
IC8vIFdlYkRvd25sb2FkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2ViRG93bmxvYWQ6OldlYkRvd25sb2FkKCkKQEAg
LTE2NSw3ICsxNTAsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjpi
dW5kbGVQYXRoRm9yVGFyZ2V0UGF0aCgKICAgICBpZiAoYnVuZGxlW2J1bmRsZS5sZW5ndGgoKS0x
XSA9PSAnLycpCiAgICAgICAgIGJ1bmRsZS50cnVuY2F0ZSgxKTsKIAotICAgIGJ1bmRsZSArPSBi
dW5kbGVFeHRlbnNpb24oKTsKKyAgICBidW5kbGUgKz0gRG93bmxvYWRCdW5kbGU6OmZpbGVFeHRl
bnNpb24oKTsKICAgICAqYnVuZGxlUGF0aCA9IFN5c0FsbG9jU3RyaW5nTGVuKGJ1bmRsZS5jaGFy
YWN0ZXJzKCksIGJ1bmRsZS5sZW5ndGgoKSk7CiAgICAgaWYgKCEqYnVuZGxlUGF0aCkKICAgICAg
ICByZXR1cm4gRV9GQUlMOwpAQCAtMTgyLDE0OCArMTY3LDMgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBXZWJEb3dubG9hZDo6cmVxdWVzdCgKICAgICB9CiAgICAgcmV0dXJuIFNfT0s7CiB9
Ci0KLS8vIERvd25sb2FkIEJ1bmRsZSBmaWxlIHV0aWxpdGllcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNGRGF0YVJl
ZiBXZWJEb3dubG9hZDo6ZXh0cmFjdFJlc3VtZURhdGFGcm9tQnVuZGxlKGNvbnN0IFN0cmluZyYg
YnVuZGxlUGF0aCkKLXsKLSAgICBpZiAoYnVuZGxlUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJDYW5ub3QgY3JlYXRlIHJlc3VtZSBkYXRhIGZyb20gZW1wdHkgZG93bmxvYWQg
YnVuZGxlIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIC8vIE9w
ZW4gYSBoYW5kbGUgdG8gdGhlIGJ1bmRsZSBmaWxlCi0gICAgU3RyaW5nIG51bGxpZmllZFBhdGgg
PSBidW5kbGVQYXRoOwotICAgIEZJTEUqIGJ1bmRsZSA9IDA7Ci0gICAgaWYgKF93Zm9wZW5fcygm
YnVuZGxlLCBudWxsaWZpZWRQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIFRF
WFQoInIrYiIpKSB8fCAhYnVuZGxlKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9w
ZW4gZmlsZSAlcyB0byBnZXQgcmVzdW1lIGRhdGEiLCBidW5kbGVQYXRoLmFzY2lpKCkuZGF0YSgp
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQ0ZEYXRhUmVmIHJlc3VsdCA9IDA7
Ci0gICAgVmVjdG9yPFVJbnQ4PiBmb290ZXJCdWZmZXI7Ci0gICAgCi0gICAgLy8gU3RhdCB0aGUg
ZmlsZSB0byBnZXQgaXRzIHNpemUKLSAgICBzdHJ1Y3QgX3N0YXQ2NCBmaWxlU3RhdDsKLSAgICBp
ZiAoX2ZzdGF0NjQoX2ZpbGVubyhidW5kbGUpLCAmZmlsZVN0YXQpKQotICAgICAgICBnb3RvIGV4
aXQ7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIHRoZSBidW5kbGUgbWFnaWMgbnVtYmVyIGF0IHRo
ZSBlbmQgb2YgdGhlIGZpbGUKLSAgICBmcG9zX3QgZm9vdGVyTWFnaWNOdW1iZXJQb3NpdGlvbiA9
IGZpbGVTdGF0LnN0X3NpemUgLSA0OwotICAgIEFTU0VSVChmb290ZXJNYWdpY051bWJlclBvc2l0
aW9uID49IDApOwotICAgIGlmIChmb290ZXJNYWdpY051bWJlclBvc2l0aW9uIDwgMCkKLSAgICAg
ICAgZ290byBleGl0OwotICAgIGlmIChmc2V0cG9zKGJ1bmRsZSwgJmZvb3Rlck1hZ2ljTnVtYmVy
UG9zaXRpb24pKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBVSW50MzIgZm9vdGVyTWFnaWNO
dW1iZXIgPSAwOwotICAgIGlmIChmcmVhZCgmZm9vdGVyTWFnaWNOdW1iZXIsIDQsIDEsIGJ1bmRs
ZSkgIT0gMSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZvb3RlciBtYWdp
YyBudW1iZXIgZnJvbSB0aGUgYnVuZGxlIC0gZXJybm8oJWkpIiwgZXJybm8pOyAgCi0gICAgICAg
IGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICBpZiAoZm9vdGVyTWFnaWNOdW1iZXIgIT0gYnVuZGxl
TWFnaWNOdW1iZXIoKSkgewotICAgICAgICBMT0dfRVJST1IoIkZvb3RlcidzIG1hZ2ljIG51bWJl
ciBkb2VzIG5vdCBtYXRjaCAweCVYIC0gZXJybm8oJWkpIiwgYnVuZGxlTWFnaWNOdW1iZXIoKSwg
ZXJybm8pOyAgCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICAvLyBOb3cgd2UncmUg
KnJlYXNvbmFibHkqIHN1cmUgdGhpcyBpcyBhIC5kb3dubG9hZCBidW5kbGUgd2UgYWN0dWFsbHkg
d3JvdGUuIAotICAgIC8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bWUgZGF0YQotICAgIGZw
b3NfdCBmb290ZXJMZW5ndGhQb3NpdGlvbiA9IGZpbGVTdGF0LnN0X3NpemUgLSA4OwotICAgIEFT
U0VSVChmb290ZXJMZW5ndGhQb3NpdGlvbiA+PSAwKTsKLSAgICBpZiAoZm9vdGVyTGVuZ3RoUG9z
aXRpb24gPCAwKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBpZiAoZnNldHBvcyhidW5kbGUs
ICZmb290ZXJMZW5ndGhQb3NpdGlvbikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIFVJbnQz
MiBmb290ZXJMZW5ndGggPSAwOwotICAgIGlmIChmcmVhZCgmZm9vdGVyTGVuZ3RoLCA0LCAxLCBi
dW5kbGUpICE9IDEpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBSZXN1bWVE
YXRhIGxlbmd0aCBmcm9tIHRoZSBidW5kbGUgLSBlcnJubyglaSkiLCBlcnJubyk7ICAKLSAgICAg
ICAgZ290byBleGl0OwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSB0aGVyZXMgZW5vdWdoIGJ5
dGVzIHRvIHJlYWQgaW4gZm9yIHRoZSByZXN1bWUgZGF0YSwgYW5kIHBlcmZvcm0gdGhlIHJlYWQK
LSAgICBmcG9zX3QgZm9vdGVyU3RhcnRQb3NpdGlvbiA9IGZpbGVTdGF0LnN0X3NpemUgLSA4IC0g
Zm9vdGVyTGVuZ3RoOwotICAgIEFTU0VSVChmb290ZXJTdGFydFBvc2l0aW9uID49IDApOwotICAg
IGlmIChmb290ZXJTdGFydFBvc2l0aW9uIDwgMCkKLSAgICAgICAgZ290byBleGl0OwotICAgIGlm
IChmc2V0cG9zKGJ1bmRsZSwgJmZvb3RlclN0YXJ0UG9zaXRpb24pKQotICAgICAgICBnb3RvIGV4
aXQ7Ci0KLSAgICBmb290ZXJCdWZmZXIucmVzaXplKGZvb3Rlckxlbmd0aCk7Ci0gICAgaWYgKGZy
ZWFkKGZvb3RlckJ1ZmZlci5kYXRhKCksIDEsIGZvb3Rlckxlbmd0aCwgYnVuZGxlKSAhPSBmb290
ZXJMZW5ndGgpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBSZXN1bWVEYXRh
IGZyb20gdGhlIGJ1bmRsZSAtIGVycm5vKCVpKSIsIGVycm5vKTsgIAotICAgICAgICBnb3RvIGV4
aXQ7Ci0gICAgfQotCi0gICAgLy8gQ0ZVUkxEb3dubG9hZCB3aWxsIHNlZWsgdG8gdGhlIGFwcHJv
cHJpYXRlIHBsYWNlIGluIHRoZSBmaWxlIChiZWZvcmUgb3VyIGZvb3RlcikgYW5kIHN0YXJ0IG92
ZXJ3cml0aW5nIGZyb20gdGhlcmUKLSAgICAvLyBIb3dldmVyLCBzYXkgd2Ugd2VyZSB3aXRoaW4g
YSBmZXcgaHVuZHJlZCBieXRlcyBvZiB0aGUgZW5kIG9mIGEgZG93bmxvYWQgd2hlbiBpdCB3YXMg
cGF1c2VkIC0KLSAgICAvLyBUaGUgYWRkaXRpb25hbCBmb290ZXIgZXh0ZW5kZWQgdGhlIGxlbmd0
aCBvZiB0aGUgZmlsZSBiZXlvbmQgaXRzIGZpbmFsIGxlbmd0aCwgYW5kIHRoZXJlIHdpbGwgYmUg
anVuayBkYXRhIGxlZnRvdmVyCi0gICAgLy8gYXQgdGhlIGVuZC4gIFRoZXJlZm9yZSwgbm93IHRo
YXQgd2UndmUgcmV0cmlldmVkIHRoZSBmb290ZXIgZGF0YSwgd2UgbmVlZCB0byB0cnVuY2F0ZSBp
dC4KLSAgICBpZiAoZXJybm9fdCByZXNpemVFcnJvciA9IF9jaHNpemVfcyhfZmlsZW5vKGJ1bmRs
ZSksIGZvb3RlclN0YXJ0UG9zaXRpb24pKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHRydW5jYXRlIHRoZSByZXN1bWUgZm9vdGVyIG9mZiB0aGUgZW5kIG9mIHRoZSBmaWxlIC0gZXJy
bm8oJWkpIiwgcmVzaXplRXJyb3IpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAg
Ly8gRmluYWxseSwgbWFrZSB0aGUgcmVzdW1lIGRhdGEuICBOb3csIGl0IGlzIHBvc3NpYmxlIGJ5
IHNvbWUgdHdpc3Qgb2YgZmF0ZSB0aGUgYnVuZGxlIG1hZ2ljIG51bWJlcgotICAgIC8vIHdhcyBu
YXR1cmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgaXRzIG5vdCBhY3R1YWxseSBhIHZh
bGlkIGJ1bmRsZS4gIFRoYXQsIG9yIHNvbWVvbmUgZW5naW5lZXJlZAotICAgIC8vIGl0IHRoYXQg
d2F5IHRvIHRyeSB0byBhdHRhY2sgdXMuICBJbiB0aGF0IGNhdXNlLCB0aGlzIENGRGF0YSB3aWxs
IHN1Y2Nlc3NmdWxseSBjcmVhdGUgYnV0IHdoZW4gd2UgCi0gICAgLy8gYWN0dWFsbHkgdHJ5IHRv
IHN0YXJ0IHRoZSBDRlVSTERvd25sb2FkIHVzaW5nIHRoaXMgYm9ndXMgZGF0YSwgaXQgd2lsbCBm
YWlsIGFuZCB3ZSB3aWxsIGhhbmRsZSB0aGF0IGdyYWNlZnVsbHkKLSAgICByZXN1bHQgPSBDRkRh
dGFDcmVhdGUoMCwgZm9vdGVyQnVmZmVyLmRhdGEoKSwgZm9vdGVyTGVuZ3RoKTsKLWV4aXQ6Ci0g
ICAgZmNsb3NlKGJ1bmRsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSFJFU1VMVCBXZWJE
b3dubG9hZDo6YXBwZW5kUmVzdW1lRGF0YVRvQnVuZGxlKENGRGF0YVJlZiByZXN1bWVEYXRhLCBj
b25zdCBTdHJpbmcmIGJ1bmRsZVBhdGgpCi17Ci0gICAgaWYgKCFyZXN1bWVEYXRhKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiSW52YWxpZCByZXN1bWUgZGF0YSB0byB3cml0ZSB0byBidW5kbGUgcGF0
aCIpOwotICAgICAgICByZXR1cm4gRV9GQUlMOwotICAgIH0KLSAgICBpZiAoYnVuZGxlUGF0aC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDYW5ub3Qgd3JpdGUgcmVzdW1lIGRhdGEg
dG8gZW1wdHkgZG93bmxvYWQgYnVuZGxlIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIEVfRkFJTDsK
LSAgICB9Ci0KLSAgICBTdHJpbmcgbnVsbGlmaWVkUGF0aCA9IGJ1bmRsZVBhdGg7Ci0gICAgRklM
RSogYnVuZGxlID0gMDsKLSAgICBpZiAoX3dmb3Blbl9zKCZidW5kbGUsIG51bGxpZmllZFBhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgVEVYVCgiYWIiKSkgfHwgIWJ1bmRsZSkg
ewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGZpbGUgJXMgdG8gYXBwZW5kIHJl
c3VtZSBkYXRhIiwgYnVuZGxlUGF0aC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBF
X0ZBSUw7Ci0gICAgfQotCi0gICAgSFJFU1VMVCBociA9IEVfRkFJTDsKLQotICAgIGNvbnN0IFVJ
bnQ4KiByZXN1bWVCeXRlcyA9IENGRGF0YUdldEJ5dGVQdHIocmVzdW1lRGF0YSk7Ci0gICAgQVNT
RVJUKHJlc3VtZUJ5dGVzKTsKLSAgICBpZiAoIXJlc3VtZUJ5dGVzKQotICAgICAgICBnb3RvIGV4
aXQ7Ci0KLSAgICBVSW50MzIgcmVzdW1lTGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKHJlc3VtZURh
dGEpOwotICAgIEFTU0VSVChyZXN1bWVMZW5ndGggPiAwKTsKLSAgICBpZiAocmVzdW1lTGVuZ3Ro
IDwgMSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgaWYgKGZ3cml0ZShyZXN1bWVCeXRlcywg
MSwgcmVzdW1lTGVuZ3RoLCBidW5kbGUpICE9IHJlc3VtZUxlbmd0aCkgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byB3cml0ZSByZXN1bWUgZGF0YSB0byB0aGUgYnVuZGxlIC0gZXJybm8o
JWkpIiwgZXJybm8pOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgaWYgKGZ3cml0
ZSgmcmVzdW1lTGVuZ3RoLCA0LCAxLCBidW5kbGUpICE9IDEpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gd3JpdGUgZm9vdGVyIGxlbmd0aCB0byB0aGUgYnVuZGxlIC0gZXJybm8oJWkp
IiwgZXJybm8pOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgY29uc3QgVUludDMy
JiBtYWdpYyA9IGJ1bmRsZU1hZ2ljTnVtYmVyKCk7Ci0gICAgaWYgKGZ3cml0ZSgmbWFnaWMsIDQs
IDEsIGJ1bmRsZSkgIT0gMSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3cml0ZSBm
b290ZXIgbWFnaWMgbnVtYmVyIHRvIHRoZSBidW5kbGUgLSBlcnJubyglaSkiLCBlcnJubyk7Ci0g
ICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0gICAgCi0gICAgaHIgPSBTX09LOwotZXhpdDoKLSAg
ICBmY2xvc2UoYnVuZGxlKTsKLSAgICByZXR1cm4gaHI7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJEb3dubG9hZC5oIGIvU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQu
aAppbmRleCBiYmI2NDVlLi4zZThlNzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJEb3dubG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkLmgKQEAgLTEy
MiwxMSArMTIyLDYgQEAgcHVibGljOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMg
Q0ZEYXRhUmVmIGV4dHJhY3RSZXN1bWVEYXRhRnJvbUJ1bmRsZShjb25zdCBXVEY6OlN0cmluZyYp
OwotICAgIHN0YXRpYyBIUkVTVUxUIGFwcGVuZFJlc3VtZURhdGFUb0J1bmRsZShDRkRhdGFSZWYs
IGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgc3RhdGljIGNvbnN0IFdURjo6U3RyaW5nJiBidW5k
bGVFeHRlbnNpb24oKTsKLSAgICBzdGF0aWMgVUludDMyIGJ1bmRsZU1hZ2ljTnVtYmVyKCk7Ci0K
ICAgICBVTE9ORyBtX3JlZkNvdW50OwogCiAgICAgV1RGOjpTdHJpbmcgbV9kZXN0aW5hdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkQ0ZOZXQuY3BwIGIvU291
cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWRDRk5ldC5jcHAKaW5kZXggYTE5OTMxNS4uNWExZjFi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWRDRk5ldC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWRDRk5ldC5jcHAKQEAgLTQ4LDYgKzQ4LDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ0YuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0JTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWxTdG9yYWdlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Eb3dubG9hZEJ1bmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9h
ZGVyUnVuTG9vcENGLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgpAQCAtMTY3LDggKzE2OCw4IEBAIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmluaXRUb1Jlc3VtZVdpdGhCdW5kbGUo
CiB7CiAgICAgTE9HKERvd25sb2FkLCAiQXR0ZW1wdGluZyByZXN1bWUgb2YgZG93bmxvYWQgYnVu
ZGxlICVzIiwgU3RyaW5nKGJ1bmRsZVBhdGgsIFN5c1N0cmluZ0xlbihidW5kbGVQYXRoKSkuYXNj
aWkoKS5kYXRhKCkpOwogCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcmVzdW1lRGF0YShBZG9w
dENGLCBleHRyYWN0UmVzdW1lRGF0YUZyb21CdW5kbGUoU3RyaW5nKGJ1bmRsZVBhdGgsIFN5c1N0
cmluZ0xlbihidW5kbGVQYXRoKSkpKTsKLSAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBy
ZXN1bWVEYXRhKEFkb3B0Q0YsIERvd25sb2FkQnVuZGxlOjpleHRyYWN0UmVzdW1lRGF0YShTdHJp
bmcoYnVuZGxlUGF0aCwgU3lzU3RyaW5nTGVuKGJ1bmRsZVBhdGgpKSkpOworCiAgICAgaWYgKCFy
ZXN1bWVEYXRhKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCkBAIC0xOTQsOSArMTk1LDkgQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEb3dubG9hZDo6aW5pdFRvUmVzdW1lV2l0aEJ1
bmRsZSgKICAgICBtX2J1bmRsZVBhdGggPSBTdHJpbmcoYnVuZGxlUGF0aCwgU3lzU3RyaW5nTGVu
KGJ1bmRsZVBhdGgpKTsKICAgICAvLyBBdHRlbXB0IHRvIHJlbW92ZSB0aGUgIi5kb3dubG9hZCIg
ZXh0ZW5zaW9uIGZyb20gdGhlIGJ1bmRsZSBmb3IgdGhlIGZpbmFsIGZpbGUgZGVzdGluYXRpb24K
ICAgICAvLyBGYWlsaW5nIHRoYXQsIHdlIGNsZWFyIG1fZGVzdGluYXRpb24gYW5kIHdpbGwgYXNr
IHRoZSBkZWxlZ2F0ZSBsYXRlciBvbmNlIHRoZSBkb3dubG9hZCBzdGFydHMKLSAgICBpZiAobV9i
dW5kbGVQYXRoLmVuZHNXaXRoKGJ1bmRsZUV4dGVuc2lvbigpLCBmYWxzZSkpIHsKKyAgICBpZiAo
bV9idW5kbGVQYXRoLmVuZHNXaXRoKERvd25sb2FkQnVuZGxlOjpmaWxlRXh0ZW5zaW9uKCksIGZh
bHNlKSkgewogICAgICAgICBtX2Rlc3RpbmF0aW9uID0gbV9idW5kbGVQYXRoLnRocmVhZHNhZmVD
b3B5KCk7Ci0gICAgICAgIG1fZGVzdGluYXRpb24udHJ1bmNhdGUobV9kZXN0aW5hdGlvbi5sZW5n
dGgoKSAtIGJ1bmRsZUV4dGVuc2lvbigpLmxlbmd0aCgpKTsKKyAgICAgICAgbV9kZXN0aW5hdGlv
bi50cnVuY2F0ZShtX2Rlc3RpbmF0aW9uLmxlbmd0aCgpIC0gRG93bmxvYWRCdW5kbGU6OmZpbGVF
eHRlbnNpb24oKS5sZW5ndGgoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fZGVzdGluYXRpb24g
PSBTdHJpbmcoKTsKICAgICAKQEAgLTI0OSwxNCArMjUwLDE0IEBAIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViRG93bmxvYWQ6OmNhbmNlbEZvclJlc3VtZSgpCiAgICAgQ0ZVUkxEb3dubG9h
ZFNldERlbGV0ZXNVcG9uRmFpbHVyZShtX2Rvd25sb2FkLmdldCgpLCBmYWxzZSk7CiAgICAgQ0ZV
UkxEb3dubG9hZENhbmNlbChtX2Rvd25sb2FkLmdldCgpKTsKIAotICAgIHJlc3VtZURhdGEgPSBD
RlVSTERvd25sb2FkQ29weVJlc3VtZURhdGEobV9kb3dubG9hZC5nZXQoKSk7CisgICAgcmVzdW1l
RGF0YS5hZG9wdENGKENGVVJMRG93bmxvYWRDb3B5UmVzdW1lRGF0YShtX2Rvd25sb2FkLmdldCgp
KSk7CiAgICAgaWYgKCFyZXN1bWVEYXRhKSB7CiAgICAgICAgIExPRyhEb3dubG9hZCwgIldlYkRv
d25sb2FkIC0gVW5hYmxlIHRvIGNyZWF0ZSByZXN1bWUgZGF0YSBmb3IgZG93bmxvYWQgKCVwKSIs
IHRoaXMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCi0gICAgYXBwZW5kUmVzdW1lRGF0
YVRvQnVuZGxlKHJlc3VtZURhdGEuZ2V0KCksIG1fYnVuZGxlUGF0aCk7Ci0gICAKKyAgICBEb3du
bG9hZEJ1bmRsZTo6YXBwZW5kUmVzdW1lRGF0YShyZXN1bWVEYXRhLmdldCgpLCBtX2J1bmRsZVBh
dGgpOworCiBleGl0OgogICAgIG1fZG93bmxvYWQgPSAwOwogICAgIHJldHVybiBocjsKQEAgLTI4
OCw3ICsyODksNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjpzZXRE
ZXN0aW5hdGlvbigKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAogICAgIG1fZGVzdGluYXRpb24g
PSBTdHJpbmcocGF0aCwgU3lzU3RyaW5nTGVuKHBhdGgpKTsKLSAgICBtX2J1bmRsZVBhdGggPSBt
X2Rlc3RpbmF0aW9uICsgYnVuZGxlRXh0ZW5zaW9uKCk7CisgICAgbV9idW5kbGVQYXRoID0gbV9k
ZXN0aW5hdGlvbiArIERvd25sb2FkQnVuZGxlOjpmaWxlRXh0ZW5zaW9uKCk7CiAKICAgICBDRlVS
TFJlZiBwYXRoVVJMID0gTWFyc2hhbGxpbmdIZWxwZXJzOjpQYXRoU3RyaW5nVG9GaWxlQ0ZVUkxS
ZWYobV9idW5kbGVQYXRoKTsKICAgICBDRlVSTERvd25sb2FkU2V0RGVzdGluYXRpb24obV9kb3du
bG9hZC5nZXQoKSwgcGF0aFVSTCwgISFhbGxvd092ZXJ3cml0ZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzgz
NmNmYS4uNmQ5MGFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDExLTAxLTI3ICBK
b24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBhcHBsZS5jb20+CisKKyAgICAgICAgRG93bmxvYWRz
IGluIFdLMiBvbiBXaW5kb3dzIHNob3VsZCB3cml0ZSByZXN1bWUgZGF0YSB0byBidW5kbGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjgyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS84NzUzMDc3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWUpOgorICAgICAgICBDYWxsIGRpZERlY2lkZURlc3RpbmF0aW9uKCksIG5vdyB0
aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBkZWNpZGVkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgRGVjbGFyZSBkaWREZWNpZGVEZXN0aW5hdGlv
bigpLiBBZGRlZCBtZW1iZXIgdmFyaWFibGVzIHRvIGhvbGQgdGhlCisgICAgICAgIGRlc3RpbmF0
aW9uIGZpbGUgcGF0aCBhbmQgdGhlIGRvd25sb2FkIGJ1bmRsZSBwYXRoLgorICAgICAgICAoV2Vi
S2l0OjpEb3dubG9hZDo6ZGVzdGluYXRpb24pOgorICAgICAgICBSZXR1cm4gdGhlIHBhdGggdG8g
dGhlIGZpbmFsIGRlc3RpbmF0aW9uIGZvciB0aGlzIGRvd25sb2FkLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9Eb3dubG9hZHMvY2YvRG93bmxvYWRDRk5ldC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkRvd25sb2FkOjpzdGFydCk6CisgICAgICAgIFJlbW92ZSB0aGUgbmFtZSBvZiBhbiB1bnVzZWQg
cGFyYW0uCisgICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUpOgorICAg
ICAgICBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAg
IFRlbGwgQ0ZOZXR3b3JrIG5vdCB0byBkZWxldGUgdGhlIGZpbGUgdXBvbiBmYWlsdXJlLCBhbmQg
dGVsbCBpdCB0bworICAgICAgICBjYW5jZWwgdGhlIGRvd25sb2FkLiBDb3B5IHRoZSByZXN1bWUg
ZGF0YSBmb3IgdGhlIGRvd25sb2FkLCBhbmQgYXBwZW5kCisgICAgICAgIGl0IHRvIHRoZSBkb3du
bG9hZCBidW5kbGUuIENhbGwgZGlkQ2FuY2VsKCkgd2l0aCBhbiBlbXB0eQorICAgICAgICBEYXRh
UmVmZXJlbmNlLCBzaW5jZSB3ZSBoYXZlIHdyaXR0ZW4gb3VyIG93biByZXN1bWUgZGF0YS4KKyAg
ICAgICAgKFdlYktpdDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkT2JqZWN0TmFtZUNh
bGxiYWNrKToKKyAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkIHBhcmFtIG5hbWVzLiBSZW1vdmVk
IHRoZSBjYWxsIHRvCisgICAgICAgIENGVVJMRG93bmxvYWRTZXREZXN0aW5hdGlvbigpIC0gdGhp
cyBpcyBub3cgaGFuZGxlZCBpbgorICAgICAgICBEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRp
b24oKS4KKyAgICAgICAgKFdlYktpdDo6ZGlkQ3JlYXRlRGVzdGluYXRpb25DYWxsYmFjayk6Cisg
ICAgICAgIFJlcG9ydCB0aGF0IHRoZSBmaW5hbCBkZXN0aW5hdGlvbiB3YXMgY3JlYXRlZCwgcmF0
aGVyIHRoYW4gdGhlIGRvd25sb2FkCisgICAgICAgIGJ1bmRsZSwgbWF0Y2hpbmcgb2xkIFdlYktp
dC4KKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmRpZERlY2lkZURlc3RpbmF0aW9uKToKKyAg
ICAgICAgU3RvcmUgdGhlIGZpbmFsIGRlc3RpbmF0aW9uIGFuZCB0aGUgZG93bmxvYWQgYnVuZGxl
IHBhdGhzLCBhbmQgY2FsbAorICAgICAgICBDRlVSTERvd25sb2FkU2V0RGVzdGluYXRpb24oKSwg
cGFzc2luZyB0aGUgcGF0aCB0byB0aGUgZG93bmxvYWQgYnVuZGxlLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9Eb3dubG9hZHMvY3VybC9Eb3dubG9hZEN1cmwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24pOgorICAgICAgICBTdHViYmVkLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24pOgorICAgICAgICBTdHVi
YmVkIC0gdW5uZWVkZWQgb24gdGhlIE1hYy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvRG93bmxv
YWRzL3F0L0Rvd25sb2FkUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6ZGlkRGVj
aWRlRGVzdGluYXRpb24pOgorICAgICAgICBTdHViYmVkLgorCiAyMDExLTAxLTE3ICBUb255IEdl
bnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxl
eGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxv
YWRzL0Rvd25sb2FkLmNwcAppbmRleCAzY2I1NTg4Li45YThlYjViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCkBAIC05NCw2ICs5NCw4
IEBAIFN0cmluZyBEb3dubG9hZDo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5h
bWUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwKICAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKQog
ICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24tPmNvbnN1bWUoKTsKIAorICAgIGRpZERlY2lkZURl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uLCBhbGxvd092ZXJ3cml0ZSk7CisKICAgICByZXR1cm4gZGVz
dGluYXRpb247CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZC5oCmluZGV4IDIzMTllYzcuLmMwMThmZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmgKQEAgLTg3LDYgKzg3LDExIEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRpZEZpbmlzaCgpOwogICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiwgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgcmVzdW1lRGF0
YSk7CiAgICAgdm9pZCBkaWRDYW5jZWwoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgcmVz
dW1lRGF0YSk7CisgICAgdm9pZCBkaWREZWNpZGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmLCBi
b29sIGFsbG93T3ZlcndyaXRlKTsKKworI2lmIFVTRShDRk5FVFdPUkspCisgICAgY29uc3QgU3Ry
aW5nJiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyNlbmRp
ZgogCiBwcml2YXRlOgogICAgIERvd25sb2FkKHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwpAQCAtMTAzLDYgKzEwOCw4IEBAIHByaXZhdGU6CiAg
ICAgUmV0YWluUHRyPFdLRG93bmxvYWRBc0RlbGVnYXRlPiBtX2RlbGVnYXRlOwogI2VuZGlmCiAj
aWYgVVNFKENGTkVUV09SSykKKyAgICBTdHJpbmcgbV9kZXN0aW5hdGlvbjsKKyAgICBTdHJpbmcg
bV9idW5kbGVQYXRoOwogICAgIFJldGFpblB0cjxDRlVSTERvd25sb2FkUmVmPiBtX2Rvd25sb2Fk
OwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3du
bG9hZHMvY2YvRG93bmxvYWRDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rv
d25sb2Fkcy9jZi9Eb3dubG9hZENGTmV0LmNwcAppbmRleCAwOGMzODFmLi42MGE1YTgzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9jZi9Eb3dubG9hZENG
TmV0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9jZi9Eb3du
bG9hZENGTmV0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKICNwcmFnbWEgd2FybmluZyhwdXNoLCAwKQorI2luY2x1ZGUgPFdlYkNvcmUvRG93bmxv
YWRCdW5kbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xvYWRlclJ1bkxvb3BDRi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VI
YW5kbGUuaD4KQEAgLTUyLDcgKzUzLDcgQEAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRp
b25DYWxsYmFjayhDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkLCBDRlVSTFJlZiBwYXQKIHN0YXRp
YyB2b2lkIGRpZEZpbmlzaENhbGxiYWNrKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWQsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwogc3RhdGljIHZvaWQgZGlkRmFpbENhbGxiYWNrKENGVVJMRG93
bmxvYWRSZWYgZG93bmxvYWQsIENGRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOwogCi12b2lkIERvd25sb2FkOjpzdGFydChXZWJQYWdlKiBpbml0aWF0aW5nV2ViUGFnZSkK
K3ZvaWQgRG93bmxvYWQ6OnN0YXJ0KFdlYlBhZ2UqKQogewogICAgIEFTU0VSVCghbV9kb3dubG9h
ZCk7CiAKQEAgLTcwLDcgKzcxLDcgQEAgdm9pZCBEb3dubG9hZDo6c3RhcnQoV2ViUGFnZSogaW5p
dGlhdGluZ1dlYlBhZ2UpCiAgICAgQ0ZVUkxEb3dubG9hZFNjaGVkdWxlRG93bmxvYWRXaXRoUnVu
TG9vcChtX2Rvd25sb2FkLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSk7CiB9CiAKLXZvaWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShXZWJQYWdlKiBpbml0
aWF0aW5nUGFnZSwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBpbml0aWFsUmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lk
IERvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUoV2ViUGFnZSosIFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgaW5pdGlhbFJlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIEFTU0VSVCghbV9kb3dubG9hZCk7CiAKQEAgLTk4
LDcgKzk5LDE4IEBAIHZvaWQgRG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShXZWJQYWdlKiBpbml0
aWF0aW5nUGFnZSwgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwKIAogdm9pZCBEb3dubG9hZDo6Y2Fu
Y2VsKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChtX2Rvd25sb2FkKTsK
KyAgICBpZiAoIW1fZG93bmxvYWQpCisgICAgICAgIHJldHVybjsKKworICAgIENGVVJMRG93bmxv
YWRTZXREZWxldGVzVXBvbkZhaWx1cmUobV9kb3dubG9hZC5nZXQoKSwgZmFsc2UpOworICAgIENG
VVJMRG93bmxvYWRDYW5jZWwobV9kb3dubG9hZC5nZXQoKSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiByZXN1bWVEYXRhKEFkb3B0Q0YsIENGVVJMRG93bmxvYWRDb3B5UmVzdW1lRGF0YSht
X2Rvd25sb2FkLmdldCgpKSk7CisgICAgaWYgKHJlc3VtZURhdGEpCisgICAgICAgIERvd25sb2Fk
QnVuZGxlOjphcHBlbmRSZXN1bWVEYXRhKHJlc3VtZURhdGEuZ2V0KCksIG1fYnVuZGxlUGF0aCk7
CisKKyAgICBkaWRDYW5jZWwoQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSgpKTsKIH0KIAogdm9pZCBE
b3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKQEAgLTE1MSwyNCArMTYzLDM0IEBAIEJvb2xl
YW4gc2hvdWxkRGVjb2RlRGF0YU9mTUlNRVR5cGVDYWxsYmFjayhDRlVSTERvd25sb2FkUmVmLCBD
RlN0cmluZ1JlZiBlbmNvZGluCiAgICAgcmV0dXJuIGRvd25sb2FkRnJvbUNsaWVudEluZm8oY2xp
ZW50SW5mbyktPnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKGVuY29kaW5nVHlwZSk7
CiB9CiAKLXZvaWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkT2JqZWN0TmFtZUNhbGxi
YWNrKENGVVJMRG93bmxvYWRSZWYgY2ZVUkxEb3dubG9hZFJlZiwgQ0ZTdHJpbmdSZWYgb2JqZWN0
TmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3ZvaWQgZGVjaWRlRGVzdGluYXRpb25XaXRo
U3VnZ2VzdGVkT2JqZWN0TmFtZUNhbGxiYWNrKENGVVJMRG93bmxvYWRSZWYsIENGU3RyaW5nUmVm
IG9iamVjdE5hbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7IAogICAgIERvd25sb2FkKiBk
b3dubG9hZCA9IGRvd25sb2FkRnJvbUNsaWVudEluZm8oY2xpZW50SW5mbyk7CiAgICAgYm9vbCBh
bGxvd092ZXJ3cml0ZTsKLSAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBkb3dubG9hZC0+ZGVjaWRl
RGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUob2JqZWN0TmFtZSwgYWxsb3dPdmVyd3Jp
dGUpOwotICAgIGlmIChkZXN0aW5hdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGRvd25sb2FkLT5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShvYmplY3RO
YW1lLCBhbGxvd092ZXJ3cml0ZSk7Cit9CiAKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNm
UGF0aChBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5KDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGRlc3RpbmF0aW9uLmNoYXJhY3RlcnMoKSksIGRl
c3RpbmF0aW9uLmxlbmd0aCgpLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7Ci0gICAgUmV0YWluUHRyPENG
VVJMUmVmPiBwYXRoVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAs
IGNmUGF0aC5nZXQoKSwga0NGVVJMV2luZG93c1BhdGhTdHlsZSwgZmFsc2UpKTsKLSAgICBDRlVS
TERvd25sb2FkU2V0RGVzdGluYXRpb24oY2ZVUkxEb3dubG9hZFJlZiwgcGF0aFVSTC5nZXQoKSwg
YWxsb3dPdmVyd3JpdGUpOwordm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbkNhbGxiYWNrKENGVVJM
RG93bmxvYWRSZWYsIENGVVJMUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIC8v
IFRoZSBjb25jZXB0IG9mIHRoZSAiLmRvd25sb2FkIGJ1bmRsZSIgaXMgaW50ZXJuYWwgdG8gdGhl
IERvd25sb2FkLCBzbyB3ZSB0cnkgdG8gaGlkZSBpdHMKKyAgICAvLyBleGlzdGVuY2UgYnkgcmVw
b3J0aW5nIHRoZSBmaW5hbCBkZXN0aW5hdGlvbiB3YXMgY3JlYXRlZCwgd2hlbiBpbiByZWFsaXR5
IHRoZSBidW5kbGUgd2FzIGNyZWF0ZWQuCisKKyAgICBEb3dubG9hZCogZG93bmxvYWQgPSBkb3du
bG9hZEZyb21DbGllbnRJbmZvKGNsaWVudEluZm8pOworICAgIGRvd25sb2FkLT5kaWRDcmVhdGVE
ZXN0aW5hdGlvbihkb3dubG9hZC0+ZGVzdGluYXRpb24oKSk7CiB9CiAKLXZvaWQgZGlkQ3JlYXRl
RGVzdGluYXRpb25DYWxsYmFjayhDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlZiB1cmwsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCi17IAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0aChB
ZG9wdENGLCBDRlVSTENvcHlGaWxlU3lzdGVtUGF0aCh1cmwsIGtDRlVSTFdpbmRvd3NQYXRoU3R5
bGUpKTsKLSAgICBTdHJpbmcgcmVzdWx0KHBhdGguZ2V0KCkpOwotICAgIGRvd25sb2FkRnJvbUNs
aWVudEluZm8oY2xpZW50SW5mbyktPmRpZENyZWF0ZURlc3RpbmF0aW9uKHJlc3VsdCk7Cit2b2lk
IERvd25sb2FkOjpkaWREZWNpZGVEZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9u
LCBib29sIGFsbG93T3ZlcndyaXRlKQoreworICAgIEFTU0VSVCghZGVzdGluYXRpb24uaXNFbXB0
eSgpKTsKKyAgICBpZiAoZGVzdGluYXRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2Rlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CisgICAgbV9idW5kbGVQYXRoID0gZGVz
dGluYXRpb24gKyBEb3dubG9hZEJ1bmRsZTo6ZmlsZUV4dGVuc2lvbigpOworCisgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBidW5kbGVQYXRoKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obV9idW5k
bGVQYXRoLmNoYXJhY3RlcnMoKSksIG1fYnVuZGxlUGF0aC5sZW5ndGgoKSwga0NGQWxsb2NhdG9y
TnVsbCkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gYnVuZGxlUGF0aFVSTChBZG9wdENGLCBD
RlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBidW5kbGVQYXRoLmdldCgpLCBrQ0ZVUkxX
aW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOworICAgIENGVVJMRG93bmxvYWRTZXREZXN0aW5hdGlv
bihtX2Rvd25sb2FkLmdldCgpLCBidW5kbGVQYXRoVVJMLmdldCgpLCBhbGxvd092ZXJ3cml0ZSk7
CiB9CiAKIHZvaWQgZGlkRmluaXNoQ2FsbGJhY2soQ0ZVUkxEb3dubG9hZFJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93
bmxvYWRzL2N1cmwvRG93bmxvYWRDdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
RG93bmxvYWRzL2N1cmwvRG93bmxvYWRDdXJsLmNwcAppbmRleCAyNWVkMzUxLi5kYjc1YjBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9jdXJsL0Rvd25s
b2FkQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvY3Vy
bC9Eb3dubG9hZEN1cmwuY3BwCkBAIC01Miw0ICs1Miw5IEBAIHZvaWQgRG93bmxvYWQ6OnBsYXRm
b3JtSW52YWxpZGF0ZSgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBEb3dubG9h
ZDo6ZGlkRGVjaWRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbiwgYm9vbCBh
bGxvd092ZXJ3cml0ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxv
YWRzL21hYy9Eb3dubG9hZE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRG93bmxv
YWRzL21hYy9Eb3dubG9hZE1hYy5tbQppbmRleCA2ODM5MDIwLi5lYTYwYzMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9tYWMvRG93bmxvYWRNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Eb3dubG9hZHMvbWFjL0Rvd25sb2FkTWFj
Lm1tCkBAIC0xNjgsNiArMTY4LDEwIEBAIHZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtSW52YWxpZGF0
ZSgpCiAgICAgbV9uc1VSTERvd25sb2FkID0gbnVsbHB0cjsKIH0KIAordm9pZCBEb3dubG9hZDo6
ZGlkRGVjaWRlRGVzdGluYXRpb24oY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbiwgYm9vbCBhbGxv
d092ZXJ3cml0ZSkKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKIEBpbXBsZW1lbnRh
dGlvbiBXS0Rvd25sb2FkQXNEZWxlZ2F0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9Eb3dubG9hZHMvcXQvRG93bmxvYWRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0Rvd25sb2Fkcy9xdC9Eb3dubG9hZFF0LmNwcAppbmRleCAzNGZkNjBlLi5jOTA2MTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9Eb3du
bG9hZFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rvd25sb2Fkcy9xdC9E
b3dubG9hZFF0LmNwcApAQCAtNTEsNCArNTEsOSBAQCB2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUlu
dmFsaWRhdGUoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgRG93bmxvYWQ6OmRp
ZERlY2lkZURlc3RpbmF0aW9uKGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24sIGJvb2wgYWxsb3dP
dmVyd3JpdGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0tIAoxLjcuMy4yLjE2NC5nNmYxMGMuZGlydHkKCg==
</data>
<flag name="review"
          id="71964"
          type_id="1"
          status="+"
          setter="alice.barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>